@absolutejs/absolute 0.20.0-beta.127 → 0.20.0-beta.128

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/build.js CHANGED
@@ -26094,6 +26094,26 @@ var init_assetStore = __esm(() => {
26094
26094
  HASHED_FILE_RE = /\.[a-z0-9]{8}\.(js|css|mjs)$/;
26095
26095
  });
26096
26096
 
26097
+ // src/dev/restartScope.ts
26098
+ import { realpathSync as realpathSync3 } from "fs";
26099
+ var MODULE_FILE, DOCUMENT_FILE, realPath = (path) => {
26100
+ try {
26101
+ return realpathSync3(path);
26102
+ } catch {
26103
+ return path;
26104
+ }
26105
+ }, isLoadedByThisProcess = (path) => (path in __require.cache) || (realPath(path) in __require.cache), changeNeedsRestart = (path, isLoaded = isLoadedByThisProcess) => {
26106
+ if (DOCUMENT_FILE.test(path) || isTestSourcePath(path))
26107
+ return false;
26108
+ if (MODULE_FILE.test(path))
26109
+ return isLoaded(path);
26110
+ return true;
26111
+ };
26112
+ var init_restartScope = __esm(() => {
26113
+ MODULE_FILE = /\.(?:[cm]?[jt]sx?|mts|cts)$/;
26114
+ DOCUMENT_FILE = /\.(?:md|mdx|markdown|txt|rst|adoc|log|csv)$/i;
26115
+ });
26116
+
26097
26117
  // src/islands/pageMetadata.ts
26098
26118
  import { readFileSync as readFileSync30 } from "fs";
26099
26119
  import { dirname as dirname28, resolve as resolve38 } from "path";
@@ -27394,7 +27414,96 @@ var BOOTSTRAP_MANIFEST_KEY = "BootstrapClient", ISLAND_MARKER = 'data-island="tr
27394
27414
  globalThis.__absoluteManifest = manifest;
27395
27415
  };
27396
27416
 
