@rsbuild/core 1.3.12 → 1.3.13

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/dist/index.cjs CHANGED
@@ -1339,7 +1339,7 @@ for(var __webpack_i__ in (()=>{
1339
1339
  }, verbose);
1340
1340
  return {
1341
1341
  message: function(errors) {
1342
- let title = index_js_default().bold(index_js_default().red('Build error: '));
1342
+ let title = index_js_default().bold(index_js_default().red(errors.length > 1 ? 'Build errors: ' : 'Build error: '));
1343
1343
  if (!errors.length) return `${title}\n${index_js_default().yellow("For more details, please setting 'stats.errors: true' ")}`;
1344
1344
  let text = `${errors.join('\n\n')}\n`;
1345
1345
  return `${title}\n${text}`;
@@ -1352,7 +1352,7 @@ for(var __webpack_i__ in (()=>{
1352
1352
  warnings: getAllStatsWarnings(statsData)
1353
1353
  }, verbose);
1354
1354
  if (warnings.length) {
1355
- let title = index_js_default().bold(index_js_default().yellow('Compile warning: \n'));
1355
+ let title = index_js_default().bold(index_js_default().yellow(warnings.length > 1 ? 'Build warnings: \n' : 'Build warning: \n'));
1356
1356
  return {
1357
1357
  message: `${title}${warnings.join('\n\n')}\n`,
1358
1358
  level: 'warning'
@@ -2258,7 +2258,7 @@ for(var __webpack_i__ in (()=>{
2258
2258
  async function createContext(options, userConfig) {
2259
2259
  let { cwd } = options, rootPath = userConfig.root ? getAbsolutePath(cwd, userConfig.root) : cwd, rsbuildConfig = await withDefaultConfig(rootPath, userConfig), cachePath = (0, external_node_path_namespaceObject.join)(rootPath, 'node_modules', '.cache'), specifiedEnvironments = options.environment && options.environment.length > 0 ? options.environment : void 0;
2260
2260
  return {
2261
- version: "1.3.12",
2261
+ version: "1.3.13",
2262
2262
  rootPath,
2263
2263
  distPath: '',
2264
2264
  cachePath,
@@ -3095,7 +3095,9 @@ for(var __webpack_i__ in (()=>{
3095
3095
  }, assets = await getAssets();
3096
3096
  if (0 === assets.length) return logs;
3097
3097
  logs.push(''), assets.sort((a, b)=>a.size - b.size);
3098
- let fileHeader = `File (${environmentName})`, maxFileLength = Math.max(...assets.map((a)=>(a.folder + external_node_path_default().sep + a.name).length), fileHeader.length), maxSizeLength = Math.max(...assets.map((a)=>a.sizeLabel.length));
3098
+ let totalSize = 0, totalGzipSize = 0;
3099
+ for (let asset of assets)totalSize += asset.size, options.compressed && (totalGzipSize += asset.gzippedSize ?? asset.size);
3100
+ let showTotalSize = !1 !== options.total && assets.length > 1, fileHeader = `File (${environmentName})`, totalSizeLabel = showTotalSize ? 'Total:' : '', totalSizeStr = showTotalSize ? calcFileSize(totalSize) : '', maxFileLength = Math.max(...assets.map((a)=>(a.folder + external_node_path_default().sep + a.name).length), fileHeader.length, totalSizeLabel.length), maxSizeLength = Math.max(...assets.map((a)=>a.sizeLabel.length), totalSizeStr.length);
3099
3101
  if (!1 !== options.detail) {
3100
3102
  let showGzipHeader = !!(options.compressed && assets.some((item)=>null !== item.gzippedSize));
3101
3103
  logs.push(function(maxFileLength, maxSizeLength, fileHeader, showGzipHeader) {
@@ -3114,10 +3116,9 @@ for(var __webpack_i__ in (()=>{
3114
3116
  return index_js_default().blue(headerRow);
3115
3117
  }(maxFileLength, maxSizeLength, fileHeader, showGzipHeader));
3116
3118
  }
3117
- let totalSize = 0, totalGzipSize = 0;
3118
3119
  for (let asset of assets){
3119
3120
  let { sizeLabel } = asset, { name, folder, gzipSizeLabel } = asset, fileNameLength = (folder + external_node_path_default().sep + name).length, sizeLength = sizeLabel.length;
3120
- if (totalSize += asset.size, options.compressed && (totalGzipSize += asset.gzippedSize ?? asset.size), !1 !== options.detail) {
3121
+ if (!1 !== options.detail) {
3121
3122
  sizeLength < maxSizeLength && (sizeLabel += ' '.repeat(maxSizeLength - sizeLength));
3122
3123
  let fileNameLabel = index_js_default().dim(asset.folder + external_node_path_default().sep) + coloringAssetName(asset.name);
3123
3124
  fileNameLength < maxFileLength && (fileNameLabel += ' '.repeat(maxFileLength - fileNameLength));
@@ -3126,8 +3127,13 @@ for(var __webpack_i__ in (()=>{
3126
3127
  }
3127
3128
  }
3128
3129
  if (!1 !== options.total && assets.length > 1) {
3129
- let totalSizeLabel = `${index_js_default().blue('Total:')} ${calcFileSize(totalSize)}`, log = `\n ${totalSizeLabel}`;
3130
- options.compressed && (log += index_js_default().dim(` (gzip: ${calcFileSize(totalGzipSize)})`)), logs.push(log);
3130
+ logs.push('');
3131
+ let log = ' ';
3132
+ if (log += ' '.repeat(maxFileLength - totalSizeLabel.length), log += index_js_default().magenta(totalSizeLabel), log += ` ${totalSizeStr}`, options.compressed) {
3133
+ let colorFn = getAssetColor(totalGzipSize / assets.length);
3134
+ log += ' '.repeat(maxSizeLength - totalSizeStr.length), log += ` ${colorFn(calcFileSize(totalGzipSize))}`;
3135
+ }
3136
+ logs.push(log);
3131
3137
  }
3132
3138
  return logs.push(''), logs;
3133
3139
  }
@@ -3569,9 +3575,11 @@ for(var __webpack_i__ in (()=>{
3569
3575
  function recursiveChunkEntryNames(chunk) {
3570
3576
  let [...chunkGroups] = chunk.groupsIterable;
3571
3577
  return [
3572
- ...new Set(chunkGroups.flatMap((chunkGroup)=>(function recursiveChunkGroup(chunkGroup) {
3578
+ ...new Set(chunkGroups.flatMap((chunkGroup)=>(function recursiveChunkGroup(chunkGroup, visited = new Set()) {
3579
+ if (visited.has(chunkGroup)) return [];
3580
+ visited.add(chunkGroup);
3573
3581
  let parents = chunkGroup.getParents();
3574
- return parents.length ? parents.flatMap((chunkParent)=>recursiveChunkGroup(chunkParent)) : [
3582
+ return parents.length ? parents.flatMap((chunkParent)=>recursiveChunkGroup(chunkParent, visited)) : [
3575
3583
  chunkGroup.name
3576
3584
  ];
3577
3585
  })(chunkGroup)).filter((name)=>!!name))
@@ -5509,7 +5517,8 @@ throw new Error('Failed to load Node.js addon: "${name}"\\n' + error);
5509
5517
  display: none;
5510
5518
  }
5511
5519
  .file-link,
5512
- .url-link {
5520
+ .url-link,
5521
+ .config-link {
5513
5522
  cursor: pointer;
5514
5523
  text-decoration: underline;
5515
5524
  text-underline-offset: 3px;
@@ -5526,6 +5535,10 @@ throw new Error('Failed to load Node.js addon: "${name}"\\n' + error);
5526
5535
  .url-link {
5527
5536
  color: #eff986;
5528
5537
  }
5538
+ .config-link {
5539
+ color: inherit;
5540
+ text-decoration: none;
5541
+ }
5529
5542
  .close {
5530
5543
  position: absolute;
5531
5544
  top: 27px;
@@ -5579,7 +5592,7 @@ throw new Error('Failed to load Node.js addon: "${name}"\\n' + error);
5579
5592
  <pre class="content">${htmlItems.join('\n\n').trim()}</pre>
5580
5593
  <footer class="footer">
5581
5594
  <p><span>Fix error</span>, click outside, or press Esc to close the overlay.</p>
5582
- <p>Disable overlay by setting Rsbuild's <span>dev.client.overlay</span> config to false.<p>
5595
+ <p>Disable overlay by setting Rsbuild's <span><a class="config-link" target="_blank" rel="noopener noreferrer" href="https://rsbuild.dev/config/dev/client">dev.client.overlay</a></span> config to false.<p>
5583
5596
  </footer>
5584
5597
  </div>
5585
5598
  </div>
@@ -5868,6 +5881,12 @@ throw new Error('Failed to load Node.js addon: "${name}"\\n' + error);
5868
5881
  return ret;
5869
5882
  }(proxyOptions), proxyMiddlewares = [], middlewares = [], { createProxyMiddleware: baseMiddleware } = await Promise.resolve().then(__webpack_require__.bind(__webpack_require__, "../../compiled/http-proxy-middleware/index.js"));
5870
5883
  for (let opts of formattedOptions){
5884
+ let { onProxyRes } = opts;
5885
+ opts.onProxyRes = (proxyRes, _req, res)=>{
5886
+ onProxyRes && onProxyRes(proxyRes, _req, res), res.on('close', ()=>{
5887
+ res.writableEnded || proxyRes.destroy();
5888
+ });
5889
+ };
5871
5890
  let proxyMiddleware = baseMiddleware(opts.context, opts), middleware = async (req, res, next)=>{
5872
5891
  let bypassUrl = 'function' == typeof opts.bypass ? await opts.bypass(req, res, opts) : null;
5873
5892
  !1 === bypassUrl ? (res.statusCode = 404, next()) : 'string' == typeof bypassUrl ? (req.url = bypassUrl, next()) : !0 === bypassUrl ? next() : proxyMiddleware(req, res, next);
@@ -5898,7 +5917,7 @@ throw new Error('Failed to load Node.js addon: "${name}"\\n' + error);
5898
5917
  };
5899
5918
  }, applyDefaultMiddlewares = async ({ dev, middlewares, server, compilationManager, context, pwd, environments, postCallbacks })=>{
5900
5919
  let upgradeEvents = [];
5901
- if (server.compress && middlewares.push(gzipMiddleware()), server.cors) {
5920
+ if (server.cors) {
5902
5921
  let { default: corsMiddleware } = await Promise.resolve().then(__webpack_require__.bind(__webpack_require__, "../../compiled/cors/index.js"));
5903
5922
  middlewares.push(corsMiddleware('boolean' == typeof server.cors ? {} : server.cors));
5904
5923
  }
@@ -5906,14 +5925,14 @@ throw new Error('Failed to load Node.js addon: "${name}"\\n' + error);
5906
5925
  if (headers && middlewares.push((_req, res, next)=>{
5907
5926
  for (let [key, value] of Object.entries(headers))res.setHeader(key, value);
5908
5927
  next();
5909
- }), 'dev' === context.action && 'rspack' === context.bundlerType && dev.lazyCompilation && compilationManager) {
5910
- let { compiler } = compilationManager;
5911
- 'object' == typeof dev.lazyCompilation && 'string' == typeof dev.lazyCompilation.serverUrl && context.devServer && (dev.lazyCompilation.serverUrl = replacePortPlaceholder(dev.lazyCompilation.serverUrl, context.devServer.port)), middlewares.push(core_default().experiments.lazyCompilationMiddleware(helpers_isMultiCompiler(compiler) ? compiler.compilers[0] : compiler, dev.lazyCompilation));
5912
- }
5913
- if (server.proxy) {
5928
+ }), server.proxy) {
5914
5929
  let { middlewares: proxyMiddlewares, upgrade } = await createProxyMiddleware(server.proxy);
5915
5930
  for (let middleware of (upgradeEvents.push(upgrade), proxyMiddlewares))middlewares.push(middleware);
5916
5931
  }
5932
+ if (server.compress && middlewares.push(gzipMiddleware()), 'dev' === context.action && 'rspack' === context.bundlerType && dev.lazyCompilation && compilationManager) {
5933
+ let { compiler } = compilationManager;
5934
+ 'object' == typeof dev.lazyCompilation && 'string' == typeof dev.lazyCompilation.serverUrl && context.devServer && (dev.lazyCompilation.serverUrl = replacePortPlaceholder(dev.lazyCompilation.serverUrl, context.devServer.port)), middlewares.push(core_default().experiments.lazyCompilationMiddleware(helpers_isMultiCompiler(compiler) ? compiler.compilers[0] : compiler, dev.lazyCompilation));
5935
+ }
5917
5936
  server.base && '/' !== server.base && middlewares.push(getBaseMiddleware({
5918
5937
  base: server.base
5919
5938
  }));
@@ -6596,9 +6615,7 @@ throw new Error('Failed to load Node.js addon: "${name}"\\n' + error);
6596
6615
  }
6597
6616
  async applyDefaultMiddlewares() {
6598
6617
  let { headers, proxy, historyApiFallback, compress, base, cors } = this.options.serverConfig;
6599
- if ('verbose' === rslog_index_js_namespaceObject.logger.level && this.middlewares.use(await getRequestLoggerMiddleware()), compress && this.middlewares.use(gzipMiddleware({
6600
- level: 6
6601
- })), cors) {
6618
+ if ('verbose' === rslog_index_js_namespaceObject.logger.level && this.middlewares.use(await getRequestLoggerMiddleware()), cors) {
6602
6619
  let { default: corsMiddleware } = await Promise.resolve().then(__webpack_require__.bind(__webpack_require__, "../../compiled/cors/index.js"));
6603
6620
  this.middlewares.use(corsMiddleware('boolean' == typeof cors ? {} : cors));
6604
6621
  }
@@ -6610,7 +6627,9 @@ throw new Error('Failed to load Node.js addon: "${name}"\\n' + error);
6610
6627
  for (let middleware of middlewares)this.middlewares.use(middleware);
6611
6628
  this.app.on('upgrade', upgrade);
6612
6629
  }
6613
- if (base && '/' !== base && this.middlewares.use(getBaseMiddleware({
6630
+ if (compress && this.middlewares.use(gzipMiddleware({
6631
+ level: 6
6632
+ })), base && '/' !== base && this.middlewares.use(getBaseMiddleware({
6614
6633
  base
6615
6634
  })), await this.applyStaticAssetMiddleware(), historyApiFallback) {
6616
6635
  let { default: connectHistoryApiFallback } = await Promise.resolve().then(__webpack_require__.bind(__webpack_require__, "../../compiled/connect-history-api-fallback/index.js")), historyApiFallbackMiddleware = connectHistoryApiFallback(!0 === historyApiFallback ? {} : historyApiFallback);
@@ -7488,11 +7507,11 @@ ${section.body}` : section.body).join("\n\n"));
7488
7507
  }
7489
7508
  process.title = 'rsbuild-node';
7490
7509
  let { npm_execpath } = process.env;
7491
- (!npm_execpath || npm_execpath.includes('npx-cli.js') || npm_execpath.includes('.bun')) && console.log(), rslog_index_js_namespaceObject.logger.greet(` Rsbuild v1.3.12\n`);
7510
+ (!npm_execpath || npm_execpath.includes('npx-cli.js') || npm_execpath.includes('.bun')) && console.log(), rslog_index_js_namespaceObject.logger.greet(` Rsbuild v1.3.13\n`);
7492
7511
  try {
7493
7512
  !function() {
7494
7513
  let cli = cac_dist('rsbuild');
7495
- cli.help(), cli.version("1.3.12"), applyCommonOptions(cli);
7514
+ cli.help(), cli.version("1.3.13"), applyCommonOptions(cli);
7496
7515
  let devCommand = cli.command('', 'starting the dev server').alias('dev'), buildCommand = cli.command('build', 'build the app for production'), previewCommand = cli.command('preview', 'preview the production build locally'), inspectCommand = cli.command('inspect', 'inspect the Rspack and Rsbuild configs');
7497
7516
  applyServerOptions(devCommand), applyServerOptions(previewCommand), devCommand.action(async (options)=>{
7498
7517
  try {
@@ -7543,7 +7562,7 @@ ${section.body}` : section.body).join("\n\n"));
7543
7562
  rslog_index_js_namespaceObject.logger.error('Failed to start Rsbuild CLI.'), rslog_index_js_namespaceObject.logger.error(err);
7544
7563
  }
7545
7564
  }
7546
- let src_version = "1.3.12";
7565
+ let src_version = "1.3.13";
7547
7566
  })(), exports.PLUGIN_CSS_NAME = __webpack_exports__.PLUGIN_CSS_NAME, exports.PLUGIN_SWC_NAME = __webpack_exports__.PLUGIN_SWC_NAME, exports.createRsbuild = __webpack_exports__.createRsbuild, exports.defineConfig = __webpack_exports__.defineConfig, exports.ensureAssetPrefix = __webpack_exports__.ensureAssetPrefix, exports.loadConfig = __webpack_exports__.loadConfig, exports.loadEnv = __webpack_exports__.loadEnv, exports.logger = __webpack_exports__.logger, exports.mergeRsbuildConfig = __webpack_exports__.mergeRsbuildConfig, exports.rspack = __webpack_exports__.rspack, exports.runCLI = __webpack_exports__.runCLI, exports.version = __webpack_exports__.version, __webpack_exports__)-1 === [
7548
7567
  "PLUGIN_CSS_NAME",
7549
7568
  "PLUGIN_SWC_NAME",
package/dist/index.js CHANGED
@@ -1207,7 +1207,7 @@ function formatStats(statsData, hasErrors) {
1207
1207
  }, verbose);
1208
1208
  return {
1209
1209
  message: function(errors) {
1210
- let title = __WEBPACK_EXTERNAL_MODULE__compiled_picocolors_index_js_ea7a20e9__.default.bold(__WEBPACK_EXTERNAL_MODULE__compiled_picocolors_index_js_ea7a20e9__.default.red('Build error: '));
1210
+ let title = __WEBPACK_EXTERNAL_MODULE__compiled_picocolors_index_js_ea7a20e9__.default.bold(__WEBPACK_EXTERNAL_MODULE__compiled_picocolors_index_js_ea7a20e9__.default.red(errors.length > 1 ? 'Build errors: ' : 'Build error: '));
1211
1211
  if (!errors.length) return `${title}\n${__WEBPACK_EXTERNAL_MODULE__compiled_picocolors_index_js_ea7a20e9__.default.yellow("For more details, please setting 'stats.errors: true' ")}`;
1212
1212
  let text = `${errors.join('\n\n')}\n`;
1213
1213
  return `${title}\n${text}`;
@@ -1220,7 +1220,7 @@ function formatStats(statsData, hasErrors) {
1220
1220
  warnings: getAllStatsWarnings(statsData)
1221
1221
  }, verbose);
1222
1222
  if (warnings.length) {
1223
- let title = __WEBPACK_EXTERNAL_MODULE__compiled_picocolors_index_js_ea7a20e9__.default.bold(__WEBPACK_EXTERNAL_MODULE__compiled_picocolors_index_js_ea7a20e9__.default.yellow('Compile warning: \n'));
1223
+ let title = __WEBPACK_EXTERNAL_MODULE__compiled_picocolors_index_js_ea7a20e9__.default.bold(__WEBPACK_EXTERNAL_MODULE__compiled_picocolors_index_js_ea7a20e9__.default.yellow(warnings.length > 1 ? 'Build warnings: \n' : 'Build warning: \n'));
1224
1224
  return {
1225
1225
  message: `${title}${warnings.join('\n\n')}\n`,
1226
1226
  level: 'warning'
@@ -2117,7 +2117,7 @@ async function updateEnvironmentContext(context, configs) {
2117
2117
  async function createContext(options, userConfig) {
2118
2118
  let { cwd } = options, rootPath = userConfig.root ? getAbsolutePath(cwd, userConfig.root) : cwd, rsbuildConfig = await withDefaultConfig(rootPath, userConfig), cachePath = (0, __WEBPACK_EXTERNAL_MODULE_node_path_c5b9b54f__.join)(rootPath, 'node_modules', '.cache'), specifiedEnvironments = options.environment && options.environment.length > 0 ? options.environment : void 0;
2119
2119
  return {
2120
- version: "1.3.12",
2120
+ version: "1.3.13",
2121
2121
  rootPath,
2122
2122
  distPath: '',
2123
2123
  cachePath,
@@ -2951,7 +2951,9 @@ async function printFileSizes(options, stats, rootPath, environmentName) {
2951
2951
  }, assets = await getAssets();
2952
2952
  if (0 === assets.length) return logs;
2953
2953
  logs.push(''), assets.sort((a, b)=>a.size - b.size);
2954
- let fileHeader = `File (${environmentName})`, maxFileLength = Math.max(...assets.map((a)=>(a.folder + __WEBPACK_EXTERNAL_MODULE_node_path_c5b9b54f__.default.sep + a.name).length), fileHeader.length), maxSizeLength = Math.max(...assets.map((a)=>a.sizeLabel.length));
2954
+ let totalSize = 0, totalGzipSize = 0;
2955
+ for (let asset of assets)totalSize += asset.size, options.compressed && (totalGzipSize += asset.gzippedSize ?? asset.size);
2956
+ let showTotalSize = !1 !== options.total && assets.length > 1, fileHeader = `File (${environmentName})`, totalSizeLabel = showTotalSize ? 'Total:' : '', totalSizeStr = showTotalSize ? calcFileSize(totalSize) : '', maxFileLength = Math.max(...assets.map((a)=>(a.folder + __WEBPACK_EXTERNAL_MODULE_node_path_c5b9b54f__.default.sep + a.name).length), fileHeader.length, totalSizeLabel.length), maxSizeLength = Math.max(...assets.map((a)=>a.sizeLabel.length), totalSizeStr.length);
2955
2957
  if (!1 !== options.detail) {
2956
2958
  let showGzipHeader = !!(options.compressed && assets.some((item)=>null !== item.gzippedSize));
2957
2959
  logs.push(function(maxFileLength, maxSizeLength, fileHeader, showGzipHeader) {
@@ -2970,10 +2972,9 @@ async function printFileSizes(options, stats, rootPath, environmentName) {
2970
2972
  return __WEBPACK_EXTERNAL_MODULE__compiled_picocolors_index_js_ea7a20e9__.default.blue(headerRow);
2971
2973
  }(maxFileLength, maxSizeLength, fileHeader, showGzipHeader));
2972
2974
  }
2973
- let totalSize = 0, totalGzipSize = 0;
2974
2975
  for (let asset of assets){
2975
2976
  let { sizeLabel } = asset, { name, folder, gzipSizeLabel } = asset, fileNameLength = (folder + __WEBPACK_EXTERNAL_MODULE_node_path_c5b9b54f__.default.sep + name).length, sizeLength = sizeLabel.length;
2976
- if (totalSize += asset.size, options.compressed && (totalGzipSize += asset.gzippedSize ?? asset.size), !1 !== options.detail) {
2977
+ if (!1 !== options.detail) {
2977
2978
  sizeLength < maxSizeLength && (sizeLabel += ' '.repeat(maxSizeLength - sizeLength));
2978
2979
  let fileNameLabel = __WEBPACK_EXTERNAL_MODULE__compiled_picocolors_index_js_ea7a20e9__.default.dim(asset.folder + __WEBPACK_EXTERNAL_MODULE_node_path_c5b9b54f__.default.sep) + coloringAssetName(asset.name);
2979
2980
  fileNameLength < maxFileLength && (fileNameLabel += ' '.repeat(maxFileLength - fileNameLength));
@@ -2982,8 +2983,13 @@ async function printFileSizes(options, stats, rootPath, environmentName) {
2982
2983
  }
2983
2984
  }
2984
2985
  if (!1 !== options.total && assets.length > 1) {
2985
- let totalSizeLabel = `${__WEBPACK_EXTERNAL_MODULE__compiled_picocolors_index_js_ea7a20e9__.default.blue('Total:')} ${calcFileSize(totalSize)}`, log = `\n ${totalSizeLabel}`;
2986
- options.compressed && (log += __WEBPACK_EXTERNAL_MODULE__compiled_picocolors_index_js_ea7a20e9__.default.dim(` (gzip: ${calcFileSize(totalGzipSize)})`)), logs.push(log);
2986
+ logs.push('');
2987
+ let log = ' ';
2988
+ if (log += ' '.repeat(maxFileLength - totalSizeLabel.length), log += __WEBPACK_EXTERNAL_MODULE__compiled_picocolors_index_js_ea7a20e9__.default.magenta(totalSizeLabel), log += ` ${totalSizeStr}`, options.compressed) {
2989
+ let colorFn = getAssetColor(totalGzipSize / assets.length);
2990
+ log += ' '.repeat(maxSizeLength - totalSizeStr.length), log += ` ${colorFn(calcFileSize(totalGzipSize))}`;
2991
+ }
2992
+ logs.push(log);
2987
2993
  }
2988
2994
  return logs.push(''), logs;
2989
2995
  }
@@ -3424,9 +3430,11 @@ let getInlineTests = (config)=>{
3424
3430
  function recursiveChunkEntryNames(chunk) {
3425
3431
  let [...chunkGroups] = chunk.groupsIterable;
3426
3432
  return [
3427
- ...new Set(chunkGroups.flatMap((chunkGroup)=>(function recursiveChunkGroup(chunkGroup) {
3433
+ ...new Set(chunkGroups.flatMap((chunkGroup)=>(function recursiveChunkGroup(chunkGroup, visited = new Set()) {
3434
+ if (visited.has(chunkGroup)) return [];
3435
+ visited.add(chunkGroup);
3428
3436
  let parents = chunkGroup.getParents();
3429
- return parents.length ? parents.flatMap((chunkParent)=>recursiveChunkGroup(chunkParent)) : [
3437
+ return parents.length ? parents.flatMap((chunkParent)=>recursiveChunkGroup(chunkParent, visited)) : [
3430
3438
  chunkGroup.name
3431
3439
  ];
3432
3440
  })(chunkGroup)).filter((name)=>!!name))
@@ -5351,7 +5359,8 @@ class SocketServer {
5351
5359
  display: none;
5352
5360
  }
5353
5361
  .file-link,
5354
- .url-link {
5362
+ .url-link,
5363
+ .config-link {
5355
5364
  cursor: pointer;
5356
5365
  text-decoration: underline;
5357
5366
  text-underline-offset: 3px;
@@ -5368,6 +5377,10 @@ class SocketServer {
5368
5377
  .url-link {
5369
5378
  color: #eff986;
5370
5379
  }
5380
+ .config-link {
5381
+ color: inherit;
5382
+ text-decoration: none;
5383
+ }
5371
5384
  .close {
5372
5385
  position: absolute;
5373
5386
  top: 27px;
@@ -5421,7 +5434,7 @@ class SocketServer {
5421
5434
  <pre class="content">${htmlItems.join('\n\n').trim()}</pre>
5422
5435
  <footer class="footer">
5423
5436
  <p><span>Fix error</span>, click outside, or press Esc to close the overlay.</p>
5424
- <p>Disable overlay by setting Rsbuild's <span>dev.client.overlay</span> config to false.<p>
5437
+ <p>Disable overlay by setting Rsbuild's <span><a class="config-link" target="_blank" rel="noopener noreferrer" href="https://rsbuild.dev/config/dev/client">dev.client.overlay</a></span> config to false.<p>
5425
5438
  </footer>
5426
5439
  </div>
5427
5440
  </div>
@@ -5710,6 +5723,12 @@ let ENCODING_REGEX = /\bgzip\b/, CONTENT_TYPE_REGEX = /text|javascript|\/json|xm
5710
5723
  return ret;
5711
5724
  }(proxyOptions), proxyMiddlewares = [], middlewares = [], { createProxyMiddleware: baseMiddleware } = await import("../compiled/http-proxy-middleware/index.js");
5712
5725
  for (let opts of formattedOptions){
5726
+ let { onProxyRes } = opts;
5727
+ opts.onProxyRes = (proxyRes, _req, res)=>{
5728
+ onProxyRes && onProxyRes(proxyRes, _req, res), res.on('close', ()=>{
5729
+ res.writableEnded || proxyRes.destroy();
5730
+ });
5731
+ };
5713
5732
  let proxyMiddleware = baseMiddleware(opts.context, opts), middleware = async (req, res, next)=>{
5714
5733
  let bypassUrl = 'function' == typeof opts.bypass ? await opts.bypass(req, res, opts) : null;
5715
5734
  !1 === bypassUrl ? (res.statusCode = 404, next()) : 'string' == typeof bypassUrl ? (req.url = bypassUrl, next()) : !0 === bypassUrl ? next() : proxyMiddleware(req, res, next);
@@ -5740,7 +5759,7 @@ let ENCODING_REGEX = /\bgzip\b/, CONTENT_TYPE_REGEX = /text|javascript|\/json|xm
5740
5759
  };
5741
5760
  }, applyDefaultMiddlewares = async ({ dev, middlewares, server, compilationManager, context, pwd, environments, postCallbacks })=>{
5742
5761
  let upgradeEvents = [];
5743
- if (server.compress && middlewares.push(gzipMiddleware()), server.cors) {
5762
+ if (server.cors) {
5744
5763
  let { default: corsMiddleware } = await import("../compiled/cors/index.js");
5745
5764
  middlewares.push(corsMiddleware('boolean' == typeof server.cors ? {} : server.cors));
5746
5765
  }
@@ -5748,14 +5767,14 @@ let ENCODING_REGEX = /\bgzip\b/, CONTENT_TYPE_REGEX = /text|javascript|\/json|xm
5748
5767
  if (headers && middlewares.push((_req, res, next)=>{
5749
5768
  for (let [key, value] of Object.entries(headers))res.setHeader(key, value);
5750
5769
  next();
5751
- }), 'dev' === context.action && 'rspack' === context.bundlerType && dev.lazyCompilation && compilationManager) {
5752
- let { compiler } = compilationManager;
5753
- 'object' == typeof dev.lazyCompilation && 'string' == typeof dev.lazyCompilation.serverUrl && context.devServer && (dev.lazyCompilation.serverUrl = replacePortPlaceholder(dev.lazyCompilation.serverUrl, context.devServer.port)), middlewares.push(__WEBPACK_EXTERNAL_MODULE__rspack_core_e0096ff7__.default.experiments.lazyCompilationMiddleware(helpers_isMultiCompiler(compiler) ? compiler.compilers[0] : compiler, dev.lazyCompilation));
5754
- }
5755
- if (server.proxy) {
5770
+ }), server.proxy) {
5756
5771
  let { middlewares: proxyMiddlewares, upgrade } = await createProxyMiddleware(server.proxy);
5757
5772
  for (let middleware of (upgradeEvents.push(upgrade), proxyMiddlewares))middlewares.push(middleware);
5758
5773
  }
5774
+ if (server.compress && middlewares.push(gzipMiddleware()), 'dev' === context.action && 'rspack' === context.bundlerType && dev.lazyCompilation && compilationManager) {
5775
+ let { compiler } = compilationManager;
5776
+ 'object' == typeof dev.lazyCompilation && 'string' == typeof dev.lazyCompilation.serverUrl && context.devServer && (dev.lazyCompilation.serverUrl = replacePortPlaceholder(dev.lazyCompilation.serverUrl, context.devServer.port)), middlewares.push(__WEBPACK_EXTERNAL_MODULE__rspack_core_e0096ff7__.default.experiments.lazyCompilationMiddleware(helpers_isMultiCompiler(compiler) ? compiler.compilers[0] : compiler, dev.lazyCompilation));
5777
+ }
5759
5778
  server.base && '/' !== server.base && middlewares.push(getBaseMiddleware({
5760
5779
  base: server.base
5761
5780
  }));
@@ -6433,9 +6452,7 @@ class RsbuildProdServer {
6433
6452
  }
6434
6453
  async applyDefaultMiddlewares() {
6435
6454
  let { headers, proxy, historyApiFallback, compress, base, cors } = this.options.serverConfig;
6436
- if ('verbose' === __WEBPACK_EXTERNAL_MODULE__compiled_rslog_index_js_c302f6e3__.logger.level && this.middlewares.use(await getRequestLoggerMiddleware()), compress && this.middlewares.use(gzipMiddleware({
6437
- level: 6
6438
- })), cors) {
6455
+ if ('verbose' === __WEBPACK_EXTERNAL_MODULE__compiled_rslog_index_js_c302f6e3__.logger.level && this.middlewares.use(await getRequestLoggerMiddleware()), cors) {
6439
6456
  let { default: corsMiddleware } = await import("../compiled/cors/index.js");
6440
6457
  this.middlewares.use(corsMiddleware('boolean' == typeof cors ? {} : cors));
6441
6458
  }
@@ -6447,7 +6464,9 @@ class RsbuildProdServer {
6447
6464
  for (let middleware of middlewares)this.middlewares.use(middleware);
6448
6465
  this.app.on('upgrade', upgrade);
6449
6466
  }
6450
- if (base && '/' !== base && this.middlewares.use(getBaseMiddleware({
6467
+ if (compress && this.middlewares.use(gzipMiddleware({
6468
+ level: 6
6469
+ })), base && '/' !== base && this.middlewares.use(getBaseMiddleware({
6451
6470
  base
6452
6471
  })), await this.applyStaticAssetMiddleware(), historyApiFallback) {
6453
6472
  let { default: connectHistoryApiFallback } = await import("../compiled/connect-history-api-fallback/index.js"), historyApiFallbackMiddleware = connectHistoryApiFallback(!0 === historyApiFallback ? {} : historyApiFallback);
@@ -7323,11 +7342,11 @@ async function runCLI() {
7323
7342
  }
7324
7343
  process.title = 'rsbuild-node';
7325
7344
  let { npm_execpath } = process.env;
7326
- (!npm_execpath || npm_execpath.includes('npx-cli.js') || npm_execpath.includes('.bun')) && console.log(), __WEBPACK_EXTERNAL_MODULE__compiled_rslog_index_js_c302f6e3__.logger.greet(` Rsbuild v1.3.12\n`);
7345
+ (!npm_execpath || npm_execpath.includes('npx-cli.js') || npm_execpath.includes('.bun')) && console.log(), __WEBPACK_EXTERNAL_MODULE__compiled_rslog_index_js_c302f6e3__.logger.greet(` Rsbuild v1.3.13\n`);
7327
7346
  try {
7328
7347
  !function() {
7329
7348
  let cli = cac_dist('rsbuild');
7330
- cli.help(), cli.version("1.3.12"), applyCommonOptions(cli);
7349
+ cli.help(), cli.version("1.3.13"), applyCommonOptions(cli);
7331
7350
  let devCommand = cli.command('', 'starting the dev server').alias('dev'), buildCommand = cli.command('build', 'build the app for production'), previewCommand = cli.command('preview', 'preview the production build locally'), inspectCommand = cli.command('inspect', 'inspect the Rspack and Rsbuild configs');
7332
7351
  applyServerOptions(devCommand), applyServerOptions(previewCommand), devCommand.action(async (options)=>{
7333
7352
  try {
@@ -7378,6 +7397,6 @@ async function runCLI() {
7378
7397
  __WEBPACK_EXTERNAL_MODULE__compiled_rslog_index_js_c302f6e3__.logger.error('Failed to start Rsbuild CLI.'), __WEBPACK_EXTERNAL_MODULE__compiled_rslog_index_js_c302f6e3__.logger.error(err);
7379
7398
  }
7380
7399
  }
7381
- let src_version = "1.3.12";
7400
+ let src_version = "1.3.13";
7382
7401
  var __webpack_exports__logger = __WEBPACK_EXTERNAL_MODULE__compiled_rslog_index_js_c302f6e3__.logger, __webpack_exports__rspack = __WEBPACK_EXTERNAL_MODULE__rspack_core_e0096ff7__.rspack;
7383
7402
  export { PLUGIN_CSS_NAME, PLUGIN_SWC_NAME, createRsbuild, defineConfig, ensureAssetPrefix, config_loadConfig as loadConfig, loadEnv, mergeRsbuildConfig, runCLI, src_version as version, __webpack_exports__logger as logger, __webpack_exports__rspack as rspack };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rsbuild/core",
3
- "version": "1.3.12",
3
+ "version": "1.3.13",
4
4
  "description": "The Rspack-based build tool.",
5
5
  "homepage": "https://rsbuild.dev",
6
6
  "bugs": {
@@ -56,7 +56,7 @@
56
56
  "@rslib/core": "0.6.6",
57
57
  "@types/connect": "3.4.38",
58
58
  "@types/cors": "^2.8.17",
59
- "@types/node": "^22.14.1",
59
+ "@types/node": "^22.15.2",
60
60
  "@types/on-finished": "2.3.4",
61
61
  "@types/webpack-bundle-analyzer": "4.7.0",
62
62
  "@types/ws": "^8.18.1",