@speclynx/apidom-overlay 4.6.0 → 4.7.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.
package/CHANGELOG.md CHANGED
@@ -3,6 +3,16 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ ## [4.7.1](https://github.com/speclynx/apidom/compare/v4.7.0...v4.7.1) (2026-04-16)
7
+
8
+ **Note:** Version bump only for package @speclynx/apidom-overlay
9
+
10
+ # [4.7.0](https://github.com/speclynx/apidom/compare/v4.6.0...v4.7.0) (2026-04-12)
11
+
12
+ ### Features
13
+
14
+ - **overlay:** generic targets, export defaults, scoped opts ([#236](https://github.com/speclynx/apidom/issues/236)) ([7df6dc7](https://github.com/speclynx/apidom/commit/7df6dc79d18e4c71ceb17037a45f9ba069fdcaf1))
15
+
6
16
  # [4.6.0](https://github.com/speclynx/apidom/compare/v4.5.0...v4.6.0) (2026-04-12)
7
17
 
8
18
  ### Features
@@ -306,10 +306,10 @@ const applyOverlay = (overlayElement, targetElement, options = defaultApplyOptio
306
306
  }
307
307
  let target;
308
308
  if (targetElement instanceof _speclynx_apidom_datamodel__WEBPACK_IMPORTED_MODULE_2__["default"]) {
309
- if (targetElement.api === undefined) {
310
- throw new _errors_OverlayError_ts__WEBPACK_IMPORTED_MODULE_8__["default"]('Target ParseResultElement contains no API element');
309
+ if (targetElement.result === undefined) {
310
+ throw new _errors_OverlayError_ts__WEBPACK_IMPORTED_MODULE_8__["default"]('Target ParseResultElement contains no result element');
311
311
  }
312
- target = targetElement.api;
312
+ target = targetElement.result;
313
313
  } else {
314
314
  target = targetElement;
315
315
  }
@@ -325,7 +325,9 @@ const applyOverlay = (overlayElement, targetElement, options = defaultApplyOptio
325
325
  target = applyAction(action, target, internalOptions);
326
326
  }
327
327
  if (targetElement instanceof _speclynx_apidom_datamodel__WEBPACK_IMPORTED_MODULE_2__["default"]) {
328
- targetElement.replaceResult(target);
328
+ if (target !== targetElement.result) {
329
+ targetElement.replaceResult(target);
330
+ }
329
331
  return targetElement;
330
332
  }
331
333
  return target;
@@ -373,7 +375,8 @@ const applyOverlay = (overlay, target, options) => (0,_speclynx_apidom_core__WEB
373
375
  "use strict";
374
376
  __webpack_require__.r(__webpack_exports__);
375
377
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
376
- /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
378
+ /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__),
379
+ /* harmony export */ defaultOptions: () => (/* binding */ defaultOptions)
377
380
  /* harmony export */ });
378
381
  /* harmony import */ var _speclynx_apidom_datamodel__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(96911);
379
382
  /* harmony import */ var _speclynx_apidom_ns_overlay_1__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(26432);
@@ -390,7 +393,7 @@ __webpack_require__.r(__webpack_exports__);
390
393
  * @public
391
394
  */
392
395
 
393
- const defaultOptions = {
396
+ const defaultReferenceOptions = {
394
397
  parse: {
395
398
  parserOpts: {
396
399
  strict: false,
@@ -414,6 +417,15 @@ const defaultOptions = {
414
417
  }
415
418
  };
416
419
 
420
+ /**
421
+ * @public
422
+ */
423
+ const defaultOptions = {
424
+ immutable: false,
425
+ strict: false,
426
+ reference: defaultReferenceOptions
427
+ };
428
+
417
429
  /**
418
430
  * Applies an overlay document from a file/URL to its target document.
419
431
  *
@@ -423,27 +435,23 @@ const defaultOptions = {
423
435
  *
424
436
  * @param overlayURI - URI to the overlay document (file path or URL)
425
437
  * @param targetURI - URI to the target document; if omitted, uses the overlay's `extends` field
426
- * @param options - apidom-reference options + overlay merge options
438
+ * @param options - overlay apply options; reference options live under `options.reference`
427
439
  * @returns ParseResultElement with the modified target document
428
440
  *
429
441
  * @public
430
442
  */
431
- const applyOverlay = async (overlayURI, targetURI, options = {
432
- immutable: false,
433
- strict: false
434
- }) => {
435
- const mergedOptions = (0,_speclynx_apidom_reference__WEBPACK_IMPORTED_MODULE_2__.mergeOptions)(defaultOptions, options);
443
+ const applyOverlay = async (overlayURI, targetURI, options = defaultOptions) => {
444
+ const mergedRefOptions = (0,_speclynx_apidom_reference__WEBPACK_IMPORTED_MODULE_2__.mergeOptions)(defaultReferenceOptions, options.reference ?? {});
436
445
 
437
446
  // parse the overlay document along with document attached to `extends` field (if present)
438
- const overlayParseResult = await (0,_speclynx_apidom_reference__WEBPACK_IMPORTED_MODULE_2__.parse)(overlayURI, mergedOptions);
447
+ const overlayParseResult = await (0,_speclynx_apidom_reference__WEBPACK_IMPORTED_MODULE_2__.parse)(overlayURI, mergedRefOptions);
439
448
  const overlayElement = overlayParseResult.api;
440
449
  if (!(0,_speclynx_apidom_ns_overlay_1__WEBPACK_IMPORTED_MODULE_1__.isOverlay1Element)(overlayElement)) {
441
450
  throw new _errors_OverlayError_ts__WEBPACK_IMPORTED_MODULE_4__["default"](`Failed to parse overlay document "${overlayURI}"`);
442
451
  }
443
452
  let targetParseResult;
444
453
  if (targetURI) {
445
- const targetOptions = (0,_speclynx_apidom_reference__WEBPACK_IMPORTED_MODULE_2__.mergeOptions)(defaultOptions, options);
446
- targetParseResult = await (0,_speclynx_apidom_reference__WEBPACK_IMPORTED_MODULE_2__.parse)(targetURI, targetOptions);
454
+ targetParseResult = await (0,_speclynx_apidom_reference__WEBPACK_IMPORTED_MODULE_2__.parse)(targetURI, mergedRefOptions);
447
455
  } else {
448
456
  const extendsElement = overlayElement.get('extends');
449
457
  targetParseResult = extendsElement?.meta?.get('parseResult');
@@ -91940,6 +91948,7 @@ class Arazzo1DereferenceVisitor {
91940
91948
  * Transclude referencing element with merged referenced element.
91941
91949
  */
91942
91950
  path.replaceWith(mergedElement);
91951
+ path.skip();
91943
91952
  }
91944
91953
  async JSONSchemaElement(path) {
91945
91954
  const referencingElement = path.node;
@@ -92100,6 +92109,7 @@ class Arazzo1DereferenceVisitor {
92100
92109
  const replacer = this.options.dereference.strategyOpts['arazzo-1']?.circularReplacer ?? this.options.dereference.circularReplacer;
92101
92110
  const replacement = replacer(refElement);
92102
92111
  path.replaceWith(replacement);
92112
+ path.skip();
92103
92113
  return;
92104
92114
  }
92105
92115
  }
@@ -92143,6 +92153,7 @@ class Arazzo1DereferenceVisitor {
92143
92153
  booleanJsonSchemaElement.meta.set('ref-origin', reference.uri);
92144
92154
  booleanJsonSchemaElement.meta.set('ref-type', referencingElement.element);
92145
92155
  path.replaceWith(booleanJsonSchemaElement);
92156
+ path.skip();
92146
92157
  return;
92147
92158
  }
92148
92159
 
@@ -92595,6 +92606,7 @@ class AsyncAPI2DereferenceVisitor {
92595
92606
  const replacer = this.options.dereference.strategyOpts['asyncapi-2']?.circularReplacer ?? this.options.dereference.circularReplacer;
92596
92607
  const replacement = replacer(refElement);
92597
92608
  path.replaceWith(replacement);
92609
+ path.skip();
92598
92610
  return;
92599
92611
  }
92600
92612
  }
@@ -92639,6 +92651,7 @@ class AsyncAPI2DereferenceVisitor {
92639
92651
  booleanJsonSchemaElement.meta.set('ref-origin', reference.uri);
92640
92652
  booleanJsonSchemaElement.meta.set('ref-type', referencingElement.element);
92641
92653
  path.replaceWith(booleanJsonSchemaElement);
92654
+ path.skip();
92642
92655
  return;
92643
92656
  }
92644
92657
 
@@ -92658,6 +92671,7 @@ class AsyncAPI2DereferenceVisitor {
92658
92671
  * Transclude referencing element with merged referenced element.
92659
92672
  */
92660
92673
  path.replaceWith(mergedElement);
92674
+ path.skip();
92661
92675
  } catch (error) {
92662
92676
  const $ref = (0,_speclynx_apidom_core__WEBPACK_IMPORTED_MODULE_4__["default"])(referencingElement.$ref);
92663
92677
  this.handleError(`Error while dereferencing Reference Object. Cannot resolve $ref "${$ref}": ${error.message}`, error, referencingElement, '$ref', $ref, path);
@@ -93233,6 +93247,7 @@ class OpenAPI2DereferenceVisitor {
93233
93247
  const replacer = this.options.dereference.strategyOpts['openapi-2']?.circularReplacer ?? this.options.dereference.circularReplacer;
93234
93248
  const replacement = replacer(refElement);
93235
93249
  path.replaceWith(replacement);
93250
+ path.skip();
93236
93251
  return;
93237
93252
  }
93238
93253
  }
@@ -93280,6 +93295,7 @@ class OpenAPI2DereferenceVisitor {
93280
93295
  * Transclude referencing element with merged referenced element.
93281
93296
  */
93282
93297
  path.replaceWith(mergedElement);
93298
+ path.skip();
93283
93299
  } catch (error) {
93284
93300
  const $ref = (0,_speclynx_apidom_core__WEBPACK_IMPORTED_MODULE_4__["default"])(referencingElement.$ref);
93285
93301
  this.handleError(`Error while dereferencing Reference Object. Cannot resolve $ref "${$ref}": ${error.message}`, error, referencingElement, '$ref', $ref, path);
@@ -93367,6 +93383,7 @@ class OpenAPI2DereferenceVisitor {
93367
93383
  const replacer = this.options.dereference.strategyOpts['openapi-2']?.circularReplacer ?? this.options.dereference.circularReplacer;
93368
93384
  const replacement = replacer(refElement);
93369
93385
  path.replaceWith(replacement);
93386
+ path.skip();
93370
93387
  return;
93371
93388
  }
93372
93389
  }
@@ -93521,6 +93538,7 @@ class OpenAPI2DereferenceVisitor {
93521
93538
  const replacer = this.options.dereference.strategyOpts['openapi-2']?.circularReplacer ?? this.options.dereference.circularReplacer;
93522
93539
  const replacement = replacer(refElement);
93523
93540
  path.replaceWith(replacement);
93541
+ path.skip();
93524
93542
  return;
93525
93543
  }
93526
93544
  }
@@ -93570,6 +93588,7 @@ class OpenAPI2DereferenceVisitor {
93570
93588
  * Transclude referencing element with merged referenced element.
93571
93589
  */
93572
93590
  path.replaceWith(mergedElement);
93591
+ path.skip();
93573
93592
  } catch (error) {
93574
93593
  const $ref = (0,_speclynx_apidom_core__WEBPACK_IMPORTED_MODULE_4__["default"])(referencingElement.$ref);
93575
93594
  this.handleError(`Error while dereferencing JSON Reference Object. Cannot resolve $ref "${$ref}": ${error.message}`, error, referencingElement, '$ref', $ref, path);
@@ -93998,6 +94017,7 @@ class OpenAPI3_0DereferenceVisitor {
93998
94017
  const replacer = this.options.dereference.strategyOpts['openapi-3-0']?.circularReplacer ?? this.options.dereference.circularReplacer;
93999
94018
  const replacement = replacer(refElement);
94000
94019
  path.replaceWith(replacement);
94020
+ path.skip();
94001
94021
  return;
94002
94022
  }
94003
94023
  }
@@ -94047,6 +94067,7 @@ class OpenAPI3_0DereferenceVisitor {
94047
94067
  * Transclude referencing element with merged referenced element.
94048
94068
  */
94049
94069
  path.replaceWith(mergedElement);
94070
+ path.skip();
94050
94071
  } catch (error) {
94051
94072
  const $ref = (0,_speclynx_apidom_core__WEBPACK_IMPORTED_MODULE_5__["default"])(referencingElement.$ref);
94052
94073
  this.handleError(`Error while dereferencing Reference Object. Cannot resolve $ref "${$ref}": ${error.message}`, error, referencingElement, '$ref', $ref, path);
@@ -94134,6 +94155,7 @@ class OpenAPI3_0DereferenceVisitor {
94134
94155
  const replacer = this.options.dereference.strategyOpts['openapi-3-0']?.circularReplacer ?? this.options.dereference.circularReplacer;
94135
94156
  const replacement = replacer(refElement);
94136
94157
  path.replaceWith(replacement);
94158
+ path.skip();
94137
94159
  return;
94138
94160
  }
94139
94161
  }
@@ -94996,6 +95018,7 @@ class OpenAPI3_1DereferenceVisitor {
94996
95018
  const replacer = this.options.dereference.strategyOpts['openapi-3-1']?.circularReplacer ?? this.options.dereference.circularReplacer;
94997
95019
  const replacement = replacer(refElement);
94998
95020
  path.replaceWith(replacement);
95021
+ path.skip();
94999
95022
  return;
95000
95023
  }
95001
95024
  }
@@ -95148,6 +95171,7 @@ class OpenAPI3_1DereferenceVisitor {
95148
95171
  const replacer = this.options.dereference.strategyOpts['openapi-3-1']?.circularReplacer ?? this.options.dereference.circularReplacer;
95149
95172
  const replacement = replacer(refElement);
95150
95173
  path.replaceWith(replacement);
95174
+ path.skip();
95151
95175
  return;
95152
95176
  }
95153
95177
  }
@@ -95504,6 +95528,7 @@ class OpenAPI3_1DereferenceVisitor {
95504
95528
  const replacer = this.options.dereference.strategyOpts['openapi-3-1']?.circularReplacer ?? this.options.dereference.circularReplacer;
95505
95529
  const replacement = replacer(refElement);
95506
95530
  path.replaceWith(replacement);
95531
+ path.skip();
95507
95532
  return;
95508
95533
  }
95509
95534
  }
@@ -95545,6 +95570,7 @@ class OpenAPI3_1DereferenceVisitor {
95545
95570
  booleanJsonSchemaElement.meta.set('ref-origin', reference.uri);
95546
95571
  booleanJsonSchemaElement.meta.set('ref-type', referencingElement.element);
95547
95572
  path.replaceWith(booleanJsonSchemaElement);
95573
+ path.skip();
95548
95574
  return;
95549
95575
  }
95550
95576
 
@@ -100253,11 +100279,6 @@ function* traverseGenerator(root, visitor, options) {
100253
100279
  if (currentPath.shouldStop) {
100254
100280
  break;
100255
100281
  }
100256
- if (currentPath.shouldSkip) {
100257
- if (!isLeaving) {
100258
- continue;
100259
- }
100260
- }
100261
100282
  if (currentPath.removed) {
100262
100283
  edits.push([key, null]);
100263
100284
  if (!isLeaving) {
@@ -100267,12 +100288,19 @@ function* traverseGenerator(root, visitor, options) {
100267
100288
  const replacement = currentPath._getReplacementNode();
100268
100289
  edits.push([key, replacement]);
100269
100290
  if (!isLeaving) {
100291
+ if (currentPath.shouldSkip) {
100292
+ continue;
100293
+ }
100270
100294
  if (nodePredicate(replacement)) {
100271
100295
  node = replacement;
100272
100296
  } else {
100273
100297
  continue;
100274
100298
  }
100275
100299
  }
100300
+ } else if (currentPath.shouldSkip) {
100301
+ if (!isLeaving) {
100302
+ continue;
100303
+ }
100276
100304
  } else if (result !== undefined) {
100277
100305
  // Support return value replacement for backwards compatibility
100278
100306
  edits.push([key, result]);
@@ -101017,6 +101045,7 @@ __webpack_require__.r(__webpack_exports__);
101017
101045
  /* harmony export */ applyOverlay: () => (/* reexport safe */ _apply_realms_uri_ts__WEBPACK_IMPORTED_MODULE_1__["default"]),
101018
101046
  /* harmony export */ applyOverlayApiDOM: () => (/* reexport safe */ _apply_realms_apidom_ts__WEBPACK_IMPORTED_MODULE_0__.applyOverlay),
101019
101047
  /* harmony export */ applyOverlayPOJO: () => (/* reexport safe */ _apply_realms_pojo_ts__WEBPACK_IMPORTED_MODULE_2__.applyOverlay),
101048
+ /* harmony export */ defaultApplyOverlayOptions: () => (/* reexport safe */ _apply_realms_uri_ts__WEBPACK_IMPORTED_MODULE_1__.defaultOptions),
101020
101049
  /* harmony export */ validateAction: () => (/* reexport safe */ _validate_ts__WEBPACK_IMPORTED_MODULE_3__.validateAction)
101021
101050
  /* harmony export */ });
101022
101051
  /* harmony import */ var _apply_realms_apidom_ts__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(28216);