vite 6.2.0 → 6.2.1

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.

Potentially problematic release.


This version of vite might be problematic. Click here for more details.

@@ -8,7 +8,7 @@ import { performance as performance$1 } from 'node:perf_hooks';
8
8
  import require$$0$6, { createRequire as createRequire$1, builtinModules } from 'node:module';
9
9
  import crypto$2 from 'node:crypto';
10
10
  import esbuild, { transform as transform$1, formatMessages, build as build$b } from 'esbuild';
11
- import { CLIENT_ENTRY, wildcardHosts, loopbackHosts, OPTIMIZABLE_ENTRY_RE, FS_PREFIX, CLIENT_PUBLIC_PATH, ENV_PUBLIC_PATH, DEFAULT_ASSETS_INLINE_LIMIT, ENV_ENTRY, DEP_VERSION_RE, SPECIAL_QUERY_RE, DEV_PROD_CONDITION, KNOWN_ASSET_TYPES, JS_TYPES_RE, CSS_LANGS_RE, METADATA_FILENAME, ESBUILD_MODULES_TARGET, ERR_OPTIMIZE_DEPS_PROCESSING_ERROR, ERR_FILE_NOT_FOUND_IN_OPTIMIZED_DEP_DIR, VITE_PACKAGE_DIR, defaultAllowedOrigins, DEFAULT_DEV_PORT, CLIENT_DIR, VERSION, ROLLUP_HOOKS, DEFAULT_PREVIEW_PORT, DEFAULT_ASSETS_RE, DEFAULT_CONFIG_FILES, DEFAULT_CLIENT_CONDITIONS, DEFAULT_SERVER_CONDITIONS, DEFAULT_CLIENT_MAIN_FIELDS, DEFAULT_SERVER_MAIN_FIELDS } from '../constants.js';
11
+ import { CLIENT_ENTRY, wildcardHosts, loopbackHosts, OPTIMIZABLE_ENTRY_RE, FS_PREFIX, CLIENT_PUBLIC_PATH, ENV_PUBLIC_PATH, DEFAULT_ASSETS_INLINE_LIMIT, SPECIAL_QUERY_RE, KNOWN_ASSET_TYPES, JS_TYPES_RE, CSS_LANGS_RE, METADATA_FILENAME, ESBUILD_MODULES_TARGET, ENV_ENTRY, DEP_VERSION_RE, DEV_PROD_CONDITION, ERR_OPTIMIZE_DEPS_PROCESSING_ERROR, ERR_FILE_NOT_FOUND_IN_OPTIMIZED_DEP_DIR, VITE_PACKAGE_DIR, defaultAllowedOrigins, DEFAULT_DEV_PORT, CLIENT_DIR, VERSION, ROLLUP_HOOKS, DEFAULT_PREVIEW_PORT, DEFAULT_ASSETS_RE, DEFAULT_CONFIG_FILES, DEFAULT_CLIENT_CONDITIONS, DEFAULT_SERVER_CONDITIONS, DEFAULT_CLIENT_MAIN_FIELDS, DEFAULT_SERVER_MAIN_FIELDS } from '../constants.js';
12
12
  import require$$0$2, { posix, isAbsolute, resolve as resolve$3, win32, relative as relative$1, join, dirname as dirname$1, extname, basename as basename$1, sep } from 'path';
13
13
  import require$$0$3, { statSync, existsSync, readFileSync, readdirSync } from 'fs';
14
14
  import childProcess$2, { exec, execFile, execSync } from 'node:child_process';
@@ -28,10 +28,10 @@ import net$1 from 'node:net';
28
28
  import { promises } from 'node:dns';
29
29
  import { ModuleRunner, ESModulesEvaluator } from 'vite/module-runner';
30
30
  import { parseAstAsync, parseAst } from 'rollup/parseAst';
31
+ import { Buffer as Buffer$1 } from 'node:buffer';
31
32
  import { createRequire as createRequire$2 } from 'module';
32
33
  import readline from 'node:readline';
33
34
  import process$1 from 'node:process';
34
- import { Buffer as Buffer$1 } from 'node:buffer';
35
35
  import { EventEmitter as EventEmitter$4 } from 'node:events';
36
36
  import require$$3 from 'crypto';
37
37
  import assert$1 from 'node:assert';
@@ -10154,6 +10154,7 @@ function combineSourcemaps(filename, sourcemapList) {
10154
10154
  }
10155
10155
  return newSourcemaps;
10156
10156
  });
10157
+ const escapedFilename = escapeToLinuxLikePath(filename);
10157
10158
  let map;
10158
10159
  let mapIndex = 1;
10159
10160
  const useArrayInterface = sourcemapList.slice(0, -1).find((m) => m.sources.length !== 1) === void 0;
