UNPKG

tupleson

Version:

A hackable JSON serializer/deserializer

1 lines 2.48 kB
{"version":3,"sources":["../../src/sync/deserialize.ts"],"sourcesContent":["import { isTsonTuple } from \"../internals/isTsonTuple.js\";\nimport { mapOrReturn } from \"../internals/mapOrReturn.js\";\nimport {\n\tTsonDeserializeFn,\n\tTsonNonce,\n\tTsonOptions,\n\tTsonParseFn,\n\tTsonSerialized,\n\tTsonTransformerSerializeDeserialize,\n} from \"./syncTypes.js\";\n\ntype WalkFn = (value: unknown) => unknown;\ntype WalkerFactory = (nonce: TsonNonce) => WalkFn;\n\ntype AnyTsonTransformerSerializeDeserialize =\n\tTsonTransformerSerializeDeserialize<any, any>;\n\nexport function createTsonDeserialize(opts: TsonOptions): TsonDeserializeFn {\n\tconst typeByKey: Record<string, AnyTsonTransformerSerializeDeserialize> = {};\n\n\tfor (const handler of opts.types) {\n\t\tif (handler.key) {\n\t\t\tif (typeByKey[handler.key]) {\n\t\t\t\tthrow new Error(`Multiple handlers for key ${handler.key} found`);\n\t\t\t}\n\n\t\t\ttypeByKey[handler.key] =\n\t\t\t\thandler as AnyTsonTransformerSerializeDeserialize;\n\t\t}\n\t}\n\n\tconst walker: WalkerFactory = (nonce) => {\n\t\tconst walk: WalkFn = (value) => {\n\t\t\tif (isTsonTuple(value, nonce)) {\n\t\t\t\tconst [type, serializedValue] = value;\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n\t\t\t\tconst transformer = typeByKey[type]!;\n\t\t\t\treturn transformer.deserialize(walk(serializedValue));\n\t\t\t}\n\n\t\t\treturn mapOrReturn(value, walk);\n\t\t};\n\n\t\treturn walk;\n\t};\n\n\treturn ((obj: TsonSerialized) =>\n\t\twalker(obj.nonce)(obj.json)) as TsonDeserializeFn;\n}\n\nexport function createTsonParser(opts: TsonOptions): TsonParseFn {\n\tconst deserializer = createTsonDeserialize(opts);\n\n\treturn ((str: string) =>\n\t\tdeserializer(JSON.parse(str) as TsonSerialized)) as TsonParseFn;\n}\n"],"mappings":"AAAA,SAAS,mBAAmB;AAC5B,SAAS,mBAAmB;AAgBrB,SAAS,sBAAsB,MAAsC;AAC3E,QAAM,YAAoE,CAAC;AAE3E,aAAW,WAAW,KAAK,OAAO;AACjC,QAAI,QAAQ,KAAK;AAChB,UAAI,UAAU,QAAQ,GAAG,GAAG;AAC3B,cAAM,IAAI,MAAM,6BAA6B,QAAQ,GAAG,QAAQ;AAAA,MACjE;AAEA,gBAAU,QAAQ,GAAG,IACpB;AAAA,IACF;AAAA,EACD;AAEA,QAAM,SAAwB,CAAC,UAAU;AACxC,UAAM,OAAe,CAAC,UAAU;AAC/B,UAAI,YAAY,OAAO,KAAK,GAAG;AAC9B,cAAM,CAAC,MAAM,eAAe,IAAI;AAEhC,cAAM,cAAc,UAAU,IAAI;AAClC,eAAO,YAAY,YAAY,KAAK,eAAe,CAAC;AAAA,MACrD;AAEA,aAAO,YAAY,OAAO,IAAI;AAAA,IAC/B;AAEA,WAAO;AAAA,EACR;AAEA,SAAQ,CAAC,QACR,OAAO,IAAI,KAAK,EAAE,IAAI,IAAI;AAC5B;AAEO,SAAS,iBAAiB,MAAgC;AAChE,QAAM,eAAe,sBAAsB,IAAI;AAE/C,SAAQ,CAAC,QACR,aAAa,KAAK,MAAM,GAAG,CAAmB;AAChD;","names":[]}