@speclynx/apidom-reference 1.12.1 → 2.0.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 (112) hide show
  1. package/CHANGELOG.md +25 -0
  2. package/NOTICE +16 -7
  3. package/README.md +0 -33
  4. package/dist/167.apidom-reference.browser.min.js +1 -1
  5. package/dist/451.apidom-reference.browser.min.js +1 -1
  6. package/dist/apidom-reference.browser.js +24594 -23365
  7. package/dist/apidom-reference.browser.min.js +1 -1
  8. package/package.json +24 -57
  9. package/src/configuration/saturated.cjs +34 -42
  10. package/src/configuration/saturated.mjs +0 -8
  11. package/src/dereference/index.cjs +4 -4
  12. package/src/dereference/index.mjs +1 -1
  13. package/src/dereference/strategies/apidom/index.cjs +7 -7
  14. package/src/dereference/strategies/apidom/index.mjs +5 -6
  15. package/src/dereference/strategies/apidom/selectors/element-id.cjs +4 -2
  16. package/src/dereference/strategies/apidom/selectors/element-id.mjs +5 -3
  17. package/src/dereference/strategies/apidom/visitor.cjs +31 -17
  18. package/src/dereference/strategies/apidom/visitor.mjs +25 -12
  19. package/src/dereference/strategies/asyncapi-2/index.cjs +6 -9
  20. package/src/dereference/strategies/asyncapi-2/index.mjs +6 -10
  21. package/src/dereference/strategies/asyncapi-2/visitor.cjs +67 -80
  22. package/src/dereference/strategies/asyncapi-2/visitor.mjs +59 -72
  23. package/src/dereference/strategies/openapi-2/index.cjs +6 -9
  24. package/src/dereference/strategies/openapi-2/index.mjs +6 -10
  25. package/src/dereference/strategies/openapi-2/visitor.cjs +91 -100
  26. package/src/dereference/strategies/openapi-2/visitor.mjs +81 -90
  27. package/src/dereference/strategies/openapi-3-0/index.cjs +6 -9
  28. package/src/dereference/strategies/openapi-3-0/index.mjs +6 -10
  29. package/src/dereference/strategies/openapi-3-0/visitor.cjs +92 -115
  30. package/src/dereference/strategies/openapi-3-0/visitor.mjs +74 -97
  31. package/src/dereference/strategies/openapi-3-1/index.cjs +6 -9
  32. package/src/dereference/strategies/openapi-3-1/index.mjs +6 -10
  33. package/src/dereference/strategies/openapi-3-1/selectors/$anchor.cjs +2 -1
  34. package/src/dereference/strategies/openapi-3-1/selectors/$anchor.mjs +3 -2
  35. package/src/dereference/strategies/openapi-3-1/selectors/uri.cjs +2 -2
  36. package/src/dereference/strategies/openapi-3-1/selectors/uri.mjs +2 -2
  37. package/src/dereference/strategies/openapi-3-1/util.cjs +3 -2
  38. package/src/dereference/strategies/openapi-3-1/util.mjs +4 -3
  39. package/src/dereference/strategies/openapi-3-1/visitor.cjs +130 -156
  40. package/src/dereference/strategies/openapi-3-1/visitor.mjs +106 -132
  41. package/src/dereference/util.cjs +2 -2
  42. package/src/dereference/util.mjs +1 -1
  43. package/src/parse/parsers/apidom-json/index.cjs +5 -5
  44. package/src/parse/parsers/apidom-json/index.mjs +2 -2
  45. package/src/parse/parsers/arazzo-json-1/index.cjs +1 -2
  46. package/src/parse/parsers/arazzo-json-1/index.mjs +1 -2
  47. package/src/parse/parsers/asyncapi-json-2/index.cjs +1 -2
  48. package/src/parse/parsers/asyncapi-json-2/index.mjs +1 -2
  49. package/src/parse/parsers/binary/index-browser.cjs +3 -3
  50. package/src/parse/parsers/binary/index-browser.mjs +1 -1
  51. package/src/parse/parsers/binary/index-node.cjs +3 -3
  52. package/src/parse/parsers/binary/index-node.mjs +1 -1
  53. package/src/parse/parsers/json/index.cjs +1 -2
  54. package/src/parse/parsers/json/index.mjs +1 -2
  55. package/src/parse/parsers/openapi-json-2/index.cjs +1 -2
  56. package/src/parse/parsers/openapi-json-2/index.mjs +1 -2
  57. package/src/parse/parsers/openapi-json-3-0/index.cjs +1 -2
  58. package/src/parse/parsers/openapi-json-3-0/index.mjs +1 -2
  59. package/src/parse/parsers/openapi-json-3-1/index.cjs +1 -2
  60. package/src/parse/parsers/openapi-json-3-1/index.mjs +1 -2
  61. package/src/resolve/index.cjs +4 -4
  62. package/src/resolve/index.mjs +1 -1
  63. package/types/File.d.ts +1 -1
  64. package/types/Reference.d.ts +1 -1
  65. package/types/ReferenceSet.d.ts +1 -1
  66. package/types/apidom-reference.d.ts +8 -9
  67. package/types/bundle/index.d.ts +1 -1
  68. package/types/bundle/strategies/BundleStrategy.d.ts +1 -1
  69. package/types/bundle/strategies/openapi-3-1/index.d.ts +1 -1
  70. package/types/dereference/index.d.ts +1 -1
  71. package/types/dereference/strategies/DereferenceStrategy.d.ts +1 -1
  72. package/types/dereference/strategies/apidom/index.d.ts +1 -1
  73. package/types/dereference/strategies/apidom/selectors/element-id.d.ts +1 -1
  74. package/types/dereference/strategies/apidom/visitor.d.ts +3 -2
  75. package/types/dereference/strategies/asyncapi-2/index.d.ts +2 -2
  76. package/types/dereference/strategies/asyncapi-2/visitor.d.ts +5 -14
  77. package/types/dereference/strategies/openapi-2/index.d.ts +2 -2
  78. package/types/dereference/strategies/openapi-2/visitor.d.ts +6 -17
  79. package/types/dereference/strategies/openapi-3-0/index.d.ts +2 -2
  80. package/types/dereference/strategies/openapi-3-0/visitor.d.ts +7 -20
  81. package/types/dereference/strategies/openapi-3-1/index.d.ts +2 -2
  82. package/types/dereference/strategies/openapi-3-1/selectors/$anchor.d.ts +1 -1
  83. package/types/dereference/strategies/openapi-3-1/selectors/uri.d.ts +1 -1
  84. package/types/dereference/strategies/openapi-3-1/util.d.ts +1 -1
  85. package/types/dereference/strategies/openapi-3-1/visitor.d.ts +8 -23
  86. package/types/dereference/util.d.ts +1 -1
  87. package/types/index.d.ts +1 -1
  88. package/types/options/index.d.ts +1 -1
  89. package/types/parse/index.d.ts +1 -1
  90. package/types/parse/parsers/Parser.d.ts +1 -1
  91. package/types/parse/parsers/apidom-json/index.d.ts +1 -1
  92. package/types/parse/parsers/arazzo-json-1/index.d.ts +1 -2
  93. package/types/parse/parsers/arazzo-yaml-1/index.d.ts +1 -1
  94. package/types/parse/parsers/asyncapi-json-2/index.d.ts +1 -2
  95. package/types/parse/parsers/asyncapi-yaml-2/index.d.ts +1 -1
  96. package/types/parse/parsers/binary/index-browser.d.ts +1 -1
  97. package/types/parse/parsers/binary/index-node.d.ts +1 -1
  98. package/types/parse/parsers/json/index.d.ts +1 -2
  99. package/types/parse/parsers/openapi-json-2/index.d.ts +1 -2
  100. package/types/parse/parsers/openapi-json-3-0/index.d.ts +1 -2
  101. package/types/parse/parsers/openapi-json-3-1/index.d.ts +1 -2
  102. package/types/parse/parsers/openapi-yaml-2/index.d.ts +1 -1
  103. package/types/parse/parsers/openapi-yaml-3-0/index.d.ts +1 -1
  104. package/types/parse/parsers/openapi-yaml-3-1/index.d.ts +1 -1
  105. package/types/parse/parsers/yaml-1-2/index.d.ts +1 -1
  106. package/types/resolve/index.d.ts +1 -1
  107. package/src/parse/parsers/api-design-systems-json/index.cjs +0 -55
  108. package/src/parse/parsers/api-design-systems-json/index.mjs +0 -49
  109. package/src/parse/parsers/api-design-systems-yaml/index.cjs +0 -54
  110. package/src/parse/parsers/api-design-systems-yaml/index.mjs +0 -48
  111. package/types/parse/parsers/api-design-systems-json/index.d.ts +0 -21
  112. package/types/parse/parsers/api-design-systems-yaml/index.d.ts +0 -20
