Skip to content

Commit 9e2c7ab

Browse files
jlvandenhoutsserrata
authored andcommitted
Allow custom plugin to render (#784)
* Make docs plugin configurable * Update README
1 parent 1386c26 commit 9e2c7ab

File tree

4 files changed

+21
-12
lines changed

4 files changed

+21
-12
lines changed

README.md

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -146,10 +146,11 @@ Here is an example of properly configuring `docusaurus.config.js` file for `docu
146146

147147
The `docusaurus-plugin-openapi-docs` plugin can be configured with the following options:
148148

149-
| Name | Type | Default | Description |
150-
| -------------- | -------- | ------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- |
151-
| `id` | `string` | `null` | A unique plugin ID. |
152-
| `docsPluginId` | `string` | `null` | The ID associated with the `plugin-content-docs` or `preset` instance used to render the OpenAPI docs (e.g. "your-plugin-id", "classic", "default"). |
149+
| Name | Type | Default | Description |
150+
| -------------- | -------- | --------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------- |
151+
| `id` | `string` | `null` | A unique plugin ID. |
152+
| `docsPlugin` | `string` | `@docusaurus/plugin-content-docs` | The plugin used to render the OpenAPI docs (ignored if the plugin instance referenced by `docsPluginId` is a `preset`). |
153+
| `docsPluginId` | `string` | `null` | The plugin ID associated with the `preset` or configured `docsPlugin` instance used to render the OpenAPI docs (e.g. "your-plugin-id", "classic", "default"). |
153154

154155
### config
155156

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

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ export function isURL(str: string): boolean {
4040

4141
export function getDocsPluginConfig(
4242
presetsPlugins: any[],
43+
plugin: string,
4344
pluginId: string
4445
): Object | undefined {
4546
// eslint-disable-next-line array-callback-return
@@ -51,10 +52,7 @@ export function getDocsPluginConfig(
5152
}
5253

5354
// Search plugin-content-docs instances
54-
if (
55-
typeof data[0] === "string" &&
56-
data[0] === "@docusaurus/plugin-content-docs"
57-
) {
55+
if (typeof data[0] === "string" && data[0] === plugin) {
5856
const configPluginId = data[1].id ? data[1].id : "default";
5957
if (configPluginId === pluginId) {
6058
return data[1];
@@ -70,7 +68,7 @@ export function getDocsPluginConfig(
7068
}
7169

7270
// Search plugin-content-docs instances
73-
if (filteredConfig[0] === "@docusaurus/plugin-content-docs") {
71+
if (filteredConfig[0] === plugin) {
7472
const configPluginId = filteredConfig[1].id
7573
? filteredConfig[1].id
7674
: "default";
@@ -94,14 +92,22 @@ export default function pluginOpenAPIDocs(
9492
context: LoadContext,
9593
options: PluginOptions
9694
): Plugin<LoadedContent> {
97-
const { config, docsPluginId } = options;
95+
const {
96+
config,
97+
docsPlugin = "@docusaurus/plugin-content-docs",
98+
docsPluginId,
99+
} = options;
98100
const { siteDir, siteConfig } = context;
99101

100102
// Get routeBasePath and path from plugin-content-docs or preset
101103
const presets: any = siteConfig.presets;
102104
const plugins: any = siteConfig.plugins;
103105
const presetsPlugins = presets.concat(plugins);
104-
let docData: any = getDocsPluginConfig(presetsPlugins, docsPluginId);
106+
let docData: any = getDocsPluginConfig(
107+
presetsPlugins,
108+
docsPlugin,
109+
docsPluginId
110+
);
105111
let docRouteBasePath = docData ? docData.routeBasePath : undefined;
106112
let docPath = docData ? (docData.path ? docData.path : "docs") : undefined;
107113

@@ -120,7 +126,7 @@ export default function pluginOpenAPIDocs(
120126

121127
// Override docPath if pluginId provided
122128
if (pluginId) {
123-
docData = getDocsPluginConfig(presetsPlugins, pluginId);
129+
docData = getDocsPluginConfig(presetsPlugins, docsPlugin, pluginId);
124130
docRouteBasePath = docData ? docData.routeBasePath : undefined;
125131
docPath = docData ? (docData.path ? docData.path : "docs") : undefined;
126132
}

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ const markdownGenerators = Joi.object({
2323

2424
export const OptionsSchema = Joi.object({
2525
id: Joi.string().required(),
26+
docsPlugin: Joi.string(),
2627
docsPluginId: Joi.string().required(),
2728
config: Joi.object()
2829
.pattern(

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ export type {
2323
} from "@docusaurus/plugin-content-docs-types";
2424
export interface PluginOptions {
2525
id?: string;
26+
docsPlugin?: string;
2627
docsPluginId: string;
2728
config: {
2829
[key: string]: APIOptions;

0 commit comments

Comments
 (0)