@decaf-ts/decorator-validation
Version:
simple decorator based validation engine
87 lines • 9.59 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");
/**
* @summary Static class acting as a namespace for the Validation
*
* @class Validation
* @static
*
* @category Validation
*/
class Validation {
static { this.actingValidatorRegistry = undefined; }
static { this.loadedDecorators = {}; }
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) {
if (key in this.loadedDecorators)
return;
this.loadedDecorators[key] = decorator;
}
static decoratorFromKey(key) {
if (!(key in this.loadedDecorators))
throw new Error(`No decorator registered under ${key}`);
return this.loadedDecorators[key];
}
}
exports.Validation = Validation;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVmFsaWRhdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy92YWxpZGF0aW9uL1ZhbGlkYXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBRUEsMEVBQW1FO0FBQ25FLDBEQUF3RDtBQUV4RDs7Ozs7OztHQU9HO0FBQ0gsTUFBYSxVQUFVO2FBQ04sNEJBQXVCLEdBQ3BDLFNBQVMsQ0FBQzthQUVHLHFCQUFnQixHQUFzQyxFQUFFLENBQUM7SUFDeEUsZ0JBQXVCLENBQUM7SUFFeEI7Ozs7O09BS0c7SUFDSCxNQUFNLENBQUMsV0FBVyxDQUNoQixpQkFBZ0QsRUFDaEQsZ0JBQXNEO1FBRXRELElBQUksZ0JBQWdCLElBQUksVUFBVSxDQUFDLHVCQUF1QjtZQUN4RCxVQUFVLENBQUMsdUJBQXVCLENBQUMsT0FBTyxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBUyxFQUFFLEVBQUU7Z0JBQ2pFLE1BQU0sU0FBUyxHQUFHLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDM0MsSUFBSSxTQUFTO29CQUFFLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO1lBQ3pFLENBQUMsQ0FBQyxDQUFDO1FBQ0wsVUFBVSxDQUFDLHVCQUF1QixHQUFHLGlCQUFpQixDQUFDO0lBQ3pELENBQUM7SUFFRDs7OztPQUlHO0lBQ0ssTUFBTSxDQUFDLFdBQVc7UUFDeEIsSUFBSSxDQUFDLFVBQVUsQ0FBQyx1QkFBdUI7WUFDckMsVUFBVSxDQUFDLHVCQUF1QixHQUFHLElBQUkscUNBQWlCLEVBQUUsQ0FBQztRQUMvRCxPQUFPLFVBQVUsQ0FBQyx1QkFBdUIsQ0FBQztJQUM1QyxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxNQUFNLENBQUMsR0FBRyxDQUFzQixZQUFvQjtRQUNsRCxPQUFPLFVBQVUsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDcEQsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxNQUFNLENBQUMsUUFBUSxDQUNiLEdBQUcsU0FBc0M7UUFFekMsT0FBTyxVQUFVLENBQUMsV0FBVyxFQUFFLENBQUMsUUFBUSxDQUFDLEdBQUcsU0FBUyxDQUFDLENBQUM7SUFDekQsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFXO1FBQ3BCLE9BQU8sMEJBQWMsQ0FBQyxPQUFPLEdBQUcsR0FBRyxDQUFDO0lBQ3RDLENBQUM7SUFFRDs7T0FFRztJQUNILE1BQU0sQ0FBQyxJQUFJO1FBQ1QsT0FBTyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDdEMsQ0FBQztJQUVELE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxHQUFXLEVBQUUsU0FBNEI7UUFDaEUsSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLGdCQUFnQjtZQUFFLE9BQU87UUFDekMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxHQUFHLFNBQVMsQ0FBQztJQUN6QyxDQUFDO0lBRUQsTUFBTSxDQUFDLGdCQUFnQixDQUFDLEdBQVc7UUFDakMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztZQUNqQyxNQUFNLElBQUksS0FBSyxDQUFDLGlDQUFpQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBQzFELE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3BDLENBQUM7O0FBbkZILGdDQW9GQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFZhbGlkYXRvciB9IGZyb20gXCIuL1ZhbGlkYXRvcnMvVmFsaWRhdG9yXCI7XG5pbXBvcnQgeyBJVmFsaWRhdG9yUmVnaXN0cnksIFZhbGlkYXRvckRlZmluaXRpb24gfSBmcm9tIFwiLi90eXBlc1wiO1xuaW1wb3J0IHsgVmFsaWRhdG9yUmVnaXN0cnkgfSBmcm9tIFwiLi9WYWxpZGF0b3JzL1ZhbGlkYXRvclJlZ2lzdHJ5XCI7XG5pbXBvcnQgeyBWYWxpZGF0aW9uS2V5cyB9IGZyb20gXCIuL1ZhbGlkYXRvcnMvY29uc3RhbnRzXCI7XG5cbi8qKlxuICogQHN1bW1hcnkgU3RhdGljIGNsYXNzIGFjdGluZyBhcyBhIG5hbWVzcGFjZSBmb3IgdGhlIFZhbGlkYXRpb25cbiAqXG4gKiBAY2xhc3MgVmFsaWRhdGlvblxuICogQHN0YXRpY1xuICpcbiAqIEBjYXRlZ29yeSBWYWxpZGF0aW9uXG4gKi9cbmV4cG9ydCBjbGFzcyBWYWxpZGF0aW9uIHtcbiAgcHJpdmF0ZSBzdGF0aWMgYWN0aW5nVmFsaWRhdG9yUmVnaXN0cnk/OiBJVmFsaWRhdG9yUmVnaXN0cnk8VmFsaWRhdG9yPiA9XG4gICAgdW5kZWZpbmVkO1xuXG4gIHByaXZhdGUgc3RhdGljIGxvYWRlZERlY29yYXRvcnM6IFJlY29yZDxzdHJpbmcsIFByb3BlcnR5RGVjb3JhdG9yPiA9IHt9O1xuICBwcml2YXRlIGNvbnN0cnVjdG9yKCkge31cblxuICAvKipcbiAgICogQHN1bW1hcnkgRGVmaW5lcyB0aGUgYWN0aW5nIFZhbGlkYXRvclJlZ2lzdHJ5XG4gICAqXG4gICAqIEBwYXJhbSB7SVZhbGlkYXRvclJlZ2lzdHJ5fSB2YWxpZGF0b3JSZWdpc3RyeSB0aGUgbmV3IGltcGxlbWVudGF0aW9uIG9mIHRoZSB2YWxpZGF0b3IgUmVnaXN0cnlcbiAgICogQHBhcmFtIHtmdW5jdGlvbihWYWxpZGF0b3IpOiBWYWxpZGF0b3J9IFttaWdyYXRpb25IYW5kbGVyXSB0aGUgbWV0aG9kIHRvIG1hcCB0aGUgdmFsaWRhdG9yIGlmIHJlcXVpcmVkO1xuICAgKi9cbiAgc3RhdGljIHNldFJlZ2lzdHJ5KFxuICAgIHZhbGlkYXRvclJlZ2lzdHJ5OiBJVmFsaWRhdG9yUmVnaXN0cnk8VmFsaWRhdG9yPixcbiAgICBtaWdyYXRpb25IYW5kbGVyPzogKHZhbGlkYXRvcjogVmFsaWRhdG9yKSA9PiBWYWxpZGF0b3JcbiAgKSB7XG4gICAgaWYgKG1pZ3JhdGlvbkhhbmRsZXIgJiYgVmFsaWRhdGlvbi5hY3RpbmdWYWxpZGF0b3JSZWdpc3RyeSlcbiAgICAgIFZhbGlkYXRpb24uYWN0aW5nVmFsaWRhdG9yUmVnaXN0cnkuZ2V0S2V5cygpLmZvckVhY2goKGs6IHN0cmluZykgPT4ge1xuICAgICAgICBjb25zdCB2YWxpZGF0b3IgPSB2YWxpZGF0b3JSZWdpc3RyeS5nZXQoayk7XG4gICAgICAgIGlmICh2YWxpZGF0b3IpIHZhbGlkYXRvclJlZ2lzdHJ5LnJlZ2lzdGVyKG1pZ3JhdGlvbkhhbmRsZXIodmFsaWRhdG9yKSk7XG4gICAgICB9KTtcbiAgICBWYWxpZGF0aW9uLmFjdGluZ1ZhbGlkYXRvclJlZ2lzdHJ5ID0gdmFsaWRhdG9yUmVnaXN0cnk7XG4gIH1cblxuICAvKipcbiAgICogQHN1bW1hcnkgUmV0dXJucyB0aGUgY3VycmVudCBWYWxpZGF0b3JSZWdpc3RyeVxuICAgKlxuICAgKiBAcmV0dXJuIElWYWxpZGF0b3JSZWdpc3RyeSwgZGVmYXVsdHMgdG8ge0BsaW5rIFZhbGlkYXRvclJlZ2lzdHJ5fVxuICAgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgZ2V0UmVnaXN0cnkoKSB7XG4gICAgaWYgKCFWYWxpZGF0aW9uLmFjdGluZ1ZhbGlkYXRvclJlZ2lzdHJ5KVxuICAgICAgVmFsaWRhdGlvbi5hY3RpbmdWYWxpZGF0b3JSZWdpc3RyeSA9IG5ldyBWYWxpZGF0b3JSZWdpc3RyeSgpO1xuICAgIHJldHVybiBWYWxpZGF0aW9uLmFjdGluZ1ZhbGlkYXRvclJlZ2lzdHJ5O1xuICB9XG5cbiAgLyoqXG4gICAqIEBzdW1tYXJ5IFJldHJpZXZlcyBhIHZhbGlkYXRvclxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdmFsaWRhdG9yS2V5IG9uZSBvZiB0aGUge0BsaW5rIFZhbGlkYXRpb25LZXlzfVxuICAgKiBAcmV0dXJuIHtWYWxpZGF0b3IgfCB1bmRlZmluZWR9IHRoZSByZWdpc3RlcmVkIFZhbGlkYXRvciBvciB1bmRlZmluZWQgaWYgdGhlcmUgaXMgbm9ubyBtYXRjaGluZyB0aGUgcHJvdmlkZWQga2V5XG4gICAqL1xuICBzdGF0aWMgZ2V0PFQgZXh0ZW5kcyBWYWxpZGF0b3I+KHZhbGlkYXRvcktleTogc3RyaW5nKTogVCB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIFZhbGlkYXRpb24uZ2V0UmVnaXN0cnkoKS5nZXQodmFsaWRhdG9yS2V5KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAc3VtbWFyeSBSZWdpc3RlcnMgdGhlIHByb3ZpZGVkIHZhbGlkYXRvcnMgb250byB0aGUgcmVnaXN0cnlcbiAgICpcbiAgICogQHBhcmFtIHtUW10gfCBWYWxpZGF0b3JEZWZpbml0aW9uW119IHZhbGlkYXRvclxuICAgKi9cbiAgc3RhdGljIHJlZ2lzdGVyPFQgZXh0ZW5kcyBWYWxpZGF0b3I+KFxuICAgIC4uLnZhbGlkYXRvcjogKFZhbGlkYXRvckRlZmluaXRpb24gfCBUKVtdXG4gICk6IHZvaWQge1xuICAgIHJldHVybiBWYWxpZGF0aW9uLmdldFJlZ2lzdHJ5KCkucmVnaXN0ZXIoLi4udmFsaWRhdG9yKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAc3VtbWFyeSBCdWlsZHMgdGhlIGtleSB0byBzdG9yZSBhcyBNZXRhZGF0YSB1bmRlciBSZWZsZWN0aW9uc1xuICAgKiBAZGVzY3JpcHRpb24gY29uY2F0ZW5hdGVzIHtAbGluayBWYWxpZGF0aW9uS2V5cyNSRUZMRUNUfSB3aXRoIHRoZSBwcm92aWRlZCBrZXlcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGtleVxuICAgKi9cbiAgc3RhdGljIGtleShrZXk6IHN0cmluZykge1xuICAgIHJldHVybiBWYWxpZGF0aW9uS2V5cy5SRUZMRUNUICsga2V5O1xuICB9XG5cbiAgLyoqXG4gICAqIEBzdW1tYXJ5IFJldHVybnMgYWxsIHJlZ2lzdGVyZWQgdmFsaWRhdGlvbiBrZXlzXG4gICAqL1xuICBzdGF0aWMga2V5cygpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRSZWdpc3RyeSgpLmdldEtleXMoKTtcbiAgfVxuXG4gIHN0YXRpYyByZWdpc3RlckRlY29yYXRvcihrZXk6IHN0cmluZywgZGVjb3JhdG9yOiBQcm9wZXJ0eURlY29yYXRvcikge1xuICAgIGlmIChrZXkgaW4gdGhpcy5sb2FkZWREZWNvcmF0b3JzKSByZXR1cm47XG4gICAgdGhpcy5sb2FkZWREZWNvcmF0b3JzW2tleV0gPSBkZWNvcmF0b3I7XG4gIH1cblxuICBzdGF0aWMgZGVjb3JhdG9yRnJvbUtleShrZXk6IHN0cmluZykge1xuICAgIGlmICghKGtleSBpbiB0aGlzLmxvYWRlZERlY29yYXRvcnMpKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBObyBkZWNvcmF0b3IgcmVnaXN0ZXJlZCB1bmRlciAke2tleX1gKTtcbiAgICByZXR1cm4gdGhpcy5sb2FkZWREZWNvcmF0b3JzW2tleV07XG4gIH1cbn1cbiJdfQ==