@berish/rfp
Version:
Binary secure transport organization protocol for peer communication using function fingerprints
47 lines • 2.13 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.classInstanceToClassPrintPlugin = exports.SYMBOL_SERBER_REGISTRATOR = void 0;
const linq_1 = __importDefault(require("@berish/linq"));
const abstract_1 = require("../abstract");
exports.SYMBOL_SERBER_REGISTRATOR = Symbol('serberRegistrator');
exports.classInstanceToClassPrintPlugin = {
isForSerialize: (obj, options) => {
const registrator = options[exports.SYMBOL_SERBER_REGISTRATOR];
if (!registrator)
return false;
return typeof obj === 'object' && registrator.isRegisteredInstance(obj);
},
isForDeserialize: (print, options) => {
const registrator = options[exports.SYMBOL_SERBER_REGISTRATOR];
if (!registrator)
return false;
return abstract_1.getType(print) === 'printClass';
},
isAlreadySerialized: (obj, options) => exports.classInstanceToClassPrintPlugin.isForDeserialize(obj, options),
isAlreadyDeserialized: (obj, options) => exports.classInstanceToClassPrintPlugin.isForSerialize(obj, options),
serialize: (obj, options) => {
const registrator = options[exports.SYMBOL_SERBER_REGISTRATOR];
const names = registrator.getNamesByInstance(obj);
const data = {};
const print = Object.assign(Object.assign({}, abstract_1.createPrint(abstract_1.PrintTypeEnum.printClass)), { names,
data });
return print;
},
deserialize: (obj, options) => {
const registrator = options[exports.SYMBOL_SERBER_REGISTRATOR];
const { names, data } = obj;
const out = {};
const classes = linq_1.default.from(names)
.select((m) => registrator.getClassesByClassName(m))
.selectMany((m) => m)
.toArray();
const mainClass = classes[0];
if (!mainClass)
return out;
return registrator.getInstanceByClass(out, mainClass);
},
};
//# sourceMappingURL=plugin.js.map