mates-fullstack 1.0.0-beta.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 (202) hide show
  1. package/README.md +311 -0
  2. package/dist/arctic-auth.d.ts +101 -0
  3. package/dist/arctic-auth.d.ts.map +1 -0
  4. package/dist/arctic-auth.js +538 -0
  5. package/dist/arctic-auth.js.map +1 -0
  6. package/dist/asset-manifest.d.ts +14 -0
  7. package/dist/asset-manifest.d.ts.map +1 -0
  8. package/dist/asset-manifest.js +102 -0
  9. package/dist/asset-manifest.js.map +1 -0
  10. package/dist/browser.d.ts +18 -0
  11. package/dist/browser.d.ts.map +1 -0
  12. package/dist/browser.js +25 -0
  13. package/dist/browser.js.map +1 -0
  14. package/dist/build-esbuild.d.ts +29 -0
  15. package/dist/build-esbuild.d.ts.map +1 -0
  16. package/dist/build-esbuild.js +699 -0
  17. package/dist/build-esbuild.js.map +1 -0
  18. package/dist/build-prod.d.ts +126 -0
  19. package/dist/build-prod.d.ts.map +1 -0
  20. package/dist/build-prod.js +1014 -0
  21. package/dist/build-prod.js.map +1 -0
  22. package/dist/cli-new.d.ts +14 -0
  23. package/dist/cli-new.d.ts.map +1 -0
  24. package/dist/cli-new.js +637 -0
  25. package/dist/cli-new.js.map +1 -0
  26. package/dist/client.d.ts +43 -0
  27. package/dist/client.d.ts.map +1 -0
  28. package/dist/client.js +130 -0
  29. package/dist/client.js.map +1 -0
  30. package/dist/cors.d.ts +16 -0
  31. package/dist/cors.d.ts.map +1 -0
  32. package/dist/cors.js +60 -0
  33. package/dist/cors.js.map +1 -0
  34. package/dist/ctx.d.ts +78 -0
  35. package/dist/ctx.d.ts.map +1 -0
  36. package/dist/ctx.js +280 -0
  37. package/dist/ctx.js.map +1 -0
  38. package/dist/dev-watcher.d.ts +23 -0
  39. package/dist/dev-watcher.d.ts.map +1 -0
  40. package/dist/dev-watcher.js +136 -0
  41. package/dist/dev-watcher.js.map +1 -0
  42. package/dist/docs-generator.d.ts +69 -0
  43. package/dist/docs-generator.d.ts.map +1 -0
  44. package/dist/docs-generator.js +557 -0
  45. package/dist/docs-generator.js.map +1 -0
  46. package/dist/docs-page.d.ts +20 -0
  47. package/dist/docs-page.d.ts.map +1 -0
  48. package/dist/docs-page.js +1152 -0
  49. package/dist/docs-page.js.map +1 -0
  50. package/dist/download.d.ts +78 -0
  51. package/dist/download.d.ts.map +1 -0
  52. package/dist/download.js +202 -0
  53. package/dist/download.js.map +1 -0
  54. package/dist/env-loader.d.ts +76 -0
  55. package/dist/env-loader.d.ts.map +1 -0
  56. package/dist/env-loader.js +213 -0
  57. package/dist/env-loader.js.map +1 -0
  58. package/dist/errors.d.ts +146 -0
  59. package/dist/errors.d.ts.map +1 -0
  60. package/dist/errors.js +386 -0
  61. package/dist/errors.js.map +1 -0
  62. package/dist/head.d.ts +31 -0
  63. package/dist/head.d.ts.map +1 -0
  64. package/dist/head.js +245 -0
  65. package/dist/head.js.map +1 -0
  66. package/dist/index.d.ts +30 -0
  67. package/dist/index.d.ts.map +1 -0
  68. package/dist/index.js +30 -0
  69. package/dist/index.js.map +1 -0
  70. package/dist/internal-prefixes.d.ts +16 -0
  71. package/dist/internal-prefixes.d.ts.map +1 -0
  72. package/dist/internal-prefixes.js +16 -0
  73. package/dist/internal-prefixes.js.map +1 -0
  74. package/dist/internal.d.ts +25 -0
  75. package/dist/internal.d.ts.map +1 -0
  76. package/dist/internal.js +25 -0
  77. package/dist/internal.js.map +1 -0
  78. package/dist/jwt.d.ts +166 -0
  79. package/dist/jwt.d.ts.map +1 -0
  80. package/dist/jwt.js +261 -0
  81. package/dist/jwt.js.map +1 -0
  82. package/dist/log.d.ts +44 -0
  83. package/dist/log.d.ts.map +1 -0
  84. package/dist/log.js +66 -0
  85. package/dist/log.js.map +1 -0
  86. package/dist/logger.d.ts +76 -0
  87. package/dist/logger.d.ts.map +1 -0
  88. package/dist/logger.js +138 -0
  89. package/dist/logger.js.map +1 -0
  90. package/dist/main-runner.d.ts +59 -0
  91. package/dist/main-runner.d.ts.map +1 -0
  92. package/dist/main-runner.js +157 -0
  93. package/dist/main-runner.js.map +1 -0
  94. package/dist/mates-auth.d.ts +82 -0
  95. package/dist/mates-auth.d.ts.map +1 -0
  96. package/dist/mates-auth.js +323 -0
  97. package/dist/mates-auth.js.map +1 -0
  98. package/dist/middleware.d.ts +30 -0
  99. package/dist/middleware.d.ts.map +1 -0
  100. package/dist/middleware.js +67 -0
  101. package/dist/middleware.js.map +1 -0
  102. package/dist/project-resolver.d.ts +102 -0
  103. package/dist/project-resolver.d.ts.map +1 -0
  104. package/dist/project-resolver.js +271 -0
  105. package/dist/project-resolver.js.map +1 -0
  106. package/dist/rate-limit.d.ts +37 -0
  107. package/dist/rate-limit.d.ts.map +1 -0
  108. package/dist/rate-limit.js +109 -0
  109. package/dist/rate-limit.js.map +1 -0
  110. package/dist/redirect.d.ts +84 -0
  111. package/dist/redirect.d.ts.map +1 -0
  112. package/dist/redirect.js +105 -0
  113. package/dist/redirect.js.map +1 -0
  114. package/dist/renderer.d.ts +91 -0
  115. package/dist/renderer.d.ts.map +1 -0
  116. package/dist/renderer.js +630 -0
  117. package/dist/renderer.js.map +1 -0
  118. package/dist/request-logger.d.ts +12 -0
  119. package/dist/request-logger.d.ts.map +1 -0
  120. package/dist/request-logger.js +55 -0
  121. package/dist/request-logger.js.map +1 -0
  122. package/dist/rest.d.ts +25 -0
  123. package/dist/rest.d.ts.map +1 -0
  124. package/dist/rest.js +93 -0
  125. package/dist/rest.js.map +1 -0
  126. package/dist/router.d.ts +71 -0
  127. package/dist/router.d.ts.map +1 -0
  128. package/dist/router.js +222 -0
  129. package/dist/router.js.map +1 -0
  130. package/dist/rpc-registry.d.ts +84 -0
  131. package/dist/rpc-registry.d.ts.map +1 -0
  132. package/dist/rpc-registry.js +271 -0
  133. package/dist/rpc-registry.js.map +1 -0
  134. package/dist/rpc-runner.d.ts +82 -0
  135. package/dist/rpc-runner.d.ts.map +1 -0
  136. package/dist/rpc-runner.js +564 -0
  137. package/dist/rpc-runner.js.map +1 -0
  138. package/dist/sanitize.d.ts +61 -0
  139. package/dist/sanitize.d.ts.map +1 -0
  140. package/dist/sanitize.js +193 -0
  141. package/dist/sanitize.js.map +1 -0
  142. package/dist/security-headers.d.ts +114 -0
  143. package/dist/security-headers.d.ts.map +1 -0
  144. package/dist/security-headers.js +121 -0
  145. package/dist/security-headers.js.map +1 -0
  146. package/dist/server-fn.d.ts +323 -0
  147. package/dist/server-fn.d.ts.map +1 -0
  148. package/dist/server-fn.js +373 -0
  149. package/dist/server-fn.js.map +1 -0
  150. package/dist/server-public.d.ts +13 -0
  151. package/dist/server-public.d.ts.map +1 -0
  152. package/dist/server-public.js +12 -0
  153. package/dist/server-public.js.map +1 -0
  154. package/dist/server-timeout.d.ts +38 -0
  155. package/dist/server-timeout.d.ts.map +1 -0
  156. package/dist/server-timeout.js +46 -0
  157. package/dist/server-timeout.js.map +1 -0
  158. package/dist/server.d.ts +100 -0
  159. package/dist/server.d.ts.map +1 -0
  160. package/dist/server.js +1218 -0
  161. package/dist/server.js.map +1 -0
  162. package/dist/socket-router.d.ts +153 -0
  163. package/dist/socket-router.d.ts.map +1 -0
  164. package/dist/socket-router.js +612 -0
  165. package/dist/socket-router.js.map +1 -0
  166. package/dist/sso.d.ts +90 -0
  167. package/dist/sso.d.ts.map +1 -0
  168. package/dist/sso.js +261 -0
  169. package/dist/sso.js.map +1 -0
  170. package/dist/ssr-context.d.ts +49 -0
  171. package/dist/ssr-context.d.ts.map +1 -0
  172. package/dist/ssr-context.js +85 -0
  173. package/dist/ssr-context.js.map +1 -0
  174. package/dist/ssr-globals.d.ts +32 -0
  175. package/dist/ssr-globals.d.ts.map +1 -0
  176. package/dist/ssr-globals.js +1010 -0
  177. package/dist/ssr-globals.js.map +1 -0
  178. package/dist/ssr-template.d.ts +73 -0
  179. package/dist/ssr-template.d.ts.map +1 -0
  180. package/dist/ssr-template.js +507 -0
  181. package/dist/ssr-template.js.map +1 -0
  182. package/dist/stack-mapper.d.ts +25 -0
  183. package/dist/stack-mapper.d.ts.map +1 -0
  184. package/dist/stack-mapper.js +139 -0
  185. package/dist/stack-mapper.js.map +1 -0
  186. package/dist/stream.d.ts +89 -0
  187. package/dist/stream.d.ts.map +1 -0
  188. package/dist/stream.js +299 -0
  189. package/dist/stream.js.map +1 -0
  190. package/dist/upload.d.ts +69 -0
  191. package/dist/upload.d.ts.map +1 -0
  192. package/dist/upload.js +110 -0
  193. package/dist/upload.js.map +1 -0
  194. package/dist/validate.d.ts +58 -0
  195. package/dist/validate.d.ts.map +1 -0
  196. package/dist/validate.js +89 -0
  197. package/dist/validate.js.map +1 -0
  198. package/dist/verify-package.d.ts +3 -0
  199. package/dist/verify-package.d.ts.map +1 -0
  200. package/dist/verify-package.js +128 -0
  201. package/dist/verify-package.js.map +1 -0
  202. package/package.json +79 -0
