@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 +10 -0
- package/dist/apidom-overlay.browser.js +49 -20
- package/dist/apidom-overlay.browser.min.js +1 -1
- package/package.json +9 -8
- package/src/apply/realms/apidom.cjs +6 -4
- package/src/apply/realms/apidom.mjs +6 -4
- package/src/apply/realms/uri.cjs +16 -11
- package/src/apply/realms/uri.mjs +15 -10
- package/src/index.cjs +4 -2
- package/src/index.mjs +1 -1
- package/types/apidom-overlay.d.ts +9 -2
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.
|
|
310
|
-
throw new _errors_OverlayError_ts__WEBPACK_IMPORTED_MODULE_8__["default"]('Target ParseResultElement contains no
|
|
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.
|
|
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.
|
|
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
|
|
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 -
|
|
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
|
-
|
|
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,
|
|
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
|
-
|
|
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);
|