@absolutejs/absolute 0.20.0-beta.122 → 0.20.0-beta.124

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -25889,7 +25889,7 @@ var init_compileAngular = __esm(() => {
25889
25889
 
25890
25890
  // node_modules/content-tag/pkg/node/content_tag.cjs
25891
25891
  var require_content_tag = __commonJS(function(exports, module) {
25892
- var __dirname = "/tmp/abs-translation-fix/node_modules/content-tag/pkg/node";
25892
+ var __dirname = "/home/alexkahn/abs/absolutejs/.claude/worktrees/release/node_modules/content-tag/pkg/node";
25893
25893
  var imports = {};
25894
25894
  imports["__wbindgen_placeholder__"] = exports;
25895
25895
  var wasm;
@@ -30115,15 +30115,6 @@ var init_fileHashTracker = __esm(() => {
30115
30115
  });
30116
30116
 
30117
30117
  // src/dev/transformCache.ts
30118
- var exports_transformCache = {};
30119
- __export(exports_transformCache, {
30120
- findNearestComponent: () => findNearestComponent,
30121
- getInvalidationVersion: () => getInvalidationVersion,
30122
- getTransformed: () => getTransformed,
30123
- invalidate: () => invalidate,
30124
- invalidateAll: () => invalidateAll,
30125
- setTransformed: () => setTransformed
30126
- });
30127
30118
  var cache, importers, getTransformed = (filePath) => cache.get(filePath)?.content, setTransformed = (filePath, content, mtime, imports) => {
30128
30119
  const resolvedImports = imports ?? [];
30129
30120
  cache.set(filePath, { content, imports: resolvedImports, mtime });
@@ -30175,10 +30166,6 @@ var cache, importers, getTransformed = (filePath) => cache.get(filePath)?.conten
30175
30166
  queue.push(parent);
30176
30167
  }
30177
30168
  }
30178
- }, invalidateAll = () => {
30179
- cache.clear();
30180
- importers.clear();
30181
- invalidationVersions.clear();
30182
30169
  };
30183
30170
  var init_transformCache = __esm(() => {
30184
30171
  cache = globalThis.__transformCache ?? new Map;
@@ -30736,6 +30723,15 @@ var MAX_RETAINED_HMR_UPDATES = 100, normalizedHmrTarget = (value) => {
30736
30723
  const oldest = state.hmrUpdates.keys().next().value;
30737
30724
  if (typeof oldest === "number")
30738
30725
  state.hmrUpdates.delete(oldest);
30726
+ }, canonicalClients, canonicalClient = (client2) => {
30727
+ const { raw } = client2;
30728
+ if (!raw)
30729
+ return client2;
30730
+ const known = canonicalClients.get(raw);
30731
+ if (known)
30732
+ return known;
30733
+ canonicalClients.set(raw, client2);
30734
+ return client2;
30739
30735
  }, trySendMessage = (client2, messageStr) => {
30740
30736
  try {
30741
30737
  client2.send(messageStr);
@@ -30762,7 +30758,7 @@ var MAX_RETAINED_HMR_UPDATES = 100, normalizedHmrTarget = (value) => {
30762
30758
  state.clientTargets.delete(client2);
30763
30759
  });
30764
30760
  }, handleClientConnect = (state, client2, manifest) => {
30765
- state.connectedClients.add(client2);
30761
+ state.connectedClients.add(canonicalClient(client2));
30766
30762
  const serverVersions = serializeModuleVersions(state.moduleVersions);
30767
30763
  client2.send(JSON.stringify({
30768
30764
  data: {
@@ -30799,8 +30795,11 @@ var MAX_RETAINED_HMR_UPDATES = 100, normalizedHmrTarget = (value) => {
30799
30795
  }));
30800
30796
  }
30801
30797
  }, handleClientDisconnect = (state, client2) => {
30802
- state.connectedClients.delete(client2);
30803
- state.clientTargets.delete(client2);
30798
+ const known = canonicalClient(client2);
30799
+ state.connectedClients.delete(known);
30800
+ state.clientTargets.delete(known);
30801
+ if (client2.raw)
30802
+ canonicalClients.delete(client2.raw);
30804
30803
  }, parseJsonSafe = (raw) => JSON.parse(raw), parseMessage = (message) => {
30805
30804
  if (typeof message === "string") {
30806
30805
  return parseJsonSafe(message);
@@ -30876,12 +30875,13 @@ var MAX_RETAINED_HMR_UPDATES = 100, normalizedHmrTarget = (value) => {
30876
30875
  if (!isValidHMRClientMessage(parsedData)) {
30877
30876
  return;
30878
30877
  }
30879
- handleParsedMessage(state, client2, parsedData);
30878
+ handleParsedMessage(state, canonicalClient(client2), parsedData);
30880
30879
  } catch {}
30881
30880
  };
30882
30881
  var init_webSocket = __esm(() => {
30883
30882
  init_telemetryEvent();
30884
30883
  init_logger();
30884
+ canonicalClients = new WeakMap;
30885
30885
  });
30886
30886
 
30887
30887
  // src/dev/moduleServer.ts
@@ -30890,6 +30890,7 @@ __export(exports_moduleServer, {
30890
30890
  SRC_URL_PREFIX: () => SRC_URL_PREFIX2,
30891
30891
  createDevPageWarmer: () => createDevPageWarmer,
30892
30892
  createModuleServer: () => createModuleServer,
30893
+ getTransformError: () => getTransformError,
30893
30894
  importedBindingNames: () => importedBindingNames,
30894
30895
  invalidateModule: () => invalidateModule,
30895
30896
  isReactFastRefreshSupported: () => isReactFastRefreshSupported,
@@ -31090,7 +31091,7 @@ ${code2}`;
31090
31091
  reactFastRefresh: true
31091
31092
  };
31092
31093
  const probe = new Bun.Transpiler(probeOptions);
31093
- const out = probe.transformSync("export function __AbsoluteRefreshProbe(){return null;}");
31094
+ const out = probe.transformSync("export function AbsoluteRefreshProbe(){return null;}");
31094
31095
  return out.includes("$RefreshReg$");
31095
31096
  } catch {
31096
31097
  return false;
@@ -31099,7 +31100,7 @@ ${code2}`;
31099
31100
  if (reactFastRefreshSupported || reactFastRefreshWarningEmitted)
31100
31101
  return;
31101
31102
  reactFastRefreshWarningEmitted = true;
31102
- logWarn("React HMR is blocked: this Bun build ignores " + "`reactFastRefresh` on Bun.Transpiler, so component state " + "cannot be preserved across edits. Tracking " + "https://github.com/oven-sh/bun/pull/28312 \u2014 if it still has " + "not merged, leave a \uD83D\uDC4D on the PR so the Bun team knows it " + "is blocking you. Until then, React edits trigger a targeted " + "page remount instead of a state-preserving fast refresh.");
31103
+ logWarn("React edits remount the page instead of keeping component state: " + "this Bun ignores `reactFastRefresh` on Bun.Transpiler " + "(https://github.com/oven-sh/bun/issues/32919). Run " + "`absolute bun-patch install` to use AbsoluteJS's patched Bun, " + "which has the fix; `absolute dev` then uses it automatically.");
31103
31104
  }, transformReactFile = (filePath, projectRoot, rewriter) => {
31104
31105
  const raw = readFileSync38(filePath, "utf-8");
31105
31106
  const valueExports = tsxTranspiler.scan(raw).exports;
@@ -31649,7 +31650,27 @@ export default {};
31649
31650
  const content = await transformVueFile(filePath, projectRoot, rewriter, vueDir, stylePreprocessors);
31650
31651
  setTransformed(filePath, content, stat4.mtimeMs, extractImportedFiles(content, projectRoot));
31651
31652
  return jsResponse(content);
31652
- }, transformErrorResponse = (err) => {
31653
+ }, transformErrors, readPosition = (value) => {
31654
+ if (!value || typeof value !== "object")
31655
+ return;
31656
+ const position = Reflect.get(value, "position");
31657
+ if (!position || typeof position !== "object")
31658
+ return;
31659
+ const line = Reflect.get(position, "line");
31660
+ const column = Reflect.get(position, "column");
31661
+ const lineText = Reflect.get(position, "lineText");
31662
+ return {
31663
+ column: typeof column === "number" ? column : undefined,
31664
+ line: typeof line === "number" ? line : undefined,
31665
+ lineText: typeof lineText === "string" ? lineText : undefined
31666
+ };
31667
+ }, describeTransformError = (err) => {
31668
+ const [first] = err instanceof AggregateError && Array.isArray(err.errors) ? err.errors : [err];
31669
+ const source = first ?? err;
31670
+ const ownMessage = source && typeof source === "object" ? Reflect.get(source, "message") : undefined;
31671
+ const message = typeof ownMessage === "string" ? ownMessage : String(source);
31672
+ return { message, ...readPosition(first) };
31673
+ }, getTransformError = (filePath) => transformErrors.get(resolve48(filePath)), transformErrorResponse = (err) => {
31653
31674
  const errMsg = err instanceof Error ? err.message : String(err);
31654
31675
  return new Response(`console.error('[ModuleServer] Transform error:', ${JSON.stringify(errMsg)});`, {
31655
31676
  headers: { "Content-Type": "application/javascript" },
@@ -31677,8 +31698,11 @@ export default {};
31677
31698
  return virtualCssResponse;
31678
31699
  const { filePath, ext } = resolveSourcePath2(relPath, projectRoot);
31679
31700
  try {
31680
- return await transformAndCache(filePath, ext, projectRoot, rewriter, frameworkDirs?.vue, stylePreprocessors);
31701
+ const response = await transformAndCache(filePath, ext, projectRoot, rewriter, frameworkDirs?.vue, stylePreprocessors);
31702
+ transformErrors.delete(resolve48(filePath));
31703
+ return response;
31681
31704
  } catch (err) {
31705
+ transformErrors.set(resolve48(filePath), describeTransformError(err));
31682
31706
  return transformErrorResponse(err);
31683
31707
  }
31684
31708
  };
@@ -31691,21 +31715,23 @@ export default {};
31691
31715
  files.push(resolve48(projectRoot, match[1]));
31692
31716
  }
31693
31717
  return files;
31694
- }, invalidateModule = (filePath) => {
31718
+ }, SRC_URL_PREFIX2, invalidateModule = (filePath) => {
31695
31719
  const resolved = resolve48(filePath);
31720
+ transformErrors.delete(resolved);
31696
31721
  invalidate(filePath);
31697
31722
  if (resolved !== filePath)
31698
31723
  invalidate(resolved);
31699
31724
  mtimeCache.delete(filePath);
31700
31725
  mtimeCache.delete(resolved);
31726
+ }, setGlobalModuleServer = (handler) => {
31727
+ globalThis.__absoluteModuleServer = handler ?? undefined;
31701
31728
  }, warmCache = async (pathname) => {
31702
31729
  if (!pathname.startsWith(SRC_PREFIX))
31703
31730
  return;
31704
- if (!globalModuleServer)
31731
+ const handler = globalThis.__absoluteModuleServer;
31732
+ if (!handler)
31705
31733
  return;
31706
- await globalModuleServer(pathname);
31707
- }, globalModuleServer = null, SRC_URL_PREFIX2, setGlobalModuleServer = (handler) => {
31708
- globalModuleServer = handler;
31734
+ await handler(pathname);
31709
31735
  }, REBUILD_IDLE_POLL_MS = 10, getDevResult = () => globalThis.__hmrDevResult, resolveDevPageEntry = (keyOrPath) => {
31710
31736
  const cached = getDevResult();
31711
31737
  const lazy = cached?.hmrState.lazyPages;
@@ -31876,6 +31902,8 @@ export function __legacyDecorateParamTS(paramIndex, decorator) {
31876
31902
  return function (target, key) { decorator(target, key, paramIndex); };
31877
31903
  }
31878
31904
  `.trim();
31905
+ transformErrors = globalThis.__absoluteTransformErrors ?? new Map;
31906
+ globalThis.__absoluteTransformErrors = transformErrors;
31879
31907
  SRC_IMPORT_RE = /\/@src\/([^"'?\s]+)/g;
31880
31908
  SRC_URL_PREFIX2 = SRC_PREFIX;
31881
31909
  });
@@ -32245,7 +32273,7 @@ __export(exports_rebuildTrigger, {
32245
32273
  queueFileChange: () => queueFileChange,
32246
32274
  triggerRebuild: () => triggerRebuild
32247
32275
  });
32248
- import { existsSync as existsSync45, readdirSync as readdirSync12, rmSync as rmSync4 } from "fs";
32276
+ import { existsSync as existsSync45, readdirSync as readdirSync12, rmSync as rmSync4, statSync as statSync8 } from "fs";
32249
32277
  import {
32250
32278
  basename as basename20,
32251
32279
  dirname as dirname35,
@@ -33390,28 +33418,76 @@ var moduleServerPromise, getModuleServer = () => moduleServerPromise, clearDevSs
33390
33418
  const url = `${SRC_URL_PREFIX3}${rel}`;
33391
33419
  await warmCache2(url);
33392
33420
  return url;
33393
- }, getReactModuleUrl, resolveBroadcastTarget = async (primaryFile) => {
33394
- const isComponentFile2 = primaryFile.endsWith(".tsx") || primaryFile.endsWith(".jsx");
33395
- if (isComponentFile2)
33396
- return primaryFile;
33397
- const { findNearestComponent: findNearestComponent2 } = await Promise.resolve().then(() => (init_transformCache(), exports_transformCache));
33398
- const nearest = findNearestComponent2(resolvePath(primaryFile));
33399
- return nearest ?? primaryFile;
33421
+ }, getReactModuleUrl, isReactComponentPath = (file6) => file6.endsWith(".tsx") || file6.endsWith(".jsx"), isReactPagePath = (file6) => file6.replace(/\\/g, "/").includes("/pages/"), isImportableModule = (file6) => {
33422
+ try {
33423
+ return statSync8(file6).isFile();
33424
+ } catch {
33425
+ return false;
33426
+ }
33427
+ }, resolveComponentTarget = (file6, reactFiles, edited) => {
33428
+ if (isReactComponentPath(file6))
33429
+ return file6;
33430
+ const nearest = findNearestComponent(resolvePath(file6));
33431
+ if (nearest && isImportableModule(nearest))
33432
+ return nearest;
33433
+ const dependents = reactFiles.filter((candidate) => !edited.has(candidate) && isReactComponentPath(candidate) && isImportableModule(candidate));
33434
+ return dependents.find((candidate) => !isReactPagePath(candidate)) ?? dependents[0] ?? file6;
33435
+ }, resolveReactUpdateTargets = (state, reactFiles) => {
33436
+ const importable = reactFiles.filter(isImportableModule);
33437
+ const userEdited = importable.filter((file6) => state.lastUserEditedFiles?.has(resolvePath(file6)));
33438
+ const editedFiles = userEdited.length > 0 ? userEdited : importable;
33439
+ const edited = new Set(editedFiles);
33440
+ const ordered = [
33441
+ ...editedFiles.filter((file6) => !isReactPagePath(file6)),
33442
+ ...editedFiles.filter(isReactPagePath)
33443
+ ];
33444
+ const targets = ordered.map((file6) => resolveComponentTarget(file6, reactFiles, edited));
33445
+ return { editedFiles, targets: [...new Set(targets)] };
33446
+ }, resolveAffectedPageModules = async (reactFiles) => {
33447
+ const pages = reactFiles.filter((file6) => isReactPagePath(file6) && isReactComponentPath(file6) && isImportableModule(file6));
33448
+ const entries = await Promise.all(pages.map(async (page) => [
33449
+ `${basename20(page).replace(/\.[jt]sx$/, "")}Index`,
33450
+ await getReactModuleUrl(page)
33451
+ ]));
33452
+ return Object.fromEntries(entries);
33400
33453
  }, handleReactModuleServerPath = async (state, reactFiles, startTime, fastRefreshSupported, onRebuildComplete) => {
33401
- const primaryFile = reactFiles.find((file6) => !file6.replace(/\\/g, "/").includes("/pages/")) ?? reactFiles[0];
33402
- if (!primaryFile) {
33454
+ const { invalidateModule: invalidateModule2 } = await getModuleServer();
33455
+ for (const file6 of reactFiles) {
33456
+ invalidateModule2(file6);
33457
+ }
33458
+ const { editedFiles, targets } = resolveReactUpdateTargets(state, reactFiles);
33459
+ const [primaryTarget] = targets;
33460
+ if (!primaryTarget) {
33403
33461
  onRebuildComplete({
33404
33462
  hmrState: state,
33405
33463
  manifest: state.manifest
33406
33464
  });
33407
33465
  return state.manifest;
33408
33466
  }
33409
- const { invalidateModule: invalidateModule2 } = await getModuleServer();
33410
- for (const file6 of reactFiles) {
33411
- invalidateModule2(file6);
33467
+ const moduleUrls = await Promise.all(targets.map(getReactModuleUrl));
33468
+ await Promise.all(editedFiles.filter((file6) => !targets.includes(file6)).map(getReactModuleUrl));
33469
+ const { getTransformError: getTransformError2 } = await getModuleServer();
33470
+ const failed = [...new Set([...editedFiles, ...targets])].map((file6) => ({ error: getTransformError2(file6), file: file6 })).find((entry) => entry.error !== undefined);
33471
+ if (failed?.error) {
33472
+ broadcastToClients(state, {
33473
+ data: {
33474
+ affectedFrameworks: ["react"],
33475
+ column: failed.error.column,
33476
+ error: failed.error.message,
33477
+ file: failed.file,
33478
+ framework: "react",
33479
+ line: failed.error.line,
33480
+ lineText: failed.error.lineText
33481
+ },
33482
+ message: "React module failed to compile",
33483
+ type: "rebuild-error"
33484
+ });
33485
+ onRebuildComplete({ hmrState: state, manifest: state.manifest });
33486
+ return state.manifest;
33412
33487
  }
33413
- const broadcastTarget = await resolveBroadcastTarget(primaryFile);
33414
- const pageModuleUrl = await getReactModuleUrl(broadcastTarget);
33488
+ const pageModuleUrls = fastRefreshSupported ? undefined : await resolveAffectedPageModules(reactFiles);
33489
+ const [pageModuleUrl] = moduleUrls;
33490
+ const primaryFile = reactFiles.find((file6) => isImportableModule(file6) && !isReactPagePath(file6)) ?? primaryTarget;
33415
33491
  if (pageModuleUrl) {
33416
33492
  const serverDuration = Date.now() - startTime;
33417
33493
  state.lastHmrPath = relative23(process.cwd(), primaryFile).replace(/\\/g, "/");
@@ -33423,7 +33499,9 @@ var moduleServerPromise, getModuleServer = () => moduleServerPromise, clearDevSs
33423
33499
  hasComponentChanges: true,
33424
33500
  hasCSSChanges: false,
33425
33501
  manifest: state.manifest,
33502
+ moduleUrls,
33426
33503
  pageModuleUrl,
33504
+ pageModuleUrls,
33427
33505
  primarySource: primaryFile,
33428
33506
  serverDuration,
33429
33507
  sourceFiles: reactFiles
@@ -35434,7 +35512,7 @@ __export(exports_devBuild, {
35434
35512
  devBuild: () => devBuild
35435
35513
  });
35436
35514
  import { readdir as readdir5 } from "fs/promises";
35437
- import { existsSync as existsSync47, statSync as statSync8 } from "fs";
35515
+ import { existsSync as existsSync47, statSync as statSync9 } from "fs";
35438
35516
  import { resolve as resolve53 } from "path";
35439
35517
  var FRAMEWORK_DIR_KEYS, devClientVendorSourceDir = () => resolve53(import.meta.dir, "../dev/client"), collectDepVendorSourceDirs = (config) => {
35440
35518
  const configuredDirs = [
@@ -35574,7 +35652,7 @@ var FRAMEWORK_DIR_KEYS, devClientVendorSourceDir = () => resolve53(import.meta.d
35574
35652
  });
35575
35653
  }
35576
35654
  }, handleCachedReload = async () => {
35577
- const serverMtime = statSync8(resolve53(Bun.main)).mtimeMs;
35655
+ const serverMtime = statSync9(resolve53(Bun.main)).mtimeMs;
35578
35656
  const lastMtime = globalThis.__hmrServerMtime;
35579
35657
  globalThis.__hmrServerMtime = serverMtime;
35580
35658
  const cached = globalThis.__hmrDevResult;
@@ -35955,7 +36033,7 @@ var FRAMEWORK_DIR_KEYS, devClientVendorSourceDir = () => resolve53(import.meta.d
35955
36033
  manifest
35956
36034
  };
35957
36035
  globalThis.__hmrDevResult = result;
35958
- globalThis.__hmrServerMtime = statSync8(resolve53(Bun.main)).mtimeMs;
36036
+ globalThis.__hmrServerMtime = statSync9(resolve53(Bun.main)).mtimeMs;
35959
36037
  return result;
35960
36038
  };
35961
36039
  var init_devBuild = __esm(() => {
@@ -38098,7 +38176,7 @@ import {
38098
38176
  existsSync as existsSync52,
38099
38177
  readdirSync as readdirSync16,
38100
38178
  readFileSync as readFileSync45,
38101
- statSync as statSync9,
38179
+ statSync as statSync10,
38102
38180
  watch as watch2
38103
38181
  } from "fs";
38104
38182
  import { createHash as createHash13 } from "crypto";
@@ -38257,7 +38335,7 @@ var ATOMIC_RECOVERY_WINDOW_MS = 1000, RELOAD_DEBOUNCE_MS = 80, ENTRY_IMPORT_RETR
38257
38335
  continue;
38258
38336
  let st2;
38259
38337
  try {
38260
- st2 = statSync9(join67(dir, entry.name));
38338
+ st2 = statSync10(join67(dir, entry.name));
38261
38339
  } catch {
38262
38340
  continue;
38263
38341
  }
@@ -45713,5 +45791,5 @@ export {
45713
45791
  wrapPageHandlerWithStreamingSlots
45714
45792
  };
45715
45793
 
45716
- //# debugId=3A630DBA79A9DB3064756E2164756E21
45794
+ //# debugId=53D864DB191F7D8364756E2164756E21
45717
45795
  //# sourceMappingURL=index.js.map