UNPKG

webpack-userscript

Version:
84 lines 3.67 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.IsRecord = exports.MutuallyExclusive = exports.applyDecorators = exports.date = void 0; const class_validator_1 = require("class-validator"); function date() { return new Date(); } exports.date = date; /** * Shipped from NestJs#applyDecorators() * @see {@link https://github.com/nestjs/nest/blob/bee462e031f9562210c65b9eb8e8a20cab1f301f/packages/common/decorators/core/apply-decorators.ts github:nestjs/nest} */ function applyDecorators(...decorators) { return (target, propertyKey, descriptor) => { for (const decorator of decorators) { if (target instanceof Function && !descriptor) { decorator(target); continue; } decorator(target, propertyKey, descriptor); } }; } exports.applyDecorators = applyDecorators; /** * @see {@link https://github.com/typestack/class-validator/issues/759#issuecomment-712361384 github:typestack/class-validator#759} */ function MutuallyExclusive(group, validationOptions) { const key = MutuallyExclusive.getMetaKey(group); return function (object, propertyName) { var _a; const existing = (_a = Reflect.getMetadata(key, object)) !== null && _a !== void 0 ? _a : []; Reflect.defineMetadata(key, [...existing, propertyName], object); (0, class_validator_1.registerDecorator)({ name: 'MutuallyExclusive', target: object.constructor, propertyName: propertyName, constraints: [group], options: validationOptions, validator: { validate(_, args) { const mutuallyExclusiveProps = Reflect.getMetadata(key, args.object); return (mutuallyExclusiveProps.reduce((p, c) => (args.object[c] !== undefined ? ++p : p), 0) === 1); }, defaultMessage(validationArguments) { if (!validationArguments) { return `Mutually exclusive group "${group}" is violated`; } const mutuallyExclusiveProps = Reflect.getMetadata(key, validationArguments.object).filter((prop) => validationArguments.object[prop] !== undefined); const propsString = mutuallyExclusiveProps .map((p) => `"${p}"`) .join(', '); return (`Mutually exclusive group "${group}" is violated, ` + `${propsString}.`); }, }, }); }; } exports.MutuallyExclusive = MutuallyExclusive; MutuallyExclusive.getMetaKey = (tag) => Symbol.for(`custom:__@rst/validator_mutually_exclusive_${tag}__`); function IsRecord(keyValidators = [], valueValidators = [], validationOptions) { return function (object, propertyName) { (0, class_validator_1.registerDecorator)({ name: 'IsRecord', target: object.constructor, propertyName: propertyName, constraints: [], options: validationOptions, validator: { validate(value) { return (typeof value === 'object' && Object.entries(value).every(([k, v]) => keyValidators.every((validator) => validator(k)) && valueValidators.every((validator) => validator(v)))); }, defaultMessage() { return 'record validation failed'; }, }, }); }; } exports.IsRecord = IsRecord; //# sourceMappingURL=utils.js.map