seroval 0.12.3 → 0.13.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (140) hide show
  1. package/dist/cjs/development/index.cjs +1432 -958
  2. package/dist/cjs/development/index.cjs.map +3 -3
  3. package/dist/cjs/production/index.cjs +3 -3
  4. package/dist/esm/development/index.mjs +1432 -958
  5. package/dist/esm/development/index.mjs.map +3 -3
  6. package/dist/esm/production/index.mjs +3 -3
  7. package/dist/types/core/Serializer.d.ts +2 -1
  8. package/dist/types/core/Serializer.d.ts.map +1 -1
  9. package/dist/types/core/base-primitives.d.ts +12 -1
  10. package/dist/types/core/base-primitives.d.ts.map +1 -1
  11. package/dist/types/core/compat.d.ts +0 -2
  12. package/dist/types/core/compat.d.ts.map +1 -1
  13. package/dist/types/core/constants.d.ts +8 -2
  14. package/dist/types/core/constants.d.ts.map +1 -1
  15. package/dist/types/core/{tree/deserialize.d.ts → context/deserializer.d.ts} +19 -13
  16. package/dist/types/core/context/deserializer.d.ts.map +1 -0
  17. package/dist/types/core/{base → context/parser}/async.d.ts +6 -5
  18. package/dist/types/core/context/parser/async.d.ts.map +1 -0
  19. package/dist/types/core/{base → context/parser}/stream.d.ts +2 -1
  20. package/dist/types/core/context/parser/stream.d.ts.map +1 -0
  21. package/dist/types/core/{base → context/parser}/sync.d.ts +7 -9
  22. package/dist/types/core/context/parser/sync.d.ts.map +1 -0
  23. package/dist/types/core/context/parser.d.ts +27 -0
  24. package/dist/types/core/context/parser.d.ts.map +1 -0
  25. package/dist/types/core/{serializer-context.old.d.ts → context/serializer.d.ts} +21 -22
  26. package/dist/types/core/context/serializer.d.ts.map +1 -0
  27. package/dist/types/core/cross/async.d.ts +2 -2
  28. package/dist/types/core/cross/async.d.ts.map +1 -1
  29. package/dist/types/core/cross/deserializer.d.ts +9 -0
  30. package/dist/types/core/cross/deserializer.d.ts.map +1 -0
  31. package/dist/types/core/cross/index.d.ts +11 -1
  32. package/dist/types/core/cross/index.d.ts.map +1 -1
  33. package/dist/types/core/cross/parser.d.ts +6 -0
  34. package/dist/types/core/cross/parser.d.ts.map +1 -0
  35. package/dist/types/core/cross/{serialize.d.ts → serializer.d.ts} +6 -5
  36. package/dist/types/core/cross/serializer.d.ts.map +1 -0
  37. package/dist/types/core/cross/stream.d.ts +2 -2
  38. package/dist/types/core/cross/stream.d.ts.map +1 -1
  39. package/dist/types/core/cross/sync.d.ts +2 -2
  40. package/dist/types/core/cross/sync.d.ts.map +1 -1
  41. package/dist/types/core/keys.d.ts +3 -1
  42. package/dist/types/core/keys.d.ts.map +1 -1
  43. package/dist/types/core/plugin.d.ts +6 -7
  44. package/dist/types/core/plugin.d.ts.map +1 -1
  45. package/dist/types/core/special-reference.d.ts +6 -0
  46. package/dist/types/core/special-reference.d.ts.map +1 -0
  47. package/dist/types/core/tree/async.d.ts +2 -2
  48. package/dist/types/core/tree/async.d.ts.map +1 -1
  49. package/dist/types/core/tree/deserializer.d.ts +13 -0
  50. package/dist/types/core/tree/deserializer.d.ts.map +1 -0
  51. package/dist/types/core/tree/{serialize.d.ts → serializer.d.ts} +4 -4
  52. package/dist/types/core/tree/serializer.d.ts.map +1 -0
  53. package/dist/types/core/tree/sync.d.ts +2 -2
  54. package/dist/types/core/tree/sync.d.ts.map +1 -1
  55. package/dist/types/core/types.d.ts +47 -6
  56. package/dist/types/core/types.d.ts.map +1 -1
  57. package/dist/types/core/utils/assert.d.ts.map +1 -0
  58. package/dist/types/core/utils/constructors.d.ts.map +1 -0
  59. package/dist/types/core/utils/deferred.d.ts +14 -0
  60. package/dist/types/core/utils/deferred.d.ts.map +1 -0
  61. package/dist/types/core/utils/error.d.ts +5 -0
  62. package/dist/types/core/utils/error.d.ts.map +1 -0
  63. package/dist/types/core/utils/get-identifier.d.ts.map +1 -0
  64. package/dist/types/core/utils/get-object-flag.d.ts +3 -0
  65. package/dist/types/core/utils/get-object-flag.d.ts.map +1 -0
  66. package/dist/types/core/utils/is-valid-identifier.d.ts +2 -0
  67. package/dist/types/core/utils/is-valid-identifier.d.ts.map +1 -0
  68. package/dist/types/core/utils/iterator-to-sequence.d.ts +20 -0
  69. package/dist/types/core/utils/iterator-to-sequence.d.ts.map +1 -0
  70. package/dist/types/core/utils/promise-to-result.d.ts.map +1 -0
  71. package/dist/types/core/utils/typed-array.d.ts +4 -0
  72. package/dist/types/core/utils/typed-array.d.ts.map +1 -0
  73. package/dist/types/core/web-api.d.ts +4 -1
  74. package/dist/types/core/web-api.d.ts.map +1 -1
  75. package/package.json +2 -2
  76. package/src/core/Serializer.ts +3 -1
  77. package/src/core/base-primitives.ts +229 -1
  78. package/src/core/compat.ts +0 -2
  79. package/src/core/constants.ts +7 -2
  80. package/src/core/{tree/deserialize.ts → context/deserializer.ts} +159 -66
  81. package/src/core/{base → context/parser}/async.ts +181 -309
  82. package/src/core/{base → context/parser}/stream.ts +86 -11
  83. package/src/core/{base → context/parser}/sync.ts +120 -281
  84. package/src/core/context/parser.ts +259 -0
  85. package/src/core/{serializer-context.old.ts → context/serializer.ts} +241 -166
  86. package/src/core/cross/async.ts +2 -2
  87. package/src/core/cross/deserializer.ts +19 -0
  88. package/src/core/cross/index.ts +68 -47
  89. package/src/core/cross/parser.ts +7 -0
  90. package/src/core/cross/{serialize.ts → serializer.ts} +31 -12
  91. package/src/core/cross/stream.ts +2 -2
  92. package/src/core/cross/sync.ts +2 -2
  93. package/src/core/is-serializable.new.ts +1 -1
  94. package/src/core/keys.ts +8 -2
  95. package/src/core/plugin.ts +7 -7
  96. package/src/core/reference.ts +1 -1
  97. package/src/core/special-reference.ts +9 -0
  98. package/src/core/tree/async.ts +2 -2
  99. package/src/core/tree/deserializer.ts +31 -0
  100. package/src/core/tree/index.ts +2 -2
  101. package/src/core/tree/{serialize.ts → serializer.ts} +5 -16
  102. package/src/core/tree/sync.ts +2 -2
  103. package/src/core/types.ts +60 -7
  104. package/src/core/utils/deferred.ts +49 -0
  105. package/src/core/{shared.ts → utils/error.ts} +3 -60
  106. package/src/core/utils/get-object-flag.ts +14 -0
  107. package/src/core/utils/is-valid-identifier.ts +11 -0
  108. package/src/core/utils/iterator-to-sequence.ts +238 -0
  109. package/src/core/utils/typed-array.ts +30 -0
  110. package/src/core/web-api.ts +75 -1
  111. package/src/example.ts +0 -3
  112. package/dist/types/core/assert.d.ts.map +0 -1
  113. package/dist/types/core/base/async.d.ts.map +0 -1
  114. package/dist/types/core/base/stream.d.ts.map +0 -1
  115. package/dist/types/core/base/sync.d.ts.map +0 -1
  116. package/dist/types/core/constructors.d.ts.map +0 -1
  117. package/dist/types/core/cross/cross-parser.d.ts +0 -8
  118. package/dist/types/core/cross/cross-parser.d.ts.map +0 -1
  119. package/dist/types/core/cross/serialize.d.ts.map +0 -1
  120. package/dist/types/core/get-identifier.d.ts.map +0 -1
  121. package/dist/types/core/parser-context.d.ts +0 -23
  122. package/dist/types/core/parser-context.d.ts.map +0 -1
  123. package/dist/types/core/promise-to-result.d.ts.map +0 -1
  124. package/dist/types/core/serializer-context.old.d.ts.map +0 -1
  125. package/dist/types/core/shared.d.ts +0 -10
  126. package/dist/types/core/shared.d.ts.map +0 -1
  127. package/dist/types/core/tree/deserialize.d.ts.map +0 -1
  128. package/dist/types/core/tree/serialize.d.ts.map +0 -1
  129. package/src/core/cross/cross-parser.ts +0 -9
  130. package/src/core/parser-context.ts +0 -131
  131. package/src/core/serializer-context.new.ts +0 -1168
  132. package/src/core/tree/parser.ts +0 -45
  133. /package/dist/types/core/{assert.d.ts → utils/assert.d.ts} +0 -0
  134. /package/dist/types/core/{constructors.d.ts → utils/constructors.d.ts} +0 -0
  135. /package/dist/types/core/{get-identifier.d.ts → utils/get-identifier.d.ts} +0 -0
  136. /package/dist/types/core/{promise-to-result.d.ts → utils/promise-to-result.d.ts} +0 -0
  137. /package/src/core/{assert.ts → utils/assert.ts} +0 -0
  138. /package/src/core/{constructors.ts → utils/constructors.ts} +0 -0
  139. /package/src/core/{get-identifier.ts → utils/get-identifier.ts} +0 -0
  140. /package/src/core/{promise-to-result.ts → utils/promise-to-result.ts} +0 -0
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
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"],
4
- "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 { crossSerializeStream } from './cross';\nimport { serializeString } from './string';\n\nexport interface SerializerOptions {\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 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"],
5
- "mappings": "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",
3
+ "sources": ["../../../src/index.ts", "../../../src/core/UnsupportedTypeError.ts", "../../../src/core/utils/assert.ts", "../../../src/core/constants.ts", "../../../src/core/literals.ts", "../../../src/core/string.ts", "../../../src/core/keys.ts", "../../../src/core/reference.ts", "../../../src/core/compat.ts", "../../../src/core/utils/error.ts", "../../../src/core/utils/get-object-flag.ts", "../../../src/core/base-primitives.ts", "../../../src/core/utils/constructors.ts", "../../../src/core/utils/iterator-to-sequence.ts", "../../../src/core/special-reference.ts", "../../../src/core/context/parser.ts", "../../../src/core/utils/promise-to-result.ts", "../../../src/core/web-api.ts", "../../../src/core/context/parser/async.ts", "../../../src/core/tree/async.ts", "../../../src/core/utils/typed-array.ts", "../../../src/core/utils/deferred.ts", "../../../src/core/context/deserializer.ts", "../../../src/core/tree/deserializer.ts", "../../../src/core/utils/is-valid-identifier.ts", "../../../src/core/context/serializer.ts", "../../../src/core/utils/get-identifier.ts", "../../../src/core/tree/serializer.ts", "../../../src/core/context/parser/sync.ts", "../../../src/core/tree/sync.ts", "../../../src/core/tree/index.ts", "../../../src/core/cross/async.ts", "../../../src/core/cross/deserializer.ts", "../../../src/core/cross/serializer.ts", "../../../src/core/context/parser/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"],
4
+ "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 MapSentinel = 41,\n IteratorFactory = 42,\n IteratorFactoryInstance = 43,\n AsyncIteratorFactory = 44,\n AsyncIteratorFactoryInstance = 45,\n ReadableStream = 46,\n ReadableStreamFactory = 47,\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", "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_ENQUEUE = 'Se';\n\nexport const GLOBAL_CONTEXT_STREAM_ERROR = 'St';\n\nexport const GLOBAL_CONTEXT_STREAM_CLOSE = 'Sc';\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_CLOSE}:function(s){s.${LOCAL_CONTEXT_STREAM_CONTROLLER}.close(),this.uS(s)},`\n + `${GLOBAL_CONTEXT_STREAM_ERROR}:function(s,e){s.${LOCAL_CONTEXT_STREAM_CONTROLLER}.error(e),this.uS(s)},`\n + `${GLOBAL_CONTEXT_STREAM_ENQUEUE}:function(s,d){s.${LOCAL_CONTEXT_STREAM_CONTROLLER}.enqueue(d)},`\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 './utils/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", "/**\n * References\n * - https://compat-table.github.io/compat-table/es6/\n * - MDN\n */\n\nexport const enum Feature {\n AggregateError = 0x01,\n ArrowFunction = 0x04,\n BigInt = 0x08,\n ErrorPrototypeStack = 0x10,\n Map = 0x20,\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", "import type {\n ErrorValue,\n} from '../../types';\nimport { Feature } from '../compat';\nimport {\n ERROR_CONSTRUCTOR_STRING,\n ErrorConstructorTag,\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\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 { SerovalObjectFlags } from '../constants';\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", "import type { BigIntTypedArrayValue, TypedArrayValue } from '../types';\nimport assert from './utils/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 { getErrorConstructor } from './utils/error';\nimport { serializeString } from './string';\nimport type {\n SerovalAggregateErrorNode,\n SerovalArrayBufferNode,\n SerovalArrayNode,\n SerovalAsyncIteratorFactoryInstanceNode,\n SerovalBigIntNode,\n SerovalBigIntTypedArrayNode,\n SerovalBoxedNode,\n SerovalConstantNode,\n SerovalDataViewNode,\n SerovalDateNode,\n SerovalErrorNode,\n SerovalIndexedValueNode,\n SerovalIteratorFactoryInstanceNode,\n SerovalNode,\n SerovalNumberNode,\n SerovalObjectRecordNode,\n SerovalPluginNode,\n SerovalReferenceNode,\n SerovalRegExpNode,\n SerovalSetNode,\n SerovalStringNode,\n SerovalTypedArrayNode,\n SerovalWKSymbolNode,\n} from './types';\nimport { getObjectFlag } from './utils/get-object-flag';\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\nexport function createArrayNode(\n id: number,\n current: unknown[],\n parsedItems: SerovalNode[],\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: parsedItems,\n f: undefined,\n b: undefined,\n o: getObjectFlag(current),\n };\n}\n\nexport function createBoxedNode(\n id: number,\n boxed: SerovalNode,\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: boxed,\n b: undefined,\n o: undefined,\n };\n}\n\nexport function createTypedArrayNode(\n id: number,\n current: TypedArrayValue,\n buffer: SerovalNode,\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: buffer,\n b: current.byteOffset,\n o: undefined,\n };\n}\n\nexport function createBigIntTypedArrayNode(\n id: number,\n current: BigIntTypedArrayValue,\n buffer: SerovalNode,\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: buffer,\n b: current.byteOffset,\n o: undefined,\n };\n}\n\nexport function createDataViewNode(\n id: number,\n current: DataView,\n buffer: SerovalNode,\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: buffer,\n b: current.byteOffset,\n o: undefined,\n };\n}\n\nexport function createErrorNode(\n id: number,\n current: Error,\n options: SerovalObjectRecordNode | undefined,\n): SerovalErrorNode {\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: options,\n e: undefined,\n a: undefined,\n f: undefined,\n b: undefined,\n o: undefined,\n };\n}\n\nexport function createAggregateErrorNode(\n id: number,\n current: AggregateError,\n options: SerovalObjectRecordNode | undefined,\n): SerovalAggregateErrorNode {\n return {\n t: SerovalNodeType.AggregateError,\n i: id,\n s: getErrorConstructor(current),\n l: undefined,\n c: undefined,\n m: serializeString(current.message),\n p: options,\n e: undefined,\n a: undefined,\n f: undefined,\n b: undefined,\n o: undefined,\n };\n}\n\nexport function createSetNode(\n id: number,\n size: number,\n items: SerovalNode[],\n): SerovalSetNode {\n return {\n t: SerovalNodeType.Set,\n i: id,\n s: undefined,\n l: size,\n c: undefined,\n m: undefined,\n p: undefined,\n e: undefined,\n a: items,\n f: undefined,\n b: undefined,\n o: undefined,\n };\n}\n\nexport function createIteratorFactoryInstanceNode(\n factory: SerovalNode,\n items: SerovalNode,\n): SerovalIteratorFactoryInstanceNode {\n return {\n t: SerovalNodeType.IteratorFactoryInstance,\n i: undefined,\n s: undefined,\n l: undefined,\n c: undefined,\n m: undefined,\n p: undefined,\n e: undefined,\n a: [\n factory,\n items,\n ],\n f: undefined,\n b: undefined,\n o: undefined,\n };\n}\n\nexport function createAsyncIteratorFactoryInstanceNode(\n factory: SerovalNode,\n items: SerovalNode,\n): SerovalAsyncIteratorFactoryInstanceNode {\n return {\n t: SerovalNodeType.AsyncIteratorFactoryInstance,\n i: undefined,\n s: undefined,\n l: undefined,\n c: undefined,\n m: undefined,\n p: undefined,\n e: undefined,\n a: [\n factory,\n items,\n ],\n f: undefined,\n b: undefined,\n o: undefined,\n };\n}\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 type BaseStreamParserContext from '../context/parser/stream';\n\n/* eslint-disable no-await-in-loop */\nexport interface Sequence {\n v: unknown[];\n t: number;\n d: number;\n}\n\nexport function iteratorToSequence<T>(source: Iterable<T>): Sequence {\n const values: unknown[] = [];\n let throwsAt = -1;\n let doneAt = -1;\n\n const iterator = source[Symbol.iterator]();\n\n while (true) {\n try {\n const value = iterator.next();\n values.push(value.value);\n if (value.done) {\n doneAt = values.length - 1;\n break;\n }\n } catch (error) {\n throwsAt = values.length;\n values.push(error);\n }\n }\n\n return {\n v: values,\n t: throwsAt,\n d: doneAt,\n };\n}\n\nexport function sequenceToIterator<T>(\n sequence: Sequence,\n): () => IterableIterator<T> {\n return (): IterableIterator<T> => {\n let index = 0;\n\n return {\n [Symbol.iterator](): IterableIterator<T> {\n return this;\n },\n next(): IteratorResult<T> {\n if (index > sequence.d) {\n return {\n done: true,\n value: undefined,\n };\n }\n const currentIndex = index++;\n const currentItem = sequence.v[currentIndex];\n if (currentIndex === sequence.t) {\n throw currentItem;\n }\n return {\n done: currentIndex === sequence.d,\n value: currentItem as T,\n };\n },\n };\n };\n}\n\nexport async function asyncIteratorToSequence<T>(source: AsyncIterable<T>): Promise<Sequence> {\n const values: unknown[] = [];\n let throwsAt = -1;\n let doneAt = -1;\n\n const iterator = source[Symbol.asyncIterator]();\n\n while (true) {\n try {\n const value = await iterator.next();\n values.push(value.value);\n if (value.done) {\n doneAt = values.length - 1;\n break;\n }\n } catch (error) {\n throwsAt = values.length;\n values.push(error);\n }\n }\n\n return {\n v: values,\n t: throwsAt,\n d: doneAt,\n };\n}\n\nexport function sequenceToAsyncIterator<T>(\n sequence: Sequence,\n): () => AsyncIterableIterator<T> {\n return (): AsyncIterableIterator<T> => {\n let index = 0;\n return {\n [Symbol.asyncIterator](): AsyncIterableIterator<T> {\n return this;\n },\n async next(): Promise<IteratorResult<T>> {\n if (index > sequence.d) {\n return {\n done: true,\n value: undefined,\n };\n }\n const currentIndex = index++;\n const currentItem = sequence.v[currentIndex];\n if (currentIndex === sequence.t) {\n throw currentItem;\n }\n return Promise.resolve({\n done: currentIndex === sequence.d,\n value: currentItem as T,\n });\n },\n };\n };\n}\n\nexport function asyncIteratorToReadableStream<T>(\n source: AsyncIterable<T>,\n parser: BaseStreamParserContext,\n): ReadableStream<unknown> {\n return new ReadableStream({\n async start(controller): Promise<void> {\n const iterator = source[Symbol.asyncIterator]();\n while (parser.isAlive()) {\n try {\n const result = await iterator.next();\n controller.enqueue([result.done ? 2 : 0, result.value]);\n if (result.done) {\n controller.close();\n return;\n }\n } catch (error) {\n controller.enqueue([1, error]);\n }\n }\n controller.close();\n },\n });\n}\n\ntype RSNext<T> = [0, T];\ntype RSThrow = [1, any];\ntype RSReturn<T> = [2, T];\n\nexport type SerializedAsyncIteratorResult<T> = RSNext<T> | RSThrow | RSReturn<T>;\n\nexport function readableStreamToAsyncIterator<T>(\n source: ReadableStream<SerializedAsyncIteratorResult<T>>,\n): () => AsyncIterableIterator<T> {\n let current = source;\n return (): AsyncIterableIterator<T> => {\n const [left, right] = current.tee();\n const clone = left;\n current = right;\n const reader = clone.getReader();\n return {\n [Symbol.asyncIterator](): AsyncIterableIterator<T> {\n return this;\n },\n async next(): Promise<IteratorResult<T>> {\n const result = await reader.read();\n if (result.done) {\n return {\n done: true,\n value: undefined,\n };\n }\n const [status, value] = result.value;\n if (status === 1) {\n throw value;\n }\n return {\n done: status === 2,\n value,\n };\n },\n };\n };\n}\n\nexport async function readableStreamToSequence<T>(\n stream: ReadableStream<T>,\n): Promise<Sequence> {\n const values: unknown[] = [];\n let throwsAt = -1;\n let doneAt = -1;\n\n const iterator = stream.getReader();\n\n while (true) {\n try {\n const value = await iterator.read();\n values.push(value.value);\n if (value.done) {\n doneAt = values.length - 1;\n break;\n }\n } catch (error) {\n throwsAt = values.length;\n doneAt = throwsAt;\n values.push(error);\n break;\n }\n }\n\n return {\n v: values,\n t: throwsAt,\n d: doneAt,\n };\n}\n\nexport function sequenceToReadableStream<T>(\n sequence: Sequence,\n): ReadableStream<T> {\n return new ReadableStream<T>({\n start(controller): void {\n for (let i = 0; i < sequence.d; i++) {\n controller.enqueue(sequence.v[i] as T);\n }\n if (sequence.t === -1) {\n controller.close();\n } else {\n controller.error(sequence.v[sequence.t] as T);\n }\n },\n });\n}\n", "export const MAP_SENTINEL = {};\n\nexport const ITERATOR = {};\n\nexport const ASYNC_ITERATOR = {};\n\nexport const READABLE_STREAM = {};\n\nexport const UNIVERSAL_SENTINEL = {};\n", "import UnsupportedTypeError from '../UnsupportedTypeError';\nimport assert from '../utils/assert';\nimport {\n createIndexedValueNode,\n createReferenceNode,\n createWKSymbolNode,\n} from '../base-primitives';\nimport { ALL_ENABLED, Feature } from '../compat';\nimport type { WellKnownSymbols } from '../constants';\nimport {\n INV_SYMBOL_REF,\n SerovalNodeType,\n} from '../constants';\nimport type { Plugin, PluginAccessOptions, SerovalMode } from '../plugin';\nimport { hasReferenceID } from '../reference';\nimport {\n ASYNC_ITERATOR,\n ITERATOR,\n MAP_SENTINEL,\n READABLE_STREAM,\n} from '../special-reference';\nimport type {\n SerovalAsyncIteratorFactoryNode,\n SerovalIndexedValueNode,\n SerovalIteratorFactoryNode,\n SerovalMapNode,\n SerovalMapSentinelNode,\n SerovalNode,\n SerovalNullConstructorNode,\n SerovalObjectNode,\n SerovalObjectRecordNode,\n SerovalReadableStreamFactoryNode,\n SerovalReferenceNode,\n SerovalWKSymbolNode,\n} from '../types';\nimport { getObjectFlag } from '../utils/get-object-flag';\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 // eslint-disable-next-line @typescript-eslint/ban-types\n protected parseFunction(current: Function): SerovalNode {\n assert(hasReferenceID(current), new Error('Cannot serialize function without reference ID.'));\n return this.getStrictReference(current);\n }\n\n protected parseWKSymbol(\n current: symbol,\n ): SerovalIndexedValueNode | SerovalWKSymbolNode | SerovalReferenceNode {\n assert(this.features & Feature.Symbol, new UnsupportedTypeError(current));\n const registeredID = this.refs.get(current);\n if (registeredID != null) {\n this.markRef(registeredID);\n return createIndexedValueNode(registeredID);\n }\n const isValid = current in INV_SYMBOL_REF;\n assert(current in INV_SYMBOL_REF || hasReferenceID(current), new Error('Cannot serialize symbol without reference ID.'));\n const id = this.refs.size;\n this.refs.set(current, id);\n if (isValid) {\n return createWKSymbolNode(id, current as WellKnownSymbols);\n }\n return createReferenceNode(id, current);\n }\n\n protected parseMapSentinel(): SerovalIndexedValueNode | SerovalMapSentinelNode {\n const registeredID = this.refs.get(MAP_SENTINEL);\n if (registeredID != null) {\n this.markRef(registeredID);\n return createIndexedValueNode(registeredID);\n }\n const id = this.refs.size;\n this.refs.set(MAP_SENTINEL, id);\n return {\n t: SerovalNodeType.MapSentinel,\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 parseIteratorFactory(): SerovalIndexedValueNode | SerovalIteratorFactoryNode {\n const registeredID = this.refs.get(ITERATOR);\n if (registeredID != null) {\n this.markRef(registeredID);\n return createIndexedValueNode(registeredID);\n }\n const id = this.refs.size;\n this.refs.set(ITERATOR, id);\n return {\n t: SerovalNodeType.IteratorFactory,\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.parseWKSymbol(Symbol.iterator),\n b: undefined,\n o: undefined,\n };\n }\n\n protected parseAsyncIteratorFactory(): SerovalIndexedValueNode | SerovalAsyncIteratorFactoryNode {\n const registeredID = this.refs.get(ASYNC_ITERATOR);\n if (registeredID != null) {\n this.markRef(registeredID);\n return createIndexedValueNode(registeredID);\n }\n const id = this.refs.size;\n this.refs.set(ASYNC_ITERATOR, id);\n return {\n t: SerovalNodeType.AsyncIteratorFactory,\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.parseWKSymbol(Symbol.asyncIterator),\n b: undefined,\n o: undefined,\n };\n }\n\n protected createObjectNode(\n id: number,\n current: Record<string, unknown>,\n empty: boolean,\n record: SerovalObjectRecordNode,\n ): SerovalObjectNode | SerovalNullConstructorNode {\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: record,\n e: undefined,\n a: undefined,\n f: undefined,\n b: undefined,\n o: getObjectFlag(current),\n };\n }\n\n protected createMapNode(\n id: number,\n k: SerovalNode[],\n v: SerovalNode[],\n s: number,\n ): SerovalMapNode {\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, v, s },\n a: undefined,\n f: this.parseMapSentinel(),\n b: undefined,\n o: undefined,\n };\n }\n\n protected parseReadableStreamFactory(): (\n SerovalIndexedValueNode | SerovalReadableStreamFactoryNode\n ) {\n const registeredID = this.refs.get(READABLE_STREAM);\n if (registeredID != null) {\n this.markRef(registeredID);\n return createIndexedValueNode(registeredID);\n }\n const id = this.refs.size;\n this.refs.set(READABLE_STREAM, id);\n return {\n t: SerovalNodeType.ReadableStreamFactory,\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", "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 { SerovalNodeType } from './constants';\nimport { serializeString } from './string';\nimport type {\n SerovalCustomEventNode,\n SerovalDOMExceptionNode,\n SerovalEventNode,\n SerovalNode,\n SerovalReadableStreamNode,\n SerovalURLNode,\n SerovalURLSearchParamsNode,\n} 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\nexport function createEventNode(\n id: number,\n type: string,\n options: SerovalNode,\n): SerovalEventNode {\n return {\n t: SerovalNodeType.Event,\n i: id,\n s: serializeString(type),\n l: undefined,\n c: undefined,\n m: undefined,\n p: undefined,\n e: undefined,\n a: undefined,\n f: options,\n b: undefined,\n o: undefined,\n };\n}\n\nexport function createCustomEventNode(\n id: number,\n type: string,\n options: SerovalNode,\n): SerovalCustomEventNode {\n return {\n t: SerovalNodeType.CustomEvent,\n i: id,\n s: serializeString(type),\n l: undefined,\n c: undefined,\n m: undefined,\n p: undefined,\n e: undefined,\n a: undefined,\n f: options,\n b: undefined,\n o: undefined,\n };\n}\n\nexport function createReadableStreamNode(\n id: number,\n factory: SerovalNode,\n items: SerovalNode,\n): SerovalReadableStreamNode {\n return {\n t: SerovalNodeType.ReadableStream,\n i: id,\n s: undefined,\n l: undefined,\n c: undefined,\n m: undefined,\n p: undefined,\n e: undefined,\n a: [\n factory,\n items,\n ],\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 '../../utils/assert';\nimport {\n createPluginNode,\n createDateNode,\n createRegExpNode,\n createArrayBufferNode,\n createBigIntNode,\n createStringNode,\n createNumberNode,\n createArrayNode,\n createBoxedNode,\n createTypedArrayNode,\n createBigIntTypedArrayNode,\n createDataViewNode,\n createErrorNode,\n createSetNode,\n createAggregateErrorNode,\n createIteratorFactoryInstanceNode,\n createAsyncIteratorFactoryInstanceNode,\n} from '../../base-primitives';\nimport { BIGINT_FLAG, Feature } from '../../compat';\nimport {\n SerovalNodeType,\n} from '../../constants';\nimport {\n createRequestOptions,\n createResponseOptions,\n createEventOptions,\n createCustomEventOptions,\n} from '../../utils/constructors';\nimport {\n NULL_NODE,\n TRUE_NODE,\n FALSE_NODE,\n UNDEFINED_NODE,\n} from '../../literals';\nimport { asyncIteratorToSequence, iteratorToSequence, readableStreamToSequence } from '../../utils/iterator-to-sequence';\nimport { BaseParserContext } from '../parser';\nimport promiseToResult from '../../utils/promise-to-result';\nimport { getErrorOptions } from '../../utils/error';\nimport { serializeString } from '../../string';\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 SerovalReadableStreamNode,\n} from '../../types';\nimport {\n createURLNode,\n createURLSearchParamsNode,\n createDOMExceptionNode,\n createEventNode,\n createCustomEventNode,\n createReadableStreamNode,\n} from '../../web-api';\nimport { UNIVERSAL_SENTINEL } from '../../special-reference';\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 nodes = [];\n for (let i = 0, len = current.length; i < len; i++) {\n if (i in current) {\n nodes[i] = await this.parse(current[i]);\n }\n }\n return nodes;\n }\n\n private async parseArray(\n id: number,\n current: unknown[],\n ): Promise<SerovalArrayNode> {\n return createArrayNode(\n id,\n current,\n await this.parseItems(current),\n );\n }\n\n private async parseProperties(\n properties: Record<string | symbol, unknown>,\n ): Promise<SerovalObjectRecordNode> {\n const entries = Object.entries(properties);\n const keyNodes: SerovalObjectRecordKey[] = [];\n const valueNodes: SerovalNode[] = [];\n for (\n let i = 0, len = entries.length;\n i < len;\n i++\n ) {\n keyNodes.push(serializeString(entries[i][0]));\n valueNodes.push(await this.parse(entries[i][1]));\n }\n // Check special properties\n if (this.features & Feature.Symbol) {\n let symbol = Symbol.iterator;\n if (symbol in properties) {\n keyNodes.push(\n this.parseWKSymbol(symbol),\n );\n valueNodes.push(\n createIteratorFactoryInstanceNode(\n this.parseIteratorFactory(),\n await this.parse(\n iteratorToSequence(properties as unknown as Iterable<unknown>),\n ),\n ),\n );\n }\n symbol = Symbol.asyncIterator;\n if (symbol in properties) {\n keyNodes.push(\n this.parseWKSymbol(symbol),\n );\n valueNodes.push(\n createAsyncIteratorFactoryInstanceNode(\n this.parseAsyncIteratorFactory(),\n await this.parse(\n await asyncIteratorToSequence(properties as unknown as AsyncIterable<unknown>),\n ),\n ),\n );\n }\n symbol = Symbol.toStringTag;\n if (symbol in properties) {\n keyNodes.push(this.parseWKSymbol(symbol));\n valueNodes.push(createStringNode(properties[symbol] as string));\n }\n symbol = Symbol.isConcatSpreadable;\n if (symbol in properties) {\n keyNodes.push(this.parseWKSymbol(symbol));\n valueNodes.push(properties[symbol] ? TRUE_NODE : FALSE_NODE);\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 this.createObjectNode(\n id,\n current,\n empty,\n await this.parseProperties(current),\n );\n }\n\n private async parseBoxed(\n id: number,\n current: object,\n ): Promise<SerovalBoxedNode> {\n return createBoxedNode(id, await this.parse(current.valueOf()));\n }\n\n private async parseTypedArray(\n id: number,\n current: TypedArrayValue,\n ): Promise<SerovalTypedArrayNode> {\n return createTypedArrayNode(id, current, await this.parse(current.buffer));\n }\n\n private async parseBigIntTypedArray(\n id: number,\n current: BigIntTypedArrayValue,\n ): Promise<SerovalBigIntTypedArrayNode> {\n return createBigIntTypedArrayNode(id, current, await this.parse(current.buffer));\n }\n\n private async parseDataView(\n id: number,\n current: DataView,\n ): Promise<SerovalDataViewNode> {\n return createDataViewNode(id, current, await this.parse(current.buffer));\n }\n\n private async parseError(\n id: number,\n current: Error,\n ): Promise<SerovalErrorNode> {\n const options = getErrorOptions(current, this.features);\n return createErrorNode(\n id,\n current,\n options\n ? await this.parseProperties(options)\n : 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 return createAggregateErrorNode(\n id,\n current,\n options\n ? await this.parseProperties(options)\n : 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 for (const [key, value] of current.entries()) {\n keyNodes.push(await this.parse(key));\n valueNodes.push(await this.parse(value));\n }\n return this.createMapNode(\n id,\n keyNodes,\n valueNodes,\n current.size,\n );\n }\n\n private async parseSet(\n id: number,\n current: Set<unknown>,\n ): Promise<SerovalSetNode> {\n const items: SerovalNode[] = [];\n for (const item of current.keys()) {\n items.push(await this.parse(item));\n }\n return createSetNode(id, current.size, items);\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 for (let i = 0; i < size; i++) {\n keyNodes.push(serializeString(entries[i][0]));\n valueNodes.push(await this.parse(entries[i][1]));\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 createEventNode(id, current.type, await this.parse(createEventOptions(current)));\n }\n\n private async parseCustomEvent(\n id: number,\n current: CustomEvent,\n ): Promise<SerovalCustomEventNode> {\n return createCustomEventNode(\n id,\n current.type,\n await this.parse(createCustomEventOptions(current)),\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 parseReadableStream(\n id: number,\n current: ReadableStream,\n ): Promise<SerovalReadableStreamNode> {\n return createReadableStreamNode(\n id,\n this.parseReadableStreamFactory(),\n await this.parse(\n await readableStreamToSequence(current),\n ),\n );\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 case (typeof ReadableStream !== 'undefined' ? ReadableStream : UNIVERSAL_SENTINEL):\n return this.parseReadableStream(id, current as unknown as ReadableStream);\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 (\n currentFeatures & Feature.Symbol\n && (Symbol.iterator in current || Symbol.asyncIterator in current)\n ) {\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 return this.parseWKSymbol(current);\n case 'function':\n return this.parseFunction(current);\n default:\n throw new UnsupportedTypeError(current);\n }\n }\n}\n", "import BaseAsyncParserContext from '../context/parser/async';\nimport type { BaseParserContextOptions } from '../context/parser';\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", "type 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", "export interface Deferred {\n promise: Promise<unknown>;\n resolve(value: unknown): void;\n reject(value: unknown): void;\n}\n\nexport function createDeferred(): Deferred {\n let resolve: Deferred['resolve'];\n let reject: Deferred['reject'];\n return {\n promise: new Promise<unknown>((res, rej) => {\n resolve = res;\n reject = rej;\n }),\n resolve(value): void {\n resolve(value);\n },\n reject(value): void {\n reject(value);\n },\n };\n}\n\nexport interface DeferredStream {\n stream: ReadableStream;\n close(): void;\n enqueue(chunk?: unknown): void;\n error(e?: any): void;\n}\n\nexport function createDeferredStream(): DeferredStream {\n let controller: ReadableStreamDefaultController;\n return {\n stream: new ReadableStream({\n start(current): void {\n controller = current;\n },\n }),\n close(): void {\n controller.close();\n },\n enqueue(data): void {\n controller.enqueue(data);\n },\n error(e): void {\n controller.error(e);\n },\n };\n}\n", "/* eslint-disable prefer-spread */\nimport { deserializeString } from '../string';\nimport type { BigIntTypedArrayValue, TypedArrayValue } from '../../types';\nimport { getReference } from '../reference';\nimport type {\n SerovalAggregateErrorNode,\n SerovalArrayBufferNode,\n SerovalArrayNode,\n SerovalAsyncIteratorFactoryInstanceNode,\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 SerovalIteratorFactoryInstanceNode,\n SerovalMapNode,\n SerovalNode,\n SerovalNullConstructorNode,\n SerovalObjectNode,\n SerovalObjectRecordKey,\n SerovalObjectRecordNode,\n SerovalPluginNode,\n SerovalPromiseConstructorNode,\n SerovalPromiseNode,\n SerovalPromiseRejectNode,\n SerovalPromiseResolveNode,\n SerovalReadableStreamCloseNode,\n SerovalReadableStreamConstructorNode,\n SerovalReadableStreamEnqueueNode,\n SerovalReadableStreamErrorNode,\n SerovalReadableStreamNode,\n SerovalReferenceNode,\n SerovalRegExpNode,\n SerovalRequestNode,\n SerovalResponseNode,\n SerovalSetNode,\n SerovalTypedArrayNode,\n SerovalURLNode,\n SerovalURLSearchParamsNode,\n} from '../types';\nimport {\n CONSTANT_VAL,\n ERROR_CONSTRUCTOR,\n SYMBOL_REF,\n SerovalNodeType,\n SerovalObjectFlags,\n} from '../constants';\nimport type { Plugin, PluginAccessOptions, SerovalMode } from '../plugin';\nimport type { Sequence, SerializedAsyncIteratorResult } from '../utils/iterator-to-sequence';\nimport {\n readableStreamToAsyncIterator,\n sequenceToAsyncIterator,\n sequenceToIterator,\n sequenceToReadableStream,\n} from '../utils/iterator-to-sequence';\nimport { getTypedArrayConstructor } from '../utils/typed-array';\nimport type { Deferred, DeferredStream } from '../utils/deferred';\nimport { createDeferred, createDeferredStream } from '../utils/deferred';\nimport assert from '../utils/assert';\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\nexport interface BaseDeserializerOptions extends PluginAccessOptions {\n refs?: Map<number, unknown>;\n}\n\nexport default abstract class BaseDeserializerContext implements PluginAccessOptions {\n abstract readonly mode: SerovalMode;\n\n /**\n * Mapping ids to values\n * @private\n */\n refs: Map<number, unknown>;\n\n plugins?: Plugin<any, any>[] | undefined;\n\n constructor(options: BaseDeserializerOptions) {\n this.plugins = options.plugins;\n this.refs = options.refs || new Map<number, unknown>();\n }\n\n protected abstract assignIndexedValue<T>(\n id: number,\n value: T,\n ): T;\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 const keys = node.k;\n const vals = node.v;\n for (let i = 0, key: SerovalObjectRecordKey; i < len; i++) {\n key = keys[i];\n if (typeof key === 'string') {\n result[deserializeString(key)] = this.deserialize(vals[i]);\n } else {\n result[this.deserialize(key) as symbol] = this.deserialize(vals[i]);\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);\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.promise;\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 this.assignIndexedValue(\n node.i,\n plugin.deserialize(node.s, this, {\n id: node.i,\n }),\n );\n }\n }\n }\n throw new Error('Missing plugin for tag \"' + node.c + '\".');\n }\n\n private deserializePromiseConstructor(node: SerovalPromiseConstructorNode): unknown {\n return this.assignIndexedValue(\n node.i,\n createDeferred(),\n ).promise;\n }\n\n private deserializePromiseResolve(node: SerovalPromiseResolveNode): unknown {\n const deferred = this.refs.get(node.i) as Deferred | undefined;\n assert(deferred, new Error('Missing Promise instance.'));\n deferred.resolve(\n this.deserialize(node.f),\n );\n return undefined;\n }\n\n private deserializePromiseReject(node: SerovalPromiseRejectNode): unknown {\n const deferred = this.refs.get(node.i) as Deferred | undefined;\n assert(deferred, new Error('Missing Promise instance.'));\n deferred.reject(\n this.deserialize(node.f),\n );\n return undefined;\n }\n\n private deserializeReadableStreamConstructor(\n node: SerovalReadableStreamConstructorNode,\n ): unknown {\n return this.assignIndexedValue(\n node.i,\n createDeferredStream(),\n ).stream;\n }\n\n private deserializeReadableStreamEnqueue(node: SerovalReadableStreamEnqueueNode): unknown {\n const deferred = this.refs.get(node.i) as DeferredStream | undefined;\n assert(deferred, new Error('Missing ReadableStream instance.'));\n deferred.enqueue(\n this.deserialize(node.f),\n );\n return undefined;\n }\n\n private deserializeReadableStreamError(node: SerovalReadableStreamErrorNode): unknown {\n const deferred = this.refs.get(node.i) as DeferredStream | undefined;\n assert(deferred, new Error('Missing Promise instance.'));\n deferred.error(\n this.deserialize(node.f),\n );\n return undefined;\n }\n\n private deserializeReadableStreamClose(node: SerovalReadableStreamCloseNode): unknown {\n const deferred = this.refs.get(node.i) as DeferredStream | undefined;\n assert(deferred, new Error('Missing Promise instance.'));\n deferred.close();\n return undefined;\n }\n\n private deserializeIteratorFactoryInstance(\n node: SerovalIteratorFactoryInstanceNode,\n ): unknown {\n const source = this.deserialize(node.a[1]);\n return sequenceToIterator(source as Sequence);\n }\n\n private deserializeAsyncIteratorFactoryInstance(\n node: SerovalAsyncIteratorFactoryInstanceNode,\n ): unknown {\n const source = this.deserialize(node.a[1]);\n if ((source as object).constructor === ReadableStream) {\n return readableStreamToAsyncIterator(\n source as ReadableStream<SerializedAsyncIteratorResult<unknown>>,\n );\n }\n return sequenceToAsyncIterator(source as Sequence);\n }\n\n private deserializeReadableStream(\n node: SerovalReadableStreamNode,\n ): unknown {\n return this.assignIndexedValue(\n node.i,\n sequenceToReadableStream(\n this.deserialize(node.a[1]) as Sequence,\n ),\n );\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.refs.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 case SerovalNodeType.PromiseConstructor:\n return this.deserializePromiseConstructor(node);\n case SerovalNodeType.PromiseResolve:\n return this.deserializePromiseResolve(node);\n case SerovalNodeType.PromiseReject:\n return this.deserializePromiseReject(node);\n case SerovalNodeType.ReadableStreamConstructor:\n return this.deserializeReadableStreamConstructor(node);\n case SerovalNodeType.ReadableStreamEnqueue:\n return this.deserializeReadableStreamEnqueue(node);\n case SerovalNodeType.ReadableStreamError:\n return this.deserializeReadableStreamError(node);\n case SerovalNodeType.ReadableStreamClose:\n return this.deserializeReadableStreamClose(node);\n case SerovalNodeType.IteratorFactoryInstance:\n return this.deserializeIteratorFactoryInstance(node);\n case SerovalNodeType.AsyncIteratorFactoryInstance:\n return this.deserializeAsyncIteratorFactoryInstance(node);\n case SerovalNodeType.ReadableStream:\n return this.deserializeReadableStream(node);\n case SerovalNodeType.MapSentinel:\n case SerovalNodeType.IteratorFactory:\n case SerovalNodeType.AsyncIteratorFactory:\n case SerovalNodeType.ReadableStreamFactory:\n default:\n throw new Error('invariant');\n }\n }\n}\n", "import BaseDeserializerContext from '../context/deserializer';\nimport type { BaseDeserializerOptions } from '../context/deserializer';\nimport type { SerovalMode } from '../plugin';\n\nexport interface VanillaDeserializerContextOptions extends Omit<BaseDeserializerOptions, 'refs'> {\n markedRefs: number[] | Set<number>;\n}\n\nexport default class VanillaDeserializerContext extends BaseDeserializerContext {\n readonly mode: SerovalMode = 'vanilla';\n\n marked: Set<number>;\n\n constructor(options: VanillaDeserializerContextOptions) {\n super({\n plugins: options.plugins,\n refs: undefined,\n });\n this.marked = new Set(options.markedRefs);\n }\n\n assignIndexedValue<T>(\n index: number,\n value: T,\n ): T {\n if (this.marked.has(index)) {\n this.refs.set(index, value);\n }\n return value;\n }\n}\n", "const 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", "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 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 SerovalMapSentinelNode,\n SerovalIteratorFactoryInstanceNode,\n SerovalIteratorFactoryNode,\n SerovalAsyncIteratorFactoryInstanceNode,\n SerovalAsyncIteratorFactoryNode,\n SerovalReadableStreamNode,\n SerovalReadableStreamFactoryNode,\n} from '../types';\nimport { isValidIdentifier } from '../utils/is-valid-identifier';\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 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\ntype SerovalNodeWithProperties =\n | SerovalObjectNode\n | SerovalNullConstructorNode\n | SerovalAggregateErrorNode\n | SerovalErrorNode\n | SerovalHeadersNode;\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 protected createFunction(\n parameters: string[],\n body: string,\n ): string {\n if (this.features & Feature.ArrowFunction) {\n const joined = parameters.length === 1\n ? parameters[0]\n : '(' + parameters.join(',') + ')';\n return joined + '=>' + body;\n }\n return 'function(' + parameters.join(',') + '){return ' + body + '}';\n }\n\n protected createEffectfulFunction(\n parameters: string[],\n body: string,\n ): string {\n if (this.features & Feature.ArrowFunction) {\n const joined = parameters.length === 1\n ? parameters[0]\n : '(' + parameters.join(',') + ')';\n return joined + '=>{' + body + '}';\n }\n return 'function(' + parameters.join(',') + '){' + body + '}';\n }\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 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 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 source: SerovalNodeWithProperties,\n key: SerovalObjectRecordKey,\n val: SerovalNode,\n ): string {\n if (typeof key === 'string') {\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(source.i);\n // eslint-disable-next-line no-self-compare\n if (isIdentifier && check !== check) {\n this.createObjectAssign(source.i, key, refParam);\n } else {\n this.createArrayAssign(source.i, isIdentifier ? key : ('\"' + key + '\"'), refParam);\n }\n return '';\n }\n return (isIdentifier ? key : ('\"' + key + '\"')) + ':' + this.serialize(val);\n }\n return '[' + this.serialize(key) + ']:' + this.serialize(val);\n }\n\n protected serializeProperties(\n source: SerovalNodeWithProperties,\n record: SerovalObjectRecordNode,\n ): string {\n const len = record.s;\n if (len) {\n this.stack.push(source.i);\n const keys = record.k;\n const values = record.v;\n let result = this.serializeProperty(source, keys[0], values[0]);\n for (let i = 1, item = result; i < len; i++) {\n item = this.serializeProperty(source, 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, node.p));\n }\n\n protected serializeWithObjectAssign(\n source: SerovalNodeWithProperties,\n value: SerovalObjectRecordNode,\n serialized: string,\n ): string {\n const fields = this.serializeProperties(source, value);\n if (fields !== '{}') {\n return 'Object.assign(' + serialized + ',' + fields + ')';\n }\n return serialized;\n }\n\n protected serializeAssignment(\n source: SerovalNodeWithProperties,\n mainAssignments: Assignment[],\n key: SerovalObjectRecordKey,\n value: SerovalNode,\n ): void {\n if (typeof key === 'string') {\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(source.i, key, serialized);\n } else {\n this.createArrayAssign(source.i, isIdentifier ? key : ('\"' + key + '\"'), serialized);\n }\n } else {\n const parentAssignment = this.assignments;\n this.assignments = mainAssignments;\n if (isIdentifier) {\n this.createObjectAssign(source.i, key, serialized);\n } else {\n this.createArrayAssign(source.i, isIdentifier ? key : ('\"' + key + '\"'), serialized);\n }\n this.assignments = parentAssignment;\n }\n } else {\n const parent = this.stack;\n this.stack = [];\n const serialized = this.serialize(value);\n this.stack = parent;\n const parentAssignment = this.assignments;\n this.assignments = mainAssignments;\n this.createArrayAssign(\n source.i,\n this.serialize(key),\n serialized,\n );\n this.assignments = parentAssignment;\n }\n }\n\n protected serializeAssignments(\n source: SerovalNodeWithProperties,\n node: SerovalObjectRecordNode,\n ): string | undefined {\n const len = node.s;\n if (len) {\n this.stack.push(source.i);\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(source, mainAssignments, keys[i], values[i]);\n }\n this.stack.pop();\n return resolveAssignments(mainAssignments);\n }\n return undefined;\n }\n\n protected serializeDictionary(\n node: SerovalNodeWithProperties,\n init: string,\n ): string {\n if (node.p) {\n if (this.features & Feature.ObjectAssign) {\n init = this.serializeWithObjectAssign(node, node.p, init);\n } else {\n this.markRef(node.i);\n const assignments = this.serializeAssignments(node, node.p);\n if (assignments) {\n return '(' + this.assignIndexedValue(node.i, init) + ',' + assignments + this.getRefParam(node.i) + ')';\n }\n }\n }\n return this.assignIndexedValue(node.i, init);\n }\n\n protected serializeNullConstructor(\n node: SerovalNullConstructorNode,\n ): string {\n this.pushObjectFlag(node.o, node.i);\n return this.serializeDictionary(node, 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 sentinel: string,\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) + ',[' + sentinel + ',' + sentinel + '])';\n this.createSetAssignment(id, keyRef, this.getRefParam(val.i));\n this.createDeleteAssignment(id, 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) + ',[' + sentinel + ',' + sentinel + '])';\n this.createSetAssignment(id, this.getRefParam(key.i), valueRef);\n this.createDeleteAssignment(id, 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 const sentinel = node.f;\n const sentinelID = this.getRefParam(sentinel.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], sentinelID);\n for (let i = 1, item = result; i < size; i++) {\n item = this.serializeMapEntry(id, keys[i], vals[i], sentinelID);\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 if (sentinel.t === SerovalNodeType.MapSentinel) {\n this.markRef(sentinel.i);\n serialized = '(' + this.serialize(sentinel) + ',' + serialized + ')';\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(node, serialized);\n }\n\n protected serializeError(\n node: SerovalErrorNode,\n ): string {\n return this.serializeDictionary(node, '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 serialized = constructor + (\n node.s\n ? '().then(' + this.createFunction([], ref) + ')'\n : '().catch(' + this.createEffectfulFunction([], '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, 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 this.assignIndexedValue(\n node.i,\n plugin.serialize(node.s, this, {\n id: node.i,\n }),\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 protected serializeMapSentinel(node: SerovalMapSentinelNode): string {\n return this.assignIndexedValue(\n node.i,\n '[]',\n );\n }\n\n protected serializeIteratorFactory(node: SerovalIteratorFactoryNode): string {\n return this.assignIndexedValue(\n node.i,\n this.createFunction(\n ['s'],\n this.createFunction(\n ['i', 'c', 'd', 't'],\n '(i=0,t={[' + this.serialize(node.f) + ']:' + this.createFunction([], 't') + ','\n + 'next:' + this.createEffectfulFunction([], 'if(i>s.d)return{done:!0,value:void 0};c=i++,d=s.v[c];if(c===s.t)throw d;return{done:c===s.d,value:d}') + '})',\n ),\n ),\n );\n }\n\n protected serializeIteratorFactoryInstance(\n node: SerovalIteratorFactoryInstanceNode,\n ): string {\n return '(' + this.serialize(node.a[0]) + ')(' + this.serialize(node.a[1]) + ')';\n }\n\n protected serializeAsyncIteratorFactory(node: SerovalAsyncIteratorFactoryNode): string {\n return this.assignIndexedValue(\n node.i,\n this.createFunction(\n ['s'],\n this.createFunction(\n ['i', 't'],\n '(i=0,t={[' + this.serialize(node.f) + ']:' + this.createFunction([], 't') + ','\n + 'next:' + this.createFunction(\n [],\n 'Promise.resolve().then(' + this.createEffectfulFunction(\n ['c', 'd'],\n 'if(i>s.d)return{done:!0,value:void 0};c=i++,d=s.v[c];if(c===s.t)throw d;return{done:c===s.d,value:d}',\n ) + ')',\n ) + '})',\n ),\n ),\n );\n }\n\n protected serializeAsyncIteratorFactoryInstance(\n node: SerovalAsyncIteratorFactoryInstanceNode,\n ): string {\n return '(' + this.serialize(node.a[0]) + ')(' + this.serialize(node.a[1]) + ')';\n }\n\n protected serializeReadableStream(\n node: SerovalReadableStreamNode,\n ): string {\n this.stack.push(node.i);\n const result = '(' + this.serialize(node.a[0]) + ')(' + this.serialize(node.a[1]) + ')';\n this.stack.pop();\n return this.assignIndexedValue(\n node.i,\n result,\n );\n }\n\n protected serializeReadableStreamFactory(\n node: SerovalReadableStreamFactoryNode,\n ): string {\n return this.assignIndexedValue(\n node.i,\n this.createFunction(\n ['s'],\n 'new ReadableStream({start:' + this.createFunction(\n ['c'],\n 'Promise.resolve().then(' + this.createEffectfulFunction(\n ['i', 'v'],\n 'for(i=0;i<s.d;i++)c.enqueue(s.v[i]);(s.t===-1)?c.close():c.error(s.v[i])',\n ) + ')',\n ) + '})',\n ),\n );\n }\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 case SerovalNodeType.MapSentinel:\n return this.serializeMapSentinel(node);\n case SerovalNodeType.IteratorFactory:\n return this.serializeIteratorFactory(node);\n case SerovalNodeType.IteratorFactoryInstance:\n return this.serializeIteratorFactoryInstance(node);\n case SerovalNodeType.AsyncIteratorFactory:\n return this.serializeAsyncIteratorFactory(node);\n case SerovalNodeType.AsyncIteratorFactoryInstance:\n return this.serializeAsyncIteratorFactoryInstance(node);\n case SerovalNodeType.ReadableStream:\n return this.serializeReadableStream(node);\n case SerovalNodeType.ReadableStreamFactory:\n return this.serializeReadableStreamFactory(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 '../context/serializer';\nimport BaseSerializerContext from '../context/serializer';\nimport getIdentifier from '../utils/get-identifier';\nimport type { SerovalMode } from '../plugin';\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[] = [];\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 return '(' + this.createFunction(this.vars, '(' + 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 '../../utils/assert';\nimport {\n createAggregateErrorNode,\n createArrayBufferNode,\n createArrayNode,\n createBigIntNode,\n createBigIntTypedArrayNode,\n createBoxedNode,\n createDataViewNode,\n createDateNode,\n createErrorNode,\n createIteratorFactoryInstanceNode,\n createNumberNode,\n createPluginNode,\n createRegExpNode,\n createSetNode,\n createStringNode,\n createTypedArrayNode,\n createWKSymbolNode,\n} from '../../base-primitives';\nimport { BIGINT_FLAG, Feature } from '../../compat';\nimport type { WellKnownSymbols } from '../../constants';\nimport {\n SerovalNodeType,\n} from '../../constants';\nimport { createCustomEventOptions, createEventOptions } from '../../utils/constructors';\nimport {\n FALSE_NODE,\n NULL_NODE,\n TRUE_NODE,\n UNDEFINED_NODE,\n} from '../../literals';\nimport { iteratorToSequence } from '../../utils/iterator-to-sequence';\nimport type { BaseParserContextOptions } from '../parser';\nimport { BaseParserContext } from '../parser';\nimport { hasReferenceID } from '../../reference';\nimport { getErrorOptions } from '../../utils/error';\nimport { serializeString } from '../../string';\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 {\n createCustomEventNode,\n createDOMExceptionNode,\n createEventNode,\n createURLNode,\n createURLSearchParamsNode,\n} from '../../web-api';\nimport { UNIVERSAL_SENTINEL } from '../../special-reference';\n\ntype ObjectLikeNode =\n | SerovalObjectNode\n | SerovalNullConstructorNode;\n\nexport type BaseSyncParserContextOptions = BaseParserContextOptions\n\nexport default abstract class BaseSyncParserContext extends BaseParserContext {\n protected parseItems(\n current: unknown[],\n ): SerovalNode[] {\n const nodes = [];\n for (let i = 0, len = current.length; i < len; i++) {\n if (i in current) {\n nodes[i] = this.parse(current[i]);\n }\n }\n return nodes;\n }\n\n protected parseArray(\n id: number,\n current: unknown[],\n ): SerovalArrayNode {\n return createArrayNode(\n id,\n current,\n this.parseItems(current),\n );\n }\n\n protected parseProperties(\n properties: Record<string | symbol, unknown>,\n ): SerovalObjectRecordNode {\n const entries = Object.entries(properties);\n const keyNodes: SerovalObjectRecordKey[] = [];\n const valueNodes: SerovalNode[] = [];\n for (\n let i = 0, len = entries.length;\n i < len;\n i++\n ) {\n keyNodes.push(serializeString(entries[i][0]));\n valueNodes.push(this.parse(entries[i][1]));\n }\n // Check special properties, symbols in this case\n if (this.features & Feature.Symbol) {\n let symbol = Symbol.iterator;\n if (symbol in properties) {\n keyNodes.push(\n this.parseWKSymbol(symbol),\n );\n valueNodes.push(\n createIteratorFactoryInstanceNode(\n this.parseIteratorFactory(),\n this.parse(\n iteratorToSequence(properties as unknown as Iterable<unknown>),\n ),\n ),\n );\n }\n symbol = Symbol.toStringTag;\n if (symbol in properties) {\n keyNodes.push(this.parseWKSymbol(symbol));\n valueNodes.push(createStringNode(properties[symbol] as string));\n }\n symbol = Symbol.isConcatSpreadable;\n if (symbol in properties) {\n keyNodes.push(this.parseWKSymbol(symbol));\n valueNodes.push(properties[symbol] ? TRUE_NODE : FALSE_NODE);\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 this.createObjectNode(\n id,\n current,\n empty,\n this.parseProperties(current),\n );\n }\n\n protected parseBoxed(\n id: number,\n current: object,\n ): SerovalBoxedNode {\n return createBoxedNode(id, this.parse(current.valueOf()));\n }\n\n protected parseTypedArray(\n id: number,\n current: TypedArrayValue,\n ): SerovalTypedArrayNode {\n return createTypedArrayNode(id, current, this.parse(current.buffer));\n }\n\n protected parseBigIntTypedArray(\n id: number,\n current: BigIntTypedArrayValue,\n ): SerovalBigIntTypedArrayNode {\n return createBigIntTypedArrayNode(id, current, this.parse(current.buffer));\n }\n\n protected parseDataView(\n id: number,\n current: DataView,\n ): SerovalDataViewNode {\n return createDataViewNode(id, current, this.parse(current.buffer));\n }\n\n protected parseError(\n id: number,\n current: Error,\n ): SerovalErrorNode {\n const options = getErrorOptions(current, this.features);\n return createErrorNode(\n id,\n current,\n options\n ? this.parseProperties(options)\n : undefined,\n );\n }\n\n protected parseAggregateError(\n id: number,\n current: AggregateError,\n ): SerovalAggregateErrorNode {\n const options = getErrorOptions(current, this.features);\n return createAggregateErrorNode(\n id,\n current,\n options\n ? this.parseProperties(options)\n : 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 for (const [key, value] of current.entries()) {\n keyNodes.push(this.parse(key));\n valueNodes.push(this.parse(value));\n }\n return this.createMapNode(\n id,\n keyNodes,\n valueNodes,\n current.size,\n );\n }\n\n protected parseSet(\n id: number,\n current: Set<unknown>,\n ): SerovalSetNode {\n const items: SerovalNode[] = [];\n for (const item of current.keys()) {\n items.push(this.parse(item));\n }\n return createSetNode(id, current.size, items);\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 for (let i = 0; i < size; i++) {\n keyNodes.push(serializeString(entries[i][0]));\n valueNodes.push(this.parse(entries[i][1]));\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 createEventNode(id, current.type, this.parse(createEventOptions(current)));\n }\n\n protected parseCustomEvent(\n id: number,\n current: CustomEvent,\n ): SerovalCustomEventNode {\n return createCustomEventNode(id, current.type, this.parse(createCustomEventOptions(current)));\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 (\n currentFeatures & Feature.Symbol\n && Symbol.iterator in current\n ) {\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 '../context/parser/sync';\nimport type { BaseParserContextOptions } from '../context/parser';\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 './deserializer';\nimport VanillaSerializerContext from './serializer';\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 '../context/parser/async';\nimport type { CrossParserContextOptions } from './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 BaseDeserializerContext from '../context/deserializer';\nimport type { BaseDeserializerOptions } from '../context/deserializer';\nimport type { SerovalMode } from '../plugin';\n\nexport type CrossDeserializerContextOptions = BaseDeserializerOptions;\n\nexport default class CrossDeserializerContext extends BaseDeserializerContext {\n readonly mode: SerovalMode = 'cross';\n\n assignIndexedValue<T>(\n index: number,\n value: T,\n ): T {\n if (!this.refs.has(index)) {\n this.refs.set(index, value);\n }\n return value;\n }\n}\n", "import type {\n SerovalPromiseConstructorNode,\n SerovalPromiseResolveNode,\n SerovalPromiseRejectNode,\n SerovalReadableStreamCloseNode,\n SerovalReadableStreamEnqueueNode,\n SerovalReadableStreamErrorNode,\n SerovalReadableStreamConstructorNode,\n SerovalNode,\n SerovalAsyncIteratorFactoryNode,\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_ENQUEUE,\n GLOBAL_CONTEXT_STREAM_CLOSE,\n GLOBAL_CONTEXT_STREAM_ERROR,\n GLOBAL_CONTEXT_API,\n} from '../keys';\nimport type { BaseSerializerContextOptions } from '../context/serializer';\nimport BaseSerializerContext from '../context/serializer';\nimport type { SerovalMode } from '../plugin';\nimport { serializeString } from '../string';\nimport type { CrossContextOptions } from './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_ENQUEUE + '(' + this.getRefParam(node.i) + ',' + this.serialize(node.f) + ')';\n }\n\n protected serializeReadableStreamError(\n node: SerovalReadableStreamErrorNode,\n ): string {\n return GLOBAL_CONTEXT_API + '.' + GLOBAL_CONTEXT_STREAM_ERROR + '(' + this.getRefParam(node.i) + ',' + this.serialize(node.f) + ')';\n }\n\n protected serializeReadableStreamClose(\n node: SerovalReadableStreamCloseNode,\n ): string {\n return GLOBAL_CONTEXT_API + '.' + GLOBAL_CONTEXT_STREAM_CLOSE + '(' + this.getRefParam(node.i) + ')';\n }\n\n protected serializeAsyncIteratorFactory(node: SerovalAsyncIteratorFactoryNode): string {\n return this.assignIndexedValue(\n node.i,\n this.createFunction(\n ['s'],\n this.createFunction(\n ['b', 't'],\n '(b=s.tee(),s=b[0],b=b[1].getReader(),t={[' + this.serialize(node.f) + ']:' + this.createFunction([], 't') + ','\n + 'next:' + this.createFunction(\n [],\n 'b.read().then(' + this.createEffectfulFunction(\n ['d'],\n 'if(d.done)return{done:!0,value:void 0};d=d.value;if(d[0]===1)throw d[1];return{done:d[0]===2,value:d[1]}',\n ) + ')',\n ) + '})',\n ),\n ),\n );\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 return '(' + this.createFunction([params], body) + ')' + args;\n }\n}\n", "import type { BigIntTypedArrayValue, TypedArrayValue } from '../../../types';\nimport UnsupportedTypeError from '../../UnsupportedTypeError';\nimport {\n createArrayBufferNode,\n createAsyncIteratorFactoryInstanceNode,\n createDateNode,\n createIteratorFactoryInstanceNode,\n createPluginNode,\n createRegExpNode,\n createStringNode,\n} from '../../base-primitives';\nimport type { BaseSyncParserContextOptions } from './sync';\nimport BaseSyncParserContext from './sync';\nimport { BIGINT_FLAG, Feature } from '../../compat';\nimport { SerovalNodeType } from '../../constants';\nimport { createRequestOptions, createResponseOptions } from '../../utils/constructors';\nimport { FALSE_NODE, NULL_NODE, TRUE_NODE } from '../../literals';\nimport { serializeString } from '../../string';\nimport type {\n SerovalNode,\n SerovalObjectRecordKey,\n SerovalObjectRecordNode,\n SerovalPluginNode,\n SerovalPromiseConstructorNode,\n SerovalReadableStreamConstructorNode,\n SerovalRequestNode,\n SerovalResponseNode,\n} from '../../types';\nimport { createDOMExceptionNode, createURLNode, createURLSearchParamsNode } from '../../web-api';\nimport { asyncIteratorToReadableStream, iteratorToSequence } from '../../utils/iterator-to-sequence';\nimport { UNIVERSAL_SENTINEL } from '../../special-reference';\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 protected parseProperties(\n properties: Record<string | symbol, unknown>,\n ): SerovalObjectRecordNode {\n const entries = Object.entries(properties);\n const keyNodes: SerovalObjectRecordKey[] = [];\n const valueNodes: SerovalNode[] = [];\n for (\n let i = 0, len = entries.length;\n i < len;\n i++\n ) {\n keyNodes.push(serializeString(entries[i][0]));\n valueNodes.push(this.parse(entries[i][1]));\n }\n // Check special properties, symbols in this case\n if (this.features & Feature.Symbol) {\n let symbol = Symbol.iterator;\n if (symbol in properties) {\n keyNodes.push(\n this.parseWKSymbol(symbol),\n );\n valueNodes.push(\n createIteratorFactoryInstanceNode(\n this.parseIteratorFactory(),\n this.parse(\n iteratorToSequence(properties as unknown as Iterable<unknown>),\n ),\n ),\n );\n }\n symbol = Symbol.asyncIterator;\n if (symbol in properties) {\n keyNodes.push(\n this.parseWKSymbol(symbol),\n );\n valueNodes.push(\n createAsyncIteratorFactoryInstanceNode(\n this.parseAsyncIteratorFactory(),\n this.parse(\n asyncIteratorToReadableStream(\n properties as unknown as AsyncIterable<unknown>,\n this,\n ),\n ),\n ),\n );\n }\n symbol = Symbol.toStringTag;\n if (symbol in properties) {\n keyNodes.push(this.parseWKSymbol(symbol));\n valueNodes.push(createStringNode(properties[symbol] as string));\n }\n symbol = Symbol.isConcatSpreadable;\n if (symbol in properties) {\n keyNodes.push(this.parseWKSymbol(symbol));\n valueNodes.push(properties[symbol] ? TRUE_NODE : FALSE_NODE);\n }\n }\n return {\n k: keyNodes,\n v: valueNodes,\n s: keyNodes.length,\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 (\n currentFeatures & Feature.Symbol\n && (Symbol.iterator in current || Symbol.asyncIterator in current)\n ) {\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 '../context/parser/stream';\nimport BaseStreamParserContext from '../context/parser/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 '../context/parser/sync';\nimport type { SerovalMode } from '../plugin';\nimport type { CrossParserContextOptions } from './parser';\n\nexport type CrossSyncParserContextOptions = CrossParserContextOptions\n\nexport default class CrossSyncParserContext extends BaseSyncParserContext {\n readonly mode: SerovalMode = 'cross';\n}\n", "import type { SerovalNode } from '../types';\nimport type { CrossAsyncParserContextOptions } from './async';\nimport AsyncCrossParserContext from './async';\nimport type { CrossDeserializerContextOptions } from './deserializer';\nimport CrossDeserializerContext from './deserializer';\nimport type { CrossContextOptions, CrossParserContextOptions } from './parser';\nimport CrossSerializerContext from './serializer';\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\nexport type ToCrossJSONOptions = CrossParserContextOptions;\n\nexport function toCrossJSON<T>(\n source: T,\n options: CrossParserContextOptions = {},\n): SerovalNode {\n const ctx = new SyncCrossParserContext({\n plugins: options.plugins,\n disabledFeatures: options.disabledFeatures,\n refs: options.refs,\n });\n return ctx.parse(source);\n}\n\nexport type ToCrossJSONAsyncOptions = CrossParserContextOptions;\n\nexport async function toCrossJSONAsync<T>(\n source: T,\n options: CrossParserContextOptions = {},\n): Promise<SerovalNode> {\n const ctx = new AsyncCrossParserContext({\n plugins: options.plugins,\n disabledFeatures: options.disabledFeatures,\n refs: options.refs,\n });\n return ctx.parse(source);\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 plugins: options.plugins,\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\nexport type ToCrossJSONStreamOptions = CrossStreamParserContextOptions;\n\nexport function toCrossJSONStream<T>(\n source: T,\n options: ToCrossJSONStreamOptions,\n): () => void {\n const ctx = new StreamCrossParserContext({\n plugins: options.plugins,\n refs: options.refs,\n disabledFeatures: options.disabledFeatures,\n onParse: options.onParse,\n onError: options.onError,\n onDone: options.onDone,\n });\n\n ctx.start(source);\n\n return () => {\n ctx.destroy();\n };\n}\n\nexport type FromCrossJSONOptions = CrossDeserializerContextOptions;\n\nexport function fromCrossJSON<T>(\n source: SerovalNode,\n options: FromCrossJSONOptions,\n): T {\n const ctx = new CrossDeserializerContext({\n plugins: options.plugins,\n refs: options.refs,\n });\n return ctx.deserialize(source) as T;\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 './context/parser/async';\nimport type BaseStreamParserContext from './context/parser/stream';\nimport type BaseSyncParserContext from './context/parser/sync';\nimport type BaseSerializerContext from './context/serializer';\nimport type BaseDeserializerContext from './context/deserializer';\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: BaseDeserializerContext,\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"],
5
+ "mappings": "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",
6
6
  "names": ["Feature"]
7
7
  }