UNPKG

2.95 kBJavaScriptView Raw
1"use strict";
2Object.defineProperty(exports, "__esModule", { value: true });
3exports.exploreApiParametersMetadata = void 0;
4const lodash_1 = require("lodash");
5const constants_1 = require("../constants");
6const model_properties_accessor_1 = require("../services/model-properties-accessor");
7const parameter_metadata_accessor_1 = require("../services/parameter-metadata-accessor");
8const parameters_metadata_mapper_1 = require("../services/parameters-metadata-mapper");
9const schema_object_factory_1 = require("../services/schema-object-factory");
10const swagger_types_mapper_1 = require("../services/swagger-types-mapper");
11const parameterMetadataAccessor = new parameter_metadata_accessor_1.ParameterMetadataAccessor();
12const modelPropertiesAccessor = new model_properties_accessor_1.ModelPropertiesAccessor();
13const parametersMetadataMapper = new parameters_metadata_mapper_1.ParametersMetadataMapper(modelPropertiesAccessor);
14const swaggerTypesMapper = new swagger_types_mapper_1.SwaggerTypesMapper();
15const schemaObjectFactory = new schema_object_factory_1.SchemaObjectFactory(modelPropertiesAccessor, swaggerTypesMapper);
16const exploreApiParametersMetadata = (schemas, instance, prototype, method) => {
17 const explicitParameters = Reflect.getMetadata(constants_1.DECORATORS.API_PARAMETERS, method);
18 const parametersMetadata = parameterMetadataAccessor.explore(instance, prototype, method);
19 const noExplicitMetadata = lodash_1.isNil(explicitParameters);
20 if (noExplicitMetadata && lodash_1.isNil(parametersMetadata)) {
21 return undefined;
22 }
23 const reflectedParametersAsProperties = parametersMetadataMapper.transformModelToProperties(parametersMetadata || {});
24 let properties = reflectedParametersAsProperties;
25 if (!noExplicitMetadata) {
26 const mergeImplicitAndExplicit = (item) => lodash_1.assign(item, lodash_1.find(explicitParameters, ['name', item.name]));
27 properties = removeBodyMetadataIfExplicitExists(properties, explicitParameters);
28 properties = lodash_1.map(properties, mergeImplicitAndExplicit);
29 properties = lodash_1.unionWith(properties, explicitParameters, (arrVal, othVal) => {
30 return arrVal.name === othVal.name && arrVal.in === othVal.in;
31 });
32 }
33 const paramsWithDefinitions = schemaObjectFactory.createFromModel(properties, schemas);
34 const parameters = swaggerTypesMapper.mapParamTypes(paramsWithDefinitions);
35 return parameters ? { parameters } : undefined;
36};
37exports.exploreApiParametersMetadata = exploreApiParametersMetadata;
38function removeBodyMetadataIfExplicitExists(properties, explicitParams) {
39 const isBodyReflected = lodash_1.some(properties, (p) => p.in === 'body');
40 const isBodyDefinedExplicitly = lodash_1.some(explicitParams, (p) => p.in === 'body');
41 if (isBodyReflected && isBodyDefinedExplicitly) {
42 return lodash_1.omitBy(properties, (p) => p.in === 'body');
43 }
44 return properties;
45}