@speclynx/apidom-reference 4.2.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 +11 -0
  2. package/README.md +327 -0
  3. package/dist/apidom-reference.browser.js +23493 -21596
  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
@@ -0,0 +1,87 @@
1
+ import { cloneDeep } from '@speclynx/apidom-datamodel';
2
+ import { isOverlay1Element, mediaTypes } from '@speclynx/apidom-ns-overlay-1';
3
+ import DereferenceStrategy from "../DereferenceStrategy.mjs";
4
+ import Reference from "../../../Reference.mjs";
5
+ import ReferenceSet from "../../../ReferenceSet.mjs";
6
+ import { dereferenceExtends } from "./extends.mjs";
7
+ /**
8
+ * @public
9
+ */
10
+ /**
11
+ * @public
12
+ */
13
+ class Overlay1DereferenceStrategy extends DereferenceStrategy {
14
+ constructor(options) {
15
+ super({
16
+ ...(options ?? {}),
17
+ name: 'overlay-1'
18
+ });
19
+ }
20
+ canDereference(file) {
21
+ // assert by media type
22
+ if (file.mediaType !== 'text/plain') {
23
+ return mediaTypes.includes(file.mediaType);
24
+ }
25
+
26
+ // assert by inspecting ApiDOM
27
+ return isOverlay1Element(file.parseResult?.result);
28
+ }
29
+ async dereference(file, options) {
30
+ const immutableRefSet = options.dereference.refSet ?? new ReferenceSet();
31
+ const mutableRefSet = new ReferenceSet();
32
+ let reference;
33
+ if (!immutableRefSet.has(file.uri)) {
34
+ reference = new Reference({
35
+ uri: file.uri,
36
+ value: file.parseResult
37
+ });
38
+ immutableRefSet.add(reference);
39
+ } else {
40
+ // pre-computed refSet was provided as configuration option
41
+ reference = immutableRefSet.find(ref => ref.uri === file.uri);
42
+ }
43
+
44
+ /**
45
+ * Clone refSet due the dereferencing process being mutable.
46
+ * We don't want to mutate the original refSet and the references.
47
+ */
48
+ if (options.dereference.immutable) {
49
+ immutableRefSet.refs.map(ref => new Reference({
50
+ ...ref,
51
+ value: cloneDeep(ref.value)
52
+ })).forEach(ref => mutableRefSet.add(ref));
53
+ reference = mutableRefSet.find(ref => ref.uri === file.uri);
54
+ }
55
+ const dereferencedElement = reference.value;
56
+
57
+ /**
58
+ * Dereference extends target if option is enabled.
59
+ */
60
+ const shouldDereferenceExtends = options?.dereference?.strategyOpts?.[this.name]?.extends ?? options?.dereference?.strategyOpts?.extends;
61
+ if (shouldDereferenceExtends) {
62
+ await dereferenceExtends(dereferencedElement, reference.uri, options);
63
+ }
64
+
65
+ /**
66
+ * If immutable option is set, replay refs from the refSet.
67
+ */
68
+ if (options.dereference.immutable) {
69
+ mutableRefSet.refs.filter(ref => ref.uri.startsWith('immutable://')).map(ref => new Reference({
70
+ ...ref,
71
+ uri: ref.uri.replace(/^immutable:\/\//, '')
72
+ })).forEach(ref => immutableRefSet.add(ref));
73
+ }
74
+
75
+ /**
76
+ * Release all memory if this refSet was not provided as a configuration option.
77
+ * If provided as configuration option, then provider is responsible for cleanup.
78
+ */
79
+ if (options.dereference.refSet === null) {
80
+ immutableRefSet.clean();
81
+ }
82
+ mutableRefSet.clean();
83
+ return dereferencedElement;
84
+ }
85
+ }
86
+ export { dereferenceExtends } from "./extends.mjs";
87
+ export default Overlay1DereferenceStrategy;
@@ -0,0 +1,66 @@
1
+ "use strict";
2
+
3
+ var _interopRequireWildcard = require("@babel/runtime-corejs3/helpers/interopRequireWildcard").default;
4
+ var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault").default;
5
+ exports.__esModule = true;
6
+ exports.parseExtends = parseExtends;
7
+ var _apidomDatamodel = require("@speclynx/apidom-datamodel");
8
+ var _apidomNsOverlay = require("@speclynx/apidom-ns-overlay-1");
9
+ var _apidomCore = require("@speclynx/apidom-core");
10
+ var _File = _interopRequireDefault(require("../../../File.cjs"));
11
+ var url = _interopRequireWildcard(require("../../../util/url.cjs"));
12
+ var _util = require("../../../options/util.cjs");
13
+ var _index = _interopRequireDefault(require("../../index.cjs"));
14
+ /**
15
+ * Parses the `extends` target document from an Overlay document's ParseResult.
16
+ *
17
+ * The parsed extends document is pushed directly into the overlay's ParseResult
18
+ * and always attached to the extends element's meta as 'parseResult',
19
+ * regardless of success or failure.
20
+ *
21
+ * @param parseResult - ParseResult containing an Overlay specification
22
+ * @param parseResultRetrievalURI - URI from which the parseResult was retrieved
23
+ * @param options - Full ReferenceOptions
24
+ *
25
+ * @public
26
+ */
27
+ async function parseExtends(parseResult, parseResultRetrievalURI, options) {
28
+ const {
29
+ api
30
+ } = parseResult;
31
+ const file = new _File.default({
32
+ uri: url.sanitize(url.stripHash(parseResultRetrievalURI))
33
+ });
34
+ if (!(0, _apidomNsOverlay.isOverlay1Element)(api)) {
35
+ return;
36
+ }
37
+ const extendsElement = api.get('extends');
38
+ if (!(0, _apidomDatamodel.isStringElement)(extendsElement)) {
39
+ return;
40
+ }
41
+ const extendsURI = (0, _apidomCore.toValue)(extendsElement);
42
+ const retrievalURI = url.sanitize(url.stripHash(url.resolve(file.uri, extendsURI)));
43
+ const extendsParseResult = new _apidomDatamodel.ParseResultElement();
44
+ extendsParseResult.classes.push('extends');
45
+ extendsParseResult.setMetaProperty('retrievalURI', retrievalURI);
46
+ try {
47
+ const targetParseResult = await (0, _index.default)(retrievalURI, (0, _util.merge)(options, {
48
+ parse: {
49
+ mediaType: 'text/plain' // force auto-detection
50
+ }
51
+ }));
52
+ // merge parsed result into our wrapper
53
+ for (const item of targetParseResult) {
54
+ extendsParseResult.push(item);
55
+ }
56
+ } catch (error) {
57
+ const message = error instanceof Error ? error.message : String(error);
58
+ const annotation = new _apidomDatamodel.AnnotationElement(`Error parsing extends target "${retrievalURI}": ${message}`);
59
+ annotation.classes.push('error');
60
+ extendsParseResult.push(annotation);
61
+ }
62
+
63
+ // always attach result to extends element meta (even on failure - contains annotations)
64
+ extendsElement.meta.set('parseResult', extendsParseResult);
65
+ parseResult.push(extendsParseResult);
66
+ }
@@ -0,0 +1,60 @@
1
+ import { ParseResultElement, AnnotationElement, isStringElement } from '@speclynx/apidom-datamodel';
2
+ import { isOverlay1Element } from '@speclynx/apidom-ns-overlay-1';
3
+ import { toValue } from '@speclynx/apidom-core';
4
+ import File from "../../../File.mjs";
5
+ import * as url from "../../../util/url.mjs";
6
+ import { merge as mergeOptions } from "../../../options/util.mjs";
7
+ import parse from "../../index.mjs";
8
+ /**
9
+ * Parses the `extends` target document from an Overlay document's ParseResult.
10
+ *
11
+ * The parsed extends document is pushed directly into the overlay's ParseResult
12
+ * and always attached to the extends element's meta as 'parseResult',
13
+ * regardless of success or failure.
14
+ *
15
+ * @param parseResult - ParseResult containing an Overlay specification
16
+ * @param parseResultRetrievalURI - URI from which the parseResult was retrieved
17
+ * @param options - Full ReferenceOptions
18
+ *
19
+ * @public
20
+ */
21
+ export async function parseExtends(parseResult, parseResultRetrievalURI, options) {
22
+ const {
23
+ api
24
+ } = parseResult;
25
+ const file = new File({
26
+ uri: url.sanitize(url.stripHash(parseResultRetrievalURI))
27
+ });
28
+ if (!isOverlay1Element(api)) {
29
+ return;
30
+ }
31
+ const extendsElement = api.get('extends');
32
+ if (!isStringElement(extendsElement)) {
33
+ return;
34
+ }
35
+ const extendsURI = toValue(extendsElement);
36
+ const retrievalURI = url.sanitize(url.stripHash(url.resolve(file.uri, extendsURI)));
37
+ const extendsParseResult = new ParseResultElement();
38
+ extendsParseResult.classes.push('extends');
39
+ extendsParseResult.setMetaProperty('retrievalURI', retrievalURI);
40
+ try {
41
+ const targetParseResult = await parse(retrievalURI, mergeOptions(options, {
42
+ parse: {
43
+ mediaType: 'text/plain' // force auto-detection
44
+ }
45
+ }));
46
+ // merge parsed result into our wrapper
47
+ for (const item of targetParseResult) {
48
+ extendsParseResult.push(item);
49
+ }
50
+ } catch (error) {
51
+ const message = error instanceof Error ? error.message : String(error);
52
+ const annotation = new AnnotationElement(`Error parsing extends target "${retrievalURI}": ${message}`);
53
+ annotation.classes.push('error');
54
+ extendsParseResult.push(annotation);
55
+ }
56
+
57
+ // always attach result to extends element meta (even on failure - contains annotations)
58
+ extendsElement.meta.set('parseResult', extendsParseResult);
59
+ parseResult.push(extendsParseResult);
60
+ }
@@ -0,0 +1,61 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault").default;
4
+ exports.__esModule = true;
5
+ exports.default = void 0;
6
+ var _ramda = require("ramda");
7
+ var _apidomParserAdapterOverlayJson = require("@speclynx/apidom-parser-adapter-overlay-json-1");
8
+ var _ParserError = _interopRequireDefault(require("../../../errors/ParserError.cjs"));
9
+ var _Parser = _interopRequireDefault(require("../Parser.cjs"));
10
+ var _extends = require("./extends.cjs");
11
+ exports.parseExtends = _extends.parseExtends;
12
+ /**
13
+ * @public
14
+ */
15
+
16
+ /**
17
+ * @public
18
+ */
19
+ class OverlayJSON1Parser extends _Parser.default {
20
+ refractorOpts;
21
+ constructor(options) {
22
+ const {
23
+ fileExtensions = [],
24
+ mediaTypes = _apidomParserAdapterOverlayJson.mediaTypes,
25
+ ...rest
26
+ } = options ?? {};
27
+ super({
28
+ ...rest,
29
+ name: 'overlay-json-1',
30
+ fileExtensions,
31
+ mediaTypes
32
+ });
33
+ }
34
+ async canParse(file) {
35
+ const hasSupportedFileExtension = this.fileExtensions.length === 0 ? true : this.fileExtensions.includes(file.extension);
36
+ const hasSupportedMediaType = this.mediaTypes.includes(file.mediaType);
37
+ if (!hasSupportedFileExtension) return false;
38
+ if (hasSupportedMediaType) return true;
39
+ if (!hasSupportedMediaType) {
40
+ return (0, _apidomParserAdapterOverlayJson.detect)(file.toString());
41
+ }
42
+ return false;
43
+ }
44
+ async parse(file, options) {
45
+ const source = file.toString();
46
+ try {
47
+ const parserOpts = (0, _ramda.pick)(['sourceMap', 'style', 'strict', 'refractorOpts'], this);
48
+ const parseResult = await (0, _apidomParserAdapterOverlayJson.parse)(source, parserOpts);
49
+ const shouldParseExtends = options?.parse?.parserOpts?.[this.name]?.extends ?? options?.parse?.parserOpts?.extends;
50
+ if (shouldParseExtends) {
51
+ await (0, _extends.parseExtends)(parseResult, file.uri, options);
52
+ }
53
+ return parseResult;
54
+ } catch (error) {
55
+ throw new _ParserError.default(`Error parsing "${file.uri}"`, {
56
+ cause: error
57
+ });
58
+ }
59
+ }
60
+ }
61
+ var _default = exports.default = OverlayJSON1Parser;
@@ -0,0 +1,55 @@
1
+ import { pick } from 'ramda';
2
+ import { parse, mediaTypes as OverlayJSON1MediaTypes, detect } from '@speclynx/apidom-parser-adapter-overlay-json-1';
3
+ import ParserError from "../../../errors/ParserError.mjs";
4
+ import Parser from "../Parser.mjs";
5
+ import { parseExtends } from "./extends.mjs";
6
+ /**
7
+ * @public
8
+ */
9
+ /**
10
+ * @public
11
+ */
12
+ class OverlayJSON1Parser extends Parser {
13
+ refractorOpts;
14
+ constructor(options) {
15
+ const {
16
+ fileExtensions = [],
17
+ mediaTypes = OverlayJSON1MediaTypes,
18
+ ...rest
19
+ } = options ?? {};
20
+ super({
21
+ ...rest,
22
+ name: 'overlay-json-1',
23
+ fileExtensions,
24
+ mediaTypes
25
+ });
26
+ }
27
+ async canParse(file) {
28
+ const hasSupportedFileExtension = this.fileExtensions.length === 0 ? true : this.fileExtensions.includes(file.extension);
29
+ const hasSupportedMediaType = this.mediaTypes.includes(file.mediaType);
30
+ if (!hasSupportedFileExtension) return false;
31
+ if (hasSupportedMediaType) return true;
32
+ if (!hasSupportedMediaType) {
33
+ return detect(file.toString());
34
+ }
35
+ return false;
36
+ }
37
+ async parse(file, options) {
38
+ const source = file.toString();
39
+ try {
40
+ const parserOpts = pick(['sourceMap', 'style', 'strict', 'refractorOpts'], this);
41
+ const parseResult = await parse(source, parserOpts);
42
+ const shouldParseExtends = options?.parse?.parserOpts?.[this.name]?.extends ?? options?.parse?.parserOpts?.extends;
43
+ if (shouldParseExtends) {
44
+ await parseExtends(parseResult, file.uri, options);
45
+ }
46
+ return parseResult;
47
+ } catch (error) {
48
+ throw new ParserError(`Error parsing "${file.uri}"`, {
49
+ cause: error
50
+ });
51
+ }
52
+ }
53
+ }
54
+ export { parseExtends } from "./extends.mjs";
55
+ export default OverlayJSON1Parser;
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+
3
+ exports.__esModule = true;
4
+ exports.parseExtends = void 0;
5
+ var _extends = require("../overlay-json-1/extends.cjs");
6
+ exports.parseExtends = _extends.parseExtends;
@@ -0,0 +1,2 @@
1
+ // re-export from JSON parser - extends logic is format-agnostic
2
+ export { parseExtends } from "../overlay-json-1/extends.mjs";
@@ -0,0 +1,61 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault").default;
4
+ exports.__esModule = true;
5
+ exports.default = void 0;
6
+ var _ramda = require("ramda");
7
+ var _apidomParserAdapterOverlayYaml = require("@speclynx/apidom-parser-adapter-overlay-yaml-1");
8
+ var _ParserError = _interopRequireDefault(require("../../../errors/ParserError.cjs"));
9
+ var _Parser = _interopRequireDefault(require("../Parser.cjs"));
10
+ var _extends = require("./extends.cjs");
11
+ exports.parseExtends = _extends.parseExtends;
12
+ /**
13
+ * @public
14
+ */
15
+
16
+ /**
17
+ * @public
18
+ */
19
+ class OverlayYAML1Parser extends _Parser.default {
20
+ refractorOpts;
21
+ constructor(options) {
22
+ const {
23
+ fileExtensions = [],
24
+ mediaTypes = _apidomParserAdapterOverlayYaml.mediaTypes,
25
+ ...rest
26
+ } = options ?? {};
27
+ super({
28
+ ...rest,
29
+ name: 'overlay-yaml-1',
30
+ fileExtensions,
31
+ mediaTypes
32
+ });
33
+ }
34
+ async canParse(file) {
35
+ const hasSupportedFileExtension = this.fileExtensions.length === 0 ? true : this.fileExtensions.includes(file.extension);
36
+ const hasSupportedMediaType = this.mediaTypes.includes(file.mediaType);
37
+ if (!hasSupportedFileExtension) return false;
38
+ if (hasSupportedMediaType) return true;
39
+ if (!hasSupportedMediaType) {
40
+ return (0, _apidomParserAdapterOverlayYaml.detect)(file.toString());
41
+ }
42
+ return false;
43
+ }
44
+ async parse(file, options) {
45
+ const source = file.toString();
46
+ try {
47
+ const parserOpts = (0, _ramda.pick)(['sourceMap', 'style', 'strict', 'refractorOpts'], this);
48
+ const parseResult = await (0, _apidomParserAdapterOverlayYaml.parse)(source, parserOpts);
49
+ const shouldParseExtends = options?.parse?.parserOpts?.[this.name]?.extends ?? options?.parse?.parserOpts?.extends;
50
+ if (shouldParseExtends) {
51
+ await (0, _extends.parseExtends)(parseResult, file.uri, options);
52
+ }
53
+ return parseResult;
54
+ } catch (error) {
55
+ throw new _ParserError.default(`Error parsing "${file.uri}"`, {
56
+ cause: error
57
+ });
58
+ }
59
+ }
60
+ }
61
+ var _default = exports.default = OverlayYAML1Parser;
@@ -0,0 +1,55 @@
1
+ import { pick } from 'ramda';
2
+ import { parse, mediaTypes as OverlayYAML1MediaTypes, detect } from '@speclynx/apidom-parser-adapter-overlay-yaml-1';
3
+ import ParserError from "../../../errors/ParserError.mjs";
4
+ import Parser from "../Parser.mjs";
5
+ import { parseExtends } from "./extends.mjs";
6
+ /**
7
+ * @public
8
+ */
9
+ /**
10
+ * @public
11
+ */
12
+ class OverlayYAML1Parser extends Parser {
13
+ refractorOpts;
14
+ constructor(options) {
15
+ const {
16
+ fileExtensions = [],
17
+ mediaTypes = OverlayYAML1MediaTypes,
18
+ ...rest
19
+ } = options ?? {};
20
+ super({
21
+ ...rest,
22
+ name: 'overlay-yaml-1',
23
+ fileExtensions,
24
+ mediaTypes
25
+ });
26
+ }
27
+ async canParse(file) {
28
+ const hasSupportedFileExtension = this.fileExtensions.length === 0 ? true : this.fileExtensions.includes(file.extension);
29
+ const hasSupportedMediaType = this.mediaTypes.includes(file.mediaType);
30
+ if (!hasSupportedFileExtension) return false;
31
+ if (hasSupportedMediaType) return true;
32
+ if (!hasSupportedMediaType) {
33
+ return detect(file.toString());
34
+ }
35
+ return false;
36
+ }
37
+ async parse(file, options) {
38
+ const source = file.toString();
39
+ try {
40
+ const parserOpts = pick(['sourceMap', 'style', 'strict', 'refractorOpts'], this);
41
+ const parseResult = await parse(source, parserOpts);
42
+ const shouldParseExtends = options?.parse?.parserOpts?.[this.name]?.extends ?? options?.parse?.parserOpts?.extends;
43
+ if (shouldParseExtends) {
44
+ await parseExtends(parseResult, file.uri, options);
45
+ }
46
+ return parseResult;
47
+ } catch (error) {
48
+ throw new ParserError(`Error parsing "${file.uri}"`, {
49
+ cause: error
50
+ });
51
+ }
52
+ }
53
+ }
54
+ export { parseExtends } from "./extends.mjs";
55
+ export default OverlayYAML1Parser;
@@ -0,0 +1,49 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault").default;
4
+ exports.__esModule = true;
5
+ exports.default = void 0;
6
+ var _ResolveStrategy = _interopRequireDefault(require("../ResolveStrategy.cjs"));
7
+ var _ReferenceSet = _interopRequireDefault(require("../../../ReferenceSet.cjs"));
8
+ var _util = require("../../../options/util.cjs");
9
+ var _UnmatchedDereferenceStrategyError = _interopRequireDefault(require("../../../errors/UnmatchedDereferenceStrategyError.cjs"));
10
+ /**
11
+ * @public
12
+ */
13
+
14
+ /**
15
+ * @public
16
+ */
17
+ class Arazzo1ResolveStrategy extends _ResolveStrategy.default {
18
+ constructor(options) {
19
+ super({
20
+ ...(options ?? {}),
21
+ name: 'arazzo-1'
22
+ });
23
+ }
24
+ canResolve(file, options) {
25
+ const dereferenceStrategy = options.dereference.strategies.find(strategy => strategy.name === 'arazzo-1');
26
+ if (dereferenceStrategy === undefined) {
27
+ return false;
28
+ }
29
+ return dereferenceStrategy.canDereference(file, options);
30
+ }
31
+ async resolve(file, options) {
32
+ const dereferenceStrategy = options.dereference.strategies.find(strategy => strategy.name === 'arazzo-1');
33
+ if (dereferenceStrategy === undefined) {
34
+ throw new _UnmatchedDereferenceStrategyError.default(`"arazzo-1" resolve strategy requires "arazzo-1" dereference strategy to be configured for file "${file.uri}"`);
35
+ }
36
+ const refSet = new _ReferenceSet.default();
37
+ const mergedOptions = (0, _util.merge)(options, {
38
+ resolve: {
39
+ internal: false
40
+ },
41
+ dereference: {
42
+ refSet
43
+ }
44
+ });
45
+ await dereferenceStrategy.dereference(file, mergedOptions);
46
+ return refSet;
47
+ }
48
+ }
49
+ var _default = exports.default = Arazzo1ResolveStrategy;
@@ -0,0 +1,43 @@
1
+ import ResolveStrategy from "../ResolveStrategy.mjs";
2
+ import ReferenceSet from "../../../ReferenceSet.mjs";
3
+ import { merge as mergeOptions } from "../../../options/util.mjs";
4
+ import UnmatchedDereferenceStrategyError from "../../../errors/UnmatchedDereferenceStrategyError.mjs";
5
+ /**
6
+ * @public
7
+ */
8
+ /**
9
+ * @public
10
+ */
11
+ class Arazzo1ResolveStrategy extends ResolveStrategy {
12
+ constructor(options) {
13
+ super({
14
+ ...(options ?? {}),
15
+ name: 'arazzo-1'
16
+ });
17
+ }
18
+ canResolve(file, options) {
19
+ const dereferenceStrategy = options.dereference.strategies.find(strategy => strategy.name === 'arazzo-1');
20
+ if (dereferenceStrategy === undefined) {
21
+ return false;
22
+ }
23
+ return dereferenceStrategy.canDereference(file, options);
24
+ }
25
+ async resolve(file, options) {
26
+ const dereferenceStrategy = options.dereference.strategies.find(strategy => strategy.name === 'arazzo-1');
27
+ if (dereferenceStrategy === undefined) {
28
+ throw new UnmatchedDereferenceStrategyError(`"arazzo-1" resolve strategy requires "arazzo-1" dereference strategy to be configured for file "${file.uri}"`);
29
+ }
30
+ const refSet = new ReferenceSet();
31
+ const mergedOptions = mergeOptions(options, {
32
+ resolve: {
33
+ internal: false
34
+ },
35
+ dereference: {
36
+ refSet
37
+ }
38
+ });
39
+ await dereferenceStrategy.dereference(file, mergedOptions);
40
+ return refSet;
41
+ }
42
+ }
43
+ export default Arazzo1ResolveStrategy;
@@ -0,0 +1,49 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault").default;
4
+ exports.__esModule = true;
5
+ exports.default = void 0;
6
+ var _ResolveStrategy = _interopRequireDefault(require("../ResolveStrategy.cjs"));
7
+ var _ReferenceSet = _interopRequireDefault(require("../../../ReferenceSet.cjs"));
8
+ var _util = require("../../../options/util.cjs");
9
+ var _UnmatchedDereferenceStrategyError = _interopRequireDefault(require("../../../errors/UnmatchedDereferenceStrategyError.cjs"));
10
+ /**
11
+ * @public
12
+ */
13
+
14
+ /**
15
+ * @public
16
+ */
17
+ class Overlay1ResolveStrategy extends _ResolveStrategy.default {
18
+ constructor(options) {
19
+ super({
20
+ ...(options ?? {}),
21
+ name: 'overlay-1'
22
+ });
23
+ }
24
+ canResolve(file, options) {
25
+ const dereferenceStrategy = options.dereference.strategies.find(strategy => strategy.name === 'overlay-1');
26
+ if (dereferenceStrategy === undefined) {
27
+ return false;
28
+ }
29
+ return dereferenceStrategy.canDereference(file, options);
30
+ }
31
+ async resolve(file, options) {
32
+ const dereferenceStrategy = options.dereference.strategies.find(strategy => strategy.name === 'overlay-1');
33
+ if (dereferenceStrategy === undefined) {
34
+ throw new _UnmatchedDereferenceStrategyError.default(`"overlay-1" resolve strategy requires "overlay-1" dereference strategy to be configured for file "${file.uri}"`);
35
+ }
36
+ const refSet = new _ReferenceSet.default();
37
+ const mergedOptions = (0, _util.merge)(options, {
38
+ resolve: {
39
+ internal: false
40
+ },
41
+ dereference: {
42
+ refSet
43
+ }
44
+ });
45
+ await dereferenceStrategy.dereference(file, mergedOptions);
46
+ return refSet;
47
+ }
48
+ }
49
+ var _default = exports.default = Overlay1ResolveStrategy;
@@ -0,0 +1,43 @@
1
+ import ResolveStrategy from "../ResolveStrategy.mjs";
2
+ import ReferenceSet from "../../../ReferenceSet.mjs";
3
+ import { merge as mergeOptions } from "../../../options/util.mjs";
4
+ import UnmatchedDereferenceStrategyError from "../../../errors/UnmatchedDereferenceStrategyError.mjs";
5
+ /**
6
+ * @public
7
+ */
8
+ /**
9
+ * @public
10
+ */
11
+ class Overlay1ResolveStrategy extends ResolveStrategy {
12
+ constructor(options) {
13
+ super({
14
+ ...(options ?? {}),
15
+ name: 'overlay-1'
16
+ });
17
+ }
18
+ canResolve(file, options) {
19
+ const dereferenceStrategy = options.dereference.strategies.find(strategy => strategy.name === 'overlay-1');
20
+ if (dereferenceStrategy === undefined) {
21
+ return false;
22
+ }
23
+ return dereferenceStrategy.canDereference(file, options);
24
+ }
25
+ async resolve(file, options) {
26
+ const dereferenceStrategy = options.dereference.strategies.find(strategy => strategy.name === 'overlay-1');
27
+ if (dereferenceStrategy === undefined) {
28
+ throw new UnmatchedDereferenceStrategyError(`"overlay-1" resolve strategy requires "overlay-1" dereference strategy to be configured for file "${file.uri}"`);
29
+ }
30
+ const refSet = new ReferenceSet();
31
+ const mergedOptions = mergeOptions(options, {
32
+ resolve: {
33
+ internal: false
34
+ },
35
+ dereference: {
36
+ refSet
37
+ }
38
+ });
39
+ await dereferenceStrategy.dereference(file, mergedOptions);
40
+ return refSet;
41
+ }
42
+ }
43
+ export default Overlay1ResolveStrategy;
@@ -0,0 +1,21 @@
1
+ import { ParseResultElement } from '@speclynx/apidom-datamodel';
2
+ import type { ReferenceOptions } from '../../../options/index.ts';
3
+ /**
4
+ * Dereferences the `extends` target document from an Overlay document's ParseResult.
5
+ *
6
+ * If the extends element already has a parsed result attached (from the parse phase),
7
+ * it will be dereferenced in place. Otherwise, the target document will be fetched,
8
+ * parsed, and dereferenced.
9
+ *
10
+ * The dereferenced result is pushed into the overlay's ParseResult
11
+ * and always attached to the extends element's meta as 'parseResult',
12
+ * overriding any existing parse result from the parse phase.
13
+ * On failure, the result contains error annotations.
14
+ *
15
+ * @param parseResult - ParseResult containing an Overlay specification
16
+ * @param parseResultRetrievalURI - URI from which the parseResult was retrieved
17
+ * @param options - Full ReferenceOptions
18
+ *
19
+ * @public
20
+ */
21
+ export declare function dereferenceExtends(parseResult: ParseResultElement, parseResultRetrievalURI: string, options: ReferenceOptions): Promise<void>;