Skip to content

Commit 45a60f4

Browse files
authored
[Enhancement] Add deprecated support to schema items (#367)
* Include deprecated in markdown schema item * Hide deprecated schema items from examples * Add deprecated and strikethrough styles and conditionally render * Revert petstore.yaml to original
1 parent 24f7cdf commit 45a60f4

File tree

7 files changed

+45
-10
lines changed

7 files changed

+45
-10
lines changed

packages/docusaurus-plugin-openapi-docs/src/markdown/createRequestSchema.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -597,6 +597,7 @@ function createEdges({
597597
collapsible: false,
598598
name,
599599
required: Array.isArray(required) ? required.includes(name) : required,
600+
deprecated: mergedSchemas.deprecated,
600601
schemaDescription: mergedSchemas.description,
601602
schemaName: schemaName,
602603
qualifierMessage: getQualifierMessage(schema),
@@ -630,6 +631,7 @@ function createEdges({
630631
collapsible: false,
631632
name,
632633
required: Array.isArray(required) ? required.includes(name) : required,
634+
deprecated: schema.deprecated,
633635
schemaDescription: schema.description,
634636
schemaName: schemaName,
635637
qualifierMessage: getQualifierMessage(schema),

packages/docusaurus-plugin-openapi-docs/src/markdown/createResponseSchema.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -597,6 +597,7 @@ function createEdges({
597597
collapsible: false,
598598
name,
599599
required: false,
600+
deprecated: mergedSchemas.deprecated,
600601
schemaDescription: mergedSchemas.description,
601602
schemaName: schemaName,
602603
qualifierMessage: getQualifierMessage(schema),
@@ -630,6 +631,7 @@ function createEdges({
630631
collapsible: false,
631632
name,
632633
required: false,
634+
deprecated: schema.deprecated,
633635
schemaDescription: schema.description,
634636
schemaName: schemaName,
635637
qualifierMessage: getQualifierMessage(schema),

packages/docusaurus-plugin-openapi-docs/src/openapi/createRequestExample.ts

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,7 @@ export const sampleRequestFromSchema = (schema: SchemaObject = {}): any => {
9898
mergeAllOf(allOf);
9999
if (mergedSchemas.properties) {
100100
for (const [key, value] of Object.entries(mergedSchemas.properties)) {
101-
if (value.readOnly && value.readOnly === true) {
101+
if ((value.readOnly && value.readOnly === true) || value.deprecated) {
102102
delete mergedSchemas.properties[key];
103103
}
104104
}
@@ -121,15 +121,21 @@ export const sampleRequestFromSchema = (schema: SchemaObject = {}): any => {
121121
for (let [name, prop] of Object.entries(properties ?? {})) {
122122
if (prop.properties) {
123123
for (const [key, value] of Object.entries(prop.properties)) {
124-
if (value.readOnly && value.readOnly === true) {
124+
if (
125+
(value.readOnly && value.readOnly === true) ||
126+
value.deprecated
127+
) {
125128
delete prop.properties[key];
126129
}
127130
}
128131
}
129132

130133
if (prop.items && prop.items.properties) {
131134
for (const [key, value] of Object.entries(prop.items.properties)) {
132-
if (value.readOnly && value.readOnly === true) {
135+
if (
136+
(value.readOnly && value.readOnly === true) ||
137+
value.deprecated
138+
) {
133139
delete prop.items.properties[key];
134140
}
135141
}
@@ -168,7 +174,7 @@ export const sampleRequestFromSchema = (schema: SchemaObject = {}): any => {
168174
return normalizeArray(schema.enum)[0];
169175
}
170176

171-
if (schema.readOnly && schema.readOnly === true) {
177+
if ((schema.readOnly && schema.readOnly === true) || schema.deprecated) {
172178
return undefined;
173179
}
174180

packages/docusaurus-plugin-openapi-docs/src/openapi/createResponseExample.ts

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,10 @@ export const sampleResponseFromSchema = (schema: SchemaObject = {}): any => {
8888
mergeAllOf(allOf);
8989
if (mergedSchemas.properties) {
9090
for (const [key, value] of Object.entries(mergedSchemas.properties)) {
91-
if (value.writeOnly && value.writeOnly === true) {
91+
if (
92+
(value.writeOnly && value.writeOnly === true) ||
93+
value.deprecated
94+
) {
9295
delete mergedSchemas.properties[key];
9396
}
9497
}
@@ -121,15 +124,21 @@ export const sampleResponseFromSchema = (schema: SchemaObject = {}): any => {
121124
for (let [name, prop] of Object.entries(properties ?? {})) {
122125
if (prop.properties) {
123126
for (const [key, value] of Object.entries(prop.properties)) {
124-
if (value.writeOnly && value.writeOnly === true) {
127+
if (
128+
(value.writeOnly && value.writeOnly === true) ||
129+
value.deprecated
130+
) {
125131
delete prop.properties[key];
126132
}
127133
}
128134
}
129135

130136
if (prop.items && prop.items.properties) {
131137
for (const [key, value] of Object.entries(prop.items.properties)) {
132-
if (value.writeOnly && value.writeOnly === true) {
138+
if (
139+
(value.writeOnly && value.writeOnly === true) ||
140+
value.deprecated
141+
) {
133142
delete prop.items.properties[key];
134143
}
135144
}
@@ -168,7 +177,7 @@ export const sampleResponseFromSchema = (schema: SchemaObject = {}): any => {
168177
return normalizeArray(schema.enum)[0];
169178
}
170179

171-
if (schema.writeOnly && schema.writeOnly === true) {
180+
if ((schema.writeOnly && schema.writeOnly === true) || schema.deprecated) {
172181
return undefined;
173182
}
174183

packages/docusaurus-theme-openapi-docs/src/theme/SchemaItem/index.js

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ function SchemaItem({
2323
name,
2424
qualifierMessage,
2525
required,
26+
deprecated,
2627
schemaDescription,
2728
schemaName,
2829
defaultValue,
@@ -32,6 +33,10 @@ function SchemaItem({
3233
() => <strong className={styles.required}> required</strong>
3334
);
3435

36+
const renderDeprecated = guard(deprecated, () => (
37+
<strong className={styles.deprecated}> deprecated</strong>
38+
));
39+
3540
const renderSchemaDescription = guard(schemaDescription, (description) => (
3641
<div>
3742
<ReactMarkdown
@@ -73,9 +78,10 @@ function SchemaItem({
7378

7479
const schemaContent = (
7580
<div>
76-
<strong>{name}</strong>
81+
<strong className={deprecated && styles.strikethrough}>{name}</strong>
7782
<span className={styles.schemaName}> {schemaName}</span>
78-
{renderRequired}
83+
{!deprecated && renderRequired}
84+
{renderDeprecated}
7985
{renderQualifierMessage}
8086
{renderDefaultValue}
8187
{renderSchemaDescription}

packages/docusaurus-theme-openapi-docs/src/theme/SchemaItem/styles.module.css

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,3 +22,12 @@
2222
font-size: var(--ifm-code-font-size);
2323
color: var(--openapi-required);
2424
}
25+
26+
.deprecated {
27+
font-size: var(--ifm-code-font-size);
28+
color: var(--openapi-deprecated);
29+
}
30+
31+
.strikethrough {
32+
text-decoration: line-through;
33+
}

packages/docusaurus-theme-openapi-docs/src/theme/styles.css

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77

88
:root {
99
--openapi-required: var(--ifm-color-danger);
10+
--openapi-deprecated: var(--ifm-color-warning);
1011
--openapi-code-blue: var(--ifm-color-info);
1112
--openapi-code-red: var(--ifm-color-danger);
1213
--openapi-code-orange: var(--ifm-color-warning);

0 commit comments

Comments
 (0)