UNPKG

tupleson

Version:

A hackable JSON serializer/deserializer

64 lines (61 loc) 2.28 kB
import { TextDecoderEsque } from '../internals/esque.js'; import { serialized, TsonBranded, TsonTypeTesterCustom, TsonType } from '../sync/syncTypes.js'; import { TsonStreamInterruptedError } from './asyncErrors.js'; import '../errors.js'; type TsonAsyncStringifierIterable<TValue> = AsyncIterable<string> & { [serialized]: TValue; }; type BrandSerialized<TType, TValue> = TType & { [serialized]: TValue; }; type TsonAsyncStringifier = <TValue>(value: TValue, space?: number) => TsonAsyncStringifierIterable<TValue>; type TsonAsyncIndex = TsonBranded<number, "AsyncRegistered">; interface TsonTransformerSerializeDeserializeAsync<TValue, TSerializedValue> { async: true; /** * From JSON-serializable value */ deserialize: (opts: { /** * Close the controller for the ReadableStream of values */ close: () => void; /** * Reader for the ReadableStream of values */ reader: ReadableStreamDefaultReader<TSerializedValue | TsonStreamInterruptedError>; }) => TValue; /** * The key to use when serialized */ key: string; /** * JSON-serializable value */ serializeIterator: (opts: { /** * The value we're serializing */ value: TValue; }) => AsyncIterable<TSerializedValue>; } interface TsonAsyncType<TValue, TSerializedValue> extends TsonTransformerSerializeDeserializeAsync<TValue, TSerializedValue>, TsonTypeTesterCustom { } interface TsonAsyncOptions { /** * The nonce function every time we start serializing a new object * Should return a unique value every time it's called * @default `${crypto.randomUUID} if available, otherwise a random string generated by Math.random` */ nonce?: () => number | string; /** * Customize a text decoder if your runtime doesn't support the `TextDecoder` API * @default TextDecoder */ textDecoder?: TextDecoderEsque; /** * The list of types to use */ types: (TsonAsyncType<any, any> | TsonType<any, any> | TsonType<any, never>)[]; } export { BrandSerialized, TsonAsyncIndex, TsonAsyncOptions, TsonAsyncStringifier, TsonAsyncStringifierIterable, TsonAsyncType, TsonTransformerSerializeDeserializeAsync };