27417
+ // src/utils/ssrErrorPage.ts
27418
+ var exports_ssrErrorPage = {};
27419
+ __export(exports_ssrErrorPage, {
27420
+ buildErrorPage: () => buildErrorPage,
27421
+ ssrErrorPage: () => ssrErrorPage
27422
+ });
27423
+ var errorPageHtml = ({
27424
+ framework,
27425
+ hint,
27426
+ kind,
27427
+ message,
27428
+ script = ""
27429
+ }) => {
27430
+ const frameworkColors2 = {
27431
+ angular: "#dd0031",
27432
+ html: "#e34c26",
27433
+ htmx: "#1a365d",
27434
+ react: "#61dafb",
27435
+ svelte: "#ff3e00",
27436
+ vue: "#42b883"
27437
+ };
27438
+ const accent = frameworkColors2[framework] ?? "#94a3b8";
27439
+ const label = framework.charAt(0).toUpperCase() + framework.slice(1);
27440
+ return `<!DOCTYPE html>
27441
+ <html>
27442
+ <head>
27443
+ <meta charset="utf-8">
27444
+ <meta name="viewport" content="width=device-width, initial-scale=1">
27445
+ <title>SSR Error - AbsoluteJS</title>
27446
+ <style>
27447
+ *{margin:0;padding:0;box-sizing:border-box}
27448
+ body{min-height:100vh;background:linear-gradient(135deg,rgba(15,23,42,0.98) 0%,rgba(30,41,59,0.98) 100%);color:#e2e8f0;font-family:"JetBrains Mono","Fira Code",ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;font-size:14px;line-height:1.6;display:flex;align-items:flex-start;justify-content:center;padding:32px}
27449
+ .card{max-width:720px;width:100%;background:rgba(30,41,59,0.6);border:1px solid rgba(71,85,105,0.5);border-radius:16px;box-shadow:0 25px 50px -12px rgba(0,0,0,0.5),0 0 0 1px rgba(255,255,255,0.05);overflow:hidden}
27450
+ .header{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:20px 24px;background:rgba(15,23,42,0.5);border-bottom:1px solid rgba(71,85,105,0.4)}
27451
+ .brand{font-weight:700;font-size:20px;color:#fff;letter-spacing:-0.02em}
27452
+ .badge{padding:5px 10px;border-radius:8px;font-size:12px;font-weight:600;background:${accent};color:#fff;opacity:0.95;box-shadow:0 2px 4px rgba(0,0,0,0.2)}
27453
+ .kind{color:#94a3b8;font-size:13px;font-weight:500}
27454
+ .content{padding:24px}
27455
+ .label{font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:0.08em;color:#94a3b8;margin-bottom:8px}
27456
+ .message{margin:0;padding:16px 20px;background:rgba(239,68,68,0.12);border:1px solid rgba(239,68,68,0.25);border-radius:10px;overflow-x:auto;white-space:pre-wrap;word-break:break-word;color:#fca5a5;font-size:13px;line-height:1.5}
27457
+ .hint{margin-top:20px;padding:12px 20px;background:rgba(71,85,105,0.3);border-radius:10px;border:1px solid rgba(71,85,105,0.4);color:#cbd5e1;font-size:13px}
27458
+ </style>
27459
+ </head>
27460
+ <body>
27461
+ <div class="card">
27462
+ <div class="header">
27463
+ <div style="display:flex;align-items:center;gap:12px">
27464
+ <span class="brand">AbsoluteJS</span>
27465
+ <span class="badge">${label}</span>
27466
+ </div>
27467
+ <span class="kind">${kind}</span>
27468
+ </div>
27469
+ <div class="content">
27470
+ <div class="label">What went wrong</div>
27471
+ <pre class="message">${message.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;")}</pre>
27472
+ <div class="hint">${hint}</div>
27473
+ </div>
27474
+ </div>
27475
+ ${script}
27476
+ </body>
27477
+ </html>`;
27478
+ }, RELOAD_ON_REBUILD = `<script>(()=>{const url=(location.protocol==='https:'?'wss://':'ws://')+location.host+'/hmr';let seen=false;const connect=()=>{const socket=new WebSocket(url);socket.onopen=()=>{if(seen)location.reload();seen=true;};socket.onmessage=(event)=>{try{const message=JSON.parse(event.data);const type=message&&typeof message.type==='string'?message.type:'';if(type==='rebuild-complete'||type==='server-entry-reloaded'||type.endsWith('-update'))location.reload();}catch{}};socket.onclose=()=>setTimeout(connect,500);};connect();})();</script>`, buildErrorPage = (framework, pageName, error) => errorPageHtml({
27479
+ framework,
27480
+ hint: "Fix the file and save. This page reloads by itself when the build succeeds.",
27481
+ kind: "Build Error",
27482
+ message: `${pageName || "This page"} could not be built.
27483
+
27484
+ ${error ?? "The dev-server terminal has the build output."}`,
27485
+ script: RELOAD_ON_REBUILD
27486
+ }), ssrErrorPage = (framework, error) => errorPageHtml({
27487
+ framework,
27488
+ hint: "A component threw during server-side rendering. Check the terminal for the full stack trace.",
27489
+ kind: "Server Render Error",
27490
+ message: error instanceof Error ? error.message : String(error)
27491
+ });
27492
+
27397
27493
  // src/core/requestContext.ts
27494
+ var exports_requestContext = {};
27495
+ __export(exports_requestContext, {
27496
+ absoluteRequestContext: () => absoluteRequestContext,
27497
+ devBuildErrorResponse: () => devBuildErrorResponse,
27498
+ getCurrentAbsoluteRequest: () => getCurrentAbsoluteRequest,
27499
+ getDevPageWarmer: () => getDevPageWarmer,
27500
+ getMissingAssets: () => getMissingAssets,
27501
+ recordMissingAsset: () => recordMissingAsset,
27502
+ resolveDeferredPageAssets: () => resolveDeferredPageAssets,
27503
+ runWithAbsoluteRequest: () => runWithAbsoluteRequest,
27504
+ setDevPageWarmer: () => setDevPageWarmer,
27505
+ withDeferredStylesheets: () => withDeferredStylesheets
27506
+ });
27398
27507
  import { AsyncLocalStorage as AsyncLocalStorage2 } from "async_hooks";
27399
27508
  import { Elysia as Elysia2 } from "elysia";
