alabjs 0.1.1 → 0.2.1

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 (75) hide show
  1. package/dist/analytics/handler.d.ts +24 -0
  2. package/dist/analytics/handler.d.ts.map +1 -0
  3. package/dist/analytics/handler.js +87 -0
  4. package/dist/analytics/handler.js.map +1 -0
  5. package/dist/analytics/store.d.ts +33 -0
  6. package/dist/analytics/store.d.ts.map +1 -0
  7. package/dist/analytics/store.js +68 -0
  8. package/dist/analytics/store.js.map +1 -0
  9. package/dist/analytics/store.test.d.ts +2 -0
  10. package/dist/analytics/store.test.d.ts.map +1 -0
  11. package/dist/analytics/store.test.js +42 -0
  12. package/dist/analytics/store.test.js.map +1 -0
  13. package/dist/commands/build.d.ts.map +1 -1
  14. package/dist/commands/build.js +104 -2
  15. package/dist/commands/build.js.map +1 -1
  16. package/dist/commands/dev.d.ts.map +1 -1
  17. package/dist/commands/dev.js +6 -0
  18. package/dist/commands/dev.js.map +1 -1
  19. package/dist/components/Analytics.d.ts +48 -0
  20. package/dist/components/Analytics.d.ts.map +1 -0
  21. package/dist/components/Analytics.js +154 -0
  22. package/dist/components/Analytics.js.map +1 -0
  23. package/dist/components/Dynamic.d.ts +88 -0
  24. package/dist/components/Dynamic.d.ts.map +1 -0
  25. package/dist/components/Dynamic.js +86 -0
  26. package/dist/components/Dynamic.js.map +1 -0
  27. package/dist/components/index.d.ts +4 -0
  28. package/dist/components/index.d.ts.map +1 -1
  29. package/dist/components/index.js +2 -0
  30. package/dist/components/index.js.map +1 -1
  31. package/dist/index.d.ts +1 -1
  32. package/dist/index.d.ts.map +1 -1
  33. package/dist/index.js.map +1 -1
  34. package/dist/server/app.d.ts.map +1 -1
  35. package/dist/server/app.js +72 -8
  36. package/dist/server/app.js.map +1 -1
  37. package/dist/server/cdn.d.ts +72 -0
  38. package/dist/server/cdn.d.ts.map +1 -0
  39. package/dist/server/cdn.js +132 -0
  40. package/dist/server/cdn.js.map +1 -0
  41. package/dist/server/revalidate.d.ts.map +1 -1
  42. package/dist/server/revalidate.js +6 -1
  43. package/dist/server/revalidate.js.map +1 -1
  44. package/dist/ssr/html.d.ts +7 -0
  45. package/dist/ssr/html.d.ts.map +1 -1
  46. package/dist/ssr/html.js +2 -1
  47. package/dist/ssr/html.js.map +1 -1
  48. package/dist/ssr/ppr.d.ts +69 -0
  49. package/dist/ssr/ppr.d.ts.map +1 -0
  50. package/dist/ssr/ppr.js +132 -0
  51. package/dist/ssr/ppr.js.map +1 -0
  52. package/dist/ssr/render.d.ts +2 -0
  53. package/dist/ssr/render.d.ts.map +1 -1
  54. package/dist/ssr/render.js +2 -1
  55. package/dist/ssr/render.js.map +1 -1
  56. package/dist/types/index.d.ts +20 -1
  57. package/dist/types/index.d.ts.map +1 -1
  58. package/package.json +5 -1
  59. package/src/analytics/handler.ts +110 -0
  60. package/src/analytics/store.test.ts +45 -0
  61. package/src/analytics/store.ts +94 -0
  62. package/src/commands/build.ts +117 -2
  63. package/src/commands/dev.ts +7 -0
  64. package/src/components/Analytics.tsx +164 -0
  65. package/src/components/Dynamic.tsx +124 -0
  66. package/src/components/index.ts +4 -0
  67. package/src/index.ts +1 -0
  68. package/src/server/app.ts +82 -9
  69. package/src/server/cdn.ts +187 -0
  70. package/src/server/revalidate.ts +7 -1
  71. package/src/ssr/html.ts +9 -0
  72. package/src/ssr/ppr.ts +167 -0
  73. package/src/ssr/render.ts +4 -0
  74. package/src/types/index.ts +23 -0
  75. package/tsconfig.tsbuildinfo +1 -1
