@docusaurus/bundler 3.5.2 → 3.6.0
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.
- package/LICENSE +21 -0
- package/lib/compiler.d.ts +22 -0
- package/lib/compiler.d.ts.map +1 -0
- package/lib/compiler.js +66 -0
- package/lib/compiler.js.map +1 -0
- package/lib/currentBundler.d.ts +33 -0
- package/lib/currentBundler.d.ts.map +1 -0
- package/lib/currentBundler.js +73 -0
- package/lib/currentBundler.js.map +1 -0
- package/lib/importFaster.d.ts +17 -0
- package/lib/importFaster.d.ts.map +1 -0
- package/lib/importFaster.js +57 -0
- package/lib/importFaster.js.map +1 -0
- package/lib/index.d.ts +6 -22
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +18 -52
- package/lib/index.js.map +1 -1
- package/lib/loaders/jsLoader.d.ts +16 -0
- package/lib/loaders/jsLoader.d.ts.map +1 -0
- package/lib/loaders/jsLoader.js +67 -0
- package/lib/loaders/jsLoader.js.map +1 -0
- package/lib/loaders/styleLoader.d.ts +11 -0
- package/lib/loaders/styleLoader.d.ts.map +1 -0
- package/lib/loaders/styleLoader.js +68 -0
- package/lib/loaders/styleLoader.js.map +1 -0
- package/lib/minification.d.ts +14 -0
- package/lib/minification.d.ts.map +1 -0
- package/lib/minification.js +147 -0
- package/lib/minification.js.map +1 -0
- package/lib/minifyHtml.d.ts +18 -0
- package/lib/minifyHtml.d.ts.map +1 -0
- package/lib/minifyHtml.js +91 -0
- package/lib/minifyHtml.js.map +1 -0
- package/package.json +35 -5
- package/src/compiler.ts +87 -0
- package/src/currentBundler.ts +106 -0
- package/src/importFaster.ts +77 -0
- package/src/index.ts +17 -82
- package/src/loaders/jsLoader.ts +89 -0
- package/src/loaders/styleLoader.ts +80 -0
- package/src/minification.ts +176 -0
- 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.
|
|
3
|
+
"version": "3.6.0",
|
|
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
|
-
"@
|
|
22
|
-
"@docusaurus/
|
|
21
|
+
"@babel/core": "^7.25.9",
|
|
22
|
+
"@docusaurus/babel": "3.6.0",
|
|
23
|
+
"@docusaurus/cssnano-preset": "3.6.0",
|
|
24
|
+
"@docusaurus/logger": "3.6.0",
|
|
25
|
+
"@docusaurus/types": "3.6.0",
|
|
26
|
+
"@docusaurus/utils": "3.6.0",
|
|
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
|
-
"
|
|
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": "05bba6d4f495ef6b0bec5d41453932bb97981830"
|
|
32
62
|
}
|
package/src/compiler.ts
ADDED
|
@@ -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
|
+
}
|