devflare 1.0.0-next.2 → 1.0.0-next.21

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 (1442) hide show
  1. package/LLM.md +15743 -1751
  2. package/README.md +383 -605
  3. package/bin/devflare.js +14 -4
  4. package/dist/account-05zgta47.js +475 -0
  5. package/dist/account-0evqkmnc.js +475 -0
  6. package/dist/account-0v11zbzk.js +475 -0
  7. package/dist/account-2w85efas.js +475 -0
  8. package/dist/account-61gw9s7t.js +475 -0
  9. package/dist/account-65sk9q34.js +475 -0
  10. package/dist/account-77vx7q2f.js +475 -0
  11. package/dist/account-7z38mgqf.js +475 -0
  12. package/dist/account-8wgprpbt.js +475 -0
  13. package/dist/account-9gt3tej1.js +475 -0
  14. package/dist/account-b2ag1esh.js +475 -0
  15. package/dist/account-bxtcz61a.js +475 -0
  16. package/dist/account-d43d1eqs.js +475 -0
  17. package/dist/account-dtndtbad.js +475 -0
  18. package/dist/account-e95v7f4s.js +475 -0
  19. package/dist/account-fbyyptg7.js +475 -0
  20. package/dist/account-gnzhz1c9.js +475 -0
  21. package/dist/account-gyfqg964.js +475 -0
  22. package/dist/account-m6jq6fnp.js +475 -0
  23. package/dist/account-mvnfagh9.js +475 -0
  24. package/dist/account-p0crq2gh.js +475 -0
  25. package/dist/account-q6pvs9d9.js +475 -0
  26. package/dist/account-qkcevx7a.js +475 -0
  27. package/dist/account-rp4zbvw1.js +475 -0
  28. package/dist/account-txwqg1rx.js +475 -0
  29. package/dist/account-w5n5bjh2.js +475 -0
  30. package/dist/account-zd61t0ey.js +475 -0
  31. package/dist/api-11gkk043.js +33 -0
  32. package/dist/api-2n6dd2ws.js +33 -0
  33. package/dist/api-dbxvch9h.js +33 -0
  34. package/dist/api-p9hf69kr.js +33 -0
  35. package/dist/api-r10j00ev.js +33 -0
  36. package/dist/api-senf2569.js +33 -0
  37. package/dist/api-swcgnp72.js +33 -0
  38. package/dist/api-th82mps4.js +27 -0
  39. package/dist/bridge/client.d.ts +34 -6
  40. package/dist/bridge/client.d.ts.map +1 -1
  41. package/dist/bridge/gateway-runtime.d.ts +8 -0
  42. package/dist/bridge/gateway-runtime.d.ts.map +1 -0
  43. package/dist/bridge/index.d.ts +3 -3
  44. package/dist/bridge/index.d.ts.map +1 -1
  45. package/dist/bridge/log.d.ts +5 -0
  46. package/dist/bridge/log.d.ts.map +1 -0
  47. package/dist/bridge/miniflare.d.ts +73 -0
  48. package/dist/bridge/miniflare.d.ts.map +1 -1
  49. package/dist/bridge/protocol.d.ts +1 -1
  50. package/dist/bridge/protocol.d.ts.map +1 -1
  51. package/dist/bridge/proxy.d.ts +9 -11
  52. package/dist/bridge/proxy.d.ts.map +1 -1
  53. package/dist/bridge/serialization.d.ts +36 -16
  54. package/dist/bridge/serialization.d.ts.map +1 -1
  55. package/dist/bridge/server.d.ts +2 -1
  56. package/dist/bridge/server.d.ts.map +1 -1
  57. package/dist/bridge/v2/body-streams.d.ts +53 -0
  58. package/dist/bridge/v2/body-streams.d.ts.map +1 -0
  59. package/dist/bridge/v2/codec.d.ts +106 -0
  60. package/dist/bridge/v2/codec.d.ts.map +1 -0
  61. package/dist/bridge/v2/control-messages.d.ts +51 -0
  62. package/dist/bridge/v2/control-messages.d.ts.map +1 -0
  63. package/dist/bridge/v2/frames.d.ts +109 -0
  64. package/dist/bridge/v2/frames.d.ts.map +1 -0
  65. package/dist/bridge/v2/index.d.ts +11 -0
  66. package/dist/bridge/v2/index.d.ts.map +1 -0
  67. package/dist/bridge/v2/legacy-protocol.d.ts +146 -0
  68. package/dist/bridge/v2/legacy-protocol.d.ts.map +1 -0
  69. package/dist/bridge/v2/legacy-serialization.d.ts +103 -0
  70. package/dist/bridge/v2/legacy-serialization.d.ts.map +1 -0
  71. package/dist/bridge/v2/serialization.d.ts +48 -0
  72. package/dist/bridge/v2/serialization.d.ts.map +1 -0
  73. package/dist/bridge/v2/transport.d.ts +31 -0
  74. package/dist/bridge/v2/transport.d.ts.map +1 -0
  75. package/dist/bridge/v2/value-codec.d.ts +61 -0
  76. package/dist/bridge/v2/value-codec.d.ts.map +1 -0
  77. package/dist/bridge/v2/value-serialization.d.ts +103 -0
  78. package/dist/bridge/v2/value-serialization.d.ts.map +1 -0
  79. package/dist/bridge/v2/wire.d.ts +170 -0
  80. package/dist/bridge/v2/wire.d.ts.map +1 -0
  81. package/dist/bridge/v2/ws-relay.d.ts +53 -0
  82. package/dist/bridge/v2/ws-relay.d.ts.map +1 -0
  83. package/dist/browser-shim/handler.d.ts +1 -1
  84. package/dist/browser-shim/handler.d.ts.map +1 -1
  85. package/dist/browser-shim/server.d.ts +63 -0
  86. package/dist/browser-shim/server.d.ts.map +1 -1
  87. package/dist/browser.d.ts +4505 -0
  88. package/dist/browser.d.ts.map +1 -0
  89. package/dist/browser.js +145 -0
  90. package/dist/build-07mjrvsn.js +53 -0
  91. package/dist/build-0rfr8k1s.js +53 -0
  92. package/dist/build-1313sg73.js +52 -0
  93. package/dist/build-1hnntbks.js +53 -0
  94. package/dist/build-1r3myv0k.js +53 -0
  95. package/dist/build-28561w5v.js +54 -0
  96. package/dist/build-2s5paw5p.js +54 -0
  97. package/dist/build-4c350cp7.js +54 -0
  98. package/dist/build-50yqpwb3.js +54 -0
  99. package/dist/build-55z8psd6.js +53 -0
  100. package/dist/build-5b9wj2p0.js +53 -0
  101. package/dist/build-5frhzh1m.js +53 -0
  102. package/dist/build-6ye9vnab.js +52 -0
  103. package/dist/build-8gv18jrq.js +52 -0
  104. package/dist/build-9bgqypy6.js +53 -0
  105. package/dist/build-9em4ymqn.js +52 -0
  106. package/dist/build-b1z6wqet.js +54 -0
  107. package/dist/build-e7wym63t.js +54 -0
  108. package/dist/build-eh3x12qc.js +52 -0
  109. package/dist/build-emhyycp7.js +53 -0
  110. package/dist/build-f1m9jn7b.js +53 -0
  111. package/dist/build-ffe72jjv.js +54 -0
  112. package/dist/build-fx90y6za.js +53 -0
  113. package/dist/build-ge6qp3t4.js +54 -0
  114. package/dist/build-h31egsze.js +53 -0
  115. package/dist/build-hpczwagb.js +53 -0
  116. package/dist/build-hpkbanpw.js +54 -0
  117. package/dist/build-j2re91xe.js +54 -0
  118. package/dist/build-j78389rg.js +52 -0
  119. package/dist/build-m3kckn5g.js +53 -0
  120. package/dist/build-mf3thcjm.js +53 -0
  121. package/dist/build-n3n5bv37.js +52 -0
  122. package/dist/build-ngfy4v5x.js +53 -0
  123. package/dist/build-pr843h0d.js +52 -0
  124. package/dist/build-qyg2b45p.js +52 -0
  125. package/dist/build-r6884kyt.js +53 -0
  126. package/dist/build-re370wkf.js +53 -0
  127. package/dist/build-ta8c6t11.js +54 -0
  128. package/dist/build-vvndgwg0.js +52 -0
  129. package/dist/build-wp559jkf.js +54 -0
  130. package/dist/build-wvjj8f28.js +54 -0
  131. package/dist/build-x4r67275.js +52 -0
  132. package/dist/build-x7maz3eb.js +54 -0
  133. package/dist/build-xp4pfhvv.js +52 -0
  134. package/dist/build-y489r2h9.js +54 -0
  135. package/dist/build-y6g4bvx5.js +52 -0
  136. package/dist/build-ypg6f2kw.js +54 -0
  137. package/dist/build-yts8wwgf.js +54 -0
  138. package/dist/build-yvn0yhwx.js +52 -0
  139. package/dist/build-yzkdqexs.js +54 -0
  140. package/dist/build-z4vmhs5c.js +53 -0
  141. package/dist/bundler/defaults.d.ts +23 -0
  142. package/dist/bundler/defaults.d.ts.map +1 -0
  143. package/dist/bundler/do-bundler.d.ts +7 -0
  144. package/dist/bundler/do-bundler.d.ts.map +1 -1
  145. package/dist/bundler/index.d.ts +2 -0
  146. package/dist/bundler/index.d.ts.map +1 -1
  147. package/dist/bundler/rolldown-shared.d.ts +53 -0
  148. package/dist/bundler/rolldown-shared.d.ts.map +1 -0
  149. package/dist/bundler/worker-bundler.d.ts +13 -0
  150. package/dist/bundler/worker-bundler.d.ts.map +1 -0
  151. package/dist/bundler/worker-compat.d.ts +4 -0
  152. package/dist/bundler/worker-compat.d.ts.map +1 -0
  153. package/dist/cli/build-manifest.d.ts +66 -0
  154. package/dist/cli/build-manifest.d.ts.map +1 -0
  155. package/dist/cli/command-utils.d.ts +18 -0
  156. package/dist/cli/command-utils.d.ts.map +1 -0
  157. package/dist/cli/commands/account.d.ts +1 -1
  158. package/dist/cli/commands/account.d.ts.map +1 -1
  159. package/dist/cli/commands/build-artifacts.d.ts +40 -0
  160. package/dist/cli/commands/build-artifacts.d.ts.map +1 -0
  161. package/dist/cli/commands/build.d.ts.map +1 -1
  162. package/dist/cli/commands/config.d.ts +4 -0
  163. package/dist/cli/commands/config.d.ts.map +1 -0
  164. package/dist/cli/commands/deploy/metadata.d.ts +18 -0
  165. package/dist/cli/commands/deploy/metadata.d.ts.map +1 -0
  166. package/dist/cli/commands/deploy/prepare.d.ts +23 -0
  167. package/dist/cli/commands/deploy/prepare.d.ts.map +1 -0
  168. package/dist/cli/commands/deploy/runtime.d.ts +4 -0
  169. package/dist/cli/commands/deploy/runtime.d.ts.map +1 -0
  170. package/dist/cli/commands/deploy/verification.d.ts +36 -0
  171. package/dist/cli/commands/deploy/verification.d.ts.map +1 -0
  172. package/dist/cli/commands/deploy.d.ts +2 -2
  173. package/dist/cli/commands/deploy.d.ts.map +1 -1
  174. package/dist/cli/commands/dev.d.ts +1 -0
  175. package/dist/cli/commands/dev.d.ts.map +1 -1
  176. package/dist/cli/commands/doctor.d.ts.map +1 -1
  177. package/dist/cli/commands/init.d.ts.map +1 -1
  178. package/dist/cli/commands/login.d.ts +4 -0
  179. package/dist/cli/commands/login.d.ts.map +1 -0
  180. package/dist/cli/commands/previews-support/cleanup.d.ts +9 -0
  181. package/dist/cli/commands/previews-support/cleanup.d.ts.map +1 -0
  182. package/dist/cli/commands/previews-support/family.d.ts +10 -0
  183. package/dist/cli/commands/previews-support/family.d.ts.map +1 -0
  184. package/dist/cli/commands/previews-support/render.d.ts +8 -0
  185. package/dist/cli/commands/previews-support/render.d.ts.map +1 -0
  186. package/dist/cli/commands/previews-support/theme.d.ts +10 -0
  187. package/dist/cli/commands/previews-support/theme.d.ts.map +1 -0
  188. package/dist/cli/commands/previews-support/types.d.ts +70 -0
  189. package/dist/cli/commands/previews-support/types.d.ts.map +1 -0
  190. package/dist/cli/commands/previews.d.ts +4 -0
  191. package/dist/cli/commands/previews.d.ts.map +1 -0
  192. package/dist/cli/commands/productions.d.ts +4 -0
  193. package/dist/cli/commands/productions.d.ts.map +1 -0
  194. package/dist/cli/commands/secrets.d.ts +4 -0
  195. package/dist/cli/commands/secrets.d.ts.map +1 -0
  196. package/dist/cli/commands/token.d.ts +4 -0
  197. package/dist/cli/commands/token.d.ts.map +1 -0
  198. package/dist/cli/commands/type-generation/discovery.d.ts +7 -0
  199. package/dist/cli/commands/type-generation/discovery.d.ts.map +1 -0
  200. package/dist/cli/commands/type-generation/generator.d.ts +110 -0
  201. package/dist/cli/commands/type-generation/generator.d.ts.map +1 -0
  202. package/dist/cli/commands/type-generation/models.d.ts +27 -0
  203. package/dist/cli/commands/type-generation/models.d.ts.map +1 -0
  204. package/dist/cli/commands/types.d.ts.map +1 -1
  205. package/dist/cli/commands/worker.d.ts +4 -0
  206. package/dist/cli/commands/worker.d.ts.map +1 -0
  207. package/dist/cli/config-path.d.ts +6 -0
  208. package/dist/cli/config-path.d.ts.map +1 -0
  209. package/dist/cli/dependencies.d.ts +1 -0
  210. package/dist/cli/dependencies.d.ts.map +1 -1
  211. package/dist/cli/deploy-strategy.d.ts +17 -0
  212. package/dist/cli/deploy-strategy.d.ts.map +1 -0
  213. package/dist/cli/deploy-target.d.ts +17 -0
  214. package/dist/cli/deploy-target.d.ts.map +1 -0
  215. package/dist/cli/generated-artifacts.d.ts +12 -0
  216. package/dist/cli/generated-artifacts.d.ts.map +1 -0
  217. package/dist/cli/help-pages/pages/account.d.ts +3 -0
  218. package/dist/cli/help-pages/pages/account.d.ts.map +1 -0
  219. package/dist/cli/help-pages/pages/core.d.ts +4 -0
  220. package/dist/cli/help-pages/pages/core.d.ts.map +1 -0
  221. package/dist/cli/help-pages/pages/index.d.ts +3 -0
  222. package/dist/cli/help-pages/pages/index.d.ts.map +1 -0
  223. package/dist/cli/help-pages/pages/misc.d.ts +3 -0
  224. package/dist/cli/help-pages/pages/misc.d.ts.map +1 -0
  225. package/dist/cli/help-pages/pages/previews.d.ts +3 -0
  226. package/dist/cli/help-pages/pages/previews.d.ts.map +1 -0
  227. package/dist/cli/help-pages/pages/productions.d.ts +3 -0
  228. package/dist/cli/help-pages/pages/productions.d.ts.map +1 -0
  229. package/dist/cli/help-pages/render.d.ts +12 -0
  230. package/dist/cli/help-pages/render.d.ts.map +1 -0
  231. package/dist/cli/help-pages/shared.d.ts +15 -0
  232. package/dist/cli/help-pages/shared.d.ts.map +1 -0
  233. package/dist/cli/help-pages/types.d.ts +23 -0
  234. package/dist/cli/help-pages/types.d.ts.map +1 -0
  235. package/dist/cli/help.d.ts +6 -0
  236. package/dist/cli/help.d.ts.map +1 -0
  237. package/dist/cli/index.d.ts +1 -0
  238. package/dist/cli/index.d.ts.map +1 -1
  239. package/dist/cli/index.js +12 -0
  240. package/dist/cli/package-metadata.d.ts +16 -0
  241. package/dist/cli/package-metadata.d.ts.map +1 -0
  242. package/dist/cli/preview-bindings.d.ts +49 -0
  243. package/dist/cli/preview-bindings.d.ts.map +1 -0
  244. package/dist/cli/preview.d.ts +10 -0
  245. package/dist/cli/preview.d.ts.map +1 -0
  246. package/dist/cli/ui.d.ts +37 -0
  247. package/dist/cli/ui.d.ts.map +1 -0
  248. package/dist/cli/workspace-build-guard.d.ts +14 -0
  249. package/dist/cli/workspace-build-guard.d.ts.map +1 -0
  250. package/dist/cloudflare/account-core.d.ts +6 -0
  251. package/dist/cloudflare/account-core.d.ts.map +1 -0
  252. package/dist/cloudflare/account-resources.d.ts +40 -0
  253. package/dist/cloudflare/account-resources.d.ts.map +1 -0
  254. package/dist/cloudflare/account-status.d.ts +11 -0
  255. package/dist/cloudflare/account-status.d.ts.map +1 -0
  256. package/dist/cloudflare/account-workers.d.ts +14 -0
  257. package/dist/cloudflare/account-workers.d.ts.map +1 -0
  258. package/dist/cloudflare/account.d.ts +7 -64
  259. package/dist/cloudflare/account.d.ts.map +1 -1
  260. package/dist/cloudflare/api.d.ts +71 -3
  261. package/dist/cloudflare/api.d.ts.map +1 -1
  262. package/dist/cloudflare/auth.d.ts.map +1 -1
  263. package/dist/cloudflare/index.d.ts +57 -2
  264. package/dist/cloudflare/index.d.ts.map +1 -1
  265. package/dist/cloudflare/index.js +49 -2
  266. package/dist/cloudflare/known-permission-group-ids.generated.d.ts +10 -0
  267. package/dist/cloudflare/known-permission-group-ids.generated.d.ts.map +1 -0
  268. package/dist/cloudflare/kv-namespace.d.ts +4 -0
  269. package/dist/cloudflare/kv-namespace.d.ts.map +1 -0
  270. package/dist/cloudflare/preferences.d.ts +7 -0
  271. package/dist/cloudflare/preferences.d.ts.map +1 -1
  272. package/dist/cloudflare/preview-registry-cache.d.ts +6 -0
  273. package/dist/cloudflare/preview-registry-cache.d.ts.map +1 -0
  274. package/dist/cloudflare/preview-registry-inference.d.ts +14 -0
  275. package/dist/cloudflare/preview-registry-inference.d.ts.map +1 -0
  276. package/dist/cloudflare/preview-registry-records.d.ts +4 -0
  277. package/dist/cloudflare/preview-registry-records.d.ts.map +1 -0
  278. package/dist/cloudflare/preview-registry-shape.d.ts +47 -0
  279. package/dist/cloudflare/preview-registry-shape.d.ts.map +1 -0
  280. package/dist/cloudflare/preview-registry-store.d.ts +14 -0
  281. package/dist/cloudflare/preview-registry-store.d.ts.map +1 -0
  282. package/dist/cloudflare/preview-registry-transport.d.ts +4 -0
  283. package/dist/cloudflare/preview-registry-transport.d.ts.map +1 -0
  284. package/dist/cloudflare/preview-registry-types.d.ts +103 -0
  285. package/dist/cloudflare/preview-registry-types.d.ts.map +1 -0
  286. package/dist/cloudflare/preview-registry.d.ts +42 -0
  287. package/dist/cloudflare/preview-registry.d.ts.map +1 -0
  288. package/dist/cloudflare/preview-urls.d.ts +3 -0
  289. package/dist/cloudflare/preview-urls.d.ts.map +1 -0
  290. package/dist/cloudflare/registry-schema.d.ts +253 -0
  291. package/dist/cloudflare/registry-schema.d.ts.map +1 -0
  292. package/dist/cloudflare/tokens.d.ts +41 -0
  293. package/dist/cloudflare/tokens.d.ts.map +1 -0
  294. package/dist/cloudflare/types.d.ts +124 -7
  295. package/dist/cloudflare/types.d.ts.map +1 -1
  296. package/dist/cloudflare/usage.d.ts +30 -2
  297. package/dist/cloudflare/usage.d.ts.map +1 -1
  298. package/dist/config/binding-resolution-helpers.d.ts +41 -0
  299. package/dist/config/binding-resolution-helpers.d.ts.map +1 -0
  300. package/dist/config/compatibility.d.ts +3 -0
  301. package/dist/config/compatibility.d.ts.map +1 -0
  302. package/dist/config/compiler/bindings.d.ts +14 -0
  303. package/dist/config/compiler/bindings.d.ts.map +1 -0
  304. package/dist/config/compiler/core-helpers.d.ts +6 -0
  305. package/dist/config/compiler/core-helpers.d.ts.map +1 -0
  306. package/dist/config/compiler/do-workers.d.ts +34 -0
  307. package/dist/config/compiler/do-workers.d.ts.map +1 -0
  308. package/dist/config/compiler/paths.d.ts +18 -0
  309. package/dist/config/compiler/paths.d.ts.map +1 -0
  310. package/dist/config/compiler/types.d.ts +267 -0
  311. package/dist/config/compiler/types.d.ts.map +1 -0
  312. package/dist/config/compiler.d.ts +22 -134
  313. package/dist/config/compiler.d.ts.map +1 -1
  314. package/dist/config/deploy-resources.d.ts +58 -0
  315. package/dist/config/deploy-resources.d.ts.map +1 -0
  316. package/dist/config/framework-providers.d.ts +9 -0
  317. package/dist/config/framework-providers.d.ts.map +1 -0
  318. package/dist/config/index.d.ts +10 -4
  319. package/dist/config/index.d.ts.map +1 -1
  320. package/dist/config/loader.d.ts +1 -0
  321. package/dist/config/loader.d.ts.map +1 -1
  322. package/dist/config/local-dev-vars.d.ts +15 -0
  323. package/dist/config/local-dev-vars.d.ts.map +1 -0
  324. package/dist/config/preview-resources.d.ts +83 -0
  325. package/dist/config/preview-resources.d.ts.map +1 -0
  326. package/dist/config/preview.d.ts +31 -0
  327. package/dist/config/preview.d.ts.map +1 -0
  328. package/dist/config/ref.d.ts +14 -23
  329. package/dist/config/ref.d.ts.map +1 -1
  330. package/dist/config/resolve-phased.d.ts +72 -0
  331. package/dist/config/resolve-phased.d.ts.map +1 -0
  332. package/dist/config/resolve.d.ts +11 -0
  333. package/dist/config/resolve.d.ts.map +1 -0
  334. package/dist/config/resource-resolution.d.ts +80 -0
  335. package/dist/config/resource-resolution.d.ts.map +1 -0
  336. package/dist/config/schema-bindings.d.ts +1495 -0
  337. package/dist/config/schema-bindings.d.ts.map +1 -0
  338. package/dist/config/schema-build.d.ts +67 -0
  339. package/dist/config/schema-build.d.ts.map +1 -0
  340. package/dist/config/schema-env.d.ts +2949 -0
  341. package/dist/config/schema-env.d.ts.map +1 -0
  342. package/dist/config/schema-normalization.d.ts +184 -0
  343. package/dist/config/schema-normalization.d.ts.map +1 -0
  344. package/dist/config/schema-runtime.d.ts +468 -0
  345. package/dist/config/schema-runtime.d.ts.map +1 -0
  346. package/dist/config/schema.d.ts +4056 -1875
  347. package/dist/config/schema.d.ts.map +1 -1
  348. package/dist/config/service-bindings-validation.d.ts +36 -0
  349. package/dist/config/service-bindings-validation.d.ts.map +1 -0
  350. package/dist/config-1japnjmx.js +59 -0
  351. package/dist/config-287wjn1m.js +59 -0
  352. package/dist/config-4x6vq82e.js +59 -0
  353. package/dist/config-5n0avhcx.js +59 -0
  354. package/dist/config-6m0n7d84.js +59 -0
  355. package/dist/config-70s2ap5j.js +59 -0
  356. package/dist/config-7cf004ag.js +59 -0
  357. package/dist/config-7hge8ze6.js +59 -0
  358. package/dist/config-7rbp7aek.js +59 -0
  359. package/dist/config-b8xbbmta.js +59 -0
  360. package/dist/config-b98dp58n.js +59 -0
  361. package/dist/config-baee5690.js +59 -0
  362. package/dist/config-bczpc1ey.js +59 -0
  363. package/dist/config-cf3djhqy.js +59 -0
  364. package/dist/config-entry.d.ts +5 -0
  365. package/dist/config-entry.d.ts.map +1 -0
  366. package/dist/config-entry.js +14 -0
  367. package/dist/config-fhmwzaw6.js +59 -0
  368. package/dist/config-g9vkfa4x.js +59 -0
  369. package/dist/config-gpexkzth.js +59 -0
  370. package/dist/config-nspw7sgv.js +59 -0
  371. package/dist/config-ntm4x9wt.js +59 -0
  372. package/dist/config-nv6hfpg6.js +59 -0
  373. package/dist/config-pjc33wew.js +59 -0
  374. package/dist/config-pnz2e8s3.js +59 -0
  375. package/dist/config-qj5jw8km.js +93 -0
  376. package/dist/config-qts6nh6g.js +59 -0
  377. package/dist/config-sg2xrdt4.js +59 -0
  378. package/dist/config-vzwckat3.js +59 -0
  379. package/dist/config-wa7hm0w9.js +59 -0
  380. package/dist/config-x90dkmm7.js +59 -0
  381. package/dist/decorators/durable-object.d.ts.map +1 -1
  382. package/dist/deploy-1jfagtn9.js +1055 -0
  383. package/dist/deploy-1s6nv5rp.js +921 -0
  384. package/dist/deploy-2afw0jfg.js +1055 -0
  385. package/dist/deploy-2fzj68kq.js +1055 -0
  386. package/dist/deploy-30ph1rrd.js +921 -0
  387. package/dist/deploy-39dmfn9d.js +921 -0
  388. package/dist/deploy-44n2pshy.js +1016 -0
  389. package/dist/deploy-45qxpsfe.js +921 -0
  390. package/dist/deploy-57nzn9wj.js +1045 -0
  391. package/dist/deploy-64e57w1g.js +1040 -0
  392. package/dist/deploy-82j43vta.js +1040 -0
  393. package/dist/deploy-99m8qhpa.js +1041 -0
  394. package/dist/deploy-9twkd32f.js +1040 -0
  395. package/dist/deploy-a2eq2c1n.js +1040 -0
  396. package/dist/deploy-a3pb1qs5.js +921 -0
  397. package/dist/deploy-agbtfm04.js +921 -0
  398. package/dist/deploy-aswbtbf3.js +921 -0
  399. package/dist/deploy-asyryrvm.js +1055 -0
  400. package/dist/deploy-bqf3kxy5.js +972 -0
  401. package/dist/deploy-fv4z648h.js +921 -0
  402. package/dist/deploy-gsybda2f.js +1038 -0
  403. package/dist/deploy-h17nzysm.js +921 -0
  404. package/dist/deploy-hc89h4wg.js +1045 -0
  405. package/dist/deploy-hc927rw6.js +1045 -0
  406. package/dist/deploy-jey5pnqn.js +1040 -0
  407. package/dist/deploy-jf3yczsz.js +1055 -0
  408. package/dist/deploy-jv0yfqvk.js +1040 -0
  409. package/dist/deploy-kn3z6spd.js +941 -0
  410. package/dist/deploy-m22xmz9w.js +921 -0
  411. package/dist/deploy-nefp2njy.js +1038 -0
  412. package/dist/deploy-pnnf8tgy.js +1045 -0
  413. package/dist/deploy-ppp8pg6w.js +1038 -0
  414. package/dist/deploy-q33bw715.js +1055 -0
  415. package/dist/deploy-qah2eag6.js +1041 -0
  416. package/dist/deploy-qdq2gpad.js +1045 -0
  417. package/dist/deploy-r1yf8913.js +1038 -0
  418. package/dist/deploy-r8nam9rr.js +1038 -0
  419. package/dist/deploy-rrm4a0xw.js +921 -0
  420. package/dist/deploy-s0tfnc12.js +1040 -0
  421. package/dist/deploy-s636ks9k.js +1041 -0
  422. package/dist/deploy-sany8t54.js +1045 -0
  423. package/dist/deploy-skqn61j3.js +1038 -0
  424. package/dist/deploy-smv2870h.js +921 -0
  425. package/dist/deploy-sp16nxs5.js +972 -0
  426. package/dist/deploy-sr805bvq.js +921 -0
  427. package/dist/deploy-t9dehmn0.js +1041 -0
  428. package/dist/deploy-taxt7njz.js +1041 -0
  429. package/dist/deploy-tmdgecs3.js +1055 -0
  430. package/dist/deploy-tnfvfh9m.js +1040 -0
  431. package/dist/deploy-v0y8kczr.js +1055 -0
  432. package/dist/deploy-w5f8db4s.js +1040 -0
  433. package/dist/deploy-wsxcectr.js +921 -0
  434. package/dist/deploy-xhj6zbcx.js +1055 -0
  435. package/dist/deploy-xqm869nf.js +1055 -0
  436. package/dist/deploy-xyfbhj3v.js +1038 -0
  437. package/dist/deploy-yv1y5xaa.js +921 -0
  438. package/dist/deploy-z3ejw37k.js +1040 -0
  439. package/dist/dev-02tgdc4f.js +2160 -0
  440. package/dist/dev-0tqhveye.js +2314 -0
  441. package/dist/dev-1mvcts8w.js +2515 -0
  442. package/dist/dev-2a283xts.js +2515 -0
  443. package/dist/dev-3dj2gkfq.js +2314 -0
  444. package/dist/dev-3e0etsww.js +2314 -0
  445. package/dist/dev-47dk7c13.js +2314 -0
  446. package/dist/dev-4a2a31cm.js +2314 -0
  447. package/dist/dev-4w1stcn8.js +2427 -0
  448. package/dist/dev-5wkh1z4a.js +2188 -0
  449. package/dist/dev-62nhytf8.js +2505 -0
  450. package/dist/dev-6t22zmey.js +2350 -0
  451. package/dist/dev-75acm2xj.js +2478 -0
  452. package/dist/dev-802rg9dp.js +2515 -0
  453. package/dist/dev-89p1sdv7.js +2395 -0
  454. package/dist/dev-8d1gxjky.js +2427 -0
  455. package/dist/dev-8yawx3cv.js +2314 -0
  456. package/dist/dev-9h4p8a0c.js +2393 -0
  457. package/dist/dev-9xmttj4c.js +2314 -0
  458. package/dist/dev-at6gy2td.js +2427 -0
  459. package/dist/dev-bgpxrwms.js +2551 -0
  460. package/dist/dev-bkbz97z0.js +2314 -0
  461. package/dist/dev-ct3344kv.js +2160 -0
  462. package/dist/dev-d1bb2t0f.js +2515 -0
  463. package/dist/{dev-qnxet3j9.js → dev-dg8dh5c1.js} +947 -809
  464. package/dist/dev-dr5jb965.js +2427 -0
  465. package/dist/dev-dwry8494.js +2489 -0
  466. package/dist/dev-e4sjqtbq.js +2314 -0
  467. package/dist/dev-ecq26mg4.js +2350 -0
  468. package/dist/dev-ef237vgp.js +2324 -0
  469. package/dist/dev-enbdg4st.js +2314 -0
  470. package/dist/dev-g6112y4w.js +2515 -0
  471. package/dist/dev-h2kneh95.js +2496 -0
  472. package/dist/dev-jcrxg8hq.js +2160 -0
  473. package/dist/dev-jk0gqges.js +2432 -0
  474. package/dist/dev-k62936am.js +2314 -0
  475. package/dist/dev-k8ptbvrs.js +2160 -0
  476. package/dist/dev-kqm107h4.js +2422 -0
  477. package/dist/dev-kybq3mwr.js +2489 -0
  478. package/dist/dev-kzs65xcr.js +2551 -0
  479. package/dist/dev-n0gx7eya.js +2350 -0
  480. package/dist/dev-n23m6rtb.js +2314 -0
  481. package/dist/dev-n8qndkyg.js +2512 -0
  482. package/dist/dev-ny8fmkzg.js +2432 -0
  483. package/dist/dev-p1c65cga.js +2386 -0
  484. package/dist/dev-p32fkbwf.js +2489 -0
  485. package/dist/dev-p4fjbb4h.js +2395 -0
  486. package/dist/dev-pnfcv79z.js +2160 -0
  487. package/dist/dev-qm9d4mfh.js +2478 -0
  488. package/dist/dev-qnrrv5ey.js +2393 -0
  489. package/dist/dev-qqysg50t.js +2427 -0
  490. package/dist/dev-r9f3n11q.js +2410 -0
  491. package/dist/dev-rcthnse5.js +2473 -0
  492. package/dist/dev-s0815dw4.js +2427 -0
  493. package/dist/dev-s4tpkg60.js +2314 -0
  494. package/dist/dev-s82fcesg.js +2314 -0
  495. package/dist/dev-s9sz53me.js +2401 -0
  496. package/dist/dev-sdka7z0d.js +2427 -0
  497. package/dist/dev-server/d1-migrations.d.ts +36 -0
  498. package/dist/dev-server/d1-migrations.d.ts.map +1 -0
  499. package/dist/dev-server/dev-server-state.d.ts +59 -0
  500. package/dist/dev-server/dev-server-state.d.ts.map +1 -0
  501. package/dist/dev-server/gateway-script.d.ts +21 -0
  502. package/dist/dev-server/gateway-script.d.ts.map +1 -0
  503. package/dist/dev-server/miniflare-bindings.d.ts +59 -0
  504. package/dist/dev-server/miniflare-bindings.d.ts.map +1 -0
  505. package/dist/dev-server/miniflare-dev-config.d.ts +35 -0
  506. package/dist/dev-server/miniflare-dev-config.d.ts.map +1 -0
  507. package/dist/dev-server/miniflare-log.d.ts +20 -0
  508. package/dist/dev-server/miniflare-log.d.ts.map +1 -0
  509. package/dist/dev-server/miniflare-worker-config.d.ts +74 -0
  510. package/dist/dev-server/miniflare-worker-config.d.ts.map +1 -0
  511. package/dist/dev-server/reload-queue.d.ts +13 -0
  512. package/dist/dev-server/reload-queue.d.ts.map +1 -0
  513. package/dist/dev-server/runtime-stdio.d.ts +8 -0
  514. package/dist/dev-server/runtime-stdio.d.ts.map +1 -0
  515. package/dist/dev-server/server-startup-helpers.d.ts +84 -0
  516. package/dist/dev-server/server-startup-helpers.d.ts.map +1 -0
  517. package/dist/dev-server/server.d.ts +2 -0
  518. package/dist/dev-server/server.d.ts.map +1 -1
  519. package/dist/dev-server/vite-process.d.ts +15 -0
  520. package/dist/dev-server/vite-process.d.ts.map +1 -0
  521. package/dist/dev-server/vite-utils.d.ts +55 -0
  522. package/dist/dev-server/vite-utils.d.ts.map +1 -0
  523. package/dist/dev-server/worker-source-watcher.d.ts +17 -0
  524. package/dist/dev-server/worker-source-watcher.d.ts.map +1 -0
  525. package/dist/dev-server/worker-surface-paths.d.ts +6 -0
  526. package/dist/dev-server/worker-surface-paths.d.ts.map +1 -0
  527. package/dist/dev-t3tjscah.js +2350 -0
  528. package/dist/dev-t50kdb1j.js +2338 -0
  529. package/dist/dev-t5xf55pt.js +2314 -0
  530. package/dist/dev-t63c44bb.js +2314 -0
  531. package/dist/dev-tgwja5mz.js +2496 -0
  532. package/dist/dev-wg3d38sy.js +2433 -0
  533. package/dist/dev-wh4rfgsh.js +2427 -0
  534. package/dist/dev-wjh8gdd1.js +2284 -0
  535. package/dist/dev-xzxy9qvq.js +2314 -0
  536. package/dist/dev-yymaq4ph.js +2392 -0
  537. package/dist/dev-zg2w2ve3.js +2422 -0
  538. package/dist/dev-zgx7fhe9.js +2553 -0
  539. package/dist/dev-zsb2xk1x.js +2427 -0
  540. package/dist/dev-zty3yhzg.js +2324 -0
  541. package/dist/doctor-0a2brpyz.js +259 -0
  542. package/dist/doctor-2shhdak6.js +245 -0
  543. package/dist/doctor-3mqavqg3.js +245 -0
  544. package/dist/doctor-5g73w40j.js +245 -0
  545. package/dist/doctor-5nek32fz.js +245 -0
  546. package/dist/doctor-7ra1w0sk.js +245 -0
  547. package/dist/doctor-ak830a0k.js +245 -0
  548. package/dist/doctor-bye3cs8a.js +245 -0
  549. package/dist/doctor-c5m9pmwq.js +245 -0
  550. package/dist/doctor-cqfkgxvw.js +245 -0
  551. package/dist/doctor-e1h9mhzp.js +245 -0
  552. package/dist/doctor-fmqsrafk.js +245 -0
  553. package/dist/doctor-gamefzcs.js +245 -0
  554. package/dist/doctor-hgs7wr5g.js +245 -0
  555. package/dist/doctor-j8ytsy94.js +245 -0
  556. package/dist/doctor-mcmkgp6e.js +245 -0
  557. package/dist/doctor-qb6m2exc.js +245 -0
  558. package/dist/doctor-qq4tsh8q.js +245 -0
  559. package/dist/doctor-rn53ctfs.js +245 -0
  560. package/dist/doctor-tecv869a.js +245 -0
  561. package/dist/doctor-wg0245pe.js +245 -0
  562. package/dist/doctor-z3jfqxtz.js +245 -0
  563. package/dist/{durable-object-t4kbb0yt.js → durable-object-4hey8fgy.js} +1 -1
  564. package/dist/durable-object-v3gsnybk.js +13 -0
  565. package/dist/durable-object-yt8v1dyn.js +13 -0
  566. package/dist/env.d.ts.map +1 -1
  567. package/dist/index-01kehw41.js +348 -0
  568. package/dist/index-05pbj4hy.js +1193 -0
  569. package/dist/index-06bg0z9y.js +185 -0
  570. package/dist/index-0d7tw5r4.js +136 -0
  571. package/dist/index-0krb65s3.js +215 -0
  572. package/dist/index-0m6e4mxz.js +133 -0
  573. package/dist/index-0mantew0.js +513 -0
  574. package/dist/index-0mezg6ar.js +1372 -0
  575. package/dist/index-0tk2rs0q.js +185 -0
  576. package/dist/index-0vah20er.js +1410 -0
  577. package/dist/index-0wa0ebm1.js +68 -0
  578. package/dist/index-124e9t4t.js +232 -0
  579. package/dist/index-1546yrn0.js +74 -0
  580. package/dist/index-15fpa5tx.js +232 -0
  581. package/dist/index-1714y3cz.js +1410 -0
  582. package/dist/index-18mp5v50.js +538 -0
  583. package/dist/index-195tc6qh.js +1372 -0
  584. package/dist/index-1bg8w2gf.js +52 -0
  585. package/dist/index-1d4jg11n.js +542 -0
  586. package/dist/index-1e2qtrmj.js +188 -0
  587. package/dist/index-1ghhgb9d.js +74 -0
  588. package/dist/index-1nhd9nkd.js +232 -0
  589. package/dist/index-1p814k7s.js +227 -0
  590. package/dist/index-1qs5gcm7.js +895 -0
  591. package/dist/index-1wn8mjep.js +808 -0
  592. package/dist/index-1xhd5czz.js +185 -0
  593. package/dist/index-29k04v43.js +574 -0
  594. package/dist/index-2a2g4fwp.js +993 -0
  595. package/dist/index-2bmtj21z.js +192 -0
  596. package/dist/index-2dpmd14d.js +52 -0
  597. package/dist/index-2fa0afdp.js +1372 -0
  598. package/dist/index-2jywf4pz.js +1372 -0
  599. package/dist/index-2qhk9nbx.js +1372 -0
  600. package/dist/index-2rcrefqd.js +1372 -0
  601. package/dist/index-2t2m5148.js +1372 -0
  602. package/dist/index-2vbzamev.js +437 -0
  603. package/dist/index-2vdep9h0.js +993 -0
  604. package/dist/index-2vq6bveq.js +574 -0
  605. package/dist/index-2y90j9cz.js +74 -0
  606. package/dist/index-33ep0z9x.js +385 -0
  607. package/dist/index-36h8gkhb.js +1088 -0
  608. package/dist/index-37jgbaw6.js +1372 -0
  609. package/dist/index-380ncsqc.js +977 -0
  610. package/dist/index-38fq7pww.js +560 -0
  611. package/dist/index-3bxqn033.js +1410 -0
  612. package/dist/index-3e1x39fc.js +365 -0
  613. package/dist/index-3e7by9sy.js +223 -0
  614. package/dist/index-3edvz3hs.js +124 -0
  615. package/dist/index-3egad6wm.js +538 -0
  616. package/dist/index-3f8rzmjw.js +232 -0
  617. package/dist/index-3jme4hgw.js +1234 -0
  618. package/dist/index-3p7s9mk9.js +360 -0
  619. package/dist/index-3vd4r37r.js +1372 -0
  620. package/dist/index-3vgn5e89.js +1682 -0
  621. package/dist/index-3x7k3t0f.js +513 -0
  622. package/dist/index-3xfe2dst.js +399 -0
  623. package/dist/index-464j1zb4.js +513 -0
  624. package/dist/index-47w35sft.js +244 -0
  625. package/dist/index-48rxsj95.js +365 -0
  626. package/dist/index-4bezcdd1.js +385 -0
  627. package/dist/index-4by4c7rm.js +52 -0
  628. package/dist/index-4fp11z9e.js +973 -0
  629. package/dist/index-4knecthc.js +70 -0
  630. package/dist/index-4phjwd6h.js +412 -0
  631. package/dist/index-4z5jrw0j.js +594 -0
  632. package/dist/index-502y7w13.js +538 -0
  633. package/dist/index-50em8s6c.js +898 -0
  634. package/dist/index-50mxxb4q.js +185 -0
  635. package/dist/index-51mzqy0d.js +895 -0
  636. package/dist/index-53pqqpq9.js +74 -0
  637. package/dist/index-5achzspr.js +185 -0
  638. package/dist/index-5ef3jmv7.js +1372 -0
  639. package/dist/index-5enq8ntr.js +1766 -0
  640. package/dist/index-5eswe8yv.js +844 -0
  641. package/dist/index-5fnq9r9m.js +1410 -0
  642. package/dist/index-5gevxfgs.js +513 -0
  643. package/dist/index-5gmf048z.js +817 -0
  644. package/dist/index-5jtkxpjf.js +971 -0
  645. package/dist/index-5m85bd9x.js +168 -0
  646. package/dist/index-5n5nn0a8.js +264 -0
  647. package/dist/index-5p3bgjwr.js +808 -0
  648. package/dist/index-5vzcszr2.js +1230 -0
  649. package/dist/index-5w77r4w9.js +513 -0
  650. package/dist/index-5w9f2b17.js +695 -0
  651. package/dist/index-627srx16.js +45 -0
  652. package/dist/index-62b3gt2g.js +12 -0
  653. package/dist/index-62srkqcm.js +168 -0
  654. package/dist/index-63cgqe43.js +1372 -0
  655. package/dist/index-65e7xx1a.js +19 -0
  656. package/dist/index-65qrje14.js +185 -0
  657. package/dist/index-666tdx14.js +895 -0
  658. package/dist/index-66sx3b3v.js +385 -0
  659. package/dist/index-678j0n13.js +74 -0
  660. package/dist/index-6bqgf5x8.js +227 -0
  661. package/dist/index-6ftrth7n.js +1218 -0
  662. package/dist/index-6g90pvxa.js +215 -0
  663. package/dist/index-6h8xbs75.js +44 -0
  664. package/dist/index-6j4m5x2d.js +1372 -0
  665. package/dist/index-6jwpke14.js +385 -0
  666. package/dist/index-6knsjvxh.js +1372 -0
  667. package/dist/index-6kwq6yf8.js +979 -0
  668. package/dist/index-6mg4yvc6.js +74 -0
  669. package/dist/index-6phry941.js +133 -0
  670. package/dist/index-6r59wbek.js +232 -0
  671. package/dist/index-6sf815ps.js +74 -0
  672. package/dist/index-6xknvbyk.js +1088 -0
  673. package/dist/index-6zd89k6y.js +1230 -0
  674. package/dist/index-71rwg0cn.js +264 -0
  675. package/dist/index-75ex2m0x.js +695 -0
  676. package/dist/index-79exzs3q.js +1218 -0
  677. package/dist/index-7bxj118m.js +264 -0
  678. package/dist/index-7c6np4mq.js +397 -0
  679. package/dist/index-7cm339qz.js +133 -0
  680. package/dist/index-7e359eb5.js +895 -0
  681. package/dist/index-7ef3ktz5.js +1372 -0
  682. package/dist/index-7eqyr4j8.js +70 -0
  683. package/dist/index-7hpjfdzh.js +185 -0
  684. package/dist/index-7k278fgz.js +273 -0
  685. package/dist/index-7kazxkjt.js +1372 -0
  686. package/dist/index-7m0x8m9r.js +844 -0
  687. package/dist/index-7p74smg8.js +1372 -0
  688. package/dist/index-7q8fke3k.js +188 -0
  689. package/dist/index-7qk6eafn.js +1682 -0
  690. package/dist/index-7r7dfpcm.js +133 -0
  691. package/dist/index-7vbjt6ba.js +805 -0
  692. package/dist/index-7z4b0vgd.js +470 -0
  693. package/dist/index-8052df4m.js +627 -0
  694. package/dist/index-82epjzrr.js +1410 -0
  695. package/dist/index-82f1z98k.js +41 -0
  696. package/dist/index-82xn4azv.js +74 -0
  697. package/dist/index-82z7rvz6.js +1238 -0
  698. package/dist/index-83wns7cz.js +70 -0
  699. package/dist/index-852945d4.js +413 -0
  700. package/dist/index-86rvj79f.js +133 -0
  701. package/dist/index-88tcq0t4.js +542 -0
  702. package/dist/index-8atc1yb9.js +68 -0
  703. package/dist/index-8evn52g1.js +1218 -0
  704. package/dist/index-8jkf4nsd.js +695 -0
  705. package/dist/index-8nx4ce3e.js +133 -0
  706. package/dist/index-8p7rxkbs.js +1426 -0
  707. package/dist/index-8q1bcnrh.js +1372 -0
  708. package/dist/index-8t5gynct.js +971 -0
  709. package/dist/index-8tj0awnv.js +476 -0
  710. package/dist/index-8x745h59.js +1069 -0
  711. package/dist/index-905svbb6.js +470 -0
  712. package/dist/index-94cb0sac.js +1372 -0
  713. package/dist/index-95mmvbw7.js +538 -0
  714. package/dist/index-97x94h0m.js +438 -0
  715. package/dist/index-9an9qqr1.js +728 -0
  716. package/dist/index-9bawzcny.js +574 -0
  717. package/dist/index-9bjjqdfc.js +236 -0
  718. package/dist/index-9d125myk.js +1372 -0
  719. package/dist/index-9d7x3vfr.js +236 -0
  720. package/dist/index-9fbtk7gv.js +817 -0
  721. package/dist/index-9gg0kqw0.js +470 -0
  722. package/dist/index-9nf8zs4p.js +1069 -0
  723. package/dist/index-9ryw7mcw.js +971 -0
  724. package/dist/{index-gz1gndna.js → index-9wt9x09k.js} +42 -62
  725. package/dist/index-a3e13a7m.js +478 -0
  726. package/dist/index-a6j44jmr.js +1372 -0
  727. package/dist/index-a75ejnvt.js +1711 -0
  728. package/dist/index-aabgympv.js +39 -0
  729. package/dist/index-ab2nck1h.js +1372 -0
  730. package/dist/index-abrqnq3e.js +488 -0
  731. package/dist/index-acwbmagz.js +412 -0
  732. package/dist/index-afjbpgb1.js +1218 -0
  733. package/dist/index-aqjdaem7.js +74 -0
  734. package/dist/index-aqrwyy57.js +288 -0
  735. package/dist/index-at89fpde.js +470 -0
  736. package/dist/index-awr0tp6p.js +313 -0
  737. package/dist/index-b1be9bdh.js +1372 -0
  738. package/dist/index-b1xs3wc4.js +513 -0
  739. package/dist/index-b50x7seh.js +513 -0
  740. package/dist/index-b5ra8w3q.js +52 -0
  741. package/dist/index-b6448fd0.js +133 -0
  742. package/dist/index-b64sbzgv.js +884 -0
  743. package/dist/index-b7r8ntpm.js +1372 -0
  744. package/dist/index-b9j55r7q.js +240 -0
  745. package/dist/index-ba9gyy13.js +513 -0
  746. package/dist/index-bb66mn7p.js +52 -0
  747. package/dist/index-bc5pvbbd.js +1193 -0
  748. package/dist/index-bdatd1za.js +1372 -0
  749. package/dist/index-bj0mk3dw.js +74 -0
  750. package/dist/index-bj3a8dr0.js +1372 -0
  751. package/dist/index-bj5avaba.js +109 -0
  752. package/dist/index-bk3eez1g.js +513 -0
  753. package/dist/index-btjx137w.js +774 -0
  754. package/dist/index-btrfqp9h.js +133 -0
  755. package/dist/index-bx6gangy.js +402 -0
  756. package/dist/index-c0tc0yts.js +471 -0
  757. package/dist/index-c0whkev9.js +200 -0
  758. package/dist/index-c3nxftnp.js +699 -0
  759. package/dist/index-c643s0gv.js +488 -0
  760. package/dist/index-ca96qkva.js +1372 -0
  761. package/dist/index-cdtzkedk.js +993 -0
  762. package/dist/index-cejgenma.js +1372 -0
  763. package/dist/index-cp8jt5pr.js +52 -0
  764. package/dist/index-cpz69pek.js +1372 -0
  765. package/dist/index-crrdegk5.js +456 -0
  766. package/dist/index-cskszwkx.js +1372 -0
  767. package/dist/index-cxf22a0s.js +74 -0
  768. package/dist/index-cy3c3w81.js +270 -0
  769. package/dist/index-d2md1j3d.js +185 -0
  770. package/dist/index-d5dgb1j6.js +74 -0
  771. package/dist/index-da397xcx.js +1372 -0
  772. package/dist/index-damyy8bw.js +1372 -0
  773. package/dist/index-dbr6bfz6.js +528 -0
  774. package/dist/index-dd1g0g7e.js +360 -0
  775. package/dist/index-dd6fwwmq.js +456 -0
  776. package/dist/index-dgww0ewn.js +574 -0
  777. package/dist/index-dh1954bp.js +52 -0
  778. package/dist/index-djp2wd1f.js +1372 -0
  779. package/dist/index-dktb9az5.js +1372 -0
  780. package/dist/index-dm9q84c7.js +360 -0
  781. package/dist/index-dmbdj6va.js +805 -0
  782. package/dist/index-dmf76tac.js +1372 -0
  783. package/dist/index-dphr32gc.js +420 -0
  784. package/dist/index-dxh2qyyw.js +52 -0
  785. package/dist/index-dzayfxjy.js +492 -0
  786. package/dist/index-e05q77kt.js +397 -0
  787. package/dist/index-e11b1fb2.js +495 -0
  788. package/dist/index-e3zvspqj.js +968 -0
  789. package/dist/index-e4tzzbn9.js +1372 -0
  790. package/dist/index-e5ct1gwb.js +1372 -0
  791. package/dist/index-e7ptcz1a.js +1372 -0
  792. package/dist/index-e7wt0203.js +513 -0
  793. package/dist/index-ebwsvf9t.js +365 -0
  794. package/dist/index-ed73jn3d.js +185 -0
  795. package/dist/index-ed7n5d07.js +185 -0
  796. package/dist/index-ejs2a4kd.js +513 -0
  797. package/dist/index-esjrgt3y.js +467 -0
  798. package/dist/index-ev03khsd.js +513 -0
  799. package/dist/index-f1gsqm54.js +168 -0
  800. package/dist/index-f1yshy4s.js +412 -0
  801. package/dist/index-f51mkh13.js +1088 -0
  802. package/dist/index-f86n1fpd.js +55 -0
  803. package/dist/index-f90314kt.js +52 -0
  804. package/dist/index-f9mhsept.js +185 -0
  805. package/dist/index-fa6zwffw.js +70 -0
  806. package/dist/index-fama7kpt.js +52 -0
  807. package/dist/index-fgk87mk2.js +1067 -0
  808. package/dist/index-fkyvxe4b.js +968 -0
  809. package/dist/index-fnk0tkw7.js +412 -0
  810. package/dist/index-g0h40xke.js +513 -0
  811. package/dist/index-g0rqh52c.js +385 -0
  812. package/dist/index-g170d619.js +385 -0
  813. package/dist/index-g3qtxkms.js +881 -0
  814. package/dist/index-g5aq66bj.js +1534 -0
  815. package/dist/index-gactvqcs.js +467 -0
  816. package/dist/index-gaew61v4.js +470 -0
  817. package/dist/index-gba371j7.js +542 -0
  818. package/dist/index-gegyyfnw.js +1372 -0
  819. package/dist/index-get7he2s.js +133 -0
  820. package/dist/index-gj5qh491.js +54 -0
  821. package/dist/index-gn5wy09x.js +205 -0
  822. package/dist/index-gq39t0rx.js +895 -0
  823. package/dist/index-gtbgzwfs.js +264 -0
  824. package/dist/index-gtpz0gkz.js +185 -0
  825. package/dist/index-h1s66pmp.js +52 -0
  826. package/dist/index-h5dqna7q.js +1410 -0
  827. package/dist/index-h8r2d8y5.js +366 -0
  828. package/dist/index-heeqwrfd.js +385 -0
  829. package/dist/index-hheb5dyt.js +192 -0
  830. package/dist/index-hjs9j2g9.js +895 -0
  831. package/dist/index-hjz2x9nq.js +441 -0
  832. package/dist/index-hkex7ns5.js +513 -0
  833. package/dist/index-hmbctwv6.js +517 -0
  834. package/dist/index-hn5nbxbt.js +147 -0
  835. package/dist/index-hpjh0qjx.js +1723 -0
  836. package/dist/index-hpwa6vsw.js +239 -0
  837. package/dist/index-hpzasdhw.js +513 -0
  838. package/dist/index-hqdr9wdm.js +74 -0
  839. package/dist/index-hrvz8d26.js +1372 -0
  840. package/dist/index-hs6ekcfs.js +412 -0
  841. package/dist/index-hyvhnf6r.js +971 -0
  842. package/dist/index-j2kc5rbv.js +895 -0
  843. package/dist/index-j2xdxwsz.js +133 -0
  844. package/dist/index-j47hhb3r.js +694 -0
  845. package/dist/index-j5aphr5x.js +185 -0
  846. package/dist/index-j68v36q1.js +188 -0
  847. package/dist/index-j7cf22x7.js +968 -0
  848. package/dist/index-j7xxrbnr.js +694 -0
  849. package/dist/index-jdzrvnfj.js +52 -0
  850. package/dist/index-jg720mq7.js +476 -0
  851. package/dist/index-jptqxkew.js +470 -0
  852. package/dist/index-jrzddxvt.js +2167 -0
  853. package/dist/index-jsymy3mb.js +781 -0
  854. package/dist/index-jwvy32xk.js +188 -0
  855. package/dist/index-jxe1b19v.js +133 -0
  856. package/dist/index-jz96ry5g.js +513 -0
  857. package/dist/index-k6wtsgs1.js +971 -0
  858. package/dist/index-k7m5f1dg.js +200 -0
  859. package/dist/index-kawa49m8.js +371 -0
  860. package/dist/index-key4e5c9.js +168 -0
  861. package/dist/index-kgstnk6g.js +239 -0
  862. package/dist/index-khbmdrn2.js +884 -0
  863. package/dist/index-khnw972v.js +117 -0
  864. package/dist/index-kpzfwex6.js +264 -0
  865. package/dist/index-kse4gn99.js +74 -0
  866. package/dist/index-ktscz0r2.js +264 -0
  867. package/dist/index-kwqff3ba.js +1410 -0
  868. package/dist/index-kxc4gtyt.js +574 -0
  869. package/dist/index-kybmjvad.js +1212 -0
  870. package/dist/index-kzm9cea8.js +185 -0
  871. package/dist/index-m2d74gqg.js +808 -0
  872. package/dist/index-m2v0fj08.js +74 -0
  873. package/dist/index-m56w7mjt.js +513 -0
  874. package/dist/index-m95ha3n4.js +264 -0
  875. package/dist/index-ma151p8g.js +264 -0
  876. package/dist/index-mg8vwqxf.js +514 -0
  877. package/dist/index-mhdsywhs.js +264 -0
  878. package/dist/index-mjgx910r.js +895 -0
  879. package/dist/index-mjve6tqn.js +447 -0
  880. package/dist/index-mkrmaea3.js +185 -0
  881. package/dist/index-mkxnyyjn.js +264 -0
  882. package/dist/index-mkxzgn0q.js +1372 -0
  883. package/dist/index-mp5mrst6.js +1372 -0
  884. package/dist/index-ms15cr86.js +513 -0
  885. package/dist/index-mt99xkc6.js +133 -0
  886. package/dist/index-mttv6k25.js +881 -0
  887. package/dist/index-myxfx52v.js +385 -0
  888. package/dist/index-mzmq3v0d.js +1088 -0
  889. package/dist/index-mzw7732t.js +74 -0
  890. package/dist/index-n3mjwz22.js +188 -0
  891. package/dist/index-n3yksgz0.js +1372 -0
  892. package/dist/index-n4jr3dmk.js +484 -0
  893. package/dist/index-n5drt64b.js +74 -0
  894. package/dist/index-n8frmffg.js +264 -0
  895. package/dist/index-n8k8chde.js +694 -0
  896. package/dist/index-na796ka6.js +994 -0
  897. package/dist/index-nbs4q0qg.js +1218 -0
  898. package/dist/index-newpq2zf.js +968 -0
  899. package/dist/index-nexg9p7j.js +1271 -0
  900. package/dist/index-nfm8tb5n.js +74 -0
  901. package/dist/index-ng9n3znd.js +1372 -0
  902. package/dist/index-nga2tg9z.js +1372 -0
  903. package/dist/index-ngbzr9gz.js +805 -0
  904. package/dist/index-nh90nk7j.js +380 -0
  905. package/dist/index-nhbkm2ba.js +467 -0
  906. package/dist/index-njnmfxm5.js +1372 -0
  907. package/dist/index-nqma24j3.js +385 -0
  908. package/dist/index-nrfhk0k5.js +1088 -0
  909. package/dist/index-ntddf5d9.js +993 -0
  910. package/dist/index-nte9n8w9.js +538 -0
  911. package/dist/index-ntxp7ke1.js +264 -0
  912. package/dist/index-nwxnmw41.js +264 -0
  913. package/dist/index-nxkesg55.js +68 -0
  914. package/dist/index-p0zppqxm.js +467 -0
  915. package/dist/index-p1xe5eem.js +513 -0
  916. package/dist/index-p296ban8.js +191 -0
  917. package/dist/index-p477xm52.js +385 -0
  918. package/dist/index-p7q23nce.js +1031 -0
  919. package/dist/index-p8nmkrgw.js +470 -0
  920. package/dist/index-p97s12vf.js +904 -0
  921. package/dist/index-p9hvv0yd.js +401 -0
  922. package/dist/index-pac7wv88.js +307 -0
  923. package/dist/index-pkxf6h87.js +895 -0
  924. package/dist/index-pqp4312v.js +52 -0
  925. package/dist/index-pt49cgjv.js +1426 -0
  926. package/dist/index-ptp2pfq1.js +52 -0
  927. package/dist/index-pw9jn6kz.js +574 -0
  928. package/dist/index-pyeycp3f.js +74 -0
  929. package/dist/index-q23xf3vr.js +479 -0
  930. package/dist/index-q31ne0xa.js +412 -0
  931. package/dist/index-q34rvh5a.js +247 -0
  932. package/dist/index-q5errwrj.js +904 -0
  933. package/dist/index-q5nhzc9m.js +1217 -0
  934. package/dist/index-q8f4kawk.js +204 -0
  935. package/dist/index-qer8zv2r.js +997 -0
  936. package/dist/index-qf2dkqxh.js +249 -0
  937. package/dist/index-qhyy018y.js +467 -0
  938. package/dist/index-qmhdydwy.js +70 -0
  939. package/dist/index-qmtdf7k5.js +639 -0
  940. package/dist/index-qpmvca5j.js +470 -0
  941. package/dist/index-qr96vaj1.js +52 -0
  942. package/dist/index-qtyhg3dn.js +904 -0
  943. package/dist/index-qwgr4q7s.js +37 -0
  944. package/dist/index-qye17gq5.js +264 -0
  945. package/dist/index-r0839f5k.js +133 -0
  946. package/dist/index-r1rqg72v.js +1372 -0
  947. package/dist/index-rab2dfh3.js +494 -0
  948. package/dist/index-rbckga8p.js +971 -0
  949. package/dist/index-rbxb5x2w.js +1372 -0
  950. package/dist/index-rck779bj.js +739 -0
  951. package/dist/index-rfn2gt5f.js +1658 -0
  952. package/dist/index-rg21w26a.js +470 -0
  953. package/dist/index-rgcz45t0.js +1372 -0
  954. package/dist/index-rhnd376q.js +133 -0
  955. package/dist/index-rjc5z3w6.js +971 -0
  956. package/dist/index-rkhtayd6.js +385 -0
  957. package/dist/index-rm8srzmv.js +371 -0
  958. package/dist/index-rmhk5j03.js +968 -0
  959. package/dist/index-rp0aye39.js +1426 -0
  960. package/dist/index-rp4t86bt.js +993 -0
  961. package/dist/index-rpq5ktdy.js +264 -0
  962. package/dist/index-rpsmhdd4.js +1218 -0
  963. package/dist/index-rqpakjyr.js +470 -0
  964. package/dist/index-rttk33x6.js +232 -0
  965. package/dist/index-rwa82e89.js +385 -0
  966. package/dist/index-rz185crv.js +695 -0
  967. package/dist/index-rz7rx80s.js +1410 -0
  968. package/dist/index-s22verzj.js +1218 -0
  969. package/dist/index-s2s3g1nt.js +133 -0
  970. package/dist/index-s37h3jgk.js +572 -0
  971. package/dist/index-s7ytytth.js +781 -0
  972. package/dist/index-sb705m7d.js +52 -0
  973. package/dist/index-sefnpzwa.js +185 -0
  974. package/dist/index-sgxw0xzd.js +513 -0
  975. package/dist/index-stc0caq6.js +1009 -0
  976. package/dist/index-stgn34cr.js +148 -0
  977. package/dist/index-svz82w9h.js +513 -0
  978. package/dist/index-sx49e8x9.js +884 -0
  979. package/dist/index-sxadwvw9.js +185 -0
  980. package/dist/index-sxn223fz.js +1372 -0
  981. package/dist/index-sy0c2mh0.js +1372 -0
  982. package/dist/index-syeh1hca.js +264 -0
  983. package/dist/index-syscwrjp.js +1576 -0
  984. package/dist/index-t14zr0ys.js +1063 -0
  985. package/dist/index-t18wyhgf.js +418 -0
  986. package/dist/index-t4fhcx1n.js +71 -0
  987. package/dist/index-td4hbgj5.js +1372 -0
  988. package/dist/index-tjc99447.js +68 -0
  989. package/dist/index-tknbyxzn.js +2202 -0
  990. package/dist/index-tkvt9mmq.js +484 -0
  991. package/dist/index-tmmcf4m6.js +808 -0
  992. package/dist/index-tpgs5v64.js +366 -0
  993. package/dist/index-tt4fsv91.js +412 -0
  994. package/dist/{index-07q6yxyc.js → index-tte89s31.js} +30 -29
  995. package/dist/index-tvjg7swe.js +1372 -0
  996. package/dist/index-txndxr4w.js +513 -0
  997. package/dist/index-tyh5jc55.js +990 -0
  998. package/dist/index-tyt0wa52.js +470 -0
  999. package/dist/index-tyt3wcfr.js +1372 -0
  1000. package/dist/index-v35460hf.js +574 -0
  1001. package/dist/index-v3znz08m.js +968 -0
  1002. package/dist/index-v78xbj6n.js +808 -0
  1003. package/dist/index-v7q00d1e.js +1410 -0
  1004. package/dist/index-v915brjk.js +1372 -0
  1005. package/dist/index-v922fmsx.js +52 -0
  1006. package/dist/index-v9w1bbfe.js +842 -0
  1007. package/dist/index-vbbgtm8p.js +513 -0
  1008. package/dist/index-vcjgrmzj.js +456 -0
  1009. package/dist/{index-pf5s73n9.js → index-vdewcg1r.js} +243 -385
  1010. package/dist/index-vhqww6tt.js +307 -0
  1011. package/dist/index-vkkmx4xe.js +1372 -0
  1012. package/dist/index-vrps1gky.js +2202 -0
  1013. package/dist/index-vse8620z.js +1372 -0
  1014. package/dist/index-vt803j3b.js +1372 -0
  1015. package/dist/index-vtjp46c3.js +52 -0
  1016. package/dist/index-vxhxk8mf.js +904 -0
  1017. package/dist/index-w3azfsa0.js +695 -0
  1018. package/dist/index-w4c9vmvg.js +1517 -0
  1019. package/dist/index-w4tq35dn.js +52 -0
  1020. package/dist/index-w5qxvxzq.js +991 -0
  1021. package/dist/index-w5sedpqn.js +986 -0
  1022. package/dist/index-waha3chv.js +1230 -0
  1023. package/dist/index-wdxww0kj.js +1006 -0
  1024. package/dist/index-wdy5y07x.js +1372 -0
  1025. package/dist/index-wf9pnh6j.js +385 -0
  1026. package/dist/{index-z14anrqp.js → index-wfbfz02q.js} +14 -15
  1027. package/dist/index-wnnbbbkt.js +1192 -0
  1028. package/dist/index-wqd8n2qk.js +574 -0
  1029. package/dist/index-wvcmvtjf.js +1372 -0
  1030. package/dist/index-x0jbntp0.js +470 -0
  1031. package/dist/index-x12e6fzy.js +476 -0
  1032. package/dist/index-x6scc3nx.js +70 -0
  1033. package/dist/index-x8e2wsbv.js +971 -0
  1034. package/dist/index-xagpz645.js +2199 -0
  1035. package/dist/index-xbth1r6e.js +572 -0
  1036. package/dist/index-xec4p3v5.js +560 -0
  1037. package/dist/index-xgfyxpfs.js +1218 -0
  1038. package/dist/index-xm9fqhcb.js +447 -0
  1039. package/dist/index-xm9hp9xc.js +1372 -0
  1040. package/dist/index-xp7zkxcx.js +1372 -0
  1041. package/dist/index-xrbj0ebk.js +185 -0
  1042. package/dist/index-xskax7r3.js +50 -0
  1043. package/dist/index-xvk5n96q.js +694 -0
  1044. package/dist/index-xy1jvt4w.js +1229 -0
  1045. package/dist/index-xzg9hhf3.js +470 -0
  1046. package/dist/index-xzpg0kaz.js +70 -0
  1047. package/dist/index-y1d8za14.js +196 -0
  1048. package/dist/index-y3q6qvv3.js +316 -0
  1049. package/dist/index-y44ts1dk.js +52 -0
  1050. package/dist/index-y59hnmd0.js +132 -0
  1051. package/dist/index-y5nt1wjb.js +971 -0
  1052. package/dist/index-y7mkb00x.js +133 -0
  1053. package/dist/index-y82b8w14.js +1372 -0
  1054. package/dist/index-yb07t3c5.js +1372 -0
  1055. package/dist/index-yc3xz3vm.js +431 -0
  1056. package/dist/index-yeaqrevg.js +1372 -0
  1057. package/dist/index-ygwsd1nn.js +438 -0
  1058. package/dist/index-yhdavjk7.js +371 -0
  1059. package/dist/index-yjhns95b.js +188 -0
  1060. package/dist/index-yk23p7he.js +1372 -0
  1061. package/dist/index-ykfgpsmm.js +190 -0
  1062. package/dist/index-ymz3cfab.js +968 -0
  1063. package/dist/index-yq9g1sq7.js +264 -0
  1064. package/dist/index-ys5q9ch9.js +366 -0
  1065. package/dist/index-yt0n4p46.js +973 -0
  1066. package/dist/index-ytq1t9jx.js +232 -0
  1067. package/dist/index-ywmtmf3b.js +513 -0
  1068. package/dist/index-yzb44q6d.js +1372 -0
  1069. package/dist/index-z043xk61.js +133 -0
  1070. package/dist/index-z0gsf674.js +431 -0
  1071. package/dist/index-z32n0ndp.js +1372 -0
  1072. package/dist/index-z40mjts9.js +212 -0
  1073. package/dist/index-z4qgk76w.js +1372 -0
  1074. package/dist/index-z5k5bjc7.js +1218 -0
  1075. package/dist/index-z73sytma.js +895 -0
  1076. package/dist/index-z8njfj2g.js +385 -0
  1077. package/dist/index-z9fjnwa8.js +397 -0
  1078. package/dist/{index-1xpj0m4r.js → index-z9gy8w6b.js} +1 -1
  1079. package/dist/index-zapkc14c.js +264 -0
  1080. package/dist/index-zes6w8yr.js +185 -0
  1081. package/dist/index-zgrqest7.js +695 -0
  1082. package/dist/index-zjv6apef.js +1410 -0
  1083. package/dist/index-zsngz131.js +1372 -0
  1084. package/dist/index-zt22fe2j.js +54 -0
  1085. package/dist/index-zxhc6sb0.js +192 -0
  1086. package/dist/index.d.ts +2 -6
  1087. package/dist/index.d.ts.map +1 -1
  1088. package/dist/index.js +32 -269
  1089. package/dist/{init-f9mgmew3.js → init-cwpergap.js} +63 -69
  1090. package/dist/init-wfh63bfz.js +180 -0
  1091. package/dist/login-1amyp1jy.js +77 -0
  1092. package/dist/login-1cdwn1dj.js +77 -0
  1093. package/dist/login-456h8jk3.js +77 -0
  1094. package/dist/login-4n470c4j.js +77 -0
  1095. package/dist/login-4sh7s849.js +77 -0
  1096. package/dist/login-5dmkf0pz.js +77 -0
  1097. package/dist/login-7yex6ppq.js +77 -0
  1098. package/dist/login-83bjfhvz.js +77 -0
  1099. package/dist/login-88tp4gbb.js +77 -0
  1100. package/dist/login-b51faqpc.js +77 -0
  1101. package/dist/login-bxyjqmbj.js +77 -0
  1102. package/dist/login-c4649qss.js +77 -0
  1103. package/dist/login-d80a2qxd.js +77 -0
  1104. package/dist/login-ddw888xb.js +77 -0
  1105. package/dist/login-dp0napaz.js +77 -0
  1106. package/dist/login-e7pytkdc.js +77 -0
  1107. package/dist/login-fe0brfcr.js +77 -0
  1108. package/dist/login-h7sm5trm.js +77 -0
  1109. package/dist/login-j3r6z2t4.js +77 -0
  1110. package/dist/login-jkfkdjg4.js +77 -0
  1111. package/dist/login-kch6f2yj.js +77 -0
  1112. package/dist/login-pmqh94ws.js +77 -0
  1113. package/dist/login-rc82x5j8.js +77 -0
  1114. package/dist/login-tvppwyx2.js +77 -0
  1115. package/dist/login-vd0m3xr4.js +77 -0
  1116. package/dist/login-w76jx22q.js +77 -0
  1117. package/dist/login-ze7y36rc.js +77 -0
  1118. package/dist/previews-02jmcwft.js +1214 -0
  1119. package/dist/previews-2wfvsjfy.js +1337 -0
  1120. package/dist/previews-31bq82km.js +1225 -0
  1121. package/dist/previews-31feb8r3.js +1337 -0
  1122. package/dist/previews-3w4pxqby.js +1337 -0
  1123. package/dist/previews-62pcvvpe.js +1214 -0
  1124. package/dist/previews-6fepv94a.js +1225 -0
  1125. package/dist/previews-76fxkp59.js +1214 -0
  1126. package/dist/previews-844bp6kf.js +1214 -0
  1127. package/dist/previews-8amn46qv.js +1214 -0
  1128. package/dist/previews-93ttrf5f.js +1337 -0
  1129. package/dist/previews-a5xbkksy.js +1214 -0
  1130. package/dist/previews-bdrefjzx.js +1337 -0
  1131. package/dist/previews-bgnryzav.js +1214 -0
  1132. package/dist/previews-bkhv9dnr.js +1214 -0
  1133. package/dist/previews-c2c64z5m.js +1214 -0
  1134. package/dist/previews-cfcn56b4.js +1337 -0
  1135. package/dist/previews-e4wgscsb.js +1214 -0
  1136. package/dist/previews-ew4reetn.js +1214 -0
  1137. package/dist/previews-hzqke1fg.js +1214 -0
  1138. package/dist/previews-j8wa3sge.js +1214 -0
  1139. package/dist/previews-k5n6vhpm.js +1214 -0
  1140. package/dist/previews-mssq1hrm.js +1337 -0
  1141. package/dist/previews-n4sdyxa5.js +1214 -0
  1142. package/dist/previews-npwrwb0b.js +1214 -0
  1143. package/dist/previews-q8ph9wbe.js +1214 -0
  1144. package/dist/previews-rfswrh7q.js +1214 -0
  1145. package/dist/previews-s0y5yp8s.js +1214 -0
  1146. package/dist/previews-s5b6mnz5.js +1214 -0
  1147. package/dist/previews-sdte4984.js +1200 -0
  1148. package/dist/previews-t5tdm6t0.js +1225 -0
  1149. package/dist/previews-tcaz1gt8.js +1337 -0
  1150. package/dist/previews-tk7vpzj9.js +1214 -0
  1151. package/dist/previews-tqt4pk27.js +1214 -0
  1152. package/dist/previews-vqg4psk2.js +1225 -0
  1153. package/dist/productions-2t9q8f57.js +505 -0
  1154. package/dist/productions-4abj58kx.js +505 -0
  1155. package/dist/productions-4dpec71r.js +505 -0
  1156. package/dist/productions-4h80j2c7.js +505 -0
  1157. package/dist/productions-4nedsanh.js +505 -0
  1158. package/dist/productions-5c58yafp.js +505 -0
  1159. package/dist/productions-5xq5cjhx.js +505 -0
  1160. package/dist/productions-6dr0bmd7.js +505 -0
  1161. package/dist/productions-86jaqt7m.js +505 -0
  1162. package/dist/productions-8f6s8dqr.js +505 -0
  1163. package/dist/productions-a2hcwwzf.js +505 -0
  1164. package/dist/productions-b7svyjp7.js +505 -0
  1165. package/dist/productions-bf2cnr05.js +505 -0
  1166. package/dist/productions-bn2q31my.js +505 -0
  1167. package/dist/productions-dkgry3gv.js +505 -0
  1168. package/dist/productions-dv8g7f6g.js +505 -0
  1169. package/dist/productions-e2m9s4tr.js +505 -0
  1170. package/dist/productions-eqh105tk.js +505 -0
  1171. package/dist/productions-etvcm7yf.js +505 -0
  1172. package/dist/productions-f1zpbmjz.js +505 -0
  1173. package/dist/productions-fgshs1m7.js +505 -0
  1174. package/dist/productions-hphmt68n.js +505 -0
  1175. package/dist/productions-j14pvx93.js +505 -0
  1176. package/dist/productions-j7s1ywvg.js +505 -0
  1177. package/dist/productions-jp3v3q3p.js +505 -0
  1178. package/dist/productions-m9p42amj.js +505 -0
  1179. package/dist/productions-mxbneawa.js +505 -0
  1180. package/dist/productions-np4exh9p.js +505 -0
  1181. package/dist/productions-rr1hqgda.js +505 -0
  1182. package/dist/productions-rtf9ksgg.js +505 -0
  1183. package/dist/productions-vhq7yx86.js +505 -0
  1184. package/dist/productions-w2nzftcz.js +505 -0
  1185. package/dist/productions-wbks5h7e.js +505 -0
  1186. package/dist/productions-y99ayk6h.js +505 -0
  1187. package/dist/productions-zpqyw5gm.js +505 -0
  1188. package/dist/router/types.d.ts +24 -0
  1189. package/dist/router/types.d.ts.map +1 -0
  1190. package/dist/runtime/context-events.d.ts +13 -0
  1191. package/dist/runtime/context-events.d.ts.map +1 -0
  1192. package/dist/runtime/context-types.d.ts +82 -0
  1193. package/dist/runtime/context-types.d.ts.map +1 -0
  1194. package/dist/runtime/context.d.ts +27 -40
  1195. package/dist/runtime/context.d.ts.map +1 -1
  1196. package/dist/runtime/exports.d.ts +47 -55
  1197. package/dist/runtime/exports.d.ts.map +1 -1
  1198. package/dist/runtime/index.d.ts +8 -1
  1199. package/dist/runtime/index.d.ts.map +1 -1
  1200. package/dist/runtime/index.js +108 -99
  1201. package/dist/runtime/middleware.d.ts +102 -60
  1202. package/dist/runtime/middleware.d.ts.map +1 -1
  1203. package/dist/runtime/router/index.d.ts +7 -0
  1204. package/dist/runtime/router/index.d.ts.map +1 -0
  1205. package/dist/runtime/router/types.d.ts +24 -0
  1206. package/dist/runtime/router/types.d.ts.map +1 -0
  1207. package/dist/runtime/router.d.ts +7 -0
  1208. package/dist/runtime/router.d.ts.map +1 -0
  1209. package/dist/runtime/validation.d.ts +10 -2
  1210. package/dist/runtime/validation.d.ts.map +1 -1
  1211. package/dist/secrets/local-secrets.d.ts +46 -0
  1212. package/dist/secrets/local-secrets.d.ts.map +1 -0
  1213. package/dist/secrets-8wcj47nh.js +91 -0
  1214. package/dist/secrets-b2ww34ta.js +91 -0
  1215. package/dist/secrets-b7g4z621.js +91 -0
  1216. package/dist/shims/local-media-bindings.d.ts +19 -0
  1217. package/dist/shims/local-media-bindings.d.ts.map +1 -0
  1218. package/dist/shims/local-worker-loader.d.ts +3 -0
  1219. package/dist/shims/local-worker-loader.d.ts.map +1 -0
  1220. package/dist/sveltekit/index.js +187 -75
  1221. package/dist/sveltekit/local-bindings.d.ts +4 -0
  1222. package/dist/sveltekit/local-bindings.d.ts.map +1 -0
  1223. package/dist/sveltekit/platform.d.ts +19 -1
  1224. package/dist/sveltekit/platform.d.ts.map +1 -1
  1225. package/dist/test/ai-search.d.ts +39 -0
  1226. package/dist/test/ai-search.d.ts.map +1 -0
  1227. package/dist/test/binding-hints.d.ts +11 -0
  1228. package/dist/test/binding-hints.d.ts.map +1 -0
  1229. package/dist/test/bridge-context.d.ts +12 -2
  1230. package/dist/test/bridge-context.d.ts.map +1 -1
  1231. package/dist/test/cf.d.ts +35 -21
  1232. package/dist/test/cf.d.ts.map +1 -1
  1233. package/dist/test/containers.d.ts +87 -0
  1234. package/dist/test/containers.d.ts.map +1 -0
  1235. package/dist/test/email.d.ts +16 -7
  1236. package/dist/test/email.d.ts.map +1 -1
  1237. package/dist/test/index.d.ts +5 -8
  1238. package/dist/test/index.d.ts.map +1 -1
  1239. package/dist/test/index.js +4595 -43
  1240. package/dist/test/local-worker-loader.d.ts +3 -0
  1241. package/dist/test/local-worker-loader.d.ts.map +1 -0
  1242. package/dist/test/offline-bindings.d.ts +65 -0
  1243. package/dist/test/offline-bindings.d.ts.map +1 -0
  1244. package/dist/test/queue.d.ts.map +1 -1
  1245. package/dist/test/remote-ai.d.ts.map +1 -1
  1246. package/dist/test/remote-cloudflare.d.ts +13 -0
  1247. package/dist/test/remote-cloudflare.d.ts.map +1 -0
  1248. package/dist/test/remote-vectorize.d.ts.map +1 -1
  1249. package/dist/test/resolve-service-bindings.d.ts +63 -3
  1250. package/dist/test/resolve-service-bindings.d.ts.map +1 -1
  1251. package/dist/test/scheduled.d.ts.map +1 -1
  1252. package/dist/test/should-skip.d.ts +14 -18
  1253. package/dist/test/should-skip.d.ts.map +1 -1
  1254. package/dist/test/simple-context-bindings.d.ts +13 -0
  1255. package/dist/test/simple-context-bindings.d.ts.map +1 -0
  1256. package/dist/test/simple-context-durable-objects.d.ts +6 -0
  1257. package/dist/test/simple-context-durable-objects.d.ts.map +1 -0
  1258. package/dist/test/simple-context-env.d.ts +35 -0
  1259. package/dist/test/simple-context-env.d.ts.map +1 -0
  1260. package/dist/test/simple-context-gateway-script.d.ts +2 -0
  1261. package/dist/test/simple-context-gateway-script.d.ts.map +1 -0
  1262. package/dist/test/simple-context-handlers.d.ts +12 -0
  1263. package/dist/test/simple-context-handlers.d.ts.map +1 -0
  1264. package/dist/test/simple-context-lifecycle.d.ts +32 -0
  1265. package/dist/test/simple-context-lifecycle.d.ts.map +1 -0
  1266. package/dist/test/simple-context-mfconfig.d.ts +10 -0
  1267. package/dist/test/simple-context-mfconfig.d.ts.map +1 -0
  1268. package/dist/test/simple-context-multi-worker.d.ts +16 -0
  1269. package/dist/test/simple-context-multi-worker.d.ts.map +1 -0
  1270. package/dist/test/simple-context-paths.d.ts +40 -0
  1271. package/dist/test/simple-context-paths.d.ts.map +1 -0
  1272. package/dist/test/simple-context-runtime.d.ts +19 -0
  1273. package/dist/test/simple-context-runtime.d.ts.map +1 -0
  1274. package/dist/test/simple-context-startup.d.ts +11 -0
  1275. package/dist/test/simple-context-startup.d.ts.map +1 -0
  1276. package/dist/test/simple-context-transport.d.ts +14 -0
  1277. package/dist/test/simple-context-transport.d.ts.map +1 -0
  1278. package/dist/test/simple-context.d.ts +7 -26
  1279. package/dist/test/simple-context.d.ts.map +1 -1
  1280. package/dist/test/tail.d.ts +2 -1
  1281. package/dist/test/tail.d.ts.map +1 -1
  1282. package/dist/test/utilities/artifacts.d.ts +11 -0
  1283. package/dist/test/utilities/artifacts.d.ts.map +1 -0
  1284. package/dist/test/utilities/context.d.ts +39 -0
  1285. package/dist/test/utilities/context.d.ts.map +1 -0
  1286. package/dist/test/utilities/d1.d.ts +21 -0
  1287. package/dist/test/utilities/d1.d.ts.map +1 -0
  1288. package/dist/test/utilities/env.d.ts +40 -0
  1289. package/dist/test/utilities/env.d.ts.map +1 -0
  1290. package/dist/test/utilities/kv.d.ts +11 -0
  1291. package/dist/test/utilities/kv.d.ts.map +1 -0
  1292. package/dist/test/utilities/media.d.ts +16 -0
  1293. package/dist/test/utilities/media.d.ts.map +1 -0
  1294. package/dist/test/utilities/platform.d.ts +38 -0
  1295. package/dist/test/utilities/platform.d.ts.map +1 -0
  1296. package/dist/test/utilities/queue.d.ts +5 -0
  1297. package/dist/test/utilities/queue.d.ts.map +1 -0
  1298. package/dist/test/utilities/r2.d.ts +12 -0
  1299. package/dist/test/utilities/r2.d.ts.map +1 -0
  1300. package/dist/test/utilities/workflows.d.ts +26 -0
  1301. package/dist/test/utilities/workflows.d.ts.map +1 -0
  1302. package/dist/test/utilities.d.ts +10 -98
  1303. package/dist/test/utilities.d.ts.map +1 -1
  1304. package/dist/test/worker.d.ts +6 -0
  1305. package/dist/test/worker.d.ts.map +1 -1
  1306. package/dist/token-3b9wws58.js +419 -0
  1307. package/dist/token-47kcz18j.js +419 -0
  1308. package/dist/token-a2b38w0z.js +419 -0
  1309. package/dist/token-exz78pth.js +419 -0
  1310. package/dist/token-fcthx92c.js +419 -0
  1311. package/dist/token-grwp8z4q.js +419 -0
  1312. package/dist/token-jkmm44z2.js +419 -0
  1313. package/dist/token-qxtvzm3b.js +419 -0
  1314. package/dist/token-rq8mvtz9.js +419 -0
  1315. package/dist/token-sct51r47.js +419 -0
  1316. package/dist/token-sfgxcgen.js +419 -0
  1317. package/dist/transform/durable-object.d.ts.map +1 -1
  1318. package/dist/transform/worker-entrypoint.d.ts +5 -0
  1319. package/dist/transform/worker-entrypoint.d.ts.map +1 -1
  1320. package/dist/{types-5nyrz1sz.js → types-0qv4xces.js} +266 -148
  1321. package/dist/types-2ejrbba1.js +695 -0
  1322. package/dist/types-2nvrs9jg.js +572 -0
  1323. package/dist/types-2pbe8kzw.js +572 -0
  1324. package/dist/types-2zyt0m43.js +572 -0
  1325. package/dist/types-4xxer9ep.js +572 -0
  1326. package/dist/types-5t5y7a5n.js +572 -0
  1327. package/dist/types-5wd2rygw.js +572 -0
  1328. package/dist/types-7j3ykgx7.js +572 -0
  1329. package/dist/types-7jkbm95a.js +695 -0
  1330. package/dist/types-8g78x34n.js +572 -0
  1331. package/dist/types-a2fk9yns.js +695 -0
  1332. package/dist/types-dyb3c6zw.js +695 -0
  1333. package/dist/types-e2n9f3pd.js +695 -0
  1334. package/dist/types-e6d336q3.js +572 -0
  1335. package/dist/types-hqh2fx0x.js +572 -0
  1336. package/dist/types-j12xmdnd.js +572 -0
  1337. package/dist/types-j4s6qcrc.js +695 -0
  1338. package/dist/types-jqn26et3.js +572 -0
  1339. package/dist/types-n0mxbq26.js +572 -0
  1340. package/dist/types-naz9hvw5.js +572 -0
  1341. package/dist/types-qjcd1jks.js +572 -0
  1342. package/dist/types-r9zb8sw1.js +572 -0
  1343. package/dist/types-rv5xwgsn.js +572 -0
  1344. package/dist/types-t39njdqx.js +572 -0
  1345. package/dist/types-tkgch3xv.js +572 -0
  1346. package/dist/types-vhvt4hvm.js +693 -0
  1347. package/dist/types-vvtb7rrh.js +572 -0
  1348. package/dist/types-w1grncdj.js +572 -0
  1349. package/dist/types-wmw49exb.js +572 -0
  1350. package/dist/types-ymxz9jga.js +572 -0
  1351. package/dist/utils/entrypoint-discovery.d.ts +6 -3
  1352. package/dist/utils/entrypoint-discovery.d.ts.map +1 -1
  1353. package/dist/utils/resolve-package.d.ts.map +1 -1
  1354. package/dist/utils/send-email.d.ts +15 -0
  1355. package/dist/utils/send-email.d.ts.map +1 -0
  1356. package/dist/utils/send-email.js +19 -0
  1357. package/dist/vite/config-file.d.ts +25 -0
  1358. package/dist/vite/config-file.d.ts.map +1 -0
  1359. package/dist/vite/index.d.ts +1 -0
  1360. package/dist/vite/index.d.ts.map +1 -1
  1361. package/dist/vite/index.js +25 -331
  1362. package/dist/vite/plugin-config-hook.d.ts +28 -0
  1363. package/dist/vite/plugin-config-hook.d.ts.map +1 -0
  1364. package/dist/vite/plugin-context.d.ts +27 -0
  1365. package/dist/vite/plugin-context.d.ts.map +1 -0
  1366. package/dist/vite/plugin-durable-objects.d.ts +18 -0
  1367. package/dist/vite/plugin-durable-objects.d.ts.map +1 -0
  1368. package/dist/vite/plugin-programmatic.d.ts +44 -0
  1369. package/dist/vite/plugin-programmatic.d.ts.map +1 -0
  1370. package/dist/vite/plugin-service-bindings.d.ts +13 -0
  1371. package/dist/vite/plugin-service-bindings.d.ts.map +1 -0
  1372. package/dist/vite/plugin-transform.d.ts +41 -0
  1373. package/dist/vite/plugin-transform.d.ts.map +1 -0
  1374. package/dist/vite/plugin.d.ts +10 -41
  1375. package/dist/vite/plugin.d.ts.map +1 -1
  1376. package/dist/worker-18ceqscc.js +513 -0
  1377. package/dist/worker-1yqpwte2.js +513 -0
  1378. package/dist/worker-2aw27zxy.js +513 -0
  1379. package/dist/worker-45tp4a8f.js +513 -0
  1380. package/dist/worker-663em30d.js +513 -0
  1381. package/dist/worker-68zttchg.js +513 -0
  1382. package/dist/worker-729cf3fh.js +513 -0
  1383. package/dist/worker-99tew196.js +513 -0
  1384. package/dist/worker-argxc7fb.js +513 -0
  1385. package/dist/worker-aydzxt4f.js +513 -0
  1386. package/dist/worker-ejdxma7k.js +513 -0
  1387. package/dist/worker-entry/composed-worker.d.ts +7 -0
  1388. package/dist/worker-entry/composed-worker.d.ts.map +1 -0
  1389. package/dist/worker-entry/durable-object-discovery.d.ts +20 -0
  1390. package/dist/worker-entry/durable-object-discovery.d.ts.map +1 -0
  1391. package/dist/worker-entry/extensions.d.ts +5 -0
  1392. package/dist/worker-entry/extensions.d.ts.map +1 -0
  1393. package/dist/worker-entry/routes.d.ts +22 -0
  1394. package/dist/worker-entry/routes.d.ts.map +1 -0
  1395. package/dist/worker-entry/surface-paths.d.ts +26 -0
  1396. package/dist/worker-entry/surface-paths.d.ts.map +1 -0
  1397. package/dist/worker-entrypoint-3rmzd4c1.js +15 -0
  1398. package/dist/worker-entrypoint-4xp7msd7.js +16 -0
  1399. package/dist/{worker-entrypoint-m9th0rg0.js → worker-entrypoint-c259fmfs.js} +1 -1
  1400. package/dist/worker-entrypoint-f1v9y4s8.js +15 -0
  1401. package/dist/worker-f6xqjg65.js +513 -0
  1402. package/dist/worker-fcdsnj14.js +513 -0
  1403. package/dist/worker-fdnn62de.js +513 -0
  1404. package/dist/worker-fk42rzse.js +513 -0
  1405. package/dist/worker-frnh95rg.js +513 -0
  1406. package/dist/worker-jkemk8d2.js +513 -0
  1407. package/dist/worker-k55nfrmp.js +513 -0
  1408. package/dist/worker-kqc6w7ry.js +513 -0
  1409. package/dist/worker-ksvcq8be.js +513 -0
  1410. package/dist/worker-m4ze8djx.js +513 -0
  1411. package/dist/worker-mjzfstv5.js +513 -0
  1412. package/dist/worker-p4rtsndj.js +513 -0
  1413. package/dist/worker-p6d53qan.js +513 -0
  1414. package/dist/worker-qh2qbv97.js +513 -0
  1415. package/dist/worker-r234vnv9.js +513 -0
  1416. package/dist/worker-r47bv7gt.js +513 -0
  1417. package/dist/worker-s4nvbqsm.js +513 -0
  1418. package/dist/worker-ttj7vwce.js +513 -0
  1419. package/dist/worker-wnan5dca.js +513 -0
  1420. package/dist/worker-wv4jdneg.js +513 -0
  1421. package/dist/worker-xcbscr75.js +513 -0
  1422. package/dist/worker-yw3atfb1.js +513 -0
  1423. package/dist/worker-ywwkf3cp.js +513 -0
  1424. package/dist/worker-z8wtk0sh.js +513 -0
  1425. package/dist/workflows/local-workflow-entrypoints.d.ts +7 -0
  1426. package/dist/workflows/local-workflow-entrypoints.d.ts.map +1 -0
  1427. package/package.json +140 -115
  1428. package/dist/account-rvrj687w.js +0 -397
  1429. package/dist/browser-shim/worker.d.ts +0 -14
  1430. package/dist/browser-shim/worker.d.ts.map +0 -1
  1431. package/dist/build-mnf6v8gd.js +0 -53
  1432. package/dist/deploy-nhceck39.js +0 -70
  1433. package/dist/doctor-e8fy6fj5.js +0 -186
  1434. package/dist/index-67qcae0f.js +0 -183
  1435. package/dist/index-ep3445yc.js +0 -2225
  1436. package/dist/index-hcex3rgh.js +0 -266
  1437. package/dist/index-m2q41jwa.js +0 -462
  1438. package/dist/index-n7rs26ft.js +0 -77
  1439. package/dist/index-tfyxa77h.js +0 -850
  1440. package/dist/index-tk6ej9dj.js +0 -94
  1441. package/dist/test/multi-worker-context.d.ts +0 -114
  1442. package/dist/test/multi-worker-context.d.ts.map +0 -1
