@agent-native/core 0.4.0 → 0.4.2

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 (221) hide show
  1. package/README.md +31 -0
  2. package/dist/adapters/convex/adapter.d.ts +24 -0
  3. package/dist/adapters/convex/adapter.d.ts.map +1 -0
  4. package/dist/adapters/convex/adapter.js +125 -0
  5. package/dist/adapters/convex/adapter.js.map +1 -0
  6. package/dist/adapters/convex/index.d.ts +4 -0
  7. package/dist/adapters/convex/index.d.ts.map +1 -0
  8. package/dist/adapters/convex/index.js +3 -0
  9. package/dist/adapters/convex/index.js.map +1 -0
  10. package/dist/adapters/drizzle/adapter.d.ts +36 -0
  11. package/dist/adapters/drizzle/adapter.d.ts.map +1 -0
  12. package/dist/adapters/drizzle/adapter.js +210 -0
  13. package/dist/adapters/drizzle/adapter.js.map +1 -0
  14. package/dist/adapters/drizzle/index.d.ts +3 -0
  15. package/dist/adapters/drizzle/index.d.ts.map +1 -0
  16. package/dist/adapters/drizzle/index.js +3 -0
  17. package/dist/adapters/drizzle/index.js.map +1 -0
  18. package/dist/adapters/drizzle/schema.d.ts +146 -0
  19. package/dist/adapters/drizzle/schema.d.ts.map +1 -0
  20. package/dist/adapters/drizzle/schema.js +20 -0
  21. package/dist/adapters/drizzle/schema.js.map +1 -0
  22. package/dist/adapters/firestore/adapter.d.ts +3 -2
  23. package/dist/adapters/firestore/adapter.d.ts.map +1 -1
  24. package/dist/adapters/firestore/adapter.js +23 -6
  25. package/dist/adapters/firestore/adapter.js.map +1 -1
  26. package/dist/adapters/supabase/adapter.d.ts +2 -1
  27. package/dist/adapters/supabase/adapter.d.ts.map +1 -1
  28. package/dist/adapters/supabase/adapter.js +4 -1
  29. package/dist/adapters/supabase/adapter.js.map +1 -1
  30. package/dist/adapters/sync/config.d.ts +22 -2
  31. package/dist/adapters/sync/config.d.ts.map +1 -1
  32. package/dist/adapters/sync/config.js +175 -16
  33. package/dist/adapters/sync/config.js.map +1 -1
  34. package/dist/adapters/sync/create-file-sync.d.ts +32 -0
  35. package/dist/adapters/sync/create-file-sync.d.ts.map +1 -0
  36. package/dist/adapters/sync/create-file-sync.js +218 -0
  37. package/dist/adapters/sync/create-file-sync.js.map +1 -0
  38. package/dist/adapters/sync/file-sync.d.ts +40 -6
  39. package/dist/adapters/sync/file-sync.d.ts.map +1 -1
  40. package/dist/adapters/sync/file-sync.js +442 -97
  41. package/dist/adapters/sync/file-sync.js.map +1 -1
  42. package/dist/adapters/sync/index.d.ts +3 -2
  43. package/dist/adapters/sync/index.d.ts.map +1 -1
  44. package/dist/adapters/sync/index.js +3 -1
  45. package/dist/adapters/sync/index.js.map +1 -1
  46. package/dist/adapters/sync/merge.js +3 -2
  47. package/dist/adapters/sync/merge.js.map +1 -1
  48. package/dist/adapters/sync/types.d.ts +36 -2
  49. package/dist/adapters/sync/types.d.ts.map +1 -1
  50. package/dist/adapters/sync/types.js +22 -1
  51. package/dist/adapters/sync/types.js.map +1 -1
  52. package/dist/agent/index.d.ts +3 -0
  53. package/dist/agent/index.d.ts.map +1 -0
  54. package/dist/agent/index.js +2 -0
  55. package/dist/agent/index.js.map +1 -0
  56. package/dist/agent/production-agent.d.ts +16 -0
  57. package/dist/agent/production-agent.d.ts.map +1 -0
  58. package/dist/agent/production-agent.js +152 -0
  59. package/dist/agent/production-agent.js.map +1 -0
  60. package/dist/agent/types.d.ts +38 -0
  61. package/dist/agent/types.d.ts.map +1 -0
  62. package/dist/agent/types.js +2 -0
  63. package/dist/agent/types.js.map +1 -0
  64. package/dist/cli/create.d.ts.map +1 -1
  65. package/dist/cli/create.js +2 -0
  66. package/dist/cli/create.js.map +1 -1
  67. package/dist/cli/index.js +37 -11
  68. package/dist/cli/index.js.map +1 -1
  69. package/dist/client/PoweredByBadge.d.ts +14 -0
  70. package/dist/client/PoweredByBadge.d.ts.map +1 -0
  71. package/dist/client/PoweredByBadge.js +60 -0
  72. package/dist/client/PoweredByBadge.js.map +1 -0
  73. package/dist/client/ProductionAgentPanel.d.ts +10 -0
  74. package/dist/client/ProductionAgentPanel.d.ts.map +1 -0
  75. package/dist/client/ProductionAgentPanel.js +121 -0
  76. package/dist/client/ProductionAgentPanel.js.map +1 -0
  77. package/dist/client/Turnstile.d.ts +35 -0
  78. package/dist/client/Turnstile.d.ts.map +1 -0
  79. package/dist/client/Turnstile.js +77 -0
  80. package/dist/client/Turnstile.js.map +1 -0
  81. package/dist/client/index.d.ts +6 -0
  82. package/dist/client/index.d.ts.map +1 -1
  83. package/dist/client/index.js +6 -0
  84. package/dist/client/index.js.map +1 -1
  85. package/dist/client/use-file-sync-status.d.ts +21 -0
  86. package/dist/client/use-file-sync-status.d.ts.map +1 -0
  87. package/dist/client/use-file-sync-status.js +65 -0
  88. package/dist/client/use-file-sync-status.js.map +1 -0
  89. package/dist/client/use-session.d.ts +16 -0
  90. package/dist/client/use-session.d.ts.map +1 -0
  91. package/dist/client/use-session.js +49 -0
  92. package/dist/client/use-session.js.map +1 -0
  93. package/dist/client/useProductionAgent.d.ts +18 -0
  94. package/dist/client/useProductionAgent.d.ts.map +1 -0
  95. package/dist/client/useProductionAgent.js +135 -0
  96. package/dist/client/useProductionAgent.js.map +1 -0
  97. package/dist/db/index.d.ts +21 -0
  98. package/dist/db/index.d.ts.map +1 -0
  99. package/dist/db/index.js +17 -0
  100. package/dist/db/index.js.map +1 -0
  101. package/dist/index.browser.d.ts +1 -1
  102. package/dist/index.browser.d.ts.map +1 -1
  103. package/dist/index.browser.js +1 -1
  104. package/dist/index.browser.js.map +1 -1
  105. package/dist/index.d.ts +3 -2
  106. package/dist/index.d.ts.map +1 -1
  107. package/dist/index.js +4 -2
  108. package/dist/index.js.map +1 -1
  109. package/dist/router/index.d.ts +3 -0
  110. package/dist/router/index.d.ts.map +1 -0
  111. package/dist/router/index.js +5 -0
  112. package/dist/router/index.js.map +1 -0
  113. package/dist/scripts/core-scripts.d.ts +10 -0
  114. package/dist/scripts/core-scripts.d.ts.map +1 -0
  115. package/dist/scripts/core-scripts.js +15 -0
  116. package/dist/scripts/core-scripts.js.map +1 -0
  117. package/dist/scripts/db/exec.d.ts +11 -0
  118. package/dist/scripts/db/exec.d.ts.map +1 -0
  119. package/dist/scripts/db/exec.js +86 -0
  120. package/dist/scripts/db/exec.js.map +1 -0
  121. package/dist/scripts/db/index.d.ts +2 -0
  122. package/dist/scripts/db/index.d.ts.map +1 -0
  123. package/dist/scripts/db/index.js +6 -0
  124. package/dist/scripts/db/index.js.map +1 -0
  125. package/dist/scripts/db/query.d.ts +10 -0
  126. package/dist/scripts/db/query.d.ts.map +1 -0
  127. package/dist/scripts/db/query.js +96 -0
  128. package/dist/scripts/db/query.js.map +1 -0
  129. package/dist/scripts/db/schema.d.ts +12 -0
  130. package/dist/scripts/db/schema.d.ts.map +1 -0
  131. package/dist/scripts/db/schema.js +112 -0
  132. package/dist/scripts/db/schema.js.map +1 -0
  133. package/dist/scripts/index.d.ts +4 -0
  134. package/dist/scripts/index.d.ts.map +1 -1
  135. package/dist/scripts/index.js +4 -0
  136. package/dist/scripts/index.js.map +1 -1
  137. package/dist/scripts/runner.d.ts +3 -0
  138. package/dist/scripts/runner.d.ts.map +1 -1
  139. package/dist/scripts/runner.js +53 -14
  140. package/dist/scripts/runner.js.map +1 -1
  141. package/dist/server/auth.d.ts +59 -0
  142. package/dist/server/auth.d.ts.map +1 -0
  143. package/dist/server/auth.js +442 -0
  144. package/dist/server/auth.js.map +1 -0
  145. package/dist/server/captcha.d.ts +12 -0
  146. package/dist/server/captcha.d.ts.map +1 -0
  147. package/dist/server/captcha.js +43 -0
  148. package/dist/server/captcha.js.map +1 -0
  149. package/dist/server/create-server.d.ts +13 -10
  150. package/dist/server/create-server.d.ts.map +1 -1
  151. package/dist/server/create-server.js +41 -27
  152. package/dist/server/create-server.js.map +1 -1
  153. package/dist/server/index.d.ts +5 -1
  154. package/dist/server/index.d.ts.map +1 -1
  155. package/dist/server/index.js +6 -1
  156. package/dist/server/index.js.map +1 -1
  157. package/dist/server/missing-key.d.ts +9 -5
  158. package/dist/server/missing-key.d.ts.map +1 -1
  159. package/dist/server/missing-key.js +12 -7
  160. package/dist/server/missing-key.js.map +1 -1
  161. package/dist/server/sse.d.ts +12 -7
  162. package/dist/server/sse.d.ts.map +1 -1
  163. package/dist/server/sse.js +79 -15
  164. package/dist/server/sse.js.map +1 -1
  165. package/dist/vite/client.d.ts +28 -5
  166. package/dist/vite/client.d.ts.map +1 -1
  167. package/dist/vite/client.js +36 -15
  168. package/dist/vite/client.js.map +1 -1
  169. package/dist/vite/dev-api-server.d.ts +10 -0
  170. package/dist/vite/dev-api-server.d.ts.map +1 -0
  171. package/dist/vite/dev-api-server.js +148 -0
  172. package/dist/vite/dev-api-server.js.map +1 -0
  173. package/dist/vite/index.d.ts +2 -3
  174. package/dist/vite/index.d.ts.map +1 -1
  175. package/dist/vite/index.js +2 -3
  176. package/dist/vite/index.js.map +1 -1
  177. package/package.json +26 -17
  178. package/src/templates/default/AGENTS.md +148 -22
  179. package/src/templates/default/_gitignore +9 -5
  180. package/src/templates/default/client/entry.client.tsx +4 -0
  181. package/src/templates/default/client/entry.server.tsx +55 -0
  182. package/src/templates/default/client/root.tsx +82 -0
  183. package/src/templates/default/client/routes/_index.tsx +19 -0
  184. package/src/templates/default/client/routes.ts +4 -0
  185. package/src/templates/default/client/vite-env.d.ts +5 -0
  186. package/src/templates/default/package.json +5 -7
  187. package/src/templates/default/react-router.config.ts +6 -0
  188. package/src/templates/default/server/lib/watcher.ts +21 -0
  189. package/src/templates/default/server/plugins/auth.ts +5 -0
  190. package/src/templates/default/server/plugins/file-sync.ts +39 -0
  191. package/src/templates/default/server/routes/[...page].get.ts +12 -0
  192. package/src/templates/default/server/routes/api/events.get.ts +7 -0
  193. package/src/templates/default/server/routes/api/file-sync/status.get.ts +13 -0
  194. package/src/templates/default/server/routes/api/hello.get.ts +5 -0
  195. package/src/templates/default/tsconfig.json +9 -1
  196. package/src/templates/default/vite.config.ts +4 -1
  197. package/tsconfig.base.json +3 -1
  198. package/dist/adapters/neon/adapter.d.ts +0 -28
  199. package/dist/adapters/neon/adapter.d.ts.map +0 -1
  200. package/dist/adapters/neon/adapter.js +0 -135
  201. package/dist/adapters/neon/adapter.js.map +0 -1
  202. package/dist/adapters/neon/index.d.ts +0 -3
  203. package/dist/adapters/neon/index.d.ts.map +0 -1
  204. package/dist/adapters/neon/index.js +0 -3
  205. package/dist/adapters/neon/index.js.map +0 -1
  206. package/dist/server/production.d.ts +0 -18
  207. package/dist/server/production.d.ts.map +0 -1
  208. package/dist/server/production.js +0 -37
  209. package/dist/server/production.js.map +0 -1
  210. package/dist/vite/express-plugin.d.ts +0 -14
  211. package/dist/vite/express-plugin.d.ts.map +0 -1
  212. package/dist/vite/express-plugin.js +0 -53
  213. package/dist/vite/express-plugin.js.map +0 -1
  214. package/dist/vite/server.d.ts +0 -21
  215. package/dist/vite/server.d.ts.map +0 -1
  216. package/dist/vite/server.js +0 -68
  217. package/dist/vite/server.js.map +0 -1
  218. package/src/templates/default/index.html +0 -14
  219. package/src/templates/default/server/index.ts +0 -22
  220. package/src/templates/default/server/node-build.ts +0 -4
  221. package/src/templates/default/vite.config.server.ts +0 -3