27400
27509
  var REQUEST_STORAGE_KEY, PAGE_WARMER_KEY, isAbsoluteRequestStorage = (value) => typeof value === "object" && value !== null && ("getStore" in value) && typeof value.getStore === "function" && ("run" in value) && typeof value.run === "function", getRequestStorage = () => {
@@ -27407,7 +27516,17 @@ var REQUEST_STORAGE_KEY, PAGE_WARMER_KEY, isAbsoluteRequestStorage = (value) =>
27407
27516
  const storage = new AsyncLocalStorage2;
27408
27517
  Reflect.set(globalThis, REQUEST_STORAGE_KEY, storage);
27409
27518
  return storage;
27410
- }, absoluteRequestContext, getCurrentAbsoluteRequest = () => getRequestStorage()?.getStore()?.request, runWithAbsoluteRequest = (request, callback) => ensureRequestStorage().run({ request }, callback), CSS_KEY_RE, isDevPageWarmer = (value) => typeof value === "object" && value !== null && ("describe" in value) && typeof value.describe === "function" && ("warm" in value) && typeof value.warm === "function" && ("lookup" in value) && typeof value.lookup === "function", getDevPageWarmer = () => {
27519
+ }, absoluteRequestContext, getCurrentAbsoluteRequest = () => getRequestStorage()?.getStore()?.request, runWithAbsoluteRequest = (request, callback) => ensureRequestStorage().run({ request }, callback), CSS_KEY_RE, isDevPageWarmer = (value) => typeof value === "object" && value !== null && ("describe" in value) && typeof value.describe === "function" && ("warm" in value) && typeof value.warm === "function" && ("lookup" in value) && typeof value.lookup === "function", devBuildErrorResponse = (framework, assets) => {
27520
+ if (!assets?.failed)
27521
+ return null;
27522
+ return new Response(buildErrorPage(framework, assets.name, assets.error), {
27523
+ headers: {
27524
+ "cache-control": "no-store",
27525
+ "content-type": "text/html; charset=utf-8"
27526
+ },
27527
+ status: 500
27528
+ });
27529
+ }, getDevPageWarmer = () => {
27411
27530
  const value = Reflect.get(globalThis, PAGE_WARMER_KEY);
27412
27531
  return isDevPageWarmer(value) ? value : undefined;
27413
27532
  }, getMissingAssets = () => {
@@ -27437,6 +27556,7 @@ var REQUEST_STORAGE_KEY, PAGE_WARMER_KEY, isAbsoluteRequestStorage = (value) =>
27437
27556
  const cssHrefs = () => cssKeys.map(lookup).filter((href) => href.length > 0 && href.startsWith("/"));
27438
27557
  const assets = {
27439
27558
  cssHrefs,
27559
+ error: failed ? warmer.lastError?.() : undefined,
27440
27560
  failed,
27441
27561
  lookup,
27442
27562
  name: described.name
@@ -32250,62 +32370,6 @@ var init_compatibilityDispatcher = __esm(() => {
32250
32370
  ]);
32251
32371
  });
32252
32372
 
