serde-ts/dist/registry.js

102 lines
3.5 KiB
JavaScript

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.registerDeserialize = exports.registerSerialize = exports.GlobalRegistry = exports.Registry = void 0;
exports.getSerialize = getSerialize;
exports.getDeserialize = getDeserialize;
const utils_1 = require("./utils");
class Registry {
constructor() {
Object.defineProperty(this, "serializers", {
enumerable: true,
configurable: true,
writable: true,
value: new Map()
});
Object.defineProperty(this, "deserializers", {
enumerable: true,
configurable: true,
writable: true,
value: new Map()
});
}
registerSerialize(ctor, serialize) {
this.serializers.set(ctor, serialize);
}
registerDeserialize(ctor, deserialize) {
this.deserializers.set(ctor, deserialize);
}
}
exports.Registry = Registry;
exports.GlobalRegistry = new Registry();
exports.registerSerialize = exports.GlobalRegistry.registerSerialize.bind(exports.GlobalRegistry);
exports.registerDeserialize = exports.GlobalRegistry.registerDeserialize.bind(exports.GlobalRegistry);
function getFrom(map, value) {
return map.get((0, utils_1.type)(value));
}
function getSerialize(value, fallback, registry) {
return getFrom(registry.serializers, value) || fallback;
}
function getDeserialize(value, fallback, registry) {
return getFrom(registry.deserializers, value) || fallback;
}
(0, exports.registerSerialize)(Boolean, (ser, value) => ser.serializeBoolean(value));
(0, exports.registerSerialize)(String, (ser, value) => ser.serializeString(value));
(0, exports.registerSerialize)(Number, (ser, value) => ser.serializeNumber(value));
(0, exports.registerSerialize)(BigInt, (ser, value) => ser.serializeBigInt(value));
(0, exports.registerSerialize)(Symbol, (ser, value) => ser.serializeSymbol(value));
(0, exports.registerSerialize)(utils_1.Null, (ser, _value) => ser.serializeNull());
(0, exports.registerSerialize)(Object, (ser, value) => {
const obj = Object.entries(value);
const serObj = ser.serializeObject(obj.length);
obj.forEach(([key, value]) => serObj.serializeEntry(key, value));
return serObj.end();
});
(0, exports.registerSerialize)(Array, (ser, value) => {
const arr = value;
const iter = ser.serializeIterable(arr.length);
arr.forEach((value) => iter.serializeElement(value));
return iter.end();
});
(0, exports.registerDeserialize)(Boolean, (de) => de.deserializeBoolean({
visitBoolean(value) {
return value;
}
}));
(0, exports.registerDeserialize)(String, (de) => de.deserializeString({
visitString(value) {
return value;
}
}));
(0, exports.registerDeserialize)(Number, (de) => de.deserializeNumber({
visitNumber(value) {
return value;
}
}));
(0, exports.registerDeserialize)(BigInt, (de) => de.deserializeBigInt({
visitBigInt(value) {
return value;
}
}));
(0, exports.registerDeserialize)(Symbol, (de) => de.deserializeSymbol({
visitSymbol(value) {
return value;
}
}));
(0, exports.registerDeserialize)(Object, (de) => de.deserializeObject({
visitObject(access) {
let result = {};
for (const [key, value] of access) {
result[key] = value;
}
return result;
}
}));
(0, exports.registerDeserialize)(Array, (de) => de.deserializeIterable({
visitIterable(access) {
let result = [];
for (const value of access) {
result.push(value);
}
return result;
}
}));