市场夺宝奇兵
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

1127 lines
48 KiB

  1. let SOURCEMAPPING_URL = "sourceMa";
  2. SOURCEMAPPING_URL += "ppingURL";
  3. const isWindows = typeof process < "u" && process.platform === "win32";
  4. function unwrapId(id) {
  5. return id.startsWith("/@id/") ? id.slice(5).replace("__x00__", "\0") : id;
  6. }
  7. const windowsSlashRE = /\\/g;
  8. function slash(p) {
  9. return p.replace(windowsSlashRE, "/");
  10. }
  11. const postfixRE = /[?#].*$/;
  12. function cleanUrl(url) {
  13. return url.replace(postfixRE, "");
  14. }
  15. function isPrimitive(value) {
  16. return !value || typeof value != "object" && typeof value != "function";
  17. }
  18. const AsyncFunction = async function() {}.constructor;
  19. let asyncFunctionDeclarationPaddingLineCount;
  20. function getAsyncFunctionDeclarationPaddingLineCount() {
  21. if (asyncFunctionDeclarationPaddingLineCount === void 0) {
  22. let body = "/*code*/", source = new AsyncFunction("a", "b", body).toString();
  23. asyncFunctionDeclarationPaddingLineCount = source.slice(0, source.indexOf(body)).split("\n").length - 1;
  24. }
  25. return asyncFunctionDeclarationPaddingLineCount;
  26. }
  27. function promiseWithResolvers() {
  28. let resolve$1, reject;
  29. return {
  30. promise: new Promise((_resolve, _reject) => {
  31. resolve$1 = _resolve, reject = _reject;
  32. }),
  33. resolve: resolve$1,
  34. reject
  35. };
  36. }
  37. const _DRIVE_LETTER_START_RE = /^[A-Za-z]:\//;
  38. function normalizeWindowsPath(input = "") {
  39. return input && input.replace(/\\/g, "/").replace(_DRIVE_LETTER_START_RE, (r) => r.toUpperCase());
  40. }
  41. const _IS_ABSOLUTE_RE = /^[/\\](?![/\\])|^[/\\]{2}(?!\.)|^[A-Za-z]:[/\\]/, _DRIVE_LETTER_RE = /^[A-Za-z]:$/;
  42. function cwd() {
  43. return typeof process < "u" && typeof process.cwd == "function" ? process.cwd().replace(/\\/g, "/") : "/";
  44. }
  45. const resolve = function(...arguments_) {
  46. arguments_ = arguments_.map((argument) => normalizeWindowsPath(argument));
  47. let resolvedPath = "", resolvedAbsolute = !1;
  48. for (let index = arguments_.length - 1; index >= -1 && !resolvedAbsolute; index--) {
  49. let path = index >= 0 ? arguments_[index] : cwd();
  50. !path || path.length === 0 || (resolvedPath = `${path}/${resolvedPath}`, resolvedAbsolute = isAbsolute(path));
  51. }
  52. return resolvedPath = normalizeString(resolvedPath, !resolvedAbsolute), resolvedAbsolute && !isAbsolute(resolvedPath) ? `/${resolvedPath}` : resolvedPath.length > 0 ? resolvedPath : ".";
  53. };
  54. function normalizeString(path, allowAboveRoot) {
  55. let res = "", lastSegmentLength = 0, lastSlash = -1, dots = 0, char = null;
  56. for (let index = 0; index <= path.length; ++index) {
  57. if (index < path.length) char = path[index];
  58. else if (char === "/") break;
  59. else char = "/";
  60. if (char === "/") {
  61. if (!(lastSlash === index - 1 || dots === 1)) if (dots === 2) {
  62. if (res.length < 2 || lastSegmentLength !== 2 || res[res.length - 1] !== "." || res[res.length - 2] !== ".") {
  63. if (res.length > 2) {
  64. let lastSlashIndex = res.lastIndexOf("/");
  65. lastSlashIndex === -1 ? (res = "", lastSegmentLength = 0) : (res = res.slice(0, lastSlashIndex), lastSegmentLength = res.length - 1 - res.lastIndexOf("/")), lastSlash = index, dots = 0;
  66. continue;
  67. } else if (res.length > 0) {
  68. res = "", lastSegmentLength = 0, lastSlash = index, dots = 0;
  69. continue;
  70. }
  71. }
  72. allowAboveRoot && (res += res.length > 0 ? "/.." : "..", lastSegmentLength = 2);
  73. } else res.length > 0 ? res += `/${path.slice(lastSlash + 1, index)}` : res = path.slice(lastSlash + 1, index), lastSegmentLength = index - lastSlash - 1;
  74. lastSlash = index, dots = 0;
  75. } else char === "." && dots !== -1 ? ++dots : dots = -1;
  76. }
  77. return res;
  78. }
  79. const isAbsolute = function(p) {
  80. return _IS_ABSOLUTE_RE.test(p);
  81. }, dirname = function(p) {
  82. let segments = normalizeWindowsPath(p).replace(/\/$/, "").split("/").slice(0, -1);
  83. return segments.length === 1 && _DRIVE_LETTER_RE.test(segments[0]) && (segments[0] += "/"), segments.join("/") || (isAbsolute(p) ? "/" : ".");
  84. }, decodeBase64 = typeof atob < "u" ? atob : (str) => Buffer.from(str, "base64").toString("utf-8"), percentRegEx = /%/g, backslashRegEx = /\\/g, newlineRegEx = /\n/g, carriageReturnRegEx = /\r/g, tabRegEx = /\t/g, questionRegex = /\?/g, hashRegex = /#/g;
  85. function encodePathChars(filepath) {
  86. return filepath.indexOf("%") !== -1 && (filepath = filepath.replace(percentRegEx, "%25")), !isWindows && filepath.indexOf("\\") !== -1 && (filepath = filepath.replace(backslashRegEx, "%5C")), filepath.indexOf("\n") !== -1 && (filepath = filepath.replace(newlineRegEx, "%0A")), filepath.indexOf("\r") !== -1 && (filepath = filepath.replace(carriageReturnRegEx, "%0D")), filepath.indexOf(" ") !== -1 && (filepath = filepath.replace(tabRegEx, "%09")), filepath;
  87. }
  88. const posixDirname = dirname, posixResolve = resolve;
  89. function posixPathToFileHref(posixPath) {
  90. let resolved = posixResolve(posixPath), filePathLast = posixPath.charCodeAt(posixPath.length - 1);
  91. return (filePathLast === 47 || isWindows && filePathLast === 92) && resolved[resolved.length - 1] !== "/" && (resolved += "/"), resolved = encodePathChars(resolved), resolved.indexOf("?") !== -1 && (resolved = resolved.replace(questionRegex, "%3F")), resolved.indexOf("#") !== -1 && (resolved = resolved.replace(hashRegex, "%23")), new URL(`file://${resolved}`).href;
  92. }
  93. function toWindowsPath(path) {
  94. return path.replace(/\//g, "\\");
  95. }
  96. var comma = 44, chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/", intToChar = new Uint8Array(64), charToInt = new Uint8Array(128);
  97. for (let i = 0; i < chars.length; i++) {
  98. let c = chars.charCodeAt(i);
  99. intToChar[i] = c, charToInt[c] = i;
  100. }
  101. function decodeInteger(reader, relative) {
  102. let value = 0, shift = 0, integer = 0;
  103. do {
  104. let c = reader.next();
  105. integer = charToInt[c], value |= (integer & 31) << shift, shift += 5;
  106. } while (integer & 32);
  107. let shouldNegate = value & 1;
  108. return value >>>= 1, shouldNegate && (value = -2147483648 | -value), relative + value;
  109. }
  110. function hasMoreVlq(reader, max) {
  111. return reader.pos >= max ? !1 : reader.peek() !== comma;
  112. }
  113. var StringReader = class {
  114. constructor(buffer) {
  115. this.pos = 0, this.buffer = buffer;
  116. }
  117. next() {
  118. return this.buffer.charCodeAt(this.pos++);
  119. }
  120. peek() {
  121. return this.buffer.charCodeAt(this.pos);
  122. }
  123. indexOf(char) {
  124. let { buffer, pos } = this, idx = buffer.indexOf(char, pos);
  125. return idx === -1 ? buffer.length : idx;
  126. }
  127. };
  128. function decode(mappings) {
  129. let { length } = mappings, reader = new StringReader(mappings), decoded = [], genColumn = 0, sourcesIndex = 0, sourceLine = 0, sourceColumn = 0, namesIndex = 0;
  130. do {
  131. let semi = reader.indexOf(";"), line = [], sorted = !0, lastCol = 0;
  132. for (genColumn = 0; reader.pos < semi;) {
  133. let seg;
  134. genColumn = decodeInteger(reader, genColumn), genColumn < lastCol && (sorted = !1), lastCol = genColumn, hasMoreVlq(reader, semi) ? (sourcesIndex = decodeInteger(reader, sourcesIndex), sourceLine = decodeInteger(reader, sourceLine), sourceColumn = decodeInteger(reader, sourceColumn), hasMoreVlq(reader, semi) ? (namesIndex = decodeInteger(reader, namesIndex), seg = [
  135. genColumn,
  136. sourcesIndex,
  137. sourceLine,
  138. sourceColumn,
  139. namesIndex
  140. ]) : seg = [
  141. genColumn,
  142. sourcesIndex,
  143. sourceLine,
  144. sourceColumn
  145. ]) : seg = [genColumn], line.push(seg), reader.pos++;
  146. }
  147. sorted || sort(line), decoded.push(line), reader.pos = semi + 1;
  148. } while (reader.pos <= length);
  149. return decoded;
  150. }
  151. function sort(line) {
  152. line.sort(sortComparator);
  153. }
  154. function sortComparator(a, b) {
  155. return a[0] - b[0];
  156. }
  157. var COLUMN = 0, SOURCES_INDEX = 1, SOURCE_LINE = 2, SOURCE_COLUMN = 3, NAMES_INDEX = 4, found = !1;
  158. function binarySearch(haystack, needle, low, high) {
  159. for (; low <= high;) {
  160. let mid = low + (high - low >> 1), cmp = haystack[mid][COLUMN] - needle;
  161. if (cmp === 0) return found = !0, mid;
  162. cmp < 0 ? low = mid + 1 : high = mid - 1;
  163. }
  164. return found = !1, low - 1;
  165. }
  166. function upperBound(haystack, needle, index) {
  167. for (let i = index + 1; i < haystack.length && haystack[i][COLUMN] === needle; index = i++);
  168. return index;
  169. }
  170. function lowerBound(haystack, needle, index) {
  171. for (let i = index - 1; i >= 0 && haystack[i][COLUMN] === needle; index = i--);
  172. return index;
  173. }
  174. function memoizedBinarySearch(haystack, needle, state, key) {
  175. let { lastKey, lastNeedle, lastIndex } = state, low = 0, high = haystack.length - 1;
  176. if (key === lastKey) {
  177. if (needle === lastNeedle) return found = lastIndex !== -1 && haystack[lastIndex][COLUMN] === needle, lastIndex;
  178. needle >= lastNeedle ? low = lastIndex === -1 ? 0 : lastIndex : high = lastIndex;
  179. }
  180. return state.lastKey = key, state.lastNeedle = needle, state.lastIndex = binarySearch(haystack, needle, low, high);
  181. }
  182. var LINE_GTR_ZERO = "`line` must be greater than 0 (lines start at line 1)", COL_GTR_EQ_ZERO = "`column` must be greater than or equal to 0 (columns start at column 0)", LEAST_UPPER_BOUND = -1, GREATEST_LOWER_BOUND = 1;
  183. function cast(map) {
  184. return map;
  185. }
  186. function decodedMappings(map) {
  187. var _a;
  188. return (_a = cast(map))._decoded || (_a._decoded = decode(cast(map)._encoded));
  189. }
  190. function originalPositionFor(map, needle) {
  191. let { line, column, bias } = needle;
  192. if (line--, line < 0) throw Error(LINE_GTR_ZERO);
  193. if (column < 0) throw Error(COL_GTR_EQ_ZERO);
  194. let decoded = decodedMappings(map);
  195. if (line >= decoded.length) return OMapping(null, null, null, null);
  196. let segments = decoded[line], index = traceSegmentInternal(segments, cast(map)._decodedMemo, line, column, bias || GREATEST_LOWER_BOUND);
  197. if (index === -1) return OMapping(null, null, null, null);
  198. let segment = segments[index];
  199. if (segment.length === 1) return OMapping(null, null, null, null);
  200. let { names, resolvedSources } = map;
  201. return OMapping(resolvedSources[segment[SOURCES_INDEX]], segment[SOURCE_LINE] + 1, segment[SOURCE_COLUMN], segment.length === 5 ? names[segment[NAMES_INDEX]] : null);
  202. }
  203. function OMapping(source, line, column, name) {
  204. return {
  205. source,
  206. line,
  207. column,
  208. name
  209. };
  210. }
  211. function traceSegmentInternal(segments, memo, line, column, bias) {
  212. let index = memoizedBinarySearch(segments, column, memo, line);
  213. return found ? index = (bias === LEAST_UPPER_BOUND ? upperBound : lowerBound)(segments, column, index) : bias === LEAST_UPPER_BOUND && index++, index === -1 || index === segments.length ? -1 : index;
  214. }
  215. var DecodedMap = class {
  216. _encoded;
  217. _decoded;
  218. _decodedMemo;
  219. url;
  220. version;
  221. names = [];
  222. resolvedSources;
  223. constructor(map, from) {
  224. this.map = map;
  225. let { mappings, names, sources } = map;
  226. this.version = map.version, this.names = names || [], this._encoded = mappings || "", this._decodedMemo = memoizedState(), this.url = from, this.resolvedSources = (sources || []).map((s) => posixResolve(s || "", from));
  227. }
  228. };
  229. function memoizedState() {
  230. return {
  231. lastKey: -1,
  232. lastNeedle: -1,
  233. lastIndex: -1
  234. };
  235. }
  236. function getOriginalPosition(map, needle) {
  237. let result = originalPositionFor(map, needle);
  238. return result.column == null ? null : result;
  239. }
  240. const MODULE_RUNNER_SOURCEMAPPING_REGEXP = /* @__PURE__ */ RegExp(`//# ${SOURCEMAPPING_URL}=data:application/json;base64,(.+)`);
  241. var EvaluatedModuleNode = class {
  242. importers = /* @__PURE__ */ new Set();
  243. imports = /* @__PURE__ */ new Set();
  244. evaluated = !1;
  245. meta;
  246. promise;
  247. exports;
  248. file;
  249. map;
  250. constructor(id, url) {
  251. this.id = id, this.url = url, this.file = cleanUrl(id);
  252. }
  253. }, EvaluatedModules = class {
  254. idToModuleMap = /* @__PURE__ */ new Map();
  255. fileToModulesMap = /* @__PURE__ */ new Map();
  256. urlToIdModuleMap = /* @__PURE__ */ new Map();
  257. getModuleById(id) {
  258. return this.idToModuleMap.get(id);
  259. }
  260. getModulesByFile(file) {
  261. return this.fileToModulesMap.get(file);
  262. }
  263. getModuleByUrl(url) {
  264. return this.urlToIdModuleMap.get(unwrapId(url));
  265. }
  266. ensureModule(id, url) {
  267. if (id = normalizeModuleId(id), this.idToModuleMap.has(id)) {
  268. let moduleNode$1 = this.idToModuleMap.get(id);
  269. return this.urlToIdModuleMap.set(url, moduleNode$1), moduleNode$1;
  270. }
  271. let moduleNode = new EvaluatedModuleNode(id, url);
  272. this.idToModuleMap.set(id, moduleNode), this.urlToIdModuleMap.set(url, moduleNode);
  273. let fileModules = this.fileToModulesMap.get(moduleNode.file) || /* @__PURE__ */ new Set();
  274. return fileModules.add(moduleNode), this.fileToModulesMap.set(moduleNode.file, fileModules), moduleNode;
  275. }
  276. invalidateModule(node) {
  277. node.evaluated = !1, node.meta = void 0, node.map = void 0, node.promise = void 0, node.exports = void 0, node.imports.clear();
  278. }
  279. getModuleSourceMapById(id) {
  280. let mod = this.getModuleById(id);
  281. if (!mod) return null;
  282. if (mod.map) return mod.map;
  283. if (!mod.meta || !("code" in mod.meta)) return null;
  284. let pattern = `//# ${SOURCEMAPPING_URL}=data:application/json;base64,`, lastIndex = mod.meta.code.lastIndexOf(pattern);
  285. if (lastIndex === -1) return null;
  286. let mapString = MODULE_RUNNER_SOURCEMAPPING_REGEXP.exec(mod.meta.code.slice(lastIndex))?.[1];
  287. return mapString ? (mod.map = new DecodedMap(JSON.parse(decodeBase64(mapString)), mod.file), mod.map) : null;
  288. }
  289. clear() {
  290. this.idToModuleMap.clear(), this.fileToModulesMap.clear(), this.urlToIdModuleMap.clear();
  291. }
  292. };
  293. const prefixedBuiltins = new Set([
  294. "node:sea",
  295. "node:sqlite",
  296. "node:test",
  297. "node:test/reporters"
  298. ]);
  299. function normalizeModuleId(file) {
  300. return prefixedBuiltins.has(file) ? file : slash(file).replace(/^\/@fs\//, isWindows ? "" : "/").replace(/^node:/, "").replace(/^\/+/, "/").replace(/^file:\/+/, isWindows ? "" : "/");
  301. }
  302. var HMRContext = class {
  303. newListeners;
  304. constructor(hmrClient, ownerPath) {
  305. this.hmrClient = hmrClient, this.ownerPath = ownerPath, hmrClient.dataMap.has(ownerPath) || hmrClient.dataMap.set(ownerPath, {});
  306. let mod = hmrClient.hotModulesMap.get(ownerPath);
  307. mod && (mod.callbacks = []);
  308. let staleListeners = hmrClient.ctxToListenersMap.get(ownerPath);
  309. if (staleListeners) for (let [event, staleFns] of staleListeners) {
  310. let listeners = hmrClient.customListenersMap.get(event);
  311. listeners && hmrClient.customListenersMap.set(event, listeners.filter((l) => !staleFns.includes(l)));
  312. }
  313. this.newListeners = /* @__PURE__ */ new Map(), hmrClient.ctxToListenersMap.set(ownerPath, this.newListeners);
  314. }
  315. get data() {
  316. return this.hmrClient.dataMap.get(this.ownerPath);
  317. }
  318. accept(deps, callback) {
  319. if (typeof deps == "function" || !deps) this.acceptDeps([this.ownerPath], ([mod]) => deps?.(mod));
  320. else if (typeof deps == "string") this.acceptDeps([deps], ([mod]) => callback?.(mod));
  321. else if (Array.isArray(deps)) this.acceptDeps(deps, callback);
  322. else throw Error("invalid hot.accept() usage.");
  323. }
  324. acceptExports(_, callback) {
  325. this.acceptDeps([this.ownerPath], ([mod]) => callback?.(mod));
  326. }
  327. dispose(cb) {
  328. this.hmrClient.disposeMap.set(this.ownerPath, cb);
  329. }
  330. prune(cb) {
  331. this.hmrClient.pruneMap.set(this.ownerPath, cb);
  332. }
  333. decline() {}
  334. invalidate(message) {
  335. let firstInvalidatedBy = this.hmrClient.currentFirstInvalidatedBy ?? this.ownerPath;
  336. this.hmrClient.notifyListeners("vite:invalidate", {
  337. path: this.ownerPath,
  338. message,
  339. firstInvalidatedBy
  340. }), this.send("vite:invalidate", {
  341. path: this.ownerPath,
  342. message,
  343. firstInvalidatedBy
  344. }), this.hmrClient.logger.debug(`invalidate ${this.ownerPath}${message ? `: ${message}` : ""}`);
  345. }
  346. on(event, cb) {
  347. let addToMap = (map) => {
  348. let existing = map.get(event) || [];
  349. existing.push(cb), map.set(event, existing);
  350. };
  351. addToMap(this.hmrClient.customListenersMap), addToMap(this.newListeners);
  352. }
  353. off(event, cb) {
  354. let removeFromMap = (map) => {
  355. let existing = map.get(event);
  356. if (existing === void 0) return;
  357. let pruned = existing.filter((l) => l !== cb);
  358. if (pruned.length === 0) {
  359. map.delete(event);
  360. return;
  361. }
  362. map.set(event, pruned);
  363. };
  364. removeFromMap(this.hmrClient.customListenersMap), removeFromMap(this.newListeners);
  365. }
  366. send(event, data) {
  367. this.hmrClient.send({
  368. type: "custom",
  369. event,
  370. data
  371. });
  372. }
  373. acceptDeps(deps, callback = () => {}) {
  374. let mod = this.hmrClient.hotModulesMap.get(this.ownerPath) || {
  375. id: this.ownerPath,
  376. callbacks: []
  377. };
  378. mod.callbacks.push({
  379. deps,
  380. fn: callback
  381. }), this.hmrClient.hotModulesMap.set(this.ownerPath, mod);
  382. }
  383. }, HMRClient = class {
  384. hotModulesMap = /* @__PURE__ */ new Map();
  385. disposeMap = /* @__PURE__ */ new Map();
  386. pruneMap = /* @__PURE__ */ new Map();
  387. dataMap = /* @__PURE__ */ new Map();
  388. customListenersMap = /* @__PURE__ */ new Map();
  389. ctxToListenersMap = /* @__PURE__ */ new Map();
  390. currentFirstInvalidatedBy;
  391. constructor(logger, transport, importUpdatedModule) {
  392. this.logger = logger, this.transport = transport, this.importUpdatedModule = importUpdatedModule;
  393. }
  394. async notifyListeners(event, data) {
  395. let cbs = this.customListenersMap.get(event);
  396. cbs && await Promise.allSettled(cbs.map((cb) => cb(data)));
  397. }
  398. send(payload) {
  399. this.transport.send(payload).catch((err) => {
  400. this.logger.error(err);
  401. });
  402. }
  403. clear() {
  404. this.hotModulesMap.clear(), this.disposeMap.clear(), this.pruneMap.clear(), this.dataMap.clear(), this.customListenersMap.clear(), this.ctxToListenersMap.clear();
  405. }
  406. async prunePaths(paths) {
  407. await Promise.all(paths.map((path) => {
  408. let disposer = this.disposeMap.get(path);
  409. if (disposer) return disposer(this.dataMap.get(path));
  410. })), await Promise.all(paths.map((path) => {
  411. let fn = this.pruneMap.get(path);
  412. if (fn) return fn(this.dataMap.get(path));
  413. }));
  414. }
  415. warnFailedUpdate(err, path) {
  416. (!(err instanceof Error) || !err.message.includes("fetch")) && this.logger.error(err), this.logger.error(`Failed to reload ${path}. This could be due to syntax errors or importing non-existent modules. (see errors above)`);
  417. }
  418. updateQueue = [];
  419. pendingUpdateQueue = !1;
  420. async queueUpdate(payload) {
  421. if (this.updateQueue.push(this.fetchUpdate(payload)), !this.pendingUpdateQueue) {
  422. this.pendingUpdateQueue = !0, await Promise.resolve(), this.pendingUpdateQueue = !1;
  423. let loading = [...this.updateQueue];
  424. this.updateQueue = [], (await Promise.all(loading)).forEach((fn) => fn && fn());
  425. }
  426. }
  427. async fetchUpdate(update) {
  428. let { path, acceptedPath, firstInvalidatedBy } = update, mod = this.hotModulesMap.get(path);
  429. if (!mod) return;
  430. let fetchedModule, isSelfUpdate = path === acceptedPath, qualifiedCallbacks = mod.callbacks.filter(({ deps }) => deps.includes(acceptedPath));
  431. if (isSelfUpdate || qualifiedCallbacks.length > 0) {
  432. let disposer = this.disposeMap.get(acceptedPath);
  433. disposer && await disposer(this.dataMap.get(acceptedPath));
  434. try {
  435. fetchedModule = await this.importUpdatedModule(update);
  436. } catch (e) {
  437. this.warnFailedUpdate(e, acceptedPath);
  438. }
  439. }
  440. return () => {
  441. try {
  442. this.currentFirstInvalidatedBy = firstInvalidatedBy;
  443. for (let { deps, fn } of qualifiedCallbacks) fn(deps.map((dep) => dep === acceptedPath ? fetchedModule : void 0));
  444. let loggedPath = isSelfUpdate ? path : `${acceptedPath} via ${path}`;
  445. this.logger.debug(`hot updated: ${loggedPath}`);
  446. } finally {
  447. this.currentFirstInvalidatedBy = void 0;
  448. }
  449. };
  450. }
  451. };
  452. function analyzeImportedModDifference(mod, rawId, moduleType, metadata) {
  453. if (!metadata?.isDynamicImport && metadata?.importedNames?.length) {
  454. let missingBindings = metadata.importedNames.filter((s) => !(s in mod));
  455. if (missingBindings.length) {
  456. let lastBinding = missingBindings[missingBindings.length - 1];
  457. throw moduleType === "module" ? SyntaxError(`[vite] The requested module '${rawId}' does not provide an export named '${lastBinding}'`) : SyntaxError(`\
  458. [vite] Named export '${lastBinding}' not found. The requested module '${rawId}' is a CommonJS module, which may not support all module.exports as named exports.
  459. CommonJS modules can always be imported via the default export, for example using:
  460. import pkg from '${rawId}';
  461. const {${missingBindings.join(", ")}} = pkg;
  462. `);
  463. }
  464. }
  465. }
  466. let nanoid = (size = 21) => {
  467. let id = "", i = size | 0;
  468. for (; i--;) id += "useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict"[Math.random() * 64 | 0];
  469. return id;
  470. };
  471. function reviveInvokeError(e) {
  472. let error = Error(e.message || "Unknown invoke error");
  473. return Object.assign(error, e, { runnerError: /* @__PURE__ */ Error("RunnerError") }), error;
  474. }
  475. const createInvokeableTransport = (transport) => {
  476. if (transport.invoke) return {
  477. ...transport,
  478. async invoke(name, data) {
  479. let result = await transport.invoke({
  480. type: "custom",
  481. event: "vite:invoke",
  482. data: {
  483. id: "send",
  484. name,
  485. data
  486. }
  487. });
  488. if ("error" in result) throw reviveInvokeError(result.error);
  489. return result.result;
  490. }
  491. };
  492. if (!transport.send || !transport.connect) throw Error("transport must implement send and connect when invoke is not implemented");
  493. let rpcPromises = /* @__PURE__ */ new Map();
  494. return {
  495. ...transport,
  496. connect({ onMessage, onDisconnection }) {
  497. return transport.connect({
  498. onMessage(payload) {
  499. if (payload.type === "custom" && payload.event === "vite:invoke") {
  500. let data = payload.data;
  501. if (data.id.startsWith("response:")) {
  502. let invokeId = data.id.slice(9), promise = rpcPromises.get(invokeId);
  503. if (!promise) return;
  504. promise.timeoutId && clearTimeout(promise.timeoutId), rpcPromises.delete(invokeId);
  505. let { error, result } = data.data;
  506. error ? promise.reject(error) : promise.resolve(result);
  507. return;
  508. }
  509. }
  510. onMessage(payload);
  511. },
  512. onDisconnection
  513. });
  514. },
  515. disconnect() {
  516. return rpcPromises.forEach((promise) => {
  517. promise.reject(/* @__PURE__ */ Error(`transport was disconnected, cannot call ${JSON.stringify(promise.name)}`));
  518. }), rpcPromises.clear(), transport.disconnect?.();
  519. },
  520. send(data) {
  521. return transport.send(data);
  522. },
  523. async invoke(name, data) {
  524. let promiseId = nanoid(), wrappedData = {
  525. type: "custom",
  526. event: "vite:invoke",
  527. data: {
  528. name,
  529. id: `send:${promiseId}`,
  530. data
  531. }
  532. }, sendPromise = transport.send(wrappedData), { promise, resolve: resolve$1, reject } = promiseWithResolvers(), timeout = transport.timeout ?? 6e4, timeoutId;
  533. timeout > 0 && (timeoutId = setTimeout(() => {
  534. rpcPromises.delete(promiseId), reject(/* @__PURE__ */ Error(`transport invoke timed out after ${timeout}ms (data: ${JSON.stringify(wrappedData)})`));
  535. }, timeout), timeoutId?.unref?.()), rpcPromises.set(promiseId, {
  536. resolve: resolve$1,
  537. reject,
  538. name,
  539. timeoutId
  540. }), sendPromise && sendPromise.catch((err) => {
  541. clearTimeout(timeoutId), rpcPromises.delete(promiseId), reject(err);
  542. });
  543. try {
  544. return await promise;
  545. } catch (err) {
  546. throw reviveInvokeError(err);
  547. }
  548. }
  549. };
  550. }, normalizeModuleRunnerTransport = (transport) => {
  551. let invokeableTransport = createInvokeableTransport(transport), isConnected = !invokeableTransport.connect, connectingPromise;
  552. return {
  553. ...transport,
  554. ...invokeableTransport.connect ? { async connect(onMessage) {
  555. if (isConnected) return;
  556. if (connectingPromise) {
  557. await connectingPromise;
  558. return;
  559. }
  560. let maybePromise = invokeableTransport.connect({
  561. onMessage: onMessage ?? (() => {}),
  562. onDisconnection() {
  563. isConnected = !1;
  564. }
  565. });
  566. maybePromise && (connectingPromise = maybePromise, await connectingPromise, connectingPromise = void 0), isConnected = !0;
  567. } } : {},
  568. ...invokeableTransport.disconnect ? { async disconnect() {
  569. isConnected && (connectingPromise && await connectingPromise, isConnected = !1, await invokeableTransport.disconnect());
  570. } } : {},
  571. async send(data) {
  572. if (invokeableTransport.send) {
  573. if (!isConnected) if (connectingPromise) await connectingPromise;
  574. else throw Error("send was called before connect");
  575. await invokeableTransport.send(data);
  576. }
  577. },
  578. async invoke(name, data) {
  579. if (!isConnected) if (connectingPromise) await connectingPromise;
  580. else throw Error("invoke was called before connect");
  581. return invokeableTransport.invoke(name, data);
  582. }
  583. };
  584. }, createWebSocketModuleRunnerTransport = (options) => {
  585. let pingInterval = options.pingInterval ?? 3e4, ws, pingIntervalId;
  586. return {
  587. async connect({ onMessage, onDisconnection }) {
  588. let socket = options.createConnection();
  589. socket.addEventListener("message", async ({ data }) => {
  590. onMessage(JSON.parse(data));
  591. });
  592. let isOpened = socket.readyState === socket.OPEN;
  593. isOpened || await new Promise((resolve$1, reject) => {
  594. socket.addEventListener("open", () => {
  595. isOpened = !0, resolve$1();
  596. }, { once: !0 }), socket.addEventListener("close", async () => {
  597. if (!isOpened) {
  598. reject(/* @__PURE__ */ Error("WebSocket closed without opened."));
  599. return;
  600. }
  601. onMessage({
  602. type: "custom",
  603. event: "vite:ws:disconnect",
  604. data: { webSocket: socket }
  605. }), onDisconnection();
  606. });
  607. }), onMessage({
  608. type: "custom",
  609. event: "vite:ws:connect",
  610. data: { webSocket: socket }
  611. }), ws = socket, pingIntervalId = setInterval(() => {
  612. socket.readyState === socket.OPEN && socket.send(JSON.stringify({ type: "ping" }));
  613. }, pingInterval);
  614. },
  615. disconnect() {
  616. clearInterval(pingIntervalId), ws?.close();
  617. },
  618. send(data) {
  619. ws.send(JSON.stringify(data));
  620. }
  621. };
  622. }, ssrModuleExportsKey = "__vite_ssr_exports__", ssrImportKey = "__vite_ssr_import__", ssrDynamicImportKey = "__vite_ssr_dynamic_import__", ssrExportAllKey = "__vite_ssr_exportAll__", ssrExportNameKey = "__vite_ssr_exportName__", ssrImportMetaKey = "__vite_ssr_import_meta__", noop = () => {}, silentConsole = {
  623. debug: noop,
  624. error: noop
  625. }, hmrLogger = {
  626. debug: (...msg) => console.log("[vite]", ...msg),
  627. error: (error) => console.log("[vite]", error)
  628. };
  629. function createHMRHandler(handler) {
  630. let queue = new Queue();
  631. return (payload) => queue.enqueue(() => handler(payload));
  632. }
  633. var Queue = class {
  634. queue = [];
  635. pending = !1;
  636. enqueue(promise) {
  637. return new Promise((resolve$1, reject) => {
  638. this.queue.push({
  639. promise,
  640. resolve: resolve$1,
  641. reject
  642. }), this.dequeue();
  643. });
  644. }
  645. dequeue() {
  646. if (this.pending) return !1;
  647. let item = this.queue.shift();
  648. return item ? (this.pending = !0, item.promise().then(item.resolve).catch(item.reject).finally(() => {
  649. this.pending = !1, this.dequeue();
  650. }), !0) : !1;
  651. }
  652. };
  653. function createHMRHandlerForRunner(runner) {
  654. return createHMRHandler(async (payload) => {
  655. let hmrClient = runner.hmrClient;
  656. if (!(!hmrClient || runner.isClosed())) switch (payload.type) {
  657. case "connected":
  658. hmrClient.logger.debug("connected.");
  659. break;
  660. case "update":
  661. await hmrClient.notifyListeners("vite:beforeUpdate", payload), await Promise.all(payload.updates.map(async (update) => {
  662. if (update.type === "js-update") return update.acceptedPath = unwrapId(update.acceptedPath), update.path = unwrapId(update.path), hmrClient.queueUpdate(update);
  663. hmrClient.logger.error("css hmr is not supported in runner mode.");
  664. })), await hmrClient.notifyListeners("vite:afterUpdate", payload);
  665. break;
  666. case "custom":
  667. await hmrClient.notifyListeners(payload.event, payload.data);
  668. break;
  669. case "full-reload": {
  670. let { triggeredBy } = payload, clearEntrypointUrls = triggeredBy ? getModulesEntrypoints(runner, getModulesByFile(runner, slash(triggeredBy))) : findAllEntrypoints(runner);
  671. if (!clearEntrypointUrls.size) break;
  672. hmrClient.logger.debug("program reload"), await hmrClient.notifyListeners("vite:beforeFullReload", payload), runner.evaluatedModules.clear();
  673. for (let url of clearEntrypointUrls) try {
  674. await runner.import(url);
  675. } catch (err) {
  676. err.code !== "ERR_OUTDATED_OPTIMIZED_DEP" && hmrClient.logger.error(`An error happened during full reload\n${err.message}\n${err.stack}`);
  677. }
  678. break;
  679. }
  680. case "prune":
  681. await hmrClient.notifyListeners("vite:beforePrune", payload), await hmrClient.prunePaths(payload.paths);
  682. break;
  683. case "error": {
  684. await hmrClient.notifyListeners("vite:error", payload);
  685. let err = payload.err;
  686. hmrClient.logger.error(`Internal Server Error\n${err.message}\n${err.stack}`);
  687. break;
  688. }
  689. case "ping": break;
  690. default: return payload;
  691. }
  692. });
  693. }
  694. function getModulesByFile(runner, file) {
  695. let nodes = runner.evaluatedModules.getModulesByFile(file);
  696. return nodes ? [...nodes].map((node) => node.id) : [];
  697. }
  698. function getModulesEntrypoints(runner, modules, visited = /* @__PURE__ */ new Set(), entrypoints = /* @__PURE__ */ new Set()) {
  699. for (let moduleId of modules) {
  700. if (visited.has(moduleId)) continue;
  701. visited.add(moduleId);
  702. let module = runner.evaluatedModules.getModuleById(moduleId);
  703. if (module) {
  704. if (!module.importers.size) {
  705. entrypoints.add(module.url);
  706. continue;
  707. }
  708. for (let importer of module.importers) getModulesEntrypoints(runner, [importer], visited, entrypoints);
  709. }
  710. }
  711. return entrypoints;
  712. }
  713. function findAllEntrypoints(runner, entrypoints = /* @__PURE__ */ new Set()) {
  714. for (let mod of runner.evaluatedModules.idToModuleMap.values()) mod.importers.size || entrypoints.add(mod.url);
  715. return entrypoints;
  716. }
  717. const sourceMapCache = {}, fileContentsCache = {}, evaluatedModulesCache = /* @__PURE__ */ new Set(), retrieveFileHandlers = /* @__PURE__ */ new Set(), retrieveSourceMapHandlers = /* @__PURE__ */ new Set(), createExecHandlers = (handlers) => ((...args) => {
  718. for (let handler of handlers) {
  719. let result = handler(...args);
  720. if (result) return result;
  721. }
  722. return null;
  723. }), retrieveFileFromHandlers = createExecHandlers(retrieveFileHandlers), retrieveSourceMapFromHandlers = createExecHandlers(retrieveSourceMapHandlers);
  724. let overridden = !1;
  725. const originalPrepare = Error.prepareStackTrace;
  726. function resetInterceptor(runner, options) {
  727. evaluatedModulesCache.delete(runner.evaluatedModules), options.retrieveFile && retrieveFileHandlers.delete(options.retrieveFile), options.retrieveSourceMap && retrieveSourceMapHandlers.delete(options.retrieveSourceMap), evaluatedModulesCache.size === 0 && (Error.prepareStackTrace = originalPrepare, overridden = !1);
  728. }
  729. function interceptStackTrace(runner, options = {}) {
  730. return overridden ||= (Error.prepareStackTrace = prepareStackTrace, !0), evaluatedModulesCache.add(runner.evaluatedModules), options.retrieveFile && retrieveFileHandlers.add(options.retrieveFile), options.retrieveSourceMap && retrieveSourceMapHandlers.add(options.retrieveSourceMap), () => resetInterceptor(runner, options);
  731. }
  732. function supportRelativeURL(file, url) {
  733. if (!file) return url;
  734. let dir = posixDirname(slash(file)), match = /^\w+:\/\/[^/]*/.exec(dir), protocol = match ? match[0] : "", startPath = dir.slice(protocol.length);
  735. return protocol && /^\/\w:/.test(startPath) ? (protocol += "/", protocol + slash(posixResolve(startPath, url))) : protocol + posixResolve(startPath, url);
  736. }
  737. function getRunnerSourceMap(position) {
  738. for (let moduleGraph of evaluatedModulesCache) {
  739. let sourceMap = moduleGraph.getModuleSourceMapById(position.source);
  740. if (sourceMap) return {
  741. url: position.source,
  742. map: sourceMap,
  743. vite: !0
  744. };
  745. }
  746. return null;
  747. }
  748. function retrieveFile(path) {
  749. if (path in fileContentsCache) return fileContentsCache[path];
  750. let content = retrieveFileFromHandlers(path);
  751. return typeof content == "string" ? (fileContentsCache[path] = content, content) : null;
  752. }
  753. function retrieveSourceMapURL(source) {
  754. let fileData = retrieveFile(source);
  755. if (!fileData) return null;
  756. let re = /\/\/[@#]\s*sourceMappingURL=([^\s'"]+)\s*$|\/\*[@#]\s*sourceMappingURL=[^\s*'"]+\s*\*\/\s*$/gm, lastMatch, match;
  757. for (; match = re.exec(fileData);) lastMatch = match;
  758. return lastMatch ? lastMatch[1] : null;
  759. }
  760. const reSourceMap = /^data:application\/json[^,]+base64,/;
  761. function retrieveSourceMap(source) {
  762. let urlAndMap = retrieveSourceMapFromHandlers(source);
  763. if (urlAndMap) return urlAndMap;
  764. let sourceMappingURL = retrieveSourceMapURL(source);
  765. if (!sourceMappingURL) return null;
  766. let sourceMapData;
  767. if (reSourceMap.test(sourceMappingURL)) {
  768. let rawData = sourceMappingURL.slice(sourceMappingURL.indexOf(",") + 1);
  769. sourceMapData = Buffer.from(rawData, "base64").toString(), sourceMappingURL = source;
  770. } else sourceMappingURL = supportRelativeURL(source, sourceMappingURL), sourceMapData = retrieveFile(sourceMappingURL);
  771. return sourceMapData ? {
  772. url: sourceMappingURL,
  773. map: sourceMapData
  774. } : null;
  775. }
  776. function mapSourcePosition(position) {
  777. if (!position.source) return position;
  778. let sourceMap = getRunnerSourceMap(position);
  779. if (sourceMap ||= sourceMapCache[position.source], !sourceMap) {
  780. let urlAndMap = retrieveSourceMap(position.source);
  781. if (urlAndMap && urlAndMap.map) {
  782. let url = urlAndMap.url;
  783. sourceMap = sourceMapCache[position.source] = {
  784. url,
  785. map: new DecodedMap(typeof urlAndMap.map == "string" ? JSON.parse(urlAndMap.map) : urlAndMap.map, url)
  786. };
  787. let contents = sourceMap.map?.map.sourcesContent;
  788. sourceMap.map && contents && sourceMap.map.resolvedSources.forEach((source, i) => {
  789. let content = contents[i];
  790. if (content && source && url) {
  791. let contentUrl = supportRelativeURL(url, source);
  792. fileContentsCache[contentUrl] = content;
  793. }
  794. });
  795. } else sourceMap = sourceMapCache[position.source] = {
  796. url: null,
  797. map: null
  798. };
  799. }
  800. if (sourceMap.map && sourceMap.url) {
  801. let originalPosition = getOriginalPosition(sourceMap.map, position);
  802. if (originalPosition && originalPosition.source != null) return originalPosition.source = supportRelativeURL(sourceMap.url, originalPosition.source), sourceMap.vite && (originalPosition._vite = !0), originalPosition;
  803. }
  804. return position;
  805. }
  806. function mapEvalOrigin(origin) {
  807. let match = /^eval at ([^(]+) \((.+):(\d+):(\d+)\)$/.exec(origin);
  808. if (match) {
  809. let position = mapSourcePosition({
  810. name: null,
  811. source: match[2],
  812. line: +match[3],
  813. column: match[4] - 1
  814. });
  815. return `eval at ${match[1]} (${position.source}:${position.line}:${position.column + 1})`;
  816. }
  817. return match = /^eval at ([^(]+) \((.+)\)$/.exec(origin), match ? `eval at ${match[1]} (${mapEvalOrigin(match[2])})` : origin;
  818. }
  819. function CallSiteToString() {
  820. let fileName, fileLocation = "";
  821. if (this.isNative()) fileLocation = "native";
  822. else {
  823. fileName = this.getScriptNameOrSourceURL(), !fileName && this.isEval() && (fileLocation = this.getEvalOrigin(), fileLocation += ", "), fileName ? fileLocation += fileName : fileLocation += "<anonymous>";
  824. let lineNumber = this.getLineNumber();
  825. if (lineNumber != null) {
  826. fileLocation += `:${lineNumber}`;
  827. let columnNumber = this.getColumnNumber();
  828. columnNumber && (fileLocation += `:${columnNumber}`);
  829. }
  830. }
  831. let line = "", functionName = this.getFunctionName(), addSuffix = !0, isConstructor = this.isConstructor();
  832. if (this.isToplevel() || isConstructor) isConstructor ? line += `new ${functionName || "<anonymous>"}` : functionName ? line += functionName : (line += fileLocation, addSuffix = !1);
  833. else {
  834. let typeName = this.getTypeName();
  835. typeName === "[object Object]" && (typeName = "null");
  836. let methodName = this.getMethodName();
  837. functionName ? (typeName && functionName.indexOf(typeName) !== 0 && (line += `${typeName}.`), line += functionName, methodName && functionName.indexOf(`.${methodName}`) !== functionName.length - methodName.length - 1 && (line += ` [as ${methodName}]`)) : line += `${typeName}.${methodName || "<anonymous>"}`;
  838. }
  839. return addSuffix && (line += ` (${fileLocation})`), line;
  840. }
  841. function cloneCallSite(frame) {
  842. let object = {};
  843. return Object.getOwnPropertyNames(Object.getPrototypeOf(frame)).forEach((name) => {
  844. let key = name;
  845. object[key] = /^(?:is|get)/.test(name) ? function() {
  846. return frame[key].call(frame);
  847. } : frame[key];
  848. }), object.toString = CallSiteToString, object;
  849. }
  850. function wrapCallSite(frame, state) {
  851. if (state === void 0 && (state = {
  852. nextPosition: null,
  853. curPosition: null
  854. }), frame.isNative()) return state.curPosition = null, frame;
  855. let source = frame.getFileName() || frame.getScriptNameOrSourceURL();
  856. if (source) {
  857. let line = frame.getLineNumber(), column = frame.getColumnNumber() - 1;
  858. line === 1 && column > 62 && !frame.isEval() && (column -= 62);
  859. let position = mapSourcePosition({
  860. name: null,
  861. source,
  862. line,
  863. column
  864. });
  865. state.curPosition = position, frame = cloneCallSite(frame);
  866. let originalFunctionName = frame.getFunctionName;
  867. return frame.getFunctionName = function() {
  868. let name = (() => state.nextPosition == null ? originalFunctionName() : state.nextPosition.name || originalFunctionName())();
  869. return name === "eval" && "_vite" in position ? null : name;
  870. }, frame.getFileName = function() {
  871. return position.source ?? null;
  872. }, frame.getLineNumber = function() {
  873. return position.line;
  874. }, frame.getColumnNumber = function() {
  875. return position.column + 1;
  876. }, frame.getScriptNameOrSourceURL = function() {
  877. return position.source;
  878. }, frame;
  879. }
  880. let origin = frame.isEval() && frame.getEvalOrigin();
  881. return origin ? (origin = mapEvalOrigin(origin), frame = cloneCallSite(frame), frame.getEvalOrigin = function() {
  882. return origin || void 0;
  883. }, frame) : frame;
  884. }
  885. function prepareStackTrace(error, stack) {
  886. let errorString = `${error.name || "Error"}: ${error.message || ""}`, state = {
  887. nextPosition: null,
  888. curPosition: null
  889. }, processedStack = [];
  890. for (let i = stack.length - 1; i >= 0; i--) processedStack.push(`\n at ${wrapCallSite(stack[i], state)}`), state.nextPosition = state.curPosition;
  891. return state.curPosition = state.nextPosition = null, errorString + processedStack.reverse().join("");
  892. }
  893. function enableSourceMapSupport(runner) {
  894. if (runner.options.sourcemapInterceptor === "node") {
  895. if (typeof process > "u") throw TypeError("Cannot use \"sourcemapInterceptor: 'node'\" because global \"process\" variable is not available.");
  896. if (typeof process.setSourceMapsEnabled != "function") throw TypeError("Cannot use \"sourcemapInterceptor: 'node'\" because \"process.setSourceMapsEnabled\" function is not available. Please use Node >= 16.6.0.");
  897. let isEnabledAlready = process.sourceMapsEnabled ?? !1;
  898. return process.setSourceMapsEnabled(!0), () => !isEnabledAlready && process.setSourceMapsEnabled(!1);
  899. }
  900. return interceptStackTrace(runner, typeof runner.options.sourcemapInterceptor == "object" ? runner.options.sourcemapInterceptor : void 0);
  901. }
  902. var ESModulesEvaluator = class {
  903. startOffset = getAsyncFunctionDeclarationPaddingLineCount();
  904. async runInlinedModule(context, code) {
  905. await new AsyncFunction(ssrModuleExportsKey, ssrImportMetaKey, ssrImportKey, ssrDynamicImportKey, ssrExportAllKey, ssrExportNameKey, "\"use strict\";" + code)(context[ssrModuleExportsKey], context[ssrImportMetaKey], context[ssrImportKey], context[ssrDynamicImportKey], context[ssrExportAllKey], context[ssrExportNameKey]), Object.seal(context[ssrModuleExportsKey]);
  906. }
  907. runExternalModule(filepath) {
  908. return import(filepath);
  909. }
  910. };
  911. const customizationHookNamespace = "vite-module-runner:import-meta-resolve/v1/", customizationHooksModule = `
  912. export async function resolve(specifier, context, nextResolve) {
  913. if (specifier.startsWith(${JSON.stringify(customizationHookNamespace)})) {
  914. const data = specifier.slice(${JSON.stringify(customizationHookNamespace)}.length)
  915. const [parsedSpecifier, parsedImporter] = JSON.parse(data)
  916. specifier = parsedSpecifier
  917. context.parentURL = parsedImporter
  918. }
  919. return nextResolve(specifier, context)
  920. }
  921. `;
  922. async function createImportMetaResolver() {
  923. let module;
  924. try {
  925. module = (await import("node:module")).Module;
  926. } catch {
  927. return;
  928. }
  929. if (module?.register) {
  930. try {
  931. let hookModuleContent = `data:text/javascript,${encodeURI(customizationHooksModule)}`;
  932. module.register(hookModuleContent);
  933. } catch (e) {
  934. if ("code" in e && e.code === "ERR_NETWORK_IMPORT_DISALLOWED") return;
  935. throw e;
  936. }
  937. return (specifier, importer) => import.meta.resolve(`${customizationHookNamespace}${JSON.stringify([specifier, importer])}`);
  938. }
  939. }
  940. const envProxy = new Proxy({}, { get(_, p) {
  941. throw Error(`[module runner] Dynamic access of "import.meta.env" is not supported. Please, use "import.meta.env.${String(p)}" instead.`);
  942. } });
  943. function createDefaultImportMeta(modulePath) {
  944. let href = posixPathToFileHref(modulePath), filename = modulePath, dirname$1 = posixDirname(modulePath);
  945. return {
  946. filename: isWindows ? toWindowsPath(filename) : filename,
  947. dirname: isWindows ? toWindowsPath(dirname$1) : dirname$1,
  948. url: href,
  949. env: envProxy,
  950. resolve(_id, _parent) {
  951. throw Error("[module runner] \"import.meta.resolve\" is not supported.");
  952. },
  953. glob() {
  954. throw Error("[module runner] \"import.meta.glob\" is statically replaced during file transformation. Make sure to reference it by the full name.");
  955. }
  956. };
  957. }
  958. let importMetaResolverCache;
  959. async function createNodeImportMeta(modulePath) {
  960. let defaultMeta = createDefaultImportMeta(modulePath), href = defaultMeta.url;
  961. importMetaResolverCache ??= createImportMetaResolver();
  962. let importMetaResolver = await importMetaResolverCache;
  963. return {
  964. ...defaultMeta,
  965. main: !1,
  966. resolve(id, parent) {
  967. return (importMetaResolver ?? defaultMeta.resolve)(id, parent ?? href);
  968. }
  969. };
  970. }
  971. var ModuleRunner = class {
  972. evaluatedModules;
  973. hmrClient;
  974. transport;
  975. resetSourceMapSupport;
  976. concurrentModuleNodePromises = /* @__PURE__ */ new Map();
  977. closed = !1;
  978. constructor(options, evaluator = new ESModulesEvaluator(), debug) {
  979. if (this.options = options, this.evaluator = evaluator, this.debug = debug, this.evaluatedModules = options.evaluatedModules ?? new EvaluatedModules(), this.transport = normalizeModuleRunnerTransport(options.transport), options.hmr !== !1) {
  980. let optionsHmr = options.hmr ?? !0;
  981. if (this.hmrClient = new HMRClient(optionsHmr === !0 || optionsHmr.logger === void 0 ? hmrLogger : optionsHmr.logger === !1 ? silentConsole : optionsHmr.logger, this.transport, ({ acceptedPath }) => this.import(acceptedPath)), !this.transport.connect) throw Error("HMR is not supported by this runner transport, but `hmr` option was set to true");
  982. this.transport.connect(createHMRHandlerForRunner(this));
  983. } else this.transport.connect?.();
  984. options.sourcemapInterceptor !== !1 && (this.resetSourceMapSupport = enableSourceMapSupport(this));
  985. }
  986. async import(url) {
  987. let fetchedModule = await this.cachedModule(url);
  988. return await this.cachedRequest(url, fetchedModule);
  989. }
  990. clearCache() {
  991. this.evaluatedModules.clear(), this.hmrClient?.clear();
  992. }
  993. async close() {
  994. this.resetSourceMapSupport?.(), this.clearCache(), this.hmrClient = void 0, this.closed = !0, await this.transport.disconnect?.();
  995. }
  996. isClosed() {
  997. return this.closed;
  998. }
  999. processImport(exports, fetchResult, metadata) {
  1000. if (!("externalize" in fetchResult)) return exports;
  1001. let { url, type } = fetchResult;
  1002. return type !== "module" && type !== "commonjs" || analyzeImportedModDifference(exports, url, type, metadata), exports;
  1003. }
  1004. isCircularModule(mod) {
  1005. for (let importedFile of mod.imports) if (mod.importers.has(importedFile)) return !0;
  1006. return !1;
  1007. }
  1008. isCircularImport(importers, moduleUrl, visited = /* @__PURE__ */ new Set()) {
  1009. for (let importer of importers) {
  1010. if (visited.has(importer)) continue;
  1011. if (visited.add(importer), importer === moduleUrl) return !0;
  1012. let mod = this.evaluatedModules.getModuleById(importer);
  1013. if (mod && mod.importers.size && this.isCircularImport(mod.importers, moduleUrl, visited)) return !0;
  1014. }
  1015. return !1;
  1016. }
  1017. async cachedRequest(url, mod, callstack = [], metadata) {
  1018. let meta = mod.meta, moduleId = meta.id, { importers } = mod, importee = callstack[callstack.length - 1];
  1019. if (importee && importers.add(importee), (callstack.includes(moduleId) || this.isCircularModule(mod) || this.isCircularImport(importers, moduleId)) && mod.exports) return this.processImport(mod.exports, meta, metadata);
  1020. let debugTimer;
  1021. this.debug && (debugTimer = setTimeout(() => {
  1022. this.debug(`[module runner] module ${moduleId} takes over 2s to load.\n${(() => `stack:\n${[...callstack, moduleId].reverse().map((p) => ` - ${p}`).join("\n")}`)()}`);
  1023. }, 2e3));
  1024. try {
  1025. if (mod.promise) return this.processImport(await mod.promise, meta, metadata);
  1026. let promise = this.directRequest(url, mod, callstack);
  1027. return mod.promise = promise, mod.evaluated = !1, this.processImport(await promise, meta, metadata);
  1028. } finally {
  1029. mod.evaluated = !0, debugTimer && clearTimeout(debugTimer);
  1030. }
  1031. }
  1032. async cachedModule(url, importer) {
  1033. let cached = this.concurrentModuleNodePromises.get(url);
  1034. if (cached) this.debug?.("[module runner] using cached module info for", url);
  1035. else {
  1036. let cachedModule = this.evaluatedModules.getModuleByUrl(url);
  1037. cached = this.getModuleInformation(url, importer, cachedModule).finally(() => {
  1038. this.concurrentModuleNodePromises.delete(url);
  1039. }), this.concurrentModuleNodePromises.set(url, cached);
  1040. }
  1041. return cached;
  1042. }
  1043. async getModuleInformation(url, importer, cachedModule) {
  1044. if (this.closed) throw Error("Vite module runner has been closed.");
  1045. this.debug?.("[module runner] fetching", url);
  1046. let isCached = !!(typeof cachedModule == "object" && cachedModule.meta), fetchedModule = url.startsWith("data:") ? {
  1047. externalize: url,
  1048. type: "builtin"
  1049. } : await this.transport.invoke("fetchModule", [
  1050. url,
  1051. importer,
  1052. {
  1053. cached: isCached,
  1054. startOffset: this.evaluator.startOffset
  1055. }
  1056. ]);
  1057. if ("cache" in fetchedModule) {
  1058. if (!cachedModule || !cachedModule.meta) throw Error(`Module "${url}" was mistakenly invalidated during fetch phase.`);
  1059. return cachedModule;
  1060. }
  1061. let moduleId = "externalize" in fetchedModule ? fetchedModule.externalize : fetchedModule.id, moduleUrl = "url" in fetchedModule ? fetchedModule.url : url, module = this.evaluatedModules.ensureModule(moduleId, moduleUrl);
  1062. return "invalidate" in fetchedModule && fetchedModule.invalidate && this.evaluatedModules.invalidateModule(module), fetchedModule.url = moduleUrl, fetchedModule.id = moduleId, module.meta = fetchedModule, module;
  1063. }
  1064. async directRequest(url, mod, _callstack) {
  1065. let fetchResult = mod.meta, moduleId = fetchResult.id, callstack = [..._callstack, moduleId], request = async (dep, metadata) => {
  1066. let importer = "file" in fetchResult && fetchResult.file || moduleId, depMod = await this.cachedModule(dep, importer);
  1067. return depMod.importers.add(moduleId), mod.imports.add(depMod.id), this.cachedRequest(dep, depMod, callstack, metadata);
  1068. }, dynamicRequest = async (dep) => (dep = String(dep), dep[0] === "." && (dep = posixResolve(posixDirname(url), dep)), request(dep, { isDynamicImport: !0 }));
  1069. if ("externalize" in fetchResult) {
  1070. let { externalize } = fetchResult;
  1071. this.debug?.("[module runner] externalizing", externalize);
  1072. let exports$1 = await this.evaluator.runExternalModule(externalize);
  1073. return mod.exports = exports$1, exports$1;
  1074. }
  1075. let { code, file } = fetchResult;
  1076. if (code == null) {
  1077. let importer = callstack[callstack.length - 2];
  1078. throw Error(`[module runner] Failed to load "${url}"${importer ? ` imported from ${importer}` : ""}`);
  1079. }
  1080. let createImportMeta = this.options.createImportMeta ?? createDefaultImportMeta, modulePath = cleanUrl(file || moduleId), href = posixPathToFileHref(modulePath), meta = await createImportMeta(modulePath), exports = Object.create(null);
  1081. Object.defineProperty(exports, Symbol.toStringTag, {
  1082. value: "Module",
  1083. enumerable: !1,
  1084. configurable: !1
  1085. }), mod.exports = exports;
  1086. let hotContext;
  1087. this.hmrClient && Object.defineProperty(meta, "hot", {
  1088. enumerable: !0,
  1089. get: () => {
  1090. if (!this.hmrClient) throw Error("[module runner] HMR client was closed.");
  1091. return this.debug?.("[module runner] creating hmr context for", mod.url), hotContext ||= new HMRContext(this.hmrClient, mod.url), hotContext;
  1092. },
  1093. set: (value) => {
  1094. hotContext = value;
  1095. }
  1096. });
  1097. let context = {
  1098. [ssrImportKey]: request,
  1099. [ssrDynamicImportKey]: dynamicRequest,
  1100. [ssrModuleExportsKey]: exports,
  1101. [ssrExportAllKey]: (obj) => exportAll(exports, obj),
  1102. [ssrExportNameKey]: (name, getter) => Object.defineProperty(exports, name, {
  1103. enumerable: !0,
  1104. configurable: !0,
  1105. get: getter
  1106. }),
  1107. [ssrImportMetaKey]: meta
  1108. };
  1109. return this.debug?.("[module runner] executing", href), await this.evaluator.runInlinedModule(context, code, mod), exports;
  1110. }
  1111. };
  1112. function exportAll(exports, sourceModule) {
  1113. if (exports !== sourceModule && !(isPrimitive(sourceModule) || Array.isArray(sourceModule) || sourceModule instanceof Promise)) {
  1114. for (let key in sourceModule) if (key !== "default" && key !== "__esModule" && !(key in exports)) try {
  1115. Object.defineProperty(exports, key, {
  1116. enumerable: !0,
  1117. configurable: !0,
  1118. get: () => sourceModule[key]
  1119. });
  1120. } catch {}
  1121. }
  1122. }
  1123. export { ESModulesEvaluator, EvaluatedModules, ModuleRunner, createDefaultImportMeta, createNodeImportMeta, createWebSocketModuleRunnerTransport, normalizeModuleId, ssrDynamicImportKey, ssrExportAllKey, ssrExportNameKey, ssrImportKey, ssrImportMetaKey, ssrModuleExportsKey };