@speclynx/apidom-ns-openapi-3-1 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 (198) hide show
  1. package/CHANGELOG.md +87 -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 +472 -0
  9. package/dist/apidom-ns-openapi-3-1.browser.js +36144 -0
  10. package/dist/apidom-ns-openapi-3-1.browser.min.js +1 -0
  11. package/package.json +70 -0
  12. package/src/elements/Callback.cjs +10 -0
  13. package/src/elements/Callback.mjs +7 -0
  14. package/src/elements/Components.cjs +17 -0
  15. package/src/elements/Components.mjs +14 -0
  16. package/src/elements/Contact.cjs +10 -0
  17. package/src/elements/Contact.mjs +7 -0
  18. package/src/elements/Discriminator.cjs +10 -0
  19. package/src/elements/Discriminator.mjs +7 -0
  20. package/src/elements/Encoding.cjs +10 -0
  21. package/src/elements/Encoding.mjs +7 -0
  22. package/src/elements/Example.cjs +10 -0
  23. package/src/elements/Example.mjs +7 -0
  24. package/src/elements/ExternalDocumentation.cjs +10 -0
  25. package/src/elements/ExternalDocumentation.mjs +7 -0
  26. package/src/elements/Header.cjs +17 -0
  27. package/src/elements/Header.mjs +13 -0
  28. package/src/elements/Info.cjs +23 -0
  29. package/src/elements/Info.mjs +19 -0
  30. package/src/elements/JsonSchemaDialect.cjs +16 -0
  31. package/src/elements/JsonSchemaDialect.mjs +13 -0
  32. package/src/elements/License.cjs +17 -0
  33. package/src/elements/License.mjs +14 -0
  34. package/src/elements/Link.cjs +10 -0
  35. package/src/elements/Link.mjs +7 -0
  36. package/src/elements/MediaType.cjs +17 -0
  37. package/src/elements/MediaType.mjs +13 -0
  38. package/src/elements/OAuthFlow.cjs +10 -0
  39. package/src/elements/OAuthFlow.mjs +7 -0
  40. package/src/elements/OAuthFlows.cjs +10 -0
  41. package/src/elements/OAuthFlows.mjs +7 -0
  42. package/src/elements/OpenApi3-1.cjs +77 -0
  43. package/src/elements/OpenApi3-1.mjs +73 -0
  44. package/src/elements/Openapi.cjs +10 -0
  45. package/src/elements/Openapi.mjs +7 -0
  46. package/src/elements/Operation.cjs +17 -0
  47. package/src/elements/Operation.mjs +13 -0
  48. package/src/elements/Parameter.cjs +17 -0
  49. package/src/elements/Parameter.mjs +13 -0
  50. package/src/elements/PathItem.cjs +59 -0
  51. package/src/elements/PathItem.mjs +55 -0
  52. package/src/elements/Paths.cjs +10 -0
  53. package/src/elements/Paths.mjs +7 -0
  54. package/src/elements/Reference.cjs +28 -0
  55. package/src/elements/Reference.mjs +25 -0
  56. package/src/elements/RequestBody.cjs +10 -0
  57. package/src/elements/RequestBody.mjs +7 -0
  58. package/src/elements/Response.cjs +10 -0
  59. package/src/elements/Response.mjs +7 -0
  60. package/src/elements/Responses.cjs +10 -0
  61. package/src/elements/Responses.mjs +7 -0
  62. package/src/elements/Schema.cjs +50 -0
  63. package/src/elements/Schema.mjs +46 -0
  64. package/src/elements/SecurityRequirement.cjs +10 -0
  65. package/src/elements/SecurityRequirement.mjs +7 -0
  66. package/src/elements/SecurityScheme.cjs +10 -0
  67. package/src/elements/SecurityScheme.mjs +7 -0
  68. package/src/elements/Server.cjs +10 -0
  69. package/src/elements/Server.mjs +7 -0
  70. package/src/elements/ServerVariable.cjs +10 -0
  71. package/src/elements/ServerVariable.mjs +7 -0
  72. package/src/elements/Tag.cjs +10 -0
  73. package/src/elements/Tag.mjs +7 -0
  74. package/src/elements/Xml.cjs +10 -0
  75. package/src/elements/Xml.mjs +7 -0
  76. package/src/elements/nces/ComponentsPathItems.cjs +16 -0
  77. package/src/elements/nces/ComponentsPathItems.mjs +13 -0
  78. package/src/elements/nces/Webhooks.cjs +16 -0
  79. package/src/elements/nces/Webhooks.mjs +13 -0
  80. package/src/index.cjs +158 -0
  81. package/src/index.mjs +28 -0
  82. package/src/media-types.cjs +34 -0
  83. package/src/media-types.mjs +30 -0
  84. package/src/namespace.cjs +82 -0
  85. package/src/namespace.mjs +76 -0
  86. package/src/predicates.cjs +365 -0
  87. package/src/predicates.mjs +357 -0
  88. package/src/refractor/index.cjs +45 -0
  89. package/src/refractor/index.mjs +39 -0
  90. package/src/refractor/plugins/normalize-header-examples/NormalizeStorage.cjs +38 -0
  91. package/src/refractor/plugins/normalize-header-examples/NormalizeStorage.mjs +34 -0
  92. package/src/refractor/plugins/normalize-header-examples/index.cjs +105 -0
  93. package/src/refractor/plugins/normalize-header-examples/index.mjs +99 -0
  94. package/src/refractor/plugins/normalize-operation-ids.cjs +159 -0
  95. package/src/refractor/plugins/normalize-operation-ids.mjs +154 -0
  96. package/src/refractor/plugins/normalize-parameter-examples.cjs +105 -0
  97. package/src/refractor/plugins/normalize-parameter-examples.mjs +99 -0
  98. package/src/refractor/plugins/normalize-parameters.cjs +103 -0
  99. package/src/refractor/plugins/normalize-parameters.mjs +97 -0
  100. package/src/refractor/plugins/normalize-security-requirements.cjs +71 -0
  101. package/src/refractor/plugins/normalize-security-requirements.mjs +65 -0
  102. package/src/refractor/plugins/normalize-servers.cjs +118 -0
  103. package/src/refractor/plugins/normalize-servers.mjs +112 -0
  104. package/src/refractor/plugins/replace-empty-element.cjs +665 -0
  105. package/src/refractor/plugins/replace-empty-element.mjs +658 -0
  106. package/src/refractor/registration.cjs +102 -0
  107. package/src/refractor/registration.mjs +66 -0
  108. package/src/refractor/specification.cjs +492 -0
  109. package/src/refractor/specification.mjs +487 -0
  110. package/src/refractor/toolbox.cjs +70 -0
  111. package/src/refractor/toolbox.mjs +60 -0
  112. package/src/refractor/visitors/open-api-3-1/JsonSchemaDialectVisitor.cjs +25 -0
  113. package/src/refractor/visitors/open-api-3-1/JsonSchemaDialectVisitor.mjs +19 -0
  114. package/src/refractor/visitors/open-api-3-1/WebhooksVisitor.cjs +44 -0
  115. package/src/refractor/visitors/open-api-3-1/WebhooksVisitor.mjs +38 -0
  116. package/src/refractor/visitors/open-api-3-1/callback/index.cjs +37 -0
  117. package/src/refractor/visitors/open-api-3-1/callback/index.mjs +32 -0
  118. package/src/refractor/visitors/open-api-3-1/components/PathItemsVisitor.cjs +34 -0
  119. package/src/refractor/visitors/open-api-3-1/components/PathItemsVisitor.mjs +28 -0
  120. package/src/refractor/visitors/open-api-3-1/components/SchemasVisitor.cjs +22 -0
  121. package/src/refractor/visitors/open-api-3-1/components/SchemasVisitor.mjs +19 -0
  122. package/src/refractor/visitors/open-api-3-1/components/index.cjs +21 -0
  123. package/src/refractor/visitors/open-api-3-1/components/index.mjs +16 -0
  124. package/src/refractor/visitors/open-api-3-1/contact/index.cjs +21 -0
  125. package/src/refractor/visitors/open-api-3-1/contact/index.mjs +16 -0
  126. package/src/refractor/visitors/open-api-3-1/distriminator/index.cjs +22 -0
  127. package/src/refractor/visitors/open-api-3-1/distriminator/index.mjs +17 -0
  128. package/src/refractor/visitors/open-api-3-1/encoding/index.cjs +21 -0
  129. package/src/refractor/visitors/open-api-3-1/encoding/index.mjs +16 -0
  130. package/src/refractor/visitors/open-api-3-1/example/index.cjs +21 -0
  131. package/src/refractor/visitors/open-api-3-1/example/index.mjs +16 -0
  132. package/src/refractor/visitors/open-api-3-1/external-documentation/index.cjs +21 -0
  133. package/src/refractor/visitors/open-api-3-1/external-documentation/index.mjs +16 -0
  134. package/src/refractor/visitors/open-api-3-1/header/index.cjs +21 -0
  135. package/src/refractor/visitors/open-api-3-1/header/index.mjs +16 -0
  136. package/src/refractor/visitors/open-api-3-1/index.cjs +31 -0
  137. package/src/refractor/visitors/open-api-3-1/index.mjs +25 -0
  138. package/src/refractor/visitors/open-api-3-1/info/index.cjs +21 -0
  139. package/src/refractor/visitors/open-api-3-1/info/index.mjs +16 -0
  140. package/src/refractor/visitors/open-api-3-1/license/index.cjs +21 -0
  141. package/src/refractor/visitors/open-api-3-1/license/index.mjs +16 -0
  142. package/src/refractor/visitors/open-api-3-1/link/index.cjs +21 -0
  143. package/src/refractor/visitors/open-api-3-1/link/index.mjs +16 -0
  144. package/src/refractor/visitors/open-api-3-1/media-type/index.cjs +21 -0
  145. package/src/refractor/visitors/open-api-3-1/media-type/index.mjs +16 -0
  146. package/src/refractor/visitors/open-api-3-1/oauth-flow/index.cjs +21 -0
  147. package/src/refractor/visitors/open-api-3-1/oauth-flow/index.mjs +16 -0
  148. package/src/refractor/visitors/open-api-3-1/oauth-flows/index.cjs +21 -0
  149. package/src/refractor/visitors/open-api-3-1/oauth-flows/index.mjs +16 -0
  150. package/src/refractor/visitors/open-api-3-1/operation/index.cjs +21 -0
  151. package/src/refractor/visitors/open-api-3-1/operation/index.mjs +16 -0
  152. package/src/refractor/visitors/open-api-3-1/parameter/index.cjs +21 -0
  153. package/src/refractor/visitors/open-api-3-1/parameter/index.mjs +16 -0
  154. package/src/refractor/visitors/open-api-3-1/path-item/index.cjs +21 -0
  155. package/src/refractor/visitors/open-api-3-1/path-item/index.mjs +16 -0
  156. package/src/refractor/visitors/open-api-3-1/paths/index.cjs +21 -0
  157. package/src/refractor/visitors/open-api-3-1/paths/index.mjs +16 -0
  158. package/src/refractor/visitors/open-api-3-1/reference/index.cjs +21 -0
  159. package/src/refractor/visitors/open-api-3-1/reference/index.mjs +16 -0
  160. package/src/refractor/visitors/open-api-3-1/request-body/index.cjs +21 -0
  161. package/src/refractor/visitors/open-api-3-1/request-body/index.mjs +16 -0
  162. package/src/refractor/visitors/open-api-3-1/response/index.cjs +21 -0
  163. package/src/refractor/visitors/open-api-3-1/response/index.mjs +16 -0
  164. package/src/refractor/visitors/open-api-3-1/responses/index.cjs +21 -0
  165. package/src/refractor/visitors/open-api-3-1/responses/index.mjs +16 -0
  166. package/src/refractor/visitors/open-api-3-1/schema/$defsVisitor.cjs +19 -0
  167. package/src/refractor/visitors/open-api-3-1/schema/$defsVisitor.mjs +16 -0
  168. package/src/refractor/visitors/open-api-3-1/schema/AllOfVisitor.cjs +15 -0
  169. package/src/refractor/visitors/open-api-3-1/schema/AllOfVisitor.mjs +11 -0
  170. package/src/refractor/visitors/open-api-3-1/schema/AnyOfVisitor.cjs +15 -0
  171. package/src/refractor/visitors/open-api-3-1/schema/AnyOfVisitor.mjs +11 -0
  172. package/src/refractor/visitors/open-api-3-1/schema/DependentSchemasVisitor.cjs +15 -0
  173. package/src/refractor/visitors/open-api-3-1/schema/DependentSchemasVisitor.mjs +11 -0
  174. package/src/refractor/visitors/open-api-3-1/schema/OneOfVisitor.cjs +15 -0
  175. package/src/refractor/visitors/open-api-3-1/schema/OneOfVisitor.mjs +11 -0
  176. package/src/refractor/visitors/open-api-3-1/schema/PatternPropertiesVisitor.cjs +15 -0
  177. package/src/refractor/visitors/open-api-3-1/schema/PatternPropertiesVisitor.mjs +11 -0
  178. package/src/refractor/visitors/open-api-3-1/schema/PrefixItemsVisitor.cjs +15 -0
  179. package/src/refractor/visitors/open-api-3-1/schema/PrefixItemsVisitor.mjs +11 -0
  180. package/src/refractor/visitors/open-api-3-1/schema/PropertiesVisitor.cjs +15 -0
  181. package/src/refractor/visitors/open-api-3-1/schema/PropertiesVisitor.mjs +11 -0
  182. package/src/refractor/visitors/open-api-3-1/schema/index.cjs +75 -0
  183. package/src/refractor/visitors/open-api-3-1/schema/index.mjs +69 -0
  184. package/src/refractor/visitors/open-api-3-1/security-requirement/index.cjs +21 -0
  185. package/src/refractor/visitors/open-api-3-1/security-requirement/index.mjs +16 -0
  186. package/src/refractor/visitors/open-api-3-1/security-scheme/index.cjs +21 -0
  187. package/src/refractor/visitors/open-api-3-1/security-scheme/index.mjs +16 -0
  188. package/src/refractor/visitors/open-api-3-1/server/index.cjs +21 -0
  189. package/src/refractor/visitors/open-api-3-1/server/index.mjs +16 -0
  190. package/src/refractor/visitors/open-api-3-1/server-variable/index.cjs +21 -0
  191. package/src/refractor/visitors/open-api-3-1/server-variable/index.mjs +16 -0
  192. package/src/refractor/visitors/open-api-3-1/tag/index.cjs +21 -0
  193. package/src/refractor/visitors/open-api-3-1/tag/index.mjs +16 -0
  194. package/src/refractor/visitors/open-api-3-1/xml/index.cjs +21 -0
  195. package/src/refractor/visitors/open-api-3-1/xml/index.mjs +16 -0
  196. package/src/traversal/visitor.cjs +57 -0
  197. package/src/traversal/visitor.mjs +54 -0
  198. package/types/apidom-ns-openapi-3-1.d.ts +2745 -0
