@speclynx/apidom-ns-openapi-3-1 4.0.2 → 4.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +12 -0
- package/dist/apidom-ns-openapi-3-1.browser.js +6 -6
- package/dist/apidom-ns-openapi-3-1.browser.min.js +1 -1
- package/package.json +8 -8
- package/src/elements/Callback.cjs +10 -0
- package/src/elements/Callback.mjs +7 -0
- package/src/elements/Components.cjs +17 -0
- package/src/elements/Components.mjs +14 -0
- package/src/elements/Contact.cjs +10 -0
- package/src/elements/Contact.mjs +7 -0
- package/src/elements/Discriminator.cjs +10 -0
- package/src/elements/Discriminator.mjs +7 -0
- package/src/elements/Encoding.cjs +10 -0
- package/src/elements/Encoding.mjs +7 -0
- package/src/elements/Example.cjs +10 -0
- package/src/elements/Example.mjs +7 -0
- package/src/elements/ExternalDocumentation.cjs +10 -0
- package/src/elements/ExternalDocumentation.mjs +7 -0
- package/src/elements/Header.cjs +17 -0
- package/src/elements/Header.mjs +13 -0
- package/src/elements/Info.cjs +23 -0
- package/src/elements/Info.mjs +19 -0
- package/src/elements/JsonSchemaDialect.cjs +16 -0
- package/src/elements/JsonSchemaDialect.mjs +13 -0
- package/src/elements/License.cjs +17 -0
- package/src/elements/License.mjs +14 -0
- package/src/elements/Link.cjs +10 -0
- package/src/elements/Link.mjs +7 -0
- package/src/elements/MediaType.cjs +17 -0
- package/src/elements/MediaType.mjs +13 -0
- package/src/elements/OAuthFlow.cjs +10 -0
- package/src/elements/OAuthFlow.mjs +7 -0
- package/src/elements/OAuthFlows.cjs +10 -0
- package/src/elements/OAuthFlows.mjs +7 -0
- package/src/elements/OpenApi3-1.cjs +77 -0
- package/src/elements/OpenApi3-1.mjs +73 -0
- package/src/elements/Openapi.cjs +10 -0
- package/src/elements/Openapi.mjs +7 -0
- package/src/elements/Operation.cjs +17 -0
- package/src/elements/Operation.mjs +13 -0
- package/src/elements/Parameter.cjs +17 -0
- package/src/elements/Parameter.mjs +13 -0
- package/src/elements/PathItem.cjs +59 -0
- package/src/elements/PathItem.mjs +55 -0
- package/src/elements/Paths.cjs +10 -0
- package/src/elements/Paths.mjs +7 -0
- package/src/elements/Reference.cjs +28 -0
- package/src/elements/Reference.mjs +25 -0
- package/src/elements/RequestBody.cjs +10 -0
- package/src/elements/RequestBody.mjs +7 -0
- package/src/elements/Response.cjs +10 -0
- package/src/elements/Response.mjs +7 -0
- package/src/elements/Responses.cjs +10 -0
- package/src/elements/Responses.mjs +7 -0
- package/src/elements/Schema.cjs +50 -0
- package/src/elements/Schema.mjs +46 -0
- package/src/elements/SecurityRequirement.cjs +10 -0
- package/src/elements/SecurityRequirement.mjs +7 -0
- package/src/elements/SecurityScheme.cjs +10 -0
- package/src/elements/SecurityScheme.mjs +7 -0
- package/src/elements/Server.cjs +10 -0
- package/src/elements/Server.mjs +7 -0
- package/src/elements/ServerVariable.cjs +10 -0
- package/src/elements/ServerVariable.mjs +7 -0
- package/src/elements/Tag.cjs +10 -0
- package/src/elements/Tag.mjs +7 -0
- package/src/elements/Xml.cjs +10 -0
- package/src/elements/Xml.mjs +7 -0
- package/src/elements/nces/ComponentsPathItems.cjs +16 -0
- package/src/elements/nces/ComponentsPathItems.mjs +13 -0
- package/src/elements/nces/Webhooks.cjs +16 -0
- package/src/elements/nces/Webhooks.mjs +13 -0
- package/src/index.cjs +182 -0
- package/src/index.mjs +31 -0
- package/src/media-types.cjs +34 -0
- package/src/media-types.mjs +30 -0
- package/src/namespace.cjs +81 -0
- package/src/namespace.mjs +76 -0
- package/src/predicates.cjs +228 -0
- package/src/predicates.mjs +195 -0
- package/src/refractor/index.cjs +368 -0
- package/src/refractor/index.mjs +330 -0
- package/src/refractor/inspect.cjs +207 -0
- package/src/refractor/inspect.mjs +171 -0
- package/src/refractor/plugins/normalize-header-examples/NormalizeStorage.cjs +38 -0
- package/src/refractor/plugins/normalize-header-examples/NormalizeStorage.mjs +34 -0
- package/src/refractor/plugins/normalize-header-examples/index.cjs +109 -0
- package/src/refractor/plugins/normalize-header-examples/index.mjs +103 -0
- package/src/refractor/plugins/normalize-operation-ids.cjs +166 -0
- package/src/refractor/plugins/normalize-operation-ids.mjs +161 -0
- package/src/refractor/plugins/normalize-parameter-examples.cjs +109 -0
- package/src/refractor/plugins/normalize-parameter-examples.mjs +103 -0
- package/src/refractor/plugins/normalize-parameters.cjs +109 -0
- package/src/refractor/plugins/normalize-parameters.mjs +103 -0
- package/src/refractor/plugins/normalize-security-requirements.cjs +75 -0
- package/src/refractor/plugins/normalize-security-requirements.mjs +69 -0
- package/src/refractor/plugins/normalize-servers.cjs +124 -0
- package/src/refractor/plugins/normalize-servers.mjs +118 -0
- package/src/refractor/plugins/replace-empty-element.cjs +669 -0
- package/src/refractor/plugins/replace-empty-element.mjs +661 -0
- package/src/refractor/predicates.cjs +36 -0
- package/src/refractor/predicates.mjs +31 -0
- package/src/refractor/specification.cjs +531 -0
- package/src/refractor/specification.mjs +526 -0
- package/src/refractor/toolbox.cjs +61 -0
- package/src/refractor/toolbox.mjs +53 -0
- package/src/refractor/visitors/open-api-3-1/JsonSchemaDialectVisitor.cjs +25 -0
- package/src/refractor/visitors/open-api-3-1/JsonSchemaDialectVisitor.mjs +19 -0
- package/src/refractor/visitors/open-api-3-1/OpenapiVisitor.cjs +25 -0
- package/src/refractor/visitors/open-api-3-1/OpenapiVisitor.mjs +19 -0
- package/src/refractor/visitors/open-api-3-1/WebhooksVisitor.cjs +43 -0
- package/src/refractor/visitors/open-api-3-1/WebhooksVisitor.mjs +37 -0
- package/src/refractor/visitors/open-api-3-1/bases.cjs +46 -0
- package/src/refractor/visitors/open-api-3-1/bases.mjs +43 -0
- package/src/refractor/visitors/open-api-3-1/callback/index.cjs +36 -0
- package/src/refractor/visitors/open-api-3-1/callback/index.mjs +31 -0
- package/src/refractor/visitors/open-api-3-1/components/PathItemsVisitor.cjs +33 -0
- package/src/refractor/visitors/open-api-3-1/components/PathItemsVisitor.mjs +27 -0
- package/src/refractor/visitors/open-api-3-1/components/SchemasVisitor.cjs +22 -0
- package/src/refractor/visitors/open-api-3-1/components/SchemasVisitor.mjs +17 -0
- package/src/refractor/visitors/open-api-3-1/components/index.cjs +21 -0
- package/src/refractor/visitors/open-api-3-1/components/index.mjs +16 -0
- package/src/refractor/visitors/open-api-3-1/contact/index.cjs +21 -0
- package/src/refractor/visitors/open-api-3-1/contact/index.mjs +16 -0
- package/src/refractor/visitors/open-api-3-1/distriminator/index.cjs +22 -0
- package/src/refractor/visitors/open-api-3-1/distriminator/index.mjs +17 -0
- package/src/refractor/visitors/open-api-3-1/encoding/index.cjs +21 -0
- package/src/refractor/visitors/open-api-3-1/encoding/index.mjs +16 -0
- package/src/refractor/visitors/open-api-3-1/example/index.cjs +21 -0
- package/src/refractor/visitors/open-api-3-1/example/index.mjs +16 -0
- package/src/refractor/visitors/open-api-3-1/external-documentation/index.cjs +21 -0
- package/src/refractor/visitors/open-api-3-1/external-documentation/index.mjs +16 -0
- package/src/refractor/visitors/open-api-3-1/header/index.cjs +21 -0
- package/src/refractor/visitors/open-api-3-1/header/index.mjs +16 -0
- package/src/refractor/visitors/open-api-3-1/index.cjs +41 -0
- package/src/refractor/visitors/open-api-3-1/index.mjs +35 -0
- package/src/refractor/visitors/open-api-3-1/info/index.cjs +21 -0
- package/src/refractor/visitors/open-api-3-1/info/index.mjs +16 -0
- package/src/refractor/visitors/open-api-3-1/license/index.cjs +21 -0
- package/src/refractor/visitors/open-api-3-1/license/index.mjs +16 -0
- package/src/refractor/visitors/open-api-3-1/link/index.cjs +21 -0
- package/src/refractor/visitors/open-api-3-1/link/index.mjs +16 -0
- package/src/refractor/visitors/open-api-3-1/media-type/index.cjs +21 -0
- package/src/refractor/visitors/open-api-3-1/media-type/index.mjs +16 -0
- package/src/refractor/visitors/open-api-3-1/oauth-flow/index.cjs +21 -0
- package/src/refractor/visitors/open-api-3-1/oauth-flow/index.mjs +16 -0
- package/src/refractor/visitors/open-api-3-1/oauth-flows/index.cjs +21 -0
- package/src/refractor/visitors/open-api-3-1/oauth-flows/index.mjs +16 -0
- package/src/refractor/visitors/open-api-3-1/operation/index.cjs +21 -0
- package/src/refractor/visitors/open-api-3-1/operation/index.mjs +16 -0
- package/src/refractor/visitors/open-api-3-1/parameter/index.cjs +21 -0
- package/src/refractor/visitors/open-api-3-1/parameter/index.mjs +16 -0
- package/src/refractor/visitors/open-api-3-1/path-item/index.cjs +21 -0
- package/src/refractor/visitors/open-api-3-1/path-item/index.mjs +16 -0
- package/src/refractor/visitors/open-api-3-1/paths/index.cjs +21 -0
- package/src/refractor/visitors/open-api-3-1/paths/index.mjs +16 -0
- package/src/refractor/visitors/open-api-3-1/reference/index.cjs +21 -0
- package/src/refractor/visitors/open-api-3-1/reference/index.mjs +16 -0
- package/src/refractor/visitors/open-api-3-1/request-body/index.cjs +21 -0
- package/src/refractor/visitors/open-api-3-1/request-body/index.mjs +16 -0
- package/src/refractor/visitors/open-api-3-1/response/index.cjs +21 -0
- package/src/refractor/visitors/open-api-3-1/response/index.mjs +16 -0
- package/src/refractor/visitors/open-api-3-1/responses/index.cjs +21 -0
- package/src/refractor/visitors/open-api-3-1/responses/index.mjs +16 -0
- package/src/refractor/visitors/open-api-3-1/schema/$defsVisitor.cjs +19 -0
- package/src/refractor/visitors/open-api-3-1/schema/$defsVisitor.mjs +16 -0
- package/src/refractor/visitors/open-api-3-1/schema/AllOfVisitor.cjs +15 -0
- package/src/refractor/visitors/open-api-3-1/schema/AllOfVisitor.mjs +11 -0
- package/src/refractor/visitors/open-api-3-1/schema/AnyOfVisitor.cjs +15 -0
- package/src/refractor/visitors/open-api-3-1/schema/AnyOfVisitor.mjs +11 -0
- package/src/refractor/visitors/open-api-3-1/schema/DependentSchemasVisitor.cjs +15 -0
- package/src/refractor/visitors/open-api-3-1/schema/DependentSchemasVisitor.mjs +11 -0
- package/src/refractor/visitors/open-api-3-1/schema/OneOfVisitor.cjs +15 -0
- package/src/refractor/visitors/open-api-3-1/schema/OneOfVisitor.mjs +11 -0
- package/src/refractor/visitors/open-api-3-1/schema/PatternPropertiesVisitor.cjs +15 -0
- package/src/refractor/visitors/open-api-3-1/schema/PatternPropertiesVisitor.mjs +11 -0
- package/src/refractor/visitors/open-api-3-1/schema/PrefixItemsVisitor.cjs +15 -0
- package/src/refractor/visitors/open-api-3-1/schema/PrefixItemsVisitor.mjs +11 -0
- package/src/refractor/visitors/open-api-3-1/schema/PropertiesVisitor.cjs +15 -0
- package/src/refractor/visitors/open-api-3-1/schema/PropertiesVisitor.mjs +11 -0
- package/src/refractor/visitors/open-api-3-1/schema/index.cjs +76 -0
- package/src/refractor/visitors/open-api-3-1/schema/index.mjs +70 -0
- package/src/refractor/visitors/open-api-3-1/security-requirement/index.cjs +21 -0
- package/src/refractor/visitors/open-api-3-1/security-requirement/index.mjs +16 -0
- package/src/refractor/visitors/open-api-3-1/security-scheme/index.cjs +21 -0
- package/src/refractor/visitors/open-api-3-1/security-scheme/index.mjs +16 -0
- package/src/refractor/visitors/open-api-3-1/server/index.cjs +21 -0
- package/src/refractor/visitors/open-api-3-1/server/index.mjs +16 -0
- package/src/refractor/visitors/open-api-3-1/server-variable/index.cjs +21 -0
- package/src/refractor/visitors/open-api-3-1/server-variable/index.mjs +16 -0
- package/src/refractor/visitors/open-api-3-1/tag/index.cjs +21 -0
- package/src/refractor/visitors/open-api-3-1/tag/index.mjs +16 -0
- package/src/refractor/visitors/open-api-3-1/xml/index.cjs +21 -0
- package/src/refractor/visitors/open-api-3-1/xml/index.mjs +16 -0
|
@@ -0,0 +1,207 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault").default;
|
|
4
|
+
exports.__esModule = true;
|
|
5
|
+
var _apidomCore = require("@speclynx/apidom-core");
|
|
6
|
+
var _ramdaAdjunct = require("ramda-adjunct");
|
|
7
|
+
var _Callback = _interopRequireDefault(require("../elements/Callback.cjs"));
|
|
8
|
+
exports.CallbackElement = _Callback.default;
|
|
9
|
+
var _Components = _interopRequireDefault(require("../elements/Components.cjs"));
|
|
10
|
+
exports.ComponentsElement = _Components.default;
|
|
11
|
+
var _Contact = _interopRequireDefault(require("../elements/Contact.cjs"));
|
|
12
|
+
exports.ContactElement = _Contact.default;
|
|
13
|
+
var _Discriminator = _interopRequireDefault(require("../elements/Discriminator.cjs"));
|
|
14
|
+
exports.DiscriminatorElement = _Discriminator.default;
|
|
15
|
+
var _Encoding = _interopRequireDefault(require("../elements/Encoding.cjs"));
|
|
16
|
+
exports.EncodingElement = _Encoding.default;
|
|
17
|
+
var _Example = _interopRequireDefault(require("../elements/Example.cjs"));
|
|
18
|
+
exports.ExampleElement = _Example.default;
|
|
19
|
+
var _ExternalDocumentation = _interopRequireDefault(require("../elements/ExternalDocumentation.cjs"));
|
|
20
|
+
exports.ExternalDocumentationElement = _ExternalDocumentation.default;
|
|
21
|
+
var _Header = _interopRequireDefault(require("../elements/Header.cjs"));
|
|
22
|
+
exports.HeaderElement = _Header.default;
|
|
23
|
+
var _Info = _interopRequireDefault(require("../elements/Info.cjs"));
|
|
24
|
+
exports.InfoElement = _Info.default;
|
|
25
|
+
var _JsonSchemaDialect = _interopRequireDefault(require("../elements/JsonSchemaDialect.cjs"));
|
|
26
|
+
exports.JsonSchemaDialectElement = _JsonSchemaDialect.default;
|
|
27
|
+
var _License = _interopRequireDefault(require("../elements/License.cjs"));
|
|
28
|
+
exports.LicenseElement = _License.default;
|
|
29
|
+
var _Link = _interopRequireDefault(require("../elements/Link.cjs"));
|
|
30
|
+
exports.LinkElement = _Link.default;
|
|
31
|
+
var _MediaType = _interopRequireDefault(require("../elements/MediaType.cjs"));
|
|
32
|
+
exports.MediaTypeElement = _MediaType.default;
|
|
33
|
+
var _OAuthFlow = _interopRequireDefault(require("../elements/OAuthFlow.cjs"));
|
|
34
|
+
exports.OAuthFlowElement = _OAuthFlow.default;
|
|
35
|
+
var _OAuthFlows = _interopRequireDefault(require("../elements/OAuthFlows.cjs"));
|
|
36
|
+
exports.OAuthFlowsElement = _OAuthFlows.default;
|
|
37
|
+
var _Openapi = _interopRequireDefault(require("../elements/Openapi.cjs"));
|
|
38
|
+
exports.OpenapiElement = _Openapi.default;
|
|
39
|
+
var _OpenApi = _interopRequireDefault(require("../elements/OpenApi3-1.cjs"));
|
|
40
|
+
exports.OpenApi3_1Element = _OpenApi.default;
|
|
41
|
+
var _Operation = _interopRequireDefault(require("../elements/Operation.cjs"));
|
|
42
|
+
exports.OperationElement = _Operation.default;
|
|
43
|
+
var _Parameter = _interopRequireDefault(require("../elements/Parameter.cjs"));
|
|
44
|
+
exports.ParameterElement = _Parameter.default;
|
|
45
|
+
var _PathItem = _interopRequireDefault(require("../elements/PathItem.cjs"));
|
|
46
|
+
exports.PathItemElement = _PathItem.default;
|
|
47
|
+
var _Paths = _interopRequireDefault(require("../elements/Paths.cjs"));
|
|
48
|
+
exports.PathsElement = _Paths.default;
|
|
49
|
+
var _Reference = _interopRequireDefault(require("../elements/Reference.cjs"));
|
|
50
|
+
exports.ReferenceElement = _Reference.default;
|
|
51
|
+
var _RequestBody = _interopRequireDefault(require("../elements/RequestBody.cjs"));
|
|
52
|
+
exports.RequestBodyElement = _RequestBody.default;
|
|
53
|
+
var _Response = _interopRequireDefault(require("../elements/Response.cjs"));
|
|
54
|
+
exports.ResponseElement = _Response.default;
|
|
55
|
+
var _Responses = _interopRequireDefault(require("../elements/Responses.cjs"));
|
|
56
|
+
exports.ResponsesElement = _Responses.default;
|
|
57
|
+
var _Schema = _interopRequireDefault(require("../elements/Schema.cjs"));
|
|
58
|
+
exports.SchemaElement = _Schema.default;
|
|
59
|
+
var _SecurityRequirement = _interopRequireDefault(require("../elements/SecurityRequirement.cjs"));
|
|
60
|
+
exports.SecurityRequirementElement = _SecurityRequirement.default;
|
|
61
|
+
var _SecurityScheme = _interopRequireDefault(require("../elements/SecurityScheme.cjs"));
|
|
62
|
+
exports.SecuritySchemeElement = _SecurityScheme.default;
|
|
63
|
+
var _Server = _interopRequireDefault(require("../elements/Server.cjs"));
|
|
64
|
+
exports.ServerElement = _Server.default;
|
|
65
|
+
var _ServerVariable = _interopRequireDefault(require("../elements/ServerVariable.cjs"));
|
|
66
|
+
exports.ServerVariableElement = _ServerVariable.default;
|
|
67
|
+
var _Tag = _interopRequireDefault(require("../elements/Tag.cjs"));
|
|
68
|
+
exports.TagElement = _Tag.default;
|
|
69
|
+
var _Xml = _interopRequireDefault(require("../elements/Xml.cjs"));
|
|
70
|
+
exports.XmlElement = _Xml.default;
|
|
71
|
+
var _specification = _interopRequireDefault(require("./specification.cjs"));
|
|
72
|
+
/**
|
|
73
|
+
* OpenAPI 3.1 specification elements.
|
|
74
|
+
*/
|
|
75
|
+
|
|
76
|
+
/**
|
|
77
|
+
* @public
|
|
78
|
+
*/
|
|
79
|
+
|
|
80
|
+
// Resolve specification to dereference $ref pointers
|
|
81
|
+
const resolvedSpec = (0, _apidomCore.resolveSpecification)(_specification.default);
|
|
82
|
+
|
|
83
|
+
// Extract fixed fields as list of { name, alias?, $visitor }
|
|
84
|
+
const getFixedFields = fixedFieldsSpec => {
|
|
85
|
+
return Object.entries(fixedFieldsSpec).map(([name, fieldSpec]) => {
|
|
86
|
+
if ((0, _ramdaAdjunct.isPlainObject)(fieldSpec)) {
|
|
87
|
+
return {
|
|
88
|
+
name,
|
|
89
|
+
...fieldSpec
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
return {
|
|
93
|
+
name,
|
|
94
|
+
$visitor: fieldSpec
|
|
95
|
+
};
|
|
96
|
+
});
|
|
97
|
+
};
|
|
98
|
+
|
|
99
|
+
// OpenAPI 3.1 specification elements
|
|
100
|
+
Object.defineProperty(_OpenApi.default, 'fixedFields', {
|
|
101
|
+
get: () => getFixedFields(resolvedSpec.visitors.document.objects.OpenApi.fixedFields),
|
|
102
|
+
enumerable: true
|
|
103
|
+
});
|
|
104
|
+
Object.defineProperty(_Info.default, 'fixedFields', {
|
|
105
|
+
get: () => getFixedFields(resolvedSpec.visitors.document.objects.Info.fixedFields),
|
|
106
|
+
enumerable: true
|
|
107
|
+
});
|
|
108
|
+
Object.defineProperty(_Contact.default, 'fixedFields', {
|
|
109
|
+
get: () => getFixedFields(resolvedSpec.visitors.document.objects.Contact.fixedFields),
|
|
110
|
+
enumerable: true
|
|
111
|
+
});
|
|
112
|
+
Object.defineProperty(_License.default, 'fixedFields', {
|
|
113
|
+
get: () => getFixedFields(resolvedSpec.visitors.document.objects.License.fixedFields),
|
|
114
|
+
enumerable: true
|
|
115
|
+
});
|
|
116
|
+
Object.defineProperty(_Server.default, 'fixedFields', {
|
|
117
|
+
get: () => getFixedFields(resolvedSpec.visitors.document.objects.Server.fixedFields),
|
|
118
|
+
enumerable: true
|
|
119
|
+
});
|
|
120
|
+
Object.defineProperty(_ServerVariable.default, 'fixedFields', {
|
|
121
|
+
get: () => getFixedFields(resolvedSpec.visitors.document.objects.ServerVariable.fixedFields),
|
|
122
|
+
enumerable: true
|
|
123
|
+
});
|
|
124
|
+
Object.defineProperty(_Components.default, 'fixedFields', {
|
|
125
|
+
get: () => getFixedFields(resolvedSpec.visitors.document.objects.Components.fixedFields),
|
|
126
|
+
enumerable: true
|
|
127
|
+
});
|
|
128
|
+
Object.defineProperty(_PathItem.default, 'fixedFields', {
|
|
129
|
+
get: () => getFixedFields(resolvedSpec.visitors.document.objects.PathItem.fixedFields),
|
|
130
|
+
enumerable: true
|
|
131
|
+
});
|
|
132
|
+
Object.defineProperty(_Operation.default, 'fixedFields', {
|
|
133
|
+
get: () => getFixedFields(resolvedSpec.visitors.document.objects.Operation.fixedFields),
|
|
134
|
+
enumerable: true
|
|
135
|
+
});
|
|
136
|
+
Object.defineProperty(_ExternalDocumentation.default, 'fixedFields', {
|
|
137
|
+
get: () => getFixedFields(resolvedSpec.visitors.document.objects.ExternalDocumentation.fixedFields),
|
|
138
|
+
enumerable: true
|
|
139
|
+
});
|
|
140
|
+
Object.defineProperty(_Parameter.default, 'fixedFields', {
|
|
141
|
+
get: () => getFixedFields(resolvedSpec.visitors.document.objects.Parameter.fixedFields),
|
|
142
|
+
enumerable: true
|
|
143
|
+
});
|
|
144
|
+
Object.defineProperty(_RequestBody.default, 'fixedFields', {
|
|
145
|
+
get: () => getFixedFields(resolvedSpec.visitors.document.objects.RequestBody.fixedFields),
|
|
146
|
+
enumerable: true
|
|
147
|
+
});
|
|
148
|
+
Object.defineProperty(_MediaType.default, 'fixedFields', {
|
|
149
|
+
get: () => getFixedFields(resolvedSpec.visitors.document.objects.MediaType.fixedFields),
|
|
150
|
+
enumerable: true
|
|
151
|
+
});
|
|
152
|
+
Object.defineProperty(_Encoding.default, 'fixedFields', {
|
|
153
|
+
get: () => getFixedFields(resolvedSpec.visitors.document.objects.Encoding.fixedFields),
|
|
154
|
+
enumerable: true
|
|
155
|
+
});
|
|
156
|
+
Object.defineProperty(_Responses.default, 'fixedFields', {
|
|
157
|
+
get: () => getFixedFields(resolvedSpec.visitors.document.objects.Responses.fixedFields),
|
|
158
|
+
enumerable: true
|
|
159
|
+
});
|
|
160
|
+
Object.defineProperty(_Response.default, 'fixedFields', {
|
|
161
|
+
get: () => getFixedFields(resolvedSpec.visitors.document.objects.Response.fixedFields),
|
|
162
|
+
enumerable: true
|
|
163
|
+
});
|
|
164
|
+
Object.defineProperty(_Example.default, 'fixedFields', {
|
|
165
|
+
get: () => getFixedFields(resolvedSpec.visitors.document.objects.Example.fixedFields),
|
|
166
|
+
enumerable: true
|
|
167
|
+
});
|
|
168
|
+
Object.defineProperty(_Link.default, 'fixedFields', {
|
|
169
|
+
get: () => getFixedFields(resolvedSpec.visitors.document.objects.Link.fixedFields),
|
|
170
|
+
enumerable: true
|
|
171
|
+
});
|
|
172
|
+
Object.defineProperty(_Header.default, 'fixedFields', {
|
|
173
|
+
get: () => getFixedFields(resolvedSpec.visitors.document.objects.Header.fixedFields),
|
|
174
|
+
enumerable: true
|
|
175
|
+
});
|
|
176
|
+
Object.defineProperty(_Tag.default, 'fixedFields', {
|
|
177
|
+
get: () => getFixedFields(resolvedSpec.visitors.document.objects.Tag.fixedFields),
|
|
178
|
+
enumerable: true
|
|
179
|
+
});
|
|
180
|
+
Object.defineProperty(_Reference.default, 'fixedFields', {
|
|
181
|
+
get: () => getFixedFields(resolvedSpec.visitors.document.objects.Reference.fixedFields),
|
|
182
|
+
enumerable: true
|
|
183
|
+
});
|
|
184
|
+
Object.defineProperty(_Schema.default, 'fixedFields', {
|
|
185
|
+
get: () => getFixedFields(resolvedSpec.visitors.document.objects.Schema.fixedFields),
|
|
186
|
+
enumerable: true
|
|
187
|
+
});
|
|
188
|
+
Object.defineProperty(_Discriminator.default, 'fixedFields', {
|
|
189
|
+
get: () => getFixedFields(resolvedSpec.visitors.document.objects.Discriminator.fixedFields),
|
|
190
|
+
enumerable: true
|
|
191
|
+
});
|
|
192
|
+
Object.defineProperty(_Xml.default, 'fixedFields', {
|
|
193
|
+
get: () => getFixedFields(resolvedSpec.visitors.document.objects.XML.fixedFields),
|
|
194
|
+
enumerable: true
|
|
195
|
+
});
|
|
196
|
+
Object.defineProperty(_SecurityScheme.default, 'fixedFields', {
|
|
197
|
+
get: () => getFixedFields(resolvedSpec.visitors.document.objects.SecurityScheme.fixedFields),
|
|
198
|
+
enumerable: true
|
|
199
|
+
});
|
|
200
|
+
Object.defineProperty(_OAuthFlows.default, 'fixedFields', {
|
|
201
|
+
get: () => getFixedFields(resolvedSpec.visitors.document.objects.OAuthFlows.fixedFields),
|
|
202
|
+
enumerable: true
|
|
203
|
+
});
|
|
204
|
+
Object.defineProperty(_OAuthFlow.default, 'fixedFields', {
|
|
205
|
+
get: () => getFixedFields(resolvedSpec.visitors.document.objects.OAuthFlow.fixedFields),
|
|
206
|
+
enumerable: true
|
|
207
|
+
});
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
import { resolveSpecification } from '@speclynx/apidom-core';
|
|
2
|
+
import { isPlainObject } from 'ramda-adjunct';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* OpenAPI 3.1 specification elements.
|
|
6
|
+
*/
|
|
7
|
+
import CallbackElement from "../elements/Callback.mjs";
|
|
8
|
+
import ComponentsElement from "../elements/Components.mjs";
|
|
9
|
+
import ContactElement from "../elements/Contact.mjs";
|
|
10
|
+
import DiscriminatorElement from "../elements/Discriminator.mjs";
|
|
11
|
+
import EncodingElement from "../elements/Encoding.mjs";
|
|
12
|
+
import ExampleElement from "../elements/Example.mjs";
|
|
13
|
+
import ExternalDocumentationElement from "../elements/ExternalDocumentation.mjs";
|
|
14
|
+
import HeaderElement from "../elements/Header.mjs";
|
|
15
|
+
import InfoElement from "../elements/Info.mjs";
|
|
16
|
+
import JsonSchemaDialectElement from "../elements/JsonSchemaDialect.mjs";
|
|
17
|
+
import LicenseElement from "../elements/License.mjs";
|
|
18
|
+
import LinkElement from "../elements/Link.mjs";
|
|
19
|
+
import MediaTypeElement from "../elements/MediaType.mjs";
|
|
20
|
+
import OAuthFlowElement from "../elements/OAuthFlow.mjs";
|
|
21
|
+
import OAuthFlowsElement from "../elements/OAuthFlows.mjs";
|
|
22
|
+
import OpenapiElement from "../elements/Openapi.mjs";
|
|
23
|
+
import OpenApi3_1Element from "../elements/OpenApi3-1.mjs";
|
|
24
|
+
import OperationElement from "../elements/Operation.mjs";
|
|
25
|
+
import ParameterElement from "../elements/Parameter.mjs";
|
|
26
|
+
import PathItemElement from "../elements/PathItem.mjs";
|
|
27
|
+
import PathsElement from "../elements/Paths.mjs";
|
|
28
|
+
import ReferenceElement from "../elements/Reference.mjs";
|
|
29
|
+
import RequestBodyElement from "../elements/RequestBody.mjs";
|
|
30
|
+
import ResponseElement from "../elements/Response.mjs";
|
|
31
|
+
import ResponsesElement from "../elements/Responses.mjs";
|
|
32
|
+
import SchemaElement from "../elements/Schema.mjs";
|
|
33
|
+
import SecurityRequirementElement from "../elements/SecurityRequirement.mjs";
|
|
34
|
+
import SecuritySchemeElement from "../elements/SecurityScheme.mjs";
|
|
35
|
+
import ServerElement from "../elements/Server.mjs";
|
|
36
|
+
import ServerVariableElement from "../elements/ServerVariable.mjs";
|
|
37
|
+
import TagElement from "../elements/Tag.mjs";
|
|
38
|
+
import XmlElement from "../elements/Xml.mjs";
|
|
39
|
+
import specification from "./specification.mjs";
|
|
40
|
+
/**
|
|
41
|
+
* @public
|
|
42
|
+
*/
|
|
43
|
+
// Resolve specification to dereference $ref pointers
|
|
44
|
+
const resolvedSpec = resolveSpecification(specification);
|
|
45
|
+
|
|
46
|
+
// Extract fixed fields as list of { name, alias?, $visitor }
|
|
47
|
+
const getFixedFields = fixedFieldsSpec => {
|
|
48
|
+
return Object.entries(fixedFieldsSpec).map(([name, fieldSpec]) => {
|
|
49
|
+
if (isPlainObject(fieldSpec)) {
|
|
50
|
+
return {
|
|
51
|
+
name,
|
|
52
|
+
...fieldSpec
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
return {
|
|
56
|
+
name,
|
|
57
|
+
$visitor: fieldSpec
|
|
58
|
+
};
|
|
59
|
+
});
|
|
60
|
+
};
|
|
61
|
+
|
|
62
|
+
// OpenAPI 3.1 specification elements
|
|
63
|
+
Object.defineProperty(OpenApi3_1Element, 'fixedFields', {
|
|
64
|
+
get: () => getFixedFields(resolvedSpec.visitors.document.objects.OpenApi.fixedFields),
|
|
65
|
+
enumerable: true
|
|
66
|
+
});
|
|
67
|
+
Object.defineProperty(InfoElement, 'fixedFields', {
|
|
68
|
+
get: () => getFixedFields(resolvedSpec.visitors.document.objects.Info.fixedFields),
|
|
69
|
+
enumerable: true
|
|
70
|
+
});
|
|
71
|
+
Object.defineProperty(ContactElement, 'fixedFields', {
|
|
72
|
+
get: () => getFixedFields(resolvedSpec.visitors.document.objects.Contact.fixedFields),
|
|
73
|
+
enumerable: true
|
|
74
|
+
});
|
|
75
|
+
Object.defineProperty(LicenseElement, 'fixedFields', {
|
|
76
|
+
get: () => getFixedFields(resolvedSpec.visitors.document.objects.License.fixedFields),
|
|
77
|
+
enumerable: true
|
|
78
|
+
});
|
|
79
|
+
Object.defineProperty(ServerElement, 'fixedFields', {
|
|
80
|
+
get: () => getFixedFields(resolvedSpec.visitors.document.objects.Server.fixedFields),
|
|
81
|
+
enumerable: true
|
|
82
|
+
});
|
|
83
|
+
Object.defineProperty(ServerVariableElement, 'fixedFields', {
|
|
84
|
+
get: () => getFixedFields(resolvedSpec.visitors.document.objects.ServerVariable.fixedFields),
|
|
85
|
+
enumerable: true
|
|
86
|
+
});
|
|
87
|
+
Object.defineProperty(ComponentsElement, 'fixedFields', {
|
|
88
|
+
get: () => getFixedFields(resolvedSpec.visitors.document.objects.Components.fixedFields),
|
|
89
|
+
enumerable: true
|
|
90
|
+
});
|
|
91
|
+
Object.defineProperty(PathItemElement, 'fixedFields', {
|
|
92
|
+
get: () => getFixedFields(resolvedSpec.visitors.document.objects.PathItem.fixedFields),
|
|
93
|
+
enumerable: true
|
|
94
|
+
});
|
|
95
|
+
Object.defineProperty(OperationElement, 'fixedFields', {
|
|
96
|
+
get: () => getFixedFields(resolvedSpec.visitors.document.objects.Operation.fixedFields),
|
|
97
|
+
enumerable: true
|
|
98
|
+
});
|
|
99
|
+
Object.defineProperty(ExternalDocumentationElement, 'fixedFields', {
|
|
100
|
+
get: () => getFixedFields(resolvedSpec.visitors.document.objects.ExternalDocumentation.fixedFields),
|
|
101
|
+
enumerable: true
|
|
102
|
+
});
|
|
103
|
+
Object.defineProperty(ParameterElement, 'fixedFields', {
|
|
104
|
+
get: () => getFixedFields(resolvedSpec.visitors.document.objects.Parameter.fixedFields),
|
|
105
|
+
enumerable: true
|
|
106
|
+
});
|
|
107
|
+
Object.defineProperty(RequestBodyElement, 'fixedFields', {
|
|
108
|
+
get: () => getFixedFields(resolvedSpec.visitors.document.objects.RequestBody.fixedFields),
|
|
109
|
+
enumerable: true
|
|
110
|
+
});
|
|
111
|
+
Object.defineProperty(MediaTypeElement, 'fixedFields', {
|
|
112
|
+
get: () => getFixedFields(resolvedSpec.visitors.document.objects.MediaType.fixedFields),
|
|
113
|
+
enumerable: true
|
|
114
|
+
});
|
|
115
|
+
Object.defineProperty(EncodingElement, 'fixedFields', {
|
|
116
|
+
get: () => getFixedFields(resolvedSpec.visitors.document.objects.Encoding.fixedFields),
|
|
117
|
+
enumerable: true
|
|
118
|
+
});
|
|
119
|
+
Object.defineProperty(ResponsesElement, 'fixedFields', {
|
|
120
|
+
get: () => getFixedFields(resolvedSpec.visitors.document.objects.Responses.fixedFields),
|
|
121
|
+
enumerable: true
|
|
122
|
+
});
|
|
123
|
+
Object.defineProperty(ResponseElement, 'fixedFields', {
|
|
124
|
+
get: () => getFixedFields(resolvedSpec.visitors.document.objects.Response.fixedFields),
|
|
125
|
+
enumerable: true
|
|
126
|
+
});
|
|
127
|
+
Object.defineProperty(ExampleElement, 'fixedFields', {
|
|
128
|
+
get: () => getFixedFields(resolvedSpec.visitors.document.objects.Example.fixedFields),
|
|
129
|
+
enumerable: true
|
|
130
|
+
});
|
|
131
|
+
Object.defineProperty(LinkElement, 'fixedFields', {
|
|
132
|
+
get: () => getFixedFields(resolvedSpec.visitors.document.objects.Link.fixedFields),
|
|
133
|
+
enumerable: true
|
|
134
|
+
});
|
|
135
|
+
Object.defineProperty(HeaderElement, 'fixedFields', {
|
|
136
|
+
get: () => getFixedFields(resolvedSpec.visitors.document.objects.Header.fixedFields),
|
|
137
|
+
enumerable: true
|
|
138
|
+
});
|
|
139
|
+
Object.defineProperty(TagElement, 'fixedFields', {
|
|
140
|
+
get: () => getFixedFields(resolvedSpec.visitors.document.objects.Tag.fixedFields),
|
|
141
|
+
enumerable: true
|
|
142
|
+
});
|
|
143
|
+
Object.defineProperty(ReferenceElement, 'fixedFields', {
|
|
144
|
+
get: () => getFixedFields(resolvedSpec.visitors.document.objects.Reference.fixedFields),
|
|
145
|
+
enumerable: true
|
|
146
|
+
});
|
|
147
|
+
Object.defineProperty(SchemaElement, 'fixedFields', {
|
|
148
|
+
get: () => getFixedFields(resolvedSpec.visitors.document.objects.Schema.fixedFields),
|
|
149
|
+
enumerable: true
|
|
150
|
+
});
|
|
151
|
+
Object.defineProperty(DiscriminatorElement, 'fixedFields', {
|
|
152
|
+
get: () => getFixedFields(resolvedSpec.visitors.document.objects.Discriminator.fixedFields),
|
|
153
|
+
enumerable: true
|
|
154
|
+
});
|
|
155
|
+
Object.defineProperty(XmlElement, 'fixedFields', {
|
|
156
|
+
get: () => getFixedFields(resolvedSpec.visitors.document.objects.XML.fixedFields),
|
|
157
|
+
enumerable: true
|
|
158
|
+
});
|
|
159
|
+
Object.defineProperty(SecuritySchemeElement, 'fixedFields', {
|
|
160
|
+
get: () => getFixedFields(resolvedSpec.visitors.document.objects.SecurityScheme.fixedFields),
|
|
161
|
+
enumerable: true
|
|
162
|
+
});
|
|
163
|
+
Object.defineProperty(OAuthFlowsElement, 'fixedFields', {
|
|
164
|
+
get: () => getFixedFields(resolvedSpec.visitors.document.objects.OAuthFlows.fixedFields),
|
|
165
|
+
enumerable: true
|
|
166
|
+
});
|
|
167
|
+
Object.defineProperty(OAuthFlowElement, 'fixedFields', {
|
|
168
|
+
get: () => getFixedFields(resolvedSpec.visitors.document.objects.OAuthFlow.fixedFields),
|
|
169
|
+
enumerable: true
|
|
170
|
+
});
|
|
171
|
+
export { CallbackElement, ComponentsElement, ContactElement, DiscriminatorElement, EncodingElement, ExampleElement, ExternalDocumentationElement, HeaderElement, InfoElement, JsonSchemaDialectElement, LicenseElement, LinkElement, MediaTypeElement, OAuthFlowElement, OAuthFlowsElement, OpenapiElement, OpenApi3_1Element, OperationElement, ParameterElement, PathItemElement, PathsElement, ReferenceElement, RequestBodyElement, ResponseElement, ResponsesElement, SchemaElement, SecurityRequirementElement, SecuritySchemeElement, ServerElement, ServerVariableElement, TagElement, XmlElement };
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
exports.__esModule = true;
|
|
4
|
+
exports.default = void 0;
|
|
5
|
+
var _apidomDatamodel = require("@speclynx/apidom-datamodel");
|
|
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, _apidomDatamodel.isObjectElement)(rootStore)) {
|
|
17
|
+
rootStore = new _apidomDatamodel.ObjectElement();
|
|
18
|
+
this.storageElement.set(this.storageField, rootStore);
|
|
19
|
+
}
|
|
20
|
+
let store = rootStore.get(this.storageSubField);
|
|
21
|
+
if (!(0, _apidomDatamodel.isArrayElement)(store)) {
|
|
22
|
+
store = new _apidomDatamodel.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-datamodel';
|
|
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,109 @@
|
|
|
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 _apidomDatamodel = require("@speclynx/apidom-datamodel");
|
|
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(path) {
|
|
39
|
+
const element = path.node;
|
|
40
|
+
storage = new _NormalizeStorage.default(element, storageField, 'header-examples');
|
|
41
|
+
},
|
|
42
|
+
leave() {
|
|
43
|
+
storage = undefined;
|
|
44
|
+
}
|
|
45
|
+
},
|
|
46
|
+
HeaderElement: {
|
|
47
|
+
leave(path) {
|
|
48
|
+
const headerElement = path.node;
|
|
49
|
+
const ancestors = path.getAncestorNodes().reverse(); // root to parent order
|
|
50
|
+
|
|
51
|
+
// skip visiting this Header Object
|
|
52
|
+
if (ancestors.some(predicates.isComponentsElement)) {
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
// no Header.schema field present
|
|
57
|
+
if (typeof headerElement.schema === 'undefined' || !predicates.isSchemaElement(headerElement.schema)) {
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
// Schema contains no example
|
|
61
|
+
if (typeof headerElement.schema?.example === 'undefined' && typeof headerElement.schema?.examples === 'undefined') {
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
const headerJSONPointer = ancestorLineageToJSONPointer([...ancestors, headerElement]);
|
|
65
|
+
|
|
66
|
+
// skip visiting this Header Object if it's already normalized
|
|
67
|
+
if (storage.includes(headerJSONPointer)) {
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
/**
|
|
72
|
+
* Header.examples and Schema.examples have preferences over the older
|
|
73
|
+
* and deprected `example` field.
|
|
74
|
+
*/
|
|
75
|
+
if (typeof headerElement.examples !== 'undefined' && predicates.isObjectElement(headerElement.examples)) {
|
|
76
|
+
// @ts-ignore
|
|
77
|
+
const examples = headerElement.examples.map(example => {
|
|
78
|
+
return _apidomDatamodel.cloneDeep.safe(example.value);
|
|
79
|
+
});
|
|
80
|
+
if (typeof headerElement.schema.examples !== 'undefined') {
|
|
81
|
+
headerElement.schema.set('examples', examples);
|
|
82
|
+
storage.append(headerJSONPointer);
|
|
83
|
+
}
|
|
84
|
+
if (typeof headerElement.schema.example !== 'undefined') {
|
|
85
|
+
headerElement.schema.set('example', examples[0]);
|
|
86
|
+
storage.append(headerJSONPointer);
|
|
87
|
+
}
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
/**
|
|
92
|
+
* Handle deprecated `example` field.
|
|
93
|
+
*/
|
|
94
|
+
if (typeof headerElement.example !== 'undefined') {
|
|
95
|
+
if (typeof headerElement.schema.examples !== 'undefined') {
|
|
96
|
+
headerElement.schema.set('examples', [(0, _apidomDatamodel.cloneDeep)(headerElement.example)]);
|
|
97
|
+
storage.append(headerJSONPointer);
|
|
98
|
+
}
|
|
99
|
+
if (typeof headerElement.schema.example !== 'undefined') {
|
|
100
|
+
headerElement.schema.set('example', (0, _apidomDatamodel.cloneDeep)(headerElement.example));
|
|
101
|
+
storage.append(headerJSONPointer);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
};
|
|
108
|
+
};
|
|
109
|
+
var _default = exports.default = plugin;
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
import { cloneDeep } from '@speclynx/apidom-datamodel';
|
|
2
|
+
import NormalizeStorage from "./NormalizeStorage.mjs";
|
|
3
|
+
/**
|
|
4
|
+
* Override of Schema.example and Schema.examples field inside the Header Objects.
|
|
5
|
+
*
|
|
6
|
+
* Header Object has two fixed fields:
|
|
7
|
+
* - `example` of type `Any`
|
|
8
|
+
* - `examples` of type `Map[string, Example Object | Reference Object]`
|
|
9
|
+
*
|
|
10
|
+
* OpenAPI 3.1 specification excerpt that defines the override behavior:
|
|
11
|
+
*
|
|
12
|
+
* The example value SHALL override the example provided by the schema.
|
|
13
|
+
* Furthermore, if referencing a schema that contains an example, the examples value SHALL override the example provided by the schema.
|
|
14
|
+
*
|
|
15
|
+
* NOTE: this plugin is idempotent
|
|
16
|
+
* @public
|
|
17
|
+
*/
|
|
18
|
+
/**
|
|
19
|
+
* @public
|
|
20
|
+
*/
|
|
21
|
+
const plugin = ({
|
|
22
|
+
storageField = 'x-normalized'
|
|
23
|
+
} = {}) => toolbox => {
|
|
24
|
+
const {
|
|
25
|
+
predicates,
|
|
26
|
+
ancestorLineageToJSONPointer
|
|
27
|
+
} = toolbox;
|
|
28
|
+
let storage;
|
|
29
|
+
return {
|
|
30
|
+
visitor: {
|
|
31
|
+
OpenApi3_1Element: {
|
|
32
|
+
enter(path) {
|
|
33
|
+
const element = path.node;
|
|
34
|
+
storage = new NormalizeStorage(element, storageField, 'header-examples');
|
|
35
|
+
},
|
|
36
|
+
leave() {
|
|
37
|
+
storage = undefined;
|
|
38
|
+
}
|
|
39
|
+
},
|
|
40
|
+
HeaderElement: {
|
|
41
|
+
leave(path) {
|
|
42
|
+
const headerElement = path.node;
|
|
43
|
+
const ancestors = path.getAncestorNodes().reverse(); // root to parent order
|
|
44
|
+
|
|
45
|
+
// skip visiting this Header Object
|
|
46
|
+
if (ancestors.some(predicates.isComponentsElement)) {
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
// no Header.schema field present
|
|
51
|
+
if (typeof headerElement.schema === 'undefined' || !predicates.isSchemaElement(headerElement.schema)) {
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
// Schema contains no example
|
|
55
|
+
if (typeof headerElement.schema?.example === 'undefined' && typeof headerElement.schema?.examples === 'undefined') {
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
const headerJSONPointer = ancestorLineageToJSONPointer([...ancestors, headerElement]);
|
|
59
|
+
|
|
60
|
+
// skip visiting this Header Object if it's already normalized
|
|
61
|
+
if (storage.includes(headerJSONPointer)) {
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* Header.examples and Schema.examples have preferences over the older
|
|
67
|
+
* and deprected `example` field.
|
|
68
|
+
*/
|
|
69
|
+
if (typeof headerElement.examples !== 'undefined' && predicates.isObjectElement(headerElement.examples)) {
|
|
70
|
+
// @ts-ignore
|
|
71
|
+
const examples = headerElement.examples.map(example => {
|
|
72
|
+
return cloneDeep.safe(example.value);
|
|
73
|
+
});
|
|
74
|
+
if (typeof headerElement.schema.examples !== 'undefined') {
|
|
75
|
+
headerElement.schema.set('examples', examples);
|
|
76
|
+
storage.append(headerJSONPointer);
|
|
77
|
+
}
|
|
78
|
+
if (typeof headerElement.schema.example !== 'undefined') {
|
|
79
|
+
headerElement.schema.set('example', examples[0]);
|
|
80
|
+
storage.append(headerJSONPointer);
|
|
81
|
+
}
|
|
82
|
+
return;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
/**
|
|
86
|
+
* Handle deprecated `example` field.
|
|
87
|
+
*/
|
|
88
|
+
if (typeof headerElement.example !== 'undefined') {
|
|
89
|
+
if (typeof headerElement.schema.examples !== 'undefined') {
|
|
90
|
+
headerElement.schema.set('examples', [cloneDeep(headerElement.example)]);
|
|
91
|
+
storage.append(headerJSONPointer);
|
|
92
|
+
}
|
|
93
|
+
if (typeof headerElement.schema.example !== 'undefined') {
|
|
94
|
+
headerElement.schema.set('example', cloneDeep(headerElement.example));
|
|
95
|
+
storage.append(headerJSONPointer);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
};
|
|
102
|
+
};
|
|
103
|
+
export default plugin;
|