@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
@@ -835,7 +835,96 @@ var init_devRouteRegistrationCallsite = __esm(() => {
835
835
  pageHandlerWrappers = new WeakMap;
836
836
  });
837
837
 
838
+ // src/utils/ssrErrorPage.ts
839
+ var exports_ssrErrorPage = {};
840
+ __export(exports_ssrErrorPage, {
841
+ buildErrorPage: () => buildErrorPage,
842
+ ssrErrorPage: () => ssrErrorPage
843
+ });
844
+ var errorPageHtml = ({
845
+ framework,
846
+ hint,
847
+ kind,
848
+ message,
849
+ script = ""
850
+ }) => {
851
+ const frameworkColors = {
852
+ angular: "#dd0031",
853
+ html: "#e34c26",
854
+ htmx: "#1a365d",
855
+ react: "#61dafb",
856
+ svelte: "#ff3e00",
857
+ vue: "#42b883"
858
+ };
859
+ const accent = frameworkColors[framework] ?? "#94a3b8";
860
+ const label = framework.charAt(0).toUpperCase() + framework.slice(1);
861
+ return `<!DOCTYPE html>
862
+ <html>
863
+ <head>
864
+ <meta charset="utf-8">
865
+ <meta name="viewport" content="width=device-width, initial-scale=1">
866
+ <title>SSR Error - AbsoluteJS</title>
867
+ <style>
868
+ *{margin:0;padding:0;box-sizing:border-box}
869
+ 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}
870
+ .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}
871
+ .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)}
872
+ .brand{font-weight:700;font-size:20px;color:#fff;letter-spacing:-0.02em}
873
+ .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)}
874
+ .kind{color:#94a3b8;font-size:13px;font-weight:500}
875
+ .content{padding:24px}
876
+ .label{font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:0.08em;color:#94a3b8;margin-bottom:8px}
877
+ .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}
878
+ .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}
879
+ </style>
880
+ </head>
881
+ <body>
882
+ <div class="card">
883
+ <div class="header">
884
+ <div style="display:flex;align-items:center;gap:12px">
885
+ <span class="brand">AbsoluteJS</span>
886
+ <span class="badge">${label}</span>
887
+ </div>
888
+ <span class="kind">${kind}</span>
889
+ </div>
890
+ <div class="content">
891
+ <div class="label">What went wrong</div>
892
+ <pre class="message">${message.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;")}</pre>
893
+ <div class="hint">${hint}</div>
894
+ </div>
895
+ </div>
896
+ ${script}
897
+ </body>
898
+ </html>`;
899
+ }, 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({
900
+ framework,
901
+ hint: "Fix the file and save. This page reloads by itself when the build succeeds.",
902
+ kind: "Build Error",
903
+ message: `${pageName || "This page"} could not be built.
904
+
905
+ ${error ?? "The dev-server terminal has the build output."}`,
906
+ script: RELOAD_ON_REBUILD
907
+ }), ssrErrorPage = (framework, error) => errorPageHtml({
908
+ framework,
909
+ hint: "A component threw during server-side rendering. Check the terminal for the full stack trace.",
910
+ kind: "Server Render Error",
911
+ message: error instanceof Error ? error.message : String(error)
912
+ });
913
+
838
914
  // src/core/requestContext.ts
915
+ var exports_requestContext = {};
916
+ __export(exports_requestContext, {
917
+ absoluteRequestContext: () => absoluteRequestContext,
918
+ devBuildErrorResponse: () => devBuildErrorResponse,
919
+ getCurrentAbsoluteRequest: () => getCurrentAbsoluteRequest,
920
+ getDevPageWarmer: () => getDevPageWarmer,
921
+ getMissingAssets: () => getMissingAssets,
922
+ recordMissingAsset: () => recordMissingAsset,
923
+ resolveDeferredPageAssets: () => resolveDeferredPageAssets,
924
+ runWithAbsoluteRequest: () => runWithAbsoluteRequest,
925
+ setDevPageWarmer: () => setDevPageWarmer,
926
+ withDeferredStylesheets: () => withDeferredStylesheets
927
+ });
839
928
  import { AsyncLocalStorage as AsyncLocalStorage2 } from "async_hooks";
840
929
  import { Elysia as Elysia2 } from "elysia";
