source: node_modules/@swagger-api/apidom-ns-openapi-3-1/cjs/refractor/plugins/normalize-servers.cjs

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: 4.3 KB
Line 
1"use strict";
2
3exports.__esModule = true;
4exports.default = void 0;
5var _apidomNsOpenapi = require("@swagger-api/apidom-ns-openapi-3-0");
6/**
7 * Override of Server Objects.
8 *
9 * List of Server Objects can be defined in OpenAPI 3.1 on multiple levels:
10 *
11 * - OpenAPI.servers
12 * - PathItem.servers
13 * - Operation.servers
14 *
15 * If an alternative server object is specified at the Path Item Object level, it will override OpenAPI.servers.
16 * If an alternative server object is specified at the Operation Object level, it will override PathItem.servers and OpenAPI.servers respectively.
17 */
18
19/* eslint-disable no-param-reassign */
20const plugin = () => ({
21 predicates,
22 namespace
23}) => {
24 return {
25 visitor: {
26 OpenApi3_1Element(openapiElement) {
27 const isServersUndefined = typeof openapiElement.servers === 'undefined';
28 const isServersArrayElement = predicates.isArrayElement(openapiElement.servers);
29 const isServersEmpty = isServersArrayElement && openapiElement.servers.length === 0;
30 // @ts-ignore
31 const defaultServer = namespace.elements.Server.refract({
32 url: '/'
33 });
34 if (isServersUndefined || !isServersArrayElement) {
35 openapiElement.servers = new _apidomNsOpenapi.ServersElement([defaultServer]);
36 } else if (isServersArrayElement && isServersEmpty) {
37 openapiElement.servers.push(defaultServer);
38 }
39 },
40 PathItemElement(pathItemElement, key, parent, path, ancestors) {
41 // skip visiting this Path Item
42 if (ancestors.some(predicates.isComponentsElement)) return;
43 if (!ancestors.some(predicates.isOpenApi3_1Element)) return;
44 const parentOpenapiElement = ancestors.find(predicates.isOpenApi3_1Element);
45 const isServersUndefined = typeof pathItemElement.servers === 'undefined';
46 const isServersArrayElement = predicates.isArrayElement(pathItemElement.servers);
47 const isServersEmpty = isServersArrayElement && pathItemElement.servers.length === 0;
48
49 // duplicate OpenAPI.servers into this Path Item object
50 if (predicates.isOpenApi3_1Element(parentOpenapiElement)) {
51 var _parentOpenapiElement;
52 const openapiServersContent = (_parentOpenapiElement = parentOpenapiElement.servers) == null ? void 0 : _parentOpenapiElement.content;
53 const openapiServers = openapiServersContent != null ? openapiServersContent : [];
54 if (isServersUndefined || !isServersArrayElement) {
55 pathItemElement.servers = new _apidomNsOpenapi.PathItemServersElement(openapiServers);
56 } else if (isServersArrayElement && isServersEmpty) {
57 openapiServers.forEach(server => {
58 pathItemElement.servers.push(server);
59 });
60 }
61 }
62 },
63 OperationElement(operationElement, key, parent, path, ancestors) {
64 // skip visiting this Operation
65 if (ancestors.some(predicates.isComponentsElement)) return;
66 if (!ancestors.some(predicates.isOpenApi3_1Element)) return;
67
68 // @TODO(vladimir.gorej@gmail.com): can be replaced by Array.prototype.findLast in future
69 const parentPathItemElement = [...ancestors].reverse().find(predicates.isPathItemElement);
70 const isServersUndefined = typeof operationElement.servers === 'undefined';
71 const isServersArrayElement = predicates.isArrayElement(operationElement.servers);
72 const isServersEmpty = isServersArrayElement && operationElement.servers.length === 0;
73 if (predicates.isPathItemElement(parentPathItemElement)) {
74 var _parentPathItemElemen;
75 const pathItemServersContent = (_parentPathItemElemen = parentPathItemElement.servers) == null ? void 0 : _parentPathItemElemen.content;
76 const pathItemServers = pathItemServersContent != null ? pathItemServersContent : [];
77 if (isServersUndefined || !isServersArrayElement) {
78 // duplicate parent PathItem.servers into this Operation object
79 operationElement.servers = new _apidomNsOpenapi.OperationServersElement(pathItemServers);
80 } else if (isServersArrayElement && isServersEmpty) {
81 pathItemServers.forEach(server => {
82 operationElement.servers.push(server);
83 });
84 }
85 }
86 }
87 }
88 };
89};
90/* eslint-enable */
91var _default = exports.default = plugin;
Note: See TracBrowser for help on using the repository browser.