@catmint/cli 0.0.0-prealpha.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.
@@ -0,0 +1,529 @@
1
+ // catmint build — Production build
2
+ import { resolve, join, relative } from "node:path";
3
+ import { existsSync, readdirSync, statSync, readFileSync } from "node:fs";
4
+ import { mkdir, cp, writeFile } from "node:fs/promises";
5
+ import { createHash, randomUUID } from "node:crypto";
6
+ import { createRequire } from "node:module";
7
+ import { createBuilder } from "vite";
8
+ import { loadConfig } from "catmint/config";
9
+ import { scanRoutes } from "catmint/routing";
10
+ import { loadEnv } from "catmint/env";
11
+ import catmintVite, { buildEntriesPlugin, scanStatusPages, } from "@catmint/vite";
12
+ import { scanComponentFiles, scanStaticAssets } from "../scan-utils.js";
13
+ function parseFlags(args) {
14
+ const flags = {};
15
+ for (let i = 0; i < args.length; i++) {
16
+ const arg = args[i];
17
+ if (arg.startsWith("--")) {
18
+ const [key, val] = arg.slice(2).split("=");
19
+ flags[key] = val ?? args[++i] ?? true;
20
+ }
21
+ }
22
+ return flags;
23
+ }
24
+ /**
25
+ * Generate a content-based build ID from the output directory.
26
+ */
27
+ function generateBuildId(dir) {
28
+ const hash = createHash("sha256");
29
+ function walkDir(d) {
30
+ if (!existsSync(d))
31
+ return;
32
+ const entries = readdirSync(d);
33
+ for (const entry of entries.sort()) {
34
+ const fullPath = join(d, entry);
35
+ const s = statSync(fullPath);
36
+ if (s.isDirectory()) {
37
+ walkDir(fullPath);
38
+ }
39
+ else {
40
+ hash.update(entry);
41
+ hash.update(readFileSync(fullPath));
42
+ }
43
+ }
44
+ }
45
+ walkDir(dir);
46
+ return hash.digest("hex").slice(0, 16);
47
+ }
48
+ /**
49
+ * Copy a directory recursively.
50
+ */
51
+ async function copyDir(src, dest) {
52
+ if (!existsSync(src))
53
+ return;
54
+ await mkdir(dest, { recursive: true });
55
+ await cp(src, dest, { recursive: true });
56
+ }
57
+ /**
58
+ * Format bytes into human-readable size.
59
+ */
60
+ function formatSize(bytes) {
61
+ if (bytes < 1024)
62
+ return `${bytes} B`;
63
+ if (bytes < 1024 * 1024)
64
+ return `${(bytes / 1024).toFixed(1)} kB`;
65
+ return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;
66
+ }
67
+ /**
68
+ * Calculate the total size of a directory.
69
+ */
70
+ function dirSize(dir) {
71
+ if (!existsSync(dir))
72
+ return 0;
73
+ let total = 0;
74
+ const entries = readdirSync(dir);
75
+ for (const entry of entries) {
76
+ const fullPath = join(dir, entry);
77
+ const s = statSync(fullPath);
78
+ if (s.isDirectory()) {
79
+ total += dirSize(fullPath);
80
+ }
81
+ else {
82
+ total += s.size;
83
+ }
84
+ }
85
+ return total;
86
+ }
87
+ /**
88
+ * Recursively scan a directory for `.fn.ts` files.
89
+ */
90
+ function scanServerFnFiles(dir) {
91
+ const results = [];
92
+ if (!existsSync(dir))
93
+ return results;
94
+ const entries = readdirSync(dir);
95
+ for (const entry of entries) {
96
+ const fullPath = join(dir, entry);
97
+ const s = statSync(fullPath);
98
+ if (s.isDirectory()) {
99
+ results.push(...scanServerFnFiles(fullPath));
100
+ }
101
+ else if (/\.fn\.(ts|tsx)$/.test(entry)) {
102
+ results.push(fullPath);
103
+ }
104
+ }
105
+ return results;
106
+ }
107
+ /**
108
+ * Extract exported names from a `.fn.ts` file using regex.
109
+ * Handles: export const, export function, export default, export { ... }
110
+ */
111
+ function extractExports(filePath) {
112
+ const code = readFileSync(filePath, "utf-8");
113
+ const exports = [];
114
+ // export const foo = ...
115
+ for (const match of code.matchAll(/export\s+const\s+(\w+)\s*=/g)) {
116
+ exports.push(match[1]);
117
+ }
118
+ // export let foo = ...
119
+ for (const match of code.matchAll(/export\s+let\s+(\w+)\s*=/g)) {
120
+ exports.push(match[1]);
121
+ }
122
+ // export function foo(...)
123
+ for (const match of code.matchAll(/export\s+function\s+(\w+)\s*\(/g)) {
124
+ exports.push(match[1]);
125
+ }
126
+ // export async function foo(...)
127
+ for (const match of code.matchAll(/export\s+async\s+function\s+(\w+)\s*\(/g)) {
128
+ exports.push(match[1]);
129
+ }
130
+ // export default
131
+ if (/export\s+default\s/.test(code)) {
132
+ exports.push("default");
133
+ }
134
+ return [...new Set(exports)];
135
+ }
136
+ /**
137
+ * Compute a deterministic hash (same algorithm as @catmint/vite/utils).
138
+ */
139
+ function deterministicHash(input) {
140
+ return createHash("sha256").update(input).digest("hex").slice(0, 8);
141
+ }
142
+ /**
143
+ * Normalize path separators to forward slashes.
144
+ */
145
+ function toPosixPath(p) {
146
+ return p.split(/[\\/]/).join("/");
147
+ }
148
+ /**
149
+ * Extract `cachedRoute()` options from a page source file using SWC AST analysis.
150
+ *
151
+ * Parses the file with SWC and walks the AST to find the default export.
152
+ * If it's a `cachedRoute(handler, options)` call, extracts the options object
153
+ * (revalidate, tag, staleWhileRevalidate) from the second argument.
154
+ *
155
+ * This approach is robust against code examples in string literals, JSX content,
156
+ * and unusual formatting — unlike regex-based extraction.
157
+ *
158
+ * Returns null if the file doesn't use cachedRoute as its default export.
159
+ */
160
+ function extractCacheOptions(filePath) {
161
+ if (!existsSync(filePath))
162
+ return null;
163
+ // Only analyze TypeScript/JavaScript page files, not MDX documentation
164
+ if (!/\.(tsx?|jsx?)$/.test(filePath))
165
+ return null;
166
+ const code = readFileSync(filePath, "utf-8");
167
+ // Quick bail-out: if the file doesn't mention cachedRoute at all, skip parsing
168
+ if (!code.includes("cachedRoute"))
169
+ return null;
170
+ let ast;
171
+ try {
172
+ // Lazy-import SWC (already a dependency via catmint/config)
173
+ // Use createRequire for ESM compatibility since this module uses ESM imports
174
+ const esmRequire = createRequire(import.meta.url);
175
+ const { parseSync } = esmRequire("@swc/core");
176
+ ast = parseSync(code, {
177
+ syntax: "typescript",
178
+ tsx: true,
179
+ });
180
+ }
181
+ catch {
182
+ // If SWC parsing fails (e.g., syntax error), bail out gracefully
183
+ return null;
184
+ }
185
+ // Find the default export statement
186
+ for (const node of ast.body) {
187
+ // Handle: export default cachedRoute(...)
188
+ if (node.type === "ExportDefaultExpression" &&
189
+ node.expression?.type === "CallExpression" &&
190
+ node.expression.callee?.type === "Identifier" &&
191
+ node.expression.callee.value === "cachedRoute") {
192
+ return extractOptionsFromCallArgs(node.expression.arguments);
193
+ }
194
+ // Handle: export default cachedRoute(...) where the expression is wrapped
195
+ // e.g., export default expression (already covers most cases above)
196
+ if (node.type === "ExportDefaultDeclaration" &&
197
+ node.decl?.type === "CallExpression" &&
198
+ node.decl.callee?.type === "Identifier" &&
199
+ node.decl.callee.value === "cachedRoute") {
200
+ return extractOptionsFromCallArgs(node.decl.arguments);
201
+ }
202
+ }
203
+ return null;
204
+ }
205
+ /**
206
+ * Extract cache options from the arguments array of a cachedRoute() call AST node.
207
+ *
208
+ * cachedRoute(handler, { tag: [...], revalidate: N, staleWhileRevalidate: bool })
209
+ * ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
210
+ * This is args[1] — an ObjectExpression
211
+ */
212
+ function extractOptionsFromCallArgs(args) {
213
+ if (!args || args.length < 2) {
214
+ // cachedRoute(handler) without options — mark as cached with empty options
215
+ return args?.length === 1 ? {} : null;
216
+ }
217
+ const optionsArg = args[1]?.expression;
218
+ if (!optionsArg || optionsArg.type !== "ObjectExpression") {
219
+ return {};
220
+ }
221
+ const result = {};
222
+ for (const prop of optionsArg.properties) {
223
+ if (prop.type !== "KeyValueProperty")
224
+ continue;
225
+ const key = prop.key?.type === "Identifier"
226
+ ? prop.key.value
227
+ : prop.key?.type === "StringLiteral"
228
+ ? prop.key.value
229
+ : null;
230
+ if (key === "revalidate" && prop.value?.type === "NumericLiteral") {
231
+ result.revalidate = prop.value.value;
232
+ }
233
+ if (key === "tag" && prop.value?.type === "ArrayExpression") {
234
+ const tags = [];
235
+ for (const elem of prop.value.elements) {
236
+ const expr = elem?.expression ?? elem;
237
+ if (expr?.type === "StringLiteral") {
238
+ tags.push(expr.value);
239
+ }
240
+ }
241
+ if (tags.length > 0) {
242
+ result.tags = tags;
243
+ }
244
+ }
245
+ if (key === "staleWhileRevalidate" &&
246
+ prop.value?.type === "BooleanLiteral") {
247
+ result.staleWhileRevalidate = prop.value.value;
248
+ }
249
+ }
250
+ return result;
251
+ }
252
+ /**
253
+ * Run the Catmint production build.
254
+ *
255
+ * Produces:
256
+ * - Server bundle
257
+ * - Client bundle
258
+ * - Static assets
259
+ * - app_manifest.json
260
+ */
261
+ export async function build(args) {
262
+ const startTime = performance.now();
263
+ const flags = parseFlags(args);
264
+ const rootDir = process.cwd();
265
+ // Load config
266
+ const config = await loadConfig(rootDir);
267
+ // Load env files (production mode: .env, .env.production, .env.production.local, NOT .env.local)
268
+ loadEnv(rootDir, "production");
269
+ // Override config from flags
270
+ const outDir = typeof flags.outDir === "string"
271
+ ? resolve(rootDir, flags.outDir)
272
+ : resolve(rootDir, config.build.outDir);
273
+ const sourcemap = flags.sourcemap === true || flags.sourcemap === "true"
274
+ ? true
275
+ : config.build.sourcemap;
276
+ const mode = typeof flags.mode === "string" ? flags.mode : "production";
277
+ const clientOutDir = join(outDir, "client");
278
+ // RSC build outputs to dist/rsc (RSC entry) and dist/ssr (SSR entry)
279
+ // For adapter compatibility, serverOutDir points to dist/ssr since that's
280
+ // where the SSR entry (which adapters need to serve pages) lives.
281
+ const serverOutDir = join(outDir, "ssr");
282
+ const rscOutDir = join(outDir, "rsc");
283
+ const staticOutDir = join(outDir, "static");
284
+ console.log();
285
+ console.log(" catmint build");
286
+ console.log();
287
+ // Scan routes
288
+ const appDir = resolve(rootDir, "app");
289
+ let routes = [];
290
+ try {
291
+ routes = await scanRoutes(appDir);
292
+ }
293
+ catch (err) {
294
+ console.error(" Failed to scan routes:", err);
295
+ process.exit(1);
296
+ }
297
+ // Merge user's vite.plugins with catmintVite() instead of overwriting
298
+ const { plugins: userPlugins, ...viteRest } = config.vite;
299
+ const pageRoutes = routes.filter((r) => r.type === "page");
300
+ const endpointRoutes = routes
301
+ .filter((r) => r.type === "endpoint")
302
+ .map((r) => ({
303
+ pattern: r.pattern,
304
+ filePath: r.filePath,
305
+ methods: r.methods ?? [],
306
+ }));
307
+ // Scan for server function files (.fn.ts)
308
+ const serverFnFilePaths = scanServerFnFiles(appDir);
309
+ const serverFnFiles = serverFnFilePaths.map((fp) => ({
310
+ filePath: fp,
311
+ exports: extractExports(fp),
312
+ }));
313
+ // Scan for status page files (404.tsx, 500.tsx, etc.)
314
+ const statusPages = scanStatusPages(appDir);
315
+ if (statusPages.length > 0) {
316
+ console.log(` Status pages: ${statusPages.map((sp) => `${sp.statusCode} (${sp.urlPrefix})`).join(", ")}`);
317
+ }
318
+ const buildEntries = buildEntriesPlugin({
319
+ routes: pageRoutes,
320
+ endpoints: endpointRoutes,
321
+ appDir,
322
+ serverFnFiles,
323
+ statusPages,
324
+ softNavigation: config.navigation.soft,
325
+ i18n: config.i18n,
326
+ });
327
+ // RSC build: uses createBuilder() + builder.buildApp() which triggers the
328
+ // RSC plugin's 5-step build pipeline:
329
+ // 1. Scan RSC (discover "use client" boundaries)
330
+ // 2. Scan SSR (discover "use server" boundaries)
331
+ // 3. Build RSC (real build with client reference proxies)
332
+ // 4. Build Client (client bundles + client reference chunks)
333
+ // 5. Build SSR (server-side rendering bundles)
334
+ //
335
+ // The RSC plugin handles all the complexity of reference tracking,
336
+ // client component grouping, and assets manifest generation.
337
+ const mergedPlugins = [
338
+ ...(Array.isArray(userPlugins) ? userPlugins : []),
339
+ catmintVite({
340
+ mdx: {
341
+ remarkPlugins: config.mdx.remarkPlugins,
342
+ rehypePlugins: config.mdx.rehypePlugins,
343
+ },
344
+ softNavigation: config.navigation.soft,
345
+ i18n: config.i18n,
346
+ }), // RSC enabled by default
347
+ buildEntries,
348
+ ];
349
+ console.log(" Building with RSC pipeline...");
350
+ console.log(" (5-step: scan RSC → scan SSR → build RSC → build client → build SSR)");
351
+ console.log();
352
+ const builder = await createBuilder({
353
+ root: rootDir,
354
+ mode,
355
+ build: {
356
+ sourcemap,
357
+ emptyOutDir: true,
358
+ },
359
+ // Configure per-environment entry points and output directories
360
+ environments: {
361
+ rsc: {
362
+ build: {
363
+ outDir: join(outDir, "rsc"),
364
+ rollupOptions: {
365
+ input: { index: "virtual:catmint/rsc-entry" },
366
+ },
367
+ },
368
+ },
369
+ ssr: {
370
+ build: {
371
+ outDir: join(outDir, "ssr"),
372
+ rollupOptions: {
373
+ input: { index: "virtual:catmint/ssr-rsc-entry" },
374
+ },
375
+ },
376
+ },
377
+ client: {
378
+ build: {
379
+ outDir: clientOutDir,
380
+ rollupOptions: {
381
+ input: { index: "virtual:catmint/client-rsc-entry" },
382
+ },
383
+ },
384
+ },
385
+ },
386
+ plugins: mergedPlugins,
387
+ ...viteRest,
388
+ });
389
+ // Run the 5-step build pipeline
390
+ await builder.buildApp();
391
+ // 3. Copy public assets to dist/static/
392
+ console.log(" Copying static assets...");
393
+ const publicDir = resolve(appDir, "public");
394
+ await copyDir(publicDir, staticOutDir);
395
+ // 4. Generate app_manifest.json
396
+ console.log(" Generating app manifest...");
397
+ const buildId = generateBuildId(outDir);
398
+ // Generate a bypass token for on-demand ISR (used by Vercel Prerender Functions)
399
+ const bypassToken = randomUUID();
400
+ // Extract cache options from page source files
401
+ const cacheRules = [];
402
+ const pageRoutesWithCache = routes
403
+ .filter((r) => r.type === "page")
404
+ .map((route) => {
405
+ const cacheOptions = extractCacheOptions(route.filePath);
406
+ const routeEntry = {
407
+ path: route.pattern,
408
+ type: "page",
409
+ source: relative(rootDir, route.filePath),
410
+ };
411
+ if (cacheOptions) {
412
+ routeEntry.cache = {
413
+ revalidate: cacheOptions.revalidate,
414
+ tags: cacheOptions.tags,
415
+ staleWhileRevalidate: cacheOptions.staleWhileRevalidate,
416
+ };
417
+ cacheRules.push({
418
+ path: route.pattern,
419
+ revalidate: cacheOptions.revalidate,
420
+ tags: cacheOptions.tags,
421
+ staleWhileRevalidate: cacheOptions.staleWhileRevalidate,
422
+ });
423
+ }
424
+ return routeEntry;
425
+ });
426
+ const manifest = {
427
+ version: 1,
428
+ framework: "catmint",
429
+ frameworkVersion: "0.1.0",
430
+ mode: config.mode,
431
+ buildId,
432
+ buildTimestamp: new Date().toISOString(),
433
+ config: {
434
+ mode: config.mode,
435
+ server: { port: config.server.port, host: config.server.host },
436
+ build: { target: config.build.target, sourcemap: config.build.sourcemap },
437
+ },
438
+ routes: pageRoutesWithCache,
439
+ endpoints: routes
440
+ .filter((r) => r.type === "endpoint")
441
+ .map((route) => ({
442
+ path: route.pattern,
443
+ type: "endpoint",
444
+ source: relative(rootDir, route.filePath),
445
+ methods: route.methods ?? [],
446
+ })),
447
+ serverFunctions: serverFnFiles.flatMap((file) => {
448
+ const relPath = toPosixPath(relative(rootDir, file.filePath));
449
+ return file.exports.map((name) => {
450
+ const hash = deterministicHash(`${relPath}:${name}`);
451
+ const basePath = relPath.replace(/\.(fn\.ts|fn\.tsx?)$/, "");
452
+ return {
453
+ name,
454
+ source: relPath,
455
+ hash,
456
+ path: `/__catmint/fn/${basePath}/${hash}`,
457
+ method: "POST",
458
+ };
459
+ });
460
+ }),
461
+ components: scanComponentFiles(appDir, rootDir).map((c) => ({
462
+ name: c.name,
463
+ source: c.source,
464
+ boundary: c.boundary,
465
+ chunk: deterministicHash(c.source),
466
+ })),
467
+ staticAssets: scanStaticAssets(resolve(rootDir, "public"), rootDir),
468
+ statusPages: statusPages.map((sp) => ({
469
+ statusCode: sp.statusCode,
470
+ urlPrefix: sp.urlPrefix,
471
+ })),
472
+ cache: {
473
+ rules: cacheRules,
474
+ invalidation: {
475
+ endpoint: "/__catmint/invalidate",
476
+ supportedStrategies: ["tag", "path"],
477
+ bypassToken,
478
+ },
479
+ },
480
+ output: {
481
+ server: relative(rootDir, serverOutDir),
482
+ client: relative(rootDir, clientOutDir),
483
+ static: relative(rootDir, staticOutDir),
484
+ },
485
+ };
486
+ await mkdir(outDir, { recursive: true });
487
+ await writeFile(join(outDir, "app_manifest.json"), JSON.stringify(manifest, null, 2), "utf-8");
488
+ // 5. Run adapter if configured
489
+ if (config.adapter) {
490
+ console.log(` Running adapter: ${config.adapter.name}...`);
491
+ const adapterContext = {
492
+ manifest,
493
+ serverDir: serverOutDir,
494
+ clientDir: clientOutDir,
495
+ staticDir: staticOutDir,
496
+ async writeFile(path, content) {
497
+ const fullPath = resolve(outDir, path);
498
+ await mkdir(resolve(fullPath, ".."), { recursive: true });
499
+ await writeFile(fullPath, content);
500
+ },
501
+ async copyDir(src, dest) {
502
+ await copyDir(src, dest);
503
+ },
504
+ log: (message) => console.log(` [${config.adapter.name}] ${message}`),
505
+ };
506
+ await config.adapter.adapt(adapterContext);
507
+ }
508
+ // 6. Display build summary
509
+ const elapsed = ((performance.now() - startTime) / 1000).toFixed(2);
510
+ const clientSize = dirSize(clientOutDir);
511
+ const serverSize = dirSize(serverOutDir);
512
+ const rscSize = dirSize(rscOutDir);
513
+ const staticSize = dirSize(staticOutDir);
514
+ const pageCount = routes.filter((r) => r.type === "page").length;
515
+ const endpointCount = routes.filter((r) => r.type === "endpoint").length;
516
+ console.log();
517
+ console.log(" Build complete!");
518
+ console.log();
519
+ console.log(` Output: ${relative(rootDir, outDir)}/`);
520
+ console.log(` Client: ${formatSize(clientSize)}`);
521
+ console.log(` SSR: ${formatSize(serverSize)}`);
522
+ console.log(` RSC: ${formatSize(rscSize)}`);
523
+ console.log(` Static: ${formatSize(staticSize)}`);
524
+ console.log(` Routes: ${pageCount} pages, ${endpointCount} endpoints`);
525
+ console.log(` Build ID: ${buildId}`);
526
+ console.log(` Time: ${elapsed}s`);
527
+ console.log();
528
+ }
529
+ //# sourceMappingURL=build.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build.js","sourceRoot":"","sources":["../../src/commands/build.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Start the Catmint development server.
3
+ *
4
+ * Features:
5
+ * - Built on Vite for fast HMR
6
+ * - Watches `app/` directory for route changes
7
+ * - Regenerates route types automatically
8
+ * - Proxies server function calls to the dev server
9
+ */
10
+ export declare function dev(args: string[]): Promise<void>;
11
+ //# sourceMappingURL=dev.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dev.d.ts","sourceRoot":"","sources":["../../src/commands/dev.ts"],"names":[],"mappings":"AAuFA;;;;;;;;GAQG;AACH,wBAAsB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAsGvD"}