@speclynx/apidom-reference 6.1.2 → 7.0.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 +63 -0
- package/README.md +57 -0
- package/dist/apidom-reference.browser.js +5783 -3741
- package/dist/apidom-reference.browser.min.js +1 -1
- package/package.json +31 -30
- package/src/File.cjs +5 -2
- package/src/File.mjs +5 -2
- package/src/bundle/index.cjs +6 -4
- package/src/bundle/index.mjs +6 -4
- package/src/bundle/strategies/arazzo-1/index.cjs +3 -2
- package/src/bundle/strategies/arazzo-1/index.mjs +3 -2
- package/src/bundle/strategies/asyncapi-2/index.cjs +3 -2
- package/src/bundle/strategies/asyncapi-2/index.mjs +3 -2
- package/src/bundle/strategies/openapi-2/index.cjs +3 -2
- package/src/bundle/strategies/openapi-2/index.mjs +3 -2
- package/src/bundle/strategies/openapi-3-0/index.cjs +3 -2
- package/src/bundle/strategies/openapi-3-0/index.mjs +3 -2
- package/src/bundle/strategies/openapi-3-1/index.cjs +3 -2
- package/src/bundle/strategies/openapi-3-1/index.mjs +3 -2
- package/src/dereference/index.cjs +8 -5
- package/src/dereference/index.mjs +8 -5
- package/src/dereference/strategies/DereferenceVisitor.cjs +588 -0
- package/src/dereference/strategies/DereferenceVisitor.mjs +580 -0
- package/src/dereference/strategies/arazzo-1/index.cjs +14 -39
- package/src/dereference/strategies/arazzo-1/index.mjs +15 -40
- package/src/dereference/strategies/arazzo-1/visitor.cjs +207 -331
- package/src/dereference/strategies/arazzo-1/visitor.mjs +215 -338
- package/src/dereference/strategies/asyncapi-2/index.cjs +11 -39
- package/src/dereference/strategies/asyncapi-2/index.mjs +11 -39
- package/src/dereference/strategies/asyncapi-2/visitor.cjs +133 -425
- package/src/dereference/strategies/asyncapi-2/visitor.mjs +137 -429
- package/src/dereference/strategies/openapi-2/index.cjs +12 -42
- package/src/dereference/strategies/openapi-2/index.mjs +12 -42
- package/src/dereference/strategies/openapi-2/visitor.cjs +168 -532
- package/src/dereference/strategies/openapi-2/visitor.mjs +172 -536
- package/src/dereference/strategies/openapi-3-0/index.cjs +12 -42
- package/src/dereference/strategies/openapi-3-0/index.mjs +12 -42
- package/src/dereference/strategies/openapi-3-0/visitor.cjs +194 -468
- package/src/dereference/strategies/openapi-3-0/visitor.mjs +199 -473
- package/src/dereference/strategies/openapi-3-1/index.cjs +16 -42
- package/src/dereference/strategies/openapi-3-1/index.mjs +16 -42
- package/src/dereference/strategies/openapi-3-1/visitor.cjs +350 -602
- package/src/dereference/strategies/openapi-3-1/visitor.mjs +357 -608
- package/src/dereference/strategies/overlay-1/index.cjs +3 -2
- package/src/dereference/strategies/overlay-1/index.mjs +3 -2
- package/src/index.cjs +0 -7
- package/src/index.mjs +0 -1
- package/src/options/index.cjs +4 -0
- package/src/options/index.mjs +4 -0
- package/src/options/util.cjs +7 -1
- package/src/options/util.mjs +8 -2
- package/src/parse/index.cjs +9 -1
- package/src/parse/index.mjs +9 -1
- package/src/parse/parsers/apidom-json/index.cjs +2 -1
- package/src/parse/parsers/apidom-json/index.mjs +2 -1
- package/src/parse/parsers/arazzo-json-1/index.cjs +2 -1
- package/src/parse/parsers/arazzo-json-1/index.mjs +2 -1
- package/src/parse/parsers/arazzo-yaml-1/index.cjs +2 -1
- package/src/parse/parsers/arazzo-yaml-1/index.mjs +2 -1
- package/src/parse/parsers/asyncapi-json-2/index.cjs +2 -1
- package/src/parse/parsers/asyncapi-json-2/index.mjs +2 -1
- package/src/parse/parsers/asyncapi-yaml-2/index.cjs +2 -1
- package/src/parse/parsers/asyncapi-yaml-2/index.mjs +2 -1
- package/src/parse/parsers/json/index.cjs +2 -1
- package/src/parse/parsers/json/index.mjs +2 -1
- package/src/parse/parsers/openapi-json-2/index.cjs +2 -1
- package/src/parse/parsers/openapi-json-2/index.mjs +2 -1
- package/src/parse/parsers/openapi-json-3-0/index.cjs +2 -1
- package/src/parse/parsers/openapi-json-3-0/index.mjs +2 -1
- package/src/parse/parsers/openapi-json-3-1/index.cjs +2 -1
- package/src/parse/parsers/openapi-json-3-1/index.mjs +2 -1
- package/src/parse/parsers/openapi-yaml-2/index.cjs +2 -1
- package/src/parse/parsers/openapi-yaml-2/index.mjs +2 -1
- package/src/parse/parsers/openapi-yaml-3-0/index.cjs +2 -1
- package/src/parse/parsers/openapi-yaml-3-0/index.mjs +2 -1
- package/src/parse/parsers/openapi-yaml-3-1/index.cjs +2 -1
- package/src/parse/parsers/openapi-yaml-3-1/index.mjs +2 -1
- package/src/parse/parsers/overlay-json-1/index.cjs +2 -1
- package/src/parse/parsers/overlay-json-1/index.mjs +2 -1
- package/src/parse/parsers/overlay-yaml-1/index.cjs +2 -1
- package/src/parse/parsers/overlay-yaml-1/index.mjs +2 -1
- package/src/parse/parsers/yaml-1-2/index.cjs +2 -1
- package/src/parse/parsers/yaml-1-2/index.mjs +2 -1
- package/src/resolve/index.cjs +6 -3
- package/src/resolve/index.mjs +6 -3
- package/src/util/url.cjs +38 -8
- package/src/util/url.mjs +35 -6
- package/types/apidom-reference.d.ts +13 -9
- package/types/dereference/strategies/DereferenceVisitor.d.ts +224 -0
- package/types/dereference/strategies/arazzo-1/index.d.ts +0 -1
- package/types/dereference/strategies/arazzo-1/visitor.d.ts +38 -38
- package/types/dereference/strategies/asyncapi-2/index.d.ts +0 -1
- package/types/dereference/strategies/asyncapi-2/visitor.d.ts +13 -29
- package/types/dereference/strategies/openapi-2/index.d.ts +0 -1
- package/types/dereference/strategies/openapi-2/visitor.d.ts +14 -29
- package/types/dereference/strategies/openapi-3-0/index.d.ts +0 -1
- package/types/dereference/strategies/openapi-3-0/visitor.d.ts +13 -28
- package/types/dereference/strategies/openapi-3-1/index.d.ts +0 -1
- package/types/dereference/strategies/openapi-3-1/visitor.d.ts +37 -33
- package/types/index.d.ts +0 -1
- package/types/util/url.d.ts +11 -0
- package/LICENSES/AFL-3.0.txt +0 -182
- package/LICENSES/BSD-3-Clause.txt +0 -26
- package/src/dereference/util.cjs +0 -33
- package/src/dereference/util.mjs +0 -27
- package/types/dereference/util.d.ts +0 -9
|
@@ -30,9 +30,8 @@ Object.defineProperty(exports, "resolveSchema$refField", {
|
|
|
30
30
|
}
|
|
31
31
|
});
|
|
32
32
|
var _ramda = require("ramda");
|
|
33
|
-
var _apidomDatamodel = require("@speclynx/apidom-datamodel");
|
|
34
|
-
var _apidomTraverse = require("@speclynx/apidom-traverse");
|
|
35
33
|
var _apidomNsOpenapi = require("@speclynx/apidom-ns-openapi-3-1");
|
|
34
|
+
var _mediaTypes = require("@swaggerexpert/media-types");
|
|
36
35
|
var _DereferenceStrategy = _interopRequireDefault(require("../DereferenceStrategy.cjs"));
|
|
37
36
|
var _Reference = _interopRequireDefault(require("../../../Reference.cjs"));
|
|
38
37
|
var _ReferenceSet = _interopRequireDefault(require("../../../ReferenceSet.cjs"));
|
|
@@ -54,72 +53,47 @@ class OpenAPI3_1DereferenceStrategy extends _DereferenceStrategy.default {
|
|
|
54
53
|
}
|
|
55
54
|
canDereference(file) {
|
|
56
55
|
// assert by media type
|
|
57
|
-
if (
|
|
58
|
-
return _apidomNsOpenapi.mediaTypes
|
|
56
|
+
if (!(0, _mediaTypes.matches)('text/plain', file.mediaType)) {
|
|
57
|
+
return (0, _mediaTypes.selectBestMatch)(_apidomNsOpenapi.mediaTypes, file.mediaType) !== null;
|
|
59
58
|
}
|
|
60
59
|
|
|
61
60
|
// assert by inspecting ApiDOM
|
|
62
61
|
return (0, _apidomNsOpenapi.isOpenApi3_1Element)(file.parseResult?.result);
|
|
63
62
|
}
|
|
64
63
|
async dereference(file, options) {
|
|
65
|
-
const
|
|
66
|
-
const mutableRefSet = new _ReferenceSet.default();
|
|
67
|
-
let refSet = immutableRefSet;
|
|
64
|
+
const refSet = options.dereference.refSet ?? new _ReferenceSet.default();
|
|
68
65
|
let reference;
|
|
69
|
-
if (!
|
|
66
|
+
if (!refSet.has(file.uri)) {
|
|
70
67
|
reference = new _Reference.default({
|
|
71
68
|
uri: file.uri,
|
|
72
69
|
value: file.parseResult
|
|
73
70
|
});
|
|
74
|
-
|
|
71
|
+
refSet.add(reference);
|
|
75
72
|
} else {
|
|
76
73
|
// pre-computed refSet was provided as configuration option
|
|
77
|
-
reference =
|
|
74
|
+
reference = refSet.find((0, _ramda.propEq)(file.uri, 'uri'));
|
|
78
75
|
}
|
|
79
76
|
|
|
80
77
|
/**
|
|
81
|
-
*
|
|
82
|
-
*
|
|
78
|
+
* With the immutable option the dereferenced element is a new tree,
|
|
79
|
+
* otherwise the dereferenced root is dereferenced in place.
|
|
83
80
|
*/
|
|
84
|
-
|
|
85
|
-
immutableRefSet.refs.map(ref => new _Reference.default({
|
|
86
|
-
...ref,
|
|
87
|
-
value: (0, _apidomDatamodel.cloneDeep)(ref.value)
|
|
88
|
-
})).forEach(ref => mutableRefSet.add(ref));
|
|
89
|
-
reference = mutableRefSet.find(ref => ref.uri === file.uri);
|
|
90
|
-
refSet = mutableRefSet;
|
|
91
|
-
}
|
|
92
|
-
const shouldDetectCircular = ['error', 'replace'].includes(options.dereference.circular);
|
|
81
|
+
const root = refSet.rootRef.value;
|
|
93
82
|
const visitor = new _visitor.default({
|
|
94
|
-
reference
|
|
95
|
-
options
|
|
96
|
-
ancestorSchema$ids: (0, _util.detachedRootSchema$ids)(refSet.rootRef.value.result)
|
|
83
|
+
reference,
|
|
84
|
+
options
|
|
97
85
|
});
|
|
98
|
-
const dereferencedElement = await
|
|
99
|
-
|
|
100
|
-
...(shouldDetectCircular && {
|
|
101
|
-
skipVisited: 'skip'
|
|
102
|
-
})
|
|
86
|
+
const dereferencedElement = await visitor.dereference(root, {
|
|
87
|
+
ancestorSchema$ids: (0, _util.detachedRootSchema$ids)(root.result)
|
|
103
88
|
});
|
|
104
89
|
|
|
105
90
|
/**
|
|
106
|
-
*
|
|
107
|
-
*/
|
|
108
|
-
if (options.dereference.immutable) {
|
|
109
|
-
mutableRefSet.refs.filter(ref => ref.uri.startsWith('immutable://')).map(ref => new _Reference.default({
|
|
110
|
-
...ref,
|
|
111
|
-
uri: ref.uri.replace(/^immutable:\/\//, '')
|
|
112
|
-
})).forEach(ref => immutableRefSet.add(ref));
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
/**
|
|
116
|
-
* Release all memory if this refSet was not provided as an configuration option.
|
|
91
|
+
* Release all memory if this refSet was not provided as a configuration option.
|
|
117
92
|
* If provided as configuration option, then provider is responsible for cleanup.
|
|
118
93
|
*/
|
|
119
94
|
if (options.dereference.refSet === null) {
|
|
120
|
-
|
|
95
|
+
refSet.clean();
|
|
121
96
|
}
|
|
122
|
-
mutableRefSet.clean();
|
|
123
97
|
return dereferencedElement;
|
|
124
98
|
}
|
|
125
99
|
}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { propEq } from 'ramda';
|
|
2
|
-
import { cloneDeep } from '@speclynx/apidom-datamodel';
|
|
3
|
-
import { traverseAsync } from '@speclynx/apidom-traverse';
|
|
4
2
|
import { isOpenApi3_1Element, mediaTypes } from '@speclynx/apidom-ns-openapi-3-1';
|
|
3
|
+
import { matches, selectBestMatch } from '@swaggerexpert/media-types';
|
|
5
4
|
import DereferenceStrategy from "../DereferenceStrategy.mjs";
|
|
6
5
|
import Reference from "../../../Reference.mjs";
|
|
7
6
|
import ReferenceSet from "../../../ReferenceSet.mjs";
|
|
@@ -22,72 +21,47 @@ class OpenAPI3_1DereferenceStrategy extends DereferenceStrategy {
|
|
|
22
21
|
}
|
|
23
22
|
canDereference(file) {
|
|
24
23
|
// assert by media type
|
|
25
|
-
if (
|
|
26
|
-
return mediaTypes
|
|
24
|
+
if (!matches('text/plain', file.mediaType)) {
|
|
25
|
+
return selectBestMatch(mediaTypes, file.mediaType) !== null;
|
|
27
26
|
}
|
|
28
27
|
|
|
29
28
|
// assert by inspecting ApiDOM
|
|
30
29
|
return isOpenApi3_1Element(file.parseResult?.result);
|
|
31
30
|
}
|
|
32
31
|
async dereference(file, options) {
|
|
33
|
-
const
|
|
34
|
-
const mutableRefSet = new ReferenceSet();
|
|
35
|
-
let refSet = immutableRefSet;
|
|
32
|
+
const refSet = options.dereference.refSet ?? new ReferenceSet();
|
|
36
33
|
let reference;
|
|
37
|
-
if (!
|
|
34
|
+
if (!refSet.has(file.uri)) {
|
|
38
35
|
reference = new Reference({
|
|
39
36
|
uri: file.uri,
|
|
40
37
|
value: file.parseResult
|
|
41
38
|
});
|
|
42
|
-
|
|
39
|
+
refSet.add(reference);
|
|
43
40
|
} else {
|
|
44
41
|
// pre-computed refSet was provided as configuration option
|
|
45
|
-
reference =
|
|
42
|
+
reference = refSet.find(propEq(file.uri, 'uri'));
|
|
46
43
|
}
|
|
47
44
|
|
|
48
45
|
/**
|
|
49
|
-
*
|
|
50
|
-
*
|
|
46
|
+
* With the immutable option the dereferenced element is a new tree,
|
|
47
|
+
* otherwise the dereferenced root is dereferenced in place.
|
|
51
48
|
*/
|
|
52
|
-
|
|
53
|
-
immutableRefSet.refs.map(ref => new Reference({
|
|
54
|
-
...ref,
|
|
55
|
-
value: cloneDeep(ref.value)
|
|
56
|
-
})).forEach(ref => mutableRefSet.add(ref));
|
|
57
|
-
reference = mutableRefSet.find(ref => ref.uri === file.uri);
|
|
58
|
-
refSet = mutableRefSet;
|
|
59
|
-
}
|
|
60
|
-
const shouldDetectCircular = ['error', 'replace'].includes(options.dereference.circular);
|
|
49
|
+
const root = refSet.rootRef.value;
|
|
61
50
|
const visitor = new OpenAPI3_1DereferenceVisitor({
|
|
62
|
-
reference
|
|
63
|
-
options
|
|
64
|
-
ancestorSchema$ids: detachedRootSchema$ids(refSet.rootRef.value.result)
|
|
51
|
+
reference,
|
|
52
|
+
options
|
|
65
53
|
});
|
|
66
|
-
const dereferencedElement = await
|
|
67
|
-
|
|
68
|
-
...(shouldDetectCircular && {
|
|
69
|
-
skipVisited: 'skip'
|
|
70
|
-
})
|
|
54
|
+
const dereferencedElement = await visitor.dereference(root, {
|
|
55
|
+
ancestorSchema$ids: detachedRootSchema$ids(root.result)
|
|
71
56
|
});
|
|
72
57
|
|
|
73
58
|
/**
|
|
74
|
-
*
|
|
75
|
-
*/
|
|
76
|
-
if (options.dereference.immutable) {
|
|
77
|
-
mutableRefSet.refs.filter(ref => ref.uri.startsWith('immutable://')).map(ref => new Reference({
|
|
78
|
-
...ref,
|
|
79
|
-
uri: ref.uri.replace(/^immutable:\/\//, '')
|
|
80
|
-
})).forEach(ref => immutableRefSet.add(ref));
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
/**
|
|
84
|
-
* Release all memory if this refSet was not provided as an configuration option.
|
|
59
|
+
* Release all memory if this refSet was not provided as a configuration option.
|
|
85
60
|
* If provided as configuration option, then provider is responsible for cleanup.
|
|
86
61
|
*/
|
|
87
62
|
if (options.dereference.refSet === null) {
|
|
88
|
-
|
|
63
|
+
refSet.clean();
|
|
89
64
|
}
|
|
90
|
-
mutableRefSet.clean();
|
|
91
65
|
return dereferencedElement;
|
|
92
66
|
}
|
|
93
67
|
}
|