diff --git a/packages/docusaurus-theme-openapi-docs/src/index.ts b/packages/docusaurus-theme-openapi-docs/src/index.ts index 7d293e086..d5900dfc9 100644 --- a/packages/docusaurus-theme-openapi-docs/src/index.ts +++ b/packages/docusaurus-theme-openapi-docs/src/index.ts @@ -7,19 +7,19 @@ import path from "path"; -import type { Plugin } from "@docusaurus/types"; +import type { Plugin, ConfigureWebpackUtils } from "@docusaurus/types"; +import type { Configuration } from "webpack"; export default function docusaurusThemeOpenAPI(): Plugin { return { name: "docusaurus-theme-openapi", getClientModules() { - const modules = [ + return [ require.resolve( path.join(__dirname, "..", "lib", "theme", "styles.scss") ), ]; - return modules; }, getThemePath() { @@ -30,26 +30,51 @@ export default function docusaurusThemeOpenAPI(): Plugin { return path.resolve(__dirname, "..", "src", "theme"); }, - configureWebpack(_, isServer, utils) { - const rules: any = _.module?.rules ?? []; - const sassLoaderRule = rules.filter((r: any) => { - return String(r.test) === String(/\.s[ca]ss$/); + configureWebpack( + config: Configuration, + isServer: boolean, + utils: ConfigureWebpackUtils + ): Configuration { + const { getStyleLoaders, currentBundler } = utils; + + const fakerAlias = { + "@faker-js/faker": path.resolve( + __dirname, + "..", + "src", + "shims", + "faker.ts" + ), + }; + + const ignoreFaker = new currentBundler.instance.IgnorePlugin({ + resourceRegExp: /^@faker-js\/faker$/, }); - const { getStyleLoaders } = utils; - // Avoid conflicts with docusaurus-plugin-sass - if (sassLoaderRule.length === 0) { - return { - resolve: { - fallback: { - buffer: require.resolve("buffer/"), - }, + + const existingRules: any[] = config.module?.rules ?? []; + const hasSassRule = existingRules.some( + (r) => String(r.test) === String(/\.s[ca]ss$/) + ); + + const baseConfig: Configuration = { + resolve: { + alias: fakerAlias, + fallback: { + buffer: require.resolve("buffer/"), }, - plugins: [ - new utils.currentBundler.instance.ProvidePlugin({ - process: require.resolve("process/browser"), - Buffer: ["buffer", "Buffer"], - }), - ], + }, + plugins: [ + ignoreFaker, + new currentBundler.instance.ProvidePlugin({ + process: require.resolve("process/browser"), + Buffer: ["buffer", "Buffer"], + }), + ], + }; + + if (!hasSassRule) { + return { + ...baseConfig, module: { rules: [ { @@ -67,19 +92,8 @@ export default function docusaurusThemeOpenAPI(): Plugin { }, }; } - return { - resolve: { - fallback: { - buffer: require.resolve("buffer/"), - }, - }, - plugins: [ - new utils.currentBundler.instance.ProvidePlugin({ - process: require.resolve("process/browser"), - Buffer: ["buffer", "Buffer"], - }), - ], - }; + + return baseConfig; }, }; } diff --git a/packages/docusaurus-theme-openapi-docs/src/shims/faker.ts b/packages/docusaurus-theme-openapi-docs/src/shims/faker.ts new file mode 100644 index 000000000..110cc53de --- /dev/null +++ b/packages/docusaurus-theme-openapi-docs/src/shims/faker.ts @@ -0,0 +1,15 @@ +/* ============================================================================ + * 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. + * ========================================================================== */ + +const stub = new Proxy( + {}, + { + get: () => () => "", + } +); + +export = stub;