@speclynx/apidom-reference 4.0.2 → 4.0.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.
Files changed (275) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/package.json +26 -27
  3. package/src/File.cjs +50 -0
  4. package/src/File.mjs +44 -0
  5. package/src/File.ts +63 -0
  6. package/src/Reference.cjs +31 -0
  7. package/src/Reference.mjs +27 -0
  8. package/src/Reference.ts +38 -0
  9. package/src/ReferenceSet.cjs +60 -0
  10. package/src/ReferenceSet.mjs +57 -0
  11. package/src/ReferenceSet.ts +73 -0
  12. package/src/bundle/index.cjs +61 -0
  13. package/src/bundle/index.mjs +55 -0
  14. package/src/bundle/index.ts +57 -0
  15. package/src/bundle/strategies/BundleStrategy.cjs +20 -0
  16. package/src/bundle/strategies/BundleStrategy.mjs +16 -0
  17. package/src/bundle/strategies/BundleStrategy.ts +27 -0
  18. package/src/bundle/strategies/openapi-3-1/index.cjs +35 -0
  19. package/src/bundle/strategies/openapi-3-1/index.mjs +29 -0
  20. package/src/bundle/strategies/openapi-3-1/index.ts +57 -0
  21. package/src/configuration/empty.cjs +9 -0
  22. package/src/configuration/empty.mjs +1 -0
  23. package/src/configuration/empty.ts +1 -0
  24. package/src/configuration/saturated.cjs +88 -0
  25. package/src/configuration/saturated.mjs +80 -0
  26. package/src/configuration/saturated.ts +72 -0
  27. package/src/dereference/index.cjs +90 -0
  28. package/src/dereference/index.mjs +83 -0
  29. package/src/dereference/index.ts +96 -0
  30. package/src/dereference/strategies/DereferenceStrategy.cjs +20 -0
  31. package/src/dereference/strategies/DereferenceStrategy.mjs +16 -0
  32. package/src/dereference/strategies/DereferenceStrategy.ts +27 -0
  33. package/src/dereference/strategies/apidom/index.cjs +89 -0
  34. package/src/dereference/strategies/apidom/index.mjs +83 -0
  35. package/src/dereference/strategies/apidom/index.ts +128 -0
  36. package/src/dereference/strategies/apidom/selectors/element-id.cjs +47 -0
  37. package/src/dereference/strategies/apidom/selectors/element-id.mjs +41 -0
  38. package/src/dereference/strategies/apidom/selectors/element-id.ts +48 -0
  39. package/src/dereference/strategies/apidom/visitor.cjs +266 -0
  40. package/src/dereference/strategies/apidom/visitor.mjs +259 -0
  41. package/src/dereference/strategies/apidom/visitor.ts +316 -0
  42. package/src/dereference/strategies/arazzo-1/index.cjs +109 -0
  43. package/src/dereference/strategies/arazzo-1/index.mjs +100 -0
  44. package/src/dereference/strategies/arazzo-1/index.ts +158 -0
  45. package/src/dereference/strategies/arazzo-1/selectors/$anchor.cjs +12 -0
  46. package/src/dereference/strategies/arazzo-1/selectors/$anchor.mjs +1 -0
  47. package/src/dereference/strategies/arazzo-1/selectors/$anchor.ts +9 -0
  48. package/src/dereference/strategies/arazzo-1/selectors/uri.cjs +8 -0
  49. package/src/dereference/strategies/arazzo-1/selectors/uri.mjs +1 -0
  50. package/src/dereference/strategies/arazzo-1/selectors/uri.ts +5 -0
  51. package/src/dereference/strategies/arazzo-1/source-descriptions.cjs +248 -0
  52. package/src/dereference/strategies/arazzo-1/source-descriptions.mjs +243 -0
  53. package/src/dereference/strategies/arazzo-1/source-descriptions.ts +317 -0
  54. package/src/dereference/strategies/arazzo-1/util.cjs +37 -0
  55. package/src/dereference/strategies/arazzo-1/util.mjs +29 -0
  56. package/src/dereference/strategies/arazzo-1/util.ts +33 -0
  57. package/src/dereference/strategies/arazzo-1/visitor.cjs +507 -0
  58. package/src/dereference/strategies/arazzo-1/visitor.mjs +500 -0
  59. package/src/dereference/strategies/arazzo-1/visitor.ts +574 -0
  60. package/src/dereference/strategies/asyncapi-2/index.cjs +94 -0
  61. package/src/dereference/strategies/asyncapi-2/index.mjs +88 -0
  62. package/src/dereference/strategies/asyncapi-2/index.ts +133 -0
  63. package/src/dereference/strategies/asyncapi-2/visitor.cjs +501 -0
  64. package/src/dereference/strategies/asyncapi-2/visitor.mjs +494 -0
  65. package/src/dereference/strategies/asyncapi-2/visitor.ts +589 -0
  66. package/src/dereference/strategies/openapi-2/index.cjs +96 -0
  67. package/src/dereference/strategies/openapi-2/index.mjs +90 -0
  68. package/src/dereference/strategies/openapi-2/index.ts +136 -0
  69. package/src/dereference/strategies/openapi-2/visitor.cjs +629 -0
  70. package/src/dereference/strategies/openapi-2/visitor.mjs +622 -0
  71. package/src/dereference/strategies/openapi-2/visitor.ts +745 -0
  72. package/src/dereference/strategies/openapi-3-0/index.cjs +96 -0
  73. package/src/dereference/strategies/openapi-3-0/index.mjs +90 -0
  74. package/src/dereference/strategies/openapi-3-0/index.ts +134 -0
  75. package/src/dereference/strategies/openapi-3-0/visitor.cjs +622 -0
  76. package/src/dereference/strategies/openapi-3-0/visitor.mjs +615 -0
  77. package/src/dereference/strategies/openapi-3-0/visitor.ts +760 -0
  78. package/src/dereference/strategies/openapi-3-1/index.cjs +99 -0
  79. package/src/dereference/strategies/openapi-3-1/index.mjs +90 -0
  80. package/src/dereference/strategies/openapi-3-1/index.ts +141 -0
  81. package/src/dereference/strategies/openapi-3-1/selectors/$anchor.cjs +65 -0
  82. package/src/dereference/strategies/openapi-3-1/selectors/$anchor.mjs +54 -0
  83. package/src/dereference/strategies/openapi-3-1/selectors/$anchor.ts +64 -0
  84. package/src/dereference/strategies/openapi-3-1/selectors/uri.cjs +50 -0
  85. package/src/dereference/strategies/openapi-3-1/selectors/uri.mjs +42 -0
  86. package/src/dereference/strategies/openapi-3-1/selectors/uri.ts +54 -0
  87. package/src/dereference/strategies/openapi-3-1/util.cjs +68 -0
  88. package/src/dereference/strategies/openapi-3-1/util.mjs +59 -0
  89. package/src/dereference/strategies/openapi-3-1/util.ts +83 -0
  90. package/src/dereference/strategies/openapi-3-1/visitor.cjs +874 -0
  91. package/src/dereference/strategies/openapi-3-1/visitor.mjs +867 -0
  92. package/src/dereference/strategies/openapi-3-1/visitor.ts +1053 -0
  93. package/src/dereference/util.cjs +31 -0
  94. package/src/dereference/util.mjs +27 -0
  95. package/src/dereference/util.ts +29 -0
  96. package/src/errors/BundleError.cjs +10 -0
  97. package/src/errors/BundleError.mjs +7 -0
  98. package/src/errors/BundleError.ts +8 -0
  99. package/src/errors/DereferenceError.cjs +10 -0
  100. package/src/errors/DereferenceError.mjs +7 -0
  101. package/src/errors/DereferenceError.ts +8 -0
  102. package/src/errors/EvaluationElementIdError.cjs +10 -0
  103. package/src/errors/EvaluationElementIdError.mjs +7 -0
  104. package/src/errors/EvaluationElementIdError.ts +8 -0
  105. package/src/errors/EvaluationJsonSchema$anchorError.cjs +11 -0
  106. package/src/errors/EvaluationJsonSchema$anchorError.mjs +6 -0
  107. package/src/errors/EvaluationJsonSchema$anchorError.ts +8 -0
  108. package/src/errors/EvaluationJsonSchemaUriError.cjs +11 -0
  109. package/src/errors/EvaluationJsonSchemaUriError.mjs +6 -0
  110. package/src/errors/EvaluationJsonSchemaUriError.ts +8 -0
  111. package/src/errors/InvalidJsonSchema$anchorError.cjs +15 -0
  112. package/src/errors/InvalidJsonSchema$anchorError.mjs +10 -0
  113. package/src/errors/InvalidJsonSchema$anchorError.ts +12 -0
  114. package/src/errors/JsonSchema$anchorError.cjs +10 -0
  115. package/src/errors/JsonSchema$anchorError.mjs +7 -0
  116. package/src/errors/JsonSchema$anchorError.ts +8 -0
  117. package/src/errors/JsonSchemaUriError.cjs +10 -0
  118. package/src/errors/JsonSchemaUriError.mjs +7 -0
  119. package/src/errors/JsonSchemaUriError.ts +8 -0
  120. package/src/errors/MaximumBundleDepthError.cjs +11 -0
  121. package/src/errors/MaximumBundleDepthError.mjs +6 -0
  122. package/src/errors/MaximumBundleDepthError.ts +8 -0
  123. package/src/errors/MaximumDereferenceDepthError.cjs +11 -0
  124. package/src/errors/MaximumDereferenceDepthError.mjs +6 -0
  125. package/src/errors/MaximumDereferenceDepthError.ts +8 -0
  126. package/src/errors/MaximumResolveDepthError.cjs +11 -0
  127. package/src/errors/MaximumResolveDepthError.mjs +6 -0
  128. package/src/errors/MaximumResolveDepthError.ts +8 -0
  129. package/src/errors/ParseError.cjs +10 -0
  130. package/src/errors/ParseError.mjs +7 -0
  131. package/src/errors/ParseError.ts +8 -0
  132. package/src/errors/ParserError.cjs +11 -0
  133. package/src/errors/ParserError.mjs +6 -0
  134. package/src/errors/ParserError.ts +8 -0
  135. package/src/errors/PluginError.cjs +18 -0
  136. package/src/errors/PluginError.mjs +15 -0
  137. package/src/errors/PluginError.ts +15 -0
  138. package/src/errors/ResolveError.cjs +10 -0
  139. package/src/errors/ResolveError.mjs +7 -0
  140. package/src/errors/ResolveError.ts +8 -0
  141. package/src/errors/ResolverError.cjs +11 -0
  142. package/src/errors/ResolverError.mjs +6 -0
  143. package/src/errors/ResolverError.ts +8 -0
  144. package/src/errors/UnmatchedBundleStrategyError.cjs +11 -0
  145. package/src/errors/UnmatchedBundleStrategyError.mjs +6 -0
  146. package/src/errors/UnmatchedBundleStrategyError.ts +8 -0
  147. package/src/errors/UnmatchedDereferenceStrategyError.cjs +11 -0
  148. package/src/errors/UnmatchedDereferenceStrategyError.mjs +6 -0
  149. package/src/errors/UnmatchedDereferenceStrategyError.ts +8 -0
  150. package/src/errors/UnmatchedParserError.cjs +11 -0
  151. package/src/errors/UnmatchedParserError.mjs +6 -0
  152. package/src/errors/UnmatchedParserError.ts +8 -0
  153. package/src/errors/UnmatchedResolveStrategyError.cjs +11 -0
  154. package/src/errors/UnmatchedResolveStrategyError.mjs +6 -0
  155. package/src/errors/UnmatchedResolveStrategyError.ts +8 -0
  156. package/src/errors/UnmatchedResolverError.cjs +11 -0
  157. package/src/errors/UnmatchedResolverError.mjs +6 -0
  158. package/src/errors/UnmatchedResolverError.ts +8 -0
  159. package/src/errors/UnresolvableReferenceError.cjs +11 -0
  160. package/src/errors/UnresolvableReferenceError.mjs +6 -0
  161. package/src/errors/UnresolvableReferenceError.ts +8 -0
  162. package/src/index.cjs +146 -0
  163. package/src/index.mjs +103 -0
  164. package/src/index.ts +135 -0
  165. package/src/options/index.cjs +194 -0
  166. package/src/options/index.mjs +191 -0
  167. package/src/options/index.ts +239 -0
  168. package/src/options/util.cjs +24 -0
  169. package/src/options/util.mjs +19 -0
  170. package/src/options/util.ts +22 -0
  171. package/src/parse/index.cjs +69 -0
  172. package/src/parse/index.mjs +63 -0
  173. package/src/parse/index.ts +67 -0
  174. package/src/parse/parsers/Parser.cjs +62 -0
  175. package/src/parse/parsers/Parser.mjs +58 -0
  176. package/src/parse/parsers/Parser.ts +80 -0
  177. package/src/parse/parsers/apidom-json/index.cjs +70 -0
  178. package/src/parse/parsers/apidom-json/index.mjs +64 -0
  179. package/src/parse/parsers/apidom-json/index.ts +78 -0
  180. package/src/parse/parsers/arazzo-json-1/index.cjs +62 -0
  181. package/src/parse/parsers/arazzo-json-1/index.mjs +56 -0
  182. package/src/parse/parsers/arazzo-json-1/index.ts +76 -0
  183. package/src/parse/parsers/arazzo-json-1/source-descriptions.cjs +221 -0
  184. package/src/parse/parsers/arazzo-json-1/source-descriptions.mjs +214 -0
  185. package/src/parse/parsers/arazzo-json-1/source-descriptions.ts +280 -0
  186. package/src/parse/parsers/arazzo-yaml-1/index.cjs +62 -0
  187. package/src/parse/parsers/arazzo-yaml-1/index.mjs +56 -0
  188. package/src/parse/parsers/arazzo-yaml-1/index.ts +77 -0
  189. package/src/parse/parsers/arazzo-yaml-1/source-descriptions.cjs +12 -0
  190. package/src/parse/parsers/arazzo-yaml-1/source-descriptions.mjs +7 -0
  191. package/src/parse/parsers/arazzo-yaml-1/source-descriptions.ts +16 -0
  192. package/src/parse/parsers/asyncapi-json-2/index.cjs +54 -0
  193. package/src/parse/parsers/asyncapi-json-2/index.mjs +48 -0
  194. package/src/parse/parsers/asyncapi-json-2/index.ts +58 -0
  195. package/src/parse/parsers/asyncapi-yaml-2/index.cjs +54 -0
  196. package/src/parse/parsers/asyncapi-yaml-2/index.mjs +48 -0
  197. package/src/parse/parsers/asyncapi-yaml-2/index.ts +58 -0
  198. package/src/parse/parsers/binary/index-browser.cjs +56 -0
  199. package/src/parse/parsers/binary/index-browser.mjs +50 -0
  200. package/src/parse/parsers/binary/index-browser.ts +60 -0
  201. package/src/parse/parsers/binary/index-node.cjs +51 -0
  202. package/src/parse/parsers/binary/index-node.mjs +45 -0
  203. package/src/parse/parsers/binary/index-node.ts +57 -0
  204. package/src/parse/parsers/json/index.cjs +53 -0
  205. package/src/parse/parsers/json/index.mjs +47 -0
  206. package/src/parse/parsers/json/index.ts +52 -0
  207. package/src/parse/parsers/openapi-json-2/index.cjs +54 -0
  208. package/src/parse/parsers/openapi-json-2/index.mjs +48 -0
  209. package/src/parse/parsers/openapi-json-2/index.ts +58 -0
  210. package/src/parse/parsers/openapi-json-3-0/index.cjs +54 -0
  211. package/src/parse/parsers/openapi-json-3-0/index.mjs +48 -0
  212. package/src/parse/parsers/openapi-json-3-0/index.ts +59 -0
  213. package/src/parse/parsers/openapi-json-3-1/index.cjs +54 -0
  214. package/src/parse/parsers/openapi-json-3-1/index.mjs +48 -0
  215. package/src/parse/parsers/openapi-json-3-1/index.ts +59 -0
  216. package/src/parse/parsers/openapi-yaml-2/index.cjs +54 -0
  217. package/src/parse/parsers/openapi-yaml-2/index.mjs +48 -0
  218. package/src/parse/parsers/openapi-yaml-2/index.ts +58 -0
  219. package/src/parse/parsers/openapi-yaml-3-0/index.cjs +54 -0
  220. package/src/parse/parsers/openapi-yaml-3-0/index.mjs +48 -0
  221. package/src/parse/parsers/openapi-yaml-3-0/index.ts +59 -0
  222. package/src/parse/parsers/openapi-yaml-3-1/index.cjs +54 -0
  223. package/src/parse/parsers/openapi-yaml-3-1/index.mjs +48 -0
  224. package/src/parse/parsers/openapi-yaml-3-1/index.ts +59 -0
  225. package/src/parse/parsers/yaml-1-2/index.cjs +56 -0
  226. package/src/parse/parsers/yaml-1-2/index.mjs +50 -0
  227. package/src/parse/parsers/yaml-1-2/index.ts +60 -0
  228. package/src/resolve/index.cjs +67 -0
  229. package/src/resolve/index.mjs +60 -0
  230. package/src/resolve/index.ts +75 -0
  231. package/src/resolve/resolvers/HTTPResolver.cjs +45 -0
  232. package/src/resolve/resolvers/HTTPResolver.mjs +37 -0
  233. package/src/resolve/resolvers/HTTPResolver.ts +58 -0
  234. package/src/resolve/resolvers/Resolver.cjs +20 -0
  235. package/src/resolve/resolvers/Resolver.mjs +16 -0
  236. package/src/resolve/resolvers/Resolver.ts +25 -0
  237. package/src/resolve/resolvers/file/index-browser.cjs +24 -0
  238. package/src/resolve/resolvers/file/index-browser.mjs +19 -0
  239. package/src/resolve/resolvers/file/index-browser.ts +24 -0
  240. package/src/resolve/resolvers/file/index-node.cjs +49 -0
  241. package/src/resolve/resolvers/file/index-node.mjs +42 -0
  242. package/src/resolve/resolvers/file/index-node.ts +55 -0
  243. package/src/resolve/resolvers/http-axios/cache/MemoryCache.cjs +41 -0
  244. package/src/resolve/resolvers/http-axios/cache/MemoryCache.mjs +37 -0
  245. package/src/resolve/resolvers/http-axios/cache/MemoryCache.ts +46 -0
  246. package/src/resolve/resolvers/http-axios/index.cjs +113 -0
  247. package/src/resolve/resolvers/http-axios/index.mjs +105 -0
  248. package/src/resolve/resolvers/http-axios/index.ts +130 -0
  249. package/src/resolve/strategies/ResolveStrategy.cjs +20 -0
  250. package/src/resolve/strategies/ResolveStrategy.mjs +16 -0
  251. package/src/resolve/strategies/ResolveStrategy.ts +26 -0
  252. package/src/resolve/strategies/apidom/index.cjs +49 -0
  253. package/src/resolve/strategies/apidom/index.mjs +43 -0
  254. package/src/resolve/strategies/apidom/index.ts +78 -0
  255. package/src/resolve/strategies/asyncapi-2/index.cjs +49 -0
  256. package/src/resolve/strategies/asyncapi-2/index.mjs +43 -0
  257. package/src/resolve/strategies/asyncapi-2/index.ts +78 -0
  258. package/src/resolve/strategies/openapi-2/index.cjs +49 -0
  259. package/src/resolve/strategies/openapi-2/index.mjs +43 -0
  260. package/src/resolve/strategies/openapi-2/index.ts +78 -0
  261. package/src/resolve/strategies/openapi-3-0/index.cjs +49 -0
  262. package/src/resolve/strategies/openapi-3-0/index.mjs +43 -0
  263. package/src/resolve/strategies/openapi-3-0/index.ts +78 -0
  264. package/src/resolve/strategies/openapi-3-1/index.cjs +49 -0
  265. package/src/resolve/strategies/openapi-3-1/index.mjs +43 -0
  266. package/src/resolve/strategies/openapi-3-1/index.ts +78 -0
  267. package/src/resolve/util.cjs +37 -0
  268. package/src/resolve/util.mjs +30 -0
  269. package/src/resolve/util.ts +39 -0
  270. package/src/util/plugins.cjs +39 -0
  271. package/src/util/plugins.mjs +34 -0
  272. package/src/util/plugins.ts +37 -0
  273. package/src/util/url.cjs +288 -0
  274. package/src/util/url.mjs +274 -0
  275. package/src/util/url.ts +285 -0