@@ -10161,12 +10162,11 @@ function combineSourcemaps(filename, sourcemapList) {
10161
10162
  map = remapping(sourcemapList, () => null);
10162
10163
  } else {
10163
10164
  map = remapping(sourcemapList[0], function loader(sourcefile) {
10164
- const mapForSources = sourcemapList.slice(mapIndex).find((s) => s.sources.includes(sourcefile));
10165
- if (mapForSources) {
10166
- mapIndex++;
10167
- return mapForSources;
10165
+ if (sourcefile === escapedFilename && sourcemapList[mapIndex]) {
10166
+ return sourcemapList[mapIndex++];
10167
+ } else {
10168
+ return null;
10168
10169
  }
10169
- return null;
10170
10170
  });
10171
10171
  }
10172
10172
  if (!map.file) {
@@ -10448,7 +10448,7 @@ function normalizeSingleAlias({
10448
10448
  replacement,
10449
10449
  customResolver
10450
10450
  }) {
10451
- if (typeof find === "string" && find[find.length - 1] === "/" && replacement[replacement.length - 1] === "/") {
10451
+ if (typeof find === "string" && find.endsWith("/") && replacement.endsWith("/")) {
10452
10452
  find = find.slice(0, find.length - 1);
10453
10453
  replacement = replacement.slice(0, replacement.length - 1);
10454
10454
  }
@@ -10500,7 +10500,7 @@ function joinUrlSegments(a, b) {
10500
10500
  if (!a || !b) {
10501
10501
  return a || b || "";
10502
10502
  }
10503
- if (a[a.length - 1] === "/") {
10503
+ if (a.endsWith("/")) {
10504
10504
  a = a.substring(0, a.length - 1);
10505
10505
  }
10506
10506
  if (b[0] !== "/") {
@@ -10880,9 +10880,9 @@ function buildReporterPlugin(config) {
10880
10880
  return {
10881
10881
  name: chunk.fileName,
10882
10882
  group: "JS",
10883
- size: chunk.code.length,
10883
+ size: Buffer.byteLength(chunk.code),
10884
10884
  compressedSize: await getCompressedSize(chunk.code),
10885
- mapSize: chunk.map ? chunk.map.toString().length : null
10885
+ mapSize: chunk.map ? Buffer.byteLength(chunk.map.toString()) : null
10886
10886
  };
10887
10887
  } else {
10888
10888
  if (chunk.fileName.endsWith(".map")) return null;
@@ -10891,7 +10891,7 @@ function buildReporterPlugin(config) {
10891
10891
  return {
10892
10892
  name: chunk.fileName,
10893
10893
  group: isCSS ? "CSS" : "Assets",
10894
- size: chunk.source.length,
10894
+ size: Buffer.byteLength(chunk.source),
10895
10895
  mapSize: null,
10896
10896
  // Rollup doesn't support CSS maps?
10897
10897
  compressedSize: isCompressible ? await getCompressedSize(chunk.source) : null
@@ -15467,6 +15467,94 @@ function alias$1(options = {}) {
15467
15467
  };
15468
15468
  }
15469
15469
 
15470
+ const jsonExtRE = /\.json(?:$|\?)(?!commonjs-(?:proxy|external))/;
15471
+ const jsonObjRE = /^\s*\{/;
15472
+ const jsonLangs = `\\.(?:json|json5)(?:$|\\?)`;
15473
+ const jsonLangRE = new RegExp(jsonLangs);
15474
+ const isJSONRequest = (request) => jsonLangRE.test(request);
15475
+ function jsonPlugin(options, isBuild) {
15476
+ return {
15477
+ name: "vite:json",
15478
+ transform(json, id) {
15479
+ if (!jsonExtRE.test(id)) return null;
15480
+ if (SPECIAL_QUERY_RE.test(id)) return null;
15481
+ if (inlineRE$2.test(id) || noInlineRE.test(id)) {
15482
+ this.warn(
15483
+ `
15484
+ Using ?inline or ?no-inline for JSON imports will have no effect.
15485
+ Please use ?url&inline or ?url&no-inline to control JSON file inlining behavior.
15486
+ `
15487
+ );
15488
+ }
15489
+ json = stripBomTag(json);
15490
+ try {
15491
+ if (options.stringify !== false) {
15492
+ if (options.namedExports && jsonObjRE.test(json)) {
15493
+ const parsed = JSON.parse(json);
15494
+ const keys = Object.keys(parsed);
15495
+ let code = "";
15496
+ let defaultObjectCode = "{\n";
15497
+ for (const key of keys) {
15498
+ if (key === makeLegalIdentifier(key)) {
15499
+ code += `export const ${key} = ${serializeValue(parsed[key])};
15500
+ `;
15501
+ defaultObjectCode += ` ${key},
15502
+ `;
15503
+ } else {
15504
+ defaultObjectCode += ` ${JSON.stringify(key)}: ${serializeValue(parsed[key])},
15505
+ `;
15506
+ }
15507
+ }
15508
+ defaultObjectCode += "}";
15509
+ code += `export default ${defaultObjectCode};
15510
+ `;
15511
+ return {
15512
+ code,
15513
+ map: { mappings: "" }
15514
+ };
15515
+ }
15516
+ if (options.stringify === true || // use 10kB as a threshold for 'auto'
15517
+ // https://v8.dev/blog/cost-of-javascript-2019#:~:text=A%20good%20rule%20of%20thumb%20is%20to%20apply%20this%20technique%20for%20objects%20of%2010%20kB%20or%20larger
15518
+ json.length > 10 * 1e3) {
15519
+ if (isBuild) {
15520
+ json = JSON.stringify(JSON.parse(json));
15521
+ }
15522
+ return {
15523
+ code: `export default /* #__PURE__ */ JSON.parse(${JSON.stringify(json)})`,
15524
+ map: { mappings: "" }
15525
+ };
15526
+ }
15527
+ }
15528
+ return {
15529
+ code: dataToEsm(JSON.parse(json), {
15530
+ preferConst: true,
15531
+ namedExports: options.namedExports
15532
+ }),
15533
+ map: { mappings: "" }
15534
+ };
15535
+ } catch (e) {
15536
+ const position = extractJsonErrorPosition(e.message, json.length);
15537
+ const msg = position ? `, invalid JSON syntax found at position ${position}` : `.`;
15538
+ this.error(`Failed to parse JSON file` + msg, position);
15539
+ }
15540
+ }
15541
+ };
15542
+ }
15543
+ function serializeValue(value) {
15544
+ const valueAsString = JSON.stringify(value);
15545
+ if (typeof value === "object" && value != null && valueAsString.length > 10 * 1e3) {
15546
+ return `/* #__PURE__ */ JSON.parse(${JSON.stringify(valueAsString)})`;
15547
+ }
15548
+ return valueAsString;
15549
+ }
15550
+ function extractJsonErrorPosition(errorMessage, inputLength) {
15551
+ if (errorMessage.startsWith("Unexpected end of JSON input")) {
15552
+ return inputLength - 1;
15553
+ }
15554
+ const errorMessageList = /at position (\d+)/.exec(errorMessage);
15555
+ return errorMessageList ? Math.max(parseInt(errorMessageList[1], 10) - 1, 0) : void 0;
15556
+ }
15557
+
15470
15558
  function e(e,n,r){throw new Error(r?`No known conditions for "${n}" specifier in "${e}" package`:`Missing "${n}" specifier in "${e}" package`)}function n(n,i,o,f){let s,u,l=r(n,o),c=function(e){let n=new Set(["default",...e.conditions||[]]);return e.unsafe||n.add(e.require?"require":"import"),e.unsafe||n.add(e.browser?"browser":"node"),n}(f||{}),a=i[l];if(void 0===a){let e,n,r,t;for(t in i)n&&t.length<n.length||("/"===t[t.length-1]&&l.startsWith(t)?(u=l.substring(t.length),n=t):t.length>1&&(r=t.indexOf("*",1),~r&&(e=RegExp("^"+t.substring(0,r)+"(.*)"+t.substring(1+r)+"$").exec(l),e&&e[1]&&(u=e[1],n=t))));a=i[n];}return a||e(n,l),s=t(a,c),s||e(n,l,1),u&&function(e,n){let r,t=0,i=e.length,o=/[*]/g,f=/[/]$/;for(;t<i;t++)e[t]=o.test(r=e[t])?r.replace(o,n):f.test(r)?r+n:r;}(s,u),s}function r(e,n,r){if(e===n||"."===n)return ".";let t=e+"/",i=t.length,o=n.slice(0,i)===t,f=o?n.slice(i):n;return "#"===f[0]?f:"./"===f.slice(0,2)?f:"./"+f}function t(e,n,r){if(e){if("string"==typeof e)return r&&r.add(e),[e];let i,o;if(Array.isArray(e)){for(o=r||new Set,i=0;i<e.length;i++)t(e[i],n,o);if(!r&&o.size)return [...o]}else for(i in e)if(n.has(i))return t(e[i],n,r)}}function o(e,r,t){let i,o=e.exports;if(o){if("string"==typeof o)o={".":o};else for(i in o){"."!==i[0]&&(o={".":o});break}return n(e.name,o,r||".",t)}}function f(e,r,t){if(e.imports)return n(e.name,e.imports,r,t)}
15471
15559
 
15472
15560
  const HASH_RE = /#/g;
@@ -16042,1155 +16130,372 @@ function hasESMSyntax(code, opts = {}) {
16042
16130
  return ESM_RE.test(code);
16043
16131
  }
16044
16132
 
16045
- const debug$g = createDebugger("vite:external");
16046
- const isExternalCache = /* @__PURE__ */ new WeakMap();
16047
- function shouldExternalize(environment, id, importer) {
16048
- let isExternal = isExternalCache.get(environment);
16049
- if (!isExternal) {
16050
- isExternal = createIsExternal(environment);
16051
- isExternalCache.set(environment, isExternal);
16052
- }
16053
- return isExternal(id, importer);
16054
- }
16055
- const isConfiguredAsExternalCache = /* @__PURE__ */ new WeakMap();
16056
- function isConfiguredAsExternal(environment, id, importer) {
16057
- let isExternal = isConfiguredAsExternalCache.get(environment);
16058
- if (!isExternal) {
16059
- isExternal = createIsConfiguredAsExternal(environment);
16060
- isConfiguredAsExternalCache.set(environment, isExternal);
16061
- }
16062
- return isExternal(id, importer);
16063
- }
16064
- function createIsConfiguredAsExternal(environment) {
16065
- const { config } = environment;
16066
- const { root, resolve } = config;
16067
- const { external, noExternal } = resolve;
16068
- const noExternalFilter = typeof noExternal !== "boolean" && !(Array.isArray(noExternal) && noExternal.length === 0) && createFilter(void 0, noExternal, { resolve: false });
16069
- const targetConditions = resolve.externalConditions;
16070
- const resolveOptions = {
16071
- ...resolve,
16072
- root,
16073
- isProduction: false,
16074
- isBuild: true,
16075
- conditions: targetConditions
16076
- };
16077
- const isExternalizable = (id, importer, configuredAsExternal) => {
16078
- if (!bareImportRE.test(id) || id.includes("\0")) {
16079
- return false;
16133
+ const externalWithConversionNamespace = "vite:dep-pre-bundle:external-conversion";
16134
+ const convertedExternalPrefix = "vite-dep-pre-bundle-external:";
16135
+ const cjsExternalFacadeNamespace = "vite:cjs-external-facade";
16136
+ const nonFacadePrefix = "vite-cjs-external-facade:";
16137
+ const externalTypes = [
16138
+ "css",
16139
+ // supported pre-processor types
16140
+ "less",
16141
+ "sass",
16142
+ "scss",
16143
+ "styl",
16144
+ "stylus",
16145
+ "pcss",
16146
+ "postcss",
16147
+ // wasm
16148
+ "wasm",
16149
+ // known SFC types
16150
+ "vue",
16151
+ "svelte",
16152
+ "marko",
16153
+ "astro",
16154
+ "imba",
16155
+ // JSX/TSX may be configured to be compiled differently from how esbuild
16156
+ // handles it by default, so exclude them as well
16157
+ "jsx",
16158
+ "tsx",
16159
+ ...KNOWN_ASSET_TYPES
16160
+ ];
16161
+ function esbuildDepPlugin(environment, qualified, external) {
16162
+ const { isProduction } = environment.config;
16163
+ const { extensions } = environment.config.optimizeDeps;
16164
+ const allExternalTypes = extensions ? externalTypes.filter((type) => !extensions.includes("." + type)) : externalTypes;
16165
+ const esmPackageCache = /* @__PURE__ */ new Map();
16166
+ const cjsPackageCache = /* @__PURE__ */ new Map();
16167
+ const _resolve = createBackCompatIdResolver(environment.getTopLevelConfig(), {
16168
+ asSrc: false,
16169
+ scan: true,
16170
+ packageCache: esmPackageCache
16171
+ });
16172
+ const _resolveRequire = createBackCompatIdResolver(
16173
+ environment.getTopLevelConfig(),
16174
+ {
16175
+ asSrc: false,
16176
+ isRequire: true,
16177
+ scan: true,
16178
+ packageCache: cjsPackageCache
16080
16179
  }
16081
- try {
16082
- const resolved = tryNodeResolve(
16083
- id,
16084
- // Skip passing importer in build to avoid externalizing non-hoisted dependencies
16085
- // unresolvable from root (which would be unresolvable from output bundles also)
16086
- config.command === "build" ? void 0 : importer,
16087
- resolveOptions,
16088
- void 0,
16089
- false
16090
- );
16091
- if (!resolved) {
16092
- return false;
16093
- }
16094
- if (!configuredAsExternal && !isInNodeModules$1(resolved.id)) {
16095
- return false;
16096
- }
16097
- return canExternalizeFile(resolved.id);
16098
- } catch {
16099
- debug$g?.(
16100
- `Failed to node resolve "${id}". Skipping externalizing it by default.`
16101
- );
16102
- return false;
16180
+ );
16181
+ const resolve = (id, importer, kind, resolveDir) => {
16182
+ let _importer;
16183
+ {
16184
+ _importer = importer in qualified ? qualified[importer] : importer;
16103
16185
  }
16186
+ const resolver = kind.startsWith("require") ? _resolveRequire : _resolve;
16187
+ return resolver(environment, id, _importer);
16104
16188
  };
16105
- return (id, importer) => {
16106
- if (
16107
- // If this id is defined as external, force it as external
16108
- // Note that individual package entries are allowed in `external`
16109
- external !== true && external.includes(id)
16110
- ) {
16111
- return true;
16112
- }
16113
- const pkgName = getNpmPackageName(id);
16114
- if (!pkgName) {
16115
- return isExternalizable(id, importer, false);
16116
- }
16117
- if (
16118
- // A package name in ssr.external externalizes every
16119
- // externalizable package entry
16120
- external !== true && external.includes(pkgName)
16121
- ) {
16122
- return isExternalizable(id, importer, true);
16123
- }
16124
- if (typeof noExternal === "boolean") {
16125
- return !noExternal;
16189
+ const resolveResult = (id, resolved) => {
16190
+ if (resolved.startsWith(browserExternalId)) {
16191
+ return {
16192
+ path: id,
16193
+ namespace: "browser-external"
16194
+ };
16126
16195
  }
16127
- if (noExternalFilter && !noExternalFilter(pkgName)) {
16128
- return false;
16196
+ if (resolved.startsWith(optionalPeerDepId)) {
16197
+ return {
16198
+ path: resolved,
16199
+ namespace: "optional-peer-dep"
16200
+ };
16129
16201
  }
16130
- return isExternalizable(id, importer, external === true);
16131
- };
16132
- }
16133
- function createIsExternal(environment) {
16134
- const processedIds = /* @__PURE__ */ new Map();
16135
- const isConfiguredAsExternal2 = createIsConfiguredAsExternal(environment);
16136
- return (id, importer) => {
16137
- if (processedIds.has(id)) {
16138
- return processedIds.get(id);
16202
+ if (isBuiltin(environment.config.resolve.builtins, resolved)) {
16203
+ return;
16139
16204
  }
16140
- let isExternal = false;
16141
- if (id[0] !== "." && !path$d.isAbsolute(id)) {
16142
- isExternal = isBuiltin(environment.config.resolve.builtins, id) || isConfiguredAsExternal2(id, importer);
16205
+ if (isExternalUrl(resolved)) {
16206
+ return {
16207
+ path: resolved,
16208
+ external: true
16209
+ };
16143
16210
  }
16144
- processedIds.set(id, isExternal);
16145
- return isExternal;
16211
+ return {
16212
+ path: path$d.resolve(resolved)
16213
+ };
16146
16214
  };
16147
- }
16148
- function canExternalizeFile(filePath) {
16149
- const ext = path$d.extname(filePath);
16150
- return !ext || ext === ".js" || ext === ".mjs" || ext === ".cjs";
16151
- }
16152
-
16153
- const normalizedClientEntry$1 = normalizePath$3(CLIENT_ENTRY);
16154
- const normalizedEnvEntry$1 = normalizePath$3(ENV_ENTRY);
16155
- const ERR_RESOLVE_PACKAGE_ENTRY_FAIL = "ERR_RESOLVE_PACKAGE_ENTRY_FAIL";
16156
- const browserExternalId = "__vite-browser-external";
16157
- const optionalPeerDepId = "__vite-optional-peer-dep";
16158
- const subpathImportsPrefix = "#";
16159
- const startsWithWordCharRE = /^\w/;
16160
- const debug$f = createDebugger("vite:resolve-details", {
16161
- onlyWhenFocused: true
16162
- });
16163
- function resolvePlugin(resolveOptions) {
16164
- const { root, isProduction, asSrc, preferRelative = false } = resolveOptions;
16165
- const rootInRoot = tryStatSync(path$d.join(root, root))?.isDirectory() ?? false;
16166
16215
  return {
16167
- name: "vite:resolve",
16168
- async resolveId(id, importer, resolveOpts) {
16169
- if (id[0] === "\0" || id.startsWith("virtual:") || // When injected directly in html/client code
16170
- id.startsWith("/virtual:")) {
16171
- return;
16172
- }
16173
- const depsOptimizer = resolveOptions.optimizeDeps && this.environment.mode === "dev" ? this.environment.depsOptimizer : void 0;
16174
- if (id.startsWith(browserExternalId)) {
16175
- return id;
16176
- }
16177
- const isRequire = resolveOpts.custom?.["node-resolve"]?.isRequire ?? false;
16178
- const currentEnvironmentOptions = this.environment.config;
16179
- const options = {
16180
- isRequire,
16181
- ...currentEnvironmentOptions.resolve,
16182
- ...resolveOptions,
16183
- // plugin options + resolve options overrides
16184
- scan: resolveOpts.scan ?? resolveOptions.scan
16185
- };
16186
- const resolvedImports = resolveSubpathImports(id, importer, options);
16187
- if (resolvedImports) {
16188
- id = resolvedImports;
16189
- if (resolveOpts.custom?.["vite:import-glob"]?.isSubImportsPattern) {
16190
- return normalizePath$3(path$d.join(root, id));
16191
- }
16192
- }
16193
- let res;
16194
- if (asSrc && depsOptimizer?.isOptimizedDepUrl(id)) {
16195
- const optimizedPath = id.startsWith(FS_PREFIX) ? fsPathFromId(id) : normalizePath$3(path$d.resolve(root, id.slice(1)));
16196
- return optimizedPath;
16197
- }
16198
- if (asSrc && id.startsWith(FS_PREFIX)) {
16199
- res = fsPathFromId(id);
16200
- debug$f?.(`[@fs] ${colors$1.cyan(id)} -> ${colors$1.dim(res)}`);
16201
- return ensureVersionQuery(res, id, options, depsOptimizer);
16202
- }
16203
- if (asSrc && id[0] === "/" && (rootInRoot || !id.startsWith(withTrailingSlash(root)))) {
16204
- const fsPath = path$d.resolve(root, id.slice(1));
16205
- if (res = tryFsResolve(fsPath, options)) {
16206
- debug$f?.(`[url] ${colors$1.cyan(id)} -> ${colors$1.dim(res)}`);
16207
- return ensureVersionQuery(res, id, options, depsOptimizer);
16208
- }
16209
- }
16210
- if (id[0] === "." || (preferRelative || importer?.endsWith(".html")) && startsWithWordCharRE.test(id)) {
16211
- const basedir = importer ? path$d.dirname(importer) : process.cwd();
16212
- const fsPath = path$d.resolve(basedir, id);
16213
- const normalizedFsPath = normalizePath$3(fsPath);
16214
- if (depsOptimizer?.isOptimizedDepFile(normalizedFsPath)) {
16215
- if (!options.isBuild && !DEP_VERSION_RE.test(normalizedFsPath)) {
16216
- const browserHash = optimizedDepInfoFromFile(
16217
- depsOptimizer.metadata,
16218
- normalizedFsPath
16219
- )?.browserHash;
16220
- if (browserHash) {
16221
- return injectQuery(normalizedFsPath, `v=${browserHash}`);
16222
- }
16216
+ name: "vite:dep-pre-bundle",
16217
+ setup(build) {
16218
+ build.onEnd(() => {
16219
+ esmPackageCache.clear();
16220
+ cjsPackageCache.clear();
16221
+ });
16222
+ build.onResolve(
16223
+ {
16224
+ filter: new RegExp(
16225
+ `\\.(` + allExternalTypes.join("|") + `)(\\?.*)?$`
16226
+ )
16227
+ },
16228
+ async ({ path: id, importer, kind }) => {
16229
+ if (id.startsWith(convertedExternalPrefix)) {
16230
+ return {
16231
+ path: id.slice(convertedExternalPrefix.length),
16232
+ external: true
16233
+ };
16223
16234
  }
16224
- return normalizedFsPath;
16225
- }
16226
- if (options.mainFields.includes("browser") && (res = tryResolveBrowserMapping(fsPath, importer, options, true))) {
16227
- return res;
16228
- }
16229
- if (res = tryFsResolve(fsPath, options)) {
16230
- res = ensureVersionQuery(res, id, options, depsOptimizer);
16231
- debug$f?.(`[relative] ${colors$1.cyan(id)} -> ${colors$1.dim(res)}`);
16232
- if (!options.idOnly && !options.scan && options.isBuild) {
16233
- const resPkg = findNearestPackageData(
16234
- path$d.dirname(res),
16235
- options.packageCache
16236
- );
16237
- if (resPkg) {
16235
+ const resolved = await resolve(id, importer, kind);
16236
+ if (resolved) {
16237
+ if (JS_TYPES_RE.test(resolved)) {
16238
16238
  return {
16239
- id: res,
16240
- moduleSideEffects: resPkg.hasSideEffects(res)
16239
+ path: resolved,
16240
+ external: false
16241
+ };
16242
+ }
16243
+ if (kind === "require-call") {
16244
+ return {
16245
+ path: resolved,
16246
+ namespace: externalWithConversionNamespace
16241
16247
  };
16242
16248
  }
16249
+ return {
16250
+ path: resolved,
16251
+ external: true
16252
+ };
16243
16253
  }
16244
- return res;
16245
- }
16246
- }
16247
- if (id.startsWith("file://")) {
16248
- const { file, postfix } = splitFileAndPostfix(id);
16249
- id = fileURLToPath$1(file) + postfix;
16250
- }
16251
- if (isWindows$3 && id[0] === "/") {
16252
- const basedir = importer ? path$d.dirname(importer) : process.cwd();
16253
- const fsPath = path$d.resolve(basedir, id);
16254
- if (res = tryFsResolve(fsPath, options)) {
16255
- debug$f?.(`[drive-relative] ${colors$1.cyan(id)} -> ${colors$1.dim(res)}`);
16256
- return ensureVersionQuery(res, id, options, depsOptimizer);
16257
- }
16258
- }
16259
- if (isNonDriveRelativeAbsolutePath(id) && (res = tryFsResolve(id, options))) {
16260
- debug$f?.(`[fs] ${colors$1.cyan(id)} -> ${colors$1.dim(res)}`);
16261
- return ensureVersionQuery(res, id, options, depsOptimizer);
16262
- }
16263
- if (isExternalUrl(id)) {
16264
- return options.idOnly ? id : { id, external: true };
16265
- }
16266
- if (isDataUrl(id)) {
16267
- return null;
16268
- }
16269
- if (bareImportRE.test(id)) {
16270
- const external = options.externalize && options.isBuild && currentEnvironmentOptions.consumer === "server" && shouldExternalize(this.environment, id, importer);
16271
- if (!external && asSrc && depsOptimizer && !options.scan && (res = await tryOptimizedResolve(
16272
- depsOptimizer,
16273
- id,
16274
- importer,
16275
- options.preserveSymlinks,
16276
- options.packageCache
16277
- ))) {
16278
- return res;
16279
16254
  }
16280
- if (options.mainFields.includes("browser") && (res = tryResolveBrowserMapping(
16281
- id,
16282
- importer,
16283
- options,
16284
- false,
16285
- external
16286
- ))) {
16287
- return res;
16255
+ );
16256
+ build.onLoad(
16257
+ { filter: /./, namespace: externalWithConversionNamespace },
16258
+ (args) => {
16259
+ const modulePath = `"${convertedExternalPrefix}${args.path}"`;
16260
+ return {
16261
+ contents: isCSSRequest(args.path) && !isModuleCSSRequest(args.path) ? `import ${modulePath};` : `export { default } from ${modulePath};export * from ${modulePath};`,
16262
+ loader: "js"
16263
+ };
16288
16264
  }
16289
- if (res = tryNodeResolve(id, importer, options, depsOptimizer, external)) {
16290
- return res;
16265
+ );
16266
+ function resolveEntry(id) {
16267
+ const flatId = flattenId(id);
16268
+ if (flatId in qualified) {
16269
+ return {
16270
+ path: qualified[flatId]
16271
+ };
16291
16272
  }
16292
- if (currentEnvironmentOptions.consumer === "server" && isBuiltin(options.builtins, id)) {
16293
- return options.idOnly ? id : { id, external: true, moduleSideEffects: false };
16294
- } else if (currentEnvironmentOptions.consumer === "server" && isNodeLikeBuiltin(id)) {
16295
- if (!(options.external === true || options.external.includes(id))) {
16296
- let message = `Automatically externalized node built-in module "${id}"`;
16297
- if (importer) {
16298
- message += ` imported from "${path$d.relative(
16299
- process.cwd(),
16300
- importer
16301
- )}"`;
16302
- }
16303
- message += `. Consider adding it to environments.${this.environment.name}.external if it is intended.`;
16304
- this.warn(message);
16273
+ }
16274
+ build.onResolve(
16275
+ { filter: /^[\w@][^:]/ },
16276
+ async ({ path: id, importer, kind }) => {
16277
+ if (moduleListContains(external, id)) {
16278
+ return {
16279
+ path: id,
16280
+ external: true
16281
+ };
16305
16282
  }
16306
- return options.idOnly ? id : { id, external: true, moduleSideEffects: false };
16307
- } else if (currentEnvironmentOptions.consumer === "client" && isNodeLikeBuiltin(id)) {
16308
- if (options.noExternal === true && // if both noExternal and external are true, noExternal will take the higher priority and bundle it.
16309
- // only if the id is explicitly listed in external, we will externalize it and skip this error.
16310
- (options.external === true || !options.external.includes(id))) {
16311
- let message = `Cannot bundle built-in module "${id}"`;
16312
- if (importer) {
16313
- message += ` imported from "${path$d.relative(
16314
- process.cwd(),
16315
- importer
16316
- )}"`;
16283
+ let entry;
16284
+ if (!importer) {
16285
+ if (entry = resolveEntry(id)) return entry;
16286
+ const aliased = await _resolve(environment, id, void 0, true);
16287
+ if (aliased && (entry = resolveEntry(aliased))) {
16288
+ return entry;
16317
16289
  }
16318
- message += `. Consider disabling environments.${this.environment.name}.noExternal or remove the built-in dependency.`;
16319
- this.error(message);
16320
16290
  }
16321
- if (!asSrc) {
16322
- debug$f?.(
16323
- `externalized node built-in "${id}" to empty module. (imported by: ${colors$1.white(colors$1.dim(importer))})`
16324
- );
16325
- } else if (isProduction) {
16326
- this.warn(
16327
- `Module "${id}" has been externalized for browser compatibility, imported by "${importer}". See https://vite.dev/guide/troubleshooting.html#module-externalized-for-browser-compatibility for more details.`
16328
- );
16291
+ const resolved = await resolve(id, importer, kind);
16292
+ if (resolved) {
16293
+ return resolveResult(id, resolved);
16329
16294
  }
16330
- return isProduction ? browserExternalId : `${browserExternalId}:${id}`;
16331
16295
  }
16332
- }
16333
- debug$f?.(`[fallthrough] ${colors$1.dim(id)}`);
16334
- },
16335
- load(id) {
16336
- if (id.startsWith(browserExternalId)) {
16337
- if (isProduction) {
16338
- return `export default {}`;
16339
- } else {
16340
- id = id.slice(browserExternalId.length + 1);
16341
- return `export default new Proxy({}, {
16342
- get(_, key) {
16343
- throw new Error(\`Module "${id}" has been externalized for browser compatibility. Cannot access "${id}.\${key}" in client code. See https://vite.dev/guide/troubleshooting.html#module-externalized-for-browser-compatibility for more details.\`)
16344
- }
16345
- })`;
16346
- }
16347
- }
16348
- if (id.startsWith(optionalPeerDepId)) {
16349
- if (isProduction) {
16350
- return `export default {}`;
16351
- } else {
16352
- const [, peerDep, parentDep] = id.split(":");
16353
- return `throw new Error(\`Could not resolve "${peerDep}" imported by "${parentDep}". Is it installed?\`)`;
16354
- }
16355
- }
16356
- }
16357
- };
16358
- }
16359
- function resolveSubpathImports(id, importer, options) {
16360
- if (!importer || !id.startsWith(subpathImportsPrefix)) return;
16361
- const basedir = path$d.dirname(importer);
16362
- const pkgData = findNearestPackageData(basedir, options.packageCache);
16363
- if (!pkgData) return;
16364
- let { file: idWithoutPostfix, postfix } = splitFileAndPostfix(id.slice(1));
16365
- idWithoutPostfix = "#" + idWithoutPostfix;
16366
- let importsPath = resolveExportsOrImports(
16367
- pkgData.data,
16368
- idWithoutPostfix,
16369
- options,
16370
- "imports"
16371
- );
16372
- if (importsPath?.[0] === ".") {
16373
- importsPath = path$d.relative(basedir, path$d.join(pkgData.dir, importsPath));
16374
- if (importsPath[0] !== ".") {
16375
- importsPath = `./${importsPath}`;
16376
- }
16377
- }
16378
- return importsPath + postfix;
16379
- }
16380
- function ensureVersionQuery(resolved, id, options, depsOptimizer) {
16381
- if (!options.isBuild && !options.scan && depsOptimizer && !(resolved === normalizedClientEntry$1 || resolved === normalizedEnvEntry$1)) {
16382
- const isNodeModule = isInNodeModules$1(id) || isInNodeModules$1(resolved);
16383
- if (isNodeModule && !DEP_VERSION_RE.test(resolved)) {
16384
- const versionHash = depsOptimizer.metadata.browserHash;
16385
- if (versionHash && isOptimizable(resolved, depsOptimizer.options)) {
16386
- resolved = injectQuery(resolved, `v=${versionHash}`);
16387
- }
16388
- }
16389
- }
16390
- return resolved;
16391
- }
16392
- function tryFsResolve(fsPath, options, tryIndex = true, skipPackageJson = false) {
16393
- const hashIndex = fsPath.indexOf("#");
16394
- if (hashIndex >= 0 && isInNodeModules$1(fsPath)) {
16395
- const queryIndex = fsPath.indexOf("?");
16396
- if (queryIndex < 0 || queryIndex > hashIndex) {
16397
- const file2 = queryIndex > hashIndex ? fsPath.slice(0, queryIndex) : fsPath;
16398
- const res2 = tryCleanFsResolve(file2, options, tryIndex, skipPackageJson);
16399
- if (res2) return res2 + fsPath.slice(file2.length);
16400
- }
16401
- }
16402
- const { file, postfix } = splitFileAndPostfix(fsPath);
16403
- const res = tryCleanFsResolve(file, options, tryIndex, skipPackageJson);
16404
- if (res) return res + postfix;
16405
- }
16406
- const knownTsOutputRE = /\.(?:js|mjs|cjs|jsx)$/;
16407
- const isPossibleTsOutput = (url) => knownTsOutputRE.test(url);
16408
- function tryCleanFsResolve(file, options, tryIndex = true, skipPackageJson = false) {
16409
- const { tryPrefix, extensions, preserveSymlinks } = options;
16410
- const fileResult = tryResolveRealFileOrType(file, options.preserveSymlinks);
16411
- if (fileResult?.path) return fileResult.path;
16412
- let res;
16413
- const possibleJsToTs = isPossibleTsOutput(file);
16414
- if (possibleJsToTs || options.extensions.length || tryPrefix) {
16415
- const dirPath = path$d.dirname(file);
16416
- if (isDirectory(dirPath)) {
16417
- if (possibleJsToTs) {
16418
- const fileExt = path$d.extname(file);
16419
- const fileName = file.slice(0, -fileExt.length);
16420
- if (res = tryResolveRealFile(
16421
- fileName + fileExt.replace("js", "ts"),
16422
- preserveSymlinks
16423
- ))
16424
- return res;
16425
- if (fileExt === ".js" && (res = tryResolveRealFile(fileName + ".tsx", preserveSymlinks)))
16426
- return res;
16427
- }
16428
- if (res = tryResolveRealFileWithExtensions(
16429
- file,
16430
- extensions,
16431
- preserveSymlinks
16432
- ))
16433
- return res;
16434
- if (tryPrefix) {
16435
- const prefixed = `${dirPath}/${options.tryPrefix}${path$d.basename(file)}`;
16436
- if (res = tryResolveRealFile(prefixed, preserveSymlinks)) return res;
16437
- if (res = tryResolveRealFileWithExtensions(
16438
- prefixed,
16439
- extensions,
16440
- preserveSymlinks
16441
- ))
16442
- return res;
16443
- }
16296
+ );
16297
+ build.onLoad(
16298
+ { filter: /.*/, namespace: "browser-external" },
16299
+ ({ path: path2 }) => {
16300
+ if (isProduction) {
16301
+ return {
16302
+ contents: "module.exports = {}"
16303
+ };
16304
+ } else {
16305
+ return {
16306
+ // Return in CJS to intercept named imports. Use `Object.create` to
16307
+ // create the Proxy in the prototype to workaround esbuild issue. Why?
16308
+ //
16309
+ // In short, esbuild cjs->esm flow:
16310
+ // 1. Create empty object using `Object.create(Object.getPrototypeOf(module.exports))`.
16311
+ // 2. Assign props of `module.exports` to the object.
16312
+ // 3. Return object for ESM use.
16313
+ //
16314
+ // If we do `module.exports = new Proxy({}, {})`, step 1 returns empty object,
16315
+ // step 2 does nothing as there's no props for `module.exports`. The final object
16316
+ // is just an empty object.
16317
+ //
16318
+ // Creating the Proxy in the prototype satisfies step 1 immediately, which means
16319
+ // the returned object is a Proxy that we can intercept.
16320
+ //
16321
+ // Note: Skip keys that are accessed by esbuild and browser devtools.
16322
+ contents: `module.exports = Object.create(new Proxy({}, {
16323
+ get(_, key) {
16324
+ if (
16325
+ key !== '__esModule' &&
16326
+ key !== '__proto__' &&
16327
+ key !== 'constructor' &&
16328
+ key !== 'splice'
16329
+ ) {
16330
+ console.warn(\`Module "${path2}" has been externalized for browser compatibility. Cannot access "${path2}.\${key}" in client code. See https://vite.dev/guide/troubleshooting.html#module-externalized-for-browser-compatibility for more details.\`)
16444
16331
  }
16445
16332
  }
16446
- if (tryIndex && fileResult?.type === "directory") {
16447
- const dirPath = file;
16448
- if (!skipPackageJson) {
16449
- let pkgPath = `${dirPath}/package.json`;
16450
- try {
16451
- if (fs__default.existsSync(pkgPath)) {
16452
- if (!options.preserveSymlinks) {
16453
- pkgPath = safeRealpathSync(pkgPath);
16333
+ }))`
16334
+ };
16454
16335
  }
16455
- const pkg = loadPackageData(pkgPath);
16456
- return resolvePackageEntry(dirPath, pkg, options);
16457
16336
  }
16458
- } catch (e) {
16459
- if (e.code !== ERR_RESOLVE_PACKAGE_ENTRY_FAIL && e.code !== "ENOENT")
16460
- throw e;
16461
- }
16462
- }
16463
- if (res = tryResolveRealFileWithExtensions(
16464
- `${dirPath}/index`,
16465
- extensions,
16466
- preserveSymlinks
16467
- ))
16468
- return res;
16469
- if (tryPrefix) {
16470
- if (res = tryResolveRealFileWithExtensions(
16471
- `${dirPath}/${options.tryPrefix}index`,
16472
- extensions,
16473
- preserveSymlinks
16474
- ))
16475
- return res;
16337
+ );
16338
+ build.onLoad(
16339
+ { filter: /.*/, namespace: "optional-peer-dep" },
16340
+ ({ path: path2 }) => {
16341
+ if (isProduction) {
16342
+ return {
16343
+ contents: "module.exports = {}"
16344
+ };
16345
+ } else {
16346
+ const [, peerDep, parentDep] = path2.split(":");
16347
+ return {
16348
+ contents: `throw new Error(\`Could not resolve "${peerDep}" imported by "${parentDep}". Is it installed?\`)`
16349
+ };
16350
+ }
16351
+ }
16352
+ );
16476
16353
  }
16477
- }
16354
+ };
16478
16355
  }
16479
- function tryNodeResolve(id, importer, options, depsOptimizer, externalize) {
16480
- const { root, dedupe, isBuild, preserveSymlinks, packageCache } = options;
16481
- const deepMatch = deepImportRE.exec(id);
16482
- const pkgId = deepMatch ? deepMatch[1] || deepMatch[2] : cleanUrl(id);
16483
- let basedir;
16484
- if (dedupe.includes(pkgId)) {
16485
- basedir = root;
16486
- } else if (importer && path$d.isAbsolute(importer) && // css processing appends `*` for importer
16487
- (importer[importer.length - 1] === "*" || fs__default.existsSync(cleanUrl(importer)))) {
16488
- basedir = path$d.dirname(importer);
16489
- } else {
16490
- basedir = root;
16491
- }
16492
- const isModuleBuiltin = (id2) => isBuiltin(options.builtins, id2);
16493
- let selfPkg = null;
16494
- if (!isModuleBuiltin(id) && !id.includes("\0") && bareImportRE.test(id)) {
16495
- const selfPackageData = findNearestPackageData(basedir, packageCache);
16496
- selfPkg = selfPackageData?.data.exports && selfPackageData.data.name === pkgId ? selfPackageData : null;
16497
- }
16498
- const pkg = selfPkg || resolvePackageData(pkgId, basedir, preserveSymlinks, packageCache);
16499
- if (!pkg) {
16500
- if (basedir !== root && // root has no peer dep
16501
- !isModuleBuiltin(id) && !id.includes("\0") && bareImportRE.test(id)) {
16502
- const mainPkg = findNearestMainPackageData(basedir, packageCache)?.data;
16503
- if (mainPkg) {
16504
- const pkgName = getNpmPackageName(id);
16505
- if (pkgName != null && mainPkg.peerDependencies?.[pkgName] && mainPkg.peerDependenciesMeta?.[pkgName]?.optional) {
16356
+ const matchesEntireLine = (text) => `^${escapeRegex(text)}$`;
16357
+ function esbuildCjsExternalPlugin(externals, platform) {
16358
+ return {
16359
+ name: "cjs-external",
16360
+ setup(build) {
16361
+ const filter = new RegExp(externals.map(matchesEntireLine).join("|"));
16362
+ build.onResolve({ filter: new RegExp(`^${nonFacadePrefix}`) }, (args) => {
16363
+ return {
16364
+ path: args.path.slice(nonFacadePrefix.length),
16365
+ external: true
16366
+ };
16367
+ });
16368
+ build.onResolve({ filter }, (args) => {
16369
+ if (args.kind === "require-call" && platform !== "node") {
16506
16370
  return {
16507
- id: `${optionalPeerDepId}:${id}:${mainPkg.name}`
16371
+ path: args.path,
16372
+ namespace: cjsExternalFacadeNamespace
16508
16373
  };
16509
16374
  }
16510
- }
16511
- }
16512
- return;
16513
- }
16514
- const resolveId = deepMatch ? resolveDeepImport : resolvePackageEntry;
16515
- const unresolvedId = deepMatch ? "." + id.slice(pkgId.length) : id;
16516
- let resolved = resolveId(unresolvedId, pkg, options);
16517
- if (!resolved) {
16518
- return;
16519
- }
16520
- const processResult = (resolved2) => {
16521
- if (!externalize) {
16522
- return resolved2;
16523
- }
16524
- if (!canExternalizeFile(resolved2.id)) {
16525
- return resolved2;
16526
- }
16527
- let resolvedId = id;
16528
- if (deepMatch && !pkg.data.exports && path$d.extname(id) !== path$d.extname(resolved2.id)) {
16529
- const index = resolved2.id.indexOf(id);
16530
- if (index > -1) {
16531
- resolvedId = resolved2.id.slice(index);
16532
- debug$f?.(
16533
- `[processResult] ${colors$1.cyan(id)} -> ${colors$1.dim(resolvedId)}`
16534
- );
16535
- }
16375
+ return {
16376
+ path: args.path,
16377
+ external: true
16378
+ };
16379
+ });
16380
+ build.onLoad(
16381
+ { filter: /.*/, namespace: cjsExternalFacadeNamespace },
16382
+ (args) => ({
16383
+ contents: `import * as m from ${JSON.stringify(
16384
+ nonFacadePrefix + args.path
16385
+ )};module.exports = m;`
16386
+ })
16387
+ );
16536
16388
  }
16537
- return { ...resolved2, id: resolvedId, external: true };
16538
16389
  };
16539
- if (!options.idOnly && (!options.scan && isBuild || externalize)) {
16540
- return processResult({
16541
- id: resolved,
16542
- moduleSideEffects: pkg.hasSideEffects(resolved)
16543
- });
16544
- }
16545
- if (!isInNodeModules$1(resolved) || // linked
16546
- !depsOptimizer || // resolving before listening to the server
16547
- options.scan) {
16548
- return { id: resolved };
16549
- }
16550
- const isJsType = isOptimizable(resolved, depsOptimizer.options);
16551
- const exclude = depsOptimizer.options.exclude;
16552
- const skipOptimization = depsOptimizer.options.noDiscovery || !isJsType || importer && isInNodeModules$1(importer) || exclude?.includes(pkgId) || exclude?.includes(id) || SPECIAL_QUERY_RE.test(resolved);
16553
- if (skipOptimization) {
16554
- const versionHash = depsOptimizer.metadata.browserHash;
16555
- if (versionHash && isJsType) {
16556
- resolved = injectQuery(resolved, `v=${versionHash}`);
16557
- }
16558
- } else {
16559
- const optimizedInfo = depsOptimizer.registerMissingImport(id, resolved);
16560
- resolved = depsOptimizer.getOptimizedDepId(optimizedInfo);
16561
- }
16562
- return { id: resolved };
16563
16390
  }
16564
- async function tryOptimizedResolve(depsOptimizer, id, importer, preserveSymlinks, packageCache) {
16565
- await depsOptimizer.scanProcessing;
16566
- const metadata = depsOptimizer.metadata;
16567
- const depInfo = optimizedDepInfoFromId(metadata, id);
16568
- if (depInfo) {
16569
- return depsOptimizer.getOptimizedDepId(depInfo);
16570
- }
16571
- if (!importer) return;
16572
- let idPkgDir;
16573
- const nestedIdMatch = `> ${id}`;
16574
- for (const optimizedData of metadata.depInfoList) {
16575
- if (!optimizedData.src) continue;
16576
- if (!optimizedData.id.endsWith(nestedIdMatch)) continue;
16577
- if (idPkgDir == null) {
16578
- const pkgName = getNpmPackageName(id);
16579
- if (!pkgName) break;
16580
- idPkgDir = resolvePackageData(
16581
- pkgName,
16582
- importer,
16583
- preserveSymlinks,
16584
- packageCache
16585
- )?.dir;
16586
- if (idPkgDir == null) break;
16587
- idPkgDir = normalizePath$3(idPkgDir);
16588
- }
16589
- if (optimizedData.src.startsWith(withTrailingSlash(idPkgDir))) {
16590
- return depsOptimizer.getOptimizedDepId(optimizedData);
16591
- }
16592
- }
16391
+
16392
+ const environmentColors = [
16393
+ colors$1.blue,
16394
+ colors$1.magenta,
16395
+ colors$1.green,
16396
+ colors$1.gray
16397
+ ];
16398
+ function getDefaultResolvedEnvironmentOptions(config) {
16399
+ return {
16400
+ define: config.define,
16401
+ resolve: config.resolve,
16402
+ consumer: "server",
16403
+ optimizeDeps: config.optimizeDeps,
16404
+ dev: config.dev,
16405
+ build: config.build
16406
+ };
16593
16407
  }
16594
- function resolvePackageEntry(id, { dir, data, setResolvedCache, getResolvedCache }, options) {
16595
- const { file: idWithoutPostfix, postfix } = splitFileAndPostfix(id);
16596
- const cached = getResolvedCache(".", options);
16597
- if (cached) {
16598
- return cached + postfix;
16408
+ class PartialEnvironment {
16409
+ name;
16410
+ getTopLevelConfig() {
16411
+ return this._topLevelConfig;
16599
16412
  }
16600
- try {
16601
- let entryPoint;
16602
- if (data.exports) {
16603
- entryPoint = resolveExportsOrImports(data, ".", options, "exports");
16413
+ config;
16414
+ /**
16415
+ * @deprecated use environment.config instead
16416
+ **/
16417
+ get options() {
16418
+ return this._options;
16419
+ }
16420
+ logger;
16421
+ /**
16422
+ * @internal
16423
+ */
16424
+ _options;
16425
+ /**
16426
+ * @internal
16427
+ */
16428
+ _topLevelConfig;
16429
+ constructor(name, topLevelConfig, options = topLevelConfig.environments[name]) {
16430
+ if (!/^[\w$]+$/.test(name)) {
16431
+ throw new Error(
16432
+ `Invalid environment name "${name}". Environment names must only contain alphanumeric characters and "$", "_".`
16433
+ );
16604
16434
  }
16605
- if (!entryPoint) {
16606
- for (const field of options.mainFields) {
16607
- if (field === "browser") {
16608
- entryPoint = tryResolveBrowserEntry(dir, data, options);
16609
- if (entryPoint) {
16610
- break;
16435
+ this.name = name;
16436
+ this._topLevelConfig = topLevelConfig;
16437
+ this._options = options;
16438
+ this.config = new Proxy(
16439
+ options,
16440
+ {
16441
+ get: (target, prop) => {
16442
+ if (prop === "logger") {
16443
+ return this.logger;
16611
16444
  }
16612
- } else if (typeof data[field] === "string") {
16613
- entryPoint = data[field];
16614
- break;
16615
- }
16616
- }
16617
- }
16618
- entryPoint ||= data.main;
16619
- const entryPoints = entryPoint ? [entryPoint] : ["index.js", "index.json", "index.node"];
16620
- for (let entry of entryPoints) {
16621
- let skipPackageJson = false;
16622
- if (options.mainFields[0] === "sass" && !options.extensions.includes(path$d.extname(entry))) {
16623
- entry = "";
16624
- skipPackageJson = true;
16625
- } else {
16626
- const { browser: browserField } = data;
16627
- if (options.mainFields.includes("browser") && isObject$2(browserField)) {
16628
- entry = mapWithBrowserField(entry, browserField) || entry;
16445
+ if (prop in target) {
16446
+ return this._options[prop];
16447
+ }
16448
+ return this._topLevelConfig[prop];
16629
16449
  }
16630
16450
  }
16631
- const entryPointPath = path$d.join(dir, entry);
16632
- const resolvedEntryPoint = tryFsResolve(
16633
- entryPointPath,
16634
- options,
16635
- true,
16636
- skipPackageJson
16637
- );
16638
- if (resolvedEntryPoint) {
16639
- debug$f?.(
16640
- `[package entry] ${colors$1.cyan(idWithoutPostfix)} -> ${colors$1.dim(
16641
- resolvedEntryPoint
16642
- )}${postfix !== "" ? ` (postfix: ${postfix})` : ""}`
16643
- );
16644
- setResolvedCache(".", resolvedEntryPoint, options);
16645
- return resolvedEntryPoint + postfix;
16451
+ );
16452
+ const environment = colors$1.dim(`(${this.name})`);
16453
+ const colorIndex = [...this.name].reduce((acc, c) => acc + c.charCodeAt(0), 0) % environmentColors.length;
16454
+ const infoColor = environmentColors[colorIndex || 0];
16455
+ this.logger = {
16456
+ get hasWarned() {
16457
+ return topLevelConfig.logger.hasWarned;
16458
+ },
16459
+ info(msg, opts) {
16460
+ return topLevelConfig.logger.info(msg, {
16461
+ ...opts,
16462
+ environment: infoColor(environment)
16463
+ });
16464
+ },
16465
+ warn(msg, opts) {
16466
+ return topLevelConfig.logger.warn(msg, {
16467
+ ...opts,
16468
+ environment: colors$1.yellow(environment)
16469
+ });
16470
+ },
16471
+ warnOnce(msg, opts) {
16472
+ return topLevelConfig.logger.warnOnce(msg, {
16473
+ ...opts,
16474
+ environment: colors$1.yellow(environment)
16475
+ });
16476
+ },
16477
+ error(msg, opts) {
16478
+ return topLevelConfig.logger.error(msg, {
16479
+ ...opts,
16480
+ environment: colors$1.red(environment)
16481
+ });
16482
+ },
16483
+ clearScreen(type) {
16484
+ return topLevelConfig.logger.clearScreen(type);
16485
+ },
16486
+ hasErrorLogged(error) {
16487
+ return topLevelConfig.logger.hasErrorLogged(error);
16646
16488
  }
16647
- }
16648
- } catch (e) {
16649
- packageEntryFailure(id, e.message);
16650
- }
16651
- packageEntryFailure(id);
16652
- }
16653
- function packageEntryFailure(id, details) {
16654
- const err = new Error(
16655
- `Failed to resolve entry for package "${id}". The package may have incorrect main/module/exports specified in its package.json` + (details ? ": " + details : ".")
16656
- );
16657
- err.code = ERR_RESOLVE_PACKAGE_ENTRY_FAIL;
16658
- throw err;
16659
- }
16660
- function resolveExportsOrImports(pkg, key, options, type) {
16661
- const conditions = options.conditions.map((condition) => {
16662
- if (condition === DEV_PROD_CONDITION) {
16663
- return options.isProduction ? "production" : "development";
16664
- }
16665
- return condition;
16666
- });
16667
- if (options.isRequire) {
16668
- conditions.push("require");
16669
- } else {
16670
- conditions.push("import");
16489
+ };
16671
16490
  }
16672
- const fn = type === "imports" ? f : o;
16673
- const result = fn(pkg, key, { conditions, unsafe: true });
16674
- return result ? result[0] : void 0;
16675
16491
  }
16676
- function resolveDeepImport(id, { setResolvedCache, getResolvedCache, dir, data }, options) {
16677
- const cache = getResolvedCache(id, options);
16678
- if (cache) {
16679
- return cache;
16680
- }
16681
- let relativeId = id;
16682
- const { exports: exportsField, browser: browserField } = data;
16683
- if (exportsField) {
16684
- if (isObject$2(exportsField) && !Array.isArray(exportsField)) {
16685
- const { file, postfix } = splitFileAndPostfix(relativeId);
16686
- const exportsId = resolveExportsOrImports(data, file, options, "exports");
16687
- if (exportsId !== void 0) {
16688
- relativeId = exportsId + postfix;
16689
- } else {
16690
- relativeId = void 0;
16691
- }
16692
- } else {
16693
- relativeId = void 0;
16694
- }
16695
- if (!relativeId) {
16492
+ class BaseEnvironment extends PartialEnvironment {
16493
+ get plugins() {
16494
+ if (!this._plugins)
16696
16495
  throw new Error(
16697
- `Package subpath '${relativeId}' is not defined by "exports" in ${path$d.join(dir, "package.json")}.`
16496
+ `${this.name} environment.plugins called before initialized`
16698
16497
  );
16699
- }
16700
- } else if (options.mainFields.includes("browser") && isObject$2(browserField)) {
16701
- const { file, postfix } = splitFileAndPostfix(relativeId);
16702
- const mapped = mapWithBrowserField(file, browserField);
16703
- if (mapped) {
16704
- relativeId = mapped + postfix;
16705
- } else if (mapped === false) {
16706
- setResolvedCache(id, browserExternalId, options);
16707
- return browserExternalId;
16708
- }
16709
- }
16710
- if (relativeId) {
16711
- const resolved = tryFsResolve(
16712
- path$d.join(dir, relativeId),
16713
- options,
16714
- !exportsField
16715
- // try index only if no exports field
16716
- );
16717
- if (resolved) {
16718
- debug$f?.(
16719
- `[node/deep-import] ${colors$1.cyan(id)} -> ${colors$1.dim(resolved)}`
16720
- );
16721
- setResolvedCache(id, resolved, options);
16722
- return resolved;
16723
- }
16724
- }
16725
- }
16726
- function tryResolveBrowserMapping(id, importer, options, isFilePath, externalize) {
16727
- let res;
16728
- const pkg = importer && findNearestPackageData(path$d.dirname(importer), options.packageCache);
16729
- if (pkg && isObject$2(pkg.data.browser)) {
16730
- const mapId = isFilePath ? "./" + slash$1(path$d.relative(pkg.dir, id)) : id;
16731
- const browserMappedPath = mapWithBrowserField(mapId, pkg.data.browser);
16732
- if (browserMappedPath) {
16733
- if (res = bareImportRE.test(browserMappedPath) ? tryNodeResolve(
16734
- browserMappedPath,
16735
- importer,
16736
- options,
16737
- void 0,
16738
- void 0
16739
- )?.id : tryFsResolve(path$d.join(pkg.dir, browserMappedPath), options)) {
16740
- debug$f?.(`[browser mapped] ${colors$1.cyan(id)} -> ${colors$1.dim(res)}`);
16741
- let result = { id: res };
16742
- if (options.idOnly) {
16743
- return result;
16744
- }
16745
- if (!options.scan && options.isBuild) {
16746
- const resPkg = findNearestPackageData(
16747
- path$d.dirname(res),
16748
- options.packageCache
16749
- );
16750
- if (resPkg) {
16751
- result = {
16752
- id: res,
16753
- moduleSideEffects: resPkg.hasSideEffects(res)
16754
- };
16755
- }
16756
- }
16757
- return externalize ? { ...result, external: true } : result;
16758
- }
16759
- } else if (browserMappedPath === false) {
16760
- return browserExternalId;
16761
- }
16762
- }
16763
- }
16764
- function tryResolveBrowserEntry(dir, data, options) {
16765
- const browserEntry = typeof data.browser === "string" ? data.browser : isObject$2(data.browser) && data.browser["."];
16766
- if (browserEntry) {
16767
- if (!options.isRequire && options.mainFields.includes("module") && typeof data.module === "string" && data.module !== browserEntry) {
16768
- const resolvedBrowserEntry = tryFsResolve(
16769
- path$d.join(dir, browserEntry),
16770
- options
16771
- );
16772
- if (resolvedBrowserEntry) {
16773
- const content = fs__default.readFileSync(resolvedBrowserEntry, "utf-8");
16774
- if (hasESMSyntax(content)) {
16775
- return browserEntry;
16776
- } else {
16777
- return data.module;
16778
- }
16779
- }
16780
- } else {
16781
- return browserEntry;
16782
- }
16783
- }
16784
- }
16785
- function mapWithBrowserField(relativePathInPkgDir, map) {
16786
- const normalizedPath = path$d.posix.normalize(relativePathInPkgDir);
16787
- for (const key in map) {
16788
- const normalizedKey = path$d.posix.normalize(key);
16789
- if (normalizedPath === normalizedKey || equalWithoutSuffix(normalizedPath, normalizedKey, ".js") || equalWithoutSuffix(normalizedPath, normalizedKey, "/index.js")) {
16790
- return map[key];
16791
- }
16792
- }
16793
- }
16794
- function equalWithoutSuffix(path2, key, suffix) {
16795
- return key.endsWith(suffix) && key.slice(0, -suffix.length) === path2;
16796
- }
16797
- function tryResolveRealFile(file, preserveSymlinks) {
16798
- const stat = tryStatSync(file);
16799
- if (stat?.isFile()) return getRealPath(file, preserveSymlinks);
16800
- }
16801
- function tryResolveRealFileWithExtensions(filePath, extensions, preserveSymlinks) {
16802
- for (const ext of extensions) {
16803
- const res = tryResolveRealFile(filePath + ext, preserveSymlinks);
16804
- if (res) return res;
16805
- }
16806
- }
16807
- function tryResolveRealFileOrType(file, preserveSymlinks) {
16808
- const fileStat = tryStatSync(file);
16809
- if (fileStat?.isFile()) {
16810
- return { path: getRealPath(file, preserveSymlinks), type: "file" };
16811
- }
16812
- if (fileStat?.isDirectory()) {
16813
- return { type: "directory" };
16814
- }
16815
- return;
16816
- }
16817
- function getRealPath(resolved, preserveSymlinks) {
16818
- if (!preserveSymlinks) {
16819
- resolved = safeRealpathSync(resolved);
16820
- }
16821
- return normalizePath$3(resolved);
16822
- }
16823
- function isDirectory(path2) {
16824
- const stat = tryStatSync(path2);
16825
- return stat?.isDirectory() ?? false;
16826
- }
16827
-
16828
- const externalWithConversionNamespace = "vite:dep-pre-bundle:external-conversion";
16829
- const convertedExternalPrefix = "vite-dep-pre-bundle-external:";
16830
- const cjsExternalFacadeNamespace = "vite:cjs-external-facade";
16831
- const nonFacadePrefix = "vite-cjs-external-facade:";
16832
- const externalTypes = [
16833
- "css",
16834
- // supported pre-processor types
16835
- "less",
16836
- "sass",
16837
- "scss",
16838
- "styl",
16839
- "stylus",
16840
- "pcss",
16841
- "postcss",
16842
- // wasm
16843
- "wasm",
16844
- // known SFC types
16845
- "vue",
16846
- "svelte",
16847
- "marko",
16848
- "astro",
16849
- "imba",
16850
- // JSX/TSX may be configured to be compiled differently from how esbuild
16851
- // handles it by default, so exclude them as well
16852
- "jsx",
16853
- "tsx",
16854
- ...KNOWN_ASSET_TYPES
16855
- ];
16856
- function esbuildDepPlugin(environment, qualified, external) {
16857
- const { isProduction } = environment.config;
16858
- const { extensions } = environment.config.optimizeDeps;
16859
- const allExternalTypes = extensions ? externalTypes.filter((type) => !extensions.includes("." + type)) : externalTypes;
16860
- const esmPackageCache = /* @__PURE__ */ new Map();
16861
- const cjsPackageCache = /* @__PURE__ */ new Map();
16862
- const _resolve = createBackCompatIdResolver(environment.getTopLevelConfig(), {
16863
- asSrc: false,
16864
- scan: true,
16865
- packageCache: esmPackageCache
16866
- });
16867
- const _resolveRequire = createBackCompatIdResolver(
16868
- environment.getTopLevelConfig(),
16869
- {
16870
- asSrc: false,
16871
- isRequire: true,
16872
- scan: true,
16873
- packageCache: cjsPackageCache
16874
- }
16875
- );
16876
- const resolve = (id, importer, kind, resolveDir) => {
16877
- let _importer;
16878
- {
16879
- _importer = importer in qualified ? qualified[importer] : importer;
16880
- }
16881
- const resolver = kind.startsWith("require") ? _resolveRequire : _resolve;
16882
- return resolver(environment, id, _importer);
16883
- };
16884
- const resolveResult = (id, resolved) => {
16885
- if (resolved.startsWith(browserExternalId)) {
16886
- return {
16887
- path: id,
16888
- namespace: "browser-external"
16889
- };
16890
- }
16891
- if (resolved.startsWith(optionalPeerDepId)) {
16892
- return {
16893
- path: resolved,
16894
- namespace: "optional-peer-dep"
16895
- };
16896
- }
16897
- if (isBuiltin(environment.config.resolve.builtins, resolved)) {
16898
- return;
16899
- }
16900
- if (isExternalUrl(resolved)) {
16901
- return {
16902
- path: resolved,
16903
- external: true
16904
- };
16905
- }
16906
- return {
16907
- path: path$d.resolve(resolved)
16908
- };
16909
- };
16910
- return {
16911
- name: "vite:dep-pre-bundle",
16912
- setup(build) {
16913
- build.onEnd(() => {
16914
- esmPackageCache.clear();
16915
- cjsPackageCache.clear();
16916
- });
16917
- build.onResolve(
16918
- {
16919
- filter: new RegExp(
16920
- `\\.(` + allExternalTypes.join("|") + `)(\\?.*)?$`
16921
- )
16922
- },
16923
- async ({ path: id, importer, kind }) => {
16924
- if (id.startsWith(convertedExternalPrefix)) {
16925
- return {
16926
- path: id.slice(convertedExternalPrefix.length),
16927
- external: true
16928
- };
16929
- }
16930
- const resolved = await resolve(id, importer, kind);
16931
- if (resolved) {
16932
- if (JS_TYPES_RE.test(resolved)) {
16933
- return {
16934
- path: resolved,
16935
- external: false
16936
- };
16937
- }
16938
- if (kind === "require-call") {
16939
- return {
16940
- path: resolved,
16941
- namespace: externalWithConversionNamespace
16942
- };
16943
- }
16944
- return {
16945
- path: resolved,
16946
- external: true
16947
- };
16948
- }
16949
- }
16950
- );
16951
- build.onLoad(
16952
- { filter: /./, namespace: externalWithConversionNamespace },
16953
- (args) => {
16954
- const modulePath = `"${convertedExternalPrefix}${args.path}"`;
16955
- return {
16956
- contents: isCSSRequest(args.path) && !isModuleCSSRequest(args.path) ? `import ${modulePath};` : `export { default } from ${modulePath};export * from ${modulePath};`,
16957
- loader: "js"
16958
- };
16959
- }
16960
- );
16961
- function resolveEntry(id) {
16962
- const flatId = flattenId(id);
16963
- if (flatId in qualified) {
16964
- return {
16965
- path: qualified[flatId]
16966
- };
16967
- }
16968
- }
16969
- build.onResolve(
16970
- { filter: /^[\w@][^:]/ },
16971
- async ({ path: id, importer, kind }) => {
16972
- if (moduleListContains(external, id)) {
16973
- return {
16974
- path: id,
16975
- external: true
16976
- };
16977
- }
16978
- let entry;
16979
- if (!importer) {
16980
- if (entry = resolveEntry(id)) return entry;
16981
- const aliased = await _resolve(environment, id, void 0, true);
16982
- if (aliased && (entry = resolveEntry(aliased))) {
16983
- return entry;
16984
- }
16985
- }
16986
- const resolved = await resolve(id, importer, kind);
16987
- if (resolved) {
16988
- return resolveResult(id, resolved);
16989
- }
16990
- }
16991
- );
16992
- build.onLoad(
16993
- { filter: /.*/, namespace: "browser-external" },
16994
- ({ path: path2 }) => {
16995
- if (isProduction) {
16996
- return {
16997
- contents: "module.exports = {}"
16998
- };
16999
- } else {
17000
- return {
17001
- // Return in CJS to intercept named imports. Use `Object.create` to
17002
- // create the Proxy in the prototype to workaround esbuild issue. Why?
17003
- //
17004
- // In short, esbuild cjs->esm flow:
17005
- // 1. Create empty object using `Object.create(Object.getPrototypeOf(module.exports))`.
17006
- // 2. Assign props of `module.exports` to the object.
17007
- // 3. Return object for ESM use.
17008
- //
17009
- // If we do `module.exports = new Proxy({}, {})`, step 1 returns empty object,
17010
- // step 2 does nothing as there's no props for `module.exports`. The final object
17011
- // is just an empty object.
17012
- //
17013
- // Creating the Proxy in the prototype satisfies step 1 immediately, which means
17014
- // the returned object is a Proxy that we can intercept.
17015
- //
17016
- // Note: Skip keys that are accessed by esbuild and browser devtools.
17017
- contents: `module.exports = Object.create(new Proxy({}, {
17018
- get(_, key) {
17019
- if (
17020
- key !== '__esModule' &&
17021
- key !== '__proto__' &&
17022
- key !== 'constructor' &&
17023
- key !== 'splice'
17024
- ) {
17025
- console.warn(\`Module "${path2}" has been externalized for browser compatibility. Cannot access "${path2}.\${key}" in client code. See https://vite.dev/guide/troubleshooting.html#module-externalized-for-browser-compatibility for more details.\`)
17026
- }
17027
- }
17028
- }))`
17029
- };
17030
- }
17031
- }
17032
- );
17033
- build.onLoad(
17034
- { filter: /.*/, namespace: "optional-peer-dep" },
17035
- ({ path: path2 }) => {
17036
- if (isProduction) {
17037
- return {
17038
- contents: "module.exports = {}"
17039
- };
17040
- } else {
17041
- const [, peerDep, parentDep] = path2.split(":");
17042
- return {
17043
- contents: `throw new Error(\`Could not resolve "${peerDep}" imported by "${parentDep}". Is it installed?\`)`
17044
- };
17045
- }
17046
- }
17047
- );
17048
- }
17049
- };
17050
- }
17051
- const matchesEntireLine = (text) => `^${escapeRegex(text)}$`;
17052
- function esbuildCjsExternalPlugin(externals, platform) {
17053
- return {
17054
- name: "cjs-external",
17055
- setup(build) {
17056
- const filter = new RegExp(externals.map(matchesEntireLine).join("|"));
17057
- build.onResolve({ filter: new RegExp(`^${nonFacadePrefix}`) }, (args) => {
17058
- return {
17059
- path: args.path.slice(nonFacadePrefix.length),
17060
- external: true
17061
- };
17062
- });
17063
- build.onResolve({ filter }, (args) => {
17064
- if (args.kind === "require-call" && platform !== "node") {
17065
- return {
17066
- path: args.path,
17067
- namespace: cjsExternalFacadeNamespace
17068
- };
17069
- }
17070
- return {
17071
- path: args.path,
17072
- external: true
17073
- };
17074
- });
17075
- build.onLoad(
17076
- { filter: /.*/, namespace: cjsExternalFacadeNamespace },
17077
- (args) => ({
17078
- contents: `import * as m from ${JSON.stringify(
17079
- nonFacadePrefix + args.path
17080
- )};module.exports = m;`
17081
- })
17082
- );
17083
- }
17084
- };
17085
- }
17086
-
17087
- const environmentColors = [
17088
- colors$1.blue,
17089
- colors$1.magenta,
17090
- colors$1.green,
17091
- colors$1.gray
17092
- ];
17093
- function getDefaultResolvedEnvironmentOptions(config) {
17094
- return {
17095
- define: config.define,
17096
- resolve: config.resolve,
17097
- consumer: "server",
17098
- optimizeDeps: config.optimizeDeps,
17099
- dev: config.dev,
17100
- build: config.build
17101
- };
17102
- }
17103
- class PartialEnvironment {
17104
- name;
17105
- getTopLevelConfig() {
17106
- return this._topLevelConfig;
17107
- }
17108
- config;
17109
- /**
17110
- * @deprecated use environment.config instead
17111
- **/
17112
- get options() {
17113
- return this._options;
17114
- }
17115
- logger;
17116
- /**
17117
- * @internal
17118
- */
17119
- _options;
17120
- /**
17121
- * @internal
17122
- */
17123
- _topLevelConfig;
17124
- constructor(name, topLevelConfig, options = topLevelConfig.environments[name]) {
17125
- if (!/^[\w$]+$/.test(name)) {
17126
- throw new Error(
17127
- `Invalid environment name "${name}". Environment names must only contain alphanumeric characters and "$", "_".`
17128
- );
17129
- }
17130
- this.name = name;
17131
- this._topLevelConfig = topLevelConfig;
17132
- this._options = options;
17133
- this.config = new Proxy(
17134
- options,
17135
- {
17136
- get: (target, prop) => {
17137
- if (prop === "logger") {
17138
- return this.logger;
17139
- }
17140
- if (prop in target) {
17141
- return this._options[prop];
17142
- }
17143
- return this._topLevelConfig[prop];
17144
- }
17145
- }
17146
- );
17147
- const environment = colors$1.dim(`(${this.name})`);
17148
- const colorIndex = [...this.name].reduce((acc, c) => acc + c.charCodeAt(0), 0) % environmentColors.length;
17149
- const infoColor = environmentColors[colorIndex || 0];
17150
- this.logger = {
17151
- get hasWarned() {
17152
- return topLevelConfig.logger.hasWarned;
17153
- },
17154
- info(msg, opts) {
17155
- return topLevelConfig.logger.info(msg, {
17156
- ...opts,
17157
- environment: infoColor(environment)
17158
- });
17159
- },
17160
- warn(msg, opts) {
17161
- return topLevelConfig.logger.warn(msg, {
17162
- ...opts,
17163
- environment: colors$1.yellow(environment)
17164
- });
17165
- },
17166
- warnOnce(msg, opts) {
17167
- return topLevelConfig.logger.warnOnce(msg, {
17168
- ...opts,
17169
- environment: colors$1.yellow(environment)
17170
- });
17171
- },
17172
- error(msg, opts) {
17173
- return topLevelConfig.logger.error(msg, {
17174
- ...opts,
17175
- environment: colors$1.red(environment)
17176
- });
17177
- },
17178
- clearScreen(type) {
17179
- return topLevelConfig.logger.clearScreen(type);
17180
- },
17181
- hasErrorLogged(error) {
17182
- return topLevelConfig.logger.hasErrorLogged(error);
17183
- }
17184
- };
17185
- }
17186
- }
17187
- class BaseEnvironment extends PartialEnvironment {
17188
- get plugins() {
17189
- if (!this._plugins)
17190
- throw new Error(
17191
- `${this.name} environment.plugins called before initialized`
17192
- );
17193
- return this._plugins;
16498
+ return this._plugins;
17194
16499
  }
17195
16500
  /**
17196
16501
  * @internal
@@ -18172,7 +17477,7 @@ function devToScanEnvironment(environment) {
18172
17477
  }
18173
17478
  };
18174
17479
  }
18175
- const debug$e = createDebugger("vite:deps");
17480
+ const debug$g = createDebugger("vite:deps");
18176
17481
  const htmlTypesRE = /\.(html|vue|svelte|astro|imba)$/;
18177
17482
  const importsRE = /(?<!\/\/.*)(?<=^|;|\*\/)\s*import(?!\s+type)(?:[\w*{}\n\r\t, ]+from)?\s*("[^"]+"|'[^']+')\s*(?=$|;|\/\/|\/\*)/gm;
18178
17483
  function scanImports(environment) {
@@ -18197,7 +17502,7 @@ function scanImports(environment) {
18197
17502
  return;
18198
17503
  }
18199
17504
  if (scanContext.cancelled) return;
18200
- debug$e?.(
17505
+ debug$g?.(
18201
17506
  `Crawling dependencies using entries: ${entries.map((entry) => `
18202
17507
  ${colors$1.dim(entry)}`).join("")}`
18203
17508
  );
@@ -18249,11 +17554,11 @@ function scanImports(environment) {
18249
17554
  }
18250
17555
  throw e;
18251
17556
  }).finally(() => {
18252
- if (debug$e) {
17557
+ if (debug$g) {
18253
17558
  const duration = (performance$1.now() - start).toFixed(2);
18254
17559
  const depsStr = Object.keys(orderedDependencies(deps)).sort().map((id) => `
18255
17560
  ${colors$1.cyan(id)} -> ${colors$1.dim(deps[id])}`).join("") || colors$1.dim("no dependencies found");
18256
- debug$e(`Scan completed in ${duration}ms: ${depsStr}`);
17561
+ debug$g(`Scan completed in ${duration}ms: ${depsStr}`);
18257
17562
  }
18258
17563
  });
18259
17564
  return {
@@ -18767,14 +18072,14 @@ function nestedResolveBasedir(id, basedir, preserveSymlinks = false) {
18767
18072
  return basedir;
18768
18073
  }
18769
18074
 
18770
- const debug$d = createDebugger("vite:deps");
18075
+ const debug$f = createDebugger("vite:deps");
18771
18076
  const jsExtensionRE = /\.js$/i;
18772
18077
  const jsMapExtensionRE = /\.js\.map$/i;
18773
18078
  function isDepOptimizationDisabled(optimizeDeps2) {
18774
18079
  return optimizeDeps2.disabled === true || optimizeDeps2.disabled === "dev" || !!optimizeDeps2.noDiscovery && !optimizeDeps2.include?.length;
18775
18080
  }
18776
18081
  async function optimizeDeps(config, force = config.optimizeDeps.force, asCommand = false) {
18777
- const log = asCommand ? config.logger.info : debug$d;
18082
+ const log = asCommand ? config.logger.info : debug$f;
18778
18083
  config.logger.warn(
18779
18084
  colors$1.yellow(
18780
18085
  "manually calling optimizeDeps is deprecated. This is done automatically and does not need to be called manually."
@@ -18836,7 +18141,7 @@ function addOptimizedDepInfo(metadata, type, depInfo) {
18836
18141
  }
18837
18142
  let firstLoadCachedDepOptimizationMetadata = true;
18838
18143
  async function loadCachedDepOptimizationMetadata(environment, force = environment.config.optimizeDeps.force ?? false, asCommand = false) {
18839
- const log = asCommand ? environment.logger.info : debug$d;
18144
+ const log = asCommand ? environment.logger.info : debug$f;
18840
18145
  if (firstLoadCachedDepOptimizationMetadata) {
18841
18146
  firstLoadCachedDepOptimizationMetadata = false;
18842
18147
  setTimeout(
@@ -18882,7 +18187,7 @@ async function loadCachedDepOptimizationMetadata(environment, force = environmen
18882
18187
  timestamp: true
18883
18188
  });
18884
18189
  }
18885
- debug$d?.(
18190
+ debug$f?.(
18886
18191
  `(${environment.name}) ${colors$1.green(`removing old cache dir ${depsCacheDir}`)}`
18887
18192
  );
18888
18193
  await fsp.rm(depsCacheDir, { recursive: true, force: true });
@@ -18938,7 +18243,7 @@ function runOptimizeDeps(environment, depsInfo) {
18938
18243
  const depsCacheDir = getDepsCacheDir(environment);
18939
18244
  const processingCacheDir = getProcessingDepsCacheDir(environment);
18940
18245
  fs__default.mkdirSync(processingCacheDir, { recursive: true });
18941
- debug$d?.(colors$1.green(`creating package.json in ${processingCacheDir}`));
18246
+ debug$f?.(colors$1.green(`creating package.json in ${processingCacheDir}`));
18942
18247
  fs__default.writeFileSync(
18943
18248
  path$d.resolve(processingCacheDir, "package.json"),
18944
18249
  `{
@@ -18957,7 +18262,7 @@ function runOptimizeDeps(environment, depsInfo) {
18957
18262
  const cleanUp = () => {
18958
18263
  if (!cleaned && !committed) {
18959
18264
  cleaned = true;
18960
- debug$d?.(colors$1.green(`removing cache dir ${processingCacheDir}`));
18265
+ debug$f?.(colors$1.green(`removing cache dir ${processingCacheDir}`));
18961
18266
  try {
18962
18267
  fs__default.rmSync(processingCacheDir, { recursive: true, force: true });
18963
18268
  } catch {
@@ -18975,7 +18280,7 @@ function runOptimizeDeps(environment, depsInfo) {
18975
18280
  }
18976
18281
  committed = true;
18977
18282
  const dataPath = path$d.join(processingCacheDir, METADATA_FILENAME);
18978
- debug$d?.(
18283
+ debug$f?.(
18979
18284
  colors$1.green(`creating ${METADATA_FILENAME} in ${processingCacheDir}`)
18980
18285
  );
18981
18286
  fs__default.writeFileSync(
@@ -18986,25 +18291,25 @@ function runOptimizeDeps(environment, depsInfo) {
18986
18291
  const depsCacheDirPresent = fs__default.existsSync(depsCacheDir);
18987
18292
  if (isWindows$3) {
18988
18293
  if (depsCacheDirPresent) {
18989
- debug$d?.(colors$1.green(`renaming ${depsCacheDir} to ${temporaryPath}`));
18294
+ debug$f?.(colors$1.green(`renaming ${depsCacheDir} to ${temporaryPath}`));
18990
18295
  await safeRename(depsCacheDir, temporaryPath);
18991
18296
  }
18992
- debug$d?.(
18297
+ debug$f?.(
18993
18298
  colors$1.green(`renaming ${processingCacheDir} to ${depsCacheDir}`)
18994
18299
  );
18995
18300
  await safeRename(processingCacheDir, depsCacheDir);
18996
18301
  } else {
18997
18302
  if (depsCacheDirPresent) {
18998
- debug$d?.(colors$1.green(`renaming ${depsCacheDir} to ${temporaryPath}`));
18303
+ debug$f?.(colors$1.green(`renaming ${depsCacheDir} to ${temporaryPath}`));
18999
18304
  fs__default.renameSync(depsCacheDir, temporaryPath);
19000
18305
  }
19001
- debug$d?.(
18306
+ debug$f?.(
19002
18307
  colors$1.green(`renaming ${processingCacheDir} to ${depsCacheDir}`)
19003
18308
  );
19004
18309
  fs__default.renameSync(processingCacheDir, depsCacheDir);
19005
18310
  }
19006
18311
  if (depsCacheDirPresent) {
19007
- debug$d?.(colors$1.green(`removing cache temp dir ${temporaryPath}`));
18312
+ debug$f?.(colors$1.green(`removing cache temp dir ${temporaryPath}`));
19008
18313
  fsp.rm(temporaryPath, { recursive: true, force: true });
19009
18314
  }
19010
18315
  }
@@ -19103,628 +18408,1325 @@ function runOptimizeDeps(environment, depsInfo) {
19103
18408
  }
19104
18409
  }
19105
18410
  }
19106
- debug$d?.(
19107
- `Dependencies bundled in ${(performance$1.now() - start).toFixed(2)}ms`
19108
- );
19109
- return successfulResult;
19110
- }).catch((e) => {
19111
- if (e.errors && e.message.includes("The build was canceled")) {
19112
- return cancelledResult;
19113
- }
19114
- throw e;
19115
- }).finally(() => {
19116
- return disposeContext();
19117
- });
19118
- });
19119
- runResult.catch(() => {
19120
- cleanUp();
19121
- });
19122
- return {
19123
- async cancel() {
19124
- optimizerContext.cancelled = true;
19125
- const { context } = await preparedRun;
19126
- await context?.cancel();
19127
- cleanUp();
18411
+ debug$f?.(
18412
+ `Dependencies bundled in ${(performance$1.now() - start).toFixed(2)}ms`
18413
+ );
18414
+ return successfulResult;
18415
+ }).catch((e) => {
18416
+ if (e.errors && e.message.includes("The build was canceled")) {
18417
+ return cancelledResult;
18418
+ }
18419
+ throw e;
18420
+ }).finally(() => {
18421
+ return disposeContext();
18422
+ });
18423
+ });
18424
+ runResult.catch(() => {
18425
+ cleanUp();
18426
+ });
18427
+ return {
18428
+ async cancel() {
18429
+ optimizerContext.cancelled = true;
18430
+ const { context } = await preparedRun;
18431
+ await context?.cancel();
18432
+ cleanUp();
18433
+ },
18434
+ result: runResult
18435
+ };
18436
+ }
18437
+ async function prepareEsbuildOptimizerRun(environment, depsInfo, processingCacheDir, optimizerContext) {
18438
+ const flatIdDeps = {};
18439
+ const idToExports = {};
18440
+ const { optimizeDeps: optimizeDeps2 } = environment.config;
18441
+ const { plugins: pluginsFromConfig = [], ...esbuildOptions } = optimizeDeps2.esbuildOptions ?? {};
18442
+ await Promise.all(
18443
+ Object.keys(depsInfo).map(async (id) => {
18444
+ const src = depsInfo[id].src;
18445
+ const exportsData = await (depsInfo[id].exportsData ?? extractExportsData(environment, src));
18446
+ if (exportsData.jsxLoader && !esbuildOptions.loader?.[".js"]) {
18447
+ esbuildOptions.loader = {
18448
+ ".js": "jsx",
18449
+ ...esbuildOptions.loader
18450
+ };
18451
+ }
18452
+ const flatId = flattenId(id);
18453
+ flatIdDeps[flatId] = src;
18454
+ idToExports[id] = exportsData;
18455
+ })
18456
+ );
18457
+ if (optimizerContext.cancelled) return { context: void 0, idToExports };
18458
+ const define = {
18459
+ "process.env.NODE_ENV": environment.config.keepProcessEnv ? (
18460
+ // define process.env.NODE_ENV even for keepProcessEnv === true
18461
+ // as esbuild will replace it automatically when `platform` is `'browser'`
18462
+ "process.env.NODE_ENV"
18463
+ ) : JSON.stringify(process.env.NODE_ENV || environment.config.mode)
18464
+ };
18465
+ const platform = optimizeDeps2.esbuildOptions?.platform ?? // We generally don't want to use platform 'neutral', as esbuild has custom handling
18466
+ // when the platform is 'node' or 'browser' that can't be emulated by using mainFields
18467
+ // and conditions
18468
+ (environment.config.consumer === "client" || environment.config.ssr.target === "webworker" ? "browser" : "node");
18469
+ const external = [...optimizeDeps2.exclude ?? []];
18470
+ const plugins = [...pluginsFromConfig];
18471
+ if (external.length) {
18472
+ plugins.push(esbuildCjsExternalPlugin(external, platform));
18473
+ }
18474
+ plugins.push(esbuildDepPlugin(environment, flatIdDeps, external));
18475
+ const context = await esbuild.context({
18476
+ absWorkingDir: process.cwd(),
18477
+ entryPoints: Object.keys(flatIdDeps),
18478
+ bundle: true,
18479
+ platform,
18480
+ define,
18481
+ format: "esm",
18482
+ // See https://github.com/evanw/esbuild/issues/1921#issuecomment-1152991694
18483
+ banner: platform === "node" ? {
18484
+ js: `import { createRequire } from 'module';const require = createRequire(import.meta.url);`
18485
+ } : void 0,
18486
+ target: ESBUILD_MODULES_TARGET,
18487
+ external,
18488
+ logLevel: "error",
18489
+ splitting: true,
18490
+ sourcemap: true,
18491
+ outdir: processingCacheDir,
18492
+ ignoreAnnotations: true,
18493
+ metafile: true,
18494
+ plugins,
18495
+ charset: "utf8",
18496
+ ...esbuildOptions,
18497
+ supported: {
18498
+ ...defaultEsbuildSupported,
18499
+ ...esbuildOptions.supported
18500
+ }
18501
+ });
18502
+ return { context, idToExports };
18503
+ }
18504
+ async function addManuallyIncludedOptimizeDeps(environment, deps) {
18505
+ const { logger } = environment;
18506
+ const { optimizeDeps: optimizeDeps2 } = environment.config;
18507
+ const optimizeDepsInclude = optimizeDeps2.include ?? [];
18508
+ if (optimizeDepsInclude.length) {
18509
+ const unableToOptimize = (id, msg) => {
18510
+ if (optimizeDepsInclude.includes(id)) {
18511
+ logger.warn(
18512
+ `${msg}: ${colors$1.cyan(id)}, present in ${environment.name} 'optimizeDeps.include'`
18513
+ );
18514
+ }
18515
+ };
18516
+ const includes = [...optimizeDepsInclude];
18517
+ for (let i = 0; i < includes.length; i++) {
18518
+ const id = includes[i];
18519
+ if (isDynamicPattern(id)) {
18520
+ const globIds = expandGlobIds(id, environment.getTopLevelConfig());
18521
+ includes.splice(i, 1, ...globIds);
18522
+ i += globIds.length - 1;
18523
+ }
18524
+ }
18525
+ const resolve = createOptimizeDepsIncludeResolver(environment);
18526
+ for (const id of includes) {
18527
+ const normalizedId = normalizeId(id);
18528
+ if (!deps[normalizedId]) {
18529
+ const entry = await resolve(id);
18530
+ if (entry) {
18531
+ if (isOptimizable(entry, optimizeDeps2)) {
18532
+ deps[normalizedId] = entry;
18533
+ } else {
18534
+ unableToOptimize(id, "Cannot optimize dependency");
18535
+ }
18536
+ } else {
18537
+ unableToOptimize(id, "Failed to resolve dependency");
18538
+ }
18539
+ }
18540
+ }
18541
+ }
18542
+ }
18543
+ function depsFromOptimizedDepInfo(depsInfo) {
18544
+ const obj = {};
18545
+ for (const key in depsInfo) {
18546
+ obj[key] = depsInfo[key].src;
18547
+ }
18548
+ return obj;
18549
+ }
18550
+ function getOptimizedDepPath(environment, id) {
18551
+ return normalizePath$3(
18552
+ path$d.resolve(getDepsCacheDir(environment), flattenId(id) + ".js")
18553
+ );
18554
+ }
18555
+ function getDepsCacheSuffix(environment) {
18556
+ return environment.name === "client" ? "" : `_${environment.name}`;
18557
+ }
18558
+ function getDepsCacheDir(environment) {
18559
+ return getDepsCacheDirPrefix(environment) + getDepsCacheSuffix(environment);
18560
+ }
18561
+ function getProcessingDepsCacheDir(environment) {
18562
+ return getDepsCacheDirPrefix(environment) + getDepsCacheSuffix(environment) + getTempSuffix();
18563
+ }
18564
+ function getTempSuffix() {
18565
+ return "_temp_" + getHash(
18566
+ `${process.pid}:${Date.now().toString()}:${Math.random().toString(16).slice(2)}`
18567
+ );
18568
+ }
18569
+ function getDepsCacheDirPrefix(environment) {
18570
+ return normalizePath$3(path$d.resolve(environment.config.cacheDir, "deps"));
18571
+ }
18572
+ function createIsOptimizedDepFile(environment) {
18573
+ const depsCacheDirPrefix = getDepsCacheDirPrefix(environment);
18574
+ return (id) => id.startsWith(depsCacheDirPrefix);
18575
+ }
18576
+ function createIsOptimizedDepUrl(environment) {
18577
+ const { root } = environment.config;
18578
+ const depsCacheDir = getDepsCacheDirPrefix(environment);
18579
+ const depsCacheDirRelative = normalizePath$3(path$d.relative(root, depsCacheDir));
18580
+ const depsCacheDirPrefix = depsCacheDirRelative.startsWith("../") ? (
18581
+ // if the cache directory is outside root, the url prefix would be something
18582
+ // like '/@fs/absolute/path/to/node_modules/.vite'
18583
+ `/@fs/${removeLeadingSlash(normalizePath$3(depsCacheDir))}`
18584
+ ) : (
18585
+ // if the cache directory is inside root, the url prefix would be something
18586
+ // like '/node_modules/.vite'
18587
+ `/${depsCacheDirRelative}`
18588
+ );
18589
+ return function isOptimizedDepUrl(url) {
18590
+ return url.startsWith(depsCacheDirPrefix);
18591
+ };
18592
+ }
18593
+ function parseDepsOptimizerMetadata(jsonMetadata, depsCacheDir) {
18594
+ const { hash, lockfileHash, configHash, browserHash, optimized, chunks } = JSON.parse(jsonMetadata, (key, value) => {
18595
+ if (key === "file" || key === "src") {
18596
+ return normalizePath$3(path$d.resolve(depsCacheDir, value));
18597
+ }
18598
+ return value;
18599
+ });
18600
+ if (!chunks || Object.values(optimized).some((depInfo) => !depInfo.fileHash)) {
18601
+ return;
18602
+ }
18603
+ const metadata = {
18604
+ hash,
18605
+ lockfileHash,
18606
+ configHash,
18607
+ browserHash,
18608
+ optimized: {},
18609
+ discovered: {},
18610
+ chunks: {},
18611
+ depInfoList: []
18612
+ };
18613
+ for (const id of Object.keys(optimized)) {
18614
+ addOptimizedDepInfo(metadata, "optimized", {
18615
+ ...optimized[id],
18616
+ id,
18617
+ browserHash
18618
+ });
18619
+ }
18620
+ for (const id of Object.keys(chunks)) {
18621
+ addOptimizedDepInfo(metadata, "chunks", {
18622
+ ...chunks[id],
18623
+ id,
18624
+ browserHash,
18625
+ needsInterop: false
18626
+ });
18627
+ }
18628
+ return metadata;
18629
+ }
18630
+ function stringifyDepsOptimizerMetadata(metadata, depsCacheDir) {
18631
+ const { hash, configHash, lockfileHash, browserHash, optimized, chunks } = metadata;
18632
+ return JSON.stringify(
18633
+ {
18634
+ hash,
18635
+ configHash,
18636
+ lockfileHash,
18637
+ browserHash,
18638
+ optimized: Object.fromEntries(
18639
+ Object.values(optimized).map(
18640
+ ({ id, src, file, fileHash, needsInterop: needsInterop2 }) => [
18641
+ id,
18642
+ {
18643
+ src,
18644
+ file,
18645
+ fileHash,
18646
+ needsInterop: needsInterop2
18647
+ }
18648
+ ]
18649
+ )
18650
+ ),
18651
+ chunks: Object.fromEntries(
18652
+ Object.values(chunks).map(({ id, file }) => [id, { file }])
18653
+ )
18654
+ },
18655
+ (key, value) => {
18656
+ if (key === "file" || key === "src") {
18657
+ return normalizePath$3(path$d.relative(depsCacheDir, value));
18658
+ }
18659
+ return value;
18660
+ },
18661
+ 2
18662
+ );
18663
+ }
18664
+ function esbuildOutputFromId(outputs, id, cacheDirOutputPath) {
18665
+ const cwd = process.cwd();
18666
+ const flatId = flattenId(id) + ".js";
18667
+ const normalizedOutputPath = normalizePath$3(
18668
+ path$d.relative(cwd, path$d.join(cacheDirOutputPath, flatId))
18669
+ );
18670
+ const output = outputs[normalizedOutputPath];
18671
+ if (output) {
18672
+ return output;
18673
+ }
18674
+ for (const [key, value] of Object.entries(outputs)) {
18675
+ if (normalizePath$3(path$d.relative(cwd, key)) === normalizedOutputPath) {
18676
+ return value;
18677
+ }
18678
+ }
18679
+ }
18680
+ async function extractExportsData(environment, filePath) {
18681
+ await init;
18682
+ const { optimizeDeps: optimizeDeps2 } = environment.config;
18683
+ const esbuildOptions = optimizeDeps2.esbuildOptions ?? {};
18684
+ if (optimizeDeps2.extensions?.some((ext) => filePath.endsWith(ext))) {
18685
+ const result = await build$b({
18686
+ ...esbuildOptions,
18687
+ entryPoints: [filePath],
18688
+ write: false,
18689
+ format: "esm"
18690
+ });
18691
+ const [, exports2, , hasModuleSyntax2] = parse$e(result.outputFiles[0].text);
18692
+ return {
18693
+ hasModuleSyntax: hasModuleSyntax2,
18694
+ exports: exports2.map((e) => e.n)
18695
+ };
18696
+ }
18697
+ let parseResult;
18698
+ let usedJsxLoader = false;
18699
+ const entryContent = await fsp.readFile(filePath, "utf-8");
18700
+ try {
18701
+ parseResult = parse$e(entryContent);
18702
+ } catch {
18703
+ const loader = esbuildOptions.loader?.[path$d.extname(filePath)] || "jsx";
18704
+ debug$f?.(
18705
+ `Unable to parse: ${filePath}.
18706
+ Trying again with a ${loader} transform.`
18707
+ );
18708
+ const transformed = await transformWithEsbuild(
18709
+ entryContent,
18710
+ filePath,
18711
+ { loader },
18712
+ void 0,
18713
+ environment.config
18714
+ );
18715
+ parseResult = parse$e(transformed.code);
18716
+ usedJsxLoader = true;
18717
+ }
18718
+ const [, exports, , hasModuleSyntax] = parseResult;
18719
+ const exportsData = {
18720
+ hasModuleSyntax,
18721
+ exports: exports.map((e) => e.n),
18722
+ jsxLoader: usedJsxLoader
18723
+ };
18724
+ return exportsData;
18725
+ }
18726
+ function needsInterop(environment, id, exportsData, output) {
18727
+ if (environment.config.optimizeDeps.needsInterop?.includes(id)) {
18728
+ return true;
18729
+ }
18730
+ const { hasModuleSyntax, exports } = exportsData;
18731
+ if (!hasModuleSyntax) {
18732
+ return true;
18733
+ }
18734
+ if (output) {
18735
+ const generatedExports = output.exports;
18736
+ if (isSingleDefaultExport(generatedExports) && !isSingleDefaultExport(exports)) {
18737
+ return true;
18738
+ }
18739
+ }
18740
+ return false;
18741
+ }
18742
+ function isSingleDefaultExport(exports) {
18743
+ return exports.length === 1 && exports[0] === "default";
18744
+ }
18745
+ const lockfileFormats = [
18746
+ {
18747
+ path: "node_modules/.package-lock.json",
18748
+ checkPatchesDir: "patches",
18749
+ manager: "npm"
18750
+ },
18751
+ {
18752
+ // Yarn non-PnP
18753
+ path: "node_modules/.yarn-state.yml",
18754
+ checkPatchesDir: false,
18755
+ manager: "yarn"
18756
+ },
18757
+ {
18758
+ // Yarn v3+ PnP
18759
+ path: ".pnp.cjs",
18760
+ checkPatchesDir: ".yarn/patches",
18761
+ manager: "yarn"
18762
+ },
18763
+ {
18764
+ // Yarn v2 PnP
18765
+ path: ".pnp.js",
18766
+ checkPatchesDir: ".yarn/patches",
18767
+ manager: "yarn"
18768
+ },
18769
+ {
18770
+ // yarn 1
18771
+ path: "node_modules/.yarn-integrity",
18772
+ checkPatchesDir: "patches",
18773
+ manager: "yarn"
18774
+ },
18775
+ {
18776
+ path: "node_modules/.pnpm/lock.yaml",
18777
+ // Included in lockfile
18778
+ checkPatchesDir: false,
18779
+ manager: "pnpm"
18780
+ },
18781
+ {
18782
+ path: "bun.lock",
18783
+ checkPatchesDir: "patches",
18784
+ manager: "bun"
18785
+ },
18786
+ {
18787
+ path: "bun.lockb",
18788
+ checkPatchesDir: "patches",
18789
+ manager: "bun"
18790
+ }
18791
+ ].sort((_, { manager }) => {
18792
+ return process.env.npm_config_user_agent?.startsWith(manager) ? 1 : -1;
18793
+ });
18794
+ const lockfilePaths = lockfileFormats.map((l) => l.path);
18795
+ function getConfigHash(environment) {
18796
+ const { config } = environment;
18797
+ const { optimizeDeps: optimizeDeps2 } = config;
18798
+ const content = JSON.stringify(
18799
+ {
18800
+ define: !config.keepProcessEnv ? process.env.NODE_ENV || config.mode : null,
18801
+ root: config.root,
18802
+ resolve: config.resolve,
18803
+ assetsInclude: config.assetsInclude,
18804
+ plugins: config.plugins.map((p) => p.name),
18805
+ optimizeDeps: {
18806
+ include: optimizeDeps2.include ? unique(optimizeDeps2.include).sort() : void 0,
18807
+ exclude: optimizeDeps2.exclude ? unique(optimizeDeps2.exclude).sort() : void 0,
18808
+ esbuildOptions: {
18809
+ ...optimizeDeps2.esbuildOptions,
18810
+ plugins: optimizeDeps2.esbuildOptions?.plugins?.map((p) => p.name)
18811
+ }
18812
+ }
18813
+ },
18814
+ (_, value) => {
18815
+ if (typeof value === "function" || value instanceof RegExp) {
18816
+ return value.toString();
18817
+ }
18818
+ return value;
18819
+ }
18820
+ );
18821
+ return getHash(content);
18822
+ }
18823
+ function getLockfileHash(environment) {
18824
+ const lockfilePath = lookupFile(environment.config.root, lockfilePaths);
18825
+ let content = lockfilePath ? fs__default.readFileSync(lockfilePath, "utf-8") : "";
18826
+ if (lockfilePath) {
18827
+ const normalizedLockfilePath = lockfilePath.replaceAll("\\", "/");
18828
+ const lockfileFormat = lockfileFormats.find(
18829
+ (f) => normalizedLockfilePath.endsWith(f.path)
18830
+ );
18831
+ if (lockfileFormat.checkPatchesDir) {
18832
+ const baseDir = lockfilePath.slice(0, -lockfileFormat.path.length);
18833
+ const fullPath = path$d.join(
18834
+ baseDir,
18835
+ lockfileFormat.checkPatchesDir
18836
+ );
18837
+ const stat = tryStatSync(fullPath);
18838
+ if (stat?.isDirectory()) {
18839
+ content += stat.mtimeMs.toString();
18840
+ }
18841
+ }
18842
+ }
18843
+ return getHash(content);
18844
+ }
18845
+ function getDepHash(environment) {
18846
+ const lockfileHash = getLockfileHash(environment);
18847
+ const configHash = getConfigHash(environment);
18848
+ const hash = getHash(lockfileHash + configHash);
18849
+ return {
18850
+ hash,
18851
+ lockfileHash,
18852
+ configHash
18853
+ };
18854
+ }
18855
+ function getOptimizedBrowserHash(hash, deps, timestamp = "") {
18856
+ return getHash(hash + JSON.stringify(deps) + timestamp);
18857
+ }
18858
+ function optimizedDepInfoFromId(metadata, id) {
18859
+ return metadata.optimized[id] || metadata.discovered[id] || metadata.chunks[id];
18860
+ }
18861
+ function optimizedDepInfoFromFile(metadata, file) {
18862
+ return metadata.depInfoList.find((depInfo) => depInfo.file === file);
18863
+ }
18864
+ function findOptimizedDepInfoInRecord(dependenciesInfo, callbackFn) {
18865
+ for (const o of Object.keys(dependenciesInfo)) {
18866
+ const info = dependenciesInfo[o];
18867
+ if (callbackFn(info, o)) {
18868
+ return info;
18869
+ }
18870
+ }
18871
+ }
18872
+ async function optimizedDepNeedsInterop(environment, metadata, file) {
18873
+ const depInfo = optimizedDepInfoFromFile(metadata, file);
18874
+ if (depInfo?.src && depInfo.needsInterop === void 0) {
18875
+ depInfo.exportsData ??= extractExportsData(environment, depInfo.src);
18876
+ depInfo.needsInterop = needsInterop(
18877
+ environment,
18878
+ depInfo.id,
18879
+ await depInfo.exportsData
18880
+ );
18881
+ }
18882
+ return depInfo?.needsInterop;
18883
+ }
18884
+ const MAX_TEMP_DIR_AGE_MS = 24 * 60 * 60 * 1e3;
18885
+ async function cleanupDepsCacheStaleDirs(config) {
18886
+ try {
18887
+ const cacheDir = path$d.resolve(config.cacheDir);
18888
+ if (fs__default.existsSync(cacheDir)) {
18889
+ const dirents = await fsp.readdir(cacheDir, { withFileTypes: true });
18890
+ for (const dirent of dirents) {
18891
+ if (dirent.isDirectory() && dirent.name.includes("_temp_")) {
18892
+ const tempDirPath = path$d.resolve(config.cacheDir, dirent.name);
18893
+ const stats = await fsp.stat(tempDirPath).catch(() => null);
18894
+ if (stats?.mtime && Date.now() - stats.mtime.getTime() > MAX_TEMP_DIR_AGE_MS) {
18895
+ debug$f?.(`removing stale cache temp dir ${tempDirPath}`);
18896
+ await fsp.rm(tempDirPath, { recursive: true, force: true });
18897
+ }
18898
+ }
18899
+ }
18900
+ }
18901
+ } catch (err) {
18902
+ config.logger.error(err);
18903
+ }
18904
+ }
18905
+ const GRACEFUL_RENAME_TIMEOUT = 5e3;
18906
+ const safeRename = promisify$4(function gracefulRename(from, to, cb) {
18907
+ const start = Date.now();
18908
+ let backoff = 0;
18909
+ fs__default.rename(from, to, function CB(er) {
18910
+ if (er && (er.code === "EACCES" || er.code === "EPERM") && Date.now() - start < GRACEFUL_RENAME_TIMEOUT) {
18911
+ setTimeout(function() {
18912
+ fs__default.stat(to, function(stater, _st) {
18913
+ if (stater && stater.code === "ENOENT") fs__default.rename(from, to, CB);
18914
+ else CB(er);
18915
+ });
18916
+ }, backoff);
18917
+ if (backoff < 100) backoff += 10;
18918
+ return;
18919
+ }
18920
+ cb(er);
18921
+ });
18922
+ });
18923
+
18924
+ var index$1 = {
18925
+ __proto__: null,
18926
+ addManuallyIncludedOptimizeDeps: addManuallyIncludedOptimizeDeps,
18927
+ addOptimizedDepInfo: addOptimizedDepInfo,
18928
+ cleanupDepsCacheStaleDirs: cleanupDepsCacheStaleDirs,
18929
+ createIsOptimizedDepFile: createIsOptimizedDepFile,
18930
+ createIsOptimizedDepUrl: createIsOptimizedDepUrl,
18931
+ depsFromOptimizedDepInfo: depsFromOptimizedDepInfo,
18932
+ depsLogString: depsLogString,
18933
+ discoverProjectDependencies: discoverProjectDependencies,
18934
+ extractExportsData: extractExportsData,
18935
+ getDepsCacheDir: getDepsCacheDir,
18936
+ getOptimizedDepPath: getOptimizedDepPath,
18937
+ initDepsOptimizerMetadata: initDepsOptimizerMetadata,
18938
+ isDepOptimizationDisabled: isDepOptimizationDisabled,
18939
+ loadCachedDepOptimizationMetadata: loadCachedDepOptimizationMetadata,
18940
+ optimizeDeps: optimizeDeps,
18941
+ optimizeExplicitEnvironmentDeps: optimizeExplicitEnvironmentDeps,
18942
+ optimizedDepInfoFromFile: optimizedDepInfoFromFile,
18943
+ optimizedDepInfoFromId: optimizedDepInfoFromId,
18944
+ optimizedDepNeedsInterop: optimizedDepNeedsInterop,
18945
+ runOptimizeDeps: runOptimizeDeps,
18946
+ toDiscoveredDependencies: toDiscoveredDependencies
18947
+ };
18948
+
18949
+ const debug$e = createDebugger("vite:external");
18950
+ const isExternalCache = /* @__PURE__ */ new WeakMap();
18951
+ function shouldExternalize(environment, id, importer) {
18952
+ let isExternal = isExternalCache.get(environment);
18953
+ if (!isExternal) {
18954
+ isExternal = createIsExternal(environment);
18955
+ isExternalCache.set(environment, isExternal);
18956
+ }
18957
+ return isExternal(id, importer);
18958
+ }
18959
+ function createIsConfiguredAsExternal(environment) {
18960
+ const { config } = environment;
18961
+ const { root, resolve } = config;
18962
+ const { external, noExternal } = resolve;
18963
+ const noExternalFilter = typeof noExternal !== "boolean" && !(Array.isArray(noExternal) && noExternal.length === 0) && createFilter(void 0, noExternal, { resolve: false });
18964
+ const targetConditions = resolve.externalConditions;
18965
+ const resolveOptions = {
18966
+ ...resolve,
18967
+ root,
18968
+ isProduction: false,
18969
+ isBuild: true,
18970
+ conditions: targetConditions
18971
+ };
18972
+ const isExternalizable = (id, importer, configuredAsExternal) => {
18973
+ if (!bareImportRE.test(id) || id.includes("\0")) {
18974
+ return false;
18975
+ }
18976
+ try {
18977
+ const resolved = tryNodeResolve(
18978
+ id,
18979
+ // Skip passing importer in build to avoid externalizing non-hoisted dependencies
18980
+ // unresolvable from root (which would be unresolvable from output bundles also)
18981
+ config.command === "build" ? void 0 : importer,
18982
+ resolveOptions,
18983
+ void 0,
18984
+ false
18985
+ );
18986
+ if (!resolved) {
18987
+ return false;
18988
+ }
18989
+ if (!configuredAsExternal && !isInNodeModules$1(resolved.id)) {
18990
+ return false;
18991
+ }
18992
+ return canExternalizeFile(resolved.id);
18993
+ } catch {
18994
+ debug$e?.(
18995
+ `Failed to node resolve "${id}". Skipping externalizing it by default.`
18996
+ );
18997
+ return false;
18998
+ }
18999
+ };
19000
+ return (id, importer) => {
19001
+ if (
19002
+ // If this id is defined as external, force it as external
19003
+ // Note that individual package entries are allowed in `external`
19004
+ external !== true && external.includes(id)
19005
+ ) {
19006
+ return true;
19007
+ }
19008
+ const pkgName = getNpmPackageName(id);
19009
+ if (!pkgName) {
19010
+ return isExternalizable(id, importer, false);
19011
+ }
19012
+ if (
19013
+ // A package name in ssr.external externalizes every
19014
+ // externalizable package entry
19015
+ external !== true && external.includes(pkgName)
19016
+ ) {
19017
+ return isExternalizable(id, importer, true);
19018
+ }
19019
+ if (typeof noExternal === "boolean") {
19020
+ return !noExternal;
19021
+ }
19022
+ if (noExternalFilter && !noExternalFilter(pkgName)) {
19023
+ return false;
19024
+ }
19025
+ return isExternalizable(id, importer, external === true);
19026
+ };
19027
+ }
19028
+ function createIsExternal(environment) {
19029
+ const processedIds = /* @__PURE__ */ new Map();
19030
+ const isConfiguredAsExternal = createIsConfiguredAsExternal(environment);
19031
+ return (id, importer) => {
19032
+ if (processedIds.has(id)) {
19033
+ return processedIds.get(id);
19034
+ }
19035
+ let isExternal = false;
19036
+ if (id[0] !== "." && !path$d.isAbsolute(id)) {
19037
+ isExternal = isBuiltin(environment.config.resolve.builtins, id) || isConfiguredAsExternal(id, importer);
19038
+ }
19039
+ processedIds.set(id, isExternal);
19040
+ return isExternal;
19041
+ };
19042
+ }
19043
+ function canExternalizeFile(filePath) {
19044
+ const ext = path$d.extname(filePath);
19045
+ return !ext || ext === ".js" || ext === ".mjs" || ext === ".cjs";
19046
+ }
19047
+
19048
+ const normalizedClientEntry$1 = normalizePath$3(CLIENT_ENTRY);
19049
+ const normalizedEnvEntry$1 = normalizePath$3(ENV_ENTRY);
19050
+ const ERR_RESOLVE_PACKAGE_ENTRY_FAIL = "ERR_RESOLVE_PACKAGE_ENTRY_FAIL";
19051
+ const browserExternalId = "__vite-browser-external";
19052
+ const optionalPeerDepId = "__vite-optional-peer-dep";
19053
+ const subpathImportsPrefix = "#";
19054
+ const startsWithWordCharRE = /^\w/;
19055
+ const debug$d = createDebugger("vite:resolve-details", {
19056
+ onlyWhenFocused: true
19057
+ });
19058
+ function resolvePlugin(resolveOptions) {
19059
+ const { root, isProduction, asSrc, preferRelative = false } = resolveOptions;
19060
+ const rootInRoot = tryStatSync(path$d.join(root, root))?.isDirectory() ?? false;
19061
+ return {
19062
+ name: "vite:resolve",
19063
+ async resolveId(id, importer, resolveOpts) {
19064
+ if (id[0] === "\0" || id.startsWith("virtual:") || // When injected directly in html/client code
19065
+ id.startsWith("/virtual:")) {
19066
+ return;
19067
+ }
19068
+ const depsOptimizer = resolveOptions.optimizeDeps && this.environment.mode === "dev" ? this.environment.depsOptimizer : void 0;
19069
+ if (id.startsWith(browserExternalId)) {
19070
+ return id;
19071
+ }
19072
+ const isRequire = resolveOpts.custom?.["node-resolve"]?.isRequire ?? false;
19073
+ const currentEnvironmentOptions = this.environment.config;
19074
+ const options = {
19075
+ isRequire,
19076
+ ...currentEnvironmentOptions.resolve,
19077
+ ...resolveOptions,
19078
+ // plugin options + resolve options overrides
19079
+ scan: resolveOpts.scan ?? resolveOptions.scan
19080
+ };
19081
+ const resolvedImports = resolveSubpathImports(id, importer, options);
19082
+ if (resolvedImports) {
19083
+ id = resolvedImports;
19084
+ if (resolveOpts.custom?.["vite:import-glob"]?.isSubImportsPattern) {
19085
+ return normalizePath$3(path$d.join(root, id));
19086
+ }
19087
+ }
19088
+ let res;
19089
+ if (asSrc && depsOptimizer?.isOptimizedDepUrl(id)) {
19090
+ const optimizedPath = id.startsWith(FS_PREFIX) ? fsPathFromId(id) : normalizePath$3(path$d.resolve(root, id.slice(1)));
19091
+ return optimizedPath;
19092
+ }
19093
+ if (asSrc && id.startsWith(FS_PREFIX)) {
19094
+ res = fsPathFromId(id);
19095
+ debug$d?.(`[@fs] ${colors$1.cyan(id)} -> ${colors$1.dim(res)}`);
19096
+ return ensureVersionQuery(res, id, options, depsOptimizer);
19097
+ }
19098
+ if (asSrc && id[0] === "/" && (rootInRoot || !id.startsWith(withTrailingSlash(root)))) {
19099
+ const fsPath = path$d.resolve(root, id.slice(1));
19100
+ if (res = tryFsResolve(fsPath, options)) {
19101
+ debug$d?.(`[url] ${colors$1.cyan(id)} -> ${colors$1.dim(res)}`);
19102
+ return ensureVersionQuery(res, id, options, depsOptimizer);
19103
+ }
19104
+ }
19105
+ if (id[0] === "." || (preferRelative || importer?.endsWith(".html")) && startsWithWordCharRE.test(id)) {
19106
+ const basedir = importer ? path$d.dirname(importer) : process.cwd();
19107
+ const fsPath = path$d.resolve(basedir, id);
19108
+ const normalizedFsPath = normalizePath$3(fsPath);
19109
+ if (depsOptimizer?.isOptimizedDepFile(normalizedFsPath)) {
19110
+ if (!options.isBuild && !DEP_VERSION_RE.test(normalizedFsPath)) {
19111
+ const browserHash = optimizedDepInfoFromFile(
19112
+ depsOptimizer.metadata,
19113
+ normalizedFsPath
19114
+ )?.browserHash;
19115
+ if (browserHash) {
19116
+ return injectQuery(normalizedFsPath, `v=${browserHash}`);
19117
+ }
19118
+ }
19119
+ return normalizedFsPath;
19120
+ }
19121
+ if (options.mainFields.includes("browser") && (res = tryResolveBrowserMapping(fsPath, importer, options, true))) {
19122
+ return res;
19123
+ }
19124
+ if (res = tryFsResolve(fsPath, options)) {
19125
+ res = ensureVersionQuery(res, id, options, depsOptimizer);
19126
+ debug$d?.(`[relative] ${colors$1.cyan(id)} -> ${colors$1.dim(res)}`);
19127
+ if (!options.idOnly && !options.scan && options.isBuild) {
19128
+ const resPkg = findNearestPackageData(
19129
+ path$d.dirname(res),
19130
+ options.packageCache
19131
+ );
19132
+ if (resPkg) {
19133
+ return {
19134
+ id: res,
19135
+ moduleSideEffects: resPkg.hasSideEffects(res)
19136
+ };
19137
+ }
19138
+ }
19139
+ return res;
19140
+ }
19141
+ }
19142
+ if (id.startsWith("file://")) {
19143
+ const { file, postfix } = splitFileAndPostfix(id);
19144
+ id = fileURLToPath$1(file) + postfix;
19145
+ }
19146
+ if (isWindows$3 && id[0] === "/") {
19147
+ const basedir = importer ? path$d.dirname(importer) : process.cwd();
19148
+ const fsPath = path$d.resolve(basedir, id);
19149
+ if (res = tryFsResolve(fsPath, options)) {
19150
+ debug$d?.(`[drive-relative] ${colors$1.cyan(id)} -> ${colors$1.dim(res)}`);
19151
+ return ensureVersionQuery(res, id, options, depsOptimizer);
19152
+ }
19153
+ }
19154
+ if (isNonDriveRelativeAbsolutePath(id) && (res = tryFsResolve(id, options))) {
19155
+ debug$d?.(`[fs] ${colors$1.cyan(id)} -> ${colors$1.dim(res)}`);
19156
+ return ensureVersionQuery(res, id, options, depsOptimizer);
19157
+ }
19158
+ if (isExternalUrl(id)) {
19159
+ return options.idOnly ? id : { id, external: true };
19160
+ }
19161
+ if (isDataUrl(id)) {
19162
+ return null;
19163
+ }
19164
+ if (bareImportRE.test(id)) {
19165
+ const external = options.externalize && options.isBuild && currentEnvironmentOptions.consumer === "server" && shouldExternalize(this.environment, id, importer);
19166
+ if (!external && asSrc && depsOptimizer && !options.scan && (res = await tryOptimizedResolve(
19167
+ depsOptimizer,
19168
+ id,
19169
+ importer,
19170
+ options.preserveSymlinks,
19171
+ options.packageCache
19172
+ ))) {
19173
+ return res;
19174
+ }
19175
+ if (options.mainFields.includes("browser") && (res = tryResolveBrowserMapping(
19176
+ id,
19177
+ importer,
19178
+ options,
19179
+ false,
19180
+ external
19181
+ ))) {
19182
+ return res;
19183
+ }
19184
+ if (res = tryNodeResolve(id, importer, options, depsOptimizer, external)) {
19185
+ return res;
19186
+ }
19187
+ if (currentEnvironmentOptions.consumer === "server" && isBuiltin(options.builtins, id)) {
19188
+ return options.idOnly ? id : { id, external: true, moduleSideEffects: false };
19189
+ } else if (currentEnvironmentOptions.consumer === "server" && isNodeLikeBuiltin(id)) {
19190
+ if (!(options.external === true || options.external.includes(id))) {
19191
+ let message = `Automatically externalized node built-in module "${id}"`;
19192
+ if (importer) {
19193
+ message += ` imported from "${path$d.relative(
19194
+ process.cwd(),
19195
+ importer
19196
+ )}"`;
19197
+ }
19198
+ message += `. Consider adding it to environments.${this.environment.name}.external if it is intended.`;
19199
+ this.warn(message);
19200
+ }
19201
+ return options.idOnly ? id : { id, external: true, moduleSideEffects: false };
19202
+ } else if (currentEnvironmentOptions.consumer === "client" && isNodeLikeBuiltin(id)) {
19203
+ if (options.noExternal === true && // if both noExternal and external are true, noExternal will take the higher priority and bundle it.
19204
+ // only if the id is explicitly listed in external, we will externalize it and skip this error.
19205
+ (options.external === true || !options.external.includes(id))) {
19206
+ let message = `Cannot bundle built-in module "${id}"`;
19207
+ if (importer) {
19208
+ message += ` imported from "${path$d.relative(
19209
+ process.cwd(),
19210
+ importer
19211
+ )}"`;
19212
+ }
19213
+ message += `. Consider disabling environments.${this.environment.name}.noExternal or remove the built-in dependency.`;
19214
+ this.error(message);
19215
+ }
19216
+ if (!asSrc) {
19217
+ debug$d?.(
19218
+ `externalized node built-in "${id}" to empty module. (imported by: ${colors$1.white(colors$1.dim(importer))})`
19219
+ );
19220
+ } else if (isProduction) {
19221
+ this.warn(
19222
+ `Module "${id}" has been externalized for browser compatibility, imported by "${importer}". See https://vite.dev/guide/troubleshooting.html#module-externalized-for-browser-compatibility for more details.`
19223
+ );
19224
+ }
19225
+ return isProduction ? browserExternalId : `${browserExternalId}:${id}`;
19226
+ }
19227
+ }
19228
+ debug$d?.(`[fallthrough] ${colors$1.dim(id)}`);
19128
19229
  },
19129
- result: runResult
19230
+ load(id) {
19231
+ if (id.startsWith(browserExternalId)) {
19232
+ if (isProduction) {
19233
+ return `export default {}`;
19234
+ } else {
19235
+ id = id.slice(browserExternalId.length + 1);
19236
+ return `export default new Proxy({}, {
19237
+ get(_, key) {
19238
+ throw new Error(\`Module "${id}" has been externalized for browser compatibility. Cannot access "${id}.\${key}" in client code. See https://vite.dev/guide/troubleshooting.html#module-externalized-for-browser-compatibility for more details.\`)
19239
+ }
19240
+ })`;
19241
+ }
19242
+ }
19243
+ if (id.startsWith(optionalPeerDepId)) {
19244
+ if (isProduction) {
19245
+ return `export default {}`;
19246
+ } else {
19247
+ const [, peerDep, parentDep] = id.split(":");
19248
+ return `throw new Error(\`Could not resolve "${peerDep}" imported by "${parentDep}". Is it installed?\`)`;
19249
+ }
19250
+ }
19251
+ }
19130
19252
  };
19131
19253
  }
19132
- async function prepareEsbuildOptimizerRun(environment, depsInfo, processingCacheDir, optimizerContext) {
19133
- const flatIdDeps = {};
19134
- const idToExports = {};
19135
- const { optimizeDeps: optimizeDeps2 } = environment.config;
19136
- const { plugins: pluginsFromConfig = [], ...esbuildOptions } = optimizeDeps2.esbuildOptions ?? {};
19137
- await Promise.all(
19138
- Object.keys(depsInfo).map(async (id) => {
19139
- const src = depsInfo[id].src;
19140
- const exportsData = await (depsInfo[id].exportsData ?? extractExportsData(environment, src));
19141
- if (exportsData.jsxLoader && !esbuildOptions.loader?.[".js"]) {
19142
- esbuildOptions.loader = {
19143
- ".js": "jsx",
19144
- ...esbuildOptions.loader
19145
- };
19146
- }
19147
- const flatId = flattenId(id);
19148
- flatIdDeps[flatId] = src;
19149
- idToExports[id] = exportsData;
19150
- })
19254
+ function resolveSubpathImports(id, importer, options) {
19255
+ if (!importer || !id.startsWith(subpathImportsPrefix)) return;
19256
+ const basedir = path$d.dirname(importer);
19257
+ const pkgData = findNearestPackageData(basedir, options.packageCache);
19258
+ if (!pkgData) return;
19259
+ let { file: idWithoutPostfix, postfix } = splitFileAndPostfix(id.slice(1));
19260
+ idWithoutPostfix = "#" + idWithoutPostfix;
19261
+ let importsPath = resolveExportsOrImports(
19262
+ pkgData.data,
19263
+ idWithoutPostfix,
19264
+ options,
19265
+ "imports"
19151
19266
  );
19152
- if (optimizerContext.cancelled) return { context: void 0, idToExports };
19153
- const define = {
19154
- "process.env.NODE_ENV": environment.config.keepProcessEnv ? (
19155
- // define process.env.NODE_ENV even for keepProcessEnv === true
19156
- // as esbuild will replace it automatically when `platform` is `'browser'`
19157
- "process.env.NODE_ENV"
19158
- ) : JSON.stringify(process.env.NODE_ENV || environment.config.mode)
19159
- };
19160
- const platform = optimizeDeps2.esbuildOptions?.platform ?? // We generally don't want to use platform 'neutral', as esbuild has custom handling
19161
- // when the platform is 'node' or 'browser' that can't be emulated by using mainFields
19162
- // and conditions
19163
- (environment.config.consumer === "client" || environment.config.ssr.target === "webworker" ? "browser" : "node");
19164
- const external = [...optimizeDeps2.exclude ?? []];
19165
- const plugins = [...pluginsFromConfig];
19166
- if (external.length) {
19167
- plugins.push(esbuildCjsExternalPlugin(external, platform));
19267
+ if (importsPath?.[0] === ".") {
19268
+ importsPath = path$d.relative(basedir, path$d.join(pkgData.dir, importsPath));
19269
+ if (importsPath[0] !== ".") {
19270
+ importsPath = `./${importsPath}`;
19271
+ }
19168
19272
  }
19169
- plugins.push(esbuildDepPlugin(environment, flatIdDeps, external));
19170
- const context = await esbuild.context({
19171
- absWorkingDir: process.cwd(),
19172
- entryPoints: Object.keys(flatIdDeps),
19173
- bundle: true,
19174
- platform,
19175
- define,
19176
- format: "esm",
19177
- // See https://github.com/evanw/esbuild/issues/1921#issuecomment-1152991694
19178
- banner: platform === "node" ? {
19179
- js: `import { createRequire } from 'module';const require = createRequire(import.meta.url);`
19180
- } : void 0,
19181
- target: ESBUILD_MODULES_TARGET,
19182
- external,
19183
- logLevel: "error",
19184
- splitting: true,
19185
- sourcemap: true,
19186
- outdir: processingCacheDir,
19187
- ignoreAnnotations: true,
19188
- metafile: true,
19189
- plugins,
19190
- charset: "utf8",
19191
- ...esbuildOptions,
19192
- supported: {
19193
- ...defaultEsbuildSupported,
19194
- ...esbuildOptions.supported
19273
+ return importsPath + postfix;
19274
+ }
19275
+ function ensureVersionQuery(resolved, id, options, depsOptimizer) {
19276
+ if (!options.isBuild && !options.scan && depsOptimizer && !(resolved === normalizedClientEntry$1 || resolved === normalizedEnvEntry$1)) {
19277
+ const isNodeModule = isInNodeModules$1(id) || isInNodeModules$1(resolved);
19278
+ if (isNodeModule && !DEP_VERSION_RE.test(resolved)) {
19279
+ const versionHash = depsOptimizer.metadata.browserHash;
19280
+ if (versionHash && isOptimizable(resolved, depsOptimizer.options)) {
19281
+ resolved = injectQuery(resolved, `v=${versionHash}`);
19282
+ }
19195
19283
  }
19196
- });
19197
- return { context, idToExports };
19284
+ }
19285
+ return resolved;
19198
19286
  }
19199
- async function addManuallyIncludedOptimizeDeps(environment, deps) {
19200
- const { logger } = environment;
19201
- const { optimizeDeps: optimizeDeps2 } = environment.config;
19202
- const optimizeDepsInclude = optimizeDeps2.include ?? [];
19203
- if (optimizeDepsInclude.length) {
19204
- const unableToOptimize = (id, msg) => {
19205
- if (optimizeDepsInclude.includes(id)) {
19206
- logger.warn(
19207
- `${msg}: ${colors$1.cyan(id)}, present in ${environment.name} 'optimizeDeps.include'`
19208
- );
19287
+ function tryFsResolve(fsPath, options, tryIndex = true, skipPackageJson = false) {
19288
+ const hashIndex = fsPath.indexOf("#");
19289
+ if (hashIndex >= 0 && isInNodeModules$1(fsPath)) {
19290
+ const queryIndex = fsPath.indexOf("?");
19291
+ if (queryIndex < 0 || queryIndex > hashIndex) {
19292
+ const file2 = queryIndex > hashIndex ? fsPath.slice(0, queryIndex) : fsPath;
19293
+ const res2 = tryCleanFsResolve(file2, options, tryIndex, skipPackageJson);
19294
+ if (res2) return res2 + fsPath.slice(file2.length);
19295
+ }
19296
+ }
19297
+ const { file, postfix } = splitFileAndPostfix(fsPath);
19298
+ const res = tryCleanFsResolve(file, options, tryIndex, skipPackageJson);
19299
+ if (res) return res + postfix;
19300
+ }
19301
+ const knownTsOutputRE = /\.(?:js|mjs|cjs|jsx)$/;
19302
+ const isPossibleTsOutput = (url) => knownTsOutputRE.test(url);
19303
+ function tryCleanFsResolve(file, options, tryIndex = true, skipPackageJson = false) {
19304
+ const { tryPrefix, extensions, preserveSymlinks } = options;
19305
+ const fileResult = tryResolveRealFileOrType(file, options.preserveSymlinks);
19306
+ if (fileResult?.path) return fileResult.path;
19307
+ let res;
19308
+ const possibleJsToTs = isPossibleTsOutput(file);
19309
+ if (possibleJsToTs || options.extensions.length || tryPrefix) {
19310
+ const dirPath = path$d.dirname(file);
19311
+ if (isDirectory(dirPath)) {
19312
+ if (possibleJsToTs) {
19313
+ const fileExt = path$d.extname(file);
19314
+ const fileName = file.slice(0, -fileExt.length);
19315
+ if (res = tryResolveRealFile(
19316
+ fileName + fileExt.replace("js", "ts"),
19317
+ preserveSymlinks
19318
+ ))
19319
+ return res;
19320
+ if (fileExt === ".js" && (res = tryResolveRealFile(fileName + ".tsx", preserveSymlinks)))
19321
+ return res;
19209
19322
  }
19210
- };
19211
- const includes = [...optimizeDepsInclude];
19212
- for (let i = 0; i < includes.length; i++) {
19213
- const id = includes[i];
19214
- if (isDynamicPattern(id)) {
19215
- const globIds = expandGlobIds(id, environment.getTopLevelConfig());
19216
- includes.splice(i, 1, ...globIds);
19217
- i += globIds.length - 1;
19323
+ if (res = tryResolveRealFileWithExtensions(
19324
+ file,
19325
+ extensions,
19326
+ preserveSymlinks
19327
+ ))
19328
+ return res;
19329
+ if (tryPrefix) {
19330
+ const prefixed = `${dirPath}/${options.tryPrefix}${path$d.basename(file)}`;
19331
+ if (res = tryResolveRealFile(prefixed, preserveSymlinks)) return res;
19332
+ if (res = tryResolveRealFileWithExtensions(
19333
+ prefixed,
19334
+ extensions,
19335
+ preserveSymlinks
19336
+ ))
19337
+ return res;
19218
19338
  }
19219
19339
  }
19220
- const resolve = createOptimizeDepsIncludeResolver(environment);
19221
- for (const id of includes) {
19222
- const normalizedId = normalizeId(id);
19223
- if (!deps[normalizedId]) {
19224
- const entry = await resolve(id);
19225
- if (entry) {
19226
- if (isOptimizable(entry, optimizeDeps2)) {
19227
- deps[normalizedId] = entry;
19228
- } else {
19229
- unableToOptimize(id, "Cannot optimize dependency");
19340
+ }
19341
+ if (tryIndex && fileResult?.type === "directory") {
19342
+ const dirPath = file;
19343
+ if (!skipPackageJson) {
19344
+ let pkgPath = `${dirPath}/package.json`;
19345
+ try {
19346
+ if (fs__default.existsSync(pkgPath)) {
19347
+ if (!options.preserveSymlinks) {
19348
+ pkgPath = safeRealpathSync(pkgPath);
19230
19349
  }
19231
- } else {
19232
- unableToOptimize(id, "Failed to resolve dependency");
19350
+ const pkg = loadPackageData(pkgPath);
19351
+ return resolvePackageEntry(dirPath, pkg, options);
19233
19352
  }
19353
+ } catch (e) {
19354
+ if (e.code !== ERR_RESOLVE_PACKAGE_ENTRY_FAIL && e.code !== "ENOENT")
19355
+ throw e;
19234
19356
  }
19235
19357
  }
19358
+ if (res = tryResolveRealFileWithExtensions(
19359
+ `${dirPath}/index`,
19360
+ extensions,
19361
+ preserveSymlinks
19362
+ ))
19363
+ return res;
19364
+ if (tryPrefix) {
19365
+ if (res = tryResolveRealFileWithExtensions(
19366
+ `${dirPath}/${options.tryPrefix}index`,
19367
+ extensions,
19368
+ preserveSymlinks
19369
+ ))
19370
+ return res;
19371
+ }
19236
19372
  }
19237
19373
  }
19238
- function depsFromOptimizedDepInfo(depsInfo) {
19239
- const obj = {};
19240
- for (const key in depsInfo) {
19241
- obj[key] = depsInfo[key].src;
19374
+ function tryNodeResolve(id, importer, options, depsOptimizer, externalize) {
19375
+ const { root, dedupe, isBuild, preserveSymlinks, packageCache } = options;
19376
+ const deepMatch = deepImportRE.exec(id);
19377
+ const pkgId = deepMatch ? deepMatch[1] || deepMatch[2] : cleanUrl(id);
19378
+ let basedir;
19379
+ if (dedupe.includes(pkgId)) {
19380
+ basedir = root;
19381
+ } else if (importer && path$d.isAbsolute(importer) && // css processing appends `*` for importer
19382
+ (importer.endsWith("*") || fs__default.existsSync(cleanUrl(importer)))) {
19383
+ basedir = path$d.dirname(importer);
19384
+ } else {
19385
+ basedir = root;
19242
19386
  }
19243
- return obj;
19244
- }
19245
- function getOptimizedDepPath(environment, id) {
19246
- return normalizePath$3(
19247
- path$d.resolve(getDepsCacheDir(environment), flattenId(id) + ".js")
19248
- );
19249
- }
19250
- function getDepsCacheSuffix(environment) {
19251
- return environment.name === "client" ? "" : `_${environment.name}`;
19252
- }
19253
- function getDepsCacheDir(environment) {
19254
- return getDepsCacheDirPrefix(environment) + getDepsCacheSuffix(environment);
19255
- }
19256
- function getProcessingDepsCacheDir(environment) {
19257
- return getDepsCacheDirPrefix(environment) + getDepsCacheSuffix(environment) + getTempSuffix();
19258
- }
19259
- function getTempSuffix() {
19260
- return "_temp_" + getHash(
19261
- `${process.pid}:${Date.now().toString()}:${Math.random().toString(16).slice(2)}`
19262
- );
19263
- }
19264
- function getDepsCacheDirPrefix(environment) {
19265
- return normalizePath$3(path$d.resolve(environment.config.cacheDir, "deps"));
19266
- }
19267
- function createIsOptimizedDepFile(environment) {
19268
- const depsCacheDirPrefix = getDepsCacheDirPrefix(environment);
19269
- return (id) => id.startsWith(depsCacheDirPrefix);
19270
- }
19271
- function createIsOptimizedDepUrl(environment) {
19272
- const { root } = environment.config;
19273
- const depsCacheDir = getDepsCacheDirPrefix(environment);
19274
- const depsCacheDirRelative = normalizePath$3(path$d.relative(root, depsCacheDir));
19275
- const depsCacheDirPrefix = depsCacheDirRelative.startsWith("../") ? (
19276
- // if the cache directory is outside root, the url prefix would be something
19277
- // like '/@fs/absolute/path/to/node_modules/.vite'
19278
- `/@fs/${removeLeadingSlash(normalizePath$3(depsCacheDir))}`
19279
- ) : (
19280
- // if the cache directory is inside root, the url prefix would be something
19281
- // like '/node_modules/.vite'
19282
- `/${depsCacheDirRelative}`
19283
- );
19284
- return function isOptimizedDepUrl(url) {
19285
- return url.startsWith(depsCacheDirPrefix);
19286
- };
19287
- }
19288
- function parseDepsOptimizerMetadata(jsonMetadata, depsCacheDir) {
19289
- const { hash, lockfileHash, configHash, browserHash, optimized, chunks } = JSON.parse(jsonMetadata, (key, value) => {
19290
- if (key === "file" || key === "src") {
19291
- return normalizePath$3(path$d.resolve(depsCacheDir, value));
19387
+ const isModuleBuiltin = (id2) => isBuiltin(options.builtins, id2);
19388
+ let selfPkg = null;
19389
+ if (!isModuleBuiltin(id) && !id.includes("\0") && bareImportRE.test(id)) {
19390
+ const selfPackageData = findNearestPackageData(basedir, packageCache);
19391
+ selfPkg = selfPackageData?.data.exports && selfPackageData.data.name === pkgId ? selfPackageData : null;
19392
+ }
19393
+ const pkg = selfPkg || resolvePackageData(pkgId, basedir, preserveSymlinks, packageCache);
19394
+ if (!pkg) {
19395
+ if (basedir !== root && // root has no peer dep
19396
+ !isModuleBuiltin(id) && !id.includes("\0") && bareImportRE.test(id)) {
19397
+ const mainPkg = findNearestMainPackageData(basedir, packageCache)?.data;
19398
+ if (mainPkg) {
19399
+ const pkgName = getNpmPackageName(id);
19400
+ if (pkgName != null && mainPkg.peerDependencies?.[pkgName] && mainPkg.peerDependenciesMeta?.[pkgName]?.optional) {
19401
+ return {
19402
+ id: `${optionalPeerDepId}:${id}:${mainPkg.name}`
19403
+ };
19404
+ }
19405
+ }
19292
19406
  }
19293
- return value;
19294
- });
19295
- if (!chunks || Object.values(optimized).some((depInfo) => !depInfo.fileHash)) {
19296
19407
  return;
19297
19408
  }
19298
- const metadata = {
19299
- hash,
19300
- lockfileHash,
19301
- configHash,
19302
- browserHash,
19303
- optimized: {},
19304
- discovered: {},
19305
- chunks: {},
19306
- depInfoList: []
19307
- };
19308
- for (const id of Object.keys(optimized)) {
19309
- addOptimizedDepInfo(metadata, "optimized", {
19310
- ...optimized[id],
19311
- id,
19312
- browserHash
19313
- });
19314
- }
19315
- for (const id of Object.keys(chunks)) {
19316
- addOptimizedDepInfo(metadata, "chunks", {
19317
- ...chunks[id],
19318
- id,
19319
- browserHash,
19320
- needsInterop: false
19321
- });
19409
+ const resolveId = deepMatch ? resolveDeepImport : resolvePackageEntry;
19410
+ const unresolvedId = deepMatch ? "." + id.slice(pkgId.length) : id;
19411
+ let resolved = resolveId(unresolvedId, pkg, options);
19412
+ if (!resolved) {
19413
+ return;
19322
19414
  }
19323
- return metadata;
19324
- }
19325
- function stringifyDepsOptimizerMetadata(metadata, depsCacheDir) {
19326
- const { hash, configHash, lockfileHash, browserHash, optimized, chunks } = metadata;
19327
- return JSON.stringify(
19328
- {
19329
- hash,
19330
- configHash,
19331
- lockfileHash,
19332
- browserHash,
19333
- optimized: Object.fromEntries(
19334
- Object.values(optimized).map(
19335
- ({ id, src, file, fileHash, needsInterop: needsInterop2 }) => [
19336
- id,
19337
- {
19338
- src,
19339
- file,
19340
- fileHash,
19341
- needsInterop: needsInterop2
19342
- }
19343
- ]
19344
- )
19345
- ),
19346
- chunks: Object.fromEntries(
19347
- Object.values(chunks).map(({ id, file }) => [id, { file }])
19348
- )
19349
- },
19350
- (key, value) => {
19351
- if (key === "file" || key === "src") {
19352
- return normalizePath$3(path$d.relative(depsCacheDir, value));
19415
+ const processResult = (resolved2) => {
19416
+ if (!externalize) {
19417
+ return resolved2;
19418
+ }
19419
+ if (!canExternalizeFile(resolved2.id)) {
19420
+ return resolved2;
19421
+ }
19422
+ let resolvedId = id;
19423
+ if (deepMatch && !pkg.data.exports && path$d.extname(id) !== path$d.extname(resolved2.id)) {
19424
+ const index = resolved2.id.indexOf(id);
19425
+ if (index > -1) {
19426
+ resolvedId = resolved2.id.slice(index);
19427
+ debug$d?.(
19428
+ `[processResult] ${colors$1.cyan(id)} -> ${colors$1.dim(resolvedId)}`
19429
+ );
19353
19430
  }
19354
- return value;
19355
- },
19356
- 2
19357
- );
19358
- }
19359
- function esbuildOutputFromId(outputs, id, cacheDirOutputPath) {
19360
- const cwd = process.cwd();
19361
- const flatId = flattenId(id) + ".js";
19362
- const normalizedOutputPath = normalizePath$3(
19363
- path$d.relative(cwd, path$d.join(cacheDirOutputPath, flatId))
19364
- );
19365
- const output = outputs[normalizedOutputPath];
19366
- if (output) {
19367
- return output;
19368
- }
19369
- for (const [key, value] of Object.entries(outputs)) {
19370
- if (normalizePath$3(path$d.relative(cwd, key)) === normalizedOutputPath) {
19371
- return value;
19372
19431
  }
19373
- }
19374
- }
19375
- async function extractExportsData(environment, filePath) {
19376
- await init;
19377
- const { optimizeDeps: optimizeDeps2 } = environment.config;
19378
- const esbuildOptions = optimizeDeps2.esbuildOptions ?? {};
19379
- if (optimizeDeps2.extensions?.some((ext) => filePath.endsWith(ext))) {
19380
- const result = await build$b({
19381
- ...esbuildOptions,
19382
- entryPoints: [filePath],
19383
- write: false,
19384
- format: "esm"
19432
+ return { ...resolved2, id: resolvedId, external: true };
19433
+ };
19434
+ if (!options.idOnly && (!options.scan && isBuild || externalize)) {
19435
+ return processResult({
19436
+ id: resolved,
19437
+ moduleSideEffects: pkg.hasSideEffects(resolved)
19385
19438
  });
19386
- const [, exports2, , hasModuleSyntax2] = parse$e(result.outputFiles[0].text);
19387
- return {
19388
- hasModuleSyntax: hasModuleSyntax2,
19389
- exports: exports2.map((e) => e.n)
19390
- };
19391
19439
  }
19392
- let parseResult;
19393
- let usedJsxLoader = false;
19394
- const entryContent = await fsp.readFile(filePath, "utf-8");
19395
- try {
19396
- parseResult = parse$e(entryContent);
19397
- } catch {
19398
- const loader = esbuildOptions.loader?.[path$d.extname(filePath)] || "jsx";
19399
- debug$d?.(
19400
- `Unable to parse: ${filePath}.
19401
- Trying again with a ${loader} transform.`
19402
- );
19403
- const transformed = await transformWithEsbuild(
19404
- entryContent,
19405
- filePath,
19406
- { loader },
19407
- void 0,
19408
- environment.config
19409
- );
19410
- parseResult = parse$e(transformed.code);
19411
- usedJsxLoader = true;
19440
+ if (!isInNodeModules$1(resolved) || // linked
19441
+ !depsOptimizer || // resolving before listening to the server
19442
+ options.scan) {
19443
+ return { id: resolved };
19412
19444
  }
19413
- const [, exports, , hasModuleSyntax] = parseResult;
19414
- const exportsData = {
19415
- hasModuleSyntax,
19416
- exports: exports.map((e) => e.n),
19417
- jsxLoader: usedJsxLoader
19418
- };
19419
- return exportsData;
19420
- }
19421
- function needsInterop(environment, id, exportsData, output) {
19422
- if (environment.config.optimizeDeps.needsInterop?.includes(id)) {
19423
- return true;
19445
+ const isJsType = isOptimizable(resolved, depsOptimizer.options);
19446
+ const exclude = depsOptimizer.options.exclude;
19447
+ const skipOptimization = depsOptimizer.options.noDiscovery || !isJsType || importer && isInNodeModules$1(importer) || exclude?.includes(pkgId) || exclude?.includes(id) || SPECIAL_QUERY_RE.test(resolved);
19448
+ if (skipOptimization) {
19449
+ const versionHash = depsOptimizer.metadata.browserHash;
19450
+ if (versionHash && isJsType) {
19451
+ resolved = injectQuery(resolved, `v=${versionHash}`);
19452
+ }
19453
+ } else {
19454
+ const optimizedInfo = depsOptimizer.registerMissingImport(id, resolved);
19455
+ resolved = depsOptimizer.getOptimizedDepId(optimizedInfo);
19424
19456
  }
19425
- const { hasModuleSyntax, exports } = exportsData;
19426
- if (!hasModuleSyntax) {
19427
- return true;
19457
+ return { id: resolved };
19458
+ }
19459
+ async function tryOptimizedResolve(depsOptimizer, id, importer, preserveSymlinks, packageCache) {
19460
+ await depsOptimizer.scanProcessing;
19461
+ const metadata = depsOptimizer.metadata;
19462
+ const depInfo = optimizedDepInfoFromId(metadata, id);
19463
+ if (depInfo) {
19464
+ return depsOptimizer.getOptimizedDepId(depInfo);
19428
19465
  }
19429
- if (output) {
19430
- const generatedExports = output.exports;
19431
- if (isSingleDefaultExport(generatedExports) && !isSingleDefaultExport(exports)) {
19432
- return true;
19466
+ if (!importer) return;
19467
+ let idPkgDir;
19468
+ const nestedIdMatch = `> ${id}`;
19469
+ for (const optimizedData of metadata.depInfoList) {
19470
+ if (!optimizedData.src) continue;
19471
+ if (!optimizedData.id.endsWith(nestedIdMatch)) continue;
19472
+ if (idPkgDir == null) {
19473
+ const pkgName = getNpmPackageName(id);
19474
+ if (!pkgName) break;
19475
+ idPkgDir = resolvePackageData(
19476
+ pkgName,
19477
+ importer,
19478
+ preserveSymlinks,
19479
+ packageCache
19480
+ )?.dir;
19481
+ if (idPkgDir == null) break;
19482
+ idPkgDir = normalizePath$3(idPkgDir);
19483
+ }
19484
+ if (optimizedData.src.startsWith(withTrailingSlash(idPkgDir))) {
19485
+ return depsOptimizer.getOptimizedDepId(optimizedData);
19433
19486
  }
19434
19487
  }
19435
- return false;
19436
- }
19437
- function isSingleDefaultExport(exports) {
19438
- return exports.length === 1 && exports[0] === "default";
19439
19488
  }
19440
- const lockfileFormats = [
19441
- {
19442
- path: "node_modules/.package-lock.json",
19443
- checkPatchesDir: "patches",
19444
- manager: "npm"
19445
- },
19446
- {
19447
- // Yarn non-PnP
19448
- path: "node_modules/.yarn-state.yml",
19449
- checkPatchesDir: false,
19450
- manager: "yarn"
19451
- },
19452
- {
19453
- // Yarn v3+ PnP
19454
- path: ".pnp.cjs",
19455
- checkPatchesDir: ".yarn/patches",
19456
- manager: "yarn"
19457
- },
19458
- {
19459
- // Yarn v2 PnP
19460
- path: ".pnp.js",
19461
- checkPatchesDir: ".yarn/patches",
19462
- manager: "yarn"
19463
- },
19464
- {
19465
- // yarn 1
19466
- path: "node_modules/.yarn-integrity",
19467
- checkPatchesDir: "patches",
19468
- manager: "yarn"
19469
- },
19470
- {
19471
- path: "node_modules/.pnpm/lock.yaml",
19472
- // Included in lockfile
19473
- checkPatchesDir: false,
19474
- manager: "pnpm"
19475
- },
19476
- {
19477
- path: "bun.lock",
19478
- checkPatchesDir: "patches",
19479
- manager: "bun"
19480
- },
19481
- {
19482
- path: "bun.lockb",
19483
- checkPatchesDir: "patches",
19484
- manager: "bun"
19489
+ function resolvePackageEntry(id, { dir, data, setResolvedCache, getResolvedCache }, options) {
19490
+ const { file: idWithoutPostfix, postfix } = splitFileAndPostfix(id);
19491
+ const cached = getResolvedCache(".", options);
19492
+ if (cached) {
19493
+ return cached + postfix;
19485
19494
  }
19486
- ].sort((_, { manager }) => {
19487
- return process.env.npm_config_user_agent?.startsWith(manager) ? 1 : -1;
19488
- });
19489
- const lockfilePaths = lockfileFormats.map((l) => l.path);
19490
- function getConfigHash(environment) {
19491
- const { config } = environment;
19492
- const { optimizeDeps: optimizeDeps2 } = config;
19493
- const content = JSON.stringify(
19494
- {
19495
- define: !config.keepProcessEnv ? process.env.NODE_ENV || config.mode : null,
19496
- root: config.root,
19497
- resolve: config.resolve,
19498
- assetsInclude: config.assetsInclude,
19499
- plugins: config.plugins.map((p) => p.name),
19500
- optimizeDeps: {
19501
- include: optimizeDeps2.include ? unique(optimizeDeps2.include).sort() : void 0,
19502
- exclude: optimizeDeps2.exclude ? unique(optimizeDeps2.exclude).sort() : void 0,
19503
- esbuildOptions: {
19504
- ...optimizeDeps2.esbuildOptions,
19505
- plugins: optimizeDeps2.esbuildOptions?.plugins?.map((p) => p.name)
19495
+ try {
19496
+ let entryPoint;
19497
+ if (data.exports) {
19498
+ entryPoint = resolveExportsOrImports(data, ".", options, "exports");
19499
+ }
19500
+ if (!entryPoint) {
19501
+ for (const field of options.mainFields) {
19502
+ if (field === "browser") {
19503
+ entryPoint = tryResolveBrowserEntry(dir, data, options);
19504
+ if (entryPoint) {
19505
+ break;
19506
+ }
19507
+ } else if (typeof data[field] === "string") {
19508
+ entryPoint = data[field];
19509
+ break;
19506
19510
  }
19507
19511
  }
19508
- },
19509
- (_, value) => {
19510
- if (typeof value === "function" || value instanceof RegExp) {
19511
- return value.toString();
19512
- }
19513
- return value;
19514
19512
  }
19515
- );
19516
- return getHash(content);
19517
- }
19518
- function getLockfileHash(environment) {
19519
- const lockfilePath = lookupFile(environment.config.root, lockfilePaths);
19520
- let content = lockfilePath ? fs__default.readFileSync(lockfilePath, "utf-8") : "";
19521
- if (lockfilePath) {
19522
- const normalizedLockfilePath = lockfilePath.replaceAll("\\", "/");
19523
- const lockfileFormat = lockfileFormats.find(
19524
- (f) => normalizedLockfilePath.endsWith(f.path)
19525
- );
19526
- if (lockfileFormat.checkPatchesDir) {
19527
- const baseDir = lockfilePath.slice(0, -lockfileFormat.path.length);
19528
- const fullPath = path$d.join(
19529
- baseDir,
19530
- lockfileFormat.checkPatchesDir
19513
+ entryPoint ||= data.main;
19514
+ const entryPoints = entryPoint ? [entryPoint] : ["index.js", "index.json", "index.node"];
19515
+ for (let entry of entryPoints) {
19516
+ let skipPackageJson = false;
19517
+ if (options.mainFields[0] === "sass" && !options.extensions.includes(path$d.extname(entry))) {
19518
+ entry = "";
19519
+ skipPackageJson = true;
19520
+ } else {
19521
+ const { browser: browserField } = data;
19522
+ if (options.mainFields.includes("browser") && isObject$2(browserField)) {
19523
+ entry = mapWithBrowserField(entry, browserField) || entry;
19524
+ }
19525
+ }
19526
+ const entryPointPath = path$d.join(dir, entry);
19527
+ const resolvedEntryPoint = tryFsResolve(
19528
+ entryPointPath,
19529
+ options,
19530
+ true,
19531
+ skipPackageJson
19531
19532
  );
19532
- const stat = tryStatSync(fullPath);
19533
- if (stat?.isDirectory()) {
19534
- content += stat.mtimeMs.toString();
19533
+ if (resolvedEntryPoint) {
19534
+ debug$d?.(
19535
+ `[package entry] ${colors$1.cyan(idWithoutPostfix)} -> ${colors$1.dim(
19536
+ resolvedEntryPoint
19537
+ )}${postfix !== "" ? ` (postfix: ${postfix})` : ""}`
19538
+ );
19539
+ setResolvedCache(".", resolvedEntryPoint, options);
19540
+ return resolvedEntryPoint + postfix;
19535
19541
  }
19536
19542
  }
19543
+ } catch (e) {
19544
+ packageEntryFailure(id, e.message);
19537
19545
  }
19538
- return getHash(content);
19539
- }
19540
- function getDepHash(environment) {
19541
- const lockfileHash = getLockfileHash(environment);
19542
- const configHash = getConfigHash(environment);
19543
- const hash = getHash(lockfileHash + configHash);
19544
- return {
19545
- hash,
19546
- lockfileHash,
19547
- configHash
19548
- };
19549
- }
19550
- function getOptimizedBrowserHash(hash, deps, timestamp = "") {
19551
- return getHash(hash + JSON.stringify(deps) + timestamp);
19552
- }
19553
- function optimizedDepInfoFromId(metadata, id) {
19554
- return metadata.optimized[id] || metadata.discovered[id] || metadata.chunks[id];
19546
+ packageEntryFailure(id);
19555
19547
  }
19556
- function optimizedDepInfoFromFile(metadata, file) {
19557
- return metadata.depInfoList.find((depInfo) => depInfo.file === file);
19548
+ function packageEntryFailure(id, details) {
19549
+ const err = new Error(
19550
+ `Failed to resolve entry for package "${id}". The package may have incorrect main/module/exports specified in its package.json` + (details ? ": " + details : ".")
19551
+ );
19552
+ err.code = ERR_RESOLVE_PACKAGE_ENTRY_FAIL;
19553
+ throw err;
19558
19554
  }
19559
- function findOptimizedDepInfoInRecord(dependenciesInfo, callbackFn) {
19560
- for (const o of Object.keys(dependenciesInfo)) {
19561
- const info = dependenciesInfo[o];
19562
- if (callbackFn(info, o)) {
19563
- return info;
19555
+ function resolveExportsOrImports(pkg, key, options, type) {
19556
+ const conditions = options.conditions.map((condition) => {
19557
+ if (condition === DEV_PROD_CONDITION) {
19558
+ return options.isProduction ? "production" : "development";
19564
19559
  }
19560
+ return condition;
19561
+ });
19562
+ if (options.isRequire) {
19563
+ conditions.push("require");
19564
+ } else {
19565
+ conditions.push("import");
19565
19566
  }
19567
+ const fn = type === "imports" ? f : o;
19568
+ const result = fn(pkg, key, { conditions, unsafe: true });
19569
+ return result ? result[0] : void 0;
19566
19570
  }
19567
- async function optimizedDepNeedsInterop(environment, metadata, file) {
19568
- const depInfo = optimizedDepInfoFromFile(metadata, file);
19569
- if (depInfo?.src && depInfo.needsInterop === void 0) {
19570
- depInfo.exportsData ??= extractExportsData(environment, depInfo.src);
19571
- depInfo.needsInterop = needsInterop(
19572
- environment,
19573
- depInfo.id,
19574
- await depInfo.exportsData
19571
+ function resolveDeepImport(id, { setResolvedCache, getResolvedCache, dir, data }, options) {
19572
+ const cache = getResolvedCache(id, options);
19573
+ if (cache) {
19574
+ return cache;
19575
+ }
19576
+ let relativeId = id;
19577
+ const { exports: exportsField, browser: browserField } = data;
19578
+ if (exportsField) {
19579
+ if (isObject$2(exportsField) && !Array.isArray(exportsField)) {
19580
+ const { file, postfix } = splitFileAndPostfix(relativeId);
19581
+ const exportsId = resolveExportsOrImports(data, file, options, "exports");
19582
+ if (exportsId !== void 0) {
19583
+ relativeId = exportsId + postfix;
19584
+ } else {
19585
+ relativeId = void 0;
19586
+ }
19587
+ } else {
19588
+ relativeId = void 0;
19589
+ }
19590
+ if (!relativeId) {
19591
+ throw new Error(
19592
+ `Package subpath '${relativeId}' is not defined by "exports" in ${path$d.join(dir, "package.json")}.`
19593
+ );
19594
+ }
19595
+ } else if (options.mainFields.includes("browser") && isObject$2(browserField)) {
19596
+ const { file, postfix } = splitFileAndPostfix(relativeId);
19597
+ const mapped = mapWithBrowserField(file, browserField);
19598
+ if (mapped) {
19599
+ relativeId = mapped + postfix;
19600
+ } else if (mapped === false) {
19601
+ setResolvedCache(id, browserExternalId, options);
19602
+ return browserExternalId;
19603
+ }
19604
+ }
19605
+ if (relativeId) {
19606
+ const resolved = tryFsResolve(
19607
+ path$d.join(dir, relativeId),
19608
+ options,
19609
+ !exportsField
19610
+ // try index only if no exports field
19575
19611
  );
19612
+ if (resolved) {
19613
+ debug$d?.(
19614
+ `[node/deep-import] ${colors$1.cyan(id)} -> ${colors$1.dim(resolved)}`
19615
+ );
19616
+ setResolvedCache(id, resolved, options);
19617
+ return resolved;
19618
+ }
19576
19619
  }
19577
- return depInfo?.needsInterop;
19578
19620
  }
19579
- const MAX_TEMP_DIR_AGE_MS = 24 * 60 * 60 * 1e3;
19580
- async function cleanupDepsCacheStaleDirs(config) {
19581
- try {
19582
- const cacheDir = path$d.resolve(config.cacheDir);
19583
- if (fs__default.existsSync(cacheDir)) {
19584
- const dirents = await fsp.readdir(cacheDir, { withFileTypes: true });
19585
- for (const dirent of dirents) {
19586
- if (dirent.isDirectory() && dirent.name.includes("_temp_")) {
19587
- const tempDirPath = path$d.resolve(config.cacheDir, dirent.name);
19588
- const stats = await fsp.stat(tempDirPath).catch(() => null);
19589
- if (stats?.mtime && Date.now() - stats.mtime.getTime() > MAX_TEMP_DIR_AGE_MS) {
19590
- debug$d?.(`removing stale cache temp dir ${tempDirPath}`);
19591
- await fsp.rm(tempDirPath, { recursive: true, force: true });
19621
+ function tryResolveBrowserMapping(id, importer, options, isFilePath, externalize) {
19622
+ let res;
19623
+ const pkg = importer && findNearestPackageData(path$d.dirname(importer), options.packageCache);
19624
+ if (pkg && isObject$2(pkg.data.browser)) {
19625
+ const mapId = isFilePath ? "./" + slash$1(path$d.relative(pkg.dir, id)) : id;
19626
+ const browserMappedPath = mapWithBrowserField(mapId, pkg.data.browser);
19627
+ if (browserMappedPath) {
19628
+ if (res = bareImportRE.test(browserMappedPath) ? tryNodeResolve(
19629
+ browserMappedPath,
19630
+ importer,
19631
+ options,
19632
+ void 0,
19633
+ void 0
19634
+ )?.id : tryFsResolve(path$d.join(pkg.dir, browserMappedPath), options)) {
19635
+ debug$d?.(`[browser mapped] ${colors$1.cyan(id)} -> ${colors$1.dim(res)}`);
19636
+ let result = { id: res };
19637
+ if (options.idOnly) {
19638
+ return result;
19639
+ }
19640
+ if (!options.scan && options.isBuild) {
19641
+ const resPkg = findNearestPackageData(
19642
+ path$d.dirname(res),
19643
+ options.packageCache
19644
+ );
19645
+ if (resPkg) {
19646
+ result = {
19647
+ id: res,
19648
+ moduleSideEffects: resPkg.hasSideEffects(res)
19649
+ };
19592
19650
  }
19593
19651
  }
19652
+ return externalize ? { ...result, external: true } : result;
19594
19653
  }
19654
+ } else if (browserMappedPath === false) {
19655
+ return browserExternalId;
19595
19656
  }
19596
- } catch (err) {
19597
- config.logger.error(err);
19598
19657
  }
19599
19658
  }
19600
- const GRACEFUL_RENAME_TIMEOUT = 5e3;
19601
- const safeRename = promisify$4(function gracefulRename(from, to, cb) {
19602
- const start = Date.now();
19603
- let backoff = 0;
19604
- fs__default.rename(from, to, function CB(er) {
19605
- if (er && (er.code === "EACCES" || er.code === "EPERM") && Date.now() - start < GRACEFUL_RENAME_TIMEOUT) {
19606
- setTimeout(function() {
19607
- fs__default.stat(to, function(stater, _st) {
19608
- if (stater && stater.code === "ENOENT") fs__default.rename(from, to, CB);
19609
- else CB(er);
19610
- });
19611
- }, backoff);
19612
- if (backoff < 100) backoff += 10;
19613
- return;
19614
- }
19615
- cb(er);
19616
- });
19617
- });
19618
-
19619
- var index$1 = {
19620
- __proto__: null,
19621
- addManuallyIncludedOptimizeDeps: addManuallyIncludedOptimizeDeps,
19622
- addOptimizedDepInfo: addOptimizedDepInfo,
19623
- cleanupDepsCacheStaleDirs: cleanupDepsCacheStaleDirs,
19624
- createIsOptimizedDepFile: createIsOptimizedDepFile,
19625
- createIsOptimizedDepUrl: createIsOptimizedDepUrl,
19626
- depsFromOptimizedDepInfo: depsFromOptimizedDepInfo,
19627
- depsLogString: depsLogString,
19628
- discoverProjectDependencies: discoverProjectDependencies,
19629
- extractExportsData: extractExportsData,
19630
- getDepsCacheDir: getDepsCacheDir,
19631
- getOptimizedDepPath: getOptimizedDepPath,
19632
- initDepsOptimizerMetadata: initDepsOptimizerMetadata,
19633
- isDepOptimizationDisabled: isDepOptimizationDisabled,
19634
- loadCachedDepOptimizationMetadata: loadCachedDepOptimizationMetadata,
19635
- optimizeDeps: optimizeDeps,
19636
- optimizeExplicitEnvironmentDeps: optimizeExplicitEnvironmentDeps,
19637
- optimizedDepInfoFromFile: optimizedDepInfoFromFile,
19638
- optimizedDepInfoFromId: optimizedDepInfoFromId,
19639
- optimizedDepNeedsInterop: optimizedDepNeedsInterop,
19640
- runOptimizeDeps: runOptimizeDeps,
19641
- toDiscoveredDependencies: toDiscoveredDependencies
19642
- };
19643
-
19644
- const jsonExtRE = /\.json(?:$|\?)(?!commonjs-(?:proxy|external))/;
19645
- const jsonObjRE = /^\s*\{/;
19646
- const jsonLangs = `\\.(?:json|json5)(?:$|\\?)`;
19647
- const jsonLangRE = new RegExp(jsonLangs);
19648
- const isJSONRequest = (request) => jsonLangRE.test(request);
19649
- function jsonPlugin(options, isBuild) {
19650
- return {
19651
- name: "vite:json",
19652
- transform(json, id) {
19653
- if (!jsonExtRE.test(id)) return null;
19654
- if (SPECIAL_QUERY_RE.test(id)) return null;
19655
- json = stripBomTag(json);
19656
- try {
19657
- if (options.stringify !== false) {
19658
- if (options.namedExports && jsonObjRE.test(json)) {
19659
- const parsed = JSON.parse(json);
19660
- const keys = Object.keys(parsed);
19661
- let code = "";
19662
- let defaultObjectCode = "{\n";
19663
- for (const key of keys) {
19664
- if (key === makeLegalIdentifier(key)) {
19665
- code += `export const ${key} = ${serializeValue(parsed[key])};
19666
- `;
19667
- defaultObjectCode += ` ${key},
19668
- `;
19669
- } else {
19670
- defaultObjectCode += ` ${JSON.stringify(key)}: ${serializeValue(parsed[key])},
19671
- `;
19672
- }
19673
- }
19674
- defaultObjectCode += "}";
19675
- code += `export default ${defaultObjectCode};
19676
- `;
19677
- return {
19678
- code,
19679
- map: { mappings: "" }
19680
- };
19681
- }
19682
- if (options.stringify === true || // use 10kB as a threshold for 'auto'
19683
- // https://v8.dev/blog/cost-of-javascript-2019#:~:text=A%20good%20rule%20of%20thumb%20is%20to%20apply%20this%20technique%20for%20objects%20of%2010%20kB%20or%20larger
19684
- json.length > 10 * 1e3) {
19685
- if (isBuild) {
19686
- json = JSON.stringify(JSON.parse(json));
19687
- }
19688
- return {
19689
- code: `export default /* #__PURE__ */ JSON.parse(${JSON.stringify(json)})`,
19690
- map: { mappings: "" }
19691
- };
19692
- }
19659
+ function tryResolveBrowserEntry(dir, data, options) {
19660
+ const browserEntry = typeof data.browser === "string" ? data.browser : isObject$2(data.browser) && data.browser["."];
19661
+ if (browserEntry) {
19662
+ if (!options.isRequire && options.mainFields.includes("module") && typeof data.module === "string" && data.module !== browserEntry) {
19663
+ const resolvedBrowserEntry = tryFsResolve(
19664
+ path$d.join(dir, browserEntry),
19665
+ options
19666
+ );
19667
+ if (resolvedBrowserEntry) {
19668
+ const content = fs__default.readFileSync(resolvedBrowserEntry, "utf-8");
19669
+ if (hasESMSyntax(content)) {
19670
+ return browserEntry;
19671
+ } else {
19672
+ return data.module;
19693
19673
  }
19694
- return {
19695
- code: dataToEsm(JSON.parse(json), {
19696
- preferConst: true,
19697
- namedExports: options.namedExports
19698
- }),
19699
- map: { mappings: "" }
19700
- };
19701
- } catch (e) {
19702
- const position = extractJsonErrorPosition(e.message, json.length);
19703
- const msg = position ? `, invalid JSON syntax found at position ${position}` : `.`;
19704
- this.error(`Failed to parse JSON file` + msg, position);
19705
19674
  }
19675
+ } else {
19676
+ return browserEntry;
19706
19677
  }
19707
- };
19678
+ }
19708
19679
  }
19709
- function serializeValue(value) {
19710
- const valueAsString = JSON.stringify(value);
19711
- if (typeof value === "object" && value != null && valueAsString.length > 10 * 1e3) {
19712
- return `/* #__PURE__ */ JSON.parse(${JSON.stringify(valueAsString)})`;
19680
+ function mapWithBrowserField(relativePathInPkgDir, map) {
19681
+ const normalizedPath = path$d.posix.normalize(relativePathInPkgDir);
19682
+ for (const key in map) {
19683
+ const normalizedKey = path$d.posix.normalize(key);
19684
+ if (normalizedPath === normalizedKey || equalWithoutSuffix(normalizedPath, normalizedKey, ".js") || equalWithoutSuffix(normalizedPath, normalizedKey, "/index.js")) {
19685
+ return map[key];
19686
+ }
19713
19687
  }
19714
- return valueAsString;
19715
19688
  }
19716
- function extractJsonErrorPosition(errorMessage, inputLength) {
19717
- if (errorMessage.startsWith("Unexpected end of JSON input")) {
19718
- return inputLength - 1;
19689
+ function equalWithoutSuffix(path2, key, suffix) {
19690
+ return key.endsWith(suffix) && key.slice(0, -suffix.length) === path2;
19691
+ }
19692
+ function tryResolveRealFile(file, preserveSymlinks) {
19693
+ const stat = tryStatSync(file);
19694
+ if (stat?.isFile()) return getRealPath(file, preserveSymlinks);
19695
+ }
19696
+ function tryResolveRealFileWithExtensions(filePath, extensions, preserveSymlinks) {
19697
+ for (const ext of extensions) {
19698
+ const res = tryResolveRealFile(filePath + ext, preserveSymlinks);
19699
+ if (res) return res;
19719
19700
  }
19720
- const errorMessageList = /at position (\d+)/.exec(errorMessage);
19721
- return errorMessageList ? Math.max(parseInt(errorMessageList[1], 10) - 1, 0) : void 0;
19701
+ }
19702
+ function tryResolveRealFileOrType(file, preserveSymlinks) {
19703
+ const fileStat = tryStatSync(file);
19704
+ if (fileStat?.isFile()) {
19705
+ return { path: getRealPath(file, preserveSymlinks), type: "file" };
19706
+ }
19707
+ if (fileStat?.isDirectory()) {
19708
+ return { type: "directory" };
19709
+ }
19710
+ return;
19711
+ }
19712
+ function getRealPath(resolved, preserveSymlinks) {
19713
+ if (!preserveSymlinks) {
19714
+ resolved = safeRealpathSync(resolved);
19715
+ }
19716
+ return normalizePath$3(resolved);
19717
+ }
19718
+ function isDirectory(path2) {
19719
+ const stat = tryStatSync(path2);
19720
+ return stat?.isDirectory() ?? false;
19722
19721
  }
19723
19722
 
19724
19723
  const debug$c = createDebugger("vite:optimize-deps");
19725
19724
  function optimizedDepsPlugin() {
19726
19725
  return {
19727
19726
  name: "vite:optimized-deps",
19727
+ applyToEnvironment(environment) {
19728
+ return !isDepOptimizationDisabled(environment.config.optimizeDeps);
19729
+ },
19728
19730
  resolveId(id) {
19729
19731
  const environment = this.environment;
19730
19732
  if (environment.depsOptimizer?.isOptimizedDepFile(id)) {
@@ -40515,7 +40517,7 @@ function htmlFallbackMiddleware(root, spaFallback) {
40515
40517
  req.url = url;
40516
40518
  return next();
40517
40519
  }
40518
- } else if (pathname[pathname.length - 1] === "/") {
40520
+ } else if (pathname.endsWith("/")) {
40519
40521
  const filePath = path$d.join(root, pathname, "index.html");
40520
40522
  if (fs__default.existsSync(filePath)) {
40521
40523
  const newUrl = url + "index.html";
@@ -41030,7 +41032,7 @@ function serveStaticMiddleware(server) {
41030
41032
  );
41031
41033
  return function viteServeStaticMiddleware(req, res, next) {
41032
41034
  const cleanedUrl = cleanUrl(req.url);
41033
- if (cleanedUrl[cleanedUrl.length - 1] === "/" || path$d.extname(cleanedUrl) === ".html" || isInternalRequest(req.url) || // skip url starting with // as these will be interpreted as
41035
+ if (cleanedUrl.endsWith("/") || path$d.extname(cleanedUrl) === ".html" || isInternalRequest(req.url) || // skip url starting with // as these will be interpreted as
41034
41036
  // scheme relative URLs by new URL() and will not be a valid file path
41035
41037
  req.url?.startsWith("//")) {
41036
41038
  return next();
@@ -41052,7 +41054,7 @@ function serveStaticMiddleware(server) {
41052
41054
  }
41053
41055
  const resolvedPathname = redirectedPathname || pathname;
41054
41056
  let fileUrl = path$d.resolve(dir, removeLeadingSlash(resolvedPathname));
41055
- if (resolvedPathname[resolvedPathname.length - 1] === "/" && fileUrl[fileUrl.length - 1] !== "/") {
41057
+ if (resolvedPathname.endsWith("/") && fileUrl[fileUrl.length - 1] !== "/") {
41056
41058
  fileUrl = withTrailingSlash(fileUrl);
41057
41059
  }
41058
41060
  if (!ensureServingAccess(fileUrl, server, res, next)) {
@@ -41701,7 +41703,7 @@ function getScriptInfo(node) {
41701
41703
  src = p;
41702
41704
  srcSourceCodeLocation = node.sourceCodeLocation?.attrs["src"];
41703
41705
  }
41704
- } else if (p.name === "type" && p.value && p.value === "module") {
41706
+ } else if (p.name === "type" && p.value === "module") {
41705
41707
  isModule = true;
41706
41708
  } else if (p.name === "async") {
41707
41709
  isAsync = true;
@@ -45725,13 +45727,15 @@ function isSameContent(a, b) {
45725
45727
 
45726
45728
  function preAliasPlugin(config) {
45727
45729
  const findPatterns = getAliasPatterns(config.resolve.alias);
45728
- const isBuild = config.command === "build";
45729
45730
  return {
45730
45731
  name: "vite:pre-alias",
45732
+ applyToEnvironment(environment) {
45733
+ return !isDepOptimizationDisabled(environment.config.optimizeDeps);
45734
+ },
45731
45735
  async resolveId(id, importer, options) {
45732
- const { environment } = this;
45736
+ const environment = this.environment;
45733
45737
  const ssr = environment.config.consumer === "server";
45734
- const depsOptimizer = environment.mode === "dev" ? environment.depsOptimizer : void 0;
45738
+ const depsOptimizer = environment.depsOptimizer;
45735
45739
  if (importer && depsOptimizer && bareImportRE.test(id) && !options.scan && id !== "@vite/client" && id !== "@vite/env") {
45736
45740
  if (findPatterns.find((pattern) => matches(pattern, id))) {
45737
45741
  const optimizedId = await tryOptimizedResolve(
@@ -45752,7 +45756,7 @@ function preAliasPlugin(config) {
45752
45756
  const optimizeDeps = depsOptimizer.options;
45753
45757
  const resolvedId = cleanUrl(resolved.id);
45754
45758
  const isVirtual = resolvedId === id || resolvedId.includes("\0");
45755
- if (!isVirtual && fs__default.existsSync(resolvedId) && !moduleListContains(optimizeDeps.exclude, id) && path$d.isAbsolute(resolvedId) && (isInNodeModules$1(resolvedId) || optimizeDeps.include?.includes(id)) && isOptimizable(resolvedId, optimizeDeps) && !(isBuild && ssr && isConfiguredAsExternal(environment, id, importer)) && (!ssr || optimizeAliasReplacementForSSR(resolvedId, optimizeDeps))) {
45759
+ if (!isVirtual && fs__default.existsSync(resolvedId) && !moduleListContains(optimizeDeps.exclude, id) && path$d.isAbsolute(resolvedId) && (isInNodeModules$1(resolvedId) || optimizeDeps.include?.includes(id)) && isOptimizable(resolvedId, optimizeDeps) && (!ssr || optimizeAliasReplacementForSSR(resolvedId, optimizeDeps))) {
45756
45760
  const optimizedInfo = depsOptimizer.registerMissingImport(
45757
45761
  id,
45758
45762
  resolvedId
@@ -46730,13 +46734,16 @@ function workerImportMetaUrlPlugin(config) {
46730
46734
  };
46731
46735
  return {
46732
46736
  name: "vite:worker-import-meta-url",
46737
+ applyToEnvironment(environment) {
46738
+ return environment.config.consumer === "client";
46739
+ },
46733
46740
  shouldTransformCachedModule({ code }) {
46734
46741
  if (isBuild && config.build.watch && isIncludeWorkerImportMetaUrl(code)) {
46735
46742
  return true;
46736
46743
  }
46737
46744
  },
46738
46745
  async transform(code, id) {
46739
- if (this.environment.config.consumer === "client" && isIncludeWorkerImportMetaUrl(code)) {
46746
+ if (isIncludeWorkerImportMetaUrl(code)) {
46740
46747
  let s;
46741
46748
  const cleanString = stripLiteral(code);
46742
46749
  const workerImportMetaUrlRE = /\bnew\s+(?:Worker|SharedWorker)\s*\(\s*(new\s+URL\s*\(\s*('[^']+'|"[^"]+"|`[^`]+`)\s*,\s*import\.meta\.url\s*\))/dg;
@@ -46808,9 +46815,11 @@ function assetImportMetaUrlPlugin(config) {
46808
46815
  };
46809
46816
  return {
46810
46817
  name: "vite:asset-import-meta-url",
46818
+ applyToEnvironment(environment) {
46819
+ return environment.config.consumer === "client";
46820
+ },
46811
46821
  async transform(code, id) {
46812
- const { environment } = this;
46813
- if (environment.config.consumer === "client" && id !== preloadHelperId && id !== CLIENT_ENTRY && code.includes("new URL") && code.includes(`import.meta.url`)) {
46822
+ if (id !== preloadHelperId && id !== CLIENT_ENTRY && code.includes("new URL") && code.includes(`import.meta.url`)) {
46814
46823
  let s;
46815
46824
  const assetImportMetaUrlRE = /\bnew\s+URL\s*\(\s*('[^']+'|"[^"]+"|`[^`]+`)\s*,\s*import\.meta\.url\s*(?:,\s*)?\)/dg;
46816
46825
  const cleanString = stripLiteral(code);
@@ -46865,7 +46874,7 @@ function assetImportMetaUrlPlugin(config) {
46865
46874
  tryIndex: false,
46866
46875
  preferRelative: true
46867
46876
  });
46868
- file = await assetResolver(environment, url, id);
46877
+ file = await assetResolver(this.environment, url, id);
46869
46878
  file ??= url[0] === "/" ? slash$1(path$d.join(publicDir, url)) : slash$1(path$d.resolve(path$d.dirname(id), url));
46870
46879
  }
46871
46880
  let builtUrl;
@@ -47251,14 +47260,11 @@ async function resolvePlugins(config, prePlugins, normalPlugins, postPlugins) {
47251
47260
  const isWorker = config.isWorker;
47252
47261
  const buildPlugins = isBuild ? await (await Promise.resolve().then(function () { return build$1; })).resolveBuildPlugins(config) : { pre: [], post: [] };
47253
47262
  const { modulePreload } = config.build;
47254
- const depOptimizationEnabled = !isBuild && Object.values(config.environments).some(
47255
- (environment) => !isDepOptimizationDisabled(environment.optimizeDeps)
47256
- );
47257
47263
  return [
47258
- depOptimizationEnabled ? optimizedDepsPlugin() : null,
47264
+ !isBuild ? optimizedDepsPlugin() : null,
47259
47265
  isBuild ? metadataPlugin() : null,
47260
47266
  !isWorker ? watchPackageDataPlugin(config.packageCache) : null,
47261
- preAliasPlugin(config),
47267
+ !isBuild ? preAliasPlugin(config) : null,
47262
47268
  alias$1({
47263
47269
  entries: config.resolve.alias,
47264
47270
  customResolver: viteAliasCustomResolver
@@ -48259,10 +48265,10 @@ function cssPlugin(config) {
48259
48265
  }
48260
48266
  },
48261
48267
  async transform(raw, id) {
48262
- const { environment } = this;
48263
48268
  if (!isCSSRequest(id) || commonjsProxyRE.test(id) || SPECIAL_QUERY_RE.test(id)) {
48264
48269
  return;
48265
48270
  }
48271
+ const { environment } = this;
48266
48272
  const resolveUrl = (url, importer) => idResolver(environment, url, importer);
48267
48273
  const urlResolver = async (url, importer) => {
48268
48274
  const decodedUrl = decodeURI(url);
@@ -49211,8 +49217,8 @@ function createCachedImport(imp) {
49211
49217
  return cached;
49212
49218
  };
49213
49219
  }
49214
- const importPostcssImport = createCachedImport(() => import('./dep-F-Bfqht7.js').then(function (n) { return n.i; }));
49215
- const importPostcssModules = createCachedImport(() => import('./dep-zaPmCqbl.js').then(function (n) { return n.i; }));
49220
+ const importPostcssImport = createCachedImport(() => import('./dep-CmNzPT96.js').then(function (n) { return n.i; }));
49221
+ const importPostcssModules = createCachedImport(() => import('./dep-Ccxds025.js').then(function (n) { return n.i; }));
49216
49222
  const importPostcss = createCachedImport(() => import('postcss'));
49217
49223
  const preprocessorWorkerControllerCache = /* @__PURE__ */ new WeakMap();
49218
49224
  let alwaysFakeWorkerWorkerControllerCache;
@@ -49232,7 +49238,7 @@ async function formatPostcssSourceMap(rawMap, file) {
49232
49238
  const inputFileDir = path$d.dirname(file);
49233
49239
  const sources = rawMap.sources.map((source) => {
49234
49240
  const cleanSource = cleanUrl(decodeURIComponent(source));
49235
- if (cleanSource[0] === "<" && cleanSource[cleanSource.length - 1] === ">") {
49241
+ if (cleanSource[0] === "<" && cleanSource.endsWith(">")) {
49236
49242
  return `\0${cleanSource}`;
49237
49243
  }
49238
49244
  return normalizePath$3(path$d.resolve(inputFileDir, cleanSource));
@@ -50279,7 +50285,7 @@ const importLightningCSS = createCachedImport(() => import('lightningcss'));
50279
50285
  async function compileLightningCSS(id, src, environment, urlResolver) {
50280
50286
  const { config } = environment;
50281
50287
  const deps = /* @__PURE__ */ new Set();
50282
- const filename = id.replace("\0", NULL_BYTE_PLACEHOLDER);
50288
+ const filename = removeDirectQuery(id).replace("\0", NULL_BYTE_PLACEHOLDER);
50283
50289
  let res;
50284
50290
  try {
50285
50291
  res = styleAttrRE.test(id) ? (await importLightningCSS()).transformStyleAttribute({
@@ -50752,7 +50758,7 @@ function buildImportAnalysisPlugin(config) {
50752
50758
  let url = name;
50753
50759
  if (!url) {
50754
50760
  const rawUrl = code.slice(start, end);
50755
- if (rawUrl[0] === `"` && rawUrl[rawUrl.length - 1] === `"`)
50761
+ if (rawUrl[0] === `"` && rawUrl.endsWith(`"`))
50756
50762
  url = rawUrl.slice(1, -1);
50757
50763
  }
50758
50764
  if (!url) continue;
@@ -50813,7 +50819,7 @@ function buildImportAnalysisPlugin(config) {
50813
50819
  let url = name;
50814
50820
  if (!url) {
50815
50821
  const rawUrl = code.slice(start, end);
50816
- if (rawUrl[0] === `"` && rawUrl[rawUrl.length - 1] === `"`)
50822
+ if (rawUrl[0] === `"` && rawUrl.endsWith(`"`))
50817
50823
  url = rawUrl.slice(1, -1);
50818
50824
  }
50819
50825
  const deps = /* @__PURE__ */ new Set();