@rsbuild/core 0.7.0-beta.2 → 0.7.0-beta.4

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 (181) hide show
  1. package/bin/rsbuild.js +4 -3
  2. package/compiled/css-loader/index.js +20 -20
  3. package/compiled/less-loader/index.js +8 -8
  4. package/compiled/postcss-loader/index.js +11 -11
  5. package/compiled/rspack-manifest-plugin/index.js +4 -4
  6. package/dist/client/{hmr.mjs → hmr.js} +2 -3
  7. package/dist/client/{overlay.mjs → overlay.js} +2 -6
  8. package/dist/{rspack/ignoreCssLoader.js → ignoreCssLoader.cjs} +2 -0
  9. package/dist/index.cjs +7201 -0
  10. package/dist/index.js +7435 -40
  11. package/dist/{rspack/transformLoader.js → transformLoader.cjs} +2 -0
  12. package/dist/{rspack/transformRawLoader.js → transformRawLoader.cjs} +37 -13
  13. package/{dist → dist-types}/constants.d.ts +3 -0
  14. package/dist-types/helpers.d.ts +32 -0
  15. package/{dist → dist-types}/index.d.ts +6 -0
  16. package/{dist → dist-types}/internal.d.ts +5 -2
  17. package/dist-types/package.json +1 -0
  18. package/{dist → dist-types}/plugins/html.d.ts +2 -1
  19. package/{dist → dist-types}/plugins/index.d.ts +1 -0
  20. package/dist-types/plugins/minimize.d.ts +12 -0
  21. package/{dist/provider → dist-types}/plugins/progress.d.ts +1 -1
  22. package/{dist/provider → dist-types}/plugins/resolve.d.ts +1 -1
  23. package/{dist/provider → dist-types}/plugins/rspackProfile.d.ts +1 -1
  24. package/{dist/provider → dist-types}/plugins/swc.d.ts +1 -1
  25. package/dist-types/server/devMiddleware.d.ts +18 -0
  26. package/{dist → dist-types}/server/helper.d.ts +11 -0
  27. package/package.json +14 -16
  28. package/dist/cli/commands.js +0 -110
  29. package/dist/cli/init.js +0 -101
  30. package/dist/cli/prepare.js +0 -43
  31. package/dist/client/format.js +0 -72
  32. package/dist/config.js +0 -306
  33. package/dist/constants.js +0 -40
  34. package/dist/createContext.js +0 -116
  35. package/dist/createRsbuild.js +0 -103
  36. package/dist/initHooks.js +0 -82
  37. package/dist/initPlugins.js +0 -152
  38. package/dist/internal.js +0 -79
  39. package/dist/loadEnv.js +0 -93
  40. package/dist/mergeConfig.js +0 -80
  41. package/dist/pluginHelper.js +0 -66
  42. package/dist/pluginManager.js +0 -180
  43. package/dist/plugins/asset.js +0 -101
  44. package/dist/plugins/basic.js +0 -77
  45. package/dist/plugins/bundleAnalyzer.js +0 -69
  46. package/dist/plugins/cache.js +0 -116
  47. package/dist/plugins/cleanOutput.js +0 -68
  48. package/dist/plugins/css.js +0 -257
  49. package/dist/plugins/define.js +0 -45
  50. package/dist/plugins/entry.js +0 -76
  51. package/dist/plugins/externals.js +0 -48
  52. package/dist/plugins/fileSize.js +0 -199
  53. package/dist/plugins/html.js +0 -327
  54. package/dist/plugins/index.js +0 -66
  55. package/dist/plugins/inlineChunk.js +0 -69
  56. package/dist/plugins/less.js +0 -107
  57. package/dist/plugins/manifest.js +0 -142
  58. package/dist/plugins/moduleFederation.js +0 -125
  59. package/dist/plugins/moment.js +0 -43
  60. package/dist/plugins/nodeAddons.js +0 -74
  61. package/dist/plugins/output.js +0 -63
  62. package/dist/plugins/performance.js +0 -56
  63. package/dist/plugins/resourceHints.js +0 -86
  64. package/dist/plugins/rsdoctor.js +0 -81
  65. package/dist/plugins/sass.js +0 -154
  66. package/dist/plugins/server.js +0 -59
  67. package/dist/plugins/splitChunks.js +0 -236
  68. package/dist/plugins/startUrl.js +0 -146
  69. package/dist/plugins/target.js +0 -54
  70. package/dist/plugins/wasm.js +0 -51
  71. package/dist/provider/build.js +0 -84
  72. package/dist/provider/createCompiler.js +0 -143
  73. package/dist/provider/initConfigs.js +0 -92
  74. package/dist/provider/inspectConfig.js +0 -85
  75. package/dist/provider/plugins/minimize.d.ts +0 -2
  76. package/dist/provider/plugins/minimize.js +0 -49
  77. package/dist/provider/plugins/progress.js +0 -49
  78. package/dist/provider/plugins/resolve.js +0 -42
  79. package/dist/provider/plugins/rspackProfile.js +0 -112
  80. package/dist/provider/plugins/swc.js +0 -152
  81. package/dist/provider/plugins/transition.d.ts +0 -5
  82. package/dist/provider/plugins/transition.js +0 -35
  83. package/dist/provider/provider.js +0 -158
  84. package/dist/provider/rspackConfig.js +0 -144
  85. package/dist/provider/shared.d.ts +0 -16
  86. package/dist/provider/shared.js +0 -215
  87. package/dist/rspack/HtmlAppIconPlugin.js +0 -98
  88. package/dist/rspack/HtmlBasicPlugin.js +0 -229
  89. package/dist/rspack/InlineChunkHtmlPlugin.js +0 -196
  90. package/dist/rspack/preload/HtmlPreloadOrPrefetchPlugin.js +0 -173
  91. package/dist/rspack/preload/helpers/determineAsValue.js +0 -83
  92. package/dist/rspack/preload/helpers/doesChunkBelongToHtml.js +0 -77
  93. package/dist/rspack/preload/helpers/extractChunks.js +0 -83
  94. package/dist/rspack/preload/helpers/index.js +0 -28
  95. package/dist/rspack/preload/helpers/type.js +0 -16
  96. package/dist/server/compilerDevMiddleware.js +0 -129
  97. package/dist/server/devMiddleware.d.ts +0 -3
  98. package/dist/server/devMiddleware.js +0 -74
  99. package/dist/server/devServer.js +0 -195
  100. package/dist/server/getDevMiddlewares.js +0 -177
  101. package/dist/server/helper.js +0 -237
  102. package/dist/server/httpServer.js +0 -45
  103. package/dist/server/index.js +0 -31
  104. package/dist/server/middlewares.js +0 -162
  105. package/dist/server/prodServer.js +0 -196
  106. package/dist/server/proxy.js +0 -93
  107. package/dist/server/restart.js +0 -66
  108. package/dist/server/socketServer.js +0 -178
  109. package/dist/server/watchFiles.js +0 -90
  110. package/dist/types.js +0 -16
  111. /package/{dist → dist-types}/cli/commands.d.ts +0 -0
  112. /package/{dist → dist-types}/cli/init.d.ts +0 -0
  113. /package/{dist → dist-types}/cli/prepare.d.ts +0 -0
  114. /package/{dist → dist-types}/client/format.d.ts +0 -0
  115. /package/{dist → dist-types}/client/hmr.d.ts +0 -0
  116. /package/{dist → dist-types}/client/overlay.d.ts +0 -0
  117. /package/{dist → dist-types}/config.d.ts +0 -0
  118. /package/{dist → dist-types}/createContext.d.ts +0 -0
  119. /package/{dist → dist-types}/createRsbuild.d.ts +0 -0
  120. /package/{dist → dist-types}/initHooks.d.ts +0 -0
  121. /package/{dist → dist-types}/initPlugins.d.ts +0 -0
  122. /package/{dist → dist-types}/loadEnv.d.ts +0 -0
  123. /package/{dist/rspack → dist-types/loader}/ignoreCssLoader.d.ts +0 -0
  124. /package/{dist/rspack → dist-types/loader}/transformLoader.d.ts +0 -0
  125. /package/{dist/rspack → dist-types/loader}/transformRawLoader.d.ts +0 -0
  126. /package/{dist → dist-types}/mergeConfig.d.ts +0 -0
  127. /package/{dist → dist-types}/pluginHelper.d.ts +0 -0
  128. /package/{dist → dist-types}/pluginManager.d.ts +0 -0
  129. /package/{dist → dist-types}/plugins/asset.d.ts +0 -0
  130. /package/{dist → dist-types}/plugins/basic.d.ts +0 -0
  131. /package/{dist → dist-types}/plugins/bundleAnalyzer.d.ts +0 -0
  132. /package/{dist → dist-types}/plugins/cache.d.ts +0 -0
  133. /package/{dist → dist-types}/plugins/cleanOutput.d.ts +0 -0
  134. /package/{dist → dist-types}/plugins/css.d.ts +0 -0
  135. /package/{dist → dist-types}/plugins/define.d.ts +0 -0
  136. /package/{dist → dist-types}/plugins/entry.d.ts +0 -0
  137. /package/{dist → dist-types}/plugins/externals.d.ts +0 -0
  138. /package/{dist → dist-types}/plugins/fileSize.d.ts +0 -0
  139. /package/{dist → dist-types}/plugins/inlineChunk.d.ts +0 -0
  140. /package/{dist → dist-types}/plugins/less.d.ts +0 -0
  141. /package/{dist → dist-types}/plugins/manifest.d.ts +0 -0
  142. /package/{dist → dist-types}/plugins/moduleFederation.d.ts +0 -0
  143. /package/{dist → dist-types}/plugins/moment.d.ts +0 -0
  144. /package/{dist → dist-types}/plugins/nodeAddons.d.ts +0 -0
  145. /package/{dist → dist-types}/plugins/output.d.ts +0 -0
  146. /package/{dist → dist-types}/plugins/performance.d.ts +0 -0
  147. /package/{dist → dist-types}/plugins/resourceHints.d.ts +0 -0
  148. /package/{dist → dist-types}/plugins/rsdoctor.d.ts +0 -0
  149. /package/{dist → dist-types}/plugins/sass.d.ts +0 -0
  150. /package/{dist → dist-types}/plugins/server.d.ts +0 -0
  151. /package/{dist → dist-types}/plugins/splitChunks.d.ts +0 -0
  152. /package/{dist → dist-types}/plugins/startUrl.d.ts +0 -0
  153. /package/{dist → dist-types}/plugins/target.d.ts +0 -0
  154. /package/{dist → dist-types}/plugins/wasm.d.ts +0 -0
  155. /package/{dist → dist-types}/provider/build.d.ts +0 -0
  156. /package/{dist → dist-types}/provider/createCompiler.d.ts +0 -0
  157. /package/{dist → dist-types}/provider/initConfigs.d.ts +0 -0
  158. /package/{dist → dist-types}/provider/inspectConfig.d.ts +0 -0
  159. /package/{dist → dist-types}/provider/provider.d.ts +0 -0
  160. /package/{dist → dist-types}/provider/rspackConfig.d.ts +0 -0
  161. /package/{dist → dist-types}/rspack/HtmlAppIconPlugin.d.ts +0 -0
  162. /package/{dist → dist-types}/rspack/HtmlBasicPlugin.d.ts +0 -0
  163. /package/{dist → dist-types}/rspack/InlineChunkHtmlPlugin.d.ts +0 -0
  164. /package/{dist → dist-types}/rspack/preload/HtmlPreloadOrPrefetchPlugin.d.ts +0 -0
  165. /package/{dist → dist-types}/rspack/preload/helpers/determineAsValue.d.ts +0 -0
  166. /package/{dist → dist-types}/rspack/preload/helpers/doesChunkBelongToHtml.d.ts +0 -0
  167. /package/{dist → dist-types}/rspack/preload/helpers/extractChunks.d.ts +0 -0
  168. /package/{dist → dist-types}/rspack/preload/helpers/index.d.ts +0 -0
  169. /package/{dist → dist-types}/rspack/preload/helpers/type.d.ts +0 -0
  170. /package/{dist → dist-types}/server/compilerDevMiddleware.d.ts +0 -0
  171. /package/{dist → dist-types}/server/devServer.d.ts +0 -0
  172. /package/{dist → dist-types}/server/getDevMiddlewares.d.ts +0 -0
  173. /package/{dist → dist-types}/server/httpServer.d.ts +0 -0
  174. /package/{dist → dist-types}/server/index.d.ts +0 -0
  175. /package/{dist → dist-types}/server/middlewares.d.ts +0 -0
  176. /package/{dist → dist-types}/server/prodServer.d.ts +0 -0
  177. /package/{dist → dist-types}/server/proxy.d.ts +0 -0
  178. /package/{dist → dist-types}/server/restart.d.ts +0 -0
  179. /package/{dist → dist-types}/server/socketServer.d.ts +0 -0
  180. /package/{dist → dist-types}/server/watchFiles.d.ts +0 -0
  181. /package/{dist → dist-types}/types.d.ts +0 -0
