UNPKG

ts-comply

Version:

TypeTools is a Typescript library for providing extensible tooling runtime validations and type helpers.

229 lines 11.9 kB
"use strict"; var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { extendStatics = Object.setPrototypeOf || ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; return extendStatics(d, b); }; return function (d, b) { if (typeof b !== "function" && b !== null) throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); extendStatics(d, b); function __() { this.constructor = d; } d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); }; })(); Object.defineProperty(exports, "__esModule", { value: true }); exports.DataImportable = exports.DataImportableExtensionData = exports.DataImportableSettings = void 0; var class_lineage_1 = require("./class-lineage"); var context_1 = require("./context"); var properties_controller_1 = require("./properties-controller"); var type_tools_1 = require("./type-tools"); var DataImportableSettings = exports.DataImportableSettings = (function (_super) { __extends(DataImportableSettings, _super); function DataImportableSettings(init) { var _this = _super.call(this, init) || this; _this.extensionDataImportable = DataImportableSettings.extensionDataImportable; if (init) { Object.assign(_this, init); } return _this; } DataImportableSettings.extensionDataImportable = 'DataImportable'; return DataImportableSettings; }(class_lineage_1.ClassLineageSettings)); var DataImportableExtensionData = (function () { function DataImportableExtensionData() { } return DataImportableExtensionData; }()); exports.DataImportableExtensionData = DataImportableExtensionData; var DataImportable = (function () { function DataImportable(settings) { this.settings = (0, type_tools_1.settingsInitialize)(DataImportableSettings, settings); } DataImportable.getExtensionData = function (target, settings) { if (settings === void 0) { settings = DataImportableSettings; } return type_tools_1.TypeToolsBase.getExtension(target, settings.extensionDataImportable, settings); }; DataImportable.typeCheck = function (target, settings) { if (settings === void 0) { settings = DataImportableSettings; } return target && !!DataImportable.getExtensionData(target, settings); }; DataImportable.implementOn = function (target, settings) { if (settings === void 0) { settings = DataImportableSettings; } if (!type_tools_1.TypeToolsBase.checkContext(DataImportable)) { return false; } if (!DataImportable.getExtensionData(target, settings)) { properties_controller_1.PropertiesController.implementOn(target); var manageOptions = { alwaysFront: true, order: 0 }; var type = class_lineage_1.ClassLineage.typeOf(target); var skel_1 = type_tools_1.TypeToolsBase.getSkeleton(type); if (!skel_1) { throw new Error("Type skeleton for ".concat(type.name, " not defined; this could be from duplicate models definitions")); } var keys = skel_1.__tt_keys ? skel_1.__tt_keys : Object.keys(skel_1); var descriptorsRubric_1 = {}; keys.forEach(function (key) { var prop = skel_1[key]; if (type_tools_1.TypeToolsBase.typeCheck(prop)) { if (prop._get_args) { descriptorsRubric_1[key] = { set: function (value, e) { if (value && value.constructor.name === 'Object') { e.transformValue(prop._stencil(target, value)); } } }; } else { descriptorsRubric_1[key] = { set: function (value, e) { if (value && value.constructor.name === 'Object') { var cast = context_1.Context.cast(value, class_lineage_1.ClassLineage.typeOf(prop)); if (cast) { e.transformValue(cast); } } } }; } } }); properties_controller_1.PropertiesController.manage(target, manageOptions, descriptorsRubric_1); var extension_1 = { beforeimports: [], afterimports: [], import: function (data, skel, assignOnly) { if (!data) { data = {}; } if (!assignOnly) { for (var _i = 0, _a = extension_1.beforeimports; _i < _a.length; _i++) { var beforeimport = _a[_i]; beforeimport(data); } } type_tools_1.TypeToolsBase.topCancel = type_tools_1.TypeToolsBase.topError = null; var sourceType = context_1.Context.beforeDefCurrent ? context_1.Context.beforeDefCurrent : context_1.Context.current ? context_1.Context.current : null; if (!skel) { skel = sourceType ? type_tools_1.TypeToolsBase.getSkeleton(sourceType) : target; } var keys = skel.__tt_keys ? skel.__tt_keys : Object.keys(skel); var error; var canceled = false; var prevValues; if (assignOnly) { for (var _b = 0, keys_1 = keys; _b < keys_1.length; _b++) { var memberName = keys_1[_b]; var propValue = data[memberName]; if (propValue !== undefined) { var skelData = skel[memberName]; if (skelData && type_tools_1.TypeToolsBase.typeCheck(skelData)) { if (skelData._get_args) { propValue = skelData._stencil(target, propValue); } else if (propValue && propValue.constructor.name === 'Object') { var cast = context_1.Context.cast(propValue, class_lineage_1.ClassLineage.typeOf(skelData)); if (cast) { propValue = cast; } } } try { target[memberName] = propValue; if (type_tools_1.TypeToolsBase.topError) { error = type_tools_1.TypeToolsBase.topError; break; } if (type_tools_1.TypeToolsBase.topCancel) { canceled = true; break; } } catch (e) { error = e; break; } } } } else { prevValues = {}; for (var _c = 0, keys_2 = keys; _c < keys_2.length; _c++) { var memberName = keys_2[_c]; var propValue = data[memberName]; if (propValue !== undefined) { var skelData = skel[memberName]; if (skelData && type_tools_1.TypeToolsBase.typeCheck(skelData)) { if (skelData._get_args) { propValue = skelData._stencil(target, propValue); } else if (propValue && propValue.constructor.name === 'Object') { var cast = context_1.Context.cast(propValue, class_lineage_1.ClassLineage.typeOf(skelData)); if (cast) { propValue = cast; } } } try { prevValues[memberName] = target[memberName]; target[memberName] = propValue; if (type_tools_1.TypeToolsBase.topError) { error = type_tools_1.TypeToolsBase.topError; break; } if (type_tools_1.TypeToolsBase.topCancel) { canceled = true; break; } } catch (e) { error = e; break; } } } } if (assignOnly) { if (error) { throw error; } else { return target; } } if (error || canceled) { for (var _d = 0, _e = Object.keys(prevValues); _d < _e.length; _d++) { var memberName = _e[_d]; try { target[memberName] = prevValues[memberName]; } catch (e) { } } if (error && context_1.Context.throwErrors) { throw error; } return null; } else { if (data._meta) { type_tools_1.TypeToolsBase.addMetaProperty(target, data._meta, true); } for (var _f = 0, _g = extension_1.afterimports; _f < _g.length; _f++) { var afterimport = _g[_f]; afterimport(data); } } return target; } }; type_tools_1.TypeToolsBase.addExtension(target, settings.extensionDataImportable, extension_1); } return true; }; DataImportable.prototype.getExtensionData = function (target) { return DataImportable.getExtensionData(target, this.settings); }; DataImportable.prototype.typeCheck = function (target) { return DataImportable.typeCheck(target, this.settings); }; DataImportable.prototype.implementOn = function (target) { return DataImportable.implementOn(target, this.settings); }; return DataImportable; }()); exports.DataImportable = DataImportable; //# sourceMappingURL=data-importable.js.map