@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,173 @@
1
+ // catmint dev — Start development server with HMR
2
+ import { resolve, basename } from "node:path";
3
+ import { networkInterfaces } from "node:os";
4
+ import { watch } from "node:fs";
5
+ import { createServer } from "vite";
6
+ import { loadConfig } from "catmint/config";
7
+ import { scanRoutes } from "catmint/routing";
8
+ import { loadEnv } from "catmint/env";
9
+ import catmintVite from "@catmint/vite";
10
+ const VERSION = "0.1.0";
11
+ function parseFlags(args) {
12
+ const flags = {};
13
+ for (let i = 0; i < args.length; i++) {
14
+ const arg = args[i];
15
+ if (arg.startsWith("--")) {
16
+ const [key, val] = arg.slice(2).split("=");
17
+ flags[key] = val ?? args[++i] ?? true;
18
+ }
19
+ }
20
+ return flags;
21
+ }
22
+ /**
23
+ * Get the local network address for display.
24
+ */
25
+ function getNetworkAddress() {
26
+ const interfaces = networkInterfaces();
27
+ for (const name of Object.keys(interfaces)) {
28
+ const addrs = interfaces[name];
29
+ if (!addrs)
30
+ continue;
31
+ for (const addr of addrs) {
32
+ if (addr.family === "IPv4" && !addr.internal) {
33
+ return addr.address;
34
+ }
35
+ }
36
+ }
37
+ return undefined;
38
+ }
39
+ /**
40
+ * Build a formatted route table for display.
41
+ */
42
+ function formatRouteTable(routes) {
43
+ const lines = [];
44
+ for (const route of routes) {
45
+ const file = basename(route.filePath);
46
+ if (route.type === "page") {
47
+ lines.push(` GET ${padEnd(route.pattern, 20)} → ${file}`);
48
+ }
49
+ else if (route.methods && route.methods.length > 0) {
50
+ for (const method of route.methods) {
51
+ const m = method === "default" ? "ALL" : method;
52
+ lines.push(` ${padEnd(m, 6)}${padEnd(route.pattern, 20)} → ${file}`);
53
+ }
54
+ }
55
+ else {
56
+ lines.push(` ALL ${padEnd(route.pattern, 20)} → ${file}`);
57
+ }
58
+ }
59
+ if (lines.length === 0) {
60
+ lines.push(" (no routes found)");
61
+ }
62
+ // Calculate box width
63
+ const maxLen = Math.max(...lines.map((l) => l.length), 20);
64
+ const boxWidth = maxLen + 4;
65
+ const top = ` ┌${"─".repeat(boxWidth)}┐`;
66
+ const bottom = ` └${"─".repeat(boxWidth)}┘`;
67
+ const header = ` │ Routes:${" ".repeat(boxWidth - 10)}│`;
68
+ const boxedLines = lines.map((l) => ` │${l}${" ".repeat(boxWidth - l.length)}│`);
69
+ return [top, header, ...boxedLines, bottom].join("\n");
70
+ }
71
+ function padEnd(str, len) {
72
+ return str.length >= len ? str + " " : str + " ".repeat(len - str.length + 1);
73
+ }
74
+ /**
75
+ * Start the Catmint development server.
76
+ *
77
+ * Features:
78
+ * - Built on Vite for fast HMR
79
+ * - Watches `app/` directory for route changes
80
+ * - Regenerates route types automatically
81
+ * - Proxies server function calls to the dev server
82
+ */
83
+ export async function dev(args) {
84
+ const flags = parseFlags(args);
85
+ const rootDir = process.cwd();
86
+ // Load config
87
+ const config = await loadConfig(rootDir);
88
+ // Load env files (dev mode: .env and .env.local, NOT .env.production*)
89
+ loadEnv(rootDir, "development");
90
+ // Determine port and host from flags or config
91
+ const port = typeof flags.port === "string"
92
+ ? parseInt(flags.port, 10)
93
+ : config.server.port;
94
+ const host = typeof flags.host === "string" ? flags.host : "localhost";
95
+ const open = flags.open === true;
96
+ // Scan routes for initial display
97
+ const appDir = resolve(rootDir, "app");
98
+ let routes;
99
+ try {
100
+ routes = await scanRoutes(appDir);
101
+ }
102
+ catch {
103
+ routes = [];
104
+ }
105
+ // Display startup info
106
+ console.log();
107
+ console.log(` catmint v${VERSION} dev server`);
108
+ console.log();
109
+ console.log(formatRouteTable(routes));
110
+ console.log();
111
+ console.log(` Local: http://${host}:${port}`);
112
+ const networkAddr = getNetworkAddress();
113
+ if (networkAddr) {
114
+ console.log(` Network: http://${networkAddr}:${port}`);
115
+ }
116
+ console.log();
117
+ // Create Vite dev server with Catmint plugin
118
+ // Merge user's vite.plugins with catmintVite() instead of overwriting
119
+ const { plugins: userPlugins, ...viteRest } = config.vite;
120
+ const server = await createServer({
121
+ root: rootDir,
122
+ server: {
123
+ port,
124
+ host,
125
+ open,
126
+ },
127
+ plugins: [
128
+ ...(Array.isArray(userPlugins) ? userPlugins : []),
129
+ catmintVite({
130
+ mdx: {
131
+ remarkPlugins: config.mdx.remarkPlugins,
132
+ rehypePlugins: config.mdx.rehypePlugins,
133
+ },
134
+ softNavigation: config.navigation.soft,
135
+ i18n: config.i18n,
136
+ }),
137
+ ],
138
+ ...viteRest,
139
+ });
140
+ await server.listen();
141
+ // Watch app/ directory for route changes
142
+ try {
143
+ const watcher = watch(appDir, { recursive: true }, async (eventType, filename) => {
144
+ if (!filename)
145
+ return;
146
+ const base = basename(filename);
147
+ if (base === "page.tsx" ||
148
+ base === "page.jsx" ||
149
+ base === "page.mdx" ||
150
+ base === "endpoint.ts" ||
151
+ base === "endpoint.js") {
152
+ try {
153
+ const updatedRoutes = await scanRoutes(appDir);
154
+ console.log();
155
+ console.log(" Routes updated:");
156
+ console.log(formatRouteTable(updatedRoutes));
157
+ console.log();
158
+ }
159
+ catch (err) {
160
+ console.error(" Failed to rescan routes:", err);
161
+ }
162
+ }
163
+ });
164
+ // Cleanup on server close
165
+ server.httpServer?.on("close", () => {
166
+ watcher.close();
167
+ });
168
+ }
169
+ catch {
170
+ // app/ directory may not exist yet — that's ok
171
+ }
172
+ }
173
+ //# sourceMappingURL=dev.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dev.js","sourceRoot":"","sources":["../../src/commands/dev.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Regenerate route types and manifests.
3
+ *
4
+ * Scans the `app/` directory and generates:
5
+ * - `.catmint/routes.d.ts` — Type-safe route manifest
6
+ * - `env.d.ts` — Environment variable type declarations
7
+ */
8
+ export declare function generate(_args: string[]): Promise<void>;
9
+ //# sourceMappingURL=generate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate.d.ts","sourceRoot":"","sources":["../../src/commands/generate.ts"],"names":[],"mappings":"AAsIA;;;;;;GAMG;AACH,wBAAsB,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA4C7D"}
@@ -0,0 +1,160 @@
1
+ // catmint generate — Regenerate route types and manifests
2
+ import { resolve, join, relative } from "node:path";
3
+ import { existsSync, readFileSync } from "node:fs";
4
+ import { mkdir, writeFile } from "node:fs/promises";
5
+ import { loadConfig } from "catmint/config";
6
+ import { scanRoutes } from "catmint/routing";
7
+ import { parseEnvFile } from "catmint/env";
8
+ /**
9
+ * Build a TypeScript type string for a route's params.
10
+ */
11
+ function buildParamsType(route) {
12
+ const params = [];
13
+ for (const seg of route.segments) {
14
+ if (seg.paramName) {
15
+ switch (seg.type) {
16
+ case "dynamic":
17
+ params.push(`${seg.paramName}: string`);
18
+ break;
19
+ case "catch-all":
20
+ params.push(`${seg.paramName}: string[]`);
21
+ break;
22
+ case "optional-catch-all":
23
+ params.push(`${seg.paramName}?: string[]`);
24
+ break;
25
+ }
26
+ }
27
+ }
28
+ if (params.length === 0) {
29
+ return "Record<string, never>";
30
+ }
31
+ return `{ ${params.join("; ")} }`;
32
+ }
33
+ /**
34
+ * Generate the .catmint/routes.d.ts content.
35
+ */
36
+ function generateRouteTypes(routes) {
37
+ const lines = [];
38
+ lines.push("// Auto-generated by catmint generate — do not edit manually");
39
+ lines.push("// This file provides type-safe route definitions");
40
+ lines.push("");
41
+ lines.push("declare module 'catmint/routing' {");
42
+ lines.push(" interface RouteMap {");
43
+ for (const route of routes) {
44
+ const paramsType = buildParamsType(route);
45
+ lines.push(` "${route.pattern}": ${paramsType};`);
46
+ }
47
+ lines.push(" }");
48
+ lines.push("}");
49
+ lines.push("");
50
+ return lines.join("\n");
51
+ }
52
+ /**
53
+ * Collect all env variable keys from .env files in the project root.
54
+ */
55
+ function collectEnvKeys(rootDir) {
56
+ const envFiles = [
57
+ ".env",
58
+ ".env.local",
59
+ ".env.production",
60
+ ".env.production.local",
61
+ ];
62
+ const allKeys = new Set();
63
+ for (const fileName of envFiles) {
64
+ const filePath = resolve(rootDir, fileName);
65
+ if (!existsSync(filePath))
66
+ continue;
67
+ try {
68
+ const content = readFileSync(filePath, "utf-8");
69
+ const parsed = parseEnvFile(content);
70
+ for (const key of Object.keys(parsed)) {
71
+ allKeys.add(key);
72
+ }
73
+ }
74
+ catch {
75
+ // Skip unreadable files
76
+ }
77
+ }
78
+ const publicKeys = [];
79
+ const privateKeys = [];
80
+ for (const key of Array.from(allKeys).sort()) {
81
+ if (key.startsWith("CATMINT_PUBLIC_")) {
82
+ // Strip the prefix for the PublicEnv interface
83
+ publicKeys.push(key.slice("CATMINT_PUBLIC_".length));
84
+ }
85
+ else {
86
+ privateKeys.push(key);
87
+ }
88
+ }
89
+ return { publicKeys, privateKeys };
90
+ }
91
+ /**
92
+ * Generate the env.d.ts content.
93
+ */
94
+ function generateEnvTypes(publicKeys, privateKeys) {
95
+ const lines = [];
96
+ lines.push("// Auto-generated by catmint generate — do not edit manually");
97
+ lines.push("// This file provides type-safe environment variable access");
98
+ lines.push("// and ambient type declarations for asset imports (CSS, images, etc.)");
99
+ lines.push("");
100
+ lines.push('/// <reference types="catmint/client" />');
101
+ lines.push("");
102
+ lines.push("declare module 'catmint/env' {");
103
+ lines.push(" interface PublicEnv {");
104
+ for (const key of publicKeys) {
105
+ lines.push(` ${key}: string;`);
106
+ }
107
+ lines.push(" }");
108
+ lines.push("");
109
+ lines.push(" interface PrivateEnv {");
110
+ for (const key of privateKeys) {
111
+ lines.push(` ${key}: string;`);
112
+ }
113
+ lines.push(" }");
114
+ lines.push("}");
115
+ lines.push("");
116
+ return lines.join("\n");
117
+ }
118
+ /**
119
+ * Regenerate route types and manifests.
120
+ *
121
+ * Scans the `app/` directory and generates:
122
+ * - `.catmint/routes.d.ts` — Type-safe route manifest
123
+ * - `env.d.ts` — Environment variable type declarations
124
+ */
125
+ export async function generate(_args) {
126
+ const rootDir = process.cwd();
127
+ // Load config
128
+ const config = await loadConfig(rootDir);
129
+ console.log();
130
+ console.log(" catmint generate");
131
+ console.log();
132
+ // 1. Scan routes
133
+ const appDir = resolve(rootDir, "app");
134
+ let routes = [];
135
+ try {
136
+ routes = await scanRoutes(appDir);
137
+ }
138
+ catch (err) {
139
+ console.warn(" Warning: Failed to scan routes:", err);
140
+ }
141
+ // 2. Generate .catmint/routes.d.ts
142
+ const catmintDir = resolve(rootDir, ".catmint");
143
+ await mkdir(catmintDir, { recursive: true });
144
+ const routeTypesContent = generateRouteTypes(routes);
145
+ const routeTypesPath = join(catmintDir, "routes.d.ts");
146
+ await writeFile(routeTypesPath, routeTypesContent, "utf-8");
147
+ console.log(` Generated ${relative(rootDir, routeTypesPath)}`);
148
+ console.log(` ${routes.length} route(s) discovered`);
149
+ // 3. Generate env.d.ts from .env files
150
+ const { publicKeys, privateKeys } = collectEnvKeys(rootDir);
151
+ const envTypesContent = generateEnvTypes(publicKeys, privateKeys);
152
+ const envTypesPath = join(rootDir, "env.d.ts");
153
+ await writeFile(envTypesPath, envTypesContent, "utf-8");
154
+ console.log(` Generated ${relative(rootDir, envTypesPath)}`);
155
+ console.log(` ${publicKeys.length} public var(s), ${privateKeys.length} private var(s)`);
156
+ console.log();
157
+ console.log(" Done!");
158
+ console.log();
159
+ }
160
+ //# sourceMappingURL=generate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate.js","sourceRoot":"","sources":["../../src/commands/generate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Start the Catmint production server.
3
+ *
4
+ * Loads the RSC and SSR build entries and serves pages using the
5
+ * RSC flight protocol → SSR HTML rendering pipeline.
6
+ */
7
+ export declare function start(args: string[]): Promise<void>;
8
+ //# sourceMappingURL=start.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"start.d.ts","sourceRoot":"","sources":["../../src/commands/start.ts"],"names":[],"mappings":"AAoJA;;;;;GAKG;AACH,wBAAsB,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA4azD"}