@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
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { traverseAsync } from '@speclynx/apidom-traverse';
|
|
1
|
+
import { isParseResultElement, includesClasses } from '@speclynx/apidom-datamodel';
|
|
3
2
|
import { isArazzoSpecification1Element, mediaTypes } from '@speclynx/apidom-ns-arazzo-1';
|
|
3
|
+
import { matches, selectBestMatch } from '@swaggerexpert/media-types';
|
|
4
4
|
import DereferenceStrategy from "../DereferenceStrategy.mjs";
|
|
5
5
|
import Reference from "../../../Reference.mjs";
|
|
6
6
|
import ReferenceSet from "../../../ReferenceSet.mjs";
|
|
@@ -22,65 +22,41 @@ class Arazzo1DereferenceStrategy extends DereferenceStrategy {
|
|
|
22
22
|
}
|
|
23
23
|
canDereference(file) {
|
|
24
24
|
// assert by media type
|
|
25
|
-
if (
|
|
26
|
-
return mediaTypes
|
|
25
|
+
if (!matches('text/plain', file.mediaType)) {
|
|
26
|
+
return selectBestMatch(mediaTypes, file.mediaType) !== null;
|
|
27
27
|
}
|
|
28
28
|
|
|
29
29
|
// assert by inspecting ApiDOM
|
|
30
30
|
return isArazzoSpecification1Element(file.parseResult?.result);
|
|
31
31
|
}
|
|
32
32
|
async dereference(file, options) {
|
|
33
|
-
const
|
|
34
|
-
const mutableRefSet = new ReferenceSet();
|
|
35
|
-
let refSet = immutableRefSet;
|
|
33
|
+
const refSet = options.dereference.refSet ?? new ReferenceSet();
|
|
36
34
|
let reference;
|
|
37
|
-
if (!
|
|
35
|
+
if (!refSet.has(file.uri)) {
|
|
38
36
|
reference = new Reference({
|
|
39
37
|
uri: file.uri,
|
|
40
38
|
value: file.parseResult
|
|
41
39
|
});
|
|
42
|
-
|
|
40
|
+
refSet.add(reference);
|
|
43
41
|
} else {
|
|
44
42
|
// pre-computed refSet was provided as configuration option
|
|
45
|
-
reference =
|
|
43
|
+
reference = refSet.find(ref => ref.uri === file.uri);
|
|
46
44
|
}
|
|
47
45
|
|
|
48
46
|
/**
|
|
49
|
-
*
|
|
50
|
-
*
|
|
47
|
+
* With the immutable option the dereferenced element is a new tree,
|
|
48
|
+
* otherwise the dereferenced root is dereferenced in place.
|
|
51
49
|
*/
|
|
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);
|
|
50
|
+
const root = refSet.rootRef.value;
|
|
61
51
|
const visitor = new Arazzo1DereferenceVisitor({
|
|
62
52
|
reference,
|
|
63
53
|
options,
|
|
64
|
-
ancestorSchema$ids: detachedRootSchema$ids(
|
|
54
|
+
ancestorSchema$ids: detachedRootSchema$ids(root.result)
|
|
65
55
|
});
|
|
66
|
-
const dereferencedElement = await
|
|
67
|
-
|
|
68
|
-
...(shouldDetectCircular && {
|
|
69
|
-
skipVisited: 'skip'
|
|
70
|
-
})
|
|
56
|
+
const dereferencedElement = await visitor.dereference(root, {
|
|
57
|
+
ancestorSchema$ids: detachedRootSchema$ids(root.result)
|
|
71
58
|
});
|
|
72
59
|
|
|
73
|
-
/**
|
|
74
|
-
* If immutable option is set, replay refs from the refSet.
|
|
75
|
-
* Replayed before source descriptions are dereferenced, so they can reuse the refs.
|
|
76
|
-
*/
|
|
77
|
-
if (options.dereference.immutable) {
|
|
78
|
-
mutableRefSet.refs.filter(ref => ref.uri.startsWith('immutable://')).map(ref => new Reference({
|
|
79
|
-
...ref,
|
|
80
|
-
uri: ref.uri.replace(/^immutable:\/\//, '')
|
|
81
|
-
})).forEach(ref => immutableRefSet.add(ref));
|
|
82
|
-
}
|
|
83
|
-
|
|
84
60
|
/**
|
|
85
61
|
* Dereference source descriptions if option is enabled.
|
|
86
62
|
*/
|
|
@@ -100,9 +76,8 @@ class Arazzo1DereferenceStrategy extends DereferenceStrategy {
|
|
|
100
76
|
* If provided as configuration option, then provider is responsible for cleanup.
|
|
101
77
|
*/
|
|
102
78
|
if (options.dereference.refSet === null) {
|
|
103
|
-
|
|
79
|
+
refSet.clean();
|
|
104
80
|
}
|
|
105
|
-
mutableRefSet.clean();
|
|
106
81
|
return dereferencedElement;
|
|
107
82
|
}
|
|
108
83
|
}
|