@@ -0,0 +1,637 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * mates-fullstack — CLI entry point. Pure Node.js — no Bun APIs.
4
+ *
5
+ * Commands:
6
+ * mates-fullstack dev — bundled dev server with reload
7
+ * mates-fullstack build — production build
8
+ * mates-fullstack start — production server
9
+ * mates-fullstack prod — build then start (kills port first)
10
+ * mates-fullstack ssg — static site generation
11
+ * mates-fullstack build-spa — SPA build
12
+ */
13
+ import { execSync } from "node:child_process";
14
+ import fs from "node:fs";
15
+ import path from "node:path";
16
+ function cleanDist(projectRoot) {
17
+ const dist = path.join(projectRoot, "dist");
18
+ if (fs.existsSync(dist)) {
19
+ fs.rmSync(dist, { recursive: true, force: true });
20
+ }
21
+ fs.mkdirSync(dist, { recursive: true });
22
+ log("cleaned dist/");
23
+ }
24
+ import { findProductionAssets } from "./asset-manifest.js";
25
+ import { RUNTIME_RELOAD_ENDPOINT } from "./internal-prefixes.js";
26
+ import { loadEnv } from "./env-loader.js";
27
+ import { findMatesPath, findProjectRoot, formatPaths, resolveProductionRuntimePaths, resolveProjectPaths, warnMissingPaths, } from "./project-resolver.js";
28
+ // ─── Logging helpers ──────────────────────────────────────────────────────────
29
+ function log(msg) {
30
+ console.log(`\x1b[36m[mates]\x1b[0m ${msg}`);
31
+ }
32
+ function logError(msg) {
33
+ console.error(`\x1b[31m[mates error]\x1b[0m ${msg}`);
34
+ }
35
+ function logWarn(msg) {
36
+ console.warn(`\x1b[33m[mates warn]\x1b[0m ${msg}`);
37
+ }
38
+ function killPort(port) {
39
+ try {
40
+ execSync(`lsof -ti:${port} | xargs kill -9`, { stdio: "ignore" });
41
+ }
42
+ catch {
43
+ // Port not in use — nothing to kill
44
+ }
45
+ }
46
+ // ─── dev ──────────────────────────────────────────────────────────────────────
47
+ async function dev() {
48
+ const projectRoot = findProjectRoot(process.cwd());
49
+ loadEnv(projectRoot, "development");
50
+ const paths = resolveProjectPaths(projectRoot);
51
+ killPort(paths.port);
52
+ warnMissingPaths(paths, logWarn);
53
+ log(`dev server — project: ${path.relative(process.cwd(), projectRoot) || "."}`);
54
+ log(formatPaths(paths));
55
+ const noBundle = process.env.MATES_DEV_BUNDLE !== "true";
56
+ if (noBundle) {
57
+ log("dev mode: no-bundle source modules enabled");
58
+ }
59
+ const { buildStyles, clearCssDevState, createDevBuildContext } = await import("./build-prod.js");
60
+ const devBuildContext = await createDevBuildContext(paths);
61
+ async function runBuild(options = {}) {
62
+ log("building…");
63
+ if (noBundle) {
64
+ log("client → /_src/client/client.ts (no bundle)");
65
+ }
66
+ else {
67
+ const client = await devBuildContext.rebuildClient();
68
+ log(`client → dist/assets/${client.clientFilename}`);
69
+ }
70
+ const cssFilename = await buildStyles(projectRoot, {
71
+ minify: true,
72
+ hash: false,
73
+ outDir: path.join(paths.outDir, "assets"),
74
+ });
75
+ if (cssFilename)
76
+ log(`styles → dist/assets/${cssFilename}`);
77
+ await devBuildContext.rebuildServerRuntime({
78
+ forceRecreate: options.recreateServer ?? false,
79
+ });
80
+ log("server runtime built");
81
+ log("build complete");
82
+ }
83
+ cleanDist(projectRoot);
84
+ clearCssDevState();
85
+ await runBuild({ recreateServer: true });
86
+ const serverEntry = new URL(import.meta.url).pathname;
87
+ let child = null;
88
+ let restartTimer = null;
89
+ let reloadGeneration = Date.now();
90
+ async function startChild() {
91
+ if (child) {
92
+ await new Promise((resolve) => {
93
+ child.once("exit", resolve);
94
+ child.kill("SIGTERM");
95
+ setTimeout(() => {
96
+ try {
97
+ child?.kill("SIGKILL");
98
+ }
99
+ catch {
100
+ /* ignore */
101
+ }
102
+ resolve();
103
+ }, 3000);
104
+ });
105
+ child = null;
106
+ }
107
+ log(`starting server (generation ${reloadGeneration})`);
108
+ const { spawn } = await import("node:child_process");
109
+ child = spawn(process.execPath, [...process.execArgv, serverEntry, "start", "--dev"], {
110
+ cwd: projectRoot,
111
+ stdio: "inherit",
112
+ env: {
113
+ ...process.env,
114
+ NODE_ENV: "development",
115
+ MATES_RELOAD_GENERATION: String(reloadGeneration),
116
+ MATES_DEV_NO_BUNDLE: noBundle ? "true" : "false",
117
+ },
118
+ });
119
+ child.on("exit", (code) => {
120
+ if (code !== null && code !== 0 && code !== 143) {
121
+ logWarn(`server exited with code ${code}`);
122
+ }
123
+ });
124
+ child.on("error", (err) => {
125
+ logError(`server process error: ${err.message}`);
126
+ });
127
+ }
128
+ async function refreshChildRuntime(kind, changedPath) {
129
+ if (!child || child.exitCode !== null)
130
+ return false;
131
+ try {
132
+ const url = `http://127.0.0.1:${paths.port}${RUNTIME_RELOAD_ENDPOINT}` +
133
+ `?generation=${reloadGeneration}&kind=${kind}` +
134
+ (changedPath ? `&path=${encodeURIComponent(changedPath)}` : "");
135
+ const res = await fetch(url, { method: "POST" });
136
+ return res.ok;
137
+ }
138
+ catch {
139
+ return false;
140
+ }
141
+ }
142
+ // Accumulates whether any change in the current debounce window requires a
143
+ // full reload. CSS-only changes can be hot-swapped without reloading.
144
+ let pendingFullReload = false;
145
+ let pendingCssChangedPaths = new Set();
146
+ function isStyleOnlyChange(change) {
147
+ return change.rebuildStyles && !change.restart;
148
+ }
149
+ let pendingServerRecreate = false;
150
+ let pendingJsHmrPath = null;
151
+ function sourceUrlForChange(changePath) {
152
+ return `/_src/${changePath.split(path.sep).join("/")}`;
153
+ }
154
+ function isClientScriptChange(change) {
155
+ return (noBundle &&
156
+ !change.restart &&
157
+ /^client\/.*\.(ts|tsx|js|jsx|mjs)$/i.test(change.path));
158
+ }
159
+ function scheduleRebuildAndRefresh(change) {
160
+ if (isStyleOnlyChange(change)) {
161
+ // add/unlink change the file order — force a full rebuild.
162
+ // For plain edits, accumulate the absolute path for incremental patching.
163
+ if (change.event === "add" || change.event === "unlink") {
164
+ pendingCssChangedPaths.clear();
165
+ pendingFullReload = true;
166
+ }
167
+ else {
168
+ pendingCssChangedPaths.add(path.resolve(projectRoot, change.path));
169
+ }
170
+ }
171
+ else if (isClientScriptChange(change)) {
172
+ pendingJsHmrPath = sourceUrlForChange(change.path);
173
+ pendingCssChangedPaths.clear();
174
+ }
175
+ else {
176
+ pendingFullReload = true;
177
+ pendingJsHmrPath = null;
178
+ pendingCssChangedPaths.clear();
179
+ }
180
+ if (change.event === "add" || change.event === "unlink") {
181
+ pendingServerRecreate = true;
182
+ }
183
+ if (restartTimer)
184
+ clearTimeout(restartTimer);
185
+ restartTimer = setTimeout(async () => {
186
+ const fullReload = pendingFullReload;
187
+ const recreateServer = pendingServerRecreate;
188
+ const jsHmrPath = pendingJsHmrPath;
189
+ const cssChangedPaths = pendingCssChangedPaths;
190
+ pendingFullReload = false;
191
+ pendingServerRecreate = false;
192
+ pendingJsHmrPath = null;
193
+ pendingCssChangedPaths = new Set();
194
+ reloadGeneration = Date.now();
195
+ try {
196
+ if (fullReload) {
197
+ await runBuild({ recreateServer });
198
+ }
199
+ else if (jsHmrPath) {
200
+ // No-bundle JS: the changed module is transformed on the next browser
201
+ // import, so no rebuild is needed.
202
+ log(`client module → ${jsHmrPath} (hot-update)`);
203
+ }
204
+ else if (cssChangedPaths.size > 0) {
205
+ const { patchCssFile } = await import("./build-prod.js");
206
+ let cssFilename = null;
207
+ let usedFullRebuild = false;
208
+ for (const absPath of cssChangedPaths) {
209
+ const patched = await patchCssFile(absPath);
210
+ if (patched) {
211
+ cssFilename = patched;
212
+ }
213
+ else {
214
+ // File not in the tracked bundle (new file between debounce ticks)
215
+ // — fall back to a full rebuild so the state is refreshed.
216
+ usedFullRebuild = true;
217
+ break;
218
+ }
219
+ }
220
+ if (usedFullRebuild) {
221
+ cssFilename = await buildStyles(projectRoot, {
222
+ minify: true,
223
+ hash: false,
224
+ outDir: path.join(paths.outDir, "assets"),
225
+ });
226
+ }
227
+ const n = cssChangedPaths.size;
228
+ if (cssFilename)
229
+ log(usedFullRebuild
230
+ ? `styles → dist/assets/${cssFilename} (rebuilt)`
231
+ : `styles → dist/assets/${cssFilename} (patched ${n} file${n > 1 ? "s" : ""})`);
232
+ }
233
+ }
234
+ catch (err) {
235
+ logError(`build failed: ${err?.message ?? err}`);
236
+ return;
237
+ }
238
+ const refreshed = await refreshChildRuntime(fullReload ? "full" : jsHmrPath ? "js" : "css", jsHmrPath ?? undefined);
239
+ if (refreshed) {
240
+ log(fullReload
241
+ ? "runtime refreshed — browser will reload"
242
+ : jsHmrPath
243
+ ? "js hot-update sent"
244
+ : "css hot-update sent — no reload");
245
+ return;
246
+ }
247
+ // If the server crashed or the refresh endpoint is unavailable,
248
+ // fall back to a full restart.
249
+ log("runtime refresh failed — restarting server…");
250
+ await startChild();
251
+ }, 200);
252
+ }
253
+ const { createDevWatcher } = await import("./dev-watcher.js");
254
+ const stopWatcher = createDevWatcher(projectRoot, {
255
+ onError(error) {
256
+ logWarn(`watcher error: ${error.message}`);
257
+ },
258
+ async onChange(change) {
259
+ log(`${change.reason} — rebuilding…`);
260
+ scheduleRebuildAndRefresh(change);
261
+ },
262
+ });
263
+ await startChild();
264
+ function stop(signal) {
265
+ log(`${signal} — shutting down…`);
266
+ stopWatcher();
267
+ void devBuildContext.dispose();
268
+ if (child)
269
+ child.kill("SIGTERM");
270
+ setTimeout(() => process.exit(0), 1000);
271
+ }
272
+ process.once("SIGINT", () => stop("SIGINT"));
273
+ process.once("SIGTERM", () => stop("SIGTERM"));
274
+ await new Promise(() => { });
275
+ }
276
+ // ─── build ────────────────────────────────────────────────────────────────────
277
+ async function build() {
278
+ const projectRoot = findProjectRoot(process.cwd());
279
+ loadEnv(projectRoot, "production");
280
+ const paths = resolveProjectPaths(projectRoot);
281
+ cleanDist(projectRoot);
282
+ log("building for production…");
283
+ const { buildProduction, buildServerRuntime, buildStyles, copyPublicDir } = await import("./build-prod.js");
284
+ const client = await buildProduction({
285
+ paths,
286
+ minify: true,
287
+ sourcemap: false,
288
+ });
289
+ log(`client → dist/assets/${client.clientFilename}`);
290
+ const cssFilename = await buildStyles(projectRoot, {
291
+ minify: true,
292
+ outDir: path.join(paths.outDir, "assets"),
293
+ });
294
+ if (cssFilename)
295
+ log(`styles → dist/assets/${cssFilename}`);
296
+ const runtime = await buildServerRuntime(paths);
297
+ log(`server runtime → ${path.relative(projectRoot, runtime.serverDir)}`);
298
+ if (paths.publicDir) {
299
+ copyPublicDir(paths.publicDir, path.join(paths.outDir, "public"));
300
+ }
301
+ fs.writeFileSync(path.join(paths.outDir, "manifest.json"), JSON.stringify({
302
+ assets: {
303
+ client: client.clientFilename,
304
+ css: cssFilename,
305
+ },
306
+ server: {
307
+ app: runtime.appFile ? "server/App.js" : null,
308
+ api: runtime.apiDir ? "server/api" : null,
309
+ main: runtime.mainFile ? "server/main.js" : null,
310
+ socket: runtime.socketDir ? "server/socket" : null,
311
+ },
312
+ public: paths.publicDir ? "public" : null,
313
+ }, null, 2), "utf-8");
314
+ log("production build complete");
315
+ log(`output: ${path.relative(projectRoot, paths.outDir)}/`);
316
+ }
317
+ // ─── start ────────────────────────────────────────────────────────────────────
318
+ async function start(dev = false) {
319
+ const projectRoot = findProjectRoot(process.cwd());
320
+ loadEnv(projectRoot, dev ? "development" : "production");
321
+ const sourcePaths = resolveProjectPaths(projectRoot);
322
+ const paths = resolveProductionRuntimePaths(sourcePaths);
323
+ log(dev ? "starting dev server…" : "starting production server…");
324
+ const assetsDir = path.join(sourcePaths.outDir, "assets");
325
+ const noBundle = dev && process.env.MATES_DEV_NO_BUNDLE === "true";
326
+ let clientBundlePath = null;
327
+ let cssFilename = null;
328
+ if (!noBundle) {
329
+ try {
330
+ const assets = findProductionAssets(assetsDir, logWarn);
331
+ if (assets) {
332
+ clientBundlePath = assets.clientBundlePath;
333
+ cssFilename = assets.cssFilename;
334
+ }
335
+ }
336
+ catch (err) {
337
+ logError(err instanceof Error ? err.message : String(err));
338
+ process.exit(1);
339
+ }
340
+ }
341
+ if (!clientBundlePath && !noBundle) {
342
+ logError(`Client bundle not found in dist/assets/.\n` +
343
+ `Run 'mates-fullstack ${dev ? "dev" : "build"}' first.`);
344
+ process.exit(1);
345
+ }
346
+ // Prefer the standalone CSS bundle generated by buildStyles().
347
+ // buildProduction() may also emit client-*.css for CSS imported from JS,
348
+ // but we intentionally link the single styles*.css bundle in <head> to
349
+ // avoid flash and keep dev/prod behavior identical.
350
+ const rootManifestPath = path.join(sourcePaths.outDir, "manifest.json");
351
+ if (fs.existsSync(rootManifestPath)) {
352
+ try {
353
+ const manifest = JSON.parse(fs.readFileSync(rootManifestPath, "utf-8"));
354
+ const manifestCss = manifest?.assets?.css;
355
+ if (typeof manifestCss === "string" &&
356
+ fs.existsSync(path.join(assetsDir, manifestCss))) {
357
+ cssFilename = manifestCss;
358
+ }
359
+ }
360
+ catch {
361
+ /* ignore malformed root manifest; fall back to scanning */
362
+ }
363
+ }
364
+ if (!cssFilename && fs.existsSync(assetsDir)) {
365
+ cssFilename =
366
+ fs.readdirSync(assetsDir).find((f) => /^styles.*\.css$/.test(f)) ?? null;
367
+ }
368
+ if (noBundle) {
369
+ log(`serving: ${sourcePaths.clientEntry ? `/_src/${path.relative(projectRoot, sourcePaths.clientEntry).split(path.sep).join("/")}` : "(no client entry)"}`);
370
+ }
371
+ else if (clientBundlePath) {
372
+ log(`serving: ${path.relative(projectRoot, clientBundlePath)}`);
373
+ }
374
+ if (cssFilename)
375
+ log(`styles: /assets/${cssFilename}`);
376
+ const matesPath = findMatesPath(projectRoot);
377
+ if (paths.appFile) {
378
+ const { bootRenderer } = await import("./renderer.js");
379
+ await bootRenderer(matesPath);
380
+ try {
381
+ await import(paths.appFile);
382
+ }
383
+ catch {
384
+ /* ignore — will fail more gracefully on first request */
385
+ }
386
+ log("renderer booted");
387
+ }
388
+ else {
389
+ log("SPA mode — no SSR (client/App.ts not found)");
390
+ }
391
+ const { scanRpcFunctions } = await import("./rpc-registry.js");
392
+ const { scanSocketHandlers } = await import("./socket-router.js");
393
+ const { importMainFile } = await import("./main-runner.js");
394
+ if (paths.apiDir)
395
+ await scanRpcFunctions(paths.apiDir, dev);
396
+ if (paths.socketDir)
397
+ await scanSocketHandlers(paths.socketDir, dev);
398
+ const { setSSRApiLookup } = await import(matesPath);
399
+ const { lookupRpcFn } = await import("./rpc-registry.js");
400
+ setSSRApiLookup(lookupRpcFn);
401
+ if (paths.mainFile)
402
+ await importMainFile(paths.mainFile);
403
+ const { startServer } = await import("./server.js");
404
+ const shutdown = await startServer({
405
+ paths,
406
+ dev,
407
+ projectRoot,
408
+ clientBundlePath,
409
+ noBundle,
410
+ sourceRoot: projectRoot,
411
+ sourceClientEntry: sourcePaths.clientEntry,
412
+ sourceApiDir: sourcePaths.apiDir,
413
+ cssFilename,
414
+ matesPath,
415
+ });
416
+ log(`server running at http://localhost:${paths.port}`);
417
+ function stop(signal) {
418
+ log(`${signal} — shutting down…`);
419
+ shutdown();
420
+ setTimeout(() => process.exit(0), 5000);
421
+ }
422
+ process.once("SIGTERM", () => stop("SIGTERM"));
423
+ process.once("SIGINT", () => stop("SIGINT"));
424
+ }
425
+ // ─── prod ──────────────────────────────────────────────────────────────────────
426
+ async function prod() {
427
+ await build();
428
+ const port = parseInt(process.env.PORT ?? "3000", 10);
429
+ killPort(port);
430
+ await start();
431
+ }
432
+ // ─── build-spa ────────────────────────────────────────────────────────────────
433
+ async function buildSpa() {
434
+ const projectRoot = findProjectRoot(process.cwd());
435
+ loadEnv(projectRoot, "production");
436
+ const paths = resolveProjectPaths(projectRoot);
437
+ log("building SPA…");
438
+ const { buildProduction, buildStyles, copyPublicDir } = await import("./build-prod.js");
439
+ const client = await buildProduction({ paths, minify: true });
440
+ log(`client → dist/assets/${client.clientFilename}`);
441
+ const cssFilename = await buildStyles(projectRoot, {
442
+ minify: true,
443
+ outDir: path.join(paths.outDir, "assets"),
444
+ });
445
+ if (cssFilename)
446
+ log(`styles → dist/assets/${cssFilename}`);
447
+ if (paths.publicDir)
448
+ copyPublicDir(paths.publicDir, paths.outDir);
449
+ const indexHtml = _buildSpaShell(client.clientFilename, cssFilename);
450
+ fs.mkdirSync(paths.outDir, { recursive: true });
451
+ fs.writeFileSync(path.join(paths.outDir, "index.html"), indexHtml, "utf-8");
452
+ log(`generated index.html → ${path.relative(projectRoot, paths.outDir)}/index.html`);
453
+ if (paths.apiDir) {
454
+ log("server/api/ detected — run 'mates-fullstack start' to serve the API backend");
455
+ }
456
+ else {
457
+ log("SPA build complete. Deploy the dist/ folder to any static host.");
458
+ }
459
+ }
460
+ // ─── ssg ──────────────────────────────────────────────────────────────────────
461
+ async function ssg() {
462
+ const projectRoot = findProjectRoot(process.cwd());
463
+ loadEnv(projectRoot, "production");
464
+ const paths = resolveProjectPaths(projectRoot);
465
+ if (!paths.appFile) {
466
+ logError("client/App.ts not found — SSG requires a root App component.");
467
+ process.exit(1);
468
+ }
469
+ log("generating static site…");
470
+ const { buildProduction, buildStyles, copyPublicDir } = await import("./build-prod.js");
471
+ const client = await buildProduction({ paths, minify: true });
472
+ const cssFilename = await buildStyles(projectRoot, {
473
+ minify: true,
474
+ outDir: path.join(paths.outDir, "assets"),
475
+ });
476
+ if (paths.publicDir)
477
+ copyPublicDir(paths.publicDir, paths.outDir);
478
+ const matesPath = findMatesPath(projectRoot);
479
+ const { bootRenderer, renderApp, shutdownRenderer } = await import("./renderer.js");
480
+ await bootRenderer(matesPath);
481
+ if (paths.apiDir) {
482
+ const { scanRpcFunctions } = await import("./rpc-registry.js");
483
+ await scanRpcFunctions(paths.apiDir, false);
484
+ }
485
+ const { setSSRApiLookup } = await import(matesPath);
486
+ const { lookupRpcFn } = await import("./rpc-registry.js");
487
+ setSSRApiLookup(lookupRpcFn);
488
+ const appMod = await import(paths.appFile);
489
+ let allPathnames = ["/"];
490
+ if (Array.isArray(appMod.staticPaths))
491
+ allPathnames = appMod.staticPaths;
492
+ else if (typeof appMod.getStaticPaths === "function") {
493
+ allPathnames = await appMod.getStaticPaths();
494
+ }
495
+ log(`pre-rendering ${allPathnames.length} page(s)…`);
496
+ const { buildShell } = await import("./head.js");
497
+ for (const pathname of allPathnames) {
498
+ try {
499
+ const renderResult = await renderApp(paths.appFile, pathname, false);
500
+ const fullHtml = buildShell({
501
+ projectRoot,
502
+ bodyHtml: renderResult.html,
503
+ clientEntry: `/assets/${client.clientFilename}`,
504
+ cssUrl: cssFilename ? `/assets/${cssFilename}` : null,
505
+ dev: false,
506
+ });
507
+ const segments = pathname === "/" ? ["index"] : pathname.split("/").filter(Boolean);
508
+ const dir = path.join(paths.outDir, ...segments.slice(0, -1));
509
+ const filename = segments[segments.length - 1] + ".html";
510
+ fs.mkdirSync(dir, { recursive: true });
511
+ fs.writeFileSync(path.join(dir, filename), fullHtml, "utf-8");
512
+ log(` rendered ${pathname} → ${path.relative(projectRoot, path.join(dir, filename))}`);
513
+ }
514
+ catch (err) {
515
+ logWarn(`Failed to render ${pathname}: ${err.message}`);
516
+ }
517
+ }
518
+ shutdownRenderer();
519
+ log(`SSG complete — ${allPathnames.length} page(s) written to ${path.relative(projectRoot, paths.outDir)}/`);
520
+ }
521
+ // ─── SPA shell ────────────────────────────────────────────────────────────────
522
+ function _buildSpaShell(clientFilename, cssFilename) {
523
+ const cssLink = cssFilename
524
+ ? `\n <link rel="stylesheet" href="/assets/${cssFilename}">`
525
+ : "";
526
+ return `<!doctype html>
527
+ <html lang="en">
528
+ <head>
529
+ <meta charset="UTF-8">
530
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">${cssLink}
531
+ </head>
532
+ <body>
533
+ <div id="app"></div>
534
+ <script type="module" src="/assets/${clientFilename}"></script>
535
+ </body>
536
+ </html>
537
+ `;
538
+ }
539
+ // ─── Print help ───────────────────────────────────────────────────────────────
540
+ function printHelp() {
541
+ console.log(`
542
+ mates-fullstack — full-stack Mates framework
543
+
544
+ Usage:
545
+ mates-fullstack <command>
546
+
547
+ Commands:
548
+ dev Start the bundled development server with full reload
549
+ build Build for production (minified)
550
+ start Start the production server (run after build)
551
+ prod Build then start the production server
552
+ start --dev Start the compiled dev server after dev build
553
+ build-spa Build a pure client-side SPA (no SSR)
554
+ ssg Pre-render static pages to HTML
555
+ secret Generate a secure random secret
556
+
557
+ Project structure:
558
+ client/index.html ← HTML shell with <!-- mates:css -->, <!-- mates:ssr -->, <!-- mates:scripts -->
559
+ client/App.ts ← root SPA component
560
+ client/client.ts ← browser entry point
561
+ server/api/ ← RPC functions
562
+ server/socket/ ← WebSocket handlers
563
+ server/main.ts ← per-request middleware
564
+ public/ ← static assets
565
+ `);
566
+ }
567
+ // ─── Entry point ──────────────────────────────────────────────────────────────
568
+ const command = process.argv[2];
569
+ const isDev = process.argv.includes("--dev");
570
+ if (command === "dev" || isDev) {
571
+ process.env.NODE_ENV = "development";
572
+ }
573
+ else {
574
+ process.env.NODE_ENV = process.env.NODE_ENV ?? "production";
575
+ }
576
+ switch (command) {
577
+ case "dev":
578
+ dev().catch((err) => {
579
+ logError(err.message);
580
+ process.exit(1);
581
+ });
582
+ break;
583
+ case "build":
584
+ build()
585
+ .then(() => process.exit(0))
586
+ .catch((err) => {
587
+ logError(err.message);
588
+ process.exit(1);
589
+ });
590
+ break;
591
+ case "start":
592
+ start(isDev).catch((err) => {
593
+ logError(err.message);
594
+ process.exit(1);
595
+ });
596
+ break;
597
+ case "prod":
598
+ prod().catch((err) => {
599
+ logError(err.message);
600
+ process.exit(1);
601
+ });
602
+ break;
603
+ case "build-spa":
604
+ buildSpa()
605
+ .then(() => process.exit(0))
606
+ .catch((err) => {
607
+ logError(err.message);
608
+ process.exit(1);
609
+ });
610
+ break;
611
+ case "ssg":
612
+ ssg()
613
+ .then(() => process.exit(0))
614
+ .catch((err) => {
615
+ logError(err.message);
616
+ process.exit(1);
617
+ });
618
+ break;
619
+ case "secret": {
620
+ const { randomBytes } = await import("node:crypto");
621
+ console.log(randomBytes(32).toString("hex"));
622
+ process.exit(0);
623
+ break;
624
+ }
625
+ case "--help":
626
+ case "-h":
627
+ case "help":
628
+ case undefined:
629
+ printHelp();
630
+ process.exit(0);
631
+ break;
632
+ default:
633
+ logError(`Unknown command: "${command}"`);
634
+ printHelp();
635
+ process.exit(1);
636
+ }
637
+ //# sourceMappingURL=cli-new.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-new.js","sourceRoot":"","sources":["../src/cli-new.ts"],"names":[],"mappings":"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"}