@rawmodel/schema
Version:
JSON Schema utils for RawModel.
67 lines • 3.05 kB
JavaScript
;
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