{
  "version": 3,
  "sources": ["../../../src/index.ts", "../../../src/core/UnsupportedTypeError.ts", "../../../src/core/assert.ts", "../../../src/core/constants.ts", "../../../src/core/literals.ts", "../../../src/core/string.ts", "../../../src/core/keys.ts", "../../../src/core/reference.ts", "../../../src/core/base-primitives.ts", "../../../src/core/compat.ts", "../../../src/core/constructors.ts", "../../../src/core/parser-context.ts", "../../../src/core/promise-to-result.ts", "../../../src/core/shared.ts", "../../../src/core/web-api.ts", "../../../src/core/base/async.ts", "../../../src/core/tree/async.ts", "../../../src/core/tree/deserialize.ts", "../../../src/core/serializer-context.old.ts", "../../../src/core/get-identifier.ts", "../../../src/core/tree/serialize.ts", "../../../src/core/base/sync.ts", "../../../src/core/tree/sync.ts", "../../../src/core/tree/index.ts", "../../../src/core/cross/async.ts", "../../../src/core/cross/serialize.ts", "../../../src/core/base/stream.ts", "../../../src/core/cross/stream.ts", "../../../src/core/cross/sync.ts", "../../../src/core/cross/index.ts", "../../../src/core/Serializer.ts", "../../../src/core/plugin.ts"],
  "sourcesContent": ["import { serialize } from './core/tree';\n\nexport type {\n  AsyncServerValue,\n  ServerValue,\n  PrimitiveValue,\n  CommonServerValue,\n  SemiPrimitiveValue,\n  ErrorValue,\n} from './types';\nexport { Feature } from './core/compat';\nexport { createReference } from './core/reference';\n\nexport * from './core/tree';\nexport * from './core/cross';\n\nexport { GLOBAL_CONTEXT_API_SCRIPT, getCrossReferenceHeader } from './core/keys';\n\nexport { default as Serializer } from './core/Serializer';\nexport * from './core/plugin';\n\nexport type { SerovalNode } from './core/types';\n\nexport default serialize;\n", "// eslint-disable-next-line @typescript-eslint/unbound-method\nconst { toString } = Object.prototype;\n\nexport default class UnsupportedTypeError extends Error {\n  constructor(public value: unknown) {\n    super('Unsupported type \"' + toString.call(value) + '\"');\n  }\n}\n", "export default function assert(cond: unknown, error: Error): asserts cond {\n  if (!cond) {\n    throw error;\n  }\n}\n", "export const enum SerovalConstant {\n  Null = 0,\n  Undefined = 1,\n  True = 2,\n  False = 3,\n  NegativeZero = 4,\n  Infinity = 5,\n  NegativeInfinity = 6,\n  NaN = 7,\n}\n\nexport const enum SerovalNodeType {\n  Number = 0,\n  String = 1,\n  Constant = 2,\n  BigInt = 3,\n  IndexedValue = 4,\n  Date = 5,\n  RegExp = 6,\n  Set = 7,\n  Map = 8,\n  Array = 9,\n  Object = 10,\n  NullConstructor = 11,\n  Promise = 12,\n  Error = 13,\n  AggregateError = 14,\n  TypedArray = 15,\n  BigIntTypedArray = 16,\n  WKSymbol = 17,\n  URL = 18,\n  URLSearchParams = 19,\n  Reference = 20,\n  ArrayBuffer = 21,\n  DataView = 22,\n  Blob = 23,\n  File = 24,\n  Headers = 25,\n  FormData = 26,\n  Boxed = 27,\n  PromiseConstructor = 28,\n  PromiseResolve = 29,\n  PromiseReject = 30,\n  ReadableStreamConstructor = 31,\n  ReadableStreamEnqueue = 32,\n  ReadableStreamClose = 33,\n  ReadableStreamError = 34,\n  Request = 35,\n  Response = 36,\n  Event = 37,\n  CustomEvent = 38,\n  DOMException = 39,\n  Plugin = 40,\n}\n\nexport const enum SerovalObjectFlags {\n  None = 0,\n  NonExtensible = 1,\n  Sealed = 2,\n  Frozen = 3,\n}\n\nexport const enum Symbols {\n  AsyncIterator = 0,\n  HasInstance = 1,\n  IsConcatSpreadable = 2,\n  Iterator = 3,\n  Match = 4,\n  MatchAll = 5,\n  Replace = 6,\n  Search = 7,\n  Species = 8,\n  Split = 9,\n  ToPrimitive = 10,\n  ToStringTag = 11,\n  Unscopables = 12,\n}\n\nexport const SYMBOL_STRING: Record<Symbols, string> = {\n  [Symbols.AsyncIterator]: 'Symbol.asyncIterator',\n  [Symbols.HasInstance]: 'Symbol.hasInstance',\n  [Symbols.IsConcatSpreadable]: 'Symbol.isConcatSpreadable',\n  [Symbols.Iterator]: 'Symbol.iterator',\n  [Symbols.Match]: 'Symbol.match',\n  [Symbols.MatchAll]: 'Symbol.matchAll',\n  [Symbols.Replace]: 'Symbol.replace',\n  [Symbols.Search]: 'Symbol.search',\n  [Symbols.Species]: 'Symbol.species',\n  [Symbols.Split]: 'Symbol.split',\n  [Symbols.ToPrimitive]: 'Symbol.toPrimitive',\n  [Symbols.ToStringTag]: 'Symbol.toStringTag',\n  [Symbols.Unscopables]: 'Symbol.unscopables',\n};\n\nexport const INV_SYMBOL_REF = {\n  [Symbol.asyncIterator]: Symbols.AsyncIterator,\n  [Symbol.hasInstance]: Symbols.HasInstance,\n  [Symbol.isConcatSpreadable]: Symbols.IsConcatSpreadable,\n  [Symbol.iterator]: Symbols.Iterator,\n  [Symbol.match]: Symbols.Match,\n  [Symbol.matchAll]: Symbols.MatchAll,\n  [Symbol.replace]: Symbols.Replace,\n  [Symbol.search]: Symbols.Search,\n  [Symbol.species]: Symbols.Species,\n  [Symbol.split]: Symbols.Split,\n  [Symbol.toPrimitive]: Symbols.ToPrimitive,\n  [Symbol.toStringTag]: Symbols.ToStringTag,\n  [Symbol.unscopables]: Symbols.Unscopables,\n};\n\nexport type WellKnownSymbols = keyof typeof INV_SYMBOL_REF;\n\nexport const SYMBOL_REF: Record<Symbols, WellKnownSymbols> = {\n  [Symbols.AsyncIterator]: Symbol.asyncIterator,\n  [Symbols.HasInstance]: Symbol.hasInstance,\n  [Symbols.IsConcatSpreadable]: Symbol.isConcatSpreadable,\n  [Symbols.Iterator]: Symbol.iterator,\n  [Symbols.Match]: Symbol.match,\n  [Symbols.MatchAll]: Symbol.matchAll,\n  [Symbols.Replace]: Symbol.replace,\n  [Symbols.Search]: Symbol.search,\n  [Symbols.Species]: Symbol.species,\n  [Symbols.Split]: Symbol.split,\n  [Symbols.ToPrimitive]: Symbol.toPrimitive,\n  [Symbols.ToStringTag]: Symbol.toStringTag,\n  [Symbols.Unscopables]: Symbol.unscopables,\n};\n\nexport const CONSTANT_STRING: Record<SerovalConstant, string> = {\n  [SerovalConstant.True]: '!0',\n  [SerovalConstant.False]: '!1',\n  [SerovalConstant.Undefined]: 'void 0',\n  [SerovalConstant.Null]: 'null',\n  [SerovalConstant.NegativeZero]: '-0',\n  [SerovalConstant.Infinity]: '1/0',\n  [SerovalConstant.NegativeInfinity]: '-1/0',\n  [SerovalConstant.NaN]: '0/0',\n};\n\nexport const CONSTANT_VAL: Record<SerovalConstant, unknown> = {\n  [SerovalConstant.True]: true,\n  [SerovalConstant.False]: false,\n  [SerovalConstant.Undefined]: undefined,\n  [SerovalConstant.Null]: null,\n  [SerovalConstant.NegativeZero]: -0,\n  [SerovalConstant.Infinity]: Infinity,\n  [SerovalConstant.NegativeInfinity]: -Infinity,\n  [SerovalConstant.NaN]: NaN,\n};\n\nexport const enum ErrorConstructorTag {\n  Error = 0,\n  EvalError = 1,\n  RangeError = 2,\n  ReferenceError = 3,\n  SyntaxError = 4,\n  TypeError = 5,\n  URIError = 6,\n}\n\nexport const ERROR_CONSTRUCTOR_STRING: Record<ErrorConstructorTag, string> = {\n  [ErrorConstructorTag.Error]: 'Error',\n  [ErrorConstructorTag.EvalError]: 'EvalError',\n  [ErrorConstructorTag.RangeError]: 'RangeError',\n  [ErrorConstructorTag.ReferenceError]: 'ReferenceError',\n  [ErrorConstructorTag.SyntaxError]: 'SyntaxError',\n  [ErrorConstructorTag.TypeError]: 'TypeError',\n  [ErrorConstructorTag.URIError]: 'URIError',\n};\n\ntype ErrorConstructors =\n  | ErrorConstructor\n  | EvalErrorConstructor\n  | RangeErrorConstructor\n  | ReferenceErrorConstructor\n  | SyntaxErrorConstructor\n  | TypeErrorConstructor\n  | URIErrorConstructor;\n\nexport const ERROR_CONSTRUCTOR: Record<ErrorConstructorTag, ErrorConstructors> = {\n  [ErrorConstructorTag.Error]: Error,\n  [ErrorConstructorTag.EvalError]: EvalError,\n  [ErrorConstructorTag.RangeError]: RangeError,\n  [ErrorConstructorTag.ReferenceError]: ReferenceError,\n  [ErrorConstructorTag.SyntaxError]: SyntaxError,\n  [ErrorConstructorTag.TypeError]: TypeError,\n  [ErrorConstructorTag.URIError]: URIError,\n};\n\nexport const UNIVERSAL_SENTINEL = Symbol('why');\n", "import { SerovalConstant, SerovalNodeType } from './constants';\nimport type { SerovalConstantNode } from './types';\n\nfunction createConstantNode(value: SerovalConstant): SerovalConstantNode {\n  return {\n    t: SerovalNodeType.Constant,\n    i: undefined,\n    s: value,\n    l: undefined,\n    c: undefined,\n    m: undefined,\n    p: undefined,\n    e: undefined,\n    a: undefined,\n    f: undefined,\n    b: undefined,\n    o: undefined,\n  };\n}\n\nexport const TRUE_NODE = createConstantNode(SerovalConstant.True);\nexport const FALSE_NODE = createConstantNode(SerovalConstant.False);\nexport const UNDEFINED_NODE = createConstantNode(SerovalConstant.Undefined);\nexport const NULL_NODE = createConstantNode(SerovalConstant.Null);\nexport const NEG_ZERO_NODE = createConstantNode(SerovalConstant.NegativeZero);\nexport const INFINITY_NODE = createConstantNode(SerovalConstant.Infinity);\nexport const NEG_INFINITY_NODE = createConstantNode(SerovalConstant.NegativeInfinity);\nexport const NAN_NODE = createConstantNode(SerovalConstant.NaN);\n", "export function serializeChar(str: string): string | undefined {\n  switch (str) {\n    case '\"': return '\\\\\"';\n    case '\\\\': return '\\\\\\\\';\n    case '\\n': return '\\\\n';\n    case '\\r': return '\\\\r';\n    case '\\b': return '\\\\b';\n    case '\\t': return '\\\\t';\n    case '\\f': return '\\\\f';\n    case '<': return '\\\\x3C';\n    case '\\u2028': return '\\\\u2028';\n    case '\\u2029': return '\\\\u2029';\n    default: return undefined;\n  }\n}\n\n// Written by https://github.com/DylanPiercey and is distributed under the MIT license.\n// Creates a JavaScript double quoted string and escapes all characters\n// not listed as DoubleStringCharacters on\n// Also includes \"<\" to escape \"</script>\" and \"\\\" to avoid invalid escapes in the output.\n// http://www.ecma-international.org/ecma-262/5.1/#sec-7.8.4\nexport function serializeString(str: string): string {\n  let result = '';\n  let lastPos = 0;\n  let replacement: string | undefined;\n  for (let i = 0, len = str.length; i < len; i++) {\n    replacement = serializeChar(str[i]);\n    if (replacement) {\n      result += str.slice(lastPos, i) + replacement;\n      lastPos = i + 1;\n    }\n  }\n  if (lastPos === 0) {\n    result = str;\n  } else {\n    result += str.slice(lastPos);\n  }\n  return result;\n}\n\nexport function deserializeString(str: string): string {\n  return str\n    .replace(/\\\\\"/g, '\"')\n    .replace(/\\\\\\\\/g, '\\\\')\n    .replace(/\\\\n/g, '\\n')\n    .replace(/\\\\r/g, '\\r')\n    .replace(/\\\\b/g, '\\b')\n    .replace(/\\\\t/g, '\\t')\n    .replace(/\\\\f/g, '\\f')\n    .replace(/\\\\x3C/g, '<')\n    .replace(/\\\\u2028/g, '\\u2028')\n    .replace(/\\\\u2029/g, '\\u2029');\n}\n", "import { serializeString } from './string';\n\n// Used for mapping isomorphic references\nexport const REFERENCES_KEY = '__SEROVAL_REFS__';\n\nexport const GLOBAL_CONTEXT_API = '_$';\n\nexport const GLOBAL_CONTEXT_REFERENCES = '$R';\n\nexport const LOCAL_CONTEXT_PROMISE_RESOLVE = 's';\n\nexport const LOCAL_CONTEXT_PROMISE_REJECT = 'f';\n\nexport const GLOBAL_CONTEXT_PROMISE_CONSTRUCTOR = 'P';\n\nexport const GLOBAL_CONTEXT_PROMISE_RESOLVE = 'Ps';\n\nexport const GLOBAL_CONTEXT_PROMISE_REJECT = 'Pf';\n\nexport const LOCAL_CONTEXT_STREAM_CONTROLLER = 'c';\n\nexport const GLOBAL_CONTEXT_STREAM_CONSTRUCTOR = 'S';\n\nexport const GLOBAL_CONTEXT_STREAM_EMIT = 'Se';\n\nconst GLOBAL_CONTEXT_API_REF = `self.${GLOBAL_CONTEXT_API}`;\n\nexport const GLOBAL_CONTEXT_API_SCRIPT = `${GLOBAL_CONTEXT_API_REF}=${GLOBAL_CONTEXT_API_REF}||{`\n  + `${GLOBAL_CONTEXT_PROMISE_CONSTRUCTOR}:function(s,f,p){return(p=new Promise(function(a,b){s=a,f=b})).${LOCAL_CONTEXT_PROMISE_RESOLVE}=s,p.${LOCAL_CONTEXT_PROMISE_REJECT}=f,p},`\n  + `uP:function(p){delete p.${LOCAL_CONTEXT_PROMISE_RESOLVE};delete p.${LOCAL_CONTEXT_PROMISE_REJECT}},`\n  + `${GLOBAL_CONTEXT_PROMISE_RESOLVE}:function(p,d){p.${LOCAL_CONTEXT_PROMISE_RESOLVE}(d),p.status=\"success\",p.value=d,this.uP(p)},`\n  + `${GLOBAL_CONTEXT_PROMISE_REJECT}:function(p,d){p.${LOCAL_CONTEXT_PROMISE_REJECT}(d),p.status=\"failure\",p.value=d,this.uP(p)},`\n  + `uS:function(s){delete s.${LOCAL_CONTEXT_STREAM_CONTROLLER}},`\n  + `${GLOBAL_CONTEXT_STREAM_EMIT}:function(s,t,d,c){switch(c=s.${LOCAL_CONTEXT_STREAM_CONTROLLER},t){case 0:return c.enqueue(d);case 1:return(this.uS(s),c.error(d));case 2:return(this.uS(s),c.close())}},`\n  + `${GLOBAL_CONTEXT_STREAM_CONSTRUCTOR}:function(s,c){return(s=new ReadableStream({start:function(x){c=x}})).${LOCAL_CONTEXT_STREAM_CONTROLLER}=c,s}`\n  + '}';\n\nconst GLOBAL_CONTEXT_R = `self.${GLOBAL_CONTEXT_REFERENCES}`;\n\nexport function getCrossReferenceHeader(id?: string): string {\n  if (id == null) {\n    return `${GLOBAL_CONTEXT_R}=${GLOBAL_CONTEXT_R}||[];`;\n  }\n  return `(${GLOBAL_CONTEXT_R}=${GLOBAL_CONTEXT_R}||{})[\"${serializeString(id)}\"]=[];`;\n}\n", "/* eslint-disable no-restricted-globals */\nimport assert from './assert';\nimport { REFERENCES_KEY } from './keys';\n\nconst REFERENCE = new Map<unknown, string>();\nconst INV_REFERENCE = new Map<string, unknown>();\n\nexport function createReference<T>(id: string, value: T): T {\n  REFERENCE.set(value, id);\n  INV_REFERENCE.set(id, value);\n  return value;\n}\n\nexport function hasReferenceID<T>(value: T): boolean {\n  return REFERENCE.has(value);\n}\n\nexport function hasReference(id: string): boolean {\n  return INV_REFERENCE.has(id);\n}\n\nexport function getReferenceID<T>(value: T): string {\n  assert(hasReferenceID(value), new Error('Missing reference id'));\n  return REFERENCE.get(value)!;\n}\n\nexport function getReference<T>(id: string): T {\n  assert(hasReference(id), new Error('Missing reference for id:' + id));\n  return INV_REFERENCE.get(id) as T;\n}\n\nif (typeof globalThis !== undefined) {\n  Object.defineProperty(globalThis, REFERENCES_KEY, {\n    value: INV_REFERENCE,\n    configurable: true,\n    writable: false,\n    enumerable: false,\n  });\n} else if (typeof window !== undefined) {\n  Object.defineProperty(window, REFERENCES_KEY, {\n    value: INV_REFERENCE,\n    configurable: true,\n    writable: false,\n    enumerable: false,\n  });\n} else if (typeof self !== undefined) {\n  Object.defineProperty(self, REFERENCES_KEY, {\n    value: INV_REFERENCE,\n    configurable: true,\n    writable: false,\n    enumerable: false,\n  });\n} else if (typeof global !== undefined) {\n  Object.defineProperty(global, REFERENCES_KEY, {\n    value: INV_REFERENCE,\n    configurable: true,\n    writable: false,\n    enumerable: false,\n  });\n}\n", "import assert from './assert';\nimport type { WellKnownSymbols } from './constants';\nimport { INV_SYMBOL_REF, SerovalNodeType } from './constants';\nimport {\n  INFINITY_NODE,\n  NEG_INFINITY_NODE,\n  NAN_NODE,\n  NEG_ZERO_NODE,\n} from './literals';\nimport { getReferenceID } from './reference';\nimport { serializeString } from './string';\nimport type {\n  SerovalArrayBufferNode,\n  SerovalBigIntNode,\n  SerovalConstantNode,\n  SerovalDateNode,\n  SerovalIndexedValueNode,\n  SerovalNumberNode,\n  SerovalPluginNode,\n  SerovalReferenceNode,\n  SerovalRegExpNode,\n  SerovalStringNode,\n  SerovalWKSymbolNode,\n} from './types';\n\nexport function createNumberNode(value: number): SerovalConstantNode | SerovalNumberNode {\n  switch (value) {\n    case Infinity:\n      return INFINITY_NODE;\n    case -Infinity:\n      return NEG_INFINITY_NODE;\n    default:\n      // eslint-disable-next-line no-self-compare\n      if (value !== value) {\n        return NAN_NODE;\n      }\n      if (Object.is(value, -0)) {\n        return NEG_ZERO_NODE;\n      }\n      return {\n        t: SerovalNodeType.Number,\n        i: undefined,\n        s: value,\n        l: undefined,\n        c: undefined,\n        m: undefined,\n        p: undefined,\n        e: undefined,\n        a: undefined,\n        f: undefined,\n        b: undefined,\n        o: undefined,\n      };\n  }\n}\n\nexport function createStringNode(value: string): SerovalStringNode {\n  return {\n    t: SerovalNodeType.String,\n    i: undefined,\n    s: serializeString(value),\n    l: undefined,\n    c: undefined,\n    m: undefined,\n    p: undefined,\n    e: undefined,\n    a: undefined,\n    f: undefined,\n    b: undefined,\n    o: undefined,\n  };\n}\n\nexport function createBigIntNode(\n  current: bigint,\n): SerovalBigIntNode {\n  return {\n    t: SerovalNodeType.BigInt,\n    i: undefined,\n    s: '' + current,\n    l: undefined,\n    c: undefined,\n    m: undefined,\n    p: undefined,\n    e: undefined,\n    a: undefined,\n    f: undefined,\n    b: undefined,\n    o: undefined,\n  };\n}\n\nexport function createIndexedValueNode(id: number): SerovalIndexedValueNode {\n  return {\n    t: SerovalNodeType.IndexedValue,\n    i: id,\n    s: undefined,\n    l: undefined,\n    c: undefined,\n    m: undefined,\n    p: undefined,\n    e: undefined,\n    a: undefined,\n    f: undefined,\n    b: undefined,\n    o: undefined,\n  };\n}\n\nexport function createDateNode(id: number, current: Date): SerovalDateNode {\n  return {\n    t: SerovalNodeType.Date,\n    i: id,\n    s: current.toISOString(),\n    l: undefined,\n    c: undefined,\n    m: undefined,\n    p: undefined,\n    e: undefined,\n    f: undefined,\n    a: undefined,\n    b: undefined,\n    o: undefined,\n  };\n}\n\nexport function createRegExpNode(id: number, current: RegExp): SerovalRegExpNode {\n  return {\n    t: SerovalNodeType.RegExp,\n    i: id,\n    s: undefined,\n    l: undefined,\n    c: current.source,\n    m: current.flags,\n    p: undefined,\n    e: undefined,\n    a: undefined,\n    f: undefined,\n    b: undefined,\n    o: undefined,\n  };\n}\n\nexport function createArrayBufferNode(\n  id: number,\n  current: ArrayBuffer,\n): SerovalArrayBufferNode {\n  const bytes = new Uint8Array(current);\n  const len = bytes.length;\n  const values = new Array<number>(len);\n  for (let i = 0; i < len; i++) {\n    values[i] = bytes[i];\n  }\n  return {\n    t: SerovalNodeType.ArrayBuffer,\n    i: id,\n    s: values,\n    l: undefined,\n    c: undefined,\n    m: undefined,\n    p: undefined,\n    e: undefined,\n    a: undefined,\n    f: undefined,\n    b: undefined,\n    o: undefined,\n  };\n}\n\nexport function createWKSymbolNode(\n  id: number,\n  current: WellKnownSymbols,\n): SerovalWKSymbolNode {\n  assert(current in INV_SYMBOL_REF, new Error('Only well-known symbols are supported.'));\n  return {\n    t: SerovalNodeType.WKSymbol,\n    i: id,\n    s: INV_SYMBOL_REF[current],\n    l: undefined,\n    c: undefined,\n    m: undefined,\n    p: undefined,\n    e: undefined,\n    a: undefined,\n    f: undefined,\n    b: undefined,\n    o: undefined,\n  };\n}\n\nexport function createReferenceNode<T>(\n  id: number,\n  ref: T,\n): SerovalReferenceNode {\n  return {\n    t: SerovalNodeType.Reference,\n    i: id,\n    s: serializeString(getReferenceID(ref)),\n    l: undefined,\n    c: undefined,\n    m: undefined,\n    p: undefined,\n    e: undefined,\n    a: undefined,\n    f: undefined,\n    b: undefined,\n    o: undefined,\n  };\n}\n\nexport function createPluginNode(\n  id: number,\n  tag: string,\n  value: unknown,\n): SerovalPluginNode {\n  return {\n    t: SerovalNodeType.Plugin,\n    i: id,\n    s: value,\n    l: undefined,\n    c: serializeString(tag),\n    m: undefined,\n    p: undefined,\n    e: undefined,\n    a: undefined,\n    f: undefined,\n    b: undefined,\n    o: undefined,\n  };\n}\n", "/**\n * References\n * - https://compat-table.github.io/compat-table/es6/\n * - MDN\n */\n\nexport const enum Feature {\n  AggregateError = 0x01,\n  ArrayPrototypeValues = 0x02,\n  ArrowFunction = 0x04,\n  BigInt = 0x08,\n  ErrorPrototypeStack = 0x10,\n  Map = 0x20,\n  MethodShorthand = 0x40,\n  ObjectAssign = 0x80,\n  Promise = 0x100,\n  Set = 0x200,\n  Symbol = 0x400,\n  TypedArray = 0x800,\n  BigIntTypedArray = 0x1000,\n  WebAPI = 0x2000,\n}\n\nexport const ALL_ENABLED = 0x3FFF;\n\nexport const BIGINT_FLAG = Feature.BigIntTypedArray | Feature.BigInt;\n", "export function createRequestOptions(\n  current: Request,\n  body: ArrayBuffer | ReadableStream | null,\n): RequestInit {\n  return {\n    body,\n    cache: current.cache,\n    credentials: current.credentials,\n    headers: current.headers,\n    integrity: current.integrity,\n    keepalive: current.keepalive,\n    method: current.method,\n    mode: current.mode,\n    redirect: current.redirect,\n    referrer: current.referrer,\n    referrerPolicy: current.referrerPolicy,\n  };\n}\n\nexport function createResponseOptions(\n  current: Response,\n): ResponseInit {\n  return {\n    headers: current.headers,\n    status: current.status,\n    statusText: current.statusText,\n  };\n}\n\nexport function createEventOptions(\n  current: Event,\n): EventInit {\n  return {\n    bubbles: current.bubbles,\n    cancelable: current.cancelable,\n    composed: current.composed,\n  };\n}\n\nexport function createCustomEventOptions(\n  current: CustomEvent,\n): CustomEventInit {\n  return {\n    detail: current.detail as unknown,\n    bubbles: current.bubbles,\n    cancelable: current.cancelable,\n    composed: current.composed,\n  };\n}\n", "import { createIndexedValueNode, createReferenceNode } from './base-primitives';\nimport { ALL_ENABLED, BIGINT_FLAG, Feature } from './compat';\nimport type { Plugin, PluginAccessOptions, SerovalMode } from './plugin';\nimport { hasReferenceID } from './reference';\nimport type { SerovalIndexedValueNode, SerovalReferenceNode } from './types';\n\nexport interface BaseParserContextOptions extends PluginAccessOptions {\n  disabledFeatures?: number;\n  refs?: Map<unknown, number>;\n}\n\nexport abstract class BaseParserContext implements PluginAccessOptions {\n  abstract readonly mode: SerovalMode;\n\n  features: number;\n\n  marked = new Set<number>();\n\n  refs: Map<unknown, number>;\n\n  plugins?: Plugin<any, any>[] | undefined;\n\n  constructor(options: BaseParserContextOptions) {\n    this.plugins = options.plugins;\n    this.features = ALL_ENABLED ^ (options.disabledFeatures || 0);\n    this.refs = options.refs || new Map<unknown, number>();\n  }\n\n  protected markRef(id: number): void {\n    this.marked.add(id);\n  }\n\n  protected isMarked(id: number): boolean {\n    return this.marked.has(id);\n  }\n\n  protected getReference<T>(current: T): number | SerovalIndexedValueNode | SerovalReferenceNode {\n    const registeredID = this.refs.get(current);\n    if (registeredID != null) {\n      this.markRef(registeredID);\n      return createIndexedValueNode(registeredID);\n    }\n    const id = this.refs.size;\n    this.refs.set(current, id);\n    if (hasReferenceID(current)) {\n      return createReferenceNode(id, current);\n    }\n    return id;\n  }\n\n  protected getStrictReference<T>(current: T): SerovalIndexedValueNode | SerovalReferenceNode {\n    const registeredID = this.refs.get(current);\n    if (registeredID != null) {\n      this.markRef(registeredID);\n      return createIndexedValueNode(registeredID);\n    }\n    const id = this.refs.size;\n    this.refs.set(current, id);\n    return createReferenceNode(id, current);\n  }\n\n  /**\n   * @private\n   */\n  protected isIterable(\n    value: unknown,\n  ): value is Iterable<unknown> {\n    if (!value || typeof value !== 'object') {\n      return false;\n    }\n    if (Array.isArray(value)) {\n      return false;\n    }\n    const currentClass = value.constructor;\n    const currentFeatures = this.features;\n    if (currentFeatures & Feature.TypedArray) {\n      switch (currentClass) {\n        case Int8Array:\n        case Int16Array:\n        case Int32Array:\n        case Uint8Array:\n        case Uint16Array:\n        case Uint32Array:\n        case Uint8ClampedArray:\n        case Float32Array:\n        case Float64Array:\n          return false;\n        default:\n          break;\n      }\n    }\n    // BigInt Typed Arrays\n    if ((currentFeatures & BIGINT_FLAG) === BIGINT_FLAG) {\n      switch (currentClass) {\n        case BigInt64Array:\n        case BigUint64Array:\n          return false;\n        default:\n          break;\n      }\n    }\n    // ES Collection\n    if (currentFeatures & Feature.Map && currentClass === Map) {\n      return false;\n    }\n    if (currentFeatures & Feature.Set && currentClass === Set) {\n      return false;\n    }\n    if (currentFeatures & Feature.WebAPI) {\n      if (typeof Headers !== 'undefined' && currentClass === Headers) {\n        return false;\n      }\n      if (typeof File !== 'undefined' && currentClass === File) {\n        return false;\n      }\n    }\n    const currentPlugins = this.plugins;\n    if (currentPlugins) {\n      for (let i = 0, len = currentPlugins.length; i < len; i++) {\n        const plugin = currentPlugins[i];\n        if (plugin.test(value) && plugin.isIterable && plugin.isIterable(value)) {\n          return false;\n        }\n      }\n    }\n    if (currentFeatures & Feature.Symbol) {\n      return Symbol.iterator in value;\n    }\n    return false;\n  }\n}\n", "export default async function promiseToResult(\n  current: Promise<unknown>,\n): Promise<[0 | 1, unknown]> {\n  try {\n    return [1, await current];\n  } catch (e) {\n    return [0, e];\n  }\n}\n", "import type {\n  ErrorValue,\n} from '../types';\nimport { Feature } from './compat';\nimport {\n  ERROR_CONSTRUCTOR_STRING,\n  ErrorConstructorTag,\n  SerovalObjectFlags,\n} from './constants';\n\nexport function getErrorConstructor(error: ErrorValue): ErrorConstructorTag {\n  if (error instanceof EvalError) {\n    return ErrorConstructorTag.EvalError;\n  }\n  if (error instanceof RangeError) {\n    return ErrorConstructorTag.RangeError;\n  }\n  if (error instanceof ReferenceError) {\n    return ErrorConstructorTag.ReferenceError;\n  }\n  if (error instanceof SyntaxError) {\n    return ErrorConstructorTag.SyntaxError;\n  }\n  if (error instanceof TypeError) {\n    return ErrorConstructorTag.TypeError;\n  }\n  if (error instanceof URIError) {\n    return ErrorConstructorTag.URIError;\n  }\n  return ErrorConstructorTag.Error;\n}\n\ntype TypedArrayConstructor =\n  | Int8ArrayConstructor\n  | Int16ArrayConstructor\n  | Int32ArrayConstructor\n  | Uint8ArrayConstructor\n  | Uint16ArrayConstructor\n  | Uint32ArrayConstructor\n  | Uint8ClampedArrayConstructor\n  | Float32ArrayConstructor\n  | Float64ArrayConstructor\n  | BigInt64ArrayConstructor\n  | BigUint64ArrayConstructor;\n\nexport function getTypedArrayConstructor(name: string): TypedArrayConstructor {\n  switch (name) {\n    case 'Int8Array': return Int8Array;\n    case 'Int16Array': return Int16Array;\n    case 'Int32Array': return Int32Array;\n    case 'Uint8Array': return Uint8Array;\n    case 'Uint16Array': return Uint16Array;\n    case 'Uint32Array': return Uint32Array;\n    case 'Uint8ClampedArray': return Uint8ClampedArray;\n    case 'Float32Array': return Float32Array;\n    case 'Float64Array': return Float64Array;\n    case 'BigInt64Array': return BigInt64Array;\n    case 'BigUint64Array': return BigUint64Array;\n    default:\n      throw new Error(`Unknown TypedArray \"${name}\"`);\n  }\n}\n\nconst IDENTIFIER_CHECK = /^[$A-Z_][0-9A-Z_$]*$/i;\n\nexport function isValidIdentifier(name: string): boolean {\n  const char = name[0];\n  return (\n    char === '$'\n    || char === '_'\n    || (char >= 'A' && char <= 'Z')\n    || (char >= 'a' && char <= 'z')\n  ) && IDENTIFIER_CHECK.test(name);\n}\n\nexport function getObjectFlag(obj: unknown): SerovalObjectFlags {\n  if (Object.isFrozen(obj)) {\n    return SerovalObjectFlags.Frozen;\n  }\n  if (Object.isSealed(obj)) {\n    return SerovalObjectFlags.Sealed;\n  }\n  if (Object.isExtensible(obj)) {\n    return SerovalObjectFlags.None;\n  }\n  return SerovalObjectFlags.NonExtensible;\n}\n\nexport function getErrorOptions(\n  error: Error,\n  features: number,\n): Record<string, unknown> | undefined {\n  let options: Record<string, unknown> | undefined;\n  const constructor = ERROR_CONSTRUCTOR_STRING[getErrorConstructor(error)];\n  // Name has been modified\n  if (error.name !== constructor) {\n    options = { name: error.name };\n  } else if (error.constructor.name !== constructor) {\n    // Otherwise, name is overriden because\n    // the Error class is extended\n    options = { name: error.constructor.name };\n  }\n  const names = Object.getOwnPropertyNames(error);\n  for (let i = 0, len = names.length, name: string; i < len; i++) {\n    name = names[i];\n    if (name !== 'name' && name !== 'message') {\n      if (name === 'stack') {\n        if (features & Feature.ErrorPrototypeStack) {\n          options = options || {};\n          options[name] = error[name as keyof Error];\n        }\n      } else {\n        options = options || {};\n        options[name] = error[name as keyof Error];\n      }\n    }\n  }\n  return options;\n}\n", "import { SerovalNodeType } from './constants';\nimport { serializeString } from './string';\nimport type { SerovalDOMExceptionNode, SerovalURLNode, SerovalURLSearchParamsNode } from './types';\n\nexport function createURLNode(\n  id: number,\n  current: URL,\n): SerovalURLNode {\n  return {\n    t: SerovalNodeType.URL,\n    i: id,\n    s: serializeString(current.href),\n    l: undefined,\n    c: undefined,\n    m: undefined,\n    p: undefined,\n    e: undefined,\n    f: undefined,\n    a: undefined,\n    b: undefined,\n    o: undefined,\n  };\n}\n\nexport function createURLSearchParamsNode(\n  id: number,\n  current: URLSearchParams,\n): SerovalURLSearchParamsNode {\n  return {\n    t: SerovalNodeType.URLSearchParams,\n    i: id,\n    s: serializeString(current.toString()),\n    l: undefined,\n    c: undefined,\n    m: undefined,\n    p: undefined,\n    e: undefined,\n    f: undefined,\n    a: undefined,\n    b: undefined,\n    o: undefined,\n  };\n}\n\nexport function createDOMExceptionNode(\n  id: number,\n  current: DOMException,\n): SerovalDOMExceptionNode {\n  return {\n    t: SerovalNodeType.DOMException,\n    i: id,\n    s: serializeString(current.message),\n    l: undefined,\n    c: serializeString(current.name),\n    m: undefined,\n    p: undefined,\n    e: undefined,\n    a: undefined,\n    f: undefined,\n    b: undefined,\n    o: undefined,\n  };\n}\n", "/* eslint-disable prefer-destructuring */\n/* eslint-disable no-await-in-loop */\nimport type { BigIntTypedArrayValue, TypedArrayValue } from '../../types';\nimport UnsupportedTypeError from '../UnsupportedTypeError';\nimport assert from '../assert';\nimport {\n  createPluginNode,\n  createDateNode,\n  createRegExpNode,\n  createArrayBufferNode,\n  createWKSymbolNode,\n  createBigIntNode,\n  createStringNode,\n  createNumberNode,\n} from '../base-primitives';\nimport { BIGINT_FLAG, Feature } from '../compat';\nimport type { WellKnownSymbols } from '../constants';\nimport { SerovalNodeType, UNIVERSAL_SENTINEL } from '../constants';\nimport {\n  createRequestOptions,\n  createResponseOptions,\n  createEventOptions,\n  createCustomEventOptions,\n} from '../constructors';\nimport {\n  NULL_NODE,\n  TRUE_NODE,\n  FALSE_NODE,\n  UNDEFINED_NODE,\n} from '../literals';\nimport { BaseParserContext } from '../parser-context';\nimport promiseToResult from '../promise-to-result';\nimport { hasReferenceID } from '../reference';\nimport { getErrorConstructor, getErrorOptions, getObjectFlag } from '../shared';\nimport { serializeString } from '../string';\nimport { SerovalObjectRecordSpecialKey } from '../types';\nimport type {\n  SerovalErrorNode,\n  SerovalArrayNode,\n  SerovalBigIntTypedArrayNode,\n  SerovalBoxedNode,\n  SerovalNode,\n  SerovalNullConstructorNode,\n  SerovalObjectNode,\n  SerovalObjectRecordKey,\n  SerovalObjectRecordNode,\n  SerovalPromiseNode,\n  SerovalTypedArrayNode,\n  SerovalAggregateErrorNode,\n  SerovalBlobNode,\n  SerovalCustomEventNode,\n  SerovalEventNode,\n  SerovalFileNode,\n  SerovalFormDataNode,\n  SerovalHeadersNode,\n  SerovalMapNode,\n  SerovalPlainRecordNode,\n  SerovalPluginNode,\n  SerovalRequestNode,\n  SerovalResponseNode,\n  SerovalSetNode,\n  SerovalDataViewNode,\n} from '../types';\nimport { createURLNode, createURLSearchParamsNode, createDOMExceptionNode } from '../web-api';\n\ntype ObjectLikeNode =\n  | SerovalObjectNode\n  | SerovalNullConstructorNode\n  | SerovalPromiseNode;\n\nexport default abstract class BaseAsyncParserContext extends BaseParserContext {\n  private async parseItems(\n    current: unknown[],\n  ): Promise<SerovalNode[]> {\n    const size = current.length;\n    const nodes = [];\n    const deferred = [];\n    for (let i = 0, item: unknown; i < size; i++) {\n      if (i in current) {\n        item = current[i];\n        if (this.isIterable(item)) {\n          deferred[i] = item;\n        } else {\n          nodes[i] = await this.parse(item);\n        }\n      }\n    }\n    for (let i = 0; i < size; i++) {\n      if (i in deferred) {\n        nodes[i] = await this.parse(deferred[i]);\n      }\n    }\n    return nodes;\n  }\n\n  private async parseArray(\n    id: number,\n    current: unknown[],\n  ): Promise<SerovalArrayNode> {\n    return {\n      t: SerovalNodeType.Array,\n      i: id,\n      s: undefined,\n      l: current.length,\n      c: undefined,\n      m: undefined,\n      p: undefined,\n      e: undefined,\n      a: await this.parseItems(current),\n      f: undefined,\n      b: undefined,\n      o: getObjectFlag(current),\n    };\n  }\n\n  private async parseBoxed(\n    id: number,\n    current: object,\n  ): Promise<SerovalBoxedNode> {\n    return {\n      t: SerovalNodeType.Boxed,\n      i: id,\n      s: undefined,\n      l: undefined,\n      c: undefined,\n      m: undefined,\n      p: undefined,\n      e: undefined,\n      a: undefined,\n      f: await this.parse(current.valueOf()),\n      b: undefined,\n      o: undefined,\n    };\n  }\n\n  private async parseTypedArray(\n    id: number,\n    current: TypedArrayValue,\n  ): Promise<SerovalTypedArrayNode> {\n    return {\n      t: SerovalNodeType.TypedArray,\n      i: id,\n      s: undefined,\n      l: current.length,\n      c: current.constructor.name,\n      m: undefined,\n      p: undefined,\n      e: undefined,\n      a: undefined,\n      f: await this.parse(current.buffer),\n      b: current.byteOffset,\n      o: undefined,\n    };\n  }\n\n  private async parseBigIntTypedArray(\n    id: number,\n    current: BigIntTypedArrayValue,\n  ): Promise<SerovalBigIntTypedArrayNode> {\n    return {\n      t: SerovalNodeType.BigIntTypedArray,\n      i: id,\n      s: undefined,\n      l: current.length,\n      c: current.constructor.name,\n      m: undefined,\n      p: undefined,\n      e: undefined,\n      a: undefined,\n      f: await this.parse(current.buffer),\n      b: current.byteOffset,\n      o: undefined,\n    };\n  }\n\n  private async parseDataView(\n    id: number,\n    current: DataView,\n  ): Promise<SerovalDataViewNode> {\n    return {\n      t: SerovalNodeType.DataView,\n      i: id,\n      s: undefined,\n      l: current.byteLength,\n      c: undefined,\n      m: undefined,\n      p: undefined,\n      e: undefined,\n      a: undefined,\n      f: await this.parse(current.buffer),\n      b: current.byteOffset,\n      o: undefined,\n    };\n  }\n\n  private async parseProperties(\n    properties: Record<string, unknown>,\n  ): Promise<SerovalObjectRecordNode> {\n    const entries = Object.entries(properties);\n    const keyNodes: SerovalObjectRecordKey[] = [];\n    const valueNodes: SerovalNode[] = [];\n    const deferredKeys: string[] = [];\n    const deferredValues: unknown[] = [];\n    for (\n      let i = 0, len = entries.length, key: string, item: unknown;\n      i < len;\n      i++\n    ) {\n      key = serializeString(entries[i][0]);\n      item = entries[i][1];\n      // Defer iterables since iterables have lazy evaluation.\n      // Of course this doesn't include types seroval supports.\n      if (this.isIterable(item)) {\n        deferredKeys.push(key);\n        deferredValues.push(item);\n      } else {\n        keyNodes.push(key);\n        valueNodes.push(await this.parse(item));\n      }\n    }\n    for (let i = 0, len = deferredKeys.length; i < len; i++) {\n      keyNodes.push(deferredKeys[i]);\n      valueNodes.push(await this.parse(deferredValues[i]));\n    }\n    // Check special properties\n    if (this.features & Feature.Symbol) {\n      if (Symbol.iterator in properties) {\n        keyNodes.push(SerovalObjectRecordSpecialKey.SymbolIterator);\n        valueNodes.push(await this.parse(Array.from(properties as Iterable<unknown>)));\n      }\n    }\n    return {\n      k: keyNodes,\n      v: valueNodes,\n      s: keyNodes.length,\n    };\n  }\n\n  private async parsePlainObject(\n    id: number,\n    current: Record<string, unknown>,\n    empty: boolean,\n  ): Promise<ObjectLikeNode> {\n    return {\n      t: empty ? SerovalNodeType.NullConstructor : SerovalNodeType.Object,\n      i: id,\n      s: undefined,\n      l: undefined,\n      c: undefined,\n      m: undefined,\n      p: await this.parseProperties(current),\n      e: undefined,\n      a: undefined,\n      f: undefined,\n      b: undefined,\n      o: getObjectFlag(current),\n    };\n  }\n\n  private async parseError(\n    id: number,\n    current: Error,\n  ): Promise<SerovalErrorNode> {\n    const options = getErrorOptions(current, this.features);\n    const optionsNode = options\n      ? await this.parseProperties(options)\n      : undefined;\n    return {\n      t: SerovalNodeType.Error,\n      i: id,\n      s: getErrorConstructor(current),\n      l: undefined,\n      c: undefined,\n      m: serializeString(current.message),\n      p: optionsNode,\n      e: undefined,\n      a: undefined,\n      f: undefined,\n      b: undefined,\n      o: undefined,\n    };\n  }\n\n  private async parseMap(\n    id: number,\n    current: Map<unknown, unknown>,\n  ): Promise<SerovalMapNode> {\n    const keyNodes: SerovalNode[] = [];\n    const valueNodes: SerovalNode[] = [];\n    const deferredKey: unknown[] = [];\n    const deferredValue: unknown[] = [];\n    for (const [key, value] of current.entries()) {\n      // Either key or value might be an iterable\n      if (this.isIterable(key) || this.isIterable(value)) {\n        deferredKey.push(key);\n        deferredValue.push(value);\n      } else {\n        keyNodes.push(await this.parse(key));\n        valueNodes.push(await this.parse(value));\n      }\n    }\n    for (let i = 0, len = deferredKey.length; i < len; i++) {\n      keyNodes.push(await this.parse(deferredKey[i]));\n      valueNodes.push(await this.parse(deferredValue[i]));\n    }\n    return {\n      t: SerovalNodeType.Map,\n      i: id,\n      s: undefined,\n      l: undefined,\n      c: undefined,\n      m: undefined,\n      p: undefined,\n      e: { k: keyNodes, v: valueNodes, s: current.size },\n      a: undefined,\n      f: undefined,\n      b: undefined,\n      o: undefined,\n    };\n  }\n\n  private async parseSet(\n    id: number,\n    current: Set<unknown>,\n  ): Promise<SerovalSetNode> {\n    const nodes: SerovalNode[] = [];\n    const deferred: unknown[] = [];\n    for (const item of current.keys()) {\n      // Iterables are lazy, so the evaluation must be deferred\n      if (this.isIterable(item)) {\n        deferred.push(item);\n      } else {\n        nodes.push(await this.parse(item));\n      }\n    }\n    // Parse deferred items\n    for (let i = 0, len = deferred.length; i < len; i++) {\n      nodes.push(await this.parse(deferred[i]));\n    }\n    return {\n      t: SerovalNodeType.Set,\n      i: id,\n      s: undefined,\n      l: current.size,\n      c: undefined,\n      m: undefined,\n      p: undefined,\n      e: undefined,\n      a: nodes,\n      f: undefined,\n      b: undefined,\n      o: undefined,\n    };\n  }\n\n  private async parseBlob(\n    id: number,\n    current: Blob,\n  ): Promise<SerovalBlobNode> {\n    return {\n      t: SerovalNodeType.Blob,\n      i: id,\n      s: undefined,\n      l: undefined,\n      c: serializeString(current.type),\n      m: undefined,\n      p: undefined,\n      e: undefined,\n      f: await this.parse(await current.arrayBuffer()),\n      a: undefined,\n      b: undefined,\n      o: undefined,\n    };\n  }\n\n  private async parseFile(\n    id: number,\n    current: File,\n  ): Promise<SerovalFileNode> {\n    return {\n      t: SerovalNodeType.File,\n      i: id,\n      s: undefined,\n      l: undefined,\n      c: serializeString(current.type),\n      m: serializeString(current.name),\n      p: undefined,\n      e: undefined,\n      f: await this.parse(await current.arrayBuffer()),\n      a: undefined,\n      b: current.lastModified,\n      o: undefined,\n    };\n  }\n\n  protected async parsePlainProperties(\n    entries: [key: string, value: unknown][],\n  ): Promise<SerovalPlainRecordNode> {\n    const size = entries.length;\n    const keyNodes: string[] = [];\n    const valueNodes: SerovalNode[] = [];\n    const deferredKeys: string[] = [];\n    const deferredValues: unknown[] = [];\n    for (let i = 0, key: string, item: unknown; i < size; i++) {\n      key = serializeString(entries[i][0]);\n      item = entries[i][1];\n      if (this.isIterable(item)) {\n        deferredKeys.push(key);\n        deferredValues.push(item);\n      } else {\n        keyNodes.push(key);\n        valueNodes.push(await this.parse(item));\n      }\n    }\n    for (let i = 0, len = deferredKeys.length; i < len; i++) {\n      keyNodes.push(deferredKeys[i]);\n      valueNodes.push(await this.parse(deferredValues[i]));\n    }\n    return {\n      k: keyNodes,\n      v: valueNodes,\n      s: size,\n    };\n  }\n\n  private async parseHeaders(\n    id: number,\n    current: Headers,\n  ): Promise<SerovalHeadersNode> {\n    const items: [key: string, value: unknown][] = [];\n    current.forEach((value, key) => {\n      items.push([key, value]);\n    });\n    return {\n      t: SerovalNodeType.Headers,\n      i: id,\n      s: undefined,\n      l: undefined,\n      c: undefined,\n      m: undefined,\n      p: undefined,\n      e: await this.parsePlainProperties(items),\n      a: undefined,\n      f: undefined,\n      b: undefined,\n      o: undefined,\n    };\n  }\n\n  private async parseFormData(\n    id: number,\n    current: FormData,\n  ): Promise<SerovalFormDataNode> {\n    const items: [key: string, value: FormDataEntryValue][] = [];\n    current.forEach((value, key) => {\n      items.push([key, value]);\n    });\n    return {\n      t: SerovalNodeType.FormData,\n      i: id,\n      s: undefined,\n      l: undefined,\n      c: undefined,\n      m: undefined,\n      p: undefined,\n      e: await this.parsePlainProperties(items),\n      a: undefined,\n      f: undefined,\n      b: undefined,\n      o: undefined,\n    };\n  }\n\n  private async parseRequest(\n    id: number,\n    current: Request,\n  ): Promise<SerovalRequestNode> {\n    return {\n      t: SerovalNodeType.Request,\n      i: id,\n      s: serializeString(current.url),\n      l: undefined,\n      c: undefined,\n      m: undefined,\n      p: undefined,\n      e: undefined,\n      f: await this.parse(\n        createRequestOptions(current, current.body ? await current.clone().arrayBuffer() : null),\n      ),\n      a: undefined,\n      b: undefined,\n      o: undefined,\n    };\n  }\n\n  private async parseResponse(\n    id: number,\n    current: Response,\n  ): Promise<SerovalResponseNode> {\n    return {\n      t: SerovalNodeType.Response,\n      i: id,\n      s: undefined,\n      l: undefined,\n      c: undefined,\n      m: undefined,\n      p: undefined,\n      e: undefined,\n      f: undefined,\n      a: [\n        current.body\n          ? await this.parse(await current.clone().arrayBuffer())\n          : NULL_NODE,\n        await this.parse(createResponseOptions(current)),\n      ],\n      b: undefined,\n      o: undefined,\n    };\n  }\n\n  private async parseEvent(\n    id: number,\n    current: Event,\n  ): Promise<SerovalEventNode> {\n    return {\n      t: SerovalNodeType.Event,\n      i: id,\n      s: serializeString(current.type),\n      l: undefined,\n      c: undefined,\n      m: undefined,\n      p: undefined,\n      e: undefined,\n      a: undefined,\n      f: await this.parse(createEventOptions(current)),\n      b: undefined,\n      o: undefined,\n    };\n  }\n\n  private async parseCustomEvent(\n    id: number,\n    current: CustomEvent,\n  ): Promise<SerovalCustomEventNode> {\n    return {\n      t: SerovalNodeType.CustomEvent,\n      i: id,\n      s: serializeString(current.type),\n      l: undefined,\n      c: undefined,\n      m: undefined,\n      p: undefined,\n      e: undefined,\n      a: undefined,\n      f: await this.parse(createCustomEventOptions(current)),\n      b: undefined,\n      o: undefined,\n    };\n  }\n\n  private async parseAggregateError(\n    id: number,\n    current: AggregateError,\n  ): Promise<SerovalAggregateErrorNode> {\n    const options = getErrorOptions(current, this.features);\n    const optionsNode = options\n      ? await this.parseProperties(options)\n      : undefined;\n    return {\n      t: SerovalNodeType.AggregateError,\n      i: id,\n      s: undefined,\n      l: undefined,\n      c: undefined,\n      m: serializeString(current.message),\n      p: optionsNode,\n      e: undefined,\n      a: undefined,\n      f: undefined,\n      b: undefined,\n      o: undefined,\n    };\n  }\n\n  private async parsePromise(\n    id: number,\n    current: Promise<unknown>,\n  ): Promise<SerovalPromiseNode> {\n    const [status, result] = await promiseToResult(current);\n    return {\n      t: SerovalNodeType.Promise,\n      i: id,\n      s: status,\n      l: undefined,\n      c: undefined,\n      m: undefined,\n      p: undefined,\n      e: undefined,\n      a: undefined,\n      f: await this.parse(result),\n      b: undefined,\n      o: undefined,\n    };\n  }\n\n  private async parsePlugin(\n    id: number,\n    current: unknown,\n  ): Promise<SerovalPluginNode | undefined> {\n    const currentPlugins = this.plugins;\n    if (currentPlugins) {\n      for (let i = 0, len = currentPlugins.length; i < len; i++) {\n        const plugin = currentPlugins[i];\n        if (plugin.parse.async && plugin.test(current)) {\n          return createPluginNode(\n            id,\n            plugin.tag,\n            await plugin.parse.async(current, this, {\n              id,\n            }),\n          );\n        }\n      }\n    }\n    return undefined;\n  }\n\n  private async parseObject(\n    id: number,\n    current: object,\n  ): Promise<SerovalNode> {\n    if (Array.isArray(current)) {\n      return this.parseArray(id, current);\n    }\n    const currentClass = current.constructor;\n    switch (currentClass) {\n      case Object:\n        return this.parsePlainObject(\n          id,\n          current as Record<string, unknown>,\n          false,\n        );\n      case undefined:\n        return this.parsePlainObject(\n          id,\n          current as Record<string, unknown>,\n          true,\n        );\n      case Date:\n        return createDateNode(id, current as unknown as Date);\n      case RegExp:\n        return createRegExpNode(id, current as unknown as RegExp);\n      case Error:\n      case EvalError:\n      case RangeError:\n      case ReferenceError:\n      case SyntaxError:\n      case TypeError:\n      case URIError:\n        return this.parseError(id, current as unknown as Error);\n      case Number:\n      case Boolean:\n      case String:\n      case BigInt:\n        return this.parseBoxed(id, current);\n      default:\n        break;\n    }\n    const currentFeatures = this.features;\n    // Promises\n    if (\n      (currentFeatures & Feature.Promise)\n      && (currentClass === Promise || current instanceof Promise)\n    ) {\n      return this.parsePromise(id, current as unknown as Promise<unknown>);\n    }\n    // Typed Arrays\n    if (currentFeatures & Feature.TypedArray) {\n      switch (currentClass) {\n        case ArrayBuffer:\n          return createArrayBufferNode(id, current as unknown as ArrayBuffer);\n        case Int8Array:\n        case Int16Array:\n        case Int32Array:\n        case Uint8Array:\n        case Uint16Array:\n        case Uint32Array:\n        case Uint8ClampedArray:\n        case Float32Array:\n        case Float64Array:\n          return this.parseTypedArray(id, current as unknown as TypedArrayValue);\n        case DataView:\n          return this.parseDataView(id, current as unknown as DataView);\n        default:\n          break;\n      }\n    }\n    // BigInt Typed Arrays\n    if ((currentFeatures & BIGINT_FLAG) === BIGINT_FLAG) {\n      switch (currentClass) {\n        case BigInt64Array:\n        case BigUint64Array:\n          return this.parseBigIntTypedArray(id, current as unknown as BigIntTypedArrayValue);\n        default:\n          break;\n      }\n    }\n    // ES Collection\n    if (currentFeatures & Feature.Map && currentClass === Map) {\n      return this.parseMap(\n        id,\n        current as unknown as Map<unknown, unknown>,\n      );\n    }\n    if (currentFeatures & Feature.Set && currentClass === Set) {\n      return this.parseSet(\n        id,\n        current as unknown as Set<unknown>,\n      );\n    }\n    // Web APIs\n    if (currentFeatures & Feature.WebAPI) {\n      switch (currentClass) {\n        case (typeof URL !== 'undefined' ? URL : UNIVERSAL_SENTINEL):\n          return createURLNode(id, current as unknown as URL);\n        case (typeof URLSearchParams !== 'undefined' ? URLSearchParams : UNIVERSAL_SENTINEL):\n          return createURLSearchParamsNode(id, current as unknown as URLSearchParams);\n        case (typeof Blob !== 'undefined' ? Blob : UNIVERSAL_SENTINEL):\n          return this.parseBlob(id, current as unknown as Blob);\n        case (typeof File !== 'undefined' ? File : UNIVERSAL_SENTINEL):\n          return this.parseFile(id, current as unknown as File);\n        case (typeof Headers !== 'undefined' ? Headers : UNIVERSAL_SENTINEL):\n          return this.parseHeaders(id, current as unknown as Headers);\n        case (typeof FormData !== 'undefined' ? FormData : UNIVERSAL_SENTINEL):\n          return this.parseFormData(id, current as unknown as FormData);\n        case (typeof Request !== 'undefined' ? Request : UNIVERSAL_SENTINEL):\n          return this.parseRequest(id, current as unknown as Request);\n        case (typeof Response !== 'undefined' ? Response : UNIVERSAL_SENTINEL):\n          return this.parseResponse(id, current as unknown as Response);\n        case (typeof Event !== 'undefined' ? Event : UNIVERSAL_SENTINEL):\n          return this.parseEvent(id, current as unknown as Event);\n        case (typeof CustomEvent !== 'undefined' ? CustomEvent : UNIVERSAL_SENTINEL):\n          return this.parseCustomEvent(id, current as unknown as CustomEvent);\n        case (typeof DOMException !== 'undefined' ? DOMException : UNIVERSAL_SENTINEL):\n          return createDOMExceptionNode(id, current as unknown as DOMException);\n        default:\n          break;\n      }\n    }\n    const parsed = await this.parsePlugin(id, current);\n    if (parsed) {\n      return parsed;\n    }\n    if (\n      (currentFeatures & Feature.AggregateError)\n      && typeof AggregateError !== 'undefined'\n      && (currentClass === AggregateError || current instanceof AggregateError)\n    ) {\n      return this.parseAggregateError(id, current as unknown as AggregateError);\n    }\n    // Slow path. We only need to handle Errors and Iterators\n    // since they have very broad implementations.\n    if (current instanceof Error) {\n      return this.parseError(id, current);\n    }\n    // Generator functions don't have a global constructor\n    // despite existing\n    if (currentFeatures & Feature.Symbol && Symbol.iterator in current) {\n      return this.parsePlainObject(id, current, !!currentClass);\n    }\n    throw new UnsupportedTypeError(current);\n  }\n\n  async parse<T>(current: T): Promise<SerovalNode> {\n    switch (current) {\n      case true: return TRUE_NODE;\n      case false: return FALSE_NODE;\n      case undefined: return UNDEFINED_NODE;\n      case null: return NULL_NODE;\n      default: break;\n    }\n    switch (typeof current) {\n      case 'string': return createStringNode(current as string);\n      case 'number': return createNumberNode(current as number);\n      case 'bigint':\n        assert(this.features & Feature.BigInt, new UnsupportedTypeError(current));\n        return createBigIntNode(current as bigint);\n      case 'object': {\n        const id = this.getReference(current);\n        return typeof id === 'number' ? this.parseObject(id, current as object) : id;\n      }\n      case 'symbol': {\n        assert(this.features & Feature.Symbol, new UnsupportedTypeError(current));\n        const id = this.getReference(current);\n        return typeof id === 'number' ? createWKSymbolNode(id, current as WellKnownSymbols) : id;\n      }\n      case 'function':\n        assert(hasReferenceID(current), new Error('Cannot serialize function without reference ID.'));\n        return this.getStrictReference(current);\n      default:\n        throw new UnsupportedTypeError(current);\n    }\n  }\n}\n", "import BaseAsyncParserContext from '../base/async';\nimport type { BaseParserContextOptions } from '../parser-context';\nimport type { SerovalMode } from '../plugin';\n\nexport type AsyncParserContextOptions = Omit<BaseParserContextOptions, 'refs'>\n\nexport default class AsyncParserContext extends BaseAsyncParserContext {\n  readonly mode: SerovalMode = 'vanilla';\n}\n", "/* eslint-disable prefer-spread */\nimport { deserializeString } from '../string';\nimport type { BigIntTypedArrayValue, TypedArrayValue } from '../../types';\nimport { getReference } from '../reference';\nimport { getTypedArrayConstructor } from '../shared';\nimport type {\n  SerovalAggregateErrorNode,\n  SerovalArrayBufferNode,\n  SerovalArrayNode,\n  SerovalBigIntTypedArrayNode,\n  SerovalBlobNode,\n  SerovalBoxedNode,\n  SerovalCustomEventNode,\n  SerovalDOMExceptionNode,\n  SerovalDataViewNode,\n  SerovalDateNode,\n  SerovalErrorNode,\n  SerovalEventNode,\n  SerovalFileNode,\n  SerovalFormDataNode,\n  SerovalHeadersNode,\n  SerovalMapNode,\n  SerovalNode,\n  SerovalNullConstructorNode,\n  SerovalObjectNode,\n  SerovalObjectRecordKey,\n  SerovalObjectRecordNode,\n  SerovalPluginNode,\n  SerovalPromiseNode,\n  SerovalReferenceNode,\n  SerovalRegExpNode,\n  SerovalRequestNode,\n  SerovalResponseNode,\n  SerovalSetNode,\n  SerovalTypedArrayNode,\n  SerovalURLNode,\n  SerovalURLSearchParamsNode,\n} from '../types';\nimport {\n  SerovalObjectRecordSpecialKey,\n} from '../types';\nimport {\n  CONSTANT_VAL,\n  ERROR_CONSTRUCTOR,\n  SYMBOL_REF,\n  SerovalNodeType,\n  SerovalObjectFlags,\n} from '../constants';\nimport type { Plugin, PluginAccessOptions } from '../plugin';\n\nfunction applyObjectFlag(obj: unknown, flag: SerovalObjectFlags): unknown {\n  switch (flag) {\n    case SerovalObjectFlags.Frozen:\n      return Object.freeze(obj);\n    case SerovalObjectFlags.NonExtensible:\n      return Object.preventExtensions(obj);\n    case SerovalObjectFlags.Sealed:\n      return Object.seal(obj);\n    default:\n      return obj;\n  }\n}\n\ntype AssignableValue = AggregateError | Error | Iterable<unknown>\ntype AssignableNode = SerovalAggregateErrorNode | SerovalErrorNode;\n\ninterface Deferred {\n  resolve(value: unknown): void;\n  reject(value: unknown): void;\n  promise: Promise<unknown>;\n}\n\nfunction createDeferred(): Deferred {\n  let resolve: Deferred['resolve'];\n  let reject: Deferred['reject'];\n  return {\n    resolve(v): void {\n      resolve(v);\n    },\n    reject(v): void {\n      reject(v);\n    },\n    promise: new Promise((res, rej) => {\n      resolve = res as Deferred['resolve'];\n      reject = rej as Deferred['reject'];\n    }),\n  };\n}\n\nexport interface DeserializerOptions extends PluginAccessOptions {\n  markedRefs: number[] | Set<number>;\n}\n\nexport default class VanillaDeserializerContext implements PluginAccessOptions {\n  /**\n   * Mapping ids to values\n   * @private\n   */\n  values: Map<number, unknown> = new Map();\n\n  /**\n   * Which refs are pre-marked\n   * @private\n   */\n  refs: Set<number>;\n\n  plugins?: Plugin<any, any>[] | undefined;\n\n  constructor(options: DeserializerOptions) {\n    this.plugins = options.plugins;\n    this.refs = new Set(options.markedRefs);\n  }\n\n  assignIndexedValue<T>(\n    index: number,\n    value: T,\n  ): T {\n    if (this.refs.has(index)) {\n      this.values.set(index, value);\n    }\n    return value;\n  }\n\n  private deserializeReference(\n    node: SerovalReferenceNode,\n  ): unknown {\n    return this.assignIndexedValue(node.i, getReference(deserializeString(node.s)));\n  }\n\n  private deserializeArray(\n    node: SerovalArrayNode,\n  ): unknown[] {\n    const len = node.l;\n    const result: unknown[] = this.assignIndexedValue(\n      node.i,\n      new Array<unknown>(len),\n    );\n    let item: SerovalNode | undefined;\n    for (let i = 0; i < len; i++) {\n      item = node.a[i];\n      if (item) {\n        result[i] = this.deserialize(item);\n      }\n    }\n    applyObjectFlag(result, node.o);\n    return result;\n  }\n\n  private deserializeProperties(\n    node: SerovalObjectRecordNode,\n    result: Record<string | symbol, unknown>,\n  ): Record<string | symbol, unknown> {\n    const len = node.s;\n    if (len) {\n      let key: SerovalObjectRecordKey;\n      let value: unknown;\n      const keys = node.k;\n      const vals = node.v;\n      for (let i = 0; i < len; i++) {\n        key = keys[i];\n        value = this.deserialize(vals[i]);\n        switch (key) {\n          case SerovalObjectRecordSpecialKey.SymbolIterator: {\n            const current = value as unknown[];\n            result[Symbol.iterator] = (): IterableIterator<unknown> => current.values();\n          }\n            break;\n          default:\n            result[deserializeString(key)] = value;\n            break;\n        }\n      }\n    }\n    return result;\n  }\n\n  private deserializeObject(\n    node: SerovalObjectNode | SerovalNullConstructorNode,\n  ): Record<string, unknown> {\n    const result = this.assignIndexedValue(\n      node.i,\n      (node.t === SerovalNodeType.Object\n        ? {}\n        : Object.create(null)) as Record<string, unknown>,\n    );\n    this.deserializeProperties(node.p, result);\n    applyObjectFlag(result, node.o);\n    return result;\n  }\n\n  private deserializeDate(\n    node: SerovalDateNode,\n  ): Date {\n    return this.assignIndexedValue(node.i, new Date(node.s));\n  }\n\n  private deserializeRegExp(\n    node: SerovalRegExpNode,\n  ): RegExp {\n    return this.assignIndexedValue(node.i, new RegExp(node.c, node.m));\n  }\n\n  private deserializeSet(\n    node: SerovalSetNode,\n  ): Set<unknown> {\n    const result = this.assignIndexedValue(node.i, new Set<unknown>());\n    const items = node.a;\n    for (let i = 0, len = node.l; i < len; i++) {\n      result.add(this.deserialize(items[i]));\n    }\n    return result;\n  }\n\n  private deserializeMap(\n    node: SerovalMapNode,\n  ): Map<unknown, unknown> {\n    const result = this.assignIndexedValue(\n      node.i,\n      new Map<unknown, unknown>(),\n    );\n    const keys = node.e.k;\n    const vals = node.e.v;\n    for (let i = 0, len = node.e.s; i < len; i++) {\n      result.set(\n        this.deserialize(keys[i]),\n        this.deserialize(vals[i]),\n      );\n    }\n    return result;\n  }\n\n  private deserializeArrayBuffer(\n    node: SerovalArrayBufferNode,\n  ): ArrayBuffer {\n    const bytes = new Uint8Array(node.s);\n    const result = this.assignIndexedValue(node.i, bytes.buffer);\n    return result;\n  }\n\n  private deserializeTypedArray(\n    node: SerovalTypedArrayNode | SerovalBigIntTypedArrayNode,\n  ): TypedArrayValue | BigIntTypedArrayValue {\n    const TypedArray = getTypedArrayConstructor(node.c);\n    const source = this.deserialize(node.f) as ArrayBuffer;\n    const result = this.assignIndexedValue(node.i, new TypedArray(\n      source,\n      node.b,\n      node.l,\n    ));\n    return result;\n  }\n\n  private deserializeDataView(\n    node: SerovalDataViewNode,\n  ): DataView {\n    const source = this.deserialize(node.f) as ArrayBuffer;\n    const result = this.assignIndexedValue(node.i, new DataView(\n      source,\n      node.b,\n      node.l,\n    ));\n    return result;\n  }\n\n  private deserializeDictionary<T extends AssignableValue>(\n    node: AssignableNode,\n    result: T,\n  ): T {\n    if (node.p) {\n      const fields = this.deserializeProperties(node.p, {});\n      Object.assign(result, fields);\n    }\n    return result;\n  }\n\n  private deserializeAggregateError(\n    node: SerovalAggregateErrorNode,\n  ): AggregateError {\n    // Serialize the required arguments\n    const result = this.assignIndexedValue(\n      node.i,\n      new AggregateError([], deserializeString(node.m)),\n    );\n    // `AggregateError` might've been extended\n    // either through class or custom properties\n    // Make sure to assign extra properties\n    return this.deserializeDictionary(node, result);\n  }\n\n  private deserializeError(\n    node: SerovalErrorNode,\n  ): Error {\n    const ErrorConstructor = ERROR_CONSTRUCTOR[node.s];\n    const result = this.assignIndexedValue(\n      node.i,\n      new ErrorConstructor(deserializeString(node.m)),\n    );\n    return this.deserializeDictionary(node, result);\n  }\n\n  private async deserializePromise(\n    node: SerovalPromiseNode,\n  ): Promise<unknown> {\n    const deferred = createDeferred();\n    const result = this.assignIndexedValue(node.i, deferred.promise);\n    const deserialized = this.deserialize(node.f);\n    if (node.s) {\n      deferred.resolve(deserialized);\n    } else {\n      deferred.reject(deserialized);\n    }\n    return result;\n  }\n\n  private deserializeURL(\n    node: SerovalURLNode,\n  ): URL {\n    return this.assignIndexedValue(node.i, new URL(deserializeString(node.s)));\n  }\n\n  private deserializeURLSearchParams(\n    node: SerovalURLSearchParamsNode,\n  ): URLSearchParams {\n    return this.assignIndexedValue(node.i, new URLSearchParams(deserializeString(node.s)));\n  }\n\n  private deserializeBlob(\n    node: SerovalBlobNode,\n  ): Blob {\n    const source = this.deserialize(node.f) as ArrayBuffer;\n    const result = this.assignIndexedValue(node.i, new Blob(\n      [source],\n      { type: deserializeString(node.c) },\n    ));\n    return result;\n  }\n\n  private deserializeFile(\n    node: SerovalFileNode,\n  ): File {\n    const source = this.deserialize(node.f) as ArrayBuffer;\n    const result = this.assignIndexedValue(node.i, new File(\n      [source],\n      deserializeString(node.m),\n      { type: deserializeString(node.c), lastModified: node.b },\n    ));\n    return result;\n  }\n\n  private deserializeHeaders(\n    node: SerovalHeadersNode,\n  ): Headers {\n    const result = this.assignIndexedValue(node.i, new Headers());\n    const keys = node.e.k;\n    const vals = node.e.v;\n    for (let i = 0, len = node.e.s; i < len; i++) {\n      result.set(\n        deserializeString(keys[i]),\n        this.deserialize(vals[i]) as string,\n      );\n    }\n    return result;\n  }\n\n  private deserializeFormData(\n    node: SerovalFormDataNode,\n  ): FormData {\n    const result = this.assignIndexedValue(node.i, new FormData());\n    const keys = node.e.k;\n    const vals = node.e.v;\n    for (let i = 0, len = node.e.s; i < len; i++) {\n      result.set(\n        deserializeString(keys[i]),\n        this.deserialize(vals[i]) as FormDataEntryValue,\n      );\n    }\n    return result;\n  }\n\n  private deserializeBoxed(\n    node: SerovalBoxedNode,\n  ): unknown {\n    return this.assignIndexedValue(\n      node.i,\n      Object(this.deserialize(node.f)),\n    );\n  }\n\n  private deserializeRequest(\n    node: SerovalRequestNode,\n  ): Request {\n    return this.assignIndexedValue(\n      node.i,\n      new Request(deserializeString(node.s), this.deserialize(node.f) as RequestInit),\n    );\n  }\n\n  private deserializeResponse(\n    node: SerovalResponseNode,\n  ): Response {\n    return this.assignIndexedValue(\n      node.i,\n      new Response(\n        this.deserialize(node.a[0]) as BodyInit,\n        this.deserialize(node.a[1]) as RequestInit,\n      ),\n    );\n  }\n\n  private deserializeEvent(\n    node: SerovalEventNode,\n  ): Event {\n    return this.assignIndexedValue(\n      node.i,\n      new Event(\n        deserializeString(node.s),\n        this.deserialize(node.f) as EventInit,\n      ),\n    );\n  }\n\n  private deserializeCustomEvent(\n    node: SerovalCustomEventNode,\n  ): CustomEvent {\n    return this.assignIndexedValue(\n      node.i,\n      new CustomEvent(\n        deserializeString(node.s),\n        this.deserialize(node.f) as CustomEventInit,\n      ),\n    );\n  }\n\n  private deserializeDOMException(\n    node: SerovalDOMExceptionNode,\n  ): DOMException {\n    return this.assignIndexedValue(\n      node.i,\n      new DOMException(\n        deserializeString(node.s),\n        deserializeString(node.c),\n      ),\n    );\n  }\n\n  private deserializePlugin(node: SerovalPluginNode): unknown {\n    const currentPlugins = this.plugins;\n    if (currentPlugins) {\n      for (let i = 0, len = currentPlugins.length; i < len; i++) {\n        const plugin = currentPlugins[i];\n        if (plugin.tag === node.c) {\n          return plugin.deserialize(node.s, this, {\n            id: node.i,\n          });\n        }\n      }\n    }\n    throw new Error('Missing plugin for tag \"' + node.c + '\".');\n  }\n\n  deserialize(node: SerovalNode): unknown {\n    switch (node.t) {\n      case SerovalNodeType.Constant:\n        return CONSTANT_VAL[node.s];\n      case SerovalNodeType.Number:\n        return node.s;\n      case SerovalNodeType.String:\n        return deserializeString(node.s);\n      case SerovalNodeType.BigInt:\n        return BigInt(node.s);\n      case SerovalNodeType.IndexedValue:\n        return this.values.get(node.i);\n      case SerovalNodeType.Reference:\n        return this.deserializeReference(node);\n      case SerovalNodeType.Array:\n        return this.deserializeArray(node);\n      case SerovalNodeType.Object:\n      case SerovalNodeType.NullConstructor:\n        return this.deserializeObject(node);\n      case SerovalNodeType.Date:\n        return this.deserializeDate(node);\n      case SerovalNodeType.RegExp:\n        return this.deserializeRegExp(node);\n      case SerovalNodeType.Set:\n        return this.deserializeSet(node);\n      case SerovalNodeType.Map:\n        return this.deserializeMap(node);\n      case SerovalNodeType.ArrayBuffer:\n        return this.deserializeArrayBuffer(node);\n      case SerovalNodeType.BigIntTypedArray:\n      case SerovalNodeType.TypedArray:\n        return this.deserializeTypedArray(node);\n      case SerovalNodeType.DataView:\n        return this.deserializeDataView(node);\n      case SerovalNodeType.AggregateError:\n        return this.deserializeAggregateError(node);\n      case SerovalNodeType.Error:\n        return this.deserializeError(node);\n      case SerovalNodeType.Promise:\n        return this.deserializePromise(node);\n      case SerovalNodeType.WKSymbol:\n        return SYMBOL_REF[node.s];\n      case SerovalNodeType.URL:\n        return this.deserializeURL(node);\n      case SerovalNodeType.URLSearchParams:\n        return this.deserializeURLSearchParams(node);\n      case SerovalNodeType.Blob:\n        return this.deserializeBlob(node);\n      case SerovalNodeType.File:\n        return this.deserializeFile(node);\n      case SerovalNodeType.Headers:\n        return this.deserializeHeaders(node);\n      case SerovalNodeType.FormData:\n        return this.deserializeFormData(node);\n      case SerovalNodeType.Boxed:\n        return this.deserializeBoxed(node);\n      case SerovalNodeType.Request:\n        return this.deserializeRequest(node);\n      case SerovalNodeType.Response:\n        return this.deserializeResponse(node);\n      case SerovalNodeType.Event:\n        return this.deserializeEvent(node);\n      case SerovalNodeType.CustomEvent:\n        return this.deserializeCustomEvent(node);\n      case SerovalNodeType.DOMException:\n        return this.deserializeDOMException(node);\n      case SerovalNodeType.Plugin:\n        return this.deserializePlugin(node);\n      default:\n        throw new Error('invariant');\n    }\n  }\n}\n", "import { Feature } from './compat';\nimport {\n  CONSTANT_STRING,\n  ERROR_CONSTRUCTOR_STRING,\n  SYMBOL_STRING,\n  SerovalNodeType,\n  SerovalObjectFlags,\n} from './constants';\nimport { REFERENCES_KEY } from './keys';\nimport type { Plugin, PluginAccessOptions, SerovalMode } from './plugin';\nimport { isValidIdentifier } from './shared';\nimport type {\n  SerovalArrayNode,\n  SerovalIndexedValueNode,\n  SerovalNode,\n  SerovalObjectRecordKey,\n  SerovalObjectRecordNode,\n  SerovalReferenceNode,\n  SerovalObjectNode,\n  SerovalNullConstructorNode,\n  SerovalRegExpNode,\n  SerovalDateNode,\n  SerovalSetNode,\n  SerovalMapNode,\n  SerovalArrayBufferNode,\n  SerovalTypedArrayNode,\n  SerovalBigIntTypedArrayNode,\n  SerovalDataViewNode,\n  SerovalAggregateErrorNode,\n  SerovalErrorNode,\n  SerovalPromiseNode,\n  SerovalWKSymbolNode,\n  SerovalURLNode,\n  SerovalURLSearchParamsNode,\n  SerovalBlobNode,\n  SerovalFileNode,\n  SerovalHeadersNode,\n  SerovalFormDataNode,\n  SerovalBoxedNode,\n  SerovalRequestNode,\n  SerovalResponseNode,\n  SerovalEventNode,\n  SerovalCustomEventNode,\n  SerovalDOMExceptionNode,\n  SerovalPluginNode,\n  SerovalPromiseConstructorNode,\n  SerovalPromiseResolveNode,\n  SerovalPromiseRejectNode,\n  SerovalReadableStreamConstructorNode,\n  SerovalReadableStreamEnqueueNode,\n  SerovalReadableStreamErrorNode,\n  SerovalReadableStreamCloseNode,\n} from './types';\nimport {\n  SerovalObjectRecordSpecialKey,\n} from './types';\n\ninterface IndexAssignment {\n  t: 'index';\n  s: string;\n  k: undefined;\n  v: string;\n}\n\ninterface SetAssignment {\n  t: 'set';\n  s: string;\n  k: string;\n  v: string;\n}\n\ninterface AddAssignment {\n  t: 'add';\n  s: string;\n  k: undefined;\n  v: string;\n}\n\ninterface DeleteAssignment {\n  t: 'delete';\n  s: string;\n  k: string;\n  v: undefined;\n}\n\n// Array of assignments to be done (used for recursion)\ntype Assignment =\n  | IndexAssignment\n  | AddAssignment\n  | SetAssignment\n  | DeleteAssignment;\n\nexport interface FlaggedObject {\n  type: SerovalObjectFlags;\n  value: string;\n}\n\nfunction getAssignmentExpression(assignment: Assignment): string {\n  switch (assignment.t) {\n    case 'index':\n      return assignment.s + '=' + assignment.v;\n    case 'set':\n      return assignment.s + '.set(' + assignment.k + ',' + assignment.v + ')';\n    case 'add':\n      return assignment.s + '.add(' + assignment.v + ')';\n    case 'delete':\n      return assignment.s + '.delete(' + assignment.k + ')';\n    default:\n      return '';\n  }\n}\n\nfunction mergeAssignments(assignments: Assignment[]): Assignment[] {\n  const newAssignments: Assignment[] = [];\n  let current = assignments[0];\n  for (let i = 1, len = assignments.length, item: Assignment, prev = current; i < len; i++) {\n    item = assignments[i];\n    if (item.t === 'index' && item.v === prev.v) {\n      // Merge if the right-hand value is the same\n      // saves at least 2 chars\n      current = {\n        t: 'index',\n        s: item.s,\n        k: undefined,\n        v: getAssignmentExpression(current),\n      } as IndexAssignment;\n    } else if (item.t === 'set' && item.s === prev.s) {\n      // Maps has chaining methods, merge if source is the same\n      current = {\n        t: 'set',\n        s: getAssignmentExpression(current),\n        k: item.k,\n        v: item.v,\n      } as SetAssignment;\n    } else if (item.t === 'add' && item.s === prev.s) {\n      // Sets has chaining methods too\n      current = {\n        t: 'add',\n        s: getAssignmentExpression(current),\n        k: undefined,\n        v: item.v,\n      } as AddAssignment;\n    } else if (item.t === 'delete' && item.s === prev.s) {\n      // Maps has chaining methods, merge if source is the same\n      current = {\n        t: 'delete',\n        s: getAssignmentExpression(current),\n        k: item.k,\n        v: undefined,\n      } as DeleteAssignment;\n    } else {\n      // Different assignment, push current\n      newAssignments.push(current);\n      current = item;\n    }\n    prev = item;\n  }\n\n  newAssignments.push(current);\n\n  return newAssignments;\n}\n\nfunction resolveAssignments(assignments: Assignment[]): string | undefined {\n  if (assignments.length) {\n    let result = '';\n    const merged = mergeAssignments(assignments);\n    for (let i = 0, len = merged.length; i < len; i++) {\n      result += getAssignmentExpression(merged[i]) + ',';\n    }\n    return result;\n  }\n  return undefined;\n}\n\nconst NULL_CONSTRUCTOR = 'Object.create(null)';\nconst SET_CONSTRUCTOR = 'new Set';\nconst MAP_CONSTRUCTOR = 'new Map';\n\nconst PROMISE_RESOLVE = 'Promise.resolve';\nconst PROMISE_REJECT = 'Promise.reject';\n\nconst SYMBOL_ITERATOR = 'Symbol.iterator';\n\nconst enum SpecialReference {\n  Sentinel = 0,\n}\n\nconst SPECIAL_REFERENCE_VALUE: Record<SpecialReference, string> = {\n  [SpecialReference.Sentinel]: '[]',\n};\n\nconst OBJECT_FLAG_CONSTRUCTOR: Record<SerovalObjectFlags, string | undefined> = {\n  [SerovalObjectFlags.Frozen]: 'Object.freeze',\n  [SerovalObjectFlags.Sealed]: 'Object.seal',\n  [SerovalObjectFlags.NonExtensible]: 'Object.preventExtensions',\n  [SerovalObjectFlags.None]: undefined,\n};\n\nexport interface BaseSerializerContextOptions extends PluginAccessOptions {\n  features: number;\n  markedRefs: number[] | Set<number>;\n}\n\nexport default abstract class BaseSerializerContext implements PluginAccessOptions {\n  /**\n   * @private\n   */\n  features: number;\n\n  /**\n   * To check if an object is synchronously referencing itself\n   * @private\n   */\n  stack: number[] = [];\n\n  /**\n   * Array of object mutations\n   * @private\n   */\n  flags: FlaggedObject[] = [];\n\n  /**\n   * Array of assignments to be done (used for recursion)\n   * @private\n   */\n  assignments: Assignment[] = [];\n\n  plugins?: Plugin<any, any>[] | undefined;\n\n  /**\n   * Refs that are...referenced\n   * @private\n   */\n  marked: Set<number>;\n\n  constructor(options: BaseSerializerContextOptions) {\n    this.plugins = options.plugins;\n    this.features = options.features;\n    this.marked = new Set(options.markedRefs);\n  }\n\n  abstract readonly mode: SerovalMode;\n\n  /**\n   * A tiny function that tells if a reference\n   * is to be accessed. This is a requirement for\n   * deciding whether or not we should generate\n   * an identifier for the object\n   */\n  protected markRef(id: number): void {\n    this.marked.add(id);\n  }\n\n  protected isMarked(id: number): boolean {\n    return this.marked.has(id);\n  }\n\n  /**\n   * Converts the ID of a reference into a identifier string\n   * that is used to refer to the object instance in the\n   * generated script.\n   */\n  abstract getRefParam(id: number | string): string;\n\n  private specials = new Set<SpecialReference>();\n\n  /**\n   * Generates special references that isn't provided by the user\n   * but by the script.\n   */\n  protected getSpecialReference(ref: SpecialReference): string {\n    const param = this.getRefParam('_' + ref);\n    if (this.specials.has(ref)) {\n      return param;\n    }\n    this.specials.add(ref);\n    return param + '=' + SPECIAL_REFERENCE_VALUE[ref];\n  }\n\n  protected pushObjectFlag(flag: SerovalObjectFlags, id: number): void {\n    if (flag !== SerovalObjectFlags.None) {\n      this.markRef(id);\n      this.flags.push({\n        type: flag,\n        value: this.getRefParam(id),\n      });\n    }\n  }\n\n  private resolveFlags(): string | undefined {\n    let result = '';\n    for (let i = 0, current = this.flags, len = current.length; i < len; i++) {\n      const flag = current[i];\n      result += OBJECT_FLAG_CONSTRUCTOR[flag.type] + '(' + flag.value + '),';\n    }\n    return result;\n  }\n\n  protected resolvePatches(): string | undefined {\n    const assignments = resolveAssignments(this.assignments);\n    const flags = this.resolveFlags();\n    if (assignments) {\n      if (flags) {\n        return assignments + flags;\n      }\n      return assignments;\n    }\n    return flags;\n  }\n\n  /**\n   * Generates the inlined assignment for the reference\n   * This is different from the assignments array as this one\n   * signifies creation rather than mutation\n   */\n  protected createAssignment(\n    source: string,\n    value: string,\n  ): void {\n    this.assignments.push({\n      t: 'index',\n      s: source,\n      k: undefined,\n      v: value,\n    });\n  }\n\n  protected createAddAssignment(\n    ref: number,\n    value: string,\n  ): void {\n    this.assignments.push({\n      t: 'add',\n      s: this.getRefParam(ref),\n      k: undefined,\n      v: value,\n    });\n  }\n\n  protected createSetAssignment(\n    ref: number,\n    key: string,\n    value: string,\n  ): void {\n    this.assignments.push({\n      t: 'set',\n      s: this.getRefParam(ref),\n      k: key,\n      v: value,\n    });\n  }\n\n  protected createDeleteAssignment(\n    ref: number,\n    key: string,\n  ): void {\n    this.assignments.push({\n      t: 'delete',\n      s: this.getRefParam(ref),\n      k: key,\n      v: undefined,\n    });\n  }\n\n  protected createArrayAssign(\n    ref: number,\n    index: number | string,\n    value: string,\n  ): void {\n    this.createAssignment(this.getRefParam(ref) + '[' + index + ']', value);\n  }\n\n  protected createObjectAssign(\n    ref: number,\n    key: string,\n    value: string,\n  ): void {\n    this.createAssignment(this.getRefParam(ref) + '.' + key, value);\n  }\n\n  /**\n   * Checks if the value is in the stack. Stack here is a reference\n   * structure to know if a object is to be accessed in a TDZ.\n   */\n  isIndexedValueInStack(\n    node: SerovalNode,\n  ): boolean {\n    return node.t === SerovalNodeType.IndexedValue && this.stack.includes(node.i);\n  }\n\n  /**\n   * Produces an assignment expression. `id` generates a reference\n   * parameter (through `getRefParam`) and has the option to\n   * return the reference parameter directly or assign a value to\n   * it.\n   */\n  protected abstract assignIndexedValue(\n    id: number,\n    value: string,\n  ): string;\n\n  protected serializeReference(\n    node: SerovalReferenceNode,\n  ): string {\n    return this.assignIndexedValue(node.i, REFERENCES_KEY + '.get(\"' + node.s + '\")');\n  }\n\n  protected getIterableAccess(): string {\n    return this.features & Feature.ArrayPrototypeValues\n      ? '.values()'\n      : '[' + SYMBOL_ITERATOR + ']()';\n  }\n\n  protected serializeIterable(\n    node: SerovalNode,\n  ): string {\n    const key = '[' + SYMBOL_ITERATOR + ']';\n    const parent = this.stack;\n    this.stack = [];\n    let serialized = this.serialize(node) + this.getIterableAccess();\n    this.stack = parent;\n    if (this.features & Feature.ArrowFunction) {\n      serialized = ':()=>' + serialized;\n    } else if (this.features & Feature.MethodShorthand) {\n      serialized = '(){return ' + serialized + '}';\n    } else {\n      serialized = ':function(){return ' + serialized + '}';\n    }\n    return key + serialized;\n  }\n\n  protected serializeArrayItem(\n    id: number,\n    item: SerovalNode | undefined,\n    index: number,\n  ): string {\n    // Check if index is a hole\n    if (item) {\n      // Check if item is a parent\n      if (this.isIndexedValueInStack(item)) {\n        this.markRef(id);\n        this.createArrayAssign(id, index, this.getRefParam((item as SerovalIndexedValueNode).i));\n        return '';\n      }\n      return this.serialize(item);\n    }\n    return '';\n  }\n\n  protected serializeArray(\n    node: SerovalArrayNode,\n  ): string {\n    const id = node.i;\n    if (node.l) {\n      this.stack.push(id);\n      // This is different than Map and Set\n      // because we also need to serialize\n      // the holes of the Array\n      const list = node.a;\n      let values = this.serializeArrayItem(id, list[0], 0);\n      let isHoley = values === '';\n      for (let i = 1, len = node.l, item: string; i < len; i++) {\n        item = this.serializeArrayItem(id, list[i], i);\n        values += ',' + item;\n        isHoley = item === '';\n      }\n      this.stack.pop();\n      this.pushObjectFlag(node.o, node.i);\n      return this.assignIndexedValue(id, '[' + values + (isHoley ? ',]' : ']'));\n    }\n    return this.assignIndexedValue(id, '[]');\n  }\n\n  protected serializeProperty(\n    id: number,\n    key: SerovalObjectRecordKey,\n    val: SerovalNode,\n  ): string {\n    // Only reason this is a switch is so that\n    // in the future, maybe other Symbols are going\n    // to be introduced and/or has merit to be added\n    // E.g. Symbol.asyncIterator\n    switch (key) {\n      case SerovalObjectRecordSpecialKey.SymbolIterator:\n        return this.serializeIterable(val);\n      default: {\n        const check = Number(key);\n        // Test if key is a valid number or JS identifier\n        // so that we don't have to serialize the key and wrap with brackets\n        const isIdentifier = check >= 0 || isValidIdentifier(key);\n        if (this.isIndexedValueInStack(val)) {\n          const refParam = this.getRefParam((val as SerovalIndexedValueNode).i);\n          this.markRef(id);\n          // eslint-disable-next-line no-self-compare\n          if (isIdentifier && check !== check) {\n            this.createObjectAssign(id, key, refParam);\n          } else {\n            this.createArrayAssign(id, isIdentifier ? key : ('\"' + key + '\"'), refParam);\n          }\n          return '';\n        }\n        return (isIdentifier ? key : ('\"' + key + '\"')) + ':' + this.serialize(val);\n      }\n    }\n  }\n\n  protected serializeProperties(\n    sourceID: number,\n    node: SerovalObjectRecordNode,\n  ): string {\n    const len = node.s;\n    if (len) {\n      this.stack.push(sourceID);\n      const keys = node.k;\n      const values = node.v;\n      let result = this.serializeProperty(sourceID, keys[0], values[0]);\n      for (let i = 1, item = result; i < len; i++) {\n        item = this.serializeProperty(sourceID, keys[i], values[i]);\n        result += (item && result && ',') + item;\n      }\n      this.stack.pop();\n      return '{' + result + '}';\n    }\n    return '{}';\n  }\n\n  protected serializeObject(\n    node: SerovalObjectNode,\n  ): string {\n    this.pushObjectFlag(node.o, node.i);\n    return this.assignIndexedValue(node.i, this.serializeProperties(node.i, node.p));\n  }\n\n  protected serializeWithObjectAssign(\n    value: SerovalObjectRecordNode,\n    id: number,\n    serialized: string,\n  ): string {\n    const fields = this.serializeProperties(id, value);\n    if (fields !== '{}') {\n      return 'Object.assign(' + serialized + ',' + fields + ')';\n    }\n    return serialized;\n  }\n\n  protected serializeAssignment(\n    sourceID: number,\n    mainAssignments: Assignment[],\n    key: SerovalObjectRecordKey,\n    value: SerovalNode,\n  ): void {\n    switch (key) {\n      case SerovalObjectRecordSpecialKey.SymbolIterator: {\n        const parent = this.stack;\n        this.stack = [];\n        const serialized = this.serialize(value) + this.getIterableAccess();\n        this.stack = parent;\n        const parentAssignment = this.assignments;\n        this.assignments = mainAssignments;\n        this.createArrayAssign(\n          sourceID,\n          this.getSpecialReference(SpecialReference.Sentinel),\n          this.features & Feature.ArrowFunction\n            ? '()=>' + serialized\n            : 'function(){return ' + serialized + '}',\n        );\n        this.assignments = parentAssignment;\n      }\n        break;\n      default: {\n        const serialized = this.serialize(value);\n        const check = Number(key);\n        // Test if key is a valid number or JS identifier\n        // so that we don't have to serialize the key and wrap with brackets\n        const isIdentifier = check >= 0 || isValidIdentifier(key);\n        if (this.isIndexedValueInStack(value)) {\n          // eslint-disable-next-line no-self-compare\n          if (isIdentifier && check !== check) {\n            this.createObjectAssign(sourceID, key, serialized);\n          } else {\n            this.createArrayAssign(sourceID, isIdentifier ? key : ('\"' + key + '\"'), serialized);\n          }\n        } else {\n          const parentAssignment = this.assignments;\n          this.assignments = mainAssignments;\n          if (isIdentifier) {\n            this.createObjectAssign(sourceID, key, serialized);\n          } else {\n            this.createArrayAssign(sourceID, isIdentifier ? key : ('\"' + key + '\"'), serialized);\n          }\n          this.assignments = parentAssignment;\n        }\n      }\n    }\n  }\n\n  protected serializeAssignments(\n    sourceID: number,\n    node: SerovalObjectRecordNode,\n  ): string | undefined {\n    const len = node.s;\n    if (len) {\n      this.stack.push(sourceID);\n      const mainAssignments: Assignment[] = [];\n      const keys = node.k;\n      const values = node.v;\n      for (let i = 0; i < len; i++) {\n        this.serializeAssignment(sourceID, mainAssignments, keys[i], values[i]);\n      }\n      this.stack.pop();\n      return resolveAssignments(mainAssignments);\n    }\n    return undefined;\n  }\n\n  protected serializeDictionary(\n    i: number,\n    p: SerovalObjectRecordNode | undefined,\n    init: string,\n  ): string {\n    if (p) {\n      if (this.features & Feature.ObjectAssign) {\n        init = this.serializeWithObjectAssign(p, i, init);\n      } else {\n        this.markRef(i);\n        const assignments = this.serializeAssignments(i, p);\n        if (assignments) {\n          return '(' + this.assignIndexedValue(i, init) + ',' + assignments + this.getRefParam(i) + ')';\n        }\n      }\n    }\n    return this.assignIndexedValue(i, init);\n  }\n\n  protected serializeNullConstructor(\n    node: SerovalNullConstructorNode,\n  ): string {\n    this.pushObjectFlag(node.o, node.i);\n    return this.serializeDictionary(node.i, node.p, NULL_CONSTRUCTOR);\n  }\n\n  protected serializeDate(\n    node: SerovalDateNode,\n  ): string {\n    return this.assignIndexedValue(node.i, 'new Date(\"' + node.s + '\")');\n  }\n\n  protected serializeRegExp(\n    node: SerovalRegExpNode,\n  ): string {\n    return this.assignIndexedValue(node.i, '/' + node.c + '/' + node.m);\n  }\n\n  protected serializeSetItem(\n    id: number,\n    item: SerovalNode,\n  ): string {\n    if (this.isIndexedValueInStack(item)) {\n      this.markRef(id);\n      this.createAddAssignment(id, this.getRefParam((item as SerovalIndexedValueNode).i));\n      return '';\n    }\n    return this.serialize(item);\n  }\n\n  protected serializeSet(\n    node: SerovalSetNode,\n  ): string {\n    let serialized = SET_CONSTRUCTOR;\n    const size = node.l;\n    const id = node.i;\n    if (size) {\n      const items = node.a;\n      this.stack.push(id);\n      let result = this.serializeSetItem(id, items[0]);\n      for (let i = 1, item = result; i < size; i++) {\n        item = this.serializeSetItem(id, items[i]);\n        result += (item && result && ',') + item;\n      }\n      this.stack.pop();\n      if (result) {\n        serialized += '([' + result + '])';\n      }\n    }\n    return this.assignIndexedValue(id, serialized);\n  }\n\n  protected serializeMapEntry(\n    id: number,\n    key: SerovalNode,\n    val: SerovalNode,\n  ): string {\n    if (this.isIndexedValueInStack(key)) {\n      // Create reference for the map instance\n      const keyRef = this.getRefParam((key as SerovalIndexedValueNode).i);\n      this.markRef(id);\n      // Check if value is a parent\n      if (this.isIndexedValueInStack(val)) {\n        const valueRef = this.getRefParam((val as SerovalIndexedValueNode).i);\n        // Register an assignment since\n        // both key and value are a parent of this\n        // Map instance\n        this.createSetAssignment(id, keyRef, valueRef);\n        return '';\n      }\n      // Reset the stack\n      // This is required because the serialized\n      // value is no longer part of the expression\n      // tree and has been moved to the deferred\n      // assignment\n      if (val.t !== SerovalNodeType.IndexedValue && val.i != null && this.isMarked(val.i)) {\n        // We use a trick here using sequence (or comma) expressions\n        // basically we serialize the intended object in place WITHOUT\n        // actually returning it, this is by returning a placeholder\n        // value that we will remove sometime after.\n        const serialized = '(' + this.serialize(val) + ',[' + this.getSpecialReference(SpecialReference.Sentinel) + ',' + this.getSpecialReference(SpecialReference.Sentinel) + '])';\n        this.createSetAssignment(id, keyRef, this.getRefParam(val.i));\n        this.createDeleteAssignment(id, this.getSpecialReference(SpecialReference.Sentinel));\n        return serialized;\n      }\n      const parent = this.stack;\n      this.stack = [];\n      this.createSetAssignment(id, keyRef, this.serialize(val));\n      this.stack = parent;\n      return '';\n    }\n    if (this.isIndexedValueInStack(val)) {\n      // Create ref for the Map instance\n      const valueRef = this.getRefParam((val as SerovalIndexedValueNode).i);\n      this.markRef(id);\n      if (key.t !== SerovalNodeType.IndexedValue && key.i != null && this.isMarked(key.i)) {\n        const serialized = '(' + this.serialize(key) + ',[' + this.getSpecialReference(SpecialReference.Sentinel) + ',' + this.getSpecialReference(SpecialReference.Sentinel) + '])';\n        this.createSetAssignment(id, this.getRefParam(key.i), valueRef);\n        this.createDeleteAssignment(id, this.getSpecialReference(SpecialReference.Sentinel));\n        return serialized;\n      }\n      // Reset stack for the key serialization\n      const parent = this.stack;\n      this.stack = [];\n      this.createSetAssignment(id, this.serialize(key), valueRef);\n      this.stack = parent;\n      return '';\n    }\n\n    return '[' + this.serialize(key) + ',' + this.serialize(val) + ']';\n  }\n\n  protected serializeMap(\n    node: SerovalMapNode,\n  ): string {\n    let serialized = MAP_CONSTRUCTOR;\n    const size = node.e.s;\n    const id = node.i;\n    if (size) {\n      const keys = node.e.k;\n      const vals = node.e.v;\n      this.stack.push(id);\n      let result = this.serializeMapEntry(id, keys[0], vals[0]);\n      for (let i = 1, item = result; i < size; i++) {\n        item = this.serializeMapEntry(id, keys[i], vals[i]);\n        result += (item && result && ',') + item;\n      }\n      this.stack.pop();\n      // Check if there are any values\n      // so that the empty Map constructor\n      // can be used instead\n      if (result) {\n        serialized += '([' + result + '])';\n      }\n    }\n    return this.assignIndexedValue(id, serialized);\n  }\n\n  protected serializeArrayBuffer(\n    node: SerovalArrayBufferNode,\n  ): string {\n    let result = 'new Uint8Array(';\n    const buffer = node.s;\n    const len = buffer.length;\n    if (len) {\n      result += '[' + buffer[0];\n      for (let i = 1; i < len; i++) {\n        result += ',' + buffer[i];\n      }\n      result += ']';\n    }\n    return this.assignIndexedValue(node.i, result + ').buffer');\n  }\n\n  protected serializeTypedArray(\n    node: SerovalTypedArrayNode | SerovalBigIntTypedArrayNode,\n  ): string {\n    return this.assignIndexedValue(\n      node.i,\n      'new ' + node.c + '(' + this.serialize(node.f) + ',' + node.b + ',' + node.l + ')',\n    );\n  }\n\n  protected serializeDataView(\n    node: SerovalDataViewNode,\n  ): string {\n    return this.assignIndexedValue(\n      node.i,\n      'new DataView(' + this.serialize(node.f) + ',' + node.b + ',' + node.l + ')',\n    );\n  }\n\n  protected serializeAggregateError(\n    node: SerovalAggregateErrorNode,\n  ): string {\n  // Serialize the required arguments\n    const id = node.i;\n    this.stack.push(id);\n    const serialized = 'new AggregateError([],\"' + node.m + '\")';\n    this.stack.pop();\n    // `AggregateError` might've been extended\n    // either through class or custom properties\n    // Make sure to assign extra properties\n    return this.serializeDictionary(id, node.p, serialized);\n  }\n\n  protected serializeError(\n    node: SerovalErrorNode,\n  ): string {\n    return this.serializeDictionary(node.i, node.p, 'new ' + ERROR_CONSTRUCTOR_STRING[node.s] + '(\"' + node.m + '\")');\n  }\n\n  protected serializePromise(\n    node: SerovalPromiseNode,\n  ): string {\n    let serialized: string;\n    // Check if resolved value is a parent expression\n    const fulfilled = node.f;\n    const id = node.i;\n    const constructor = node.s ? PROMISE_RESOLVE : PROMISE_REJECT;\n    if (this.isIndexedValueInStack(fulfilled)) {\n      // A Promise trick, reference the value\n      // inside the `then` expression so that\n      // the Promise evaluates after the parent\n      // has initialized\n      const ref = this.getRefParam((fulfilled as SerovalIndexedValueNode).i);\n      if (this.features & Feature.ArrowFunction) {\n        if (node.s) {\n          serialized = constructor + '().then(()=>' + ref + ')';\n        } else {\n          serialized = constructor + '().catch(()=>{throw ' + ref + '})';\n        }\n      } else if (node.s) {\n        serialized = constructor + '().then(function(){return ' + ref + '})';\n      } else {\n        serialized = constructor + '().catch(function(){throw ' + ref + '})';\n      }\n    } else {\n      this.stack.push(id);\n      const result = this.serialize(fulfilled);\n      this.stack.pop();\n      // just inline the value/reference here\n      serialized = constructor + '(' + result + ')';\n    }\n    return this.assignIndexedValue(id, serialized);\n  }\n\n  protected serializeWKSymbol(\n    node: SerovalWKSymbolNode,\n  ): string {\n    return this.assignIndexedValue(node.i, SYMBOL_STRING[node.s]);\n  }\n\n  protected serializeURL(\n    node: SerovalURLNode,\n  ): string {\n    return this.assignIndexedValue(node.i, 'new URL(\"' + node.s + '\")');\n  }\n\n  protected serializeURLSearchParams(\n    node: SerovalURLSearchParamsNode,\n  ): string {\n    return this.assignIndexedValue(\n      node.i,\n      node.s ? 'new URLSearchParams(\"' + node.s + '\")' : 'new URLSearchParams',\n    );\n  }\n\n  protected serializeBlob(\n    node: SerovalBlobNode,\n  ): string {\n    return this.assignIndexedValue(\n      node.i,\n      'new Blob([' + this.serialize(node.f) + '],{type:\"' + node.c + '\"})',\n    );\n  }\n\n  protected serializeFile(\n    node: SerovalFileNode,\n  ): string {\n    return this.assignIndexedValue(\n      node.i,\n      'new File([' + this.serialize(node.f) + '],\"' + node.m + '\",{type:\"' + node.c + '\",lastModified:' + node.b + '})',\n    );\n  }\n\n  protected serializeHeaders(\n    node: SerovalHeadersNode,\n  ): string {\n    return this.assignIndexedValue(\n      node.i,\n      'new Headers(' + this.serializeProperties(node.i, node.e) + ')',\n    );\n  }\n\n  protected serializeFormDataEntry(id: number, key: string, value: SerovalNode): string {\n    return this.getRefParam(id) + '.append(\"' + key + '\",' + this.serialize(value) + ')';\n  }\n\n  protected serializeFormDataEntries(\n    node: SerovalFormDataNode,\n    size: number,\n  ): string {\n    const keys = node.e.k;\n    const vals = node.e.v;\n    const id = node.i;\n    let result = this.serializeFormDataEntry(id, keys[0], vals[0]);\n    for (let i = 1; i < size; i++) {\n      result += ',' + this.serializeFormDataEntry(id, keys[i], vals[i]);\n    }\n    return result;\n  }\n\n  protected serializeFormData(\n    node: SerovalFormDataNode,\n  ): string {\n    const size = node.e.s;\n    const id = node.i;\n    if (size) {\n      this.markRef(id);\n    }\n    const result = this.assignIndexedValue(id, 'new FormData()');\n    if (size) {\n      const entries = this.serializeFormDataEntries(node, size);\n      return '(' + result + ',' + (entries ? entries + ',' : '') + this.getRefParam(id) + ')';\n    }\n    return result;\n  }\n\n  protected serializeBoxed(\n    node: SerovalBoxedNode,\n  ): string {\n    return this.assignIndexedValue(node.i, 'Object(' + this.serialize(node.f) + ')');\n  }\n\n  protected serializeRequest(\n    node: SerovalRequestNode,\n  ): string {\n    return this.assignIndexedValue(node.i, 'new Request(\"' + node.s + '\",' + this.serialize(node.f) + ')');\n  }\n\n  protected serializeResponse(\n    node: SerovalResponseNode,\n  ): string {\n    return this.assignIndexedValue(\n      node.i,\n      'new Response(' + this.serialize(node.a[0]) + ',' + this.serialize(node.a[1]) + ')',\n    );\n  }\n\n  protected serializeEvent(\n    node: SerovalEventNode,\n  ): string {\n    return this.assignIndexedValue(\n      node.i,\n      'new Event(\"' + node.s + '\",' + this.serialize(node.f) + ')',\n    );\n  }\n\n  protected serializeCustomEvent(\n    node: SerovalCustomEventNode,\n  ): string {\n    return this.assignIndexedValue(\n      node.i,\n      'new CustomEvent(\"' + node.s + '\",' + this.serialize(node.f) + ')',\n    );\n  }\n\n  protected serializeDOMException(\n    node: SerovalDOMExceptionNode,\n  ): string {\n    return this.assignIndexedValue(\n      node.i,\n      'new DOMException(\"' + node.s + '\",\"' + node.c + '\")',\n    );\n  }\n\n  protected serializePlugin(\n    node: SerovalPluginNode,\n  ): string {\n    const currentPlugins = this.plugins;\n    if (currentPlugins) {\n      for (let i = 0, len = currentPlugins.length; i < len; i++) {\n        const plugin = currentPlugins[i];\n        if (plugin.tag === node.c) {\n          return plugin.serialize(node.s, this, {\n            id: node.i,\n          });\n        }\n      }\n    }\n    throw new Error('Missing plugin for tag \"' + node.c + '\".');\n  }\n\n  protected abstract serializePromiseConstructor(\n    node: SerovalPromiseConstructorNode,\n  ): string;\n\n  protected abstract serializePromiseResolve(\n    node: SerovalPromiseResolveNode,\n  ): string;\n\n  protected abstract serializePromiseReject(\n    node: SerovalPromiseRejectNode,\n  ): string;\n\n  protected abstract serializeReadableStreamConstructor(\n    node: SerovalReadableStreamConstructorNode,\n  ): string;\n\n  protected abstract serializeReadableStreamEnqueue(\n    node: SerovalReadableStreamEnqueueNode,\n  ): string;\n\n  protected abstract serializeReadableStreamError(\n    node: SerovalReadableStreamErrorNode,\n  ): string;\n\n  protected abstract serializeReadableStreamClose(\n    node: SerovalReadableStreamCloseNode,\n  ): string;\n\n  serialize(node: SerovalNode): string {\n    switch (node.t) {\n      case SerovalNodeType.Constant:\n        return CONSTANT_STRING[node.s];\n      case SerovalNodeType.Number:\n        return '' + node.s;\n      case SerovalNodeType.String:\n        return '\"' + node.s + '\"';\n      case SerovalNodeType.BigInt:\n        return node.s + 'n';\n      case SerovalNodeType.IndexedValue:\n        return this.getRefParam(node.i);\n      case SerovalNodeType.Reference:\n        return this.serializeReference(node);\n      case SerovalNodeType.Array:\n        return this.serializeArray(node);\n      case SerovalNodeType.Object:\n        return this.serializeObject(node);\n      case SerovalNodeType.NullConstructor:\n        return this.serializeNullConstructor(node);\n      case SerovalNodeType.Date:\n        return this.serializeDate(node);\n      case SerovalNodeType.RegExp:\n        return this.serializeRegExp(node);\n      case SerovalNodeType.Set:\n        return this.serializeSet(node);\n      case SerovalNodeType.Map:\n        return this.serializeMap(node);\n      case SerovalNodeType.ArrayBuffer:\n        return this.serializeArrayBuffer(node);\n      case SerovalNodeType.BigIntTypedArray:\n      case SerovalNodeType.TypedArray:\n        return this.serializeTypedArray(node);\n      case SerovalNodeType.DataView:\n        return this.serializeDataView(node);\n      case SerovalNodeType.AggregateError:\n        return this.serializeAggregateError(node);\n      case SerovalNodeType.Error:\n        return this.serializeError(node);\n      case SerovalNodeType.Promise:\n        return this.serializePromise(node);\n      case SerovalNodeType.WKSymbol:\n        return this.serializeWKSymbol(node);\n      case SerovalNodeType.URL:\n        return this.serializeURL(node);\n      case SerovalNodeType.URLSearchParams:\n        return this.serializeURLSearchParams(node);\n      case SerovalNodeType.Blob:\n        return this.serializeBlob(node);\n      case SerovalNodeType.File:\n        return this.serializeFile(node);\n      case SerovalNodeType.Headers:\n        return this.serializeHeaders(node);\n      case SerovalNodeType.FormData:\n        return this.serializeFormData(node);\n      case SerovalNodeType.Boxed:\n        return this.serializeBoxed(node);\n      case SerovalNodeType.PromiseConstructor:\n        return this.serializePromiseConstructor(node);\n      case SerovalNodeType.PromiseResolve:\n        return this.serializePromiseResolve(node);\n      case SerovalNodeType.PromiseReject:\n        return this.serializePromiseReject(node);\n      case SerovalNodeType.ReadableStreamConstructor:\n        return this.serializeReadableStreamConstructor(node);\n      case SerovalNodeType.ReadableStreamEnqueue:\n        return this.serializeReadableStreamEnqueue(node);\n      case SerovalNodeType.ReadableStreamError:\n        return this.serializeReadableStreamError(node);\n      case SerovalNodeType.ReadableStreamClose:\n        return this.serializeReadableStreamClose(node);\n      case SerovalNodeType.Request:\n        return this.serializeRequest(node);\n      case SerovalNodeType.Response:\n        return this.serializeResponse(node);\n      case SerovalNodeType.Event:\n        return this.serializeEvent(node);\n      case SerovalNodeType.CustomEvent:\n        return this.serializeCustomEvent(node);\n      case SerovalNodeType.DOMException:\n        return this.serializeDOMException(node);\n      case SerovalNodeType.Plugin:\n        return this.serializePlugin(node);\n      default:\n        throw new Error('invariant');\n    }\n  }\n}\n", "// Written by https://github.com/DylanPiercey and is distributed under the MIT license.\nconst REF_START_CHARS = 'hjkmoquxzABCDEFGHIJKLNPQRTUVWXYZ$_'; // Avoids chars that could evaluate to a reserved word.\nconst REF_START_CHARS_LEN = REF_START_CHARS.length;\nconst REF_CHARS = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789$_';\nconst REF_CHARS_LEN = REF_CHARS.length;\n\nexport default function getIdentifier(index: number): string {\n  let mod = index % REF_START_CHARS_LEN;\n  let ref = REF_START_CHARS[mod];\n  index = (index - mod) / REF_START_CHARS_LEN;\n  while (index > 0) {\n    mod = index % REF_CHARS_LEN;\n    ref += REF_CHARS[mod];\n    index = (index - mod) / REF_CHARS_LEN;\n  }\n  return ref;\n}\n", "import type {\n  SerovalNode,\n  SerovalPromiseConstructorNode,\n  SerovalPromiseRejectNode,\n  SerovalPromiseResolveNode,\n  SerovalReadableStreamCloseNode,\n  SerovalReadableStreamConstructorNode,\n  SerovalReadableStreamEnqueueNode,\n  SerovalReadableStreamErrorNode,\n} from '../types';\nimport type { BaseSerializerContextOptions } from '../serializer-context.old';\nimport BaseSerializerContext from '../serializer-context.old';\nimport getIdentifier from '../get-identifier';\nimport type { SerovalMode } from '../plugin';\nimport { Feature } from '../compat';\nimport { SerovalNodeType } from '../constants';\n\nexport type VanillaSerializerContextOptions = BaseSerializerContextOptions\n\nexport default class VanillaSerializerContext extends BaseSerializerContext {\n  readonly mode: SerovalMode = 'vanilla';\n\n  /**\n   * Map tree refs to actual refs\n   * @private\n   */\n  valid = new Map<number | string, number>();\n\n  /**\n   * Variables\n   * @private\n   */\n  vars: (string | undefined)[] = [];\n\n  /**\n   * Increments the number of references the referenced value has\n   */\n  markRef(\n    current: number,\n  ): void {\n    this.marked.add(current);\n  }\n\n  /**\n   * Creates the reference param (identifier) from the given reference ID\n   * Calling this function means the value has been referenced somewhere\n   */\n  getRefParam(index: number | string): string {\n    /**\n     * Creates a new reference ID from a given reference ID\n     * This new reference ID means that the reference itself\n     * has been referenced at least once, and is used to generate\n     * the variables\n     */\n    let actualIndex = this.valid.get(index);\n    if (actualIndex == null) {\n      actualIndex = this.valid.size;\n      this.valid.set(index, actualIndex);\n    }\n    let identifier = this.vars[actualIndex];\n    if (identifier == null) {\n      identifier = getIdentifier(actualIndex);\n      this.vars[actualIndex] = identifier;\n    }\n    return identifier;\n  }\n\n  protected assignIndexedValue(\n    index: number,\n    value: string,\n  ): string {\n    if (this.isMarked(index)) {\n      return this.getRefParam(index) + '=' + value;\n    }\n    return value;\n  }\n\n  protected serializePromiseConstructor(\n    node: SerovalPromiseConstructorNode,\n  ): string {\n    throw new Error('Unsupported node type \"' + node.t + '\".');\n  }\n\n  protected serializePromiseResolve(\n    node: SerovalPromiseResolveNode,\n  ): string {\n    throw new Error('Unsupported node type \"' + node.t + '\".');\n  }\n\n  protected serializePromiseReject(\n    node: SerovalPromiseRejectNode,\n  ): string {\n    throw new Error('Unsupported node type \"' + node.t + '\".');\n  }\n\n  protected serializeReadableStreamConstructor(\n    node: SerovalReadableStreamConstructorNode,\n  ): string {\n    throw new Error('Unsupported node type \"' + node.t + '\".');\n  }\n\n  protected serializeReadableStreamEnqueue(\n    node: SerovalReadableStreamEnqueueNode,\n  ): string {\n    throw new Error('Unsupported node type \"' + node.t + '\".');\n  }\n\n  protected serializeReadableStreamError(\n    node: SerovalReadableStreamErrorNode,\n  ): string {\n    throw new Error('Unsupported node type \"' + node.t + '\".');\n  }\n\n  protected serializeReadableStreamClose(\n    node: SerovalReadableStreamCloseNode,\n  ): string {\n    throw new Error('Unsupported node type \"' + node.t + '\".');\n  }\n\n  serializeTop(tree: SerovalNode): string {\n    const result = this.serialize(tree);\n    // Shared references detected\n    if (tree.i != null && this.vars.length) {\n      const patches = this.resolvePatches();\n      let body = result;\n      if (patches) {\n        // Get (or create) a ref from the source\n        const index = this.getRefParam(tree.i);\n        body = result + ',' + patches + index;\n        if (!result.startsWith(index + '=')) {\n          body = index + '=' + body;\n        }\n      }\n      let params = this.vars.length > 1\n        ? this.vars.join(',')\n        : this.vars[0];\n      // Source is probably already assigned\n      if (this.features & Feature.ArrowFunction) {\n        params = this.vars.length > 1 || this.vars.length === 0\n          ? '(' + params + ')'\n          : params;\n        return '(' + params + '=>(' + body + '))()';\n      }\n      return '(function(' + params + '){return ' + body + '})()';\n    }\n    if (tree.t === SerovalNodeType.Object) {\n      return '(' + result + ')';\n    }\n    return result;\n  }\n}\n", "/* eslint-disable prefer-destructuring */\nimport type { BigIntTypedArrayValue, TypedArrayValue } from '../../types';\nimport UnsupportedTypeError from '../UnsupportedTypeError';\nimport assert from '../assert';\nimport {\n  createArrayBufferNode,\n  createBigIntNode,\n  createDateNode,\n  createNumberNode,\n  createPluginNode,\n  createRegExpNode,\n  createStringNode,\n  createWKSymbolNode,\n} from '../base-primitives';\nimport { BIGINT_FLAG, Feature } from '../compat';\nimport type { WellKnownSymbols } from '../constants';\nimport {\n  SerovalNodeType, UNIVERSAL_SENTINEL,\n} from '../constants';\nimport { createCustomEventOptions, createEventOptions } from '../constructors';\nimport {\n  FALSE_NODE,\n  NULL_NODE,\n  TRUE_NODE,\n  UNDEFINED_NODE,\n} from '../literals';\nimport type { BaseParserContextOptions } from '../parser-context';\nimport { BaseParserContext } from '../parser-context';\nimport { hasReferenceID } from '../reference';\nimport { getErrorConstructor, getErrorOptions, getObjectFlag } from '../shared';\nimport { serializeString } from '../string';\nimport { SerovalObjectRecordSpecialKey } from '../types';\nimport type {\n  SerovalBoxedNode,\n  SerovalArrayNode,\n  SerovalNode,\n  SerovalNullConstructorNode,\n  SerovalObjectNode,\n  SerovalObjectRecordKey,\n  SerovalObjectRecordNode,\n  SerovalErrorNode,\n  SerovalMapNode,\n  SerovalSetNode,\n  SerovalPluginNode,\n  SerovalAggregateErrorNode,\n  SerovalCustomEventNode,\n  SerovalEventNode,\n  SerovalHeadersNode,\n  SerovalPlainRecordNode,\n  SerovalFormDataNode,\n  SerovalTypedArrayNode,\n  SerovalBigIntTypedArrayNode,\n  SerovalDataViewNode,\n} from '../types';\nimport { createDOMExceptionNode, createURLNode, createURLSearchParamsNode } from '../web-api';\n\ntype ObjectLikeNode =\n  | SerovalObjectNode\n  | SerovalNullConstructorNode;\n\nexport interface BaseSyncParserContextOptions extends BaseParserContextOptions {\n  refs?: Map<unknown, number>;\n}\n\nexport default abstract class BaseSyncParserContext extends BaseParserContext {\n  protected parseItems(\n    current: unknown[],\n  ): SerovalNode[] {\n    const size = current.length;\n    const nodes = [];\n    const deferred = [];\n    for (let i = 0, item: unknown; i < size; i++) {\n      if (i in current) {\n        item = current[i];\n        if (this.isIterable(item)) {\n          deferred[i] = item;\n        } else {\n          nodes[i] = this.parse(item);\n        }\n      }\n    }\n    for (let i = 0; i < size; i++) {\n      if (i in deferred) {\n        nodes[i] = this.parse(deferred[i]);\n      }\n    }\n    return nodes;\n  }\n\n  protected parseArray(\n    id: number,\n    current: unknown[],\n  ): SerovalArrayNode {\n    return {\n      t: SerovalNodeType.Array,\n      i: id,\n      s: undefined,\n      l: current.length,\n      c: undefined,\n      m: undefined,\n      p: undefined,\n      e: undefined,\n      a: this.parseItems(current),\n      f: undefined,\n      b: undefined,\n      o: getObjectFlag(current),\n    };\n  }\n\n  protected parseProperties(\n    properties: Record<string, unknown>,\n  ): SerovalObjectRecordNode {\n    const entries = Object.entries(properties);\n    const keyNodes: SerovalObjectRecordKey[] = [];\n    const valueNodes: SerovalNode[] = [];\n    const deferredKeys: string[] = [];\n    const deferredValues: unknown[] = [];\n    for (\n      let i = 0, len = entries.length, key: string, item: unknown;\n      i < len;\n      i++\n    ) {\n      key = serializeString(entries[i][0]);\n      item = entries[i][1];\n      // Defer iterables since iterables have lazy evaluation.\n      // Of course this doesn't include types seroval supports.\n      if (this.isIterable(item)) {\n        deferredKeys.push(key);\n        deferredValues.push(item);\n      } else {\n        keyNodes.push(key);\n        valueNodes.push(this.parse(item));\n      }\n    }\n    for (let i = 0, len = deferredKeys.length; i < len; i++) {\n      keyNodes.push(deferredKeys[i]);\n      valueNodes.push(this.parse(deferredValues[i]));\n    }\n    // Check special properties, symbols in this case\n    if (this.features & Feature.Symbol) {\n      if (Symbol.iterator in properties) {\n        keyNodes.push(SerovalObjectRecordSpecialKey.SymbolIterator);\n        valueNodes.push(this.parse(Array.from(properties as Iterable<unknown>)));\n      }\n    }\n    return {\n      k: keyNodes,\n      v: valueNodes,\n      s: keyNodes.length,\n    };\n  }\n\n  protected parsePlainObject(\n    id: number,\n    current: Record<string, unknown>,\n    empty: boolean,\n  ): ObjectLikeNode {\n    return {\n      t: empty ? SerovalNodeType.NullConstructor : SerovalNodeType.Object,\n      i: id,\n      s: undefined,\n      l: undefined,\n      c: undefined,\n      m: undefined,\n      p: this.parseProperties(current),\n      e: undefined,\n      a: undefined,\n      f: undefined,\n      b: undefined,\n      o: getObjectFlag(current),\n    };\n  }\n\n  protected parseBoxed(\n    id: number,\n    current: object,\n  ): SerovalBoxedNode {\n    return {\n      t: SerovalNodeType.Boxed,\n      i: id,\n      s: undefined,\n      l: undefined,\n      c: undefined,\n      m: undefined,\n      p: undefined,\n      e: undefined,\n      a: undefined,\n      f: this.parse(current.valueOf()),\n      b: undefined,\n      o: undefined,\n    };\n  }\n\n  protected parseTypedArray(\n    id: number,\n    current: TypedArrayValue,\n  ): SerovalTypedArrayNode {\n    return {\n      t: SerovalNodeType.TypedArray,\n      i: id,\n      s: undefined,\n      l: current.length,\n      c: current.constructor.name,\n      m: undefined,\n      p: undefined,\n      e: undefined,\n      a: undefined,\n      f: this.parse(current.buffer),\n      b: current.byteOffset,\n      o: undefined,\n    };\n  }\n\n  protected parseBigIntTypedArray(\n    id: number,\n    current: BigIntTypedArrayValue,\n  ): SerovalBigIntTypedArrayNode {\n    return {\n      t: SerovalNodeType.BigIntTypedArray,\n      i: id,\n      s: undefined,\n      l: current.length,\n      c: current.constructor.name,\n      m: undefined,\n      p: undefined,\n      e: undefined,\n      a: undefined,\n      f: this.parse(current.buffer),\n      b: current.byteOffset,\n      o: undefined,\n    };\n  }\n\n  protected parseDataView(\n    id: number,\n    current: DataView,\n  ): SerovalDataViewNode {\n    return {\n      t: SerovalNodeType.DataView,\n      i: id,\n      s: undefined,\n      l: current.byteLength,\n      c: undefined,\n      m: undefined,\n      p: undefined,\n      e: undefined,\n      a: undefined,\n      f: this.parse(current.buffer),\n      b: current.byteOffset,\n      o: undefined,\n    };\n  }\n\n  protected parseError(\n    id: number,\n    current: Error,\n  ): SerovalErrorNode {\n    const options = getErrorOptions(current, this.features);\n    const optionsNode = options\n      ? this.parseProperties(options)\n      : undefined;\n    return {\n      t: SerovalNodeType.Error,\n      i: id,\n      s: getErrorConstructor(current),\n      l: undefined,\n      c: undefined,\n      m: serializeString(current.message),\n      p: optionsNode,\n      e: undefined,\n      a: undefined,\n      f: undefined,\n      b: undefined,\n      o: undefined,\n    };\n  }\n\n  protected parseMap(\n    id: number,\n    current: Map<unknown, unknown>,\n  ): SerovalMapNode {\n    const keyNodes: SerovalNode[] = [];\n    const valueNodes: SerovalNode[] = [];\n    const deferredKey: unknown[] = [];\n    const deferredValue: unknown[] = [];\n    for (const [key, value] of current.entries()) {\n      // Either key or value might be an iterable\n      if (this.isIterable(key) || this.isIterable(value)) {\n        deferredKey.push(key);\n        deferredValue.push(value);\n      } else {\n        keyNodes.push(this.parse(key));\n        valueNodes.push(this.parse(value));\n      }\n    }\n    for (let i = 0, len = deferredKey.length; i < len; i++) {\n      keyNodes.push(this.parse(deferredKey[i]));\n      valueNodes.push(this.parse(deferredValue[i]));\n    }\n    return {\n      t: SerovalNodeType.Map,\n      i: id,\n      s: undefined,\n      l: undefined,\n      c: undefined,\n      m: undefined,\n      p: undefined,\n      e: { k: keyNodes, v: valueNodes, s: current.size },\n      a: undefined,\n      f: undefined,\n      b: undefined,\n      o: undefined,\n    };\n  }\n\n  protected parseSet(\n    id: number,\n    current: Set<unknown>,\n  ): SerovalSetNode {\n    const nodes: SerovalNode[] = [];\n    const deferred: unknown[] = [];\n    for (const item of current.keys()) {\n      // Iterables are lazy, so the evaluation must be deferred\n      if (this.isIterable(item)) {\n        deferred.push(item);\n      } else {\n        nodes.push(this.parse(item));\n      }\n    }\n    // Parse deferred items\n    for (let i = 0, len = deferred.length; i < len; i++) {\n      nodes.push(this.parse(deferred[i]));\n    }\n    return {\n      t: SerovalNodeType.Set,\n      i: id,\n      s: undefined,\n      l: current.size,\n      c: undefined,\n      m: undefined,\n      p: undefined,\n      e: undefined,\n      a: nodes,\n      f: undefined,\n      b: undefined,\n      o: undefined,\n    };\n  }\n\n  protected parsePlainProperties(\n    entries: [key: string, value: unknown][],\n  ): SerovalPlainRecordNode {\n    const size = entries.length;\n    const keyNodes: string[] = [];\n    const valueNodes: SerovalNode[] = [];\n    const deferredKeys: string[] = [];\n    const deferredValues: unknown[] = [];\n    for (let i = 0, key: string, item: unknown; i < size; i++) {\n      key = serializeString(entries[i][0]);\n      item = entries[i][1];\n      if (this.isIterable(item)) {\n        deferredKeys.push(key);\n        deferredValues.push(item);\n      } else {\n        keyNodes.push(key);\n        valueNodes.push(this.parse(item));\n      }\n    }\n    for (let i = 0, len = deferredKeys.length; i < len; i++) {\n      keyNodes.push(deferredKeys[i]);\n      valueNodes.push(this.parse(deferredValues[i]));\n    }\n    return {\n      k: keyNodes,\n      v: valueNodes,\n      s: size,\n    };\n  }\n\n  protected parseHeaders(\n    id: number,\n    current: Headers,\n  ): SerovalHeadersNode {\n    const items: [key: string, value: unknown][] = [];\n    current.forEach((value, key) => {\n      items.push([key, value]);\n    });\n    return {\n      t: SerovalNodeType.Headers,\n      i: id,\n      s: undefined,\n      l: undefined,\n      c: undefined,\n      m: undefined,\n      p: undefined,\n      e: this.parsePlainProperties(items),\n      a: undefined,\n      f: undefined,\n      b: undefined,\n      o: undefined,\n    };\n  }\n\n  protected parseFormData(\n    id: number,\n    current: FormData,\n  ): SerovalFormDataNode {\n    const items: [key: string, value: unknown][] = [];\n    current.forEach((value, key) => {\n      items.push([key, value]);\n    });\n    return {\n      t: SerovalNodeType.FormData,\n      i: id,\n      s: undefined,\n      l: undefined,\n      c: undefined,\n      m: undefined,\n      p: undefined,\n      e: this.parsePlainProperties(items),\n      a: undefined,\n      f: undefined,\n      b: undefined,\n      o: undefined,\n    };\n  }\n\n  protected parseEvent(\n    id: number,\n    current: Event,\n  ): SerovalEventNode {\n    return {\n      t: SerovalNodeType.Event,\n      i: id,\n      s: serializeString(current.type),\n      l: undefined,\n      c: undefined,\n      m: undefined,\n      p: undefined,\n      e: undefined,\n      a: undefined,\n      f: this.parse(createEventOptions(current)),\n      b: undefined,\n      o: undefined,\n    };\n  }\n\n  protected parseCustomEvent(\n    id: number,\n    current: CustomEvent,\n  ): SerovalCustomEventNode {\n    return {\n      t: SerovalNodeType.CustomEvent,\n      i: id,\n      s: serializeString(current.type),\n      l: undefined,\n      c: undefined,\n      m: undefined,\n      p: undefined,\n      e: undefined,\n      a: undefined,\n      f: this.parse(createCustomEventOptions(current)),\n      b: undefined,\n      o: undefined,\n    };\n  }\n\n  protected parseAggregateError(\n    id: number,\n    current: AggregateError,\n  ): SerovalAggregateErrorNode {\n    const options = getErrorOptions(current, this.features);\n    const optionsNode = options\n      ? this.parseProperties(options)\n      : undefined;\n    return {\n      t: SerovalNodeType.AggregateError,\n      i: id,\n      s: undefined,\n      l: undefined,\n      c: undefined,\n      m: serializeString(current.message),\n      p: optionsNode,\n      e: undefined,\n      a: undefined,\n      f: undefined,\n      b: undefined,\n      o: undefined,\n    };\n  }\n\n  protected parsePlugin(\n    id: number,\n    current: unknown,\n  ): SerovalPluginNode | undefined {\n    const currentPlugins = this.plugins;\n    if (currentPlugins) {\n      for (let i = 0, len = currentPlugins.length; i < len; i++) {\n        const plugin = currentPlugins[i];\n        if (plugin.parse.sync && plugin.test(current)) {\n          return createPluginNode(\n            id,\n            plugin.tag,\n            plugin.parse.sync(current, this, {\n              id,\n            }),\n          );\n        }\n      }\n    }\n    return undefined;\n  }\n\n  protected parseObject(\n    id: number,\n    current: object,\n  ): SerovalNode {\n    if (Array.isArray(current)) {\n      return this.parseArray(id, current);\n    }\n    const currentClass = current.constructor;\n    switch (currentClass) {\n      case Object:\n        return this.parsePlainObject(\n          id,\n          current as Record<string, unknown>,\n          false,\n        );\n      case undefined:\n        return this.parsePlainObject(\n          id,\n          current as Record<string, unknown>,\n          true,\n        );\n      case Date:\n        return createDateNode(id, current as unknown as Date);\n      case RegExp:\n        return createRegExpNode(id, current as unknown as RegExp);\n      case Error:\n      case EvalError:\n      case RangeError:\n      case ReferenceError:\n      case SyntaxError:\n      case TypeError:\n      case URIError:\n        return this.parseError(id, current as unknown as Error);\n      case Number:\n      case Boolean:\n      case String:\n      case BigInt:\n        return this.parseBoxed(id, current);\n      default:\n        break;\n    }\n    const currentFeatures = this.features;\n    // Typed Arrays\n    if (currentFeatures & Feature.TypedArray) {\n      switch (currentClass) {\n        case ArrayBuffer:\n          return createArrayBufferNode(id, current as unknown as ArrayBuffer);\n        case Int8Array:\n        case Int16Array:\n        case Int32Array:\n        case Uint8Array:\n        case Uint16Array:\n        case Uint32Array:\n        case Uint8ClampedArray:\n        case Float32Array:\n        case Float64Array:\n          return this.parseTypedArray(id, current as unknown as TypedArrayValue);\n        case DataView:\n          return this.parseDataView(id, current as unknown as DataView);\n        default:\n          break;\n      }\n    }\n    // BigInt Typed Arrays\n    if ((currentFeatures & BIGINT_FLAG) === BIGINT_FLAG) {\n      switch (currentClass) {\n        case BigInt64Array:\n        case BigUint64Array:\n          return this.parseBigIntTypedArray(id, current as unknown as BigIntTypedArrayValue);\n        default:\n          break;\n      }\n    }\n    // ES Collection\n    if (currentFeatures & Feature.Map && currentClass === Map) {\n      return this.parseMap(\n        id,\n        current as unknown as Map<unknown, unknown>,\n      );\n    }\n    if (currentFeatures & Feature.Set && currentClass === Set) {\n      return this.parseSet(\n        id,\n        current as unknown as Set<unknown>,\n      );\n    }\n    // Web APIs\n    if (currentFeatures & Feature.WebAPI) {\n      switch (currentClass) {\n        case (typeof URL !== 'undefined' ? URL : UNIVERSAL_SENTINEL):\n          return createURLNode(id, current as unknown as URL);\n        case (typeof URLSearchParams !== 'undefined' ? URLSearchParams : UNIVERSAL_SENTINEL):\n          return createURLSearchParamsNode(id, current as unknown as URLSearchParams);\n        case (typeof Headers !== 'undefined' ? Headers : UNIVERSAL_SENTINEL):\n          return this.parseHeaders(id, current as unknown as Headers);\n        case (typeof FormData !== 'undefined' ? FormData : UNIVERSAL_SENTINEL):\n          return this.parseFormData(id, current as unknown as FormData);\n        case (typeof Event !== 'undefined' ? Event : UNIVERSAL_SENTINEL):\n          return this.parseEvent(id, current as unknown as Event);\n        case (typeof CustomEvent !== 'undefined' ? CustomEvent : UNIVERSAL_SENTINEL):\n          return this.parseCustomEvent(id, current as unknown as CustomEvent);\n        case (typeof DOMException !== 'undefined' ? DOMException : UNIVERSAL_SENTINEL):\n          return createDOMExceptionNode(id, current as unknown as DOMException);\n        default:\n          break;\n      }\n    }\n    const parsed = this.parsePlugin(id, current);\n    if (parsed) {\n      return parsed;\n    }\n    if (\n      (currentFeatures & Feature.AggregateError)\n      && typeof AggregateError !== 'undefined'\n      && (currentClass === AggregateError || current instanceof AggregateError)\n    ) {\n      return this.parseAggregateError(id, current as unknown as AggregateError);\n    }\n    // Slow path. We only need to handle Errors and Iterators\n    // since they have very broad implementations.\n    if (current instanceof Error) {\n      return this.parseError(id, current);\n    }\n    // Generator functions don't have a global constructor\n    // despite existing\n    if (currentFeatures & Feature.Symbol && Symbol.iterator in current) {\n      return this.parsePlainObject(id, current, !!currentClass);\n    }\n    throw new UnsupportedTypeError(current);\n  }\n\n  parse<T>(current: T): SerovalNode {\n    switch (current) {\n      case true: return TRUE_NODE;\n      case false: return FALSE_NODE;\n      case undefined: return UNDEFINED_NODE;\n      case null: return NULL_NODE;\n      default: break;\n    }\n    switch (typeof current) {\n      case 'string': return createStringNode(current as string);\n      case 'number': return createNumberNode(current as number);\n      case 'bigint':\n        assert(this.features & Feature.BigInt, new UnsupportedTypeError(current));\n        return createBigIntNode(current as bigint);\n      case 'object': {\n        const id = this.getReference(current);\n        return typeof id === 'number' ? this.parseObject(id, current as object) : id;\n      }\n      case 'symbol': {\n        assert(this.features & Feature.Symbol, new UnsupportedTypeError(current));\n        const id = this.getReference(current);\n        return typeof id === 'number' ? createWKSymbolNode(id, current as WellKnownSymbols) : id;\n      }\n      case 'function':\n        assert(hasReferenceID(current), new Error('Cannot serialize function without reference ID.'));\n        return this.getStrictReference(current);\n      default:\n        throw new UnsupportedTypeError(current);\n    }\n  }\n}\n", "import BaseSyncParserContext from '../base/sync';\nimport type { BaseParserContextOptions } from '../parser-context';\nimport type { SerovalMode } from '../plugin';\n\nexport type SyncParserContextOptions = Omit<BaseParserContextOptions, 'refs'>;\n\nexport default class SyncParserContext extends BaseSyncParserContext {\n  readonly mode: SerovalMode = 'vanilla';\n}\n", "import type { PluginAccessOptions } from '../plugin';\nimport type { SerovalNode } from '../types';\nimport type { AsyncParserContextOptions } from './async';\nimport AsyncParserContext from './async';\nimport VanillaDeserializerContext from './deserialize';\nimport VanillaSerializerContext from './serialize';\nimport type { SyncParserContextOptions } from './sync';\nimport SyncParserContext from './sync';\n\nexport function serialize<T>(\n  source: T,\n  options: SyncParserContextOptions = {},\n): string {\n  const ctx = new SyncParserContext({\n    plugins: options.plugins,\n    disabledFeatures: options.disabledFeatures,\n  });\n  const tree = ctx.parse(source);\n  const serial = new VanillaSerializerContext({\n    plugins: options.plugins,\n    features: ctx.features,\n    markedRefs: ctx.marked,\n  });\n  return serial.serializeTop(tree);\n}\n\nexport async function serializeAsync<T>(\n  source: T,\n  options: AsyncParserContextOptions = {},\n): Promise<string> {\n  const ctx = new AsyncParserContext({\n    plugins: options.plugins,\n    disabledFeatures: options.disabledFeatures,\n  });\n  const tree = await ctx.parse(source);\n  const serial = new VanillaSerializerContext({\n    plugins: options.plugins,\n    features: ctx.features,\n    markedRefs: ctx.marked,\n  });\n  return serial.serializeTop(tree);\n}\n\nexport function deserialize<T>(source: string): T {\n  // eslint-disable-next-line no-eval\n  return (0, eval)(source) as T;\n}\n\nexport interface SerovalJSON {\n  t: SerovalNode;\n  f: number;\n  m: number[];\n}\n\nexport function toJSON<T>(\n  source: T,\n  options: SyncParserContextOptions = {},\n): SerovalJSON {\n  const ctx = new SyncParserContext({\n    plugins: options.plugins,\n    disabledFeatures: options.disabledFeatures,\n  });\n  return {\n    t: ctx.parse(source),\n    f: ctx.features,\n    m: Array.from(ctx.marked),\n  };\n}\n\nexport async function toJSONAsync<T>(\n  source: T,\n  options: AsyncParserContextOptions = {},\n): Promise<SerovalJSON> {\n  const ctx = new AsyncParserContext({\n    plugins: options.plugins,\n    disabledFeatures: options.disabledFeatures,\n  });\n  return {\n    t: await ctx.parse(source),\n    f: ctx.features,\n    m: Array.from(ctx.marked),\n  };\n}\n\nexport function compileJSON(source: SerovalJSON, options: PluginAccessOptions = {}): string {\n  const ctx = new VanillaSerializerContext({\n    plugins: options.plugins,\n    features: source.f,\n    markedRefs: source.m,\n  });\n  return ctx.serializeTop(source.t);\n}\n\nexport function fromJSON<T>(source: SerovalJSON, options: PluginAccessOptions = {}): T {\n  const ctx = new VanillaDeserializerContext({\n    plugins: options.plugins,\n    markedRefs: source.m,\n  });\n  return ctx.deserialize(source.t) as T;\n}\n", "import BaseAsyncParserContext from '../base/async';\nimport type { CrossParserContextOptions } from './cross-parser';\nimport type { SerovalMode } from '../plugin';\n\nexport type CrossAsyncParserContextOptions = CrossParserContextOptions\n\nexport default class CrossAsyncParserContext extends BaseAsyncParserContext {\n  readonly mode: SerovalMode = 'cross';\n}\n", "import type {\n  SerovalPromiseConstructorNode,\n  SerovalPromiseResolveNode,\n  SerovalPromiseRejectNode,\n  SerovalReadableStreamCloseNode,\n  SerovalReadableStreamEnqueueNode,\n  SerovalReadableStreamErrorNode,\n  SerovalReadableStreamConstructorNode,\n  SerovalNode,\n} from '../types';\nimport {\n  GLOBAL_CONTEXT_PROMISE_REJECT,\n  GLOBAL_CONTEXT_PROMISE_RESOLVE,\n  GLOBAL_CONTEXT_PROMISE_CONSTRUCTOR,\n  GLOBAL_CONTEXT_REFERENCES,\n  GLOBAL_CONTEXT_STREAM_CONSTRUCTOR,\n  GLOBAL_CONTEXT_STREAM_EMIT,\n  GLOBAL_CONTEXT_API,\n} from '../keys';\nimport type { BaseSerializerContextOptions } from '../serializer-context.old';\nimport BaseSerializerContext from '../serializer-context.old';\nimport type { SerovalMode } from '../plugin';\nimport { Feature } from '../compat';\nimport { serializeString } from '../string';\nimport type { CrossContextOptions } from './cross-parser';\n\nexport interface CrossSerializerContextOptions\n  extends BaseSerializerContextOptions, CrossContextOptions {\n}\n\nexport default class CrossSerializerContext extends BaseSerializerContext {\n  readonly mode: SerovalMode = 'cross';\n\n  scopeId?: string;\n\n  constructor(options: CrossSerializerContextOptions) {\n    super(options);\n    this.scopeId = options.scopeId;\n  }\n\n  getRefParam(id: number | string): string {\n    if (typeof id === 'string') {\n      return GLOBAL_CONTEXT_REFERENCES + '.' + id;\n    }\n    return GLOBAL_CONTEXT_REFERENCES + '[' + id + ']';\n  }\n\n  protected assignIndexedValue(\n    index: number,\n    value: string,\n  ): string {\n    return this.getRefParam(index) + '=' + value;\n  }\n\n  protected serializePromiseConstructor(\n    node: SerovalPromiseConstructorNode,\n  ): string {\n    return this.assignIndexedValue(node.i, GLOBAL_CONTEXT_API + '.' + GLOBAL_CONTEXT_PROMISE_CONSTRUCTOR + '()');\n  }\n\n  protected serializePromiseResolve(\n    node: SerovalPromiseResolveNode,\n  ): string {\n    return GLOBAL_CONTEXT_API + '.' + GLOBAL_CONTEXT_PROMISE_RESOLVE + '(' + this.getRefParam(node.i) + ',' + this.serialize(node.f) + ')';\n  }\n\n  protected serializePromiseReject(\n    node: SerovalPromiseRejectNode,\n  ): string {\n    return GLOBAL_CONTEXT_API + '.' + GLOBAL_CONTEXT_PROMISE_REJECT + '(' + this.getRefParam(node.i) + ',' + this.serialize(node.f) + ')';\n  }\n\n  protected serializeReadableStreamConstructor(\n    node: SerovalReadableStreamConstructorNode,\n  ): string {\n    return this.assignIndexedValue(node.i, GLOBAL_CONTEXT_API + '.' + GLOBAL_CONTEXT_STREAM_CONSTRUCTOR + '()');\n  }\n\n  protected serializeReadableStreamEnqueue(\n    node: SerovalReadableStreamEnqueueNode,\n  ): string {\n    return GLOBAL_CONTEXT_API + '.' + GLOBAL_CONTEXT_STREAM_EMIT + '(' + this.getRefParam(node.i) + ',0,' + this.serialize(node.f) + ')';\n  }\n\n  protected serializeReadableStreamError(\n    node: SerovalReadableStreamErrorNode,\n  ): string {\n    return GLOBAL_CONTEXT_API + '.' + GLOBAL_CONTEXT_STREAM_EMIT + '(' + this.getRefParam(node.i) + ',1,' + this.serialize(node.f) + ')';\n  }\n\n  protected serializeReadableStreamClose(\n    node: SerovalReadableStreamCloseNode,\n  ): string {\n    return GLOBAL_CONTEXT_API + '.' + GLOBAL_CONTEXT_STREAM_EMIT + '(' + this.getRefParam(node.i) + ',2)';\n  }\n\n  serializeTop(tree: SerovalNode): string {\n    const result = this.serialize(tree);\n    const id = tree.i;\n    if (id == null) {\n      return result;\n    }\n    const patches = this.resolvePatches();\n    const ref = this.getRefParam(id);\n    const params = this.scopeId == null ? '' : GLOBAL_CONTEXT_REFERENCES;\n    const mainBody = patches ? result + ',' + patches : result;\n    if (params === '') {\n      return patches ? '(' + mainBody + ref + ')' : mainBody;\n    }\n    const args = this.scopeId == null ? '()' : '(' + GLOBAL_CONTEXT_REFERENCES + '[\"' + serializeString(this.scopeId) + '\"])';\n    const body = mainBody + (patches ? ref : '');\n    if (this.features & Feature.ArrowFunction) {\n      return '(' + params + '=>(' + body + '))' + args;\n    }\n    return '(function(' + params + '){return ' + body + '})' + args;\n  }\n}\n", "import type { BigIntTypedArrayValue, TypedArrayValue } from '../../types';\nimport UnsupportedTypeError from '../UnsupportedTypeError';\nimport {\n  createArrayBufferNode,\n  createDateNode,\n  createPluginNode,\n  createRegExpNode,\n} from '../base-primitives';\nimport type { BaseSyncParserContextOptions } from './sync';\nimport BaseSyncParserContext from './sync';\nimport { BIGINT_FLAG, Feature } from '../compat';\nimport { SerovalNodeType, UNIVERSAL_SENTINEL } from '../constants';\nimport { createRequestOptions, createResponseOptions } from '../constructors';\nimport { NULL_NODE } from '../literals';\nimport { serializeString } from '../string';\nimport type {\n  SerovalNode,\n  SerovalPluginNode,\n  SerovalPromiseConstructorNode,\n  SerovalReadableStreamConstructorNode,\n  SerovalRequestNode,\n  SerovalResponseNode,\n} from '../types';\nimport { createDOMExceptionNode, createURLNode, createURLSearchParamsNode } from '../web-api';\n\nexport interface BaseStreamParserContextOptions extends BaseSyncParserContextOptions {\n  onParse: (node: SerovalNode, initial: boolean) => void;\n  onError?: (error: unknown) => void;\n  onDone?: () => void;\n}\n\nexport default abstract class BaseStreamParserContext extends BaseSyncParserContext {\n  // Life\n  private alive = true;\n\n  // Amount of pending promises/streams\n  private pending = 0;\n\n  private onParseCallback: (node: SerovalNode, initial: boolean) => void;\n\n  private onErrorCallback?: (error: unknown) => void;\n\n  private onDoneCallback?: () => void;\n\n  constructor(options: BaseStreamParserContextOptions) {\n    super(options);\n    this.onParseCallback = options.onParse;\n    this.onErrorCallback = options.onError;\n    this.onDoneCallback = options.onDone;\n  }\n\n  private onParse(node: SerovalNode, initial: boolean): void {\n    this.onParseCallback(node, initial);\n  }\n\n  private onError(error: unknown): void {\n    if (this.onErrorCallback) {\n      this.onErrorCallback(error);\n    } else {\n      throw error;\n    }\n  }\n\n  private onDone(): void {\n    if (this.onDoneCallback) {\n      this.onDoneCallback();\n    }\n  }\n\n  push<T>(value: T): void {\n    this.onParse(\n      this.parse(value),\n      false,\n    );\n  }\n\n  pushPendingState(): void {\n    this.pending++;\n  }\n\n  popPendingState(): void {\n    if (--this.pending <= 0) {\n      this.onDone();\n    }\n  }\n\n  private pushReadableStreamReader(\n    id: number,\n    reader: ReadableStreamDefaultReader,\n  ): void {\n    reader.read().then(\n      (data) => {\n        if (this.alive) {\n          if (data.done) {\n            this.onParse({\n              t: SerovalNodeType.ReadableStreamClose,\n              i: id,\n              s: undefined,\n              l: undefined,\n              c: undefined,\n              m: undefined,\n              p: undefined,\n              e: undefined,\n              a: undefined,\n              f: undefined,\n              b: undefined,\n              o: undefined,\n            }, false);\n            this.popPendingState();\n          } else {\n            const parsed = this.parseWithError(data.value);\n            if (parsed) {\n              this.onParse({\n                t: SerovalNodeType.ReadableStreamEnqueue,\n                i: id,\n                s: undefined,\n                l: undefined,\n                c: undefined,\n                m: undefined,\n                p: undefined,\n                e: undefined,\n                a: undefined,\n                f: parsed,\n                b: undefined,\n                o: undefined,\n              }, false);\n              this.pushReadableStreamReader(id, reader);\n            }\n          }\n        }\n      },\n      (value) => {\n        if (this.alive) {\n          const parsed = this.parseWithError(value);\n          if (parsed) {\n            this.onParse({\n              t: SerovalNodeType.ReadableStreamError,\n              i: id,\n              s: undefined,\n              l: undefined,\n              c: undefined,\n              m: undefined,\n              p: undefined,\n              e: undefined,\n              a: undefined,\n              f: parsed,\n              b: undefined,\n              o: undefined,\n            }, false);\n            this.popPendingState();\n          }\n        }\n      },\n    );\n  }\n\n  private parseReadableStream(\n    id: number,\n    current: ReadableStream<unknown>,\n  ): SerovalReadableStreamConstructorNode {\n    const reader = current.getReader();\n    this.pushPendingState();\n    this.pushReadableStreamReader(id, reader);\n\n    return {\n      t: SerovalNodeType.ReadableStreamConstructor,\n      i: id,\n      s: undefined,\n      l: undefined,\n      c: undefined,\n      m: undefined,\n      p: undefined,\n      e: undefined,\n      a: undefined,\n      f: undefined,\n      b: undefined,\n      o: undefined,\n    };\n  }\n\n  private parseRequest(\n    id: number,\n    current: Request,\n  ): SerovalRequestNode {\n    return {\n      t: SerovalNodeType.Request,\n      i: id,\n      s: serializeString(current.url),\n      l: undefined,\n      c: undefined,\n      m: undefined,\n      p: undefined,\n      e: undefined,\n      f: this.parse(\n        createRequestOptions(current, current.clone().body),\n      ),\n      a: undefined,\n      b: undefined,\n      o: undefined,\n    };\n  }\n\n  private parseResponse(\n    id: number,\n    current: Response,\n  ): SerovalResponseNode {\n    return {\n      t: SerovalNodeType.Response,\n      i: id,\n      s: undefined,\n      l: undefined,\n      c: undefined,\n      m: undefined,\n      p: undefined,\n      e: undefined,\n      f: undefined,\n      a: [\n        current.body\n          ? this.parse(current.clone().body)\n          : NULL_NODE,\n        this.parse(createResponseOptions(current)),\n      ],\n      b: undefined,\n      o: undefined,\n    };\n  }\n\n  private parsePromise(\n    id: number,\n    current: Promise<unknown>,\n  ): SerovalPromiseConstructorNode {\n    current.then(\n      (data) => {\n        const parsed = this.parseWithError(data);\n        if (parsed) {\n          this.onParse({\n            t: SerovalNodeType.PromiseResolve,\n            i: id,\n            s: undefined,\n            l: undefined,\n            c: undefined,\n            m: undefined,\n            p: undefined,\n            e: undefined,\n            a: undefined,\n            f: parsed,\n            b: undefined,\n            o: undefined,\n          }, false);\n          this.popPendingState();\n        }\n      },\n      (data) => {\n        if (this.alive) {\n          const parsed = this.parseWithError(data);\n          if (parsed) {\n            this.onParse({\n              t: SerovalNodeType.PromiseReject,\n              i: id,\n              s: undefined,\n              l: undefined,\n              c: undefined,\n              m: undefined,\n              p: undefined,\n              e: undefined,\n              a: undefined,\n              f: parsed,\n              b: undefined,\n              o: undefined,\n            }, false);\n            this.popPendingState();\n          }\n        }\n      },\n    );\n    this.pushPendingState();\n    return {\n      t: SerovalNodeType.PromiseConstructor,\n      i: id,\n      s: undefined,\n      l: undefined,\n      c: undefined,\n      m: undefined,\n      p: undefined,\n      e: undefined,\n      a: undefined,\n      f: undefined,\n      b: undefined,\n      o: undefined,\n    };\n  }\n\n  protected parsePlugin(\n    id: number,\n    current: unknown,\n  ): SerovalPluginNode | undefined {\n    const currentPlugins = this.plugins;\n    if (currentPlugins) {\n      for (let i = 0, len = currentPlugins.length; i < len; i++) {\n        const plugin = currentPlugins[i];\n        if (plugin.parse.stream && plugin.test(current)) {\n          return createPluginNode(\n            id,\n            plugin.tag,\n            plugin.parse.stream(current, this, {\n              id,\n            }),\n          );\n        }\n      }\n    }\n    return undefined;\n  }\n\n  protected parseObject(\n    id: number,\n    current: object,\n  ): SerovalNode {\n    if (Array.isArray(current)) {\n      return this.parseArray(id, current);\n    }\n    const currentClass = current.constructor;\n    switch (currentClass) {\n      case Object:\n        return this.parsePlainObject(\n          id,\n          current as Record<string, unknown>,\n          false,\n        );\n      case undefined:\n        return this.parsePlainObject(\n          id,\n          current as Record<string, unknown>,\n          true,\n        );\n      case Date:\n        return createDateNode(id, current as unknown as Date);\n      case RegExp:\n        return createRegExpNode(id, current as unknown as RegExp);\n      case Error:\n      case EvalError:\n      case RangeError:\n      case ReferenceError:\n      case SyntaxError:\n      case TypeError:\n      case URIError:\n        return this.parseError(id, current as unknown as Error);\n      case Number:\n      case Boolean:\n      case String:\n      case BigInt:\n        return this.parseBoxed(id, current);\n      default:\n        break;\n    }\n    const currentFeatures = this.features;\n    // Promises\n    if (\n      (currentFeatures & Feature.Promise)\n      && (currentClass === Promise || current instanceof Promise)\n    ) {\n      return this.parsePromise(id, current as unknown as Promise<unknown>);\n    }\n    // Typed Arrays\n    if (currentFeatures & Feature.TypedArray) {\n      switch (currentClass) {\n        case ArrayBuffer:\n          return createArrayBufferNode(id, current as unknown as ArrayBuffer);\n        case Int8Array:\n        case Int16Array:\n        case Int32Array:\n        case Uint8Array:\n        case Uint16Array:\n        case Uint32Array:\n        case Uint8ClampedArray:\n        case Float32Array:\n        case Float64Array:\n          return this.parseTypedArray(id, current as unknown as TypedArrayValue);\n        case DataView:\n          return this.parseDataView(id, current as unknown as DataView);\n        default:\n          break;\n      }\n    }\n    // BigInt Typed Arrays\n    if ((currentFeatures & BIGINT_FLAG) === BIGINT_FLAG) {\n      switch (currentClass) {\n        case BigInt64Array:\n        case BigUint64Array:\n          return this.parseBigIntTypedArray(id, current as unknown as BigIntTypedArrayValue);\n        default:\n          break;\n      }\n    }\n    // ES Collection\n    if (currentFeatures & Feature.Map && currentClass === Map) {\n      return this.parseMap(\n        id,\n        current as unknown as Map<unknown, unknown>,\n      );\n    }\n    if (currentFeatures & Feature.Set && currentClass === Set) {\n      return this.parseSet(\n        id,\n        current as unknown as Set<unknown>,\n      );\n    }\n    // Web APIs\n    if (currentFeatures & Feature.WebAPI) {\n      switch (currentClass) {\n        case (typeof URL !== 'undefined' ? URL : UNIVERSAL_SENTINEL):\n          return createURLNode(id, current as unknown as URL);\n        case (typeof URLSearchParams !== 'undefined' ? URLSearchParams : UNIVERSAL_SENTINEL):\n          return createURLSearchParamsNode(id, current as unknown as URLSearchParams);\n        case (typeof Headers !== 'undefined' ? Headers : UNIVERSAL_SENTINEL):\n          return this.parseHeaders(id, current as unknown as Headers);\n        case (typeof FormData !== 'undefined' ? FormData : UNIVERSAL_SENTINEL):\n          return this.parseFormData(id, current as unknown as FormData);\n        case (typeof ReadableStream !== 'undefined' ? ReadableStream : UNIVERSAL_SENTINEL):\n          return this.parseReadableStream(id, current as unknown as ReadableStream);\n        case (typeof Request !== 'undefined' ? Request : UNIVERSAL_SENTINEL):\n          return this.parseRequest(id, current as unknown as Request);\n        case (typeof Response !== 'undefined' ? Response : UNIVERSAL_SENTINEL):\n          return this.parseResponse(id, current as unknown as Response);\n        case (typeof Event !== 'undefined' ? Event : UNIVERSAL_SENTINEL):\n          return this.parseEvent(id, current as unknown as Event);\n        case (typeof CustomEvent !== 'undefined' ? CustomEvent : UNIVERSAL_SENTINEL):\n          return this.parseCustomEvent(id, current as unknown as CustomEvent);\n        case (typeof DOMException !== 'undefined' ? DOMException : UNIVERSAL_SENTINEL):\n          return createDOMExceptionNode(id, current as unknown as DOMException);\n        default:\n          break;\n      }\n    }\n    const parsed = this.parsePlugin(id, current);\n    if (parsed) {\n      return parsed;\n    }\n    if (\n      (currentFeatures & Feature.AggregateError)\n      && typeof AggregateError !== 'undefined'\n      && (currentClass === AggregateError || current instanceof AggregateError)\n    ) {\n      return this.parseAggregateError(id, current as unknown as AggregateError);\n    }\n    // Slow path. We only need to handle Errors and Iterators\n    // since they have very broad implementations.\n    if (current instanceof Error) {\n      return this.parseError(id, current);\n    }\n    // Generator functions don't have a global constructor\n    // despite existing\n    if (currentFeatures & Feature.Symbol && Symbol.iterator in current) {\n      return this.parsePlainObject(id, current, !!currentClass);\n    }\n    throw new UnsupportedTypeError(current);\n  }\n\n  private parseWithError<T>(current: T): SerovalNode | undefined {\n    try {\n      return this.parse(current);\n    } catch (err) {\n      this.onError(err);\n      return undefined;\n    }\n  }\n\n  /**\n   * @private\n   */\n  start<T>(current: T): void {\n    const parsed = this.parseWithError(current);\n    if (parsed) {\n      this.onParse(parsed, true);\n\n      // Check if there's any pending pushes\n      if (this.pending <= 0) {\n        this.destroy();\n      }\n    }\n  }\n\n  /**\n   * @private\n   */\n  destroy(): void {\n    if (this.alive) {\n      this.onDone();\n      this.alive = false;\n    }\n  }\n\n  isAlive(): boolean {\n    return this.alive;\n  }\n}\n", "import type { BaseStreamParserContextOptions } from '../base/stream';\nimport BaseStreamParserContext from '../base/stream';\nimport type { SerovalMode } from '../plugin';\n\nexport type CrossStreamParserContextOptions = BaseStreamParserContextOptions\n\nexport default class CrossStreamParserContext extends BaseStreamParserContext {\n  readonly mode: SerovalMode = 'cross';\n}\n", "import BaseSyncParserContext from '../base/sync';\nimport type { SerovalMode } from '../plugin';\nimport type { CrossParserContextOptions } from './cross-parser';\n\nexport type CrossSyncParserContextOptions = CrossParserContextOptions\n\nexport default class CrossSyncParserContext extends BaseSyncParserContext {\n  readonly mode: SerovalMode = 'cross';\n}\n", "import type { CrossAsyncParserContextOptions } from './async';\nimport AsyncCrossParserContext from './async';\nimport type { CrossContextOptions } from './cross-parser';\nimport CrossSerializerContext from './serialize';\nimport type { CrossStreamParserContextOptions } from './stream';\nimport StreamCrossParserContext from './stream';\nimport type { CrossSyncParserContextOptions } from './sync';\nimport SyncCrossParserContext from './sync';\n\nexport interface CrossSerializeOptions\n  extends CrossSyncParserContextOptions, CrossContextOptions {\n}\n\nexport function crossSerialize<T>(\n  source: T,\n  options: CrossSerializeOptions = {},\n): string {\n  const ctx = new SyncCrossParserContext({\n    plugins: options.plugins,\n    disabledFeatures: options.disabledFeatures,\n    refs: options.refs,\n  });\n  const tree = ctx.parse(source);\n  const serial = new CrossSerializerContext({\n    plugins: options.plugins,\n    features: ctx.features,\n    scopeId: options.scopeId,\n    markedRefs: ctx.marked,\n  });\n  return serial.serializeTop(tree);\n}\n\nexport interface CrossSerializeAsyncOptions\n  extends CrossAsyncParserContextOptions, CrossContextOptions {\n}\n\nexport async function crossSerializeAsync<T>(\n  source: T,\n  options: CrossSerializeAsyncOptions = {},\n): Promise<string> {\n  const ctx = new AsyncCrossParserContext({\n    plugins: options.plugins,\n    disabledFeatures: options.disabledFeatures,\n    refs: options.refs,\n  });\n  const tree = await ctx.parse(source);\n  const serial = new CrossSerializerContext({\n    plugins: options.plugins,\n    features: ctx.features,\n    scopeId: options.scopeId,\n    markedRefs: ctx.marked,\n  });\n  return serial.serializeTop(tree);\n}\n\n// export interface SerovalCrossJSON {\n//   t: SerovalNode;\n//   f: number;\n// }\n\n// export function toCrossJSON<T>(\n//   source: T,\n//   options?: CrossParserContextOptions,\n// ): SerovalCrossJSON {\n//   const ctx = createCrossParserContext(options);\n//   return {\n//     t: parseSync(ctx, source),\n//     f: ctx.features,\n//   };\n// }\n\n// export async function toCrossJSONAsync<T>(\n//   source: T,\n//   options?: CrossParserContextOptions,\n// ): Promise<SerovalCrossJSON> {\n//   const ctx = createCrossParserContext(options);\n//   return {\n//     t: await parseAsync(ctx, source),\n//     f: ctx.features,\n//   };\n// }\n\n// export function compileCrossJSON(source: SerovalCrossJSON): string {\n//   const serial = createCrossSerializerContext({\n//     features: source.f,\n//   });\n//   const result = crossSerializeTree(serial, source.t);\n//   return finalize(\n//     serial,\n//     source.t.i,\n//     result,\n//   );\n// }\n\n// export function fromJSON<T>(source: SerovalJSON): T {\n//   const serial = createDeserializerContext({\n//     markedRefs: source.m,\n//   });\n//   return deserializeTree(serial, source.t) as T;\n// }\n\nexport interface CrossSerializeStreamOptions\n  extends Omit<CrossStreamParserContextOptions, 'onParse'>, CrossContextOptions {\n  onSerialize: (data: string, initial: boolean) => void;\n}\n\nexport function crossSerializeStream<T>(\n  source: T,\n  options: CrossSerializeStreamOptions,\n): () => void {\n  const ctx = new StreamCrossParserContext({\n    refs: options.refs,\n    disabledFeatures: options.disabledFeatures,\n    onParse(node, initial): void {\n      const serial = new CrossSerializerContext({\n        plugins: options.plugins,\n        features: ctx.features,\n        scopeId: options.scopeId,\n        markedRefs: ctx.marked,\n      });\n\n      let serialized: string;\n\n      try {\n        serialized = serial.serializeTop(node);\n      } catch (err) {\n        if (options.onError) {\n          options.onError(err);\n        }\n        return;\n      }\n\n      options.onSerialize(\n        serialized,\n        initial,\n      );\n    },\n    onError: options.onError,\n    onDone: options.onDone,\n  });\n\n  ctx.start(source);\n\n  return () => {\n    ctx.destroy();\n  };\n}\n", "import type { PluginAccessOptions } from './plugin';\nimport { crossSerializeStream } from './cross';\nimport { serializeString } from './string';\n\nexport interface SerializerOptions extends PluginAccessOptions {\n  globalIdentifier: string;\n  scopeId?: string;\n  disabledFeatures?: number;\n  onData: (result: string) => void;\n  onError: (error: unknown) => void;\n  onDone?: () => void;\n}\n\nexport default class Serializer {\n  private alive = true;\n\n  private flushed = false;\n\n  private done = false;\n\n  private pending = 0;\n\n  private cleanups: (() => void)[] = [];\n\n  private refs = new Map<unknown, number>();\n\n  constructor(\n    private options: SerializerOptions,\n  ) {\n  }\n\n  keys = new Set<string>();\n\n  write(key: string, value: unknown): void {\n    if (this.alive && !this.flushed) {\n      this.pending++;\n      this.keys.add(key);\n      this.cleanups.push(crossSerializeStream(value, {\n        plugins: this.options.plugins,\n        scopeId: this.options.scopeId,\n        refs: this.refs,\n        disabledFeatures: this.options.disabledFeatures,\n        onError: this.options.onError,\n        onSerialize: (data, initial) => {\n          if (this.alive) {\n            this.options.onData(\n              initial\n                ? this.options.globalIdentifier + '[\"' + serializeString(key) + '\"]=' + data\n                : data,\n            );\n          }\n        },\n        onDone: () => {\n          if (this.alive) {\n            this.pending--;\n            if (this.pending <= 0 && this.flushed && !this.done && this.options.onDone) {\n              this.options.onDone();\n              this.done = true;\n            }\n          }\n        },\n      }));\n    }\n  }\n\n  ids = 0;\n\n  private getNextID(): string {\n    while (this.keys.has('' + this.ids)) {\n      this.ids++;\n    }\n    return '' + this.ids;\n  }\n\n  push(value: unknown): string {\n    const newID = this.getNextID();\n    this.write(newID, value);\n    return newID;\n  }\n\n  flush(): void {\n    if (this.alive) {\n      this.flushed = true;\n      if (this.pending <= 0 && !this.done && this.options.onDone) {\n        this.options.onDone();\n        this.done = true;\n      }\n    }\n  }\n\n  close(): void {\n    if (this.alive) {\n      for (let i = 0, len = this.cleanups.length; i < len; i++) {\n        this.cleanups[i]();\n      }\n      if (!this.done && this.options.onDone) {\n        this.options.onDone();\n        this.done = true;\n      }\n      this.alive = false;\n    }\n  }\n}\n", "import type BaseAsyncParserContext from './base/async';\nimport type BaseStreamParserContext from './base/stream';\nimport type BaseSyncParserContext from './base/sync';\nimport type BaseSerializerContext from './serializer-context.old';\nimport type VanillaDeserializerContext from './tree/deserialize';\n\nexport type SerovalMode = 'vanilla' | 'cross';\n\nexport interface PluginData {\n  id: number;\n}\n\nexport interface Plugin<Value, Node> {\n  tag: string;\n  test(value: unknown): boolean;\n  parse: {\n    sync?: (\n      value: Value,\n      ctx: BaseSyncParserContext,\n      data: PluginData,\n    ) => Node;\n    async?: (\n      value: Value,\n      ctx: BaseAsyncParserContext,\n      data: PluginData,\n    ) => Promise<Node>;\n    stream?: (\n      value: Value,\n      ctx: BaseStreamParserContext,\n      data: PluginData,\n    ) => Node;\n  };\n  serialize(\n    node: Node,\n    ctx: BaseSerializerContext,\n    data: PluginData,\n  ): string;\n  deserialize(\n    node: Node,\n    ctx: VanillaDeserializerContext,\n    data: PluginData,\n  ): Value;\n  isIterable?: (value: Value) => boolean;\n  // isSerializable?: (value: Value) => boolean;\n}\n\nexport function createPlugin<Value, Node>(\n  plugin: Plugin<Value, Node>,\n): Plugin<Value, Node> {\n  return plugin;\n}\n\nexport interface PluginAccessOptions {\n  plugins?: Plugin<any, any>[];\n}\n"],
  "mappings": "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",
  "names": ["Feature"]
}