@@ -1,321 +1,67 @@
1
1
  import {
2
- findFiles
3
- } from "./index-rbht7m9r.js";
2
+ bundleWorkerEntry,
3
+ createDOBundler
4
+ } from "./index-9fbtk7gv.js";
4
5
  import {
5
- findDurableObjectClasses
6
- } from "./index-gz1gndna.js";
6
+ detectViteProject,
7
+ stopSpawnedProcessTree,
8
+ waitForViteReady
9
+ } from "./index-y1d8za14.js";
7
10
  import {
8
- loadConfig
9
- } from "./index-hcex3rgh.js";
11
+ createCliTheme,
12
+ cyanBold,
13
+ dim,
14
+ logLine,
15
+ yellow
16
+ } from "./index-stgn34cr.js";
17
+ import"./index-3t6rypgc.js";
18
+ import {
19
+ DEFAULT_EMAIL_ENTRY_FILES,
20
+ DEFAULT_FETCH_ENTRY_FILES,
21
+ DEFAULT_QUEUE_ENTRY_FILES,
22
+ DEFAULT_SCHEDULED_ENTRY_FILES,
23
+ hasWorkerSurfacePaths,
24
+ prepareComposedWorkerEntrypoint,
25
+ resolveEffectiveViteProject,
26
+ resolveWorkerSurfacePaths,
27
+ writeGeneratedViteConfig
28
+ } from "./index-p97s12vf.js";
29
+ import {
30
+ discoverRoutes,
31
+ getRouteDirectoryCandidate
32
+ } from "./index-1p814k7s.js";
33
+ import"./index-rbht7m9r.js";
34
+ import"./index-9wt9x09k.js";
35
+ import {
36
+ GATEWAY_RUNTIME_JS
37
+ } from "./index-q34rvh5a.js";
38
+ import {
39
+ clearLocalSendEmailBindings,
40
+ setLocalSendEmailBindings
41
+ } from "./index-124e9t4t.js";
42
+ import"./index-n8k8chde.js";
43
+ import {
44
+ getLocalD1DatabaseIdentifier,
45
+ getLocalKVNamespaceIdentifier,
46
+ getSingleBrowserBindingName,
47
+ loadConfig,
48
+ resolveConfigPath
49
+ } from "./index-dmbdj6va.js";
50
+ import"./index-nte9n8w9.js";
51
+ import"./index-z9fjnwa8.js";
52
+ import"./index-p296ban8.js";
53
+ import"./index-tte89s31.js";
10
54
  import {
11
55
  __require
12
56
  } from "./index-37x76zdn.js";
