@speclynx/apidom-ns-openapi-3-0 4.0.2 → 4.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +6 -0
- package/package.json +8 -9
- package/src/elements/Callback.cjs +15 -0
- package/src/elements/Callback.mjs +12 -0
- package/src/elements/Callback.ts +13 -0
- package/src/elements/Components.cjs +69 -0
- package/src/elements/Components.mjs +66 -0
- package/src/elements/Components.ts +85 -0
- package/src/elements/Contact.cjs +33 -0
- package/src/elements/Contact.mjs +30 -0
- package/src/elements/Contact.ts +42 -0
- package/src/elements/Discriminator.cjs +27 -0
- package/src/elements/Discriminator.mjs +24 -0
- package/src/elements/Discriminator.ts +34 -0
- package/src/elements/Encoding.cjs +45 -0
- package/src/elements/Encoding.mjs +42 -0
- package/src/elements/Encoding.ts +59 -0
- package/src/elements/Example.cjs +39 -0
- package/src/elements/Example.mjs +36 -0
- package/src/elements/Example.ts +51 -0
- package/src/elements/ExternalDocumentation.cjs +27 -0
- package/src/elements/ExternalDocumentation.mjs +24 -0
- package/src/elements/ExternalDocumentation.ts +34 -0
- package/src/elements/Header.cjs +90 -0
- package/src/elements/Header.mjs +86 -0
- package/src/elements/Header.ts +119 -0
- package/src/elements/Info.cjs +52 -0
- package/src/elements/Info.mjs +48 -0
- package/src/elements/Info.ts +70 -0
- package/src/elements/License.cjs +27 -0
- package/src/elements/License.mjs +24 -0
- package/src/elements/License.ts +34 -0
- package/src/elements/Link.cjs +63 -0
- package/src/elements/Link.mjs +59 -0
- package/src/elements/Link.ts +85 -0
- package/src/elements/MediaType.cjs +39 -0
- package/src/elements/MediaType.mjs +35 -0
- package/src/elements/MediaType.ts +48 -0
- package/src/elements/OAuthFlow.cjs +39 -0
- package/src/elements/OAuthFlow.mjs +36 -0
- package/src/elements/OAuthFlow.ts +50 -0
- package/src/elements/OAuthFlows.cjs +39 -0
- package/src/elements/OAuthFlows.mjs +35 -0
- package/src/elements/OAuthFlows.ts +47 -0
- package/src/elements/OpenApi3-0.cjs +65 -0
- package/src/elements/OpenApi3-0.mjs +61 -0
- package/src/elements/OpenApi3-0.ts +90 -0
- package/src/elements/Openapi.cjs +17 -0
- package/src/elements/Openapi.mjs +14 -0
- package/src/elements/Openapi.ts +15 -0
- package/src/elements/Operation.cjs +90 -0
- package/src/elements/Operation.mjs +86 -0
- package/src/elements/Operation.ts +124 -0
- package/src/elements/Parameter.cjs +102 -0
- package/src/elements/Parameter.mjs +98 -0
- package/src/elements/Parameter.ts +135 -0
- package/src/elements/PathItem.cjs +93 -0
- package/src/elements/PathItem.mjs +89 -0
- package/src/elements/PathItem.ts +125 -0
- package/src/elements/Paths.cjs +15 -0
- package/src/elements/Paths.mjs +12 -0
- package/src/elements/Paths.ts +13 -0
- package/src/elements/Reference.cjs +22 -0
- package/src/elements/Reference.mjs +19 -0
- package/src/elements/Reference.ts +27 -0
- package/src/elements/RequestBody.cjs +36 -0
- package/src/elements/RequestBody.mjs +33 -0
- package/src/elements/RequestBody.ts +46 -0
- package/src/elements/Response.cjs +39 -0
- package/src/elements/Response.mjs +36 -0
- package/src/elements/Response.ts +50 -0
- package/src/elements/Responses.cjs +21 -0
- package/src/elements/Responses.mjs +17 -0
- package/src/elements/Responses.ts +24 -0
- package/src/elements/Schema.cjs +170 -0
- package/src/elements/Schema.mjs +166 -0
- package/src/elements/Schema.ts +230 -0
- package/src/elements/SecurityRequirement.cjs +15 -0
- package/src/elements/SecurityRequirement.mjs +12 -0
- package/src/elements/SecurityRequirement.ts +13 -0
- package/src/elements/SecurityScheme.cjs +63 -0
- package/src/elements/SecurityScheme.mjs +59 -0
- package/src/elements/SecurityScheme.ts +84 -0
- package/src/elements/Server.cjs +33 -0
- package/src/elements/Server.mjs +30 -0
- package/src/elements/Server.ts +42 -0
- package/src/elements/ServerVariable.cjs +33 -0
- package/src/elements/ServerVariable.mjs +30 -0
- package/src/elements/ServerVariable.ts +43 -0
- package/src/elements/Tag.cjs +33 -0
- package/src/elements/Tag.mjs +29 -0
- package/src/elements/Tag.ts +44 -0
- package/src/elements/Xml.cjs +45 -0
- package/src/elements/Xml.mjs +42 -0
- package/src/elements/Xml.ts +59 -0
- package/src/elements/nces/ComponentsCallbacks.cjs +16 -0
- package/src/elements/nces/ComponentsCallbacks.mjs +13 -0
- package/src/elements/nces/ComponentsCallbacks.ts +15 -0
- package/src/elements/nces/ComponentsExamples.cjs +17 -0
- package/src/elements/nces/ComponentsExamples.mjs +14 -0
- package/src/elements/nces/ComponentsExamples.ts +16 -0
- package/src/elements/nces/ComponentsHeaders.cjs +16 -0
- package/src/elements/nces/ComponentsHeaders.mjs +13 -0
- package/src/elements/nces/ComponentsHeaders.ts +15 -0
- package/src/elements/nces/ComponentsLinks.cjs +16 -0
- package/src/elements/nces/ComponentsLinks.mjs +13 -0
- package/src/elements/nces/ComponentsLinks.ts +15 -0
- package/src/elements/nces/ComponentsParameters.cjs +17 -0
- package/src/elements/nces/ComponentsParameters.mjs +14 -0
- package/src/elements/nces/ComponentsParameters.ts +16 -0
- package/src/elements/nces/ComponentsRequestBodies.cjs +16 -0
- package/src/elements/nces/ComponentsRequestBodies.mjs +13 -0
- package/src/elements/nces/ComponentsRequestBodies.ts +15 -0
- package/src/elements/nces/ComponentsResponses.cjs +16 -0
- package/src/elements/nces/ComponentsResponses.mjs +13 -0
- package/src/elements/nces/ComponentsResponses.ts +15 -0
- package/src/elements/nces/ComponentsSchemas.cjs +16 -0
- package/src/elements/nces/ComponentsSchemas.mjs +13 -0
- package/src/elements/nces/ComponentsSchemas.ts +15 -0
- package/src/elements/nces/ComponentsSecuritySchemes.cjs +16 -0
- package/src/elements/nces/ComponentsSecuritySchemes.mjs +13 -0
- package/src/elements/nces/ComponentsSecuritySchemes.ts +15 -0
- package/src/elements/nces/DiscriminatorMapping.cjs +16 -0
- package/src/elements/nces/DiscriminatorMapping.mjs +13 -0
- package/src/elements/nces/DiscriminatorMapping.ts +15 -0
- package/src/elements/nces/EncodingHeaders.cjs +16 -0
- package/src/elements/nces/EncodingHeaders.mjs +13 -0
- package/src/elements/nces/EncodingHeaders.ts +15 -0
- package/src/elements/nces/HeaderContent.cjs +17 -0
- package/src/elements/nces/HeaderContent.mjs +14 -0
- package/src/elements/nces/HeaderContent.ts +16 -0
- package/src/elements/nces/HeaderExamples.cjs +17 -0
- package/src/elements/nces/HeaderExamples.mjs +14 -0
- package/src/elements/nces/HeaderExamples.ts +16 -0
- package/src/elements/nces/LinkParameters.cjs +16 -0
- package/src/elements/nces/LinkParameters.mjs +13 -0
- package/src/elements/nces/LinkParameters.ts +15 -0
- package/src/elements/nces/MediaTypeEncoding.cjs +16 -0
- package/src/elements/nces/MediaTypeEncoding.mjs +13 -0
- package/src/elements/nces/MediaTypeEncoding.ts +15 -0
- package/src/elements/nces/MediaTypeExamples.cjs +17 -0
- package/src/elements/nces/MediaTypeExamples.mjs +14 -0
- package/src/elements/nces/MediaTypeExamples.ts +16 -0
- package/src/elements/nces/OAuthFlowScopes.cjs +16 -0
- package/src/elements/nces/OAuthFlowScopes.mjs +13 -0
- package/src/elements/nces/OAuthFlowScopes.ts +15 -0
- package/src/elements/nces/OperationCallbacks.cjs +16 -0
- package/src/elements/nces/OperationCallbacks.mjs +13 -0
- package/src/elements/nces/OperationCallbacks.ts +15 -0
- package/src/elements/nces/OperationParameters.cjs +17 -0
- package/src/elements/nces/OperationParameters.mjs +14 -0
- package/src/elements/nces/OperationParameters.ts +16 -0
- package/src/elements/nces/OperationSecurity.cjs +17 -0
- package/src/elements/nces/OperationSecurity.mjs +14 -0
- package/src/elements/nces/OperationSecurity.ts +16 -0
- package/src/elements/nces/OperationServers.cjs +17 -0
- package/src/elements/nces/OperationServers.mjs +14 -0
- package/src/elements/nces/OperationServers.ts +16 -0
- package/src/elements/nces/OperationTags.cjs +16 -0
- package/src/elements/nces/OperationTags.mjs +13 -0
- package/src/elements/nces/OperationTags.ts +15 -0
- package/src/elements/nces/ParameterContent.cjs +17 -0
- package/src/elements/nces/ParameterContent.mjs +14 -0
- package/src/elements/nces/ParameterContent.ts +16 -0
- package/src/elements/nces/ParameterExamples.cjs +17 -0
- package/src/elements/nces/ParameterExamples.mjs +14 -0
- package/src/elements/nces/ParameterExamples.ts +16 -0
- package/src/elements/nces/PathItemParameters.cjs +17 -0
- package/src/elements/nces/PathItemParameters.mjs +14 -0
- package/src/elements/nces/PathItemParameters.ts +16 -0
- package/src/elements/nces/PathItemServers.cjs +17 -0
- package/src/elements/nces/PathItemServers.mjs +14 -0
- package/src/elements/nces/PathItemServers.ts +16 -0
- package/src/elements/nces/RequestBodyContent.cjs +17 -0
- package/src/elements/nces/RequestBodyContent.mjs +14 -0
- package/src/elements/nces/RequestBodyContent.ts +16 -0
- package/src/elements/nces/ResponseContent.cjs +17 -0
- package/src/elements/nces/ResponseContent.mjs +14 -0
- package/src/elements/nces/ResponseContent.ts +16 -0
- package/src/elements/nces/ResponseHeaders.cjs +16 -0
- package/src/elements/nces/ResponseHeaders.mjs +13 -0
- package/src/elements/nces/ResponseHeaders.ts +15 -0
- package/src/elements/nces/ResponseLinks.cjs +16 -0
- package/src/elements/nces/ResponseLinks.mjs +13 -0
- package/src/elements/nces/ResponseLinks.ts +15 -0
- package/src/elements/nces/Security.cjs +16 -0
- package/src/elements/nces/Security.mjs +13 -0
- package/src/elements/nces/Security.ts +15 -0
- package/src/elements/nces/ServerVariables.cjs +16 -0
- package/src/elements/nces/ServerVariables.mjs +13 -0
- package/src/elements/nces/ServerVariables.ts +15 -0
- package/src/elements/nces/Servers.cjs +16 -0
- package/src/elements/nces/Servers.mjs +13 -0
- package/src/elements/nces/Servers.ts +15 -0
- package/src/elements/nces/Tags.cjs +16 -0
- package/src/elements/nces/Tags.mjs +13 -0
- package/src/elements/nces/Tags.ts +15 -0
- package/src/index.cjs +205 -0
- package/src/index.mjs +54 -0
- package/src/index.ts +550 -0
- package/src/media-types.cjs +34 -0
- package/src/media-types.mjs +30 -0
- package/src/media-types.ts +52 -0
- package/src/namespace.cjs +79 -0
- package/src/namespace.mjs +74 -0
- package/src/namespace.ts +78 -0
- package/src/predicates.cjs +188 -0
- package/src/predicates.mjs +155 -0
- package/src/predicates.ts +185 -0
- package/src/refractor/index.cjs +358 -0
- package/src/refractor/index.mjs +321 -0
- package/src/refractor/index.ts +370 -0
- package/src/refractor/inspect.cjs +205 -0
- package/src/refractor/inspect.mjs +170 -0
- package/src/refractor/inspect.ts +239 -0
- package/src/refractor/plugins/replace-empty-element.cjs +633 -0
- package/src/refractor/plugins/replace-empty-element.mjs +625 -0
- package/src/refractor/plugins/replace-empty-element.ts +656 -0
- package/src/refractor/predicates.cjs +36 -0
- package/src/refractor/predicates.mjs +31 -0
- package/src/refractor/predicates.ts +39 -0
- package/src/refractor/specification.cjs +700 -0
- package/src/refractor/specification.mjs +695 -0
- package/src/refractor/specification.ts +557 -0
- package/src/refractor/toolbox.cjs +28 -0
- package/src/refractor/toolbox.mjs +21 -0
- package/src/refractor/toolbox.ts +24 -0
- package/src/refractor/visitors/FallbackVisitor.cjs +24 -0
- package/src/refractor/visitors/FallbackVisitor.mjs +18 -0
- package/src/refractor/visitors/FallbackVisitor.ts +24 -0
- package/src/refractor/visitors/SpecificationExtensionVisitor.cjs +18 -0
- package/src/refractor/visitors/SpecificationExtensionVisitor.mjs +13 -0
- package/src/refractor/visitors/SpecificationExtensionVisitor.ts +22 -0
- package/src/refractor/visitors/SpecificationVisitor.cjs +88 -0
- package/src/refractor/visitors/SpecificationVisitor.mjs +82 -0
- package/src/refractor/visitors/SpecificationVisitor.ts +112 -0
- package/src/refractor/visitors/Visitor.cjs +36 -0
- package/src/refractor/visitors/Visitor.mjs +33 -0
- package/src/refractor/visitors/Visitor.ts +47 -0
- package/src/refractor/visitors/generics/AlternatingVisitor.cjs +42 -0
- package/src/refractor/visitors/generics/AlternatingVisitor.mjs +35 -0
- package/src/refractor/visitors/generics/AlternatingVisitor.ts +45 -0
- package/src/refractor/visitors/generics/FixedFieldsVisitor.cjs +75 -0
- package/src/refractor/visitors/generics/FixedFieldsVisitor.mjs +68 -0
- package/src/refractor/visitors/generics/FixedFieldsVisitor.ts +110 -0
- package/src/refractor/visitors/generics/MapVisitor.cjs +21 -0
- package/src/refractor/visitors/generics/MapVisitor.mjs +15 -0
- package/src/refractor/visitors/generics/MapVisitor.ts +25 -0
- package/src/refractor/visitors/generics/MixedFieldsVisitor.cjs +67 -0
- package/src/refractor/visitors/generics/MixedFieldsVisitor.mjs +61 -0
- package/src/refractor/visitors/generics/MixedFieldsVisitor.ts +77 -0
- package/src/refractor/visitors/generics/PatternedFieldsVisitor.cjs +72 -0
- package/src/refractor/visitors/generics/PatternedFieldsVisitor.mjs +66 -0
- package/src/refractor/visitors/generics/PatternedFieldsVisitor.ts +99 -0
- package/src/refractor/visitors/open-api-3-0/ContentVisitor.cjs +23 -0
- package/src/refractor/visitors/open-api-3-0/ContentVisitor.mjs +18 -0
- package/src/refractor/visitors/open-api-3-0/ContentVisitor.ts +28 -0
- package/src/refractor/visitors/open-api-3-0/ExamplesVisitor.cjs +33 -0
- package/src/refractor/visitors/open-api-3-0/ExamplesVisitor.mjs +28 -0
- package/src/refractor/visitors/open-api-3-0/ExamplesVisitor.ts +48 -0
- package/src/refractor/visitors/open-api-3-0/OpenapiVisitor.cjs +25 -0
- package/src/refractor/visitors/open-api-3-0/OpenapiVisitor.mjs +19 -0
- package/src/refractor/visitors/open-api-3-0/OpenapiVisitor.ts +30 -0
- package/src/refractor/visitors/open-api-3-0/ParametersVisitor.cjs +36 -0
- package/src/refractor/visitors/open-api-3-0/ParametersVisitor.mjs +31 -0
- package/src/refractor/visitors/open-api-3-0/ParametersVisitor.ts +47 -0
- package/src/refractor/visitors/open-api-3-0/SecurityVisitor.cjs +35 -0
- package/src/refractor/visitors/open-api-3-0/SecurityVisitor.mjs +29 -0
- package/src/refractor/visitors/open-api-3-0/SecurityVisitor.ts +44 -0
- package/src/refractor/visitors/open-api-3-0/ServersVisitor.cjs +32 -0
- package/src/refractor/visitors/open-api-3-0/ServersVisitor.mjs +26 -0
- package/src/refractor/visitors/open-api-3-0/ServersVisitor.ts +40 -0
- package/src/refractor/visitors/open-api-3-0/TagsVisitor.cjs +32 -0
- package/src/refractor/visitors/open-api-3-0/TagsVisitor.mjs +26 -0
- package/src/refractor/visitors/open-api-3-0/TagsVisitor.ts +40 -0
- package/src/refractor/visitors/open-api-3-0/bases.cjs +72 -0
- package/src/refractor/visitors/open-api-3-0/bases.mjs +67 -0
- package/src/refractor/visitors/open-api-3-0/bases.ts +82 -0
- package/src/refractor/visitors/open-api-3-0/callback/index.cjs +38 -0
- package/src/refractor/visitors/open-api-3-0/callback/index.mjs +32 -0
- package/src/refractor/visitors/open-api-3-0/callback/index.ts +49 -0
- package/src/refractor/visitors/open-api-3-0/components/CallbacksVisitor.cjs +33 -0
- package/src/refractor/visitors/open-api-3-0/components/CallbacksVisitor.mjs +27 -0
- package/src/refractor/visitors/open-api-3-0/components/CallbacksVisitor.ts +45 -0
- package/src/refractor/visitors/open-api-3-0/components/ExamplesVisitor.cjs +34 -0
- package/src/refractor/visitors/open-api-3-0/components/ExamplesVisitor.mjs +28 -0
- package/src/refractor/visitors/open-api-3-0/components/ExamplesVisitor.ts +46 -0
- package/src/refractor/visitors/open-api-3-0/components/HeadersVisitor.cjs +41 -0
- package/src/refractor/visitors/open-api-3-0/components/HeadersVisitor.mjs +35 -0
- package/src/refractor/visitors/open-api-3-0/components/HeadersVisitor.ts +53 -0
- package/src/refractor/visitors/open-api-3-0/components/LinksVisitor.cjs +33 -0
- package/src/refractor/visitors/open-api-3-0/components/LinksVisitor.mjs +27 -0
- package/src/refractor/visitors/open-api-3-0/components/LinksVisitor.ts +45 -0
- package/src/refractor/visitors/open-api-3-0/components/ParametersVisitor.cjs +34 -0
- package/src/refractor/visitors/open-api-3-0/components/ParametersVisitor.mjs +28 -0
- package/src/refractor/visitors/open-api-3-0/components/ParametersVisitor.ts +46 -0
- package/src/refractor/visitors/open-api-3-0/components/RequestBodiesVisitor.cjs +33 -0
- package/src/refractor/visitors/open-api-3-0/components/RequestBodiesVisitor.mjs +27 -0
- package/src/refractor/visitors/open-api-3-0/components/RequestBodiesVisitor.ts +45 -0
- package/src/refractor/visitors/open-api-3-0/components/ResponsesVisitor.cjs +41 -0
- package/src/refractor/visitors/open-api-3-0/components/ResponsesVisitor.mjs +35 -0
- package/src/refractor/visitors/open-api-3-0/components/ResponsesVisitor.ts +53 -0
- package/src/refractor/visitors/open-api-3-0/components/SchemasVisitor.cjs +34 -0
- package/src/refractor/visitors/open-api-3-0/components/SchemasVisitor.mjs +28 -0
- package/src/refractor/visitors/open-api-3-0/components/SchemasVisitor.ts +46 -0
- package/src/refractor/visitors/open-api-3-0/components/SecuritySchemesVisitor.cjs +33 -0
- package/src/refractor/visitors/open-api-3-0/components/SecuritySchemesVisitor.mjs +27 -0
- package/src/refractor/visitors/open-api-3-0/components/SecuritySchemesVisitor.ts +45 -0
- package/src/refractor/visitors/open-api-3-0/components/index.cjs +25 -0
- package/src/refractor/visitors/open-api-3-0/components/index.mjs +19 -0
- package/src/refractor/visitors/open-api-3-0/components/index.ts +31 -0
- package/src/refractor/visitors/open-api-3-0/contact/index.cjs +20 -0
- package/src/refractor/visitors/open-api-3-0/contact/index.mjs +15 -0
- package/src/refractor/visitors/open-api-3-0/contact/index.ts +27 -0
- package/src/refractor/visitors/open-api-3-0/distriminator/MappingVisitor.cjs +19 -0
- package/src/refractor/visitors/open-api-3-0/distriminator/MappingVisitor.mjs +14 -0
- package/src/refractor/visitors/open-api-3-0/distriminator/MappingVisitor.ts +24 -0
- package/src/refractor/visitors/open-api-3-0/distriminator/index.cjs +20 -0
- package/src/refractor/visitors/open-api-3-0/distriminator/index.mjs +15 -0
- package/src/refractor/visitors/open-api-3-0/distriminator/index.ts +27 -0
- package/src/refractor/visitors/open-api-3-0/encoding/HeadersVisitor.cjs +43 -0
- package/src/refractor/visitors/open-api-3-0/encoding/HeadersVisitor.mjs +37 -0
- package/src/refractor/visitors/open-api-3-0/encoding/HeadersVisitor.ts +57 -0
- package/src/refractor/visitors/open-api-3-0/encoding/index.cjs +40 -0
- package/src/refractor/visitors/open-api-3-0/encoding/index.mjs +34 -0
- package/src/refractor/visitors/open-api-3-0/encoding/index.ts +49 -0
- package/src/refractor/visitors/open-api-3-0/example/ExternalValueVisitor.cjs +16 -0
- package/src/refractor/visitors/open-api-3-0/example/ExternalValueVisitor.mjs +11 -0
- package/src/refractor/visitors/open-api-3-0/example/ExternalValueVisitor.ts +20 -0
- package/src/refractor/visitors/open-api-3-0/example/index.cjs +29 -0
- package/src/refractor/visitors/open-api-3-0/example/index.mjs +24 -0
- package/src/refractor/visitors/open-api-3-0/example/index.ts +38 -0
- package/src/refractor/visitors/open-api-3-0/external-documentation/index.cjs +20 -0
- package/src/refractor/visitors/open-api-3-0/external-documentation/index.mjs +15 -0
- package/src/refractor/visitors/open-api-3-0/external-documentation/index.ts +27 -0
- package/src/refractor/visitors/open-api-3-0/header/ContentVisitor.cjs +17 -0
- package/src/refractor/visitors/open-api-3-0/header/ContentVisitor.mjs +12 -0
- package/src/refractor/visitors/open-api-3-0/header/ContentVisitor.ts +18 -0
- package/src/refractor/visitors/open-api-3-0/header/ExamplesVisitor.cjs +17 -0
- package/src/refractor/visitors/open-api-3-0/header/ExamplesVisitor.mjs +12 -0
- package/src/refractor/visitors/open-api-3-0/header/ExamplesVisitor.ts +18 -0
- package/src/refractor/visitors/open-api-3-0/header/SchemaVisitor.cjs +32 -0
- package/src/refractor/visitors/open-api-3-0/header/SchemaVisitor.mjs +27 -0
- package/src/refractor/visitors/open-api-3-0/header/SchemaVisitor.ts +33 -0
- package/src/refractor/visitors/open-api-3-0/header/index.cjs +20 -0
- package/src/refractor/visitors/open-api-3-0/header/index.mjs +15 -0
- package/src/refractor/visitors/open-api-3-0/header/index.ts +27 -0
- package/src/refractor/visitors/open-api-3-0/index.cjs +29 -0
- package/src/refractor/visitors/open-api-3-0/index.mjs +23 -0
- package/src/refractor/visitors/open-api-3-0/index.ts +39 -0
- package/src/refractor/visitors/open-api-3-0/info/VersionVisitor.cjs +17 -0
- package/src/refractor/visitors/open-api-3-0/info/VersionVisitor.mjs +12 -0
- package/src/refractor/visitors/open-api-3-0/info/VersionVisitor.ts +21 -0
- package/src/refractor/visitors/open-api-3-0/info/index.cjs +20 -0
- package/src/refractor/visitors/open-api-3-0/info/index.mjs +15 -0
- package/src/refractor/visitors/open-api-3-0/info/index.ts +27 -0
- package/src/refractor/visitors/open-api-3-0/license/index.cjs +20 -0
- package/src/refractor/visitors/open-api-3-0/license/index.mjs +15 -0
- package/src/refractor/visitors/open-api-3-0/license/index.ts +27 -0
- package/src/refractor/visitors/open-api-3-0/link/OperationIdVisitor.cjs +16 -0
- package/src/refractor/visitors/open-api-3-0/link/OperationIdVisitor.mjs +11 -0
- package/src/refractor/visitors/open-api-3-0/link/OperationIdVisitor.ts +20 -0
- package/src/refractor/visitors/open-api-3-0/link/OperationRefVisitor.cjs +16 -0
- package/src/refractor/visitors/open-api-3-0/link/OperationRefVisitor.mjs +11 -0
- package/src/refractor/visitors/open-api-3-0/link/OperationRefVisitor.ts +20 -0
- package/src/refractor/visitors/open-api-3-0/link/ParametersVisitor.cjs +19 -0
- package/src/refractor/visitors/open-api-3-0/link/ParametersVisitor.mjs +14 -0
- package/src/refractor/visitors/open-api-3-0/link/ParametersVisitor.ts +24 -0
- package/src/refractor/visitors/open-api-3-0/link/index.cjs +29 -0
- package/src/refractor/visitors/open-api-3-0/link/index.mjs +24 -0
- package/src/refractor/visitors/open-api-3-0/link/index.ts +38 -0
- package/src/refractor/visitors/open-api-3-0/media-type/EncodingVisitor.cjs +19 -0
- package/src/refractor/visitors/open-api-3-0/media-type/EncodingVisitor.mjs +14 -0
- package/src/refractor/visitors/open-api-3-0/media-type/EncodingVisitor.ts +24 -0
- package/src/refractor/visitors/open-api-3-0/media-type/ExamplesVisitor.cjs +17 -0
- package/src/refractor/visitors/open-api-3-0/media-type/ExamplesVisitor.mjs +12 -0
- package/src/refractor/visitors/open-api-3-0/media-type/ExamplesVisitor.ts +18 -0
- package/src/refractor/visitors/open-api-3-0/media-type/SchemaVisitor.cjs +32 -0
- package/src/refractor/visitors/open-api-3-0/media-type/SchemaVisitor.mjs +27 -0
- package/src/refractor/visitors/open-api-3-0/media-type/SchemaVisitor.ts +33 -0
- package/src/refractor/visitors/open-api-3-0/media-type/index.cjs +20 -0
- package/src/refractor/visitors/open-api-3-0/media-type/index.mjs +15 -0
- package/src/refractor/visitors/open-api-3-0/media-type/index.ts +27 -0
- package/src/refractor/visitors/open-api-3-0/oauth-flow/ScopesVisitor.cjs +19 -0
- package/src/refractor/visitors/open-api-3-0/oauth-flow/ScopesVisitor.mjs +14 -0
- package/src/refractor/visitors/open-api-3-0/oauth-flow/ScopesVisitor.ts +24 -0
- package/src/refractor/visitors/open-api-3-0/oauth-flow/index.cjs +20 -0
- package/src/refractor/visitors/open-api-3-0/oauth-flow/index.mjs +15 -0
- package/src/refractor/visitors/open-api-3-0/oauth-flow/index.ts +27 -0
- package/src/refractor/visitors/open-api-3-0/oauth-flows/index.cjs +20 -0
- package/src/refractor/visitors/open-api-3-0/oauth-flows/index.mjs +15 -0
- package/src/refractor/visitors/open-api-3-0/oauth-flows/index.ts +27 -0
- package/src/refractor/visitors/open-api-3-0/operation/CallbacksVisitor.cjs +34 -0
- package/src/refractor/visitors/open-api-3-0/operation/CallbacksVisitor.mjs +28 -0
- package/src/refractor/visitors/open-api-3-0/operation/CallbacksVisitor.ts +45 -0
- package/src/refractor/visitors/open-api-3-0/operation/ParametersVisitor.cjs +17 -0
- package/src/refractor/visitors/open-api-3-0/operation/ParametersVisitor.mjs +12 -0
- package/src/refractor/visitors/open-api-3-0/operation/ParametersVisitor.ts +18 -0
- package/src/refractor/visitors/open-api-3-0/operation/RequestBodyVisitor.cjs +35 -0
- package/src/refractor/visitors/open-api-3-0/operation/RequestBodyVisitor.mjs +29 -0
- package/src/refractor/visitors/open-api-3-0/operation/RequestBodyVisitor.ts +39 -0
- package/src/refractor/visitors/open-api-3-0/operation/SecurityVisitor.cjs +32 -0
- package/src/refractor/visitors/open-api-3-0/operation/SecurityVisitor.mjs +26 -0
- package/src/refractor/visitors/open-api-3-0/operation/SecurityVisitor.ts +41 -0
- package/src/refractor/visitors/open-api-3-0/operation/ServersVisitor.cjs +17 -0
- package/src/refractor/visitors/open-api-3-0/operation/ServersVisitor.mjs +12 -0
- package/src/refractor/visitors/open-api-3-0/operation/ServersVisitor.ts +18 -0
- package/src/refractor/visitors/open-api-3-0/operation/TagsVisitor.cjs +27 -0
- package/src/refractor/visitors/open-api-3-0/operation/TagsVisitor.mjs +21 -0
- package/src/refractor/visitors/open-api-3-0/operation/TagsVisitor.ts +32 -0
- package/src/refractor/visitors/open-api-3-0/operation/index.cjs +23 -0
- package/src/refractor/visitors/open-api-3-0/operation/index.mjs +17 -0
- package/src/refractor/visitors/open-api-3-0/operation/index.ts +27 -0
- package/src/refractor/visitors/open-api-3-0/parameter/ContentVisitor.cjs +17 -0
- package/src/refractor/visitors/open-api-3-0/parameter/ContentVisitor.mjs +12 -0
- package/src/refractor/visitors/open-api-3-0/parameter/ContentVisitor.ts +18 -0
- package/src/refractor/visitors/open-api-3-0/parameter/ExamplesVisitor.cjs +17 -0
- package/src/refractor/visitors/open-api-3-0/parameter/ExamplesVisitor.mjs +12 -0
- package/src/refractor/visitors/open-api-3-0/parameter/ExamplesVisitor.ts +18 -0
- package/src/refractor/visitors/open-api-3-0/parameter/SchemaVisitor.cjs +36 -0
- package/src/refractor/visitors/open-api-3-0/parameter/SchemaVisitor.mjs +30 -0
- package/src/refractor/visitors/open-api-3-0/parameter/SchemaVisitor.ts +36 -0
- package/src/refractor/visitors/open-api-3-0/parameter/index.cjs +40 -0
- package/src/refractor/visitors/open-api-3-0/parameter/index.mjs +34 -0
- package/src/refractor/visitors/open-api-3-0/parameter/index.ts +49 -0
- package/src/refractor/visitors/open-api-3-0/path-item/$RefVisitor.cjs +16 -0
- package/src/refractor/visitors/open-api-3-0/path-item/$RefVisitor.mjs +11 -0
- package/src/refractor/visitors/open-api-3-0/path-item/$RefVisitor.ts +20 -0
- package/src/refractor/visitors/open-api-3-0/path-item/ParametersVisitor.cjs +17 -0
- package/src/refractor/visitors/open-api-3-0/path-item/ParametersVisitor.mjs +12 -0
- package/src/refractor/visitors/open-api-3-0/path-item/ParametersVisitor.ts +18 -0
- package/src/refractor/visitors/open-api-3-0/path-item/ServersVisitor.cjs +17 -0
- package/src/refractor/visitors/open-api-3-0/path-item/ServersVisitor.mjs +12 -0
- package/src/refractor/visitors/open-api-3-0/path-item/ServersVisitor.ts +18 -0
- package/src/refractor/visitors/open-api-3-0/path-item/index.cjs +42 -0
- package/src/refractor/visitors/open-api-3-0/path-item/index.mjs +36 -0
- package/src/refractor/visitors/open-api-3-0/path-item/index.ts +53 -0
- package/src/refractor/visitors/open-api-3-0/paths/index.cjs +40 -0
- package/src/refractor/visitors/open-api-3-0/paths/index.mjs +34 -0
- package/src/refractor/visitors/open-api-3-0/paths/index.ts +51 -0
- package/src/refractor/visitors/open-api-3-0/reference/$RefVisitor.cjs +16 -0
- package/src/refractor/visitors/open-api-3-0/reference/$RefVisitor.mjs +11 -0
- package/src/refractor/visitors/open-api-3-0/reference/$RefVisitor.ts +20 -0
- package/src/refractor/visitors/open-api-3-0/reference/index.cjs +33 -0
- package/src/refractor/visitors/open-api-3-0/reference/index.mjs +27 -0
- package/src/refractor/visitors/open-api-3-0/reference/index.ts +41 -0
- package/src/refractor/visitors/open-api-3-0/request-body/ContentVisitor.cjs +17 -0
- package/src/refractor/visitors/open-api-3-0/request-body/ContentVisitor.mjs +12 -0
- package/src/refractor/visitors/open-api-3-0/request-body/ContentVisitor.ts +18 -0
- package/src/refractor/visitors/open-api-3-0/request-body/index.cjs +39 -0
- package/src/refractor/visitors/open-api-3-0/request-body/index.mjs +33 -0
- package/src/refractor/visitors/open-api-3-0/request-body/index.ts +46 -0
- package/src/refractor/visitors/open-api-3-0/response/ContentVisitor.cjs +17 -0
- package/src/refractor/visitors/open-api-3-0/response/ContentVisitor.mjs +12 -0
- package/src/refractor/visitors/open-api-3-0/response/ContentVisitor.ts +18 -0
- package/src/refractor/visitors/open-api-3-0/response/HeadersVisitor.cjs +42 -0
- package/src/refractor/visitors/open-api-3-0/response/HeadersVisitor.mjs +36 -0
- package/src/refractor/visitors/open-api-3-0/response/HeadersVisitor.ts +57 -0
- package/src/refractor/visitors/open-api-3-0/response/LinksVisitor.cjs +32 -0
- package/src/refractor/visitors/open-api-3-0/response/LinksVisitor.mjs +26 -0
- package/src/refractor/visitors/open-api-3-0/response/LinksVisitor.ts +45 -0
- package/src/refractor/visitors/open-api-3-0/response/index.cjs +47 -0
- package/src/refractor/visitors/open-api-3-0/response/index.mjs +41 -0
- package/src/refractor/visitors/open-api-3-0/response/index.ts +57 -0
- package/src/refractor/visitors/open-api-3-0/responses/DefaultVisitor.cjs +40 -0
- package/src/refractor/visitors/open-api-3-0/responses/DefaultVisitor.mjs +34 -0
- package/src/refractor/visitors/open-api-3-0/responses/DefaultVisitor.ts +39 -0
- package/src/refractor/visitors/open-api-3-0/responses/index.cjs +46 -0
- package/src/refractor/visitors/open-api-3-0/responses/index.mjs +40 -0
- package/src/refractor/visitors/open-api-3-0/responses/index.ts +64 -0
- package/src/refractor/visitors/open-api-3-0/schema/AllOfVisitor.cjs +25 -0
- package/src/refractor/visitors/open-api-3-0/schema/AllOfVisitor.mjs +21 -0
- package/src/refractor/visitors/open-api-3-0/schema/AllOfVisitor.ts +34 -0
- package/src/refractor/visitors/open-api-3-0/schema/AnyOfVisitor.cjs +25 -0
- package/src/refractor/visitors/open-api-3-0/schema/AnyOfVisitor.mjs +21 -0
- package/src/refractor/visitors/open-api-3-0/schema/AnyOfVisitor.ts +34 -0
- package/src/refractor/visitors/open-api-3-0/schema/ItemsVisitor.cjs +22 -0
- package/src/refractor/visitors/open-api-3-0/schema/ItemsVisitor.mjs +19 -0
- package/src/refractor/visitors/open-api-3-0/schema/ItemsVisitor.ts +31 -0
- package/src/refractor/visitors/open-api-3-0/schema/OneOfVisitor.cjs +25 -0
- package/src/refractor/visitors/open-api-3-0/schema/OneOfVisitor.mjs +21 -0
- package/src/refractor/visitors/open-api-3-0/schema/OneOfVisitor.ts +34 -0
- package/src/refractor/visitors/open-api-3-0/schema/PropertiesVisitor.cjs +25 -0
- package/src/refractor/visitors/open-api-3-0/schema/PropertiesVisitor.mjs +21 -0
- package/src/refractor/visitors/open-api-3-0/schema/PropertiesVisitor.ts +34 -0
- package/src/refractor/visitors/open-api-3-0/schema/SchemaOrReferenceVisitor.cjs +23 -0
- package/src/refractor/visitors/open-api-3-0/schema/SchemaOrReferenceVisitor.mjs +19 -0
- package/src/refractor/visitors/open-api-3-0/schema/SchemaOrReferenceVisitor.ts +36 -0
- package/src/refractor/visitors/open-api-3-0/schema/TypeVisitor.cjs +19 -0
- package/src/refractor/visitors/open-api-3-0/schema/TypeVisitor.mjs +15 -0
- package/src/refractor/visitors/open-api-3-0/schema/TypeVisitor.ts +26 -0
- package/src/refractor/visitors/open-api-3-0/schema/index.cjs +24 -0
- package/src/refractor/visitors/open-api-3-0/schema/index.mjs +18 -0
- package/src/refractor/visitors/open-api-3-0/schema/index.ts +30 -0
- package/src/refractor/visitors/open-api-3-0/security-requirement/index.cjs +19 -0
- package/src/refractor/visitors/open-api-3-0/security-requirement/index.mjs +14 -0
- package/src/refractor/visitors/open-api-3-0/security-requirement/index.ts +24 -0
- package/src/refractor/visitors/open-api-3-0/security-scheme/index.cjs +20 -0
- package/src/refractor/visitors/open-api-3-0/security-scheme/index.mjs +15 -0
- package/src/refractor/visitors/open-api-3-0/security-scheme/index.ts +27 -0
- package/src/refractor/visitors/open-api-3-0/server/UrlVisitor.cjs +16 -0
- package/src/refractor/visitors/open-api-3-0/server/UrlVisitor.mjs +11 -0
- package/src/refractor/visitors/open-api-3-0/server/UrlVisitor.ts +20 -0
- package/src/refractor/visitors/open-api-3-0/server/VariablesVisitor.cjs +19 -0
- package/src/refractor/visitors/open-api-3-0/server/VariablesVisitor.mjs +14 -0
- package/src/refractor/visitors/open-api-3-0/server/VariablesVisitor.ts +24 -0
- package/src/refractor/visitors/open-api-3-0/server/index.cjs +20 -0
- package/src/refractor/visitors/open-api-3-0/server/index.mjs +15 -0
- package/src/refractor/visitors/open-api-3-0/server/index.ts +27 -0
- package/src/refractor/visitors/open-api-3-0/server-variable/index.cjs +20 -0
- package/src/refractor/visitors/open-api-3-0/server-variable/index.mjs +15 -0
- package/src/refractor/visitors/open-api-3-0/server-variable/index.ts +27 -0
- package/src/refractor/visitors/open-api-3-0/tag/index.cjs +20 -0
- package/src/refractor/visitors/open-api-3-0/tag/index.mjs +15 -0
- package/src/refractor/visitors/open-api-3-0/tag/index.ts +27 -0
- package/src/refractor/visitors/open-api-3-0/xml/index.cjs +20 -0
- package/src/refractor/visitors/open-api-3-0/xml/index.mjs +15 -0
- package/src/refractor/visitors/open-api-3-0/xml/index.ts +27 -0
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { isStringElement, MemberElement, cloneDeep } from '@speclynx/apidom-datamodel';
|
|
2
|
+
import { toValue } from '@speclynx/apidom-core';
|
|
3
|
+
import SpecificationVisitor from "../SpecificationVisitor.mjs";
|
|
4
|
+
import { isOpenApiExtension } from "../../predicates.mjs";
|
|
5
|
+
/**
|
|
6
|
+
* @public
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* @public
|
|
10
|
+
*/
|
|
11
|
+
/**
|
|
12
|
+
* @public
|
|
13
|
+
*/
|
|
14
|
+
class FixedFieldsVisitor extends SpecificationVisitor {
|
|
15
|
+
specPath;
|
|
16
|
+
ignoredFields;
|
|
17
|
+
canSupportSpecificationExtensions = true;
|
|
18
|
+
specificationExtensionPredicate = isOpenApiExtension;
|
|
19
|
+
constructor({
|
|
20
|
+
specPath,
|
|
21
|
+
ignoredFields,
|
|
22
|
+
canSupportSpecificationExtensions,
|
|
23
|
+
specificationExtensionPredicate,
|
|
24
|
+
...rest
|
|
25
|
+
}) {
|
|
26
|
+
super({
|
|
27
|
+
...rest
|
|
28
|
+
});
|
|
29
|
+
this.specPath = specPath;
|
|
30
|
+
this.ignoredFields = ignoredFields || [];
|
|
31
|
+
if (typeof canSupportSpecificationExtensions === 'boolean') {
|
|
32
|
+
this.canSupportSpecificationExtensions = canSupportSpecificationExtensions;
|
|
33
|
+
}
|
|
34
|
+
if (typeof specificationExtensionPredicate === 'function') {
|
|
35
|
+
this.specificationExtensionPredicate = specificationExtensionPredicate;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
ObjectElement(path) {
|
|
39
|
+
const objectElement = path.node;
|
|
40
|
+
const specPath = this.specPath(objectElement);
|
|
41
|
+
const fields = this.retrieveFixedFields(specPath);
|
|
42
|
+
|
|
43
|
+
// @ts-ignore
|
|
44
|
+
objectElement.forEach((value, key, memberElement) => {
|
|
45
|
+
const keyValue = toValue(key);
|
|
46
|
+
if (isStringElement(key) && fields.includes(keyValue) && !this.ignoredFields.includes(keyValue)) {
|
|
47
|
+
const fixedFieldElement = this.toRefractedElement([...specPath, 'fixedFields', keyValue], value);
|
|
48
|
+
const newMemberElement = new MemberElement(this.consume ? key : cloneDeep(key), fixedFieldElement);
|
|
49
|
+
this.copyMetaAndAttributes(memberElement, newMemberElement);
|
|
50
|
+
this.element.content.push(newMemberElement);
|
|
51
|
+
// consume: release processed generic subtree
|
|
52
|
+
if (this.consume && this.consumeSafe && !memberElement.isFrozen) memberElement.value = undefined;
|
|
53
|
+
} else if (this.canSupportSpecificationExtensions && this.specificationExtensionPredicate(memberElement)) {
|
|
54
|
+
const extensionElement = this.toRefractedElement(['document', 'extension'], memberElement);
|
|
55
|
+
this.element.content.push(extensionElement);
|
|
56
|
+
// consume: release processed generic subtree
|
|
57
|
+
if (this.consume && this.consumeSafe && !memberElement.isFrozen) {
|
|
58
|
+
memberElement.value = undefined;
|
|
59
|
+
}
|
|
60
|
+
} else if (!this.ignoredFields.includes(keyValue)) {
|
|
61
|
+
this.element.content.push(this.consume ? memberElement : cloneDeep(memberElement));
|
|
62
|
+
}
|
|
63
|
+
});
|
|
64
|
+
this.copyMetaAndAttributes(objectElement, this.element);
|
|
65
|
+
path.stop();
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
export default FixedFieldsVisitor;
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
import {
|
|
2
|
+
isStringElement,
|
|
3
|
+
MemberElement,
|
|
4
|
+
Element,
|
|
5
|
+
ObjectElement,
|
|
6
|
+
cloneDeep,
|
|
7
|
+
} from '@speclynx/apidom-datamodel';
|
|
8
|
+
import { toValue } from '@speclynx/apidom-core';
|
|
9
|
+
import { Path } from '@speclynx/apidom-traverse';
|
|
10
|
+
|
|
11
|
+
import SpecificationVisitor, { SpecificationVisitorOptions } from '../SpecificationVisitor.ts';
|
|
12
|
+
import { isOpenApiExtension } from '../../predicates.ts';
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* @public
|
|
16
|
+
*/
|
|
17
|
+
export type SpecPath<T = string[]> = (element: unknown) => T;
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* @public
|
|
21
|
+
*/
|
|
22
|
+
export interface FixedFieldsVisitorOptions extends SpecificationVisitorOptions {
|
|
23
|
+
readonly specPath: SpecPath;
|
|
24
|
+
readonly ignoredFields?: string[];
|
|
25
|
+
readonly canSupportSpecificationExtensions?: boolean;
|
|
26
|
+
readonly specificationExtensionPredicate?: typeof isOpenApiExtension;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* @public
|
|
31
|
+
*/
|
|
32
|
+
class FixedFieldsVisitor extends SpecificationVisitor {
|
|
33
|
+
protected specPath: SpecPath;
|
|
34
|
+
|
|
35
|
+
protected ignoredFields: string[];
|
|
36
|
+
|
|
37
|
+
protected canSupportSpecificationExtensions: boolean = true;
|
|
38
|
+
|
|
39
|
+
protected specificationExtensionPredicate = isOpenApiExtension;
|
|
40
|
+
|
|
41
|
+
constructor({
|
|
42
|
+
specPath,
|
|
43
|
+
ignoredFields,
|
|
44
|
+
canSupportSpecificationExtensions,
|
|
45
|
+
specificationExtensionPredicate,
|
|
46
|
+
...rest
|
|
47
|
+
}: FixedFieldsVisitorOptions) {
|
|
48
|
+
super({ ...rest });
|
|
49
|
+
this.specPath = specPath;
|
|
50
|
+
this.ignoredFields = ignoredFields || [];
|
|
51
|
+
|
|
52
|
+
if (typeof canSupportSpecificationExtensions === 'boolean') {
|
|
53
|
+
this.canSupportSpecificationExtensions = canSupportSpecificationExtensions;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
if (typeof specificationExtensionPredicate === 'function') {
|
|
57
|
+
this.specificationExtensionPredicate = specificationExtensionPredicate;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
ObjectElement(path: Path<ObjectElement>) {
|
|
62
|
+
const objectElement = path.node;
|
|
63
|
+
const specPath = this.specPath(objectElement);
|
|
64
|
+
const fields = this.retrieveFixedFields(specPath);
|
|
65
|
+
|
|
66
|
+
// @ts-ignore
|
|
67
|
+
objectElement.forEach((value: Element, key: Element, memberElement: MemberElement) => {
|
|
68
|
+
const keyValue = toValue(key) as string;
|
|
69
|
+
if (
|
|
70
|
+
isStringElement(key) &&
|
|
71
|
+
fields.includes(keyValue) &&
|
|
72
|
+
!this.ignoredFields.includes(keyValue)
|
|
73
|
+
) {
|
|
74
|
+
const fixedFieldElement = this.toRefractedElement(
|
|
75
|
+
[...specPath, 'fixedFields', keyValue],
|
|
76
|
+
value,
|
|
77
|
+
);
|
|
78
|
+
const newMemberElement = new MemberElement(
|
|
79
|
+
this.consume ? key : cloneDeep(key),
|
|
80
|
+
fixedFieldElement,
|
|
81
|
+
);
|
|
82
|
+
this.copyMetaAndAttributes(memberElement, newMemberElement);
|
|
83
|
+
(this.element.content as Element[]).push(newMemberElement);
|
|
84
|
+
// consume: release processed generic subtree
|
|
85
|
+
if (this.consume && this.consumeSafe && !memberElement.isFrozen)
|
|
86
|
+
memberElement.value = undefined;
|
|
87
|
+
} else if (
|
|
88
|
+
this.canSupportSpecificationExtensions &&
|
|
89
|
+
this.specificationExtensionPredicate(memberElement)
|
|
90
|
+
) {
|
|
91
|
+
const extensionElement = this.toRefractedElement(['document', 'extension'], memberElement);
|
|
92
|
+
(this.element.content as Element[]).push(extensionElement);
|
|
93
|
+
// consume: release processed generic subtree
|
|
94
|
+
if (this.consume && this.consumeSafe && !memberElement.isFrozen) {
|
|
95
|
+
memberElement.value = undefined;
|
|
96
|
+
}
|
|
97
|
+
} else if (!this.ignoredFields.includes(keyValue)) {
|
|
98
|
+
(this.element.content as Element[]).push(
|
|
99
|
+
this.consume ? memberElement : cloneDeep(memberElement),
|
|
100
|
+
);
|
|
101
|
+
}
|
|
102
|
+
});
|
|
103
|
+
|
|
104
|
+
this.copyMetaAndAttributes(objectElement, this.element);
|
|
105
|
+
|
|
106
|
+
path.stop();
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
export default FixedFieldsVisitor;
|
|
@@ -0,0 +1,21 @@
|
|
|
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 _ramdaAdjunct = require("ramda-adjunct");
|
|
7
|
+
var _PatternedFieldsVisitor = _interopRequireDefault(require("./PatternedFieldsVisitor.cjs"));
|
|
8
|
+
/**
|
|
9
|
+
* @public
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* @public
|
|
14
|
+
*/
|
|
15
|
+
class MapVisitor extends _PatternedFieldsVisitor.default {
|
|
16
|
+
constructor(options) {
|
|
17
|
+
super(options);
|
|
18
|
+
this.fieldPatternPredicate = _ramdaAdjunct.isNonEmptyString;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
var _default = exports.default = MapVisitor;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { isNonEmptyString } from 'ramda-adjunct';
|
|
2
|
+
import PatternedFieldsVisitor from "./PatternedFieldsVisitor.mjs";
|
|
3
|
+
/**
|
|
4
|
+
* @public
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* @public
|
|
8
|
+
*/
|
|
9
|
+
class MapVisitor extends PatternedFieldsVisitor {
|
|
10
|
+
constructor(options) {
|
|
11
|
+
super(options);
|
|
12
|
+
this.fieldPatternPredicate = isNonEmptyString;
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
export default MapVisitor;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { isNonEmptyString } from 'ramda-adjunct';
|
|
2
|
+
|
|
3
|
+
import PatternedFieldsVisitor, {
|
|
4
|
+
PatternedFieldsVisitorOptions,
|
|
5
|
+
SpecPath,
|
|
6
|
+
} from './PatternedFieldsVisitor.ts';
|
|
7
|
+
|
|
8
|
+
export type { SpecPath };
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* @public
|
|
12
|
+
*/
|
|
13
|
+
export interface MapVisitorOptions extends PatternedFieldsVisitorOptions {}
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* @public
|
|
17
|
+
*/
|
|
18
|
+
class MapVisitor extends PatternedFieldsVisitor {
|
|
19
|
+
constructor(options: MapVisitorOptions) {
|
|
20
|
+
super(options);
|
|
21
|
+
this.fieldPatternPredicate = isNonEmptyString;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
export default MapVisitor;
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault").default;
|
|
4
|
+
exports.__esModule = true;
|
|
5
|
+
exports.default = exports.MixedFieldsVisitorBase = void 0;
|
|
6
|
+
var _tsMixer = require("ts-mixer");
|
|
7
|
+
var _ramda = require("ramda");
|
|
8
|
+
var _apidomCore = require("@speclynx/apidom-core");
|
|
9
|
+
var _FixedFieldsVisitor = _interopRequireDefault(require("./FixedFieldsVisitor.cjs"));
|
|
10
|
+
var _PatternedFieldsVisitor = _interopRequireDefault(require("./PatternedFieldsVisitor.cjs"));
|
|
11
|
+
/**
|
|
12
|
+
* @public
|
|
13
|
+
*/
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Base class for MixedFieldsVisitor combining FixedFieldsVisitor and PatternedFieldsVisitor.
|
|
17
|
+
* @public
|
|
18
|
+
*/
|
|
19
|
+
const MixedFieldsVisitorBase = exports.MixedFieldsVisitorBase = (0, _tsMixer.Mixin)(_FixedFieldsVisitor.default, _PatternedFieldsVisitor.default);
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* @public
|
|
23
|
+
*/
|
|
24
|
+
class MixedFieldsVisitor extends MixedFieldsVisitorBase {
|
|
25
|
+
specPathFixedFields;
|
|
26
|
+
specPathPatternedFields;
|
|
27
|
+
constructor({
|
|
28
|
+
specPathFixedFields,
|
|
29
|
+
specPathPatternedFields,
|
|
30
|
+
...rest
|
|
31
|
+
}) {
|
|
32
|
+
super({
|
|
33
|
+
...rest
|
|
34
|
+
});
|
|
35
|
+
this.specPathFixedFields = specPathFixedFields;
|
|
36
|
+
this.specPathPatternedFields = specPathPatternedFields;
|
|
37
|
+
}
|
|
38
|
+
ObjectElement(path) {
|
|
39
|
+
const objectElement = path.node;
|
|
40
|
+
const {
|
|
41
|
+
specPath,
|
|
42
|
+
ignoredFields
|
|
43
|
+
} = this;
|
|
44
|
+
try {
|
|
45
|
+
this.specPath = this.specPathFixedFields;
|
|
46
|
+
const fixedFields = this.retrieveFixedFields(this.specPath(objectElement));
|
|
47
|
+
// let FixedFieldsVisitor only process fixed fields and leave rest to PatternedFieldsVisitor
|
|
48
|
+
// @ts-ignore
|
|
49
|
+
this.ignoredFields = [...ignoredFields, ...(0, _ramda.difference)(objectElement.keys(), fixedFields)];
|
|
50
|
+
_FixedFieldsVisitor.default.prototype.ObjectElement.call(this, path);
|
|
51
|
+
this.specPath = this.specPathPatternedFields;
|
|
52
|
+
this.ignoredFields = fixedFields;
|
|
53
|
+
_PatternedFieldsVisitor.default.prototype.ObjectElement.call(this, path);
|
|
54
|
+
|
|
55
|
+
// reorder this.element members by original objectElement keys
|
|
56
|
+
const objectElementKeys = objectElement.keys();
|
|
57
|
+
this.element.content.sort((a, b) => {
|
|
58
|
+
return objectElementKeys.indexOf((0, _apidomCore.toValue)(a.key)) - objectElementKeys.indexOf((0, _apidomCore.toValue)(b.key));
|
|
59
|
+
});
|
|
60
|
+
} catch (e) {
|
|
61
|
+
this.specPath = specPath;
|
|
62
|
+
throw e;
|
|
63
|
+
}
|
|
64
|
+
path.stop();
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
var _default = exports.default = MixedFieldsVisitor;
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { Mixin } from 'ts-mixer';
|
|
2
|
+
import { difference } from 'ramda';
|
|
3
|
+
import { toValue } from '@speclynx/apidom-core';
|
|
4
|
+
import FixedFieldsVisitor from "./FixedFieldsVisitor.mjs";
|
|
5
|
+
import PatternedFieldsVisitor from "./PatternedFieldsVisitor.mjs";
|
|
6
|
+
/**
|
|
7
|
+
* @public
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* Base class for MixedFieldsVisitor combining FixedFieldsVisitor and PatternedFieldsVisitor.
|
|
11
|
+
* @public
|
|
12
|
+
*/
|
|
13
|
+
export const MixedFieldsVisitorBase = Mixin(FixedFieldsVisitor, PatternedFieldsVisitor);
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* @public
|
|
17
|
+
*/
|
|
18
|
+
class MixedFieldsVisitor extends MixedFieldsVisitorBase {
|
|
19
|
+
specPathFixedFields;
|
|
20
|
+
specPathPatternedFields;
|
|
21
|
+
constructor({
|
|
22
|
+
specPathFixedFields,
|
|
23
|
+
specPathPatternedFields,
|
|
24
|
+
...rest
|
|
25
|
+
}) {
|
|
26
|
+
super({
|
|
27
|
+
...rest
|
|
28
|
+
});
|
|
29
|
+
this.specPathFixedFields = specPathFixedFields;
|
|
30
|
+
this.specPathPatternedFields = specPathPatternedFields;
|
|
31
|
+
}
|
|
32
|
+
ObjectElement(path) {
|
|
33
|
+
const objectElement = path.node;
|
|
34
|
+
const {
|
|
35
|
+
specPath,
|
|
36
|
+
ignoredFields
|
|
37
|
+
} = this;
|
|
38
|
+
try {
|
|
39
|
+
this.specPath = this.specPathFixedFields;
|
|
40
|
+
const fixedFields = this.retrieveFixedFields(this.specPath(objectElement));
|
|
41
|
+
// let FixedFieldsVisitor only process fixed fields and leave rest to PatternedFieldsVisitor
|
|
42
|
+
// @ts-ignore
|
|
43
|
+
this.ignoredFields = [...ignoredFields, ...difference(objectElement.keys(), fixedFields)];
|
|
44
|
+
FixedFieldsVisitor.prototype.ObjectElement.call(this, path);
|
|
45
|
+
this.specPath = this.specPathPatternedFields;
|
|
46
|
+
this.ignoredFields = fixedFields;
|
|
47
|
+
PatternedFieldsVisitor.prototype.ObjectElement.call(this, path);
|
|
48
|
+
|
|
49
|
+
// reorder this.element members by original objectElement keys
|
|
50
|
+
const objectElementKeys = objectElement.keys();
|
|
51
|
+
this.element.content.sort((a, b) => {
|
|
52
|
+
return objectElementKeys.indexOf(toValue(a.key)) - objectElementKeys.indexOf(toValue(b.key));
|
|
53
|
+
});
|
|
54
|
+
} catch (e) {
|
|
55
|
+
this.specPath = specPath;
|
|
56
|
+
throw e;
|
|
57
|
+
}
|
|
58
|
+
path.stop();
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
export default MixedFieldsVisitor;
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import { Mixin } from 'ts-mixer';
|
|
2
|
+
import { difference } from 'ramda';
|
|
3
|
+
import { ObjectElement, MemberElement, Element } from '@speclynx/apidom-datamodel';
|
|
4
|
+
import { toValue } from '@speclynx/apidom-core';
|
|
5
|
+
import { Path } from '@speclynx/apidom-traverse';
|
|
6
|
+
|
|
7
|
+
import FixedFieldsVisitor, { SpecPath } from './FixedFieldsVisitor.ts';
|
|
8
|
+
import PatternedFieldsVisitor, { PatternedFieldsVisitorOptions } from './PatternedFieldsVisitor.ts';
|
|
9
|
+
|
|
10
|
+
export type { SpecPath };
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* @public
|
|
14
|
+
*/
|
|
15
|
+
export interface MixedFieldsVisitorOptions extends PatternedFieldsVisitorOptions {
|
|
16
|
+
readonly specPathFixedFields: SpecPath;
|
|
17
|
+
readonly specPathPatternedFields: SpecPath;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* Base class for MixedFieldsVisitor combining FixedFieldsVisitor and PatternedFieldsVisitor.
|
|
22
|
+
* @public
|
|
23
|
+
*/
|
|
24
|
+
export const MixedFieldsVisitorBase = Mixin(FixedFieldsVisitor, PatternedFieldsVisitor);
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* @public
|
|
28
|
+
*/
|
|
29
|
+
class MixedFieldsVisitor extends MixedFieldsVisitorBase {
|
|
30
|
+
protected readonly specPathFixedFields: SpecPath;
|
|
31
|
+
|
|
32
|
+
protected readonly specPathPatternedFields: SpecPath;
|
|
33
|
+
|
|
34
|
+
constructor({
|
|
35
|
+
specPathFixedFields,
|
|
36
|
+
specPathPatternedFields,
|
|
37
|
+
...rest
|
|
38
|
+
}: MixedFieldsVisitorOptions) {
|
|
39
|
+
super({ ...rest });
|
|
40
|
+
this.specPathFixedFields = specPathFixedFields;
|
|
41
|
+
this.specPathPatternedFields = specPathPatternedFields;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
ObjectElement(path: Path<ObjectElement>) {
|
|
45
|
+
const objectElement = path.node;
|
|
46
|
+
const { specPath, ignoredFields } = this;
|
|
47
|
+
|
|
48
|
+
try {
|
|
49
|
+
this.specPath = this.specPathFixedFields;
|
|
50
|
+
const fixedFields = this.retrieveFixedFields(this.specPath(objectElement));
|
|
51
|
+
// let FixedFieldsVisitor only process fixed fields and leave rest to PatternedFieldsVisitor
|
|
52
|
+
// @ts-ignore
|
|
53
|
+
this.ignoredFields = [...ignoredFields, ...difference(objectElement.keys(), fixedFields)];
|
|
54
|
+
FixedFieldsVisitor.prototype.ObjectElement.call(this, path);
|
|
55
|
+
|
|
56
|
+
this.specPath = this.specPathPatternedFields;
|
|
57
|
+
this.ignoredFields = fixedFields;
|
|
58
|
+
PatternedFieldsVisitor.prototype.ObjectElement.call(this, path);
|
|
59
|
+
|
|
60
|
+
// reorder this.element members by original objectElement keys
|
|
61
|
+
const objectElementKeys = objectElement.keys() as string[];
|
|
62
|
+
(this.element.content as Element[]).sort((a: unknown, b: unknown) => {
|
|
63
|
+
return (
|
|
64
|
+
objectElementKeys.indexOf(toValue((a as MemberElement).key) as string) -
|
|
65
|
+
objectElementKeys.indexOf(toValue((b as MemberElement).key) as string)
|
|
66
|
+
);
|
|
67
|
+
});
|
|
68
|
+
} catch (e) {
|
|
69
|
+
this.specPath = specPath;
|
|
70
|
+
throw e;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
path.stop();
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
export default MixedFieldsVisitor;
|
|
@@ -0,0 +1,72 @@
|
|
|
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 _ramda = require("ramda");
|
|
7
|
+
var _apidomDatamodel = require("@speclynx/apidom-datamodel");
|
|
8
|
+
var _apidomCore = require("@speclynx/apidom-core");
|
|
9
|
+
var _SpecificationVisitor = _interopRequireDefault(require("../SpecificationVisitor.cjs"));
|
|
10
|
+
var _predicates = require("../../predicates.cjs");
|
|
11
|
+
/**
|
|
12
|
+
* @public
|
|
13
|
+
*/
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* @public
|
|
17
|
+
*/
|
|
18
|
+
class PatternedFieldsVisitor extends _SpecificationVisitor.default {
|
|
19
|
+
specPath;
|
|
20
|
+
ignoredFields;
|
|
21
|
+
fieldPatternPredicate = _ramda.F;
|
|
22
|
+
canSupportSpecificationExtensions = false;
|
|
23
|
+
specificationExtensionPredicate = _predicates.isOpenApiExtension;
|
|
24
|
+
constructor({
|
|
25
|
+
specPath,
|
|
26
|
+
ignoredFields,
|
|
27
|
+
fieldPatternPredicate,
|
|
28
|
+
canSupportSpecificationExtensions,
|
|
29
|
+
specificationExtensionPredicate,
|
|
30
|
+
...rest
|
|
31
|
+
}) {
|
|
32
|
+
super({
|
|
33
|
+
...rest
|
|
34
|
+
});
|
|
35
|
+
this.specPath = specPath;
|
|
36
|
+
this.ignoredFields = ignoredFields || [];
|
|
37
|
+
if (typeof fieldPatternPredicate === 'function') {
|
|
38
|
+
this.fieldPatternPredicate = fieldPatternPredicate;
|
|
39
|
+
}
|
|
40
|
+
if (typeof canSupportSpecificationExtensions === 'boolean') {
|
|
41
|
+
this.canSupportSpecificationExtensions = canSupportSpecificationExtensions;
|
|
42
|
+
}
|
|
43
|
+
if (typeof specificationExtensionPredicate === 'function') {
|
|
44
|
+
this.specificationExtensionPredicate = specificationExtensionPredicate;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
ObjectElement(path) {
|
|
48
|
+
const objectElement = path.node;
|
|
49
|
+
// @ts-ignore
|
|
50
|
+
objectElement.forEach((value, key, memberElement) => {
|
|
51
|
+
const keyValue = (0, _apidomCore.toValue)(key);
|
|
52
|
+
if (this.canSupportSpecificationExtensions && this.specificationExtensionPredicate(memberElement)) {
|
|
53
|
+
const extensionElement = this.toRefractedElement(['document', 'extension'], memberElement);
|
|
54
|
+
this.element.content.push(extensionElement);
|
|
55
|
+
} else if (!this.ignoredFields.includes(keyValue) && this.fieldPatternPredicate(keyValue)) {
|
|
56
|
+
const specPath = this.specPath(value);
|
|
57
|
+
const patternedFieldElement = this.toRefractedElement(specPath, value);
|
|
58
|
+
const newMemberElement = new _apidomDatamodel.MemberElement(this.consume ? key : (0, _apidomDatamodel.cloneDeep)(key), patternedFieldElement);
|
|
59
|
+
this.copyMetaAndAttributes(memberElement, newMemberElement);
|
|
60
|
+
newMemberElement.classes.push('patterned-field');
|
|
61
|
+
this.element.content.push(newMemberElement);
|
|
62
|
+
// consume: release processed generic subtree
|
|
63
|
+
if (this.consume && this.consumeSafe && !memberElement.isFrozen) memberElement.value = undefined;
|
|
64
|
+
} else if (!this.ignoredFields.includes(keyValue)) {
|
|
65
|
+
this.element.content.push(this.consume ? memberElement : (0, _apidomDatamodel.cloneDeep)(memberElement));
|
|
66
|
+
}
|
|
67
|
+
});
|
|
68
|
+
this.copyMetaAndAttributes(objectElement, this.element);
|
|
69
|
+
path.stop();
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
var _default = exports.default = PatternedFieldsVisitor;
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { F as stubFalse } from 'ramda';
|
|
2
|
+
import { MemberElement, cloneDeep } from '@speclynx/apidom-datamodel';
|
|
3
|
+
import { toValue } from '@speclynx/apidom-core';
|
|
4
|
+
import SpecificationVisitor from "../SpecificationVisitor.mjs";
|
|
5
|
+
import { isOpenApiExtension } from "../../predicates.mjs";
|
|
6
|
+
/**
|
|
7
|
+
* @public
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* @public
|
|
11
|
+
*/
|
|
12
|
+
class PatternedFieldsVisitor extends SpecificationVisitor {
|
|
13
|
+
specPath;
|
|
14
|
+
ignoredFields;
|
|
15
|
+
fieldPatternPredicate = stubFalse;
|
|
16
|
+
canSupportSpecificationExtensions = false;
|
|
17
|
+
specificationExtensionPredicate = isOpenApiExtension;
|
|
18
|
+
constructor({
|
|
19
|
+
specPath,
|
|
20
|
+
ignoredFields,
|
|
21
|
+
fieldPatternPredicate,
|
|
22
|
+
canSupportSpecificationExtensions,
|
|
23
|
+
specificationExtensionPredicate,
|
|
24
|
+
...rest
|
|
25
|
+
}) {
|
|
26
|
+
super({
|
|
27
|
+
...rest
|
|
28
|
+
});
|
|
29
|
+
this.specPath = specPath;
|
|
30
|
+
this.ignoredFields = ignoredFields || [];
|
|
31
|
+
if (typeof fieldPatternPredicate === 'function') {
|
|
32
|
+
this.fieldPatternPredicate = fieldPatternPredicate;
|
|
33
|
+
}
|
|
34
|
+
if (typeof canSupportSpecificationExtensions === 'boolean') {
|
|
35
|
+
this.canSupportSpecificationExtensions = canSupportSpecificationExtensions;
|
|
36
|
+
}
|
|
37
|
+
if (typeof specificationExtensionPredicate === 'function') {
|
|
38
|
+
this.specificationExtensionPredicate = specificationExtensionPredicate;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
ObjectElement(path) {
|
|
42
|
+
const objectElement = path.node;
|
|
43
|
+
// @ts-ignore
|
|
44
|
+
objectElement.forEach((value, key, memberElement) => {
|
|
45
|
+
const keyValue = toValue(key);
|
|
46
|
+
if (this.canSupportSpecificationExtensions && this.specificationExtensionPredicate(memberElement)) {
|
|
47
|
+
const extensionElement = this.toRefractedElement(['document', 'extension'], memberElement);
|
|
48
|
+
this.element.content.push(extensionElement);
|
|
49
|
+
} else if (!this.ignoredFields.includes(keyValue) && this.fieldPatternPredicate(keyValue)) {
|
|
50
|
+
const specPath = this.specPath(value);
|
|
51
|
+
const patternedFieldElement = this.toRefractedElement(specPath, value);
|
|
52
|
+
const newMemberElement = new MemberElement(this.consume ? key : cloneDeep(key), patternedFieldElement);
|
|
53
|
+
this.copyMetaAndAttributes(memberElement, newMemberElement);
|
|
54
|
+
newMemberElement.classes.push('patterned-field');
|
|
55
|
+
this.element.content.push(newMemberElement);
|
|
56
|
+
// consume: release processed generic subtree
|
|
57
|
+
if (this.consume && this.consumeSafe && !memberElement.isFrozen) memberElement.value = undefined;
|
|
58
|
+
} else if (!this.ignoredFields.includes(keyValue)) {
|
|
59
|
+
this.element.content.push(this.consume ? memberElement : cloneDeep(memberElement));
|
|
60
|
+
}
|
|
61
|
+
});
|
|
62
|
+
this.copyMetaAndAttributes(objectElement, this.element);
|
|
63
|
+
path.stop();
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
export default PatternedFieldsVisitor;
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import { F as stubFalse } from 'ramda';
|
|
2
|
+
import { ObjectElement, Element, MemberElement, cloneDeep } from '@speclynx/apidom-datamodel';
|
|
3
|
+
import { toValue } from '@speclynx/apidom-core';
|
|
4
|
+
import { Path } from '@speclynx/apidom-traverse';
|
|
5
|
+
|
|
6
|
+
import SpecificationVisitor, { SpecificationVisitorOptions } from '../SpecificationVisitor.ts';
|
|
7
|
+
import type { SpecPath } from './FixedFieldsVisitor.ts';
|
|
8
|
+
import { isOpenApiExtension } from '../../predicates.ts';
|
|
9
|
+
|
|
10
|
+
export type { SpecPath };
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* @public
|
|
14
|
+
*/
|
|
15
|
+
export interface PatternedFieldsVisitorOptions extends SpecificationVisitorOptions {
|
|
16
|
+
readonly specPath: SpecPath;
|
|
17
|
+
readonly ignoredFields?: string[];
|
|
18
|
+
readonly fieldPatternPredicate?: (...args: unknown[]) => boolean;
|
|
19
|
+
readonly canSupportSpecificationExtensions?: boolean;
|
|
20
|
+
readonly specificationExtensionPredicate?: typeof isOpenApiExtension;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* @public
|
|
25
|
+
*/
|
|
26
|
+
class PatternedFieldsVisitor extends SpecificationVisitor {
|
|
27
|
+
protected specPath: SpecPath;
|
|
28
|
+
|
|
29
|
+
protected ignoredFields: string[];
|
|
30
|
+
|
|
31
|
+
protected fieldPatternPredicate: (value: unknown) => boolean = stubFalse;
|
|
32
|
+
|
|
33
|
+
protected canSupportSpecificationExtensions: boolean = false;
|
|
34
|
+
|
|
35
|
+
protected specificationExtensionPredicate = isOpenApiExtension;
|
|
36
|
+
|
|
37
|
+
constructor({
|
|
38
|
+
specPath,
|
|
39
|
+
ignoredFields,
|
|
40
|
+
fieldPatternPredicate,
|
|
41
|
+
canSupportSpecificationExtensions,
|
|
42
|
+
specificationExtensionPredicate,
|
|
43
|
+
...rest
|
|
44
|
+
}: PatternedFieldsVisitorOptions) {
|
|
45
|
+
super({ ...rest });
|
|
46
|
+
this.specPath = specPath;
|
|
47
|
+
this.ignoredFields = ignoredFields || [];
|
|
48
|
+
|
|
49
|
+
if (typeof fieldPatternPredicate === 'function') {
|
|
50
|
+
this.fieldPatternPredicate = fieldPatternPredicate;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
if (typeof canSupportSpecificationExtensions === 'boolean') {
|
|
54
|
+
this.canSupportSpecificationExtensions = canSupportSpecificationExtensions;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
if (typeof specificationExtensionPredicate === 'function') {
|
|
58
|
+
this.specificationExtensionPredicate = specificationExtensionPredicate;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
ObjectElement(path: Path<ObjectElement>) {
|
|
63
|
+
const objectElement = path.node;
|
|
64
|
+
// @ts-ignore
|
|
65
|
+
objectElement.forEach((value: Element, key: Element, memberElement: MemberElement) => {
|
|
66
|
+
const keyValue = toValue(key) as string;
|
|
67
|
+
if (
|
|
68
|
+
this.canSupportSpecificationExtensions &&
|
|
69
|
+
this.specificationExtensionPredicate(memberElement)
|
|
70
|
+
) {
|
|
71
|
+
const extensionElement = this.toRefractedElement(['document', 'extension'], memberElement);
|
|
72
|
+
(this.element.content as Element[]).push(extensionElement);
|
|
73
|
+
} else if (!this.ignoredFields.includes(keyValue) && this.fieldPatternPredicate(keyValue)) {
|
|
74
|
+
const specPath = this.specPath(value);
|
|
75
|
+
const patternedFieldElement = this.toRefractedElement(specPath, value);
|
|
76
|
+
const newMemberElement = new MemberElement(
|
|
77
|
+
this.consume ? key : cloneDeep(key),
|
|
78
|
+
patternedFieldElement,
|
|
79
|
+
);
|
|
80
|
+
this.copyMetaAndAttributes(memberElement, newMemberElement);
|
|
81
|
+
newMemberElement.classes.push('patterned-field');
|
|
82
|
+
(this.element.content as Element[]).push(newMemberElement);
|
|
83
|
+
// consume: release processed generic subtree
|
|
84
|
+
if (this.consume && this.consumeSafe && !memberElement.isFrozen)
|
|
85
|
+
memberElement.value = undefined;
|
|
86
|
+
} else if (!this.ignoredFields.includes(keyValue)) {
|
|
87
|
+
(this.element.content as Element[]).push(
|
|
88
|
+
this.consume ? memberElement : cloneDeep(memberElement),
|
|
89
|
+
);
|
|
90
|
+
}
|
|
91
|
+
});
|
|
92
|
+
|
|
93
|
+
this.copyMetaAndAttributes(objectElement, this.element);
|
|
94
|
+
|
|
95
|
+
path.stop();
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
export default PatternedFieldsVisitor;
|