@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.
@@ -37384,6 +37384,82 @@ var getCurrentRouteRegistrationCallsite = () => getRouteCallsiteStorage()?.getSt
37384
37384
  // src/core/requestContext.ts
37385
37385
  import { AsyncLocalStorage } from "async_hooks";
37386
37386
  import { Elysia as Elysia2 } from "elysia";
37387
+
37388
+ // src/utils/ssrErrorPage.ts
37389
+ var errorPageHtml = ({
37390
+ framework,
37391
+ hint,
37392
+ kind,
37393
+ message,
37394
+ script = ""
37395
+ }) => {
37396
+ const frameworkColors = {
37397
+ angular: "#dd0031",
37398
+ html: "#e34c26",
37399
+ htmx: "#1a365d",
37400
+ react: "#61dafb",
37401
+ svelte: "#ff3e00",
37402
+ vue: "#42b883"
37403
+ };
37404
+ const accent = frameworkColors[framework] ?? "#94a3b8";
37405
+ const label = framework.charAt(0).toUpperCase() + framework.slice(1);
37406
+ return `<!DOCTYPE html>
37407
+ <html>
37408
+ <head>
37409
+ <meta charset="utf-8">
37410
+ <meta name="viewport" content="width=device-width, initial-scale=1">
37411
+ <title>SSR Error - AbsoluteJS</title>
37412
+ <style>
37413
+ *{margin:0;padding:0;box-sizing:border-box}
37414
+ 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}
37415
+ .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}
37416
+ .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)}
37417
+ .brand{font-weight:700;font-size:20px;color:#fff;letter-spacing:-0.02em}
37418
+ .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)}
37419
+ .kind{color:#94a3b8;font-size:13px;font-weight:500}
37420
+ .content{padding:24px}
37421
+ .label{font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:0.08em;color:#94a3b8;margin-bottom:8px}
37422
+ .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}
37423
+ .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}
37424
+ </style>
37425
+ </head>
37426
+ <body>
37427
+ <div class="card">
37428
+ <div class="header">
37429
+ <div style="display:flex;align-items:center;gap:12px">
37430
+ <span class="brand">AbsoluteJS</span>
37431
+ <span class="badge">${label}</span>
37432
+ </div>
37433
+ <span class="kind">${kind}</span>
37434
+ </div>
37435
+ <div class="content">
37436
+ <div class="label">What went wrong</div>
37437
+ <pre class="message">${message.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;")}</pre>
37438
+ <div class="hint">${hint}</div>
37439
+ </div>
37440
+ </div>
37441
+ ${script}
37442
+ </body>
37443
+ </html>`;
37444
+ };
37445
+ var 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>`;
37446
+ var buildErrorPage = (framework, pageName, error) => errorPageHtml({
37447
+ framework,
37448
+ hint: "Fix the file and save. This page reloads by itself when the build succeeds.",
37449
+ kind: "Build Error",
37450
+ message: `${pageName || "This page"} could not be built.
37451
+
37452
+ ${error ?? "The dev-server terminal has the build output."}`,
37453
+ script: RELOAD_ON_REBUILD
37454
+ });
37455
+ var ssrErrorPage = (framework, error) => errorPageHtml({
37456
+ framework,
37457
+ hint: "A component threw during server-side rendering. Check the terminal for the full stack trace.",
37458
+ kind: "Server Render Error",
37459
+ message: error instanceof Error ? error.message : String(error)
37460
+ });
37461
+
37462
+ // src/core/requestContext.ts
37387
37463
  var REQUEST_STORAGE_KEY = Symbol.for("absolutejs.requestAsyncLocalStorage");
37388
37464
  var PAGE_WARMER_KEY = Symbol.for("absolutejs.devPageWarmer");
37389
37465
  var isAbsoluteRequestStorage = (value) => typeof value === "object" && value !== null && ("getStore" in value) && typeof value.getStore === "function" && ("run" in value) && typeof value.run === "function";
@@ -37407,6 +37483,17 @@ var absoluteRequestContext = new Elysia2({
37407
37483
  var getCurrentAbsoluteRequest = () => getRequestStorage()?.getStore()?.request;
37408
37484
  var CSS_KEY_RE = /(?:CSS|Css)$/;
37409
37485
  var 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";
37486
+ var devBuildErrorResponse = (framework, assets) => {
37487
+ if (!assets?.failed)
37488
+ return null;
37489
+ return new Response(buildErrorPage(framework, assets.name, assets.error), {
37490
+ headers: {
37491
+ "cache-control": "no-store",
37492
+ "content-type": "text/html; charset=utf-8"
37493
+ },
37494
+ status: 500
37495
+ });
37496
+ };
37410
37497
  var getDevPageWarmer = () => {
37411
37498
  const value = Reflect.get(globalThis, PAGE_WARMER_KEY);
37412
37499
  return isDevPageWarmer(value) ? value : undefined;
@@ -37433,6 +37520,7 @@ var resolveDeferredPageAssets = async () => {
37433
37520
  const cssHrefs = () => cssKeys.map(lookup).filter((href) => href.length > 0 && href.startsWith("/"));
37434
37521
  const assets = {
37435
37522
  cssHrefs,
37523
+ error: failed ? warmer.lastError?.() : undefined,
37436
37524
  failed,
37437
37525
  lookup,
37438
37526
  name: described.name
@@ -38791,58 +38879,6 @@ var captureStreamingSlotWarningCallsite = () => {
38791
38879
  };
38792
38880
  var runWithStreamingSlotWarningScope = (task, metadata) => ensureWarningStorage().run({ handlerCallsite: metadata?.handlerCallsite, hasWarned: false }, task);
38793
38881
 
38794
- // src/utils/ssrErrorPage.ts
38795
- var ssrErrorPage = (framework, error) => {
38796
- const frameworkColors2 = {
38797
- angular: "#dd0031",
38798
- html: "#e34c26",
38799
- htmx: "#1a365d",
38800
- react: "#61dafb",
38801
- svelte: "#ff3e00",
38802
- vue: "#42b883"
38803
- };
38804
- const accent = frameworkColors2[framework] ?? "#94a3b8";
38805
- const label = framework.charAt(0).toUpperCase() + framework.slice(1);
38806
- const message = error instanceof Error ? error.message : String(error);
38807
- return `<!DOCTYPE html>
38808
- <html>
38809
- <head>
38810
- <meta charset="utf-8">
38811
- <meta name="viewport" content="width=device-width, initial-scale=1">
38812
- <title>SSR Error - AbsoluteJS</title>
38813
- <style>
38814
- *{margin:0;padding:0;box-sizing:border-box}
38815
- 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}
38816
- .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}
38817
- .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)}
38818
- .brand{font-weight:700;font-size:20px;color:#fff;letter-spacing:-0.02em}
38819
- .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)}
38820
- .kind{color:#94a3b8;font-size:13px;font-weight:500}
38821
- .content{padding:24px}
38822
- .label{font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:0.08em;color:#94a3b8;margin-bottom:8px}
38823
- .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}
38824
- .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}
38825
- </style>
38826
- </head>
38827
- <body>
38828
- <div class="card">
38829
- <div class="header">
38830
- <div style="display:flex;align-items:center;gap:12px">
38831
- <span class="brand">AbsoluteJS</span>
38832
- <span class="badge">${label}</span>
38833
- </div>
38834
- <span class="kind">Server Render Error</span>
38835
- </div>
38836
- <div class="content">
38837
- <div class="label">What went wrong</div>
38838
- <pre class="message">${message.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;")}</pre>
38839
- <div class="hint">A component threw during server-side rendering. Check the terminal for the full stack trace.</div>
38840
- </div>
38841
- </div>
38842
- </body>
38843
- </html>`;
38844
- };
38845
-
38846
38882
  // src/utils/stringModifiers.ts
38847
38883
  var normalizeSlug = (str) => str.trim().replace(/\s+/g, "-").replace(/[^A-Za-z0-9\-_]+/g, "").replace(/[-_]{2,}/g, "-");
38848
38884
  var toPascal = (str) => {
@@ -39240,6 +39276,9 @@ var buildRefreshSetup = () => {
39240
39276
  var handleReactPageRequest = async (input) => {
39241
39277
  const { Page } = input;
39242
39278
  const deferredAssets = input.index === "" ? await resolveDeferredPageAssets() : null;
39279
+ const buildFailure = devBuildErrorResponse("react", deferredAssets);
39280
+ if (buildFailure)
39281
+ return buildFailure;
39243
39282
  const resolvedIndex = deferredAssets && input.index === "" ? deferredAssets.lookup(`${deferredAssets.name}Index`) : input.index;
39244
39283
  const options = input;
39245
39284
  const userProps = input.props;
package/dist/index.js CHANGED
@@ -5944,7 +5944,96 @@ var init_compileTailwind = __esm(() => {
5944
5944
  // src/utils/runtimeMode.ts
5945
5945
  var ENV_VAR = "NODE_ENV", isDevelopmentRuntime = () => process.env[ENV_VAR] === "development", isProductionRuntime = () => process.env[ENV_VAR] === "production";
5946
5946
 
5947
+ // src/utils/ssrErrorPage.ts
5948
+ var exports_ssrErrorPage = {};
5949
+ __export(exports_ssrErrorPage, {
5950
+ buildErrorPage: () => buildErrorPage,
5951
+ ssrErrorPage: () => ssrErrorPage
5952
+ });
5953
+ var errorPageHtml = ({
5954
+ framework,
5955
+ hint,
5956
+ kind,
5957
+ message,
5958
+ script = ""
5959
+ }) => {
5960
+ const frameworkColors = {
5961
+ angular: "#dd0031",
5962
+ html: "#e34c26",
5963
+ htmx: "#1a365d",
5964
+ react: "#61dafb",
5965
+ svelte: "#ff3e00",
5966
+ vue: "#42b883"
5967
+ };
5968
+ const accent = frameworkColors[framework] ?? "#94a3b8";
5969
+ const label = framework.charAt(0).toUpperCase() + framework.slice(1);
5970
+ return `<!DOCTYPE html>
5971
+ <html>
5972
+ <head>
5973
+ <meta charset="utf-8">
5974
+ <meta name="viewport" content="width=device-width, initial-scale=1">
5975
+ <title>SSR Error - AbsoluteJS</title>
5976
+ <style>
5977
+ *{margin:0;padding:0;box-sizing:border-box}
5978
+ 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}
5979
+ .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}
5980
+ .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)}
5981
+ .brand{font-weight:700;font-size:20px;color:#fff;letter-spacing:-0.02em}
5982
+ .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)}
5983
+ .kind{color:#94a3b8;font-size:13px;font-weight:500}
5984
+ .content{padding:24px}
5985
+ .label{font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:0.08em;color:#94a3b8;margin-bottom:8px}
5986
+ .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}
5987
+ .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}
5988
+ </style>
5989
+ </head>
5990
+ <body>
5991
+ <div class="card">
5992
+ <div class="header">
5993
+ <div style="display:flex;align-items:center;gap:12px">
5994
+ <span class="brand">AbsoluteJS</span>
5995
+ <span class="badge">${label}</span>
5996
+ </div>
5997
+ <span class="kind">${kind}</span>
5998
+ </div>
5999
+ <div class="content">
6000
+ <div class="label">What went wrong</div>
6001
+ <pre class="message">${message.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;")}</pre>
6002
+ <div class="hint">${hint}</div>
6003
+ </div>
6004
+ </div>
6005
+ ${script}
6006
+ </body>
6007
+ </html>`;
6008
+ }, 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({
6009
+ framework,
6010
+ hint: "Fix the file and save. This page reloads by itself when the build succeeds.",
6011
+ kind: "Build Error",
6012
+ message: `${pageName || "This page"} could not be built.
6013
+
6014
+ ${error ?? "The dev-server terminal has the build output."}`,
6015
+ script: RELOAD_ON_REBUILD
6016
+ }), ssrErrorPage = (framework, error) => errorPageHtml({
6017
+ framework,
6018
+ hint: "A component threw during server-side rendering. Check the terminal for the full stack trace.",
6019
+ kind: "Server Render Error",
6020
+ message: error instanceof Error ? error.message : String(error)
6021
+ });
6022
+
5947
6023
  // src/core/requestContext.ts
6024
+ var exports_requestContext = {};
6025
+ __export(exports_requestContext, {
6026
+ absoluteRequestContext: () => absoluteRequestContext,
6027
+ devBuildErrorResponse: () => devBuildErrorResponse,
6028
+ getCurrentAbsoluteRequest: () => getCurrentAbsoluteRequest,
6029
+ getDevPageWarmer: () => getDevPageWarmer,
6030
+ getMissingAssets: () => getMissingAssets,
6031
+ recordMissingAsset: () => recordMissingAsset,
6032
+ resolveDeferredPageAssets: () => resolveDeferredPageAssets,
6033
+ runWithAbsoluteRequest: () => runWithAbsoluteRequest,
6034
+ setDevPageWarmer: () => setDevPageWarmer,
6035
+ withDeferredStylesheets: () => withDeferredStylesheets
6036
+ });
5948
6037
  import { AsyncLocalStorage } from "async_hooks";
5949
6038
  import { Elysia } from "elysia";
5950
6039
  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 = () => {
@@ -5957,7 +6046,17 @@ var REQUEST_STORAGE_KEY, PAGE_WARMER_KEY, isAbsoluteRequestStorage = (value) =>
5957
6046
  const storage = new AsyncLocalStorage;
5958
6047
  Reflect.set(globalThis, REQUEST_STORAGE_KEY, storage);
5959
6048
  return storage;
5960
- }, 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 = () => {
6049
+ }, 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) => {
6050
+ if (!assets?.failed)
6051
+ return null;
6052
+ return new Response(buildErrorPage(framework, assets.name, assets.error), {
6053
+ headers: {
6054
+ "cache-control": "no-store",
6055
+ "content-type": "text/html; charset=utf-8"
6056
+ },
6057
+ status: 500
6058
+ });
6059
+ }, getDevPageWarmer = () => {
5961
6060
  const value = Reflect.get(globalThis, PAGE_WARMER_KEY);
5962
6061
  return isDevPageWarmer(value) ? value : undefined;
5963
6062
  }, getMissingAssets = () => {
@@ -5987,6 +6086,7 @@ var REQUEST_STORAGE_KEY, PAGE_WARMER_KEY, isAbsoluteRequestStorage = (value) =>
5987
6086
  const cssHrefs = () => cssKeys.map(lookup).filter((href) => href.length > 0 && href.startsWith("/"));
5988
6087
  const assets = {
5989
6088
  cssHrefs,
6089
+ error: failed ? warmer.lastError?.() : undefined,
5990
6090
  failed,
5991
6091
  lookup,
5992
6092
  name: described.name
@@ -30110,6 +30210,26 @@ var init_assetStore = __esm(() => {
30110
30210
  HASHED_FILE_RE = /\.[a-z0-9]{8}\.(js|css|mjs)$/;
30111
30211
  });
30112
30212
 
30213
+ // src/dev/restartScope.ts
30214
+ import { realpathSync as realpathSync3 } from "fs";
30215
+ var MODULE_FILE, DOCUMENT_FILE, realPath = (path2) => {
30216
+ try {
30217
+ return realpathSync3(path2);
30218
+ } catch {
30219
+ return path2;
30220
+ }
30221
+ }, isLoadedByThisProcess = (path2) => (path2 in __require.cache) || (realPath(path2) in __require.cache), changeNeedsRestart = (path2, isLoaded = isLoadedByThisProcess) => {
30222
+ if (DOCUMENT_FILE.test(path2) || isTestSourcePath(path2))
30223
+ return false;
30224
+ if (MODULE_FILE.test(path2))
30225
+ return isLoaded(path2);
30226
+ return true;
30227
+ };
30228
+ var init_restartScope = __esm(() => {
30229
+ MODULE_FILE = /\.(?:[cm]?[jt]sx?|mts|cts)$/;
30230
+ DOCUMENT_FILE = /\.(?:md|mdx|markdown|txt|rst|adoc|log|csv)$/i;
30231
+ });
30232
+
30113
30233
  // src/dev/fileHashTracker.ts
30114
30234
  import { readFileSync as readFileSync36 } from "fs";
30115
30235
  var computeFileHash = (filePath) => {
@@ -30918,7 +31038,7 @@ __export(exports_moduleServer, {
30918
31038
  warmPage: () => warmPage,
30919
31039
  warnIfReactFastRefreshUnsupported: () => warnIfReactFastRefreshUnsupported
30920
31040
  });
30921
- import { existsSync as existsSync43, readFileSync as readFileSync38, realpathSync as realpathSync3, statSync as statSync8 } from "fs";
31041
+ import { existsSync as existsSync43, readFileSync as readFileSync38, realpathSync as realpathSync4, statSync as statSync8 } from "fs";
30922
31042
  import { basename as basename19, dirname as dirname33, extname as extname15, join as join56, resolve as resolve48, relative as relative21 } from "path";
30923
31043
  var SRC_PREFIX = "/@src/", BROWSER_DEFINE, jsTranspiler2, legacyDecoratorTsconfig, tsTranspiler2, tsxTranspiler, TRANSPILABLE, ALL_EXPORTS_RE, STRING_CONTENTS_RE, preserveTypeExports = (originalSource, transpiled, valueExports) => {
30924
31044
  const codeOnly = originalSource.replace(STRING_CONTENTS_RE, '""');
@@ -31379,7 +31499,7 @@ ${code2}`;
31379
31499
  const compiledScript = hasScript ? vueCompiler.compileScript(descriptor, {
31380
31500
  fs: {
31381
31501
  fileExists: isFile,
31382
- realpath: realpathSync3,
31502
+ realpath: realpathSync4,
31383
31503
  readFile: (file6) => isFile(file6) ? readFileSync38(file6, "utf-8") : undefined
31384
31504
  },
31385
31505
  id: componentId,
@@ -31767,6 +31887,7 @@ export default {};
31767
31887
  name: entry.name
31768
31888
  };
31769
31889
  },
31890
+ lastError: () => getDevResult()?.hmrState.lazyPages?.lastError,
31770
31891
  lookup: (key) => getDevResult()?.manifest[key],
31771
31892
  warm: (key) => warmPage(key)
31772
31893
  };