@@ -1,32 +1,19 @@
1
1
  import { propEq } from 'ramda';
2
- import { isElement, isMemberElement, isPrimitiveElement, isStringElement, IdentityManager, cloneDeep, cloneShallow, visit, toValue, RefElement } from '@speclynx/apidom-core';
2
+ import { isElement, isPrimitiveElement, isStringElement, RefElement, cloneDeep, cloneShallow } from '@speclynx/apidom-datamodel';
3
+ import { IdentityManager, toValue } from '@speclynx/apidom-core';
3
4
  import { ApiDOMError } from '@speclynx/apidom-error';
5
+ import { traverseAsync } from '@speclynx/apidom-traverse';
4
6
  import { evaluate, URIFragmentIdentifier } from '@speclynx/apidom-json-pointer';
5
- import { ChannelItemElement, getNodeType, isReferenceLikeElement, isBooleanJsonSchemaElement, isChannelItemElement, isReferenceElement, keyMap, ReferenceElement } from '@speclynx/apidom-ns-asyncapi-2';
7
+ import { isReferenceLikeElement, isBooleanJsonSchemaElement, isChannelItemElement, isReferenceElement, refract, refractReference, refractChannelItem } from '@speclynx/apidom-ns-asyncapi-2';
6
8
  import MaximumDereferenceDepthError from "../../../errors/MaximumDereferenceDepthError.mjs";
