UNPKG

@skimp/json-file

Version:

The json-file module for the skimp domain modelling framework

64 lines 2.73 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.Serialiser = void 0; const utils_1 = require("@cleavera/utils"); const core_1 = require("@skimp/core"); const schema_1 = require("@skimp/schema"); class Serialiser { serialise(model) { const schema = model.constructor; let fields = schema_1.SCHEMA_REGISTER.getFields(schema); const type = schema_1.SCHEMA_REGISTER.getSchemaResourceName(schema); const relationships = core_1.MODEL_REGISTER.getRelationships(model); if ((0, utils_1.isNull)(type)) { throw new schema_1.SchemaNotRegisteredException(schema); } if ((0, utils_1.isNull)(fields)) { fields = []; } const out = { type, data: fields.reduce((result, field) => { const mappedField = schema_1.SCHEMA_REGISTER.mapToField(schema, field); if ((0, utils_1.isNull)(mappedField)) { throw new schema_1.FieldNotConfiguredException(schema, field); } result[mappedField] = schema_1.SCHEMA_REGISTER.serialise(schema, field, model[field]); return result; }, {}) }; if (!(0, utils_1.isEmpty)(relationships ?? [])) { out.relationships = relationships.map((relationship) => { return relationship.toString(); }); } return JSON.stringify(out, null, '\t'); } deserialise(body) { const json = JSON.parse(body); const schema = schema_1.SCHEMA_REGISTER.getSchema(json.type); if ((0, utils_1.isNull)(schema)) { throw new schema_1.ResourceNotRegisteredException(json.type); } let fields = schema_1.SCHEMA_REGISTER.getFields(schema); if ((0, utils_1.isNull)(fields)) { fields = []; } const model = new schema(); fields.forEach((field) => { const mappedField = schema_1.SCHEMA_REGISTER.mapToField(schema, field); if ((0, utils_1.isNull)(mappedField)) { throw new schema_1.FieldNotConfiguredException(schema, field); } model[field] = schema_1.SCHEMA_REGISTER.deserialise(schema, field, json.data[mappedField]); }); if (!(0, utils_1.isUndefined)(json.relationships)) { json.relationships.forEach((relationship) => { core_1.MODEL_REGISTER.addRelationship(model, core_1.ResourceLocation.FromString(relationship)); }); } return model; } } exports.Serialiser = Serialiser; //# sourceMappingURL=serialiser.js.map