@jentic/arazzo-resolver 1.0.0-alpha.3

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/package.json ADDED
@@ -0,0 +1,68 @@
1
+ {
2
+ "name": "@jentic/arazzo-resolver",
3
+ "version": "1.0.0-alpha.3",
4
+ "description": "Resolver for Arazzo Documents.",
5
+ "keywords": [
6
+ "arazzo",
7
+ "arazzo-specification",
8
+ "resolver",
9
+ "resolve",
10
+ "dereference",
11
+ "workflow",
12
+ "workflows"
13
+ ],
14
+ "publishConfig": {
15
+ "access": "public",
16
+ "registry": "https://registry.npmjs.org",
17
+ "tag": "latest"
18
+ },
19
+ "type": "module",
20
+ "sideEffects": false,
21
+ "unpkg": "./dist/jentic-arazzo-resolver.browser.min.js",
22
+ "main": "./src/index.cjs",
23
+ "exports": {
24
+ "types": "./types/arazzo-resolver.d.ts",
25
+ "import": "./src/index.mjs",
26
+ "require": "./src/index.cjs"
27
+ },
28
+ "types": "./types/arazzo-resolver.d.ts",
29
+ "scripts": {
30
+ "build": "npm run clean && run-p --max-parallel ${CPU_CORES:-2} typescript:declaration build:es build:cjs build:umd:browser",
31
+ "build:es": "cross-env BABEL_ENV=es babel src --out-dir src --extensions '.ts' --out-file-extension '.mjs' --root-mode 'upward'",
32
+ "build:cjs": "cross-env BABEL_ENV=cjs babel src --out-dir src --extensions '.ts' --out-file-extension '.cjs' --root-mode 'upward'",
33
+ "build:umd:browser": "cross-env BABEL_ENV=browser webpack --config config/webpack/browser.config.js --progress",
34
+ "lint": "eslint ./",
35
+ "lint:fix": "eslint ./ --fix",
36
+ "clean": "rimraf --glob 'src/**/*.mjs' 'src/**/*.cjs' 'test/**/*.mjs' ./dist ./types",
37
+ "typescript:check-types": "tsc --noEmit",
38
+ "typescript:declaration": "tsc -p tsconfig.declaration.json && api-extractor run -l -c ./config/api-extractor/api-extractor.json",
39
+ "test": "npm run build:es && cross-env BABEL_ENV=es babel test --out-dir test --extensions '.ts' --out-file-extension '.mjs' --root-mode 'upward' && cross-env NODE_ENV=test mocha",
40
+ "prepack": "copyfiles -u 2 ../../LICENSE . && copyfiles -u 2 ../../NOTICE .",
41
+ "postpack": "rimraf NOTICE LICENSE"
42
+ },
43
+ "repository": {
44
+ "type": "git",
45
+ "url": "git+https://github.com/jentic/jentic-arazzo-tools.git"
46
+ },
47
+ "author": "Jentic <hello@jentic.com>",
48
+ "license": "Apache-2.0",
49
+ "dependencies": {
50
+ "@babel/runtime-corejs3": "^7.28.4",
51
+ "@speclynx/apidom-core": "2.5.1",
52
+ "@speclynx/apidom-datamodel": "2.5.1",
53
+ "@speclynx/apidom-error": "2.5.1",
54
+ "@speclynx/apidom-ns-arazzo-1": "2.5.1",
55
+ "@speclynx/apidom-reference": "2.5.1",
56
+ "type-fest": "^5.4.3"
57
+ },
58
+ "files": [
59
+ "src/**/*.mjs",
60
+ "src/**/*.cjs",
61
+ "dist/",
62
+ "types/arazzo-resolver.d.ts",
63
+ "LICENSE",
64
+ "NOTICE",
65
+ "README.md",
66
+ "CHANGELOG.md"
67
+ ]
68
+ }
@@ -0,0 +1,202 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault").default;
4
+ exports.__esModule = true;
5
+ exports.defaultOptions = void 0;
6
+ exports.dereference = dereference;
7
+ exports.dereferenceElement = dereferenceElement;
8
+ var _apidomDatamodel = require("@speclynx/apidom-datamodel");
9
+ var _empty = require("@speclynx/apidom-reference/configuration/empty");
10
+ var _arazzo = _interopRequireDefault(require("@speclynx/apidom-reference/dereference/strategies/arazzo-1"));
11
+ var _openapi = _interopRequireDefault(require("@speclynx/apidom-reference/dereference/strategies/openapi-2"));
12
+ var _openapi2 = _interopRequireDefault(require("@speclynx/apidom-reference/dereference/strategies/openapi-3-0"));
13
+ var _openapi3 = _interopRequireDefault(require("@speclynx/apidom-reference/dereference/strategies/openapi-3-1"));
14
+ var _arazzoJson = _interopRequireDefault(require("@speclynx/apidom-reference/parse/parsers/arazzo-json-1"));
15
+ var _arazzoYaml = _interopRequireDefault(require("@speclynx/apidom-reference/parse/parsers/arazzo-yaml-1"));
16
+ var _json = _interopRequireDefault(require("@speclynx/apidom-reference/parse/parsers/json"));
17
+ var _yaml = _interopRequireDefault(require("@speclynx/apidom-reference/parse/parsers/yaml-1-2"));
18
+ var _binary = _interopRequireDefault(require("@speclynx/apidom-reference/parse/parsers/binary"));
19
+ var _file = _interopRequireDefault(require("@speclynx/apidom-reference/resolve/resolvers/file"));
20
+ var _httpAxios = _interopRequireDefault(require("@speclynx/apidom-reference/resolve/resolvers/http-axios"));
21
+ var _apidomNsArazzo = require("@speclynx/apidom-ns-arazzo-1");
22
+ var _apidomCore = require("@speclynx/apidom-core");
23
+ var _DereferenceError = _interopRequireDefault(require("./errors/DereferenceError.cjs"));
24
+ /**
25
+ * Options for dereferencing Arazzo Documents.
26
+ * @public
27
+ */
28
+
29
+ /**
30
+ * Default reference options for dereferencing Arazzo Documents.
31
+ * @public
32
+ */
33
+ const defaultOptions = exports.defaultOptions = {
34
+ resolve: {
35
+ resolvers: [new _file.default({
36
+ fileAllowList: ['*.json', '*.yaml', '*.yml']
37
+ }), new _httpAxios.default({
38
+ timeout: 5000,
39
+ redirects: 5,
40
+ withCredentials: false
41
+ })]
42
+ },
43
+ parse: {
44
+ mediaType: _apidomNsArazzo.mediaTypes.latest(),
45
+ parsers: [new _arazzoJson.default({
46
+ allowEmpty: false,
47
+ sourceMap: false
48
+ }), new _arazzoYaml.default({
49
+ allowEmpty: false,
50
+ sourceMap: false
51
+ }), new _json.default({
52
+ allowEmpty: false,
53
+ sourceMap: false
54
+ }), new _yaml.default({
55
+ allowEmpty: false,
56
+ sourceMap: false
57
+ }), new _binary.default({
58
+ allowEmpty: false,
59
+ sourceMap: false
60
+ })]
61
+ },
62
+ dereference: {
63
+ strategies: [new _arazzo.default(), new _openapi.default(), new _openapi2.default(), new _openapi3.default()],
64
+ strategyOpts: {}
65
+ }
66
+ };
67
+
68
+ /**
69
+ * Dereferences an Arazzo Document from a file system path or HTTP(S) URL.
70
+ *
71
+ * This function resolves all JSON References ($ref) in the Arazzo Document
72
+ * and its referenced OpenAPI/AsyncAPI source descriptions.
73
+ *
74
+ * @param uri - A file system path or HTTP(S) URL to the Arazzo Document
75
+ * @param options - Reference options (uses defaultOptions when not provided)
76
+ * @returns A promise that resolves to the dereferenced Arazzo Document as ApiDOM element
77
+ * @throws DereferenceError - When dereferencing fails for any reason. The original error is available via the `cause` property.
78
+ *
79
+ * @example
80
+ * // Dereference from file
81
+ * const result = await dereference('/path/to/arazzo.json');
82
+ *
83
+ * @example
84
+ * // Dereference from URL
85
+ * const result = await dereference('https://example.com/arazzo.yaml');
86
+ *
87
+ * @example
88
+ * // Dereference with custom options
89
+ * const result = await dereference('/path/to/arazzo.json', customReferenceOptions);
90
+ * @public
91
+ */
92
+ async function dereference(uri, options = {}) {
93
+ const mergedOptions = (0, _empty.mergeOptions)(defaultOptions, options);
94
+ try {
95
+ const parseResult = await (0, _empty.dereference)(uri, mergedOptions);
96
+ parseResult.meta.set('retrievalURI', uri);
97
+ return parseResult;
98
+ } catch (error) {
99
+ throw new _DereferenceError.default(`Failed to dereference Arazzo Document at "${uri}"`, {
100
+ cause: error
101
+ });
102
+ }
103
+ }
104
+
105
+ /**
106
+ * Dereferences an ApiDOM element representing an Arazzo Document.
107
+ *
108
+ * This function resolves all JSON References ($ref) and Reusable Object references
109
+ * ($components.*) in the Arazzo Document element.
110
+ *
111
+ * Supported scenarios:
112
+ * - ParseResultElement with retrievalURI metadata: baseURI derived automatically
113
+ * - ParseResultElement without retrievalURI: requires `options.resolve.baseURI`
114
+ * - Child element (e.g., WorkflowElement) with parseResult in strategyOpts:
115
+ * requires `options.dereference.strategyOpts.parseResult` for component resolution,
116
+ * and `options.resolve.baseURI` if parseResult lacks retrievalURI metadata
117
+ *
118
+ * @param element - An ApiDOM element (ParseResultElement or child element like WorkflowElement)
119
+ * @param options - Reference options (uses defaultOptions when not provided)
120
+ * @returns A promise that resolves to the dereferenced element
121
+ * @throws DereferenceError - When baseURI is required but not provided, or when dereferencing fails
122
+ *
123
+ * @example
124
+ * Dereference ParseResultElement with retrievalURI (from file parsing)
125
+ * ```typescript
126
+ * import { parse } from '@jentic/arazzo-parser';
127
+ *
128
+ * const parseResult = await parse('/path/to/arazzo.json');
129
+ * const dereferenced = await dereferenceElement(parseResult);
130
+ * ```
131
+ *
132
+ * @example
133
+ * Dereference ParseResultElement without retrievalURI (from inline parsing)
134
+ * ```typescript
135
+ * const parseResult = await parse({ arazzo: '1.0.1', ... });
136
+ * const dereferenced = await dereferenceElement(parseResult, {
137
+ * resolve: { baseURI: 'https://example.com/arazzo.json' },
138
+ * });
139
+ * ```
140
+ *
141
+ * @example
142
+ * Dereference child element (e.g., WorkflowElement)
143
+ * ```typescript
144
+ * const parseResult = await parse('/path/to/arazzo.json');
145
+ * const workflow = parseResult.api.workflows.get(0);
146
+ * const dereferenced = await dereferenceElement(workflow, {
147
+ * dereference: { strategyOpts: { parseResult } },
148
+ * });
149
+ * ```
150
+ * @public
151
+ */
152
+ async function dereferenceElement(element, options = {}) {
153
+ const mergedOptions = (0, _empty.mergeOptions)(defaultOptions, options);
154
+ const refSet = mergedOptions.dereference?.refSet ?? new _empty.ReferenceSet();
155
+ let baseURI = mergedOptions.resolve?.baseURI;
156
+ if (refSet.size === 0) {
157
+ if ((0, _apidomDatamodel.isParseResultElement)(element)) {
158
+ if (element.hasMetaProperty('retrievalURI')) {
159
+ baseURI = (0, _apidomCore.toValue)(element.meta.get('retrievalURI'));
160
+ } else if (!baseURI) {
161
+ throw new _DereferenceError.default('baseURI option is required when dereferencing a ParseResultElement without retrievalURI metadata');
162
+ }
163
+ } else if ((0, _apidomDatamodel.isParseResultElement)(mergedOptions.dereference?.strategyOpts?.parseResult)) {
164
+ // dereferencing child element requires refSet for component resolution
165
+ const {
166
+ parseResult
167
+ } = mergedOptions.dereference.strategyOpts;
168
+ let rootURI;
169
+ if (parseResult.hasMetaProperty('retrievalURI')) {
170
+ rootURI = (0, _apidomCore.toValue)(parseResult.meta.get('retrievalURI'));
171
+ } else if (baseURI) {
172
+ rootURI = baseURI;
173
+ } else {
174
+ throw new _DereferenceError.default('baseURI option is required when dereferencing a child element without retrievalURI metadata');
175
+ }
176
+ const elementReference = new _empty.Reference({
177
+ uri: `${rootURI}#fragment`,
178
+ value: new _apidomDatamodel.ParseResultElement([element])
179
+ });
180
+ const rootReference = new _empty.Reference({
181
+ uri: rootURI,
182
+ value: parseResult
183
+ });
184
+ refSet.add(elementReference).add(rootReference);
185
+ baseURI = rootURI;
186
+ }
187
+ }
188
+ try {
189
+ return await (0, _empty.dereferenceApiDOM)(element, (0, _empty.mergeOptions)(mergedOptions, {
190
+ resolve: {
191
+ baseURI
192
+ },
193
+ dereference: {
194
+ refSet
195
+ }
196
+ }));
197
+ } catch (error) {
198
+ throw new _DereferenceError.default('Failed to dereference Arazzo Document', {
199
+ cause: error
200
+ });
201
+ }
202
+ }
@@ -0,0 +1,194 @@
1
+ import { isParseResultElement, ParseResultElement } from '@speclynx/apidom-datamodel';
2
+ import { dereference as dereferenceURI, dereferenceApiDOM as dereferenceApiDOMElement, mergeOptions, ReferenceSet, Reference } from '@speclynx/apidom-reference/configuration/empty';
3
+ import Arazzo1DereferenceStrategy from '@speclynx/apidom-reference/dereference/strategies/arazzo-1';
4
+ import OpenAPI2DereferenceStrategy from '@speclynx/apidom-reference/dereference/strategies/openapi-2';
5
+ import OpenAPI3_0DereferenceStrategy from '@speclynx/apidom-reference/dereference/strategies/openapi-3-0';
6
+ import OpenAPI3_1DereferenceStrategy from '@speclynx/apidom-reference/dereference/strategies/openapi-3-1';
7
+ import ArazzoJSON1Parser from '@speclynx/apidom-reference/parse/parsers/arazzo-json-1';
8
+ import ArazzoYAML1Parser from '@speclynx/apidom-reference/parse/parsers/arazzo-yaml-1';
9
+ import JSONParser from '@speclynx/apidom-reference/parse/parsers/json';
10
+ import YAMLParser from '@speclynx/apidom-reference/parse/parsers/yaml-1-2';
11
+ import BinaryParser from '@speclynx/apidom-reference/parse/parsers/binary';
12
+ import FileResolver from '@speclynx/apidom-reference/resolve/resolvers/file';
13
+ import HTTPResolverAxios from '@speclynx/apidom-reference/resolve/resolvers/http-axios';
14
+ import { mediaTypes } from '@speclynx/apidom-ns-arazzo-1';
15
+ import { toValue } from '@speclynx/apidom-core';
16
+ import DereferenceError from "./errors/DereferenceError.mjs";
17
+ /**
18
+ * Options for dereferencing Arazzo Documents.
19
+ * @public
20
+ */
21
+ /**
22
+ * Default reference options for dereferencing Arazzo Documents.
23
+ * @public
24
+ */
25
+ export const defaultOptions = {
26
+ resolve: {
27
+ resolvers: [new FileResolver({
28
+ fileAllowList: ['*.json', '*.yaml', '*.yml']
29
+ }), new HTTPResolverAxios({
30
+ timeout: 5000,
31
+ redirects: 5,
32
+ withCredentials: false
33
+ })]
34
+ },
35
+ parse: {
36
+ mediaType: mediaTypes.latest(),
37
+ parsers: [new ArazzoJSON1Parser({
38
+ allowEmpty: false,
39
+ sourceMap: false
40
+ }), new ArazzoYAML1Parser({
41
+ allowEmpty: false,
42
+ sourceMap: false
43
+ }), new JSONParser({
44
+ allowEmpty: false,
45
+ sourceMap: false
46
+ }), new YAMLParser({
47
+ allowEmpty: false,
48
+ sourceMap: false
49
+ }), new BinaryParser({
50
+ allowEmpty: false,
51
+ sourceMap: false
52
+ })]
53
+ },
54
+ dereference: {
55
+ strategies: [new Arazzo1DereferenceStrategy(), new OpenAPI2DereferenceStrategy(), new OpenAPI3_0DereferenceStrategy(), new OpenAPI3_1DereferenceStrategy()],
56
+ strategyOpts: {}
57
+ }
58
+ };
59
+
60
+ /**
61
+ * Dereferences an Arazzo Document from a file system path or HTTP(S) URL.
62
+ *
63
+ * This function resolves all JSON References ($ref) in the Arazzo Document
64
+ * and its referenced OpenAPI/AsyncAPI source descriptions.
65
+ *
66
+ * @param uri - A file system path or HTTP(S) URL to the Arazzo Document
67
+ * @param options - Reference options (uses defaultOptions when not provided)
68
+ * @returns A promise that resolves to the dereferenced Arazzo Document as ApiDOM element
69
+ * @throws DereferenceError - When dereferencing fails for any reason. The original error is available via the `cause` property.
70
+ *
71
+ * @example
72
+ * // Dereference from file
73
+ * const result = await dereference('/path/to/arazzo.json');
74
+ *
75
+ * @example
76
+ * // Dereference from URL
77
+ * const result = await dereference('https://example.com/arazzo.yaml');
78
+ *
79
+ * @example
80
+ * // Dereference with custom options
81
+ * const result = await dereference('/path/to/arazzo.json', customReferenceOptions);
82
+ * @public
83
+ */
84
+ export async function dereference(uri, options = {}) {
85
+ const mergedOptions = mergeOptions(defaultOptions, options);
86
+ try {
87
+ const parseResult = await dereferenceURI(uri, mergedOptions);
88
+ parseResult.meta.set('retrievalURI', uri);
89
+ return parseResult;
90
+ } catch (error) {
91
+ throw new DereferenceError(`Failed to dereference Arazzo Document at "${uri}"`, {
92
+ cause: error
93
+ });
94
+ }
95
+ }
96
+
97
+ /**
98
+ * Dereferences an ApiDOM element representing an Arazzo Document.
99
+ *
100
+ * This function resolves all JSON References ($ref) and Reusable Object references
101
+ * ($components.*) in the Arazzo Document element.
102
+ *
103
+ * Supported scenarios:
104
+ * - ParseResultElement with retrievalURI metadata: baseURI derived automatically
105
+ * - ParseResultElement without retrievalURI: requires `options.resolve.baseURI`
106
+ * - Child element (e.g., WorkflowElement) with parseResult in strategyOpts:
107
+ * requires `options.dereference.strategyOpts.parseResult` for component resolution,
108
+ * and `options.resolve.baseURI` if parseResult lacks retrievalURI metadata
109
+ *
110
+ * @param element - An ApiDOM element (ParseResultElement or child element like WorkflowElement)
111
+ * @param options - Reference options (uses defaultOptions when not provided)
112
+ * @returns A promise that resolves to the dereferenced element
113
+ * @throws DereferenceError - When baseURI is required but not provided, or when dereferencing fails
114
+ *
115
+ * @example
116
+ * Dereference ParseResultElement with retrievalURI (from file parsing)
117
+ * ```typescript
118
+ * import { parse } from '@jentic/arazzo-parser';
119
+ *
120
+ * const parseResult = await parse('/path/to/arazzo.json');
121
+ * const dereferenced = await dereferenceElement(parseResult);
122
+ * ```
123
+ *
124
+ * @example
125
+ * Dereference ParseResultElement without retrievalURI (from inline parsing)
126
+ * ```typescript
127
+ * const parseResult = await parse({ arazzo: '1.0.1', ... });
128
+ * const dereferenced = await dereferenceElement(parseResult, {
129
+ * resolve: { baseURI: 'https://example.com/arazzo.json' },
130
+ * });
131
+ * ```
132
+ *
133
+ * @example
134
+ * Dereference child element (e.g., WorkflowElement)
135
+ * ```typescript
136
+ * const parseResult = await parse('/path/to/arazzo.json');
137
+ * const workflow = parseResult.api.workflows.get(0);
138
+ * const dereferenced = await dereferenceElement(workflow, {
139
+ * dereference: { strategyOpts: { parseResult } },
140
+ * });
141
+ * ```
142
+ * @public
143
+ */
144
+ export async function dereferenceElement(element, options = {}) {
145
+ const mergedOptions = mergeOptions(defaultOptions, options);
146
+ const refSet = mergedOptions.dereference?.refSet ?? new ReferenceSet();
147
+ let baseURI = mergedOptions.resolve?.baseURI;
148
+ if (refSet.size === 0) {
149
+ if (isParseResultElement(element)) {
150
+ if (element.hasMetaProperty('retrievalURI')) {
151
+ baseURI = toValue(element.meta.get('retrievalURI'));
152
+ } else if (!baseURI) {
153
+ throw new DereferenceError('baseURI option is required when dereferencing a ParseResultElement without retrievalURI metadata');
154
+ }
155
+ } else if (isParseResultElement(mergedOptions.dereference?.strategyOpts?.parseResult)) {
156
+ // dereferencing child element requires refSet for component resolution
157
+ const {
158
+ parseResult
159
+ } = mergedOptions.dereference.strategyOpts;
160
+ let rootURI;
161
+ if (parseResult.hasMetaProperty('retrievalURI')) {
162
+ rootURI = toValue(parseResult.meta.get('retrievalURI'));
163
+ } else if (baseURI) {
164
+ rootURI = baseURI;
165
+ } else {
166
+ throw new DereferenceError('baseURI option is required when dereferencing a child element without retrievalURI metadata');
167
+ }
168
+ const elementReference = new Reference({
169
+ uri: `${rootURI}#fragment`,
170
+ value: new ParseResultElement([element])
171
+ });
172
+ const rootReference = new Reference({
173
+ uri: rootURI,
174
+ value: parseResult
175
+ });
176
+ refSet.add(elementReference).add(rootReference);
177
+ baseURI = rootURI;
178
+ }
179
+ }
180
+ try {
181
+ return await dereferenceApiDOMElement(element, mergeOptions(mergedOptions, {
182
+ resolve: {
183
+ baseURI
184
+ },
185
+ dereference: {
186
+ refSet
187
+ }
188
+ }));
189
+ } catch (error) {
190
+ throw new DereferenceError('Failed to dereference Arazzo Document', {
191
+ cause: error
192
+ });
193
+ }
194
+ }
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+
3
+ exports.__esModule = true;
4
+ exports.default = void 0;
5
+ var _apidomError = require("@speclynx/apidom-error");
6
+ /**
7
+ * Error thrown when dereferencing an Arazzo document or element fails.
8
+ * @public
9
+ */
10
+ class DereferenceError extends _apidomError.ApiDOMError {
11
+ constructor(message, options) {
12
+ super(message, options);
13
+ }
14
+ }
15
+ var _default = exports.default = DereferenceError;
@@ -0,0 +1,12 @@
1
+ import { ApiDOMError } from '@speclynx/apidom-error';
2
+
3
+ /**
4
+ * Error thrown when dereferencing an Arazzo document or element fails.
5
+ * @public
6
+ */
7
+ class DereferenceError extends ApiDOMError {
8
+ constructor(message, options) {
9
+ super(message, options);
10
+ }
11
+ }
12
+ export default DereferenceError;
package/src/index.cjs ADDED
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault").default;
4
+ exports.__esModule = true;
5
+ exports.dereferenceElement = exports.dereferenceArazzoElement = exports.dereferenceArazzo = exports.dereference = exports.defaultDereferenceOptions = exports.defaultDereferenceArazzoOptions = exports.DereferenceError = void 0;
6
+ var _dereference = require("./dereference.cjs");
7
+ exports.defaultDereferenceOptions = _dereference.defaultOptions;
8
+ exports.defaultDereferenceArazzoOptions = _dereference.defaultOptions;
9
+ exports.dereference = _dereference.dereference;
10
+ exports.dereferenceElement = _dereference.dereferenceElement;
11
+ exports.dereferenceArazzo = _dereference.dereference;
12
+ exports.dereferenceArazzoElement = _dereference.dereferenceElement;
13
+ var _DereferenceError = _interopRequireDefault(require("./errors/DereferenceError.cjs"));
14
+ exports.DereferenceError = _DereferenceError.default;
package/src/index.mjs ADDED
@@ -0,0 +1,2 @@
1
+ export { defaultOptions as defaultDereferenceOptions, defaultOptions as defaultDereferenceArazzoOptions, dereference, dereferenceElement, dereference as dereferenceArazzo, dereferenceElement as dereferenceArazzoElement } from "./dereference.mjs";
2
+ export { default as DereferenceError } from "./errors/DereferenceError.mjs";
@@ -0,0 +1,109 @@
1
+ import { ApiDOMError } from '@speclynx/apidom-error';
2
+ import { ApiDOMErrorOptions } from '@speclynx/apidom-error';
3
+ import type { ApiDOMReferenceOptions } from '@speclynx/apidom-reference/configuration/empty';
4
+ import { Element as Element_2 } from '@speclynx/apidom-datamodel';
5
+ import { ParseResultElement } from '@speclynx/apidom-datamodel';
6
+ import type { PartialDeep } from 'type-fest';
7
+
8
+ /**
9
+ * Default reference options for dereferencing Arazzo Documents.
10
+ * @public
11
+ */
12
+ declare const defaultOptions: DereferenceOptions;
13
+ export { defaultOptions as defaultDereferenceArazzoOptions }
14
+ export { defaultOptions as defaultDereferenceOptions }
15
+
16
+ /**
17
+ * Dereferences an Arazzo Document from a file system path or HTTP(S) URL.
18
+ *
19
+ * This function resolves all JSON References ($ref) in the Arazzo Document
20
+ * and its referenced OpenAPI/AsyncAPI source descriptions.
21
+ *
22
+ * @param uri - A file system path or HTTP(S) URL to the Arazzo Document
23
+ * @param options - Reference options (uses defaultOptions when not provided)
24
+ * @returns A promise that resolves to the dereferenced Arazzo Document as ApiDOM element
25
+ * @throws DereferenceError - When dereferencing fails for any reason. The original error is available via the `cause` property.
26
+ *
27
+ * @example
28
+ * // Dereference from file
29
+ * const result = await dereference('/path/to/arazzo.json');
30
+ *
31
+ * @example
32
+ * // Dereference from URL
33
+ * const result = await dereference('https://example.com/arazzo.yaml');
34
+ *
35
+ * @example
36
+ * // Dereference with custom options
37
+ * const result = await dereference('/path/to/arazzo.json', customReferenceOptions);
38
+ * @public
39
+ */
40
+ declare function dereference(uri: string, options?: DereferenceOptions): Promise<ParseResultElement>;
41
+ export { dereference }
42
+ export { dereference as dereferenceArazzo }
43
+
44
+ /**
45
+ * Dereferences an ApiDOM element representing an Arazzo Document.
46
+ *
47
+ * This function resolves all JSON References ($ref) and Reusable Object references
48
+ * ($components.*) in the Arazzo Document element.
49
+ *
50
+ * Supported scenarios:
51
+ * - ParseResultElement with retrievalURI metadata: baseURI derived automatically
52
+ * - ParseResultElement without retrievalURI: requires `options.resolve.baseURI`
53
+ * - Child element (e.g., WorkflowElement) with parseResult in strategyOpts:
54
+ * requires `options.dereference.strategyOpts.parseResult` for component resolution,
55
+ * and `options.resolve.baseURI` if parseResult lacks retrievalURI metadata
56
+ *
57
+ * @param element - An ApiDOM element (ParseResultElement or child element like WorkflowElement)
58
+ * @param options - Reference options (uses defaultOptions when not provided)
59
+ * @returns A promise that resolves to the dereferenced element
60
+ * @throws DereferenceError - When baseURI is required but not provided, or when dereferencing fails
61
+ *
62
+ * @example
63
+ * Dereference ParseResultElement with retrievalURI (from file parsing)
64
+ * ```typescript
65
+ * import { parse } from '@jentic/arazzo-parser';
66
+ *
67
+ * const parseResult = await parse('/path/to/arazzo.json');
68
+ * const dereferenced = await dereferenceElement(parseResult);
69
+ * ```
70
+ *
71
+ * @example
72
+ * Dereference ParseResultElement without retrievalURI (from inline parsing)
73
+ * ```typescript
74
+ * const parseResult = await parse({ arazzo: '1.0.1', ... });
75
+ * const dereferenced = await dereferenceElement(parseResult, {
76
+ * resolve: { baseURI: 'https://example.com/arazzo.json' },
77
+ * });
78
+ * ```
79
+ *
80
+ * @example
81
+ * Dereference child element (e.g., WorkflowElement)
82
+ * ```typescript
83
+ * const parseResult = await parse('/path/to/arazzo.json');
84
+ * const workflow = parseResult.api.workflows.get(0);
85
+ * const dereferenced = await dereferenceElement(workflow, {
86
+ * dereference: { strategyOpts: { parseResult } },
87
+ * });
88
+ * ```
89
+ * @public
90
+ */
91
+ declare function dereferenceElement<T extends Element_2>(element: T, options?: DereferenceOptions): Promise<T>;
92
+ export { dereferenceElement as dereferenceArazzoElement }
93
+ export { dereferenceElement }
94
+
95
+ /**
96
+ * Error thrown when dereferencing an Arazzo document or element fails.
97
+ * @public
98
+ */
99
+ export declare class DereferenceError extends ApiDOMError {
100
+ constructor(message?: string, options?: ApiDOMErrorOptions);
101
+ }
102
+
103
+ /**
104
+ * Options for dereferencing Arazzo Documents.
105
+ * @public
106
+ */
107
+ export declare type DereferenceOptions = PartialDeep<ApiDOMReferenceOptions>;
108
+
109
+ export { }