source: node_modules/swagger-client/lib/resolver/strategies/generic/normalize.js

main
Last change on this file was d24f17c, checked in by Aleksandar Panovski <apano77@…>, 15 months ago

Initial commit

  • Property mode set to 100644
File size: 3.6 KB
Line 
1"use strict";
2
3var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault").default;
4exports.__esModule = true;
5exports.default = normalize;
6var _opId = _interopRequireDefault(require("../../../helpers/op-id.js"));
7function normalize(parsedSpec) {
8 const {
9 spec
10 } = parsedSpec;
11 const {
12 paths
13 } = spec;
14 const map = {};
15 if (!paths || spec.$$normalized) {
16 return parsedSpec;
17 }
18
19 // eslint-disable-next-line no-restricted-syntax, guard-for-in
20 for (const pathName in paths) {
21 const path = paths[pathName];
22 if (path == null || !['object', 'function'].includes(typeof path)) {
23 continue; // eslint-disable-line no-continue
24 }
25 const pathParameters = path.parameters;
26
27 // eslint-disable-next-line no-restricted-syntax, guard-for-in
28 for (const method in path) {
29 const operation = path[method];
30 if (operation == null || !['object', 'function'].includes(typeof operation)) {
31 continue; // eslint-disable-line no-continue
32 }
33 const oid = (0, _opId.default)(operation, pathName, method);
34 if (oid) {
35 if (map[oid]) {
36 map[oid].push(operation);
37 } else {
38 map[oid] = [operation];
39 }
40 const opList = map[oid];
41 if (opList.length > 1) {
42 opList.forEach((o, i) => {
43 // eslint-disable-next-line no-underscore-dangle
44 o.__originalOperationId = o.__originalOperationId || o.operationId;
45 o.operationId = `${oid}${i + 1}`;
46 });
47 } else if (typeof operation.operationId !== 'undefined') {
48 // Ensure we always add the normalized operation ID if one already exists
49 // ( potentially different, given that we normalize our IDs)
50 // ... _back_ to the spec. Otherwise, they might not line up
51 const obj = opList[0];
52 // eslint-disable-next-line no-underscore-dangle
53 obj.__originalOperationId = obj.__originalOperationId || operation.operationId;
54 obj.operationId = oid;
55 }
56 }
57 if (method !== 'parameters') {
58 // Add inherited consumes, produces, parameters, securities
59 const inheritsList = [];
60 const toBeInherit = {};
61
62 // Global-levels
63 // eslint-disable-next-line no-restricted-syntax
64 for (const key in spec) {
65 if (key === 'produces' || key === 'consumes' || key === 'security') {
66 toBeInherit[key] = spec[key];
67 inheritsList.push(toBeInherit);
68 }
69 }
70
71 // Path-levels
72 if (pathParameters) {
73 toBeInherit.parameters = pathParameters;
74 inheritsList.push(toBeInherit);
75 }
76 if (inheritsList.length) {
77 // eslint-disable-next-line no-restricted-syntax
78 for (const inherits of inheritsList) {
79 // eslint-disable-next-line no-restricted-syntax
80 for (const inheritName in inherits) {
81 if (!operation[inheritName]) {
82 operation[inheritName] = inherits[inheritName];
83 } else if (inheritName === 'parameters') {
84 // eslint-disable-next-line no-restricted-syntax
85 for (const param of inherits[inheritName]) {
86 const exists = operation[inheritName].some(opParam => opParam.name && opParam.name === param.name || opParam.$ref && opParam.$ref === param.$ref || opParam.$$ref && opParam.$$ref === param.$$ref || opParam === param);
87 if (!exists) {
88 operation[inheritName].push(param);
89 }
90 }
91 }
92 }
93 }
94 }
95 }
96 }
97 }
98 spec.$$normalized = true;
99 return parsedSpec;
100}
Note: See TracBrowser for help on using the repository browser.