@speclynx/apidom-reference 1.12.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 (263) hide show
  1. package/CHANGELOG.md +86 -0
  2. package/LICENSE +202 -0
  3. package/LICENSES/AFL-3.0.txt +182 -0
  4. package/LICENSES/Apache-2.0.txt +202 -0
  5. package/LICENSES/BSD-3-Clause.txt +26 -0
  6. package/LICENSES/MIT.txt +9 -0
  7. package/NOTICE +65 -0
  8. package/README.md +2107 -0
  9. package/dist/167.apidom-reference.browser.js +10 -0
  10. package/dist/167.apidom-reference.browser.min.js +1 -0
  11. package/dist/451.apidom-reference.browser.js +10 -0
  12. package/dist/451.apidom-reference.browser.min.js +1 -0
  13. package/dist/9786785aaddf11f37840fad896531940.wasm +0 -0
  14. package/dist/apidom-reference.browser.js +85376 -0
  15. package/dist/apidom-reference.browser.min.js +1 -0
  16. package/package.json +304 -0
  17. package/src/File.cjs +50 -0
  18. package/src/File.mjs +44 -0
  19. package/src/Reference.cjs +31 -0
  20. package/src/Reference.mjs +27 -0
  21. package/src/ReferenceSet.cjs +60 -0
  22. package/src/ReferenceSet.mjs +57 -0
  23. package/src/bundle/index.cjs +61 -0
  24. package/src/bundle/index.mjs +55 -0
  25. package/src/bundle/strategies/BundleStrategy.cjs +20 -0
  26. package/src/bundle/strategies/BundleStrategy.mjs +16 -0
  27. package/src/bundle/strategies/openapi-3-1/index.cjs +35 -0
  28. package/src/bundle/strategies/openapi-3-1/index.mjs +29 -0
  29. package/src/configuration/empty.cjs +9 -0
  30. package/src/configuration/empty.mjs +1 -0
  31. package/src/configuration/saturated.cjs +95 -0
  32. package/src/configuration/saturated.mjs +87 -0
  33. package/src/dereference/index.cjs +86 -0
  34. package/src/dereference/index.mjs +79 -0
  35. package/src/dereference/strategies/DereferenceStrategy.cjs +20 -0
  36. package/src/dereference/strategies/DereferenceStrategy.mjs +16 -0
  37. package/src/dereference/strategies/apidom/index.cjs +89 -0
  38. package/src/dereference/strategies/apidom/index.mjs +84 -0
  39. package/src/dereference/strategies/apidom/selectors/element-id.cjs +36 -0
  40. package/src/dereference/strategies/apidom/selectors/element-id.mjs +30 -0
  41. package/src/dereference/strategies/apidom/visitor.cjs +165 -0
  42. package/src/dereference/strategies/apidom/visitor.mjs +159 -0
  43. package/src/dereference/strategies/asyncapi-2/index.cjs +100 -0
  44. package/src/dereference/strategies/asyncapi-2/index.mjs +94 -0
  45. package/src/dereference/strategies/asyncapi-2/visitor.cjs +412 -0
  46. package/src/dereference/strategies/asyncapi-2/visitor.mjs +406 -0
  47. package/src/dereference/strategies/openapi-2/index.cjs +102 -0
  48. package/src/dereference/strategies/openapi-2/index.mjs +96 -0
  49. package/src/dereference/strategies/openapi-2/visitor.cjs +530 -0
  50. package/src/dereference/strategies/openapi-2/visitor.mjs +524 -0
  51. package/src/dereference/strategies/openapi-3-0/index.cjs +102 -0
  52. package/src/dereference/strategies/openapi-3-0/index.mjs +96 -0
  53. package/src/dereference/strategies/openapi-3-0/visitor.cjs +519 -0
  54. package/src/dereference/strategies/openapi-3-0/visitor.mjs +513 -0
  55. package/src/dereference/strategies/openapi-3-1/index.cjs +105 -0
  56. package/src/dereference/strategies/openapi-3-1/index.mjs +96 -0
  57. package/src/dereference/strategies/openapi-3-1/selectors/$anchor.cjs +66 -0
  58. package/src/dereference/strategies/openapi-3-1/selectors/$anchor.mjs +55 -0
  59. package/src/dereference/strategies/openapi-3-1/selectors/uri.cjs +50 -0
  60. package/src/dereference/strategies/openapi-3-1/selectors/uri.mjs +42 -0
  61. package/src/dereference/strategies/openapi-3-1/util.cjs +67 -0
  62. package/src/dereference/strategies/openapi-3-1/util.mjs +58 -0
  63. package/src/dereference/strategies/openapi-3-1/visitor.cjs +776 -0
  64. package/src/dereference/strategies/openapi-3-1/visitor.mjs +770 -0
  65. package/src/dereference/util.cjs +31 -0
  66. package/src/dereference/util.mjs +27 -0
  67. package/src/errors/BundleError.cjs +10 -0
  68. package/src/errors/BundleError.mjs +7 -0
  69. package/src/errors/DereferenceError.cjs +10 -0
  70. package/src/errors/DereferenceError.mjs +7 -0
  71. package/src/errors/EvaluationElementIdError.cjs +10 -0
  72. package/src/errors/EvaluationElementIdError.mjs +7 -0
  73. package/src/errors/EvaluationJsonSchema$anchorError.cjs +11 -0
  74. package/src/errors/EvaluationJsonSchema$anchorError.mjs +6 -0
  75. package/src/errors/EvaluationJsonSchemaUriError.cjs +11 -0
  76. package/src/errors/EvaluationJsonSchemaUriError.mjs +6 -0
  77. package/src/errors/InvalidJsonSchema$anchorError.cjs +15 -0
  78. package/src/errors/InvalidJsonSchema$anchorError.mjs +10 -0
  79. package/src/errors/JsonSchema$anchorError.cjs +10 -0
  80. package/src/errors/JsonSchema$anchorError.mjs +7 -0
  81. package/src/errors/JsonSchemaUriError.cjs +10 -0
  82. package/src/errors/JsonSchemaUriError.mjs +7 -0
  83. package/src/errors/MaximumBundleDepthError.cjs +11 -0
  84. package/src/errors/MaximumBundleDepthError.mjs +6 -0
  85. package/src/errors/MaximumDereferenceDepthError.cjs +11 -0
  86. package/src/errors/MaximumDereferenceDepthError.mjs +6 -0
  87. package/src/errors/MaximumResolveDepthError.cjs +11 -0
  88. package/src/errors/MaximumResolveDepthError.mjs +6 -0
  89. package/src/errors/ParseError.cjs +10 -0
  90. package/src/errors/ParseError.mjs +7 -0
  91. package/src/errors/ParserError.cjs +11 -0
  92. package/src/errors/ParserError.mjs +6 -0
  93. package/src/errors/PluginError.cjs +18 -0
  94. package/src/errors/PluginError.mjs +15 -0
  95. package/src/errors/ResolveError.cjs +10 -0
  96. package/src/errors/ResolveError.mjs +7 -0
  97. package/src/errors/ResolverError.cjs +11 -0
  98. package/src/errors/ResolverError.mjs +6 -0
  99. package/src/errors/UnmatchedBundleStrategyError.cjs +11 -0
  100. package/src/errors/UnmatchedBundleStrategyError.mjs +6 -0
  101. package/src/errors/UnmatchedDereferenceStrategyError.cjs +11 -0
  102. package/src/errors/UnmatchedDereferenceStrategyError.mjs +6 -0
  103. package/src/errors/UnmatchedResolveStrategyError.cjs +11 -0
  104. package/src/errors/UnmatchedResolveStrategyError.mjs +6 -0
  105. package/src/errors/UnmatchedResolverError.cjs +11 -0
  106. package/src/errors/UnmatchedResolverError.mjs +6 -0
  107. package/src/index.cjs +142 -0
  108. package/src/index.mjs +101 -0
  109. package/src/options/index.cjs +185 -0
  110. package/src/options/index.mjs +182 -0
  111. package/src/options/util.cjs +24 -0
  112. package/src/options/util.mjs +19 -0
  113. package/src/parse/index.cjs +69 -0
  114. package/src/parse/index.mjs +63 -0
  115. package/src/parse/parsers/Parser.cjs +48 -0
  116. package/src/parse/parsers/Parser.mjs +44 -0
  117. package/src/parse/parsers/api-design-systems-json/index.cjs +55 -0
  118. package/src/parse/parsers/api-design-systems-json/index.mjs +49 -0
  119. package/src/parse/parsers/api-design-systems-yaml/index.cjs +54 -0
  120. package/src/parse/parsers/api-design-systems-yaml/index.mjs +48 -0
  121. package/src/parse/parsers/apidom-json/index.cjs +70 -0
  122. package/src/parse/parsers/apidom-json/index.mjs +64 -0
  123. package/src/parse/parsers/arazzo-json-1/index.cjs +55 -0
  124. package/src/parse/parsers/arazzo-json-1/index.mjs +49 -0
  125. package/src/parse/parsers/arazzo-yaml-1/index.cjs +54 -0
  126. package/src/parse/parsers/arazzo-yaml-1/index.mjs +48 -0
  127. package/src/parse/parsers/asyncapi-json-2/index.cjs +55 -0
  128. package/src/parse/parsers/asyncapi-json-2/index.mjs +49 -0
  129. package/src/parse/parsers/asyncapi-yaml-2/index.cjs +54 -0
  130. package/src/parse/parsers/asyncapi-yaml-2/index.mjs +48 -0
  131. package/src/parse/parsers/binary/index-browser.cjs +56 -0
  132. package/src/parse/parsers/binary/index-browser.mjs +50 -0
  133. package/src/parse/parsers/binary/index-node.cjs +51 -0
  134. package/src/parse/parsers/binary/index-node.mjs +45 -0
  135. package/src/parse/parsers/json/index.cjs +54 -0
  136. package/src/parse/parsers/json/index.mjs +48 -0
  137. package/src/parse/parsers/openapi-json-2/index.cjs +55 -0
  138. package/src/parse/parsers/openapi-json-2/index.mjs +49 -0
  139. package/src/parse/parsers/openapi-json-3-0/index.cjs +55 -0
  140. package/src/parse/parsers/openapi-json-3-0/index.mjs +49 -0
  141. package/src/parse/parsers/openapi-json-3-1/index.cjs +55 -0
  142. package/src/parse/parsers/openapi-json-3-1/index.mjs +49 -0
  143. package/src/parse/parsers/openapi-yaml-2/index.cjs +54 -0
  144. package/src/parse/parsers/openapi-yaml-2/index.mjs +48 -0
  145. package/src/parse/parsers/openapi-yaml-3-0/index.cjs +54 -0
  146. package/src/parse/parsers/openapi-yaml-3-0/index.mjs +48 -0
  147. package/src/parse/parsers/openapi-yaml-3-1/index.cjs +54 -0
  148. package/src/parse/parsers/openapi-yaml-3-1/index.mjs +48 -0
  149. package/src/parse/parsers/yaml-1-2/index.cjs +54 -0
  150. package/src/parse/parsers/yaml-1-2/index.mjs +48 -0
  151. package/src/resolve/index.cjs +67 -0
  152. package/src/resolve/index.mjs +60 -0
  153. package/src/resolve/resolvers/HTTPResolver.cjs +38 -0
  154. package/src/resolve/resolvers/HTTPResolver.mjs +31 -0
  155. package/src/resolve/resolvers/Resolver.cjs +20 -0
  156. package/src/resolve/resolvers/Resolver.mjs +16 -0
  157. package/src/resolve/resolvers/file/index-browser.cjs +24 -0
  158. package/src/resolve/resolvers/file/index-browser.mjs +19 -0
  159. package/src/resolve/resolvers/file/index-node.cjs +49 -0
  160. package/src/resolve/resolvers/file/index-node.mjs +42 -0
  161. package/src/resolve/resolvers/http-axios/index.cjs +80 -0
  162. package/src/resolve/resolvers/http-axios/index.mjs +73 -0
  163. package/src/resolve/strategies/ResolveStrategy.cjs +20 -0
  164. package/src/resolve/strategies/ResolveStrategy.mjs +16 -0
  165. package/src/resolve/strategies/apidom/index.cjs +49 -0
  166. package/src/resolve/strategies/apidom/index.mjs +43 -0
  167. package/src/resolve/strategies/asyncapi-2/index.cjs +49 -0
  168. package/src/resolve/strategies/asyncapi-2/index.mjs +43 -0
  169. package/src/resolve/strategies/openapi-2/index.cjs +49 -0
  170. package/src/resolve/strategies/openapi-2/index.mjs +43 -0
  171. package/src/resolve/strategies/openapi-3-0/index.cjs +49 -0
  172. package/src/resolve/strategies/openapi-3-0/index.mjs +43 -0
  173. package/src/resolve/strategies/openapi-3-1/index.cjs +49 -0
  174. package/src/resolve/strategies/openapi-3-1/index.mjs +43 -0
  175. package/src/resolve/util.cjs +37 -0
  176. package/src/resolve/util.mjs +30 -0
  177. package/src/util/plugins.cjs +44 -0
  178. package/src/util/plugins.mjs +37 -0
  179. package/src/util/url.cjs +288 -0
  180. package/src/util/url.mjs +274 -0
  181. package/types/File.d.ts +24 -0
  182. package/types/Reference.d.ts +23 -0
  183. package/types/ReferenceSet.d.ts +25 -0
  184. package/types/apidom-reference.d.ts +584 -0
  185. package/types/bundle/index.d.ts +7 -0
  186. package/types/bundle/strategies/BundleStrategy.d.ts +19 -0
  187. package/types/bundle/strategies/openapi-3-1/index.d.ts +26 -0
  188. package/types/configuration/empty.d.ts +1 -0
  189. package/types/configuration/saturated.d.ts +1 -0
  190. package/types/dereference/index.d.ts +11 -0
  191. package/types/dereference/strategies/DereferenceStrategy.d.ts +19 -0
  192. package/types/dereference/strategies/apidom/index.d.ts +30 -0
  193. package/types/dereference/strategies/apidom/selectors/element-id.d.ts +11 -0
  194. package/types/dereference/strategies/apidom/visitor.d.ts +32 -0
  195. package/types/dereference/strategies/asyncapi-2/index.d.ts +31 -0
  196. package/types/dereference/strategies/asyncapi-2/visitor.d.ts +43 -0
  197. package/types/dereference/strategies/openapi-2/index.d.ts +32 -0
  198. package/types/dereference/strategies/openapi-2/visitor.d.ts +47 -0
  199. package/types/dereference/strategies/openapi-3-0/index.d.ts +31 -0
  200. package/types/dereference/strategies/openapi-3-0/visitor.d.ts +49 -0
  201. package/types/dereference/strategies/openapi-3-1/index.d.ts +32 -0
  202. package/types/dereference/strategies/openapi-3-1/selectors/$anchor.d.ts +22 -0
  203. package/types/dereference/strategies/openapi-3-1/selectors/uri.d.ts +12 -0
  204. package/types/dereference/strategies/openapi-3-1/util.d.ts +21 -0
  205. package/types/dereference/strategies/openapi-3-1/visitor.d.ts +52 -0
  206. package/types/dereference/util.d.ts +9 -0
  207. package/types/errors/BundleError.d.ts +7 -0
  208. package/types/errors/DereferenceError.d.ts +7 -0
  209. package/types/errors/EvaluationElementIdError.d.ts +7 -0
  210. package/types/errors/EvaluationJsonSchema$anchorError.d.ts +7 -0
  211. package/types/errors/EvaluationJsonSchemaUriError.d.ts +7 -0
  212. package/types/errors/InvalidJsonSchema$anchorError.d.ts +8 -0
  213. package/types/errors/JsonSchema$anchorError.d.ts +7 -0
  214. package/types/errors/JsonSchemaUriError.d.ts +7 -0
  215. package/types/errors/MaximumBundleDepthError.d.ts +7 -0
  216. package/types/errors/MaximumDereferenceDepthError.d.ts +7 -0
  217. package/types/errors/MaximumResolveDepthError.d.ts +7 -0
  218. package/types/errors/ParseError.d.ts +7 -0
  219. package/types/errors/ParserError.d.ts +7 -0
  220. package/types/errors/PluginError.d.ts +12 -0
  221. package/types/errors/ResolveError.d.ts +7 -0
  222. package/types/errors/ResolverError.d.ts +7 -0
  223. package/types/errors/UnmatchedBundleStrategyError.d.ts +7 -0
  224. package/types/errors/UnmatchedDereferenceStrategyError.d.ts +7 -0
  225. package/types/errors/UnmatchedResolveStrategyError.d.ts +7 -0
  226. package/types/errors/UnmatchedResolverError.d.ts +7 -0
  227. package/types/index.d.ts +75 -0
  228. package/types/options/index.d.ts +62 -0
  229. package/types/options/util.d.ts +5 -0
  230. package/types/parse/index.d.ts +7 -0
  231. package/types/parse/parsers/Parser.d.ts +38 -0
  232. package/types/parse/parsers/api-design-systems-json/index.d.ts +21 -0
  233. package/types/parse/parsers/api-design-systems-yaml/index.d.ts +20 -0
  234. package/types/parse/parsers/apidom-json/index.d.ts +24 -0
  235. package/types/parse/parsers/arazzo-json-1/index.d.ts +21 -0
  236. package/types/parse/parsers/arazzo-yaml-1/index.d.ts +20 -0
  237. package/types/parse/parsers/asyncapi-json-2/index.d.ts +21 -0
  238. package/types/parse/parsers/asyncapi-yaml-2/index.d.ts +20 -0
  239. package/types/parse/parsers/binary/index-browser.d.ts +21 -0
  240. package/types/parse/parsers/binary/index-node.d.ts +21 -0
  241. package/types/parse/parsers/json/index.d.ts +20 -0
  242. package/types/parse/parsers/openapi-json-2/index.d.ts +21 -0
  243. package/types/parse/parsers/openapi-json-3-0/index.d.ts +21 -0
  244. package/types/parse/parsers/openapi-json-3-1/index.d.ts +21 -0
  245. package/types/parse/parsers/openapi-yaml-2/index.d.ts +20 -0
  246. package/types/parse/parsers/openapi-yaml-3-0/index.d.ts +20 -0
  247. package/types/parse/parsers/openapi-yaml-3-1/index.d.ts +20 -0
  248. package/types/parse/parsers/yaml-1-2/index.d.ts +20 -0
  249. package/types/resolve/index.d.ts +12 -0
  250. package/types/resolve/resolvers/HTTPResolver.d.ts +22 -0
  251. package/types/resolve/resolvers/Resolver.d.ts +17 -0
  252. package/types/resolve/resolvers/file/index-browser.d.ts +12 -0
  253. package/types/resolve/resolvers/file/index-node.d.ts +20 -0
  254. package/types/resolve/resolvers/http-axios/index.d.ts +30 -0
  255. package/types/resolve/strategies/ResolveStrategy.d.ts +19 -0
  256. package/types/resolve/strategies/apidom/index.d.ts +27 -0
  257. package/types/resolve/strategies/asyncapi-2/index.d.ts +27 -0
  258. package/types/resolve/strategies/openapi-2/index.d.ts +27 -0
  259. package/types/resolve/strategies/openapi-3-0/index.d.ts +27 -0
  260. package/types/resolve/strategies/openapi-3-1/index.d.ts +27 -0
  261. package/types/resolve/util.d.ts +6 -0
  262. package/types/util/plugins.d.ts +14 -0
  263. package/types/util/url.d.ts +106 -0
