@speclynx/apidom-reference 4.2.0 → 4.3.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.
Files changed (33) hide show
  1. package/CHANGELOG.md +11 -0
  2. package/README.md +327 -0
  3. package/dist/apidom-reference.browser.js +23493 -21596
  4. package/dist/apidom-reference.browser.min.js +1 -1
  5. package/package.json +56 -28
  6. package/src/configuration/saturated.cjs +47 -36
  7. package/src/configuration/saturated.mjs +13 -2
  8. package/src/dereference/strategies/arazzo-1/index.cjs +7 -2
  9. package/src/dereference/strategies/arazzo-1/index.mjs +8 -3
  10. package/src/dereference/strategies/overlay-1/extends.cjs +93 -0
  11. package/src/dereference/strategies/overlay-1/extends.mjs +87 -0
  12. package/src/dereference/strategies/overlay-1/index.cjs +93 -0
  13. package/src/dereference/strategies/overlay-1/index.mjs +87 -0
  14. package/src/parse/parsers/overlay-json-1/extends.cjs +66 -0
  15. package/src/parse/parsers/overlay-json-1/extends.mjs +60 -0
  16. package/src/parse/parsers/overlay-json-1/index.cjs +61 -0
  17. package/src/parse/parsers/overlay-json-1/index.mjs +55 -0
  18. package/src/parse/parsers/overlay-yaml-1/extends.cjs +6 -0
  19. package/src/parse/parsers/overlay-yaml-1/extends.mjs +2 -0
  20. package/src/parse/parsers/overlay-yaml-1/index.cjs +61 -0
  21. package/src/parse/parsers/overlay-yaml-1/index.mjs +55 -0
  22. package/src/resolve/strategies/arazzo-1/index.cjs +49 -0
  23. package/src/resolve/strategies/arazzo-1/index.mjs +43 -0
  24. package/src/resolve/strategies/overlay-1/index.cjs +49 -0
  25. package/src/resolve/strategies/overlay-1/index.mjs +43 -0
  26. package/types/dereference/strategies/overlay-1/extends.d.ts +21 -0
  27. package/types/dereference/strategies/overlay-1/index.d.ts +28 -0
  28. package/types/parse/parsers/overlay-json-1/extends.d.ts +16 -0
  29. package/types/parse/parsers/overlay-json-1/index.d.ts +22 -0
  30. package/types/parse/parsers/overlay-yaml-1/extends.d.ts +1 -0
  31. package/types/parse/parsers/overlay-yaml-1/index.d.ts +22 -0
  32. package/types/resolve/strategies/arazzo-1/index.d.ts +27 -0
  33. package/types/resolve/strategies/overlay-1/index.d.ts +27 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@speclynx/apidom-reference",
3
- "version": "4.2.0",
3
+ "version": "4.3.1",
4
4
  "description": "Advanced algorithms for semantic ApiDOM manipulations like dereferencing or resolution.",
5
5
  "keywords": [
6
6
  "apidom",
@@ -87,6 +87,16 @@
87
87
  "require": "./src/resolve/strategies/asyncapi-2/index.cjs",
88
88
  "types": "./types/resolve/strategies/asyncapi-2/index.d.ts"
89
89
  },
90
+ "./resolve/strategies/arazzo-1": {
91
+ "import": "./src/resolve/strategies/arazzo-1/index.mjs",
92
+ "require": "./src/resolve/strategies/arazzo-1/index.cjs",
93
+ "types": "./types/resolve/strategies/arazzo-1/index.d.ts"
94
+ },
95
+ "./resolve/strategies/overlay-1": {
96
+ "import": "./src/resolve/strategies/overlay-1/index.mjs",
97
+ "require": "./src/resolve/strategies/overlay-1/index.cjs",
98
+ "types": "./types/resolve/strategies/overlay-1/index.d.ts"
99
+ },
90
100
  "./resolve/strategies/openapi-2": {
91
101
  "import": "./src/resolve/strategies/openapi-2/index.mjs",
92
102
  "require": "./src/resolve/strategies/openapi-2/index.cjs",
@@ -122,6 +132,16 @@
122
132
  "require": "./src/parse/parsers/arazzo-yaml-1/index.cjs",
123
133
  "types": "./types/parse/parsers/arazzo-yaml-1/index.d.ts"
124
134
  },
135
+ "./parse/parsers/overlay-json-1": {
136
+ "import": "./src/parse/parsers/overlay-json-1/index.mjs",
137
+ "require": "./src/parse/parsers/overlay-json-1/index.cjs",
138
+ "types": "./types/parse/parsers/overlay-json-1/index.d.ts"
139
+ },
140
+ "./parse/parsers/overlay-yaml-1": {
141
+ "import": "./src/parse/parsers/overlay-yaml-1/index.mjs",
142
+ "require": "./src/parse/parsers/overlay-yaml-1/index.cjs",
143
+ "types": "./types/parse/parsers/overlay-yaml-1/index.d.ts"
144
+ },
125
145
  "./parse/parsers/apidom-json": {
126
146
  "import": "./src/parse/parsers/apidom-json/index.mjs",
127
147
  "require": "./src/parse/parsers/apidom-json/index.cjs",
@@ -199,6 +219,11 @@
199
219
  "require": "./src/dereference/strategies/arazzo-1/index.cjs",
200
220
  "types": "./types/dereference/strategies/arazzo-1/index.d.ts"
201
221
  },