7
9
  import MaximumResolveDepthError from "../../../errors/MaximumResolveDepthError.mjs";
8
10
  import { AncestorLineage } from "../../util.mjs";
9
11
  import * as url from "../../../util/url.mjs";
10
12
  import parse from "../../../parse/index.mjs";
11
13
  import Reference from "../../../Reference.mjs";
12
- // @ts-ignore
13
- const visitAsync = visit[Symbol.for('nodejs.util.promisify.custom')];
14
-
15
14
  // initialize element identity manager
16
15
  const identityManager = new IdentityManager();
17
16
 
18
- /**
19
- * Custom mutation replacer.
20
- * @public
21
- */
22
- export const mutationReplacer = (newElement, oldElement, key, parent) => {
23
- if (isMemberElement(parent)) {
24
- parent.value = newElement;
25
- } else if (Array.isArray(parent)) {
26
- parent[key] = newElement;
27
- }
28
- };
29
-
30
17
  /**
31
18
  * @public
32
19
  */
@@ -99,21 +86,25 @@ class AsyncAPI2DereferenceVisitor {
99
86
  }
100
87
  return mutableReference;
101
88
  }
102
- toAncestorLineage(ancestors) {
89
+ toAncestorLineage(path) {
103
90
  /**
104
91
  * Compute full ancestors lineage.
105
92
  * Ancestors are flatten to unwrap all Element instances.
106
93
  */
107
- const directAncestors = new Set(ancestors.filter(isElement));
94
+ const ancestorNodes = path.getAncestorNodes();
95
+ const directAncestors = new Set(ancestorNodes.filter(isElement));
108
96
  const ancestorsLineage = new AncestorLineage(...this.ancestors, directAncestors);
109
97
  return [ancestorsLineage, directAncestors];
110
98
  }
111
- async ReferenceElement(referencingElement, key, parent, path, ancestors, link) {
99
+ async ReferenceElement(path) {
100
+ const referencingElement = path.node;
101
+
112
102
  // skip current referencing element as it's already been access
113
103
  if (this.indirections.includes(referencingElement)) {
114
- return false;
104
+ path.skip();
105
+ return;
115
106
  }
116
- const [ancestorsLineage, directAncestors] = this.toAncestorLineage([...ancestors, parent]);
107
+ const [ancestorsLineage, directAncestors] = this.toAncestorLineage(path);
117
108
  const retrievalURI = this.toBaseURI(toValue(referencingElement.$ref));
118
109
  const isInternalReference = url.stripHash(this.reference.uri) === retrievalURI;
119
110
  const isExternalReference = !isInternalReference;
@@ -121,12 +112,14 @@ class AsyncAPI2DereferenceVisitor {
121
112
  // ignore resolving internal Reference Objects
122
113
  if (!this.options.resolve.internal && isInternalReference) {
123
114
  // skip traversing this reference and all it's child elements
124
- return false;
115
+ path.skip();
116
+ return;
125
117
  }
126
118
  // ignore resolving external Reference Objects
127
119
  if (!this.options.resolve.external && isExternalReference) {
128
120
  // skip traversing this reference and all it's child elements
129
- return false;
121
+ path.skip();
122
+ return;
130
123
  }
131
124
  const reference = await this.toReference(toValue(referencingElement.$ref));
132
125
  const $refBaseURI = url.resolve(retrievalURI, toValue(referencingElement.$ref));
@@ -147,13 +140,14 @@ class AsyncAPI2DereferenceVisitor {
147
140
  referencedElement = this.refractCache.get(cacheKey);
148
141
  } else if (isReferenceLikeElement(referencedElement)) {
149
142
  // handling indirect references
150
- referencedElement = ReferenceElement.refract(referencedElement);
151
- referencedElement.setMetaProperty('referenced-element', referencedElementType);
143
+ referencedElement = refractReference(referencedElement);
144
+ referencedElement.meta.set('referenced-element', referencedElementType);
152
145
  this.refractCache.set(cacheKey, referencedElement);
153
146
  } else {
154
147
  // handling direct references
155
- const ElementClass = this.namespace.getElementClass(referencedElementType);
156
- referencedElement = ElementClass.refract(referencedElement);
148
+ referencedElement = refract(referencedElement, {
149
+ element: referencedElementType
150
+ });
157
151
  this.refractCache.set(cacheKey, referencedElement);
158
152
  }
159
153
  }
@@ -181,8 +175,9 @@ class AsyncAPI2DereferenceVisitor {
181
175
  });
182
176
  const replacer = this.options.dereference.strategyOpts['asyncapi-2']?.circularReplacer ?? this.options.dereference.circularReplacer;
183
177
  const replacement = replacer(refElement);
184
- link.replaceWith(replacement, mutationReplacer);
185
- return !parent ? replacement : false;
178
+ this.indirections.pop();
179
+ path.replaceWith(replacement);
180
+ return;
186
181
  }
187
182
  }