@@ -0,0 +1,357 @@
1
+ import { createPredicate, isBooleanElement, isStringElement, toValue } from '@speclynx/apidom-core';
2
+ import CallbackElement from "./elements/Callback.mjs";
3
+ import ComponentsElement from "./elements/Components.mjs";
4
+ import ContactElement from "./elements/Contact.mjs";
5
+ import ExampleElement from "./elements/Example.mjs";
6
+ import ExternalDocumentationElement from "./elements/ExternalDocumentation.mjs";
7
+ import HeaderElement from "./elements/Header.mjs";
8
+ import InfoElement from "./elements/Info.mjs";
9
+ import JsonSchemaDialectElement from "./elements/JsonSchemaDialect.mjs";
10
+ import LicenseElement from "./elements/License.mjs";
11
+ import LinkElement from "./elements/Link.mjs";
12
+ import OpenapiElement from "./elements/Openapi.mjs";
13
+ import OpenApi3_1Element from "./elements/OpenApi3-1.mjs";
14
+ import OperationElement from "./elements/Operation.mjs";
15
+ import ParameterElement from "./elements/Parameter.mjs";
16
+ import PathItemElement from "./elements/PathItem.mjs";
17
+ import PathsElement from "./elements/Paths.mjs";
18
+ import ReferenceElement from "./elements/Reference.mjs";
19
+ import RequestBodyElement from "./elements/RequestBody.mjs";
20
+ import ResponseElement from "./elements/Response.mjs";
21
+ import ResponsesElement from "./elements/Responses.mjs";
22
+ import SchemaElement from "./elements/Schema.mjs";
23
+ import SecurityRequirementElement from "./elements/SecurityRequirement.mjs";
24
+ import SecuritySchemeElement from "./elements/SecurityScheme.mjs";
25
+ import ServerElement from "./elements/Server.mjs";
26
+ import ServerVariableElement from "./elements/ServerVariable.mjs";
27
+ import MediaTypeElement from "./elements/MediaType.mjs";
28
+ /**
29
+ * @public
30
+ */
31
+ export const isCallbackElement = createPredicate(({
32
+ hasBasicElementProps,
33
+ isElementType,
34
+ primitiveEq
35
+ }) => {
36
+ return element => element instanceof CallbackElement || hasBasicElementProps(element) && isElementType('callback', element) && primitiveEq('object', element);
37
+ });
38
+
39
+ /**
40
+ * @public
41
+ */
42
+ export const isComponentsElement = createPredicate(({
43
+ hasBasicElementProps,
44
+ isElementType,
45
+ primitiveEq
46
+ }) => {
47
+ return element => element instanceof ComponentsElement || hasBasicElementProps(element) && isElementType('components', element) && primitiveEq('object', element);
48
+ });
49
+
50
+ /**
51
+ * @public
52
+ */
53
+ export const isContactElement = createPredicate(({
54
+ hasBasicElementProps,
55
+ isElementType,
56
+ primitiveEq
57
+ }) => {
58
+ return element => element instanceof ContactElement || hasBasicElementProps(element) && isElementType('contact', element) && primitiveEq('object', element);
59
+ });
60
+
61
+ /**
62
+ * @public
63
+ */
64
+ export const isExampleElement = createPredicate(({
65
+ hasBasicElementProps,
66
+ isElementType,
67
+ primitiveEq
68
+ }) => {
69
+ return element => element instanceof ExampleElement || hasBasicElementProps(element) && isElementType('example', element) && primitiveEq('object', element);
70
+ });
71
+
72
+ /**
73
+ * @public
74
+ */
75
+ export const isExternalDocumentationElement = createPredicate(({
76
+ hasBasicElementProps,
77
+ isElementType,
78
+ primitiveEq
79
+ }) => {
80
+ return element => element instanceof ExternalDocumentationElement || hasBasicElementProps(element) && isElementType('externalDocumentation', element) && primitiveEq('object', element);
81
+ });
82
+
83
+ /**
84
+ * @public
85
+ */
86
+ export const isHeaderElement = createPredicate(({
87
+ hasBasicElementProps,
88
+ isElementType,
89
+ primitiveEq
90
+ }) => {
91
+ return element => element instanceof HeaderElement || hasBasicElementProps(element) && isElementType('header', element) && primitiveEq('object', element);
92
+ });
93
+
94
+ /**
95
+ * @public
96
+ */
97
+ export const isInfoElement = createPredicate(({
98
+ hasBasicElementProps,
99
+ isElementType,
100
+ primitiveEq
101
+ }) => {
102
+ return element => element instanceof InfoElement || hasBasicElementProps(element) && isElementType('info', element) && primitiveEq('object', element);
103
+ });
104
+
105
+ /**
106
+ * @public
107
+ */
108
+ export const isJsonSchemaDialectElement = createPredicate(({
109
+ hasBasicElementProps,
110
+ isElementType,
111
+ primitiveEq
112
+ }) => {
113
+ return element => element instanceof JsonSchemaDialectElement || hasBasicElementProps(element) && isElementType('jsonSchemaDialect', element) && primitiveEq('string', element);
114
+ });
115
+
116
+ /**
117
+ * @public
118
+ */
119
+ export const isLicenseElement = createPredicate(({
120
+ hasBasicElementProps,
121
+ isElementType,
122
+ primitiveEq
123
+ }) => {
124
+ return element => element instanceof LicenseElement || hasBasicElementProps(element) && isElementType('license', element) && primitiveEq('object', element);
125
+ });
126
+
127
+ /**
128
+ * @public
129
+ */
130
+ export const isLinkElement = createPredicate(({
131
+ hasBasicElementProps,
132
+ isElementType,
133
+ primitiveEq
134
+ }) => {
135
+ return element => element instanceof LinkElement || hasBasicElementProps(element) && isElementType('link', element) && primitiveEq('object', element);
136
+ });
137
+
138
+ /**
139
+ * @public
140
+ */
141
+ export const isOpenapiElement = createPredicate(({
142
+ hasBasicElementProps,
143
+ isElementType,
144
+ primitiveEq
145
+ }) => {
146
+ return element => element instanceof OpenapiElement || hasBasicElementProps(element) && isElementType('openapi', element) && primitiveEq('string', element);
147
+ });
148
+
149
+ /**
150
+ * @public
151
+ */
152
+
153
+ export const isOpenApi3_1Element = createPredicate(({
154
+ hasBasicElementProps,
155
+ isElementType,
156
+ primitiveEq,
157
+ hasClass
158
+ }) => {
159
+ return element => element instanceof OpenApi3_1Element || hasBasicElementProps(element) && isElementType('openApi3_1', element) && primitiveEq('object', element) && hasClass('api', element);
160
+ });
161
+
162
+ /**
163
+ * @public
164
+ */
165
+ export const isOperationElement = createPredicate(({
166
+ hasBasicElementProps,
167
+ isElementType,
168
+ primitiveEq
169
+ }) => {
170
+ return element => element instanceof OperationElement || hasBasicElementProps(element) && isElementType('operation', element) && primitiveEq('object', element);
171
+ });
172
+
173
+ /**
174
+ * @public
175
+ */
176
+ export const isParameterElement = createPredicate(({
177
+ hasBasicElementProps,
178
+ isElementType,
179
+ primitiveEq
180
+ }) => {
181
+ return element => element instanceof ParameterElement || hasBasicElementProps(element) && isElementType('parameter', element) && primitiveEq('object', element);
182
+ });
183
+
184
+ /**
185
+ * @public
186
+ */
187
+ export const isPathItemElement = createPredicate(({
188
+ hasBasicElementProps,
189
+ isElementType,
190
+ primitiveEq
191
+ }) => {
192
+ return element => element instanceof PathItemElement || hasBasicElementProps(element) && isElementType('pathItem', element) && primitiveEq('object', element);
193
+ });
194
+
195
+ /**
196
+ * @deprecated
197
+ * Determining whether a PathItemElement is external or internal is not possible by just looking
198
+ * at value of the $ref fixed field. The value of the $ref field needs to be resolved in runtime
199
+ * using the referring document as the Base URI.
200
+ * @public
201
+ */
202
+ export const isPathItemElementExternal = element => {
203
+ if (!isPathItemElement(element)) {
204
+ return false;
205
+ }
206
+ if (!isStringElement(element.$ref)) {
207
+ return false;
208
+ }
209
+ const value = toValue(element.$ref);
210
+ return typeof value === 'string' && value.length > 0 && !value.startsWith('#');
211
+ };
212
+
213
+ /**
214
+ * @public
215
+ */
216
+ export const isPathsElement = createPredicate(({
217
+ hasBasicElementProps,
218
+ isElementType,
219
+ primitiveEq
220
+ }) => {
221
+ return element => element instanceof PathsElement || hasBasicElementProps(element) && isElementType('paths', element) && primitiveEq('object', element);
222
+ });
223
+
224
+ /**
225
+ * @public
226
+ */
227
+ export const isReferenceElement = createPredicate(({
228
+ hasBasicElementProps,
229
+ isElementType,
230
+ primitiveEq
231
+ }) => {
232
+ return element => element instanceof ReferenceElement || hasBasicElementProps(element) && isElementType('reference', element) && primitiveEq('object', element);
233
+ });
234
+
235
+ /**
236
+ * @deprecated
237
+ * Determining whether a ReferenceElement is external or internal is not possible by just looking
238
+ * at value of the $ref fixed field. The value of the $ref field needs to be resolved in runtime
239
+ * using the referring document as the Base URI.
240
+ * @public
241
+ */
242
+ export const isReferenceElementExternal = element => {
243
+ if (!isReferenceElement(element)) {
244
+ return false;
245
+ }
246
+ if (!isStringElement(element.$ref)) {
247
+ return false;
248
+ }
249
+ const value = toValue(element.$ref);
250
+ return typeof value === 'string' && value.length > 0 && !value.startsWith('#');
251
+ };
252
+
253
+ /**
254
+ * @public
255
+ */
256
+ export const isRequestBodyElement = createPredicate(({
257
+ hasBasicElementProps,
258
+ isElementType,
259
+ primitiveEq
260
+ }) => {
261
+ return element => element instanceof RequestBodyElement || hasBasicElementProps(element) && isElementType('requestBody', element) && primitiveEq('object', element);
262
+ });
263
+
264
+ /**
265
+ * @public
266
+ */
267
+ export const isResponseElement = createPredicate(({
268
+ hasBasicElementProps,
269
+ isElementType,
270
+ primitiveEq
271
+ }) => {
272
+ return element => element instanceof ResponseElement || hasBasicElementProps(element) && isElementType('response', element) && primitiveEq('object', element);
273
+ });
274
+
275
+ /**
276
+ * @public
277
+ */
278
+ export const isResponsesElement = createPredicate(({
279
+ hasBasicElementProps,
280
+ isElementType,
281
+ primitiveEq
282
+ }) => {
283
+ return element => element instanceof ResponsesElement || hasBasicElementProps(element) && isElementType('responses', element) && primitiveEq('object', element);
284
+ });
285
+
286
+ /**
287
+ * @public
288
+ */
289
+ export const isSchemaElement = createPredicate(({
290
+ hasBasicElementProps,
291
+ isElementType,
292
+ primitiveEq
293
+ }) => {
294
+ return element => element instanceof SchemaElement || hasBasicElementProps(element) && isElementType('schema', element) && primitiveEq('object', element);
295
+ });
296
+
297
+ /**
298
+ * @public
299
+ */
300
+ export const isBooleanJsonSchemaElement = element => {
301
+ return isBooleanElement(element) && element.classes.includes('boolean-json-schema');
302
+ };
303
+
304
+ /**
305
+ * @public
306
+ */
307
+ export const isSecurityRequirementElement = createPredicate(({
308
+ hasBasicElementProps,
309
+ isElementType,
310
+ primitiveEq
311
+ }) => {
312
+ return element => element instanceof SecurityRequirementElement || hasBasicElementProps(element) && isElementType('securityRequirement', element) && primitiveEq('object', element);
313
+ });
314
+
315
+ /**
316
+ * @public
317
+ */
318
+ export const isSecuritySchemeElement = createPredicate(({
319
+ hasBasicElementProps,
320
+ isElementType,
321
+ primitiveEq
322
+ }) => {
323
+ return element => element instanceof SecuritySchemeElement || hasBasicElementProps(element) && isElementType('securityScheme', element) && primitiveEq('object', element);
324
+ });
325
+
326
+ /**
327
+ * @public
328
+ */
329
+ export const isServerElement = createPredicate(({
330
+ hasBasicElementProps,
331
+ isElementType,
332
+ primitiveEq
333
+ }) => {
334
+ return element => element instanceof ServerElement || hasBasicElementProps(element) && isElementType('server', element) && primitiveEq('object', element);
335
+ });
336
+
337
+ /**
338
+ * @public
339
+ */
340
+ export const isServerVariableElement = createPredicate(({
341
+ hasBasicElementProps,
342
+ isElementType,
343
+ primitiveEq
344
+ }) => {
345
+ return element => element instanceof ServerVariableElement || hasBasicElementProps(element) && isElementType('serverVariable', element) && primitiveEq('object', element);
346
+ });
347
+
348
+ /**
349
+ * @public
350
+ */
351
+ export const isMediaTypeElement = createPredicate(({
352
+ hasBasicElementProps,
353
+ isElementType,
354
+ primitiveEq
355
+ }) => {
356
+ return element => element instanceof MediaTypeElement || hasBasicElementProps(element) && isElementType('mediaType', element) && primitiveEq('object', element);
357
+ });
@@ -0,0 +1,45 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault").default;
4
+ exports.__esModule = true;
5
+ exports.default = exports.createRefractor = void 0;
6
+ var _apidomCore = require("@speclynx/apidom-core");
7
+ var _ramda = require("ramda");
8
+ var _specification = _interopRequireDefault(require("./specification.cjs"));
9
+ var _visitor = require("../traversal/visitor.cjs");
10
+ var _toolbox = _interopRequireDefault(require("./toolbox.cjs"));
11
+ const refract = (value, {
12
+ specPath = ['visitors', 'document', 'objects', 'OpenApi', '$visitor'],
13
+ plugins = []
14
+ } = {}) => {
15
+ const element = (0, _apidomCore.refract)(value);
16
+ const resolvedSpec = (0, _apidomCore.dereference)(_specification.default);
17
+
18
+ /**
19
+ * This is where generic ApiDOM becomes semantic (namespace applied).
20
+ * We don't allow consumers to hook into this translation.
21
+ * Though we allow consumers to define their onw plugins on already transformed ApiDOM.
22
+ */
23
+ const RootVisitorClass = (0, _ramda.path)(specPath, resolvedSpec);
24
+ const rootVisitor = new RootVisitorClass({
25
+ specObj: resolvedSpec
26
+ });
27
+ (0, _apidomCore.visit)(element, rootVisitor);
28
+
29
+ /**
30
+ * Running plugins visitors means extra single traversal === performance hit.
31
+ */
32
+ return (0, _apidomCore.dispatchRefractorPlugins)(rootVisitor.element, plugins, {
33
+ toolboxCreator: _toolbox.default,
34
+ visitorOptions: {
35
+ keyMap: _visitor.keyMap,
36
+ nodeTypeGetter: _visitor.getNodeType
37
+ }
38
+ });
39
+ };
40
+ const createRefractor = specPath => (value, options = {}) => refract(value, {
41
+ specPath,
42
+ ...options
43
+ });
44
+ exports.createRefractor = createRefractor;
45
+ var _default = exports.default = refract;
@@ -0,0 +1,39 @@
1
+ import { visit, dereference, refract as baseRefract, dispatchRefractorPlugins } from '@speclynx/apidom-core';
2
+ import { path } from 'ramda';
3
+ import specification from "./specification.mjs";
4
+ import { keyMap, getNodeType } from "../traversal/visitor.mjs";
5
+ import createToolbox from "./toolbox.mjs";
6
+ const refract = (value, {
7
+ specPath = ['visitors', 'document', 'objects', 'OpenApi', '$visitor'],
8
+ plugins = []
9
+ } = {}) => {
10
+ const element = baseRefract(value);
11
+ const resolvedSpec = dereference(specification);
12
+
13
+ /**
14
+ * This is where generic ApiDOM becomes semantic (namespace applied).
15
+ * We don't allow consumers to hook into this translation.
16
+ * Though we allow consumers to define their onw plugins on already transformed ApiDOM.
17
+ */
18
+ const RootVisitorClass = path(specPath, resolvedSpec);
19
+ const rootVisitor = new RootVisitorClass({
20
+ specObj: resolvedSpec
21
+ });
22
+ visit(element, rootVisitor);
23
+
24
+ /**
25
+ * Running plugins visitors means extra single traversal === performance hit.
26
+ */
27
+ return dispatchRefractorPlugins(rootVisitor.element, plugins, {
28
+ toolboxCreator: createToolbox,
29
+ visitorOptions: {
30
+ keyMap,
31
+ nodeTypeGetter: getNodeType
32
+ }
33
+ });
34
+ };
35
+ export const createRefractor = specPath => (value, options = {}) => refract(value, {
36
+ specPath,
37
+ ...options
38
+ });
39
+ export default refract;
@@ -0,0 +1,38 @@
1
+ "use strict";
2
+
3
+ exports.__esModule = true;
4
+ exports.default = void 0;
5
+ var _apidomCore = require("@speclynx/apidom-core");
6
+ class NormalizeStorage {
7
+ internalStore;
8
+ constructor(storageElement, storageField, storageSubField) {
9
+ this.storageElement = storageElement;
10
+ this.storageField = storageField;
11
+ this.storageSubField = storageSubField;
12
+ }
13
+ get store() {
14
+ if (!this.internalStore) {
15
+ let rootStore = this.storageElement.get(this.storageField);
16
+ if (!(0, _apidomCore.isObjectElement)(rootStore)) {
17
+ rootStore = new _apidomCore.ObjectElement();
18
+ this.storageElement.set(this.storageField, rootStore);
19
+ }
20
+ let store = rootStore.get(this.storageSubField);
21
+ if (!(0, _apidomCore.isArrayElement)(store)) {
22
+ store = new _apidomCore.ArrayElement();
23
+ rootStore.set(this.storageSubField, store);
24
+ }
25
+ this.internalStore = store;
26
+ }
27
+ return this.internalStore;
28
+ }
29
+ append(pointer) {
30
+ if (!this.includes(pointer)) {
31
+ this.store.push(pointer);
32
+ }
33
+ }
34
+ includes(pointer) {
35
+ return this.store.includes(pointer);
36
+ }
37
+ }
38
+ var _default = exports.default = NormalizeStorage;
@@ -0,0 +1,34 @@
1
+ import { ArrayElement, ObjectElement, isObjectElement, isArrayElement } from '@speclynx/apidom-core';
2
+ class NormalizeStorage {
3
+ internalStore;
4
+ constructor(storageElement, storageField, storageSubField) {
5
+ this.storageElement = storageElement;
6
+ this.storageField = storageField;
7
+ this.storageSubField = storageSubField;
8
+ }
9
+ get store() {
10
+ if (!this.internalStore) {
11
+ let rootStore = this.storageElement.get(this.storageField);
12
+ if (!isObjectElement(rootStore)) {
13
+ rootStore = new ObjectElement();
14
+ this.storageElement.set(this.storageField, rootStore);
15
+ }
16
+ let store = rootStore.get(this.storageSubField);
17
+ if (!isArrayElement(store)) {
18
+ store = new ArrayElement();
19
+ rootStore.set(this.storageSubField, store);
20
+ }
21
+ this.internalStore = store;
22
+ }
23
+ return this.internalStore;
24
+ }
25
+ append(pointer) {
26
+ if (!this.includes(pointer)) {
27
+ this.store.push(pointer);
28
+ }
29
+ }
30
+ includes(pointer) {
31
+ return this.store.includes(pointer);
32
+ }
33
+ }
34
+ export default NormalizeStorage;
@@ -0,0 +1,105 @@
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 _NormalizeStorage = _interopRequireDefault(require("./NormalizeStorage.cjs"));
8
+ /**
9
+ * Override of Schema.example and Schema.examples field inside the Header Objects.
10
+ *
11
+ * Header Object has two fixed fields:
12
+ * - `example` of type `Any`
13
+ * - `examples` of type `Map[string, Example Object | Reference Object]`
14
+ *
15
+ * OpenAPI 3.1 specification excerpt that defines the override behavior:
16
+ *
17
+ * The example value SHALL override the example provided by the schema.
18
+ * Furthermore, if referencing a schema that contains an example, the examples value SHALL override the example provided by the schema.
19
+ *
20
+ * NOTE: this plugin is idempotent
21
+ * @public
22
+ */
23
+
24
+ /**
25
+ * @public
26
+ */
27
+ const plugin = ({
28
+ storageField = 'x-normalized'
29
+ } = {}) => toolbox => {
30
+ const {
31
+ predicates,
32
+ ancestorLineageToJSONPointer
33
+ } = toolbox;
34
+ let storage;
35
+ return {
36
+ visitor: {
37
+ OpenApi3_1Element: {
38
+ enter(element) {
39
+ storage = new _NormalizeStorage.default(element, storageField, 'header-examples');
40
+ },
41
+ leave() {
42
+ storage = undefined;
43
+ }
44
+ },
45
+ HeaderElement: {
46
+ leave(headerElement, key, parent, path, ancestors) {
47
+ // skip visiting this Header Object
48
+ if (ancestors.some(predicates.isComponentsElement)) {
49
+ return;
50
+ }
51
+
52
+ // no Header.schema field present
53
+ if (typeof headerElement.schema === 'undefined' || !predicates.isSchemaElement(headerElement.schema)) {
54
+ return;
55
+ }
56
+ // Schema contains no example
57
+ if (typeof headerElement.schema?.example === 'undefined' && typeof headerElement.schema?.examples === 'undefined') {
58
+ return;
59
+ }
60
+ const headerJSONPointer = ancestorLineageToJSONPointer([...ancestors, parent, headerElement]);
61
+
62
+ // skip visiting this Header Object if it's already normalized
63
+ if (storage.includes(headerJSONPointer)) {
64
+ return;
65
+ }
66
+
67
+ /**
68
+ * Header.examples and Schema.examples have preferences over the older
69
+ * and deprected `example` field.
70
+ */
71
+ if (typeof headerElement.examples !== 'undefined' && predicates.isObjectElement(headerElement.examples)) {
72
+ // @ts-ignore
73
+ const examples = headerElement.examples.map(example => {
74
+ return _apidomCore.cloneDeep.safe(example.value);
75
+ });
76
+ if (typeof headerElement.schema.examples !== 'undefined') {
77
+ headerElement.schema.set('examples', examples);
78
+ storage.append(headerJSONPointer);
79
+ }
80
+ if (typeof headerElement.schema.example !== 'undefined') {
81
+ headerElement.schema.set('example', examples[0]);
82
+ storage.append(headerJSONPointer);
83
+ }
84
+ return;
85
+ }
86
+
87
+ /**
88
+ * Handle deprecated `example` field.
89
+ */
90
+ if (typeof headerElement.example !== 'undefined') {
91
+ if (typeof headerElement.schema.examples !== 'undefined') {
92
+ headerElement.schema.set('examples', [(0, _apidomCore.cloneDeep)(headerElement.example)]);
93
+ storage.append(headerJSONPointer);
94
+ }
95
+ if (typeof headerElement.schema.example !== 'undefined') {
96
+ headerElement.schema.set('example', (0, _apidomCore.cloneDeep)(headerElement.example));
97
+ storage.append(headerJSONPointer);
98
+ }
99
+ }
100
+ }
101
+ }
102
+ }
103
+ };
104
+ };
105
+ var _default = exports.default = plugin;