@speclynx/apidom-overlay 5.2.5 → 5.2.6
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 +4 -0
- package/dist/apidom-overlay.browser.js +119 -88
- package/dist/apidom-overlay.browser.min.js +1 -1
- package/package.json +9 -9
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,10 @@
|
|
|
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
|
+
## [5.2.6](https://github.com/speclynx/apidom/compare/v5.2.5...v5.2.6) (2026-09-19)
|
|
7
|
+
|
|
8
|
+
**Note:** Version bump only for package @speclynx/apidom-overlay
|
|
9
|
+
|
|
6
10
|
## [5.2.5](https://github.com/speclynx/apidom/compare/v5.2.4...v5.2.5) (2026-09-17)
|
|
7
11
|
|
|
8
12
|
**Note:** Version bump only for package @speclynx/apidom-overlay
|
|
@@ -102127,6 +102127,17 @@ class Arazzo1DereferenceStrategy extends _DereferenceStrategy_mjs__WEBPACK_IMPOR
|
|
|
102127
102127
|
})
|
|
102128
102128
|
});
|
|
102129
102129
|
|
|
102130
|
+
/**
|
|
102131
|
+
* If immutable option is set, replay refs from the refSet.
|
|
102132
|
+
* Replayed before source descriptions are dereferenced, so they can reuse the refs.
|
|
102133
|
+
*/
|
|
102134
|
+
if (options.dereference.immutable) {
|
|
102135
|
+
mutableRefSet.refs.filter(ref => ref.uri.startsWith('immutable://')).map(ref => new _Reference_mjs__WEBPACK_IMPORTED_MODULE_7__["default"]({
|
|
102136
|
+
...ref,
|
|
102137
|
+
uri: ref.uri.replace(/^immutable:\/\//, '')
|
|
102138
|
+
})).forEach(ref => immutableRefSet.add(ref));
|
|
102139
|
+
}
|
|
102140
|
+
|
|
102130
102141
|
/**
|
|
102131
102142
|
* Dereference source descriptions if option is enabled.
|
|
102132
102143
|
*/
|
|
@@ -102141,16 +102152,6 @@ class Arazzo1DereferenceStrategy extends _DereferenceStrategy_mjs__WEBPACK_IMPOR
|
|
|
102141
102152
|
parseResult.push(...sourceDescriptions);
|
|
102142
102153
|
}
|
|
102143
102154
|
|
|
102144
|
-
/**
|
|
102145
|
-
* If immutable option is set, replay refs from the refSet.
|
|
102146
|
-
*/
|
|
102147
|
-
if (options.dereference.immutable) {
|
|
102148
|
-
mutableRefSet.refs.filter(ref => ref.uri.startsWith('immutable://')).map(ref => new _Reference_mjs__WEBPACK_IMPORTED_MODULE_7__["default"]({
|
|
102149
|
-
...ref,
|
|
102150
|
-
uri: ref.uri.replace(/^immutable:\/\//, '')
|
|
102151
|
-
})).forEach(ref => immutableRefSet.add(ref));
|
|
102152
|
-
}
|
|
102153
|
-
|
|
102154
102155
|
/**
|
|
102155
102156
|
* Release all memory if this refSet was not provided as a configuration option.
|
|
102156
102157
|
* If provided as configuration option, then provider is responsible for cleanup.
|
|
@@ -102187,10 +102188,18 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
102187
102188
|
/* harmony import */ var _speclynx_apidom_datamodel__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(4823);
|
|
102188
102189
|
/* harmony import */ var _speclynx_apidom_ns_arazzo_1__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(28839);
|
|
102189
102190
|
/* harmony import */ var _speclynx_apidom_core__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(44673);
|
|
102190
|
-
/* harmony import */ var
|
|
102191
|
-
/* harmony import */ var
|
|
102192
|
-
/* harmony import */ var
|
|
102193
|
-
/* harmony import */ var
|
|
102191
|
+
/* harmony import */ var ramda__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(164);
|
|
102192
|
+
/* harmony import */ var _util_url_mjs__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(18917);
|
|
102193
|
+
/* harmony import */ var _Reference_mjs__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(82302);
|
|
102194
|
+
/* harmony import */ var _ReferenceSet_mjs__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(88526);
|
|
102195
|
+
/* harmony import */ var _options_util_mjs__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(7778);
|
|
102196
|
+
/* harmony import */ var _parse_index_mjs__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(85533);
|
|
102197
|
+
/* harmony import */ var _index_mjs__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(79920);
|
|
102198
|
+
/* harmony import */ var _util_mjs__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(42424);
|
|
102199
|
+
|
|
102200
|
+
|
|
102201
|
+
|
|
102202
|
+
|
|
102194
102203
|
|
|
102195
102204
|
|
|
102196
102205
|
|
|
@@ -102224,7 +102233,7 @@ async function dereferenceSourceDescription(sourceDescription, ctx) {
|
|
|
102224
102233
|
}
|
|
102225
102234
|
|
|
102226
102235
|
// normalize URI for consistent cycle detection and refSet cache key matching
|
|
102227
|
-
const retrievalURI =
|
|
102236
|
+
const retrievalURI = _util_url_mjs__WEBPACK_IMPORTED_MODULE_7__.sanitize(_util_url_mjs__WEBPACK_IMPORTED_MODULE_7__.stripHash(_util_url_mjs__WEBPACK_IMPORTED_MODULE_7__.resolve(ctx.baseURI, sourceDescriptionURI)));
|
|
102228
102237
|
parseResult.setMetaProperty('retrievalURI', retrievalURI);
|
|
102229
102238
|
|
|
102230
102239
|
// skip if the document is still being dereferenced higher up the chain (cycle detection)
|
|
@@ -102243,58 +102252,69 @@ async function dereferenceSourceDescription(sourceDescription, ctx) {
|
|
|
102243
102252
|
annotation.classes.push('info');
|
|
102244
102253
|
parseResult.push(annotation);
|
|
102245
102254
|
parseResult.meta.set('parseResult', sharedDereferenceResult);
|
|
102246
|
-
(0,
|
|
102255
|
+
(0,_util_mjs__WEBPACK_IMPORTED_MODULE_13__.validateSourceDescriptionAPI)(parseResult, sourceDescription, sharedDereferenceResult.api, retrievalURI);
|
|
102247
102256
|
return parseResult;
|
|
102248
102257
|
}
|
|
102249
102258
|
|
|
102250
102259
|
// check if source description was already parsed (e.g., during parse phase with sourceDescriptions: true)
|
|
102251
102260
|
const existingParseResult = sourceDescription.meta.get('parseResult');
|
|
102261
|
+
const parentRefSet = ctx.options.dereference.refSet;
|
|
102262
|
+
let refSet = null;
|
|
102252
102263
|
try {
|
|
102253
|
-
|
|
102254
|
-
|
|
102255
|
-
|
|
102256
|
-
|
|
102257
|
-
|
|
102258
|
-
|
|
102259
|
-
|
|
102260
|
-
|
|
102261
|
-
|
|
102262
|
-
},
|
|
102263
|
-
dereference: {
|
|
102264
|
-
strategyOpts: {
|
|
102265
|
-
// nested documents should dereference all their source descriptions
|
|
102266
|
-
// (parent's name filter doesn't apply to nested documents)
|
|
102267
|
-
// set at strategy-specific level to override any inherited filters
|
|
102268
|
-
[ctx.strategyName]: {
|
|
102269
|
-
sourceDescriptions: true,
|
|
102270
|
-
sourceDescriptionsDepth: ctx.currentDepth + 1,
|
|
102271
|
-
sourceDescriptionsAncestors: ctx.ancestors,
|
|
102272
|
-
sourceDescriptionsDereferenced: ctx.dereferenced
|
|
102273
|
-
}
|
|
102274
|
-
}
|
|
102275
|
-
}
|
|
102276
|
-
}));
|
|
102264
|
+
// source description document comes from, in order of preference:
|
|
102265
|
+
// caller-supplied refSet, parse phase, or is fetched and parsed now
|
|
102266
|
+
const cachedReference = parentRefSet?.find(ref => ref.uri === retrievalURI);
|
|
102267
|
+
let sourceDescriptionParseResult;
|
|
102268
|
+
let isFreshlyParsed = false;
|
|
102269
|
+
if (cachedReference !== undefined) {
|
|
102270
|
+
sourceDescriptionParseResult = cachedReference.value;
|
|
102271
|
+
} else if ((0,_speclynx_apidom_datamodel__WEBPACK_IMPORTED_MODULE_1__.isParseResultElement)(existingParseResult)) {
|
|
102272
|
+
sourceDescriptionParseResult = existingParseResult;
|
|
102277
102273
|
} else {
|
|
102278
|
-
|
|
102279
|
-
sourceDescriptionDereferenced = await (0,_index_mjs__WEBPACK_IMPORTED_MODULE_8__["default"])(retrievalURI, (0,_options_util_mjs__WEBPACK_IMPORTED_MODULE_7__.merge)(ctx.options, {
|
|
102274
|
+
sourceDescriptionParseResult = await (0,_parse_index_mjs__WEBPACK_IMPORTED_MODULE_11__["default"])(retrievalURI, (0,_options_util_mjs__WEBPACK_IMPORTED_MODULE_10__.merge)(ctx.options, {
|
|
102280
102275
|
parse: {
|
|
102281
|
-
mediaType: 'text/plain'
|
|
102282
|
-
}
|
|
102283
|
-
dereference: {
|
|
102284
|
-
strategyOpts: {
|
|
102285
|
-
// nested documents should dereference all their source descriptions
|
|
102286
|
-
// (parent's name filter doesn't apply to nested documents)
|
|
102287
|
-
// set at strategy-specific level to override any inherited filters
|
|
102288
|
-
[ctx.strategyName]: {
|
|
102289
|
-
sourceDescriptions: true,
|
|
102290
|
-
sourceDescriptionsDepth: ctx.currentDepth + 1,
|
|
102291
|
-
sourceDescriptionsAncestors: ctx.ancestors,
|
|
102292
|
-
sourceDescriptionsDereferenced: ctx.dereferenced
|
|
102293
|
-
}
|
|
102294
|
-
}
|
|
102295
|
-
}
|
|
102276
|
+
mediaType: 'text/plain'
|
|
102277
|
+
} // allow parser plugin detection
|
|
102296
102278
|
}));
|
|
102279
|
+
isFreshlyParsed = true;
|
|
102280
|
+
}
|
|
102281
|
+
|
|
102282
|
+
// caller-supplied refSet is rooted at the entry document, but strategies dereference
|
|
102283
|
+
// the root of the refSet; re-root its references at the source description
|
|
102284
|
+
if (parentRefSet !== null) {
|
|
102285
|
+
refSet = new _ReferenceSet_mjs__WEBPACK_IMPORTED_MODULE_9__["default"]({
|
|
102286
|
+
refs: [new _Reference_mjs__WEBPACK_IMPORTED_MODULE_8__["default"]({
|
|
102287
|
+
uri: retrievalURI,
|
|
102288
|
+
value: sourceDescriptionParseResult
|
|
102289
|
+
}), ...parentRefSet.refs.map(ref => new _Reference_mjs__WEBPACK_IMPORTED_MODULE_8__["default"]({
|
|
102290
|
+
...ref,
|
|
102291
|
+
refSet: undefined
|
|
102292
|
+
}))]
|
|
102293
|
+
});
|
|
102297
102294
|
}
|
|
102295
|
+
const sourceDescriptionDereferenced = await (0,_index_mjs__WEBPACK_IMPORTED_MODULE_12__.dereferenceApiDOM)(sourceDescriptionParseResult, (0,_options_util_mjs__WEBPACK_IMPORTED_MODULE_10__.merge)((0,ramda__WEBPACK_IMPORTED_MODULE_6__["default"])(['dereference', 'refSet'], refSet, ctx.options), {
|
|
102296
|
+
parse: {
|
|
102297
|
+
mediaType: 'text/plain' // allow dereference strategy detection via ApiDOM inspection
|
|
102298
|
+
},
|
|
102299
|
+
resolve: {
|
|
102300
|
+
baseURI: retrievalURI
|
|
102301
|
+
},
|
|
102302
|
+
dereference: {
|
|
102303
|
+
// freshly parsed document not reported to any refSet can be dereferenced in mutable mode
|
|
102304
|
+
immutable: ctx.options.dereference.immutable && !(isFreshlyParsed && parentRefSet === null),
|
|
102305
|
+
strategyOpts: {
|
|
102306
|
+
// nested documents should dereference all their source descriptions
|
|
102307
|
+
// (parent's name filter doesn't apply to nested documents)
|
|
102308
|
+
// set at strategy-specific level to override any inherited filters
|
|
102309
|
+
[ctx.strategyName]: {
|
|
102310
|
+
sourceDescriptions: true,
|
|
102311
|
+
sourceDescriptionsDepth: ctx.currentDepth + 1,
|
|
102312
|
+
sourceDescriptionsAncestors: ctx.ancestors,
|
|
102313
|
+
sourceDescriptionsDereferenced: ctx.dereferenced
|
|
102314
|
+
}
|
|
102315
|
+
}
|
|
102316
|
+
}
|
|
102317
|
+
}));
|
|
102298
102318
|
|
|
102299
102319
|
// merge dereferenced result into our parse result
|
|
102300
102320
|
for (const item of sourceDescriptionDereferenced) {
|
|
@@ -102307,16 +102327,23 @@ async function dereferenceSourceDescription(sourceDescription, ctx) {
|
|
|
102307
102327
|
annotation.classes.push('error');
|
|
102308
102328
|
parseResult.push(annotation);
|
|
102309
102329
|
return parseResult;
|
|
102330
|
+
} finally {
|
|
102331
|
+
// report documents reached through the source description to the caller-supplied refSet,
|
|
102332
|
+
// even when dereferencing it failed
|
|
102333
|
+
if (parentRefSet !== null && refSet !== null) {
|
|
102334
|
+
parentRefSet.merge(refSet);
|
|
102335
|
+
parentRefSet.circular ||= refSet.circular;
|
|
102336
|
+
}
|
|
102310
102337
|
}
|
|
102311
102338
|
|
|
102312
102339
|
// register dereferenced document for later references to it
|
|
102313
102340
|
const {
|
|
102314
102341
|
api: sourceDescriptionAPI
|
|
102315
102342
|
} = parseResult;
|
|
102316
|
-
for (const documentURI of (0,
|
|
102343
|
+
for (const documentURI of (0,_util_mjs__WEBPACK_IMPORTED_MODULE_13__.arazzoDocumentURIs)(retrievalURI, sourceDescriptionAPI)) {
|
|
102317
102344
|
ctx.dereferenced.set(documentURI, parseResult);
|
|
102318
102345
|
}
|
|
102319
|
-
;(0,
|
|
102346
|
+
;(0,_util_mjs__WEBPACK_IMPORTED_MODULE_13__.validateSourceDescriptionAPI)(parseResult, sourceDescription, sourceDescriptionAPI, retrievalURI);
|
|
102320
102347
|
return parseResult;
|
|
102321
102348
|
}
|
|
102322
102349
|
|
|
@@ -102369,7 +102396,7 @@ async function dereferenceSourceDescription(sourceDescription, ctx) {
|
|
|
102369
102396
|
* @public
|
|
102370
102397
|
*/
|
|
102371
102398
|
async function dereferenceSourceDescriptions(parseResult, parseResultRetrievalURI, options, strategyName = 'arazzo-1') {
|
|
102372
|
-
const retrievalURI =
|
|
102399
|
+
const retrievalURI = _util_url_mjs__WEBPACK_IMPORTED_MODULE_7__.sanitize(_util_url_mjs__WEBPACK_IMPORTED_MODULE_7__.stripHash(parseResultRetrievalURI));
|
|
102373
102400
|
const results = [];
|
|
102374
102401
|
|
|
102375
102402
|
// get API from dereferenced parse result
|
|
@@ -102400,7 +102427,7 @@ async function dereferenceSourceDescriptions(parseResult, parseResultRetrievalUR
|
|
|
102400
102427
|
const currentDepth = sharedOpts.sourceDescriptionsDepth ?? 0;
|
|
102401
102428
|
const dereferenced = sharedOpts.sourceDescriptionsDereferenced ?? new Map();
|
|
102402
102429
|
// current file is an ancestor of everything dereferenced below
|
|
102403
|
-
const ancestors = [...(sharedOpts.sourceDescriptionsAncestors ?? []), ...(0,
|
|
102430
|
+
const ancestors = [...(sharedOpts.sourceDescriptionsAncestors ?? []), ...(0,_util_mjs__WEBPACK_IMPORTED_MODULE_13__.arazzoDocumentURIs)(retrievalURI, api)];
|
|
102404
102431
|
if (currentDepth >= maxDepth) {
|
|
102405
102432
|
const annotation = new _speclynx_apidom_datamodel__WEBPACK_IMPORTED_MODULE_2__["default"](`Maximum dereference depth of ${maxDepth} has been exceeded by file "${retrievalURI}"`);
|
|
102406
102433
|
annotation.classes.push('error');
|
|
@@ -102410,7 +102437,7 @@ async function dereferenceSourceDescriptions(parseResult, parseResultRetrievalUR
|
|
|
102410
102437
|
}
|
|
102411
102438
|
const ctx = {
|
|
102412
102439
|
// base URI for resolving source description URLs honors Arazzo `$self` field
|
|
102413
|
-
baseURI: (0,
|
|
102440
|
+
baseURI: (0,_util_mjs__WEBPACK_IMPORTED_MODULE_13__.resolveArazzo$selfField)(retrievalURI, api),
|
|
102414
102441
|
options,
|
|
102415
102442
|
strategyName,
|
|
102416
102443
|
currentDepth,
|
|
@@ -102859,34 +102886,38 @@ class Arazzo1DereferenceVisitor {
|
|
|
102859
102886
|
return;
|
|
102860
102887
|
}
|
|
102861
102888
|
const runtimeExpression = (0,_speclynx_apidom_core__WEBPACK_IMPORTED_MODULE_6__["default"])(referencingElement.reference);
|
|
102862
|
-
|
|
102863
|
-
// parse the runtime expression
|
|
102864
|
-
const {
|
|
102865
|
-
result,
|
|
102866
|
-
tree
|
|
102867
|
-
} = (0,_swaggerexpert_arazzo_runtime_expression__WEBPACK_IMPORTED_MODULE_15__.parse)(runtimeExpression);
|
|
102868
|
-
if (!result.success) {
|
|
102869
|
-
throw new _speclynx_apidom_error__WEBPACK_IMPORTED_MODULE_8__["default"](`Invalid Reusable Object reference format: "${runtimeExpression}"`, {
|
|
102870
|
-
runtimeExpression
|
|
102871
|
-
});
|
|
102872
|
-
}
|
|
102873
|
-
|
|
102874
|
-
// ReusableElement can only reference components
|
|
102875
|
-
if (tree.type !== 'ComponentsExpression') {
|
|
102876
|
-
throw new _speclynx_apidom_error__WEBPACK_IMPORTED_MODULE_8__["default"](`Reusable Object reference "${runtimeExpression}" must be a components expression`, {
|
|
102877
|
-
runtimeExpression
|
|
102878
|
-
});
|
|
102879
|
-
}
|
|
102880
|
-
|
|
102881
|
-
// evaluate runtime expression as JSON Pointer to get the referenced element
|
|
102882
|
-
const jsonPointer = (0,_speclynx_apidom_json_pointer__WEBPACK_IMPORTED_MODULE_11__.compile)(['components', tree.componentType, tree.componentName]);
|
|
102883
102889
|
let referencedElement;
|
|
102884
102890
|
try {
|
|
102885
|
-
|
|
102886
|
-
|
|
102887
|
-
|
|
102888
|
-
|
|
102889
|
-
});
|
|
102891
|
+
// parse the runtime expression
|
|
102892
|
+
const {
|
|
102893
|
+
result,
|
|
102894
|
+
tree
|
|
102895
|
+
} = (0,_swaggerexpert_arazzo_runtime_expression__WEBPACK_IMPORTED_MODULE_15__.parse)(runtimeExpression);
|
|
102896
|
+
if (!result.success) {
|
|
102897
|
+
throw new _speclynx_apidom_error__WEBPACK_IMPORTED_MODULE_8__["default"](`Invalid Reusable Object reference format: "${runtimeExpression}"`, {
|
|
102898
|
+
runtimeExpression
|
|
102899
|
+
});
|
|
102900
|
+
}
|
|
102901
|
+
|
|
102902
|
+
// ReusableElement can only reference components
|
|
102903
|
+
if (tree.type !== 'ComponentsExpression') {
|
|
102904
|
+
throw new _speclynx_apidom_error__WEBPACK_IMPORTED_MODULE_8__["default"](`Reusable Object reference "${runtimeExpression}" must be a components expression`, {
|
|
102905
|
+
runtimeExpression
|
|
102906
|
+
});
|
|
102907
|
+
}
|
|
102908
|
+
|
|
102909
|
+
// evaluate runtime expression as JSON Pointer to get the referenced element
|
|
102910
|
+
const jsonPointer = (0,_speclynx_apidom_json_pointer__WEBPACK_IMPORTED_MODULE_11__.compile)(['components', tree.componentType, tree.componentName]);
|
|
102911
|
+
try {
|
|
102912
|
+
referencedElement = (0,_speclynx_apidom_json_pointer__WEBPACK_IMPORTED_MODULE_10__.evaluate)(this.reference.value.result, jsonPointer);
|
|
102913
|
+
} catch {
|
|
102914
|
+
throw new _speclynx_apidom_error__WEBPACK_IMPORTED_MODULE_8__["default"](`Reusable Object reference "${runtimeExpression}" cannot be resolved`, {
|
|
102915
|
+
runtimeExpression
|
|
102916
|
+
});
|
|
102917
|
+
}
|
|
102918
|
+
} catch (error) {
|
|
102919
|
+
this.handleError(`Error while dereferencing Reusable Object. Cannot resolve reference "${runtimeExpression}": ${error.message}`, error, referencingElement, 'reference', runtimeExpression, path);
|
|
102920
|
+
return;
|
|
102890
102921
|
}
|
|
102891
102922
|
|
|
102892
102923
|
/**
|