swagger-client 3.36.2 → 3.37.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +8 -7
- package/dist/swagger-client.browser.js +29435 -21476
- package/dist/swagger-client.browser.min.js +1 -1
- package/dist/swagger-client.browser.min.js.map +1 -1
- package/es/helpers/openapi-predicates.js +11 -1
- package/es/index.js +12 -4
- package/es/resolver/apidom/reference/dereference/strategies/openapi-3-2-swagger-client/errors/SchemaRefError.js +3 -0
- package/es/resolver/apidom/reference/dereference/strategies/openapi-3-2-swagger-client/index.js +99 -0
- package/es/resolver/apidom/reference/dereference/strategies/openapi-3-2-swagger-client/utils/get-root-cause.js +17 -0
- package/es/resolver/apidom/reference/dereference/strategies/openapi-3-2-swagger-client/utils/to-path.js +23 -0
- package/es/resolver/apidom/reference/dereference/strategies/openapi-3-2-swagger-client/visitors/all-of.js +103 -0
- package/es/resolver/apidom/reference/dereference/strategies/openapi-3-2-swagger-client/visitors/dereference.js +677 -0
- package/es/resolver/apidom/reference/dereference/strategies/openapi-3-2-swagger-client/visitors/parameters.js +40 -0
- package/es/resolver/apidom/reference/dereference/strategies/openapi-3-2-swagger-client/visitors/properties.js +34 -0
- package/es/resolver/apidom/reference/dereference/strategies/openapi-3-2-swagger-client/visitors/root.js +45 -0
- package/es/resolver/apidom/reference/parse/parsers/openapi-json-3-2/index.js +55 -0
- package/es/resolver/apidom/reference/parse/parsers/openapi-yaml-3-2/index.js +56 -0
- package/es/resolver/strategies/openapi-3-2-apidom/index.js +28 -0
- package/es/resolver/strategies/openapi-3-2-apidom/normalize.js +44 -0
- package/es/resolver/strategies/openapi-3-2-apidom/resolve.js +161 -0
- package/lib/helpers/openapi-predicates.js +13 -2
- package/lib/index.js +29 -21
- package/lib/resolver/apidom/reference/dereference/strategies/openapi-3-2-swagger-client/errors/SchemaRefError.js +7 -0
- package/lib/resolver/apidom/reference/dereference/strategies/openapi-3-2-swagger-client/index.js +106 -0
- package/lib/resolver/apidom/reference/dereference/strategies/openapi-3-2-swagger-client/utils/get-root-cause.js +21 -0
- package/lib/resolver/apidom/reference/dereference/strategies/openapi-3-2-swagger-client/utils/to-path.js +27 -0
- package/lib/resolver/apidom/reference/dereference/strategies/openapi-3-2-swagger-client/visitors/all-of.js +108 -0
- package/lib/resolver/apidom/reference/dereference/strategies/openapi-3-2-swagger-client/visitors/dereference.js +683 -0
- package/lib/resolver/apidom/reference/dereference/strategies/openapi-3-2-swagger-client/visitors/parameters.js +45 -0
- package/lib/resolver/apidom/reference/dereference/strategies/openapi-3-2-swagger-client/visitors/properties.js +39 -0
- package/lib/resolver/apidom/reference/dereference/strategies/openapi-3-2-swagger-client/visitors/root.js +51 -0
- package/lib/resolver/apidom/reference/parse/parsers/openapi-json-3-2/index.js +60 -0
- package/lib/resolver/apidom/reference/parse/parsers/openapi-yaml-3-2/index.js +62 -0
- package/lib/resolver/strategies/openapi-3-2-apidom/index.js +34 -0
- package/lib/resolver/strategies/openapi-3-2-apidom/normalize.js +51 -0
- package/lib/resolver/strategies/openapi-3-2-apidom/resolve.js +169 -0
- package/package.json +32 -29
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { toValue } from '@swagger-api/apidom-core';
|
|
2
|
+
import toPath from '../utils/to-path.js';
|
|
3
|
+
class ParameterMacroVisitor {
|
|
4
|
+
parameterMacro;
|
|
5
|
+
options;
|
|
6
|
+
#macroOperation;
|
|
7
|
+
OperationElement = {
|
|
8
|
+
enter: operationElement => {
|
|
9
|
+
this.#macroOperation = operationElement;
|
|
10
|
+
},
|
|
11
|
+
leave: () => {
|
|
12
|
+
this.#macroOperation = undefined;
|
|
13
|
+
}
|
|
14
|
+
};
|
|
15
|
+
ParameterElement = {
|
|
16
|
+
leave: (parameterElement, key, parent, path, ancestors) => {
|
|
17
|
+
const pojoOperation = this.#macroOperation ? toValue(this.#macroOperation) : null;
|
|
18
|
+
const pojoParameter = toValue(parameterElement);
|
|
19
|
+
try {
|
|
20
|
+
const macroValue = this.parameterMacro(pojoOperation, pojoParameter);
|
|
21
|
+
parameterElement.set('default', macroValue);
|
|
22
|
+
} catch (error) {
|
|
23
|
+
var _this$options$derefer, _this$options$derefer2;
|
|
24
|
+
const macroError = new Error(error, {
|
|
25
|
+
cause: error
|
|
26
|
+
});
|
|
27
|
+
macroError.fullPath = toPath([...ancestors, parent]);
|
|
28
|
+
(_this$options$derefer = this.options.dereference.dereferenceOpts) === null || _this$options$derefer === void 0 || (_this$options$derefer = _this$options$derefer.errors) === null || _this$options$derefer === void 0 || (_this$options$derefer2 = _this$options$derefer.push) === null || _this$options$derefer2 === void 0 || _this$options$derefer2.call(_this$options$derefer, macroError);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
};
|
|
32
|
+
constructor({
|
|
33
|
+
parameterMacro,
|
|
34
|
+
options
|
|
35
|
+
}) {
|
|
36
|
+
this.parameterMacro = parameterMacro;
|
|
37
|
+
this.options = options;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
export default ParameterMacroVisitor;
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { isObjectElement, toValue } from '@swagger-api/apidom-core';
|
|
2
|
+
import toPath from '../utils/to-path.js';
|
|
3
|
+
class ModelPropertyMacroVisitor {
|
|
4
|
+
modelPropertyMacro;
|
|
5
|
+
options;
|
|
6
|
+
SchemaElement = {
|
|
7
|
+
leave: (schemaElement, key, parent, path, ancestors) => {
|
|
8
|
+
if (typeof schemaElement.properties === 'undefined') return;
|
|
9
|
+
if (!isObjectElement(schemaElement.properties)) return;
|
|
10
|
+
schemaElement.properties.forEach(property => {
|
|
11
|
+
if (!isObjectElement(property)) return;
|
|
12
|
+
try {
|
|
13
|
+
const macroValue = this.modelPropertyMacro(toValue(property));
|
|
14
|
+
property.set('default', macroValue);
|
|
15
|
+
} catch (error) {
|
|
16
|
+
var _this$options$derefer, _this$options$derefer2;
|
|
17
|
+
const macroError = new Error(error, {
|
|
18
|
+
cause: error
|
|
19
|
+
});
|
|
20
|
+
macroError.fullPath = [...toPath([...ancestors, parent, schemaElement]), 'properties'];
|
|
21
|
+
(_this$options$derefer = this.options.dereference.dereferenceOpts) === null || _this$options$derefer === void 0 || (_this$options$derefer = _this$options$derefer.errors) === null || _this$options$derefer === void 0 || (_this$options$derefer2 = _this$options$derefer.push) === null || _this$options$derefer2 === void 0 || _this$options$derefer2.call(_this$options$derefer, macroError);
|
|
22
|
+
}
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
};
|
|
26
|
+
constructor({
|
|
27
|
+
modelPropertyMacro,
|
|
28
|
+
options
|
|
29
|
+
}) {
|
|
30
|
+
this.modelPropertyMacro = modelPropertyMacro;
|
|
31
|
+
this.options = options;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
export default ModelPropertyMacroVisitor;
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { mergeAllVisitors } from '@swagger-api/apidom-core';
|
|
2
|
+
import { getNodeType } from '@swagger-api/apidom-ns-openapi-3-2';
|
|
3
|
+
import ModelPropertyMacroVisitor from './properties.js';
|
|
4
|
+
import AllOfVisitor from './all-of.js';
|
|
5
|
+
import ParameterMacroVisitor from './parameters.js';
|
|
6
|
+
import OpenAPI3_2SwaggerClientDereferenceVisitor from './dereference.js'; // eslint-disable-line camelcase
|
|
7
|
+
|
|
8
|
+
const mergeAllVisitorsAsync = mergeAllVisitors[Symbol.for('nodejs.util.promisify.custom')];
|
|
9
|
+
class RootVisitor {
|
|
10
|
+
constructor({
|
|
11
|
+
parameterMacro,
|
|
12
|
+
modelPropertyMacro,
|
|
13
|
+
mode,
|
|
14
|
+
options,
|
|
15
|
+
...rest
|
|
16
|
+
}) {
|
|
17
|
+
const visitors = [];
|
|
18
|
+
visitors.push(new OpenAPI3_2SwaggerClientDereferenceVisitor({
|
|
19
|
+
...rest,
|
|
20
|
+
options
|
|
21
|
+
}));
|
|
22
|
+
if (typeof modelPropertyMacro === 'function') {
|
|
23
|
+
visitors.push(new ModelPropertyMacroVisitor({
|
|
24
|
+
modelPropertyMacro,
|
|
25
|
+
options
|
|
26
|
+
}));
|
|
27
|
+
}
|
|
28
|
+
if (mode !== 'strict') {
|
|
29
|
+
visitors.push(new AllOfVisitor({
|
|
30
|
+
options
|
|
31
|
+
}));
|
|
32
|
+
}
|
|
33
|
+
if (typeof parameterMacro === 'function') {
|
|
34
|
+
visitors.push(new ParameterMacroVisitor({
|
|
35
|
+
parameterMacro,
|
|
36
|
+
options
|
|
37
|
+
}));
|
|
38
|
+
}
|
|
39
|
+
const mergedVisitor = mergeAllVisitorsAsync(visitors, {
|
|
40
|
+
nodeTypeGetter: getNodeType
|
|
41
|
+
});
|
|
42
|
+
Object.assign(this, mergedVisitor);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
export default RootVisitor;
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/* eslint-disable camelcase */
|
|
2
|
+
import { ParseResultElement } from '@swagger-api/apidom-core';
|
|
3
|
+
import { ParserError, Parser } from '@swagger-api/apidom-reference/configuration/empty';
|
|
4
|
+
import { mediaTypes, OpenApi3_2Element, OpenAPIMediaTypes } from '@swagger-api/apidom-ns-openapi-3-2';
|
|
5
|
+
class OpenAPIJSON3_2Parser extends Parser {
|
|
6
|
+
detectionRegExp = /"openapi"\s*:\s*"(?<version_json>3\.2\.(?:[1-9]\d*|0))"/;
|
|
7
|
+
constructor(options = {}) {
|
|
8
|
+
super({
|
|
9
|
+
name: 'openapi-json-3-2-swagger-client',
|
|
10
|
+
mediaTypes: new OpenAPIMediaTypes(...mediaTypes.filterByFormat('generic'), ...mediaTypes.filterByFormat('json')),
|
|
11
|
+
...options
|
|
12
|
+
});
|
|
13
|
+
}
|
|
14
|
+
async canParse(file) {
|
|
15
|
+
const hasSupportedFileExtension = this.fileExtensions.length === 0 ? true : this.fileExtensions.includes(file.extension);
|
|
16
|
+
const hasSupportedMediaType = this.mediaTypes.includes(file.mediaType);
|
|
17
|
+
if (!hasSupportedFileExtension) return false;
|
|
18
|
+
if (hasSupportedMediaType) return true;
|
|
19
|
+
if (!hasSupportedMediaType) {
|
|
20
|
+
try {
|
|
21
|
+
const source = file.toString();
|
|
22
|
+
JSON.parse(source);
|
|
23
|
+
return this.detectionRegExp.test(source);
|
|
24
|
+
} catch (error) {
|
|
25
|
+
return false;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
return false;
|
|
29
|
+
}
|
|
30
|
+
async parse(file) {
|
|
31
|
+
if (this.sourceMap) {
|
|
32
|
+
throw new ParserError("openapi-json-3-2-swagger-client parser plugin doesn't support sourceMaps option");
|
|
33
|
+
}
|
|
34
|
+
const parseResultElement = new ParseResultElement();
|
|
35
|
+
const source = file.toString();
|
|
36
|
+
|
|
37
|
+
// allow empty files
|
|
38
|
+
if (this.allowEmpty && source.trim() === '') {
|
|
39
|
+
return parseResultElement;
|
|
40
|
+
}
|
|
41
|
+
try {
|
|
42
|
+
const pojo = JSON.parse(source);
|
|
43
|
+
const element = OpenApi3_2Element.refract(pojo, this.refractorOpts);
|
|
44
|
+
element.classes.push('result');
|
|
45
|
+
parseResultElement.push(element);
|
|
46
|
+
return parseResultElement;
|
|
47
|
+
} catch (error) {
|
|
48
|
+
throw new ParserError(`Error parsing "${file.uri}"`, {
|
|
49
|
+
cause: error
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
export default OpenAPIJSON3_2Parser;
|
|
55
|
+
/* eslint-enable camelcase */
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/* eslint-disable camelcase */
|
|
2
|
+
import YAML, { JSON_SCHEMA } from 'js-yaml';
|
|
3
|
+
import { ParseResultElement } from '@swagger-api/apidom-core';
|
|
4
|
+
import { ParserError, Parser } from '@swagger-api/apidom-reference/configuration/empty';
|
|
5
|
+
import { mediaTypes, OpenApi3_2Element, OpenAPIMediaTypes } from '@swagger-api/apidom-ns-openapi-3-2';
|
|
6
|
+
class OpenAPIYAML32Parser extends Parser {
|
|
7
|
+
detectionRegExp = /(?<YAML>^(["']?)openapi\2\s*:\s*(["']?)(?<version_yaml>3\.2\.(?:[1-9]\d*|0))\3(?:\s+|$))|(?<JSON>"openapi"\s*:\s*"(?<version_json>3\.2\.(?:[1-9]\d*|0))")/m;
|
|
8
|
+
constructor(options = {}) {
|
|
9
|
+
super({
|
|
10
|
+
name: 'openapi-yaml-3-2-swagger-client',
|
|
11
|
+
mediaTypes: new OpenAPIMediaTypes(...mediaTypes.filterByFormat('generic'), ...mediaTypes.filterByFormat('yaml')),
|
|
12
|
+
...options
|
|
13
|
+
});
|
|
14
|
+
}
|
|
15
|
+
async canParse(file) {
|
|
16
|
+
const hasSupportedFileExtension = this.fileExtensions.length === 0 ? true : this.fileExtensions.includes(file.extension);
|
|
17
|
+
const hasSupportedMediaType = this.mediaTypes.includes(file.mediaType);
|
|
18
|
+
if (!hasSupportedFileExtension) return false;
|
|
19
|
+
if (hasSupportedMediaType) return true;
|
|
20
|
+
if (!hasSupportedMediaType) {
|
|
21
|
+
try {
|
|
22
|
+
const source = file.toString();
|
|
23
|
+
YAML.load(source);
|
|
24
|
+
return this.detectionRegExp.test(source);
|
|
25
|
+
} catch (error) {
|
|
26
|
+
return false;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
return false;
|
|
30
|
+
}
|
|
31
|
+
async parse(file) {
|
|
32
|
+
if (this.sourceMap) {
|
|
33
|
+
throw new ParserError("openapi-yaml-3-2-swagger-client parser plugin doesn't support sourceMaps option");
|
|
34
|
+
}
|
|
35
|
+
const parseResultElement = new ParseResultElement();
|
|
36
|
+
const source = file.toString();
|
|
37
|
+
try {
|
|
38
|
+
const pojo = YAML.load(source, {
|
|
39
|
+
schema: JSON_SCHEMA
|
|
40
|
+
});
|
|
41
|
+
if (this.allowEmpty && typeof pojo === 'undefined') {
|
|
42
|
+
return parseResultElement;
|
|
43
|
+
}
|
|
44
|
+
const element = OpenApi3_2Element.refract(pojo, this.refractorOpts);
|
|
45
|
+
element.classes.push('result');
|
|
46
|
+
parseResultElement.push(element);
|
|
47
|
+
return parseResultElement;
|
|
48
|
+
} catch (error) {
|
|
49
|
+
throw new ParserError(`Error parsing "${file.uri}"`, {
|
|
50
|
+
cause: error
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
export default OpenAPIYAML32Parser;
|
|
56
|
+
/* eslint-enable camelcase */
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { isPlainObject } from 'ramda-adjunct';
|
|
2
|
+
import { isElement } from '@swagger-api/apidom-core';
|
|
3
|
+
import resolveOpenAPI32Strategy from './resolve.js';
|
|
4
|
+
import normalize, { pojoAdapter } from './normalize.js';
|
|
5
|
+
import { isOpenAPI32 } from '../../../helpers/openapi-predicates.js';
|
|
6
|
+
const openApi32ApiDOMStrategy = {
|
|
7
|
+
name: 'openapi-3-2-apidom',
|
|
8
|
+
match(spec) {
|
|
9
|
+
return isOpenAPI32(spec);
|
|
10
|
+
},
|
|
11
|
+
normalize(spec) {
|
|
12
|
+
// pre-normalization - happens only once before the first lazy dereferencing and in JavaScript context
|
|
13
|
+
if (!isElement(spec) && isPlainObject(spec) && !spec.$$normalized) {
|
|
14
|
+
const preNormalized = pojoAdapter(normalize)(spec);
|
|
15
|
+
preNormalized.$$normalized = true;
|
|
16
|
+
return preNormalized;
|
|
17
|
+
}
|
|
18
|
+
// post-normalization - happens after each dereferencing and in ApiDOM context
|
|
19
|
+
if (isElement(spec)) {
|
|
20
|
+
return normalize(spec);
|
|
21
|
+
}
|
|
22
|
+
return spec;
|
|
23
|
+
},
|
|
24
|
+
async resolve(options) {
|
|
25
|
+
return resolveOpenAPI32Strategy(options);
|
|
26
|
+
}
|
|
27
|
+
};
|
|
28
|
+
export default openApi32ApiDOMStrategy;
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/* eslint-disable camelcase */
|
|
2
|
+
import { dispatchRefractorPlugins, isObjectElement, toValue } from '@swagger-api/apidom-core';
|
|
3
|
+
import { refractorPluginNormalizeOperationIds, refractorPluginNormalizeParameters, refractorPluginNormalizeSecurityRequirements, refractorPluginNormalizeParameterExamples, refractorPluginNormalizeHeaderExamples, createToolbox, keyMap, getNodeType, OpenApi3_2Element } from '@swagger-api/apidom-ns-openapi-3-2';
|
|
4
|
+
import opId from '../../../helpers/op-id.js';
|
|
5
|
+
import resolveOpenAPI32Strategy from './resolve.js';
|
|
6
|
+
const normalize = element => {
|
|
7
|
+
if (!isObjectElement(element)) return element;
|
|
8
|
+
const plugins = [refractorPluginNormalizeOperationIds({
|
|
9
|
+
operationIdNormalizer: (operationId, path, method) => opId({
|
|
10
|
+
operationId
|
|
11
|
+
}, path, method, {
|
|
12
|
+
v2OperationIdCompatibilityMode: false
|
|
13
|
+
})
|
|
14
|
+
}), refractorPluginNormalizeParameters(), refractorPluginNormalizeSecurityRequirements(), refractorPluginNormalizeParameterExamples(), refractorPluginNormalizeHeaderExamples()];
|
|
15
|
+
const normalized = dispatchRefractorPlugins(element, plugins, {
|
|
16
|
+
toolboxCreator: createToolbox,
|
|
17
|
+
visitorOptions: {
|
|
18
|
+
keyMap,
|
|
19
|
+
nodeTypeGetter: getNodeType
|
|
20
|
+
}
|
|
21
|
+
});
|
|
22
|
+
return normalized;
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* This adapter allow to perform normalization on Plain Old JavaScript Objects.
|
|
27
|
+
* The function adapts the `normalize` function interface and is able to accept
|
|
28
|
+
* Plain Old JavaScript Objects and returns Plain Old JavaScript Objects.
|
|
29
|
+
*/
|
|
30
|
+
export const pojoAdapter = normalizeFn => spec => {
|
|
31
|
+
const openApiElement = OpenApi3_2Element.refract(spec);
|
|
32
|
+
openApiElement.classes.push('result');
|
|
33
|
+
const normalized = normalizeFn(openApiElement);
|
|
34
|
+
const value = toValue(normalized);
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* We're setting the cache here to avoid repeated refracting
|
|
38
|
+
* in `openapi-3-2-apidom` strategy resolve method.
|
|
39
|
+
*/
|
|
40
|
+
resolveOpenAPI32Strategy.cache.set(value, normalized);
|
|
41
|
+
return toValue(normalized);
|
|
42
|
+
};
|
|
43
|
+
export default normalize;
|
|
44
|
+
/* eslint-enable camelcase */
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
/* eslint-disable camelcase */
|
|
2
|
+
import { ParseResultElement, ObjectElement, toValue, transclude, cloneDeep } from '@swagger-api/apidom-core';
|
|
3
|
+
import { compile as jsonPointerCompile, evaluate as jsonPointerEvaluate, JSONPointerEvaluateError } from '@swagger-api/apidom-json-pointer/modern';
|
|
4
|
+
import { mediaTypes, OpenApi3_2Element } from '@swagger-api/apidom-ns-openapi-3-2';
|
|
5
|
+
import { dereferenceApiDOM, url, ReferenceSet, Reference, options as referenceOptions } from '@swagger-api/apidom-reference/configuration/empty';
|
|
6
|
+
import BinaryParser from '@swagger-api/apidom-reference/parse/parsers/binary';
|
|
7
|
+
import OpenAPI3_1ResolveStrategy from '@swagger-api/apidom-reference/resolve/strategies/openapi-3-1';
|
|
8
|
+
import { DEFAULT_BASE_URL } from '../../../constants.js';
|
|
9
|
+
import * as optionsUtil from '../../utils/options.js';
|
|
10
|
+
import HTTPResolverSwaggerClient from '../../apidom/reference/resolve/resolvers/http-swagger-client/index.js';
|
|
11
|
+
import JSONParser from '../../apidom/reference/parse/parsers/json/index.js';
|
|
12
|
+
import YAMLParser from '../../apidom/reference/parse/parsers/yaml-1-2/index.js';
|
|
13
|
+
import OpenAPIJSON3_2Parser from '../../apidom/reference/parse/parsers/openapi-json-3-2/index.js';
|
|
14
|
+
import OpenAPIYAML3_2Parser from '../../apidom/reference/parse/parsers/openapi-yaml-3-2/index.js';
|
|
15
|
+
import OpenAPI3_2SwaggerClientDereferenceStrategy from '../../apidom/reference/dereference/strategies/openapi-3-2-swagger-client/index.js';
|
|
16
|
+
export const circularReplacer = refElement => {
|
|
17
|
+
const $refBaseURI = toValue(refElement.meta.get('baseURI'));
|
|
18
|
+
const referencingElement = refElement.meta.get('referencingElement');
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* Removing semantics from the absolutified referencing element by
|
|
22
|
+
* using generic ObjectElement to represent the reference.
|
|
23
|
+
*/
|
|
24
|
+
return new ObjectElement({
|
|
25
|
+
$ref: $refBaseURI
|
|
26
|
+
}, cloneDeep(referencingElement.meta), cloneDeep(referencingElement.attributes));
|
|
27
|
+
};
|
|
28
|
+
const resolveOpenAPI32Strategy = async options => {
|
|
29
|
+
const {
|
|
30
|
+
spec,
|
|
31
|
+
timeout,
|
|
32
|
+
redirects,
|
|
33
|
+
requestInterceptor,
|
|
34
|
+
responseInterceptor,
|
|
35
|
+
pathDiscriminator = [],
|
|
36
|
+
allowMetaPatches = false,
|
|
37
|
+
useCircularStructures = false,
|
|
38
|
+
skipNormalization = false,
|
|
39
|
+
parameterMacro = null,
|
|
40
|
+
modelPropertyMacro = null,
|
|
41
|
+
mode = 'non-strict',
|
|
42
|
+
strategies
|
|
43
|
+
} = options;
|
|
44
|
+
try {
|
|
45
|
+
const {
|
|
46
|
+
cache
|
|
47
|
+
} = resolveOpenAPI32Strategy;
|
|
48
|
+
const strategy = strategies.find(strg => strg.match(spec));
|
|
49
|
+
|
|
50
|
+
// determining BaseURI
|
|
51
|
+
const cwd = url.isHttpUrl(url.cwd()) ? url.cwd() : DEFAULT_BASE_URL;
|
|
52
|
+
const retrievalURI = optionsUtil.retrievalURI(options);
|
|
53
|
+
const baseURI = url.resolve(cwd, retrievalURI);
|
|
54
|
+
|
|
55
|
+
// prepare spec for dereferencing
|
|
56
|
+
let openApiElement;
|
|
57
|
+
if (cache.has(spec)) {
|
|
58
|
+
openApiElement = cache.get(spec);
|
|
59
|
+
} else {
|
|
60
|
+
openApiElement = OpenApi3_2Element.refract(spec);
|
|
61
|
+
openApiElement.classes.push('result');
|
|
62
|
+
cache.set(spec, openApiElement);
|
|
63
|
+
}
|
|
64
|
+
const openApiParseResultElement = new ParseResultElement([openApiElement]);
|
|
65
|
+
|
|
66
|
+
// prepare fragment for dereferencing
|
|
67
|
+
const jsonPointer = jsonPointerCompile(pathDiscriminator);
|
|
68
|
+
const jsonPointerURI = jsonPointer === '' ? '' : `#${jsonPointer}`;
|
|
69
|
+
const fragmentElement = jsonPointerEvaluate(openApiElement, jsonPointer);
|
|
70
|
+
|
|
71
|
+
// prepare reference set for dereferencing
|
|
72
|
+
const openApiElementReference = new Reference({
|
|
73
|
+
uri: baseURI,
|
|
74
|
+
value: openApiParseResultElement
|
|
75
|
+
});
|
|
76
|
+
const refSet = new ReferenceSet({
|
|
77
|
+
refs: [openApiElementReference]
|
|
78
|
+
});
|
|
79
|
+
if (jsonPointer !== '') refSet.rootRef = undefined; // reset root reference as we want fragment to become the root reference
|
|
80
|
+
|
|
81
|
+
// prepare ancestors; needed for cases where fragment is not OpenAPI element
|
|
82
|
+
const ancestors = [new Set([fragmentElement])];
|
|
83
|
+
const errors = [];
|
|
84
|
+
const dereferenced = await dereferenceApiDOM(fragmentElement, {
|
|
85
|
+
resolve: {
|
|
86
|
+
/**
|
|
87
|
+
* swagger-client only supports resolving HTTP(S) URLs or spec objects.
|
|
88
|
+
* If runtime env is detected as non-browser one,
|
|
89
|
+
* and baseURI was not provided as part of resolver options,
|
|
90
|
+
* then below baseURI check will make sure that constant HTTPS URL is used as baseURI.
|
|
91
|
+
*/
|
|
92
|
+
baseURI: `${baseURI}${jsonPointerURI}`,
|
|
93
|
+
resolvers: [new HTTPResolverSwaggerClient({
|
|
94
|
+
timeout: timeout || 10000,
|
|
95
|
+
redirects: redirects || 10
|
|
96
|
+
})],
|
|
97
|
+
resolverOpts: {
|
|
98
|
+
swaggerHTTPClientConfig: {
|
|
99
|
+
requestInterceptor,
|
|
100
|
+
responseInterceptor
|
|
101
|
+
}
|
|
102
|
+
},
|
|
103
|
+
strategies: [new OpenAPI3_1ResolveStrategy()]
|
|
104
|
+
},
|
|
105
|
+
parse: {
|
|
106
|
+
mediaType: mediaTypes.latest(),
|
|
107
|
+
parsers: [new OpenAPIJSON3_2Parser({
|
|
108
|
+
allowEmpty: false,
|
|
109
|
+
sourceMap: false
|
|
110
|
+
}), new OpenAPIYAML3_2Parser({
|
|
111
|
+
allowEmpty: false,
|
|
112
|
+
sourceMap: false
|
|
113
|
+
}), new JSONParser({
|
|
114
|
+
allowEmpty: false,
|
|
115
|
+
sourceMap: false
|
|
116
|
+
}), new YAMLParser({
|
|
117
|
+
allowEmpty: false,
|
|
118
|
+
sourceMap: false
|
|
119
|
+
}), new BinaryParser({
|
|
120
|
+
allowEmpty: false,
|
|
121
|
+
sourceMap: false
|
|
122
|
+
})]
|
|
123
|
+
},
|
|
124
|
+
dereference: {
|
|
125
|
+
maxDepth: 100,
|
|
126
|
+
strategies: [new OpenAPI3_2SwaggerClientDereferenceStrategy({
|
|
127
|
+
allowMetaPatches,
|
|
128
|
+
useCircularStructures,
|
|
129
|
+
parameterMacro,
|
|
130
|
+
modelPropertyMacro,
|
|
131
|
+
mode,
|
|
132
|
+
ancestors
|
|
133
|
+
})],
|
|
134
|
+
refSet,
|
|
135
|
+
dereferenceOpts: {
|
|
136
|
+
errors
|
|
137
|
+
},
|
|
138
|
+
immutable: false,
|
|
139
|
+
circular: useCircularStructures ? 'ignore' : 'replace',
|
|
140
|
+
circularReplacer: useCircularStructures ? referenceOptions.dereference.circularReplacer : circularReplacer
|
|
141
|
+
}
|
|
142
|
+
});
|
|
143
|
+
const transcluded = transclude(fragmentElement, dereferenced, openApiElement);
|
|
144
|
+
const normalized = skipNormalization ? transcluded : strategy.normalize(transcluded);
|
|
145
|
+
return {
|
|
146
|
+
spec: toValue(normalized),
|
|
147
|
+
errors
|
|
148
|
+
};
|
|
149
|
+
} catch (error) {
|
|
150
|
+
if (error instanceof JSONPointerEvaluateError) {
|
|
151
|
+
return {
|
|
152
|
+
spec,
|
|
153
|
+
errors: []
|
|
154
|
+
};
|
|
155
|
+
}
|
|
156
|
+
throw error;
|
|
157
|
+
}
|
|
158
|
+
};
|
|
159
|
+
resolveOpenAPI32Strategy.cache = new WeakMap();
|
|
160
|
+
export default resolveOpenAPI32Strategy;
|
|
161
|
+
/* eslint-enable camelcase */
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
exports.__esModule = true;
|
|
4
|
-
exports.isSwagger2 = exports.isOpenAPI31 = exports.isOpenAPI30 = exports.isOpenAPI3 = exports.isOpenAPI2 = void 0;
|
|
4
|
+
exports.isSwagger2 = exports.isOpenAPI32 = exports.isOpenAPI31 = exports.isOpenAPI30 = exports.isOpenAPI3 = exports.isOpenAPI2 = void 0;
|
|
5
5
|
const isOpenAPI2 = spec => {
|
|
6
6
|
try {
|
|
7
7
|
const {
|
|
@@ -35,7 +35,18 @@ const isOpenAPI31 = spec => {
|
|
|
35
35
|
}
|
|
36
36
|
};
|
|
37
37
|
exports.isOpenAPI31 = isOpenAPI31;
|
|
38
|
-
const
|
|
38
|
+
const isOpenAPI32 = spec => {
|
|
39
|
+
try {
|
|
40
|
+
const {
|
|
41
|
+
openapi
|
|
42
|
+
} = spec;
|
|
43
|
+
return typeof openapi === 'string' && /^3\.2\.(?:[1-9]\d*|0)$/.test(openapi);
|
|
44
|
+
} catch {
|
|
45
|
+
return false;
|
|
46
|
+
}
|
|
47
|
+
};
|
|
48
|
+
exports.isOpenAPI32 = isOpenAPI32;
|
|
49
|
+
const isOpenAPI3 = spec => isOpenAPI30(spec) || isOpenAPI31(spec) || isOpenAPI32(spec);
|
|
39
50
|
|
|
40
51
|
// backward compatibility export
|
|
41
52
|
exports.isOpenAPI3 = isOpenAPI3;
|
package/lib/index.js
CHANGED
|
@@ -13,59 +13,67 @@ var _index5 = _interopRequireDefault(require("./resolver/strategies/generic/inde
|
|
|
13
13
|
var _index6 = _interopRequireWildcard(require("./resolver/strategies/openapi-2/index.js"));
|
|
14
14
|
var _index7 = _interopRequireDefault(require("./resolver/strategies/openapi-3-0/index.js"));
|
|
15
15
|
var _index8 = _interopRequireDefault(require("./resolver/strategies/openapi-3-1-apidom/index.js"));
|
|
16
|
+
var _index9 = _interopRequireDefault(require("./resolver/strategies/openapi-3-2-apidom/index.js"));
|
|
16
17
|
var _interfaces = require("./interfaces.js");
|
|
17
|
-
var
|
|
18
|
-
var
|
|
18
|
+
var _index0 = require("./execute/index.js");
|
|
19
|
+
var _index1 = require("./helpers/index.js");
|
|
19
20
|
var _openapiPredicates = require("./helpers/openapi-predicates.js");
|
|
20
|
-
var
|
|
21
|
-
var
|
|
22
|
-
var
|
|
23
|
-
var
|
|
24
|
-
var
|
|
25
|
-
var
|
|
21
|
+
var _index10 = _interopRequireDefault(require("./resolver/apidom/reference/resolve/resolvers/http-swagger-client/index.js"));
|
|
22
|
+
var _index11 = _interopRequireDefault(require("./resolver/apidom/reference/parse/parsers/json/index.js"));
|
|
23
|
+
var _index12 = _interopRequireDefault(require("./resolver/apidom/reference/parse/parsers/yaml-1-2/index.js"));
|
|
24
|
+
var _index13 = _interopRequireDefault(require("./resolver/apidom/reference/parse/parsers/openapi-json-3-1/index.js"));
|
|
25
|
+
var _index14 = _interopRequireDefault(require("./resolver/apidom/reference/parse/parsers/openapi-yaml-3-1/index.js"));
|
|
26
|
+
var _index15 = _interopRequireDefault(require("./resolver/apidom/reference/parse/parsers/openapi-json-3-2/index.js"));
|
|
27
|
+
var _index16 = _interopRequireDefault(require("./resolver/apidom/reference/parse/parsers/openapi-yaml-3-2/index.js"));
|
|
28
|
+
var _index17 = _interopRequireDefault(require("./resolver/apidom/reference/dereference/strategies/openapi-3-1-swagger-client/index.js"));
|
|
29
|
+
var _index18 = _interopRequireDefault(require("./resolver/apidom/reference/dereference/strategies/openapi-3-2-swagger-client/index.js"));
|
|
26
30
|
/* eslint-disable camelcase */
|
|
27
31
|
|
|
28
32
|
Swagger.http = _index.default;
|
|
29
33
|
Swagger.makeHttp = _index.makeHttp.bind(null, Swagger.http);
|
|
30
34
|
Swagger.resolveStrategies = {
|
|
35
|
+
'openapi-3-2-apidom': _index9.default,
|
|
31
36
|
'openapi-3-1-apidom': _index8.default,
|
|
32
37
|
'openapi-3-0': _index7.default,
|
|
33
38
|
'openapi-2-0': _index6.default,
|
|
34
39
|
generic: _index5.default
|
|
35
40
|
};
|
|
36
41
|
Swagger.resolve = (0, _index3.makeResolve)({
|
|
37
|
-
strategies: [Swagger.resolveStrategies['openapi-3-1-apidom'], Swagger.resolveStrategies['openapi-3-0'], Swagger.resolveStrategies['openapi-2-0'], Swagger.resolveStrategies.generic]
|
|
42
|
+
strategies: [Swagger.resolveStrategies['openapi-3-2-apidom'], Swagger.resolveStrategies['openapi-3-1-apidom'], Swagger.resolveStrategies['openapi-3-0'], Swagger.resolveStrategies['openapi-2-0'], Swagger.resolveStrategies.generic]
|
|
38
43
|
});
|
|
39
44
|
Swagger.resolveSubtree = (0, _index4.makeResolveSubtree)({
|
|
40
|
-
strategies: [Swagger.resolveStrategies['openapi-3-1-apidom'], Swagger.resolveStrategies['openapi-3-0'], Swagger.resolveStrategies['openapi-2-0'], Swagger.resolveStrategies.generic]
|
|
45
|
+
strategies: [Swagger.resolveStrategies['openapi-3-2-apidom'], Swagger.resolveStrategies['openapi-3-1-apidom'], Swagger.resolveStrategies['openapi-3-0'], Swagger.resolveStrategies['openapi-2-0'], Swagger.resolveStrategies.generic]
|
|
41
46
|
});
|
|
42
|
-
Swagger.execute =
|
|
47
|
+
Swagger.execute = _index0.execute;
|
|
43
48
|
Swagger.serializeRes = _index.serializeRes;
|
|
44
49
|
Swagger.serializeHeaders = _index2.serializeHeaders;
|
|
45
50
|
Swagger.clearCache = _index6.clearCache;
|
|
46
51
|
Swagger.makeApisTagOperation = _interfaces.makeApisTagOperation;
|
|
47
|
-
Swagger.buildRequest =
|
|
52
|
+
Swagger.buildRequest = _index0.buildRequest;
|
|
48
53
|
Swagger.helpers = {
|
|
49
|
-
opId:
|
|
54
|
+
opId: _index1.opId
|
|
50
55
|
};
|
|
51
|
-
Swagger.getBaseUrl =
|
|
56
|
+
Swagger.getBaseUrl = _index0.baseUrl;
|
|
52
57
|
Swagger.apidom = {
|
|
53
58
|
resolve: {
|
|
54
59
|
resolvers: {
|
|
55
|
-
HTTPResolverSwaggerClient:
|
|
60
|
+
HTTPResolverSwaggerClient: _index10.default
|
|
56
61
|
}
|
|
57
62
|
},
|
|
58
63
|
parse: {
|
|
59
64
|
parsers: {
|
|
60
|
-
JsonParser:
|
|
61
|
-
YamlParser:
|
|
62
|
-
OpenApiJson3_1Parser:
|
|
63
|
-
OpenApiYaml3_1Parser:
|
|
65
|
+
JsonParser: _index11.default,
|
|
66
|
+
YamlParser: _index12.default,
|
|
67
|
+
OpenApiJson3_1Parser: _index13.default,
|
|
68
|
+
OpenApiYaml3_1Parser: _index14.default,
|
|
69
|
+
OpenApiJson3_2Parser: _index15.default,
|
|
70
|
+
OpenApiYaml3_2Parser: _index16.default
|
|
64
71
|
}
|
|
65
72
|
},
|
|
66
73
|
dereference: {
|
|
67
74
|
strategies: {
|
|
68
|
-
OpenApi3_1SwaggerClientDereferenceStrategy:
|
|
75
|
+
OpenApi3_1SwaggerClientDereferenceStrategy: _index17.default,
|
|
76
|
+
OpenApi3_2SwaggerClientDereferenceStrategy: _index18.default
|
|
69
77
|
}
|
|
70
78
|
}
|
|
71
79
|
};
|
|
@@ -132,7 +140,7 @@ Swagger.prototype.applyDefaults = function applyDefaults() {
|
|
|
132
140
|
spec
|
|
133
141
|
} = this;
|
|
134
142
|
const specUrl = this.url;
|
|
135
|
-
if ((0, _openapiPredicates.isOpenAPI2)(spec) && (0,
|
|
143
|
+
if ((0, _openapiPredicates.isOpenAPI2)(spec) && (0, _index1.isHttpUrl)(specUrl)) {
|
|
136
144
|
const parsed = new URL(specUrl);
|
|
137
145
|
if (!spec.host) {
|
|
138
146
|
spec.host = parsed.host;
|