From 6f6b5cfe47523d11f3b0bfde34b5d9aa8f6b43a1 Mon Sep 17 00:00:00 2001 From: Steven Serrata Date: Thu, 7 Aug 2025 10:17:04 -0500 Subject: [PATCH 1/3] fix: alias @faker-js/faker to false in webpack to reduce bundle size The Postman code generator dependency includes @faker-js/faker, which isn't needed in the browser but adds significant bundle weight. This change uses a webpack alias and IgnorePlugin to exclude it from the client bundle. --- .../src/index.ts | 76 ++++++++++--------- 1 file changed, 42 insertions(+), 34 deletions(-) diff --git a/packages/docusaurus-theme-openapi-docs/src/index.ts b/packages/docusaurus-theme-openapi-docs/src/index.ts index 7d293e086..c2eba29d6 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,45 @@ 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; + + // --- Drop-in replacement for @faker-js/faker -------------------------- + const fakerAlias = { "@faker-js/faker": false } as const; + + 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 +86,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; }, }; } From 9ee23093ae89ae60991b030c16f46781d779d93e Mon Sep 17 00:00:00 2001 From: Steven Serrata Date: Thu, 7 Aug 2025 10:18:44 -0500 Subject: [PATCH 2/3] remove code comments --- packages/docusaurus-theme-openapi-docs/src/index.ts | 2 -- 1 file changed, 2 deletions(-) diff --git a/packages/docusaurus-theme-openapi-docs/src/index.ts b/packages/docusaurus-theme-openapi-docs/src/index.ts index c2eba29d6..32ccddf70 100644 --- a/packages/docusaurus-theme-openapi-docs/src/index.ts +++ b/packages/docusaurus-theme-openapi-docs/src/index.ts @@ -37,13 +37,11 @@ export default function docusaurusThemeOpenAPI(): Plugin { ): Configuration { const { getStyleLoaders, currentBundler } = utils; - // --- Drop-in replacement for @faker-js/faker -------------------------- const fakerAlias = { "@faker-js/faker": false } as const; const ignoreFaker = new currentBundler.instance.IgnorePlugin({ resourceRegExp: /^@faker-js\/faker$/, }); - // ---------------------------------------------------------------------- const existingRules: any[] = config.module?.rules ?? []; const hasSassRule = existingRules.some( From 4cef18070fd820a78d3e30327d2830d0cb24d094 Mon Sep 17 00:00:00 2001 From: Steven Serrata Date: Thu, 7 Aug 2025 10:26:23 -0500 Subject: [PATCH 3/3] add faker shim to prevent runtime errors --- .../docusaurus-theme-openapi-docs/src/index.ts | 10 +++++++++- .../src/shims/faker.ts | 15 +++++++++++++++ 2 files changed, 24 insertions(+), 1 deletion(-) create mode 100644 packages/docusaurus-theme-openapi-docs/src/shims/faker.ts diff --git a/packages/docusaurus-theme-openapi-docs/src/index.ts b/packages/docusaurus-theme-openapi-docs/src/index.ts index 32ccddf70..d5900dfc9 100644 --- a/packages/docusaurus-theme-openapi-docs/src/index.ts +++ b/packages/docusaurus-theme-openapi-docs/src/index.ts @@ -37,7 +37,15 @@ export default function docusaurusThemeOpenAPI(): Plugin { ): Configuration { const { getStyleLoaders, currentBundler } = utils; - const fakerAlias = { "@faker-js/faker": false } as const; + const fakerAlias = { + "@faker-js/faker": path.resolve( + __dirname, + "..", + "src", + "shims", + "faker.ts" + ), + }; const ignoreFaker = new currentBundler.instance.IgnorePlugin({ resourceRegExp: /^@faker-js\/faker$/, 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;