vite 5.0.0-beta.17 → 5.0.0-beta.18

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.
@@ -20,11 +20,11 @@ import require$$1$1 from 'http';
20
20
  import require$$0$7 from 'stream';
21
21
  import require$$2 from 'os';
22
22
  import require$$2$1 from 'child_process';
23
- import { CLIENT_ENTRY, VALID_ID_PREFIX, NULL_BYTE_PLACEHOLDER, OPTIMIZABLE_ENTRY_RE, FS_PREFIX, wildcardHosts, loopbackHosts, CLIENT_PUBLIC_PATH, ENV_PUBLIC_PATH, ENV_ENTRY, DEP_VERSION_RE, SPECIAL_QUERY_RE, DEFAULT_MAIN_FIELDS, DEFAULT_EXTENSIONS, CSS_LANGS_RE, ESBUILD_MODULES_TARGET, KNOWN_ASSET_TYPES, VITE_PACKAGE_DIR, ASYNC_DISPOSE, DEFAULT_DEV_PORT, CLIENT_DIR, JS_TYPES_RE, VERSION as VERSION$1, DEFAULT_PREVIEW_PORT, DEFAULT_ASSETS_RE, DEFAULT_CONFIG_FILES } from '../constants.js';
24
23
  import os$4 from 'node:os';
25
24
  import { exec } from 'node:child_process';
26
25
  import { createHash as createHash$2 } from 'node:crypto';
27
26
  import { promises } from 'node:dns';
27
+ import { CLIENT_ENTRY, VALID_ID_PREFIX, NULL_BYTE_PLACEHOLDER, OPTIMIZABLE_ENTRY_RE, FS_PREFIX, wildcardHosts, loopbackHosts, CLIENT_PUBLIC_PATH, ENV_PUBLIC_PATH, ENV_ENTRY, DEP_VERSION_RE, SPECIAL_QUERY_RE, DEFAULT_MAIN_FIELDS, DEFAULT_EXTENSIONS, CSS_LANGS_RE, ESBUILD_MODULES_TARGET, KNOWN_ASSET_TYPES, VITE_PACKAGE_DIR, DEFAULT_DEV_PORT, CLIENT_DIR, JS_TYPES_RE, VERSION as VERSION$1, DEFAULT_PREVIEW_PORT, DEFAULT_ASSETS_RE, DEFAULT_CONFIG_FILES } from '../constants.js';
28
28
  import require$$0$a from 'crypto';
29
29
  import { Buffer as Buffer$1 } from 'node:buffer';
30
30
  import require$$0$8, { createRequire as createRequire$2 } from 'module';