@@ -0,0 +1,154 @@
1
+ /**
2
+ * Alab Analytics — Core Web Vitals collection component.
3
+ *
4
+ * Drop `<Analytics />` into your root layout to start collecting
5
+ * LCP, CLS, INP, TTFB, and FCP from real users. Metrics are sent
6
+ * to `/_alabjs/vitals` via `navigator.sendBeacon` and aggregated
7
+ * in memory on the server.
8
+ *
9
+ * ## Usage
10
+ *
11
+ * ```tsx
12
+ * // app/layout.tsx
13
+ * import { Analytics } from "alabjs/components";
14
+ *
15
+ * export default function RootLayout({ children }: { children: React.ReactNode }) {
16
+ * return (
17
+ * <>
18
+ * {children}
19
+ * <Analytics />
20
+ * </>
21
+ * );
22
+ * }
23
+ * ```
24
+ *
25
+ * ## Viewing metrics
26
+ *
27
+ * ```sh
28
+ * curl -H "Authorization: Bearer $ALAB_ANALYTICS_SECRET" \
29
+ * http://localhost:3000/_alabjs/analytics
30
+ * ```
31
+ */
32
+ import { useEffect } from "react";
33
+ /**
34
+ * Collects Core Web Vitals (LCP, CLS, INP, TTFB, FCP) using the browser's
35
+ * `PerformanceObserver` API and sends them to the AlabJS vitals endpoint.
36
+ *
37
+ * Uses `navigator.sendBeacon` so beacons are fire-and-forget and survive
38
+ * page unloads. Implements `buffered: true` so metrics already emitted
39
+ * before the observer attached are still captured.
40
+ */
41
+ export function Analytics({ endpoint = "/_alabjs/vitals" }) {
42
+ useEffect(() => {
43
+ if (typeof window === "undefined" || typeof PerformanceObserver === "undefined")
44
+ return;
45
+ const route = window.location.pathname;
46
+ function send(name, value) {
47
+ const payload = JSON.stringify({ name, value, route });
48
+ if (navigator.sendBeacon) {
49
+ navigator.sendBeacon(endpoint, new Blob([payload], { type: "application/json" }));
50
+ }
51
+ else {
52
+ // Fallback for environments without sendBeacon (rare).
53
+ void fetch(endpoint, {
54
+ method: "POST",
55
+ body: payload,
56
+ headers: { "content-type": "application/json" },
57
+ keepalive: true,
58
+ }).catch(() => { });
59
+ }
60
+ }
61
+ const observers = [];
62
+ function observe(type, cb) {
63
+ try {
64
+ const po = new PerformanceObserver(cb);
65
+ po.observe({ type, buffered: true });
66
+ observers.push(po);
67
+ }
68
+ catch {
69
+ // Entry type not supported in this browser — skip silently.
70
+ }
71
+ }
72
+ // ── LCP — Largest Contentful Paint ─────────────────────────────────────
73
+ // We report the last entry since LCP can be updated multiple times.
74
+ let lcpValue = 0;
75
+ observe("largest-contentful-paint", (list) => {
76
+ const entries = list.getEntries();
77
+ const last = entries[entries.length - 1];
78
+ if (last)
79
+ lcpValue = last.startTime;
80
+ });
81
+ // ── CLS — Cumulative Layout Shift ───────────────────────────────────────
82
+ // Accumulate shift values across all layout-shift entries.
83
+ let clsValue = 0;
84
+ let clsSessionGap = 0;
85
+ let clsSessionValue = 0;
86
+ let clsLastTime = 0;
87
+ observe("layout-shift", (list) => {
88
+ for (const entry of list.getEntries()) {
89
+ const ls = entry;
90
+ if (ls.hadRecentInput)
91
+ continue;
92
+ const gap = ls.startTime - clsLastTime;
93
+ if (gap > 1000 || ls.startTime - clsSessionGap > 5000) {
94
+ clsSessionValue = ls.value;
95
+ clsSessionGap = ls.startTime;
96
+ }
97
+ else {
98
+ clsSessionValue += ls.value;
99
+ }
100
+ clsLastTime = ls.startTime;
101
+ if (clsSessionValue > clsValue)
102
+ clsValue = clsSessionValue;
103
+ }
104
+ });
105
+ // ── INP — Interaction to Next Paint ────────────────────────────────────
106
+ // Track the worst interaction duration (p98 heuristic: worst of all events).
107
+ let inpValue = 0;
108
+ observe("event", (list) => {
109
+ for (const entry of list.getEntries()) {
110
+ const e = entry;
111
+ if (e.duration > inpValue)
112
+ inpValue = e.duration;
113
+ }
114
+ });
115
+ // ── TTFB — Time to First Byte ───────────────────────────────────────────
116
+ // Read directly from navigation timing — available immediately after load.
117
+ const sendTtfb = () => {
118
+ const nav = performance.getEntriesByType("navigation")[0];
119
+ if (nav)
120
+ send("TTFB", nav.responseStart);
121
+ };
122
+ // ── FCP — First Contentful Paint ───────────────────────────────────────
123
+ observe("paint", (list) => {
124
+ for (const entry of list.getEntries()) {
125
+ if (entry.name === "first-contentful-paint") {
126
+ send("FCP", entry.startTime);
127
+ }
128
+ }
129
+ });
130
+ // Flush LCP, CLS, and INP on page hide (navigating away / tab close).
131
+ // This gives us the most accurate final values.
132
+ const flush = () => {
133
+ if (lcpValue > 0)
134
+ send("LCP", lcpValue);
135
+ if (clsValue > 0)
136
+ send("CLS", Math.round(clsValue * 10000) / 10000);
137
+ if (inpValue > 0)
138
+ send("INP", inpValue);
139
+ };
140
+ sendTtfb();
141
+ window.addEventListener("visibilitychange", () => {
142
+ if (document.visibilityState === "hidden")
143
+ flush();
144
+ }, { once: true });
145
+ return () => {
146
+ for (const po of observers)
147
+ po.disconnect();
148
+ };
149
+ // endpoint is intentionally captured once on mount only.
150
+ // eslint-disable-next-line react-hooks/exhaustive-deps
151
+ }, []);
152
+ return null;
153
+ }
154
+ //# sourceMappingURL=Analytics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Analytics.js","sourceRoot":"","sources":["../../src/components/Analytics.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,88 @@
1
+ /**
2
+ * Alab PPR — Partial Prerendering support.
3
+ *
4
+ * Pages that export `export const ppr = true` get their static HTML shell
5
+ * pre-rendered at build time and stored in `.alabjs/ppr-cache/`. At runtime,
6
+ * the shell is served instantly (CDN-cacheable) while `<Dynamic>` sections
7
+ * fill in per-request via React's Suspense streaming or client-side hydration.
8
+ *
9
+ * ## How it works
10
+ *
11
+ * During the **build-time static render** (pre-render pass):
12
+ * • `PPRShellProvider` sets the PPR context to `true`.
13
+ * • `<Dynamic>` sees the context and renders only its `fallback` inside a
14
+ * `data-ppr-hole` marker — children are omitted entirely.
15
+ * • The resulting HTML is the "static shell": complete page minus dynamic parts.
16
+ *
17
+ * At **runtime**:
18
+ * • `PPRShellProvider` is never rendered → context defaults to `false`.
19
+ * • `<Dynamic>` behaves as a plain `<Suspense>` boundary, streaming children
20
+ * as their async work resolves.
21
+ *
22
+ * ## Usage
23
+ *
24
+ * ```tsx
25
+ * // app/posts/[id]/page.tsx
26
+ * import { Dynamic } from "alabjs/components";
27
+ *
28
+ * export const ppr = true;
29
+ *
30
+ * export default function PostPage({ params }: { params: { id: string } }) {
31
+ * return (
32
+ * <article>
33
+ * <h1>Post {params.id}</h1>
34
+ * <Dynamic id="sidebar" fallback={<SidebarSkeleton />}>
35
+ * <PersonalisedSidebar userId={userId} />
36
+ * </Dynamic>
37
+ * </article>
38
+ * );
39
+ * }
40
+ * ```
41
+ */
42
+ import { type ReactNode } from "react";
43
+ /**
44
+ * @internal
45
+ * Wrap the root element with this during build-time PPR pre-rendering so that
46
+ * every `<Dynamic>` in the tree emits a stable `data-ppr-hole` placeholder
47
+ * instead of its children.
48
+ *
49
+ * Do **not** use this at runtime — it is an implementation detail of
50
+ * `preRenderPPRShell` in `src/ssr/ppr.ts`.
51
+ */
52
+ export declare function PPRShellProvider({ children }: {
53
+ children: ReactNode;
54
+ }): import("react/jsx-runtime").JSX.Element;
55
+ export interface DynamicProps {
56
+ /**
57
+ * Unique identifier for this dynamic section within the page.
58
+ *
59
+ * Used to correlate the placeholder emitted in the static shell with the
60
+ * live content streamed at runtime. **Must be stable across renders** —
61
+ * treat it like a React key: short, descriptive, no dynamic values.
62
+ *
63
+ * @example "sidebar", "user-nav", "related-posts"
64
+ */
65
+ id: string;
66
+ /** Per-request dynamic content. Never rendered in the pre-built static shell. */
67
+ children: ReactNode;
68
+ /**
69
+ * Shown in the pre-built static shell **and** as the React Suspense fallback
70
+ * while the dynamic content is streaming in.
71
+ *
72
+ * Keep this lightweight — it is inlined into every CDN-cached response.
73
+ */
74
+ fallback?: ReactNode;
75
+ }
76
+ /**
77
+ * Marks a subtree as **dynamic** (per-request) within a PPR page.
78
+ *
79
+ * - **Build time** (static shell pre-render): renders `fallback` inside a
80
+ * `<div data-ppr-hole="{id}">` marker. Children are not rendered.
81
+ * - **Runtime** (SSR + hydration): acts as a `<Suspense>` boundary. Children
82
+ * stream in as their async work resolves; `fallback` is shown meanwhile.
83
+ *
84
+ * The `display: contents` style on the wrapper div means it has no visual
85
+ * footprint — it exists only as a DOM anchor for Alab's PPR machinery.
86
+ */
87
+ export declare function Dynamic({ id, children, fallback }: DynamicProps): import("react/jsx-runtime").JSX.Element;
88
+ //# sourceMappingURL=Dynamic.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Dynamic.d.ts","sourceRoot":"","sources":["../../src/components/Dynamic.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCG;AAEH,OAAO,EAAuC,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAU5E;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAAC,EAAE,QAAQ,EAAE,EAAE;IAAE,QAAQ,EAAE,SAAS,CAAA;CAAE,2CAErE;AAID,MAAM,WAAW,YAAY;IAC3B;;;;;;;;OAQG;IACH,EAAE,EAAE,MAAM,CAAC;IACX,iFAAiF;IACjF,QAAQ,EAAE,SAAS,CAAC;IACpB;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,OAAO,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,QAAe,EAAE,EAAE,YAAY,2CAuBtE"}
@@ -0,0 +1,86 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ /**
3
+ * Alab PPR — Partial Prerendering support.
4
+ *
5
+ * Pages that export `export const ppr = true` get their static HTML shell
6
+ * pre-rendered at build time and stored in `.alabjs/ppr-cache/`. At runtime,
7
+ * the shell is served instantly (CDN-cacheable) while `<Dynamic>` sections
8
+ * fill in per-request via React's Suspense streaming or client-side hydration.
9
+ *
10
+ * ## How it works
11
+ *
12
+ * During the **build-time static render** (pre-render pass):
13
+ * • `PPRShellProvider` sets the PPR context to `true`.
14
+ * • `<Dynamic>` sees the context and renders only its `fallback` inside a
15
+ * `data-ppr-hole` marker — children are omitted entirely.
16
+ * • The resulting HTML is the "static shell": complete page minus dynamic parts.
17
+ *
18
+ * At **runtime**:
19
+ * • `PPRShellProvider` is never rendered → context defaults to `false`.
20
+ * • `<Dynamic>` behaves as a plain `<Suspense>` boundary, streaming children
21
+ * as their async work resolves.
22
+ *
23
+ * ## Usage
24
+ *
25
+ * ```tsx
26
+ * // app/posts/[id]/page.tsx
27
+ * import { Dynamic } from "alabjs/components";
28
+ *
29
+ * export const ppr = true;
30
+ *
31
+ * export default function PostPage({ params }: { params: { id: string } }) {
32
+ * return (
33
+ * <article>
34
+ * <h1>Post {params.id}</h1>
35
+ * <Dynamic id="sidebar" fallback={<SidebarSkeleton />}>
36
+ * <PersonalisedSidebar userId={userId} />
37
+ * </Dynamic>
38
+ * </article>
39
+ * );
40
+ * }
41
+ * ```
42
+ */
43
+ import { Suspense, createContext, useContext } from "react";
44
+ // ─── PPR shell context ─────────────────────────────────────────────────────────
45
+ /**
46
+ * When `true`, `<Dynamic>` renders only its `fallback` placeholder.
47
+ * Set exclusively by `PPRShellProvider` during build-time pre-renders.
48
+ */
49
+ const PPRShellCtx = createContext(false);
50
+ /**
51
+ * @internal
52
+ * Wrap the root element with this during build-time PPR pre-rendering so that
53
+ * every `<Dynamic>` in the tree emits a stable `data-ppr-hole` placeholder
54
+ * instead of its children.
55
+ *
56
+ * Do **not** use this at runtime — it is an implementation detail of
57
+ * `preRenderPPRShell` in `src/ssr/ppr.ts`.
58
+ */
59
+ export function PPRShellProvider({ children }) {
60
+ return _jsx(PPRShellCtx.Provider, { value: true, children: children });
61
+ }
62
+ /**
63
+ * Marks a subtree as **dynamic** (per-request) within a PPR page.
64
+ *
65
+ * - **Build time** (static shell pre-render): renders `fallback` inside a
66
+ * `<div data-ppr-hole="{id}">` marker. Children are not rendered.
67
+ * - **Runtime** (SSR + hydration): acts as a `<Suspense>` boundary. Children
68
+ * stream in as their async work resolves; `fallback` is shown meanwhile.
69
+ *
70
+ * The `display: contents` style on the wrapper div means it has no visual
71
+ * footprint — it exists only as a DOM anchor for Alab's PPR machinery.
72
+ */
73
+ export function Dynamic({ id, children, fallback = null }) {
74
+ const isShell = useContext(PPRShellCtx);
75
+ const holeWrapper = (content) => (_jsx("div", { "data-ppr-hole": id, style: { display: "contents" }, children: content }));
76
+ if (isShell) {
77
+ // Build-time pre-render: emit only the placeholder + fallback.
78
+ // Children are intentionally omitted — they contain per-request logic.
79
+ return holeWrapper(fallback);
80
+ }
81
+ // Runtime: standard Suspense boundary.
82
+ // The hole wrapper on the fallback preserves the DOM anchor so client-side
83
+ // hydration can match it to the pre-rendered shell.
84
+ return (_jsx(Suspense, { fallback: holeWrapper(fallback), children: children }));
85
+ }
86
+ //# sourceMappingURL=Dynamic.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Dynamic.js","sourceRoot":"","sources":["../../src/components/Dynamic.tsx"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCG;AAEH,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,UAAU,EAAkB,MAAM,OAAO,CAAC;AAE5E,kFAAkF;AAElF;;;GAGG;AACH,MAAM,WAAW,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;AAEzC;;;;;;;;GAQG;AACH,MAAM,UAAU,gBAAgB,CAAC,EAAE,QAAQ,EAA2B;IACpE,OAAO,KAAC,WAAW,CAAC,QAAQ,IAAC,KAAK,EAAE,IAAI,YAAG,QAAQ,GAAwB,CAAC;AAC9E,CAAC;AA0BD;;;;;;;;;;GAUG;AACH,MAAM,UAAU,OAAO,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,QAAQ,GAAG,IAAI,EAAgB;IACrE,MAAM,OAAO,GAAG,UAAU,CAAC,WAAW,CAAC,CAAC;IAExC,MAAM,WAAW,GAAG,CAAC,OAAkB,EAAE,EAAE,CAAC,CAC1C,+BAAoB,EAAE,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,UAAU,EAAE,YACnD,OAAO,GACJ,CACP,CAAC;IAEF,IAAI,OAAO,EAAE,CAAC;QACZ,+DAA+D;QAC/D,uEAAuE;QACvE,OAAO,WAAW,CAAC,QAAQ,CAAC,CAAC;IAC/B,CAAC;IAED,uCAAuC;IACvC,2EAA2E;IAC3E,oDAAoD;IACpD,OAAO,CACL,KAAC,QAAQ,IAAC,QAAQ,EAAE,WAAW,CAAC,QAAQ,CAAC,YACtC,QAAQ,GACA,CACZ,CAAC;AACJ,CAAC"}
@@ -7,4 +7,8 @@ export { Script } from "./Script.js";
7
7
  export type { ScriptProps } from "./Script.js";
