tsbase
Version:
Base class libraries for TypeScript
103 lines • 4.33 kB
JavaScript
;
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