@@ -12712,9 +12712,6 @@ const requireResolveFromRootWithFallback = (root, id) => {
12712
12712
  function emptyCssComments(raw) {
12713
12713
  return raw.replace(multilineCommentsRE$1, (s) => ' '.repeat(s.length));
12714
12714
  }
12715
- function removeComments(raw) {
12716
- return raw.replace(multilineCommentsRE$1, '').replace(singlelineCommentsRE$1, '');
12717
- }
12718
12715
  function backwardCompatibleWorkerPlugins(plugins) {
12719
12716
  if (Array.isArray(plugins)) {
12720
12717
  return plugins;
@@ -13091,6 +13088,7 @@ function buildReporterPlugin(config) {
13091
13088
  let chunkCount = 0;
13092
13089
  let compressedCount = 0;
13093
13090
  let startTime = Date.now();
13091
+ let buildFailed = false;
13094
13092
  async function getCompressedSize(code) {
13095
13093
  if (config.build.ssr || !config.build.reportCompressedSize) {
13096
13094
  return null;
@@ -13139,10 +13137,11 @@ function buildReporterPlugin(config) {
13139
13137
  buildStart() {
13140
13138
  transformedCount = 0;
13141
13139
  },
13142
- buildEnd() {
13140
+ buildEnd(error) {
13141
+ buildFailed = !!error;
13143
13142
  if (shouldLogInfo) {
13144
13143
  if (tty) {
13145
- clearLine();
13144
+ clearLine$1();
13146
13145
  }
13147
13146
  config.logger.info(`${colors$1.green(`✓`)} ${transformedCount} modules transformed.`);
13148
13147
  }
@@ -13187,7 +13186,7 @@ function buildReporterPlugin(config) {
13187
13186
  },
13188
13187
  generateBundle() {
13189
13188
  if (shouldLogInfo && tty)
13190
- clearLine();
13189
+ clearLine$1();
13191
13190
  },
13192
13191
  async writeBundle({ dir: outDir }, output) {
13193
13192
  let hasLargeChunks = false;
@@ -13219,7 +13218,7 @@ function buildReporterPlugin(config) {
13219
13218
  }
13220
13219
  }))).filter(isDefined);
13221
13220
  if (tty)
13222
- clearLine();
13221
+ clearLine$1();
13223
13222
  let longest = 0;
13224
13223
  let biggestSize = 0;
13225
13224
  let biggestMap = 0;
@@ -13287,14 +13286,14 @@ function buildReporterPlugin(config) {
13287
13286
  }
13288
13287
  },
13289
13288
  closeBundle() {
13290
- if (shouldLogInfo && !config.build.watch) {
13289
+ if (shouldLogInfo && !config.build.watch && !buildFailed) {
13291
13290
  config.logger.info(`${colors$1.green(`✓ built in ${displayTime(Date.now() - startTime)}`)}`);
13292
13291
  }
13293
13292
  },
13294
13293
  };
13295
13294
  }
13296
13295
  function writeLine(output) {
13297
- clearLine();
13296
+ clearLine$1();
13298
13297
  if (output.length < process.stdout.columns) {
13299
13298
  process.stdout.write(output);
13300
13299
  }
@@ -13302,7 +13301,7 @@ function writeLine(output) {
13302
13301
  process.stdout.write(output.substring(0, process.stdout.columns - 1));
13303
13302
  }
13304
13303
  }
13305
- function clearLine() {
13304
+ function clearLine$1() {
13306
13305
  process.stdout.clearLine(0);
13307
13306
  process.stdout.cursorTo(0);
13308
13307
  }
@@ -15745,18 +15744,7 @@ function manifestPlugin(config) {
15745
15744
  },
15746
15745
  generateBundle({ format }, bundle) {
15747
15746
  function getChunkName(chunk) {
15748
- if (chunk.facadeModuleId) {
15749
- let name = normalizePath$3(path$o.relative(config.root, chunk.facadeModuleId));
15750
- if (format === 'system' && !chunk.name.includes('-legacy')) {
15751
- const ext = path$o.extname(name);
15752
- const endPos = ext.length !== 0 ? -ext.length : undefined;
15753
- name = name.slice(0, endPos) + `-legacy` + ext;
15754
- }
15755
- return name.replace(/\0/g, '');
15756
- }
15757
- else {
15758
- return `_` + path$o.basename(chunk.fileName);
15759
- }
15747
+ return getChunkOriginalFileName(chunk, config.root, format);
15760
15748
  }
15761
15749
  function getInternalImports(imports) {
15762
15750
  const filteredImports = [];
@@ -15827,6 +15815,10 @@ function manifestPlugin(config) {
15827
15815
  const assetMeta = fileNameToAssetMeta.get(chunk.fileName);
15828
15816
  const src = assetMeta?.originalName ?? chunk.name;
15829
15817
  const asset = createAsset(chunk, src, assetMeta?.isEntry);
15818
+ // If JS chunk and asset chunk are both generated from the same source file,
15819
+ // prioritize JS chunk as it contains more information
15820
+ if (manifest[src]?.file.endsWith('.js'))
15821
+ continue;
15830
15822
  manifest[src] = asset;
15831
15823
  fileNameToAsset.set(chunk.fileName, asset);
15832
15824
  }
@@ -15856,6 +15848,20 @@ function manifestPlugin(config) {
15856
15848
  },
15857
15849
  };
15858
15850
  }
15851
+ function getChunkOriginalFileName(chunk, root, format) {
15852
+ if (chunk.facadeModuleId) {
15853
+ let name = normalizePath$3(path$o.relative(root, chunk.facadeModuleId));
15854
+ if (format === 'system' && !chunk.name.includes('-legacy')) {
15855
+ const ext = path$o.extname(name);
15856
+ const endPos = ext.length !== 0 ? -ext.length : undefined;
15857
+ name = name.slice(0, endPos) + `-legacy` + ext;
15858
+ }
15859
+ return name.replace(/\0/g, '');
15860
+ }
15861
+ else {
15862
+ return `_` + path$o.basename(chunk.fileName);
15863
+ }
15864
+ }
15859
15865
 
15860
15866
  // This is based on @rollup/plugin-data-uri
15861
15867
  // MIT Licensed https://github.com/rollup/plugins/blob/master/LICENSE
@@ -15905,8 +15911,8 @@ function dataURIPlugin() {
15905
15911
  };
15906
15912
  }
15907
15913
 
15908
- /* es-module-lexer 1.3.1 */
15909
- const A=1===new Uint8Array(new Uint16Array([1]).buffer)[0];function parse$e(E,g="@"){if(!C)return init.then((()=>parse$e(E)));const I=E.length+1,o=(C.__heap_base.value||C.__heap_base)+4*I-C.memory.buffer.byteLength;o>0&&C.memory.grow(Math.ceil(o/65536));const K=C.sa(I-1);if((A?B:Q)(E,new Uint16Array(C.memory.buffer,K,I)),!C.parse())throw Object.assign(new Error(`Parse error ${g}:${E.slice(0,C.e()).split("\n").length}:${C.e()-E.lastIndexOf("\n",C.e()-1)}`),{idx:C.e()});const D=[],k=[];for(;C.ri();){const A=C.is(),Q=C.ie(),B=C.ai(),g=C.id(),I=C.ss(),o=C.se();let K;C.ip()&&(K=J(E.slice(-1===g?A-1:A,-1===g?Q+1:Q))),D.push({n:K,s:A,e:Q,ss:I,se:o,d:g,a:B});}for(;C.re();){const A=C.es(),Q=C.ee(),B=C.els(),g=C.ele(),I=E.slice(A,Q),o=I[0],K=B<0?void 0:E.slice(B,g),D=K?K[0]:"";k.push({s:A,e:Q,ls:B,le:g,n:'"'===o||"'"===o?J(I):I,ln:'"'===D||"'"===D?J(K):K});}function J(A){try{return (0, eval)(A)}catch(A){}}return [D,k,!!C.f()]}function Q(A,Q){const B=A.length;let C=0;for(;C<B;){const B=A.charCodeAt(C);Q[C++]=(255&B)<<8|B>>>8;}}function B(A,Q){const B=A.length;let C=0;for(;C<B;)Q[C]=A.charCodeAt(C++);}let C;const init=WebAssembly.compile((E="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DQFBACgCoAohAQwCC0EAKAKgCiIBQQJqQbAIQQoQLQ0BQQYhAAwCC0EAKAKgCiIBLwECQekARw0AIAEvAQRB9ABHDQBBBCEAIAEvAQZB6ABGDQELQQAgAUF+ajYCoAoPC0EAIAEgAEEBdGo2AqAKAkBBARAnQfsARg0AQQAgATYCoAoPC0EAKAKgCiICIQADQEEAIABBAmo2AqAKAkACQAJAQQEQJyIAQSJGDQAgAEEnRw0BQScQGEEAQQAoAqAKQQJqNgKgCkEBECchAAwCC0EiEBhBAEEAKAKgCkECajYCoApBARAnIQAMAQsgABAqIQALAkAgAEE6Rg0AQQAgATYCoAoPC0EAQQAoAqAKQQJqNgKgCgJAQQEQJyIAQSJGDQAgAEEnRg0AQQAgATYCoAoPCyAAEBhBAEEAKAKgCkECajYCoAoCQAJAQQEQJyIAQSxGDQAgAEH9AEYNAUEAIAE2AqAKDwtBAEEAKAKgCkECajYCoApBARAnQf0ARg0AQQAoAqAKIQAMAQsLQQAoAuQJIgEgAjYCECABQQAoAqAKQQJqNgIMC20BAn8CQAJAA0ACQCAAQf//A3EiAUF3aiICQRdLDQBBASACdEGfgIAEcQ0CCyABQaABRg0BIAAhAiABECYNAkEAIQJBAEEAKAKgCiIAQQJqNgKgCiAALwECIgANAAwCCwsgACECCyACQf//A3ELqwEBBH8CQAJAQQAoAqAKIgIvAQAiA0HhAEYNACABIQQgACEFDAELQQAgAkEEajYCoApBARAnIQJBACgCoAohBQJAAkAgAkEiRg0AIAJBJ0YNACACECoaQQAoAqAKIQQMAQsgAhAYQQBBACgCoApBAmoiBDYCoAoLQQEQJyEDQQAoAqAKIQILAkAgAiAFRg0AIAUgBEEAIAAgACABRiICG0EAIAEgAhsQAgsgAwtyAQR/QQAoAqAKIQBBACgCpAohAQJAAkADQCAAQQJqIQIgACABTw0BAkACQCACLwEAIgNBpH9qDgIBBAALIAIhACADQXZqDgQCAQECAQsgAEEEaiEADAALC0EAIAI2AqAKECJBAA8LQQAgAjYCoApB3QALSQEDf0EAIQMCQCACRQ0AAkADQCAALQAAIgQgAS0AACIFRw0BIAFBAWohASAAQQFqIQAgAkF/aiICDQAMAgsLIAQgBWshAwsgAwsL4gECAEGACAvEAQAAeABwAG8AcgB0AG0AcABvAHIAdABlAHQAYQByAG8AbQB1AG4AYwB0AGkAbwBuAHMAcwBlAHIAdAB2AG8AeQBpAGUAZABlAGwAZQBjAG8AbgB0AGkAbgBpAG4AcwB0AGEAbgB0AHkAYgByAGUAYQByAGUAdAB1AHIAZABlAGIAdQBnAGcAZQBhAHcAYQBpAHQAaAByAHcAaABpAGwAZQBmAG8AcgBpAGYAYwBhAHQAYwBmAGkAbgBhAGwAbABlAGwAcwAAQcQJCxABAAAAAgAAAAAEAAAwOQAA","undefined"!=typeof Buffer?Buffer.from(E,"base64"):Uint8Array.from(atob(E),(A=>A.charCodeAt(0))))).then(WebAssembly.instantiate).then((({exports:A})=>{C=A;}));var E;
15914
+ /* es-module-lexer 1.4.0 */
15915
+ const A=1===new Uint8Array(new Uint16Array([1]).buffer)[0];function parse$e(E,g="@"){if(!C)return init.then((()=>parse$e(E)));const I=E.length+1,o=(C.__heap_base.value||C.__heap_base)+4*I-C.memory.buffer.byteLength;o>0&&C.memory.grow(Math.ceil(o/65536));const k=C.sa(I-1);if((A?B:Q)(E,new Uint16Array(C.memory.buffer,k,I)),!C.parse())throw Object.assign(new Error(`Parse error ${g}:${E.slice(0,C.e()).split("\n").length}:${C.e()-E.lastIndexOf("\n",C.e()-1)}`),{idx:C.e()});const D=[],K=[];for(;C.ri();){const A=C.is(),Q=C.ie(),B=C.ai(),g=C.id(),I=C.ss(),o=C.se();let k;C.ip()&&(k=w(E.slice(-1===g?A-1:A,-1===g?Q+1:Q))),D.push({n:k,s:A,e:Q,ss:I,se:o,d:g,a:B});}for(;C.re();){const A=C.es(),Q=C.ee(),B=C.els(),g=C.ele(),I=E.slice(A,Q),o=I[0],k=B<0?void 0:E.slice(B,g),D=k?k[0]:"";K.push({s:A,e:Q,ls:B,le:g,n:'"'===o||"'"===o?w(I):I,ln:'"'===D||"'"===D?w(k):k});}function w(A){try{return (0, eval)(A)}catch(A){}}return [D,K,!!C.f(),!!C.ms()]}function Q(A,Q){const B=A.length;let C=0;for(;C<B;){const B=A.charCodeAt(C);Q[C++]=(255&B)<<8|B>>>8;}}function B(A,Q){const B=A.length;let C=0;for(;C<B;)Q[C]=A.charCodeAt(C++);}let C;const init=WebAssembly.compile((E="AGFzbQEAAAABKghgAX8Bf2AEf39/fwBgAAF/YAAAYAF/AGADf39/AX9gAn9/AX9gAn9/AAMwLwABAQICAgICAgICAgICAgICAgICAAMDAwQEAAAAAwAAAAADAwAFBgAAAAcABgIFBAUBcAEBAQUDAQABBg8CfwFBsPIAC38AQbDyAAsHdRQGbWVtb3J5AgACc2EAAAFlAAMCaXMABAJpZQAFAnNzAAYCc2UABwJhaQAIAmlkAAkCaXAACgJlcwALAmVlAAwDZWxzAA0DZWxlAA4CcmkADwJyZQAQAWYAEQJtcwASBXBhcnNlABMLX19oZWFwX2Jhc2UDAQrbPS9oAQF/QQAgADYC9AlBACgC0AkiASAAQQF0aiIAQQA7AQBBACAAQQJqIgA2AvgJQQAgADYC/AlBAEEANgLUCUEAQQA2AuQJQQBBADYC3AlBAEEANgLYCUEAQQA2AuwJQQBBADYC4AkgAQunAQEDf0EAKALkCSEEQQBBACgC/AkiBTYC5AlBACAENgLoCUEAIAVBIGo2AvwJIARBHGpB1AkgBBsgBTYCAEEAKALICSEEQQAoAsQJIQYgBSABNgIAQQBBAToAgAogBSAANgIIIAUgAiACQQJqQQAgBiADRhsgBCADRhs2AgwgBSADNgIUIAVBADYCECAFIAI2AgQgBUEANgIcIAVBACgCxAkgA0Y6ABgLXgEBf0EAKALsCSIEQRBqQdgJIAQbQQAoAvwJIgQ2AgBBACAENgLsCUEAIARBFGo2AvwJQQBBAToAgAogBEEANgIQIAQgAzYCDCAEIAI2AgggBCABNgIEIAQgADYCAAsIAEEAKAKECgsVAEEAKALcCSgCAEEAKALQCWtBAXULHgEBf0EAKALcCSgCBCIAQQAoAtAJa0EBdUF/IAAbCxUAQQAoAtwJKAIIQQAoAtAJa0EBdQseAQF/QQAoAtwJKAIMIgBBACgC0AlrQQF1QX8gABsLHgEBf0EAKALcCSgCECIAQQAoAtAJa0EBdUF/IAAbCzsBAX8CQEEAKALcCSgCFCIAQQAoAsQJRw0AQX8PCwJAIABBACgCyAlHDQBBfg8LIABBACgC0AlrQQF1CwsAQQAoAtwJLQAYCxUAQQAoAuAJKAIAQQAoAtAJa0EBdQsVAEEAKALgCSgCBEEAKALQCWtBAXULHgEBf0EAKALgCSgCCCIAQQAoAtAJa0EBdUF/IAAbCx4BAX9BACgC4AkoAgwiAEEAKALQCWtBAXVBfyAAGwslAQF/QQBBACgC3AkiAEEcakHUCSAAGygCACIANgLcCSAAQQBHCyUBAX9BAEEAKALgCSIAQRBqQdgJIAAbKAIAIgA2AuAJIABBAEcLCABBAC0AiAoLCABBAC0AgAoL8gwBBn8jAEGA0ABrIgAkAEEAQQE6AIgKQQBBACgCzAk2ApAKQQBBACgC0AlBfmoiATYCpApBACABQQAoAvQJQQF0aiICNgKoCkEAQQA6AIAKQQBBADsBigpBAEEAOwGMCkEAQQA6AJQKQQBBADYChApBAEEAOgDwCUEAIABBgBBqNgKYCkEAIAA2ApwKQQBBADoAoAoCQAJAAkACQANAQQAgAUECaiIDNgKkCiABIAJPDQECQCADLwEAIgJBd2pBBUkNAAJAAkACQAJAAkAgAkGbf2oOBQEICAgCAAsgAkEgRg0EIAJBL0YNAyACQTtGDQIMBwtBAC8BjAoNASADEBRFDQEgAUEEakGCCEEKEC4NARAVQQAtAIgKDQFBAEEAKAKkCiIBNgKQCgwHCyADEBRFDQAgAUEEakGMCEEKEC4NABAWC0EAQQAoAqQKNgKQCgwBCwJAIAEvAQQiA0EqRg0AIANBL0cNBBAXDAELQQEQGAtBACgCqAohAkEAKAKkCiEBDAALC0EAIQIgAyEBQQAtAPAJDQIMAQtBACABNgKkCkEAQQA6AIgKCwNAQQAgAUECaiIDNgKkCgJAAkACQAJAAkACQAJAAkACQCABQQAoAqgKTw0AIAMvAQAiAkF3akEFSQ0IAkACQAJAAkACQAJAAkACQAJAAkAgAkFgag4KEhEGEREREQUBAgALAkACQAJAAkAgAkGgf2oOCgsUFAMUARQUFAIACyACQYV/ag4DBRMGCQtBAC8BjAoNEiADEBRFDRIgAUEEakGCCEEKEC4NEhAVDBILIAMQFEUNESABQQRqQYwIQQoQLg0REBYMEQsgAxAURQ0QIAEpAARC7ICEg7COwDlSDRAgAS8BDCIDQXdqIgFBF0sNDkEBIAF0QZ+AgARxRQ0ODA8LQQBBAC8BjAoiAUEBajsBjApBACgCmAogAUEDdGoiAUEBNgIAIAFBACgCkAo2AgQMDwtBAC8BjAoiA0UNC0EAIANBf2oiAjsBjApBAC8BigoiA0UNDkEAKAKYCiACQf//A3FBA3RqKAIAQQVHDQ4CQCADQQJ0QQAoApwKakF8aigCACICKAIEDQAgAkEAKAKQCkECajYCBAtBACADQX9qOwGKCiACIAFBBGo2AgwMDgsCQEEAKAKQCiIBLwEAQSlHDQBBACgC5AkiA0UNACADKAIEIAFHDQBBAEEAKALoCSIDNgLkCQJAIANFDQAgA0EANgIcDAELQQBBADYC1AkLQQBBAC8BjAoiA0EBajsBjApBACgCmAogA0EDdGoiA0EGQQJBAC0AoAobNgIAIAMgATYCBEEAQQA6AKAKDA0LQQAvAYwKIgFFDQlBACABQX9qIgE7AYwKQQAoApgKIAFB//8DcUEDdGooAgBBBEYNBAwMC0EnEBkMCwtBIhAZDAoLIAJBL0cNCQJAAkAgAS8BBCIBQSpGDQAgAUEvRw0BEBcMDAtBARAYDAsLAkACQEEAKAKQCiIBLwEAIgMQGkUNAAJAAkAgA0FVag4EAAgBAwgLIAFBfmovAQBBK0YNBgwHCyABQX5qLwEAQS1GDQUMBgsCQCADQf0ARg0AIANBKUcNBUEAKAKYCkEALwGMCkEDdGooAgQQG0UNBQwGC0EAKAKYCkEALwGMCkEDdGoiAigCBBAcDQUgAigCAEEGRg0FDAQLIAFBfmovAQBBUGpB//8DcUEKSQ0DDAQLQQAoApgKQQAvAYwKIgFBA3QiA2pBACgCkAo2AgRBACABQQFqOwGMCkEAKAKYCiADakEDNgIACxAdDAcLQQAtAPAJQQAvAYoKQQAvAYwKcnJFIQIMCQsgARAeDQAgA0UNACADQS9GQQAtAJQKQQBHcQ0AIAFBfmohAUEAKALQCSECAkADQCABQQJqIgQgAk0NAUEAIAE2ApAKIAEvAQAhAyABQX5qIgQhASADEB9FDQALIARBAmohBAtBASEFIANB//8DcRAgRQ0BIARBfmohAQJAA0AgAUECaiIDIAJNDQFBACABNgKQCiABLwEAIQMgAUF+aiIEIQEgAxAgDQALIARBAmohAwsgAxAhRQ0BECJBAEEAOgCUCgwFCxAiQQAhBQtBACAFOgCUCgwDCxAjQQAhAgwFCyADQaABRw0BC0EAQQE6AKAKC0EAQQAoAqQKNgKQCgtBACgCpAohAQwACwsgAEGA0ABqJAAgAgsaAAJAQQAoAtAJIABHDQBBAQ8LIABBfmoQJAv8CgEGf0EAQQAoAqQKIgBBDGoiATYCpApBACgC7AkhAkEBECghAwJAAkACQAJAAkACQAJAAkACQEEAKAKkCiIEIAFHDQAgAxAnRQ0BCwJAAkACQAJAAkACQAJAIANBKkYNACADQfsARw0BQQAgBEECajYCpApBARAoIQNBACgCpAohBANAAkACQCADQf//A3EiA0EiRg0AIANBJ0YNACADECsaQQAoAqQKIQMMAQsgAxAZQQBBACgCpApBAmoiAzYCpAoLQQEQKBoCQCAEIAMQLCIDQSxHDQBBAEEAKAKkCkECajYCpApBARAoIQMLIANB/QBGDQNBACgCpAoiBSAERg0PIAUhBCAFQQAoAqgKTQ0ADA8LC0EAIARBAmo2AqQKQQEQKBpBACgCpAoiAyADECwaDAILQQBBADoAiAoCQAJAAkACQAJAAkAgA0Gff2oODAILBAELAwsLCwsLBQALIANB9gBGDQQMCgtBACAEQQ5qIgM2AqQKAkACQAJAQQEQKEGff2oOBgASAhISARILQQAoAqQKIgUpAAJC84Dkg+CNwDFSDREgBS8BChAgRQ0RQQAgBUEKajYCpApBABAoGgtBACgCpAoiBUECakGiCEEOEC4NECAFLwEQIgJBd2oiAUEXSw0NQQEgAXRBn4CABHFFDQ0MDgtBACgCpAoiBSkAAkLsgISDsI7AOVINDyAFLwEKIgJBd2oiAUEXTQ0GDAoLQQAgBEEKajYCpApBABAoGkEAKAKkCiEEC0EAIARBEGo2AqQKAkBBARAoIgRBKkcNAEEAQQAoAqQKQQJqNgKkCkEBECghBAtBACgCpAohAyAEECsaIANBACgCpAoiBCADIAQQAkEAQQAoAqQKQX5qNgKkCg8LAkAgBCkAAkLsgISDsI7AOVINACAELwEKEB9FDQBBACAEQQpqNgKkCkEBECghBEEAKAKkCiEDIAQQKxogA0EAKAKkCiIEIAMgBBACQQBBACgCpApBfmo2AqQKDwtBACAEQQRqIgQ2AqQKC0EAIARBBmo2AqQKQQBBADoAiApBARAoIQRBACgCpAohAyAEECshBEEAKAKkCiECIARB3/8DcSIBQdsARw0DQQAgAkECajYCpApBARAoIQVBACgCpAohA0EAIQQMBAtBAEEBOgCACkEAQQAoAqQKQQJqNgKkCgtBARAoIQRBACgCpAohAwJAIARB5gBHDQAgA0ECakGcCEEGEC4NAEEAIANBCGo2AqQKIABBARAoECogAkEQakHYCSACGyEDA0AgAygCACIDRQ0FIANCADcCCCADQRBqIQMMAAsLQQAgA0F+ajYCpAoMAwtBASABdEGfgIAEcUUNAwwEC0EBIQQLA0ACQAJAIAQOAgABAQsgBUH//wNxECsaQQEhBAwBCwJAAkBBACgCpAoiBCADRg0AIAMgBCADIAQQAkEBECghBAJAIAFB2wBHDQAgBEEgckH9AEYNBAtBACgCpAohAwJAIARBLEcNAEEAIANBAmo2AqQKQQEQKCEFQQAoAqQKIQMgBUEgckH7AEcNAgtBACADQX5qNgKkCgsgAUHbAEcNAkEAIAJBfmo2AqQKDwtBACEEDAALCw8LIAJBoAFGDQAgAkH7AEcNBAtBACAFQQpqNgKkCkEBECgiBUH7AEYNAwwCCwJAIAJBWGoOAwEDAQALIAJBoAFHDQILQQAgBUEQajYCpAoCQEEBECgiBUEqRw0AQQBBACgCpApBAmo2AqQKQQEQKCEFCyAFQShGDQELQQAoAqQKIQEgBRArGkEAKAKkCiIFIAFNDQAgBCADIAEgBRACQQBBACgCpApBfmo2AqQKDwsgBCADQQBBABACQQAgBEEMajYCpAoPCxAjC9QGAQR/QQBBACgCpAoiAEEMaiIBNgKkCgJAAkACQAJAAkACQAJAAkACQAJAQQEQKCICQVlqDggEAgEEAQEBAwALIAJBIkYNAyACQfsARg0EC0EAKAKkCiABRw0CQQAgAEEKajYCpAoPC0EAKAKYCkEALwGMCiICQQN0aiIBQQAoAqQKNgIEQQAgAkEBajsBjAogAUEFNgIAQQAoApAKLwEAQS5GDQNBAEEAKAKkCiIBQQJqNgKkCkEBECghAiAAQQAoAqQKQQAgARABQQBBAC8BigoiAUEBajsBigpBACgCnAogAUECdGpBACgC5Ak2AgACQCACQSJGDQAgAkEnRg0AQQBBACgCpApBfmo2AqQKDwsgAhAZQQBBACgCpApBAmoiAjYCpAoCQAJAAkBBARAoQVdqDgQBAgIAAgtBAEEAKAKkCkECajYCpApBARAoGkEAKALkCSIBIAI2AgQgAUEBOgAYIAFBACgCpAoiAjYCEEEAIAJBfmo2AqQKDwtBACgC5AkiASACNgIEIAFBAToAGEEAQQAvAYwKQX9qOwGMCiABQQAoAqQKQQJqNgIMQQBBAC8BigpBf2o7AYoKDwtBAEEAKAKkCkF+ajYCpAoPC0EAQQAoAqQKQQJqNgKkCkEBEChB7QBHDQJBACgCpAoiAkECakGWCEEGEC4NAgJAQQAoApAKIgEQKQ0AIAEvAQBBLkYNAwsgACAAIAJBCGpBACgCyAkQAQ8LQQAvAYwKDQJBACgCpAohAkEAKAKoCiEDA0AgAiADTw0FAkACQCACLwEAIgFBJ0YNACABQSJHDQELIAAgARAqDwtBACACQQJqIgI2AqQKDAALC0EAKAKkCiECQQAvAYwKDQICQANAAkACQAJAIAJBACgCqApPDQBBARAoIgJBIkYNASACQSdGDQEgAkH9AEcNAkEAQQAoAqQKQQJqNgKkCgtBARAoIQFBACgCpAohAgJAIAFB5gBHDQAgAkECakGcCEEGEC4NCAtBACACQQhqNgKkCkEBECgiAkEiRg0DIAJBJ0YNAwwHCyACEBkLQQBBACgCpApBAmoiAjYCpAoMAAsLIAAgAhAqCw8LQQBBACgCpApBfmo2AqQKDwtBACACQX5qNgKkCg8LECMLRwEDf0EAKAKkCkECaiEAQQAoAqgKIQECQANAIAAiAkF+aiABTw0BIAJBAmohACACLwEAQXZqDgQBAAABAAsLQQAgAjYCpAoLmAEBA39BAEEAKAKkCiIBQQJqNgKkCiABQQZqIQFBACgCqAohAgNAAkACQAJAIAFBfGogAk8NACABQX5qLwEAIQMCQAJAIAANACADQSpGDQEgA0F2ag4EAgQEAgQLIANBKkcNAwsgAS8BAEEvRw0CQQAgAUF+ajYCpAoMAQsgAUF+aiEBC0EAIAE2AqQKDwsgAUECaiEBDAALC4gBAQR/QQAoAqQKIQFBACgCqAohAgJAAkADQCABIgNBAmohASADIAJPDQEgAS8BACIEIABGDQICQCAEQdwARg0AIARBdmoOBAIBAQIBCyADQQRqIQEgAy8BBEENRw0AIANBBmogASADLwEGQQpGGyEBDAALC0EAIAE2AqQKECMPC0EAIAE2AqQKC2wBAX8CQAJAIABBX2oiAUEFSw0AQQEgAXRBMXENAQsgAEFGakH//wNxQQZJDQAgAEEpRyAAQVhqQf//A3FBB0lxDQACQCAAQaV/ag4EAQAAAQALIABB/QBHIABBhX9qQf//A3FBBElxDwtBAQsuAQF/QQEhAQJAIABBlglBBRAlDQAgAEGgCUEDECUNACAAQaYJQQIQJSEBCyABC4MBAQJ/QQEhAQJAAkACQAJAAkACQCAALwEAIgJBRWoOBAUEBAEACwJAIAJBm39qDgQDBAQCAAsgAkEpRg0EIAJB+QBHDQMgAEF+akGyCUEGECUPCyAAQX5qLwEAQT1GDwsgAEF+akGqCUEEECUPCyAAQX5qQb4JQQMQJQ8LQQAhAQsgAQveAQEEf0EAKAKkCiEAQQAoAqgKIQECQAJAAkADQCAAIgJBAmohACACIAFPDQECQAJAAkAgAC8BACIDQaR/ag4FAgMDAwEACyADQSRHDQIgAi8BBEH7AEcNAkEAIAJBBGoiADYCpApBAEEALwGMCiICQQFqOwGMCkEAKAKYCiACQQN0aiICQQQ2AgAgAiAANgIEDwtBACAANgKkCkEAQQAvAYwKQX9qIgA7AYwKQQAoApgKIABB//8DcUEDdGooAgBBA0cNAwwECyACQQRqIQAMAAsLQQAgADYCpAoLECMLC7QDAQJ/QQAhAQJAAkACQAJAAkACQAJAAkACQAJAIAAvAQBBnH9qDhQAAQIJCQkJAwkJBAUJCQYJBwkJCAkLAkACQCAAQX5qLwEAQZd/ag4EAAoKAQoLIABBfGpBughBAhAlDwsgAEF8akG+CEEDECUPCwJAAkACQCAAQX5qLwEAQY1/ag4DAAECCgsCQCAAQXxqLwEAIgJB4QBGDQAgAkHsAEcNCiAAQXpqQeUAECYPCyAAQXpqQeMAECYPCyAAQXxqQcQIQQQQJQ8LIABBfGpBzAhBBhAlDwsgAEF+ai8BAEHvAEcNBiAAQXxqLwEAQeUARw0GAkAgAEF6ai8BACICQfAARg0AIAJB4wBHDQcgAEF4akHYCEEGECUPCyAAQXhqQeQIQQIQJQ8LIABBfmpB6AhBBBAlDwtBASEBIABBfmoiAEHpABAmDQQgAEHwCEEFECUPCyAAQX5qQeQAECYPCyAAQX5qQfoIQQcQJQ8LIABBfmpBiAlBBBAlDwsCQCAAQX5qLwEAIgJB7wBGDQAgAkHlAEcNASAAQXxqQe4AECYPCyAAQXxqQZAJQQMQJSEBCyABCzQBAX9BASEBAkAgAEF3akH//wNxQQVJDQAgAEGAAXJBoAFGDQAgAEEuRyAAECdxIQELIAELMAEBfwJAAkAgAEF3aiIBQRdLDQBBASABdEGNgIAEcQ0BCyAAQaABRg0AQQAPC0EBC04BAn9BACEBAkACQCAALwEAIgJB5QBGDQAgAkHrAEcNASAAQX5qQegIQQQQJQ8LIABBfmovAQBB9QBHDQAgAEF8akHMCEEGECUhAQsgAQtwAQJ/AkACQANAQQBBACgCpAoiAEECaiIBNgKkCiAAQQAoAqgKTw0BAkACQAJAIAEvAQAiAUGlf2oOAgECAAsCQCABQXZqDgQEAwMEAAsgAUEvRw0CDAQLEC0aDAELQQAgAEEEajYCpAoMAAsLECMLCzUBAX9BAEEBOgDwCUEAKAKkCiEAQQBBACgCqApBAmo2AqQKQQAgAEEAKALQCWtBAXU2AoQKC0MBAn9BASEBAkAgAC8BACICQXdqQf//A3FBBUkNACACQYABckGgAUYNAEEAIQEgAhAnRQ0AIAJBLkcgABApcg8LIAELRgEDf0EAIQMCQCAAIAJBAXQiAmsiBEECaiIAQQAoAtAJIgVJDQAgACABIAIQLg0AAkAgACAFRw0AQQEPCyAEECQhAwsgAws9AQJ/QQAhAgJAQQAoAtAJIgMgAEsNACAALwEAIAFHDQACQCADIABHDQBBAQ8LIABBfmovAQAQHyECCyACC2gBAn9BASEBAkACQCAAQV9qIgJBBUsNAEEBIAJ0QTFxDQELIABB+P8DcUEoRg0AIABBRmpB//8DcUEGSQ0AAkAgAEGlf2oiAkEDSw0AIAJBAUcNAQsgAEGFf2pB//8DcUEESSEBCyABC5wBAQN/QQAoAqQKIQECQANAAkACQCABLwEAIgJBL0cNAAJAIAEvAQIiAUEqRg0AIAFBL0cNBBAXDAILIAAQGAwBCwJAAkAgAEUNACACQXdqIgFBF0sNAUEBIAF0QZ+AgARxRQ0BDAILIAIQIEUNAwwBCyACQaABRw0CC0EAQQAoAqQKIgNBAmoiATYCpAogA0EAKAKoCkkNAAsLIAILMQEBf0EAIQECQCAALwEAQS5HDQAgAEF+ai8BAEEuRw0AIABBfGovAQBBLkYhAQsgAQuJBAEBfwJAIAFBIkYNACABQSdGDQAQIw8LQQAoAqQKIQIgARAZIAAgAkECakEAKAKkCkEAKALECRABQQBBACgCpApBAmo2AqQKAkACQAJAAkBBABAoIgFB4QBGDQAgAUH3AEYNAUEAKAKkCiEBDAILQQAoAqQKIgFBAmpBsAhBChAuDQFBBiEADAILQQAoAqQKIgEvAQJB6QBHDQAgAS8BBEH0AEcNAEEEIQAgAS8BBkHoAEYNAQtBACABQX5qNgKkCg8LQQAgASAAQQF0ajYCpAoCQEEBEChB+wBGDQBBACABNgKkCg8LQQAoAqQKIgIhAANAQQAgAEECajYCpAoCQAJAAkBBARAoIgBBIkYNACAAQSdHDQFBJxAZQQBBACgCpApBAmo2AqQKQQEQKCEADAILQSIQGUEAQQAoAqQKQQJqNgKkCkEBECghAAwBCyAAECshAAsCQCAAQTpGDQBBACABNgKkCg8LQQBBACgCpApBAmo2AqQKAkBBARAoIgBBIkYNACAAQSdGDQBBACABNgKkCg8LIAAQGUEAQQAoAqQKQQJqNgKkCgJAAkBBARAoIgBBLEYNACAAQf0ARg0BQQAgATYCpAoPC0EAQQAoAqQKQQJqNgKkCkEBEChB/QBGDQBBACgCpAohAAwBCwtBACgC5AkiASACNgIQIAFBACgCpApBAmo2AgwLbQECfwJAAkADQAJAIABB//8DcSIBQXdqIgJBF0sNAEEBIAJ0QZ+AgARxDQILIAFBoAFGDQEgACECIAEQJw0CQQAhAkEAQQAoAqQKIgBBAmo2AqQKIAAvAQIiAA0ADAILCyAAIQILIAJB//8DcQurAQEEfwJAAkBBACgCpAoiAi8BACIDQeEARg0AIAEhBCAAIQUMAQtBACACQQRqNgKkCkEBECghAkEAKAKkCiEFAkACQCACQSJGDQAgAkEnRg0AIAIQKxpBACgCpAohBAwBCyACEBlBAEEAKAKkCkECaiIENgKkCgtBARAoIQNBACgCpAohAgsCQCACIAVGDQAgBSAEQQAgACAAIAFGIgIbQQAgASACGxACCyADC3IBBH9BACgCpAohAEEAKAKoCiEBAkACQANAIABBAmohAiAAIAFPDQECQAJAIAIvAQAiA0Gkf2oOAgEEAAsgAiEAIANBdmoOBAIBAQIBCyAAQQRqIQAMAAsLQQAgAjYCpAoQI0EADwtBACACNgKkCkHdAAtJAQN/QQAhAwJAIAJFDQACQANAIAAtAAAiBCABLQAAIgVHDQEgAUEBaiEBIABBAWohACACQX9qIgINAAwCCwsgBCAFayEDCyADCwviAQIAQYAIC8QBAAB4AHAAbwByAHQAbQBwAG8AcgB0AGUAdABhAHIAbwBtAHUAbgBjAHQAaQBvAG4AcwBzAGUAcgB0AHYAbwB5AGkAZQBkAGUAbABlAGMAbwBuAHQAaQBuAGkAbgBzAHQAYQBuAHQAeQBiAHIAZQBhAHIAZQB0AHUAcgBkAGUAYgB1AGcAZwBlAGEAdwBhAGkAdABoAHIAdwBoAGkAbABlAGYAbwByAGkAZgBjAGEAdABjAGYAaQBuAGEAbABsAGUAbABzAABBxAkLEAEAAAACAAAAAAQAADA5AAA=","undefined"!=typeof Buffer?Buffer.from(E,"base64"):Uint8Array.from(atob(E),(A=>A.charCodeAt(0))))).then(WebAssembly.instantiate).then((({exports:A})=>{C=A;}));var E;
15910
15916
 
15911
15917
  var convertSourceMap$1 = {};
15912
15918
 
@@ -38016,11 +38022,8 @@ function cssPostPlugin(config) {
38016
38022
  }
38017
38023
  if (opts.format === 'es' || opts.format === 'cjs') {
38018
38024
  const isEntry = chunk.isEntry && isPureCssChunk;
38019
- const cssAssetName = normalizePath$3(!isEntry && chunk.facadeModuleId
38020
- ? path$o.relative(config.root, chunk.facadeModuleId)
38021
- : chunk.name);
38022
- const lang = path$o.extname(cssAssetName).slice(1);
38023
- const cssFileName = ensureFileExt(cssAssetName, '.css');
38025
+ const cssAssetName = ensureFileExt(chunk.name, '.css');
38026
+ const originalFilename = getChunkOriginalFileName(chunk, config.root, opts.format);
38024
38027
  chunkCSS = resolveAssetUrlsInCss(chunkCSS, cssAssetName);
38025
38028
  const previousTask = emitTasks[emitTasks.length - 1];
38026
38029
  // finalizeCss is async which makes `emitFile` non-deterministic, so
@@ -38037,14 +38040,13 @@ function cssPostPlugin(config) {
38037
38040
  await thisTask;
38038
38041
  // emit corresponding css file
38039
38042
  const referenceId = this.emitFile({
38040
- name: path$o.basename(cssFileName),
38043
+ name: cssAssetName,
38041
38044
  type: 'asset',
38042
38045
  source: chunkCSS,
38043
38046
  });
38044
- const originalName = isPreProcessor(lang) ? cssAssetName : cssFileName;
38045
38047
  generatedAssets
38046
38048
  .get(config)
38047
- .set(referenceId, { originalName, isEntry });
38049
+ .set(referenceId, { originalName: originalFilename, isEntry });
38048
38050
  chunk.viteMetadata.importedCss.add(this.getFileName(referenceId));
38049
38051
  if (emitTasksLength === emitTasks.length) {
38050
38052
  // this is the last task, clear `emitTasks` to free up memory
@@ -38494,8 +38496,8 @@ function createCachedImport(imp) {
38494
38496
  return cached;
38495
38497
  };
38496
38498
  }
38497
- const importPostcssImport = createCachedImport(() => import('./dep-zjm7Opl5.js').then(function (n) { return n.i; }));
38498
- const importPostcssModules = createCachedImport(() => import('./dep-pKKs8JVV.js').then(function (n) { return n.i; }));
38499
+ const importPostcssImport = createCachedImport(() => import('./dep-qfw-A_Gb.js').then(function (n) { return n.i; }));
38500
+ const importPostcssModules = createCachedImport(() => import('./dep-faMUqRRE.js').then(function (n) { return n.i; }));
38499
38501
  const importPostcss = createCachedImport(() => import('postcss'));
38500
38502
  /**
38501
38503
  * @experimental
@@ -47421,7 +47423,7 @@ function sirv (dir, opts={}) {
47421
47423
  }
47422
47424
 
47423
47425
  const knownJavascriptExtensionRE = /\.[tj]sx?$/;
47424
- const sirvOptions = ({ headers, shouldServe, }) => {
47426
+ const sirvOptions = ({ getHeaders, shouldServe, }) => {
47425
47427
  return {
47426
47428
  dev: true,
47427
47429
  etag: true,
@@ -47435,6 +47437,7 @@ const sirvOptions = ({ headers, shouldServe, }) => {
47435
47437
  if (knownJavascriptExtensionRE.test(pathname)) {
47436
47438
  res.setHeader('Content-Type', 'application/javascript');
47437
47439
  }
47440
+ const headers = getHeaders();
47438
47441
  if (headers) {
47439
47442
  for (const name in headers) {
47440
47443
  res.setHeader(name, headers[name]);
@@ -47444,9 +47447,10 @@ const sirvOptions = ({ headers, shouldServe, }) => {
47444
47447
  shouldServe,
47445
47448
  };
47446
47449
  };
47447
- function servePublicMiddleware(dir, headers) {
47450
+ function servePublicMiddleware(server) {
47451
+ const dir = server.config.publicDir;
47448
47452
  const serve = sirv(dir, sirvOptions({
47449
- headers,
47453
+ getHeaders: () => server.config.server.headers,
47450
47454
  shouldServe: (filePath) => shouldServeFile(filePath, dir),
47451
47455
  }));
47452
47456
  // Keep the named function. The name is visible in debug logs via `DEBUG=connect:dispatcher ...`
@@ -47458,9 +47462,10 @@ function servePublicMiddleware(dir, headers) {
47458
47462
  serve(req, res, next);
47459
47463
  };
47460
47464
  }
47461
- function serveStaticMiddleware(dir, server) {
47465
+ function serveStaticMiddleware(server) {
47466
+ const dir = server.config.root;
47462
47467
  const serve = sirv(dir, sirvOptions({
47463
- headers: server.config.server.headers,
47468
+ getHeaders: () => server.config.server.headers,
47464
47469
  }));
47465
47470
  // Keep the named function. The name is visible in debug logs via `DEBUG=connect:dispatcher ...`
47466
47471
  return function viteServeStaticMiddleware(req, res, next) {
@@ -47510,7 +47515,7 @@ function serveStaticMiddleware(dir, server) {
47510
47515
  };
47511
47516
  }
47512
47517
  function serveRawFsMiddleware(server) {
47513
- const serveFromRoot = sirv('/', sirvOptions({ headers: server.config.server.headers }));
47518
+ const serveFromRoot = sirv('/', sirvOptions({ getHeaders: () => server.config.server.headers }));
47514
47519
  // Keep the named function. The name is visible in debug logs via `DEBUG=connect:dispatcher ...`
47515
47520
  return function viteServeRawFsMiddleware(req, res, next) {
47516
47521
  const url = new URL(req.url.replace(/^\/{2,}/, '/'), 'http://example.com');
@@ -54930,9 +54935,6 @@ function createWebSocketServer(server, config, httpsOptions) {
54930
54935
  });
54931
54936
  });
54932
54937
  },
54933
- [ASYNC_DISPOSE]() {
54934
- return this.close();
54935
- },
54936
54938
  };
54937
54939
  }
54938
54940
 
@@ -57660,9 +57662,6 @@ const devHtmlHook = async (html, { path: htmlPath, filename, server, originalUrl
57660
57662
  };
57661
57663
  function indexHtmlMiddleware(root, server) {
57662
57664
  const isDev = isDevServer(server);
57663
- const headers = isDev
57664
- ? server.config.server.headers
57665
- : server.config.preview.headers;
57666
57665
  // Keep the named function. The name is visible in debug logs via `DEBUG=connect:dispatcher ...`
57667
57666
  return async function viteIndexHtmlMiddleware(req, res, next) {
57668
57667
  if (res.writableEnded) {
@@ -57679,6 +57678,9 @@ function indexHtmlMiddleware(root, server) {
57679
57678
  filePath = path$o.join(root, decodeURIComponent(url));
57680
57679
  }
57681
57680
  if (fs$l.existsSync(filePath)) {
57681
+ const headers = isDev
57682
+ ? server.config.server.headers
57683
+ : server.config.preview.headers;
57682
57684
  try {
57683
57685
  let html = await fsp.readFile(filePath, 'utf-8');
57684
57686
  if (isDev) {
@@ -57827,8 +57829,6 @@ class ModuleGraph {
57827
57829
  }
57828
57830
  invalidateModule(mod, seen = new Set(), timestamp = Date.now(), isHmr = false,
57829
57831
  /** @internal */
57830
- hmrBoundaries = [],
57831
- /** @internal */
57832
57832
  softInvalidate = false) {
57833
57833
  const prevInvalidationState = mod.invalidationState;
57834
57834
  const prevSsrInvalidationState = mod.ssrInvalidationState;
@@ -57866,14 +57866,6 @@ class ModuleGraph {
57866
57866
  mod.ssrTransformResult = null;
57867
57867
  mod.ssrModule = null;
57868
57868
  mod.ssrError = null;
57869
- // https://github.com/vitejs/vite/issues/3033
57870
- // Given b.js -> c.js -> b.js (arrow means top-level import), if c.js self-accepts
57871
- // and refetches itself, the execution order becomes c.js -> b.js -> c.js. The import
57872
- // order matters here as it will fail. The workaround for now is to not hmr invalidate
57873
- // b.js so that c.js refetches the already cached b.js, skipping the import loop.
57874
- if (hmrBoundaries.includes(mod)) {
57875
- return;
57876
- }
57877
57869
  mod.importers.forEach((importer) => {
57878
57870
  if (!importer.acceptedHmrDeps.has(mod)) {
57879
57871
  // If the importer statically imports the current module, we can soft-invalidate the importer
@@ -57881,7 +57873,7 @@ class ModuleGraph {
57881
57873
  // we can only soft invalidate if the current module was also soft-invalidated. A soft-invalidation
57882
57874
  // doesn't need to trigger a re-load and re-transform of the importer.
57883
57875
  const shouldSoftInvalidateImporter = importer.staticImportedUrls?.has(mod.url) || softInvalidate;
57884
- this.invalidateModule(importer, seen, timestamp, isHmr, undefined, shouldSoftInvalidateImporter);
57876
+ this.invalidateModule(importer, seen, timestamp, isHmr, shouldSoftInvalidateImporter);
57885
57877
  }
57886
57878
  });
57887
57879
  }
@@ -58469,9 +58461,6 @@ async function _createServer(inlineConfig = {}, options) {
58469
58461
  }
58470
58462
  server.resolvedUrls = null;
58471
58463
  },
58472
- [ASYNC_DISPOSE]() {
58473
- return this.close();
58474
- },
58475
58464
  printUrls() {
58476
58465
  if (server.resolvedUrls) {
58477
58466
  printServerUrls(server.resolvedUrls, serverConfig.host, config.logger.info);
@@ -58606,13 +58595,13 @@ async function _createServer(inlineConfig = {}, options) {
58606
58595
  // this applies before the transform middleware so that these files are served
58607
58596
  // as-is without transforms.
58608
58597
  if (config.publicDir) {
58609
- middlewares.use(servePublicMiddleware(config.publicDir, config.server.headers));
58598
+ middlewares.use(servePublicMiddleware(server));
58610
58599
  }
58611
58600
  // main transform middleware
58612
58601
  middlewares.use(transformMiddleware(server));
58613
58602
  // serve static files
58614
58603
  middlewares.use(serveRawFsMiddleware(server));
58615
- middlewares.use(serveStaticMiddleware(root, server));
58604
+ middlewares.use(serveStaticMiddleware(server));
58616
58605
  // html fallback
58617
58606
  if (config.appType === 'spa' || config.appType === 'mpa') {
58618
58607
  middlewares.use(htmlFallbackMiddleware(root, config.appType === 'spa'));
@@ -58681,14 +58670,22 @@ async function startServer(server, inlinePort) {
58681
58670
  throw new Error('Cannot call server.listen in middleware mode.');
58682
58671
  }
58683
58672
  const options = server.config.server;
58684
- const port = inlinePort ?? options.port ?? DEFAULT_DEV_PORT;
58685
58673
  const hostname = await resolveHostname(options.host);
58686
- await httpServerStart(httpServer, {
58674
+ const configPort = inlinePort ?? options.port;
58675
+ // When using non strict port for the dev server, the running port can be different from the config one.
58676
+ // When restarting, the original port may be available but to avoid a switch of URL for the running
58677
+ // browser tabs, we enforce the previously used port, expect if the config port changed.
58678
+ const port = (!configPort || configPort === server._configServerPort
58679
+ ? server._currentServerPort
58680
+ : configPort) ?? DEFAULT_DEV_PORT;
58681
+ server._configServerPort = configPort;
58682
+ const serverPort = await httpServerStart(httpServer, {
58687
58683
  port,
58688
58684
  strictPort: options.strictPort,
58689
58685
  host: hostname.host,
58690
58686
  logger: server.config.logger,
58691
58687
  });
58688
+ server._currentServerPort = serverPort;
58692
58689
  }
58693
58690
  function createServerCloseFn(server) {
58694
58691
  if (!server) {
@@ -58781,6 +58778,8 @@ async function restartServer(server) {
58781
58778
  }
58782
58779
  await server.close();
58783
58780
  // Assign new server props to existing server instance
58781
+ newServer._configServerPort = server._configServerPort;
58782
+ newServer._currentServerPort = server._currentServerPort;
58784
58783
  Object.assign(server, newServer);
58785
58784
  // Rebind internal server variable so functions reference the user server
58786
58785
  newServer._setInternalServer(server);
@@ -58911,12 +58910,12 @@ function updateModules(file, modules, timestamp, { config, ws, moduleGraph }, af
58911
58910
  for (const mod of modules) {
58912
58911
  const boundaries = [];
58913
58912
  const hasDeadEnd = propagateUpdate(mod, traversedModules, boundaries);
58914
- moduleGraph.invalidateModule(mod, invalidatedModules, timestamp, true, boundaries.map((b) => b.boundary));
58913
+ moduleGraph.invalidateModule(mod, invalidatedModules, timestamp, true);
58915
58914
  if (needFullReload) {
58916
58915
  continue;
58917
58916
  }
58918
58917
  if (hasDeadEnd) {
58919
- needFullReload = true;
58918
+ needFullReload = hasDeadEnd;
58920
58919
  continue;
58921
58920
  }
58922
58921
  updates.push(...boundaries.map(({ boundary, acceptedVia }) => ({
@@ -58930,10 +58929,10 @@ function updateModules(file, modules, timestamp, { config, ws, moduleGraph }, af
58930
58929
  })));
58931
58930
  }
58932
58931
  if (needFullReload) {
58933
- config.logger.info(colors$1.green(`page reload `) + colors$1.dim(file), {
58934
- clear: !afterInvalidation,
58935
- timestamp: true,
58936
- });
58932
+ const reason = typeof needFullReload === 'string'
58933
+ ? colors$1.dim(` (${needFullReload})`)
58934
+ : '';
58935
+ config.logger.info(colors$1.green(`page reload `) + colors$1.dim(file) + reason, { clear: !afterInvalidation, timestamp: true });
58937
58936
  ws.send({
58938
58937
  type: 'full-reload',
58939
58938
  });
@@ -58986,6 +58985,9 @@ function propagateUpdate(node, traversedModules, boundaries, currentChain = [nod
58986
58985
  }
58987
58986
  if (node.isSelfAccepting) {
58988
58987
  boundaries.push({ boundary: node, acceptedVia: node });
58988
+ const result = isNodeWithinCircularImports(node, currentChain);
58989
+ if (result)
58990
+ return result;
58989
58991
  // additionally check for CSS importers, since a PostCSS plugin like
58990
58992
  // Tailwind JIT may register any file as a dependency to a CSS file.
58991
58993
  for (const importer of node.importers) {
@@ -59002,6 +59004,9 @@ function propagateUpdate(node, traversedModules, boundaries, currentChain = [nod
59002
59004
  // so that they do get the fresh imported module when/if they are reloaded.
59003
59005
  if (node.acceptedHmrExports) {
59004
59006
  boundaries.push({ boundary: node, acceptedVia: node });
59007
+ const result = isNodeWithinCircularImports(node, currentChain);
59008
+ if (result)
59009
+ return result;
59005
59010
  }
59006
59011
  else {
59007
59012
  if (!node.importers.size) {
@@ -59019,6 +59024,9 @@ function propagateUpdate(node, traversedModules, boundaries, currentChain = [nod
59019
59024
  const subChain = currentChain.concat(importer);
59020
59025
  if (importer.acceptedHmrDeps.has(node)) {
59021
59026
  boundaries.push({ boundary: importer, acceptedVia: node });
59027
+ const result = isNodeWithinCircularImports(importer, subChain);
59028
+ if (result)
59029
+ return result;
59022
59030
  continue;
59023
59031
  }
59024
59032
  if (node.id && node.acceptedHmrExports && importer.importedBindings) {
@@ -59028,12 +59036,67 @@ function propagateUpdate(node, traversedModules, boundaries, currentChain = [nod
59028
59036
  continue;
59029
59037
  }
59030
59038
  }
59031
- if (currentChain.includes(importer)) {
59032
- // circular deps is considered dead end
59039
+ if (!currentChain.includes(importer) &&
59040
+ propagateUpdate(importer, traversedModules, boundaries, subChain)) {
59033
59041
  return true;
59034
59042
  }
59035
- if (propagateUpdate(importer, traversedModules, boundaries, subChain)) {
59036
- return true;
59043
+ }
59044
+ return false;
59045
+ }
59046
+ /**
59047
+ * Check importers recursively if it's an import loop. An accepted module within
59048
+ * an import loop cannot recover its execution order and should be reloaded.
59049
+ *
59050
+ * @param node The node that accepts HMR and is a boundary
59051
+ * @param nodeChain The chain of nodes/imports that lead to the node.
59052
+ * (The last node in the chain imports the `node` parameter)
59053
+ * @param currentChain The current chain tracked from the `node` parameter
59054
+ */
59055
+ function isNodeWithinCircularImports(node, nodeChain, currentChain = [node]) {
59056
+ // To help visualize how each parameters work, imagine this import graph:
59057
+ //
59058
+ // A -> B -> C -> ACCEPTED -> D -> E -> NODE
59059
+ // ^--------------------------|
59060
+ //
59061
+ // ACCEPTED: the node that accepts HMR. the `node` parameter.
59062
+ // NODE : the initial node that triggered this HMR.
59063
+ //
59064
+ // This function will return true in the above graph, which:
59065
+ // `node` : ACCEPTED
59066
+ // `nodeChain` : [NODE, E, D, ACCEPTED]
59067
+ // `currentChain` : [ACCEPTED, C, B]
59068
+ //
59069
+ // It works by checking if any `node` importers are within `nodeChain`, which
59070
+ // means there's an import loop with a HMR-accepted module in it.
59071
+ for (const importer of node.importers) {
59072
+ // Node may import itself which is safe
59073
+ if (importer === node)
59074
+ continue;
59075
+ // Check circular imports
59076
+ const importerIndex = nodeChain.indexOf(importer);
59077
+ if (importerIndex > -1) {
59078
+ // Log extra debug information so users can fix and remove the circular imports
59079
+ if (debugHmr) {
59080
+ // Following explanation above:
59081
+ // `importer` : E
59082
+ // `currentChain` reversed : [B, C, ACCEPTED]
59083
+ // `nodeChain` sliced & reversed : [D, E]
59084
+ // Combined : [E, B, C, ACCEPTED, D, E]
59085
+ const importChain = [
59086
+ importer,
59087
+ ...[...currentChain].reverse(),
59088
+ ...nodeChain.slice(importerIndex, -1).reverse(),
59089
+ ];
59090
+ debugHmr(colors$1.yellow(`circular imports detected: `) +
59091
+ importChain.map((m) => colors$1.dim(m.url)).join(' -> '));
59092
+ }
59093
+ return 'circular imports';
59094
+ }
59095
+ // Continue recursively
59096
+ if (!currentChain.includes(importer)) {
59097
+ const result = isNodeWithinCircularImports(importer, nodeChain, currentChain.concat(importer));
59098
+ if (result)
59099
+ return result;
59037
59100
  }
59038
59101
  }
59039
59102
  return false;
@@ -59393,6 +59456,324 @@ function canJsonParse(value) {
59393
59456
  }
59394
59457
  }
59395
59458
 
59459
+ const WORKER_FILE_ID = 'worker_file';
59460
+ const workerCache = new WeakMap();
59461
+ function saveEmitWorkerAsset(config, asset) {
59462
+ const fileName = asset.fileName;
59463
+ const workerMap = workerCache.get(config.mainConfig || config);
59464
+ workerMap.assets.set(fileName, asset);
59465
+ }
59466
+ async function bundleWorkerEntry(config, id, query) {
59467
+ // bundle the file as entry to support imports
59468
+ const { rollup } = await import('rollup');
59469
+ const { plugins, rollupOptions, format } = config.worker;
59470
+ const bundle = await rollup({
59471
+ ...rollupOptions,
59472
+ input: cleanUrl(id),
59473
+ plugins: await plugins(),
59474
+ onwarn(warning, warn) {
59475
+ onRollupWarning(warning, warn, config);
59476
+ },
59477
+ preserveEntrySignatures: false,
59478
+ });
59479
+ let chunk;
59480
+ try {
59481
+ const workerOutputConfig = config.worker.rollupOptions.output;
59482
+ const workerConfig = workerOutputConfig
59483
+ ? Array.isArray(workerOutputConfig)
59484
+ ? workerOutputConfig[0] || {}
59485
+ : workerOutputConfig
59486
+ : {};
59487
+ const { output: [outputChunk, ...outputChunks], } = await bundle.generate({
59488
+ entryFileNames: path$o.posix.join(config.build.assetsDir, '[name]-[hash].js'),
59489
+ chunkFileNames: path$o.posix.join(config.build.assetsDir, '[name]-[hash].js'),
59490
+ assetFileNames: path$o.posix.join(config.build.assetsDir, '[name]-[hash].[ext]'),
59491
+ ...workerConfig,
59492
+ format,
59493
+ sourcemap: config.build.sourcemap,
59494
+ });
59495
+ chunk = outputChunk;
59496
+ outputChunks.forEach((outputChunk) => {
59497
+ if (outputChunk.type === 'asset') {
59498
+ saveEmitWorkerAsset(config, outputChunk);
59499
+ }
59500
+ else if (outputChunk.type === 'chunk') {
59501
+ saveEmitWorkerAsset(config, {
59502
+ fileName: outputChunk.fileName,
59503
+ source: outputChunk.code,
59504
+ type: 'asset',
59505
+ });
59506
+ }
59507
+ });
59508
+ }
59509
+ finally {
59510
+ await bundle.close();
59511
+ }
59512
+ return emitSourcemapForWorkerEntry(config, query, chunk);
59513
+ }
59514
+ function emitSourcemapForWorkerEntry(config, query, chunk) {
59515
+ const { map: sourcemap } = chunk;
59516
+ if (sourcemap) {
59517
+ if (config.build.sourcemap === 'hidden' ||
59518
+ config.build.sourcemap === true) {
59519
+ const data = sourcemap.toString();
59520
+ const mapFileName = chunk.fileName + '.map';
59521
+ saveEmitWorkerAsset(config, {
59522
+ fileName: mapFileName,
59523
+ type: 'asset',
59524
+ source: data,
59525
+ });
59526
+ }
59527
+ }
59528
+ return chunk;
59529
+ }
59530
+ const workerAssetUrlRE = /__VITE_WORKER_ASSET__([a-z\d]{8})__/g;
59531
+ function encodeWorkerAssetFileName(fileName, workerCache) {
59532
+ const { fileNameHash } = workerCache;
59533
+ const hash = getHash(fileName);
59534
+ if (!fileNameHash.get(hash)) {
59535
+ fileNameHash.set(hash, fileName);
59536
+ }
59537
+ return `__VITE_WORKER_ASSET__${hash}__`;
59538
+ }
59539
+ async function workerFileToUrl(config, id, query) {
59540
+ const workerMap = workerCache.get(config.mainConfig || config);
59541
+ let fileName = workerMap.bundle.get(id);
59542
+ if (!fileName) {
59543
+ const outputChunk = await bundleWorkerEntry(config, id, query);
59544
+ fileName = outputChunk.fileName;
59545
+ saveEmitWorkerAsset(config, {
59546
+ fileName,
59547
+ source: outputChunk.code,
59548
+ type: 'asset',
59549
+ });
59550
+ workerMap.bundle.set(id, fileName);
59551
+ }
59552
+ return encodeWorkerAssetFileName(fileName, workerMap);
59553
+ }
59554
+ function webWorkerPostPlugin() {
59555
+ return {
59556
+ name: 'vite:worker-post',
59557
+ resolveImportMeta(property, { chunkId, format }) {
59558
+ // document is undefined in the worker, so we need to avoid it in iife
59559
+ if (property === 'url' && format === 'iife') {
59560
+ return 'self.location.href';
59561
+ }
59562
+ return null;
59563
+ },
59564
+ };
59565
+ }
59566
+ function webWorkerPlugin(config) {
59567
+ const isBuild = config.command === 'build';
59568
+ let server;
59569
+ const isWorker = config.isWorker;
59570
+ const isWorkerQueryId = (id) => {
59571
+ const parsedQuery = parseRequest(id);
59572
+ if (parsedQuery &&
59573
+ (parsedQuery.worker ?? parsedQuery.sharedworker) != null) {
59574
+ return true;
59575
+ }
59576
+ return false;
59577
+ };
59578
+ return {
59579
+ name: 'vite:worker',
59580
+ configureServer(_server) {
59581
+ server = _server;
59582
+ },
59583
+ buildStart() {
59584
+ if (isWorker) {
59585
+ return;
59586
+ }
59587
+ workerCache.set(config, {
59588
+ assets: new Map(),
59589
+ bundle: new Map(),
59590
+ fileNameHash: new Map(),
59591
+ });
59592
+ },
59593
+ load(id) {
59594
+ if (isBuild && isWorkerQueryId(id)) {
59595
+ return '';
59596
+ }
59597
+ },
59598
+ shouldTransformCachedModule({ id }) {
59599
+ if (isBuild && config.build.watch && isWorkerQueryId(id)) {
59600
+ return true;
59601
+ }
59602
+ },
59603
+ async transform(raw, id, options) {
59604
+ const ssr = options?.ssr === true;
59605
+ const query = parseRequest(id);
59606
+ if (query && query[WORKER_FILE_ID] != null) {
59607
+ // if import worker by worker constructor will have query.type
59608
+ // other type will be import worker by esm
59609
+ const workerType = query['type'];
59610
+ let injectEnv = '';
59611
+ const scriptPath = JSON.stringify(path$o.posix.join(config.base, ENV_PUBLIC_PATH));
59612
+ if (workerType === 'classic') {
59613
+ injectEnv = `importScripts(${scriptPath})\n`;
59614
+ }
59615
+ else if (workerType === 'module') {
59616
+ injectEnv = `import ${scriptPath}\n`;
59617
+ }
59618
+ else if (workerType === 'ignore') {
59619
+ if (isBuild) {
59620
+ injectEnv = '';
59621
+ }
59622
+ else if (server) {
59623
+ // dynamic worker type we can't know how import the env
59624
+ // so we copy /@vite/env code of server transform result into file header
59625
+ const { moduleGraph } = server;
59626
+ const module = moduleGraph.getModuleById(ENV_ENTRY);
59627
+ injectEnv = module?.transformResult?.code || '';
59628
+ }
59629
+ }
59630
+ if (injectEnv) {
59631
+ const s = new MagicString(raw);
59632
+ s.prepend(injectEnv);
59633
+ return {
59634
+ code: s.toString(),
59635
+ map: s.generateMap({ hires: 'boundary' }),
59636
+ };
59637
+ }
59638
+ return;
59639
+ }
59640
+ if (query == null ||
59641
+ (query && (query.worker ?? query.sharedworker) == null)) {
59642
+ return;
59643
+ }
59644
+ // stringified url or `new URL(...)`
59645
+ let url;
59646
+ const { format } = config.worker;
59647
+ const workerConstructor = query.sharedworker != null ? 'SharedWorker' : 'Worker';
59648
+ const workerType = isBuild
59649
+ ? format === 'es'
59650
+ ? 'module'
59651
+ : 'classic'
59652
+ : 'module';
59653
+ const workerTypeOption = `{
59654
+ ${workerType === 'module' ? `type: "module",` : ''}
59655
+ name: options?.name
59656
+ }`;
59657
+ if (isBuild) {
59658
+ getDepsOptimizer(config, ssr)?.registerWorkersSource(id);
59659
+ if (query.inline != null) {
59660
+ const chunk = await bundleWorkerEntry(config, id, query);
59661
+ const encodedJs = `const encodedJs = "${Buffer.from(chunk.code).toString('base64')}";`;
59662
+ const code =
59663
+ // Using blob URL for SharedWorker results in multiple instances of a same worker
59664
+ workerConstructor === 'Worker'
59665
+ ? `${encodedJs}
59666
+ const blob = typeof window !== "undefined" && window.Blob && new Blob([${workerType === 'classic'
59667
+ ? ''
59668
+ : // `URL` is always available, in `Worker[type="module"]`
59669
+ `'URL.revokeObjectURL(import.meta.url);'+`}atob(encodedJs)], { type: "text/javascript;charset=utf-8" });
59670
+ export default function WorkerWrapper(options) {
59671
+ let objURL;
59672
+ try {
59673
+ objURL = blob && (window.URL || window.webkitURL).createObjectURL(blob);
59674
+ if (!objURL) throw ''
59675
+ const worker = new ${workerConstructor}(objURL, ${workerTypeOption});
59676
+ worker.addEventListener("error", () => {
59677
+ (window.URL || window.webkitURL).revokeObjectURL(objURL);
59678
+ });
59679
+ return worker;
59680
+ } catch(e) {
59681
+ return new ${workerConstructor}(
59682
+ "data:application/javascript;base64," + encodedJs,
59683
+ ${workerTypeOption}
59684
+ );
59685
+ }${
59686
+ // For module workers, we should not revoke the URL until the worker runs,
59687
+ // otherwise the worker fails to run
59688
+ workerType === 'classic'
59689
+ ? ` finally {
59690
+ objURL && (window.URL || window.webkitURL).revokeObjectURL(objURL);
59691
+ }`
59692
+ : ''}
59693
+ }`
59694
+ : `${encodedJs}
59695
+ export default function WorkerWrapper(options) {
59696
+ return new ${workerConstructor}(
59697
+ "data:application/javascript;base64," + encodedJs,
59698
+ ${workerTypeOption}
59699
+ );
59700
+ }
59701
+ `;
59702
+ return {
59703
+ code,
59704
+ // Empty sourcemap to suppress Rollup warning
59705
+ map: { mappings: '' },
59706
+ };
59707
+ }
59708
+ else {
59709
+ url = await workerFileToUrl(config, id, query);
59710
+ }
59711
+ }
59712
+ else {
59713
+ url = await fileToUrl$1(cleanUrl(id), config, this);
59714
+ url = injectQuery(url, WORKER_FILE_ID);
59715
+ url = injectQuery(url, `type=${workerType}`);
59716
+ }
59717
+ if (query.url != null) {
59718
+ return {
59719
+ code: `export default ${JSON.stringify(url)}`,
59720
+ map: { mappings: '' }, // Empty sourcemap to suppress Rollup warning
59721
+ };
59722
+ }
59723
+ return {
59724
+ code: `export default function WorkerWrapper(options) {
59725
+ return new ${workerConstructor}(
59726
+ ${JSON.stringify(url)},
59727
+ ${workerTypeOption}
59728
+ );
59729
+ }`,
59730
+ map: { mappings: '' }, // Empty sourcemap to suppress Rollup warning
59731
+ };
59732
+ },
59733
+ renderChunk(code, chunk, outputOptions) {
59734
+ let s;
59735
+ const result = () => {
59736
+ return (s && {
59737
+ code: s.toString(),
59738
+ map: config.build.sourcemap
59739
+ ? s.generateMap({ hires: 'boundary' })
59740
+ : null,
59741
+ });
59742
+ };
59743
+ if (code.match(workerAssetUrlRE)) {
59744
+ const toRelativeRuntime = createToImportMetaURLBasedRelativeRuntime(outputOptions.format, config.isWorker);
59745
+ let match;
59746
+ s = new MagicString(code);
59747
+ workerAssetUrlRE.lastIndex = 0;
59748
+ // Replace "__VITE_WORKER_ASSET__5aa0ddc0__" using relative paths
59749
+ const workerMap = workerCache.get(config.mainConfig || config);
59750
+ const { fileNameHash } = workerMap;
59751
+ while ((match = workerAssetUrlRE.exec(code))) {
59752
+ const [full, hash] = match;
59753
+ const filename = fileNameHash.get(hash);
59754
+ const replacement = toOutputFilePathInJS(filename, 'asset', chunk.fileName, 'js', config, toRelativeRuntime);
59755
+ const replacementString = typeof replacement === 'string'
59756
+ ? JSON.stringify(replacement).slice(1, -1)
59757
+ : `"+${replacement.runtime}+"`;
59758
+ s.update(match.index, match.index + full.length, replacementString);
59759
+ }
59760
+ }
59761
+ return result();
59762
+ },
59763
+ generateBundle(opts) {
59764
+ // @ts-expect-error asset emits are skipped in legacy bundle
59765
+ if (opts.__vite_skip_asset_emit__ || isWorker) {
59766
+ return;
59767
+ }
59768
+ const workerMap = workerCache.get(config);
59769
+ workerMap.assets.forEach((asset) => {
59770
+ this.emitFile(asset);
59771
+ workerMap.assets.delete(asset.fileName);
59772
+ });
59773
+ },
59774
+ };
59775
+ }
59776
+
59396
59777
  const debug$4 = createDebugger('vite:import-analysis');
59397
59778
  const clientDir = normalizePath$3(CLIENT_DIR);
59398
59779
  const skipRE = /\.(?:map|json)(?:$|\?)/;
@@ -59401,7 +59782,6 @@ const optimizedDepChunkRE$1 = /\/chunk-[A-Z\d]{8}\.js/;
59401
59782
  const optimizedDepDynamicRE$1 = /-[A-Z\d]{8}\.js/;
59402
59783
  const hasImportInQueryParamsRE = /[?&]import=?\b/;
59403
59784
  const hasViteIgnoreRE = /\/\*\s*@vite-ignore\s*\*\//;
59404
- const cleanUpRawUrlRE = /\/\*[\s\S]*?\*\/|([^\\:]|^)\/\/.*$/gm;
59405
59785
  const urlIsStringRE = /^(?:'.*'|".*"|`.*`)$/;
59406
59786
  const templateLiteralRE = /^\s*`(.*)`\s*$/;
59407
59787
  function isExplicitImportRequired(url) {
@@ -59531,7 +59911,8 @@ function importAnalysisPlugin(config) {
59531
59911
  try {
59532
59912
  [imports, exports] = parse$e(source);
59533
59913
  }
59534
- catch (e) {
59914
+ catch (_e) {
59915
+ const e = _e;
59535
59916
  const { message, showCodeFrame } = createParseErrorInfo(importer, source);
59536
59917
  this.error(message, showCodeFrame ? e.idx : undefined);
59537
59918
  }
@@ -59825,11 +60206,10 @@ function importAnalysisPlugin(config) {
59825
60206
  }
59826
60207
  }
59827
60208
  if (!ssr) {
59828
- const url = rawUrl.replace(cleanUpRawUrlRE, '').trim();
59829
- if (!urlIsStringRE.test(url) ||
59830
- isExplicitImportRequired(url.slice(1, -1))) {
60209
+ if (!urlIsStringRE.test(rawUrl) ||
60210
+ isExplicitImportRequired(rawUrl.slice(1, -1))) {
59831
60211
  needQueryInjectHelper = true;
59832
- str().overwrite(start, end, `__vite__injectQuery(${url}, 'import')`, { contentOnly: true });
60212
+ str().overwrite(start, end, `__vite__injectQuery(${rawUrl}, 'import')`, { contentOnly: true });
59833
60213
  }
59834
60214
  }
59835
60215
  }
@@ -59842,11 +60222,14 @@ function importAnalysisPlugin(config) {
59842
60222
  const staticImportedUrls = new Set(_orderedImportedUrls);
59843
60223
  const acceptedUrls = mergeAcceptedUrls(orderedAcceptedUrls);
59844
60224
  const acceptedExports = mergeAcceptedUrls(orderedAcceptedExports);
59845
- if (hasEnv) {
60225
+ // While we always expect to work with ESM, a classic worker is the only
60226
+ // case where it's not ESM and we need to avoid injecting ESM-specific code
60227
+ const isClassicWorker = importer.includes(WORKER_FILE_ID) && importer.includes('type=classic');
60228
+ if (hasEnv && !isClassicWorker) {
59846
60229
  // inject import.meta.env
59847
60230
  str().prepend(getEnv(ssr));
59848
60231
  }
59849
- if (hasHMR && !ssr) {
60232
+ if (hasHMR && !ssr && !isClassicWorker) {
59850
60233
  debugHmr?.(`${isSelfAccepting
59851
60234
  ? `[self-accepts]`
59852
60235
  : isPartiallySelfAccepting
@@ -59859,7 +60242,12 @@ function importAnalysisPlugin(config) {
59859
60242
  `import.meta.hot = __vite__createHotContext(${JSON.stringify(normalizeHmrUrl(importerModule.url))});`);
59860
60243
  }
59861
60244
  if (needQueryInjectHelper) {
59862
- str().prepend(`import { injectQuery as __vite__injectQuery } from "${clientPublicPath}";`);
60245
+ if (isClassicWorker) {
60246
+ str().append('\n' + __vite__injectQuery.toString());
60247
+ }
60248
+ else {
60249
+ str().prepend(`import { injectQuery as __vite__injectQuery } from "${clientPublicPath}";`);
60250
+ }
59863
60251
  }
59864
60252
  // normalize and rewrite accepted urls
59865
60253
  const normalizedAcceptedUrls = new Set();
@@ -60056,6 +60444,17 @@ function transformCjsImport(importExp, url, rawUrl, importIndex, importer, confi
60056
60444
  return lines.join('; ');
60057
60445
  }
60058
60446
  }
60447
+ // Copied from `client/client.ts`. Only needed so we can inline inject this function for classic workers.
60448
+ function __vite__injectQuery(url, queryToInject) {
60449
+ // skip urls that won't be handled by vite
60450
+ if (url[0] !== '.' && url[0] !== '/') {
60451
+ return url;
60452
+ }
60453
+ // can't use pathname from URL since it may be relative like ../
60454
+ const pathname = url.replace(/[?#].*$/s, '');
60455
+ const { search, hash } = new URL(url, 'http://vitejs.dev');
60456
+ return `${pathname}?${queryToInject}${search ? `&` + search.slice(1) : ''}${hash || ''}`;
60457
+ }
60059
60458
 
60060
60459
  // ids in transform are normalized to unix style
60061
60460
  const normalizedClientEntry = normalizePath$3(CLIENT_ENTRY);
@@ -60234,324 +60633,6 @@ const wasmFallbackPlugin = () => {
60234
60633
  };
60235
60634
  };
60236
60635
 
60237
- const WORKER_FILE_ID = 'worker_file';
60238
- const workerCache = new WeakMap();
60239
- function saveEmitWorkerAsset(config, asset) {
60240
- const fileName = asset.fileName;
60241
- const workerMap = workerCache.get(config.mainConfig || config);
60242
- workerMap.assets.set(fileName, asset);
60243
- }
60244
- async function bundleWorkerEntry(config, id, query) {
60245
- // bundle the file as entry to support imports
60246
- const { rollup } = await import('rollup');
60247
- const { plugins, rollupOptions, format } = config.worker;
60248
- const bundle = await rollup({
60249
- ...rollupOptions,
60250
- input: cleanUrl(id),
60251
- plugins: await plugins(),
60252
- onwarn(warning, warn) {
60253
- onRollupWarning(warning, warn, config);
60254
- },
60255
- preserveEntrySignatures: false,
60256
- });
60257
- let chunk;
60258
- try {
60259
- const workerOutputConfig = config.worker.rollupOptions.output;
60260
- const workerConfig = workerOutputConfig
60261
- ? Array.isArray(workerOutputConfig)
60262
- ? workerOutputConfig[0] || {}
60263
- : workerOutputConfig
60264
- : {};
60265
- const { output: [outputChunk, ...outputChunks], } = await bundle.generate({
60266
- entryFileNames: path$o.posix.join(config.build.assetsDir, '[name]-[hash].js'),
60267
- chunkFileNames: path$o.posix.join(config.build.assetsDir, '[name]-[hash].js'),
60268
- assetFileNames: path$o.posix.join(config.build.assetsDir, '[name]-[hash].[ext]'),
60269
- ...workerConfig,
60270
- format,
60271
- sourcemap: config.build.sourcemap,
60272
- });
60273
- chunk = outputChunk;
60274
- outputChunks.forEach((outputChunk) => {
60275
- if (outputChunk.type === 'asset') {
60276
- saveEmitWorkerAsset(config, outputChunk);
60277
- }
60278
- else if (outputChunk.type === 'chunk') {
60279
- saveEmitWorkerAsset(config, {
60280
- fileName: outputChunk.fileName,
60281
- source: outputChunk.code,
60282
- type: 'asset',
60283
- });
60284
- }
60285
- });
60286
- }
60287
- finally {
60288
- await bundle.close();
60289
- }
60290
- return emitSourcemapForWorkerEntry(config, query, chunk);
60291
- }
60292
- function emitSourcemapForWorkerEntry(config, query, chunk) {
60293
- const { map: sourcemap } = chunk;
60294
- if (sourcemap) {
60295
- if (config.build.sourcemap === 'hidden' ||
60296
- config.build.sourcemap === true) {
60297
- const data = sourcemap.toString();
60298
- const mapFileName = chunk.fileName + '.map';
60299
- saveEmitWorkerAsset(config, {
60300
- fileName: mapFileName,
60301
- type: 'asset',
60302
- source: data,
60303
- });
60304
- }
60305
- }
60306
- return chunk;
60307
- }
60308
- const workerAssetUrlRE = /__VITE_WORKER_ASSET__([a-z\d]{8})__/g;
60309
- function encodeWorkerAssetFileName(fileName, workerCache) {
60310
- const { fileNameHash } = workerCache;
60311
- const hash = getHash(fileName);
60312
- if (!fileNameHash.get(hash)) {
60313
- fileNameHash.set(hash, fileName);
60314
- }
60315
- return `__VITE_WORKER_ASSET__${hash}__`;
60316
- }
60317
- async function workerFileToUrl(config, id, query) {
60318
- const workerMap = workerCache.get(config.mainConfig || config);
60319
- let fileName = workerMap.bundle.get(id);
60320
- if (!fileName) {
60321
- const outputChunk = await bundleWorkerEntry(config, id, query);
60322
- fileName = outputChunk.fileName;
60323
- saveEmitWorkerAsset(config, {
60324
- fileName,
60325
- source: outputChunk.code,
60326
- type: 'asset',
60327
- });
60328
- workerMap.bundle.set(id, fileName);
60329
- }
60330
- return encodeWorkerAssetFileName(fileName, workerMap);
60331
- }
60332
- function webWorkerPostPlugin() {
60333
- return {
60334
- name: 'vite:worker-post',
60335
- resolveImportMeta(property, { chunkId, format }) {
60336
- // document is undefined in the worker, so we need to avoid it in iife
60337
- if (property === 'url' && format === 'iife') {
60338
- return 'self.location.href';
60339
- }
60340
- return null;
60341
- },
60342
- };
60343
- }
60344
- function webWorkerPlugin(config) {
60345
- const isBuild = config.command === 'build';
60346
- let server;
60347
- const isWorker = config.isWorker;
60348
- const isWorkerQueryId = (id) => {
60349
- const parsedQuery = parseRequest(id);
60350
- if (parsedQuery &&
60351
- (parsedQuery.worker ?? parsedQuery.sharedworker) != null) {
60352
- return true;
60353
- }
60354
- return false;
60355
- };
60356
- return {
60357
- name: 'vite:worker',
60358
- configureServer(_server) {
60359
- server = _server;
60360
- },
60361
- buildStart() {
60362
- if (isWorker) {
60363
- return;
60364
- }
60365
- workerCache.set(config, {
60366
- assets: new Map(),
60367
- bundle: new Map(),
60368
- fileNameHash: new Map(),
60369
- });
60370
- },
60371
- load(id) {
60372
- if (isBuild && isWorkerQueryId(id)) {
60373
- return '';
60374
- }
60375
- },
60376
- shouldTransformCachedModule({ id }) {
60377
- if (isBuild && config.build.watch && isWorkerQueryId(id)) {
60378
- return true;
60379
- }
60380
- },
60381
- async transform(raw, id, options) {
60382
- const ssr = options?.ssr === true;
60383
- const query = parseRequest(id);
60384
- if (query && query[WORKER_FILE_ID] != null) {
60385
- // if import worker by worker constructor will have query.type
60386
- // other type will be import worker by esm
60387
- const workerType = query['type'];
60388
- let injectEnv = '';
60389
- const scriptPath = JSON.stringify(path$o.posix.join(config.base, ENV_PUBLIC_PATH));
60390
- if (workerType === 'classic') {
60391
- injectEnv = `importScripts(${scriptPath})\n`;
60392
- }
60393
- else if (workerType === 'module') {
60394
- injectEnv = `import ${scriptPath}\n`;
60395
- }
60396
- else if (workerType === 'ignore') {
60397
- if (isBuild) {
60398
- injectEnv = '';
60399
- }
60400
- else if (server) {
60401
- // dynamic worker type we can't know how import the env
60402
- // so we copy /@vite/env code of server transform result into file header
60403
- const { moduleGraph } = server;
60404
- const module = moduleGraph.getModuleById(ENV_ENTRY);
60405
- injectEnv = module?.transformResult?.code || '';
60406
- }
60407
- }
60408
- if (injectEnv) {
60409
- const s = new MagicString(raw);
60410
- s.prepend(injectEnv);
60411
- return {
60412
- code: s.toString(),
60413
- map: s.generateMap({ hires: 'boundary' }),
60414
- };
60415
- }
60416
- return;
60417
- }
60418
- if (query == null ||
60419
- (query && (query.worker ?? query.sharedworker) == null)) {
60420
- return;
60421
- }
60422
- // stringified url or `new URL(...)`
60423
- let url;
60424
- const { format } = config.worker;
60425
- const workerConstructor = query.sharedworker != null ? 'SharedWorker' : 'Worker';
60426
- const workerType = isBuild
60427
- ? format === 'es'
60428
- ? 'module'
60429
- : 'classic'
60430
- : 'module';
60431
- const workerTypeOption = `{
60432
- ${workerType === 'module' ? `type: "module",` : ''}
60433
- name: options?.name
60434
- }`;
60435
- if (isBuild) {
60436
- getDepsOptimizer(config, ssr)?.registerWorkersSource(id);
60437
- if (query.inline != null) {
60438
- const chunk = await bundleWorkerEntry(config, id, query);
60439
- const encodedJs = `const encodedJs = "${Buffer.from(chunk.code).toString('base64')}";`;
60440
- const code =
60441
- // Using blob URL for SharedWorker results in multiple instances of a same worker
60442
- workerConstructor === 'Worker'
60443
- ? `${encodedJs}
60444
- const blob = typeof window !== "undefined" && window.Blob && new Blob([${workerType === 'classic'
60445
- ? ''
60446
- : // `URL` is always available, in `Worker[type="module"]`
60447
- `'URL.revokeObjectURL(import.meta.url);'+`}atob(encodedJs)], { type: "text/javascript;charset=utf-8" });
60448
- export default function WorkerWrapper(options) {
60449
- let objURL;
60450
- try {
60451
- objURL = blob && (window.URL || window.webkitURL).createObjectURL(blob);
60452
- if (!objURL) throw ''
60453
- const worker = new ${workerConstructor}(objURL, ${workerTypeOption});
60454
- worker.addEventListener("error", () => {
60455
- (window.URL || window.webkitURL).revokeObjectURL(objURL);
60456
- });
60457
- return worker;
60458
- } catch(e) {
60459
- return new ${workerConstructor}(
60460
- "data:application/javascript;base64," + encodedJs,
60461
- ${workerTypeOption}
60462
- );
60463
- }${
60464
- // For module workers, we should not revoke the URL until the worker runs,
60465
- // otherwise the worker fails to run
60466
- workerType === 'classic'
60467
- ? ` finally {
60468
- objURL && (window.URL || window.webkitURL).revokeObjectURL(objURL);
60469
- }`
60470
- : ''}
60471
- }`
60472
- : `${encodedJs}
60473
- export default function WorkerWrapper(options) {
60474
- return new ${workerConstructor}(
60475
- "data:application/javascript;base64," + encodedJs,
60476
- ${workerTypeOption}
60477
- );
60478
- }
60479
- `;
60480
- return {
60481
- code,
60482
- // Empty sourcemap to suppress Rollup warning
60483
- map: { mappings: '' },
60484
- };
60485
- }
60486
- else {
60487
- url = await workerFileToUrl(config, id, query);
60488
- }
60489
- }
60490
- else {
60491
- url = await fileToUrl$1(cleanUrl(id), config, this);
60492
- url = injectQuery(url, WORKER_FILE_ID);
60493
- url = injectQuery(url, `type=${workerType}`);
60494
- }
60495
- if (query.url != null) {
60496
- return {
60497
- code: `export default ${JSON.stringify(url)}`,
60498
- map: { mappings: '' }, // Empty sourcemap to suppress Rollup warning
60499
- };
60500
- }
60501
- return {
60502
- code: `export default function WorkerWrapper(options) {
60503
- return new ${workerConstructor}(
60504
- ${JSON.stringify(url)},
60505
- ${workerTypeOption}
60506
- );
60507
- }`,
60508
- map: { mappings: '' }, // Empty sourcemap to suppress Rollup warning
60509
- };
60510
- },
60511
- renderChunk(code, chunk, outputOptions) {
60512
- let s;
60513
- const result = () => {
60514
- return (s && {
60515
- code: s.toString(),
60516
- map: config.build.sourcemap
60517
- ? s.generateMap({ hires: 'boundary' })
60518
- : null,
60519
- });
60520
- };
60521
- if (code.match(workerAssetUrlRE)) {
60522
- const toRelativeRuntime = createToImportMetaURLBasedRelativeRuntime(outputOptions.format, config.isWorker);
60523
- let match;
60524
- s = new MagicString(code);
60525
- workerAssetUrlRE.lastIndex = 0;
60526
- // Replace "__VITE_WORKER_ASSET__5aa0ddc0__" using relative paths
60527
- const workerMap = workerCache.get(config.mainConfig || config);
60528
- const { fileNameHash } = workerMap;
60529
- while ((match = workerAssetUrlRE.exec(code))) {
60530
- const [full, hash] = match;
60531
- const filename = fileNameHash.get(hash);
60532
- const replacement = toOutputFilePathInJS(filename, 'asset', chunk.fileName, 'js', config, toRelativeRuntime);
60533
- const replacementString = typeof replacement === 'string'
60534
- ? JSON.stringify(replacement).slice(1, -1)
60535
- : `"+${replacement.runtime}+"`;
60536
- s.update(match.index, match.index + full.length, replacementString);
60537
- }
60538
- }
60539
- return result();
60540
- },
60541
- generateBundle(opts) {
60542
- // @ts-expect-error asset emits are skipped in legacy bundle
60543
- if (opts.__vite_skip_asset_emit__ || isWorker) {
60544
- return;
60545
- }
60546
- const workerMap = workerCache.get(config);
60547
- workerMap.assets.forEach((asset) => {
60548
- this.emitFile(asset);
60549
- workerMap.assets.delete(asset.fileName);
60550
- });
60551
- },
60552
- };
60553
- }
60554
-
60555
60636
  /**
60556
60637
  * A plugin to avoid an aliased AND optimized dep from being aliased in src
60557
60638
  */
@@ -61225,13 +61306,7 @@ function dynamicImportVarsPlugin(config) {
61225
61306
  s ||= new MagicString(source);
61226
61307
  let result;
61227
61308
  try {
61228
- // When import string is using backticks, es-module-lexer `end` captures
61229
- // until the closing parenthesis, instead of the closing backtick.
61230
- // There may be inline comments between the backtick and the closing
61231
- // parenthesis, so we manually remove them for now.
61232
- // See https://github.com/guybedford/es-module-lexer/issues/118
61233
- const importSource = removeComments(source.slice(start, end)).trim();
61234
- result = await transformDynamicImport(importSource, importer, resolve, config.root);
61309
+ result = await transformDynamicImport(source.slice(start, end), importer, resolve, config.root);
61235
61310
  }
61236
61311
  catch (error) {
61237
61312
  if (warnOnError) {
@@ -61860,6 +61935,9 @@ async function createPluginContainer(config, moduleGraph, watcher) {
61860
61935
  return result;
61861
61936
  }
61862
61937
  }
61938
+ watchFiles.add(id);
61939
+ if (watcher)
61940
+ ensureWatchedFile(watcher, id, root);
61863
61941
  return null;
61864
61942
  },
61865
61943
  async transform(code, id, options) {
@@ -61922,9 +62000,6 @@ async function createPluginContainer(config, moduleGraph, watcher) {
61922
62000
  await hookParallel('buildEnd', () => ctx, () => []);
61923
62001
  await hookParallel('closeBundle', () => ctx, () => []);
61924
62002
  },
61925
- [ASYNC_DISPOSE]() {
61926
- return this.close();
61927
- },
61928
62003
  };
61929
62004
  return container;
61930
62005
  }
@@ -62638,9 +62713,6 @@ async function createDepsOptimizer(config, server) {
62638
62713
  resetRegisteredIds,
62639
62714
  ensureFirstRun,
62640
62715
  close,
62641
- [ASYNC_DISPOSE]() {
62642
- return this.close();
62643
- },
62644
62716
  options: getDepOptimizationConfig(config, ssr),
62645
62717
  };
62646
62718
  depsOptimizerMap.set(config, depsOptimizer);
@@ -63175,7 +63247,6 @@ async function createDevSsrDepsOptimizer(config) {
63175
63247
  resetRegisteredIds: () => { },
63176
63248
  ensureFirstRun: () => { },
63177
63249
  close: async () => { },
63178
- [ASYNC_DISPOSE]: async () => { },
63179
63250
  options: config.ssr.optimizeDeps,
63180
63251
  };
63181
63252
  devSsrDepsOptimizerMap.set(config, depsOptimizer);
@@ -64191,7 +64262,8 @@ function buildImportAnalysisPlugin(config) {
64191
64262
  try {
64192
64263
  imports = parse$e(source)[0];
64193
64264
  }
64194
- catch (e) {
64265
+ catch (_e) {
64266
+ const e = _e;
64195
64267
  const { message, showCodeFrame } = createParseErrorInfo(importer, source);
64196
64268
  this.error(message, showCodeFrame ? e.idx : undefined);
64197
64269
  }
@@ -64580,7 +64652,8 @@ function ssrManifestPlugin(config) {
64580
64652
  try {
64581
64653
  imports = parse$e(code)[0].filter((i) => i.n && i.d > -1);
64582
64654
  }
64583
- catch (e) {
64655
+ catch (_e) {
64656
+ const e = _e;
64584
64657
  const loc = numberToPos(code, e.idx);
64585
64658
  this.error({
64586
64659
  name: e.name,
@@ -64830,6 +64903,16 @@ async function build(inlineConfig = {}) {
64830
64903
  throw new Error(`rollupOptions.input should not be an html file when building for SSR. ` +
64831
64904
  `Please specify a dedicated SSR entry.`);
64832
64905
  }
64906
+ if (config.build.cssCodeSplit === false) {
64907
+ const inputs = typeof input === 'string'
64908
+ ? [input]
64909
+ : Array.isArray(input)
64910
+ ? input
64911
+ : Object.values(input);
64912
+ if (inputs.some((input) => input.endsWith('.css'))) {
64913
+ throw new Error(`When "build.cssCodeSplit: false" is set, "rollupOptions.input" should not include CSS files.`);
64914
+ }
64915
+ }
64833
64916
  const outDir = resolve(options.outDir);
64834
64917
  // inject ssr arg to plugin load/transform hooks
64835
64918
  const plugins = (ssr ? config.plugins.map((p) => injectSsrFlagToHooks(p)) : config.plugins);
@@ -64859,6 +64942,7 @@ async function build(inlineConfig = {}) {
64859
64942
  if (e.frame) {
64860
64943
  msg += `\n` + colors$1.yellow(e.frame);
64861
64944
  }
64945
+ clearLine();
64862
64946
  config.logger.error(msg, { error: e });
64863
64947
  };
64864
64948
  let bundle;
@@ -64870,6 +64954,14 @@ async function build(inlineConfig = {}) {
64870
64954
  `This is deprecated and will override all Vite.js default output options. ` +
64871
64955
  `Please use "rollupOptions.output" instead.`);
64872
64956
  }
64957
+ if (output.file) {
64958
+ throw new Error(`Vite does not support "rollupOptions.output.file". ` +
64959
+ `Please use "rollupOptions.output.dir" and "rollupOptions.output.entryFileNames" instead.`);
64960
+ }
64961
+ if (output.sourcemap) {
64962
+ config.logger.warnOnce(colors$1.yellow(`Vite does not support "rollupOptions.output.sourcemap". ` +
64963
+ `Please use "build.sourcemap" instead.`));
64964
+ }
64873
64965
  const ssrNodeBuild = ssr && config.ssr.target === 'node';
64874
64966
  const ssrWorkerBuild = ssr && config.ssr.target === 'webworker';
64875
64967
  const format = output.format || 'es';
@@ -65072,6 +65164,13 @@ const dynamicImportWarningIgnoreList = [
65072
65164
  `Unsupported expression`,
65073
65165
  `statically analyzed`,
65074
65166
  ];
65167
+ function clearLine() {
65168
+ const tty = process.stdout.isTTY && !process.env.CI;
65169
+ if (tty) {
65170
+ process.stdout.clearLine(0);
65171
+ process.stdout.cursorTo(0);
65172
+ }
65173
+ }
65075
65174
  function onRollupWarning(warning, warn, config) {
65076
65175
  const viteWarn = (warnLog) => {
65077
65176
  let warning;
@@ -65109,11 +65208,7 @@ function onRollupWarning(warning, warn, config) {
65109
65208
  }
65110
65209
  warn(warnLog);
65111
65210
  };
65112
- const tty = process.stdout.isTTY && !process.env.CI;
65113
- if (tty) {
65114
- process.stdout.clearLine(0);
65115
- process.stdout.cursorTo(0);
65116
- }
65211
+ clearLine();
65117
65212
  const userOnWarn = config.build.rollupOptions?.onwarn;
65118
65213
  if (userOnWarn) {
65119
65214
  userOnWarn(warning, viteWarn);