8
8
  export { Font } from "./Font.js";
9
9
  export type { FontProps } from "./Font.js";
10
+ export { Dynamic, PPRShellProvider } from "./Dynamic.js";
11
+ export type { DynamicProps } from "./Dynamic.js";
12
+ export { Analytics } from "./Analytics.js";
13
+ export type { AnalyticsProps } from "./Analytics.js";
10
14
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/components/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC;AAC5D,YAAY,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,YAAY,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,YAAY,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,YAAY,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/components/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC;AAC5D,YAAY,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,YAAY,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,YAAY,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,YAAY,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AACzD,YAAY,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,YAAY,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC"}
@@ -3,4 +3,6 @@ export { Link } from "./Link.js";
3
3
  export { ErrorBoundary } from "./ErrorBoundary.js";
4
4
  export { Script } from "./Script.js";
5
5
  export { Font } from "./Font.js";
6
+ export { Dynamic, PPRShellProvider } from "./Dynamic.js";
7
+ export { Analytics } from "./Analytics.js";
6
8
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/components/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC;AAE5D,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/components/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC;AAE5D,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,EAAE,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAEzD,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC"}
package/dist/index.d.ts CHANGED
@@ -1,4 +1,4 @@
1
1
  export { defineServerFn } from "./server/index.js";
