ts-comply
Version:
TypeTools is a Typescript library for providing extensible tooling runtime validations and type helpers.
229 lines • 11.9 kB
JavaScript
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
;