@@ -1,5 +1,4 @@
1
- import express from "express";
2
- import cors from "cors";
1
+ import { createApp, createRouter, defineEventHandler, readBody, setResponseStatus, } from "h3";
3
2
  import fs from "fs";
4
3
  import path from "path";
5
4
  import { agentEnv } from "../shared/agent-env.js";
@@ -67,51 +66,66 @@ function upsertEnvFile(envPath, vars) {
67
66
  fs.writeFileSync(envPath, result);
68
67
  }
69
68
  /**
70
- * Create a pre-configured Express app with standard agent-native middleware:
71
- * - CORS
72
- * - JSON body parser (50mb limit)
73
- * - URL-encoded body parser
69
+ * Create a pre-configured H3 app with standard agent-native setup:
70
+ * - CORS headers via middleware
74
71
  * - /api/ping health check
75
72
  * - /api/env-status and /api/env-vars (when envKeys is provided)
73
+ *
74
+ * Returns { app, router } — mount routes on `router`.
76
75
  */
77
76
  export function createServer(options = {}) {
78
- const app = express();
79
- // Middleware
77
+ const app = createApp({
78
+ onError(error, event) {
79
+ console.error("[agent-native] Server error:", error);
80
+ },
81
+ });
82
+ // CORS middleware
80
83
  if (options.cors !== false) {
81
- app.use(cors(options.cors));
84
+ app.use(defineEventHandler((event) => {
85
+ const headers = event.node.res;
86
+ headers.setHeader("Access-Control-Allow-Origin", "*");
87
+ headers.setHeader("Access-Control-Allow-Methods", "GET,POST,PUT,PATCH,DELETE,OPTIONS");
88
+ headers.setHeader("Access-Control-Allow-Headers", "Content-Type,Authorization,X-Requested-With");
89
+ if (event.node.req.method === "OPTIONS") {
90
+ headers.writeHead(204);
91
+ headers.end();
92
+ return null;
93
+ }
94
+ }));
82
95
  }
83
- app.use(express.json({ limit: options.jsonLimit ?? "50mb" }));
84
- app.use(express.urlencoded({ extended: true }));
96
+ const router = createRouter();
97
+ app.use(router);
85
98
  // Health check
86
99
  if (!options.disablePing) {
87
- app.get("/api/ping", (_req, res) => {
100
+ router.get("/api/ping", defineEventHandler(() => {
88
101
  const message = options.pingMessage ?? process.env.PING_MESSAGE ?? "pong";
89
- res.json({ message });
90
- });
102
+ return { message };
103
+ }));
91
104
  }
92
105
  // Env key management routes
93
106
  if (options.envKeys) {
94
107
  const envKeys = options.envKeys;
95
- app.get("/api/env-status", (_req, res) => {
96
- res.json(envKeys.map((cfg) => ({
108
+ router.get("/api/env-status", defineEventHandler(() => {
109
+ return envKeys.map((cfg) => ({
97
110
  key: cfg.key,
98
111
  label: cfg.label,
99
112
  required: cfg.required ?? false,
100
113
  configured: !!process.env[cfg.key],
101
- })));
102
- });
103
- app.post("/api/env-vars", (req, res) => {
104
- const { vars } = req.body;
114
+ }));
115
+ }));
116
+ router.post("/api/env-vars", defineEventHandler(async (event) => {
117
+ const body = await readBody(event);
118
+ const { vars } = body;
105
119
  if (!Array.isArray(vars) || vars.length === 0) {
106
- res.status(400).json({ error: "vars array required" });
107
- return;
120
+ setResponseStatus(event, 400);
121
+ return { error: "vars array required" };
108
122
  }
109
123
  // Only allow keys that are in the env config
110
124
  const allowedKeys = new Set(envKeys.map((k) => k.key));
111
125
  const filtered = vars.filter((v) => allowedKeys.has(v.key));
112
126
  if (filtered.length === 0) {
113
- res.status(400).json({ error: "No recognized env keys in request" });
114
- return;
127
+ setResponseStatus(event, 400);
128
+ return { error: "No recognized env keys in request" };
115
129
  }
116
130
  // Write to .env file
117
131
  const envPath = path.join(process.cwd(), ".env");
@@ -122,9 +136,9 @@ export function createServer(options = {}) {
122
136
  }
123
137
  // Notify parent (Builder or harness) via postMessage
124
138
  agentEnv.setVars(filtered);
125
- res.json({ saved: filtered.map((v) => v.key) });
126
- });
139
+ return { saved: filtered.map((v) => v.key) };
140
+ }));
127
141
  }
128
- return app;
142
+ return { app, router };
129
143
  }