32253
- // src/utils/ssrErrorPage.ts
32254
- var exports_ssrErrorPage = {};
32255
- __export(exports_ssrErrorPage, {
32256
- ssrErrorPage: () => ssrErrorPage
32257
- });
32258
- var ssrErrorPage = (framework, error) => {
32259
- const frameworkColors2 = {
32260
- angular: "#dd0031",
32261
- html: "#e34c26",
32262
- htmx: "#1a365d",
32263
- react: "#61dafb",
32264
- svelte: "#ff3e00",
32265
- vue: "#42b883"
32266
- };
32267
- const accent = frameworkColors2[framework] ?? "#94a3b8";
32268
- const label = framework.charAt(0).toUpperCase() + framework.slice(1);
32269
- const message = error instanceof Error ? error.message : String(error);
32270
- return `<!DOCTYPE html>
32271
- <html>
32272
- <head>
32273
- <meta charset="utf-8">
32274
- <meta name="viewport" content="width=device-width, initial-scale=1">
32275
- <title>SSR Error - AbsoluteJS</title>
32276
- <style>
32277
- *{margin:0;padding:0;box-sizing:border-box}
32278
- body{min-height:100vh;background:linear-gradient(135deg,rgba(15,23,42,0.98) 0%,rgba(30,41,59,0.98) 100%);color:#e2e8f0;font-family:"JetBrains Mono","Fira Code",ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;font-size:14px;line-height:1.6;display:flex;align-items:flex-start;justify-content:center;padding:32px}
32279
- .card{max-width:720px;width:100%;background:rgba(30,41,59,0.6);border:1px solid rgba(71,85,105,0.5);border-radius:16px;box-shadow:0 25px 50px -12px rgba(0,0,0,0.5),0 0 0 1px rgba(255,255,255,0.05);overflow:hidden}
32280
- .header{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:20px 24px;background:rgba(15,23,42,0.5);border-bottom:1px solid rgba(71,85,105,0.4)}
32281
- .brand{font-weight:700;font-size:20px;color:#fff;letter-spacing:-0.02em}
32282
- .badge{padding:5px 10px;border-radius:8px;font-size:12px;font-weight:600;background:${accent};color:#fff;opacity:0.95;box-shadow:0 2px 4px rgba(0,0,0,0.2)}
32283
- .kind{color:#94a3b8;font-size:13px;font-weight:500}
32284
- .content{padding:24px}
32285
- .label{font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:0.08em;color:#94a3b8;margin-bottom:8px}
32286
- .message{margin:0;padding:16px 20px;background:rgba(239,68,68,0.12);border:1px solid rgba(239,68,68,0.25);border-radius:10px;overflow-x:auto;white-space:pre-wrap;word-break:break-word;color:#fca5a5;font-size:13px;line-height:1.5}
32287
- .hint{margin-top:20px;padding:12px 20px;background:rgba(71,85,105,0.3);border-radius:10px;border:1px solid rgba(71,85,105,0.4);color:#cbd5e1;font-size:13px}
32288
- </style>
32289
- </head>
32290
- <body>
32291
- <div class="card">
32292
- <div class="header">
32293
- <div style="display:flex;align-items:center;gap:12px">
32294
- <span class="brand">AbsoluteJS</span>
32295
- <span class="badge">${label}</span>
32296
- </div>
32297
- <span class="kind">Server Render Error</span>
32298
- </div>
32299
- <div class="content">
32300
- <div class="label">What went wrong</div>
32301
- <pre class="message">${message.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;")}</pre>
32302
- <div class="hint">A component threw during server-side rendering. Check the terminal for the full stack trace.</div>
32303
- </div>
32304
- </div>
32305
- </body>
32306
- </html>`;
32307
- };
32308
-
32309
32373
  // src/core/prerender.ts
32310
32374
  var exports_prerender = {};