222
+ "./dereference/strategies/overlay-1": {
223
+ "import": "./src/dereference/strategies/overlay-1/index.mjs",
224
+ "require": "./src/dereference/strategies/overlay-1/index.cjs",
225
+ "types": "./types/dereference/strategies/overlay-1/index.d.ts"
226
+ },
202
227
  "./dereference/strategies/openapi-2": {
203
228
  "import": "./src/dereference/strategies/openapi-2/index.mjs",
204
229
  "require": "./src/dereference/strategies/openapi-2/index.cjs",
@@ -254,38 +279,41 @@
254
279
  "license": "Apache-2.0",
255
280
  "dependencies": {
256
281
  "@babel/runtime-corejs3": "^7.28.4",
257
- "@speclynx/apidom-core": "4.2.0",
258
- "@speclynx/apidom-datamodel": "4.2.0",
259
- "@speclynx/apidom-error": "4.2.0",
260
- "@speclynx/apidom-json-pointer": "4.2.0",
261
- "@speclynx/apidom-ns-arazzo-1": "4.2.0",
262
- "@speclynx/apidom-ns-asyncapi-2": "4.2.0",
263
- "@speclynx/apidom-ns-json-schema-2020-12": "4.2.0",
264
- "@speclynx/apidom-ns-openapi-2": "4.2.0",
265
- "@speclynx/apidom-ns-openapi-3-0": "4.2.0",
266
- "@speclynx/apidom-ns-openapi-3-1": "4.2.0",
267
- "@speclynx/apidom-parser-adapter-arazzo-json-1": "4.2.0",
268
- "@speclynx/apidom-parser-adapter-arazzo-yaml-1": "4.2.0",
269
- "@speclynx/apidom-parser-adapter-asyncapi-json-2": "4.2.0",
270
- "@speclynx/apidom-parser-adapter-asyncapi-yaml-2": "4.2.0",
271
- "@speclynx/apidom-parser-adapter-json": "4.2.0",
272
- "@speclynx/apidom-parser-adapter-openapi-json-2": "4.2.0",
273
- "@speclynx/apidom-parser-adapter-openapi-json-3-0": "4.2.0",
274
- "@speclynx/apidom-parser-adapter-openapi-json-3-1": "4.2.0",
275
- "@speclynx/apidom-parser-adapter-openapi-yaml-2": "4.2.0",
276
- "@speclynx/apidom-parser-adapter-openapi-yaml-3-0": "4.2.0",
277
- "@speclynx/apidom-parser-adapter-openapi-yaml-3-1": "4.2.0",
278
- "@speclynx/apidom-parser-adapter-yaml-1-2": "4.2.0",
279
- "@speclynx/apidom-traverse": "4.2.0",
282
+ "@speclynx/apidom-core": "4.3.1",
283
+ "@speclynx/apidom-datamodel": "4.3.1",
284
+ "@speclynx/apidom-error": "4.3.1",
285
+ "@speclynx/apidom-json-pointer": "4.3.1",
286
+ "@speclynx/apidom-ns-arazzo-1": "4.3.1",
287
+ "@speclynx/apidom-ns-asyncapi-2": "4.3.1",
288
+ "@speclynx/apidom-ns-json-schema-2020-12": "4.3.1",
289
+ "@speclynx/apidom-ns-openapi-2": "4.3.1",
290
+ "@speclynx/apidom-ns-openapi-3-0": "4.3.1",
291
+ "@speclynx/apidom-ns-openapi-3-1": "4.3.1",
292
+ "@speclynx/apidom-ns-overlay-1": "4.3.1",
293
+ "@speclynx/apidom-parser-adapter-arazzo-json-1": "4.3.1",
294
+ "@speclynx/apidom-parser-adapter-arazzo-yaml-1": "4.3.1",
295
+ "@speclynx/apidom-parser-adapter-asyncapi-json-2": "4.3.1",
296
+ "@speclynx/apidom-parser-adapter-asyncapi-yaml-2": "4.3.1",
297
+ "@speclynx/apidom-parser-adapter-json": "4.3.1",
298
+ "@speclynx/apidom-parser-adapter-openapi-json-2": "4.3.1",
299
+ "@speclynx/apidom-parser-adapter-openapi-json-3-0": "4.3.1",
300
+ "@speclynx/apidom-parser-adapter-openapi-json-3-1": "4.3.1",
301
+ "@speclynx/apidom-parser-adapter-openapi-yaml-2": "4.3.1",
302
+ "@speclynx/apidom-parser-adapter-openapi-yaml-3-0": "4.3.1",
303
+ "@speclynx/apidom-parser-adapter-openapi-yaml-3-1": "4.3.1",
304
+ "@speclynx/apidom-parser-adapter-overlay-json-1": "4.3.1",
305
+ "@speclynx/apidom-parser-adapter-overlay-yaml-1": "4.3.1",
306
+ "@speclynx/apidom-parser-adapter-yaml-1-2": "4.3.1",
307
+ "@speclynx/apidom-traverse": "4.3.1",
280
308
  "@swaggerexpert/arazzo-runtime-expression": "^2.0.3",
281
- "axios": "^1.13.5",
282
- "picomatch": "^4.0.3",
309
+ "axios": "^1.14.0",
310
+ "picomatch": "^4.0.4",
283
311
  "process": "^0.11.10",
284
312
  "ramda": "~0.32.0",
285
313
  "ramda-adjunct": "^6.0.0"
286
314
  },
287
315
  "devDependencies": {
288
- "@types/picomatch": "^4.0.2",
316
+ "@types/picomatch": "^4.0.3",
289
317
  "axios-mock-adapter": "^2.0.0"
290
318
  },
291
319
  "files": [
@@ -298,5 +326,5 @@
298
326
  "README.md",
299
327
  "CHANGELOG.md"
300
328
  ],
301
- "gitHead": "3485d180340f2d4fad149bcf062a6f618030ca9b"
329
+ "gitHead": "3082a613a41b54b74ad4b53946385c0bd8247b9b"
302
330
  }
