seroval 0.4.0-alpha.12 → 0.4.0-alpha.13

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.
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../../../src/index.ts", "../../../src/compat.ts", "../../../src/get-identifier.ts", "../../../src/context.ts", "../../../src/assert.ts", "../../../src/quote.ts", "../../../src/tree/primitives.ts", "../../../src/tree/shared.ts", "../../../src/tree/async.ts", "../../../src/tree/serialize.ts", "../../../src/tree/sync.ts"],
4
- "sourcesContent": ["/* eslint-disable no-await-in-loop */\nimport { Feature } from './compat';\nimport {\n SerializationContext,\n getRefParam,\n Options,\n createParserContext,\n createSerializationContext,\n} from './context';\nimport parseAsync from './tree/async';\nimport serializeTree, { resolvePatches } from './tree/serialize';\nimport parseSync from './tree/sync';\nimport { SerovalNode } from './tree/types';\nimport {\n AsyncServerValue,\n PrimitiveValue,\n ServerValue,\n CommonServerValue,\n SemiPrimitiveValue,\n ErrorValue,\n} from './types';\n\nexport {\n AsyncServerValue,\n ServerValue,\n PrimitiveValue,\n CommonServerValue,\n SemiPrimitiveValue,\n ErrorValue,\n};\n\nfunction finalize(\n ctx: SerializationContext,\n rootID: number,\n isObject: boolean,\n result: string,\n) {\n // Shared references detected\n if (ctx.vars.length) {\n const patches = resolvePatches(ctx);\n let body = result;\n if (patches) {\n // Get (or create) a ref from the source\n const index = getRefParam(ctx, rootID);\n if (result.startsWith(`${index}=`)) {\n body = `${result},${patches}${index}`;\n } else {\n body = `${index}=${result},${patches}${index}`;\n }\n }\n let params = ctx.vars.length > 1\n ? ctx.vars.join(',')\n : ctx.vars[0];\n // Source is probably already assigned\n if (ctx.features & Feature.ArrowFunction) {\n params = ctx.vars.length > 1 || ctx.vars.length === 0\n ? `(${params})`\n : params;\n return `(${params}=>(${body}))()`;\n }\n return `(function(${params}){return ${body}})()`;\n }\n if (isObject) {\n return `(${result})`;\n }\n return result;\n}\n\nexport function serialize<T extends ServerValue>(\n source: T,\n options?: Partial<Options>,\n) {\n const ctx = createParserContext(options);\n const [tree, rootID, isObject] = parseSync(ctx, source);\n const serial = createSerializationContext(ctx);\n const result = serializeTree(serial, tree);\n return finalize(serial, rootID, isObject, result);\n}\n\nexport async function serializeAsync<T extends AsyncServerValue>(\n source: T,\n options?: Partial<Options>,\n) {\n const ctx = createParserContext(options);\n const [tree, rootID, isObject] = await parseAsync(ctx, source);\n const serial = createSerializationContext(ctx);\n const result = serializeTree(serial, tree);\n return finalize(serial, rootID, isObject, result);\n}\n\nexport function deserialize<T extends AsyncServerValue>(source: string): T {\n // eslint-disable-next-line no-eval\n return (0, eval)(source) as T;\n}\n\ntype SerovalJSON = [\n tree: SerovalNode,\n root: number,\n isObject: boolean,\n feature: number,\n markedRefs: Record<number, number>,\n];\n\nexport function toJSON<T extends ServerValue>(\n source: T,\n options?: Partial<Options>,\n) {\n const ctx = createParserContext(options);\n const [tree, root, isObject] = parseSync(ctx, source);\n return JSON.stringify([\n tree,\n root,\n isObject,\n ctx.features,\n ctx.markedRefs,\n ]);\n}\n\nexport async function toJSONAsync<T extends AsyncServerValue>(\n source: T,\n options?: Partial<Options>,\n) {\n const ctx = createParserContext(options);\n const [tree, root, isObject] = await parseAsync(ctx, source);\n return JSON.stringify([\n tree,\n root,\n isObject,\n ctx.features,\n ctx.markedRefs,\n ]);\n}\n\nexport function compileJSON(source: string): string {\n const parsed = JSON.parse(source) as SerovalJSON;\n const serial = createSerializationContext({\n features: parsed[3],\n markedRefs: parsed[4],\n });\n const result = serializeTree(serial, parsed[0]);\n return finalize(serial, parsed[1], parsed[2], result);\n}\n\nexport function fromJSON<T extends AsyncServerValue>(source: string): T {\n return deserialize<T>(compileJSON(source));\n}\n\nexport default serialize;\n", "/* eslint-disable guard-for-in */\n/**\n * References\n * - https://kangax.github.io/compat-table/es6/\n * - MDN\n * - ESBuild\n */\nexport type Version = [major: number, minor: number, patch: number];\n\nfunction compareVersion(left: Version, right: Version) {\n let diff = left[0] - right[0];\n if (diff === 0) {\n diff = left[1] - right[1];\n }\n if (diff === 0) {\n diff = left[2] - right[2];\n }\n return diff;\n}\n\nexport interface PlatformVersion {\n es: Version;\n // desktop\n chrome?: Version;\n edge?: Version;\n safari?: Version;\n firefox?: Version;\n opera?: Version;\n // mobile\n ios?: Version;\n samsung?: Version;\n // js runtimes\n deno?: Version;\n node?: Version;\n}\n\nexport type Platform = keyof PlatformVersion;\n\nexport const enum Feature {\n AggregateError = 0x01,\n ArrayPrototypeValues = 0x02,\n ArrowFunction = 0x04,\n BigInt = 0x08,\n Map = 0x10,\n MethodShorthand = 0x20,\n ObjectAssign = 0x40,\n Promise = 0x80,\n Set = 0x100,\n SymbolIterator = 0x200,\n TypedArray = 0x400,\n BigIntTypedArray = 0x800,\n}\n\ntype VersionTable = {\n [key in Feature]: PlatformVersion;\n}\n\nconst VERSION_TABLE: VersionTable = {\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/AggregateError#browser_compatibility\n [Feature.AggregateError]: {\n es: [2021, 0, 0],\n chrome: [85, 0, 0],\n edge: [85, 0, 0],\n firefox: [79, 0, 0],\n opera: [71, 0, 0],\n safari: [14, 0, 0],\n ios: [14, 0, 0],\n samsung: [14, 0, 0],\n deno: [1, 2, 0],\n node: [15, 0, 0],\n },\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/values#browser_compatibility\n [Feature.ArrayPrototypeValues]: {\n es: [6, 0, 0],\n chrome: [66, 0, 0],\n edge: [14, 0, 0],\n firefox: [60, 0, 0],\n opera: [53, 0, 0],\n safari: [9, 0, 0],\n ios: [9, 0, 0],\n samsung: [9, 0, 0],\n deno: [1, 0, 0],\n node: [10, 9, 0],\n },\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions#browser_compatibility\n [Feature.ArrowFunction]: {\n es: [6, 0, 0],\n chrome: [45, 0, 0],\n edge: [12, 0, 0],\n firefox: [24, 0, 0],\n opera: [32, 0, 0],\n safari: [10, 0, 0],\n ios: [10, 0, 0],\n samsung: [5, 0, 0],\n deno: [1, 0, 0],\n node: [4, 0, 0],\n },\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/BigInt#browser_compatibility\n [Feature.BigInt]: {\n es: [2020, 0, 0],\n chrome: [67, 0, 0],\n edge: [79, 0, 0],\n firefox: [68, 0, 0],\n opera: [54, 0, 0],\n safari: [14, 0, 0],\n ios: [14, 0, 0],\n samsung: [9, 0, 0],\n deno: [1, 0, 0],\n node: [10, 4, 0],\n },\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map#browser_compatibility\n [Feature.Map]: {\n es: [6, 0, 0],\n chrome: [38, 0, 0],\n edge: [12, 0, 0],\n firefox: [13, 0, 0],\n opera: [25, 0, 0],\n safari: [8, 0, 0],\n ios: [8, 0, 0],\n samsung: [3, 0, 0],\n deno: [1, 0, 0],\n node: [0, 12, 0],\n },\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Method_definitions#browser_compatibility\n [Feature.MethodShorthand]: {\n es: [6, 0, 0],\n chrome: [39, 0, 0],\n edge: [12, 0, 0],\n firefox: [34, 0, 0],\n opera: [26, 0, 0],\n safari: [9, 0, 0],\n ios: [9, 0, 0],\n samsung: [4, 0, 0],\n deno: [1, 0, 0],\n node: [4, 0, 0],\n },\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign#browser_compatibility\n [Feature.ObjectAssign]: {\n es: [6, 0, 0],\n chrome: [45, 0, 0],\n edge: [12, 0, 0],\n firefox: [34, 0, 0],\n opera: [32, 0, 0],\n safari: [9, 0, 0],\n ios: [9, 0, 0],\n samsung: [5, 0, 0],\n deno: [1, 0, 0],\n node: [4, 0, 0],\n },\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise#browser_compatibility\n [Feature.Promise]: {\n es: [6, 0, 0],\n chrome: [32, 0, 0],\n edge: [12, 0, 0],\n firefox: [29, 0, 0],\n opera: [19, 0, 0],\n safari: [8, 0, 0],\n ios: [8, 0, 0],\n samsung: [2, 0, 0],\n deno: [1, 0, 0],\n node: [0, 12, 0],\n },\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set#browser_compatibility\n [Feature.Set]: {\n es: [6, 0, 0],\n chrome: [38, 0, 0],\n edge: [12, 0, 0],\n firefox: [13, 0, 0],\n opera: [25, 0, 0],\n safari: [8, 0, 0],\n ios: [8, 0, 0],\n samsung: [3, 0, 0],\n deno: [1, 0, 0],\n node: [0, 12, 0],\n },\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/iterator#browser_compatibility\n [Feature.SymbolIterator]: {\n es: [6, 0, 0],\n chrome: [43, 0, 0],\n edge: [12, 0, 0],\n firefox: [36, 0, 0],\n opera: [30, 0, 0],\n safari: [10, 0, 0],\n ios: [10, 0, 0],\n samsung: [4, 0, 0],\n deno: [1, 0, 0],\n node: [0, 12, 0],\n },\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray#browser_compatibility\n [Feature.TypedArray]: {\n es: [6, 0, 0],\n chrome: [7, 0, 0],\n edge: [12, 0, 0],\n firefox: [4, 0, 0],\n opera: [11, 6, 0],\n safari: [5, 1, 0],\n ios: [4, 2, 0],\n samsung: [1, 0, 0],\n deno: [1, 0, 0],\n node: [0, 10, 0],\n },\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/BigInt64Array#browser_compatibility\n [Feature.BigIntTypedArray]: {\n es: [2020, 0, 0],\n chrome: [67, 0, 0],\n edge: [79, 0, 0],\n firefox: [68, 0, 0],\n opera: [54, 6, 0],\n safari: [15, 1, 0],\n ios: [15, 2, 0],\n samsung: [9, 0, 0],\n deno: [1, 0, 0],\n node: [10, 4, 0],\n },\n};\n\nconst platforms: Platform[] = [\n 'chrome',\n 'deno',\n 'edge',\n 'es',\n 'firefox',\n 'ios',\n 'node',\n 'opera',\n 'safari',\n 'samsung',\n];\n\nexport type Target = [platform: Platform, version: Version];\n\nfunction getPlatform(target: string): Platform {\n for (let i = 0, len = platforms.length; i < len; i++) {\n const platform = target.substring(0, platforms[i].length);\n if (platform === platforms[i]) {\n return platform;\n }\n }\n throw new Error(`Invalid target \"${target}\"`);\n}\n\nfunction parseTarget(target: string): Target {\n const platform = getPlatform(target);\n const version = target.substring(platform.length);\n const [major, minor = '0', patch = '0'] = version.split('.');\n return [platform, [Number(major), Number(minor), Number(patch)]];\n}\n\nfunction getTargetVersions(targets: string | string[]): Target[] {\n if (Array.isArray(targets)) {\n const versions: Target[] = [];\n for (let i = 0, len = targets.length; i < len; i++) {\n versions.push(parseTarget(targets[i]));\n }\n return versions;\n }\n return [parseTarget(targets)];\n}\n\nexport function parseTargets(targets: string | string[]): number {\n const parsed = getTargetVersions(targets);\n let flags = 0;\n\n for (const key of Object.keys(VERSION_TABLE)) {\n const base = VERSION_TABLE[key as unknown as Feature];\n let flag = true;\n for (const [platform, version] of parsed) {\n const baseVersion = base[platform];\n flag = flag && !!baseVersion && (compareVersion(baseVersion, version) <= 0);\n }\n if (flag) {\n flags |= Number(key);\n }\n }\n\n return flags;\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) {\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 { parseTargets } from './compat';\nimport getIdentifier from './get-identifier';\n\ninterface IndexAssignment {\n type: 'index';\n source: string;\n value: string;\n}\n\ninterface MapAssignment {\n type: 'map';\n source: string;\n key: string;\n value: string;\n}\n\ninterface SetAssignment {\n type: 'set';\n source: string;\n value: string;\n}\n\n// Array of assignments to be done (used for recursion)\nexport type Assignment =\n | IndexAssignment\n | MapAssignment\n | SetAssignment;\n\nexport interface ParserContext {\n refs: Map<unknown, number>;\n markedRefs: Record<number, number>;\n features: number;\n}\n\nexport interface SerializationContext {\n stack: number[];\n // Map tree refs to actual refs\n validRefs: number[];\n refSize: number;\n // Refs that are...referenced\n markedRefs: Record<number, number>;\n // Variables\n vars: string[];\n // Array of assignments to be done (used for recursion)\n assignments: Assignment[];\n // Supported features\n features: number;\n}\n\nexport interface Options {\n target: string | string[];\n}\n\nconst DEFAULT_OPTIONS: Options = {\n target: 'es2023',\n};\n\nexport function createParserContext(options: Partial<Options> = {}): ParserContext {\n // eslint-disable-next-line prefer-object-spread\n const result = Object.assign({}, DEFAULT_OPTIONS, options || {});\n return {\n markedRefs: {},\n refs: new Map(),\n features: parseTargets(result.target),\n };\n}\n\nexport interface SerializationOptions {\n markedRefs: Record<number, number>;\n features: number;\n}\n\nexport function createSerializationContext(options: SerializationOptions): SerializationContext {\n return {\n stack: [],\n vars: [],\n assignments: [],\n validRefs: [],\n refSize: 0,\n features: options.features,\n markedRefs: options.markedRefs,\n };\n}\n\n/**\n * Increments the number of references the referenced value has\n */\nexport function markRef(ctx: ParserContext | SerializationContext, current: number) {\n ctx.markedRefs[current] = 1;\n}\n\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 */\nfunction createValidRef(\n ctx: SerializationContext,\n index: number,\n) {\n const current = ctx.validRefs[index];\n if (current == null) {\n const value = ctx.refSize++;\n ctx.validRefs[index] = value;\n return value;\n }\n return 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 */\nexport function getRefParam(ctx: SerializationContext, index: number) {\n const actualIndex = createValidRef(ctx, index);\n if (ctx.vars[actualIndex]) {\n return ctx.vars[actualIndex];\n }\n const result = getIdentifier(actualIndex);\n ctx.vars[actualIndex] = result;\n return result;\n}\n\n/**\n * Creates a reference ID from the given values\n */\nexport function createRef(\n ctx: ParserContext,\n current: unknown,\n mark: boolean,\n): number {\n // Check if reference number already exists\n const ref = ctx.refs.get(current);\n if (ref != null) {\n // Exists, means this value is currently\n // being referenced\n // Mark reference\n if (mark) {\n markRef(ctx, ref);\n }\n return ref;\n }\n // Create a new reference ID\n const id = ctx.refs.size;\n ctx.refs.set(current, id);\n return id;\n}\n", "export default function assert(cond: unknown, error: string): asserts cond {\n if (!cond) {\n throw new Error(error);\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 default function quote(str: string) {\n let result = '';\n let lastPos = 0;\n for (let i = 0, len = str.length; i < len; i++) {\n let replacement;\n switch (str[i]) {\n case '\"':\n replacement = '\\\\\"';\n break;\n case '\\\\':\n replacement = '\\\\\\\\';\n break;\n case '<':\n replacement = '\\\\x3C';\n break;\n case '\\n':\n replacement = '\\\\n';\n break;\n case '\\r':\n replacement = '\\\\r';\n break;\n case '\\u2028':\n replacement = '\\\\u2028';\n break;\n case '\\u2029':\n replacement = '\\\\u2029';\n break;\n default:\n continue;\n }\n result += str.slice(lastPos, i) + replacement;\n lastPos = i + 1;\n }\n if (lastPos === 0) {\n result = str;\n } else {\n result += str.slice(lastPos);\n }\n return `\"${result}\"`;\n}\n", "import assert from '../assert';\nimport { Feature } from '../compat';\nimport { ParserContext } from '../context';\nimport { BigIntTypedArrayValue, TypedArrayValue } from '../types';\nimport {\n SerovalBigIntNode,\n SerovalBigIntTypedArrayNode,\n SerovalDateNode,\n SerovalNodeType,\n SerovalPrimitiveNode,\n SerovalReferenceNode,\n SerovalRegExpNode,\n SerovalTypedArrayNode,\n} from './types';\n\nexport function createPrimitiveNode(\n value: string | number | null,\n): SerovalPrimitiveNode {\n return {\n t: SerovalNodeType.Primitive,\n i: undefined,\n s: value,\n l: undefined,\n m: undefined,\n c: undefined,\n d: undefined,\n a: undefined,\n n: undefined,\n };\n}\n\nexport const TRUE_NODE = createPrimitiveNode('!0');\nexport const FALSE_NODE = createPrimitiveNode('!1');\nexport const UNDEFINED_NODE = createPrimitiveNode('void 0');\nexport const NULL_NODE = createPrimitiveNode(null);\nexport const NEG_ZERO_NODE = createPrimitiveNode('-0');\nexport const INFINITY_NODE = createPrimitiveNode('1/0');\nexport const NEG_INFINITY_NODE = createPrimitiveNode('-1/0');\n\nexport function createBigIntNode(\n ctx: ParserContext,\n current: bigint,\n): SerovalBigIntNode {\n assert(ctx.features & Feature.BigInt, 'Unsupported type \"BigInt\"');\n return {\n t: SerovalNodeType.BigInt,\n i: undefined,\n a: undefined,\n s: `${current}n`,\n l: undefined,\n m: undefined,\n c: undefined,\n d: undefined,\n n: undefined,\n };\n}\n\nexport function createReferenceNode(id: number): SerovalReferenceNode {\n return {\n t: SerovalNodeType.Reference,\n i: id,\n a: undefined,\n s: undefined,\n l: undefined,\n m: undefined,\n c: undefined,\n d: undefined,\n n: undefined,\n };\n}\n\nexport function createDateNode(id: number, current: Date): SerovalDateNode {\n return {\n t: SerovalNodeType.Date,\n i: id,\n a: undefined,\n s: current.toISOString(),\n l: undefined,\n m: undefined,\n c: undefined,\n d: undefined,\n n: undefined,\n };\n}\n\nexport function createRegExpNode(id: number, current: RegExp): SerovalRegExpNode {\n return {\n t: SerovalNodeType.RegExp,\n i: id,\n a: undefined,\n s: String(current),\n l: undefined,\n m: undefined,\n c: undefined,\n d: undefined,\n n: undefined,\n };\n}\n\nexport function createTypedArrayNode(\n ctx: ParserContext,\n id: number,\n current: TypedArrayValue,\n): SerovalTypedArrayNode {\n const constructor = current.constructor.name;\n assert(ctx.features & Feature.TypedArray, `Unsupported value type \"${constructor}\"`);\n return {\n t: SerovalNodeType.TypedArray,\n i: id,\n a: undefined,\n s: current.toString(),\n l: current.byteOffset,\n m: undefined,\n c: constructor,\n d: undefined,\n n: undefined,\n };\n}\n\nexport function createBigIntTypedArrayNode(\n ctx: ParserContext,\n id: number,\n current: BigIntTypedArrayValue,\n): SerovalBigIntTypedArrayNode {\n const constructor = current.constructor.name;\n assert(\n ctx.features & (Feature.BigIntTypedArray),\n `Unsupported value type \"${constructor}\"`,\n );\n let result = '';\n const cap = current.length - 1;\n for (let i = 0; i < cap; i++) {\n result += `${current[i]}n,`;\n }\n result += `\"${current[cap]}\"`;\n return {\n t: SerovalNodeType.BigIntTypedArray,\n i: id,\n a: undefined,\n s: result,\n l: (current as BigInt64Array).byteOffset,\n m: undefined,\n c: constructor,\n d: undefined,\n n: undefined,\n };\n}\n", "import { SerializationContext } from '../context';\nimport {\n AsyncServerValue,\n ErrorValue,\n} from '../types';\nimport {\n SerovalNode,\n SerovalReferenceNode,\n SerovalNodeType,\n} from './types';\n\nexport function getErrorConstructor(error: ErrorValue) {\n if (error instanceof EvalError) {\n return 'EvalError';\n }\n if (error instanceof RangeError) {\n return 'RangeError';\n }\n if (error instanceof ReferenceError) {\n return 'ReferenceError';\n }\n if (error instanceof SyntaxError) {\n return 'SyntaxError';\n }\n if (error instanceof TypeError) {\n return 'TypeError';\n }\n if (error instanceof URIError) {\n return 'URIError';\n }\n return 'Error';\n}\n\nexport function getErrorOptions(\n error: Error,\n) {\n let options: Record<string, any> | undefined;\n const constructor = 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 (const name of names) {\n if (name !== 'name' && name !== 'message') {\n options = options || {};\n options[name] = error[name as keyof Error];\n }\n }\n return options;\n}\n\nexport function getIterableOptions(obj: Iterable<any>) {\n const names = Object.getOwnPropertyNames(obj);\n if (names.length) {\n const options: Record<string, unknown> = {};\n for (const name of names) {\n options[name] = obj[name as unknown as keyof typeof obj];\n }\n return options;\n }\n return undefined;\n}\n\nexport function isReferenceInStack(\n ctx: SerializationContext,\n node: SerovalNode,\n): node is SerovalReferenceNode {\n return node.t === SerovalNodeType.Reference && ctx.stack.includes(node.i);\n}\n\nexport function isIterable(\n value: unknown,\n): value is Iterable<AsyncServerValue> {\n if (!value || typeof value !== 'object') {\n return false;\n }\n if (Array.isArray(value)) {\n return false;\n }\n switch (value.constructor) {\n case Map:\n case Set:\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 case BigInt64Array:\n case BigUint64Array:\n return false;\n default:\n break;\n }\n return Symbol.iterator in value;\n}\n", "/* eslint-disable no-await-in-loop */\n/* eslint-disable @typescript-eslint/no-use-before-define */\nimport assert from '../assert';\nimport { Feature } from '../compat';\nimport { createRef, ParserContext } from '../context';\nimport quote from '../quote';\nimport {\n AsyncServerValue,\n BigIntTypedArrayValue,\n TypedArrayValue,\n} from '../types';\nimport {\n createBigIntNode,\n createBigIntTypedArrayNode,\n createDateNode,\n createPrimitiveNode,\n createReferenceNode,\n createRegExpNode,\n createTypedArrayNode,\n FALSE_NODE,\n NEG_ZERO_NODE,\n NULL_NODE,\n TRUE_NODE,\n UNDEFINED_NODE,\n} from './primitives';\nimport {\n getErrorConstructor,\n getErrorOptions,\n getIterableOptions,\n isIterable,\n} from './shared';\nimport {\n SerovalAggregateErrorNode,\n SerovalArrayNode,\n SerovalErrorNode,\n SerovalIterableNode,\n SerovalMapNode,\n SerovalNode,\n SerovalNodeType,\n SerovalNullConstructorNode,\n SerovalObjectNode,\n SerovalObjectRecordNode,\n SerovalPromiseNode,\n SerovalSetNode,\n} from './types';\n\ntype ObjectLikeNode =\n | SerovalObjectNode\n | SerovalNullConstructorNode\n | SerovalIterableNode\n | SerovalPromiseNode;\n\ntype ObjectLikeValue =\n | Record<string, AsyncServerValue>\n | Iterable<AsyncServerValue>\n | PromiseLike<AsyncServerValue>;\n\nclass AsyncParser {\n ctx: ParserContext;\n\n constructor(ctx: ParserContext) {\n this.ctx = ctx;\n }\n\n async generateNodeList(\n current: AsyncServerValue[],\n ) {\n const size = current.length;\n const nodes = new Array<SerovalNode>(size);\n const deferred = new Array<AsyncServerValue>(size);\n let item: AsyncServerValue;\n for (let i = 0; i < size; i++) {\n if (i in current) {\n item = current[i];\n if (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 async generateArrayNode(\n id: number,\n current: AsyncServerValue[],\n ): Promise<SerovalArrayNode> {\n return {\n t: SerovalNodeType.Array,\n i: id,\n a: await this.generateNodeList(current),\n s: undefined,\n l: undefined,\n m: undefined,\n c: undefined,\n d: undefined,\n n: undefined,\n };\n }\n\n async generateMapNode(\n id: number,\n current: Map<AsyncServerValue, AsyncServerValue>,\n ): Promise<SerovalMapNode> {\n assert(this.ctx.features & Feature.Map, 'Unsupported type \"Map\"');\n const len = current.size;\n const keyNodes = new Array<SerovalNode>(len);\n const valueNodes = new Array<SerovalNode>(len);\n const deferredKey = new Array<AsyncServerValue>(len);\n const deferredValue = new Array<AsyncServerValue>(len);\n let deferredSize = 0;\n let nodeSize = 0;\n for (const [key, value] of current.entries()) {\n // Either key or value might be an iterable\n if (isIterable(key) || isIterable(value)) {\n deferredKey[deferredSize] = key;\n deferredValue[deferredSize] = value;\n deferredSize++;\n } else {\n keyNodes[nodeSize] = await this.parse(key);\n valueNodes[nodeSize] = await this.parse(value);\n nodeSize++;\n }\n }\n for (let i = 0; i < deferredSize; i++) {\n keyNodes[nodeSize + i] = await this.parse(deferredKey[i]);\n valueNodes[nodeSize + i] = await this.parse(deferredValue[i]);\n }\n return {\n t: SerovalNodeType.Map,\n i: id,\n a: undefined,\n s: undefined,\n l: undefined,\n m: undefined,\n c: undefined,\n d: { k: keyNodes, v: valueNodes, s: len },\n n: undefined,\n };\n }\n\n async generateSetNode(\n id: number,\n current: Set<AsyncServerValue>,\n ): Promise<SerovalSetNode> {\n assert(this.ctx.features & Feature.Set, 'Unsupported type \"Set\"');\n const len = current.size;\n const nodes = new Array<SerovalNode>(len);\n const deferred = new Array<AsyncServerValue>(len);\n let deferredSize = 0;\n let nodeSize = 0;\n for (const item of current.keys()) {\n // Iterables are lazy, so the evaluation must be deferred\n if (isIterable(item)) {\n deferred[deferredSize++] = item;\n } else {\n nodes[nodeSize++] = await this.parse(item);\n }\n }\n // Parse deferred items\n for (let i = 0; i < deferredSize; i++) {\n nodes[nodeSize + i] = await this.parse(deferred[i]);\n }\n return {\n t: SerovalNodeType.Set,\n i: id,\n a: nodes,\n s: undefined,\n l: undefined,\n m: undefined,\n c: undefined,\n d: undefined,\n n: undefined,\n };\n }\n\n async generateProperties(\n properties: Record<string, AsyncServerValue>,\n ): Promise<SerovalObjectRecordNode> {\n const keys = Object.keys(properties);\n const size = keys.length;\n const keyNodes = new Array<string>(size);\n const valueNodes = new Array<SerovalNode>(size);\n const deferredKeys = new Array<string>(size);\n const deferredValues = new Array<AsyncServerValue>(size);\n let deferredSize = 0;\n let nodesSize = 0;\n let item: AsyncServerValue;\n for (const key of keys) {\n item = properties[key];\n if (isIterable(item)) {\n deferredKeys[deferredSize] = key;\n deferredValues[deferredSize] = item;\n deferredSize++;\n } else {\n keyNodes[nodesSize] = key;\n valueNodes[nodesSize] = await this.parse(item);\n nodesSize++;\n }\n }\n for (let i = 0; i < deferredSize; i++) {\n keyNodes[nodesSize + i] = deferredKeys[i];\n valueNodes[nodesSize + i] = await this.parse(deferredValues[i]);\n }\n return {\n k: keyNodes,\n v: valueNodes,\n s: size,\n };\n }\n\n async generateIterableNode(\n id: number,\n current: Iterable<AsyncServerValue>,\n ): Promise<SerovalIterableNode> {\n assert(this.ctx.features & Feature.SymbolIterator, 'Unsupported type \"Iterable\"');\n const options = getIterableOptions(current);\n return {\n t: SerovalNodeType.Iterable,\n i: id,\n s: undefined,\n l: undefined,\n m: undefined,\n c: undefined,\n // Parse options first before the items\n d: options\n ? await this.generateProperties(options as Record<string, AsyncServerValue>)\n : undefined,\n a: await this.generateNodeList(Array.from(current)),\n n: undefined,\n };\n }\n\n async generatePromiseNode(\n id: number,\n current: PromiseLike<AsyncServerValue>,\n ): Promise<SerovalPromiseNode> {\n assert(this.ctx.features & Feature.Promise, 'Unsupported type \"Promise\"');\n return current.then(async (value) => ({\n t: SerovalNodeType.Promise,\n i: id,\n s: undefined,\n l: undefined,\n m: undefined,\n c: undefined,\n // Parse options first before the items\n d: undefined,\n a: undefined,\n n: await this.parse(value),\n }));\n }\n\n async generateObjectNode(\n id: number,\n current: ObjectLikeValue,\n empty: boolean,\n ): Promise<ObjectLikeNode> {\n if (Symbol.iterator in current) {\n return this.generateIterableNode(id, current);\n }\n if ('then' in current && typeof current.then === 'function') {\n return this.generatePromiseNode(id, current as PromiseLike<AsyncServerValue>);\n }\n return {\n t: empty ? SerovalNodeType.NullConstructor : SerovalNodeType.Object,\n i: id,\n s: undefined,\n l: undefined,\n m: undefined,\n c: undefined,\n d: await this.generateProperties(current as Record<string, AsyncServerValue>),\n a: undefined,\n n: undefined,\n };\n }\n\n async generateAggregateErrorNode(\n id: number,\n current: AggregateError,\n ): Promise<SerovalAggregateErrorNode> {\n const options = getErrorOptions(current);\n const optionsNode = options\n ? await this.generateProperties(options)\n : undefined;\n return {\n t: SerovalNodeType.AggregateError,\n i: id,\n a: undefined,\n s: undefined,\n l: undefined,\n m: current.message,\n c: undefined,\n d: optionsNode,\n n: await this.parse(current.errors),\n };\n }\n\n async generateErrorNode(\n id: number,\n current: Error,\n ): Promise<SerovalErrorNode> {\n const options = getErrorOptions(current);\n const optionsNode = options\n ? await this.generateProperties(options)\n : undefined;\n return {\n t: SerovalNodeType.Error,\n i: id,\n a: undefined,\n s: undefined,\n l: undefined,\n m: current.message,\n c: getErrorConstructor(current),\n d: optionsNode,\n n: undefined,\n };\n }\n\n async parse(current: AsyncServerValue): Promise<SerovalNode> {\n switch (typeof current) {\n case 'boolean':\n return current ? TRUE_NODE : FALSE_NODE;\n case 'undefined':\n return UNDEFINED_NODE;\n case 'string':\n return createPrimitiveNode(quote(current));\n case 'number':\n if (Object.is(current, -0)) {\n return NEG_ZERO_NODE;\n }\n if (Object.is(current, Infinity)) {\n return createPrimitiveNode('1/0');\n }\n if (Object.is(current, -Infinity)) {\n return createPrimitiveNode('-1/0');\n }\n return createPrimitiveNode(current);\n case 'bigint':\n return createBigIntNode(this.ctx, current);\n case 'object': {\n if (!current) {\n return NULL_NODE;\n }\n // Non-primitive values needs a reference ID\n // mostly because the values themselves are stateful\n const id = createRef(this.ctx, current, true);\n if (this.ctx.markedRefs[id]) {\n return createReferenceNode(id);\n }\n if (Array.isArray(current)) {\n return this.generateArrayNode(id, current);\n }\n switch (current.constructor) {\n case Date:\n return createDateNode(id, current as Date);\n case RegExp:\n return createRegExpNode(id, current as RegExp);\n case Promise:\n return this.generatePromiseNode(id, current as Promise<AsyncServerValue>);\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 createTypedArrayNode(this.ctx, id, current as TypedArrayValue);\n case BigInt64Array:\n case BigUint64Array:\n return createBigIntTypedArrayNode(this.ctx, id, current as BigIntTypedArrayValue);\n case Map:\n return this.generateMapNode(id, current as Map<AsyncServerValue, AsyncServerValue>);\n case Set:\n return this.generateSetNode(id, current as Set<AsyncServerValue>);\n case Object:\n return this.generateObjectNode(id, current as Record<string, AsyncServerValue>, false);\n case undefined:\n return this.generateObjectNode(id, current as Record<string, AsyncServerValue>, true);\n case AggregateError:\n if (this.ctx.features & Feature.AggregateError) {\n return this.generateAggregateErrorNode(id, current as AggregateError);\n }\n return this.generateErrorNode(id, current as AggregateError);\n case Error:\n case EvalError:\n case RangeError:\n case ReferenceError:\n case SyntaxError:\n case TypeError:\n case URIError:\n return this.generateErrorNode(id, current as Error);\n default:\n break;\n }\n if (current instanceof AggregateError && this.ctx.features & Feature.AggregateError) {\n return this.generateAggregateErrorNode(id, current);\n }\n if (current instanceof Error) {\n return this.generateErrorNode(id, current);\n }\n if (current instanceof Promise) {\n return this.generatePromiseNode(id, current);\n }\n // Generator functions don't have a global constructor\n if (Symbol.iterator in current) {\n return this.generateIterableNode(id, current);\n }\n // For Promise-like objects\n if ('then' in current && typeof current.then === 'function') {\n return this.generatePromiseNode(id, current as PromiseLike<AsyncServerValue>);\n }\n throw new Error('Unsupported type');\n }\n default:\n throw new Error('Unsupported type');\n }\n }\n}\n\nexport default async function parseAsync(\n ctx: ParserContext,\n current: AsyncServerValue,\n) {\n const result = await new AsyncParser(ctx).parse(current);\n const isObject = result.t === SerovalNodeType.Object\n || result.t === SerovalNodeType.Iterable;\n return [result, createRef(ctx, current, false), isObject] as const;\n}\n", "/* eslint-disable @typescript-eslint/no-use-before-define */\nimport { Feature } from '../compat';\nimport {\n SerializationContext,\n Assignment,\n getRefParam,\n markRef,\n} from '../context';\nimport quote from '../quote';\nimport { isReferenceInStack } from './shared';\nimport {\n SerovalAggregateErrorNode,\n SerovalArrayNode,\n SerovalBigIntTypedArrayNode,\n SerovalErrorNode,\n SerovalIterableNode,\n SerovalMapNode,\n SerovalNode,\n SerovalNodeType,\n SerovalNullConstructorNode,\n SerovalObjectRecordNode,\n SerovalPromiseNode,\n SerovalSetNode,\n SerovalTypedArrayNode,\n} from './types';\n\nfunction getAssignmentExpression(assignment: Assignment): string {\n switch (assignment.type) {\n case 'index':\n return `${assignment.source}=${assignment.value}`;\n case 'map':\n return `${assignment.source}.set(${assignment.key},${assignment.value})`;\n case 'set':\n return `${assignment.source}.add(${assignment.value})`;\n default:\n return '';\n }\n}\n\nfunction mergeAssignments(assignments: Assignment[]) {\n const newAssignments = [];\n let current = assignments[0];\n let prev = current;\n for (let i = 1, len = assignments.length; i < len; i++) {\n const item = assignments[i];\n if (item.type === prev.type) {\n if (item.type === 'index' && item.value === prev.value) {\n // Merge if the right-hand value is the same\n // saves at least 2 chars\n current = {\n type: 'index',\n source: item.source,\n value: getAssignmentExpression(current),\n };\n } else if (item.type === 'map' && item.source === prev.source) {\n // Maps has chaining methods, merge if source is the same\n current = {\n type: 'map',\n source: getAssignmentExpression(current),\n key: item.key,\n value: item.value,\n };\n } else if (item.type === 'set' && item.source === prev.source) {\n // Sets has chaining methods too\n current = {\n type: 'set',\n source: getAssignmentExpression(current),\n value: item.value,\n };\n } else {\n // Different assignment, push current\n newAssignments.push(current);\n current = item;\n }\n } else {\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[]) {\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\nexport function resolvePatches(ctx: SerializationContext) {\n return resolveAssignments(ctx.assignments);\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 */\nfunction assignRef(\n ctx: SerializationContext,\n index: number,\n value: string,\n) {\n if (ctx.markedRefs[index]) {\n return `${getRefParam(ctx, index)}=${value}`;\n }\n return value;\n}\n\nfunction createAssignment(\n ctx: SerializationContext,\n source: string,\n value: string,\n) {\n ctx.assignments.push({\n type: 'index',\n source,\n value,\n });\n}\n\nfunction createSetAdd(\n ctx: SerializationContext,\n ref: number,\n value: string,\n) {\n markRef(ctx, ref);\n ctx.assignments.push({\n type: 'set',\n source: getRefParam(ctx, ref),\n value,\n });\n}\n\nfunction createMapSet(\n ctx: SerializationContext,\n ref: number,\n key: string,\n value: string,\n) {\n markRef(ctx, ref);\n ctx.assignments.push({\n type: 'map',\n source: getRefParam(ctx, ref),\n key,\n value,\n });\n}\n\nfunction createArrayAssign(\n ctx: SerializationContext,\n ref: number,\n index: number | string,\n value: string,\n) {\n markRef(ctx, ref);\n createAssignment(ctx, `${getRefParam(ctx, ref)}[${index}]`, value);\n}\n\nfunction createObjectAssign(\n ctx: SerializationContext,\n ref: number,\n key: string,\n value: string,\n) {\n markRef(ctx, ref);\n createAssignment(ctx, `${getRefParam(ctx, ref)}.${key}`, value);\n}\n\nconst IDENTIFIER_CHECK = /^([$A-Z_][0-9A-Z_$]*)$/i;\n\nfunction serializeAssignments(\n ctx: SerializationContext,\n targetRef: number,\n node: SerovalObjectRecordNode,\n) {\n ctx.stack.push(targetRef);\n const mainAssignments: Assignment[] = [];\n for (let i = 0; i < node.s; i++) {\n const parentStack = ctx.stack;\n ctx.stack = [];\n const refParam = serializeTree(ctx, node.v[i]);\n ctx.stack = parentStack;\n const key = node.k[i];\n const check = Number(key);\n const parentAssignment = ctx.assignments;\n ctx.assignments = mainAssignments;\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 || IDENTIFIER_CHECK.test(key);\n if (isIdentifier && Number.isNaN(check)) {\n createObjectAssign(ctx, targetRef, key, refParam);\n } else {\n createArrayAssign(ctx, targetRef, isIdentifier ? key : quote(key), refParam);\n }\n ctx.assignments = parentAssignment;\n }\n ctx.stack.pop();\n return resolveAssignments(mainAssignments);\n}\n\nfunction serializeObject(\n ctx: SerializationContext,\n sourceID: number,\n node: SerovalObjectRecordNode,\n) {\n if (node.s === 0) {\n return '{}';\n }\n let result = '';\n ctx.stack.push(sourceID);\n for (let i = 0; i < node.s; i++) {\n const key = node.k[i];\n const val = node.v[i];\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 || IDENTIFIER_CHECK.test(key);\n if (isReferenceInStack(ctx, val)) {\n const refParam = getRefParam(ctx, val.i);\n if (isIdentifier && Number.isNaN(check)) {\n createObjectAssign(ctx, sourceID, key, refParam);\n } else {\n createArrayAssign(ctx, sourceID, isIdentifier ? key : quote(key), refParam);\n }\n } else {\n result += `${isIdentifier ? key : quote(key)}:${serializeTree(ctx, val)},`;\n }\n }\n ctx.stack.pop();\n return `{${result.substring(0, result.length - 1)}}`;\n}\n\nfunction serializePromise(\n ctx: SerializationContext,\n node: SerovalPromiseNode,\n) {\n let serialized: string;\n // Check if resolved value is a parent expression\n if (isReferenceInStack(ctx, node.n)) {\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 serialized = `Promise.resolve().then(()=>${getRefParam(ctx, node.n.i)})`;\n } else {\n ctx.stack.push(node.i);\n const result = serializeTree(ctx, node.n);\n ctx.stack.pop();\n // just inline the value/reference here\n serialized = `Promise.resolve(${result})`;\n }\n return assignRef(ctx, node.i, serialized);\n}\n\nfunction serializeTypedArray(\n ctx: SerializationContext,\n node: SerovalTypedArrayNode | SerovalBigIntTypedArrayNode,\n) {\n let args = `[${node.s}]`;\n if (node.l !== 0) {\n args += `,${node.l}`;\n }\n return assignRef(ctx, node.i, `new ${node.c}(${args})`);\n}\n\nfunction serializeSet(\n ctx: SerializationContext,\n node: SerovalSetNode,\n) {\n let serialized = 'new Set';\n const size = node.a.length;\n if (size) {\n let result = '';\n ctx.stack.push(node.i);\n for (let i = 0; i < size; i++) {\n const item = node.a[i];\n if (isReferenceInStack(ctx, item)) {\n createSetAdd(ctx, node.i, getRefParam(ctx, item.i));\n } else {\n // Push directly\n result += `${serializeTree(ctx, item)},`;\n }\n }\n ctx.stack.pop();\n if (result) {\n serialized += `([${result.substring(0, result.length - 1)}])`;\n }\n }\n return assignRef(ctx, node.i, serialized);\n}\n\nfunction serializeMap(\n ctx: SerializationContext,\n node: SerovalMapNode,\n) {\n let serialized = 'new Map';\n if (node.d.s) {\n let result = '';\n ctx.stack.push(node.i);\n for (let i = 0; i < node.d.s; i++) {\n // Check if key is a parent\n const key = node.d.k[i];\n const val = node.d.v[i];\n if (isReferenceInStack(ctx, key)) {\n // Create reference for the map instance\n const keyRef = getRefParam(ctx, key.i);\n // Check if value is a parent\n if (isReferenceInStack(ctx, val)) {\n const valueRef = getRefParam(ctx, val.i);\n // Register an assignment since\n // both key and value are a parent of this\n // Map instance\n createMapSet(ctx, node.i, keyRef, valueRef);\n } else {\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 const parent = ctx.stack;\n ctx.stack = [];\n createMapSet(ctx, node.i, keyRef, serializeTree(ctx, val));\n ctx.stack = parent;\n }\n } else if (isReferenceInStack(ctx, val)) {\n // Create ref for the Map instance\n const valueRef = getRefParam(ctx, val.i);\n // Reset stack for the key serialization\n const parent = ctx.stack;\n ctx.stack = [];\n createMapSet(ctx, node.i, serializeTree(ctx, key), valueRef);\n ctx.stack = parent;\n } else {\n result += `[${serializeTree(ctx, key)},${serializeTree(ctx, val)}],`;\n }\n }\n ctx.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.substring(0, result.length - 1)}])`;\n }\n }\n return assignRef(ctx, node.i, serialized);\n}\n\nfunction serializeNodeList(\n ctx: SerializationContext,\n node: SerovalArrayNode | SerovalIterableNode,\n) {\n // This is different than Map and Set\n // because we also need to serialize\n // the holes of the Array\n const size = node.a.length;\n let values = '';\n for (let i = 0; i < size; i++) {\n const item = node.a[i];\n // Check if index is a hole\n if (item) {\n // Check if item is a parent\n if (isReferenceInStack(ctx, item)) {\n createArrayAssign(ctx, node.i, i, getRefParam(ctx, item.i));\n values += ',';\n } else {\n values += serializeTree(ctx, item);\n if (i < size - 1) {\n values += ',';\n }\n }\n } else {\n // Add an empty item\n values += ',';\n }\n }\n return `[${values}]`;\n}\n\nfunction serializeArray(\n ctx: SerializationContext,\n node: SerovalArrayNode,\n) {\n ctx.stack.push(node.i);\n const result = serializeNodeList(ctx, node);\n ctx.stack.pop();\n return assignRef(ctx, node.i, result);\n}\n\nfunction serializeWithObjectAssign(\n ctx: SerializationContext,\n value: SerovalObjectRecordNode,\n id: number,\n serialized: string,\n) {\n const fields = serializeObject(ctx, id, value);\n if (fields !== '{}') {\n return `Object.assign(${serialized},${fields})`;\n }\n return serialized;\n}\n\nfunction serializeAggregateError(\n ctx: SerializationContext,\n node: SerovalAggregateErrorNode,\n) {\n // Serialize the required arguments\n ctx.stack.push(node.i);\n let serialized = `new AggregateError(${serializeTree(ctx, node.n)},${quote(node.m)})`;\n ctx.stack.pop();\n // `AggregateError` might've been extended\n // either through class or custom properties\n // Make sure to assign extra properties\n if (node.d) {\n if (ctx.features & Feature.ObjectAssign) {\n serialized = serializeWithObjectAssign(ctx, node.d, node.i, serialized);\n } else {\n markRef(ctx, node.i);\n const assignments = serializeAssignments(ctx, node.i, node.d);\n if (assignments) {\n const ref = getRefParam(ctx, node.i);\n return `(${assignRef(ctx, node.i, serialized)},${assignments}${ref})`;\n }\n }\n }\n return assignRef(ctx, node.i, serialized);\n}\n\nfunction serializeError(\n ctx: SerializationContext,\n node: SerovalErrorNode,\n) {\n let serialized = `new ${node.c}(${quote(node.m)})`;\n if (node.d) {\n if (ctx.features & Feature.ObjectAssign) {\n serialized = serializeWithObjectAssign(ctx, node.d, node.i, serialized);\n } else {\n markRef(ctx, node.i);\n const assignments = serializeAssignments(ctx, node.i, node.d);\n if (assignments) {\n const ref = getRefParam(ctx, node.i);\n return `(${assignRef(ctx, node.i, serialized)},${assignments}${ref})`;\n }\n }\n }\n return assignRef(ctx, node.i, serialized);\n}\n\nfunction serializeIterable(\n ctx: SerializationContext,\n node: SerovalIterableNode,\n) {\n const parent = ctx.stack;\n ctx.stack = [];\n const values = serializeNodeList(ctx, node);\n ctx.stack = parent;\n let serialized: string;\n if (ctx.features & Feature.ArrayPrototypeValues) {\n serialized = `${values}.values()`;\n } else {\n serialized = `${values}[Symbol.iterator]()`;\n }\n if (ctx.features & Feature.ArrowFunction) {\n serialized = `{[Symbol.iterator]:()=>${serialized}}`;\n } else if (ctx.features & Feature.MethodShorthand) {\n serialized = `{[Symbol.iterator](){return ${serialized}}}`;\n } else {\n serialized = `{[Symbol.iterator]:function(){return ${serialized}}}`;\n }\n if (node.d) {\n if (ctx.features & Feature.ObjectAssign) {\n serialized = serializeWithObjectAssign(ctx, node.d, node.i, serialized);\n } else {\n markRef(ctx, node.i);\n const assignments = serializeAssignments(ctx, node.i, node.d);\n if (assignments) {\n const ref = getRefParam(ctx, node.i);\n return `(${assignRef(ctx, node.i, serialized)},${assignments}${ref})`;\n }\n }\n }\n return assignRef(ctx, node.i, serialized);\n}\n\nfunction serializeNullConstructor(\n ctx: SerializationContext,\n node: SerovalNullConstructorNode,\n) {\n let serialized = 'Object.create(null)';\n if (ctx.features & Feature.ObjectAssign) {\n serialized = serializeWithObjectAssign(ctx, node.d, node.i, serialized);\n } else {\n markRef(ctx, node.i);\n const assignments = serializeAssignments(ctx, node.i, node.d);\n if (assignments) {\n const ref = getRefParam(ctx, node.i);\n return `(${assignRef(ctx, node.i, serialized)},${assignments}${ref})`;\n }\n }\n return assignRef(ctx, node.i, serialized);\n}\n\nexport default function serializeTree(\n ctx: SerializationContext,\n node: SerovalNode,\n): string {\n switch (node.t) {\n case SerovalNodeType.Primitive:\n return String(node.s);\n case SerovalNodeType.Reference:\n return getRefParam(ctx, node.i);\n case SerovalNodeType.Promise:\n return serializePromise(ctx, node);\n case SerovalNodeType.BigInt:\n return node.s;\n case SerovalNodeType.Date:\n return assignRef(ctx, node.i, `new Date(\"${node.s}\")`);\n case SerovalNodeType.RegExp:\n return assignRef(ctx, node.i, node.s);\n case SerovalNodeType.BigIntTypedArray:\n case SerovalNodeType.TypedArray:\n return serializeTypedArray(ctx, node);\n case SerovalNodeType.Set:\n return serializeSet(ctx, node);\n case SerovalNodeType.Map:\n return serializeMap(ctx, node);\n case SerovalNodeType.Array:\n return serializeArray(ctx, node);\n case SerovalNodeType.AggregateError:\n return serializeAggregateError(ctx, node);\n case SerovalNodeType.Error:\n return serializeError(ctx, node);\n case SerovalNodeType.Iterable:\n return serializeIterable(ctx, node);\n case SerovalNodeType.NullConstructor:\n return serializeNullConstructor(ctx, node);\n case SerovalNodeType.Object:\n return assignRef(ctx, node.i, serializeObject(ctx, node.i, node.d));\n default:\n throw new Error('Unsupported type');\n }\n}\n", "/* eslint-disable @typescript-eslint/no-use-before-define */\nimport assert from '../assert';\nimport { Feature } from '../compat';\nimport { createRef, ParserContext } from '../context';\nimport quote from '../quote';\nimport { BigIntTypedArrayValue, ServerValue, TypedArrayValue } from '../types';\nimport {\n createBigIntNode,\n createBigIntTypedArrayNode,\n createDateNode,\n createPrimitiveNode,\n createReferenceNode,\n createRegExpNode,\n createTypedArrayNode,\n FALSE_NODE,\n NEG_ZERO_NODE,\n NULL_NODE,\n TRUE_NODE,\n UNDEFINED_NODE,\n} from './primitives';\nimport {\n getErrorConstructor,\n getErrorOptions,\n getIterableOptions,\n isIterable,\n} from './shared';\nimport {\n SerovalAggregateErrorNode,\n SerovalArrayNode,\n SerovalErrorNode,\n SerovalIterableNode,\n SerovalMapNode,\n SerovalNode,\n SerovalNodeType,\n SerovalNullConstructorNode,\n SerovalObjectNode,\n SerovalObjectRecordNode,\n SerovalSetNode,\n} from './types';\n\ntype ObjectLikeNode = SerovalObjectNode | SerovalNullConstructorNode | SerovalIterableNode;\n\nclass SyncParser {\n ctx: ParserContext;\n\n constructor(ctx: ParserContext) {\n this.ctx = ctx;\n }\n\n generateNodeList(current: ServerValue[]) {\n const size = current.length;\n const nodes = new Array<SerovalNode>(size);\n const deferred = new Array<ServerValue>(size);\n let item: ServerValue;\n for (let i = 0; i < size; i++) {\n if (i in current) {\n item = current[i];\n if (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 generateArrayNode(id: number, current: ServerValue[]): SerovalArrayNode {\n return {\n t: SerovalNodeType.Array,\n i: id,\n a: this.generateNodeList(current),\n s: undefined,\n l: undefined,\n m: undefined,\n c: undefined,\n d: undefined,\n n: undefined,\n };\n }\n\n generateMapNode(\n id: number,\n current: Map<ServerValue, ServerValue>,\n ): SerovalMapNode {\n assert(this.ctx.features & Feature.Map, 'Unsupported type \"Map\"');\n const len = current.size;\n const keyNodes = new Array<SerovalNode>(len);\n const valueNodes = new Array<SerovalNode>(len);\n const deferredKey = new Array<ServerValue>(len);\n const deferredValue = new Array<ServerValue>(len);\n let deferredSize = 0;\n let nodeSize = 0;\n for (const [key, value] of current.entries()) {\n // Either key or value might be an iterable\n if (isIterable(key) || isIterable(value)) {\n deferredKey[deferredSize] = key;\n deferredValue[deferredSize] = value;\n deferredSize++;\n } else {\n keyNodes[nodeSize] = this.parse(key);\n valueNodes[nodeSize] = this.parse(value);\n nodeSize++;\n }\n }\n for (let i = 0; i < deferredSize; i++) {\n keyNodes[nodeSize + i] = this.parse(deferredKey[i]);\n valueNodes[nodeSize + i] = this.parse(deferredValue[i]);\n }\n return {\n t: SerovalNodeType.Map,\n i: id,\n a: undefined,\n s: undefined,\n l: undefined,\n m: undefined,\n c: undefined,\n d: { k: keyNodes, v: valueNodes, s: len },\n n: undefined,\n };\n }\n\n generateSetNode(\n id: number,\n current: Set<ServerValue>,\n ): SerovalSetNode {\n assert(this.ctx.features & Feature.Set, 'Unsupported type \"Set\"');\n const len = current.size;\n const nodes = new Array<SerovalNode>(len);\n const deferred = new Array<ServerValue>(len);\n let deferredSize = 0;\n let nodeSize = 0;\n for (const item of current.keys()) {\n // Iterables are lazy, so the evaluation must be deferred\n if (isIterable(item)) {\n deferred[deferredSize++] = item;\n } else {\n nodes[nodeSize++] = this.parse(item);\n }\n }\n // Parse deferred items\n for (let i = 0; i < deferredSize; i++) {\n nodes[nodeSize + i] = this.parse(deferred[i]);\n }\n return {\n t: SerovalNodeType.Set,\n i: id,\n a: nodes,\n s: undefined,\n l: undefined,\n m: undefined,\n c: undefined,\n d: undefined,\n n: undefined,\n };\n }\n\n generateProperties(properties: Record<string, ServerValue>): SerovalObjectRecordNode {\n const keys = Object.keys(properties);\n const size = keys.length;\n const keyNodes = new Array<string>(size);\n const valueNodes = new Array<SerovalNode>(size);\n const deferredKeys = new Array<string>(size);\n const deferredValues = new Array<ServerValue>(size);\n let deferredSize = 0;\n let nodesSize = 0;\n let item: ServerValue;\n for (const key of keys) {\n item = properties[key];\n if (isIterable(item)) {\n deferredKeys[deferredSize] = key;\n deferredValues[deferredSize] = item;\n deferredSize++;\n } else {\n keyNodes[nodesSize] = key;\n valueNodes[nodesSize] = this.parse(item);\n nodesSize++;\n }\n }\n for (let i = 0; i < deferredSize; i++) {\n keyNodes[nodesSize + i] = deferredKeys[i];\n valueNodes[nodesSize + i] = this.parse(deferredValues[i]);\n }\n return {\n k: keyNodes,\n v: valueNodes,\n s: size,\n };\n }\n\n generateIterableNode(\n id: number,\n current: Iterable<ServerValue>,\n ): SerovalIterableNode {\n assert(this.ctx.features & Feature.SymbolIterator, 'Unsupported type \"Iterable\"');\n const options = getIterableOptions(current);\n return {\n t: SerovalNodeType.Iterable,\n i: id,\n s: undefined,\n l: undefined,\n m: undefined,\n c: undefined,\n // Parse options first before the items\n d: options\n ? this.generateProperties(options as Record<string, ServerValue>)\n : undefined,\n a: this.generateNodeList(Array.from(current)),\n n: undefined,\n };\n }\n\n generateObjectNode(\n id: number,\n current: Record<string, ServerValue> | Iterable<ServerValue>,\n empty: boolean,\n ): ObjectLikeNode {\n if (Symbol.iterator in current) {\n return this.generateIterableNode(id, current);\n }\n return {\n t: empty ? SerovalNodeType.NullConstructor : SerovalNodeType.Object,\n i: id,\n s: undefined,\n l: undefined,\n m: undefined,\n c: undefined,\n d: this.generateProperties(current),\n a: undefined,\n n: undefined,\n };\n }\n\n generateAggregateErrorNode(\n id: number,\n current: AggregateError,\n ): SerovalAggregateErrorNode {\n const options = getErrorOptions(current);\n const optionsNode = options\n ? this.generateProperties(options)\n : undefined;\n return {\n t: SerovalNodeType.AggregateError,\n i: id,\n a: undefined,\n s: undefined,\n l: undefined,\n m: current.message,\n c: undefined,\n d: optionsNode,\n n: this.parse(current.errors),\n };\n }\n\n generateErrorNode(\n id: number,\n current: Error,\n ): SerovalErrorNode {\n const options = getErrorOptions(current);\n const optionsNode = options\n ? this.generateProperties(options)\n : undefined;\n return {\n t: SerovalNodeType.Error,\n i: id,\n a: undefined,\n s: undefined,\n l: undefined,\n m: current.message,\n c: getErrorConstructor(current),\n d: optionsNode,\n n: undefined,\n };\n }\n\n parse(current: ServerValue): SerovalNode {\n switch (typeof current) {\n case 'boolean':\n return current ? TRUE_NODE : FALSE_NODE;\n case 'undefined':\n return UNDEFINED_NODE;\n case 'string':\n return createPrimitiveNode(quote(current));\n case 'number':\n if (Object.is(current, -0)) {\n return NEG_ZERO_NODE;\n }\n if (Object.is(current, Infinity)) {\n return createPrimitiveNode('1/0');\n }\n if (Object.is(current, -Infinity)) {\n return createPrimitiveNode('-1/0');\n }\n return createPrimitiveNode(current);\n case 'bigint':\n return createBigIntNode(this.ctx, current);\n case 'object': {\n if (!current) {\n return NULL_NODE;\n }\n // Non-primitive values needs a reference ID\n // mostly because the values themselves are stateful\n const id = createRef(this.ctx, current, true);\n if (this.ctx.markedRefs[id]) {\n return createReferenceNode(id);\n }\n if (Array.isArray(current)) {\n return this.generateArrayNode(id, current);\n }\n switch (current.constructor) {\n case Date:\n return createDateNode(id, current as Date);\n case RegExp:\n return createRegExpNode(id, current as RegExp);\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 createTypedArrayNode(this.ctx, id, current as TypedArrayValue);\n case BigInt64Array:\n case BigUint64Array:\n return createBigIntTypedArrayNode(this.ctx, id, current as BigIntTypedArrayValue);\n case Map:\n return this.generateMapNode(id, current as Map<ServerValue, ServerValue>);\n case Set:\n return this.generateSetNode(id, current as Set<ServerValue>);\n case Object:\n return this.generateObjectNode(id, current as Record<string, ServerValue>, false);\n case undefined:\n return this.generateObjectNode(id, current as Record<string, ServerValue>, true);\n case AggregateError:\n if (this.ctx.features & Feature.AggregateError) {\n return this.generateAggregateErrorNode(id, current as AggregateError);\n }\n return this.generateErrorNode(id, current as AggregateError);\n case Error:\n case EvalError:\n case RangeError:\n case ReferenceError:\n case SyntaxError:\n case TypeError:\n case URIError:\n return this.generateErrorNode(id, current as Error);\n default:\n break;\n }\n if (current instanceof AggregateError && this.ctx.features & Feature.AggregateError) {\n return this.generateAggregateErrorNode(id, current);\n }\n if (current instanceof Error) {\n return this.generateErrorNode(id, current);\n }\n // Generator functions don't have a global constructor\n if (Symbol.iterator in current) {\n return this.generateIterableNode(id, current);\n }\n throw new Error('Unsupported type');\n }\n default:\n throw new Error('Unsupported type');\n }\n }\n}\n\nexport default function parseSync(\n ctx: ParserContext,\n current: ServerValue,\n) {\n const result = new SyncParser(ctx).parse(current);\n const isObject = result.t === SerovalNodeType.Object\n || result.t === SerovalNodeType.Iterable;\n return [result, createRef(ctx, current, false), isObject] as const;\n}\n"],
5
- "mappings": "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",
3
+ "sources": ["../../../src/index.ts", "../../../src/compat.ts", "../../../src/get-identifier.ts", "../../../src/context.ts", "../../../src/assert.ts", "../../../src/quote.ts", "../../../src/tree/types.ts", "../../../src/tree/primitives.ts", "../../../src/tree/shared.ts", "../../../src/tree/async.ts", "../../../src/tree/serialize.ts", "../../../src/tree/sync.ts"],
4
+ "sourcesContent": ["/* eslint-disable no-await-in-loop */\nimport { Feature } from './compat';\nimport {\n SerializationContext,\n getRefParam,\n Options,\n ParserContext,\n} from './context';\nimport parseAsync from './tree/async';\nimport serializeTree, { resolvePatches } from './tree/serialize';\nimport parseSync from './tree/sync';\nimport { SerovalNode } from './tree/types';\nimport {\n AsyncServerValue,\n PrimitiveValue,\n ServerValue,\n CommonServerValue,\n SemiPrimitiveValue,\n ErrorValue,\n} from './types';\n\nexport {\n AsyncServerValue,\n ServerValue,\n PrimitiveValue,\n CommonServerValue,\n SemiPrimitiveValue,\n ErrorValue,\n};\n\nfunction finalize(\n ctx: SerializationContext,\n rootID: number,\n isObject: boolean,\n result: string,\n) {\n // Shared references detected\n if (ctx.vars.length) {\n const patches = resolvePatches(ctx);\n let body = result;\n if (patches) {\n // Get (or create) a ref from the source\n const index = getRefParam(ctx, rootID);\n if (result.startsWith(`${index}=`)) {\n body = `${result},${patches}${index}`;\n } else {\n body = `${index}=${result},${patches}${index}`;\n }\n }\n let params = ctx.vars.length > 1\n ? ctx.vars.join(',')\n : ctx.vars[0];\n // Source is probably already assigned\n if (ctx.features & Feature.ArrowFunction) {\n params = ctx.vars.length > 1 || ctx.vars.length === 0\n ? `(${params})`\n : params;\n return `(${params}=>(${body}))()`;\n }\n return `(function(${params}){return ${body}})()`;\n }\n if (isObject) {\n return `(${result})`;\n }\n return result;\n}\n\nexport function serialize<T extends ServerValue>(\n source: T,\n options?: Partial<Options>,\n) {\n const ctx = new ParserContext(options);\n const [tree, rootID, isObject] = parseSync(ctx, source);\n const serial = new SerializationContext(ctx);\n const result = serializeTree(serial, tree);\n return finalize(serial, rootID, isObject, result);\n}\n\nexport async function serializeAsync<T extends AsyncServerValue>(\n source: T,\n options?: Partial<Options>,\n) {\n const ctx = new ParserContext(options);\n const [tree, rootID, isObject] = await parseAsync(ctx, source);\n const serial = new SerializationContext(ctx);\n const result = serializeTree(serial, tree);\n return finalize(serial, rootID, isObject, result);\n}\n\nexport function deserialize<T extends AsyncServerValue>(source: string): T {\n // eslint-disable-next-line no-eval\n return (0, eval)(source) as T;\n}\n\ntype SerovalJSON = [\n tree: SerovalNode,\n root: number,\n isObject: boolean,\n feature: number,\n markedRefs: Record<number, number>,\n];\n\nexport function toJSON<T extends ServerValue>(\n source: T,\n options?: Partial<Options>,\n) {\n const ctx = new ParserContext(options);\n const [tree, root, isObject] = parseSync(ctx, source);\n return JSON.stringify([\n tree,\n root,\n isObject,\n ctx.features,\n ctx.markedRefs,\n ]);\n}\n\nexport async function toJSONAsync<T extends AsyncServerValue>(\n source: T,\n options?: Partial<Options>,\n) {\n const ctx = new ParserContext(options);\n const [tree, root, isObject] = await parseAsync(ctx, source);\n return JSON.stringify([\n tree,\n root,\n isObject,\n ctx.features,\n ctx.markedRefs,\n ]);\n}\n\nexport function compileJSON(source: string): string {\n const parsed = JSON.parse(source) as SerovalJSON;\n const serial = new SerializationContext({\n features: parsed[3],\n markedRefs: parsed[4],\n });\n const result = serializeTree(serial, parsed[0]);\n return finalize(serial, parsed[1], parsed[2], result);\n}\n\nexport function fromJSON<T extends AsyncServerValue>(source: string): T {\n return deserialize<T>(compileJSON(source));\n}\n\nexport default serialize;\n", "/* eslint-disable guard-for-in */\n/**\n * References\n * - https://kangax.github.io/compat-table/es6/\n * - MDN\n * - ESBuild\n */\nexport type Version = [major: number, minor: number, patch: number];\n\nfunction compareVersion(left: Version, right: Version) {\n let diff = left[0] - right[0];\n if (diff === 0) {\n diff = left[1] - right[1];\n }\n if (diff === 0) {\n diff = left[2] - right[2];\n }\n return diff;\n}\n\nexport interface PlatformVersion {\n es: Version;\n // desktop\n chrome?: Version;\n edge?: Version;\n safari?: Version;\n firefox?: Version;\n opera?: Version;\n // mobile\n ios?: Version;\n samsung?: Version;\n // js runtimes\n deno?: Version;\n node?: Version;\n}\n\nexport type Platform = keyof PlatformVersion;\n\nexport const enum Feature {\n AggregateError = 0x01,\n ArrayPrototypeValues = 0x02,\n ArrowFunction = 0x04,\n BigInt = 0x08,\n Map = 0x10,\n MethodShorthand = 0x20,\n ObjectAssign = 0x40,\n Promise = 0x80,\n Set = 0x100,\n SymbolIterator = 0x200,\n TypedArray = 0x400,\n BigIntTypedArray = 0x800,\n}\n\ntype VersionTable = {\n [key in Feature]: PlatformVersion;\n}\n\nconst VERSION_TABLE: VersionTable = {\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/AggregateError#browser_compatibility\n [Feature.AggregateError]: {\n es: [2021, 0, 0],\n chrome: [85, 0, 0],\n edge: [85, 0, 0],\n firefox: [79, 0, 0],\n opera: [71, 0, 0],\n safari: [14, 0, 0],\n ios: [14, 0, 0],\n samsung: [14, 0, 0],\n deno: [1, 2, 0],\n node: [15, 0, 0],\n },\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/values#browser_compatibility\n [Feature.ArrayPrototypeValues]: {\n es: [6, 0, 0],\n chrome: [66, 0, 0],\n edge: [14, 0, 0],\n firefox: [60, 0, 0],\n opera: [53, 0, 0],\n safari: [9, 0, 0],\n ios: [9, 0, 0],\n samsung: [9, 0, 0],\n deno: [1, 0, 0],\n node: [10, 9, 0],\n },\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions#browser_compatibility\n [Feature.ArrowFunction]: {\n es: [6, 0, 0],\n chrome: [45, 0, 0],\n edge: [12, 0, 0],\n firefox: [24, 0, 0],\n opera: [32, 0, 0],\n safari: [10, 0, 0],\n ios: [10, 0, 0],\n samsung: [5, 0, 0],\n deno: [1, 0, 0],\n node: [4, 0, 0],\n },\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/BigInt#browser_compatibility\n [Feature.BigInt]: {\n es: [2020, 0, 0],\n chrome: [67, 0, 0],\n edge: [79, 0, 0],\n firefox: [68, 0, 0],\n opera: [54, 0, 0],\n safari: [14, 0, 0],\n ios: [14, 0, 0],\n samsung: [9, 0, 0],\n deno: [1, 0, 0],\n node: [10, 4, 0],\n },\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map#browser_compatibility\n [Feature.Map]: {\n es: [6, 0, 0],\n chrome: [38, 0, 0],\n edge: [12, 0, 0],\n firefox: [13, 0, 0],\n opera: [25, 0, 0],\n safari: [8, 0, 0],\n ios: [8, 0, 0],\n samsung: [3, 0, 0],\n deno: [1, 0, 0],\n node: [0, 12, 0],\n },\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Method_definitions#browser_compatibility\n [Feature.MethodShorthand]: {\n es: [6, 0, 0],\n chrome: [39, 0, 0],\n edge: [12, 0, 0],\n firefox: [34, 0, 0],\n opera: [26, 0, 0],\n safari: [9, 0, 0],\n ios: [9, 0, 0],\n samsung: [4, 0, 0],\n deno: [1, 0, 0],\n node: [4, 0, 0],\n },\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign#browser_compatibility\n [Feature.ObjectAssign]: {\n es: [6, 0, 0],\n chrome: [45, 0, 0],\n edge: [12, 0, 0],\n firefox: [34, 0, 0],\n opera: [32, 0, 0],\n safari: [9, 0, 0],\n ios: [9, 0, 0],\n samsung: [5, 0, 0],\n deno: [1, 0, 0],\n node: [4, 0, 0],\n },\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise#browser_compatibility\n [Feature.Promise]: {\n es: [6, 0, 0],\n chrome: [32, 0, 0],\n edge: [12, 0, 0],\n firefox: [29, 0, 0],\n opera: [19, 0, 0],\n safari: [8, 0, 0],\n ios: [8, 0, 0],\n samsung: [2, 0, 0],\n deno: [1, 0, 0],\n node: [0, 12, 0],\n },\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set#browser_compatibility\n [Feature.Set]: {\n es: [6, 0, 0],\n chrome: [38, 0, 0],\n edge: [12, 0, 0],\n firefox: [13, 0, 0],\n opera: [25, 0, 0],\n safari: [8, 0, 0],\n ios: [8, 0, 0],\n samsung: [3, 0, 0],\n deno: [1, 0, 0],\n node: [0, 12, 0],\n },\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/iterator#browser_compatibility\n [Feature.SymbolIterator]: {\n es: [6, 0, 0],\n chrome: [43, 0, 0],\n edge: [12, 0, 0],\n firefox: [36, 0, 0],\n opera: [30, 0, 0],\n safari: [10, 0, 0],\n ios: [10, 0, 0],\n samsung: [4, 0, 0],\n deno: [1, 0, 0],\n node: [0, 12, 0],\n },\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray#browser_compatibility\n [Feature.TypedArray]: {\n es: [6, 0, 0],\n chrome: [7, 0, 0],\n edge: [12, 0, 0],\n firefox: [4, 0, 0],\n opera: [11, 6, 0],\n safari: [5, 1, 0],\n ios: [4, 2, 0],\n samsung: [1, 0, 0],\n deno: [1, 0, 0],\n node: [0, 10, 0],\n },\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/BigInt64Array#browser_compatibility\n [Feature.BigIntTypedArray]: {\n es: [2020, 0, 0],\n chrome: [67, 0, 0],\n edge: [79, 0, 0],\n firefox: [68, 0, 0],\n opera: [54, 6, 0],\n safari: [15, 1, 0],\n ios: [15, 2, 0],\n samsung: [9, 0, 0],\n deno: [1, 0, 0],\n node: [10, 4, 0],\n },\n};\n\nconst platforms: Platform[] = [\n 'chrome',\n 'deno',\n 'edge',\n 'es',\n 'firefox',\n 'ios',\n 'node',\n 'opera',\n 'safari',\n 'samsung',\n];\n\nexport type Target = [platform: Platform, version: Version];\n\nfunction getPlatform(target: string): Platform {\n for (let i = 0, len = platforms.length; i < len; i++) {\n const platform = target.substring(0, platforms[i].length);\n if (platform === platforms[i]) {\n return platform;\n }\n }\n throw new Error(`Invalid target \"${target}\"`);\n}\n\nfunction parseTarget(target: string): Target {\n const platform = getPlatform(target);\n const version = target.substring(platform.length);\n const [major, minor = '0', patch = '0'] = version.split('.');\n return [platform, [Number(major), Number(minor), Number(patch)]];\n}\n\nfunction getTargetVersions(targets: string | string[]): Target[] {\n if (Array.isArray(targets)) {\n const versions: Target[] = [];\n for (let i = 0, len = targets.length; i < len; i++) {\n versions.push(parseTarget(targets[i]));\n }\n return versions;\n }\n return [parseTarget(targets)];\n}\n\nexport function parseTargets(targets: string | string[]): number {\n const parsed = getTargetVersions(targets);\n let flags = 0;\n\n for (const key of Object.keys(VERSION_TABLE)) {\n const base = VERSION_TABLE[key as unknown as Feature];\n let flag = true;\n for (const [platform, version] of parsed) {\n const baseVersion = base[platform];\n flag = flag && !!baseVersion && (compareVersion(baseVersion, version) <= 0);\n }\n if (flag) {\n flags |= Number(key);\n }\n }\n\n return flags;\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) {\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", "/* eslint-disable prefer-object-spread */\n/* eslint-disable max-classes-per-file */\nimport { parseTargets } from './compat';\nimport getIdentifier from './get-identifier';\n\ninterface IndexAssignment {\n type: 'index';\n source: string;\n value: string;\n}\n\ninterface MapAssignment {\n type: 'map';\n source: string;\n key: string;\n value: string;\n}\n\ninterface SetAssignment {\n type: 'set';\n source: string;\n value: string;\n}\n\n// Array of assignments to be done (used for recursion)\nexport type Assignment =\n | IndexAssignment\n | MapAssignment\n | SetAssignment;\n\nexport interface Options {\n target: string | string[];\n}\n\nconst DEFAULT_OPTIONS: Options = {\n target: 'es2023',\n};\n\nexport class ParserContext {\n refs = new Map<unknown, number>();\n\n markedRefs: Record<number, number> = {};\n\n features: number;\n\n constructor(options: Partial<Options> = {}) {\n const result = Object.assign({}, DEFAULT_OPTIONS, options || {});\n this.features = parseTargets(result.target);\n }\n}\n\nexport interface SerializationOptions {\n markedRefs: Record<number, number>;\n features: number;\n}\n\nexport class SerializationContext {\n stack: number[] = [];\n\n // Map tree refs to actual refs\n validRefs: number[] = [];\n\n refSize = 0;\n\n // Variables\n vars: string[] = [];\n\n // Array of assignments to be done (used for recursion)\n assignments: Assignment[] = [];\n\n // Supported features\n features: number;\n\n // Refs that are...referenced\n markedRefs: Record<number, number>;\n\n constructor(options: SerializationOptions) {\n this.features = options.features;\n this.markedRefs = options.markedRefs;\n }\n}\n\n/**\n * Increments the number of references the referenced value has\n */\nexport function markRef(ctx: ParserContext | SerializationContext, current: number) {\n ctx.markedRefs[current] = 1;\n}\n\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 */\nfunction createValidRef(\n ctx: SerializationContext,\n index: number,\n) {\n const current = ctx.validRefs[index];\n if (current == null) {\n const value = ctx.refSize++;\n ctx.validRefs[index] = value;\n return value;\n }\n return 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 */\nexport function getRefParam(ctx: SerializationContext, index: number) {\n const actualIndex = createValidRef(ctx, index);\n if (ctx.vars[actualIndex]) {\n return ctx.vars[actualIndex];\n }\n const result = getIdentifier(actualIndex);\n ctx.vars[actualIndex] = result;\n return result;\n}\n\n/**\n * Creates a reference ID from the given values\n */\nexport function createRef(\n ctx: ParserContext,\n current: unknown,\n mark: boolean,\n): number {\n // Check if reference number already exists\n const ref = ctx.refs.get(current);\n if (ref != null) {\n // Exists, means this value is currently\n // being referenced\n // Mark reference\n if (mark) {\n markRef(ctx, ref);\n }\n return ref;\n }\n // Create a new reference ID\n const id = ctx.refs.size;\n ctx.refs.set(current, id);\n return id;\n}\n", "export default function assert(cond: unknown, error: string): asserts cond {\n if (!cond) {\n throw new Error(error);\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 default function quote(str: string) {\n let result = '';\n let lastPos = 0;\n for (let i = 0, len = str.length; i < len; i++) {\n let replacement;\n switch (str[i]) {\n case '\"':\n replacement = '\\\\\"';\n break;\n case '\\\\':\n replacement = '\\\\\\\\';\n break;\n case '<':\n replacement = '\\\\x3C';\n break;\n case '\\n':\n replacement = '\\\\n';\n break;\n case '\\r':\n replacement = '\\\\r';\n break;\n case '\\u2028':\n replacement = '\\\\u2028';\n break;\n case '\\u2029':\n replacement = '\\\\u2029';\n break;\n default:\n continue;\n }\n result += str.slice(lastPos, i) + replacement;\n lastPos = i + 1;\n }\n if (lastPos === 0) {\n result = str;\n } else {\n result += str.slice(lastPos);\n }\n return `\"${result}\"`;\n}\n", "/* eslint-disable max-classes-per-file */\nimport { BigIntTypedArrayValue, PrimitiveValue, TypedArrayValue } from '../types';\n\nexport const enum SerovalNodeType {\n Primitive,\n BigInt,\n Reference,\n Date,\n RegExp,\n Set,\n Map,\n Array,\n Object,\n NullConstructor,\n Promise,\n Error,\n AggregateError,\n Iterable,\n TypedArray,\n BigIntTypedArray,\n}\n\nexport interface SerovalBaseNode {\n // Type of the node\n t?: SerovalNodeType;\n // Serialized value\n s?: PrimitiveValue;\n // Reference ID\n i?: number;\n // Size/Byte offset\n l?: number;\n // Constructor name\n c?: string;\n // dictionary\n d?: SerovalDictionaryNode;\n // message\n m?: string;\n // next node\n n?: SerovalNode;\n // array of nodes\n a?: SerovalNode[];\n}\n\nexport class SerovalObjectRecordNode {\n k: string[];\n\n v: SerovalNode[];\n\n s: number;\n\n constructor(k: string[], v: SerovalNode[], s: number) {\n this.k = k;\n this.v = v;\n this.s = s;\n }\n}\n\nexport class SerovalMapRecordNode {\n k: SerovalNode[];\n\n v: SerovalNode[];\n\n s: number;\n\n constructor(k: SerovalNode[], v: SerovalNode[], s: number) {\n this.k = k;\n this.v = v;\n this.s = s;\n }\n}\n\nexport type SerovalDictionaryNode =\n | SerovalObjectRecordNode\n | SerovalMapRecordNode;\n\nexport class SerovalPrimitiveNode implements SerovalBaseNode {\n t: SerovalNodeType.Primitive = SerovalNodeType.Primitive;\n\n s: string | number | null;\n\n constructor(current: string | number | null) {\n this.s = current;\n }\n}\n\nexport class SerovalReferenceNode implements SerovalBaseNode {\n t: SerovalNodeType.Reference = SerovalNodeType.Reference;\n\n i: number;\n\n constructor(id: number) {\n this.i = id;\n }\n}\n\nexport class SerovalBigIntNode implements SerovalBaseNode {\n t: SerovalNodeType.BigInt = SerovalNodeType.BigInt;\n\n s: string;\n\n constructor(current: bigint) {\n this.s = `${current}n`;\n }\n}\n\nexport class SerovalDateNode implements SerovalBaseNode {\n t: SerovalNodeType.Date = SerovalNodeType.Date;\n\n i: number;\n\n s: string;\n\n constructor(id: number, current: Date) {\n this.i = id;\n this.s = current.toISOString();\n }\n}\n\nexport class SerovalRegExpNode implements SerovalBaseNode {\n t: SerovalNodeType.RegExp = SerovalNodeType.RegExp;\n\n i: number;\n\n s: string;\n\n constructor(id: number, current: RegExp) {\n this.i = id;\n this.s = String(current);\n }\n}\n\nexport class SerovalTypedArrayNode implements SerovalBaseNode {\n t: SerovalNodeType.TypedArray = SerovalNodeType.TypedArray;\n\n i: number;\n\n s: string;\n\n l: number;\n\n c: string;\n\n constructor(id: number, current: TypedArrayValue) {\n this.i = id;\n this.s = current.toString();\n this.l = current.byteOffset;\n this.c = current.constructor.name;\n }\n}\n\nexport class SerovalBigIntTypedArrayNode implements SerovalBaseNode {\n t: SerovalNodeType.BigIntTypedArray = SerovalNodeType.BigIntTypedArray;\n\n i: number;\n\n s: string;\n\n l: number;\n\n c: string;\n\n constructor(id: number, current: BigIntTypedArrayValue) {\n let result = '';\n const cap = current.length - 1;\n for (let i = 0; i < cap; i++) {\n result += `${current[i]}n,`;\n }\n result += `\"${current[cap]}\"`;\n\n this.i = id;\n this.s = result;\n this.l = current.byteOffset;\n this.c = current.constructor.name;\n }\n}\n\nexport type SerovalSemiPrimitiveNode =\n | SerovalBigIntNode\n | SerovalDateNode\n | SerovalRegExpNode\n | SerovalTypedArrayNode\n | SerovalBigIntTypedArrayNode;\n\nexport class SerovalSetNode implements SerovalBaseNode {\n t: SerovalNodeType.Set = SerovalNodeType.Set;\n\n i: number;\n\n a: SerovalNode[];\n\n constructor(id: number, a: SerovalNode[]) {\n this.i = id;\n this.a = a;\n }\n}\n\nexport class SerovalMapNode implements SerovalBaseNode {\n t: SerovalNodeType.Map = SerovalNodeType.Map;\n\n i: number;\n\n d: SerovalMapRecordNode;\n\n constructor(id: number, d: SerovalMapRecordNode) {\n this.i = id;\n this.d = d;\n }\n}\n\nexport class SerovalArrayNode implements SerovalBaseNode {\n t: SerovalNodeType.Array = SerovalNodeType.Array;\n\n i: number;\n\n a: SerovalNode[];\n\n constructor(id: number, a: SerovalNode[]) {\n this.i = id;\n this.a = a;\n }\n}\n\nexport class SerovalObjectNode implements SerovalBaseNode {\n t: SerovalNodeType.Object = SerovalNodeType.Object;\n\n i: number;\n\n d: SerovalObjectRecordNode;\n\n constructor(id: number, d: SerovalObjectRecordNode) {\n this.i = id;\n this.d = d;\n }\n}\n\nexport class SerovalNullConstructorNode implements SerovalBaseNode {\n t: SerovalNodeType.NullConstructor = SerovalNodeType.NullConstructor;\n\n i: number;\n\n d: SerovalObjectRecordNode;\n\n constructor(id: number, d: SerovalObjectRecordNode) {\n this.i = id;\n this.d = d;\n }\n}\n\nexport class SerovalPromiseNode implements SerovalBaseNode {\n t: SerovalNodeType.Promise = SerovalNodeType.Promise;\n\n i: number;\n\n n: SerovalNode;\n\n constructor(id: number, n: SerovalNode) {\n this.i = id;\n this.n = n;\n }\n}\n\nexport class SerovalErrorNode implements SerovalBaseNode {\n t: SerovalNodeType.Error = SerovalNodeType.Error;\n\n i: number;\n\n c: string;\n\n m: string;\n\n d: SerovalObjectRecordNode | undefined;\n\n constructor(id: number, c: string, m: string, d: SerovalObjectRecordNode | undefined) {\n this.i = id;\n this.c = c;\n this.m = m;\n this.d = d;\n }\n}\n\nexport class SerovalAggregateErrorNode implements SerovalBaseNode {\n t: SerovalNodeType.AggregateError = SerovalNodeType.AggregateError;\n\n i: number;\n\n m: string;\n\n d: SerovalObjectRecordNode | undefined;\n\n n: SerovalNode;\n\n constructor(id: number, m: string, d: SerovalObjectRecordNode | undefined, n: SerovalNode) {\n this.i = id;\n this.m = m;\n this.d = d;\n this.n = n;\n }\n}\n\nexport class SerovalIterableNode implements SerovalBaseNode {\n t: SerovalNodeType.Iterable = SerovalNodeType.Iterable;\n\n i: number;\n\n d: SerovalObjectRecordNode | undefined;\n\n a: SerovalNode[];\n\n constructor(id: number, d: SerovalObjectRecordNode | undefined, a: SerovalNode[]) {\n this.i = id;\n this.d = d;\n this.a = a;\n }\n}\n\nexport type SerovalNode =\n | SerovalPrimitiveNode\n | SerovalReferenceNode\n | SerovalSemiPrimitiveNode\n | SerovalSetNode\n | SerovalMapNode\n | SerovalArrayNode\n | SerovalObjectNode\n | SerovalNullConstructorNode\n | SerovalPromiseNode\n | SerovalErrorNode\n | SerovalAggregateErrorNode\n | SerovalIterableNode;\n", "import {\n SerovalPrimitiveNode,\n} from './types';\n\nexport const TRUE_NODE = new SerovalPrimitiveNode('!0');\nexport const FALSE_NODE = new SerovalPrimitiveNode('!1');\nexport const UNDEFINED_NODE = new SerovalPrimitiveNode('void 0');\nexport const NULL_NODE = new SerovalPrimitiveNode(null);\nexport const NEG_ZERO_NODE = new SerovalPrimitiveNode('-0');\nexport const INFINITY_NODE = new SerovalPrimitiveNode('1/0');\nexport const NEG_INFINITY_NODE = new SerovalPrimitiveNode('-1/0');\n", "import { SerializationContext } from '../context';\nimport {\n AsyncServerValue,\n ErrorValue,\n} from '../types';\nimport {\n SerovalNode,\n SerovalReferenceNode,\n SerovalNodeType,\n} from './types';\n\nexport function getErrorConstructor(error: ErrorValue) {\n if (error instanceof EvalError) {\n return 'EvalError';\n }\n if (error instanceof RangeError) {\n return 'RangeError';\n }\n if (error instanceof ReferenceError) {\n return 'ReferenceError';\n }\n if (error instanceof SyntaxError) {\n return 'SyntaxError';\n }\n if (error instanceof TypeError) {\n return 'TypeError';\n }\n if (error instanceof URIError) {\n return 'URIError';\n }\n return 'Error';\n}\n\nexport function getErrorOptions(\n error: Error,\n) {\n let options: Record<string, any> | undefined;\n const constructor = 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 (const name of names) {\n if (name !== 'name' && name !== 'message') {\n options = options || {};\n options[name] = error[name as keyof Error];\n }\n }\n return options;\n}\n\nexport function getIterableOptions(obj: Iterable<any>) {\n const names = Object.getOwnPropertyNames(obj);\n if (names.length) {\n const options: Record<string, unknown> = {};\n for (const name of names) {\n options[name] = obj[name as unknown as keyof typeof obj];\n }\n return options;\n }\n return undefined;\n}\n\nexport function isReferenceInStack(\n ctx: SerializationContext,\n node: SerovalNode,\n): node is SerovalReferenceNode {\n return node.t === SerovalNodeType.Reference && ctx.stack.includes(node.i);\n}\n\nexport function isIterable(\n value: unknown,\n): value is Iterable<AsyncServerValue> {\n if (!value || typeof value !== 'object') {\n return false;\n }\n if (Array.isArray(value)) {\n return false;\n }\n switch (value.constructor) {\n case Map:\n case Set:\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 case BigInt64Array:\n case BigUint64Array:\n return false;\n default:\n break;\n }\n return Symbol.iterator in value;\n}\n", "/* eslint-disable no-await-in-loop */\n/* eslint-disable @typescript-eslint/no-use-before-define */\nimport assert from '../assert';\nimport { Feature } from '../compat';\nimport { createRef, ParserContext } from '../context';\nimport quote from '../quote';\nimport {\n AsyncServerValue,\n BigIntTypedArrayValue,\n TypedArrayValue,\n} from '../types';\nimport {\n FALSE_NODE,\n INFINITY_NODE,\n NEG_INFINITY_NODE,\n NEG_ZERO_NODE,\n NULL_NODE,\n TRUE_NODE,\n UNDEFINED_NODE,\n} from './primitives';\nimport {\n getErrorConstructor,\n getErrorOptions,\n getIterableOptions,\n isIterable,\n} from './shared';\nimport {\n SerovalAggregateErrorNode,\n SerovalArrayNode,\n SerovalBigIntNode,\n SerovalBigIntTypedArrayNode,\n SerovalDateNode,\n SerovalErrorNode,\n SerovalIterableNode,\n SerovalMapNode,\n SerovalMapRecordNode,\n SerovalNode,\n SerovalNodeType,\n SerovalNullConstructorNode,\n SerovalObjectNode,\n SerovalObjectRecordNode,\n SerovalPrimitiveNode,\n SerovalPromiseNode,\n SerovalReferenceNode,\n SerovalRegExpNode,\n SerovalSetNode,\n SerovalTypedArrayNode,\n} from './types';\n\ntype ObjectLikeNode =\n | SerovalObjectNode\n | SerovalNullConstructorNode\n | SerovalIterableNode\n | SerovalPromiseNode;\n\ntype ObjectLikeValue =\n | Record<string, AsyncServerValue>\n | Iterable<AsyncServerValue>\n | PromiseLike<AsyncServerValue>;\n\nclass AsyncParser {\n ctx: ParserContext;\n\n constructor(ctx: ParserContext) {\n this.ctx = ctx;\n }\n\n async generateNodeList(\n current: AsyncServerValue[],\n ) {\n const size = current.length;\n const nodes = new Array<SerovalNode>(size);\n const deferred = new Array<AsyncServerValue>(size);\n let item: AsyncServerValue;\n for (let i = 0; i < size; i++) {\n if (i in current) {\n item = current[i];\n if (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 async generateArrayNode(\n id: number,\n current: AsyncServerValue[],\n ): Promise<SerovalArrayNode> {\n return new SerovalArrayNode(id, await this.generateNodeList(current));\n }\n\n async generateMapNode(\n id: number,\n current: Map<AsyncServerValue, AsyncServerValue>,\n ): Promise<SerovalMapNode> {\n assert(this.ctx.features & Feature.Map, 'Unsupported type \"Map\"');\n const len = current.size;\n const keyNodes = new Array<SerovalNode>(len);\n const valueNodes = new Array<SerovalNode>(len);\n const deferredKey = new Array<AsyncServerValue>(len);\n const deferredValue = new Array<AsyncServerValue>(len);\n let deferredSize = 0;\n let nodeSize = 0;\n for (const [key, value] of current.entries()) {\n // Either key or value might be an iterable\n if (isIterable(key) || isIterable(value)) {\n deferredKey[deferredSize] = key;\n deferredValue[deferredSize] = value;\n deferredSize++;\n } else {\n keyNodes[nodeSize] = await this.parse(key);\n valueNodes[nodeSize] = await this.parse(value);\n nodeSize++;\n }\n }\n for (let i = 0; i < deferredSize; i++) {\n keyNodes[nodeSize + i] = await this.parse(deferredKey[i]);\n valueNodes[nodeSize + i] = await this.parse(deferredValue[i]);\n }\n return new SerovalMapNode(id, new SerovalMapRecordNode(keyNodes, valueNodes, len));\n }\n\n async generateSetNode(\n id: number,\n current: Set<AsyncServerValue>,\n ): Promise<SerovalSetNode> {\n assert(this.ctx.features & Feature.Set, 'Unsupported type \"Set\"');\n const len = current.size;\n const nodes = new Array<SerovalNode>(len);\n const deferred = new Array<AsyncServerValue>(len);\n let deferredSize = 0;\n let nodeSize = 0;\n for (const item of current.keys()) {\n // Iterables are lazy, so the evaluation must be deferred\n if (isIterable(item)) {\n deferred[deferredSize++] = item;\n } else {\n nodes[nodeSize++] = await this.parse(item);\n }\n }\n // Parse deferred items\n for (let i = 0; i < deferredSize; i++) {\n nodes[nodeSize + i] = await this.parse(deferred[i]);\n }\n return new SerovalSetNode(id, nodes);\n }\n\n async generateProperties(\n properties: Record<string, AsyncServerValue>,\n ): Promise<SerovalObjectRecordNode> {\n const keys = Object.keys(properties);\n const size = keys.length;\n const keyNodes = new Array<string>(size);\n const valueNodes = new Array<SerovalNode>(size);\n const deferredKeys = new Array<string>(size);\n const deferredValues = new Array<AsyncServerValue>(size);\n let deferredSize = 0;\n let nodesSize = 0;\n let item: AsyncServerValue;\n for (const key of keys) {\n item = properties[key];\n if (isIterable(item)) {\n deferredKeys[deferredSize] = key;\n deferredValues[deferredSize] = item;\n deferredSize++;\n } else {\n keyNodes[nodesSize] = key;\n valueNodes[nodesSize] = await this.parse(item);\n nodesSize++;\n }\n }\n for (let i = 0; i < deferredSize; i++) {\n keyNodes[nodesSize + i] = deferredKeys[i];\n valueNodes[nodesSize + i] = await this.parse(deferredValues[i]);\n }\n return new SerovalObjectRecordNode(keyNodes, valueNodes, size);\n }\n\n async generateIterableNode(\n id: number,\n current: Iterable<AsyncServerValue>,\n ): Promise<SerovalIterableNode> {\n assert(this.ctx.features & Feature.SymbolIterator, 'Unsupported type \"Iterable\"');\n const options = getIterableOptions(current);\n return new SerovalIterableNode(\n id,\n // Parse options first before the items\n options\n ? await this.generateProperties(options as Record<string, AsyncServerValue>)\n : undefined,\n await this.generateNodeList(Array.from(current)),\n );\n }\n\n async generatePromiseNode(\n id: number,\n current: PromiseLike<AsyncServerValue>,\n ): Promise<SerovalPromiseNode> {\n assert(this.ctx.features & Feature.Promise, 'Unsupported type \"Promise\"');\n return current.then(async (value) => new SerovalPromiseNode(id, await this.parse(value)));\n }\n\n async generateObjectNode(\n id: number,\n current: ObjectLikeValue,\n empty: boolean,\n ): Promise<ObjectLikeNode> {\n if (Symbol.iterator in current) {\n return this.generateIterableNode(id, current);\n }\n if ('then' in current && typeof current.then === 'function') {\n return this.generatePromiseNode(id, current as PromiseLike<AsyncServerValue>);\n }\n const properties = await this.generateProperties(current as Record<string, AsyncServerValue>);\n if (empty) {\n return new SerovalNullConstructorNode(id, properties);\n }\n return new SerovalObjectNode(id, properties);\n }\n\n async generateAggregateErrorNode(\n id: number,\n current: AggregateError,\n ): Promise<SerovalAggregateErrorNode> {\n const options = getErrorOptions(current);\n const optionsNode = options\n ? await this.generateProperties(options)\n : undefined;\n return new SerovalAggregateErrorNode(\n id,\n current.message,\n optionsNode,\n await this.parse(current.errors),\n );\n }\n\n async generateErrorNode(\n id: number,\n current: Error,\n ): Promise<SerovalErrorNode> {\n const options = getErrorOptions(current);\n const optionsNode = options\n ? await this.generateProperties(options)\n : undefined;\n return new SerovalErrorNode(id, getErrorConstructor(current), current.message, optionsNode);\n }\n\n async parse(current: AsyncServerValue): Promise<SerovalNode> {\n switch (typeof current) {\n case 'boolean':\n return current ? TRUE_NODE : FALSE_NODE;\n case 'undefined':\n return UNDEFINED_NODE;\n case 'string':\n return new SerovalPrimitiveNode(quote(current));\n case 'number':\n if (Object.is(current, -0)) {\n return NEG_ZERO_NODE;\n }\n if (Object.is(current, Infinity)) {\n return INFINITY_NODE;\n }\n if (Object.is(current, -Infinity)) {\n return NEG_INFINITY_NODE;\n }\n return new SerovalPrimitiveNode(current);\n case 'bigint':\n assert(this.ctx.features & Feature.BigInt, 'Unsupported type \"BigInt\"');\n return new SerovalBigIntNode(current);\n case 'object': {\n if (!current) {\n return NULL_NODE;\n }\n // Non-primitive values needs a reference ID\n // mostly because the values themselves are stateful\n const id = createRef(this.ctx, current, true);\n if (this.ctx.markedRefs[id]) {\n return new SerovalReferenceNode(id);\n }\n if (Array.isArray(current)) {\n return this.generateArrayNode(id, current);\n }\n switch (current.constructor) {\n case Date:\n return new SerovalDateNode(id, current as Date);\n case RegExp:\n return new SerovalRegExpNode(id, current as RegExp);\n case Promise:\n return this.generatePromiseNode(id, current as Promise<AsyncServerValue>);\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 assert(this.ctx.features & Feature.TypedArray, `Unsupported value type \"${current.constructor.name}\"`);\n return new SerovalTypedArrayNode(id, current as TypedArrayValue);\n case BigInt64Array:\n case BigUint64Array:\n assert(\n this.ctx.features & (Feature.BigIntTypedArray),\n `Unsupported value type \"${current.constructor.name}\"`,\n );\n return new SerovalBigIntTypedArrayNode(id, current as BigIntTypedArrayValue);\n case Map:\n return this.generateMapNode(id, current as Map<AsyncServerValue, AsyncServerValue>);\n case Set:\n return this.generateSetNode(id, current as Set<AsyncServerValue>);\n case Object:\n return this.generateObjectNode(id, current as Record<string, AsyncServerValue>, false);\n case undefined:\n return this.generateObjectNode(id, current as Record<string, AsyncServerValue>, true);\n case AggregateError:\n if (this.ctx.features & Feature.AggregateError) {\n return this.generateAggregateErrorNode(id, current as AggregateError);\n }\n return this.generateErrorNode(id, current as AggregateError);\n case Error:\n case EvalError:\n case RangeError:\n case ReferenceError:\n case SyntaxError:\n case TypeError:\n case URIError:\n return this.generateErrorNode(id, current as Error);\n default:\n break;\n }\n if (current instanceof AggregateError && this.ctx.features & Feature.AggregateError) {\n return this.generateAggregateErrorNode(id, current);\n }\n if (current instanceof Error) {\n return this.generateErrorNode(id, current);\n }\n if (current instanceof Promise) {\n return this.generatePromiseNode(id, current);\n }\n // Generator functions don't have a global constructor\n if (Symbol.iterator in current) {\n return this.generateIterableNode(id, current);\n }\n // For Promise-like objects\n if ('then' in current && typeof current.then === 'function') {\n return this.generatePromiseNode(id, current as PromiseLike<AsyncServerValue>);\n }\n throw new Error('Unsupported type');\n }\n default:\n throw new Error('Unsupported type');\n }\n }\n}\n\nexport default async function parseAsync(\n ctx: ParserContext,\n current: AsyncServerValue,\n) {\n const result = await new AsyncParser(ctx).parse(current);\n const isObject = result.t === SerovalNodeType.Object\n || result.t === SerovalNodeType.Iterable;\n return [result, createRef(ctx, current, false), isObject] as const;\n}\n", "/* eslint-disable @typescript-eslint/no-use-before-define */\nimport { Feature } from '../compat';\nimport {\n SerializationContext,\n Assignment,\n getRefParam,\n markRef,\n} from '../context';\nimport quote from '../quote';\nimport { isReferenceInStack } from './shared';\nimport {\n SerovalAggregateErrorNode,\n SerovalArrayNode,\n SerovalBigIntTypedArrayNode,\n SerovalErrorNode,\n SerovalIterableNode,\n SerovalMapNode,\n SerovalNode,\n SerovalNodeType,\n SerovalNullConstructorNode,\n SerovalObjectRecordNode,\n SerovalPromiseNode,\n SerovalSetNode,\n SerovalTypedArrayNode,\n} from './types';\n\nfunction getAssignmentExpression(assignment: Assignment): string {\n switch (assignment.type) {\n case 'index':\n return `${assignment.source}=${assignment.value}`;\n case 'map':\n return `${assignment.source}.set(${assignment.key},${assignment.value})`;\n case 'set':\n return `${assignment.source}.add(${assignment.value})`;\n default:\n return '';\n }\n}\n\nfunction mergeAssignments(assignments: Assignment[]) {\n const newAssignments = [];\n let current = assignments[0];\n let prev = current;\n for (let i = 1, len = assignments.length; i < len; i++) {\n const item = assignments[i];\n if (item.type === prev.type) {\n if (item.type === 'index' && item.value === prev.value) {\n // Merge if the right-hand value is the same\n // saves at least 2 chars\n current = {\n type: 'index',\n source: item.source,\n value: getAssignmentExpression(current),\n };\n } else if (item.type === 'map' && item.source === prev.source) {\n // Maps has chaining methods, merge if source is the same\n current = {\n type: 'map',\n source: getAssignmentExpression(current),\n key: item.key,\n value: item.value,\n };\n } else if (item.type === 'set' && item.source === prev.source) {\n // Sets has chaining methods too\n current = {\n type: 'set',\n source: getAssignmentExpression(current),\n value: item.value,\n };\n } else {\n // Different assignment, push current\n newAssignments.push(current);\n current = item;\n }\n } else {\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[]) {\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\nexport function resolvePatches(ctx: SerializationContext) {\n return resolveAssignments(ctx.assignments);\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 */\nfunction assignRef(\n ctx: SerializationContext,\n index: number,\n value: string,\n) {\n if (ctx.markedRefs[index]) {\n return `${getRefParam(ctx, index)}=${value}`;\n }\n return value;\n}\n\nfunction createAssignment(\n ctx: SerializationContext,\n source: string,\n value: string,\n) {\n ctx.assignments.push({\n type: 'index',\n source,\n value,\n });\n}\n\nfunction createSetAdd(\n ctx: SerializationContext,\n ref: number,\n value: string,\n) {\n markRef(ctx, ref);\n ctx.assignments.push({\n type: 'set',\n source: getRefParam(ctx, ref),\n value,\n });\n}\n\nfunction createMapSet(\n ctx: SerializationContext,\n ref: number,\n key: string,\n value: string,\n) {\n markRef(ctx, ref);\n ctx.assignments.push({\n type: 'map',\n source: getRefParam(ctx, ref),\n key,\n value,\n });\n}\n\nfunction createArrayAssign(\n ctx: SerializationContext,\n ref: number,\n index: number | string,\n value: string,\n) {\n markRef(ctx, ref);\n createAssignment(ctx, `${getRefParam(ctx, ref)}[${index}]`, value);\n}\n\nfunction createObjectAssign(\n ctx: SerializationContext,\n ref: number,\n key: string,\n value: string,\n) {\n markRef(ctx, ref);\n createAssignment(ctx, `${getRefParam(ctx, ref)}.${key}`, value);\n}\n\nconst IDENTIFIER_CHECK = /^([$A-Z_][0-9A-Z_$]*)$/i;\n\nfunction serializeAssignments(\n ctx: SerializationContext,\n targetRef: number,\n node: SerovalObjectRecordNode,\n) {\n ctx.stack.push(targetRef);\n const mainAssignments: Assignment[] = [];\n for (let i = 0; i < node.s; i++) {\n const parentStack = ctx.stack;\n ctx.stack = [];\n const refParam = serializeTree(ctx, node.v[i]);\n ctx.stack = parentStack;\n const key = node.k[i];\n const check = Number(key);\n const parentAssignment = ctx.assignments;\n ctx.assignments = mainAssignments;\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 || IDENTIFIER_CHECK.test(key);\n if (isIdentifier && Number.isNaN(check)) {\n createObjectAssign(ctx, targetRef, key, refParam);\n } else {\n createArrayAssign(ctx, targetRef, isIdentifier ? key : quote(key), refParam);\n }\n ctx.assignments = parentAssignment;\n }\n ctx.stack.pop();\n return resolveAssignments(mainAssignments);\n}\n\nfunction serializeObject(\n ctx: SerializationContext,\n sourceID: number,\n node: SerovalObjectRecordNode,\n) {\n if (node.s === 0) {\n return '{}';\n }\n let result = '';\n ctx.stack.push(sourceID);\n for (let i = 0; i < node.s; i++) {\n const key = node.k[i];\n const val = node.v[i];\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 || IDENTIFIER_CHECK.test(key);\n if (isReferenceInStack(ctx, val)) {\n const refParam = getRefParam(ctx, val.i);\n if (isIdentifier && Number.isNaN(check)) {\n createObjectAssign(ctx, sourceID, key, refParam);\n } else {\n createArrayAssign(ctx, sourceID, isIdentifier ? key : quote(key), refParam);\n }\n } else {\n result += `${isIdentifier ? key : quote(key)}:${serializeTree(ctx, val)},`;\n }\n }\n ctx.stack.pop();\n return `{${result.substring(0, result.length - 1)}}`;\n}\n\nfunction serializePromise(\n ctx: SerializationContext,\n node: SerovalPromiseNode,\n) {\n let serialized: string;\n // Check if resolved value is a parent expression\n if (isReferenceInStack(ctx, node.n)) {\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 serialized = `Promise.resolve().then(()=>${getRefParam(ctx, node.n.i)})`;\n } else {\n ctx.stack.push(node.i);\n const result = serializeTree(ctx, node.n);\n ctx.stack.pop();\n // just inline the value/reference here\n serialized = `Promise.resolve(${result})`;\n }\n return assignRef(ctx, node.i, serialized);\n}\n\nfunction serializeTypedArray(\n ctx: SerializationContext,\n node: SerovalTypedArrayNode | SerovalBigIntTypedArrayNode,\n) {\n let args = `[${node.s}]`;\n if (node.l !== 0) {\n args += `,${node.l}`;\n }\n return assignRef(ctx, node.i, `new ${node.c}(${args})`);\n}\n\nfunction serializeSet(\n ctx: SerializationContext,\n node: SerovalSetNode,\n) {\n let serialized = 'new Set';\n const size = node.a.length;\n if (size) {\n let result = '';\n ctx.stack.push(node.i);\n for (let i = 0; i < size; i++) {\n const item = node.a[i];\n if (isReferenceInStack(ctx, item)) {\n createSetAdd(ctx, node.i, getRefParam(ctx, item.i));\n } else {\n // Push directly\n result += `${serializeTree(ctx, item)},`;\n }\n }\n ctx.stack.pop();\n if (result) {\n serialized += `([${result.substring(0, result.length - 1)}])`;\n }\n }\n return assignRef(ctx, node.i, serialized);\n}\n\nfunction serializeMap(\n ctx: SerializationContext,\n node: SerovalMapNode,\n) {\n let serialized = 'new Map';\n if (node.d.s) {\n let result = '';\n ctx.stack.push(node.i);\n for (let i = 0; i < node.d.s; i++) {\n // Check if key is a parent\n const key = node.d.k[i];\n const val = node.d.v[i];\n if (isReferenceInStack(ctx, key)) {\n // Create reference for the map instance\n const keyRef = getRefParam(ctx, key.i);\n // Check if value is a parent\n if (isReferenceInStack(ctx, val)) {\n const valueRef = getRefParam(ctx, val.i);\n // Register an assignment since\n // both key and value are a parent of this\n // Map instance\n createMapSet(ctx, node.i, keyRef, valueRef);\n } else {\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 const parent = ctx.stack;\n ctx.stack = [];\n createMapSet(ctx, node.i, keyRef, serializeTree(ctx, val));\n ctx.stack = parent;\n }\n } else if (isReferenceInStack(ctx, val)) {\n // Create ref for the Map instance\n const valueRef = getRefParam(ctx, val.i);\n // Reset stack for the key serialization\n const parent = ctx.stack;\n ctx.stack = [];\n createMapSet(ctx, node.i, serializeTree(ctx, key), valueRef);\n ctx.stack = parent;\n } else {\n result += `[${serializeTree(ctx, key)},${serializeTree(ctx, val)}],`;\n }\n }\n ctx.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.substring(0, result.length - 1)}])`;\n }\n }\n return assignRef(ctx, node.i, serialized);\n}\n\nfunction serializeNodeList(\n ctx: SerializationContext,\n node: SerovalArrayNode | SerovalIterableNode,\n) {\n // This is different than Map and Set\n // because we also need to serialize\n // the holes of the Array\n const size = node.a.length;\n let values = '';\n for (let i = 0; i < size; i++) {\n const item = node.a[i];\n // Check if index is a hole\n if (item) {\n // Check if item is a parent\n if (isReferenceInStack(ctx, item)) {\n createArrayAssign(ctx, node.i, i, getRefParam(ctx, item.i));\n values += ',';\n } else {\n values += serializeTree(ctx, item);\n if (i < size - 1) {\n values += ',';\n }\n }\n } else {\n // Add an empty item\n values += ',';\n }\n }\n return `[${values}]`;\n}\n\nfunction serializeArray(\n ctx: SerializationContext,\n node: SerovalArrayNode,\n) {\n ctx.stack.push(node.i);\n const result = serializeNodeList(ctx, node);\n ctx.stack.pop();\n return assignRef(ctx, node.i, result);\n}\n\nfunction serializeWithObjectAssign(\n ctx: SerializationContext,\n value: SerovalObjectRecordNode,\n id: number,\n serialized: string,\n) {\n const fields = serializeObject(ctx, id, value);\n if (fields !== '{}') {\n return `Object.assign(${serialized},${fields})`;\n }\n return serialized;\n}\n\nfunction serializeAggregateError(\n ctx: SerializationContext,\n node: SerovalAggregateErrorNode,\n) {\n // Serialize the required arguments\n ctx.stack.push(node.i);\n let serialized = `new AggregateError(${serializeTree(ctx, node.n)},${quote(node.m)})`;\n ctx.stack.pop();\n // `AggregateError` might've been extended\n // either through class or custom properties\n // Make sure to assign extra properties\n if (node.d) {\n if (ctx.features & Feature.ObjectAssign) {\n serialized = serializeWithObjectAssign(ctx, node.d, node.i, serialized);\n } else {\n markRef(ctx, node.i);\n const assignments = serializeAssignments(ctx, node.i, node.d);\n if (assignments) {\n const ref = getRefParam(ctx, node.i);\n return `(${assignRef(ctx, node.i, serialized)},${assignments}${ref})`;\n }\n }\n }\n return assignRef(ctx, node.i, serialized);\n}\n\nfunction serializeError(\n ctx: SerializationContext,\n node: SerovalErrorNode,\n) {\n let serialized = `new ${node.c}(${quote(node.m)})`;\n if (node.d) {\n if (ctx.features & Feature.ObjectAssign) {\n serialized = serializeWithObjectAssign(ctx, node.d, node.i, serialized);\n } else {\n markRef(ctx, node.i);\n const assignments = serializeAssignments(ctx, node.i, node.d);\n if (assignments) {\n const ref = getRefParam(ctx, node.i);\n return `(${assignRef(ctx, node.i, serialized)},${assignments}${ref})`;\n }\n }\n }\n return assignRef(ctx, node.i, serialized);\n}\n\nfunction serializeIterable(\n ctx: SerializationContext,\n node: SerovalIterableNode,\n) {\n const parent = ctx.stack;\n ctx.stack = [];\n const values = serializeNodeList(ctx, node);\n ctx.stack = parent;\n let serialized: string;\n if (ctx.features & Feature.ArrayPrototypeValues) {\n serialized = `${values}.values()`;\n } else {\n serialized = `${values}[Symbol.iterator]()`;\n }\n if (ctx.features & Feature.ArrowFunction) {\n serialized = `{[Symbol.iterator]:()=>${serialized}}`;\n } else if (ctx.features & Feature.MethodShorthand) {\n serialized = `{[Symbol.iterator](){return ${serialized}}}`;\n } else {\n serialized = `{[Symbol.iterator]:function(){return ${serialized}}}`;\n }\n if (node.d) {\n if (ctx.features & Feature.ObjectAssign) {\n serialized = serializeWithObjectAssign(ctx, node.d, node.i, serialized);\n } else {\n markRef(ctx, node.i);\n const assignments = serializeAssignments(ctx, node.i, node.d);\n if (assignments) {\n const ref = getRefParam(ctx, node.i);\n return `(${assignRef(ctx, node.i, serialized)},${assignments}${ref})`;\n }\n }\n }\n return assignRef(ctx, node.i, serialized);\n}\n\nfunction serializeNullConstructor(\n ctx: SerializationContext,\n node: SerovalNullConstructorNode,\n) {\n let serialized = 'Object.create(null)';\n if (ctx.features & Feature.ObjectAssign) {\n serialized = serializeWithObjectAssign(ctx, node.d, node.i, serialized);\n } else {\n markRef(ctx, node.i);\n const assignments = serializeAssignments(ctx, node.i, node.d);\n if (assignments) {\n const ref = getRefParam(ctx, node.i);\n return `(${assignRef(ctx, node.i, serialized)},${assignments}${ref})`;\n }\n }\n return assignRef(ctx, node.i, serialized);\n}\n\nexport default function serializeTree(\n ctx: SerializationContext,\n node: SerovalNode,\n): string {\n switch (node.t) {\n case SerovalNodeType.Primitive:\n return String(node.s);\n case SerovalNodeType.Reference:\n return getRefParam(ctx, node.i);\n case SerovalNodeType.Promise:\n return serializePromise(ctx, node);\n case SerovalNodeType.BigInt:\n return node.s;\n case SerovalNodeType.Date:\n return assignRef(ctx, node.i, `new Date(\"${node.s}\")`);\n case SerovalNodeType.RegExp:\n return assignRef(ctx, node.i, node.s);\n case SerovalNodeType.BigIntTypedArray:\n case SerovalNodeType.TypedArray:\n return serializeTypedArray(ctx, node);\n case SerovalNodeType.Set:\n return serializeSet(ctx, node);\n case SerovalNodeType.Map:\n return serializeMap(ctx, node);\n case SerovalNodeType.Array:\n return serializeArray(ctx, node);\n case SerovalNodeType.AggregateError:\n return serializeAggregateError(ctx, node);\n case SerovalNodeType.Error:\n return serializeError(ctx, node);\n case SerovalNodeType.Iterable:\n return serializeIterable(ctx, node);\n case SerovalNodeType.NullConstructor:\n return serializeNullConstructor(ctx, node);\n case SerovalNodeType.Object:\n return assignRef(ctx, node.i, serializeObject(ctx, node.i, node.d));\n default:\n throw new Error('Unsupported type');\n }\n}\n", "/* eslint-disable @typescript-eslint/no-use-before-define */\nimport assert from '../assert';\nimport { Feature } from '../compat';\nimport { createRef, ParserContext } from '../context';\nimport quote from '../quote';\nimport { BigIntTypedArrayValue, ServerValue, TypedArrayValue } from '../types';\nimport {\n FALSE_NODE,\n INFINITY_NODE,\n NEG_INFINITY_NODE,\n NEG_ZERO_NODE,\n NULL_NODE,\n TRUE_NODE,\n UNDEFINED_NODE,\n} from './primitives';\nimport {\n getErrorConstructor,\n getErrorOptions,\n getIterableOptions,\n isIterable,\n} from './shared';\nimport {\n SerovalAggregateErrorNode,\n SerovalArrayNode,\n SerovalBigIntNode,\n SerovalBigIntTypedArrayNode,\n SerovalDateNode,\n SerovalErrorNode,\n SerovalIterableNode,\n SerovalMapNode,\n SerovalMapRecordNode,\n SerovalNode,\n SerovalNodeType,\n SerovalNullConstructorNode,\n SerovalObjectNode,\n SerovalObjectRecordNode,\n SerovalPrimitiveNode,\n SerovalReferenceNode,\n SerovalRegExpNode,\n SerovalSetNode,\n SerovalTypedArrayNode,\n} from './types';\n\ntype ObjectLikeNode = SerovalObjectNode | SerovalNullConstructorNode | SerovalIterableNode;\n\nclass SyncParser {\n ctx: ParserContext;\n\n constructor(ctx: ParserContext) {\n this.ctx = ctx;\n }\n\n generateNodeList(current: ServerValue[]) {\n const size = current.length;\n const nodes = new Array<SerovalNode>(size);\n const deferred = new Array<ServerValue>(size);\n let item: ServerValue;\n for (let i = 0; i < size; i++) {\n if (i in current) {\n item = current[i];\n if (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 generateArrayNode(id: number, current: ServerValue[]): SerovalArrayNode {\n return new SerovalArrayNode(id, this.generateNodeList(current));\n }\n\n generateMapNode(\n id: number,\n current: Map<ServerValue, ServerValue>,\n ): SerovalMapNode {\n assert(this.ctx.features & Feature.Map, 'Unsupported type \"Map\"');\n const len = current.size;\n const keyNodes = new Array<SerovalNode>(len);\n const valueNodes = new Array<SerovalNode>(len);\n const deferredKey = new Array<ServerValue>(len);\n const deferredValue = new Array<ServerValue>(len);\n let deferredSize = 0;\n let nodeSize = 0;\n for (const [key, value] of current.entries()) {\n // Either key or value might be an iterable\n if (isIterable(key) || isIterable(value)) {\n deferredKey[deferredSize] = key;\n deferredValue[deferredSize] = value;\n deferredSize++;\n } else {\n keyNodes[nodeSize] = this.parse(key);\n valueNodes[nodeSize] = this.parse(value);\n nodeSize++;\n }\n }\n for (let i = 0; i < deferredSize; i++) {\n keyNodes[nodeSize + i] = this.parse(deferredKey[i]);\n valueNodes[nodeSize + i] = this.parse(deferredValue[i]);\n }\n return new SerovalMapNode(id, new SerovalMapRecordNode(keyNodes, valueNodes, len));\n }\n\n generateSetNode(\n id: number,\n current: Set<ServerValue>,\n ): SerovalSetNode {\n assert(this.ctx.features & Feature.Set, 'Unsupported type \"Set\"');\n const len = current.size;\n const nodes = new Array<SerovalNode>(len);\n const deferred = new Array<ServerValue>(len);\n let deferredSize = 0;\n let nodeSize = 0;\n for (const item of current.keys()) {\n // Iterables are lazy, so the evaluation must be deferred\n if (isIterable(item)) {\n deferred[deferredSize++] = item;\n } else {\n nodes[nodeSize++] = this.parse(item);\n }\n }\n // Parse deferred items\n for (let i = 0; i < deferredSize; i++) {\n nodes[nodeSize + i] = this.parse(deferred[i]);\n }\n return new SerovalSetNode(id, nodes);\n }\n\n generateProperties(properties: Record<string, ServerValue>): SerovalObjectRecordNode {\n const keys = Object.keys(properties);\n const size = keys.length;\n const keyNodes = new Array<string>(size);\n const valueNodes = new Array<SerovalNode>(size);\n const deferredKeys = new Array<string>(size);\n const deferredValues = new Array<ServerValue>(size);\n let deferredSize = 0;\n let nodesSize = 0;\n let item: ServerValue;\n for (const key of keys) {\n item = properties[key];\n if (isIterable(item)) {\n deferredKeys[deferredSize] = key;\n deferredValues[deferredSize] = item;\n deferredSize++;\n } else {\n keyNodes[nodesSize] = key;\n valueNodes[nodesSize] = this.parse(item);\n nodesSize++;\n }\n }\n for (let i = 0; i < deferredSize; i++) {\n keyNodes[nodesSize + i] = deferredKeys[i];\n valueNodes[nodesSize + i] = this.parse(deferredValues[i]);\n }\n return {\n k: keyNodes,\n v: valueNodes,\n s: size,\n };\n }\n\n generateIterableNode(\n id: number,\n current: Iterable<ServerValue>,\n ): SerovalIterableNode {\n assert(this.ctx.features & Feature.SymbolIterator, 'Unsupported type \"Iterable\"');\n const options = getIterableOptions(current);\n return new SerovalIterableNode(\n id,\n // Parse options first before the items\n options\n ? this.generateProperties(options as Record<string, ServerValue>)\n : undefined,\n this.generateNodeList(Array.from(current)),\n );\n }\n\n generateObjectNode(\n id: number,\n current: Record<string, ServerValue> | Iterable<ServerValue>,\n empty: boolean,\n ): ObjectLikeNode {\n if (Symbol.iterator in current) {\n return this.generateIterableNode(id, current);\n }\n if (empty) {\n return new SerovalNullConstructorNode(id, this.generateProperties(current));\n }\n return new SerovalObjectNode(id, this.generateProperties(current));\n }\n\n generateAggregateErrorNode(\n id: number,\n current: AggregateError,\n ): SerovalAggregateErrorNode {\n const options = getErrorOptions(current);\n const optionsNode = options\n ? this.generateProperties(options)\n : undefined;\n return new SerovalAggregateErrorNode(\n id,\n current.message,\n optionsNode,\n this.parse(current.errors),\n );\n }\n\n generateErrorNode(\n id: number,\n current: Error,\n ): SerovalErrorNode {\n const options = getErrorOptions(current);\n const optionsNode = options\n ? this.generateProperties(options)\n : undefined;\n return new SerovalErrorNode(id, getErrorConstructor(current), current.message, optionsNode);\n }\n\n parse(current: ServerValue): SerovalNode {\n switch (typeof current) {\n case 'boolean':\n return current ? TRUE_NODE : FALSE_NODE;\n case 'undefined':\n return UNDEFINED_NODE;\n case 'string':\n return new SerovalPrimitiveNode(quote(current));\n case 'number':\n if (Object.is(current, -0)) {\n return NEG_ZERO_NODE;\n }\n if (Object.is(current, Infinity)) {\n return INFINITY_NODE;\n }\n if (Object.is(current, -Infinity)) {\n return NEG_INFINITY_NODE;\n }\n return new SerovalPrimitiveNode(current);\n case 'bigint':\n assert(this.ctx.features & Feature.BigInt, 'Unsupported type \"BigInt\"');\n return new SerovalBigIntNode(current);\n case 'object': {\n if (!current) {\n return NULL_NODE;\n }\n // Non-primitive values needs a reference ID\n // mostly because the values themselves are stateful\n const id = createRef(this.ctx, current, true);\n if (this.ctx.markedRefs[id]) {\n return new SerovalReferenceNode(id);\n }\n if (Array.isArray(current)) {\n return this.generateArrayNode(id, current);\n }\n switch (current.constructor) {\n case Date:\n return new SerovalDateNode(id, current as Date);\n case RegExp:\n return new SerovalRegExpNode(id, current as RegExp);\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 assert(this.ctx.features & Feature.TypedArray, `Unsupported value type \"${current.constructor.name}\"`);\n return new SerovalTypedArrayNode(id, current as TypedArrayValue);\n case BigInt64Array:\n case BigUint64Array:\n assert(\n this.ctx.features & (Feature.BigIntTypedArray),\n `Unsupported value type \"${current.constructor.name}\"`,\n );\n return new SerovalBigIntTypedArrayNode(id, current as BigIntTypedArrayValue);\n case Map:\n return this.generateMapNode(id, current as Map<ServerValue, ServerValue>);\n case Set:\n return this.generateSetNode(id, current as Set<ServerValue>);\n case Object:\n return this.generateObjectNode(id, current as Record<string, ServerValue>, false);\n case undefined:\n return this.generateObjectNode(id, current as Record<string, ServerValue>, true);\n case AggregateError:\n if (this.ctx.features & Feature.AggregateError) {\n return this.generateAggregateErrorNode(id, current as AggregateError);\n }\n return this.generateErrorNode(id, current as AggregateError);\n case Error:\n case EvalError:\n case RangeError:\n case ReferenceError:\n case SyntaxError:\n case TypeError:\n case URIError:\n return this.generateErrorNode(id, current as Error);\n default:\n break;\n }\n if (current instanceof AggregateError && this.ctx.features & Feature.AggregateError) {\n return this.generateAggregateErrorNode(id, current);\n }\n if (current instanceof Error) {\n return this.generateErrorNode(id, current);\n }\n // Generator functions don't have a global constructor\n if (Symbol.iterator in current) {\n return this.generateIterableNode(id, current);\n }\n throw new Error('Unsupported type');\n }\n default:\n throw new Error('Unsupported type');\n }\n }\n}\n\nexport default function parseSync(\n ctx: ParserContext,\n current: ServerValue,\n) {\n const result = new SyncParser(ctx).parse(current);\n const isObject = result.t === SerovalNodeType.Object\n || result.t === SerovalNodeType.Iterable;\n return [result, createRef(ctx, current, false), isObject] as const;\n}\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }