alabjs 0.2.5 → 0.3.0-alpha.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.
- package/dist/analytics/handler.d.ts +5 -1
- package/dist/analytics/handler.d.ts.map +1 -1
- package/dist/analytics/handler.js +14 -10
- package/dist/analytics/handler.js.map +1 -1
- package/dist/cli.js +7 -2
- package/dist/cli.js.map +1 -1
- package/dist/client/federation.d.ts +41 -0
- package/dist/client/federation.d.ts.map +1 -0
- package/dist/client/federation.js +48 -0
- package/dist/client/federation.js.map +1 -0
- package/dist/client/hooks.d.ts +9 -1
- package/dist/client/hooks.d.ts.map +1 -1
- package/dist/client/hooks.js +37 -4
- package/dist/client/hooks.js.map +1 -1
- package/dist/client/index.d.ts +1 -0
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/index.js +1 -0
- package/dist/client/index.js.map +1 -1
- package/dist/client/offline-sw.js +142 -0
- package/dist/commands/build.d.ts.map +1 -1
- package/dist/commands/build.js +279 -40
- package/dist/commands/build.js.map +1 -1
- package/dist/commands/dev.d.ts.map +1 -1
- package/dist/commands/dev.js +78 -2
- package/dist/commands/dev.js.map +1 -1
- package/dist/commands/start.js +1 -1
- package/dist/commands/start.js.map +1 -1
- package/dist/components/Image.d.ts +0 -12
- package/dist/components/Image.d.ts.map +1 -1
- package/dist/components/Image.js +2 -29
- package/dist/components/Image.js.map +1 -1
- package/dist/components/ImageServer.d.ts +20 -0
- package/dist/components/ImageServer.d.ts.map +1 -0
- package/dist/components/ImageServer.js +37 -0
- package/dist/components/ImageServer.js.map +1 -0
- package/dist/components/index.d.ts +1 -1
- package/dist/components/index.d.ts.map +1 -1
- package/dist/components/index.js +1 -1
- package/dist/components/index.js.map +1 -1
- package/dist/config.d.ts +66 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +77 -0
- package/dist/config.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/server/app.d.ts.map +1 -1
- package/dist/server/app.js +251 -41
- package/dist/server/app.js.map +1 -1
- package/dist/server/cache.d.ts.map +1 -1
- package/dist/server/cache.js +26 -4
- package/dist/server/cache.js.map +1 -1
- package/dist/server/csrf.d.ts.map +1 -1
- package/dist/server/csrf.js +5 -0
- package/dist/server/csrf.js.map +1 -1
- package/dist/server/revalidate.d.ts.map +1 -1
- package/dist/server/revalidate.js +10 -3
- package/dist/server/revalidate.js.map +1 -1
- package/dist/ssr/html.d.ts +7 -0
- package/dist/ssr/html.d.ts.map +1 -1
- package/dist/ssr/html.js +24 -4
- package/dist/ssr/html.js.map +1 -1
- package/dist/ssr/ppr.d.ts.map +1 -1
- package/dist/ssr/ppr.js +2 -1
- package/dist/ssr/ppr.js.map +1 -1
- package/dist/ssr/render.d.ts +5 -0
- package/dist/ssr/render.d.ts.map +1 -1
- package/dist/ssr/render.js +2 -1
- package/dist/ssr/render.js.map +1 -1
- package/package.json +9 -4
- package/src/analytics/handler.ts +15 -10
- package/src/cli.ts +9 -2
- package/src/client/federation.ts +55 -0
- package/src/client/hooks.ts +42 -4
- package/src/client/index.ts +1 -0
- package/src/client/offline-sw.ts +7 -2
- package/src/commands/build.ts +335 -44
- package/src/commands/dev.ts +84 -2
- package/src/commands/start.ts +1 -1
- package/src/components/Image.tsx +2 -35
- package/src/components/ImageServer.ts +43 -0
- package/src/components/index.ts +1 -1
- package/src/config.ts +143 -0
- package/src/index.ts +2 -0
- package/src/server/app.ts +289 -35
- package/src/server/cache.ts +28 -4
- package/src/server/csrf.ts +5 -0
- package/src/server/revalidate.ts +14 -2
- package/src/ssr/html.ts +31 -3
- package/src/ssr/ppr.ts +2 -1
- package/src/ssr/render.ts +7 -0
- package/tsconfig.sw.json +18 -0
- package/tsconfig.tsbuildinfo +1 -1
package/dist/server/app.js
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
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, readFileSync } from "node:fs";
|
|
4
|
+
import { existsSync, createReadStream, statSync, readFileSync, readdirSync } from "node:fs";
|
|
5
|
+
import { createGzip, createBrotliCompress } from "node:zlib";
|
|
5
6
|
import { toNodeListener } from "h3";
|
|
6
7
|
import { renderToResponse } from "../ssr/render.js";
|
|
7
8
|
import { generateSitemap } from "./sitemap.js";
|
|
@@ -12,20 +13,49 @@ import { checkRevalidateAuth, applyRevalidate } from "./revalidate.js";
|
|
|
12
13
|
import { applyCdnHeaders } from "./cdn.js";
|
|
13
14
|
import { getPPRShell, injectBuildIdIntoPPRShell, PPR_CACHE_SUBDIR } from "../ssr/ppr.js";
|
|
14
15
|
import { handleVitalsBeacon, handleAnalyticsDashboard } from "../analytics/handler.js";
|
|
16
|
+
import { buildImportMap } from "../config.js";
|
|
17
|
+
/** Walk dist/server recursively and collect all *.server.js paths (compiled server functions). */
|
|
18
|
+
function findDistServerFiles(distDir) {
|
|
19
|
+
const serverDir = join(distDir, "server");
|
|
20
|
+
const results = [];
|
|
21
|
+
function walk(dir) {
|
|
22
|
+
try {
|
|
23
|
+
for (const entry of readdirSync(dir, { withFileTypes: true })) {
|
|
24
|
+
const fullPath = join(dir, entry.name);
|
|
25
|
+
if (entry.isDirectory()) {
|
|
26
|
+
walk(fullPath);
|
|
27
|
+
}
|
|
28
|
+
else if (entry.isFile() && entry.name.endsWith(".server.js")) {
|
|
29
|
+
results.push(fullPath);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
catch { /* not readable */ }
|
|
34
|
+
}
|
|
35
|
+
walk(serverDir);
|
|
36
|
+
return results;
|
|
37
|
+
}
|
|
15
38
|
/**
|
|
16
39
|
* Find layout file paths (relative to cwd root) for a given route.file, ordered outermost→innermost.
|
|
17
40
|
* Checks the compiled dist directory for the existence of each layout.
|
|
18
41
|
*/
|
|
42
|
+
/** Convert a TypeScript source path to its compiled .js equivalent. */
|
|
43
|
+
function toJsPath(p) {
|
|
44
|
+
return p.replace(/\.(tsx?)$/, ".js");
|
|
45
|
+
}
|
|
19
46
|
function findProdLayoutFiles(routeFile, distDir) {
|
|
20
47
|
// routeFile is like "app/users/[id]/page.tsx"
|
|
48
|
+
// Returns source paths (e.g. "app/layout.tsx") so the client bootstrap can look
|
|
49
|
+
// them up in LAYOUT_MODS by their original source key. The import() call in
|
|
50
|
+
// app.ts uses toJsPath() to convert back to the compiled .js path.
|
|
21
51
|
const pageDir = dirname(routeFile);
|
|
22
52
|
const parts = pageDir.split("/");
|
|
23
53
|
const layouts = [];
|
|
24
54
|
for (let i = 1; i <= parts.length; i++) {
|
|
25
55
|
const dir = parts.slice(0, i).join("/");
|
|
26
|
-
const
|
|
27
|
-
if (existsSync(join(distDir, "server",
|
|
28
|
-
layouts.push(
|
|
56
|
+
const compiledPath = `${dir}/layout.js`;
|
|
57
|
+
if (existsSync(join(distDir, "server", compiledPath))) {
|
|
58
|
+
layouts.push(`${dir}/layout.tsx`);
|
|
29
59
|
}
|
|
30
60
|
}
|
|
31
61
|
return layouts;
|
|
@@ -36,7 +66,7 @@ function findProdLayoutFiles(routeFile, distDir) {
|
|
|
36
66
|
function findProdErrorFile(routeFile, distDir) {
|
|
37
67
|
let dir = dirname(routeFile);
|
|
38
68
|
while (dir.length > 0 && dir !== ".") {
|
|
39
|
-
const candidate = `${dir}/error.
|
|
69
|
+
const candidate = `${dir}/error.js`;
|
|
40
70
|
if (existsSync(join(distDir, "server", candidate)))
|
|
41
71
|
return candidate;
|
|
42
72
|
const parent = dirname(dir);
|
|
@@ -49,9 +79,9 @@ function findProdErrorFile(routeFile, distDir) {
|
|
|
49
79
|
function findProdLoadingFile(routeFile, distDir) {
|
|
50
80
|
let dir = dirname(routeFile);
|
|
51
81
|
while (dir.length > 0 && dir !== ".") {
|
|
52
|
-
const
|
|
53
|
-
if (existsSync(join(distDir, "server",
|
|
54
|
-
return
|
|
82
|
+
const compiled = `${dir}/loading.js`;
|
|
83
|
+
if (existsSync(join(distDir, "server", compiled)))
|
|
84
|
+
return `${dir}/loading.tsx`;
|
|
55
85
|
const parent = dirname(dir);
|
|
56
86
|
if (parent === dir)
|
|
57
87
|
break;
|
|
@@ -78,6 +108,29 @@ export function createApp(manifest, distDir) {
|
|
|
78
108
|
buildId = readFileSync(resolve(distDir, "BUILD_ID"), "utf8").trim() || undefined;
|
|
79
109
|
}
|
|
80
110
|
catch { /* no BUILD_ID file — skew protection disabled */ }
|
|
111
|
+
// Resolve the compiled client entry file path by reading the Vite manifest.
|
|
112
|
+
// /@alabjs/client is a virtual module at build time; at runtime the server
|
|
113
|
+
// must redirect requests for it to the hashed asset file.
|
|
114
|
+
// The manifest key is a relative path ending in "@alabjs/client" (not "/@alabjs/client").
|
|
115
|
+
let clientEntryPath = "";
|
|
116
|
+
try {
|
|
117
|
+
const viteManifest = JSON.parse(readFileSync(resolve(distDir, "client/.vite/manifest.json"), "utf8"));
|
|
118
|
+
const entry = Object.values(viteManifest).find((e) => e.isEntry && e.src?.endsWith("@alabjs/client"));
|
|
119
|
+
if (entry?.file)
|
|
120
|
+
clientEntryPath = "/" + entry.file;
|
|
121
|
+
}
|
|
122
|
+
catch { /* manifest absent — /@alabjs/client will 404 */ }
|
|
123
|
+
// Load federation config written by `alab build`. Used to:
|
|
124
|
+
// 1. Serve `/_alabjs/federation-manifest.json` (remote discovery)
|
|
125
|
+
// 2. Inject `<script type="importmap">` into every page (host → remote routing)
|
|
126
|
+
let federationConfig;
|
|
127
|
+
let importMapJson = null;
|
|
128
|
+
try {
|
|
129
|
+
const fedJson = readFileSync(resolve(distDir, "federation-config.json"), "utf8");
|
|
130
|
+
federationConfig = JSON.parse(fedJson);
|
|
131
|
+
importMapJson = buildImportMap(federationConfig, /* dev= */ false);
|
|
132
|
+
}
|
|
133
|
+
catch { /* no federation config — federation disabled */ }
|
|
81
134
|
// Absolute path to the PPR shell cache directory.
|
|
82
135
|
const pprCacheDir = resolve(distDir, "../../", PPR_CACHE_SUBDIR);
|
|
83
136
|
// ─── Global middleware ───────────────────────────────────────────────────────
|
|
@@ -88,14 +141,43 @@ export function createApp(manifest, distDir) {
|
|
|
88
141
|
res.setHeader("referrer-policy", "strict-origin-when-cross-origin");
|
|
89
142
|
res.setHeader("permissions-policy", "camera=(), microphone=(), geolocation=()");
|
|
90
143
|
res.setHeader("x-permitted-cross-domain-policies", "none");
|
|
144
|
+
// NOTE: 'unsafe-inline' is required by React's inline event delegation and
|
|
145
|
+
// Tailwind's runtime style injection. 'unsafe-eval' is required by some
|
|
146
|
+
// React dev-mode internals and dynamic import().
|
|
147
|
+
//
|
|
148
|
+
// ⚠️ Security implication: these directives weaken XSS protection.
|
|
149
|
+
// In production, override this header in your middleware with a nonce-based
|
|
150
|
+
// CSP: `script-src 'self' 'nonce-<random>'` and inject the same nonce into
|
|
151
|
+
// every <script> tag via renderToResponse's headExtra option. The CSRF
|
|
152
|
+
// double-submit pattern relies on XSS prevention — using 'unsafe-inline'
|
|
153
|
+
// without a nonce makes the CSRF token readable by injected scripts.
|
|
154
|
+
res.setHeader("content-security-policy", [
|
|
155
|
+
"default-src 'self'",
|
|
156
|
+
"script-src 'self' 'unsafe-inline' 'unsafe-eval'",
|
|
157
|
+
"style-src 'self' 'unsafe-inline'",
|
|
158
|
+
"img-src 'self' data: blob: https:",
|
|
159
|
+
"font-src 'self' data: https:",
|
|
160
|
+
"connect-src 'self'",
|
|
161
|
+
"media-src 'self'",
|
|
162
|
+
"object-src 'none'",
|
|
163
|
+
"base-uri 'self'",
|
|
164
|
+
"form-action 'self'",
|
|
165
|
+
"frame-ancestors 'self'",
|
|
166
|
+
].join("; "));
|
|
91
167
|
// HSTS — only meaningful over HTTPS; set in production only.
|
|
92
168
|
res.setHeader("strict-transport-security", "max-age=31536000; includeSubDomains");
|
|
93
169
|
}));
|
|
94
|
-
// ─── User middleware (middleware.ts compiled to dist/server/middleware.
|
|
95
|
-
const middlewareModulePath = `${distDir}/server/middleware.
|
|
170
|
+
// ─── User middleware (middleware.ts compiled to dist/server/middleware.js) ───
|
|
171
|
+
const middlewareModulePath = `${distDir}/server/middleware.js`;
|
|
96
172
|
if (existsSync(middlewareModulePath)) {
|
|
173
|
+
// Cache the module after first import — avoids redundant dynamic import()
|
|
174
|
+
// overhead on every request (each import() call re-resolves the module graph).
|
|
175
|
+
let _middlewareCache = null;
|
|
97
176
|
app.use(defineEventHandler(async (event) => {
|
|
98
|
-
|
|
177
|
+
if (!_middlewareCache) {
|
|
178
|
+
_middlewareCache = await import(middlewareModulePath);
|
|
179
|
+
}
|
|
180
|
+
const mod = _middlewareCache;
|
|
99
181
|
if (typeof mod.middleware !== "function")
|
|
100
182
|
return;
|
|
101
183
|
const req = event.node.req;
|
|
@@ -142,7 +224,7 @@ export function createApp(manifest, distDir) {
|
|
|
142
224
|
".xml": "application/xml; charset=utf-8",
|
|
143
225
|
".map": "application/json; charset=utf-8",
|
|
144
226
|
};
|
|
145
|
-
app.use(defineEventHandler((event) => {
|
|
227
|
+
app.use(defineEventHandler(async (event) => {
|
|
146
228
|
const req = event.node.req;
|
|
147
229
|
const res = event.node.res;
|
|
148
230
|
if (req.method !== "GET" && req.method !== "HEAD")
|
|
@@ -158,28 +240,76 @@ export function createApp(manifest, distDir) {
|
|
|
158
240
|
}
|
|
159
241
|
if (relPath.includes(".."))
|
|
160
242
|
return;
|
|
243
|
+
const acceptEncoding = (req.headers["accept-encoding"] ?? "");
|
|
244
|
+
const useBrotli = acceptEncoding.includes("br");
|
|
245
|
+
const useGzip = !useBrotli && acceptEncoding.includes("gzip");
|
|
246
|
+
// Virtual client entry — redirect to the hashed asset file resolved at startup.
|
|
247
|
+
// A 302 redirect (not direct serve) is critical: relative imports in the bundle
|
|
248
|
+
// (e.g. "./components-HASH.js") must resolve against the real asset URL
|
|
249
|
+
// (/assets/client-HASH.js), not the virtual path (/@alabjs/client).
|
|
250
|
+
if (relPath === "/@alabjs/client") {
|
|
251
|
+
if (clientEntryPath) {
|
|
252
|
+
res.writeHead(302, { Location: clientEntryPath });
|
|
253
|
+
}
|
|
254
|
+
else {
|
|
255
|
+
res.statusCode = 404;
|
|
256
|
+
}
|
|
257
|
+
res.end();
|
|
258
|
+
return;
|
|
259
|
+
}
|
|
161
260
|
const ext = extname(relPath).toLowerCase();
|
|
162
261
|
const contentType = MIME_TYPES[ext];
|
|
163
262
|
if (!contentType)
|
|
164
263
|
return; // skip extensionless paths (page routes)
|
|
264
|
+
/** Stream a file with optional brotli/gzip compression and ETag 304 support.
|
|
265
|
+
*
|
|
266
|
+
* Returns a Promise that resolves when the response is fully sent. The
|
|
267
|
+
* h3 handler awaits this promise so h3 knows the response is complete
|
|
268
|
+
* before considering the next middleware. This avoids h3 passing the
|
|
269
|
+
* request to the router (which would 404) while the async pipe is running.
|
|
270
|
+
*/
|
|
271
|
+
function serveFile(filePath, fileSize, mtimeMs, cacheControl, mime) {
|
|
272
|
+
// ETag from file size + mtime — both already known from the caller's stat().
|
|
273
|
+
const etag = `"${fileSize.toString(36)}-${mtimeMs.toString(36)}"`;
|
|
274
|
+
res.setHeader("etag", etag);
|
|
275
|
+
res.setHeader("vary", "Accept-Encoding");
|
|
276
|
+
if (req.headers["if-none-match"] === etag) {
|
|
277
|
+
res.statusCode = 304;
|
|
278
|
+
res.end();
|
|
279
|
+
return Promise.resolve();
|
|
280
|
+
}
|
|
281
|
+
res.setHeader("content-type", mime);
|
|
282
|
+
res.setHeader("cache-control", cacheControl);
|
|
283
|
+
if (req.method === "HEAD") {
|
|
284
|
+
res.end();
|
|
285
|
+
return Promise.resolve();
|
|
286
|
+
}
|
|
287
|
+
return new Promise((resolve, reject) => {
|
|
288
|
+
const fileStream = createReadStream(filePath);
|
|
289
|
+
res.on("finish", resolve);
|
|
290
|
+
res.on("error", reject);
|
|
291
|
+
if (useBrotli) {
|
|
292
|
+
res.setHeader("content-encoding", "br");
|
|
293
|
+
fileStream.pipe(createBrotliCompress()).pipe(res);
|
|
294
|
+
}
|
|
295
|
+
else if (useGzip) {
|
|
296
|
+
res.setHeader("content-encoding", "gzip");
|
|
297
|
+
fileStream.pipe(createGzip()).pipe(res);
|
|
298
|
+
}
|
|
299
|
+
else {
|
|
300
|
+
res.setHeader("content-length", fileSize);
|
|
301
|
+
fileStream.pipe(res);
|
|
302
|
+
}
|
|
303
|
+
});
|
|
304
|
+
}
|
|
165
305
|
// 1. Built client assets (JS chunks, CSS, source maps)
|
|
166
306
|
const clientCandidate = join(clientDir, relPath);
|
|
167
307
|
if (existsSync(clientCandidate)) {
|
|
168
308
|
const stat = statSync(clientCandidate);
|
|
169
309
|
if (stat.isFile()) {
|
|
170
|
-
res.setHeader("content-type", contentType);
|
|
171
|
-
res.setHeader("content-length", stat.size);
|
|
172
|
-
// Immutable cache for hashed assets; short TTL for others
|
|
173
310
|
const isHashed = /\.[a-f0-9]{8,}\.[a-z]+$/.test(relPath);
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
: "public, max-age=3600");
|
|
177
|
-
if (req.method === "HEAD") {
|
|
178
|
-
res.end();
|
|
179
|
-
return null;
|
|
180
|
-
}
|
|
181
|
-
createReadStream(clientCandidate).pipe(res);
|
|
182
|
-
return null;
|
|
311
|
+
await serveFile(clientCandidate, stat.size, stat.mtimeMs, isHashed ? "public, max-age=31536000, immutable" : "public, max-age=3600", contentType);
|
|
312
|
+
return;
|
|
183
313
|
}
|
|
184
314
|
}
|
|
185
315
|
// 2. Public directory (favicons, fonts, open-graph images, etc.)
|
|
@@ -187,20 +317,26 @@ export function createApp(manifest, distDir) {
|
|
|
187
317
|
if (existsSync(publicCandidate)) {
|
|
188
318
|
const stat = statSync(publicCandidate);
|
|
189
319
|
if (stat.isFile()) {
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
res.setHeader("cache-control", "public, max-age=3600");
|
|
193
|
-
if (req.method === "HEAD") {
|
|
194
|
-
res.end();
|
|
195
|
-
return null;
|
|
196
|
-
}
|
|
197
|
-
createReadStream(publicCandidate).pipe(res);
|
|
198
|
-
return null;
|
|
320
|
+
await serveFile(publicCandidate, stat.size, stat.mtimeMs, "public, max-age=3600", contentType);
|
|
321
|
+
return;
|
|
199
322
|
}
|
|
200
323
|
}
|
|
201
|
-
return undefined;
|
|
202
324
|
}));
|
|
203
325
|
// ─── Built-in routes ────────────────────────────────────────────────────────
|
|
326
|
+
// Federation manifest — remote apps can advertise what they expose
|
|
327
|
+
router.get("/_alabjs/federation-manifest.json", defineEventHandler((event) => {
|
|
328
|
+
const res = event.node.res;
|
|
329
|
+
res.setHeader("content-type", "application/json; charset=utf-8");
|
|
330
|
+
res.setHeader("access-control-allow-origin", "*");
|
|
331
|
+
res.setHeader("cache-control", "no-store");
|
|
332
|
+
const manifestPath = resolve(distDir, "client/_alabjs/federation-manifest.json");
|
|
333
|
+
if (!existsSync(manifestPath)) {
|
|
334
|
+
res.statusCode = 404;
|
|
335
|
+
return JSON.stringify({ error: "No federation exposes configured." });
|
|
336
|
+
}
|
|
337
|
+
res.statusCode = 200;
|
|
338
|
+
return readFileSync(manifestPath, "utf8");
|
|
339
|
+
}));
|
|
204
340
|
// Rust-powered image optimisation — resize + JPEG encode via `alab-napi`
|
|
205
341
|
router.get("/_alabjs/image", defineEventHandler((event) => {
|
|
206
342
|
return handleImageRequest(event.node.req, event.node.res, publicDir);
|
|
@@ -230,6 +366,74 @@ export function createApp(manifest, distDir) {
|
|
|
230
366
|
handleAnalyticsDashboard(event.node.req, event.node.res);
|
|
231
367
|
return null;
|
|
232
368
|
}));
|
|
369
|
+
// ─── Server function endpoints ──────────────────────────────────────────────
|
|
370
|
+
// GET /_alabjs/data/:fn — used by useServerData (query params as input)
|
|
371
|
+
// POST /_alabjs/fn/:fn — used by useMutation (JSON body as input)
|
|
372
|
+
//
|
|
373
|
+
// Both scan all *.server.js files in dist/server for the named export.
|
|
374
|
+
// Module results are NOT cached — the module cache is Node's own require cache.
|
|
375
|
+
async function callServerFn(fnName, ctx, input, res) {
|
|
376
|
+
const serverFiles = findDistServerFiles(distDir);
|
|
377
|
+
for (const file of serverFiles) {
|
|
378
|
+
const mod = await import(file);
|
|
379
|
+
if (typeof mod[fnName] === "function") {
|
|
380
|
+
try {
|
|
381
|
+
const result = await mod[fnName](ctx, input);
|
|
382
|
+
res.statusCode = 200;
|
|
383
|
+
res.setHeader("content-type", "application/json");
|
|
384
|
+
res.end(JSON.stringify(result));
|
|
385
|
+
}
|
|
386
|
+
catch (err) {
|
|
387
|
+
const zodError = err?.["zodError"];
|
|
388
|
+
if (zodError) {
|
|
389
|
+
res.statusCode = 422;
|
|
390
|
+
res.setHeader("content-type", "application/json");
|
|
391
|
+
res.end(JSON.stringify({ zodError }));
|
|
392
|
+
}
|
|
393
|
+
else {
|
|
394
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
395
|
+
console.error(`[alabjs] server fn "${fnName}" threw:`, err);
|
|
396
|
+
res.statusCode = 500;
|
|
397
|
+
res.setHeader("content-type", "application/json");
|
|
398
|
+
res.end(JSON.stringify({ error: msg }));
|
|
399
|
+
}
|
|
400
|
+
}
|
|
401
|
+
return;
|
|
402
|
+
}
|
|
403
|
+
}
|
|
404
|
+
res.statusCode = 404;
|
|
405
|
+
res.setHeader("content-type", "application/json");
|
|
406
|
+
res.end(JSON.stringify({ error: `[alabjs] server function not found: ${fnName}` }));
|
|
407
|
+
}
|
|
408
|
+
router.get("/_alabjs/data/:fn", defineEventHandler(async (event) => {
|
|
409
|
+
const fnName = event.context.params?.["fn"] ?? "";
|
|
410
|
+
const req = event.node.req;
|
|
411
|
+
const url = new URL(req.url ?? "/", `http://${req.headers.host ?? "localhost"}`);
|
|
412
|
+
const query = Object.fromEntries(url.searchParams.entries());
|
|
413
|
+
const ctx = {
|
|
414
|
+
params: query,
|
|
415
|
+
query,
|
|
416
|
+
headers: req.headers,
|
|
417
|
+
method: "GET",
|
|
418
|
+
url: req.url ?? "/",
|
|
419
|
+
};
|
|
420
|
+
await callServerFn(fnName, ctx, Object.keys(query).length ? query : undefined, event.node.res);
|
|
421
|
+
}));
|
|
422
|
+
router.post("/_alabjs/fn/:fn", defineEventHandler(async (event) => {
|
|
423
|
+
const fnName = event.context.params?.["fn"] ?? "";
|
|
424
|
+
const req = event.node.req;
|
|
425
|
+
const url = new URL(req.url ?? "/", `http://${req.headers.host ?? "localhost"}`);
|
|
426
|
+
const query = Object.fromEntries(url.searchParams.entries());
|
|
427
|
+
const body = await readBody(event);
|
|
428
|
+
const ctx = {
|
|
429
|
+
params: query,
|
|
430
|
+
query,
|
|
431
|
+
headers: req.headers,
|
|
432
|
+
method: "POST",
|
|
433
|
+
url: req.url ?? "/",
|
|
434
|
+
};
|
|
435
|
+
await callServerFn(fnName, ctx, body, event.node.res);
|
|
436
|
+
}));
|
|
233
437
|
// Auto sitemap.xml from route manifest
|
|
234
438
|
router.get("/sitemap.xml", defineEventHandler((event) => {
|
|
235
439
|
const baseUrl = process.env["PUBLIC_URL"] ??
|
|
@@ -244,7 +448,7 @@ export function createApp(manifest, distDir) {
|
|
|
244
448
|
if (route.kind !== "api")
|
|
245
449
|
continue;
|
|
246
450
|
const h3ApiPath = route.path.replace(/\[([^\]]+)\]/g, ":$1");
|
|
247
|
-
const apiModulePath = `${distDir}/server/${route.file}`;
|
|
451
|
+
const apiModulePath = `${distDir}/server/${toJsPath(route.file)}`;
|
|
248
452
|
for (const method of ["get", "post", "put", "patch", "delete", "head"]) {
|
|
249
453
|
router[method](h3ApiPath, defineEventHandler(async (event) => {
|
|
250
454
|
const apiMod = await import(apiModulePath);
|
|
@@ -320,7 +524,7 @@ export function createApp(manifest, distDir) {
|
|
|
320
524
|
searchParams[k] = Array.isArray(v) ? v[0] ?? "" : v;
|
|
321
525
|
}
|
|
322
526
|
// Dynamically import the compiled page module from the dist directory.
|
|
323
|
-
const pageModulePath = `${distDir}/server/${route.file}`;
|
|
527
|
+
const pageModulePath = `${distDir}/server/${toJsPath(route.file)}`;
|
|
324
528
|
const mod = await import(pageModulePath);
|
|
325
529
|
const Page = mod.default;
|
|
326
530
|
if (typeof Page !== "function") {
|
|
@@ -355,12 +559,12 @@ export function createApp(manifest, distDir) {
|
|
|
355
559
|
}
|
|
356
560
|
// Support both static metadata and dynamic generateMetadata (production fix)
|
|
357
561
|
const metadata = typeof mod.generateMetadata === "function"
|
|
358
|
-
? await mod.generateMetadata(params)
|
|
562
|
+
? await mod.generateMetadata({ params, searchParams })
|
|
359
563
|
: (mod.metadata ?? {});
|
|
360
564
|
const ssrEnabled = mod.ssr === true;
|
|
361
565
|
// ── Layouts ──────────────────────────────────────────────────────────
|
|
362
566
|
const layoutRelPaths = findProdLayoutFiles(route.file, distDir);
|
|
363
|
-
const layoutMods = await Promise.all(layoutRelPaths.map((p) => import(`${distDir}/server/${p}`)));
|
|
567
|
+
const layoutMods = await Promise.all(layoutRelPaths.map((p) => import(`${distDir}/server/${toJsPath(p)}`)));
|
|
364
568
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
365
569
|
const layouts = layoutMods.map((m) => m.default).filter((c) => typeof c === "function");
|
|
366
570
|
const layoutsJson = JSON.stringify(layoutRelPaths);
|
|
@@ -393,6 +597,7 @@ export function createApp(manifest, distDir) {
|
|
|
393
597
|
ssr: ssrEnabled,
|
|
394
598
|
headExtra,
|
|
395
599
|
...(buildId ? { buildId } : {}),
|
|
600
|
+
...(importMapJson ? { importMapJson } : {}),
|
|
396
601
|
});
|
|
397
602
|
}
|
|
398
603
|
catch (err) {
|
|
@@ -401,7 +606,7 @@ export function createApp(manifest, distDir) {
|
|
|
401
606
|
if (errorRelPath) {
|
|
402
607
|
try {
|
|
403
608
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
404
|
-
const errorMod = await import(`${distDir}/server/${errorRelPath}`);
|
|
609
|
+
const errorMod = await import(`${distDir}/server/${toJsPath(errorRelPath)}`);
|
|
405
610
|
const ErrorPage = errorMod.default;
|
|
406
611
|
if (typeof ErrorPage === "function") {
|
|
407
612
|
renderToResponse(res, {
|
|
@@ -412,6 +617,7 @@ export function createApp(manifest, distDir) {
|
|
|
412
617
|
routeFile: errorRelPath,
|
|
413
618
|
ssr: true,
|
|
414
619
|
headExtra,
|
|
620
|
+
...(importMapJson ? { importMapJson } : {}),
|
|
415
621
|
});
|
|
416
622
|
return;
|
|
417
623
|
}
|
|
@@ -430,7 +636,7 @@ export function createApp(manifest, distDir) {
|
|
|
430
636
|
}
|
|
431
637
|
app.use(router);
|
|
432
638
|
// ─── 404 / not-found fallback ────────────────────────────────────────────────
|
|
433
|
-
const notFoundPath = `${distDir}/server/app/not-found.
|
|
639
|
+
const notFoundPath = `${distDir}/server/app/not-found.js`;
|
|
434
640
|
app.use(defineEventHandler(async (event) => {
|
|
435
641
|
const res = event.node.res;
|
|
436
642
|
res.statusCode = 404;
|
|
@@ -447,6 +653,7 @@ export function createApp(manifest, distDir) {
|
|
|
447
653
|
metadata: { title: "404 — Not Found" },
|
|
448
654
|
routeFile: "app/not-found.tsx",
|
|
449
655
|
ssr: true,
|
|
656
|
+
...(importMapJson ? { importMapJson } : {}),
|
|
450
657
|
});
|
|
451
658
|
return;
|
|
452
659
|
}
|
|
@@ -461,8 +668,11 @@ export function createApp(manifest, distDir) {
|
|
|
461
668
|
}));
|
|
462
669
|
return {
|
|
463
670
|
listen(port = 3000) {
|
|
671
|
+
// Make the server's base URL available to useServerData during SSR so it
|
|
672
|
+
// can construct an absolute URL for its internal loop-back fetch.
|
|
673
|
+
process.env["ALAB_ORIGIN"] = `http://127.0.0.1:${port}`;
|
|
464
674
|
const server = createServer(toNodeListener(app));
|
|
465
|
-
server.listen(port, () => {
|
|
675
|
+
server.listen(port, "0.0.0.0", () => {
|
|
466
676
|
console.log(` alab ready at http://localhost:${port}`);
|
|
467
677
|
});
|
|
468
678
|
},
|
package/dist/server/app.js.map
CHANGED
|
@@ -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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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../../src/server/cache.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AASH,mEAAmE;AACnE,QAAA,MAAM,UAAU,EAAE,OAAO,MAAkC,CAAC;
|
|
1
|
+
{"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../../src/server/cache.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AASH,mEAAmE;AACnE,QAAA,MAAM,UAAU,EAAE,OAAO,MAAkC,CAAC;AAgB5D,OAAO,EAAE,UAAU,EAAE,CAAC;AAEtB,0EAA0E;AAC1E,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,GAAG,OAAO,UAAU,CAWlE;AAED,yEAAyE;AACzE,wBAAgB,QAAQ,CACtB,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,OAAO,EACb,IAAI,EAAE;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAA;CAAE,GACrC,IAAI,CAUN;AAED;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE;IAAE,IAAI,EAAE,MAAM,EAAE,CAAA;CAAE,GAAG,IAAI,CAM9D;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAEpD;AAkBD;;;GAGG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,OAAO,CAAA;CAAE,GAAG,IAAI,CAavF;AAED,uDAAuD;AACvD,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,GAAE,MAAM,EAAO,GAAG,IAAI,CAKpG;AAED,8EAA8E;AAC9E,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAG3D;AAED,wEAAwE;AACxE,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAE5D;AAED;;;;;;;;GAQG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAErD;AAED;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAIzD;AAED;;;;;;;;;GASG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE;IAAE,IAAI,EAAE,MAAM,EAAE,CAAA;CAAE,GAAG,IAAI,CAS5D;AAED,iFAAiF;AACjF,wBAAgB,YAAY,IAAI,KAAK,CAAC;IACpC,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC,CASD"}
|
package/dist/server/cache.js
CHANGED
|
@@ -19,7 +19,18 @@
|
|
|
19
19
|
*/
|
|
20
20
|
/** Sentinel value returned when a cache key has no valid entry. */
|
|
21
21
|
const CACHE_MISS = Symbol("alab:cache_miss");
|
|
22
|
-
/**
|
|
22
|
+
/**
|
|
23
|
+
* Global in-process LRU cache. Shared across all server function calls.
|
|
24
|
+
*
|
|
25
|
+
* Max size is capped to prevent unbounded memory growth in long-running servers.
|
|
26
|
+
* When the cap is reached, the oldest entry (by insertion order) is evicted.
|
|
27
|
+
*
|
|
28
|
+
* ⚠️ Multi-tenant note: this cache is process-wide and shared across all
|
|
29
|
+
* requests. In multi-tenant deployments, cache keys MUST include a tenant
|
|
30
|
+
* identifier (e.g. `tenant:${tenantId}:posts`) to prevent data leakage
|
|
31
|
+
* between tenants.
|
|
32
|
+
*/
|
|
33
|
+
const _STORE_MAX = 2048;
|
|
23
34
|
const _store = new Map();
|
|
24
35
|
export { CACHE_MISS };
|
|
25
36
|
/** Retrieve a cached value. Returns `CACHE_MISS` if absent or expired. */
|
|
@@ -31,10 +42,17 @@ export function getCached(key) {
|
|
|
31
42
|
_store.delete(key);
|
|
32
43
|
return CACHE_MISS;
|
|
33
44
|
}
|
|
45
|
+
// Move to end (LRU: mark as recently used)
|
|
46
|
+
_store.delete(key);
|
|
47
|
+
_store.set(key, entry);
|
|
34
48
|
return entry.data;
|
|
35
49
|
}
|
|
36
50
|
/** Store a value in the cache with a TTL (seconds) and optional tags. */
|
|
37
51
|
export function setCache(key, data, opts) {
|
|
52
|
+
// Evict oldest entry when at capacity
|
|
53
|
+
if (_store.size >= _STORE_MAX && !_store.has(key)) {
|
|
54
|
+
_store.delete(_store.keys().next().value);
|
|
55
|
+
}
|
|
38
56
|
_store.set(key, {
|
|
39
57
|
data,
|
|
40
58
|
expires: Date.now() + opts.ttl * 1_000,
|
|
@@ -64,6 +82,7 @@ export function invalidateCache(opts) {
|
|
|
64
82
|
export function invalidateCacheKey(key) {
|
|
65
83
|
_store.delete(key);
|
|
66
84
|
}
|
|
85
|
+
const _PAGE_STORE_MAX = 1024;
|
|
67
86
|
const _pageStore = new Map();
|
|
68
87
|
/**
|
|
69
88
|
* Retrieve a cached HTML page. Returns `null` if absent or fully expired
|
|
@@ -78,8 +97,8 @@ export function getCachedPage(pathname) {
|
|
|
78
97
|
if (now <= entry.expires)
|
|
79
98
|
return { html: entry.html, stale: false };
|
|
80
99
|
// Stale-while-revalidate: serve stale for up to 2× TTL, trigger background regen
|
|
81
|
-
const
|
|
82
|
-
if (now <= entry.expires +
|
|
100
|
+
const swrWindow = Math.max(entry.ttl * 2 * 1_000, 60_000);
|
|
101
|
+
if (now <= entry.expires + swrWindow) {
|
|
83
102
|
return { html: entry.html, stale: true };
|
|
84
103
|
}
|
|
85
104
|
_pageStore.delete(pathname);
|
|
@@ -87,7 +106,10 @@ export function getCachedPage(pathname) {
|
|
|
87
106
|
}
|
|
88
107
|
/** Store a rendered HTML page with a TTL (seconds). */
|
|
89
108
|
export function setCachedPage(pathname, html, ttl, tags = []) {
|
|
90
|
-
_pageStore.
|
|
109
|
+
if (_pageStore.size >= _PAGE_STORE_MAX && !_pageStore.has(pathname)) {
|
|
110
|
+
_pageStore.delete(_pageStore.keys().next().value);
|
|
111
|
+
}
|
|
112
|
+
_pageStore.set(pathname, { html, expires: Date.now() + ttl * 1_000, ttl, revalidating: false, tags });
|
|
91
113
|
}
|
|
92
114
|
/** Mark a page as currently being revalidated to prevent concurrent regen. */
|
|
93
115
|
export function markPageRevalidating(pathname) {
|