'use strict';
							 | 
						|
								const {
							 | 
						|
								  VOID, PRIMITIVE, ARRAY, OBJECT, DATE, REGEXP, MAP, SET, ERROR, BIGINT
							 | 
						|
								} = require('./types.js');
							 | 
						|
								
							 | 
						|
								const env = typeof self === 'object' ? self : globalThis;
							 | 
						|
								
							 | 
						|
								const deserializer = ($, _) => {
							 | 
						|
								  const as = (out, index) => {
							 | 
						|
								    $.set(index, out);
							 | 
						|
								    return out;
							 | 
						|
								  };
							 | 
						|
								
							 | 
						|
								  const unpair = index => {
							 | 
						|
								    if ($.has(index))
							 | 
						|
								      return $.get(index);
							 | 
						|
								
							 | 
						|
								    const [type, value] = _[index];
							 | 
						|
								    switch (type) {
							 | 
						|
								      case PRIMITIVE:
							 | 
						|
								      case VOID:
							 | 
						|
								        return as(value, index);
							 | 
						|
								      case ARRAY: {
							 | 
						|
								        const arr = as([], index);
							 | 
						|
								        for (const index of value)
							 | 
						|
								          arr.push(unpair(index));
							 | 
						|
								        return arr;
							 | 
						|
								      }
							 | 
						|
								      case OBJECT: {
							 | 
						|
								        const object = as({}, index);
							 | 
						|
								        for (const [key, index] of value)
							 | 
						|
								          object[unpair(key)] = unpair(index);
							 | 
						|
								        return object;
							 | 
						|
								      }
							 | 
						|
								      case DATE:
							 | 
						|
								        return as(new Date(value), index);
							 | 
						|
								      case REGEXP: {
							 | 
						|
								        const {source, flags} = value;
							 | 
						|
								        return as(new RegExp(source, flags), index);
							 | 
						|
								      }
							 | 
						|
								      case MAP: {
							 | 
						|
								        const map = as(new Map, index);
							 | 
						|
								        for (const [key, index] of value)
							 | 
						|
								          map.set(unpair(key), unpair(index));
							 | 
						|
								        return map;
							 | 
						|
								      }
							 | 
						|
								      case SET: {
							 | 
						|
								        const set = as(new Set, index);
							 | 
						|
								        for (const index of value)
							 | 
						|
								          set.add(unpair(index));
							 | 
						|
								        return set;
							 | 
						|
								      }
							 | 
						|
								      case ERROR: {
							 | 
						|
								        const {name, message} = value;
							 | 
						|
								        return as(new env[name](message), index);
							 | 
						|
								      }
							 | 
						|
								      case BIGINT:
							 | 
						|
								        return as(BigInt(value), index);
							 | 
						|
								      case 'BigInt':
							 | 
						|
								        return as(Object(BigInt(value)), index);
							 | 
						|
								      case 'ArrayBuffer':
							 | 
						|
								        return as(new Uint8Array(value).buffer, value);
							 | 
						|
								      case 'DataView': {
							 | 
						|
								        const { buffer } = new Uint8Array(value);
							 | 
						|
								        return as(new DataView(buffer), value);
							 | 
						|
								      }
							 | 
						|
								    }
							 | 
						|
								    return as(new env[type](value), index);
							 | 
						|
								  };
							 | 
						|
								
							 | 
						|
								  return unpair;
							 | 
						|
								};
							 | 
						|
								
							 | 
						|
								/**
							 | 
						|
								 * @typedef {Array<string,any>} Record a type representation
							 | 
						|
								 */
							 | 
						|
								
							 | 
						|
								/**
							 | 
						|
								 * Returns a deserialized value from a serialized array of Records.
							 | 
						|
								 * @param {Record[]} serialized a previously serialized value.
							 | 
						|
								 * @returns {any}
							 | 
						|
								 */
							 | 
						|
								const deserialize = serialized => deserializer(new Map, serialized)(0);
							 | 
						|
								exports.deserialize = deserialize;
							 |