@swagger-api/apidom-ns-openapi-3-1 0.68.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.
- package/CHANGELOG.md +398 -0
- package/LICENSES/Apache-2.0.txt +202 -0
- package/LICENSES/MIT.txt +9 -0
- package/NOTICE +57 -0
- package/README.md +468 -0
- package/cjs/elements/Callback.cjs +8 -0
- package/cjs/elements/Components.cjs +15 -0
- package/cjs/elements/Contact.cjs +8 -0
- package/cjs/elements/Discriminator.cjs +8 -0
- package/cjs/elements/Encoding.cjs +8 -0
- package/cjs/elements/Example.cjs +8 -0
- package/cjs/elements/ExternalDocumentation.cjs +8 -0
- package/cjs/elements/Header.cjs +15 -0
- package/cjs/elements/Info.cjs +21 -0
- package/cjs/elements/JsonSchemaDialect.cjs +14 -0
- package/cjs/elements/License.cjs +15 -0
- package/cjs/elements/Link.cjs +8 -0
- package/cjs/elements/MediaType.cjs +15 -0
- package/cjs/elements/OAuthFlow.cjs +8 -0
- package/cjs/elements/OAuthFlows.cjs +8 -0
- package/cjs/elements/OpenApi3-1.cjs +75 -0
- package/cjs/elements/Openapi.cjs +8 -0
- package/cjs/elements/Operation.cjs +15 -0
- package/cjs/elements/Parameter.cjs +15 -0
- package/cjs/elements/PathItem.cjs +57 -0
- package/cjs/elements/Paths.cjs +8 -0
- package/cjs/elements/Reference.cjs +26 -0
- package/cjs/elements/RequestBody.cjs +8 -0
- package/cjs/elements/Response.cjs +8 -0
- package/cjs/elements/Responses.cjs +8 -0
- package/cjs/elements/Schema.cjs +473 -0
- package/cjs/elements/SecurityRequirement.cjs +8 -0
- package/cjs/elements/SecurityScheme.cjs +8 -0
- package/cjs/elements/Server.cjs +8 -0
- package/cjs/elements/ServerVariable.cjs +8 -0
- package/cjs/elements/Tag.cjs +8 -0
- package/cjs/elements/Xml.cjs +8 -0
- package/cjs/elements/nces/ComponentsPathItems.cjs +14 -0
- package/cjs/elements/nces/Webhooks.cjs +14 -0
- package/cjs/index.cjs +151 -0
- package/cjs/media-types.cjs +24 -0
- package/cjs/namespace.cjs +80 -0
- package/cjs/predicates.cjs +271 -0
- package/cjs/refractor/index.cjs +48 -0
- package/cjs/refractor/plugins/normalize-header-examples.cjs +77 -0
- package/cjs/refractor/plugins/normalize-operation-ids.cjs +140 -0
- package/cjs/refractor/plugins/normalize-parameter-examples.cjs +77 -0
- package/cjs/refractor/plugins/normalize-parameters.cjs +77 -0
- package/cjs/refractor/plugins/normalize-security-requirements.cjs +53 -0
- package/cjs/refractor/plugins/normalize-servers.cjs +83 -0
- package/cjs/refractor/plugins/replace-empty-element.cjs +672 -0
- package/cjs/refractor/predicates.cjs +11 -0
- package/cjs/refractor/registration.cjs +102 -0
- package/cjs/refractor/specification.cjs +557 -0
- package/cjs/refractor/toolbox.cjs +26 -0
- package/cjs/refractor/visitors/open-api-3-1/JsonSchemaDialectVisitor.cjs +21 -0
- package/cjs/refractor/visitors/open-api-3-1/WebhooksVisitor.cjs +39 -0
- package/cjs/refractor/visitors/open-api-3-1/callback/index.cjs +44 -0
- package/cjs/refractor/visitors/open-api-3-1/components/PathItemsVisitor.cjs +32 -0
- package/cjs/refractor/visitors/open-api-3-1/components/SchemasVisitor.cjs +18 -0
- package/cjs/refractor/visitors/open-api-3-1/components/index.cjs +26 -0
- package/cjs/refractor/visitors/open-api-3-1/contact/index.cjs +26 -0
- package/cjs/refractor/visitors/open-api-3-1/distriminator/index.cjs +29 -0
- package/cjs/refractor/visitors/open-api-3-1/encoding/index.cjs +26 -0
- package/cjs/refractor/visitors/open-api-3-1/example/index.cjs +26 -0
- package/cjs/refractor/visitors/open-api-3-1/external-documentation/index.cjs +26 -0
- package/cjs/refractor/visitors/open-api-3-1/header/index.cjs +26 -0
- package/cjs/refractor/visitors/open-api-3-1/index.cjs +30 -0
- package/cjs/refractor/visitors/open-api-3-1/info/SummaryVisitor.cjs +8 -0
- package/cjs/refractor/visitors/open-api-3-1/info/index.cjs +26 -0
- package/cjs/refractor/visitors/open-api-3-1/license/IdentifierVisitor.cjs +8 -0
- package/cjs/refractor/visitors/open-api-3-1/license/index.cjs +26 -0
- package/cjs/refractor/visitors/open-api-3-1/link/index.cjs +26 -0
- package/cjs/refractor/visitors/open-api-3-1/media-type/index.cjs +26 -0
- package/cjs/refractor/visitors/open-api-3-1/oauth-flow/index.cjs +26 -0
- package/cjs/refractor/visitors/open-api-3-1/oauth-flows/index.cjs +26 -0
- package/cjs/refractor/visitors/open-api-3-1/operation/index.cjs +26 -0
- package/cjs/refractor/visitors/open-api-3-1/parameter/index.cjs +26 -0
- package/cjs/refractor/visitors/open-api-3-1/path-item/index.cjs +26 -0
- package/cjs/refractor/visitors/open-api-3-1/paths/index.cjs +26 -0
- package/cjs/refractor/visitors/open-api-3-1/reference/DescriptionVisitor.cjs +8 -0
- package/cjs/refractor/visitors/open-api-3-1/reference/SummaryVisitor.cjs +8 -0
- package/cjs/refractor/visitors/open-api-3-1/reference/index.cjs +26 -0
- package/cjs/refractor/visitors/open-api-3-1/request-body/index.cjs +26 -0
- package/cjs/refractor/visitors/open-api-3-1/response/index.cjs +26 -0
- package/cjs/refractor/visitors/open-api-3-1/responses/index.cjs +26 -0
- package/cjs/refractor/visitors/open-api-3-1/schema/$anchorVisitor.cjs +8 -0
- package/cjs/refractor/visitors/open-api-3-1/schema/$commentVisitor.cjs +8 -0
- package/cjs/refractor/visitors/open-api-3-1/schema/$defsVisitor.cjs +21 -0
- package/cjs/refractor/visitors/open-api-3-1/schema/$dynamicAnchorVisitor.cjs +8 -0
- package/cjs/refractor/visitors/open-api-3-1/schema/$dynamicRefVisitor.cjs +8 -0
- package/cjs/refractor/visitors/open-api-3-1/schema/$idVisitor.cjs +8 -0
- package/cjs/refractor/visitors/open-api-3-1/schema/$refVisitor.cjs +19 -0
- package/cjs/refractor/visitors/open-api-3-1/schema/$schemaVisitor.cjs +8 -0
- package/cjs/refractor/visitors/open-api-3-1/schema/$vocabularyVisitor.cjs +19 -0
- package/cjs/refractor/visitors/open-api-3-1/schema/AllOfVisitor.cjs +32 -0
- package/cjs/refractor/visitors/open-api-3-1/schema/AnyOfVisitor.cjs +32 -0
- package/cjs/refractor/visitors/open-api-3-1/schema/ConstVisitor.cjs +8 -0
- package/cjs/refractor/visitors/open-api-3-1/schema/ContentEncodingVisitor.cjs +8 -0
- package/cjs/refractor/visitors/open-api-3-1/schema/ContentMediaTypeVisitor.cjs +8 -0
- package/cjs/refractor/visitors/open-api-3-1/schema/DefaultVisitor.cjs +8 -0
- package/cjs/refractor/visitors/open-api-3-1/schema/DependentRequiredVisitor.cjs +19 -0
- package/cjs/refractor/visitors/open-api-3-1/schema/DependentSchemasVisitor.cjs +21 -0
- package/cjs/refractor/visitors/open-api-3-1/schema/DeprecatedVisitor.cjs +8 -0
- package/cjs/refractor/visitors/open-api-3-1/schema/DescriptionVisitor.cjs +8 -0
- package/cjs/refractor/visitors/open-api-3-1/schema/EnumVisitor.cjs +19 -0
- package/cjs/refractor/visitors/open-api-3-1/schema/ExampleVisitor.cjs +8 -0
- package/cjs/refractor/visitors/open-api-3-1/schema/ExamplesVisitor.cjs +19 -0
- package/cjs/refractor/visitors/open-api-3-1/schema/ExclusiveMaximumVisitor.cjs +8 -0
- package/cjs/refractor/visitors/open-api-3-1/schema/ExclusiveMinimumVisitor.cjs +8 -0
- package/cjs/refractor/visitors/open-api-3-1/schema/FormatVisitor.cjs +8 -0
- package/cjs/refractor/visitors/open-api-3-1/schema/MaxContainsVisitor.cjs +8 -0
- package/cjs/refractor/visitors/open-api-3-1/schema/MaxItemsVisitor.cjs +8 -0
- package/cjs/refractor/visitors/open-api-3-1/schema/MaxLengthVisitor.cjs +8 -0
- package/cjs/refractor/visitors/open-api-3-1/schema/MaxPropertiesVisitor.cjs +8 -0
- package/cjs/refractor/visitors/open-api-3-1/schema/MaximumVisitor.cjs +8 -0
- package/cjs/refractor/visitors/open-api-3-1/schema/MinContainsVisitor.cjs +8 -0
- package/cjs/refractor/visitors/open-api-3-1/schema/MinItemsVisitor.cjs +8 -0
- package/cjs/refractor/visitors/open-api-3-1/schema/MinLengthVisitor.cjs +8 -0
- package/cjs/refractor/visitors/open-api-3-1/schema/MinPropertiesVisitor.cjs +8 -0
- package/cjs/refractor/visitors/open-api-3-1/schema/MinimumVisitor.cjs +8 -0
- package/cjs/refractor/visitors/open-api-3-1/schema/MultipleOfVisitor.cjs +8 -0
- package/cjs/refractor/visitors/open-api-3-1/schema/OneOfVisitor.cjs +32 -0
- package/cjs/refractor/visitors/open-api-3-1/schema/ParentSchemaAwareVisitor.cjs +20 -0
- package/cjs/refractor/visitors/open-api-3-1/schema/PatternProperties.cjs +21 -0
- package/cjs/refractor/visitors/open-api-3-1/schema/PatternVisitor.cjs +8 -0
- package/cjs/refractor/visitors/open-api-3-1/schema/PrefixItemsVisitor.cjs +32 -0
- package/cjs/refractor/visitors/open-api-3-1/schema/PropertiesVisitor.cjs +22 -0
- package/cjs/refractor/visitors/open-api-3-1/schema/ReadOnlyVisitor.cjs +8 -0
- package/cjs/refractor/visitors/open-api-3-1/schema/RequiredVisitor.cjs +19 -0
- package/cjs/refractor/visitors/open-api-3-1/schema/TitleVisitor.cjs +8 -0
- package/cjs/refractor/visitors/open-api-3-1/schema/TypeVisitor.cjs +24 -0
- package/cjs/refractor/visitors/open-api-3-1/schema/UniqueItemsVisitor.cjs +8 -0
- package/cjs/refractor/visitors/open-api-3-1/schema/WriteOnlyVisitor.cjs +8 -0
- package/cjs/refractor/visitors/open-api-3-1/schema/index.cjs +100 -0
- package/cjs/refractor/visitors/open-api-3-1/security-requirement/index.cjs +26 -0
- package/cjs/refractor/visitors/open-api-3-1/security-scheme/index.cjs +26 -0
- package/cjs/refractor/visitors/open-api-3-1/server/index.cjs +26 -0
- package/cjs/refractor/visitors/open-api-3-1/server-variable/index.cjs +26 -0
- package/cjs/refractor/visitors/open-api-3-1/tag/index.cjs +26 -0
- package/cjs/refractor/visitors/open-api-3-1/xml/index.cjs +26 -0
- package/cjs/traversal/visitor.cjs +55 -0
- package/dist/apidom-ns-openapi-3-1.browser.js +46188 -0
- package/dist/apidom-ns-openapi-3-1.browser.min.js +1 -0
- package/es/elements/Callback.js +3 -0
- package/es/elements/Components.js +10 -0
- package/es/elements/Contact.js +3 -0
- package/es/elements/Discriminator.js +3 -0
- package/es/elements/Encoding.js +3 -0
- package/es/elements/Example.js +3 -0
- package/es/elements/ExternalDocumentation.js +3 -0
- package/es/elements/Header.js +10 -0
- package/es/elements/Info.js +16 -0
- package/es/elements/JsonSchemaDialect.js +10 -0
- package/es/elements/License.js +10 -0
- package/es/elements/Link.js +3 -0
- package/es/elements/MediaType.js +10 -0
- package/es/elements/OAuthFlow.js +3 -0
- package/es/elements/OAuthFlows.js +3 -0
- package/es/elements/OpenApi3-1.js +70 -0
- package/es/elements/Openapi.js +3 -0
- package/es/elements/Operation.js +10 -0
- package/es/elements/Parameter.js +10 -0
- package/es/elements/PathItem.js +52 -0
- package/es/elements/Paths.js +3 -0
- package/es/elements/Reference.js +21 -0
- package/es/elements/RequestBody.js +3 -0
- package/es/elements/Response.js +3 -0
- package/es/elements/Responses.js +3 -0
- package/es/elements/Schema.js +468 -0
- package/es/elements/SecurityRequirement.js +3 -0
- package/es/elements/SecurityScheme.js +3 -0
- package/es/elements/Server.js +3 -0
- package/es/elements/ServerVariable.js +3 -0
- package/es/elements/Tag.js +3 -0
- package/es/elements/Xml.js +3 -0
- package/es/elements/nces/ComponentsPathItems.js +10 -0
- package/es/elements/nces/Webhooks.js +10 -0
- package/es/index.js +19 -0
- package/es/media-types.js +18 -0
- package/es/namespace.js +73 -0
- package/es/predicates.js +237 -0
- package/es/refractor/index.js +43 -0
- package/es/refractor/plugins/normalize-header-examples.js +73 -0
- package/es/refractor/plugins/normalize-operation-ids.js +136 -0
- package/es/refractor/plugins/normalize-parameter-examples.js +73 -0
- package/es/refractor/plugins/normalize-parameters.js +73 -0
- package/es/refractor/plugins/normalize-security-requirements.js +49 -0
- package/es/refractor/plugins/normalize-servers.js +79 -0
- package/es/refractor/plugins/replace-empty-element.js +664 -0
- package/es/refractor/predicates.js +7 -0
- package/es/refractor/registration.js +66 -0
- package/es/refractor/specification.js +551 -0
- package/es/refractor/toolbox.js +20 -0
- package/es/refractor/visitors/open-api-3-1/JsonSchemaDialectVisitor.js +15 -0
- package/es/refractor/visitors/open-api-3-1/WebhooksVisitor.js +33 -0
- package/es/refractor/visitors/open-api-3-1/callback/index.js +38 -0
- package/es/refractor/visitors/open-api-3-1/components/PathItemsVisitor.js +26 -0
- package/es/refractor/visitors/open-api-3-1/components/SchemasVisitor.js +12 -0
- package/es/refractor/visitors/open-api-3-1/components/index.js +20 -0
- package/es/refractor/visitors/open-api-3-1/contact/index.js +20 -0
- package/es/refractor/visitors/open-api-3-1/distriminator/index.js +23 -0
- package/es/refractor/visitors/open-api-3-1/encoding/index.js +20 -0
- package/es/refractor/visitors/open-api-3-1/example/index.js +20 -0
- package/es/refractor/visitors/open-api-3-1/external-documentation/index.js +20 -0
- package/es/refractor/visitors/open-api-3-1/header/index.js +20 -0
- package/es/refractor/visitors/open-api-3-1/index.js +23 -0
- package/es/refractor/visitors/open-api-3-1/info/SummaryVisitor.js +3 -0
- package/es/refractor/visitors/open-api-3-1/info/index.js +20 -0
- package/es/refractor/visitors/open-api-3-1/license/IdentifierVisitor.js +3 -0
- package/es/refractor/visitors/open-api-3-1/license/index.js +20 -0
- package/es/refractor/visitors/open-api-3-1/link/index.js +20 -0
- package/es/refractor/visitors/open-api-3-1/media-type/index.js +20 -0
- package/es/refractor/visitors/open-api-3-1/oauth-flow/index.js +20 -0
- package/es/refractor/visitors/open-api-3-1/oauth-flows/index.js +20 -0
- package/es/refractor/visitors/open-api-3-1/operation/index.js +20 -0
- package/es/refractor/visitors/open-api-3-1/parameter/index.js +20 -0
- package/es/refractor/visitors/open-api-3-1/path-item/index.js +20 -0
- package/es/refractor/visitors/open-api-3-1/paths/index.js +20 -0
- package/es/refractor/visitors/open-api-3-1/reference/DescriptionVisitor.js +3 -0
- package/es/refractor/visitors/open-api-3-1/reference/SummaryVisitor.js +3 -0
- package/es/refractor/visitors/open-api-3-1/reference/index.js +20 -0
- package/es/refractor/visitors/open-api-3-1/request-body/index.js +20 -0
- package/es/refractor/visitors/open-api-3-1/response/index.js +20 -0
- package/es/refractor/visitors/open-api-3-1/responses/index.js +20 -0
- package/es/refractor/visitors/open-api-3-1/schema/$anchorVisitor.js +3 -0
- package/es/refractor/visitors/open-api-3-1/schema/$commentVisitor.js +3 -0
- package/es/refractor/visitors/open-api-3-1/schema/$defsVisitor.js +15 -0
- package/es/refractor/visitors/open-api-3-1/schema/$dynamicAnchorVisitor.js +3 -0
- package/es/refractor/visitors/open-api-3-1/schema/$dynamicRefVisitor.js +3 -0
- package/es/refractor/visitors/open-api-3-1/schema/$idVisitor.js +3 -0
- package/es/refractor/visitors/open-api-3-1/schema/$refVisitor.js +13 -0
- package/es/refractor/visitors/open-api-3-1/schema/$schemaVisitor.js +3 -0
- package/es/refractor/visitors/open-api-3-1/schema/$vocabularyVisitor.js +13 -0
- package/es/refractor/visitors/open-api-3-1/schema/AllOfVisitor.js +26 -0
- package/es/refractor/visitors/open-api-3-1/schema/AnyOfVisitor.js +26 -0
- package/es/refractor/visitors/open-api-3-1/schema/ConstVisitor.js +3 -0
- package/es/refractor/visitors/open-api-3-1/schema/ContentEncodingVisitor.js +3 -0
- package/es/refractor/visitors/open-api-3-1/schema/ContentMediaTypeVisitor.js +3 -0
- package/es/refractor/visitors/open-api-3-1/schema/DefaultVisitor.js +3 -0
- package/es/refractor/visitors/open-api-3-1/schema/DependentRequiredVisitor.js +13 -0
- package/es/refractor/visitors/open-api-3-1/schema/DependentSchemasVisitor.js +15 -0
- package/es/refractor/visitors/open-api-3-1/schema/DeprecatedVisitor.js +3 -0
- package/es/refractor/visitors/open-api-3-1/schema/DescriptionVisitor.js +3 -0
- package/es/refractor/visitors/open-api-3-1/schema/EnumVisitor.js +13 -0
- package/es/refractor/visitors/open-api-3-1/schema/ExampleVisitor.js +3 -0
- package/es/refractor/visitors/open-api-3-1/schema/ExamplesVisitor.js +13 -0
- package/es/refractor/visitors/open-api-3-1/schema/ExclusiveMaximumVisitor.js +3 -0
- package/es/refractor/visitors/open-api-3-1/schema/ExclusiveMinimumVisitor.js +3 -0
- package/es/refractor/visitors/open-api-3-1/schema/FormatVisitor.js +3 -0
- package/es/refractor/visitors/open-api-3-1/schema/MaxContainsVisitor.js +3 -0
- package/es/refractor/visitors/open-api-3-1/schema/MaxItemsVisitor.js +3 -0
- package/es/refractor/visitors/open-api-3-1/schema/MaxLengthVisitor.js +3 -0
- package/es/refractor/visitors/open-api-3-1/schema/MaxPropertiesVisitor.js +3 -0
- package/es/refractor/visitors/open-api-3-1/schema/MaximumVisitor.js +3 -0
- package/es/refractor/visitors/open-api-3-1/schema/MinContainsVisitor.js +3 -0
- package/es/refractor/visitors/open-api-3-1/schema/MinItemsVisitor.js +3 -0
- package/es/refractor/visitors/open-api-3-1/schema/MinLengthVisitor.js +3 -0
- package/es/refractor/visitors/open-api-3-1/schema/MinPropertiesVisitor.js +3 -0
- package/es/refractor/visitors/open-api-3-1/schema/MinimumVisitor.js +3 -0
- package/es/refractor/visitors/open-api-3-1/schema/MultipleOfVisitor.js +3 -0
- package/es/refractor/visitors/open-api-3-1/schema/OneOfVisitor.js +26 -0
- package/es/refractor/visitors/open-api-3-1/schema/ParentSchemaAwareVisitor.js +14 -0
- package/es/refractor/visitors/open-api-3-1/schema/PatternProperties.js +15 -0
- package/es/refractor/visitors/open-api-3-1/schema/PatternVisitor.js +3 -0
- package/es/refractor/visitors/open-api-3-1/schema/PrefixItemsVisitor.js +26 -0
- package/es/refractor/visitors/open-api-3-1/schema/PropertiesVisitor.js +16 -0
- package/es/refractor/visitors/open-api-3-1/schema/ReadOnlyVisitor.js +3 -0
- package/es/refractor/visitors/open-api-3-1/schema/RequiredVisitor.js +13 -0
- package/es/refractor/visitors/open-api-3-1/schema/TitleVisitor.js +3 -0
- package/es/refractor/visitors/open-api-3-1/schema/TypeVisitor.js +18 -0
- package/es/refractor/visitors/open-api-3-1/schema/UniqueItemsVisitor.js +3 -0
- package/es/refractor/visitors/open-api-3-1/schema/WriteOnlyVisitor.js +3 -0
- package/es/refractor/visitors/open-api-3-1/schema/index.js +94 -0
- package/es/refractor/visitors/open-api-3-1/security-requirement/index.js +20 -0
- package/es/refractor/visitors/open-api-3-1/security-scheme/index.js +20 -0
- package/es/refractor/visitors/open-api-3-1/server/index.js +20 -0
- package/es/refractor/visitors/open-api-3-1/server-variable/index.js +20 -0
- package/es/refractor/visitors/open-api-3-1/tag/index.js +20 -0
- package/es/refractor/visitors/open-api-3-1/xml/index.js +20 -0
- package/es/traversal/visitor.js +53 -0
- package/package.json +66 -0
- package/types/dist.d.ts +701 -0
package/es/predicates.js
ADDED
|
@@ -0,0 +1,237 @@
|
|
|
1
|
+
import { createPredicate, isBooleanElement, isStringElement } from '@swagger-api/apidom-core';
|
|
2
|
+
import CallbackElement from "./elements/Callback.js";
|
|
3
|
+
import ComponentsElement from "./elements/Components.js";
|
|
4
|
+
import ContactElement from "./elements/Contact.js";
|
|
5
|
+
import ExampleElement from "./elements/Example.js";
|
|
6
|
+
import ExternalDocumentationElement from "./elements/ExternalDocumentation.js";
|
|
7
|
+
import HeaderElement from "./elements/Header.js";
|
|
8
|
+
import InfoElement from "./elements/Info.js";
|
|
9
|
+
import JsonSchemaDialectElement from "./elements/JsonSchemaDialect.js";
|
|
10
|
+
import LicenseElement from "./elements/License.js";
|
|
11
|
+
import LinkElement from "./elements/Link.js";
|
|
12
|
+
import OpenapiElement from "./elements/Openapi.js";
|
|
13
|
+
import OpenApi3_1Element from "./elements/OpenApi3-1.js";
|
|
14
|
+
import OperationElement from "./elements/Operation.js";
|
|
15
|
+
import ParameterElement from "./elements/Parameter.js";
|
|
16
|
+
import PathItemElement from "./elements/PathItem.js";
|
|
17
|
+
import PathsElement from "./elements/Paths.js";
|
|
18
|
+
import ReferenceElement from "./elements/Reference.js";
|
|
19
|
+
import RequestBodyElement from "./elements/RequestBody.js";
|
|
20
|
+
import ResponseElement from "./elements/Response.js";
|
|
21
|
+
import ResponsesElement from "./elements/Responses.js";
|
|
22
|
+
import SchemaElement from "./elements/Schema.js";
|
|
23
|
+
import SecurityRequirementElement from "./elements/SecurityRequirement.js";
|
|
24
|
+
import ServerElement from "./elements/Server.js";
|
|
25
|
+
import ServerVariableElement from "./elements/ServerVariable.js";
|
|
26
|
+
import MediaTypeElement from "./elements/MediaType.js";
|
|
27
|
+
export const isCallbackElement = createPredicate(({
|
|
28
|
+
hasBasicElementProps,
|
|
29
|
+
isElementType,
|
|
30
|
+
primitiveEq
|
|
31
|
+
}) => {
|
|
32
|
+
return element => element instanceof CallbackElement || hasBasicElementProps(element) && isElementType('callback', element) && primitiveEq('object', element);
|
|
33
|
+
});
|
|
34
|
+
export const isComponentsElement = createPredicate(({
|
|
35
|
+
hasBasicElementProps,
|
|
36
|
+
isElementType,
|
|
37
|
+
primitiveEq
|
|
38
|
+
}) => {
|
|
39
|
+
return element => element instanceof ComponentsElement || hasBasicElementProps(element) && isElementType('components', element) && primitiveEq('object', element);
|
|
40
|
+
});
|
|
41
|
+
export const isContactElement = createPredicate(({
|
|
42
|
+
hasBasicElementProps,
|
|
43
|
+
isElementType,
|
|
44
|
+
primitiveEq
|
|
45
|
+
}) => {
|
|
46
|
+
return element => element instanceof ContactElement || hasBasicElementProps(element) && isElementType('contact', element) && primitiveEq('object', element);
|
|
47
|
+
});
|
|
48
|
+
export const isExampleElement = createPredicate(({
|
|
49
|
+
hasBasicElementProps,
|
|
50
|
+
isElementType,
|
|
51
|
+
primitiveEq
|
|
52
|
+
}) => {
|
|
53
|
+
return element => element instanceof ExampleElement || hasBasicElementProps(element) && isElementType('example', element) && primitiveEq('object', element);
|
|
54
|
+
});
|
|
55
|
+
export const isExternalDocumentationElement = createPredicate(({
|
|
56
|
+
hasBasicElementProps,
|
|
57
|
+
isElementType,
|
|
58
|
+
primitiveEq
|
|
59
|
+
}) => {
|
|
60
|
+
return element => element instanceof ExternalDocumentationElement || hasBasicElementProps(element) && isElementType('externalDocumentation', element) && primitiveEq('object', element);
|
|
61
|
+
});
|
|
62
|
+
export const isHeaderElement = createPredicate(({
|
|
63
|
+
hasBasicElementProps,
|
|
64
|
+
isElementType,
|
|
65
|
+
primitiveEq
|
|
66
|
+
}) => {
|
|
67
|
+
return element => element instanceof HeaderElement || hasBasicElementProps(element) && isElementType('header', element) && primitiveEq('object', element);
|
|
68
|
+
});
|
|
69
|
+
export const isInfoElement = createPredicate(({
|
|
70
|
+
hasBasicElementProps,
|
|
71
|
+
isElementType,
|
|
72
|
+
primitiveEq
|
|
73
|
+
}) => {
|
|
74
|
+
return element => element instanceof InfoElement || hasBasicElementProps(element) && isElementType('info', element) && primitiveEq('object', element);
|
|
75
|
+
});
|
|
76
|
+
export const isJsonSchemaDialectElement = createPredicate(({
|
|
77
|
+
hasBasicElementProps,
|
|
78
|
+
isElementType,
|
|
79
|
+
primitiveEq
|
|
80
|
+
}) => {
|
|
81
|
+
return element => element instanceof JsonSchemaDialectElement || hasBasicElementProps(element) && isElementType('jsonSchemaDialect', element) && primitiveEq('string', element);
|
|
82
|
+
});
|
|
83
|
+
export const isLicenseElement = createPredicate(({
|
|
84
|
+
hasBasicElementProps,
|
|
85
|
+
isElementType,
|
|
86
|
+
primitiveEq
|
|
87
|
+
}) => {
|
|
88
|
+
return element => element instanceof LicenseElement || hasBasicElementProps(element) && isElementType('license', element) && primitiveEq('object', element);
|
|
89
|
+
});
|
|
90
|
+
export const isLinkElement = createPredicate(({
|
|
91
|
+
hasBasicElementProps,
|
|
92
|
+
isElementType,
|
|
93
|
+
primitiveEq
|
|
94
|
+
}) => {
|
|
95
|
+
return element => element instanceof LinkElement || hasBasicElementProps(element) && isElementType('link', element) && primitiveEq('object', element);
|
|
96
|
+
});
|
|
97
|
+
export const isLinkElementExternal = element => {
|
|
98
|
+
if (!isLinkElement(element)) {
|
|
99
|
+
return false;
|
|
100
|
+
}
|
|
101
|
+
if (!isStringElement(element.operationRef)) {
|
|
102
|
+
return false;
|
|
103
|
+
}
|
|
104
|
+
const value = element.operationRef.toValue();
|
|
105
|
+
return typeof value === 'string' && value.length > 0 && !value.startsWith('#');
|
|
106
|
+
};
|
|
107
|
+
export const isOpenapiElement = createPredicate(({
|
|
108
|
+
hasBasicElementProps,
|
|
109
|
+
isElementType,
|
|
110
|
+
primitiveEq
|
|
111
|
+
}) => {
|
|
112
|
+
return element => element instanceof OpenapiElement || hasBasicElementProps(element) && isElementType('openapi', element) && primitiveEq('string', element);
|
|
113
|
+
});
|
|
114
|
+
|
|
115
|
+
// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
116
|
+
export const isOpenApi3_1Element = createPredicate(({
|
|
117
|
+
hasBasicElementProps,
|
|
118
|
+
isElementType,
|
|
119
|
+
primitiveEq,
|
|
120
|
+
hasClass
|
|
121
|
+
}) => {
|
|
122
|
+
return element => element instanceof OpenApi3_1Element || hasBasicElementProps(element) && isElementType('openApi3_1', element) && primitiveEq('object', element) && hasClass('api', element);
|
|
123
|
+
});
|
|
124
|
+
export const isOperationElement = createPredicate(({
|
|
125
|
+
hasBasicElementProps,
|
|
126
|
+
isElementType,
|
|
127
|
+
primitiveEq
|
|
128
|
+
}) => {
|
|
129
|
+
return element => element instanceof OperationElement || hasBasicElementProps(element) && isElementType('operation', element) && primitiveEq('object', element);
|
|
130
|
+
});
|
|
131
|
+
export const isParameterElement = createPredicate(({
|
|
132
|
+
hasBasicElementProps,
|
|
133
|
+
isElementType,
|
|
134
|
+
primitiveEq
|
|
135
|
+
}) => {
|
|
136
|
+
return element => element instanceof ParameterElement || hasBasicElementProps(element) && isElementType('parameter', element) && primitiveEq('object', element);
|
|
137
|
+
});
|
|
138
|
+
export const isPathItemElement = createPredicate(({
|
|
139
|
+
hasBasicElementProps,
|
|
140
|
+
isElementType,
|
|
141
|
+
primitiveEq
|
|
142
|
+
}) => {
|
|
143
|
+
return element => element instanceof PathItemElement || hasBasicElementProps(element) && isElementType('pathItem', element) && primitiveEq('object', element);
|
|
144
|
+
});
|
|
145
|
+
export const isPathItemElementExternal = element => {
|
|
146
|
+
if (!isPathItemElement(element)) {
|
|
147
|
+
return false;
|
|
148
|
+
}
|
|
149
|
+
if (!isStringElement(element.$ref)) {
|
|
150
|
+
return false;
|
|
151
|
+
}
|
|
152
|
+
const value = element.$ref.toValue();
|
|
153
|
+
return typeof value === 'string' && value.length > 0 && !value.startsWith('#');
|
|
154
|
+
};
|
|
155
|
+
export const isPathsElement = createPredicate(({
|
|
156
|
+
hasBasicElementProps,
|
|
157
|
+
isElementType,
|
|
158
|
+
primitiveEq
|
|
159
|
+
}) => {
|
|
160
|
+
return element => element instanceof PathsElement || hasBasicElementProps(element) && isElementType('paths', element) && primitiveEq('object', element);
|
|
161
|
+
});
|
|
162
|
+
export const isReferenceElement = createPredicate(({
|
|
163
|
+
hasBasicElementProps,
|
|
164
|
+
isElementType,
|
|
165
|
+
primitiveEq
|
|
166
|
+
}) => {
|
|
167
|
+
return element => element instanceof ReferenceElement || hasBasicElementProps(element) && isElementType('reference', element) && primitiveEq('object', element);
|
|
168
|
+
});
|
|
169
|
+
export const isReferenceElementExternal = element => {
|
|
170
|
+
if (!isReferenceElement(element)) {
|
|
171
|
+
return false;
|
|
172
|
+
}
|
|
173
|
+
if (!isStringElement(element.$ref)) {
|
|
174
|
+
return false;
|
|
175
|
+
}
|
|
176
|
+
const value = element.$ref.toValue();
|
|
177
|
+
return typeof value === 'string' && value.length > 0 && !value.startsWith('#');
|
|
178
|
+
};
|
|
179
|
+
export const isRequestBodyElement = createPredicate(({
|
|
180
|
+
hasBasicElementProps,
|
|
181
|
+
isElementType,
|
|
182
|
+
primitiveEq
|
|
183
|
+
}) => {
|
|
184
|
+
return element => element instanceof RequestBodyElement || hasBasicElementProps(element) && isElementType('requestBody', element) && primitiveEq('object', element);
|
|
185
|
+
});
|
|
186
|
+
export const isResponseElement = createPredicate(({
|
|
187
|
+
hasBasicElementProps,
|
|
188
|
+
isElementType,
|
|
189
|
+
primitiveEq
|
|
190
|
+
}) => {
|
|
191
|
+
return element => element instanceof ResponseElement || hasBasicElementProps(element) && isElementType('response', element) && primitiveEq('object', element);
|
|
192
|
+
});
|
|
193
|
+
export const isResponsesElement = createPredicate(({
|
|
194
|
+
hasBasicElementProps,
|
|
195
|
+
isElementType,
|
|
196
|
+
primitiveEq
|
|
197
|
+
}) => {
|
|
198
|
+
return element => element instanceof ResponsesElement || hasBasicElementProps(element) && isElementType('responses', element) && primitiveEq('object', element);
|
|
199
|
+
});
|
|
200
|
+
export const isSchemaElement = createPredicate(({
|
|
201
|
+
hasBasicElementProps,
|
|
202
|
+
isElementType,
|
|
203
|
+
primitiveEq
|
|
204
|
+
}) => {
|
|
205
|
+
return element => element instanceof SchemaElement || hasBasicElementProps(element) && isElementType('schema', element) && primitiveEq('object', element);
|
|
206
|
+
});
|
|
207
|
+
export const isBooleanJsonSchemaElement = element => {
|
|
208
|
+
return isBooleanElement(element) && element.classes.includes('boolean-json-schema');
|
|
209
|
+
};
|
|
210
|
+
export const isSecurityRequirementElement = createPredicate(({
|
|
211
|
+
hasBasicElementProps,
|
|
212
|
+
isElementType,
|
|
213
|
+
primitiveEq
|
|
214
|
+
}) => {
|
|
215
|
+
return element => element instanceof SecurityRequirementElement || hasBasicElementProps(element) && isElementType('securityRequirement', element) && primitiveEq('object', element);
|
|
216
|
+
});
|
|
217
|
+
export const isServerElement = createPredicate(({
|
|
218
|
+
hasBasicElementProps,
|
|
219
|
+
isElementType,
|
|
220
|
+
primitiveEq
|
|
221
|
+
}) => {
|
|
222
|
+
return element => element instanceof ServerElement || hasBasicElementProps(element) && isElementType('server', element) && primitiveEq('object', element);
|
|
223
|
+
});
|
|
224
|
+
export const isServerVariableElement = createPredicate(({
|
|
225
|
+
hasBasicElementProps,
|
|
226
|
+
isElementType,
|
|
227
|
+
primitiveEq
|
|
228
|
+
}) => {
|
|
229
|
+
return element => element instanceof ServerVariableElement || hasBasicElementProps(element) && isElementType('serverVariable', element) && primitiveEq('object', element);
|
|
230
|
+
});
|
|
231
|
+
export const isMediaTypeElement = createPredicate(({
|
|
232
|
+
hasBasicElementProps,
|
|
233
|
+
isElementType,
|
|
234
|
+
primitiveEq
|
|
235
|
+
}) => {
|
|
236
|
+
return element => element instanceof MediaTypeElement || hasBasicElementProps(element) && isElementType('mediaType', element) && primitiveEq('object', element);
|
|
237
|
+
});
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import _defineProperty from "@babel/runtime-corejs3/helpers/esm/defineProperty";
|
|
2
|
+
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
3
|
+
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
4
|
+
import { invokeArgs } from 'ramda-adjunct';
|
|
5
|
+
import { visit, dereference, refract as baseRefract, dispatchRefractorPlugins } from '@swagger-api/apidom-core';
|
|
6
|
+
import specification from "./specification.js";
|
|
7
|
+
import { keyMap, getNodeType } from "../traversal/visitor.js";
|
|
8
|
+
import createToolbox from "./toolbox.js";
|
|
9
|
+
const refract = (value, {
|
|
10
|
+
specPath = ['visitors', 'document', 'objects', 'OpenApi', '$visitor'],
|
|
11
|
+
plugins = []
|
|
12
|
+
} = {}) => {
|
|
13
|
+
const element = baseRefract(value);
|
|
14
|
+
const resolvedSpec = dereference(specification);
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* This is where generic ApiDOM becomes semantic (namespace applied).
|
|
18
|
+
* We don't allow consumers to hook into this translation.
|
|
19
|
+
* Though we allow consumers to define their onw plugins on already transformed ApiDOM.
|
|
20
|
+
*/
|
|
21
|
+
const rootVisitor = invokeArgs(specPath, [], resolvedSpec);
|
|
22
|
+
// @ts-ignore
|
|
23
|
+
visit(element, rootVisitor, {
|
|
24
|
+
state: {
|
|
25
|
+
specObj: resolvedSpec
|
|
26
|
+
}
|
|
27
|
+
});
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* Running plugins visitors means extra single traversal === performance hit.
|
|
31
|
+
*/
|
|
32
|
+
return dispatchRefractorPlugins(rootVisitor.element, plugins, {
|
|
33
|
+
toolboxCreator: createToolbox,
|
|
34
|
+
visitorOptions: {
|
|
35
|
+
keyMap,
|
|
36
|
+
nodeTypeGetter: getNodeType
|
|
37
|
+
}
|
|
38
|
+
});
|
|
39
|
+
};
|
|
40
|
+
export const createRefractor = specPath => (value, options = {}) => refract(value, _objectSpread({
|
|
41
|
+
specPath
|
|
42
|
+
}, options));
|
|
43
|
+
export default refract;
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Override of Schema.example and Schema.examples field inside the Header Objects.
|
|
3
|
+
*
|
|
4
|
+
* Header Object has two fixed fields:
|
|
5
|
+
* - `example` of type `Any`
|
|
6
|
+
* - `examples` of type `Map[string, Example Object | Reference Object]`
|
|
7
|
+
*
|
|
8
|
+
* OpenAPI 3.1 specification excerpt that defines the override behavior:
|
|
9
|
+
*
|
|
10
|
+
* The example value SHALL override the example provided by the schema.
|
|
11
|
+
* Furthermore, if referencing a schema that contains an example, the examples value SHALL override the example provided by the schema.
|
|
12
|
+
*/
|
|
13
|
+
/* eslint-disable no-param-reassign */
|
|
14
|
+
const plugin = () => ({
|
|
15
|
+
predicates
|
|
16
|
+
}) => {
|
|
17
|
+
return {
|
|
18
|
+
visitor: {
|
|
19
|
+
HeaderElement: {
|
|
20
|
+
leave(headerElement, key, parent, path, ancestors) {
|
|
21
|
+
var _headerElement$schema, _headerElement$schema2;
|
|
22
|
+
// skip visiting this Header Object
|
|
23
|
+
if (ancestors.some(predicates.isComponentsElement)) {
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
// no Header.schema field present
|
|
28
|
+
if (typeof headerElement.schema === 'undefined' || !predicates.isSchemaElement(headerElement.schema)) {
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
// Schema contains no example
|
|
32
|
+
if (typeof ((_headerElement$schema = headerElement.schema) === null || _headerElement$schema === void 0 ? void 0 : _headerElement$schema.example) === 'undefined' && typeof ((_headerElement$schema2 = headerElement.schema) === null || _headerElement$schema2 === void 0 ? void 0 : _headerElement$schema2.examples) === 'undefined') {
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* Header.examples and Schema.examples have preferences over the older
|
|
38
|
+
* and deprected `example` field.
|
|
39
|
+
*/
|
|
40
|
+
if (typeof headerElement.examples !== 'undefined' && predicates.isObjectElement(headerElement.examples)) {
|
|
41
|
+
// @ts-ignore
|
|
42
|
+
const examples = headerElement.examples.map(example => {
|
|
43
|
+
var _example$value;
|
|
44
|
+
return (_example$value = example.value) === null || _example$value === void 0 ? void 0 : _example$value.clone();
|
|
45
|
+
});
|
|
46
|
+
if (typeof headerElement.schema.examples !== 'undefined') {
|
|
47
|
+
headerElement.schema.set('examples', examples);
|
|
48
|
+
}
|
|
49
|
+
if (typeof headerElement.schema.example !== 'undefined') {
|
|
50
|
+
headerElement.schema.set('example', examples);
|
|
51
|
+
}
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* Handle deprecated `example` field.
|
|
57
|
+
*/
|
|
58
|
+
if (typeof headerElement.example !== 'undefined') {
|
|
59
|
+
if (typeof headerElement.schema.examples !== 'undefined') {
|
|
60
|
+
headerElement.schema.set('examples', [headerElement.example.clone()]);
|
|
61
|
+
}
|
|
62
|
+
if (typeof headerElement.schema.example !== 'undefined') {
|
|
63
|
+
headerElement.schema.set('example', headerElement.example.clone());
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
};
|
|
70
|
+
};
|
|
71
|
+
/* eslint-enable */
|
|
72
|
+
|
|
73
|
+
export default plugin;
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
import { last, defaultTo, groupBy } from 'ramda';
|
|
2
|
+
import { toValue } from '@swagger-api/apidom-core';
|
|
3
|
+
const removeSpaces = operationId => {
|
|
4
|
+
return operationId.replace(/\s/g, '');
|
|
5
|
+
};
|
|
6
|
+
const replaceSpecialCharsWithUnderscore = operationId => {
|
|
7
|
+
return operationId.replace(/\W/gi, '_');
|
|
8
|
+
};
|
|
9
|
+
const createNormalizedOperationId = (path, method) => {
|
|
10
|
+
const normalizedMethod = replaceSpecialCharsWithUnderscore(removeSpaces(method.toLowerCase()));
|
|
11
|
+
const normalizedPath = replaceSpecialCharsWithUnderscore(removeSpaces(path));
|
|
12
|
+
return `${normalizedMethod}${normalizedPath}`;
|
|
13
|
+
};
|
|
14
|
+
const normalizeOperationId = (operationId, path, method) => {
|
|
15
|
+
const withoutSpaces = removeSpaces(operationId);
|
|
16
|
+
if (withoutSpaces.length > 0) {
|
|
17
|
+
return replaceSpecialCharsWithUnderscore(withoutSpaces);
|
|
18
|
+
}
|
|
19
|
+
return createNormalizedOperationId(path, method);
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Normalization of Operation.operationId field.
|
|
24
|
+
*
|
|
25
|
+
* This normalization is not guided by OpenAPI 3.1 specification.
|
|
26
|
+
*
|
|
27
|
+
* Existing Operation.operationId fields are normalized into snake case form.
|
|
28
|
+
*
|
|
29
|
+
* Operation Objects, that do not define operationId field, are left untouched.
|
|
30
|
+
*
|
|
31
|
+
* Original operationId is stored in meta and as new `__originalOperationId` field.
|
|
32
|
+
*
|
|
33
|
+
* This plugin also guarantees the uniqueness of all defined Operation.operationId fields,
|
|
34
|
+
* and make sure Link.operationId fields are pointing to correct and normalized Operation.operationId fields.
|
|
35
|
+
*
|
|
36
|
+
*/
|
|
37
|
+
/* eslint-disable no-param-reassign */
|
|
38
|
+
|
|
39
|
+
const plugin = ({
|
|
40
|
+
operationIdNormalizer = normalizeOperationId
|
|
41
|
+
} = {}) => ({
|
|
42
|
+
predicates,
|
|
43
|
+
namespace
|
|
44
|
+
}) => {
|
|
45
|
+
const paths = [];
|
|
46
|
+
const normalizedOperations = [];
|
|
47
|
+
const links = [];
|
|
48
|
+
return {
|
|
49
|
+
visitor: {
|
|
50
|
+
OpenApi3_1Element: {
|
|
51
|
+
leave() {
|
|
52
|
+
// group normalized operations by normalized operationId
|
|
53
|
+
const normalizedOperationGroups = groupBy(operationElement => {
|
|
54
|
+
return toValue(operationElement.operationId);
|
|
55
|
+
}, normalizedOperations);
|
|
56
|
+
|
|
57
|
+
// append incremental numerical suffixes to identical operationIds
|
|
58
|
+
Object.entries(normalizedOperationGroups).forEach(([normalizedOperationId, operationElements]) => {
|
|
59
|
+
if (operationElements.length <= 1) return;
|
|
60
|
+
operationElements.forEach((operationElement, index) => {
|
|
61
|
+
const indexedNormalizedOperationId = `${normalizedOperationId}${index + 1}`;
|
|
62
|
+
// @ts-ignore
|
|
63
|
+
operationElement.operationId = new namespace.elements.String(indexedNormalizedOperationId);
|
|
64
|
+
});
|
|
65
|
+
});
|
|
66
|
+
|
|
67
|
+
// rectify possibly broken Link.operationId fields
|
|
68
|
+
links.forEach(linkElement => {
|
|
69
|
+
var _operationElement$ope;
|
|
70
|
+
if (typeof linkElement.operationId === 'undefined') return;
|
|
71
|
+
const linkOperationId = String(toValue(linkElement.operationId));
|
|
72
|
+
const operationElement = normalizedOperations.find(normalizedOperationElement => {
|
|
73
|
+
const originalOperationId = toValue(normalizedOperationElement.meta.get('originalOperationId'));
|
|
74
|
+
return originalOperationId === linkOperationId;
|
|
75
|
+
});
|
|
76
|
+
|
|
77
|
+
// Link Object doesn't need to be rectified
|
|
78
|
+
if (typeof operationElement === 'undefined') return;
|
|
79
|
+
linkElement.operationId = (_operationElement$ope = operationElement.operationId) === null || _operationElement$ope === void 0 ? void 0 : _operationElement$ope.clone();
|
|
80
|
+
linkElement.meta.set('originalOperationId', linkOperationId);
|
|
81
|
+
linkElement.set('__originalOperationId', linkOperationId);
|
|
82
|
+
});
|
|
83
|
+
|
|
84
|
+
// cleanup the references
|
|
85
|
+
normalizedOperations.length = 0;
|
|
86
|
+
links.length = 0;
|
|
87
|
+
}
|
|
88
|
+
},
|
|
89
|
+
PathItemElement: {
|
|
90
|
+
enter(pathItemElement) {
|
|
91
|
+
// `path` meta may not be always available, e.g. in Callback Object or Components Object
|
|
92
|
+
const path = defaultTo('path', toValue(pathItemElement.meta.get('path')));
|
|
93
|
+
paths.push(path);
|
|
94
|
+
},
|
|
95
|
+
leave() {
|
|
96
|
+
paths.pop();
|
|
97
|
+
}
|
|
98
|
+
},
|
|
99
|
+
OperationElement: {
|
|
100
|
+
enter(operationElement) {
|
|
101
|
+
// operationId field is undefined, needs no normalization
|
|
102
|
+
if (typeof operationElement.operationId === 'undefined') return;
|
|
103
|
+
|
|
104
|
+
// cast operationId to string type
|
|
105
|
+
const originalOperationId = String(toValue(operationElement.operationId));
|
|
106
|
+
// perform operationId normalization
|
|
107
|
+
const path = last(paths);
|
|
108
|
+
// `http-method` meta may not be always available, e.g. in Callback Object or Components Object
|
|
109
|
+
const method = defaultTo('method', toValue(operationElement.meta.get('http-method')));
|
|
110
|
+
const normalizedOperationId = operationIdNormalizer(originalOperationId, path, method);
|
|
111
|
+
|
|
112
|
+
// normalization is not necessary
|
|
113
|
+
if (originalOperationId === normalizedOperationId) return;
|
|
114
|
+
|
|
115
|
+
// @ts-ignore
|
|
116
|
+
operationElement.operationId = new namespace.elements.String(normalizedOperationId);
|
|
117
|
+
operationElement.set('__originalOperationId', originalOperationId);
|
|
118
|
+
operationElement.meta.set('originalOperationId', originalOperationId);
|
|
119
|
+
normalizedOperations.push(operationElement);
|
|
120
|
+
}
|
|
121
|
+
},
|
|
122
|
+
LinkElement: {
|
|
123
|
+
leave(linkElement) {
|
|
124
|
+
// make sure this Link elements doesn't come from base namespace
|
|
125
|
+
if (!predicates.isLinkElement(linkElement)) return;
|
|
126
|
+
// ignore Link Objects with undefined operationId
|
|
127
|
+
if (typeof linkElement.operationId === 'undefined') return;
|
|
128
|
+
links.push(linkElement);
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
};
|
|
133
|
+
};
|
|
134
|
+
/* eslint-enable */
|
|
135
|
+
|
|
136
|
+
export default plugin;
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Override of Schema.example and Schema.examples field inside the Parameter Objects.
|
|
3
|
+
*
|
|
4
|
+
* Parameter Object has two fixed fields:
|
|
5
|
+
* - `example` of type `Any`
|
|
6
|
+
* - `examples` of type `Map[string, Example Object | Reference Object]`
|
|
7
|
+
*
|
|
8
|
+
* OpenAPI 3.1 specification excerpt that defines the override behavior:
|
|
9
|
+
*
|
|
10
|
+
* The example value SHALL override the example provided by the schema.
|
|
11
|
+
* Furthermore, if referencing a schema that contains an example, the examples value SHALL override the example provided by the schema.
|
|
12
|
+
*/
|
|
13
|
+
/* eslint-disable no-param-reassign */
|
|
14
|
+
const plugin = () => ({
|
|
15
|
+
predicates
|
|
16
|
+
}) => {
|
|
17
|
+
return {
|
|
18
|
+
visitor: {
|
|
19
|
+
ParameterElement: {
|
|
20
|
+
leave(parameterElement, key, parent, path, ancestors) {
|
|
21
|
+
var _parameterElement$sch, _parameterElement$sch2;
|
|
22
|
+
// skip visiting this Parameter Object
|
|
23
|
+
if (ancestors.some(predicates.isComponentsElement)) {
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
// no Parameter.schema field present
|
|
28
|
+
if (typeof parameterElement.schema === 'undefined' || !predicates.isSchemaElement(parameterElement.schema)) {
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
// Schema contains no example
|
|
32
|
+
if (typeof ((_parameterElement$sch = parameterElement.schema) === null || _parameterElement$sch === void 0 ? void 0 : _parameterElement$sch.example) === 'undefined' && typeof ((_parameterElement$sch2 = parameterElement.schema) === null || _parameterElement$sch2 === void 0 ? void 0 : _parameterElement$sch2.examples) === 'undefined') {
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* Parameter.examples and Schema.examples have preferences over the older
|
|
38
|
+
* and deprected `example` field.
|
|
39
|
+
*/
|
|
40
|
+
if (typeof parameterElement.examples !== 'undefined' && predicates.isObjectElement(parameterElement.examples)) {
|
|
41
|
+
// @ts-ignore
|
|
42
|
+
const examples = parameterElement.examples.map(example => {
|
|
43
|
+
var _example$value;
|
|
44
|
+
return (_example$value = example.value) === null || _example$value === void 0 ? void 0 : _example$value.clone();
|
|
45
|
+
});
|
|
46
|
+
if (typeof parameterElement.schema.examples !== 'undefined') {
|
|
47
|
+
parameterElement.schema.set('examples', examples);
|
|
48
|
+
}
|
|
49
|
+
if (typeof parameterElement.schema.example !== 'undefined') {
|
|
50
|
+
parameterElement.schema.set('example', examples);
|
|
51
|
+
}
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* Handle deprecated `example` field.
|
|
57
|
+
*/
|
|
58
|
+
if (typeof parameterElement.example !== 'undefined') {
|
|
59
|
+
if (typeof parameterElement.schema.examples !== 'undefined') {
|
|
60
|
+
parameterElement.schema.set('examples', [parameterElement.example.clone()]);
|
|
61
|
+
}
|
|
62
|
+
if (typeof parameterElement.schema.example !== 'undefined') {
|
|
63
|
+
parameterElement.schema.set('example', parameterElement.example.clone());
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
};
|
|
70
|
+
};
|
|
71
|
+
/* eslint-enable */
|
|
72
|
+
|
|
73
|
+
export default plugin;
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { uniqWith, pathOr, last } from 'ramda';
|
|
2
|
+
import { toValue } from '@swagger-api/apidom-core';
|
|
3
|
+
import { OperationParametersElement } from '@swagger-api/apidom-ns-openapi-3-0';
|
|
4
|
+
/**
|
|
5
|
+
* Inheritance of Parameter Objects.
|
|
6
|
+
*
|
|
7
|
+
* OpenAPI 3.1 specification excerpt that defines the inheritance behavior:
|
|
8
|
+
*
|
|
9
|
+
* A list of parameters that are applicable for this operation. If a parameter is already defined at the Path Item,
|
|
10
|
+
* the new definition will override it but can never remove it. The list MUST NOT include duplicated parameters.
|
|
11
|
+
* A unique parameter is defined by a combination of a name and location.
|
|
12
|
+
*/
|
|
13
|
+
/* eslint-disable no-param-reassign */
|
|
14
|
+
const plugin = () => ({
|
|
15
|
+
predicates
|
|
16
|
+
}) => {
|
|
17
|
+
/**
|
|
18
|
+
* Establishes identity between two Parameter Objects.
|
|
19
|
+
*
|
|
20
|
+
* {@link https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.0.md#user-content-operationparameters}
|
|
21
|
+
*/
|
|
22
|
+
const parameterEquals = (parameter1, parameter2) => {
|
|
23
|
+
if (!predicates.isParameterElement(parameter1)) return false;
|
|
24
|
+
if (!predicates.isParameterElement(parameter2)) return false;
|
|
25
|
+
if (!predicates.isStringElement(parameter1.name)) return false;
|
|
26
|
+
if (!predicates.isStringElement(parameter1.in)) return false;
|
|
27
|
+
if (!predicates.isStringElement(parameter2.name)) return false;
|
|
28
|
+
if (!predicates.isStringElement(parameter2.in)) return false;
|
|
29
|
+
return toValue(parameter1.name) === toValue(parameter2.name) && toValue(parameter1.in) === toValue(parameter2.in);
|
|
30
|
+
};
|
|
31
|
+
const pathItemParameters = [];
|
|
32
|
+
return {
|
|
33
|
+
visitor: {
|
|
34
|
+
PathItemElement: {
|
|
35
|
+
enter(pathItemElement, key, parent, path, ancestors) {
|
|
36
|
+
// skip visiting this Path Item
|
|
37
|
+
if (ancestors.some(predicates.isComponentsElement)) {
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
const {
|
|
41
|
+
parameters
|
|
42
|
+
} = pathItemElement;
|
|
43
|
+
if (predicates.isArrayElement(parameters)) {
|
|
44
|
+
pathItemParameters.push([...parameters.content]);
|
|
45
|
+
} else {
|
|
46
|
+
pathItemParameters.push([]);
|
|
47
|
+
}
|
|
48
|
+
},
|
|
49
|
+
leave() {
|
|
50
|
+
pathItemParameters.pop();
|
|
51
|
+
}
|
|
52
|
+
},
|
|
53
|
+
OperationElement: {
|
|
54
|
+
leave(operationElement) {
|
|
55
|
+
const parentPathItemParameters = last(pathItemParameters);
|
|
56
|
+
|
|
57
|
+
// no Path Item Object parameters to inherit from
|
|
58
|
+
if (!Array.isArray(parentPathItemParameters) || parentPathItemParameters.length === 0) {
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
const operationParameters = pathOr([], ['parameters', 'content'], operationElement);
|
|
62
|
+
|
|
63
|
+
// prefers the first item if two items compare equal based on the predicate
|
|
64
|
+
const mergedParameters = uniqWith(parameterEquals, [...operationParameters, ...parentPathItemParameters]);
|
|
65
|
+
operationElement.parameters = new OperationParametersElement(mergedParameters);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
};
|
|
70
|
+
};
|
|
71
|
+
/* eslint-enable */
|
|
72
|
+
|
|
73
|
+
export default plugin;
|