UNPKG

@decaf-ts/decorator-validation

Version:
88 lines 3.24 kB
import { ValidatorRegistry } from "./Validators/ValidatorRegistry.js"; import { ValidationKeys } from "./Validators/constants.js"; import { ModelKeys } from "./../utils/constants.js"; import { Metadata } from "@decaf-ts/decoration"; /** * @summary Static class acting as a namespace for the Validation * * @class Validation * @static * * @category Validation */ export 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(); 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 ValidationKeys.REFLECT + key; } /** * @summary Returns all registered validation keys */ static keys() { return this.getRegistry().getKeys(); } static registerDecorator(key, decorator) { const meta = Metadata["innerGet"](Symbol.for(ModelKeys.DECORATORS), Metadata.key(ValidationKeys.REFLECT, key)); if (meta?.[key]) return; Metadata.set(ModelKeys.DECORATORS, Metadata.key(ValidationKeys.REFLECT, key), decorator); } static decoratorFromKey(key) { try { return Metadata["innerGet"](Symbol.for(ModelKeys.DECORATORS), Metadata.key(ValidationKeys.REFLECT, key)); } catch (e) { throw new Error(`No decorator registered under ${key}: ${e}`); } } } //# sourceMappingURL=Validation.js.map