diff --git a/packages/docusaurus-plugin-openapi-docs/src/markdown/__snapshots__/createSchema.test.ts.snap b/packages/docusaurus-plugin-openapi-docs/src/markdown/__snapshots__/createSchema.test.ts.snap index 3d4d9548d..62c94cc32 100644 --- a/packages/docusaurus-plugin-openapi-docs/src/markdown/__snapshots__/createSchema.test.ts.snap +++ b/packages/docusaurus-plugin-openapi-docs/src/markdown/__snapshots__/createSchema.test.ts.snap @@ -22,7 +22,6 @@ Array [ name={\\"type\\"} required={true} schemaName={\\"string\\"} - qualifierMessage={\\"**Possible values:** [\`nose\`]\\"} schema={{ type: \\"string\\", enum: [\\"nose\\"] }} > @@ -32,7 +31,6 @@ Array [ name={\\"type\\"} required={true} schemaName={\\"string\\"} - qualifierMessage={\\"**Possible values:** [\`mouth\`]\\"} schema={{ type: \\"string\\", enum: [\\"mouth\\"] }} > @@ -42,7 +40,6 @@ Array [ name={\\"type\\"} required={true} schemaName={\\"string\\"} - qualifierMessage={\\"**Possible values:** [\`eyes\`]\\"} schema={{ type: \\"string\\", enum: [\\"eyes\\"] }} > @@ -61,7 +57,6 @@ Array [ name={\\"description\\"} required={true} schemaName={\\"string\\"} - qualifierMessage={undefined} schema={{ type: \\"string\\", description: \\"Description of the body part.\\", @@ -102,7 +97,6 @@ Array [ name={\\"a\\"} required={false} schemaName={\\"\\"} - qualifierMessage={undefined} schema={\\"string\\"} >
  • @@ -137,7 +130,6 @@ Array [ name={\\"property name*\\"} required={false} schemaName={\\"boolean\\"} - qualifierMessage={undefined} schema={{ type: \\"boolean\\" }} collapsible={false} discriminator={false} @@ -152,7 +144,6 @@ Array [ name={\\"property name*\\"} required={false} schemaName={\\"integer\\"} - qualifierMessage={undefined} schema={{ type: \\"integer\\" }} collapsible={false} discriminator={false} @@ -167,7 +158,6 @@ Array [ name={\\"property name*\\"} required={false} schemaName={\\"number\\"} - qualifierMessage={undefined} schema={{ type: \\"number\\" }} collapsible={false} discriminator={false} @@ -182,7 +172,6 @@ Array [ name={\\"property name*\\"} required={false} schemaName={\\"string\\"} - qualifierMessage={undefined} schema={{ type: \\"string\\" }} collapsible={false} discriminator={false} @@ -197,7 +186,6 @@ Array [ name={\\"property name*\\"} required={false} schemaName={\\"any\\"} - qualifierMessage={undefined} schema={{ type: \\"object\\", additionalProperties: {} }} collapsible={false} discriminator={false} @@ -214,7 +202,6 @@ Array [ name={\\"property name*\\"} required={false} schemaName={\\"any\\"} - qualifierMessage={undefined} schema={{ type: \\"object\\", additionalProperties: true }} collapsible={false} discriminator={false} @@ -239,7 +226,6 @@ Array [ name={\\"innerProp1\\"} required={false} schemaName={\\"string\\"} - qualifierMessage={undefined} schema={{ type: \\"string\\" }} > @@ -264,7 +249,6 @@ Array [ name={\\"sharedProp\\"} required={true} schemaName={\\"string\\"} - qualifierMessage={undefined} schema={{ type: \\"string\\" }} >; ", @@ -273,7 +257,6 @@ Array [ name={\\"anotherProp\\"} required={true} schemaName={\\"number\\"} - qualifierMessage={undefined} schema={{ type: \\"number\\" }} >; ", @@ -296,7 +279,6 @@ Array [ name={\\"innerProp1\\"} required={false} schemaName={\\"string\\"} - qualifierMessage={undefined} schema={{ type: \\"string\\" }} > @@ -317,7 +299,6 @@ Array [ name={\\"innerProp2\\"} required={false} schemaName={\\"number\\"} - qualifierMessage={undefined} schema={{ type: \\"number\\" }} > @@ -334,7 +315,6 @@ Array [ name={\\"parentProp1\\"} required={false} schemaName={\\"string\\"} - qualifierMessage={undefined} schema={{ type: \\"string\\" }} >; ", @@ -343,7 +323,6 @@ Array [ name={\\"parentProp2\\"} required={false} schemaName={\\"string\\"} - qualifierMessage={undefined} schema={{ type: \\"string\\" }} >; ", @@ -352,7 +331,6 @@ Array [ name={\\"allOfProp1\\"} required={false} schemaName={\\"string\\"} - qualifierMessage={undefined} schema={{ type: \\"string\\" }} >; ", @@ -361,7 +339,6 @@ Array [ name={\\"allOfProp2\\"} required={false} schemaName={\\"string\\"} - qualifierMessage={undefined} schema={{ type: \\"string\\" }} >; ", @@ -370,7 +347,6 @@ Array [ name={\\"parentProp1\\"} required={false} schemaName={\\"string\\"} - qualifierMessage={undefined} schema={{ type: \\"string\\" }} >; ", @@ -379,7 +355,6 @@ Array [ name={\\"parentProp2\\"} required={false} schemaName={\\"string\\"} - qualifierMessage={undefined} schema={{ type: \\"string\\" }} >; ", @@ -486,7 +461,6 @@ Array [ name={\\"type\\"} required={true} schemaName={\\"string\\"} - qualifierMessage={\\"**Possible values:** [\`typeA\`]\\"} schema={{ type: \\"string\\", enum: [\\"typeA\\"] }} > @@ -504,7 +477,6 @@ Array [ name={\\"type\\"} required={true} schemaName={\\"string\\"} - qualifierMessage={\\"**Possible values:** [\`typeB\`]\\"} schema={{ type: \\"string\\", enum: [\\"typeB\\"] }} > @@ -529,9 +500,6 @@ Array [ string -
    - **Possible values:** [\`typeA\`, \`typeB\`] -
    @@ -563,7 +531,6 @@ Array [ name={\\"type\\"} required={true} schemaName={\\"string\\"} - qualifierMessage={\\"**Possible values:** [\`typeA\`]\\"} schema={{ type: \\"string\\", enum: [\\"typeA\\"] }} > @@ -581,7 +547,6 @@ Array [ name={\\"type\\"} required={true} schemaName={\\"string\\"} - qualifierMessage={\\"**Possible values:** [\`typeB\`]\\"} schema={{ type: \\"string\\", enum: [\\"typeB\\"] }} > @@ -601,7 +565,6 @@ Array [ name={\\"type\\"} required={false} schemaName={\\"string\\"} - qualifierMessage={undefined} schema={{ type: \\"string\\" }} >; ", @@ -621,7 +584,6 @@ Array [ name={\\"type\\"} required={true} schemaName={\\"string\\"} - qualifierMessage={\\"**Possible values:** [\`typeA\`]\\"} schema={{ type: \\"string\\", enum: [\\"typeA\\"] }} > @@ -639,7 +600,6 @@ Array [ name={\\"type\\"} required={true} schemaName={\\"string\\"} - qualifierMessage={\\"**Possible values:** [\`typeB\`]\\"} schema={{ type: \\"string\\", enum: [\\"typeB\\"] }} > @@ -659,7 +618,6 @@ Array [ name={\\"type\\"} required={false} schemaName={\\"string\\"} - qualifierMessage={undefined} schema={{ type: \\"string\\" }} >; ", @@ -673,7 +631,6 @@ Array [ name={\\"type\\"} required={false} schemaName={\\"string\\"} - qualifierMessage={undefined} schema={{ type: \\"string\\" }} >; ", @@ -688,7 +645,6 @@ Array [ name={\\"type\\"} required={true} schemaName={\\"string\\"} - qualifierMessage={\\"**Possible values:** [\`typeA\`]\\"} schema={{ type: \\"string\\", enum: [\\"typeA\\"] }} > @@ -706,7 +661,6 @@ Array [ name={\\"type\\"} required={true} schemaName={\\"string\\"} - qualifierMessage={\\"**Possible values:** [\`typeB\`]\\"} schema={{ type: \\"string\\", enum: [\\"typeB\\"] }} > @@ -726,7 +679,6 @@ Array [ name={\\"sharedProp\\"} required={false} schemaName={\\"string\\"} - qualifierMessage={undefined} schema={{ type: \\"string\\" }} >; ", @@ -735,7 +687,6 @@ Array [ name={\\"type\\"} required={false} schemaName={\\"string\\"} - qualifierMessage={undefined} schema={{ type: \\"string\\" }} >; ", @@ -754,9 +705,6 @@ Array [ string -
    - **Possible values:** [\`typeA\`, \`typeB\`] -
    @@ -783,7 +731,6 @@ Array [ name={\\"type\\"} required={true} schemaName={\\"string\\"} - qualifierMessage={\\"**Possible values:** [\`typeA\`]\\"} schema={{ type: \\"string\\", enum: [\\"typeA\\"] }} > @@ -801,7 +747,6 @@ Array [ name={\\"type\\"} required={true} schemaName={\\"string\\"} - qualifierMessage={\\"**Possible values:** [\`typeB\`]\\"} schema={{ type: \\"string\\", enum: [\\"typeB\\"] }} > @@ -821,7 +765,6 @@ Array [ name={\\"sharedProp\\"} required={false} schemaName={\\"string\\"} - qualifierMessage={undefined} schema={{ type: \\"string\\" }} >; ", @@ -835,9 +778,6 @@ Array [ string -
    - **Possible values:** [\`typeA\`, \`typeB\`] -
    @@ -869,7 +809,6 @@ Array [ name={\\"type\\"} required={true} schemaName={\\"string\\"} - qualifierMessage={\\"**Possible values:** [\`typeA\`]\\"} schema={{ type: \\"string\\", enum: [\\"typeA\\"] }} > @@ -886,7 +825,6 @@ Array [ name={\\"propA1\\"} required={false} schemaName={\\"string\\"} - qualifierMessage={undefined} schema={{ type: \\"string\\" }} >
    @@ -907,7 +844,6 @@ Array [ name={\\"type\\"} required={true} schemaName={\\"string\\"} - qualifierMessage={\\"**Possible values:** [\`typeB\`]\\"} schema={{ type: \\"string\\", enum: [\\"typeB\\"] }} > @@ -924,7 +860,6 @@ Array [ name={\\"propB1\\"} required={false} schemaName={\\"string\\"} - qualifierMessage={undefined} schema={{ type: \\"string\\" }} >
    @@ -947,7 +881,6 @@ Array [ name={\\"type\\"} required={false} schemaName={\\"string\\"} - qualifierMessage={undefined} schema={{ type: \\"string\\" }} >; ", @@ -967,7 +900,6 @@ Array [ name={\\"type\\"} required={true} schemaName={\\"string\\"} - qualifierMessage={\\"**Possible values:** [\`typeA\`]\\"} schema={{ type: \\"string\\", enum: [\\"typeA\\"] }} >
    @@ -985,7 +916,6 @@ Array [ name={\\"type\\"} required={true} schemaName={\\"string\\"} - qualifierMessage={\\"**Possible values:** [\`typeB\`]\\"} schema={{ type: \\"string\\", enum: [\\"typeB\\"] }} > @@ -1005,7 +934,6 @@ Array [ name={\\"type\\"} required={false} schemaName={\\"string\\"} - qualifierMessage={undefined} schema={{ type: \\"string\\" }} >; ", @@ -1025,7 +953,6 @@ Array [ name={\\"type\\"} required={true} schemaName={\\"string\\"} - qualifierMessage={\\"**Possible values:** [\`typeA\`]\\"} schema={{ type: \\"string\\", enum: [\\"typeA\\"] }} > @@ -1043,7 +969,6 @@ Array [ name={\\"type\\"} required={true} schemaName={\\"string\\"} - qualifierMessage={\\"**Possible values:** [\`typeB\`]\\"} schema={{ type: \\"string\\", enum: [\\"typeB\\"] }} > @@ -1068,9 +992,6 @@ Array [ string -
    - **Possible values:** [\`typeA\`, \`typeB\`] -
    @@ -1102,7 +1023,6 @@ Array [ name={\\"type\\"} required={true} schemaName={\\"string\\"} - qualifierMessage={\\"**Possible values:** [\`typeA\`]\\"} schema={{ type: \\"string\\", enum: [\\"typeA\\"] }} > @@ -1120,7 +1039,6 @@ Array [ name={\\"type\\"} required={true} schemaName={\\"string\\"} - qualifierMessage={\\"**Possible values:** [\`typeB\`]\\"} schema={{ type: \\"string\\", enum: [\\"typeB\\"] }} > @@ -1140,7 +1057,6 @@ Array [ name={\\"type\\"} required={false} schemaName={\\"string\\"} - qualifierMessage={undefined} schema={{ type: \\"string\\" }} >; ", @@ -1149,7 +1065,6 @@ Array [ name={\\"sharedProp\\"} required={false} schemaName={\\"string\\"} - qualifierMessage={undefined} schema={{ type: \\"string\\" }} >; ", @@ -1169,7 +1084,6 @@ Array [ name={\\"type\\"} required={true} schemaName={\\"string\\"} - qualifierMessage={\\"**Possible values:** [\`typeA\`]\\"} schema={{ type: \\"string\\", enum: [\\"typeA\\"] }} > @@ -1187,7 +1100,6 @@ Array [ name={\\"type\\"} required={true} schemaName={\\"string\\"} - qualifierMessage={\\"**Possible values:** [\`typeB\`]\\"} schema={{ type: \\"string\\", enum: [\\"typeB\\"] }} > @@ -1212,9 +1123,6 @@ Array [ string -
    - **Possible values:** [\`typeA\`, \`typeB\`] -
    @@ -1235,7 +1143,6 @@ Array [ name={\\"sharedProp\\"} required={false} schemaName={\\"string\\"} - qualifierMessage={undefined} schema={{ type: \\"string\\" }} >; ", @@ -1270,7 +1177,6 @@ Array [ name={\\"noseLength\\"} required={true} schemaName={\\"number\\"} - qualifierMessage={undefined} schema={{ type: \\"number\\" }} > @@ -1424,7 +1330,6 @@ Array [ name={\\"objectProp\\"} required={false} schemaName={\\"string\\"} - qualifierMessage={undefined} schema={{ type: \\"string\\" }} > @@ -1527,7 +1432,6 @@ Array [ name={\\"requiredPropA\\"} required={true} schemaName={\\"string\\"} - qualifierMessage={undefined} schema={{ type: \\"string\\" }} > @@ -1537,7 +1441,6 @@ Array [ name={\\"requiredPropB\\"} required={true} schemaName={\\"number\\"} - qualifierMessage={undefined} schema={{ type: \\"number\\" }} > @@ -1557,7 +1460,6 @@ Array [ name={\\"sharedProp\\"} required={false} schemaName={\\"string\\"} - qualifierMessage={undefined} schema={{ type: \\"string\\" }} >; ", @@ -1581,7 +1483,6 @@ Array [ name={\\"specificPropA\\"} required={false} schemaName={\\"string\\"} - qualifierMessage={undefined} schema={{ type: \\"string\\" }} > @@ -1591,7 +1492,6 @@ Array [ name={\\"specificPropB\\"} required={false} schemaName={\\"number\\"} - qualifierMessage={undefined} schema={{ type: \\"number\\" }} > diff --git a/packages/docusaurus-plugin-openapi-docs/src/markdown/createSchema.ts b/packages/docusaurus-plugin-openapi-docs/src/markdown/createSchema.ts index 3447507fc..80f461ecb 100644 --- a/packages/docusaurus-plugin-openapi-docs/src/markdown/createSchema.ts +++ b/packages/docusaurus-plugin-openapi-docs/src/markdown/createSchema.ts @@ -17,7 +17,7 @@ import { import { createDescription } from "./createDescription"; import { createDetails } from "./createDetails"; import { createDetailsSummary } from "./createDetailsSummary"; -import { getQualifierMessage, getSchemaName } from "./schema"; +import { getSchemaName } from "./schema"; import { create, guard } from "./utils"; import { SchemaObject } from "../openapi/types"; @@ -140,7 +140,6 @@ function createProperties(schema: SchemaObject) { name: "", required: false, schemaName: "object", - qualifierMessage: undefined, schema: {}, }); } @@ -169,7 +168,6 @@ function createAdditionalProperties(schema: SchemaObject) { name: "property name*", required: false, schemaName: "any", - qualifierMessage: getQualifierMessage(schema), schema: schema, collapsible: false, discriminator: false, @@ -209,7 +207,6 @@ function createAdditionalProperties(schema: SchemaObject) { name: "property name*", required: false, schemaName: schemaName, - qualifierMessage: getQualifierMessage(schema), schema: additionalProperties, collapsible: false, discriminator: false, @@ -399,12 +396,6 @@ function createDetailsNode( children: createDescription(description), }) ), - guard(getQualifierMessage(schema), (message) => - create("div", { - style: { marginTop: ".5rem", marginBottom: ".5rem" }, - children: createDescription(message), - }) - ), createNodes(schema, SCHEMA_TYPE), ], }), @@ -545,14 +536,6 @@ function createPropertyDiscriminator( children: createDescription(description), }) ), - guard(getQualifierMessage(discriminator), (message) => - create("div", { - style: { - paddingLeft: "1rem", - }, - children: createDescription(message), - }) - ), create("DiscriminatorTabs", { className: "openapi-tabs__discriminator", children: Object.keys(discriminator?.mapping!).map((key, index) => { @@ -727,7 +710,6 @@ function createEdges({ name, required: Array.isArray(required) ? required.includes(name) : required, schemaName: mergedSchemaName, - qualifierMessage: getQualifierMessage(mergedSchemas), schema: mergedSchemas, }); } @@ -738,7 +720,6 @@ function createEdges({ name, required: Array.isArray(required) ? required.includes(name) : required, schemaName: schemaName, - qualifierMessage: getQualifierMessage(schema), schema: schema, }); } @@ -823,17 +804,7 @@ export function createNodes( marginTop: ".5rem", marginBottom: ".5rem", }, - children: [ - createDescription(schema.type), - guard(getQualifierMessage(schema), (message) => - create("div", { - style: { - paddingTop: "1rem", - }, - children: createDescription(message), - }) - ), - ], + children: [createDescription(schema.type)], }); } @@ -844,17 +815,7 @@ export function createNodes( marginTop: ".5rem", marginBottom: ".5rem", }, - children: [ - createDescription(schema), - guard(getQualifierMessage(schema), (message) => - create("div", { - style: { - paddingTop: "1rem", - }, - children: createDescription(message), - }) - ), - ], + children: [createDescription(schema)], }); } diff --git a/packages/docusaurus-plugin-openapi-docs/src/markdown/schema.test.ts b/packages/docusaurus-plugin-openapi-docs/src/markdown/schema.test.ts deleted file mode 100644 index daa3a633d..000000000 --- a/packages/docusaurus-plugin-openapi-docs/src/markdown/schema.test.ts +++ /dev/null @@ -1,208 +0,0 @@ -/* ============================================================================ - * Copyright (c) Palo Alto Networks - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - * ========================================================================== */ - -import { getQualifierMessage } from "./schema"; - -describe("getQualifierMessage", () => { - it("should render nothing", () => { - const actual = getQualifierMessage({}); - expect(actual).toBeUndefined(); - }); - - // - // minLength + maxLength - // - it("should render minLength", () => { - const expected = "**Possible values:** `non-empty`"; - const actual = getQualifierMessage({ minLength: 1 }); - expect(actual).toBe(expected); - }); - - it("should render maxLength", () => { - const expected = "**Possible values:** `<= 40 characters`"; - const actual = getQualifierMessage({ maxLength: 40 }); - expect(actual).toBe(expected); - }); - - it("should render minLength and maxLength", () => { - const expected = "**Possible values:** `non-empty` and `<= 40 characters`"; - const actual = getQualifierMessage({ minLength: 1, maxLength: 40 }); - expect(actual).toBe(expected); - }); - - // - // pattern - // - it("should render pattern", () => { - const expected = - "**Possible values:** Value must match regular expression `^[a-zA-Z0-9_-]*$`"; - const actual = getQualifierMessage({ pattern: "^[a-zA-Z0-9_-]*$" }); - expect(actual).toBe(expected); - }); - - it("should render multiple string qualifiers", () => { - const expected = - "**Possible values:** `non-empty` and `<= 40 characters`, Value must match regular expression `^[a-zA-Z0-9_-]*$`"; - const actual = getQualifierMessage({ - minLength: 1, - maxLength: 40, - pattern: "^[a-zA-Z0-9_-]*$", - }); - expect(actual).toBe(expected); - }); - - // - // enum - // - it("should render enum", () => { - const expected = "**Possible values:** [`cat`, `dog`, `mouse`]"; - const actual = getQualifierMessage({ enum: ["cat", "dog", "mouse"] }); - expect(actual).toBe(expected); - }); - - // - // minimum + maximum + exclusiveMinimum + exclusiveMaximum - // - it("should render minimum", () => { - const expected = "**Possible values:** `>= 1`"; - const actual = getQualifierMessage({ minimum: 1 }); - expect(actual).toBe(expected); - }); - - it("should render maximum", () => { - const expected = "**Possible values:** `<= 40`"; - const actual = getQualifierMessage({ maximum: 40 }); - expect(actual).toBe(expected); - }); - - it("should render numeric exclusiveMinimum", () => { - const expected = "**Possible values:** `> 1`"; - const actual = getQualifierMessage({ exclusiveMinimum: 1 }); - expect(actual).toBe(expected); - }); - - it("should render numeric exclusiveMaximum", () => { - const expected = "**Possible values:** `< 40`"; - const actual = getQualifierMessage({ exclusiveMaximum: 40 }); - expect(actual).toBe(expected); - }); - - it("should render boolean exclusiveMinimum", () => { - const expected = "**Possible values:** `> 1`"; - const actual = getQualifierMessage({ minimum: 1, exclusiveMinimum: true }); - expect(actual).toBe(expected); - }); - - it("should render boolean exclusiveMaximum", () => { - const expected = "**Possible values:** `< 40`"; - const actual = getQualifierMessage({ maximum: 40, exclusiveMaximum: true }); - expect(actual).toBe(expected); - }); - - it("should render minimum when exclusiveMinimum is false", () => { - const expected = "**Possible values:** `>= 1`"; - const actual = getQualifierMessage({ minimum: 1, exclusiveMinimum: false }); - expect(actual).toBe(expected); - }); - - it("should render maximum when exclusiveMaximum is false", () => { - const expected = "**Possible values:** `<= 40`"; - const actual = getQualifierMessage({ - maximum: 40, - exclusiveMaximum: false, - }); - expect(actual).toBe(expected); - }); - - it("should render minimum and maximum", () => { - const expected = "**Possible values:** `>= 1` and `<= 40`"; - const actual = getQualifierMessage({ minimum: 1, maximum: 40 }); - expect(actual).toBe(expected); - }); - - it("should render 0 minimum and maximum", () => { - const expected = "**Possible values:** `>= 0` and `<= 40`"; - const actual = getQualifierMessage({ minimum: 0, maximum: 40 }); - expect(actual).toBe(expected); - }); - - it("should render minimum and 0 maximum", () => { - const expected = "**Possible values:** `>= -10` and `<= 0`"; - const actual = getQualifierMessage({ minimum: -10, maximum: 0 }); - expect(actual).toBe(expected); - }); - - it("should render boolean exclusiveMinimum and maximum", () => { - const expected = "**Possible values:** `> 1` and `<= 40`"; - const actual = getQualifierMessage({ - minimum: 1, - maximum: 40, - exclusiveMinimum: true, - }); - expect(actual).toBe(expected); - }); - - it("should render minimum and boolean exclusiveMaximum", () => { - const expected = "**Possible values:** `>= 1` and `< 40`"; - const actual = getQualifierMessage({ - minimum: 1, - maximum: 40, - exclusiveMaximum: true, - }); - expect(actual).toBe(expected); - }); - - it("should render numeric exclusiveMinimum and maximum", () => { - const expected = "**Possible values:** `> 1` and `<= 40`"; - const actual = getQualifierMessage({ - exclusiveMinimum: 1, - maximum: 40, - }); - expect(actual).toBe(expected); - }); - - it("should render minimum and numeric exclusiveMaximum", () => { - const expected = "**Possible values:** `>= 1` and `< 40`"; - const actual = getQualifierMessage({ - minimum: 1, - exclusiveMaximum: 40, - }); - expect(actual).toBe(expected); - }); - - it("should render numeric exclusiveMinimum and boolean exclusiveMaximum", () => { - const expected = "**Possible values:** `> 1` and `< 40`"; - const actual = getQualifierMessage({ - exclusiveMinimum: 1, - maximum: 40, - exclusiveMaximum: true, - }); - expect(actual).toBe(expected); - }); - - it("should render nothing with empty boolean exclusiveMinimum", () => { - const actual = getQualifierMessage({ - exclusiveMinimum: true, - }); - expect(actual).toBeUndefined(); - }); - - it("should render nothing with empty boolean exclusiveMaximum", () => { - const actual = getQualifierMessage({ - exclusiveMaximum: true, - }); - expect(actual).toBeUndefined(); - }); - - it("should render nothing with empty boolean exclusiveMinimum and exclusiveMaximum", () => { - const actual = getQualifierMessage({ - exclusiveMinimum: true, - exclusiveMaximum: true, - }); - expect(actual).toBeUndefined(); - }); -}); diff --git a/packages/docusaurus-plugin-openapi-docs/src/markdown/schema.ts b/packages/docusaurus-plugin-openapi-docs/src/markdown/schema.ts index ea5e1c708..cb966c309 100644 --- a/packages/docusaurus-plugin-openapi-docs/src/markdown/schema.ts +++ b/packages/docusaurus-plugin-openapi-docs/src/markdown/schema.ts @@ -66,129 +66,3 @@ export function getSchemaName( return prettyName(schema, circular) ?? ""; } - -export function getQualifierMessage(schema?: SchemaObject): string | undefined { - // TODO: - // - uniqueItems - // - maxProperties - // - minProperties - // - multipleOf - if (!schema) { - return undefined; - } - - if ( - schema.items && - schema.minItems === undefined && - schema.maxItems === undefined - ) { - return getQualifierMessage(schema.items); - } - - let message = "**Possible values:** "; - - let qualifierGroups = []; - - if (schema.items && schema.items.enum) { - if (schema.items.enum) { - qualifierGroups.push( - `[${schema.items.enum.map((e) => `\`${e}\``).join(", ")}]` - ); - } - } - - if (schema.minLength || schema.maxLength) { - let lengthQualifier = ""; - let minLength; - let maxLength; - if (schema.minLength && schema.minLength > 1) { - minLength = `\`>= ${schema.minLength} characters\``; - } - if (schema.minLength && schema.minLength === 1) { - minLength = `\`non-empty\``; - } - if (schema.maxLength) { - maxLength = `\`<= ${schema.maxLength} characters\``; - } - - if (minLength && !maxLength) { - lengthQualifier += minLength; - } - if (maxLength && !minLength) { - lengthQualifier += maxLength; - } - if (minLength && maxLength) { - lengthQualifier += `${minLength} and ${maxLength}`; - } - - qualifierGroups.push(lengthQualifier); - } - - if ( - schema.minimum != null || - schema.maximum != null || - typeof schema.exclusiveMinimum === "number" || - typeof schema.exclusiveMaximum === "number" - ) { - let minmaxQualifier = ""; - let minimum; - let maximum; - if (typeof schema.exclusiveMinimum === "number") { - minimum = `\`> ${schema.exclusiveMinimum}\``; - } else if (schema.minimum != null && !schema.exclusiveMinimum) { - minimum = `\`>= ${schema.minimum}\``; - } else if (schema.minimum != null && schema.exclusiveMinimum === true) { - minimum = `\`> ${schema.minimum}\``; - } - if (typeof schema.exclusiveMaximum === "number") { - maximum = `\`< ${schema.exclusiveMaximum}\``; - } else if (schema.maximum != null && !schema.exclusiveMaximum) { - maximum = `\`<= ${schema.maximum}\``; - } else if (schema.maximum != null && schema.exclusiveMaximum === true) { - maximum = `\`< ${schema.maximum}\``; - } - - if (minimum && !maximum) { - minmaxQualifier += minimum; - } - if (maximum && !minimum) { - minmaxQualifier += maximum; - } - if (minimum && maximum) { - minmaxQualifier += `${minimum} and ${maximum}`; - } - - qualifierGroups.push(minmaxQualifier); - } - - if (schema.pattern) { - qualifierGroups.push( - `Value must match regular expression \`${schema.pattern}\`` - ); - } - - // Check if discriminator mapping - const discriminator = schema as any; - if (discriminator.mapping) { - const values = Object.keys(discriminator.mapping); - qualifierGroups.push(`[${values.map((e) => `\`${e}\``).join(", ")}]`); - } - - if (schema.enum) { - qualifierGroups.push(`[${schema.enum.map((e) => `\`${e}\``).join(", ")}]`); - } - - if (schema.minItems) { - qualifierGroups.push(`\`>= ${schema.minItems}\``); - } - - if (schema.maxItems) { - qualifierGroups.push(`\`<= ${schema.maxItems}\``); - } - - if (qualifierGroups.length === 0) { - return undefined; - } - - return message + qualifierGroups.join(", "); -} diff --git a/packages/docusaurus-plugin-openapi-docs/src/markdown/utils.ts b/packages/docusaurus-plugin-openapi-docs/src/markdown/utils.ts index 959587c9d..966070b92 100644 --- a/packages/docusaurus-plugin-openapi-docs/src/markdown/utils.ts +++ b/packages/docusaurus-plugin-openapi-docs/src/markdown/utils.ts @@ -129,7 +129,9 @@ export function create( } else { // Inline props as usual for (const [key, value] of Object.entries(rest)) { - propString += `\n ${key}={${JSON.stringify(value)}}`; + if (value !== undefined) { + propString += `\n ${key}={${JSON.stringify(value)}}`; + } } } diff --git a/packages/docusaurus-plugin-openapi-docs/src/openapi/utils/utils/openapi.ts b/packages/docusaurus-plugin-openapi-docs/src/openapi/utils/utils/openapi.ts index 5c569169a..f4050dc1a 100644 --- a/packages/docusaurus-plugin-openapi-docs/src/openapi/utils/utils/openapi.ts +++ b/packages/docusaurus-plugin-openapi-docs/src/openapi/utils/utils/openapi.ts @@ -450,116 +450,6 @@ export function getDefinitionName(pointer?: string): string | undefined { return name; } -function humanizeMultipleOfConstraint( - multipleOf: number | undefined -): string | undefined { - if (multipleOf === undefined) { - return; - } - const strigifiedMultipleOf = multipleOf.toString(10); - if (!/^0\.0*1$/.test(strigifiedMultipleOf)) { - return `multiple of ${strigifiedMultipleOf}`; - } - return `decimal places <= ${strigifiedMultipleOf.split(".")[1].length}`; -} - -function humanizeRangeConstraint( - description: string, - min: number | undefined, - max: number | undefined -): string | undefined { - let stringRange; - if (min !== undefined && max !== undefined) { - if (min === max) { - stringRange = `= ${min} ${description}`; - } else { - stringRange = `[ ${min} .. ${max} ] ${description}`; - } - } else if (max !== undefined) { - stringRange = `<= ${max} ${description}`; - } else if (min !== undefined) { - if (min === 1) { - stringRange = "non-empty"; - } else { - stringRange = `>= ${min} ${description}`; - } - } - - return stringRange; -} - -export function humanizeNumberRange(schema: OpenAPISchema): string | undefined { - const minimum = - typeof schema.exclusiveMinimum === "number" - ? Math.min(schema.exclusiveMinimum, schema.minimum ?? Infinity) - : schema.minimum; - const maximum = - typeof schema.exclusiveMaximum === "number" - ? Math.max(schema.exclusiveMaximum, schema.maximum ?? -Infinity) - : schema.maximum; - const exclusiveMinimum = - typeof schema.exclusiveMinimum === "number" || schema.exclusiveMinimum; - const exclusiveMaximum = - typeof schema.exclusiveMaximum === "number" || schema.exclusiveMaximum; - - if (minimum !== undefined && maximum !== undefined) { - return `${exclusiveMinimum ? "( " : "[ "}${minimum} .. ${maximum}${ - exclusiveMaximum ? " )" : " ]" - }`; - } else if (maximum !== undefined) { - return `${exclusiveMaximum ? "< " : "<= "}${maximum}`; - } else if (minimum !== undefined) { - return `${exclusiveMinimum ? "> " : ">= "}${minimum}`; - } -} - -export function humanizeConstraints(schema: OpenAPISchema): string[] { - const res: string[] = []; - - const stringRange = humanizeRangeConstraint( - "characters", - schema.minLength, - schema.maxLength - ); - if (stringRange !== undefined) { - res.push(stringRange); - } - - const arrayRange = humanizeRangeConstraint( - "items", - schema.minItems, - schema.maxItems - ); - if (arrayRange !== undefined) { - res.push(arrayRange); - } - - const propertiesRange = humanizeRangeConstraint( - "properties", - schema.minProperties, - schema.maxProperties - ); - if (propertiesRange !== undefined) { - res.push(propertiesRange); - } - - const multipleOfConstraint = humanizeMultipleOfConstraint(schema.multipleOf); - if (multipleOfConstraint !== undefined) { - res.push(multipleOfConstraint); - } - - const numberRange = humanizeNumberRange(schema); - if (numberRange !== undefined) { - res.push(numberRange); - } - - if (schema.uniqueItems) { - res.push("unique"); - } - - return res; -} - export function sortByRequired(fields: any[], order: string[] = []) { const unrequiredFields: any[] = []; const orderedFields: any[] = []; diff --git a/packages/docusaurus-theme-openapi-docs/src/markdown/schema.ts b/packages/docusaurus-theme-openapi-docs/src/markdown/schema.ts index a798db106..ca5c54905 100644 --- a/packages/docusaurus-theme-openapi-docs/src/markdown/schema.ts +++ b/packages/docusaurus-theme-openapi-docs/src/markdown/schema.ts @@ -140,9 +140,7 @@ export function getQualifierMessage(schema?: SchemaObject): string | undefined { if (schema.items) { const itemsEnum = getEnumFromSchema(schema.items as SchemaObject); if (itemsEnum) { - qualifierGroups.push( - `[${itemsEnum.map((e) => `\`${e}\``).join(", ")}]` - ); + qualifierGroups.push(`[${itemsEnum.map((e) => `\`${e}\``).join(", ")}]`); } } @@ -150,14 +148,22 @@ export function getQualifierMessage(schema?: SchemaObject): string | undefined { let lengthQualifier = ""; let minLength; let maxLength; + const charactersMessage = translate({ + id: OPENAPI_SCHEMA_ITEM.CHARACTERS, + message: "characters", + }); + const nonEmptyMessage = translate({ + id: OPENAPI_SCHEMA_ITEM.NON_EMPTY, + message: "non-empty", + }); if (schema.minLength && schema.minLength > 1) { - minLength = `\`>= ${schema.minLength} characters\``; + minLength = `\`>= ${schema.minLength} ${charactersMessage}\``; } if (schema.minLength && schema.minLength === 1) { - minLength = `\`non-empty\``; + minLength = `\`${nonEmptyMessage}\``; } if (schema.maxLength) { - maxLength = `\`<= ${schema.maxLength} characters\``; + maxLength = `\`<= ${schema.maxLength} ${charactersMessage}\``; } if (minLength && !maxLength) { @@ -211,9 +217,11 @@ export function getQualifierMessage(schema?: SchemaObject): string | undefined { } if (schema.pattern) { - qualifierGroups.push( - `Value must match regular expression \`${schema.pattern}\`` - ); + const expressionMessage = translate({ + id: OPENAPI_SCHEMA_ITEM.EXPRESSION, + message: "Value must match regular expression", + }); + qualifierGroups.push(`${expressionMessage} \`${schema.pattern}\``); } // Check if discriminator mapping diff --git a/packages/docusaurus-theme-openapi-docs/src/theme/ResponseHeaders/index.tsx b/packages/docusaurus-theme-openapi-docs/src/theme/ResponseHeaders/index.tsx index d8f2158dd..882089bdd 100644 --- a/packages/docusaurus-theme-openapi-docs/src/theme/ResponseHeaders/index.tsx +++ b/packages/docusaurus-theme-openapi-docs/src/theme/ResponseHeaders/index.tsx @@ -9,7 +9,7 @@ import React from "react"; import SchemaItem from "@theme/SchemaItem"; -import { getQualifierMessage, getSchemaName } from "../../markdown/schema"; +import { getSchemaName } from "../../markdown/schema"; interface ResponseHeadersProps { description?: string; @@ -35,7 +35,6 @@ export const ResponseHeaders: React.FC<{ name={name} collapsible={false} schemaName={getSchemaName(schema)} - qualifierMessage={getQualifierMessage(schema)} schema={schema} discriminator={false} children={null} diff --git a/packages/docusaurus-theme-openapi-docs/src/theme/Schema/index.tsx b/packages/docusaurus-theme-openapi-docs/src/theme/Schema/index.tsx index 051150e28..b4903a974 100644 --- a/packages/docusaurus-theme-openapi-docs/src/theme/Schema/index.tsx +++ b/packages/docusaurus-theme-openapi-docs/src/theme/Schema/index.tsx @@ -21,16 +21,11 @@ import { OPENAPI_SCHEMA_ITEM } from "@theme/translationIds"; // eslint-disable-next-line import/no-extraneous-dependencies import { merge } from "allof-merge"; import clsx from "clsx"; -import { - getQualifierMessage, - getSchemaName, -} from "docusaurus-plugin-openapi-docs/lib/markdown/schema"; -import type { - SchemaObject, - SchemaType, -} from "docusaurus-plugin-openapi-docs/src/openapi/types"; import isEmpty from "lodash/isEmpty"; +import { getQualifierMessage, getSchemaName } from "../../markdown/schema"; +import type { SchemaObject } from "../../types.d"; + // eslint-disable-next-line import/no-extraneous-dependencies // const jsonSchemaMergeAllOf = require("json-schema-merge-allof"); @@ -296,7 +291,6 @@ const AnyOneOf: React.FC = ({ collapsible={false} name={undefined} schemaName={computedSchemaName} - qualifierMessage={getQualifierMessage(anyOneSchema)} schema={anyOneSchema} discriminator={false} children={null} @@ -313,7 +307,6 @@ const AnyOneOf: React.FC = ({ collapsible={false} name={undefined} schemaName={computedSchemaName} - qualifierMessage={getQualifierMessage(anyOneSchema)} schema={anyOneSchema} discriminator={false} children={null} @@ -398,7 +391,6 @@ const Properties: React.FC = ({ name="" required={false} schemaName="object" - qualifierMessage={undefined} schema={{}} /> ); @@ -611,7 +603,6 @@ const AdditionalProperties: React.FC = ({ name="property name*" required={false} schemaName="any" - qualifierMessage={getQualifierMessage(schema)} schema={schema} collapsible={false} discriminator={false} @@ -657,7 +648,6 @@ const AdditionalProperties: React.FC = ({ name="property name*" required={false} schemaName={schemaName} - qualifierMessage={getQualifierMessage(schema)} schema={additionalProperties} collapsible={false} discriminator={false} @@ -767,7 +757,6 @@ const Items: React.FC<{ collapsible={false} name="" // No name for array items schemaName={getSchemaName(itemsSchema)} - qualifierMessage={getQualifierMessage(itemsSchema)} schema={itemsSchema} discriminator={false} children={null} @@ -927,7 +916,6 @@ const SchemaEdge: React.FC = ({ Array.isArray(required) ? required.includes(name) : required } schemaName={schema.allOf[0]} - qualifierMessage={undefined} schema={schema.allOf[0]} discriminator={false} children={null} @@ -999,7 +987,6 @@ const SchemaEdge: React.FC = ({ name={name} required={Array.isArray(required) ? required.includes(name) : required} schemaName={mergedSchemaName} - qualifierMessage={getQualifierMessage(mergedSchemas)} schema={mergedSchemas} discriminator={false} children={null} @@ -1013,7 +1000,6 @@ const SchemaEdge: React.FC = ({ name={name} required={Array.isArray(required) ? required.includes(name) : required} schemaName={schemaName} - qualifierMessage={getQualifierMessage(schema)} schema={schema} discriminator={false} children={null} @@ -1217,7 +1203,6 @@ const SchemaNode: React.FC = ({ name={schema.type} required={Boolean(schema.required)} schemaName={schemaName} - qualifierMessage={getQualifierMessage(schema)} schema={schema} discriminator={false} children={null} @@ -1230,7 +1215,9 @@ const SchemaNode: React.FC = ({ export default SchemaNode; -type PrimitiveSchemaType = Exclude; +type PrimitiveSchemaType = + | Exclude, "object" | "array"> + | "null"; const PRIMITIVE_TYPES: Record = { string: true, diff --git a/packages/docusaurus-theme-openapi-docs/src/theme/SchemaItem/index.tsx b/packages/docusaurus-theme-openapi-docs/src/theme/SchemaItem/index.tsx index aec98c7a1..83593cc78 100644 --- a/packages/docusaurus-theme-openapi-docs/src/theme/SchemaItem/index.tsx +++ b/packages/docusaurus-theme-openapi-docs/src/theme/SchemaItem/index.tsx @@ -13,6 +13,7 @@ import Markdown from "@theme/Markdown"; import { OPENAPI_SCHEMA_ITEM } from "@theme/translationIds"; import clsx from "clsx"; +import { getQualifierMessage } from "../../markdown/schema"; import { guard } from "../../markdown/utils"; export interface Props { @@ -130,7 +131,11 @@ export default function SchemaItem(props: Props) { )); - const renderQualifierMessage = guard(qualifierMessage, (message) => ( + // Generate qualifierMessage from schema if not provided + const effectiveQualifierMessage = + qualifierMessage ?? (schema ? getQualifierMessage(schema) : undefined); + + const renderQualifierMessage = guard(effectiveQualifierMessage, (message) => ( <> {message} diff --git a/packages/docusaurus-theme-openapi-docs/src/theme/translationIds.ts b/packages/docusaurus-theme-openapi-docs/src/theme/translationIds.ts index a607a13cd..1f51a0b24 100644 --- a/packages/docusaurus-theme-openapi-docs/src/theme/translationIds.ts +++ b/packages/docusaurus-theme-openapi-docs/src/theme/translationIds.ts @@ -79,6 +79,8 @@ export const OPENAPI_SCHEMA = { }; export const OPENAPI_SCHEMA_ITEM = { + CHARACTERS: "theme.openapi.schemaItem.characters", + NON_EMPTY: "theme.openapi.schemaItem.nonEmpty", REQUIRED: "theme.openapi.schemaItem.required", DEPRECATED: "theme.openapi.schemaItem.deprecated", NULLABLE: "theme.openapi.schemaItem.nullable", @@ -90,6 +92,7 @@ export const OPENAPI_SCHEMA_ITEM = { ENUM_VALUE: "theme.openapi.schemaItem.enumValue", ENUM_DESCRIPTION: "theme.openapi.schemaItem.enumDescription", POSSIBLE_VALUES: "theme.openapi.schemaItem.possibleValues", + EXPRESSION: "theme.openapi.schemaItem.expression", ONE_OF: "theme.openapi.schemaItem.oneOf", ANY_OF: "theme.openapi.schemaItem.anyOf", };