2
- export type { ServerFn, ServerFnContext, AlabPage, PageMetadata, GenerateMetadata, RouteParams, } from "./types/index.js";
2
+ export type { ServerFn, ServerFnContext, AlabPage, PageMetadata, GenerateMetadata, RouteParams, CdnCache, } from "./types/index.js";
3
3
  export { createApp } from "./server/app.js";
4
4
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,YAAY,EACV,QAAQ,EACR,eAAe,EACf,QAAQ,EACR,YAAY,EACZ,gBAAgB,EAChB,WAAW,GACZ,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,YAAY,EACV,QAAQ,EACR,eAAe,EACf,QAAQ,EACR,YAAY,EACZ,gBAAgB,EAChB,WAAW,EACX,QAAQ,GACT,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC"}
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AASnD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAUnD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../../src/server/app.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAwD3D,MAAM,WAAW,OAAO;IACtB,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B;AAED;;;;;;GAMG;AACH,wBAAgB,SAAS,CAAC,QAAQ,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAyY3E"}
1
+ {"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../../src/server/app.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AA2D3D,MAAM,WAAW,OAAO;IACtB,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B;AAED;;;;;;GAMG;AACH,wBAAgB,SAAS,CAAC,QAAQ,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CA+c3E"}
@@ -1,7 +1,7 @@
1
1
  import { createApp as createH3App, createRouter, defineEventHandler, getQuery, readBody } from "h3";
