UNPKG

@decaf-ts/decorator-validation

Version:
92 lines 3.57 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.Validation = void 0; const ValidatorRegistry_1 = require("./Validators/ValidatorRegistry.cjs"); const constants_1 = require("./Validators/constants.cjs"); const constants_2 = require("./../utils/constants.cjs"); const decoration_1 = require("@decaf-ts/decoration"); /** * @summary Static class acting as a namespace for the Validation * * @class Validation * @static * * @category Validation */ class Validation { static { this.actingValidatorRegistry = undefined; } constructor() { } /** * @summary Defines the acting ValidatorRegistry * * @param {IValidatorRegistry} validatorRegistry the new implementation of the validator Registry * @param {function(Validator): Validator} [migrationHandler] the method to map the validator if required; */ static setRegistry(validatorRegistry, migrationHandler) { if (migrationHandler && Validation.actingValidatorRegistry) Validation.actingValidatorRegistry.getKeys().forEach((k) => { const validator = validatorRegistry.get(k); if (validator) validatorRegistry.register(migrationHandler(validator)); }); Validation.actingValidatorRegistry = validatorRegistry; } /** * @summary Returns the current ValidatorRegistry * * @return IValidatorRegistry, defaults to {@link ValidatorRegistry} */ static getRegistry() { if (!Validation.actingValidatorRegistry) Validation.actingValidatorRegistry = new ValidatorRegistry_1.ValidatorRegistry(); return Validation.actingValidatorRegistry; } /** * @summary Retrieves a validator * * @param {string} validatorKey one of the {@link ValidationKeys} * @return {Validator | undefined} the registered Validator or undefined if there is nono matching the provided key */ static get(validatorKey) { return Validation.getRegistry().get(validatorKey); } /** * @summary Registers the provided validators onto the registry * * @param {T[] | ValidatorDefinition[]} validator */ static register(...validator) { return Validation.getRegistry().register(...validator); } /** * @summary Builds the key to store as Metadata under Reflections * @description concatenates {@link ValidationKeys#REFLECT} with the provided key * * @param {string} key */ static key(key) { return constants_1.ValidationKeys.REFLECT + key; } /** * @summary Returns all registered validation keys */ static keys() { return this.getRegistry().getKeys(); } static registerDecorator(key, decorator) { const meta = decoration_1.Metadata["innerGet"](Symbol.for(constants_2.ModelKeys.DECORATORS), decoration_1.Metadata.key(constants_1.ValidationKeys.REFLECT, key)); if (meta?.[key]) return; decoration_1.Metadata.set(constants_2.ModelKeys.DECORATORS, decoration_1.Metadata.key(constants_1.ValidationKeys.REFLECT, key), decorator); } static decoratorFromKey(key) { try { return decoration_1.Metadata["innerGet"](Symbol.for(constants_2.ModelKeys.DECORATORS), decoration_1.Metadata.key(constants_1.ValidationKeys.REFLECT, key)); } catch (e) { throw new Error(`No decorator registered under ${key}: ${e}`); } } } exports.Validation = Validation; //# sourceMappingURL=Validation.js.map