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 | mapped_types_1.inheritPropertyInitializers(this, classRef, isInheritedPredicate);
|
19 | }
|
20 | }
|
21 | mapped_types_1.inheritValidationMetadata(classRef, PickTypeClass, isInheritedPredicate);
|
22 | mapped_types_1.inheritTransformationMetadata(classRef, PickTypeClass, isInheritedPredicate);
|
23 | mapped_types_utils_1.clonePluginMetadataFactory(PickTypeClass, classRef.prototype, (metadata) => 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 = decorators_1.ApiProperty(metadata);
|
27 | decoratorFactory(PickTypeClass.prototype, propertyKey);
|
28 | });
|
29 | return PickTypeClass;
|
30 | }
|
31 | exports.PickType = PickType;
|