2
2
  import { createServer } from "node:http";
3
3
  import { resolve, dirname, join, extname } from "node:path";
4
- import { existsSync, createReadStream, statSync } from "node:fs";
4
+ import { existsSync, createReadStream, statSync, readFileSync } from "node:fs";
5
5
  import { toNodeListener } from "h3";
6
6
  import { renderToResponse } from "../ssr/render.js";
7
7
  import { generateSitemap } from "./sitemap.js";
@@ -9,6 +9,9 @@ import { csrfMiddleware, setCsrfCookie } from "./csrf.js";
9
9
  import { handleImageRequest } from "./image.js";
10
10
  import { runMiddleware } from "./middleware.js";
11
11
  import { checkRevalidateAuth, applyRevalidate } from "./revalidate.js";
12
+ import { applyCdnHeaders } from "./cdn.js";
13
+ import { getPPRShell, injectBuildIdIntoPPRShell, PPR_CACHE_SUBDIR } from "../ssr/ppr.js";
14
+ import { handleVitalsBeacon, handleAnalyticsDashboard } from "../analytics/handler.js";
12
15
  /**
13
16
  * Find layout file paths (relative to cwd root) for a given route.file, ordered outermost→innermost.
14
17
  * Checks the compiled dist directory for the existence of each layout.
@@ -67,6 +70,16 @@ export function createApp(manifest, distDir) {
67
70
  const app = createH3App();
68
71
  const router = createRouter();
69
72
  const publicDir = resolve(distDir, "../../public");
73
+ // Load the build ID written by `alab build` for skew protection.
74
+ // If the file is absent (first-run / non-standard setup) skew detection
75
+ // is silently disabled — existing behaviour is unchanged.
76
+ let buildId;
77
+ try {
78
+ buildId = readFileSync(resolve(distDir, "BUILD_ID"), "utf8").trim() || undefined;
79
+ }
80
+ catch { /* no BUILD_ID file — skew protection disabled */ }
81
+ // Absolute path to the PPR shell cache directory.
82
+ const pprCacheDir = resolve(distDir, "../../", PPR_CACHE_SUBDIR);
70
83
  // ─── Global middleware ───────────────────────────────────────────────────────
