UNPKG

@openhps/core

Version:

Open Hybrid Positioning System - Core component

96 lines 3.03 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.ModelSerializer = void 0; const data_1 = require("./data"); const Node_1 = require("./Node"); const service_1 = require("./service"); /** * Model serializer allows you to serialize a positioning model to JSON. */ class ModelSerializer { static get options() { return { serialize: data_1.DataSerializer.serialize, deserialize: data_1.DataSerializer.deserialize, }; } static serialize(model) { return this.serializeNode(model); } static serializeNode(node) { this.initialize(); return this.options.serialize(node); } /** * Deserialize a model * @param model * @returns */ static deserialize(model) { const deserializedModel = this.deserializeNode(model); deserializedModel.nodes.forEach((node) => { node.graph = deserializedModel; }); return deserializedModel; } /** * Deserialize a node * @param node * @returns */ static deserializeNode(node) { this.initialize(); return this.options.deserialize(node); } /** * Load all classes from the module * @param module * @returns */ static loadClasses(module = require.main) { if (module === undefined) { // Use cache instead Object.values(require.cache).map((m) => this.loadClasses(m)); return; } this._modules.add(module.id); if (module.exports) { Object.keys(module.exports).forEach((key) => { const childModule = module.exports[key]; if (childModule && childModule.prototype instanceof Node_1.Node) { this.NODES.set(key, { constructor: childModule, }); } else if (childModule && childModule.prototype instanceof service_1.Service) { this.SERVICES.set(key, { constructor: childModule, }); } }); } if (module.children) { module.children.forEach((module) => { if (!this._modules.has(module.id)) { this.loadClasses(module); } }); } } /** * Initialize the serializer */ static initialize() { if (this.SERVICES.size === 0 || this.NODES.size === 0) { this.loadClasses(); this._modules.clear(); this.SERVICES.forEach((service) => data_1.DataSerializer.registerType(service.constructor)); this.NODES.forEach((node) => data_1.DataSerializer.registerType(node.constructor)); } } } exports.ModelSerializer = ModelSerializer; ModelSerializer.NODES = new Map(); ModelSerializer.SERVICES = new Map(); ModelSerializer._modules = new Set(); //# sourceMappingURL=ModelSerializer.js.map