188
183
 
@@ -208,9 +203,8 @@ class AsyncAPI2DereferenceVisitor {
208
203
  refractCache: this.refractCache,
209
204
  ancestors: ancestorsLineage
210
205
  });
211
- referencedElement = await visitAsync(referencedElement, visitor, {
212
- keyMap,
213
- nodeTypeGetter: getNodeType
206
+ referencedElement = await traverseAsync(referencedElement, visitor, {
207
+ mutable: true
214
208
  });
215
209
 
216
210
  // remove referencing reference from ancestors lineage
@@ -222,17 +216,17 @@ class AsyncAPI2DereferenceVisitor {
222
216
  if (isBooleanJsonSchemaElement(referencedElement)) {
223
217
  const booleanJsonSchemaElement = cloneDeep(referencedElement);
224
218
  // assign unique id to merged element
225
- booleanJsonSchemaElement.setMetaProperty('id', identityManager.generateId());
219
+ booleanJsonSchemaElement.meta.set('id', identityManager.generateId());
226
220
  // annotate referenced element with info about original referencing element
227
- booleanJsonSchemaElement.setMetaProperty('ref-fields', {
221
+ booleanJsonSchemaElement.meta.set('ref-fields', {
228
222
  $ref: toValue(referencingElement.$ref)
229
223
  });
230
224
  // annotate referenced element with info about origin
231
- booleanJsonSchemaElement.setMetaProperty('ref-origin', reference.uri);
225
+ booleanJsonSchemaElement.meta.set('ref-origin', reference.uri);
232
226
  // annotate fragment with info about referencing element
233
- booleanJsonSchemaElement.setMetaProperty('ref-referencing-element-id', cloneDeep(identityManager.identify(referencingElement)));
234
- link.replaceWith(booleanJsonSchemaElement, mutationReplacer);
235
- return !parent ? booleanJsonSchemaElement : false;
227
+ booleanJsonSchemaElement.meta.set('ref-referencing-element-id', cloneDeep(identityManager.identify(referencingElement)));
228
+ path.replaceWith(booleanJsonSchemaElement);
229
+ return;
236
230
  }
237
231
 
238
232
  /**
@@ -240,37 +234,35 @@ class AsyncAPI2DereferenceVisitor {
240
234
  */
241
235
  const mergedElement = cloneShallow(referencedElement);
242
236
  // assign unique id to merged element
243
- mergedElement.setMetaProperty('id', identityManager.generateId());
237
+ mergedElement.meta.set('id', identityManager.generateId());
244
238
  // annotate referenced element with info about original referencing element
245
- mergedElement.setMetaProperty('ref-fields', {
239
+ mergedElement.meta.set('ref-fields', {
246
240
  $ref: toValue(referencingElement.$ref)
247
241
  });
248
242
  // annotate fragment with info about origin
249
- mergedElement.setMetaProperty('ref-origin', reference.uri);
243
+ mergedElement.meta.set('ref-origin', reference.uri);
250
244
  // annotate fragment with info about referencing element
251
- mergedElement.setMetaProperty('ref-referencing-element-id', cloneDeep(identityManager.identify(referencingElement)));
245
+ mergedElement.meta.set('ref-referencing-element-id', cloneDeep(identityManager.identify(referencingElement)));
252
246
 
253
247
  /**
254
248
  * Transclude referencing element with merged referenced element.
255
249
  */
256
- link.replaceWith(mergedElement, mutationReplacer);
257
-
258
- /**
259
- * We're at the root of the tree, so we're just replacing the entire tree.
260
- */
261
- return !parent ? mergedElement : false;
250
+ path.replaceWith(mergedElement);
262
251
  }
263
- async ChannelItemElement(referencingElement, key, parent, path, ancestors, link) {
252
+ async ChannelItemElement(path) {
253
+ const referencingElement = path.node;
254
+
264
255
  // ignore ChannelItemElement without $ref field
265
256
  if (!isStringElement(referencingElement.$ref)) {
266
- return undefined;
257
+ return;
267
258
  }
268
259
 
269
260
  // skip current referencing element as it's already been access
270
261
  if (this.indirections.includes(referencingElement)) {
271
- return false;
262
+ path.skip();
263
+ return;
272
264
  }
273
- const [ancestorsLineage, directAncestors] = this.toAncestorLineage([...ancestors, parent]);
265
+ const [ancestorsLineage, directAncestors] = this.toAncestorLineage(path);
274
266
  const retrievalURI = this.toBaseURI(toValue(referencingElement.$ref));
275
267
  const isInternalReference = url.stripHash(this.reference.uri) === retrievalURI;
276
268
  const isExternalReference = !isInternalReference;
@@ -278,12 +270,12 @@ class AsyncAPI2DereferenceVisitor {
278
270
  // ignore resolving internal Channel Item Objects
279
271
  if (!this.options.resolve.internal && isInternalReference) {
280
272
  // skip traversing this channel item but traverse all it's child elements
281
- return undefined;
273
+ return;
282
274
  }
283
275
  // ignore resolving external Channel Item Objects
284
276
  if (!this.options.resolve.external && isExternalReference) {
285
277
  // skip traversing this channel item but traverse all it's child elements
286
- return undefined;
278
+ return;
287
279
  }
288
280
  const reference = await this.toReference(toValue(referencingElement.$ref));
289
281
  const $refBaseURI = url.resolve(retrievalURI, toValue(referencingElement.$ref));
@@ -302,7 +294,7 @@ class AsyncAPI2DereferenceVisitor {
302
294
  if (this.refractCache.has(cacheKey)) {
303
295
  referencedElement = this.refractCache.get(cacheKey);
304
296
  } else {
305
- referencedElement = ChannelItemElement.refract(referencedElement);
297
+ referencedElement = refractChannelItem(referencedElement);
306
298
  this.refractCache.set(cacheKey, referencedElement);
307
299
  }
308
300
  }
@@ -330,8 +322,9 @@ class AsyncAPI2DereferenceVisitor {
330
322
  });
331
323
  const replacer = this.options.dereference.strategyOpts['asyncapi-2']?.circularReplacer ?? this.options.dereference.circularReplacer;
332
324
  const replacement = replacer(refElement);
333
- link.replaceWith(replacement, mutationReplacer);
334
- return !parent ? replacement : undefined;
325
+ this.indirections.pop();
326
+ path.replaceWith(replacement);
327
+ return;
335
328
  }
336
329
  }
337
330
 
@@ -357,9 +350,8 @@ class AsyncAPI2DereferenceVisitor {
357
350
  refractCache: this.refractCache,
358
351
  ancestors: ancestorsLineage
359
352
  });
360
- referencedElement = await visitAsync(referencedElement, visitor, {
361
- keyMap,
362
- nodeTypeGetter: getNodeType
353
+ referencedElement = await traverseAsync(referencedElement, visitor, {
354
+ mutable: true
363
355
  });
364
356
 
365
357
  // remove referencing reference from ancestors lineage
@@ -371,9 +363,9 @@ class AsyncAPI2DereferenceVisitor {
371
363
  * Creating a new version of Channel Item by merging fields from referenced Channel Item with referencing one.
372
364
  */
373
365
  if (isChannelItemElement(referencedElement)) {
374
- const mergedElement = new ChannelItemElement([...referencedElement.content], cloneDeep(referencedElement.meta), cloneDeep(referencedElement.attributes));
366
+ const mergedElement = cloneShallow(referencedElement);
375
367
  // assign unique id to merged element
376
- mergedElement.setMetaProperty('id', identityManager.generateId());
368
+ mergedElement.meta.set('id', identityManager.generateId());
377
369
  // existing keywords from referencing ChannelItemElement overrides ones from referenced ChannelItemElement
378
370
  referencingElement.forEach((value, keyElement, item) => {
379
371
  mergedElement.remove(toValue(keyElement));
@@ -382,25 +374,20 @@ class AsyncAPI2DereferenceVisitor {
382
374
  mergedElement.remove('$ref');
383
375
 
384
376
  // annotate referenced element with info about original referencing element
385
- mergedElement.setMetaProperty('ref-fields', {
377
+ mergedElement.meta.set('ref-fields', {
386
378
  $ref: toValue(referencingElement.$ref)
387
379
  });
388
380
  // annotate referenced with info about origin
389
- mergedElement.setMetaProperty('ref-origin', reference.uri);
381
+ mergedElement.meta.set('ref-origin', reference.uri);
390
382
  // annotate fragment with info about referencing element
391
- mergedElement.setMetaProperty('ref-referencing-element-id', cloneDeep(identityManager.identify(referencingElement)));
383
+ mergedElement.meta.set('ref-referencing-element-id', cloneDeep(identityManager.identify(referencingElement)));
392
384
  referencedElement = mergedElement;
393
385
  }
394
386
 
395
387
  /**
396
388
  * Transclude referencing element with merged referenced element.
397
389
  */
398
- link.replaceWith(referencedElement, mutationReplacer);
399
-
400
- /**
401
- * We're at the root of the tree, so we're just replacing the entire tree.
402
- */
403
- return !parent ? referencedElement : undefined;
390
+ path.replaceWith(referencedElement);
404
391
  }
405
392
  }
406
393
  export default AsyncAPI2DereferenceVisitor;
@@ -4,16 +4,14 @@ var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequ
4
4
  var _interopRequireWildcard = require("@babel/runtime-corejs3/helpers/interopRequireWildcard").default;
5
5
  exports.__esModule = true;
6
6
  exports.default = void 0;
7
- var _apidomCore = require("@speclynx/apidom-core");
7
+ var _apidomDatamodel = require("@speclynx/apidom-datamodel");
8
8
  var _apidomNsOpenapi = _interopRequireWildcard(require("@speclynx/apidom-ns-openapi-2"));
9
+ var _apidomTraverse = require("@speclynx/apidom-traverse");
9
10
  var _DereferenceStrategy = _interopRequireDefault(require("../DereferenceStrategy.cjs"));
10
11
  var _Reference = _interopRequireDefault(require("../../../Reference.cjs"));
11
12
  var _ReferenceSet = _interopRequireDefault(require("../../../ReferenceSet.cjs"));
12
13
  var _visitor = _interopRequireDefault(require("./visitor.cjs"));
13
14
  exports.OpenAPI2DereferenceVisitor = _visitor.default;
14
- // @ts-ignore
15
- const visitAsync = _apidomCore.visit[Symbol.for('nodejs.util.promisify.custom')];
16
-
17
15
  /**
18
16
  * @public
19
17
  */
@@ -38,7 +36,7 @@ class OpenAPI2DereferenceStrategy extends _DereferenceStrategy.default {
38
36
  return (0, _apidomNsOpenapi.isSwaggerElement)(file.parseResult?.api);
39
37
  }
40
38
  async dereference(file, options) {
41
- const namespace = (0, _apidomCore.createNamespace)(_apidomNsOpenapi.default);
39
+ const namespace = new _apidomDatamodel.Namespace().use(_apidomNsOpenapi.default);
42
40
  const immutableRefSet = options.dereference.refSet ?? new _ReferenceSet.default();
43
41
  const mutableRefSet = new _ReferenceSet.default();
44
42
  let refSet = immutableRefSet;
@@ -61,7 +59,7 @@ class OpenAPI2DereferenceStrategy extends _DereferenceStrategy.default {
61
59
  if (options.dereference.immutable) {
62
60
  immutableRefSet.refs.map(ref => new _Reference.default({
63
61
  ...ref,
64
- value: (0, _apidomCore.cloneDeep)(ref.value)
62
+ value: (0, _apidomDatamodel.cloneDeep)(ref.value)
65
63
  })).forEach(ref => mutableRefSet.add(ref));
66
64
  reference = mutableRefSet.find(ref => ref.uri === file.uri);
67
65
  refSet = mutableRefSet;
@@ -71,9 +69,8 @@ class OpenAPI2DereferenceStrategy extends _DereferenceStrategy.default {
71
69
  namespace,
72
70
  options
73
71
  });
74
- const dereferencedElement = await visitAsync(refSet.rootRef.value, visitor, {
75
- keyMap: _apidomNsOpenapi.keyMap,
76
- nodeTypeGetter: _apidomNsOpenapi.getNodeType
72
+ const dereferencedElement = await (0, _apidomTraverse.traverseAsync)(refSet.rootRef.value, visitor, {
73
+ mutable: true
77
74
  });
78
75
 
79
76
  /**
@@ -1,16 +1,13 @@
1
- import { createNamespace, visit, cloneDeep } from '@speclynx/apidom-core';
2
- import openApi2Namespace, { getNodeType, isSwaggerElement, keyMap, mediaTypes } from '@speclynx/apidom-ns-openapi-2';
1
+ import { Namespace, cloneDeep } from '@speclynx/apidom-datamodel';
2
+ import openApi2Namespace, { isSwaggerElement, mediaTypes } from '@speclynx/apidom-ns-openapi-2';
3
+ import { traverseAsync } from '@speclynx/apidom-traverse';
3
4
  import DereferenceStrategy from "../DereferenceStrategy.mjs";
4
5
  import Reference from "../../../Reference.mjs";
5
6
  import ReferenceSet from "../../../ReferenceSet.mjs";
6
7
  import OpenAPI2DereferenceVisitor from "./visitor.mjs";
7
- // @ts-ignore
8
- const visitAsync = visit[Symbol.for('nodejs.util.promisify.custom')];
9
-
10
8
  /**
11
9
  * @public
12
10
  */
13
-
14
11
  /**
15
12
  * @public
16
13
  */
@@ -31,7 +28,7 @@ class OpenAPI2DereferenceStrategy extends DereferenceStrategy {
31
28
  return isSwaggerElement(file.parseResult?.api);
32
29
  }
33
30
  async dereference(file, options) {
34
- const namespace = createNamespace(openApi2Namespace);
31
+ const namespace = new Namespace().use(openApi2Namespace);
35
32
  const immutableRefSet = options.dereference.refSet ?? new ReferenceSet();
36
33
  const mutableRefSet = new ReferenceSet();
37
34
  let refSet = immutableRefSet;
@@ -64,9 +61,8 @@ class OpenAPI2DereferenceStrategy extends DereferenceStrategy {
64
61
  namespace,
65
62
  options
66
63
  });
67
- const dereferencedElement = await visitAsync(refSet.rootRef.value, visitor, {
68
- keyMap,
69
- nodeTypeGetter: getNodeType
64
+ const dereferencedElement = await traverseAsync(refSet.rootRef.value, visitor, {
65
+ mutable: true
70
66
  });
71
67
 
72
68
  /**