@absolutejs/absolute 0.19.0-beta.96 → 0.19.0-beta.98

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.
@@ -40,25 +40,7 @@ export const handleReactUpdate = (message: {
40
40
  return;
41
41
  }
42
42
 
43
- const componentKey = window.__REACT_COMPONENT_KEY__;
44
- const newUrl = componentKey && message.data.manifest?.[componentKey];
45
-
46
- if (newUrl && refreshRuntime) {
47
- // Bundled files have bare specifiers (react-dom/client) that
48
- // the browser can't resolve via import(). Only use import()
49
- // for module server URLs (/@src/). Bundled files need a reload.
50
- if (newUrl.startsWith('/@src/')) {
51
- applyRefreshImport(newUrl, refreshRuntime, serverDuration);
52
-
53
- return;
54
- }
55
-
56
- // Bundled file — reload to load the new script tag
57
- window.location.reload();
58
-
59
- return;
60
- }
61
-
43
+ // No module URL — shouldn't happen, but reload as safety fallback
62
44
  window.location.reload();
63
45
  };
64
46
 
@@ -87,24 +69,14 @@ const applyRefreshImport = (
87
69
  .then(() => {
88
70
  const result = refreshRuntime.performReactRefresh();
89
71
 
90
- // If Fast Refresh was a no-op (data/utility file with no
91
- // component exports), re-import the page entry so the
92
- // component tree re-renders with the updated data.
93
- // Chain invalidation ensures all intermediate modules have
94
- // fresh ?v= params, so the browser re-fetches the whole chain.
95
- if (!result && window.__REACT_PAGE_MODULE__) {
96
- return import(
97
- `${window.__REACT_PAGE_MODULE__}?t=${Date.now()}`
98
- ).then(() => {
99
- refreshRuntime.performReactRefresh();
100
-
101
- return undefined;
102
- });
72
+ // If no components were refreshed (data file HMR), force a
73
+ // re-render. The mutable store (globalThis.__HMR_DATA__) has
74
+ // fresh values components just need to re-execute their
75
+ // render functions to read them.
76
+ if (!result) {
77
+ forceReactRerender();
103
78
  }
104
79
 
105
- return undefined;
106
- })
107
- .then(() => {
108
80
  sendTiming(clientStart, serverDuration);
109
81
 
110
82
  return undefined;
@@ -118,6 +90,18 @@ const applyRefreshImport = (
118
90
  });
119
91
  };
120
92
 
93
+ // Force React to re-render the entire tree. Components read from
94
+ // the mutable HMR data store (destructured at render time via
95
+ // rewriteDataImports), so re-rendering picks up fresh values.
96
+ const forceReactRerender = () => {
97
+ const boundary = window.__ERROR_BOUNDARY__ as
98
+ | { hmrUpdate?: () => void }
99
+ | undefined;
100
+ if (boundary?.hmrUpdate) {
101
+ boundary.hmrUpdate();
102
+ }
103
+ };
104
+
121
105
  const reloadReactCSS = (cssPath: string) => {
122
106
  const existingCSSLinks = document.head.querySelectorAll<HTMLLinkElement>(
123
107
  'link[rel="stylesheet"]'
package/dist/index.js CHANGED
@@ -202,7 +202,7 @@ __export(exports_generateReactIndexes, {
202
202
  });
203
203
  import { existsSync, mkdirSync } from "fs";
204
204
  import { readdir, rm, writeFile } from "fs/promises";
205
- import { basename, join, relative, resolve as resolve2 } from "path";
205
+ import { basename, join, resolve as resolve2 } from "path";
206
206
  var {Glob } = globalThis.Bun;
207
207
  var indexContentCache, resolveDevClientDir = () => {
208
208
  const fromSource = resolve2(import.meta.dir, "../dev/client");
@@ -239,7 +239,6 @@ var indexContentCache, resolveDevClientDir = () => {
239
239
  const hmrPreamble = isDev ? [
240
240
  `window.__HMR_FRAMEWORK__ = "react";`,
241
241
  `window.__REACT_COMPONENT_KEY__ = "${componentName}Index";`,
242
- `window.__REACT_PAGE_MODULE__ = "/@src/${relative(process.cwd(), resolve2(reactPagesDirectory, componentName + ".tsx")).replace(/\\\\/g, "/")}";`,
243
242
  `import '${refreshSetupPath}';`,
244
243
  `import '${hmrClientPath}';`,
245
244
  `import { showErrorOverlay, hideErrorOverlay } from '${errorOverlayPath}';
@@ -279,6 +278,9 @@ var indexContentCache, resolveDevClientDir = () => {
279
278
  ` reset() {`,
280
279
  ` this.setState({ hasError: false });`,
281
280
  ` }`,
281
+ ` hmrUpdate() {`,
282
+ ` this.forceUpdate();`,
283
+ ` }`,
282
284
  ` render() {`,
283
285
  ` if (this.state.hasError) return null;`,
284
286
  ``,
@@ -946,7 +948,7 @@ var devVendorPaths = null, getDevVendorPaths = () => devVendorPaths, setDevVendo
946
948
 
947
949
  // src/build/angularLinkerPlugin.ts
948
950
  import { existsSync as existsSync7, mkdirSync as mkdirSync3, readFileSync as readFileSync3, writeFileSync as writeFileSync2 } from "fs";
949
- import { dirname as dirname2, join as join4, relative as relative2, resolve as resolve5 } from "path";
951
+ import { dirname as dirname2, join as join4, relative, resolve as resolve5 } from "path";
950
952
  import { createHash } from "crypto";
951
953
  var CACHE_DIR, angularLinkerPlugin;
952
954
  var init_angularLinkerPlugin = __esm(() => {
@@ -989,7 +991,7 @@ var init_angularLinkerPlugin = __esm(() => {
989
991
  dirname: dirname2,
990
992
  exists: existsSync7,
991
993
  readFile: readFileSync3,
992
- relative: relative2,
994
+ relative,
993
995
  resolve: resolve5
994
996
  },
995
997
  linkerJitMode: false,
@@ -1030,11 +1032,11 @@ var HASHED_FILE_PATTERN, cleanStaleOutputs = async (buildPath, currentOutputPath
1030
1032
  const currentPaths = new Set(currentOutputPaths.map((path) => resolve6(path)));
1031
1033
  const glob = new Glob4("**/*");
1032
1034
  const removals = [];
1033
- for (const relative3 of glob.scanSync({ cwd: buildPath })) {
1034
- const absolute = resolve6(buildPath, relative3);
1035
+ for (const relative2 of glob.scanSync({ cwd: buildPath })) {
1036
+ const absolute = resolve6(buildPath, relative2);
1035
1037
  if (currentPaths.has(absolute))
1036
1038
  continue;
1037
- if (!HASHED_FILE_PATTERN.test(relative3))
1039
+ if (!HASHED_FILE_PATTERN.test(relative2))
1038
1040
  continue;
1039
1041
  removals.push(rm2(absolute, { force: true }));
1040
1042
  }
@@ -1188,12 +1190,12 @@ var init_startupBanner = __esm(() => {
1188
1190
  // src/utils/logger.ts
1189
1191
  var colors2, frameworkColors, formatPath = (filePath) => {
1190
1192
  const cwd = process.cwd();
1191
- let relative3 = filePath.startsWith(cwd) ? filePath.slice(cwd.length + 1) : filePath;
1192
- relative3 = relative3.replace(/\\/g, "/");
1193
- if (!relative3.startsWith("/")) {
1194
- relative3 = `/${relative3}`;
1193
+ let relative2 = filePath.startsWith(cwd) ? filePath.slice(cwd.length + 1) : filePath;
1194
+ relative2 = relative2.replace(/\\/g, "/");
1195
+ if (!relative2.startsWith("/")) {
1196
+ relative2 = `/${relative2}`;
1195
1197
  }
1196
- return relative3;
1198
+ return relative2;
1197
1199
  }, getFrameworkColor = (framework) => frameworkColors[framework] || colors2.white, log = (action, options) => {
1198
1200
  const timestamp = `${colors2.dim}${formatTimestamp()}${colors2.reset}`;
1199
1201
  const tag = `${colors2.cyan}[hmr]${colors2.reset}`;
@@ -1252,11 +1254,11 @@ var init_logger = __esm(() => {
1252
1254
  });
1253
1255
 
1254
1256
  // src/utils/validateSafePath.ts
1255
- import { resolve as resolve7, relative as relative3 } from "path";
1257
+ import { resolve as resolve7, relative as relative2 } from "path";
1256
1258
  var validateSafePath = (targetPath, baseDirectory) => {
1257
1259
  const absoluteBase = resolve7(baseDirectory);
1258
1260
  const absoluteTarget = resolve7(baseDirectory, targetPath);
1259
- const relativePath = normalizePath(relative3(absoluteBase, absoluteTarget));
1261
+ const relativePath = normalizePath(relative2(absoluteBase, absoluteTarget));
1260
1262
  if (relativePath.startsWith("../") || relativePath === "..") {
1261
1263
  throw new Error(`Unsafe path: ${targetPath}`);
1262
1264
  }
@@ -1278,7 +1280,7 @@ import {
1278
1280
  basename as basename2,
1279
1281
  extname as extname2,
1280
1282
  resolve as resolve8,
1281
- relative as relative4,
1283
+ relative as relative3,
1282
1284
  sep
1283
1285
  } from "path";
1284
1286
  import { env } from "process";
@@ -1342,7 +1344,7 @@ var resolveDevClientDir2 = () => {
1342
1344
  const isModule = src.endsWith(".svelte.ts") || src.endsWith(".svelte.js");
1343
1345
  const preprocessed = isModule ? raw : (await preprocess(raw, {})).code;
1344
1346
  const transpiled = src.endsWith(".ts") || src.endsWith(".svelte.ts") ? transpiler.transformSync(preprocessed) : preprocessed;
1345
- const relDir = dirname3(relative4(svelteRoot, src)).replace(/\\/g, "/");
1347
+ const relDir = dirname3(relative3(svelteRoot, src)).replace(/\\/g, "/");
1346
1348
  const baseName = basename2(src).replace(/\.svelte(\.(ts|js))?$/, "");
1347
1349
  const importPaths = Array.from(transpiled.matchAll(/from\s+['"]([^'"]+)['"]/g)).map((match) => match[1]).filter((path) => path !== undefined);
1348
1350
  const resolvedImports = await Promise.all(importPaths.map((importPath) => resolveSvelte(importPath, src)));
@@ -1361,7 +1363,7 @@ var resolveDevClientDir2 = () => {
1361
1363
  }).js.code;
1362
1364
  let code = raw2.replace(/\.svelte(?:\.(?:ts|js))?(['"])/g, ".js$1");
1363
1365
  if (mode === "client" && isDev) {
1364
- const moduleKey = `/@src/${relative4(process.cwd(), src).replace(/\\/g, "/")}`;
1366
+ const moduleKey = `/@src/${relative3(process.cwd(), src).replace(/\\/g, "/")}`;
1365
1367
  code = code.replace(/if\s*\(import\.meta\.hot\)\s*\{/, `if (typeof window !== "undefined") {
1366
1368
  if (!window.__SVELTE_HMR_ACCEPT__) window.__SVELTE_HMR_ACCEPT__ = {};
1367
1369
  var __hmr_accept = function(cb) { window.__SVELTE_HMR_ACCEPT__[${JSON.stringify(moduleKey)}] = cb; };`);
@@ -1396,10 +1398,10 @@ var resolveDevClientDir2 = () => {
1396
1398
  };
1397
1399
  const roots = await Promise.all(entryPoints.map(build2));
1398
1400
  await Promise.all(roots.map(async ({ client: client2 }) => {
1399
- const relClientDir = dirname3(relative4(clientDir, client2));
1401
+ const relClientDir = dirname3(relative3(clientDir, client2));
1400
1402
  const name = basename2(client2, extname2(client2));
1401
1403
  const indexPath = join6(indexDir, relClientDir, `${name}.js`);
1402
- const importRaw = relative4(dirname3(indexPath), client2).split(sep).join("/");
1404
+ const importRaw = relative3(dirname3(indexPath), client2).split(sep).join("/");
1403
1405
  const importPath = importRaw.startsWith(".") || importRaw.startsWith("/") ? importRaw : `./${importRaw}`;
1404
1406
  const hmrImports = isDev ? `window.__HMR_FRAMEWORK__ = "svelte";
1405
1407
  import "${hmrClientPath3}";
@@ -1439,7 +1441,7 @@ if (typeof window !== "undefined") {
1439
1441
  return {
1440
1442
  svelteClientPaths: roots.map(({ client: client2 }) => client2),
1441
1443
  svelteIndexPaths: roots.map(({ client: client2 }) => {
1442
- const rel = dirname3(relative4(clientDir, client2));
1444
+ const rel = dirname3(relative3(clientDir, client2));
1443
1445
  return join6(indexDir, rel, basename2(client2));
1444
1446
  }),
1445
1447
  svelteServerPaths: roots.map(({ ssr }) => ssr)
@@ -1464,7 +1466,7 @@ __export(exports_compileVue, {
1464
1466
  });
1465
1467
  import { existsSync as existsSync9 } from "fs";
1466
1468
  import { mkdir as mkdir2 } from "fs/promises";
1467
- import { basename as basename3, dirname as dirname4, join as join7, relative as relative5, resolve as resolve9 } from "path";
1469
+ import { basename as basename3, dirname as dirname4, join as join7, relative as relative4, resolve as resolve9 } from "path";
1468
1470
  var {file: file3, write: write2, Transpiler: Transpiler2 } = globalThis.Bun;
1469
1471
  var resolveDevClientDir3 = () => {
1470
1472
  const fromSource = resolve9(import.meta.dir, "../dev/client");
@@ -1509,7 +1511,7 @@ var resolveDevClientDir3 = () => {
1509
1511
  return "template-only";
1510
1512
  }
1511
1513
  return "full";
1512
- }, generateVueHmrId = (sourceFilePath, vueRootDir) => relative5(vueRootDir, sourceFilePath).replace(/\\/g, "/").replace(/\.vue$/, ""), extractImports = (sourceCode) => Array.from(sourceCode.matchAll(/import\s+[\s\S]+?['"]([^'"]+)['"]/g)).map((match) => match[1]).filter((importPath) => importPath !== undefined), toJs = (filePath) => {
1514
+ }, generateVueHmrId = (sourceFilePath, vueRootDir) => relative4(vueRootDir, sourceFilePath).replace(/\\/g, "/").replace(/\.vue$/, ""), extractImports = (sourceCode) => Array.from(sourceCode.matchAll(/import\s+[\s\S]+?['"]([^'"]+)['"]/g)).map((match) => match[1]).filter((importPath) => importPath !== undefined), toJs = (filePath) => {
1513
1515
  if (filePath.endsWith(".vue"))
1514
1516
  return filePath.replace(/\.vue$/, ".js");
1515
1517
  if (filePath.endsWith(".ts"))
@@ -1536,7 +1538,7 @@ var resolveDevClientDir3 = () => {
1536
1538
  const cachedResult = cacheMap.get(sourceFilePath);
1537
1539
  if (cachedResult)
1538
1540
  return cachedResult;
1539
- const relativeFilePath = relative5(vueRootDir, sourceFilePath).replace(/\\/g, "/");
1541
+ const relativeFilePath = relative4(vueRootDir, sourceFilePath).replace(/\\/g, "/");
1540
1542
  const relativeWithoutExtension = relativeFilePath.replace(/\.vue$/, "");
1541
1543
  const fileBaseName = basename3(sourceFilePath, ".vue");
1542
1544
  const componentId = toKebab(fileBaseName);
@@ -1665,7 +1667,7 @@ if (typeof __VUE_HMR_RUNTIME__ !== 'undefined') {
1665
1667
  result.tsHelperPaths.forEach((path) => allTsHelperPaths.add(path));
1666
1668
  const entryBaseName = basename3(entryPath, ".vue");
1667
1669
  const indexOutputFile = join7(indexOutputDir, `${entryBaseName}.js`);
1668
- const clientOutputFile = join7(clientOutputDir, relative5(vueRootDir, entryPath).replace(/\\/g, "/").replace(/\.vue$/, ".js"));
1670
+ const clientOutputFile = join7(clientOutputDir, relative4(vueRootDir, entryPath).replace(/\\/g, "/").replace(/\.vue$/, ".js"));
1669
1671
  await mkdir2(dirname4(indexOutputFile), { recursive: true });
1670
1672
  const vueHmrImports = isDev ? [
1671
1673
  `window.__HMR_FRAMEWORK__ = "vue";`,
@@ -1673,7 +1675,7 @@ if (typeof __VUE_HMR_RUNTIME__ !== 'undefined') {
1673
1675
  ] : [];
1674
1676
  await write2(indexOutputFile, [
1675
1677
  ...vueHmrImports,
1676
- `import Comp from "${relative5(dirname4(indexOutputFile), clientOutputFile).replace(/\\/g, "/")}";`,
1678
+ `import Comp from "${relative4(dirname4(indexOutputFile), clientOutputFile).replace(/\\/g, "/")}";`,
1677
1679
  'import { createSSRApp, createApp } from "vue";',
1678
1680
  "",
1679
1681
  "// HMR State Preservation: Check for preserved state from HMR",
@@ -1773,7 +1775,7 @@ if (typeof __VUE_HMR_RUNTIME__ !== 'undefined') {
1773
1775
  await Promise.all(Array.from(allTsHelperPaths).map(async (tsPath) => {
1774
1776
  const sourceCode = await file3(tsPath).text();
1775
1777
  const transpiledCode = transpiler2.transformSync(sourceCode);
1776
- const relativeJsPath = relative5(vueRootDir, tsPath).replace(/\.ts$/, ".js");
1778
+ const relativeJsPath = relative4(vueRootDir, tsPath).replace(/\.ts$/, ".js");
1777
1779
  const outClientPath = join7(clientOutputDir, relativeJsPath);
1778
1780
  const outServerPath = join7(serverOutputDir, relativeJsPath);
1779
1781
  await mkdir2(dirname4(outClientPath), { recursive: true });
@@ -10663,11 +10665,11 @@ ${lanes.join(`
10663
10665
  return toComponents;
10664
10666
  }
10665
10667
  const components = toComponents.slice(start);
10666
- const relative6 = [];
10668
+ const relative5 = [];
10667
10669
  for (;start < fromComponents.length; start++) {
10668
- relative6.push("..");
10670
+ relative5.push("..");
10669
10671
  }
10670
- return ["", ...relative6, ...components];
10672
+ return ["", ...relative5, ...components];
10671
10673
  }
10672
10674
  function getRelativePathFromDirectory(fromDirectory, to, getCanonicalFileNameOrIgnoreCase) {
10673
10675
  Debug.assert(getRootLength(fromDirectory) > 0 === getRootLength(to) > 0, "Paths must either both be absolute or both be relative");
@@ -47963,9 +47965,9 @@ ${lanes.join(`
47963
47965
  if (!startsWithDirectory(target, realPathDirectory, getCanonicalFileName)) {
47964
47966
  return;
47965
47967
  }
47966
- const relative6 = getRelativePathFromDirectory(realPathDirectory, target, getCanonicalFileName);
47968
+ const relative5 = getRelativePathFromDirectory(realPathDirectory, target, getCanonicalFileName);
47967
47969
  for (const symlinkDirectory of symlinkDirectories) {
47968
- const option = resolvePath(symlinkDirectory, relative6);
47970
+ const option = resolvePath(symlinkDirectory, relative5);
47969
47971
  const result2 = cb(option, target === referenceRedirect);
47970
47972
  shouldFilterIgnoredPaths = true;
47971
47973
  if (result2)
@@ -170531,7 +170533,7 @@ __export(exports_compileAngular, {
170531
170533
  compileAngular: () => compileAngular
170532
170534
  });
170533
170535
  import { existsSync as existsSync10, readFileSync as readFileSync4, promises as fs } from "fs";
170534
- import { join as join8, basename as basename4, sep as sep2, dirname as dirname5, resolve as resolve10, relative as relative6 } from "path";
170536
+ import { join as join8, basename as basename4, sep as sep2, dirname as dirname5, resolve as resolve10, relative as relative5 } from "path";
170535
170537
  import { createHash as createHash2 } from "crypto";
170536
170538
  var import_typescript, computeConfigHash = () => {
170537
170539
  try {
@@ -170840,7 +170842,7 @@ export default ${componentClassName};
170840
170842
  await fs.writeFile(ssrDepsFile, ssrDepsContent, "utf-8");
170841
170843
  }
170842
170844
  await fs.writeFile(rawServerFile, rewritten, "utf-8");
170843
- const relativePath = relative6(indexesDir, rawServerFile).replace(/\\/g, "/");
170845
+ const relativePath = relative5(indexesDir, rawServerFile).replace(/\\/g, "/");
170844
170846
  const normalizedImportPath = relativePath.startsWith(".") ? relativePath : `./${relativePath}`;
170845
170847
  const hmrPreamble = hmr ? `window.__HMR_FRAMEWORK__ = "angular";
170846
170848
  import "${hmrRuntimePath}";
@@ -171219,7 +171221,7 @@ import {
171219
171221
  rmSync,
171220
171222
  writeFileSync as writeFileSync3
171221
171223
  } from "fs";
171222
- import { basename as basename5, join as join13, relative as relative7, resolve as resolve11 } from "path";
171224
+ import { basename as basename5, join as join13, relative as relative6, resolve as resolve11 } from "path";
171223
171225
  import { cwd, env as env2, exit } from "process";
171224
171226
  var {build: bunBuild6, Glob: Glob5 } = globalThis.Bun;
171225
171227
  var isDev, extractBuildError = (logs, pass, label, frameworkNames, isIncremental, throwOnError) => {
@@ -171784,7 +171786,7 @@ var isDev, extractBuildError = (logs, pass, label, frameworkNames, isIncremental
171784
171786
  const devIndexDir = join13(buildPath, "_src_indexes");
171785
171787
  mkdirSync8(devIndexDir, { recursive: true });
171786
171788
  const indexFiles = readDir(reactIndexesPath).filter((f) => f.endsWith(".tsx"));
171787
- const pagesRel = relative7(process.cwd(), resolve11(reactPagesPath)).replace(/\\/g, "/");
171789
+ const pagesRel = relative6(process.cwd(), resolve11(reactPagesPath)).replace(/\\/g, "/");
171788
171790
  for (const file4 of indexFiles) {
171789
171791
  let content = readFileSync5(join13(reactIndexesPath, file4), "utf-8");
171790
171792
  content = content.replace(/from\s*['"]\.\.\/pages\/([^'"]+)['"]/g, `from '/@src/${pagesRel}/$1'`);
@@ -202323,15 +202325,6 @@ var init_pageHandler = __esm(() => {
202323
202325
  });
202324
202326
 
202325
202327
  // src/dev/transformCache.ts
202326
- var exports_transformCache = {};
202327
- __export(exports_transformCache, {
202328
- setTransformed: () => setTransformed,
202329
- invalidateAll: () => invalidateAll,
202330
- invalidate: () => invalidate,
202331
- getTransformed: () => getTransformed,
202332
- getInvalidationVersion: () => getInvalidationVersion,
202333
- findNearestComponent: () => findNearestComponent
202334
- });
202335
202328
  var globalStore, cache, importers, getTransformed = (filePath) => cache.get(filePath)?.content, setTransformed = (filePath, content, mtime, imports) => {
202336
202329
  const resolvedImports = imports ?? [];
202337
202330
  cache.set(filePath, { content, imports: resolvedImports, mtime });
@@ -202350,29 +202343,9 @@ var globalStore, cache, importers, getTransformed = (filePath) => cache.get(file
202350
202343
  cache.delete(parent);
202351
202344
  }
202352
202345
  }
202353
- }, invalidateAll = () => {
202354
- cache.clear();
202355
- importers.clear();
202356
- }, findNearestComponent = (filePath) => {
202357
- const visited = new Set;
202358
- const queue = [filePath];
202359
- while (queue.length > 0) {
202360
- const current = queue.shift();
202361
- if (visited.has(current))
202362
- continue;
202363
- visited.add(current);
202364
- const parents = importers.get(current);
202365
- if (!parents)
202366
- continue;
202367
- for (const parent of parents) {
202368
- if (parent.endsWith(".tsx") || parent.endsWith(".jsx")) {
202369
- return parent;
202370
- }
202371
- queue.push(parent);
202372
- }
202373
- }
202374
- return;
202375
- };
202346
+ }, dataFiles, markAsDataFile = (filePath) => {
202347
+ dataFiles.add(filePath);
202348
+ }, isDataFile = (filePath) => dataFiles.has(filePath);
202376
202349
  var init_transformCache = __esm(() => {
202377
202350
  globalStore = globalThis;
202378
202351
  cache = globalStore.__transformCache ?? new Map;
@@ -202381,6 +202354,8 @@ var init_transformCache = __esm(() => {
202381
202354
  globalStore.__transformImporters = importers;
202382
202355
  invalidationVersions = globalStore.__transformInvalidationVersions ?? new Map;
202383
202356
  globalStore.__transformInvalidationVersions = invalidationVersions;
202357
+ dataFiles = globalStore.__transformDataFiles ?? new Set;
202358
+ globalStore.__transformDataFiles = dataFiles;
202384
202359
  });
202385
202360
 
202386
202361
  // src/dev/moduleServer.ts
@@ -202394,7 +202369,7 @@ __export(exports_moduleServer, {
202394
202369
  SRC_URL_PREFIX: () => SRC_URL_PREFIX
202395
202370
  });
202396
202371
  import { existsSync as existsSync13, readFileSync as readFileSync9, statSync } from "fs";
202397
- import { basename as basename7, dirname as dirname7, extname as extname3, resolve as resolve18, relative as relative8 } from "path";
202372
+ import { basename as basename7, dirname as dirname7, extname as extname3, resolve as resolve18, relative as relative7 } from "path";
202398
202373
  var SRC_PREFIX = "/@src/", jsTranspiler2, tsTranspiler2, tsxTranspiler, TRANSPILABLE, ALL_EXPORTS_RE, STRING_CONTENTS_RE, preserveTypeExports = (originalSource, transpiled, valueExports) => {
202399
202374
  const codeOnly = originalSource.replace(STRING_CONTENTS_RE, '""');
202400
202375
  const allExports = [];
@@ -202457,7 +202432,7 @@ ${stubs}
202457
202432
  const fileDir = dirname7(filePath);
202458
202433
  result = result.replace(/(from\s*["'])(\.\.?\/[^"']+)(["'])/g, (_match, prefix, relPath, suffix) => {
202459
202434
  const absPath = resolve18(fileDir, relPath);
202460
- const rel = relative8(projectRoot, absPath);
202435
+ const rel = relative7(projectRoot, absPath);
202461
202436
  let srcPath = rel;
202462
202437
  if (!extname3(srcPath)) {
202463
202438
  const extensions = [
@@ -202478,19 +202453,19 @@ ${stubs}
202478
202453
  }
202479
202454
  if (extname3(srcPath) === ".svelte") {
202480
202455
  const resolved = resolveSvelteModulePath(resolve18(projectRoot, srcPath));
202481
- const resolvedRel = relative8(projectRoot, resolved);
202456
+ const resolvedRel = relative7(projectRoot, resolved);
202482
202457
  srcPath = resolvedRel;
202483
202458
  }
202484
202459
  return `${prefix}${srcUrl(srcPath, projectRoot)}${suffix}`;
202485
202460
  });
202486
202461
  result = result.replace(/(import\s*\(\s*["'])(\.\.?\/[^"']+)(["']\s*\))/g, (_match, prefix, relPath, suffix) => {
202487
202462
  const absPath = resolve18(fileDir, relPath);
202488
- const rel = relative8(projectRoot, absPath);
202463
+ const rel = relative7(projectRoot, absPath);
202489
202464
  return `${prefix}${srcUrl(rel, projectRoot)}${suffix}`;
202490
202465
  });
202491
202466
  result = result.replace(/(import\s*["'])(\.\.?\/[^"']+)(["']\s*;?)/g, (_match, prefix, relPath, suffix) => {
202492
202467
  const absPath = resolve18(fileDir, relPath);
202493
- const rel = relative8(projectRoot, absPath);
202468
+ const rel = relative7(projectRoot, absPath);
202494
202469
  let srcPath = rel;
202495
202470
  if (!extname3(srcPath)) {
202496
202471
  const extensions = [
@@ -202514,16 +202489,65 @@ ${stubs}
202514
202489
  });
202515
202490
  result = result.replace(/((?:from|import)\s*["'])(\/[^"']+\.(tsx?|jsx?|ts))(["'])/g, (_match, prefix, absPath, _ext, suffix) => {
202516
202491
  if (absPath.startsWith(projectRoot)) {
202517
- const rel2 = relative8(projectRoot, absPath).replace(/\\/g, "/");
202492
+ const rel2 = relative7(projectRoot, absPath).replace(/\\/g, "/");
202518
202493
  return `${prefix}${srcUrl(rel2, projectRoot)}${suffix}`;
202519
202494
  }
202520
- const rel = relative8(projectRoot, absPath).replace(/\\/g, "/");
202495
+ const rel = relative7(projectRoot, absPath).replace(/\\/g, "/");
202521
202496
  if (!rel.startsWith("..")) {
202522
202497
  return `${prefix}${srcUrl(rel, projectRoot)}${suffix}`;
202523
202498
  }
202524
202499
  return _match;
202525
202500
  });
202526
202501
  return result;
202502
+ }, NAMED_IMPORT_RE, rewriteDataImports = (code, projectRoot) => {
202503
+ const rewrites = [];
202504
+ let counter = 0;
202505
+ let m;
202506
+ NAMED_IMPORT_RE.lastIndex = 0;
202507
+ while ((m = NAMED_IMPORT_RE.exec(code)) !== null) {
202508
+ const [fullMatch, names, q1, srcUrl2, q2] = m;
202509
+ if (!names || !srcUrl2)
202510
+ continue;
202511
+ const urlPath = srcUrl2.replace(/^\/@src\//, "").split("?")[0];
202512
+ if (!urlPath || !urlPath.endsWith(".ts") || urlPath.endsWith(".d.ts"))
202513
+ continue;
202514
+ const absPath = resolve18(projectRoot, urlPath);
202515
+ if (!isDataFile(absPath)) {
202516
+ if (!urlPath.endsWith(".tsx") && existsSync13(absPath)) {
202517
+ try {
202518
+ const src = readFileSync9(absPath, "utf-8");
202519
+ const exps = tsTranspiler2.scan(src).exports;
202520
+ if (isDataOnlyFile(exps, src, absPath))
202521
+ markAsDataFile(absPath);
202522
+ } catch {}
202523
+ }
202524
+ if (!isDataFile(absPath))
202525
+ continue;
202526
+ }
202527
+ const alias = `__hmr_${counter++}`;
202528
+ const importedNames = names.split(",").map((n) => n.trim().split(/\s+as\s+/)).filter(([n]) => n).map(([orig, asName]) => ({
202529
+ local: (asName ?? orig).trim(),
202530
+ orig: orig.trim()
202531
+ }));
202532
+ rewrites.push({
202533
+ alias,
202534
+ fullMatch,
202535
+ importLine: `import ${alias} from ${q1}${srcUrl2}${q2}`,
202536
+ names: importedNames
202537
+ });
202538
+ }
202539
+ if (rewrites.length === 0)
202540
+ return code;
202541
+ let result = code;
202542
+ for (const r of rewrites) {
202543
+ result = result.replace(r.fullMatch, r.importLine);
202544
+ }
202545
+ for (const r of rewrites) {
202546
+ for (const { orig, local } of r.names) {
202547
+ result = result.replace(new RegExp(`(?<![.\\w])${local}(?![\\w])`, "g"), `${r.alias}.${orig}`);
202548
+ }
202549
+ }
202550
+ return result;
202527
202551
  }, HOOK_NAMES, REFRESH_PREAMBLE, JSX_AUTO_RE, JSXS_AUTO_RE, JSX_PROD_RE, FRAGMENT_RE, addJsxImport = (code) => {
202528
202552
  const imports = [];
202529
202553
  const jsxDevMatch = JSX_AUTO_RE.exec(code);
@@ -202559,9 +202583,38 @@ ${stubs}
202559
202583
  transpiled = `var $RefreshReg$ = window.$RefreshReg$ || function(){};
202560
202584
  ` + `var $RefreshSig$ = window.$RefreshSig$ || function(){ return function(t){ return t; }; };
202561
202585
  ` + transpiled;
202562
- const relPath = relative8(projectRoot, filePath).replace(/\\/g, "/");
202586
+ const relPath = relative7(projectRoot, filePath).replace(/\\/g, "/");
202563
202587
  transpiled = transpiled.replace(/\binput\.tsx:/g, `${relPath}:`);
202564
- return rewriteImports2(transpiled, filePath, projectRoot, rewriter);
202588
+ let result = rewriteImports2(transpiled, filePath, projectRoot, rewriter);
202589
+ result = rewriteDataImports(result, projectRoot);
202590
+ return result;
202591
+ }, isDataOnlyFile = (exports, _source, filePath) => {
202592
+ if (exports.length === 0)
202593
+ return false;
202594
+ if (filePath) {
202595
+ const normalized = filePath.replace(/\\/g, "/");
202596
+ if (!normalized.includes("/data/"))
202597
+ return false;
202598
+ }
202599
+ if (exports.some((e) => /^[A-Z]/.test(e) || /^use[A-Z]/.test(e)))
202600
+ return false;
202601
+ return true;
202602
+ }, wrapDataExports = (transpiled, filePath, exports) => {
202603
+ const storeKey = filePath.replace(/\\/g, "/");
202604
+ let result = transpiled;
202605
+ for (const name of exports) {
202606
+ result = result.replace(new RegExp(`export\\s+(const|let|var)\\s+${name}\\s*=`), `$1 ${name} =`);
202607
+ }
202608
+ const preamble = `const __hmr = ((globalThis.__HMR_DATA__ ??= {})[${JSON.stringify(storeKey)}] ??= {});
202609
+ `;
202610
+ const storeWrites = exports.map((name) => `__hmr.${name} = ${name};`).join(`
202611
+ `);
202612
+ const namedExport = exports.length > 0 ? `export { ${exports.join(", ")} };
202613
+ ` : "";
202614
+ return preamble + result + `
202615
+ ` + storeWrites + `
202616
+ ` + namedExport + `export default __hmr;
202617
+ `;
202565
202618
  }, transformPlainFile = (filePath, projectRoot, rewriter) => {
202566
202619
  const raw = readFileSync9(filePath, "utf-8");
202567
202620
  const ext = extname3(filePath);
@@ -202573,7 +202626,13 @@ ${stubs}
202573
202626
  if (isTS) {
202574
202627
  transpiled = preserveTypeExports(raw, transpiled, valueExports);
202575
202628
  }
202576
- return rewriteImports2(transpiled, filePath, projectRoot, rewriter);
202629
+ if (isTS && !isTSX && isDataOnlyFile(valueExports, transpiled, filePath)) {
202630
+ transpiled = wrapDataExports(transpiled, filePath, valueExports);
202631
+ markAsDataFile(filePath);
202632
+ }
202633
+ let result = rewriteImports2(transpiled, filePath, projectRoot, rewriter);
202634
+ result = rewriteDataImports(result, projectRoot);
202635
+ return result;
202577
202636
  }, svelteExternalCss, svelteCompiler = null, vueCompiler = null, warmCompilers = async (frameworks) => {
202578
202637
  const [sc, vc] = await Promise.all([
202579
202638
  frameworks.svelte ? import("svelte/compiler") : undefined,
@@ -202626,11 +202685,11 @@ ${stubs}
202626
202685
  if (compiled.css?.code) {
202627
202686
  const cssPath = `${filePath}.css`;
202628
202687
  svelteExternalCss.set(cssPath, compiled.css.code);
202629
- const cssUrl = srcUrl(relative8(projectRoot, cssPath), projectRoot);
202688
+ const cssUrl = srcUrl(relative7(projectRoot, cssPath), projectRoot);
202630
202689
  code = `import "${cssUrl}";
202631
202690
  ${code}`;
202632
202691
  }
202633
- const moduleUrl = `${SRC_PREFIX}${relative8(projectRoot, filePath).replace(/\\/g, "/")}`;
202692
+ const moduleUrl = `${SRC_PREFIX}${relative7(projectRoot, filePath).replace(/\\/g, "/")}`;
202634
202693
  code = code.replace(/if\s*\(import\.meta\.hot\)\s*\{/, `if (typeof window !== "undefined") {
202635
202694
  if (!window.__SVELTE_HMR_ACCEPT__) window.__SVELTE_HMR_ACCEPT__ = {};
202636
202695
  var __hmr_accept = function(cb) { window.__SVELTE_HMR_ACCEPT__[${JSON.stringify(moduleUrl)}] = cb; };`);
@@ -202694,7 +202753,7 @@ ${code}`;
202694
202753
  }
202695
202754
  code = tsTranspiler2.transformSync(code);
202696
202755
  const hmrBase = vueDir ? resolve18(vueDir) : projectRoot;
202697
- const hmrId = relative8(hmrBase, filePath).replace(/\\/g, "/").replace(/\.vue$/, "");
202756
+ const hmrId = relative7(hmrBase, filePath).replace(/\\/g, "/").replace(/\.vue$/, "");
202698
202757
  code = code.replace(/export\s+default\s+/, "var __hmr_comp__ = ");
202699
202758
  code += [
202700
202759
  "",
@@ -202951,6 +203010,7 @@ var init_moduleServer = __esm(() => {
202951
203010
  STRING_CONTENTS_RE = /`(?:[^`\\]|\\.)*`|'(?:[^'\\]|\\.)*'|"(?:[^"\\]|\\.)*"/gs;
202952
203011
  REACT_EXTENSIONS = new Set([".tsx", ".jsx"]);
202953
203012
  mtimeCache = new Map;
203013
+ NAMED_IMPORT_RE = /import\s*\{([^}]+)\}\s*from\s*(["'])(\/\@src\/[^"']+)(["']);?/g;
202954
203014
  HOOK_NAMES = new Set([
202955
203015
  "useState",
202956
203016
  "useReducer",
@@ -203053,7 +203113,7 @@ var init_simpleHTMXHMR = () => {};
203053
203113
  // src/dev/rebuildTrigger.ts
203054
203114
  import { existsSync as existsSync14 } from "fs";
203055
203115
  import { rm as rm8 } from "fs/promises";
203056
- import { basename as basename8, relative as relative9, resolve as resolve21 } from "path";
203116
+ import { basename as basename8, relative as relative8, resolve as resolve21 } from "path";
203057
203117
  var moduleServerPromise, getModuleServer = () => moduleServerPromise, parseErrorLocationFromMessage = (msg) => {
203058
203118
  const pathLineCol = msg.match(/^([^\s:]+):(\d+)(?::(\d+))?/);
203059
203119
  if (pathLineCol) {
@@ -203487,7 +203547,7 @@ var moduleServerPromise, getModuleServer = () => moduleServerPromise, parseError
203487
203547
  }, getModuleUrl = async (pageFile) => {
203488
203548
  const { invalidateModule: invalidateModule2, warmCache: warmCache2, SRC_URL_PREFIX: SRC_URL_PREFIX2 } = await Promise.resolve().then(() => (init_moduleServer(), exports_moduleServer));
203489
203549
  invalidateModule2(pageFile);
203490
- const rel = relative9(process.cwd(), pageFile).replace(/\\/g, "/");
203550
+ const rel = relative8(process.cwd(), pageFile).replace(/\\/g, "/");
203491
203551
  const url = `${SRC_URL_PREFIX2}${rel}`;
203492
203552
  warmCache2(url);
203493
203553
  return url;
@@ -203513,18 +203573,10 @@ var moduleServerPromise, getModuleServer = () => moduleServerPromise, parseError
203513
203573
  for (const file4 of reactFiles) {
203514
203574
  invalidateModule2(file4);
203515
203575
  }
203516
- const isComponentFile = primaryFile.endsWith(".tsx") || primaryFile.endsWith(".jsx");
203517
- let broadcastTarget = primaryFile;
203518
- if (!isComponentFile) {
203519
- const { findNearestComponent: findNearestComponent2 } = await Promise.resolve().then(() => (init_transformCache(), exports_transformCache));
203520
- const nearest = findNearestComponent2(resolve21(primaryFile));
203521
- if (nearest)
203522
- broadcastTarget = nearest;
203523
- }
203524
- const pageModuleUrl = await getReactModuleUrl(broadcastTarget);
203576
+ const pageModuleUrl = await getReactModuleUrl(primaryFile);
203525
203577
  if (pageModuleUrl) {
203526
203578
  const serverDuration = Date.now() - startTime;
203527
- state.lastHmrPath = relative9(process.cwd(), primaryFile).replace(/\\/g, "/");
203579
+ state.lastHmrPath = relative8(process.cwd(), primaryFile).replace(/\\/g, "/");
203528
203580
  state.lastHmrFramework = "react";
203529
203581
  broadcastToClients(state, {
203530
203582
  data: {
@@ -203910,7 +203962,7 @@ var moduleServerPromise, getModuleServer = () => moduleServerPromise, parseError
203910
203962
  const baseName = fileName.replace(/\.vue$/, "");
203911
203963
  const pascalName = toPascal(baseName);
203912
203964
  const vueRoot = config.vueDirectory;
203913
- const hmrId = vueRoot ? relative9(vueRoot, vuePagePath).replace(/\\/g, "/").replace(/\.vue$/, "") : baseName;
203965
+ const hmrId = vueRoot ? relative8(vueRoot, vuePagePath).replace(/\\/g, "/").replace(/\.vue$/, "") : baseName;
203914
203966
  const cssKey = `${pascalName}CSS`;
203915
203967
  const cssUrl = manifest[cssKey] || null;
203916
203968
  const { vueHmrMetadata: vueHmrMetadata2 } = await Promise.resolve().then(() => (init_compileVue(), exports_compileVue));
@@ -205050,7 +205102,7 @@ var handleHTMLPageRequest = (pagePath) => file(pagePath);
205050
205102
  var handleHTMXPageRequest = (pagePath) => file(pagePath);
205051
205103
  // src/core/prepare.ts
205052
205104
  import { readFileSync as readFileSync10 } from "fs";
205053
- import { relative as relative11, resolve as resolve23 } from "path";
205105
+ import { relative as relative10, resolve as resolve23 } from "path";
205054
205106
 
205055
205107
  // src/utils/loadConfig.ts
205056
205108
  import { resolve } from "path";
@@ -205129,7 +205181,7 @@ var prepare = async (configOrPath) => {
205129
205181
  })) {
205130
205182
  if (file4.includes("/node_modules/"))
205131
205183
  continue;
205132
- const rel = relative11(process.cwd(), file4).replace(/\\/g, "/");
205184
+ const rel = relative10(process.cwd(), file4).replace(/\\/g, "/");
205133
205185
  warmCache2(`${SRC_URL_PREFIX2}${rel}`);
205134
205186
  }
205135
205187
  }
@@ -205139,7 +205191,7 @@ var prepare = async (configOrPath) => {
205139
205191
  if (key.endsWith("Index") && typeof result.manifest[key] === "string" && result.manifest[key].includes("/react/") && result.manifest[key].includes("/indexes/")) {
205140
205192
  const fileName = `${key.replace(/Index$/, "")}.tsx`;
205141
205193
  const srcPath = resolve23(devIndexDir, fileName);
205142
- const rel = relative11(process.cwd(), srcPath).replace(/\\/g, "/");
205194
+ const rel = relative10(process.cwd(), srcPath).replace(/\\/g, "/");
205143
205195
  result.manifest[key] = `${SRC_URL_PREFIX2}${rel}`;
205144
205196
  }
205145
205197
  }
@@ -205309,5 +205361,5 @@ export {
205309
205361
  ANGULAR_INIT_TIMEOUT_MS
205310
205362
  };
205311
205363
 
205312
- //# debugId=A2C8E272613C93C164756E2164756E21
205364
+ //# debugId=78D70B808786BC8A64756E2164756E21
205313
205365
  //# sourceMappingURL=index.js.map