13
57
 
14
58
  // src/cli/commands/dev.ts
15
59
  import { createConsola } from "consola";
16
- import { resolve as resolve3 } from "pathe";
60
+ import { relative, resolve as resolve4 } from "pathe";
17
61
 
18
62
  // src/dev-server/server.ts
19
- import { resolve as resolve2 } from "pathe";
63
+ import { resolve as resolve3 } from "pathe";
20
64
 
21
- // src/bundler/do-bundler.ts
22
- import { resolve, dirname, relative } from "pathe";
23
- import picomatch from "picomatch";
24
- function classToBindingName(className) {
25
- return className.replace(/([a-z0-9])([A-Z])/g, "$1_$2").replace(/([A-Z]+)([A-Z][a-z])/g, "$1_$2").toUpperCase();
26
- }
27
- async function discoverDOs(cwd, pattern) {
28
- const fs = await import("node:fs/promises");
29
- const discovered = [];
30
- const files = await findFiles(pattern, { cwd });
31
- for (const filePath of files) {
32
- try {
33
- const code = await fs.readFile(filePath, "utf-8");
34
- const classNames = findDurableObjectClasses(code);
35
- for (const className of classNames) {
36
- discovered.push({
37
- filePath,
38
- className,
39
- bindingName: classToBindingName(className)
40
- });
41
- }
42
- } catch {}
43
- }
44
- return discovered;
45
- }
46
- function stripDecoratorSyntax(code) {
47
- let result = code;
48
- result = result.replace(/@durableObject\s*\([^)]*\)\s*\n?\s*(?=export\s+class)/g, "");
49
- result = result.replace(/import\s*\{([^}]*)\bdurableObject\b[^}]*\}\s*from\s*['"]devflare\/runtime['"]\s*;?/g, (match, imports) => {
50
- const cleanedImports = imports.split(",").map((s) => s.trim()).filter((s) => !s.startsWith("durableObject")).join(", ");
51
- if (cleanedImports.trim() === "") {
52
- return "";
53
- }
54
- return `import { ${cleanedImports} } from 'devflare/runtime'`;
55
- });
56
- return result;
57
- }
58
- async function bundleDOFile(sourcePath, className, outDir, cwd) {
59
- const { rolldown } = await import("rolldown");
60
- const fs = await import("node:fs/promises");
61
- await fs.mkdir(outDir, { recursive: true });
62
- const sourceCode = await fs.readFile(sourcePath, "utf-8");
63
- const cleanedCode = stripDecoratorSyntax(sourceCode);
64
- const entryCode = `${cleanedCode}
65
-
66
- // Default export for worker (required by Miniflare)
67
- export default {
68
- async fetch(request) {
69
- return new Response('DO Worker for ${className}', { status: 200 });
70
- }
71
- };
72
- `;
73
- const tempFilePath = resolve(outDir, `_temp_${className}.ts`);
74
- await fs.writeFile(tempFilePath, entryCode, "utf-8");
75
- const classOutDir = resolve(outDir, className);
76
- try {
77
- await fs.rm(classOutDir, { recursive: true, force: true });
78
- } catch {}
79
- await fs.mkdir(classOutDir, { recursive: true });
80
- const debugShimCode = `
81
- // Debug module shim for local development
82
- const createDebug = (namespace) => {
83
- const logger = (...args) => {
84
- if (createDebug.enabled) console.debug(\`[\${namespace}]\`, ...args)
85
- }
86
- logger.enabled = false
87
- logger.namespace = namespace
88
- logger.extend = (sub) => createDebug(\`\${namespace}:\${sub}\`)
89
- return logger
90
- }
91
- createDebug.enabled = false
92
- createDebug.formatters = {}
93
- export default createDebug
94
- `;
95
- const debugShimPath = resolve(outDir, "_debug_shim.js");
96
- await fs.writeFile(debugShimPath, debugShimCode, "utf-8");
97
- const bundle = await rolldown({
98
- input: tempFilePath,
99
- platform: "neutral",
100
- tsconfig: resolve(cwd, "tsconfig.json"),
101
- external: [
102
- /^cloudflare:/,
103
- /^node:/,
104
- "buffer",
105
- "crypto",
106
- "events",
107
- "http",
108
- "https",
109
- "net",
110
- "os",
111
- "path",
112
- "stream",
113
- "tls",
114
- "url",
115
- "util",
116
- "zlib",
117
- "fs",
118
- "child_process",
119
- "async_hooks",
120
- "querystring",
121
- "string_decoder",
122
- "assert",
123
- "dns"
124
- ],
125
- resolve: {
126
- alias: {
127
- debug: debugShimPath
128
- }
129
- }
130
- });
131
- const outFile = resolve(classOutDir, "index.js");
132
- await bundle.write({
133
- file: outFile,
134
- format: "esm",
135
- sourcemap: false,
136
- inlineDynamicImports: true
137
- });
138
- await bundle.close();
139
- try {
140
- await fs.unlink(tempFilePath);
141
- } catch {}
142
- return resolve(classOutDir, "index.js");
143
- }
144
- async function bundleAllDOs(discovered, outDir, cwd, logger) {
145
- const fs = await import("node:fs/promises");
146
- const bundles = new Map;
147
- const classes = new Map;
148
- const sourceFiles = new Map;
149
- const errors = [];
150
- for (const do_ of discovered) {
151
- const existing = sourceFiles.get(do_.filePath) || [];
152
- existing.push(do_.className);
153
- sourceFiles.set(do_.filePath, existing);
154
- }
155
- for (const do_ of discovered) {
156
- try {
157
- logger?.debug(`Bundling ${do_.className} from ${do_.filePath}`);
158
- const outFile = await bundleDOFile(do_.filePath, do_.className, outDir, cwd);
159
- bundles.set(do_.bindingName, outFile);
160
- classes.set(do_.bindingName, do_.className);
161
- logger?.debug(` → ${outFile}`);
162
- } catch (error) {
163
- const err = error instanceof Error ? error : new Error(String(error));
164
- errors.push(err);
165
- logger?.error(`Failed to bundle ${do_.className}:`, err.message);
166
- }
167
- }
168
- return { bundles, classes, sourceFiles, errors };
169
- }
170
- function createDOBundler(options) {
171
- const { cwd, pattern, outDir, logger, onRebuild } = options;
172
- let result = {
173
- bundles: new Map,
174
- classes: new Map,
175
- sourceFiles: new Map,
176
- errors: []
177
- };
178
- let watcher = null;
179
- let chokidarWatcher = null;
180
- async function build() {
181
- const discovered = await discoverDOs(cwd, pattern);
182
- if (discovered.length === 0) {
183
- logger?.debug("No DOs found matching pattern:", pattern);
184
- return result;
185
- }
186
- logger?.info(`Found ${discovered.length} Durable Object(s)`);
187
- for (const do_ of discovered) {
188
- logger?.info(` • ${do_.className} → ${do_.bindingName}`);
189
- }
190
- result = await bundleAllDOs(discovered, outDir, cwd, logger);
191
- if (result.errors.length === 0) {
192
- logger?.success(`Bundled ${result.bundles.size} DO(s) to ${outDir}`);
193
- }
194
- return result;
195
- }
196
- async function watch() {
197
- const chokidar = await import("chokidar");
198
- const files = await findFiles(pattern, { cwd });
199
- let dirsToWatch;
200
- if (files.length > 0) {
201
- dirsToWatch = [...new Set(files.map((f) => dirname(f)))];
202
- } else {
203
- const patternDir = dirname(pattern);
204
- const absolutePatternDir = resolve(cwd, patternDir === "." ? "" : patternDir) || cwd;
205
- dirsToWatch = [absolutePatternDir];
206
- logger?.debug(`No DO files yet, watching pattern directory: ${absolutePatternDir}`);
207
- }
208
- logger?.info(`Watching ${files.length} DO file(s) in ${dirsToWatch.length} director(ies)...`);
209
- const isWindows = process.platform === "win32";
210
- chokidarWatcher = chokidar.watch(dirsToWatch, {
211
- ignoreInitial: true,
212
- usePolling: isWindows,
213
- interval: isWindows ? 300 : undefined,
214
- awaitWriteFinish: {
215
- stabilityThreshold: 100,
216
- pollInterval: 50
217
- },
218
- depth: 0
219
- });
220
- const normalizePath = (p) => {
221
- let normalized = p.replace(/\\/g, "/");
222
- if (isWindows && /^[a-zA-Z]:/.test(normalized)) {
223
- normalized = normalized[0].toLowerCase() + normalized.slice(1);
224
- }
225
- return normalized;
226
- };
227
- const isMatch = picomatch(pattern, {
228
- cwd,
229
- dot: true,
230
- matchBase: false
231
- });
232
- const matchesPattern = (filePath) => {
233
- const normalizedPath = normalizePath(filePath);
234
- const relativePath = relative(normalizePath(cwd), normalizedPath);
235
- return isMatch(relativePath);
236
- };
237
- let isRebuilding = false;
238
- let pendingRebuild = null;
239
- let rebuildTimeout = null;
240
- const scheduleRebuild = (changedPath) => {
241
- if (rebuildTimeout) {
242
- clearTimeout(rebuildTimeout);
243
- }
244
- rebuildTimeout = setTimeout(() => {
245
- triggerRebuild(changedPath);
246
- }, 150);
247
- };
248
- const triggerRebuild = async (changedPath) => {
249
- if (isRebuilding) {
250
- pendingRebuild = changedPath;
251
- logger?.debug(`Rebuild already in progress, queuing: ${changedPath}`);
252
- return;
253
- }
254
- isRebuilding = true;
255
- try {
256
- logger?.info(`DO file changed: ${changedPath}`);
257
- logger?.info("Rebuilding DOs...");
258
- const startTime = Date.now();
259
- result = await build();
260
- const elapsed = Date.now() - startTime;
261
- logger?.success(`DO rebuild complete (${elapsed}ms)`);
262
- await onRebuild?.(result);
263
- } catch (error) {
264
- logger?.error("DO rebuild failed:", error);
265
- } finally {
266
- isRebuilding = false;
267
- if (pendingRebuild) {
268
- const nextPath = pendingRebuild;
269
- pendingRebuild = null;
270
- triggerRebuild(nextPath);
271
- }
272
- }
273
- };
274
- chokidarWatcher.on("change", (filePath) => {
275
- if (matchesPattern(filePath)) {
276
- logger?.debug(`File changed: ${filePath}`);
277
- scheduleRebuild(filePath);
278
- }
279
- });
280
- chokidarWatcher.on("add", (filePath) => {
281
- if (matchesPattern(filePath)) {
282
- logger?.debug(`File added: ${filePath}`);
283
- scheduleRebuild(filePath);
284
- }
285
- });
286
- chokidarWatcher.on("unlink", (filePath) => {
287
- if (matchesPattern(filePath)) {
288
- logger?.debug(`File removed: ${filePath}`);
289
- scheduleRebuild(filePath);
290
- }
291
- });
292
- chokidarWatcher.on("ready", () => {
293
- logger?.info("DO file watcher ready");
294
- });
295
- chokidarWatcher.on("error", (error) => {
296
- logger?.error("DO file watcher error:", error);
297
- });
298
- }
299
- async function close() {
300
- if (watcher) {
301
- await watcher.close();
302
- watcher = null;
303
- }
304
- if (chokidarWatcher) {
305
- await chokidarWatcher.close();
306
- chokidarWatcher = null;
307
- }
308
- }
309
- function getResult() {
310
- return result;
311
- }
312
- return {
313
- build,
314
- watch,
315
- close,
316
- getResult
317
- };
318
- }
319
65
  // src/browser-shim/server.ts
