@decaf-ts/decorator-validation
Version:
simple decorator based validation engine
92 lines • 3.57 kB
JavaScript
;
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