@@ -32049,62 +32170,6 @@ var init_routeAssets = __esm(() => {
32049
32170
  ENTITY_RE = /&(?:amp|lt|gt|quot|#0?39);/g;
32050
32171
  });
32051
32172
 
32052
- // src/utils/ssrErrorPage.ts
32053
- var exports_ssrErrorPage = {};
32054
- __export(exports_ssrErrorPage, {
32055
- ssrErrorPage: () => ssrErrorPage
32056
- });
32057
- var ssrErrorPage = (framework, error) => {
32058
- const frameworkColors2 = {
32059
- angular: "#dd0031",
32060
- html: "#e34c26",
32061
- htmx: "#1a365d",
32062
- react: "#61dafb",
32063
- svelte: "#ff3e00",
32064
- vue: "#42b883"
32065
- };
32066
- const accent = frameworkColors2[framework] ?? "#94a3b8";
32067
- const label = framework.charAt(0).toUpperCase() + framework.slice(1);
32068
- const message = error instanceof Error ? error.message : String(error);
32069
- return `<!DOCTYPE html>
32070
- <html>
32071
- <head>
32072
- <meta charset="utf-8">
32073
- <meta name="viewport" content="width=device-width, initial-scale=1">
32074
- <title>SSR Error - AbsoluteJS</title>
32075
- <style>
32076
- *{margin:0;padding:0;box-sizing:border-box}
32077
- 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}
32078
- .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}
32079
- .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)}
32080
- .brand{font-weight:700;font-size:20px;color:#fff;letter-spacing:-0.02em}
32081
- .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)}
32082
- .kind{color:#94a3b8;font-size:13px;font-weight:500}
32083
- .content{padding:24px}
32084
- .label{font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:0.08em;color:#94a3b8;margin-bottom:8px}
32085
- .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}
32086
- .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}
32087
- </style>
32088
- </head>
32089
- <body>
32090
- <div class="card">
32091
- <div class="header">
32092
- <div style="display:flex;align-items:center;gap:12px">
32093
- <span class="brand">AbsoluteJS</span>
32094
- <span class="badge">${label}</span>
32095
- </div>
32096
- <span class="kind">Server Render Error</span>
32097
- </div>
32098
- <div class="content">
32099
- <div class="label">What went wrong</div>
32100
- <pre class="message">${message.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;")}</pre>
32101
- <div class="hint">A component threw during server-side rendering. Check the terminal for the full stack trace.</div>
32102
- </div>
32103
- </div>
32104
- </body>
32105
- </html>`;
32106
- };
32107
-
32108
32173
  // src/ember/pageHandler.ts
32109
32174
  import { pathToFileURL as pathToFileURL4 } from "url";
32110
32175
  var resolveRequestPathname = (request) => {
@@ -32147,6 +32212,9 @@ var resolveRequestPathname = (request) => {
32147
32212
  return cachedEmberHmrShim;
32148
32213
  }, handleEmberPageRequest = async (input) => {
32149
32214
  const deferredAssets = input.pagePath === "" ? await resolveDeferredPageAssets() : null;
32215
+ const buildFailure = devBuildErrorResponse("ember", deferredAssets);
32216
+ if (buildFailure)
32217
+ return buildFailure;
32150
32218
  const pagePath = deferredAssets && input.pagePath === "" ? deferredAssets.lookup(deferredAssets.name) : input.pagePath;
32151
32219
  if (pagePath === "") {
32152
32220
  throw new Error(`Asset "${deferredAssets?.name || "Page"}" not found in manifest.`);
@@ -32712,6 +32780,8 @@ var moduleServerPromise, getModuleServer = () => moduleServerPromise, clearDevSs
32712
32780
  } catch {}
32713
32781
  }
32714
32782
  if (!hasAngularDependent) {
32783
+ if (!changeNeedsRestart(resolvePath(filePath)))
32784
+ return;
32715
32785
  console.log(`[abs:restart] ${resolvePath(filePath)}`);
32716
32786
  return;
32717
32787
  }
@@ -35014,6 +35084,7 @@ var moduleServerPromise, getModuleServer = () => moduleServerPromise, clearDevSs
35014
35084
  }
35015
35085
  };
