@absolutejs/absolute 0.20.0-beta.126 → 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.
Files changed (44) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/README.md +19 -0
  3. package/changelog.json +36 -0
  4. package/dist/angular/components/core/streamingSlotRegistrar.js +1 -1
  5. package/dist/angular/components/core/streamingSlotRegistry.js +2 -2
  6. package/dist/angular/index.js +88 -35
  7. package/dist/angular/index.js.map +8 -7
  8. package/dist/angular/server.js +88 -35
  9. package/dist/angular/server.js.map +8 -7
  10. package/dist/build/buildWorker.js +9 -3
  11. package/dist/build.js +342 -263
  12. package/dist/build.js.map +14 -12
  13. package/dist/cli/{compile-smcnjyhb.js → compile-0epdbdcx.js} +1 -1
  14. package/dist/cli/config/server.js +91 -52
  15. package/dist/cli/{index-9q8yn5ax.js → index-54q7pxcx.js} +1 -0
  16. package/dist/cli/{index-fx42yxhy.js → index-79ppyst7.js} +1 -1
  17. package/dist/cli/index.js +4 -4
  18. package/dist/cli/{mobile-50c5tahh.js → mobile-49hyrgrj.js} +1 -1
  19. package/dist/cli/{prerender-vvrj9vjg.js → prerender-yex2zwj3.js} +1 -1
  20. package/dist/cli/{start-pdacfgcc.js → start-m0p0qbep.js} +1 -1
  21. package/dist/index.js +362 -279
  22. package/dist/index.js.map +17 -14
  23. package/dist/islands/index.js +10 -4
  24. package/dist/islands/index.js.map +5 -4
  25. package/dist/mobile/remoteMacAgentEntry.js +1 -1
  26. package/dist/react/index.js +114 -61
  27. package/dist/react/index.js.map +8 -7
  28. package/dist/react/server.js +105 -58
  29. package/dist/react/server.js.map +6 -6
  30. package/dist/src/core/requestContext.d.ts +5 -10
  31. package/dist/src/dev/restartScope.d.ts +1 -0
  32. package/dist/src/utils/index.d.ts +1 -0
  33. package/dist/src/utils/isFile.d.ts +4 -0
  34. package/dist/src/utils/isPrerendering.d.ts +5 -0
  35. package/dist/src/utils/ssrErrorPage.d.ts +3 -0
  36. package/dist/svelte/index.js +114 -61
  37. package/dist/svelte/index.js.map +8 -7
  38. package/dist/svelte/server.js +105 -58
  39. package/dist/svelte/server.js.map +6 -6
  40. package/dist/vue/index.js +114 -61
  41. package/dist/vue/index.js.map +8 -7
  42. package/dist/vue/server.js +105 -58
  43. package/dist/vue/server.js.map +6 -6
  44. package/package.json +2 -2
@@ -4,7 +4,7 @@ import {
4
4
  } from "./index-v1k46q3x.js";
5
5
  import {
6
6
  prerenderWithServer
7
- } from "./index-9q8yn5ax.js";
7
+ } from "./index-54q7pxcx.js";
8
8
  import {
9
9
  maskLiterals
10
10
  } from "./index-me8nczrw.js";
@@ -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;
@@ -217,6 +217,7 @@ var prerenderWithServer = async (serverBundlePath, port, outDir, staticConfig, e
217
217
  ...env,
218
218
  ABSOLUTE_HOST: "localhost",
219
219
  ABSOLUTE_PORT: String(port),
220
+ ABSOLUTE_PRERENDER: "1",
220
221
  HOST: "localhost",
221
222
  PORT: String(port)
222
223
  },
