Skip to content

Commit

Permalink
feat(oas31): prepare to render JSON Schema 2020-12 in Operations and …
Browse files Browse the repository at this point in the history
…Webhooks (#8670)

Refs #8513
  • Loading branch information
char0n committed May 15, 2023
1 parent bd406ee commit 79e0c4e
Show file tree
Hide file tree
Showing 9 changed files with 302 additions and 10 deletions.
4 changes: 4 additions & 0 deletions src/core/plugins/oas31/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,8 @@ import LicenseWrapper from "./wrap-components/license"
import ContactWrapper from "./wrap-components/contact"
import InfoWrapper from "./wrap-components/info"
import ModelsWrapper from "./wrap-components/models"
import OperationsWrapper from "./wrap-components/operations"
import WebhooksWrapper from "./wrap-components/webhooks"
import VersionPragmaFilterWrapper from "./wrap-components/version-pragma-filter"
import VersionStampWrapper from "./wrap-components/version-stamp"
import {
Expand Down Expand Up @@ -98,6 +100,8 @@ const OAS31Plugin = ({ getSystem }) => {
VersionPragmaFilter: VersionPragmaFilterWrapper,
VersionStamp: VersionStampWrapper,
Models: ModelsWrapper,
Operations: OperationsWrapper,
Webhooks: WebhooksWrapper,
JSONSchema202012KeywordDescription:
JSONSchema202012KeywordDescriptionWrapper,
JSONSchema202012KeywordDefault: JSONSchema202012KeywordDefaultWrapper,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ const Description = ({ schema, getSystem }) => {
}

Description.propTypes = {
schema: PropTypes.oneOfType([PropTypes.object, PropTypes.bool]),
schema: PropTypes.oneOfType([PropTypes.object, PropTypes.bool]).isRequired,
getSystem: PropTypes.func.isRequired,
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -85,7 +85,7 @@ const Discriminator = ({ schema, getSystem }) => {
}

Discriminator.propTypes = {
schema: PropTypes.oneOfType([PropTypes.object, PropTypes.bool]),
schema: PropTypes.oneOfType([PropTypes.object, PropTypes.bool]).isRequired,
getSystem: PropTypes.func.isRequired,
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ const Example = ({ schema, getSystem }) => {
}

Example.propTypes = {
schema: PropTypes.oneOfType([PropTypes.object, PropTypes.bool]),
schema: PropTypes.oneOfType([PropTypes.object, PropTypes.bool]).isRequired,
getSystem: PropTypes.func.isRequired,
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -106,7 +106,7 @@ const ExternalDocs = ({ schema, getSystem }) => {
}

ExternalDocs.propTypes = {
schema: PropTypes.oneOfType([PropTypes.object, PropTypes.bool]),
schema: PropTypes.oneOfType([PropTypes.object, PropTypes.bool]).isRequired,
getSystem: PropTypes.func.isRequired,
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -124,7 +124,7 @@ const Xml = ({ schema, getSystem }) => {
}

Xml.propTypes = {
schema: PropTypes.oneOfType([PropTypes.object, PropTypes.bool]),
schema: PropTypes.oneOfType([PropTypes.object, PropTypes.bool]).isRequired,
getSystem: PropTypes.func.isRequired,
}

Expand Down
10 changes: 5 additions & 5 deletions src/core/plugins/oas31/wrap-components/models.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,8 @@ const ModelsWrapper = createOnlyOAS31ComponentWrapper(({ getSystem }) => {
const { getComponent, fn, getConfigs } = system
const configs = getConfigs()

if (ModelsWrapper.ModelsWithJSONContext) {
return <ModelsWrapper.ModelsWithJSONContext />
if (ModelsWrapper.ModelsWithJSONSchemaContext) {
return <ModelsWrapper.ModelsWithJSONSchemaContext />
}

const Models = getComponent("OAS31Models", true)
Expand Down Expand Up @@ -78,7 +78,7 @@ const ModelsWrapper = createOnlyOAS31ComponentWrapper(({ getSystem }) => {
const ChevronRightIcon = getComponent("JSONSchema202012ChevronRightIcon")
const withSchemaContext = getComponent("withJSONSchema202012Context")

ModelsWrapper.ModelsWithJSONContext = withSchemaContext(Models, {
ModelsWrapper.ModelsWithJSONSchemaContext = withSchemaContext(Models, {
config: {
default$schema: "https://spec.openapis.org/oas/3.1/dialect/base",
defaultExpandedLevels: configs.defaultModelsExpandDepth - 1,
Expand Down Expand Up @@ -133,9 +133,9 @@ const ModelsWrapper = createOnlyOAS31ComponentWrapper(({ getSystem }) => {
},
})

return <ModelsWrapper.ModelsWithJSONContext />
return <ModelsWrapper.ModelsWithJSONSchemaContext />
})

ModelsWrapper.ModelsWithJSONContext = null
ModelsWrapper.ModelsWithJSONSchemaContext = null

export default ModelsWrapper
147 changes: 147 additions & 0 deletions src/core/plugins/oas31/wrap-components/operations.jsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,147 @@
/**
* @prettier
*/
import React from "react"

import { createOnlyOAS31ComponentWrapper } from "../fn"
import { makeIsExpandable } from "../json-schema-2020-12-extensions/fn"

const OperationsWrapper = createOnlyOAS31ComponentWrapper(({ getSystem }) => {
const system = getSystem()
const { getComponent, fn, getConfigs } = system
const configs = getConfigs()

if (OperationsWrapper.OperationsWithJSONSchemaContext) {
return <OperationsWrapper.OperationsWithJSONSchemaContext />
}

const Operations = getComponent("operations", true)
const JSONSchema = getComponent("JSONSchema202012")
const Keyword$schema = getComponent("JSONSchema202012Keyword$schema")
const Keyword$vocabulary = getComponent("JSONSchema202012Keyword$vocabulary")
const Keyword$id = getComponent("JSONSchema202012Keyword$id")
const Keyword$anchor = getComponent("JSONSchema202012Keyword$anchor")
const Keyword$dynamicAnchor = getComponent(
"JSONSchema202012Keyword$dynamicAnchor"
)
const Keyword$ref = getComponent("JSONSchema202012Keyword$ref")
const Keyword$dynamicRef = getComponent("JSONSchema202012Keyword$dynamicRef")
const Keyword$defs = getComponent("JSONSchema202012Keyword$defs")
const Keyword$comment = getComponent("JSONSchema202012Keyword$comment")
const KeywordAllOf = getComponent("JSONSchema202012KeywordAllOf")
const KeywordAnyOf = getComponent("JSONSchema202012KeywordAnyOf")
const KeywordOneOf = getComponent("JSONSchema202012KeywordOneOf")
const KeywordNot = getComponent("JSONSchema202012KeywordNot")
const KeywordIf = getComponent("JSONSchema202012KeywordIf")
const KeywordThen = getComponent("JSONSchema202012KeywordThen")
const KeywordElse = getComponent("JSONSchema202012KeywordElse")
const KeywordDependentSchemas = getComponent(
"JSONSchema202012KeywordDependentSchemas"
)
const KeywordPrefixItems = getComponent("JSONSchema202012KeywordPrefixItems")
const KeywordItems = getComponent("JSONSchema202012KeywordItems")
const KeywordContains = getComponent("JSONSchema202012KeywordContains")
const KeywordProperties = getComponent("JSONSchema202012KeywordProperties")
const KeywordPatternProperties = getComponent(
"JSONSchema202012KeywordPatternProperties"
)
const KeywordAdditionalProperties = getComponent(
"JSONSchema202012KeywordAdditionalProperties"
)
const KeywordPropertyNames = getComponent(
"JSONSchema202012KeywordPropertyNames"
)
const KeywordUnevaluatedItems = getComponent(
"JSONSchema202012KeywordUnevaluatedItems"
)
const KeywordUnevaluatedProperties = getComponent(
"JSONSchema202012KeywordUnevaluatedProperties"
)
const KeywordType = getComponent("JSONSchema202012KeywordType")
const KeywordEnum = getComponent("JSONSchema202012KeywordEnum")
const KeywordConst = getComponent("JSONSchema202012KeywordConst")
const KeywordConstraint = getComponent("JSONSchema202012KeywordConstraint")
const KeywordDependentRequired = getComponent(
"JSONSchema202012KeywordDependentRequired"
)
const KeywordContentSchema = getComponent(
"JSONSchema202012KeywordContentSchema"
)
const KeywordTitle = getComponent("JSONSchema202012KeywordTitle")
const KeywordDescription = getComponent("JSONSchema202012KeywordDescription")
const KeywordDefault = getComponent("JSONSchema202012KeywordDefault")
const KeywordDeprecated = getComponent("JSONSchema202012KeywordDeprecated")
const KeywordReadOnly = getComponent("JSONSchema202012KeywordReadOnly")
const KeywordWriteOnly = getComponent("JSONSchema202012KeywordWriteOnly")
const Accordion = getComponent("JSONSchema202012Accordion")
const ExpandDeepButton = getComponent("JSONSchema202012ExpandDeepButton")
const ChevronRightIcon = getComponent("JSONSchema202012ChevronRightIcon")
const withSchemaContext = getComponent("withJSONSchema202012Context")

OperationsWrapper.OperationsWithJSONSchemaContext = withSchemaContext(
Operations,
{
config: {
default$schema: "https://spec.openapis.org/oas/3.1/dialect/base",
defaultExpandedLevels: configs.defaultModelExpandDepth - 1,
},
components: {
JSONSchema,
Keyword$schema,
Keyword$vocabulary,
Keyword$id,
Keyword$anchor,
Keyword$dynamicAnchor,
Keyword$ref,
Keyword$dynamicRef,
Keyword$defs,
Keyword$comment,
KeywordAllOf,
KeywordAnyOf,
KeywordOneOf,
KeywordNot,
KeywordIf,
KeywordThen,
KeywordElse,
KeywordDependentSchemas,
KeywordPrefixItems,
KeywordItems,
KeywordContains,
KeywordProperties,
KeywordPatternProperties,
KeywordAdditionalProperties,
KeywordPropertyNames,
KeywordUnevaluatedItems,
KeywordUnevaluatedProperties,
KeywordType,
KeywordEnum,
KeywordConst,
KeywordConstraint,
KeywordDependentRequired,
KeywordContentSchema,
KeywordTitle,
KeywordDescription,
KeywordDefault,
KeywordDeprecated,
KeywordReadOnly,
KeywordWriteOnly,
Accordion,
ExpandDeepButton,
ChevronRightIcon,
},
fn: {
upperFirst: fn.upperFirst,
isExpandable: makeIsExpandable(
fn.jsonSchema202012.isExpandable,
system
),
},
}
)

return <OperationsWrapper.OperationsWithJSONSchemaContext />
})

OperationsWrapper.OperationsWithJSONSchemaContext = null

export default OperationsWrapper
141 changes: 141 additions & 0 deletions src/core/plugins/oas31/wrap-components/webhooks.jsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,141 @@
/**
* @prettier
*/
import React from "react"

import { createOnlyOAS31ComponentWrapper } from "../fn"
import { makeIsExpandable } from "../json-schema-2020-12-extensions/fn"

const WebhooksWrapper = createOnlyOAS31ComponentWrapper(({ getSystem }) => {
const system = getSystem()
const { getComponent, fn, getConfigs } = system
const configs = getConfigs()

if (WebhooksWrapper.WebhooksWithJSONSchemaContext) {
return <WebhooksWrapper.WebhooksWithJSONSchemaContext />
}

const Webhooks = getComponent("Webhooks", true)
const JSONSchema = getComponent("JSONSchema202012")
const Keyword$schema = getComponent("JSONSchema202012Keyword$schema")
const Keyword$vocabulary = getComponent("JSONSchema202012Keyword$vocabulary")
const Keyword$id = getComponent("JSONSchema202012Keyword$id")
const Keyword$anchor = getComponent("JSONSchema202012Keyword$anchor")
const Keyword$dynamicAnchor = getComponent(
"JSONSchema202012Keyword$dynamicAnchor"
)
const Keyword$ref = getComponent("JSONSchema202012Keyword$ref")
const Keyword$dynamicRef = getComponent("JSONSchema202012Keyword$dynamicRef")
const Keyword$defs = getComponent("JSONSchema202012Keyword$defs")
const Keyword$comment = getComponent("JSONSchema202012Keyword$comment")
const KeywordAllOf = getComponent("JSONSchema202012KeywordAllOf")
const KeywordAnyOf = getComponent("JSONSchema202012KeywordAnyOf")
const KeywordOneOf = getComponent("JSONSchema202012KeywordOneOf")
const KeywordNot = getComponent("JSONSchema202012KeywordNot")
const KeywordIf = getComponent("JSONSchema202012KeywordIf")
const KeywordThen = getComponent("JSONSchema202012KeywordThen")
const KeywordElse = getComponent("JSONSchema202012KeywordElse")
const KeywordDependentSchemas = getComponent(
"JSONSchema202012KeywordDependentSchemas"
)
const KeywordPrefixItems = getComponent("JSONSchema202012KeywordPrefixItems")
const KeywordItems = getComponent("JSONSchema202012KeywordItems")
const KeywordContains = getComponent("JSONSchema202012KeywordContains")
const KeywordProperties = getComponent("JSONSchema202012KeywordProperties")
const KeywordPatternProperties = getComponent(
"JSONSchema202012KeywordPatternProperties"
)
const KeywordAdditionalProperties = getComponent(
"JSONSchema202012KeywordAdditionalProperties"
)
const KeywordPropertyNames = getComponent(
"JSONSchema202012KeywordPropertyNames"
)
const KeywordUnevaluatedItems = getComponent(
"JSONSchema202012KeywordUnevaluatedItems"
)
const KeywordUnevaluatedProperties = getComponent(
"JSONSchema202012KeywordUnevaluatedProperties"
)
const KeywordType = getComponent("JSONSchema202012KeywordType")
const KeywordEnum = getComponent("JSONSchema202012KeywordEnum")
const KeywordConst = getComponent("JSONSchema202012KeywordConst")
const KeywordConstraint = getComponent("JSONSchema202012KeywordConstraint")
const KeywordDependentRequired = getComponent(
"JSONSchema202012KeywordDependentRequired"
)
const KeywordContentSchema = getComponent(
"JSONSchema202012KeywordContentSchema"
)
const KeywordTitle = getComponent("JSONSchema202012KeywordTitle")
const KeywordDescription = getComponent("JSONSchema202012KeywordDescription")
const KeywordDefault = getComponent("JSONSchema202012KeywordDefault")
const KeywordDeprecated = getComponent("JSONSchema202012KeywordDeprecated")
const KeywordReadOnly = getComponent("JSONSchema202012KeywordReadOnly")
const KeywordWriteOnly = getComponent("JSONSchema202012KeywordWriteOnly")
const Accordion = getComponent("JSONSchema202012Accordion")
const ExpandDeepButton = getComponent("JSONSchema202012ExpandDeepButton")
const ChevronRightIcon = getComponent("JSONSchema202012ChevronRightIcon")
const withSchemaContext = getComponent("withJSONSchema202012Context")

WebhooksWrapper.WebhooksWithJSONSchemaContext = withSchemaContext(Webhooks, {
config: {
default$schema: "https://spec.openapis.org/oas/3.1/dialect/base",
defaultExpandedLevels: configs.defaultModelExpandDepth - 1,
},
components: {
JSONSchema,
Keyword$schema,
Keyword$vocabulary,
Keyword$id,
Keyword$anchor,
Keyword$dynamicAnchor,
Keyword$ref,
Keyword$dynamicRef,
Keyword$defs,
Keyword$comment,
KeywordAllOf,
KeywordAnyOf,
KeywordOneOf,
KeywordNot,
KeywordIf,
KeywordThen,
KeywordElse,
KeywordDependentSchemas,
KeywordPrefixItems,
KeywordItems,
KeywordContains,
KeywordProperties,
KeywordPatternProperties,
KeywordAdditionalProperties,
KeywordPropertyNames,
KeywordUnevaluatedItems,
KeywordUnevaluatedProperties,
KeywordType,
KeywordEnum,
KeywordConst,
KeywordConstraint,
KeywordDependentRequired,
KeywordContentSchema,
KeywordTitle,
KeywordDescription,
KeywordDefault,
KeywordDeprecated,
KeywordReadOnly,
KeywordWriteOnly,
Accordion,
ExpandDeepButton,
ChevronRightIcon,
},
fn: {
upperFirst: fn.upperFirst,
isExpandable: makeIsExpandable(fn.jsonSchema202012.isExpandable, system),
},
})

return <WebhooksWrapper.WebhooksWithJSONSchemaContext />
})

WebhooksWrapper.WebhooksWithJSONSchemaContext = null

export default WebhooksWrapper

0 comments on commit 79e0c4e

Please sign in to comment.