declare const brand: unique symbol; type TsonBranded = TType & { [brand]: TBrand; }; type TsonNonce = TsonBranded; type TsonTypeHandlerKey = TsonBranded; type TsonSerializedValue = unknown; type TsonTuple = [TsonTypeHandlerKey, TsonSerializedValue, TsonNonce]; type TsonAllTypes = "bigint" | "boolean" | "function" | "number" | "object" | "string" | "symbol" | "undefined"; type SerializedType = Record | boolean | number | string | unknown[]; interface TsonTransformerNone { async?: false; deserialize?: never; /** * The key to use when serialized */ key?: never; serialize?: never; serializeIterator?: never; } interface TsonTransformerSerializeDeserialize { async?: false; /** * From JSON-serializable value */ deserialize: (v: TSerializedType) => TValue; /** * The key to use when serialized */ key: string; /** * JSON-serializable value */ serialize: (v: TValue) => TSerializedType; serializeIterator?: never; } type TsonTransformer = TsonTransformerNone | TsonTransformerSerializeDeserialize; interface TsonTypeTesterPrimitive { /** * The type of the primitive */ primitive: TsonAllTypes; /** * Test if the value is of this type */ test?: (v: unknown) => boolean; } interface TsonTypeTesterCustom { /** * The type of the primitive */ primitive?: never; /** * Test if the value is of this type */ test: (v: unknown) => boolean; } type TsonTypeTester = TsonTypeTesterCustom | TsonTypeTesterPrimitive; type TsonType< /** * The type of the value */ TValue, /** * JSON-serializable value how it's stored after it's serialized */ TSerializedType extends SerializedType> = TsonTypeTester & TsonTransformer; interface TsonOptions { /** * 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; /** * The list of types to use */ types: (TsonType | TsonType)[]; } declare const serialized: unique symbol; interface TsonSerialized { json: TsonSerializedValue; nonce: TsonNonce; [serialized]: TValue; } type TsonSerializeFn = (obj: TValue) => TsonSerialized; type TsonDeserializeFn = (data: TsonSerialized) => TValue; type TsonStringified = string & { [serialized]: TValue; }; type TsonStringifyFn = (obj: TValue, space?: number | string) => TsonStringified; type TsonParseFn = (string: TsonStringified) => TValue; export { TsonAllTypes, TsonBranded, TsonDeserializeFn, TsonNonce, TsonOptions, TsonParseFn, TsonSerializeFn, TsonSerialized, TsonSerializedValue, TsonStringified, TsonStringifyFn, TsonTransformer, TsonTransformerNone, TsonTransformerSerializeDeserialize, TsonTuple, TsonType, TsonTypeHandlerKey, TsonTypeTesterCustom, TsonTypeTesterPrimitive, serialized };