UNPKG

@rawmodel/schema

Version:
67 lines 3.05 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const core_1 = require("@rawmodel/core"); const utils_1 = require("@rawmodel/utils"); function createModelClass(recipe) { recipe = Object.assign({ getters: {}, setters: {}, defaultValues: {}, fakeValues: {}, emptyValues: {}, parsers: {}, validators: {}, handlers: {}, props: [] }, recipe); const Klass = class GenericModel extends core_1.Model { }; Object.defineProperty(Klass, '__props', { value: {}, enumerable: false, configurable: true, }); (recipe.props || []).forEach((prop) => { const obj = { setter: undefined, getter: undefined, populatable: prop.populatable, serializable: prop.serializable, enumerable: prop.enumerable, parser: {}, validators: [], handlers: [], }; if (!utils_1.isUndefined(prop.getter) && utils_1.isFunction(recipe.getters[prop.getter])) { obj.getter = recipe.getters[prop.getter](); } if (!utils_1.isUndefined(prop.setter) && utils_1.isFunction(recipe.setters[prop.setter])) { obj.setter = recipe.setters[prop.setter](); } if (!utils_1.isUndefined(prop.defaultValue)) { obj.defaultValue = utils_1.isFunction(recipe.defaultValues[prop.defaultValue]) ? recipe.defaultValues[prop.defaultValue]() : prop.defaultValue; } if (!utils_1.isUndefined(prop.fakeValue)) { obj.fakeValue = utils_1.isFunction(recipe.fakeValues[prop.fakeValue]) ? recipe.fakeValues[prop.fakeValue]() : prop.fakeValue; } if (!utils_1.isUndefined(prop.emptyValue)) { obj.emptyValue = utils_1.isFunction(recipe.emptyValues[prop.emptyValue]) ? recipe.emptyValues[prop.emptyValue]() : prop.emptyValue; } if (!utils_1.isUndefined(prop.parser)) { obj.parser.array = !!prop.parser.array; if (prop.parser.resolver && utils_1.isFunction(recipe.parsers[prop.parser.resolver])) { obj.parser.resolver = recipe.parsers[prop.parser.resolver](prop.parser.options); } } (prop.validators || []).forEach((validator) => { if (utils_1.isFunction(recipe.validators[validator.resolver])) { obj.validators.push(Object.assign(Object.assign({}, validator), { resolver: recipe.validators[validator.resolver](validator.options) })); } }); (prop.handlers || []).forEach((handler) => { if (utils_1.isFunction(recipe.handlers[handler.resolver])) { obj.handlers.push(Object.assign(Object.assign({}, handler), { resolver: recipe.handlers[handler.resolver](handler.options) })); } }); Klass.__props[prop.name] = obj; }); return Klass; } exports.createModelClass = createModelClass; //# sourceMappingURL=builder.js.map