@speclynx/apidom-reference 4.1.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 +15 -0
  2. package/README.md +327 -0
  3. package/dist/apidom-reference.browser.js +23517 -21610
  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/CHANGELOG.md CHANGED
@@ -3,6 +3,21 @@
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.3.1](https://github.com/speclynx/apidom/compare/v4.3.0...v4.3.1) (2026-04-08)
7
+
8
+ **Note:** Version bump only for package @speclynx/apidom-reference
9
+
10
+ # [4.3.0](https://github.com/speclynx/apidom/compare/v4.2.0...v4.3.0) (2026-04-07)
11
+
12
+ ### Features
13
+
14
+ - **reference:** add Arazzo resolve strategy ([#210](https://github.com/speclynx/apidom/issues/210)) ([28103f5](https://github.com/speclynx/apidom/commit/28103f52d72591b9a185319a4e4b1631cd639407)), closes [#78](https://github.com/speclynx/apidom/issues/78)
15
+ - **reference:** add Overlay parsers, derefer and resolve strategies ([#189](https://github.com/speclynx/apidom/issues/189)) ([7e4565b](https://github.com/speclynx/apidom/commit/7e4565b7807b875769857693a912bab807dc9a13))
16
+
17
+ # [4.2.0](https://github.com/speclynx/apidom/compare/v4.1.0...v4.2.0) (2026-03-17)
18
+
19
+ **Note:** Version bump only for package @speclynx/apidom-reference
20
+
6
21
  # [4.1.0](https://github.com/speclynx/apidom/compare/v4.0.5...v4.1.0) (2026-03-16)
7
22
 
8
23
  **Note:** Version bump only for package @speclynx/apidom-reference
package/README.md CHANGED
@@ -512,6 +512,184 @@ parseSourceDescriptions(
512
512
  ): Promise<ParseResultElement[]>
513
513
  ```
514
514
 
515
+ #### [overlay-json-1](https://github.com/speclynx/apidom/tree/main/packages/apidom-reference/src/parse/parsers/overlay-json-1)
516
+
517
+ Wraps [@speclynx/apidom-parser-adapter-overlay-json-1](https://github.com/speclynx/apidom/tree/main/packages/apidom-parser-adapter-overlay-json-1) package
518
+ and is uniquely identified by `overlay-json-1` name.
519
+
520
+ Supported media types are:
521
+
522
+ ```js
523
+ [
524
+ 'application/vnd.oai.overlay;version=1.0.0',
525
+ 'application/vnd.oai.overlay+json;version=1.0.0',
526
+ 'application/vnd.oai.overlay;version=1.1.0',
527
+ 'application/vnd.oai.overlay+json;version=1.1.0',
528
+ ]
529
+ ```
530
+
531
+ ##### Parser options
532
+
533
+ The following options can be passed via `parse.parserOpts` (globally) or `parse.parserOpts['overlay-json-1']` (parser-specific).
534
+ Parser-specific options take precedence over global options.
535
+
536
+ - **extends** - Controls whether the `extends` target document is parsed and included in the `ParseResultElement`.
537
+ - `true` - parse the extends target document
538
+
539
+ The parsed extends document is added with an `'extends'` class and `retrievalURI` metadata.
540
+ A `ParseResultElement` is also attached to the extends element's meta as `'parseResult'`.
541
+
542
+ ##### Error handling
543
+
544
+ The extends parsing uses annotations instead of throwing errors, allowing parsing to continue
545
+ even when the target document cannot be resolved. Errors are reported as `AnnotationElement` instances
546
+ with an `'error'` class within the parse result.
547
+
548
+ ```js
549
+ import { parse } from '@speclynx/apidom-reference';
550
+
551
+ // Parse with extends resolution
552
+ const parseResult = await parse('/path/to/overlay.json', {
553
+ parse: {
554
+ parserOpts: {
555
+ 'overlay-json-1': { extends: true },
556
+ },
557
+ },
558
+ });
559
+
560
+ // Access parsed extends document
561
+ for (const element of parseResult) {
562
+ if (element.classes.includes('extends')) {
563
+ console.log(element.meta.get('retrievalURI')); // e.g., '/path/to/openapi.json'
564
+ }
565
+ }
566
+ ```
567
+
568
+ ##### Accessing parsed document via extends element
569
+
570
+ When extends parsing is enabled, a `ParseResultElement` is attached to the
571
+ extends `StringElement`'s meta as `'parseResult'`. This attachment always happens,
572
+ regardless of success or failure:
573
+
574
+ - **On success**: The parseResult contains the parsed API document
575
+ - **On failure**: The parseResult contains error annotations explaining what went wrong
576
+
577
+ ```js
578
+ import { parse } from '@speclynx/apidom-reference';
579
+
580
+ const parseResult = await parse('/path/to/overlay.json', {
581
+ parse: { parserOpts: { 'overlay-json-1': { extends: true } } },
582
+ });
583
+
584
+ // Access parsed document from extends element
585
+ const api = parseResult.api;
586
+ const extendsElement = api.get('extends');
587
+ const parsedDoc = extendsElement.meta.get('parseResult');
588
+
589
+ // Check for errors before using
590
+ if (parsedDoc.errors.length > 0) {
591
+ console.log('Parsing failed:', parsedDoc.errors);
592
+ } else {
593
+ console.log(parsedDoc.api.element); // e.g., 'openApi3_1'
594
+ console.log(parsedDoc.meta.get('retrievalURI')); // URI where it was fetched from
595
+ }
596
+ ```
597
+
598
+ ##### Low-level API
599
+
600
+ For advanced use cases where you need to parse the extends target from an already-parsed Overlay document
601
+ (e.g., when using naked parser adapters directly), the `parseExtends` function is exported:
602
+
603
+ ```js
604
+ import { parse } from '@speclynx/apidom-parser-adapter-overlay-json-1';
605
+ import { parseExtends } from '@speclynx/apidom-reference/parse/parsers/overlay-json-1';
606
+ import { options } from '@speclynx/apidom-reference';
607
+
608
+ // Parse using naked parser adapter
609
+ const parseResult = await parse(overlayJsonString);
610
+
611
+ // Parse the extends target
612
+ await parseExtends(parseResult, '/path/to/overlay.json', options);
613
+
614
+ // Access parsed document from extends element
615
+ const extendsElement = parseResult.api.get('extends');
616
+ const parsedDoc = extendsElement.meta.get('parseResult');
617
+ ```
618
+
619
+ The function signature is:
620
+ ```typescript
621
+ parseExtends(
622
+ parseResult: ParseResultElement,
623
+ parseResultRetrievalURI: string,
624
+ options: ReferenceOptions,
625
+ ): Promise<void>
626
+ ```
627
+
628
+ #### [overlay-yaml-1](https://github.com/speclynx/apidom/tree/main/packages/apidom-reference/src/parse/parsers/overlay-yaml-1)
629
+
630
+ Wraps [@speclynx/apidom-parser-adapter-overlay-yaml-1](https://github.com/speclynx/apidom/tree/main/packages/apidom-parser-adapter-overlay-yaml-1) package
631
+ and is uniquely identified by `overlay-yaml-1` name.
632
+
633
+ Supported media types are:
634
+
635
+ ```js
636
+ [
637
+ 'application/vnd.oai.overlay;version=1.0.0',
638
+ 'application/vnd.oai.overlay+yaml;version=1.0.0',
639
+ 'application/vnd.oai.overlay;version=1.1.0',
640
+ 'application/vnd.oai.overlay+yaml;version=1.1.0',
641
+ ]
642
+ ```
643
+
644
+ ##### Parser options
645
+
646
+ The following options can be passed via `parse.parserOpts` (globally) or `parse.parserOpts['overlay-yaml-1']` (parser-specific).
647
+ Parser-specific options take precedence over global options. See [overlay-json-1](#overlay-json-1) for usage examples.
648
+
649
+ - **extends** - Controls whether the `extends` target document is parsed and included in the `ParseResultElement`.
650
+ - `true` - parse the extends target document
651
+
652
+ The parsed extends document is added with an `'extends'` class and `retrievalURI` metadata.
653
+ A `ParseResultElement` is also attached to the extends element's meta as `'parseResult'`.
654
+
655
+ ##### Error handling
656
+
657
+ See [overlay-json-1 Error handling](#error-handling-2) - the behavior is identical for both JSON and YAML parsers.
658
+
659
+ ##### Accessing parsed document via extends element
660
+
661
+ See [overlay-json-1 Accessing parsed document](#accessing-parsed-document-via-extends-element) - the behavior is identical for both JSON and YAML parsers.
662
+
663
+ ##### Low-level API
664
+
665
+ For advanced use cases where you need to parse the extends target from an already-parsed Overlay document
666
+ (e.g., when using naked parser adapters directly), the `parseExtends` function is exported:
667
+
668
+ ```js
669
+ import { parse } from '@speclynx/apidom-parser-adapter-overlay-yaml-1';
670
+ import { parseExtends } from '@speclynx/apidom-reference/parse/parsers/overlay-yaml-1';
671
+ import { options } from '@speclynx/apidom-reference';
672
+
673
+ // Parse using naked parser adapter
674
+ const parseResult = await parse(overlayYamlString);
675
+
676
+ // Parse the extends target
677
+ await parseExtends(parseResult, '/path/to/overlay.yaml', options);
678
+
679
+ // Access parsed document from extends element
680
+ const extendsElement = parseResult.api.get('extends');
681
+ const parsedDoc = extendsElement.meta.get('parseResult');
682
+ ```
683
+
684
+ The function signature is:
685
+ ```typescript
686
+ parseExtends(
687
+ parseResult: ParseResultElement,
688
+ parseResultRetrievalURI: string,
689
+ options: ReferenceOptions,
690
+ ): Promise<void>
691
+ ```
692
+
515
693
  #### [json](https://github.com/speclynx/apidom/tree/main/packages/apidom-reference/src/parse/parsers/json)
516
694
 
517
695
  Wraps [@speclynx/apidom-parser-adapter-json](https://github.com/speclynx/apidom/tree/main/packages/apidom-parser-adapter-json) package
@@ -1415,6 +1593,40 @@ Supported media types:
1415
1593
  ]
1416
1594
  ```
1417
1595
 
1596
+ ##### [arazzo-1](https://github.com/speclynx/apidom/tree/main/packages/apidom-reference/src/resolve/strategies/arazzo-1)
1597
+
1598
+ External resolution strategy for understanding and resolving external dependencies of [Arazzo 1.x](https://spec.openapis.org/arazzo/latest.html) definitions.
1599
+
1600
+ Supported media types:
1601
+
1602
+ ```js
1603
+ [
1604
+ 'application/vnd.oai.workflows;version=1.0.0',
1605
+ 'application/vnd.oai.workflows+json;version=1.0.0',
1606
+ 'application/vnd.oai.workflows+yaml;version=1.0.0',
1607
+ 'application/vnd.oai.workflows;version=1.0.1',
1608
+ 'application/vnd.oai.workflows+json;version=1.0.1',
1609
+ 'application/vnd.oai.workflows+yaml;version=1.0.1',
1610
+ ]
1611
+ ```
1612
+
1613
+ ##### [overlay-1](https://github.com/speclynx/apidom/tree/main/packages/apidom-reference/src/resolve/strategies/overlay-1)
1614
+
1615
+ External resolution strategy for understanding and resolving external dependencies of [Overlay 1.x](https://spec.openapis.org/overlay/v1.1.0.html) definitions.
1616
+
1617
+ Supported media types:
1618
+
1619
+ ```js
1620
+ [
1621
+ 'application/vnd.oai.overlay;version=1.0.0',
1622
+ 'application/vnd.oai.overlay+json;version=1.0.0',
1623
+ 'application/vnd.oai.overlay+yaml;version=1.0.0',
1624
+ 'application/vnd.oai.overlay;version=1.1.0',
1625
+ 'application/vnd.oai.overlay+json;version=1.1.0',
1626
+ 'application/vnd.oai.overlay+yaml;version=1.1.0',
1627
+ ]
1628
+ ```
1629
+
1418
1630
  ##### [openapi-2](https://github.com/speclynx/apidom/tree/main/packages/apidom-reference/src/resolve/strategies/openapi-2)
1419
1631
 
1420
1632
  External resolution strategy for understanding and resolving external dependencies of [OpenApi 2.0](https://github.com/OAI/OpenAPI-Specification/blob/main/versions/2.0.md) definitions.
@@ -1938,6 +2150,121 @@ dereferenceSourceDescriptions(
1938
2150
  ): Promise<ParseResultElement[]>
1939
2151
  ```
1940
2152
 
2153
+ ##### [overlay-1](https://github.com/speclynx/apidom/tree/main/packages/apidom-reference/src/dereference/strategies/overlay-1)
2154
+
2155
+ Dereference strategy for dereferencing [Overlay 1.x](https://spec.openapis.org/overlay/v1.1.0.html) definitions.
2156
+
2157
+ Supported media types:
2158
+
2159
+ ```js
2160
+ [
2161
+ 'application/vnd.oai.overlay;version=1.0.0',
2162
+ 'application/vnd.oai.overlay+json;version=1.0.0',
2163
+ 'application/vnd.oai.overlay+yaml;version=1.0.0',
2164
+ 'application/vnd.oai.overlay;version=1.1.0',
2165
+ 'application/vnd.oai.overlay+json;version=1.1.0',
2166
+ 'application/vnd.oai.overlay+yaml;version=1.1.0',
2167
+ ]
2168
+ ```
2169
+
2170
+ ###### Strategy options
2171
+
2172
+ The following options can be passed via `dereference.strategyOpts` (globally) or `dereference.strategyOpts['overlay-1']` (strategy-specific).
2173
+ Strategy-specific options take precedence over global options.
2174
+
2175
+ - **extends** - Controls whether the `extends` target document is dereferenced and included in the result.
2176
+ - `true` - dereference the extends target document
2177
+
2178
+ The dereferenced extends document is added with an `'extends'` class and `retrievalURI` metadata.
2179
+ If the extends target was already parsed during the parse phase, it will be dereferenced in place
2180
+ without re-fetching.
2181
+
2182
+ ###### Error handling
2183
+
2184
+ The extends dereferencing uses annotations instead of throwing errors, allowing dereferencing to continue
2185
+ even when the target document fails. Errors are reported as `AnnotationElement` instances
2186
+ with an `'error'` class within the result.
2187
+
2188
+ ```js
2189
+ import { dereference } from '@speclynx/apidom-reference';
2190
+
2191
+ // Dereference with extends resolution
2192
+ const result = await dereference('/path/to/overlay.json', {
2193
+ dereference: {
2194
+ strategyOpts: {
2195
+ 'overlay-1': { extends: true },
2196
+ },
2197
+ },
2198
+ });
2199
+
2200
+ // Access dereferenced extends document
2201
+ for (const element of result) {
2202
+ if (element.classes.includes('extends')) {
2203
+ console.log(element.meta.get('retrievalURI')); // e.g., '/path/to/openapi.json'
2204
+ }
2205
+ }
2206
+ ```
2207
+
2208
+ ###### Accessing dereferenced document via extends element
2209
+
2210
+ When extends dereferencing is enabled, a `ParseResultElement` is attached to the
2211
+ extends `StringElement`'s meta as `'parseResult'`, overriding any existing parse result
2212
+ from the parse phase. This attachment always happens, regardless of success or failure:
2213
+
2214
+ - **On success**: The parseResult contains the dereferenced API document
2215
+ - **On failure**: The parseResult contains error annotations explaining what went wrong
2216
+
2217
+ ```js
2218
+ import { dereference } from '@speclynx/apidom-reference';
2219
+
2220
+ const result = await dereference('/path/to/overlay.json', {
2221
+ dereference: { strategyOpts: { 'overlay-1': { extends: true } } },
2222
+ });
2223
+
2224
+ // Access dereferenced document from extends element
2225
+ const api = result.api;
2226
+ const extendsElement = api.get('extends');
2227
+ const dereferencedDoc = extendsElement.meta.get('parseResult');
2228
+
2229
+ // Check for errors before using
2230
+ if (dereferencedDoc.errors.length > 0) {
2231
+ console.log('Dereferencing failed:', dereferencedDoc.errors);
2232
+ } else {
2233
+ console.log(dereferencedDoc.api.element); // e.g., 'openApi3_1'
2234
+ console.log(dereferencedDoc.meta.get('retrievalURI')); // URI where it was fetched from
2235
+ }
2236
+ ```
2237
+
2238
+ ###### Low-level API
2239
+
2240
+ For advanced use cases where you need to dereference the extends target from an already-parsed Overlay document
2241
+ (e.g., when using naked parser adapters directly), the `dereferenceExtends` function is exported:
2242
+
2243
+ ```js
2244
+ import { parse } from '@speclynx/apidom-parser-adapter-overlay-json-1';
2245
+ import { dereferenceExtends } from '@speclynx/apidom-reference/dereference/strategies/overlay-1';
2246
+ import { options } from '@speclynx/apidom-reference';
2247
+
2248
+ // Parse using naked parser adapter
2249
+ const parseResult = await parse(overlayJsonString);
2250
+
2251
+ // Dereference the extends target
2252
+ await dereferenceExtends(parseResult, '/path/to/overlay.json', options);
2253
+
2254
+ // Access dereferenced document from extends element
2255
+ const extendsElement = parseResult.api.get('extends');
2256
+ const dereferencedDoc = extendsElement.meta.get('parseResult');
2257
+ ```
2258
+
2259
+ The function signature is:
2260
+ ```typescript
2261
+ dereferenceExtends(
2262
+ parseResult: ParseResultElement,
2263
+ parseResultRetrievalURI: string,
2264
+ options: ReferenceOptions,
2265
+ ): Promise<void>
2266
+ ```
2267
+
1941
2268
  ##### [openapi-2](https://github.com/speclynx/apidom/tree/main/packages/apidom-reference/src/dereference/strategies/openapi-2)
1942
2269
 
1943
2270
  Dereference strategy for dereferencing [OpenApi 2.0](https://github.com/OAI/OpenAPI-Specification/blob/main/versions/2.0.md) definitions.