| 
						 | 
						- '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;
 
 
  |