UNPKG

tsbase

Version:

Base class libraries for TypeScript

103 lines 4.33 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.Model = void 0; var Regex_1 = require("../System/Regex"); var Strings_1 = require("../System/Strings"); var Result_1 = require("../Patterns/Result/Result"); var module_1 = require("../Patterns/Validator/module"); var MetadataKeys_1 = require("./MetadataKeys"); var hiddenFields = [ 'IsTemplate' ]; var Model = /** @class */ (function () { function Model(IsTemplate) { if (IsTemplate === void 0) { IsTemplate = false; } this.IsTemplate = IsTemplate; } Model.GetKeyFromMemberFunc = function (member) { try { var postReturnString = member.toString().split('return')[1]; var splitChar = postReturnString.includes('.') ? '.' : '['; return postReturnString.split(splitChar)[1].replace(Regex_1.Regex.NonAlphaNumeric, '').trim(); } catch (_a) { return Strings_1.Strings.Empty; } }; Object.defineProperty(Model.prototype, "ModelKeys", { get: function () { return Object.keys(this).filter(function (k) { return !hiddenFields.includes(k); }); }, enumerable: false, configurable: true }); Model.prototype.LabelFor = function (member) { return this.getMetadata(MetadataKeys_1.MetadataKeys.Label, member, typeof member === 'string' ? member : Model.GetKeyFromMemberFunc(member)); }; Model.prototype.DescriptionFor = function (member) { return this.getMetadata(MetadataKeys_1.MetadataKeys.Description, member, typeof member === 'string' ? member : Model.GetKeyFromMemberFunc(member)); }; Model.prototype.InputTypeFor = function (member) { return this.getMetadata(MetadataKeys_1.MetadataKeys.InputType, member, typeof member === 'string' ? member : Model.GetKeyFromMemberFunc(member)); }; Model.prototype.OptionsFor = function (member) { return this.getMetadata(MetadataKeys_1.MetadataKeys.Options, member, {}); }; Model.prototype.ValidationsFor = function (member) { return this.getMetadata(MetadataKeys_1.MetadataKeys.Validations, member, []); }; Model.prototype.Validate = function (member) { return member ? this.ValidateField(member) : this.validateModel(); }; Model.prototype.ValidateField = function (member) { var validations = this.ValidationsFor(member); var validator = new module_1.Validator(validations); return validator.Validate(this); }; Model.prototype.validateModel = function () { var _this = this; var result = new Result_1.Result(null); this.ModelKeys.forEach(function (key) { var isDataModel = !!_this[key]['ModelKeys']; if (isDataModel) { var nestedDataModel = _this[key]; result = result.CombineWith(nestedDataModel.Validate()); } else if (_this.fieldIsArrayOfDataModel(_this[key])) { result = _this.validateDataModelArray(key, result); } else { var validations = _this.ValidationsFor(key); result = result.CombineWith(new module_1.Validator(validations).Validate(_this)); } }); return result; }; Model.prototype.validateDataModelArray = function (key, result) { var nestedDataModelArray = this[key]; nestedDataModelArray.forEach(function (model) { if (!model.IsTemplate) { result = result.CombineWith(model.Validate()); } }); return result; }; Model.prototype.fieldIsArrayOfDataModel = function (field) { return typeof field === 'object' && field[0] && field[0]['ModelKeys']; }; Model.prototype.getMetadata = function (metadataKey, member, defaultValue) { var _a; var key = typeof member === 'string' ? member : Model.GetKeyFromMemberFunc(member); var subKey = "".concat(this.constructor.name, "-").concat(key); return ((_a = Model.Metadata[metadataKey]) === null || _a === void 0 ? void 0 : _a[subKey]) || defaultValue; }; Model.Metadata = {}; return Model; }()); exports.Model = Model; //# sourceMappingURL=Model.js.map