import type { OmitKeys } from "../object/index.ts"; import type { OpaqueString } from "../string/index.ts"; export type StringifiedJSON = OpaqueString; export type ParsedJSON = Type extends undefined ? StrictUndefined extends true ? null : undefined : Type extends Function | Symbol ? null : Type extends { toJSON: () => string; } ? string : Type extends string | boolean | null ? Type : Type extends String ? string : Type extends Boolean ? boolean : Type extends number | Number ? StrictNumber extends true ? number | null : number : Type extends readonly [infer ItemType1] ? readonly [ParsedJSON] : Type extends readonly [infer ItemType1, infer ItemType2] ? readonly [ ParsedJSON, ParsedJSON ] : Type extends readonly [infer ItemType1, infer ItemType2, infer ItemType3] ? readonly [ ParsedJSON, ParsedJSON, ParsedJSON ] : Type extends readonly [ infer ItemType1, infer ItemType2, infer ItemType3, infer ItemType4 ] ? readonly [ ParsedJSON, ParsedJSON, ParsedJSON, ParsedJSON ] : Type extends readonly [ infer ItemType1, infer ItemType2, infer ItemType3, infer ItemType4, infer ItemType5 ] ? readonly [ ParsedJSON, ParsedJSON, ParsedJSON, ParsedJSON, ParsedJSON ] : Type extends readonly [ infer ItemType1, infer ItemType2, infer ItemType3, infer ItemType4, infer ItemType5, infer ItemType6 ] ? readonly [ ParsedJSON, ParsedJSON, ParsedJSON, ParsedJSON, ParsedJSON, ParsedJSON ] : Type extends readonly [ infer ItemType1, infer ItemType2, infer ItemType3, infer ItemType4, infer ItemType5, infer ItemType6, infer ItemType7 ] ? readonly [ ParsedJSON, ParsedJSON, ParsedJSON, ParsedJSON, ParsedJSON, ParsedJSON, ParsedJSON ] : Type extends readonly [ infer ItemType1, infer ItemType2, infer ItemType3, infer ItemType4, infer ItemType5, infer ItemType6, infer ItemType7, infer ItemType8 ] ? readonly [ ParsedJSON, ParsedJSON, ParsedJSON, ParsedJSON, ParsedJSON, ParsedJSON, ParsedJSON, ParsedJSON ] : Type extends readonly [ infer ItemType1, infer ItemType2, infer ItemType3, infer ItemType4, infer ItemType5, infer ItemType6, infer ItemType7, infer ItemType8, infer ItemType9 ] ? readonly [ ParsedJSON, ParsedJSON, ParsedJSON, ParsedJSON, ParsedJSON, ParsedJSON, ParsedJSON, ParsedJSON, ParsedJSON ] : Type extends readonly [ infer ItemType1, infer ItemType2, infer ItemType3, infer ItemType4, infer ItemType5, infer ItemType6, infer ItemType7, infer ItemType8, infer ItemType9, infer ItemType10 ] ? readonly [ ParsedJSON, ParsedJSON, ParsedJSON, ParsedJSON, ParsedJSON, ParsedJSON, ParsedJSON, ParsedJSON, ParsedJSON, ParsedJSON ] : Type extends Array ? Array> : Type extends { [Symbol.toStringTag]: string; } ? {} : Type extends {} ? { [Key in OmitKeys]: ParsedJSON; } : Type; export declare function stringifyJSON(object: Type): Type extends undefined | Function | Symbol ? undefined : StringifiedJSON; export declare function parseJSON(json: StringifiedJSON): ParsedJSON;