@@ -0,0 +1,55 @@
1
+ import { isEmpty, propEq } from 'ramda';
2
+ import File from "../File.mjs";
3
+ import * as plugins from "../util/plugins.mjs";
4
+ import UnmatchedBundleStrategyError from "../errors/UnmatchedBundleStrategyError.mjs";
5
+ import BundleError from "../errors/BundleError.mjs";
6
+ import parse from "../parse/index.mjs";
7
+ import { merge as mergeOptions } from "../options/util.mjs";
8
+ import * as url from "../util/url.mjs";
9
+ /**
10
+ * Bundle a file with all its external references to a compound document.
11
+ */
12
+ const bundle = async (uri, options) => {
13
+ const {
14
+ refSet
15
+ } = options.bundle;
16
+ const sanitizedURI = url.sanitize(uri);
17
+ const mergedOptions = mergeOptions(options, {
18
+ resolve: {
19
+ baseURI: sanitizedURI
20
+ }
21
+ });
22
+ let parseResult;
23
+
24
+ // if refSet was provided, use it to avoid unnecessary parsing
25
+ if (refSet !== null && refSet.has(sanitizedURI)) {
26
+ // @ts-ignore
27
+ ({
28
+ value: parseResult
29
+ } = refSet.find(propEq(sanitizedURI, 'uri')));
30
+ } else {
31
+ parseResult = await parse(uri, mergedOptions);
32
+ }
33
+ const file = new File({
34
+ uri: mergedOptions.resolve.baseURI,
35
+ parseResult,
36
+ mediaType: mergedOptions.parse.mediaType
37
+ });
38
+ const bundleStrategies = await plugins.filter('canBundle', [file, mergedOptions], mergedOptions.bundle.strategies);
39
+
40
+ // we couldn't find any bundle strategy for this File
41
+ if (isEmpty(bundleStrategies)) {
42
+ throw new UnmatchedBundleStrategyError(file.uri);
43
+ }
44
+ try {
45
+ const {
46
+ result
47
+ } = await plugins.run('bundle', [file, mergedOptions], bundleStrategies);
48
+ return result;
49
+ } catch (error) {
50
+ throw new BundleError(`Error while bundling file "${file.uri}"`, {
51
+ cause: error
52
+ });
53
+ }
54
+ };
55
+ export default bundle;
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+
3
+ exports.__esModule = true;
4
+ exports.default = void 0;
5
+ /**
6
+ * @public
7
+ */
8
+
9
+ /**
10
+ * @public
11
+ */
12
+ class BundleStrategy {
13
+ name;
14
+ constructor({
15
+ name
16
+ }) {
17
+ this.name = name;
18
+ }
19
+ }
20
+ var _default = exports.default = BundleStrategy;
@@ -0,0 +1,16 @@
1
+ /**
2
+ * @public
3
+ */
4
+
5
+ /**
6
+ * @public
7
+ */
8
+ class BundleStrategy {
9
+ name;
10
+ constructor({
11
+ name
12
+ }) {
13
+ this.name = name;
14
+ }
15
+ }
16
+ export default BundleStrategy;
@@ -0,0 +1,35 @@
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 _apidomNsOpenapi = require("@speclynx/apidom-ns-openapi-3-1");
7
+ var _BundleStrategy = _interopRequireDefault(require("../BundleStrategy.cjs"));
8
+ /**
9
+ * @public
10
+ */
11
+
12
+ /**
13
+ * @public
14
+ */
15
+ class OpenAPI3_1BundleStrategy extends _BundleStrategy.default {
16
+ constructor(options) {
17
+ super({
18
+ ...(options ?? {}),
19
+ name: 'openapi-3-1'
20
+ });
21
+ }
22
+ canBundle(file) {
23
+ // assert by media type
24
+ if (file.mediaType !== 'text/plain') {
25
+ return _apidomNsOpenapi.mediaTypes.includes(file.mediaType);
26
+ }
27
+
28
+ // assert by inspecting ApiDOM
29
+ return (0, _apidomNsOpenapi.isOpenApi3_1Element)(file.parseResult?.result);
30
+ }
31
+ async bundle(file) {
32
+ return file.parseResult;
33
+ }
34
+ }
35
+ var _default = exports.default = OpenAPI3_1BundleStrategy;
@@ -0,0 +1,29 @@
1
+ import { mediaTypes, isOpenApi3_1Element } from '@speclynx/apidom-ns-openapi-3-1';
2
+ import BundleStrategy from "../BundleStrategy.mjs";
3
+ /**
4
+ * @public
5
+ */
6
+ /**
7
+ * @public
8
+ */
9
+ class OpenAPI3_1BundleStrategy extends BundleStrategy {
10
+ constructor(options) {
11
+ super({
12
+ ...(options ?? {}),
13
+ name: 'openapi-3-1'
14
+ });
15
+ }
16
+ canBundle(file) {
17
+ // assert by media type
18
+ if (file.mediaType !== 'text/plain') {
19
+ return mediaTypes.includes(file.mediaType);
20
+ }
21
+
22
+ // assert by inspecting ApiDOM
23
+ return isOpenApi3_1Element(file.parseResult?.result);
24
+ }
25
+ async bundle(file) {
26
+ return file.parseResult;
27
+ }
28
+ }
29
+ export default OpenAPI3_1BundleStrategy;
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+
3
+ exports.__esModule = true;
4
+ var _index = require("../index.cjs");
5
+ Object.keys(_index).forEach(function (key) {
6
+ if (key === "default" || key === "__esModule") return;
7
+ if (key in exports && exports[key] === _index[key]) return;
8
+ exports[key] = _index[key];
9
+ });
@@ -0,0 +1 @@
1
+ export * from "../index.mjs";
@@ -0,0 +1,95 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault").default;
4
+ exports.__esModule = true;
5
+ var _indexNode = _interopRequireDefault(require("../resolve/resolvers/file/index-node.cjs"));
6
+ var _index = _interopRequireDefault(require("../resolve/resolvers/http-axios/index.cjs"));
7
+ var _index2 = _interopRequireDefault(require("../resolve/strategies/openapi-2/index.cjs"));
8
+ var _index3 = _interopRequireDefault(require("../resolve/strategies/openapi-3-0/index.cjs"));
9
+ var _index4 = _interopRequireDefault(require("../resolve/strategies/openapi-3-1/index.cjs"));
10
+ var _index5 = _interopRequireDefault(require("../resolve/strategies/asyncapi-2/index.cjs"));
11
+ var _index6 = _interopRequireDefault(require("../resolve/strategies/apidom/index.cjs"));
12
+ var _index7 = _interopRequireDefault(require("../parse/parsers/api-design-systems-json/index.cjs"));
13
+ var _index8 = _interopRequireDefault(require("../parse/parsers/api-design-systems-yaml/index.cjs"));
14
+ var _index9 = _interopRequireDefault(require("../parse/parsers/openapi-json-2/index.cjs"));
15
+ var _index0 = _interopRequireDefault(require("../parse/parsers/openapi-yaml-2/index.cjs"));
16
+ var _index1 = _interopRequireDefault(require("../parse/parsers/openapi-json-3-0/index.cjs"));
17
+ var _index10 = _interopRequireDefault(require("../parse/parsers/openapi-yaml-3-0/index.cjs"));
18
+ var _index11 = _interopRequireDefault(require("../parse/parsers/openapi-json-3-1/index.cjs"));
19
+ var _index12 = _interopRequireDefault(require("../parse/parsers/openapi-yaml-3-1/index.cjs"));
20
+ var _index13 = _interopRequireDefault(require("../parse/parsers/asyncapi-json-2/index.cjs"));
21
+ var _index14 = _interopRequireDefault(require("../parse/parsers/asyncapi-yaml-2/index.cjs"));
22
+ var _index15 = _interopRequireDefault(require("../parse/parsers/arazzo-json-1/index.cjs"));
23
+ var _index16 = _interopRequireDefault(require("../parse/parsers/arazzo-yaml-1/index.cjs"));
24
+ var _index17 = _interopRequireDefault(require("../parse/parsers/apidom-json/index.cjs"));
25
+ var _index18 = _interopRequireDefault(require("../parse/parsers/json/index.cjs"));
26
+ var _index19 = _interopRequireDefault(require("../parse/parsers/yaml-1-2/index.cjs"));
27
+ var _indexNode2 = _interopRequireDefault(require("../parse/parsers/binary/index-node.cjs"));
28
+ var _index20 = _interopRequireDefault(require("../dereference/strategies/apidom/index.cjs"));
29
+ var _index21 = _interopRequireDefault(require("../dereference/strategies/openapi-2/index.cjs"));
30
+ var _index22 = _interopRequireDefault(require("../dereference/strategies/openapi-3-0/index.cjs"));
31
+ var _index23 = _interopRequireDefault(require("../dereference/strategies/openapi-3-1/index.cjs"));
32
+ var _index24 = _interopRequireDefault(require("../dereference/strategies/asyncapi-2/index.cjs"));
33
+ var _index25 = _interopRequireDefault(require("../bundle/strategies/openapi-3-1/index.cjs"));
34
+ var _index26 = require("../index.cjs");
35
+ Object.keys(_index26).forEach(function (key) {
36
+ if (key === "default" || key === "__esModule") return;
37
+ if (key in exports && exports[key] === _index26[key]) return;
38
+ exports[key] = _index26[key];
39
+ });
40
+ _index26.options.parse.parsers = [new _index9.default({
41
+ allowEmpty: true,
42
+ sourceMap: false
43
+ }), new _index0.default({
44
+ allowEmpty: true,
45
+ sourceMap: false
46
+ }), new _index1.default({
47
+ allowEmpty: true,
48
+ sourceMap: false
49
+ }), new _index10.default({
50
+ allowEmpty: true,
51
+ sourceMap: false
52
+ }), new _index11.default({
53
+ allowEmpty: true,
54
+ sourceMap: false
55
+ }), new _index12.default({
56
+ allowEmpty: true,
57
+ sourceMap: false
58
+ }), new _index13.default({
59
+ allowEmpty: true,
60
+ sourceMap: false
61
+ }), new _index14.default({
62
+ allowEmpty: true,
63
+ sourceMap: false
64
+ }), new _index15.default({
65
+ allowEmpty: true,
66
+ sourceMap: false
67
+ }), new _index16.default({
68
+ allowEmpty: true,
69
+ sourceMap: false
70
+ }), new _index7.default({
71
+ allowEmpty: true,
72
+ sourceMap: false
73
+ }), new _index8.default({
74
+ allowEmpty: true,
75
+ sourceMap: false
76
+ }), new _index17.default({
77
+ allowEmpty: true,
78
+ sourceMap: false
79
+ }), new _index18.default({
80
+ allowEmpty: true,
81
+ sourceMap: false
82
+ }), new _index19.default({
83
+ allowEmpty: true,
84
+ sourceMap: false
85
+ }), new _indexNode2.default({
86
+ allowEmpty: true
87
+ })];
88
+ _index26.options.resolve.resolvers = [new _indexNode.default(), new _index.default({
89
+ timeout: 5000,
90
+ redirects: 5,
91
+ withCredentials: false
92
+ })];
93
+ _index26.options.resolve.strategies = [new _index2.default(), new _index3.default(), new _index4.default(), new _index5.default(), new _index6.default()];
94
+ _index26.options.dereference.strategies = [new _index21.default(), new _index22.default(), new _index23.default(), new _index24.default(), new _index20.default()];
95
+ _index26.options.bundle.strategies = [new _index25.default()];
@@ -0,0 +1,87 @@
1
+ import FileResolver from "../resolve/resolvers/file/index-node.mjs";
2
+ import HTTPResolverAxios from "../resolve/resolvers/http-axios/index.mjs";
3
+ import OpenAPI2ResolveStrategy from "../resolve/strategies/openapi-2/index.mjs";
4
+ import OpenAPI3_0ResolveStrategy from "../resolve/strategies/openapi-3-0/index.mjs";
5
+ import OpenAPI3_1ResolveStrategy from "../resolve/strategies/openapi-3-1/index.mjs";
6
+ import AsyncAPI2ResolveStrategy from "../resolve/strategies/asyncapi-2/index.mjs";
7
+ import ApiDOMResolveStrategy from "../resolve/strategies/apidom/index.mjs";
8
+ import APIDesignSystemsJSONParser from "../parse/parsers/api-design-systems-json/index.mjs";
9
+ import APIDesignSystemsYAMLParser from "../parse/parsers/api-design-systems-yaml/index.mjs";
10
+ import OpenAPIJSON2Parser from "../parse/parsers/openapi-json-2/index.mjs";
11
+ import OpenAPIYAML2Parser from "../parse/parsers/openapi-yaml-2/index.mjs";
12
+ import OpenAPIJSON3_0Parser from "../parse/parsers/openapi-json-3-0/index.mjs";
13
+ import OpenAPIYAML3_0Parser from "../parse/parsers/openapi-yaml-3-0/index.mjs";
14
+ import OpenAPIJSON3_1Parser from "../parse/parsers/openapi-json-3-1/index.mjs";
15
+ import OpenAPIYAML3_1Parser from "../parse/parsers/openapi-yaml-3-1/index.mjs";
16
+ import AsyncAPIJSON2Parser from "../parse/parsers/asyncapi-json-2/index.mjs";
17
+ import AsyncAPIYAML2Parser from "../parse/parsers/asyncapi-yaml-2/index.mjs";
18
+ import ArazzoJSON1Parser from "../parse/parsers/arazzo-json-1/index.mjs";
19
+ import ArazzoYAML1Parser from "../parse/parsers/arazzo-yaml-1/index.mjs";
20
+ import APIDOMJSONParser from "../parse/parsers/apidom-json/index.mjs";
21
+ import JSONParser from "../parse/parsers/json/index.mjs";
22
+ import YAMLParser from "../parse/parsers/yaml-1-2/index.mjs";
23
+ import BinaryParser from "../parse/parsers/binary/index-node.mjs";
24
+ import ApiDOMDereferenceStrategy from "../dereference/strategies/apidom/index.mjs";
25
+ import OpenAPI2DereferenceStrategy from "../dereference/strategies/openapi-2/index.mjs";
26
+ import OpenAPI3_0DereferenceStrategy from "../dereference/strategies/openapi-3-0/index.mjs";
27
+ import OpenAPI3_1DereferenceStrategy from "../dereference/strategies/openapi-3-1/index.mjs";
28
+ import AsyncAPI2DereferenceStrategy from "../dereference/strategies/asyncapi-2/index.mjs";
29
+ import OpenAPI3_1BundleStrategy from "../bundle/strategies/openapi-3-1/index.mjs";
30
+ import { options } from "../index.mjs";
31
+ options.parse.parsers = [new OpenAPIJSON2Parser({
32
+ allowEmpty: true,
33
+ sourceMap: false
34
+ }), new OpenAPIYAML2Parser({
35
+ allowEmpty: true,
36
+ sourceMap: false
37
+ }), new OpenAPIJSON3_0Parser({
38
+ allowEmpty: true,
39
+ sourceMap: false
40
+ }), new OpenAPIYAML3_0Parser({
41
+ allowEmpty: true,
42
+ sourceMap: false
43
+ }), new OpenAPIJSON3_1Parser({
44
+ allowEmpty: true,
45
+ sourceMap: false
46
+ }), new OpenAPIYAML3_1Parser({
47
+ allowEmpty: true,
48
+ sourceMap: false
49
+ }), new AsyncAPIJSON2Parser({
50
+ allowEmpty: true,
51
+ sourceMap: false
52
+ }), new AsyncAPIYAML2Parser({
53
+ allowEmpty: true,
54
+ sourceMap: false
55
+ }), new ArazzoJSON1Parser({
56
+ allowEmpty: true,
57
+ sourceMap: false
58
+ }), new ArazzoYAML1Parser({
59
+ allowEmpty: true,
60
+ sourceMap: false
61
+ }), new APIDesignSystemsJSONParser({
62
+ allowEmpty: true,
63
+ sourceMap: false
64
+ }), new APIDesignSystemsYAMLParser({
65
+ allowEmpty: true,
66
+ sourceMap: false
67
+ }), new APIDOMJSONParser({
68
+ allowEmpty: true,
69
+ sourceMap: false
70
+ }), new JSONParser({
71
+ allowEmpty: true,
72
+ sourceMap: false
73
+ }), new YAMLParser({
74
+ allowEmpty: true,
75
+ sourceMap: false
76
+ }), new BinaryParser({
77
+ allowEmpty: true
78
+ })];
79
+ options.resolve.resolvers = [new FileResolver(), new HTTPResolverAxios({
80
+ timeout: 5000,
81
+ redirects: 5,
82
+ withCredentials: false
83
+ })];
84
+ options.resolve.strategies = [new OpenAPI2ResolveStrategy(), new OpenAPI3_0ResolveStrategy(), new OpenAPI3_1ResolveStrategy(), new AsyncAPI2ResolveStrategy(), new ApiDOMResolveStrategy()];
85
+ options.dereference.strategies = [new OpenAPI2DereferenceStrategy(), new OpenAPI3_0DereferenceStrategy(), new OpenAPI3_1DereferenceStrategy(), new AsyncAPI2DereferenceStrategy(), new ApiDOMDereferenceStrategy()];
86
+ options.bundle.strategies = [new OpenAPI3_1BundleStrategy()];
87
+ export * from "../index.mjs";
@@ -0,0 +1,86 @@
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.dereferenceApiDOM = exports.default = void 0;
7
+ var _ramda = require("ramda");
8
+ var _apidomCore = require("@speclynx/apidom-core");
9
+ var _File = _interopRequireDefault(require("../File.cjs"));
10
+ var plugins = _interopRequireWildcard(require("../util/plugins.cjs"));
11
+ var _UnmatchedDereferenceStrategyError = _interopRequireDefault(require("../errors/UnmatchedDereferenceStrategyError.cjs"));
12
+ var _DereferenceError = _interopRequireDefault(require("../errors/DereferenceError.cjs"));
13
+ var _index = _interopRequireDefault(require("../parse/index.cjs"));
14
+ var _util = require("../options/util.cjs");
15
+ var url = _interopRequireWildcard(require("../util/url.cjs"));
16
+ /**
17
+ * Dereferences ApiDOM with all its external references.
18
+ */
19
+ const dereferenceApiDOM = async (element, options) => {
20
+ // @ts-ignore
21
+ let parseResult = element;
22
+ let surrogateWrapping = false;
23
+
24
+ // wrap element into parse result
25
+ if (!(0, _apidomCore.isParseResultElement)(element)) {
26
+ const elementClone = (0, _apidomCore.cloneShallow)(element);
27
+ elementClone.classes.push('result');
28
+ parseResult = new _apidomCore.ParseResultElement([elementClone]);
29
+ surrogateWrapping = true;
30
+ }
31
+ const file = new _File.default({
32
+ uri: options.resolve.baseURI,
33
+ parseResult,
34
+ mediaType: options.parse.mediaType
35
+ });
36
+ const dereferenceStrategies = await plugins.filter('canDereference', [file, options], options.dereference.strategies);
37
+
38
+ // we couldn't find any dereference strategy for this File
39
+ if ((0, _ramda.isEmpty)(dereferenceStrategies)) {
40
+ throw new _UnmatchedDereferenceStrategyError.default(file.uri);
41
+ }
42
+ try {
43
+ const {
44
+ result
45
+ } = await plugins.run('dereference', [file, options], dereferenceStrategies);
46
+ // unwrap the element from ParseResult assuming first element is the actual result
47
+ return surrogateWrapping ? result.get(0) : result;
48
+ } catch (error) {
49
+ throw new _DereferenceError.default(`Error while dereferencing file "${file.uri}"`, {
50
+ cause: error
51
+ });
52
+ }
53
+ };
54
+
55
+ /**
56
+ * Dereferences a file with all its external references.
57
+ */
58
+ exports.dereferenceApiDOM = dereferenceApiDOM;
59
+ const dereference = async (uri, options) => {
60
+ const {
61
+ refSet
62
+ } = options.dereference;
63
+ const sanitizedURI = url.sanitize(uri);
64
+ let parseResult;
65
+
66
+ // if refSet was provided, use it to avoid unnecessary parsing
67
+ if (refSet !== null && refSet.has(sanitizedURI)) {
68
+ // @ts-ignore
69
+ ({
70
+ value: parseResult
71
+ } = refSet.find((0, _ramda.propEq)(sanitizedURI, 'uri')));
72
+ } else {
73
+ parseResult = await (0, _index.default)(uri, options);
74
+ }
75
+ const mergedOptions = (0, _util.merge)(options, {
76
+ resolve: {
77
+ baseURI: sanitizedURI
78
+ },
79
+ dereference: {
80
+ // if refSet was not provided, then we can work in mutable mode
81
+ immutable: options.dereference.immutable && refSet !== null
82
+ }
83
+ });
84
+ return dereferenceApiDOM(parseResult, mergedOptions);
85
+ };
86
+ var _default = exports.default = dereference;
@@ -0,0 +1,79 @@
1
+ import { isEmpty, propEq } from 'ramda';
2
+ import { isParseResultElement, ParseResultElement, cloneShallow } from '@speclynx/apidom-core';
3
+ import File from "../File.mjs";
4
+ import * as plugins from "../util/plugins.mjs";
5
+ import UnmatchedDereferenceStrategyError from "../errors/UnmatchedDereferenceStrategyError.mjs";
6
+ import DereferenceError from "../errors/DereferenceError.mjs";
7
+ import parse from "../parse/index.mjs";
8
+ import { merge as mergeOptions } from "../options/util.mjs";
9
+ import * as url from "../util/url.mjs";
10
+ /**
11
+ * Dereferences ApiDOM with all its external references.
12
+ */
13
+ export const dereferenceApiDOM = async (element, options) => {
14
+ // @ts-ignore
15
+ let parseResult = element;
16
+ let surrogateWrapping = false;
17
+
18
+ // wrap element into parse result
19
+ if (!isParseResultElement(element)) {
20
+ const elementClone = cloneShallow(element);
21
+ elementClone.classes.push('result');
22
+ parseResult = new ParseResultElement([elementClone]);
23
+ surrogateWrapping = true;
24
+ }
25
+ const file = new File({
26
+ uri: options.resolve.baseURI,
27
+ parseResult,
28
+ mediaType: options.parse.mediaType
29
+ });
30
+ const dereferenceStrategies = await plugins.filter('canDereference', [file, options], options.dereference.strategies);
31
+
32
+ // we couldn't find any dereference strategy for this File
33
+ if (isEmpty(dereferenceStrategies)) {
34
+ throw new UnmatchedDereferenceStrategyError(file.uri);
35
+ }
36
+ try {
37
+ const {
38
+ result
39
+ } = await plugins.run('dereference', [file, options], dereferenceStrategies);
40
+ // unwrap the element from ParseResult assuming first element is the actual result
41
+ return surrogateWrapping ? result.get(0) : result;
42
+ } catch (error) {
43
+ throw new DereferenceError(`Error while dereferencing file "${file.uri}"`, {
44
+ cause: error
45
+ });
46
+ }
47
+ };
48
+
49
+ /**
50
+ * Dereferences a file with all its external references.
51
+ */
52
+ const dereference = async (uri, options) => {
53
+ const {
54
+ refSet
55
+ } = options.dereference;
56
+ const sanitizedURI = url.sanitize(uri);
57
+ let parseResult;
58
+
59
+ // if refSet was provided, use it to avoid unnecessary parsing
60
+ if (refSet !== null && refSet.has(sanitizedURI)) {
61
+ // @ts-ignore
62
+ ({
63
+ value: parseResult
64
+ } = refSet.find(propEq(sanitizedURI, 'uri')));
65
+ } else {
66
+ parseResult = await parse(uri, options);
67
+ }
68
+ const mergedOptions = mergeOptions(options, {
69
+ resolve: {
70
+ baseURI: sanitizedURI
71
+ },
72
+ dereference: {
73
+ // if refSet was not provided, then we can work in mutable mode
74
+ immutable: options.dereference.immutable && refSet !== null
75
+ }
76
+ });
77
+ return dereferenceApiDOM(parseResult, mergedOptions);
78
+ };
79
+ export default dereference;
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+
3
+ exports.__esModule = true;
4
+ exports.default = void 0;
5
+ /**
6
+ * @public
7
+ */
8
+
9
+ /**
10
+ * @public
11
+ */
12
+ class DereferenceStrategy {
13
+ name;
14
+ constructor({
15
+ name
16
+ }) {
17
+ this.name = name;
18
+ }
19
+ }
20
+ var _default = exports.default = DereferenceStrategy;
@@ -0,0 +1,16 @@
1
+ /**
2
+ * @public
3
+ */
4
+
5
+ /**
6
+ * @public
7
+ */
8
+ class DereferenceStrategy {
9
+ name;
10
+ constructor({
11
+ name
12
+ }) {
13
+ this.name = name;
14
+ }
15
+ }
16
+ export default DereferenceStrategy;
@@ -0,0 +1,89 @@
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 _apidomCore = require("@speclynx/apidom-core");
7
+ var _DereferenceStrategy = _interopRequireDefault(require("../DereferenceStrategy.cjs"));
8
+ var _Reference = _interopRequireDefault(require("../../../Reference.cjs"));
9
+ var _ReferenceSet = _interopRequireDefault(require("../../../ReferenceSet.cjs"));
10
+ var _visitor = _interopRequireDefault(require("./visitor.cjs"));
11
+ exports.ApiDOMDereferenceVisitor = _visitor.default;
12
+ // @ts-ignore
13
+ const visitAsync = _apidomCore.visit[Symbol.for('nodejs.util.promisify.custom')];
14
+
15
+ /**
16
+ * @public
17
+ */
18
+
19
+ /**
20
+ * @public
21
+ */
22
+ class ApiDOMDereferenceStrategy extends _DereferenceStrategy.default {
23
+ constructor(options) {
24
+ super({
25
+ ...(options ?? {}),
26
+ name: 'apidom'
27
+ });
28
+ }
29
+ canDereference(file) {
30
+ return file.mediaType.startsWith('application/vnd.apidom') && (0, _apidomCore.isElement)(file.parseResult?.result);
31
+ }
32
+ async dereference(file, options) {
33
+ const immutableRefSet = options.dereference.refSet ?? new _ReferenceSet.default();
34
+ const mutableRefSet = new _ReferenceSet.default();
35
+ let refSet = immutableRefSet;
36
+ let reference;
37
+
38
+ // determine the initial reference
39
+ if (!immutableRefSet.has(file.uri)) {
40
+ reference = new _Reference.default({
41
+ uri: file.uri,
42
+ value: file.parseResult
43
+ });
44
+ immutableRefSet.add(reference);
45
+ } else {
46
+ // pre-computed refSet was provided as configuration option
47
+ reference = immutableRefSet.find(ref => ref.uri === file.uri);
48
+ }
49
+
50
+ /**
51
+ * Clone refSet due the dereferencing process being mutable.
52
+ * We don't want to mutate the original refSet and the references.
53
+ */
54
+ if (options.dereference.immutable) {
55
+ immutableRefSet.refs.map(ref => new _Reference.default({
56
+ ...ref,
57
+ value: (0, _apidomCore.cloneDeep)(ref.value)
58
+ })).forEach(ref => mutableRefSet.add(ref));
59
+ reference = mutableRefSet.find(ref => ref.uri === file.uri);
60
+ refSet = mutableRefSet;
61
+ }
62
+ const visitor = new _visitor.default({
63
+ reference: reference,
64
+ options
65
+ });
66
+ const dereferencedElement = await visitAsync(refSet.rootRef.value, visitor);
67
+
68
+ /**
69
+ * If immutable option is set, replay refs from the refSet.
70
+ */
71
+ if (options.dereference.immutable) {
72
+ mutableRefSet.refs.filter(ref => ref.uri.startsWith('immutable://')).map(ref => new _Reference.default({
73
+ ...ref,
74
+ uri: ref.uri.replace(/^immutable:\/\//, '')
75
+ })).forEach(ref => immutableRefSet.add(ref));
76
+ }
77
+
78
+ /**
79
+ * Release all memory if this refSet was not provided as a configuration option.
80
+ * If provided as configuration option, then provider is responsible for cleanup.
81
+ */
82
+ if (options.dereference.refSet === null) {
83
+ immutableRefSet.clean();
84
+ }
85
+ mutableRefSet.clean();
86
+ return dereferencedElement;
87
+ }
88
+ }
89
+ var _default = exports.default = ApiDOMDereferenceStrategy;