UNPKG

@decaf-ts/decorator-validation

Version:
83 lines 9.47 kB
import { ValidatorRegistry } from "./Validators/ValidatorRegistry.js"; import { ValidationKeys } from "./Validators/constants.js"; /** * @summary Static class acting as a namespace for the Validation * * @class Validation * @static * * @category Validation */ export 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(); 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) { 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]; } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVmFsaWRhdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy92YWxpZGF0aW9uL1ZhbGlkYXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFFLGlCQUFpQixFQUFFLDBDQUF1QztBQUNuRSxPQUFPLEVBQUUsY0FBYyxFQUFFLGtDQUErQjtBQUV4RDs7Ozs7OztHQU9HO0FBQ0gsTUFBTSxPQUFPLFVBQVU7YUFDTiw0QkFBdUIsR0FDcEMsU0FBUyxDQUFDO2FBRUcscUJBQWdCLEdBQXNDLEVBQUUsQ0FBQztJQUN4RSxnQkFBdUIsQ0FBQztJQUV4Qjs7Ozs7T0FLRztJQUNILE1BQU0sQ0FBQyxXQUFXLENBQ2hCLGlCQUFnRCxFQUNoRCxnQkFBc0Q7UUFFdEQsSUFBSSxnQkFBZ0IsSUFBSSxVQUFVLENBQUMsdUJBQXVCO1lBQ3hELFVBQVUsQ0FBQyx1QkFBdUIsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFTLEVBQUUsRUFBRTtnQkFDakUsTUFBTSxTQUFTLEdBQUcsaUJBQWlCLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUMzQyxJQUFJLFNBQVM7b0JBQUUsaUJBQWlCLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7WUFDekUsQ0FBQyxDQUFDLENBQUM7UUFDTCxVQUFVLENBQUMsdUJBQXVCLEdBQUcsaUJBQWlCLENBQUM7SUFDekQsQ0FBQztJQUVEOzs7O09BSUc7SUFDSyxNQUFNLENBQUMsV0FBVztRQUN4QixJQUFJLENBQUMsVUFBVSxDQUFDLHVCQUF1QjtZQUNyQyxVQUFVLENBQUMsdUJBQXVCLEdBQUcsSUFBSSxpQkFBaUIsRUFBRSxDQUFDO1FBQy9ELE9BQU8sVUFBVSxDQUFDLHVCQUF1QixDQUFDO0lBQzVDLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILE1BQU0sQ0FBQyxHQUFHLENBQXNCLFlBQW9CO1FBQ2xELE9BQU8sVUFBVSxDQUFDLFdBQVcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUNwRCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILE1BQU0sQ0FBQyxRQUFRLENBQ2IsR0FBRyxTQUFzQztRQUV6QyxPQUFPLFVBQVUsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxRQUFRLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQztJQUN6RCxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQVc7UUFDcEIsT0FBTyxjQUFjLENBQUMsT0FBTyxHQUFHLEdBQUcsQ0FBQztJQUN0QyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxNQUFNLENBQUMsSUFBSTtRQUNULE9BQU8sSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ3RDLENBQUM7SUFFRCxNQUFNLENBQUMsaUJBQWlCLENBQUMsR0FBVyxFQUFFLFNBQTRCO1FBQ2hFLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxnQkFBZ0I7WUFBRSxPQUFPO1FBQ3pDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsR0FBRyxTQUFTLENBQUM7SUFDekMsQ0FBQztJQUVELE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFXO1FBQ2pDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLENBQUM7WUFDakMsTUFBTSxJQUFJLEtBQUssQ0FBQyxpQ0FBaUMsR0FBRyxFQUFFLENBQUMsQ0FBQztRQUMxRCxPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNwQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVmFsaWRhdG9yIH0gZnJvbSBcIi4vVmFsaWRhdG9ycy9WYWxpZGF0b3JcIjtcbmltcG9ydCB7IElWYWxpZGF0b3JSZWdpc3RyeSwgVmFsaWRhdG9yRGVmaW5pdGlvbiB9IGZyb20gXCIuL3R5cGVzXCI7XG5pbXBvcnQgeyBWYWxpZGF0b3JSZWdpc3RyeSB9IGZyb20gXCIuL1ZhbGlkYXRvcnMvVmFsaWRhdG9yUmVnaXN0cnlcIjtcbmltcG9ydCB7IFZhbGlkYXRpb25LZXlzIH0gZnJvbSBcIi4vVmFsaWRhdG9ycy9jb25zdGFudHNcIjtcblxuLyoqXG4gKiBAc3VtbWFyeSBTdGF0aWMgY2xhc3MgYWN0aW5nIGFzIGEgbmFtZXNwYWNlIGZvciB0aGUgVmFsaWRhdGlvblxuICpcbiAqIEBjbGFzcyBWYWxpZGF0aW9uXG4gKiBAc3RhdGljXG4gKlxuICogQGNhdGVnb3J5IFZhbGlkYXRpb25cbiAqL1xuZXhwb3J0IGNsYXNzIFZhbGlkYXRpb24ge1xuICBwcml2YXRlIHN0YXRpYyBhY3RpbmdWYWxpZGF0b3JSZWdpc3RyeT86IElWYWxpZGF0b3JSZWdpc3RyeTxWYWxpZGF0b3I+ID1cbiAgICB1bmRlZmluZWQ7XG5cbiAgcHJpdmF0ZSBzdGF0aWMgbG9hZGVkRGVjb3JhdG9yczogUmVjb3JkPHN0cmluZywgUHJvcGVydHlEZWNvcmF0b3I+ID0ge307XG4gIHByaXZhdGUgY29uc3RydWN0b3IoKSB7fVxuXG4gIC8qKlxuICAgKiBAc3VtbWFyeSBEZWZpbmVzIHRoZSBhY3RpbmcgVmFsaWRhdG9yUmVnaXN0cnlcbiAgICpcbiAgICogQHBhcmFtIHtJVmFsaWRhdG9yUmVnaXN0cnl9IHZhbGlkYXRvclJlZ2lzdHJ5IHRoZSBuZXcgaW1wbGVtZW50YXRpb24gb2YgdGhlIHZhbGlkYXRvciBSZWdpc3RyeVxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKFZhbGlkYXRvcik6IFZhbGlkYXRvcn0gW21pZ3JhdGlvbkhhbmRsZXJdIHRoZSBtZXRob2QgdG8gbWFwIHRoZSB2YWxpZGF0b3IgaWYgcmVxdWlyZWQ7XG4gICAqL1xuICBzdGF0aWMgc2V0UmVnaXN0cnkoXG4gICAgdmFsaWRhdG9yUmVnaXN0cnk6IElWYWxpZGF0b3JSZWdpc3RyeTxWYWxpZGF0b3I+LFxuICAgIG1pZ3JhdGlvbkhhbmRsZXI/OiAodmFsaWRhdG9yOiBWYWxpZGF0b3IpID0+IFZhbGlkYXRvclxuICApIHtcbiAgICBpZiAobWlncmF0aW9uSGFuZGxlciAmJiBWYWxpZGF0aW9uLmFjdGluZ1ZhbGlkYXRvclJlZ2lzdHJ5KVxuICAgICAgVmFsaWRhdGlvbi5hY3RpbmdWYWxpZGF0b3JSZWdpc3RyeS5nZXRLZXlzKCkuZm9yRWFjaCgoazogc3RyaW5nKSA9PiB7XG4gICAgICAgIGNvbnN0IHZhbGlkYXRvciA9IHZhbGlkYXRvclJlZ2lzdHJ5LmdldChrKTtcbiAgICAgICAgaWYgKHZhbGlkYXRvcikgdmFsaWRhdG9yUmVnaXN0cnkucmVnaXN0ZXIobWlncmF0aW9uSGFuZGxlcih2YWxpZGF0b3IpKTtcbiAgICAgIH0pO1xuICAgIFZhbGlkYXRpb24uYWN0aW5nVmFsaWRhdG9yUmVnaXN0cnkgPSB2YWxpZGF0b3JSZWdpc3RyeTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAc3VtbWFyeSBSZXR1cm5zIHRoZSBjdXJyZW50IFZhbGlkYXRvclJlZ2lzdHJ5XG4gICAqXG4gICAqIEByZXR1cm4gSVZhbGlkYXRvclJlZ2lzdHJ5LCBkZWZhdWx0cyB0byB7QGxpbmsgVmFsaWRhdG9yUmVnaXN0cnl9XG4gICAqL1xuICBwcml2YXRlIHN0YXRpYyBnZXRSZWdpc3RyeSgpIHtcbiAgICBpZiAoIVZhbGlkYXRpb24uYWN0aW5nVmFsaWRhdG9yUmVnaXN0cnkpXG4gICAgICBWYWxpZGF0aW9uLmFjdGluZ1ZhbGlkYXRvclJlZ2lzdHJ5ID0gbmV3IFZhbGlkYXRvclJlZ2lzdHJ5KCk7XG4gICAgcmV0dXJuIFZhbGlkYXRpb24uYWN0aW5nVmFsaWRhdG9yUmVnaXN0cnk7XG4gIH1cblxuICAvKipcbiAgICogQHN1bW1hcnkgUmV0cmlldmVzIGEgdmFsaWRhdG9yXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB2YWxpZGF0b3JLZXkgb25lIG9mIHRoZSB7QGxpbmsgVmFsaWRhdGlvbktleXN9XG4gICAqIEByZXR1cm4ge1ZhbGlkYXRvciB8IHVuZGVmaW5lZH0gdGhlIHJlZ2lzdGVyZWQgVmFsaWRhdG9yIG9yIHVuZGVmaW5lZCBpZiB0aGVyZSBpcyBub25vIG1hdGNoaW5nIHRoZSBwcm92aWRlZCBrZXlcbiAgICovXG4gIHN0YXRpYyBnZXQ8VCBleHRlbmRzIFZhbGlkYXRvcj4odmFsaWRhdG9yS2V5OiBzdHJpbmcpOiBUIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gVmFsaWRhdGlvbi5nZXRSZWdpc3RyeSgpLmdldCh2YWxpZGF0b3JLZXkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBzdW1tYXJ5IFJlZ2lzdGVycyB0aGUgcHJvdmlkZWQgdmFsaWRhdG9ycyBvbnRvIHRoZSByZWdpc3RyeVxuICAgKlxuICAgKiBAcGFyYW0ge1RbXSB8IFZhbGlkYXRvckRlZmluaXRpb25bXX0gdmFsaWRhdG9yXG4gICAqL1xuICBzdGF0aWMgcmVnaXN0ZXI8VCBleHRlbmRzIFZhbGlkYXRvcj4oXG4gICAgLi4udmFsaWRhdG9yOiAoVmFsaWRhdG9yRGVmaW5pdGlvbiB8IFQpW11cbiAgKTogdm9pZCB7XG4gICAgcmV0dXJuIFZhbGlkYXRpb24uZ2V0UmVnaXN0cnkoKS5yZWdpc3RlciguLi52YWxpZGF0b3IpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBzdW1tYXJ5IEJ1aWxkcyB0aGUga2V5IHRvIHN0b3JlIGFzIE1ldGFkYXRhIHVuZGVyIFJlZmxlY3Rpb25zXG4gICAqIEBkZXNjcmlwdGlvbiBjb25jYXRlbmF0ZXMge0BsaW5rIFZhbGlkYXRpb25LZXlzI1JFRkxFQ1R9IHdpdGggdGhlIHByb3ZpZGVkIGtleVxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5XG4gICAqL1xuICBzdGF0aWMga2V5KGtleTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIFZhbGlkYXRpb25LZXlzLlJFRkxFQ1QgKyBrZXk7XG4gIH1cblxuICAvKipcbiAgICogQHN1bW1hcnkgUmV0dXJucyBhbGwgcmVnaXN0ZXJlZCB2YWxpZGF0aW9uIGtleXNcbiAgICovXG4gIHN0YXRpYyBrZXlzKCkge1xuICAgIHJldHVybiB0aGlzLmdldFJlZ2lzdHJ5KCkuZ2V0S2V5cygpO1xuICB9XG5cbiAgc3RhdGljIHJlZ2lzdGVyRGVjb3JhdG9yKGtleTogc3RyaW5nLCBkZWNvcmF0b3I6IFByb3BlcnR5RGVjb3JhdG9yKSB7XG4gICAgaWYgKGtleSBpbiB0aGlzLmxvYWRlZERlY29yYXRvcnMpIHJldHVybjtcbiAgICB0aGlzLmxvYWRlZERlY29yYXRvcnNba2V5XSA9IGRlY29yYXRvcjtcbiAgfVxuXG4gIHN0YXRpYyBkZWNvcmF0b3JGcm9tS2V5KGtleTogc3RyaW5nKSB7XG4gICAgaWYgKCEoa2V5IGluIHRoaXMubG9hZGVkRGVjb3JhdG9ycykpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIGRlY29yYXRvciByZWdpc3RlcmVkIHVuZGVyICR7a2V5fWApO1xuICAgIHJldHVybiB0aGlzLmxvYWRlZERlY29yYXRvcnNba2V5XTtcbiAgfVxufVxuIl19