nestjs-swagger-dto
Version:
Nestjs swagger dto decorators
38 lines • 1.32 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.IsEnum = void 0;
const swagger_1 = require("@nestjs/swagger");
const class_validator_1 = require("class-validator");
const core_1 = require("../core");
/**
* Usage:
* ```ts
* enum OneOrTwo { One = 1, Two = 2, }
* IsEnum({ enum: { OneOrTwo } })
*
* IsEnum({ enum: { OneOrTwo: [1, 2] } })
* ```
*/
const IsEnum = ({ enum: enumOptions, ...base }) => {
const { enumValues, enumName } = getEnumNameAndValues(enumOptions);
let apiPropertyOptions = {
type: typeof enumValues[0],
enum: enumValues,
enumName,
};
// workaround for Nest's @Query handling
if (typeof base.isArray === 'object' && base.isArray.force) {
apiPropertyOptions = { type: 'array', items: { $ref: (0, swagger_1.getSchemaPath)(enumName) } };
}
return (0, core_1.compose)(apiPropertyOptions, base, (0, class_validator_1.IsIn)(enumValues, { each: !!base.isArray }));
};
exports.IsEnum = IsEnum;
function getEnumNameAndValues(e) {
const keys = Object.keys(e);
if (keys.length !== 1) {
throw new Error('EnumOptions object should have exactly one key');
}
const [enumName] = keys;
return { enumName, enumValues: Object.values(e[enumName]) };
}
//# sourceMappingURL=is-enum.js.map