@docusaurus/bundler 3.5.2 → 3.6.0-canary-6132

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. package/LICENSE +21 -0
  2. package/lib/compiler.d.ts +22 -0
  3. package/lib/compiler.d.ts.map +1 -0
  4. package/lib/compiler.js +66 -0
  5. package/lib/compiler.js.map +1 -0
  6. package/lib/currentBundler.d.ts +33 -0
  7. package/lib/currentBundler.d.ts.map +1 -0
  8. package/lib/currentBundler.js +73 -0
  9. package/lib/currentBundler.js.map +1 -0
  10. package/lib/importFaster.d.ts +17 -0
  11. package/lib/importFaster.d.ts.map +1 -0
  12. package/lib/importFaster.js +57 -0
  13. package/lib/importFaster.js.map +1 -0
  14. package/lib/index.d.ts +6 -22
  15. package/lib/index.d.ts.map +1 -1
  16. package/lib/index.js +18 -52
  17. package/lib/index.js.map +1 -1
  18. package/lib/loaders/jsLoader.d.ts +16 -0
  19. package/lib/loaders/jsLoader.d.ts.map +1 -0
  20. package/lib/loaders/jsLoader.js +67 -0
  21. package/lib/loaders/jsLoader.js.map +1 -0
  22. package/lib/loaders/styleLoader.d.ts +11 -0
  23. package/lib/loaders/styleLoader.d.ts.map +1 -0
  24. package/lib/loaders/styleLoader.js +68 -0
  25. package/lib/loaders/styleLoader.js.map +1 -0
  26. package/lib/minification.d.ts +14 -0
  27. package/lib/minification.d.ts.map +1 -0
  28. package/lib/minification.js +147 -0
  29. package/lib/minification.js.map +1 -0
  30. package/lib/minifyHtml.d.ts +18 -0
  31. package/lib/minifyHtml.d.ts.map +1 -0
  32. package/lib/minifyHtml.js +91 -0
  33. package/lib/minifyHtml.js.map +1 -0
  34. package/package.json +35 -5
  35. package/src/compiler.ts +87 -0
  36. package/src/currentBundler.ts +106 -0
  37. package/src/importFaster.ts +77 -0
  38. package/src/index.ts +17 -82
  39. package/src/loaders/jsLoader.ts +89 -0
  40. package/src/loaders/styleLoader.ts +80 -0
  41. package/src/minification.ts +176 -0
  42. package/src/minifyHtml.ts +111 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"styleLoader.js","sourceRoot":"","sources":["../../src/loaders/styleLoader.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;AAKH,8DAqEC;AAxED,sDAAsD;AAG/C,KAAK,UAAU,yBAAyB,CAAC,EAC9C,cAAc,GAGf;IACC,MAAM,gBAAgB,GAAG,MAAM,IAAA,oCAAmB,EAAC,EAAC,cAAc,EAAC,CAAC,CAAC;IAErE,OAAO,SAAS,eAAe,CAC7B,QAAiB,EACjB,gBAEI,EAAE;QAEN,MAAM,UAAU,GAA6B;YAC3C,oFAAoF;YACpF,QAAQ,EAAE,KAAK;YACf,GAAG,aAAa;SACjB,CAAC;QAEF,yDAAyD;QACzD,kEAAkE;QAClE,IAAI,QAAQ,EAAE,CAAC;YACb,OAAO,UAAU,CAAC,OAAO;gBACvB,CAAC,CAAC;oBACE;wBACE,MAAM,EAAE,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC;wBACrC,OAAO,EAAE,UAAU;qBACpB;iBACF;gBACH,CAAC,CAAC,2BAA2B;oBAC3B,CAAC,EAAC,MAAM,EAAE,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,EAAC,CAAC,CAAC;QACjD,CAAC;QAED,OAAO;YACL;gBACE,MAAM,EAAE,gBAAgB,CAAC,MAAM;gBAC/B,OAAO,EAAE;oBACP,QAAQ,EAAE,IAAI;iBACf;aACF;YACD;gBACE,MAAM,EAAE,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC;gBACrC,OAAO,EAAE,UAAU;aACpB;YAED,oEAAoE;YACpE,uDAAuD;YACvD,4EAA4E;YAC5E,0DAA0D;YAC1D,kFAAkF;YAClF;gBACE,0DAA0D;gBAC1D,mEAAmE;gBACnE,eAAe;gBACf,MAAM,EAAE,OAAO,CAAC,OAAO,CAAC,gBAAgB,CAAC;gBACzC,OAAO,EAAE;oBACP,cAAc,EAAE;wBACd,6CAA6C;wBAC7C,2DAA2D;wBAC3D,KAAK,EAAE,SAAS;wBAChB,OAAO,EAAE;4BACP,0CAA0C;4BAC1C,OAAO,CAAC,cAAc,CAAC;yBACxB;qBACF;iBACF;aACF;SACF,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Copyright (c) Facebook, Inc. and its affiliates.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ */
7
+ import type { WebpackPluginInstance } from 'webpack';
8
+ import type { CurrentBundler, FasterConfig } from '@docusaurus/types';
9
+ export type MinimizersConfig = {
10
+ faster: Pick<FasterConfig, 'swcJsMinimizer' | 'lightningCssMinimizer'>;
11
+ currentBundler: CurrentBundler;
12
+ };
13
+ export declare function getMinimizers(params: MinimizersConfig): Promise<WebpackPluginInstance[]>;
14
+ //# sourceMappingURL=minification.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"minification.d.ts","sourceRoot":"","sources":["../src/minification.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAWH,OAAO,KAAK,EAAC,qBAAqB,EAAC,MAAM,SAAS,CAAC;AACnD,OAAO,KAAK,EAAC,cAAc,EAAE,YAAY,EAAC,MAAM,mBAAmB,CAAC;AAEpE,MAAM,MAAM,gBAAgB,GAAG;IAC7B,MAAM,EAAE,IAAI,CAAC,YAAY,EAAE,gBAAgB,GAAG,uBAAuB,CAAC,CAAC;IACvE,cAAc,EAAE,cAAc,CAAC;CAChC,CAAC;AAmJF,wBAAsB,aAAa,CACjC,MAAM,EAAE,gBAAgB,GACvB,OAAO,CAAC,qBAAqB,EAAE,CAAC,CAIlC"}
@@ -0,0 +1,147 @@
1
+ "use strict";
2
+ /**
3
+ * Copyright (c) Facebook, Inc. and its affiliates.
4
+ *
5
+ * This source code is licensed under the MIT license found in the
6
+ * LICENSE file in the root directory of this source tree.
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.getMinimizers = getMinimizers;
10
+ const tslib_1 = require("tslib");
11
+ const terser_webpack_plugin_1 = tslib_1.__importDefault(require("terser-webpack-plugin"));
12
+ const css_minimizer_webpack_plugin_1 = tslib_1.__importDefault(require("css-minimizer-webpack-plugin"));
13
+ const importFaster_1 = require("./importFaster");
14
+ const currentBundler_1 = require("./currentBundler");
15
+ // See https://github.com/webpack-contrib/terser-webpack-plugin#parallel
16
+ function getTerserParallel() {
17
+ let terserParallel = true;
18
+ if (process.env.TERSER_PARALLEL === 'false') {
19
+ terserParallel = false;
20
+ }
21
+ else if (process.env.TERSER_PARALLEL &&
22
+ parseInt(process.env.TERSER_PARALLEL, 10) > 0) {
23
+ terserParallel = parseInt(process.env.TERSER_PARALLEL, 10);
24
+ }
25
+ return terserParallel;
26
+ }
27
+ async function getJsMinimizer({ faster, }) {
28
+ if (faster.swcJsMinimizer) {
29
+ const terserOptions = await (0, importFaster_1.importSwcJsMinimizerOptions)();
30
+ return new terser_webpack_plugin_1.default({
31
+ parallel: getTerserParallel(),
32
+ minify: terser_webpack_plugin_1.default.swcMinify,
33
+ terserOptions,
34
+ });
35
+ }
36
+ return new terser_webpack_plugin_1.default({
37
+ parallel: getTerserParallel(),
38
+ // See https://terser.org/docs/options/
39
+ terserOptions: {
40
+ parse: {
41
+ // We want uglify-js to parse ecma 8 code. However, we don't want it
42
+ // to apply any minification steps that turns valid ecma 5 code
43
+ // into invalid ecma 5 code. This is why the 'compress' and 'output'
44
+ // sections only apply transformations that are ecma 5 safe
45
+ // https://github.com/facebook/create-react-app/pull/4234
46
+ ecma: 2020,
47
+ },
48
+ compress: {
49
+ ecma: 5,
50
+ },
51
+ mangle: {
52
+ safari10: true,
53
+ },
54
+ output: {
55
+ ecma: 5,
56
+ comments: false,
57
+ // Turned on because emoji and regex is not minified properly using
58
+ // default. See https://github.com/facebook/create-react-app/issues/2488
59
+ ascii_only: true,
60
+ },
61
+ },
62
+ });
63
+ }
64
+ async function getLightningCssMinimizer() {
65
+ return new css_minimizer_webpack_plugin_1.default({
66
+ minify: css_minimizer_webpack_plugin_1.default.lightningCssMinify,
67
+ minimizerOptions: await (0, importFaster_1.importLightningCssMinimizerOptions)(),
68
+ });
69
+ }
70
+ async function getCssNanoMinimizer() {
71
+ // This is an historical env variable to opt-out of the advanced minimizer
72
+ // Sometimes there's a bug in it and people are happy to disable it
73
+ const useSimpleCssMinifier = process.env.USE_SIMPLE_CSS_MINIFIER === 'true';
74
+ if (useSimpleCssMinifier) {
75
+ return new css_minimizer_webpack_plugin_1.default();
76
+ }
77
+ // Using the array syntax to add 2 minimizers
78
+ // see https://github.com/webpack-contrib/css-minimizer-webpack-plugin#array
79
+ return new css_minimizer_webpack_plugin_1.default({
80
+ minimizerOptions: [
81
+ // CssNano options
82
+ {
83
+ preset: require.resolve('@docusaurus/cssnano-preset'),
84
+ },
85
+ // CleanCss options
86
+ {
87
+ inline: false,
88
+ level: {
89
+ 1: {
90
+ all: false,
91
+ removeWhitespace: true,
92
+ },
93
+ 2: {
94
+ all: true,
95
+ restructureRules: true,
96
+ removeUnusedAtRules: false,
97
+ },
98
+ },
99
+ },
100
+ ],
101
+ minify: [
102
+ css_minimizer_webpack_plugin_1.default.cssnanoMinify,
103
+ css_minimizer_webpack_plugin_1.default.cleanCssMinify,
104
+ ],
105
+ });
106
+ }
107
+ async function getCssMinimizer(params) {
108
+ return params.faster.lightningCssMinimizer
109
+ ? getLightningCssMinimizer()
110
+ : getCssNanoMinimizer();
111
+ }
112
+ async function getWebpackMinimizers(params) {
113
+ return Promise.all([getJsMinimizer(params), getCssMinimizer(params)]);
114
+ }
115
+ async function getRspackMinimizers({ currentBundler, }) {
116
+ const rspack = (0, currentBundler_1.getCurrentBundlerAsRspack)({ currentBundler });
117
+ const getBrowserslistQueries = await (0, importFaster_1.importGetBrowserslistQueries)();
118
+ const browserslistQueries = getBrowserslistQueries({ isServer: false });
119
+ const swcJsMinimizerOptions = await (0, importFaster_1.importSwcJsMinimizerOptions)();
120
+ return [
121
+ // See https://rspack.dev/plugins/rspack/swc-js-minimizer-rspack-plugin
122
+ // See https://swc.rs/docs/configuration/minification
123
+ new rspack.SwcJsMinimizerRspackPlugin({
124
+ minimizerOptions: {
125
+ minify: true,
126
+ ...swcJsMinimizerOptions,
127
+ },
128
+ }),
129
+ new rspack.LightningCssMinimizerRspackPlugin({
130
+ minimizerOptions: {
131
+ ...(await (0, importFaster_1.importLightningCssMinimizerOptions)()),
132
+ // Not sure why but Rspack takes browserslist queries directly
133
+ // While LightningCSS targets are normally not browserslist queries
134
+ // We have to override the option to avoid errors
135
+ // See https://rspack.dev/plugins/rspack/lightning-css-minimizer-rspack-plugin#minimizeroptions
136
+ // See https://lightningcss.dev/transpilation.html
137
+ targets: browserslistQueries,
138
+ },
139
+ }),
140
+ ];
141
+ }
142
+ async function getMinimizers(params) {
143
+ return params.currentBundler.name === 'rspack'
144
+ ? getRspackMinimizers(params)
145
+ : getWebpackMinimizers(params);
146
+ }
147
+ //# sourceMappingURL=minification.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"minification.js","sourceRoot":"","sources":["../src/minification.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Copyright (c) Facebook, Inc. and its affiliates.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ */
7
+ export type HtmlMinifierType = 'swc' | 'terser';
8
+ export type HtmlMinifierResult = {
9
+ code: string;
10
+ warnings: string[];
11
+ };
12
+ export type HtmlMinifier = {
13
+ minify: (html: string) => Promise<HtmlMinifierResult>;
14
+ };
15
+ export declare function getHtmlMinifier({ type, }: {
16
+ type: HtmlMinifierType;
17
+ }): Promise<HtmlMinifier>;
18
+ //# sourceMappingURL=minifyHtml.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"minifyHtml.d.ts","sourceRoot":"","sources":["../src/minifyHtml.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAQH,MAAM,MAAM,gBAAgB,GAAG,KAAK,GAAG,QAAQ,CAAC;AAEhD,MAAM,MAAM,kBAAkB,GAAG;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,kBAAkB,CAAC,CAAC;CACvD,CAAC;AAMF,wBAAsB,eAAe,CAAC,EACpC,IAAI,GACL,EAAE;IACD,IAAI,EAAE,gBAAgB,CAAC;CACxB,GAAG,OAAO,CAAC,YAAY,CAAC,CASxB"}
@@ -0,0 +1,91 @@
1
+ "use strict";
2
+ /**
3
+ * Copyright (c) Facebook, Inc. and its affiliates.
4
+ *
5
+ * This source code is licensed under the MIT license found in the
6
+ * LICENSE file in the root directory of this source tree.
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.getHtmlMinifier = getHtmlMinifier;
10
+ const html_minifier_terser_1 = require("html-minifier-terser");
11
+ const importFaster_1 = require("./importFaster");
12
+ // Historical env variable
13
+ const SkipHtmlMinification = process.env.SKIP_HTML_MINIFICATION === 'true';
14
+ const NoopMinifier = {
15
+ minify: async (html) => ({ code: html, warnings: [] }),
16
+ };
17
+ async function getHtmlMinifier({ type, }) {
18
+ if (SkipHtmlMinification) {
19
+ return NoopMinifier;
20
+ }
21
+ if (type === 'swc') {
22
+ return getSwcMinifier();
23
+ }
24
+ else {
25
+ return getTerserMinifier();
26
+ }
27
+ }
28
+ // Minify html with https://github.com/DanielRuf/html-minifier-terser
29
+ async function getTerserMinifier() {
30
+ return {
31
+ minify: async function minifyHtmlWithTerser(html) {
32
+ try {
33
+ const code = await (0, html_minifier_terser_1.minify)(html, {
34
+ removeComments: false,
35
+ removeRedundantAttributes: true,
36
+ removeEmptyAttributes: true,
37
+ removeScriptTypeAttributes: true,
38
+ removeStyleLinkTypeAttributes: true,
39
+ useShortDoctype: true,
40
+ minifyJS: true,
41
+ });
42
+ return { code, warnings: [] };
43
+ }
44
+ catch (err) {
45
+ throw new Error(`HTML minification failed (Terser)`, {
46
+ cause: err,
47
+ });
48
+ }
49
+ },
50
+ };
51
+ }
52
+ // Minify html with @swc/html
53
+ // Not well-documented but fast!
54
+ // See https://github.com/swc-project/swc/discussions/9616
55
+ async function getSwcMinifier() {
56
+ const swcHtmlMinifier = await (0, importFaster_1.importSwcHtmlMinifier)();
57
+ return {
58
+ minify: async function minifyHtmlWithSwc(html) {
59
+ try {
60
+ const result = await swcHtmlMinifier(Buffer.from(html), {
61
+ // Removing comments can lead to React hydration errors
62
+ // See https://x.com/sebastienlorber/status/1841966927440478577
63
+ removeComments: false,
64
+ // TODO maybe it's fine to only keep <!-- --> React comments?
65
+ preserveComments: [],
66
+ // Sorting these attributes (class) can lead to React hydration errors
67
+ sortSpaceSeparatedAttributeValues: false,
68
+ sortAttributes: false,
69
+ removeRedundantAttributes: 'all',
70
+ removeEmptyAttributes: true,
71
+ minifyJs: true,
72
+ minifyJson: true,
73
+ minifyCss: true,
74
+ });
75
+ const warnings = (result.errors ?? []).map((diagnostic) => {
76
+ return `[HTML minifier diagnostic - ${diagnostic.level}] ${diagnostic.message} - ${JSON.stringify(diagnostic.span)}`;
77
+ });
78
+ return {
79
+ code: result.code,
80
+ warnings,
81
+ };
82
+ }
83
+ catch (err) {
84
+ throw new Error(`HTML minification failed (SWC)`, {
85
+ cause: err,
86
+ });
87
+ }
88
+ },
89
+ };
90
+ }
91
+ //# sourceMappingURL=minifyHtml.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"minifyHtml.js","sourceRoot":"","sources":["../src/minifyHtml.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;AAuBH,0CAaC;AAlCD,+DAAkE;AAClE,iDAAqD;AAErD,0BAA0B;AAC1B,MAAM,oBAAoB,GAAG,OAAO,CAAC,GAAG,CAAC,sBAAsB,KAAK,MAAM,CAAC;AAa3E,MAAM,YAAY,GAAiB;IACjC,MAAM,EAAE,KAAK,EAAE,IAAY,EAAE,EAAE,CAAC,CAAC,EAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAC,CAAC;CAC7D,CAAC;AAEK,KAAK,UAAU,eAAe,CAAC,EACpC,IAAI,GAGL;IACC,IAAI,oBAAoB,EAAE,CAAC;QACzB,OAAO,YAAY,CAAC;IACtB,CAAC;IACD,IAAI,IAAI,KAAK,KAAK,EAAE,CAAC;QACnB,OAAO,cAAc,EAAE,CAAC;IAC1B,CAAC;SAAM,CAAC;QACN,OAAO,iBAAiB,EAAE,CAAC;IAC7B,CAAC;AACH,CAAC;AAED,qEAAqE;AACrE,KAAK,UAAU,iBAAiB;IAC9B,OAAO;QACL,MAAM,EAAE,KAAK,UAAU,oBAAoB,CAAC,IAAI;YAC9C,IAAI,CAAC;gBACH,MAAM,IAAI,GAAG,MAAM,IAAA,6BAAkB,EAAC,IAAI,EAAE;oBAC1C,cAAc,EAAE,KAAK;oBACrB,yBAAyB,EAAE,IAAI;oBAC/B,qBAAqB,EAAE,IAAI;oBAC3B,0BAA0B,EAAE,IAAI;oBAChC,6BAA6B,EAAE,IAAI;oBACnC,eAAe,EAAE,IAAI;oBACrB,QAAQ,EAAE,IAAI;iBACf,CAAC,CAAC;gBACH,OAAO,EAAC,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAC,CAAC;YAC9B,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,MAAM,IAAI,KAAK,CAAC,mCAAmC,EAAE;oBACnD,KAAK,EAAE,GAAY;iBACpB,CAAC,CAAC;YACL,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC;AAED,6BAA6B;AAC7B,gCAAgC;AAChC,0DAA0D;AAC1D,KAAK,UAAU,cAAc;IAC3B,MAAM,eAAe,GAAG,MAAM,IAAA,oCAAqB,GAAE,CAAC;IACtD,OAAO;QACL,MAAM,EAAE,KAAK,UAAU,iBAAiB,CAAC,IAAI;YAC3C,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;oBACtD,uDAAuD;oBACvD,+DAA+D;oBAC/D,cAAc,EAAE,KAAK;oBACrB,6DAA6D;oBAC7D,gBAAgB,EAAE,EAAE;oBAEpB,sEAAsE;oBACtE,iCAAiC,EAAE,KAAK;oBACxC,cAAc,EAAE,KAAK;oBAErB,yBAAyB,EAAE,KAAK;oBAChC,qBAAqB,EAAE,IAAI;oBAC3B,QAAQ,EAAE,IAAI;oBACd,UAAU,EAAE,IAAI;oBAChB,SAAS,EAAE,IAAI;iBAChB,CAAC,CAAC;gBAEH,MAAM,QAAQ,GAAG,CAAC,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE;oBACxD,OAAO,+BAA+B,UAAU,CAAC,KAAK,KACpD,UAAU,CAAC,OACb,MAAM,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC1C,CAAC,CAAC,CAAC;gBAEH,OAAO;oBACL,IAAI,EAAE,MAAM,CAAC,IAAI;oBACjB,QAAQ;iBACT,CAAC;YACJ,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,MAAM,IAAI,KAAK,CAAC,gCAAgC,EAAE;oBAChD,KAAK,EAAE,GAAY;iBACpB,CAAC,CAAC;YACL,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@docusaurus/bundler",
3
- "version": "3.5.2",
3
+ "version": "3.6.0-canary-6132",
4
4
  "description": "Docusaurus util package to abstract the current bundler.",
5
5
  "main": "./lib/index.js",
6
6
  "types": "./lib/index.d.ts",
@@ -18,15 +18,45 @@
18
18
  },
19
19
  "license": "MIT",
20
20
  "dependencies": {
21
- "@docusaurus/logger": "3.5.2",
22
- "@docusaurus/types": "3.5.2",
21
+ "@babel/core": "^7.25.9",
22
+ "@docusaurus/babel": "3.6.0-canary-6132",
23
+ "@docusaurus/cssnano-preset": "3.6.0-canary-6132",
24
+ "@docusaurus/logger": "3.6.0-canary-6132",
25
+ "@docusaurus/types": "3.6.0-canary-6132",
26
+ "@docusaurus/utils": "3.6.0-canary-6132",
27
+ "autoprefixer": "^10.4.14",
28
+ "babel-loader": "^9.2.1",
29
+ "clean-css": "^5.3.2",
23
30
  "copy-webpack-plugin": "^11.0.0",
31
+ "css-loader": "^6.8.1",
32
+ "css-minimizer-webpack-plugin": "^5.0.1",
33
+ "cssnano": "^6.1.2",
34
+ "file-loader": "^6.2.0",
35
+ "html-minifier-terser": "^7.2.0",
24
36
  "mini-css-extract-plugin": "^2.9.1",
37
+ "null-loader": "^4.0.1",
38
+ "postcss": "^8.4.26",
39
+ "postcss-loader": "^7.3.3",
40
+ "react-dev-utils": "^12.0.1",
41
+ "terser-webpack-plugin": "^5.3.9",
25
42
  "tslib": "^2.6.0",
26
- "webpack": "^5.88.1",
43
+ "url-loader": "^4.1.1",
44
+ "webpack": "^5.95.0",
27
45
  "webpackbar": "^6.0.1"
28
46
  },
47
+ "peerDependencies": {
48
+ "@docusaurus/faster": "3.5.2"
49
+ },
50
+ "peerDependenciesMeta": {
51
+ "@docusaurus/faster": {
52
+ "optional": true
53
+ }
54
+ },
55
+ "devDependencies": {
56
+ "@total-typescript/shoehorn": "^0.1.2"
57
+ },
29
58
  "engines": {
30
59
  "node": ">=18.0"
31
- }
60
+ },
61
+ "gitHead": "4930a868b86cafcb0786e2ddc6d400459127c4f6"
32
62
  }
@@ -0,0 +1,87 @@
1
+ /**
2
+ * Copyright (c) Facebook, Inc. and its affiliates.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ */
7
+
8
+ import {type Configuration} from 'webpack';
9
+ import logger from '@docusaurus/logger';
10
+ import formatWebpackMessages from 'react-dev-utils/formatWebpackMessages';
11
+ import type webpack from 'webpack';
12
+ import type {CurrentBundler} from '@docusaurus/types';
13
+
14
+ export function formatStatsErrorMessage(
15
+ statsJson: ReturnType<webpack.Stats['toJson']> | undefined,
16
+ ): string | undefined {
17
+ if (statsJson?.errors?.length) {
18
+ // TODO formatWebpackMessages does not print stack-traces
19
+ // Also the error causal chain is lost here
20
+ // We log the stacktrace inside serverEntry.tsx for now (not ideal)
21
+ const {errors} = formatWebpackMessages(statsJson);
22
+ return errors
23
+ .map((str) => logger.red(str))
24
+ .join(`\n\n${logger.yellow('--------------------------')}\n\n`);
25
+ }
26
+ return undefined;
27
+ }
28
+
29
+ export function printStatsWarnings(
30
+ statsJson: ReturnType<webpack.Stats['toJson']> | undefined,
31
+ ): void {
32
+ if (statsJson?.warnings?.length) {
33
+ statsJson.warnings?.forEach((warning) => {
34
+ logger.warn(warning);
35
+ });
36
+ }
37
+ }
38
+
39
+ declare global {
40
+ interface Error {
41
+ /** @see https://webpack.js.org/api/node/#error-handling */
42
+ details?: unknown;
43
+ }
44
+ }
45
+
46
+ export function compile({
47
+ configs,
48
+ currentBundler,
49
+ }: {
50
+ configs: Configuration[];
51
+ currentBundler: CurrentBundler;
52
+ }): Promise<webpack.MultiStats> {
53
+ return new Promise((resolve, reject) => {
54
+ const compiler = currentBundler.instance(configs);
55
+ compiler.run((err, stats) => {
56
+ if (err) {
57
+ logger.error(err.stack ?? err);
58
+ if (err.details) {
59
+ logger.error(err.details);
60
+ }
61
+ reject(err);
62
+ }
63
+ // Let plugins consume all the stats
64
+ const errorsWarnings = stats?.toJson('errors-warnings');
65
+ if (stats?.hasErrors()) {
66
+ const statsErrorMessage = formatStatsErrorMessage(errorsWarnings);
67
+ reject(
68
+ new Error(
69
+ `Failed to compile due to Webpack errors.\n${statsErrorMessage}`,
70
+ ),
71
+ );
72
+ }
73
+ printStatsWarnings(errorsWarnings);
74
+
75
+ // Webpack 5 requires calling close() so that persistent caching works
76
+ // See https://github.com/webpack/webpack.js.org/pull/4775
77
+ compiler.close((errClose) => {
78
+ if (errClose) {
79
+ logger.error(`Error while closing Webpack compiler: ${errClose}`);
80
+ reject(errClose);
81
+ } else {
82
+ resolve(stats!);
83
+ }
84
+ });
85
+ });
86
+ });
87
+ }
@@ -0,0 +1,106 @@
1
+ /**
2
+ * Copyright (c) Facebook, Inc. and its affiliates.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ */
7
+
8
+ import webpack from 'webpack';
9
+ import WebpackBar from 'webpackbar';
10
+ import MiniCssExtractPlugin from 'mini-css-extract-plugin';
11
+ import CopyWebpackPlugin from 'copy-webpack-plugin';
12
+ import {importRspack} from './importFaster';
13
+ import type {FasterModule} from './importFaster';
14
+ import type {CurrentBundler, DocusaurusConfig} from '@docusaurus/types';
15
+
16
+ // We inject a site config slice because the Rspack flag might change place
17
+ type SiteConfigSlice = {
18
+ future: {
19
+ experimental_faster: Pick<
20
+ DocusaurusConfig['future']['experimental_faster'],
21
+ 'rspackBundler'
22
+ >;
23
+ };
24
+ };
25
+
26
+ function isRspack(siteConfig: SiteConfigSlice): boolean {
27
+ return siteConfig.future.experimental_faster.rspackBundler;
28
+ }
29
+
30
+ export async function getCurrentBundler({
31
+ siteConfig,
32
+ }: {
33
+ siteConfig: SiteConfigSlice;
34
+ }): Promise<CurrentBundler> {
35
+ if (isRspack(siteConfig)) {
36
+ return {
37
+ name: 'rspack',
38
+ instance: (await importRspack()) as unknown as typeof webpack,
39
+ };
40
+ }
41
+ return {
42
+ name: 'webpack',
43
+ instance: webpack,
44
+ };
45
+ }
46
+
47
+ export function getCurrentBundlerAsRspack({
48
+ currentBundler,
49
+ }: {
50
+ currentBundler: CurrentBundler;
51
+ }): FasterModule['rspack'] {
52
+ if (currentBundler.name !== 'rspack') {
53
+ throw new Error(
54
+ `Can't getCurrentBundlerAsRspack() because current bundler is ${currentBundler.name}`,
55
+ );
56
+ }
57
+ return currentBundler.instance as unknown as FasterModule['rspack'];
58
+ }
59
+
60
+ export async function getCSSExtractPlugin({
61
+ currentBundler,
62
+ }: {
63
+ currentBundler: CurrentBundler;
64
+ }): Promise<typeof MiniCssExtractPlugin> {
65
+ if (currentBundler.name === 'rspack') {
66
+ // @ts-expect-error: this exists only in Rspack
67
+ return currentBundler.instance.CssExtractRspackPlugin;
68
+ }
69
+ return MiniCssExtractPlugin;
70
+ }
71
+
72
+ export async function getCopyPlugin({
73
+ currentBundler,
74
+ }: {
75
+ currentBundler: CurrentBundler;
76
+ }): Promise<typeof CopyWebpackPlugin> {
77
+ if (currentBundler.name === 'rspack') {
78
+ // @ts-expect-error: this exists only in Rspack
79
+ return currentBundler.instance.CopyRspackPlugin;
80
+ }
81
+ return CopyWebpackPlugin;
82
+ }
83
+
84
+ export async function getProgressBarPlugin({
85
+ currentBundler,
86
+ }: {
87
+ currentBundler: CurrentBundler;
88
+ }): Promise<typeof WebpackBar> {
89
+ if (currentBundler.name === 'rspack') {
90
+ const rspack = getCurrentBundlerAsRspack({currentBundler});
91
+ class CustomRspackProgressPlugin extends rspack.ProgressPlugin {
92
+ constructor({name, color = 'green'}: {name?: string; color?: string}) {
93
+ // Unfortunately rspack.ProgressPlugin does not have name/color options
94
+ // See https://rspack.dev/plugins/webpack/progress-plugin
95
+ super({
96
+ prefix: name,
97
+ template: `● {prefix:.bold} {bar:50.${color}/white.dim} ({percent}%) {wide_msg:.dim}`,
98
+ progressChars: '■■',
99
+ });
100
+ }
101
+ }
102
+ return CustomRspackProgressPlugin as unknown as typeof WebpackBar;
103
+ }
104
+
105
+ return WebpackBar;
106
+ }
@@ -0,0 +1,77 @@
1
+ /**
2
+ * Copyright (c) Facebook, Inc. and its affiliates.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ */
7
+
8
+ import logger from '@docusaurus/logger';
9
+ import type {
10
+ MinimizerOptions as JsMinimizerOptions,
11
+ CustomOptions,
12
+ } from 'terser-webpack-plugin';
13
+ import type {MinimizerOptions as CssMinimizerOptions} from 'css-minimizer-webpack-plugin';
14
+
15
+ export type FasterModule = Awaited<typeof import('@docusaurus/faster')>;
16
+
17
+ async function importFaster(): Promise<FasterModule> {
18
+ return import('@docusaurus/faster');
19
+ }
20
+
21
+ async function ensureFaster(): Promise<FasterModule> {
22
+ try {
23
+ return await importFaster();
24
+ } catch (error) {
25
+ throw new Error(
26
+ `To enable Docusaurus Faster options, your site must add the ${logger.name(
27
+ '@docusaurus/faster',
28
+ )} package as a dependency.`,
29
+ {cause: error},
30
+ );
31
+ }
32
+ }
33
+
34
+ export async function importRspack(): Promise<FasterModule['rspack']> {
35
+ const faster = await ensureFaster();
36
+ return faster.rspack;
37
+ }
38
+
39
+ export async function importSwcLoader(): Promise<string> {
40
+ const faster = await ensureFaster();
41
+ return faster.swcLoader;
42
+ }
43
+
44
+ export async function importGetSwcLoaderOptions(): Promise<
45
+ FasterModule['getSwcLoaderOptions']
46
+ > {
47
+ const faster = await ensureFaster();
48
+ return faster.getSwcLoaderOptions;
49
+ }
50
+
51
+ export async function importSwcJsMinimizerOptions(): Promise<
52
+ JsMinimizerOptions<CustomOptions>
53
+ > {
54
+ const faster = await ensureFaster();
55
+ return faster.getSwcJsMinimizerOptions() as JsMinimizerOptions<CustomOptions>;
56
+ }
57
+
58
+ export async function importSwcHtmlMinifier(): Promise<
59
+ ReturnType<FasterModule['getSwcHtmlMinifier']>
60
+ > {
61
+ const faster = await ensureFaster();
62
+ return faster.getSwcHtmlMinifier();
63
+ }
64
+
65
+ export async function importGetBrowserslistQueries(): Promise<
66
+ FasterModule['getBrowserslistQueries']
67
+ > {
68
+ const faster = await ensureFaster();
69
+ return faster.getBrowserslistQueries;
70
+ }
71
+
72
+ export async function importLightningCssMinimizerOptions(): Promise<
73
+ CssMinimizerOptions<CustomOptions>
74
+ > {
75
+ const faster = await ensureFaster();
76
+ return faster.getLightningCssMinimizerOptions() as CssMinimizerOptions<CustomOptions>;
77
+ }