| import type { Stream } from './stream'; | ||
| type SpecialPromise = Promise<unknown> & { | ||
| s?: 1 | 2; | ||
| v?: unknown; | ||
| }; | ||
| export interface PromiseConstructorResolver { | ||
| p: SpecialPromise; | ||
| s: (value: unknown) => void; | ||
| f: (value: unknown) => void; | ||
| } | ||
| export declare const PROMISE_CONSTRUCTOR: () => PromiseConstructorResolver; | ||
| export declare const PROMISE_SUCCESS: (resolver: PromiseConstructorResolver, data: unknown) => void; | ||
| export declare const PROMISE_FAILURE: (resolver: PromiseConstructorResolver, data: unknown) => void; | ||
| export declare const SERIALIZED_PROMISE_CONSTRUCTOR: string; | ||
| export declare const SERIALIZED_PROMISE_SUCCESS: string; | ||
| export declare const SERIALIZED_PROMISE_FAILURE: string; | ||
| interface StreamListener<T> { | ||
| next(value: T): void; | ||
| throw(value: unknown): void; | ||
| return(value: T): void; | ||
| } | ||
| export declare const STREAM_CONSTRUCTOR: () => { | ||
| __SEROVAL_STREAM__: boolean; | ||
| on: (listener: StreamListener<unknown>) => () => void; | ||
| next: (value: unknown) => void; | ||
| throw: (value: unknown) => void; | ||
| return: (value: unknown) => void; | ||
| }; | ||
| export declare const SERIALIZED_STREAM_CONSTRUCTOR: string; | ||
| export interface Sequence { | ||
| v: unknown[]; | ||
| t: number; | ||
| d: number; | ||
| } | ||
| export declare const ITERATOR_CONSTRUCTOR: (symbol: symbol) => (sequence: Sequence) => () => { | ||
| [x: symbol]: () => /*elided*/ any; | ||
| next: () => { | ||
| done: boolean; | ||
| value: unknown; | ||
| }; | ||
| }; | ||
| export declare const SERIALIZED_ITERATOR_CONSTRUCTOR: string; | ||
| export declare const ASYNC_ITERATOR_CONSTRUCTOR: (symbol: symbol, createPromise: typeof PROMISE_CONSTRUCTOR) => (stream: Stream<unknown>) => () => { | ||
| [x: symbol]: () => /*elided*/ any; | ||
| next: () => SpecialPromise | { | ||
| done: boolean; | ||
| value: unknown; | ||
| }; | ||
| }; | ||
| export declare const SERIALIZED_ASYNC_ITERATOR_CONSTRUCTOR: string; | ||
| export declare const ARRAY_BUFFER_CONSTRUCTOR: (length: number, b64: string) => ArrayBuffer; | ||
| export declare const SERIALIZED_ARRAY_BUFFER_CONSTRUCTOR: string; | ||
| export {}; | ||
| //# sourceMappingURL=constructors.d.ts.map |
| {"version":3,"file":"constructors.d.ts","sourceRoot":"","sources":["../../../src/core/constructors.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAEvC,KAAK,cAAc,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG;IAAE,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IAAC,CAAC,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC;AAEpE,MAAM,WAAW,0BAA0B;IACzC,CAAC,EAAE,cAAc,CAAC;IAClB,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;IAC5B,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;CAC7B;AAED,eAAO,MAAM,mBAAmB,QAAO,0BAWtC,CAAC;AAEF,eAAO,MAAM,eAAe,GAC1B,UAAU,0BAA0B,EACpC,MAAM,OAAO,KACZ,IAIF,CAAC;AAEF,eAAO,MAAM,eAAe,GAC1B,UAAU,0BAA0B,EACpC,MAAM,OAAO,KACZ,IAIF,CAAC;AAEF,eAAO,MAAM,8BAA8B,QACK,CAAC;AACjD,eAAO,MAAM,0BAA0B,QACK,CAAC;AAC7C,eAAO,MAAM,0BAA0B,QACK,CAAC;AAE7C,UAAU,cAAc,CAAC,CAAC;IACxB,IAAI,CAAC,KAAK,EAAE,CAAC,GAAG,IAAI,CAAC;IACrB,KAAK,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,CAAC;IAC5B,MAAM,CAAC,KAAK,EAAE,CAAC,GAAG,IAAI,CAAC;CACxB;AAED,eAAO,MAAM,kBAAkB;;mBA+CZ,cAAc,CAAC,OAAO,CAAC;kBACxB,OAAO;mBAMN,OAAO;oBASN,OAAO;CAU1B,CAAC;AAEF,eAAO,MAAM,6BAA6B,QACK,CAAC;AAEhD,MAAM,WAAW,QAAQ;IACvB,CAAC,EAAE,OAAO,EAAE,CAAC;IACb,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;CACX;AAED,eAAO,MAAM,oBAAoB,GAC9B,QAAQ,MAAM,MAAM,UAAU,QAAQ;;;;;;CAuBtC,CAAC;AAEJ,eAAO,MAAM,+BAA+B,QACK,CAAC;AAElD,eAAO,MAAM,0BAA0B,GACpC,QAAQ,MAAM,EAAE,eAAe,OAAO,mBAAmB,MACzD,QAAQ,MAAM,CAAC,OAAO,CAAC;;;;;;CAoFvB,CAAC;AAEJ,eAAO,MAAM,qCAAqC,QACK,CAAC;AAExD,eAAO,MAAM,wBAAwB,GAAI,QAAQ,MAAM,EAAE,KAAK,MAAM,gBAOnE,CAAC;AAEF,eAAO,MAAM,mCAAmC,QACK,CAAC"} |
| import type { SerovalMode } from '../plugin'; | ||
| import type { SerovalNode } from '../types'; | ||
| import type { BaseParserContext, BaseParserContextOptions } from './parser'; | ||
| export type AsyncParserContextOptions = BaseParserContextOptions; | ||
| export interface AsyncParserContext { | ||
| base: BaseParserContext; | ||
| child: AsyncParsePluginContext | undefined; | ||
| } | ||
| export declare function createAsyncParserContext(mode: SerovalMode, options: AsyncParserContextOptions): AsyncParserContext; | ||
| export declare class AsyncParsePluginContext { | ||
| private _p; | ||
| constructor(_p: AsyncParserContext); | ||
| parse<T>(current: T): Promise<SerovalNode>; | ||
| } | ||
| export declare function parseObjectAsync(ctx: AsyncParserContext, id: number, current: object): Promise<SerovalNode>; | ||
| export declare function parseFunctionAsync(ctx: AsyncParserContext, current: unknown): Promise<SerovalNode>; | ||
| export declare function parseAsync<T>(ctx: AsyncParserContext, current: T): Promise<SerovalNode>; | ||
| export declare function parseTopAsync<T>(ctx: AsyncParserContext, current: T): Promise<SerovalNode>; | ||
| //# sourceMappingURL=async-parser.d.ts.map |
| {"version":3,"file":"async-parser.d.ts","sourceRoot":"","sources":["../../../../src/core/context/async-parser.ts"],"names":[],"mappings":"AA4BA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAW7C,OAAO,KAAK,EAQV,WAAW,EAUZ,MAAM,UAAU,CAAC;AAQlB,OAAO,KAAK,EAAE,iBAAiB,EAAE,wBAAwB,EAAE,MAAM,UAAU,CAAC;AAoB5E,MAAM,MAAM,yBAAyB,GAAG,wBAAwB,CAAC;AAEjE,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,iBAAiB,CAAC;IACxB,KAAK,EAAE,uBAAuB,GAAG,SAAS,CAAC;CAC5C;AAED,wBAAgB,wBAAwB,CACtC,IAAI,EAAE,WAAW,EACjB,OAAO,EAAE,yBAAyB,GACjC,kBAAkB,CAKpB;AAED,qBAAa,uBAAuB;IACtB,OAAO,CAAC,EAAE;gBAAF,EAAE,EAAE,kBAAkB;IAE1C,KAAK,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,GAAG,OAAO,CAAC,WAAW,CAAC;CAG3C;AA4SD,wBAAsB,gBAAgB,CACpC,GAAG,EAAE,kBAAkB,EACvB,EAAE,EAAE,MAAM,EACV,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,WAAW,CAAC,CAgHtB;AAED,wBAAsB,kBAAkB,CACtC,GAAG,EAAE,kBAAkB,EACvB,OAAO,EAAE,OAAO,GACf,OAAO,CAAC,WAAW,CAAC,CAUtB;AAED,wBAAsB,UAAU,CAAC,CAAC,EAChC,GAAG,EAAE,kBAAkB,EACvB,OAAO,EAAE,CAAC,GACT,OAAO,CAAC,WAAW,CAAC,CA4BtB;AAED,wBAAsB,aAAa,CAAC,CAAC,EACnC,GAAG,EAAE,kBAAkB,EACvB,OAAO,EAAE,CAAC,GACT,OAAO,CAAC,WAAW,CAAC,CAQtB"} |
| import { SerovalMode } from '../plugin'; | ||
| import type { SerovalNode } from '../types'; | ||
| import type { BaseParserContext, BaseParserContextOptions } from './parser'; | ||
| export type SyncParserContextOptions = BaseParserContextOptions; | ||
| declare const enum ParserMode { | ||
| Sync = 1, | ||
| Stream = 2 | ||
| } | ||
| export interface SyncParserContext { | ||
| type: ParserMode.Sync; | ||
| base: BaseParserContext; | ||
| child: SyncParsePluginContext | undefined; | ||
| } | ||
| export declare function createSyncParserContext(mode: SerovalMode, options: SyncParserContextOptions): SyncParserContext; | ||
| export declare class SyncParsePluginContext { | ||
| private _p; | ||
| constructor(_p: SyncParserContext); | ||
| parse<T>(current: T): SerovalNode; | ||
| } | ||
| export interface StreamParserContextOptions extends SyncParserContextOptions { | ||
| onParse: (node: SerovalNode, initial: boolean) => void; | ||
| onError?: (error: unknown) => void; | ||
| onDone?: () => void; | ||
| } | ||
| export interface StreamParserContext { | ||
| type: ParserMode.Stream; | ||
| base: BaseParserContext; | ||
| child: StreamParsePluginContext | undefined; | ||
| state: StreamParserState; | ||
| } | ||
| export declare class StreamParsePluginContext { | ||
| private _p; | ||
| constructor(_p: StreamParserContext); | ||
| parse<T>(current: T): SerovalNode; | ||
| parseWithError<T>(current: T): SerovalNode | undefined; | ||
| isAlive(): boolean; | ||
| pushPendingState(): void; | ||
| popPendingState(): void; | ||
| onParse(node: SerovalNode): void; | ||
| onError(error: unknown): void; | ||
| } | ||
| interface StreamParserState { | ||
| alive: boolean; | ||
| pending: number; | ||
| initial: boolean; | ||
| buffer: SerovalNode[]; | ||
| onParse: (node: SerovalNode, initial: boolean) => void; | ||
| onError?: (error: unknown) => void; | ||
| onDone?: () => void; | ||
| } | ||
| export declare function createStreamParserContext(options: StreamParserContextOptions): StreamParserContext; | ||
| type SOSParserContext = SyncParserContext | StreamParserContext; | ||
| export declare function parseSOS<T>(ctx: SOSParserContext, current: T): SerovalNode; | ||
| export declare function parseTop<T>(ctx: SyncParserContext, current: T): SerovalNode; | ||
| export declare function parseWithError<T>(ctx: StreamParserContext, current: T): SerovalNode | undefined; | ||
| export declare function startStreamParse<T>(ctx: StreamParserContext, current: T): void; | ||
| export declare function destroyStreamParse(ctx: StreamParserContext): void; | ||
| export {}; | ||
| //# sourceMappingURL=sync-parser.d.ts.map |
| {"version":3,"file":"sync-parser.d.ts","sourceRoot":"","sources":["../../../../src/core/context/sync-parser.ts"],"names":[],"mappings":"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"} |
| export declare const SYM_ASYNC_ITERATOR: typeof Symbol.asyncIterator; | ||
| export declare const SYM_HAS_INSTANCE: typeof Symbol.hasInstance; | ||
| export declare const SYM_IS_CONCAT_SPREADABLE: typeof Symbol.isConcatSpreadable; | ||
| export declare const SYM_ITERATOR: typeof Symbol.iterator; | ||
| export declare const SYM_MATCH: typeof Symbol.match; | ||
| export declare const SYM_MATCH_ALL: typeof Symbol.matchAll; | ||
| export declare const SYM_REPLACE: typeof Symbol.replace; | ||
| export declare const SYM_SEARCH: typeof Symbol.search; | ||
| export declare const SYM_SPECIES: typeof Symbol.species; | ||
| export declare const SYM_SPLIT: typeof Symbol.split; | ||
| export declare const SYM_TO_PRIMITIVE: typeof Symbol.toPrimitive; | ||
| export declare const SYM_TO_STRING_TAG: typeof Symbol.toStringTag; | ||
| export declare const SYM_UNSCOPABLES: typeof Symbol.unscopables; | ||
| //# sourceMappingURL=symbols.d.ts.map |
| {"version":3,"file":"symbols.d.ts","sourceRoot":"","sources":["../../../src/core/symbols.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,kBAAkB,EAAE,OAAO,MAAM,CAAC,aAAoC,CAAC;AACpF,eAAO,MAAM,gBAAgB,EAAE,OAAO,MAAM,CAAC,WAAgC,CAAC;AAC9E,eAAO,MAAM,wBAAwB,EAAE,OAAO,MAAM,CAAC,kBAA8C,CAAC;AACpG,eAAO,MAAM,YAAY,EAAE,OAAO,MAAM,CAAC,QAA0B,CAAC;AACpE,eAAO,MAAM,SAAS,EAAE,OAAO,MAAM,CAAC,KAAoB,CAAC;AAC3D,eAAO,MAAM,aAAa,EAAE,OAAO,MAAM,CAAC,QAA0B,CAAC;AACrE,eAAO,MAAM,WAAW,EAAE,OAAO,MAAM,CAAC,OAAwB,CAAC;AACjE,eAAO,MAAM,UAAU,EAAE,OAAO,MAAM,CAAC,MAAsB,CAAC;AAC9D,eAAO,MAAM,WAAW,EAAE,OAAO,MAAM,CAAC,OAAwB,CAAC;AACjE,eAAO,MAAM,SAAS,EAAE,OAAO,MAAM,CAAC,KAAoB,CAAC;AAC3D,eAAO,MAAM,gBAAgB,EAAE,OAAO,MAAM,CAAC,WAAgC,CAAC;AAC9E,eAAO,MAAM,iBAAiB,EAAE,OAAO,MAAM,CAAC,WAAgC,CAAC;AAC/E,eAAO,MAAM,eAAe,EAAE,OAAO,MAAM,CAAC,WAAgC,CAAC"} |
| import type { Stream } from './stream'; | ||
| type SpecialPromise = Promise<unknown> & { s?: 1 | 2; v?: unknown }; | ||
| export interface PromiseConstructorResolver { | ||
| p: SpecialPromise; | ||
| s: (value: unknown) => void; | ||
| f: (value: unknown) => void; | ||
| } | ||
| export const PROMISE_CONSTRUCTOR = (): PromiseConstructorResolver => { | ||
| const resolver = { | ||
| p: 0, | ||
| s: 0, | ||
| f: 0, | ||
| } as unknown as PromiseConstructorResolver; | ||
| resolver.p = new Promise((resolve, reject) => { | ||
| resolver.s = resolve; | ||
| resolver.f = reject; | ||
| }); | ||
| return resolver; | ||
| }; | ||
| export const PROMISE_SUCCESS = ( | ||
| resolver: PromiseConstructorResolver, | ||
| data: unknown, | ||
| ): void => { | ||
| resolver.s(data); | ||
| resolver.p.s = 1; | ||
| resolver.p.v = data; | ||
| }; | ||
| export const PROMISE_FAILURE = ( | ||
| resolver: PromiseConstructorResolver, | ||
| data: unknown, | ||
| ): void => { | ||
| resolver.f(data); | ||
| resolver.p.s = 2; | ||
| resolver.p.v = data; | ||
| }; | ||
| export const SERIALIZED_PROMISE_CONSTRUCTOR = | ||
| /* @__PURE__ */ PROMISE_CONSTRUCTOR.toString(); | ||
| export const SERIALIZED_PROMISE_SUCCESS = | ||
| /* @__PURE__ */ PROMISE_SUCCESS.toString(); | ||
| export const SERIALIZED_PROMISE_FAILURE = | ||
| /* @__PURE__ */ PROMISE_FAILURE.toString(); | ||
| interface StreamListener<T> { | ||
| next(value: T): void; | ||
| throw(value: unknown): void; | ||
| return(value: T): void; | ||
| } | ||
| export const STREAM_CONSTRUCTOR = () => { | ||
| const buffer: unknown[] = []; | ||
| const listeners: StreamListener<unknown>[] = []; | ||
| let alive = true; | ||
| let success = false; | ||
| let count = 0; | ||
| const flush = ( | ||
| value: unknown, | ||
| mode: keyof StreamListener<unknown>, | ||
| x?: number, | ||
| ) => { | ||
| for (x = 0; x < count; x++) { | ||
| if (listeners[x]) { | ||
| listeners[x][mode](value); | ||
| } | ||
| } | ||
| }; | ||
| const up = ( | ||
| listener: StreamListener<unknown>, | ||
| x?: number, | ||
| z?: number, | ||
| current?: unknown, | ||
| ) => { | ||
| for (x = 0, z = buffer.length; x < z; x++) { | ||
| current = buffer[x]; | ||
| if (!alive && x === z - 1) { | ||
| listener[success ? 'return' : 'throw'](current); | ||
| } else { | ||
| listener.next(current); | ||
| } | ||
| } | ||
| }; | ||
| const on = (listener: StreamListener<unknown>, temp?: number) => { | ||
| if (alive) { | ||
| temp = count++; | ||
| listeners[temp] = listener; | ||
| } | ||
| up(listener); | ||
| return () => { | ||
| if (alive) { | ||
| listeners[temp!] = listeners[count]; | ||
| listeners[count--] = undefined as any; | ||
| } | ||
| }; | ||
| }; | ||
| return { | ||
| __SEROVAL_STREAM__: true, | ||
| on: (listener: StreamListener<unknown>) => on(listener), | ||
| next: (value: unknown) => { | ||
| if (alive) { | ||
| buffer.push(value); | ||
| flush(value, 'next'); | ||
| } | ||
| }, | ||
| throw: (value: unknown) => { | ||
| if (alive) { | ||
| buffer.push(value); | ||
| flush(value, 'throw'); | ||
| alive = false; | ||
| success = false; | ||
| listeners.length = 0; | ||
| } | ||
| }, | ||
| return: (value: unknown) => { | ||
| if (alive) { | ||
| buffer.push(value); | ||
| flush(value, 'return'); | ||
| alive = false; | ||
| success = true; | ||
| listeners.length = 0; | ||
| } | ||
| }, | ||
| }; | ||
| }; | ||
| export const SERIALIZED_STREAM_CONSTRUCTOR = | ||
| /* @__PURE__ */ STREAM_CONSTRUCTOR.toString(); | ||
| export interface Sequence { | ||
| v: unknown[]; | ||
| t: number; | ||
| d: number; | ||
| } | ||
| export const ITERATOR_CONSTRUCTOR = | ||
| (symbol: symbol) => (sequence: Sequence) => () => { | ||
| let index = 0; | ||
| const instance = { | ||
| [symbol]: () => instance, | ||
| next: () => { | ||
| if (index > sequence.d) { | ||
| return { | ||
| done: true, | ||
| value: undefined, | ||
| }; | ||
| } | ||
| const currentIndex = index++; | ||
| const data = sequence.v[currentIndex]; | ||
| if (currentIndex === sequence.t) { | ||
| throw data; | ||
| } | ||
| return { | ||
| done: currentIndex === sequence.d, | ||
| value: data, | ||
| }; | ||
| }, | ||
| }; | ||
| return instance; | ||
| }; | ||
| export const SERIALIZED_ITERATOR_CONSTRUCTOR = | ||
| /* @__PURE__ */ ITERATOR_CONSTRUCTOR.toString(); | ||
| export const ASYNC_ITERATOR_CONSTRUCTOR = | ||
| (symbol: symbol, createPromise: typeof PROMISE_CONSTRUCTOR) => | ||
| (stream: Stream<unknown>) => | ||
| () => { | ||
| let count = 0; | ||
| let doneAt = -1; | ||
| let isThrow = false; | ||
| const buffer: unknown[] = []; | ||
| const pending: PromiseConstructorResolver[] = []; | ||
| const finalize = (i = 0, len = pending.length) => { | ||
| for (; i < len; i++) { | ||
| pending[i].s({ | ||
| done: true, | ||
| value: undefined, | ||
| }); | ||
| } | ||
| }; | ||
| stream.on({ | ||
| next: value => { | ||
| const temp = pending.shift(); | ||
| if (temp) { | ||
| temp.s({ done: false, value }); | ||
| } | ||
| buffer.push(value); | ||
| }, | ||
| throw: value => { | ||
| const temp = pending.shift(); | ||
| if (temp) { | ||
| temp.f(value); | ||
| } | ||
| finalize(); | ||
| doneAt = buffer.length; | ||
| isThrow = true; | ||
| buffer.push(value); | ||
| }, | ||
| return: value => { | ||
| const temp = pending.shift(); | ||
| if (temp) { | ||
| temp.s({ done: true, value }); | ||
| } | ||
| finalize(); | ||
| doneAt = buffer.length; | ||
| buffer.push(value); | ||
| }, | ||
| }); | ||
| const instance = { | ||
| [symbol]: () => instance, | ||
| next: () => { | ||
| if (doneAt === -1) { | ||
| const index = count++; | ||
| if (index >= buffer.length) { | ||
| const temp = createPromise(); | ||
| pending.push(temp); | ||
| return temp.p; | ||
| } | ||
| return { | ||
| done: false, | ||
| value: buffer[index], | ||
| }; | ||
| } | ||
| if (count > doneAt) { | ||
| return { | ||
| done: true, | ||
| value: undefined, | ||
| }; | ||
| } | ||
| const index = count++; | ||
| const value = buffer[index]; | ||
| if (index !== doneAt) { | ||
| return { | ||
| done: false, | ||
| value, | ||
| }; | ||
| } | ||
| if (isThrow) { | ||
| throw value; | ||
| } | ||
| return { | ||
| done: true, | ||
| value, | ||
| }; | ||
| }, | ||
| }; | ||
| return instance; | ||
| }; | ||
| export const SERIALIZED_ASYNC_ITERATOR_CONSTRUCTOR = | ||
| /* @__PURE__ */ ASYNC_ITERATOR_CONSTRUCTOR.toString(); | ||
| export const ARRAY_BUFFER_CONSTRUCTOR = (length: number, b64: string) => { | ||
| const decoded = atob(b64); | ||
| const arr = new Uint8Array(length); | ||
| for (let i = 0; i < length; i++) { | ||
| arr[i] = decoded.charCodeAt(i); | ||
| } | ||
| return arr.buffer; | ||
| }; | ||
| export const SERIALIZED_ARRAY_BUFFER_CONSTRUCTOR = | ||
| /* @__PURE__ */ ARRAY_BUFFER_CONSTRUCTOR.toString(); |
| import { | ||
| createAggregateErrorNode, | ||
| createArrayNode, | ||
| createAsyncIteratorFactoryInstanceNode, | ||
| createBigIntNode, | ||
| createBigIntTypedArrayNode, | ||
| createBoxedNode, | ||
| createDataViewNode, | ||
| createDateNode, | ||
| createErrorNode, | ||
| createIteratorFactoryInstanceNode, | ||
| createNumberNode, | ||
| createPluginNode, | ||
| createRegExpNode, | ||
| createSetNode, | ||
| createStreamConstructorNode, | ||
| createStreamNextNode, | ||
| createStreamReturnNode, | ||
| createStreamThrowNode, | ||
| createStringNode, | ||
| createTypedArrayNode, | ||
| } from '../base-primitives'; | ||
| import { Feature } from '../compat'; | ||
| import { NIL, SerovalNodeType } from '../constants'; | ||
| import { SerovalParserError, SerovalUnsupportedTypeError } from '../errors'; | ||
| import { FALSE_NODE, NULL_NODE, TRUE_NODE, UNDEFINED_NODE } from '../literals'; | ||
| import { createSerovalNode } from '../node'; | ||
| import { OpaqueReference } from '../opaque-reference'; | ||
| import type { SerovalMode } from '../plugin'; | ||
| import { SpecialReference } from '../special-reference'; | ||
| import type { Stream } from '../stream'; | ||
| import { createStreamFromAsyncIterable, isStream } from '../stream'; | ||
| import { serializeString } from '../string'; | ||
| import { | ||
| SYM_ASYNC_ITERATOR, | ||
| SYM_IS_CONCAT_SPREADABLE, | ||
| SYM_ITERATOR, | ||
| SYM_TO_STRING_TAG, | ||
| } from '../symbols'; | ||
| import type { | ||
| SerovalAggregateErrorNode, | ||
| SerovalArrayNode, | ||
| SerovalBigIntTypedArrayNode, | ||
| SerovalBoxedNode, | ||
| SerovalDataViewNode, | ||
| SerovalErrorNode, | ||
| SerovalMapNode, | ||
| SerovalNode, | ||
| SerovalNullConstructorNode, | ||
| SerovalObjectNode, | ||
| SerovalObjectRecordKey, | ||
| SerovalObjectRecordNode, | ||
| SerovalPluginNode, | ||
| SerovalPromiseNode, | ||
| SerovalSetNode, | ||
| SerovalStreamConstructorNode, | ||
| SerovalTypedArrayNode, | ||
| } from '../types'; | ||
| import { getErrorOptions } from '../utils/error'; | ||
| import { iteratorToSequence } from '../utils/iterator-to-sequence'; | ||
| import promiseToResult from '../utils/promise-to-result'; | ||
| import type { | ||
| BigIntTypedArrayValue, | ||
| TypedArrayValue, | ||
| } from '../utils/typed-array'; | ||
| import type { BaseParserContext, BaseParserContextOptions } from './parser'; | ||
| import { | ||
| createArrayBufferNode, | ||
| createBaseParserContext, | ||
| createMapNode, | ||
| createObjectNode, | ||
| getReferenceNode, | ||
| markParserRef, | ||
| parseAsyncIteratorFactory, | ||
| parseIteratorFactory, | ||
| ParserNodeType, | ||
| parseSpecialReference, | ||
| parseWellKnownSymbol, | ||
| } from './parser'; | ||
| type ObjectLikeNode = | ||
| | SerovalObjectNode | ||
| | SerovalNullConstructorNode | ||
| | SerovalPromiseNode; | ||
| export type AsyncParserContextOptions = BaseParserContextOptions; | ||
| export interface AsyncParserContext { | ||
| base: BaseParserContext; | ||
| child: AsyncParsePluginContext | undefined; | ||
| } | ||
| export function createAsyncParserContext( | ||
| mode: SerovalMode, | ||
| options: AsyncParserContextOptions, | ||
| ): AsyncParserContext { | ||
| return { | ||
| base: createBaseParserContext(mode, options), | ||
| child: undefined, | ||
| }; | ||
| } | ||
| export class AsyncParsePluginContext { | ||
| constructor(private _p: AsyncParserContext) {} | ||
| parse<T>(current: T): Promise<SerovalNode> { | ||
| return parseAsync(this._p, current); | ||
| } | ||
| } | ||
| async function parseItems( | ||
| ctx: AsyncParserContext, | ||
| current: unknown[], | ||
| ): Promise<SerovalNode[]> { | ||
| const nodes = []; | ||
| for (let i = 0, len = current.length; i < len; i++) { | ||
| // For consistency in holes | ||
| if (i in current) { | ||
| nodes[i] = await parseAsync(ctx, current[i]); | ||
| } | ||
| } | ||
| return nodes; | ||
| } | ||
| async function parseArray( | ||
| ctx: AsyncParserContext, | ||
| id: number, | ||
| current: unknown[], | ||
| ): Promise<SerovalArrayNode> { | ||
| return createArrayNode(id, current, await parseItems(ctx, current)); | ||
| } | ||
| async function parseProperties( | ||
| ctx: AsyncParserContext, | ||
| properties: Record<string | symbol, unknown>, | ||
| ): Promise<SerovalObjectRecordNode> { | ||
| const entries = Object.entries(properties); | ||
| const keyNodes: SerovalObjectRecordKey[] = []; | ||
| const valueNodes: SerovalNode[] = []; | ||
| for (let i = 0, len = entries.length; i < len; i++) { | ||
| keyNodes.push(serializeString(entries[i][0])); | ||
| valueNodes.push(await parseAsync(ctx, entries[i][1])); | ||
| } | ||
| // Check special properties | ||
| if (SYM_ITERATOR in properties) { | ||
| keyNodes.push(parseWellKnownSymbol(ctx.base, SYM_ITERATOR)); | ||
| valueNodes.push( | ||
| createIteratorFactoryInstanceNode( | ||
| parseIteratorFactory(ctx.base), | ||
| await parseAsync( | ||
| ctx, | ||
| iteratorToSequence(properties as unknown as Iterable<unknown>), | ||
| ), | ||
| ), | ||
| ); | ||
| } | ||
| if (SYM_ASYNC_ITERATOR in properties) { | ||
| keyNodes.push(parseWellKnownSymbol(ctx.base, SYM_ASYNC_ITERATOR)); | ||
| valueNodes.push( | ||
| createAsyncIteratorFactoryInstanceNode( | ||
| parseAsyncIteratorFactory(ctx.base), | ||
| await parseAsync( | ||
| ctx, | ||
| createStreamFromAsyncIterable( | ||
| properties as unknown as AsyncIterable<unknown>, | ||
| ), | ||
| ), | ||
| ), | ||
| ); | ||
| } | ||
| if (SYM_TO_STRING_TAG in properties) { | ||
| keyNodes.push(parseWellKnownSymbol(ctx.base, SYM_TO_STRING_TAG)); | ||
| valueNodes.push(createStringNode(properties[SYM_TO_STRING_TAG] as string)); | ||
| } | ||
| if (SYM_IS_CONCAT_SPREADABLE in properties) { | ||
| keyNodes.push(parseWellKnownSymbol(ctx.base, SYM_IS_CONCAT_SPREADABLE)); | ||
| valueNodes.push( | ||
| properties[SYM_IS_CONCAT_SPREADABLE] ? TRUE_NODE : FALSE_NODE, | ||
| ); | ||
| } | ||
| return { | ||
| k: keyNodes, | ||
| v: valueNodes, | ||
| s: keyNodes.length, | ||
| }; | ||
| } | ||
| async function parsePlainObject( | ||
| ctx: AsyncParserContext, | ||
| id: number, | ||
| current: Record<string, unknown>, | ||
| empty: boolean, | ||
| ): Promise<ObjectLikeNode> { | ||
| return createObjectNode( | ||
| id, | ||
| current, | ||
| empty, | ||
| await parseProperties(ctx, current), | ||
| ); | ||
| } | ||
| // TODO: check if parseBoxedSync can be used | ||
| async function parseBoxed( | ||
| ctx: AsyncParserContext, | ||
| id: number, | ||
| current: object, | ||
| ): Promise<SerovalBoxedNode> { | ||
| return createBoxedNode(id, await parseAsync(ctx, current.valueOf())); | ||
| } | ||
| async function parseTypedArray( | ||
| ctx: AsyncParserContext, | ||
| id: number, | ||
| current: TypedArrayValue, | ||
| ): Promise<SerovalTypedArrayNode> { | ||
| return createTypedArrayNode( | ||
| id, | ||
| current, | ||
| await parseAsync(ctx, current.buffer), | ||
| ); | ||
| } | ||
| async function parseBigIntTypedArray( | ||
| ctx: AsyncParserContext, | ||
| id: number, | ||
| current: BigIntTypedArrayValue, | ||
| ): Promise<SerovalBigIntTypedArrayNode> { | ||
| return createBigIntTypedArrayNode( | ||
| id, | ||
| current, | ||
| await parseAsync(ctx, current.buffer), | ||
| ); | ||
| } | ||
| async function parseDataView( | ||
| ctx: AsyncParserContext, | ||
| id: number, | ||
| current: DataView, | ||
| ): Promise<SerovalDataViewNode> { | ||
| return createDataViewNode(id, current, await parseAsync(ctx, current.buffer)); | ||
| } | ||
| async function parseError( | ||
| ctx: AsyncParserContext, | ||
| id: number, | ||
| current: Error, | ||
| ): Promise<SerovalErrorNode> { | ||
| const options = getErrorOptions(current, ctx.base.features); | ||
| return createErrorNode( | ||
| id, | ||
| current, | ||
| options ? await parseProperties(ctx, options) : NIL, | ||
| ); | ||
| } | ||
| async function parseAggregateError( | ||
| ctx: AsyncParserContext, | ||
| id: number, | ||
| current: AggregateError, | ||
| ): Promise<SerovalAggregateErrorNode> { | ||
| const options = getErrorOptions(current, ctx.base.features); | ||
| return createAggregateErrorNode( | ||
| id, | ||
| current, | ||
| options ? await parseProperties(ctx, options) : NIL, | ||
| ); | ||
| } | ||
| async function parseMap( | ||
| ctx: AsyncParserContext, | ||
| id: number, | ||
| current: Map<unknown, unknown>, | ||
| ): Promise<SerovalMapNode> { | ||
| const keyNodes: SerovalNode[] = []; | ||
| const valueNodes: SerovalNode[] = []; | ||
| for (const [key, value] of current.entries()) { | ||
| keyNodes.push(await parseAsync(ctx, key)); | ||
| valueNodes.push(await parseAsync(ctx, value)); | ||
| } | ||
| return createMapNode(ctx.base, id, keyNodes, valueNodes, current.size); | ||
| } | ||
| async function parseSet( | ||
| ctx: AsyncParserContext, | ||
| id: number, | ||
| current: Set<unknown>, | ||
| ): Promise<SerovalSetNode> { | ||
| const items: SerovalNode[] = []; | ||
| for (const item of current.keys()) { | ||
| items.push(await parseAsync(ctx, item)); | ||
| } | ||
| return createSetNode(id, current.size, items); | ||
| } | ||
| async function parsePlugin( | ||
| ctx: AsyncParserContext, | ||
| id: number, | ||
| current: unknown, | ||
| ): Promise<SerovalPluginNode | undefined> { | ||
| const currentPlugins = ctx.base.plugins; | ||
| if (currentPlugins) { | ||
| for (let i = 0, len = currentPlugins.length; i < len; i++) { | ||
| const plugin = currentPlugins[i]; | ||
| if (plugin.parse.async && plugin.test(current)) { | ||
| if (ctx.child == null) { | ||
| ctx.child = new AsyncParsePluginContext(ctx); | ||
| } | ||
| return createPluginNode( | ||
| id, | ||
| plugin.tag, | ||
| await plugin.parse.async(current, ctx.child, { | ||
| id, | ||
| }), | ||
| ); | ||
| } | ||
| } | ||
| } | ||
| return NIL; | ||
| } | ||
| async function parsePromise( | ||
| ctx: AsyncParserContext, | ||
| id: number, | ||
| current: Promise<unknown>, | ||
| ): Promise<SerovalPromiseNode> { | ||
| const [status, result] = await promiseToResult(current); | ||
| return createSerovalNode( | ||
| SerovalNodeType.Promise, | ||
| id, | ||
| status, | ||
| NIL, | ||
| NIL, | ||
| NIL, | ||
| NIL, | ||
| NIL, | ||
| NIL, | ||
| await parseAsync(ctx, result), | ||
| NIL, | ||
| NIL, | ||
| ); | ||
| } | ||
| function parseStreamHandle<T>( | ||
| this: AsyncParserContext, | ||
| id: number, | ||
| current: Stream<T>, | ||
| resolve: (value: SerovalNode[] | PromiseLike<SerovalNode[]>) => void, | ||
| reject: (reason?: any) => void, | ||
| ): void { | ||
| const sequence: SerovalNode[] = []; | ||
| // TODO Optimizable | ||
| const cleanup = current.on({ | ||
| next: value => { | ||
| markParserRef(this.base, id); | ||
| parseAsync(this, value).then( | ||
| data => { | ||
| sequence.push(createStreamNextNode(id, data)); | ||
| }, | ||
| data => { | ||
| reject(data); | ||
| cleanup(); | ||
| }, | ||
| ); | ||
| }, | ||
| throw: value => { | ||
| markParserRef(this.base, id); | ||
| parseAsync(this, value).then( | ||
| data => { | ||
| sequence.push(createStreamThrowNode(id, data)); | ||
| resolve(sequence); | ||
| cleanup(); | ||
| }, | ||
| data => { | ||
| reject(data); | ||
| cleanup(); | ||
| }, | ||
| ); | ||
| }, | ||
| return: value => { | ||
| markParserRef(this.base, id); | ||
| parseAsync(this, value).then( | ||
| data => { | ||
| sequence.push(createStreamReturnNode(id, data)); | ||
| resolve(sequence); | ||
| cleanup(); | ||
| }, | ||
| data => { | ||
| reject(data); | ||
| cleanup(); | ||
| }, | ||
| ); | ||
| }, | ||
| }); | ||
| } | ||
| async function parseStream( | ||
| ctx: AsyncParserContext, | ||
| id: number, | ||
| current: Stream<unknown>, | ||
| ): Promise<SerovalStreamConstructorNode> { | ||
| return createStreamConstructorNode( | ||
| id, | ||
| parseSpecialReference(ctx.base, SpecialReference.StreamConstructor), | ||
| await new Promise<SerovalNode[]>(parseStreamHandle.bind(ctx, id, current)), | ||
| ); | ||
| } | ||
| export async function parseObjectAsync( | ||
| ctx: AsyncParserContext, | ||
| id: number, | ||
| current: object, | ||
| ): Promise<SerovalNode> { | ||
| if (Array.isArray(current)) { | ||
| return parseArray(ctx, id, current); | ||
| } | ||
| if (isStream(current)) { | ||
| return parseStream(ctx, id, current); | ||
| } | ||
| const currentClass = current.constructor; | ||
| if (currentClass === OpaqueReference) { | ||
| return parseAsync( | ||
| ctx, | ||
| (current as OpaqueReference<unknown, unknown>).replacement, | ||
| ); | ||
| } | ||
| const parsed = await parsePlugin(ctx, id, current); | ||
| if (parsed) { | ||
| return parsed; | ||
| } | ||
| switch (currentClass) { | ||
| case Object: | ||
| return parsePlainObject( | ||
| ctx, | ||
| id, | ||
| current as Record<string, unknown>, | ||
| false, | ||
| ); | ||
| case NIL: | ||
| return parsePlainObject( | ||
| ctx, | ||
| id, | ||
| current as Record<string, unknown>, | ||
| true, | ||
| ); | ||
| case Date: | ||
| return createDateNode(id, current as unknown as Date); | ||
| case RegExp: | ||
| return createRegExpNode(id, current as unknown as RegExp); | ||
| case Error: | ||
| case EvalError: | ||
| case RangeError: | ||
| case ReferenceError: | ||
| case SyntaxError: | ||
| case TypeError: | ||
| case URIError: | ||
| return parseError(ctx, id, current as unknown as Error); | ||
| case Number: | ||
| case Boolean: | ||
| case String: | ||
| case BigInt: | ||
| return parseBoxed(ctx, id, current); | ||
| case ArrayBuffer: | ||
| return createArrayBufferNode( | ||
| ctx.base, | ||
| id, | ||
| current as unknown as ArrayBuffer, | ||
| ); | ||
| case Int8Array: | ||
| case Int16Array: | ||
| case Int32Array: | ||
| case Uint8Array: | ||
| case Uint16Array: | ||
| case Uint32Array: | ||
| case Uint8ClampedArray: | ||
| case Float32Array: | ||
| case Float64Array: | ||
| return parseTypedArray(ctx, id, current as unknown as TypedArrayValue); | ||
| case DataView: | ||
| return parseDataView(ctx, id, current as unknown as DataView); | ||
| case Map: | ||
| return parseMap(ctx, id, current as unknown as Map<unknown, unknown>); | ||
| case Set: | ||
| return parseSet(ctx, id, current as unknown as Set<unknown>); | ||
| default: | ||
| break; | ||
| } | ||
| // Promises | ||
| if (currentClass === Promise || current instanceof Promise) { | ||
| return parsePromise(ctx, id, current as unknown as Promise<unknown>); | ||
| } | ||
| const currentFeatures = ctx.base.features; | ||
| // BigInt Typed Arrays | ||
| if (currentFeatures & Feature.BigIntTypedArray) { | ||
| switch (currentClass) { | ||
| case BigInt64Array: | ||
| case BigUint64Array: | ||
| return parseBigIntTypedArray( | ||
| ctx, | ||
| id, | ||
| current as unknown as BigIntTypedArrayValue, | ||
| ); | ||
| default: | ||
| break; | ||
| } | ||
| } | ||
| if ( | ||
| currentFeatures & Feature.AggregateError && | ||
| typeof AggregateError !== 'undefined' && | ||
| (currentClass === AggregateError || current instanceof AggregateError) | ||
| ) { | ||
| return parseAggregateError(ctx, id, current as unknown as AggregateError); | ||
| } | ||
| // Slow path. We only need to handle Errors and Iterators | ||
| // since they have very broad implementations. | ||
| if (current instanceof Error) { | ||
| return parseError(ctx, id, current); | ||
| } | ||
| // Generator functions don't have a global constructor | ||
| // despite existing | ||
| if (SYM_ITERATOR in current || SYM_ASYNC_ITERATOR in current) { | ||
| return parsePlainObject(ctx, id, current, !!currentClass); | ||
| } | ||
| throw new SerovalUnsupportedTypeError(current); | ||
| } | ||
| export async function parseFunctionAsync( | ||
| ctx: AsyncParserContext, | ||
| current: unknown, | ||
| ): Promise<SerovalNode> { | ||
| const ref = getReferenceNode(ctx.base, current); | ||
| if (ref.type !== ParserNodeType.Fresh) { | ||
| return ref.value; | ||
| } | ||
| const plugin = await parsePlugin(ctx, ref.value, current); | ||
| if (plugin) { | ||
| return plugin; | ||
| } | ||
| throw new SerovalUnsupportedTypeError(current); | ||
| } | ||
| export async function parseAsync<T>( | ||
| ctx: AsyncParserContext, | ||
| current: T, | ||
| ): Promise<SerovalNode> { | ||
| switch (typeof current) { | ||
| case 'boolean': | ||
| return current ? TRUE_NODE : FALSE_NODE; | ||
| case 'undefined': | ||
| return UNDEFINED_NODE; | ||
| case 'string': | ||
| return createStringNode(current as string); | ||
| case 'number': | ||
| return createNumberNode(current as number); | ||
| case 'bigint': | ||
| return createBigIntNode(current as bigint); | ||
| case 'object': { | ||
| if (current) { | ||
| const ref = getReferenceNode(ctx.base, current); | ||
| return ref.type === 0 | ||
| ? await parseObjectAsync(ctx, ref.value, current as object) | ||
| : ref.value; | ||
| } | ||
| return NULL_NODE; | ||
| } | ||
| case 'symbol': | ||
| return parseWellKnownSymbol(ctx.base, current); | ||
| case 'function': | ||
| return parseFunctionAsync(ctx, current); | ||
| default: | ||
| throw new SerovalUnsupportedTypeError(current); | ||
| } | ||
| } | ||
| export async function parseTopAsync<T>( | ||
| ctx: AsyncParserContext, | ||
| current: T, | ||
| ): Promise<SerovalNode> { | ||
| try { | ||
| return await parseAsync(ctx, current); | ||
| } catch (error) { | ||
| throw error instanceof SerovalParserError | ||
| ? error | ||
| : new SerovalParserError(error); | ||
| } | ||
| } |
| import { | ||
| createAggregateErrorNode, | ||
| createArrayNode, | ||
| createAsyncIteratorFactoryInstanceNode, | ||
| createBigIntNode, | ||
| createBigIntTypedArrayNode, | ||
| createBoxedNode, | ||
| createDataViewNode, | ||
| createDateNode, | ||
| createErrorNode, | ||
| createIteratorFactoryInstanceNode, | ||
| createNumberNode, | ||
| createPluginNode, | ||
| createRegExpNode, | ||
| createSetNode, | ||
| createStreamConstructorNode, | ||
| createStreamNextNode, | ||
| createStreamReturnNode, | ||
| createStreamThrowNode, | ||
| createStringNode, | ||
| createTypedArrayNode, | ||
| } from '../base-primitives'; | ||
| import { Feature } from '../compat'; | ||
| import { NIL, SerovalNodeType } from '../constants'; | ||
| import { SerovalParserError, SerovalUnsupportedTypeError } from '../errors'; | ||
| import { FALSE_NODE, NULL_NODE, TRUE_NODE, UNDEFINED_NODE } from '../literals'; | ||
| import { createSerovalNode } from '../node'; | ||
| import { OpaqueReference } from '../opaque-reference'; | ||
| import { type Plugin, SerovalMode } from '../plugin'; | ||
| import { SpecialReference } from '../special-reference'; | ||
| import type { Stream } from '../stream'; | ||
| import { | ||
| createStream, | ||
| createStreamFromAsyncIterable, | ||
| isStream, | ||
| } from '../stream'; | ||
| import { serializeString } from '../string'; | ||
| import { | ||
| SYM_ASYNC_ITERATOR, | ||
| SYM_IS_CONCAT_SPREADABLE, | ||
| SYM_ITERATOR, | ||
| SYM_TO_STRING_TAG, | ||
| } from '../symbols'; | ||
| import type { | ||
| SerovalAggregateErrorNode, | ||
| SerovalArrayNode, | ||
| SerovalBigIntTypedArrayNode, | ||
| SerovalBoxedNode, | ||
| SerovalDataViewNode, | ||
| SerovalErrorNode, | ||
| SerovalMapNode, | ||
| SerovalNode, | ||
| SerovalNullConstructorNode, | ||
| SerovalObjectNode, | ||
| SerovalObjectRecordKey, | ||
| SerovalObjectRecordNode, | ||
| SerovalPluginNode, | ||
| SerovalPromiseConstructorNode, | ||
| SerovalSetNode, | ||
| SerovalTypedArrayNode, | ||
| } from '../types'; | ||
| import { getErrorOptions } from '../utils/error'; | ||
| import { iteratorToSequence } from '../utils/iterator-to-sequence'; | ||
| import type { | ||
| BigIntTypedArrayValue, | ||
| TypedArrayValue, | ||
| } from '../utils/typed-array'; | ||
| import type { BaseParserContext, BaseParserContextOptions } from './parser'; | ||
| import { | ||
| createArrayBufferNode, | ||
| createBaseParserContext, | ||
| createIndexForValue, | ||
| createMapNode, | ||
| createObjectNode, | ||
| createPromiseConstructorNode, | ||
| getReferenceNode, | ||
| parseAsyncIteratorFactory, | ||
| parseIteratorFactory, | ||
| ParserNodeType, | ||
| parseSpecialReference, | ||
| parseWellKnownSymbol, | ||
| } from './parser'; | ||
| type ObjectLikeNode = SerovalObjectNode | SerovalNullConstructorNode; | ||
| export type SyncParserContextOptions = BaseParserContextOptions; | ||
| const enum ParserMode { | ||
| Sync = 1, | ||
| Stream = 2, | ||
| } | ||
| export interface SyncParserContext { | ||
| type: ParserMode.Sync; | ||
| base: BaseParserContext; | ||
| child: SyncParsePluginContext | undefined; | ||
| } | ||
| export function createSyncParserContext( | ||
| mode: SerovalMode, | ||
| options: SyncParserContextOptions, | ||
| ): SyncParserContext { | ||
| return { | ||
| type: ParserMode.Sync, | ||
| base: createBaseParserContext(mode, options), | ||
| child: undefined, | ||
| }; | ||
| } | ||
| export class SyncParsePluginContext { | ||
| constructor(private _p: SyncParserContext) {} | ||
| parse<T>(current: T): SerovalNode { | ||
| return parseSOS(this._p, current); | ||
| } | ||
| } | ||
| export interface StreamParserContextOptions extends SyncParserContextOptions { | ||
| onParse: (node: SerovalNode, initial: boolean) => void; | ||
| onError?: (error: unknown) => void; | ||
| onDone?: () => void; | ||
| } | ||
| export interface StreamParserContext { | ||
| type: ParserMode.Stream; | ||
| base: BaseParserContext; | ||
| child: StreamParsePluginContext | undefined; | ||
| state: StreamParserState; | ||
| } | ||
| export class StreamParsePluginContext { | ||
| constructor(private _p: StreamParserContext) {} | ||
| parse<T>(current: T): SerovalNode { | ||
| return parseSOS(this._p, current); | ||
| } | ||
| parseWithError<T>(current: T): SerovalNode | undefined { | ||
| return parseWithError(this._p, current); | ||
| } | ||
| isAlive(): boolean { | ||
| return this._p.state.alive; | ||
| } | ||
| pushPendingState(): void { | ||
| pushPendingState(this._p); | ||
| } | ||
| popPendingState(): void { | ||
| popPendingState(this._p); | ||
| } | ||
| onParse(node: SerovalNode): void { | ||
| onParse(this._p, node); | ||
| } | ||
| onError(error: unknown): void { | ||
| onError(this._p, error); | ||
| } | ||
| } | ||
| interface StreamParserState { | ||
| // Life cycle | ||
| alive: boolean; | ||
| // Number of pending things | ||
| pending: number; | ||
| // | ||
| initial: boolean; | ||
| // | ||
| buffer: SerovalNode[]; | ||
| // Callbacks | ||
| onParse: (node: SerovalNode, initial: boolean) => void; | ||
| onError?: (error: unknown) => void; | ||
| onDone?: () => void; | ||
| } | ||
| function createStreamParserState( | ||
| options: StreamParserContextOptions, | ||
| ): StreamParserState { | ||
| return { | ||
| alive: true, | ||
| pending: 0, | ||
| initial: true, | ||
| buffer: [], | ||
| onParse: options.onParse, | ||
| onError: options.onError, | ||
| onDone: options.onDone, | ||
| }; | ||
| } | ||
| export function createStreamParserContext( | ||
| options: StreamParserContextOptions, | ||
| ): StreamParserContext { | ||
| return { | ||
| type: ParserMode.Stream, | ||
| base: createBaseParserContext(SerovalMode.Cross, options), | ||
| child: undefined, | ||
| state: createStreamParserState(options), | ||
| }; | ||
| } | ||
| type SOSParserContext = SyncParserContext | StreamParserContext; | ||
| function parseItems(ctx: SOSParserContext, current: unknown[]): SerovalNode[] { | ||
| const nodes = []; | ||
| for (let i = 0, len = current.length; i < len; i++) { | ||
| if (i in current) { | ||
| nodes[i] = parseSOS(ctx, current[i]); | ||
| } | ||
| } | ||
| return nodes; | ||
| } | ||
| function parseArray( | ||
| ctx: SOSParserContext, | ||
| id: number, | ||
| current: unknown[], | ||
| ): SerovalArrayNode { | ||
| return createArrayNode(id, current, parseItems(ctx, current)); | ||
| } | ||
| function parseProperties( | ||
| ctx: SOSParserContext, | ||
| properties: Record<string | symbol, unknown>, | ||
| ): SerovalObjectRecordNode { | ||
| const entries = Object.entries(properties); | ||
| const keyNodes: SerovalObjectRecordKey[] = []; | ||
| const valueNodes: SerovalNode[] = []; | ||
| for (let i = 0, len = entries.length; i < len; i++) { | ||
| keyNodes.push(serializeString(entries[i][0])); | ||
| valueNodes.push(parseSOS(ctx, entries[i][1])); | ||
| } | ||
| // Check special properties, symbols in this case | ||
| if (SYM_ITERATOR in properties) { | ||
| keyNodes.push(parseWellKnownSymbol(ctx.base, SYM_ITERATOR)); | ||
| valueNodes.push( | ||
| createIteratorFactoryInstanceNode( | ||
| parseIteratorFactory(ctx.base), | ||
| parseSOS( | ||
| ctx, | ||
| iteratorToSequence(properties as unknown as Iterable<unknown>), | ||
| ), | ||
| ), | ||
| ); | ||
| } | ||
| if (SYM_ASYNC_ITERATOR in properties) { | ||
| keyNodes.push(parseWellKnownSymbol(ctx.base, SYM_ASYNC_ITERATOR)); | ||
| valueNodes.push( | ||
| createAsyncIteratorFactoryInstanceNode( | ||
| parseAsyncIteratorFactory(ctx.base), | ||
| parseSOS( | ||
| ctx, | ||
| ctx.type === ParserMode.Sync | ||
| ? createStream() | ||
| : createStreamFromAsyncIterable( | ||
| properties as unknown as AsyncIterable<unknown>, | ||
| ), | ||
| ), | ||
| ), | ||
| ); | ||
| } | ||
| if (SYM_TO_STRING_TAG in properties) { | ||
| keyNodes.push(parseWellKnownSymbol(ctx.base, SYM_TO_STRING_TAG)); | ||
| valueNodes.push(createStringNode(properties[SYM_TO_STRING_TAG] as string)); | ||
| } | ||
| if (SYM_IS_CONCAT_SPREADABLE in properties) { | ||
| keyNodes.push(parseWellKnownSymbol(ctx.base, SYM_IS_CONCAT_SPREADABLE)); | ||
| valueNodes.push( | ||
| properties[SYM_IS_CONCAT_SPREADABLE] ? TRUE_NODE : FALSE_NODE, | ||
| ); | ||
| } | ||
| return { | ||
| k: keyNodes, | ||
| v: valueNodes, | ||
| s: keyNodes.length, | ||
| }; | ||
| } | ||
| function parsePlainObject( | ||
| ctx: SOSParserContext, | ||
| id: number, | ||
| current: Record<string, unknown>, | ||
| empty: boolean, | ||
| ): ObjectLikeNode { | ||
| return createObjectNode(id, current, empty, parseProperties(ctx, current)); | ||
| } | ||
| function parseBoxed( | ||
| ctx: SOSParserContext, | ||
| id: number, | ||
| current: object, | ||
| ): SerovalBoxedNode { | ||
| return createBoxedNode(id, parseSOS(ctx, current.valueOf())); | ||
| } | ||
| function parseTypedArray( | ||
| ctx: SOSParserContext, | ||
| id: number, | ||
| current: TypedArrayValue, | ||
| ): SerovalTypedArrayNode { | ||
| return createTypedArrayNode(id, current, parseSOS(ctx, current.buffer)); | ||
| } | ||
| function parseBigIntTypedArray( | ||
| ctx: SOSParserContext, | ||
| id: number, | ||
| current: BigIntTypedArrayValue, | ||
| ): SerovalBigIntTypedArrayNode { | ||
| return createBigIntTypedArrayNode(id, current, parseSOS(ctx, current.buffer)); | ||
| } | ||
| function parseDataView( | ||
| ctx: SOSParserContext, | ||
| id: number, | ||
| current: DataView, | ||
| ): SerovalDataViewNode { | ||
| return createDataViewNode(id, current, parseSOS(ctx, current.buffer)); | ||
| } | ||
| function parseError( | ||
| ctx: SOSParserContext, | ||
| id: number, | ||
| current: Error, | ||
| ): SerovalErrorNode { | ||
| const options = getErrorOptions(current, ctx.base.features); | ||
| return createErrorNode( | ||
| id, | ||
| current, | ||
| options ? parseProperties(ctx, options) : NIL, | ||
| ); | ||
| } | ||
| function parseAggregateError( | ||
| ctx: SOSParserContext, | ||
| id: number, | ||
| current: AggregateError, | ||
| ): SerovalAggregateErrorNode { | ||
| const options = getErrorOptions(current, ctx.base.features); | ||
| return createAggregateErrorNode( | ||
| id, | ||
| current, | ||
| options ? parseProperties(ctx, options) : NIL, | ||
| ); | ||
| } | ||
| function parseMap( | ||
| ctx: SOSParserContext, | ||
| id: number, | ||
| current: Map<unknown, unknown>, | ||
| ): SerovalMapNode { | ||
| const keyNodes: SerovalNode[] = []; | ||
| const valueNodes: SerovalNode[] = []; | ||
| for (const [key, value] of current.entries()) { | ||
| keyNodes.push(parseSOS(ctx, key)); | ||
| valueNodes.push(parseSOS(ctx, value)); | ||
| } | ||
| return createMapNode(ctx.base, id, keyNodes, valueNodes, current.size); | ||
| } | ||
| function parseSet( | ||
| ctx: SOSParserContext, | ||
| id: number, | ||
| current: Set<unknown>, | ||
| ): SerovalSetNode { | ||
| const items: SerovalNode[] = []; | ||
| for (const item of current.keys()) { | ||
| items.push(parseSOS(ctx, item)); | ||
| } | ||
| return createSetNode(id, current.size, items); | ||
| } | ||
| function parseStream( | ||
| ctx: SOSParserContext, | ||
| id: number, | ||
| current: Stream<unknown>, | ||
| ): SerovalNode { | ||
| const result = createStreamConstructorNode( | ||
| id, | ||
| parseSpecialReference(ctx.base, SpecialReference.StreamConstructor), | ||
| [], | ||
| ); | ||
| if (ctx.type === ParserMode.Sync) { | ||
| return result; | ||
| } | ||
| pushPendingState(ctx); | ||
| current.on({ | ||
| next: value => { | ||
| if (ctx.state.alive) { | ||
| const parsed = parseWithError(ctx, value); | ||
| if (parsed) { | ||
| onParse(ctx, createStreamNextNode(id, parsed)); | ||
| } | ||
| } | ||
| }, | ||
| throw: value => { | ||
| if (ctx.state.alive) { | ||
| const parsed = parseWithError(ctx, value); | ||
| if (parsed) { | ||
| onParse(ctx, createStreamThrowNode(id, parsed)); | ||
| } | ||
| } | ||
| popPendingState(ctx); | ||
| }, | ||
| return: value => { | ||
| if (ctx.state.alive) { | ||
| const parsed = parseWithError(ctx, value); | ||
| if (parsed) { | ||
| onParse(ctx, createStreamReturnNode(id, parsed)); | ||
| } | ||
| } | ||
| popPendingState(ctx); | ||
| }, | ||
| }); | ||
| return result; | ||
| } | ||
| function handlePromiseSuccess( | ||
| this: StreamParserContext, | ||
| id: number, | ||
| data: unknown, | ||
| ): void { | ||
| if (this.state.alive) { | ||
| const parsed = parseWithError(this, data); | ||
| if (parsed) { | ||
| onParse( | ||
| this, | ||
| createSerovalNode( | ||
| SerovalNodeType.PromiseSuccess, | ||
| id, | ||
| NIL, | ||
| NIL, | ||
| NIL, | ||
| NIL, | ||
| NIL, | ||
| NIL, | ||
| [ | ||
| parseSpecialReference(this.base, SpecialReference.PromiseSuccess), | ||
| parsed, | ||
| ], | ||
| NIL, | ||
| NIL, | ||
| NIL, | ||
| ), | ||
| ); | ||
| } | ||
| popPendingState(this); | ||
| } | ||
| } | ||
| function handlePromiseFailure( | ||
| this: StreamParserContext, | ||
| id: number, | ||
| data: unknown, | ||
| ): void { | ||
| if (this.state.alive) { | ||
| const parsed = parseWithError(this, data); | ||
| if (parsed) { | ||
| onParse( | ||
| this, | ||
| createSerovalNode( | ||
| SerovalNodeType.PromiseFailure, | ||
| id, | ||
| NIL, | ||
| NIL, | ||
| NIL, | ||
| NIL, | ||
| NIL, | ||
| NIL, | ||
| [ | ||
| parseSpecialReference(this.base, SpecialReference.PromiseFailure), | ||
| parsed, | ||
| ], | ||
| NIL, | ||
| NIL, | ||
| NIL, | ||
| ), | ||
| ); | ||
| } | ||
| } | ||
| popPendingState(this); | ||
| } | ||
| function parsePromise( | ||
| ctx: SOSParserContext, | ||
| id: number, | ||
| current: Promise<unknown>, | ||
| ): SerovalPromiseConstructorNode { | ||
| // Creates a unique reference for the promise resolver | ||
| const resolver = createIndexForValue(ctx.base, {}); | ||
| if (ctx.type === ParserMode.Stream) { | ||
| pushPendingState(ctx); | ||
| current.then( | ||
| handlePromiseSuccess.bind(ctx, resolver), | ||
| handlePromiseFailure.bind(ctx, resolver), | ||
| ); | ||
| } | ||
| return createPromiseConstructorNode(ctx.base, id, resolver); | ||
| } | ||
| function parsePluginSync( | ||
| ctx: SyncParserContext, | ||
| id: number, | ||
| current: unknown, | ||
| currentPlugins: Plugin<any, any>[], | ||
| ): SerovalPluginNode | undefined { | ||
| for (let i = 0, len = currentPlugins.length; i < len; i++) { | ||
| const plugin = currentPlugins[i]; | ||
| if (plugin.parse.sync && plugin.test(current)) { | ||
| if (ctx.child == null) { | ||
| ctx.child = new SyncParsePluginContext(ctx); | ||
| } | ||
| return createPluginNode( | ||
| id, | ||
| plugin.tag, | ||
| plugin.parse.sync(current, ctx.child, { | ||
| id, | ||
| }), | ||
| ); | ||
| } | ||
| } | ||
| return undefined; | ||
| } | ||
| function parsePluginStream( | ||
| ctx: StreamParserContext, | ||
| id: number, | ||
| current: unknown, | ||
| currentPlugins: Plugin<any, any>[], | ||
| ): SerovalPluginNode | undefined { | ||
| for (let i = 0, len = currentPlugins.length; i < len; i++) { | ||
| const plugin = currentPlugins[i]; | ||
| if (plugin.parse.stream && plugin.test(current)) { | ||
| if (ctx.child == null) { | ||
| ctx.child = new StreamParsePluginContext(ctx); | ||
| } | ||
| return createPluginNode( | ||
| id, | ||
| plugin.tag, | ||
| plugin.parse.stream(current, ctx.child, { | ||
| id, | ||
| }), | ||
| ); | ||
| } | ||
| } | ||
| return undefined; | ||
| } | ||
| function parsePlugin( | ||
| ctx: SOSParserContext, | ||
| id: number, | ||
| current: unknown, | ||
| ): SerovalPluginNode | undefined { | ||
| const currentPlugins = ctx.base.plugins; | ||
| if (currentPlugins) { | ||
| return ctx.type === ParserMode.Sync | ||
| ? parsePluginSync(ctx, id, current, currentPlugins) | ||
| : parsePluginStream(ctx, id, current, currentPlugins); | ||
| } | ||
| return undefined; | ||
| } | ||
| function parseObjectPhase2( | ||
| ctx: SOSParserContext, | ||
| id: number, | ||
| current: object, | ||
| currentClass: unknown, | ||
| ): SerovalNode { | ||
| switch (currentClass) { | ||
| case Object: | ||
| return parsePlainObject( | ||
| ctx, | ||
| id, | ||
| current as Record<string, unknown>, | ||
| false, | ||
| ); | ||
| case undefined: | ||
| return parsePlainObject( | ||
| ctx, | ||
| id, | ||
| current as Record<string, unknown>, | ||
| true, | ||
| ); | ||
| case Date: | ||
| return createDateNode(id, current as unknown as Date); | ||
| case RegExp: | ||
| return createRegExpNode(id, current as unknown as RegExp); | ||
| case Error: | ||
| case EvalError: | ||
| case RangeError: | ||
| case ReferenceError: | ||
| case SyntaxError: | ||
| case TypeError: | ||
| case URIError: | ||
| return parseError(ctx, id, current as unknown as Error); | ||
| case Number: | ||
| case Boolean: | ||
| case String: | ||
| case BigInt: | ||
| return parseBoxed(ctx, id, current); | ||
| case ArrayBuffer: | ||
| return createArrayBufferNode( | ||
| ctx.base, | ||
| id, | ||
| current as unknown as ArrayBuffer, | ||
| ); | ||
| case Int8Array: | ||
| case Int16Array: | ||
| case Int32Array: | ||
| case Uint8Array: | ||
| case Uint16Array: | ||
| case Uint32Array: | ||
| case Uint8ClampedArray: | ||
| case Float32Array: | ||
| case Float64Array: | ||
| return parseTypedArray(ctx, id, current as unknown as TypedArrayValue); | ||
| case DataView: | ||
| return parseDataView(ctx, id, current as unknown as DataView); | ||
| case Map: | ||
| return parseMap(ctx, id, current as unknown as Map<unknown, unknown>); | ||
| case Set: | ||
| return parseSet(ctx, id, current as unknown as Set<unknown>); | ||
| default: | ||
| break; | ||
| } | ||
| // Promises | ||
| if (currentClass === Promise || current instanceof Promise) { | ||
| return parsePromise(ctx, id, current as unknown as Promise<unknown>); | ||
| } | ||
| const currentFeatures = ctx.base.features; | ||
| // BigInt Typed Arrays | ||
| if (currentFeatures & Feature.BigIntTypedArray) { | ||
| switch (currentClass) { | ||
| case BigInt64Array: | ||
| case BigUint64Array: | ||
| return parseBigIntTypedArray( | ||
| ctx, | ||
| id, | ||
| current as unknown as BigIntTypedArrayValue, | ||
| ); | ||
| default: | ||
| break; | ||
| } | ||
| } | ||
| if ( | ||
| currentFeatures & Feature.AggregateError && | ||
| typeof AggregateError !== 'undefined' && | ||
| (currentClass === AggregateError || current instanceof AggregateError) | ||
| ) { | ||
| return parseAggregateError(ctx, id, current as unknown as AggregateError); | ||
| } | ||
| // Slow path. We only need to handle Errors and Iterators | ||
| // since they have very broad implementations. | ||
| if (current instanceof Error) { | ||
| return parseError(ctx, id, current); | ||
| } | ||
| // Generator functions don't have a global constructor | ||
| // despite existing | ||
| if (SYM_ITERATOR in current || SYM_ASYNC_ITERATOR in current) { | ||
| return parsePlainObject(ctx, id, current, !!currentClass); | ||
| } | ||
| throw new SerovalUnsupportedTypeError(current); | ||
| } | ||
| function parseObject( | ||
| ctx: SOSParserContext, | ||
| id: number, | ||
| current: object, | ||
| ): SerovalNode { | ||
| if (Array.isArray(current)) { | ||
| return parseArray(ctx, id, current); | ||
| } | ||
| if (isStream(current)) { | ||
| return parseStream(ctx, id, current); | ||
| } | ||
| const currentClass = current.constructor; | ||
| if (currentClass === OpaqueReference) { | ||
| return parseSOS( | ||
| ctx, | ||
| (current as OpaqueReference<unknown, unknown>).replacement, | ||
| ); | ||
| } | ||
| const parsed = parsePlugin(ctx, id, current); | ||
| if (parsed) { | ||
| return parsed; | ||
| } | ||
| return parseObjectPhase2(ctx, id, current, currentClass); | ||
| } | ||
| function parseFunction(ctx: SOSParserContext, current: unknown): SerovalNode { | ||
| const ref = getReferenceNode(ctx.base, current); | ||
| if (ref.type !== ParserNodeType.Fresh) { | ||
| return ref.value; | ||
| } | ||
| const plugin = parsePlugin(ctx, ref.value, current); | ||
| if (plugin) { | ||
| return plugin; | ||
| } | ||
| throw new SerovalUnsupportedTypeError(current); | ||
| } | ||
| export function parseSOS<T>(ctx: SOSParserContext, current: T): SerovalNode { | ||
| switch (typeof current) { | ||
| case 'boolean': | ||
| return current ? TRUE_NODE : FALSE_NODE; | ||
| case 'undefined': | ||
| return UNDEFINED_NODE; | ||
| case 'string': | ||
| return createStringNode(current as string); | ||
| case 'number': | ||
| return createNumberNode(current as number); | ||
| case 'bigint': | ||
| return createBigIntNode(current as bigint); | ||
| case 'object': { | ||
| if (current) { | ||
| const ref = getReferenceNode(ctx.base, current); | ||
| return ref.type === ParserNodeType.Fresh | ||
| ? parseObject(ctx, ref.value, current as object) | ||
| : ref.value; | ||
| } | ||
| return NULL_NODE; | ||
| } | ||
| case 'symbol': | ||
| return parseWellKnownSymbol(ctx.base, current); | ||
| case 'function': { | ||
| return parseFunction(ctx, current); | ||
| } | ||
| default: | ||
| throw new SerovalUnsupportedTypeError(current); | ||
| } | ||
| } | ||
| export function parseTop<T>(ctx: SyncParserContext, current: T): SerovalNode { | ||
| try { | ||
| return parseSOS(ctx, current); | ||
| } catch (error) { | ||
| throw error instanceof SerovalParserError | ||
| ? error | ||
| : new SerovalParserError(error); | ||
| } | ||
| } | ||
| function onParse(ctx: StreamParserContext, node: SerovalNode): void { | ||
| // If the value emitted happens to be during parsing, we push to the | ||
| // buffer and emit after the initial parsing is done. | ||
| if (ctx.state.initial) { | ||
| ctx.state.buffer.push(node); | ||
| } else { | ||
| onParseInternal(ctx, node, false); | ||
| } | ||
| } | ||
| function onError(ctx: StreamParserContext, error: unknown): void { | ||
| if (ctx.state.onError) { | ||
| ctx.state.onError(error); | ||
| } else { | ||
| throw error instanceof SerovalParserError | ||
| ? error | ||
| : new SerovalParserError(error); | ||
| } | ||
| } | ||
| function onDone(ctx: StreamParserContext): void { | ||
| if (ctx.state.onDone) { | ||
| ctx.state.onDone(); | ||
| } | ||
| } | ||
| function onParseInternal( | ||
| ctx: StreamParserContext, | ||
| node: SerovalNode, | ||
| initial: boolean, | ||
| ): void { | ||
| try { | ||
| ctx.state.onParse(node, initial); | ||
| } catch (error) { | ||
| onError(ctx, error); | ||
| } | ||
| } | ||
| function pushPendingState(ctx: StreamParserContext): void { | ||
| ctx.state.pending++; | ||
| } | ||
| function popPendingState(ctx: StreamParserContext): void { | ||
| if (--ctx.state.pending <= 0) { | ||
| onDone(ctx); | ||
| } | ||
| } | ||
| export function parseWithError<T>( | ||
| ctx: StreamParserContext, | ||
| current: T, | ||
| ): SerovalNode | undefined { | ||
| try { | ||
| return parseSOS(ctx, current); | ||
| } catch (err) { | ||
| onError(ctx, err); | ||
| return NIL; | ||
| } | ||
| } | ||
| export function startStreamParse<T>( | ||
| ctx: StreamParserContext, | ||
| current: T, | ||
| ): void { | ||
| const parsed = parseWithError(ctx, current); | ||
| if (parsed) { | ||
| onParseInternal(ctx, parsed, true); | ||
| ctx.state.initial = false; | ||
| flushStreamParse(ctx, ctx.state); | ||
| // Check if there's any pending pushes | ||
| if (ctx.state.pending <= 0) { | ||
| destroyStreamParse(ctx); | ||
| } | ||
| } | ||
| } | ||
| function flushStreamParse( | ||
| ctx: StreamParserContext, | ||
| state: StreamParserState, | ||
| ): void { | ||
| for (let i = 0, len = state.buffer.length; i < len; i++) { | ||
| onParseInternal(ctx, state.buffer[i], false); | ||
| } | ||
| } | ||
| export function destroyStreamParse(ctx: StreamParserContext): void { | ||
| if (ctx.state.alive) { | ||
| onDone(ctx); | ||
| ctx.state.alive = false; | ||
| } | ||
| } |
| export const SYM_ASYNC_ITERATOR: typeof Symbol.asyncIterator = Symbol.asyncIterator; | ||
| export const SYM_HAS_INSTANCE: typeof Symbol.hasInstance = Symbol.hasInstance; | ||
| export const SYM_IS_CONCAT_SPREADABLE: typeof Symbol.isConcatSpreadable = Symbol.isConcatSpreadable; | ||
| export const SYM_ITERATOR: typeof Symbol.iterator = Symbol.iterator; | ||
| export const SYM_MATCH: typeof Symbol.match = Symbol.match; | ||
| export const SYM_MATCH_ALL: typeof Symbol.matchAll = Symbol.matchAll; | ||
| export const SYM_REPLACE: typeof Symbol.replace = Symbol.replace; | ||
| export const SYM_SEARCH: typeof Symbol.search = Symbol.search; | ||
| export const SYM_SPECIES: typeof Symbol.species = Symbol.species; | ||
| export const SYM_SPLIT: typeof Symbol.split = Symbol.split; | ||
| export const SYM_TO_PRIMITIVE: typeof Symbol.toPrimitive = Symbol.toPrimitive; | ||
| export const SYM_TO_STRING_TAG: typeof Symbol.toStringTag = Symbol.toStringTag; | ||
| export const SYM_UNSCOPABLES: typeof Symbol.unscopables = Symbol.unscopables; | ||
| // For the future | ||
| // export const SYM_DISPOSE = Symbol.dispose; | ||
| // export const SYM_ASYNC_DISPOSE = Symbol.asyncDispose; |
@@ -1,17 +0,3 @@ | ||
| "use strict";var Be=Object.defineProperty;var Ir=Object.getOwnPropertyDescriptor;var Ar=Object.getOwnPropertyNames;var wr=Object.prototype.hasOwnProperty;var Er=(o,e)=>{for(var r in e)Be(o,r,{get:e[r],enumerable:!0})},Pr=(o,e,r,t)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of Ar(e))!wr.call(o,n)&&n!==r&&Be(o,n,{get:()=>e[n],enumerable:!(t=Ir(e,n))||t.enumerable});return o};var Rr=o=>Pr(Be({},"__esModule",{value:!0}),o);var lt={};Er(lt,{Feature:()=>x,OpaqueReference:()=>O,Serializer:()=>pe,SerovalDeserializationError:()=>oe,SerovalError:()=>J,SerovalMissingInstanceError:()=>N,SerovalMissingPluginError:()=>z,SerovalMissingReferenceError:()=>re,SerovalMissingReferenceForIdError:()=>te,SerovalParserError:()=>v,SerovalSerializationError:()=>se,SerovalUnknownTypedArrayError:()=>ne,SerovalUnsupportedNodeError:()=>h,SerovalUnsupportedTypeError:()=>f,compileJSON:()=>at,createPlugin:()=>zr,createReference:()=>$e,createStream:()=>F,crossSerialize:()=>qr,crossSerializeAsync:()=>Hr,crossSerializeStream:()=>Ke,deserialize:()=>st,fromCrossJSON:()=>et,fromJSON:()=>it,getCrossReferenceHeader:()=>Ye,resolvePlugins:()=>m,serialize:()=>rt,serializeAsync:()=>tt,toCrossJSON:()=>Zr,toCrossJSONAsync:()=>Xr,toCrossJSONStream:()=>Qr,toJSON:()=>ot,toJSONAsync:()=>nt});module.exports=Rr(lt);var x=(a=>(a[a.AggregateError=1]="AggregateError",a[a.ArrowFunction=2]="ArrowFunction",a[a.ErrorPrototypeStack=4]="ErrorPrototypeStack",a[a.ObjectAssign=8]="ObjectAssign",a[a.BigIntTypedArray=16]="BigIntTypedArray",a))(x||{});function Or(o){switch(o){case'"':return'\\"';case"\\":return"\\\\";case` | ||
| `:return"\\n";case"\r":return"\\r";case"\b":return"\\b";case" ":return"\\t";case"\f":return"\\f";case"<":return"\\x3C";case"\u2028":return"\\u2028";case"\u2029":return"\\u2029";default:return}}function d(o){let e="",r=0,t;for(let n=0,a=o.length;n<a;n++)t=Or(o[n]),t&&(e+=o.slice(r,n)+t,r=n+1);return r===0?e=o:e+=o.slice(r),e}function Cr(o){switch(o){case"\\\\":return"\\";case'\\"':return'"';case"\\n":return` | ||
| `;case"\\r":return"\r";case"\\b":return"\b";case"\\t":return" ";case"\\f":return"\f";case"\\x3C":return"<";case"\\u2028":return"\u2028";case"\\u2029":return"\u2029";default:return o}}function I(o){return o.replace(/(\\\\|\\"|\\n|\\r|\\b|\\t|\\f|\\u2028|\\u2029|\\x3C)/g,Cr)}var C="__SEROVAL_REFS__",ee="$R",de=`self.${ee}`;function Ye(o){return o==null?`${de}=${de}||[]`:`(${de}=${de}||{})["${d(o)}"]=[]`}function g(o,e){if(!o)throw e}var je=new Map,T=new Map;function $e(o,e){return je.set(e,o),T.set(o,e),e}function _e(o){return je.has(o)}function Tr(o){return T.has(o)}function Ge(o){return g(_e(o),new re(o)),je.get(o)}function qe(o){return g(Tr(o),new te(o)),T.get(o)}typeof globalThis!="undefined"?Object.defineProperty(globalThis,C,{value:T,configurable:!0,writable:!1,enumerable:!1}):typeof window!="undefined"?Object.defineProperty(window,C,{value:T,configurable:!0,writable:!1,enumerable:!1}):typeof self!="undefined"?Object.defineProperty(self,C,{value:T,configurable:!0,writable:!1,enumerable:!1}):typeof global!="undefined"&&Object.defineProperty(global,C,{value:T,configurable:!0,writable:!1,enumerable:!1});function zr(o){return o}function He(o,e){for(let r=0,t=e.length;r<t;r++){let n=e[r];o.has(n)||(o.add(n),n.extends&&He(o,n.extends))}}function m(o){if(o){let e=new Set;return He(e,o),[...e]}}var Ze={0:"Symbol.asyncIterator",1:"Symbol.hasInstance",2:"Symbol.isConcatSpreadable",3:"Symbol.iterator",4:"Symbol.match",5:"Symbol.matchAll",6:"Symbol.replace",7:"Symbol.search",8:"Symbol.species",9:"Symbol.split",10:"Symbol.toPrimitive",11:"Symbol.toStringTag",12:"Symbol.unscopables"},me={[Symbol.asyncIterator]:0,[Symbol.hasInstance]:1,[Symbol.isConcatSpreadable]:2,[Symbol.iterator]:3,[Symbol.match]:4,[Symbol.matchAll]:5,[Symbol.replace]:6,[Symbol.search]:7,[Symbol.species]:8,[Symbol.split]:9,[Symbol.toPrimitive]:10,[Symbol.toStringTag]:11,[Symbol.unscopables]:12},Xe={0:Symbol.asyncIterator,1:Symbol.hasInstance,2:Symbol.isConcatSpreadable,3:Symbol.iterator,4:Symbol.match,5:Symbol.matchAll,6:Symbol.replace,7:Symbol.search,8:Symbol.species,9:Symbol.split,10:Symbol.toPrimitive,11:Symbol.toStringTag,12:Symbol.unscopables},Qe={2:"!0",3:"!1",1:"void 0",0:"null",4:"-0",5:"1/0",6:"-1/0",7:"0/0"},er={2:!0,3:!1,1:void 0,0:null,4:-0,5:Number.POSITIVE_INFINITY,6:Number.NEGATIVE_INFINITY,7:Number.NaN};var fe={0:"Error",1:"EvalError",2:"RangeError",3:"ReferenceError",4:"SyntaxError",5:"TypeError",6:"URIError"},rr={0:Error,1:EvalError,2:RangeError,3:ReferenceError,4:SyntaxError,5:TypeError,6:URIError},s=void 0;function u(o,e,r,t,n,a,i,l,c,p,y,Q){return{t:o,i:e,s:r,l:t,c:n,m:a,p:i,e:l,a:c,f:p,b:y,o:Q}}function w(o){return u(2,s,o,s,s,s,s,s,s,s,s,s)}var E=w(2),P=w(3),ge=w(1),Se=w(0),tr=w(4),sr=w(5),or=w(6),nr=w(7);function he(o){return o instanceof EvalError?1:o instanceof RangeError?2:o instanceof ReferenceError?3:o instanceof SyntaxError?4:o instanceof TypeError?5:o instanceof URIError?6:0}function kr(o){let e=fe[he(o)];return o.name!==e?{name:o.name}:o.constructor.name!==e?{name:o.constructor.name}:{}}function M(o,e){let r=kr(o),t=Object.getOwnPropertyNames(o);for(let n=0,a=t.length,i;n<a;n++)i=t[n],i!=="name"&&i!=="message"&&(i==="stack"?e&4&&(r=r||{},r[i]=o[i]):(r=r||{},r[i]=o[i]));return r}function ye(o){return Object.isFrozen(o)?3:Object.isSealed(o)?2:Object.isExtensible(o)?0:1}function ve(o){switch(o){case Number.POSITIVE_INFINITY:return sr;case Number.NEGATIVE_INFINITY:return or}return o!==o?nr:Object.is(o,-0)?tr:u(0,s,o,s,s,s,s,s,s,s,s,s)}function R(o){return u(1,s,d(o),s,s,s,s,s,s,s,s,s)}function Ne(o){return u(3,s,""+o,s,s,s,s,s,s,s,s,s)}function ir(o){return u(4,o,s,s,s,s,s,s,s,s,s,s)}function be(o,e){let r=e.valueOf();return u(5,o,r!==r?"":e.toISOString(),s,s,s,s,s,s,s,s,s)}function xe(o,e){return u(6,o,s,s,d(e.source),e.flags,s,s,s,s,s,s)}function Ie(o,e){let r=new Uint8Array(e),t=r.length,n=new Array(t);for(let a=0;a<t;a++)n[a]=r[a];return u(19,o,n,s,s,s,s,s,s,s,s,s)}function lr(o,e){return u(17,o,me[e],s,s,s,s,s,s,s,s,s)}function cr(o,e){return u(18,o,d(Ge(e)),s,s,s,s,s,s,s,s,s)}function U(o,e,r){return u(25,o,r,s,d(e),s,s,s,s,s,s,s)}function Ae(o,e,r){return u(9,o,s,e.length,s,s,s,s,r,s,s,ye(e))}function we(o,e){return u(21,o,s,s,s,s,s,s,s,e,s,s)}function Ee(o,e,r){return u(15,o,s,e.length,e.constructor.name,s,s,s,s,r,e.byteOffset,s)}function Pe(o,e,r){return u(16,o,s,e.length,e.constructor.name,s,s,s,s,r,e.byteOffset,s)}function Re(o,e,r){return u(20,o,s,e.byteLength,s,s,s,s,s,r,e.byteOffset,s)}function Oe(o,e,r){return u(13,o,he(e),s,s,d(e.message),r,s,s,s,s,s)}function Ce(o,e,r){return u(14,o,he(e),s,s,d(e.message),r,s,s,s,s,s)}function Te(o,e,r){return u(7,o,s,e,s,s,s,s,r,s,s,s)}function L(o,e){return u(28,s,s,s,s,s,s,s,[o,e],s,s,s)}function W(o,e){return u(30,s,s,s,s,s,s,s,[o,e],s,s,s)}function K(o,e,r){return u(31,o,s,s,s,s,s,s,r,e,s,s)}function ze(o,e){return u(32,o,s,s,s,s,s,s,s,e,s,s)}function ke(o,e){return u(33,o,s,s,s,s,s,s,s,e,s,s)}function Fe(o,e){return u(34,o,s,s,s,s,s,s,s,e,s,s)}var{toString:Me}=Object.prototype;function Fr(o,e){return e instanceof Error?`Seroval caught an error during the ${o} process. | ||
| ${e.name} | ||
| ${e.message} | ||
| - For more information, please check the "cause" property of this error. | ||
| - If you believe this is an error in Seroval, please submit an issue at https://github.com/lxsmnsyc/seroval/issues/new`:`Seroval caught an error during the ${o} process. | ||
| "${Me.call(e)}" | ||
| For more information, please check the "cause" property of this error.`}var J=class extends Error{constructor(r,t){super(Fr(r,t));this.cause=t}},v=class extends J{constructor(e){super("parsing",e)}},se=class extends J{constructor(e){super("serialization",e)}},oe=class extends J{constructor(e){super("deserialization",e)}},f=class extends Error{constructor(r){super(`The value ${Me.call(r)} of type "${typeof r}" cannot be parsed/serialized. | ||
| There are few workarounds for this problem: | ||
| - Transform the value in a way that it can be serialized. | ||
| - If the reference is present on multiple runtimes (isomorphic), you can use the Reference API to map the references.`);this.value=r}},h=class extends Error{constructor(e){super('Unsupported node type "'+e.t+'".')}},z=class extends Error{constructor(e){super('Missing plugin for tag "'+e+'".')}},N=class extends Error{constructor(e){super('Missing "'+e+'" instance.')}},re=class extends Error{constructor(r){super('Missing reference for the value "'+Me.call(r)+'" of type "'+typeof r+'"');this.value=r}},te=class extends Error{constructor(e){super('Missing reference for id "'+d(e)+'"')}},ne=class extends Error{constructor(e){super('Unknown TypedArray "'+e+'"')}};var O=class{constructor(e,r){this.value=e;this.replacement=r}};function k(o,e,r){return o&2?(e.length===1?e[0]:"("+e.join(",")+")")+"=>"+(r.startsWith("{")?"("+r+")":r):"function("+e.join(",")+"){return "+r+"}"}function S(o,e,r){return o&2?(e.length===1?e[0]:"("+e.join(",")+")")+"=>{"+r+"}":"function("+e.join(",")+"){"+r+"}"}var ur={},pr={};var dr={0:{},1:{},2:{},3:{},4:{}};function Vr(o){return k(o,["r"],"(r.p=new Promise("+S(o,["s","f"],"r.s=s,r.f=f")+"))")}function Dr(o){return S(o,["r","d"],"r.s(d),r.p.s=1,r.p.v=d")}function Br(o){return S(o,["r","d"],"r.f(d),r.p.s=2,r.p.v=d")}function jr(o){return k(o,["b","a","s","l","p","f","e","n"],"(b=[],a=!0,s=!1,l=[],p=0,f="+S(o,["v","m","x"],"for(x=0;x<p;x++)l[x]&&l[x][m](v)")+",n="+S(o,["o","x","z","c"],'for(x=0,z=b.length;x<z;x++)(c=b[x],(!a&&x===z-1)?o[s?"return":"throw"](c):o.next(c))')+",e="+k(o,["o","t"],"(a&&(l[t=p++]=o),n(o),"+S(o,[],"a&&(l[t]=void 0)")+")")+",{__SEROVAL_STREAM__:!0,on:"+k(o,["o"],"e(o)")+",next:"+S(o,["v"],'a&&(b.push(v),f(v,"next"))')+",throw:"+S(o,["v"],'a&&(b.push(v),f(v,"throw"),a=s=!1,l.length=0)')+",return:"+S(o,["v"],'a&&(b.push(v),f(v,"return"),a=!1,s=!0,l.length=0)')+"})")}function mr(o,e){switch(e){case 0:return"[]";case 1:return Vr(o);case 2:return Dr(o);case 3:return Br(o);case 4:return jr(o);default:return""}}function ae(){let o,e;return{promise:new Promise((r,t)=>{o=r,e=t}),resolve(r){o(r)},reject(r){e(r)}}}function Ve(o){return"__SEROVAL_STREAM__"in o}function F(){let o=new Set,e=[],r=!0,t=!0;function n(l){for(let c of o.keys())c.next(l)}function a(l){for(let c of o.keys())c.throw(l)}function i(l){for(let c of o.keys())c.return(l)}return{__SEROVAL_STREAM__:!0,on(l){r&&o.add(l);for(let c=0,p=e.length;c<p;c++){let y=e[c];c===p-1&&!r?t?l.return(y):l.throw(y):l.next(y)}return()=>{r&&o.delete(l)}},next(l){r&&(e.push(l),n(l))},throw(l){r&&(e.push(l),a(l),r=!1,t=!1,o.clear())},return(l){r&&(e.push(l),i(l),r=!1,t=!0,o.clear())}}}function De(o){let e=F(),r=o[Symbol.asyncIterator]();async function t(){try{let n=await r.next();n.done?e.return(n.value):(e.next(n.value),await t())}catch(n){e.throw(n)}}return t().catch(()=>{}),e}function fr(o){return()=>{let e=[],r=[],t=0,n=-1,a=!1;function i(){for(let c=0,p=r.length;c<p;c++)r[c].resolve({done:!0,value:void 0})}o.on({next(c){let p=r.shift();p&&p.resolve({done:!1,value:c}),e.push(c)},throw(c){let p=r.shift();p&&p.reject(c),i(),n=e.length,e.push(c),a=!0},return(c){let p=r.shift();p&&p.resolve({done:!0,value:c}),i(),n=e.length,e.push(c)}});function l(){let c=t++,p=e[c];if(c!==n)return{done:!1,value:p};if(a)throw p;return{done:!0,value:p}}return{[Symbol.asyncIterator](){return this},async next(){if(n===-1){let c=t++;if(c>=e.length){let p=ae();return r.push(p),await p.promise}return{done:!1,value:e[c]}}return t>n?{done:!0,value:void 0}:l()}}}}function Y(o){let e=[],r=-1,t=-1,n=o[Symbol.iterator]();for(;;)try{let a=n.next();if(e.push(a.value),a.done){t=e.length-1;break}}catch(a){r=e.length,e.push(a)}return{v:e,t:r,d:t}}function gr(o){return()=>{let e=0;return{[Symbol.iterator](){return this},next(){if(e>o.d)return{done:!0,value:s};let r=e++,t=o.v[r];if(r===o.t)throw t;return{done:r===o.d,value:t}}}}}async function Ue(o){try{return[1,await o]}catch(e){return[0,e]}}var $=class{constructor(e){this.marked=new Set;this.plugins=e.plugins,this.features=31^(e.disabledFeatures||0),this.refs=e.refs||new Map}markRef(e){this.marked.add(e)}isMarked(e){return this.marked.has(e)}createIndex(e){let r=this.refs.size;return this.refs.set(e,r),r}getIndexedValue(e){let r=this.refs.get(e);return r!=null?(this.markRef(r),{type:1,value:ir(r)}):{type:0,value:this.createIndex(e)}}getReference(e){let r=this.getIndexedValue(e);return r.type===1?r:_e(e)?{type:2,value:cr(r.value,e)}:r}parseWellKnownSymbol(e){let r=this.getReference(e);return r.type!==0?r.value:(g(e in me,new f(e)),lr(r.value,e))}parseSpecialReference(e){let r=this.getIndexedValue(dr[e]);return r.type===1?r.value:u(26,r.value,e,s,s,s,s,s,s,s,s,s)}parseIteratorFactory(){let e=this.getIndexedValue(ur);return e.type===1?e.value:u(27,e.value,s,s,s,s,s,s,s,this.parseWellKnownSymbol(Symbol.iterator),s,s)}parseAsyncIteratorFactory(){let e=this.getIndexedValue(pr);return e.type===1?e.value:u(29,e.value,s,s,s,s,s,s,[this.parseSpecialReference(1),this.parseWellKnownSymbol(Symbol.asyncIterator)],s,s,s)}createObjectNode(e,r,t,n){return u(t?11:10,e,s,s,s,s,n,s,s,s,s,ye(r))}createMapNode(e,r,t,n){return u(8,e,s,s,s,s,s,{k:r,v:t,s:n},s,this.parseSpecialReference(0),s,s)}createPromiseConstructorNode(e,r){return u(22,e,r,s,s,s,s,s,s,this.parseSpecialReference(1),s,s)}};var V=class extends ${async parseItems(e){let r=[];for(let t=0,n=e.length;t<n;t++)t in e&&(r[t]=await this.parse(e[t]));return r}async parseArray(e,r){return Ae(e,r,await this.parseItems(r))}async parseProperties(e){let r=Object.entries(e),t=[],n=[];for(let i=0,l=r.length;i<l;i++)t.push(d(r[i][0])),n.push(await this.parse(r[i][1]));let a=Symbol.iterator;return a in e&&(t.push(this.parseWellKnownSymbol(a)),n.push(L(this.parseIteratorFactory(),await this.parse(Y(e))))),a=Symbol.asyncIterator,a in e&&(t.push(this.parseWellKnownSymbol(a)),n.push(W(this.parseAsyncIteratorFactory(),await this.parse(De(e))))),a=Symbol.toStringTag,a in e&&(t.push(this.parseWellKnownSymbol(a)),n.push(R(e[a]))),a=Symbol.isConcatSpreadable,a in e&&(t.push(this.parseWellKnownSymbol(a)),n.push(e[a]?E:P)),{k:t,v:n,s:t.length}}async parsePlainObject(e,r,t){return this.createObjectNode(e,r,t,await this.parseProperties(r))}async parseBoxed(e,r){return we(e,await this.parse(r.valueOf()))}async parseTypedArray(e,r){return Ee(e,r,await this.parse(r.buffer))}async parseBigIntTypedArray(e,r){return Pe(e,r,await this.parse(r.buffer))}async parseDataView(e,r){return Re(e,r,await this.parse(r.buffer))}async parseError(e,r){let t=M(r,this.features);return Oe(e,r,t?await this.parseProperties(t):s)}async parseAggregateError(e,r){let t=M(r,this.features);return Ce(e,r,t?await this.parseProperties(t):s)}async parseMap(e,r){let t=[],n=[];for(let[a,i]of r.entries())t.push(await this.parse(a)),n.push(await this.parse(i));return this.createMapNode(e,t,n,r.size)}async parseSet(e,r){let t=[];for(let n of r.keys())t.push(await this.parse(n));return Te(e,r.size,t)}async parsePromise(e,r){let[t,n]=await Ue(r);return u(12,e,t,s,s,s,s,s,s,await this.parse(n),s,s)}async parsePlugin(e,r){let t=this.plugins;if(t)for(let n=0,a=t.length;n<a;n++){let i=t[n];if(i.parse.async&&i.test(r))return U(e,i.tag,await i.parse.async(r,this,{id:e}))}return s}async parseStream(e,r){return K(e,this.parseSpecialReference(4),await new Promise((t,n)=>{let a=[],i=r.on({next:l=>{this.markRef(e),this.parse(l).then(c=>{a.push(ze(e,c))},c=>{n(c),i()})},throw:l=>{this.markRef(e),this.parse(l).then(c=>{a.push(ke(e,c)),t(a),i()},c=>{n(c),i()})},return:l=>{this.markRef(e),this.parse(l).then(c=>{a.push(Fe(e,c)),t(a),i()},c=>{n(c),i()})}})}))}async parseObject(e,r){if(Array.isArray(r))return this.parseArray(e,r);if(Ve(r))return this.parseStream(e,r);let t=r.constructor;if(t===O)return this.parse(r.replacement);let n=await this.parsePlugin(e,r);if(n)return n;switch(t){case Object:return this.parsePlainObject(e,r,!1);case s:return this.parsePlainObject(e,r,!0);case Date:return be(e,r);case RegExp:return xe(e,r);case Error:case EvalError:case RangeError:case ReferenceError:case SyntaxError:case TypeError:case URIError:return this.parseError(e,r);case Number:case Boolean:case String:case BigInt:return this.parseBoxed(e,r);case ArrayBuffer:return Ie(e,r);case Int8Array:case Int16Array:case Int32Array:case Uint8Array:case Uint16Array:case Uint32Array:case Uint8ClampedArray:case Float32Array:case Float64Array:return this.parseTypedArray(e,r);case DataView:return this.parseDataView(e,r);case Map:return this.parseMap(e,r);case Set:return this.parseSet(e,r);default:break}if(t===Promise||r instanceof Promise)return this.parsePromise(e,r);let a=this.features;if(a&16)switch(t){case BigInt64Array:case BigUint64Array:return this.parseBigIntTypedArray(e,r);default:break}if(a&1&&typeof AggregateError!="undefined"&&(t===AggregateError||r instanceof AggregateError))return this.parseAggregateError(e,r);if(r instanceof Error)return this.parseError(e,r);if(Symbol.iterator in r||Symbol.asyncIterator in r)return this.parsePlainObject(e,r,!!t);throw new f(r)}async parseFunction(e){let r=this.getReference(e);if(r.type!==0)return r.value;let t=await this.parsePlugin(r.value,e);if(t)return t;throw new f(e)}async parse(e){switch(typeof e){case"boolean":return e?E:P;case"undefined":return ge;case"string":return R(e);case"number":return ve(e);case"bigint":return Ne(e);case"object":{if(e){let r=this.getReference(e);return r.type===0?await this.parseObject(r.value,e):r.value}return Se}case"symbol":return this.parseWellKnownSymbol(e);case"function":return this.parseFunction(e);default:throw new f(e)}}async parseTop(e){try{return await this.parse(e)}catch(r){throw r instanceof v?r:new v(r)}}};var G=class extends V{constructor(){super(...arguments);this.mode="cross"}};function Sr(o){switch(o){case"Int8Array":return Int8Array;case"Int16Array":return Int16Array;case"Int32Array":return Int32Array;case"Uint8Array":return Uint8Array;case"Uint16Array":return Uint16Array;case"Uint32Array":return Uint32Array;case"Uint8ClampedArray":return Uint8ClampedArray;case"Float32Array":return Float32Array;case"Float64Array":return Float64Array;case"BigInt64Array":return BigInt64Array;case"BigUint64Array":return BigUint64Array;default:throw new ne(o)}}function hr(o,e){switch(e){case 3:return Object.freeze(o);case 1:return Object.preventExtensions(o);case 2:return Object.seal(o);default:return o}}var D=class{constructor(e){this.plugins=e.plugins,this.refs=e.refs||new Map}deserializeReference(e){return this.assignIndexedValue(e.i,qe(I(e.s)))}deserializeArray(e){let r=e.l,t=this.assignIndexedValue(e.i,new Array(r)),n;for(let a=0;a<r;a++)n=e.a[a],n&&(t[a]=this.deserialize(n));return hr(t,e.o),t}deserializeProperties(e,r){let t=e.s;if(t){let n=e.k,a=e.v;for(let i=0,l;i<t;i++)l=n[i],typeof l=="string"?r[I(l)]=this.deserialize(a[i]):r[this.deserialize(l)]=this.deserialize(a[i])}return r}deserializeObject(e){let r=this.assignIndexedValue(e.i,e.t===10?{}:Object.create(null));return this.deserializeProperties(e.p,r),hr(r,e.o),r}deserializeDate(e){return this.assignIndexedValue(e.i,new Date(e.s))}deserializeRegExp(e){return this.assignIndexedValue(e.i,new RegExp(I(e.c),e.m))}deserializeSet(e){let r=this.assignIndexedValue(e.i,new Set),t=e.a;for(let n=0,a=e.l;n<a;n++)r.add(this.deserialize(t[n]));return r}deserializeMap(e){let r=this.assignIndexedValue(e.i,new Map),t=e.e.k,n=e.e.v;for(let a=0,i=e.e.s;a<i;a++)r.set(this.deserialize(t[a]),this.deserialize(n[a]));return r}deserializeArrayBuffer(e){let r=new Uint8Array(e.s);return this.assignIndexedValue(e.i,r.buffer)}deserializeTypedArray(e){let r=Sr(e.c),t=this.deserialize(e.f);return this.assignIndexedValue(e.i,new r(t,e.b,e.l))}deserializeDataView(e){let r=this.deserialize(e.f);return this.assignIndexedValue(e.i,new DataView(r,e.b,e.l))}deserializeDictionary(e,r){if(e.p){let t=this.deserializeProperties(e.p,{});Object.assign(r,t)}return r}deserializeAggregateError(e){let r=this.assignIndexedValue(e.i,new AggregateError([],I(e.m)));return this.deserializeDictionary(e,r)}deserializeError(e){let r=rr[e.s],t=this.assignIndexedValue(e.i,new r(I(e.m)));return this.deserializeDictionary(e,t)}deserializePromise(e){let r=ae(),t=this.assignIndexedValue(e.i,r),n=this.deserialize(e.f);return e.s?r.resolve(n):r.reject(n),t.promise}deserializeBoxed(e){return this.assignIndexedValue(e.i,Object(this.deserialize(e.f)))}deserializePlugin(e){let r=this.plugins;if(r){let t=I(e.c);for(let n=0,a=r.length;n<a;n++){let i=r[n];if(i.tag===t)return this.assignIndexedValue(e.i,i.deserialize(e.s,this,{id:e.i}))}}throw new z(e.c)}deserializePromiseConstructor(e){return this.assignIndexedValue(e.i,this.assignIndexedValue(e.s,ae()).promise)}deserializePromiseResolve(e){let r=this.refs.get(e.i);g(r,new N("Promise")),r.resolve(this.deserialize(e.a[1]))}deserializePromiseReject(e){let r=this.refs.get(e.i);g(r,new N("Promise")),r.reject(this.deserialize(e.a[1]))}deserializeIteratorFactoryInstance(e){this.deserialize(e.a[0]);let r=this.deserialize(e.a[1]);return gr(r)}deserializeAsyncIteratorFactoryInstance(e){this.deserialize(e.a[0]);let r=this.deserialize(e.a[1]);return fr(r)}deserializeStreamConstructor(e){let r=this.assignIndexedValue(e.i,F()),t=e.a.length;if(t)for(let n=0;n<t;n++)this.deserialize(e.a[n]);return r}deserializeStreamNext(e){let r=this.refs.get(e.i);g(r,new N("Stream")),r.next(this.deserialize(e.f))}deserializeStreamThrow(e){let r=this.refs.get(e.i);g(r,new N("Stream")),r.throw(this.deserialize(e.f))}deserializeStreamReturn(e){let r=this.refs.get(e.i);g(r,new N("Stream")),r.return(this.deserialize(e.f))}deserializeIteratorFactory(e){this.deserialize(e.f)}deserializeAsyncIteratorFactory(e){this.deserialize(e.a[1])}deserializeTop(e){try{return this.deserialize(e)}catch(r){throw new oe(r)}}deserialize(e){switch(e.t){case 2:return er[e.s];case 0:return e.s;case 1:return I(e.s);case 3:return BigInt(e.s);case 4:return this.refs.get(e.i);case 18:return this.deserializeReference(e);case 9:return this.deserializeArray(e);case 10:case 11:return this.deserializeObject(e);case 5:return this.deserializeDate(e);case 6:return this.deserializeRegExp(e);case 7:return this.deserializeSet(e);case 8:return this.deserializeMap(e);case 19:return this.deserializeArrayBuffer(e);case 16:case 15:return this.deserializeTypedArray(e);case 20:return this.deserializeDataView(e);case 14:return this.deserializeAggregateError(e);case 13:return this.deserializeError(e);case 12:return this.deserializePromise(e);case 17:return Xe[e.s];case 21:return this.deserializeBoxed(e);case 25:return this.deserializePlugin(e);case 22:return this.deserializePromiseConstructor(e);case 23:return this.deserializePromiseResolve(e);case 24:return this.deserializePromiseReject(e);case 28:return this.deserializeIteratorFactoryInstance(e);case 30:return this.deserializeAsyncIteratorFactoryInstance(e);case 31:return this.deserializeStreamConstructor(e);case 32:return this.deserializeStreamNext(e);case 33:return this.deserializeStreamThrow(e);case 34:return this.deserializeStreamReturn(e);case 27:return this.deserializeIteratorFactory(e);case 29:return this.deserializeAsyncIteratorFactory(e);default:throw new h(e)}}};var ie=class extends D{constructor(){super(...arguments);this.mode="cross"}assignIndexedValue(r,t){return this.refs.has(r)||this.refs.set(r,t),t}};var Ur=/^[$A-Z_][0-9A-Z_$]*$/i;function We(o){let e=o[0];return(e==="$"||e==="_"||e>="A"&&e<="Z"||e>="a"&&e<="z")&&Ur.test(o)}function le(o){switch(o.t){case 0:return o.s+"="+o.v;case 2:return o.s+".set("+o.k+","+o.v+")";case 1:return o.s+".add("+o.v+")";case 3:return o.s+".delete("+o.k+")"}}function Lr(o){let e=[],r=o[0];for(let t=1,n=o.length,a,i=r;t<n;t++)a=o[t],a.t===0&&a.v===i.v?r={t:0,s:a.s,k:s,v:le(r)}:a.t===2&&a.s===i.s?r={t:2,s:le(r),k:a.k,v:a.v}:a.t===1&&a.s===i.s?r={t:1,s:le(r),k:s,v:a.v}:a.t===3&&a.s===i.s?r={t:3,s:le(r),k:a.k,v:s}:(e.push(r),r=a),i=a;return e.push(r),e}function yr(o){if(o.length){let e="",r=Lr(o);for(let t=0,n=r.length;t<n;t++)e+=le(r[t])+",";return e}return s}var Wr="Object.create(null)",Kr="new Set",Jr="new Map",Yr="Promise.resolve",$r="Promise.reject",Gr={3:"Object.freeze",2:"Object.seal",1:"Object.preventExtensions",0:s},B=class{constructor(e){this.stack=[];this.flags=[];this.assignments=[];this.plugins=e.plugins,this.features=e.features,this.marked=new Set(e.markedRefs)}createFunction(e,r){return k(this.features,e,r)}createEffectfulFunction(e,r){return S(this.features,e,r)}markRef(e){this.marked.add(e)}isMarked(e){return this.marked.has(e)}pushObjectFlag(e,r){e!==0&&(this.markRef(r),this.flags.push({type:e,value:this.getRefParam(r)}))}resolveFlags(){let e="";for(let r=0,t=this.flags,n=t.length;r<n;r++){let a=t[r];e+=Gr[a.type]+"("+a.value+"),"}return e}resolvePatches(){let e=yr(this.assignments),r=this.resolveFlags();return e?r?e+r:e:r}createAssignment(e,r){this.assignments.push({t:0,s:e,k:s,v:r})}createAddAssignment(e,r){this.assignments.push({t:1,s:this.getRefParam(e),k:s,v:r})}createSetAssignment(e,r,t){this.assignments.push({t:2,s:this.getRefParam(e),k:r,v:t})}createDeleteAssignment(e,r){this.assignments.push({t:3,s:this.getRefParam(e),k:r,v:s})}createArrayAssign(e,r,t){this.createAssignment(this.getRefParam(e)+"["+r+"]",t)}createObjectAssign(e,r,t){this.createAssignment(this.getRefParam(e)+"."+r,t)}isIndexedValueInStack(e){return e.t===4&&this.stack.includes(e.i)}serializeReference(e){return this.assignIndexedValue(e.i,C+'.get("'+e.s+'")')}serializeArrayItem(e,r,t){return r?this.isIndexedValueInStack(r)?(this.markRef(e),this.createArrayAssign(e,t,this.getRefParam(r.i)),""):this.serialize(r):""}serializeArray(e){let r=e.i;if(e.l){this.stack.push(r);let t=e.a,n=this.serializeArrayItem(r,t[0],0),a=n==="";for(let i=1,l=e.l,c;i<l;i++)c=this.serializeArrayItem(r,t[i],i),n+=","+c,a=c==="";return this.stack.pop(),this.pushObjectFlag(e.o,e.i),this.assignIndexedValue(r,"["+n+(a?",]":"]"))}return this.assignIndexedValue(r,"[]")}serializeProperty(e,r,t){if(typeof r=="string"){let n=Number(r),a=n>=0&&n.toString()===r||We(r);if(this.isIndexedValueInStack(t)){let i=this.getRefParam(t.i);return this.markRef(e.i),a&&n!==n?this.createObjectAssign(e.i,r,i):this.createArrayAssign(e.i,a?r:'"'+r+'"',i),""}return(a?r:'"'+r+'"')+":"+this.serialize(t)}return"["+this.serialize(r)+"]:"+this.serialize(t)}serializeProperties(e,r){let t=r.s;if(t){let n=r.k,a=r.v;this.stack.push(e.i);let i=this.serializeProperty(e,n[0],a[0]);for(let l=1,c=i;l<t;l++)c=this.serializeProperty(e,n[l],a[l]),i+=(c&&i&&",")+c;return this.stack.pop(),"{"+i+"}"}return"{}"}serializeObject(e){return this.pushObjectFlag(e.o,e.i),this.assignIndexedValue(e.i,this.serializeProperties(e,e.p))}serializeWithObjectAssign(e,r,t){let n=this.serializeProperties(e,r);return n!=="{}"?"Object.assign("+t+","+n+")":t}serializeStringKeyAssignment(e,r,t,n){let a=this.serialize(n),i=Number(t),l=i>=0&&i.toString()===t||We(t);if(this.isIndexedValueInStack(n))l&&i!==i?this.createObjectAssign(e.i,t,a):this.createArrayAssign(e.i,l?t:'"'+t+'"',a);else{let c=this.assignments;this.assignments=r,l&&i!==i?this.createObjectAssign(e.i,t,a):this.createArrayAssign(e.i,l?t:'"'+t+'"',a),this.assignments=c}}serializeAssignment(e,r,t,n){if(typeof t=="string")this.serializeStringKeyAssignment(e,r,t,n);else{let a=this.stack;this.stack=[];let i=this.serialize(n);this.stack=a;let l=this.assignments;this.assignments=r,this.createArrayAssign(e.i,this.serialize(t),i),this.assignments=l}}serializeAssignments(e,r){let t=r.s;if(t){let n=[],a=r.k,i=r.v;this.stack.push(e.i);for(let l=0;l<t;l++)this.serializeAssignment(e,n,a[l],i[l]);return this.stack.pop(),yr(n)}return s}serializeDictionary(e,r){if(e.p)if(this.features&8)r=this.serializeWithObjectAssign(e,e.p,r);else{this.markRef(e.i);let t=this.serializeAssignments(e,e.p);if(t)return"("+this.assignIndexedValue(e.i,r)+","+t+this.getRefParam(e.i)+")"}return this.assignIndexedValue(e.i,r)}serializeNullConstructor(e){return this.pushObjectFlag(e.o,e.i),this.serializeDictionary(e,Wr)}serializeDate(e){return this.assignIndexedValue(e.i,'new Date("'+e.s+'")')}serializeRegExp(e){return this.assignIndexedValue(e.i,"/"+e.c+"/"+e.m)}serializeSetItem(e,r){return this.isIndexedValueInStack(r)?(this.markRef(e),this.createAddAssignment(e,this.getRefParam(r.i)),""):this.serialize(r)}serializeSet(e){let r=Kr,t=e.l,n=e.i;if(t){let a=e.a;this.stack.push(n);let i=this.serializeSetItem(n,a[0]);for(let l=1,c=i;l<t;l++)c=this.serializeSetItem(n,a[l]),i+=(c&&i&&",")+c;this.stack.pop(),i&&(r+="(["+i+"])")}return this.assignIndexedValue(n,r)}serializeMapEntry(e,r,t,n){if(this.isIndexedValueInStack(r)){let a=this.getRefParam(r.i);if(this.markRef(e),this.isIndexedValueInStack(t)){let l=this.getRefParam(t.i);return this.createSetAssignment(e,a,l),""}if(t.t!==4&&t.i!=null&&this.isMarked(t.i)){let l="("+this.serialize(t)+",["+n+","+n+"])";return this.createSetAssignment(e,a,this.getRefParam(t.i)),this.createDeleteAssignment(e,n),l}let i=this.stack;return this.stack=[],this.createSetAssignment(e,a,this.serialize(t)),this.stack=i,""}if(this.isIndexedValueInStack(t)){let a=this.getRefParam(t.i);if(this.markRef(e),r.t!==4&&r.i!=null&&this.isMarked(r.i)){let l="("+this.serialize(r)+",["+n+","+n+"])";return this.createSetAssignment(e,this.getRefParam(r.i),a),this.createDeleteAssignment(e,n),l}let i=this.stack;return this.stack=[],this.createSetAssignment(e,this.serialize(r),a),this.stack=i,""}return"["+this.serialize(r)+","+this.serialize(t)+"]"}serializeMap(e){let r=Jr,t=e.e.s,n=e.i,a=e.f,i=this.getRefParam(a.i);if(t){let l=e.e.k,c=e.e.v;this.stack.push(n);let p=this.serializeMapEntry(n,l[0],c[0],i);for(let y=1,Q=p;y<t;y++)Q=this.serializeMapEntry(n,l[y],c[y],i),p+=(Q&&p&&",")+Q;this.stack.pop(),p&&(r+="(["+p+"])")}return a.t===26&&(this.markRef(a.i),r="("+this.serialize(a)+","+r+")"),this.assignIndexedValue(n,r)}serializeArrayBuffer(e){let r="new Uint8Array(",t=e.s,n=t.length;if(n){r+="["+t[0];for(let a=1;a<n;a++)r+=","+t[a];r+="]"}return this.assignIndexedValue(e.i,r+").buffer")}serializeTypedArray(e){return this.assignIndexedValue(e.i,"new "+e.c+"("+this.serialize(e.f)+","+e.b+","+e.l+")")}serializeDataView(e){return this.assignIndexedValue(e.i,"new DataView("+this.serialize(e.f)+","+e.b+","+e.l+")")}serializeAggregateError(e){let r=e.i;this.stack.push(r);let t=this.serializeDictionary(e,'new AggregateError([],"'+e.m+'")');return this.stack.pop(),t}serializeError(e){return this.serializeDictionary(e,"new "+fe[e.s]+'("'+e.m+'")')}serializePromise(e){let r,t=e.f,n=e.i,a=e.s?Yr:$r;if(this.isIndexedValueInStack(t)){let i=this.getRefParam(t.i);r=a+(e.s?"().then("+this.createFunction([],i)+")":"().catch("+this.createEffectfulFunction([],"throw "+i)+")")}else{this.stack.push(n);let i=this.serialize(t);this.stack.pop(),r=a+"("+i+")"}return this.assignIndexedValue(n,r)}serializeWellKnownSymbol(e){return this.assignIndexedValue(e.i,Ze[e.s])}serializeBoxed(e){return this.assignIndexedValue(e.i,"Object("+this.serialize(e.f)+")")}serializePlugin(e){let r=this.plugins;if(r)for(let t=0,n=r.length;t<n;t++){let a=r[t];if(a.tag===e.c)return this.assignIndexedValue(e.i,a.serialize(e.s,this,{id:e.i}))}throw new z(e.c)}getConstructor(e){let r=this.serialize(e);return r===this.getRefParam(e.i)?r:"("+r+")"}serializePromiseConstructor(e){let r=this.assignIndexedValue(e.s,"{p:0,s:0,f:0}");return this.assignIndexedValue(e.i,this.getConstructor(e.f)+"("+r+")")}serializePromiseResolve(e){return this.getConstructor(e.a[0])+"("+this.getRefParam(e.i)+","+this.serialize(e.a[1])+")"}serializePromiseReject(e){return this.getConstructor(e.a[0])+"("+this.getRefParam(e.i)+","+this.serialize(e.a[1])+")"}serializeSpecialReference(e){return this.assignIndexedValue(e.i,mr(this.features,e.s))}serializeIteratorFactory(e){let r="",t=!1;return e.f.t!==4&&(this.markRef(e.f.i),r="("+this.serialize(e.f)+",",t=!0),r+=this.assignIndexedValue(e.i,this.createFunction(["s"],this.createFunction(["i","c","d","t"],"(i=0,t={["+this.getRefParam(e.f.i)+"]:"+this.createFunction([],"t")+",next:"+this.createEffectfulFunction([],"if(i>s.d)return{done:!0,value:void 0};if(d=s.v[c=i++],c===s.t)throw d;return{done:c===s.d,value:d}")+"})"))),t&&(r+=")"),r}serializeIteratorFactoryInstance(e){return this.getConstructor(e.a[0])+"("+this.serialize(e.a[1])+")"}serializeAsyncIteratorFactory(e){let r=e.a[0],t=e.a[1],n="";r.t!==4&&(this.markRef(r.i),n+="("+this.serialize(r)),t.t!==4&&(this.markRef(t.i),n+=(n?",":"(")+this.serialize(t)),n&&(n+=",");let a=this.assignIndexedValue(e.i,this.createFunction(["s"],this.createFunction(["b","c","p","d","e","t","f"],"(b=[],c=0,p=[],d=-1,e=!1,f="+this.createEffectfulFunction(["i","l"],"for(i=0,l=p.length;i<l;i++)p[i].s({done:!0,value:void 0})")+",s.on({next:"+this.createEffectfulFunction(["v","t"],"if(t=p.shift())t.s({done:!1,value:v});b.push(v)")+",throw:"+this.createEffectfulFunction(["v","t"],"if(t=p.shift())t.f(v);f(),d=b.length,e=!0,b.push(v)")+",return:"+this.createEffectfulFunction(["v","t"],"if(t=p.shift())t.s({done:!0,value:v});f(),d=b.length,b.push(v)")+"}),t={["+this.getRefParam(t.i)+"]:"+this.createFunction([],"t.p")+",next:"+this.createEffectfulFunction(["i","t","v"],"if(d===-1){return((i=c++)>=b.length)?("+this.getRefParam(r.i)+"(t={p:0,s:0,f:0}),p.push(t),t.p):{done:!1,value:b[i]}}if(c>d)return{done:!0,value:void 0};if(v=b[i=c++],i!==d)return{done:!1,value:v};if(e)throw v;return{done:!0,value:v}")+"})")));return n?n+a+")":a}serializeAsyncIteratorFactoryInstance(e){return this.getConstructor(e.a[0])+"("+this.serialize(e.a[1])+")"}serializeStreamConstructor(e){let r=this.assignIndexedValue(e.i,this.getConstructor(e.f)+"()"),t=e.a.length;if(t){let n=this.serialize(e.a[0]);for(let a=1;a<t;a++)n+=","+this.serialize(e.a[a]);return"("+r+","+n+","+this.getRefParam(e.i)+")"}return r}serializeStreamNext(e){return this.getRefParam(e.i)+".next("+this.serialize(e.f)+")"}serializeStreamThrow(e){return this.getRefParam(e.i)+".throw("+this.serialize(e.f)+")"}serializeStreamReturn(e){return this.getRefParam(e.i)+".return("+this.serialize(e.f)+")"}serialize(e){try{switch(e.t){case 2:return Qe[e.s];case 0:return""+e.s;case 1:return'"'+e.s+'"';case 3:return e.s+"n";case 4:return this.getRefParam(e.i);case 18:return this.serializeReference(e);case 9:return this.serializeArray(e);case 10:return this.serializeObject(e);case 11:return this.serializeNullConstructor(e);case 5:return this.serializeDate(e);case 6:return this.serializeRegExp(e);case 7:return this.serializeSet(e);case 8:return this.serializeMap(e);case 19:return this.serializeArrayBuffer(e);case 16:case 15:return this.serializeTypedArray(e);case 20:return this.serializeDataView(e);case 14:return this.serializeAggregateError(e);case 13:return this.serializeError(e);case 12:return this.serializePromise(e);case 17:return this.serializeWellKnownSymbol(e);case 21:return this.serializeBoxed(e);case 22:return this.serializePromiseConstructor(e);case 23:return this.serializePromiseResolve(e);case 24:return this.serializePromiseReject(e);case 25:return this.serializePlugin(e);case 26:return this.serializeSpecialReference(e);case 27:return this.serializeIteratorFactory(e);case 28:return this.serializeIteratorFactoryInstance(e);case 29:return this.serializeAsyncIteratorFactory(e);case 30:return this.serializeAsyncIteratorFactoryInstance(e);case 31:return this.serializeStreamConstructor(e);case 32:return this.serializeStreamNext(e);case 33:return this.serializeStreamThrow(e);case 34:return this.serializeStreamReturn(e);default:throw new h(e)}}catch(r){throw new se(r)}}};var j=class extends B{constructor(r){super(r);this.mode="cross";this.scopeId=r.scopeId}getRefParam(r){return ee+"["+r+"]"}assignIndexedValue(r,t){return this.getRefParam(r)+"="+t}serializeTop(r){let t=this.serialize(r),n=r.i;if(n==null)return t;let a=this.resolvePatches(),i=this.getRefParam(n),l=this.scopeId==null?"":ee,c=a?"("+t+","+a+i+")":t;if(l==="")return r.t===10&&!a?"("+c+")":c;let p=this.scopeId==null?"()":"("+ee+'["'+d(this.scopeId)+'"])';return"("+this.createFunction([l],c)+")"+p}};var b=class extends ${parseItems(e){let r=[];for(let t=0,n=e.length;t<n;t++)t in e&&(r[t]=this.parse(e[t]));return r}parseArray(e,r){return Ae(e,r,this.parseItems(r))}parseProperties(e){let r=Object.entries(e),t=[],n=[];for(let i=0,l=r.length;i<l;i++)t.push(d(r[i][0])),n.push(this.parse(r[i][1]));let a=Symbol.iterator;return a in e&&(t.push(this.parseWellKnownSymbol(a)),n.push(L(this.parseIteratorFactory(),this.parse(Y(e))))),a=Symbol.asyncIterator,a in e&&(t.push(this.parseWellKnownSymbol(a)),n.push(W(this.parseAsyncIteratorFactory(),this.parse(F())))),a=Symbol.toStringTag,a in e&&(t.push(this.parseWellKnownSymbol(a)),n.push(R(e[a]))),a=Symbol.isConcatSpreadable,a in e&&(t.push(this.parseWellKnownSymbol(a)),n.push(e[a]?E:P)),{k:t,v:n,s:t.length}}parsePlainObject(e,r,t){return this.createObjectNode(e,r,t,this.parseProperties(r))}parseBoxed(e,r){return we(e,this.parse(r.valueOf()))}parseTypedArray(e,r){return Ee(e,r,this.parse(r.buffer))}parseBigIntTypedArray(e,r){return Pe(e,r,this.parse(r.buffer))}parseDataView(e,r){return Re(e,r,this.parse(r.buffer))}parseError(e,r){let t=M(r,this.features);return Oe(e,r,t?this.parseProperties(t):s)}parseAggregateError(e,r){let t=M(r,this.features);return Ce(e,r,t?this.parseProperties(t):s)}parseMap(e,r){let t=[],n=[];for(let[a,i]of r.entries())t.push(this.parse(a)),n.push(this.parse(i));return this.createMapNode(e,t,n,r.size)}parseSet(e,r){let t=[];for(let n of r.keys())t.push(this.parse(n));return Te(e,r.size,t)}parsePlugin(e,r){let t=this.plugins;if(t)for(let n=0,a=t.length;n<a;n++){let i=t[n];if(i.parse.sync&&i.test(r))return U(e,i.tag,i.parse.sync(r,this,{id:e}))}}parseStream(e,r){return K(e,this.parseSpecialReference(4),[])}parsePromise(e,r){return this.createPromiseConstructorNode(e,this.createIndex({}))}parseObject(e,r){if(Array.isArray(r))return this.parseArray(e,r);if(Ve(r))return this.parseStream(e,r);let t=r.constructor;if(t===O)return this.parse(r.replacement);let n=this.parsePlugin(e,r);if(n)return n;switch(t){case Object:return this.parsePlainObject(e,r,!1);case void 0:return this.parsePlainObject(e,r,!0);case Date:return be(e,r);case RegExp:return xe(e,r);case Error:case EvalError:case RangeError:case ReferenceError:case SyntaxError:case TypeError:case URIError:return this.parseError(e,r);case Number:case Boolean:case String:case BigInt:return this.parseBoxed(e,r);case ArrayBuffer:return Ie(e,r);case Int8Array:case Int16Array:case Int32Array:case Uint8Array:case Uint16Array:case Uint32Array:case Uint8ClampedArray:case Float32Array:case Float64Array:return this.parseTypedArray(e,r);case DataView:return this.parseDataView(e,r);case Map:return this.parseMap(e,r);case Set:return this.parseSet(e,r);default:break}if(t===Promise||r instanceof Promise)return this.parsePromise(e,r);let a=this.features;if(a&16)switch(t){case BigInt64Array:case BigUint64Array:return this.parseBigIntTypedArray(e,r);default:break}if(a&1&&typeof AggregateError!="undefined"&&(t===AggregateError||r instanceof AggregateError))return this.parseAggregateError(e,r);if(r instanceof Error)return this.parseError(e,r);if(Symbol.iterator in r||Symbol.asyncIterator in r)return this.parsePlainObject(e,r,!!t);throw new f(r)}parseFunction(e){let r=this.getReference(e);if(r.type!==0)return r.value;let t=this.parsePlugin(r.value,e);if(t)return t;throw new f(e)}parse(e){switch(typeof e){case"boolean":return e?E:P;case"undefined":return ge;case"string":return R(e);case"number":return ve(e);case"bigint":return Ne(e);case"object":{if(e){let r=this.getReference(e);return r.type===0?this.parseObject(r.value,e):r.value}return Se}case"symbol":return this.parseWellKnownSymbol(e);case"function":return this.parseFunction(e);default:throw new f(e)}}parseTop(e){try{return this.parse(e)}catch(r){throw r instanceof v?r:new v(r)}}};var ce=class extends b{constructor(r){super(r);this.alive=!0;this.pending=0;this.initial=!0;this.buffer=[];this.onParseCallback=r.onParse,this.onErrorCallback=r.onError,this.onDoneCallback=r.onDone}onParseInternal(r,t){try{this.onParseCallback(r,t)}catch(n){this.onError(n)}}flush(){for(let r=0,t=this.buffer.length;r<t;r++)this.onParseInternal(this.buffer[r],!1)}onParse(r){this.initial?this.buffer.push(r):this.onParseInternal(r,!1)}onError(r){if(this.onErrorCallback)this.onErrorCallback(r);else throw r}onDone(){this.onDoneCallback&&this.onDoneCallback()}pushPendingState(){this.pending++}popPendingState(){--this.pending<=0&&this.onDone()}parseProperties(r){let t=Object.entries(r),n=[],a=[];for(let l=0,c=t.length;l<c;l++)n.push(d(t[l][0])),a.push(this.parse(t[l][1]));let i=Symbol.iterator;return i in r&&(n.push(this.parseWellKnownSymbol(i)),a.push(L(this.parseIteratorFactory(),this.parse(Y(r))))),i=Symbol.asyncIterator,i in r&&(n.push(this.parseWellKnownSymbol(i)),a.push(W(this.parseAsyncIteratorFactory(),this.parse(De(r))))),i=Symbol.toStringTag,i in r&&(n.push(this.parseWellKnownSymbol(i)),a.push(R(r[i]))),i=Symbol.isConcatSpreadable,i in r&&(n.push(this.parseWellKnownSymbol(i)),a.push(r[i]?E:P)),{k:n,v:a,s:n.length}}handlePromiseSuccess(r,t){let n=this.parseWithError(t);n&&this.onParse(u(23,r,s,s,s,s,s,s,[this.parseSpecialReference(2),n],s,s,s)),this.popPendingState()}handlePromiseFailure(r,t){if(this.alive){let n=this.parseWithError(t);n&&this.onParse(u(24,r,s,s,s,s,s,s,[this.parseSpecialReference(3),n],s,s,s))}this.popPendingState()}parsePromise(r,t){let n=this.createIndex({});return t.then(this.handlePromiseSuccess.bind(this,n),this.handlePromiseFailure.bind(this,n)),this.pushPendingState(),this.createPromiseConstructorNode(r,n)}parsePlugin(r,t){let n=this.plugins;if(n)for(let a=0,i=n.length;a<i;a++){let l=n[a];if(l.parse.stream&&l.test(t))return U(r,l.tag,l.parse.stream(t,this,{id:r}))}return s}parseStream(r,t){let n=K(r,this.parseSpecialReference(4),[]);return this.pushPendingState(),t.on({next:a=>{if(this.alive){let i=this.parseWithError(a);i&&this.onParse(ze(r,i))}},throw:a=>{if(this.alive){let i=this.parseWithError(a);i&&this.onParse(ke(r,i))}this.popPendingState()},return:a=>{if(this.alive){let i=this.parseWithError(a);i&&this.onParse(Fe(r,i))}this.popPendingState()}}),n}parseWithError(r){try{return this.parse(r)}catch(t){return this.onError(t),s}}start(r){let t=this.parseWithError(r);t&&(this.onParseInternal(t,!0),this.initial=!1,this.flush(),this.pending<=0&&this.destroy())}destroy(){this.alive&&(this.onDone(),this.alive=!1)}isAlive(){return this.alive}};var q=class extends ce{constructor(){super(...arguments);this.mode="cross"}};var H=class extends b{constructor(){super(...arguments);this.mode="cross"}};function qr(o,e={}){let r=m(e.plugins),t=new H({plugins:r,disabledFeatures:e.disabledFeatures,refs:e.refs}),n=t.parseTop(o);return new j({plugins:r,features:t.features,scopeId:e.scopeId,markedRefs:t.marked}).serializeTop(n)}async function Hr(o,e={}){let r=m(e.plugins),t=new G({plugins:r,disabledFeatures:e.disabledFeatures,refs:e.refs}),n=await t.parseTop(o);return new j({plugins:r,features:t.features,scopeId:e.scopeId,markedRefs:t.marked}).serializeTop(n)}function Zr(o,e={}){let r=m(e.plugins);return new H({plugins:r,disabledFeatures:e.disabledFeatures,refs:e.refs}).parseTop(o)}async function Xr(o,e={}){let r=m(e.plugins);return await new G({plugins:r,disabledFeatures:e.disabledFeatures,refs:e.refs}).parseTop(o)}function Ke(o,e){let r=m(e.plugins),t=new q({plugins:r,refs:e.refs,disabledFeatures:e.disabledFeatures,onParse(n,a){let i=new j({plugins:r,features:t.features,scopeId:e.scopeId,markedRefs:t.marked}),l;try{l=i.serializeTop(n)}catch(c){e.onError&&e.onError(c);return}e.onSerialize(l,a)},onError:e.onError,onDone:e.onDone});return t.start(o),t.destroy.bind(t)}function Qr(o,e){let r=m(e.plugins),t=new q({plugins:r,refs:e.refs,disabledFeatures:e.disabledFeatures,onParse:e.onParse,onError:e.onError,onDone:e.onDone});return t.start(o),t.destroy.bind(t)}function et(o,e){let r=m(e.plugins);return new ie({plugins:r,refs:e.refs}).deserializeTop(o)}var Z=class extends V{constructor(){super(...arguments);this.mode="vanilla"}};var ue=class extends D{constructor(r){super(r);this.mode="vanilla";this.marked=new Set(r.markedRefs)}assignIndexedValue(r,t){return this.marked.has(r)&&this.refs.set(r,t),t}};var br="hjkmoquxzABCDEFGHIJKLNPQRTUVWXYZ$_",vr=br.length,xr="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789$_",Nr=xr.length;function Je(o){let e=o%vr,r=br[e];for(o=(o-e)/vr;o>0;)e=o%Nr,r+=xr[e],o=(o-e)/Nr;return r}var _=class extends B{constructor(){super(...arguments);this.mode="vanilla";this.valid=new Map;this.vars=[]}getRefParam(r){let t=this.valid.get(r);t==null&&(t=this.valid.size,this.valid.set(r,t));let n=this.vars[t];return n==null&&(n=Je(t),this.vars[t]=n),n}assignIndexedValue(r,t){return this.isMarked(r)?this.getRefParam(r)+"="+t:t}serializePromiseConstructor(r){throw new h(r)}serializePromiseResolve(r){throw new h(r)}serializePromiseReject(r){throw new h(r)}serializeTop(r){let t=this.serialize(r);if(r.i!=null&&this.vars.length){let n=this.resolvePatches(),a=t;if(n){let i=this.getRefParam(r.i);a=t+","+n+i,t.startsWith(i+"=")||(a=i+"="+a),a="("+a+")"}return"("+this.createFunction(this.vars,a)+")()"}return r.t===10?"("+t+")":t}};var X=class extends b{constructor(){super(...arguments);this.mode="vanilla"}};function rt(o,e={}){let r=m(e.plugins),t=new X({plugins:r,disabledFeatures:e.disabledFeatures}),n=t.parseTop(o);return new _({plugins:r,features:t.features,markedRefs:t.marked}).serializeTop(n)}async function tt(o,e={}){let r=m(e.plugins),t=new Z({plugins:r,disabledFeatures:e.disabledFeatures}),n=await t.parseTop(o);return new _({plugins:r,features:t.features,markedRefs:t.marked}).serializeTop(n)}function st(o){return(0,eval)(o)}function ot(o,e={}){let r=m(e.plugins),t=new X({plugins:r,disabledFeatures:e.disabledFeatures});return{t:t.parseTop(o),f:t.features,m:Array.from(t.marked)}}async function nt(o,e={}){let r=m(e.plugins),t=new Z({plugins:r,disabledFeatures:e.disabledFeatures});return{t:await t.parseTop(o),f:t.features,m:Array.from(t.marked)}}function at(o,e={}){let r=m(e.plugins);return new _({plugins:r,features:o.f,markedRefs:o.m}).serializeTop(o.t)}function it(o,e={}){let r=m(e.plugins);return new ue({plugins:r,markedRefs:o.m}).deserializeTop(o.t)}var pe=class{constructor(e){this.options=e;this.alive=!0;this.flushed=!1;this.done=!1;this.pending=0;this.cleanups=[];this.refs=new Map;this.keys=new Set;this.ids=0;this.plugins=m(e.plugins)}write(e,r){this.alive&&!this.flushed&&(this.pending++,this.keys.add(e),this.cleanups.push(Ke(r,{plugins:this.plugins,scopeId:this.options.scopeId,refs:this.refs,disabledFeatures:this.options.disabledFeatures,onError:this.options.onError,onSerialize:(t,n)=>{this.alive&&this.options.onData(n?this.options.globalIdentifier+'["'+d(e)+'"]='+t:t)},onDone:()=>{this.alive&&(this.pending--,this.pending<=0&&this.flushed&&!this.done&&this.options.onDone&&(this.options.onDone(),this.done=!0))}})))}getNextID(){for(;this.keys.has(""+this.ids);)this.ids++;return""+this.ids}push(e){let r=this.getNextID();return this.write(r,e),r}flush(){this.alive&&(this.flushed=!0,this.pending<=0&&!this.done&&this.options.onDone&&(this.options.onDone(),this.done=!0))}close(){if(this.alive){for(let e=0,r=this.cleanups.length;e<r;e++)this.cleanups[e]();!this.done&&this.options.onDone&&(this.options.onDone(),this.done=!0),this.alive=!1}}}; | ||
| "use strict";var ur=Object.defineProperty;var tn=Object.getOwnPropertyDescriptor;var nn=Object.getOwnPropertyNames;var on=Object.prototype.hasOwnProperty;var an=(e,r)=>{for(var t in r)ur(e,t,{get:r[t],enumerable:!0})},sn=(e,r,t,n)=>{if(r&&typeof r=="object"||typeof r=="function")for(let a of nn(r))!on.call(e,a)&&a!==t&&ur(e,a,{get:()=>r[a],enumerable:!(n=tn(r,a))||n.enumerable});return e};var ln=e=>sn(ur({},"__esModule",{value:!0}),e);var Va={};an(Va,{Feature:()=>V,OpaqueReference:()=>F,Serializer:()=>ve,SerovalDeserializationError:()=>Se,SerovalError:()=>ee,SerovalMissingInstanceError:()=>_,SerovalMissingPluginError:()=>U,SerovalMissingReferenceError:()=>ue,SerovalMissingReferenceForIdError:()=>ce,SerovalMode:()=>K,SerovalParserError:()=>O,SerovalSerializationError:()=>Ge,SerovalUnknownTypedArrayError:()=>pe,SerovalUnsupportedNodeError:()=>w,SerovalUnsupportedTypeError:()=>E,compileJSON:()=>Fa,createPlugin:()=>Fn,createReference:()=>at,createStream:()=>Y,crossSerialize:()=>Ea,crossSerializeAsync:()=>Pa,crossSerializeStream:()=>Zr,deserialize:()=>ka,fromCrossJSON:()=>ha,fromJSON:()=>Ba,getCrossReferenceHeader:()=>ot,resolvePlugins:()=>C,serialize:()=>wa,serializeAsync:()=>za,toCrossJSON:()=>xa,toCrossJSONAsync:()=>Ta,toCrossJSONStream:()=>Oa,toJSON:()=>_a,toJSONAsync:()=>Da});module.exports=ln(Va);var V=(s=>(s[s.AggregateError=1]="AggregateError",s[s.ArrowFunction=2]="ArrowFunction",s[s.ErrorPrototypeStack=4]="ErrorPrototypeStack",s[s.ObjectAssign=8]="ObjectAssign",s[s.BigIntTypedArray=16]="BigIntTypedArray",s))(V||{});var b=Symbol.asyncIterator,cr=Symbol.hasInstance,P=Symbol.isConcatSpreadable,A=Symbol.iterator,fr=Symbol.match,Sr=Symbol.matchAll,pr=Symbol.replace,dr=Symbol.search,mr=Symbol.species,gr=Symbol.split,yr=Symbol.toPrimitive,x=Symbol.toStringTag,Nr=Symbol.unscopables;var Hr={0:"Symbol.asyncIterator",1:"Symbol.hasInstance",2:"Symbol.isConcatSpreadable",3:"Symbol.iterator",4:"Symbol.match",5:"Symbol.matchAll",6:"Symbol.replace",7:"Symbol.search",8:"Symbol.species",9:"Symbol.split",10:"Symbol.toPrimitive",11:"Symbol.toStringTag",12:"Symbol.unscopables"},be={[b]:0,[cr]:1,[P]:2,[A]:3,[fr]:4,[Sr]:5,[pr]:6,[dr]:7,[mr]:8,[gr]:9,[yr]:10,[x]:11,[Nr]:12},$r={0:b,1:cr,2:P,3:A,4:fr,5:Sr,6:pr,7:dr,8:mr,9:gr,10:yr,11:x,12:Nr},qr={2:"!0",3:"!1",1:"void 0",0:"null",4:"-0",5:"1/0",6:"-1/0",7:"0/0"},Xr={2:!0,3:!1,1:void 0,0:null,4:-0,5:Number.POSITIVE_INFINITY,6:Number.NEGATIVE_INFINITY,7:Number.NaN};var Ae={0:"Error",1:"EvalError",2:"RangeError",3:"ReferenceError",4:"SyntaxError",5:"TypeError",6:"URIError"},Qr={0:Error,1:EvalError,2:RangeError,3:ReferenceError,4:SyntaxError,5:TypeError,6:URIError},o=void 0;function c(e,r,t,n,a,s,i,l,u,g,S,d){return{t:e,i:r,s:t,l:n,c:a,m:s,p:i,e:l,a:u,f:g,b:S,o:d}}function D(e){return c(2,o,e,o,o,o,o,o,o,o,o,o)}var $=D(2),q=D(3),Re=D(1),Ie=D(0),et=D(4),rt=D(5),tt=D(6),nt=D(7);function un(e){switch(e){case'"':return'\\"';case"\\":return"\\\\";case` | ||
| `:return"\\n";case"\r":return"\\r";case"\b":return"\\b";case" ":return"\\t";case"\f":return"\\f";case"<":return"\\x3C";case"\u2028":return"\\u2028";case"\u2029":return"\\u2029";default:return}}function y(e){let r="",t=0,n;for(let a=0,s=e.length;a<s;a++)n=un(e[a]),n&&(r+=e.slice(t,a)+n,t=a+1);return t===0?r=e:r+=e.slice(t),r}function cn(e){switch(e){case"\\\\":return"\\";case'\\"':return'"';case"\\n":return` | ||
| `;case"\\r":return"\r";case"\\b":return"\b";case"\\t":return" ";case"\\f":return"\f";case"\\x3C":return"<";case"\\u2028":return"\u2028";case"\\u2029":return"\u2029";default:return e}}function k(e){return e.replace(/(\\\\|\\"|\\n|\\r|\\b|\\t|\\f|\\u2028|\\u2029|\\x3C)/g,cn)}var M="__SEROVAL_REFS__",le="$R",Ee=`self.${le}`;function ot(e){return e==null?`${Ee}=${Ee}||[]`:`(${Ee}=${Ee}||{})["${y(e)}"]=[]`}var Cr=new Map,j=new Map;function at(e,r){return Cr.set(r,e),j.set(e,r),r}function vr(e){return Cr.has(e)}function fn(e){return j.has(e)}function st(e){if(vr(e))return Cr.get(e);throw new ue(e)}function it(e){if(fn(e))return j.get(e);throw new ce(e)}typeof globalThis!="undefined"?Object.defineProperty(globalThis,M,{value:j,configurable:!0,writable:!1,enumerable:!1}):typeof window!="undefined"?Object.defineProperty(window,M,{value:j,configurable:!0,writable:!1,enumerable:!1}):typeof self!="undefined"?Object.defineProperty(self,M,{value:j,configurable:!0,writable:!1,enumerable:!1}):typeof global!="undefined"&&Object.defineProperty(global,M,{value:j,configurable:!0,writable:!1,enumerable:!1});function Pe(e){return e instanceof EvalError?1:e instanceof RangeError?2:e instanceof ReferenceError?3:e instanceof SyntaxError?4:e instanceof TypeError?5:e instanceof URIError?6:0}function Sn(e){let r=Ae[Pe(e)];return e.name!==r?{name:e.name}:e.constructor.name!==r?{name:e.constructor.name}:{}}function X(e,r){let t=Sn(e),n=Object.getOwnPropertyNames(e);for(let a=0,s=n.length,i;a<s;a++)i=n[a],i!=="name"&&i!=="message"&&(i==="stack"?r&4&&(t=t||{},t[i]=e[i]):(t=t||{},t[i]=e[i]));return t}function xe(e){return Object.isFrozen(e)?3:Object.isSealed(e)?2:Object.isExtensible(e)?0:1}function Te(e){switch(e){case Number.POSITIVE_INFINITY:return rt;case Number.NEGATIVE_INFINITY:return tt}return e!==e?nt:Object.is(e,-0)?et:c(0,o,e,o,o,o,o,o,o,o,o,o)}function Q(e){return c(1,o,y(e),o,o,o,o,o,o,o,o,o)}function Oe(e){return c(3,o,""+e,o,o,o,o,o,o,o,o,o)}function ut(e){return c(4,e,o,o,o,o,o,o,o,o,o,o)}function he(e,r){let t=r.valueOf();return c(5,e,t!==t?"":r.toISOString(),o,o,o,o,o,o,o,o,o)}function we(e,r){return c(6,e,o,o,y(r.source),r.flags,o,o,o,o,o,o)}function ct(e,r){return c(17,e,be[r],o,o,o,o,o,o,o,o,o)}function ft(e,r){return c(18,e,y(st(r)),o,o,o,o,o,o,o,o,o)}function fe(e,r,t){return c(25,e,t,o,y(r),o,o,o,o,o,o,o)}function ze(e,r,t){return c(9,e,o,r.length,o,o,o,o,t,o,o,xe(r))}function ke(e,r){return c(21,e,o,o,o,o,o,o,o,r,o,o)}function _e(e,r,t){return c(15,e,o,r.length,r.constructor.name,o,o,o,o,t,r.byteOffset,o)}function De(e,r,t){return c(16,e,o,r.length,r.constructor.name,o,o,o,o,t,r.byteOffset,o)}function Fe(e,r,t){return c(20,e,o,r.byteLength,o,o,o,o,o,t,r.byteOffset,o)}function Be(e,r,t){return c(13,e,Pe(r),o,o,y(r.message),t,o,o,o,o,o)}function Ve(e,r,t){return c(14,e,Pe(r),o,o,y(r.message),t,o,o,o,o,o)}function Me(e,r,t){return c(7,e,o,r,o,o,o,o,t,o,o,o)}function je(e,r){return c(28,o,o,o,o,o,o,o,[e,r],o,o,o)}function Ue(e,r){return c(30,o,o,o,o,o,o,o,[e,r],o,o,o)}function Le(e,r,t){return c(31,e,o,o,o,o,o,o,t,r,o,o)}function Ye(e,r){return c(32,e,o,o,o,o,o,o,o,r,o,o)}function We(e,r){return c(33,e,o,o,o,o,o,o,o,r,o,o)}function Ke(e,r){return c(34,e,o,o,o,o,o,o,o,r,o,o)}var{toString:ys}=Object.prototype;var pn={parsing:1,serialization:2,deserialization:3};function dn(e){return`Seroval Error (step: ${pn[e]})`}var mn=(e,r)=>dn(e),ee=class extends Error{constructor(t,n){super(mn(t,n));this.cause=n}},O=class extends ee{constructor(r){super("parsing",r)}},Ge=class extends ee{constructor(r){super("serialization",r)}},Se=class extends ee{constructor(r){super("deserialization",r)}};function L(e){return`Seroval Error (specific: ${e})`}var E=class extends Error{constructor(t){super(L(1));this.value=t}},w=class extends Error{constructor(r){super(L(2))}},U=class extends Error{constructor(r){super(L(3))}},_=class extends Error{constructor(r){super(L(4))}},ue=class extends Error{constructor(t){super(L(5));this.value=t}},ce=class extends Error{constructor(r){super(L(6))}},pe=class extends Error{constructor(r){super(L(7))}};var F=class{constructor(r,t){this.value=r;this.replacement=t}};var re=()=>{let e={p:0,s:0,f:0};return e.p=new Promise((r,t)=>{e.s=r,e.f=t}),e},gn=(e,r)=>{e.s(r),e.p.s=1,e.p.v=r},yn=(e,r)=>{e.f(r),e.p.s=2,e.p.v=r},St=re.toString(),pt=gn.toString(),dt=yn.toString(),br=()=>{let e=[],r=[],t=!0,n=!1,a=0,s=(u,g,S)=>{for(S=0;S<a;S++)r[S]&&r[S][g](u)},i=(u,g,S,d)=>{for(g=0,S=e.length;g<S;g++)d=e[g],!t&&g===S-1?u[n?"return":"throw"](d):u.next(d)},l=(u,g)=>(t&&(g=a++,r[g]=u),i(u),()=>{t&&(r[g]=r[a],r[a--]=void 0)});return{__SEROVAL_STREAM__:!0,on:u=>l(u),next:u=>{t&&(e.push(u),s(u,"next"))},throw:u=>{t&&(e.push(u),s(u,"throw"),t=!1,n=!1,r.length=0)},return:u=>{t&&(e.push(u),s(u,"return"),t=!1,n=!0,r.length=0)}}},mt=br.toString(),Ar=e=>r=>()=>{let t=0,n={[e]:()=>n,next:()=>{if(t>r.d)return{done:!0,value:void 0};let a=t++,s=r.v[a];if(a===r.t)throw s;return{done:a===r.d,value:s}}};return n},gt=Ar.toString(),Rr=(e,r)=>t=>()=>{let n=0,a=-1,s=!1,i=[],l=[],u=(S=0,d=l.length)=>{for(;S<d;S++)l[S].s({done:!0,value:void 0})};t.on({next:S=>{let d=l.shift();d&&d.s({done:!1,value:S}),i.push(S)},throw:S=>{let d=l.shift();d&&d.f(S),u(),a=i.length,s=!0,i.push(S)},return:S=>{let d=l.shift();d&&d.s({done:!0,value:S}),u(),a=i.length,i.push(S)}});let g={[e]:()=>g,next:()=>{if(a===-1){let J=n++;if(J>=i.length){let Jr=r();return l.push(Jr),Jr.p}return{done:!1,value:i[J]}}if(n>a)return{done:!0,value:void 0};let S=n++,d=i[S];if(S!==a)return{done:!1,value:d};if(s)throw d;return{done:!0,value:d}}};return g},yt=Rr.toString(),Ir=(e,r)=>{let t=atob(r),n=new Uint8Array(e);for(let a=0;a<e;a++)n[a]=t.charCodeAt(a);return n.buffer},Nt=Ir.toString();var Ct={},vt={};var bt={0:{},1:{},2:{},3:{},4:{},5:{}},At={0:"[]",1:St,2:pt,3:dt,4:mt,5:Nt};function Ze(e){return"__SEROVAL_STREAM__"in e}function Y(){return br()}function Je(e){let r=Y(),t=e[b]();async function n(){try{let a=await t.next();a.done?r.return(a.value):(r.next(a.value),await n())}catch(a){r.throw(a)}}return n().catch(()=>{}),r}var Nn=Rr(b,re);function Rt(e){return Nn(e)}function He(e){let r=[],t=-1,n=-1,a=e[A]();for(;;)try{let s=a.next();if(r.push(s.value),s.done){n=r.length-1;break}}catch(s){t=r.length,r.push(s)}return{v:r,t,d:n}}var Cn=Ar(A);function It(e){return Cn(e)}async function Er(e){try{return[1,await e]}catch(r){return[0,r]}}function de(e,r){return{plugins:r.plugins,mode:e,marked:new Set,features:31^(r.disabledFeatures||0),refs:r.refs||new Map}}function me(e,r){e.marked.add(r)}function Pr(e,r){let t=e.refs.size;return e.refs.set(r,t),t}function $e(e,r){let t=e.refs.get(r);return t!=null?(me(e,t),{type:1,value:ut(t)}):{type:0,value:Pr(e,r)}}function W(e,r){let t=$e(e,r);return t.type===1?t:vr(r)?{type:2,value:ft(t.value,r)}:t}function I(e,r){let t=W(e,r);if(t.type!==0)return t.value;if(r in be)return ct(t.value,r);throw new E(r)}function z(e,r){let t=$e(e,bt[r]);return t.type===1?t.value:c(26,t.value,r,o,o,o,o,o,o,o,o,o)}function qe(e){let r=$e(e,Ct);return r.type===1?r.value:c(27,r.value,o,o,o,o,o,o,o,I(e,A),o,o)}function Xe(e){let r=$e(e,vt);return r.type===1?r.value:c(29,r.value,o,o,o,o,o,o,[z(e,1),I(e,b)],o,o,o)}function Qe(e,r,t,n){return c(t?11:10,e,o,o,o,o,n,o,o,o,o,xe(r))}function er(e,r,t,n,a){return c(8,r,o,o,o,o,o,{k:t,v:n,s:a},o,z(e,0),o,o)}function Pt(e,r,t){return c(22,r,t,o,o,o,o,o,o,z(e,1),o,o)}function rr(e,r,t){let n=new Uint8Array(t),a=n.length,s="";for(let i=0;i<a;i++)s+=String.fromCharCode(n[i]);return c(19,r,y(btoa(s)),a,o,o,o,o,o,z(e,5),o,o)}function te(e,r){return{base:de(e,r),child:void 0}}var Tr=class{constructor(r){this._p=r}parse(r){return N(this._p,r)}};async function An(e,r){let t=[];for(let n=0,a=r.length;n<a;n++)n in r&&(t[n]=await N(e,r[n]));return t}async function Rn(e,r,t){return ze(r,t,await An(e,t))}async function Or(e,r){let t=Object.entries(r),n=[],a=[];for(let s=0,i=t.length;s<i;s++)n.push(y(t[s][0])),a.push(await N(e,t[s][1]));return A in r&&(n.push(I(e.base,A)),a.push(je(qe(e.base),await N(e,He(r))))),b in r&&(n.push(I(e.base,b)),a.push(Ue(Xe(e.base),await N(e,Je(r))))),x in r&&(n.push(I(e.base,x)),a.push(Q(r[x]))),P in r&&(n.push(I(e.base,P)),a.push(r[P]?$:q)),{k:n,v:a,s:n.length}}async function xr(e,r,t,n){return Qe(r,t,n,await Or(e,t))}async function In(e,r,t){return ke(r,await N(e,t.valueOf()))}async function En(e,r,t){return _e(r,t,await N(e,t.buffer))}async function Pn(e,r,t){return De(r,t,await N(e,t.buffer))}async function xn(e,r,t){return Fe(r,t,await N(e,t.buffer))}async function xt(e,r,t){let n=X(t,e.base.features);return Be(r,t,n?await Or(e,n):o)}async function Tn(e,r,t){let n=X(t,e.base.features);return Ve(r,t,n?await Or(e,n):o)}async function On(e,r,t){let n=[],a=[];for(let[s,i]of t.entries())n.push(await N(e,s)),a.push(await N(e,i));return er(e.base,r,n,a,t.size)}async function hn(e,r,t){let n=[];for(let a of t.keys())n.push(await N(e,a));return Me(r,t.size,n)}async function Tt(e,r,t){let n=e.base.plugins;if(n)for(let a=0,s=n.length;a<s;a++){let i=n[a];if(i.parse.async&&i.test(t))return e.child==null&&(e.child=new Tr(e)),fe(r,i.tag,await i.parse.async(t,e.child,{id:r}))}return o}async function wn(e,r,t){let[n,a]=await Er(t);return c(12,r,n,o,o,o,o,o,o,await N(e,a),o,o)}function zn(e,r,t,n){let a=[],s=r.on({next:i=>{me(this.base,e),N(this,i).then(l=>{a.push(Ye(e,l))},l=>{n(l),s()})},throw:i=>{me(this.base,e),N(this,i).then(l=>{a.push(We(e,l)),t(a),s()},l=>{n(l),s()})},return:i=>{me(this.base,e),N(this,i).then(l=>{a.push(Ke(e,l)),t(a),s()},l=>{n(l),s()})}})}async function kn(e,r,t){return Le(r,z(e.base,4),await new Promise(zn.bind(e,r,t)))}async function _n(e,r,t){if(Array.isArray(t))return Rn(e,r,t);if(Ze(t))return kn(e,r,t);let n=t.constructor;if(n===F)return N(e,t.replacement);let a=await Tt(e,r,t);if(a)return a;switch(n){case Object:return xr(e,r,t,!1);case o:return xr(e,r,t,!0);case Date:return he(r,t);case RegExp:return we(r,t);case Error:case EvalError:case RangeError:case ReferenceError:case SyntaxError:case TypeError:case URIError:return xt(e,r,t);case Number:case Boolean:case String:case BigInt:return In(e,r,t);case ArrayBuffer:return rr(e.base,r,t);case Int8Array:case Int16Array:case Int32Array:case Uint8Array:case Uint16Array:case Uint32Array:case Uint8ClampedArray:case Float32Array:case Float64Array:return En(e,r,t);case DataView:return xn(e,r,t);case Map:return On(e,r,t);case Set:return hn(e,r,t);default:break}if(n===Promise||t instanceof Promise)return wn(e,r,t);let s=e.base.features;if(s&16)switch(n){case BigInt64Array:case BigUint64Array:return Pn(e,r,t);default:break}if(s&1&&typeof AggregateError!="undefined"&&(n===AggregateError||t instanceof AggregateError))return Tn(e,r,t);if(t instanceof Error)return xt(e,r,t);if(A in t||b in t)return xr(e,r,t,!!n);throw new E(t)}async function Dn(e,r){let t=W(e.base,r);if(t.type!==0)return t.value;let n=await Tt(e,t.value,r);if(n)return n;throw new E(r)}async function N(e,r){switch(typeof r){case"boolean":return r?$:q;case"undefined":return Re;case"string":return Q(r);case"number":return Te(r);case"bigint":return Oe(r);case"object":{if(r){let t=W(e.base,r);return t.type===0?await _n(e,t.value,r):t.value}return Ie}case"symbol":return I(e.base,r);case"function":return Dn(e,r);default:throw new E(r)}}async function ne(e,r){try{return await N(e,r)}catch(t){throw t instanceof O?t:new O(t)}}var K=(t=>(t[t.Vanilla=1]="Vanilla",t[t.Cross=2]="Cross",t))(K||{});function Fn(e){return e}function Ot(e,r){for(let t=0,n=r.length;t<n;t++){let a=r[t];e.has(a)||(e.add(a),a.extends&&Ot(e,a.extends))}}function C(e){if(e){let r=new Set;return Ot(r,e),[...r]}}function ht(e){switch(e){case"Int8Array":return Int8Array;case"Int16Array":return Int16Array;case"Int32Array":return Int32Array;case"Uint8Array":return Uint8Array;case"Uint16Array":return Uint16Array;case"Uint32Array":return Uint32Array;case"Uint8ClampedArray":return Uint8ClampedArray;case"Float32Array":return Float32Array;case"Float64Array":return Float64Array;case"BigInt64Array":return BigInt64Array;case"BigUint64Array":return BigUint64Array;default:throw new pe(e)}}function wt(e,r){switch(r){case 3:return Object.freeze(e);case 1:return Object.preventExtensions(e);case 2:return Object.seal(e);default:return e}}function zt(e,r){return{mode:e,plugins:r.plugins,refs:r.refs||new Map}}function kt(e){return{mode:1,base:zt(1,e),child:void 0,state:{marked:new Set(e.markedRefs)}}}function _t(e){return{mode:2,base:zt(2,e),child:void 0}}var hr=class{constructor(r){this._p=r}deserialize(r){return m(this._p,r)}};function Bn(e,r,t){return e.state.marked.has(r)&&e.base.refs.set(r,t),t}function Vn(e,r,t){return e.base.refs.has(r)||e.base.refs.set(r,t),t}function v(e,r,t){return e.mode===1?Bn(e,r,t):Vn(e,r,t)}function Mn(e,r){return v(e,r.i,it(k(r.s)))}function jn(e,r){let t=r.l,n=v(e,r.i,new Array(t)),a;for(let s=0;s<t;s++)a=r.a[s],a&&(n[s]=m(e,a));return wt(n,r.o),n}function Dt(e,r,t){let n=r.s;if(n){let a=r.k,s=r.v;for(let i=0,l;i<n;i++)l=a[i],typeof l=="string"?t[k(l)]=m(e,s[i]):t[m(e,l)]=m(e,s[i])}return t}function Un(e,r){let t=v(e,r.i,r.t===10?{}:Object.create(null));return Dt(e,r.p,t),wt(t,r.o),t}function Ln(e,r){return v(e,r.i,new Date(r.s))}function Yn(e,r){return v(e,r.i,new RegExp(k(r.c),r.m))}function Wn(e,r){let t=v(e,r.i,new Set),n=r.a;for(let a=0,s=r.l;a<s;a++)t.add(m(e,n[a]));return t}function Kn(e,r){let t=v(e,r.i,new Map),n=r.e.k,a=r.e.v;for(let s=0,i=r.e.s;s<i;s++)t.set(m(e,n[s]),m(e,a[s]));return t}function Gn(e,r){return v(e,r.i,Ir(r.l,k(r.s)))}function Zn(e,r){let t=ht(r.c),n=m(e,r.f);return v(e,r.i,new t(n,r.b,r.l))}function Jn(e,r){let t=m(e,r.f);return v(e,r.i,new DataView(t,r.b,r.l))}function Ft(e,r,t){if(r.p){let n=Dt(e,r.p,{});Object.assign(t,n)}return t}function Hn(e,r){let t=v(e,r.i,new AggregateError([],k(r.m)));return Ft(e,r,t)}function $n(e,r){let t=Qr[r.s],n=v(e,r.i,new t(k(r.m)));return Ft(e,r,n)}function qn(e,r){let t=re(),n=v(e,r.i,t.p),a=m(e,r.f);return r.s?t.s(a):t.f(a),n}function Xn(e,r){return v(e,r.i,Object(m(e,r.f)))}function Qn(e,r){let t=e.base.plugins;if(t){let n=k(r.c);for(let a=0,s=t.length;a<s;a++){let i=t[a];if(i.tag===n)return e.child==null&&(e.child=new hr(e)),v(e,r.i,i.deserialize(r.s,e.child,{id:r.i}))}}throw new U(r.c)}function eo(e,r){return v(e,r.i,v(e,r.s,re()).p)}function ro(e,r){let t=e.base.refs.get(r.i);if(t){t.s(m(e,r.a[1]));return}throw new _("Promise")}function to(e,r){let t=e.base.refs.get(r.i);if(t){t.f(m(e,r.a[1]));return}throw new _("Promise")}function no(e,r){m(e,r.a[0]);let t=m(e,r.a[1]);return It(t)}function oo(e,r){m(e,r.a[0]);let t=m(e,r.a[1]);return Rt(t)}function ao(e,r){let t=v(e,r.i,Y()),n=r.a.length;if(n)for(let a=0;a<n;a++)m(e,r.a[a]);return t}function so(e,r){let t=e.base.refs.get(r.i);if(t){t.next(m(e,r.f));return}throw new _("Stream")}function io(e,r){let t=e.base.refs.get(r.i);if(t){t.throw(m(e,r.f));return}throw new _("Stream")}function lo(e,r){let t=e.base.refs.get(r.i);if(t){t.return(m(e,r.f));return}throw new _("Stream")}function uo(e,r){m(e,r.f)}function co(e,r){m(e,r.a[1])}function m(e,r){switch(r.t){case 2:return Xr[r.s];case 0:return r.s;case 1:return k(r.s);case 3:return BigInt(r.s);case 4:return e.base.refs.get(r.i);case 18:return Mn(e,r);case 9:return jn(e,r);case 10:case 11:return Un(e,r);case 5:return Ln(e,r);case 6:return Yn(e,r);case 7:return Wn(e,r);case 8:return Kn(e,r);case 19:return Gn(e,r);case 16:case 15:return Zn(e,r);case 20:return Jn(e,r);case 14:return Hn(e,r);case 13:return $n(e,r);case 12:return qn(e,r);case 17:return $r[r.s];case 21:return Xn(e,r);case 25:return Qn(e,r);case 22:return eo(e,r);case 23:return ro(e,r);case 24:return to(e,r);case 28:return no(e,r);case 30:return oo(e,r);case 31:return ao(e,r);case 32:return so(e,r);case 33:return io(e,r);case 34:return lo(e,r);case 27:return uo(e,r);case 29:return co(e,r);default:throw new w(r)}}function tr(e,r){try{return m(e,r)}catch(t){throw new Se(t)}}var fo=()=>T,So=fo.toString(),Bt=/=>/.test(So);function nr(e,r){return Bt?(e.length===1?e[0]:"("+e.join(",")+")")+"=>"+(r.startsWith("{")?"("+r+")":r):"function("+e.join(",")+"){return "+r+"}"}function Vt(e,r){return Bt?(e.length===1?e[0]:"("+e.join(",")+")")+"=>{"+r+"}":"function("+e.join(",")+"){"+r+"}"}var Ut="hjkmoquxzABCDEFGHIJKLNPQRTUVWXYZ$_",Mt=Ut.length,Lt="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789$_",jt=Lt.length;function wr(e){let r=e%Mt,t=Ut[r];for(e=(e-r)/Mt;e>0;)r=e%jt,t+=Lt[r],e=(e-r)/jt;return t}var po=/^[$A-Z_][0-9A-Z_$]*$/i;function zr(e){let r=e[0];return(r==="$"||r==="_"||r>="A"&&r<="Z"||r>="a"&&r<="z")&&po.test(e)}function ye(e){switch(e.t){case 0:return e.s+"="+e.v;case 2:return e.s+".set("+e.k+","+e.v+")";case 1:return e.s+".add("+e.v+")";case 3:return e.s+".delete("+e.k+")"}}function mo(e){let r=[],t=e[0];for(let n=1,a=e.length,s,i=t;n<a;n++)s=e[n],s.t===0&&s.v===i.v?t={t:0,s:s.s,k:o,v:ye(t)}:s.t===2&&s.s===i.s?t={t:2,s:ye(t),k:s.k,v:s.v}:s.t===1&&s.s===i.s?t={t:1,s:ye(t),k:o,v:s.v}:s.t===3&&s.s===i.s?t={t:3,s:ye(t),k:s.k,v:o}:(r.push(t),t=s),i=s;return r.push(t),r}function Jt(e){if(e.length){let r="",t=mo(e);for(let n=0,a=t.length;n<a;n++)r+=ye(t[n])+",";return r}return o}var go="Object.create(null)",yo="new Set",No="new Map",Co="Promise.resolve",vo="Promise.reject",bo={3:"Object.freeze",2:"Object.seal",1:"Object.preventExtensions",0:o};function Ht(e,r){return{mode:e,plugins:r.plugins,features:r.features,marked:new Set(r.markedRefs),stack:[],flags:[],assignments:[]}}function Ao(){return{valid:new Map,vars:[]}}function or(e){return{mode:1,base:Ht(1,e),state:Ao(),child:void 0}}function ar(e){return{mode:2,base:Ht(2,e),state:e,child:void 0}}var kr=class{constructor(r){this._p=r}serialize(r){return f(this._p,r)}};function Ro(e,r){let t=e.valid.get(r);t==null&&(t=e.valid.size,e.valid.set(r,t));let n=e.vars[t];return n==null&&(n=wr(t),e.vars[t]=n),n}function Io(e){return le+"["+e+"]"}function p(e,r){return e.mode===1?Ro(e.state,r):Io(r)}function h(e,r){e.marked.add(r)}function _r(e,r){return e.marked.has(r)}function Fr(e,r,t){r!==0&&(h(e.base,t),e.base.flags.push({type:r,value:p(e,t)}))}function Eo(e){let r="";for(let t=0,n=e.flags,a=n.length;t<a;t++){let s=n[t];r+=bo[s.type]+"("+s.value+"),"}return r}function $t(e){let r=Jt(e.assignments),t=Eo(e);return r?t?r+t:r:t}function qt(e,r,t){e.assignments.push({t:0,s:r,k:o,v:t})}function Po(e,r,t){e.base.assignments.push({t:1,s:p(e,r),k:o,v:t})}function ge(e,r,t,n){e.base.assignments.push({t:2,s:p(e,r),k:t,v:n})}function Yt(e,r,t){e.base.assignments.push({t:3,s:p(e,r),k:t,v:o})}function Ne(e,r,t,n){qt(e.base,p(e,r)+"["+t+"]",n)}function Dr(e,r,t,n){qt(e.base,p(e,r)+"."+t,n)}function B(e,r){return r.t===4&&e.stack.includes(r.i)}function oe(e,r,t){return e.mode===1&&!_r(e.base,r)?t:p(e,r)+"="+t}function xo(e){return M+'.get("'+e.s+'")'}function Wt(e,r,t,n){return t?B(e.base,t)?(h(e.base,r),Ne(e,r,n,p(e,t.i)),""):f(e,t):""}function To(e,r){let t=r.i;if(r.l){e.base.stack.push(t);let n=r.a,a=Wt(e,t,n[0],0),s=a==="";for(let i=1,l=r.l,u;i<l;i++)u=Wt(e,t,n[i],i),a+=","+u,s=u==="";return e.base.stack.pop(),Fr(e,r.o,r.i),"["+a+(s?",]":"]")}return"[]"}function Kt(e,r,t,n){if(typeof t=="string"){let a=Number(t),s=a>=0&&a.toString()===t||zr(t);if(B(e.base,n)){let i=p(e,n.i);return h(e.base,r.i),s&&a!==a?Dr(e,r.i,t,i):Ne(e,r.i,s?t:'"'+t+'"',i),""}return(s?t:'"'+t+'"')+":"+f(e,n)}return"["+f(e,t)+"]:"+f(e,n)}function Xt(e,r,t){let n=t.s;if(n){let a=t.k,s=t.v;e.base.stack.push(r.i);let i=Kt(e,r,a[0],s[0]);for(let l=1,u=i;l<n;l++)u=Kt(e,r,a[l],s[l]),i+=(u&&i&&",")+u;return e.base.stack.pop(),"{"+i+"}"}return"{}"}function Oo(e,r){return Fr(e,r.o,r.i),Xt(e,r,r.p)}function ho(e,r,t,n){let a=Xt(e,r,t);return a!=="{}"?"Object.assign("+n+","+a+")":n}function wo(e,r,t,n,a){let s=e.base,i=f(e,a),l=Number(n),u=l>=0&&l.toString()===n||zr(n);if(B(s,a))u&&l!==l?Dr(e,r.i,n,i):Ne(e,r.i,u?n:'"'+n+'"',i);else{let g=s.assignments;s.assignments=t,u&&l!==l?Dr(e,r.i,n,i):Ne(e,r.i,u?n:'"'+n+'"',i),s.assignments=g}}function zo(e,r,t,n,a){if(typeof n=="string")wo(e,r,t,n,a);else{let s=e.base,i=s.stack;s.stack=[];let l=f(e,a);s.stack=i;let u=s.assignments;s.assignments=t,Ne(e,r.i,f(e,n),l),s.assignments=u}}function ko(e,r,t){let n=t.s;if(n){let a=[],s=t.k,i=t.v;e.base.stack.push(r.i);for(let l=0;l<n;l++)zo(e,r,a,s[l],i[l]);return e.base.stack.pop(),Jt(a)}return o}function Br(e,r,t){if(r.p){let n=e.base;if(n.features&8)t=ho(e,r,r.p,t);else{h(n,r.i);let a=ko(e,r,r.p);if(a)return"("+oe(e,r.i,t)+","+a+p(e,r.i)+")"}}return t}function _o(e,r){return Fr(e,r.o,r.i),Br(e,r,go)}function Do(e){return'new Date("'+e.s+'")'}function Fo(e){return"/"+e.c+"/"+e.m}function Gt(e,r,t){let n=e.base;return B(n,t)?(h(n,r),Po(e,r,p(e,t.i)),""):f(e,t)}function Bo(e,r){let t=yo,n=r.l,a=r.i;if(n){let s=r.a;e.base.stack.push(a);let i=Gt(e,a,s[0]);for(let l=1,u=i;l<n;l++)u=Gt(e,a,s[l]),i+=(u&&i&&",")+u;e.base.stack.pop(),i&&(t+="(["+i+"])")}return t}function Zt(e,r,t,n,a){let s=e.base;if(B(s,t)){let i=p(e,t.i);if(h(s,r),B(s,n)){let u=p(e,n.i);return ge(e,r,i,u),""}if(n.t!==4&&n.i!=null&&_r(s,n.i)){let u="("+f(e,n)+",["+a+","+a+"])";return ge(e,r,i,p(e,n.i)),Yt(e,r,a),u}let l=s.stack;return s.stack=[],ge(e,r,i,f(e,n)),s.stack=l,""}if(B(s,n)){let i=p(e,n.i);if(h(s,r),t.t!==4&&t.i!=null&&_r(s,t.i)){let u="("+f(e,t)+",["+a+","+a+"])";return ge(e,r,p(e,t.i),i),Yt(e,r,a),u}let l=s.stack;return s.stack=[],ge(e,r,f(e,t),i),s.stack=l,""}return"["+f(e,t)+","+f(e,n)+"]"}function Vo(e,r){let t=No,n=r.e.s,a=r.i,s=r.f,i=p(e,s.i),l=e.base;if(n){let u=r.e.k,g=r.e.v;l.stack.push(a);let S=Zt(e,a,u[0],g[0],i);for(let d=1,J=S;d<n;d++)J=Zt(e,a,u[d],g[d],i),S+=(J&&S&&",")+J;l.stack.pop(),S&&(t+="(["+S+"])")}return s.t===26&&(h(l,s.i),t="("+f(e,s)+","+t+")"),t}function Mo(e,r){return G(e,r.f)+"("+r.l+',"'+r.s+'")'}function jo(e,r){return"new "+r.c+"("+f(e,r.f)+","+r.b+","+r.l+")"}function Uo(e,r){return"new DataView("+f(e,r.f)+","+r.b+","+r.l+")"}function Lo(e,r){let t=r.i;e.base.stack.push(t);let n=Br(e,r,'new AggregateError([],"'+r.m+'")');return e.base.stack.pop(),n}function Yo(e,r){return Br(e,r,"new "+Ae[r.s]+'("'+r.m+'")')}function Wo(e,r){let t,n=r.f,a=r.i,s=r.s?Co:vo,i=e.base;if(B(i,n)){let l=p(e,n.i);t=s+(r.s?"().then("+nr([],l)+")":"().catch("+Vt([],"throw "+l)+")")}else{i.stack.push(a);let l=f(e,n);i.stack.pop(),t=s+"("+l+")"}return t}function Ko(e,r){return"Object("+f(e,r.f)+")"}function G(e,r){let t=f(e,r);return r.t===4?t:"("+t+")"}function Go(e,r){if(e.mode===1)throw new w(r);return"("+oe(e,r.s,G(e,r.f)+"()")+").p"}function Zo(e,r){if(e.mode===1)throw new w(r);return G(e,r.a[0])+"("+p(e,r.i)+","+f(e,r.a[1])+")"}function Jo(e,r){if(e.mode===1)throw new w(r);return G(e,r.a[0])+"("+p(e,r.i)+","+f(e,r.a[1])+")"}function Ho(e,r){let t=e.base.plugins;if(t)for(let n=0,a=t.length;n<a;n++){let s=t[n];if(s.tag===r.c)return e.child==null&&(e.child=new kr(e)),s.serialize(r.s,e.child,{id:r.i})}throw new U(r.c)}function $o(e,r){let t="",n=!1;return r.f.t!==4&&(h(e.base,r.f.i),t="("+f(e,r.f)+",",n=!0),t+=oe(e,r.i,"("+gt+")("+p(e,r.f.i)+")"),n&&(t+=")"),t}function qo(e,r){return G(e,r.a[0])+"("+f(e,r.a[1])+")"}function Xo(e,r){let t=r.a[0],n=r.a[1],a=e.base,s="";t.t!==4&&(h(a,t.i),s+="("+f(e,t)),n.t!==4&&(h(a,n.i),s+=(s?",":"(")+f(e,n)),s&&(s+=",");let i=oe(e,r.i,"("+yt+")("+p(e,n.i)+","+p(e,t.i)+")");return s?s+i+")":i}function Qo(e,r){return G(e,r.a[0])+"("+f(e,r.a[1])+")"}function ea(e,r){let t=oe(e,r.i,G(e,r.f)+"()"),n=r.a.length;if(n){let a=f(e,r.a[0]);for(let s=1;s<n;s++)a+=","+f(e,r.a[s]);return"("+t+","+a+","+p(e,r.i)+")"}return t}function ra(e,r){return p(e,r.i)+".next("+f(e,r.f)+")"}function ta(e,r){return p(e,r.i)+".throw("+f(e,r.f)+")"}function na(e,r){return p(e,r.i)+".return("+f(e,r.f)+")"}function oa(e,r){switch(r.t){case 17:return Hr[r.s];case 18:return xo(r);case 9:return To(e,r);case 10:return Oo(e,r);case 11:return _o(e,r);case 5:return Do(r);case 6:return Fo(r);case 7:return Bo(e,r);case 8:return Vo(e,r);case 19:return Mo(e,r);case 16:case 15:return jo(e,r);case 20:return Uo(e,r);case 14:return Lo(e,r);case 13:return Yo(e,r);case 12:return Wo(e,r);case 21:return Ko(e,r);case 22:return Go(e,r);case 25:return Ho(e,r);case 26:return At[r.s];default:throw new w(r)}}function f(e,r){switch(r.t){case 2:return qr[r.s];case 0:return""+r.s;case 1:return'"'+r.s+'"';case 3:return r.s+"n";case 4:return p(e,r.i);case 23:return Zo(e,r);case 24:return Jo(e,r);case 27:return $o(e,r);case 28:return qo(e,r);case 29:return Xo(e,r);case 30:return Qo(e,r);case 31:return ea(e,r);case 32:return ra(e,r);case 33:return ta(e,r);case 34:return na(e,r);default:return oe(e,r.i,oa(e,r))}}function sr(e,r){let t=f(e,r);if(r.i!=null&&e.state.vars.length){let n=$t(e.base),a=t;if(n){let s=p(e,r.i);a=t+","+n+s,t.startsWith(s+"=")||(a=s+"="+a),a="("+a+")"}return"("+nr(e.state.vars,a)+")()"}return r.t===10?"("+t+")":t}function ir(e,r){let t=f(e,r),n=r.i;if(n==null)return t;let a=$t(e.base),s=p(e,n),i=e.state.scopeId,l=i==null?"":le,u=a?"("+t+","+a+s+")":t;if(l==="")return r.t===10&&!a?"("+u+")":u;let g=i==null?"()":"("+le+'["'+y(i)+'"])';return"("+nr([l],u)+")"+g}function se(e,r){return{type:1,base:de(e,r),child:void 0}}var Mr=class{constructor(r){this._p=r}parse(r){return R(this._p,r)}},jr=class{constructor(r){this._p=r}parse(r){return R(this._p,r)}parseWithError(r){return Z(this._p,r)}isAlive(){return this._p.state.alive}pushPendingState(){Kr(this._p)}popPendingState(){Ce(this._p)}onParse(r){ae(this._p,r)}onError(r){Yr(this._p,r)}};function aa(e){return{alive:!0,pending:0,initial:!0,buffer:[],onParse:e.onParse,onError:e.onError,onDone:e.onDone}}function Ur(e){return{type:2,base:de(2,e),child:void 0,state:aa(e)}}function sa(e,r){let t=[];for(let n=0,a=r.length;n<a;n++)n in r&&(t[n]=R(e,r[n]));return t}function ia(e,r,t){return ze(r,t,sa(e,t))}function Lr(e,r){let t=Object.entries(r),n=[],a=[];for(let s=0,i=t.length;s<i;s++)n.push(y(t[s][0])),a.push(R(e,t[s][1]));return A in r&&(n.push(I(e.base,A)),a.push(je(qe(e.base),R(e,He(r))))),b in r&&(n.push(I(e.base,b)),a.push(Ue(Xe(e.base),R(e,e.type===1?Y():Je(r))))),x in r&&(n.push(I(e.base,x)),a.push(Q(r[x]))),P in r&&(n.push(I(e.base,P)),a.push(r[P]?$:q)),{k:n,v:a,s:n.length}}function Vr(e,r,t,n){return Qe(r,t,n,Lr(e,t))}function la(e,r,t){return ke(r,R(e,t.valueOf()))}function ua(e,r,t){return _e(r,t,R(e,t.buffer))}function ca(e,r,t){return De(r,t,R(e,t.buffer))}function fa(e,r,t){return Fe(r,t,R(e,t.buffer))}function Qt(e,r,t){let n=X(t,e.base.features);return Be(r,t,n?Lr(e,n):o)}function Sa(e,r,t){let n=X(t,e.base.features);return Ve(r,t,n?Lr(e,n):o)}function pa(e,r,t){let n=[],a=[];for(let[s,i]of t.entries())n.push(R(e,s)),a.push(R(e,i));return er(e.base,r,n,a,t.size)}function da(e,r,t){let n=[];for(let a of t.keys())n.push(R(e,a));return Me(r,t.size,n)}function ma(e,r,t){let n=Le(r,z(e.base,4),[]);return e.type===1||(Kr(e),t.on({next:a=>{if(e.state.alive){let s=Z(e,a);s&&ae(e,Ye(r,s))}},throw:a=>{if(e.state.alive){let s=Z(e,a);s&&ae(e,We(r,s))}Ce(e)},return:a=>{if(e.state.alive){let s=Z(e,a);s&&ae(e,Ke(r,s))}Ce(e)}})),n}function ga(e,r){if(this.state.alive){let t=Z(this,r);t&&ae(this,c(23,e,o,o,o,o,o,o,[z(this.base,2),t],o,o,o)),Ce(this)}}function ya(e,r){if(this.state.alive){let t=Z(this,r);t&&ae(this,c(24,e,o,o,o,o,o,o,[z(this.base,3),t],o,o,o))}Ce(this)}function Na(e,r,t){let n=Pr(e.base,{});return e.type===2&&(Kr(e),t.then(ga.bind(e,n),ya.bind(e,n))),Pt(e.base,r,n)}function Ca(e,r,t,n){for(let a=0,s=n.length;a<s;a++){let i=n[a];if(i.parse.sync&&i.test(t))return e.child==null&&(e.child=new Mr(e)),fe(r,i.tag,i.parse.sync(t,e.child,{id:r}))}}function va(e,r,t,n){for(let a=0,s=n.length;a<s;a++){let i=n[a];if(i.parse.stream&&i.test(t))return e.child==null&&(e.child=new jr(e)),fe(r,i.tag,i.parse.stream(t,e.child,{id:r}))}}function en(e,r,t){let n=e.base.plugins;if(n)return e.type===1?Ca(e,r,t,n):va(e,r,t,n)}function ba(e,r,t,n){switch(n){case Object:return Vr(e,r,t,!1);case void 0:return Vr(e,r,t,!0);case Date:return he(r,t);case RegExp:return we(r,t);case Error:case EvalError:case RangeError:case ReferenceError:case SyntaxError:case TypeError:case URIError:return Qt(e,r,t);case Number:case Boolean:case String:case BigInt:return la(e,r,t);case ArrayBuffer:return rr(e.base,r,t);case Int8Array:case Int16Array:case Int32Array:case Uint8Array:case Uint16Array:case Uint32Array:case Uint8ClampedArray:case Float32Array:case Float64Array:return ua(e,r,t);case DataView:return fa(e,r,t);case Map:return pa(e,r,t);case Set:return da(e,r,t);default:break}if(n===Promise||t instanceof Promise)return Na(e,r,t);let a=e.base.features;if(a&16)switch(n){case BigInt64Array:case BigUint64Array:return ca(e,r,t);default:break}if(a&1&&typeof AggregateError!="undefined"&&(n===AggregateError||t instanceof AggregateError))return Sa(e,r,t);if(t instanceof Error)return Qt(e,r,t);if(A in t||b in t)return Vr(e,r,t,!!n);throw new E(t)}function Aa(e,r,t){if(Array.isArray(t))return ia(e,r,t);if(Ze(t))return ma(e,r,t);let n=t.constructor;if(n===F)return R(e,t.replacement);let a=en(e,r,t);return a||ba(e,r,t,n)}function Ra(e,r){let t=W(e.base,r);if(t.type!==0)return t.value;let n=en(e,t.value,r);if(n)return n;throw new E(r)}function R(e,r){switch(typeof r){case"boolean":return r?$:q;case"undefined":return Re;case"string":return Q(r);case"number":return Te(r);case"bigint":return Oe(r);case"object":{if(r){let t=W(e.base,r);return t.type===0?Aa(e,t.value,r):t.value}return Ie}case"symbol":return I(e.base,r);case"function":return Ra(e,r);default:throw new E(r)}}function ie(e,r){try{return R(e,r)}catch(t){throw t instanceof O?t:new O(t)}}function ae(e,r){e.state.initial?e.state.buffer.push(r):Wr(e,r,!1)}function Yr(e,r){if(e.state.onError)e.state.onError(r);else throw r instanceof O?r:new O(r)}function rn(e){e.state.onDone&&e.state.onDone()}function Wr(e,r,t){try{e.state.onParse(r,t)}catch(n){Yr(e,n)}}function Kr(e){e.state.pending++}function Ce(e){--e.state.pending<=0&&rn(e)}function Z(e,r){try{return R(e,r)}catch(t){return Yr(e,t),o}}function Gr(e,r){let t=Z(e,r);t&&(Wr(e,t,!0),e.state.initial=!1,Ia(e,e.state),e.state.pending<=0&&lr(e))}function Ia(e,r){for(let t=0,n=r.buffer.length;t<n;t++)Wr(e,r.buffer[t],!1)}function lr(e){e.state.alive&&(rn(e),e.state.alive=!1)}function Ea(e,r={}){let t=C(r.plugins),n=se(2,{plugins:t,disabledFeatures:r.disabledFeatures,refs:r.refs}),a=ie(n,e),s=ar({plugins:t,features:n.base.features,scopeId:r.scopeId,markedRefs:n.base.marked});return ir(s,a)}async function Pa(e,r={}){let t=C(r.plugins),n=te(2,{plugins:t,disabledFeatures:r.disabledFeatures,refs:r.refs}),a=await ne(n,e),s=ar({plugins:t,features:n.base.features,scopeId:r.scopeId,markedRefs:n.base.marked});return ir(s,a)}function xa(e,r={}){let t=C(r.plugins),n=se(2,{plugins:t,disabledFeatures:r.disabledFeatures,refs:r.refs});return ie(n,e)}async function Ta(e,r={}){let t=C(r.plugins),n=te(2,{plugins:t,disabledFeatures:r.disabledFeatures,refs:r.refs});return await ne(n,e)}function Zr(e,r){let t=C(r.plugins),n=Ur({plugins:t,refs:r.refs,disabledFeatures:r.disabledFeatures,onParse(a,s){let i=ar({plugins:t,features:n.base.features,scopeId:r.scopeId,markedRefs:n.base.marked}),l;try{l=ir(i,a)}catch(u){r.onError&&r.onError(u);return}r.onSerialize(l,s)},onError:r.onError,onDone:r.onDone});return Gr(n,e),lr.bind(null,n)}function Oa(e,r){let t=C(r.plugins),n=Ur({plugins:t,refs:r.refs,disabledFeatures:r.disabledFeatures,onParse:r.onParse,onError:r.onError,onDone:r.onDone});return Gr(n,e),lr.bind(null,n)}function ha(e,r){let t=C(r.plugins),n=_t({plugins:t,refs:r.refs});return tr(n,e)}var ve=class{constructor(r){this.options=r;this.alive=!0;this.flushed=!1;this.done=!1;this.pending=0;this.cleanups=[];this.refs=new Map;this.keys=new Set;this.ids=0;this.plugins=C(r.plugins)}write(r,t){this.alive&&!this.flushed&&(this.pending++,this.keys.add(r),this.cleanups.push(Zr(t,{plugins:this.plugins,scopeId:this.options.scopeId,refs:this.refs,disabledFeatures:this.options.disabledFeatures,onError:this.options.onError,onSerialize:(n,a)=>{this.alive&&this.options.onData(a?this.options.globalIdentifier+'["'+y(r)+'"]='+n:n)},onDone:()=>{this.alive&&(this.pending--,this.pending<=0&&this.flushed&&!this.done&&this.options.onDone&&(this.options.onDone(),this.done=!0))}})))}getNextID(){for(;this.keys.has(""+this.ids);)this.ids++;return""+this.ids}push(r){let t=this.getNextID();return this.write(t,r),t}flush(){this.alive&&(this.flushed=!0,this.pending<=0&&!this.done&&this.options.onDone&&(this.options.onDone(),this.done=!0))}close(){if(this.alive){for(let r=0,t=this.cleanups.length;r<t;r++)this.cleanups[r]();!this.done&&this.options.onDone&&(this.options.onDone(),this.done=!0),this.alive=!1}}};function wa(e,r={}){let t=C(r.plugins),n=se(1,{plugins:t,disabledFeatures:r.disabledFeatures}),a=ie(n,e),s=or({plugins:t,features:n.base.features,markedRefs:n.base.marked});return sr(s,a)}async function za(e,r={}){let t=C(r.plugins),n=te(1,{plugins:t,disabledFeatures:r.disabledFeatures}),a=await ne(n,e),s=or({plugins:t,features:n.base.features,markedRefs:n.base.marked});return sr(s,a)}function ka(e){return(0,eval)(e)}function _a(e,r={}){let t=C(r.plugins),n=se(1,{plugins:t,disabledFeatures:r.disabledFeatures});return{t:ie(n,e),f:n.base.features,m:Array.from(n.base.marked)}}async function Da(e,r={}){let t=C(r.plugins),n=te(1,{plugins:t,disabledFeatures:r.disabledFeatures});return{t:await ne(n,e),f:n.base.features,m:Array.from(n.base.marked)}}function Fa(e,r={}){let t=C(r.plugins),n=or({plugins:t,features:e.f,markedRefs:e.m});return sr(n,e.t)}function Ba(e,r={}){let t=C(r.plugins),n=kt({plugins:t,markedRefs:e.m});return tr(n,e.t)} |
@@ -1,17 +0,3 @@ | ||
| var R=(a=>(a[a.AggregateError=1]="AggregateError",a[a.ArrowFunction=2]="ArrowFunction",a[a.ErrorPrototypeStack=4]="ErrorPrototypeStack",a[a.ObjectAssign=8]="ObjectAssign",a[a.BigIntTypedArray=16]="BigIntTypedArray",a))(R||{});function Nr(o){switch(o){case'"':return'\\"';case"\\":return"\\\\";case` | ||
| `:return"\\n";case"\r":return"\\r";case"\b":return"\\b";case" ":return"\\t";case"\f":return"\\f";case"<":return"\\x3C";case"\u2028":return"\\u2028";case"\u2029":return"\\u2029";default:return}}function d(o){let e="",r=0,t;for(let n=0,a=o.length;n<a;n++)t=Nr(o[n]),t&&(e+=o.slice(r,n)+t,r=n+1);return r===0?e=o:e+=o.slice(r),e}function br(o){switch(o){case"\\\\":return"\\";case'\\"':return'"';case"\\n":return` | ||
| `;case"\\r":return"\r";case"\\b":return"\b";case"\\t":return" ";case"\\f":return"\f";case"\\x3C":return"<";case"\\u2028":return"\u2028";case"\\u2029":return"\u2029";default:return o}}function N(o){return o.replace(/(\\\\|\\"|\\n|\\r|\\b|\\t|\\f|\\u2028|\\u2029|\\x3C)/g,br)}var O="__SEROVAL_REFS__",Q="$R",ae=`self.${Q}`;function xr(o){return o==null?`${ae}=${ae}||[]`:`(${ae}=${ae}||{})["${d(o)}"]=[]`}function f(o,e){if(!o)throw e}var Be=new Map,C=new Map;function Ir(o,e){return Be.set(e,o),C.set(o,e),e}function je(o){return Be.has(o)}function Ar(o){return C.has(o)}function Ke(o){return f(je(o),new ie(o)),Be.get(o)}function Je(o){return f(Ar(o),new le(o)),C.get(o)}typeof globalThis!="undefined"?Object.defineProperty(globalThis,O,{value:C,configurable:!0,writable:!1,enumerable:!1}):typeof window!="undefined"?Object.defineProperty(window,O,{value:C,configurable:!0,writable:!1,enumerable:!1}):typeof self!="undefined"?Object.defineProperty(self,O,{value:C,configurable:!0,writable:!1,enumerable:!1}):typeof global!="undefined"&&Object.defineProperty(global,O,{value:C,configurable:!0,writable:!1,enumerable:!1});function Hr(o){return o}function Ye(o,e){for(let r=0,t=e.length;r<t;r++){let n=e[r];o.has(n)||(o.add(n),n.extends&&Ye(o,n.extends))}}function m(o){if(o){let e=new Set;return Ye(e,o),[...e]}}var $e={0:"Symbol.asyncIterator",1:"Symbol.hasInstance",2:"Symbol.isConcatSpreadable",3:"Symbol.iterator",4:"Symbol.match",5:"Symbol.matchAll",6:"Symbol.replace",7:"Symbol.search",8:"Symbol.species",9:"Symbol.split",10:"Symbol.toPrimitive",11:"Symbol.toStringTag",12:"Symbol.unscopables"},ce={[Symbol.asyncIterator]:0,[Symbol.hasInstance]:1,[Symbol.isConcatSpreadable]:2,[Symbol.iterator]:3,[Symbol.match]:4,[Symbol.matchAll]:5,[Symbol.replace]:6,[Symbol.search]:7,[Symbol.species]:8,[Symbol.split]:9,[Symbol.toPrimitive]:10,[Symbol.toStringTag]:11,[Symbol.unscopables]:12},Ge={0:Symbol.asyncIterator,1:Symbol.hasInstance,2:Symbol.isConcatSpreadable,3:Symbol.iterator,4:Symbol.match,5:Symbol.matchAll,6:Symbol.replace,7:Symbol.search,8:Symbol.species,9:Symbol.split,10:Symbol.toPrimitive,11:Symbol.toStringTag,12:Symbol.unscopables},qe={2:"!0",3:"!1",1:"void 0",0:"null",4:"-0",5:"1/0",6:"-1/0",7:"0/0"},He={2:!0,3:!1,1:void 0,0:null,4:-0,5:Number.POSITIVE_INFINITY,6:Number.NEGATIVE_INFINITY,7:Number.NaN};var ue={0:"Error",1:"EvalError",2:"RangeError",3:"ReferenceError",4:"SyntaxError",5:"TypeError",6:"URIError"},Ze={0:Error,1:EvalError,2:RangeError,3:ReferenceError,4:SyntaxError,5:TypeError,6:URIError},s=void 0;function u(o,e,r,t,n,a,i,l,c,p,h,X){return{t:o,i:e,s:r,l:t,c:n,m:a,p:i,e:l,a:c,f:p,b:h,o:X}}function x(o){return u(2,s,o,s,s,s,s,s,s,s,s,s)}var I=x(2),A=x(3),pe=x(1),de=x(0),Xe=x(4),Qe=x(5),er=x(6),rr=x(7);function me(o){return o instanceof EvalError?1:o instanceof RangeError?2:o instanceof ReferenceError?3:o instanceof SyntaxError?4:o instanceof TypeError?5:o instanceof URIError?6:0}function wr(o){let e=ue[me(o)];return o.name!==e?{name:o.name}:o.constructor.name!==e?{name:o.constructor.name}:{}}function j(o,e){let r=wr(o),t=Object.getOwnPropertyNames(o);for(let n=0,a=t.length,i;n<a;n++)i=t[n],i!=="name"&&i!=="message"&&(i==="stack"?e&4&&(r=r||{},r[i]=o[i]):(r=r||{},r[i]=o[i]));return r}function fe(o){return Object.isFrozen(o)?3:Object.isSealed(o)?2:Object.isExtensible(o)?0:1}function ge(o){switch(o){case Number.POSITIVE_INFINITY:return Qe;case Number.NEGATIVE_INFINITY:return er}return o!==o?rr:Object.is(o,-0)?Xe:u(0,s,o,s,s,s,s,s,s,s,s,s)}function w(o){return u(1,s,d(o),s,s,s,s,s,s,s,s,s)}function Se(o){return u(3,s,""+o,s,s,s,s,s,s,s,s,s)}function sr(o){return u(4,o,s,s,s,s,s,s,s,s,s,s)}function he(o,e){let r=e.valueOf();return u(5,o,r!==r?"":e.toISOString(),s,s,s,s,s,s,s,s,s)}function ye(o,e){return u(6,o,s,s,d(e.source),e.flags,s,s,s,s,s,s)}function ve(o,e){let r=new Uint8Array(e),t=r.length,n=new Array(t);for(let a=0;a<t;a++)n[a]=r[a];return u(19,o,n,s,s,s,s,s,s,s,s,s)}function or(o,e){return u(17,o,ce[e],s,s,s,s,s,s,s,s,s)}function nr(o,e){return u(18,o,d(Ke(e)),s,s,s,s,s,s,s,s,s)}function _(o,e,r){return u(25,o,r,s,d(e),s,s,s,s,s,s,s)}function Ne(o,e,r){return u(9,o,s,e.length,s,s,s,s,r,s,s,fe(e))}function be(o,e){return u(21,o,s,s,s,s,s,s,s,e,s,s)}function xe(o,e,r){return u(15,o,s,e.length,e.constructor.name,s,s,s,s,r,e.byteOffset,s)}function Ie(o,e,r){return u(16,o,s,e.length,e.constructor.name,s,s,s,s,r,e.byteOffset,s)}function Ae(o,e,r){return u(20,o,s,e.byteLength,s,s,s,s,s,r,e.byteOffset,s)}function we(o,e,r){return u(13,o,me(e),s,s,d(e.message),r,s,s,s,s,s)}function Ee(o,e,r){return u(14,o,me(e),s,s,d(e.message),r,s,s,s,s,s)}function Pe(o,e,r){return u(7,o,s,e,s,s,s,s,r,s,s,s)}function M(o,e){return u(28,s,s,s,s,s,s,s,[o,e],s,s,s)}function U(o,e){return u(30,s,s,s,s,s,s,s,[o,e],s,s,s)}function L(o,e,r){return u(31,o,s,s,s,s,s,s,r,e,s,s)}function Re(o,e){return u(32,o,s,s,s,s,s,s,s,e,s,s)}function Oe(o,e){return u(33,o,s,s,s,s,s,s,s,e,s,s)}function Ce(o,e){return u(34,o,s,s,s,s,s,s,s,e,s,s)}var{toString:_e}=Object.prototype;function Er(o,e){return e instanceof Error?`Seroval caught an error during the ${o} process. | ||
| ${e.name} | ||
| ${e.message} | ||
| - For more information, please check the "cause" property of this error. | ||
| - If you believe this is an error in Seroval, please submit an issue at https://github.com/lxsmnsyc/seroval/issues/new`:`Seroval caught an error during the ${o} process. | ||
| "${_e.call(e)}" | ||
| For more information, please check the "cause" property of this error.`}var ee=class extends Error{constructor(r,t){super(Er(r,t));this.cause=t}},E=class extends ee{constructor(e){super("parsing",e)}},Te=class extends ee{constructor(e){super("serialization",e)}},ze=class extends ee{constructor(e){super("deserialization",e)}},g=class extends Error{constructor(r){super(`The value ${_e.call(r)} of type "${typeof r}" cannot be parsed/serialized. | ||
| There are few workarounds for this problem: | ||
| - Transform the value in a way that it can be serialized. | ||
| - If the reference is present on multiple runtimes (isomorphic), you can use the Reference API to map the references.`);this.value=r}},y=class extends Error{constructor(e){super('Unsupported node type "'+e.t+'".')}},W=class extends Error{constructor(e){super('Missing plugin for tag "'+e+'".')}},P=class extends Error{constructor(e){super('Missing "'+e+'" instance.')}},ie=class extends Error{constructor(r){super('Missing reference for the value "'+_e.call(r)+'" of type "'+typeof r+'"');this.value=r}},le=class extends Error{constructor(e){super('Missing reference for id "'+d(e)+'"')}},ke=class extends Error{constructor(e){super('Unknown TypedArray "'+e+'"')}};var T=class{constructor(e,r){this.value=e;this.replacement=r}};function z(o,e,r){return o&2?(e.length===1?e[0]:"("+e.join(",")+")")+"=>"+(r.startsWith("{")?"("+r+")":r):"function("+e.join(",")+"){return "+r+"}"}function S(o,e,r){return o&2?(e.length===1?e[0]:"("+e.join(",")+")")+"=>{"+r+"}":"function("+e.join(",")+"){"+r+"}"}var ar={},ir={};var lr={0:{},1:{},2:{},3:{},4:{}};function Pr(o){return z(o,["r"],"(r.p=new Promise("+S(o,["s","f"],"r.s=s,r.f=f")+"))")}function Rr(o){return S(o,["r","d"],"r.s(d),r.p.s=1,r.p.v=d")}function Or(o){return S(o,["r","d"],"r.f(d),r.p.s=2,r.p.v=d")}function Cr(o){return z(o,["b","a","s","l","p","f","e","n"],"(b=[],a=!0,s=!1,l=[],p=0,f="+S(o,["v","m","x"],"for(x=0;x<p;x++)l[x]&&l[x][m](v)")+",n="+S(o,["o","x","z","c"],'for(x=0,z=b.length;x<z;x++)(c=b[x],(!a&&x===z-1)?o[s?"return":"throw"](c):o.next(c))')+",e="+z(o,["o","t"],"(a&&(l[t=p++]=o),n(o),"+S(o,[],"a&&(l[t]=void 0)")+")")+",{__SEROVAL_STREAM__:!0,on:"+z(o,["o"],"e(o)")+",next:"+S(o,["v"],'a&&(b.push(v),f(v,"next"))')+",throw:"+S(o,["v"],'a&&(b.push(v),f(v,"throw"),a=s=!1,l.length=0)')+",return:"+S(o,["v"],'a&&(b.push(v),f(v,"return"),a=!1,s=!0,l.length=0)')+"})")}function cr(o,e){switch(e){case 0:return"[]";case 1:return Pr(o);case 2:return Rr(o);case 3:return Or(o);case 4:return Cr(o);default:return""}}function re(){let o,e;return{promise:new Promise((r,t)=>{o=r,e=t}),resolve(r){o(r)},reject(r){e(r)}}}function Fe(o){return"__SEROVAL_STREAM__"in o}function K(){let o=new Set,e=[],r=!0,t=!0;function n(l){for(let c of o.keys())c.next(l)}function a(l){for(let c of o.keys())c.throw(l)}function i(l){for(let c of o.keys())c.return(l)}return{__SEROVAL_STREAM__:!0,on(l){r&&o.add(l);for(let c=0,p=e.length;c<p;c++){let h=e[c];c===p-1&&!r?t?l.return(h):l.throw(h):l.next(h)}return()=>{r&&o.delete(l)}},next(l){r&&(e.push(l),n(l))},throw(l){r&&(e.push(l),a(l),r=!1,t=!1,o.clear())},return(l){r&&(e.push(l),i(l),r=!1,t=!0,o.clear())}}}function Ve(o){let e=K(),r=o[Symbol.asyncIterator]();async function t(){try{let n=await r.next();n.done?e.return(n.value):(e.next(n.value),await t())}catch(n){e.throw(n)}}return t().catch(()=>{}),e}function ur(o){return()=>{let e=[],r=[],t=0,n=-1,a=!1;function i(){for(let c=0,p=r.length;c<p;c++)r[c].resolve({done:!0,value:void 0})}o.on({next(c){let p=r.shift();p&&p.resolve({done:!1,value:c}),e.push(c)},throw(c){let p=r.shift();p&&p.reject(c),i(),n=e.length,e.push(c),a=!0},return(c){let p=r.shift();p&&p.resolve({done:!0,value:c}),i(),n=e.length,e.push(c)}});function l(){let c=t++,p=e[c];if(c!==n)return{done:!1,value:p};if(a)throw p;return{done:!0,value:p}}return{[Symbol.asyncIterator](){return this},async next(){if(n===-1){let c=t++;if(c>=e.length){let p=re();return r.push(p),await p.promise}return{done:!1,value:e[c]}}return t>n?{done:!0,value:void 0}:l()}}}}function J(o){let e=[],r=-1,t=-1,n=o[Symbol.iterator]();for(;;)try{let a=n.next();if(e.push(a.value),a.done){t=e.length-1;break}}catch(a){r=e.length,e.push(a)}return{v:e,t:r,d:t}}function pr(o){return()=>{let e=0;return{[Symbol.iterator](){return this},next(){if(e>o.d)return{done:!0,value:s};let r=e++,t=o.v[r];if(r===o.t)throw t;return{done:r===o.d,value:t}}}}}async function Me(o){try{return[1,await o]}catch(e){return[0,e]}}var Y=class{constructor(e){this.marked=new Set;this.plugins=e.plugins,this.features=31^(e.disabledFeatures||0),this.refs=e.refs||new Map}markRef(e){this.marked.add(e)}isMarked(e){return this.marked.has(e)}createIndex(e){let r=this.refs.size;return this.refs.set(e,r),r}getIndexedValue(e){let r=this.refs.get(e);return r!=null?(this.markRef(r),{type:1,value:sr(r)}):{type:0,value:this.createIndex(e)}}getReference(e){let r=this.getIndexedValue(e);return r.type===1?r:je(e)?{type:2,value:nr(r.value,e)}:r}parseWellKnownSymbol(e){let r=this.getReference(e);return r.type!==0?r.value:(f(e in ce,new g(e)),or(r.value,e))}parseSpecialReference(e){let r=this.getIndexedValue(lr[e]);return r.type===1?r.value:u(26,r.value,e,s,s,s,s,s,s,s,s,s)}parseIteratorFactory(){let e=this.getIndexedValue(ar);return e.type===1?e.value:u(27,e.value,s,s,s,s,s,s,s,this.parseWellKnownSymbol(Symbol.iterator),s,s)}parseAsyncIteratorFactory(){let e=this.getIndexedValue(ir);return e.type===1?e.value:u(29,e.value,s,s,s,s,s,s,[this.parseSpecialReference(1),this.parseWellKnownSymbol(Symbol.asyncIterator)],s,s,s)}createObjectNode(e,r,t,n){return u(t?11:10,e,s,s,s,s,n,s,s,s,s,fe(r))}createMapNode(e,r,t,n){return u(8,e,s,s,s,s,s,{k:r,v:t,s:n},s,this.parseSpecialReference(0),s,s)}createPromiseConstructorNode(e,r){return u(22,e,r,s,s,s,s,s,s,this.parseSpecialReference(1),s,s)}};var k=class extends Y{async parseItems(e){let r=[];for(let t=0,n=e.length;t<n;t++)t in e&&(r[t]=await this.parse(e[t]));return r}async parseArray(e,r){return Ne(e,r,await this.parseItems(r))}async parseProperties(e){let r=Object.entries(e),t=[],n=[];for(let i=0,l=r.length;i<l;i++)t.push(d(r[i][0])),n.push(await this.parse(r[i][1]));let a=Symbol.iterator;return a in e&&(t.push(this.parseWellKnownSymbol(a)),n.push(M(this.parseIteratorFactory(),await this.parse(J(e))))),a=Symbol.asyncIterator,a in e&&(t.push(this.parseWellKnownSymbol(a)),n.push(U(this.parseAsyncIteratorFactory(),await this.parse(Ve(e))))),a=Symbol.toStringTag,a in e&&(t.push(this.parseWellKnownSymbol(a)),n.push(w(e[a]))),a=Symbol.isConcatSpreadable,a in e&&(t.push(this.parseWellKnownSymbol(a)),n.push(e[a]?I:A)),{k:t,v:n,s:t.length}}async parsePlainObject(e,r,t){return this.createObjectNode(e,r,t,await this.parseProperties(r))}async parseBoxed(e,r){return be(e,await this.parse(r.valueOf()))}async parseTypedArray(e,r){return xe(e,r,await this.parse(r.buffer))}async parseBigIntTypedArray(e,r){return Ie(e,r,await this.parse(r.buffer))}async parseDataView(e,r){return Ae(e,r,await this.parse(r.buffer))}async parseError(e,r){let t=j(r,this.features);return we(e,r,t?await this.parseProperties(t):s)}async parseAggregateError(e,r){let t=j(r,this.features);return Ee(e,r,t?await this.parseProperties(t):s)}async parseMap(e,r){let t=[],n=[];for(let[a,i]of r.entries())t.push(await this.parse(a)),n.push(await this.parse(i));return this.createMapNode(e,t,n,r.size)}async parseSet(e,r){let t=[];for(let n of r.keys())t.push(await this.parse(n));return Pe(e,r.size,t)}async parsePromise(e,r){let[t,n]=await Me(r);return u(12,e,t,s,s,s,s,s,s,await this.parse(n),s,s)}async parsePlugin(e,r){let t=this.plugins;if(t)for(let n=0,a=t.length;n<a;n++){let i=t[n];if(i.parse.async&&i.test(r))return _(e,i.tag,await i.parse.async(r,this,{id:e}))}return s}async parseStream(e,r){return L(e,this.parseSpecialReference(4),await new Promise((t,n)=>{let a=[],i=r.on({next:l=>{this.markRef(e),this.parse(l).then(c=>{a.push(Re(e,c))},c=>{n(c),i()})},throw:l=>{this.markRef(e),this.parse(l).then(c=>{a.push(Oe(e,c)),t(a),i()},c=>{n(c),i()})},return:l=>{this.markRef(e),this.parse(l).then(c=>{a.push(Ce(e,c)),t(a),i()},c=>{n(c),i()})}})}))}async parseObject(e,r){if(Array.isArray(r))return this.parseArray(e,r);if(Fe(r))return this.parseStream(e,r);let t=r.constructor;if(t===T)return this.parse(r.replacement);let n=await this.parsePlugin(e,r);if(n)return n;switch(t){case Object:return this.parsePlainObject(e,r,!1);case s:return this.parsePlainObject(e,r,!0);case Date:return he(e,r);case RegExp:return ye(e,r);case Error:case EvalError:case RangeError:case ReferenceError:case SyntaxError:case TypeError:case URIError:return this.parseError(e,r);case Number:case Boolean:case String:case BigInt:return this.parseBoxed(e,r);case ArrayBuffer:return ve(e,r);case Int8Array:case Int16Array:case Int32Array:case Uint8Array:case Uint16Array:case Uint32Array:case Uint8ClampedArray:case Float32Array:case Float64Array:return this.parseTypedArray(e,r);case DataView:return this.parseDataView(e,r);case Map:return this.parseMap(e,r);case Set:return this.parseSet(e,r);default:break}if(t===Promise||r instanceof Promise)return this.parsePromise(e,r);let a=this.features;if(a&16)switch(t){case BigInt64Array:case BigUint64Array:return this.parseBigIntTypedArray(e,r);default:break}if(a&1&&typeof AggregateError!="undefined"&&(t===AggregateError||r instanceof AggregateError))return this.parseAggregateError(e,r);if(r instanceof Error)return this.parseError(e,r);if(Symbol.iterator in r||Symbol.asyncIterator in r)return this.parsePlainObject(e,r,!!t);throw new g(r)}async parseFunction(e){let r=this.getReference(e);if(r.type!==0)return r.value;let t=await this.parsePlugin(r.value,e);if(t)return t;throw new g(e)}async parse(e){switch(typeof e){case"boolean":return e?I:A;case"undefined":return pe;case"string":return w(e);case"number":return ge(e);case"bigint":return Se(e);case"object":{if(e){let r=this.getReference(e);return r.type===0?await this.parseObject(r.value,e):r.value}return de}case"symbol":return this.parseWellKnownSymbol(e);case"function":return this.parseFunction(e);default:throw new g(e)}}async parseTop(e){try{return await this.parse(e)}catch(r){throw r instanceof E?r:new E(r)}}};var $=class extends k{constructor(){super(...arguments);this.mode="cross"}};function dr(o){switch(o){case"Int8Array":return Int8Array;case"Int16Array":return Int16Array;case"Int32Array":return Int32Array;case"Uint8Array":return Uint8Array;case"Uint16Array":return Uint16Array;case"Uint32Array":return Uint32Array;case"Uint8ClampedArray":return Uint8ClampedArray;case"Float32Array":return Float32Array;case"Float64Array":return Float64Array;case"BigInt64Array":return BigInt64Array;case"BigUint64Array":return BigUint64Array;default:throw new ke(o)}}function mr(o,e){switch(e){case 3:return Object.freeze(o);case 1:return Object.preventExtensions(o);case 2:return Object.seal(o);default:return o}}var F=class{constructor(e){this.plugins=e.plugins,this.refs=e.refs||new Map}deserializeReference(e){return this.assignIndexedValue(e.i,Je(N(e.s)))}deserializeArray(e){let r=e.l,t=this.assignIndexedValue(e.i,new Array(r)),n;for(let a=0;a<r;a++)n=e.a[a],n&&(t[a]=this.deserialize(n));return mr(t,e.o),t}deserializeProperties(e,r){let t=e.s;if(t){let n=e.k,a=e.v;for(let i=0,l;i<t;i++)l=n[i],typeof l=="string"?r[N(l)]=this.deserialize(a[i]):r[this.deserialize(l)]=this.deserialize(a[i])}return r}deserializeObject(e){let r=this.assignIndexedValue(e.i,e.t===10?{}:Object.create(null));return this.deserializeProperties(e.p,r),mr(r,e.o),r}deserializeDate(e){return this.assignIndexedValue(e.i,new Date(e.s))}deserializeRegExp(e){return this.assignIndexedValue(e.i,new RegExp(N(e.c),e.m))}deserializeSet(e){let r=this.assignIndexedValue(e.i,new Set),t=e.a;for(let n=0,a=e.l;n<a;n++)r.add(this.deserialize(t[n]));return r}deserializeMap(e){let r=this.assignIndexedValue(e.i,new Map),t=e.e.k,n=e.e.v;for(let a=0,i=e.e.s;a<i;a++)r.set(this.deserialize(t[a]),this.deserialize(n[a]));return r}deserializeArrayBuffer(e){let r=new Uint8Array(e.s);return this.assignIndexedValue(e.i,r.buffer)}deserializeTypedArray(e){let r=dr(e.c),t=this.deserialize(e.f);return this.assignIndexedValue(e.i,new r(t,e.b,e.l))}deserializeDataView(e){let r=this.deserialize(e.f);return this.assignIndexedValue(e.i,new DataView(r,e.b,e.l))}deserializeDictionary(e,r){if(e.p){let t=this.deserializeProperties(e.p,{});Object.assign(r,t)}return r}deserializeAggregateError(e){let r=this.assignIndexedValue(e.i,new AggregateError([],N(e.m)));return this.deserializeDictionary(e,r)}deserializeError(e){let r=Ze[e.s],t=this.assignIndexedValue(e.i,new r(N(e.m)));return this.deserializeDictionary(e,t)}deserializePromise(e){let r=re(),t=this.assignIndexedValue(e.i,r),n=this.deserialize(e.f);return e.s?r.resolve(n):r.reject(n),t.promise}deserializeBoxed(e){return this.assignIndexedValue(e.i,Object(this.deserialize(e.f)))}deserializePlugin(e){let r=this.plugins;if(r){let t=N(e.c);for(let n=0,a=r.length;n<a;n++){let i=r[n];if(i.tag===t)return this.assignIndexedValue(e.i,i.deserialize(e.s,this,{id:e.i}))}}throw new W(e.c)}deserializePromiseConstructor(e){return this.assignIndexedValue(e.i,this.assignIndexedValue(e.s,re()).promise)}deserializePromiseResolve(e){let r=this.refs.get(e.i);f(r,new P("Promise")),r.resolve(this.deserialize(e.a[1]))}deserializePromiseReject(e){let r=this.refs.get(e.i);f(r,new P("Promise")),r.reject(this.deserialize(e.a[1]))}deserializeIteratorFactoryInstance(e){this.deserialize(e.a[0]);let r=this.deserialize(e.a[1]);return pr(r)}deserializeAsyncIteratorFactoryInstance(e){this.deserialize(e.a[0]);let r=this.deserialize(e.a[1]);return ur(r)}deserializeStreamConstructor(e){let r=this.assignIndexedValue(e.i,K()),t=e.a.length;if(t)for(let n=0;n<t;n++)this.deserialize(e.a[n]);return r}deserializeStreamNext(e){let r=this.refs.get(e.i);f(r,new P("Stream")),r.next(this.deserialize(e.f))}deserializeStreamThrow(e){let r=this.refs.get(e.i);f(r,new P("Stream")),r.throw(this.deserialize(e.f))}deserializeStreamReturn(e){let r=this.refs.get(e.i);f(r,new P("Stream")),r.return(this.deserialize(e.f))}deserializeIteratorFactory(e){this.deserialize(e.f)}deserializeAsyncIteratorFactory(e){this.deserialize(e.a[1])}deserializeTop(e){try{return this.deserialize(e)}catch(r){throw new ze(r)}}deserialize(e){switch(e.t){case 2:return He[e.s];case 0:return e.s;case 1:return N(e.s);case 3:return BigInt(e.s);case 4:return this.refs.get(e.i);case 18:return this.deserializeReference(e);case 9:return this.deserializeArray(e);case 10:case 11:return this.deserializeObject(e);case 5:return this.deserializeDate(e);case 6:return this.deserializeRegExp(e);case 7:return this.deserializeSet(e);case 8:return this.deserializeMap(e);case 19:return this.deserializeArrayBuffer(e);case 16:case 15:return this.deserializeTypedArray(e);case 20:return this.deserializeDataView(e);case 14:return this.deserializeAggregateError(e);case 13:return this.deserializeError(e);case 12:return this.deserializePromise(e);case 17:return Ge[e.s];case 21:return this.deserializeBoxed(e);case 25:return this.deserializePlugin(e);case 22:return this.deserializePromiseConstructor(e);case 23:return this.deserializePromiseResolve(e);case 24:return this.deserializePromiseReject(e);case 28:return this.deserializeIteratorFactoryInstance(e);case 30:return this.deserializeAsyncIteratorFactoryInstance(e);case 31:return this.deserializeStreamConstructor(e);case 32:return this.deserializeStreamNext(e);case 33:return this.deserializeStreamThrow(e);case 34:return this.deserializeStreamReturn(e);case 27:return this.deserializeIteratorFactory(e);case 29:return this.deserializeAsyncIteratorFactory(e);default:throw new y(e)}}};var te=class extends F{constructor(){super(...arguments);this.mode="cross"}assignIndexedValue(r,t){return this.refs.has(r)||this.refs.set(r,t),t}};var kr=/^[$A-Z_][0-9A-Z_$]*$/i;function Le(o){let e=o[0];return(e==="$"||e==="_"||e>="A"&&e<="Z"||e>="a"&&e<="z")&&kr.test(o)}function se(o){switch(o.t){case 0:return o.s+"="+o.v;case 2:return o.s+".set("+o.k+","+o.v+")";case 1:return o.s+".add("+o.v+")";case 3:return o.s+".delete("+o.k+")"}}function Fr(o){let e=[],r=o[0];for(let t=1,n=o.length,a,i=r;t<n;t++)a=o[t],a.t===0&&a.v===i.v?r={t:0,s:a.s,k:s,v:se(r)}:a.t===2&&a.s===i.s?r={t:2,s:se(r),k:a.k,v:a.v}:a.t===1&&a.s===i.s?r={t:1,s:se(r),k:s,v:a.v}:a.t===3&&a.s===i.s?r={t:3,s:se(r),k:a.k,v:s}:(e.push(r),r=a),i=a;return e.push(r),e}function fr(o){if(o.length){let e="",r=Fr(o);for(let t=0,n=r.length;t<n;t++)e+=se(r[t])+",";return e}return s}var Vr="Object.create(null)",Dr="new Set",Br="new Map",jr="Promise.resolve",_r="Promise.reject",Mr={3:"Object.freeze",2:"Object.seal",1:"Object.preventExtensions",0:s},V=class{constructor(e){this.stack=[];this.flags=[];this.assignments=[];this.plugins=e.plugins,this.features=e.features,this.marked=new Set(e.markedRefs)}createFunction(e,r){return z(this.features,e,r)}createEffectfulFunction(e,r){return S(this.features,e,r)}markRef(e){this.marked.add(e)}isMarked(e){return this.marked.has(e)}pushObjectFlag(e,r){e!==0&&(this.markRef(r),this.flags.push({type:e,value:this.getRefParam(r)}))}resolveFlags(){let e="";for(let r=0,t=this.flags,n=t.length;r<n;r++){let a=t[r];e+=Mr[a.type]+"("+a.value+"),"}return e}resolvePatches(){let e=fr(this.assignments),r=this.resolveFlags();return e?r?e+r:e:r}createAssignment(e,r){this.assignments.push({t:0,s:e,k:s,v:r})}createAddAssignment(e,r){this.assignments.push({t:1,s:this.getRefParam(e),k:s,v:r})}createSetAssignment(e,r,t){this.assignments.push({t:2,s:this.getRefParam(e),k:r,v:t})}createDeleteAssignment(e,r){this.assignments.push({t:3,s:this.getRefParam(e),k:r,v:s})}createArrayAssign(e,r,t){this.createAssignment(this.getRefParam(e)+"["+r+"]",t)}createObjectAssign(e,r,t){this.createAssignment(this.getRefParam(e)+"."+r,t)}isIndexedValueInStack(e){return e.t===4&&this.stack.includes(e.i)}serializeReference(e){return this.assignIndexedValue(e.i,O+'.get("'+e.s+'")')}serializeArrayItem(e,r,t){return r?this.isIndexedValueInStack(r)?(this.markRef(e),this.createArrayAssign(e,t,this.getRefParam(r.i)),""):this.serialize(r):""}serializeArray(e){let r=e.i;if(e.l){this.stack.push(r);let t=e.a,n=this.serializeArrayItem(r,t[0],0),a=n==="";for(let i=1,l=e.l,c;i<l;i++)c=this.serializeArrayItem(r,t[i],i),n+=","+c,a=c==="";return this.stack.pop(),this.pushObjectFlag(e.o,e.i),this.assignIndexedValue(r,"["+n+(a?",]":"]"))}return this.assignIndexedValue(r,"[]")}serializeProperty(e,r,t){if(typeof r=="string"){let n=Number(r),a=n>=0&&n.toString()===r||Le(r);if(this.isIndexedValueInStack(t)){let i=this.getRefParam(t.i);return this.markRef(e.i),a&&n!==n?this.createObjectAssign(e.i,r,i):this.createArrayAssign(e.i,a?r:'"'+r+'"',i),""}return(a?r:'"'+r+'"')+":"+this.serialize(t)}return"["+this.serialize(r)+"]:"+this.serialize(t)}serializeProperties(e,r){let t=r.s;if(t){let n=r.k,a=r.v;this.stack.push(e.i);let i=this.serializeProperty(e,n[0],a[0]);for(let l=1,c=i;l<t;l++)c=this.serializeProperty(e,n[l],a[l]),i+=(c&&i&&",")+c;return this.stack.pop(),"{"+i+"}"}return"{}"}serializeObject(e){return this.pushObjectFlag(e.o,e.i),this.assignIndexedValue(e.i,this.serializeProperties(e,e.p))}serializeWithObjectAssign(e,r,t){let n=this.serializeProperties(e,r);return n!=="{}"?"Object.assign("+t+","+n+")":t}serializeStringKeyAssignment(e,r,t,n){let a=this.serialize(n),i=Number(t),l=i>=0&&i.toString()===t||Le(t);if(this.isIndexedValueInStack(n))l&&i!==i?this.createObjectAssign(e.i,t,a):this.createArrayAssign(e.i,l?t:'"'+t+'"',a);else{let c=this.assignments;this.assignments=r,l&&i!==i?this.createObjectAssign(e.i,t,a):this.createArrayAssign(e.i,l?t:'"'+t+'"',a),this.assignments=c}}serializeAssignment(e,r,t,n){if(typeof t=="string")this.serializeStringKeyAssignment(e,r,t,n);else{let a=this.stack;this.stack=[];let i=this.serialize(n);this.stack=a;let l=this.assignments;this.assignments=r,this.createArrayAssign(e.i,this.serialize(t),i),this.assignments=l}}serializeAssignments(e,r){let t=r.s;if(t){let n=[],a=r.k,i=r.v;this.stack.push(e.i);for(let l=0;l<t;l++)this.serializeAssignment(e,n,a[l],i[l]);return this.stack.pop(),fr(n)}return s}serializeDictionary(e,r){if(e.p)if(this.features&8)r=this.serializeWithObjectAssign(e,e.p,r);else{this.markRef(e.i);let t=this.serializeAssignments(e,e.p);if(t)return"("+this.assignIndexedValue(e.i,r)+","+t+this.getRefParam(e.i)+")"}return this.assignIndexedValue(e.i,r)}serializeNullConstructor(e){return this.pushObjectFlag(e.o,e.i),this.serializeDictionary(e,Vr)}serializeDate(e){return this.assignIndexedValue(e.i,'new Date("'+e.s+'")')}serializeRegExp(e){return this.assignIndexedValue(e.i,"/"+e.c+"/"+e.m)}serializeSetItem(e,r){return this.isIndexedValueInStack(r)?(this.markRef(e),this.createAddAssignment(e,this.getRefParam(r.i)),""):this.serialize(r)}serializeSet(e){let r=Dr,t=e.l,n=e.i;if(t){let a=e.a;this.stack.push(n);let i=this.serializeSetItem(n,a[0]);for(let l=1,c=i;l<t;l++)c=this.serializeSetItem(n,a[l]),i+=(c&&i&&",")+c;this.stack.pop(),i&&(r+="(["+i+"])")}return this.assignIndexedValue(n,r)}serializeMapEntry(e,r,t,n){if(this.isIndexedValueInStack(r)){let a=this.getRefParam(r.i);if(this.markRef(e),this.isIndexedValueInStack(t)){let l=this.getRefParam(t.i);return this.createSetAssignment(e,a,l),""}if(t.t!==4&&t.i!=null&&this.isMarked(t.i)){let l="("+this.serialize(t)+",["+n+","+n+"])";return this.createSetAssignment(e,a,this.getRefParam(t.i)),this.createDeleteAssignment(e,n),l}let i=this.stack;return this.stack=[],this.createSetAssignment(e,a,this.serialize(t)),this.stack=i,""}if(this.isIndexedValueInStack(t)){let a=this.getRefParam(t.i);if(this.markRef(e),r.t!==4&&r.i!=null&&this.isMarked(r.i)){let l="("+this.serialize(r)+",["+n+","+n+"])";return this.createSetAssignment(e,this.getRefParam(r.i),a),this.createDeleteAssignment(e,n),l}let i=this.stack;return this.stack=[],this.createSetAssignment(e,this.serialize(r),a),this.stack=i,""}return"["+this.serialize(r)+","+this.serialize(t)+"]"}serializeMap(e){let r=Br,t=e.e.s,n=e.i,a=e.f,i=this.getRefParam(a.i);if(t){let l=e.e.k,c=e.e.v;this.stack.push(n);let p=this.serializeMapEntry(n,l[0],c[0],i);for(let h=1,X=p;h<t;h++)X=this.serializeMapEntry(n,l[h],c[h],i),p+=(X&&p&&",")+X;this.stack.pop(),p&&(r+="(["+p+"])")}return a.t===26&&(this.markRef(a.i),r="("+this.serialize(a)+","+r+")"),this.assignIndexedValue(n,r)}serializeArrayBuffer(e){let r="new Uint8Array(",t=e.s,n=t.length;if(n){r+="["+t[0];for(let a=1;a<n;a++)r+=","+t[a];r+="]"}return this.assignIndexedValue(e.i,r+").buffer")}serializeTypedArray(e){return this.assignIndexedValue(e.i,"new "+e.c+"("+this.serialize(e.f)+","+e.b+","+e.l+")")}serializeDataView(e){return this.assignIndexedValue(e.i,"new DataView("+this.serialize(e.f)+","+e.b+","+e.l+")")}serializeAggregateError(e){let r=e.i;this.stack.push(r);let t=this.serializeDictionary(e,'new AggregateError([],"'+e.m+'")');return this.stack.pop(),t}serializeError(e){return this.serializeDictionary(e,"new "+ue[e.s]+'("'+e.m+'")')}serializePromise(e){let r,t=e.f,n=e.i,a=e.s?jr:_r;if(this.isIndexedValueInStack(t)){let i=this.getRefParam(t.i);r=a+(e.s?"().then("+this.createFunction([],i)+")":"().catch("+this.createEffectfulFunction([],"throw "+i)+")")}else{this.stack.push(n);let i=this.serialize(t);this.stack.pop(),r=a+"("+i+")"}return this.assignIndexedValue(n,r)}serializeWellKnownSymbol(e){return this.assignIndexedValue(e.i,$e[e.s])}serializeBoxed(e){return this.assignIndexedValue(e.i,"Object("+this.serialize(e.f)+")")}serializePlugin(e){let r=this.plugins;if(r)for(let t=0,n=r.length;t<n;t++){let a=r[t];if(a.tag===e.c)return this.assignIndexedValue(e.i,a.serialize(e.s,this,{id:e.i}))}throw new W(e.c)}getConstructor(e){let r=this.serialize(e);return r===this.getRefParam(e.i)?r:"("+r+")"}serializePromiseConstructor(e){let r=this.assignIndexedValue(e.s,"{p:0,s:0,f:0}");return this.assignIndexedValue(e.i,this.getConstructor(e.f)+"("+r+")")}serializePromiseResolve(e){return this.getConstructor(e.a[0])+"("+this.getRefParam(e.i)+","+this.serialize(e.a[1])+")"}serializePromiseReject(e){return this.getConstructor(e.a[0])+"("+this.getRefParam(e.i)+","+this.serialize(e.a[1])+")"}serializeSpecialReference(e){return this.assignIndexedValue(e.i,cr(this.features,e.s))}serializeIteratorFactory(e){let r="",t=!1;return e.f.t!==4&&(this.markRef(e.f.i),r="("+this.serialize(e.f)+",",t=!0),r+=this.assignIndexedValue(e.i,this.createFunction(["s"],this.createFunction(["i","c","d","t"],"(i=0,t={["+this.getRefParam(e.f.i)+"]:"+this.createFunction([],"t")+",next:"+this.createEffectfulFunction([],"if(i>s.d)return{done:!0,value:void 0};if(d=s.v[c=i++],c===s.t)throw d;return{done:c===s.d,value:d}")+"})"))),t&&(r+=")"),r}serializeIteratorFactoryInstance(e){return this.getConstructor(e.a[0])+"("+this.serialize(e.a[1])+")"}serializeAsyncIteratorFactory(e){let r=e.a[0],t=e.a[1],n="";r.t!==4&&(this.markRef(r.i),n+="("+this.serialize(r)),t.t!==4&&(this.markRef(t.i),n+=(n?",":"(")+this.serialize(t)),n&&(n+=",");let a=this.assignIndexedValue(e.i,this.createFunction(["s"],this.createFunction(["b","c","p","d","e","t","f"],"(b=[],c=0,p=[],d=-1,e=!1,f="+this.createEffectfulFunction(["i","l"],"for(i=0,l=p.length;i<l;i++)p[i].s({done:!0,value:void 0})")+",s.on({next:"+this.createEffectfulFunction(["v","t"],"if(t=p.shift())t.s({done:!1,value:v});b.push(v)")+",throw:"+this.createEffectfulFunction(["v","t"],"if(t=p.shift())t.f(v);f(),d=b.length,e=!0,b.push(v)")+",return:"+this.createEffectfulFunction(["v","t"],"if(t=p.shift())t.s({done:!0,value:v});f(),d=b.length,b.push(v)")+"}),t={["+this.getRefParam(t.i)+"]:"+this.createFunction([],"t.p")+",next:"+this.createEffectfulFunction(["i","t","v"],"if(d===-1){return((i=c++)>=b.length)?("+this.getRefParam(r.i)+"(t={p:0,s:0,f:0}),p.push(t),t.p):{done:!1,value:b[i]}}if(c>d)return{done:!0,value:void 0};if(v=b[i=c++],i!==d)return{done:!1,value:v};if(e)throw v;return{done:!0,value:v}")+"})")));return n?n+a+")":a}serializeAsyncIteratorFactoryInstance(e){return this.getConstructor(e.a[0])+"("+this.serialize(e.a[1])+")"}serializeStreamConstructor(e){let r=this.assignIndexedValue(e.i,this.getConstructor(e.f)+"()"),t=e.a.length;if(t){let n=this.serialize(e.a[0]);for(let a=1;a<t;a++)n+=","+this.serialize(e.a[a]);return"("+r+","+n+","+this.getRefParam(e.i)+")"}return r}serializeStreamNext(e){return this.getRefParam(e.i)+".next("+this.serialize(e.f)+")"}serializeStreamThrow(e){return this.getRefParam(e.i)+".throw("+this.serialize(e.f)+")"}serializeStreamReturn(e){return this.getRefParam(e.i)+".return("+this.serialize(e.f)+")"}serialize(e){try{switch(e.t){case 2:return qe[e.s];case 0:return""+e.s;case 1:return'"'+e.s+'"';case 3:return e.s+"n";case 4:return this.getRefParam(e.i);case 18:return this.serializeReference(e);case 9:return this.serializeArray(e);case 10:return this.serializeObject(e);case 11:return this.serializeNullConstructor(e);case 5:return this.serializeDate(e);case 6:return this.serializeRegExp(e);case 7:return this.serializeSet(e);case 8:return this.serializeMap(e);case 19:return this.serializeArrayBuffer(e);case 16:case 15:return this.serializeTypedArray(e);case 20:return this.serializeDataView(e);case 14:return this.serializeAggregateError(e);case 13:return this.serializeError(e);case 12:return this.serializePromise(e);case 17:return this.serializeWellKnownSymbol(e);case 21:return this.serializeBoxed(e);case 22:return this.serializePromiseConstructor(e);case 23:return this.serializePromiseResolve(e);case 24:return this.serializePromiseReject(e);case 25:return this.serializePlugin(e);case 26:return this.serializeSpecialReference(e);case 27:return this.serializeIteratorFactory(e);case 28:return this.serializeIteratorFactoryInstance(e);case 29:return this.serializeAsyncIteratorFactory(e);case 30:return this.serializeAsyncIteratorFactoryInstance(e);case 31:return this.serializeStreamConstructor(e);case 32:return this.serializeStreamNext(e);case 33:return this.serializeStreamThrow(e);case 34:return this.serializeStreamReturn(e);default:throw new y(e)}}catch(r){throw new Te(r)}}};var D=class extends V{constructor(r){super(r);this.mode="cross";this.scopeId=r.scopeId}getRefParam(r){return Q+"["+r+"]"}assignIndexedValue(r,t){return this.getRefParam(r)+"="+t}serializeTop(r){let t=this.serialize(r),n=r.i;if(n==null)return t;let a=this.resolvePatches(),i=this.getRefParam(n),l=this.scopeId==null?"":Q,c=a?"("+t+","+a+i+")":t;if(l==="")return r.t===10&&!a?"("+c+")":c;let p=this.scopeId==null?"()":"("+Q+'["'+d(this.scopeId)+'"])';return"("+this.createFunction([l],c)+")"+p}};var v=class extends Y{parseItems(e){let r=[];for(let t=0,n=e.length;t<n;t++)t in e&&(r[t]=this.parse(e[t]));return r}parseArray(e,r){return Ne(e,r,this.parseItems(r))}parseProperties(e){let r=Object.entries(e),t=[],n=[];for(let i=0,l=r.length;i<l;i++)t.push(d(r[i][0])),n.push(this.parse(r[i][1]));let a=Symbol.iterator;return a in e&&(t.push(this.parseWellKnownSymbol(a)),n.push(M(this.parseIteratorFactory(),this.parse(J(e))))),a=Symbol.asyncIterator,a in e&&(t.push(this.parseWellKnownSymbol(a)),n.push(U(this.parseAsyncIteratorFactory(),this.parse(K())))),a=Symbol.toStringTag,a in e&&(t.push(this.parseWellKnownSymbol(a)),n.push(w(e[a]))),a=Symbol.isConcatSpreadable,a in e&&(t.push(this.parseWellKnownSymbol(a)),n.push(e[a]?I:A)),{k:t,v:n,s:t.length}}parsePlainObject(e,r,t){return this.createObjectNode(e,r,t,this.parseProperties(r))}parseBoxed(e,r){return be(e,this.parse(r.valueOf()))}parseTypedArray(e,r){return xe(e,r,this.parse(r.buffer))}parseBigIntTypedArray(e,r){return Ie(e,r,this.parse(r.buffer))}parseDataView(e,r){return Ae(e,r,this.parse(r.buffer))}parseError(e,r){let t=j(r,this.features);return we(e,r,t?this.parseProperties(t):s)}parseAggregateError(e,r){let t=j(r,this.features);return Ee(e,r,t?this.parseProperties(t):s)}parseMap(e,r){let t=[],n=[];for(let[a,i]of r.entries())t.push(this.parse(a)),n.push(this.parse(i));return this.createMapNode(e,t,n,r.size)}parseSet(e,r){let t=[];for(let n of r.keys())t.push(this.parse(n));return Pe(e,r.size,t)}parsePlugin(e,r){let t=this.plugins;if(t)for(let n=0,a=t.length;n<a;n++){let i=t[n];if(i.parse.sync&&i.test(r))return _(e,i.tag,i.parse.sync(r,this,{id:e}))}}parseStream(e,r){return L(e,this.parseSpecialReference(4),[])}parsePromise(e,r){return this.createPromiseConstructorNode(e,this.createIndex({}))}parseObject(e,r){if(Array.isArray(r))return this.parseArray(e,r);if(Fe(r))return this.parseStream(e,r);let t=r.constructor;if(t===T)return this.parse(r.replacement);let n=this.parsePlugin(e,r);if(n)return n;switch(t){case Object:return this.parsePlainObject(e,r,!1);case void 0:return this.parsePlainObject(e,r,!0);case Date:return he(e,r);case RegExp:return ye(e,r);case Error:case EvalError:case RangeError:case ReferenceError:case SyntaxError:case TypeError:case URIError:return this.parseError(e,r);case Number:case Boolean:case String:case BigInt:return this.parseBoxed(e,r);case ArrayBuffer:return ve(e,r);case Int8Array:case Int16Array:case Int32Array:case Uint8Array:case Uint16Array:case Uint32Array:case Uint8ClampedArray:case Float32Array:case Float64Array:return this.parseTypedArray(e,r);case DataView:return this.parseDataView(e,r);case Map:return this.parseMap(e,r);case Set:return this.parseSet(e,r);default:break}if(t===Promise||r instanceof Promise)return this.parsePromise(e,r);let a=this.features;if(a&16)switch(t){case BigInt64Array:case BigUint64Array:return this.parseBigIntTypedArray(e,r);default:break}if(a&1&&typeof AggregateError!="undefined"&&(t===AggregateError||r instanceof AggregateError))return this.parseAggregateError(e,r);if(r instanceof Error)return this.parseError(e,r);if(Symbol.iterator in r||Symbol.asyncIterator in r)return this.parsePlainObject(e,r,!!t);throw new g(r)}parseFunction(e){let r=this.getReference(e);if(r.type!==0)return r.value;let t=this.parsePlugin(r.value,e);if(t)return t;throw new g(e)}parse(e){switch(typeof e){case"boolean":return e?I:A;case"undefined":return pe;case"string":return w(e);case"number":return ge(e);case"bigint":return Se(e);case"object":{if(e){let r=this.getReference(e);return r.type===0?this.parseObject(r.value,e):r.value}return de}case"symbol":return this.parseWellKnownSymbol(e);case"function":return this.parseFunction(e);default:throw new g(e)}}parseTop(e){try{return this.parse(e)}catch(r){throw r instanceof E?r:new E(r)}}};var oe=class extends v{constructor(r){super(r);this.alive=!0;this.pending=0;this.initial=!0;this.buffer=[];this.onParseCallback=r.onParse,this.onErrorCallback=r.onError,this.onDoneCallback=r.onDone}onParseInternal(r,t){try{this.onParseCallback(r,t)}catch(n){this.onError(n)}}flush(){for(let r=0,t=this.buffer.length;r<t;r++)this.onParseInternal(this.buffer[r],!1)}onParse(r){this.initial?this.buffer.push(r):this.onParseInternal(r,!1)}onError(r){if(this.onErrorCallback)this.onErrorCallback(r);else throw r}onDone(){this.onDoneCallback&&this.onDoneCallback()}pushPendingState(){this.pending++}popPendingState(){--this.pending<=0&&this.onDone()}parseProperties(r){let t=Object.entries(r),n=[],a=[];for(let l=0,c=t.length;l<c;l++)n.push(d(t[l][0])),a.push(this.parse(t[l][1]));let i=Symbol.iterator;return i in r&&(n.push(this.parseWellKnownSymbol(i)),a.push(M(this.parseIteratorFactory(),this.parse(J(r))))),i=Symbol.asyncIterator,i in r&&(n.push(this.parseWellKnownSymbol(i)),a.push(U(this.parseAsyncIteratorFactory(),this.parse(Ve(r))))),i=Symbol.toStringTag,i in r&&(n.push(this.parseWellKnownSymbol(i)),a.push(w(r[i]))),i=Symbol.isConcatSpreadable,i in r&&(n.push(this.parseWellKnownSymbol(i)),a.push(r[i]?I:A)),{k:n,v:a,s:n.length}}handlePromiseSuccess(r,t){let n=this.parseWithError(t);n&&this.onParse(u(23,r,s,s,s,s,s,s,[this.parseSpecialReference(2),n],s,s,s)),this.popPendingState()}handlePromiseFailure(r,t){if(this.alive){let n=this.parseWithError(t);n&&this.onParse(u(24,r,s,s,s,s,s,s,[this.parseSpecialReference(3),n],s,s,s))}this.popPendingState()}parsePromise(r,t){let n=this.createIndex({});return t.then(this.handlePromiseSuccess.bind(this,n),this.handlePromiseFailure.bind(this,n)),this.pushPendingState(),this.createPromiseConstructorNode(r,n)}parsePlugin(r,t){let n=this.plugins;if(n)for(let a=0,i=n.length;a<i;a++){let l=n[a];if(l.parse.stream&&l.test(t))return _(r,l.tag,l.parse.stream(t,this,{id:r}))}return s}parseStream(r,t){let n=L(r,this.parseSpecialReference(4),[]);return this.pushPendingState(),t.on({next:a=>{if(this.alive){let i=this.parseWithError(a);i&&this.onParse(Re(r,i))}},throw:a=>{if(this.alive){let i=this.parseWithError(a);i&&this.onParse(Oe(r,i))}this.popPendingState()},return:a=>{if(this.alive){let i=this.parseWithError(a);i&&this.onParse(Ce(r,i))}this.popPendingState()}}),n}parseWithError(r){try{return this.parse(r)}catch(t){return this.onError(t),s}}start(r){let t=this.parseWithError(r);t&&(this.onParseInternal(t,!0),this.initial=!1,this.flush(),this.pending<=0&&this.destroy())}destroy(){this.alive&&(this.onDone(),this.alive=!1)}isAlive(){return this.alive}};var G=class extends oe{constructor(){super(...arguments);this.mode="cross"}};var q=class extends v{constructor(){super(...arguments);this.mode="cross"}};function po(o,e={}){let r=m(e.plugins),t=new q({plugins:r,disabledFeatures:e.disabledFeatures,refs:e.refs}),n=t.parseTop(o);return new D({plugins:r,features:t.features,scopeId:e.scopeId,markedRefs:t.marked}).serializeTop(n)}async function mo(o,e={}){let r=m(e.plugins),t=new $({plugins:r,disabledFeatures:e.disabledFeatures,refs:e.refs}),n=await t.parseTop(o);return new D({plugins:r,features:t.features,scopeId:e.scopeId,markedRefs:t.marked}).serializeTop(n)}function fo(o,e={}){let r=m(e.plugins);return new q({plugins:r,disabledFeatures:e.disabledFeatures,refs:e.refs}).parseTop(o)}async function go(o,e={}){let r=m(e.plugins);return await new $({plugins:r,disabledFeatures:e.disabledFeatures,refs:e.refs}).parseTop(o)}function gr(o,e){let r=m(e.plugins),t=new G({plugins:r,refs:e.refs,disabledFeatures:e.disabledFeatures,onParse(n,a){let i=new D({plugins:r,features:t.features,scopeId:e.scopeId,markedRefs:t.marked}),l;try{l=i.serializeTop(n)}catch(c){e.onError&&e.onError(c);return}e.onSerialize(l,a)},onError:e.onError,onDone:e.onDone});return t.start(o),t.destroy.bind(t)}function So(o,e){let r=m(e.plugins),t=new G({plugins:r,refs:e.refs,disabledFeatures:e.disabledFeatures,onParse:e.onParse,onError:e.onError,onDone:e.onDone});return t.start(o),t.destroy.bind(t)}function ho(o,e){let r=m(e.plugins);return new te({plugins:r,refs:e.refs}).deserializeTop(o)}var H=class extends k{constructor(){super(...arguments);this.mode="vanilla"}};var ne=class extends F{constructor(r){super(r);this.mode="vanilla";this.marked=new Set(r.markedRefs)}assignIndexedValue(r,t){return this.marked.has(r)&&this.refs.set(r,t),t}};var yr="hjkmoquxzABCDEFGHIJKLNPQRTUVWXYZ$_",Sr=yr.length,vr="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789$_",hr=vr.length;function We(o){let e=o%Sr,r=yr[e];for(o=(o-e)/Sr;o>0;)e=o%hr,r+=vr[e],o=(o-e)/hr;return r}var B=class extends V{constructor(){super(...arguments);this.mode="vanilla";this.valid=new Map;this.vars=[]}getRefParam(r){let t=this.valid.get(r);t==null&&(t=this.valid.size,this.valid.set(r,t));let n=this.vars[t];return n==null&&(n=We(t),this.vars[t]=n),n}assignIndexedValue(r,t){return this.isMarked(r)?this.getRefParam(r)+"="+t:t}serializePromiseConstructor(r){throw new y(r)}serializePromiseResolve(r){throw new y(r)}serializePromiseReject(r){throw new y(r)}serializeTop(r){let t=this.serialize(r);if(r.i!=null&&this.vars.length){let n=this.resolvePatches(),a=t;if(n){let i=this.getRefParam(r.i);a=t+","+n+i,t.startsWith(i+"=")||(a=i+"="+a),a="("+a+")"}return"("+this.createFunction(this.vars,a)+")()"}return r.t===10?"("+t+")":t}};var Z=class extends v{constructor(){super(...arguments);this.mode="vanilla"}};function Do(o,e={}){let r=m(e.plugins),t=new Z({plugins:r,disabledFeatures:e.disabledFeatures}),n=t.parseTop(o);return new B({plugins:r,features:t.features,markedRefs:t.marked}).serializeTop(n)}async function Bo(o,e={}){let r=m(e.plugins),t=new H({plugins:r,disabledFeatures:e.disabledFeatures}),n=await t.parseTop(o);return new B({plugins:r,features:t.features,markedRefs:t.marked}).serializeTop(n)}function jo(o){return(0,eval)(o)}function _o(o,e={}){let r=m(e.plugins),t=new Z({plugins:r,disabledFeatures:e.disabledFeatures});return{t:t.parseTop(o),f:t.features,m:Array.from(t.marked)}}async function Mo(o,e={}){let r=m(e.plugins),t=new H({plugins:r,disabledFeatures:e.disabledFeatures});return{t:await t.parseTop(o),f:t.features,m:Array.from(t.marked)}}function Uo(o,e={}){let r=m(e.plugins);return new B({plugins:r,features:o.f,markedRefs:o.m}).serializeTop(o.t)}function Lo(o,e={}){let r=m(e.plugins);return new ne({plugins:r,markedRefs:o.m}).deserializeTop(o.t)}var De=class{constructor(e){this.options=e;this.alive=!0;this.flushed=!1;this.done=!1;this.pending=0;this.cleanups=[];this.refs=new Map;this.keys=new Set;this.ids=0;this.plugins=m(e.plugins)}write(e,r){this.alive&&!this.flushed&&(this.pending++,this.keys.add(e),this.cleanups.push(gr(r,{plugins:this.plugins,scopeId:this.options.scopeId,refs:this.refs,disabledFeatures:this.options.disabledFeatures,onError:this.options.onError,onSerialize:(t,n)=>{this.alive&&this.options.onData(n?this.options.globalIdentifier+'["'+d(e)+'"]='+t:t)},onDone:()=>{this.alive&&(this.pending--,this.pending<=0&&this.flushed&&!this.done&&this.options.onDone&&(this.options.onDone(),this.done=!0))}})))}getNextID(){for(;this.keys.has(""+this.ids);)this.ids++;return""+this.ids}push(e){let r=this.getNextID();return this.write(r,e),r}flush(){this.alive&&(this.flushed=!0,this.pending<=0&&!this.done&&this.options.onDone&&(this.options.onDone(),this.done=!0))}close(){if(this.alive){for(let e=0,r=this.cleanups.length;e<r;e++)this.cleanups[e]();!this.done&&this.options.onDone&&(this.options.onDone(),this.done=!0),this.alive=!1}}};export{R as Feature,T as OpaqueReference,De as Serializer,ze as SerovalDeserializationError,ee as SerovalError,P as SerovalMissingInstanceError,W as SerovalMissingPluginError,ie as SerovalMissingReferenceError,le as SerovalMissingReferenceForIdError,E as SerovalParserError,Te as SerovalSerializationError,ke as SerovalUnknownTypedArrayError,y as SerovalUnsupportedNodeError,g as SerovalUnsupportedTypeError,Uo as compileJSON,Hr as createPlugin,Ir as createReference,K as createStream,po as crossSerialize,mo as crossSerializeAsync,gr as crossSerializeStream,jo as deserialize,ho as fromCrossJSON,Lo as fromJSON,xr as getCrossReferenceHeader,m as resolvePlugins,Do as serialize,Bo as serializeAsync,fo as toCrossJSON,go as toCrossJSONAsync,So as toCrossJSONStream,_o as toJSON,Mo as toJSONAsync}; | ||
| var K=(s=>(s[s.AggregateError=1]="AggregateError",s[s.ArrowFunction=2]="ArrowFunction",s[s.ErrorPrototypeStack=4]="ErrorPrototypeStack",s[s.ObjectAssign=8]="ObjectAssign",s[s.BigIntTypedArray=16]="BigIntTypedArray",s))(K||{});var b=Symbol.asyncIterator,lr=Symbol.hasInstance,P=Symbol.isConcatSpreadable,A=Symbol.iterator,ur=Symbol.match,cr=Symbol.matchAll,fr=Symbol.replace,Sr=Symbol.search,pr=Symbol.species,dr=Symbol.split,mr=Symbol.toPrimitive,x=Symbol.toStringTag,gr=Symbol.unscopables;var Zr={0:"Symbol.asyncIterator",1:"Symbol.hasInstance",2:"Symbol.isConcatSpreadable",3:"Symbol.iterator",4:"Symbol.match",5:"Symbol.matchAll",6:"Symbol.replace",7:"Symbol.search",8:"Symbol.species",9:"Symbol.split",10:"Symbol.toPrimitive",11:"Symbol.toStringTag",12:"Symbol.unscopables"},ge={[b]:0,[lr]:1,[P]:2,[A]:3,[ur]:4,[cr]:5,[fr]:6,[Sr]:7,[pr]:8,[dr]:9,[mr]:10,[x]:11,[gr]:12},Jr={0:b,1:lr,2:P,3:A,4:ur,5:cr,6:fr,7:Sr,8:pr,9:dr,10:mr,11:x,12:gr},Hr={2:"!0",3:"!1",1:"void 0",0:"null",4:"-0",5:"1/0",6:"-1/0",7:"0/0"},$r={2:!0,3:!1,1:void 0,0:null,4:-0,5:Number.POSITIVE_INFINITY,6:Number.NEGATIVE_INFINITY,7:Number.NaN};var ye={0:"Error",1:"EvalError",2:"RangeError",3:"ReferenceError",4:"SyntaxError",5:"TypeError",6:"URIError"},qr={0:Error,1:EvalError,2:RangeError,3:ReferenceError,4:SyntaxError,5:TypeError,6:URIError},o=void 0;function c(e,r,t,n,a,s,i,l,u,g,S,d){return{t:e,i:r,s:t,l:n,c:a,m:s,p:i,e:l,a:u,f:g,b:S,o:d}}function _(e){return c(2,o,e,o,o,o,o,o,o,o,o,o)}var Z=_(2),J=_(3),Ne=_(1),Ce=_(0),Xr=_(4),Qr=_(5),et=_(6),rt=_(7);function Qt(e){switch(e){case'"':return'\\"';case"\\":return"\\\\";case` | ||
| `:return"\\n";case"\r":return"\\r";case"\b":return"\\b";case" ":return"\\t";case"\f":return"\\f";case"<":return"\\x3C";case"\u2028":return"\\u2028";case"\u2029":return"\\u2029";default:return}}function y(e){let r="",t=0,n;for(let a=0,s=e.length;a<s;a++)n=Qt(e[a]),n&&(r+=e.slice(t,a)+n,t=a+1);return t===0?r=e:r+=e.slice(t),r}function en(e){switch(e){case"\\\\":return"\\";case'\\"':return'"';case"\\n":return` | ||
| `;case"\\r":return"\r";case"\\b":return"\b";case"\\t":return" ";case"\\f":return"\f";case"\\x3C":return"<";case"\\u2028":return"\u2028";case"\\u2029":return"\u2029";default:return e}}function z(e){return e.replace(/(\\\\|\\"|\\n|\\r|\\b|\\t|\\f|\\u2028|\\u2029|\\x3C)/g,en)}var B="__SEROVAL_REFS__",ie="$R",ve=`self.${ie}`;function rn(e){return e==null?`${ve}=${ve}||[]`:`(${ve}=${ve}||{})["${y(e)}"]=[]`}var yr=new Map,V=new Map;function tn(e,r){return yr.set(r,e),V.set(e,r),r}function Nr(e){return yr.has(e)}function nn(e){return V.has(e)}function tt(e){if(Nr(e))return yr.get(e);throw new be(e)}function nt(e){if(nn(e))return V.get(e);throw new Ae(e)}typeof globalThis!="undefined"?Object.defineProperty(globalThis,B,{value:V,configurable:!0,writable:!1,enumerable:!1}):typeof window!="undefined"?Object.defineProperty(window,B,{value:V,configurable:!0,writable:!1,enumerable:!1}):typeof self!="undefined"?Object.defineProperty(self,B,{value:V,configurable:!0,writable:!1,enumerable:!1}):typeof global!="undefined"&&Object.defineProperty(global,B,{value:V,configurable:!0,writable:!1,enumerable:!1});function Re(e){return e instanceof EvalError?1:e instanceof RangeError?2:e instanceof ReferenceError?3:e instanceof SyntaxError?4:e instanceof TypeError?5:e instanceof URIError?6:0}function on(e){let r=ye[Re(e)];return e.name!==r?{name:e.name}:e.constructor.name!==r?{name:e.constructor.name}:{}}function H(e,r){let t=on(e),n=Object.getOwnPropertyNames(e);for(let a=0,s=n.length,i;a<s;a++)i=n[a],i!=="name"&&i!=="message"&&(i==="stack"?r&4&&(t=t||{},t[i]=e[i]):(t=t||{},t[i]=e[i]));return t}function Ie(e){return Object.isFrozen(e)?3:Object.isSealed(e)?2:Object.isExtensible(e)?0:1}function Ee(e){switch(e){case Number.POSITIVE_INFINITY:return Qr;case Number.NEGATIVE_INFINITY:return et}return e!==e?rt:Object.is(e,-0)?Xr:c(0,o,e,o,o,o,o,o,o,o,o,o)}function $(e){return c(1,o,y(e),o,o,o,o,o,o,o,o,o)}function Pe(e){return c(3,o,""+e,o,o,o,o,o,o,o,o,o)}function at(e){return c(4,e,o,o,o,o,o,o,o,o,o,o)}function xe(e,r){let t=r.valueOf();return c(5,e,t!==t?"":r.toISOString(),o,o,o,o,o,o,o,o,o)}function Te(e,r){return c(6,e,o,o,y(r.source),r.flags,o,o,o,o,o,o)}function st(e,r){return c(17,e,ge[r],o,o,o,o,o,o,o,o,o)}function it(e,r){return c(18,e,y(tt(r)),o,o,o,o,o,o,o,o,o)}function le(e,r,t){return c(25,e,t,o,y(r),o,o,o,o,o,o,o)}function Oe(e,r,t){return c(9,e,o,r.length,o,o,o,o,t,o,o,Ie(r))}function he(e,r){return c(21,e,o,o,o,o,o,o,o,r,o,o)}function we(e,r,t){return c(15,e,o,r.length,r.constructor.name,o,o,o,o,t,r.byteOffset,o)}function ze(e,r,t){return c(16,e,o,r.length,r.constructor.name,o,o,o,o,t,r.byteOffset,o)}function ke(e,r,t){return c(20,e,o,r.byteLength,o,o,o,o,o,t,r.byteOffset,o)}function _e(e,r,t){return c(13,e,Re(r),o,o,y(r.message),t,o,o,o,o,o)}function De(e,r,t){return c(14,e,Re(r),o,o,y(r.message),t,o,o,o,o,o)}function Fe(e,r,t){return c(7,e,o,r,o,o,o,o,t,o,o,o)}function Be(e,r){return c(28,o,o,o,o,o,o,o,[e,r],o,o,o)}function Ve(e,r){return c(30,o,o,o,o,o,o,o,[e,r],o,o,o)}function Me(e,r,t){return c(31,e,o,o,o,o,o,o,t,r,o,o)}function je(e,r){return c(32,e,o,o,o,o,o,o,o,r,o,o)}function Ue(e,r){return c(33,e,o,o,o,o,o,o,o,r,o,o)}function Le(e,r){return c(34,e,o,o,o,o,o,o,o,r,o,o)}var{toString:Ja}=Object.prototype;var an={parsing:1,serialization:2,deserialization:3};function sn(e){return`Seroval Error (step: ${an[e]})`}var ln=(e,r)=>sn(e),ue=class extends Error{constructor(t,n){super(ln(t,n));this.cause=n}},h=class extends ue{constructor(r){super("parsing",r)}},Cr=class extends ue{constructor(r){super("serialization",r)}},Ye=class extends ue{constructor(r){super("deserialization",r)}};function M(e){return`Seroval Error (specific: ${e})`}var E=class extends Error{constructor(t){super(M(1));this.value=t}},k=class extends Error{constructor(r){super(M(2))}},q=class extends Error{constructor(r){super(M(3))}},D=class extends Error{constructor(r){super(M(4))}},be=class extends Error{constructor(t){super(M(5));this.value=t}},Ae=class extends Error{constructor(r){super(M(6))}},We=class extends Error{constructor(r){super(M(7))}};var j=class{constructor(r,t){this.value=r;this.replacement=t}};var X=()=>{let e={p:0,s:0,f:0};return e.p=new Promise((r,t)=>{e.s=r,e.f=t}),e},un=(e,r)=>{e.s(r),e.p.s=1,e.p.v=r},cn=(e,r)=>{e.f(r),e.p.s=2,e.p.v=r},lt=X.toString(),ut=un.toString(),ct=cn.toString(),vr=()=>{let e=[],r=[],t=!0,n=!1,a=0,s=(u,g,S)=>{for(S=0;S<a;S++)r[S]&&r[S][g](u)},i=(u,g,S,d)=>{for(g=0,S=e.length;g<S;g++)d=e[g],!t&&g===S-1?u[n?"return":"throw"](d):u.next(d)},l=(u,g)=>(t&&(g=a++,r[g]=u),i(u),()=>{t&&(r[g]=r[a],r[a--]=void 0)});return{__SEROVAL_STREAM__:!0,on:u=>l(u),next:u=>{t&&(e.push(u),s(u,"next"))},throw:u=>{t&&(e.push(u),s(u,"throw"),t=!1,n=!1,r.length=0)},return:u=>{t&&(e.push(u),s(u,"return"),t=!1,n=!0,r.length=0)}}},ft=vr.toString(),br=e=>r=>()=>{let t=0,n={[e]:()=>n,next:()=>{if(t>r.d)return{done:!0,value:void 0};let a=t++,s=r.v[a];if(a===r.t)throw s;return{done:a===r.d,value:s}}};return n},St=br.toString(),Ar=(e,r)=>t=>()=>{let n=0,a=-1,s=!1,i=[],l=[],u=(S=0,d=l.length)=>{for(;S<d;S++)l[S].s({done:!0,value:void 0})};t.on({next:S=>{let d=l.shift();d&&d.s({done:!1,value:S}),i.push(S)},throw:S=>{let d=l.shift();d&&d.f(S),u(),a=i.length,s=!0,i.push(S)},return:S=>{let d=l.shift();d&&d.s({done:!0,value:S}),u(),a=i.length,i.push(S)}});let g={[e]:()=>g,next:()=>{if(a===-1){let W=n++;if(W>=i.length){let Gr=r();return l.push(Gr),Gr.p}return{done:!1,value:i[W]}}if(n>a)return{done:!0,value:void 0};let S=n++,d=i[S];if(S!==a)return{done:!1,value:d};if(s)throw d;return{done:!0,value:d}}};return g},pt=Ar.toString(),Rr=(e,r)=>{let t=atob(r),n=new Uint8Array(e);for(let a=0;a<e;a++)n[a]=t.charCodeAt(a);return n.buffer},dt=Rr.toString();var mt={},gt={};var yt={0:{},1:{},2:{},3:{},4:{},5:{}},Nt={0:"[]",1:lt,2:ut,3:ct,4:ft,5:dt};function Ke(e){return"__SEROVAL_STREAM__"in e}function Q(){return vr()}function Ge(e){let r=Q(),t=e[b]();async function n(){try{let a=await t.next();a.done?r.return(a.value):(r.next(a.value),await n())}catch(a){r.throw(a)}}return n().catch(()=>{}),r}var fn=Ar(b,X);function Ct(e){return fn(e)}function Ze(e){let r=[],t=-1,n=-1,a=e[A]();for(;;)try{let s=a.next();if(r.push(s.value),s.done){n=r.length-1;break}}catch(s){t=r.length,r.push(s)}return{v:r,t,d:n}}var Sn=br(A);function vt(e){return Sn(e)}async function Ir(e){try{return[1,await e]}catch(r){return[0,r]}}function ce(e,r){return{plugins:r.plugins,mode:e,marked:new Set,features:31^(r.disabledFeatures||0),refs:r.refs||new Map}}function fe(e,r){e.marked.add(r)}function Er(e,r){let t=e.refs.size;return e.refs.set(r,t),t}function Je(e,r){let t=e.refs.get(r);return t!=null?(fe(e,t),{type:1,value:at(t)}):{type:0,value:Er(e,r)}}function U(e,r){let t=Je(e,r);return t.type===1?t:Nr(r)?{type:2,value:it(t.value,r)}:t}function I(e,r){let t=U(e,r);if(t.type!==0)return t.value;if(r in ge)return st(t.value,r);throw new E(r)}function w(e,r){let t=Je(e,yt[r]);return t.type===1?t.value:c(26,t.value,r,o,o,o,o,o,o,o,o,o)}function He(e){let r=Je(e,mt);return r.type===1?r.value:c(27,r.value,o,o,o,o,o,o,o,I(e,A),o,o)}function $e(e){let r=Je(e,gt);return r.type===1?r.value:c(29,r.value,o,o,o,o,o,o,[w(e,1),I(e,b)],o,o,o)}function qe(e,r,t,n){return c(t?11:10,e,o,o,o,o,n,o,o,o,o,Ie(r))}function Xe(e,r,t,n,a){return c(8,r,o,o,o,o,o,{k:t,v:n,s:a},o,w(e,0),o,o)}function At(e,r,t){return c(22,r,t,o,o,o,o,o,o,w(e,1),o,o)}function Qe(e,r,t){let n=new Uint8Array(t),a=n.length,s="";for(let i=0;i<a;i++)s+=String.fromCharCode(n[i]);return c(19,r,y(btoa(s)),a,o,o,o,o,o,w(e,5),o,o)}function ee(e,r){return{base:ce(e,r),child:void 0}}var xr=class{constructor(r){this._p=r}parse(r){return N(this._p,r)}};async function mn(e,r){let t=[];for(let n=0,a=r.length;n<a;n++)n in r&&(t[n]=await N(e,r[n]));return t}async function gn(e,r,t){return Oe(r,t,await mn(e,t))}async function Tr(e,r){let t=Object.entries(r),n=[],a=[];for(let s=0,i=t.length;s<i;s++)n.push(y(t[s][0])),a.push(await N(e,t[s][1]));return A in r&&(n.push(I(e.base,A)),a.push(Be(He(e.base),await N(e,Ze(r))))),b in r&&(n.push(I(e.base,b)),a.push(Ve($e(e.base),await N(e,Ge(r))))),x in r&&(n.push(I(e.base,x)),a.push($(r[x]))),P in r&&(n.push(I(e.base,P)),a.push(r[P]?Z:J)),{k:n,v:a,s:n.length}}async function Pr(e,r,t,n){return qe(r,t,n,await Tr(e,t))}async function yn(e,r,t){return he(r,await N(e,t.valueOf()))}async function Nn(e,r,t){return we(r,t,await N(e,t.buffer))}async function Cn(e,r,t){return ze(r,t,await N(e,t.buffer))}async function vn(e,r,t){return ke(r,t,await N(e,t.buffer))}async function Rt(e,r,t){let n=H(t,e.base.features);return _e(r,t,n?await Tr(e,n):o)}async function bn(e,r,t){let n=H(t,e.base.features);return De(r,t,n?await Tr(e,n):o)}async function An(e,r,t){let n=[],a=[];for(let[s,i]of t.entries())n.push(await N(e,s)),a.push(await N(e,i));return Xe(e.base,r,n,a,t.size)}async function Rn(e,r,t){let n=[];for(let a of t.keys())n.push(await N(e,a));return Fe(r,t.size,n)}async function It(e,r,t){let n=e.base.plugins;if(n)for(let a=0,s=n.length;a<s;a++){let i=n[a];if(i.parse.async&&i.test(t))return e.child==null&&(e.child=new xr(e)),le(r,i.tag,await i.parse.async(t,e.child,{id:r}))}return o}async function In(e,r,t){let[n,a]=await Ir(t);return c(12,r,n,o,o,o,o,o,o,await N(e,a),o,o)}function En(e,r,t,n){let a=[],s=r.on({next:i=>{fe(this.base,e),N(this,i).then(l=>{a.push(je(e,l))},l=>{n(l),s()})},throw:i=>{fe(this.base,e),N(this,i).then(l=>{a.push(Ue(e,l)),t(a),s()},l=>{n(l),s()})},return:i=>{fe(this.base,e),N(this,i).then(l=>{a.push(Le(e,l)),t(a),s()},l=>{n(l),s()})}})}async function Pn(e,r,t){return Me(r,w(e.base,4),await new Promise(En.bind(e,r,t)))}async function xn(e,r,t){if(Array.isArray(t))return gn(e,r,t);if(Ke(t))return Pn(e,r,t);let n=t.constructor;if(n===j)return N(e,t.replacement);let a=await It(e,r,t);if(a)return a;switch(n){case Object:return Pr(e,r,t,!1);case o:return Pr(e,r,t,!0);case Date:return xe(r,t);case RegExp:return Te(r,t);case Error:case EvalError:case RangeError:case ReferenceError:case SyntaxError:case TypeError:case URIError:return Rt(e,r,t);case Number:case Boolean:case String:case BigInt:return yn(e,r,t);case ArrayBuffer:return Qe(e.base,r,t);case Int8Array:case Int16Array:case Int32Array:case Uint8Array:case Uint16Array:case Uint32Array:case Uint8ClampedArray:case Float32Array:case Float64Array:return Nn(e,r,t);case DataView:return vn(e,r,t);case Map:return An(e,r,t);case Set:return Rn(e,r,t);default:break}if(n===Promise||t instanceof Promise)return In(e,r,t);let s=e.base.features;if(s&16)switch(n){case BigInt64Array:case BigUint64Array:return Cn(e,r,t);default:break}if(s&1&&typeof AggregateError!="undefined"&&(n===AggregateError||t instanceof AggregateError))return bn(e,r,t);if(t instanceof Error)return Rt(e,r,t);if(A in t||b in t)return Pr(e,r,t,!!n);throw new E(t)}async function Tn(e,r){let t=U(e.base,r);if(t.type!==0)return t.value;let n=await It(e,t.value,r);if(n)return n;throw new E(r)}async function N(e,r){switch(typeof r){case"boolean":return r?Z:J;case"undefined":return Ne;case"string":return $(r);case"number":return Ee(r);case"bigint":return Pe(r);case"object":{if(r){let t=U(e.base,r);return t.type===0?await xn(e,t.value,r):t.value}return Ce}case"symbol":return I(e.base,r);case"function":return Tn(e,r);default:throw new E(r)}}async function re(e,r){try{return await N(e,r)}catch(t){throw t instanceof h?t:new h(t)}}var te=(t=>(t[t.Vanilla=1]="Vanilla",t[t.Cross=2]="Cross",t))(te||{});function _s(e){return e}function Et(e,r){for(let t=0,n=r.length;t<n;t++){let a=r[t];e.has(a)||(e.add(a),a.extends&&Et(e,a.extends))}}function v(e){if(e){let r=new Set;return Et(r,e),[...r]}}function Pt(e){switch(e){case"Int8Array":return Int8Array;case"Int16Array":return Int16Array;case"Int32Array":return Int32Array;case"Uint8Array":return Uint8Array;case"Uint16Array":return Uint16Array;case"Uint32Array":return Uint32Array;case"Uint8ClampedArray":return Uint8ClampedArray;case"Float32Array":return Float32Array;case"Float64Array":return Float64Array;case"BigInt64Array":return BigInt64Array;case"BigUint64Array":return BigUint64Array;default:throw new We(e)}}function xt(e,r){switch(r){case 3:return Object.freeze(e);case 1:return Object.preventExtensions(e);case 2:return Object.seal(e);default:return e}}function Tt(e,r){return{mode:e,plugins:r.plugins,refs:r.refs||new Map}}function Ot(e){return{mode:1,base:Tt(1,e),child:void 0,state:{marked:new Set(e.markedRefs)}}}function ht(e){return{mode:2,base:Tt(2,e),child:void 0}}var Or=class{constructor(r){this._p=r}deserialize(r){return m(this._p,r)}};function On(e,r,t){return e.state.marked.has(r)&&e.base.refs.set(r,t),t}function hn(e,r,t){return e.base.refs.has(r)||e.base.refs.set(r,t),t}function C(e,r,t){return e.mode===1?On(e,r,t):hn(e,r,t)}function wn(e,r){return C(e,r.i,nt(z(r.s)))}function zn(e,r){let t=r.l,n=C(e,r.i,new Array(t)),a;for(let s=0;s<t;s++)a=r.a[s],a&&(n[s]=m(e,a));return xt(n,r.o),n}function wt(e,r,t){let n=r.s;if(n){let a=r.k,s=r.v;for(let i=0,l;i<n;i++)l=a[i],typeof l=="string"?t[z(l)]=m(e,s[i]):t[m(e,l)]=m(e,s[i])}return t}function kn(e,r){let t=C(e,r.i,r.t===10?{}:Object.create(null));return wt(e,r.p,t),xt(t,r.o),t}function _n(e,r){return C(e,r.i,new Date(r.s))}function Dn(e,r){return C(e,r.i,new RegExp(z(r.c),r.m))}function Fn(e,r){let t=C(e,r.i,new Set),n=r.a;for(let a=0,s=r.l;a<s;a++)t.add(m(e,n[a]));return t}function Bn(e,r){let t=C(e,r.i,new Map),n=r.e.k,a=r.e.v;for(let s=0,i=r.e.s;s<i;s++)t.set(m(e,n[s]),m(e,a[s]));return t}function Vn(e,r){return C(e,r.i,Rr(r.l,z(r.s)))}function Mn(e,r){let t=Pt(r.c),n=m(e,r.f);return C(e,r.i,new t(n,r.b,r.l))}function jn(e,r){let t=m(e,r.f);return C(e,r.i,new DataView(t,r.b,r.l))}function zt(e,r,t){if(r.p){let n=wt(e,r.p,{});Object.assign(t,n)}return t}function Un(e,r){let t=C(e,r.i,new AggregateError([],z(r.m)));return zt(e,r,t)}function Ln(e,r){let t=qr[r.s],n=C(e,r.i,new t(z(r.m)));return zt(e,r,n)}function Yn(e,r){let t=X(),n=C(e,r.i,t.p),a=m(e,r.f);return r.s?t.s(a):t.f(a),n}function Wn(e,r){return C(e,r.i,Object(m(e,r.f)))}function Kn(e,r){let t=e.base.plugins;if(t){let n=z(r.c);for(let a=0,s=t.length;a<s;a++){let i=t[a];if(i.tag===n)return e.child==null&&(e.child=new Or(e)),C(e,r.i,i.deserialize(r.s,e.child,{id:r.i}))}}throw new q(r.c)}function Gn(e,r){return C(e,r.i,C(e,r.s,X()).p)}function Zn(e,r){let t=e.base.refs.get(r.i);if(t){t.s(m(e,r.a[1]));return}throw new D("Promise")}function Jn(e,r){let t=e.base.refs.get(r.i);if(t){t.f(m(e,r.a[1]));return}throw new D("Promise")}function Hn(e,r){m(e,r.a[0]);let t=m(e,r.a[1]);return vt(t)}function $n(e,r){m(e,r.a[0]);let t=m(e,r.a[1]);return Ct(t)}function qn(e,r){let t=C(e,r.i,Q()),n=r.a.length;if(n)for(let a=0;a<n;a++)m(e,r.a[a]);return t}function Xn(e,r){let t=e.base.refs.get(r.i);if(t){t.next(m(e,r.f));return}throw new D("Stream")}function Qn(e,r){let t=e.base.refs.get(r.i);if(t){t.throw(m(e,r.f));return}throw new D("Stream")}function eo(e,r){let t=e.base.refs.get(r.i);if(t){t.return(m(e,r.f));return}throw new D("Stream")}function ro(e,r){m(e,r.f)}function to(e,r){m(e,r.a[1])}function m(e,r){switch(r.t){case 2:return $r[r.s];case 0:return r.s;case 1:return z(r.s);case 3:return BigInt(r.s);case 4:return e.base.refs.get(r.i);case 18:return wn(e,r);case 9:return zn(e,r);case 10:case 11:return kn(e,r);case 5:return _n(e,r);case 6:return Dn(e,r);case 7:return Fn(e,r);case 8:return Bn(e,r);case 19:return Vn(e,r);case 16:case 15:return Mn(e,r);case 20:return jn(e,r);case 14:return Un(e,r);case 13:return Ln(e,r);case 12:return Yn(e,r);case 17:return Jr[r.s];case 21:return Wn(e,r);case 25:return Kn(e,r);case 22:return Gn(e,r);case 23:return Zn(e,r);case 24:return Jn(e,r);case 28:return Hn(e,r);case 30:return $n(e,r);case 31:return qn(e,r);case 32:return Xn(e,r);case 33:return Qn(e,r);case 34:return eo(e,r);case 27:return ro(e,r);case 29:return to(e,r);default:throw new k(r)}}function er(e,r){try{return m(e,r)}catch(t){throw new Ye(t)}}var no=()=>T,oo=no.toString(),kt=/=>/.test(oo);function rr(e,r){return kt?(e.length===1?e[0]:"("+e.join(",")+")")+"=>"+(r.startsWith("{")?"("+r+")":r):"function("+e.join(",")+"){return "+r+"}"}function _t(e,r){return kt?(e.length===1?e[0]:"("+e.join(",")+")")+"=>{"+r+"}":"function("+e.join(",")+"){"+r+"}"}var Bt="hjkmoquxzABCDEFGHIJKLNPQRTUVWXYZ$_",Dt=Bt.length,Vt="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789$_",Ft=Vt.length;function hr(e){let r=e%Dt,t=Bt[r];for(e=(e-r)/Dt;e>0;)r=e%Ft,t+=Vt[r],e=(e-r)/Ft;return t}var ao=/^[$A-Z_][0-9A-Z_$]*$/i;function wr(e){let r=e[0];return(r==="$"||r==="_"||r>="A"&&r<="Z"||r>="a"&&r<="z")&&ao.test(e)}function pe(e){switch(e.t){case 0:return e.s+"="+e.v;case 2:return e.s+".set("+e.k+","+e.v+")";case 1:return e.s+".add("+e.v+")";case 3:return e.s+".delete("+e.k+")"}}function so(e){let r=[],t=e[0];for(let n=1,a=e.length,s,i=t;n<a;n++)s=e[n],s.t===0&&s.v===i.v?t={t:0,s:s.s,k:o,v:pe(t)}:s.t===2&&s.s===i.s?t={t:2,s:pe(t),k:s.k,v:s.v}:s.t===1&&s.s===i.s?t={t:1,s:pe(t),k:o,v:s.v}:s.t===3&&s.s===i.s?t={t:3,s:pe(t),k:s.k,v:o}:(r.push(t),t=s),i=s;return r.push(t),r}function Wt(e){if(e.length){let r="",t=so(e);for(let n=0,a=t.length;n<a;n++)r+=pe(t[n])+",";return r}return o}var io="Object.create(null)",lo="new Set",uo="new Map",co="Promise.resolve",fo="Promise.reject",So={3:"Object.freeze",2:"Object.seal",1:"Object.preventExtensions",0:o};function Kt(e,r){return{mode:e,plugins:r.plugins,features:r.features,marked:new Set(r.markedRefs),stack:[],flags:[],assignments:[]}}function po(){return{valid:new Map,vars:[]}}function tr(e){return{mode:1,base:Kt(1,e),state:po(),child:void 0}}function nr(e){return{mode:2,base:Kt(2,e),state:e,child:void 0}}var zr=class{constructor(r){this._p=r}serialize(r){return f(this._p,r)}};function mo(e,r){let t=e.valid.get(r);t==null&&(t=e.valid.size,e.valid.set(r,t));let n=e.vars[t];return n==null&&(n=hr(t),e.vars[t]=n),n}function go(e){return ie+"["+e+"]"}function p(e,r){return e.mode===1?mo(e.state,r):go(r)}function O(e,r){e.marked.add(r)}function kr(e,r){return e.marked.has(r)}function Dr(e,r,t){r!==0&&(O(e.base,t),e.base.flags.push({type:r,value:p(e,t)}))}function yo(e){let r="";for(let t=0,n=e.flags,a=n.length;t<a;t++){let s=n[t];r+=So[s.type]+"("+s.value+"),"}return r}function Gt(e){let r=Wt(e.assignments),t=yo(e);return r?t?r+t:r:t}function Zt(e,r,t){e.assignments.push({t:0,s:r,k:o,v:t})}function No(e,r,t){e.base.assignments.push({t:1,s:p(e,r),k:o,v:t})}function Se(e,r,t,n){e.base.assignments.push({t:2,s:p(e,r),k:t,v:n})}function Mt(e,r,t){e.base.assignments.push({t:3,s:p(e,r),k:t,v:o})}function de(e,r,t,n){Zt(e.base,p(e,r)+"["+t+"]",n)}function _r(e,r,t,n){Zt(e.base,p(e,r)+"."+t,n)}function F(e,r){return r.t===4&&e.stack.includes(r.i)}function ne(e,r,t){return e.mode===1&&!kr(e.base,r)?t:p(e,r)+"="+t}function Co(e){return B+'.get("'+e.s+'")'}function jt(e,r,t,n){return t?F(e.base,t)?(O(e.base,r),de(e,r,n,p(e,t.i)),""):f(e,t):""}function vo(e,r){let t=r.i;if(r.l){e.base.stack.push(t);let n=r.a,a=jt(e,t,n[0],0),s=a==="";for(let i=1,l=r.l,u;i<l;i++)u=jt(e,t,n[i],i),a+=","+u,s=u==="";return e.base.stack.pop(),Dr(e,r.o,r.i),"["+a+(s?",]":"]")}return"[]"}function Ut(e,r,t,n){if(typeof t=="string"){let a=Number(t),s=a>=0&&a.toString()===t||wr(t);if(F(e.base,n)){let i=p(e,n.i);return O(e.base,r.i),s&&a!==a?_r(e,r.i,t,i):de(e,r.i,s?t:'"'+t+'"',i),""}return(s?t:'"'+t+'"')+":"+f(e,n)}return"["+f(e,t)+"]:"+f(e,n)}function Jt(e,r,t){let n=t.s;if(n){let a=t.k,s=t.v;e.base.stack.push(r.i);let i=Ut(e,r,a[0],s[0]);for(let l=1,u=i;l<n;l++)u=Ut(e,r,a[l],s[l]),i+=(u&&i&&",")+u;return e.base.stack.pop(),"{"+i+"}"}return"{}"}function bo(e,r){return Dr(e,r.o,r.i),Jt(e,r,r.p)}function Ao(e,r,t,n){let a=Jt(e,r,t);return a!=="{}"?"Object.assign("+n+","+a+")":n}function Ro(e,r,t,n,a){let s=e.base,i=f(e,a),l=Number(n),u=l>=0&&l.toString()===n||wr(n);if(F(s,a))u&&l!==l?_r(e,r.i,n,i):de(e,r.i,u?n:'"'+n+'"',i);else{let g=s.assignments;s.assignments=t,u&&l!==l?_r(e,r.i,n,i):de(e,r.i,u?n:'"'+n+'"',i),s.assignments=g}}function Io(e,r,t,n,a){if(typeof n=="string")Ro(e,r,t,n,a);else{let s=e.base,i=s.stack;s.stack=[];let l=f(e,a);s.stack=i;let u=s.assignments;s.assignments=t,de(e,r.i,f(e,n),l),s.assignments=u}}function Eo(e,r,t){let n=t.s;if(n){let a=[],s=t.k,i=t.v;e.base.stack.push(r.i);for(let l=0;l<n;l++)Io(e,r,a,s[l],i[l]);return e.base.stack.pop(),Wt(a)}return o}function Fr(e,r,t){if(r.p){let n=e.base;if(n.features&8)t=Ao(e,r,r.p,t);else{O(n,r.i);let a=Eo(e,r,r.p);if(a)return"("+ne(e,r.i,t)+","+a+p(e,r.i)+")"}}return t}function Po(e,r){return Dr(e,r.o,r.i),Fr(e,r,io)}function xo(e){return'new Date("'+e.s+'")'}function To(e){return"/"+e.c+"/"+e.m}function Lt(e,r,t){let n=e.base;return F(n,t)?(O(n,r),No(e,r,p(e,t.i)),""):f(e,t)}function Oo(e,r){let t=lo,n=r.l,a=r.i;if(n){let s=r.a;e.base.stack.push(a);let i=Lt(e,a,s[0]);for(let l=1,u=i;l<n;l++)u=Lt(e,a,s[l]),i+=(u&&i&&",")+u;e.base.stack.pop(),i&&(t+="(["+i+"])")}return t}function Yt(e,r,t,n,a){let s=e.base;if(F(s,t)){let i=p(e,t.i);if(O(s,r),F(s,n)){let u=p(e,n.i);return Se(e,r,i,u),""}if(n.t!==4&&n.i!=null&&kr(s,n.i)){let u="("+f(e,n)+",["+a+","+a+"])";return Se(e,r,i,p(e,n.i)),Mt(e,r,a),u}let l=s.stack;return s.stack=[],Se(e,r,i,f(e,n)),s.stack=l,""}if(F(s,n)){let i=p(e,n.i);if(O(s,r),t.t!==4&&t.i!=null&&kr(s,t.i)){let u="("+f(e,t)+",["+a+","+a+"])";return Se(e,r,p(e,t.i),i),Mt(e,r,a),u}let l=s.stack;return s.stack=[],Se(e,r,f(e,t),i),s.stack=l,""}return"["+f(e,t)+","+f(e,n)+"]"}function ho(e,r){let t=uo,n=r.e.s,a=r.i,s=r.f,i=p(e,s.i),l=e.base;if(n){let u=r.e.k,g=r.e.v;l.stack.push(a);let S=Yt(e,a,u[0],g[0],i);for(let d=1,W=S;d<n;d++)W=Yt(e,a,u[d],g[d],i),S+=(W&&S&&",")+W;l.stack.pop(),S&&(t+="(["+S+"])")}return s.t===26&&(O(l,s.i),t="("+f(e,s)+","+t+")"),t}function wo(e,r){return L(e,r.f)+"("+r.l+',"'+r.s+'")'}function zo(e,r){return"new "+r.c+"("+f(e,r.f)+","+r.b+","+r.l+")"}function ko(e,r){return"new DataView("+f(e,r.f)+","+r.b+","+r.l+")"}function _o(e,r){let t=r.i;e.base.stack.push(t);let n=Fr(e,r,'new AggregateError([],"'+r.m+'")');return e.base.stack.pop(),n}function Do(e,r){return Fr(e,r,"new "+ye[r.s]+'("'+r.m+'")')}function Fo(e,r){let t,n=r.f,a=r.i,s=r.s?co:fo,i=e.base;if(F(i,n)){let l=p(e,n.i);t=s+(r.s?"().then("+rr([],l)+")":"().catch("+_t([],"throw "+l)+")")}else{i.stack.push(a);let l=f(e,n);i.stack.pop(),t=s+"("+l+")"}return t}function Bo(e,r){return"Object("+f(e,r.f)+")"}function L(e,r){let t=f(e,r);return r.t===4?t:"("+t+")"}function Vo(e,r){if(e.mode===1)throw new k(r);return"("+ne(e,r.s,L(e,r.f)+"()")+").p"}function Mo(e,r){if(e.mode===1)throw new k(r);return L(e,r.a[0])+"("+p(e,r.i)+","+f(e,r.a[1])+")"}function jo(e,r){if(e.mode===1)throw new k(r);return L(e,r.a[0])+"("+p(e,r.i)+","+f(e,r.a[1])+")"}function Uo(e,r){let t=e.base.plugins;if(t)for(let n=0,a=t.length;n<a;n++){let s=t[n];if(s.tag===r.c)return e.child==null&&(e.child=new zr(e)),s.serialize(r.s,e.child,{id:r.i})}throw new q(r.c)}function Lo(e,r){let t="",n=!1;return r.f.t!==4&&(O(e.base,r.f.i),t="("+f(e,r.f)+",",n=!0),t+=ne(e,r.i,"("+St+")("+p(e,r.f.i)+")"),n&&(t+=")"),t}function Yo(e,r){return L(e,r.a[0])+"("+f(e,r.a[1])+")"}function Wo(e,r){let t=r.a[0],n=r.a[1],a=e.base,s="";t.t!==4&&(O(a,t.i),s+="("+f(e,t)),n.t!==4&&(O(a,n.i),s+=(s?",":"(")+f(e,n)),s&&(s+=",");let i=ne(e,r.i,"("+pt+")("+p(e,n.i)+","+p(e,t.i)+")");return s?s+i+")":i}function Ko(e,r){return L(e,r.a[0])+"("+f(e,r.a[1])+")"}function Go(e,r){let t=ne(e,r.i,L(e,r.f)+"()"),n=r.a.length;if(n){let a=f(e,r.a[0]);for(let s=1;s<n;s++)a+=","+f(e,r.a[s]);return"("+t+","+a+","+p(e,r.i)+")"}return t}function Zo(e,r){return p(e,r.i)+".next("+f(e,r.f)+")"}function Jo(e,r){return p(e,r.i)+".throw("+f(e,r.f)+")"}function Ho(e,r){return p(e,r.i)+".return("+f(e,r.f)+")"}function $o(e,r){switch(r.t){case 17:return Zr[r.s];case 18:return Co(r);case 9:return vo(e,r);case 10:return bo(e,r);case 11:return Po(e,r);case 5:return xo(r);case 6:return To(r);case 7:return Oo(e,r);case 8:return ho(e,r);case 19:return wo(e,r);case 16:case 15:return zo(e,r);case 20:return ko(e,r);case 14:return _o(e,r);case 13:return Do(e,r);case 12:return Fo(e,r);case 21:return Bo(e,r);case 22:return Vo(e,r);case 25:return Uo(e,r);case 26:return Nt[r.s];default:throw new k(r)}}function f(e,r){switch(r.t){case 2:return Hr[r.s];case 0:return""+r.s;case 1:return'"'+r.s+'"';case 3:return r.s+"n";case 4:return p(e,r.i);case 23:return Mo(e,r);case 24:return jo(e,r);case 27:return Lo(e,r);case 28:return Yo(e,r);case 29:return Wo(e,r);case 30:return Ko(e,r);case 31:return Go(e,r);case 32:return Zo(e,r);case 33:return Jo(e,r);case 34:return Ho(e,r);default:return ne(e,r.i,$o(e,r))}}function or(e,r){let t=f(e,r);if(r.i!=null&&e.state.vars.length){let n=Gt(e.base),a=t;if(n){let s=p(e,r.i);a=t+","+n+s,t.startsWith(s+"=")||(a=s+"="+a),a="("+a+")"}return"("+rr(e.state.vars,a)+")()"}return r.t===10?"("+t+")":t}function ar(e,r){let t=f(e,r),n=r.i;if(n==null)return t;let a=Gt(e.base),s=p(e,n),i=e.state.scopeId,l=i==null?"":ie,u=a?"("+t+","+a+s+")":t;if(l==="")return r.t===10&&!a?"("+u+")":u;let g=i==null?"()":"("+ie+'["'+y(i)+'"])';return"("+rr([l],u)+")"+g}function ae(e,r){return{type:1,base:ce(e,r),child:void 0}}var Vr=class{constructor(r){this._p=r}parse(r){return R(this._p,r)}},Mr=class{constructor(r){this._p=r}parse(r){return R(this._p,r)}parseWithError(r){return Y(this._p,r)}isAlive(){return this._p.state.alive}pushPendingState(){Wr(this._p)}popPendingState(){me(this._p)}onParse(r){oe(this._p,r)}onError(r){Lr(this._p,r)}};function qo(e){return{alive:!0,pending:0,initial:!0,buffer:[],onParse:e.onParse,onError:e.onError,onDone:e.onDone}}function jr(e){return{type:2,base:ce(2,e),child:void 0,state:qo(e)}}function Xo(e,r){let t=[];for(let n=0,a=r.length;n<a;n++)n in r&&(t[n]=R(e,r[n]));return t}function Qo(e,r,t){return Oe(r,t,Xo(e,t))}function Ur(e,r){let t=Object.entries(r),n=[],a=[];for(let s=0,i=t.length;s<i;s++)n.push(y(t[s][0])),a.push(R(e,t[s][1]));return A in r&&(n.push(I(e.base,A)),a.push(Be(He(e.base),R(e,Ze(r))))),b in r&&(n.push(I(e.base,b)),a.push(Ve($e(e.base),R(e,e.type===1?Q():Ge(r))))),x in r&&(n.push(I(e.base,x)),a.push($(r[x]))),P in r&&(n.push(I(e.base,P)),a.push(r[P]?Z:J)),{k:n,v:a,s:n.length}}function Br(e,r,t,n){return qe(r,t,n,Ur(e,t))}function ea(e,r,t){return he(r,R(e,t.valueOf()))}function ra(e,r,t){return we(r,t,R(e,t.buffer))}function ta(e,r,t){return ze(r,t,R(e,t.buffer))}function na(e,r,t){return ke(r,t,R(e,t.buffer))}function Ht(e,r,t){let n=H(t,e.base.features);return _e(r,t,n?Ur(e,n):o)}function oa(e,r,t){let n=H(t,e.base.features);return De(r,t,n?Ur(e,n):o)}function aa(e,r,t){let n=[],a=[];for(let[s,i]of t.entries())n.push(R(e,s)),a.push(R(e,i));return Xe(e.base,r,n,a,t.size)}function sa(e,r,t){let n=[];for(let a of t.keys())n.push(R(e,a));return Fe(r,t.size,n)}function ia(e,r,t){let n=Me(r,w(e.base,4),[]);return e.type===1||(Wr(e),t.on({next:a=>{if(e.state.alive){let s=Y(e,a);s&&oe(e,je(r,s))}},throw:a=>{if(e.state.alive){let s=Y(e,a);s&&oe(e,Ue(r,s))}me(e)},return:a=>{if(e.state.alive){let s=Y(e,a);s&&oe(e,Le(r,s))}me(e)}})),n}function la(e,r){if(this.state.alive){let t=Y(this,r);t&&oe(this,c(23,e,o,o,o,o,o,o,[w(this.base,2),t],o,o,o)),me(this)}}function ua(e,r){if(this.state.alive){let t=Y(this,r);t&&oe(this,c(24,e,o,o,o,o,o,o,[w(this.base,3),t],o,o,o))}me(this)}function ca(e,r,t){let n=Er(e.base,{});return e.type===2&&(Wr(e),t.then(la.bind(e,n),ua.bind(e,n))),At(e.base,r,n)}function fa(e,r,t,n){for(let a=0,s=n.length;a<s;a++){let i=n[a];if(i.parse.sync&&i.test(t))return e.child==null&&(e.child=new Vr(e)),le(r,i.tag,i.parse.sync(t,e.child,{id:r}))}}function Sa(e,r,t,n){for(let a=0,s=n.length;a<s;a++){let i=n[a];if(i.parse.stream&&i.test(t))return e.child==null&&(e.child=new Mr(e)),le(r,i.tag,i.parse.stream(t,e.child,{id:r}))}}function $t(e,r,t){let n=e.base.plugins;if(n)return e.type===1?fa(e,r,t,n):Sa(e,r,t,n)}function pa(e,r,t,n){switch(n){case Object:return Br(e,r,t,!1);case void 0:return Br(e,r,t,!0);case Date:return xe(r,t);case RegExp:return Te(r,t);case Error:case EvalError:case RangeError:case ReferenceError:case SyntaxError:case TypeError:case URIError:return Ht(e,r,t);case Number:case Boolean:case String:case BigInt:return ea(e,r,t);case ArrayBuffer:return Qe(e.base,r,t);case Int8Array:case Int16Array:case Int32Array:case Uint8Array:case Uint16Array:case Uint32Array:case Uint8ClampedArray:case Float32Array:case Float64Array:return ra(e,r,t);case DataView:return na(e,r,t);case Map:return aa(e,r,t);case Set:return sa(e,r,t);default:break}if(n===Promise||t instanceof Promise)return ca(e,r,t);let a=e.base.features;if(a&16)switch(n){case BigInt64Array:case BigUint64Array:return ta(e,r,t);default:break}if(a&1&&typeof AggregateError!="undefined"&&(n===AggregateError||t instanceof AggregateError))return oa(e,r,t);if(t instanceof Error)return Ht(e,r,t);if(A in t||b in t)return Br(e,r,t,!!n);throw new E(t)}function da(e,r,t){if(Array.isArray(t))return Qo(e,r,t);if(Ke(t))return ia(e,r,t);let n=t.constructor;if(n===j)return R(e,t.replacement);let a=$t(e,r,t);return a||pa(e,r,t,n)}function ma(e,r){let t=U(e.base,r);if(t.type!==0)return t.value;let n=$t(e,t.value,r);if(n)return n;throw new E(r)}function R(e,r){switch(typeof r){case"boolean":return r?Z:J;case"undefined":return Ne;case"string":return $(r);case"number":return Ee(r);case"bigint":return Pe(r);case"object":{if(r){let t=U(e.base,r);return t.type===0?da(e,t.value,r):t.value}return Ce}case"symbol":return I(e.base,r);case"function":return ma(e,r);default:throw new E(r)}}function se(e,r){try{return R(e,r)}catch(t){throw t instanceof h?t:new h(t)}}function oe(e,r){e.state.initial?e.state.buffer.push(r):Yr(e,r,!1)}function Lr(e,r){if(e.state.onError)e.state.onError(r);else throw r instanceof h?r:new h(r)}function qt(e){e.state.onDone&&e.state.onDone()}function Yr(e,r,t){try{e.state.onParse(r,t)}catch(n){Lr(e,n)}}function Wr(e){e.state.pending++}function me(e){--e.state.pending<=0&&qt(e)}function Y(e,r){try{return R(e,r)}catch(t){return Lr(e,t),o}}function Kr(e,r){let t=Y(e,r);t&&(Yr(e,t,!0),e.state.initial=!1,ga(e,e.state),e.state.pending<=0&&sr(e))}function ga(e,r){for(let t=0,n=r.buffer.length;t<n;t++)Yr(e,r.buffer[t],!1)}function sr(e){e.state.alive&&(qt(e),e.state.alive=!1)}function hi(e,r={}){let t=v(r.plugins),n=ae(2,{plugins:t,disabledFeatures:r.disabledFeatures,refs:r.refs}),a=se(n,e),s=nr({plugins:t,features:n.base.features,scopeId:r.scopeId,markedRefs:n.base.marked});return ar(s,a)}async function wi(e,r={}){let t=v(r.plugins),n=ee(2,{plugins:t,disabledFeatures:r.disabledFeatures,refs:r.refs}),a=await re(n,e),s=nr({plugins:t,features:n.base.features,scopeId:r.scopeId,markedRefs:n.base.marked});return ar(s,a)}function zi(e,r={}){let t=v(r.plugins),n=ae(2,{plugins:t,disabledFeatures:r.disabledFeatures,refs:r.refs});return se(n,e)}async function ki(e,r={}){let t=v(r.plugins),n=ee(2,{plugins:t,disabledFeatures:r.disabledFeatures,refs:r.refs});return await re(n,e)}function Xt(e,r){let t=v(r.plugins),n=jr({plugins:t,refs:r.refs,disabledFeatures:r.disabledFeatures,onParse(a,s){let i=nr({plugins:t,features:n.base.features,scopeId:r.scopeId,markedRefs:n.base.marked}),l;try{l=ar(i,a)}catch(u){r.onError&&r.onError(u);return}r.onSerialize(l,s)},onError:r.onError,onDone:r.onDone});return Kr(n,e),sr.bind(null,n)}function _i(e,r){let t=v(r.plugins),n=jr({plugins:t,refs:r.refs,disabledFeatures:r.disabledFeatures,onParse:r.onParse,onError:r.onError,onDone:r.onDone});return Kr(n,e),sr.bind(null,n)}function Di(e,r){let t=v(r.plugins),n=ht({plugins:t,refs:r.refs});return er(n,e)}var ir=class{constructor(r){this.options=r;this.alive=!0;this.flushed=!1;this.done=!1;this.pending=0;this.cleanups=[];this.refs=new Map;this.keys=new Set;this.ids=0;this.plugins=v(r.plugins)}write(r,t){this.alive&&!this.flushed&&(this.pending++,this.keys.add(r),this.cleanups.push(Xt(t,{plugins:this.plugins,scopeId:this.options.scopeId,refs:this.refs,disabledFeatures:this.options.disabledFeatures,onError:this.options.onError,onSerialize:(n,a)=>{this.alive&&this.options.onData(a?this.options.globalIdentifier+'["'+y(r)+'"]='+n:n)},onDone:()=>{this.alive&&(this.pending--,this.pending<=0&&this.flushed&&!this.done&&this.options.onDone&&(this.options.onDone(),this.done=!0))}})))}getNextID(){for(;this.keys.has(""+this.ids);)this.ids++;return""+this.ids}push(r){let t=this.getNextID();return this.write(t,r),t}flush(){this.alive&&(this.flushed=!0,this.pending<=0&&!this.done&&this.options.onDone&&(this.options.onDone(),this.done=!0))}close(){if(this.alive){for(let r=0,t=this.cleanups.length;r<t;r++)this.cleanups[r]();!this.done&&this.options.onDone&&(this.options.onDone(),this.done=!0),this.alive=!1}}};function Gi(e,r={}){let t=v(r.plugins),n=ae(1,{plugins:t,disabledFeatures:r.disabledFeatures}),a=se(n,e),s=tr({plugins:t,features:n.base.features,markedRefs:n.base.marked});return or(s,a)}async function Zi(e,r={}){let t=v(r.plugins),n=ee(1,{plugins:t,disabledFeatures:r.disabledFeatures}),a=await re(n,e),s=tr({plugins:t,features:n.base.features,markedRefs:n.base.marked});return or(s,a)}function Ji(e){return(0,eval)(e)}function Hi(e,r={}){let t=v(r.plugins),n=ae(1,{plugins:t,disabledFeatures:r.disabledFeatures});return{t:se(n,e),f:n.base.features,m:Array.from(n.base.marked)}}async function $i(e,r={}){let t=v(r.plugins),n=ee(1,{plugins:t,disabledFeatures:r.disabledFeatures});return{t:await re(n,e),f:n.base.features,m:Array.from(n.base.marked)}}function qi(e,r={}){let t=v(r.plugins),n=tr({plugins:t,features:e.f,markedRefs:e.m});return or(n,e.t)}function Xi(e,r={}){let t=v(r.plugins),n=Ot({plugins:t,markedRefs:e.m});return er(n,e.t)}export{K as Feature,j as OpaqueReference,ir as Serializer,Ye as SerovalDeserializationError,ue as SerovalError,D as SerovalMissingInstanceError,q as SerovalMissingPluginError,be as SerovalMissingReferenceError,Ae as SerovalMissingReferenceForIdError,te as SerovalMode,h as SerovalParserError,Cr as SerovalSerializationError,We as SerovalUnknownTypedArrayError,k as SerovalUnsupportedNodeError,E as SerovalUnsupportedTypeError,qi as compileJSON,_s as createPlugin,tn as createReference,Q as createStream,hi as crossSerialize,wi as crossSerializeAsync,Xt as crossSerializeStream,Ji as deserialize,Di as fromCrossJSON,Xi as fromJSON,rn as getCrossReferenceHeader,v as resolvePlugins,Gi as serialize,Zi as serializeAsync,zi as toCrossJSON,ki as toCrossJSONAsync,_i as toCrossJSONStream,Hi as toJSON,$i as toJSONAsync}; |
| import type { WellKnownSymbols } from './constants'; | ||
| import type { SerovalAggregateErrorNode, SerovalArrayBufferNode, SerovalArrayNode, SerovalAsyncIteratorFactoryInstanceNode, SerovalBigIntNode, SerovalBigIntTypedArrayNode, SerovalBoxedNode, SerovalConstantNode, SerovalDataViewNode, SerovalDateNode, SerovalErrorNode, SerovalIndexedValueNode, SerovalIteratorFactoryInstanceNode, SerovalNode, SerovalNodeWithID, SerovalNumberNode, SerovalObjectRecordNode, SerovalPluginNode, SerovalReferenceNode, SerovalRegExpNode, SerovalSetNode, SerovalStreamConstructorNode, SerovalStreamNextNode, SerovalStreamReturnNode, SerovalStreamThrowNode, SerovalStringNode, SerovalTypedArrayNode, SerovalWKSymbolNode } from './types'; | ||
| import type { SerovalAggregateErrorNode, SerovalArrayNode, SerovalAsyncIteratorFactoryInstanceNode, SerovalBigIntNode, SerovalBigIntTypedArrayNode, SerovalBoxedNode, SerovalConstantNode, SerovalDataViewNode, SerovalDateNode, SerovalErrorNode, SerovalIndexedValueNode, SerovalIteratorFactoryInstanceNode, SerovalNode, SerovalNodeWithID, SerovalNumberNode, SerovalObjectRecordNode, SerovalPluginNode, SerovalReferenceNode, SerovalRegExpNode, SerovalSetNode, SerovalStreamConstructorNode, SerovalStreamNextNode, SerovalStreamReturnNode, SerovalStreamThrowNode, SerovalStringNode, SerovalTypedArrayNode, SerovalWKSymbolNode } from './types'; | ||
| import type { BigIntTypedArrayValue, TypedArrayValue } from './utils/typed-array'; | ||
@@ -10,3 +10,2 @@ export declare function createNumberNode(value: number): SerovalConstantNode | SerovalNumberNode; | ||
| export declare function createRegExpNode(id: number, current: RegExp): SerovalRegExpNode; | ||
| export declare function createArrayBufferNode(id: number, current: ArrayBuffer): SerovalArrayBufferNode; | ||
| export declare function createWKSymbolNode(id: number, current: WellKnownSymbols): SerovalWKSymbolNode; | ||
@@ -13,0 +12,0 @@ export declare function createReferenceNode<T>(id: number, ref: T): SerovalReferenceNode; |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"base-primitives.d.ts","sourceRoot":"","sources":["../../../src/core/base-primitives.ts"],"names":[],"mappings":"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"} | ||
| {"version":3,"file":"base-primitives.d.ts","sourceRoot":"","sources":["../../../src/core/base-primitives.ts"],"names":[],"mappings":"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"} |
@@ -6,3 +6,3 @@ /** | ||
| */ | ||
| export declare const enum Feature { | ||
| export declare enum Feature { | ||
| AggregateError = 1, | ||
@@ -9,0 +9,0 @@ ArrowFunction = 2, |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"compat.d.ts","sourceRoot":"","sources":["../../../src/core/compat.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,0BAAkB,OAAO;IACvB,cAAc,IAAO;IACrB,aAAa,IAAO;IACpB,mBAAmB,IAAO;IAC1B,YAAY,IAAO;IACnB,gBAAgB,KAAO;CACxB;AAED,eAAO,MAAM,WAAW,QAKE,CAAC"} | ||
| {"version":3,"file":"compat.d.ts","sourceRoot":"","sources":["../../../src/core/compat.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,oBAAY,OAAO;IACjB,cAAc,IAAO;IAErB,aAAa,IAAO;IACpB,mBAAmB,IAAO;IAC1B,YAAY,IAAO;IACnB,gBAAgB,KAAO;CACxB;AAED,eAAO,MAAM,WAAW,QAKE,CAAC"} |
@@ -0,1 +1,2 @@ | ||
| import { SYM_ASYNC_ITERATOR, SYM_HAS_INSTANCE, SYM_IS_CONCAT_SPREADABLE, SYM_ITERATOR, SYM_MATCH, SYM_MATCH_ALL, SYM_REPLACE, SYM_SEARCH, SYM_SPECIES, SYM_SPLIT, SYM_TO_PRIMITIVE, SYM_TO_STRING_TAG, SYM_UNSCOPABLES } from "./symbols"; | ||
| export declare const enum SerovalConstant { | ||
@@ -2,0 +3,0 @@ Null = 0, |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../src/core/constants.ts"],"names":[],"mappings":"AAAA,0BAAkB,eAAe;IAC/B,IAAI,IAAI;IACR,SAAS,IAAI;IACb,IAAI,IAAI;IACR,KAAK,IAAI;IACT,OAAO,IAAI;IACX,GAAG,IAAI;IACP,MAAM,IAAI;IACV,GAAG,IAAI;CACR;AAED,0BAAkB,eAAe;IAC/B,MAAM,IAAI;IACV,MAAM,IAAI;IACV,QAAQ,IAAI;IACZ,MAAM,IAAI;IACV,YAAY,IAAI;IAChB,IAAI,IAAI;IACR,MAAM,IAAI;IACV,GAAG,IAAI;IACP,GAAG,IAAI;IACP,KAAK,IAAI;IACT,MAAM,KAAK;IACX,eAAe,KAAK;IACpB,OAAO,KAAK;IACZ,KAAK,KAAK;IACV,cAAc,KAAK;IACnB,UAAU,KAAK;IACf,gBAAgB,KAAK;IACrB,QAAQ,KAAK;IACb,SAAS,KAAK;IACd,WAAW,KAAK;IAChB,QAAQ,KAAK;IACb,KAAK,KAAK;IACV,kBAAkB,KAAK;IACvB,cAAc,KAAK;IACnB,cAAc,KAAK;IACnB,MAAM,KAAK;IACX,gBAAgB,KAAK;IACrB,eAAe,KAAK;IACpB,uBAAuB,KAAK;IAC5B,oBAAoB,KAAK;IACzB,4BAA4B,KAAK;IACjC,iBAAiB,KAAK;IACtB,UAAU,KAAK;IACf,WAAW,KAAK;IAChB,YAAY,KAAK;CAClB;AAED,0BAAkB,kBAAkB;IAClC,IAAI,IAAI;IACR,aAAa,IAAI;IACjB,MAAM,IAAI;IACV,MAAM,IAAI;CACX;AAED,0BAAkB,OAAO;IACvB,aAAa,IAAI;IACjB,WAAW,IAAI;IACf,kBAAkB,IAAI;IACtB,QAAQ,IAAI;IACZ,KAAK,IAAI;IACT,QAAQ,IAAI;IACZ,OAAO,IAAI;IACX,MAAM,IAAI;IACV,OAAO,IAAI;IACX,KAAK,IAAI;IACT,WAAW,KAAK;IAChB,WAAW,KAAK;IAChB,WAAW,KAAK;CACjB;AAED,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,OAAO,EAAE,MAAM,CAcjD,CAAC;AAEF,eAAO,MAAM,cAAc;;;;;;;;;;;;;;CAc1B,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG,MAAM,OAAO,cAAc,CAAC;AAE3D,eAAO,MAAM,UAAU,EAAE,MAAM,CAAC,OAAO,EAAE,gBAAgB,CAcxD,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,eAAe,EAAE,MAAM,CAS3D,CAAC;AAEF,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,eAAe,EAAE,OAAO,CASzD,CAAC;AAEF,0BAAkB,mBAAmB;IACnC,KAAK,IAAI;IACT,SAAS,IAAI;IACb,UAAU,IAAI;IACd,cAAc,IAAI;IAClB,WAAW,IAAI;IACf,SAAS,IAAI;IACb,QAAQ,IAAI;CACb;AAED,eAAO,MAAM,wBAAwB,EAAE,MAAM,CAAC,mBAAmB,EAAE,MAAM,CAQxE,CAAC;AAEF,KAAK,iBAAiB,GAClB,gBAAgB,GAChB,oBAAoB,GACpB,qBAAqB,GACrB,yBAAyB,GACzB,sBAAsB,GACtB,oBAAoB,GACpB,mBAAmB,CAAC;AAExB,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,mBAAmB,EAAE,iBAAiB,CAS1E,CAAC;AAEJ,eAAO,MAAM,GAAG,WAAY,CAAC"} | ||
| {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../src/core/constants.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,wBAAwB,EAAE,YAAY,EAAE,SAAS,EAAE,aAAa,EAAE,WAAW,EAAE,UAAU,EAAE,WAAW,EAAE,SAAS,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAE1O,0BAAkB,eAAe;IAC/B,IAAI,IAAI;IACR,SAAS,IAAI;IACb,IAAI,IAAI;IACR,KAAK,IAAI;IACT,OAAO,IAAI;IACX,GAAG,IAAI;IACP,MAAM,IAAI;IACV,GAAG,IAAI;CACR;AAED,0BAAkB,eAAe;IAC/B,MAAM,IAAI;IACV,MAAM,IAAI;IACV,QAAQ,IAAI;IACZ,MAAM,IAAI;IACV,YAAY,IAAI;IAChB,IAAI,IAAI;IACR,MAAM,IAAI;IACV,GAAG,IAAI;IACP,GAAG,IAAI;IACP,KAAK,IAAI;IACT,MAAM,KAAK;IACX,eAAe,KAAK;IACpB,OAAO,KAAK;IACZ,KAAK,KAAK;IACV,cAAc,KAAK;IACnB,UAAU,KAAK;IACf,gBAAgB,KAAK;IACrB,QAAQ,KAAK;IACb,SAAS,KAAK;IACd,WAAW,KAAK;IAChB,QAAQ,KAAK;IACb,KAAK,KAAK;IACV,kBAAkB,KAAK;IACvB,cAAc,KAAK;IACnB,cAAc,KAAK;IACnB,MAAM,KAAK;IACX,gBAAgB,KAAK;IACrB,eAAe,KAAK;IACpB,uBAAuB,KAAK;IAC5B,oBAAoB,KAAK;IACzB,4BAA4B,KAAK;IACjC,iBAAiB,KAAK;IACtB,UAAU,KAAK;IACf,WAAW,KAAK;IAChB,YAAY,KAAK;CAClB;AAED,0BAAkB,kBAAkB;IAClC,IAAI,IAAI;IACR,aAAa,IAAI;IACjB,MAAM,IAAI;IACV,MAAM,IAAI;CACX;AAED,0BAAkB,OAAO;IACvB,aAAa,IAAI;IACjB,WAAW,IAAI;IACf,kBAAkB,IAAI;IACtB,QAAQ,IAAI;IACZ,KAAK,IAAI;IACT,QAAQ,IAAI;IACZ,OAAO,IAAI;IACX,MAAM,IAAI;IACV,OAAO,IAAI;IACX,KAAK,IAAI;IACT,WAAW,KAAK;IAChB,WAAW,KAAK;IAChB,WAAW,KAAK;CACjB;AAED,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,OAAO,EAAE,MAAM,CAcjD,CAAC;AAEF,eAAO,MAAM,cAAc;;;;;;;;;;;;;;CAc1B,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG,MAAM,OAAO,cAAc,CAAC;AAE3D,eAAO,MAAM,UAAU,EAAE,MAAM,CAAC,OAAO,EAAE,gBAAgB,CAcxD,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,eAAe,EAAE,MAAM,CAS3D,CAAC;AAEF,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,eAAe,EAAE,OAAO,CASzD,CAAC;AAEF,0BAAkB,mBAAmB;IACnC,KAAK,IAAI;IACT,SAAS,IAAI;IACb,UAAU,IAAI;IACd,cAAc,IAAI;IAClB,WAAW,IAAI;IACf,SAAS,IAAI;IACb,QAAQ,IAAI;CACb;AAED,eAAO,MAAM,wBAAwB,EAAE,MAAM,CAAC,mBAAmB,EAAE,MAAM,CAQxE,CAAC;AAEF,KAAK,iBAAiB,GAClB,gBAAgB,GAChB,oBAAoB,GACpB,qBAAqB,GACrB,yBAAyB,GACzB,sBAAsB,GACtB,oBAAoB,GACpB,mBAAmB,CAAC;AAExB,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,mBAAmB,EAAE,iBAAiB,CAS1E,CAAC;AAEJ,eAAO,MAAM,GAAG,WAAY,CAAC"} |
@@ -1,47 +0,44 @@ | ||
| import type { Plugin, PluginAccessOptions, SerovalMode } from '../plugin'; | ||
| import type { PluginAccessOptions } from '../plugin'; | ||
| import { SerovalMode } from '../plugin'; | ||
| import type { SerovalNode } from '../types'; | ||
| export interface BaseDeserializerOptions extends PluginAccessOptions { | ||
| export interface BaseDeserializerContextOptions extends PluginAccessOptions { | ||
| refs?: Map<number, unknown>; | ||
| } | ||
| export default abstract class BaseDeserializerContext implements PluginAccessOptions { | ||
| abstract readonly mode: SerovalMode; | ||
| export interface BaseDeserializerContext extends PluginAccessOptions { | ||
| readonly mode: SerovalMode; | ||
| /** | ||
| * Mapping ids to values | ||
| * @private | ||
| */ | ||
| refs: Map<number, unknown>; | ||
| plugins?: Plugin<any, any>[] | undefined; | ||
| constructor(options: BaseDeserializerOptions); | ||
| protected abstract assignIndexedValue<T>(id: number, value: T): T; | ||
| private deserializeReference; | ||
| private deserializeArray; | ||
| private deserializeProperties; | ||
| private deserializeObject; | ||
| private deserializeDate; | ||
| private deserializeRegExp; | ||
| private deserializeSet; | ||
| private deserializeMap; | ||
| private deserializeArrayBuffer; | ||
| private deserializeTypedArray; | ||
| private deserializeDataView; | ||
| private deserializeDictionary; | ||
| private deserializeAggregateError; | ||
| private deserializeError; | ||
| private deserializePromise; | ||
| private deserializeBoxed; | ||
| private deserializePlugin; | ||
| private deserializePromiseConstructor; | ||
| private deserializePromiseResolve; | ||
| private deserializePromiseReject; | ||
| private deserializeIteratorFactoryInstance; | ||
| private deserializeAsyncIteratorFactoryInstance; | ||
| private deserializeStreamConstructor; | ||
| private deserializeStreamNext; | ||
| private deserializeStreamThrow; | ||
| private deserializeStreamReturn; | ||
| private deserializeIteratorFactory; | ||
| private deserializeAsyncIteratorFactory; | ||
| deserializeTop(node: SerovalNode): unknown; | ||
| deserialize(node: SerovalNode): unknown; | ||
| } | ||
| export declare function createBaseDeserializerContext(mode: SerovalMode, options: BaseDeserializerContextOptions): BaseDeserializerContext; | ||
| export interface VanillaDeserializerContextOptions extends Omit<BaseDeserializerContextOptions, 'refs'> { | ||
| markedRefs: number[] | Set<number>; | ||
| } | ||
| export interface VanillaDeserializerState { | ||
| marked: Set<number>; | ||
| } | ||
| export interface VanillaDeserializerContext { | ||
| mode: SerovalMode.Vanilla; | ||
| base: BaseDeserializerContext; | ||
| child: DeserializePluginContext | undefined; | ||
| state: VanillaDeserializerState; | ||
| } | ||
| export declare function createVanillaDeserializerContext(options: VanillaDeserializerContextOptions): VanillaDeserializerContext; | ||
| export interface CrossDeserializerContext { | ||
| mode: SerovalMode.Cross; | ||
| base: BaseDeserializerContext; | ||
| child: DeserializePluginContext | undefined; | ||
| } | ||
| export type CrossDeserializerContextOptions = BaseDeserializerContextOptions; | ||
| export declare function createCrossDeserializerContext(options: CrossDeserializerContextOptions): CrossDeserializerContext; | ||
| type DeserializerContext = VanillaDeserializerContext | CrossDeserializerContext; | ||
| export declare class DeserializePluginContext { | ||
| private _p; | ||
| constructor(_p: DeserializerContext); | ||
| deserialize<T>(node: SerovalNode): T; | ||
| } | ||
| export declare function deserialize(ctx: DeserializerContext, node: SerovalNode): unknown; | ||
| export declare function deserializeTop(ctx: DeserializerContext, node: SerovalNode): unknown; | ||
| export {}; | ||
| //# sourceMappingURL=deserializer.d.ts.map |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"deserializer.d.ts","sourceRoot":"","sources":["../../../../src/core/context/deserializer.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,MAAM,EAAE,mBAAmB,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAK1E,OAAO,KAAK,EAcV,WAAW,EAkBZ,MAAM,UAAU,CAAC;AA4BlB,MAAM,WAAW,uBAAwB,SAAQ,mBAAmB;IAClE,IAAI,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC7B;AAED,MAAM,CAAC,OAAO,CAAC,QAAQ,OAAO,uBAC5B,YAAW,mBAAmB;IAE9B,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;IAEpC;;;OAGG;IACH,IAAI,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAE3B,OAAO,CAAC,EAAE,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,GAAG,SAAS,CAAC;gBAE7B,OAAO,EAAE,uBAAuB;IAK5C,SAAS,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC;IAEjE,OAAO,CAAC,oBAAoB;IAO5B,OAAO,CAAC,gBAAgB;IAiBxB,OAAO,CAAC,qBAAqB;IAoB7B,OAAO,CAAC,iBAAiB;IAezB,OAAO,CAAC,eAAe;IAIvB,OAAO,CAAC,iBAAiB;IAOzB,OAAO,CAAC,cAAc;IAStB,OAAO,CAAC,cAAc;IAUtB,OAAO,CAAC,sBAAsB;IAM9B,OAAO,CAAC,qBAAqB;IAY7B,OAAO,CAAC,mBAAmB;IAS3B,OAAO,CAAC,qBAAqB;IAW7B,OAAO,CAAC,yBAAyB;IAcjC,OAAO,CAAC,gBAAgB;IASxB,OAAO,CAAC,kBAAkB;IAY1B,OAAO,CAAC,gBAAgB;IAIxB,OAAO,CAAC,iBAAiB;IAmBzB,OAAO,CAAC,6BAA6B;IASrC,OAAO,CAAC,yBAAyB;IAOjC,OAAO,CAAC,wBAAwB;IAOhC,OAAO,CAAC,kCAAkC;IAQ1C,OAAO,CAAC,uCAAuC;IAQ/C,OAAO,CAAC,4BAA4B;IAapC,OAAO,CAAC,qBAAqB;IAO7B,OAAO,CAAC,sBAAsB;IAO9B,OAAO,CAAC,uBAAuB;IAO/B,OAAO,CAAC,0BAA0B;IAOlC,OAAO,CAAC,+BAA+B;IAOvC,cAAc,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO;IAQ1C,WAAW,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO;CAyExC"} | ||
| {"version":3,"file":"deserializer.d.ts","sourceRoot":"","sources":["../../../../src/core/context/deserializer.ts"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAKxC,OAAO,KAAK,EAcV,WAAW,EAkBZ,MAAM,UAAU,CAAC;AAyBlB,MAAM,WAAW,8BAA+B,SAAQ,mBAAmB;IACzE,IAAI,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC7B;AAED,MAAM,WAAW,uBAAwB,SAAQ,mBAAmB;IAClE,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;IAC3B;;OAEG;IACH,IAAI,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC5B;AAED,wBAAgB,6BAA6B,CAC3C,IAAI,EAAE,WAAW,EACjB,OAAO,EAAE,8BAA8B,GACtC,uBAAuB,CAMzB;AAED,MAAM,WAAW,iCACf,SAAQ,IAAI,CAAC,8BAA8B,EAAE,MAAM,CAAC;IACpD,UAAU,EAAE,MAAM,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC;CACpC;AAED,MAAM,WAAW,wBAAwB;IACvC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;CACrB;AAED,MAAM,WAAW,0BAA0B;IACzC,IAAI,EAAE,WAAW,CAAC,OAAO,CAAC;IAC1B,IAAI,EAAE,uBAAuB,CAAC;IAC9B,KAAK,EAAE,wBAAwB,GAAG,SAAS,CAAC;IAC5C,KAAK,EAAE,wBAAwB,CAAC;CACjC;AAED,wBAAgB,gCAAgC,CAC9C,OAAO,EAAE,iCAAiC,GACzC,0BAA0B,CAS5B;AAED,MAAM,WAAW,wBAAwB;IACvC,IAAI,EAAE,WAAW,CAAC,KAAK,CAAC;IACxB,IAAI,EAAE,uBAAuB,CAAC;IAC9B,KAAK,EAAE,wBAAwB,GAAG,SAAS,CAAC;CAC7C;AAED,MAAM,MAAM,+BAA+B,GAAG,8BAA8B,CAAC;AAE7E,wBAAgB,8BAA8B,CAC5C,OAAO,EAAE,+BAA+B,GACvC,wBAAwB,CAM1B;AAED,KAAK,mBAAmB,GACpB,0BAA0B,GAC1B,wBAAwB,CAAC;AAE7B,qBAAa,wBAAwB;IACvB,OAAO,CAAC,EAAE;gBAAF,EAAE,EAAE,mBAAmB;IAE3C,WAAW,CAAC,CAAC,EAAE,IAAI,EAAE,WAAW,GAAG,CAAC;CAGrC;AA8YD,wBAAgB,WAAW,CACzB,GAAG,EAAE,mBAAmB,EACxB,IAAI,EAAE,WAAW,GAChB,OAAO,CAwET;AAED,wBAAgB,cAAc,CAC5B,GAAG,EAAE,mBAAmB,EACxB,IAAI,EAAE,WAAW,GAChB,OAAO,CAMT"} |
@@ -1,4 +0,4 @@ | ||
| import type { Plugin, PluginAccessOptions, SerovalMode } from '../plugin'; | ||
| import type { PluginAccessOptions, SerovalMode } from '../plugin'; | ||
| import { SpecialReference } from '../special-reference'; | ||
| import type { SerovalAsyncIteratorFactoryNode, SerovalIndexedValueNode, SerovalIteratorFactoryNode, SerovalMapNode, SerovalNode, SerovalNullConstructorNode, SerovalObjectNode, SerovalObjectRecordNode, SerovalPromiseConstructorNode, SerovalReferenceNode, SerovalSpecialReferenceNode, SerovalWKSymbolNode } from '../types'; | ||
| import type { SerovalArrayBufferNode, SerovalAsyncIteratorFactoryNode, SerovalIndexedValueNode, SerovalIteratorFactoryNode, SerovalMapNode, SerovalNode, SerovalNullConstructorNode, SerovalObjectNode, SerovalObjectRecordNode, SerovalPromiseConstructorNode, SerovalReferenceNode, SerovalSpecialReferenceNode, SerovalWKSymbolNode } from '../types'; | ||
| export interface BaseParserContextOptions extends PluginAccessOptions { | ||
@@ -26,23 +26,36 @@ disabledFeatures?: number; | ||
| type ObjectNode = FreshNode | IndexedNode | ReferencedNode; | ||
| export declare abstract class BaseParserContext implements PluginAccessOptions { | ||
| abstract readonly mode: SerovalMode; | ||
| features: number; | ||
| export interface BaseParserContext extends PluginAccessOptions { | ||
| readonly mode: SerovalMode; | ||
| marked: Set<number>; | ||
| refs: Map<unknown, number>; | ||
| plugins?: Plugin<any, any>[] | undefined; | ||
| constructor(options: BaseParserContextOptions); | ||
| protected markRef(id: number): void; | ||
| protected isMarked(id: number): boolean; | ||
| protected createIndex<T>(current: T): number; | ||
| protected getIndexedValue<T>(current: T): FreshNode | IndexedNode; | ||
| protected getReference<T>(current: T): ObjectNode; | ||
| protected parseWellKnownSymbol(current: symbol): SerovalIndexedValueNode | SerovalWKSymbolNode | SerovalReferenceNode; | ||
| protected parseSpecialReference(ref: SpecialReference): SerovalIndexedValueNode | SerovalSpecialReferenceNode; | ||
| protected parseIteratorFactory(): SerovalIndexedValueNode | SerovalIteratorFactoryNode; | ||
| protected parseAsyncIteratorFactory(): SerovalIndexedValueNode | SerovalAsyncIteratorFactoryNode; | ||
| protected createObjectNode(id: number, current: Record<string, unknown>, empty: boolean, record: SerovalObjectRecordNode): SerovalObjectNode | SerovalNullConstructorNode; | ||
| protected createMapNode(id: number, k: SerovalNode[], v: SerovalNode[], s: number): SerovalMapNode; | ||
| protected createPromiseConstructorNode(id: number, resolver: number): SerovalPromiseConstructorNode; | ||
| features: number; | ||
| } | ||
| export declare function createBaseParserContext(mode: SerovalMode, options: BaseParserContextOptions): BaseParserContext; | ||
| /** | ||
| * Ensures that the value (based on an identifier) has been visited by the parser. | ||
| * @param ctx | ||
| * @param id | ||
| */ | ||
| export declare function markParserRef(ctx: BaseParserContext, id: number): void; | ||
| export declare function isParserRefMarked(ctx: BaseParserContext, id: number): boolean; | ||
| /** | ||
| * Creates an identifier for a value | ||
| * @param ctx | ||
| * @param current | ||
| */ | ||
| export declare function createIndexForValue<T>(ctx: BaseParserContext, current: T): number; | ||
| export declare function getNodeForIndexedValue<T>(ctx: BaseParserContext, current: T): FreshNode | IndexedNode; | ||
| export declare function getReferenceNode<T>(ctx: BaseParserContext, current: T): ObjectNode; | ||
| /** | ||
| * Parsing methods | ||
| */ | ||
| export declare function parseWellKnownSymbol(ctx: BaseParserContext, current: symbol): SerovalIndexedValueNode | SerovalWKSymbolNode | SerovalReferenceNode; | ||
| export declare function parseSpecialReference(ctx: BaseParserContext, ref: SpecialReference): SerovalIndexedValueNode | SerovalSpecialReferenceNode; | ||
| export declare function parseIteratorFactory(ctx: BaseParserContext): SerovalIndexedValueNode | SerovalIteratorFactoryNode; | ||
| export declare function parseAsyncIteratorFactory(ctx: BaseParserContext): SerovalIndexedValueNode | SerovalAsyncIteratorFactoryNode; | ||
| export declare function createObjectNode(id: number, current: Record<string, unknown>, empty: boolean, record: SerovalObjectRecordNode): SerovalObjectNode | SerovalNullConstructorNode; | ||
| export declare function createMapNode(ctx: BaseParserContext, id: number, k: SerovalNode[], v: SerovalNode[], s: number): SerovalMapNode; | ||
| export declare function createPromiseConstructorNode(ctx: BaseParserContext, id: number, resolver: number): SerovalPromiseConstructorNode; | ||
| export declare function createArrayBufferNode(ctx: BaseParserContext, id: number, current: ArrayBuffer): SerovalArrayBufferNode; | ||
| export {}; | ||
| //# sourceMappingURL=parser.d.ts.map |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../../../../src/core/context/parser.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,MAAM,EAAE,mBAAmB,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAE1E,OAAO,EAIL,gBAAgB,EACjB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,EACV,+BAA+B,EAC/B,uBAAuB,EACvB,0BAA0B,EAC1B,cAAc,EACd,WAAW,EACX,0BAA0B,EAC1B,iBAAiB,EACjB,uBAAuB,EACvB,6BAA6B,EAC7B,oBAAoB,EACpB,2BAA2B,EAC3B,mBAAmB,EACpB,MAAM,UAAU,CAAC;AAIlB,MAAM,WAAW,wBAAyB,SAAQ,mBAAmB;IACnE,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,IAAI,CAAC,EAAE,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;CAC7B;AAED,0BAAkB,cAAc;IAC9B,KAAK,IAAI;IACT,OAAO,IAAI;IACX,UAAU,IAAI;CACf;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,cAAc,CAAC,KAAK,CAAC;IAC3B,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,cAAc,CAAC,OAAO,CAAC;IAC7B,KAAK,EAAE,uBAAuB,CAAC;CAChC;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,cAAc,CAAC,UAAU,CAAC;IAChC,KAAK,EAAE,oBAAoB,CAAC;CAC7B;AAED,KAAK,UAAU,GAAG,SAAS,GAAG,WAAW,GAAG,cAAc,CAAC;AAE3D,8BAAsB,iBAAkB,YAAW,mBAAmB;IACpE,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;IAEpC,QAAQ,EAAE,MAAM,CAAC;IAEjB,MAAM,cAAqB;IAE3B,IAAI,EAAE,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAE3B,OAAO,CAAC,EAAE,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,GAAG,SAAS,CAAC;gBAE7B,OAAO,EAAE,wBAAwB;IAM7C,SAAS,CAAC,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAInC,SAAS,CAAC,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAIvC,SAAS,CAAC,WAAW,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,GAAG,MAAM;IAM5C,SAAS,CAAC,eAAe,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,GAAG,SAAS,GAAG,WAAW;IAejE,SAAS,CAAC,YAAY,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,GAAG,UAAU;IAcjD,SAAS,CAAC,oBAAoB,CAC5B,OAAO,EAAE,MAAM,GACd,uBAAuB,GAAG,mBAAmB,GAAG,oBAAoB;IASvE,SAAS,CAAC,qBAAqB,CAC7B,GAAG,EAAE,gBAAgB,GACpB,uBAAuB,GAAG,2BAA2B;IAqBxD,SAAS,CAAC,oBAAoB,IAC1B,uBAAuB,GACvB,0BAA0B;IAqB9B,SAAS,CAAC,yBAAyB,IAC/B,uBAAuB,GACvB,+BAA+B;IAwBnC,SAAS,CAAC,gBAAgB,CACxB,EAAE,EAAE,MAAM,EACV,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAChC,KAAK,EAAE,OAAO,EACd,MAAM,EAAE,uBAAuB,GAC9B,iBAAiB,GAAG,0BAA0B;IAiBjD,SAAS,CAAC,aAAa,CACrB,EAAE,EAAE,MAAM,EACV,CAAC,EAAE,WAAW,EAAE,EAChB,CAAC,EAAE,WAAW,EAAE,EAChB,CAAC,EAAE,MAAM,GACR,cAAc;IAiBjB,SAAS,CAAC,4BAA4B,CACpC,EAAE,EAAE,MAAM,EACV,QAAQ,EAAE,MAAM,GACf,6BAA6B;CAgBjC"} | ||
| {"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../../../../src/core/context/parser.ts"],"names":[],"mappings":"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"} |
| import { SerovalObjectFlags } from '../constants'; | ||
| import type { Plugin, PluginAccessOptions, SerovalMode } from '../plugin'; | ||
| import type { SerovalAggregateErrorNode, SerovalArrayBufferNode, SerovalArrayNode, SerovalAsyncIteratorFactoryInstanceNode, SerovalAsyncIteratorFactoryNode, SerovalBigIntTypedArrayNode, SerovalBoxedNode, SerovalDataViewNode, SerovalDateNode, SerovalErrorNode, SerovalIteratorFactoryInstanceNode, SerovalIteratorFactoryNode, SerovalMapNode, SerovalNode, SerovalNullConstructorNode, SerovalObjectNode, SerovalObjectRecordKey, SerovalObjectRecordNode, SerovalPluginNode, SerovalPromiseConstructorNode, SerovalPromiseNode, SerovalPromiseRejectNode, SerovalPromiseResolveNode, SerovalReferenceNode, SerovalRegExpNode, SerovalSetNode, SerovalSpecialReferenceNode, SerovalStreamConstructorNode, SerovalStreamNextNode, SerovalStreamReturnNode, SerovalStreamThrowNode, SerovalTypedArrayNode, SerovalWKSymbolNode } from '../types'; | ||
| import type { PluginAccessOptions } from '../plugin'; | ||
| import { SerovalMode } from '../plugin'; | ||
| import type { SerovalNode } from '../types'; | ||
| declare const enum AssignmentType { | ||
@@ -39,3 +40,2 @@ Index = 0, | ||
| } | ||
| type SerovalNodeWithProperties = SerovalObjectNode | SerovalNullConstructorNode | SerovalAggregateErrorNode | SerovalErrorNode; | ||
| export interface BaseSerializerContextOptions extends PluginAccessOptions { | ||
@@ -45,15 +45,8 @@ features: number; | ||
| } | ||
| export default abstract class BaseSerializerContext implements PluginAccessOptions { | ||
| /** | ||
| * @private | ||
| */ | ||
| export interface BaseSerializerContext extends PluginAccessOptions { | ||
| readonly mode: SerovalMode; | ||
| features: number; | ||
| /** | ||
| * To check if an object is synchronously referencing itself | ||
| * @private | ||
| */ | ||
| stack: number[]; | ||
| /** | ||
| * Array of object mutations | ||
| * @private | ||
| */ | ||
@@ -63,98 +56,44 @@ flags: FlaggedObject[]; | ||
| * Array of assignments to be done (used for recursion) | ||
| * @private | ||
| */ | ||
| assignments: Assignment[]; | ||
| plugins?: Plugin<any, any>[] | undefined; | ||
| /** | ||
| * Refs that are...referenced | ||
| * @private | ||
| */ | ||
| marked: Set<number>; | ||
| constructor(options: BaseSerializerContextOptions); | ||
| abstract readonly mode: SerovalMode; | ||
| createFunction(parameters: string[], body: string): string; | ||
| createEffectfulFunction(parameters: string[], body: string): string; | ||
| /** | ||
| * A tiny function that tells if a reference | ||
| * is to be accessed. This is a requirement for | ||
| * deciding whether or not we should generate | ||
| * an identifier for the object | ||
| */ | ||
| protected markRef(id: number): void; | ||
| protected isMarked(id: number): boolean; | ||
| /** | ||
| * Converts the ID of a reference into a identifier string | ||
| * that is used to refer to the object instance in the | ||
| * generated script. | ||
| */ | ||
| abstract getRefParam(id: number): string; | ||
| protected pushObjectFlag(flag: SerovalObjectFlags, id: number): void; | ||
| private resolveFlags; | ||
| protected resolvePatches(): string | undefined; | ||
| /** | ||
| * Generates the inlined assignment for the reference | ||
| * This is different from the assignments array as this one | ||
| * signifies creation rather than mutation | ||
| */ | ||
| protected createAssignment(source: string, value: string): void; | ||
| protected createAddAssignment(ref: number, value: string): void; | ||
| protected createSetAssignment(ref: number, key: string, value: string): void; | ||
| protected createDeleteAssignment(ref: number, key: string): void; | ||
| protected createArrayAssign(ref: number, index: number | string, value: string): void; | ||
| protected createObjectAssign(ref: number, key: string, value: string): void; | ||
| /** | ||
| * Checks if the value is in the stack. Stack here is a reference | ||
| * structure to know if a object is to be accessed in a TDZ. | ||
| */ | ||
| isIndexedValueInStack(node: SerovalNode): boolean; | ||
| /** | ||
| * Produces an assignment expression. `id` generates a reference | ||
| * parameter (through `getRefParam`) and has the option to | ||
| * return the reference parameter directly or assign a value to | ||
| * it. | ||
| */ | ||
| protected abstract assignIndexedValue(id: number, value: string): string; | ||
| protected serializeReference(node: SerovalReferenceNode): string; | ||
| protected serializeArrayItem(id: number, item: SerovalNode | undefined, index: number): string; | ||
| protected serializeArray(node: SerovalArrayNode): string; | ||
| protected serializeProperty(source: SerovalNodeWithProperties, key: SerovalObjectRecordKey, val: SerovalNode): string; | ||
| protected serializeProperties(source: SerovalNodeWithProperties, record: SerovalObjectRecordNode): string; | ||
| protected serializeObject(node: SerovalObjectNode): string; | ||
| protected serializeWithObjectAssign(source: SerovalNodeWithProperties, value: SerovalObjectRecordNode, serialized: string): string; | ||
| private serializeStringKeyAssignment; | ||
| protected serializeAssignment(source: SerovalNodeWithProperties, mainAssignments: Assignment[], key: SerovalObjectRecordKey, value: SerovalNode): void; | ||
| protected serializeAssignments(source: SerovalNodeWithProperties, node: SerovalObjectRecordNode): string | undefined; | ||
| protected serializeDictionary(node: SerovalNodeWithProperties, init: string): string; | ||
| protected serializeNullConstructor(node: SerovalNullConstructorNode): string; | ||
| protected serializeDate(node: SerovalDateNode): string; | ||
| protected serializeRegExp(node: SerovalRegExpNode): string; | ||
| protected serializeSetItem(id: number, item: SerovalNode): string; | ||
| protected serializeSet(node: SerovalSetNode): string; | ||
| protected serializeMapEntry(id: number, key: SerovalNode, val: SerovalNode, sentinel: string): string; | ||
| protected serializeMap(node: SerovalMapNode): string; | ||
| protected serializeArrayBuffer(node: SerovalArrayBufferNode): string; | ||
| protected serializeTypedArray(node: SerovalTypedArrayNode | SerovalBigIntTypedArrayNode): string; | ||
| protected serializeDataView(node: SerovalDataViewNode): string; | ||
| protected serializeAggregateError(node: SerovalAggregateErrorNode): string; | ||
| protected serializeError(node: SerovalErrorNode): string; | ||
| protected serializePromise(node: SerovalPromiseNode): string; | ||
| protected serializeWellKnownSymbol(node: SerovalWKSymbolNode): string; | ||
| protected serializeBoxed(node: SerovalBoxedNode): string; | ||
| protected serializePlugin(node: SerovalPluginNode): string; | ||
| private getConstructor; | ||
| protected serializePromiseConstructor(node: SerovalPromiseConstructorNode): string; | ||
| protected serializePromiseResolve(node: SerovalPromiseResolveNode): string; | ||
| protected serializePromiseReject(node: SerovalPromiseRejectNode): string; | ||
| protected serializeSpecialReference(node: SerovalSpecialReferenceNode): string; | ||
| protected serializeIteratorFactory(node: SerovalIteratorFactoryNode): string; | ||
| protected serializeIteratorFactoryInstance(node: SerovalIteratorFactoryInstanceNode): string; | ||
| protected serializeAsyncIteratorFactory(node: SerovalAsyncIteratorFactoryNode): string; | ||
| protected serializeAsyncIteratorFactoryInstance(node: SerovalAsyncIteratorFactoryInstanceNode): string; | ||
| protected serializeStreamConstructor(node: SerovalStreamConstructorNode): string; | ||
| protected serializeStreamNext(node: SerovalStreamNextNode): string; | ||
| protected serializeStreamThrow(node: SerovalStreamThrowNode): string; | ||
| protected serializeStreamReturn(node: SerovalStreamReturnNode): string; | ||
| } | ||
| export interface CrossContextOptions { | ||
| scopeId?: string; | ||
| } | ||
| export declare function createBaseSerializerContext(mode: SerovalMode, options: BaseSerializerContextOptions): BaseSerializerContext; | ||
| export interface VanillaSerializerState { | ||
| valid: Map<number, number>; | ||
| vars: string[]; | ||
| } | ||
| export interface VanillaSerializerContext { | ||
| mode: SerovalMode.Vanilla; | ||
| base: BaseSerializerContext; | ||
| state: VanillaSerializerState; | ||
| child: SerializePluginContext | undefined; | ||
| } | ||
| export type VanillaSerializerContextOptions = BaseSerializerContextOptions; | ||
| export declare function createVanillaSerializerContext(options: VanillaSerializerContextOptions): VanillaSerializerContext; | ||
| export interface CrossSerializerContext { | ||
| mode: SerovalMode.Cross; | ||
| base: BaseSerializerContext; | ||
| state: CrossContextOptions; | ||
| child: SerializePluginContext | undefined; | ||
| } | ||
| export interface CrossSerializerContextOptions extends BaseSerializerContextOptions, CrossContextOptions { | ||
| } | ||
| export declare function createCrossSerializerContext(options: CrossSerializerContextOptions): CrossSerializerContext; | ||
| type SerializerContext = VanillaSerializerContext | CrossSerializerContext; | ||
| export declare class SerializePluginContext { | ||
| private _p; | ||
| constructor(_p: SerializerContext); | ||
| serialize(node: SerovalNode): string; | ||
| } | ||
| export declare function serializeRoot(ctx: SerializerContext, node: SerovalNode): string; | ||
| export declare function serializeTopVanilla(ctx: VanillaSerializerContext, tree: SerovalNode): string; | ||
| export declare function serializeTopCross(ctx: CrossSerializerContext, tree: SerovalNode): string; | ||
| export {}; | ||
| //# sourceMappingURL=serializer.d.ts.map |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"serializer.d.ts","sourceRoot":"","sources":["../../../../src/core/context/serializer.ts"],"names":[],"mappings":"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"} | ||
| {"version":3,"file":"serializer.d.ts","sourceRoot":"","sources":["../../../../src/core/context/serializer.ts"],"names":[],"mappings":"AACA,OAAO,EAKL,kBAAkB,EAEnB,MAAM,cAAc,CAAC;AAYtB,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAGxC,OAAO,KAAK,EAeV,WAAW,EAmBZ,MAAM,UAAU,CAAC;AAIlB,mBAAW,cAAc;IACvB,KAAK,IAAI;IACT,GAAG,IAAI;IACP,GAAG,IAAI;IACP,MAAM,IAAI;CACX;AAED,UAAU,eAAe;IACvB,CAAC,EAAE,cAAc,CAAC,KAAK,CAAC;IACxB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,SAAS,CAAC;IACb,CAAC,EAAE,MAAM,CAAC;CACX;AAED,UAAU,aAAa;IACrB,CAAC,EAAE,cAAc,CAAC,GAAG,CAAC;IACtB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;CACX;AAED,UAAU,aAAa;IACrB,CAAC,EAAE,cAAc,CAAC,GAAG,CAAC;IACtB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,SAAS,CAAC;IACb,CAAC,EAAE,MAAM,CAAC;CACX;AAED,UAAU,gBAAgB;IACxB,CAAC,EAAE,cAAc,CAAC,MAAM,CAAC;IACzB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,SAAS,CAAC;CACd;AAGD,KAAK,UAAU,GACX,eAAe,GACf,aAAa,GACb,aAAa,GACb,gBAAgB,CAAC;AAErB,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,kBAAkB,CAAC;IACzB,KAAK,EAAE,MAAM,CAAC;CACf;AAuGD,MAAM,WAAW,4BAA6B,SAAQ,mBAAmB;IACvE,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC;CACpC;AAED,MAAM,WAAW,qBAAsB,SAAQ,mBAAmB;IAChE,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;IAE3B,QAAQ,EAAE,MAAM,CAAC;IAIjB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB;;OAEG;IACH,KAAK,EAAE,aAAa,EAAE,CAAC;IACvB;;OAEG;IACH,WAAW,EAAE,UAAU,EAAE,CAAC;IAC1B;;OAEG;IACH,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;CACrB;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,wBAAgB,2BAA2B,CACzC,IAAI,EAAE,WAAW,EACjB,OAAO,EAAE,4BAA4B,GACpC,qBAAqB,CAUvB;AAED,MAAM,WAAW,sBAAsB;IACrC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC3B,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB;AASD,MAAM,WAAW,wBAAwB;IACvC,IAAI,EAAE,WAAW,CAAC,OAAO,CAAC;IAC1B,IAAI,EAAE,qBAAqB,CAAC;IAC5B,KAAK,EAAE,sBAAsB,CAAC;IAC9B,KAAK,EAAE,sBAAsB,GAAG,SAAS,CAAC;CAC3C;AAED,MAAM,MAAM,+BAA+B,GAAG,4BAA4B,CAAC;AAE3E,wBAAgB,8BAA8B,CAC5C,OAAO,EAAE,+BAA+B,GACvC,wBAAwB,CAO1B;AAED,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,WAAW,CAAC,KAAK,CAAC;IACxB,IAAI,EAAE,qBAAqB,CAAC;IAC5B,KAAK,EAAE,mBAAmB,CAAC;IAC3B,KAAK,EAAE,sBAAsB,GAAG,SAAS,CAAC;CAC3C;AAED,MAAM,WAAW,6BACf,SAAQ,4BAA4B,EAClC,mBAAmB;CAEtB;AAED,wBAAgB,4BAA4B,CAC1C,OAAO,EAAE,6BAA6B,GACrC,sBAAsB,CAOxB;AAED,KAAK,iBAAiB,GAAG,wBAAwB,GAAG,sBAAsB,CAAC;AAE3E,qBAAa,sBAAsB;IACrB,OAAO,CAAC,EAAE;gBAAF,EAAE,EAAE,iBAAiB;IAEzC,SAAS,CAAC,IAAI,EAAE,WAAW;CAG5B;AAo/BD,wBAAgB,aAAa,CAC3B,GAAG,EAAE,iBAAiB,EACtB,IAAI,EAAE,WAAW,GAChB,MAAM,CAQR;AAED,wBAAgB,mBAAmB,CACjC,GAAG,EAAE,wBAAwB,EAC7B,IAAI,EAAE,WAAW,GAChB,MAAM,CAqBR;AAED,wBAAgB,iBAAiB,CAC/B,GAAG,EAAE,sBAAsB,EAC3B,IAAI,EAAE,WAAW,GAChB,MAAM,CAoCR"} |
@@ -0,22 +1,21 @@ | ||
| import type { AsyncParserContextOptions } from '../context/async-parser'; | ||
| import type { CrossDeserializerContextOptions } from '../context/deserializer'; | ||
| import type { CrossContextOptions } from '../context/serializer'; | ||
| import type { StreamParserContextOptions, SyncParserContextOptions } from '../context/sync-parser'; | ||
| import type { SerovalNode } from '../types'; | ||
| import type { CrossAsyncParserContextOptions } from './async'; | ||
| import type { CrossDeserializerContextOptions } from './deserializer'; | ||
| import type { CrossContextOptions, CrossParserContextOptions } from './parser'; | ||
| import type { CrossStreamParserContextOptions } from './stream'; | ||
| import type { CrossSyncParserContextOptions } from './sync'; | ||
| export interface CrossSerializeOptions extends CrossSyncParserContextOptions, CrossContextOptions { | ||
| export interface CrossSerializeOptions extends SyncParserContextOptions, CrossContextOptions { | ||
| } | ||
| export declare function crossSerialize<T>(source: T, options?: CrossSerializeOptions): string; | ||
| export interface CrossSerializeAsyncOptions extends CrossAsyncParserContextOptions, CrossContextOptions { | ||
| export interface CrossSerializeAsyncOptions extends AsyncParserContextOptions, CrossContextOptions { | ||
| } | ||
| export declare function crossSerializeAsync<T>(source: T, options?: CrossSerializeAsyncOptions): Promise<string>; | ||
| export type ToCrossJSONOptions = CrossParserContextOptions; | ||
| export declare function toCrossJSON<T>(source: T, options?: CrossParserContextOptions): SerovalNode; | ||
| export type ToCrossJSONAsyncOptions = CrossParserContextOptions; | ||
| export declare function toCrossJSONAsync<T>(source: T, options?: CrossParserContextOptions): Promise<SerovalNode>; | ||
| export interface CrossSerializeStreamOptions extends Omit<CrossStreamParserContextOptions, 'onParse'>, CrossContextOptions { | ||
| export type ToCrossJSONOptions = SyncParserContextOptions; | ||
| export declare function toCrossJSON<T>(source: T, options?: ToCrossJSONOptions): SerovalNode; | ||
| export type ToCrossJSONAsyncOptions = AsyncParserContextOptions; | ||
| export declare function toCrossJSONAsync<T>(source: T, options?: ToCrossJSONAsyncOptions): Promise<SerovalNode>; | ||
| export interface CrossSerializeStreamOptions extends Omit<StreamParserContextOptions, 'onParse'>, CrossContextOptions { | ||
| onSerialize: (data: string, initial: boolean) => void; | ||
| } | ||
| export declare function crossSerializeStream<T>(source: T, options: CrossSerializeStreamOptions): () => void; | ||
| export type ToCrossJSONStreamOptions = CrossStreamParserContextOptions; | ||
| export type ToCrossJSONStreamOptions = StreamParserContextOptions; | ||
| export declare function toCrossJSONStream<T>(source: T, options: ToCrossJSONStreamOptions): () => void; | ||
@@ -23,0 +22,0 @@ export type FromCrossJSONOptions = CrossDeserializerContextOptions; |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/core/cross/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAC5C,OAAO,KAAK,EAAE,8BAA8B,EAAE,MAAM,SAAS,CAAC;AAE9D,OAAO,KAAK,EAAE,+BAA+B,EAAE,MAAM,gBAAgB,CAAC;AAEtE,OAAO,KAAK,EAAE,mBAAmB,EAAE,yBAAyB,EAAE,MAAM,UAAU,CAAC;AAE/E,OAAO,KAAK,EAAE,+BAA+B,EAAE,MAAM,UAAU,CAAC;AAEhE,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,QAAQ,CAAC;AAG5D,MAAM,WAAW,qBACf,SAAQ,6BAA6B,EACnC,mBAAmB;CAAG;AAE1B,wBAAgB,cAAc,CAAC,CAAC,EAC9B,MAAM,EAAE,CAAC,EACT,OAAO,GAAE,qBAA0B,GAClC,MAAM,CAeR;AAED,MAAM,WAAW,0BACf,SAAQ,8BAA8B,EACpC,mBAAmB;CAAG;AAE1B,wBAAsB,mBAAmB,CAAC,CAAC,EACzC,MAAM,EAAE,CAAC,EACT,OAAO,GAAE,0BAA+B,GACvC,OAAO,CAAC,MAAM,CAAC,CAejB;AAED,MAAM,MAAM,kBAAkB,GAAG,yBAAyB,CAAC;AAE3D,wBAAgB,WAAW,CAAC,CAAC,EAC3B,MAAM,EAAE,CAAC,EACT,OAAO,GAAE,yBAA8B,GACtC,WAAW,CAQb;AAED,MAAM,MAAM,uBAAuB,GAAG,yBAAyB,CAAC;AAEhE,wBAAsB,gBAAgB,CAAC,CAAC,EACtC,MAAM,EAAE,CAAC,EACT,OAAO,GAAE,yBAA8B,GACtC,OAAO,CAAC,WAAW,CAAC,CAQtB;AAED,MAAM,WAAW,2BACf,SAAQ,IAAI,CAAC,+BAA+B,EAAE,SAAS,CAAC,EACtD,mBAAmB;IACrB,WAAW,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;CACvD;AAED,wBAAgB,oBAAoB,CAAC,CAAC,EACpC,MAAM,EAAE,CAAC,EACT,OAAO,EAAE,2BAA2B,GACnC,MAAM,IAAI,CAkCZ;AAED,MAAM,MAAM,wBAAwB,GAAG,+BAA+B,CAAC;AAEvE,wBAAgB,iBAAiB,CAAC,CAAC,EACjC,MAAM,EAAE,CAAC,EACT,OAAO,EAAE,wBAAwB,GAChC,MAAM,IAAI,CAcZ;AAED,MAAM,MAAM,oBAAoB,GAAG,+BAA+B,CAAC;AAEnE,wBAAgB,aAAa,CAAC,CAAC,EAC7B,MAAM,EAAE,WAAW,EACnB,OAAO,EAAE,oBAAoB,GAC5B,CAAC,CAOH"} | ||
| {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/core/cross/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AAKzE,OAAO,KAAK,EAAE,+BAA+B,EAAE,MAAM,yBAAyB,CAAC;AAK/E,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAKjE,OAAO,KAAK,EACV,0BAA0B,EAC1B,wBAAwB,EACzB,MAAM,wBAAwB,CAAC;AAShC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAE5C,MAAM,WAAW,qBACf,SAAQ,wBAAwB,EAC9B,mBAAmB;CAAG;AAE1B,wBAAgB,cAAc,CAAC,CAAC,EAC9B,MAAM,EAAE,CAAC,EACT,OAAO,GAAE,qBAA0B,GAClC,MAAM,CAeR;AAED,MAAM,WAAW,0BACf,SAAQ,yBAAyB,EAC/B,mBAAmB;CAAG;AAE1B,wBAAsB,mBAAmB,CAAC,CAAC,EACzC,MAAM,EAAE,CAAC,EACT,OAAO,GAAE,0BAA+B,GACvC,OAAO,CAAC,MAAM,CAAC,CAejB;AAED,MAAM,MAAM,kBAAkB,GAAG,wBAAwB,CAAC;AAE1D,wBAAgB,WAAW,CAAC,CAAC,EAC3B,MAAM,EAAE,CAAC,EACT,OAAO,GAAE,kBAAuB,GAC/B,WAAW,CAQb;AAED,MAAM,MAAM,uBAAuB,GAAG,yBAAyB,CAAC;AAEhE,wBAAsB,gBAAgB,CAAC,CAAC,EACtC,MAAM,EAAE,CAAC,EACT,OAAO,GAAE,uBAA4B,GACpC,OAAO,CAAC,WAAW,CAAC,CAQtB;AAED,MAAM,WAAW,2BACf,SAAQ,IAAI,CAAC,0BAA0B,EAAE,SAAS,CAAC,EACjD,mBAAmB;IACrB,WAAW,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;CACvD;AAED,wBAAgB,oBAAoB,CAAC,CAAC,EACpC,MAAM,EAAE,CAAC,EACT,OAAO,EAAE,2BAA2B,GACnC,MAAM,IAAI,CAkCZ;AAED,MAAM,MAAM,wBAAwB,GAAG,0BAA0B,CAAC;AAElE,wBAAgB,iBAAiB,CAAC,CAAC,EACjC,MAAM,EAAE,CAAC,EACT,OAAO,EAAE,wBAAwB,GAChC,MAAM,IAAI,CAcZ;AAED,MAAM,MAAM,oBAAoB,GAAG,+BAA+B,CAAC;AAEnE,wBAAgB,aAAa,CAAC,CAAC,EAC7B,MAAM,EAAE,WAAW,EACnB,OAAO,EAAE,oBAAoB,GAC5B,CAAC,CAOH"} |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../../src/core/errors.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAqB3C,qBAAa,YAAa,SAAQ,KAAK;IAG5B,KAAK,EAAE,GAAG;gBADjB,IAAI,EAAE,MAAM,EACL,KAAK,EAAE,GAAG;CAIpB;AAED,qBAAa,kBAAmB,SAAQ,YAAY;gBACtC,KAAK,EAAE,GAAG;CAGvB;AAED,qBAAa,yBAA0B,SAAQ,YAAY;gBAC7C,KAAK,EAAE,GAAG;CAGvB;AAED,qBAAa,2BAA4B,SAAQ,YAAY;gBAC/C,KAAK,EAAE,GAAG;CAGvB;AAED,qBAAa,2BAA4B,SAAQ,KAAK;IACjC,KAAK,EAAE,OAAO;gBAAd,KAAK,EAAE,OAAO;CASlC;AAED,qBAAa,2BAA4B,SAAQ,KAAK;gBACxC,IAAI,EAAE,WAAW;CAG9B;AAED,qBAAa,yBAA0B,SAAQ,KAAK;gBACtC,GAAG,EAAE,MAAM;CAGxB;AAED,qBAAa,2BAA4B,SAAQ,KAAK;gBACxC,GAAG,EAAE,MAAM;CAGxB;AAED,qBAAa,4BAA6B,SAAQ,KAAK;IAClC,KAAK,EAAE,OAAO;gBAAd,KAAK,EAAE,OAAO;CASlC;AAED,qBAAa,iCAAkC,SAAQ,KAAK;gBAC9C,EAAE,EAAE,MAAM;CAGvB;AAED,qBAAa,6BAA8B,SAAQ,KAAK;gBAC1C,IAAI,EAAE,MAAM;CAGzB"} | ||
| {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../../src/core/errors.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AA0C3C,qBAAa,YAAa,SAAQ,KAAK;IAG5B,KAAK,EAAE,GAAG;gBADjB,IAAI,EAAE,MAAM,EACL,KAAK,EAAE,GAAG;CAIpB;AAED,qBAAa,kBAAmB,SAAQ,YAAY;gBACtC,KAAK,EAAE,GAAG;CAGvB;AAED,qBAAa,yBAA0B,SAAQ,YAAY;gBAC7C,KAAK,EAAE,GAAG;CAGvB;AAED,qBAAa,2BAA4B,SAAQ,YAAY;gBAC/C,KAAK,EAAE,GAAG;CAGvB;AAgBD,qBAAa,2BAA4B,SAAQ,KAAK;IACjC,KAAK,EAAE,OAAO;gBAAd,KAAK,EAAE,OAAO;CAWlC;AAED,qBAAa,2BAA4B,SAAQ,KAAK;gBACxC,IAAI,EAAE,WAAW;CAO9B;AAED,qBAAa,yBAA0B,SAAQ,KAAK;gBACtC,GAAG,EAAE,MAAM;CAOxB;AAED,qBAAa,2BAA4B,SAAQ,KAAK;gBACxC,GAAG,EAAE,MAAM;CAOxB;AAED,qBAAa,4BAA6B,SAAQ,KAAK;IAClC,KAAK,EAAE,OAAO;gBAAd,KAAK,EAAE,OAAO;CAWlC;AAED,qBAAa,iCAAkC,SAAQ,KAAK;gBAC9C,EAAE,EAAE,MAAM;CAOvB;AAED,qBAAa,6BAA8B,SAAQ,KAAK;gBAC1C,IAAI,EAAE,MAAM;CAOzB"} |
@@ -1,3 +0,3 @@ | ||
| export declare function createFunction(features: number, parameters: string[], body: string): string; | ||
| export declare function createEffectfulFunction(features: number, parameters: string[], body: string): string; | ||
| export declare function createFunction(parameters: string[], body: string): string; | ||
| export declare function createEffectfulFunction(parameters: string[], body: string): string; | ||
| //# sourceMappingURL=function-string.d.ts.map |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"function-string.d.ts","sourceRoot":"","sources":["../../../src/core/function-string.ts"],"names":[],"mappings":"AAEA,wBAAgB,cAAc,CAC5B,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,EAAE,EACpB,IAAI,EAAE,MAAM,GACX,MAAM,CASR;AAED,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,EAAE,EACpB,IAAI,EAAE,MAAM,GACX,MAAM,CASR"} | ||
| {"version":3,"file":"function-string.d.ts","sourceRoot":"","sources":["../../../src/core/function-string.ts"],"names":[],"mappings":"AAQA,wBAAgB,cAAc,CAAC,UAAU,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CASzE;AAED,wBAAgB,uBAAuB,CACrC,UAAU,EAAE,MAAM,EAAE,EACpB,IAAI,EAAE,MAAM,GACX,MAAM,CASR"} |
@@ -1,7 +0,9 @@ | ||
| import type BaseDeserializerContext from './context/deserializer'; | ||
| import type BaseAsyncParserContext from './context/parser/async'; | ||
| import type BaseStreamParserContext from './context/parser/stream'; | ||
| import type BaseSyncParserContext from './context/parser/sync'; | ||
| import type BaseSerializerContext from './context/serializer'; | ||
| export type SerovalMode = 'vanilla' | 'cross'; | ||
| import type { AsyncParsePluginContext } from './context/async-parser'; | ||
| import type { DeserializePluginContext } from './context/deserializer'; | ||
| import type { SerializePluginContext } from './context/serializer'; | ||
| import type { StreamParsePluginContext, SyncParsePluginContext } from './context/sync-parser'; | ||
| export declare const enum SerovalMode { | ||
| Vanilla = 1, | ||
| Cross = 2 | ||
| } | ||
| export interface PluginData { | ||
@@ -28,5 +30,5 @@ id: number; | ||
| parse: { | ||
| sync?: (value: Value, ctx: BaseSyncParserContext, data: PluginData) => Node; | ||
| async?: (value: Value, ctx: BaseAsyncParserContext, data: PluginData) => Promise<Node>; | ||
| stream?: (value: Value, ctx: BaseStreamParserContext, data: PluginData) => Node; | ||
| sync?: (value: Value, ctx: SyncParsePluginContext, data: PluginData) => Node; | ||
| async?: (value: Value, ctx: AsyncParsePluginContext, data: PluginData) => Promise<Node>; | ||
| stream?: (value: Value, ctx: StreamParsePluginContext, data: PluginData) => Node; | ||
| }; | ||
@@ -36,7 +38,7 @@ /** | ||
| */ | ||
| serialize(node: Node, ctx: BaseSerializerContext, data: PluginData): string; | ||
| serialize(node: Node, ctx: SerializePluginContext, data: PluginData): string; | ||
| /** | ||
| * Convert the parsed node into its runtime equivalent. | ||
| */ | ||
| deserialize(node: Node, ctx: BaseDeserializerContext, data: PluginData): Value; | ||
| deserialize(node: Node, ctx: DeserializePluginContext, data: PluginData): Value; | ||
| } | ||
@@ -43,0 +45,0 @@ export declare function createPlugin<Value, Node>(plugin: Plugin<Value, Node>): Plugin<Value, Node>; |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../../../src/core/plugin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,uBAAuB,MAAM,wBAAwB,CAAC;AAClE,OAAO,KAAK,sBAAsB,MAAM,wBAAwB,CAAC;AACjE,OAAO,KAAK,uBAAuB,MAAM,yBAAyB,CAAC;AACnE,OAAO,KAAK,qBAAqB,MAAM,uBAAuB,CAAC;AAC/D,OAAO,KAAK,qBAAqB,MAAM,sBAAsB,CAAC;AAE9D,MAAM,MAAM,WAAW,GAAG,SAAS,GAAG,OAAO,CAAC;AAE9C,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;CACZ;AAED,MAAM,WAAW,MAAM,CAAC,KAAK,EAAE,IAAI;IACjC;;OAEG;IACH,GAAG,EAAE,MAAM,CAAC;IACZ;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC;IAC7B;;;OAGG;IACH,IAAI,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC;IAC9B;;OAEG;IACH,KAAK,EAAE;QACL,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,qBAAqB,EAAE,IAAI,EAAE,UAAU,KAAK,IAAI,CAAC;QAC5E,KAAK,CAAC,EAAE,CACN,KAAK,EAAE,KAAK,EACZ,GAAG,EAAE,sBAAsB,EAC3B,IAAI,EAAE,UAAU,KACb,OAAO,CAAC,IAAI,CAAC,CAAC;QACnB,MAAM,CAAC,EAAE,CACP,KAAK,EAAE,KAAK,EACZ,GAAG,EAAE,uBAAuB,EAC5B,IAAI,EAAE,UAAU,KACb,IAAI,CAAC;KACX,CAAC;IACF;;OAEG;IACH,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,qBAAqB,EAAE,IAAI,EAAE,UAAU,GAAG,MAAM,CAAC;IAC5E;;OAEG;IACH,WAAW,CACT,IAAI,EAAE,IAAI,EACV,GAAG,EAAE,uBAAuB,EAC5B,IAAI,EAAE,UAAU,GACf,KAAK,CAAC;CACV;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,IAAI,EACtC,MAAM,EAAE,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,GAC1B,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,CAErB;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,CAAC,EAAE,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC;CAC9B;AAiBD,wBAAgB,cAAc,CAC5B,OAAO,CAAC,EAAE,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,GAC3B,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,GAAG,SAAS,CAOhC"} | ||
| {"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../../../src/core/plugin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AACtE,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AACvE,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AACnE,OAAO,KAAK,EACV,wBAAwB,EACxB,sBAAsB,EACvB,MAAM,uBAAuB,CAAC;AAE/B,0BAAkB,WAAW;IAC3B,OAAO,IAAI;IACX,KAAK,IAAI;CACV;AAED,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;CACZ;AAED,MAAM,WAAW,MAAM,CAAC,KAAK,EAAE,IAAI;IACjC;;OAEG;IACH,GAAG,EAAE,MAAM,CAAC;IACZ;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC;IAC7B;;;OAGG;IACH,IAAI,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC;IAC9B;;OAEG;IACH,KAAK,EAAE;QACL,IAAI,CAAC,EAAE,CACL,KAAK,EAAE,KAAK,EACZ,GAAG,EAAE,sBAAsB,EAC3B,IAAI,EAAE,UAAU,KACb,IAAI,CAAC;QACV,KAAK,CAAC,EAAE,CACN,KAAK,EAAE,KAAK,EACZ,GAAG,EAAE,uBAAuB,EAC5B,IAAI,EAAE,UAAU,KACb,OAAO,CAAC,IAAI,CAAC,CAAC;QACnB,MAAM,CAAC,EAAE,CACP,KAAK,EAAE,KAAK,EACZ,GAAG,EAAE,wBAAwB,EAC7B,IAAI,EAAE,UAAU,KACb,IAAI,CAAC;KACX,CAAC;IACF;;OAEG;IACH,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,sBAAsB,EAAE,IAAI,EAAE,UAAU,GAAG,MAAM,CAAC;IAC7E;;OAEG;IACH,WAAW,CACT,IAAI,EAAE,IAAI,EACV,GAAG,EAAE,wBAAwB,EAC7B,IAAI,EAAE,UAAU,GACf,KAAK,CAAC;CACV;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,IAAI,EACtC,MAAM,EAAE,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,GAC1B,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,CAErB;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,CAAC,EAAE,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC;CAC9B;AAiBD,wBAAgB,cAAc,CAC5B,OAAO,CAAC,EAAE,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,GAC3B,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,GAAG,SAAS,CAOhC"} |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"reference.d.ts","sourceRoot":"","sources":["../../../src/core/reference.ts"],"names":[],"mappings":"AAUA,wBAAgB,eAAe,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,CAI1D;AAED,wBAAgB,cAAc,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,OAAO,CAEnD;AAED,wBAAgB,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAEhD;AAED,wBAAgB,cAAc,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,MAAM,CAGlD;AAED,wBAAgB,YAAY,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,GAAG,CAAC,CAG7C"} | ||
| {"version":3,"file":"reference.d.ts","sourceRoot":"","sources":["../../../src/core/reference.ts"],"names":[],"mappings":"AASA,wBAAgB,eAAe,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,CAI1D;AAED,wBAAgB,cAAc,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,OAAO,CAEnD;AAED,wBAAgB,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAEhD;AAED,wBAAgB,cAAc,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,MAAM,CAKlD;AAED,wBAAgB,YAAY,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,GAAG,CAAC,CAK7C"} |
@@ -8,3 +8,4 @@ export declare const ITERATOR: {}; | ||
| PromiseFailure = 3, | ||
| StreamConstructor = 4 | ||
| StreamConstructor = 4, | ||
| ArrayBufferConstructor = 5 | ||
| } | ||
@@ -15,3 +16,3 @@ /** | ||
| export declare const SPECIAL_REFS: Record<SpecialReference, unknown>; | ||
| export declare function serializeSpecialReferenceValue(features: number, ref: SpecialReference): string; | ||
| export declare const SPECIAL_REF_STRING: Record<SpecialReference, string>; | ||
| //# sourceMappingURL=special-reference.d.ts.map |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"special-reference.d.ts","sourceRoot":"","sources":["../../../src/core/special-reference.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,QAAQ,IAAK,CAAC;AAE3B,eAAO,MAAM,cAAc,IAAK,CAAC;AAEjC,0BAAkB,gBAAgB;IAChC,WAAW,IAAI;IACf,kBAAkB,IAAI;IACtB,cAAc,IAAI;IAClB,cAAc,IAAI;IAClB,iBAAiB,IAAI;CACtB;AAED;;GAEG;AACH,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,gBAAgB,EAAE,OAAO,CAM1D,CAAC;AAwEF,wBAAgB,8BAA8B,CAC5C,QAAQ,EAAE,MAAM,EAChB,GAAG,EAAE,gBAAgB,GACpB,MAAM,CAeR"} | ||
| {"version":3,"file":"special-reference.d.ts","sourceRoot":"","sources":["../../../src/core/special-reference.ts"],"names":[],"mappings":"AAQA,eAAO,MAAM,QAAQ,IAAK,CAAC;AAE3B,eAAO,MAAM,cAAc,IAAK,CAAC;AAEjC,0BAAkB,gBAAgB;IAChC,WAAW,IAAI;IACf,kBAAkB,IAAI;IACtB,cAAc,IAAI;IAClB,cAAc,IAAI;IAClB,iBAAiB,IAAI;IACrB,sBAAsB,IAAI;CAC3B;AAED;;GAEG;AACH,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,gBAAgB,EAAE,OAAO,CAO1D,CAAC;AAEF,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,gBAAgB,EAAE,MAAM,CAQ/D,CAAC"} |
@@ -1,2 +0,2 @@ | ||
| interface StreamListener<T> { | ||
| export interface StreamListener<T> { | ||
| next(value: T): void; | ||
@@ -17,3 +17,2 @@ throw(value: unknown): void; | ||
| export declare function streamToAsyncIterable<T>(stream: Stream<T>): () => AsyncIterableIterator<T>; | ||
| export {}; | ||
| //# sourceMappingURL=stream.d.ts.map |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"stream.d.ts","sourceRoot":"","sources":["../../../src/core/stream.ts"],"names":[],"mappings":"AAGA,UAAU,cAAc,CAAC,CAAC;IACxB,IAAI,CAAC,KAAK,EAAE,CAAC,GAAG,IAAI,CAAC;IACrB,KAAK,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,CAAC;IAC5B,MAAM,CAAC,KAAK,EAAE,CAAC,GAAG,IAAI,CAAC;CACxB;AAED,MAAM,WAAW,MAAM,CAAC,CAAC;IACvB,kBAAkB,EAAE,IAAI,CAAC;IAEzB,EAAE,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI,CAAC;IAE5C,IAAI,CAAC,KAAK,EAAE,CAAC,GAAG,IAAI,CAAC;IACrB,KAAK,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,CAAC;IAC5B,MAAM,CAAC,KAAK,EAAE,CAAC,GAAG,IAAI,CAAC;CACxB;AAED,wBAAgB,QAAQ,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,GAAG,KAAK,IAAI,MAAM,CAAC,CAAC,CAAC,CAE7D;AAED,wBAAgB,YAAY,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC,CAyE3C;AAED,wBAAgB,6BAA6B,CAAC,CAAC,EAC7C,QAAQ,EAAE,aAAa,CAAC,CAAC,CAAC,GACzB,MAAM,CAAC,CAAC,CAAC,CAwBX;AAED,wBAAgB,qBAAqB,CAAC,CAAC,EACrC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,GAChB,MAAM,qBAAqB,CAAC,CAAC,CAAC,CA4EhC"} | ||
| {"version":3,"file":"stream.d.ts","sourceRoot":"","sources":["../../../src/core/stream.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,cAAc,CAAC,CAAC;IAC/B,IAAI,CAAC,KAAK,EAAE,CAAC,GAAG,IAAI,CAAC;IACrB,KAAK,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,CAAC;IAC5B,MAAM,CAAC,KAAK,EAAE,CAAC,GAAG,IAAI,CAAC;CACxB;AAED,MAAM,WAAW,MAAM,CAAC,CAAC;IACvB,kBAAkB,EAAE,IAAI,CAAC;IAEzB,EAAE,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI,CAAC;IAE5C,IAAI,CAAC,KAAK,EAAE,CAAC,GAAG,IAAI,CAAC;IACrB,KAAK,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,CAAC;IAC5B,MAAM,CAAC,KAAK,EAAE,CAAC,GAAG,IAAI,CAAC;CACxB;AAED,wBAAgB,QAAQ,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,GAAG,KAAK,IAAI,MAAM,CAAC,CAAC,CAAC,CAE7D;AAED,wBAAgB,YAAY,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC,CAE3C;AAED,wBAAgB,6BAA6B,CAAC,CAAC,EAC7C,QAAQ,EAAE,aAAa,CAAC,CAAC,CAAC,GACzB,MAAM,CAAC,CAAC,CAAC,CAwBX;AAOD,wBAAgB,qBAAqB,CAAC,CAAC,EACrC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,GAChB,MAAM,qBAAqB,CAAC,CAAC,CAAC,CAIhC"} |
@@ -0,5 +1,6 @@ | ||
| import type { BaseParserContextOptions } from '../context/parser'; | ||
| import { type PluginAccessOptions } from '../plugin'; | ||
| import type { SerovalNode } from '../types'; | ||
| import type { AsyncParserContextOptions } from './async'; | ||
| import type { SyncParserContextOptions } from './sync'; | ||
| export type SyncParserContextOptions = Omit<BaseParserContextOptions, 'refs'>; | ||
| export type AsyncParserContextOptions = Omit<BaseParserContextOptions, 'refs'>; | ||
| export declare function serialize<T>(source: T, options?: SyncParserContextOptions): string; | ||
@@ -6,0 +7,0 @@ export declare function serializeAsync<T>(source: T, options?: AsyncParserContextOptions): Promise<string>; |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/core/tree/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,mBAAmB,EAAkB,MAAM,WAAW,CAAC;AACrE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAC5C,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,SAAS,CAAC;AAIzD,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,QAAQ,CAAC;AAGvD,wBAAgB,SAAS,CAAC,CAAC,EACzB,MAAM,EAAE,CAAC,EACT,OAAO,GAAE,wBAA6B,GACrC,MAAM,CAaR;AAED,wBAAsB,cAAc,CAAC,CAAC,EACpC,MAAM,EAAE,CAAC,EACT,OAAO,GAAE,yBAA8B,GACtC,OAAO,CAAC,MAAM,CAAC,CAajB;AAED,wBAAgB,WAAW,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,GAAG,CAAC,CAEhD;AAED,MAAM,WAAW,WAAW;IAC1B,CAAC,EAAE,WAAW,CAAC;IACf,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,EAAE,CAAC;CACb;AAED,wBAAgB,MAAM,CAAC,CAAC,EACtB,MAAM,EAAE,CAAC,EACT,OAAO,GAAE,wBAA6B,GACrC,WAAW,CAWb;AAED,wBAAsB,WAAW,CAAC,CAAC,EACjC,MAAM,EAAE,CAAC,EACT,OAAO,GAAE,yBAA8B,GACtC,OAAO,CAAC,WAAW,CAAC,CAWtB;AAED,wBAAgB,WAAW,CACzB,MAAM,EAAE,WAAW,EACnB,OAAO,GAAE,mBAAwB,GAChC,MAAM,CAQR;AAED,wBAAgB,QAAQ,CAAC,CAAC,EACxB,MAAM,EAAE,WAAW,EACnB,OAAO,GAAE,mBAAwB,GAChC,CAAC,CAOH"} | ||
| {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/core/tree/index.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,mBAAmB,CAAC;AAMlE,OAAO,EACL,KAAK,mBAAmB,EAGzB,MAAM,WAAW,CAAC;AACnB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAC5C,MAAM,MAAM,wBAAwB,GAAG,IAAI,CAAC,wBAAwB,EAAE,MAAM,CAAC,CAAC;AAC9E,MAAM,MAAM,yBAAyB,GAAG,IAAI,CAAC,wBAAwB,EAAE,MAAM,CAAC,CAAC;AAE/E,wBAAgB,SAAS,CAAC,CAAC,EACzB,MAAM,EAAE,CAAC,EACT,OAAO,GAAE,wBAA6B,GACrC,MAAM,CAaR;AAED,wBAAsB,cAAc,CAAC,CAAC,EACpC,MAAM,EAAE,CAAC,EACT,OAAO,GAAE,yBAA8B,GACtC,OAAO,CAAC,MAAM,CAAC,CAajB;AAED,wBAAgB,WAAW,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,GAAG,CAAC,CAEhD;AAED,MAAM,WAAW,WAAW;IAC1B,CAAC,EAAE,WAAW,CAAC;IACf,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,EAAE,CAAC;CACb;AAED,wBAAgB,MAAM,CAAC,CAAC,EACtB,MAAM,EAAE,CAAC,EACT,OAAO,GAAE,wBAA6B,GACrC,WAAW,CAWb;AAED,wBAAsB,WAAW,CAAC,CAAC,EACjC,MAAM,EAAE,CAAC,EACT,OAAO,GAAE,yBAA8B,GACtC,OAAO,CAAC,WAAW,CAAC,CAWtB;AAED,wBAAgB,WAAW,CACzB,MAAM,EAAE,WAAW,EACnB,OAAO,GAAE,mBAAwB,GAChC,MAAM,CAQR;AAED,wBAAgB,QAAQ,CAAC,CAAC,EACxB,MAAM,EAAE,WAAW,EACnB,OAAO,GAAE,mBAAwB,GAChC,CAAC,CAOH"} |
@@ -63,3 +63,5 @@ import type { ErrorConstructorTag, SerovalConstant, SerovalNodeType, SerovalObjectFlags, Symbols } from './constants'; | ||
| i: number; | ||
| s: number[]; | ||
| s: string; | ||
| l: number; | ||
| f: SerovalNodeWithID; | ||
| } | ||
@@ -66,0 +68,0 @@ export interface SerovalTypedArrayNode extends SerovalBaseNode { |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/core/types.ts"],"names":[],"mappings":"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"} | ||
| {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/core/types.ts"],"names":[],"mappings":"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"} |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"iterator-to-sequence.d.ts","sourceRoot":"","sources":["../../../../src/core/utils/iterator-to-sequence.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,QAAQ;IACvB,CAAC,EAAE,OAAO,EAAE,CAAC;IACb,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;CACX;AAED,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,QAAQ,CA0BnE;AAED,wBAAgB,kBAAkB,CAAC,CAAC,EAClC,QAAQ,EAAE,QAAQ,GACjB,MAAM,gBAAgB,CAAC,CAAC,CAAC,CA2B3B"} | ||
| {"version":3,"file":"iterator-to-sequence.d.ts","sourceRoot":"","sources":["../../../../src/core/utils/iterator-to-sequence.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,QAAQ;IACvB,CAAC,EAAE,OAAO,EAAE,CAAC;IACb,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;CACX;AAED,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,QAAQ,CA0BnE;AAID,wBAAgB,kBAAkB,CAAC,CAAC,EAClC,QAAQ,EAAE,QAAQ,GACjB,MAAM,gBAAgB,CAAC,CAAC,CAAC,CAE3B"} |
| export { Feature } from './core/compat'; | ||
| export { createReference } from './core/reference'; | ||
| export type { AsyncParsePluginContext, AsyncParserContextOptions, } from './core/context/async-parser'; | ||
| export type { BaseDeserializerContextOptions, CrossDeserializerContextOptions, DeserializePluginContext, VanillaDeserializerContextOptions, } from './core/context/deserializer'; | ||
| export type { BaseParserContextOptions } from './core/context/parser'; | ||
| export type { BaseSerializerContextOptions, CrossContextOptions, CrossSerializerContextOptions, SerializePluginContext, VanillaSerializerContextOptions, } from './core/context/serializer'; | ||
| export type { StreamParsePluginContext, StreamParserContextOptions, SyncParsePluginContext, SyncParserContextOptions, } from './core/context/sync-parser'; | ||
| export * from './core/cross'; | ||
| export * from './core/tree'; | ||
| export * from './core/errors'; | ||
| export { getCrossReferenceHeader } from './core/keys'; | ||
| export { OpaqueReference } from './core/opaque-reference'; | ||
| export * from './core/plugin'; | ||
| export { createReference } from './core/reference'; | ||
| export { default as Serializer } from './core/Serializer'; | ||
| export { createStream } from './core/stream'; | ||
| export type { Stream } from './core/stream'; | ||
| export * from './core/errors'; | ||
| export type { Stream, StreamListener } from './core/stream'; | ||
| export * from './core/tree'; | ||
| export type { SerovalNode } from './core/types'; | ||
| export { OpaqueReference } from './core/opaque-reference'; | ||
| //# sourceMappingURL=index.d.ts.map |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAEnD,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAE5B,OAAO,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAC;AAEtD,cAAc,eAAe,CAAC;AAC9B,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAE1D,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,YAAY,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAE5C,cAAc,eAAe,CAAC;AAC9B,YAAY,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAEhD,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC"} | ||
| {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,YAAY,EACV,uBAAuB,EACvB,yBAAyB,GAC1B,MAAM,6BAA6B,CAAC;AACrC,YAAY,EACV,8BAA8B,EAC9B,+BAA+B,EAC/B,wBAAwB,EACxB,iCAAiC,GAClC,MAAM,6BAA6B,CAAC;AACrC,YAAY,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AACtE,YAAY,EACV,4BAA4B,EAC5B,mBAAmB,EACnB,6BAA6B,EAC7B,sBAAsB,EACtB,+BAA+B,GAChC,MAAM,2BAA2B,CAAC;AACnC,YAAY,EACV,wBAAwB,EACxB,0BAA0B,EAC1B,sBAAsB,EACtB,wBAAwB,GACzB,MAAM,4BAA4B,CAAC;AACpC,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,OAAO,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,cAAc,eAAe,CAAC;AAC9B,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,YAAY,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC5D,cAAc,aAAa,CAAC;AAC5B,YAAY,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC"} |
+17
-19
| { | ||
| "name": "seroval", | ||
| "type": "module", | ||
| "version": "1.3.2", | ||
| "version": "1.4.0", | ||
| "files": [ | ||
@@ -17,22 +17,10 @@ "dist", | ||
| "devDependencies": { | ||
| "@types/node": "^22.15.12", | ||
| "@vitest/ui": "^3.1.3", | ||
| "@types/node": "^24.10.0", | ||
| "@vitest/ui": "^4.0.6", | ||
| "pridepack": "2.6.4", | ||
| "ts-prune": "^0.10.3", | ||
| "tslib": "^2.8.1", | ||
| "typescript": "^5.8.3", | ||
| "vitest": "^3.1.3" | ||
| "typescript": "^5.9.3", | ||
| "vitest": "^4.0.6" | ||
| }, | ||
| "scripts": { | ||
| "prepublishOnly": "pridepack clean && pridepack build", | ||
| "build": "pridepack build", | ||
| "type-check": "pridepack check", | ||
| "clean": "pridepack clean", | ||
| "watch": "pridepack watch", | ||
| "start": "pridepack start", | ||
| "dev": "pridepack dev", | ||
| "test": "vitest", | ||
| "test:ui": "vitest --ui", | ||
| "prune": "ts-prune" | ||
| }, | ||
| "private": false, | ||
@@ -69,3 +57,13 @@ "description": "Stringify JS values", | ||
| }, | ||
| "gitHead": "c1e47dd1233aaec1d4fae82c5776c31d5850def9" | ||
| } | ||
| "scripts": { | ||
| "build": "pridepack build", | ||
| "type-check": "pridepack check", | ||
| "clean": "pridepack clean", | ||
| "watch": "pridepack watch", | ||
| "start": "pridepack start", | ||
| "dev": "pridepack dev", | ||
| "test": "vitest", | ||
| "test:ui": "vitest --ui", | ||
| "prune": "ts-prune" | ||
| } | ||
| } |
@@ -14,3 +14,2 @@ import type { WellKnownSymbols } from './constants'; | ||
| SerovalAggregateErrorNode, | ||
| SerovalArrayBufferNode, | ||
| SerovalArrayNode, | ||
@@ -170,28 +169,2 @@ SerovalAsyncIteratorFactoryInstanceNode, | ||
| export function createArrayBufferNode( | ||
| id: number, | ||
| current: ArrayBuffer, | ||
| ): SerovalArrayBufferNode { | ||
| const bytes = new Uint8Array(current); | ||
| const len = bytes.length; | ||
| const values = new Array<number>(len); | ||
| for (let i = 0; i < len; i++) { | ||
| values[i] = bytes[i]; | ||
| } | ||
| return createSerovalNode( | ||
| SerovalNodeType.ArrayBuffer, | ||
| id, | ||
| values, | ||
| NIL, | ||
| NIL, | ||
| NIL, | ||
| NIL, | ||
| NIL, | ||
| NIL, | ||
| NIL, | ||
| NIL, | ||
| NIL, | ||
| ); | ||
| } | ||
| export function createWKSymbolNode( | ||
@@ -198,0 +171,0 @@ id: number, |
@@ -7,4 +7,5 @@ /** | ||
| export const enum Feature { | ||
| export enum Feature { | ||
| AggregateError = 0x01, | ||
| // @deprecated | ||
| ArrowFunction = 0x02, | ||
@@ -11,0 +12,0 @@ ErrorPrototypeStack = 0x04, |
+28
-26
@@ -0,1 +1,3 @@ | ||
| import { SYM_ASYNC_ITERATOR, SYM_HAS_INSTANCE, SYM_IS_CONCAT_SPREADABLE, SYM_ITERATOR, SYM_MATCH, SYM_MATCH_ALL, SYM_REPLACE, SYM_SEARCH, SYM_SPECIES, SYM_SPLIT, SYM_TO_PRIMITIVE, SYM_TO_STRING_TAG, SYM_UNSCOPABLES } from "./symbols"; | ||
| export const enum SerovalConstant { | ||
@@ -90,15 +92,15 @@ Null = 0, | ||
| export const INV_SYMBOL_REF = /* @__PURE__ */ { | ||
| [Symbol.asyncIterator]: Symbols.AsyncIterator, | ||
| [Symbol.hasInstance]: Symbols.HasInstance, | ||
| [Symbol.isConcatSpreadable]: Symbols.IsConcatSpreadable, | ||
| [Symbol.iterator]: Symbols.Iterator, | ||
| [Symbol.match]: Symbols.Match, | ||
| [Symbol.matchAll]: Symbols.MatchAll, | ||
| [Symbol.replace]: Symbols.Replace, | ||
| [Symbol.search]: Symbols.Search, | ||
| [Symbol.species]: Symbols.Species, | ||
| [Symbol.split]: Symbols.Split, | ||
| [Symbol.toPrimitive]: Symbols.ToPrimitive, | ||
| [Symbol.toStringTag]: Symbols.ToStringTag, | ||
| [Symbol.unscopables]: Symbols.Unscopables, | ||
| [SYM_ASYNC_ITERATOR]: Symbols.AsyncIterator, | ||
| [SYM_HAS_INSTANCE]: Symbols.HasInstance, | ||
| [SYM_IS_CONCAT_SPREADABLE]: Symbols.IsConcatSpreadable, | ||
| [SYM_ITERATOR]: Symbols.Iterator, | ||
| [SYM_MATCH]: Symbols.Match, | ||
| [SYM_MATCH_ALL]: Symbols.MatchAll, | ||
| [SYM_REPLACE]: Symbols.Replace, | ||
| [SYM_SEARCH]: Symbols.Search, | ||
| [SYM_SPECIES]: Symbols.Species, | ||
| [SYM_SPLIT]: Symbols.Split, | ||
| [SYM_TO_PRIMITIVE]: Symbols.ToPrimitive, | ||
| [SYM_TO_STRING_TAG]: Symbols.ToStringTag, | ||
| [SYM_UNSCOPABLES]: Symbols.Unscopables, | ||
| }; | ||
@@ -109,15 +111,15 @@ | ||
| export const SYMBOL_REF: Record<Symbols, WellKnownSymbols> = { | ||
| [Symbols.AsyncIterator]: Symbol.asyncIterator, | ||
| [Symbols.HasInstance]: Symbol.hasInstance, | ||
| [Symbols.IsConcatSpreadable]: Symbol.isConcatSpreadable, | ||
| [Symbols.Iterator]: Symbol.iterator, | ||
| [Symbols.Match]: Symbol.match, | ||
| [Symbols.MatchAll]: Symbol.matchAll, | ||
| [Symbols.Replace]: Symbol.replace, | ||
| [Symbols.Search]: Symbol.search, | ||
| [Symbols.Species]: Symbol.species, | ||
| [Symbols.Split]: Symbol.split, | ||
| [Symbols.ToPrimitive]: Symbol.toPrimitive, | ||
| [Symbols.ToStringTag]: Symbol.toStringTag, | ||
| [Symbols.Unscopables]: Symbol.unscopables, | ||
| [Symbols.AsyncIterator]: SYM_ASYNC_ITERATOR, | ||
| [Symbols.HasInstance]: SYM_HAS_INSTANCE, | ||
| [Symbols.IsConcatSpreadable]: SYM_IS_CONCAT_SPREADABLE, | ||
| [Symbols.Iterator]: SYM_ITERATOR, | ||
| [Symbols.Match]: SYM_MATCH, | ||
| [Symbols.MatchAll]: SYM_MATCH_ALL, | ||
| [Symbols.Replace]: SYM_REPLACE, | ||
| [Symbols.Search]: SYM_SEARCH, | ||
| [Symbols.Species]: SYM_SPECIES, | ||
| [Symbols.Split]: SYM_SPLIT, | ||
| [Symbols.ToPrimitive]: SYM_TO_PRIMITIVE, | ||
| [Symbols.ToStringTag]: SYM_TO_STRING_TAG, | ||
| [Symbols.Unscopables]: SYM_UNSCOPABLES, | ||
| }; | ||
@@ -124,0 +126,0 @@ |
+504
-314
| import { | ||
| CONSTANT_VAL, | ||
| ERROR_CONSTRUCTOR, | ||
| SYMBOL_REF, | ||
| SerovalNodeType, | ||
| SerovalObjectFlags, | ||
| SYMBOL_REF, | ||
| } from '../constants'; | ||
| import { | ||
| ARRAY_BUFFER_CONSTRUCTOR, | ||
| PROMISE_CONSTRUCTOR, | ||
| type PromiseConstructorResolver, | ||
| } from '../constructors'; | ||
| import { | ||
| SerovalDeserializationError, | ||
@@ -14,3 +19,4 @@ SerovalMissingInstanceError, | ||
| } from '../errors'; | ||
| import type { Plugin, PluginAccessOptions, SerovalMode } from '../plugin'; | ||
| import type { PluginAccessOptions } from '../plugin'; | ||
| import { SerovalMode } from '../plugin'; | ||
| import { getReference } from '../reference'; | ||
@@ -53,5 +59,2 @@ import type { Stream } from '../stream'; | ||
| } from '../types'; | ||
| import assert from '../utils/assert'; | ||
| import type { Deferred } from '../utils/deferred'; | ||
| import { createDeferred } from '../utils/deferred'; | ||
| import type { Sequence } from '../utils/iterator-to-sequence'; | ||
@@ -81,379 +84,566 @@ import { sequenceToIterator } from '../utils/iterator-to-sequence'; | ||
| export interface BaseDeserializerOptions extends PluginAccessOptions { | ||
| export interface BaseDeserializerContextOptions extends PluginAccessOptions { | ||
| refs?: Map<number, unknown>; | ||
| } | ||
| export default abstract class BaseDeserializerContext | ||
| implements PluginAccessOptions | ||
| { | ||
| abstract readonly mode: SerovalMode; | ||
| export interface BaseDeserializerContext extends PluginAccessOptions { | ||
| readonly mode: SerovalMode; | ||
| /** | ||
| * Mapping ids to values | ||
| * @private | ||
| */ | ||
| refs: Map<number, unknown>; | ||
| } | ||
| plugins?: Plugin<any, any>[] | undefined; | ||
| export function createBaseDeserializerContext( | ||
| mode: SerovalMode, | ||
| options: BaseDeserializerContextOptions, | ||
| ): BaseDeserializerContext { | ||
| return { | ||
| mode, | ||
| plugins: options.plugins, | ||
| refs: options.refs || new Map(), | ||
| }; | ||
| } | ||
| constructor(options: BaseDeserializerOptions) { | ||
| this.plugins = options.plugins; | ||
| this.refs = options.refs || new Map<number, unknown>(); | ||
| } | ||
| export interface VanillaDeserializerContextOptions | ||
| extends Omit<BaseDeserializerContextOptions, 'refs'> { | ||
| markedRefs: number[] | Set<number>; | ||
| } | ||
| protected abstract assignIndexedValue<T>(id: number, value: T): T; | ||
| export interface VanillaDeserializerState { | ||
| marked: Set<number>; | ||
| } | ||
| private deserializeReference(node: SerovalReferenceNode): unknown { | ||
| return this.assignIndexedValue( | ||
| node.i, | ||
| getReference(deserializeString(node.s)), | ||
| ); | ||
| } | ||
| export interface VanillaDeserializerContext { | ||
| mode: SerovalMode.Vanilla; | ||
| base: BaseDeserializerContext; | ||
| child: DeserializePluginContext | undefined; | ||
| state: VanillaDeserializerState; | ||
| } | ||
| private deserializeArray(node: SerovalArrayNode): unknown[] { | ||
| const len = node.l; | ||
| const result: unknown[] = this.assignIndexedValue( | ||
| node.i, | ||
| new Array<unknown>(len), | ||
| ); | ||
| let item: SerovalNode | undefined; | ||
| for (let i = 0; i < len; i++) { | ||
| item = node.a[i]; | ||
| if (item) { | ||
| result[i] = this.deserialize(item); | ||
| } | ||
| } | ||
| applyObjectFlag(result, node.o); | ||
| return result; | ||
| } | ||
| export function createVanillaDeserializerContext( | ||
| options: VanillaDeserializerContextOptions, | ||
| ): VanillaDeserializerContext { | ||
| return { | ||
| mode: SerovalMode.Vanilla, | ||
| base: createBaseDeserializerContext(SerovalMode.Vanilla, options), | ||
| child: undefined, | ||
| state: { | ||
| marked: new Set(options.markedRefs), | ||
| }, | ||
| }; | ||
| } | ||
| private deserializeProperties( | ||
| node: SerovalObjectRecordNode, | ||
| result: Record<string | symbol, unknown>, | ||
| ): Record<string | symbol, unknown> { | ||
| const len = node.s; | ||
| if (len) { | ||
| const keys = node.k; | ||
| const vals = node.v; | ||
| for (let i = 0, key: SerovalObjectRecordKey; i < len; i++) { | ||
| key = keys[i]; | ||
| if (typeof key === 'string') { | ||
| result[deserializeString(key)] = this.deserialize(vals[i]); | ||
| } else { | ||
| result[this.deserialize(key) as symbol] = this.deserialize(vals[i]); | ||
| } | ||
| } | ||
| } | ||
| return result; | ||
| } | ||
| export interface CrossDeserializerContext { | ||
| mode: SerovalMode.Cross; | ||
| base: BaseDeserializerContext; | ||
| child: DeserializePluginContext | undefined; | ||
| } | ||
| private deserializeObject( | ||
| node: SerovalObjectNode | SerovalNullConstructorNode, | ||
| ): Record<string, unknown> { | ||
| const result = this.assignIndexedValue( | ||
| node.i, | ||
| (node.t === SerovalNodeType.Object ? {} : Object.create(null)) as Record< | ||
| string, | ||
| unknown | ||
| >, | ||
| ); | ||
| this.deserializeProperties(node.p, result); | ||
| applyObjectFlag(result, node.o); | ||
| return result; | ||
| export type CrossDeserializerContextOptions = BaseDeserializerContextOptions; | ||
| export function createCrossDeserializerContext( | ||
| options: CrossDeserializerContextOptions, | ||
| ): CrossDeserializerContext { | ||
| return { | ||
| mode: SerovalMode.Cross, | ||
| base: createBaseDeserializerContext(SerovalMode.Cross, options), | ||
| child: undefined, | ||
| }; | ||
| } | ||
| type DeserializerContext = | ||
| | VanillaDeserializerContext | ||
| | CrossDeserializerContext; | ||
| export class DeserializePluginContext { | ||
| constructor(private _p: DeserializerContext) {} | ||
| deserialize<T>(node: SerovalNode): T { | ||
| return deserialize(this._p, node) as T; | ||
| } | ||
| } | ||
| private deserializeDate(node: SerovalDateNode): Date { | ||
| return this.assignIndexedValue(node.i, new Date(node.s)); | ||
| function assignIndexedValueVanilla<T>( | ||
| ctx: VanillaDeserializerContext, | ||
| id: number, | ||
| value: T, | ||
| ): T { | ||
| if (ctx.state.marked.has(id)) { | ||
| ctx.base.refs.set(id, value); | ||
| } | ||
| return value; | ||
| } | ||
| private deserializeRegExp(node: SerovalRegExpNode): RegExp { | ||
| return this.assignIndexedValue( | ||
| node.i, | ||
| new RegExp(deserializeString(node.c), node.m), | ||
| ); | ||
| function assignIndexedValueCross<T>( | ||
| ctx: CrossDeserializerContext, | ||
| id: number, | ||
| value: T, | ||
| ): T { | ||
| if (!ctx.base.refs.has(id)) { | ||
| ctx.base.refs.set(id, value); | ||
| } | ||
| return value; | ||
| } | ||
| private deserializeSet(node: SerovalSetNode): Set<unknown> { | ||
| const result = this.assignIndexedValue(node.i, new Set<unknown>()); | ||
| const items = node.a; | ||
| for (let i = 0, len = node.l; i < len; i++) { | ||
| result.add(this.deserialize(items[i])); | ||
| function assignIndexedValue<T>( | ||
| ctx: DeserializerContext, | ||
| id: number, | ||
| value: T, | ||
| ): T { | ||
| return ctx.mode === SerovalMode.Vanilla | ||
| ? assignIndexedValueVanilla(ctx, id, value) | ||
| : assignIndexedValueCross(ctx, id, value); | ||
| } | ||
| function deserializeReference( | ||
| ctx: DeserializerContext, | ||
| node: SerovalReferenceNode, | ||
| ): unknown { | ||
| return assignIndexedValue( | ||
| ctx, | ||
| node.i, | ||
| getReference(deserializeString(node.s)), | ||
| ); | ||
| } | ||
| function deserializeArray( | ||
| ctx: DeserializerContext, | ||
| node: SerovalArrayNode, | ||
| ): unknown[] { | ||
| const len = node.l; | ||
| const result: unknown[] = assignIndexedValue( | ||
| ctx, | ||
| node.i, | ||
| new Array<unknown>(len), | ||
| ); | ||
| let item: SerovalNode | undefined; | ||
| for (let i = 0; i < len; i++) { | ||
| item = node.a[i]; | ||
| if (item) { | ||
| result[i] = deserialize(ctx, item); | ||
| } | ||
| return result; | ||
| } | ||
| applyObjectFlag(result, node.o); | ||
| return result; | ||
| } | ||
| private deserializeMap(node: SerovalMapNode): Map<unknown, unknown> { | ||
| const result = this.assignIndexedValue(node.i, new Map<unknown, unknown>()); | ||
| const keys = node.e.k; | ||
| const vals = node.e.v; | ||
| for (let i = 0, len = node.e.s; i < len; i++) { | ||
| result.set(this.deserialize(keys[i]), this.deserialize(vals[i])); | ||
| function deserializeProperties( | ||
| ctx: DeserializerContext, | ||
| node: SerovalObjectRecordNode, | ||
| result: Record<string | symbol, unknown>, | ||
| ): Record<string | symbol, unknown> { | ||
| const len = node.s; | ||
| if (len) { | ||
| const keys = node.k; | ||
| const vals = node.v; | ||
| for (let i = 0, key: SerovalObjectRecordKey; i < len; i++) { | ||
| key = keys[i]; | ||
| if (typeof key === 'string') { | ||
| result[deserializeString(key)] = deserialize(ctx, vals[i]); | ||
| } else { | ||
| result[deserialize(ctx, key) as symbol] = deserialize(ctx, vals[i]); | ||
| } | ||
| } | ||
| return result; | ||
| } | ||
| return result; | ||
| } | ||
| private deserializeArrayBuffer(node: SerovalArrayBufferNode): ArrayBuffer { | ||
| const bytes = new Uint8Array(node.s); | ||
| const result = this.assignIndexedValue(node.i, bytes.buffer); | ||
| return result; | ||
| } | ||
| function deserializeObject( | ||
| ctx: DeserializerContext, | ||
| node: SerovalObjectNode | SerovalNullConstructorNode, | ||
| ): Record<string, unknown> { | ||
| const result = assignIndexedValue( | ||
| ctx, | ||
| node.i, | ||
| (node.t === SerovalNodeType.Object ? {} : Object.create(null)) as Record< | ||
| string, | ||
| unknown | ||
| >, | ||
| ); | ||
| deserializeProperties(ctx, node.p, result); | ||
| applyObjectFlag(result, node.o); | ||
| return result; | ||
| } | ||
| private deserializeTypedArray( | ||
| node: SerovalTypedArrayNode | SerovalBigIntTypedArrayNode, | ||
| ): TypedArrayValue | BigIntTypedArrayValue { | ||
| const construct = getTypedArrayConstructor(node.c) as Int8ArrayConstructor; | ||
| const source = this.deserialize(node.f) as ArrayBuffer; | ||
| const result = this.assignIndexedValue( | ||
| node.i, | ||
| new construct(source, node.b, node.l), | ||
| ); | ||
| return result; | ||
| } | ||
| function deserializeDate( | ||
| ctx: DeserializerContext, | ||
| node: SerovalDateNode, | ||
| ): Date { | ||
| return assignIndexedValue(ctx, node.i, new Date(node.s)); | ||
| } | ||
| private deserializeDataView(node: SerovalDataViewNode): DataView { | ||
| const source = this.deserialize(node.f) as ArrayBuffer; | ||
| const result = this.assignIndexedValue( | ||
| node.i, | ||
| new DataView(source, node.b, node.l), | ||
| ); | ||
| return result; | ||
| } | ||
| function deserializeRegExp( | ||
| ctx: DeserializerContext, | ||
| node: SerovalRegExpNode, | ||
| ): RegExp { | ||
| return assignIndexedValue( | ||
| ctx, | ||
| node.i, | ||
| new RegExp(deserializeString(node.c), node.m), | ||
| ); | ||
| } | ||
| private deserializeDictionary<T extends AssignableValue>( | ||
| node: AssignableNode, | ||
| result: T, | ||
| ): T { | ||
| if (node.p) { | ||
| const fields = this.deserializeProperties(node.p, {}); | ||
| Object.assign(result, fields); | ||
| } | ||
| return result; | ||
| function deserializeSet( | ||
| ctx: DeserializerContext, | ||
| node: SerovalSetNode, | ||
| ): Set<unknown> { | ||
| const result = assignIndexedValue(ctx, node.i, new Set<unknown>()); | ||
| const items = node.a; | ||
| for (let i = 0, len = node.l; i < len; i++) { | ||
| result.add(deserialize(ctx, items[i])); | ||
| } | ||
| return result; | ||
| } | ||
| private deserializeAggregateError( | ||
| node: SerovalAggregateErrorNode, | ||
| ): AggregateError { | ||
| // Serialize the required arguments | ||
| const result = this.assignIndexedValue( | ||
| node.i, | ||
| new AggregateError([], deserializeString(node.m)), | ||
| ); | ||
| // `AggregateError` might've been extended | ||
| // either through class or custom properties | ||
| // Make sure to assign extra properties | ||
| return this.deserializeDictionary(node, result); | ||
| function deserializeMap( | ||
| ctx: DeserializerContext, | ||
| node: SerovalMapNode, | ||
| ): Map<unknown, unknown> { | ||
| const result = assignIndexedValue(ctx, node.i, new Map<unknown, unknown>()); | ||
| const keys = node.e.k; | ||
| const vals = node.e.v; | ||
| for (let i = 0, len = node.e.s; i < len; i++) { | ||
| result.set(deserialize(ctx, keys[i]), deserialize(ctx, vals[i])); | ||
| } | ||
| return result; | ||
| } | ||
| private deserializeError(node: SerovalErrorNode): Error { | ||
| const construct = ERROR_CONSTRUCTOR[node.s]; | ||
| const result = this.assignIndexedValue( | ||
| node.i, | ||
| new construct(deserializeString(node.m)), | ||
| ); | ||
| return this.deserializeDictionary(node, result); | ||
| } | ||
| function deserializeArrayBuffer( | ||
| ctx: DeserializerContext, | ||
| node: SerovalArrayBufferNode, | ||
| ): ArrayBuffer { | ||
| const result = assignIndexedValue( | ||
| ctx, | ||
| node.i, | ||
| ARRAY_BUFFER_CONSTRUCTOR(node.l, deserializeString(node.s)), | ||
| ); | ||
| return result; | ||
| } | ||
| private deserializePromise(node: SerovalPromiseNode): Promise<unknown> { | ||
| const deferred = createDeferred(); | ||
| const result = this.assignIndexedValue(node.i, deferred); | ||
| const deserialized = this.deserialize(node.f); | ||
| if (node.s) { | ||
| deferred.resolve(deserialized); | ||
| } else { | ||
| deferred.reject(deserialized); | ||
| } | ||
| return result.promise; | ||
| function deserializeTypedArray( | ||
| ctx: DeserializerContext, | ||
| node: SerovalTypedArrayNode | SerovalBigIntTypedArrayNode, | ||
| ): TypedArrayValue | BigIntTypedArrayValue { | ||
| const construct = getTypedArrayConstructor(node.c) as Int8ArrayConstructor; | ||
| const source = deserialize(ctx, node.f) as ArrayBuffer; | ||
| const result = assignIndexedValue( | ||
| ctx, | ||
| node.i, | ||
| new construct(source, node.b, node.l), | ||
| ); | ||
| return result; | ||
| } | ||
| function deserializeDataView( | ||
| ctx: DeserializerContext, | ||
| node: SerovalDataViewNode, | ||
| ): DataView { | ||
| const source = deserialize(ctx, node.f) as ArrayBuffer; | ||
| const result = assignIndexedValue( | ||
| ctx, | ||
| node.i, | ||
| new DataView(source, node.b, node.l), | ||
| ); | ||
| return result; | ||
| } | ||
| function deserializeDictionary<T extends AssignableValue>( | ||
| ctx: DeserializerContext, | ||
| node: AssignableNode, | ||
| result: T, | ||
| ): T { | ||
| if (node.p) { | ||
| const fields = deserializeProperties(ctx, node.p, {}); | ||
| Object.assign(result, fields); | ||
| } | ||
| return result; | ||
| } | ||
| private deserializeBoxed(node: SerovalBoxedNode): unknown { | ||
| return this.assignIndexedValue(node.i, Object(this.deserialize(node.f))); | ||
| function deserializeAggregateError( | ||
| ctx: DeserializerContext, | ||
| node: SerovalAggregateErrorNode, | ||
| ): AggregateError { | ||
| // Serialize the required arguments | ||
| const result = assignIndexedValue( | ||
| ctx, | ||
| node.i, | ||
| new AggregateError([], deserializeString(node.m)), | ||
| ); | ||
| // `AggregateError` might've been extended | ||
| // either through class or custom properties | ||
| // Make sure to assign extra properties | ||
| return deserializeDictionary(ctx, node, result); | ||
| } | ||
| function deserializeError( | ||
| ctx: DeserializerContext, | ||
| node: SerovalErrorNode, | ||
| ): Error { | ||
| const construct = ERROR_CONSTRUCTOR[node.s]; | ||
| const result = assignIndexedValue( | ||
| ctx, | ||
| node.i, | ||
| new construct(deserializeString(node.m)), | ||
| ); | ||
| return deserializeDictionary(ctx, node, result); | ||
| } | ||
| function deserializePromise( | ||
| ctx: DeserializerContext, | ||
| node: SerovalPromiseNode, | ||
| ): Promise<unknown> { | ||
| const deferred = PROMISE_CONSTRUCTOR(); | ||
| const result = assignIndexedValue(ctx, node.i, deferred.p); | ||
| const deserialized = deserialize(ctx, node.f); | ||
| if (node.s) { | ||
| deferred.s(deserialized); | ||
| } else { | ||
| deferred.f(deserialized); | ||
| } | ||
| return result; | ||
| } | ||
| private deserializePlugin(node: SerovalPluginNode): unknown { | ||
| const currentPlugins = this.plugins; | ||
| if (currentPlugins) { | ||
| const tag = deserializeString(node.c); | ||
| for (let i = 0, len = currentPlugins.length; i < len; i++) { | ||
| const plugin = currentPlugins[i]; | ||
| if (plugin.tag === tag) { | ||
| return this.assignIndexedValue( | ||
| node.i, | ||
| plugin.deserialize(node.s, this, { | ||
| id: node.i, | ||
| }), | ||
| ); | ||
| function deserializeBoxed( | ||
| ctx: DeserializerContext, | ||
| node: SerovalBoxedNode, | ||
| ): unknown { | ||
| // biome-ignore lint/style/useConsistentBuiltinInstantiation: intended | ||
| return assignIndexedValue(ctx, node.i, Object(deserialize(ctx, node.f))); | ||
| } | ||
| function deserializePlugin( | ||
| ctx: DeserializerContext, | ||
| node: SerovalPluginNode, | ||
| ): unknown { | ||
| const currentPlugins = ctx.base.plugins; | ||
| if (currentPlugins) { | ||
| const tag = deserializeString(node.c); | ||
| for (let i = 0, len = currentPlugins.length; i < len; i++) { | ||
| const plugin = currentPlugins[i]; | ||
| if (plugin.tag === tag) { | ||
| if (ctx.child == null) { | ||
| ctx.child = new DeserializePluginContext(ctx); | ||
| } | ||
| return assignIndexedValue( | ||
| ctx, | ||
| node.i, | ||
| plugin.deserialize(node.s, ctx.child, { | ||
| id: node.i, | ||
| }), | ||
| ); | ||
| } | ||
| } | ||
| throw new SerovalMissingPluginError(node.c); | ||
| } | ||
| throw new SerovalMissingPluginError(node.c); | ||
| } | ||
| private deserializePromiseConstructor( | ||
| node: SerovalPromiseConstructorNode, | ||
| ): unknown { | ||
| return this.assignIndexedValue( | ||
| node.i, | ||
| this.assignIndexedValue(node.s, createDeferred()).promise, | ||
| ); | ||
| } | ||
| function deserializePromiseConstructor( | ||
| ctx: DeserializerContext, | ||
| node: SerovalPromiseConstructorNode, | ||
| ): unknown { | ||
| return assignIndexedValue( | ||
| ctx, | ||
| node.i, | ||
| assignIndexedValue(ctx, node.s, PROMISE_CONSTRUCTOR()).p, | ||
| ); | ||
| } | ||
| private deserializePromiseResolve(node: SerovalPromiseResolveNode): unknown { | ||
| const deferred = this.refs.get(node.i) as Deferred | undefined; | ||
| assert(deferred, new SerovalMissingInstanceError('Promise')); | ||
| deferred.resolve(this.deserialize(node.a[1])); | ||
| function deserializePromiseResolve( | ||
| ctx: DeserializerContext, | ||
| node: SerovalPromiseResolveNode, | ||
| ): unknown { | ||
| const deferred = ctx.base.refs.get(node.i) as | ||
| | PromiseConstructorResolver | ||
| | undefined; | ||
| if (deferred) { | ||
| deferred.s(deserialize(ctx, node.a[1])); | ||
| return undefined; | ||
| } | ||
| throw new SerovalMissingInstanceError('Promise'); | ||
| } | ||
| private deserializePromiseReject(node: SerovalPromiseRejectNode): unknown { | ||
| const deferred = this.refs.get(node.i) as Deferred | undefined; | ||
| assert(deferred, new SerovalMissingInstanceError('Promise')); | ||
| deferred.reject(this.deserialize(node.a[1])); | ||
| function deserializePromiseReject( | ||
| ctx: DeserializerContext, | ||
| node: SerovalPromiseRejectNode, | ||
| ): unknown { | ||
| const deferred = ctx.base.refs.get(node.i) as | ||
| | PromiseConstructorResolver | ||
| | undefined; | ||
| if (deferred) { | ||
| deferred.f(deserialize(ctx, node.a[1])); | ||
| return undefined; | ||
| } | ||
| throw new SerovalMissingInstanceError('Promise'); | ||
| } | ||
| private deserializeIteratorFactoryInstance( | ||
| node: SerovalIteratorFactoryInstanceNode, | ||
| ): unknown { | ||
| this.deserialize(node.a[0]); | ||
| const source = this.deserialize(node.a[1]); | ||
| return sequenceToIterator(source as Sequence); | ||
| } | ||
| function deserializeIteratorFactoryInstance( | ||
| ctx: DeserializerContext, | ||
| node: SerovalIteratorFactoryInstanceNode, | ||
| ): unknown { | ||
| deserialize(ctx, node.a[0]); | ||
| const source = deserialize(ctx, node.a[1]); | ||
| return sequenceToIterator(source as Sequence); | ||
| } | ||
| private deserializeAsyncIteratorFactoryInstance( | ||
| node: SerovalAsyncIteratorFactoryInstanceNode, | ||
| ): unknown { | ||
| this.deserialize(node.a[0]); | ||
| const source = this.deserialize(node.a[1]); | ||
| return streamToAsyncIterable(source as Stream<any>); | ||
| } | ||
| function deserializeAsyncIteratorFactoryInstance( | ||
| ctx: DeserializerContext, | ||
| node: SerovalAsyncIteratorFactoryInstanceNode, | ||
| ): unknown { | ||
| deserialize(ctx, node.a[0]); | ||
| const source = deserialize(ctx, node.a[1]); | ||
| return streamToAsyncIterable(source as Stream<any>); | ||
| } | ||
| private deserializeStreamConstructor( | ||
| node: SerovalStreamConstructorNode, | ||
| ): unknown { | ||
| const result = this.assignIndexedValue(node.i, createStream()); | ||
| const len = node.a.length; | ||
| if (len) { | ||
| for (let i = 0; i < len; i++) { | ||
| this.deserialize(node.a[i]); | ||
| } | ||
| function deserializeStreamConstructor( | ||
| ctx: DeserializerContext, | ||
| node: SerovalStreamConstructorNode, | ||
| ): unknown { | ||
| const result = assignIndexedValue(ctx, node.i, createStream()); | ||
| const len = node.a.length; | ||
| if (len) { | ||
| for (let i = 0; i < len; i++) { | ||
| deserialize(ctx, node.a[i]); | ||
| } | ||
| return result; | ||
| } | ||
| return result; | ||
| } | ||
| private deserializeStreamNext(node: SerovalStreamNextNode): unknown { | ||
| const deferred = this.refs.get(node.i) as Stream<unknown> | undefined; | ||
| assert(deferred, new SerovalMissingInstanceError('Stream')); | ||
| deferred.next(this.deserialize(node.f)); | ||
| function deserializeStreamNext( | ||
| ctx: DeserializerContext, | ||
| node: SerovalStreamNextNode, | ||
| ): unknown { | ||
| const deferred = ctx.base.refs.get(node.i) as Stream<unknown> | undefined; | ||
| if (deferred) { | ||
| deferred.next(deserialize(ctx, node.f)); | ||
| return undefined; | ||
| } | ||
| throw new SerovalMissingInstanceError('Stream'); | ||
| } | ||
| private deserializeStreamThrow(node: SerovalStreamThrowNode): unknown { | ||
| const deferred = this.refs.get(node.i) as Stream<unknown> | undefined; | ||
| assert(deferred, new SerovalMissingInstanceError('Stream')); | ||
| deferred.throw(this.deserialize(node.f)); | ||
| function deserializeStreamThrow( | ||
| ctx: DeserializerContext, | ||
| node: SerovalStreamThrowNode, | ||
| ): unknown { | ||
| const deferred = ctx.base.refs.get(node.i) as Stream<unknown> | undefined; | ||
| if (deferred) { | ||
| deferred.throw(deserialize(ctx, node.f)); | ||
| return undefined; | ||
| } | ||
| throw new SerovalMissingInstanceError('Stream'); | ||
| } | ||
| private deserializeStreamReturn(node: SerovalStreamReturnNode): unknown { | ||
| const deferred = this.refs.get(node.i) as Stream<unknown> | undefined; | ||
| assert(deferred, new SerovalMissingInstanceError('Stream')); | ||
| deferred.return(this.deserialize(node.f)); | ||
| function deserializeStreamReturn( | ||
| ctx: DeserializerContext, | ||
| node: SerovalStreamReturnNode, | ||
| ): unknown { | ||
| const deferred = ctx.base.refs.get(node.i) as Stream<unknown> | undefined; | ||
| if (deferred) { | ||
| deferred.return(deserialize(ctx, node.f)); | ||
| return undefined; | ||
| } | ||
| throw new SerovalMissingInstanceError('Stream'); | ||
| } | ||
| private deserializeIteratorFactory( | ||
| node: SerovalIteratorFactoryNode, | ||
| ): unknown { | ||
| this.deserialize(node.f); | ||
| return undefined; | ||
| } | ||
| function deserializeIteratorFactory( | ||
| ctx: DeserializerContext, | ||
| node: SerovalIteratorFactoryNode, | ||
| ): unknown { | ||
| deserialize(ctx, node.f); | ||
| return undefined; | ||
| } | ||
| private deserializeAsyncIteratorFactory( | ||
| node: SerovalAsyncIteratorFactoryNode, | ||
| ): unknown { | ||
| this.deserialize(node.a[1]); | ||
| return undefined; | ||
| function deserializeAsyncIteratorFactory( | ||
| ctx: DeserializerContext, | ||
| node: SerovalAsyncIteratorFactoryNode, | ||
| ): unknown { | ||
| deserialize(ctx, node.a[1]); | ||
| return undefined; | ||
| } | ||
| export function deserialize( | ||
| ctx: DeserializerContext, | ||
| node: SerovalNode, | ||
| ): unknown { | ||
| switch (node.t) { | ||
| case SerovalNodeType.Constant: | ||
| return CONSTANT_VAL[node.s]; | ||
| case SerovalNodeType.Number: | ||
| return node.s; | ||
| case SerovalNodeType.String: | ||
| return deserializeString(node.s); | ||
| case SerovalNodeType.BigInt: | ||
| return BigInt(node.s); | ||
| case SerovalNodeType.IndexedValue: | ||
| return ctx.base.refs.get(node.i); | ||
| case SerovalNodeType.Reference: | ||
| return deserializeReference(ctx, node); | ||
| case SerovalNodeType.Array: | ||
| return deserializeArray(ctx, node); | ||
| case SerovalNodeType.Object: | ||
| case SerovalNodeType.NullConstructor: | ||
| return deserializeObject(ctx, node); | ||
| case SerovalNodeType.Date: | ||
| return deserializeDate(ctx, node); | ||
| case SerovalNodeType.RegExp: | ||
| return deserializeRegExp(ctx, node); | ||
| case SerovalNodeType.Set: | ||
| return deserializeSet(ctx, node); | ||
| case SerovalNodeType.Map: | ||
| return deserializeMap(ctx, node); | ||
| case SerovalNodeType.ArrayBuffer: | ||
| return deserializeArrayBuffer(ctx, node); | ||
| case SerovalNodeType.BigIntTypedArray: | ||
| case SerovalNodeType.TypedArray: | ||
| return deserializeTypedArray(ctx, node); | ||
| case SerovalNodeType.DataView: | ||
| return deserializeDataView(ctx, node); | ||
| case SerovalNodeType.AggregateError: | ||
| return deserializeAggregateError(ctx, node); | ||
| case SerovalNodeType.Error: | ||
| return deserializeError(ctx, node); | ||
| case SerovalNodeType.Promise: | ||
| return deserializePromise(ctx, node); | ||
| case SerovalNodeType.WKSymbol: | ||
| return SYMBOL_REF[node.s]; | ||
| case SerovalNodeType.Boxed: | ||
| return deserializeBoxed(ctx, node); | ||
| case SerovalNodeType.Plugin: | ||
| return deserializePlugin(ctx, node); | ||
| case SerovalNodeType.PromiseConstructor: | ||
| return deserializePromiseConstructor(ctx, node); | ||
| case SerovalNodeType.PromiseSuccess: | ||
| return deserializePromiseResolve(ctx, node); | ||
| case SerovalNodeType.PromiseFailure: | ||
| return deserializePromiseReject(ctx, node); | ||
| case SerovalNodeType.IteratorFactoryInstance: | ||
| return deserializeIteratorFactoryInstance(ctx, node); | ||
| case SerovalNodeType.AsyncIteratorFactoryInstance: | ||
| return deserializeAsyncIteratorFactoryInstance(ctx, node); | ||
| case SerovalNodeType.StreamConstructor: | ||
| return deserializeStreamConstructor(ctx, node); | ||
| case SerovalNodeType.StreamNext: | ||
| return deserializeStreamNext(ctx, node); | ||
| case SerovalNodeType.StreamThrow: | ||
| return deserializeStreamThrow(ctx, node); | ||
| case SerovalNodeType.StreamReturn: | ||
| return deserializeStreamReturn(ctx, node); | ||
| case SerovalNodeType.IteratorFactory: | ||
| return deserializeIteratorFactory(ctx, node); | ||
| case SerovalNodeType.AsyncIteratorFactory: | ||
| return deserializeAsyncIteratorFactory(ctx, node); | ||
| // case SerovalNodeType.SpecialReference: | ||
| default: | ||
| throw new SerovalUnsupportedNodeError(node); | ||
| } | ||
| } | ||
| deserializeTop(node: SerovalNode): unknown { | ||
| try { | ||
| return this.deserialize(node); | ||
| } catch (error) { | ||
| throw new SerovalDeserializationError(error); | ||
| } | ||
| export function deserializeTop( | ||
| ctx: DeserializerContext, | ||
| node: SerovalNode, | ||
| ): unknown { | ||
| try { | ||
| return deserialize(ctx, node); | ||
| } catch (error) { | ||
| throw new SerovalDeserializationError(error); | ||
| } | ||
| deserialize(node: SerovalNode): unknown { | ||
| switch (node.t) { | ||
| case SerovalNodeType.Constant: | ||
| return CONSTANT_VAL[node.s]; | ||
| case SerovalNodeType.Number: | ||
| return node.s; | ||
| case SerovalNodeType.String: | ||
| return deserializeString(node.s); | ||
| case SerovalNodeType.BigInt: | ||
| return BigInt(node.s); | ||
| case SerovalNodeType.IndexedValue: | ||
| return this.refs.get(node.i); | ||
| case SerovalNodeType.Reference: | ||
| return this.deserializeReference(node); | ||
| case SerovalNodeType.Array: | ||
| return this.deserializeArray(node); | ||
| case SerovalNodeType.Object: | ||
| case SerovalNodeType.NullConstructor: | ||
| return this.deserializeObject(node); | ||
| case SerovalNodeType.Date: | ||
| return this.deserializeDate(node); | ||
| case SerovalNodeType.RegExp: | ||
| return this.deserializeRegExp(node); | ||
| case SerovalNodeType.Set: | ||
| return this.deserializeSet(node); | ||
| case SerovalNodeType.Map: | ||
| return this.deserializeMap(node); | ||
| case SerovalNodeType.ArrayBuffer: | ||
| return this.deserializeArrayBuffer(node); | ||
| case SerovalNodeType.BigIntTypedArray: | ||
| case SerovalNodeType.TypedArray: | ||
| return this.deserializeTypedArray(node); | ||
| case SerovalNodeType.DataView: | ||
| return this.deserializeDataView(node); | ||
| case SerovalNodeType.AggregateError: | ||
| return this.deserializeAggregateError(node); | ||
| case SerovalNodeType.Error: | ||
| return this.deserializeError(node); | ||
| case SerovalNodeType.Promise: | ||
| return this.deserializePromise(node); | ||
| case SerovalNodeType.WKSymbol: | ||
| return SYMBOL_REF[node.s]; | ||
| case SerovalNodeType.Boxed: | ||
| return this.deserializeBoxed(node); | ||
| case SerovalNodeType.Plugin: | ||
| return this.deserializePlugin(node); | ||
| case SerovalNodeType.PromiseConstructor: | ||
| return this.deserializePromiseConstructor(node); | ||
| case SerovalNodeType.PromiseSuccess: | ||
| return this.deserializePromiseResolve(node); | ||
| case SerovalNodeType.PromiseFailure: | ||
| return this.deserializePromiseReject(node); | ||
| case SerovalNodeType.IteratorFactoryInstance: | ||
| return this.deserializeIteratorFactoryInstance(node); | ||
| case SerovalNodeType.AsyncIteratorFactoryInstance: | ||
| return this.deserializeAsyncIteratorFactoryInstance(node); | ||
| case SerovalNodeType.StreamConstructor: | ||
| return this.deserializeStreamConstructor(node); | ||
| case SerovalNodeType.StreamNext: | ||
| return this.deserializeStreamNext(node); | ||
| case SerovalNodeType.StreamThrow: | ||
| return this.deserializeStreamThrow(node); | ||
| case SerovalNodeType.StreamReturn: | ||
| return this.deserializeStreamReturn(node); | ||
| case SerovalNodeType.IteratorFactory: | ||
| return this.deserializeIteratorFactory(node); | ||
| case SerovalNodeType.AsyncIteratorFactory: | ||
| return this.deserializeAsyncIteratorFactory(node); | ||
| // case SerovalNodeType.SpecialReference: | ||
| default: | ||
| throw new SerovalUnsupportedNodeError(node); | ||
| } | ||
| } | ||
| } |
+243
-180
@@ -11,3 +11,3 @@ import { | ||
| import { createSerovalNode } from '../node'; | ||
| import type { Plugin, PluginAccessOptions, SerovalMode } from '../plugin'; | ||
| import type { PluginAccessOptions, SerovalMode } from '../plugin'; | ||
| import { hasReferenceID } from '../reference'; | ||
@@ -20,3 +20,6 @@ import { | ||
| } from '../special-reference'; | ||
| import { serializeString } from '../string'; | ||
| import { SYM_ASYNC_ITERATOR, SYM_ITERATOR } from '../symbols'; | ||
| import type { | ||
| SerovalArrayBufferNode, | ||
| SerovalAsyncIteratorFactoryNode, | ||
@@ -35,3 +38,2 @@ SerovalIndexedValueNode, | ||
| } from '../types'; | ||
| import assert from '../utils/assert'; | ||
| import { getObjectFlag } from '../utils/get-object-flag'; | ||
@@ -67,208 +69,269 @@ | ||
| export abstract class BaseParserContext implements PluginAccessOptions { | ||
| abstract readonly mode: SerovalMode; | ||
| export interface BaseParserContext extends PluginAccessOptions { | ||
| readonly mode: SerovalMode; | ||
| features: number; | ||
| marked: Set<number>; | ||
| marked = new Set<number>(); | ||
| refs: Map<unknown, number>; | ||
| plugins?: Plugin<any, any>[] | undefined; | ||
| features: number; | ||
| } | ||
| constructor(options: BaseParserContextOptions) { | ||
| this.plugins = options.plugins; | ||
| this.features = ALL_ENABLED ^ (options.disabledFeatures || 0); | ||
| this.refs = options.refs || new Map<unknown, number>(); | ||
| } | ||
| export function createBaseParserContext( | ||
| mode: SerovalMode, | ||
| options: BaseParserContextOptions, | ||
| ): BaseParserContext { | ||
| return { | ||
| plugins: options.plugins, | ||
| mode, | ||
| marked: new Set(), | ||
| features: ALL_ENABLED ^ (options.disabledFeatures || 0), | ||
| refs: options.refs || new Map(), | ||
| }; | ||
| } | ||
| protected markRef(id: number): void { | ||
| this.marked.add(id); | ||
| } | ||
| /** | ||
| * Ensures that the value (based on an identifier) has been visited by the parser. | ||
| * @param ctx | ||
| * @param id | ||
| */ | ||
| export function markParserRef(ctx: BaseParserContext, id: number): void { | ||
| ctx.marked.add(id); | ||
| } | ||
| protected isMarked(id: number): boolean { | ||
| return this.marked.has(id); | ||
| } | ||
| export function isParserRefMarked(ctx: BaseParserContext, id: number): boolean { | ||
| return ctx.marked.has(id); | ||
| } | ||
| protected createIndex<T>(current: T): number { | ||
| const id = this.refs.size; | ||
| this.refs.set(current, id); | ||
| return id; | ||
| } | ||
| /** | ||
| * Creates an identifier for a value | ||
| * @param ctx | ||
| * @param current | ||
| */ | ||
| export function createIndexForValue<T>( | ||
| ctx: BaseParserContext, | ||
| current: T, | ||
| ): number { | ||
| const id = ctx.refs.size; | ||
| ctx.refs.set(current, id); | ||
| return id; | ||
| } | ||
| protected getIndexedValue<T>(current: T): FreshNode | IndexedNode { | ||
| const registeredId = this.refs.get(current); | ||
| if (registeredId != null) { | ||
| this.markRef(registeredId); | ||
| return { | ||
| type: ParserNodeType.Indexed, | ||
| value: createIndexedValueNode(registeredId), | ||
| }; | ||
| } | ||
| export function getNodeForIndexedValue<T>( | ||
| ctx: BaseParserContext, | ||
| current: T, | ||
| ): FreshNode | IndexedNode { | ||
| const registeredId = ctx.refs.get(current); | ||
| if (registeredId != null) { | ||
| markParserRef(ctx, registeredId); | ||
| return { | ||
| type: ParserNodeType.Fresh, | ||
| value: this.createIndex(current), | ||
| type: ParserNodeType.Indexed, | ||
| value: createIndexedValueNode(registeredId), | ||
| }; | ||
| } | ||
| return { | ||
| type: ParserNodeType.Fresh, | ||
| value: createIndexForValue(ctx, current), | ||
| }; | ||
| } | ||
| protected getReference<T>(current: T): ObjectNode { | ||
| const indexed = this.getIndexedValue(current); | ||
| if (indexed.type === ParserNodeType.Indexed) { | ||
| return indexed; | ||
| } | ||
| if (hasReferenceID(current)) { | ||
| return { | ||
| type: ParserNodeType.Referenced, | ||
| value: createReferenceNode(indexed.value, current), | ||
| }; | ||
| } | ||
| export function getReferenceNode<T>( | ||
| ctx: BaseParserContext, | ||
| current: T, | ||
| ): ObjectNode { | ||
| const indexed = getNodeForIndexedValue(ctx, current); | ||
| if (indexed.type === ParserNodeType.Indexed) { | ||
| return indexed; | ||
| } | ||
| // Special references are special ;) | ||
| if (hasReferenceID(current)) { | ||
| return { | ||
| type: ParserNodeType.Referenced, | ||
| value: createReferenceNode(indexed.value, current), | ||
| }; | ||
| } | ||
| return indexed; | ||
| } | ||
| protected parseWellKnownSymbol( | ||
| current: symbol, | ||
| ): SerovalIndexedValueNode | SerovalWKSymbolNode | SerovalReferenceNode { | ||
| const ref = this.getReference(current); | ||
| if (ref.type !== ParserNodeType.Fresh) { | ||
| return ref.value; | ||
| } | ||
| assert(current in INV_SYMBOL_REF, new SerovalUnsupportedTypeError(current)); | ||
| /** | ||
| * Parsing methods | ||
| */ | ||
| export function parseWellKnownSymbol( | ||
| ctx: BaseParserContext, | ||
| current: symbol, | ||
| ): SerovalIndexedValueNode | SerovalWKSymbolNode | SerovalReferenceNode { | ||
| const ref = getReferenceNode(ctx, current); | ||
| if (ref.type !== ParserNodeType.Fresh) { | ||
| return ref.value; | ||
| } | ||
| if (current in INV_SYMBOL_REF) { | ||
| return createWKSymbolNode(ref.value, current as WellKnownSymbols); | ||
| } | ||
| throw new SerovalUnsupportedTypeError(current); | ||
| } | ||
| protected parseSpecialReference( | ||
| ref: SpecialReference, | ||
| ): SerovalIndexedValueNode | SerovalSpecialReferenceNode { | ||
| const result = this.getIndexedValue(SPECIAL_REFS[ref]); | ||
| if (result.type === ParserNodeType.Indexed) { | ||
| return result.value; | ||
| } | ||
| return createSerovalNode( | ||
| SerovalNodeType.SpecialReference, | ||
| result.value, | ||
| ref, | ||
| NIL, | ||
| NIL, | ||
| NIL, | ||
| NIL, | ||
| NIL, | ||
| NIL, | ||
| NIL, | ||
| NIL, | ||
| NIL, | ||
| ); | ||
| export function parseSpecialReference( | ||
| ctx: BaseParserContext, | ||
| ref: SpecialReference, | ||
| ): SerovalIndexedValueNode | SerovalSpecialReferenceNode { | ||
| const result = getNodeForIndexedValue(ctx, SPECIAL_REFS[ref]); | ||
| if (result.type === ParserNodeType.Indexed) { | ||
| return result.value; | ||
| } | ||
| return createSerovalNode( | ||
| SerovalNodeType.SpecialReference, | ||
| result.value, | ||
| ref, | ||
| NIL, | ||
| NIL, | ||
| NIL, | ||
| NIL, | ||
| NIL, | ||
| NIL, | ||
| NIL, | ||
| NIL, | ||
| NIL, | ||
| ); | ||
| } | ||
| protected parseIteratorFactory(): | ||
| | SerovalIndexedValueNode | ||
| | SerovalIteratorFactoryNode { | ||
| const result = this.getIndexedValue(ITERATOR); | ||
| if (result.type === ParserNodeType.Indexed) { | ||
| return result.value; | ||
| } | ||
| return createSerovalNode( | ||
| SerovalNodeType.IteratorFactory, | ||
| result.value, | ||
| NIL, | ||
| NIL, | ||
| NIL, | ||
| NIL, | ||
| NIL, | ||
| NIL, | ||
| NIL, | ||
| this.parseWellKnownSymbol(Symbol.iterator), | ||
| NIL, | ||
| NIL, | ||
| ); | ||
| export function parseIteratorFactory( | ||
| ctx: BaseParserContext, | ||
| ): SerovalIndexedValueNode | SerovalIteratorFactoryNode { | ||
| const result = getNodeForIndexedValue(ctx, ITERATOR); | ||
| if (result.type === ParserNodeType.Indexed) { | ||
| return result.value; | ||
| } | ||
| return createSerovalNode( | ||
| SerovalNodeType.IteratorFactory, | ||
| result.value, | ||
| NIL, | ||
| NIL, | ||
| NIL, | ||
| NIL, | ||
| NIL, | ||
| NIL, | ||
| NIL, | ||
| parseWellKnownSymbol(ctx, SYM_ITERATOR), | ||
| NIL, | ||
| NIL, | ||
| ); | ||
| } | ||
| protected parseAsyncIteratorFactory(): | ||
| | SerovalIndexedValueNode | ||
| | SerovalAsyncIteratorFactoryNode { | ||
| const result = this.getIndexedValue(ASYNC_ITERATOR); | ||
| if (result.type === ParserNodeType.Indexed) { | ||
| return result.value; | ||
| } | ||
| return createSerovalNode( | ||
| SerovalNodeType.AsyncIteratorFactory, | ||
| result.value, | ||
| NIL, | ||
| NIL, | ||
| NIL, | ||
| NIL, | ||
| NIL, | ||
| NIL, | ||
| [ | ||
| this.parseSpecialReference(SpecialReference.PromiseConstructor), | ||
| this.parseWellKnownSymbol(Symbol.asyncIterator), | ||
| ], | ||
| NIL, | ||
| NIL, | ||
| NIL, | ||
| ); | ||
| export function parseAsyncIteratorFactory( | ||
| ctx: BaseParserContext, | ||
| ): SerovalIndexedValueNode | SerovalAsyncIteratorFactoryNode { | ||
| const result = getNodeForIndexedValue(ctx, ASYNC_ITERATOR); | ||
| if (result.type === ParserNodeType.Indexed) { | ||
| return result.value; | ||
| } | ||
| return createSerovalNode( | ||
| SerovalNodeType.AsyncIteratorFactory, | ||
| result.value, | ||
| NIL, | ||
| NIL, | ||
| NIL, | ||
| NIL, | ||
| NIL, | ||
| NIL, | ||
| [ | ||
| parseSpecialReference(ctx, SpecialReference.PromiseConstructor), | ||
| parseWellKnownSymbol(ctx, SYM_ASYNC_ITERATOR), | ||
| ], | ||
| NIL, | ||
| NIL, | ||
| NIL, | ||
| ); | ||
| } | ||
| protected createObjectNode( | ||
| id: number, | ||
| current: Record<string, unknown>, | ||
| empty: boolean, | ||
| record: SerovalObjectRecordNode, | ||
| ): SerovalObjectNode | SerovalNullConstructorNode { | ||
| return createSerovalNode( | ||
| empty ? SerovalNodeType.NullConstructor : SerovalNodeType.Object, | ||
| id, | ||
| NIL, | ||
| NIL, | ||
| NIL, | ||
| NIL, | ||
| record, | ||
| NIL, | ||
| NIL, | ||
| NIL, | ||
| NIL, | ||
| getObjectFlag(current), | ||
| ); | ||
| } | ||
| export function createObjectNode( | ||
| id: number, | ||
| current: Record<string, unknown>, | ||
| empty: boolean, | ||
| record: SerovalObjectRecordNode, | ||
| ): SerovalObjectNode | SerovalNullConstructorNode { | ||
| return createSerovalNode( | ||
| empty ? SerovalNodeType.NullConstructor : SerovalNodeType.Object, | ||
| id, | ||
| NIL, | ||
| NIL, | ||
| NIL, | ||
| NIL, | ||
| record, | ||
| NIL, | ||
| NIL, | ||
| NIL, | ||
| NIL, | ||
| getObjectFlag(current), | ||
| ); | ||
| } | ||
| protected createMapNode( | ||
| id: number, | ||
| k: SerovalNode[], | ||
| v: SerovalNode[], | ||
| s: number, | ||
| ): SerovalMapNode { | ||
| return createSerovalNode( | ||
| SerovalNodeType.Map, | ||
| id, | ||
| NIL, | ||
| NIL, | ||
| NIL, | ||
| NIL, | ||
| NIL, | ||
| { k, v, s }, | ||
| NIL, | ||
| this.parseSpecialReference(SpecialReference.MapSentinel), | ||
| NIL, | ||
| NIL, | ||
| ); | ||
| } | ||
| export function createMapNode( | ||
| ctx: BaseParserContext, | ||
| id: number, | ||
| k: SerovalNode[], | ||
| v: SerovalNode[], | ||
| s: number, | ||
| ): SerovalMapNode { | ||
| return createSerovalNode( | ||
| SerovalNodeType.Map, | ||
| id, | ||
| NIL, | ||
| NIL, | ||
| NIL, | ||
| NIL, | ||
| NIL, | ||
| { k, v, s }, | ||
| NIL, | ||
| parseSpecialReference(ctx, SpecialReference.MapSentinel), | ||
| NIL, | ||
| NIL, | ||
| ); | ||
| } | ||
| protected createPromiseConstructorNode( | ||
| id: number, | ||
| resolver: number, | ||
| ): SerovalPromiseConstructorNode { | ||
| return createSerovalNode( | ||
| SerovalNodeType.PromiseConstructor, | ||
| id, | ||
| resolver, | ||
| NIL, | ||
| NIL, | ||
| NIL, | ||
| NIL, | ||
| NIL, | ||
| NIL, | ||
| this.parseSpecialReference(SpecialReference.PromiseConstructor), | ||
| NIL, | ||
| NIL, | ||
| ); | ||
| export function createPromiseConstructorNode( | ||
| ctx: BaseParserContext, | ||
| id: number, | ||
| resolver: number, | ||
| ): SerovalPromiseConstructorNode { | ||
| return createSerovalNode( | ||
| SerovalNodeType.PromiseConstructor, | ||
| id, | ||
| resolver, | ||
| NIL, | ||
| NIL, | ||
| NIL, | ||
| NIL, | ||
| NIL, | ||
| NIL, | ||
| parseSpecialReference(ctx, SpecialReference.PromiseConstructor), | ||
| NIL, | ||
| NIL, | ||
| ); | ||
| } | ||
| export function createArrayBufferNode( | ||
| ctx: BaseParserContext, | ||
| id: number, | ||
| current: ArrayBuffer, | ||
| ): SerovalArrayBufferNode { | ||
| const bytes = new Uint8Array(current); | ||
| const len = bytes.length; | ||
| let result = ''; | ||
| for (let i = 0; i < len; i++) { | ||
| result += String.fromCharCode(bytes[i]); | ||
| } | ||
| return createSerovalNode( | ||
| SerovalNodeType.ArrayBuffer, | ||
| id, | ||
| serializeString(btoa(result)), | ||
| len, | ||
| NIL, | ||
| NIL, | ||
| NIL, | ||
| NIL, | ||
| NIL, | ||
| parseSpecialReference(ctx, SpecialReference.ArrayBufferConstructor), | ||
| NIL, | ||
| NIL, | ||
| ); | ||
| } |
+1057
-826
@@ -6,7 +6,11 @@ import { Feature } from '../compat'; | ||
| NIL, | ||
| SYMBOL_STRING, | ||
| SerovalNodeType, | ||
| SerovalObjectFlags, | ||
| SYMBOL_STRING, | ||
| } from '../constants'; | ||
| import { | ||
| SERIALIZED_ASYNC_ITERATOR_CONSTRUCTOR, | ||
| SERIALIZED_ITERATOR_CONSTRUCTOR, | ||
| } from '../constructors'; | ||
| import { | ||
| SerovalMissingPluginError, | ||
@@ -17,5 +21,7 @@ SerovalSerializationError, | ||
| import { createEffectfulFunction, createFunction } from '../function-string'; | ||
| import { REFERENCES_KEY } from '../keys'; | ||
| import type { Plugin, PluginAccessOptions, SerovalMode } from '../plugin'; | ||
| import { serializeSpecialReferenceValue } from '../special-reference'; | ||
| import { GLOBAL_CONTEXT_REFERENCES, REFERENCES_KEY } from '../keys'; | ||
| import type { PluginAccessOptions } from '../plugin'; | ||
| import { SerovalMode } from '../plugin'; | ||
| import { SPECIAL_REF_STRING } from '../special-reference'; | ||
| import { serializeString } from '../string'; | ||
| import type { | ||
@@ -50,3 +56,2 @@ SerovalAggregateErrorNode, | ||
| SerovalSetNode, | ||
| SerovalSpecialReferenceNode, | ||
| SerovalStreamConstructorNode, | ||
@@ -57,4 +62,4 @@ SerovalStreamNextNode, | ||
| SerovalTypedArrayNode, | ||
| SerovalWKSymbolNode, | ||
| } from '../types'; | ||
| import getIdentifier from '../utils/get-identifier'; | ||
| import { isValidIdentifier } from '../utils/is-valid-identifier'; | ||
@@ -215,314 +220,373 @@ | ||
| export default abstract class BaseSerializerContext | ||
| implements PluginAccessOptions | ||
| { | ||
| /** | ||
| * @private | ||
| */ | ||
| export interface BaseSerializerContext extends PluginAccessOptions { | ||
| readonly mode: SerovalMode; | ||
| features: number; | ||
| /** | ||
| /* | ||
| * To check if an object is synchronously referencing itself | ||
| * @private | ||
| */ | ||
| stack: number[] = []; | ||
| stack: number[]; | ||
| /** | ||
| * Array of object mutations | ||
| * @private | ||
| */ | ||
| flags: FlaggedObject[] = []; | ||
| flags: FlaggedObject[]; | ||
| /** | ||
| * Array of assignments to be done (used for recursion) | ||
| * @private | ||
| */ | ||
| assignments: Assignment[] = []; | ||
| plugins?: Plugin<any, any>[] | undefined; | ||
| assignments: Assignment[]; | ||
| /** | ||
| * Refs that are...referenced | ||
| * @private | ||
| */ | ||
| marked: Set<number>; | ||
| } | ||
| constructor(options: BaseSerializerContextOptions) { | ||
| this.plugins = options.plugins; | ||
| this.features = options.features; | ||
| this.marked = new Set(options.markedRefs); | ||
| } | ||
| export interface CrossContextOptions { | ||
| scopeId?: string; | ||
| } | ||
| abstract readonly mode: SerovalMode; | ||
| export function createBaseSerializerContext( | ||
| mode: SerovalMode, | ||
| options: BaseSerializerContextOptions, | ||
| ): BaseSerializerContext { | ||
| return { | ||
| mode, | ||
| plugins: options.plugins, | ||
| features: options.features, | ||
| marked: new Set(options.markedRefs), | ||
| stack: [], | ||
| flags: [], | ||
| assignments: [], | ||
| }; | ||
| } | ||
| createFunction(parameters: string[], body: string): string { | ||
| return createFunction(this.features, parameters, body); | ||
| } | ||
| export interface VanillaSerializerState { | ||
| valid: Map<number, number>; | ||
| vars: string[]; | ||
| } | ||
| createEffectfulFunction(parameters: string[], body: string): string { | ||
| return createEffectfulFunction(this.features, parameters, body); | ||
| } | ||
| function createVanillaSerializerState(): VanillaSerializerState { | ||
| return { | ||
| valid: new Map(), | ||
| vars: [], | ||
| }; | ||
| } | ||
| /** | ||
| * A tiny function that tells if a reference | ||
| * is to be accessed. This is a requirement for | ||
| * deciding whether or not we should generate | ||
| * an identifier for the object | ||
| */ | ||
| protected markRef(id: number): void { | ||
| this.marked.add(id); | ||
| } | ||
| export interface VanillaSerializerContext { | ||
| mode: SerovalMode.Vanilla; | ||
| base: BaseSerializerContext; | ||
| state: VanillaSerializerState; | ||
| child: SerializePluginContext | undefined; | ||
| } | ||
| protected isMarked(id: number): boolean { | ||
| return this.marked.has(id); | ||
| } | ||
| export type VanillaSerializerContextOptions = BaseSerializerContextOptions; | ||
| /** | ||
| * Converts the ID of a reference into a identifier string | ||
| * that is used to refer to the object instance in the | ||
| * generated script. | ||
| */ | ||
| abstract getRefParam(id: number): string; | ||
| export function createVanillaSerializerContext( | ||
| options: VanillaSerializerContextOptions, | ||
| ): VanillaSerializerContext { | ||
| return { | ||
| mode: SerovalMode.Vanilla, | ||
| base: createBaseSerializerContext(SerovalMode.Vanilla, options), | ||
| state: createVanillaSerializerState(), | ||
| child: undefined, | ||
| }; | ||
| } | ||
| protected pushObjectFlag(flag: SerovalObjectFlags, id: number): void { | ||
| if (flag !== SerovalObjectFlags.None) { | ||
| this.markRef(id); | ||
| this.flags.push({ | ||
| type: flag, | ||
| value: this.getRefParam(id), | ||
| }); | ||
| } | ||
| } | ||
| export interface CrossSerializerContext { | ||
| mode: SerovalMode.Cross; | ||
| base: BaseSerializerContext; | ||
| state: CrossContextOptions; | ||
| child: SerializePluginContext | undefined; | ||
| } | ||
| private resolveFlags(): string | undefined { | ||
| let result = ''; | ||
| for (let i = 0, current = this.flags, len = current.length; i < len; i++) { | ||
| const flag = current[i]; | ||
| result += OBJECT_FLAG_CONSTRUCTOR[flag.type] + '(' + flag.value + '),'; | ||
| } | ||
| return result; | ||
| } | ||
| export interface CrossSerializerContextOptions | ||
| extends BaseSerializerContextOptions, | ||
| CrossContextOptions { | ||
| // empty | ||
| } | ||
| protected resolvePatches(): string | undefined { | ||
| const assignments = resolveAssignments(this.assignments); | ||
| const flags = this.resolveFlags(); | ||
| if (assignments) { | ||
| if (flags) { | ||
| return assignments + flags; | ||
| } | ||
| return assignments; | ||
| } | ||
| return flags; | ||
| export function createCrossSerializerContext( | ||
| options: CrossSerializerContextOptions, | ||
| ): CrossSerializerContext { | ||
| return { | ||
| mode: SerovalMode.Cross, | ||
| base: createBaseSerializerContext(SerovalMode.Cross, options), | ||
| state: options, | ||
| child: undefined, | ||
| }; | ||
| } | ||
| type SerializerContext = VanillaSerializerContext | CrossSerializerContext; | ||
| export class SerializePluginContext { | ||
| constructor(private _p: SerializerContext) {} | ||
| serialize(node: SerovalNode) { | ||
| return serialize(this._p, node); | ||
| } | ||
| } | ||
| /** | ||
| * Creates the reference param (identifier) from the given reference ID | ||
| * Calling this function means the value has been referenced somewhere | ||
| */ | ||
| function getVanillaRefParam( | ||
| state: VanillaSerializerState, | ||
| index: number, | ||
| ): string { | ||
| /** | ||
| * Generates the inlined assignment for the reference | ||
| * This is different from the assignments array as this one | ||
| * signifies creation rather than mutation | ||
| * Creates a new reference ID from a given reference ID | ||
| * This new reference ID means that the reference itself | ||
| * has been referenced at least once, and is used to generate | ||
| * the variables | ||
| */ | ||
| protected createAssignment(source: string, value: string): void { | ||
| this.assignments.push({ | ||
| t: AssignmentType.Index, | ||
| s: source, | ||
| k: NIL, | ||
| v: value, | ||
| }); | ||
| let actualIndex = state.valid.get(index); | ||
| if (actualIndex == null) { | ||
| actualIndex = state.valid.size; | ||
| state.valid.set(index, actualIndex); | ||
| } | ||
| protected createAddAssignment(ref: number, value: string): void { | ||
| this.assignments.push({ | ||
| t: AssignmentType.Add, | ||
| s: this.getRefParam(ref), | ||
| k: NIL, | ||
| v: value, | ||
| }); | ||
| let identifier = state.vars[actualIndex]; | ||
| if (identifier == null) { | ||
| identifier = getIdentifier(actualIndex); | ||
| state.vars[actualIndex] = identifier; | ||
| } | ||
| return identifier; | ||
| } | ||
| protected createSetAssignment(ref: number, key: string, value: string): void { | ||
| this.assignments.push({ | ||
| t: AssignmentType.Set, | ||
| s: this.getRefParam(ref), | ||
| k: key, | ||
| v: value, | ||
| }); | ||
| } | ||
| function getCrossRefParam(id: number): string { | ||
| return GLOBAL_CONTEXT_REFERENCES + '[' + id + ']'; | ||
| } | ||
| protected createDeleteAssignment(ref: number, key: string): void { | ||
| this.assignments.push({ | ||
| t: AssignmentType.Delete, | ||
| s: this.getRefParam(ref), | ||
| k: key, | ||
| v: NIL, | ||
| /** | ||
| * Converts the ID of a reference into a identifier string | ||
| * that is used to refer to the object instance in the | ||
| * generated script. | ||
| */ | ||
| function getRefParam(ctx: SerializerContext, id: number): string { | ||
| return ctx.mode === SerovalMode.Vanilla | ||
| ? getVanillaRefParam(ctx.state, id) | ||
| : getCrossRefParam(id); | ||
| } | ||
| function markSerializerRef(ctx: BaseSerializerContext, id: number): void { | ||
| ctx.marked.add(id); | ||
| } | ||
| function isSerializerRefMarked( | ||
| ctx: BaseSerializerContext, | ||
| id: number, | ||
| ): boolean { | ||
| return ctx.marked.has(id); | ||
| } | ||
| function pushObjectFlag( | ||
| ctx: SerializerContext, | ||
| flag: SerovalObjectFlags, | ||
| id: number, | ||
| ): void { | ||
| if (flag !== SerovalObjectFlags.None) { | ||
| markSerializerRef(ctx.base, id); | ||
| ctx.base.flags.push({ | ||
| type: flag, | ||
| value: getRefParam(ctx, id), | ||
| }); | ||
| } | ||
| } | ||
| protected createArrayAssign( | ||
| ref: number, | ||
| index: number | string, | ||
| value: string, | ||
| ): void { | ||
| this.createAssignment(this.getRefParam(ref) + '[' + index + ']', value); | ||
| function resolveFlags(ctx: BaseSerializerContext): string | undefined { | ||
| let result = ''; | ||
| for (let i = 0, current = ctx.flags, len = current.length; i < len; i++) { | ||
| const flag = current[i]; | ||
| result += OBJECT_FLAG_CONSTRUCTOR[flag.type] + '(' + flag.value + '),'; | ||
| } | ||
| return result; | ||
| } | ||
| protected createObjectAssign(ref: number, key: string, value: string): void { | ||
| this.createAssignment(this.getRefParam(ref) + '.' + key, value); | ||
| function resolvePatches(ctx: BaseSerializerContext): string | undefined { | ||
| const assignments = resolveAssignments(ctx.assignments); | ||
| const flags = resolveFlags(ctx); | ||
| if (assignments) { | ||
| if (flags) { | ||
| return assignments + flags; | ||
| } | ||
| return assignments; | ||
| } | ||
| return flags; | ||
| } | ||
| /** | ||
| * Checks if the value is in the stack. Stack here is a reference | ||
| * structure to know if a object is to be accessed in a TDZ. | ||
| */ | ||
| isIndexedValueInStack(node: SerovalNode): boolean { | ||
| return ( | ||
| node.t === SerovalNodeType.IndexedValue && this.stack.includes(node.i) | ||
| ); | ||
| } | ||
| /** | ||
| * Generates the inlined assignment for the reference | ||
| * This is different from the assignments array as this one | ||
| * signifies creation rather than mutation | ||
| */ | ||
| function createAssignment( | ||
| ctx: BaseSerializerContext, | ||
| source: string, | ||
| value: string, | ||
| ): void { | ||
| ctx.assignments.push({ | ||
| t: AssignmentType.Index, | ||
| s: source, | ||
| k: NIL, | ||
| v: value, | ||
| }); | ||
| } | ||
| /** | ||
| * Produces an assignment expression. `id` generates a reference | ||
| * parameter (through `getRefParam`) and has the option to | ||
| * return the reference parameter directly or assign a value to | ||
| * it. | ||
| */ | ||
| protected abstract assignIndexedValue(id: number, value: string): string; | ||
| function createAddAssignment( | ||
| ctx: SerializerContext, | ||
| ref: number, | ||
| value: string, | ||
| ): void { | ||
| ctx.base.assignments.push({ | ||
| t: AssignmentType.Add, | ||
| s: getRefParam(ctx, ref), | ||
| k: NIL, | ||
| v: value, | ||
| }); | ||
| } | ||
| protected serializeReference(node: SerovalReferenceNode): string { | ||
| return this.assignIndexedValue( | ||
| node.i, | ||
| REFERENCES_KEY + '.get("' + node.s + '")', | ||
| ); | ||
| } | ||
| function createSetAssignment( | ||
| ctx: SerializerContext, | ||
| ref: number, | ||
| key: string, | ||
| value: string, | ||
| ): void { | ||
| ctx.base.assignments.push({ | ||
| t: AssignmentType.Set, | ||
| s: getRefParam(ctx, ref), | ||
| k: key, | ||
| v: value, | ||
| }); | ||
| } | ||
| protected serializeArrayItem( | ||
| id: number, | ||
| item: SerovalNode | undefined, | ||
| index: number, | ||
| ): string { | ||
| // Check if index is a hole | ||
| if (item) { | ||
| // Check if item is a parent | ||
| if (this.isIndexedValueInStack(item)) { | ||
| this.markRef(id); | ||
| this.createArrayAssign( | ||
| id, | ||
| index, | ||
| this.getRefParam((item as SerovalIndexedValueNode).i), | ||
| ); | ||
| return ''; | ||
| } | ||
| return this.serialize(item); | ||
| } | ||
| return ''; | ||
| } | ||
| function createDeleteAssignment( | ||
| ctx: SerializerContext, | ||
| ref: number, | ||
| key: string, | ||
| ): void { | ||
| ctx.base.assignments.push({ | ||
| t: AssignmentType.Delete, | ||
| s: getRefParam(ctx, ref), | ||
| k: key, | ||
| v: NIL, | ||
| }); | ||
| } | ||
| protected serializeArray(node: SerovalArrayNode): string { | ||
| const id = node.i; | ||
| if (node.l) { | ||
| this.stack.push(id); | ||
| const list = node.a; | ||
| let values = this.serializeArrayItem(id, list[0], 0); | ||
| // This is different than Map and Set | ||
| // because we also need to serialize | ||
| // the holes of the Array | ||
| let isHoley = values === ''; | ||
| for (let i = 1, len = node.l, item: string; i < len; i++) { | ||
| item = this.serializeArrayItem(id, list[i], i); | ||
| values += ',' + item; | ||
| isHoley = item === ''; | ||
| } | ||
| this.stack.pop(); | ||
| this.pushObjectFlag(node.o, node.i); | ||
| return this.assignIndexedValue(id, '[' + values + (isHoley ? ',]' : ']')); | ||
| } | ||
| return this.assignIndexedValue(id, '[]'); | ||
| } | ||
| function createArrayAssign( | ||
| ctx: SerializerContext, | ||
| ref: number, | ||
| index: number | string, | ||
| value: string, | ||
| ): void { | ||
| createAssignment(ctx.base, getRefParam(ctx, ref) + '[' + index + ']', value); | ||
| } | ||
| protected serializeProperty( | ||
| source: SerovalNodeWithProperties, | ||
| key: SerovalObjectRecordKey, | ||
| val: SerovalNode, | ||
| ): string { | ||
| if (typeof key === 'string') { | ||
| const check = Number(key); | ||
| const isIdentifier = | ||
| // Test if key is a valid positive number or JS identifier | ||
| // so that we don't have to serialize the key and wrap with brackets | ||
| (check >= 0 && | ||
| // It's also important to consider that if the key is | ||
| // indeed numeric, we need to make sure that when | ||
| // converted back into a string, it's still the same | ||
| // to the original key. This allows us to differentiate | ||
| // keys that has numeric formats but in a different | ||
| // format, which can cause unintentional key declaration | ||
| // Example: { 0x1: 1 } vs { '0x1': 1 } | ||
| check.toString() === key) || | ||
| isValidIdentifier(key); | ||
| if (this.isIndexedValueInStack(val)) { | ||
| const refParam = this.getRefParam((val as SerovalIndexedValueNode).i); | ||
| this.markRef(source.i); | ||
| // Strict identifier check, make sure | ||
| // that it isn't numeric (except NaN) | ||
| if (isIdentifier && check !== check) { | ||
| this.createObjectAssign(source.i, key, refParam); | ||
| } else { | ||
| this.createArrayAssign( | ||
| source.i, | ||
| isIdentifier ? key : '"' + key + '"', | ||
| refParam, | ||
| ); | ||
| } | ||
| return ''; | ||
| } | ||
| return (isIdentifier ? key : '"' + key + '"') + ':' + this.serialize(val); | ||
| } | ||
| return '[' + this.serialize(key) + ']:' + this.serialize(val); | ||
| function createObjectAssign( | ||
| ctx: SerializerContext, | ||
| ref: number, | ||
| key: string, | ||
| value: string, | ||
| ): void { | ||
| createAssignment(ctx.base, getRefParam(ctx, ref) + '.' + key, value); | ||
| } | ||
| /** | ||
| * Checks if the value is in the stack. Stack here is a reference | ||
| * structure to know if a object is to be accessed in a TDZ. | ||
| */ | ||
| function isIndexedValueInStack( | ||
| ctx: BaseSerializerContext, | ||
| node: SerovalNode, | ||
| ): boolean { | ||
| return node.t === SerovalNodeType.IndexedValue && ctx.stack.includes(node.i); | ||
| } | ||
| /** | ||
| * Produces an assignment expression. `id` generates a reference | ||
| * parameter (through `getRefParam`) and has the option to | ||
| * return the reference parameter directly or assign a value to | ||
| * it. | ||
| */ | ||
| function assignIndexedValue( | ||
| ctx: SerializerContext, | ||
| index: number, | ||
| value: string, | ||
| ): string { | ||
| if ( | ||
| ctx.mode === SerovalMode.Vanilla && | ||
| !isSerializerRefMarked(ctx.base, index) | ||
| ) { | ||
| return value; | ||
| } | ||
| /** | ||
| * In cross-reference, we have to assume that | ||
| * every reference are going to be referenced | ||
| * in the future, and so we need to store | ||
| * all of it into the reference array. | ||
| * | ||
| * otherwise in vanilla, we only do this if it | ||
| * is actually referenced | ||
| */ | ||
| return getRefParam(ctx, index) + '=' + value; | ||
| } | ||
| protected serializeProperties( | ||
| source: SerovalNodeWithProperties, | ||
| record: SerovalObjectRecordNode, | ||
| ): string { | ||
| const len = record.s; | ||
| if (len) { | ||
| const keys = record.k; | ||
| const values = record.v; | ||
| this.stack.push(source.i); | ||
| let result = this.serializeProperty(source, keys[0], values[0]); | ||
| for (let i = 1, item = result; i < len; i++) { | ||
| item = this.serializeProperty(source, keys[i], values[i]); | ||
| result += (item && result && ',') + item; | ||
| } | ||
| this.stack.pop(); | ||
| return '{' + result + '}'; | ||
| function serializeReference(node: SerovalReferenceNode): string { | ||
| return REFERENCES_KEY + '.get("' + node.s + '")'; | ||
| } | ||
| function serializeArrayItem( | ||
| ctx: SerializerContext, | ||
| id: number, | ||
| item: SerovalNode | undefined, | ||
| index: number, | ||
| ): string { | ||
| // Check if index is a hole | ||
| if (item) { | ||
| // Check if item is a parent | ||
| if (isIndexedValueInStack(ctx.base, item)) { | ||
| markSerializerRef(ctx.base, id); | ||
| createArrayAssign( | ||
| ctx, | ||
| id, | ||
| index, | ||
| getRefParam(ctx, (item as SerovalIndexedValueNode).i), | ||
| ); | ||
| return ''; | ||
| } | ||
| return '{}'; | ||
| return serialize(ctx, item); | ||
| } | ||
| return ''; | ||
| } | ||
| protected serializeObject(node: SerovalObjectNode): string { | ||
| this.pushObjectFlag(node.o, node.i); | ||
| return this.assignIndexedValue( | ||
| node.i, | ||
| this.serializeProperties(node, node.p), | ||
| ); | ||
| } | ||
| protected serializeWithObjectAssign( | ||
| source: SerovalNodeWithProperties, | ||
| value: SerovalObjectRecordNode, | ||
| serialized: string, | ||
| ): string { | ||
| const fields = this.serializeProperties(source, value); | ||
| if (fields !== '{}') { | ||
| return 'Object.assign(' + serialized + ',' + fields + ')'; | ||
| function serializeArray( | ||
| ctx: SerializerContext, | ||
| node: SerovalArrayNode, | ||
| ): string { | ||
| const id = node.i; | ||
| if (node.l) { | ||
| ctx.base.stack.push(id); | ||
| const list = node.a; | ||
| let values = serializeArrayItem(ctx, id, list[0], 0); | ||
| // This is different than Map and Set | ||
| // because we also need to serialize | ||
| // the holes of the Array | ||
| let isHoley = values === ''; | ||
| for (let i = 1, len = node.l, item: string; i < len; i++) { | ||
| item = serializeArrayItem(ctx, id, list[i], i); | ||
| values += ',' + item; | ||
| isHoley = item === ''; | ||
| } | ||
| return serialized; | ||
| ctx.base.stack.pop(); | ||
| pushObjectFlag(ctx, node.o, node.i); | ||
| return '[' + values + (isHoley ? ',]' : ']'); | ||
| } | ||
| return '[]'; | ||
| } | ||
| private serializeStringKeyAssignment( | ||
| source: SerovalNodeWithProperties, | ||
| mainAssignments: Assignment[], | ||
| key: string, | ||
| value: SerovalNode, | ||
| ): void { | ||
| const serialized = this.serialize(value); | ||
| function serializeProperty( | ||
| ctx: SerializerContext, | ||
| source: SerovalNodeWithProperties, | ||
| key: SerovalObjectRecordKey, | ||
| val: SerovalNode, | ||
| ): string { | ||
| if (typeof key === 'string') { | ||
| const check = Number(key); | ||
@@ -542,645 +606,812 @@ const isIdentifier = | ||
| isValidIdentifier(key); | ||
| if (this.isIndexedValueInStack(value)) { | ||
| if (isIndexedValueInStack(ctx.base, val)) { | ||
| const refParam = getRefParam(ctx, (val as SerovalIndexedValueNode).i); | ||
| markSerializerRef(ctx.base, source.i); | ||
| // Strict identifier check, make sure | ||
| // that it isn't numeric (except NaN) | ||
| if (isIdentifier && check !== check) { | ||
| this.createObjectAssign(source.i, key, serialized); | ||
| createObjectAssign(ctx, source.i, key, refParam); | ||
| } else { | ||
| this.createArrayAssign( | ||
| createArrayAssign( | ||
| ctx, | ||
| source.i, | ||
| isIdentifier ? key : '"' + key + '"', | ||
| serialized, | ||
| refParam, | ||
| ); | ||
| } | ||
| } else { | ||
| const parentAssignment = this.assignments; | ||
| this.assignments = mainAssignments; | ||
| if (isIdentifier && check !== check) { | ||
| this.createObjectAssign(source.i, key, serialized); | ||
| } else { | ||
| this.createArrayAssign( | ||
| source.i, | ||
| isIdentifier ? key : '"' + key + '"', | ||
| serialized, | ||
| ); | ||
| } | ||
| this.assignments = parentAssignment; | ||
| return ''; | ||
| } | ||
| return (isIdentifier ? key : '"' + key + '"') + ':' + serialize(ctx, val); | ||
| } | ||
| return '[' + serialize(ctx, key) + ']:' + serialize(ctx, val); | ||
| } | ||
| protected serializeAssignment( | ||
| source: SerovalNodeWithProperties, | ||
| mainAssignments: Assignment[], | ||
| key: SerovalObjectRecordKey, | ||
| value: SerovalNode, | ||
| ): void { | ||
| if (typeof key === 'string') { | ||
| this.serializeStringKeyAssignment(source, mainAssignments, key, value); | ||
| } else { | ||
| const parent = this.stack; | ||
| this.stack = []; | ||
| const serialized = this.serialize(value); | ||
| this.stack = parent; | ||
| const parentAssignment = this.assignments; | ||
| this.assignments = mainAssignments; | ||
| this.createArrayAssign(source.i, this.serialize(key), serialized); | ||
| this.assignments = parentAssignment; | ||
| function serializeProperties( | ||
| ctx: SerializerContext, | ||
| source: SerovalNodeWithProperties, | ||
| record: SerovalObjectRecordNode, | ||
| ): string { | ||
| const len = record.s; | ||
| if (len) { | ||
| const keys = record.k; | ||
| const values = record.v; | ||
| ctx.base.stack.push(source.i); | ||
| let result = serializeProperty(ctx, source, keys[0], values[0]); | ||
| for (let i = 1, item = result; i < len; i++) { | ||
| item = serializeProperty(ctx, source, keys[i], values[i]); | ||
| result += (item && result && ',') + item; | ||
| } | ||
| ctx.base.stack.pop(); | ||
| return '{' + result + '}'; | ||
| } | ||
| return '{}'; | ||
| } | ||
| protected serializeAssignments( | ||
| source: SerovalNodeWithProperties, | ||
| node: SerovalObjectRecordNode, | ||
| ): string | undefined { | ||
| const len = node.s; | ||
| if (len) { | ||
| const mainAssignments: Assignment[] = []; | ||
| const keys = node.k; | ||
| const values = node.v; | ||
| this.stack.push(source.i); | ||
| for (let i = 0; i < len; i++) { | ||
| this.serializeAssignment(source, mainAssignments, keys[i], values[i]); | ||
| } | ||
| this.stack.pop(); | ||
| return resolveAssignments(mainAssignments); | ||
| } | ||
| return NIL; | ||
| function serializeObject( | ||
| ctx: SerializerContext, | ||
| node: SerovalObjectNode, | ||
| ): string { | ||
| pushObjectFlag(ctx, node.o, node.i); | ||
| return serializeProperties(ctx, node, node.p); | ||
| } | ||
| function serializeWithObjectAssign( | ||
| ctx: SerializerContext, | ||
| source: SerovalNodeWithProperties, | ||
| value: SerovalObjectRecordNode, | ||
| serialized: string, | ||
| ): string { | ||
| const fields = serializeProperties(ctx, source, value); | ||
| if (fields !== '{}') { | ||
| return 'Object.assign(' + serialized + ',' + fields + ')'; | ||
| } | ||
| return serialized; | ||
| } | ||
| protected serializeDictionary( | ||
| node: SerovalNodeWithProperties, | ||
| init: string, | ||
| ): string { | ||
| if (node.p) { | ||
| if (this.features & Feature.ObjectAssign) { | ||
| init = this.serializeWithObjectAssign(node, node.p, init); | ||
| } else { | ||
| this.markRef(node.i); | ||
| const assignments = this.serializeAssignments(node, node.p); | ||
| if (assignments) { | ||
| return ( | ||
| '(' + | ||
| this.assignIndexedValue(node.i, init) + | ||
| ',' + | ||
| assignments + | ||
| this.getRefParam(node.i) + | ||
| ')' | ||
| ); | ||
| } | ||
| } | ||
| function serializeStringKeyAssignment( | ||
| ctx: SerializerContext, | ||
| source: SerovalNodeWithProperties, | ||
| mainAssignments: Assignment[], | ||
| key: string, | ||
| value: SerovalNode, | ||
| ): void { | ||
| const base = ctx.base; | ||
| const serialized = serialize(ctx, value); | ||
| const check = Number(key); | ||
| const isIdentifier = | ||
| // Test if key is a valid positive number or JS identifier | ||
| // so that we don't have to serialize the key and wrap with brackets | ||
| (check >= 0 && | ||
| // It's also important to consider that if the key is | ||
| // indeed numeric, we need to make sure that when | ||
| // converted back into a string, it's still the same | ||
| // to the original key. This allows us to differentiate | ||
| // keys that has numeric formats but in a different | ||
| // format, which can cause unintentional key declaration | ||
| // Example: { 0x1: 1 } vs { '0x1': 1 } | ||
| check.toString() === key) || | ||
| isValidIdentifier(key); | ||
| if (isIndexedValueInStack(base, value)) { | ||
| // Strict identifier check, make sure | ||
| // that it isn't numeric (except NaN) | ||
| if (isIdentifier && check !== check) { | ||
| createObjectAssign(ctx, source.i, key, serialized); | ||
| } else { | ||
| createArrayAssign( | ||
| ctx, | ||
| source.i, | ||
| isIdentifier ? key : '"' + key + '"', | ||
| serialized, | ||
| ); | ||
| } | ||
| return this.assignIndexedValue(node.i, init); | ||
| } else { | ||
| const parentAssignment = base.assignments; | ||
| base.assignments = mainAssignments; | ||
| if (isIdentifier && check !== check) { | ||
| createObjectAssign(ctx, source.i, key, serialized); | ||
| } else { | ||
| createArrayAssign( | ||
| ctx, | ||
| source.i, | ||
| isIdentifier ? key : '"' + key + '"', | ||
| serialized, | ||
| ); | ||
| } | ||
| base.assignments = parentAssignment; | ||
| } | ||
| } | ||
| protected serializeNullConstructor(node: SerovalNullConstructorNode): string { | ||
| this.pushObjectFlag(node.o, node.i); | ||
| return this.serializeDictionary(node, NULL_CONSTRUCTOR); | ||
| function serializeAssignment( | ||
| ctx: SerializerContext, | ||
| source: SerovalNodeWithProperties, | ||
| mainAssignments: Assignment[], | ||
| key: SerovalObjectRecordKey, | ||
| value: SerovalNode, | ||
| ): void { | ||
| if (typeof key === 'string') { | ||
| serializeStringKeyAssignment(ctx, source, mainAssignments, key, value); | ||
| } else { | ||
| const base = ctx.base; | ||
| const parent = base.stack; | ||
| base.stack = []; | ||
| const serialized = serialize(ctx, value); | ||
| base.stack = parent; | ||
| const parentAssignment = base.assignments; | ||
| base.assignments = mainAssignments; | ||
| createArrayAssign(ctx, source.i, serialize(ctx, key), serialized); | ||
| base.assignments = parentAssignment; | ||
| } | ||
| } | ||
| protected serializeDate(node: SerovalDateNode): string { | ||
| return this.assignIndexedValue(node.i, 'new Date("' + node.s + '")'); | ||
| function serializeAssignments( | ||
| ctx: SerializerContext, | ||
| source: SerovalNodeWithProperties, | ||
| node: SerovalObjectRecordNode, | ||
| ): string | undefined { | ||
| const len = node.s; | ||
| if (len) { | ||
| const mainAssignments: Assignment[] = []; | ||
| const keys = node.k; | ||
| const values = node.v; | ||
| ctx.base.stack.push(source.i); | ||
| for (let i = 0; i < len; i++) { | ||
| serializeAssignment(ctx, source, mainAssignments, keys[i], values[i]); | ||
| } | ||
| ctx.base.stack.pop(); | ||
| return resolveAssignments(mainAssignments); | ||
| } | ||
| return NIL; | ||
| } | ||
| protected serializeRegExp(node: SerovalRegExpNode): string { | ||
| return this.assignIndexedValue(node.i, '/' + node.c + '/' + node.m); | ||
| function serializeDictionary( | ||
| ctx: SerializerContext, | ||
| node: SerovalNodeWithProperties, | ||
| init: string, | ||
| ): string { | ||
| if (node.p) { | ||
| const base = ctx.base; | ||
| if (base.features & Feature.ObjectAssign) { | ||
| init = serializeWithObjectAssign(ctx, node, node.p, init); | ||
| } else { | ||
| markSerializerRef(base, node.i); | ||
| const assignments = serializeAssignments(ctx, node, node.p); | ||
| if (assignments) { | ||
| return ( | ||
| '(' + | ||
| assignIndexedValue(ctx, node.i, init) + | ||
| ',' + | ||
| assignments + | ||
| getRefParam(ctx, node.i) + | ||
| ')' | ||
| ); | ||
| } | ||
| } | ||
| } | ||
| return init; | ||
| } | ||
| protected serializeSetItem(id: number, item: SerovalNode): string { | ||
| if (this.isIndexedValueInStack(item)) { | ||
| this.markRef(id); | ||
| this.createAddAssignment( | ||
| id, | ||
| this.getRefParam((item as SerovalIndexedValueNode).i), | ||
| ); | ||
| return ''; | ||
| } | ||
| return this.serialize(item); | ||
| function serializeNullConstructor( | ||
| ctx: SerializerContext, | ||
| node: SerovalNullConstructorNode, | ||
| ): string { | ||
| pushObjectFlag(ctx, node.o, node.i); | ||
| return serializeDictionary(ctx, node, NULL_CONSTRUCTOR); | ||
| } | ||
| function serializeDate(node: SerovalDateNode): string { | ||
| return 'new Date("' + node.s + '")'; | ||
| } | ||
| function serializeRegExp(node: SerovalRegExpNode): string { | ||
| return '/' + node.c + '/' + node.m; | ||
| } | ||
| function serializeSetItem( | ||
| ctx: SerializerContext, | ||
| id: number, | ||
| item: SerovalNode, | ||
| ): string { | ||
| const base = ctx.base; | ||
| if (isIndexedValueInStack(base, item)) { | ||
| markSerializerRef(base, id); | ||
| createAddAssignment( | ||
| ctx, | ||
| id, | ||
| getRefParam(ctx, (item as SerovalIndexedValueNode).i), | ||
| ); | ||
| return ''; | ||
| } | ||
| return serialize(ctx, item); | ||
| } | ||
| protected serializeSet(node: SerovalSetNode): string { | ||
| let serialized = SET_CONSTRUCTOR; | ||
| const size = node.l; | ||
| const id = node.i; | ||
| if (size) { | ||
| const items = node.a; | ||
| this.stack.push(id); | ||
| let result = this.serializeSetItem(id, items[0]); | ||
| for (let i = 1, item = result; i < size; i++) { | ||
| item = this.serializeSetItem(id, items[i]); | ||
| result += (item && result && ',') + item; | ||
| } | ||
| this.stack.pop(); | ||
| if (result) { | ||
| serialized += '([' + result + '])'; | ||
| } | ||
| function serializeSet(ctx: SerializerContext, node: SerovalSetNode): string { | ||
| let serialized = SET_CONSTRUCTOR; | ||
| const size = node.l; | ||
| const id = node.i; | ||
| if (size) { | ||
| const items = node.a; | ||
| ctx.base.stack.push(id); | ||
| let result = serializeSetItem(ctx, id, items[0]); | ||
| for (let i = 1, item = result; i < size; i++) { | ||
| item = serializeSetItem(ctx, id, items[i]); | ||
| result += (item && result && ',') + item; | ||
| } | ||
| return this.assignIndexedValue(id, serialized); | ||
| ctx.base.stack.pop(); | ||
| if (result) { | ||
| serialized += '([' + result + '])'; | ||
| } | ||
| } | ||
| return serialized; | ||
| } | ||
| protected serializeMapEntry( | ||
| id: number, | ||
| key: SerovalNode, | ||
| val: SerovalNode, | ||
| sentinel: string, | ||
| ): string { | ||
| if (this.isIndexedValueInStack(key)) { | ||
| // Create reference for the map instance | ||
| const keyRef = this.getRefParam((key as SerovalIndexedValueNode).i); | ||
| this.markRef(id); | ||
| // Check if value is a parent | ||
| if (this.isIndexedValueInStack(val)) { | ||
| const valueRef = this.getRefParam((val as SerovalIndexedValueNode).i); | ||
| // Register an assignment since | ||
| // both key and value are a parent of this | ||
| // Map instance | ||
| this.createSetAssignment(id, keyRef, valueRef); | ||
| return ''; | ||
| } | ||
| // Reset the stack | ||
| // This is required because the serialized | ||
| // value is no longer part of the expression | ||
| // tree and has been moved to the deferred | ||
| // assignment | ||
| if ( | ||
| val.t !== SerovalNodeType.IndexedValue && | ||
| val.i != null && | ||
| this.isMarked(val.i) | ||
| ) { | ||
| // We use a trick here using sequence (or comma) expressions | ||
| // basically we serialize the intended object in place WITHOUT | ||
| // actually returning it, this is by returning a placeholder | ||
| // value that we will remove sometime after. | ||
| const serialized = | ||
| '(' + this.serialize(val) + ',[' + sentinel + ',' + sentinel + '])'; | ||
| this.createSetAssignment(id, keyRef, this.getRefParam(val.i)); | ||
| this.createDeleteAssignment(id, sentinel); | ||
| return serialized; | ||
| } | ||
| const parent = this.stack; | ||
| this.stack = []; | ||
| this.createSetAssignment(id, keyRef, this.serialize(val)); | ||
| this.stack = parent; | ||
| function serializeMapEntry( | ||
| ctx: SerializerContext, | ||
| id: number, | ||
| key: SerovalNode, | ||
| val: SerovalNode, | ||
| sentinel: string, | ||
| ): string { | ||
| const base = ctx.base; | ||
| if (isIndexedValueInStack(base, key)) { | ||
| // Create reference for the map instance | ||
| const keyRef = getRefParam(ctx, (key as SerovalIndexedValueNode).i); | ||
| markSerializerRef(base, id); | ||
| // Check if value is a parent | ||
| if (isIndexedValueInStack(base, val)) { | ||
| const valueRef = getRefParam(ctx, (val as SerovalIndexedValueNode).i); | ||
| // Register an assignment since | ||
| // both key and value are a parent of this | ||
| // Map instance | ||
| createSetAssignment(ctx, id, keyRef, valueRef); | ||
| return ''; | ||
| } | ||
| if (this.isIndexedValueInStack(val)) { | ||
| // Create ref for the Map instance | ||
| const valueRef = this.getRefParam((val as SerovalIndexedValueNode).i); | ||
| this.markRef(id); | ||
| if ( | ||
| key.t !== SerovalNodeType.IndexedValue && | ||
| key.i != null && | ||
| this.isMarked(key.i) | ||
| ) { | ||
| const serialized = | ||
| '(' + this.serialize(key) + ',[' + sentinel + ',' + sentinel + '])'; | ||
| this.createSetAssignment(id, this.getRefParam(key.i), valueRef); | ||
| this.createDeleteAssignment(id, sentinel); | ||
| return serialized; | ||
| } | ||
| // Reset stack for the key serialization | ||
| const parent = this.stack; | ||
| this.stack = []; | ||
| this.createSetAssignment(id, this.serialize(key), valueRef); | ||
| this.stack = parent; | ||
| return ''; | ||
| // Reset the stack | ||
| // This is required because the serialized | ||
| // value is no longer part of the expression | ||
| // tree and has been moved to the deferred | ||
| // assignment | ||
| if ( | ||
| val.t !== SerovalNodeType.IndexedValue && | ||
| val.i != null && | ||
| isSerializerRefMarked(base, val.i) | ||
| ) { | ||
| // We use a trick here using sequence (or comma) expressions | ||
| // basically we serialize the intended object in place WITHOUT | ||
| // actually returning it, this is by returning a placeholder | ||
| // value that we will remove sometime after. | ||
| const serialized = | ||
| '(' + serialize(ctx, val) + ',[' + sentinel + ',' + sentinel + '])'; | ||
| createSetAssignment(ctx, id, keyRef, getRefParam(ctx, val.i)); | ||
| createDeleteAssignment(ctx, id, sentinel); | ||
| return serialized; | ||
| } | ||
| return '[' + this.serialize(key) + ',' + this.serialize(val) + ']'; | ||
| const parent = base.stack; | ||
| base.stack = []; | ||
| createSetAssignment(ctx, id, keyRef, serialize(ctx, val)); | ||
| base.stack = parent; | ||
| return ''; | ||
| } | ||
| protected serializeMap(node: SerovalMapNode): string { | ||
| let serialized = MAP_CONSTRUCTOR; | ||
| const size = node.e.s; | ||
| const id = node.i; | ||
| const sentinel = node.f; | ||
| const sentinelId = this.getRefParam(sentinel.i); | ||
| if (size) { | ||
| const keys = node.e.k; | ||
| const vals = node.e.v; | ||
| this.stack.push(id); | ||
| let result = this.serializeMapEntry(id, keys[0], vals[0], sentinelId); | ||
| for (let i = 1, item = result; i < size; i++) { | ||
| item = this.serializeMapEntry(id, keys[i], vals[i], sentinelId); | ||
| result += (item && result && ',') + item; | ||
| } | ||
| this.stack.pop(); | ||
| // Check if there are any values | ||
| // so that the empty Map constructor | ||
| // can be used instead | ||
| if (result) { | ||
| serialized += '([' + result + '])'; | ||
| } | ||
| if (isIndexedValueInStack(base, val)) { | ||
| // Create ref for the Map instance | ||
| const valueRef = getRefParam(ctx, (val as SerovalIndexedValueNode).i); | ||
| markSerializerRef(base, id); | ||
| if ( | ||
| key.t !== SerovalNodeType.IndexedValue && | ||
| key.i != null && | ||
| isSerializerRefMarked(base, key.i) | ||
| ) { | ||
| const serialized = | ||
| '(' + serialize(ctx, key) + ',[' + sentinel + ',' + sentinel + '])'; | ||
| createSetAssignment(ctx, id, getRefParam(ctx, key.i), valueRef); | ||
| createDeleteAssignment(ctx, id, sentinel); | ||
| return serialized; | ||
| } | ||
| if (sentinel.t === SerovalNodeType.SpecialReference) { | ||
| this.markRef(sentinel.i); | ||
| serialized = '(' + this.serialize(sentinel) + ',' + serialized + ')'; | ||
| } | ||
| return this.assignIndexedValue(id, serialized); | ||
| // Reset stack for the key serialization | ||
| const parent = base.stack; | ||
| base.stack = []; | ||
| createSetAssignment(ctx, id, serialize(ctx, key), valueRef); | ||
| base.stack = parent; | ||
| return ''; | ||
| } | ||
| protected serializeArrayBuffer(node: SerovalArrayBufferNode): string { | ||
| let result = 'new Uint8Array('; | ||
| const buffer = node.s; | ||
| const len = buffer.length; | ||
| if (len) { | ||
| result += '[' + buffer[0]; | ||
| for (let i = 1; i < len; i++) { | ||
| result += ',' + buffer[i]; | ||
| } | ||
| result += ']'; | ||
| return '[' + serialize(ctx, key) + ',' + serialize(ctx, val) + ']'; | ||
| } | ||
| function serializeMap(ctx: SerializerContext, node: SerovalMapNode): string { | ||
| let serialized = MAP_CONSTRUCTOR; | ||
| const size = node.e.s; | ||
| const id = node.i; | ||
| const sentinel = node.f; | ||
| const sentinelId = getRefParam(ctx, sentinel.i); | ||
| const base = ctx.base; | ||
| if (size) { | ||
| const keys = node.e.k; | ||
| const vals = node.e.v; | ||
| base.stack.push(id); | ||
| let result = serializeMapEntry(ctx, id, keys[0], vals[0], sentinelId); | ||
| for (let i = 1, item = result; i < size; i++) { | ||
| item = serializeMapEntry(ctx, id, keys[i], vals[i], sentinelId); | ||
| result += (item && result && ',') + item; | ||
| } | ||
| return this.assignIndexedValue(node.i, result + ').buffer'); | ||
| base.stack.pop(); | ||
| // Check if there are any values | ||
| // so that the empty Map constructor | ||
| // can be used instead | ||
| if (result) { | ||
| serialized += '([' + result + '])'; | ||
| } | ||
| } | ||
| protected serializeTypedArray( | ||
| node: SerovalTypedArrayNode | SerovalBigIntTypedArrayNode, | ||
| ): string { | ||
| return this.assignIndexedValue( | ||
| node.i, | ||
| 'new ' + | ||
| node.c + | ||
| '(' + | ||
| this.serialize(node.f) + | ||
| ',' + | ||
| node.b + | ||
| ',' + | ||
| node.l + | ||
| ')', | ||
| ); | ||
| if (sentinel.t === SerovalNodeType.SpecialReference) { | ||
| markSerializerRef(base, sentinel.i); | ||
| serialized = '(' + serialize(ctx, sentinel) + ',' + serialized + ')'; | ||
| } | ||
| return serialized; | ||
| } | ||
| protected serializeDataView(node: SerovalDataViewNode): string { | ||
| return this.assignIndexedValue( | ||
| node.i, | ||
| 'new DataView(' + | ||
| this.serialize(node.f) + | ||
| ',' + | ||
| node.b + | ||
| ',' + | ||
| node.l + | ||
| ')', | ||
| ); | ||
| } | ||
| function serializeArrayBuffer( | ||
| ctx: SerializerContext, | ||
| node: SerovalArrayBufferNode, | ||
| ): string { | ||
| return getConstructor(ctx, node.f) + '(' + node.l + ',"' + node.s + '")'; | ||
| } | ||
| protected serializeAggregateError(node: SerovalAggregateErrorNode): string { | ||
| const id = node.i; | ||
| // `AggregateError` might've been extended | ||
| // either through class or custom properties | ||
| // Make sure to assign extra properties | ||
| this.stack.push(id); | ||
| const serialized = this.serializeDictionary( | ||
| node, | ||
| 'new AggregateError([],"' + node.m + '")', | ||
| ); | ||
| this.stack.pop(); | ||
| return serialized; | ||
| } | ||
| function serializeTypedArray( | ||
| ctx: SerializerContext, | ||
| node: SerovalTypedArrayNode | SerovalBigIntTypedArrayNode, | ||
| ): string { | ||
| return ( | ||
| 'new ' + | ||
| node.c + | ||
| '(' + | ||
| serialize(ctx, node.f) + | ||
| ',' + | ||
| node.b + | ||
| ',' + | ||
| node.l + | ||
| ')' | ||
| ); | ||
| } | ||
| protected serializeError(node: SerovalErrorNode): string { | ||
| return this.serializeDictionary( | ||
| node, | ||
| 'new ' + ERROR_CONSTRUCTOR_STRING[node.s] + '("' + node.m + '")', | ||
| ); | ||
| function serializeDataView( | ||
| ctx: SerializerContext, | ||
| node: SerovalDataViewNode, | ||
| ): string { | ||
| return ( | ||
| 'new DataView(' + serialize(ctx, node.f) + ',' + node.b + ',' + node.l + ')' | ||
| ); | ||
| } | ||
| function serializeAggregateError( | ||
| ctx: SerializerContext, | ||
| node: SerovalAggregateErrorNode, | ||
| ): string { | ||
| const id = node.i; | ||
| // `AggregateError` might've been extended | ||
| // either through class or custom properties | ||
| // Make sure to assign extra properties | ||
| ctx.base.stack.push(id); | ||
| const serialized = serializeDictionary( | ||
| ctx, | ||
| node, | ||
| 'new AggregateError([],"' + node.m + '")', | ||
| ); | ||
| ctx.base.stack.pop(); | ||
| return serialized; | ||
| } | ||
| function serializeError( | ||
| ctx: SerializerContext, | ||
| node: SerovalErrorNode, | ||
| ): string { | ||
| return serializeDictionary( | ||
| ctx, | ||
| node, | ||
| 'new ' + ERROR_CONSTRUCTOR_STRING[node.s] + '("' + node.m + '")', | ||
| ); | ||
| } | ||
| function serializePromise( | ||
| ctx: SerializerContext, | ||
| node: SerovalPromiseNode, | ||
| ): string { | ||
| let serialized: string; | ||
| // Check if resolved value is a parent expression | ||
| const fulfilled = node.f; | ||
| const id = node.i; | ||
| const promiseConstructor = node.s ? PROMISE_RESOLVE : PROMISE_REJECT; | ||
| const base = ctx.base; | ||
| if (isIndexedValueInStack(base, fulfilled)) { | ||
| // A Promise trick, reference the value | ||
| // inside the `then` expression so that | ||
| // the Promise evaluates after the parent | ||
| // has initialized | ||
| const ref = getRefParam(ctx, (fulfilled as SerovalIndexedValueNode).i); | ||
| serialized = | ||
| promiseConstructor + | ||
| (node.s | ||
| ? '().then(' + createFunction([], ref) + ')' | ||
| : '().catch(' + createEffectfulFunction([], 'throw ' + ref) + ')'); | ||
| } else { | ||
| base.stack.push(id); | ||
| const result = serialize(ctx, fulfilled); | ||
| base.stack.pop(); | ||
| // just inline the value/reference here | ||
| serialized = promiseConstructor + '(' + result + ')'; | ||
| } | ||
| return serialized; | ||
| } | ||
| protected serializePromise(node: SerovalPromiseNode): string { | ||
| let serialized: string; | ||
| // Check if resolved value is a parent expression | ||
| const fulfilled = node.f; | ||
| const id = node.i; | ||
| const promiseConstructor = node.s ? PROMISE_RESOLVE : PROMISE_REJECT; | ||
| if (this.isIndexedValueInStack(fulfilled)) { | ||
| // A Promise trick, reference the value | ||
| // inside the `then` expression so that | ||
| // the Promise evaluates after the parent | ||
| // has initialized | ||
| const ref = this.getRefParam((fulfilled as SerovalIndexedValueNode).i); | ||
| serialized = | ||
| promiseConstructor + | ||
| (node.s | ||
| ? '().then(' + this.createFunction([], ref) + ')' | ||
| : '().catch(' + | ||
| this.createEffectfulFunction([], 'throw ' + ref) + | ||
| ')'); | ||
| } else { | ||
| this.stack.push(id); | ||
| const result = this.serialize(fulfilled); | ||
| this.stack.pop(); | ||
| // just inline the value/reference here | ||
| serialized = promiseConstructor + '(' + result + ')'; | ||
| } | ||
| return this.assignIndexedValue(id, serialized); | ||
| function serializeBoxed( | ||
| ctx: SerializerContext, | ||
| node: SerovalBoxedNode, | ||
| ): string { | ||
| return 'Object(' + serialize(ctx, node.f) + ')'; | ||
| } | ||
| function getConstructor( | ||
| ctx: SerializerContext, | ||
| node: SerovalNodeWithID, | ||
| ): string { | ||
| const current = serialize(ctx, node); | ||
| return node.t === SerovalNodeType.IndexedValue | ||
| ? current | ||
| : '(' + current + ')'; | ||
| } | ||
| function serializePromiseConstructor( | ||
| ctx: SerializerContext, | ||
| node: SerovalPromiseConstructorNode, | ||
| ): string { | ||
| if (ctx.mode === SerovalMode.Vanilla) { | ||
| throw new SerovalUnsupportedNodeError(node); | ||
| } | ||
| const resolver = assignIndexedValue( | ||
| ctx, | ||
| node.s, | ||
| getConstructor(ctx, node.f) + '()', | ||
| ); | ||
| return '(' + resolver + ').p'; | ||
| } | ||
| protected serializeWellKnownSymbol(node: SerovalWKSymbolNode): string { | ||
| return this.assignIndexedValue(node.i, SYMBOL_STRING[node.s]); | ||
| function serializePromiseResolve( | ||
| ctx: SerializerContext, | ||
| node: SerovalPromiseResolveNode, | ||
| ): string { | ||
| if (ctx.mode === SerovalMode.Vanilla) { | ||
| throw new SerovalUnsupportedNodeError(node); | ||
| } | ||
| return ( | ||
| getConstructor(ctx, node.a[0]) + | ||
| '(' + | ||
| getRefParam(ctx, node.i) + | ||
| ',' + | ||
| serialize(ctx, node.a[1]) + | ||
| ')' | ||
| ); | ||
| } | ||
| protected serializeBoxed(node: SerovalBoxedNode): string { | ||
| return this.assignIndexedValue( | ||
| node.i, | ||
| 'Object(' + this.serialize(node.f) + ')', | ||
| ); | ||
| function serializePromiseReject( | ||
| ctx: SerializerContext, | ||
| node: SerovalPromiseRejectNode, | ||
| ): string { | ||
| if (ctx.mode === SerovalMode.Vanilla) { | ||
| throw new SerovalUnsupportedNodeError(node); | ||
| } | ||
| return ( | ||
| getConstructor(ctx, node.a[0]) + | ||
| '(' + | ||
| getRefParam(ctx, node.i) + | ||
| ',' + | ||
| serialize(ctx, node.a[1]) + | ||
| ')' | ||
| ); | ||
| } | ||
| protected serializePlugin(node: SerovalPluginNode): string { | ||
| const currentPlugins = this.plugins; | ||
| if (currentPlugins) { | ||
| for (let i = 0, len = currentPlugins.length; i < len; i++) { | ||
| const plugin = currentPlugins[i]; | ||
| if (plugin.tag === node.c) { | ||
| return this.assignIndexedValue( | ||
| node.i, | ||
| plugin.serialize(node.s, this, { | ||
| id: node.i, | ||
| }), | ||
| ); | ||
| function serializePlugin( | ||
| ctx: SerializerContext, | ||
| node: SerovalPluginNode, | ||
| ): string { | ||
| const currentPlugins = ctx.base.plugins; | ||
| if (currentPlugins) { | ||
| for (let i = 0, len = currentPlugins.length; i < len; i++) { | ||
| const plugin = currentPlugins[i]; | ||
| if (plugin.tag === node.c) { | ||
| if (ctx.child == null) { | ||
| ctx.child = new SerializePluginContext(ctx); | ||
| } | ||
| return plugin.serialize(node.s, ctx.child, { | ||
| id: node.i, | ||
| }); | ||
| } | ||
| } | ||
| throw new SerovalMissingPluginError(node.c); | ||
| } | ||
| throw new SerovalMissingPluginError(node.c); | ||
| } | ||
| private getConstructor(node: SerovalNodeWithID): string { | ||
| const current = this.serialize(node); | ||
| return current === this.getRefParam(node.i) ? current : '(' + current + ')'; | ||
| function serializeIteratorFactory( | ||
| ctx: SerializerContext, | ||
| node: SerovalIteratorFactoryNode, | ||
| ): string { | ||
| let result = ''; | ||
| let initialized = false; | ||
| if (node.f.t !== SerovalNodeType.IndexedValue) { | ||
| markSerializerRef(ctx.base, node.f.i); | ||
| result = '(' + serialize(ctx, node.f) + ','; | ||
| initialized = true; | ||
| } | ||
| protected serializePromiseConstructor( | ||
| node: SerovalPromiseConstructorNode, | ||
| ): string { | ||
| const resolver = this.assignIndexedValue(node.s, '{p:0,s:0,f:0}'); | ||
| return this.assignIndexedValue( | ||
| node.i, | ||
| this.getConstructor(node.f) + '(' + resolver + ')', | ||
| ); | ||
| result += assignIndexedValue( | ||
| ctx, | ||
| node.i, | ||
| '(' + | ||
| SERIALIZED_ITERATOR_CONSTRUCTOR + | ||
| ')(' + | ||
| getRefParam(ctx, node.f.i) + | ||
| ')', | ||
| ); | ||
| if (initialized) { | ||
| result += ')'; | ||
| } | ||
| return result; | ||
| } | ||
| protected serializePromiseResolve(node: SerovalPromiseResolveNode): string { | ||
| return ( | ||
| this.getConstructor(node.a[0]) + | ||
| '(' + | ||
| this.getRefParam(node.i) + | ||
| ',' + | ||
| this.serialize(node.a[1]) + | ||
| ')' | ||
| ); | ||
| } | ||
| function serializeIteratorFactoryInstance( | ||
| ctx: SerializerContext, | ||
| node: SerovalIteratorFactoryInstanceNode, | ||
| ): string { | ||
| return getConstructor(ctx, node.a[0]) + '(' + serialize(ctx, node.a[1]) + ')'; | ||
| } | ||
| protected serializePromiseReject(node: SerovalPromiseRejectNode): string { | ||
| return ( | ||
| this.getConstructor(node.a[0]) + | ||
| '(' + | ||
| this.getRefParam(node.i) + | ||
| ',' + | ||
| this.serialize(node.a[1]) + | ||
| ')' | ||
| ); | ||
| } | ||
| function serializeAsyncIteratorFactory( | ||
| ctx: SerializerContext, | ||
| node: SerovalAsyncIteratorFactoryNode, | ||
| ): string { | ||
| const promise = node.a[0]; | ||
| const symbol = node.a[1]; | ||
| const base = ctx.base; | ||
| protected serializeSpecialReference( | ||
| node: SerovalSpecialReferenceNode, | ||
| ): string { | ||
| return this.assignIndexedValue( | ||
| node.i, | ||
| serializeSpecialReferenceValue(this.features, node.s), | ||
| ); | ||
| } | ||
| let result = ''; | ||
| protected serializeIteratorFactory(node: SerovalIteratorFactoryNode): string { | ||
| let result = ''; | ||
| let initialized = false; | ||
| if (node.f.t !== SerovalNodeType.IndexedValue) { | ||
| this.markRef(node.f.i); | ||
| result = '(' + this.serialize(node.f) + ','; | ||
| initialized = true; | ||
| } | ||
| result += this.assignIndexedValue( | ||
| node.i, | ||
| this.createFunction( | ||
| ['s'], | ||
| this.createFunction( | ||
| ['i', 'c', 'd', 't'], | ||
| '(i=0,t={[' + | ||
| this.getRefParam(node.f.i) + | ||
| ']:' + | ||
| this.createFunction([], 't') + | ||
| ',next:' + | ||
| this.createEffectfulFunction( | ||
| [], | ||
| 'if(i>s.d)return{done:!0,value:void 0};if(d=s.v[c=i++],c===s.t)throw d;return{done:c===s.d,value:d}', | ||
| ) + | ||
| '})', | ||
| ), | ||
| ), | ||
| ); | ||
| if (initialized) { | ||
| result += ')'; | ||
| } | ||
| return result; | ||
| if (promise.t !== SerovalNodeType.IndexedValue) { | ||
| markSerializerRef(base, promise.i); | ||
| result += '(' + serialize(ctx, promise); | ||
| } | ||
| if (symbol.t !== SerovalNodeType.IndexedValue) { | ||
| markSerializerRef(base, symbol.i); | ||
| result += (result ? ',' : '(') + serialize(ctx, symbol); | ||
| } | ||
| if (result) { | ||
| result += ','; | ||
| } | ||
| protected serializeIteratorFactoryInstance( | ||
| node: SerovalIteratorFactoryInstanceNode, | ||
| ): string { | ||
| return ( | ||
| this.getConstructor(node.a[0]) + '(' + this.serialize(node.a[1]) + ')' | ||
| ); | ||
| const iterator = assignIndexedValue( | ||
| ctx, | ||
| node.i, | ||
| '(' + | ||
| SERIALIZED_ASYNC_ITERATOR_CONSTRUCTOR + | ||
| ')(' + | ||
| getRefParam(ctx, symbol.i) + | ||
| ',' + | ||
| getRefParam(ctx, promise.i) + | ||
| ')', | ||
| ); | ||
| if (result) { | ||
| return result + iterator + ')'; | ||
| } | ||
| protected serializeAsyncIteratorFactory( | ||
| node: SerovalAsyncIteratorFactoryNode, | ||
| ): string { | ||
| const promise = node.a[0]; | ||
| const symbol = node.a[1]; | ||
| return iterator; | ||
| } | ||
| let result = ''; | ||
| function serializeAsyncIteratorFactoryInstance( | ||
| ctx: SerializerContext, | ||
| node: SerovalAsyncIteratorFactoryInstanceNode, | ||
| ): string { | ||
| return getConstructor(ctx, node.a[0]) + '(' + serialize(ctx, node.a[1]) + ')'; | ||
| } | ||
| if (promise.t !== SerovalNodeType.IndexedValue) { | ||
| this.markRef(promise.i); | ||
| result += '(' + this.serialize(promise); | ||
| function serializeStreamConstructor( | ||
| ctx: SerializerContext, | ||
| node: SerovalStreamConstructorNode, | ||
| ): string { | ||
| const result = assignIndexedValue( | ||
| ctx, | ||
| node.i, | ||
| getConstructor(ctx, node.f) + '()', | ||
| ); | ||
| const len = node.a.length; | ||
| if (len) { | ||
| let values = serialize(ctx, node.a[0]); | ||
| for (let i = 1; i < len; i++) { | ||
| values += ',' + serialize(ctx, node.a[i]); | ||
| } | ||
| if (symbol.t !== SerovalNodeType.IndexedValue) { | ||
| this.markRef(symbol.i); | ||
| result += (result ? ',' : '(') + this.serialize(symbol); | ||
| } | ||
| if (result) { | ||
| result += ','; | ||
| } | ||
| return '(' + result + ',' + values + ',' + getRefParam(ctx, node.i) + ')'; | ||
| } | ||
| return result; | ||
| } | ||
| const iterator = this.assignIndexedValue( | ||
| node.i, | ||
| this.createFunction( | ||
| ['s'], | ||
| this.createFunction( | ||
| ['b', 'c', 'p', 'd', 'e', 't', 'f'], | ||
| /** | ||
| * b = resolved values | ||
| * c = b size | ||
| * p = pending promises | ||
| * d = index where the resolved value stops | ||
| * e = if the last value is a throw | ||
| * t = placeholder variable | ||
| * f = finalize | ||
| */ | ||
| '(b=[],c=0,p=[],d=-1,e=!1,f=' + | ||
| this.createEffectfulFunction( | ||
| ['i', 'l'], | ||
| 'for(i=0,l=p.length;i<l;i++)p[i].s({done:!0,value:void 0})', | ||
| ) + | ||
| ',s.on({next:' + | ||
| this.createEffectfulFunction( | ||
| ['v', 't'], | ||
| 'if(t=p.shift())t.s({done:!1,value:v});b.push(v)', | ||
| ) + | ||
| ',throw:' + | ||
| this.createEffectfulFunction( | ||
| ['v', 't'], | ||
| 'if(t=p.shift())t.f(v);f(),d=b.length,e=!0,b.push(v)', | ||
| ) + | ||
| ',return:' + | ||
| this.createEffectfulFunction( | ||
| ['v', 't'], | ||
| 'if(t=p.shift())t.s({done:!0,value:v});f(),d=b.length,b.push(v)', | ||
| ) + | ||
| '}),t={[' + | ||
| this.getRefParam(symbol.i) + | ||
| ']:' + | ||
| this.createFunction([], 't.p') + | ||
| ',next:' + | ||
| this.createEffectfulFunction( | ||
| ['i', 't', 'v'], | ||
| 'if(d===-1){return((i=c++)>=b.length)?(' + | ||
| this.getRefParam(promise.i) + | ||
| '(t={p:0,s:0,f:0}),p.push(t),t.p):{done:!1,value:b[i]}}if(c>d)return{done:!0,value:void 0};if(v=b[i=c++],i!==d)return{done:!1,value:v};if(e)throw v;return{done:!0,value:v}', | ||
| ) + | ||
| '})', | ||
| ), | ||
| ), | ||
| ); | ||
| function serializeStreamNext( | ||
| ctx: SerializerContext, | ||
| node: SerovalStreamNextNode, | ||
| ): string { | ||
| return getRefParam(ctx, node.i) + '.next(' + serialize(ctx, node.f) + ')'; | ||
| } | ||
| if (result) { | ||
| return result + iterator + ')'; | ||
| } | ||
| function serializeStreamThrow( | ||
| ctx: SerializerContext, | ||
| node: SerovalStreamThrowNode, | ||
| ): string { | ||
| return getRefParam(ctx, node.i) + '.throw(' + serialize(ctx, node.f) + ')'; | ||
| } | ||
| return iterator; | ||
| function serializeStreamReturn( | ||
| ctx: SerializerContext, | ||
| node: SerovalStreamReturnNode, | ||
| ): string { | ||
| return getRefParam(ctx, node.i) + '.return(' + serialize(ctx, node.f) + ')'; | ||
| } | ||
| function serializeAssignable( | ||
| ctx: SerializerContext, | ||
| node: SerovalNode, | ||
| ): string { | ||
| switch (node.t) { | ||
| case SerovalNodeType.WKSymbol: | ||
| return SYMBOL_STRING[node.s]; | ||
| case SerovalNodeType.Reference: | ||
| return serializeReference(node); | ||
| case SerovalNodeType.Array: | ||
| return serializeArray(ctx, node); | ||
| case SerovalNodeType.Object: | ||
| return serializeObject(ctx, node); | ||
| case SerovalNodeType.NullConstructor: | ||
| return serializeNullConstructor(ctx, node); | ||
| case SerovalNodeType.Date: | ||
| return serializeDate(node); | ||
| case SerovalNodeType.RegExp: | ||
| return serializeRegExp(node); | ||
| case SerovalNodeType.Set: | ||
| return serializeSet(ctx, node); | ||
| case SerovalNodeType.Map: | ||
| return serializeMap(ctx, node); | ||
| case SerovalNodeType.ArrayBuffer: | ||
| return serializeArrayBuffer(ctx, node); | ||
| case SerovalNodeType.BigIntTypedArray: | ||
| case SerovalNodeType.TypedArray: | ||
| return serializeTypedArray(ctx, node); | ||
| case SerovalNodeType.DataView: | ||
| return serializeDataView(ctx, node); | ||
| case SerovalNodeType.AggregateError: | ||
| return serializeAggregateError(ctx, node); | ||
| case SerovalNodeType.Error: | ||
| return serializeError(ctx, node); | ||
| case SerovalNodeType.Promise: | ||
| return serializePromise(ctx, node); | ||
| case SerovalNodeType.Boxed: | ||
| return serializeBoxed(ctx, node); | ||
| case SerovalNodeType.PromiseConstructor: | ||
| return serializePromiseConstructor(ctx, node); | ||
| case SerovalNodeType.Plugin: | ||
| return serializePlugin(ctx, node); | ||
| case SerovalNodeType.SpecialReference: | ||
| return SPECIAL_REF_STRING[node.s]; | ||
| default: | ||
| throw new SerovalUnsupportedNodeError(node); | ||
| } | ||
| } | ||
| protected serializeAsyncIteratorFactoryInstance( | ||
| node: SerovalAsyncIteratorFactoryInstanceNode, | ||
| ): string { | ||
| return ( | ||
| this.getConstructor(node.a[0]) + '(' + this.serialize(node.a[1]) + ')' | ||
| ); | ||
| function serialize(ctx: SerializerContext, node: SerovalNode): string { | ||
| switch (node.t) { | ||
| case SerovalNodeType.Constant: | ||
| return CONSTANT_STRING[node.s]; | ||
| case SerovalNodeType.Number: | ||
| return '' + node.s; | ||
| case SerovalNodeType.String: | ||
| return '"' + node.s + '"'; | ||
| case SerovalNodeType.BigInt: | ||
| return node.s + 'n'; | ||
| case SerovalNodeType.IndexedValue: | ||
| return getRefParam(ctx, node.i); | ||
| case SerovalNodeType.PromiseSuccess: | ||
| return serializePromiseResolve(ctx, node); | ||
| case SerovalNodeType.PromiseFailure: | ||
| return serializePromiseReject(ctx, node); | ||
| case SerovalNodeType.IteratorFactory: | ||
| return serializeIteratorFactory(ctx, node); | ||
| case SerovalNodeType.IteratorFactoryInstance: | ||
| return serializeIteratorFactoryInstance(ctx, node); | ||
| case SerovalNodeType.AsyncIteratorFactory: | ||
| return serializeAsyncIteratorFactory(ctx, node); | ||
| case SerovalNodeType.AsyncIteratorFactoryInstance: | ||
| return serializeAsyncIteratorFactoryInstance(ctx, node); | ||
| case SerovalNodeType.StreamConstructor: | ||
| return serializeStreamConstructor(ctx, node); | ||
| case SerovalNodeType.StreamNext: | ||
| return serializeStreamNext(ctx, node); | ||
| case SerovalNodeType.StreamThrow: | ||
| return serializeStreamThrow(ctx, node); | ||
| case SerovalNodeType.StreamReturn: | ||
| return serializeStreamReturn(ctx, node); | ||
| default: | ||
| return assignIndexedValue(ctx, node.i, serializeAssignable(ctx, node)); | ||
| } | ||
| } | ||
| protected serializeStreamConstructor( | ||
| node: SerovalStreamConstructorNode, | ||
| ): string { | ||
| const result = this.assignIndexedValue( | ||
| node.i, | ||
| this.getConstructor(node.f) + '()', | ||
| ); | ||
| const len = node.a.length; | ||
| if (len) { | ||
| let values = this.serialize(node.a[0]); | ||
| for (let i = 1; i < len; i++) { | ||
| values += ',' + this.serialize(node.a[i]); | ||
| export function serializeRoot( | ||
| ctx: SerializerContext, | ||
| node: SerovalNode, | ||
| ): string { | ||
| try { | ||
| return serialize(ctx, node); | ||
| } catch (error) { | ||
| throw error instanceof SerovalSerializationError | ||
| ? error | ||
| : new SerovalSerializationError(error); | ||
| } | ||
| } | ||
| export function serializeTopVanilla( | ||
| ctx: VanillaSerializerContext, | ||
| tree: SerovalNode, | ||
| ): string { | ||
| const result = serialize(ctx, tree); | ||
| // Shared references detected | ||
| if (tree.i != null && ctx.state.vars.length) { | ||
| const patches = resolvePatches(ctx.base); | ||
| let body = result; | ||
| if (patches) { | ||
| // Get (or create) a ref from the source | ||
| const index = getRefParam(ctx, tree.i); | ||
| body = result + ',' + patches + index; | ||
| if (!result.startsWith(index + '=')) { | ||
| body = index + '=' + body; | ||
| } | ||
| return '(' + result + ',' + values + ',' + this.getRefParam(node.i) + ')'; | ||
| body = '(' + body + ')'; | ||
| } | ||
| return result; | ||
| return '(' + createFunction(ctx.state.vars, body) + ')()'; | ||
| } | ||
| protected serializeStreamNext(node: SerovalStreamNextNode): string { | ||
| return this.getRefParam(node.i) + '.next(' + this.serialize(node.f) + ')'; | ||
| if (tree.t === SerovalNodeType.Object) { | ||
| return '(' + result + ')'; | ||
| } | ||
| return result; | ||
| } | ||
| protected serializeStreamThrow(node: SerovalStreamThrowNode): string { | ||
| return this.getRefParam(node.i) + '.throw(' + this.serialize(node.f) + ')'; | ||
| export function serializeTopCross( | ||
| ctx: CrossSerializerContext, | ||
| tree: SerovalNode, | ||
| ): string { | ||
| // Get the serialized result | ||
| const result = serialize(ctx, tree); | ||
| // If the node is a non-reference, return | ||
| // the result immediately | ||
| const id = tree.i; | ||
| if (id == null) { | ||
| return result; | ||
| } | ||
| protected serializeStreamReturn(node: SerovalStreamReturnNode): string { | ||
| return this.getRefParam(node.i) + '.return(' + this.serialize(node.f) + ')'; | ||
| } | ||
| serialize(node: SerovalNode): string { | ||
| try { | ||
| switch (node.t) { | ||
| case SerovalNodeType.Constant: | ||
| return CONSTANT_STRING[node.s]; | ||
| case SerovalNodeType.Number: | ||
| return '' + node.s; | ||
| case SerovalNodeType.String: | ||
| return '"' + node.s + '"'; | ||
| case SerovalNodeType.BigInt: | ||
| return node.s + 'n'; | ||
| case SerovalNodeType.IndexedValue: | ||
| return this.getRefParam(node.i); | ||
| case SerovalNodeType.Reference: | ||
| return this.serializeReference(node); | ||
| case SerovalNodeType.Array: | ||
| return this.serializeArray(node); | ||
| case SerovalNodeType.Object: | ||
| return this.serializeObject(node); | ||
| case SerovalNodeType.NullConstructor: | ||
| return this.serializeNullConstructor(node); | ||
| case SerovalNodeType.Date: | ||
| return this.serializeDate(node); | ||
| case SerovalNodeType.RegExp: | ||
| return this.serializeRegExp(node); | ||
| case SerovalNodeType.Set: | ||
| return this.serializeSet(node); | ||
| case SerovalNodeType.Map: | ||
| return this.serializeMap(node); | ||
| case SerovalNodeType.ArrayBuffer: | ||
| return this.serializeArrayBuffer(node); | ||
| case SerovalNodeType.BigIntTypedArray: | ||
| case SerovalNodeType.TypedArray: | ||
| return this.serializeTypedArray(node); | ||
| case SerovalNodeType.DataView: | ||
| return this.serializeDataView(node); | ||
| case SerovalNodeType.AggregateError: | ||
| return this.serializeAggregateError(node); | ||
| case SerovalNodeType.Error: | ||
| return this.serializeError(node); | ||
| case SerovalNodeType.Promise: | ||
| return this.serializePromise(node); | ||
| case SerovalNodeType.WKSymbol: | ||
| return this.serializeWellKnownSymbol(node); | ||
| case SerovalNodeType.Boxed: | ||
| return this.serializeBoxed(node); | ||
| case SerovalNodeType.PromiseConstructor: | ||
| return this.serializePromiseConstructor(node); | ||
| case SerovalNodeType.PromiseSuccess: | ||
| return this.serializePromiseResolve(node); | ||
| case SerovalNodeType.PromiseFailure: | ||
| return this.serializePromiseReject(node); | ||
| case SerovalNodeType.Plugin: | ||
| return this.serializePlugin(node); | ||
| case SerovalNodeType.SpecialReference: | ||
| return this.serializeSpecialReference(node); | ||
| case SerovalNodeType.IteratorFactory: | ||
| return this.serializeIteratorFactory(node); | ||
| case SerovalNodeType.IteratorFactoryInstance: | ||
| return this.serializeIteratorFactoryInstance(node); | ||
| case SerovalNodeType.AsyncIteratorFactory: | ||
| return this.serializeAsyncIteratorFactory(node); | ||
| case SerovalNodeType.AsyncIteratorFactoryInstance: | ||
| return this.serializeAsyncIteratorFactoryInstance(node); | ||
| case SerovalNodeType.StreamConstructor: | ||
| return this.serializeStreamConstructor(node); | ||
| case SerovalNodeType.StreamNext: | ||
| return this.serializeStreamNext(node); | ||
| case SerovalNodeType.StreamThrow: | ||
| return this.serializeStreamThrow(node); | ||
| case SerovalNodeType.StreamReturn: | ||
| return this.serializeStreamReturn(node); | ||
| default: | ||
| throw new SerovalUnsupportedNodeError(node); | ||
| } | ||
| } catch (error) { | ||
| throw new SerovalSerializationError(error); | ||
| // Get the patches | ||
| const patches = resolvePatches(ctx.base); | ||
| // Get the variable that represents the root | ||
| const ref = getRefParam(ctx, id); | ||
| const scopeId = ctx.state.scopeId; | ||
| // Parameters needed for scoping | ||
| const params = scopeId == null ? '' : GLOBAL_CONTEXT_REFERENCES; | ||
| // If there are patches, append it after the result | ||
| const body = patches ? '(' + result + ',' + patches + ref + ')' : result; | ||
| // If there are no params, there's no need to generate a function | ||
| if (params === '') { | ||
| if (tree.t === SerovalNodeType.Object && !patches) { | ||
| return '(' + body + ')'; | ||
| } | ||
| return body; | ||
| } | ||
| // Get the arguments for the IIFE | ||
| const args = | ||
| scopeId == null | ||
| ? '()' | ||
| : '(' + | ||
| GLOBAL_CONTEXT_REFERENCES + | ||
| '["' + | ||
| serializeString(scopeId) + | ||
| '"])'; | ||
| // Create the IIFE | ||
| return '(' + createFunction([params], body) + ')' + args; | ||
| } |
+63
-47
@@ -1,16 +0,32 @@ | ||
| import { resolvePlugins } from '../plugin'; | ||
| import type { AsyncParserContextOptions } from '../context/async-parser'; | ||
| import { | ||
| createAsyncParserContext, | ||
| parseTopAsync, | ||
| } from '../context/async-parser'; | ||
| import type { CrossDeserializerContextOptions } from '../context/deserializer'; | ||
| import { | ||
| createCrossDeserializerContext, | ||
| deserializeTop, | ||
| } from '../context/deserializer'; | ||
| import type { CrossContextOptions } from '../context/serializer'; | ||
| import { | ||
| createCrossSerializerContext, | ||
| serializeTopCross, | ||
| } from '../context/serializer'; | ||
| import type { | ||
| StreamParserContextOptions, | ||
| SyncParserContextOptions, | ||
| } from '../context/sync-parser'; | ||
| import { | ||
| createStreamParserContext, | ||
| createSyncParserContext, | ||
| destroyStreamParse, | ||
| parseTop, | ||
| startStreamParse, | ||
| } from '../context/sync-parser'; | ||
| import { resolvePlugins, SerovalMode } from '../plugin'; | ||
| import type { SerovalNode } from '../types'; | ||
| import type { CrossAsyncParserContextOptions } from './async'; | ||
| import AsyncCrossParserContext from './async'; | ||
| import type { CrossDeserializerContextOptions } from './deserializer'; | ||
| import CrossDeserializerContext from './deserializer'; | ||
| import type { CrossContextOptions, CrossParserContextOptions } from './parser'; | ||
| import CrossSerializerContext from './serializer'; | ||
| import type { CrossStreamParserContextOptions } from './stream'; | ||
| import StreamCrossParserContext from './stream'; | ||
| import type { CrossSyncParserContextOptions } from './sync'; | ||
| import SyncCrossParserContext from './sync'; | ||
| export interface CrossSerializeOptions | ||
| extends CrossSyncParserContextOptions, | ||
| extends SyncParserContextOptions, | ||
| CrossContextOptions {} | ||
@@ -23,3 +39,3 @@ | ||
| const plugins = resolvePlugins(options.plugins); | ||
| const ctx = new SyncCrossParserContext({ | ||
| const ctx = createSyncParserContext(SerovalMode.Cross, { | ||
| plugins, | ||
@@ -29,14 +45,14 @@ disabledFeatures: options.disabledFeatures, | ||
| }); | ||
| const tree = ctx.parseTop(source); | ||
| const serial = new CrossSerializerContext({ | ||
| const tree = parseTop(ctx, source); | ||
| const serial = createCrossSerializerContext({ | ||
| plugins, | ||
| features: ctx.features, | ||
| features: ctx.base.features, | ||
| scopeId: options.scopeId, | ||
| markedRefs: ctx.marked, | ||
| markedRefs: ctx.base.marked, | ||
| }); | ||
| return serial.serializeTop(tree); | ||
| return serializeTopCross(serial, tree); | ||
| } | ||
| export interface CrossSerializeAsyncOptions | ||
| extends CrossAsyncParserContextOptions, | ||
| extends AsyncParserContextOptions, | ||
| CrossContextOptions {} | ||
@@ -49,3 +65,3 @@ | ||
| const plugins = resolvePlugins(options.plugins); | ||
| const ctx = new AsyncCrossParserContext({ | ||
| const ctx = createAsyncParserContext(SerovalMode.Cross, { | ||
| plugins, | ||
@@ -55,20 +71,20 @@ disabledFeatures: options.disabledFeatures, | ||
| }); | ||
| const tree = await ctx.parseTop(source); | ||
| const serial = new CrossSerializerContext({ | ||
| const tree = await parseTopAsync(ctx, source); | ||
| const serial = createCrossSerializerContext({ | ||
| plugins, | ||
| features: ctx.features, | ||
| features: ctx.base.features, | ||
| scopeId: options.scopeId, | ||
| markedRefs: ctx.marked, | ||
| markedRefs: ctx.base.marked, | ||
| }); | ||
| return serial.serializeTop(tree); | ||
| return serializeTopCross(serial, tree); | ||
| } | ||
| export type ToCrossJSONOptions = CrossParserContextOptions; | ||
| export type ToCrossJSONOptions = SyncParserContextOptions; | ||
| export function toCrossJSON<T>( | ||
| source: T, | ||
| options: CrossParserContextOptions = {}, | ||
| options: ToCrossJSONOptions = {}, | ||
| ): SerovalNode { | ||
| const plugins = resolvePlugins(options.plugins); | ||
| const ctx = new SyncCrossParserContext({ | ||
| const ctx = createSyncParserContext(SerovalMode.Cross, { | ||
| plugins, | ||
@@ -78,13 +94,13 @@ disabledFeatures: options.disabledFeatures, | ||
| }); | ||
| return ctx.parseTop(source); | ||
| return parseTop(ctx, source); | ||
| } | ||
| export type ToCrossJSONAsyncOptions = CrossParserContextOptions; | ||
| export type ToCrossJSONAsyncOptions = AsyncParserContextOptions; | ||
| export async function toCrossJSONAsync<T>( | ||
| source: T, | ||
| options: CrossParserContextOptions = {}, | ||
| options: ToCrossJSONAsyncOptions = {}, | ||
| ): Promise<SerovalNode> { | ||
| const plugins = resolvePlugins(options.plugins); | ||
| const ctx = new AsyncCrossParserContext({ | ||
| const ctx = createAsyncParserContext(SerovalMode.Cross, { | ||
| plugins, | ||
@@ -94,7 +110,7 @@ disabledFeatures: options.disabledFeatures, | ||
| }); | ||
| return await ctx.parseTop(source); | ||
| return await parseTopAsync(ctx, source); | ||
| } | ||
| export interface CrossSerializeStreamOptions | ||
| extends Omit<CrossStreamParserContextOptions, 'onParse'>, | ||
| extends Omit<StreamParserContextOptions, 'onParse'>, | ||
| CrossContextOptions { | ||
@@ -109,3 +125,3 @@ onSerialize: (data: string, initial: boolean) => void; | ||
| const plugins = resolvePlugins(options.plugins); | ||
| const ctx = new StreamCrossParserContext({ | ||
| const ctx = createStreamParserContext({ | ||
| plugins, | ||
@@ -115,7 +131,7 @@ refs: options.refs, | ||
| onParse(node, initial): void { | ||
| const serial = new CrossSerializerContext({ | ||
| const serial = createCrossSerializerContext({ | ||
| plugins, | ||
| features: ctx.features, | ||
| features: ctx.base.features, | ||
| scopeId: options.scopeId, | ||
| markedRefs: ctx.marked, | ||
| markedRefs: ctx.base.marked, | ||
| }); | ||
@@ -126,3 +142,3 @@ | ||
| try { | ||
| serialized = serial.serializeTop(node); | ||
| serialized = serializeTopCross(serial, node); | ||
| } catch (err) { | ||
@@ -141,8 +157,8 @@ if (options.onError) { | ||
| ctx.start(source); | ||
| startStreamParse(ctx, source); | ||
| return ctx.destroy.bind(ctx); | ||
| return destroyStreamParse.bind(null, ctx); | ||
| } | ||
| export type ToCrossJSONStreamOptions = CrossStreamParserContextOptions; | ||
| export type ToCrossJSONStreamOptions = StreamParserContextOptions; | ||
@@ -154,3 +170,3 @@ export function toCrossJSONStream<T>( | ||
| const plugins = resolvePlugins(options.plugins); | ||
| const ctx = new StreamCrossParserContext({ | ||
| const ctx = createStreamParserContext({ | ||
| plugins, | ||
@@ -164,5 +180,5 @@ refs: options.refs, | ||
| ctx.start(source); | ||
| startStreamParse(ctx, source); | ||
| return ctx.destroy.bind(ctx); | ||
| return destroyStreamParse.bind(null, ctx); | ||
| } | ||
@@ -177,7 +193,7 @@ | ||
| const plugins = resolvePlugins(options.plugins); | ||
| const ctx = new CrossDeserializerContext({ | ||
| const ctx = createCrossDeserializerContext({ | ||
| plugins, | ||
| refs: options.refs, | ||
| }); | ||
| return ctx.deserializeTop(source) as T; | ||
| return deserializeTop(ctx, source) as T; | ||
| } |
+73
-12
@@ -0,1 +1,3 @@ | ||
| /// <reference types="pridepack/env" /> | ||
| import { serializeString } from './string'; | ||
@@ -6,3 +8,9 @@ import type { SerovalNode } from './types'; | ||
| function getErrorMessage(type: string, cause: any): string { | ||
| const enum StepErrorCodes { | ||
| Parse = 1, | ||
| Serialize = 2, | ||
| Deserialize = 3, | ||
| } | ||
| function getErrorMessageDev(type: string, cause: any): string { | ||
| if (cause instanceof Error) { | ||
@@ -24,2 +32,17 @@ return `Seroval caught an error during the ${type} process. | ||
| const STEP_ERROR_CODES: Record<string, StepErrorCodes> = { | ||
| parsing: StepErrorCodes.Parse, | ||
| serialization: StepErrorCodes.Serialize, | ||
| deserialization: StepErrorCodes.Deserialize, | ||
| }; | ||
| function getErrorMessageProd(type: string): string { | ||
| return `Seroval Error (step: ${STEP_ERROR_CODES[type]})`; | ||
| } | ||
| const getErrorMessage = (type: string, cause: any) => | ||
| import.meta.env.PROD | ||
| ? getErrorMessageProd(type) | ||
| : getErrorMessageDev(type, cause); | ||
| export class SerovalError extends Error { | ||
@@ -52,6 +75,22 @@ constructor( | ||
| const enum SpecificErrorCodes { | ||
| UnsupportedType = 1, | ||
| UnsupportedNode = 2, | ||
| MissingPlugin = 3, | ||
| MissingInstance = 4, | ||
| MissingReference = 5, | ||
| MissingReferenceForId = 6, | ||
| UnknownTypedArray = 7, | ||
| } | ||
| function getSpecificErrorMessage(code: SpecificErrorCodes): string { | ||
| return `Seroval Error (specific: ${code})`; | ||
| } | ||
| export class SerovalUnsupportedTypeError extends Error { | ||
| constructor(public value: unknown) { | ||
| super( | ||
| `The value ${objectToString.call(value)} of type "${typeof value}" cannot be parsed/serialized. | ||
| import.meta.env.PROD | ||
| ? getSpecificErrorMessage(SpecificErrorCodes.UnsupportedType) | ||
| : `The value ${objectToString.call(value)} of type "${typeof value}" cannot be parsed/serialized. | ||
@@ -67,3 +106,7 @@ There are few workarounds for this problem: | ||
| constructor(node: SerovalNode) { | ||
| super('Unsupported node type "' + node.t + '".'); | ||
| super( | ||
| import.meta.env.PROD | ||
| ? getSpecificErrorMessage(SpecificErrorCodes.UnsupportedNode) | ||
| : 'Unsupported node type "' + node.t + '".', | ||
| ); | ||
| } | ||
@@ -74,3 +117,7 @@ } | ||
| constructor(tag: string) { | ||
| super('Missing plugin for tag "' + tag + '".'); | ||
| super( | ||
| import.meta.env.PROD | ||
| ? getSpecificErrorMessage(SpecificErrorCodes.MissingPlugin) | ||
| : 'Missing plugin for tag "' + tag + '".', | ||
| ); | ||
| } | ||
@@ -81,3 +128,7 @@ } | ||
| constructor(tag: string) { | ||
| super('Missing "' + tag + '" instance.'); | ||
| super( | ||
| import.meta.env.PROD | ||
| ? getSpecificErrorMessage(SpecificErrorCodes.MissingInstance) | ||
| : 'Missing "' + tag + '" instance.', | ||
| ); | ||
| } | ||
@@ -89,7 +140,9 @@ } | ||
| super( | ||
| 'Missing reference for the value "' + | ||
| objectToString.call(value) + | ||
| '" of type "' + | ||
| typeof value + | ||
| '"', | ||
| import.meta.env.PROD | ||
| ? getSpecificErrorMessage(SpecificErrorCodes.MissingReference) | ||
| : 'Missing reference for the value "' + | ||
| objectToString.call(value) + | ||
| '" of type "' + | ||
| typeof value + | ||
| '"', | ||
| ); | ||
@@ -101,3 +154,7 @@ } | ||
| constructor(id: string) { | ||
| super('Missing reference for id "' + serializeString(id) + '"'); | ||
| super( | ||
| import.meta.env.PROD | ||
| ? getSpecificErrorMessage(SpecificErrorCodes.MissingReferenceForId) | ||
| : 'Missing reference for id "' + serializeString(id) + '"', | ||
| ); | ||
| } | ||
@@ -108,4 +165,8 @@ } | ||
| constructor(name: string) { | ||
| super('Unknown TypedArray "' + name + '"'); | ||
| super( | ||
| import.meta.env.PROD | ||
| ? getSpecificErrorMessage(SpecificErrorCodes.UnknownTypedArray) | ||
| : 'Unknown TypedArray "' + name + '"', | ||
| ); | ||
| } | ||
| } |
@@ -1,9 +0,11 @@ | ||
| import { Feature } from './compat'; | ||
| export function createFunction( | ||
| features: number, | ||
| parameters: string[], | ||
| body: string, | ||
| ): string { | ||
| if (features & Feature.ArrowFunction) { | ||
| declare const T: unknown; | ||
| const RETURN = () => T; | ||
| const SERIALIZED_RETURN = /* @__PURE__ */ RETURN.toString(); | ||
| const IS_MODERN = /* @__PURE__ */ /=>/.test(SERIALIZED_RETURN); | ||
| export function createFunction(parameters: string[], body: string): string { | ||
| if (IS_MODERN) { | ||
| const joined = | ||
@@ -19,7 +21,6 @@ parameters.length === 1 | ||
| export function createEffectfulFunction( | ||
| features: number, | ||
| parameters: string[], | ||
| body: string, | ||
| ): string { | ||
| if (features & Feature.ArrowFunction) { | ||
| if (IS_MODERN) { | ||
| const joined = | ||
@@ -32,2 +33,2 @@ parameters.length === 1 | ||
| return 'function(' + parameters.join(',') + '){' + body + '}'; | ||
| } | ||
| } |
+20
-11
@@ -1,8 +0,13 @@ | ||
| import type BaseDeserializerContext from './context/deserializer'; | ||
| import type BaseAsyncParserContext from './context/parser/async'; | ||
| import type BaseStreamParserContext from './context/parser/stream'; | ||
| import type BaseSyncParserContext from './context/parser/sync'; | ||
| import type BaseSerializerContext from './context/serializer'; | ||
| import type { AsyncParsePluginContext } from './context/async-parser'; | ||
| import type { DeserializePluginContext } from './context/deserializer'; | ||
| import type { SerializePluginContext } from './context/serializer'; | ||
| import type { | ||
| StreamParsePluginContext, | ||
| SyncParsePluginContext, | ||
| } from './context/sync-parser'; | ||
| export type SerovalMode = 'vanilla' | 'cross'; | ||
| export const enum SerovalMode { | ||
| Vanilla = 1, | ||
| Cross = 2, | ||
| } | ||
@@ -31,6 +36,10 @@ export interface PluginData { | ||
| parse: { | ||
| sync?: (value: Value, ctx: BaseSyncParserContext, data: PluginData) => Node; | ||
| sync?: ( | ||
| value: Value, | ||
| ctx: SyncParsePluginContext, | ||
| data: PluginData, | ||
| ) => Node; | ||
| async?: ( | ||
| value: Value, | ||
| ctx: BaseAsyncParserContext, | ||
| ctx: AsyncParsePluginContext, | ||
| data: PluginData, | ||
@@ -40,3 +49,3 @@ ) => Promise<Node>; | ||
| value: Value, | ||
| ctx: BaseStreamParserContext, | ||
| ctx: StreamParsePluginContext, | ||
| data: PluginData, | ||
@@ -48,3 +57,3 @@ ) => Node; | ||
| */ | ||
| serialize(node: Node, ctx: BaseSerializerContext, data: PluginData): string; | ||
| serialize(node: Node, ctx: SerializePluginContext, data: PluginData): string; | ||
| /** | ||
@@ -55,3 +64,3 @@ * Convert the parsed node into its runtime equivalent. | ||
| node: Node, | ||
| ctx: BaseDeserializerContext, | ||
| ctx: DeserializePluginContext, | ||
| data: PluginData, | ||
@@ -58,0 +67,0 @@ ): Value; |
@@ -6,3 +6,2 @@ import { | ||
| import { REFERENCES_KEY } from './keys'; | ||
| import assert from './utils/assert'; | ||
@@ -27,9 +26,13 @@ const REFERENCE = new Map<unknown, string>(); | ||
| export function getReferenceID<T>(value: T): string { | ||
| assert(hasReferenceID(value), new SerovalMissingReferenceError(value)); | ||
| return REFERENCE.get(value)!; | ||
| if (hasReferenceID(value)) { | ||
| return REFERENCE.get(value)!; | ||
| } | ||
| throw new SerovalMissingReferenceError(value); | ||
| } | ||
| export function getReference<T>(id: string): T { | ||
| assert(hasReference(id), new SerovalMissingReferenceForIdError(id)); | ||
| return INV_REFERENCE.get(id) as T; | ||
| if (hasReference(id)) { | ||
| return INV_REFERENCE.get(id) as T; | ||
| } | ||
| throw new SerovalMissingReferenceForIdError(id); | ||
| } | ||
@@ -36,0 +39,0 @@ |
@@ -1,2 +0,8 @@ | ||
| import { createEffectfulFunction, createFunction } from './function-string'; | ||
| import { | ||
| SERIALIZED_ARRAY_BUFFER_CONSTRUCTOR, | ||
| SERIALIZED_PROMISE_CONSTRUCTOR, | ||
| SERIALIZED_PROMISE_FAILURE, | ||
| SERIALIZED_PROMISE_SUCCESS, | ||
| SERIALIZED_STREAM_CONSTRUCTOR, | ||
| } from './constructors'; | ||
@@ -13,2 +19,3 @@ export const ITERATOR = {}; | ||
| StreamConstructor = 4, | ||
| ArrayBufferConstructor = 5, | ||
| } | ||
@@ -25,92 +32,13 @@ | ||
| [SpecialReference.StreamConstructor]: {}, | ||
| [SpecialReference.ArrayBufferConstructor]: {}, | ||
| }; | ||
| function serializePromiseConstructor(features: number): string { | ||
| return createFunction( | ||
| features, | ||
| ['r'], | ||
| '(r.p=new Promise(' + | ||
| createEffectfulFunction(features, ['s', 'f'], 'r.s=s,r.f=f') + | ||
| '))', | ||
| ); | ||
| } | ||
| function serializePromiseSuccess(features: number): string { | ||
| return createEffectfulFunction( | ||
| features, | ||
| ['r', 'd'], | ||
| 'r.s(d),r.p.s=1,r.p.v=d', | ||
| ); | ||
| } | ||
| function serializePromiseFailure(features: number): string { | ||
| return createEffectfulFunction( | ||
| features, | ||
| ['r', 'd'], | ||
| 'r.f(d),r.p.s=2,r.p.v=d', | ||
| ); | ||
| } | ||
| function serializeStreamConstructor(features: number): string { | ||
| return createFunction( | ||
| features, | ||
| ['b', 'a', 's', 'l', 'p', 'f', 'e', 'n'], | ||
| '(b=[],a=!0,s=!1,l=[],p=0,f=' + | ||
| createEffectfulFunction( | ||
| features, | ||
| ['v', 'm', 'x'], | ||
| 'for(x=0;x<p;x++)l[x]&&l[x][m](v)', | ||
| ) + | ||
| ',n=' + | ||
| createEffectfulFunction( | ||
| features, | ||
| ['o', 'x', 'z', 'c'], | ||
| 'for(x=0,z=b.length;x<z;x++)(c=b[x],(!a&&x===z-1)?o[s?"return":"throw"](c):o.next(c))', | ||
| ) + | ||
| ',e=' + | ||
| createFunction( | ||
| features, | ||
| ['o', 't'], | ||
| '(a&&(l[t=p++]=o),n(o),' + | ||
| createEffectfulFunction(features, [], 'a&&(l[t]=void 0)') + | ||
| ')', | ||
| ) + | ||
| ',{__SEROVAL_STREAM__:!0,on:' + | ||
| createFunction(features, ['o'], 'e(o)') + | ||
| ',next:' + | ||
| createEffectfulFunction(features, ['v'], 'a&&(b.push(v),f(v,"next"))') + | ||
| ',throw:' + | ||
| createEffectfulFunction( | ||
| features, | ||
| ['v'], | ||
| 'a&&(b.push(v),f(v,"throw"),a=s=!1,l.length=0)', | ||
| ) + | ||
| ',return:' + | ||
| createEffectfulFunction( | ||
| features, | ||
| ['v'], | ||
| 'a&&(b.push(v),f(v,"return"),a=!1,s=!0,l.length=0)', | ||
| ) + | ||
| '})', | ||
| ); | ||
| } | ||
| export function serializeSpecialReferenceValue( | ||
| features: number, | ||
| ref: SpecialReference, | ||
| ): string { | ||
| switch (ref) { | ||
| case SpecialReference.MapSentinel: | ||
| return '[]'; | ||
| case SpecialReference.PromiseConstructor: | ||
| return serializePromiseConstructor(features); | ||
| case SpecialReference.PromiseSuccess: | ||
| return serializePromiseSuccess(features); | ||
| case SpecialReference.PromiseFailure: | ||
| return serializePromiseFailure(features); | ||
| case SpecialReference.StreamConstructor: | ||
| return serializeStreamConstructor(features); | ||
| default: | ||
| return ''; | ||
| } | ||
| } | ||
| export const SPECIAL_REF_STRING: Record<SpecialReference, string> = { | ||
| [SpecialReference.MapSentinel]: '[]', | ||
| [SpecialReference.PromiseConstructor]: SERIALIZED_PROMISE_CONSTRUCTOR, | ||
| [SpecialReference.PromiseSuccess]: SERIALIZED_PROMISE_SUCCESS, | ||
| [SpecialReference.PromiseFailure]: SERIALIZED_PROMISE_FAILURE, | ||
| [SpecialReference.StreamConstructor]: SERIALIZED_STREAM_CONSTRUCTOR, | ||
| [SpecialReference.ArrayBufferConstructor]: | ||
| SERIALIZED_ARRAY_BUFFER_CONSTRUCTOR, | ||
| }; |
+17
-151
@@ -1,5 +0,9 @@ | ||
| import type { Deferred } from './utils/deferred'; | ||
| import { createDeferred } from './utils/deferred'; | ||
| import { | ||
| ASYNC_ITERATOR_CONSTRUCTOR, | ||
| PROMISE_CONSTRUCTOR, | ||
| STREAM_CONSTRUCTOR, | ||
| } from './constructors'; | ||
| import { SYM_ASYNC_ITERATOR } from './symbols'; | ||
| interface StreamListener<T> { | ||
| export interface StreamListener<T> { | ||
| next(value: T): void; | ||
@@ -25,74 +29,3 @@ throw(value: unknown): void; | ||
| export function createStream<T>(): Stream<T> { | ||
| const listeners = new Set<StreamListener<T>>(); | ||
| const buffer: unknown[] = []; | ||
| let alive = true; | ||
| let success = true; | ||
| function flushNext(value: T): void { | ||
| for (const listener of listeners.keys()) { | ||
| listener.next(value); | ||
| } | ||
| } | ||
| function flushThrow(value: unknown): void { | ||
| for (const listener of listeners.keys()) { | ||
| listener.throw(value); | ||
| } | ||
| } | ||
| function flushReturn(value: T): void { | ||
| for (const listener of listeners.keys()) { | ||
| listener.return(value); | ||
| } | ||
| } | ||
| return { | ||
| __SEROVAL_STREAM__: true, | ||
| on(listener: StreamListener<T>): () => void { | ||
| if (alive) { | ||
| listeners.add(listener); | ||
| } | ||
| for (let i = 0, len = buffer.length; i < len; i++) { | ||
| const value = buffer[i]; | ||
| if (i === len - 1 && !alive) { | ||
| if (success) { | ||
| listener.return(value as T); | ||
| } else { | ||
| listener.throw(value); | ||
| } | ||
| } else { | ||
| listener.next(value as T); | ||
| } | ||
| } | ||
| return () => { | ||
| if (alive) { | ||
| listeners.delete(listener); | ||
| } | ||
| }; | ||
| }, | ||
| next(value): void { | ||
| if (alive) { | ||
| buffer.push(value); | ||
| flushNext(value); | ||
| } | ||
| }, | ||
| throw(value): void { | ||
| if (alive) { | ||
| buffer.push(value); | ||
| flushThrow(value); | ||
| alive = false; | ||
| success = false; | ||
| listeners.clear(); | ||
| } | ||
| }, | ||
| return(value): void { | ||
| if (alive) { | ||
| buffer.push(value); | ||
| flushReturn(value); | ||
| alive = false; | ||
| success = true; | ||
| listeners.clear(); | ||
| } | ||
| }, | ||
| }; | ||
| return STREAM_CONSTRUCTOR() as unknown as Stream<T>; | ||
| } | ||
@@ -105,3 +38,3 @@ | ||
| const iterator = iterable[Symbol.asyncIterator](); | ||
| const iterator = iterable[SYM_ASYNC_ITERATOR](); | ||
@@ -129,80 +62,13 @@ async function push(): Promise<void> { | ||
| const createAsyncIterable = ASYNC_ITERATOR_CONSTRUCTOR( | ||
| SYM_ASYNC_ITERATOR, | ||
| PROMISE_CONSTRUCTOR, | ||
| ); | ||
| export function streamToAsyncIterable<T>( | ||
| stream: Stream<T>, | ||
| ): () => AsyncIterableIterator<T> { | ||
| return (): AsyncIterableIterator<T> => { | ||
| const buffer: T[] = []; | ||
| const pending: Deferred[] = []; | ||
| let count = 0; | ||
| let doneAt = -1; | ||
| let isThrow = false; | ||
| function resolveAll(): void { | ||
| for (let i = 0, len = pending.length; i < len; i++) { | ||
| pending[i].resolve({ done: true, value: undefined }); | ||
| } | ||
| } | ||
| stream.on({ | ||
| next(value) { | ||
| const current = pending.shift(); | ||
| if (current) { | ||
| current.resolve({ done: false, value }); | ||
| } | ||
| buffer.push(value); | ||
| }, | ||
| throw(value) { | ||
| const current = pending.shift(); | ||
| if (current) { | ||
| current.reject(value); | ||
| } | ||
| resolveAll(); | ||
| doneAt = buffer.length; | ||
| buffer.push(value as T); | ||
| isThrow = true; | ||
| }, | ||
| return(value) { | ||
| const current = pending.shift(); | ||
| if (current) { | ||
| current.resolve({ done: true, value }); | ||
| } | ||
| resolveAll(); | ||
| doneAt = buffer.length; | ||
| buffer.push(value); | ||
| }, | ||
| }); | ||
| function finalize() { | ||
| const current = count++; | ||
| const value = buffer[current]; | ||
| if (current !== doneAt) { | ||
| return { done: false, value }; | ||
| } | ||
| if (isThrow) { | ||
| throw value; | ||
| } | ||
| return { done: true, value }; | ||
| } | ||
| return { | ||
| [Symbol.asyncIterator](): AsyncIterableIterator<T> { | ||
| return this; | ||
| }, | ||
| async next(): Promise<IteratorResult<T>> { | ||
| if (doneAt === -1) { | ||
| const current = count++; | ||
| if (current >= buffer.length) { | ||
| const deferred = createDeferred(); | ||
| pending.push(deferred); | ||
| return (await deferred.promise) as Promise<IteratorResult<T>>; | ||
| } | ||
| return { done: false, value: buffer[current] }; | ||
| } | ||
| if (count > doneAt) { | ||
| return { done: true, value: undefined }; | ||
| } | ||
| return finalize(); | ||
| }, | ||
| }; | ||
| }; | ||
| return createAsyncIterable( | ||
| stream, | ||
| ) as unknown as () => AsyncIterableIterator<T>; | ||
| } |
+45
-31
@@ -1,9 +0,23 @@ | ||
| import { type PluginAccessOptions, resolvePlugins } from '../plugin'; | ||
| import { | ||
| createAsyncParserContext, | ||
| parseTopAsync, | ||
| } from '../context/async-parser'; | ||
| import { | ||
| createVanillaDeserializerContext, | ||
| deserializeTop, | ||
| } from '../context/deserializer'; | ||
| import type { BaseParserContextOptions } from '../context/parser'; | ||
| import { | ||
| createVanillaSerializerContext, | ||
| serializeTopVanilla, | ||
| } from '../context/serializer'; | ||
| import { createSyncParserContext, parseTop } from '../context/sync-parser'; | ||
| import { | ||
| type PluginAccessOptions, | ||
| resolvePlugins, | ||
| SerovalMode, | ||
| } from '../plugin'; | ||
| import type { SerovalNode } from '../types'; | ||
| import type { AsyncParserContextOptions } from './async'; | ||
| import AsyncParserContext from './async'; | ||
| import VanillaDeserializerContext from './deserializer'; | ||
| import VanillaSerializerContext from './serializer'; | ||
| import type { SyncParserContextOptions } from './sync'; | ||
| import SyncParserContext from './sync'; | ||
| export type SyncParserContextOptions = Omit<BaseParserContextOptions, 'refs'>; | ||
| export type AsyncParserContextOptions = Omit<BaseParserContextOptions, 'refs'>; | ||
@@ -15,13 +29,13 @@ export function serialize<T>( | ||
| const plugins = resolvePlugins(options.plugins); | ||
| const ctx = new SyncParserContext({ | ||
| const ctx = createSyncParserContext(SerovalMode.Vanilla, { | ||
| plugins, | ||
| disabledFeatures: options.disabledFeatures, | ||
| }); | ||
| const tree = ctx.parseTop(source); | ||
| const serial = new VanillaSerializerContext({ | ||
| const tree = parseTop(ctx, source); | ||
| const serial = createVanillaSerializerContext({ | ||
| plugins, | ||
| features: ctx.features, | ||
| markedRefs: ctx.marked, | ||
| features: ctx.base.features, | ||
| markedRefs: ctx.base.marked, | ||
| }); | ||
| return serial.serializeTop(tree); | ||
| return serializeTopVanilla(serial, tree); | ||
| } | ||
@@ -34,13 +48,13 @@ | ||
| const plugins = resolvePlugins(options.plugins); | ||
| const ctx = new AsyncParserContext({ | ||
| const ctx = createAsyncParserContext(SerovalMode.Vanilla, { | ||
| plugins, | ||
| disabledFeatures: options.disabledFeatures, | ||
| }); | ||
| const tree = await ctx.parseTop(source); | ||
| const serial = new VanillaSerializerContext({ | ||
| const tree = await parseTopAsync(ctx, source); | ||
| const serial = createVanillaSerializerContext({ | ||
| plugins, | ||
| features: ctx.features, | ||
| markedRefs: ctx.marked, | ||
| features: ctx.base.features, | ||
| markedRefs: ctx.base.marked, | ||
| }); | ||
| return serial.serializeTop(tree); | ||
| return serializeTopVanilla(serial, tree); | ||
| } | ||
@@ -63,3 +77,3 @@ | ||
| const plugins = resolvePlugins(options.plugins); | ||
| const ctx = new SyncParserContext({ | ||
| const ctx = createSyncParserContext(SerovalMode.Vanilla, { | ||
| plugins, | ||
@@ -69,5 +83,5 @@ disabledFeatures: options.disabledFeatures, | ||
| return { | ||
| t: ctx.parseTop(source), | ||
| f: ctx.features, | ||
| m: Array.from(ctx.marked), | ||
| t: parseTop(ctx, source), | ||
| f: ctx.base.features, | ||
| m: Array.from(ctx.base.marked), | ||
| }; | ||
@@ -81,3 +95,3 @@ } | ||
| const plugins = resolvePlugins(options.plugins); | ||
| const ctx = new AsyncParserContext({ | ||
| const ctx = createAsyncParserContext(SerovalMode.Vanilla, { | ||
| plugins, | ||
@@ -87,5 +101,5 @@ disabledFeatures: options.disabledFeatures, | ||
| return { | ||
| t: await ctx.parseTop(source), | ||
| f: ctx.features, | ||
| m: Array.from(ctx.marked), | ||
| t: await parseTopAsync(ctx, source), | ||
| f: ctx.base.features, | ||
| m: Array.from(ctx.base.marked), | ||
| }; | ||
@@ -99,3 +113,3 @@ } | ||
| const plugins = resolvePlugins(options.plugins); | ||
| const ctx = new VanillaSerializerContext({ | ||
| const ctx = createVanillaSerializerContext({ | ||
| plugins, | ||
@@ -105,3 +119,3 @@ features: source.f, | ||
| }); | ||
| return ctx.serializeTop(source.t); | ||
| return serializeTopVanilla(ctx, source.t); | ||
| } | ||
@@ -114,7 +128,7 @@ | ||
| const plugins = resolvePlugins(options.plugins); | ||
| const ctx = new VanillaDeserializerContext({ | ||
| const ctx = createVanillaDeserializerContext({ | ||
| plugins, | ||
| markedRefs: source.m, | ||
| }); | ||
| return ctx.deserializeTop(source.t) as T; | ||
| return deserializeTop(ctx, source.t) as T; | ||
| } |
@@ -105,6 +105,11 @@ import type { | ||
| i: number; | ||
| // sequence in bytes | ||
| s: number[]; | ||
| // byte string | ||
| s: string; | ||
| // length | ||
| l: number; | ||
| // array buffer constructor | ||
| f: SerovalNodeWithID; | ||
| } | ||
| export interface SerovalTypedArrayNode extends SerovalBaseNode { | ||
@@ -111,0 +116,0 @@ t: SerovalNodeType.TypedArray; |
@@ -1,2 +0,3 @@ | ||
| import { NIL } from "../constants"; | ||
| import { ITERATOR_CONSTRUCTOR } from '../constructors'; | ||
| import { SYM_ITERATOR } from '../symbols'; | ||
@@ -14,3 +15,3 @@ export interface Sequence { | ||
| const iterator = source[Symbol.iterator](); | ||
| const iterator = source[SYM_ITERATOR](); | ||
@@ -38,31 +39,8 @@ while (true) { | ||
| const createIterator = ITERATOR_CONSTRUCTOR(SYM_ITERATOR); | ||
| export function sequenceToIterator<T>( | ||
| sequence: Sequence, | ||
| ): () => IterableIterator<T> { | ||
| return (): IterableIterator<T> => { | ||
| let index = 0; | ||
| return { | ||
| [Symbol.iterator](): IterableIterator<T> { | ||
| return this; | ||
| }, | ||
| next(): IteratorResult<T> { | ||
| if (index > sequence.d) { | ||
| return { | ||
| done: true, | ||
| value: NIL, | ||
| }; | ||
| } | ||
| const currentIndex = index++; | ||
| const currentItem = sequence.v[currentIndex]; | ||
| if (currentIndex === sequence.t) { | ||
| throw currentItem; | ||
| } | ||
| return { | ||
| done: currentIndex === sequence.d, | ||
| value: currentItem as T, | ||
| }; | ||
| }, | ||
| }; | ||
| }; | ||
| return createIterator(sequence) as unknown as () => IterableIterator<T>; | ||
| } |
+29
-11
| export { Feature } from './core/compat'; | ||
| export { createReference } from './core/reference'; | ||
| export type { | ||
| AsyncParsePluginContext, | ||
| AsyncParserContextOptions, | ||
| } from './core/context/async-parser'; | ||
| export type { | ||
| BaseDeserializerContextOptions, | ||
| CrossDeserializerContextOptions, | ||
| DeserializePluginContext, | ||
| VanillaDeserializerContextOptions, | ||
| } from './core/context/deserializer'; | ||
| export type { BaseParserContextOptions } from './core/context/parser'; | ||
| export type { | ||
| BaseSerializerContextOptions, | ||
| CrossContextOptions, | ||
| CrossSerializerContextOptions, | ||
| SerializePluginContext, | ||
| VanillaSerializerContextOptions, | ||
| } from './core/context/serializer'; | ||
| export type { | ||
| StreamParsePluginContext, | ||
| StreamParserContextOptions, | ||
| SyncParsePluginContext, | ||
| SyncParserContextOptions, | ||
| } from './core/context/sync-parser'; | ||
| export * from './core/cross'; | ||
| export * from './core/tree'; | ||
| export * from './core/errors'; | ||
| export { getCrossReferenceHeader } from './core/keys'; | ||
| export { OpaqueReference } from './core/opaque-reference'; | ||
| export * from './core/plugin'; | ||
| export { createReference } from './core/reference'; | ||
| export { default as Serializer } from './core/Serializer'; | ||
| export { createStream } from './core/stream'; | ||
| export type { Stream } from './core/stream'; | ||
| export * from './core/errors'; | ||
| export type { Stream, StreamListener } from './core/stream'; | ||
| export * from './core/tree'; | ||
| export type { SerovalNode } from './core/types'; | ||
| export { OpaqueReference } from './core/opaque-reference'; |
| import type { SerovalNode } from '../../types'; | ||
| import { BaseParserContext } from '../parser'; | ||
| export default abstract class BaseAsyncParserContext extends BaseParserContext { | ||
| private parseItems; | ||
| private parseArray; | ||
| private parseProperties; | ||
| private parsePlainObject; | ||
| private parseBoxed; | ||
| private parseTypedArray; | ||
| private parseBigIntTypedArray; | ||
| private parseDataView; | ||
| private parseError; | ||
| private parseAggregateError; | ||
| private parseMap; | ||
| private parseSet; | ||
| private parsePromise; | ||
| private parsePlugin; | ||
| private parseStream; | ||
| private parseObject; | ||
| protected parseFunction(current: unknown): Promise<SerovalNode>; | ||
| parse<T>(current: T): Promise<SerovalNode>; | ||
| parseTop<T>(current: T): Promise<SerovalNode>; | ||
| } | ||
| //# sourceMappingURL=async.d.ts.map |
| {"version":3,"file":"async.d.ts","sourceRoot":"","sources":["../../../../../src/core/context/parser/async.ts"],"names":[],"mappings":"AAsCA,OAAO,KAAK,EAQV,WAAW,EAUZ,MAAM,aAAa,CAAC;AAQrB,OAAO,EAAE,iBAAiB,EAAkB,MAAM,WAAW,CAAC;AAO9D,MAAM,CAAC,OAAO,CAAC,QAAQ,OAAO,sBAAuB,SAAQ,iBAAiB;YAC9D,UAAU;YAWV,UAAU;YAOV,eAAe;YAsDf,gBAAgB;YAahB,UAAU;YAOV,eAAe;YAOf,qBAAqB;YAWrB,aAAa;YAOb,UAAU;YAYV,mBAAmB;YAYnB,QAAQ;YAaR,QAAQ;YAWR,YAAY;YAsBZ,WAAW;YAsBX,WAAW;YAwDX,WAAW;cA0GT,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,WAAW,CAAC;IAY/D,KAAK,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,GAAG,OAAO,CAAC,WAAW,CAAC;IA8B1C,QAAQ,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,GAAG,OAAO,CAAC,WAAW,CAAC;CASpD"} |
| import type { Stream } from '../../stream'; | ||
| import type { SerovalNode, SerovalObjectRecordNode, SerovalPluginNode, SerovalPromiseConstructorNode } from '../../types'; | ||
| import type { BaseSyncParserContextOptions } from './sync'; | ||
| import BaseSyncParserContext from './sync'; | ||
| export interface BaseStreamParserContextOptions extends BaseSyncParserContextOptions { | ||
| onParse: (node: SerovalNode, initial: boolean) => void; | ||
| onError?: (error: unknown) => void; | ||
| onDone?: () => void; | ||
| } | ||
| export default abstract class BaseStreamParserContext extends BaseSyncParserContext { | ||
| private alive; | ||
| private pending; | ||
| private onParseCallback; | ||
| private onErrorCallback?; | ||
| private onDoneCallback?; | ||
| constructor(options: BaseStreamParserContextOptions); | ||
| private initial; | ||
| private buffer; | ||
| private onParseInternal; | ||
| private flush; | ||
| onParse(node: SerovalNode): void; | ||
| onError(error: unknown): void; | ||
| private onDone; | ||
| pushPendingState(): void; | ||
| popPendingState(): void; | ||
| protected parseProperties(properties: Record<string | symbol, unknown>): SerovalObjectRecordNode; | ||
| protected handlePromiseSuccess(id: number, data: unknown): void; | ||
| protected handlePromiseFailure(id: number, data: unknown): void; | ||
| protected parsePromise(id: number, current: Promise<unknown>): SerovalPromiseConstructorNode; | ||
| protected parsePlugin(id: number, current: unknown): SerovalPluginNode | undefined; | ||
| protected parseStream(id: number, current: Stream<unknown>): SerovalNode; | ||
| parseWithError<T>(current: T): SerovalNode | undefined; | ||
| /** | ||
| * @private | ||
| */ | ||
| start<T>(current: T): void; | ||
| /** | ||
| * @private | ||
| */ | ||
| destroy(): void; | ||
| isAlive(): boolean; | ||
| } | ||
| //# sourceMappingURL=stream.d.ts.map |
| {"version":3,"file":"stream.d.ts","sourceRoot":"","sources":["../../../../../src/core/context/parser/stream.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAG3C,OAAO,KAAK,EACV,WAAW,EAEX,uBAAuB,EACvB,iBAAiB,EACjB,6BAA6B,EAC9B,MAAM,aAAa,CAAC;AAErB,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,QAAQ,CAAC;AAC3D,OAAO,qBAAqB,MAAM,QAAQ,CAAC;AAE3C,MAAM,WAAW,8BACf,SAAQ,4BAA4B;IACpC,OAAO,EAAE,CAAC,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IACvD,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;IACnC,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;CACrB;AAED,MAAM,CAAC,OAAO,CAAC,QAAQ,OAAO,uBAAwB,SAAQ,qBAAqB;IAEjF,OAAO,CAAC,KAAK,CAAQ;IAGrB,OAAO,CAAC,OAAO,CAAK;IAEpB,OAAO,CAAC,eAAe,CAAgD;IAEvE,OAAO,CAAC,eAAe,CAAC,CAA2B;IAEnD,OAAO,CAAC,cAAc,CAAC,CAAa;gBAExB,OAAO,EAAE,8BAA8B;IAOnD,OAAO,CAAC,OAAO,CAAQ;IAEvB,OAAO,CAAC,MAAM,CAAqB;IAEnC,OAAO,CAAC,eAAe;IAQvB,OAAO,CAAC,KAAK;IAMb,OAAO,CAAC,IAAI,EAAE,WAAW,GAAG,IAAI;IAQhC,OAAO,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI;IAQ7B,OAAO,CAAC,MAAM;IAMd,gBAAgB,IAAI,IAAI;IAIxB,eAAe,IAAI,IAAI;IAMvB,SAAS,CAAC,eAAe,CACvB,UAAU,EAAE,MAAM,CAAC,MAAM,GAAG,MAAM,EAAE,OAAO,CAAC,GAC3C,uBAAuB;IAoD1B,SAAS,CAAC,oBAAoB,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,IAAI;IAuB/D,SAAS,CAAC,oBAAoB,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,IAAI;IA4B/D,SAAS,CAAC,YAAY,CACpB,EAAE,EAAE,MAAM,EACV,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,GACxB,6BAA6B;IAUhC,SAAS,CAAC,WAAW,CACnB,EAAE,EAAE,MAAM,EACV,OAAO,EAAE,OAAO,GACf,iBAAiB,GAAG,SAAS;IAmBhC,SAAS,CAAC,WAAW,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,GAAG,WAAW;IAsCxE,cAAc,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,GAAG,WAAW,GAAG,SAAS;IAStD;;OAEG;IACH,KAAK,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,GAAG,IAAI;IAc1B;;OAEG;IACH,OAAO,IAAI,IAAI;IAOf,OAAO,IAAI,OAAO;CAGnB"} |
| import type { Stream } from '../../stream'; | ||
| import type { SerovalAggregateErrorNode, SerovalArrayNode, SerovalBigIntTypedArrayNode, SerovalBoxedNode, SerovalDataViewNode, SerovalErrorNode, SerovalMapNode, SerovalNode, SerovalNullConstructorNode, SerovalObjectNode, SerovalObjectRecordNode, SerovalPluginNode, SerovalPromiseConstructorNode, SerovalSetNode, SerovalTypedArrayNode } from '../../types'; | ||
| import type { BigIntTypedArrayValue, TypedArrayValue } from '../../utils/typed-array'; | ||
| import type { BaseParserContextOptions } from '../parser'; | ||
| import { BaseParserContext } from '../parser'; | ||
| type ObjectLikeNode = SerovalObjectNode | SerovalNullConstructorNode; | ||
| export type BaseSyncParserContextOptions = BaseParserContextOptions; | ||
| export default abstract class BaseSyncParserContext extends BaseParserContext { | ||
| protected parseItems(current: unknown[]): SerovalNode[]; | ||
| protected parseArray(id: number, current: unknown[]): SerovalArrayNode; | ||
| protected parseProperties(properties: Record<string | symbol, unknown>): SerovalObjectRecordNode; | ||
| protected parsePlainObject(id: number, current: Record<string, unknown>, empty: boolean): ObjectLikeNode; | ||
| protected parseBoxed(id: number, current: object): SerovalBoxedNode; | ||
| protected parseTypedArray(id: number, current: TypedArrayValue): SerovalTypedArrayNode; | ||
| protected parseBigIntTypedArray(id: number, current: BigIntTypedArrayValue): SerovalBigIntTypedArrayNode; | ||
| protected parseDataView(id: number, current: DataView): SerovalDataViewNode; | ||
| protected parseError(id: number, current: Error): SerovalErrorNode; | ||
| protected parseAggregateError(id: number, current: AggregateError): SerovalAggregateErrorNode; | ||
| protected parseMap(id: number, current: Map<unknown, unknown>): SerovalMapNode; | ||
| protected parseSet(id: number, current: Set<unknown>): SerovalSetNode; | ||
| protected parsePlugin(id: number, current: unknown): SerovalPluginNode | undefined; | ||
| protected parseStream(id: number, _current: Stream<unknown>): SerovalNode; | ||
| protected parsePromise(id: number, _current: Promise<unknown>): SerovalPromiseConstructorNode; | ||
| protected parseObject(id: number, current: object): SerovalNode; | ||
| protected parseFunction(current: unknown): SerovalNode; | ||
| parse<T>(current: T): SerovalNode; | ||
| parseTop<T>(current: T): SerovalNode; | ||
| } | ||
| export {}; | ||
| //# sourceMappingURL=sync.d.ts.map |
| {"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../../../../../src/core/context/parser/sync.ts"],"names":[],"mappings":"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"} |
| import BaseAsyncParserContext from '../context/parser/async'; | ||
| import type { SerovalMode } from '../plugin'; | ||
| import type { CrossParserContextOptions } from './parser'; | ||
| export type CrossAsyncParserContextOptions = CrossParserContextOptions; | ||
| export default class CrossAsyncParserContext extends BaseAsyncParserContext { | ||
| readonly mode: SerovalMode; | ||
| } | ||
| //# sourceMappingURL=async.d.ts.map |
| {"version":3,"file":"async.d.ts","sourceRoot":"","sources":["../../../../src/core/cross/async.ts"],"names":[],"mappings":"AAAA,OAAO,sBAAsB,MAAM,yBAAyB,CAAC;AAC7D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,UAAU,CAAC;AAE1D,MAAM,MAAM,8BAA8B,GAAG,yBAAyB,CAAC;AAEvE,MAAM,CAAC,OAAO,OAAO,uBAAwB,SAAQ,sBAAsB;IACzE,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAW;CACtC"} |
| import type { BaseDeserializerOptions } from '../context/deserializer'; | ||
| import BaseDeserializerContext from '../context/deserializer'; | ||
| import type { SerovalMode } from '../plugin'; | ||
| export type CrossDeserializerContextOptions = BaseDeserializerOptions; | ||
| export default class CrossDeserializerContext extends BaseDeserializerContext { | ||
| readonly mode: SerovalMode; | ||
| assignIndexedValue<T>(index: number, value: T): T; | ||
| } | ||
| //# sourceMappingURL=deserializer.d.ts.map |
| {"version":3,"file":"deserializer.d.ts","sourceRoot":"","sources":["../../../../src/core/cross/deserializer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AACvE,OAAO,uBAAuB,MAAM,yBAAyB,CAAC;AAC9D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAE7C,MAAM,MAAM,+BAA+B,GAAG,uBAAuB,CAAC;AAEtE,MAAM,CAAC,OAAO,OAAO,wBAAyB,SAAQ,uBAAuB;IAC3E,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAW;IAErC,kBAAkB,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC;CAMlD"} |
| import type { BaseParserContextOptions } from '../context/parser'; | ||
| export type CrossParserContextOptions = BaseParserContextOptions; | ||
| export interface CrossContextOptions { | ||
| scopeId?: string; | ||
| } | ||
| //# sourceMappingURL=parser.d.ts.map |
| {"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../../../../src/core/cross/parser.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,mBAAmB,CAAC;AAElE,MAAM,MAAM,yBAAyB,GAAG,wBAAwB,CAAC;AAEjE,MAAM,WAAW,mBAAmB;IAClC,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB"} |
| import type { BaseSerializerContextOptions } from '../context/serializer'; | ||
| import BaseSerializerContext from '../context/serializer'; | ||
| import type { SerovalMode } from '../plugin'; | ||
| import type { SerovalNode } from '../types'; | ||
| import type { CrossContextOptions } from './parser'; | ||
| export interface CrossSerializerContextOptions extends BaseSerializerContextOptions, CrossContextOptions { | ||
| } | ||
| export default class CrossSerializerContext extends BaseSerializerContext { | ||
| readonly mode: SerovalMode; | ||
| scopeId?: string; | ||
| constructor(options: CrossSerializerContextOptions); | ||
| getRefParam(id: number): string; | ||
| protected assignIndexedValue(index: number, value: string): string; | ||
| serializeTop(tree: SerovalNode): string; | ||
| } | ||
| //# sourceMappingURL=serializer.d.ts.map |
| {"version":3,"file":"serializer.d.ts","sourceRoot":"","sources":["../../../../src/core/cross/serializer.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,uBAAuB,CAAC;AAC1E,OAAO,qBAAqB,MAAM,uBAAuB,CAAC;AAE1D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAE7C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAC5C,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAEpD,MAAM,WAAW,6BACf,SAAQ,4BAA4B,EAClC,mBAAmB;CAAG;AAE1B,MAAM,CAAC,OAAO,OAAO,sBAAuB,SAAQ,qBAAqB;IACvE,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAW;IAErC,OAAO,CAAC,EAAE,MAAM,CAAC;gBAEL,OAAO,EAAE,6BAA6B;IAKlD,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM;IAI/B,SAAS,CAAC,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM;IAQlE,YAAY,CAAC,IAAI,EAAE,WAAW,GAAG,MAAM;CAoCxC"} |
| import type { BaseStreamParserContextOptions } from '../context/parser/stream'; | ||
| import BaseStreamParserContext from '../context/parser/stream'; | ||
| import type { SerovalMode } from '../plugin'; | ||
| export type CrossStreamParserContextOptions = BaseStreamParserContextOptions; | ||
| export default class CrossStreamParserContext extends BaseStreamParserContext { | ||
| readonly mode: SerovalMode; | ||
| } | ||
| //# sourceMappingURL=stream.d.ts.map |
| {"version":3,"file":"stream.d.ts","sourceRoot":"","sources":["../../../../src/core/cross/stream.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,8BAA8B,EAAE,MAAM,0BAA0B,CAAC;AAC/E,OAAO,uBAAuB,MAAM,0BAA0B,CAAC;AAC/D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAE7C,MAAM,MAAM,+BAA+B,GAAG,8BAA8B,CAAC;AAE7E,MAAM,CAAC,OAAO,OAAO,wBAAyB,SAAQ,uBAAuB;IAC3E,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAW;CACtC"} |
| import BaseSyncParserContext from '../context/parser/sync'; | ||
| import type { SerovalMode } from '../plugin'; | ||
| import type { CrossParserContextOptions } from './parser'; | ||
| export type CrossSyncParserContextOptions = CrossParserContextOptions; | ||
| export default class CrossSyncParserContext extends BaseSyncParserContext { | ||
| readonly mode: SerovalMode; | ||
| } | ||
| //# sourceMappingURL=sync.d.ts.map |
| {"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../../../../src/core/cross/sync.ts"],"names":[],"mappings":"AAAA,OAAO,qBAAqB,MAAM,wBAAwB,CAAC;AAC3D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,UAAU,CAAC;AAE1D,MAAM,MAAM,6BAA6B,GAAG,yBAAyB,CAAC;AAEtE,MAAM,CAAC,OAAO,OAAO,sBAAuB,SAAQ,qBAAqB;IACvE,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAW;CACtC"} |
| import type { BaseParserContextOptions } from '../context/parser'; | ||
| import BaseAsyncParserContext from '../context/parser/async'; | ||
| import type { SerovalMode } from '../plugin'; | ||
| export type AsyncParserContextOptions = Omit<BaseParserContextOptions, 'refs'>; | ||
| export default class AsyncParserContext extends BaseAsyncParserContext { | ||
| readonly mode: SerovalMode; | ||
| } | ||
| //# sourceMappingURL=async.d.ts.map |
| {"version":3,"file":"async.d.ts","sourceRoot":"","sources":["../../../../src/core/tree/async.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,mBAAmB,CAAC;AAClE,OAAO,sBAAsB,MAAM,yBAAyB,CAAC;AAC7D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAE7C,MAAM,MAAM,yBAAyB,GAAG,IAAI,CAAC,wBAAwB,EAAE,MAAM,CAAC,CAAC;AAE/E,MAAM,CAAC,OAAO,OAAO,kBAAmB,SAAQ,sBAAsB;IACpE,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAa;CACxC"} |
| import type { BaseDeserializerOptions } from '../context/deserializer'; | ||
| import BaseDeserializerContext from '../context/deserializer'; | ||
| import type { SerovalMode } from '../plugin'; | ||
| export interface VanillaDeserializerContextOptions extends Omit<BaseDeserializerOptions, 'refs'> { | ||
| markedRefs: number[] | Set<number>; | ||
| } | ||
| export default class VanillaDeserializerContext extends BaseDeserializerContext { | ||
| readonly mode: SerovalMode; | ||
| marked: Set<number>; | ||
| constructor(options: VanillaDeserializerContextOptions); | ||
| assignIndexedValue<T>(index: number, value: T): T; | ||
| } | ||
| //# sourceMappingURL=deserializer.d.ts.map |
| {"version":3,"file":"deserializer.d.ts","sourceRoot":"","sources":["../../../../src/core/tree/deserializer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AACvE,OAAO,uBAAuB,MAAM,yBAAyB,CAAC;AAC9D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAE7C,MAAM,WAAW,iCACf,SAAQ,IAAI,CAAC,uBAAuB,EAAE,MAAM,CAAC;IAC7C,UAAU,EAAE,MAAM,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC;CACpC;AAED,MAAM,CAAC,OAAO,OAAO,0BAA2B,SAAQ,uBAAuB;IAC7E,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAa;IAEvC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;gBAER,OAAO,EAAE,iCAAiC;IAKtD,kBAAkB,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC;CAMlD"} |
| import type { BaseSerializerContextOptions } from '../context/serializer'; | ||
| import BaseSerializerContext from '../context/serializer'; | ||
| import type { SerovalMode } from '../plugin'; | ||
| import type { SerovalNode, SerovalPromiseConstructorNode, SerovalPromiseRejectNode, SerovalPromiseResolveNode } from '../types'; | ||
| export type VanillaSerializerContextOptions = BaseSerializerContextOptions; | ||
| export default class VanillaSerializerContext extends BaseSerializerContext { | ||
| readonly mode: SerovalMode; | ||
| /** | ||
| * Map tree refs to actual refs | ||
| * @private | ||
| */ | ||
| valid: Map<number, number>; | ||
| /** | ||
| * Variables | ||
| * @private | ||
| */ | ||
| vars: string[]; | ||
| /** | ||
| * Creates the reference param (identifier) from the given reference ID | ||
| * Calling this function means the value has been referenced somewhere | ||
| */ | ||
| getRefParam(index: number): string; | ||
| protected assignIndexedValue(index: number, value: string): string; | ||
| protected serializePromiseConstructor(node: SerovalPromiseConstructorNode): string; | ||
| protected serializePromiseResolve(node: SerovalPromiseResolveNode): string; | ||
| protected serializePromiseReject(node: SerovalPromiseRejectNode): string; | ||
| serializeTop(tree: SerovalNode): string; | ||
| } | ||
| //# sourceMappingURL=serializer.d.ts.map |
| {"version":3,"file":"serializer.d.ts","sourceRoot":"","sources":["../../../../src/core/tree/serializer.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,uBAAuB,CAAC;AAC1E,OAAO,qBAAqB,MAAM,uBAAuB,CAAC;AAE1D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,KAAK,EACV,WAAW,EACX,6BAA6B,EAC7B,wBAAwB,EACxB,yBAAyB,EAC1B,MAAM,UAAU,CAAC;AAGlB,MAAM,MAAM,+BAA+B,GAAG,4BAA4B,CAAC;AAE3E,MAAM,CAAC,OAAO,OAAO,wBAAyB,SAAQ,qBAAqB;IACzE,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAa;IAEvC;;;OAGG;IACH,KAAK,sBAA6B;IAElC;;;OAGG;IACH,IAAI,EAAE,MAAM,EAAE,CAAM;IAEpB;;;OAGG;IACH,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAoBlC,SAAS,CAAC,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM;IAOlE,SAAS,CAAC,2BAA2B,CACnC,IAAI,EAAE,6BAA6B,GAClC,MAAM;IAIT,SAAS,CAAC,uBAAuB,CAAC,IAAI,EAAE,yBAAyB,GAAG,MAAM;IAI1E,SAAS,CAAC,sBAAsB,CAAC,IAAI,EAAE,wBAAwB,GAAG,MAAM;IAIxE,YAAY,CAAC,IAAI,EAAE,WAAW,GAAG,MAAM;CAsBxC"} |
| import BaseSyncParserContext from '../context/parser/sync'; | ||
| import type { BaseParserContextOptions } from '../context/parser'; | ||
| import type { SerovalMode } from '../plugin'; | ||
| export type SyncParserContextOptions = Omit<BaseParserContextOptions, 'refs'>; | ||
| export default class SyncParserContext extends BaseSyncParserContext { | ||
| readonly mode: SerovalMode; | ||
| } | ||
| //# sourceMappingURL=sync.d.ts.map |
| {"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../../../../src/core/tree/sync.ts"],"names":[],"mappings":"AAAA,OAAO,qBAAqB,MAAM,wBAAwB,CAAC;AAC3D,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,mBAAmB,CAAC;AAClE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAE7C,MAAM,MAAM,wBAAwB,GAAG,IAAI,CAAC,wBAAwB,EAAE,MAAM,CAAC,CAAC;AAE9E,MAAM,CAAC,OAAO,OAAO,iBAAkB,SAAQ,qBAAqB;IAClE,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAa;CACxC"} |
| export default function assert(cond: unknown, error: Error): asserts cond; | ||
| //# sourceMappingURL=assert.d.ts.map |
| {"version":3,"file":"assert.d.ts","sourceRoot":"","sources":["../../../../src/core/utils/assert.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,OAAO,UAAU,MAAM,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,IAAI,CAIxE"} |
| export interface Deferred { | ||
| promise: Promise<unknown>; | ||
| resolve(value: unknown): void; | ||
| reject(value: unknown): void; | ||
| } | ||
| export declare function createDeferred(): Deferred; | ||
| //# sourceMappingURL=deferred.d.ts.map |
| {"version":3,"file":"deferred.d.ts","sourceRoot":"","sources":["../../../../src/core/utils/deferred.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,QAAQ;IACvB,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;IAC1B,OAAO,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,CAAC;IAC9B,MAAM,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,CAAC;CAC9B;AAED,wBAAgB,cAAc,IAAI,QAAQ,CAezC"} |
| import { | ||
| createAggregateErrorNode, | ||
| createArrayBufferNode, | ||
| createArrayNode, | ||
| createAsyncIteratorFactoryInstanceNode, | ||
| createBigIntNode, | ||
| createBigIntTypedArrayNode, | ||
| createBoxedNode, | ||
| createDataViewNode, | ||
| createDateNode, | ||
| createErrorNode, | ||
| createIteratorFactoryInstanceNode, | ||
| createNumberNode, | ||
| createPluginNode, | ||
| createRegExpNode, | ||
| createSetNode, | ||
| createStreamConstructorNode, | ||
| createStreamNextNode, | ||
| createStreamReturnNode, | ||
| createStreamThrowNode, | ||
| createStringNode, | ||
| createTypedArrayNode, | ||
| } from '../../base-primitives'; | ||
| import { Feature } from '../../compat'; | ||
| import { NIL, SerovalNodeType } from '../../constants'; | ||
| import { SerovalParserError, SerovalUnsupportedTypeError } from '../../errors'; | ||
| import { | ||
| FALSE_NODE, | ||
| NULL_NODE, | ||
| TRUE_NODE, | ||
| UNDEFINED_NODE, | ||
| } from '../../literals'; | ||
| import { createSerovalNode } from '../../node'; | ||
| import { OpaqueReference } from '../../opaque-reference'; | ||
| import { SpecialReference } from '../../special-reference'; | ||
| import type { Stream } from '../../stream'; | ||
| import { createStreamFromAsyncIterable, isStream } from '../../stream'; | ||
| import { serializeString } from '../../string'; | ||
| import type { | ||
| SerovalAggregateErrorNode, | ||
| SerovalArrayNode, | ||
| SerovalBigIntTypedArrayNode, | ||
| SerovalBoxedNode, | ||
| SerovalDataViewNode, | ||
| SerovalErrorNode, | ||
| SerovalMapNode, | ||
| SerovalNode, | ||
| SerovalNullConstructorNode, | ||
| SerovalObjectNode, | ||
| SerovalObjectRecordKey, | ||
| SerovalObjectRecordNode, | ||
| SerovalPluginNode, | ||
| SerovalPromiseNode, | ||
| SerovalSetNode, | ||
| SerovalStreamConstructorNode, | ||
| SerovalTypedArrayNode, | ||
| } from '../../types'; | ||
| import { getErrorOptions } from '../../utils/error'; | ||
| import { iteratorToSequence } from '../../utils/iterator-to-sequence'; | ||
| import promiseToResult from '../../utils/promise-to-result'; | ||
| import type { | ||
| BigIntTypedArrayValue, | ||
| TypedArrayValue, | ||
| } from '../../utils/typed-array'; | ||
| import { BaseParserContext, ParserNodeType } from '../parser'; | ||
| type ObjectLikeNode = | ||
| | SerovalObjectNode | ||
| | SerovalNullConstructorNode | ||
| | SerovalPromiseNode; | ||
| export default abstract class BaseAsyncParserContext extends BaseParserContext { | ||
| private async parseItems(current: unknown[]): Promise<SerovalNode[]> { | ||
| const nodes = []; | ||
| for (let i = 0, len = current.length; i < len; i++) { | ||
| // For consistency in holes | ||
| if (i in current) { | ||
| nodes[i] = await this.parse(current[i]); | ||
| } | ||
| } | ||
| return nodes; | ||
| } | ||
| private async parseArray( | ||
| id: number, | ||
| current: unknown[], | ||
| ): Promise<SerovalArrayNode> { | ||
| return createArrayNode(id, current, await this.parseItems(current)); | ||
| } | ||
| private async parseProperties( | ||
| properties: Record<string | symbol, unknown>, | ||
| ): Promise<SerovalObjectRecordNode> { | ||
| const entries = Object.entries(properties); | ||
| const keyNodes: SerovalObjectRecordKey[] = []; | ||
| const valueNodes: SerovalNode[] = []; | ||
| for (let i = 0, len = entries.length; i < len; i++) { | ||
| keyNodes.push(serializeString(entries[i][0])); | ||
| valueNodes.push(await this.parse(entries[i][1])); | ||
| } | ||
| // Check special properties | ||
| let symbol = Symbol.iterator; | ||
| if (symbol in properties) { | ||
| keyNodes.push(this.parseWellKnownSymbol(symbol)); | ||
| valueNodes.push( | ||
| createIteratorFactoryInstanceNode( | ||
| this.parseIteratorFactory(), | ||
| await this.parse( | ||
| iteratorToSequence(properties as unknown as Iterable<unknown>), | ||
| ), | ||
| ), | ||
| ); | ||
| } | ||
| symbol = Symbol.asyncIterator; | ||
| if (symbol in properties) { | ||
| keyNodes.push(this.parseWellKnownSymbol(symbol)); | ||
| valueNodes.push( | ||
| createAsyncIteratorFactoryInstanceNode( | ||
| this.parseAsyncIteratorFactory(), | ||
| await this.parse( | ||
| createStreamFromAsyncIterable( | ||
| properties as unknown as AsyncIterable<unknown>, | ||
| ), | ||
| ), | ||
| ), | ||
| ); | ||
| } | ||
| symbol = Symbol.toStringTag; | ||
| if (symbol in properties) { | ||
| keyNodes.push(this.parseWellKnownSymbol(symbol)); | ||
| valueNodes.push(createStringNode(properties[symbol] as string)); | ||
| } | ||
| symbol = Symbol.isConcatSpreadable; | ||
| if (symbol in properties) { | ||
| keyNodes.push(this.parseWellKnownSymbol(symbol)); | ||
| valueNodes.push(properties[symbol] ? TRUE_NODE : FALSE_NODE); | ||
| } | ||
| return { | ||
| k: keyNodes, | ||
| v: valueNodes, | ||
| s: keyNodes.length, | ||
| }; | ||
| } | ||
| private async parsePlainObject( | ||
| id: number, | ||
| current: Record<string, unknown>, | ||
| empty: boolean, | ||
| ): Promise<ObjectLikeNode> { | ||
| return this.createObjectNode( | ||
| id, | ||
| current, | ||
| empty, | ||
| await this.parseProperties(current), | ||
| ); | ||
| } | ||
| private async parseBoxed( | ||
| id: number, | ||
| current: object, | ||
| ): Promise<SerovalBoxedNode> { | ||
| return createBoxedNode(id, await this.parse(current.valueOf())); | ||
| } | ||
| private async parseTypedArray( | ||
| id: number, | ||
| current: TypedArrayValue, | ||
| ): Promise<SerovalTypedArrayNode> { | ||
| return createTypedArrayNode(id, current, await this.parse(current.buffer)); | ||
| } | ||
| private async parseBigIntTypedArray( | ||
| id: number, | ||
| current: BigIntTypedArrayValue, | ||
| ): Promise<SerovalBigIntTypedArrayNode> { | ||
| return createBigIntTypedArrayNode( | ||
| id, | ||
| current, | ||
| await this.parse(current.buffer), | ||
| ); | ||
| } | ||
| private async parseDataView( | ||
| id: number, | ||
| current: DataView, | ||
| ): Promise<SerovalDataViewNode> { | ||
| return createDataViewNode(id, current, await this.parse(current.buffer)); | ||
| } | ||
| private async parseError( | ||
| id: number, | ||
| current: Error, | ||
| ): Promise<SerovalErrorNode> { | ||
| const options = getErrorOptions(current, this.features); | ||
| return createErrorNode( | ||
| id, | ||
| current, | ||
| options ? await this.parseProperties(options) : NIL, | ||
| ); | ||
| } | ||
| private async parseAggregateError( | ||
| id: number, | ||
| current: AggregateError, | ||
| ): Promise<SerovalAggregateErrorNode> { | ||
| const options = getErrorOptions(current, this.features); | ||
| return createAggregateErrorNode( | ||
| id, | ||
| current, | ||
| options ? await this.parseProperties(options) : NIL, | ||
| ); | ||
| } | ||
| private async parseMap( | ||
| id: number, | ||
| current: Map<unknown, unknown>, | ||
| ): Promise<SerovalMapNode> { | ||
| const keyNodes: SerovalNode[] = []; | ||
| const valueNodes: SerovalNode[] = []; | ||
| for (const [key, value] of current.entries()) { | ||
| keyNodes.push(await this.parse(key)); | ||
| valueNodes.push(await this.parse(value)); | ||
| } | ||
| return this.createMapNode(id, keyNodes, valueNodes, current.size); | ||
| } | ||
| private async parseSet( | ||
| id: number, | ||
| current: Set<unknown>, | ||
| ): Promise<SerovalSetNode> { | ||
| const items: SerovalNode[] = []; | ||
| for (const item of current.keys()) { | ||
| items.push(await this.parse(item)); | ||
| } | ||
| return createSetNode(id, current.size, items); | ||
| } | ||
| private async parsePromise( | ||
| id: number, | ||
| current: Promise<unknown>, | ||
| ): Promise<SerovalPromiseNode> { | ||
| const [status, result] = await promiseToResult(current); | ||
| return createSerovalNode( | ||
| SerovalNodeType.Promise, | ||
| id, | ||
| status, | ||
| NIL, | ||
| NIL, | ||
| NIL, | ||
| NIL, | ||
| NIL, | ||
| NIL, | ||
| await this.parse(result), | ||
| NIL, | ||
| NIL, | ||
| ); | ||
| } | ||
| private async parsePlugin( | ||
| id: number, | ||
| current: unknown, | ||
| ): Promise<SerovalPluginNode | undefined> { | ||
| const currentPlugins = this.plugins; | ||
| if (currentPlugins) { | ||
| for (let i = 0, len = currentPlugins.length; i < len; i++) { | ||
| const plugin = currentPlugins[i]; | ||
| if (plugin.parse.async && plugin.test(current)) { | ||
| return createPluginNode( | ||
| id, | ||
| plugin.tag, | ||
| await plugin.parse.async(current, this, { | ||
| id, | ||
| }), | ||
| ); | ||
| } | ||
| } | ||
| } | ||
| return NIL; | ||
| } | ||
| private async parseStream( | ||
| id: number, | ||
| current: Stream<unknown>, | ||
| ): Promise<SerovalStreamConstructorNode> { | ||
| return createStreamConstructorNode( | ||
| id, | ||
| this.parseSpecialReference(SpecialReference.StreamConstructor), | ||
| await new Promise<SerovalNode[]>((resolve, reject) => { | ||
| const sequence: SerovalNode[] = []; | ||
| const cleanup = current.on({ | ||
| next: value => { | ||
| this.markRef(id); | ||
| this.parse(value).then( | ||
| data => { | ||
| sequence.push(createStreamNextNode(id, data)); | ||
| }, | ||
| data => { | ||
| reject(data); | ||
| cleanup(); | ||
| }, | ||
| ); | ||
| }, | ||
| throw: value => { | ||
| this.markRef(id); | ||
| this.parse(value).then( | ||
| data => { | ||
| sequence.push(createStreamThrowNode(id, data)); | ||
| resolve(sequence); | ||
| cleanup(); | ||
| }, | ||
| data => { | ||
| reject(data); | ||
| cleanup(); | ||
| }, | ||
| ); | ||
| }, | ||
| return: value => { | ||
| this.markRef(id); | ||
| this.parse(value).then( | ||
| data => { | ||
| sequence.push(createStreamReturnNode(id, data)); | ||
| resolve(sequence); | ||
| cleanup(); | ||
| }, | ||
| data => { | ||
| reject(data); | ||
| cleanup(); | ||
| }, | ||
| ); | ||
| }, | ||
| }); | ||
| }), | ||
| ); | ||
| } | ||
| // biome-ignore lint/complexity/noExcessiveCognitiveComplexity: ehh | ||
| private async parseObject(id: number, current: object): Promise<SerovalNode> { | ||
| if (Array.isArray(current)) { | ||
| return this.parseArray(id, current); | ||
| } | ||
| if (isStream(current)) { | ||
| return this.parseStream(id, current); | ||
| } | ||
| const currentClass = current.constructor; | ||
| if (currentClass === OpaqueReference) { | ||
| return this.parse( | ||
| (current as OpaqueReference<unknown, unknown>).replacement, | ||
| ); | ||
| } | ||
| const parsed = await this.parsePlugin(id, current); | ||
| if (parsed) { | ||
| return parsed; | ||
| } | ||
| switch (currentClass) { | ||
| case Object: | ||
| return this.parsePlainObject( | ||
| id, | ||
| current as Record<string, unknown>, | ||
| false, | ||
| ); | ||
| case NIL: | ||
| return this.parsePlainObject( | ||
| id, | ||
| current as Record<string, unknown>, | ||
| true, | ||
| ); | ||
| case Date: | ||
| return createDateNode(id, current as unknown as Date); | ||
| case RegExp: | ||
| return createRegExpNode(id, current as unknown as RegExp); | ||
| case Error: | ||
| case EvalError: | ||
| case RangeError: | ||
| case ReferenceError: | ||
| case SyntaxError: | ||
| case TypeError: | ||
| case URIError: | ||
| return this.parseError(id, current as unknown as Error); | ||
| case Number: | ||
| case Boolean: | ||
| case String: | ||
| case BigInt: | ||
| return this.parseBoxed(id, current); | ||
| case ArrayBuffer: | ||
| return createArrayBufferNode(id, current as unknown as ArrayBuffer); | ||
| case Int8Array: | ||
| case Int16Array: | ||
| case Int32Array: | ||
| case Uint8Array: | ||
| case Uint16Array: | ||
| case Uint32Array: | ||
| case Uint8ClampedArray: | ||
| case Float32Array: | ||
| case Float64Array: | ||
| return this.parseTypedArray(id, current as unknown as TypedArrayValue); | ||
| case DataView: | ||
| return this.parseDataView(id, current as unknown as DataView); | ||
| case Map: | ||
| return this.parseMap(id, current as unknown as Map<unknown, unknown>); | ||
| case Set: | ||
| return this.parseSet(id, current as unknown as Set<unknown>); | ||
| default: | ||
| break; | ||
| } | ||
| // Promises | ||
| if (currentClass === Promise || current instanceof Promise) { | ||
| return this.parsePromise(id, current as unknown as Promise<unknown>); | ||
| } | ||
| const currentFeatures = this.features; | ||
| // BigInt Typed Arrays | ||
| if (currentFeatures & Feature.BigIntTypedArray) { | ||
| switch (currentClass) { | ||
| case BigInt64Array: | ||
| case BigUint64Array: | ||
| return this.parseBigIntTypedArray( | ||
| id, | ||
| current as unknown as BigIntTypedArrayValue, | ||
| ); | ||
| default: | ||
| break; | ||
| } | ||
| } | ||
| if ( | ||
| currentFeatures & Feature.AggregateError && | ||
| typeof AggregateError !== 'undefined' && | ||
| (currentClass === AggregateError || current instanceof AggregateError) | ||
| ) { | ||
| return this.parseAggregateError(id, current as unknown as AggregateError); | ||
| } | ||
| // Slow path. We only need to handle Errors and Iterators | ||
| // since they have very broad implementations. | ||
| if (current instanceof Error) { | ||
| return this.parseError(id, current); | ||
| } | ||
| // Generator functions don't have a global constructor | ||
| // despite existing | ||
| if (Symbol.iterator in current || Symbol.asyncIterator in current) { | ||
| return this.parsePlainObject(id, current, !!currentClass); | ||
| } | ||
| throw new SerovalUnsupportedTypeError(current); | ||
| } | ||
| protected async parseFunction(current: unknown): Promise<SerovalNode> { | ||
| const ref = this.getReference(current); | ||
| if (ref.type !== ParserNodeType.Fresh) { | ||
| return ref.value; | ||
| } | ||
| const plugin = await this.parsePlugin(ref.value, current); | ||
| if (plugin) { | ||
| return plugin; | ||
| } | ||
| throw new SerovalUnsupportedTypeError(current); | ||
| } | ||
| async parse<T>(current: T): Promise<SerovalNode> { | ||
| switch (typeof current) { | ||
| case 'boolean': | ||
| return current ? TRUE_NODE : FALSE_NODE; | ||
| case 'undefined': | ||
| return UNDEFINED_NODE; | ||
| case 'string': | ||
| return createStringNode(current as string); | ||
| case 'number': | ||
| return createNumberNode(current as number); | ||
| case 'bigint': | ||
| return createBigIntNode(current as bigint); | ||
| case 'object': { | ||
| if (current) { | ||
| const ref = this.getReference(current); | ||
| return ref.type === 0 | ||
| ? await this.parseObject(ref.value, current as object) | ||
| : ref.value; | ||
| } | ||
| return NULL_NODE; | ||
| } | ||
| case 'symbol': | ||
| return this.parseWellKnownSymbol(current); | ||
| case 'function': | ||
| return this.parseFunction(current); | ||
| default: | ||
| throw new SerovalUnsupportedTypeError(current); | ||
| } | ||
| } | ||
| async parseTop<T>(current: T): Promise<SerovalNode> { | ||
| try { | ||
| return await this.parse(current); | ||
| } catch (error) { | ||
| throw error instanceof SerovalParserError | ||
| ? error | ||
| : new SerovalParserError(error); | ||
| } | ||
| } | ||
| } |
| import { | ||
| createAsyncIteratorFactoryInstanceNode, | ||
| createIteratorFactoryInstanceNode, | ||
| createPluginNode, | ||
| createStreamConstructorNode, | ||
| createStreamNextNode, | ||
| createStreamReturnNode, | ||
| createStreamThrowNode, | ||
| createStringNode, | ||
| } from '../../base-primitives'; | ||
| import { NIL, SerovalNodeType } from '../../constants'; | ||
| import { FALSE_NODE, TRUE_NODE } from '../../literals'; | ||
| import { createSerovalNode } from '../../node'; | ||
| import { SpecialReference } from '../../special-reference'; | ||
| import type { Stream } from '../../stream'; | ||
| import { createStreamFromAsyncIterable } from '../../stream'; | ||
| import { serializeString } from '../../string'; | ||
| import type { | ||
| SerovalNode, | ||
| SerovalObjectRecordKey, | ||
| SerovalObjectRecordNode, | ||
| SerovalPluginNode, | ||
| SerovalPromiseConstructorNode, | ||
| } from '../../types'; | ||
| import { iteratorToSequence } from '../../utils/iterator-to-sequence'; | ||
| import type { BaseSyncParserContextOptions } from './sync'; | ||
| import BaseSyncParserContext from './sync'; | ||
| export interface BaseStreamParserContextOptions | ||
| extends BaseSyncParserContextOptions { | ||
| onParse: (node: SerovalNode, initial: boolean) => void; | ||
| onError?: (error: unknown) => void; | ||
| onDone?: () => void; | ||
| } | ||
| export default abstract class BaseStreamParserContext extends BaseSyncParserContext { | ||
| // Life | ||
| private alive = true; | ||
| // Amount of pending promises/streams | ||
| private pending = 0; | ||
| private onParseCallback: (node: SerovalNode, initial: boolean) => void; | ||
| private onErrorCallback?: (error: unknown) => void; | ||
| private onDoneCallback?: () => void; | ||
| constructor(options: BaseStreamParserContextOptions) { | ||
| super(options); | ||
| this.onParseCallback = options.onParse; | ||
| this.onErrorCallback = options.onError; | ||
| this.onDoneCallback = options.onDone; | ||
| } | ||
| private initial = true; | ||
| private buffer: SerovalNode[] = []; | ||
| private onParseInternal(node: SerovalNode, initial: boolean): void { | ||
| try { | ||
| this.onParseCallback(node, initial); | ||
| } catch (error) { | ||
| this.onError(error); | ||
| } | ||
| } | ||
| private flush(): void { | ||
| for (let i = 0, len = this.buffer.length; i < len; i++) { | ||
| this.onParseInternal(this.buffer[i], false); | ||
| } | ||
| } | ||
| onParse(node: SerovalNode): void { | ||
| if (this.initial) { | ||
| this.buffer.push(node); | ||
| } else { | ||
| this.onParseInternal(node, false); | ||
| } | ||
| } | ||
| onError(error: unknown): void { | ||
| if (this.onErrorCallback) { | ||
| this.onErrorCallback(error); | ||
| } else { | ||
| throw error; | ||
| } | ||
| } | ||
| private onDone(): void { | ||
| if (this.onDoneCallback) { | ||
| this.onDoneCallback(); | ||
| } | ||
| } | ||
| pushPendingState(): void { | ||
| this.pending++; | ||
| } | ||
| popPendingState(): void { | ||
| if (--this.pending <= 0) { | ||
| this.onDone(); | ||
| } | ||
| } | ||
| protected parseProperties( | ||
| properties: Record<string | symbol, unknown>, | ||
| ): SerovalObjectRecordNode { | ||
| const entries = Object.entries(properties); | ||
| const keyNodes: SerovalObjectRecordKey[] = []; | ||
| const valueNodes: SerovalNode[] = []; | ||
| for (let i = 0, len = entries.length; i < len; i++) { | ||
| keyNodes.push(serializeString(entries[i][0])); | ||
| valueNodes.push(this.parse(entries[i][1])); | ||
| } | ||
| // Check special properties, symbols in this case | ||
| let symbol = Symbol.iterator; | ||
| if (symbol in properties) { | ||
| keyNodes.push(this.parseWellKnownSymbol(symbol)); | ||
| valueNodes.push( | ||
| createIteratorFactoryInstanceNode( | ||
| this.parseIteratorFactory(), | ||
| this.parse( | ||
| iteratorToSequence(properties as unknown as Iterable<unknown>), | ||
| ), | ||
| ), | ||
| ); | ||
| } | ||
| symbol = Symbol.asyncIterator; | ||
| if (symbol in properties) { | ||
| keyNodes.push(this.parseWellKnownSymbol(symbol)); | ||
| valueNodes.push( | ||
| createAsyncIteratorFactoryInstanceNode( | ||
| this.parseAsyncIteratorFactory(), | ||
| this.parse( | ||
| createStreamFromAsyncIterable( | ||
| properties as unknown as AsyncIterable<unknown>, | ||
| ), | ||
| ), | ||
| ), | ||
| ); | ||
| } | ||
| symbol = Symbol.toStringTag; | ||
| if (symbol in properties) { | ||
| keyNodes.push(this.parseWellKnownSymbol(symbol)); | ||
| valueNodes.push(createStringNode(properties[symbol] as string)); | ||
| } | ||
| symbol = Symbol.isConcatSpreadable; | ||
| if (symbol in properties) { | ||
| keyNodes.push(this.parseWellKnownSymbol(symbol)); | ||
| valueNodes.push(properties[symbol] ? TRUE_NODE : FALSE_NODE); | ||
| } | ||
| return { | ||
| k: keyNodes, | ||
| v: valueNodes, | ||
| s: keyNodes.length, | ||
| }; | ||
| } | ||
| protected handlePromiseSuccess(id: number, data: unknown): void { | ||
| const parsed = this.parseWithError(data); | ||
| if (parsed) { | ||
| this.onParse( | ||
| createSerovalNode( | ||
| SerovalNodeType.PromiseSuccess, | ||
| id, | ||
| NIL, | ||
| NIL, | ||
| NIL, | ||
| NIL, | ||
| NIL, | ||
| NIL, | ||
| [this.parseSpecialReference(SpecialReference.PromiseSuccess), parsed], | ||
| NIL, | ||
| NIL, | ||
| NIL, | ||
| ), | ||
| ); | ||
| } | ||
| this.popPendingState(); | ||
| } | ||
| protected handlePromiseFailure(id: number, data: unknown): void { | ||
| if (this.alive) { | ||
| const parsed = this.parseWithError(data); | ||
| if (parsed) { | ||
| this.onParse( | ||
| createSerovalNode( | ||
| SerovalNodeType.PromiseFailure, | ||
| id, | ||
| NIL, | ||
| NIL, | ||
| NIL, | ||
| NIL, | ||
| NIL, | ||
| NIL, | ||
| [ | ||
| this.parseSpecialReference(SpecialReference.PromiseFailure), | ||
| parsed, | ||
| ], | ||
| NIL, | ||
| NIL, | ||
| NIL, | ||
| ), | ||
| ); | ||
| } | ||
| } | ||
| this.popPendingState(); | ||
| } | ||
| protected parsePromise( | ||
| id: number, | ||
| current: Promise<unknown>, | ||
| ): SerovalPromiseConstructorNode { | ||
| const resolver = this.createIndex({}); | ||
| current.then( | ||
| this.handlePromiseSuccess.bind(this, resolver), | ||
| this.handlePromiseFailure.bind(this, resolver), | ||
| ); | ||
| this.pushPendingState(); | ||
| return this.createPromiseConstructorNode(id, resolver); | ||
| } | ||
| protected parsePlugin( | ||
| id: number, | ||
| current: unknown, | ||
| ): SerovalPluginNode | undefined { | ||
| const currentPlugins = this.plugins; | ||
| if (currentPlugins) { | ||
| for (let i = 0, len = currentPlugins.length; i < len; i++) { | ||
| const plugin = currentPlugins[i]; | ||
| if (plugin.parse.stream && plugin.test(current)) { | ||
| return createPluginNode( | ||
| id, | ||
| plugin.tag, | ||
| plugin.parse.stream(current, this, { | ||
| id, | ||
| }), | ||
| ); | ||
| } | ||
| } | ||
| } | ||
| return NIL; | ||
| } | ||
| protected parseStream(id: number, current: Stream<unknown>): SerovalNode { | ||
| const result = createStreamConstructorNode( | ||
| id, | ||
| this.parseSpecialReference(SpecialReference.StreamConstructor), | ||
| [], | ||
| ); | ||
| this.pushPendingState(); | ||
| current.on({ | ||
| next: value => { | ||
| if (this.alive) { | ||
| const parsed = this.parseWithError(value); | ||
| if (parsed) { | ||
| this.onParse(createStreamNextNode(id, parsed)); | ||
| } | ||
| } | ||
| }, | ||
| throw: value => { | ||
| if (this.alive) { | ||
| const parsed = this.parseWithError(value); | ||
| if (parsed) { | ||
| this.onParse(createStreamThrowNode(id, parsed)); | ||
| } | ||
| } | ||
| this.popPendingState(); | ||
| }, | ||
| return: value => { | ||
| if (this.alive) { | ||
| const parsed = this.parseWithError(value); | ||
| if (parsed) { | ||
| this.onParse(createStreamReturnNode(id, parsed)); | ||
| } | ||
| } | ||
| this.popPendingState(); | ||
| }, | ||
| }); | ||
| return result; | ||
| } | ||
| parseWithError<T>(current: T): SerovalNode | undefined { | ||
| try { | ||
| return this.parse(current); | ||
| } catch (err) { | ||
| this.onError(err); | ||
| return NIL; | ||
| } | ||
| } | ||
| /** | ||
| * @private | ||
| */ | ||
| start<T>(current: T): void { | ||
| const parsed = this.parseWithError(current); | ||
| if (parsed) { | ||
| this.onParseInternal(parsed, true); | ||
| this.initial = false; | ||
| this.flush(); | ||
| // Check if there's any pending pushes | ||
| if (this.pending <= 0) { | ||
| this.destroy(); | ||
| } | ||
| } | ||
| } | ||
| /** | ||
| * @private | ||
| */ | ||
| destroy(): void { | ||
| if (this.alive) { | ||
| this.onDone(); | ||
| this.alive = false; | ||
| } | ||
| } | ||
| isAlive(): boolean { | ||
| return this.alive; | ||
| } | ||
| } |
| import { | ||
| createAggregateErrorNode, | ||
| createArrayBufferNode, | ||
| createArrayNode, | ||
| createAsyncIteratorFactoryInstanceNode, | ||
| createBigIntNode, | ||
| createBigIntTypedArrayNode, | ||
| createBoxedNode, | ||
| createDataViewNode, | ||
| createDateNode, | ||
| createErrorNode, | ||
| createIteratorFactoryInstanceNode, | ||
| createNumberNode, | ||
| createPluginNode, | ||
| createRegExpNode, | ||
| createSetNode, | ||
| createStreamConstructorNode, | ||
| createStringNode, | ||
| createTypedArrayNode, | ||
| } from '../../base-primitives'; | ||
| import { Feature } from '../../compat'; | ||
| import { NIL } from '../../constants'; | ||
| import { SerovalParserError, SerovalUnsupportedTypeError } from '../../errors'; | ||
| import { | ||
| FALSE_NODE, | ||
| NULL_NODE, | ||
| TRUE_NODE, | ||
| UNDEFINED_NODE, | ||
| } from '../../literals'; | ||
| import { OpaqueReference } from '../../opaque-reference'; | ||
| import { SpecialReference } from '../../special-reference'; | ||
| import type { Stream } from '../../stream'; | ||
| import { createStream, isStream } from '../../stream'; | ||
| import { serializeString } from '../../string'; | ||
| import type { | ||
| SerovalAggregateErrorNode, | ||
| SerovalArrayNode, | ||
| SerovalBigIntTypedArrayNode, | ||
| SerovalBoxedNode, | ||
| SerovalDataViewNode, | ||
| SerovalErrorNode, | ||
| SerovalMapNode, | ||
| SerovalNode, | ||
| SerovalNullConstructorNode, | ||
| SerovalObjectNode, | ||
| SerovalObjectRecordKey, | ||
| SerovalObjectRecordNode, | ||
| SerovalPluginNode, | ||
| SerovalPromiseConstructorNode, | ||
| SerovalSetNode, | ||
| SerovalTypedArrayNode, | ||
| } from '../../types'; | ||
| import { getErrorOptions } from '../../utils/error'; | ||
| import { iteratorToSequence } from '../../utils/iterator-to-sequence'; | ||
| import type { | ||
| BigIntTypedArrayValue, | ||
| TypedArrayValue, | ||
| } from '../../utils/typed-array'; | ||
| import type { BaseParserContextOptions } from '../parser'; | ||
| import { BaseParserContext, ParserNodeType } from '../parser'; | ||
| type ObjectLikeNode = SerovalObjectNode | SerovalNullConstructorNode; | ||
| export type BaseSyncParserContextOptions = BaseParserContextOptions; | ||
| export default abstract class BaseSyncParserContext extends BaseParserContext { | ||
| protected parseItems(current: unknown[]): SerovalNode[] { | ||
| const nodes = []; | ||
| for (let i = 0, len = current.length; i < len; i++) { | ||
| if (i in current) { | ||
| nodes[i] = this.parse(current[i]); | ||
| } | ||
| } | ||
| return nodes; | ||
| } | ||
| protected parseArray(id: number, current: unknown[]): SerovalArrayNode { | ||
| return createArrayNode(id, current, this.parseItems(current)); | ||
| } | ||
| protected parseProperties( | ||
| properties: Record<string | symbol, unknown>, | ||
| ): SerovalObjectRecordNode { | ||
| const entries = Object.entries(properties); | ||
| const keyNodes: SerovalObjectRecordKey[] = []; | ||
| const valueNodes: SerovalNode[] = []; | ||
| for (let i = 0, len = entries.length; i < len; i++) { | ||
| keyNodes.push(serializeString(entries[i][0])); | ||
| valueNodes.push(this.parse(entries[i][1])); | ||
| } | ||
| // Check special properties, symbols in this case | ||
| let symbol = Symbol.iterator; | ||
| if (symbol in properties) { | ||
| keyNodes.push(this.parseWellKnownSymbol(symbol)); | ||
| valueNodes.push( | ||
| createIteratorFactoryInstanceNode( | ||
| this.parseIteratorFactory(), | ||
| this.parse( | ||
| iteratorToSequence(properties as unknown as Iterable<unknown>), | ||
| ), | ||
| ), | ||
| ); | ||
| } | ||
| symbol = Symbol.asyncIterator; | ||
| if (symbol in properties) { | ||
| keyNodes.push(this.parseWellKnownSymbol(symbol)); | ||
| valueNodes.push( | ||
| createAsyncIteratorFactoryInstanceNode( | ||
| this.parseAsyncIteratorFactory(), | ||
| this.parse(createStream()), | ||
| ), | ||
| ); | ||
| } | ||
| symbol = Symbol.toStringTag; | ||
| if (symbol in properties) { | ||
| keyNodes.push(this.parseWellKnownSymbol(symbol)); | ||
| valueNodes.push(createStringNode(properties[symbol] as string)); | ||
| } | ||
| symbol = Symbol.isConcatSpreadable; | ||
| if (symbol in properties) { | ||
| keyNodes.push(this.parseWellKnownSymbol(symbol)); | ||
| valueNodes.push(properties[symbol] ? TRUE_NODE : FALSE_NODE); | ||
| } | ||
| return { | ||
| k: keyNodes, | ||
| v: valueNodes, | ||
| s: keyNodes.length, | ||
| }; | ||
| } | ||
| protected parsePlainObject( | ||
| id: number, | ||
| current: Record<string, unknown>, | ||
| empty: boolean, | ||
| ): ObjectLikeNode { | ||
| return this.createObjectNode( | ||
| id, | ||
| current, | ||
| empty, | ||
| this.parseProperties(current), | ||
| ); | ||
| } | ||
| protected parseBoxed(id: number, current: object): SerovalBoxedNode { | ||
| return createBoxedNode(id, this.parse(current.valueOf())); | ||
| } | ||
| protected parseTypedArray( | ||
| id: number, | ||
| current: TypedArrayValue, | ||
| ): SerovalTypedArrayNode { | ||
| return createTypedArrayNode(id, current, this.parse(current.buffer)); | ||
| } | ||
| protected parseBigIntTypedArray( | ||
| id: number, | ||
| current: BigIntTypedArrayValue, | ||
| ): SerovalBigIntTypedArrayNode { | ||
| return createBigIntTypedArrayNode(id, current, this.parse(current.buffer)); | ||
| } | ||
| protected parseDataView(id: number, current: DataView): SerovalDataViewNode { | ||
| return createDataViewNode(id, current, this.parse(current.buffer)); | ||
| } | ||
| protected parseError(id: number, current: Error): SerovalErrorNode { | ||
| const options = getErrorOptions(current, this.features); | ||
| return createErrorNode( | ||
| id, | ||
| current, | ||
| options ? this.parseProperties(options) : NIL, | ||
| ); | ||
| } | ||
| protected parseAggregateError( | ||
| id: number, | ||
| current: AggregateError, | ||
| ): SerovalAggregateErrorNode { | ||
| const options = getErrorOptions(current, this.features); | ||
| return createAggregateErrorNode( | ||
| id, | ||
| current, | ||
| options ? this.parseProperties(options) : NIL, | ||
| ); | ||
| } | ||
| protected parseMap( | ||
| id: number, | ||
| current: Map<unknown, unknown>, | ||
| ): SerovalMapNode { | ||
| const keyNodes: SerovalNode[] = []; | ||
| const valueNodes: SerovalNode[] = []; | ||
| for (const [key, value] of current.entries()) { | ||
| keyNodes.push(this.parse(key)); | ||
| valueNodes.push(this.parse(value)); | ||
| } | ||
| return this.createMapNode(id, keyNodes, valueNodes, current.size); | ||
| } | ||
| protected parseSet(id: number, current: Set<unknown>): SerovalSetNode { | ||
| const items: SerovalNode[] = []; | ||
| for (const item of current.keys()) { | ||
| items.push(this.parse(item)); | ||
| } | ||
| return createSetNode(id, current.size, items); | ||
| } | ||
| protected parsePlugin( | ||
| id: number, | ||
| current: unknown, | ||
| ): SerovalPluginNode | undefined { | ||
| const currentPlugins = this.plugins; | ||
| if (currentPlugins) { | ||
| for (let i = 0, len = currentPlugins.length; i < len; i++) { | ||
| const plugin = currentPlugins[i]; | ||
| if (plugin.parse.sync && plugin.test(current)) { | ||
| return createPluginNode( | ||
| id, | ||
| plugin.tag, | ||
| plugin.parse.sync(current, this, { | ||
| id, | ||
| }), | ||
| ); | ||
| } | ||
| } | ||
| } | ||
| return undefined; | ||
| } | ||
| protected parseStream(id: number, _current: Stream<unknown>): SerovalNode { | ||
| return createStreamConstructorNode( | ||
| id, | ||
| this.parseSpecialReference(SpecialReference.StreamConstructor), | ||
| [], | ||
| ); | ||
| } | ||
| protected parsePromise( | ||
| id: number, | ||
| _current: Promise<unknown>, | ||
| ): SerovalPromiseConstructorNode { | ||
| return this.createPromiseConstructorNode(id, this.createIndex({})); | ||
| } | ||
| // biome-ignore lint/complexity/noExcessiveCognitiveComplexity: ehh | ||
| protected parseObject(id: number, current: object): SerovalNode { | ||
| if (Array.isArray(current)) { | ||
| return this.parseArray(id, current); | ||
| } | ||
| if (isStream(current)) { | ||
| return this.parseStream(id, current); | ||
| } | ||
| const currentClass = current.constructor; | ||
| if (currentClass === OpaqueReference) { | ||
| return this.parse( | ||
| (current as OpaqueReference<unknown, unknown>).replacement, | ||
| ); | ||
| } | ||
| const parsed = this.parsePlugin(id, current); | ||
| if (parsed) { | ||
| return parsed; | ||
| } | ||
| switch (currentClass) { | ||
| case Object: | ||
| return this.parsePlainObject( | ||
| id, | ||
| current as Record<string, unknown>, | ||
| false, | ||
| ); | ||
| case undefined: | ||
| return this.parsePlainObject( | ||
| id, | ||
| current as Record<string, unknown>, | ||
| true, | ||
| ); | ||
| case Date: | ||
| return createDateNode(id, current as unknown as Date); | ||
| case RegExp: | ||
| return createRegExpNode(id, current as unknown as RegExp); | ||
| case Error: | ||
| case EvalError: | ||
| case RangeError: | ||
| case ReferenceError: | ||
| case SyntaxError: | ||
| case TypeError: | ||
| case URIError: | ||
| return this.parseError(id, current as unknown as Error); | ||
| case Number: | ||
| case Boolean: | ||
| case String: | ||
| case BigInt: | ||
| return this.parseBoxed(id, current); | ||
| case ArrayBuffer: | ||
| return createArrayBufferNode(id, current as unknown as ArrayBuffer); | ||
| case Int8Array: | ||
| case Int16Array: | ||
| case Int32Array: | ||
| case Uint8Array: | ||
| case Uint16Array: | ||
| case Uint32Array: | ||
| case Uint8ClampedArray: | ||
| case Float32Array: | ||
| case Float64Array: | ||
| return this.parseTypedArray(id, current as unknown as TypedArrayValue); | ||
| case DataView: | ||
| return this.parseDataView(id, current as unknown as DataView); | ||
| case Map: | ||
| return this.parseMap(id, current as unknown as Map<unknown, unknown>); | ||
| case Set: | ||
| return this.parseSet(id, current as unknown as Set<unknown>); | ||
| default: | ||
| break; | ||
| } | ||
| // Promises | ||
| if (currentClass === Promise || current instanceof Promise) { | ||
| return this.parsePromise(id, current as unknown as Promise<unknown>); | ||
| } | ||
| const currentFeatures = this.features; | ||
| // BigInt Typed Arrays | ||
| if (currentFeatures & Feature.BigIntTypedArray) { | ||
| switch (currentClass) { | ||
| case BigInt64Array: | ||
| case BigUint64Array: | ||
| return this.parseBigIntTypedArray( | ||
| id, | ||
| current as unknown as BigIntTypedArrayValue, | ||
| ); | ||
| default: | ||
| break; | ||
| } | ||
| } | ||
| if ( | ||
| currentFeatures & Feature.AggregateError && | ||
| typeof AggregateError !== 'undefined' && | ||
| (currentClass === AggregateError || current instanceof AggregateError) | ||
| ) { | ||
| return this.parseAggregateError(id, current as unknown as AggregateError); | ||
| } | ||
| // Slow path. We only need to handle Errors and Iterators | ||
| // since they have very broad implementations. | ||
| if (current instanceof Error) { | ||
| return this.parseError(id, current); | ||
| } | ||
| // Generator functions don't have a global constructor | ||
| // despite existing | ||
| if (Symbol.iterator in current || Symbol.asyncIterator in current) { | ||
| return this.parsePlainObject(id, current, !!currentClass); | ||
| } | ||
| throw new SerovalUnsupportedTypeError(current); | ||
| } | ||
| protected parseFunction(current: unknown): SerovalNode { | ||
| const ref = this.getReference(current); | ||
| if (ref.type !== ParserNodeType.Fresh) { | ||
| return ref.value; | ||
| } | ||
| const plugin = this.parsePlugin(ref.value, current); | ||
| if (plugin) { | ||
| return plugin; | ||
| } | ||
| throw new SerovalUnsupportedTypeError(current); | ||
| } | ||
| parse<T>(current: T): SerovalNode { | ||
| switch (typeof current) { | ||
| case 'boolean': | ||
| return current ? TRUE_NODE : FALSE_NODE; | ||
| case 'undefined': | ||
| return UNDEFINED_NODE; | ||
| case 'string': | ||
| return createStringNode(current as string); | ||
| case 'number': | ||
| return createNumberNode(current as number); | ||
| case 'bigint': | ||
| return createBigIntNode(current as bigint); | ||
| case 'object': { | ||
| if (current) { | ||
| const ref = this.getReference(current); | ||
| return ref.type === ParserNodeType.Fresh | ||
| ? this.parseObject(ref.value, current as object) | ||
| : ref.value; | ||
| } | ||
| return NULL_NODE; | ||
| } | ||
| case 'symbol': | ||
| return this.parseWellKnownSymbol(current); | ||
| case 'function': { | ||
| return this.parseFunction(current); | ||
| } | ||
| default: | ||
| throw new SerovalUnsupportedTypeError(current); | ||
| } | ||
| } | ||
| parseTop<T>(current: T): SerovalNode { | ||
| try { | ||
| return this.parse(current); | ||
| } catch (error) { | ||
| throw error instanceof SerovalParserError | ||
| ? error | ||
| : new SerovalParserError(error); | ||
| } | ||
| } | ||
| } |
| import BaseAsyncParserContext from '../context/parser/async'; | ||
| import type { SerovalMode } from '../plugin'; | ||
| import type { CrossParserContextOptions } from './parser'; | ||
| export type CrossAsyncParserContextOptions = CrossParserContextOptions; | ||
| export default class CrossAsyncParserContext extends BaseAsyncParserContext { | ||
| readonly mode: SerovalMode = 'cross'; | ||
| } |
| import type { BaseDeserializerOptions } from '../context/deserializer'; | ||
| import BaseDeserializerContext from '../context/deserializer'; | ||
| import type { SerovalMode } from '../plugin'; | ||
| export type CrossDeserializerContextOptions = BaseDeserializerOptions; | ||
| export default class CrossDeserializerContext extends BaseDeserializerContext { | ||
| readonly mode: SerovalMode = 'cross'; | ||
| assignIndexedValue<T>(index: number, value: T): T { | ||
| if (!this.refs.has(index)) { | ||
| this.refs.set(index, value); | ||
| } | ||
| return value; | ||
| } | ||
| } |
| import type { BaseParserContextOptions } from '../context/parser'; | ||
| export type CrossParserContextOptions = BaseParserContextOptions; | ||
| export interface CrossContextOptions { | ||
| scopeId?: string; | ||
| } |
| import { SerovalNodeType } from '../constants'; | ||
| import type { BaseSerializerContextOptions } from '../context/serializer'; | ||
| import BaseSerializerContext from '../context/serializer'; | ||
| import { GLOBAL_CONTEXT_REFERENCES } from '../keys'; | ||
| import type { SerovalMode } from '../plugin'; | ||
| import { serializeString } from '../string'; | ||
| import type { SerovalNode } from '../types'; | ||
| import type { CrossContextOptions } from './parser'; | ||
| export interface CrossSerializerContextOptions | ||
| extends BaseSerializerContextOptions, | ||
| CrossContextOptions {} | ||
| export default class CrossSerializerContext extends BaseSerializerContext { | ||
| readonly mode: SerovalMode = 'cross'; | ||
| scopeId?: string; | ||
| constructor(options: CrossSerializerContextOptions) { | ||
| super(options); | ||
| this.scopeId = options.scopeId; | ||
| } | ||
| getRefParam(id: number): string { | ||
| return GLOBAL_CONTEXT_REFERENCES + '[' + id + ']'; | ||
| } | ||
| protected assignIndexedValue(index: number, value: string): string { | ||
| // In cross-reference, we have to assume that | ||
| // every reference are going to be referenced | ||
| // in the future, and so we need to store | ||
| // all of it into the reference array. | ||
| return this.getRefParam(index) + '=' + value; | ||
| } | ||
| serializeTop(tree: SerovalNode): string { | ||
| // Get the serialized result | ||
| const result = this.serialize(tree); | ||
| // If the node is a non-reference, return | ||
| // the result immediately | ||
| const id = tree.i; | ||
| if (id == null) { | ||
| return result; | ||
| } | ||
| // Get the patches | ||
| const patches = this.resolvePatches(); | ||
| // Get the variable that represents the root | ||
| const ref = this.getRefParam(id); | ||
| // Parameters needed for scoping | ||
| const params = this.scopeId == null ? '' : GLOBAL_CONTEXT_REFERENCES; | ||
| // If there are patches, append it after the result | ||
| const body = patches ? '(' + result + ',' + patches + ref + ')' : result; | ||
| // If there are no params, there's no need to generate a function | ||
| if (params === '') { | ||
| if (tree.t === SerovalNodeType.Object && !patches) { | ||
| return '(' + body + ')'; | ||
| } | ||
| return body; | ||
| } | ||
| // Get the arguments for the IIFE | ||
| const args = | ||
| this.scopeId == null | ||
| ? '()' | ||
| : '(' + | ||
| GLOBAL_CONTEXT_REFERENCES + | ||
| '["' + | ||
| serializeString(this.scopeId) + | ||
| '"])'; | ||
| // Create the IIFE | ||
| return '(' + this.createFunction([params], body) + ')' + args; | ||
| } | ||
| } |
| import type { BaseStreamParserContextOptions } from '../context/parser/stream'; | ||
| import BaseStreamParserContext from '../context/parser/stream'; | ||
| import type { SerovalMode } from '../plugin'; | ||
| export type CrossStreamParserContextOptions = BaseStreamParserContextOptions; | ||
| export default class CrossStreamParserContext extends BaseStreamParserContext { | ||
| readonly mode: SerovalMode = 'cross'; | ||
| } |
| import BaseSyncParserContext from '../context/parser/sync'; | ||
| import type { SerovalMode } from '../plugin'; | ||
| import type { CrossParserContextOptions } from './parser'; | ||
| export type CrossSyncParserContextOptions = CrossParserContextOptions; | ||
| export default class CrossSyncParserContext extends BaseSyncParserContext { | ||
| readonly mode: SerovalMode = 'cross'; | ||
| } |
| import type { BaseParserContextOptions } from '../context/parser'; | ||
| import BaseAsyncParserContext from '../context/parser/async'; | ||
| import type { SerovalMode } from '../plugin'; | ||
| export type AsyncParserContextOptions = Omit<BaseParserContextOptions, 'refs'>; | ||
| export default class AsyncParserContext extends BaseAsyncParserContext { | ||
| readonly mode: SerovalMode = 'vanilla'; | ||
| } |
| import type { BaseDeserializerOptions } from '../context/deserializer'; | ||
| import BaseDeserializerContext from '../context/deserializer'; | ||
| import type { SerovalMode } from '../plugin'; | ||
| export interface VanillaDeserializerContextOptions | ||
| extends Omit<BaseDeserializerOptions, 'refs'> { | ||
| markedRefs: number[] | Set<number>; | ||
| } | ||
| export default class VanillaDeserializerContext extends BaseDeserializerContext { | ||
| readonly mode: SerovalMode = 'vanilla'; | ||
| marked: Set<number>; | ||
| constructor(options: VanillaDeserializerContextOptions) { | ||
| super(options); | ||
| this.marked = new Set(options.markedRefs); | ||
| } | ||
| assignIndexedValue<T>(index: number, value: T): T { | ||
| if (this.marked.has(index)) { | ||
| this.refs.set(index, value); | ||
| } | ||
| return value; | ||
| } | ||
| } |
| import { SerovalNodeType } from '../constants'; | ||
| import type { BaseSerializerContextOptions } from '../context/serializer'; | ||
| import BaseSerializerContext from '../context/serializer'; | ||
| import { SerovalUnsupportedNodeError } from '../errors'; | ||
| import type { SerovalMode } from '../plugin'; | ||
| import type { | ||
| SerovalNode, | ||
| SerovalPromiseConstructorNode, | ||
| SerovalPromiseRejectNode, | ||
| SerovalPromiseResolveNode, | ||
| } from '../types'; | ||
| import getIdentifier from '../utils/get-identifier'; | ||
| export type VanillaSerializerContextOptions = BaseSerializerContextOptions; | ||
| export default class VanillaSerializerContext extends BaseSerializerContext { | ||
| readonly mode: SerovalMode = 'vanilla'; | ||
| /** | ||
| * Map tree refs to actual refs | ||
| * @private | ||
| */ | ||
| valid = new Map<number, number>(); | ||
| /** | ||
| * Variables | ||
| * @private | ||
| */ | ||
| vars: string[] = []; | ||
| /** | ||
| * Creates the reference param (identifier) from the given reference ID | ||
| * Calling this function means the value has been referenced somewhere | ||
| */ | ||
| getRefParam(index: number): string { | ||
| /** | ||
| * Creates a new reference ID from a given reference ID | ||
| * This new reference ID means that the reference itself | ||
| * has been referenced at least once, and is used to generate | ||
| * the variables | ||
| */ | ||
| let actualIndex = this.valid.get(index); | ||
| if (actualIndex == null) { | ||
| actualIndex = this.valid.size; | ||
| this.valid.set(index, actualIndex); | ||
| } | ||
| let identifier = this.vars[actualIndex]; | ||
| if (identifier == null) { | ||
| identifier = getIdentifier(actualIndex); | ||
| this.vars[actualIndex] = identifier; | ||
| } | ||
| return identifier; | ||
| } | ||
| protected assignIndexedValue(index: number, value: string): string { | ||
| if (this.isMarked(index)) { | ||
| return this.getRefParam(index) + '=' + value; | ||
| } | ||
| return value; | ||
| } | ||
| protected serializePromiseConstructor( | ||
| node: SerovalPromiseConstructorNode, | ||
| ): string { | ||
| throw new SerovalUnsupportedNodeError(node); | ||
| } | ||
| protected serializePromiseResolve(node: SerovalPromiseResolveNode): string { | ||
| throw new SerovalUnsupportedNodeError(node); | ||
| } | ||
| protected serializePromiseReject(node: SerovalPromiseRejectNode): string { | ||
| throw new SerovalUnsupportedNodeError(node); | ||
| } | ||
| serializeTop(tree: SerovalNode): string { | ||
| const result = this.serialize(tree); | ||
| // Shared references detected | ||
| if (tree.i != null && this.vars.length) { | ||
| const patches = this.resolvePatches(); | ||
| let body = result; | ||
| if (patches) { | ||
| // Get (or create) a ref from the source | ||
| const index = this.getRefParam(tree.i); | ||
| body = result + ',' + patches + index; | ||
| if (!result.startsWith(index + '=')) { | ||
| body = index + '=' + body; | ||
| } | ||
| body = '(' + body + ')'; | ||
| } | ||
| return '(' + this.createFunction(this.vars, body) + ')()'; | ||
| } | ||
| if (tree.t === SerovalNodeType.Object) { | ||
| return '(' + result + ')'; | ||
| } | ||
| return result; | ||
| } | ||
| } |
| import BaseSyncParserContext from '../context/parser/sync'; | ||
| import type { BaseParserContextOptions } from '../context/parser'; | ||
| import type { SerovalMode } from '../plugin'; | ||
| export type SyncParserContextOptions = Omit<BaseParserContextOptions, 'refs'>; | ||
| export default class SyncParserContext extends BaseSyncParserContext { | ||
| readonly mode: SerovalMode = 'vanilla'; | ||
| } |
| export default function assert(cond: unknown, error: Error): asserts cond { | ||
| if (!cond) { | ||
| throw error; | ||
| } | ||
| } |
| export interface Deferred { | ||
| promise: Promise<unknown>; | ||
| resolve(value: unknown): void; | ||
| reject(value: unknown): void; | ||
| } | ||
| export function createDeferred(): Deferred { | ||
| let resolve: Deferred['resolve']; | ||
| let reject: Deferred['reject']; | ||
| return { | ||
| promise: new Promise<unknown>((res, rej) => { | ||
| resolve = res; | ||
| reject = rej; | ||
| }), | ||
| resolve(value): void { | ||
| resolve(value); | ||
| }, | ||
| reject(value): void { | ||
| reject(value); | ||
| }, | ||
| }; | ||
| } |
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
Potential vulnerability
Supply chain riskInitial human review suggests the presence of a vulnerability in this package. It is pending further analysis and confirmation.
Potential vulnerability
Supply chain riskInitial human review suggests the presence of a vulnerability in this package. It is pending further analysis and confirmation.
14968
1.87%989812
-2.86%108
-23.4%