webpack-userscript
Version:
A Webpack plugin for userscript projects.
84 lines • 3.67 kB
JavaScript
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
;