71
84
  app.use(defineEventHandler((event) => {
72
85
  const res = event.node.res;
@@ -208,6 +221,15 @@ export function createApp(manifest, distDir) {
208
221
  }
209
222
  return JSON.stringify(result);
210
223
  }));
224
+ // Core Web Vitals beacon — receives POST from <Analytics> component
225
+ router.post("/_alabjs/vitals", defineEventHandler((event) => {
226
+ return handleVitalsBeacon(event.node.req, event.node.res);
227
+ }));
228
+ // Analytics dashboard — GET aggregated per-route stats
229
+ router.get("/_alabjs/analytics", defineEventHandler((event) => {
230
+ handleAnalyticsDashboard(event.node.req, event.node.res);
231
+ return null;
232
+ }));
211
233
  // Auto sitemap.xml from route manifest
212
234
  router.get("/sitemap.xml", defineEventHandler((event) => {
213
235
  const baseUrl = process.env["PUBLIC_URL"] ??
@@ -282,11 +304,14 @@ export function createApp(manifest, distDir) {
282
304
  const h3Path = route.path.replace(/\[([^\]]+)\]/g, ":$1");
283
305
  router.get(h3Path, defineEventHandler(async (event) => {
284
306
  const res = event.node.res;
285
- // HTML pages must not be cached by intermediaries they contain
286
- // user-specific CSRF tokens and may reflect auth state.
287
- res.setHeader("cache-control", "no-store");
288
- // Set CSRF cookie so the client can send it on mutations.
289
- const csrfToken = setCsrfCookie(event);
307
+ // Skew protection: tell the client which build this server is running.
308
+ if (buildId) {
309
+ res.setHeader("x-alab-build-id", buildId);
310
+ const clientBuildId = event.node.req.headers["x-alab-build-id"];
311
+ if (clientBuildId && clientBuildId !== buildId) {
312
+ res.setHeader("x-alab-revalidate", "1");
313
+ }
314
+ }
290
315
  const rawParams = (event.context.params ?? {});
291
316
  const params = rawParams;
292
317
  const rawQuery = getQuery(event);
@@ -303,6 +328,31 @@ export function createApp(manifest, distDir) {
303
328
  res.end(`[alabjs] Page has no default export: ${route.file}`);
304
329
  return;
305
330
  }
331
+ // ── PPR: serve pre-rendered static shell ──────────────────────────────
332
+ // Pages with `export const ppr = true` get a static HTML shell built
333
+ // at `alab build` time. Serve it instantly with a long CDN TTL so the
334
+ // static portion is edge-cached. Dynamic sections (`<Dynamic>`) render
335
+ // their fallback in the shell and are filled in client-side via React
336
+ // hydration, or server-side via Suspense streaming on direct hits.
337
+ if (mod.ppr === true) {
338
+ let shell = getPPRShell(route.path, pprCacheDir);
339
+ if (shell !== null) {
340
+ // Inject the per-build skew-protection tag into the pre-rendered HTML.
341
+ if (buildId)
342
+ shell = injectBuildIdIntoPPRShell(shell, buildId);
343
+ res.statusCode = 200;
344
+ res.setHeader("content-type", "text/html; charset=utf-8");
345
+ // Long CDN TTL: static shell doesn't change until the next build.
346
+ res.setHeader("cache-control", "public, s-maxage=3600, stale-while-revalidate=86400");
347
+ res.setHeader("x-alab-ppr", "shell");
348
+ if (buildId)
349
+ res.setHeader("x-alab-build-id", buildId);
350
+ res.end(shell);
351
+ return;
352
+ }
353
+ // Shell not found — fall through to normal SSR and warn once.
354
+ console.warn(`[alabjs] ppr: no pre-rendered shell for ${route.path} — run \`alab build\` to generate it. Falling back to SSR.`);
355
+ }
306
356
  // Support both static metadata and dynamic generateMetadata (production fix)
307
357
  const metadata = typeof mod.generateMetadata === "function"
308
358
  ? await mod.generateMetadata(params)
@@ -315,8 +365,21 @@ export function createApp(manifest, distDir) {
315
365
  const layouts = layoutMods.map((m) => m.default).filter((c) => typeof c === "function");
316
366
  const layoutsJson = JSON.stringify(layoutRelPaths);
317
367
  const loadingFile = findProdLoadingFile(route.file, distDir) ?? undefined;
318
- // Inject CSRF token into the HTML head so client JS can read it.
319
- const headExtra = `<meta name="csrf-token" content="${csrfToken.replace(/"/g, "&quot;")}" />`;
368
+ // ── Cache-control + CSRF ──────────────────────────────────────────────
369
+ // Pages that export `cdnCache` are public, edge-cacheable pages.
370
+ // They get CDN headers instead of `no-store`, and CSRF tokens are
371
+ // omitted — a shared cache would deliver the same token to every
372
+ // visitor, defeating CSRF protection.
373
+ let headExtra = "";
374
+ if (mod.cdnCache) {
375
+ applyCdnHeaders(res, mod.cdnCache);
376
+ }
377
+ else {
378
+ // Private page: must not be cached by intermediaries.
379
+ res.setHeader("cache-control", "no-store");
380
+ const csrfToken = setCsrfCookie(event);
381
+ headExtra = `<meta name="csrf-token" content="${csrfToken.replace(/"/g, "&quot;")}" />`;
382
+ }
320
383
  try {
321
384
  renderToResponse(res, {
322
385
  Page: Page,
@@ -329,6 +392,7 @@ export function createApp(manifest, distDir) {
329
392
  loadingFile,
330
393
  ssr: ssrEnabled,
331
394
  headExtra,
395
+ ...(buildId ? { buildId } : {}),
332
396
  });
333
397
  }
334
398
  catch (err) {
@@ -1 +1 @@
1
- {"version":3,"file":"app.js","sourceRoot":"","sources":["../../src/server/app.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"app.js","sourceRoot":"","sources":["../../src/server/app.ts"],"names":[],"mappings":"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"}