@@ -1,45 +0,0 @@
1
- "use strict";
2
- var __defProp = Object.defineProperty;
3
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
- var __getOwnPropNames = Object.getOwnPropertyNames;
5
- var __hasOwnProp = Object.prototype.hasOwnProperty;
6
- var __export = (target, all) => {
7
- for (var name in all)
8
- __defProp(target, name, { get: all[name], enumerable: true });
9
- };
10
- var __copyProps = (to, from, except, desc) => {
11
- if (from && typeof from === "object" || typeof from === "function") {
12
- for (let key of __getOwnPropNames(from))
13
- if (!__hasOwnProp.call(to, key) && key !== except)
14
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
- }
16
- return to;
17
- };
18
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
- var define_exports = {};
20
- __export(define_exports, {
21
- pluginDefine: () => pluginDefine
22
- });
23
- module.exports = __toCommonJS(define_exports);
24
- var import_shared = require("@rsbuild/shared");
25
- const pluginDefine = () => ({
26
- name: "rsbuild:define",
27
- setup(api) {
28
- api.modifyBundlerChain((chain, { CHAIN_ID, bundler }) => {
29
- const config = api.getNormalizedConfig();
30
- const builtinVars = {
31
- "process.env.NODE_ENV": JSON.stringify((0, import_shared.getNodeEnv)()),
32
- "process.env.ASSET_PREFIX": JSON.stringify(
33
- (0, import_shared.getPublicPathFromChain)(chain, false)
34
- )
35
- };
36
- chain.plugin(CHAIN_ID.PLUGIN.DEFINE).use(bundler.DefinePlugin, [
37
- { ...builtinVars, ...config.source.define }
38
- ]);
39
- });
40
- }
41
- });
42
- // Annotate the CommonJS export names for ESM import in node:
43
- 0 && (module.exports = {
44
- pluginDefine
45
- });
@@ -1,76 +0,0 @@
1
- "use strict";
2
- var __defProp = Object.defineProperty;
3
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
- var __getOwnPropNames = Object.getOwnPropertyNames;
5
- var __hasOwnProp = Object.prototype.hasOwnProperty;
6
- var __export = (target, all) => {
7
- for (var name in all)
8
- __defProp(target, name, { get: all[name], enumerable: true });
9
- };
10
- var __copyProps = (to, from, except, desc) => {
11
- if (from && typeof from === "object" || typeof from === "function") {
12
- for (let key of __getOwnPropNames(from))
13
- if (!__hasOwnProp.call(to, key) && key !== except)
14
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
- }
16
- return to;
17
- };
18
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
- var entry_exports = {};
20
- __export(entry_exports, {
21
- getEntryObject: () => getEntryObject,
22
- pluginEntry: () => pluginEntry
23
- });
24
- module.exports = __toCommonJS(entry_exports);
25
- var import_shared = require("@rsbuild/shared");
26
- function getEntryObject(config, target) {
27
- if (!config.source?.entry) {
28
- return {};
29
- }
30
- return (0, import_shared.mergeChainedOptions)({
31
- defaults: {},
32
- options: config.source?.entry,
33
- utils: { target },
34
- useObjectParam: true
35
- });
36
- }
37
- const pluginEntry = () => ({
38
- name: "rsbuild:entry",
39
- setup(api) {
40
- api.modifyBundlerChain(
41
- async (chain, { target, isServer, isServiceWorker }) => {
42
- const config = api.getNormalizedConfig();
43
- const { preEntry } = config.source;
44
- const entry = target === "web" ? api.context.entry : getEntryObject(config, target);
45
- const injectCoreJsEntry = config.output.polyfill === "entry" && !isServer && !isServiceWorker;
46
- for (const entryName of Object.keys(entry)) {
47
- const entryPoint = chain.entry(entryName);
48
- const addEntry = (item) => {
49
- entryPoint.add(item);
50
- };
51
- preEntry.forEach(addEntry);
52
- if (injectCoreJsEntry) {
53
- addEntry((0, import_shared.createVirtualModule)('import "core-js";'));
54
- }
55
- (0, import_shared.castArray)(entry[entryName]).forEach(addEntry);
56
- }
57
- }
58
- );
59
- api.onBeforeCreateCompiler(({ bundlerConfigs }) => {
60
- if (bundlerConfigs.every((config) => !config.entry)) {
61
- throw new Error(
62
- `Could not find any entry module, please make sure that ${import_shared.color.cyan(
63
- "src/index.(ts|js|tsx|jsx|mjs|cjs)"
64
- )} exists, or customize entry through the ${import_shared.color.cyan(
65
- "source.entry"
66
- )} configuration.`
67
- );
68
- }
69
- });
70
- }
71
- });
72
- // Annotate the CommonJS export names for ESM import in node:
73
- 0 && (module.exports = {
74
- getEntryObject,
75
- pluginEntry
76
- });
@@ -1,48 +0,0 @@
1
- "use strict";
2
- var __defProp = Object.defineProperty;
3
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
- var __getOwnPropNames = Object.getOwnPropertyNames;
5
- var __hasOwnProp = Object.prototype.hasOwnProperty;
6
- var __export = (target, all) => {
7
- for (var name in all)
8
- __defProp(target, name, { get: all[name], enumerable: true });
9
- };
10
- var __copyProps = (to, from, except, desc) => {
11
- if (from && typeof from === "object" || typeof from === "function") {
12
- for (let key of __getOwnPropNames(from))
13
- if (!__hasOwnProp.call(to, key) && key !== except)
14
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
- }
16
- return to;
17
- };
18
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
- var externals_exports = {};
20
- __export(externals_exports, {
21
- pluginExternals: () => pluginExternals
22
- });
23
- module.exports = __toCommonJS(externals_exports);
24
- function pluginExternals() {
25
- return {
26
- name: "rsbuild:externals",
27
- setup(api) {
28
- api.modifyBundlerChain((chain) => {
29
- const { externals } = api.getNormalizedConfig().output;
30
- if (externals) {
31
- chain.externals(externals);
32
- }
33
- });
34
- api.onBeforeCreateCompiler(({ bundlerConfigs }) => {
35
- for (const config of bundlerConfigs) {
36
- const isWebWorker = Array.isArray(config.target) ? config.target.includes("webworker") : config.target === "webworker";
37
- if (isWebWorker && config.externals) {
38
- delete config.externals;
39
- }
40
- }
41
- });
42
- }
43
- };
44
- }
45
- // Annotate the CommonJS export names for ESM import in node:
46
- 0 && (module.exports = {
47
- pluginExternals
48
- });
@@ -1,199 +0,0 @@
1
- "use strict";
2
- var __create = Object.create;
3
- var __defProp = Object.defineProperty;
4
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
- var __getOwnPropNames = Object.getOwnPropertyNames;
6
- var __getProtoOf = Object.getPrototypeOf;
7
- var __hasOwnProp = Object.prototype.hasOwnProperty;
8
- var __export = (target, all) => {
9
- for (var name in all)
10
- __defProp(target, name, { get: all[name], enumerable: true });
11
- };
12
- var __copyProps = (to, from, except, desc) => {
13
- if (from && typeof from === "object" || typeof from === "function") {
14
- for (let key of __getOwnPropNames(from))
15
- if (!__hasOwnProp.call(to, key) && key !== except)
16
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
- }
18
- return to;
19
- };
20
- var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
- // If the importer is in node compatibility mode or this is not an ESM
22
- // file that has been converted to a CommonJS file using a Babel-
23
- // compatible transform (i.e. "__esModule" has not been set), then set
24
- // "default" to the CommonJS "module.exports" for node compatibility.
25
- isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
- mod
27
- ));
28
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
- var fileSize_exports = {};
30
- __export(fileSize_exports, {
31
- filterAsset: () => filterAsset,
32
- pluginFileSize: () => pluginFileSize
33
- });
34
- module.exports = __toCommonJS(fileSize_exports);
35
- var import_node_path = __toESM(require("node:path"));
36
- var import_shared = require("@rsbuild/shared");
37
- var import_shared2 = require("@rsbuild/shared");
38
- const filterAsset = (asset) => !/\.map$/.test(asset) && !/\.LICENSE\.txt$/.test(asset);
39
- const getAssetColor = (size) => {
40
- if (size > 300 * 1e3) {
41
- return import_shared2.color.red;
42
- }
43
- if (size > 100 * 1e3) {
44
- return import_shared2.color.yellow;
45
- }
46
- return import_shared2.color.green;
47
- };
48
- async function printHeader(longestFileLength, longestLabelLength) {
49
- const longestLengths = [longestFileLength, longestLabelLength];
50
- const headerRow = ["File", "Size", "Gzipped"].reduce((prev, cur, index) => {
51
- const length = longestLengths[index];
52
- let curLabel = cur;
53
- if (length) {
54
- curLabel = cur.length < length ? cur + " ".repeat(length - cur.length) : cur;
55
- }
56
- return `${prev + curLabel} `;
57
- }, " ");
58
- import_shared2.logger.log(import_shared2.color.bold(import_shared2.color.blue(headerRow)));
59
- }
60
- const calcFileSize = (len) => {
61
- const val = len / 1e3;
62
- return `${val.toFixed(val < 1 ? 2 : 1)} kB`;
63
- };
64
- const coloringAssetName = (assetName) => {
65
- if (import_shared.JS_REGEX.test(assetName)) {
66
- return import_shared2.color.cyan(assetName);
67
- }
68
- if (import_shared.CSS_REGEX.test(assetName)) {
69
- return import_shared2.color.yellow(assetName);
70
- }
71
- if (import_shared.HTML_REGEX.test(assetName)) {
72
- return import_shared2.color.green(assetName);
73
- }
74
- return import_shared2.color.magenta(assetName);
75
- };
76
- async function printFileSizes(config, stats, rootPath) {
77
- if (config.detail === false && config.total === false) {
78
- return;
79
- }
80
- const { default: gzipSize } = await Promise.resolve().then(() => __toESM(require("@rsbuild/shared/gzip-size")));
81
- const formatAsset = (asset, distPath, distFolder) => {
82
- const fileName = asset.name.split("?")[0];
83
- const contents = import_shared.fse.readFileSync(import_node_path.default.join(distPath, fileName));
84
- const size = contents.length;
85
- const gzippedSize = gzipSize.sync(contents);
86
- return {
87
- size,
88
- folder: import_node_path.default.join(distFolder, import_node_path.default.dirname(fileName)),
89
- name: import_node_path.default.basename(fileName),
90
- gzippedSize,
91
- sizeLabel: calcFileSize(size),
92
- gzipSizeLabel: getAssetColor(gzippedSize)(calcFileSize(gzippedSize))
93
- };
94
- };
95
- const multiStats = "stats" in stats ? stats.stats : [stats];
96
- const assets = multiStats.map((stats2) => {
97
- const distPath = stats2.compilation.outputOptions.path;
98
- if (!distPath) {
99
- return [];
100
- }
101
- const origin = stats2.toJson({
102
- all: false,
103
- assets: true,
104
- // TODO: need supported in rspack
105
- // @ts-expect-error
106
- cachedAssets: true,
107
- groupAssetsByInfo: false,
108
- groupAssetsByPath: false,
109
- groupAssetsByChunk: false,
110
- groupAssetsByExtension: false,
111
- groupAssetsByEmitStatus: false
112
- });
113
- const filteredAssets = origin.assets.filter(
114
- (asset) => filterAsset(asset.name)
115
- );
116
- const distFolder = import_node_path.default.relative(rootPath, distPath);
117
- return filteredAssets.map(
118
- (asset) => formatAsset(asset, distPath, distFolder)
119
- );
120
- }).reduce((single, all) => all.concat(single), []);
121
- if (assets.length === 0) {
122
- return;
123
- }
124
- assets.sort((a, b) => a.size - b.size);
125
- import_shared2.logger.info("Production file sizes:\n");
126
- const longestLabelLength = Math.max(...assets.map((a) => a.sizeLabel.length));
127
- const longestFileLength = Math.max(
128
- ...assets.map((a) => (a.folder + import_node_path.default.sep + a.name).length)
129
- );
130
- if (config.detail !== false) {
131
- printHeader(longestFileLength, longestLabelLength);
132
- }
133
- let totalSize = 0;
134
- let totalGzipSize = 0;
135
- for (const asset of assets) {
136
- let { sizeLabel } = asset;
137
- const { name, folder, gzipSizeLabel } = asset;
138
- const fileNameLength = (folder + import_node_path.default.sep + name).length;
139
- const sizeLength = sizeLabel.length;
140
- totalSize += asset.size;
141
- totalGzipSize += asset.gzippedSize;
142
- if (config.detail !== false) {
143
- if (sizeLength < longestLabelLength) {
144
- const rightPadding = " ".repeat(longestLabelLength - sizeLength);
145
- sizeLabel += rightPadding;
146
- }
147
- let fileNameLabel = import_shared2.color.dim(asset.folder + import_node_path.default.sep) + coloringAssetName(asset.name);
148
- if (fileNameLength < longestFileLength) {
149
- const rightPadding = " ".repeat(longestFileLength - fileNameLength);
150
- fileNameLabel += rightPadding;
151
- }
152
- import_shared2.logger.log(` ${fileNameLabel} ${sizeLabel} ${gzipSizeLabel}`);
153
- }
154
- }
155
- if (config.total !== false) {
156
- const totalSizeLabel = `${import_shared2.color.bold(
157
- import_shared2.color.blue("Total size:")
158
- )} ${calcFileSize(totalSize)}`;
159
- const gzippedSizeLabel = `${import_shared2.color.bold(
160
- import_shared2.color.blue("Gzipped size:")
161
- )} ${calcFileSize(totalGzipSize)}`;
162
- import_shared2.logger.log(`
163
- ${totalSizeLabel}
164
- ${gzippedSizeLabel}
165
- `);
166
- }
167
- }
168
- const pluginFileSize = () => ({
169
- name: "rsbuild:file-size",
170
- setup(api) {
171
- api.onAfterBuild(async ({ stats }) => {
172
- const { printFileSize } = api.getNormalizedConfig().performance;
173
- if (printFileSize === false) {
174
- return;
175
- }
176
- const printFileSizeConfig = typeof printFileSize === "boolean" ? {
177
- total: true,
178
- detail: true
179
- } : printFileSize;
180
- if (stats) {
181
- try {
182
- await printFileSizes(
183
- printFileSizeConfig,
184
- stats,
185
- api.context.rootPath
186
- );
187
- } catch (err) {
188
- import_shared2.logger.warn("Failed to print file size.");
189
- import_shared2.logger.warn(err);
190
- }
191
- }
192
- });
193
- }
194
- });
195
- // Annotate the CommonJS export names for ESM import in node:
196
- 0 && (module.exports = {
197
- filterAsset,
198
- pluginFileSize
199
- });
@@ -1,327 +0,0 @@
1
- "use strict";
2
- var __create = Object.create;
3
- var __defProp = Object.defineProperty;
4
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
- var __getOwnPropNames = Object.getOwnPropertyNames;
6
- var __getProtoOf = Object.getPrototypeOf;
7
- var __hasOwnProp = Object.prototype.hasOwnProperty;
8
- var __export = (target, all) => {
9
- for (var name in all)
10
- __defProp(target, name, { get: all[name], enumerable: true });
11
- };
12
- var __copyProps = (to, from, except, desc) => {
13
- if (from && typeof from === "object" || typeof from === "function") {
14
- for (let key of __getOwnPropNames(from))
15
- if (!__hasOwnProp.call(to, key) && key !== except)
16
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
- }
18
- return to;
19
- };
20
- var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
- // If the importer is in node compatibility mode or this is not an ESM
22
- // file that has been converted to a CommonJS file using a Babel-
23
- // compatible transform (i.e. "__esModule" has not been set), then set
24
- // "default" to the CommonJS "module.exports" for node compatibility.
25
- isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
- mod
27
- ));
28
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
- var html_exports = {};
30
- __export(html_exports, {
31
- getFavicon: () => getFavicon,
32
- getInject: () => getInject,
33
- getMetaTags: () => getMetaTags,
34
- getTemplate: () => getTemplate,
35
- getTitle: () => getTitle,
36
- pluginHtml: () => pluginHtml
37
- });
38
- module.exports = __toCommonJS(html_exports);
39
- var import_node_path = __toESM(require("node:path"));
40
- var import_shared = require("@rsbuild/shared");
41
- function getTitle(entryName, config) {
42
- return (0, import_shared.mergeChainedOptions)({
43
- defaults: "",
44
- options: config.html.title,
45
- utils: { entryName },
46
- useObjectParam: true
47
- });
48
- }
49
- function getInject(entryName, config) {
50
- return (0, import_shared.mergeChainedOptions)({
51
- defaults: "head",
52
- options: config.html.inject,
53
- utils: { entryName },
54
- useObjectParam: true,
55
- isFalsy: import_shared.isNil
56
- });
57
- }
58
- const existTemplatePath = [];
59
- async function getTemplate(entryName, config, rootPath) {
60
- const DEFAULT_TEMPLATE = import_node_path.default.resolve(
61
- __dirname,
62
- "../../static/template.html"
63
- );
64
- const templatePath = (0, import_shared.mergeChainedOptions)({
65
- defaults: DEFAULT_TEMPLATE,
66
- options: config.html.template,
67
- utils: { entryName },
68
- useObjectParam: true
69
- });
70
- if (templatePath === DEFAULT_TEMPLATE) {
71
- return {
72
- templatePath
73
- };
74
- }
75
- const absolutePath = (0, import_node_path.isAbsolute)(templatePath) ? templatePath : import_node_path.default.resolve(rootPath, templatePath);
76
- if (!existTemplatePath.includes(absolutePath)) {
77
- if (!await (0, import_shared.isFileExists)(absolutePath)) {
78
- throw new Error(
79
- `Failed to resolve HTML template, please check if the file exists: ${import_shared.color.cyan(
80
- absolutePath
81
- )}`
82
- );
83
- }
84
- existTemplatePath.push(absolutePath);
85
- }
86
- const templateContent = await import_shared.fse.readFile(absolutePath, "utf-8");
87
- return {
88
- templatePath: absolutePath,
89
- templateContent
90
- };
91
- }
92
- function getFavicon(entryName, config) {
93
- return (0, import_shared.mergeChainedOptions)({
94
- defaults: "",
95
- options: config.html.favicon,
96
- utils: { entryName },
97
- useObjectParam: true
98
- });
99
- }
100
- function getMetaTags(entryName, config, templateContent) {
101
- const metaTags = (0, import_shared.mergeChainedOptions)({
102
- defaults: {},
103
- options: config.html.meta,
104
- utils: { entryName },
105
- useObjectParam: true
106
- });
107
- if (templateContent && metaTags.charset) {
108
- const charsetRegExp = /<meta[^>]+charset=["'][^>]*>/i;
109
- if (charsetRegExp.test(templateContent)) {
110
- delete metaTags.charset;
111
- }
112
- }
113
- return metaTags;
114
- }
115
- function getTemplateParameters(entryName, config, assetPrefix) {
116
- return (compilation, assets, assetTags, pluginOptions) => {
117
- const { mountId, templateParameters } = config.html;
118
- const defaultOptions = {
119
- mountId,
120
- entryName,
121
- assetPrefix,
122
- compilation,
123
- webpackConfig: compilation.options,
124
- htmlWebpackPlugin: {
125
- tags: assetTags,
126
- files: assets,
127
- options: pluginOptions
128
- }
129
- };
130
- return (0, import_shared.mergeChainedOptions)({
131
- defaults: defaultOptions,
132
- options: templateParameters,
133
- utils: { entryName }
134
- });
135
- };
136
- }
137
- function getChunks(entryName, entryValue) {
138
- const chunks = [entryName];
139
- for (const item of entryValue) {
140
- if (!(0, import_shared.isPlainObject)(item)) {
141
- continue;
142
- }
143
- const { dependOn } = item;
144
- if (!dependOn) {
145
- continue;
146
- }
147
- if (typeof dependOn === "string") {
148
- chunks.unshift(dependOn);
149
- } else {
150
- chunks.unshift(...dependOn);
151
- }
152
- }
153
- return chunks;
154
- }
155
- const getTagConfig = (api) => {
156
- const config = api.getNormalizedConfig();
157
- const tags = (0, import_shared.castArray)(config.html.tags).filter(Boolean);
158
- if (!tags.length) {
159
- return void 0;
160
- }
161
- return {
162
- append: true,
163
- hash: false,
164
- publicPath: true,
165
- tags
166
- };
167
- };
168
- const pluginHtml = (modifyTagsFn) => ({
169
- name: "rsbuild:html",
170
- setup(api) {
171
- api.modifyBundlerChain(
172
- async (chain, { HtmlPlugin, isProd, CHAIN_ID, target }) => {
173
- const config = api.getNormalizedConfig();
174
- if ((0, import_shared.isHtmlDisabled)(config, target)) {
175
- return;
176
- }
177
- const minify = await (0, import_shared.getHtmlMinifyOptions)(isProd, config);
178
- const assetPrefix = (0, import_shared.getPublicPathFromChain)(chain, false);
179
- const entries = chain.entryPoints.entries() || {};
180
- const entryNames = Object.keys(entries);
181
- const htmlPaths = api.getHTMLPaths();
182
- const htmlInfoMap = {};
183
- const finalOptions = await Promise.all(
184
- entryNames.map(async (entryName) => {
185
- const entryValue = entries[entryName].values();
186
- const chunks = getChunks(
187
- entryName,
188
- // EntryDescription type is different between webpack and Rspack
189
- entryValue
190
- );
191
- const inject = getInject(entryName, config);
192
- const filename = htmlPaths[entryName];
193
- const { templatePath, templateContent } = await getTemplate(
194
- entryName,
195
- config,
196
- api.context.rootPath
197
- );
198
- const templateParameters = getTemplateParameters(
199
- entryName,
200
- config,
201
- assetPrefix
202
- );
203
- const metaTags = getMetaTags(entryName, config, templateContent);
204
- const pluginOptions = {
205
- meta: metaTags,
206
- chunks,
207
- inject,
208
- minify,
209
- filename,
210
- template: templatePath,
211
- entryName,
212
- templateParameters,
213
- scriptLoading: config.html.scriptLoading
214
- };
215
- if (chunks.length > 1) {
216
- pluginOptions.chunksSortMode = "manual";
217
- }
218
- const htmlInfo = {};
219
- htmlInfoMap[entryName] = htmlInfo;
220
- if (templateContent) {
221
- htmlInfo.templateContent = templateContent;
222
- }
223
- const tagConfig = getTagConfig(api);
224
- if (tagConfig) {
225
- htmlInfo.tagConfig = tagConfig;
226
- }
227
- pluginOptions.title = getTitle(entryName, config);
228
- const favicon = getFavicon(entryName, config);
229
- if (favicon) {
230
- if ((0, import_shared.isURL)(favicon)) {
231
- htmlInfo.favicon = favicon;
232
- } else {
233
- pluginOptions.favicon = favicon;
234
- }
235
- }
236
- const finalOptions2 = (0, import_shared.mergeChainedOptions)({
237
- defaults: pluginOptions,
238
- options: typeof config.tools.htmlPlugin === "boolean" ? {} : config.tools.htmlPlugin,
239
- utils: {
240
- entryName,
241
- entryValue
242
- }
243
- });
244
- return finalOptions2;
245
- })
246
- );
247
- entryNames.forEach((entryName, index) => {
248
- chain.plugin(`${CHAIN_ID.PLUGIN.HTML}-${entryName}`).use(HtmlPlugin, [finalOptions[index]]);
249
- });
250
- const { HtmlBasicPlugin } = await Promise.resolve().then(() => __toESM(require("../rspack/HtmlBasicPlugin")));
251
- chain.plugin(CHAIN_ID.PLUGIN.HTML_BASIC).use(HtmlBasicPlugin, [htmlInfoMap, modifyTagsFn]);
252
- if (config.html) {
253
- const { appIcon, crossorigin } = config.html;
254
- if (crossorigin) {
255
- const formattedCrossorigin = crossorigin === true ? "anonymous" : crossorigin;
256
- chain.output.crossOriginLoading(formattedCrossorigin);
257
- }
258
- if (appIcon) {
259
- const { HtmlAppIconPlugin } = await Promise.resolve().then(() => __toESM(require("../rspack/HtmlAppIconPlugin")));
260
- const distDir = (0, import_shared.getDistPath)(config, "image");
261
- const iconPath = import_node_path.default.isAbsolute(appIcon) ? appIcon : import_node_path.default.join(api.context.rootPath, appIcon);
262
- chain.plugin(CHAIN_ID.PLUGIN.APP_ICON).use(HtmlAppIconPlugin, [{ iconPath, distDir }]);
263
- }
264
- }
265
- }
266
- );
267
- api.onAfterCreateCompiler(({ compiler }) => {
268
- const { nonce } = api.getNormalizedConfig().security;
269
- if (!nonce) {
270
- return;
271
- }
272
- (0, import_shared.applyToCompiler)(compiler, (compiler2) => {
273
- const { plugins } = compiler2.options;
274
- const hasHTML = plugins.some(
275
- (plugin) => plugin && plugin.constructor.name === "HtmlBasicPlugin"
276
- );
277
- if (!hasHTML) {
278
- return;
279
- }
280
- const injectCode = (0, import_shared.createVirtualModule)(
281
- `__webpack_nonce__ = "${nonce}";`
282
- );
283
- new compiler2.webpack.EntryPlugin(compiler2.context, injectCode, {
284
- name: void 0
285
- }).apply(compiler2);
286
- });
287
- });
288
- api.modifyHTMLTags({
289
- // ensure `crossorigin` and `nonce` can be applied to all tags
290
- order: "post",
291
- handler: ({ headTags, bodyTags }) => {
292
- var _a;
293
- const config = api.getNormalizedConfig();
294
- const { crossorigin } = config.html;
295
- const { nonce } = config.security;
296
- const allTags = [...headTags, ...bodyTags];
297
- if (crossorigin) {
298
- const formattedCrossorigin = crossorigin === true ? "anonymous" : crossorigin;
299
- for (const tag of allTags) {
300
- if (tag.tag === "script" && tag.attrs?.src || tag.tag === "link" && tag.attrs?.rel === "stylesheet") {
301
- tag.attrs || (tag.attrs = {});
302
- (_a = tag.attrs).crossorigin ?? (_a.crossorigin = formattedCrossorigin);
303
- }
304
- }
305
- }
306
- if (nonce) {
307
- for (const tag of allTags) {
308
- if (tag.tag === "script" || tag.tag === "style") {
309
- tag.attrs ?? (tag.attrs = {});
310
- tag.attrs.nonce = nonce;
311
- }
312
- }
313
- }
314
- return { headTags, bodyTags };
315
- }
316
- });
317
- }
318
- });
319
- // Annotate the CommonJS export names for ESM import in node:
320
- 0 && (module.exports = {
321
- getFavicon,
322
- getInject,
323
- getMetaTags,
324
- getTemplate,
325
- getTitle,
326
- pluginHtml
327
- });