32311
32375
  __export(exports_prerender, {
@@ -32862,10 +32926,9 @@ var MS_PER_SECOND2 = 1000, DEFAULT_PORT2 = 3000, MAX_STATIC_ROUTE_COUNT, STATIC_
32862
32926
  const missingAsset = assetMatch[1] ?? "";
32863
32927
  const framework = /^(?:[A-Z][a-z]*)*?(Angular|Vue|Svelte|React|Html|Htmx|Ember)/.exec(missingAsset)?.[1]?.toLowerCase() ?? "absolutejs";
32864
32928
  console.error(`[hmr] Build artifact "${missingAsset}" missing from manifest \u2014 ` + `the user likely has a build-time error. Save a fix to trigger a recovery rebuild.`);
32865
- const { ssrErrorPage: ssrErrorPage2 } = await Promise.resolve().then(() => exports_ssrErrorPage);
32866
- const html = ssrErrorPage2(framework, new Error(`Build artifact "${missingAsset}" missing from manifest.
32867
-
32868
- This usually means a build-time error in a source file. Check the dev-server terminal for the underlying error, fix the file, and save to trigger a recovery rebuild.`));
32929
+ const { buildErrorPage: buildErrorPage2 } = await Promise.resolve().then(() => exports_ssrErrorPage);
32930
+ const { getDevPageWarmer: getDevPageWarmer2 } = await Promise.resolve().then(() => (init_requestContext(), exports_requestContext));
32931
+ const html = buildErrorPage2(framework, missingAsset, getDevPageWarmer2()?.lastError?.());
32869
32932
  return new Response(html, {
32870
32933
  headers: { "content-type": "text/html; charset=utf-8" },
32871
32934
  status: 500
@@ -33082,7 +33145,7 @@ __export(exports_moduleServer, {
33082
33145
  warmPage: () => warmPage,
33083
33146
  warnIfReactFastRefreshUnsupported: () => warnIfReactFastRefreshUnsupported
33084
33147
  });
33085
- import { existsSync as existsSync45, readFileSync as readFileSync40, realpathSync as realpathSync3, statSync as statSync8 } from "fs";
33148
+ import { existsSync as existsSync45, readFileSync as readFileSync40, realpathSync as realpathSync4, statSync as statSync8 } from "fs";
33086
33149
  import { basename as basename20, dirname as dirname35, extname as extname15, join as join60, resolve as resolve51, relative as relative23 } from "path";
33087
33150
  var SRC_PREFIX = "/@src/", BROWSER_DEFINE, jsTranspiler2, legacyDecoratorTsconfig, tsTranspiler2, tsxTranspiler, TRANSPILABLE, ALL_EXPORTS_RE, STRING_CONTENTS_RE, preserveTypeExports = (originalSource, transpiled, valueExports) => {
33088
33151
  const codeOnly = originalSource.replace(STRING_CONTENTS_RE, '""');
@@ -33543,7 +33606,7 @@ ${code2}`;
33543
33606
  const compiledScript = hasScript ? vueCompiler.compileScript(descriptor, {
33544
33607
  fs: {
33545
33608
  fileExists: isFile,
33546
- realpath: realpathSync3,
33609
+ realpath: realpathSync4,
33547
33610
  readFile: (file5) => isFile(file5) ? readFileSync40(file5, "utf-8") : undefined
33548
33611
  },
33549
33612
  id: componentId,
@@ -33931,6 +33994,7 @@ export default {};
33931
33994
  name: entry.name
33932
33995
  };
33933
33996
  },
33997
+ lastError: () => getDevResult()?.hmrState.lazyPages?.lastError,
33934
33998
  lookup: (key) => getDevResult()?.manifest[key],
33935
33999
  warm: (key) => warmPage(key)
33936
34000
  };
@@ -34246,6 +34310,9 @@ var resolveRequestPathname2 = (request) => {
34246
34310
  return cachedEmberHmrShim;
34247
34311
  }, handleEmberPageRequest = async (input) => {
34248
34312
  const deferredAssets = input.pagePath === "" ? await resolveDeferredPageAssets() : null;
34313
+ const buildFailure = devBuildErrorResponse("ember", deferredAssets);
34314
+ if (buildFailure)
34315
+ return buildFailure;
34249
34316
  const pagePath = deferredAssets && input.pagePath === "" ? deferredAssets.lookup(deferredAssets.name) : input.pagePath;
34250
34317
  if (pagePath === "") {
34251
34318
  throw new Error(`Asset "${deferredAssets?.name || "Page"}" not found in manifest.`);
@@ -34811,6 +34878,8 @@ var moduleServerPromise, getModuleServer = () => moduleServerPromise, clearDevSs
34811
34878
  } catch {}
34812
34879
  }
34813
34880
  if (!hasAngularDependent) {
34881
+ if (!changeNeedsRestart(resolvePath4(filePath)))
34882
+ return;
34814
34883
  console.log(`[abs:restart] ${resolvePath4(filePath)}`);
34815
34884
  return;
34816
34885
  }
@@ -37113,6 +37182,7 @@ var moduleServerPromise, getModuleServer = () => moduleServerPromise, clearDevSs
37113
37182
  }
37114
37183
  };
37115
37184
  var init_rebuildTrigger = __esm(() => {
37185
+ init_restartScope();
37116
37186
  init_generatedDir();
37117
37187
  init_build();
37118
37188
  init_lazyPages();
@@ -38191,5 +38261,5 @@ export {
38191
38261
  devBuild
38192
38262
  };
38193
38263
 
38194
- //# debugId=E68F1522FB2CF95F64756E2164756E21
38264
+ //# debugId=17A94D8A59BFB50064756E2164756E21
38195
38265
  //# sourceMappingURL=build.js.map