UNPKG

joiful

Version:

TypeScript Declarative Validation. Decorate your class properties to validate them using Joi.

50 lines 1.89 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.createPropertyDecorator = exports.NotImplemented = void 0; const core_1 = require("../core"); class NotImplemented extends Error { constructor(feature) { super(`${feature} is not implemented`); } } exports.NotImplemented = NotImplemented; function forEachModifierProvider(modifierProviders, callback) { Object .keys(modifierProviders) .forEach((modifierName) => { const modifierProvider = modifierProviders[modifierName]; callback(modifierName, modifierProvider); }); } function indexable(value) { return value; } const createPropertyDecorator = () => ((getBaseSchema, getModifierProviders, options) => { let schema; let modifiersToApply = []; const modifierProviders = getModifierProviders(() => core_1.getJoi(options)); const decoratorUntyped = (target, propertyKey) => { const joi = core_1.getJoi(options); schema = getBaseSchema({ joi, target, propertyKey }); if (options.labelProvider) { const label = options.labelProvider(propertyKey, target); if (typeof label === 'string') { schema = schema.label(label); } } modifiersToApply.forEach((modifierToApply) => { schema = modifierToApply({ schema: schema, options }); }); core_1.updateWorkingSchema(target, propertyKey, schema); }; const decorator = decoratorUntyped; forEachModifierProvider(modifierProviders, (modifierName, modifierProvider) => { indexable(decoratorUntyped)[modifierName] = (...args) => { modifiersToApply.push(modifierProvider(...args)); return decorator; }; }); return decorator; }); exports.createPropertyDecorator = createPropertyDecorator; //# sourceMappingURL=common.js.map