@speclynx/apidom-reference 2.3.0 → 2.5.0
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/CHANGELOG.md +13 -0
- package/README.md +23 -1
- package/dist/apidom-reference.browser.js +3313 -620
- package/dist/apidom-reference.browser.min.js +1 -1
- package/package.json +32 -25
- package/src/configuration/saturated.cjs +11 -10
- package/src/configuration/saturated.mjs +2 -1
- package/src/dereference/strategies/arazzo-1/index.cjs +101 -0
- package/src/dereference/strategies/arazzo-1/index.mjs +91 -0
- package/src/dereference/strategies/arazzo-1/selectors/$anchor.cjs +12 -0
- package/src/dereference/strategies/arazzo-1/selectors/$anchor.mjs +1 -0
- package/src/dereference/strategies/arazzo-1/selectors/uri.cjs +8 -0
- package/src/dereference/strategies/arazzo-1/selectors/uri.mjs +1 -0
- package/src/dereference/strategies/arazzo-1/util.cjs +37 -0
- package/src/dereference/strategies/arazzo-1/util.mjs +29 -0
- package/src/dereference/strategies/arazzo-1/visitor.cjs +411 -0
- package/src/dereference/strategies/arazzo-1/visitor.mjs +405 -0
- package/src/dereference/strategies/asyncapi-2/visitor.cjs +1 -1
- package/src/dereference/strategies/asyncapi-2/visitor.mjs +2 -2
- package/src/dereference/strategies/openapi-3-1/selectors/$anchor.cjs +2 -2
- package/src/dereference/strategies/openapi-3-1/selectors/$anchor.mjs +2 -2
- package/src/dereference/strategies/openapi-3-1/selectors/uri.cjs +3 -3
- package/src/dereference/strategies/openapi-3-1/selectors/uri.mjs +3 -3
- package/src/dereference/strategies/openapi-3-1/visitor.cjs +8 -5
- package/src/dereference/strategies/openapi-3-1/visitor.mjs +10 -7
- package/types/dereference/strategies/arazzo-1/index.d.ts +32 -0
- package/types/dereference/strategies/arazzo-1/selectors/$anchor.d.ts +1 -0
- package/types/dereference/strategies/arazzo-1/selectors/uri.d.ts +1 -0
- package/types/dereference/strategies/arazzo-1/util.d.ts +13 -0
- package/types/dereference/strategies/arazzo-1/visitor.d.ts +32 -0
- package/types/dereference/strategies/openapi-3-1/util.d.ts +3 -3
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@speclynx/apidom-reference",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.5.0",
|
|
4
4
|
"description": "Advanced algorithms for semantic ApiDOM manipulations like dereferencing or resolution.",
|
|
5
5
|
"publishConfig": {
|
|
6
6
|
"access": "public",
|
|
@@ -171,6 +171,11 @@
|
|
|
171
171
|
"require": "./src/dereference/strategies/asyncapi-2/index.cjs",
|
|
172
172
|
"types": "./types/dereference/strategies/asyncapi-2/index.d.ts"
|
|
173
173
|
},
|
|
174
|
+
"./dereference/strategies/arazzo-1": {
|
|
175
|
+
"import": "./src/dereference/strategies/arazzo-1/index.mjs",
|
|
176
|
+
"require": "./src/dereference/strategies/arazzo-1/index.cjs",
|
|
177
|
+
"types": "./types/dereference/strategies/arazzo-1/index.d.ts"
|
|
178
|
+
},
|
|
174
179
|
"./dereference/strategies/openapi-2": {
|
|
175
180
|
"import": "./src/dereference/strategies/openapi-2/index.mjs",
|
|
176
181
|
"require": "./src/dereference/strategies/openapi-2/index.cjs",
|
|
@@ -213,7 +218,7 @@
|
|
|
213
218
|
"test": "npm run build:es && cross-env BABEL_ENV=es babel test --out-dir test --extensions '.ts' --out-file-extension '.mjs' --root-mode 'upward' && cross-env NODE_ENV=test mocha",
|
|
214
219
|
"perf": "cross-env BABEL_ENV=es babel ./test/perf/index.ts --out-file ./test/perf/index.mjs --root-mode 'upward' && cross-env NODE_ENV=test node ./test/perf/index.mjs",
|
|
215
220
|
"perf:openapi-3-1-dereference": "cross-env BABEL_ENV=es babel ./test/perf/openapi-3-1-dereference.ts --out-file ./test/perf/openapi-3-1-dereference.mjs --root-mode 'upward' && cross-env NODE_ENV=test node ./test/perf/openapi-3-1-dereference.mjs",
|
|
216
|
-
"typescript:check-types": "tsc --noEmit
|
|
221
|
+
"typescript:check-types": "tsc --noEmit",
|
|
217
222
|
"typescript:declaration": "tsc -p tsconfig.declaration.json && api-extractor run -l -c ./config/api-extractor/api-extractor.json",
|
|
218
223
|
"prepack": "copyfiles -u 3 ../../LICENSES/* LICENSES && copyfiles -u 2 ../../NOTICE .",
|
|
219
224
|
"postpack": "rimraf NOTICE LICENSES"
|
|
@@ -226,28 +231,30 @@
|
|
|
226
231
|
"license": "Apache-2.0",
|
|
227
232
|
"dependencies": {
|
|
228
233
|
"@babel/runtime-corejs3": "^7.28.4",
|
|
229
|
-
"@speclynx/apidom-core": "^2.
|
|
230
|
-
"@speclynx/apidom-datamodel": "^2.
|
|
231
|
-
"@speclynx/apidom-error": "^2.
|
|
232
|
-
"@speclynx/apidom-json-pointer": "^2.
|
|
233
|
-
"@speclynx/apidom-ns-arazzo-1": "^2.
|
|
234
|
-
"@speclynx/apidom-ns-asyncapi-2": "^2.
|
|
235
|
-
"@speclynx/apidom-ns-
|
|
236
|
-
"@speclynx/apidom-ns-openapi-
|
|
237
|
-
"@speclynx/apidom-ns-openapi-3-
|
|
238
|
-
"@speclynx/apidom-
|
|
239
|
-
"@speclynx/apidom-parser-adapter-arazzo-
|
|
240
|
-
"@speclynx/apidom-parser-adapter-
|
|
241
|
-
"@speclynx/apidom-parser-adapter-asyncapi-
|
|
242
|
-
"@speclynx/apidom-parser-adapter-
|
|
243
|
-
"@speclynx/apidom-parser-adapter-
|
|
244
|
-
"@speclynx/apidom-parser-adapter-openapi-json-
|
|
245
|
-
"@speclynx/apidom-parser-adapter-openapi-json-3-
|
|
246
|
-
"@speclynx/apidom-parser-adapter-openapi-
|
|
247
|
-
"@speclynx/apidom-parser-adapter-openapi-yaml-
|
|
248
|
-
"@speclynx/apidom-parser-adapter-openapi-yaml-3-
|
|
249
|
-
"@speclynx/apidom-parser-adapter-yaml-1
|
|
250
|
-
"@speclynx/apidom-
|
|
234
|
+
"@speclynx/apidom-core": "^2.5.0",
|
|
235
|
+
"@speclynx/apidom-datamodel": "^2.5.0",
|
|
236
|
+
"@speclynx/apidom-error": "^2.5.0",
|
|
237
|
+
"@speclynx/apidom-json-pointer": "^2.5.0",
|
|
238
|
+
"@speclynx/apidom-ns-arazzo-1": "^2.5.0",
|
|
239
|
+
"@speclynx/apidom-ns-asyncapi-2": "^2.5.0",
|
|
240
|
+
"@speclynx/apidom-ns-json-schema-2020-12": "^2.5.0",
|
|
241
|
+
"@speclynx/apidom-ns-openapi-2": "^2.5.0",
|
|
242
|
+
"@speclynx/apidom-ns-openapi-3-0": "^2.5.0",
|
|
243
|
+
"@speclynx/apidom-ns-openapi-3-1": "^2.5.0",
|
|
244
|
+
"@speclynx/apidom-parser-adapter-arazzo-json-1": "^2.5.0",
|
|
245
|
+
"@speclynx/apidom-parser-adapter-arazzo-yaml-1": "^2.5.0",
|
|
246
|
+
"@speclynx/apidom-parser-adapter-asyncapi-json-2": "^2.5.0",
|
|
247
|
+
"@speclynx/apidom-parser-adapter-asyncapi-yaml-2": "^2.5.0",
|
|
248
|
+
"@speclynx/apidom-parser-adapter-json": "^2.5.0",
|
|
249
|
+
"@speclynx/apidom-parser-adapter-openapi-json-2": "^2.5.0",
|
|
250
|
+
"@speclynx/apidom-parser-adapter-openapi-json-3-0": "^2.5.0",
|
|
251
|
+
"@speclynx/apidom-parser-adapter-openapi-json-3-1": "^2.5.0",
|
|
252
|
+
"@speclynx/apidom-parser-adapter-openapi-yaml-2": "^2.5.0",
|
|
253
|
+
"@speclynx/apidom-parser-adapter-openapi-yaml-3-0": "^2.5.0",
|
|
254
|
+
"@speclynx/apidom-parser-adapter-openapi-yaml-3-1": "^2.5.0",
|
|
255
|
+
"@speclynx/apidom-parser-adapter-yaml-1-2": "^2.5.0",
|
|
256
|
+
"@speclynx/apidom-traverse": "^2.5.0",
|
|
257
|
+
"@swaggerexpert/arazzo-runtime-expression": "^2.0.2",
|
|
251
258
|
"axios": "^1.13.0",
|
|
252
259
|
"minimatch": "^7.4.6",
|
|
253
260
|
"process": "^0.11.10",
|
|
@@ -267,5 +274,5 @@
|
|
|
267
274
|
"README.md",
|
|
268
275
|
"CHANGELOG.md"
|
|
269
276
|
],
|
|
270
|
-
"gitHead": "
|
|
277
|
+
"gitHead": "6473d0f9ea30c7fe89aae039e91a0859eaf3cd1c"
|
|
271
278
|
}
|
|
@@ -28,14 +28,15 @@ var _index19 = _interopRequireDefault(require("../dereference/strategies/openapi
|
|
|
28
28
|
var _index20 = _interopRequireDefault(require("../dereference/strategies/openapi-3-0/index.cjs"));
|
|
29
29
|
var _index21 = _interopRequireDefault(require("../dereference/strategies/openapi-3-1/index.cjs"));
|
|
30
30
|
var _index22 = _interopRequireDefault(require("../dereference/strategies/asyncapi-2/index.cjs"));
|
|
31
|
-
var _index23 = _interopRequireDefault(require("../
|
|
32
|
-
var _index24 = require("../index.cjs");
|
|
33
|
-
|
|
31
|
+
var _index23 = _interopRequireDefault(require("../dereference/strategies/arazzo-1/index.cjs"));
|
|
32
|
+
var _index24 = _interopRequireDefault(require("../bundle/strategies/openapi-3-1/index.cjs"));
|
|
33
|
+
var _index25 = require("../index.cjs");
|
|
34
|
+
Object.keys(_index25).forEach(function (key) {
|
|
34
35
|
if (key === "default" || key === "__esModule") return;
|
|
35
|
-
if (key in exports && exports[key] ===
|
|
36
|
-
exports[key] =
|
|
36
|
+
if (key in exports && exports[key] === _index25[key]) return;
|
|
37
|
+
exports[key] = _index25[key];
|
|
37
38
|
});
|
|
38
|
-
|
|
39
|
+
_index25.options.parse.parsers = [new _index7.default({
|
|
39
40
|
allowEmpty: true,
|
|
40
41
|
sourceMap: false
|
|
41
42
|
}), new _index8.default({
|
|
@@ -77,11 +78,11 @@ _index24.options.parse.parsers = [new _index7.default({
|
|
|
77
78
|
}), new _indexNode2.default({
|
|
78
79
|
allowEmpty: true
|
|
79
80
|
})];
|
|
80
|
-
|
|
81
|
+
_index25.options.resolve.resolvers = [new _indexNode.default(), new _index.default({
|
|
81
82
|
timeout: 5000,
|
|
82
83
|
redirects: 5,
|
|
83
84
|
withCredentials: false
|
|
84
85
|
})];
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
86
|
+
_index25.options.resolve.strategies = [new _index2.default(), new _index3.default(), new _index4.default(), new _index5.default(), new _index6.default()];
|
|
87
|
+
_index25.options.dereference.strategies = [new _index19.default(), new _index20.default(), new _index21.default(), new _index22.default(), new _index23.default(), new _index18.default()];
|
|
88
|
+
_index25.options.bundle.strategies = [new _index24.default()];
|
|
@@ -24,6 +24,7 @@ import OpenAPI2DereferenceStrategy from "../dereference/strategies/openapi-2/ind
|
|
|
24
24
|
import OpenAPI3_0DereferenceStrategy from "../dereference/strategies/openapi-3-0/index.mjs";
|
|
25
25
|
import OpenAPI3_1DereferenceStrategy from "../dereference/strategies/openapi-3-1/index.mjs";
|
|
26
26
|
import AsyncAPI2DereferenceStrategy from "../dereference/strategies/asyncapi-2/index.mjs";
|
|
27
|
+
import Arazzo1DereferenceStrategy from "../dereference/strategies/arazzo-1/index.mjs";
|
|
27
28
|
import OpenAPI3_1BundleStrategy from "../bundle/strategies/openapi-3-1/index.mjs";
|
|
28
29
|
import { options } from "../index.mjs";
|
|
29
30
|
options.parse.parsers = [new OpenAPIJSON2Parser({
|
|
@@ -74,6 +75,6 @@ options.resolve.resolvers = [new FileResolver(), new HTTPResolverAxios({
|
|
|
74
75
|
withCredentials: false
|
|
75
76
|
})];
|
|
76
77
|
options.resolve.strategies = [new OpenAPI2ResolveStrategy(), new OpenAPI3_0ResolveStrategy(), new OpenAPI3_1ResolveStrategy(), new AsyncAPI2ResolveStrategy(), new ApiDOMResolveStrategy()];
|
|
77
|
-
options.dereference.strategies = [new OpenAPI2DereferenceStrategy(), new OpenAPI3_0DereferenceStrategy(), new OpenAPI3_1DereferenceStrategy(), new AsyncAPI2DereferenceStrategy(), new ApiDOMDereferenceStrategy()];
|
|
78
|
+
options.dereference.strategies = [new OpenAPI2DereferenceStrategy(), new OpenAPI3_0DereferenceStrategy(), new OpenAPI3_1DereferenceStrategy(), new AsyncAPI2DereferenceStrategy(), new Arazzo1DereferenceStrategy(), new ApiDOMDereferenceStrategy()];
|
|
78
79
|
options.bundle.strategies = [new OpenAPI3_1BundleStrategy()];
|
|
79
80
|
export * from "../index.mjs";
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault").default;
|
|
4
|
+
var _interopRequireWildcard = require("@babel/runtime-corejs3/helpers/interopRequireWildcard").default;
|
|
5
|
+
exports.__esModule = true;
|
|
6
|
+
exports.resolveSchema$refField = exports.resolveSchema$idField = exports.maybeRefractToJSONSchemaElement = exports.default = void 0;
|
|
7
|
+
var _apidomDatamodel = require("@speclynx/apidom-datamodel");
|
|
8
|
+
var _apidomTraverse = require("@speclynx/apidom-traverse");
|
|
9
|
+
var _apidomNsArazzo = _interopRequireWildcard(require("@speclynx/apidom-ns-arazzo-1"));
|
|
10
|
+
var _DereferenceStrategy = _interopRequireDefault(require("../DereferenceStrategy.cjs"));
|
|
11
|
+
var _Reference = _interopRequireDefault(require("../../../Reference.cjs"));
|
|
12
|
+
var _ReferenceSet = _interopRequireDefault(require("../../../ReferenceSet.cjs"));
|
|
13
|
+
var _visitor = _interopRequireDefault(require("./visitor.cjs"));
|
|
14
|
+
exports.Arazzo1DereferenceVisitor = _visitor.default;
|
|
15
|
+
var _util = require("./util.cjs");
|
|
16
|
+
exports.resolveSchema$refField = _util.resolveSchema$refField;
|
|
17
|
+
exports.resolveSchema$idField = _util.resolveSchema$idField;
|
|
18
|
+
exports.maybeRefractToJSONSchemaElement = _util.maybeRefractToJSONSchemaElement;
|
|
19
|
+
/**
|
|
20
|
+
* @public
|
|
21
|
+
*/
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* @public
|
|
25
|
+
*/
|
|
26
|
+
class Arazzo1DereferenceStrategy extends _DereferenceStrategy.default {
|
|
27
|
+
constructor(options) {
|
|
28
|
+
super({
|
|
29
|
+
...(options ?? {}),
|
|
30
|
+
name: 'arazzo-1'
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
canDereference(file) {
|
|
34
|
+
// assert by media type
|
|
35
|
+
if (file.mediaType !== 'text/plain') {
|
|
36
|
+
return _apidomNsArazzo.mediaTypes.includes(file.mediaType);
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
// assert by inspecting ApiDOM
|
|
40
|
+
return (0, _apidomNsArazzo.isArazzoSpecification1Element)(file.parseResult?.api);
|
|
41
|
+
}
|
|
42
|
+
async dereference(file, options) {
|
|
43
|
+
const namespace = new _apidomDatamodel.Namespace().use(_apidomNsArazzo.default);
|
|
44
|
+
const immutableRefSet = options.dereference.refSet ?? new _ReferenceSet.default();
|
|
45
|
+
const mutableRefSet = new _ReferenceSet.default();
|
|
46
|
+
let refSet = immutableRefSet;
|
|
47
|
+
let reference;
|
|
48
|
+
if (!immutableRefSet.has(file.uri)) {
|
|
49
|
+
reference = new _Reference.default({
|
|
50
|
+
uri: file.uri,
|
|
51
|
+
value: file.parseResult
|
|
52
|
+
});
|
|
53
|
+
immutableRefSet.add(reference);
|
|
54
|
+
} else {
|
|
55
|
+
// pre-computed refSet was provided as configuration option
|
|
56
|
+
reference = immutableRefSet.find(ref => ref.uri === file.uri);
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* Clone refSet due the dereferencing process being mutable.
|
|
61
|
+
* We don't want to mutate the original refSet and the references.
|
|
62
|
+
*/
|
|
63
|
+
if (options.dereference.immutable) {
|
|
64
|
+
immutableRefSet.refs.map(ref => new _Reference.default({
|
|
65
|
+
...ref,
|
|
66
|
+
value: (0, _apidomDatamodel.cloneDeep)(ref.value)
|
|
67
|
+
})).forEach(ref => mutableRefSet.add(ref));
|
|
68
|
+
reference = mutableRefSet.find(ref => ref.uri === file.uri);
|
|
69
|
+
refSet = mutableRefSet;
|
|
70
|
+
}
|
|
71
|
+
const visitor = new _visitor.default({
|
|
72
|
+
reference,
|
|
73
|
+
namespace,
|
|
74
|
+
options
|
|
75
|
+
});
|
|
76
|
+
const dereferencedElement = await (0, _apidomTraverse.traverseAsync)(refSet.rootRef.value, visitor, {
|
|
77
|
+
mutable: true
|
|
78
|
+
});
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* If immutable option is set, replay refs from the refSet.
|
|
82
|
+
*/
|
|
83
|
+
if (options.dereference.immutable) {
|
|
84
|
+
mutableRefSet.refs.filter(ref => ref.uri.startsWith('immutable://')).map(ref => new _Reference.default({
|
|
85
|
+
...ref,
|
|
86
|
+
uri: ref.uri.replace(/^immutable:\/\//, '')
|
|
87
|
+
})).forEach(ref => immutableRefSet.add(ref));
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
/**
|
|
91
|
+
* Release all memory if this refSet was not provided as a configuration option.
|
|
92
|
+
* If provided as configuration option, then provider is responsible for cleanup.
|
|
93
|
+
*/
|
|
94
|
+
if (options.dereference.refSet === null) {
|
|
95
|
+
immutableRefSet.clean();
|
|
96
|
+
}
|
|
97
|
+
mutableRefSet.clean();
|
|
98
|
+
return dereferencedElement;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
var _default = exports.default = Arazzo1DereferenceStrategy;
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import { Namespace, cloneDeep } from '@speclynx/apidom-datamodel';
|
|
2
|
+
import { traverseAsync } from '@speclynx/apidom-traverse';
|
|
3
|
+
import arazzo1Namespace, { isArazzoSpecification1Element, mediaTypes } from '@speclynx/apidom-ns-arazzo-1';
|
|
4
|
+
import DereferenceStrategy from "../DereferenceStrategy.mjs";
|
|
5
|
+
import Reference from "../../../Reference.mjs";
|
|
6
|
+
import ReferenceSet from "../../../ReferenceSet.mjs";
|
|
7
|
+
import Arazzo1DereferenceVisitor from "./visitor.mjs";
|
|
8
|
+
/**
|
|
9
|
+
* @public
|
|
10
|
+
*/
|
|
11
|
+
/**
|
|
12
|
+
* @public
|
|
13
|
+
*/
|
|
14
|
+
class Arazzo1DereferenceStrategy extends DereferenceStrategy {
|
|
15
|
+
constructor(options) {
|
|
16
|
+
super({
|
|
17
|
+
...(options ?? {}),
|
|
18
|
+
name: 'arazzo-1'
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
canDereference(file) {
|
|
22
|
+
// assert by media type
|
|
23
|
+
if (file.mediaType !== 'text/plain') {
|
|
24
|
+
return mediaTypes.includes(file.mediaType);
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
// assert by inspecting ApiDOM
|
|
28
|
+
return isArazzoSpecification1Element(file.parseResult?.api);
|
|
29
|
+
}
|
|
30
|
+
async dereference(file, options) {
|
|
31
|
+
const namespace = new Namespace().use(arazzo1Namespace);
|
|
32
|
+
const immutableRefSet = options.dereference.refSet ?? new ReferenceSet();
|
|
33
|
+
const mutableRefSet = new ReferenceSet();
|
|
34
|
+
let refSet = immutableRefSet;
|
|
35
|
+
let reference;
|
|
36
|
+
if (!immutableRefSet.has(file.uri)) {
|
|
37
|
+
reference = new Reference({
|
|
38
|
+
uri: file.uri,
|
|
39
|
+
value: file.parseResult
|
|
40
|
+
});
|
|
41
|
+
immutableRefSet.add(reference);
|
|
42
|
+
} else {
|
|
43
|
+
// pre-computed refSet was provided as configuration option
|
|
44
|
+
reference = immutableRefSet.find(ref => ref.uri === file.uri);
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* Clone refSet due the dereferencing process being mutable.
|
|
49
|
+
* We don't want to mutate the original refSet and the references.
|
|
50
|
+
*/
|
|
51
|
+
if (options.dereference.immutable) {
|
|
52
|
+
immutableRefSet.refs.map(ref => new Reference({
|
|
53
|
+
...ref,
|
|
54
|
+
value: cloneDeep(ref.value)
|
|
55
|
+
})).forEach(ref => mutableRefSet.add(ref));
|
|
56
|
+
reference = mutableRefSet.find(ref => ref.uri === file.uri);
|
|
57
|
+
refSet = mutableRefSet;
|
|
58
|
+
}
|
|
59
|
+
const visitor = new Arazzo1DereferenceVisitor({
|
|
60
|
+
reference,
|
|
61
|
+
namespace,
|
|
62
|
+
options
|
|
63
|
+
});
|
|
64
|
+
const dereferencedElement = await traverseAsync(refSet.rootRef.value, visitor, {
|
|
65
|
+
mutable: true
|
|
66
|
+
});
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* If immutable option is set, replay refs from the refSet.
|
|
70
|
+
*/
|
|
71
|
+
if (options.dereference.immutable) {
|
|
72
|
+
mutableRefSet.refs.filter(ref => ref.uri.startsWith('immutable://')).map(ref => new Reference({
|
|
73
|
+
...ref,
|
|
74
|
+
uri: ref.uri.replace(/^immutable:\/\//, '')
|
|
75
|
+
})).forEach(ref => immutableRefSet.add(ref));
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
/**
|
|
79
|
+
* Release all memory if this refSet was not provided as a configuration option.
|
|
80
|
+
* If provided as configuration option, then provider is responsible for cleanup.
|
|
81
|
+
*/
|
|
82
|
+
if (options.dereference.refSet === null) {
|
|
83
|
+
immutableRefSet.clean();
|
|
84
|
+
}
|
|
85
|
+
mutableRefSet.clean();
|
|
86
|
+
return dereferencedElement;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
export { Arazzo1DereferenceVisitor };
|
|
90
|
+
export { resolveSchema$refField, resolveSchema$idField, maybeRefractToJSONSchemaElement } from "./util.mjs";
|
|
91
|
+
export default Arazzo1DereferenceStrategy;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
exports.__esModule = true;
|
|
4
|
+
exports.uriToAnchor = exports.parse = exports.isAnchor = exports.evaluate = exports.JsonSchema$anchorError = exports.InvalidJsonSchema$anchorError = exports.EvaluationJsonSchema$anchorError = void 0;
|
|
5
|
+
var _$anchor = require("../../openapi-3-1/selectors/$anchor.cjs");
|
|
6
|
+
exports.isAnchor = _$anchor.isAnchor;
|
|
7
|
+
exports.uriToAnchor = _$anchor.uriToAnchor;
|
|
8
|
+
exports.parse = _$anchor.parse;
|
|
9
|
+
exports.evaluate = _$anchor.evaluate;
|
|
10
|
+
exports.EvaluationJsonSchema$anchorError = _$anchor.EvaluationJsonSchema$anchorError;
|
|
11
|
+
exports.InvalidJsonSchema$anchorError = _$anchor.InvalidJsonSchema$anchorError;
|
|
12
|
+
exports.JsonSchema$anchorError = _$anchor.JsonSchema$anchorError;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { isAnchor, uriToAnchor, parse, evaluate, EvaluationJsonSchema$anchorError, InvalidJsonSchema$anchorError, JsonSchema$anchorError } from "../../openapi-3-1/selectors/$anchor.mjs";
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
exports.__esModule = true;
|
|
4
|
+
exports.evaluate = exports.JsonSchemaUriError = exports.EvaluationJsonSchemaUriError = void 0;
|
|
5
|
+
var _uri = require("../../openapi-3-1/selectors/uri.cjs");
|
|
6
|
+
exports.evaluate = _uri.evaluate;
|
|
7
|
+
exports.EvaluationJsonSchemaUriError = _uri.EvaluationJsonSchemaUriError;
|
|
8
|
+
exports.JsonSchemaUriError = _uri.JsonSchemaUriError;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { evaluate, EvaluationJsonSchemaUriError, JsonSchemaUriError } from "../../openapi-3-1/selectors/uri.mjs";
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
exports.__esModule = true;
|
|
4
|
+
exports.resolveSchema$refField = exports.resolveSchema$idField = exports.refractToJSONSchemaElement = exports.maybeRefractToJSONSchemaElement = void 0;
|
|
5
|
+
var _apidomDatamodel = require("@speclynx/apidom-datamodel");
|
|
6
|
+
var _apidomNsArazzo = require("@speclynx/apidom-ns-arazzo-1");
|
|
7
|
+
var _util = require("../openapi-3-1/util.cjs");
|
|
8
|
+
exports.resolveSchema$refField = _util.resolveSchema$refField;
|
|
9
|
+
exports.resolveSchema$idField = _util.resolveSchema$idField;
|
|
10
|
+
/**
|
|
11
|
+
* Cached version of JSONSchemaElement.refract.
|
|
12
|
+
*/
|
|
13
|
+
const refractToJSONSchemaElement = element => {
|
|
14
|
+
if (refractToJSONSchemaElement.cache.has(element)) {
|
|
15
|
+
return refractToJSONSchemaElement.cache.get(element);
|
|
16
|
+
}
|
|
17
|
+
const refracted = (0, _apidomNsArazzo.refractJSONSchema)(element);
|
|
18
|
+
refractToJSONSchemaElement.cache.set(element, refracted);
|
|
19
|
+
return refracted;
|
|
20
|
+
};
|
|
21
|
+
exports.refractToJSONSchemaElement = refractToJSONSchemaElement;
|
|
22
|
+
refractToJSONSchemaElement.cache = new WeakMap();
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* @public
|
|
26
|
+
*/
|
|
27
|
+
const maybeRefractToJSONSchemaElement = element => {
|
|
28
|
+
/**
|
|
29
|
+
* Conditional version of refractToJSONSchemaElement, that acts as an identity
|
|
30
|
+
* function for all non-primitive Element instances.
|
|
31
|
+
*/
|
|
32
|
+
if ((0, _apidomDatamodel.isPrimitiveElement)(element)) {
|
|
33
|
+
return refractToJSONSchemaElement(element);
|
|
34
|
+
}
|
|
35
|
+
return element;
|
|
36
|
+
};
|
|
37
|
+
exports.maybeRefractToJSONSchemaElement = maybeRefractToJSONSchemaElement;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { isPrimitiveElement } from '@speclynx/apidom-datamodel';
|
|
2
|
+
import { refractJSONSchema } from '@speclynx/apidom-ns-arazzo-1';
|
|
3
|
+
export { resolveSchema$refField, resolveSchema$idField } from "../openapi-3-1/util.mjs";
|
|
4
|
+
/**
|
|
5
|
+
* Cached version of JSONSchemaElement.refract.
|
|
6
|
+
*/
|
|
7
|
+
export const refractToJSONSchemaElement = element => {
|
|
8
|
+
if (refractToJSONSchemaElement.cache.has(element)) {
|
|
9
|
+
return refractToJSONSchemaElement.cache.get(element);
|
|
10
|
+
}
|
|
11
|
+
const refracted = refractJSONSchema(element);
|
|
12
|
+
refractToJSONSchemaElement.cache.set(element, refracted);
|
|
13
|
+
return refracted;
|
|
14
|
+
};
|
|
15
|
+
refractToJSONSchemaElement.cache = new WeakMap();
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* @public
|
|
19
|
+
*/
|
|
20
|
+
export const maybeRefractToJSONSchemaElement = element => {
|
|
21
|
+
/**
|
|
22
|
+
* Conditional version of refractToJSONSchemaElement, that acts as an identity
|
|
23
|
+
* function for all non-primitive Element instances.
|
|
24
|
+
*/
|
|
25
|
+
if (isPrimitiveElement(element)) {
|
|
26
|
+
return refractToJSONSchemaElement(element);
|
|
27
|
+
}
|
|
28
|
+
return element;
|
|
29
|
+
};
|