{"version":3,"file":"json-stream-es.mjs","sources":["../src/types.ts","../src/utils.ts","../src/json-deserializer.ts","../src/json-parser.ts","../src/json-serializer.ts","../src/json-stringifier.ts","../src/json-path-detector.ts","../src/json-path-selector.ts","../src/stream-splitter.ts","../src/json-path-stream-splitter.ts","../src/convenience.ts"],"sourcesContent":["/** A JavaScript value that can be stringified to JSON. */\nexport type JsonValue = { [key: string]: JsonValue } | Array<JsonValue> | string | number | boolean | null;\n\nexport enum JsonChunkType {\n\t/** A whitespace that appears between JSON tokens and has no semantic meaning. */\n\tWHITESPACE = \"WHITESPACE\",\n\n\t/** A comma that separates two array/object items. */\n\tCOMMA = \"COMMA\",\n\n\t/** A colon that separates an object key from its value. */\n\tCOLON = \"COLON\",\n\n\t/**\n\t * The start of an object, represented by a curly open bracket. Will be followed by zero or more properties, each one represented\n\t * by a string key (one STRING_KEY_START, zero or more STRING_KEY_CHUNKs, one STRING_KEY_END) for the key, a\n\t * COLON, a series of chunks for the value and a COMMA (except for the last property); and finally an OBJECT_END.\n\t */\n\tOBJECT_START = \"OBJECT_START\",\n\n\t/** The end of an object, represented by a curly close bracket. */\n\tOBJECT_END = \"OBJECT_END\",\n\n\t/**\n\t * The start of an array, represented by a square open bracket. Will be followed by zero or more chunks representing the values,\n\t * each followed by a COMMA (except the last one); and finally an ARRAY_END.\n\t */\n\tARRAY_START = \"ARRAY_START\",\n\n\t/** The end of an array, represented by a square close bracket. */\n\tARRAY_END = \"ARRAY_END\",\n\n\t/**\n\t * The start of a string, represented by a double quote. Will be followed by zero or more STRING_CHUNKs and finally\n\t * a STRING_END.\n\t */\n\tSTRING_START = \"STRING_START\",\n\n\t/**\n\t * A section of a string value. Unicode characters are always fully included, so an escape value like \\uffff will never span across multiple chunks.\n\t */\n\tSTRING_CHUNK = \"STRING_CHUNK\",\n\n\t/** The end of a string value, represented by a double quote. */\n\tSTRING_END = \"STRING_END\",\n\n\t/** A number. May be positive/negative and an integer/float, and the raw value can have an exponent. */\n\tNUMBER_VALUE = \"NUMBER_VALUE\",\n\n\t/** A boolean, either true or false. */\n\tBOOLEAN_VALUE = \"BOOLEAN_VALUE\",\n\n\t/** A null value. */\n\tNULL_VALUE = \"NULL_VALUE\"\n}\n\nexport enum StringRole {\n\t/** A string used as a property key inside an object. */\n\tKEY = \"KEY\",\n\t/** A string used as a value. */\n\tVALUE = \"VALUE\"\n}\n\nexport type JsonChunk<Type extends JsonChunkType = JsonChunkType> = Extract<(\n\t| { type: JsonChunkType.WHITESPACE }\n\t| { type: JsonChunkType.COMMA }\n\t| { type: JsonChunkType.COLON }\n\t| { type: JsonChunkType.OBJECT_START }\n\t| { type: JsonChunkType.OBJECT_END }\n\t| { type: JsonChunkType.ARRAY_START }\n\t| { type: JsonChunkType.ARRAY_END }\n\t| { type: JsonChunkType.STRING_START; role: StringRole }\n\t| {\n\t\ttype: JsonChunkType.STRING_CHUNK;\n\t\trole: StringRole;\n\t\t/** The string value of the string value, without quotes and with backslash escapes resolved. */\n\t\tvalue: string;\n\t}\n\t| { type: JsonChunkType.STRING_END; role: StringRole }\n\t| { type: JsonChunkType.NUMBER_VALUE; value: number }\n\t| { type: JsonChunkType.BOOLEAN_VALUE; value: boolean }\n\t| { type: JsonChunkType.NULL_VALUE; value: null }\n) & {\n\t/** The raw JSON code for this chunk. The concatenated rawValues of all chunks form a valid JSON value. */\n\trawValue: string;\n}, { type: Type }>;\n\nexport function whitespace(rawValue: string): JsonChunk<JsonChunkType.WHITESPACE> {\n\treturn {\n\t\ttype: JsonChunkType.WHITESPACE,\n\t\trawValue\n\t};\n}\n\nexport function comma(rawValue = \",\"): JsonChunk<JsonChunkType.COMMA> {\n\treturn {\n\t\ttype: JsonChunkType.COMMA,\n\t\trawValue\n\t};\n}\n\nexport function colon(rawValue = \":\"): JsonChunk<JsonChunkType.COLON> {\n\treturn {\n\t\ttype: JsonChunkType.COLON,\n\t\trawValue\n\t};\n}\n\nexport function objectStart(rawValue = \"{\"): JsonChunk<JsonChunkType.OBJECT_START> {\n\treturn {\n\t\ttype: JsonChunkType.OBJECT_START,\n\t\trawValue\n\t};\n}\n\nexport function objectEnd(rawValue = \"}\"): JsonChunk<JsonChunkType.OBJECT_END> {\n\treturn {\n\t\ttype: JsonChunkType.OBJECT_END,\n\t\trawValue\n\t};\n}\n\nexport function arrayStart(rawValue = \"[\"): JsonChunk<JsonChunkType.ARRAY_START> {\n\treturn {\n\t\ttype: JsonChunkType.ARRAY_START,\n\t\trawValue\n\t};\n}\n\nexport function arrayEnd(rawValue = \"]\"): JsonChunk<JsonChunkType.ARRAY_END> {\n\treturn {\n\t\ttype: JsonChunkType.ARRAY_END,\n\t\trawValue\n\t};\n}\n\nexport function stringStart(role = StringRole.VALUE, rawValue = \"\\\"\"): JsonChunk<JsonChunkType.STRING_START> {\n\treturn {\n\t\ttype: JsonChunkType.STRING_START,\n\t\trole,\n\t\trawValue\n\t};\n}\n\nexport function stringChunk(value: string, role = StringRole.VALUE, rawValue?: string): JsonChunk<JsonChunkType.STRING_CHUNK> {\n\treturn {\n\t\ttype: JsonChunkType.STRING_CHUNK,\n\t\trole,\n\t\tvalue,\n\t\trawValue: rawValue ?? JSON.stringify(value).slice(1, -1)\n\t};\n}\n\nexport function stringEnd(role = StringRole.VALUE, rawValue = \"\\\"\"): JsonChunk<JsonChunkType.STRING_END> {\n\treturn {\n\t\ttype: JsonChunkType.STRING_END,\n\t\trole,\n\t\trawValue\n\t};\n}\n\nexport function numberValue(value: number, rawValue?: string): JsonChunk<JsonChunkType.NUMBER_VALUE> {\n\treturn {\n\t\ttype: JsonChunkType.NUMBER_VALUE,\n\t\tvalue,\n\t\trawValue: rawValue ?? JSON.stringify(value)\n\t};\n}\n\nexport function booleanValue(value: boolean, rawValue?: string): JsonChunk<JsonChunkType.BOOLEAN_VALUE> {\n\treturn {\n\t\ttype: JsonChunkType.BOOLEAN_VALUE,\n\t\tvalue,\n\t\trawValue: rawValue ?? JSON.stringify(value)\n\t};\n}\n\nexport function nullValue(rawValue = \"null\"): JsonChunk<JsonChunkType.NULL_VALUE> {\n\treturn {\n\t\ttype: JsonChunkType.NULL_VALUE,\n\t\tvalue: null,\n\t\trawValue\n\t};\n}","/**\n * Converts a ReadableStream into an AsyncIterable so the stream can be consumed using \"for await\".\n * In the latest Streams API, ReadableStream is an AsyncIterable, but not all browsers support this yet.\n */\nexport async function* streamToIterable<T>(stream: ReadableStream<T>): AsyncGenerator<T, void, undefined> {\n\tconst reader = stream.getReader();\n\n\ttry {\n\t\twhile (true) {\n\t\t\tconst { done, value } = await reader.read();\n\t\t\tif (done) {\n\t\t\t\treturn;\n\t\t\t} else {\n\t\t\t\tyield value;\n\t\t\t}\n\t\t}\n\t} finally {\n\t\t// Is also called if iterator is quit early (by using break;)\n\t\treader.cancel().catch(() => undefined);\n\t}\n}\n\n/**\n * Converts a sync/async iterable into an UnderlyingDefaultSource, which can be used as the argument to construct a ReadableStream.\n */\nexport function iterableToSource<T>(iterable: AsyncIterable<T> | Iterable<T>): UnderlyingDefaultSource<T> {\n\tconst iterator = Symbol.asyncIterator in iterable ? iterable[Symbol.asyncIterator]() : iterable[Symbol.iterator]();\n\treturn {\n\t\tasync pull(controller) {\n\t\t\tconst { value, done } = await iterator.next();\n\t\t\tif (done) {\n\t\t\t\tcontroller.close();\n\t\t\t} else {\n\t\t\t\tcontroller.enqueue(value);\n\t\t\t}\n\t\t},\n\t};\n}\n\nexport function iterableToStream<T>(iterable: AsyncIterable<T> | Iterable<T>, strategy?: QueuingStrategy<T>): ReadableStream<T> {\n\treturn new ReadableStream<T>(iterableToSource(iterable), strategy);\n}\n\nexport async function streamToArray<T>(stream: ReadableStream<T>): Promise<T[]> {\n\tconst reader = stream.getReader();\n\tconst result: T[] = [];\n\n\t// eslint-disable-next-line no-constant-condition\n\twhile (true) {\n\t\tconst { done, value } = await reader.read();\n\t\tif (done) {\n\t\t\treturn result;\n\t\t} else {\n\t\t\tresult.push(value);\n\t\t}\n\t}\n}\n\nexport async function streamToString(stream: ReadableStream<string>): Promise<string> {\n\treturn (await streamToArray(stream)).join(\"\");\n}\n\nexport function stringToStream(string: string): ReadableStream<string> {\n\treturn iterableToStream([string]);\n}\n\nexport function concatStreams<T>(...streams: Array<ReadableStream<T> | (() => ReadableStream<T>)>): ReadableStream<T> {\n\tconst transform = new TransformStream();\n\t(async () => {\n\t\tfor (const stream of streams) {\n\t\t\tawait (typeof stream === \"function\" ? stream() : stream).pipeTo(transform.writable, { preventClose: true });\n\t\t}\n\t\tawait transform.writable.close();\n\t})().catch(async (err) => {\n\t\tawait transform.writable.abort(err);\n\t});\n\treturn transform.readable;\n}\n\nexport type TransformerAbortCallback<O> = (reason: any, controller: TransformStreamDefaultController<O>) => void | PromiseLike<void>;\n\n/**\n * A transform stream that provides an abort() handler to transform stream abortions.\n * More info can be found on https://stackoverflow.com/a/78489418/242365.\n */\nexport class AbortHandlingTransformStream<I, O> extends TransformStream<I, O> {\n    constructor(\n        transformer?: Transformer<I, O> & {\n            abort?: TransformerAbortCallback<O>;\n        },\n        writableStrategy?: QueuingStrategy<I>,\n        readableStrategy?: QueuingStrategy<O>\n    ) {\n        const { abort, start, ...rest } = transformer ?? {};\n        let controller: TransformStreamDefaultController<O>;\n        super({\n            ...rest,\n            start: (c) => {\n                controller = c;\n                start?.(c);\n            }\n        }, writableStrategy, readableStrategy);\n\n        const writer = this.writable.getWriter();\n        const writable = new WritableStream({\n            write: (chunk) => writer.write(chunk),\n            close: () => writer.close(),\n            abort: async (reason) => {\n                if (abort) {\n                    try {\n                        await abort(reason, controller);\n                    } catch (err: any) {\n                        await writer.abort(err);\n                    }\n                } else {\n                    await writer.abort(reason);\n                }\n            }\n        });\n\n        Object.defineProperty(this, \"writable\", {\n            get: () => writable,\n\t\t\tconfigurable: true\n        });\n    }\n}\n\n/**\n * A transform stream where rather than specifying a transformer as a constructor argument, you override its methods to implement the\n * transformation.\n */\nexport abstract class AbstractTransformStream<I, O> extends AbortHandlingTransformStream<I, O> {\n\tconstructor(writableStrategy?: QueuingStrategy<I>, readableStrategy?: QueuingStrategy<O>) {\n\t\tsuper({\n\t\t\ttransform: (chunk, controller) => {\n\t\t\t\treturn this.transform(chunk, controller);\n\t\t\t},\n\t\t\tflush: (controller) => {\n\t\t\t\treturn this.flush(controller);\n\t\t\t},\n\t\t\tabort: (reason, controller) => {\n\t\t\t\treturn this.abort(reason, controller);\n\t\t\t}\n\t\t}, writableStrategy, readableStrategy);\n\t}\n\n\tprotected abstract transform(chunk: I, controller: TransformStreamDefaultController<O>): void | Promise<void>;\n\n\tprotected flush(controller: TransformStreamDefaultController<O>): void | Promise<void> {\n\t\tcontroller.terminate();\n\t}\n\n\tprotected abort(reason: any, controller: TransformStreamDefaultController<O>): void | Promise<void> {\n\t\tcontroller.error(reason);\n\t}\n}\n\n/**\n * A TransformStream that is set up by providing a ReadableStream mapper rather than transforming individual chunks using\n * start(), transform() and flush().\n * This allows access to ReadableStream methods such as pipeThrough(), which makes it easy to reuse other TransformStreams\n * in the implementation.\n * @param transformReadable Retrieves one parameter with a ReadableStream that emits the input data of the TransformStream.\n *     Should return a ReadableStream whose output will become the output data of the TransformStream.\n */\n// https://stackoverflow.com/a/78404600/242365\nexport class PipeableTransformStream<I, O> extends TransformStream<I, O> {\n\tconstructor(transformReadable: (readable: ReadableStream<I>) => ReadableStream<O>, writableStrategy?: QueuingStrategy<I>, readableStrategy?: QueuingStrategy<O>) {\n\t\tsuper({}, writableStrategy);\n\t\tconst readable = transformReadable(this.readable as any).pipeThrough(new TransformStream({}, undefined, readableStrategy));\n\t\tObject.defineProperty(this, \"readable\", { get: () => readable });\n\t}\n}\n\nexport function arrayStartsWith<T>(array: T[], startsWith: T[]): boolean {\n\treturn array.length >= startsWith.length && startsWith.every((v, i) => array[i] === v);\n}","import type { JsonChunkWithPath, JsonPath } from \"./json-path-detector\";\nimport { JsonChunkType, StringRole, type JsonChunk, type JsonValue } from \"./types\";\nimport { AbstractTransformStream } from \"./utils\";\n\nenum StateType {\n\tROOT = \"ROOT\",\n\tOBJECT_PROPERTY = \"OBJECT_PROPERTY\",\n\tARRAY_ITEM = \"ARRAY_ITEM\"\n};\n\ntype AnyState<C extends JsonChunk & { path?: JsonPath }> = (\n\t{\n\t\ttype: StateType.ROOT;\n\t\tvalue: JsonValue | undefined;\n\t\tpath: C[\"path\"];\n\t} | {\n\t\ttype: StateType.OBJECT_PROPERTY;\n\t\tobject: Record<string, JsonValue>;\n\t\tkey: string;\n\t\tvalue: JsonValue | undefined;\n\t\tparent: State<C>;\n\t} | {\n\t\ttype: StateType.ARRAY_ITEM;\n\t\tarray: Array<JsonValue>;\n\t\tvalue: JsonValue | undefined;\n\t\tparent: State<C>\n\t}\n);\n\ntype State<C extends JsonChunk & { path?: JsonPath }, Type extends StateType = StateType> = Extract<AnyState<C>, { type: Type }>;\n\nexport type JsonValueAndOptionalPath<C extends JsonChunk & { path?: JsonPath }> = { value: JsonValue; path: C[\"path\"] };\nexport type JsonValueAndPath = JsonValueAndOptionalPath<JsonChunkWithPath>;\n\n/**\n * Converts a stream of JsonChunks into JsonValues. The input stream may contain multiple JSON documents on the root level, as\n * produced by JsonPathSelector or by concatenating multiple JsonChunk streams.\n */\nexport class JsonDeserializer<C extends JsonChunk & { path?: JsonPath } = JsonChunkWithPath> extends AbstractTransformStream<C, JsonValueAndOptionalPath<C>> {\n\tprotected state: State<C> = { type: StateType.ROOT, value: undefined, path: [] };\n\n\tconstructor() {\n\t\tsuper();\n\t}\n\n\tprotected handleValueEnd(controller: TransformStreamDefaultController<JsonValueAndOptionalPath<C>>): void {\n\t\tif (this.state.type === StateType.ROOT) {\n\t\t\tif (this.state.value !== undefined) {\n\t\t\t\tcontroller.enqueue({ value: this.state.value, path: this.state.path });\n\t\t\t}\n\t\t\tthis.state.value = undefined;\n\t\t} else if (this.state.type === StateType.OBJECT_PROPERTY) {\n\t\t\tif (this.state.value !== undefined) {\n\t\t\t\tthis.state.object[this.state.key] = this.state.value;\n\t\t\t}\n\t\t\tthis.state.key = \"\";\n\t\t\tthis.state.value = undefined;\n\t\t} else if (this.state.type === StateType.ARRAY_ITEM) {\n\t\t\tif (this.state.value !== undefined) {\n\t\t\t\tthis.state.array.push(this.state.value);\n\t\t\t}\n\t\t\tthis.state.value = undefined;\n\t\t}\n\t}\n\n\tprotected override transform(chunk: C, controller: TransformStreamDefaultController<JsonValueAndOptionalPath<C>>): void {\n\t\tif (chunk.type === JsonChunkType.NUMBER_VALUE || chunk.type === JsonChunkType.BOOLEAN_VALUE || chunk.type === JsonChunkType.NULL_VALUE) {\n\t\t\tthis.state.value = chunk.value;\n\t\t\tif (this.state.type === StateType.ROOT) {\n\t\t\t\tthis.state.path = chunk.path;\n\t\t\t}\n\t\t\tthis.handleValueEnd(controller);\n\t\t}\n\n\t\telse if (chunk.type === JsonChunkType.STRING_START && chunk.role === StringRole.VALUE) {\n\t\t\tthis.state.value = \"\";\n\t\t\tif (this.state.type === StateType.ROOT) {\n\t\t\t\tthis.state.path = chunk.path;\n\t\t\t}\n\t\t}\n\t\telse if (chunk.type === JsonChunkType.STRING_CHUNK && chunk.role === StringRole.VALUE) {\n\t\t\tthis.state.value += chunk.value;\n\t\t}\n\t\telse if (chunk.type === JsonChunkType.STRING_END && chunk.role === StringRole.VALUE) {\n\t\t\tthis.handleValueEnd(controller);\n\t\t}\n\n\t\telse if (chunk.type === JsonChunkType.ARRAY_START) {\n\t\t\tthis.state.value = [];\n\t\t\tif (this.state.type === StateType.ROOT) {\n\t\t\t\tthis.state.path = chunk.path;\n\t\t\t}\n\t\t\tthis.state = {\n\t\t\t\ttype: StateType.ARRAY_ITEM,\n\t\t\t\tarray: this.state.value,\n\t\t\t\tvalue: undefined,\n\t\t\t\tparent: this.state\n\t\t\t};\n\t\t} else if (chunk.type === JsonChunkType.ARRAY_END && this.state.type === StateType.ARRAY_ITEM) {\n\t\t\tthis.state = this.state.parent;\n\t\t\tthis.handleValueEnd(controller);\n\t\t}\n\n\t\telse if (chunk.type === JsonChunkType.OBJECT_START) {\n\t\t\tthis.state.value = {};\n\t\t\tif (this.state.type === StateType.ROOT) {\n\t\t\t\tthis.state.path = chunk.path;\n\t\t\t}\n\t\t\tthis.state = {\n\t\t\t\ttype: StateType.OBJECT_PROPERTY,\n\t\t\t\tobject: this.state.value,\n\t\t\t\tkey: \"\",\n\t\t\t\tvalue: undefined,\n\t\t\t\tparent: this.state\n\t\t\t};\n\t\t} else if (chunk.type === JsonChunkType.OBJECT_END && this.state.type === StateType.OBJECT_PROPERTY) {\n\t\t\tthis.state = this.state.parent;\n\t\t\tthis.handleValueEnd(controller);\n\t\t} else if (chunk.type === JsonChunkType.STRING_CHUNK && chunk.role === StringRole.KEY && this.state.type === StateType.OBJECT_PROPERTY) {\n\t\t\tthis.state.key += chunk.value;\n\t\t}\n\t}\n}\n\n/**\n * Converts a stream of JsonChunks into a single JsonValue. The input stream must contain exactly one JSON documents on the root level.\n */\nexport async function deserializeJsonValue(stream: ReadableStream<JsonChunk>): Promise<JsonValue> {\n\tconst reader = stream.pipeThrough(new JsonDeserializer()).getReader();\n\tconst { value, done: done1 } = await reader.read();\n\tif (done1) {\n\t\tthrow new Error(\"The stream did not contain any values.\");\n\t}\n\tconst { done: done2 } = await reader.read();\n\tif (!done2) {\n\t\treader.cancel().catch(() => undefined);\n\t\tthrow new Error(\"The stream contained more than one value.\");\n\t}\n\treturn value.value;\n}","import { StringRole, arrayEnd, arrayStart, booleanValue, colon, comma, nullValue, numberValue, objectEnd, objectStart, stringChunk, stringEnd, stringStart, whitespace, type JsonChunk } from \"./types\";\nimport { AbstractTransformStream } from \"./utils\";\n\nenum StateType {\n\tSTART = \"start\",\n\tOBJECT_AFTER_START = \"object_after_start\", OBJECT_AFTER_KEY = \"object_after_key\", OBJECT_AFTER_COLON = \"object_after_colon\", OBJECT_AFTER_VALUE = \"object_after_value\", OBJECT_AFTER_COMMA = \"object_after_comma\",\n\tARRAY_AFTER_START = \"array_after_start\", ARRAY_AFTER_VALUE = \"array_after_value\", ARRAY_AFTER_COMMA = \"array_after_comma\",\n\tBOOLEAN_OR_NULL = \"boolean_or_null\",\n\tNUMBER_MINUS = \"number_minus\", NUMBER_DIGITS = \"number_digits\", NUMBER_POINT = \"number_point\", NUMBER_DECIMAL_DIGITS = \"number_decimal_digits\",\n\tNUMBER_E = \"number_e\", NUMBER_E_PLUSMINUS = \"number_e_plusminus\", NUMBER_E_DIGITS = \"number_e_digits\",\n\tWHITESPACE = \"whitespace\",\n\tSTRING = \"string\", STRING_AFTER_BACKSLASH = \"string_after_backslash\", STRING_AFTER_BACKSLASH_U = \"string_after_backslash_u\",\n\tEND = \"end\"\n};\n\n/** States where the start of a new value (object/array/string/number/boolean/null) is allowed. */\nconst VALUE_START_ALLOWED = [StateType.START, StateType.OBJECT_AFTER_COLON, StateType.ARRAY_AFTER_START, StateType.ARRAY_AFTER_COMMA] as const;\nconst VALUE_START_ALLOWED_MULTI = [...VALUE_START_ALLOWED, StateType.END] as const;\n/** States whree the start of an object key string is allowed. */\nconst KEY_START_ALLOWED = [StateType.OBJECT_AFTER_START, StateType.OBJECT_AFTER_COMMA] as const;\n/** States where a whilespace character is allowed. */\nconst WHITESPACE_ALLOWED = [\n\tStateType.START, StateType.OBJECT_AFTER_START, StateType.OBJECT_AFTER_KEY, StateType.OBJECT_AFTER_COLON, StateType.OBJECT_AFTER_VALUE, StateType.OBJECT_AFTER_COMMA,\n\tStateType.ARRAY_AFTER_START, StateType.ARRAY_AFTER_VALUE, StateType.ARRAY_AFTER_COMMA,\n\tStateType.END\n] as const;\n\ntype AnyState = {\n\ttype: StateType.START | StateType.END\n} | {\n\ttype: (\n\t\t| StateType.OBJECT_AFTER_START | StateType.OBJECT_AFTER_KEY | StateType.OBJECT_AFTER_COLON | StateType.OBJECT_AFTER_VALUE\n\t\t| StateType.OBJECT_AFTER_COMMA | StateType.ARRAY_AFTER_START | StateType.ARRAY_AFTER_VALUE | StateType.ARRAY_AFTER_COMMA\n\t);\n\tparentState: State<typeof VALUE_START_ALLOWED_MULTI[number]>;\n} | {\n\ttype: StateType.BOOLEAN_OR_NULL;\n\trawValue: string;\n\tparentState: State<typeof VALUE_START_ALLOWED_MULTI[number]>;\n} | {\n\ttype: StateType.WHITESPACE;\n\trawValue: string;\n\tparentState: State<typeof WHITESPACE_ALLOWED[number]>;\n} | {\n\ttype: (\n\t\t| StateType.NUMBER_MINUS | StateType.NUMBER_DIGITS | StateType.NUMBER_POINT | StateType.NUMBER_DECIMAL_DIGITS\n\t\t| StateType.NUMBER_E | StateType.NUMBER_E_PLUSMINUS | StateType.NUMBER_E_DIGITS\n\t);\n\trawValue: string;\n\tparentState: State<typeof VALUE_START_ALLOWED_MULTI[number]>;\n} | {\n\ttype: StateType.STRING;\n\tvalue: string;\n\trawValue: string;\n\trole: StringRole;\n\tparentState: State<typeof VALUE_START_ALLOWED_MULTI[number] | typeof KEY_START_ALLOWED[number]>;\n} | {\n\ttype: StateType.STRING_AFTER_BACKSLASH;\n\trawValue: string;\n\tparentState: State<StateType.STRING>;\n} | {\n\ttype: StateType.STRING_AFTER_BACKSLASH_U;\n\t/** The unicode hex code */\n\tvalue: string;\n\trawValue: string;\n\tparentState: State<StateType.STRING>;\n};\n\ntype State<T extends StateType = StateType> = AnyState & { type: T };\n\n/** Type guard to check whether the given state has any of the given types. */\nfunction isState<T extends StateType>(state: State, types: readonly [...T[]]): state is State & { type: T } {\n\treturn (types as ReadonlyArray<StateType>).includes(state.type);\n}\n\n/**\n * Given the state when a value (object/array/string/number/boolean/null) was started, returns the\n * new state after the value was finished.\n */\nfunction getStateAfterValue(stateBeforeValue: State<typeof VALUE_START_ALLOWED_MULTI[number] | typeof KEY_START_ALLOWED[number]>): State {\n\tif (isState(stateBeforeValue, [StateType.START, StateType.END])) {\n\t\treturn { ...stateBeforeValue, type: StateType.END };\n\t} else if (stateBeforeValue.type === StateType.OBJECT_AFTER_COLON) {\n\t\treturn { ...stateBeforeValue, type: StateType.OBJECT_AFTER_VALUE };\n\t} else if (isState(stateBeforeValue, [StateType.ARRAY_AFTER_START, StateType.ARRAY_AFTER_COMMA])) {\n\t\treturn { ...stateBeforeValue, type: StateType.ARRAY_AFTER_VALUE };\n\t} else if (isState(stateBeforeValue, [StateType.OBJECT_AFTER_START, StateType.OBJECT_AFTER_COMMA])) {\n\t\treturn { ...stateBeforeValue, type: StateType.OBJECT_AFTER_KEY };\n\t} else {\n\t\tthrow new Error(`Invalid value state ${stateBeforeValue.type}.`);\n\t}\n}\n\ntype Context = {\n\tchar: string;\n\tposition: number;\n};\n\nexport class UnexpectedCharError extends Error {\n\tconstructor(context: Context) {\n\t\tsuper(`Unexpected character \"${context.char}\" at position ${context.position}.`);\n\t}\n}\n\nexport class PrematureEndError extends Error {\n\tconstructor() {\n\t\tsuper(\"Premature end of JSON stream.\");\n\t}\n}\n\n/**\n * Each character that is possible after a \\ inside a string, mapped to the character that it replaces.\n */\nconst STRING_ESCAPE_CHARS = {\n\t\"\\\"\": \"\\\"\",\n\t\"\\\\\": \"\\\\\",\n\t\"/\": \"/\",\n\t\"b\": \"\\b\",\n\t\"f\": \"\\f\",\n\t\"n\": \"\\n\",\n\t\"r\": \"\\r\",\n\t\"t\": \"\\t\"\n};\n\n/** Whitespace characters allowed between tokens. */\nconst WHITESPACE_CHARS = [\" \", \"\\t\", \"\\n\", \"\\r\"];\n/** Record separator char that is ignored between JSON documents in multi mode. */\nconst RS_CHARS = [\"\\x1e\"];\nconst NUMBER_CHARS = [\"0\", \"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\"];\nconst HEX_NUMBER_CHARS = [...NUMBER_CHARS, \"a\", \"b\", \"c\", \"d\", \"e\", \"f\", \"A\", \"B\", \"C\", \"D\", \"E\", \"F\"];\n\nconst BOOLEAN_OR_NULL = { false: false, true: true, null: null };\nconst BOOLEAN_OR_NULL_FIRST_CHARS = Object.keys(BOOLEAN_OR_NULL).map((k) => k[0]);\nconst BOOLEAN_OR_NULL_CHARS = [...new Set(Object.keys(BOOLEAN_OR_NULL).flatMap((k) => [...k]))];\n\nexport type JsonParserOptions = {\n\t/** If true, the stream is allowed to contain multiple JSON values on the root level */\n\tmulti?: boolean;\n}\n\n/**\n * Parses a JSON string stream into a stream of JsonChunks.\n * Unless multi is true, the JSON string must contain only one JSON value (object/array/string/number/boolean/null)\n * on the root level, otherwise the stream will fail with an error.\n */\nexport class JsonParser extends AbstractTransformStream<string, JsonChunk> {\n\tprotected state: State = { type: StateType.START };\n\tprotected lengthBeforeCurrentChunk = 0;\n\n\tconstructor(protected options: JsonParserOptions = {}) {\n\t\tsuper();\n\t}\n\n\t/**\n\t * Checks whether a token that doesn't have an explicit end character (that is: numbers and whitespaces) has ended, and if\n\t * so, update the state and emit the appropriate chunks.\n\t * @param char The next character on the stream. Is used to check whether the current token ends (for example, a number is ended\n\t *     by a non-number character). If undefined, the stream is assumed to have ended, so the current token must always end.\n\t */\n\tprotected checkValueEnd(controller: TransformStreamDefaultController<JsonChunk>, char: string | undefined): void {\n\t\tif (this.state.type === StateType.WHITESPACE && (char == null || !WHITESPACE_CHARS.includes(char))) {\n\t\t\tif (this.state.rawValue.length > 0) {\n\t\t\t\tcontroller.enqueue(whitespace(this.state.rawValue));\n\t\t\t}\n\t\t\tthis.state = this.state.parentState;\n\t\t}\n\n\t\tif (\n\t\t\t(this.state.type === StateType.NUMBER_DIGITS && (char == null || ![...NUMBER_CHARS, \".\", \"e\", \"E\"].includes(char)))\n\t\t\t|| (this.state.type === StateType.NUMBER_DECIMAL_DIGITS && (char == null || ![...NUMBER_CHARS, \"e\", \"E\"].includes(char)))\n\t\t\t|| (this.state.type === StateType.NUMBER_E_DIGITS && (char == null || !NUMBER_CHARS.includes(char)))\n\t\t) {\n\t\t\tcontroller.enqueue(numberValue(Number(this.state.rawValue), this.state.rawValue));\n\t\t\tthis.state = getStateAfterValue(this.state.parentState);\n\t\t}\n\t}\n\n\t/**\n\t * Handle a single character piped into the stream.\n\t */\n\tprotected handleChar(controller: TransformStreamDefaultController<JsonChunk>, context: Context): void {\n\t\tconst char = context.char;\n\n\t\t// End chunks that don't have an explicit end char\n\t\tthis.checkValueEnd(controller, char);\n\n\n\t\t// Objects\n\n\t\tif (char === \"{\" && isState(this.state, this.options.multi ? VALUE_START_ALLOWED_MULTI : VALUE_START_ALLOWED)) {\n\t\t\tcontroller.enqueue(objectStart(char));\n\t\t\tthis.state = {\n\t\t\t\ttype: StateType.OBJECT_AFTER_START,\n\t\t\t\tparentState: this.state\n\t\t\t};\n\t\t\treturn;\n\t\t}\n\n\t\tif (char === \"}\" && isState(this.state, [StateType.OBJECT_AFTER_START, StateType.OBJECT_AFTER_VALUE])) {\n\t\t\tcontroller.enqueue(objectEnd(char));\n\t\t\tthis.state = getStateAfterValue(this.state.parentState);\n\t\t\treturn;\n\t\t}\n\n\t\tif (char === \":\" && isState(this.state, [StateType.OBJECT_AFTER_KEY])) {\n\t\t\tcontroller.enqueue(colon(char));\n\t\t\tthis.state = {\n\t\t\t\ttype: StateType.OBJECT_AFTER_COLON,\n\t\t\t\tparentState: this.state.parentState\n\t\t\t};\n\t\t\treturn;\n\t\t}\n\n\t\tif (char === \",\" && isState(this.state, [StateType.OBJECT_AFTER_VALUE])) {\n\t\t\tcontroller.enqueue(comma(char));\n\t\t\tthis.state = {\n\t\t\t\ttype: StateType.OBJECT_AFTER_COMMA,\n\t\t\t\tparentState: this.state.parentState\n\t\t\t};\n\t\t\treturn;\n\t\t}\n\n\n\t\t// Arrays\n\n\t\tif (char === \"[\" && isState(this.state, this.options.multi ? VALUE_START_ALLOWED_MULTI : VALUE_START_ALLOWED)) {\n\t\t\tcontroller.enqueue(arrayStart(char));\n\t\t\tthis.state = {\n\t\t\t\ttype: StateType.ARRAY_AFTER_START,\n\t\t\t\tparentState: this.state\n\t\t\t};\n\t\t\treturn;\n\t\t}\n\n\t\tif (char === \"]\" && isState(this.state, [StateType.ARRAY_AFTER_START, StateType.ARRAY_AFTER_VALUE])) {\n\t\t\tcontroller.enqueue(arrayEnd(char));\n\t\t\tthis.state = getStateAfterValue(this.state.parentState);\n\t\t\treturn;\n\t\t}\n\n\t\tif (char === \",\" && isState(this.state, [StateType.ARRAY_AFTER_VALUE])) {\n\t\t\tcontroller.enqueue(comma(char));\n\t\t\tthis.state = {\n\t\t\t\ttype: StateType.ARRAY_AFTER_COMMA,\n\t\t\t\tparentState: this.state.parentState\n\t\t\t};\n\t\t\treturn;\n\t\t}\n\n\n\t\t// Boolean/null\n\n\t\tif (BOOLEAN_OR_NULL_FIRST_CHARS.includes(char) && isState(this.state, this.options.multi ? VALUE_START_ALLOWED_MULTI : VALUE_START_ALLOWED)) {\n\t\t\tthis.state = {\n\t\t\t\ttype: StateType.BOOLEAN_OR_NULL,\n\t\t\t\trawValue: char,\n\t\t\t\tparentState: this.state\n\t\t\t};\n\t\t\treturn;\n\t\t}\n\n\t\tif (BOOLEAN_OR_NULL_CHARS.includes(char) && this.state.type === StateType.BOOLEAN_OR_NULL) {\n\t\t\tconst rawValue = `${this.state.rawValue}${char}`;\n\t\t\tfor (const [key, value] of Object.entries(BOOLEAN_OR_NULL)) {\n\t\t\t\tif (rawValue === key) {\n\t\t\t\t\tif (typeof value === \"boolean\") {\n\t\t\t\t\t\tcontroller.enqueue(booleanValue(value, rawValue));\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcontroller.enqueue(nullValue(rawValue));\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.state = getStateAfterValue(this.state.parentState);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (key.startsWith(rawValue)) {\n\t\t\t\t\tthis.state.rawValue = rawValue;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\n\t\t// Strings\n\n\t\tif (char === \"\\\"\") {\n\t\t\tif (isState(this.state, this.options.multi ? VALUE_START_ALLOWED_MULTI : VALUE_START_ALLOWED)) {\n\t\t\t\tcontroller.enqueue(stringStart(StringRole.VALUE, char));\n\t\t\t\tthis.state = {\n\t\t\t\t\ttype: StateType.STRING,\n\t\t\t\t\tvalue: \"\",\n\t\t\t\t\trawValue: \"\",\n\t\t\t\t\trole: StringRole.VALUE,\n\t\t\t\t\tparentState: this.state\n\t\t\t\t};\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (isState(this.state, KEY_START_ALLOWED)) {\n\t\t\t\tcontroller.enqueue(stringStart(StringRole.KEY, char));\n\t\t\t\tthis.state = {\n\t\t\t\t\ttype: StateType.STRING,\n\t\t\t\t\tvalue: \"\",\n\t\t\t\t\trawValue: \"\",\n\t\t\t\t\trole: StringRole.KEY,\n\t\t\t\t\tparentState: this.state\n\t\t\t\t};\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (isState(this.state, [StateType.STRING])) {\n\t\t\t\tif (this.state.rawValue.length > 0) {\n\t\t\t\t\tcontroller.enqueue(stringChunk(this.state.value, this.state.role, this.state.rawValue));\n\t\t\t\t}\n\n\t\t\t\tcontroller.enqueue(stringEnd(this.state.role, char));\n\t\t\t\tthis.state = getStateAfterValue(this.state.parentState);\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\tif (char === \"\\\\\" && isState(this.state, [StateType.STRING])) {\n\t\t\tthis.state = {\n\t\t\t\ttype: StateType.STRING_AFTER_BACKSLASH,\n\t\t\t\trawValue: char,\n\t\t\t\tparentState: this.state\n\t\t\t};\n\t\t\treturn;\n\t\t}\n\n\t\tif (Object.prototype.hasOwnProperty.call(STRING_ESCAPE_CHARS, char) && isState(this.state, [StateType.STRING_AFTER_BACKSLASH])) {\n\t\t\tthis.state = {\n\t\t\t\t...this.state.parentState,\n\t\t\t\tvalue: `${this.state.parentState.value}${STRING_ESCAPE_CHARS[char as keyof typeof STRING_ESCAPE_CHARS]}`,\n\t\t\t\trawValue: `${this.state.parentState.rawValue}${this.state.rawValue}${char}`\n\t\t\t};\n\t\t\treturn;\n\t\t}\n\n\t\tif (char === \"u\" && isState(this.state, [StateType.STRING_AFTER_BACKSLASH])) {\n\t\t\tthis.state = {\n\t\t\t\ttype: StateType.STRING_AFTER_BACKSLASH_U,\n\t\t\t\tvalue: \"\",\n\t\t\t\trawValue: `${this.state.rawValue}${char}`,\n\t\t\t\tparentState: this.state.parentState\n\t\t\t};\n\t\t\treturn;\n\t\t}\n\n\t\tif (HEX_NUMBER_CHARS.includes(char) && isState(this.state, [StateType.STRING_AFTER_BACKSLASH_U])) {\n\t\t\tthis.state.value += char;\n\t\t\tthis.state.rawValue += char;\n\t\t\tif (this.state.value.length === 4) {\n\t\t\t\tthis.state = {\n\t\t\t\t\t...this.state.parentState,\n\t\t\t\t\tvalue: `${this.state.parentState.value}${String.fromCharCode(parseInt(this.state.value, 16))}`,\n\t\t\t\t\trawValue: `${this.state.parentState.rawValue}${this.state.rawValue}`\n\t\t\t\t};\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tif (char.charCodeAt(0) >= 0x20 && isState(this.state, [StateType.STRING])) {\n\t\t\tthis.state.value += char;\n\t\t\tthis.state.rawValue += char;\n\t\t\treturn;\n\t\t}\n\n\n\t\t// Numbers\n\n\t\tif (char === \"-\" && isState(this.state, this.options.multi ? VALUE_START_ALLOWED_MULTI : VALUE_START_ALLOWED)) {\n\t\t\tthis.state = {\n\t\t\t\ttype: StateType.NUMBER_MINUS,\n\t\t\t\trawValue: char,\n\t\t\t\tparentState: this.state\n\t\t\t};\n\t\t\treturn;\n\t\t}\n\n\t\tif ((char === \"-\" || char === \"+\") && this.state.type === StateType.NUMBER_E) {\n\t\t\tthis.state = {\n\t\t\t\ttype: StateType.NUMBER_E_PLUSMINUS,\n\t\t\t\trawValue: `${this.state.rawValue}${char}`,\n\t\t\t\tparentState: this.state.parentState\n\t\t\t};\n\t\t\treturn;\n\t\t}\n\n\t\tif (char === \".\" && this.state.type === StateType.NUMBER_DIGITS) {\n\t\t\tthis.state = {\n\t\t\t\ttype: StateType.NUMBER_POINT,\n\t\t\t\trawValue: `${this.state.rawValue}${char}`,\n\t\t\t\tparentState: this.state.parentState\n\t\t\t};\n\t\t\treturn;\n\t\t}\n\n\t\tif ((char === \"e\" || char === \"E\") && isState(this.state, [StateType.NUMBER_DIGITS, StateType.NUMBER_DECIMAL_DIGITS])) {\n\t\t\tthis.state = {\n\t\t\t\ttype: StateType.NUMBER_E,\n\t\t\t\trawValue: `${this.state.rawValue}${char}`,\n\t\t\t\tparentState: this.state.parentState\n\t\t\t};\n\t\t\treturn;\n\t\t}\n\n\t\tif (NUMBER_CHARS.includes(char)) {\n\t\t\tif (this.state.type === StateType.NUMBER_MINUS) {\n\t\t\t\tthis.state = {\n\t\t\t\t\ttype: StateType.NUMBER_DIGITS,\n\t\t\t\t\trawValue: `${this.state.rawValue}${char}`,\n\t\t\t\t\tparentState: this.state.parentState\n\t\t\t\t};\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (this.state.type === StateType.NUMBER_POINT) {\n\t\t\t\tthis.state = {\n\t\t\t\t\ttype: StateType.NUMBER_DECIMAL_DIGITS,\n\t\t\t\t\trawValue: `${this.state.rawValue}${char}`,\n\t\t\t\t\tparentState: this.state.parentState\n\t\t\t\t};\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (isState(this.state, [StateType.NUMBER_E, StateType.NUMBER_E_PLUSMINUS])) {\n\t\t\t\tthis.state = {\n\t\t\t\t\ttype: StateType.NUMBER_E_DIGITS,\n\t\t\t\t\trawValue: `${this.state.rawValue}${char}`,\n\t\t\t\t\tparentState: this.state.parentState\n\t\t\t\t};\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (isState(this.state, [StateType.NUMBER_DIGITS, StateType.NUMBER_DECIMAL_DIGITS, StateType.NUMBER_E_DIGITS])) {\n\t\t\t\tthis.state.rawValue += char;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (isState(this.state, this.options.multi ? VALUE_START_ALLOWED_MULTI : VALUE_START_ALLOWED)) {\n\t\t\t\tthis.state = {\n\t\t\t\t\ttype: StateType.NUMBER_DIGITS,\n\t\t\t\t\trawValue: char,\n\t\t\t\t\tparentState: this.state\n\t\t\t\t};\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\n\t\t// Whitespaces\n\n\t\tif (WHITESPACE_CHARS.includes(char) || (this.options.multi && isState(this.state, [StateType.START, StateType.END]) && RS_CHARS.includes(char))) {\n\t\t\tif (this.state.type === StateType.WHITESPACE) {\n\t\t\t\tthis.state.rawValue += char;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (isState(this.state, WHITESPACE_ALLOWED)) {\n\t\t\t\tthis.state = {\n\t\t\t\t\ttype: StateType.WHITESPACE,\n\t\t\t\t\trawValue: char,\n\t\t\t\t\tparentState: this.state\n\t\t\t\t};\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\n\t\tthrow new UnexpectedCharError(context);\n\n\t}\n\n\t/**\n\t * Called at the end of the transformation of a chunk. Should flush partial values where applicable,\n\t * in particular and incomplete strings or whitespaces can be emitted.\n\t */\n\tprotected handleChunkEnd(controller: TransformStreamDefaultController<JsonChunk>): void {\n\t\tconst stringState = (\n\t\t\tthis.state.type === StateType.STRING ? this.state :\n\t\t\tisState(this.state, [StateType.STRING_AFTER_BACKSLASH, StateType.STRING_AFTER_BACKSLASH_U]) ? this.state.parentState :\n\t\t\tundefined\n\t\t);\n\t\tif (stringState) {\n\t\t\tcontroller.enqueue(stringChunk(stringState.value, stringState.role, stringState.rawValue));\n\t\t\tstringState.rawValue = \"\";\n\t\t\tstringState.value = \"\";\n\t\t}\n\n\t\tif (this.state.type === StateType.WHITESPACE && this.state.rawValue.length > 0) {\n\t\t\tcontroller.enqueue(whitespace(this.state.rawValue));\n\t\t\tthis.state.rawValue = \"\";\n\t\t}\n\t}\n\n\t/**\n\t * Transforms an incoming chunk.\n\t */\n\tprotected override transform(chunk: string, controller: TransformStreamDefaultController<JsonChunk>): void {\n\t\tfor (let i = 0; i < chunk.length; i++) {\n\t\t\tthis.handleChar(controller, { char: chunk[i], position: this.lengthBeforeCurrentChunk + i });\n\t\t}\n\t\tthis.lengthBeforeCurrentChunk += chunk.length;\n\n\t\tthis.handleChunkEnd(controller);\n\t}\n\n\t/**\n\t * Called when the end of the incoming stream is reached. Checks that a complete value has been emitted.\n\t */\n\tprotected override flush(controller: TransformStreamDefaultController<JsonChunk>): void {\n\t\tthis.checkValueEnd(controller, undefined);\n\n\t\tif (this.state.type !== StateType.END && (!this.options.multi || this.state.type !== StateType.START)) {\n\t\t\tthrow new PrematureEndError();\n\t\t}\n\n\t\tcontroller.terminate();\n\t}\n}","import { JsonParser } from \"./json-parser\";\nimport { StringRole, arrayEnd, arrayStart, booleanValue, colon, comma, nullValue, numberValue, objectEnd, objectStart, stringChunk, stringEnd, stringStart, whitespace, type JsonChunk } from \"./types\";\nimport { AbstractTransformStream, iterableToStream, streamToIterable, stringToStream } from \"./utils\";\n\ntype AnyIterable<T> = Iterable<T> | AsyncIterable<T> | ReadableStream<T>;\n\nfunction normalizeStream<T, S extends symbol>(iterable: AnyIterable<T>, symbol: S): ReadableStream<T> & { [K in S]: true } {\n\tif (Symbol.asyncIterator in iterable || Symbol.iterator in iterable) {\n\t\treturn Object.assign(iterableToStream(iterable), { [symbol]: true as const });\n\t} else {\n\t\treturn Object.assign(Object.create(iterable), { [symbol]: true as const });\n\t}\n}\n\nconst stringStreamSymbol = Symbol(\"stringStream\");\nexport type StringStream = ReadableStream<string> & { [stringStreamSymbol]: true };\nexport function stringStream(stream: AnyIterable<string>): StringStream {\n\treturn normalizeStream(stream, stringStreamSymbol);\n}\nexport function isStringStream(value: any): value is StringStream {\n\treturn value && typeof value === \"object\" && !!value[stringStreamSymbol];\n}\n\nconst objectStreamSymbol = Symbol(\"objectStream\");\nexport type ObjectStream<V> = ReadableStream<[key: string | StringStream, value: V]> & { [objectStreamSymbol]: true };\nexport function objectStream<T>(obj: AnyIterable<[key: string | StringStream, value: T]>): ObjectStream<T> {\n\treturn normalizeStream(obj, objectStreamSymbol);\n}\nexport function isObjectStream(value: any): value is ObjectStream<any> {\n\treturn value && typeof value === \"object\" && !!value[objectStreamSymbol];\n}\n\nconst arrayStreamSymbol = Symbol(\"arrayStream\");\nexport type ArrayStream<V> = ReadableStream<V> & { [arrayStreamSymbol]: true };\nexport function arrayStream<T>(obj: AnyIterable<T>): ArrayStream<T> {\n\treturn normalizeStream(obj, arrayStreamSymbol);\n}\nexport function isArrayStream(value: any): value is ArrayStream<any> {\n\treturn value && typeof value === \"object\" && !!value[arrayStreamSymbol];\n}\n\n\ntype SyncOrAsync<T> = T | Promise<T> | (() => T | Promise<T>);\nexport type SerializableJsonValue = SyncOrAsync<\n\t| { [key: string | number]: SerializableJsonValue }\n\t| (ReadableStream<[key: string | StringStream, value: SerializableJsonValue]> & { [objectStreamSymbol]: true }) // Cannot use ObjectStream<StreamedJsonValue> due to circular reference\n\t| Array<SerializableJsonValue>\n\t| ReadableStream<SerializableJsonValue> & { [arrayStreamSymbol]: true } // Cannot use ArrayStream<StreamedJsonValue> due to circular reference\n\t| string\n\t| StringStream\n\t| number | boolean | null\n\t| undefined\n>;\n\nfunction normalizeSpace(space: string | number | undefined): string {\n\tif (typeof space === \"number\") {\n\t\treturn \" \".repeat(space);\n\t} else if (typeof space === \"string\") {\n\t\treturn space;\n\t} else {\n\t\treturn \"\";\n\t}\n}\n\nasync function* serializeJson(value: SerializableJsonValue, space?: string | number, spacePrefix = \"\", key = \"\"): AsyncIterable<JsonChunk> {\n\tconst normalizedSpace = normalizeSpace(space);\n\tlet val = await (typeof value === \"function\" && !(\"toJSON\" in value) ? value() : value);\n\tval = (val && \"toJSON\" in Object(val)) ? Object(val).toJSON(key) : val;\n\n\tif (typeof val === \"boolean\" || (typeof val === \"object\" && Object.prototype.toString.call(val) === \"[object Boolean]\")) {\n\t\tyield booleanValue(Boolean(val));\n\t} else if (typeof val === \"number\" || (typeof val === \"object\" && Object.prototype.toString.call(val) === \"[object Number]\")) {\n\t\tconst num = Number(val);\n\t\tif (isFinite(num)) {\n\t\t\tyield numberValue(num);\n\t\t} else {\n\t\t\tyield nullValue();\n\t\t}\n\t} else if (typeof val === \"bigint\" || (typeof val === \"object\" && Object.prototype.toString.call(val) === \"[object BigInt]\")) {\n\t\tyield numberValue(Number(val), String(val));\n\t} else if (typeof val === \"string\" || (typeof val === \"object\" && Object.prototype.toString.call(val) === \"[object String]\") || isStringStream(val)) {\n\t\tyield stringStart();\n\t\tfor await (const chunk of isStringStream(val) ? streamToIterable(val) : [String(val)]) {\n\t\t\tyield stringChunk(chunk);\n\t\t}\n\t\tyield stringEnd();\n\t} else if (\"isRawJSON\" in JSON && (JSON as any).isRawJSON(val)) {\n\t\tfor await (const chunk of streamToIterable(stringToStream((val as any).rawJSON).pipeThrough(new JsonParser()))) {\n\t\t\tyield chunk;\n\t\t}\n\t} else if (Array.isArray(val) || isArrayStream(val)) {\n\t\tyield arrayStart();\n\n\t\tlet i = 0;\n\t\tfor await (const v of isArrayStream(val) ? streamToIterable(val) : val) {\n\t\t\tif (i > 0) {\n\t\t\t\tyield comma();\n\t\t\t}\n\n\t\t\tif (normalizedSpace) {\n\t\t\t\tyield whitespace(`\\n${spacePrefix}${normalizedSpace}`);\n\t\t\t}\n\n\t\t\tfor await (const chunk of serializeJson(v, space, `${spacePrefix}${normalizedSpace}`, `${i}`)) {\n\t\t\t\tyield chunk;\n\t\t\t}\n\n\t\t\ti++;\n\t\t}\n\n\t\tif (i > 0 && normalizedSpace) {\n\t\t\tyield whitespace(`\\n${spacePrefix}`);\n\t\t}\n\n\t\tyield arrayEnd();\n\t} else if (typeof val === \"object\" && val) {\n\t\tyield objectStart();\n\n\t\tlet first = true;\n\t\tfor await (const [k, rawV] of isObjectStream(val) ? streamToIterable(val) : Object.entries(val)) {\n\t\t\tconst v = await (typeof rawV === \"function\" ? rawV() : rawV);\n\t\t\tif (v === undefined || typeof k === \"symbol\" || typeof v === \"symbol\") {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (first) {\n\t\t\t\tfirst = false;\n\t\t\t} else {\n\t\t\t\tyield comma();\n\t\t\t}\n\n\t\t\tif (normalizedSpace) {\n\t\t\t\tyield whitespace(`\\n${spacePrefix}${normalizedSpace}`);\n\t\t\t}\n\n\t\t\tyield stringStart(StringRole.KEY);\n\t\t\tfor await (const chunk of isStringStream(k) ? streamToIterable(k) : [`${k}`]) {\n\t\t\t\tyield stringChunk(chunk, StringRole.KEY);\n\t\t\t}\n\t\t\tyield stringEnd(StringRole.KEY);\n\t\t\tyield colon();\n\n\t\t\tif (normalizedSpace) {\n\t\t\t\tyield whitespace(\" \");\n\t\t\t}\n\n\t\t\tfor await (const chunk of serializeJson(v, space, `${spacePrefix}${normalizedSpace}`, isStringStream(k) ? \"\" : k)) {\n\t\t\t\tyield chunk;\n\t\t\t}\n\t\t}\n\n\t\tif (!first && normalizedSpace) {\n\t\t\tyield whitespace(`\\n${spacePrefix}`);\n\t\t}\n\n\t\tyield objectEnd();\n\t} else {\n\t\tyield nullValue();\n\t}\n}\n\nexport type JsonSerializerOptions = {\n\t/** White space characters to insert before the first emitted root value. Not emitted if no values are emitted. */\n\tbeforeFirst?: string;\n\t/** White space characters to insert before each but the first emitted root value. Defaults to a newline (\\n). */\n\tdelimiter?: string;\n\t/** White space characters to insert after the last emitted root value. Not emitted if no values are emitted. */\n\tafterLast?: string;\n};\n\n/**\n * Converts any JSON-stringifiable JavaScript values into a stream of JsonChunks.\n */\nexport class JsonSerializer extends AbstractTransformStream<SerializableJsonValue, JsonChunk> {\n\tprotected first = true;\n\n\tconstructor(protected space?: string | number, protected options?: JsonSerializerOptions) {\n\t\tsuper();\n\t}\n\n\toverride async transform(value: SerializableJsonValue, controller: TransformStreamDefaultController<JsonChunk>): Promise<void> {\n\t\tif (this.first) {\n\t\t\tif (this.options?.beforeFirst) {\n\t\t\t\tcontroller.enqueue(whitespace(this.options.beforeFirst));\n\t\t\t}\n\t\t\tthis.first = false;\n\t\t} else if (this.options?.delimiter !== \"\") {\n\t\t\tcontroller.enqueue(whitespace(this.options?.delimiter ?? \"\\n\"));\n\t\t}\n\n\t\tfor await (const chunk of serializeJson(value, this.space)) {\n\t\t\tcontroller.enqueue(chunk);\n\t\t}\n\t}\n\n\tprotected override flush(controller: TransformStreamDefaultController<JsonChunk>): void | Promise<void> {\n\t\tif (!this.first && this.options?.afterLast) {\n\t\t\tcontroller.enqueue(whitespace(this.options.afterLast));\n\t\t}\n\n\t\tcontroller.terminate();\n\t}\n}\n/**\n * Converts any single JSON-stringifiable JavaScript value into a stream of JsonChunks.\n */\nexport function serializeJsonValue(value: SerializableJsonValue, space?: string | number): ReadableStream<JsonChunk> {\n\tconst serializer = new JsonSerializer(space);\n\tconst writer = serializer.writable.getWriter();\n\twriter.write(value).catch(() => undefined);\n\twriter.close().catch(() => undefined);\n\treturn serializer.readable;\n}","import type { JsonChunk } from \"./types\";\nimport { AbstractTransformStream } from \"./utils\";\n\n/**\n * Converts a stream of JsonChunks into a JSON string stream.\n */\nexport class JsonStringifier extends AbstractTransformStream<JsonChunk | { rawValue: string }, string> {\n\tconstructor() {\n\t\tsuper();\n\t}\n\n\tprotected override transform(chunk: JsonChunk | { rawValue: string }, controller: TransformStreamDefaultController<string>): void {\n\t\tcontroller.enqueue(chunk.rawValue);\n\t}\n\n\tprotected override flush(controller: TransformStreamDefaultController<string>): void {\n\t\tcontroller.terminate();\n\t}\n}","import { JsonChunkType, StringRole, type JsonChunk } from \"./types\";\nimport { AbstractTransformStream } from \"./utils\";\n\n/**\n * An array that describes the chain of object and array keys that the current value is located under.\n * String values represent object keys, while numbers represent array indexes (starting at 0).\n * The root value’s path is an empty array.\n *\n * For objects, any chunks between the colon and the comma (or end of object) will have the property\n * key in the path, while other chunks (such as the object start/end and the key string start/chunk/end)\n * will have the path of the object itself.\n * For arrays, any chunks in between the array start and end except the comma will have the array index\n * in the path, while other chunks (such as the array start/end and the comma) will have the path of\n * the array itself.\n */\nexport type JsonPath = Array<string | number>;\n\nexport type JsonChunkWithPath = JsonChunk & {\n\tpath: JsonPath;\n};\n\n/**\n * Adds a \"path\" property to all JsonChunks passed through it that indicates the path of object property keys\n * and array item indexes where the chunk is located.\n */\nexport class JsonPathDetector extends AbstractTransformStream<JsonChunk, JsonChunkWithPath> {\n\tprotected stack: Array<{\n\t\ttype: \"object\";\n\t\t/** pending: still receiving key STRING_CHUNKs; next: next chunk will transition state to active; active: path applies to all current chunks */\n\t\tstate: \"pending\" | \"next\" | \"active\";\n\t\tkey: string;\n\t} | {\n\t\ttype: \"array\";\n\t\t/** next: next chunk will transition state to active; active: path applies to current chunks */\n\t\tstate: \"next\" | \"active\";\n\t\tkey: number;\n\t}> = [];\n\tprotected path: Array<string | number> = [];\n\n\tconstructor() {\n\t\tsuper();\n\t}\n\n\tprotected override transform(chunk: JsonChunk, controller: TransformStreamDefaultController<JsonChunkWithPath>): void {\n\t\tif (this.stack[this.stack.length - 1]?.state === \"next\") {\n\t\t\tthis.stack[this.stack.length - 1].state = \"active\";\n\t\t\tthis.path.push(this.stack[this.stack.length - 1].key);\n\t\t}\n\n\t\tif (chunk.type === JsonChunkType.OBJECT_START) {\n\t\t\tthis.stack.push({ type: \"object\", state: \"pending\", key: \"\" });\n\t\t} else if (chunk.type === JsonChunkType.ARRAY_START) {\n\t\t\tthis.stack.push({ type: \"array\", state: \"next\", key: 0 });\n\t\t} else if (chunk.type === JsonChunkType.OBJECT_END || chunk.type === JsonChunkType.ARRAY_END) {\n\t\t\tif (this.stack.pop()?.state !== \"pending\") {\n\t\t\t\tthis.path.pop();\n\t\t\t}\n\t\t} else {\n\t\t\tconst current = this.stack[this.stack.length - 1];\n\t\t\tif (current?.type === \"object\") {\n\t\t\t\tif (chunk.type === JsonChunkType.STRING_CHUNK && chunk.role === StringRole.KEY) {\n\t\t\t\t\tcurrent.key += chunk.value;\n\t\t\t\t} else if (chunk.type === JsonChunkType.COLON) {\n\t\t\t\t\tcurrent.state = \"next\";\n\t\t\t\t} else if (chunk.type === JsonChunkType.COMMA) {\n\t\t\t\t\tthis.path.pop();\n\t\t\t\t\tcurrent.state = \"pending\";\n\t\t\t\t\tcurrent.key = \"\";\n\t\t\t\t}\n\t\t\t} else if (current?.type === \"array\") {\n\t\t\t\tif (chunk.type === JsonChunkType.COMMA) {\n\t\t\t\t\tcurrent.state = \"next\";\n\t\t\t\t\tcurrent.key++;\n\t\t\t\t\tthis.path.pop();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tcontroller.enqueue({ ...chunk, path: [...this.path] });\n\t}\n}","import type { JsonChunkWithPath, JsonPath } from \"./json-path-detector\";\nimport { AbstractTransformStream, arrayStartsWith } from \"./utils\";\n\n/**\n * A selector that can be set for a PathSelector stream.\n * If this is an array, the path has to match the items in the array. Undefined items in the array match any key in the path. Arrays\n * in the array match any of their values.\n * If this is a function, it is called with the path and should return true if the path matches the selector.\n */\nexport type JsonPathSelectorExpression = (\n\t| Array<Array<string | number> | string | number | undefined>\n\t| ((path: JsonPath) => boolean)\n);\n\nexport function matchesJsonPathSelector(path: JsonPath, selector: JsonPathSelectorExpression): boolean {\n\tif (typeof selector === \"function\") {\n\t\treturn selector(path);\n\t} else {\n\t\treturn path.length === selector.length && selector.every((v, i) => {\n\t\t\tif (v === undefined) {\n\t\t\t\treturn true;\n\t\t\t} else if (Array.isArray(v)) {\n\t\t\t\treturn v.includes(path[i]);\n\t\t\t} else {\n\t\t\t\treturn path[i] === v;\n\t\t\t}\n\t\t});\n\t}\n}\n\n/**\n * Takes a JsonChunkWithPath stream as emitted by JsonPathDetector and forwards only those chunks that match the specified selector.\n */\nexport class JsonPathSelector extends AbstractTransformStream<JsonChunkWithPath, JsonChunkWithPath> {\n\tprotected currentPathPrefix: Array<string | number> | undefined = undefined;\n\n\tconstructor(protected selector: JsonPathSelectorExpression) {\n\t\tsuper();\n\t}\n\n\tprotected override transform(chunk: JsonChunkWithPath, controller: TransformStreamDefaultController<JsonChunkWithPath>): void {\n\t\tif (this.currentPathPrefix && arrayStartsWith(chunk.path, this.currentPathPrefix)) {\n\t\t\tcontroller.enqueue(chunk);\n\t\t} else if (matchesJsonPathSelector(chunk.path, this.selector)) {\n\t\t\tthis.currentPathPrefix = chunk.path;\n\t\t\tcontroller.enqueue(chunk);\n\t\t} else {\n\t\t\tthis.currentPathPrefix = undefined;\n\t\t}\n\t}\n\n\tprotected override flush(controller: TransformStreamDefaultController<JsonChunkWithPath>): void {\n\t\tcontroller.terminate();\n\t}\n}","/**\n * Transforms a ReadableStream of chunks into a ReadableStream of ReadableStreams of chunks\n */\nexport class StreamSplitter<I, P extends Record<any, any> = {}> extends TransformStream<I, ReadableStream<I> & P> {\n\tprotected lastChunkIdx: number | undefined = undefined;\n\n\tprotected nestedStreams: Record<number, ReadableStream<I> & P> = {};\n\tprotected currentNestedStream: (ReadableStream<I> & P) | undefined = undefined;\n\n\tprotected nestedWriters: Record<number, WritableStreamDefaultWriter<I>> = {};\n\tprotected currentWriter: WritableStreamDefaultWriter<I> | undefined = undefined;\n\n\tconstructor(protected options: {\n\t\t/**\n\t\t * When a new nested readable stream is created, the properties returned by this function are added to the stream\n\t\t * object. The provided chunk parameter contains the first chunk that will be emitted on the nested stream.\n\t\t */\n\t\tgetNestedStreamProperties(chunk: I): P;\n\n\t\t/**\n\t\t * Is called for each chunk with the currently active nested stream (containing the properties created by\n\t\t * getNestedStreamProperties). If this returns false, the current nested stream is closed and a new nested\n\t\t * stream is started, with the current chunk being the first one emitted.\n\t\t * If not defined, getNestedStreamProperties() is called for each chunk and a new nested stream is started\n\t\t * whenever its result changes (compared by a shallow equality check, checking for strict equality of all\n\t\t * the object properties).\n\t\t */\n\t\tbelongsToNestedStream?: (chunk: I, stream: ReadableStream<I> & P) => boolean;\n\t}) {\n\t\tsuper({});\n\n\t\tlet chunkIdx = 0;\n\t\tconst [mainInput, nestedInput] = (this.readable as any as ReadableStream<I>).pipeThrough(new TransformStream({\n\t\t\ttransform: (chunk, controller) => {\n\t\t\t\tcontroller.enqueue([chunkIdx++, chunk]);\n\t\t\t}\n\t\t})).tee();\n\n\t\tconst main = new TransformStream<[number, I], ReadableStream<I> & P>({\n\t\t\ttransform: ([chunkIdx, chunk], controller) => this.transformMain([chunkIdx, chunk], controller)\n\t\t});\n\t\tmain.readable.tee = function(this: ReadableStream<ReadableStream<I> & P>): [ReadableStream<ReadableStream<I> & P>, ReadableStream<ReadableStream<I> & P>] {\n\t\t\treturn teeNestedStream(this);\n\t\t};\n\t\tObject.defineProperty(this, \"readable\", { get: () => main.readable, configurable: true });\n\t\tmainInput.pipeTo(main.writable).catch(() => undefined);\n\n\t\tconst nested = new WritableStream<[number, I]>({\n\t\t\twrite: ([chunkIdx, chunk], controller) => this.handleNestedChunk([chunkIdx, chunk]),\n\t\t\tclose: () => this.handleNestedClose(),\n\t\t\tabort: (reason) => this.handleNestedAbort(reason)\n\t\t});\n\t\tnestedInput.pipeTo(nested).catch(() => undefined);\n\t}\n\n\tprotected transformMain([chunkIdx, chunk]: [number, I], controller: TransformStreamDefaultController<ReadableStream<I> & P>): void {\n\t\tthis.handleChunk([chunkIdx, chunk]);\n\n\t\tif (this.nestedStreams[chunkIdx]) {\n\t\t\tcontroller.enqueue(this.nestedStreams[chunkIdx]);\n\t\t\tdelete this.nestedStreams[chunkIdx];\n\t\t}\n\t}\n\n\tprotected async handleNestedChunk([chunkIdx, chunk]: [number, I]): Promise<void> {\n\t\tthis.handleChunk([chunkIdx, chunk]);\n\n\t\tif (this.nestedWriters[chunkIdx]) {\n\t\t\tif (this.currentWriter) {\n\t\t\t\ttry {\n\t\t\t\t\tawait this.currentWriter.close();\n\t\t\t\t} catch {\n\t\t\t\t\t// Current nested stream was canceled\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis.currentWriter = this.nestedWriters[chunkIdx];\n\t\t\tdelete this.nestedWriters[chunkIdx];\n\t\t}\n\n\t\tif (this.currentWriter) {\n\t\t\ttry {\n\t\t\t\tawait this.currentWriter.write(chunk);\n\t\t\t} catch (err) {\n\t\t\t\t// Current nested stream was canceled\n\t\t\t}\n\t\t}\n\t}\n\n\tprotected async handleNestedClose(): Promise<void> {\n\t\tawait Promise.all([\n\t\t\t...Object.values(this.nestedWriters),\n\t\t\t...this.currentWriter ? [this.currentWriter] : []\n\t\t].map((w) => w.close()));\n\t}\n\n\tprotected async handleNestedAbort(reason: any): Promise<void> {\n\t\tawait Promise.all([\n\t\t\t...Object.values(this.nestedWriters),\n\t\t\t...this.currentWriter ? [this.currentWriter] : []\n\t\t].map((w) => w.abort(reason)));\n\t}\n\n\tprotected handleChunk([chunkIdx, chunk]: [number, I]): void {\n\t\tif (this.lastChunkIdx != null && chunkIdx <= this.lastChunkIdx) {\n\t\t\t// Chunk already handled\n\t\t\treturn;\n\t\t}\n\n\t\tif (!this.currentNestedStream || !this.belongsToNestedStream(chunk, this.currentNestedStream)) {\n\t\t\tconst nestedStream = new TransformStream<I, I>();\n\t\t\tthis.nestedStreams[chunkIdx] = Object.assign(Object.create(nestedStream.readable), this.options.getNestedStreamProperties(chunk));\n\t\t\tthis.currentNestedStream = this.nestedStreams[chunkIdx];\n\t\t\tthis.nestedWriters[chunkIdx] = nestedStream.writable.getWriter();\n\t\t}\n\n\t\tthis.lastChunkIdx = chunkIdx;\n\t}\n\n\tprotected belongsToNestedStream(chunk: I, stream: ReadableStream<I> & P): boolean {\n\t\tif (this.options.belongsToNestedStream) {\n\t\t\treturn this.options.belongsToNestedStream(chunk, stream);\n\t\t} else {\n\t\t\tconst chunkProperties = this.options.getNestedStreamProperties(chunk);\n\t\t\tconst [streamKeys, chunkKeys] = [Object.keys(stream), Object.keys(chunkProperties)];\n\t\t\treturn streamKeys.length === chunkKeys.length && streamKeys.every((k) => chunkKeys.includes(k) && stream[k] === chunkProperties[k]);\n\t\t}\n\t}\n}\n\nfunction teeNestedStream<I, P extends Record<any, any>>(stream: ReadableStream<ReadableStream<I> & P>): [ReadableStream<ReadableStream<I> & P>, ReadableStream<ReadableStream<I> & P>] {\n\tconst [stream1, stream2] = stream.pipeThrough(new TransformStream({\n\t\ttransform: (chunk, controller) => {\n\t\t\tconst [nestedStream1, nestedStream2] = chunk.tee();\n\t\t\tconst nestedStreamProperties = Object.fromEntries(Object.entries(chunk));\n\t\t\tcontroller.enqueue([\n\t\t\t\tObject.assign(Object.create(nestedStream1), nestedStreamProperties),\n\t\t\t\tObject.assign(Object.create(nestedStream2), nestedStreamProperties),\n\t\t\t]);\n\t\t}\n\t})).tee();\n\n\treturn [\n\t\tstream1.pipeThrough(new TransformStream({\n\t\t\ttransform: (chunk, controller) => {\n\t\t\t\tcontroller.enqueue(chunk[0]);\n\t\t\t}\n\t\t})),\n\t\tstream2.pipeThrough(new TransformStream({\n\t\t\ttransform: (chunk, controller) => {\n\t\t\t\tcontroller.enqueue(chunk[1]);\n\t\t\t}\n\t\t}))\n\t];\n}","import type { JsonChunkWithPath, JsonPath } from \"./json-path-detector\";\nimport { StreamSplitter } from \"./stream-splitter\";\nimport { arrayStartsWith } from \"./utils\";\n\ntype P = {\n\tpath: JsonPath;\n};\n\nexport type JsonStreamWithPath = ReadableStream<JsonChunkWithPath> & P;\n\n/**\n * Splits up the incoming ReadableStream<JsonChunkWithPath> as emitted by JsonPathSelector and emits a nested\n * ReadableStream<JsonChunkWithPath> for each JSON document in the stream. Each emitted nested stream gets\n * a \"path\" property that contains the path of the document as selected by JsonPathSelector. The individual\n * JSON chunks of the nested stream have the path prefix of their document removed, so that the nested\n * stream can be piped through the other transformers (such as JsonPathSelector or JsonDeserializer) as if\n * it contained an independent JSON document.\n */\nexport class JsonPathStreamSplitter extends StreamSplitter<JsonChunkWithPath, P> {\n\tconstructor() {\n\t\tsuper({\n\t\t\tgetNestedStreamProperties: (chunk) => ({ path: chunk.path }),\n\t\t\tbelongsToNestedStream: (chunk, stream) => arrayStartsWith(chunk.path, stream.path)\n\t\t});\n\n\t\tconst readable = this.readable.pipeThrough(new TransformStream<JsonStreamWithPath, JsonStreamWithPath>({\n\t\t\ttransform: (subStream, controller) => {\n\t\t\t\tcontroller.enqueue(Object.assign(subStream.pipeThrough(new TransformStream<JsonChunkWithPath, JsonChunkWithPath>({\n\t\t\t\t\ttransform: (chunk, controller) => {\n\t\t\t\t\t\tcontroller.enqueue({\n\t\t\t\t\t\t\t...chunk,\n\t\t\t\t\t\t\tpath: chunk.path.slice(subStream.path.length)\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t})), {\n\t\t\t\t\tpath: subStream.path\n\t\t\t\t}));\n\t\t\t}\n\t\t}));\n\t\tObject.defineProperty(this, \"readable\", { get: () => readable, configurable: true });\n\t}\n}","import { JsonDeserializer, type JsonValueAndPath } from \"./json-deserializer\";\nimport { JsonParser, type JsonParserOptions } from \"./json-parser\";\nimport { JsonSerializer, serializeJsonValue, type JsonSerializerOptions, type SerializableJsonValue } from \"./json-serializer\";\nimport { JsonStringifier } from \"./json-stringifier\";\nimport { JsonPathDetector, type JsonPath } from \"./json-path-detector\";\nimport { JsonPathSelector, matchesJsonPathSelector, type JsonPathSelectorExpression } from \"./json-path-selector\";\nimport { JsonPathStreamSplitter } from \"./json-path-stream-splitter\";\nimport type { JsonValue } from \"./types\";\nimport { AbstractTransformStream, PipeableTransformStream } from \"./utils\";\n\nexport function stringifyJsonStream(value: SerializableJsonValue, space?: string | number): ReadableStream<string> {\n\treturn serializeJsonValue(value, space).pipeThrough(new JsonStringifier());\n}\n\nexport function stringifyMultiJsonStream(space?: string | number, options?: JsonSerializerOptions): TransformStream<SerializableJsonValue, string> {\n\treturn new PipeableTransformStream((readable) => {\n\t\treturn readable\n\t\t\t.pipeThrough(new JsonSerializer(space, options))\n\t\t\t.pipeThrough(new JsonStringifier());\n\t});\n}\n\nclass ValueExtractor extends AbstractTransformStream<JsonValueAndPath, JsonValue> {\n\tprotected override transform(chunk: JsonValueAndPath, controller: TransformStreamDefaultController<JsonValue>) {\n\t\tcontroller.enqueue(chunk.value);\n\t}\n}\n\nexport function parseJsonStreamWithPaths(\n\tselector: JsonPathSelectorExpression | undefined,\n\toptions?: JsonParserOptions\n): TransformStream<string, JsonValueAndPath> {\n\treturn new PipeableTransformStream((readable) => {\n\t\tlet result = readable\n\t\t\t.pipeThrough(new JsonParser(options))\n\t\t\t.pipeThrough(new JsonPathDetector());\n\t\tif (selector) {\n\t\t\tresult = result.pipeThrough(new JsonPathSelector((path) => path.length > 0 && matchesJsonPathSelector(path.slice(0, -1), selector)));\n\t\t}\n\t\treturn result.pipeThrough(new JsonDeserializer());\n\t});\n}\n\nexport function parseJsonStream(\n\tselector: JsonPathSelectorExpression | undefined,\n\toptions?: JsonParserOptions\n): TransformStream<string, JsonValue> {\n\treturn new PipeableTransformStream((readable) => {\n\t\tlet result = readable.pipeThrough(new JsonParser(options))\n\t\tif (selector) {\n\t\t\tresult = result\n\t\t\t\t.pipeThrough(new JsonPathDetector())\n\t\t\t\t.pipeThrough(new JsonPathSelector((path) => path.length > 0 && matchesJsonPathSelector(path.slice(0, -1), selector)));\n\t\t}\n\t\treturn result\n\t\t\t.pipeThrough(new JsonDeserializer())\n\t\t\t.pipeThrough(new ValueExtractor());\n\t});\n}\n\nexport function parseNestedJsonStreamWithPaths(\n\tselector: JsonPathSelectorExpression,\n\toptions?: JsonParserOptions\n): TransformStream<string, ReadableStream<JsonValueAndPath> & { path: JsonPath }> {\n\treturn new PipeableTransformStream((readable) => {\n\t\treturn readable\n\t\t\t.pipeThrough(new JsonParser(options))\n\t\t\t.pipeThrough(new JsonPathDetector())\n\t\t\t.pipeThrough(new JsonPathSelector(selector))\n\t\t\t.pipeThrough(new JsonPathStreamSplitter())\n\t\t\t.pipeThrough(new TransformStream({\n\t\t\t\ttransform: (chunk, controller) => {\n\t\t\t\t\tcontroller.enqueue(Object.assign(\n\t\t\t\t\t\tchunk\n\t\t\t\t\t\t\t.pipeThrough(new JsonPathSelector([undefined]))\n\t\t\t\t\t\t\t.pipeThrough(new JsonDeserializer()),\n\t\t\t\t\t\t{ path: chunk.path }\n\t\t\t\t\t));\n\t\t\t\t}\n\t\t\t}));\n\t});\n}\n\nexport function parseNestedJsonStream(\n\tselector: JsonPathSelectorExpression,\n\toptions?: JsonParserOptions\n): TransformStream<string, ReadableStream<JsonValue> & { path: JsonPath }> {\n\treturn new PipeableTransformStream((readable) => {\n\t\treturn readable\n\t\t\t.pipeThrough(parseNestedJsonStreamWithPaths(selector, options))\n\t\t\t.pipeThrough(new TransformStream({\n\t\t\t\ttransform: (chunk, controller) => {\n\t\t\t\t\tcontroller.enqueue(Object.assign(\n\t\t\t\t\t\tchunk.pipeThrough(new ValueExtractor()),\n\t\t\t\t\t\t{ path: chunk.path }\n\t\t\t\t\t));\n\t\t\t\t}\n\t\t\t}));\n\t});\n}"],"names":["JsonChunkType","StringRole","chunkIdx","controller"],"mappings":"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"}