320
66
  import { homedir } from "node:os";
321
67
  import { join } from "node:path";
@@ -328,8 +74,6 @@ import {
328
74
  detectBrowserPlatform,
329
75
  Browser as BrowserType
330
76
  } from "@puppeteer/browsers";
331
- var sessions = new Map;
332
- var history = [];
333
77
  var cachedExecutablePath = null;
334
78
  async function ensureChrome(cacheDir, logger) {
335
79
  if (cachedExecutablePath && existsSync(cachedExecutablePath)) {
@@ -369,8 +113,45 @@ function createBrowserShim(options = {}) {
369
113
  } = options;
370
114
  let server = null;
371
115
  let executablePath = null;
116
+ const sessions = new Map;
117
+ const history = [];
372
118
  let WebSocketServerClass = null;
373
119
  let WebSocketClass = null;
120
+ const maxRequestBodyBytes = 1024 * 1024;
121
+ function getRequestOrigin(req) {
122
+ const origin = req.headers.origin;
123
+ if (typeof origin === "string") {
124
+ return origin;
125
+ }
126
+ if (Array.isArray(origin) && origin[0]) {
127
+ return origin[0];
128
+ }
129
+ return null;
130
+ }
131
+ function isLoopbackOrigin(origin) {
132
+ try {
133
+ const url = new URL(origin);
134
+ return url.hostname === "127.0.0.1" || url.hostname === "localhost" || url.hostname === "::1" || url.hostname === "[::1]";
135
+ } catch {
136
+ return false;
137
+ }
138
+ }
139
+ function applyCorsHeaders(req, res) {
140
+ const origin = getRequestOrigin(req);
141
+ if (!origin) {
142
+ return true;
143
+ }
144
+ if (!isLoopbackOrigin(origin)) {
145
+ res.writeHead(403, { "Content-Type": "application/json" });
146
+ res.end(JSON.stringify({ error: "Forbidden origin" }));
147
+ return false;
148
+ }
149
+ res.setHeader("Access-Control-Allow-Origin", origin);
150
+ res.setHeader("Access-Control-Allow-Methods", "GET, POST, OPTIONS");
151
+ res.setHeader("Access-Control-Allow-Headers", "Content-Type");
152
+ res.setHeader("Vary", "Origin");
153
+ return true;
154
+ }
374
155
  async function acquireSession(acquireOptions) {
375
156
  if (!executablePath) {
376
157
  throw new Error("Chrome not initialized");
@@ -449,9 +230,9 @@ function createBrowserShim(options = {}) {
449
230
  const url = new URL(req.url || "/", `http://${host}:${port}`);
450
231
  const method = req.method || "GET";
451
232
  logger?.debug(`[BrowserShim] ${method} ${url.pathname}${url.search ? url.search : ""}`);
452
- res.setHeader("Access-Control-Allow-Origin", "*");
453
- res.setHeader("Access-Control-Allow-Methods", "GET, POST, OPTIONS");
454
- res.setHeader("Access-Control-Allow-Headers", "Content-Type");
233
+ if (!applyCorsHeaders(req, res)) {
234
+ return;
235
+ }
455
236
  if (method === "OPTIONS") {
456
237
  res.writeHead(204);
457
238
  res.end();
@@ -537,10 +318,19 @@ function createBrowserShim(options = {}) {
537
318
  res.end("Not found");
538
319
  }
539
320
  function readBody(req) {
540
- return new Promise((resolve2, reject) => {
321
+ return new Promise((resolve, reject) => {
541
322
  const chunks = [];
542
- req.on("data", (chunk) => chunks.push(chunk));
543
- req.on("end", () => resolve2(Buffer.concat(chunks).toString()));
323
+ let totalBytes = 0;
324
+ req.on("data", (chunk) => {
325
+ totalBytes += chunk.length;
326
+ if (totalBytes > maxRequestBodyBytes) {
327
+ req.destroy();
328
+ reject(new Error(`Request body exceeds ${maxRequestBodyBytes} bytes`));
329
+ return;
330
+ }
331
+ chunks.push(chunk);
332
+ });
333
+ req.on("end", () => resolve(Buffer.concat(chunks).toString()));
544
334
  req.on("error", reject);
545
335
  });
546
336
  }
@@ -573,6 +363,14 @@ function createBrowserShim(options = {}) {
573
363
  if (WebSocketServerClass) {
574
364
  const wss = new WebSocketServerClass({ noServer: true });
575
365
  server.on("upgrade", (request, socket, head) => {
366
+ const origin = getRequestOrigin(request);
367
+ if (origin && !isLoopbackOrigin(origin)) {
368
+ socket.write(`HTTP/1.1 403 Forbidden\r
369
+ \r
370
+ `);
371
+ socket.destroy();
372
+ return;
373
+ }
576
374
  const url = new URL(request.url || "/", `http://${host}:${port}`);
577
375
  if (url.pathname !== "/v1/connectDevtools") {
578
376
  socket.destroy();
@@ -681,21 +479,21 @@ function createBrowserShim(options = {}) {
681
479
  });
682
480
  });
683
481
  }
684
- await new Promise((resolve2, reject) => {
482
+ await new Promise((resolve, reject) => {
685
483
  server.on("error", reject);
686
484
  server.listen(port, host, () => {
687
- resolve2();
485
+ resolve();
688
486
  });
689
487
  });
690
488
  logger?.success(`Browser shim server ready on http://${host}:${port}`);
691
489
  }
692
490
  async function stop() {
693
- for (const sessionId of sessions.keys()) {
491
+ for (const sessionId of Array.from(sessions.keys())) {
694
492
  await closeSession(sessionId, 3, "ServerShutdown");
695
493
  }
696
494
  if (server) {
697
- await new Promise((resolve2) => {
698
- server.close(() => resolve2());
495
+ await new Promise((resolve) => {
496
+ server.close(() => resolve());
699
497
  });
700
498
  server = null;
701
499
  }
@@ -1087,55 +885,157 @@ async function checkRemoteBindingRequirements(config) {
1087
885
  };
1088
886
  }
1089
887
 
1090
- // src/dev-server/server.ts
1091
- function getGatewayScript(wsRoutes = [], debug = false) {
888
+ // src/dev-server/d1-migrations.ts
889
+ import { resolve } from "pathe";
890
+ var MIGRATION_RETRY_DELAYS_MS = [500, 1000, 1500, 2000];
891
+ function collectMigrationStatements(sql) {
892
+ const cleanedSql = sql.split(`
893
+ `).filter((line) => !line.trim().startsWith("--")).join(`
894
+ `);
895
+ return cleanedSql.split(";").map((statement) => statement.trim()).filter((statement) => statement.length > 0);
896
+ }
897
+ function getErrorMessage(error) {
898
+ return error instanceof Error ? error.message : String(error);
899
+ }
900
+ async function waitForRetry(delayMs) {
901
+ await new Promise((resolvePromise) => setTimeout(resolvePromise, delayMs));
902
+ }
903
+ async function applyMigrationsToBinding(options) {
904
+ const { bindingName, statements, miniflarePort, logger } = options;
905
+ let lastError;
906
+ for (let attempt = 0;attempt <= MIGRATION_RETRY_DELAYS_MS.length; attempt++) {
907
+ if (attempt > 0) {
908
+ await waitForRetry(MIGRATION_RETRY_DELAYS_MS[attempt - 1]);
909
+ }
910
+ try {
911
+ const response = await fetch(`http://127.0.0.1:${miniflarePort}/_devflare/migrate`, {
912
+ method: "POST",
913
+ headers: { "Content-Type": "application/json" },
914
+ body: JSON.stringify({ bindingName, statements })
915
+ });
916
+ if (!response.ok) {
917
+ const text = await response.text();
918
+ throw new Error(`HTTP ${response.status}: ${text}`);
919
+ }
920
+ const result = await response.json();
921
+ if (result.success) {
922
+ logger?.success(`D1 migrations applied to ${bindingName}`);
923
+ return;
924
+ }
925
+ throw new Error(result.error || "Unknown error");
926
+ } catch (error) {
927
+ lastError = error;
928
+ }
929
+ }
930
+ logger?.warn(`Failed to apply migrations to ${bindingName}: ${getErrorMessage(lastError)}`);
931
+ }
932
+ async function runD1Migrations(options) {
933
+ const { cwd, config, miniflarePort, logger } = options;
934
+ if (!config?.bindings?.d1) {
935
+ return;
936
+ }
937
+ const { existsSync: existsSync2, readdirSync, readFileSync, statSync } = await import("node:fs");
938
+ const migrationsDir = resolve(cwd, "migrations");
939
+ if (!existsSync2(migrationsDir)) {
940
+ logger?.debug("No migrations/ directory found, skipping D1 migrations");
941
+ return;
942
+ }
943
+ const sharedFiles = readdirSync(migrationsDir).filter((file) => file.endsWith(".sql")).sort();
944
+ let sharedStatements = null;
945
+ if (sharedFiles.length > 0) {
946
+ sharedStatements = [];
947
+ for (const file of sharedFiles) {
948
+ const sql = readFileSync(resolve(migrationsDir, file), "utf-8");
949
+ const fileStatements = collectMigrationStatements(sql);
950
+ sharedStatements.push(...fileStatements);
951
+ logger?.debug(`Shared file ${file}: ${fileStatements.length} statement(s)`);
952
+ }
953
+ }
954
+ for (const [bindingName] of Object.entries(config.bindings.d1)) {
955
+ const perBindingDir = resolve(migrationsDir, bindingName);
956
+ const hasPerBindingDir = existsSync2(perBindingDir) && statSync(perBindingDir).isDirectory();
957
+ let statements = [];
958
+ let fileCount = 0;
959
+ let sourceLabel = "";
960
+ if (hasPerBindingDir) {
961
+ const perBindingFiles = readdirSync(perBindingDir).filter((file) => file.endsWith(".sql")).sort();
962
+ if (perBindingFiles.length === 0) {
963
+ logger?.debug(`No SQL migration files in migrations/${bindingName}/, skipping ${bindingName}`);
964
+ continue;
965
+ }
966
+ for (const file of perBindingFiles) {
967
+ const sql = readFileSync(resolve(perBindingDir, file), "utf-8");
968
+ const fileStatements = collectMigrationStatements(sql);
969
+ statements.push(...fileStatements);
970
+ logger?.debug(`File ${bindingName}/${file}: ${fileStatements.length} statement(s)`);
971
+ }
972
+ fileCount = perBindingFiles.length;
973
+ sourceLabel = `migrations/${bindingName}/`;
974
+ } else if (sharedStatements !== null) {
975
+ statements = sharedStatements;
976
+ fileCount = sharedFiles.length;
977
+ sourceLabel = "migrations/ [shared fallback]";
978
+ } else {
979
+ logger?.debug(`No migrations found for ${bindingName}, skipping`);
980
+ continue;
981
+ }
982
+ logger?.info(`Running ${fileCount} D1 migration(s) for ${bindingName} (from ${sourceLabel})`);
983
+ if (statements.length === 0) {
984
+ logger?.debug(`No executable D1 migration statements for ${bindingName}`);
985
+ continue;
986
+ }
987
+ await applyMigrationsToBinding({
988
+ bindingName,
989
+ statements,
990
+ miniflarePort,
991
+ logger
992
+ });
993
+ }
994
+ }
995
+
996
+ // src/dev-server/gateway-script.ts
997
+ function getGatewayScript(wsRoutes = [], debug = false, appServiceBindingName = null) {
1092
998
  const wsRoutesJson = JSON.stringify(wsRoutes);
999
+ const appServiceBindingJson = JSON.stringify(appServiceBindingName);
1093
1000
  return `
1094
- // Bridge Gateway Worker — RPC Handler
1095
- // Handles all binding operations via WebSocket RPC
1096
- // Also handles WebSocket proxying to Durable Objects
1001
+ ${GATEWAY_RUNTIME_JS}
1002
+
1003
+ // Bridge Gateway Worker Dev Server
1004
+ // Handles WebSocket RPC, DO WS proxying, HTTP transfer, D1 migration, email ingest
1097
1005
 
1098
1006
  const DEBUG = ${debug}
1099
1007
  const log = (...args) => DEBUG && console.log('[Gateway]', ...args)
1100
1008
 
1101
- const activeStreams = new Map()
1102
1009
  const wsProxies = new Map()
1103
- const incomingStreams = new Map()
1104
1010
 
1105
- // WebSocket routes configuration (injected at build time)
1106
1011
  const WS_ROUTES = ${wsRoutesJson}
1012
+ const APP_SERVICE_BINDING = ${appServiceBindingJson}
1107
1013
 
1108
1014
  export default {
1109
1015
  async fetch(request, env, ctx) {
1110
1016
  const url = new URL(request.url)
1111
1017
  const isWebSocket = request.headers.get('Upgrade') === 'websocket'
1112
1018
 
1113
- // Check if this is a WebSocket request matching a DO route
1114
1019
  if (isWebSocket) {
1115
1020
  const matchedRoute = matchWsRoute(url.pathname)
1116
1021
  if (matchedRoute) {
1117
1022
  return handleDoWebSocket(request, env, url, matchedRoute)
1118
1023
  }
1119
- // Otherwise handle as bridge RPC WebSocket
1120
1024
  return handleBridgeWebSocket(request, env, ctx)
1121
1025
  }
1122
1026
 
1123
- // HTTP endpoint for large file transfers
1124
1027
  if (url.pathname.startsWith('/_devflare/transfer/')) {
1125
1028
  return handleHttpTransfer(request, env, url)
1126
1029
  }
1127
1030
 
1128
- // D1 migration endpoint
1129
1031
  if (url.pathname === '/_devflare/migrate' && request.method === 'POST') {
1130
1032
  return handleMigration(request, env)
1131
1033
  }
1132
1034
 
1133
- // Email handler endpoint (simulates incoming email)
1134
1035
  if (url.pathname === '/cdn-cgi/handler/email' && request.method === 'POST') {
1135
1036
  return handleEmailIncoming(request, env, ctx, url)
1136
1037
  }
1137
1038
 
1138
- // Health check
1139
1039
  if (url.pathname === '/_devflare/health') {
1140
1040
  return new Response(JSON.stringify({
1141
1041
  ok: true,
@@ -1144,11 +1044,17 @@ export default {
1144
1044
  }), { headers: { 'Content-Type': 'application/json' } })
1145
1045
  }
1146
1046
 
1047
+ if (APP_SERVICE_BINDING) {
1048
+ const appWorker = env[APP_SERVICE_BINDING]
1049
+ if (appWorker && typeof appWorker.fetch === 'function') {
1050
+ return appWorker.fetch(request)
1051
+ }
1052
+ }
1053
+
1147
1054
  return new Response('Devflare Bridge Gateway', { status: 200 })
1148
1055
  }
1149
1056
  }
1150
1057
 
1151
- // Handle D1 migrations
1152
1058
  async function handleMigration(request, env) {
1153
1059
  try {
1154
1060
  const { bindingName, statements } = await request.json()
@@ -1175,92 +1081,48 @@ async function handleMigration(request, env) {
1175
1081
  }
1176
1082
  }
1177
1083
  }
1178
-
1179
- // Verify table exists after migration
1084
+
1180
1085
  try {
1181
1086
  const tables = await db.prepare("SELECT name FROM sqlite_master WHERE type='table'").all()
1182
1087
  log('Tables after migration:', JSON.stringify(tables))
1183
1088
  } catch (e) {
1184
1089
  log('Error listing tables:', e.message)
1185
1090
  }
1186
-
1091
+
1187
1092
  return Response.json({ success: true, results })
1188
1093
  } catch (error) {
1189
1094
  return Response.json({ error: error?.message || String(error) }, { status: 500 })
1190
1095
  }
1191
1096
  }
1192
1097
 
1193
- // Handle incoming email (simulates email() handler)
1194
1098
  async function handleEmailIncoming(request, env, ctx, url) {
1195
1099
  try {
1196
1100
  const from = url.searchParams.get('from') || 'unknown@example.com'
1197
1101
  const to = url.searchParams.get('to') || 'worker@example.com'
1198
1102
  const rawBody = await request.text()
1199
-
1103
+
1200
1104
  log('Email incoming:', { from, to, bodyLength: rawBody.length })
1201
-
1202
- // Parse headers from raw email for the Headers object
1203
- const headerLines = []
1204
- const lines = rawBody.split(/\\r?\\n/)
1205
- let bodyStart = 0
1206
- for (let i = 0; i < lines.length; i++) {
1207
- if (lines[i].trim() === '') {
1208
- bodyStart = i + 1
1209
- break
1210
- }
1211
- headerLines.push(lines[i])
1212
- }
1213
-
1214
- const headers = new Headers()
1215
- for (const line of headerLines) {
1216
- const colonIdx = line.indexOf(':')
1217
- if (colonIdx > 0) {
1218
- const key = line.slice(0, colonIdx).trim()
1219
- const value = line.slice(colonIdx + 1).trim()
1220
- headers.append(key, value)
1221
- }
1222
- }
1223
-
1224
- // Create ReadableStream from raw email
1225
- const rawStream = new ReadableStream({
1226
- start(controller) {
1227
- controller.enqueue(new TextEncoder().encode(rawBody))
1228
- controller.close()
1229
- }
1230
- })
1231
-
1232
- // Create ForwardableEmailMessage-like object
1233
- const emailMessage = {
1234
- from,
1235
- to,
1236
- headers,
1237
- raw: rawStream,
1238
- rawSize: rawBody.length,
1239
-
1240
- setReject(reason) {
1241
- log('Email rejected:', reason)
1242
- },
1243
-
1244
- async forward(rcptTo, extraHeaders) {
1245
- log('Email forwarded to:', rcptTo)
1246
- return Promise.resolve()
1247
- },
1248
-
1249
- async reply(message) {
1250
- log('Email reply sent to:', message.from)
1251
- return Promise.resolve()
1105
+
1106
+ if (APP_SERVICE_BINDING) {
1107
+ const appWorker = env[APP_SERVICE_BINDING]
1108
+ if (appWorker && typeof appWorker.fetch === 'function') {
1109
+ const response = await appWorker.fetch(new Request('http://devflare.internal/_devflare/internal/email', {
1110
+ method: 'POST',
1111
+ headers: {
1112
+ 'x-devflare-event': 'email',
1113
+ 'x-devflare-email-from': from,
1114
+ 'x-devflare-email-to': to,
1115
+ 'content-type': request.headers.get('content-type') || 'text/plain'
1116
+ },
1117
+ body: rawBody
1118
+ }))
1119
+
1120
+ if (!response.ok) {
1121
+ return response
1122
+ }
1252
1123
  }
1253
1124
  }
1254
-
1255
- // Look for email handler in the worker module
1256
- // For now, we call via a special RPC method that DO workers can implement
1257
- // The email binding should be configured in the worker
1258
-
1259
- // Check if there's an EMAIL_HANDLER binding (special DO for email handling)
1260
- if (env.__emailHandler && typeof env.__emailHandler.email === 'function') {
1261
- await env.__emailHandler.email(emailMessage, env, ctx)
1262
- }
1263
-
1125
+
1264
1126
  return new Response(JSON.stringify({ ok: true, from, to }), {
1265
1127
  headers: { 'Content-Type': 'application/json' }
1266
1128
  })
@@ -1270,10 +1132,8 @@ async function handleEmailIncoming(request, env, ctx, url) {
1270
1132
  }
1271
1133
  }
1272
1134
 
1273
- // Match URL path against configured WS routes
1274
1135
  function matchWsRoute(pathname) {
1275
1136
  for (const route of WS_ROUTES) {
1276
- // Simple exact match for now (could add glob/regex later)
1277
1137
  if (pathname === route.pattern || pathname.startsWith(route.pattern + '?')) {
1278
1138
  return route
1279
1139
  }
@@ -1281,31 +1141,23 @@ function matchWsRoute(pathname) {
1281
1141
  return null
1282
1142
  }
1283
1143
 
1284
- // Handle WebSocket upgrade that should go to a Durable Object
1285
1144
  async function handleDoWebSocket(request, env, url, route) {
1286
1145
  try {
1287
- // Get the DO namespace
1288
1146
  const namespace = env[route.doNamespace]
1289
1147
  if (!namespace) {
1290
1148
  console.error('[Gateway] DO namespace not found:', route.doNamespace)
1291
1149
  return new Response('DO namespace not found: ' + route.doNamespace, { status: 500 })
1292
1150
  }
1293
1151
 
1294
- // Get the instance ID from query params
1295
1152
  const idValue = url.searchParams.get(route.idParam) || 'default'
1296
-
1297
- // Get or create DO instance
1298
1153
  const doId = namespace.idFromName(idValue)
1299
1154
  const stub = namespace.get(doId)
1300
1155
 
1301
- // Construct the forward URL for the DO
1302
1156
  const forwardUrl = new URL(route.forwardPath, url.origin)
1303
- // Forward all query params
1304
1157
  url.searchParams.forEach((v, k) => forwardUrl.searchParams.set(k, v))
1305
1158
 
1306
1159
  log('Forwarding WebSocket to DO:', route.doNamespace, 'id:', idValue, 'path:', forwardUrl.pathname)
1307
1160
 
1308
- // Forward the request to the DO
1309
1161
  return stub.fetch(forwardUrl.toString(), {
1310
1162
  method: request.method,
1311
1163
  headers: request.headers
@@ -1316,7 +1168,6 @@ async function handleDoWebSocket(request, env, url, route) {
1316
1168
  }
1317
1169
  }
1318
1170
 
1319
- // Handle bridge RPC WebSocket (for Node.js Vite server communication)
1320
1171
  function handleBridgeWebSocket(request, env, ctx) {
1321
1172
  const { 0: client, 1: server } = new WebSocketPair()
1322
1173
  server.accept()
@@ -1332,7 +1183,6 @@ function handleBridgeWebSocket(request, env, ctx) {
1332
1183
  })
1333
1184
 
1334
1185
  server.addEventListener('close', () => {
1335
- activeStreams.clear()
1336
1186
  wsProxies.clear()
1337
1187
  })
1338
1188
 
@@ -1363,160 +1213,9 @@ async function handleRpcCall(msg, ws, env, ctx) {
1363
1213
  ws.send(JSON.stringify({
1364
1214
  t: 'rpc.err',
1365
1215
  id: msg.id,
1366
- error: { code: error.code || 'INTERNAL_ERROR', message: error.message }
1367
- }))
1368
- }
1369
- }
1370
-
1371
- async function executeRpcMethod(method, params, env, ctx) {
1372
- const parts = method.split('.')
1373
- const bindingName = parts[0]
1374
- const operation = parts.slice(1).join('.')
1375
- const binding = env[bindingName]
1376
-
1377
- if (!binding) throw new Error('Binding not found: ' + bindingName)
1378
-
1379
- // KV operations
1380
- if (operation === 'get') return binding.get(params[0], params[1])
1381
- if (operation === 'put') return binding.put(params[0], params[1], params[2])
1382
- if (operation === 'delete') return binding.delete(params[0])
1383
- if (operation === 'list') return binding.list(params[0])
1384
- if (operation === 'getWithMetadata') return binding.getWithMetadata(params[0], params[1])
1385
-
1386
- // R2 operations
1387
- if (operation === 'head') return serializeR2Object(await binding.head(params[0]))
1388
- if (operation === 'r2.get') {
1389
- const obj = await binding.get(params[0], params[1])
1390
- if (!obj) return null
1391
- const body = await obj.arrayBuffer()
1392
- return serializeR2ObjectBody(obj, arrayBufferToBase64(body))
1393
- }
1394
- if (operation === 'r2.put') {
1395
- // Deserialize the value if it's a serialized ArrayBuffer/Uint8Array
1396
- let value = params[1]
1397
- if (value && typeof value === 'object') {
1398
- if (value.__type === 'ArrayBuffer') {
1399
- value = base64ToArrayBuffer(value.data)
1400
- } else if (value.__type === 'Uint8Array') {
1401
- value = base64ToArrayBuffer(value.data)
1402
- }
1403
- }
1404
- return serializeR2Object(await binding.put(params[0], value, params[2]))
1405
- }
1406
- if (operation === 'r2.delete') return binding.delete(params[0])
1407
- if (operation === 'r2.list') return serializeR2Objects(await binding.list(params[0]))
1408
-
1409
- // D1 operations
1410
- if (operation === 'exec') return binding.exec(params[0])
1411
- if (operation.startsWith('stmt.')) {
1412
- log('D1 RPC:', bindingName, operation, 'sql:', String(params[0]).slice(0, 60))
1413
- const mode = operation.split('.')[1]
1414
- const [sql, ...rest] = params
1415
-
1416
- // For first/raw, the last element is the column/options parameter (may be undefined)
1417
- // For all/run, rest contains only bindings
1418
- let bindings = rest
1419
- let extraParam = undefined
1420
-
1421
- if (mode === 'first' || mode === 'raw') {
1422
- // Last element is the column/options (may be undefined)
1423
- extraParam = rest[rest.length - 1]
1424
- bindings = rest.slice(0, -1)
1425
- }
1426
-
1427
- let stmt = binding.prepare(sql)
1428
- if (bindings.length > 0) stmt = stmt.bind(...bindings)
1429
-
1430
- if (mode === 'first') {
1431
- // Only pass column if it's a non-empty string
1432
- if (typeof extraParam === 'string' && extraParam.length > 0) {
1433
- return stmt.first(extraParam)
1434
- }
1435
- return stmt.first()
1436
- }
1437
- if (mode === 'all') return stmt.all()
1438
- if (mode === 'run') return stmt.run()
1439
- if (mode === 'raw') return stmt.raw(extraParam)
1440
- }
1441
-
1442
- // DO operations
1443
- if (operation === 'idFromName') {
1444
- const id = binding.idFromName(params[0])
1445
- return { __type: 'DOId', hex: id.toString() }
1446
- }
1447
- if (operation === 'idFromString') {
1448
- const id = binding.idFromString(params[0])
1449
- return { __type: 'DOId', hex: id.toString() }
1450
- }
1451
- if (operation === 'newUniqueId') {
1452
- const id = binding.newUniqueId(params[0])
1453
- return { __type: 'DOId', hex: id.toString() }
1454
- }
1455
- if (operation === 'stub.fetch') {
1456
- const [, serializedId, serializedReq] = params
1457
- log('stub.fetch request:', {
1458
- url: serializedReq.url,
1459
- method: serializedReq.method,
1460
- headers: serializedReq.headers,
1461
- hasBody: !!serializedReq.body
1462
- })
1463
- const id = binding.idFromString(serializedId.hex)
1464
- const stub = binding.get(id)
1465
- try {
1466
- const response = await stub.fetch(new Request(serializedReq.url, {
1467
- method: serializedReq.method,
1468
- headers: serializedReq.headers,
1469
- body: serializedReq.body?.type === 'bytes' ? base64ToArrayBuffer(serializedReq.body.data) : undefined
1470
- }))
1471
- // Clone to read body for logging if there's an error
1472
- const cloned = response.clone()
1473
- const serialized = await serializeResponse(response)
1474
- log('stub.fetch response:', {
1475
- status: serialized.status,
1476
- headers: serialized.headers,
1477
- bodyLength: serialized.body?.data?.length || 0
1478
- })
1479
- // If 500, log the body content
1480
- if (response.status >= 400) {
1481
- const errBody = await cloned.text()
1482
- log('Error response body:', errBody)
1483
- }
1484
- return serialized
1485
- } catch (err) {
1486
- console.error('[Gateway] stub.fetch error:', err)
1487
- throw err
1488
- }
1489
- }
1490
- if (operation === 'stub.rpc') {
1491
- const [, serializedId, methodName, args] = params
1492
- const id = binding.idFromString(serializedId.hex)
1493
- const stub = binding.get(id)
1494
- const response = await stub.fetch(new Request('http://do/_rpc', {
1495
- method: 'POST',
1496
- headers: { 'Content-Type': 'application/json' },
1497
- body: JSON.stringify({ method: methodName, params: args })
1216
+ error: { code: error?.code || 'INTERNAL_ERROR', message: error?.message || String(error) }
1498
1217
  }))
1499
- const result = await response.json()
1500
- if (!result.ok) throw new Error(result.error?.message || 'RPC failed')
1501
- return result.result
1502
- }
1503
-
1504
- // Queue operations
1505
- if (operation === 'send') return binding.send(params[0], params[1])
1506
- if (operation === 'sendBatch') return binding.sendBatch(params[0], params[1])
1507
-
1508
- // Email send operations (send_email binding)
1509
- if (operation === 'email.send') {
1510
- log('Email send:', { from: params[0]?.from, to: params[0]?.to })
1511
- // In local dev, we just log the email - Miniflare handles writing to file
1512
- if (binding && typeof binding.send === 'function') {
1513
- return binding.send(params[0])
1514
- }
1515
- // Return success even if no real binding (simulated)
1516
- return { ok: true, simulated: true }
1517
1218
  }
1518
-
1519
- throw new Error('Unknown operation: ' + method)
1520
1219
  }
1521
1220
 
1522
1221
  async function handleWsOpen(msg, ws, env) {
@@ -1575,7 +1274,7 @@ async function handleHttpTransfer(request, env, url) {
1575
1274
 
1576
1275
  if (request.method === 'PUT' || request.method === 'POST') {
1577
1276
  const result = await bucket.put(key, request.body)
1578
- return new Response(JSON.stringify(result), { headers: { 'Content-Type': 'application/json' } })
1277
+ return new Response(JSON.stringify(serializeR2Object(result)), { headers: { 'Content-Type': 'application/json' } })
1579
1278
  }
1580
1279
 
1581
1280
  if (request.method === 'GET') {
@@ -1591,71 +1290,253 @@ async function handleHttpTransfer(request, env, url) {
1591
1290
 
1592
1291
  return new Response('Method not allowed', { status: 405 })
1593
1292
  }
1293
+ `;
1294
+ }
1594
1295
 
1595
- // Helpers
1596
- function serializeR2Object(obj) {
1597
- if (!obj) return null
1598
- return {
1599
- __type: 'R2Object',
1600
- key: obj.key,
1601
- version: obj.version,
1602
- size: obj.size,
1603
- etag: obj.etag,
1604
- httpEtag: obj.httpEtag,
1605
- checksums: obj.checksums,
1606
- uploaded: obj.uploaded?.toISOString(),
1607
- httpMetadata: obj.httpMetadata,
1608
- customMetadata: obj.customMetadata,
1609
- range: obj.range,
1610
- storageClass: obj.storageClass
1611
- }
1296
+ // src/dev-server/miniflare-log.ts
1297
+ var ANSI_ESCAPE_REGEX = /\u001B\[[0-9;]*m/g;
1298
+ var COMPATIBILITY_DATE_FALLBACK_REGEX = /^The latest compatibility date supported by the installed Cloudflare Workers Runtime is "([^"]+)", but you've requested "([^"]+)"\. Falling back to "([^"]+)"\.\.\.$/;
1299
+ function normalizeMiniflareMessage(message) {
1300
+ return message.replace(ANSI_ESCAPE_REGEX, "").replace(/\s+/g, " ").trim();
1612
1301
  }
1613
- function serializeR2ObjectBody(obj, bodyData) {
1614
- if (!obj) return null
1615
- return {
1616
- __type: 'R2ObjectBody',
1617
- key: obj.key,
1618
- version: obj.version,
1619
- size: obj.size,
1620
- etag: obj.etag,
1621
- httpEtag: obj.httpEtag,
1622
- checksums: obj.checksums,
1623
- uploaded: obj.uploaded?.toISOString(),
1624
- httpMetadata: obj.httpMetadata,
1625
- customMetadata: obj.customMetadata,
1626
- range: obj.range,
1627
- storageClass: obj.storageClass,
1628
- bodyData
1629
- }
1302
+ function formatCompatibilityDateFallbackNotice(message) {
1303
+ const normalizedMessage = normalizeMiniflareMessage(message);
1304
+ const match = COMPATIBILITY_DATE_FALLBACK_REGEX.exec(normalizedMessage);
1305
+ if (!match) {
1306
+ return null;
1307
+ }
1308
+ const [, _supportedDate, requestedDate, fallbackDate] = match;
1309
+ return `Using latest supported Cloudflare Workers Runtime compatibility date ${fallbackDate} (requested ${requestedDate})`;
1630
1310
  }
1631
- function serializeR2Objects(result) {
1632
- if (!result) return null
1633
- return { objects: result.objects.map(serializeR2Object), truncated: result.truncated, cursor: result.cursor }
1311
+ function createCompatibilityAwareMiniflareLog(BaseLog, level, logger) {
1312
+ const log = new BaseLog(level);
1313
+ const originalWarn = log.warn.bind(log);
1314
+ const originalInfo = log.info.bind(log);
1315
+ log.warn = (message) => {
1316
+ const notice = formatCompatibilityDateFallbackNotice(message);
1317
+ if (!notice) {
1318
+ originalWarn(message);
1319
+ return;
1320
+ }
1321
+ if (logger) {
1322
+ logger.info(notice);
1323
+ return;
1324
+ }
1325
+ originalInfo(notice);
1326
+ };
1327
+ return log;
1634
1328
  }
1635
- async function serializeResponse(response) {
1636
- // Read body as bytes and encode as base64
1637
- let body = null
1638
- if (response.body) {
1639
- const bytes = await response.arrayBuffer()
1640
- if (bytes.byteLength > 0) {
1641
- body = { type: 'bytes', data: arrayBufferToBase64(bytes) }
1642
- }
1643
- }
1644
- return { status: response.status, statusText: response.statusText, headers: [...response.headers.entries()], body }
1329
+
1330
+ // src/dev-server/runtime-stdio.ts
1331
+ import { createInterface } from "node:readline";
1332
+ function writeStdout(logger, message) {
1333
+ if (typeof logger?.log === "function") {
1334
+ logger.log(message);
1335
+ return;
1336
+ }
1337
+ if (typeof logger?.info === "function") {
1338
+ logger.info(message);
1339
+ return;
1340
+ }
1341
+ console.log(message);
1645
1342
  }
1646
- function arrayBufferToBase64(buffer) {
1647
- const bytes = new Uint8Array(buffer)
1648
- let binary = ''
1649
- for (let i = 0; i < bytes.byteLength; i++) binary += String.fromCharCode(bytes[i])
1650
- return btoa(binary)
1343
+ function writeStderr(logger, message) {
1344
+ if (typeof logger?.error === "function") {
1345
+ logger.error(message);
1346
+ return;
1347
+ }
1348
+ console.error(message);
1651
1349
  }
1652
- function base64ToArrayBuffer(base64) {
1653
- const binary = atob(base64)
1654
- const bytes = new Uint8Array(binary.length)
1655
- for (let i = 0; i < binary.length; i++) bytes[i] = binary.charCodeAt(i)
1656
- return bytes.buffer
1350
+ function createRuntimeStdioForwarder(logger) {
1351
+ return (stdout, stderr) => {
1352
+ createInterface({ input: stdout }).on("line", (data) => {
1353
+ writeStdout(logger, data);
1354
+ });
1355
+ createInterface({ input: stderr }).on("line", (data) => {
1356
+ writeStderr(logger, data);
1357
+ });
1358
+ };
1657
1359
  }
1658
- `;
1360
+
1361
+ // src/dev-server/vite-process.ts
1362
+ import { spawn } from "node:child_process";
1363
+ async function startViteProcess(options) {
1364
+ const {
1365
+ cwd,
1366
+ vitePort,
1367
+ miniflarePort,
1368
+ generatedViteConfigPath,
1369
+ logger
1370
+ } = options;
1371
+ const args = ["vite", "dev", "--port", String(vitePort)];
1372
+ if (generatedViteConfigPath) {
1373
+ args.push("--config", generatedViteConfigPath);
1374
+ }
1375
+ const viteProcess = spawn("bunx", args, {
1376
+ cwd,
1377
+ stdio: ["inherit", "pipe", "pipe"],
1378
+ windowsHide: true,
1379
+ env: {
1380
+ ...process.env,
1381
+ DEVFLARE_DEV: "true",
1382
+ DEVFLARE_BRIDGE_PORT: String(miniflarePort),
1383
+ FORCE_COLOR: "1"
1384
+ }
1385
+ });
1386
+ const readyUrl = await waitForViteReady(viteProcess, {
1387
+ onStdout(chunk) {
1388
+ process.stdout.write(chunk);
1389
+ },
1390
+ onStderr(chunk) {
1391
+ process.stderr.write(chunk);
1392
+ }
1393
+ });
1394
+ if (readyUrl) {
1395
+ logger?.success(`Vite dev server started on ${readyUrl}`);
1396
+ return viteProcess;
1397
+ }
1398
+ logger?.warn("Vite process started, but the final local URL could not be confirmed yet");
1399
+ return viteProcess;
1400
+ }
1401
+
1402
+ // src/dev-server/worker-surface-paths.ts
1403
+ import { dirname, resolve as resolve2 } from "pathe";
1404
+ var DEFAULT_TRANSPORT_ENTRY_FILES = [
1405
+ "src/transport.ts",
1406
+ "src/transport.js",
1407
+ "src/transport.mts",
1408
+ "src/transport.mjs"
1409
+ ];
1410
+ var resolveMainWorkerSurfacePaths = resolveWorkerSurfacePaths;
1411
+ function addWorkerWatchRoots(roots, cwd, configuredPath, defaultEntries) {
1412
+ if (configuredPath === false || configuredPath === null) {
1413
+ return;
1414
+ }
1415
+ if (typeof configuredPath === "string" && configuredPath) {
1416
+ roots.add(dirname(resolve2(cwd, configuredPath)));
1417
+ return;
1418
+ }
1419
+ for (const defaultEntry of defaultEntries) {
1420
+ roots.add(dirname(resolve2(cwd, defaultEntry)));
1421
+ }
1422
+ }
1423
+ function collectWorkerWatchRoots(cwd, config, mainWorkerSurfacePaths) {
1424
+ const roots = new Set;
1425
+ for (const surfacePath of Object.values(mainWorkerSurfacePaths)) {
1426
+ if (surfacePath) {
1427
+ roots.add(dirname(surfacePath));
1428
+ }
1429
+ }
1430
+ addWorkerWatchRoots(roots, cwd, config.files?.fetch, DEFAULT_FETCH_ENTRY_FILES);
1431
+ addWorkerWatchRoots(roots, cwd, config.files?.queue, DEFAULT_QUEUE_ENTRY_FILES);
1432
+ addWorkerWatchRoots(roots, cwd, config.files?.scheduled, DEFAULT_SCHEDULED_ENTRY_FILES);
1433
+ addWorkerWatchRoots(roots, cwd, config.files?.email, DEFAULT_EMAIL_ENTRY_FILES);
1434
+ addWorkerWatchRoots(roots, cwd, config.files?.transport, DEFAULT_TRANSPORT_ENTRY_FILES);
1435
+ const routeDirectory = getRouteDirectoryCandidate(cwd, config);
1436
+ if (routeDirectory) {
1437
+ roots.add(routeDirectory.absoluteDir);
1438
+ }
1439
+ return [...roots];
1440
+ }
1441
+
1442
+ // src/dev-server/worker-source-watcher.ts
1443
+ async function startWorkerSourceWatcher(options) {
1444
+ const { watchTargets, resolvedWorkerConfigPath, logger, onConfigChange, onWorkerChange } = options;
1445
+ if (watchTargets.length === 0) {
1446
+ return null;
1447
+ }
1448
+ const chokidar = await import("chokidar");
1449
+ const isWindows = process.platform === "win32";
1450
+ const ignoredSegments = ["/node_modules/", "/.git/", "/.devflare/", "/dist/"];
1451
+ const normalizePath = (filePath) => filePath.replace(/\\/g, "/");
1452
+ const isIgnoredPath = (filePath) => {
1453
+ const normalizedPath = normalizePath(filePath);
1454
+ return ignoredSegments.some((segment) => normalizedPath.includes(segment));
1455
+ };
1456
+ let reloadTimeout = null;
1457
+ let reloadInProgress = false;
1458
+ let pendingReloadPath = null;
1459
+ const flushPendingReload = async () => {
1460
+ if (!pendingReloadPath) {
1461
+ return;
1462
+ }
1463
+ const nextPath = pendingReloadPath;
1464
+ pendingReloadPath = null;
1465
+ await triggerReload(nextPath);
1466
+ };
1467
+ const triggerReload = async (filePath) => {
1468
+ if (reloadInProgress) {
1469
+ pendingReloadPath = filePath;
1470
+ return;
1471
+ }
1472
+ reloadInProgress = true;
1473
+ try {
1474
+ const normalizedConfigPath = resolvedWorkerConfigPath ? normalizePath(resolvedWorkerConfigPath) : null;
1475
+ if (normalizedConfigPath && normalizePath(filePath) === normalizedConfigPath) {
1476
+ logger?.info(`Devflare config changed: ${filePath}`);
1477
+ await onConfigChange();
1478
+ return;
1479
+ }
1480
+ logger?.info(`Worker source changed: ${filePath}`);
1481
+ await onWorkerChange();
1482
+ } catch (error) {
1483
+ logger?.error("Worker source reload failed:", error);
1484
+ } finally {
1485
+ reloadInProgress = false;
1486
+ await flushPendingReload();
1487
+ }
1488
+ };
1489
+ const scheduleReload = (filePath) => {
1490
+ if (reloadTimeout) {
1491
+ clearTimeout(reloadTimeout);
1492
+ }
1493
+ reloadTimeout = setTimeout(() => {
1494
+ reloadTimeout = null;
1495
+ triggerReload(filePath);
1496
+ }, 150);
1497
+ };
1498
+ const watcher = chokidar.watch(watchTargets, {
1499
+ ignoreInitial: true,
1500
+ usePolling: isWindows,
1501
+ interval: isWindows ? 300 : undefined,
1502
+ awaitWriteFinish: {
1503
+ stabilityThreshold: 100,
1504
+ pollInterval: 50
1505
+ },
1506
+ ignored: (filePath) => isIgnoredPath(filePath)
1507
+ });
1508
+ const onFileEvent = (filePath) => {
1509
+ if (isIgnoredPath(filePath)) {
1510
+ return;
1511
+ }
1512
+ scheduleReload(filePath);
1513
+ };
1514
+ watcher.on("change", onFileEvent);
1515
+ watcher.on("add", onFileEvent);
1516
+ watcher.on("unlink", onFileEvent);
1517
+ watcher.on("error", (error) => {
1518
+ logger?.error("Worker source watcher error:", error);
1519
+ });
1520
+ await new Promise((resolvePromise, rejectPromise) => {
1521
+ const handleReady = () => {
1522
+ watcher.off("error", handleInitialError);
1523
+ logger?.info(`Worker source watcher ready (${watchTargets.length} target(s))`);
1524
+ resolvePromise();
1525
+ };
1526
+ const handleInitialError = (error) => {
1527
+ watcher.off("ready", handleReady);
1528
+ rejectPromise(error instanceof Error ? error : new Error(String(error)));
1529
+ };
1530
+ watcher.once("ready", handleReady);
1531
+ watcher.once("error", handleInitialError);
1532
+ });
1533
+ return watcher;
1534
+ }
1535
+
1536
+ // src/dev-server/server.ts
1537
+ var INTERNAL_APP_SERVICE_BINDING = "__DEVFLARE_APP";
1538
+ function formatErrorMessage(error) {
1539
+ return error instanceof Error ? error.message : String(error);
1659
1540
  }
1660
1541
  function createDevServer(options) {
1661
1542
  const {
@@ -1663,6 +1544,7 @@ function createDevServer(options) {
1663
1544
  configPath,
1664
1545
  vitePort = 5173,
1665
1546
  miniflarePort = 8787,
1547
+ enableVite = true,
1666
1548
  persist = true,
1667
1549
  logger,
1668
1550
  verbose = false,
@@ -1670,15 +1552,76 @@ function createDevServer(options) {
1670
1552
  } = options;
1671
1553
  let miniflare = null;
1672
1554
  let doBundler = null;
1555
+ let workerSourceWatcher = null;
1556
+ let workerWatchTargets = [];
1673
1557
  let viteProcess = null;
1674
1558
  let config = null;
1675
1559
  let browserShim = null;
1676
1560
  let browserShimPort = 8788;
1561
+ let mainWorkerSurfacePaths = {
1562
+ fetch: null,
1563
+ queue: null,
1564
+ scheduled: null,
1565
+ email: null
1566
+ };
1567
+ let resolvedWorkerConfigPath = null;
1568
+ let mainWorkerScriptPath = null;
1569
+ let bundledMainWorkerScriptPath = null;
1570
+ let currentDoResult = null;
1571
+ let mainWorkerRoutes = null;
1572
+ let generatedViteConfigPath = null;
1573
+ let reloadChain = Promise.resolve();
1574
+ async function bundleMainWorker() {
1575
+ if (!mainWorkerScriptPath || !config) {
1576
+ bundledMainWorkerScriptPath = null;
1577
+ return;
1578
+ }
1579
+ bundledMainWorkerScriptPath = await bundleWorkerEntry({
1580
+ cwd,
1581
+ inputFile: mainWorkerScriptPath,
1582
+ outFile: resolve3(cwd, ".devflare", "worker-entrypoints", "main.js"),
1583
+ rolldownOptions: config.rolldown?.options,
1584
+ sourcemap: config.rolldown?.sourcemap,
1585
+ minify: config.rolldown?.minify,
1586
+ logger
1587
+ });
1588
+ logger?.debug(`Bundled main worker → ${bundledMainWorkerScriptPath}`);
1589
+ }
1677
1590
  function buildMiniflareConfig(doResult) {
1678
1591
  if (!config)
1679
1592
  throw new Error("Config not loaded");
1680
- const bindings = config.bindings ?? {};
1681
- const persistPath = resolve2(cwd, ".devflare/data");
1593
+ const loadedConfig = config;
1594
+ const bindings = loadedConfig.bindings ?? {};
1595
+ const persistPath = resolve3(cwd, ".devflare/data");
1596
+ const appWorkerName = loadedConfig.name;
1597
+ const shouldRunMainWorker = !enableVite && (hasWorkerSurfacePaths(mainWorkerSurfacePaths) || Boolean(mainWorkerRoutes?.routes.length));
1598
+ const queueProducers = (() => {
1599
+ if (!bindings.queues?.producers) {
1600
+ return;
1601
+ }
1602
+ const producers = {};
1603
+ for (const [bindingName, queueName] of Object.entries(bindings.queues.producers)) {
1604
+ producers[bindingName] = { queueName };
1605
+ }
1606
+ return producers;
1607
+ })();
1608
+ const queueConsumers = (() => {
1609
+ if (!bindings.queues?.consumers || bindings.queues.consumers.length === 0) {
1610
+ return;
1611
+ }
1612
+ const consumers = {};
1613
+ for (const consumer of bindings.queues.consumers) {
1614
+ consumers[consumer.queue] = {
1615
+ ...consumer.maxBatchSize !== undefined && { maxBatchSize: consumer.maxBatchSize },
1616
+ ...consumer.maxBatchTimeout !== undefined && { maxBatchTimeout: consumer.maxBatchTimeout },
1617
+ ...consumer.maxRetries !== undefined && { maxRetries: consumer.maxRetries },
1618
+ ...consumer.deadLetterQueue && { deadLetterQueue: consumer.deadLetterQueue },
1619
+ ...consumer.maxConcurrency !== undefined && { maxConcurrency: consumer.maxConcurrency },
1620
+ ...consumer.retryDelay !== undefined && { retryDelay: consumer.retryDelay }
1621
+ };
1622
+ }
1623
+ return consumers;
1624
+ })();
1682
1625
  const sharedOptions = {
1683
1626
  port: miniflarePort,
1684
1627
  host: "127.0.0.1",
@@ -1687,19 +1630,93 @@ function createDevServer(options) {
1687
1630
  d1Persist: persist ? `${persistPath}/d1` : undefined,
1688
1631
  durableObjectsPersist: persist ? `${persistPath}/do` : undefined
1689
1632
  };
1690
- const gatewayWorker = {
1691
- name: "gateway",
1692
- modules: true,
1693
- script: getGatewayScript(config.wsRoutes, debug),
1694
- compatibilityDate: config.compatibilityDate,
1695
- compatibilityFlags: config.compatibilityFlags ?? [],
1696
- routes: ["*"],
1697
- kvNamespaces: bindings.kv ? bindings.kv : undefined,
1698
- r2Buckets: bindings.r2 ? bindings.r2 : undefined,
1699
- d1Databases: bindings.d1 ? bindings.d1 : undefined,
1700
- bindings: config.vars
1633
+ const createServiceBindings = (extraBindings = {}) => {
1634
+ const serviceBindings = {};
1635
+ if (bindings.services) {
1636
+ for (const [bindingName, serviceConfig] of Object.entries(bindings.services)) {
1637
+ serviceBindings[bindingName] = {
1638
+ name: serviceConfig.service,
1639
+ ...serviceConfig.entrypoint && { entrypoint: serviceConfig.entrypoint }
1640
+ };
1641
+ }
1642
+ }
1643
+ for (const [bindingName, target] of Object.entries(extraBindings)) {
1644
+ serviceBindings[bindingName] = target;
1645
+ }
1646
+ return Object.keys(serviceBindings).length > 0 ? serviceBindings : undefined;
1701
1647
  };
1702
- if (!doResult || doResult.bundles.size === 0) {
1648
+ const sendEmailConfig = bindings.sendEmail ? {
1649
+ send_email: Object.entries(bindings.sendEmail).map(([name, binding]) => ({
1650
+ name,
1651
+ ...binding.destinationAddress && {
1652
+ destination_address: binding.destinationAddress
1653
+ },
1654
+ ...binding.allowedDestinationAddresses && {
1655
+ allowed_destination_addresses: binding.allowedDestinationAddresses
1656
+ },
1657
+ ...binding.allowedSenderAddresses && {
1658
+ allowed_sender_addresses: binding.allowedSenderAddresses
1659
+ }
1660
+ }))
1661
+ } : undefined;
1662
+ const createWorkerConfig = (options2) => {
1663
+ const baseFlags = loadedConfig.compatibilityFlags ?? [];
1664
+ const compatFlags = baseFlags.includes("nodejs_compat") ? baseFlags : [...baseFlags, "nodejs_compat"];
1665
+ const workerBindings = loadedConfig.vars ?? {};
1666
+ const workerConfig = {
1667
+ name: options2.name,
1668
+ modules: true,
1669
+ compatibilityDate: loadedConfig.compatibilityDate,
1670
+ compatibilityFlags: compatFlags,
1671
+ ...bindings.kv && {
1672
+ kvNamespaces: Object.fromEntries(Object.entries(bindings.kv).map(([bindingName, bindingConfig]) => {
1673
+ return [bindingName, getLocalKVNamespaceIdentifier(bindingConfig)];
1674
+ }))
1675
+ },
1676
+ ...bindings.r2 && { r2Buckets: bindings.r2 },
1677
+ ...bindings.d1 && {
1678
+ d1Databases: Object.fromEntries(Object.entries(bindings.d1).map(([bindingName, bindingConfig]) => {
1679
+ return [bindingName, getLocalD1DatabaseIdentifier(bindingConfig)];
1680
+ }))
1681
+ },
1682
+ ...Object.keys(workerBindings).length > 0 && { bindings: workerBindings },
1683
+ ...sendEmailConfig && { email: sendEmailConfig },
1684
+ ...queueProducers && { queueProducers },
1685
+ ...options2.queueConsumers && { queueConsumers: options2.queueConsumers },
1686
+ ...options2.triggers && { triggers: options2.triggers }
1687
+ };
1688
+ if (options2.scriptPath) {
1689
+ workerConfig.scriptPath = options2.scriptPath;
1690
+ workerConfig.modulesRoot = cwd;
1691
+ workerConfig.modulesRules = [
1692
+ { type: "ESModule", include: ["**/*.ts", "**/*.tsx", "**/*.mts", "**/*.mjs"] },
1693
+ { type: "CommonJS", include: ["**/*.js", "**/*.cjs"] },
1694
+ { type: "ESModule", include: ["**/*.jsx"] }
1695
+ ];
1696
+ }
1697
+ if (options2.script) {
1698
+ workerConfig.script = options2.script;
1699
+ }
1700
+ if (options2.durableObjects && Object.keys(options2.durableObjects).length > 0) {
1701
+ workerConfig.durableObjects = options2.durableObjects;
1702
+ }
1703
+ if (options2.serviceBindings && Object.keys(options2.serviceBindings).length > 0) {
1704
+ workerConfig.serviceBindings = options2.serviceBindings;
1705
+ }
1706
+ return workerConfig;
1707
+ };
1708
+ const gatewayWorker = createWorkerConfig({
1709
+ name: "gateway",
1710
+ script: getGatewayScript(loadedConfig.wsRoutes, debug, shouldRunMainWorker ? INTERNAL_APP_SERVICE_BINDING : null),
1711
+ serviceBindings: shouldRunMainWorker ? createServiceBindings({
1712
+ [INTERNAL_APP_SERVICE_BINDING]: { name: appWorkerName }
1713
+ }) : createServiceBindings()
1714
+ });
1715
+ gatewayWorker.routes = ["*"];
1716
+ const hasDurableObjectBundles = !!doResult && doResult.bundles.size > 0;
1717
+ const browserBindingName = getSingleBrowserBindingName(bindings.browser);
1718
+ const needsBrowserWorker = Boolean(browserBindingName && (hasDurableObjectBundles || shouldRunMainWorker));
1719
+ if (!shouldRunMainWorker && !hasDurableObjectBundles && !needsBrowserWorker) {
1703
1720
  return {
1704
1721
  ...sharedOptions,
1705
1722
  ...gatewayWorker
@@ -1708,56 +1725,64 @@ function createDevServer(options) {
1708
1725
  const workers = [];
1709
1726
  const durableObjects = {};
1710
1727
  const browserShimUrl = `http://127.0.0.1:${browserShimPort}`;
1711
- const browserBindingName = bindings.browser?.binding;
1712
1728
  const browserWorkerName = "browser-binding";
1713
- for (const [bindingName, bundlePath] of doResult.bundles) {
1714
- const className = doResult.classes.get(bindingName);
1715
- if (!className)
1716
- continue;
1717
- const workerName = `do-${bindingName.toLowerCase()}`;
1718
- const baseFlags = config.compatibilityFlags ?? [];
1719
- const compatFlags = baseFlags.includes("nodejs_compat") ? baseFlags : [...baseFlags, "nodejs_compat"];
1720
- const workerConfig = {
1721
- name: workerName,
1722
- modules: true,
1723
- modulesRoot: cwd,
1724
- modulesRules: [
1725
- { type: "CommonJS", include: ["**/*.js", "**/*.cjs"] },
1726
- { type: "ESModule", include: ["**/*.mjs"] }
1727
- ],
1728
- scriptPath: bundlePath,
1729
- compatibilityDate: config.compatibilityDate,
1730
- compatibilityFlags: compatFlags,
1731
- durableObjects: {
1732
- [bindingName]: className
1729
+ if (shouldRunMainWorker && mainWorkerScriptPath) {
1730
+ const mainWorkerServiceBindings = createServiceBindings(browserBindingName ? {
1731
+ [browserBindingName]: { name: browserWorkerName }
1732
+ } : {});
1733
+ const mainWorkerConfig = createWorkerConfig({
1734
+ name: appWorkerName,
1735
+ scriptPath: bundledMainWorkerScriptPath ?? mainWorkerScriptPath,
1736
+ serviceBindings: mainWorkerServiceBindings,
1737
+ queueConsumers,
1738
+ triggers: loadedConfig.triggers?.crons?.length ? { crons: loadedConfig.triggers.crons } : undefined
1739
+ });
1740
+ workers.push(mainWorkerConfig);
1741
+ }
1742
+ if (doResult) {
1743
+ for (const [bindingName, bundlePath] of doResult.bundles) {
1744
+ const className = doResult.classes.get(bindingName);
1745
+ if (!className)
1746
+ continue;
1747
+ const workerName = `do-${bindingName.toLowerCase()}`;
1748
+ const workerConfig = createWorkerConfig({
1749
+ name: workerName,
1750
+ scriptPath: bundlePath,
1751
+ durableObjects: {
1752
+ [bindingName]: className
1753
+ },
1754
+ serviceBindings: createServiceBindings(browserBindingName ? {
1755
+ [browserBindingName]: { name: browserWorkerName }
1756
+ } : {})
1757
+ });
1758
+ if (browserBindingName) {
1759
+ logger?.debug(`DO ${workerName} has browser service binding: ${browserBindingName} → ${browserWorkerName}`);
1733
1760
  }
1734
- };
1735
- if (browserBindingName) {
1736
- workerConfig.serviceBindings = {
1737
- ...workerConfig.serviceBindings,
1738
- [browserBindingName]: browserWorkerName
1761
+ logger?.debug(`DO ${workerName} config:`, JSON.stringify(workerConfig, null, 2));
1762
+ workers.push(workerConfig);
1763
+ durableObjects[bindingName] = {
1764
+ className,
1765
+ scriptName: workerName
1739
1766
  };
1740
- logger?.debug(`DO ${workerName} has browser service binding: ${browserBindingName} → ${browserWorkerName}`);
1741
1767
  }
1742
- logger?.debug(`DO ${workerName} config:`, JSON.stringify(workerConfig, null, 2));
1743
- workers.push(workerConfig);
1744
- durableObjects[bindingName] = {
1745
- className,
1746
- scriptName: workerName
1747
- };
1748
1768
  }
1749
- if (browserBindingName) {
1750
- const browserWorker = {
1769
+ if (needsBrowserWorker) {
1770
+ const browserWorker = createWorkerConfig({
1751
1771
  name: browserWorkerName,
1752
- modules: true,
1753
- script: getBrowserBindingScript(browserShimUrl, debug),
1754
- compatibilityDate: config.compatibilityDate,
1755
- compatibilityFlags: config.compatibilityFlags ?? []
1756
- };
1772
+ script: getBrowserBindingScript(browserShimUrl, debug)
1773
+ });
1757
1774
  workers.push(browserWorker);
1758
1775
  logger?.info(`Browser binding worker configured: ${browserBindingName} → ${browserShimUrl}`);
1759
1776
  }
1760
- gatewayWorker.durableObjects = durableObjects;
1777
+ if (Object.keys(durableObjects).length > 0) {
1778
+ gatewayWorker.durableObjects = durableObjects;
1779
+ if (shouldRunMainWorker) {
1780
+ const mainWorker = workers.find((worker) => worker.name === appWorkerName);
1781
+ if (mainWorker) {
1782
+ mainWorker.durableObjects = durableObjects;
1783
+ }
1784
+ }
1785
+ }
1761
1786
  return {
1762
1787
  ...sharedOptions,
1763
1788
  workers: [gatewayWorker, ...workers]
@@ -1766,132 +1791,177 @@ function createDevServer(options) {
1766
1791
  async function startMiniflare(doResult) {
1767
1792
  const { Miniflare, Log, LogLevel } = await import("miniflare");
1768
1793
  const mfConfig = buildMiniflareConfig(doResult);
1769
- mfConfig.log = new Log(LogLevel.DEBUG);
1770
- logger?.info("=== MINIFLARE CONFIG DEBUG ===");
1771
- logger?.info("Full config:", JSON.stringify(mfConfig, (key, value) => {
1772
- if (key === "script" && typeof value === "string" && value.length > 200) {
1773
- return value.substring(0, 200) + "...[truncated]";
1774
- }
1775
- return value;
1776
- }, 2));
1777
- if (mfConfig.workers) {
1778
- logger?.info("Workers order:");
1779
- for (const w of mfConfig.workers) {
1780
- logger?.info(` → ${w.name}:`);
1781
- logger?.info(` script: ${w.script ? "inline" : w.scriptPath}`);
1782
- logger?.info(` browserRendering: ${JSON.stringify(w.browserRendering)}`);
1783
- logger?.info(` durableObjects: ${JSON.stringify(w.durableObjects)}`);
1794
+ mfConfig.log = createCompatibilityAwareMiniflareLog(Log, LogLevel.DEBUG, logger);
1795
+ mfConfig.handleRuntimeStdio = createRuntimeStdioForwarder(logger);
1796
+ const shouldLogMiniflareDiagnostics = verbose || debug;
1797
+ if (shouldLogMiniflareDiagnostics) {
1798
+ logger?.info("=== MINIFLARE CONFIG DEBUG ===");
1799
+ logger?.info("Full config:", JSON.stringify(mfConfig, (key, value) => {
1800
+ if (key === "script" && typeof value === "string" && value.length > 200) {
1801
+ return value.substring(0, 200) + "...[truncated]";
1802
+ }
1803
+ return value;
1804
+ }, 2));
1805
+ if (mfConfig.workers) {
1806
+ logger?.info("Workers order:");
1807
+ for (const w of mfConfig.workers) {
1808
+ logger?.info(` ${w.name}:`);
1809
+ logger?.info(` script: ${w.script ? "inline" : w.scriptPath}`);
1810
+ logger?.info(` browserRendering: ${JSON.stringify(w.browserRendering)}`);
1811
+ logger?.info(` durableObjects: ${JSON.stringify(w.durableObjects)}`);
1812
+ }
1784
1813
  }
1785
1814
  }
1786
1815
  miniflare = new Miniflare(mfConfig);
1787
1816
  await miniflare.ready;
1788
1817
  logger?.success(`Miniflare ready on http://localhost:${miniflarePort}`);
1789
- try {
1790
- const gatewayBindings = await miniflare.getBindings("gateway");
1791
- logger?.info("Gateway worker bindings:", Object.keys(gatewayBindings));
1792
- if (mfConfig.workers) {
1793
- for (const w of mfConfig.workers) {
1794
- if (w.name !== "gateway") {
1795
- try {
1796
- const doBindings = await miniflare.getBindings(w.name);
1797
- logger?.info(`${w.name} worker bindings:`, Object.keys(doBindings));
1798
- if ("BROWSER" in doBindings) {
1799
- logger?.success(`${w.name} has BROWSER binding!`);
1800
- } else {
1801
- logger?.warn(`${w.name} is MISSING BROWSER binding`);
1818
+ if (shouldLogMiniflareDiagnostics) {
1819
+ try {
1820
+ const gatewayBindings = await miniflare.getBindings("gateway");
1821
+ logger?.info("Gateway worker bindings:", Object.keys(gatewayBindings));
1822
+ if (mfConfig.workers) {
1823
+ for (const w of mfConfig.workers) {
1824
+ if (w.name !== "gateway") {
1825
+ try {
1826
+ const doBindings = await miniflare.getBindings(w.name);
1827
+ logger?.info(`${w.name} worker bindings:`, Object.keys(doBindings));
1828
+ if ("BROWSER" in doBindings) {
1829
+ logger?.success(`${w.name} has BROWSER binding!`);
1830
+ } else {
1831
+ logger?.warn(`${w.name} is MISSING BROWSER binding`);
1832
+ }
1833
+ } catch (error) {
1834
+ logger?.debug(`Skipping binding diagnostics for ${w.name}: ${formatErrorMessage(error)}`);
1802
1835
  }
1803
- } catch (e) {
1804
- logger?.warn(`Could not get bindings for ${w.name}:`, e);
1805
1836
  }
1806
1837
  }
1807
1838
  }
1839
+ } catch (error) {
1840
+ logger?.debug(`Skipping Miniflare binding diagnostics: ${formatErrorMessage(error)}`);
1808
1841
  }
1809
- } catch (e) {
1810
- logger?.warn("Error getting bindings:", e);
1811
1842
  }
1812
1843
  }
1813
1844
  async function reloadMiniflare(doResult) {
1814
- if (!miniflare)
1815
- return;
1816
- const { Log, LogLevel } = await import("miniflare");
1817
- const mfConfig = buildMiniflareConfig(doResult);
1818
- mfConfig.log = new Log(LogLevel.DEBUG);
1819
- logger?.info("Reloading Miniflare with updated DOs...");
1820
- await miniflare.setOptions(mfConfig);
1821
- logger?.success("Miniflare reloaded");
1845
+ currentDoResult = doResult;
1846
+ const queuedReload = reloadChain.then(async () => {
1847
+ if (!miniflare)
1848
+ return;
1849
+ const { Log, LogLevel } = await import("miniflare");
1850
+ const mfConfig = buildMiniflareConfig(currentDoResult);
1851
+ mfConfig.log = createCompatibilityAwareMiniflareLog(Log, LogLevel.DEBUG, logger);
1852
+ mfConfig.handleRuntimeStdio = createRuntimeStdioForwarder(logger);
1853
+ logger?.info("Reloading Miniflare...");
1854
+ await miniflare.setOptions(mfConfig);
1855
+ logger?.success("Miniflare reloaded");
1856
+ });
1857
+ reloadChain = queuedReload.catch(() => {});
1858
+ await queuedReload;
1822
1859
  }
1823
- async function runD1Migrations() {
1824
- if (!miniflare || !config?.bindings?.d1)
1825
- return;
1826
- const { existsSync: existsSync2, readdirSync, readFileSync } = await import("node:fs");
1827
- const migrationsDir = resolve2(cwd, "migrations");
1828
- if (!existsSync2(migrationsDir)) {
1829
- logger?.debug("No migrations/ directory found, skipping D1 migrations");
1860
+ async function resolveWorkerConfigWatchPath() {
1861
+ if (configPath) {
1862
+ const explicitPath = resolve3(cwd, configPath);
1863
+ const fs = await import("node:fs/promises");
1864
+ try {
1865
+ await fs.access(explicitPath);
1866
+ return explicitPath;
1867
+ } catch {}
1868
+ }
1869
+ return await resolveConfigPath(cwd) ?? null;
1870
+ }
1871
+ async function refreshWorkerOnlySurfaceState() {
1872
+ if (!config) {
1830
1873
  return;
1831
1874
  }
1832
- const files = readdirSync(migrationsDir).filter((f) => f.endsWith(".sql")).sort();
1833
- if (files.length === 0) {
1834
- logger?.debug("No SQL migration files found");
1875
+ mainWorkerSurfacePaths = await resolveMainWorkerSurfacePaths(cwd, config);
1876
+ mainWorkerRoutes = await discoverRoutes(cwd, config);
1877
+ const composedMainEntry = await prepareComposedWorkerEntrypoint(cwd, config, undefined, {
1878
+ devInternalEmail: true
1879
+ });
1880
+ mainWorkerScriptPath = composedMainEntry ? resolve3(cwd, composedMainEntry) : null;
1881
+ if (mainWorkerScriptPath) {
1882
+ await bundleMainWorker();
1883
+ } else {
1884
+ bundledMainWorkerScriptPath = null;
1885
+ }
1886
+ await syncWorkerWatchTargets();
1887
+ }
1888
+ function getWorkerWatchTargets() {
1889
+ if (enableVite || !config) {
1890
+ return [];
1891
+ }
1892
+ const targets = collectWorkerWatchRoots(cwd, config, mainWorkerSurfacePaths);
1893
+ if (resolvedWorkerConfigPath) {
1894
+ targets.push(resolvedWorkerConfigPath);
1895
+ }
1896
+ return [...new Set(targets)];
1897
+ }
1898
+ async function syncWorkerWatchTargets() {
1899
+ if (!workerSourceWatcher) {
1835
1900
  return;
1836
1901
  }
1837
- logger?.info(`Running ${files.length} D1 migration(s)...`);
1838
- const allStatements = [];
1839
- for (const file of files) {
1840
- const sql = readFileSync(resolve2(migrationsDir, file), "utf-8");
1841
- const cleanedSql = sql.split(`
1842
- `).filter((line) => !line.trim().startsWith("--")).join(`
1843
- `);
1844
- const statements = cleanedSql.split(";").map((s) => s.trim()).filter((s) => s.length > 0);
1845
- allStatements.push(...statements);
1846
- logger?.debug(`File ${file}: ${statements.length} statement(s)`);
1847
- }
1848
- for (const [bindingName] of Object.entries(config.bindings.d1)) {
1849
- for (let attempt = 0;attempt < 5; attempt++) {
1850
- await new Promise((r) => setTimeout(r, 500 * (attempt + 1)));
1851
- try {
1852
- const response = await fetch(`http://127.0.0.1:${miniflarePort}/_devflare/migrate`, {
1853
- method: "POST",
1854
- headers: { "Content-Type": "application/json" },
1855
- body: JSON.stringify({ bindingName, statements: allStatements })
1856
- });
1857
- if (!response.ok) {
1858
- const text = await response.text();
1859
- throw new Error(`HTTP ${response.status}: ${text}`);
1860
- }
1861
- const result = await response.json();
1862
- if (result.success) {
1863
- logger?.success(`D1 migrations applied to ${bindingName}`);
1864
- break;
1865
- } else {
1866
- throw new Error(result.error || "Unknown error");
1867
- }
1868
- } catch (error) {
1869
- if (attempt === 4) {
1870
- logger?.warn(`Failed to apply migrations to ${bindingName}: ${error}`);
1871
- }
1872
- }
1873
- }
1902
+ const nextWatchTargets = getWorkerWatchTargets();
1903
+ const nextWatchTargetSet = new Set(nextWatchTargets);
1904
+ const targetsToRemove = workerWatchTargets.filter((target) => !nextWatchTargetSet.has(target));
1905
+ const targetsToAdd = nextWatchTargets.filter((target) => !workerWatchTargets.includes(target));
1906
+ if (targetsToRemove.length > 0) {
1907
+ await workerSourceWatcher.unwatch(targetsToRemove);
1908
+ }
1909
+ if (targetsToAdd.length > 0) {
1910
+ workerSourceWatcher.add(targetsToAdd);
1874
1911
  }
1912
+ workerWatchTargets = nextWatchTargets;
1875
1913
  }
1876
- async function startVite() {
1877
- const { spawn } = await import("node:child_process");
1878
- const args = ["vite", "dev", "--port", String(vitePort)];
1879
- viteProcess = spawn("bunx", args, {
1880
- cwd,
1881
- stdio: "inherit",
1882
- env: {
1883
- ...process.env,
1884
- DEVFLARE_DEV: "true",
1885
- DEVFLARE_BRIDGE_PORT: String(miniflarePort),
1886
- FORCE_COLOR: "1"
1914
+ async function reloadWorkerOnlyConfig() {
1915
+ config = await loadConfig({ cwd, configFile: configPath });
1916
+ setLocalSendEmailBindings(config.bindings?.sendEmail ?? {});
1917
+ resolvedWorkerConfigPath = await resolveWorkerConfigWatchPath();
1918
+ await refreshWorkerOnlySurfaceState();
1919
+ await reloadMiniflare(currentDoResult);
1920
+ }
1921
+ async function startWorkerSourceWatcher2() {
1922
+ if (enableVite || !config) {
1923
+ return;
1924
+ }
1925
+ const watchTargets = getWorkerWatchTargets();
1926
+ if (watchTargets.length === 0) {
1927
+ return;
1928
+ }
1929
+ workerWatchTargets = watchTargets;
1930
+ workerSourceWatcher = await startWorkerSourceWatcher({
1931
+ watchTargets,
1932
+ resolvedWorkerConfigPath,
1933
+ logger,
1934
+ onConfigChange: reloadWorkerOnlyConfig,
1935
+ onWorkerChange: async () => {
1936
+ await refreshWorkerOnlySurfaceState();
1937
+ await reloadMiniflare(currentDoResult);
1887
1938
  }
1888
1939
  });
1889
- logger?.success(`Vite dev server started on http://localhost:${vitePort}`);
1890
1940
  }
1891
1941
  async function start() {
1892
1942
  logger?.info("Starting unified dev server...");
1893
1943
  config = await loadConfig({ cwd, configFile: configPath });
1944
+ setLocalSendEmailBindings(config.bindings?.sendEmail ?? {});
1945
+ resolvedWorkerConfigPath = await resolveWorkerConfigWatchPath();
1894
1946
  logger?.debug("Loaded config:", config.name);
1947
+ if (enableVite) {
1948
+ const viteProject = await detectViteProject(cwd);
1949
+ generatedViteConfigPath = await writeGeneratedViteConfig({
1950
+ cwd,
1951
+ configPath,
1952
+ localConfigPath: viteProject.viteConfigPath,
1953
+ bridgePort: miniflarePort
1954
+ });
1955
+ logger?.debug(`Generated Vite config → ${generatedViteConfigPath}`);
1956
+ }
1957
+ await refreshWorkerOnlySurfaceState();
1958
+ if (!enableVite && (hasWorkerSurfacePaths(mainWorkerSurfacePaths) || Boolean(mainWorkerRoutes?.routes.length))) {
1959
+ const detectedWorkerHandlers = Object.entries(mainWorkerSurfacePaths).filter(([, surfacePath]) => !!surfacePath).map(([surfaceName, surfacePath]) => `${surfaceName}=${surfacePath}`);
1960
+ const detectedRouteHandlers = mainWorkerRoutes?.routes.map((route) => `route=${route.filePath}`) ?? [];
1961
+ logger?.info(`Worker handlers detected: ${[...detectedWorkerHandlers, ...detectedRouteHandlers].join(", ")}`);
1962
+ } else if (!enableVite) {
1963
+ logger?.warn("No local worker handler entry was found for worker-only mode");
1964
+ }
1895
1965
  const remoteCheck = await checkRemoteBindingRequirements(config);
1896
1966
  if (remoteCheck.hasRemoteBindings) {
1897
1967
  logger?.info("");
@@ -1917,7 +1987,7 @@ function createDevServer(options) {
1917
1987
  logger?.info("");
1918
1988
  }
1919
1989
  }
1920
- const browserBinding = config.bindings?.browser?.binding;
1990
+ const browserBinding = getSingleBrowserBindingName(config.bindings?.browser);
1921
1991
  if (browserBinding) {
1922
1992
  logger?.info(`Starting Browser Rendering shim (binding: ${browserBinding})...`);
1923
1993
  browserShim = createBrowserShim({
@@ -1931,48 +2001,62 @@ function createDevServer(options) {
1931
2001
  const doPattern = config.files?.durableObjects;
1932
2002
  let doResult = null;
1933
2003
  if (typeof doPattern === "string" && doPattern) {
1934
- const outDir = resolve2(cwd, ".devflare/do-bundles");
2004
+ const outDir = resolve3(cwd, ".devflare/do-bundles");
1935
2005
  doBundler = createDOBundler({
1936
2006
  cwd,
1937
2007
  pattern: doPattern,
1938
2008
  outDir,
2009
+ rolldownOptions: config.rolldown?.options,
2010
+ sourcemap: config.rolldown?.sourcemap,
2011
+ minify: config.rolldown?.minify,
1939
2012
  logger,
1940
2013
  onRebuild: async (result) => {
1941
2014
  await reloadMiniflare(result);
1942
2015
  }
1943
2016
  });
1944
2017
  doResult = await doBundler.build();
2018
+ currentDoResult = doResult;
1945
2019
  await doBundler.watch();
1946
2020
  }
2021
+ currentDoResult = doResult;
1947
2022
  await startMiniflare(doResult);
1948
- await startVite();
2023
+ await startWorkerSourceWatcher2();
2024
+ if (enableVite) {
2025
+ viteProcess = await startViteProcess({
2026
+ cwd,
2027
+ vitePort,
2028
+ miniflarePort,
2029
+ generatedViteConfigPath,
2030
+ logger
2031
+ });
2032
+ } else {
2033
+ logger?.info("Vite startup skipped (no effective Vite config found for this package)");
2034
+ }
1949
2035
  await new Promise((r) => setTimeout(r, 1000));
1950
- await runD1Migrations();
1951
- const cleanup = async () => {
1952
- logger?.info("Shutting down...");
1953
- await stop();
1954
- process.exit(0);
1955
- };
1956
- process.on("SIGINT", cleanup);
1957
- process.on("SIGTERM", cleanup);
2036
+ await runD1Migrations({ cwd, config, miniflarePort, logger });
1958
2037
  }
1959
2038
  async function stop() {
1960
2039
  if (doBundler) {
1961
2040
  await doBundler.close();
1962
2041
  doBundler = null;
1963
2042
  }
2043
+ if (workerSourceWatcher) {
2044
+ await workerSourceWatcher.close();
2045
+ workerSourceWatcher = null;
2046
+ }
1964
2047
  if (miniflare) {
1965
2048
  await miniflare.dispose();
1966
2049
  miniflare = null;
1967
2050
  }
1968
2051
  if (viteProcess) {
1969
- viteProcess.kill("SIGTERM");
2052
+ await stopSpawnedProcessTree(viteProcess);
1970
2053
  viteProcess = null;
1971
2054
  }
1972
2055
  if (browserShim) {
1973
2056
  await browserShim.stop();
1974
2057
  browserShim = null;
1975
2058
  }
2059
+ clearLocalSendEmailBindings();
1976
2060
  }
1977
2061
  function getMiniflare() {
1978
2062
  return miniflare;
@@ -1991,15 +2075,16 @@ async function createLogWriter(cwd, options) {
1991
2075
  const fs = await import("node:fs");
1992
2076
  let logPath;
1993
2077
  if (options.logTemp) {
1994
- logPath = resolve3(cwd, ".log");
2078
+ logPath = resolve4(cwd, ".log");
1995
2079
  } else {
1996
2080
  const now = new Date;
1997
2081
  const timestamp = now.toISOString().replace(/[:.]/g, "-").replace("T", "_").slice(0, 19);
1998
- logPath = resolve3(cwd, `.log-${timestamp}`);
2082
+ logPath = resolve4(cwd, `.log-${timestamp}`);
1999
2083
  }
2000
2084
  const fileStream = fs.createWriteStream(logPath, { flags: "w" });
2001
2085
  const ansiRegex = /\x1b\[[0-9;]*m/g;
2002
2086
  return {
2087
+ path: logPath,
2003
2088
  write(data, source) {
2004
2089
  const str = typeof data === "string" ? data : data.toString();
2005
2090
  if (!str.trim())
@@ -2025,13 +2110,16 @@ async function runDevCommand(parsed, logger, options) {
2025
2110
  const persistEnabled = parsed.options.persist === true;
2026
2111
  const debugEnabled = parsed.options.debug === true || process.env.DEVFLARE_DEBUG === "true";
2027
2112
  const verbose = parsed.options.verbose === true || debugEnabled;
2113
+ const theme = createCliTheme(parsed.options);
2114
+ const config = await loadConfig({ cwd, configFile: configPath });
2115
+ const viteProject = resolveEffectiveViteProject(await detectViteProject(cwd), config);
2028
2116
  const logWriter = await createLogWriter(cwd, {
2029
2117
  log: logEnabled,
2030
2118
  logTemp: logTempEnabled
2031
2119
  });
2032
2120
  if (logWriter) {
2033
- const logFile = logTempEnabled ? ".log" : `.log-{datetime}`;
2034
- logger.info(`\uD83D\uDCDD Logging enabled → ${logFile}`);
2121
+ const logFile = relative(cwd, logWriter.path) || ".log";
2122
+ logLine(logger, `${dim("logging", theme)} ${logFile}`);
2035
2123
  }
2036
2124
  const devLogger = createConsola({
2037
2125
  level: verbose ? 4 : 3
@@ -2044,6 +2132,7 @@ async function runDevCommand(parsed, logger, options) {
2044
2132
  logWriter.write(formatted);
2045
2133
  };
2046
2134
  };
2135
+ Object.assign(devLogger.log, wrapLog(devLogger.log.bind(devLogger)));
2047
2136
  Object.assign(devLogger.info, wrapLog(devLogger.info.bind(devLogger)));
2048
2137
  Object.assign(devLogger.error, wrapLog(devLogger.error.bind(devLogger), "[ERROR]"));
2049
2138
  Object.assign(devLogger.warn, wrapLog(devLogger.warn.bind(devLogger), "[WARN]"));
@@ -2051,43 +2140,92 @@ async function runDevCommand(parsed, logger, options) {
2051
2140
  Object.assign(devLogger.debug, wrapLog(devLogger.debug.bind(devLogger), "[DEBUG]"));
2052
2141
  }
2053
2142
  try {
2054
- logger.info("");
2055
- logger.info("\uD83D\uDE80 Devflare Unified Dev Server");
2056
- logger.info(" ├─ Vite: Full HMR for frontend");
2057
- logger.info(" ├─ Miniflare: All Cloudflare bindings");
2058
- logger.info(" ├─ Rolldown: Fast DO bundling with watch");
2059
- logger.info(" └─ Bridge: WebSocket RPC connection");
2060
- logger.info("");
2143
+ logLine(logger);
2144
+ if (viteProject.shouldStartVite) {
2145
+ logLine(logger, `${cyanBold("dev", theme)} ${dim("Unified Dev Server", theme)}`);
2146
+ logLine(logger, " ├─ Vite: Full HMR for frontend");
2147
+ logLine(logger, " ├─ Miniflare: All Cloudflare bindings");
2148
+ logLine(logger, " ├─ Rolldown: Worker + DO bundling with watch");
2149
+ logLine(logger, " └─ Bridge: WebSocket RPC connection");
2150
+ } else {
2151
+ logLine(logger, `${cyanBold("dev", theme)} ${dim("Worker Dev Server", theme)}`);
2152
+ logLine(logger, " ├─ Miniflare: All Cloudflare bindings");
2153
+ logLine(logger, " ├─ Rolldown: Worker + DO bundling with watch");
2154
+ logLine(logger, " └─ Vite: Disabled (no effective Vite config found)");
2155
+ if (viteProject.wantsViteIntegration) {
2156
+ logger.warn("Vite-related settings were detected, but no effective Vite config was available");
2157
+ logger.warn("Skipping Vite startup and running in worker-only mode");
2158
+ }
2159
+ }
2160
+ logLine(logger);
2061
2161
  const devServer = createDevServer({
2062
2162
  cwd,
2063
2163
  configPath,
2064
2164
  vitePort: port ? parseInt(port, 10) : 5173,
2065
2165
  miniflarePort: 8787,
2166
+ enableVite: viteProject.shouldStartVite,
2066
2167
  persist: persistEnabled,
2067
2168
  logger: devLogger,
2068
2169
  verbose,
2069
2170
  debug: debugEnabled
2070
2171
  });
2071
- const cleanup = async () => {
2072
- logger.info("");
2073
- logger.info("Shutting down...");
2074
- await devServer.stop();
2075
- logWriter?.close();
2076
- process.exit(0);
2172
+ let isCleaningUp = false;
2173
+ const cleanupHandlers = new Map;
2174
+ const removeCleanupHandlers = () => {
2175
+ for (const [event, handler] of cleanupHandlers) {
2176
+ process.off(event, handler);
2177
+ }
2178
+ cleanupHandlers.clear();
2077
2179
  };
2078
- process.on("SIGINT", cleanup);
2079
- process.on("SIGTERM", cleanup);
2180
+ const cleanup = async (exitCode, reason) => {
2181
+ if (isCleaningUp) {
2182
+ return;
2183
+ }
2184
+ isCleaningUp = true;
2185
+ removeCleanupHandlers();
2186
+ if (reason) {
2187
+ const message = reason instanceof Error ? reason.stack ?? reason.message : String(reason);
2188
+ logger.error(message);
2189
+ }
2190
+ logLine(logger);
2191
+ logLine(logger, `${yellow("dev", theme)} ${dim("Shutting down…", theme)}`);
2192
+ try {
2193
+ await devServer.stop();
2194
+ } finally {
2195
+ logWriter?.close();
2196
+ process.exit(exitCode);
2197
+ }
2198
+ };
2199
+ const registerCleanupHandler = (event, handler) => {
2200
+ cleanupHandlers.set(event, handler);
2201
+ process.on(event, handler);
2202
+ };
2203
+ registerCleanupHandler("SIGINT", () => {
2204
+ cleanup(0);
2205
+ });
2206
+ registerCleanupHandler("SIGTERM", () => {
2207
+ cleanup(0);
2208
+ });
2209
+ registerCleanupHandler("SIGHUP", () => {
2210
+ cleanup(0);
2211
+ });
2212
+ registerCleanupHandler("uncaughtException", (error) => {
2213
+ cleanup(1, error);
2214
+ });
2215
+ registerCleanupHandler("unhandledRejection", (reason) => {
2216
+ cleanup(1, reason);
2217
+ });
2080
2218
  await devServer.start();
2081
2219
  await new Promise(() => {});
2082
2220
  return { exitCode: 0 };
2083
2221
  } catch (error) {
2222
+ logWriter?.close();
2084
2223
  if (error instanceof Error) {
2085
2224
  logger.error("Dev server failed:", error.message);
2086
2225
  if (verbose) {
2087
2226
  logger.error(error.stack);
2088
2227
  }
2089
2228
  }
2090
- logWriter?.close();
2091
2229
  return { exitCode: 1 };
2092
2230
  }
2093
2231
  }