130
144
  //# sourceMappingURL=create-server.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"create-server.js","sourceRoot":"","sources":["../../src/server/create-server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"create-server.js","sourceRoot":"","sources":["../../src/server/create-server.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,9 @@
1
1
  export { createServer, type CreateServerOptions, type EnvKeyConfig, } from "./create-server.js";
2
2
  export { createFileWatcher, createSSEHandler, type FileWatcherOptions, type SSEHandlerOptions, } from "./sse.js";
3
- export { createProductionServer, type ProductionServerOptions, } from "./production.js";
3
+ export { mountAuthMiddleware, autoMountAuth, getSession, type AuthSession, type AuthOptions, } from "./auth.js";
4
4
  export { requireEnvKey, type MissingKeyResponse } from "./missing-key.js";
5
+ export { verifyCaptcha, type CaptchaVerifyResult } from "./captcha.js";
6
+ export { createProductionAgentHandler, type ScriptEntry, type ProductionAgentOptions, type ScriptTool, type AgentMessage, type AgentChatRequest, type AgentChatEvent, } from "../agent/index.js";
7
+ type NitroPluginDef = (nitroApp: any) => void | Promise<void>;
8
+ export declare function defineNitroPlugin(def: NitroPluginDef): NitroPluginDef;
5
9
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,EACZ,KAAK,mBAAmB,EACxB,KAAK,YAAY,GAClB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,iBAAiB,EACjB,gBAAgB,EAChB,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,GACvB,MAAM,UAAU,CAAC;AAClB,OAAO,EACL,sBAAsB,EACtB,KAAK,uBAAuB,GAC7B,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,aAAa,EAAE,KAAK,kBAAkB,EAAE,MAAM,kBAAkB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,EACZ,KAAK,mBAAmB,EACxB,KAAK,YAAY,GAClB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,iBAAiB,EACjB,gBAAgB,EAChB,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,GACvB,MAAM,UAAU,CAAC;AAClB,OAAO,EACL,mBAAmB,EACnB,aAAa,EACb,UAAU,EACV,KAAK,WAAW,EAChB,KAAK,WAAW,GACjB,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,aAAa,EAAE,KAAK,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAC1E,OAAO,EAAE,aAAa,EAAE,KAAK,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACvE,OAAO,EACL,4BAA4B,EAC5B,KAAK,WAAW,EAChB,KAAK,sBAAsB,EAC3B,KAAK,UAAU,EACf,KAAK,YAAY,EACjB,KAAK,gBAAgB,EACrB,KAAK,cAAc,GACpB,MAAM,mBAAmB,CAAC;AAK3B,KAAK,cAAc,GAAG,CAAC,QAAQ,EAAE,GAAG,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAC9D,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,cAAc,GAAG,cAAc,CAErE"}
@@ -1,5 +1,10 @@
1
1
  export { createServer, } from "./create-server.js";