35016
35086
  var init_rebuildTrigger = __esm(() => {
35087
+ init_restartScope();
35017
35088
  init_generatedDir();
35018
35089
  init_build();
35019
35090
  init_lazyPages();
@@ -37980,10 +38051,9 @@ var MS_PER_SECOND2 = 1000, DEFAULT_PORT2 = 3000, MAX_STATIC_ROUTE_COUNT, STATIC_
37980
38051
  const missingAsset = assetMatch[1] ?? "";
37981
38052
  const framework = /^(?:[A-Z][a-z]*)*?(Angular|Vue|Svelte|React|Html|Htmx|Ember)/.exec(missingAsset)?.[1]?.toLowerCase() ?? "absolutejs";
37982
38053
  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.`);
37983
- const { ssrErrorPage: ssrErrorPage2 } = await Promise.resolve().then(() => exports_ssrErrorPage);
37984
- const html = ssrErrorPage2(framework, new Error(`Build artifact "${missingAsset}" missing from manifest.
37985
-
37986
- 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.`));
38054
+ const { buildErrorPage: buildErrorPage2 } = await Promise.resolve().then(() => exports_ssrErrorPage);
38055
+ const { getDevPageWarmer: getDevPageWarmer2 } = await Promise.resolve().then(() => (init_requestContext(), exports_requestContext));
38056
+ const html = buildErrorPage2(framework, missingAsset, getDevPageWarmer2()?.lastError?.());
37987
38057
  return new Response(html, {
37988
38058
  headers: { "content-type": "text/html; charset=utf-8" },
37989
38059
  status: 500
@@ -45746,6 +45816,7 @@ export {
45746
45816
  defineIslandRegistry,
45747
45817
  defineRenderErrorPage,
45748
45818
  defineRenderNotFoundPage,
45819
+ devBuildErrorResponse,
45749
45820
  devtoolsJson,
45750
45821
  disposeTailwindCompiler,
45751
45822
  enhanceHtmlResponseWithStreamingSlots,
@@ -45813,5 +45884,5 @@ export {
45813
45884
  wrapPageHandlerWithStreamingSlots
45814
45885
  };
45815
45886
 
45816
- //# debugId=B86C5DC169B488EE64756E2164756E21
45887
+ //# debugId=9189760E6EEA8CAD64756E2164756E21
45817
45888
  //# sourceMappingURL=index.js.map