841
930
  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 = () => {
@@ -848,7 +937,17 @@ var REQUEST_STORAGE_KEY, PAGE_WARMER_KEY, isAbsoluteRequestStorage = (value) =>
848
937
  const storage = new AsyncLocalStorage2;
849
938
  Reflect.set(globalThis, REQUEST_STORAGE_KEY, storage);
850
939
  return storage;
851
- }, 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 = () => {
940
+ }, 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) => {
941
+ if (!assets?.failed)
942
+ return null;
943
+ return new Response(buildErrorPage(framework, assets.name, assets.error), {
944
+ headers: {
945
+ "cache-control": "no-store",
946
+ "content-type": "text/html; charset=utf-8"
947
+ },
948
+ status: 500
949
+ });
950
+ }, getDevPageWarmer = () => {
852
951
  const value = Reflect.get(globalThis, PAGE_WARMER_KEY);
853
952
  return isDevPageWarmer(value) ? value : undefined;
854
953
  }, getMissingAssets = () => {
@@ -878,6 +977,7 @@ var REQUEST_STORAGE_KEY, PAGE_WARMER_KEY, isAbsoluteRequestStorage = (value) =>
878
977
  const cssHrefs = () => cssKeys.map(lookup).filter((href) => href.length > 0 && href.startsWith("/"));
879
978
  const assets = {
880
979
  cssHrefs,
980
+ error: failed ? warmer.lastError?.() : undefined,
881
981
  failed,
882
982
  lookup,
883
983
  name: described.name
@@ -2155,62 +2255,6 @@ var init_logger = __esm(() => {
2155
2255
  };
2156
2256
  });
2157
2257
 
2158
- // src/utils/ssrErrorPage.ts
2159
- var exports_ssrErrorPage = {};
2160
- __export(exports_ssrErrorPage, {
2161
- ssrErrorPage: () => ssrErrorPage
2162
- });
2163
- var ssrErrorPage = (framework, error) => {
2164
- const frameworkColors2 = {
2165
- angular: "#dd0031",
2166
- html: "#e34c26",
2167
- htmx: "#1a365d",
2168
- react: "#61dafb",
2169
- svelte: "#ff3e00",
2170
- vue: "#42b883"
2171
- };
2172
- const accent = frameworkColors2[framework] ?? "#94a3b8";
2173
- const label = framework.charAt(0).toUpperCase() + framework.slice(1);
2174
- const message = error instanceof Error ? error.message : String(error);
2175
- return `<!DOCTYPE html>
2176
- <html>
2177
- <head>
2178
- <meta charset="utf-8">
2179
- <meta name="viewport" content="width=device-width, initial-scale=1">
2180
- <title>SSR Error - AbsoluteJS</title>
2181
- <style>
2182
- *{margin:0;padding:0;box-sizing:border-box}
2183
- 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}
2184
- .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}
2185
- .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)}
2186
- .brand{font-weight:700;font-size:20px;color:#fff;letter-spacing:-0.02em}
2187
- .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)}
2188
- .kind{color:#94a3b8;font-size:13px;font-weight:500}
2189
- .content{padding:24px}
2190
- .label{font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:0.08em;color:#94a3b8;margin-bottom:8px}
2191
- .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}
2192
- .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}
2193
- </style>
2194
- </head>
2195
- <body>
2196
- <div class="card">
2197
- <div class="header">
2198
- <div style="display:flex;align-items:center;gap:12px">
2199
- <span class="brand">AbsoluteJS</span>
2200
- <span class="badge">${label}</span>
2201
- </div>
2202
- <span class="kind">Server Render Error</span>
2203
- </div>
2204
- <div class="content">
2205
- <div class="label">What went wrong</div>
2206
- <pre class="message">${message.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;")}</pre>
2207
- <div class="hint">A component threw during server-side rendering. Check the terminal for the full stack trace.</div>
2208
- </div>
2209
- </div>
2210
- </body>
2211
- </html>`;
2212
- };
2213
-
2214
2258
  // src/core/routeAssets.ts
2215
2259
  var LINK_TAG_RE, REL_STYLESHEET_RE, HREF_RE, TITLE_RE, ENTITIES, ENTITY_RE, decodeEntities = (value) => value.replace(ENTITY_RE, (match) => ENTITIES[match] ?? match), readHeadStylesheets = (head) => {
2216
2260
  if (!head)
@@ -2719,6 +2763,9 @@ var handleVuePageRequest = async (input) => {
2719
2763
  const request = input.request ?? getCurrentAbsoluteRequest();
2720
2764
  const clientMode = input.client ?? "auto";
2721
2765
  const deferredAssets = input.pagePath === "" || clientMode === "auto" && input.indexPath === "" ? await resolveDeferredPageAssets() : null;
2766
+ const buildFailure = devBuildErrorResponse("vue", deferredAssets);
2767
+ if (buildFailure)
2768
+ return buildFailure;
2722
2769
  const resolvedPagePath = deferredAssets && input.pagePath === "" ? deferredAssets.lookup(deferredAssets.name) : input.pagePath;
2723
2770
  const resolvedIndexPath = deferredAssets && input.indexPath === "" ? deferredAssets.lookup(`${deferredAssets.name}Index`) : input.indexPath;
2724
2771
  const resolvedOptions = input;
@@ -2920,5 +2967,5 @@ export {
2920
2967
  handleVuePageRequest
2921
2968
  };
2922
2969
 
2923
- //# debugId=502EF7FF1C84C6D264756E2164756E21
2970
+ //# debugId=5476B8D1701EF25A64756E2164756E21
2924
2971
  //# sourceMappingURL=server.js.map