2
2
  export { createFileWatcher, createSSEHandler, } from "./sse.js";
3
- export { createProductionServer, } from "./production.js";
3
+ export { mountAuthMiddleware, autoMountAuth, getSession, } from "./auth.js";
4
4
  export { requireEnvKey } from "./missing-key.js";
5
+ export { verifyCaptcha } from "./captcha.js";
6
+ export { createProductionAgentHandler, } from "../agent/index.js";
7
+ export function defineNitroPlugin(def) {
8
+ return def;
9
+ }
5
10
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,GAGb,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,iBAAiB,EACjB,gBAAgB,GAGjB,MAAM,UAAU,CAAC;AAClB,OAAO,EACL,sBAAsB,GAEvB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,aAAa,EAA2B,MAAM,kBAAkB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,GAGb,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,iBAAiB,EACjB,gBAAgB,GAGjB,MAAM,UAAU,CAAC;AAClB,OAAO,EACL,mBAAmB,EACnB,aAAa,EACb,UAAU,GAGX,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,aAAa,EAA2B,MAAM,kBAAkB,CAAC;AAC1E,OAAO,EAAE,aAAa,EAA4B,MAAM,cAAc,CAAC;AACvE,OAAO,EACL,4BAA4B,GAO7B,MAAM,mBAAmB,CAAC;AAM3B,MAAM,UAAU,iBAAiB,CAAC,GAAmB;IACnD,OAAO,GAAG,CAAC;AACb,CAAC"}
@@ -1,4 +1,4 @@
1
- import type { Response } from "express";
1
+ import { type H3Event } from "h3";
2
2
  export interface MissingKeyResponse {
3
3
  error: "missing_api_key";
4
4
  key: string;
@@ -7,11 +7,15 @@ export interface MissingKeyResponse {
7
7
  settingsPath: string;
8
8
  }
9
9
  /**
10
- * Check if an env var is set. If not, send a structured missing_api_key response.
11
- * Returns true if the key is missing (response was sent), false if the key exists.
10
+ * Check if an env var is set. If not, set response status and return a structured
11
+ * missing_api_key response object. Returns null if the key exists (no action needed).
12
+ *
13
+ * Usage:
14
+ * const missing = requireEnvKey(event, 'MY_KEY', 'My Service');
15
+ * if (missing) return missing;
12
16
  */
13
- export declare function requireEnvKey(res: Response, key: string, label: string, options?: {
17
+ export declare function requireEnvKey(event: H3Event, key: string, label: string, options?: {
14
18
  message?: string;
15
19
  settingsPath?: string;
16
- }): boolean;
20
+ }): MissingKeyResponse | null;
17
21
  //# sourceMappingURL=missing-key.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"missing-key.d.ts","sourceRoot":"","sources":["../../src/server/missing-key.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAExC,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,iBAAiB,CAAC;IACzB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAC3B,GAAG,EAAE,QAAQ,EACb,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,CAAA;CAAE,GACpD,OAAO,CAYT"}
1
+ {"version":3,"file":"missing-key.d.ts","sourceRoot":"","sources":["../../src/server/missing-key.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqB,KAAK,OAAO,EAAE,MAAM,IAAI,CAAC;AAErD,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,iBAAiB,CAAC;IACzB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAC3B,KAAK,EAAE,OAAO,EACd,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,CAAA;CAAE,GACpD,kBAAkB,GAAG,IAAI,CAY3B"}
@@ -1,17 +1,22 @@
1
+ import { setResponseStatus } from "h3";
1
2
  /**
2
- * Check if an env var is set. If not, send a structured missing_api_key response.
3
- * Returns true if the key is missing (response was sent), false if the key exists.
3
+ * Check if an env var is set. If not, set response status and return a structured
4
+ * missing_api_key response object. Returns null if the key exists (no action needed).
5
+ *
6
+ * Usage:
7
+ * const missing = requireEnvKey(event, 'MY_KEY', 'My Service');
8
+ * if (missing) return missing;
4
9
  */
5
- export function requireEnvKey(res, key, label, options) {
10
+ export function requireEnvKey(event, key, label, options) {
6
11
  if (process.env[key])
7
- return false;
8
- res.status(200).json({
12
+ return null;
13
+ setResponseStatus(event, 200);
14
+ return {
9
15
  error: "missing_api_key",
10
16
  key,
11
17
  label,
12
18
  message: options?.message ?? `Connect your ${label} account to see this data`,
13
19
  settingsPath: options?.settingsPath ?? "/settings",
14
- });
15
- return true;
20
+ };
16
21
  }
17
22
  //# sourceMappingURL=missing-key.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"missing-key.js","sourceRoot":"","sources":["../../src/server/missing-key.ts"],"names":[],"mappings":"AAUA;;;GAGG;AACH,MAAM,UAAU,aAAa,CAC3B,GAAa,EACb,GAAW,EACX,KAAa,EACb,OAAqD;IAErD,IAAI,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;QAAE,OAAO,KAAK,CAAC;IAEnC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;QACnB,KAAK,EAAE,iBAAiB;QACxB,GAAG;QACH,KAAK;QACL,OAAO,EACL,OAAO,EAAE,OAAO,IAAI,gBAAgB,KAAK,2BAA2B;QACtE,YAAY,EAAE,OAAO,EAAE,YAAY,IAAI,WAAW;KACtB,CAAC,CAAC;IAChC,OAAO,IAAI,CAAC;AACd,CAAC"}
1
+ {"version":3,"file":"missing-key.js","sourceRoot":"","sources":["../../src/server/missing-key.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAgB,MAAM,IAAI,CAAC;AAUrD;;;;;;;GAOG;AACH,MAAM,UAAU,aAAa,CAC3B,KAAc,EACd,GAAW,EACX,KAAa,EACb,OAAqD;IAErD,IAAI,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IAElC,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAC9B,OAAO;QACL,KAAK,EAAE,iBAAiB;QACxB,GAAG;QACH,KAAK;QACL,OAAO,EACL,OAAO,EAAE,OAAO,IAAI,gBAAgB,KAAK,2BAA2B;QACtE,YAAY,EAAE,OAAO,EAAE,YAAY,IAAI,WAAW;KACnD,CAAC;AACJ,CAAC"}
@@ -1,10 +1,8 @@
1
1
  import { type FSWatcher } from "chokidar";
2
- import { EventEmitter } from "events";
3
- import type { Request, Response } from "express";
4
2
  export type { FSWatcher } from "chokidar";
5
3
  export interface FileWatcherOptions {
6
4
  /** Glob patterns or regex to ignore. */
7
- ignored?: any;
5
+ ignored?: string | RegExp | string[];
8
6
  /** Whether to emit events for the initial file scan. Default: false (ignoreInitial: true) */
9
7
  emitInitial?: boolean;
10
8
  }
@@ -13,18 +11,25 @@ export interface FileWatcherOptions {
13
11
  * Returns a chokidar.FSWatcher that emits "all" events on file changes.
14
12
  */
15
13
  export declare function createFileWatcher(dir: string | string[], options?: FileWatcherOptions): FSWatcher;
14
+ /** Any object with on/off methods (compatible with EventEmitter, TypedEventEmitter, etc.). */
15
+ interface EventLike {
16
+ on(event: string, listener: (...args: any[]) => void): any;
17
+ off(event: string, listener: (...args: any[]) => void): any;
18
+ }
16
19
  export interface SSEHandlerOptions {
17
20
  /** Additional EventEmitters to stream events from (e.g. sync events). */
18
21
  extraEmitters?: Array<{
19
- emitter: EventEmitter;
22
+ emitter: EventLike;
20
23
  event: string;
21
24
  }>;
25
+ /** Content root for computing relative paths. If provided, absolute paths are stripped. */
26
+ contentRoot?: string;
22
27
  }
23
28
  /**
24
- * Create an Express route handler that streams Server-Sent Events for file changes.
29
+ * Create an H3 event handler that streams Server-Sent Events for file changes.
25
30
  *
26
31
  * Usage:
27
- * app.get("/api/events", createSSEHandler(watcher));
32
+ * router.get("/api/events", createSSEHandler(watcher));
28
33
  */
29
- export declare function createSSEHandler(watcher: FSWatcher, options?: SSEHandlerOptions): (req: Request, res: Response) => void;
34
+ export declare function createSSEHandler(watcher: FSWatcher, options?: SSEHandlerOptions): import("h3").EventHandler<import("h3").EventHandlerRequest, Promise<void>>;
30
35
  //# sourceMappingURL=sse.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"sse.d.ts","sourceRoot":"","sources":["../../src/server/sse.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,KAAK,SAAS,EAAE,MAAM,UAAU,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAEjD,YAAY,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAE1C,MAAM,WAAW,kBAAkB;IACjC,wCAAwC;IACxC,OAAO,CAAC,EAAE,GAAG,CAAC;IACd,6FAA6F;IAC7F,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAC/B,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,EACtB,OAAO,GAAE,kBAAuB,GAC/B,SAAS,CAKX;AAED,MAAM,WAAW,iBAAiB;IAChC,yEAAyE;IACzE,aAAa,CAAC,EAAE,KAAK,CAAC;QAAE,OAAO,EAAE,YAAY,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACjE;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,SAAS,EAClB,OAAO,GAAE,iBAAsB,GAC9B,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,KAAK,IAAI,CA8BvC"}
1
+ {"version":3,"file":"sse.d.ts","sourceRoot":"","sources":["../../src/server/sse.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,KAAK,SAAS,EAAE,MAAM,UAAU,CAAC;AAKjD,YAAY,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAE1C,MAAM,WAAW,kBAAkB;IACjC,wCAAwC;IACxC,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,EAAE,CAAC;IACrC,6FAA6F;IAC7F,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAC/B,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,EACtB,OAAO,GAAE,kBAAuB,GAC/B,SAAS,CAKX;AAED,8FAA8F;AAC9F,UAAU,SAAS;IAEjB,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,GAAG,GAAG,CAAC;IAE3D,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,GAAG,GAAG,CAAC;CAC7D;AAED,MAAM,WAAW,iBAAiB;IAChC,yEAAyE;IACzE,aAAa,CAAC,EAAE,KAAK,CAAC;QAAE,OAAO,EAAE,SAAS,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC7D,2FAA2F;IAC3F,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,SAAS,EAClB,OAAO,GAAE,iBAAsB,8EA4FhC"}
@@ -1,4 +1,6 @@
1
1
  import { watch } from "chokidar";
2
+ import path from "path";
3
+ import { defineEventHandler, createEventStream } from "h3";
2
4
  /**
3
5
  * Create a chokidar file watcher for the given directory.
4
6
  * Returns a chokidar.FSWatcher that emits "all" events on file changes.
@@ -10,35 +12,97 @@ export function createFileWatcher(dir, options = {}) {
10
12
  });
11
13
  }
12
14
  /**
13
- * Create an Express route handler that streams Server-Sent Events for file changes.
15
+ * Create an H3 event handler that streams Server-Sent Events for file changes.
14
16
  *
15
17
  * Usage:
16
- * app.get("/api/events", createSSEHandler(watcher));
18
+ * router.get("/api/events", createSSEHandler(watcher));
17
19
  */
18
20
  export function createSSEHandler(watcher, options = {}) {
19
- return (req, res) => {
20
- res.setHeader("Content-Type", "text/event-stream");
21
- res.setHeader("Cache-Control", "no-cache");
22
- res.setHeader("Connection", "keep-alive");
23
- res.flushHeaders();
21
+ const projectRoot = options.contentRoot
22
+ ? path.resolve(options.contentRoot, "..")
23
+ : null;
24
+ return defineEventHandler(async (event) => {
25
+ const stream = createEventStream(event);
26
+ let closed = false;
27
+ // --- Batch mode for startup sync bursts ---
28
+ let batchMode = false;
29
+ const pending = [];
30
+ let flushTimer = null;
31
+ const safePush = (data) => {
32
+ if (closed)
33
+ return;
34
+ try {
35
+ stream.push(data);
36
+ }
37
+ catch {
38
+ // Connection dead — events lost for this client, EventSource will reconnect
39
+ }
40
+ };
41
+ const flush = () => {
42
+ flushTimer = null;
43
+ if (closed || pending.length === 0)
44
+ return;
45
+ const batch = pending.splice(0);
46
+ safePush(JSON.stringify({ type: "batch", events: batch }));
47
+ };
48
+ const send = (evt) => {
49
+ if (closed)
50
+ return;
51
+ if (batchMode) {
52
+ pending.push(evt);
53
+ if (!flushTimer)
54
+ flushTimer = setTimeout(flush, 150);
55
+ }
56
+ else {
57
+ safePush(JSON.stringify(evt));
58
+ }
59
+ };
24
60
  const onChange = (eventName, filePath) => {
25
- res.write(`data: ${JSON.stringify({ type: eventName, path: filePath })}\n\n`);
61
+ const relPath = projectRoot
62
+ ? path.relative(projectRoot, filePath)
63
+ : filePath;
64
+ send({ source: "file", type: eventName, path: relPath });
26
65
  };
27
66
  watcher.on("all", onChange);
28
- // Subscribe to extra emitters
67
+ // Subscribe to extra emitters (sync events already have source field)
29
68
  const cleanups = [];
30
- for (const { emitter, event } of options.extraEmitters ?? []) {
69
+ for (const { emitter, event: evtName } of options.extraEmitters ?? []) {
31
70
  const handler = (data) => {
32
- res.write(`data: ${JSON.stringify(data)}\n\n`);
71
+ send(data);
33
72
  };
34
- emitter.on(event, handler);
35
- cleanups.push(() => emitter.off(event, handler));
73
+ emitter.on(evtName, handler);
74
+ cleanups.push(() => emitter.off(evtName, handler));
36
75
  }
37
- req.on("close", () => {
76
+ // Listen for batch mode signals from sync engine
77
+ for (const { emitter } of options.extraEmitters ?? []) {
78
+ const startBatch = () => {
79
+ batchMode = true;
80
+ };
81
+ const endBatch = () => {
82
+ batchMode = false;
83
+ if (flushTimer) {
84
+ clearTimeout(flushTimer);
85
+ flushTimer = null;
86
+ }
87
+ flush();
88
+ };
89
+ emitter.on("sync-burst-start", startBatch);
90
+ emitter.on("sync-burst-end", endBatch);
91
+ cleanups.push(() => {
92
+ emitter.off("sync-burst-start", startBatch);
93
+ emitter.off("sync-burst-end", endBatch);
94
+ });
95
+ }
96
+ stream.onClosed(() => {
97
+ closed = true;
98
+ if (flushTimer)
99
+ clearTimeout(flushTimer);
100
+ pending.length = 0;
38
101
  watcher.off("all", onChange);
39
102
  for (const cleanup of cleanups)
40
103
  cleanup();
41
104
  });
42
- };
105
+ return stream.send();
106
+ });
43
107
  }
44
108
  //# sourceMappingURL=sse.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"sse.js","sourceRoot":"","sources":["../../src/server/sse.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAkB,MAAM,UAAU,CAAC;AAajD;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAC/B,GAAsB,EACtB,UAA8B,EAAE;IAEhC,OAAO,KAAK,CAAC,GAAG,EAAE;QAChB,aAAa,EAAE,CAAC,OAAO,CAAC,WAAW;QACnC,OAAO,EAAE,OAAO,CAAC,OAAO;KACzB,CAAC,CAAC;AACL,CAAC;AAOD;;;;;GAKG;AACH,MAAM,UAAU,gBAAgB,CAC9B,OAAkB,EAClB,UAA6B,EAAE;IAE/B,OAAO,CAAC,GAAY,EAAE,GAAa,EAAE,EAAE;QACrC,GAAG,CAAC,SAAS,CAAC,cAAc,EAAE,mBAAmB,CAAC,CAAC;QACnD,GAAG,CAAC,SAAS,CAAC,eAAe,EAAE,UAAU,CAAC,CAAC;QAC3C,GAAG,CAAC,SAAS,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC;QAC1C,GAAG,CAAC,YAAY,EAAE,CAAC;QAEnB,MAAM,QAAQ,GAAG,CAAC,SAAiB,EAAE,QAAgB,EAAE,EAAE;YACvD,GAAG,CAAC,KAAK,CACP,SAAS,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,MAAM,CACnE,CAAC;QACJ,CAAC,CAAC;QAEF,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;QAE5B,8BAA8B;QAC9B,MAAM,QAAQ,GAAsB,EAAE,CAAC;QACvC,KAAK,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,OAAO,CAAC,aAAa,IAAI,EAAE,EAAE,CAAC;YAC7D,MAAM,OAAO,GAAG,CAAC,IAAS,EAAE,EAAE;gBAC5B,GAAG,CAAC,KAAK,CAAC,SAAS,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACjD,CAAC,CAAC;YACF,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;YAC3B,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC;QACnD,CAAC;QAED,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;YACnB,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;YAC7B,KAAK,MAAM,OAAO,IAAI,QAAQ;gBAAE,OAAO,EAAE,CAAC;QAC5C,CAAC,CAAC,CAAC;IACL,CAAC,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"sse.js","sourceRoot":"","sources":["../../src/server/sse.ts"],"names":[],"mappings":"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"}
@@ -1,12 +1,21 @@
1
1
  import type { UserConfig } from "vite";
2
- import { type ExpressPluginOptions } from "./express-plugin.js";
2
+ export interface NitroOptions {
3
+ /** Nitro deployment preset (e.g. "node", "vercel", "netlify", "cloudflare_pages"). Default: "node" */
4
+ preset?: string;
5
+ /** Source directory for server files. Default: "./server" */
6
+ srcDir?: string;
7
+ /** Routes directory name (relative to srcDir). Default: "routes" */
8
+ routesDir?: string;
9
+ /** Any additional Nitro config overrides */
10
+ [key: string]: unknown;
11
+ }
3
12
  export interface ClientConfigOptions {
4
13
  /** Port for dev server. Default: 8080 */
5
14
  port?: number;
6
15
  /** Additional Vite plugins */
7
16
  plugins?: any[];
8
- /** Express plugin options (serverEntry, etc) */
9
- express?: ExpressPluginOptions;
17
+ /** Nitro plugin options (preset, srcDir, etc) */
18
+ nitro?: NitroOptions;
10
19
  /** Override resolve aliases */
11
20
  aliases?: Record<string, string>;
12
21
  /** Override build.outDir. Default: "dist/spa" */
@@ -15,10 +24,24 @@ export interface ClientConfigOptions {
15
24
  fsAllow?: string[];
16
25
  /** Additional fs.deny patterns */
17
26
  fsDeny?: string[];
27
+ /**
28
+ * @deprecated Pass `reactRouter()` directly in the `plugins` array instead.
29
+ * Previously used to auto-load the React Router Vite plugin via require(),
30
+ * but this fails in ESM contexts. Templates should now do:
31
+ * ```ts
32
+ * import { reactRouter } from "@react-router/dev/vite";
33
+ * defineConfig({ plugins: [reactRouter()] })
34
+ * ```
35
+ */
36
+ reactRouter?: boolean | Record<string, unknown>;
18
37
  }
19
38
  /**
20
- * Create the client/SPA Vite config with sensible agent-native defaults.
21
- * Includes React SWC, path aliases, fs restrictions, and the Express dev plugin.
39
+ * Create the client Vite config with sensible agent-native defaults.
40
+ * Supports two modes:
41
+ * - Legacy SPA mode (default): React SWC plugin, client-only routing
42
+ * - React Router framework mode: SSR-capable with file-based routing
43
+ *
44
+ * Both modes include Nitro for API routes, path aliases, and fs restrictions.
22
45
  */
23
46
  export declare function defineConfig(options?: ClientConfigOptions): UserConfig;
24
47
  //# sourceMappingURL=client.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/vite/client.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAU,UAAU,EAAE,MAAM,MAAM,CAAC;AAC/C,OAAO,EAAiB,KAAK,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAE/E,MAAM,WAAW,mBAAmB;IAClC,yCAAyC;IACzC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,8BAA8B;IAC9B,OAAO,CAAC,EAAE,GAAG,EAAE,CAAC;IAChB,gDAAgD;IAChD,OAAO,CAAC,EAAE,oBAAoB,CAAC;IAC/B,+BAA+B;IAC/B,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,iDAAiD;IACjD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,gCAAgC;IAChC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,kCAAkC;IAClC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CACnB;AAmCD;;;GAGG;AACH,wBAAgB,YAAY,CAAC,OAAO,GAAE,mBAAwB,GAAG,UAAU,CA6C1E"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/vite/client.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAU,UAAU,EAAE,MAAM,MAAM,CAAC;AAK/C,MAAM,WAAW,YAAY;IAC3B,sGAAsG;IACtG,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,6DAA6D;IAC7D,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,oEAAoE;IACpE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,4CAA4C;IAC5C,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,mBAAmB;IAClC,yCAAyC;IACzC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,8BAA8B;IAC9B,OAAO,CAAC,EAAE,GAAG,EAAE,CAAC;IAChB,iDAAiD;IACjD,KAAK,CAAC,EAAE,YAAY,CAAC;IACrB,+BAA+B;IAC/B,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,iDAAiD;IACjD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,gCAAgC;IAChC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,kCAAkC;IAClC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB;;;;;;;;OAQG;IACH,WAAW,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACjD;AAmCD;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAAC,OAAO,GAAE,mBAAwB,GAAG,UAAU,CAoE1E"}
@@ -1,5 +1,7 @@
1
1
  import path from "path";
2
- import { expressPlugin } from "./express-plugin.js";
2
+ import { createRequire } from "module";
3
+ import { devApiServer } from "./dev-api-server.js";
4
+ const require = createRequire(import.meta.url);
3
5
  /**
4
6
  * Vite plugin that prevents the built-in base middleware from redirecting
5
7
  * "/" → "/app/" (or whatever the base is). When agent-native apps run with
@@ -31,21 +33,40 @@ function baseRedirectGuard() {
31
33
  };
32
34
  }
33
35
  /**
34
- * Create the client/SPA Vite config with sensible agent-native defaults.
35
- * Includes React SWC, path aliases, fs restrictions, and the Express dev plugin.
36
+ * Create the client Vite config with sensible agent-native defaults.
37
+ * Supports two modes:
38
+ * - Legacy SPA mode (default): React SWC plugin, client-only routing
39
+ * - React Router framework mode: SSR-capable with file-based routing
40
+ *
41
+ * Both modes include Nitro for API routes, path aliases, and fs restrictions.
36
42
  */
37
43
  export function defineConfig(options = {}) {
38
- // Dynamic import to keep it optional
39
- let reactPlugin;
40
- try {
41
- reactPlugin = require("@vitejs/plugin-react-swc");
42
- if (reactPlugin.default)
43
- reactPlugin = reactPlugin.default;
44
- }
45
- catch {
46
- // Will be resolved at runtime by Vite
44
+ // Check if React Router plugin was passed directly in plugins array
45
+ const hasReactRouterPlugin = options.plugins?.some((p) => p?.name === "react-router" ||
46
+ (Array.isArray(p) && p.some((pp) => pp?.name === "react-router")));
47
+ let reactTransformPlugin;
48
+ if (!hasReactRouterPlugin && !options.reactRouter) {
49
+ // Legacy SPA mode — use React SWC plugin (only when React Router is not used)
50
+ try {
51
+ reactTransformPlugin = require("@vitejs/plugin-react-swc");
52
+ if (reactTransformPlugin.default)
53
+ reactTransformPlugin = reactTransformPlugin.default;
54
+ }
55
+ catch {
56
+ // Will be resolved at runtime by Vite
57
+ }
47
58
  }
59
+ // Nitro 3.0's Vite plugin (nitro/vite) uses a FetchableDevEnvironment
60
+ // that is incompatible with Vite 7/8's DevEnvironment API. Loading it
61
+ // crashes typecheck, build, and any Vite server creation. Nitro's
62
+ // file-based routes are handled by its runtime (via the server/routes/
63
+ // directory) independently of this plugin, so we skip it entirely.
64
+ // The Nitro plugin can be re-enabled once Nitro ships a Vite 7+ compatible
65
+ // release.
66
+ const nitroPlugin = null;
48
67
  const cwd = process.cwd();
68
+ // Build the React transform plugin (only for legacy SPA mode)
69
+ const reactPluginInstance = reactTransformPlugin?.();
49
70
  return {
50
71
  server: {
51
72
  host: "::",
@@ -57,7 +78,6 @@ export function defineConfig(options = {}) {
57
78
  ".env.*",
58
79
  "*.{crt,pem}",
59
80
  "**/.git/**",
60
- "server/**",
61
81
  ...(options.fsDeny ?? []),
62
82
  ],
63
83
  },
@@ -67,8 +87,9 @@ export function defineConfig(options = {}) {
67
87
  },
68
88
  plugins: [
69
89
  baseRedirectGuard(),
70
- reactPlugin?.(),
71
- expressPlugin(options.express),
90
+ devApiServer(),
91
+ reactPluginInstance,
92
+ nitroPlugin?.(),
72
93
  ...(options.plugins ?? []),
73
94
  ].filter(Boolean),
74
95
  resolve: {
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/vite/client.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,OAAO,EAAE,aAAa,EAA6B,MAAM,qBAAqB,CAAC;AAmB/E;;;;;;;GAOG;AACH,SAAS,iBAAiB;IACxB,OAAO;QACL,IAAI,EAAE,kCAAkC;QACxC,KAAK,EAAE,OAAO;QACd,eAAe,CAAC,MAAM;YACpB,qEAAqE;YACrE,mEAAmE;YACnE,iEAAiE;YACjE,uBAAuB;YACvB,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE;gBACzC,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;gBAChC,IACE,IAAI;oBACJ,IAAI,KAAK,GAAG;oBACZ,CAAC,GAAG,CAAC,GAAG,KAAK,GAAG,IAAI,GAAG,CAAC,GAAG,KAAK,aAAa,CAAC,EAC9C,CAAC;oBACD,2DAA2D;oBAC3D,GAAG,CAAC,GAAG,GAAG,IAAI,CAAC;gBACjB,CAAC;gBACD,IAAI,EAAE,CAAC;YACT,CAAC,CAAC,CAAC;QACL,CAAC;KACF,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,YAAY,CAAC,UAA+B,EAAE;IAC5D,qCAAqC;IACrC,IAAI,WAAgB,CAAC;IACrB,IAAI,CAAC;QACH,WAAW,GAAG,OAAO,CAAC,0BAA0B,CAAC,CAAC;QAClD,IAAI,WAAW,CAAC,OAAO;YAAE,WAAW,GAAG,WAAW,CAAC,OAAO,CAAC;IAC7D,CAAC;IAAC,MAAM,CAAC;QACP,sCAAsC;IACxC,CAAC;IAED,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAE1B,OAAO;QACL,MAAM,EAAE;YACN,IAAI,EAAE,IAAI;YACV,IAAI,EAAE,OAAO,CAAC,IAAI,IAAI,IAAI;YAC1B,EAAE,EAAE;gBACF,KAAK,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;gBACxC,IAAI,EAAE;oBACJ,MAAM;oBACN,QAAQ;oBACR,aAAa;oBACb,YAAY;oBACZ,WAAW;oBACX,GAAG,CAAC,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC;iBAC1B;aACF;SACF;QACD,KAAK,EAAE;YACL,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,UAAU;SACrC;QACD,OAAO,EAAE;YACP,iBAAiB,EAAE;YACnB,WAAW,EAAE,EAAE;YACf,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC;YAC9B,GAAG,CAAC,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC;SAC3B,CAAC,MAAM,CAAC,OAAO,CAAC;QACjB,OAAO,EAAE;YACP,KAAK,EAAE;gBACL,GAAG,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,UAAU,CAAC;gBAClC,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,UAAU,CAAC;gBACxC,GAAG,OAAO,CAAC,OAAO;aACnB;SACF;KACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/vite/client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import type { Plugin } from "vite";
2
+ /**
3
+ * Vite plugin that serves H3 API routes from server/routes/api/ during dev.
4
+ *
5
+ * This replaces the disabled Nitro Vite plugin for dev-mode API route serving.
6
+ * It scans the file-based routes, imports them, and mounts them on an H3 app
7
+ * that handles /api/* requests before React Router's SSR handler.
8
+ */
9
+ export declare function devApiServer(): Plugin;
10
+ //# sourceMappingURL=dev-api-server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dev-api-server.d.ts","sourceRoot":"","sources":["../../src/vite/dev-api-server.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,EAAiB,MAAM,MAAM,CAAC;AAkIlD;;;;;;GAMG;AACH,wBAAgB,YAAY,IAAI,MAAM,CAsCrC"}