diff --git a/packages/seroval/src/core/base-primitives.ts b/packages/seroval/src/core/base-primitives.ts index 61f5dfdd..8e63c2a7 100644 --- a/packages/seroval/src/core/base-primitives.ts +++ b/packages/seroval/src/core/base-primitives.ts @@ -15,6 +15,7 @@ import type { SerovalAggregateErrorNode, SerovalArrayBufferNode, SerovalArrayNode, + SerovalAsyncIteratorFactoryInstanceNode, SerovalBigIntNode, SerovalBigIntTypedArrayNode, SerovalBoxedNode, @@ -23,6 +24,7 @@ import type { SerovalDateNode, SerovalErrorNode, SerovalIndexedValueNode, + SerovalIteratorFactoryInstanceNode, SerovalNode, SerovalNumberNode, SerovalObjectRecordNode, @@ -63,7 +65,6 @@ export function createNumberNode(value: number): SerovalConstantNode | SerovalNu f: undefined, b: undefined, o: undefined, - x: undefined, }; } } @@ -82,7 +83,6 @@ export function createStringNode(value: string): SerovalStringNode { f: undefined, b: undefined, o: undefined, - x: undefined, }; } @@ -102,7 +102,6 @@ export function createBigIntNode( f: undefined, b: undefined, o: undefined, - x: undefined, }; } @@ -120,7 +119,6 @@ export function createIndexedValueNode(id: number): SerovalIndexedValueNode { f: undefined, b: undefined, o: undefined, - x: undefined, }; } @@ -138,7 +136,6 @@ export function createDateNode(id: number, current: Date): SerovalDateNode { a: undefined, b: undefined, o: undefined, - x: undefined, }; } @@ -156,7 +153,6 @@ export function createRegExpNode(id: number, current: RegExp): SerovalRegExpNode f: undefined, b: undefined, o: undefined, - x: undefined, }; } @@ -183,7 +179,6 @@ export function createArrayBufferNode( f: undefined, b: undefined, o: undefined, - x: undefined, }; } @@ -205,7 +200,6 @@ export function createWKSymbolNode( f: undefined, b: undefined, o: undefined, - x: undefined, }; } @@ -226,7 +220,6 @@ export function createReferenceNode( f: undefined, b: undefined, o: undefined, - x: undefined, }; } @@ -248,7 +241,6 @@ export function createPluginNode( f: undefined, b: undefined, o: undefined, - x: undefined, }; } @@ -270,7 +262,6 @@ export function createArrayNode( f: undefined, b: undefined, o: getObjectFlag(current), - x: undefined, }; } @@ -291,7 +282,6 @@ export function createBoxedNode( f: boxed, b: undefined, o: undefined, - x: undefined, }; } @@ -313,7 +303,6 @@ export function createTypedArrayNode( f: buffer, b: current.byteOffset, o: undefined, - x: undefined, }; } @@ -335,7 +324,6 @@ export function createBigIntTypedArrayNode( f: buffer, b: current.byteOffset, o: undefined, - x: undefined, }; } @@ -357,7 +345,6 @@ export function createDataViewNode( f: buffer, b: current.byteOffset, o: undefined, - x: undefined, }; } @@ -379,7 +366,6 @@ export function createErrorNode( f: undefined, b: undefined, o: undefined, - x: undefined, }; } @@ -401,7 +387,6 @@ export function createAggregateErrorNode( f: undefined, b: undefined, o: undefined, - x: undefined, }; } @@ -423,6 +408,51 @@ export function createSetNode( f: undefined, b: undefined, o: undefined, - x: undefined, + }; +} + +export function createIteratorFactoryInstanceNode( + factory: SerovalNode, + items: SerovalNode, +): SerovalIteratorFactoryInstanceNode { + return { + t: SerovalNodeType.IteratorFactoryInstance, + i: undefined, + s: undefined, + l: undefined, + c: undefined, + m: undefined, + p: undefined, + e: undefined, + a: [ + factory, + items, + ], + f: undefined, + b: undefined, + o: undefined, + }; +} + +export function createAsyncIteratorFactoryInstanceNode( + factory: SerovalNode, + items: SerovalNode, +): SerovalAsyncIteratorFactoryInstanceNode { + return { + t: SerovalNodeType.AsyncIteratorFactoryInstance, + i: undefined, + s: undefined, + l: undefined, + c: undefined, + m: undefined, + p: undefined, + e: undefined, + a: [ + factory, + items, + ], + f: undefined, + b: undefined, + o: undefined, }; } diff --git a/packages/seroval/src/core/constants.ts b/packages/seroval/src/core/constants.ts index 927f8278..616717f9 100644 --- a/packages/seroval/src/core/constants.ts +++ b/packages/seroval/src/core/constants.ts @@ -53,7 +53,11 @@ export const enum SerovalNodeType { Plugin = 40, MapSentinel = 41, IteratorFactory = 42, - AsyncIteratorFactory = 43, + IteratorFactoryInstance = 43, + AsyncIteratorFactory = 44, + AsyncIteratorFactoryInstance = 45, + ReadableStream = 46, + ReadableStreamFactory = 47, } export const enum SerovalObjectFlags { diff --git a/packages/seroval/src/core/context/deserializer.ts b/packages/seroval/src/core/context/deserializer.ts index c433c9e5..91e2dd52 100644 --- a/packages/seroval/src/core/context/deserializer.ts +++ b/packages/seroval/src/core/context/deserializer.ts @@ -6,6 +6,7 @@ import type { SerovalAggregateErrorNode, SerovalArrayBufferNode, SerovalArrayNode, + SerovalAsyncIteratorFactoryInstanceNode, SerovalBigIntTypedArrayNode, SerovalBlobNode, SerovalBoxedNode, @@ -18,6 +19,7 @@ import type { SerovalFileNode, SerovalFormDataNode, SerovalHeadersNode, + SerovalIteratorFactoryInstanceNode, SerovalMapNode, SerovalNode, SerovalNullConstructorNode, @@ -42,9 +44,6 @@ import type { SerovalURLNode, SerovalURLSearchParamsNode, } from '../types'; -import { - SerovalObjectRecordSpecialKey, -} from '../types'; import { CONSTANT_VAL, ERROR_CONSTRUCTOR, @@ -132,33 +131,14 @@ export default abstract class BaseDeserializerContext implements PluginAccessOpt ): Record { const len = node.s; if (len) { - let key: SerovalObjectRecordKey; - let value: unknown; const keys = node.k; const vals = node.v; - for (let i = 0; i < len; i++) { + for (let i = 0, key: SerovalObjectRecordKey; i < len; i++) { key = keys[i]; - value = this.deserialize(vals[i]); - switch (key) { - case SerovalObjectRecordSpecialKey.SymbolIterator: { - const current = value as Sequence; - result[Symbol.iterator] = sequenceToIterator(current); - } - break; - case SerovalObjectRecordSpecialKey.SymbolAsyncIterator: { - const current = value; - if ((current as object).constructor === ReadableStream) { - result[Symbol.asyncIterator] = readableStreamToAsyncIterator( - current as ReadableStream>, - ); - } else { - result[Symbol.asyncIterator] = sequenceToAsyncIterator(current as Sequence); - } - } - break; - default: - result[deserializeString(key)] = value; - break; + if (typeof key === 'string') { + result[deserializeString(key)] = this.deserialize(vals[i]); + } else { + result[this.deserialize(key) as symbol] = this.deserialize(vals[i]); } } } @@ -511,6 +491,25 @@ export default abstract class BaseDeserializerContext implements PluginAccessOpt return undefined; } + private deserializeIteratorFactoryInstance( + node: SerovalIteratorFactoryInstanceNode, + ): unknown { + const source = this.deserialize(node.a[1]); + return sequenceToIterator(source as Sequence); + } + + private deserializeAsyncIteratorFactoryInstance( + node: SerovalAsyncIteratorFactoryInstanceNode, + ): unknown { + const source = this.deserialize(node.a[1]); + if ((source as object).constructor === ReadableStream) { + return readableStreamToAsyncIterator( + source as ReadableStream>, + ); + } + return sequenceToAsyncIterator(source as Sequence); + } + deserialize(node: SerovalNode): unknown { switch (node.t) { case SerovalNodeType.Constant: @@ -593,6 +592,10 @@ export default abstract class BaseDeserializerContext implements PluginAccessOpt return this.deserializeReadableStreamError(node); case SerovalNodeType.ReadableStreamClose: return this.deserializeReadableStreamClose(node); + case SerovalNodeType.IteratorFactoryInstance: + return this.deserializeIteratorFactoryInstance(node); + case SerovalNodeType.AsyncIteratorFactoryInstance: + return this.deserializeAsyncIteratorFactoryInstance(node); case SerovalNodeType.MapSentinel: case SerovalNodeType.IteratorFactory: case SerovalNodeType.AsyncIteratorFactory: diff --git a/packages/seroval/src/core/context/parser.ts b/packages/seroval/src/core/context/parser.ts index 908ec1da..53dd3848 100644 --- a/packages/seroval/src/core/context/parser.ts +++ b/packages/seroval/src/core/context/parser.ts @@ -17,18 +17,20 @@ import { ASYNC_ITERATOR, ITERATOR, MAP_SENTINEL, - SpecialReference, + READABLE_STREAM, } from '../special-reference'; import type { - SerovalAsyncIteratorNode, + SerovalAsyncIteratorFactoryNode, SerovalIndexedValueNode, - SerovalIteratorNode, + SerovalIteratorFactoryNode, SerovalMapNode, SerovalMapSentinelNode, SerovalNode, SerovalNullConstructorNode, SerovalObjectNode, SerovalObjectRecordNode, + SerovalReadableStreamFactoryNode, + SerovalReadableStreamNode, SerovalReferenceNode, SerovalWKSymbolNode, } from '../types'; @@ -135,11 +137,10 @@ export abstract class BaseParserContext implements PluginAccessOptions { f: undefined, b: undefined, o: undefined, - x: undefined, }; } - protected parseIteratorFactory(): SerovalIndexedValueNode | SerovalIteratorNode { + protected parseIteratorFactory(): SerovalIndexedValueNode | SerovalIteratorFactoryNode { const registeredID = this.refs.get(ITERATOR); if (registeredID != null) { this.markRef(registeredID); @@ -157,20 +158,13 @@ export abstract class BaseParserContext implements PluginAccessOptions { p: undefined, e: undefined, a: undefined, - f: undefined, + f: this.parseWKSymbol(Symbol.iterator), b: undefined, o: undefined, - x: { - [SpecialReference.Sentinel]: undefined, - [SpecialReference.SymbolIterator]: this.parseWKSymbol(Symbol.iterator), - [SpecialReference.IteratorFactory]: undefined, - [SpecialReference.SymbolAsyncIterator]: undefined, - [SpecialReference.AsyncIteratorFactory]: undefined, - }, }; } - protected parseAsyncIteratorFactory(): SerovalIndexedValueNode | SerovalAsyncIteratorNode { + protected parseAsyncIteratorFactory(): SerovalIndexedValueNode | SerovalAsyncIteratorFactoryNode { const registeredID = this.refs.get(ASYNC_ITERATOR); if (registeredID != null) { this.markRef(registeredID); @@ -188,16 +182,9 @@ export abstract class BaseParserContext implements PluginAccessOptions { p: undefined, e: undefined, a: undefined, - f: undefined, + f: this.parseWKSymbol(Symbol.asyncIterator), b: undefined, o: undefined, - x: { - [SpecialReference.Sentinel]: undefined, - [SpecialReference.SymbolIterator]: undefined, - [SpecialReference.IteratorFactory]: undefined, - [SpecialReference.SymbolAsyncIterator]: this.parseWKSymbol(Symbol.asyncIterator), - [SpecialReference.AsyncIteratorFactory]: undefined, - }, }; } @@ -220,29 +207,6 @@ export abstract class BaseParserContext implements PluginAccessOptions { f: undefined, b: undefined, o: getObjectFlag(current), - x: { - [SpecialReference.Sentinel]: undefined, - [SpecialReference.SymbolIterator]: ( - this.features & Feature.Symbol && Symbol.iterator in current - ? this.parseWKSymbol(Symbol.iterator) - : undefined - ), - [SpecialReference.IteratorFactory]: ( - this.features & Feature.Symbol && Symbol.iterator in current - ? this.parseIteratorFactory() - : undefined - ), - [SpecialReference.SymbolAsyncIterator]: ( - this.features & Feature.Symbol && Symbol.asyncIterator in current - ? this.parseWKSymbol(Symbol.asyncIterator) - : undefined - ), - [SpecialReference.AsyncIteratorFactory]: ( - this.features & Feature.Symbol && Symbol.asyncIterator in current - ? this.parseAsyncIteratorFactory() - : undefined - ), - }, }; } @@ -262,16 +226,55 @@ export abstract class BaseParserContext implements PluginAccessOptions { p: undefined, e: { k, v, s }, a: undefined, - f: undefined, + f: this.parseMapSentinel(), + b: undefined, + o: undefined, + }; + } + + protected parseReadableStreamFactory( + items: SerovalNode, + ): SerovalIndexedValueNode | SerovalReadableStreamFactoryNode { + const registeredID = this.refs.get(READABLE_STREAM); + if (registeredID != null) { + this.markRef(registeredID); + return createIndexedValueNode(registeredID); + } + const id = this.refs.size; + this.refs.set(READABLE_STREAM, id); + return { + t: SerovalNodeType.ReadableStreamFactory, + i: id, + s: undefined, + l: undefined, + c: undefined, + m: undefined, + p: undefined, + e: undefined, + a: undefined, + f: items, + b: undefined, + o: undefined, + }; + } + + protected createReadableStreamNode( + id: number, + items: SerovalNode, + ): SerovalReadableStreamNode { + return { + t: SerovalNodeType.ReadableStream, + i: id, + s: undefined, + l: undefined, + c: undefined, + m: undefined, + p: undefined, + e: undefined, + a: undefined, + f: this.parseReadableStreamFactory(items), b: undefined, o: undefined, - x: { - [SpecialReference.Sentinel]: this.parseMapSentinel(), - [SpecialReference.SymbolIterator]: undefined, - [SpecialReference.IteratorFactory]: undefined, - [SpecialReference.SymbolAsyncIterator]: undefined, - [SpecialReference.AsyncIteratorFactory]: undefined, - }, }; } } diff --git a/packages/seroval/src/core/context/parser/async.ts b/packages/seroval/src/core/context/parser/async.ts index 84bfd5fb..06b7012e 100644 --- a/packages/seroval/src/core/context/parser/async.ts +++ b/packages/seroval/src/core/context/parser/async.ts @@ -19,6 +19,8 @@ import { createErrorNode, createSetNode, createAggregateErrorNode, + createIteratorFactoryInstanceNode, + createAsyncIteratorFactoryInstanceNode, } from '../../base-primitives'; import { BIGINT_FLAG, Feature } from '../../compat'; import { @@ -37,12 +39,11 @@ import { FALSE_NODE, UNDEFINED_NODE, } from '../../literals'; -import { asyncIteratorToSequence, iteratorToSequence } from '../../utils/iterator-to-sequence'; +import { asyncIteratorToSequence, iteratorToSequence, readableStreamToSequence } from '../../utils/iterator-to-sequence'; import { BaseParserContext } from '../parser'; import promiseToResult from '../../utils/promise-to-result'; import { getErrorOptions } from '../../utils/error'; import { serializeString } from '../../string'; -import { SerovalObjectRecordSpecialKey } from '../../types'; import type { SerovalErrorNode, SerovalArrayNode, @@ -69,6 +70,7 @@ import type { SerovalResponseNode, SerovalSetNode, SerovalDataViewNode, + SerovalReadableStreamNode, } from '../../types'; import { createURLNode, @@ -124,15 +126,29 @@ export default abstract class BaseAsyncParserContext extends BaseParserContext { // Check special properties if (this.features & Feature.Symbol) { if (Symbol.iterator in properties) { - keyNodes.push(SerovalObjectRecordSpecialKey.SymbolIterator); + keyNodes.push( + this.parseWKSymbol(Symbol.iterator), + ); valueNodes.push( - await this.parse(iteratorToSequence(properties as Iterable)), + createIteratorFactoryInstanceNode( + this.parseIteratorFactory(), + await this.parse( + iteratorToSequence(properties as Iterable), + ), + ), ); } if (Symbol.asyncIterator in properties) { - keyNodes.push(SerovalObjectRecordSpecialKey.SymbolAsyncIterator); + keyNodes.push( + this.parseWKSymbol(Symbol.asyncIterator), + ); valueNodes.push( - await this.parse(await asyncIteratorToSequence(properties as AsyncIterable)), + createAsyncIteratorFactoryInstanceNode( + this.parseAsyncIteratorFactory(), + await this.parse( + await asyncIteratorToSequence(properties as AsyncIterable), + ), + ), ); } } @@ -258,7 +274,6 @@ export default abstract class BaseAsyncParserContext extends BaseParserContext { a: undefined, b: undefined, o: undefined, - x: undefined, }; } @@ -279,7 +294,6 @@ export default abstract class BaseAsyncParserContext extends BaseParserContext { a: undefined, b: current.lastModified, o: undefined, - x: undefined, }; } @@ -321,7 +335,6 @@ export default abstract class BaseAsyncParserContext extends BaseParserContext { f: undefined, b: undefined, o: undefined, - x: undefined, }; } @@ -346,7 +359,6 @@ export default abstract class BaseAsyncParserContext extends BaseParserContext { f: undefined, b: undefined, o: undefined, - x: undefined, }; } @@ -369,7 +381,6 @@ export default abstract class BaseAsyncParserContext extends BaseParserContext { a: undefined, b: undefined, o: undefined, - x: undefined, }; } @@ -395,7 +406,6 @@ export default abstract class BaseAsyncParserContext extends BaseParserContext { ], b: undefined, o: undefined, - x: undefined, }; } @@ -435,7 +445,6 @@ export default abstract class BaseAsyncParserContext extends BaseParserContext { f: await this.parse(result), b: undefined, o: undefined, - x: undefined, }; } @@ -461,6 +470,18 @@ export default abstract class BaseAsyncParserContext extends BaseParserContext { return undefined; } + private async parseReadableStream( + id: number, + current: ReadableStream, + ): Promise { + return this.createReadableStreamNode( + id, + await this.parse( + await readableStreamToSequence(current), + ), + ); + } + private async parseObject( id: number, current: object, @@ -579,6 +600,8 @@ export default abstract class BaseAsyncParserContext extends BaseParserContext { return this.parseCustomEvent(id, current as unknown as CustomEvent); case (typeof DOMException !== 'undefined' ? DOMException : UNIVERSAL_SENTINEL): return createDOMExceptionNode(id, current as unknown as DOMException); + case (typeof ReadableStream !== 'undefined' ? ReadableStream : UNIVERSAL_SENTINEL): + return this.parseReadableStream(id, current as unknown as ReadableStream); default: break; } diff --git a/packages/seroval/src/core/context/parser/stream.ts b/packages/seroval/src/core/context/parser/stream.ts index 94548a21..a7093c60 100644 --- a/packages/seroval/src/core/context/parser/stream.ts +++ b/packages/seroval/src/core/context/parser/stream.ts @@ -2,7 +2,9 @@ import type { BigIntTypedArrayValue, TypedArrayValue } from '../../../types'; import UnsupportedTypeError from '../../UnsupportedTypeError'; import { createArrayBufferNode, + createAsyncIteratorFactoryInstanceNode, createDateNode, + createIteratorFactoryInstanceNode, createPluginNode, createRegExpNode, } from '../../base-primitives'; @@ -13,16 +15,15 @@ import { SerovalNodeType, UNIVERSAL_SENTINEL } from '../../constants'; import { createRequestOptions, createResponseOptions } from '../../utils/constructors'; import { NULL_NODE } from '../../literals'; import { serializeString } from '../../string'; -import { - SerovalObjectRecordSpecialKey, - type SerovalNode, - type SerovalObjectRecordKey, - type SerovalObjectRecordNode, - type SerovalPluginNode, - type SerovalPromiseConstructorNode, - type SerovalReadableStreamConstructorNode, - type SerovalRequestNode, - type SerovalResponseNode, +import type { + SerovalNode, + SerovalObjectRecordKey, + SerovalObjectRecordNode, + SerovalPluginNode, + SerovalPromiseConstructorNode, + SerovalReadableStreamConstructorNode, + SerovalRequestNode, + SerovalResponseNode, } from '../../types'; import { createDOMExceptionNode, createURLNode, createURLSearchParamsNode } from '../../web-api'; import { asyncIteratorToReadableStream, iteratorToSequence } from '../../utils/iterator-to-sequence'; @@ -105,15 +106,29 @@ export default abstract class BaseStreamParserContext extends BaseSyncParserCont // Check special properties, symbols in this case if (this.features & Feature.Symbol) { if (Symbol.iterator in properties) { - keyNodes.push(SerovalObjectRecordSpecialKey.SymbolIterator); + keyNodes.push( + this.parseWKSymbol(Symbol.iterator), + ); valueNodes.push( - this.parse(iteratorToSequence(properties as Iterable)), + createIteratorFactoryInstanceNode( + this.parseIteratorFactory(), + this.parse( + iteratorToSequence(properties as Iterable), + ), + ), ); } if (Symbol.asyncIterator in properties) { - keyNodes.push(SerovalObjectRecordSpecialKey.SymbolAsyncIterator); + keyNodes.push( + this.parseWKSymbol(Symbol.asyncIterator), + ); valueNodes.push( - this.parse(asyncIteratorToReadableStream(properties as AsyncIterable)), + createAsyncIteratorFactoryInstanceNode( + this.parseAsyncIteratorFactory(), + this.parse( + asyncIteratorToReadableStream(properties as AsyncIterable), + ), + ), ); } } @@ -145,7 +160,6 @@ export default abstract class BaseStreamParserContext extends BaseSyncParserCont f: undefined, b: undefined, o: undefined, - x: undefined, }, false); this.popPendingState(); } else { @@ -164,7 +178,6 @@ export default abstract class BaseStreamParserContext extends BaseSyncParserCont f: parsed, b: undefined, o: undefined, - x: undefined, }, false); this.pushReadableStreamReader(id, reader); } @@ -188,7 +201,6 @@ export default abstract class BaseStreamParserContext extends BaseSyncParserCont f: parsed, b: undefined, o: undefined, - x: undefined, }, false); this.popPendingState(); } @@ -218,7 +230,6 @@ export default abstract class BaseStreamParserContext extends BaseSyncParserCont f: undefined, b: undefined, o: undefined, - x: undefined, }; } @@ -241,7 +252,6 @@ export default abstract class BaseStreamParserContext extends BaseSyncParserCont a: undefined, b: undefined, o: undefined, - x: undefined, }; } @@ -267,7 +277,6 @@ export default abstract class BaseStreamParserContext extends BaseSyncParserCont ], b: undefined, o: undefined, - x: undefined, }; } @@ -292,7 +301,6 @@ export default abstract class BaseStreamParserContext extends BaseSyncParserCont f: parsed, b: undefined, o: undefined, - x: undefined, }, false); this.popPendingState(); } @@ -314,7 +322,6 @@ export default abstract class BaseStreamParserContext extends BaseSyncParserCont f: parsed, b: undefined, o: undefined, - x: undefined, }, false); this.popPendingState(); } @@ -335,7 +342,6 @@ export default abstract class BaseStreamParserContext extends BaseSyncParserCont f: undefined, b: undefined, o: undefined, - x: undefined, }; } diff --git a/packages/seroval/src/core/context/parser/sync.ts b/packages/seroval/src/core/context/parser/sync.ts index 476160a8..b4b4c267 100644 --- a/packages/seroval/src/core/context/parser/sync.ts +++ b/packages/seroval/src/core/context/parser/sync.ts @@ -12,6 +12,7 @@ import { createDataViewNode, createDateNode, createErrorNode, + createIteratorFactoryInstanceNode, createNumberNode, createPluginNode, createRegExpNode, @@ -39,7 +40,6 @@ import { BaseParserContext } from '../parser'; import { hasReferenceID } from '../../reference'; import { getErrorOptions } from '../../utils/error'; import { serializeString } from '../../string'; -import { SerovalObjectRecordSpecialKey } from '../../types'; import type { SerovalBoxedNode, SerovalArrayNode, @@ -117,8 +117,17 @@ export default abstract class BaseSyncParserContext extends BaseParserContext { // Check special properties, symbols in this case if (this.features & Feature.Symbol) { if (Symbol.iterator in properties) { - keyNodes.push(SerovalObjectRecordSpecialKey.SymbolIterator); - valueNodes.push(this.parse(iteratorToSequence(properties as Iterable))); + keyNodes.push( + this.parseWKSymbol(Symbol.iterator), + ); + valueNodes.push( + createIteratorFactoryInstanceNode( + this.parseIteratorFactory(), + this.parse( + iteratorToSequence(properties as Iterable), + ), + ), + ); } } return { @@ -264,7 +273,6 @@ export default abstract class BaseSyncParserContext extends BaseParserContext { f: undefined, b: undefined, o: undefined, - x: undefined, }; } @@ -289,7 +297,6 @@ export default abstract class BaseSyncParserContext extends BaseParserContext { f: undefined, b: undefined, o: undefined, - x: undefined, }; } diff --git a/packages/seroval/src/core/context/serializer.ts b/packages/seroval/src/core/context/serializer.ts index 853634a5..b164187c 100644 --- a/packages/seroval/src/core/context/serializer.ts +++ b/packages/seroval/src/core/context/serializer.ts @@ -9,7 +9,6 @@ import { import { createEffectfulFunction, createFunction } from '../utils/function-string'; import { REFERENCES_KEY } from '../keys'; import type { Plugin, PluginAccessOptions, SerovalMode } from '../plugin'; -import { SpecialReference } from '../special-reference'; import type { SerovalArrayNode, SerovalIndexedValueNode, @@ -52,11 +51,10 @@ import type { SerovalReadableStreamErrorNode, SerovalReadableStreamCloseNode, SerovalMapSentinelNode, - SerovalIteratorNode, - SerovalAsyncIteratorNode, -} from '../types'; -import { - SerovalObjectRecordSpecialKey, + SerovalIteratorFactoryInstanceNode, + SerovalIteratorFactoryNode, + SerovalAsyncIteratorFactoryInstanceNode, + SerovalAsyncIteratorFactoryNode, } from '../types'; import { isValidIdentifier } from '../utils/is-valid-identifier'; @@ -440,60 +438,25 @@ export default abstract class BaseSerializerContext implements PluginAccessOptio key: SerovalObjectRecordKey, val: SerovalNode, ): string { - // Only reason this is a switch is so that - // in the future, maybe other Symbols are going - // to be introduced and/or has merit to be added - // E.g. Symbol.asyncIterator - switch (key) { - case SerovalObjectRecordSpecialKey.SymbolIterator: - if ( - source.x - && source.x[SpecialReference.SymbolIterator] - && source.x[SpecialReference.IteratorFactory] - ) { - const serialKey = '[' + this.serialize(source.x[SpecialReference.SymbolIterator]) + ']:'; - const parent = this.stack; - this.stack = []; - const serialized = this.serialize(val); - this.stack = parent; - const constructor = this.serialize(source.x[SpecialReference.IteratorFactory]); - return serialKey + '(' + constructor + ')(' + serialized + ')'; - } - return ''; - case SerovalObjectRecordSpecialKey.SymbolAsyncIterator: - if ( - source.x - && source.x[SpecialReference.SymbolAsyncIterator] - && source.x[SpecialReference.AsyncIteratorFactory] - ) { - const serialKey = '[' + this.serialize(source.x[SpecialReference.SymbolAsyncIterator]) + ']:'; - const parent = this.stack; - this.stack = []; - const serialized = this.serialize(val); - this.stack = parent; - const constructor = this.serialize(source.x[SpecialReference.AsyncIteratorFactory]); - return serialKey + '(' + constructor + ')(' + serialized + ')'; + if (typeof key === 'string') { + const check = Number(key); + // Test if key is a valid number or JS identifier + // so that we don't have to serialize the key and wrap with brackets + const isIdentifier = check >= 0 || isValidIdentifier(key); + if (this.isIndexedValueInStack(val)) { + const refParam = this.getRefParam((val as SerovalIndexedValueNode).i); + this.markRef(source.i); + // eslint-disable-next-line no-self-compare + if (isIdentifier && check !== check) { + this.createObjectAssign(source.i, key, refParam); + } else { + this.createArrayAssign(source.i, isIdentifier ? key : ('"' + key + '"'), refParam); } return ''; - default: { - const check = Number(key); - // Test if key is a valid number or JS identifier - // so that we don't have to serialize the key and wrap with brackets - const isIdentifier = check >= 0 || isValidIdentifier(key); - if (this.isIndexedValueInStack(val)) { - const refParam = this.getRefParam((val as SerovalIndexedValueNode).i); - this.markRef(source.i); - // eslint-disable-next-line no-self-compare - 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 (isIdentifier ? key : ('"' + key + '"')) + ':' + this.serialize(val); } + return '[' + this.serialize(key) + ']:' + this.serialize(val); } protected serializeProperties( @@ -541,71 +504,42 @@ export default abstract class BaseSerializerContext implements PluginAccessOptio key: SerovalObjectRecordKey, value: SerovalNode, ): void { - switch (key) { - case SerovalObjectRecordSpecialKey.SymbolIterator: - if ( - source.x - && source.x[SpecialReference.IteratorFactory] - && source.x[SpecialReference.SymbolIterator] - ) { - 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(source.x[SpecialReference.SymbolIterator]), - '(' + this.serialize(source.x[SpecialReference.IteratorFactory]) + ')(' + serialized + ')', - ); - this.assignments = parentAssignment; - } - break; - case SerovalObjectRecordSpecialKey.SymbolAsyncIterator: - if ( - source.x - && source.x[SpecialReference.AsyncIteratorFactory] - && source.x[SpecialReference.SymbolAsyncIterator] - ) { - 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(source.x[SpecialReference.SymbolAsyncIterator]), - '(' + this.serialize(source.x[SpecialReference.AsyncIteratorFactory]) + ')(' + serialized + ')', - ); - this.assignments = parentAssignment; + if (typeof key === 'string') { + const serialized = this.serialize(value); + const check = Number(key); + // Test if key is a valid number or JS identifier + // so that we don't have to serialize the key and wrap with brackets + const isIdentifier = check >= 0 || isValidIdentifier(key); + if (this.isIndexedValueInStack(value)) { + // eslint-disable-next-line no-self-compare + if (isIdentifier && check !== check) { + this.createObjectAssign(source.i, key, serialized); + } else { + this.createArrayAssign(source.i, isIdentifier ? key : ('"' + key + '"'), serialized); } - break; - default: { - const serialized = this.serialize(value); - const check = Number(key); - // Test if key is a valid number or JS identifier - // so that we don't have to serialize the key and wrap with brackets - const isIdentifier = check >= 0 || isValidIdentifier(key); - if (this.isIndexedValueInStack(value)) { - // eslint-disable-next-line no-self-compare - if (isIdentifier && check !== check) { - this.createObjectAssign(source.i, key, serialized); - } else { - this.createArrayAssign(source.i, isIdentifier ? key : ('"' + key + '"'), serialized); - } + } else { + const parentAssignment = this.assignments; + this.assignments = mainAssignments; + if (isIdentifier) { + this.createObjectAssign(source.i, key, serialized); } else { - const parentAssignment = this.assignments; - this.assignments = mainAssignments; - if (isIdentifier) { - this.createObjectAssign(source.i, key, serialized); - } else { - this.createArrayAssign(source.i, isIdentifier ? key : ('"' + key + '"'), serialized); - } - this.assignments = parentAssignment; + this.createArrayAssign(source.i, isIdentifier ? key : ('"' + key + '"'), serialized); } + this.assignments = parentAssignment; } + } 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; } } @@ -766,7 +700,7 @@ export default abstract class BaseSerializerContext implements PluginAccessOptio let serialized = MAP_CONSTRUCTOR; const size = node.e.s; const id = node.i; - const sentinel = node.x[SpecialReference.Sentinel]; + const sentinel = node.f; const sentinelID = this.getRefParam(sentinel.i); if (size) { const keys = node.e.k; @@ -1060,7 +994,7 @@ export default abstract class BaseSerializerContext implements PluginAccessOptio ); } - protected serializeIterator(node: SerovalIteratorNode): string { + protected serializeIteratorFactory(node: SerovalIteratorFactoryNode): string { return this.assignIndexedValue( node.i, createFunction( @@ -1069,14 +1003,20 @@ export default abstract class BaseSerializerContext implements PluginAccessOptio createFunction( this.features, ['i', 'c', 'd', 't'], - '(i=0,t={[' + this.serialize(node.x[SpecialReference.SymbolIterator]) + ']:' + createFunction(this.features, [], 't') + ',' + '(i=0,t={[' + this.serialize(node.f) + ']:' + createFunction(this.features, [], 't') + ',' + 'next:' + createEffectfulFunction(this.features, [], 'if(i>s.d)return{done:!0,value:void 0};c=i++,d=s.v[c];if(c===s.t)throw d;return{done:c===s.d,value:d}') + '})', ), ), ); } - protected serializeAsyncIterator(node: SerovalAsyncIteratorNode): string { + protected serializeIteratorFactoryInstance( + node: SerovalIteratorFactoryInstanceNode, + ): string { + return '(' + this.serialize(node.a[0]) + ')(' + this.serialize(node.a[1]) + ')'; + } + + protected serializeAsyncIteratorFactory(node: SerovalAsyncIteratorFactoryNode): string { return this.assignIndexedValue( node.i, createFunction( @@ -1085,7 +1025,7 @@ export default abstract class BaseSerializerContext implements PluginAccessOptio createFunction( this.features, ['i', 't'], - '(i=0,t={[' + this.serialize(node.x[SpecialReference.SymbolAsyncIterator]) + ']:' + createFunction(this.features, [], 't') + ',' + '(i=0,t={[' + this.serialize(node.f) + ']:' + createFunction(this.features, [], 't') + ',' + 'next:' + createFunction( this.features, [], @@ -1100,6 +1040,12 @@ export default abstract class BaseSerializerContext implements PluginAccessOptio ); } + protected serializeAsyncIteratorFactoryInstance( + node: SerovalAsyncIteratorFactoryInstanceNode, + ): string { + return '(' + this.serialize(node.a[0]) + ')(' + this.serialize(node.a[1]) + ')'; + } + serialize(node: SerovalNode): string { switch (node.t) { case SerovalNodeType.Constant: @@ -1186,9 +1132,15 @@ export default abstract class BaseSerializerContext implements PluginAccessOptio case SerovalNodeType.MapSentinel: return this.serializeMapSentinel(node); case SerovalNodeType.IteratorFactory: - return this.serializeIterator(node); + return this.serializeIteratorFactory(node); + case SerovalNodeType.IteratorFactoryInstance: + return this.serializeIteratorFactoryInstance(node); case SerovalNodeType.AsyncIteratorFactory: - return this.serializeAsyncIterator(node); + return this.serializeAsyncIteratorFactory(node); + case SerovalNodeType.AsyncIteratorFactoryInstance: + return this.serializeAsyncIteratorFactoryInstance(node); + case SerovalNodeType.ReadableStream: + case SerovalNodeType.ReadableStreamFactory: default: throw new Error('invariant'); } diff --git a/packages/seroval/src/core/cross/serializer.ts b/packages/seroval/src/core/cross/serializer.ts index b9e80e9f..d206db86 100644 --- a/packages/seroval/src/core/cross/serializer.ts +++ b/packages/seroval/src/core/cross/serializer.ts @@ -7,7 +7,7 @@ import type { SerovalReadableStreamErrorNode, SerovalReadableStreamConstructorNode, SerovalNode, - SerovalAsyncIteratorNode, + SerovalAsyncIteratorFactoryNode, } from '../types'; import { GLOBAL_CONTEXT_PROMISE_REJECT, @@ -26,7 +26,6 @@ import type { SerovalMode } from '../plugin'; import { serializeString } from '../string'; import type { CrossContextOptions } from './parser'; import { createEffectfulFunction, createFunction } from '../utils/function-string'; -import { SpecialReference } from '../special-reference'; export interface CrossSerializerContextOptions extends BaseSerializerContextOptions, CrossContextOptions { @@ -98,7 +97,7 @@ export default class CrossSerializerContext extends BaseSerializerContext { return GLOBAL_CONTEXT_API + '.' + GLOBAL_CONTEXT_STREAM_CLOSE + '(' + this.getRefParam(node.i) + ')'; } - protected serializeAsyncIterator(node: SerovalAsyncIteratorNode): string { + protected serializeAsyncIteratorFactory(node: SerovalAsyncIteratorFactoryNode): string { return this.assignIndexedValue( node.i, createFunction( @@ -107,7 +106,7 @@ export default class CrossSerializerContext extends BaseSerializerContext { createFunction( this.features, ['b'], - '(b=s.tee(),s=b[0],b=b[1].getReader(),{[' + this.serialize(node.x[SpecialReference.SymbolAsyncIterator]) + ']:' + createFunction(this.features, [], 'this') + ',' + '(b=s.tee(),s=b[0],b=b[1].getReader(),{[' + this.serialize(node.f) + ']:' + createFunction(this.features, [], 'this') + ',' + 'next:' + createFunction( this.features, [], diff --git a/packages/seroval/src/core/literals.ts b/packages/seroval/src/core/literals.ts index 3cc14314..8963c81c 100644 --- a/packages/seroval/src/core/literals.ts +++ b/packages/seroval/src/core/literals.ts @@ -15,7 +15,6 @@ function createConstantNode(value: SerovalConstant): SerovalConstantNode { f: undefined, b: undefined, o: undefined, - x: undefined, }; } diff --git a/packages/seroval/src/core/special-reference.ts b/packages/seroval/src/core/special-reference.ts index b70ae2ba..ed12b8f9 100644 --- a/packages/seroval/src/core/special-reference.ts +++ b/packages/seroval/src/core/special-reference.ts @@ -4,10 +4,13 @@ export const ITERATOR = {}; export const ASYNC_ITERATOR = {}; +export const READABLE_STREAM = {}; + export const enum SpecialReference { Sentinel = 0, SymbolIterator = 1, IteratorFactory = 2, SymbolAsyncIterator = 3, AsyncIteratorFactory = 4, + ReadableStreamFactory = 5, } diff --git a/packages/seroval/src/core/types.ts b/packages/seroval/src/core/types.ts index 31a7ced2..bad0eef8 100644 --- a/packages/seroval/src/core/types.ts +++ b/packages/seroval/src/core/types.ts @@ -5,7 +5,6 @@ import type { Symbols, ErrorConstructorTag, } from './constants'; -import type { SpecialReference } from './special-reference'; export interface SerovalBaseNode { // Type of the node @@ -32,22 +31,11 @@ export interface SerovalBaseNode { b: number | undefined; // object flag o: SerovalObjectFlags | undefined; - // x - x: SerovalX | undefined; -} - -export type SerovalX = { - [key in SpecialReference]?: SerovalNode | undefined; -}; - -export const enum SerovalObjectRecordSpecialKey { - SymbolIterator = 0, - SymbolAsyncIterator = 1, } export type SerovalObjectRecordKey = | string - | SerovalObjectRecordSpecialKey; + | SerovalNode; export interface SerovalPlainRecordNode { k: string[]; @@ -169,16 +157,12 @@ export interface SerovalSetNode extends SerovalBaseNode { a: SerovalNode[]; } -export interface SerovalMapX extends SerovalX { - [SpecialReference.Sentinel]: SerovalMapSentinelNode | SerovalIndexedValueNode; -} - export interface SerovalMapNode extends SerovalBaseNode { t: SerovalNodeType.Map; i: number; // key/value pairs e: SerovalMapRecordNode; - x: SerovalMapX; + f: SerovalMapSentinelNode | SerovalIndexedValueNode; } export interface SerovalArrayNode extends SerovalBaseNode { @@ -191,27 +175,12 @@ export interface SerovalArrayNode extends SerovalBaseNode { o: SerovalObjectFlags; } -export interface SerovalObjectX extends SerovalX { - [SpecialReference.SymbolIterator]: SerovalNodeWithID | undefined; - [SpecialReference.IteratorFactory]: SerovalNodeWithID | undefined; - [SpecialReference.SymbolAsyncIterator]: SerovalNodeWithID | undefined; - [SpecialReference.AsyncIteratorFactory]: SerovalNodeWithID | undefined; -} - export interface SerovalObjectNode extends SerovalBaseNode { t: SerovalNodeType.Object; // key/value pairs p: SerovalObjectRecordNode; i: number; o: SerovalObjectFlags; - x: SerovalObjectX; -} - -export interface SerovalNullConstructorX extends SerovalX { - [SpecialReference.SymbolIterator]: SerovalNodeWithID | undefined; - [SpecialReference.IteratorFactory]: SerovalNodeWithID | undefined; - [SpecialReference.SymbolAsyncIterator]: SerovalNodeWithID | undefined; - [SpecialReference.IteratorFactory]: SerovalNodeWithID | undefined; } export interface SerovalNullConstructorNode extends SerovalBaseNode { @@ -220,7 +189,6 @@ export interface SerovalNullConstructorNode extends SerovalBaseNode { p: SerovalObjectRecordNode; i: number; o: SerovalObjectFlags; - x: SerovalNullConstructorX; } export interface SerovalPromiseNode extends SerovalBaseNode { @@ -426,24 +394,44 @@ export interface SerovalMapSentinelNode extends SerovalBaseNode { i: number; } -export interface SerovalIteratorX extends SerovalX { - [SpecialReference.SymbolIterator]: SerovalNodeWithID; -} - -export interface SerovalIteratorNode extends SerovalBaseNode { +export interface SerovalIteratorFactoryNode extends SerovalBaseNode { t: SerovalNodeType.IteratorFactory; i: number; - x: SerovalIteratorX; + f: SerovalNode; } -export interface SerovalAsyncIteratorX extends SerovalX { - [SpecialReference.SymbolAsyncIterator]: SerovalNodeWithID; +export interface SerovalIteratorFactoryInstanceNode extends SerovalBaseNode { + t: SerovalNodeType.IteratorFactoryInstance; + a: [ + instance: SerovalNode, + sequence: SerovalNode, + ]; } -export interface SerovalAsyncIteratorNode extends SerovalBaseNode { +export interface SerovalAsyncIteratorFactoryNode extends SerovalBaseNode { t: SerovalNodeType.AsyncIteratorFactory; i: number; - x: SerovalAsyncIteratorX; + f: SerovalNode; +} + +export interface SerovalAsyncIteratorFactoryInstanceNode extends SerovalBaseNode { + t: SerovalNodeType.AsyncIteratorFactoryInstance; + a: [ + instance: SerovalNode, + sequence: SerovalNode, + ]; +} + +export interface SerovalReadableStreamNode extends SerovalBaseNode { + t: SerovalNodeType.ReadableStream; + i: number; + f: SerovalReadableStreamFactoryNode | SerovalIndexedValueNode; +} + +export interface SerovalReadableStreamFactoryNode extends SerovalBaseNode { + t: SerovalNodeType.ReadableStreamFactory; + i: number; + f: SerovalNode; } export type SerovalSyncNode = @@ -474,8 +462,10 @@ export type SerovalSyncNode = | SerovalDOMExceptionNode | SerovalPluginNode | SerovalMapSentinelNode - | SerovalIteratorNode - | SerovalAsyncIteratorNode; + | SerovalIteratorFactoryNode + | SerovalIteratorFactoryInstanceNode + | SerovalAsyncIteratorFactoryNode + | SerovalAsyncIteratorFactoryInstanceNode; export type SerovalAsyncNode = | SerovalPromiseNode @@ -489,7 +479,9 @@ export type SerovalAsyncNode = | SerovalReadableStreamCloseNode | SerovalReadableStreamErrorNode | SerovalRequestNode - | SerovalResponseNode; + | SerovalResponseNode + | SerovalReadableStreamNode + | SerovalReadableStreamFactoryNode; export type SerovalNode = | SerovalSyncNode diff --git a/packages/seroval/src/core/utils/iterator-to-sequence.ts b/packages/seroval/src/core/utils/iterator-to-sequence.ts index 38d7c157..92d4a348 100644 --- a/packages/seroval/src/core/utils/iterator-to-sequence.ts +++ b/packages/seroval/src/core/utils/iterator-to-sequence.ts @@ -187,3 +187,36 @@ export function readableStreamToAsyncIterator( }; }; } + +export async function readableStreamToSequence( + stream: ReadableStream, +): Promise { + const values: unknown[] = []; + let throwsAt = -1; + let doneAt = -1; + + const iterator = stream.getReader(); + + async function push(): Promise { + try { + const value = await iterator.read(); + values.push(value.value); + if (value.done) { + doneAt = values.length - 1; + } else { + await push(); + } + } catch (error) { + throwsAt = values.length; + values.push(error); + } + } + + await push(); + + return { + v: values, + t: throwsAt, + d: doneAt, + }; +} diff --git a/packages/seroval/src/core/web-api.ts b/packages/seroval/src/core/web-api.ts index df044198..e0cad5c1 100644 --- a/packages/seroval/src/core/web-api.ts +++ b/packages/seroval/src/core/web-api.ts @@ -26,7 +26,6 @@ export function createURLNode( a: undefined, b: undefined, o: undefined, - x: undefined, }; } @@ -47,7 +46,6 @@ export function createURLSearchParamsNode( a: undefined, b: undefined, o: undefined, - x: undefined, }; } @@ -68,7 +66,6 @@ export function createDOMExceptionNode( f: undefined, b: undefined, o: undefined, - x: undefined, }; } @@ -90,7 +87,6 @@ export function createEventNode( f: options, b: undefined, o: undefined, - x: undefined, }; } @@ -112,6 +108,5 @@ export function createCustomEVentNode( f: options, b: undefined, o: undefined, - x: undefined, }; } diff --git a/packages/seroval/test/__snapshots__/async-iterable.test.ts.snap b/packages/seroval/test/__snapshots__/async-iterable.test.ts.snap index b1d8fc15..00173f71 100644 --- a/packages/seroval/test/__snapshots__/async-iterable.test.ts.snap +++ b/packages/seroval/test/__snapshots__/async-iterable.test.ts.snap @@ -2,52 +2,52 @@ exports[`AsyncIterable > compat > should use function expressions instead of arrow functions. 1`] = `"(function(h){return ({title:\\"Hello World\\",[h=Symbol.asyncIterator]:(function(s){return function(i,t){return (i=0,t={[h]:function(){return t},next:function(){return Promise.resolve().then(function(c,d){if(i>s.d)return{done:!0,value:void 0};c=i++,d=s.v[c];if(c===s.t)throw d;return{done:c===s.d,value:d}})}})}})({v:[1,2,3,void 0],t:-1,d:3})})})()"`; -exports[`AsyncIterable > compat#toJSONAsync > should use function expression instead of arrow functions. 1`] = `"{\\"t\\":{\\"t\\":10,\\"i\\":0,\\"p\\":{\\"k\\":[\\"title\\",1],\\"v\\":[{\\"t\\":1,\\"s\\":\\"Hello World\\"},{\\"t\\":10,\\"i\\":1,\\"p\\":{\\"k\\":[\\"v\\",\\"t\\",\\"d\\"],\\"v\\":[{\\"t\\":9,\\"i\\":2,\\"l\\":4,\\"a\\":[{\\"t\\":0,\\"s\\":1},{\\"t\\":0,\\"s\\":2},{\\"t\\":0,\\"s\\":3},{\\"t\\":2,\\"s\\":1}],\\"o\\":0},{\\"t\\":0,\\"s\\":-1},{\\"t\\":0,\\"s\\":3}],\\"s\\":3},\\"o\\":0,\\"x\\":{}}],\\"s\\":2},\\"o\\":0,\\"x\\":{\\"3\\":{\\"t\\":17,\\"i\\":3,\\"s\\":0},\\"4\\":{\\"t\\":43,\\"i\\":4,\\"x\\":{\\"3\\":{\\"t\\":4,\\"i\\":3}}}}},\\"f\\":16379,\\"m\\":[3]}"`; +exports[`AsyncIterable > compat#toJSONAsync > should use function expression instead of arrow functions. 1`] = `"{\\"t\\":{\\"t\\":10,\\"i\\":0,\\"p\\":{\\"k\\":[\\"title\\",{\\"t\\":17,\\"i\\":1,\\"s\\":0}],\\"v\\":[{\\"t\\":1,\\"s\\":\\"Hello World\\"},{\\"t\\":45,\\"a\\":[{\\"t\\":44,\\"i\\":2,\\"f\\":{\\"t\\":4,\\"i\\":1}},{\\"t\\":10,\\"i\\":3,\\"p\\":{\\"k\\":[\\"v\\",\\"t\\",\\"d\\"],\\"v\\":[{\\"t\\":9,\\"i\\":4,\\"l\\":4,\\"a\\":[{\\"t\\":0,\\"s\\":1},{\\"t\\":0,\\"s\\":2},{\\"t\\":0,\\"s\\":3},{\\"t\\":2,\\"s\\":1}],\\"o\\":0},{\\"t\\":0,\\"s\\":-1},{\\"t\\":0,\\"s\\":3}],\\"s\\":3},\\"o\\":0}]}],\\"s\\":2},\\"o\\":0},\\"f\\":16379,\\"m\\":[1]}"`; exports[`AsyncIterable > compat#toJSONAsync > should use function expression instead of arrow functions. 2`] = `"(function(h){return ({title:\\"Hello World\\",[h=Symbol.asyncIterator]:(function(s){return function(i,t){return (i=0,t={[h]:function(){return t},next:function(){return Promise.resolve().then(function(c,d){if(i>s.d)return{done:!0,value:void 0};c=i++,d=s.v[c];if(c===s.t)throw d;return{done:c===s.d,value:d}})}})}})({v:[1,2,3,void 0],t:-1,d:3})})})()"`; -exports[`AsyncIterable > crossSerializeAsync > scoped > supports AsyncIterables 1`] = `"($R=>$R[0]={title:\\"Hello World\\",[$R[3]=Symbol.asyncIterator]:($R[4]=s=>b=>(b=s.tee(),s=b[0],b=b[1].getReader(),{[$R[3]]:()=>this,next:()=>b.read().then(d=>{if(d.done)return{done:!0,value:void 0};d=d.value;if(d[0]===1)throw d[1];return{done:d[0]===2,value:d[1]}})}))($R[1]={v:$R[2]=[1,2,3,void 0],t:-1,d:3})})($R[\\"example\\"])"`; +exports[`AsyncIterable > crossSerializeAsync > scoped > supports AsyncIterables 1`] = `"($R=>$R[0]={title:\\"Hello World\\",[$R[1]=Symbol.asyncIterator]:($R[2]=s=>b=>(b=s.tee(),s=b[0],b=b[1].getReader(),{[$R[1]]:()=>this,next:()=>b.read().then(d=>{if(d.done)return{done:!0,value:void 0};d=d.value;if(d[0]===1)throw d[1];return{done:d[0]===2,value:d[1]}})}))($R[3]={v:$R[4]=[1,2,3,void 0],t:-1,d:3})})($R[\\"example\\"])"`; -exports[`AsyncIterable > crossSerializeAsync > supports AsyncIterables 1`] = `"$R[0]={title:\\"Hello World\\",[$R[3]=Symbol.asyncIterator]:($R[4]=s=>b=>(b=s.tee(),s=b[0],b=b[1].getReader(),{[$R[3]]:()=>this,next:()=>b.read().then(d=>{if(d.done)return{done:!0,value:void 0};d=d.value;if(d[0]===1)throw d[1];return{done:d[0]===2,value:d[1]}})}))($R[1]={v:$R[2]=[1,2,3,void 0],t:-1,d:3})}"`; +exports[`AsyncIterable > crossSerializeAsync > supports AsyncIterables 1`] = `"$R[0]={title:\\"Hello World\\",[$R[1]=Symbol.asyncIterator]:($R[2]=s=>b=>(b=s.tee(),s=b[0],b=b[1].getReader(),{[$R[1]]:()=>this,next:()=>b.read().then(d=>{if(d.done)return{done:!0,value:void 0};d=d.value;if(d[0]===1)throw d[1];return{done:d[0]===2,value:d[1]}})}))($R[3]={v:$R[4]=[1,2,3,void 0],t:-1,d:3})}"`; -exports[`AsyncIterable > crossSerializeStream > scoped > supports AsyncIterables 1`] = `"($R=>$R[0]={title:\\"Hello World\\",[$R[2]=Symbol.asyncIterator]:($R[3]=s=>b=>(b=s.tee(),s=b[0],b=b[1].getReader(),{[$R[2]]:()=>this,next:()=>b.read().then(d=>{if(d.done)return{done:!0,value:void 0};d=d.value;if(d[0]===1)throw d[1];return{done:d[0]===2,value:d[1]}})}))($R[1]=_$.S())})($R[\\"example\\"])"`; +exports[`AsyncIterable > crossSerializeStream > scoped > supports AsyncIterables 1`] = `"($R=>$R[0]={title:\\"Hello World\\",[$R[1]=Symbol.asyncIterator]:($R[2]=s=>b=>(b=s.tee(),s=b[0],b=b[1].getReader(),{[$R[1]]:()=>this,next:()=>b.read().then(d=>{if(d.done)return{done:!0,value:void 0};d=d.value;if(d[0]===1)throw d[1];return{done:d[0]===2,value:d[1]}})}))($R[3]=_$.S())})($R[\\"example\\"])"`; -exports[`AsyncIterable > crossSerializeStream > scoped > supports AsyncIterables 2`] = `"($R=>_$.Se($R[1],$R[4]=[0,1]))($R[\\"example\\"])"`; +exports[`AsyncIterable > crossSerializeStream > scoped > supports AsyncIterables 2`] = `"($R=>_$.Se($R[3],$R[4]=[0,1]))($R[\\"example\\"])"`; -exports[`AsyncIterable > crossSerializeStream > scoped > supports AsyncIterables 3`] = `"($R=>_$.Se($R[1],$R[5]=[0,2]))($R[\\"example\\"])"`; +exports[`AsyncIterable > crossSerializeStream > scoped > supports AsyncIterables 3`] = `"($R=>_$.Se($R[3],$R[5]=[0,2]))($R[\\"example\\"])"`; -exports[`AsyncIterable > crossSerializeStream > scoped > supports AsyncIterables 4`] = `"($R=>_$.Se($R[1],$R[6]=[0,3]))($R[\\"example\\"])"`; +exports[`AsyncIterable > crossSerializeStream > scoped > supports AsyncIterables 4`] = `"($R=>_$.Se($R[3],$R[6]=[0,3]))($R[\\"example\\"])"`; -exports[`AsyncIterable > crossSerializeStream > scoped > supports AsyncIterables 5`] = `"($R=>_$.Se($R[1],$R[7]=[2,void 0]))($R[\\"example\\"])"`; +exports[`AsyncIterable > crossSerializeStream > scoped > supports AsyncIterables 5`] = `"($R=>_$.Se($R[3],$R[7]=[2,void 0]))($R[\\"example\\"])"`; -exports[`AsyncIterable > crossSerializeStream > scoped > supports AsyncIterables 6`] = `"($R=>_$.Sc($R[1]))($R[\\"example\\"])"`; +exports[`AsyncIterable > crossSerializeStream > scoped > supports AsyncIterables 6`] = `"($R=>_$.Sc($R[3]))($R[\\"example\\"])"`; -exports[`AsyncIterable > crossSerializeStream > supports AsyncIterables 1`] = `"$R[0]={title:\\"Hello World\\",[$R[2]=Symbol.asyncIterator]:($R[3]=s=>b=>(b=s.tee(),s=b[0],b=b[1].getReader(),{[$R[2]]:()=>this,next:()=>b.read().then(d=>{if(d.done)return{done:!0,value:void 0};d=d.value;if(d[0]===1)throw d[1];return{done:d[0]===2,value:d[1]}})}))($R[1]=_$.S())}"`; +exports[`AsyncIterable > crossSerializeStream > supports AsyncIterables 1`] = `"$R[0]={title:\\"Hello World\\",[$R[1]=Symbol.asyncIterator]:($R[2]=s=>b=>(b=s.tee(),s=b[0],b=b[1].getReader(),{[$R[1]]:()=>this,next:()=>b.read().then(d=>{if(d.done)return{done:!0,value:void 0};d=d.value;if(d[0]===1)throw d[1];return{done:d[0]===2,value:d[1]}})}))($R[3]=_$.S())}"`; -exports[`AsyncIterable > crossSerializeStream > supports AsyncIterables 2`] = `"_$.Se($R[1],$R[4]=[0,1])"`; +exports[`AsyncIterable > crossSerializeStream > supports AsyncIterables 2`] = `"_$.Se($R[3],$R[4]=[0,1])"`; -exports[`AsyncIterable > crossSerializeStream > supports AsyncIterables 3`] = `"_$.Se($R[1],$R[5]=[0,2])"`; +exports[`AsyncIterable > crossSerializeStream > supports AsyncIterables 3`] = `"_$.Se($R[3],$R[5]=[0,2])"`; -exports[`AsyncIterable > crossSerializeStream > supports AsyncIterables 4`] = `"_$.Se($R[1],$R[6]=[0,3])"`; +exports[`AsyncIterable > crossSerializeStream > supports AsyncIterables 4`] = `"_$.Se($R[3],$R[6]=[0,3])"`; -exports[`AsyncIterable > crossSerializeStream > supports AsyncIterables 5`] = `"_$.Se($R[1],$R[7]=[2,void 0])"`; +exports[`AsyncIterable > crossSerializeStream > supports AsyncIterables 5`] = `"_$.Se($R[3],$R[7]=[2,void 0])"`; -exports[`AsyncIterable > crossSerializeStream > supports AsyncIterables 6`] = `"_$.Sc($R[1])"`; +exports[`AsyncIterable > crossSerializeStream > supports AsyncIterables 6`] = `"_$.Sc($R[3])"`; exports[`AsyncIterable > serializeAsync > supports AsyncIterables 1`] = `"(h=>({title:\\"Hello World\\",[h=Symbol.asyncIterator]:(s=>(i,t)=>(i=0,t={[h]:()=>t,next:()=>Promise.resolve().then((c,d)=>{if(i>s.d)return{done:!0,value:void 0};c=i++,d=s.v[c];if(c===s.t)throw d;return{done:c===s.d,value:d}})}))({v:[1,2,3,void 0],t:-1,d:3})}))()"`; -exports[`AsyncIterable > toCrossJSONAsync > supports AsyncIterables 1`] = `"{\\"t\\":10,\\"i\\":0,\\"p\\":{\\"k\\":[\\"title\\",1],\\"v\\":[{\\"t\\":1,\\"s\\":\\"Hello World\\"},{\\"t\\":10,\\"i\\":1,\\"p\\":{\\"k\\":[\\"v\\",\\"t\\",\\"d\\"],\\"v\\":[{\\"t\\":9,\\"i\\":2,\\"l\\":4,\\"a\\":[{\\"t\\":0,\\"s\\":1},{\\"t\\":0,\\"s\\":2},{\\"t\\":0,\\"s\\":3},{\\"t\\":2,\\"s\\":1}],\\"o\\":0},{\\"t\\":0,\\"s\\":-1},{\\"t\\":0,\\"s\\":3}],\\"s\\":3},\\"o\\":0,\\"x\\":{}}],\\"s\\":2},\\"o\\":0,\\"x\\":{\\"3\\":{\\"t\\":17,\\"i\\":3,\\"s\\":0},\\"4\\":{\\"t\\":43,\\"i\\":4,\\"x\\":{\\"3\\":{\\"t\\":4,\\"i\\":3}}}}}"`; +exports[`AsyncIterable > toCrossJSONAsync > supports AsyncIterables 1`] = `"{\\"t\\":10,\\"i\\":0,\\"p\\":{\\"k\\":[\\"title\\",{\\"t\\":17,\\"i\\":1,\\"s\\":0}],\\"v\\":[{\\"t\\":1,\\"s\\":\\"Hello World\\"},{\\"t\\":45,\\"a\\":[{\\"t\\":44,\\"i\\":2,\\"f\\":{\\"t\\":4,\\"i\\":1}},{\\"t\\":10,\\"i\\":3,\\"p\\":{\\"k\\":[\\"v\\",\\"t\\",\\"d\\"],\\"v\\":[{\\"t\\":9,\\"i\\":4,\\"l\\":4,\\"a\\":[{\\"t\\":0,\\"s\\":1},{\\"t\\":0,\\"s\\":2},{\\"t\\":0,\\"s\\":3},{\\"t\\":2,\\"s\\":1}],\\"o\\":0},{\\"t\\":0,\\"s\\":-1},{\\"t\\":0,\\"s\\":3}],\\"s\\":3},\\"o\\":0}]}],\\"s\\":2},\\"o\\":0}"`; -exports[`AsyncIterable > toCrossJSONStream > supports AsyncIterables 1`] = `"{\\"t\\":10,\\"i\\":0,\\"p\\":{\\"k\\":[\\"title\\",1],\\"v\\":[{\\"t\\":1,\\"s\\":\\"Hello World\\"},{\\"t\\":31,\\"i\\":1}],\\"s\\":2},\\"o\\":0,\\"x\\":{\\"3\\":{\\"t\\":17,\\"i\\":2,\\"s\\":0},\\"4\\":{\\"t\\":43,\\"i\\":3,\\"x\\":{\\"3\\":{\\"t\\":4,\\"i\\":2}}}}}"`; +exports[`AsyncIterable > toCrossJSONStream > supports AsyncIterables 1`] = `"{\\"t\\":10,\\"i\\":0,\\"p\\":{\\"k\\":[\\"title\\",{\\"t\\":17,\\"i\\":1,\\"s\\":0}],\\"v\\":[{\\"t\\":1,\\"s\\":\\"Hello World\\"},{\\"t\\":45,\\"a\\":[{\\"t\\":44,\\"i\\":2,\\"f\\":{\\"t\\":4,\\"i\\":1}},{\\"t\\":31,\\"i\\":3}]}],\\"s\\":2},\\"o\\":0}"`; -exports[`AsyncIterable > toCrossJSONStream > supports AsyncIterables 2`] = `"{\\"t\\":32,\\"i\\":1,\\"f\\":{\\"t\\":9,\\"i\\":4,\\"l\\":2,\\"a\\":[{\\"t\\":0,\\"s\\":0},{\\"t\\":0,\\"s\\":1}],\\"o\\":0}}"`; +exports[`AsyncIterable > toCrossJSONStream > supports AsyncIterables 2`] = `"{\\"t\\":32,\\"i\\":3,\\"f\\":{\\"t\\":9,\\"i\\":4,\\"l\\":2,\\"a\\":[{\\"t\\":0,\\"s\\":0},{\\"t\\":0,\\"s\\":1}],\\"o\\":0}}"`; -exports[`AsyncIterable > toCrossJSONStream > supports AsyncIterables 3`] = `"{\\"t\\":32,\\"i\\":1,\\"f\\":{\\"t\\":9,\\"i\\":5,\\"l\\":2,\\"a\\":[{\\"t\\":0,\\"s\\":0},{\\"t\\":0,\\"s\\":2}],\\"o\\":0}}"`; +exports[`AsyncIterable > toCrossJSONStream > supports AsyncIterables 3`] = `"{\\"t\\":32,\\"i\\":3,\\"f\\":{\\"t\\":9,\\"i\\":5,\\"l\\":2,\\"a\\":[{\\"t\\":0,\\"s\\":0},{\\"t\\":0,\\"s\\":2}],\\"o\\":0}}"`; -exports[`AsyncIterable > toCrossJSONStream > supports AsyncIterables 4`] = `"{\\"t\\":32,\\"i\\":1,\\"f\\":{\\"t\\":9,\\"i\\":6,\\"l\\":2,\\"a\\":[{\\"t\\":0,\\"s\\":0},{\\"t\\":0,\\"s\\":3}],\\"o\\":0}}"`; +exports[`AsyncIterable > toCrossJSONStream > supports AsyncIterables 4`] = `"{\\"t\\":32,\\"i\\":3,\\"f\\":{\\"t\\":9,\\"i\\":6,\\"l\\":2,\\"a\\":[{\\"t\\":0,\\"s\\":0},{\\"t\\":0,\\"s\\":3}],\\"o\\":0}}"`; -exports[`AsyncIterable > toCrossJSONStream > supports AsyncIterables 5`] = `"{\\"t\\":32,\\"i\\":1,\\"f\\":{\\"t\\":9,\\"i\\":7,\\"l\\":2,\\"a\\":[{\\"t\\":0,\\"s\\":2},{\\"t\\":2,\\"s\\":1}],\\"o\\":0}}"`; +exports[`AsyncIterable > toCrossJSONStream > supports AsyncIterables 5`] = `"{\\"t\\":32,\\"i\\":3,\\"f\\":{\\"t\\":9,\\"i\\":7,\\"l\\":2,\\"a\\":[{\\"t\\":0,\\"s\\":2},{\\"t\\":2,\\"s\\":1}],\\"o\\":0}}"`; -exports[`AsyncIterable > toCrossJSONStream > supports AsyncIterables 6`] = `"{\\"t\\":33,\\"i\\":1}"`; +exports[`AsyncIterable > toCrossJSONStream > supports AsyncIterables 6`] = `"{\\"t\\":33,\\"i\\":3}"`; -exports[`AsyncIterable > toJSONAsync > supports AsyncIterables 1`] = `"{\\"t\\":{\\"t\\":10,\\"i\\":0,\\"p\\":{\\"k\\":[\\"title\\",1],\\"v\\":[{\\"t\\":1,\\"s\\":\\"Hello World\\"},{\\"t\\":10,\\"i\\":1,\\"p\\":{\\"k\\":[\\"v\\",\\"t\\",\\"d\\"],\\"v\\":[{\\"t\\":9,\\"i\\":2,\\"l\\":4,\\"a\\":[{\\"t\\":0,\\"s\\":1},{\\"t\\":0,\\"s\\":2},{\\"t\\":0,\\"s\\":3},{\\"t\\":2,\\"s\\":1}],\\"o\\":0},{\\"t\\":0,\\"s\\":-1},{\\"t\\":0,\\"s\\":3}],\\"s\\":3},\\"o\\":0,\\"x\\":{}}],\\"s\\":2},\\"o\\":0,\\"x\\":{\\"3\\":{\\"t\\":17,\\"i\\":3,\\"s\\":0},\\"4\\":{\\"t\\":43,\\"i\\":4,\\"x\\":{\\"3\\":{\\"t\\":4,\\"i\\":3}}}}},\\"f\\":16383,\\"m\\":[3]}"`; +exports[`AsyncIterable > toJSONAsync > supports AsyncIterables 1`] = `"{\\"t\\":{\\"t\\":10,\\"i\\":0,\\"p\\":{\\"k\\":[\\"title\\",{\\"t\\":17,\\"i\\":1,\\"s\\":0}],\\"v\\":[{\\"t\\":1,\\"s\\":\\"Hello World\\"},{\\"t\\":45,\\"a\\":[{\\"t\\":44,\\"i\\":2,\\"f\\":{\\"t\\":4,\\"i\\":1}},{\\"t\\":10,\\"i\\":3,\\"p\\":{\\"k\\":[\\"v\\",\\"t\\",\\"d\\"],\\"v\\":[{\\"t\\":9,\\"i\\":4,\\"l\\":4,\\"a\\":[{\\"t\\":0,\\"s\\":1},{\\"t\\":0,\\"s\\":2},{\\"t\\":0,\\"s\\":3},{\\"t\\":2,\\"s\\":1}],\\"o\\":0},{\\"t\\":0,\\"s\\":-1},{\\"t\\":0,\\"s\\":3}],\\"s\\":3},\\"o\\":0}]}],\\"s\\":2},\\"o\\":0},\\"f\\":16383,\\"m\\":[1]}"`; diff --git a/packages/seroval/test/__snapshots__/frozen-object.test.ts.snap b/packages/seroval/test/__snapshots__/frozen-object.test.ts.snap index 20a2bc82..f1f4e52a 100644 --- a/packages/seroval/test/__snapshots__/frozen-object.test.ts.snap +++ b/packages/seroval/test/__snapshots__/frozen-object.test.ts.snap @@ -2,29 +2,29 @@ exports[`frozen object > crossSerialize > scoped > supports Objects 1`] = `"($R=>$R[0]={hello:\\"world\\"},Object.freeze($R[0]),$R[0])($R[\\"example\\"])"`; -exports[`frozen object > crossSerialize > scoped > supports Symbol.iterator 1`] = `"($R=>$R[0]={[$R[3]=Symbol.iterator]:($R[4]=s=>(i,c,d,t)=>(i=0,t={[$R[3]]:()=>t,next:()=>{if(i>s.d)return{done:!0,value:void 0};c=i++,d=s.v[c];if(c===s.t)throw d;return{done:c===s.d,value:d}}}))($R[1]={v:$R[2]=[1,2,3,void 0],t:-1,d:3})},Object.freeze($R[0]),$R[0])($R[\\"example\\"])"`; +exports[`frozen object > crossSerialize > scoped > supports Symbol.iterator 1`] = `"($R=>$R[0]={[$R[1]=Symbol.iterator]:($R[2]=s=>(i,c,d,t)=>(i=0,t={[$R[1]]:()=>t,next:()=>{if(i>s.d)return{done:!0,value:void 0};c=i++,d=s.v[c];if(c===s.t)throw d;return{done:c===s.d,value:d}}}))($R[3]={v:$R[4]=[1,2,3,void 0],t:-1,d:3})},Object.freeze($R[0]),$R[0])($R[\\"example\\"])"`; exports[`frozen object > crossSerialize > scoped > supports self-recursion 1`] = `"($R=>$R[0]={},$R[0].b=$R[0].a=$R[0],Object.freeze($R[0]),$R[0])($R[\\"example\\"])"`; exports[`frozen object > crossSerialize > supports Objects 1`] = `"($R[0]={hello:\\"world\\"},Object.freeze($R[0]),$R[0])"`; -exports[`frozen object > crossSerialize > supports Symbol.iterator 1`] = `"($R[0]={[$R[3]=Symbol.iterator]:($R[4]=s=>(i,c,d,t)=>(i=0,t={[$R[3]]:()=>t,next:()=>{if(i>s.d)return{done:!0,value:void 0};c=i++,d=s.v[c];if(c===s.t)throw d;return{done:c===s.d,value:d}}}))($R[1]={v:$R[2]=[1,2,3,void 0],t:-1,d:3})},Object.freeze($R[0]),$R[0])"`; +exports[`frozen object > crossSerialize > supports Symbol.iterator 1`] = `"($R[0]={[$R[1]=Symbol.iterator]:($R[2]=s=>(i,c,d,t)=>(i=0,t={[$R[1]]:()=>t,next:()=>{if(i>s.d)return{done:!0,value:void 0};c=i++,d=s.v[c];if(c===s.t)throw d;return{done:c===s.d,value:d}}}))($R[3]={v:$R[4]=[1,2,3,void 0],t:-1,d:3})},Object.freeze($R[0]),$R[0])"`; exports[`frozen object > crossSerialize > supports self-recursion 1`] = `"($R[0]={},$R[0].b=$R[0].a=$R[0],Object.freeze($R[0]),$R[0])"`; exports[`frozen object > crossSerializeAsync > scoped > supports Objects 1`] = `"($R=>$R[0]=Promise.resolve($R[1]={hello:\\"world\\"}),Object.freeze($R[1]),$R[0])($R[\\"example\\"])"`; -exports[`frozen object > crossSerializeAsync > scoped > supports Symbol.asyncIterator 1`] = `"($R=>$R[0]={[$R[3]=Symbol.asyncIterator]:($R[4]=s=>b=>(b=s.tee(),s=b[0],b=b[1].getReader(),{[$R[3]]:()=>this,next:()=>b.read().then(d=>{if(d.done)return{done:!0,value:void 0};d=d.value;if(d[0]===1)throw d[1];return{done:d[0]===2,value:d[1]}})}))($R[1]={v:$R[2]=[1,2,3,void 0],t:-1,d:3})},Object.freeze($R[0]),$R[0])($R[\\"example\\"])"`; +exports[`frozen object > crossSerializeAsync > scoped > supports Symbol.asyncIterator 1`] = `"($R=>$R[0]={[$R[1]=Symbol.asyncIterator]:($R[2]=s=>b=>(b=s.tee(),s=b[0],b=b[1].getReader(),{[$R[1]]:()=>this,next:()=>b.read().then(d=>{if(d.done)return{done:!0,value:void 0};d=d.value;if(d[0]===1)throw d[1];return{done:d[0]===2,value:d[1]}})}))($R[3]={v:$R[4]=[1,2,3,void 0],t:-1,d:3})},Object.freeze($R[0]),$R[0])($R[\\"example\\"])"`; -exports[`frozen object > crossSerializeAsync > scoped > supports Symbol.iterator 1`] = `"($R=>$R[0]=Promise.resolve($R[1]={[$R[4]=Symbol.iterator]:($R[5]=s=>(i,c,d,t)=>(i=0,t={[$R[4]]:()=>t,next:()=>{if(i>s.d)return{done:!0,value:void 0};c=i++,d=s.v[c];if(c===s.t)throw d;return{done:c===s.d,value:d}}}))($R[2]={v:$R[3]=[1,2,3,void 0],t:-1,d:3})}),Object.freeze($R[1]),$R[0])($R[\\"example\\"])"`; +exports[`frozen object > crossSerializeAsync > scoped > supports Symbol.iterator 1`] = `"($R=>$R[0]=Promise.resolve($R[1]={[$R[2]=Symbol.iterator]:($R[3]=s=>(i,c,d,t)=>(i=0,t={[$R[2]]:()=>t,next:()=>{if(i>s.d)return{done:!0,value:void 0};c=i++,d=s.v[c];if(c===s.t)throw d;return{done:c===s.d,value:d}}}))($R[4]={v:$R[5]=[1,2,3,void 0],t:-1,d:3})}),Object.freeze($R[1]),$R[0])($R[\\"example\\"])"`; exports[`frozen object > crossSerializeAsync > scoped > supports self-recursion 1`] = `"($R=>$R[0]={a:$R[1]=Promise.resolve().then(()=>$R[0]),b:$R[2]=Promise.resolve().then(()=>$R[0])},Object.freeze($R[0]),$R[0])($R[\\"example\\"])"`; exports[`frozen object > crossSerializeAsync > supports Objects 1`] = `"($R[0]=Promise.resolve($R[1]={hello:\\"world\\"}),Object.freeze($R[1]),$R[0])"`; -exports[`frozen object > crossSerializeAsync > supports Symbol.asyncIterator 1`] = `"($R[0]={[$R[3]=Symbol.asyncIterator]:($R[4]=s=>b=>(b=s.tee(),s=b[0],b=b[1].getReader(),{[$R[3]]:()=>this,next:()=>b.read().then(d=>{if(d.done)return{done:!0,value:void 0};d=d.value;if(d[0]===1)throw d[1];return{done:d[0]===2,value:d[1]}})}))($R[1]={v:$R[2]=[1,2,3,void 0],t:-1,d:3})},Object.freeze($R[0]),$R[0])"`; +exports[`frozen object > crossSerializeAsync > supports Symbol.asyncIterator 1`] = `"($R[0]={[$R[1]=Symbol.asyncIterator]:($R[2]=s=>b=>(b=s.tee(),s=b[0],b=b[1].getReader(),{[$R[1]]:()=>this,next:()=>b.read().then(d=>{if(d.done)return{done:!0,value:void 0};d=d.value;if(d[0]===1)throw d[1];return{done:d[0]===2,value:d[1]}})}))($R[3]={v:$R[4]=[1,2,3,void 0],t:-1,d:3})},Object.freeze($R[0]),$R[0])"`; -exports[`frozen object > crossSerializeAsync > supports Symbol.iterator 1`] = `"($R[0]=Promise.resolve($R[1]={[$R[4]=Symbol.iterator]:($R[5]=s=>(i,c,d,t)=>(i=0,t={[$R[4]]:()=>t,next:()=>{if(i>s.d)return{done:!0,value:void 0};c=i++,d=s.v[c];if(c===s.t)throw d;return{done:c===s.d,value:d}}}))($R[2]={v:$R[3]=[1,2,3,void 0],t:-1,d:3})}),Object.freeze($R[1]),$R[0])"`; +exports[`frozen object > crossSerializeAsync > supports Symbol.iterator 1`] = `"($R[0]=Promise.resolve($R[1]={[$R[2]=Symbol.iterator]:($R[3]=s=>(i,c,d,t)=>(i=0,t={[$R[2]]:()=>t,next:()=>{if(i>s.d)return{done:!0,value:void 0};c=i++,d=s.v[c];if(c===s.t)throw d;return{done:c===s.d,value:d}}}))($R[4]={v:$R[5]=[1,2,3,void 0],t:-1,d:3})}),Object.freeze($R[1]),$R[0])"`; exports[`frozen object > crossSerializeAsync > supports self-recursion 1`] = `"($R[0]={a:$R[1]=Promise.resolve().then(()=>$R[0]),b:$R[2]=Promise.resolve().then(()=>$R[0])},Object.freeze($R[0]),$R[0])"`; @@ -32,21 +32,21 @@ exports[`frozen object > crossSerializeStream > scoped > supports Objects 1`] = exports[`frozen object > crossSerializeStream > scoped > supports Objects 2`] = `"($R=>_$.Ps($R[0],$R[1]={hello:\\"world\\"}),Object.freeze($R[1]),$R[0])($R[\\"example\\"])"`; -exports[`frozen object > crossSerializeStream > scoped > supports Symbol.asyncIterator 1`] = `"($R=>$R[0]={[$R[2]=Symbol.asyncIterator]:($R[3]=s=>b=>(b=s.tee(),s=b[0],b=b[1].getReader(),{[$R[2]]:()=>this,next:()=>b.read().then(d=>{if(d.done)return{done:!0,value:void 0};d=d.value;if(d[0]===1)throw d[1];return{done:d[0]===2,value:d[1]}})}))($R[1]=_$.S())},Object.freeze($R[0]),$R[0])($R[\\"example\\"])"`; +exports[`frozen object > crossSerializeStream > scoped > supports Symbol.asyncIterator 1`] = `"($R=>$R[0]={[$R[1]=Symbol.asyncIterator]:($R[2]=s=>b=>(b=s.tee(),s=b[0],b=b[1].getReader(),{[$R[1]]:()=>this,next:()=>b.read().then(d=>{if(d.done)return{done:!0,value:void 0};d=d.value;if(d[0]===1)throw d[1];return{done:d[0]===2,value:d[1]}})}))($R[3]=_$.S())},Object.freeze($R[0]),$R[0])($R[\\"example\\"])"`; -exports[`frozen object > crossSerializeStream > scoped > supports Symbol.asyncIterator 2`] = `"($R=>_$.Se($R[1],$R[4]=[0,1]))($R[\\"example\\"])"`; +exports[`frozen object > crossSerializeStream > scoped > supports Symbol.asyncIterator 2`] = `"($R=>_$.Se($R[3],$R[4]=[0,1]))($R[\\"example\\"])"`; -exports[`frozen object > crossSerializeStream > scoped > supports Symbol.asyncIterator 3`] = `"($R=>_$.Se($R[1],$R[5]=[0,2]))($R[\\"example\\"])"`; +exports[`frozen object > crossSerializeStream > scoped > supports Symbol.asyncIterator 3`] = `"($R=>_$.Se($R[3],$R[5]=[0,2]))($R[\\"example\\"])"`; -exports[`frozen object > crossSerializeStream > scoped > supports Symbol.asyncIterator 4`] = `"($R=>_$.Se($R[1],$R[6]=[0,3]))($R[\\"example\\"])"`; +exports[`frozen object > crossSerializeStream > scoped > supports Symbol.asyncIterator 4`] = `"($R=>_$.Se($R[3],$R[6]=[0,3]))($R[\\"example\\"])"`; -exports[`frozen object > crossSerializeStream > scoped > supports Symbol.asyncIterator 5`] = `"($R=>_$.Se($R[1],$R[7]=[2,void 0]))($R[\\"example\\"])"`; +exports[`frozen object > crossSerializeStream > scoped > supports Symbol.asyncIterator 5`] = `"($R=>_$.Se($R[3],$R[7]=[2,void 0]))($R[\\"example\\"])"`; -exports[`frozen object > crossSerializeStream > scoped > supports Symbol.asyncIterator 6`] = `"($R=>_$.Sc($R[1]))($R[\\"example\\"])"`; +exports[`frozen object > crossSerializeStream > scoped > supports Symbol.asyncIterator 6`] = `"($R=>_$.Sc($R[3]))($R[\\"example\\"])"`; exports[`frozen object > crossSerializeStream > scoped > supports Symbol.iterator 1`] = `"($R=>$R[0]=_$.P())($R[\\"example\\"])"`; -exports[`frozen object > crossSerializeStream > scoped > supports Symbol.iterator 2`] = `"($R=>_$.Ps($R[0],$R[1]={[$R[4]=Symbol.iterator]:($R[5]=s=>(i,c,d,t)=>(i=0,t={[$R[4]]:()=>t,next:()=>{if(i>s.d)return{done:!0,value:void 0};c=i++,d=s.v[c];if(c===s.t)throw d;return{done:c===s.d,value:d}}}))($R[2]={v:$R[3]=[1,2,3,void 0],t:-1,d:3})}),Object.freeze($R[1]),$R[0])($R[\\"example\\"])"`; +exports[`frozen object > crossSerializeStream > scoped > supports Symbol.iterator 2`] = `"($R=>_$.Ps($R[0],$R[1]={[$R[2]=Symbol.iterator]:($R[3]=s=>(i,c,d,t)=>(i=0,t={[$R[2]]:()=>t,next:()=>{if(i>s.d)return{done:!0,value:void 0};c=i++,d=s.v[c];if(c===s.t)throw d;return{done:c===s.d,value:d}}}))($R[4]={v:$R[5]=[1,2,3,void 0],t:-1,d:3})}),Object.freeze($R[1]),$R[0])($R[\\"example\\"])"`; exports[`frozen object > crossSerializeStream > scoped > supports self-recursion 1`] = `"($R=>$R[0]={a:$R[1]=_$.P(),b:$R[2]=_$.P()},Object.freeze($R[0]),$R[0])($R[\\"example\\"])"`; @@ -58,21 +58,21 @@ exports[`frozen object > crossSerializeStream > supports Objects 1`] = `"$R[0]=_ exports[`frozen object > crossSerializeStream > supports Objects 2`] = `"(_$.Ps($R[0],$R[1]={hello:\\"world\\"}),Object.freeze($R[1]),$R[0])"`; -exports[`frozen object > crossSerializeStream > supports Symbol.asyncIterator 1`] = `"($R[0]={[$R[2]=Symbol.asyncIterator]:($R[3]=s=>b=>(b=s.tee(),s=b[0],b=b[1].getReader(),{[$R[2]]:()=>this,next:()=>b.read().then(d=>{if(d.done)return{done:!0,value:void 0};d=d.value;if(d[0]===1)throw d[1];return{done:d[0]===2,value:d[1]}})}))($R[1]=_$.S())},Object.freeze($R[0]),$R[0])"`; +exports[`frozen object > crossSerializeStream > supports Symbol.asyncIterator 1`] = `"($R[0]={[$R[1]=Symbol.asyncIterator]:($R[2]=s=>b=>(b=s.tee(),s=b[0],b=b[1].getReader(),{[$R[1]]:()=>this,next:()=>b.read().then(d=>{if(d.done)return{done:!0,value:void 0};d=d.value;if(d[0]===1)throw d[1];return{done:d[0]===2,value:d[1]}})}))($R[3]=_$.S())},Object.freeze($R[0]),$R[0])"`; -exports[`frozen object > crossSerializeStream > supports Symbol.asyncIterator 2`] = `"_$.Se($R[1],$R[4]=[0,1])"`; +exports[`frozen object > crossSerializeStream > supports Symbol.asyncIterator 2`] = `"_$.Se($R[3],$R[4]=[0,1])"`; -exports[`frozen object > crossSerializeStream > supports Symbol.asyncIterator 3`] = `"_$.Se($R[1],$R[5]=[0,2])"`; +exports[`frozen object > crossSerializeStream > supports Symbol.asyncIterator 3`] = `"_$.Se($R[3],$R[5]=[0,2])"`; -exports[`frozen object > crossSerializeStream > supports Symbol.asyncIterator 4`] = `"_$.Se($R[1],$R[6]=[0,3])"`; +exports[`frozen object > crossSerializeStream > supports Symbol.asyncIterator 4`] = `"_$.Se($R[3],$R[6]=[0,3])"`; -exports[`frozen object > crossSerializeStream > supports Symbol.asyncIterator 5`] = `"_$.Se($R[1],$R[7]=[2,void 0])"`; +exports[`frozen object > crossSerializeStream > supports Symbol.asyncIterator 5`] = `"_$.Se($R[3],$R[7]=[2,void 0])"`; -exports[`frozen object > crossSerializeStream > supports Symbol.asyncIterator 6`] = `"_$.Sc($R[1])"`; +exports[`frozen object > crossSerializeStream > supports Symbol.asyncIterator 6`] = `"_$.Sc($R[3])"`; exports[`frozen object > crossSerializeStream > supports Symbol.iterator 1`] = `"$R[0]=_$.P()"`; -exports[`frozen object > crossSerializeStream > supports Symbol.iterator 2`] = `"(_$.Ps($R[0],$R[1]={[$R[4]=Symbol.iterator]:($R[5]=s=>(i,c,d,t)=>(i=0,t={[$R[4]]:()=>t,next:()=>{if(i>s.d)return{done:!0,value:void 0};c=i++,d=s.v[c];if(c===s.t)throw d;return{done:c===s.d,value:d}}}))($R[2]={v:$R[3]=[1,2,3,void 0],t:-1,d:3})}),Object.freeze($R[1]),$R[0])"`; +exports[`frozen object > crossSerializeStream > supports Symbol.iterator 2`] = `"(_$.Ps($R[0],$R[1]={[$R[2]=Symbol.iterator]:($R[3]=s=>(i,c,d,t)=>(i=0,t={[$R[2]]:()=>t,next:()=>{if(i>s.d)return{done:!0,value:void 0};c=i++,d=s.v[c];if(c===s.t)throw d;return{done:c===s.d,value:d}}}))($R[4]={v:$R[5]=[1,2,3,void 0],t:-1,d:3})}),Object.freeze($R[1]),$R[0])"`; exports[`frozen object > crossSerializeStream > supports self-recursion 1`] = `"($R[0]={a:$R[1]=_$.P(),b:$R[2]=_$.P()},Object.freeze($R[0]),$R[0])"`; @@ -94,56 +94,56 @@ exports[`frozen object > serializeAsync > supports Symbol.iterator 1`] = `"((h,j exports[`frozen object > serializeAsync > supports self-recursion 1`] = `"(h=>(h={a:Promise.resolve().then(()=>h),b:Promise.resolve().then(()=>h)},Object.freeze(h),h))()"`; -exports[`frozen object > toCrossJSON > supports Objects 1`] = `"{\\"t\\":10,\\"i\\":0,\\"p\\":{\\"k\\":[\\"hello\\"],\\"v\\":[{\\"t\\":1,\\"s\\":\\"world\\"}],\\"s\\":1},\\"o\\":3,\\"x\\":{}}"`; +exports[`frozen object > toCrossJSON > supports Objects 1`] = `"{\\"t\\":10,\\"i\\":0,\\"p\\":{\\"k\\":[\\"hello\\"],\\"v\\":[{\\"t\\":1,\\"s\\":\\"world\\"}],\\"s\\":1},\\"o\\":3}"`; -exports[`frozen object > toCrossJSON > supports Symbol.iterator 1`] = `"{\\"t\\":10,\\"i\\":0,\\"p\\":{\\"k\\":[0],\\"v\\":[{\\"t\\":10,\\"i\\":1,\\"p\\":{\\"k\\":[\\"v\\",\\"t\\",\\"d\\"],\\"v\\":[{\\"t\\":9,\\"i\\":2,\\"l\\":4,\\"a\\":[{\\"t\\":0,\\"s\\":1},{\\"t\\":0,\\"s\\":2},{\\"t\\":0,\\"s\\":3},{\\"t\\":2,\\"s\\":1}],\\"o\\":0},{\\"t\\":0,\\"s\\":-1},{\\"t\\":0,\\"s\\":3}],\\"s\\":3},\\"o\\":0,\\"x\\":{}}],\\"s\\":1},\\"o\\":3,\\"x\\":{\\"1\\":{\\"t\\":17,\\"i\\":3,\\"s\\":3},\\"2\\":{\\"t\\":42,\\"i\\":4,\\"x\\":{\\"1\\":{\\"t\\":4,\\"i\\":3}}}}}"`; +exports[`frozen object > toCrossJSON > supports Symbol.iterator 1`] = `"{\\"t\\":10,\\"i\\":0,\\"p\\":{\\"k\\":[{\\"t\\":17,\\"i\\":1,\\"s\\":3}],\\"v\\":[{\\"t\\":43,\\"a\\":[{\\"t\\":42,\\"i\\":2,\\"f\\":{\\"t\\":4,\\"i\\":1}},{\\"t\\":10,\\"i\\":3,\\"p\\":{\\"k\\":[\\"v\\",\\"t\\",\\"d\\"],\\"v\\":[{\\"t\\":9,\\"i\\":4,\\"l\\":4,\\"a\\":[{\\"t\\":0,\\"s\\":1},{\\"t\\":0,\\"s\\":2},{\\"t\\":0,\\"s\\":3},{\\"t\\":2,\\"s\\":1}],\\"o\\":0},{\\"t\\":0,\\"s\\":-1},{\\"t\\":0,\\"s\\":3}],\\"s\\":3},\\"o\\":0}]}],\\"s\\":1},\\"o\\":3}"`; -exports[`frozen object > toCrossJSON > supports self-recursion 1`] = `"{\\"t\\":10,\\"i\\":0,\\"p\\":{\\"k\\":[\\"a\\",\\"b\\"],\\"v\\":[{\\"t\\":4,\\"i\\":0},{\\"t\\":4,\\"i\\":0}],\\"s\\":2},\\"o\\":3,\\"x\\":{}}"`; +exports[`frozen object > toCrossJSON > supports self-recursion 1`] = `"{\\"t\\":10,\\"i\\":0,\\"p\\":{\\"k\\":[\\"a\\",\\"b\\"],\\"v\\":[{\\"t\\":4,\\"i\\":0},{\\"t\\":4,\\"i\\":0}],\\"s\\":2},\\"o\\":3}"`; -exports[`frozen object > toCrossJSONAsync > supports Objects 1`] = `"{\\"t\\":12,\\"i\\":0,\\"s\\":1,\\"f\\":{\\"t\\":10,\\"i\\":1,\\"p\\":{\\"k\\":[\\"hello\\"],\\"v\\":[{\\"t\\":1,\\"s\\":\\"world\\"}],\\"s\\":1},\\"o\\":3,\\"x\\":{}}}"`; +exports[`frozen object > toCrossJSONAsync > supports Objects 1`] = `"{\\"t\\":12,\\"i\\":0,\\"s\\":1,\\"f\\":{\\"t\\":10,\\"i\\":1,\\"p\\":{\\"k\\":[\\"hello\\"],\\"v\\":[{\\"t\\":1,\\"s\\":\\"world\\"}],\\"s\\":1},\\"o\\":3}}"`; -exports[`frozen object > toCrossJSONAsync > supports Symbol.asyncIterator 1`] = `"{\\"t\\":10,\\"i\\":0,\\"p\\":{\\"k\\":[1],\\"v\\":[{\\"t\\":10,\\"i\\":1,\\"p\\":{\\"k\\":[\\"v\\",\\"t\\",\\"d\\"],\\"v\\":[{\\"t\\":9,\\"i\\":2,\\"l\\":4,\\"a\\":[{\\"t\\":0,\\"s\\":1},{\\"t\\":0,\\"s\\":2},{\\"t\\":0,\\"s\\":3},{\\"t\\":2,\\"s\\":1}],\\"o\\":0},{\\"t\\":0,\\"s\\":-1},{\\"t\\":0,\\"s\\":3}],\\"s\\":3},\\"o\\":0,\\"x\\":{}}],\\"s\\":1},\\"o\\":3,\\"x\\":{\\"3\\":{\\"t\\":17,\\"i\\":3,\\"s\\":0},\\"4\\":{\\"t\\":43,\\"i\\":4,\\"x\\":{\\"3\\":{\\"t\\":4,\\"i\\":3}}}}}"`; +exports[`frozen object > toCrossJSONAsync > supports Symbol.asyncIterator 1`] = `"{\\"t\\":10,\\"i\\":0,\\"p\\":{\\"k\\":[{\\"t\\":17,\\"i\\":1,\\"s\\":0}],\\"v\\":[{\\"t\\":45,\\"a\\":[{\\"t\\":44,\\"i\\":2,\\"f\\":{\\"t\\":4,\\"i\\":1}},{\\"t\\":10,\\"i\\":3,\\"p\\":{\\"k\\":[\\"v\\",\\"t\\",\\"d\\"],\\"v\\":[{\\"t\\":9,\\"i\\":4,\\"l\\":4,\\"a\\":[{\\"t\\":0,\\"s\\":1},{\\"t\\":0,\\"s\\":2},{\\"t\\":0,\\"s\\":3},{\\"t\\":2,\\"s\\":1}],\\"o\\":0},{\\"t\\":0,\\"s\\":-1},{\\"t\\":0,\\"s\\":3}],\\"s\\":3},\\"o\\":0}]}],\\"s\\":1},\\"o\\":3}"`; -exports[`frozen object > toCrossJSONAsync > supports Symbol.iterator 1`] = `"{\\"t\\":12,\\"i\\":0,\\"s\\":1,\\"f\\":{\\"t\\":10,\\"i\\":1,\\"p\\":{\\"k\\":[0],\\"v\\":[{\\"t\\":10,\\"i\\":2,\\"p\\":{\\"k\\":[\\"v\\",\\"t\\",\\"d\\"],\\"v\\":[{\\"t\\":9,\\"i\\":3,\\"l\\":4,\\"a\\":[{\\"t\\":0,\\"s\\":1},{\\"t\\":0,\\"s\\":2},{\\"t\\":0,\\"s\\":3},{\\"t\\":2,\\"s\\":1}],\\"o\\":0},{\\"t\\":0,\\"s\\":-1},{\\"t\\":0,\\"s\\":3}],\\"s\\":3},\\"o\\":0,\\"x\\":{}}],\\"s\\":1},\\"o\\":3,\\"x\\":{\\"1\\":{\\"t\\":17,\\"i\\":4,\\"s\\":3},\\"2\\":{\\"t\\":42,\\"i\\":5,\\"x\\":{\\"1\\":{\\"t\\":4,\\"i\\":4}}}}}}"`; +exports[`frozen object > toCrossJSONAsync > supports Symbol.iterator 1`] = `"{\\"t\\":12,\\"i\\":0,\\"s\\":1,\\"f\\":{\\"t\\":10,\\"i\\":1,\\"p\\":{\\"k\\":[{\\"t\\":17,\\"i\\":2,\\"s\\":3}],\\"v\\":[{\\"t\\":43,\\"a\\":[{\\"t\\":42,\\"i\\":3,\\"f\\":{\\"t\\":4,\\"i\\":2}},{\\"t\\":10,\\"i\\":4,\\"p\\":{\\"k\\":[\\"v\\",\\"t\\",\\"d\\"],\\"v\\":[{\\"t\\":9,\\"i\\":5,\\"l\\":4,\\"a\\":[{\\"t\\":0,\\"s\\":1},{\\"t\\":0,\\"s\\":2},{\\"t\\":0,\\"s\\":3},{\\"t\\":2,\\"s\\":1}],\\"o\\":0},{\\"t\\":0,\\"s\\":-1},{\\"t\\":0,\\"s\\":3}],\\"s\\":3},\\"o\\":0}]}],\\"s\\":1},\\"o\\":3}}"`; -exports[`frozen object > toCrossJSONAsync > supports self-recursion 1`] = `"{\\"t\\":10,\\"i\\":0,\\"p\\":{\\"k\\":[\\"a\\",\\"b\\"],\\"v\\":[{\\"t\\":12,\\"i\\":1,\\"s\\":1,\\"f\\":{\\"t\\":4,\\"i\\":0}},{\\"t\\":12,\\"i\\":2,\\"s\\":1,\\"f\\":{\\"t\\":4,\\"i\\":0}}],\\"s\\":2},\\"o\\":3,\\"x\\":{}}"`; +exports[`frozen object > toCrossJSONAsync > supports self-recursion 1`] = `"{\\"t\\":10,\\"i\\":0,\\"p\\":{\\"k\\":[\\"a\\",\\"b\\"],\\"v\\":[{\\"t\\":12,\\"i\\":1,\\"s\\":1,\\"f\\":{\\"t\\":4,\\"i\\":0}},{\\"t\\":12,\\"i\\":2,\\"s\\":1,\\"f\\":{\\"t\\":4,\\"i\\":0}}],\\"s\\":2},\\"o\\":3}"`; exports[`frozen object > toCrossJSONStream > supports Objects 1`] = `"{\\"t\\":28,\\"i\\":0}"`; -exports[`frozen object > toCrossJSONStream > supports Objects 2`] = `"{\\"t\\":29,\\"i\\":0,\\"f\\":{\\"t\\":10,\\"i\\":1,\\"p\\":{\\"k\\":[\\"hello\\"],\\"v\\":[{\\"t\\":1,\\"s\\":\\"world\\"}],\\"s\\":1},\\"o\\":3,\\"x\\":{}}}"`; +exports[`frozen object > toCrossJSONStream > supports Objects 2`] = `"{\\"t\\":29,\\"i\\":0,\\"f\\":{\\"t\\":10,\\"i\\":1,\\"p\\":{\\"k\\":[\\"hello\\"],\\"v\\":[{\\"t\\":1,\\"s\\":\\"world\\"}],\\"s\\":1},\\"o\\":3}}"`; -exports[`frozen object > toCrossJSONStream > supports Symbol.asyncIterator 1`] = `"{\\"t\\":10,\\"i\\":0,\\"p\\":{\\"k\\":[1],\\"v\\":[{\\"t\\":31,\\"i\\":1}],\\"s\\":1},\\"o\\":3,\\"x\\":{\\"3\\":{\\"t\\":17,\\"i\\":2,\\"s\\":0},\\"4\\":{\\"t\\":43,\\"i\\":3,\\"x\\":{\\"3\\":{\\"t\\":4,\\"i\\":2}}}}}"`; +exports[`frozen object > toCrossJSONStream > supports Symbol.asyncIterator 1`] = `"{\\"t\\":10,\\"i\\":0,\\"p\\":{\\"k\\":[{\\"t\\":17,\\"i\\":1,\\"s\\":0}],\\"v\\":[{\\"t\\":45,\\"a\\":[{\\"t\\":44,\\"i\\":2,\\"f\\":{\\"t\\":4,\\"i\\":1}},{\\"t\\":31,\\"i\\":3}]}],\\"s\\":1},\\"o\\":3}"`; -exports[`frozen object > toCrossJSONStream > supports Symbol.asyncIterator 2`] = `"{\\"t\\":32,\\"i\\":1,\\"f\\":{\\"t\\":9,\\"i\\":4,\\"l\\":2,\\"a\\":[{\\"t\\":0,\\"s\\":0},{\\"t\\":0,\\"s\\":1}],\\"o\\":0}}"`; +exports[`frozen object > toCrossJSONStream > supports Symbol.asyncIterator 2`] = `"{\\"t\\":32,\\"i\\":3,\\"f\\":{\\"t\\":9,\\"i\\":4,\\"l\\":2,\\"a\\":[{\\"t\\":0,\\"s\\":0},{\\"t\\":0,\\"s\\":1}],\\"o\\":0}}"`; -exports[`frozen object > toCrossJSONStream > supports Symbol.asyncIterator 3`] = `"{\\"t\\":32,\\"i\\":1,\\"f\\":{\\"t\\":9,\\"i\\":5,\\"l\\":2,\\"a\\":[{\\"t\\":0,\\"s\\":0},{\\"t\\":0,\\"s\\":2}],\\"o\\":0}}"`; +exports[`frozen object > toCrossJSONStream > supports Symbol.asyncIterator 3`] = `"{\\"t\\":32,\\"i\\":3,\\"f\\":{\\"t\\":9,\\"i\\":5,\\"l\\":2,\\"a\\":[{\\"t\\":0,\\"s\\":0},{\\"t\\":0,\\"s\\":2}],\\"o\\":0}}"`; -exports[`frozen object > toCrossJSONStream > supports Symbol.asyncIterator 4`] = `"{\\"t\\":32,\\"i\\":1,\\"f\\":{\\"t\\":9,\\"i\\":6,\\"l\\":2,\\"a\\":[{\\"t\\":0,\\"s\\":0},{\\"t\\":0,\\"s\\":3}],\\"o\\":0}}"`; +exports[`frozen object > toCrossJSONStream > supports Symbol.asyncIterator 4`] = `"{\\"t\\":32,\\"i\\":3,\\"f\\":{\\"t\\":9,\\"i\\":6,\\"l\\":2,\\"a\\":[{\\"t\\":0,\\"s\\":0},{\\"t\\":0,\\"s\\":3}],\\"o\\":0}}"`; -exports[`frozen object > toCrossJSONStream > supports Symbol.asyncIterator 5`] = `"{\\"t\\":32,\\"i\\":1,\\"f\\":{\\"t\\":9,\\"i\\":7,\\"l\\":2,\\"a\\":[{\\"t\\":0,\\"s\\":2},{\\"t\\":2,\\"s\\":1}],\\"o\\":0}}"`; +exports[`frozen object > toCrossJSONStream > supports Symbol.asyncIterator 5`] = `"{\\"t\\":32,\\"i\\":3,\\"f\\":{\\"t\\":9,\\"i\\":7,\\"l\\":2,\\"a\\":[{\\"t\\":0,\\"s\\":2},{\\"t\\":2,\\"s\\":1}],\\"o\\":0}}"`; -exports[`frozen object > toCrossJSONStream > supports Symbol.asyncIterator 6`] = `"{\\"t\\":33,\\"i\\":1}"`; +exports[`frozen object > toCrossJSONStream > supports Symbol.asyncIterator 6`] = `"{\\"t\\":33,\\"i\\":3}"`; exports[`frozen object > toCrossJSONStream > supports Symbol.iterator 1`] = `"{\\"t\\":28,\\"i\\":0}"`; -exports[`frozen object > toCrossJSONStream > supports Symbol.iterator 2`] = `"{\\"t\\":29,\\"i\\":0,\\"f\\":{\\"t\\":10,\\"i\\":1,\\"p\\":{\\"k\\":[0],\\"v\\":[{\\"t\\":10,\\"i\\":2,\\"p\\":{\\"k\\":[\\"v\\",\\"t\\",\\"d\\"],\\"v\\":[{\\"t\\":9,\\"i\\":3,\\"l\\":4,\\"a\\":[{\\"t\\":0,\\"s\\":1},{\\"t\\":0,\\"s\\":2},{\\"t\\":0,\\"s\\":3},{\\"t\\":2,\\"s\\":1}],\\"o\\":0},{\\"t\\":0,\\"s\\":-1},{\\"t\\":0,\\"s\\":3}],\\"s\\":3},\\"o\\":0,\\"x\\":{}}],\\"s\\":1},\\"o\\":3,\\"x\\":{\\"1\\":{\\"t\\":17,\\"i\\":4,\\"s\\":3},\\"2\\":{\\"t\\":42,\\"i\\":5,\\"x\\":{\\"1\\":{\\"t\\":4,\\"i\\":4}}}}}}"`; +exports[`frozen object > toCrossJSONStream > supports Symbol.iterator 2`] = `"{\\"t\\":29,\\"i\\":0,\\"f\\":{\\"t\\":10,\\"i\\":1,\\"p\\":{\\"k\\":[{\\"t\\":17,\\"i\\":2,\\"s\\":3}],\\"v\\":[{\\"t\\":43,\\"a\\":[{\\"t\\":42,\\"i\\":3,\\"f\\":{\\"t\\":4,\\"i\\":2}},{\\"t\\":10,\\"i\\":4,\\"p\\":{\\"k\\":[\\"v\\",\\"t\\",\\"d\\"],\\"v\\":[{\\"t\\":9,\\"i\\":5,\\"l\\":4,\\"a\\":[{\\"t\\":0,\\"s\\":1},{\\"t\\":0,\\"s\\":2},{\\"t\\":0,\\"s\\":3},{\\"t\\":2,\\"s\\":1}],\\"o\\":0},{\\"t\\":0,\\"s\\":-1},{\\"t\\":0,\\"s\\":3}],\\"s\\":3},\\"o\\":0}]}],\\"s\\":1},\\"o\\":3}}"`; -exports[`frozen object > toCrossJSONStream > supports self-recursion 1`] = `"{\\"t\\":10,\\"i\\":0,\\"p\\":{\\"k\\":[\\"a\\",\\"b\\"],\\"v\\":[{\\"t\\":28,\\"i\\":1},{\\"t\\":28,\\"i\\":2}],\\"s\\":2},\\"o\\":3,\\"x\\":{}}"`; +exports[`frozen object > toCrossJSONStream > supports self-recursion 1`] = `"{\\"t\\":10,\\"i\\":0,\\"p\\":{\\"k\\":[\\"a\\",\\"b\\"],\\"v\\":[{\\"t\\":28,\\"i\\":1},{\\"t\\":28,\\"i\\":2}],\\"s\\":2},\\"o\\":3}"`; exports[`frozen object > toCrossJSONStream > supports self-recursion 2`] = `"{\\"t\\":29,\\"i\\":1,\\"f\\":{\\"t\\":4,\\"i\\":0}}"`; exports[`frozen object > toCrossJSONStream > supports self-recursion 3`] = `"{\\"t\\":29,\\"i\\":2,\\"f\\":{\\"t\\":4,\\"i\\":0}}"`; -exports[`frozen object > toJSON > supports Objects 1`] = `"{\\"t\\":{\\"t\\":10,\\"i\\":0,\\"p\\":{\\"k\\":[\\"hello\\"],\\"v\\":[{\\"t\\":1,\\"s\\":\\"world\\"}],\\"s\\":1},\\"o\\":3,\\"x\\":{}},\\"f\\":16383,\\"m\\":[]}"`; +exports[`frozen object > toJSON > supports Objects 1`] = `"{\\"t\\":{\\"t\\":10,\\"i\\":0,\\"p\\":{\\"k\\":[\\"hello\\"],\\"v\\":[{\\"t\\":1,\\"s\\":\\"world\\"}],\\"s\\":1},\\"o\\":3},\\"f\\":16383,\\"m\\":[]}"`; -exports[`frozen object > toJSON > supports Symbol.iterator 1`] = `"{\\"t\\":{\\"t\\":10,\\"i\\":0,\\"p\\":{\\"k\\":[0],\\"v\\":[{\\"t\\":10,\\"i\\":1,\\"p\\":{\\"k\\":[\\"v\\",\\"t\\",\\"d\\"],\\"v\\":[{\\"t\\":9,\\"i\\":2,\\"l\\":4,\\"a\\":[{\\"t\\":0,\\"s\\":1},{\\"t\\":0,\\"s\\":2},{\\"t\\":0,\\"s\\":3},{\\"t\\":2,\\"s\\":1}],\\"o\\":0},{\\"t\\":0,\\"s\\":-1},{\\"t\\":0,\\"s\\":3}],\\"s\\":3},\\"o\\":0,\\"x\\":{}}],\\"s\\":1},\\"o\\":3,\\"x\\":{\\"1\\":{\\"t\\":17,\\"i\\":3,\\"s\\":3},\\"2\\":{\\"t\\":42,\\"i\\":4,\\"x\\":{\\"1\\":{\\"t\\":4,\\"i\\":3}}}}},\\"f\\":16383,\\"m\\":[3]}"`; +exports[`frozen object > toJSON > supports Symbol.iterator 1`] = `"{\\"t\\":{\\"t\\":10,\\"i\\":0,\\"p\\":{\\"k\\":[{\\"t\\":17,\\"i\\":1,\\"s\\":3}],\\"v\\":[{\\"t\\":43,\\"a\\":[{\\"t\\":42,\\"i\\":2,\\"f\\":{\\"t\\":4,\\"i\\":1}},{\\"t\\":10,\\"i\\":3,\\"p\\":{\\"k\\":[\\"v\\",\\"t\\",\\"d\\"],\\"v\\":[{\\"t\\":9,\\"i\\":4,\\"l\\":4,\\"a\\":[{\\"t\\":0,\\"s\\":1},{\\"t\\":0,\\"s\\":2},{\\"t\\":0,\\"s\\":3},{\\"t\\":2,\\"s\\":1}],\\"o\\":0},{\\"t\\":0,\\"s\\":-1},{\\"t\\":0,\\"s\\":3}],\\"s\\":3},\\"o\\":0}]}],\\"s\\":1},\\"o\\":3},\\"f\\":16383,\\"m\\":[1]}"`; -exports[`frozen object > toJSON > supports self-recursion 1`] = `"{\\"t\\":{\\"t\\":10,\\"i\\":0,\\"p\\":{\\"k\\":[\\"a\\",\\"b\\"],\\"v\\":[{\\"t\\":4,\\"i\\":0},{\\"t\\":4,\\"i\\":0}],\\"s\\":2},\\"o\\":3,\\"x\\":{}},\\"f\\":16383,\\"m\\":[0]}"`; +exports[`frozen object > toJSON > supports self-recursion 1`] = `"{\\"t\\":{\\"t\\":10,\\"i\\":0,\\"p\\":{\\"k\\":[\\"a\\",\\"b\\"],\\"v\\":[{\\"t\\":4,\\"i\\":0},{\\"t\\":4,\\"i\\":0}],\\"s\\":2},\\"o\\":3},\\"f\\":16383,\\"m\\":[0]}"`; -exports[`frozen object > toJSONAsync > supports Objects 1`] = `"{\\"t\\":{\\"t\\":12,\\"i\\":0,\\"s\\":1,\\"f\\":{\\"t\\":10,\\"i\\":1,\\"p\\":{\\"k\\":[\\"hello\\"],\\"v\\":[{\\"t\\":1,\\"s\\":\\"world\\"}],\\"s\\":1},\\"o\\":3,\\"x\\":{}}},\\"f\\":16383,\\"m\\":[]}"`; +exports[`frozen object > toJSONAsync > supports Objects 1`] = `"{\\"t\\":{\\"t\\":12,\\"i\\":0,\\"s\\":1,\\"f\\":{\\"t\\":10,\\"i\\":1,\\"p\\":{\\"k\\":[\\"hello\\"],\\"v\\":[{\\"t\\":1,\\"s\\":\\"world\\"}],\\"s\\":1},\\"o\\":3}},\\"f\\":16383,\\"m\\":[]}"`; -exports[`frozen object > toJSONAsync > supports Symbol.asyncIterator 1`] = `"{\\"t\\":{\\"t\\":10,\\"i\\":0,\\"p\\":{\\"k\\":[1],\\"v\\":[{\\"t\\":10,\\"i\\":1,\\"p\\":{\\"k\\":[\\"v\\",\\"t\\",\\"d\\"],\\"v\\":[{\\"t\\":9,\\"i\\":2,\\"l\\":4,\\"a\\":[{\\"t\\":0,\\"s\\":1},{\\"t\\":0,\\"s\\":2},{\\"t\\":0,\\"s\\":3},{\\"t\\":2,\\"s\\":1}],\\"o\\":0},{\\"t\\":0,\\"s\\":-1},{\\"t\\":0,\\"s\\":3}],\\"s\\":3},\\"o\\":0,\\"x\\":{}}],\\"s\\":1},\\"o\\":3,\\"x\\":{\\"3\\":{\\"t\\":17,\\"i\\":3,\\"s\\":0},\\"4\\":{\\"t\\":43,\\"i\\":4,\\"x\\":{\\"3\\":{\\"t\\":4,\\"i\\":3}}}}},\\"f\\":16383,\\"m\\":[3]}"`; +exports[`frozen object > toJSONAsync > supports Symbol.asyncIterator 1`] = `"{\\"t\\":{\\"t\\":10,\\"i\\":0,\\"p\\":{\\"k\\":[{\\"t\\":17,\\"i\\":1,\\"s\\":0}],\\"v\\":[{\\"t\\":45,\\"a\\":[{\\"t\\":44,\\"i\\":2,\\"f\\":{\\"t\\":4,\\"i\\":1}},{\\"t\\":10,\\"i\\":3,\\"p\\":{\\"k\\":[\\"v\\",\\"t\\",\\"d\\"],\\"v\\":[{\\"t\\":9,\\"i\\":4,\\"l\\":4,\\"a\\":[{\\"t\\":0,\\"s\\":1},{\\"t\\":0,\\"s\\":2},{\\"t\\":0,\\"s\\":3},{\\"t\\":2,\\"s\\":1}],\\"o\\":0},{\\"t\\":0,\\"s\\":-1},{\\"t\\":0,\\"s\\":3}],\\"s\\":3},\\"o\\":0}]}],\\"s\\":1},\\"o\\":3},\\"f\\":16383,\\"m\\":[1]}"`; -exports[`frozen object > toJSONAsync > supports Symbol.iterator 1`] = `"{\\"t\\":{\\"t\\":12,\\"i\\":0,\\"s\\":1,\\"f\\":{\\"t\\":10,\\"i\\":1,\\"p\\":{\\"k\\":[0],\\"v\\":[{\\"t\\":10,\\"i\\":2,\\"p\\":{\\"k\\":[\\"v\\",\\"t\\",\\"d\\"],\\"v\\":[{\\"t\\":9,\\"i\\":3,\\"l\\":4,\\"a\\":[{\\"t\\":0,\\"s\\":1},{\\"t\\":0,\\"s\\":2},{\\"t\\":0,\\"s\\":3},{\\"t\\":2,\\"s\\":1}],\\"o\\":0},{\\"t\\":0,\\"s\\":-1},{\\"t\\":0,\\"s\\":3}],\\"s\\":3},\\"o\\":0,\\"x\\":{}}],\\"s\\":1},\\"o\\":3,\\"x\\":{\\"1\\":{\\"t\\":17,\\"i\\":4,\\"s\\":3},\\"2\\":{\\"t\\":42,\\"i\\":5,\\"x\\":{\\"1\\":{\\"t\\":4,\\"i\\":4}}}}}},\\"f\\":16383,\\"m\\":[4]}"`; +exports[`frozen object > toJSONAsync > supports Symbol.iterator 1`] = `"{\\"t\\":{\\"t\\":12,\\"i\\":0,\\"s\\":1,\\"f\\":{\\"t\\":10,\\"i\\":1,\\"p\\":{\\"k\\":[{\\"t\\":17,\\"i\\":2,\\"s\\":3}],\\"v\\":[{\\"t\\":43,\\"a\\":[{\\"t\\":42,\\"i\\":3,\\"f\\":{\\"t\\":4,\\"i\\":2}},{\\"t\\":10,\\"i\\":4,\\"p\\":{\\"k\\":[\\"v\\",\\"t\\",\\"d\\"],\\"v\\":[{\\"t\\":9,\\"i\\":5,\\"l\\":4,\\"a\\":[{\\"t\\":0,\\"s\\":1},{\\"t\\":0,\\"s\\":2},{\\"t\\":0,\\"s\\":3},{\\"t\\":2,\\"s\\":1}],\\"o\\":0},{\\"t\\":0,\\"s\\":-1},{\\"t\\":0,\\"s\\":3}],\\"s\\":3},\\"o\\":0}]}],\\"s\\":1},\\"o\\":3}},\\"f\\":16383,\\"m\\":[2]}"`; -exports[`frozen object > toJSONAsync > supports self-recursion 1`] = `"{\\"t\\":{\\"t\\":10,\\"i\\":0,\\"p\\":{\\"k\\":[\\"a\\",\\"b\\"],\\"v\\":[{\\"t\\":12,\\"i\\":1,\\"s\\":1,\\"f\\":{\\"t\\":4,\\"i\\":0}},{\\"t\\":12,\\"i\\":2,\\"s\\":1,\\"f\\":{\\"t\\":4,\\"i\\":0}}],\\"s\\":2},\\"o\\":3,\\"x\\":{}},\\"f\\":16383,\\"m\\":[0]}"`; +exports[`frozen object > toJSONAsync > supports self-recursion 1`] = `"{\\"t\\":{\\"t\\":10,\\"i\\":0,\\"p\\":{\\"k\\":[\\"a\\",\\"b\\"],\\"v\\":[{\\"t\\":12,\\"i\\":1,\\"s\\":1,\\"f\\":{\\"t\\":4,\\"i\\":0}},{\\"t\\":12,\\"i\\":2,\\"s\\":1,\\"f\\":{\\"t\\":4,\\"i\\":0}}],\\"s\\":2},\\"o\\":3},\\"f\\":16383,\\"m\\":[0]}"`; diff --git a/packages/seroval/test/__snapshots__/iterable.test.ts.snap b/packages/seroval/test/__snapshots__/iterable.test.ts.snap index 5c22985f..31a3cdb0 100644 --- a/packages/seroval/test/__snapshots__/iterable.test.ts.snap +++ b/packages/seroval/test/__snapshots__/iterable.test.ts.snap @@ -2,38 +2,38 @@ exports[`Iterable > compat > should use function expression instead of arrow functions. 1`] = `"(function(h){return ({title:\\"Hello World\\",[h=Symbol.iterator]:(function(s){return function(i,c,d,t){return (i=0,t={[h]:function(){return t},next:function(){if(i>s.d)return{done:!0,value:void 0};c=i++,d=s.v[c];if(c===s.t)throw d;return{done:c===s.d,value:d}}})}})({v:[1,2,3,void 0],t:-1,d:3})})})()"`; -exports[`Iterable > compat#toJSON > should use function expression instead of arrow functions. 1`] = `"{\\"t\\":{\\"t\\":10,\\"i\\":0,\\"p\\":{\\"k\\":[\\"title\\",0],\\"v\\":[{\\"t\\":1,\\"s\\":\\"Hello World\\"},{\\"t\\":10,\\"i\\":1,\\"p\\":{\\"k\\":[\\"v\\",\\"t\\",\\"d\\"],\\"v\\":[{\\"t\\":9,\\"i\\":2,\\"l\\":4,\\"a\\":[{\\"t\\":0,\\"s\\":1},{\\"t\\":0,\\"s\\":2},{\\"t\\":0,\\"s\\":3},{\\"t\\":2,\\"s\\":1}],\\"o\\":0},{\\"t\\":0,\\"s\\":-1},{\\"t\\":0,\\"s\\":3}],\\"s\\":3},\\"o\\":0,\\"x\\":{}}],\\"s\\":2},\\"o\\":0,\\"x\\":{\\"1\\":{\\"t\\":17,\\"i\\":3,\\"s\\":3},\\"2\\":{\\"t\\":42,\\"i\\":4,\\"x\\":{\\"1\\":{\\"t\\":4,\\"i\\":3}}}}},\\"f\\":16379,\\"m\\":[3]}"`; +exports[`Iterable > compat#toJSON > should use function expression instead of arrow functions. 1`] = `"{\\"t\\":{\\"t\\":10,\\"i\\":0,\\"p\\":{\\"k\\":[\\"title\\",{\\"t\\":17,\\"i\\":1,\\"s\\":3}],\\"v\\":[{\\"t\\":1,\\"s\\":\\"Hello World\\"},{\\"t\\":43,\\"a\\":[{\\"t\\":42,\\"i\\":2,\\"f\\":{\\"t\\":4,\\"i\\":1}},{\\"t\\":10,\\"i\\":3,\\"p\\":{\\"k\\":[\\"v\\",\\"t\\",\\"d\\"],\\"v\\":[{\\"t\\":9,\\"i\\":4,\\"l\\":4,\\"a\\":[{\\"t\\":0,\\"s\\":1},{\\"t\\":0,\\"s\\":2},{\\"t\\":0,\\"s\\":3},{\\"t\\":2,\\"s\\":1}],\\"o\\":0},{\\"t\\":0,\\"s\\":-1},{\\"t\\":0,\\"s\\":3}],\\"s\\":3},\\"o\\":0}]}],\\"s\\":2},\\"o\\":0},\\"f\\":16379,\\"m\\":[1]}"`; exports[`Iterable > compat#toJSON > should use function expression instead of arrow functions. 2`] = `"(function(h){return ({title:\\"Hello World\\",[h=Symbol.iterator]:(function(s){return function(i,c,d,t){return (i=0,t={[h]:function(){return t},next:function(){if(i>s.d)return{done:!0,value:void 0};c=i++,d=s.v[c];if(c===s.t)throw d;return{done:c===s.d,value:d}}})}})({v:[1,2,3,void 0],t:-1,d:3})})})()"`; -exports[`Iterable > crossSerialize > scoped > supports Iterables 1`] = `"($R=>$R[0]={title:\\"Hello World\\",[$R[3]=Symbol.iterator]:($R[4]=s=>(i,c,d,t)=>(i=0,t={[$R[3]]:()=>t,next:()=>{if(i>s.d)return{done:!0,value:void 0};c=i++,d=s.v[c];if(c===s.t)throw d;return{done:c===s.d,value:d}}}))($R[1]={v:$R[2]=[1,2,3,void 0],t:-1,d:3})})($R[\\"example\\"])"`; +exports[`Iterable > crossSerialize > scoped > supports Iterables 1`] = `"($R=>$R[0]={title:\\"Hello World\\",[$R[1]=Symbol.iterator]:($R[2]=s=>(i,c,d,t)=>(i=0,t={[$R[1]]:()=>t,next:()=>{if(i>s.d)return{done:!0,value:void 0};c=i++,d=s.v[c];if(c===s.t)throw d;return{done:c===s.d,value:d}}}))($R[3]={v:$R[4]=[1,2,3,void 0],t:-1,d:3})})($R[\\"example\\"])"`; -exports[`Iterable > crossSerialize > supports Iterables 1`] = `"$R[0]={title:\\"Hello World\\",[$R[3]=Symbol.iterator]:($R[4]=s=>(i,c,d,t)=>(i=0,t={[$R[3]]:()=>t,next:()=>{if(i>s.d)return{done:!0,value:void 0};c=i++,d=s.v[c];if(c===s.t)throw d;return{done:c===s.d,value:d}}}))($R[1]={v:$R[2]=[1,2,3,void 0],t:-1,d:3})}"`; +exports[`Iterable > crossSerialize > supports Iterables 1`] = `"$R[0]={title:\\"Hello World\\",[$R[1]=Symbol.iterator]:($R[2]=s=>(i,c,d,t)=>(i=0,t={[$R[1]]:()=>t,next:()=>{if(i>s.d)return{done:!0,value:void 0};c=i++,d=s.v[c];if(c===s.t)throw d;return{done:c===s.d,value:d}}}))($R[3]={v:$R[4]=[1,2,3,void 0],t:-1,d:3})}"`; -exports[`Iterable > crossSerializeAsync > scoped > supports Iterables 1`] = `"($R=>$R[0]=Promise.resolve($R[1]={title:\\"Hello World\\",[$R[4]=Symbol.iterator]:($R[5]=s=>(i,c,d,t)=>(i=0,t={[$R[4]]:()=>t,next:()=>{if(i>s.d)return{done:!0,value:void 0};c=i++,d=s.v[c];if(c===s.t)throw d;return{done:c===s.d,value:d}}}))($R[2]={v:$R[3]=[1,2,3,void 0],t:-1,d:3})}))($R[\\"example\\"])"`; +exports[`Iterable > crossSerializeAsync > scoped > supports Iterables 1`] = `"($R=>$R[0]=Promise.resolve($R[1]={title:\\"Hello World\\",[$R[2]=Symbol.iterator]:($R[3]=s=>(i,c,d,t)=>(i=0,t={[$R[2]]:()=>t,next:()=>{if(i>s.d)return{done:!0,value:void 0};c=i++,d=s.v[c];if(c===s.t)throw d;return{done:c===s.d,value:d}}}))($R[4]={v:$R[5]=[1,2,3,void 0],t:-1,d:3})}))($R[\\"example\\"])"`; -exports[`Iterable > crossSerializeAsync > supports Iterables 1`] = `"$R[0]=Promise.resolve($R[1]={title:\\"Hello World\\",[$R[4]=Symbol.iterator]:($R[5]=s=>(i,c,d,t)=>(i=0,t={[$R[4]]:()=>t,next:()=>{if(i>s.d)return{done:!0,value:void 0};c=i++,d=s.v[c];if(c===s.t)throw d;return{done:c===s.d,value:d}}}))($R[2]={v:$R[3]=[1,2,3,void 0],t:-1,d:3})})"`; +exports[`Iterable > crossSerializeAsync > supports Iterables 1`] = `"$R[0]=Promise.resolve($R[1]={title:\\"Hello World\\",[$R[2]=Symbol.iterator]:($R[3]=s=>(i,c,d,t)=>(i=0,t={[$R[2]]:()=>t,next:()=>{if(i>s.d)return{done:!0,value:void 0};c=i++,d=s.v[c];if(c===s.t)throw d;return{done:c===s.d,value:d}}}))($R[4]={v:$R[5]=[1,2,3,void 0],t:-1,d:3})})"`; exports[`Iterable > crossSerializeStream > scoped > supports Iterables 1`] = `"($R=>$R[0]=_$.P())($R[\\"example\\"])"`; -exports[`Iterable > crossSerializeStream > scoped > supports Iterables 2`] = `"($R=>_$.Ps($R[0],$R[1]={title:\\"Hello World\\",[$R[4]=Symbol.iterator]:($R[5]=s=>(i,c,d,t)=>(i=0,t={[$R[4]]:()=>t,next:()=>{if(i>s.d)return{done:!0,value:void 0};c=i++,d=s.v[c];if(c===s.t)throw d;return{done:c===s.d,value:d}}}))($R[2]={v:$R[3]=[1,2,3,void 0],t:-1,d:3})}))($R[\\"example\\"])"`; +exports[`Iterable > crossSerializeStream > scoped > supports Iterables 2`] = `"($R=>_$.Ps($R[0],$R[1]={title:\\"Hello World\\",[$R[2]=Symbol.iterator]:($R[3]=s=>(i,c,d,t)=>(i=0,t={[$R[2]]:()=>t,next:()=>{if(i>s.d)return{done:!0,value:void 0};c=i++,d=s.v[c];if(c===s.t)throw d;return{done:c===s.d,value:d}}}))($R[4]={v:$R[5]=[1,2,3,void 0],t:-1,d:3})}))($R[\\"example\\"])"`; exports[`Iterable > crossSerializeStream > supports Iterables 1`] = `"$R[0]=_$.P()"`; -exports[`Iterable > crossSerializeStream > supports Iterables 2`] = `"_$.Ps($R[0],$R[1]={title:\\"Hello World\\",[$R[4]=Symbol.iterator]:($R[5]=s=>(i,c,d,t)=>(i=0,t={[$R[4]]:()=>t,next:()=>{if(i>s.d)return{done:!0,value:void 0};c=i++,d=s.v[c];if(c===s.t)throw d;return{done:c===s.d,value:d}}}))($R[2]={v:$R[3]=[1,2,3,void 0],t:-1,d:3})})"`; +exports[`Iterable > crossSerializeStream > supports Iterables 2`] = `"_$.Ps($R[0],$R[1]={title:\\"Hello World\\",[$R[2]=Symbol.iterator]:($R[3]=s=>(i,c,d,t)=>(i=0,t={[$R[2]]:()=>t,next:()=>{if(i>s.d)return{done:!0,value:void 0};c=i++,d=s.v[c];if(c===s.t)throw d;return{done:c===s.d,value:d}}}))($R[4]={v:$R[5]=[1,2,3,void 0],t:-1,d:3})})"`; exports[`Iterable > serialize > supports Iterables 1`] = `"(h=>({title:\\"Hello World\\",[h=Symbol.iterator]:(s=>(i,c,d,t)=>(i=0,t={[h]:()=>t,next:()=>{if(i>s.d)return{done:!0,value:void 0};c=i++,d=s.v[c];if(c===s.t)throw d;return{done:c===s.d,value:d}}}))({v:[1,2,3,void 0],t:-1,d:3})}))()"`; exports[`Iterable > serializeAsync > supports Iterables 1`] = `"(h=>(Promise.resolve({title:\\"Hello World\\",[h=Symbol.iterator]:(s=>(i,c,d,t)=>(i=0,t={[h]:()=>t,next:()=>{if(i>s.d)return{done:!0,value:void 0};c=i++,d=s.v[c];if(c===s.t)throw d;return{done:c===s.d,value:d}}}))({v:[1,2,3,void 0],t:-1,d:3})})))()"`; -exports[`Iterable > toCrossJSON > supports Iterables 1`] = `"{\\"t\\":10,\\"i\\":0,\\"p\\":{\\"k\\":[\\"title\\",0],\\"v\\":[{\\"t\\":1,\\"s\\":\\"Hello World\\"},{\\"t\\":10,\\"i\\":1,\\"p\\":{\\"k\\":[\\"v\\",\\"t\\",\\"d\\"],\\"v\\":[{\\"t\\":9,\\"i\\":2,\\"l\\":4,\\"a\\":[{\\"t\\":0,\\"s\\":1},{\\"t\\":0,\\"s\\":2},{\\"t\\":0,\\"s\\":3},{\\"t\\":2,\\"s\\":1}],\\"o\\":0},{\\"t\\":0,\\"s\\":-1},{\\"t\\":0,\\"s\\":3}],\\"s\\":3},\\"o\\":0,\\"x\\":{}}],\\"s\\":2},\\"o\\":0,\\"x\\":{\\"1\\":{\\"t\\":17,\\"i\\":3,\\"s\\":3},\\"2\\":{\\"t\\":42,\\"i\\":4,\\"x\\":{\\"1\\":{\\"t\\":4,\\"i\\":3}}}}}"`; +exports[`Iterable > toCrossJSON > supports Iterables 1`] = `"{\\"t\\":10,\\"i\\":0,\\"p\\":{\\"k\\":[\\"title\\",{\\"t\\":17,\\"i\\":1,\\"s\\":3}],\\"v\\":[{\\"t\\":1,\\"s\\":\\"Hello World\\"},{\\"t\\":43,\\"a\\":[{\\"t\\":42,\\"i\\":2,\\"f\\":{\\"t\\":4,\\"i\\":1}},{\\"t\\":10,\\"i\\":3,\\"p\\":{\\"k\\":[\\"v\\",\\"t\\",\\"d\\"],\\"v\\":[{\\"t\\":9,\\"i\\":4,\\"l\\":4,\\"a\\":[{\\"t\\":0,\\"s\\":1},{\\"t\\":0,\\"s\\":2},{\\"t\\":0,\\"s\\":3},{\\"t\\":2,\\"s\\":1}],\\"o\\":0},{\\"t\\":0,\\"s\\":-1},{\\"t\\":0,\\"s\\":3}],\\"s\\":3},\\"o\\":0}]}],\\"s\\":2},\\"o\\":0}"`; -exports[`Iterable > toCrossJSONAsync > supports Iterables 1`] = `"{\\"t\\":12,\\"i\\":0,\\"s\\":1,\\"f\\":{\\"t\\":10,\\"i\\":1,\\"p\\":{\\"k\\":[\\"title\\",0],\\"v\\":[{\\"t\\":1,\\"s\\":\\"Hello World\\"},{\\"t\\":10,\\"i\\":2,\\"p\\":{\\"k\\":[\\"v\\",\\"t\\",\\"d\\"],\\"v\\":[{\\"t\\":9,\\"i\\":3,\\"l\\":4,\\"a\\":[{\\"t\\":0,\\"s\\":1},{\\"t\\":0,\\"s\\":2},{\\"t\\":0,\\"s\\":3},{\\"t\\":2,\\"s\\":1}],\\"o\\":0},{\\"t\\":0,\\"s\\":-1},{\\"t\\":0,\\"s\\":3}],\\"s\\":3},\\"o\\":0,\\"x\\":{}}],\\"s\\":2},\\"o\\":0,\\"x\\":{\\"1\\":{\\"t\\":17,\\"i\\":4,\\"s\\":3},\\"2\\":{\\"t\\":42,\\"i\\":5,\\"x\\":{\\"1\\":{\\"t\\":4,\\"i\\":4}}}}}}"`; +exports[`Iterable > toCrossJSONAsync > supports Iterables 1`] = `"{\\"t\\":12,\\"i\\":0,\\"s\\":1,\\"f\\":{\\"t\\":10,\\"i\\":1,\\"p\\":{\\"k\\":[\\"title\\",{\\"t\\":17,\\"i\\":2,\\"s\\":3}],\\"v\\":[{\\"t\\":1,\\"s\\":\\"Hello World\\"},{\\"t\\":43,\\"a\\":[{\\"t\\":42,\\"i\\":3,\\"f\\":{\\"t\\":4,\\"i\\":2}},{\\"t\\":10,\\"i\\":4,\\"p\\":{\\"k\\":[\\"v\\",\\"t\\",\\"d\\"],\\"v\\":[{\\"t\\":9,\\"i\\":5,\\"l\\":4,\\"a\\":[{\\"t\\":0,\\"s\\":1},{\\"t\\":0,\\"s\\":2},{\\"t\\":0,\\"s\\":3},{\\"t\\":2,\\"s\\":1}],\\"o\\":0},{\\"t\\":0,\\"s\\":-1},{\\"t\\":0,\\"s\\":3}],\\"s\\":3},\\"o\\":0}]}],\\"s\\":2},\\"o\\":0}}"`; exports[`Iterable > toCrossJSONStream > supports Iterables 1`] = `"{\\"t\\":28,\\"i\\":0}"`; -exports[`Iterable > toCrossJSONStream > supports Iterables 2`] = `"{\\"t\\":29,\\"i\\":0,\\"f\\":{\\"t\\":10,\\"i\\":1,\\"p\\":{\\"k\\":[\\"title\\",0],\\"v\\":[{\\"t\\":1,\\"s\\":\\"Hello World\\"},{\\"t\\":10,\\"i\\":2,\\"p\\":{\\"k\\":[\\"v\\",\\"t\\",\\"d\\"],\\"v\\":[{\\"t\\":9,\\"i\\":3,\\"l\\":4,\\"a\\":[{\\"t\\":0,\\"s\\":1},{\\"t\\":0,\\"s\\":2},{\\"t\\":0,\\"s\\":3},{\\"t\\":2,\\"s\\":1}],\\"o\\":0},{\\"t\\":0,\\"s\\":-1},{\\"t\\":0,\\"s\\":3}],\\"s\\":3},\\"o\\":0,\\"x\\":{}}],\\"s\\":2},\\"o\\":0,\\"x\\":{\\"1\\":{\\"t\\":17,\\"i\\":4,\\"s\\":3},\\"2\\":{\\"t\\":42,\\"i\\":5,\\"x\\":{\\"1\\":{\\"t\\":4,\\"i\\":4}}}}}}"`; +exports[`Iterable > toCrossJSONStream > supports Iterables 2`] = `"{\\"t\\":29,\\"i\\":0,\\"f\\":{\\"t\\":10,\\"i\\":1,\\"p\\":{\\"k\\":[\\"title\\",{\\"t\\":17,\\"i\\":2,\\"s\\":3}],\\"v\\":[{\\"t\\":1,\\"s\\":\\"Hello World\\"},{\\"t\\":43,\\"a\\":[{\\"t\\":42,\\"i\\":3,\\"f\\":{\\"t\\":4,\\"i\\":2}},{\\"t\\":10,\\"i\\":4,\\"p\\":{\\"k\\":[\\"v\\",\\"t\\",\\"d\\"],\\"v\\":[{\\"t\\":9,\\"i\\":5,\\"l\\":4,\\"a\\":[{\\"t\\":0,\\"s\\":1},{\\"t\\":0,\\"s\\":2},{\\"t\\":0,\\"s\\":3},{\\"t\\":2,\\"s\\":1}],\\"o\\":0},{\\"t\\":0,\\"s\\":-1},{\\"t\\":0,\\"s\\":3}],\\"s\\":3},\\"o\\":0}]}],\\"s\\":2},\\"o\\":0}}"`; -exports[`Iterable > toJSON > supports Iterables 1`] = `"{\\"t\\":{\\"t\\":10,\\"i\\":0,\\"p\\":{\\"k\\":[\\"title\\",0],\\"v\\":[{\\"t\\":1,\\"s\\":\\"Hello World\\"},{\\"t\\":10,\\"i\\":1,\\"p\\":{\\"k\\":[\\"v\\",\\"t\\",\\"d\\"],\\"v\\":[{\\"t\\":9,\\"i\\":2,\\"l\\":4,\\"a\\":[{\\"t\\":0,\\"s\\":1},{\\"t\\":0,\\"s\\":2},{\\"t\\":0,\\"s\\":3},{\\"t\\":2,\\"s\\":1}],\\"o\\":0},{\\"t\\":0,\\"s\\":-1},{\\"t\\":0,\\"s\\":3}],\\"s\\":3},\\"o\\":0,\\"x\\":{}}],\\"s\\":2},\\"o\\":0,\\"x\\":{\\"1\\":{\\"t\\":17,\\"i\\":3,\\"s\\":3},\\"2\\":{\\"t\\":42,\\"i\\":4,\\"x\\":{\\"1\\":{\\"t\\":4,\\"i\\":3}}}}},\\"f\\":16383,\\"m\\":[3]}"`; +exports[`Iterable > toJSON > supports Iterables 1`] = `"{\\"t\\":{\\"t\\":10,\\"i\\":0,\\"p\\":{\\"k\\":[\\"title\\",{\\"t\\":17,\\"i\\":1,\\"s\\":3}],\\"v\\":[{\\"t\\":1,\\"s\\":\\"Hello World\\"},{\\"t\\":43,\\"a\\":[{\\"t\\":42,\\"i\\":2,\\"f\\":{\\"t\\":4,\\"i\\":1}},{\\"t\\":10,\\"i\\":3,\\"p\\":{\\"k\\":[\\"v\\",\\"t\\",\\"d\\"],\\"v\\":[{\\"t\\":9,\\"i\\":4,\\"l\\":4,\\"a\\":[{\\"t\\":0,\\"s\\":1},{\\"t\\":0,\\"s\\":2},{\\"t\\":0,\\"s\\":3},{\\"t\\":2,\\"s\\":1}],\\"o\\":0},{\\"t\\":0,\\"s\\":-1},{\\"t\\":0,\\"s\\":3}],\\"s\\":3},\\"o\\":0}]}],\\"s\\":2},\\"o\\":0},\\"f\\":16383,\\"m\\":[1]}"`; -exports[`Iterable > toJSONAsync > supports Iterables 1`] = `"{\\"t\\":{\\"t\\":12,\\"i\\":0,\\"s\\":1,\\"f\\":{\\"t\\":10,\\"i\\":1,\\"p\\":{\\"k\\":[\\"title\\",0],\\"v\\":[{\\"t\\":1,\\"s\\":\\"Hello World\\"},{\\"t\\":10,\\"i\\":2,\\"p\\":{\\"k\\":[\\"v\\",\\"t\\",\\"d\\"],\\"v\\":[{\\"t\\":9,\\"i\\":3,\\"l\\":4,\\"a\\":[{\\"t\\":0,\\"s\\":1},{\\"t\\":0,\\"s\\":2},{\\"t\\":0,\\"s\\":3},{\\"t\\":2,\\"s\\":1}],\\"o\\":0},{\\"t\\":0,\\"s\\":-1},{\\"t\\":0,\\"s\\":3}],\\"s\\":3},\\"o\\":0,\\"x\\":{}}],\\"s\\":2},\\"o\\":0,\\"x\\":{\\"1\\":{\\"t\\":17,\\"i\\":4,\\"s\\":3},\\"2\\":{\\"t\\":42,\\"i\\":5,\\"x\\":{\\"1\\":{\\"t\\":4,\\"i\\":4}}}}}},\\"f\\":16383,\\"m\\":[4]}"`; +exports[`Iterable > toJSONAsync > supports Iterables 1`] = `"{\\"t\\":{\\"t\\":12,\\"i\\":0,\\"s\\":1,\\"f\\":{\\"t\\":10,\\"i\\":1,\\"p\\":{\\"k\\":[\\"title\\",{\\"t\\":17,\\"i\\":2,\\"s\\":3}],\\"v\\":[{\\"t\\":1,\\"s\\":\\"Hello World\\"},{\\"t\\":43,\\"a\\":[{\\"t\\":42,\\"i\\":3,\\"f\\":{\\"t\\":4,\\"i\\":2}},{\\"t\\":10,\\"i\\":4,\\"p\\":{\\"k\\":[\\"v\\",\\"t\\",\\"d\\"],\\"v\\":[{\\"t\\":9,\\"i\\":5,\\"l\\":4,\\"a\\":[{\\"t\\":0,\\"s\\":1},{\\"t\\":0,\\"s\\":2},{\\"t\\":0,\\"s\\":3},{\\"t\\":2,\\"s\\":1}],\\"o\\":0},{\\"t\\":0,\\"s\\":-1},{\\"t\\":0,\\"s\\":3}],\\"s\\":3},\\"o\\":0}]}],\\"s\\":2},\\"o\\":0}},\\"f\\":16383,\\"m\\":[2]}"`; diff --git a/packages/seroval/test/__snapshots__/map.test.ts.snap b/packages/seroval/test/__snapshots__/map.test.ts.snap index d06eda25..07eaff11 100644 --- a/packages/seroval/test/__snapshots__/map.test.ts.snap +++ b/packages/seroval/test/__snapshots__/map.test.ts.snap @@ -4,7 +4,7 @@ exports[`Map > compat > should fallback to Symbol.iterator 1`] = `"(h=>(Object.a exports[`Map > compat > should throw an error for unsupported target 1`] = `"Unsupported type \\"[object Map]\\""`; -exports[`Map > compat#toJSON > should fallback to Symbol.iterator 1`] = `"{\\"t\\":{\\"t\\":11,\\"i\\":0,\\"p\\":{\\"k\\":[0],\\"v\\":[{\\"t\\":10,\\"i\\":1,\\"p\\":{\\"k\\":[\\"v\\",\\"t\\",\\"d\\"],\\"v\\":[{\\"t\\":9,\\"i\\":2,\\"l\\":3,\\"a\\":[{\\"t\\":9,\\"i\\":3,\\"l\\":2,\\"a\\":[{\\"t\\":0,\\"s\\":1},{\\"t\\":0,\\"s\\":2}],\\"o\\":0},{\\"t\\":9,\\"i\\":4,\\"l\\":2,\\"a\\":[{\\"t\\":0,\\"s\\":3},{\\"t\\":0,\\"s\\":4}],\\"o\\":0},{\\"t\\":2,\\"s\\":1}],\\"o\\":0},{\\"t\\":0,\\"s\\":-1},{\\"t\\":0,\\"s\\":2}],\\"s\\":3},\\"o\\":0,\\"x\\":{}}],\\"s\\":1},\\"o\\":0,\\"x\\":{\\"1\\":{\\"t\\":17,\\"i\\":5,\\"s\\":3},\\"2\\":{\\"t\\":42,\\"i\\":6,\\"x\\":{\\"1\\":{\\"t\\":4,\\"i\\":5}}}}},\\"f\\":16351,\\"m\\":[5]}"`; +exports[`Map > compat#toJSON > should fallback to Symbol.iterator 1`] = `"{\\"t\\":{\\"t\\":11,\\"i\\":0,\\"p\\":{\\"k\\":[{\\"t\\":17,\\"i\\":1,\\"s\\":3}],\\"v\\":[{\\"t\\":43,\\"a\\":[{\\"t\\":42,\\"i\\":2,\\"f\\":{\\"t\\":4,\\"i\\":1}},{\\"t\\":10,\\"i\\":3,\\"p\\":{\\"k\\":[\\"v\\",\\"t\\",\\"d\\"],\\"v\\":[{\\"t\\":9,\\"i\\":4,\\"l\\":3,\\"a\\":[{\\"t\\":9,\\"i\\":5,\\"l\\":2,\\"a\\":[{\\"t\\":0,\\"s\\":1},{\\"t\\":0,\\"s\\":2}],\\"o\\":0},{\\"t\\":9,\\"i\\":6,\\"l\\":2,\\"a\\":[{\\"t\\":0,\\"s\\":3},{\\"t\\":0,\\"s\\":4}],\\"o\\":0},{\\"t\\":2,\\"s\\":1}],\\"o\\":0},{\\"t\\":0,\\"s\\":-1},{\\"t\\":0,\\"s\\":2}],\\"s\\":3},\\"o\\":0}]}],\\"s\\":1},\\"o\\":0},\\"f\\":16351,\\"m\\":[1]}"`; exports[`Map > compat#toJSON > should throw an error for unsupported target 1`] = `"Unsupported type \\"[object Map]\\""`; @@ -40,7 +40,7 @@ exports[`Map > crossSerializeStream > supports Map 2`] = `"_$.Ps($R[0],$R[1]=($R exports[`Map > crossSerializeStream > supports Map 3`] = `"{\\"t\\":28,\\"i\\":0}"`; -exports[`Map > crossSerializeStream > supports Map 4`] = `"{\\"t\\":29,\\"i\\":0,\\"f\\":{\\"t\\":8,\\"i\\":1,\\"e\\":{\\"k\\":[{\\"t\\":0,\\"s\\":1},{\\"t\\":0,\\"s\\":3}],\\"v\\":[{\\"t\\":0,\\"s\\":2},{\\"t\\":0,\\"s\\":4}],\\"s\\":2},\\"x\\":{\\"0\\":{\\"t\\":41,\\"i\\":2}}}}"`; +exports[`Map > crossSerializeStream > supports Map 4`] = `"{\\"t\\":29,\\"i\\":0,\\"f\\":{\\"t\\":8,\\"i\\":1,\\"e\\":{\\"k\\":[{\\"t\\":0,\\"s\\":1},{\\"t\\":0,\\"s\\":3}],\\"v\\":[{\\"t\\":0,\\"s\\":2},{\\"t\\":0,\\"s\\":4}],\\"s\\":2},\\"f\\":{\\"t\\":41,\\"i\\":2}}}"`; exports[`Map > crossSerializeStream > supports self-recursion 1`] = `"$R[0]=($R[3]=[],new Map([[$R[1]=_$.P(),$R[2]=_$.P()]]))"`; @@ -48,7 +48,7 @@ exports[`Map > crossSerializeStream > supports self-recursion 2`] = `"_$.Ps($R[1 exports[`Map > crossSerializeStream > supports self-recursion 3`] = `"_$.Ps($R[2],$R[0])"`; -exports[`Map > crossSerializeStream > supports self-recursion 4`] = `"{\\"t\\":8,\\"i\\":0,\\"e\\":{\\"k\\":[{\\"t\\":28,\\"i\\":1}],\\"v\\":[{\\"t\\":28,\\"i\\":2}],\\"s\\":1},\\"x\\":{\\"0\\":{\\"t\\":41,\\"i\\":3}}}"`; +exports[`Map > crossSerializeStream > supports self-recursion 4`] = `"{\\"t\\":8,\\"i\\":0,\\"e\\":{\\"k\\":[{\\"t\\":28,\\"i\\":1}],\\"v\\":[{\\"t\\":28,\\"i\\":2}],\\"s\\":1},\\"f\\":{\\"t\\":41,\\"i\\":3}}"`; exports[`Map > crossSerializeStream > supports self-recursion 5`] = `"{\\"t\\":29,\\"i\\":1,\\"f\\":{\\"t\\":4,\\"i\\":0}}"`; @@ -62,18 +62,18 @@ exports[`Map > serializeAsync > supports Map 1`] = `"(h=>(Promise.resolve((h=[], exports[`Map > serializeAsync > supports self-recursion 1`] = `"((h,j)=>(j=(h=[],new Map([[Promise.resolve().then(()=>j),Promise.resolve().then(()=>j)]]))))()"`; -exports[`Map > toCrossJSON > supports Map 1`] = `"{\\"t\\":8,\\"i\\":0,\\"e\\":{\\"k\\":[{\\"t\\":0,\\"s\\":1},{\\"t\\":0,\\"s\\":3}],\\"v\\":[{\\"t\\":0,\\"s\\":2},{\\"t\\":0,\\"s\\":4}],\\"s\\":2},\\"x\\":{\\"0\\":{\\"t\\":41,\\"i\\":1}}}"`; +exports[`Map > toCrossJSON > supports Map 1`] = `"{\\"t\\":8,\\"i\\":0,\\"e\\":{\\"k\\":[{\\"t\\":0,\\"s\\":1},{\\"t\\":0,\\"s\\":3}],\\"v\\":[{\\"t\\":0,\\"s\\":2},{\\"t\\":0,\\"s\\":4}],\\"s\\":2},\\"f\\":{\\"t\\":41,\\"i\\":1}}"`; -exports[`Map > toCrossJSON > supports self-recursion 1`] = `"{\\"t\\":8,\\"i\\":0,\\"e\\":{\\"k\\":[{\\"t\\":4,\\"i\\":0}],\\"v\\":[{\\"t\\":4,\\"i\\":0}],\\"s\\":1},\\"x\\":{\\"0\\":{\\"t\\":41,\\"i\\":1}}}"`; +exports[`Map > toCrossJSON > supports self-recursion 1`] = `"{\\"t\\":8,\\"i\\":0,\\"e\\":{\\"k\\":[{\\"t\\":4,\\"i\\":0}],\\"v\\":[{\\"t\\":4,\\"i\\":0}],\\"s\\":1},\\"f\\":{\\"t\\":41,\\"i\\":1}}"`; -exports[`Map > toCrossJSONAsync > supports Map 1`] = `"{\\"t\\":12,\\"i\\":0,\\"s\\":1,\\"f\\":{\\"t\\":8,\\"i\\":1,\\"e\\":{\\"k\\":[{\\"t\\":0,\\"s\\":1},{\\"t\\":0,\\"s\\":3}],\\"v\\":[{\\"t\\":0,\\"s\\":2},{\\"t\\":0,\\"s\\":4}],\\"s\\":2},\\"x\\":{\\"0\\":{\\"t\\":41,\\"i\\":2}}}}"`; +exports[`Map > toCrossJSONAsync > supports Map 1`] = `"{\\"t\\":12,\\"i\\":0,\\"s\\":1,\\"f\\":{\\"t\\":8,\\"i\\":1,\\"e\\":{\\"k\\":[{\\"t\\":0,\\"s\\":1},{\\"t\\":0,\\"s\\":3}],\\"v\\":[{\\"t\\":0,\\"s\\":2},{\\"t\\":0,\\"s\\":4}],\\"s\\":2},\\"f\\":{\\"t\\":41,\\"i\\":2}}}"`; -exports[`Map > toCrossJSONAsync > supports self-recursion 1`] = `"{\\"t\\":8,\\"i\\":0,\\"e\\":{\\"k\\":[{\\"t\\":12,\\"i\\":1,\\"s\\":1,\\"f\\":{\\"t\\":4,\\"i\\":0}}],\\"v\\":[{\\"t\\":12,\\"i\\":2,\\"s\\":1,\\"f\\":{\\"t\\":4,\\"i\\":0}}],\\"s\\":1},\\"x\\":{\\"0\\":{\\"t\\":41,\\"i\\":3}}}"`; +exports[`Map > toCrossJSONAsync > supports self-recursion 1`] = `"{\\"t\\":8,\\"i\\":0,\\"e\\":{\\"k\\":[{\\"t\\":12,\\"i\\":1,\\"s\\":1,\\"f\\":{\\"t\\":4,\\"i\\":0}}],\\"v\\":[{\\"t\\":12,\\"i\\":2,\\"s\\":1,\\"f\\":{\\"t\\":4,\\"i\\":0}}],\\"s\\":1},\\"f\\":{\\"t\\":41,\\"i\\":3}}"`; -exports[`Map > toJSON > supports Map 1`] = `"{\\"t\\":{\\"t\\":8,\\"i\\":0,\\"e\\":{\\"k\\":[{\\"t\\":0,\\"s\\":1},{\\"t\\":0,\\"s\\":3}],\\"v\\":[{\\"t\\":0,\\"s\\":2},{\\"t\\":0,\\"s\\":4}],\\"s\\":2},\\"x\\":{\\"0\\":{\\"t\\":41,\\"i\\":1}}},\\"f\\":16383,\\"m\\":[]}"`; +exports[`Map > toJSON > supports Map 1`] = `"{\\"t\\":{\\"t\\":8,\\"i\\":0,\\"e\\":{\\"k\\":[{\\"t\\":0,\\"s\\":1},{\\"t\\":0,\\"s\\":3}],\\"v\\":[{\\"t\\":0,\\"s\\":2},{\\"t\\":0,\\"s\\":4}],\\"s\\":2},\\"f\\":{\\"t\\":41,\\"i\\":1}},\\"f\\":16383,\\"m\\":[]}"`; -exports[`Map > toJSON > supports self-recursion 1`] = `"{\\"t\\":{\\"t\\":8,\\"i\\":0,\\"e\\":{\\"k\\":[{\\"t\\":4,\\"i\\":0}],\\"v\\":[{\\"t\\":4,\\"i\\":0}],\\"s\\":1},\\"x\\":{\\"0\\":{\\"t\\":41,\\"i\\":1}}},\\"f\\":16383,\\"m\\":[0]}"`; +exports[`Map > toJSON > supports self-recursion 1`] = `"{\\"t\\":{\\"t\\":8,\\"i\\":0,\\"e\\":{\\"k\\":[{\\"t\\":4,\\"i\\":0}],\\"v\\":[{\\"t\\":4,\\"i\\":0}],\\"s\\":1},\\"f\\":{\\"t\\":41,\\"i\\":1}},\\"f\\":16383,\\"m\\":[0]}"`; -exports[`Map > toJSONAsync > supports Map 1`] = `"{\\"t\\":{\\"t\\":12,\\"i\\":0,\\"s\\":1,\\"f\\":{\\"t\\":8,\\"i\\":1,\\"e\\":{\\"k\\":[{\\"t\\":0,\\"s\\":1},{\\"t\\":0,\\"s\\":3}],\\"v\\":[{\\"t\\":0,\\"s\\":2},{\\"t\\":0,\\"s\\":4}],\\"s\\":2},\\"x\\":{\\"0\\":{\\"t\\":41,\\"i\\":2}}}},\\"f\\":16383,\\"m\\":[]}"`; +exports[`Map > toJSONAsync > supports Map 1`] = `"{\\"t\\":{\\"t\\":12,\\"i\\":0,\\"s\\":1,\\"f\\":{\\"t\\":8,\\"i\\":1,\\"e\\":{\\"k\\":[{\\"t\\":0,\\"s\\":1},{\\"t\\":0,\\"s\\":3}],\\"v\\":[{\\"t\\":0,\\"s\\":2},{\\"t\\":0,\\"s\\":4}],\\"s\\":2},\\"f\\":{\\"t\\":41,\\"i\\":2}}},\\"f\\":16383,\\"m\\":[]}"`; -exports[`Map > toJSONAsync > supports self-recursion 1`] = `"{\\"t\\":{\\"t\\":8,\\"i\\":0,\\"e\\":{\\"k\\":[{\\"t\\":12,\\"i\\":1,\\"s\\":1,\\"f\\":{\\"t\\":4,\\"i\\":0}}],\\"v\\":[{\\"t\\":12,\\"i\\":2,\\"s\\":1,\\"f\\":{\\"t\\":4,\\"i\\":0}}],\\"s\\":1},\\"x\\":{\\"0\\":{\\"t\\":41,\\"i\\":3}}},\\"f\\":16383,\\"m\\":[0]}"`; +exports[`Map > toJSONAsync > supports self-recursion 1`] = `"{\\"t\\":{\\"t\\":8,\\"i\\":0,\\"e\\":{\\"k\\":[{\\"t\\":12,\\"i\\":1,\\"s\\":1,\\"f\\":{\\"t\\":4,\\"i\\":0}}],\\"v\\":[{\\"t\\":12,\\"i\\":2,\\"s\\":1,\\"f\\":{\\"t\\":4,\\"i\\":0}}],\\"s\\":1},\\"f\\":{\\"t\\":41,\\"i\\":3}},\\"f\\":16383,\\"m\\":[0]}"`; diff --git a/packages/seroval/test/__snapshots__/mutual-cycle.test.ts.snap b/packages/seroval/test/__snapshots__/mutual-cycle.test.ts.snap index ff5e6ab3..f646e150 100644 --- a/packages/seroval/test/__snapshots__/mutual-cycle.test.ts.snap +++ b/packages/seroval/test/__snapshots__/mutual-cycle.test.ts.snap @@ -74,15 +74,15 @@ exports[`mutual cyclic references > serializeAsync > supports Objects and Object exports[`mutual cyclic references > toCrossJSON > supports Arrays and Arrays 1`] = `"{\\"t\\":9,\\"i\\":0,\\"l\\":2,\\"a\\":[{\\"t\\":9,\\"i\\":1,\\"l\\":1,\\"a\\":[{\\"t\\":9,\\"i\\":2,\\"l\\":1,\\"a\\":[{\\"t\\":4,\\"i\\":1}],\\"o\\":0}],\\"o\\":0},{\\"t\\":4,\\"i\\":2}],\\"o\\":0}"`; -exports[`mutual cyclic references > toCrossJSON > supports Arrays and Objects 1`] = `"{\\"t\\":9,\\"i\\":0,\\"l\\":2,\\"a\\":[{\\"t\\":9,\\"i\\":1,\\"l\\":1,\\"a\\":[{\\"t\\":10,\\"i\\":2,\\"p\\":{\\"k\\":[\\"0\\"],\\"v\\":[{\\"t\\":4,\\"i\\":1}],\\"s\\":1},\\"o\\":0,\\"x\\":{}}],\\"o\\":0},{\\"t\\":4,\\"i\\":2}],\\"o\\":0}"`; +exports[`mutual cyclic references > toCrossJSON > supports Arrays and Objects 1`] = `"{\\"t\\":9,\\"i\\":0,\\"l\\":2,\\"a\\":[{\\"t\\":9,\\"i\\":1,\\"l\\":1,\\"a\\":[{\\"t\\":10,\\"i\\":2,\\"p\\":{\\"k\\":[\\"0\\"],\\"v\\":[{\\"t\\":4,\\"i\\":1}],\\"s\\":1},\\"o\\":0}],\\"o\\":0},{\\"t\\":4,\\"i\\":2}],\\"o\\":0}"`; -exports[`mutual cyclic references > toCrossJSON > supports Objects and Objects 1`] = `"{\\"t\\":9,\\"i\\":0,\\"l\\":2,\\"a\\":[{\\"t\\":10,\\"i\\":1,\\"p\\":{\\"k\\":[\\"0\\"],\\"v\\":[{\\"t\\":10,\\"i\\":2,\\"p\\":{\\"k\\":[\\"0\\"],\\"v\\":[{\\"t\\":4,\\"i\\":1}],\\"s\\":1},\\"o\\":0,\\"x\\":{}}],\\"s\\":1},\\"o\\":0,\\"x\\":{}},{\\"t\\":4,\\"i\\":2}],\\"o\\":0}"`; +exports[`mutual cyclic references > toCrossJSON > supports Objects and Objects 1`] = `"{\\"t\\":9,\\"i\\":0,\\"l\\":2,\\"a\\":[{\\"t\\":10,\\"i\\":1,\\"p\\":{\\"k\\":[\\"0\\"],\\"v\\":[{\\"t\\":10,\\"i\\":2,\\"p\\":{\\"k\\":[\\"0\\"],\\"v\\":[{\\"t\\":4,\\"i\\":1}],\\"s\\":1},\\"o\\":0}],\\"s\\":1},\\"o\\":0},{\\"t\\":4,\\"i\\":2}],\\"o\\":0}"`; exports[`mutual cyclic references > toCrossJSONAsync > supports Arrays and Arrays 1`] = `"{\\"t\\":9,\\"i\\":0,\\"l\\":2,\\"a\\":[{\\"t\\":9,\\"i\\":1,\\"l\\":1,\\"a\\":[{\\"t\\":12,\\"i\\":2,\\"s\\":1,\\"f\\":{\\"t\\":9,\\"i\\":3,\\"l\\":1,\\"a\\":[{\\"t\\":12,\\"i\\":4,\\"s\\":1,\\"f\\":{\\"t\\":4,\\"i\\":1}}],\\"o\\":0}}],\\"o\\":0},{\\"t\\":4,\\"i\\":3}],\\"o\\":0}"`; -exports[`mutual cyclic references > toCrossJSONAsync > supports Arrays and Objects 1`] = `"{\\"t\\":9,\\"i\\":0,\\"l\\":2,\\"a\\":[{\\"t\\":9,\\"i\\":1,\\"l\\":1,\\"a\\":[{\\"t\\":12,\\"i\\":2,\\"s\\":1,\\"f\\":{\\"t\\":10,\\"i\\":3,\\"p\\":{\\"k\\":[\\"0\\"],\\"v\\":[{\\"t\\":12,\\"i\\":4,\\"s\\":1,\\"f\\":{\\"t\\":4,\\"i\\":1}}],\\"s\\":1},\\"o\\":0,\\"x\\":{}}}],\\"o\\":0},{\\"t\\":4,\\"i\\":3}],\\"o\\":0}"`; +exports[`mutual cyclic references > toCrossJSONAsync > supports Arrays and Objects 1`] = `"{\\"t\\":9,\\"i\\":0,\\"l\\":2,\\"a\\":[{\\"t\\":9,\\"i\\":1,\\"l\\":1,\\"a\\":[{\\"t\\":12,\\"i\\":2,\\"s\\":1,\\"f\\":{\\"t\\":10,\\"i\\":3,\\"p\\":{\\"k\\":[\\"0\\"],\\"v\\":[{\\"t\\":12,\\"i\\":4,\\"s\\":1,\\"f\\":{\\"t\\":4,\\"i\\":1}}],\\"s\\":1},\\"o\\":0}}],\\"o\\":0},{\\"t\\":4,\\"i\\":3}],\\"o\\":0}"`; -exports[`mutual cyclic references > toCrossJSONAsync > supports Objects and Objects 1`] = `"{\\"t\\":9,\\"i\\":0,\\"l\\":2,\\"a\\":[{\\"t\\":10,\\"i\\":1,\\"p\\":{\\"k\\":[\\"0\\"],\\"v\\":[{\\"t\\":12,\\"i\\":2,\\"s\\":1,\\"f\\":{\\"t\\":10,\\"i\\":3,\\"p\\":{\\"k\\":[\\"0\\"],\\"v\\":[{\\"t\\":12,\\"i\\":4,\\"s\\":1,\\"f\\":{\\"t\\":4,\\"i\\":1}}],\\"s\\":1},\\"o\\":0,\\"x\\":{}}}],\\"s\\":1},\\"o\\":0,\\"x\\":{}},{\\"t\\":4,\\"i\\":3}],\\"o\\":0}"`; +exports[`mutual cyclic references > toCrossJSONAsync > supports Objects and Objects 1`] = `"{\\"t\\":9,\\"i\\":0,\\"l\\":2,\\"a\\":[{\\"t\\":10,\\"i\\":1,\\"p\\":{\\"k\\":[\\"0\\"],\\"v\\":[{\\"t\\":12,\\"i\\":2,\\"s\\":1,\\"f\\":{\\"t\\":10,\\"i\\":3,\\"p\\":{\\"k\\":[\\"0\\"],\\"v\\":[{\\"t\\":12,\\"i\\":4,\\"s\\":1,\\"f\\":{\\"t\\":4,\\"i\\":1}}],\\"s\\":1},\\"o\\":0}}],\\"s\\":1},\\"o\\":0},{\\"t\\":4,\\"i\\":3}],\\"o\\":0}"`; exports[`mutual cyclic references > toCrossJSONStream > supports Arrays and Arrays 1`] = `"{\\"t\\":9,\\"i\\":0,\\"l\\":2,\\"a\\":[{\\"t\\":9,\\"i\\":1,\\"l\\":1,\\"a\\":[{\\"t\\":28,\\"i\\":2}],\\"o\\":0},{\\"t\\":9,\\"i\\":3,\\"l\\":1,\\"a\\":[{\\"t\\":28,\\"i\\":4}],\\"o\\":0}],\\"o\\":0}"`; @@ -90,13 +90,13 @@ exports[`mutual cyclic references > toCrossJSONStream > supports Arrays and Arra exports[`mutual cyclic references > toCrossJSONStream > supports Arrays and Arrays 3`] = `"{\\"t\\":29,\\"i\\":4,\\"f\\":{\\"t\\":4,\\"i\\":1}}"`; -exports[`mutual cyclic references > toCrossJSONStream > supports Arrays and Objects 1`] = `"{\\"t\\":9,\\"i\\":0,\\"l\\":2,\\"a\\":[{\\"t\\":9,\\"i\\":1,\\"l\\":1,\\"a\\":[{\\"t\\":28,\\"i\\":2}],\\"o\\":0},{\\"t\\":10,\\"i\\":3,\\"p\\":{\\"k\\":[\\"0\\"],\\"v\\":[{\\"t\\":28,\\"i\\":4}],\\"s\\":1},\\"o\\":0,\\"x\\":{}}],\\"o\\":0}"`; +exports[`mutual cyclic references > toCrossJSONStream > supports Arrays and Objects 1`] = `"{\\"t\\":9,\\"i\\":0,\\"l\\":2,\\"a\\":[{\\"t\\":9,\\"i\\":1,\\"l\\":1,\\"a\\":[{\\"t\\":28,\\"i\\":2}],\\"o\\":0},{\\"t\\":10,\\"i\\":3,\\"p\\":{\\"k\\":[\\"0\\"],\\"v\\":[{\\"t\\":28,\\"i\\":4}],\\"s\\":1},\\"o\\":0}],\\"o\\":0}"`; exports[`mutual cyclic references > toCrossJSONStream > supports Arrays and Objects 2`] = `"{\\"t\\":29,\\"i\\":2,\\"f\\":{\\"t\\":4,\\"i\\":3}}"`; exports[`mutual cyclic references > toCrossJSONStream > supports Arrays and Objects 3`] = `"{\\"t\\":29,\\"i\\":4,\\"f\\":{\\"t\\":4,\\"i\\":1}}"`; -exports[`mutual cyclic references > toCrossJSONStream > supports Objects and Objects 1`] = `"{\\"t\\":9,\\"i\\":0,\\"l\\":2,\\"a\\":[{\\"t\\":10,\\"i\\":1,\\"p\\":{\\"k\\":[\\"0\\"],\\"v\\":[{\\"t\\":28,\\"i\\":2}],\\"s\\":1},\\"o\\":0,\\"x\\":{}},{\\"t\\":10,\\"i\\":3,\\"p\\":{\\"k\\":[\\"0\\"],\\"v\\":[{\\"t\\":28,\\"i\\":4}],\\"s\\":1},\\"o\\":0,\\"x\\":{}}],\\"o\\":0}"`; +exports[`mutual cyclic references > toCrossJSONStream > supports Objects and Objects 1`] = `"{\\"t\\":9,\\"i\\":0,\\"l\\":2,\\"a\\":[{\\"t\\":10,\\"i\\":1,\\"p\\":{\\"k\\":[\\"0\\"],\\"v\\":[{\\"t\\":28,\\"i\\":2}],\\"s\\":1},\\"o\\":0},{\\"t\\":10,\\"i\\":3,\\"p\\":{\\"k\\":[\\"0\\"],\\"v\\":[{\\"t\\":28,\\"i\\":4}],\\"s\\":1},\\"o\\":0}],\\"o\\":0}"`; exports[`mutual cyclic references > toCrossJSONStream > supports Objects and Objects 2`] = `"{\\"t\\":29,\\"i\\":2,\\"f\\":{\\"t\\":4,\\"i\\":3}}"`; @@ -104,12 +104,12 @@ exports[`mutual cyclic references > toCrossJSONStream > supports Objects and Obj exports[`mutual cyclic references > toJSON > supports Arrays and Arrays 1`] = `"{\\"t\\":{\\"t\\":9,\\"i\\":0,\\"l\\":2,\\"a\\":[{\\"t\\":9,\\"i\\":1,\\"l\\":1,\\"a\\":[{\\"t\\":9,\\"i\\":2,\\"l\\":1,\\"a\\":[{\\"t\\":4,\\"i\\":1}],\\"o\\":0}],\\"o\\":0},{\\"t\\":4,\\"i\\":2}],\\"o\\":0},\\"f\\":16383,\\"m\\":[1,2]}"`; -exports[`mutual cyclic references > toJSON > supports Arrays and Objects 1`] = `"{\\"t\\":{\\"t\\":9,\\"i\\":0,\\"l\\":2,\\"a\\":[{\\"t\\":9,\\"i\\":1,\\"l\\":1,\\"a\\":[{\\"t\\":10,\\"i\\":2,\\"p\\":{\\"k\\":[\\"0\\"],\\"v\\":[{\\"t\\":4,\\"i\\":1}],\\"s\\":1},\\"o\\":0,\\"x\\":{}}],\\"o\\":0},{\\"t\\":4,\\"i\\":2}],\\"o\\":0},\\"f\\":16383,\\"m\\":[1,2]}"`; +exports[`mutual cyclic references > toJSON > supports Arrays and Objects 1`] = `"{\\"t\\":{\\"t\\":9,\\"i\\":0,\\"l\\":2,\\"a\\":[{\\"t\\":9,\\"i\\":1,\\"l\\":1,\\"a\\":[{\\"t\\":10,\\"i\\":2,\\"p\\":{\\"k\\":[\\"0\\"],\\"v\\":[{\\"t\\":4,\\"i\\":1}],\\"s\\":1},\\"o\\":0}],\\"o\\":0},{\\"t\\":4,\\"i\\":2}],\\"o\\":0},\\"f\\":16383,\\"m\\":[1,2]}"`; -exports[`mutual cyclic references > toJSON > supports Objects and Objects 1`] = `"{\\"t\\":{\\"t\\":9,\\"i\\":0,\\"l\\":2,\\"a\\":[{\\"t\\":10,\\"i\\":1,\\"p\\":{\\"k\\":[\\"0\\"],\\"v\\":[{\\"t\\":10,\\"i\\":2,\\"p\\":{\\"k\\":[\\"0\\"],\\"v\\":[{\\"t\\":4,\\"i\\":1}],\\"s\\":1},\\"o\\":0,\\"x\\":{}}],\\"s\\":1},\\"o\\":0,\\"x\\":{}},{\\"t\\":4,\\"i\\":2}],\\"o\\":0},\\"f\\":16383,\\"m\\":[1,2]}"`; +exports[`mutual cyclic references > toJSON > supports Objects and Objects 1`] = `"{\\"t\\":{\\"t\\":9,\\"i\\":0,\\"l\\":2,\\"a\\":[{\\"t\\":10,\\"i\\":1,\\"p\\":{\\"k\\":[\\"0\\"],\\"v\\":[{\\"t\\":10,\\"i\\":2,\\"p\\":{\\"k\\":[\\"0\\"],\\"v\\":[{\\"t\\":4,\\"i\\":1}],\\"s\\":1},\\"o\\":0}],\\"s\\":1},\\"o\\":0},{\\"t\\":4,\\"i\\":2}],\\"o\\":0},\\"f\\":16383,\\"m\\":[1,2]}"`; exports[`mutual cyclic references > toJSONAsync > supports Arrays and Arrays 1`] = `"{\\"t\\":{\\"t\\":9,\\"i\\":0,\\"l\\":2,\\"a\\":[{\\"t\\":9,\\"i\\":1,\\"l\\":1,\\"a\\":[{\\"t\\":12,\\"i\\":2,\\"s\\":1,\\"f\\":{\\"t\\":9,\\"i\\":3,\\"l\\":1,\\"a\\":[{\\"t\\":12,\\"i\\":4,\\"s\\":1,\\"f\\":{\\"t\\":4,\\"i\\":1}}],\\"o\\":0}}],\\"o\\":0},{\\"t\\":4,\\"i\\":3}],\\"o\\":0},\\"f\\":16383,\\"m\\":[1,3]}"`; -exports[`mutual cyclic references > toJSONAsync > supports Arrays and Objects 1`] = `"{\\"t\\":{\\"t\\":9,\\"i\\":0,\\"l\\":2,\\"a\\":[{\\"t\\":9,\\"i\\":1,\\"l\\":1,\\"a\\":[{\\"t\\":12,\\"i\\":2,\\"s\\":1,\\"f\\":{\\"t\\":10,\\"i\\":3,\\"p\\":{\\"k\\":[\\"0\\"],\\"v\\":[{\\"t\\":12,\\"i\\":4,\\"s\\":1,\\"f\\":{\\"t\\":4,\\"i\\":1}}],\\"s\\":1},\\"o\\":0,\\"x\\":{}}}],\\"o\\":0},{\\"t\\":4,\\"i\\":3}],\\"o\\":0},\\"f\\":16383,\\"m\\":[1,3]}"`; +exports[`mutual cyclic references > toJSONAsync > supports Arrays and Objects 1`] = `"{\\"t\\":{\\"t\\":9,\\"i\\":0,\\"l\\":2,\\"a\\":[{\\"t\\":9,\\"i\\":1,\\"l\\":1,\\"a\\":[{\\"t\\":12,\\"i\\":2,\\"s\\":1,\\"f\\":{\\"t\\":10,\\"i\\":3,\\"p\\":{\\"k\\":[\\"0\\"],\\"v\\":[{\\"t\\":12,\\"i\\":4,\\"s\\":1,\\"f\\":{\\"t\\":4,\\"i\\":1}}],\\"s\\":1},\\"o\\":0}}],\\"o\\":0},{\\"t\\":4,\\"i\\":3}],\\"o\\":0},\\"f\\":16383,\\"m\\":[1,3]}"`; -exports[`mutual cyclic references > toJSONAsync > supports Objects and Objects 1`] = `"{\\"t\\":{\\"t\\":9,\\"i\\":0,\\"l\\":2,\\"a\\":[{\\"t\\":10,\\"i\\":1,\\"p\\":{\\"k\\":[\\"0\\"],\\"v\\":[{\\"t\\":12,\\"i\\":2,\\"s\\":1,\\"f\\":{\\"t\\":10,\\"i\\":3,\\"p\\":{\\"k\\":[\\"0\\"],\\"v\\":[{\\"t\\":12,\\"i\\":4,\\"s\\":1,\\"f\\":{\\"t\\":4,\\"i\\":1}}],\\"s\\":1},\\"o\\":0,\\"x\\":{}}}],\\"s\\":1},\\"o\\":0,\\"x\\":{}},{\\"t\\":4,\\"i\\":3}],\\"o\\":0},\\"f\\":16383,\\"m\\":[1,3]}"`; +exports[`mutual cyclic references > toJSONAsync > supports Objects and Objects 1`] = `"{\\"t\\":{\\"t\\":9,\\"i\\":0,\\"l\\":2,\\"a\\":[{\\"t\\":10,\\"i\\":1,\\"p\\":{\\"k\\":[\\"0\\"],\\"v\\":[{\\"t\\":12,\\"i\\":2,\\"s\\":1,\\"f\\":{\\"t\\":10,\\"i\\":3,\\"p\\":{\\"k\\":[\\"0\\"],\\"v\\":[{\\"t\\":12,\\"i\\":4,\\"s\\":1,\\"f\\":{\\"t\\":4,\\"i\\":1}}],\\"s\\":1},\\"o\\":0}}],\\"s\\":1},\\"o\\":0},{\\"t\\":4,\\"i\\":3}],\\"o\\":0},\\"f\\":16383,\\"m\\":[1,3]}"`; diff --git a/packages/seroval/test/__snapshots__/null-constructor.test.ts.snap b/packages/seroval/test/__snapshots__/null-constructor.test.ts.snap index f4556ae3..0012c8b1 100644 --- a/packages/seroval/test/__snapshots__/null-constructor.test.ts.snap +++ b/packages/seroval/test/__snapshots__/null-constructor.test.ts.snap @@ -2,35 +2,35 @@ exports[`null-constructor > compat > should use manual assignment instead of Object.assign 1`] = `"(h=>((h=Object.create(null),h.hello=\\"world\\",h)))()"`; -exports[`null-constructor > compat#toJSON > should use manual assignment instead of Object.assign 1`] = `"{\\"t\\":{\\"t\\":11,\\"i\\":0,\\"p\\":{\\"k\\":[\\"hello\\"],\\"v\\":[{\\"t\\":1,\\"s\\":\\"world\\"}],\\"s\\":1},\\"o\\":0,\\"x\\":{}},\\"f\\":16255,\\"m\\":[]}"`; +exports[`null-constructor > compat#toJSON > should use manual assignment instead of Object.assign 1`] = `"{\\"t\\":{\\"t\\":11,\\"i\\":0,\\"p\\":{\\"k\\":[\\"hello\\"],\\"v\\":[{\\"t\\":1,\\"s\\":\\"world\\"}],\\"s\\":1},\\"o\\":0},\\"f\\":16255,\\"m\\":[]}"`; exports[`null-constructor > compat#toJSON > should use manual assignment instead of Object.assign 2`] = `"(h=>((h=Object.create(null),h.hello=\\"world\\",h)))()"`; exports[`null-constructor > crossSerialize > scoped > supports Object.create(null) 1`] = `"($R=>$R[0]=Object.assign(Object.create(null),{hello:\\"world\\"}))($R[\\"example\\"])"`; -exports[`null-constructor > crossSerialize > scoped > supports Symbol.iterator 1`] = `"($R=>$R[0]=Object.assign(Object.create(null),{[$R[3]=Symbol.iterator]:($R[4]=s=>(i,c,d,t)=>(i=0,t={[$R[3]]:()=>t,next:()=>{if(i>s.d)return{done:!0,value:void 0};c=i++,d=s.v[c];if(c===s.t)throw d;return{done:c===s.d,value:d}}}))($R[1]={v:$R[2]=[1,2,3,void 0],t:-1,d:3})}))($R[\\"example\\"])"`; +exports[`null-constructor > crossSerialize > scoped > supports Symbol.iterator 1`] = `"($R=>$R[0]=Object.assign(Object.create(null),{[$R[1]=Symbol.iterator]:($R[2]=s=>(i,c,d,t)=>(i=0,t={[$R[1]]:()=>t,next:()=>{if(i>s.d)return{done:!0,value:void 0};c=i++,d=s.v[c];if(c===s.t)throw d;return{done:c===s.d,value:d}}}))($R[3]={v:$R[4]=[1,2,3,void 0],t:-1,d:3})}))($R[\\"example\\"])"`; exports[`null-constructor > crossSerialize > scoped > supports self-recursion 1`] = `"($R=>$R[0]=Object.create(null),$R[0].b=$R[0].a=$R[0],$R[0])($R[\\"example\\"])"`; exports[`null-constructor > crossSerialize > supports Object.create(null) 1`] = `"($R[0]={hello:\\"world\\"},Object.freeze($R[0]),$R[0])"`; -exports[`null-constructor > crossSerialize > supports Symbol.iterator 1`] = `"$R[0]=Object.assign(Object.create(null),{[$R[3]=Symbol.iterator]:($R[4]=s=>(i,c,d,t)=>(i=0,t={[$R[3]]:()=>t,next:()=>{if(i>s.d)return{done:!0,value:void 0};c=i++,d=s.v[c];if(c===s.t)throw d;return{done:c===s.d,value:d}}}))($R[1]={v:$R[2]=[1,2,3,void 0],t:-1,d:3})})"`; +exports[`null-constructor > crossSerialize > supports Symbol.iterator 1`] = `"$R[0]=Object.assign(Object.create(null),{[$R[1]=Symbol.iterator]:($R[2]=s=>(i,c,d,t)=>(i=0,t={[$R[1]]:()=>t,next:()=>{if(i>s.d)return{done:!0,value:void 0};c=i++,d=s.v[c];if(c===s.t)throw d;return{done:c===s.d,value:d}}}))($R[3]={v:$R[4]=[1,2,3,void 0],t:-1,d:3})})"`; exports[`null-constructor > crossSerialize > supports self-recursion 1`] = `"($R[0]=Object.create(null),$R[0].b=$R[0].a=$R[0],$R[0])"`; exports[`null-constructor > crossSerializeAsync > scoped > supports Object.create(null) 1`] = `"($R=>$R[0]=Promise.resolve($R[1]=Object.assign(Object.create(null),{hello:\\"world\\"})))($R[\\"example\\"])"`; -exports[`null-constructor > crossSerializeAsync > scoped > supports Symbol.asyncIterator 1`] = `"($R=>$R[0]=Object.assign(Object.create(null),{[$R[3]=Symbol.asyncIterator]:($R[4]=s=>b=>(b=s.tee(),s=b[0],b=b[1].getReader(),{[$R[3]]:()=>this,next:()=>b.read().then(d=>{if(d.done)return{done:!0,value:void 0};d=d.value;if(d[0]===1)throw d[1];return{done:d[0]===2,value:d[1]}})}))($R[1]={v:$R[2]=[1,2,3,void 0],t:-1,d:3})}))($R[\\"example\\"])"`; +exports[`null-constructor > crossSerializeAsync > scoped > supports Symbol.asyncIterator 1`] = `"($R=>$R[0]=Object.assign(Object.create(null),{[$R[1]=Symbol.asyncIterator]:($R[2]=s=>b=>(b=s.tee(),s=b[0],b=b[1].getReader(),{[$R[1]]:()=>this,next:()=>b.read().then(d=>{if(d.done)return{done:!0,value:void 0};d=d.value;if(d[0]===1)throw d[1];return{done:d[0]===2,value:d[1]}})}))($R[3]={v:$R[4]=[1,2,3,void 0],t:-1,d:3})}))($R[\\"example\\"])"`; -exports[`null-constructor > crossSerializeAsync > scoped > supports Symbol.iterator 1`] = `"($R=>$R[0]=Promise.resolve($R[1]=Object.assign(Object.create(null),{[$R[4]=Symbol.iterator]:($R[5]=s=>(i,c,d,t)=>(i=0,t={[$R[4]]:()=>t,next:()=>{if(i>s.d)return{done:!0,value:void 0};c=i++,d=s.v[c];if(c===s.t)throw d;return{done:c===s.d,value:d}}}))($R[2]={v:$R[3]=[1,2,3,void 0],t:-1,d:3})})))($R[\\"example\\"])"`; +exports[`null-constructor > crossSerializeAsync > scoped > supports Symbol.iterator 1`] = `"($R=>$R[0]=Promise.resolve($R[1]=Object.assign(Object.create(null),{[$R[2]=Symbol.iterator]:($R[3]=s=>(i,c,d,t)=>(i=0,t={[$R[2]]:()=>t,next:()=>{if(i>s.d)return{done:!0,value:void 0};c=i++,d=s.v[c];if(c===s.t)throw d;return{done:c===s.d,value:d}}}))($R[4]={v:$R[5]=[1,2,3,void 0],t:-1,d:3})})))($R[\\"example\\"])"`; exports[`null-constructor > crossSerializeAsync > scoped > supports self-recursion 1`] = `"($R=>$R[0]=Object.assign(Object.create(null),{a:$R[1]=Promise.resolve().then(()=>$R[0]),b:$R[2]=Promise.resolve().then(()=>$R[0])}))($R[\\"example\\"])"`; exports[`null-constructor > crossSerializeAsync > supports Object.create(null) 1`] = `"$R[0]=Promise.resolve($R[1]=Object.assign(Object.create(null),{hello:\\"world\\"}))"`; -exports[`null-constructor > crossSerializeAsync > supports Symbol.asyncIterator 1`] = `"$R[0]=Object.assign(Object.create(null),{[$R[3]=Symbol.asyncIterator]:($R[4]=s=>b=>(b=s.tee(),s=b[0],b=b[1].getReader(),{[$R[3]]:()=>this,next:()=>b.read().then(d=>{if(d.done)return{done:!0,value:void 0};d=d.value;if(d[0]===1)throw d[1];return{done:d[0]===2,value:d[1]}})}))($R[1]={v:$R[2]=[1,2,3,void 0],t:-1,d:3})})"`; +exports[`null-constructor > crossSerializeAsync > supports Symbol.asyncIterator 1`] = `"$R[0]=Object.assign(Object.create(null),{[$R[1]=Symbol.asyncIterator]:($R[2]=s=>b=>(b=s.tee(),s=b[0],b=b[1].getReader(),{[$R[1]]:()=>this,next:()=>b.read().then(d=>{if(d.done)return{done:!0,value:void 0};d=d.value;if(d[0]===1)throw d[1];return{done:d[0]===2,value:d[1]}})}))($R[3]={v:$R[4]=[1,2,3,void 0],t:-1,d:3})})"`; -exports[`null-constructor > crossSerializeAsync > supports Symbol.iterator 1`] = `"$R[0]=Promise.resolve($R[1]=Object.assign(Object.create(null),{[$R[4]=Symbol.iterator]:($R[5]=s=>(i,c,d,t)=>(i=0,t={[$R[4]]:()=>t,next:()=>{if(i>s.d)return{done:!0,value:void 0};c=i++,d=s.v[c];if(c===s.t)throw d;return{done:c===s.d,value:d}}}))($R[2]={v:$R[3]=[1,2,3,void 0],t:-1,d:3})}))"`; +exports[`null-constructor > crossSerializeAsync > supports Symbol.iterator 1`] = `"$R[0]=Promise.resolve($R[1]=Object.assign(Object.create(null),{[$R[2]=Symbol.iterator]:($R[3]=s=>(i,c,d,t)=>(i=0,t={[$R[2]]:()=>t,next:()=>{if(i>s.d)return{done:!0,value:void 0};c=i++,d=s.v[c];if(c===s.t)throw d;return{done:c===s.d,value:d}}}))($R[4]={v:$R[5]=[1,2,3,void 0],t:-1,d:3})}))"`; exports[`null-constructor > crossSerializeAsync > supports self-recursion 1`] = `"$R[0]=Object.assign(Object.create(null),{a:$R[1]=Promise.resolve().then(()=>$R[0]),b:$R[2]=Promise.resolve().then(()=>$R[0])})"`; @@ -38,21 +38,21 @@ exports[`null-constructor > crossSerializeStream > scoped > supports Object.crea exports[`null-constructor > crossSerializeStream > scoped > supports Object.create(null) 2`] = `"($R=>_$.Ps($R[0],$R[1]=Object.assign(Object.create(null),{hello:\\"world\\"})))($R[\\"example\\"])"`; -exports[`null-constructor > crossSerializeStream > scoped > supports Symbol.asyncIterator 1`] = `"($R=>$R[0]=Object.assign(Object.create(null),{[$R[2]=Symbol.asyncIterator]:($R[3]=s=>b=>(b=s.tee(),s=b[0],b=b[1].getReader(),{[$R[2]]:()=>this,next:()=>b.read().then(d=>{if(d.done)return{done:!0,value:void 0};d=d.value;if(d[0]===1)throw d[1];return{done:d[0]===2,value:d[1]}})}))($R[1]=_$.S())}))($R[\\"example\\"])"`; +exports[`null-constructor > crossSerializeStream > scoped > supports Symbol.asyncIterator 1`] = `"($R=>$R[0]=Object.assign(Object.create(null),{[$R[1]=Symbol.asyncIterator]:($R[2]=s=>b=>(b=s.tee(),s=b[0],b=b[1].getReader(),{[$R[1]]:()=>this,next:()=>b.read().then(d=>{if(d.done)return{done:!0,value:void 0};d=d.value;if(d[0]===1)throw d[1];return{done:d[0]===2,value:d[1]}})}))($R[3]=_$.S())}))($R[\\"example\\"])"`; -exports[`null-constructor > crossSerializeStream > scoped > supports Symbol.asyncIterator 2`] = `"($R=>_$.Se($R[1],$R[4]=[0,1]))($R[\\"example\\"])"`; +exports[`null-constructor > crossSerializeStream > scoped > supports Symbol.asyncIterator 2`] = `"($R=>_$.Se($R[3],$R[4]=[0,1]))($R[\\"example\\"])"`; -exports[`null-constructor > crossSerializeStream > scoped > supports Symbol.asyncIterator 3`] = `"($R=>_$.Se($R[1],$R[5]=[0,2]))($R[\\"example\\"])"`; +exports[`null-constructor > crossSerializeStream > scoped > supports Symbol.asyncIterator 3`] = `"($R=>_$.Se($R[3],$R[5]=[0,2]))($R[\\"example\\"])"`; -exports[`null-constructor > crossSerializeStream > scoped > supports Symbol.asyncIterator 4`] = `"($R=>_$.Se($R[1],$R[6]=[0,3]))($R[\\"example\\"])"`; +exports[`null-constructor > crossSerializeStream > scoped > supports Symbol.asyncIterator 4`] = `"($R=>_$.Se($R[3],$R[6]=[0,3]))($R[\\"example\\"])"`; -exports[`null-constructor > crossSerializeStream > scoped > supports Symbol.asyncIterator 5`] = `"($R=>_$.Se($R[1],$R[7]=[2,void 0]))($R[\\"example\\"])"`; +exports[`null-constructor > crossSerializeStream > scoped > supports Symbol.asyncIterator 5`] = `"($R=>_$.Se($R[3],$R[7]=[2,void 0]))($R[\\"example\\"])"`; -exports[`null-constructor > crossSerializeStream > scoped > supports Symbol.asyncIterator 6`] = `"($R=>_$.Sc($R[1]))($R[\\"example\\"])"`; +exports[`null-constructor > crossSerializeStream > scoped > supports Symbol.asyncIterator 6`] = `"($R=>_$.Sc($R[3]))($R[\\"example\\"])"`; exports[`null-constructor > crossSerializeStream > scoped > supports Symbol.iterator 1`] = `"($R=>$R[0]=_$.P())($R[\\"example\\"])"`; -exports[`null-constructor > crossSerializeStream > scoped > supports Symbol.iterator 2`] = `"($R=>_$.Ps($R[0],$R[1]=Object.assign(Object.create(null),{[$R[4]=Symbol.iterator]:($R[5]=s=>(i,c,d,t)=>(i=0,t={[$R[4]]:()=>t,next:()=>{if(i>s.d)return{done:!0,value:void 0};c=i++,d=s.v[c];if(c===s.t)throw d;return{done:c===s.d,value:d}}}))($R[2]={v:$R[3]=[1,2,3,void 0],t:-1,d:3})})))($R[\\"example\\"])"`; +exports[`null-constructor > crossSerializeStream > scoped > supports Symbol.iterator 2`] = `"($R=>_$.Ps($R[0],$R[1]=Object.assign(Object.create(null),{[$R[2]=Symbol.iterator]:($R[3]=s=>(i,c,d,t)=>(i=0,t={[$R[2]]:()=>t,next:()=>{if(i>s.d)return{done:!0,value:void 0};c=i++,d=s.v[c];if(c===s.t)throw d;return{done:c===s.d,value:d}}}))($R[4]={v:$R[5]=[1,2,3,void 0],t:-1,d:3})})))($R[\\"example\\"])"`; exports[`null-constructor > crossSerializeStream > scoped > supports self-recursion 1`] = `"($R=>$R[0]=Object.assign(Object.create(null),{a:$R[1]=_$.P(),b:$R[2]=_$.P()}))($R[\\"example\\"])"`; @@ -64,21 +64,21 @@ exports[`null-constructor > crossSerializeStream > supports Object.create(null) exports[`null-constructor > crossSerializeStream > supports Object.create(null) 2`] = `"_$.Ps($R[0],$R[1]=Object.assign(Object.create(null),{hello:\\"world\\"}))"`; -exports[`null-constructor > crossSerializeStream > supports Symbol.asyncIterator 1`] = `"$R[0]=Object.assign(Object.create(null),{[$R[2]=Symbol.asyncIterator]:($R[3]=s=>b=>(b=s.tee(),s=b[0],b=b[1].getReader(),{[$R[2]]:()=>this,next:()=>b.read().then(d=>{if(d.done)return{done:!0,value:void 0};d=d.value;if(d[0]===1)throw d[1];return{done:d[0]===2,value:d[1]}})}))($R[1]=_$.S())})"`; +exports[`null-constructor > crossSerializeStream > supports Symbol.asyncIterator 1`] = `"$R[0]=Object.assign(Object.create(null),{[$R[1]=Symbol.asyncIterator]:($R[2]=s=>b=>(b=s.tee(),s=b[0],b=b[1].getReader(),{[$R[1]]:()=>this,next:()=>b.read().then(d=>{if(d.done)return{done:!0,value:void 0};d=d.value;if(d[0]===1)throw d[1];return{done:d[0]===2,value:d[1]}})}))($R[3]=_$.S())})"`; -exports[`null-constructor > crossSerializeStream > supports Symbol.asyncIterator 2`] = `"_$.Se($R[1],$R[4]=[0,1])"`; +exports[`null-constructor > crossSerializeStream > supports Symbol.asyncIterator 2`] = `"_$.Se($R[3],$R[4]=[0,1])"`; -exports[`null-constructor > crossSerializeStream > supports Symbol.asyncIterator 3`] = `"_$.Se($R[1],$R[5]=[0,2])"`; +exports[`null-constructor > crossSerializeStream > supports Symbol.asyncIterator 3`] = `"_$.Se($R[3],$R[5]=[0,2])"`; -exports[`null-constructor > crossSerializeStream > supports Symbol.asyncIterator 4`] = `"_$.Se($R[1],$R[6]=[0,3])"`; +exports[`null-constructor > crossSerializeStream > supports Symbol.asyncIterator 4`] = `"_$.Se($R[3],$R[6]=[0,3])"`; -exports[`null-constructor > crossSerializeStream > supports Symbol.asyncIterator 5`] = `"_$.Se($R[1],$R[7]=[2,void 0])"`; +exports[`null-constructor > crossSerializeStream > supports Symbol.asyncIterator 5`] = `"_$.Se($R[3],$R[7]=[2,void 0])"`; -exports[`null-constructor > crossSerializeStream > supports Symbol.asyncIterator 6`] = `"_$.Sc($R[1])"`; +exports[`null-constructor > crossSerializeStream > supports Symbol.asyncIterator 6`] = `"_$.Sc($R[3])"`; exports[`null-constructor > crossSerializeStream > supports Symbol.iterator 1`] = `"$R[0]=_$.P()"`; -exports[`null-constructor > crossSerializeStream > supports Symbol.iterator 2`] = `"_$.Ps($R[0],$R[1]=Object.assign(Object.create(null),{[$R[4]=Symbol.iterator]:($R[5]=s=>(i,c,d,t)=>(i=0,t={[$R[4]]:()=>t,next:()=>{if(i>s.d)return{done:!0,value:void 0};c=i++,d=s.v[c];if(c===s.t)throw d;return{done:c===s.d,value:d}}}))($R[2]={v:$R[3]=[1,2,3,void 0],t:-1,d:3})}))"`; +exports[`null-constructor > crossSerializeStream > supports Symbol.iterator 2`] = `"_$.Ps($R[0],$R[1]=Object.assign(Object.create(null),{[$R[2]=Symbol.iterator]:($R[3]=s=>(i,c,d,t)=>(i=0,t={[$R[2]]:()=>t,next:()=>{if(i>s.d)return{done:!0,value:void 0};c=i++,d=s.v[c];if(c===s.t)throw d;return{done:c===s.d,value:d}}}))($R[4]={v:$R[5]=[1,2,3,void 0],t:-1,d:3})}))"`; exports[`null-constructor > crossSerializeStream > supports self-recursion 1`] = `"$R[0]=Object.assign(Object.create(null),{a:$R[1]=_$.P(),b:$R[2]=_$.P()})"`; @@ -100,56 +100,56 @@ exports[`null-constructor > serializeAsync > supports Symbol.iterator 1`] = `"(h exports[`null-constructor > serializeAsync > supports self-recursion 1`] = `"(h=>(h=Object.assign(Object.create(null),{a:Promise.resolve().then(()=>h),b:Promise.resolve().then(()=>h)})))()"`; -exports[`null-constructor > toCrossJSON > supports Object.create(null) 1`] = `"{\\"t\\":11,\\"i\\":0,\\"p\\":{\\"k\\":[\\"hello\\"],\\"v\\":[{\\"t\\":1,\\"s\\":\\"world\\"}],\\"s\\":1},\\"o\\":0,\\"x\\":{}}"`; +exports[`null-constructor > toCrossJSON > supports Object.create(null) 1`] = `"{\\"t\\":11,\\"i\\":0,\\"p\\":{\\"k\\":[\\"hello\\"],\\"v\\":[{\\"t\\":1,\\"s\\":\\"world\\"}],\\"s\\":1},\\"o\\":0}"`; -exports[`null-constructor > toCrossJSON > supports Symbol.iterator 1`] = `"{\\"t\\":11,\\"i\\":0,\\"p\\":{\\"k\\":[0],\\"v\\":[{\\"t\\":10,\\"i\\":1,\\"p\\":{\\"k\\":[\\"v\\",\\"t\\",\\"d\\"],\\"v\\":[{\\"t\\":9,\\"i\\":2,\\"l\\":4,\\"a\\":[{\\"t\\":0,\\"s\\":1},{\\"t\\":0,\\"s\\":2},{\\"t\\":0,\\"s\\":3},{\\"t\\":2,\\"s\\":1}],\\"o\\":0},{\\"t\\":0,\\"s\\":-1},{\\"t\\":0,\\"s\\":3}],\\"s\\":3},\\"o\\":0,\\"x\\":{}}],\\"s\\":1},\\"o\\":0,\\"x\\":{\\"1\\":{\\"t\\":17,\\"i\\":3,\\"s\\":3},\\"2\\":{\\"t\\":42,\\"i\\":4,\\"x\\":{\\"1\\":{\\"t\\":4,\\"i\\":3}}}}}"`; +exports[`null-constructor > toCrossJSON > supports Symbol.iterator 1`] = `"{\\"t\\":11,\\"i\\":0,\\"p\\":{\\"k\\":[{\\"t\\":17,\\"i\\":1,\\"s\\":3}],\\"v\\":[{\\"t\\":43,\\"a\\":[{\\"t\\":42,\\"i\\":2,\\"f\\":{\\"t\\":4,\\"i\\":1}},{\\"t\\":10,\\"i\\":3,\\"p\\":{\\"k\\":[\\"v\\",\\"t\\",\\"d\\"],\\"v\\":[{\\"t\\":9,\\"i\\":4,\\"l\\":4,\\"a\\":[{\\"t\\":0,\\"s\\":1},{\\"t\\":0,\\"s\\":2},{\\"t\\":0,\\"s\\":3},{\\"t\\":2,\\"s\\":1}],\\"o\\":0},{\\"t\\":0,\\"s\\":-1},{\\"t\\":0,\\"s\\":3}],\\"s\\":3},\\"o\\":0}]}],\\"s\\":1},\\"o\\":0}"`; -exports[`null-constructor > toCrossJSON > supports self-recursion 1`] = `"{\\"t\\":11,\\"i\\":0,\\"p\\":{\\"k\\":[\\"a\\",\\"b\\"],\\"v\\":[{\\"t\\":4,\\"i\\":0},{\\"t\\":4,\\"i\\":0}],\\"s\\":2},\\"o\\":0,\\"x\\":{}}"`; +exports[`null-constructor > toCrossJSON > supports self-recursion 1`] = `"{\\"t\\":11,\\"i\\":0,\\"p\\":{\\"k\\":[\\"a\\",\\"b\\"],\\"v\\":[{\\"t\\":4,\\"i\\":0},{\\"t\\":4,\\"i\\":0}],\\"s\\":2},\\"o\\":0}"`; -exports[`null-constructor > toCrossJSONAsync > supports Object.create(null) 1`] = `"{\\"t\\":12,\\"i\\":0,\\"s\\":1,\\"f\\":{\\"t\\":11,\\"i\\":1,\\"p\\":{\\"k\\":[\\"hello\\"],\\"v\\":[{\\"t\\":1,\\"s\\":\\"world\\"}],\\"s\\":1},\\"o\\":0,\\"x\\":{}}}"`; +exports[`null-constructor > toCrossJSONAsync > supports Object.create(null) 1`] = `"{\\"t\\":12,\\"i\\":0,\\"s\\":1,\\"f\\":{\\"t\\":11,\\"i\\":1,\\"p\\":{\\"k\\":[\\"hello\\"],\\"v\\":[{\\"t\\":1,\\"s\\":\\"world\\"}],\\"s\\":1},\\"o\\":0}}"`; -exports[`null-constructor > toCrossJSONAsync > supports Symbol.asyncIterator 1`] = `"{\\"t\\":11,\\"i\\":0,\\"p\\":{\\"k\\":[1],\\"v\\":[{\\"t\\":10,\\"i\\":1,\\"p\\":{\\"k\\":[\\"v\\",\\"t\\",\\"d\\"],\\"v\\":[{\\"t\\":9,\\"i\\":2,\\"l\\":4,\\"a\\":[{\\"t\\":0,\\"s\\":1},{\\"t\\":0,\\"s\\":2},{\\"t\\":0,\\"s\\":3},{\\"t\\":2,\\"s\\":1}],\\"o\\":0},{\\"t\\":0,\\"s\\":-1},{\\"t\\":0,\\"s\\":3}],\\"s\\":3},\\"o\\":0,\\"x\\":{}}],\\"s\\":1},\\"o\\":0,\\"x\\":{\\"3\\":{\\"t\\":17,\\"i\\":3,\\"s\\":0},\\"4\\":{\\"t\\":43,\\"i\\":4,\\"x\\":{\\"3\\":{\\"t\\":4,\\"i\\":3}}}}}"`; +exports[`null-constructor > toCrossJSONAsync > supports Symbol.asyncIterator 1`] = `"{\\"t\\":11,\\"i\\":0,\\"p\\":{\\"k\\":[{\\"t\\":17,\\"i\\":1,\\"s\\":0}],\\"v\\":[{\\"t\\":45,\\"a\\":[{\\"t\\":44,\\"i\\":2,\\"f\\":{\\"t\\":4,\\"i\\":1}},{\\"t\\":10,\\"i\\":3,\\"p\\":{\\"k\\":[\\"v\\",\\"t\\",\\"d\\"],\\"v\\":[{\\"t\\":9,\\"i\\":4,\\"l\\":4,\\"a\\":[{\\"t\\":0,\\"s\\":1},{\\"t\\":0,\\"s\\":2},{\\"t\\":0,\\"s\\":3},{\\"t\\":2,\\"s\\":1}],\\"o\\":0},{\\"t\\":0,\\"s\\":-1},{\\"t\\":0,\\"s\\":3}],\\"s\\":3},\\"o\\":0}]}],\\"s\\":1},\\"o\\":0}"`; -exports[`null-constructor > toCrossJSONAsync > supports Symbol.iterator 1`] = `"{\\"t\\":12,\\"i\\":0,\\"s\\":1,\\"f\\":{\\"t\\":11,\\"i\\":1,\\"p\\":{\\"k\\":[0],\\"v\\":[{\\"t\\":10,\\"i\\":2,\\"p\\":{\\"k\\":[\\"v\\",\\"t\\",\\"d\\"],\\"v\\":[{\\"t\\":9,\\"i\\":3,\\"l\\":4,\\"a\\":[{\\"t\\":0,\\"s\\":1},{\\"t\\":0,\\"s\\":2},{\\"t\\":0,\\"s\\":3},{\\"t\\":2,\\"s\\":1}],\\"o\\":0},{\\"t\\":0,\\"s\\":-1},{\\"t\\":0,\\"s\\":3}],\\"s\\":3},\\"o\\":0,\\"x\\":{}}],\\"s\\":1},\\"o\\":0,\\"x\\":{\\"1\\":{\\"t\\":17,\\"i\\":4,\\"s\\":3},\\"2\\":{\\"t\\":42,\\"i\\":5,\\"x\\":{\\"1\\":{\\"t\\":4,\\"i\\":4}}}}}}"`; +exports[`null-constructor > toCrossJSONAsync > supports Symbol.iterator 1`] = `"{\\"t\\":12,\\"i\\":0,\\"s\\":1,\\"f\\":{\\"t\\":11,\\"i\\":1,\\"p\\":{\\"k\\":[{\\"t\\":17,\\"i\\":2,\\"s\\":3}],\\"v\\":[{\\"t\\":43,\\"a\\":[{\\"t\\":42,\\"i\\":3,\\"f\\":{\\"t\\":4,\\"i\\":2}},{\\"t\\":10,\\"i\\":4,\\"p\\":{\\"k\\":[\\"v\\",\\"t\\",\\"d\\"],\\"v\\":[{\\"t\\":9,\\"i\\":5,\\"l\\":4,\\"a\\":[{\\"t\\":0,\\"s\\":1},{\\"t\\":0,\\"s\\":2},{\\"t\\":0,\\"s\\":3},{\\"t\\":2,\\"s\\":1}],\\"o\\":0},{\\"t\\":0,\\"s\\":-1},{\\"t\\":0,\\"s\\":3}],\\"s\\":3},\\"o\\":0}]}],\\"s\\":1},\\"o\\":0}}"`; -exports[`null-constructor > toCrossJSONAsync > supports self-recursion 1`] = `"{\\"t\\":11,\\"i\\":0,\\"p\\":{\\"k\\":[\\"a\\",\\"b\\"],\\"v\\":[{\\"t\\":12,\\"i\\":1,\\"s\\":1,\\"f\\":{\\"t\\":4,\\"i\\":0}},{\\"t\\":12,\\"i\\":2,\\"s\\":1,\\"f\\":{\\"t\\":4,\\"i\\":0}}],\\"s\\":2},\\"o\\":0,\\"x\\":{}}"`; +exports[`null-constructor > toCrossJSONAsync > supports self-recursion 1`] = `"{\\"t\\":11,\\"i\\":0,\\"p\\":{\\"k\\":[\\"a\\",\\"b\\"],\\"v\\":[{\\"t\\":12,\\"i\\":1,\\"s\\":1,\\"f\\":{\\"t\\":4,\\"i\\":0}},{\\"t\\":12,\\"i\\":2,\\"s\\":1,\\"f\\":{\\"t\\":4,\\"i\\":0}}],\\"s\\":2},\\"o\\":0}"`; exports[`null-constructor > toCrossJSONStream > supports Object.create(null) 1`] = `"{\\"t\\":28,\\"i\\":0}"`; -exports[`null-constructor > toCrossJSONStream > supports Object.create(null) 2`] = `"{\\"t\\":29,\\"i\\":0,\\"f\\":{\\"t\\":11,\\"i\\":1,\\"p\\":{\\"k\\":[\\"hello\\"],\\"v\\":[{\\"t\\":1,\\"s\\":\\"world\\"}],\\"s\\":1},\\"o\\":0,\\"x\\":{}}}"`; +exports[`null-constructor > toCrossJSONStream > supports Object.create(null) 2`] = `"{\\"t\\":29,\\"i\\":0,\\"f\\":{\\"t\\":11,\\"i\\":1,\\"p\\":{\\"k\\":[\\"hello\\"],\\"v\\":[{\\"t\\":1,\\"s\\":\\"world\\"}],\\"s\\":1},\\"o\\":0}}"`; -exports[`null-constructor > toCrossJSONStream > supports Symbol.asyncIterator 1`] = `"{\\"t\\":11,\\"i\\":0,\\"p\\":{\\"k\\":[1],\\"v\\":[{\\"t\\":31,\\"i\\":1}],\\"s\\":1},\\"o\\":0,\\"x\\":{\\"3\\":{\\"t\\":17,\\"i\\":2,\\"s\\":0},\\"4\\":{\\"t\\":43,\\"i\\":3,\\"x\\":{\\"3\\":{\\"t\\":4,\\"i\\":2}}}}}"`; +exports[`null-constructor > toCrossJSONStream > supports Symbol.asyncIterator 1`] = `"{\\"t\\":11,\\"i\\":0,\\"p\\":{\\"k\\":[{\\"t\\":17,\\"i\\":1,\\"s\\":0}],\\"v\\":[{\\"t\\":45,\\"a\\":[{\\"t\\":44,\\"i\\":2,\\"f\\":{\\"t\\":4,\\"i\\":1}},{\\"t\\":31,\\"i\\":3}]}],\\"s\\":1},\\"o\\":0}"`; -exports[`null-constructor > toCrossJSONStream > supports Symbol.asyncIterator 2`] = `"{\\"t\\":32,\\"i\\":1,\\"f\\":{\\"t\\":9,\\"i\\":4,\\"l\\":2,\\"a\\":[{\\"t\\":0,\\"s\\":0},{\\"t\\":0,\\"s\\":1}],\\"o\\":0}}"`; +exports[`null-constructor > toCrossJSONStream > supports Symbol.asyncIterator 2`] = `"{\\"t\\":32,\\"i\\":3,\\"f\\":{\\"t\\":9,\\"i\\":4,\\"l\\":2,\\"a\\":[{\\"t\\":0,\\"s\\":0},{\\"t\\":0,\\"s\\":1}],\\"o\\":0}}"`; -exports[`null-constructor > toCrossJSONStream > supports Symbol.asyncIterator 3`] = `"{\\"t\\":32,\\"i\\":1,\\"f\\":{\\"t\\":9,\\"i\\":5,\\"l\\":2,\\"a\\":[{\\"t\\":0,\\"s\\":0},{\\"t\\":0,\\"s\\":2}],\\"o\\":0}}"`; +exports[`null-constructor > toCrossJSONStream > supports Symbol.asyncIterator 3`] = `"{\\"t\\":32,\\"i\\":3,\\"f\\":{\\"t\\":9,\\"i\\":5,\\"l\\":2,\\"a\\":[{\\"t\\":0,\\"s\\":0},{\\"t\\":0,\\"s\\":2}],\\"o\\":0}}"`; -exports[`null-constructor > toCrossJSONStream > supports Symbol.asyncIterator 4`] = `"{\\"t\\":32,\\"i\\":1,\\"f\\":{\\"t\\":9,\\"i\\":6,\\"l\\":2,\\"a\\":[{\\"t\\":0,\\"s\\":0},{\\"t\\":0,\\"s\\":3}],\\"o\\":0}}"`; +exports[`null-constructor > toCrossJSONStream > supports Symbol.asyncIterator 4`] = `"{\\"t\\":32,\\"i\\":3,\\"f\\":{\\"t\\":9,\\"i\\":6,\\"l\\":2,\\"a\\":[{\\"t\\":0,\\"s\\":0},{\\"t\\":0,\\"s\\":3}],\\"o\\":0}}"`; -exports[`null-constructor > toCrossJSONStream > supports Symbol.asyncIterator 5`] = `"{\\"t\\":32,\\"i\\":1,\\"f\\":{\\"t\\":9,\\"i\\":7,\\"l\\":2,\\"a\\":[{\\"t\\":0,\\"s\\":2},{\\"t\\":2,\\"s\\":1}],\\"o\\":0}}"`; +exports[`null-constructor > toCrossJSONStream > supports Symbol.asyncIterator 5`] = `"{\\"t\\":32,\\"i\\":3,\\"f\\":{\\"t\\":9,\\"i\\":7,\\"l\\":2,\\"a\\":[{\\"t\\":0,\\"s\\":2},{\\"t\\":2,\\"s\\":1}],\\"o\\":0}}"`; -exports[`null-constructor > toCrossJSONStream > supports Symbol.asyncIterator 6`] = `"{\\"t\\":33,\\"i\\":1}"`; +exports[`null-constructor > toCrossJSONStream > supports Symbol.asyncIterator 6`] = `"{\\"t\\":33,\\"i\\":3}"`; exports[`null-constructor > toCrossJSONStream > supports Symbol.iterator 1`] = `"{\\"t\\":28,\\"i\\":0}"`; -exports[`null-constructor > toCrossJSONStream > supports Symbol.iterator 2`] = `"{\\"t\\":29,\\"i\\":0,\\"f\\":{\\"t\\":11,\\"i\\":1,\\"p\\":{\\"k\\":[0],\\"v\\":[{\\"t\\":10,\\"i\\":2,\\"p\\":{\\"k\\":[\\"v\\",\\"t\\",\\"d\\"],\\"v\\":[{\\"t\\":9,\\"i\\":3,\\"l\\":4,\\"a\\":[{\\"t\\":0,\\"s\\":1},{\\"t\\":0,\\"s\\":2},{\\"t\\":0,\\"s\\":3},{\\"t\\":2,\\"s\\":1}],\\"o\\":0},{\\"t\\":0,\\"s\\":-1},{\\"t\\":0,\\"s\\":3}],\\"s\\":3},\\"o\\":0,\\"x\\":{}}],\\"s\\":1},\\"o\\":0,\\"x\\":{\\"1\\":{\\"t\\":17,\\"i\\":4,\\"s\\":3},\\"2\\":{\\"t\\":42,\\"i\\":5,\\"x\\":{\\"1\\":{\\"t\\":4,\\"i\\":4}}}}}}"`; +exports[`null-constructor > toCrossJSONStream > supports Symbol.iterator 2`] = `"{\\"t\\":29,\\"i\\":0,\\"f\\":{\\"t\\":11,\\"i\\":1,\\"p\\":{\\"k\\":[{\\"t\\":17,\\"i\\":2,\\"s\\":3}],\\"v\\":[{\\"t\\":43,\\"a\\":[{\\"t\\":42,\\"i\\":3,\\"f\\":{\\"t\\":4,\\"i\\":2}},{\\"t\\":10,\\"i\\":4,\\"p\\":{\\"k\\":[\\"v\\",\\"t\\",\\"d\\"],\\"v\\":[{\\"t\\":9,\\"i\\":5,\\"l\\":4,\\"a\\":[{\\"t\\":0,\\"s\\":1},{\\"t\\":0,\\"s\\":2},{\\"t\\":0,\\"s\\":3},{\\"t\\":2,\\"s\\":1}],\\"o\\":0},{\\"t\\":0,\\"s\\":-1},{\\"t\\":0,\\"s\\":3}],\\"s\\":3},\\"o\\":0}]}],\\"s\\":1},\\"o\\":0}}"`; -exports[`null-constructor > toCrossJSONStream > supports self-recursion 1`] = `"{\\"t\\":11,\\"i\\":0,\\"p\\":{\\"k\\":[\\"a\\",\\"b\\"],\\"v\\":[{\\"t\\":28,\\"i\\":1},{\\"t\\":28,\\"i\\":2}],\\"s\\":2},\\"o\\":0,\\"x\\":{}}"`; +exports[`null-constructor > toCrossJSONStream > supports self-recursion 1`] = `"{\\"t\\":11,\\"i\\":0,\\"p\\":{\\"k\\":[\\"a\\",\\"b\\"],\\"v\\":[{\\"t\\":28,\\"i\\":1},{\\"t\\":28,\\"i\\":2}],\\"s\\":2},\\"o\\":0}"`; exports[`null-constructor > toCrossJSONStream > supports self-recursion 2`] = `"{\\"t\\":29,\\"i\\":1,\\"f\\":{\\"t\\":4,\\"i\\":0}}"`; exports[`null-constructor > toCrossJSONStream > supports self-recursion 3`] = `"{\\"t\\":29,\\"i\\":2,\\"f\\":{\\"t\\":4,\\"i\\":0}}"`; -exports[`null-constructor > toJSON > supports Object.create(null) 1`] = `"{\\"t\\":{\\"t\\":11,\\"i\\":0,\\"p\\":{\\"k\\":[\\"hello\\"],\\"v\\":[{\\"t\\":1,\\"s\\":\\"world\\"}],\\"s\\":1},\\"o\\":0,\\"x\\":{}},\\"f\\":16383,\\"m\\":[]}"`; +exports[`null-constructor > toJSON > supports Object.create(null) 1`] = `"{\\"t\\":{\\"t\\":11,\\"i\\":0,\\"p\\":{\\"k\\":[\\"hello\\"],\\"v\\":[{\\"t\\":1,\\"s\\":\\"world\\"}],\\"s\\":1},\\"o\\":0},\\"f\\":16383,\\"m\\":[]}"`; -exports[`null-constructor > toJSON > supports Symbol.iterator 1`] = `"{\\"t\\":{\\"t\\":11,\\"i\\":0,\\"p\\":{\\"k\\":[0],\\"v\\":[{\\"t\\":10,\\"i\\":1,\\"p\\":{\\"k\\":[\\"v\\",\\"t\\",\\"d\\"],\\"v\\":[{\\"t\\":9,\\"i\\":2,\\"l\\":4,\\"a\\":[{\\"t\\":0,\\"s\\":1},{\\"t\\":0,\\"s\\":2},{\\"t\\":0,\\"s\\":3},{\\"t\\":2,\\"s\\":1}],\\"o\\":0},{\\"t\\":0,\\"s\\":-1},{\\"t\\":0,\\"s\\":3}],\\"s\\":3},\\"o\\":0,\\"x\\":{}}],\\"s\\":1},\\"o\\":0,\\"x\\":{\\"1\\":{\\"t\\":17,\\"i\\":3,\\"s\\":3},\\"2\\":{\\"t\\":42,\\"i\\":4,\\"x\\":{\\"1\\":{\\"t\\":4,\\"i\\":3}}}}},\\"f\\":16383,\\"m\\":[3]}"`; +exports[`null-constructor > toJSON > supports Symbol.iterator 1`] = `"{\\"t\\":{\\"t\\":11,\\"i\\":0,\\"p\\":{\\"k\\":[{\\"t\\":17,\\"i\\":1,\\"s\\":3}],\\"v\\":[{\\"t\\":43,\\"a\\":[{\\"t\\":42,\\"i\\":2,\\"f\\":{\\"t\\":4,\\"i\\":1}},{\\"t\\":10,\\"i\\":3,\\"p\\":{\\"k\\":[\\"v\\",\\"t\\",\\"d\\"],\\"v\\":[{\\"t\\":9,\\"i\\":4,\\"l\\":4,\\"a\\":[{\\"t\\":0,\\"s\\":1},{\\"t\\":0,\\"s\\":2},{\\"t\\":0,\\"s\\":3},{\\"t\\":2,\\"s\\":1}],\\"o\\":0},{\\"t\\":0,\\"s\\":-1},{\\"t\\":0,\\"s\\":3}],\\"s\\":3},\\"o\\":0}]}],\\"s\\":1},\\"o\\":0},\\"f\\":16383,\\"m\\":[1]}"`; -exports[`null-constructor > toJSON > supports self-recursion 1`] = `"{\\"t\\":{\\"t\\":11,\\"i\\":0,\\"p\\":{\\"k\\":[\\"a\\",\\"b\\"],\\"v\\":[{\\"t\\":4,\\"i\\":0},{\\"t\\":4,\\"i\\":0}],\\"s\\":2},\\"o\\":0,\\"x\\":{}},\\"f\\":16383,\\"m\\":[0]}"`; +exports[`null-constructor > toJSON > supports self-recursion 1`] = `"{\\"t\\":{\\"t\\":11,\\"i\\":0,\\"p\\":{\\"k\\":[\\"a\\",\\"b\\"],\\"v\\":[{\\"t\\":4,\\"i\\":0},{\\"t\\":4,\\"i\\":0}],\\"s\\":2},\\"o\\":0},\\"f\\":16383,\\"m\\":[0]}"`; -exports[`null-constructor > toJSONAsync > supports Object.create(null) 1`] = `"{\\"t\\":{\\"t\\":12,\\"i\\":0,\\"s\\":1,\\"f\\":{\\"t\\":11,\\"i\\":1,\\"p\\":{\\"k\\":[\\"hello\\"],\\"v\\":[{\\"t\\":1,\\"s\\":\\"world\\"}],\\"s\\":1},\\"o\\":0,\\"x\\":{}}},\\"f\\":16383,\\"m\\":[]}"`; +exports[`null-constructor > toJSONAsync > supports Object.create(null) 1`] = `"{\\"t\\":{\\"t\\":12,\\"i\\":0,\\"s\\":1,\\"f\\":{\\"t\\":11,\\"i\\":1,\\"p\\":{\\"k\\":[\\"hello\\"],\\"v\\":[{\\"t\\":1,\\"s\\":\\"world\\"}],\\"s\\":1},\\"o\\":0}},\\"f\\":16383,\\"m\\":[]}"`; -exports[`null-constructor > toJSONAsync > supports Symbol.asyncIterator 1`] = `"{\\"t\\":{\\"t\\":11,\\"i\\":0,\\"p\\":{\\"k\\":[1],\\"v\\":[{\\"t\\":10,\\"i\\":1,\\"p\\":{\\"k\\":[\\"v\\",\\"t\\",\\"d\\"],\\"v\\":[{\\"t\\":9,\\"i\\":2,\\"l\\":4,\\"a\\":[{\\"t\\":0,\\"s\\":1},{\\"t\\":0,\\"s\\":2},{\\"t\\":0,\\"s\\":3},{\\"t\\":2,\\"s\\":1}],\\"o\\":0},{\\"t\\":0,\\"s\\":-1},{\\"t\\":0,\\"s\\":3}],\\"s\\":3},\\"o\\":0,\\"x\\":{}}],\\"s\\":1},\\"o\\":0,\\"x\\":{\\"3\\":{\\"t\\":17,\\"i\\":3,\\"s\\":0},\\"4\\":{\\"t\\":43,\\"i\\":4,\\"x\\":{\\"3\\":{\\"t\\":4,\\"i\\":3}}}}},\\"f\\":16383,\\"m\\":[3]}"`; +exports[`null-constructor > toJSONAsync > supports Symbol.asyncIterator 1`] = `"{\\"t\\":{\\"t\\":11,\\"i\\":0,\\"p\\":{\\"k\\":[{\\"t\\":17,\\"i\\":1,\\"s\\":0}],\\"v\\":[{\\"t\\":45,\\"a\\":[{\\"t\\":44,\\"i\\":2,\\"f\\":{\\"t\\":4,\\"i\\":1}},{\\"t\\":10,\\"i\\":3,\\"p\\":{\\"k\\":[\\"v\\",\\"t\\",\\"d\\"],\\"v\\":[{\\"t\\":9,\\"i\\":4,\\"l\\":4,\\"a\\":[{\\"t\\":0,\\"s\\":1},{\\"t\\":0,\\"s\\":2},{\\"t\\":0,\\"s\\":3},{\\"t\\":2,\\"s\\":1}],\\"o\\":0},{\\"t\\":0,\\"s\\":-1},{\\"t\\":0,\\"s\\":3}],\\"s\\":3},\\"o\\":0}]}],\\"s\\":1},\\"o\\":0},\\"f\\":16383,\\"m\\":[1]}"`; -exports[`null-constructor > toJSONAsync > supports Symbol.iterator 1`] = `"{\\"t\\":{\\"t\\":12,\\"i\\":0,\\"s\\":1,\\"f\\":{\\"t\\":11,\\"i\\":1,\\"p\\":{\\"k\\":[0],\\"v\\":[{\\"t\\":10,\\"i\\":2,\\"p\\":{\\"k\\":[\\"v\\",\\"t\\",\\"d\\"],\\"v\\":[{\\"t\\":9,\\"i\\":3,\\"l\\":4,\\"a\\":[{\\"t\\":0,\\"s\\":1},{\\"t\\":0,\\"s\\":2},{\\"t\\":0,\\"s\\":3},{\\"t\\":2,\\"s\\":1}],\\"o\\":0},{\\"t\\":0,\\"s\\":-1},{\\"t\\":0,\\"s\\":3}],\\"s\\":3},\\"o\\":0,\\"x\\":{}}],\\"s\\":1},\\"o\\":0,\\"x\\":{\\"1\\":{\\"t\\":17,\\"i\\":4,\\"s\\":3},\\"2\\":{\\"t\\":42,\\"i\\":5,\\"x\\":{\\"1\\":{\\"t\\":4,\\"i\\":4}}}}}},\\"f\\":16383,\\"m\\":[4]}"`; +exports[`null-constructor > toJSONAsync > supports Symbol.iterator 1`] = `"{\\"t\\":{\\"t\\":12,\\"i\\":0,\\"s\\":1,\\"f\\":{\\"t\\":11,\\"i\\":1,\\"p\\":{\\"k\\":[{\\"t\\":17,\\"i\\":2,\\"s\\":3}],\\"v\\":[{\\"t\\":43,\\"a\\":[{\\"t\\":42,\\"i\\":3,\\"f\\":{\\"t\\":4,\\"i\\":2}},{\\"t\\":10,\\"i\\":4,\\"p\\":{\\"k\\":[\\"v\\",\\"t\\",\\"d\\"],\\"v\\":[{\\"t\\":9,\\"i\\":5,\\"l\\":4,\\"a\\":[{\\"t\\":0,\\"s\\":1},{\\"t\\":0,\\"s\\":2},{\\"t\\":0,\\"s\\":3},{\\"t\\":2,\\"s\\":1}],\\"o\\":0},{\\"t\\":0,\\"s\\":-1},{\\"t\\":0,\\"s\\":3}],\\"s\\":3},\\"o\\":0}]}],\\"s\\":1},\\"o\\":0}},\\"f\\":16383,\\"m\\":[2]}"`; -exports[`null-constructor > toJSONAsync > supports self-recursion 1`] = `"{\\"t\\":{\\"t\\":11,\\"i\\":0,\\"p\\":{\\"k\\":[\\"a\\",\\"b\\"],\\"v\\":[{\\"t\\":12,\\"i\\":1,\\"s\\":1,\\"f\\":{\\"t\\":4,\\"i\\":0}},{\\"t\\":12,\\"i\\":2,\\"s\\":1,\\"f\\":{\\"t\\":4,\\"i\\":0}}],\\"s\\":2},\\"o\\":0,\\"x\\":{}},\\"f\\":16383,\\"m\\":[0]}"`; +exports[`null-constructor > toJSONAsync > supports self-recursion 1`] = `"{\\"t\\":{\\"t\\":11,\\"i\\":0,\\"p\\":{\\"k\\":[\\"a\\",\\"b\\"],\\"v\\":[{\\"t\\":12,\\"i\\":1,\\"s\\":1,\\"f\\":{\\"t\\":4,\\"i\\":0}},{\\"t\\":12,\\"i\\":2,\\"s\\":1,\\"f\\":{\\"t\\":4,\\"i\\":0}}],\\"s\\":2},\\"o\\":0},\\"f\\":16383,\\"m\\":[0]}"`; diff --git a/packages/seroval/test/__snapshots__/object.test.ts.snap b/packages/seroval/test/__snapshots__/object.test.ts.snap index 002a870d..2d408d07 100644 --- a/packages/seroval/test/__snapshots__/object.test.ts.snap +++ b/packages/seroval/test/__snapshots__/object.test.ts.snap @@ -2,35 +2,35 @@ exports[`objects > compat > should use manual assignment instead of Object.assign 1`] = `"({hello:\\"world\\"})"`; -exports[`objects > compat#toJSON > should use manual assignment instead of Object.assign 1`] = `"{\\"t\\":{\\"t\\":10,\\"i\\":0,\\"p\\":{\\"k\\":[\\"hello\\"],\\"v\\":[{\\"t\\":1,\\"s\\":\\"world\\"}],\\"s\\":1},\\"o\\":0,\\"x\\":{}},\\"f\\":16255,\\"m\\":[]}"`; +exports[`objects > compat#toJSON > should use manual assignment instead of Object.assign 1`] = `"{\\"t\\":{\\"t\\":10,\\"i\\":0,\\"p\\":{\\"k\\":[\\"hello\\"],\\"v\\":[{\\"t\\":1,\\"s\\":\\"world\\"}],\\"s\\":1},\\"o\\":0},\\"f\\":16255,\\"m\\":[]}"`; exports[`objects > compat#toJSON > should use manual assignment instead of Object.assign 2`] = `"({hello:\\"world\\"})"`; exports[`objects > crossSerialize > scoped > supports Objects 1`] = `"($R=>$R[0]={hello:\\"world\\"})($R[\\"example\\"])"`; -exports[`objects > crossSerialize > scoped > supports Symbol.iterator 1`] = `"($R=>$R[0]={[$R[3]=Symbol.iterator]:($R[4]=s=>(i,c,d,t)=>(i=0,t={[$R[3]]:()=>t,next:()=>{if(i>s.d)return{done:!0,value:void 0};c=i++,d=s.v[c];if(c===s.t)throw d;return{done:c===s.d,value:d}}}))($R[1]={v:$R[2]=[1,2,3,void 0],t:-1,d:3})})($R[\\"example\\"])"`; +exports[`objects > crossSerialize > scoped > supports Symbol.iterator 1`] = `"($R=>$R[0]={[$R[1]=Symbol.iterator]:($R[2]=s=>(i,c,d,t)=>(i=0,t={[$R[1]]:()=>t,next:()=>{if(i>s.d)return{done:!0,value:void 0};c=i++,d=s.v[c];if(c===s.t)throw d;return{done:c===s.d,value:d}}}))($R[3]={v:$R[4]=[1,2,3,void 0],t:-1,d:3})})($R[\\"example\\"])"`; exports[`objects > crossSerialize > scoped > supports self-recursion 1`] = `"($R=>$R[0]={},$R[0].b=$R[0].a=$R[0],$R[0])($R[\\"example\\"])"`; exports[`objects > crossSerialize > supports Objects 1`] = `"($R[0]={hello:\\"world\\"},Object.freeze($R[0]),$R[0])"`; -exports[`objects > crossSerialize > supports Symbol.iterator 1`] = `"$R[0]={[$R[3]=Symbol.iterator]:($R[4]=s=>(i,c,d,t)=>(i=0,t={[$R[3]]:()=>t,next:()=>{if(i>s.d)return{done:!0,value:void 0};c=i++,d=s.v[c];if(c===s.t)throw d;return{done:c===s.d,value:d}}}))($R[1]={v:$R[2]=[1,2,3,void 0],t:-1,d:3})}"`; +exports[`objects > crossSerialize > supports Symbol.iterator 1`] = `"$R[0]={[$R[1]=Symbol.iterator]:($R[2]=s=>(i,c,d,t)=>(i=0,t={[$R[1]]:()=>t,next:()=>{if(i>s.d)return{done:!0,value:void 0};c=i++,d=s.v[c];if(c===s.t)throw d;return{done:c===s.d,value:d}}}))($R[3]={v:$R[4]=[1,2,3,void 0],t:-1,d:3})}"`; exports[`objects > crossSerialize > supports self-recursion 1`] = `"($R[0]={},$R[0].b=$R[0].a=$R[0],$R[0])"`; exports[`objects > crossSerializeAsync > scoped > supports Objects 1`] = `"($R=>$R[0]=Promise.resolve($R[1]={hello:\\"world\\"}))($R[\\"example\\"])"`; -exports[`objects > crossSerializeAsync > scoped > supports Symbol.asyncIterator 1`] = `"($R=>$R[0]={[$R[3]=Symbol.asyncIterator]:($R[4]=s=>b=>(b=s.tee(),s=b[0],b=b[1].getReader(),{[$R[3]]:()=>this,next:()=>b.read().then(d=>{if(d.done)return{done:!0,value:void 0};d=d.value;if(d[0]===1)throw d[1];return{done:d[0]===2,value:d[1]}})}))($R[1]={v:$R[2]=[1,2,3,void 0],t:-1,d:3})})($R[\\"example\\"])"`; +exports[`objects > crossSerializeAsync > scoped > supports Symbol.asyncIterator 1`] = `"($R=>$R[0]={[$R[1]=Symbol.asyncIterator]:($R[2]=s=>b=>(b=s.tee(),s=b[0],b=b[1].getReader(),{[$R[1]]:()=>this,next:()=>b.read().then(d=>{if(d.done)return{done:!0,value:void 0};d=d.value;if(d[0]===1)throw d[1];return{done:d[0]===2,value:d[1]}})}))($R[3]={v:$R[4]=[1,2,3,void 0],t:-1,d:3})})($R[\\"example\\"])"`; -exports[`objects > crossSerializeAsync > scoped > supports Symbol.iterator 1`] = `"($R=>$R[0]=Promise.resolve($R[1]={[$R[4]=Symbol.iterator]:($R[5]=s=>(i,c,d,t)=>(i=0,t={[$R[4]]:()=>t,next:()=>{if(i>s.d)return{done:!0,value:void 0};c=i++,d=s.v[c];if(c===s.t)throw d;return{done:c===s.d,value:d}}}))($R[2]={v:$R[3]=[1,2,3,void 0],t:-1,d:3})}))($R[\\"example\\"])"`; +exports[`objects > crossSerializeAsync > scoped > supports Symbol.iterator 1`] = `"($R=>$R[0]=Promise.resolve($R[1]={[$R[2]=Symbol.iterator]:($R[3]=s=>(i,c,d,t)=>(i=0,t={[$R[2]]:()=>t,next:()=>{if(i>s.d)return{done:!0,value:void 0};c=i++,d=s.v[c];if(c===s.t)throw d;return{done:c===s.d,value:d}}}))($R[4]={v:$R[5]=[1,2,3,void 0],t:-1,d:3})}))($R[\\"example\\"])"`; exports[`objects > crossSerializeAsync > scoped > supports self-recursion 1`] = `"($R=>$R[0]={a:$R[1]=Promise.resolve().then(()=>$R[0]),b:$R[2]=Promise.resolve().then(()=>$R[0])})($R[\\"example\\"])"`; exports[`objects > crossSerializeAsync > supports Objects 1`] = `"$R[0]=Promise.resolve($R[1]={hello:\\"world\\"})"`; -exports[`objects > crossSerializeAsync > supports Symbol.asyncIterator 1`] = `"$R[0]={[$R[3]=Symbol.asyncIterator]:($R[4]=s=>b=>(b=s.tee(),s=b[0],b=b[1].getReader(),{[$R[3]]:()=>this,next:()=>b.read().then(d=>{if(d.done)return{done:!0,value:void 0};d=d.value;if(d[0]===1)throw d[1];return{done:d[0]===2,value:d[1]}})}))($R[1]={v:$R[2]=[1,2,3,void 0],t:-1,d:3})}"`; +exports[`objects > crossSerializeAsync > supports Symbol.asyncIterator 1`] = `"$R[0]={[$R[1]=Symbol.asyncIterator]:($R[2]=s=>b=>(b=s.tee(),s=b[0],b=b[1].getReader(),{[$R[1]]:()=>this,next:()=>b.read().then(d=>{if(d.done)return{done:!0,value:void 0};d=d.value;if(d[0]===1)throw d[1];return{done:d[0]===2,value:d[1]}})}))($R[3]={v:$R[4]=[1,2,3,void 0],t:-1,d:3})}"`; -exports[`objects > crossSerializeAsync > supports Symbol.iterator 1`] = `"$R[0]=Promise.resolve($R[1]={[$R[4]=Symbol.iterator]:($R[5]=s=>(i,c,d,t)=>(i=0,t={[$R[4]]:()=>t,next:()=>{if(i>s.d)return{done:!0,value:void 0};c=i++,d=s.v[c];if(c===s.t)throw d;return{done:c===s.d,value:d}}}))($R[2]={v:$R[3]=[1,2,3,void 0],t:-1,d:3})})"`; +exports[`objects > crossSerializeAsync > supports Symbol.iterator 1`] = `"$R[0]=Promise.resolve($R[1]={[$R[2]=Symbol.iterator]:($R[3]=s=>(i,c,d,t)=>(i=0,t={[$R[2]]:()=>t,next:()=>{if(i>s.d)return{done:!0,value:void 0};c=i++,d=s.v[c];if(c===s.t)throw d;return{done:c===s.d,value:d}}}))($R[4]={v:$R[5]=[1,2,3,void 0],t:-1,d:3})})"`; exports[`objects > crossSerializeAsync > supports self-recursion 1`] = `"$R[0]={a:$R[1]=Promise.resolve().then(()=>$R[0]),b:$R[2]=Promise.resolve().then(()=>$R[0])}"`; @@ -38,21 +38,21 @@ exports[`objects > crossSerializeStream > scoped > supports Objects 1`] = `"($R= exports[`objects > crossSerializeStream > scoped > supports Objects 2`] = `"($R=>_$.Ps($R[0],$R[1]={hello:\\"world\\"}))($R[\\"example\\"])"`; -exports[`objects > crossSerializeStream > scoped > supports Symbol.asyncIterator 1`] = `"($R=>$R[0]={[$R[2]=Symbol.asyncIterator]:($R[3]=s=>b=>(b=s.tee(),s=b[0],b=b[1].getReader(),{[$R[2]]:()=>this,next:()=>b.read().then(d=>{if(d.done)return{done:!0,value:void 0};d=d.value;if(d[0]===1)throw d[1];return{done:d[0]===2,value:d[1]}})}))($R[1]=_$.S())})($R[\\"example\\"])"`; +exports[`objects > crossSerializeStream > scoped > supports Symbol.asyncIterator 1`] = `"($R=>$R[0]={[$R[1]=Symbol.asyncIterator]:($R[2]=s=>b=>(b=s.tee(),s=b[0],b=b[1].getReader(),{[$R[1]]:()=>this,next:()=>b.read().then(d=>{if(d.done)return{done:!0,value:void 0};d=d.value;if(d[0]===1)throw d[1];return{done:d[0]===2,value:d[1]}})}))($R[3]=_$.S())})($R[\\"example\\"])"`; -exports[`objects > crossSerializeStream > scoped > supports Symbol.asyncIterator 2`] = `"($R=>_$.Se($R[1],$R[4]=[0,1]))($R[\\"example\\"])"`; +exports[`objects > crossSerializeStream > scoped > supports Symbol.asyncIterator 2`] = `"($R=>_$.Se($R[3],$R[4]=[0,1]))($R[\\"example\\"])"`; -exports[`objects > crossSerializeStream > scoped > supports Symbol.asyncIterator 3`] = `"($R=>_$.Se($R[1],$R[5]=[0,2]))($R[\\"example\\"])"`; +exports[`objects > crossSerializeStream > scoped > supports Symbol.asyncIterator 3`] = `"($R=>_$.Se($R[3],$R[5]=[0,2]))($R[\\"example\\"])"`; -exports[`objects > crossSerializeStream > scoped > supports Symbol.asyncIterator 4`] = `"($R=>_$.Se($R[1],$R[6]=[0,3]))($R[\\"example\\"])"`; +exports[`objects > crossSerializeStream > scoped > supports Symbol.asyncIterator 4`] = `"($R=>_$.Se($R[3],$R[6]=[0,3]))($R[\\"example\\"])"`; -exports[`objects > crossSerializeStream > scoped > supports Symbol.asyncIterator 5`] = `"($R=>_$.Se($R[1],$R[7]=[2,void 0]))($R[\\"example\\"])"`; +exports[`objects > crossSerializeStream > scoped > supports Symbol.asyncIterator 5`] = `"($R=>_$.Se($R[3],$R[7]=[2,void 0]))($R[\\"example\\"])"`; -exports[`objects > crossSerializeStream > scoped > supports Symbol.asyncIterator 6`] = `"($R=>_$.Sc($R[1]))($R[\\"example\\"])"`; +exports[`objects > crossSerializeStream > scoped > supports Symbol.asyncIterator 6`] = `"($R=>_$.Sc($R[3]))($R[\\"example\\"])"`; exports[`objects > crossSerializeStream > scoped > supports Symbol.iterator 1`] = `"($R=>$R[0]=_$.P())($R[\\"example\\"])"`; -exports[`objects > crossSerializeStream > scoped > supports Symbol.iterator 2`] = `"($R=>_$.Ps($R[0],$R[1]={[$R[4]=Symbol.iterator]:($R[5]=s=>(i,c,d,t)=>(i=0,t={[$R[4]]:()=>t,next:()=>{if(i>s.d)return{done:!0,value:void 0};c=i++,d=s.v[c];if(c===s.t)throw d;return{done:c===s.d,value:d}}}))($R[2]={v:$R[3]=[1,2,3,void 0],t:-1,d:3})}))($R[\\"example\\"])"`; +exports[`objects > crossSerializeStream > scoped > supports Symbol.iterator 2`] = `"($R=>_$.Ps($R[0],$R[1]={[$R[2]=Symbol.iterator]:($R[3]=s=>(i,c,d,t)=>(i=0,t={[$R[2]]:()=>t,next:()=>{if(i>s.d)return{done:!0,value:void 0};c=i++,d=s.v[c];if(c===s.t)throw d;return{done:c===s.d,value:d}}}))($R[4]={v:$R[5]=[1,2,3,void 0],t:-1,d:3})}))($R[\\"example\\"])"`; exports[`objects > crossSerializeStream > scoped > supports self-recursion 1`] = `"($R=>$R[0]={a:$R[1]=_$.P(),b:$R[2]=_$.P()})($R[\\"example\\"])"`; @@ -64,21 +64,21 @@ exports[`objects > crossSerializeStream > supports Objects 1`] = `"$R[0]=_$.P()" exports[`objects > crossSerializeStream > supports Objects 2`] = `"_$.Ps($R[0],$R[1]={hello:\\"world\\"})"`; -exports[`objects > crossSerializeStream > supports Symbol.asyncIterator 1`] = `"$R[0]={[$R[2]=Symbol.asyncIterator]:($R[3]=s=>b=>(b=s.tee(),s=b[0],b=b[1].getReader(),{[$R[2]]:()=>this,next:()=>b.read().then(d=>{if(d.done)return{done:!0,value:void 0};d=d.value;if(d[0]===1)throw d[1];return{done:d[0]===2,value:d[1]}})}))($R[1]=_$.S())}"`; +exports[`objects > crossSerializeStream > supports Symbol.asyncIterator 1`] = `"$R[0]={[$R[1]=Symbol.asyncIterator]:($R[2]=s=>b=>(b=s.tee(),s=b[0],b=b[1].getReader(),{[$R[1]]:()=>this,next:()=>b.read().then(d=>{if(d.done)return{done:!0,value:void 0};d=d.value;if(d[0]===1)throw d[1];return{done:d[0]===2,value:d[1]}})}))($R[3]=_$.S())}"`; -exports[`objects > crossSerializeStream > supports Symbol.asyncIterator 2`] = `"_$.Se($R[1],$R[4]=[0,1])"`; +exports[`objects > crossSerializeStream > supports Symbol.asyncIterator 2`] = `"_$.Se($R[3],$R[4]=[0,1])"`; -exports[`objects > crossSerializeStream > supports Symbol.asyncIterator 3`] = `"_$.Se($R[1],$R[5]=[0,2])"`; +exports[`objects > crossSerializeStream > supports Symbol.asyncIterator 3`] = `"_$.Se($R[3],$R[5]=[0,2])"`; -exports[`objects > crossSerializeStream > supports Symbol.asyncIterator 4`] = `"_$.Se($R[1],$R[6]=[0,3])"`; +exports[`objects > crossSerializeStream > supports Symbol.asyncIterator 4`] = `"_$.Se($R[3],$R[6]=[0,3])"`; -exports[`objects > crossSerializeStream > supports Symbol.asyncIterator 5`] = `"_$.Se($R[1],$R[7]=[2,void 0])"`; +exports[`objects > crossSerializeStream > supports Symbol.asyncIterator 5`] = `"_$.Se($R[3],$R[7]=[2,void 0])"`; -exports[`objects > crossSerializeStream > supports Symbol.asyncIterator 6`] = `"_$.Sc($R[1])"`; +exports[`objects > crossSerializeStream > supports Symbol.asyncIterator 6`] = `"_$.Sc($R[3])"`; exports[`objects > crossSerializeStream > supports Symbol.iterator 1`] = `"$R[0]=_$.P()"`; -exports[`objects > crossSerializeStream > supports Symbol.iterator 2`] = `"_$.Ps($R[0],$R[1]={[$R[4]=Symbol.iterator]:($R[5]=s=>(i,c,d,t)=>(i=0,t={[$R[4]]:()=>t,next:()=>{if(i>s.d)return{done:!0,value:void 0};c=i++,d=s.v[c];if(c===s.t)throw d;return{done:c===s.d,value:d}}}))($R[2]={v:$R[3]=[1,2,3,void 0],t:-1,d:3})})"`; +exports[`objects > crossSerializeStream > supports Symbol.iterator 2`] = `"_$.Ps($R[0],$R[1]={[$R[2]=Symbol.iterator]:($R[3]=s=>(i,c,d,t)=>(i=0,t={[$R[2]]:()=>t,next:()=>{if(i>s.d)return{done:!0,value:void 0};c=i++,d=s.v[c];if(c===s.t)throw d;return{done:c===s.d,value:d}}}))($R[4]={v:$R[5]=[1,2,3,void 0],t:-1,d:3})})"`; exports[`objects > crossSerializeStream > supports self-recursion 1`] = `"$R[0]={a:$R[1]=_$.P(),b:$R[2]=_$.P()}"`; @@ -100,56 +100,56 @@ exports[`objects > serializeAsync > supports Symbol.iterator 1`] = `"(h=>(Promis exports[`objects > serializeAsync > supports self-recursion 1`] = `"(h=>(h={a:Promise.resolve().then(()=>h),b:Promise.resolve().then(()=>h)}))()"`; -exports[`objects > toCrossJSON > supports Objects 1`] = `"{\\"t\\":10,\\"i\\":0,\\"p\\":{\\"k\\":[\\"hello\\"],\\"v\\":[{\\"t\\":1,\\"s\\":\\"world\\"}],\\"s\\":1},\\"o\\":0,\\"x\\":{}}"`; +exports[`objects > toCrossJSON > supports Objects 1`] = `"{\\"t\\":10,\\"i\\":0,\\"p\\":{\\"k\\":[\\"hello\\"],\\"v\\":[{\\"t\\":1,\\"s\\":\\"world\\"}],\\"s\\":1},\\"o\\":0}"`; -exports[`objects > toCrossJSON > supports Symbol.iterator 1`] = `"{\\"t\\":10,\\"i\\":0,\\"p\\":{\\"k\\":[0],\\"v\\":[{\\"t\\":10,\\"i\\":1,\\"p\\":{\\"k\\":[\\"v\\",\\"t\\",\\"d\\"],\\"v\\":[{\\"t\\":9,\\"i\\":2,\\"l\\":4,\\"a\\":[{\\"t\\":0,\\"s\\":1},{\\"t\\":0,\\"s\\":2},{\\"t\\":0,\\"s\\":3},{\\"t\\":2,\\"s\\":1}],\\"o\\":0},{\\"t\\":0,\\"s\\":-1},{\\"t\\":0,\\"s\\":3}],\\"s\\":3},\\"o\\":0,\\"x\\":{}}],\\"s\\":1},\\"o\\":0,\\"x\\":{\\"1\\":{\\"t\\":17,\\"i\\":3,\\"s\\":3},\\"2\\":{\\"t\\":42,\\"i\\":4,\\"x\\":{\\"1\\":{\\"t\\":4,\\"i\\":3}}}}}"`; +exports[`objects > toCrossJSON > supports Symbol.iterator 1`] = `"{\\"t\\":10,\\"i\\":0,\\"p\\":{\\"k\\":[{\\"t\\":17,\\"i\\":1,\\"s\\":3}],\\"v\\":[{\\"t\\":43,\\"a\\":[{\\"t\\":42,\\"i\\":2,\\"f\\":{\\"t\\":4,\\"i\\":1}},{\\"t\\":10,\\"i\\":3,\\"p\\":{\\"k\\":[\\"v\\",\\"t\\",\\"d\\"],\\"v\\":[{\\"t\\":9,\\"i\\":4,\\"l\\":4,\\"a\\":[{\\"t\\":0,\\"s\\":1},{\\"t\\":0,\\"s\\":2},{\\"t\\":0,\\"s\\":3},{\\"t\\":2,\\"s\\":1}],\\"o\\":0},{\\"t\\":0,\\"s\\":-1},{\\"t\\":0,\\"s\\":3}],\\"s\\":3},\\"o\\":0}]}],\\"s\\":1},\\"o\\":0}"`; -exports[`objects > toCrossJSON > supports self-recursion 1`] = `"{\\"t\\":10,\\"i\\":0,\\"p\\":{\\"k\\":[\\"a\\",\\"b\\"],\\"v\\":[{\\"t\\":4,\\"i\\":0},{\\"t\\":4,\\"i\\":0}],\\"s\\":2},\\"o\\":0,\\"x\\":{}}"`; +exports[`objects > toCrossJSON > supports self-recursion 1`] = `"{\\"t\\":10,\\"i\\":0,\\"p\\":{\\"k\\":[\\"a\\",\\"b\\"],\\"v\\":[{\\"t\\":4,\\"i\\":0},{\\"t\\":4,\\"i\\":0}],\\"s\\":2},\\"o\\":0}"`; -exports[`objects > toCrossJSONAsync > supports Objects 1`] = `"{\\"t\\":12,\\"i\\":0,\\"s\\":1,\\"f\\":{\\"t\\":10,\\"i\\":1,\\"p\\":{\\"k\\":[\\"hello\\"],\\"v\\":[{\\"t\\":1,\\"s\\":\\"world\\"}],\\"s\\":1},\\"o\\":0,\\"x\\":{}}}"`; +exports[`objects > toCrossJSONAsync > supports Objects 1`] = `"{\\"t\\":12,\\"i\\":0,\\"s\\":1,\\"f\\":{\\"t\\":10,\\"i\\":1,\\"p\\":{\\"k\\":[\\"hello\\"],\\"v\\":[{\\"t\\":1,\\"s\\":\\"world\\"}],\\"s\\":1},\\"o\\":0}}"`; -exports[`objects > toCrossJSONAsync > supports Symbol.asyncIterator 1`] = `"{\\"t\\":10,\\"i\\":0,\\"p\\":{\\"k\\":[1],\\"v\\":[{\\"t\\":10,\\"i\\":1,\\"p\\":{\\"k\\":[\\"v\\",\\"t\\",\\"d\\"],\\"v\\":[{\\"t\\":9,\\"i\\":2,\\"l\\":4,\\"a\\":[{\\"t\\":0,\\"s\\":1},{\\"t\\":0,\\"s\\":2},{\\"t\\":0,\\"s\\":3},{\\"t\\":2,\\"s\\":1}],\\"o\\":0},{\\"t\\":0,\\"s\\":-1},{\\"t\\":0,\\"s\\":3}],\\"s\\":3},\\"o\\":0,\\"x\\":{}}],\\"s\\":1},\\"o\\":0,\\"x\\":{\\"3\\":{\\"t\\":17,\\"i\\":3,\\"s\\":0},\\"4\\":{\\"t\\":43,\\"i\\":4,\\"x\\":{\\"3\\":{\\"t\\":4,\\"i\\":3}}}}}"`; +exports[`objects > toCrossJSONAsync > supports Symbol.asyncIterator 1`] = `"{\\"t\\":10,\\"i\\":0,\\"p\\":{\\"k\\":[{\\"t\\":17,\\"i\\":1,\\"s\\":0}],\\"v\\":[{\\"t\\":45,\\"a\\":[{\\"t\\":44,\\"i\\":2,\\"f\\":{\\"t\\":4,\\"i\\":1}},{\\"t\\":10,\\"i\\":3,\\"p\\":{\\"k\\":[\\"v\\",\\"t\\",\\"d\\"],\\"v\\":[{\\"t\\":9,\\"i\\":4,\\"l\\":4,\\"a\\":[{\\"t\\":0,\\"s\\":1},{\\"t\\":0,\\"s\\":2},{\\"t\\":0,\\"s\\":3},{\\"t\\":2,\\"s\\":1}],\\"o\\":0},{\\"t\\":0,\\"s\\":-1},{\\"t\\":0,\\"s\\":3}],\\"s\\":3},\\"o\\":0}]}],\\"s\\":1},\\"o\\":0}"`; -exports[`objects > toCrossJSONAsync > supports Symbol.iterator 1`] = `"{\\"t\\":12,\\"i\\":0,\\"s\\":1,\\"f\\":{\\"t\\":10,\\"i\\":1,\\"p\\":{\\"k\\":[0],\\"v\\":[{\\"t\\":10,\\"i\\":2,\\"p\\":{\\"k\\":[\\"v\\",\\"t\\",\\"d\\"],\\"v\\":[{\\"t\\":9,\\"i\\":3,\\"l\\":4,\\"a\\":[{\\"t\\":0,\\"s\\":1},{\\"t\\":0,\\"s\\":2},{\\"t\\":0,\\"s\\":3},{\\"t\\":2,\\"s\\":1}],\\"o\\":0},{\\"t\\":0,\\"s\\":-1},{\\"t\\":0,\\"s\\":3}],\\"s\\":3},\\"o\\":0,\\"x\\":{}}],\\"s\\":1},\\"o\\":0,\\"x\\":{\\"1\\":{\\"t\\":17,\\"i\\":4,\\"s\\":3},\\"2\\":{\\"t\\":42,\\"i\\":5,\\"x\\":{\\"1\\":{\\"t\\":4,\\"i\\":4}}}}}}"`; +exports[`objects > toCrossJSONAsync > supports Symbol.iterator 1`] = `"{\\"t\\":12,\\"i\\":0,\\"s\\":1,\\"f\\":{\\"t\\":10,\\"i\\":1,\\"p\\":{\\"k\\":[{\\"t\\":17,\\"i\\":2,\\"s\\":3}],\\"v\\":[{\\"t\\":43,\\"a\\":[{\\"t\\":42,\\"i\\":3,\\"f\\":{\\"t\\":4,\\"i\\":2}},{\\"t\\":10,\\"i\\":4,\\"p\\":{\\"k\\":[\\"v\\",\\"t\\",\\"d\\"],\\"v\\":[{\\"t\\":9,\\"i\\":5,\\"l\\":4,\\"a\\":[{\\"t\\":0,\\"s\\":1},{\\"t\\":0,\\"s\\":2},{\\"t\\":0,\\"s\\":3},{\\"t\\":2,\\"s\\":1}],\\"o\\":0},{\\"t\\":0,\\"s\\":-1},{\\"t\\":0,\\"s\\":3}],\\"s\\":3},\\"o\\":0}]}],\\"s\\":1},\\"o\\":0}}"`; -exports[`objects > toCrossJSONAsync > supports self-recursion 1`] = `"{\\"t\\":10,\\"i\\":0,\\"p\\":{\\"k\\":[\\"a\\",\\"b\\"],\\"v\\":[{\\"t\\":12,\\"i\\":1,\\"s\\":1,\\"f\\":{\\"t\\":4,\\"i\\":0}},{\\"t\\":12,\\"i\\":2,\\"s\\":1,\\"f\\":{\\"t\\":4,\\"i\\":0}}],\\"s\\":2},\\"o\\":0,\\"x\\":{}}"`; +exports[`objects > toCrossJSONAsync > supports self-recursion 1`] = `"{\\"t\\":10,\\"i\\":0,\\"p\\":{\\"k\\":[\\"a\\",\\"b\\"],\\"v\\":[{\\"t\\":12,\\"i\\":1,\\"s\\":1,\\"f\\":{\\"t\\":4,\\"i\\":0}},{\\"t\\":12,\\"i\\":2,\\"s\\":1,\\"f\\":{\\"t\\":4,\\"i\\":0}}],\\"s\\":2},\\"o\\":0}"`; exports[`objects > toCrossJSONStream > supports Objects 1`] = `"{\\"t\\":28,\\"i\\":0}"`; -exports[`objects > toCrossJSONStream > supports Objects 2`] = `"{\\"t\\":29,\\"i\\":0,\\"f\\":{\\"t\\":10,\\"i\\":1,\\"p\\":{\\"k\\":[\\"hello\\"],\\"v\\":[{\\"t\\":1,\\"s\\":\\"world\\"}],\\"s\\":1},\\"o\\":0,\\"x\\":{}}}"`; +exports[`objects > toCrossJSONStream > supports Objects 2`] = `"{\\"t\\":29,\\"i\\":0,\\"f\\":{\\"t\\":10,\\"i\\":1,\\"p\\":{\\"k\\":[\\"hello\\"],\\"v\\":[{\\"t\\":1,\\"s\\":\\"world\\"}],\\"s\\":1},\\"o\\":0}}"`; -exports[`objects > toCrossJSONStream > supports Symbol.asyncIterator 1`] = `"{\\"t\\":10,\\"i\\":0,\\"p\\":{\\"k\\":[1],\\"v\\":[{\\"t\\":31,\\"i\\":1}],\\"s\\":1},\\"o\\":0,\\"x\\":{\\"3\\":{\\"t\\":17,\\"i\\":2,\\"s\\":0},\\"4\\":{\\"t\\":43,\\"i\\":3,\\"x\\":{\\"3\\":{\\"t\\":4,\\"i\\":2}}}}}"`; +exports[`objects > toCrossJSONStream > supports Symbol.asyncIterator 1`] = `"{\\"t\\":10,\\"i\\":0,\\"p\\":{\\"k\\":[{\\"t\\":17,\\"i\\":1,\\"s\\":0}],\\"v\\":[{\\"t\\":45,\\"a\\":[{\\"t\\":44,\\"i\\":2,\\"f\\":{\\"t\\":4,\\"i\\":1}},{\\"t\\":31,\\"i\\":3}]}],\\"s\\":1},\\"o\\":0}"`; -exports[`objects > toCrossJSONStream > supports Symbol.asyncIterator 2`] = `"{\\"t\\":32,\\"i\\":1,\\"f\\":{\\"t\\":9,\\"i\\":4,\\"l\\":2,\\"a\\":[{\\"t\\":0,\\"s\\":0},{\\"t\\":0,\\"s\\":1}],\\"o\\":0}}"`; +exports[`objects > toCrossJSONStream > supports Symbol.asyncIterator 2`] = `"{\\"t\\":32,\\"i\\":3,\\"f\\":{\\"t\\":9,\\"i\\":4,\\"l\\":2,\\"a\\":[{\\"t\\":0,\\"s\\":0},{\\"t\\":0,\\"s\\":1}],\\"o\\":0}}"`; -exports[`objects > toCrossJSONStream > supports Symbol.asyncIterator 3`] = `"{\\"t\\":32,\\"i\\":1,\\"f\\":{\\"t\\":9,\\"i\\":5,\\"l\\":2,\\"a\\":[{\\"t\\":0,\\"s\\":0},{\\"t\\":0,\\"s\\":2}],\\"o\\":0}}"`; +exports[`objects > toCrossJSONStream > supports Symbol.asyncIterator 3`] = `"{\\"t\\":32,\\"i\\":3,\\"f\\":{\\"t\\":9,\\"i\\":5,\\"l\\":2,\\"a\\":[{\\"t\\":0,\\"s\\":0},{\\"t\\":0,\\"s\\":2}],\\"o\\":0}}"`; -exports[`objects > toCrossJSONStream > supports Symbol.asyncIterator 4`] = `"{\\"t\\":32,\\"i\\":1,\\"f\\":{\\"t\\":9,\\"i\\":6,\\"l\\":2,\\"a\\":[{\\"t\\":0,\\"s\\":0},{\\"t\\":0,\\"s\\":3}],\\"o\\":0}}"`; +exports[`objects > toCrossJSONStream > supports Symbol.asyncIterator 4`] = `"{\\"t\\":32,\\"i\\":3,\\"f\\":{\\"t\\":9,\\"i\\":6,\\"l\\":2,\\"a\\":[{\\"t\\":0,\\"s\\":0},{\\"t\\":0,\\"s\\":3}],\\"o\\":0}}"`; -exports[`objects > toCrossJSONStream > supports Symbol.asyncIterator 5`] = `"{\\"t\\":32,\\"i\\":1,\\"f\\":{\\"t\\":9,\\"i\\":7,\\"l\\":2,\\"a\\":[{\\"t\\":0,\\"s\\":2},{\\"t\\":2,\\"s\\":1}],\\"o\\":0}}"`; +exports[`objects > toCrossJSONStream > supports Symbol.asyncIterator 5`] = `"{\\"t\\":32,\\"i\\":3,\\"f\\":{\\"t\\":9,\\"i\\":7,\\"l\\":2,\\"a\\":[{\\"t\\":0,\\"s\\":2},{\\"t\\":2,\\"s\\":1}],\\"o\\":0}}"`; -exports[`objects > toCrossJSONStream > supports Symbol.asyncIterator 6`] = `"{\\"t\\":33,\\"i\\":1}"`; +exports[`objects > toCrossJSONStream > supports Symbol.asyncIterator 6`] = `"{\\"t\\":33,\\"i\\":3}"`; exports[`objects > toCrossJSONStream > supports Symbol.iterator 1`] = `"{\\"t\\":28,\\"i\\":0}"`; -exports[`objects > toCrossJSONStream > supports Symbol.iterator 2`] = `"{\\"t\\":29,\\"i\\":0,\\"f\\":{\\"t\\":10,\\"i\\":1,\\"p\\":{\\"k\\":[0],\\"v\\":[{\\"t\\":10,\\"i\\":2,\\"p\\":{\\"k\\":[\\"v\\",\\"t\\",\\"d\\"],\\"v\\":[{\\"t\\":9,\\"i\\":3,\\"l\\":4,\\"a\\":[{\\"t\\":0,\\"s\\":1},{\\"t\\":0,\\"s\\":2},{\\"t\\":0,\\"s\\":3},{\\"t\\":2,\\"s\\":1}],\\"o\\":0},{\\"t\\":0,\\"s\\":-1},{\\"t\\":0,\\"s\\":3}],\\"s\\":3},\\"o\\":0,\\"x\\":{}}],\\"s\\":1},\\"o\\":0,\\"x\\":{\\"1\\":{\\"t\\":17,\\"i\\":4,\\"s\\":3},\\"2\\":{\\"t\\":42,\\"i\\":5,\\"x\\":{\\"1\\":{\\"t\\":4,\\"i\\":4}}}}}}"`; +exports[`objects > toCrossJSONStream > supports Symbol.iterator 2`] = `"{\\"t\\":29,\\"i\\":0,\\"f\\":{\\"t\\":10,\\"i\\":1,\\"p\\":{\\"k\\":[{\\"t\\":17,\\"i\\":2,\\"s\\":3}],\\"v\\":[{\\"t\\":43,\\"a\\":[{\\"t\\":42,\\"i\\":3,\\"f\\":{\\"t\\":4,\\"i\\":2}},{\\"t\\":10,\\"i\\":4,\\"p\\":{\\"k\\":[\\"v\\",\\"t\\",\\"d\\"],\\"v\\":[{\\"t\\":9,\\"i\\":5,\\"l\\":4,\\"a\\":[{\\"t\\":0,\\"s\\":1},{\\"t\\":0,\\"s\\":2},{\\"t\\":0,\\"s\\":3},{\\"t\\":2,\\"s\\":1}],\\"o\\":0},{\\"t\\":0,\\"s\\":-1},{\\"t\\":0,\\"s\\":3}],\\"s\\":3},\\"o\\":0}]}],\\"s\\":1},\\"o\\":0}}"`; -exports[`objects > toCrossJSONStream > supports self-recursion 1`] = `"{\\"t\\":10,\\"i\\":0,\\"p\\":{\\"k\\":[\\"a\\",\\"b\\"],\\"v\\":[{\\"t\\":28,\\"i\\":1},{\\"t\\":28,\\"i\\":2}],\\"s\\":2},\\"o\\":0,\\"x\\":{}}"`; +exports[`objects > toCrossJSONStream > supports self-recursion 1`] = `"{\\"t\\":10,\\"i\\":0,\\"p\\":{\\"k\\":[\\"a\\",\\"b\\"],\\"v\\":[{\\"t\\":28,\\"i\\":1},{\\"t\\":28,\\"i\\":2}],\\"s\\":2},\\"o\\":0}"`; exports[`objects > toCrossJSONStream > supports self-recursion 2`] = `"{\\"t\\":29,\\"i\\":1,\\"f\\":{\\"t\\":4,\\"i\\":0}}"`; exports[`objects > toCrossJSONStream > supports self-recursion 3`] = `"{\\"t\\":29,\\"i\\":2,\\"f\\":{\\"t\\":4,\\"i\\":0}}"`; -exports[`objects > toJSON > supports Objects 1`] = `"{\\"t\\":{\\"t\\":10,\\"i\\":0,\\"p\\":{\\"k\\":[\\"hello\\"],\\"v\\":[{\\"t\\":1,\\"s\\":\\"world\\"}],\\"s\\":1},\\"o\\":0,\\"x\\":{}},\\"f\\":16383,\\"m\\":[]}"`; +exports[`objects > toJSON > supports Objects 1`] = `"{\\"t\\":{\\"t\\":10,\\"i\\":0,\\"p\\":{\\"k\\":[\\"hello\\"],\\"v\\":[{\\"t\\":1,\\"s\\":\\"world\\"}],\\"s\\":1},\\"o\\":0},\\"f\\":16383,\\"m\\":[]}"`; -exports[`objects > toJSON > supports Symbol.iterator 1`] = `"{\\"t\\":{\\"t\\":10,\\"i\\":0,\\"p\\":{\\"k\\":[0],\\"v\\":[{\\"t\\":10,\\"i\\":1,\\"p\\":{\\"k\\":[\\"v\\",\\"t\\",\\"d\\"],\\"v\\":[{\\"t\\":9,\\"i\\":2,\\"l\\":4,\\"a\\":[{\\"t\\":0,\\"s\\":1},{\\"t\\":0,\\"s\\":2},{\\"t\\":0,\\"s\\":3},{\\"t\\":2,\\"s\\":1}],\\"o\\":0},{\\"t\\":0,\\"s\\":-1},{\\"t\\":0,\\"s\\":3}],\\"s\\":3},\\"o\\":0,\\"x\\":{}}],\\"s\\":1},\\"o\\":0,\\"x\\":{\\"1\\":{\\"t\\":17,\\"i\\":3,\\"s\\":3},\\"2\\":{\\"t\\":42,\\"i\\":4,\\"x\\":{\\"1\\":{\\"t\\":4,\\"i\\":3}}}}},\\"f\\":16383,\\"m\\":[3]}"`; +exports[`objects > toJSON > supports Symbol.iterator 1`] = `"{\\"t\\":{\\"t\\":10,\\"i\\":0,\\"p\\":{\\"k\\":[{\\"t\\":17,\\"i\\":1,\\"s\\":3}],\\"v\\":[{\\"t\\":43,\\"a\\":[{\\"t\\":42,\\"i\\":2,\\"f\\":{\\"t\\":4,\\"i\\":1}},{\\"t\\":10,\\"i\\":3,\\"p\\":{\\"k\\":[\\"v\\",\\"t\\",\\"d\\"],\\"v\\":[{\\"t\\":9,\\"i\\":4,\\"l\\":4,\\"a\\":[{\\"t\\":0,\\"s\\":1},{\\"t\\":0,\\"s\\":2},{\\"t\\":0,\\"s\\":3},{\\"t\\":2,\\"s\\":1}],\\"o\\":0},{\\"t\\":0,\\"s\\":-1},{\\"t\\":0,\\"s\\":3}],\\"s\\":3},\\"o\\":0}]}],\\"s\\":1},\\"o\\":0},\\"f\\":16383,\\"m\\":[1]}"`; -exports[`objects > toJSON > supports self-recursion 1`] = `"{\\"t\\":{\\"t\\":10,\\"i\\":0,\\"p\\":{\\"k\\":[\\"a\\",\\"b\\"],\\"v\\":[{\\"t\\":4,\\"i\\":0},{\\"t\\":4,\\"i\\":0}],\\"s\\":2},\\"o\\":0,\\"x\\":{}},\\"f\\":16383,\\"m\\":[0]}"`; +exports[`objects > toJSON > supports self-recursion 1`] = `"{\\"t\\":{\\"t\\":10,\\"i\\":0,\\"p\\":{\\"k\\":[\\"a\\",\\"b\\"],\\"v\\":[{\\"t\\":4,\\"i\\":0},{\\"t\\":4,\\"i\\":0}],\\"s\\":2},\\"o\\":0},\\"f\\":16383,\\"m\\":[0]}"`; -exports[`objects > toJSONAsync > supports Objects 1`] = `"{\\"t\\":{\\"t\\":12,\\"i\\":0,\\"s\\":1,\\"f\\":{\\"t\\":10,\\"i\\":1,\\"p\\":{\\"k\\":[\\"hello\\"],\\"v\\":[{\\"t\\":1,\\"s\\":\\"world\\"}],\\"s\\":1},\\"o\\":0,\\"x\\":{}}},\\"f\\":16383,\\"m\\":[]}"`; +exports[`objects > toJSONAsync > supports Objects 1`] = `"{\\"t\\":{\\"t\\":12,\\"i\\":0,\\"s\\":1,\\"f\\":{\\"t\\":10,\\"i\\":1,\\"p\\":{\\"k\\":[\\"hello\\"],\\"v\\":[{\\"t\\":1,\\"s\\":\\"world\\"}],\\"s\\":1},\\"o\\":0}},\\"f\\":16383,\\"m\\":[]}"`; -exports[`objects > toJSONAsync > supports Symbol.asyncIterator 1`] = `"{\\"t\\":{\\"t\\":10,\\"i\\":0,\\"p\\":{\\"k\\":[1],\\"v\\":[{\\"t\\":10,\\"i\\":1,\\"p\\":{\\"k\\":[\\"v\\",\\"t\\",\\"d\\"],\\"v\\":[{\\"t\\":9,\\"i\\":2,\\"l\\":4,\\"a\\":[{\\"t\\":0,\\"s\\":1},{\\"t\\":0,\\"s\\":2},{\\"t\\":0,\\"s\\":3},{\\"t\\":2,\\"s\\":1}],\\"o\\":0},{\\"t\\":0,\\"s\\":-1},{\\"t\\":0,\\"s\\":3}],\\"s\\":3},\\"o\\":0,\\"x\\":{}}],\\"s\\":1},\\"o\\":0,\\"x\\":{\\"3\\":{\\"t\\":17,\\"i\\":3,\\"s\\":0},\\"4\\":{\\"t\\":43,\\"i\\":4,\\"x\\":{\\"3\\":{\\"t\\":4,\\"i\\":3}}}}},\\"f\\":16383,\\"m\\":[3]}"`; +exports[`objects > toJSONAsync > supports Symbol.asyncIterator 1`] = `"{\\"t\\":{\\"t\\":10,\\"i\\":0,\\"p\\":{\\"k\\":[{\\"t\\":17,\\"i\\":1,\\"s\\":0}],\\"v\\":[{\\"t\\":45,\\"a\\":[{\\"t\\":44,\\"i\\":2,\\"f\\":{\\"t\\":4,\\"i\\":1}},{\\"t\\":10,\\"i\\":3,\\"p\\":{\\"k\\":[\\"v\\",\\"t\\",\\"d\\"],\\"v\\":[{\\"t\\":9,\\"i\\":4,\\"l\\":4,\\"a\\":[{\\"t\\":0,\\"s\\":1},{\\"t\\":0,\\"s\\":2},{\\"t\\":0,\\"s\\":3},{\\"t\\":2,\\"s\\":1}],\\"o\\":0},{\\"t\\":0,\\"s\\":-1},{\\"t\\":0,\\"s\\":3}],\\"s\\":3},\\"o\\":0}]}],\\"s\\":1},\\"o\\":0},\\"f\\":16383,\\"m\\":[1]}"`; -exports[`objects > toJSONAsync > supports Symbol.iterator 1`] = `"{\\"t\\":{\\"t\\":12,\\"i\\":0,\\"s\\":1,\\"f\\":{\\"t\\":10,\\"i\\":1,\\"p\\":{\\"k\\":[0],\\"v\\":[{\\"t\\":10,\\"i\\":2,\\"p\\":{\\"k\\":[\\"v\\",\\"t\\",\\"d\\"],\\"v\\":[{\\"t\\":9,\\"i\\":3,\\"l\\":4,\\"a\\":[{\\"t\\":0,\\"s\\":1},{\\"t\\":0,\\"s\\":2},{\\"t\\":0,\\"s\\":3},{\\"t\\":2,\\"s\\":1}],\\"o\\":0},{\\"t\\":0,\\"s\\":-1},{\\"t\\":0,\\"s\\":3}],\\"s\\":3},\\"o\\":0,\\"x\\":{}}],\\"s\\":1},\\"o\\":0,\\"x\\":{\\"1\\":{\\"t\\":17,\\"i\\":4,\\"s\\":3},\\"2\\":{\\"t\\":42,\\"i\\":5,\\"x\\":{\\"1\\":{\\"t\\":4,\\"i\\":4}}}}}},\\"f\\":16383,\\"m\\":[4]}"`; +exports[`objects > toJSONAsync > supports Symbol.iterator 1`] = `"{\\"t\\":{\\"t\\":12,\\"i\\":0,\\"s\\":1,\\"f\\":{\\"t\\":10,\\"i\\":1,\\"p\\":{\\"k\\":[{\\"t\\":17,\\"i\\":2,\\"s\\":3}],\\"v\\":[{\\"t\\":43,\\"a\\":[{\\"t\\":42,\\"i\\":3,\\"f\\":{\\"t\\":4,\\"i\\":2}},{\\"t\\":10,\\"i\\":4,\\"p\\":{\\"k\\":[\\"v\\",\\"t\\",\\"d\\"],\\"v\\":[{\\"t\\":9,\\"i\\":5,\\"l\\":4,\\"a\\":[{\\"t\\":0,\\"s\\":1},{\\"t\\":0,\\"s\\":2},{\\"t\\":0,\\"s\\":3},{\\"t\\":2,\\"s\\":1}],\\"o\\":0},{\\"t\\":0,\\"s\\":-1},{\\"t\\":0,\\"s\\":3}],\\"s\\":3},\\"o\\":0}]}],\\"s\\":1},\\"o\\":0}},\\"f\\":16383,\\"m\\":[2]}"`; -exports[`objects > toJSONAsync > supports self-recursion 1`] = `"{\\"t\\":{\\"t\\":10,\\"i\\":0,\\"p\\":{\\"k\\":[\\"a\\",\\"b\\"],\\"v\\":[{\\"t\\":12,\\"i\\":1,\\"s\\":1,\\"f\\":{\\"t\\":4,\\"i\\":0}},{\\"t\\":12,\\"i\\":2,\\"s\\":1,\\"f\\":{\\"t\\":4,\\"i\\":0}}],\\"s\\":2},\\"o\\":0,\\"x\\":{}},\\"f\\":16383,\\"m\\":[0]}"`; +exports[`objects > toJSONAsync > supports self-recursion 1`] = `"{\\"t\\":{\\"t\\":10,\\"i\\":0,\\"p\\":{\\"k\\":[\\"a\\",\\"b\\"],\\"v\\":[{\\"t\\":12,\\"i\\":1,\\"s\\":1,\\"f\\":{\\"t\\":4,\\"i\\":0}},{\\"t\\":12,\\"i\\":2,\\"s\\":1,\\"f\\":{\\"t\\":4,\\"i\\":0}}],\\"s\\":2},\\"o\\":0},\\"f\\":16383,\\"m\\":[0]}"`; diff --git a/packages/seroval/test/__snapshots__/sealed-object.test.ts.snap b/packages/seroval/test/__snapshots__/sealed-object.test.ts.snap index dde09f75..a1f20173 100644 --- a/packages/seroval/test/__snapshots__/sealed-object.test.ts.snap +++ b/packages/seroval/test/__snapshots__/sealed-object.test.ts.snap @@ -2,29 +2,29 @@ exports[`sealed object > crossSerialize > scoped > supports Objects 1`] = `"($R=>$R[0]={hello:\\"world\\"},Object.seal($R[0]),$R[0])($R[\\"example\\"])"`; -exports[`sealed object > crossSerialize > scoped > supports Symbol.iterator 1`] = `"($R=>$R[0]={[$R[3]=Symbol.iterator]:($R[4]=s=>(i,c,d,t)=>(i=0,t={[$R[3]]:()=>t,next:()=>{if(i>s.d)return{done:!0,value:void 0};c=i++,d=s.v[c];if(c===s.t)throw d;return{done:c===s.d,value:d}}}))($R[1]={v:$R[2]=[1,2,3,void 0],t:-1,d:3})},Object.seal($R[0]),$R[0])($R[\\"example\\"])"`; +exports[`sealed object > crossSerialize > scoped > supports Symbol.iterator 1`] = `"($R=>$R[0]={[$R[1]=Symbol.iterator]:($R[2]=s=>(i,c,d,t)=>(i=0,t={[$R[1]]:()=>t,next:()=>{if(i>s.d)return{done:!0,value:void 0};c=i++,d=s.v[c];if(c===s.t)throw d;return{done:c===s.d,value:d}}}))($R[3]={v:$R[4]=[1,2,3,void 0],t:-1,d:3})},Object.seal($R[0]),$R[0])($R[\\"example\\"])"`; exports[`sealed object > crossSerialize > scoped > supports self-recursion 1`] = `"($R=>$R[0]={},$R[0].b=$R[0].a=$R[0],Object.seal($R[0]),$R[0])($R[\\"example\\"])"`; exports[`sealed object > crossSerialize > supports Objects 1`] = `"($R[0]={hello:\\"world\\"},Object.seal($R[0]),$R[0])"`; -exports[`sealed object > crossSerialize > supports Symbol.iterator 1`] = `"($R[0]={[$R[3]=Symbol.iterator]:($R[4]=s=>(i,c,d,t)=>(i=0,t={[$R[3]]:()=>t,next:()=>{if(i>s.d)return{done:!0,value:void 0};c=i++,d=s.v[c];if(c===s.t)throw d;return{done:c===s.d,value:d}}}))($R[1]={v:$R[2]=[1,2,3,void 0],t:-1,d:3})},Object.seal($R[0]),$R[0])"`; +exports[`sealed object > crossSerialize > supports Symbol.iterator 1`] = `"($R[0]={[$R[1]=Symbol.iterator]:($R[2]=s=>(i,c,d,t)=>(i=0,t={[$R[1]]:()=>t,next:()=>{if(i>s.d)return{done:!0,value:void 0};c=i++,d=s.v[c];if(c===s.t)throw d;return{done:c===s.d,value:d}}}))($R[3]={v:$R[4]=[1,2,3,void 0],t:-1,d:3})},Object.seal($R[0]),$R[0])"`; exports[`sealed object > crossSerialize > supports self-recursion 1`] = `"($R[0]={},$R[0].b=$R[0].a=$R[0],Object.seal($R[0]),$R[0])"`; exports[`sealed object > crossSerializeAsync > scoped > supports Objects 1`] = `"($R=>$R[0]=Promise.resolve($R[1]={hello:\\"world\\"}),Object.seal($R[1]),$R[0])($R[\\"example\\"])"`; -exports[`sealed object > crossSerializeAsync > scoped > supports Symbol.asyncIterator 1`] = `"($R=>$R[0]={[$R[3]=Symbol.asyncIterator]:($R[4]=s=>b=>(b=s.tee(),s=b[0],b=b[1].getReader(),{[$R[3]]:()=>this,next:()=>b.read().then(d=>{if(d.done)return{done:!0,value:void 0};d=d.value;if(d[0]===1)throw d[1];return{done:d[0]===2,value:d[1]}})}))($R[1]={v:$R[2]=[1,2,3,void 0],t:-1,d:3})},Object.seal($R[0]),$R[0])($R[\\"example\\"])"`; +exports[`sealed object > crossSerializeAsync > scoped > supports Symbol.asyncIterator 1`] = `"($R=>$R[0]={[$R[1]=Symbol.asyncIterator]:($R[2]=s=>b=>(b=s.tee(),s=b[0],b=b[1].getReader(),{[$R[1]]:()=>this,next:()=>b.read().then(d=>{if(d.done)return{done:!0,value:void 0};d=d.value;if(d[0]===1)throw d[1];return{done:d[0]===2,value:d[1]}})}))($R[3]={v:$R[4]=[1,2,3,void 0],t:-1,d:3})},Object.seal($R[0]),$R[0])($R[\\"example\\"])"`; -exports[`sealed object > crossSerializeAsync > scoped > supports Symbol.iterator 1`] = `"($R=>$R[0]=Promise.resolve($R[1]={[$R[4]=Symbol.iterator]:($R[5]=s=>(i,c,d,t)=>(i=0,t={[$R[4]]:()=>t,next:()=>{if(i>s.d)return{done:!0,value:void 0};c=i++,d=s.v[c];if(c===s.t)throw d;return{done:c===s.d,value:d}}}))($R[2]={v:$R[3]=[1,2,3,void 0],t:-1,d:3})}),Object.seal($R[1]),$R[0])($R[\\"example\\"])"`; +exports[`sealed object > crossSerializeAsync > scoped > supports Symbol.iterator 1`] = `"($R=>$R[0]=Promise.resolve($R[1]={[$R[2]=Symbol.iterator]:($R[3]=s=>(i,c,d,t)=>(i=0,t={[$R[2]]:()=>t,next:()=>{if(i>s.d)return{done:!0,value:void 0};c=i++,d=s.v[c];if(c===s.t)throw d;return{done:c===s.d,value:d}}}))($R[4]={v:$R[5]=[1,2,3,void 0],t:-1,d:3})}),Object.seal($R[1]),$R[0])($R[\\"example\\"])"`; exports[`sealed object > crossSerializeAsync > scoped > supports self-recursion 1`] = `"($R=>$R[0]={a:$R[1]=Promise.resolve().then(()=>$R[0]),b:$R[2]=Promise.resolve().then(()=>$R[0])},Object.seal($R[0]),$R[0])($R[\\"example\\"])"`; exports[`sealed object > crossSerializeAsync > supports Objects 1`] = `"($R[0]=Promise.resolve($R[1]={hello:\\"world\\"}),Object.seal($R[1]),$R[0])"`; -exports[`sealed object > crossSerializeAsync > supports Symbol.asyncIterator 1`] = `"($R[0]={[$R[3]=Symbol.asyncIterator]:($R[4]=s=>b=>(b=s.tee(),s=b[0],b=b[1].getReader(),{[$R[3]]:()=>this,next:()=>b.read().then(d=>{if(d.done)return{done:!0,value:void 0};d=d.value;if(d[0]===1)throw d[1];return{done:d[0]===2,value:d[1]}})}))($R[1]={v:$R[2]=[1,2,3,void 0],t:-1,d:3})},Object.seal($R[0]),$R[0])"`; +exports[`sealed object > crossSerializeAsync > supports Symbol.asyncIterator 1`] = `"($R[0]={[$R[1]=Symbol.asyncIterator]:($R[2]=s=>b=>(b=s.tee(),s=b[0],b=b[1].getReader(),{[$R[1]]:()=>this,next:()=>b.read().then(d=>{if(d.done)return{done:!0,value:void 0};d=d.value;if(d[0]===1)throw d[1];return{done:d[0]===2,value:d[1]}})}))($R[3]={v:$R[4]=[1,2,3,void 0],t:-1,d:3})},Object.seal($R[0]),$R[0])"`; -exports[`sealed object > crossSerializeAsync > supports Symbol.iterator 1`] = `"($R[0]=Promise.resolve($R[1]={[$R[4]=Symbol.iterator]:($R[5]=s=>(i,c,d,t)=>(i=0,t={[$R[4]]:()=>t,next:()=>{if(i>s.d)return{done:!0,value:void 0};c=i++,d=s.v[c];if(c===s.t)throw d;return{done:c===s.d,value:d}}}))($R[2]={v:$R[3]=[1,2,3,void 0],t:-1,d:3})}),Object.seal($R[1]),$R[0])"`; +exports[`sealed object > crossSerializeAsync > supports Symbol.iterator 1`] = `"($R[0]=Promise.resolve($R[1]={[$R[2]=Symbol.iterator]:($R[3]=s=>(i,c,d,t)=>(i=0,t={[$R[2]]:()=>t,next:()=>{if(i>s.d)return{done:!0,value:void 0};c=i++,d=s.v[c];if(c===s.t)throw d;return{done:c===s.d,value:d}}}))($R[4]={v:$R[5]=[1,2,3,void 0],t:-1,d:3})}),Object.seal($R[1]),$R[0])"`; exports[`sealed object > crossSerializeAsync > supports self-recursion 1`] = `"($R[0]={a:$R[1]=Promise.resolve().then(()=>$R[0]),b:$R[2]=Promise.resolve().then(()=>$R[0])},Object.seal($R[0]),$R[0])"`; @@ -32,21 +32,21 @@ exports[`sealed object > crossSerializeStream > scoped > supports Objects 1`] = exports[`sealed object > crossSerializeStream > scoped > supports Objects 2`] = `"($R=>_$.Ps($R[0],$R[1]={hello:\\"world\\"}),Object.seal($R[1]),$R[0])($R[\\"example\\"])"`; -exports[`sealed object > crossSerializeStream > scoped > supports Symbol.asyncIterator 1`] = `"($R=>$R[0]={[$R[2]=Symbol.asyncIterator]:($R[3]=s=>b=>(b=s.tee(),s=b[0],b=b[1].getReader(),{[$R[2]]:()=>this,next:()=>b.read().then(d=>{if(d.done)return{done:!0,value:void 0};d=d.value;if(d[0]===1)throw d[1];return{done:d[0]===2,value:d[1]}})}))($R[1]=_$.S())},Object.seal($R[0]),$R[0])($R[\\"example\\"])"`; +exports[`sealed object > crossSerializeStream > scoped > supports Symbol.asyncIterator 1`] = `"($R=>$R[0]={[$R[1]=Symbol.asyncIterator]:($R[2]=s=>b=>(b=s.tee(),s=b[0],b=b[1].getReader(),{[$R[1]]:()=>this,next:()=>b.read().then(d=>{if(d.done)return{done:!0,value:void 0};d=d.value;if(d[0]===1)throw d[1];return{done:d[0]===2,value:d[1]}})}))($R[3]=_$.S())},Object.seal($R[0]),$R[0])($R[\\"example\\"])"`; -exports[`sealed object > crossSerializeStream > scoped > supports Symbol.asyncIterator 2`] = `"($R=>_$.Se($R[1],$R[4]=[0,1]))($R[\\"example\\"])"`; +exports[`sealed object > crossSerializeStream > scoped > supports Symbol.asyncIterator 2`] = `"($R=>_$.Se($R[3],$R[4]=[0,1]))($R[\\"example\\"])"`; -exports[`sealed object > crossSerializeStream > scoped > supports Symbol.asyncIterator 3`] = `"($R=>_$.Se($R[1],$R[5]=[0,2]))($R[\\"example\\"])"`; +exports[`sealed object > crossSerializeStream > scoped > supports Symbol.asyncIterator 3`] = `"($R=>_$.Se($R[3],$R[5]=[0,2]))($R[\\"example\\"])"`; -exports[`sealed object > crossSerializeStream > scoped > supports Symbol.asyncIterator 4`] = `"($R=>_$.Se($R[1],$R[6]=[0,3]))($R[\\"example\\"])"`; +exports[`sealed object > crossSerializeStream > scoped > supports Symbol.asyncIterator 4`] = `"($R=>_$.Se($R[3],$R[6]=[0,3]))($R[\\"example\\"])"`; -exports[`sealed object > crossSerializeStream > scoped > supports Symbol.asyncIterator 5`] = `"($R=>_$.Se($R[1],$R[7]=[2,void 0]))($R[\\"example\\"])"`; +exports[`sealed object > crossSerializeStream > scoped > supports Symbol.asyncIterator 5`] = `"($R=>_$.Se($R[3],$R[7]=[2,void 0]))($R[\\"example\\"])"`; -exports[`sealed object > crossSerializeStream > scoped > supports Symbol.asyncIterator 6`] = `"($R=>_$.Sc($R[1]))($R[\\"example\\"])"`; +exports[`sealed object > crossSerializeStream > scoped > supports Symbol.asyncIterator 6`] = `"($R=>_$.Sc($R[3]))($R[\\"example\\"])"`; exports[`sealed object > crossSerializeStream > scoped > supports Symbol.iterator 1`] = `"($R=>$R[0]=_$.P())($R[\\"example\\"])"`; -exports[`sealed object > crossSerializeStream > scoped > supports Symbol.iterator 2`] = `"($R=>_$.Ps($R[0],$R[1]={[$R[4]=Symbol.iterator]:($R[5]=s=>(i,c,d,t)=>(i=0,t={[$R[4]]:()=>t,next:()=>{if(i>s.d)return{done:!0,value:void 0};c=i++,d=s.v[c];if(c===s.t)throw d;return{done:c===s.d,value:d}}}))($R[2]={v:$R[3]=[1,2,3,void 0],t:-1,d:3})}),Object.seal($R[1]),$R[0])($R[\\"example\\"])"`; +exports[`sealed object > crossSerializeStream > scoped > supports Symbol.iterator 2`] = `"($R=>_$.Ps($R[0],$R[1]={[$R[2]=Symbol.iterator]:($R[3]=s=>(i,c,d,t)=>(i=0,t={[$R[2]]:()=>t,next:()=>{if(i>s.d)return{done:!0,value:void 0};c=i++,d=s.v[c];if(c===s.t)throw d;return{done:c===s.d,value:d}}}))($R[4]={v:$R[5]=[1,2,3,void 0],t:-1,d:3})}),Object.seal($R[1]),$R[0])($R[\\"example\\"])"`; exports[`sealed object > crossSerializeStream > scoped > supports self-recursion 1`] = `"($R=>$R[0]={a:$R[1]=_$.P(),b:$R[2]=_$.P()},Object.seal($R[0]),$R[0])($R[\\"example\\"])"`; @@ -58,21 +58,21 @@ exports[`sealed object > crossSerializeStream > supports Objects 1`] = `"$R[0]=_ exports[`sealed object > crossSerializeStream > supports Objects 2`] = `"(_$.Ps($R[0],$R[1]={hello:\\"world\\"}),Object.seal($R[1]),$R[0])"`; -exports[`sealed object > crossSerializeStream > supports Symbol.asyncIterator 1`] = `"($R[0]={[$R[2]=Symbol.asyncIterator]:($R[3]=s=>b=>(b=s.tee(),s=b[0],b=b[1].getReader(),{[$R[2]]:()=>this,next:()=>b.read().then(d=>{if(d.done)return{done:!0,value:void 0};d=d.value;if(d[0]===1)throw d[1];return{done:d[0]===2,value:d[1]}})}))($R[1]=_$.S())},Object.seal($R[0]),$R[0])"`; +exports[`sealed object > crossSerializeStream > supports Symbol.asyncIterator 1`] = `"($R[0]={[$R[1]=Symbol.asyncIterator]:($R[2]=s=>b=>(b=s.tee(),s=b[0],b=b[1].getReader(),{[$R[1]]:()=>this,next:()=>b.read().then(d=>{if(d.done)return{done:!0,value:void 0};d=d.value;if(d[0]===1)throw d[1];return{done:d[0]===2,value:d[1]}})}))($R[3]=_$.S())},Object.seal($R[0]),$R[0])"`; -exports[`sealed object > crossSerializeStream > supports Symbol.asyncIterator 2`] = `"_$.Se($R[1],$R[4]=[0,1])"`; +exports[`sealed object > crossSerializeStream > supports Symbol.asyncIterator 2`] = `"_$.Se($R[3],$R[4]=[0,1])"`; -exports[`sealed object > crossSerializeStream > supports Symbol.asyncIterator 3`] = `"_$.Se($R[1],$R[5]=[0,2])"`; +exports[`sealed object > crossSerializeStream > supports Symbol.asyncIterator 3`] = `"_$.Se($R[3],$R[5]=[0,2])"`; -exports[`sealed object > crossSerializeStream > supports Symbol.asyncIterator 4`] = `"_$.Se($R[1],$R[6]=[0,3])"`; +exports[`sealed object > crossSerializeStream > supports Symbol.asyncIterator 4`] = `"_$.Se($R[3],$R[6]=[0,3])"`; -exports[`sealed object > crossSerializeStream > supports Symbol.asyncIterator 5`] = `"_$.Se($R[1],$R[7]=[2,void 0])"`; +exports[`sealed object > crossSerializeStream > supports Symbol.asyncIterator 5`] = `"_$.Se($R[3],$R[7]=[2,void 0])"`; -exports[`sealed object > crossSerializeStream > supports Symbol.asyncIterator 6`] = `"_$.Sc($R[1])"`; +exports[`sealed object > crossSerializeStream > supports Symbol.asyncIterator 6`] = `"_$.Sc($R[3])"`; exports[`sealed object > crossSerializeStream > supports Symbol.iterator 1`] = `"$R[0]=_$.P()"`; -exports[`sealed object > crossSerializeStream > supports Symbol.iterator 2`] = `"(_$.Ps($R[0],$R[1]={[$R[4]=Symbol.iterator]:($R[5]=s=>(i,c,d,t)=>(i=0,t={[$R[4]]:()=>t,next:()=>{if(i>s.d)return{done:!0,value:void 0};c=i++,d=s.v[c];if(c===s.t)throw d;return{done:c===s.d,value:d}}}))($R[2]={v:$R[3]=[1,2,3,void 0],t:-1,d:3})}),Object.seal($R[1]),$R[0])"`; +exports[`sealed object > crossSerializeStream > supports Symbol.iterator 2`] = `"(_$.Ps($R[0],$R[1]={[$R[2]=Symbol.iterator]:($R[3]=s=>(i,c,d,t)=>(i=0,t={[$R[2]]:()=>t,next:()=>{if(i>s.d)return{done:!0,value:void 0};c=i++,d=s.v[c];if(c===s.t)throw d;return{done:c===s.d,value:d}}}))($R[4]={v:$R[5]=[1,2,3,void 0],t:-1,d:3})}),Object.seal($R[1]),$R[0])"`; exports[`sealed object > crossSerializeStream > supports self-recursion 1`] = `"($R[0]={a:$R[1]=_$.P(),b:$R[2]=_$.P()},Object.seal($R[0]),$R[0])"`; @@ -94,56 +94,56 @@ exports[`sealed object > serializeAsync > supports Symbol.iterator 1`] = `"((h,j exports[`sealed object > serializeAsync > supports self-recursion 1`] = `"(h=>(h={a:Promise.resolve().then(()=>h),b:Promise.resolve().then(()=>h)},Object.seal(h),h))()"`; -exports[`sealed object > toCrossJSON > supports Objects 1`] = `"{\\"t\\":10,\\"i\\":0,\\"p\\":{\\"k\\":[\\"hello\\"],\\"v\\":[{\\"t\\":1,\\"s\\":\\"world\\"}],\\"s\\":1},\\"o\\":2,\\"x\\":{}}"`; +exports[`sealed object > toCrossJSON > supports Objects 1`] = `"{\\"t\\":10,\\"i\\":0,\\"p\\":{\\"k\\":[\\"hello\\"],\\"v\\":[{\\"t\\":1,\\"s\\":\\"world\\"}],\\"s\\":1},\\"o\\":2}"`; -exports[`sealed object > toCrossJSON > supports Symbol.iterator 1`] = `"{\\"t\\":10,\\"i\\":0,\\"p\\":{\\"k\\":[0],\\"v\\":[{\\"t\\":10,\\"i\\":1,\\"p\\":{\\"k\\":[\\"v\\",\\"t\\",\\"d\\"],\\"v\\":[{\\"t\\":9,\\"i\\":2,\\"l\\":4,\\"a\\":[{\\"t\\":0,\\"s\\":1},{\\"t\\":0,\\"s\\":2},{\\"t\\":0,\\"s\\":3},{\\"t\\":2,\\"s\\":1}],\\"o\\":0},{\\"t\\":0,\\"s\\":-1},{\\"t\\":0,\\"s\\":3}],\\"s\\":3},\\"o\\":0,\\"x\\":{}}],\\"s\\":1},\\"o\\":2,\\"x\\":{\\"1\\":{\\"t\\":17,\\"i\\":3,\\"s\\":3},\\"2\\":{\\"t\\":42,\\"i\\":4,\\"x\\":{\\"1\\":{\\"t\\":4,\\"i\\":3}}}}}"`; +exports[`sealed object > toCrossJSON > supports Symbol.iterator 1`] = `"{\\"t\\":10,\\"i\\":0,\\"p\\":{\\"k\\":[{\\"t\\":17,\\"i\\":1,\\"s\\":3}],\\"v\\":[{\\"t\\":43,\\"a\\":[{\\"t\\":42,\\"i\\":2,\\"f\\":{\\"t\\":4,\\"i\\":1}},{\\"t\\":10,\\"i\\":3,\\"p\\":{\\"k\\":[\\"v\\",\\"t\\",\\"d\\"],\\"v\\":[{\\"t\\":9,\\"i\\":4,\\"l\\":4,\\"a\\":[{\\"t\\":0,\\"s\\":1},{\\"t\\":0,\\"s\\":2},{\\"t\\":0,\\"s\\":3},{\\"t\\":2,\\"s\\":1}],\\"o\\":0},{\\"t\\":0,\\"s\\":-1},{\\"t\\":0,\\"s\\":3}],\\"s\\":3},\\"o\\":0}]}],\\"s\\":1},\\"o\\":2}"`; -exports[`sealed object > toCrossJSON > supports self-recursion 1`] = `"{\\"t\\":10,\\"i\\":0,\\"p\\":{\\"k\\":[\\"a\\",\\"b\\"],\\"v\\":[{\\"t\\":4,\\"i\\":0},{\\"t\\":4,\\"i\\":0}],\\"s\\":2},\\"o\\":2,\\"x\\":{}}"`; +exports[`sealed object > toCrossJSON > supports self-recursion 1`] = `"{\\"t\\":10,\\"i\\":0,\\"p\\":{\\"k\\":[\\"a\\",\\"b\\"],\\"v\\":[{\\"t\\":4,\\"i\\":0},{\\"t\\":4,\\"i\\":0}],\\"s\\":2},\\"o\\":2}"`; -exports[`sealed object > toCrossJSONAsync > supports Objects 1`] = `"{\\"t\\":12,\\"i\\":0,\\"s\\":1,\\"f\\":{\\"t\\":10,\\"i\\":1,\\"p\\":{\\"k\\":[\\"hello\\"],\\"v\\":[{\\"t\\":1,\\"s\\":\\"world\\"}],\\"s\\":1},\\"o\\":2,\\"x\\":{}}}"`; +exports[`sealed object > toCrossJSONAsync > supports Objects 1`] = `"{\\"t\\":12,\\"i\\":0,\\"s\\":1,\\"f\\":{\\"t\\":10,\\"i\\":1,\\"p\\":{\\"k\\":[\\"hello\\"],\\"v\\":[{\\"t\\":1,\\"s\\":\\"world\\"}],\\"s\\":1},\\"o\\":2}}"`; -exports[`sealed object > toCrossJSONAsync > supports Symbol.asyncIterator 1`] = `"{\\"t\\":10,\\"i\\":0,\\"p\\":{\\"k\\":[1],\\"v\\":[{\\"t\\":10,\\"i\\":1,\\"p\\":{\\"k\\":[\\"v\\",\\"t\\",\\"d\\"],\\"v\\":[{\\"t\\":9,\\"i\\":2,\\"l\\":4,\\"a\\":[{\\"t\\":0,\\"s\\":1},{\\"t\\":0,\\"s\\":2},{\\"t\\":0,\\"s\\":3},{\\"t\\":2,\\"s\\":1}],\\"o\\":0},{\\"t\\":0,\\"s\\":-1},{\\"t\\":0,\\"s\\":3}],\\"s\\":3},\\"o\\":0,\\"x\\":{}}],\\"s\\":1},\\"o\\":2,\\"x\\":{\\"3\\":{\\"t\\":17,\\"i\\":3,\\"s\\":0},\\"4\\":{\\"t\\":43,\\"i\\":4,\\"x\\":{\\"3\\":{\\"t\\":4,\\"i\\":3}}}}}"`; +exports[`sealed object > toCrossJSONAsync > supports Symbol.asyncIterator 1`] = `"{\\"t\\":10,\\"i\\":0,\\"p\\":{\\"k\\":[{\\"t\\":17,\\"i\\":1,\\"s\\":0}],\\"v\\":[{\\"t\\":45,\\"a\\":[{\\"t\\":44,\\"i\\":2,\\"f\\":{\\"t\\":4,\\"i\\":1}},{\\"t\\":10,\\"i\\":3,\\"p\\":{\\"k\\":[\\"v\\",\\"t\\",\\"d\\"],\\"v\\":[{\\"t\\":9,\\"i\\":4,\\"l\\":4,\\"a\\":[{\\"t\\":0,\\"s\\":1},{\\"t\\":0,\\"s\\":2},{\\"t\\":0,\\"s\\":3},{\\"t\\":2,\\"s\\":1}],\\"o\\":0},{\\"t\\":0,\\"s\\":-1},{\\"t\\":0,\\"s\\":3}],\\"s\\":3},\\"o\\":0}]}],\\"s\\":1},\\"o\\":2}"`; -exports[`sealed object > toCrossJSONAsync > supports Symbol.iterator 1`] = `"{\\"t\\":12,\\"i\\":0,\\"s\\":1,\\"f\\":{\\"t\\":10,\\"i\\":1,\\"p\\":{\\"k\\":[0],\\"v\\":[{\\"t\\":10,\\"i\\":2,\\"p\\":{\\"k\\":[\\"v\\",\\"t\\",\\"d\\"],\\"v\\":[{\\"t\\":9,\\"i\\":3,\\"l\\":4,\\"a\\":[{\\"t\\":0,\\"s\\":1},{\\"t\\":0,\\"s\\":2},{\\"t\\":0,\\"s\\":3},{\\"t\\":2,\\"s\\":1}],\\"o\\":0},{\\"t\\":0,\\"s\\":-1},{\\"t\\":0,\\"s\\":3}],\\"s\\":3},\\"o\\":0,\\"x\\":{}}],\\"s\\":1},\\"o\\":2,\\"x\\":{\\"1\\":{\\"t\\":17,\\"i\\":4,\\"s\\":3},\\"2\\":{\\"t\\":42,\\"i\\":5,\\"x\\":{\\"1\\":{\\"t\\":4,\\"i\\":4}}}}}}"`; +exports[`sealed object > toCrossJSONAsync > supports Symbol.iterator 1`] = `"{\\"t\\":12,\\"i\\":0,\\"s\\":1,\\"f\\":{\\"t\\":10,\\"i\\":1,\\"p\\":{\\"k\\":[{\\"t\\":17,\\"i\\":2,\\"s\\":3}],\\"v\\":[{\\"t\\":43,\\"a\\":[{\\"t\\":42,\\"i\\":3,\\"f\\":{\\"t\\":4,\\"i\\":2}},{\\"t\\":10,\\"i\\":4,\\"p\\":{\\"k\\":[\\"v\\",\\"t\\",\\"d\\"],\\"v\\":[{\\"t\\":9,\\"i\\":5,\\"l\\":4,\\"a\\":[{\\"t\\":0,\\"s\\":1},{\\"t\\":0,\\"s\\":2},{\\"t\\":0,\\"s\\":3},{\\"t\\":2,\\"s\\":1}],\\"o\\":0},{\\"t\\":0,\\"s\\":-1},{\\"t\\":0,\\"s\\":3}],\\"s\\":3},\\"o\\":0}]}],\\"s\\":1},\\"o\\":2}}"`; -exports[`sealed object > toCrossJSONAsync > supports self-recursion 1`] = `"{\\"t\\":10,\\"i\\":0,\\"p\\":{\\"k\\":[\\"a\\",\\"b\\"],\\"v\\":[{\\"t\\":12,\\"i\\":1,\\"s\\":1,\\"f\\":{\\"t\\":4,\\"i\\":0}},{\\"t\\":12,\\"i\\":2,\\"s\\":1,\\"f\\":{\\"t\\":4,\\"i\\":0}}],\\"s\\":2},\\"o\\":2,\\"x\\":{}}"`; +exports[`sealed object > toCrossJSONAsync > supports self-recursion 1`] = `"{\\"t\\":10,\\"i\\":0,\\"p\\":{\\"k\\":[\\"a\\",\\"b\\"],\\"v\\":[{\\"t\\":12,\\"i\\":1,\\"s\\":1,\\"f\\":{\\"t\\":4,\\"i\\":0}},{\\"t\\":12,\\"i\\":2,\\"s\\":1,\\"f\\":{\\"t\\":4,\\"i\\":0}}],\\"s\\":2},\\"o\\":2}"`; exports[`sealed object > toCrossJSONStream > supports Objects 1`] = `"{\\"t\\":28,\\"i\\":0}"`; -exports[`sealed object > toCrossJSONStream > supports Objects 2`] = `"{\\"t\\":29,\\"i\\":0,\\"f\\":{\\"t\\":10,\\"i\\":1,\\"p\\":{\\"k\\":[\\"hello\\"],\\"v\\":[{\\"t\\":1,\\"s\\":\\"world\\"}],\\"s\\":1},\\"o\\":2,\\"x\\":{}}}"`; +exports[`sealed object > toCrossJSONStream > supports Objects 2`] = `"{\\"t\\":29,\\"i\\":0,\\"f\\":{\\"t\\":10,\\"i\\":1,\\"p\\":{\\"k\\":[\\"hello\\"],\\"v\\":[{\\"t\\":1,\\"s\\":\\"world\\"}],\\"s\\":1},\\"o\\":2}}"`; -exports[`sealed object > toCrossJSONStream > supports Symbol.asyncIterator 1`] = `"{\\"t\\":10,\\"i\\":0,\\"p\\":{\\"k\\":[1],\\"v\\":[{\\"t\\":31,\\"i\\":1}],\\"s\\":1},\\"o\\":2,\\"x\\":{\\"3\\":{\\"t\\":17,\\"i\\":2,\\"s\\":0},\\"4\\":{\\"t\\":43,\\"i\\":3,\\"x\\":{\\"3\\":{\\"t\\":4,\\"i\\":2}}}}}"`; +exports[`sealed object > toCrossJSONStream > supports Symbol.asyncIterator 1`] = `"{\\"t\\":10,\\"i\\":0,\\"p\\":{\\"k\\":[{\\"t\\":17,\\"i\\":1,\\"s\\":0}],\\"v\\":[{\\"t\\":45,\\"a\\":[{\\"t\\":44,\\"i\\":2,\\"f\\":{\\"t\\":4,\\"i\\":1}},{\\"t\\":31,\\"i\\":3}]}],\\"s\\":1},\\"o\\":2}"`; -exports[`sealed object > toCrossJSONStream > supports Symbol.asyncIterator 2`] = `"{\\"t\\":32,\\"i\\":1,\\"f\\":{\\"t\\":9,\\"i\\":4,\\"l\\":2,\\"a\\":[{\\"t\\":0,\\"s\\":0},{\\"t\\":0,\\"s\\":1}],\\"o\\":0}}"`; +exports[`sealed object > toCrossJSONStream > supports Symbol.asyncIterator 2`] = `"{\\"t\\":32,\\"i\\":3,\\"f\\":{\\"t\\":9,\\"i\\":4,\\"l\\":2,\\"a\\":[{\\"t\\":0,\\"s\\":0},{\\"t\\":0,\\"s\\":1}],\\"o\\":0}}"`; -exports[`sealed object > toCrossJSONStream > supports Symbol.asyncIterator 3`] = `"{\\"t\\":32,\\"i\\":1,\\"f\\":{\\"t\\":9,\\"i\\":5,\\"l\\":2,\\"a\\":[{\\"t\\":0,\\"s\\":0},{\\"t\\":0,\\"s\\":2}],\\"o\\":0}}"`; +exports[`sealed object > toCrossJSONStream > supports Symbol.asyncIterator 3`] = `"{\\"t\\":32,\\"i\\":3,\\"f\\":{\\"t\\":9,\\"i\\":5,\\"l\\":2,\\"a\\":[{\\"t\\":0,\\"s\\":0},{\\"t\\":0,\\"s\\":2}],\\"o\\":0}}"`; -exports[`sealed object > toCrossJSONStream > supports Symbol.asyncIterator 4`] = `"{\\"t\\":32,\\"i\\":1,\\"f\\":{\\"t\\":9,\\"i\\":6,\\"l\\":2,\\"a\\":[{\\"t\\":0,\\"s\\":0},{\\"t\\":0,\\"s\\":3}],\\"o\\":0}}"`; +exports[`sealed object > toCrossJSONStream > supports Symbol.asyncIterator 4`] = `"{\\"t\\":32,\\"i\\":3,\\"f\\":{\\"t\\":9,\\"i\\":6,\\"l\\":2,\\"a\\":[{\\"t\\":0,\\"s\\":0},{\\"t\\":0,\\"s\\":3}],\\"o\\":0}}"`; -exports[`sealed object > toCrossJSONStream > supports Symbol.asyncIterator 5`] = `"{\\"t\\":32,\\"i\\":1,\\"f\\":{\\"t\\":9,\\"i\\":7,\\"l\\":2,\\"a\\":[{\\"t\\":0,\\"s\\":2},{\\"t\\":2,\\"s\\":1}],\\"o\\":0}}"`; +exports[`sealed object > toCrossJSONStream > supports Symbol.asyncIterator 5`] = `"{\\"t\\":32,\\"i\\":3,\\"f\\":{\\"t\\":9,\\"i\\":7,\\"l\\":2,\\"a\\":[{\\"t\\":0,\\"s\\":2},{\\"t\\":2,\\"s\\":1}],\\"o\\":0}}"`; -exports[`sealed object > toCrossJSONStream > supports Symbol.asyncIterator 6`] = `"{\\"t\\":33,\\"i\\":1}"`; +exports[`sealed object > toCrossJSONStream > supports Symbol.asyncIterator 6`] = `"{\\"t\\":33,\\"i\\":3}"`; exports[`sealed object > toCrossJSONStream > supports Symbol.iterator 1`] = `"{\\"t\\":28,\\"i\\":0}"`; -exports[`sealed object > toCrossJSONStream > supports Symbol.iterator 2`] = `"{\\"t\\":29,\\"i\\":0,\\"f\\":{\\"t\\":10,\\"i\\":1,\\"p\\":{\\"k\\":[0],\\"v\\":[{\\"t\\":10,\\"i\\":2,\\"p\\":{\\"k\\":[\\"v\\",\\"t\\",\\"d\\"],\\"v\\":[{\\"t\\":9,\\"i\\":3,\\"l\\":4,\\"a\\":[{\\"t\\":0,\\"s\\":1},{\\"t\\":0,\\"s\\":2},{\\"t\\":0,\\"s\\":3},{\\"t\\":2,\\"s\\":1}],\\"o\\":0},{\\"t\\":0,\\"s\\":-1},{\\"t\\":0,\\"s\\":3}],\\"s\\":3},\\"o\\":0,\\"x\\":{}}],\\"s\\":1},\\"o\\":2,\\"x\\":{\\"1\\":{\\"t\\":17,\\"i\\":4,\\"s\\":3},\\"2\\":{\\"t\\":42,\\"i\\":5,\\"x\\":{\\"1\\":{\\"t\\":4,\\"i\\":4}}}}}}"`; +exports[`sealed object > toCrossJSONStream > supports Symbol.iterator 2`] = `"{\\"t\\":29,\\"i\\":0,\\"f\\":{\\"t\\":10,\\"i\\":1,\\"p\\":{\\"k\\":[{\\"t\\":17,\\"i\\":2,\\"s\\":3}],\\"v\\":[{\\"t\\":43,\\"a\\":[{\\"t\\":42,\\"i\\":3,\\"f\\":{\\"t\\":4,\\"i\\":2}},{\\"t\\":10,\\"i\\":4,\\"p\\":{\\"k\\":[\\"v\\",\\"t\\",\\"d\\"],\\"v\\":[{\\"t\\":9,\\"i\\":5,\\"l\\":4,\\"a\\":[{\\"t\\":0,\\"s\\":1},{\\"t\\":0,\\"s\\":2},{\\"t\\":0,\\"s\\":3},{\\"t\\":2,\\"s\\":1}],\\"o\\":0},{\\"t\\":0,\\"s\\":-1},{\\"t\\":0,\\"s\\":3}],\\"s\\":3},\\"o\\":0}]}],\\"s\\":1},\\"o\\":2}}"`; -exports[`sealed object > toCrossJSONStream > supports self-recursion 1`] = `"{\\"t\\":10,\\"i\\":0,\\"p\\":{\\"k\\":[\\"a\\",\\"b\\"],\\"v\\":[{\\"t\\":28,\\"i\\":1},{\\"t\\":28,\\"i\\":2}],\\"s\\":2},\\"o\\":2,\\"x\\":{}}"`; +exports[`sealed object > toCrossJSONStream > supports self-recursion 1`] = `"{\\"t\\":10,\\"i\\":0,\\"p\\":{\\"k\\":[\\"a\\",\\"b\\"],\\"v\\":[{\\"t\\":28,\\"i\\":1},{\\"t\\":28,\\"i\\":2}],\\"s\\":2},\\"o\\":2}"`; exports[`sealed object > toCrossJSONStream > supports self-recursion 2`] = `"{\\"t\\":29,\\"i\\":1,\\"f\\":{\\"t\\":4,\\"i\\":0}}"`; exports[`sealed object > toCrossJSONStream > supports self-recursion 3`] = `"{\\"t\\":29,\\"i\\":2,\\"f\\":{\\"t\\":4,\\"i\\":0}}"`; -exports[`sealed object > toJSON > supports Objects 1`] = `"{\\"t\\":{\\"t\\":10,\\"i\\":0,\\"p\\":{\\"k\\":[\\"hello\\"],\\"v\\":[{\\"t\\":1,\\"s\\":\\"world\\"}],\\"s\\":1},\\"o\\":2,\\"x\\":{}},\\"f\\":16383,\\"m\\":[]}"`; +exports[`sealed object > toJSON > supports Objects 1`] = `"{\\"t\\":{\\"t\\":10,\\"i\\":0,\\"p\\":{\\"k\\":[\\"hello\\"],\\"v\\":[{\\"t\\":1,\\"s\\":\\"world\\"}],\\"s\\":1},\\"o\\":2},\\"f\\":16383,\\"m\\":[]}"`; -exports[`sealed object > toJSON > supports Symbol.iterator 1`] = `"{\\"t\\":{\\"t\\":10,\\"i\\":0,\\"p\\":{\\"k\\":[0],\\"v\\":[{\\"t\\":10,\\"i\\":1,\\"p\\":{\\"k\\":[\\"v\\",\\"t\\",\\"d\\"],\\"v\\":[{\\"t\\":9,\\"i\\":2,\\"l\\":4,\\"a\\":[{\\"t\\":0,\\"s\\":1},{\\"t\\":0,\\"s\\":2},{\\"t\\":0,\\"s\\":3},{\\"t\\":2,\\"s\\":1}],\\"o\\":0},{\\"t\\":0,\\"s\\":-1},{\\"t\\":0,\\"s\\":3}],\\"s\\":3},\\"o\\":0,\\"x\\":{}}],\\"s\\":1},\\"o\\":2,\\"x\\":{\\"1\\":{\\"t\\":17,\\"i\\":3,\\"s\\":3},\\"2\\":{\\"t\\":42,\\"i\\":4,\\"x\\":{\\"1\\":{\\"t\\":4,\\"i\\":3}}}}},\\"f\\":16383,\\"m\\":[3]}"`; +exports[`sealed object > toJSON > supports Symbol.iterator 1`] = `"{\\"t\\":{\\"t\\":10,\\"i\\":0,\\"p\\":{\\"k\\":[{\\"t\\":17,\\"i\\":1,\\"s\\":3}],\\"v\\":[{\\"t\\":43,\\"a\\":[{\\"t\\":42,\\"i\\":2,\\"f\\":{\\"t\\":4,\\"i\\":1}},{\\"t\\":10,\\"i\\":3,\\"p\\":{\\"k\\":[\\"v\\",\\"t\\",\\"d\\"],\\"v\\":[{\\"t\\":9,\\"i\\":4,\\"l\\":4,\\"a\\":[{\\"t\\":0,\\"s\\":1},{\\"t\\":0,\\"s\\":2},{\\"t\\":0,\\"s\\":3},{\\"t\\":2,\\"s\\":1}],\\"o\\":0},{\\"t\\":0,\\"s\\":-1},{\\"t\\":0,\\"s\\":3}],\\"s\\":3},\\"o\\":0}]}],\\"s\\":1},\\"o\\":2},\\"f\\":16383,\\"m\\":[1]}"`; -exports[`sealed object > toJSON > supports self-recursion 1`] = `"{\\"t\\":{\\"t\\":10,\\"i\\":0,\\"p\\":{\\"k\\":[\\"a\\",\\"b\\"],\\"v\\":[{\\"t\\":4,\\"i\\":0},{\\"t\\":4,\\"i\\":0}],\\"s\\":2},\\"o\\":2,\\"x\\":{}},\\"f\\":16383,\\"m\\":[0]}"`; +exports[`sealed object > toJSON > supports self-recursion 1`] = `"{\\"t\\":{\\"t\\":10,\\"i\\":0,\\"p\\":{\\"k\\":[\\"a\\",\\"b\\"],\\"v\\":[{\\"t\\":4,\\"i\\":0},{\\"t\\":4,\\"i\\":0}],\\"s\\":2},\\"o\\":2},\\"f\\":16383,\\"m\\":[0]}"`; -exports[`sealed object > toJSONAsync > supports Objects 1`] = `"{\\"t\\":{\\"t\\":12,\\"i\\":0,\\"s\\":1,\\"f\\":{\\"t\\":10,\\"i\\":1,\\"p\\":{\\"k\\":[\\"hello\\"],\\"v\\":[{\\"t\\":1,\\"s\\":\\"world\\"}],\\"s\\":1},\\"o\\":2,\\"x\\":{}}},\\"f\\":16383,\\"m\\":[]}"`; +exports[`sealed object > toJSONAsync > supports Objects 1`] = `"{\\"t\\":{\\"t\\":12,\\"i\\":0,\\"s\\":1,\\"f\\":{\\"t\\":10,\\"i\\":1,\\"p\\":{\\"k\\":[\\"hello\\"],\\"v\\":[{\\"t\\":1,\\"s\\":\\"world\\"}],\\"s\\":1},\\"o\\":2}},\\"f\\":16383,\\"m\\":[]}"`; -exports[`sealed object > toJSONAsync > supports Symbol.asyncIterator 1`] = `"{\\"t\\":{\\"t\\":10,\\"i\\":0,\\"p\\":{\\"k\\":[1],\\"v\\":[{\\"t\\":10,\\"i\\":1,\\"p\\":{\\"k\\":[\\"v\\",\\"t\\",\\"d\\"],\\"v\\":[{\\"t\\":9,\\"i\\":2,\\"l\\":4,\\"a\\":[{\\"t\\":0,\\"s\\":1},{\\"t\\":0,\\"s\\":2},{\\"t\\":0,\\"s\\":3},{\\"t\\":2,\\"s\\":1}],\\"o\\":0},{\\"t\\":0,\\"s\\":-1},{\\"t\\":0,\\"s\\":3}],\\"s\\":3},\\"o\\":0,\\"x\\":{}}],\\"s\\":1},\\"o\\":2,\\"x\\":{\\"3\\":{\\"t\\":17,\\"i\\":3,\\"s\\":0},\\"4\\":{\\"t\\":43,\\"i\\":4,\\"x\\":{\\"3\\":{\\"t\\":4,\\"i\\":3}}}}},\\"f\\":16383,\\"m\\":[3]}"`; +exports[`sealed object > toJSONAsync > supports Symbol.asyncIterator 1`] = `"{\\"t\\":{\\"t\\":10,\\"i\\":0,\\"p\\":{\\"k\\":[{\\"t\\":17,\\"i\\":1,\\"s\\":0}],\\"v\\":[{\\"t\\":45,\\"a\\":[{\\"t\\":44,\\"i\\":2,\\"f\\":{\\"t\\":4,\\"i\\":1}},{\\"t\\":10,\\"i\\":3,\\"p\\":{\\"k\\":[\\"v\\",\\"t\\",\\"d\\"],\\"v\\":[{\\"t\\":9,\\"i\\":4,\\"l\\":4,\\"a\\":[{\\"t\\":0,\\"s\\":1},{\\"t\\":0,\\"s\\":2},{\\"t\\":0,\\"s\\":3},{\\"t\\":2,\\"s\\":1}],\\"o\\":0},{\\"t\\":0,\\"s\\":-1},{\\"t\\":0,\\"s\\":3}],\\"s\\":3},\\"o\\":0}]}],\\"s\\":1},\\"o\\":2},\\"f\\":16383,\\"m\\":[1]}"`; -exports[`sealed object > toJSONAsync > supports Symbol.iterator 1`] = `"{\\"t\\":{\\"t\\":12,\\"i\\":0,\\"s\\":1,\\"f\\":{\\"t\\":10,\\"i\\":1,\\"p\\":{\\"k\\":[0],\\"v\\":[{\\"t\\":10,\\"i\\":2,\\"p\\":{\\"k\\":[\\"v\\",\\"t\\",\\"d\\"],\\"v\\":[{\\"t\\":9,\\"i\\":3,\\"l\\":4,\\"a\\":[{\\"t\\":0,\\"s\\":1},{\\"t\\":0,\\"s\\":2},{\\"t\\":0,\\"s\\":3},{\\"t\\":2,\\"s\\":1}],\\"o\\":0},{\\"t\\":0,\\"s\\":-1},{\\"t\\":0,\\"s\\":3}],\\"s\\":3},\\"o\\":0,\\"x\\":{}}],\\"s\\":1},\\"o\\":2,\\"x\\":{\\"1\\":{\\"t\\":17,\\"i\\":4,\\"s\\":3},\\"2\\":{\\"t\\":42,\\"i\\":5,\\"x\\":{\\"1\\":{\\"t\\":4,\\"i\\":4}}}}}},\\"f\\":16383,\\"m\\":[4]}"`; +exports[`sealed object > toJSONAsync > supports Symbol.iterator 1`] = `"{\\"t\\":{\\"t\\":12,\\"i\\":0,\\"s\\":1,\\"f\\":{\\"t\\":10,\\"i\\":1,\\"p\\":{\\"k\\":[{\\"t\\":17,\\"i\\":2,\\"s\\":3}],\\"v\\":[{\\"t\\":43,\\"a\\":[{\\"t\\":42,\\"i\\":3,\\"f\\":{\\"t\\":4,\\"i\\":2}},{\\"t\\":10,\\"i\\":4,\\"p\\":{\\"k\\":[\\"v\\",\\"t\\",\\"d\\"],\\"v\\":[{\\"t\\":9,\\"i\\":5,\\"l\\":4,\\"a\\":[{\\"t\\":0,\\"s\\":1},{\\"t\\":0,\\"s\\":2},{\\"t\\":0,\\"s\\":3},{\\"t\\":2,\\"s\\":1}],\\"o\\":0},{\\"t\\":0,\\"s\\":-1},{\\"t\\":0,\\"s\\":3}],\\"s\\":3},\\"o\\":0}]}],\\"s\\":1},\\"o\\":2}},\\"f\\":16383,\\"m\\":[2]}"`; -exports[`sealed object > toJSONAsync > supports self-recursion 1`] = `"{\\"t\\":{\\"t\\":10,\\"i\\":0,\\"p\\":{\\"k\\":[\\"a\\",\\"b\\"],\\"v\\":[{\\"t\\":12,\\"i\\":1,\\"s\\":1,\\"f\\":{\\"t\\":4,\\"i\\":0}},{\\"t\\":12,\\"i\\":2,\\"s\\":1,\\"f\\":{\\"t\\":4,\\"i\\":0}}],\\"s\\":2},\\"o\\":2,\\"x\\":{}},\\"f\\":16383,\\"m\\":[0]}"`; +exports[`sealed object > toJSONAsync > supports self-recursion 1`] = `"{\\"t\\":{\\"t\\":10,\\"i\\":0,\\"p\\":{\\"k\\":[\\"a\\",\\"b\\"],\\"v\\":[{\\"t\\":12,\\"i\\":1,\\"s\\":1,\\"f\\":{\\"t\\":4,\\"i\\":0}},{\\"t\\":12,\\"i\\":2,\\"s\\":1,\\"f\\":{\\"t\\":4,\\"i\\":0}}],\\"s\\":2},\\"o\\":2},\\"f\\":16383,\\"m\\":[0]}"`; diff --git a/packages/seroval/test/__snapshots__/set.test.ts.snap b/packages/seroval/test/__snapshots__/set.test.ts.snap index 2294ffa6..3332979a 100644 --- a/packages/seroval/test/__snapshots__/set.test.ts.snap +++ b/packages/seroval/test/__snapshots__/set.test.ts.snap @@ -4,7 +4,7 @@ exports[`Set > compat > should fallback to Symbol.iterator 1`] = `"(h=>(Object.a exports[`Set > compat > should throw an error for unsupported target 1`] = `"Unsupported type \\"[object Set]\\""`; -exports[`Set > compat#toJSON > should fallback to Symbol.iterator 1`] = `"{\\"t\\":{\\"t\\":11,\\"i\\":0,\\"p\\":{\\"k\\":[0],\\"v\\":[{\\"t\\":10,\\"i\\":1,\\"p\\":{\\"k\\":[\\"v\\",\\"t\\",\\"d\\"],\\"v\\":[{\\"t\\":9,\\"i\\":2,\\"l\\":4,\\"a\\":[{\\"t\\":0,\\"s\\":1},{\\"t\\":0,\\"s\\":2},{\\"t\\":0,\\"s\\":3},{\\"t\\":2,\\"s\\":1}],\\"o\\":0},{\\"t\\":0,\\"s\\":-1},{\\"t\\":0,\\"s\\":3}],\\"s\\":3},\\"o\\":0,\\"x\\":{}}],\\"s\\":1},\\"o\\":0,\\"x\\":{\\"1\\":{\\"t\\":17,\\"i\\":3,\\"s\\":3},\\"2\\":{\\"t\\":42,\\"i\\":4,\\"x\\":{\\"1\\":{\\"t\\":4,\\"i\\":3}}}}},\\"f\\":15871,\\"m\\":[3]}"`; +exports[`Set > compat#toJSON > should fallback to Symbol.iterator 1`] = `"{\\"t\\":{\\"t\\":11,\\"i\\":0,\\"p\\":{\\"k\\":[{\\"t\\":17,\\"i\\":1,\\"s\\":3}],\\"v\\":[{\\"t\\":43,\\"a\\":[{\\"t\\":42,\\"i\\":2,\\"f\\":{\\"t\\":4,\\"i\\":1}},{\\"t\\":10,\\"i\\":3,\\"p\\":{\\"k\\":[\\"v\\",\\"t\\",\\"d\\"],\\"v\\":[{\\"t\\":9,\\"i\\":4,\\"l\\":4,\\"a\\":[{\\"t\\":0,\\"s\\":1},{\\"t\\":0,\\"s\\":2},{\\"t\\":0,\\"s\\":3},{\\"t\\":2,\\"s\\":1}],\\"o\\":0},{\\"t\\":0,\\"s\\":-1},{\\"t\\":0,\\"s\\":3}],\\"s\\":3},\\"o\\":0}]}],\\"s\\":1},\\"o\\":0},\\"f\\":15871,\\"m\\":[1]}"`; exports[`Set > compat#toJSON > should throw an error for unsupported target 1`] = `"Unsupported type \\"[object Set]\\""`; diff --git a/packages/seroval/test/web-api/__snapshots__/custom-event.test.ts.snap b/packages/seroval/test/web-api/__snapshots__/custom-event.test.ts.snap index 61ddb7b7..fe6c5447 100644 --- a/packages/seroval/test/web-api/__snapshots__/custom-event.test.ts.snap +++ b/packages/seroval/test/web-api/__snapshots__/custom-event.test.ts.snap @@ -20,14 +20,14 @@ exports[`CustomEvent > serialize > supports CustomEvent 1`] = `"((h,j)=>(j=new C exports[`CustomEvent > serializeAsync > supports CustomEvent 1`] = `"((h,j)=>(j=Promise.resolve(new CustomEvent(\\"example\\",{detail:h={},bubbles:!1,cancelable:!1,composed:!1})),h.self=h,j))()"`; -exports[`CustomEvent > toCrossJSON > supports CustomEvent 1`] = `"{\\"t\\":38,\\"i\\":0,\\"s\\":\\"example\\",\\"f\\":{\\"t\\":10,\\"i\\":1,\\"p\\":{\\"k\\":[\\"detail\\",\\"bubbles\\",\\"cancelable\\",\\"composed\\"],\\"v\\":[{\\"t\\":10,\\"i\\":2,\\"p\\":{\\"k\\":[\\"self\\"],\\"v\\":[{\\"t\\":4,\\"i\\":2}],\\"s\\":1},\\"o\\":0,\\"x\\":{}},{\\"t\\":2,\\"s\\":3},{\\"t\\":2,\\"s\\":3},{\\"t\\":2,\\"s\\":3}],\\"s\\":4},\\"o\\":0,\\"x\\":{}}}"`; +exports[`CustomEvent > toCrossJSON > supports CustomEvent 1`] = `"{\\"t\\":38,\\"i\\":0,\\"s\\":\\"example\\",\\"f\\":{\\"t\\":10,\\"i\\":1,\\"p\\":{\\"k\\":[\\"detail\\",\\"bubbles\\",\\"cancelable\\",\\"composed\\"],\\"v\\":[{\\"t\\":10,\\"i\\":2,\\"p\\":{\\"k\\":[\\"self\\"],\\"v\\":[{\\"t\\":4,\\"i\\":2}],\\"s\\":1},\\"o\\":0},{\\"t\\":2,\\"s\\":3},{\\"t\\":2,\\"s\\":3},{\\"t\\":2,\\"s\\":3}],\\"s\\":4},\\"o\\":0}}"`; -exports[`CustomEvent > toCrossJSONAsync > supports CustomEvent 1`] = `"{\\"t\\":12,\\"i\\":0,\\"s\\":1,\\"f\\":{\\"t\\":38,\\"i\\":1,\\"s\\":\\"example\\",\\"f\\":{\\"t\\":10,\\"i\\":2,\\"p\\":{\\"k\\":[\\"detail\\",\\"bubbles\\",\\"cancelable\\",\\"composed\\"],\\"v\\":[{\\"t\\":10,\\"i\\":3,\\"p\\":{\\"k\\":[\\"self\\"],\\"v\\":[{\\"t\\":4,\\"i\\":3}],\\"s\\":1},\\"o\\":0,\\"x\\":{}},{\\"t\\":2,\\"s\\":3},{\\"t\\":2,\\"s\\":3},{\\"t\\":2,\\"s\\":3}],\\"s\\":4},\\"o\\":0,\\"x\\":{}}}}"`; +exports[`CustomEvent > toCrossJSONAsync > supports CustomEvent 1`] = `"{\\"t\\":12,\\"i\\":0,\\"s\\":1,\\"f\\":{\\"t\\":38,\\"i\\":1,\\"s\\":\\"example\\",\\"f\\":{\\"t\\":10,\\"i\\":2,\\"p\\":{\\"k\\":[\\"detail\\",\\"bubbles\\",\\"cancelable\\",\\"composed\\"],\\"v\\":[{\\"t\\":10,\\"i\\":3,\\"p\\":{\\"k\\":[\\"self\\"],\\"v\\":[{\\"t\\":4,\\"i\\":3}],\\"s\\":1},\\"o\\":0},{\\"t\\":2,\\"s\\":3},{\\"t\\":2,\\"s\\":3},{\\"t\\":2,\\"s\\":3}],\\"s\\":4},\\"o\\":0}}}"`; exports[`CustomEvent > toCrossJSONStream > supports CustomEvent 1`] = `"{\\"t\\":28,\\"i\\":0}"`; -exports[`CustomEvent > toCrossJSONStream > supports CustomEvent 2`] = `"{\\"t\\":29,\\"i\\":0,\\"f\\":{\\"t\\":38,\\"i\\":1,\\"s\\":\\"example\\",\\"f\\":{\\"t\\":10,\\"i\\":2,\\"p\\":{\\"k\\":[\\"detail\\",\\"bubbles\\",\\"cancelable\\",\\"composed\\"],\\"v\\":[{\\"t\\":10,\\"i\\":3,\\"p\\":{\\"k\\":[\\"self\\"],\\"v\\":[{\\"t\\":4,\\"i\\":3}],\\"s\\":1},\\"o\\":0,\\"x\\":{}},{\\"t\\":2,\\"s\\":3},{\\"t\\":2,\\"s\\":3},{\\"t\\":2,\\"s\\":3}],\\"s\\":4},\\"o\\":0,\\"x\\":{}}}}"`; +exports[`CustomEvent > toCrossJSONStream > supports CustomEvent 2`] = `"{\\"t\\":29,\\"i\\":0,\\"f\\":{\\"t\\":38,\\"i\\":1,\\"s\\":\\"example\\",\\"f\\":{\\"t\\":10,\\"i\\":2,\\"p\\":{\\"k\\":[\\"detail\\",\\"bubbles\\",\\"cancelable\\",\\"composed\\"],\\"v\\":[{\\"t\\":10,\\"i\\":3,\\"p\\":{\\"k\\":[\\"self\\"],\\"v\\":[{\\"t\\":4,\\"i\\":3}],\\"s\\":1},\\"o\\":0},{\\"t\\":2,\\"s\\":3},{\\"t\\":2,\\"s\\":3},{\\"t\\":2,\\"s\\":3}],\\"s\\":4},\\"o\\":0}}}"`; -exports[`CustomEvent > toJSON > supports CustomEvent 1`] = `"{\\"t\\":{\\"t\\":38,\\"i\\":0,\\"s\\":\\"example\\",\\"f\\":{\\"t\\":10,\\"i\\":1,\\"p\\":{\\"k\\":[\\"detail\\",\\"bubbles\\",\\"cancelable\\",\\"composed\\"],\\"v\\":[{\\"t\\":10,\\"i\\":2,\\"p\\":{\\"k\\":[\\"self\\"],\\"v\\":[{\\"t\\":4,\\"i\\":2}],\\"s\\":1},\\"o\\":0,\\"x\\":{}},{\\"t\\":2,\\"s\\":3},{\\"t\\":2,\\"s\\":3},{\\"t\\":2,\\"s\\":3}],\\"s\\":4},\\"o\\":0,\\"x\\":{}}},\\"f\\":16383,\\"m\\":[2]}"`; +exports[`CustomEvent > toJSON > supports CustomEvent 1`] = `"{\\"t\\":{\\"t\\":38,\\"i\\":0,\\"s\\":\\"example\\",\\"f\\":{\\"t\\":10,\\"i\\":1,\\"p\\":{\\"k\\":[\\"detail\\",\\"bubbles\\",\\"cancelable\\",\\"composed\\"],\\"v\\":[{\\"t\\":10,\\"i\\":2,\\"p\\":{\\"k\\":[\\"self\\"],\\"v\\":[{\\"t\\":4,\\"i\\":2}],\\"s\\":1},\\"o\\":0},{\\"t\\":2,\\"s\\":3},{\\"t\\":2,\\"s\\":3},{\\"t\\":2,\\"s\\":3}],\\"s\\":4},\\"o\\":0}},\\"f\\":16383,\\"m\\":[2]}"`; -exports[`CustomEvent > toJSONAsync > supports CustomEvent 1`] = `"{\\"t\\":{\\"t\\":12,\\"i\\":0,\\"s\\":1,\\"f\\":{\\"t\\":38,\\"i\\":1,\\"s\\":\\"example\\",\\"f\\":{\\"t\\":10,\\"i\\":2,\\"p\\":{\\"k\\":[\\"detail\\",\\"bubbles\\",\\"cancelable\\",\\"composed\\"],\\"v\\":[{\\"t\\":10,\\"i\\":3,\\"p\\":{\\"k\\":[\\"self\\"],\\"v\\":[{\\"t\\":4,\\"i\\":3}],\\"s\\":1},\\"o\\":0,\\"x\\":{}},{\\"t\\":2,\\"s\\":3},{\\"t\\":2,\\"s\\":3},{\\"t\\":2,\\"s\\":3}],\\"s\\":4},\\"o\\":0,\\"x\\":{}}}},\\"f\\":16383,\\"m\\":[3]}"`; +exports[`CustomEvent > toJSONAsync > supports CustomEvent 1`] = `"{\\"t\\":{\\"t\\":12,\\"i\\":0,\\"s\\":1,\\"f\\":{\\"t\\":38,\\"i\\":1,\\"s\\":\\"example\\",\\"f\\":{\\"t\\":10,\\"i\\":2,\\"p\\":{\\"k\\":[\\"detail\\",\\"bubbles\\",\\"cancelable\\",\\"composed\\"],\\"v\\":[{\\"t\\":10,\\"i\\":3,\\"p\\":{\\"k\\":[\\"self\\"],\\"v\\":[{\\"t\\":4,\\"i\\":3}],\\"s\\":1},\\"o\\":0},{\\"t\\":2,\\"s\\":3},{\\"t\\":2,\\"s\\":3},{\\"t\\":2,\\"s\\":3}],\\"s\\":4},\\"o\\":0}}},\\"f\\":16383,\\"m\\":[3]}"`; diff --git a/packages/seroval/test/web-api/__snapshots__/event.test.ts.snap b/packages/seroval/test/web-api/__snapshots__/event.test.ts.snap index 1989aed2..40c4f8bc 100644 --- a/packages/seroval/test/web-api/__snapshots__/event.test.ts.snap +++ b/packages/seroval/test/web-api/__snapshots__/event.test.ts.snap @@ -20,14 +20,14 @@ exports[`Event > serialize > supports Event 1`] = `"new Event(\\"example\\",{bub exports[`Event > serializeAsync > supports Event 1`] = `"Promise.resolve(new Event(\\"example\\",{bubbles:!1,cancelable:!1,composed:!1}))"`; -exports[`Event > toCrossJSON > supports Event 1`] = `"{\\"t\\":37,\\"i\\":0,\\"s\\":\\"example\\",\\"f\\":{\\"t\\":10,\\"i\\":1,\\"p\\":{\\"k\\":[\\"bubbles\\",\\"cancelable\\",\\"composed\\"],\\"v\\":[{\\"t\\":2,\\"s\\":3},{\\"t\\":2,\\"s\\":3},{\\"t\\":2,\\"s\\":3}],\\"s\\":3},\\"o\\":0,\\"x\\":{}}}"`; +exports[`Event > toCrossJSON > supports Event 1`] = `"{\\"t\\":37,\\"i\\":0,\\"s\\":\\"example\\",\\"f\\":{\\"t\\":10,\\"i\\":1,\\"p\\":{\\"k\\":[\\"bubbles\\",\\"cancelable\\",\\"composed\\"],\\"v\\":[{\\"t\\":2,\\"s\\":3},{\\"t\\":2,\\"s\\":3},{\\"t\\":2,\\"s\\":3}],\\"s\\":3},\\"o\\":0}}"`; -exports[`Event > toCrossJSONAsync > supports Event 1`] = `"{\\"t\\":12,\\"i\\":0,\\"s\\":1,\\"f\\":{\\"t\\":37,\\"i\\":1,\\"s\\":\\"example\\",\\"f\\":{\\"t\\":10,\\"i\\":2,\\"p\\":{\\"k\\":[\\"bubbles\\",\\"cancelable\\",\\"composed\\"],\\"v\\":[{\\"t\\":2,\\"s\\":3},{\\"t\\":2,\\"s\\":3},{\\"t\\":2,\\"s\\":3}],\\"s\\":3},\\"o\\":0,\\"x\\":{}}}}"`; +exports[`Event > toCrossJSONAsync > supports Event 1`] = `"{\\"t\\":12,\\"i\\":0,\\"s\\":1,\\"f\\":{\\"t\\":37,\\"i\\":1,\\"s\\":\\"example\\",\\"f\\":{\\"t\\":10,\\"i\\":2,\\"p\\":{\\"k\\":[\\"bubbles\\",\\"cancelable\\",\\"composed\\"],\\"v\\":[{\\"t\\":2,\\"s\\":3},{\\"t\\":2,\\"s\\":3},{\\"t\\":2,\\"s\\":3}],\\"s\\":3},\\"o\\":0}}}"`; exports[`Event > toCrossJSONStream > supports Event 1`] = `"{\\"t\\":28,\\"i\\":0}"`; -exports[`Event > toCrossJSONStream > supports Event 2`] = `"{\\"t\\":29,\\"i\\":0,\\"f\\":{\\"t\\":37,\\"i\\":1,\\"s\\":\\"example\\",\\"f\\":{\\"t\\":10,\\"i\\":2,\\"p\\":{\\"k\\":[\\"bubbles\\",\\"cancelable\\",\\"composed\\"],\\"v\\":[{\\"t\\":2,\\"s\\":3},{\\"t\\":2,\\"s\\":3},{\\"t\\":2,\\"s\\":3}],\\"s\\":3},\\"o\\":0,\\"x\\":{}}}}"`; +exports[`Event > toCrossJSONStream > supports Event 2`] = `"{\\"t\\":29,\\"i\\":0,\\"f\\":{\\"t\\":37,\\"i\\":1,\\"s\\":\\"example\\",\\"f\\":{\\"t\\":10,\\"i\\":2,\\"p\\":{\\"k\\":[\\"bubbles\\",\\"cancelable\\",\\"composed\\"],\\"v\\":[{\\"t\\":2,\\"s\\":3},{\\"t\\":2,\\"s\\":3},{\\"t\\":2,\\"s\\":3}],\\"s\\":3},\\"o\\":0}}}"`; -exports[`Event > toJSON > supports Event 1`] = `"{\\"t\\":{\\"t\\":37,\\"i\\":0,\\"s\\":\\"example\\",\\"f\\":{\\"t\\":10,\\"i\\":1,\\"p\\":{\\"k\\":[\\"bubbles\\",\\"cancelable\\",\\"composed\\"],\\"v\\":[{\\"t\\":2,\\"s\\":3},{\\"t\\":2,\\"s\\":3},{\\"t\\":2,\\"s\\":3}],\\"s\\":3},\\"o\\":0,\\"x\\":{}}},\\"f\\":16383,\\"m\\":[]}"`; +exports[`Event > toJSON > supports Event 1`] = `"{\\"t\\":{\\"t\\":37,\\"i\\":0,\\"s\\":\\"example\\",\\"f\\":{\\"t\\":10,\\"i\\":1,\\"p\\":{\\"k\\":[\\"bubbles\\",\\"cancelable\\",\\"composed\\"],\\"v\\":[{\\"t\\":2,\\"s\\":3},{\\"t\\":2,\\"s\\":3},{\\"t\\":2,\\"s\\":3}],\\"s\\":3},\\"o\\":0}},\\"f\\":16383,\\"m\\":[]}"`; -exports[`Event > toJSONAsync > supports Event 1`] = `"{\\"t\\":{\\"t\\":12,\\"i\\":0,\\"s\\":1,\\"f\\":{\\"t\\":37,\\"i\\":1,\\"s\\":\\"example\\",\\"f\\":{\\"t\\":10,\\"i\\":2,\\"p\\":{\\"k\\":[\\"bubbles\\",\\"cancelable\\",\\"composed\\"],\\"v\\":[{\\"t\\":2,\\"s\\":3},{\\"t\\":2,\\"s\\":3},{\\"t\\":2,\\"s\\":3}],\\"s\\":3},\\"o\\":0,\\"x\\":{}}}},\\"f\\":16383,\\"m\\":[]}"`; +exports[`Event > toJSONAsync > supports Event 1`] = `"{\\"t\\":{\\"t\\":12,\\"i\\":0,\\"s\\":1,\\"f\\":{\\"t\\":37,\\"i\\":1,\\"s\\":\\"example\\",\\"f\\":{\\"t\\":10,\\"i\\":2,\\"p\\":{\\"k\\":[\\"bubbles\\",\\"cancelable\\",\\"composed\\"],\\"v\\":[{\\"t\\":2,\\"s\\":3},{\\"t\\":2,\\"s\\":3},{\\"t\\":2,\\"s\\":3}],\\"s\\":3},\\"o\\":0}}},\\"f\\":16383,\\"m\\":[]}"`; diff --git a/packages/seroval/test/web-api/__snapshots__/readable-stream.test.ts.snap b/packages/seroval/test/web-api/__snapshots__/readable-stream.test.ts.snap index 9ca78866..2f7fd718 100644 --- a/packages/seroval/test/web-api/__snapshots__/readable-stream.test.ts.snap +++ b/packages/seroval/test/web-api/__snapshots__/readable-stream.test.ts.snap @@ -28,137 +28,15 @@ exports[`ReadableStream > crossSerializeStream > supports ReadableStream errors exports[`ReadableStream > crossSerializeStream > supports ReadableStream errors 2`] = `"_$.St($R[0],$R[1]=Object.assign(new Error(\\"Oops!\\"),{stack:\\"\\"}))"`; -exports[`ReadableStream > toCrossJSONStream > supports ReadableStream 1`] = ` -{ - "a": undefined, - "b": undefined, - "c": undefined, - "e": undefined, - "f": undefined, - "i": 0, - "l": undefined, - "m": undefined, - "o": undefined, - "p": undefined, - "s": undefined, - "t": 31, - "x": undefined, -} -`; - -exports[`ReadableStream > toCrossJSONStream > supports ReadableStream 2`] = ` -{ - "a": undefined, - "b": undefined, - "c": undefined, - "e": undefined, - "f": { - "a": undefined, - "b": undefined, - "c": undefined, - "e": undefined, - "f": undefined, - "i": undefined, - "l": undefined, - "m": undefined, - "o": undefined, - "p": undefined, - "s": "foo", - "t": 1, - "x": undefined, - }, - "i": 0, - "l": undefined, - "m": undefined, - "o": undefined, - "p": undefined, - "s": undefined, - "t": 32, - "x": undefined, -} -`; - -exports[`ReadableStream > toCrossJSONStream > supports ReadableStream 3`] = ` -{ - "a": undefined, - "b": undefined, - "c": undefined, - "e": undefined, - "f": { - "a": undefined, - "b": undefined, - "c": undefined, - "e": undefined, - "f": undefined, - "i": undefined, - "l": undefined, - "m": undefined, - "o": undefined, - "p": undefined, - "s": "bar", - "t": 1, - "x": undefined, - }, - "i": 0, - "l": undefined, - "m": undefined, - "o": undefined, - "p": undefined, - "s": undefined, - "t": 32, - "x": undefined, -} -`; - -exports[`ReadableStream > toCrossJSONStream > supports ReadableStream 4`] = ` -{ - "a": undefined, - "b": undefined, - "c": undefined, - "e": undefined, - "f": { - "a": undefined, - "b": undefined, - "c": undefined, - "e": undefined, - "f": undefined, - "i": undefined, - "l": undefined, - "m": undefined, - "o": undefined, - "p": undefined, - "s": "baz", - "t": 1, - "x": undefined, - }, - "i": 0, - "l": undefined, - "m": undefined, - "o": undefined, - "p": undefined, - "s": undefined, - "t": 32, - "x": undefined, -} -`; - -exports[`ReadableStream > toCrossJSONStream > supports ReadableStream 5`] = ` -{ - "a": undefined, - "b": undefined, - "c": undefined, - "e": undefined, - "f": undefined, - "i": 0, - "l": undefined, - "m": undefined, - "o": undefined, - "p": undefined, - "s": undefined, - "t": 33, - "x": undefined, -} -`; +exports[`ReadableStream > toCrossJSONStream > supports ReadableStream 1`] = `"{\\"t\\":31,\\"i\\":0}"`; + +exports[`ReadableStream > toCrossJSONStream > supports ReadableStream 2`] = `"{\\"t\\":32,\\"i\\":0,\\"f\\":{\\"t\\":1,\\"s\\":\\"foo\\"}}"`; + +exports[`ReadableStream > toCrossJSONStream > supports ReadableStream 3`] = `"{\\"t\\":32,\\"i\\":0,\\"f\\":{\\"t\\":1,\\"s\\":\\"bar\\"}}"`; + +exports[`ReadableStream > toCrossJSONStream > supports ReadableStream 4`] = `"{\\"t\\":32,\\"i\\":0,\\"f\\":{\\"t\\":1,\\"s\\":\\"baz\\"}}"`; + +exports[`ReadableStream > toCrossJSONStream > supports ReadableStream 5`] = `"{\\"t\\":33,\\"i\\":0}"`; exports[`ReadableStream > toCrossJSONStream > supports ReadableStream errors 1`] = `"{\\"t\\":31,\\"i\\":0}"`; diff --git a/packages/seroval/test/web-api/__snapshots__/request.test.ts.snap b/packages/seroval/test/web-api/__snapshots__/request.test.ts.snap index 3d9d2f77..6a1366cf 100644 --- a/packages/seroval/test/web-api/__snapshots__/request.test.ts.snap +++ b/packages/seroval/test/web-api/__snapshots__/request.test.ts.snap @@ -18,12 +18,12 @@ exports[`Request > crossSerializeStream > supports Request 3`] = `"_$.Sc($R[2])" exports[`Request > serializeAsync > supports Request 1`] = `"new Request(\\"http://localhost:3000/\\",{body:new Uint8Array([72,101,108,108,111,32,87,111,114,108,100,33]).buffer,cache:\\"default\\",credentials:\\"same-origin\\",headers:new Headers({\\"content-type\\":\\"text/plain;charset=UTF-8\\"}),integrity:\\"\\",keepalive:!1,method:\\"POST\\",mode:\\"cors\\",redirect:\\"follow\\",referrer:\\"about:client\\",referrerPolicy:\\"\\"})"`; -exports[`Request > toCrossJSONStream > supports Request 1`] = `"{\\"t\\":35,\\"i\\":0,\\"s\\":\\"http://localhost:3000/\\",\\"f\\":{\\"t\\":10,\\"i\\":1,\\"p\\":{\\"k\\":[\\"body\\",\\"cache\\",\\"credentials\\",\\"headers\\",\\"integrity\\",\\"keepalive\\",\\"method\\",\\"mode\\",\\"redirect\\",\\"referrer\\",\\"referrerPolicy\\"],\\"v\\":[{\\"t\\":31,\\"i\\":2},{\\"t\\":1,\\"s\\":\\"default\\"},{\\"t\\":1,\\"s\\":\\"same-origin\\"},{\\"t\\":25,\\"i\\":3,\\"e\\":{\\"k\\":[\\"content-type\\"],\\"v\\":[{\\"t\\":1,\\"s\\":\\"text/plain;charset=UTF-8\\"}],\\"s\\":1}},{\\"t\\":1,\\"s\\":\\"\\"},{\\"t\\":2,\\"s\\":3},{\\"t\\":1,\\"s\\":\\"POST\\"},{\\"t\\":1,\\"s\\":\\"cors\\"},{\\"t\\":1,\\"s\\":\\"follow\\"},{\\"t\\":1,\\"s\\":\\"about:client\\"},{\\"t\\":1,\\"s\\":\\"\\"}],\\"s\\":11},\\"o\\":0,\\"x\\":{}}}"`; +exports[`Request > toCrossJSONStream > supports Request 1`] = `"{\\"t\\":35,\\"i\\":0,\\"s\\":\\"http://localhost:3000/\\",\\"f\\":{\\"t\\":10,\\"i\\":1,\\"p\\":{\\"k\\":[\\"body\\",\\"cache\\",\\"credentials\\",\\"headers\\",\\"integrity\\",\\"keepalive\\",\\"method\\",\\"mode\\",\\"redirect\\",\\"referrer\\",\\"referrerPolicy\\"],\\"v\\":[{\\"t\\":31,\\"i\\":2},{\\"t\\":1,\\"s\\":\\"default\\"},{\\"t\\":1,\\"s\\":\\"same-origin\\"},{\\"t\\":25,\\"i\\":3,\\"e\\":{\\"k\\":[\\"content-type\\"],\\"v\\":[{\\"t\\":1,\\"s\\":\\"text/plain;charset=UTF-8\\"}],\\"s\\":1}},{\\"t\\":1,\\"s\\":\\"\\"},{\\"t\\":2,\\"s\\":3},{\\"t\\":1,\\"s\\":\\"POST\\"},{\\"t\\":1,\\"s\\":\\"cors\\"},{\\"t\\":1,\\"s\\":\\"follow\\"},{\\"t\\":1,\\"s\\":\\"about:client\\"},{\\"t\\":1,\\"s\\":\\"\\"}],\\"s\\":11},\\"o\\":0}}"`; exports[`Request > toCrossJSONStream > supports Request 2`] = `"{\\"t\\":32,\\"i\\":2,\\"f\\":{\\"t\\":15,\\"i\\":4,\\"l\\":12,\\"c\\":\\"Uint8Array\\",\\"f\\":{\\"t\\":21,\\"i\\":5,\\"s\\":[72,101,108,108,111,32,87,111,114,108,100,33]},\\"b\\":0}}"`; exports[`Request > toCrossJSONStream > supports Request 3`] = `"{\\"t\\":33,\\"i\\":2}"`; -exports[`Request > toJSONAsync > supports Request 1`] = `"{\\"t\\":{\\"t\\":35,\\"i\\":0,\\"s\\":\\"http://localhost:3000/\\",\\"f\\":{\\"t\\":10,\\"i\\":1,\\"p\\":{\\"k\\":[\\"body\\",\\"cache\\",\\"credentials\\",\\"headers\\",\\"integrity\\",\\"keepalive\\",\\"method\\",\\"mode\\",\\"redirect\\",\\"referrer\\",\\"referrerPolicy\\"],\\"v\\":[{\\"t\\":21,\\"i\\":2,\\"s\\":[72,101,108,108,111,32,87,111,114,108,100,33]},{\\"t\\":1,\\"s\\":\\"default\\"},{\\"t\\":1,\\"s\\":\\"same-origin\\"},{\\"t\\":25,\\"i\\":3,\\"e\\":{\\"k\\":[\\"content-type\\"],\\"v\\":[{\\"t\\":1,\\"s\\":\\"text/plain;charset=UTF-8\\"}],\\"s\\":1}},{\\"t\\":1,\\"s\\":\\"\\"},{\\"t\\":2,\\"s\\":3},{\\"t\\":1,\\"s\\":\\"POST\\"},{\\"t\\":1,\\"s\\":\\"cors\\"},{\\"t\\":1,\\"s\\":\\"follow\\"},{\\"t\\":1,\\"s\\":\\"about:client\\"},{\\"t\\":1,\\"s\\":\\"\\"}],\\"s\\":11},\\"o\\":0,\\"x\\":{}}},\\"f\\":16383,\\"m\\":[]}"`; +exports[`Request > toJSONAsync > supports Request 1`] = `"{\\"t\\":{\\"t\\":35,\\"i\\":0,\\"s\\":\\"http://localhost:3000/\\",\\"f\\":{\\"t\\":10,\\"i\\":1,\\"p\\":{\\"k\\":[\\"body\\",\\"cache\\",\\"credentials\\",\\"headers\\",\\"integrity\\",\\"keepalive\\",\\"method\\",\\"mode\\",\\"redirect\\",\\"referrer\\",\\"referrerPolicy\\"],\\"v\\":[{\\"t\\":21,\\"i\\":2,\\"s\\":[72,101,108,108,111,32,87,111,114,108,100,33]},{\\"t\\":1,\\"s\\":\\"default\\"},{\\"t\\":1,\\"s\\":\\"same-origin\\"},{\\"t\\":25,\\"i\\":3,\\"e\\":{\\"k\\":[\\"content-type\\"],\\"v\\":[{\\"t\\":1,\\"s\\":\\"text/plain;charset=UTF-8\\"}],\\"s\\":1}},{\\"t\\":1,\\"s\\":\\"\\"},{\\"t\\":2,\\"s\\":3},{\\"t\\":1,\\"s\\":\\"POST\\"},{\\"t\\":1,\\"s\\":\\"cors\\"},{\\"t\\":1,\\"s\\":\\"follow\\"},{\\"t\\":1,\\"s\\":\\"about:client\\"},{\\"t\\":1,\\"s\\":\\"\\"}],\\"s\\":11},\\"o\\":0}},\\"f\\":16383,\\"m\\":[]}"`; -exports[`Request > toJSONAsync > supports Request 2`] = `"{\\"t\\":35,\\"i\\":0,\\"s\\":\\"http://localhost:3000/\\",\\"f\\":{\\"t\\":10,\\"i\\":1,\\"p\\":{\\"k\\":[\\"body\\",\\"cache\\",\\"credentials\\",\\"headers\\",\\"integrity\\",\\"keepalive\\",\\"method\\",\\"mode\\",\\"redirect\\",\\"referrer\\",\\"referrerPolicy\\"],\\"v\\":[{\\"t\\":21,\\"i\\":2,\\"s\\":[72,101,108,108,111,32,87,111,114,108,100,33]},{\\"t\\":1,\\"s\\":\\"default\\"},{\\"t\\":1,\\"s\\":\\"same-origin\\"},{\\"t\\":25,\\"i\\":3,\\"e\\":{\\"k\\":[\\"content-type\\"],\\"v\\":[{\\"t\\":1,\\"s\\":\\"text/plain;charset=UTF-8\\"}],\\"s\\":1}},{\\"t\\":1,\\"s\\":\\"\\"},{\\"t\\":2,\\"s\\":3},{\\"t\\":1,\\"s\\":\\"POST\\"},{\\"t\\":1,\\"s\\":\\"cors\\"},{\\"t\\":1,\\"s\\":\\"follow\\"},{\\"t\\":1,\\"s\\":\\"about:client\\"},{\\"t\\":1,\\"s\\":\\"\\"}],\\"s\\":11},\\"o\\":0,\\"x\\":{}}}"`; +exports[`Request > toJSONAsync > supports Request 2`] = `"{\\"t\\":35,\\"i\\":0,\\"s\\":\\"http://localhost:3000/\\",\\"f\\":{\\"t\\":10,\\"i\\":1,\\"p\\":{\\"k\\":[\\"body\\",\\"cache\\",\\"credentials\\",\\"headers\\",\\"integrity\\",\\"keepalive\\",\\"method\\",\\"mode\\",\\"redirect\\",\\"referrer\\",\\"referrerPolicy\\"],\\"v\\":[{\\"t\\":21,\\"i\\":2,\\"s\\":[72,101,108,108,111,32,87,111,114,108,100,33]},{\\"t\\":1,\\"s\\":\\"default\\"},{\\"t\\":1,\\"s\\":\\"same-origin\\"},{\\"t\\":25,\\"i\\":3,\\"e\\":{\\"k\\":[\\"content-type\\"],\\"v\\":[{\\"t\\":1,\\"s\\":\\"text/plain;charset=UTF-8\\"}],\\"s\\":1}},{\\"t\\":1,\\"s\\":\\"\\"},{\\"t\\":2,\\"s\\":3},{\\"t\\":1,\\"s\\":\\"POST\\"},{\\"t\\":1,\\"s\\":\\"cors\\"},{\\"t\\":1,\\"s\\":\\"follow\\"},{\\"t\\":1,\\"s\\":\\"about:client\\"},{\\"t\\":1,\\"s\\":\\"\\"}],\\"s\\":11},\\"o\\":0}}"`; diff --git a/packages/seroval/test/web-api/__snapshots__/response.test.ts.snap b/packages/seroval/test/web-api/__snapshots__/response.test.ts.snap index c722ccd6..bf081b31 100644 --- a/packages/seroval/test/web-api/__snapshots__/response.test.ts.snap +++ b/packages/seroval/test/web-api/__snapshots__/response.test.ts.snap @@ -18,12 +18,12 @@ exports[`Response > crossSerializeStream > supports Response 3`] = `"_$.Sc($R[1] exports[`Response > serializeAsync > supports Response 1`] = `"new Response(new Uint8Array([72,101,108,108,111,32,87,111,114,108,100,33]).buffer,{headers:new Headers({\\"content-type\\":\\"text/plain;charset=UTF-8\\"}),status:200,statusText:\\"\\"})"`; -exports[`Response > toCrossJSONStream > supports Response 1`] = `"{\\"t\\":36,\\"i\\":0,\\"a\\":[{\\"t\\":31,\\"i\\":1},{\\"t\\":10,\\"i\\":2,\\"p\\":{\\"k\\":[\\"headers\\",\\"status\\",\\"statusText\\"],\\"v\\":[{\\"t\\":25,\\"i\\":3,\\"e\\":{\\"k\\":[\\"content-type\\"],\\"v\\":[{\\"t\\":1,\\"s\\":\\"text/plain;charset=UTF-8\\"}],\\"s\\":1}},{\\"t\\":0,\\"s\\":200},{\\"t\\":1,\\"s\\":\\"\\"}],\\"s\\":3},\\"o\\":0,\\"x\\":{}}]}"`; +exports[`Response > toCrossJSONStream > supports Response 1`] = `"{\\"t\\":36,\\"i\\":0,\\"a\\":[{\\"t\\":31,\\"i\\":1},{\\"t\\":10,\\"i\\":2,\\"p\\":{\\"k\\":[\\"headers\\",\\"status\\",\\"statusText\\"],\\"v\\":[{\\"t\\":25,\\"i\\":3,\\"e\\":{\\"k\\":[\\"content-type\\"],\\"v\\":[{\\"t\\":1,\\"s\\":\\"text/plain;charset=UTF-8\\"}],\\"s\\":1}},{\\"t\\":0,\\"s\\":200},{\\"t\\":1,\\"s\\":\\"\\"}],\\"s\\":3},\\"o\\":0}]}"`; exports[`Response > toCrossJSONStream > supports Response 2`] = `"{\\"t\\":32,\\"i\\":1,\\"f\\":{\\"t\\":15,\\"i\\":4,\\"l\\":12,\\"c\\":\\"Uint8Array\\",\\"f\\":{\\"t\\":21,\\"i\\":5,\\"s\\":[72,101,108,108,111,32,87,111,114,108,100,33]},\\"b\\":0}}"`; exports[`Response > toCrossJSONStream > supports Response 3`] = `"{\\"t\\":33,\\"i\\":1}"`; -exports[`Response > toJSONAsync > supports Response 1`] = `"{\\"t\\":{\\"t\\":36,\\"i\\":0,\\"a\\":[{\\"t\\":21,\\"i\\":1,\\"s\\":[72,101,108,108,111,32,87,111,114,108,100,33]},{\\"t\\":10,\\"i\\":2,\\"p\\":{\\"k\\":[\\"headers\\",\\"status\\",\\"statusText\\"],\\"v\\":[{\\"t\\":25,\\"i\\":3,\\"e\\":{\\"k\\":[\\"content-type\\"],\\"v\\":[{\\"t\\":1,\\"s\\":\\"text/plain;charset=UTF-8\\"}],\\"s\\":1}},{\\"t\\":0,\\"s\\":200},{\\"t\\":1,\\"s\\":\\"\\"}],\\"s\\":3},\\"o\\":0,\\"x\\":{}}]},\\"f\\":16383,\\"m\\":[]}"`; +exports[`Response > toJSONAsync > supports Response 1`] = `"{\\"t\\":{\\"t\\":36,\\"i\\":0,\\"a\\":[{\\"t\\":21,\\"i\\":1,\\"s\\":[72,101,108,108,111,32,87,111,114,108,100,33]},{\\"t\\":10,\\"i\\":2,\\"p\\":{\\"k\\":[\\"headers\\",\\"status\\",\\"statusText\\"],\\"v\\":[{\\"t\\":25,\\"i\\":3,\\"e\\":{\\"k\\":[\\"content-type\\"],\\"v\\":[{\\"t\\":1,\\"s\\":\\"text/plain;charset=UTF-8\\"}],\\"s\\":1}},{\\"t\\":0,\\"s\\":200},{\\"t\\":1,\\"s\\":\\"\\"}],\\"s\\":3},\\"o\\":0}]},\\"f\\":16383,\\"m\\":[]}"`; -exports[`Response > toJSONAsync > supports Response 2`] = `"{\\"t\\":36,\\"i\\":0,\\"a\\":[{\\"t\\":21,\\"i\\":1,\\"s\\":[72,101,108,108,111,32,87,111,114,108,100,33]},{\\"t\\":10,\\"i\\":2,\\"p\\":{\\"k\\":[\\"headers\\",\\"status\\",\\"statusText\\"],\\"v\\":[{\\"t\\":25,\\"i\\":3,\\"e\\":{\\"k\\":[\\"content-type\\"],\\"v\\":[{\\"t\\":1,\\"s\\":\\"text/plain;charset=UTF-8\\"}],\\"s\\":1}},{\\"t\\":0,\\"s\\":200},{\\"t\\":1,\\"s\\":\\"\\"}],\\"s\\":3},\\"o\\":0,\\"x\\":{}}]}"`; +exports[`Response > toJSONAsync > supports Response 2`] = `"{\\"t\\":36,\\"i\\":0,\\"a\\":[{\\"t\\":21,\\"i\\":1,\\"s\\":[72,101,108,108,111,32,87,111,114,108,100,33]},{\\"t\\":10,\\"i\\":2,\\"p\\":{\\"k\\":[\\"headers\\",\\"status\\",\\"statusText\\"],\\"v\\":[{\\"t\\":25,\\"i\\":3,\\"e\\":{\\"k\\":[\\"content-type\\"],\\"v\\":[{\\"t\\":1,\\"s\\":\\"text/plain;charset=UTF-8\\"}],\\"s\\":1}},{\\"t\\":0,\\"s\\":200},{\\"t\\":1,\\"s\\":\\"\\"}],\\"s\\":3},\\"o\\":0}]}"`; diff --git a/packages/seroval/test/web-api/readable-stream.test.ts b/packages/seroval/test/web-api/readable-stream.test.ts index e0d6eac8..35cbf48b 100644 --- a/packages/seroval/test/web-api/readable-stream.test.ts +++ b/packages/seroval/test/web-api/readable-stream.test.ts @@ -104,7 +104,7 @@ describe('ReadableStream', () => { }); toCrossJSONStream(example, { onParse(data) { - expect(data).toMatchSnapshot(); + expect(JSON.stringify(data)).toMatchSnapshot(); }, onDone() { resolve();