@@ -0,0 +1,316 @@
1
+ import { propEq } from 'ramda';
2
+ import { ApiDOMStructuredError } from '@speclynx/apidom-error';
3
+ import {
4
+ Element,
5
+ RefElement,
6
+ ParseResultElement,
7
+ isElement,
8
+ isMemberElement,
9
+ isArrayElement,
10
+ isObjectElement,
11
+ isRefElement,
12
+ refract,
13
+ cloneDeep,
14
+ } from '@speclynx/apidom-datamodel';
15
+ import { toValue, toYAML } from '@speclynx/apidom-core';
16
+ import { traverse, traverseAsync, type Path } from '@speclynx/apidom-traverse';
17
+ import { URIFragmentIdentifier } from '@speclynx/apidom-json-pointer';
18
+
19
+ import MaximumResolveDepthError from '../../../errors/MaximumResolveDepthError.ts';
20
+ import UnresolvableReferenceError from '../../../errors/UnresolvableReferenceError.ts';
21
+ import * as url from '../../../util/url.ts';
22
+ import parse from '../../../parse/index.ts';
23
+ import Reference from '../../../Reference.ts';
24
+ import ReferenceSet from '../../../ReferenceSet.ts';
25
+ import { evaluate } from './selectors/element-id.ts';
26
+ import type { ReferenceOptions } from '../../../options/index.ts';
27
+
28
+ /**
29
+ * The following rules apply:
30
+ *
31
+ * 1. When referencing an element in the local document, the id of the element MAY be used
32
+ * 2. When referencing remote elements, an absolute URL or relative URL MAY be used
33
+ * 3. When a URL fragment exists in the URL given, it references the element with the matching id in the given document. The URL fragment MAY need to be URL decoded before making a match.
34
+ * 4. When a URL fragment does not exist, the URL references the root element
35
+ * 5. When path is used, it references the given property of the referenced element
36
+ * 6. When path is used in an element that includes the data of the pointer (such as with ref), the referenced path MAY need to be converted to a refract structure in order to be valid
37
+ *
38
+ * WARNING: this implementation only supports referencing elements in the local document. Points 2-4 are not supported.
39
+ * @public
40
+ */
41
+
42
+ export interface ApiDOMDereferenceVisitorOptions {
43
+ readonly reference: Reference;
44
+ readonly options: ReferenceOptions;
45
+ }
46
+
47
+ /**
48
+ * @public
49
+ */
50
+ class ApiDOMDereferenceVisitor {
51
+ protected readonly reference: Reference;
52
+
53
+ protected readonly options: ReferenceOptions;
54
+
55
+ constructor({ reference, options }: ApiDOMDereferenceVisitorOptions) {
56
+ this.reference = reference;
57
+ this.options = options;
58
+ }
59
+
60
+ protected toBaseURI(uri: string): string {
61
+ return url.resolve(this.reference.uri, url.sanitize(url.stripHash(uri)));
62
+ }
63
+
64
+ protected async toReference(uri: string): Promise<Reference> {
65
+ // detect maximum depth of resolution
66
+ if (this.reference.depth >= this.options.resolve.maxDepth) {
67
+ throw new MaximumResolveDepthError(
68
+ `Maximum resolution depth of ${this.options.resolve.maxDepth} has been exceeded by file "${this.reference.uri}"`,
69
+ { maxDepth: this.options.resolve.maxDepth, uri: this.reference.uri },
70
+ );
71
+ }
72
+
73
+ const baseURI = this.toBaseURI(uri);
74
+ const { refSet } = this.reference as { refSet: ReferenceSet };
75
+
76
+ // we've already processed this Reference in past
77
+ if (refSet.has(baseURI)) {
78
+ return refSet.find(propEq(baseURI, 'uri'))!;
79
+ }
80
+
81
+ const parseResult = await parse(url.unsanitize(baseURI), {
82
+ ...this.options,
83
+ parse: { ...this.options.parse, mediaType: 'text/plain' },
84
+ });
85
+
86
+ // register new mutable reference with a refSet
87
+ const mutableReference = new Reference({
88
+ uri: baseURI,
89
+ value: cloneDeep(parseResult),
90
+ depth: this.reference.depth + 1,
91
+ });
92
+ refSet.add(mutableReference);
93
+
94
+ if (this.options.dereference.immutable) {
95
+ // register new immutable reference with a refSet
96
+ const immutableReference = new Reference({
97
+ uri: `immutable://${baseURI}`,
98
+ value: parseResult,
99
+ depth: this.reference.depth + 1,
100
+ });
101
+ refSet.add(immutableReference);
102
+ }
103
+
104
+ return mutableReference;
105
+ }
106
+
107
+ /**
108
+ * Handles an error according to the continueOnError option.
109
+ *
110
+ * For new errors: wraps in UnresolvableReferenceError with structured context.
111
+ * For errors already wrapped by a nested visitor: prepends the current hop to the trace.
112
+ *
113
+ * Inner/intermediate visitors always throw to let the trace accumulate.
114
+ * Only the entry document visitor respects continueOnError (callback/swallow/throw).
115
+ */
116
+ protected handleError(
117
+ message: string,
118
+ error: Error,
119
+ referencingElement: Element,
120
+ refFieldName: string | null,
121
+ refFieldValue: string,
122
+ visitorPath: Path<Element>,
123
+ ): void {
124
+ const { continueOnError } = this.options.dereference;
125
+ const isEntryDocument =
126
+ url.stripHash(this.reference.refSet?.rootRef?.uri ?? '') === this.reference.uri;
127
+ const uri = this.reference.uri;
128
+ const type = referencingElement.element as string;
129
+ // find element location by identity in the document tree.
130
+ // guarded: this.reference.value may not be a ParseResultElement or may lack a result.
131
+ // falls back to visitorPath which may produce an incomplete path when
132
+ // dereferenceApiDOM is called with a fragment (cloneShallow creates a new root identity).
133
+ let location: string | undefined;
134
+ const root = (this.reference.value as ParseResultElement).result;
135
+ if (isElement(root)) {
136
+ traverse(root, {
137
+ enter(p: Path<Element>) {
138
+ if (p.node === referencingElement) {
139
+ location = p.formatPath();
140
+ p.stop();
141
+ }
142
+ },
143
+ });
144
+ }
145
+ location ??= visitorPath.formatPath();
146
+
147
+ const codeFrame = toYAML(referencingElement);
148
+ const hop = { uri, type, refFieldName, refFieldValue, location, codeFrame };
149
+
150
+ let unresolvedError: UnresolvableReferenceError;
151
+ if (error instanceof UnresolvableReferenceError) {
152
+ const refBaseURI = this.toBaseURI(refFieldValue);
153
+ const fragment = URIFragmentIdentifier.fromURIReference(refFieldValue);
154
+ if (fragment) {
155
+ if (refBaseURI === (error as any).uri && (error as any).location) {
156
+ (error as any).location = fragment + (error as any).location;
157
+ }
158
+ for (const h of (error as any).trace) {
159
+ if (h.uri === refBaseURI && h.location) h.location = fragment + h.location;
160
+ }
161
+ }
162
+ // @ts-ignore
163
+ error.trace = [hop, ...error.trace];
164
+ unresolvedError = error;
165
+ } else {
166
+ unresolvedError = new UnresolvableReferenceError(message, {
167
+ cause: error,
168
+ type,
169
+ uri,
170
+ location,
171
+ codeFrame,
172
+ refFieldName,
173
+ refFieldValue,
174
+ trace: [],
175
+ });
176
+ }
177
+
178
+ if (!isEntryDocument || continueOnError === false) throw unresolvedError;
179
+ if (typeof continueOnError === 'function') continueOnError(unresolvedError);
180
+ }
181
+
182
+ public async RefElement(path: Path<Element>) {
183
+ const refElement = path.node as RefElement;
184
+ const { parent, key } = path;
185
+ const ancestors = path.getAncestorNodes();
186
+
187
+ const refURI = toValue(refElement) as string;
188
+ const refNormalizedURI = refURI.includes('#') ? refURI : `#${refURI}`;
189
+ const retrievalURI = this.toBaseURI(refNormalizedURI);
190
+ const isInternalReference = url.stripHash(this.reference.uri) === retrievalURI;
191
+ const isExternalReference = !isInternalReference;
192
+
193
+ // ignore resolving internal RefElements
194
+ if (!this.options.resolve.internal && isInternalReference) {
195
+ // skip traversing this ref element
196
+ path.skip();
197
+ return;
198
+ }
199
+ // ignore resolving external RefElements
200
+ if (!this.options.resolve.external && isExternalReference) {
201
+ // skip traversing this ref element
202
+ path.skip();
203
+ return;
204
+ }
205
+
206
+ try {
207
+ const reference = await this.toReference(refNormalizedURI);
208
+ const refBaseURI = url.resolve(retrievalURI, refNormalizedURI);
209
+ const elementID = URIFragmentIdentifier.fromURIReference(refBaseURI);
210
+ let referencedElement = evaluate(
211
+ elementID,
212
+ (reference.value as ParseResultElement).result as Element,
213
+ );
214
+
215
+ if (!isElement(referencedElement)) {
216
+ throw new ApiDOMStructuredError(`Referenced element with id="${elementID}" was not found`, {
217
+ elementID,
218
+ });
219
+ }
220
+
221
+ if (refElement === referencedElement) {
222
+ throw new ApiDOMStructuredError(
223
+ `RefElement with id="${elementID}" cannot reference itself`,
224
+ { elementID },
225
+ );
226
+ }
227
+
228
+ if (isRefElement(referencedElement)) {
229
+ throw new ApiDOMStructuredError(
230
+ `RefElement with id="${elementID}" cannot reference another RefElement`,
231
+ { elementID },
232
+ );
233
+ }
234
+
235
+ if (isExternalReference) {
236
+ // dive deep into the fragment
237
+ const visitor = new ApiDOMDereferenceVisitor({ reference, options: this.options });
238
+ referencedElement = await traverseAsync(referencedElement, visitor, { mutable: true });
239
+ }
240
+
241
+ /**
242
+ * When path is used, it references the given property of the referenced element.
243
+ * Valid paths are: 'element', 'content', 'meta', 'attributes'.
244
+ */
245
+ const referencedElementPath = toValue(refElement.path) as
246
+ | 'element'
247
+ | 'content'
248
+ | 'meta'
249
+ | 'attributes';
250
+ if (referencedElementPath !== 'element' && isElement(referencedElement)) {
251
+ referencedElement = refract(referencedElement[referencedElementPath]);
252
+ }
253
+
254
+ /**
255
+ * Transclusion of a Ref Element SHALL be defined in the if/else block below.
256
+ */
257
+ // ancestors[0] is the grandparent (nearest ancestor from getAncestorNodes())
258
+ const grandparent = ancestors[0];
259
+ if (
260
+ isObjectElement(referencedElement) &&
261
+ isObjectElement(grandparent) &&
262
+ Array.isArray(parent) &&
263
+ typeof key === 'number'
264
+ ) {
265
+ /**
266
+ * If the Ref Element is held by an Object Element and references an Object Element,
267
+ * its content entries SHALL be inserted in place of the Ref Element.
268
+ */
269
+ (parent as unknown as Element[]).splice(
270
+ key,
271
+ 1,
272
+ ...(referencedElement.content as Element[]),
273
+ );
274
+ } else if (
275
+ isArrayElement(referencedElement) &&
276
+ Array.isArray(parent) &&
277
+ typeof key === 'number'
278
+ ) {
279
+ /**
280
+ * If the Ref Element is held by an Array Element and references an Array Element,
281
+ * its content entries SHALL be inserted in place of the Ref Element.
282
+ */
283
+ (parent as unknown as Element[]).splice(
284
+ key,
285
+ 1,
286
+ ...(referencedElement.content as Element[]),
287
+ );
288
+ } else if (isMemberElement(parent)) {
289
+ /**
290
+ * The Ref Element is substituted by the Element it references.
291
+ */
292
+ parent.value = referencedElement;
293
+ } else if (Array.isArray(parent)) {
294
+ /**
295
+ * The Ref Element is substituted by the Element it references.
296
+ */
297
+ (parent as unknown as Element[])[key as number] = referencedElement as Element;
298
+ }
299
+
300
+ if (!parent) {
301
+ path.replaceWith(referencedElement);
302
+ }
303
+ } catch (error: unknown) {
304
+ this.handleError(
305
+ `Error while dereferencing Ref Element. Cannot resolve ref "${refURI}": ${(error as Error).message}`,
306
+ error as Error,
307
+ refElement,
308
+ null,
309
+ refURI,
310
+ path,
311
+ );
312
+ }
313
+ }
314
+ }
315
+
316
+ export default ApiDOMDereferenceVisitor;
@@ -0,0 +1,109 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault").default;
4
+ exports.__esModule = true;
5
+ exports.resolveSchema$refField = exports.resolveSchema$idField = exports.maybeRefractToJSONSchemaElement = exports.default = void 0;
6
+ var _apidomDatamodel = require("@speclynx/apidom-datamodel");
7
+ var _apidomTraverse = require("@speclynx/apidom-traverse");
8
+ var _apidomNsArazzo = require("@speclynx/apidom-ns-arazzo-1");
9
+ var _DereferenceStrategy = _interopRequireDefault(require("../DereferenceStrategy.cjs"));
10
+ var _Reference = _interopRequireDefault(require("../../../Reference.cjs"));
11
+ var _ReferenceSet = _interopRequireDefault(require("../../../ReferenceSet.cjs"));
12
+ var _visitor = _interopRequireDefault(require("./visitor.cjs"));
13
+ exports.Arazzo1DereferenceVisitor = _visitor.default;
14
+ var _sourceDescriptions = require("./source-descriptions.cjs");
15
+ exports.dereferenceSourceDescriptions = _sourceDescriptions.dereferenceSourceDescriptions;
16
+ var _util = require("./util.cjs");
17
+ exports.resolveSchema$refField = _util.resolveSchema$refField;
18
+ exports.resolveSchema$idField = _util.resolveSchema$idField;
19
+ exports.maybeRefractToJSONSchemaElement = _util.maybeRefractToJSONSchemaElement;
20
+ /**
21
+ * @public
22
+ */
23
+
24
+ /**
25
+ * @public
26
+ */
27
+ class Arazzo1DereferenceStrategy extends _DereferenceStrategy.default {
28
+ constructor(options) {
29
+ super({
30
+ ...(options ?? {}),
31
+ name: 'arazzo-1'
32
+ });
33
+ }
34
+ canDereference(file) {
35
+ // assert by media type
36
+ if (file.mediaType !== 'text/plain') {
37
+ return _apidomNsArazzo.mediaTypes.includes(file.mediaType);
38
+ }
39
+
40
+ // assert by inspecting ApiDOM
41
+ return (0, _apidomNsArazzo.isArazzoSpecification1Element)(file.parseResult?.result);
42
+ }
43
+ async dereference(file, options) {
44
+ const immutableRefSet = options.dereference.refSet ?? new _ReferenceSet.default();
45
+ const mutableRefSet = new _ReferenceSet.default();
46
+ let refSet = immutableRefSet;
47
+ let reference;
48
+ if (!immutableRefSet.has(file.uri)) {
49
+ reference = new _Reference.default({
50
+ uri: file.uri,
51
+ value: file.parseResult
52
+ });
53
+ immutableRefSet.add(reference);
54
+ } else {
55
+ // pre-computed refSet was provided as configuration option
56
+ reference = immutableRefSet.find(ref => ref.uri === file.uri);
57
+ }
58
+
59
+ /**
60
+ * Clone refSet due the dereferencing process being mutable.
61
+ * We don't want to mutate the original refSet and the references.
62
+ */
63
+ if (options.dereference.immutable) {
64
+ immutableRefSet.refs.map(ref => new _Reference.default({
65
+ ...ref,
66
+ value: (0, _apidomDatamodel.cloneDeep)(ref.value)
67
+ })).forEach(ref => mutableRefSet.add(ref));
68
+ reference = mutableRefSet.find(ref => ref.uri === file.uri);
69
+ refSet = mutableRefSet;
70
+ }
71
+ const visitor = new _visitor.default({
72
+ reference,
73
+ options
74
+ });
75
+ const dereferencedElement = await (0, _apidomTraverse.traverseAsync)(refSet.rootRef.value, visitor, {
76
+ mutable: true
77
+ });
78
+
79
+ /**
80
+ * Dereference source descriptions if option is enabled.
81
+ */
82
+ const shouldDereferenceSourceDescriptions = options?.dereference?.strategyOpts?.[this.name]?.sourceDescriptions ?? options?.dereference?.strategyOpts?.sourceDescriptions;
83
+ if (shouldDereferenceSourceDescriptions) {
84
+ const sourceDescriptions = await (0, _sourceDescriptions.dereferenceSourceDescriptions)(dereferencedElement, reference.uri, options, this.name);
85
+ dereferencedElement.push(...sourceDescriptions);
86
+ }
87
+
88
+ /**
89
+ * If immutable option is set, replay refs from the refSet.
90
+ */
91
+ if (options.dereference.immutable) {
92
+ mutableRefSet.refs.filter(ref => ref.uri.startsWith('immutable://')).map(ref => new _Reference.default({
93
+ ...ref,
94
+ uri: ref.uri.replace(/^immutable:\/\//, '')
95
+ })).forEach(ref => immutableRefSet.add(ref));
96
+ }
97
+
98
+ /**
99
+ * Release all memory if this refSet was not provided as a configuration option.
100
+ * If provided as configuration option, then provider is responsible for cleanup.
101
+ */
102
+ if (options.dereference.refSet === null) {
103
+ immutableRefSet.clean();
104
+ }
105
+ mutableRefSet.clean();
106
+ return dereferencedElement;
107
+ }
108
+ }
109
+ var _default = exports.default = Arazzo1DereferenceStrategy;
@@ -0,0 +1,100 @@
1
+ import { cloneDeep } from '@speclynx/apidom-datamodel';
2
+ import { traverseAsync } from '@speclynx/apidom-traverse';
3
+ import { isArazzoSpecification1Element, mediaTypes } from '@speclynx/apidom-ns-arazzo-1';
4
+ import DereferenceStrategy from "../DereferenceStrategy.mjs";
5
+ import Reference from "../../../Reference.mjs";
6
+ import ReferenceSet from "../../../ReferenceSet.mjs";
7
+ import Arazzo1DereferenceVisitor from "./visitor.mjs";
8
+ import { dereferenceSourceDescriptions } from "./source-descriptions.mjs";
9
+ /**
10
+ * @public
11
+ */
12
+ /**
13
+ * @public
14
+ */
15
+ class Arazzo1DereferenceStrategy extends DereferenceStrategy {
16
+ constructor(options) {
17
+ super({
18
+ ...(options ?? {}),
19
+ name: 'arazzo-1'
20
+ });
21
+ }
22
+ canDereference(file) {
23
+ // assert by media type
24
+ if (file.mediaType !== 'text/plain') {
25
+ return mediaTypes.includes(file.mediaType);
26
+ }
27
+
28
+ // assert by inspecting ApiDOM
29
+ return isArazzoSpecification1Element(file.parseResult?.result);
30
+ }
31
+ async dereference(file, options) {
32
+ const immutableRefSet = options.dereference.refSet ?? new ReferenceSet();
33
+ const mutableRefSet = new ReferenceSet();
34
+ let refSet = immutableRefSet;
35
+ let reference;
36
+ if (!immutableRefSet.has(file.uri)) {
37
+ reference = new Reference({
38
+ uri: file.uri,
39
+ value: file.parseResult
40
+ });
41
+ immutableRefSet.add(reference);
42
+ } else {
43
+ // pre-computed refSet was provided as configuration option
44
+ reference = immutableRefSet.find(ref => ref.uri === file.uri);
45
+ }
46
+
47
+ /**
48
+ * Clone refSet due the dereferencing process being mutable.
49
+ * We don't want to mutate the original refSet and the references.
50
+ */
51
+ if (options.dereference.immutable) {
52
+ immutableRefSet.refs.map(ref => new Reference({
53
+ ...ref,
54
+ value: cloneDeep(ref.value)
55
+ })).forEach(ref => mutableRefSet.add(ref));
56
+ reference = mutableRefSet.find(ref => ref.uri === file.uri);
57
+ refSet = mutableRefSet;
58
+ }
59
+ const visitor = new Arazzo1DereferenceVisitor({
60
+ reference,
61
+ options
62
+ });
63
+ const dereferencedElement = await traverseAsync(refSet.rootRef.value, visitor, {
64
+ mutable: true
65
+ });
66
+
67
+ /**
68
+ * Dereference source descriptions if option is enabled.
69
+ */
70
+ const shouldDereferenceSourceDescriptions = options?.dereference?.strategyOpts?.[this.name]?.sourceDescriptions ?? options?.dereference?.strategyOpts?.sourceDescriptions;
71
+ if (shouldDereferenceSourceDescriptions) {
72
+ const sourceDescriptions = await dereferenceSourceDescriptions(dereferencedElement, reference.uri, options, this.name);
73
+ dereferencedElement.push(...sourceDescriptions);
74
+ }
75
+
76
+ /**
77
+ * If immutable option is set, replay refs from the refSet.
78
+ */
79
+ if (options.dereference.immutable) {
80
+ mutableRefSet.refs.filter(ref => ref.uri.startsWith('immutable://')).map(ref => new Reference({
81
+ ...ref,
82
+ uri: ref.uri.replace(/^immutable:\/\//, '')
83
+ })).forEach(ref => immutableRefSet.add(ref));
84
+ }
85
+
86
+ /**
87
+ * Release all memory if this refSet was not provided as a configuration option.
88
+ * If provided as configuration option, then provider is responsible for cleanup.
89
+ */
90
+ if (options.dereference.refSet === null) {
91
+ immutableRefSet.clean();
92
+ }
93
+ mutableRefSet.clean();
94
+ return dereferencedElement;
95
+ }
96
+ }
97
+ export { Arazzo1DereferenceVisitor };
98
+ export { resolveSchema$refField, resolveSchema$idField, maybeRefractToJSONSchemaElement } from "./util.mjs";
99
+ export { dereferenceSourceDescriptions } from "./source-descriptions.mjs";
100
+ export default Arazzo1DereferenceStrategy;
@@ -0,0 +1,158 @@
1
+ import { Element, cloneDeep, ParseResultElement } from '@speclynx/apidom-datamodel';
2
+ import { traverseAsync } from '@speclynx/apidom-traverse';
3
+ import { isArazzoSpecification1Element, mediaTypes } from '@speclynx/apidom-ns-arazzo-1';
4
+
5
+ import DereferenceStrategy, { DereferenceStrategyOptions } from '../DereferenceStrategy.ts';
6
+ import File from '../../../File.ts';
7
+ import Reference from '../../../Reference.ts';
8
+ import ReferenceSet from '../../../ReferenceSet.ts';
9
+ import Arazzo1DereferenceVisitor from './visitor.ts';
10
+ import { dereferenceSourceDescriptions } from './source-descriptions.ts';
11
+ import type { ReferenceOptions } from '../../../options/index.ts';
12
+
13
+ export type {
14
+ default as DereferenceStrategy,
15
+ DereferenceStrategyOptions,
16
+ } from '../DereferenceStrategy.ts';
17
+ export type { default as File, FileOptions } from '../../../File.ts';
18
+ export type { default as Reference, ReferenceOptions } from '../../../Reference.ts';
19
+ export type { default as ReferenceSet, ReferenceSetOptions } from '../../../ReferenceSet.ts';
20
+ export type { Arazzo1DereferenceVisitorOptions } from './visitor.ts';
21
+ export type {
22
+ ReferenceOptions as ApiDOMReferenceOptions,
23
+ ReferenceBundleOptions as ApiDOMReferenceBundleOptions,
24
+ ReferenceDereferenceOptions as ApiDOMReferenceDereferenceOptions,
25
+ ReferenceParseOptions as ApiDOMReferenceParseOptions,
26
+ ReferenceResolveOptions as ApiDOMReferenceResolveOptions,
27
+ } from '../../../options/index.ts';
28
+ export type { default as Parser, ParserOptions } from '../../../parse/parsers/Parser.ts';
29
+ export type { default as Resolver, ResolverOptions } from '../../../resolve/resolvers/Resolver.ts';
30
+ export type {
31
+ default as ResolveStrategy,
32
+ ResolveStrategyOptions,
33
+ } from '../../../resolve/strategies/ResolveStrategy.ts';
34
+ export type {
35
+ default as BundleStrategy,
36
+ BundleStrategyOptions,
37
+ } from '../../../bundle/strategies/BundleStrategy.ts';
38
+ export type { AncestorLineage } from '../../util.ts';
39
+
40
+ /**
41
+ * @public
42
+ */
43
+ export interface Arazzo1DereferenceStrategyOptions extends Omit<
44
+ DereferenceStrategyOptions,
45
+ 'name'
46
+ > {}
47
+
48
+ /**
49
+ * @public
50
+ */
51
+ class Arazzo1DereferenceStrategy extends DereferenceStrategy {
52
+ constructor(options?: Arazzo1DereferenceStrategyOptions) {
53
+ super({ ...(options ?? {}), name: 'arazzo-1' });
54
+ }
55
+
56
+ canDereference(file: File): boolean {
57
+ // assert by media type
58
+ if (file.mediaType !== 'text/plain') {
59
+ return mediaTypes.includes(file.mediaType);
60
+ }
61
+
62
+ // assert by inspecting ApiDOM
63
+ return isArazzoSpecification1Element(file.parseResult?.result);
64
+ }
65
+
66
+ async dereference(file: File, options: ReferenceOptions): Promise<Element> {
67
+ const immutableRefSet = options.dereference.refSet ?? new ReferenceSet();
68
+ const mutableRefSet = new ReferenceSet();
69
+ let refSet = immutableRefSet;
70
+ let reference: Reference;
71
+
72
+ if (!immutableRefSet.has(file.uri)) {
73
+ reference = new Reference({ uri: file.uri, value: file.parseResult! });
74
+ immutableRefSet.add(reference);
75
+ } else {
76
+ // pre-computed refSet was provided as configuration option
77
+ reference = immutableRefSet.find((ref) => ref.uri === file.uri)!;
78
+ }
79
+
80
+ /**
81
+ * Clone refSet due the dereferencing process being mutable.
82
+ * We don't want to mutate the original refSet and the references.
83
+ */
84
+ if (options.dereference.immutable) {
85
+ immutableRefSet.refs
86
+ .map(
87
+ (ref) =>
88
+ new Reference({
89
+ ...ref,
90
+ value: cloneDeep(ref.value),
91
+ }),
92
+ )
93
+ .forEach((ref) => mutableRefSet.add(ref));
94
+ reference = mutableRefSet.find((ref) => ref.uri === file.uri)!;
95
+ refSet = mutableRefSet;
96
+ }
97
+
98
+ const visitor = new Arazzo1DereferenceVisitor({ reference, options });
99
+ const dereferencedElement = await traverseAsync(refSet.rootRef!.value, visitor, {
100
+ mutable: true,
101
+ });
102
+
103
+ /**
104
+ * Dereference source descriptions if option is enabled.
105
+ */
106
+ const shouldDereferenceSourceDescriptions =
107
+ options?.dereference?.strategyOpts?.[this.name]?.sourceDescriptions ??
108
+ options?.dereference?.strategyOpts?.sourceDescriptions;
109
+
110
+ if (shouldDereferenceSourceDescriptions) {
111
+ const sourceDescriptions = await dereferenceSourceDescriptions(
112
+ dereferencedElement as ParseResultElement,
113
+ reference.uri,
114
+ options,
115
+ this.name,
116
+ );
117
+ (dereferencedElement as ParseResultElement).push(...sourceDescriptions);
118
+ }
119
+
120
+ /**
121
+ * If immutable option is set, replay refs from the refSet.
122
+ */
123
+ if (options.dereference.immutable) {
124
+ mutableRefSet.refs
125
+ .filter((ref) => ref.uri.startsWith('immutable://'))
126
+ .map(
127
+ (ref) =>
128
+ new Reference({
129
+ ...ref,
130
+ uri: ref.uri.replace(/^immutable:\/\//, ''),
131
+ }),
132
+ )
133
+ .forEach((ref) => immutableRefSet.add(ref));
134
+ }
135
+
136
+ /**
137
+ * Release all memory if this refSet was not provided as a configuration option.
138
+ * If provided as configuration option, then provider is responsible for cleanup.
139
+ */
140
+ if (options.dereference.refSet === null) {
141
+ immutableRefSet.clean();
142
+ }
143
+
144
+ mutableRefSet.clean();
145
+
146
+ return dereferencedElement;
147
+ }
148
+ }
149
+
150
+ export { Arazzo1DereferenceVisitor };
151
+ export {
152
+ resolveSchema$refField,
153
+ resolveSchema$idField,
154
+ maybeRefractToJSONSchemaElement,
155
+ } from './util.ts';
156
+ export { dereferenceSourceDescriptions } from './source-descriptions.ts';
157
+
158
+ export default Arazzo1DereferenceStrategy;
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+
3
+ exports.__esModule = true;
4
+ exports.uriToAnchor = exports.parse = exports.isAnchor = exports.evaluate = exports.JsonSchema$anchorError = exports.InvalidJsonSchema$anchorError = exports.EvaluationJsonSchema$anchorError = void 0;
5
+ var _$anchor = require("../../openapi-3-1/selectors/$anchor.cjs");
6
+ exports.isAnchor = _$anchor.isAnchor;
7
+ exports.uriToAnchor = _$anchor.uriToAnchor;
8
+ exports.parse = _$anchor.parse;
9
+ exports.evaluate = _$anchor.evaluate;
10
+ exports.EvaluationJsonSchema$anchorError = _$anchor.EvaluationJsonSchema$anchorError;
11
+ exports.InvalidJsonSchema$anchorError = _$anchor.InvalidJsonSchema$anchorError;
12
+ exports.JsonSchema$anchorError = _$anchor.JsonSchema$anchorError;