102 lines
3.5 KiB
JavaScript
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;
|
|
}
|
|
}));
|