1 | "use strict";
|
2 | Object.defineProperty(exports, "__esModule", { value: true });
|
3 | exports.PickType = void 0;
|
4 | const mapped_types_1 = require("@nestjs/mapped-types");
|
5 | const lodash_1 = require("lodash");
|
6 | const constants_1 = require("../constants");
|
7 | const decorators_1 = require("../decorators");
|
8 | const model_properties_accessor_1 = require("../services/model-properties-accessor");
|
9 | const mapped_types_utils_1 = require("./mapped-types.utils");
|
10 | const modelPropertiesAccessor = new model_properties_accessor_1.ModelPropertiesAccessor();
|
11 | function PickType(classRef, keys) {
|
12 | const fields = modelPropertiesAccessor
|
13 | .getModelProperties(classRef.prototype)
|
14 | .filter((item) => keys.includes(item));
|
15 | const isInheritedPredicate = (propertyKey) => keys.includes(propertyKey);
|
16 | class PickTypeClass {
|
17 | constructor() {
|
18 | (0, mapped_types_1.inheritPropertyInitializers)(this, classRef, isInheritedPredicate);
|
19 | }
|
20 | }
|
21 | (0, mapped_types_1.inheritValidationMetadata)(classRef, PickTypeClass, isInheritedPredicate);
|
22 | (0, mapped_types_1.inheritTransformationMetadata)(classRef, PickTypeClass, isInheritedPredicate);
|
23 | (0, mapped_types_utils_1.clonePluginMetadataFactory)(PickTypeClass, classRef.prototype, (metadata) => (0, lodash_1.pick)(metadata, keys));
|
24 | fields.forEach((propertyKey) => {
|
25 | const metadata = Reflect.getMetadata(constants_1.DECORATORS.API_MODEL_PROPERTIES, classRef.prototype, propertyKey);
|
26 | const decoratorFactory = (0, decorators_1.ApiProperty)(metadata);
|
27 | decoratorFactory(PickTypeClass.prototype, propertyKey);
|
28 | });
|
29 | return PickTypeClass;
|
30 | }
|
31 | exports.PickType = PickType;
|