@@ -127,7 +127,7 @@ var jsxDevRuntimeCompatPath = resolveJsxDevRuntimeCompatPath();
127
127
  var prerenderStaticPages = async (outputPath, prerenderPort, resolvedOutdir, staticConfig, absoluteVersion, configPath) => {
128
128
  const prerenderStart = performance.now();
129
129
  process.stdout.write(cliTag("\x1B[36m", "Pre-rendering static pages"));
130
- const { prerenderWithServer } = await import("./prerender-vvrj9vjg.js");
130
+ const { prerenderWithServer } = await import("./prerender-yex2zwj3.js");
131
131
  try {
132
132
  killStaleProcesses(prerenderPort);
133
133
  const result = await prerenderWithServer(outputPath, prerenderPort, resolvedOutdir, staticConfig, {
package/dist/cli/index.js CHANGED
@@ -74,7 +74,7 @@ if (command === "dev") {
74
74
  const configPath = parseNamedArg("--config");
75
75
  const positionalArgs = stripNamedArgs("--outdir", "--config").filter((arg) => arg !== "--prebuilt");
76
76
  const serverEntry = positionalArgs[0] ?? DEFAULT_SERVER_ENTRY;
77
- const { start } = await import("./start-pdacfgcc.js");
77
+ const { start } = await import("./start-m0p0qbep.js");
78
78
  await start(serverEntry, outdir, configPath, {
79
79
  prebuilt: args.includes("--prebuilt")
80
80
  });
@@ -84,7 +84,7 @@ if (command === "dev") {
84
84
  const configPath = parseNamedArg("--config");
85
85
  const positionalArgs = stripNamedArgs("--outdir", "--config");
86
86
  const serverEntry = positionalArgs[0] ?? DEFAULT_SERVER_ENTRY;
87
- const { start } = await import("./start-pdacfgcc.js");
87
+ const { start } = await import("./start-m0p0qbep.js");
88
88
  await start(serverEntry, outdir, configPath, { prepareOnly: true });
89
89
  } else if (command === "build") {
90
90
  sendTelemetryEvent("cli:command", { command });
@@ -205,13 +205,13 @@ if (command === "dev") {
205
205
  const configPath = parseNamedArg("--config");
206
206
  const positionalArgs = stripNamedArgs("--outdir", "--outfile", "--config");
207
207
  const serverEntry = positionalArgs[0] ?? DEFAULT_SERVER_ENTRY;
208
- const { compile } = await import("./compile-smcnjyhb.js");
208
+ const { compile } = await import("./compile-0epdbdcx.js");
209
209
  await compile(serverEntry, outdir, outfile, configPath);
210
210
  } else if (command === "mobile") {
211
211
  sendTelemetryEvent("cli:command", {
212
212
  command: `mobile:${workspaceCommand ?? "unknown"}`
213
213
  });
214
- const { runMobile } = await import("./mobile-50c5tahh.js");
214
+ const { runMobile } = await import("./mobile-49hyrgrj.js");
215
215
  try {
216
216
  await runMobile(args);
217
217
  } catch (error) {
@@ -7,7 +7,7 @@ import {
7
7
  } from "./index-9r7n9dqp.js";
8
8
  import {
9
9
  start
10
- } from "./index-fx42yxhy.js";
10
+ } from "./index-79ppyst7.js";
11
11
  import {
12
12
  ABSOLUTE_MOBILE_CLIENT_MANIFEST_FORMAT,
13
13
  ABSOLUTE_MOBILE_PAGE_PROTOCOL_VERSION,
@@ -6,7 +6,7 @@ import {
6
6
  readTimestamp,
7
7
  rerenderRoute,
8
8
  routeToFilename
9
- } from "./index-9q8yn5ax.js";
9
+ } from "./index-54q7pxcx.js";
10
10
  import"./index-mywsk201.js";
11
11
  export {
12
12
  PRERENDER_BYPASS_HEADER,
@@ -1,7 +1,7 @@
1
1
  // @bun
2
2
  import {
3
3
  start
4
- } from "./index-fx42yxhy.js";
4
+ } from "./index-79ppyst7.js";
5
5
  import"./index-q4gpm386.js";
6
6
  import"./index-bzs19w3r.js";
7
7
  import"./index-s2tazax7.js";