@@ -8,41 +8,40 @@ var _index2 = _interopRequireDefault(require("../resolve/strategies/openapi-2/in
8
8
  var _index3 = _interopRequireDefault(require("../resolve/strategies/openapi-3-0/index.cjs"));
9
9
  var _index4 = _interopRequireDefault(require("../resolve/strategies/openapi-3-1/index.cjs"));
10
10
  var _index5 = _interopRequireDefault(require("../resolve/strategies/asyncapi-2/index.cjs"));
11
- var _index6 = _interopRequireDefault(require("../resolve/strategies/apidom/index.cjs"));
12
- var _index7 = _interopRequireDefault(require("../parse/parsers/openapi-json-2/index.cjs"));
13
- var _index8 = _interopRequireDefault(require("../parse/parsers/openapi-yaml-2/index.cjs"));
14
- var _index9 = _interopRequireDefault(require("../parse/parsers/openapi-json-3-0/index.cjs"));
15
- var _index0 = _interopRequireDefault(require("../parse/parsers/openapi-yaml-3-0/index.cjs"));
16
- var _index1 = _interopRequireDefault(require("../parse/parsers/openapi-json-3-1/index.cjs"));
17
- var _index10 = _interopRequireDefault(require("../parse/parsers/openapi-yaml-3-1/index.cjs"));
18
- var _index11 = _interopRequireDefault(require("../parse/parsers/asyncapi-json-2/index.cjs"));
19
- var _index12 = _interopRequireDefault(require("../parse/parsers/asyncapi-yaml-2/index.cjs"));
20
- var _index13 = _interopRequireDefault(require("../parse/parsers/arazzo-json-1/index.cjs"));
21
- var _index14 = _interopRequireDefault(require("../parse/parsers/arazzo-yaml-1/index.cjs"));
22
- var _index15 = _interopRequireDefault(require("../parse/parsers/apidom-json/index.cjs"));
23
- var _index16 = _interopRequireDefault(require("../parse/parsers/json/index.cjs"));
24
- var _index17 = _interopRequireDefault(require("../parse/parsers/yaml-1-2/index.cjs"));
11
+ var _index6 = _interopRequireDefault(require("../resolve/strategies/arazzo-1/index.cjs"));
12
+ var _index7 = _interopRequireDefault(require("../resolve/strategies/overlay-1/index.cjs"));
13
+ var _index8 = _interopRequireDefault(require("../resolve/strategies/apidom/index.cjs"));
14
+ var _index9 = _interopRequireDefault(require("../parse/parsers/openapi-json-2/index.cjs"));
15
+ var _index0 = _interopRequireDefault(require("../parse/parsers/openapi-yaml-2/index.cjs"));
16
+ var _index1 = _interopRequireDefault(require("../parse/parsers/openapi-json-3-0/index.cjs"));
17
+ var _index10 = _interopRequireDefault(require("../parse/parsers/openapi-yaml-3-0/index.cjs"));
18
+ var _index11 = _interopRequireDefault(require("../parse/parsers/openapi-json-3-1/index.cjs"));
19
+ var _index12 = _interopRequireDefault(require("../parse/parsers/openapi-yaml-3-1/index.cjs"));
20
+ var _index13 = _interopRequireDefault(require("../parse/parsers/asyncapi-json-2/index.cjs"));
21
+ var _index14 = _interopRequireDefault(require("../parse/parsers/asyncapi-yaml-2/index.cjs"));
22
+ var _index15 = _interopRequireDefault(require("../parse/parsers/arazzo-json-1/index.cjs"));
23
+ var _index16 = _interopRequireDefault(require("../parse/parsers/arazzo-yaml-1/index.cjs"));
24
+ var _index17 = _interopRequireDefault(require("../parse/parsers/overlay-json-1/index.cjs"));
25
+ var _index18 = _interopRequireDefault(require("../parse/parsers/overlay-yaml-1/index.cjs"));
26
+ var _index19 = _interopRequireDefault(require("../parse/parsers/apidom-json/index.cjs"));
27
+ var _index20 = _interopRequireDefault(require("../parse/parsers/json/index.cjs"));
28
+ var _index21 = _interopRequireDefault(require("../parse/parsers/yaml-1-2/index.cjs"));
25
29
  var _indexNode2 = _interopRequireDefault(require("../parse/parsers/binary/index-node.cjs"));
26
- var _index18 = _interopRequireDefault(require("../dereference/strategies/apidom/index.cjs"));
27
- var _index19 = _interopRequireDefault(require("../dereference/strategies/openapi-2/index.cjs"));
28
- var _index20 = _interopRequireDefault(require("../dereference/strategies/openapi-3-0/index.cjs"));
29
- var _index21 = _interopRequireDefault(require("../dereference/strategies/openapi-3-1/index.cjs"));
30
- var _index22 = _interopRequireDefault(require("../dereference/strategies/asyncapi-2/index.cjs"));
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) {
30
+ var _index22 = _interopRequireDefault(require("../dereference/strategies/apidom/index.cjs"));
31
+ var _index23 = _interopRequireDefault(require("../dereference/strategies/openapi-2/index.cjs"));
32
+ var _index24 = _interopRequireDefault(require("../dereference/strategies/openapi-3-0/index.cjs"));
33
+ var _index25 = _interopRequireDefault(require("../dereference/strategies/openapi-3-1/index.cjs"));
34
+ var _index26 = _interopRequireDefault(require("../dereference/strategies/asyncapi-2/index.cjs"));
35
+ var _index27 = _interopRequireDefault(require("../dereference/strategies/arazzo-1/index.cjs"));
36
+ var _index28 = _interopRequireDefault(require("../dereference/strategies/overlay-1/index.cjs"));
37
+ var _index29 = _interopRequireDefault(require("../bundle/strategies/openapi-3-1/index.cjs"));
38
+ var _index30 = require("../index.cjs");
39
+ Object.keys(_index30).forEach(function (key) {
35
40
  if (key === "default" || key === "__esModule") return;
36
- if (key in exports && exports[key] === _index25[key]) return;
37
- exports[key] = _index25[key];
41
+ if (key in exports && exports[key] === _index30[key]) return;
42
+ exports[key] = _index30[key];
38
43
  });
39
- _index25.options.parse.parsers = [new _index7.default({
40
- allowEmpty: true,
41
- sourceMap: false
42
- }), new _index8.default({
43
- allowEmpty: true,
44
- sourceMap: false
45
- }), new _index9.default({
44
+ _index30.options.parse.parsers = [new _index9.default({
46
45
  allowEmpty: true,
47
46
  sourceMap: false
48
47
  }), new _index0.default({
@@ -75,14 +74,26 @@ _index25.options.parse.parsers = [new _index7.default({
75
74
  }), new _index17.default({
76
75
  allowEmpty: true,
77
76
  sourceMap: false
77
+ }), new _index18.default({
78
+ allowEmpty: true,
79
+ sourceMap: false
80
+ }), new _index19.default({
81
+ allowEmpty: true,
82
+ sourceMap: false
83
+ }), new _index20.default({
84
+ allowEmpty: true,
85
+ sourceMap: false
86
+ }), new _index21.default({
87
+ allowEmpty: true,
88
+ sourceMap: false
78
89
  }), new _indexNode2.default({
79
90
  allowEmpty: true
80
91
  })];
81
- _index25.options.resolve.resolvers = [new _indexNode.default(), new _index.default({
92
+ _index30.options.resolve.resolvers = [new _indexNode.default(), new _index.default({
82
93
  timeout: 5000,
83
94
  redirects: 5,
84
95
  withCredentials: false
85
96
  })];
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()];
97
+ _index30.options.resolve.strategies = [new _index2.default(), new _index3.default(), new _index4.default(), new _index5.default(), new _index6.default(), new _index7.default(), new _index8.default()];
98
+ _index30.options.dereference.strategies = [new _index23.default(), new _index24.default(), new _index25.default(), new _index26.default(), new _index27.default(), new _index28.default(), new _index22.default()];
99
+ _index30.options.bundle.strategies = [new _index29.default()];
@@ -4,6 +4,8 @@ import OpenAPI2ResolveStrategy from "../resolve/strategies/openapi-2/index.mjs";
4
4
  import OpenAPI3_0ResolveStrategy from "../resolve/strategies/openapi-3-0/index.mjs";
5
5
  import OpenAPI3_1ResolveStrategy from "../resolve/strategies/openapi-3-1/index.mjs";
6
6
  import AsyncAPI2ResolveStrategy from "../resolve/strategies/asyncapi-2/index.mjs";
7
+ import Arazzo1ResolveStrategy from "../resolve/strategies/arazzo-1/index.mjs";
8
+ import Overlay1ResolveStrategy from "../resolve/strategies/overlay-1/index.mjs";
7
9
  import ApiDOMResolveStrategy from "../resolve/strategies/apidom/index.mjs";
8
10
  import OpenAPIJSON2Parser from "../parse/parsers/openapi-json-2/index.mjs";
9
11
  import OpenAPIYAML2Parser from "../parse/parsers/openapi-yaml-2/index.mjs";
@@ -15,6 +17,8 @@ import AsyncAPIJSON2Parser from "../parse/parsers/asyncapi-json-2/index.mjs";
15
17
  import AsyncAPIYAML2Parser from "../parse/parsers/asyncapi-yaml-2/index.mjs";
16
18
  import ArazzoJSON1Parser from "../parse/parsers/arazzo-json-1/index.mjs";
17
19
  import ArazzoYAML1Parser from "../parse/parsers/arazzo-yaml-1/index.mjs";
20
+ import OverlayJSON1Parser from "../parse/parsers/overlay-json-1/index.mjs";
21
+ import OverlayYAML1Parser from "../parse/parsers/overlay-yaml-1/index.mjs";
18
22
  import APIDOMJSONParser from "../parse/parsers/apidom-json/index.mjs";
19
23
  import JSONParser from "../parse/parsers/json/index.mjs";
20
24
  import YAMLParser from "../parse/parsers/yaml-1-2/index.mjs";
@@ -25,6 +29,7 @@ import OpenAPI3_0DereferenceStrategy from "../dereference/strategies/openapi-3-0
25
29
  import OpenAPI3_1DereferenceStrategy from "../dereference/strategies/openapi-3-1/index.mjs";
26
30
  import AsyncAPI2DereferenceStrategy from "../dereference/strategies/asyncapi-2/index.mjs";
27
31
  import Arazzo1DereferenceStrategy from "../dereference/strategies/arazzo-1/index.mjs";
32
+ import Overlay1DereferenceStrategy from "../dereference/strategies/overlay-1/index.mjs";
28
33
  import OpenAPI3_1BundleStrategy from "../bundle/strategies/openapi-3-1/index.mjs";
29
34
  import { options } from "../index.mjs";
30
35
  options.parse.parsers = [new OpenAPIJSON2Parser({
@@ -57,6 +62,12 @@ options.parse.parsers = [new OpenAPIJSON2Parser({
57
62
  }), new ArazzoYAML1Parser({
58
63
  allowEmpty: true,
59
64
  sourceMap: false
65
+ }), new OverlayJSON1Parser({
66
+ allowEmpty: true,
67
+ sourceMap: false
68
+ }), new OverlayYAML1Parser({
69
+ allowEmpty: true,
70
+ sourceMap: false
60
71
  }), new APIDOMJSONParser({
61
72
  allowEmpty: true,
62
73
  sourceMap: false
@@ -74,7 +85,7 @@ options.resolve.resolvers = [new FileResolver(), new HTTPResolverAxios({
74
85
  redirects: 5,
75
86
  withCredentials: false
76
87
  })];
77
- options.resolve.strategies = [new OpenAPI2ResolveStrategy(), new OpenAPI3_0ResolveStrategy(), new OpenAPI3_1ResolveStrategy(), new AsyncAPI2ResolveStrategy(), new ApiDOMResolveStrategy()];
78
- options.dereference.strategies = [new OpenAPI2DereferenceStrategy(), new OpenAPI3_0DereferenceStrategy(), new OpenAPI3_1DereferenceStrategy(), new AsyncAPI2DereferenceStrategy(), new Arazzo1DereferenceStrategy(), new ApiDOMDereferenceStrategy()];
88
+ options.resolve.strategies = [new OpenAPI2ResolveStrategy(), new OpenAPI3_0ResolveStrategy(), new OpenAPI3_1ResolveStrategy(), new AsyncAPI2ResolveStrategy(), new Arazzo1ResolveStrategy(), new Overlay1ResolveStrategy(), new ApiDOMResolveStrategy()];
89
+ options.dereference.strategies = [new OpenAPI2DereferenceStrategy(), new OpenAPI3_0DereferenceStrategy(), new OpenAPI3_1DereferenceStrategy(), new AsyncAPI2DereferenceStrategy(), new Arazzo1DereferenceStrategy(), new Overlay1DereferenceStrategy(), new ApiDOMDereferenceStrategy()];
79
90
  options.bundle.strategies = [new OpenAPI3_1BundleStrategy()];
80
91
  export * from "../index.mjs";
@@ -81,8 +81,13 @@ class Arazzo1DereferenceStrategy extends _DereferenceStrategy.default {
81
81
  */
82
82
  const shouldDereferenceSourceDescriptions = options?.dereference?.strategyOpts?.[this.name]?.sourceDescriptions ?? options?.dereference?.strategyOpts?.sourceDescriptions;
83
83
  if (shouldDereferenceSourceDescriptions) {
84
- const sourceDescriptions = await (0, _sourceDescriptions.dereferenceSourceDescriptions)(dereferencedElement, reference.uri, options, this.name);
85
- dereferencedElement.push(...sourceDescriptions);
84
+ const parseResult = dereferencedElement;
85
+
86
+ // drop any existing parse-phase source description results before pushing
87
+ const cleaned = parseResult.reject(item => (0, _apidomDatamodel.isParseResultElement)(item) && (0, _apidomDatamodel.includesClasses)(item, ['source-description']));
88
+ parseResult.content = cleaned.content;
89
+ const sourceDescriptions = await (0, _sourceDescriptions.dereferenceSourceDescriptions)(parseResult, reference.uri, options, this.name);
90
+ parseResult.push(...sourceDescriptions);
86
91
  }
87
92
 
88
93
  /**
@@ -1,4 +1,4 @@
1
- import { cloneDeep } from '@speclynx/apidom-datamodel';
1
+ import { cloneDeep, isParseResultElement, includesClasses } from '@speclynx/apidom-datamodel';
2
2
  import { traverseAsync } from '@speclynx/apidom-traverse';
3
3
  import { isArazzoSpecification1Element, mediaTypes } from '@speclynx/apidom-ns-arazzo-1';
4
4
  import DereferenceStrategy from "../DereferenceStrategy.mjs";
@@ -69,8 +69,13 @@ class Arazzo1DereferenceStrategy extends DereferenceStrategy {
69
69
  */
70
70
  const shouldDereferenceSourceDescriptions = options?.dereference?.strategyOpts?.[this.name]?.sourceDescriptions ?? options?.dereference?.strategyOpts?.sourceDescriptions;
71
71
  if (shouldDereferenceSourceDescriptions) {
72
- const sourceDescriptions = await dereferenceSourceDescriptions(dereferencedElement, reference.uri, options, this.name);
73
- dereferencedElement.push(...sourceDescriptions);
72
+ const parseResult = dereferencedElement;
73
+
74
+ // drop any existing parse-phase source description results before pushing
75
+ const cleaned = parseResult.reject(item => isParseResultElement(item) && includesClasses(item, ['source-description']));
76
+ parseResult.content = cleaned.content;
77
+ const sourceDescriptions = await dereferenceSourceDescriptions(parseResult, reference.uri, options, this.name);
78
+ parseResult.push(...sourceDescriptions);
74
79
  }
75
80
 
76
81
  /**
@@ -0,0 +1,93 @@
1
+ "use strict";
2
+
3
+ var _interopRequireWildcard = require("@babel/runtime-corejs3/helpers/interopRequireWildcard").default;
4
+ var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault").default;
5
+ exports.__esModule = true;
6
+ exports.dereferenceExtends = dereferenceExtends;
7
+ var _apidomDatamodel = require("@speclynx/apidom-datamodel");
8
+ var _apidomNsOverlay = require("@speclynx/apidom-ns-overlay-1");
9
+ var _apidomCore = require("@speclynx/apidom-core");
10
+ var _File = _interopRequireDefault(require("../../../File.cjs"));
11
+ var url = _interopRequireWildcard(require("../../../util/url.cjs"));
12
+ var _util = require("../../../options/util.cjs");
13
+ var _index = _interopRequireWildcard(require("../../index.cjs"));
14
+ /**
15
+ * Dereferences the `extends` target document from an Overlay document's ParseResult.
16
+ *
17
+ * If the extends element already has a parsed result attached (from the parse phase),
18
+ * it will be dereferenced in place. Otherwise, the target document will be fetched,
19
+ * parsed, and dereferenced.
20
+ *
21
+ * The dereferenced result is pushed into the overlay's ParseResult
22
+ * and always attached to the extends element's meta as 'parseResult',
23
+ * overriding any existing parse result from the parse phase.
24
+ * On failure, the result contains error annotations.
25
+ *
26
+ * @param parseResult - ParseResult containing an Overlay specification
27
+ * @param parseResultRetrievalURI - URI from which the parseResult was retrieved
28
+ * @param options - Full ReferenceOptions
29
+ *
30
+ * @public
31
+ */
32
+ async function dereferenceExtends(parseResult, parseResultRetrievalURI, options) {
33
+ const {
34
+ api
35
+ } = parseResult;
36
+ const file = new _File.default({
37
+ uri: url.sanitize(url.stripHash(parseResultRetrievalURI))
38
+ });
39
+ if (!(0, _apidomNsOverlay.isOverlay1Element)(api)) {
40
+ return;
41
+ }
42
+ const extendsElement = api.get('extends');
43
+ if (!(0, _apidomDatamodel.isStringElement)(extendsElement)) {
44
+ return;
45
+ }
46
+ const extendsURI = (0, _apidomCore.toValue)(extendsElement);
47
+ const retrievalURI = url.sanitize(url.stripHash(url.resolve(file.uri, extendsURI)));
48
+ const extendsDereferenceResult = new _apidomDatamodel.ParseResultElement();
49
+ extendsDereferenceResult.classes.push('extends');
50
+ extendsDereferenceResult.setMetaProperty('retrievalURI', retrievalURI);
51
+ try {
52
+ let extendsDereferenced;
53
+
54
+ // check if extends was already parsed (e.g., during parse phase with extends: true)
55
+ const existingParseResult = extendsElement.meta.get('parseResult');
56
+ if ((0, _apidomDatamodel.isParseResultElement)(existingParseResult)) {
57
+ // use existing parsed result - just dereference it (no re-fetch/re-parse)
58
+ extendsDereferenced = await (0, _index.dereferenceApiDOM)(existingParseResult, (0, _util.merge)(options, {
59
+ parse: {
60
+ mediaType: 'text/plain' // allow dereference strategy detection via ApiDOM inspection
61
+ },
62
+ resolve: {
63
+ baseURI: retrievalURI
64
+ }
65
+ }));
66
+ } else {
67
+ // no existing parse result - fetch, parse, and dereference
68
+ extendsDereferenced = await (0, _index.default)(retrievalURI, (0, _util.merge)(options, {
69
+ parse: {
70
+ mediaType: 'text/plain' // allow parser plugin detection
71
+ }
72
+ }));
73
+ }
74
+
75
+ // merge dereferenced result into our wrapper
76
+ for (const item of extendsDereferenced) {
77
+ extendsDereferenceResult.push(item);
78
+ }
79
+ } catch (error) {
80
+ const message = error instanceof Error ? error.message : String(error);
81
+ const annotation = new _apidomDatamodel.AnnotationElement(`Error dereferencing extends target "${retrievalURI}": ${message}`);
82
+ annotation.classes.push('error');
83
+ extendsDereferenceResult.push(annotation);
84
+ }
85
+
86
+ // always attach result to extends element meta (even on failure - contains annotations)
87
+ extendsElement.meta.set('parseResult', extendsDereferenceResult);
88
+
89
+ // drop any existing parse-phase extends results before pushing
90
+ const cleaned = parseResult.reject(item => (0, _apidomDatamodel.isParseResultElement)(item) && (0, _apidomDatamodel.includesClasses)(item, ['extends']));
91
+ parseResult.content = cleaned.content;
92
+ parseResult.push(extendsDereferenceResult);
93
+ }
@@ -0,0 +1,87 @@
1
+ import { ParseResultElement, AnnotationElement, isStringElement, isParseResultElement, includesClasses } from '@speclynx/apidom-datamodel';
2
+ import { isOverlay1Element } from '@speclynx/apidom-ns-overlay-1';
3
+ import { toValue } from '@speclynx/apidom-core';
4
+ import File from "../../../File.mjs";
5
+ import * as url from "../../../util/url.mjs";
6
+ import { merge as mergeOptions } from "../../../options/util.mjs";
7
+ import dereference, { dereferenceApiDOM } from "../../index.mjs";
8
+ /**
9
+ * Dereferences the `extends` target document from an Overlay document's ParseResult.
10
+ *
11
+ * If the extends element already has a parsed result attached (from the parse phase),
12
+ * it will be dereferenced in place. Otherwise, the target document will be fetched,
13
+ * parsed, and dereferenced.
14
+ *
15
+ * The dereferenced result is pushed into the overlay's ParseResult
16
+ * and always attached to the extends element's meta as 'parseResult',
17
+ * overriding any existing parse result from the parse phase.
18
+ * On failure, the result contains error annotations.
19
+ *
20
+ * @param parseResult - ParseResult containing an Overlay specification
21
+ * @param parseResultRetrievalURI - URI from which the parseResult was retrieved
22
+ * @param options - Full ReferenceOptions
23
+ *
24
+ * @public
25
+ */
26
+ export async function dereferenceExtends(parseResult, parseResultRetrievalURI, options) {
27
+ const {
28
+ api
29
+ } = parseResult;
30
+ const file = new File({
31
+ uri: url.sanitize(url.stripHash(parseResultRetrievalURI))
32
+ });
33
+ if (!isOverlay1Element(api)) {
34
+ return;
35
+ }
36
+ const extendsElement = api.get('extends');
37
+ if (!isStringElement(extendsElement)) {
38
+ return;
39
+ }
40
+ const extendsURI = toValue(extendsElement);
41
+ const retrievalURI = url.sanitize(url.stripHash(url.resolve(file.uri, extendsURI)));
42
+ const extendsDereferenceResult = new ParseResultElement();
43
+ extendsDereferenceResult.classes.push('extends');
44
+ extendsDereferenceResult.setMetaProperty('retrievalURI', retrievalURI);
45
+ try {
46
+ let extendsDereferenced;
47
+
48
+ // check if extends was already parsed (e.g., during parse phase with extends: true)
49
+ const existingParseResult = extendsElement.meta.get('parseResult');
50
+ if (isParseResultElement(existingParseResult)) {
51
+ // use existing parsed result - just dereference it (no re-fetch/re-parse)
52
+ extendsDereferenced = await dereferenceApiDOM(existingParseResult, mergeOptions(options, {
53
+ parse: {
54
+ mediaType: 'text/plain' // allow dereference strategy detection via ApiDOM inspection
55
+ },
56
+ resolve: {
57
+ baseURI: retrievalURI
58
+ }
59
+ }));
60
+ } else {
61
+ // no existing parse result - fetch, parse, and dereference
62
+ extendsDereferenced = await dereference(retrievalURI, mergeOptions(options, {
63
+ parse: {
64
+ mediaType: 'text/plain' // allow parser plugin detection
65
+ }
66
+ }));
67
+ }
68
+
69
+ // merge dereferenced result into our wrapper
70
+ for (const item of extendsDereferenced) {
71
+ extendsDereferenceResult.push(item);
72
+ }
73
+ } catch (error) {
74
+ const message = error instanceof Error ? error.message : String(error);
75
+ const annotation = new AnnotationElement(`Error dereferencing extends target "${retrievalURI}": ${message}`);
76
+ annotation.classes.push('error');
77
+ extendsDereferenceResult.push(annotation);
78
+ }
79
+
80
+ // always attach result to extends element meta (even on failure - contains annotations)
81
+ extendsElement.meta.set('parseResult', extendsDereferenceResult);
82
+
83
+ // drop any existing parse-phase extends results before pushing
84
+ const cleaned = parseResult.reject(item => isParseResultElement(item) && includesClasses(item, ['extends']));
85
+ parseResult.content = cleaned.content;
86
+ parseResult.push(extendsDereferenceResult);
87
+ }
@@ -0,0 +1,93 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault").default;
4
+ exports.__esModule = true;
5
+ exports.default = void 0;
6
+ var _apidomDatamodel = require("@speclynx/apidom-datamodel");
7
+ var _apidomNsOverlay = require("@speclynx/apidom-ns-overlay-1");
8
+ var _DereferenceStrategy = _interopRequireDefault(require("../DereferenceStrategy.cjs"));
9
+ var _Reference = _interopRequireDefault(require("../../../Reference.cjs"));
10
+ var _ReferenceSet = _interopRequireDefault(require("../../../ReferenceSet.cjs"));
11
+ var _extends = require("./extends.cjs");
12
+ exports.dereferenceExtends = _extends.dereferenceExtends;
13
+ /**
14
+ * @public
15
+ */
16
+
17
+ /**
18
+ * @public
19
+ */
20
+ class Overlay1DereferenceStrategy extends _DereferenceStrategy.default {
21
+ constructor(options) {
22
+ super({
23
+ ...(options ?? {}),
24
+ name: 'overlay-1'
25
+ });
26
+ }
27
+ canDereference(file) {
28
+ // assert by media type
29
+ if (file.mediaType !== 'text/plain') {
30
+ return _apidomNsOverlay.mediaTypes.includes(file.mediaType);
31
+ }
32
+
33
+ // assert by inspecting ApiDOM
34
+ return (0, _apidomNsOverlay.isOverlay1Element)(file.parseResult?.result);
35
+ }
36
+ async dereference(file, options) {
37
+ const immutableRefSet = options.dereference.refSet ?? new _ReferenceSet.default();
38
+ const mutableRefSet = new _ReferenceSet.default();
39
+ let reference;
40
+ if (!immutableRefSet.has(file.uri)) {
41
+ reference = new _Reference.default({
42
+ uri: file.uri,
43
+ value: file.parseResult
44
+ });
45
+ immutableRefSet.add(reference);
46
+ } else {
47
+ // pre-computed refSet was provided as configuration option
48
+ reference = immutableRefSet.find(ref => ref.uri === file.uri);
49
+ }
50
+
51
+ /**
52
+ * Clone refSet due the dereferencing process being mutable.
53
+ * We don't want to mutate the original refSet and the references.
54
+ */
55
+ if (options.dereference.immutable) {
56
+ immutableRefSet.refs.map(ref => new _Reference.default({
57
+ ...ref,
58
+ value: (0, _apidomDatamodel.cloneDeep)(ref.value)
59
+ })).forEach(ref => mutableRefSet.add(ref));
60
+ reference = mutableRefSet.find(ref => ref.uri === file.uri);
61
+ }
62
+ const dereferencedElement = reference.value;
63
+
64
+ /**
65
+ * Dereference extends target if option is enabled.
66
+ */
67
+ const shouldDereferenceExtends = options?.dereference?.strategyOpts?.[this.name]?.extends ?? options?.dereference?.strategyOpts?.extends;
68
+ if (shouldDereferenceExtends) {
69
+ await (0, _extends.dereferenceExtends)(dereferencedElement, reference.uri, options);
70
+ }
71
+
72
+ /**
73
+ * If immutable option is set, replay refs from the refSet.
74
+ */
75
+ if (options.dereference.immutable) {
76
+ mutableRefSet.refs.filter(ref => ref.uri.startsWith('immutable://')).map(ref => new _Reference.default({
77
+ ...ref,
78
+ uri: ref.uri.replace(/^immutable:\/\//, '')
79
+ })).forEach(ref => immutableRefSet.add(ref));
80
+ }
81
+
82
+ /**
83
+ * Release all memory if this refSet was not provided as a configuration option.
84
+ * If provided as configuration option, then provider is responsible for cleanup.
85
+ */
86
+ if (options.dereference.refSet === null) {
87
+ immutableRefSet.clean();
88
+ }
89
+ mutableRefSet.clean();
90
+ return dereferencedElement;
91
+ }
92
+ }
93
+ var _default = exports.default = Overlay1DereferenceStrategy;