tupleson
Version:
A hackable JSON serializer/deserializer
34 lines • 1.02 kB
JavaScript
import { isTsonTuple } from '../internals/isTsonTuple.mjs';
import { mapOrReturn } from '../internals/mapOrReturn.mjs';
function createTsonDeserialize(opts) {
const typeByKey = {};
for (const handler of opts.types) {
if (handler.key) {
if (typeByKey[handler.key]) {
throw new Error(`Multiple handlers for key ${handler.key} found`);
}
typeByKey[handler.key] = handler;
}
}
const walker = (nonce) => {
const walk = (value) => {
if (isTsonTuple(value, nonce)) {
const [type, serializedValue] = value;
const transformer = typeByKey[type];
return transformer.deserialize(walk(serializedValue));
}
return mapOrReturn(value, walk);
};
return walk;
};
return (obj) => walker(obj.nonce)(obj.json);
}
function createTsonParser(opts) {
const deserializer = createTsonDeserialize(opts);
return (str) => deserializer(JSON.parse(str));
}
export {
createTsonDeserialize,
createTsonParser
};
//# sourceMappingURL=deserialize.mjs.map