devflare 1.0.0-next.15 → 1.0.0-next.16

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 (377) hide show
  1. package/LLM.md +9360 -1819
  2. package/README.md +313 -39
  3. package/bin/devflare.js +17 -7
  4. package/dist/account-0w8wdzjv.js +475 -0
  5. package/dist/account-eygq6qx7.js +475 -0
  6. package/dist/account-fw8nafav.js +475 -0
  7. package/dist/account-pzq69nys.js +475 -0
  8. package/dist/account-s66jb15j.js +475 -0
  9. package/dist/api-d6ekexs5.js +25 -0
  10. package/dist/bridge/index.d.ts +1 -1
  11. package/dist/bridge/index.d.ts.map +1 -1
  12. package/dist/bridge/miniflare.d.ts.map +1 -1
  13. package/dist/bridge/protocol.d.ts +1 -1
  14. package/dist/bridge/protocol.d.ts.map +1 -1
  15. package/dist/bridge/proxy.d.ts +0 -4
  16. package/dist/bridge/proxy.d.ts.map +1 -1
  17. package/dist/bridge/serialization.d.ts.map +1 -1
  18. package/dist/bridge/server.d.ts +1 -1
  19. package/dist/bridge/server.d.ts.map +1 -1
  20. package/dist/browser-shim/handler.d.ts +1 -1
  21. package/dist/browser-shim/handler.d.ts.map +1 -1
  22. package/dist/browser.d.ts +1648 -38
  23. package/dist/browser.d.ts.map +1 -1
  24. package/dist/build-1kmkwqgh.js +53 -0
  25. package/dist/build-506kjhcm.js +53 -0
  26. package/dist/build-66866ahs.js +53 -0
  27. package/dist/build-g1adm3ww.js +53 -0
  28. package/dist/build-p3r3117t.js +53 -0
  29. package/dist/bundler/do-bundler.d.ts.map +1 -1
  30. package/dist/bundler/rolldown-shared.d.ts +24 -0
  31. package/dist/bundler/rolldown-shared.d.ts.map +1 -0
  32. package/dist/bundler/worker-bundler.d.ts +0 -1
  33. package/dist/bundler/worker-bundler.d.ts.map +1 -1
  34. package/dist/cli/command-utils.d.ts +18 -0
  35. package/dist/cli/command-utils.d.ts.map +1 -0
  36. package/dist/cli/commands/account.d.ts +1 -1
  37. package/dist/cli/commands/account.d.ts.map +1 -1
  38. package/dist/cli/commands/build-artifacts.d.ts +27 -0
  39. package/dist/cli/commands/build-artifacts.d.ts.map +1 -0
  40. package/dist/cli/commands/build.d.ts.map +1 -1
  41. package/dist/cli/commands/deploy.d.ts.map +1 -1
  42. package/dist/cli/commands/dev.d.ts.map +1 -1
  43. package/dist/cli/commands/doctor.d.ts.map +1 -1
  44. package/dist/cli/commands/init.d.ts.map +1 -1
  45. package/dist/cli/commands/login.d.ts +4 -0
  46. package/dist/cli/commands/login.d.ts.map +1 -0
  47. package/dist/cli/commands/previews-support/cleanup.d.ts +9 -0
  48. package/dist/cli/commands/previews-support/cleanup.d.ts.map +1 -0
  49. package/dist/cli/commands/previews-support/family.d.ts +10 -0
  50. package/dist/cli/commands/previews-support/family.d.ts.map +1 -0
  51. package/dist/cli/commands/previews-support/render.d.ts +8 -0
  52. package/dist/cli/commands/previews-support/render.d.ts.map +1 -0
  53. package/dist/cli/commands/previews-support/theme.d.ts +10 -0
  54. package/dist/cli/commands/previews-support/theme.d.ts.map +1 -0
  55. package/dist/cli/commands/previews-support/types.d.ts +70 -0
  56. package/dist/cli/commands/previews-support/types.d.ts.map +1 -0
  57. package/dist/cli/commands/previews.d.ts +4 -0
  58. package/dist/cli/commands/previews.d.ts.map +1 -0
  59. package/dist/cli/commands/productions.d.ts +4 -0
  60. package/dist/cli/commands/productions.d.ts.map +1 -0
  61. package/dist/cli/commands/token.d.ts +4 -0
  62. package/dist/cli/commands/token.d.ts.map +1 -0
  63. package/dist/cli/commands/type-generation/discovery.d.ts +7 -0
  64. package/dist/cli/commands/type-generation/discovery.d.ts.map +1 -0
  65. package/dist/cli/commands/type-generation/generator.d.ts +44 -0
  66. package/dist/cli/commands/type-generation/generator.d.ts.map +1 -0
  67. package/dist/cli/commands/type-generation/models.d.ts +27 -0
  68. package/dist/cli/commands/type-generation/models.d.ts.map +1 -0
  69. package/dist/cli/commands/types.d.ts.map +1 -1
  70. package/dist/cli/commands/worker.d.ts +4 -0
  71. package/dist/cli/commands/worker.d.ts.map +1 -0
  72. package/dist/cli/config-path.d.ts +2 -1
  73. package/dist/cli/config-path.d.ts.map +1 -1
  74. package/dist/cli/deploy-strategy.d.ts +17 -0
  75. package/dist/cli/deploy-strategy.d.ts.map +1 -0
  76. package/dist/cli/deploy-target.d.ts +17 -0
  77. package/dist/cli/deploy-target.d.ts.map +1 -0
  78. package/dist/cli/generated-artifacts.d.ts +12 -0
  79. package/dist/cli/generated-artifacts.d.ts.map +1 -0
  80. package/dist/cli/help-pages/pages/account.d.ts +3 -0
  81. package/dist/cli/help-pages/pages/account.d.ts.map +1 -0
  82. package/dist/cli/help-pages/pages/core.d.ts +4 -0
  83. package/dist/cli/help-pages/pages/core.d.ts.map +1 -0
  84. package/dist/cli/help-pages/pages/index.d.ts +3 -0
  85. package/dist/cli/help-pages/pages/index.d.ts.map +1 -0
  86. package/dist/cli/help-pages/pages/misc.d.ts +3 -0
  87. package/dist/cli/help-pages/pages/misc.d.ts.map +1 -0
  88. package/dist/cli/help-pages/pages/previews.d.ts +3 -0
  89. package/dist/cli/help-pages/pages/previews.d.ts.map +1 -0
  90. package/dist/cli/help-pages/pages/productions.d.ts +3 -0
  91. package/dist/cli/help-pages/pages/productions.d.ts.map +1 -0
  92. package/dist/cli/help-pages/render.d.ts +12 -0
  93. package/dist/cli/help-pages/render.d.ts.map +1 -0
  94. package/dist/cli/help-pages/shared.d.ts +15 -0
  95. package/dist/cli/help-pages/shared.d.ts.map +1 -0
  96. package/dist/cli/help-pages/types.d.ts +23 -0
  97. package/dist/cli/help-pages/types.d.ts.map +1 -0
  98. package/dist/cli/help.d.ts +6 -0
  99. package/dist/cli/help.d.ts.map +1 -0
  100. package/dist/cli/index.d.ts +1 -0
  101. package/dist/cli/index.d.ts.map +1 -1
  102. package/dist/cli/preview-bindings.d.ts +42 -0
  103. package/dist/cli/preview-bindings.d.ts.map +1 -0
  104. package/dist/cli/preview.d.ts +11 -0
  105. package/dist/cli/preview.d.ts.map +1 -0
  106. package/dist/cli/ui.d.ts +37 -0
  107. package/dist/cli/ui.d.ts.map +1 -0
  108. package/dist/cli/workspace-build-guard.d.ts +14 -0
  109. package/dist/cli/workspace-build-guard.d.ts.map +1 -0
  110. package/dist/cloudflare/account-core.d.ts +6 -0
  111. package/dist/cloudflare/account-core.d.ts.map +1 -0
  112. package/dist/cloudflare/account-resources.d.ts +40 -0
  113. package/dist/cloudflare/account-resources.d.ts.map +1 -0
  114. package/dist/cloudflare/account-status.d.ts +11 -0
  115. package/dist/cloudflare/account-status.d.ts.map +1 -0
  116. package/dist/cloudflare/account-workers.d.ts +14 -0
  117. package/dist/cloudflare/account-workers.d.ts.map +1 -0
  118. package/dist/cloudflare/account.d.ts +7 -64
  119. package/dist/cloudflare/account.d.ts.map +1 -1
  120. package/dist/cloudflare/api.d.ts +4 -0
  121. package/dist/cloudflare/api.d.ts.map +1 -1
  122. package/dist/cloudflare/index.d.ts +57 -2
  123. package/dist/cloudflare/index.d.ts.map +1 -1
  124. package/dist/cloudflare/kv-namespace.d.ts +3 -0
  125. package/dist/cloudflare/kv-namespace.d.ts.map +1 -0
  126. package/dist/cloudflare/preferences.d.ts.map +1 -1
  127. package/dist/cloudflare/preview-registry-cache.d.ts +6 -0
  128. package/dist/cloudflare/preview-registry-cache.d.ts.map +1 -0
  129. package/dist/cloudflare/preview-registry-records.d.ts +61 -0
  130. package/dist/cloudflare/preview-registry-records.d.ts.map +1 -0
  131. package/dist/cloudflare/preview-registry-store.d.ts +14 -0
  132. package/dist/cloudflare/preview-registry-store.d.ts.map +1 -0
  133. package/dist/cloudflare/preview-registry-types.d.ts +103 -0
  134. package/dist/cloudflare/preview-registry-types.d.ts.map +1 -0
  135. package/dist/cloudflare/preview-registry.d.ts +42 -0
  136. package/dist/cloudflare/preview-registry.d.ts.map +1 -0
  137. package/dist/cloudflare/registry-schema.d.ts +253 -0
  138. package/dist/cloudflare/registry-schema.d.ts.map +1 -0
  139. package/dist/cloudflare/tokens.d.ts +18 -0
  140. package/dist/cloudflare/tokens.d.ts.map +1 -0
  141. package/dist/cloudflare/types.d.ts +122 -5
  142. package/dist/cloudflare/types.d.ts.map +1 -1
  143. package/dist/cloudflare/usage.d.ts.map +1 -1
  144. package/dist/config/compiler.d.ts +4 -0
  145. package/dist/config/compiler.d.ts.map +1 -1
  146. package/dist/config/framework-providers.d.ts +9 -0
  147. package/dist/config/framework-providers.d.ts.map +1 -0
  148. package/dist/config/index.d.ts +4 -3
  149. package/dist/config/index.d.ts.map +1 -1
  150. package/dist/config/loader.d.ts.map +1 -1
  151. package/dist/config/preview-resources.d.ts +77 -0
  152. package/dist/config/preview-resources.d.ts.map +1 -0
  153. package/dist/config/preview.d.ts +31 -0
  154. package/dist/config/preview.d.ts.map +1 -0
  155. package/dist/config/ref.d.ts +0 -22
  156. package/dist/config/ref.d.ts.map +1 -1
  157. package/dist/config/resolve.d.ts +1 -0
  158. package/dist/config/resolve.d.ts.map +1 -1
  159. package/dist/config/resource-resolution.d.ts +21 -5
  160. package/dist/config/resource-resolution.d.ts.map +1 -1
  161. package/dist/config/schema-bindings.d.ts +693 -0
  162. package/dist/config/schema-bindings.d.ts.map +1 -0
  163. package/dist/config/schema-build.d.ts +67 -0
  164. package/dist/config/schema-build.d.ts.map +1 -0
  165. package/dist/config/schema-env.d.ts +1341 -0
  166. package/dist/config/schema-env.d.ts.map +1 -0
  167. package/dist/config/schema-normalization.d.ts +64 -0
  168. package/dist/config/schema-normalization.d.ts.map +1 -0
  169. package/dist/config/schema-runtime.d.ts +230 -0
  170. package/dist/config/schema-runtime.d.ts.map +1 -0
  171. package/dist/config/schema.d.ts +542 -3736
  172. package/dist/config/schema.d.ts.map +1 -1
  173. package/dist/config-entry.d.ts +5 -0
  174. package/dist/config-entry.d.ts.map +1 -0
  175. package/dist/{config-v9tr4rts.js → config-fjwke42y.js} +6 -4
  176. package/dist/config-hwdqjse7.js +59 -0
  177. package/dist/config-pxvewrhv.js +59 -0
  178. package/dist/config-q0g5qdga.js +59 -0
  179. package/dist/decorators/durable-object.d.ts.map +1 -1
  180. package/dist/deploy-7nmzc9r8.js +609 -0
  181. package/dist/deploy-csfhdr64.js +691 -0
  182. package/dist/deploy-ex4g5avz.js +621 -0
  183. package/dist/deploy-jnb0bhka.js +609 -0
  184. package/dist/deploy-tp0g6qdp.js +609 -0
  185. package/dist/deploy-ykpcjkc2.js +690 -0
  186. package/dist/{dev-ymtphbkg.js → dev-2pd33m28.js} +386 -348
  187. package/dist/dev-7ef5e2j1.js +2409 -0
  188. package/dist/dev-8nssqatr.js +2409 -0
  189. package/dist/dev-grznx8fn.js +2409 -0
  190. package/dist/dev-server/d1-migrations.d.ts +14 -0
  191. package/dist/dev-server/d1-migrations.d.ts.map +1 -0
  192. package/dist/dev-server/gateway-script.d.ts +8 -0
  193. package/dist/dev-server/gateway-script.d.ts.map +1 -0
  194. package/dist/dev-server/runtime-stdio.d.ts.map +1 -1
  195. package/dist/dev-server/server.d.ts.map +1 -1
  196. package/dist/dev-server/vite-process.d.ts +14 -0
  197. package/dist/dev-server/vite-process.d.ts.map +1 -0
  198. package/dist/dev-server/vite-utils.d.ts +1 -1
  199. package/dist/dev-server/vite-utils.d.ts.map +1 -1
  200. package/dist/dev-server/worker-source-watcher.d.ts +11 -0
  201. package/dist/dev-server/worker-source-watcher.d.ts.map +1 -0
  202. package/dist/dev-server/worker-surface-paths.d.ts +6 -0
  203. package/dist/dev-server/worker-surface-paths.d.ts.map +1 -0
  204. package/dist/{doctor-xv4gm1h4.js → doctor-04ammrrh.js} +67 -32
  205. package/dist/doctor-fmjj65mc.js +245 -0
  206. package/dist/doctor-fzkznce1.js +245 -0
  207. package/dist/doctor-sa5xv1bz.js +245 -0
  208. package/dist/index-091sh1ma.js +1229 -0
  209. package/dist/index-0apbm26n.js +788 -0
  210. package/dist/index-0eqksag4.js +418 -0
  211. package/dist/{index-k8vh558d.js → index-0kfzdywd.js} +15 -2
  212. package/dist/index-0w826dsr.js +379 -0
  213. package/dist/{index-5s1bz1e0.js → index-11m5a8wd.js} +100 -22
  214. package/dist/{index-0rsa2c1t.js → index-1sp39f2f.js} +110 -57
  215. package/dist/index-2jnrqbny.js +1301 -0
  216. package/dist/index-2pb7b9mw.js +378 -0
  217. package/dist/{index-3a4mmn57.js → index-2x53aqjm.js} +1065 -890
  218. package/dist/index-3ke5d2vn.js +1229 -0
  219. package/dist/index-43dq8yx8.js +788 -0
  220. package/dist/index-4rrttqj5.js +378 -0
  221. package/dist/index-4v9bc2pc.js +1367 -0
  222. package/dist/index-61jsjnsv.js +280 -0
  223. package/dist/index-6jef5emv.js +176 -0
  224. package/dist/index-6psz1h4c.js +788 -0
  225. package/dist/index-72mve6vh.js +168 -0
  226. package/dist/{index-zvgc3e0c.js → index-74198nxd.js} +159 -63
  227. package/dist/{index-7bq4xq84.js → index-7g8zyws4.js} +7 -12
  228. package/dist/index-7kcxjhta.js +456 -0
  229. package/dist/index-7v583xan.js +418 -0
  230. package/dist/index-7x0ybbtx.js +133 -0
  231. package/dist/index-816krz9p.js +52 -0
  232. package/dist/index-82f1z98k.js +41 -0
  233. package/dist/index-8t5nb4qx.js +133 -0
  234. package/dist/index-9az6s7ad.js +52 -0
  235. package/dist/{index-59df49vn.js → index-9ba1etyz.js} +29 -51
  236. package/dist/{index-001mw014.js → index-9fbtk7gv.js} +134 -248
  237. package/dist/index-9n6djthj.js +490 -0
  238. package/dist/index-aabgympv.js +39 -0
  239. package/dist/index-b8m6883k.js +74 -0
  240. package/dist/{index-5yxg30va.js → index-cgbvmse6.js} +15 -6
  241. package/dist/index-d8etnfef.js +1229 -0
  242. package/dist/index-e9yw4d6y.js +133 -0
  243. package/dist/index-epw1jxz5.js +1204 -0
  244. package/dist/index-f85s8gj3.js +2649 -0
  245. package/dist/index-fe2ngvh7.js +1229 -0
  246. package/dist/index-fvsadj32.js +192 -0
  247. package/dist/index-gs4y9gdf.js +456 -0
  248. package/dist/{index-fef08w43.js → index-h18pxvzs.js} +7 -6
  249. package/dist/index-hfj1a2c4.js +2649 -0
  250. package/dist/{index-8gtqgb3q.js → index-hjy8ctpc.js} +14 -92
  251. package/dist/index-htzf0py1.js +1204 -0
  252. package/dist/index-j185x270.js +897 -0
  253. package/dist/index-jb75kwa4.js +519 -0
  254. package/dist/index-jwd8pcb2.js +897 -0
  255. package/dist/index-k29yjhv0.js +52 -0
  256. package/dist/index-k6vq6kkt.js +456 -0
  257. package/dist/{index-vky23txa.js → index-m3fmw6mx.js} +2 -2
  258. package/dist/index-maxpsfk8.js +402 -0
  259. package/dist/index-mbdmrner.js +402 -0
  260. package/dist/index-mea5bc45.js +418 -0
  261. package/dist/index-mqekt778.js +185 -0
  262. package/dist/index-na3mnm1k.js +74 -0
  263. package/dist/index-p03n4qet.js +1367 -0
  264. package/dist/index-p296ban8.js +191 -0
  265. package/dist/index-pnbs1b8k.js +280 -0
  266. package/dist/index-q4kaz181.js +1207 -0
  267. package/dist/index-ry131z23.js +378 -0
  268. package/dist/index-sgb7c8nm.js +402 -0
  269. package/dist/index-sqrksgb2.js +133 -0
  270. package/dist/index-stgn34cr.js +148 -0
  271. package/dist/{index-v8vvsn9x.js → index-t08te69w.js} +1 -18
  272. package/dist/index-thna1tkd.js +280 -0
  273. package/dist/index-v5nmqthy.js +74 -0
  274. package/dist/{index-n932ytmq.js → index-vt4yxkmf.js} +2 -2
  275. package/dist/index-wyq6c6yj.js +402 -0
  276. package/dist/index-wztc9stx.js +418 -0
  277. package/dist/index-x9cwdxw5.js +456 -0
  278. package/dist/index-xk9djfjp.js +519 -0
  279. package/dist/index-yc0gcchc.js +418 -0
  280. package/dist/index-yqbxjysa.js +897 -0
  281. package/dist/index-yzddwp02.js +788 -0
  282. package/dist/index-zfhq6s96.js +74 -0
  283. package/dist/index-zt22fe2j.js +54 -0
  284. package/dist/index-zyt5byt6.js +2649 -0
  285. package/dist/index.d.ts +2 -2
  286. package/dist/index.d.ts.map +1 -1
  287. package/dist/{init-na2atvz2.js → init-r4hnxan3.js} +24 -17
  288. package/dist/login-2hnz4m4n.js +77 -0
  289. package/dist/login-5bsxxpvc.js +77 -0
  290. package/dist/login-6tzvczw2.js +77 -0
  291. package/dist/login-bhaw72zc.js +77 -0
  292. package/dist/login-x8tgckqm.js +77 -0
  293. package/dist/previews-3rn8mz2c.js +1168 -0
  294. package/dist/previews-d487qde5.js +1200 -0
  295. package/dist/previews-gm3z0syj.js +1168 -0
  296. package/dist/previews-j9ymq4ys.js +1169 -0
  297. package/dist/previews-q031mx34.js +1168 -0
  298. package/dist/productions-120xg0aq.js +505 -0
  299. package/dist/productions-5ev5qweg.js +505 -0
  300. package/dist/productions-me3tdvr9.js +505 -0
  301. package/dist/productions-p5rbgp2f.js +505 -0
  302. package/dist/productions-x9p0pym1.js +505 -0
  303. package/dist/runtime/context-events.d.ts +13 -0
  304. package/dist/runtime/context-events.d.ts.map +1 -0
  305. package/dist/runtime/context-types.d.ts +82 -0
  306. package/dist/runtime/context-types.d.ts.map +1 -0
  307. package/dist/runtime/context.d.ts +6 -267
  308. package/dist/runtime/context.d.ts.map +1 -1
  309. package/dist/runtime/exports.d.ts +3 -3
  310. package/dist/runtime/index.d.ts +1 -1
  311. package/dist/runtime/index.d.ts.map +1 -1
  312. package/dist/runtime/middleware.d.ts +8 -38
  313. package/dist/runtime/middleware.d.ts.map +1 -1
  314. package/dist/src/browser.js +9 -17
  315. package/dist/src/cli/index.js +3 -1
  316. package/dist/src/cloudflare/index.js +49 -3
  317. package/dist/src/config-entry.js +14 -0
  318. package/dist/src/index.js +24 -20
  319. package/dist/src/runtime/index.js +3 -9
  320. package/dist/src/sveltekit/index.js +10 -8
  321. package/dist/src/test/index.js +16 -19
  322. package/dist/src/vite/index.js +7 -5
  323. package/dist/sveltekit/platform.d.ts +1 -1
  324. package/dist/sveltekit/platform.d.ts.map +1 -1
  325. package/dist/test/cf.d.ts +10 -10
  326. package/dist/test/email.d.ts.map +1 -1
  327. package/dist/test/index.d.ts +1 -6
  328. package/dist/test/index.d.ts.map +1 -1
  329. package/dist/test/queue.d.ts.map +1 -1
  330. package/dist/test/remote-ai.d.ts.map +1 -1
  331. package/dist/test/remote-cloudflare.d.ts +13 -0
  332. package/dist/test/remote-cloudflare.d.ts.map +1 -0
  333. package/dist/test/remote-vectorize.d.ts.map +1 -1
  334. package/dist/test/resolve-service-bindings.d.ts.map +1 -1
  335. package/dist/test/scheduled.d.ts.map +1 -1
  336. package/dist/test/should-skip.d.ts +0 -18
  337. package/dist/test/should-skip.d.ts.map +1 -1
  338. package/dist/test/simple-context-durable-objects.d.ts +6 -0
  339. package/dist/test/simple-context-durable-objects.d.ts.map +1 -0
  340. package/dist/test/simple-context-gateway-script.d.ts +2 -0
  341. package/dist/test/simple-context-gateway-script.d.ts.map +1 -0
  342. package/dist/test/simple-context-paths.d.ts +40 -0
  343. package/dist/test/simple-context-paths.d.ts.map +1 -0
  344. package/dist/test/simple-context.d.ts +1 -23
  345. package/dist/test/simple-context.d.ts.map +1 -1
  346. package/dist/test/tail.d.ts.map +1 -1
  347. package/dist/test/worker.d.ts.map +1 -1
  348. package/dist/token-kedhcret.js +419 -0
  349. package/dist/token-m8jmnjwk.js +419 -0
  350. package/dist/{types-158m16vd.js → types-0sqwkp7x.js} +244 -140
  351. package/dist/types-1gwr2ex6.js +572 -0
  352. package/dist/types-6e5yx6km.js +572 -0
  353. package/dist/types-p0gckpn6.js +572 -0
  354. package/dist/utils/send-email.d.ts.map +1 -1
  355. package/dist/vite/config-file.d.ts.map +1 -1
  356. package/dist/vite/plugin.d.ts.map +1 -1
  357. package/dist/worker-0srh2jfr.js +513 -0
  358. package/dist/worker-4xrfd10a.js +513 -0
  359. package/dist/worker-entry/composed-worker.d.ts +0 -7
  360. package/dist/worker-entry/composed-worker.d.ts.map +1 -1
  361. package/dist/worker-entry/surface-paths.d.ts +15 -0
  362. package/dist/worker-entry/surface-paths.d.ts.map +1 -0
  363. package/dist/worker-qtam8grz.js +513 -0
  364. package/dist/worker-qzm0b7br.js +513 -0
  365. package/dist/worker-y9ha6g44.js +513 -0
  366. package/package.json +17 -10
  367. package/R2.md +0 -200
  368. package/dist/account-spa7gzsn.js +0 -421
  369. package/dist/build-zv25ke4s.js +0 -102
  370. package/dist/deploy-6xmqvv06.js +0 -118
  371. package/dist/index-2q3pmzrx.js +0 -90
  372. package/dist/index-6nb7w45m.js +0 -79
  373. package/dist/index-tksw7gpy.js +0 -503
  374. package/dist/index-v43z02tr.js +0 -205
  375. package/dist/index-xdq9ery1.js +0 -664
  376. package/dist/test/multi-worker-context.d.ts +0 -114
  377. package/dist/test/multi-worker-context.d.ts.map +0 -1
@@ -0,0 +1,168 @@
1
+ import {
2
+ apiDelete,
3
+ apiGetAll,
4
+ apiPost,
5
+ apiPut
6
+ } from "./index-0w826dsr.js";
7
+
8
+ // src/cloudflare/tokens.ts
9
+ var MAX_ACCOUNT_OWNED_TOKEN_PERMISSION_GROUPS = 300;
10
+ var DEVFLARE_MANAGED_TOKEN_PREFIX = "devflare-";
11
+ var ACCOUNT_OWNED_TOKEN_SCOPE = "com.cloudflare.api.account";
12
+ var ACCOUNT_API_TOKENS_PERMISSION_GROUP_NAME_PATTERN = /^Account API Tokens\b/i;
13
+ var DEVFLARE_MANAGED_TOKEN_NAME_PATTERN = /^devflare-/i;
14
+ var DEVFLARE_PERMISSION_GROUP_NAME_PATTERNS = [
15
+ /^Account Analytics Read$/i,
16
+ /^Account Settings Read$/i,
17
+ /^Analytics Read$/i,
18
+ /^AI /i,
19
+ /^Browser Rendering /i,
20
+ /^D1 (Metadata Read|Read|Write)$/i,
21
+ /^Email (Routing|Sending) /i,
22
+ /^Hyperdrive /i,
23
+ /^Queues /i,
24
+ /^Vectorize /i,
25
+ /^Workers /i
26
+ ];
27
+ function dedupePermissionGroups(permissionGroups) {
28
+ const seenIds = new Set;
29
+ return permissionGroups.filter((permissionGroup) => {
30
+ if (seenIds.has(permissionGroup.id)) {
31
+ return false;
32
+ }
33
+ seenIds.add(permissionGroup.id);
34
+ return true;
35
+ });
36
+ }
37
+ function dedupePermissionGroupIds(permissionGroupIds) {
38
+ return Array.from(new Set(permissionGroupIds.map((id) => id.trim()).filter(Boolean)));
39
+ }
40
+ function excludeAccountApiTokensPermissionGroups(permissionGroups) {
41
+ return permissionGroups.filter((permissionGroup) => {
42
+ return !ACCOUNT_API_TOKENS_PERMISSION_GROUP_NAME_PATTERN.test(permissionGroup.name);
43
+ });
44
+ }
45
+ function keepAccountOwnedTokenCompatiblePermissionGroups(permissionGroups) {
46
+ return permissionGroups.filter((permissionGroup) => {
47
+ return permissionGroup.scopes.some((scope) => scope.trim() === ACCOUNT_OWNED_TOKEN_SCOPE);
48
+ });
49
+ }
50
+ function selectReusableAccountOwnedTokenPermissionGroups(permissionGroups) {
51
+ return dedupePermissionGroups(excludeAccountApiTokensPermissionGroups(keepAccountOwnedTokenCompatiblePermissionGroups(permissionGroups)));
52
+ }
53
+ function parseOptionalDate(value) {
54
+ if (!value) {
55
+ return;
56
+ }
57
+ const parsed = new Date(value);
58
+ return Number.isNaN(parsed.getTime()) ? undefined : parsed;
59
+ }
60
+ function mapAccountOwnedAPITokenPolicy(policy) {
61
+ return {
62
+ id: policy.id,
63
+ effect: policy.effect,
64
+ permissionGroups: policy.permission_groups?.map((permissionGroup) => ({
65
+ id: permissionGroup.id,
66
+ name: permissionGroup.name
67
+ }))
68
+ };
69
+ }
70
+ function mapAccountOwnedAPIToken(token) {
71
+ return {
72
+ id: token.id,
73
+ name: token.name ?? token.id,
74
+ status: token.status,
75
+ value: token.value,
76
+ issuedOn: parseOptionalDate(token.issued_on),
77
+ modifiedOn: parseOptionalDate(token.modified_on),
78
+ lastUsedOn: parseOptionalDate(token.last_used_on),
79
+ policies: token.policies?.map(mapAccountOwnedAPITokenPolicy)
80
+ };
81
+ }
82
+ function isDevflareManagedTokenName(name) {
83
+ return DEVFLARE_MANAGED_TOKEN_NAME_PATTERN.test(name.trim());
84
+ }
85
+ function normalizeDevflareTokenName(name) {
86
+ const trimmedName = name.trim();
87
+ if (!trimmedName) {
88
+ throw new Error("Devflare token name cannot be empty");
89
+ }
90
+ const suffix = isDevflareManagedTokenName(trimmedName) ? trimmedName.replace(DEVFLARE_MANAGED_TOKEN_NAME_PATTERN, "") : trimmedName;
91
+ if (!suffix) {
92
+ throw new Error("Devflare token name cannot be empty");
93
+ }
94
+ return `${DEVFLARE_MANAGED_TOKEN_PREFIX}${suffix}`;
95
+ }
96
+ function stripDevflareTokenNamePrefix(name) {
97
+ const trimmedName = name.trim();
98
+ if (!trimmedName) {
99
+ return trimmedName;
100
+ }
101
+ const strippedName = trimmedName.replace(DEVFLARE_MANAGED_TOKEN_NAME_PATTERN, "");
102
+ return strippedName || trimmedName;
103
+ }
104
+ function filterDevflareManagedTokens(tokens) {
105
+ return tokens.filter((token) => isDevflareManagedTokenName(token.name));
106
+ }
107
+ function selectDevflarePermissionGroups(permissionGroups) {
108
+ const selectedPermissionGroups = dedupePermissionGroups(selectReusableAccountOwnedTokenPermissionGroups(permissionGroups).filter((permissionGroup) => {
109
+ return DEVFLARE_PERMISSION_GROUP_NAME_PATTERNS.some((pattern) => {
110
+ return pattern.test(permissionGroup.name);
111
+ });
112
+ }));
113
+ if (selectedPermissionGroups.length === 0) {
114
+ throw new Error("Could not map the available Cloudflare permission groups to a Devflare token policy.");
115
+ }
116
+ if (selectedPermissionGroups.length > MAX_ACCOUNT_OWNED_TOKEN_PERMISSION_GROUPS) {
117
+ throw new Error(`Devflare selected ${selectedPermissionGroups.length} permission groups, which exceeds Cloudflare's ${MAX_ACCOUNT_OWNED_TOKEN_PERMISSION_GROUPS}-group limit for account-owned tokens.`);
118
+ }
119
+ return selectedPermissionGroups;
120
+ }
121
+ function selectAllReusablePermissionGroups(permissionGroups) {
122
+ const selectedPermissionGroups = selectReusableAccountOwnedTokenPermissionGroups(permissionGroups);
123
+ if (selectedPermissionGroups.length === 0) {
124
+ throw new Error("Could not find any reusable account-scoped Cloudflare permission groups for this Devflare token.");
125
+ }
126
+ if (selectedPermissionGroups.length > MAX_ACCOUNT_OWNED_TOKEN_PERMISSION_GROUPS) {
127
+ throw new Error(`Devflare selected ${selectedPermissionGroups.length} permission groups, which exceeds Cloudflare's ${MAX_ACCOUNT_OWNED_TOKEN_PERMISSION_GROUPS}-group limit for account-owned tokens.`);
128
+ }
129
+ return selectedPermissionGroups;
130
+ }
131
+ async function listAccountTokenPermissionGroups(accountId, options) {
132
+ const permissionGroups = await apiGetAll(`/accounts/${accountId}/tokens/permission_groups`, options);
133
+ return dedupePermissionGroups(permissionGroups);
134
+ }
135
+ async function listAccountOwnedAPITokens(accountId, options) {
136
+ const tokens = await apiGetAll(`/accounts/${accountId}/tokens`, options);
137
+ return tokens.map(mapAccountOwnedAPIToken);
138
+ }
139
+ async function deleteAccountOwnedAPIToken(accountId, tokenId, options) {
140
+ return apiDelete(`/accounts/${accountId}/tokens/${tokenId}`, options);
141
+ }
142
+ async function rollAccountOwnedAPITokenValue(accountId, tokenId, options) {
143
+ return apiPut(`/accounts/${accountId}/tokens/${tokenId}/value`, {}, options);
144
+ }
145
+ async function createAccountOwnedAPIToken(accountId, options, clientOptions) {
146
+ const permissionGroupIds = dedupePermissionGroupIds(options.permissionGroupIds);
147
+ if (permissionGroupIds.length === 0) {
148
+ throw new Error("Cannot create a Devflare token without any permission groups");
149
+ }
150
+ if (permissionGroupIds.length > MAX_ACCOUNT_OWNED_TOKEN_PERMISSION_GROUPS) {
151
+ throw new Error(`Cannot create a Devflare token with more than ${MAX_ACCOUNT_OWNED_TOKEN_PERMISSION_GROUPS} permission groups.`);
152
+ }
153
+ const createdToken = await apiPost(`/accounts/${accountId}/tokens`, {
154
+ name: options.name,
155
+ policies: [
156
+ {
157
+ effect: "allow",
158
+ resources: {
159
+ [`com.cloudflare.api.account.${accountId}`]: "*"
160
+ },
161
+ permission_groups: permissionGroupIds.map((id) => ({ id }))
162
+ }
163
+ ]
164
+ }, clientOptions);
165
+ return mapAccountOwnedAPIToken(createdToken);
166
+ }
167
+
168
+ export { normalizeDevflareTokenName, stripDevflareTokenNamePrefix, filterDevflareManagedTokens, selectDevflarePermissionGroups, selectAllReusablePermissionGroups, listAccountTokenPermissionGroups, listAccountOwnedAPITokens, deleteAccountOwnedAPIToken, rollAccountOwnedAPITokenValue, createAccountOwnedAPIToken };
@@ -11,25 +11,31 @@ import {
11
11
  import {
12
12
  compileConfig,
13
13
  compileToProgrammaticConfig,
14
+ isolateViteBuildOutputPaths,
15
+ rebaseWranglerConfigPaths,
14
16
  writeWranglerConfig
15
- } from "./index-5s1bz1e0.js";
17
+ } from "./index-pnbs1b8k.js";
16
18
  import {
17
19
  loadConfig,
18
20
  loadResolvedConfig,
21
+ normalizeDOBinding,
19
22
  resolveConfigForEnvironment,
20
23
  resolveConfigForLocalRuntime,
21
24
  resolveConfigPath,
22
25
  resolveConfigResources
23
- } from "./index-tksw7gpy.js";
26
+ } from "./index-6psz1h4c.js";
24
27
  import {
25
28
  __require
26
29
  } from "./index-37x76zdn.js";
27
30
 
28
31
  // src/vite/plugin.ts
29
- import { isAbsolute, relative as relative2, resolve as resolve2 } from "pathe";
32
+ import { isAbsolute, resolve as resolve3 } from "pathe";
30
33
 
31
34
  // src/worker-entry/composed-worker.ts
32
- import { dirname, relative, resolve } from "pathe";
35
+ import { dirname, relative, resolve as resolve2 } from "pathe";
36
+
37
+ // src/worker-entry/surface-paths.ts
38
+ import { resolve } from "pathe";
33
39
  var DEFAULT_FETCH_ENTRY_FILES = [
34
40
  "src/fetch.ts",
35
41
  "src/fetch.js",
@@ -54,20 +60,22 @@ var DEFAULT_EMAIL_ENTRY_FILES = [
54
60
  "src/email.mts",
55
61
  "src/email.mjs"
56
62
  ];
57
- async function resolveWorkerHandlerPath(cwd, configuredPath, defaultEntries) {
63
+ async function resolveWorkerHandlerPath(cwd, configuredPath, defaultEntries, surfaceName = "worker") {
58
64
  if (configuredPath === false) {
59
65
  return null;
60
66
  }
61
67
  const fs = await import("node:fs/promises");
62
- const candidates = new Set;
63
68
  if (typeof configuredPath === "string" && configuredPath) {
64
- candidates.add(configuredPath);
69
+ const absolutePath = resolve(cwd, configuredPath);
70
+ try {
71
+ await fs.access(absolutePath);
72
+ return absolutePath;
73
+ } catch {
74
+ throw new Error(`Configured ${surfaceName} handler "${configuredPath}" was not found`);
75
+ }
65
76
  }
66
77
  for (const defaultEntry of defaultEntries) {
67
- candidates.add(defaultEntry);
68
- }
69
- for (const candidate of candidates) {
70
- const absolutePath = resolve(cwd, candidate);
78
+ const absolutePath = resolve(cwd, defaultEntry);
71
79
  try {
72
80
  await fs.access(absolutePath);
73
81
  return absolutePath;
@@ -79,12 +87,17 @@ async function resolveWorkerHandlerPath(cwd, configuredPath, defaultEntries) {
79
87
  }
80
88
  async function resolveWorkerSurfacePaths(cwd, config) {
81
89
  return {
82
- fetch: await resolveWorkerHandlerPath(cwd, config.files?.fetch, DEFAULT_FETCH_ENTRY_FILES),
83
- queue: await resolveWorkerHandlerPath(cwd, config.files?.queue, DEFAULT_QUEUE_ENTRY_FILES),
84
- scheduled: await resolveWorkerHandlerPath(cwd, config.files?.scheduled, DEFAULT_SCHEDULED_ENTRY_FILES),
85
- email: await resolveWorkerHandlerPath(cwd, config.files?.email, DEFAULT_EMAIL_ENTRY_FILES)
90
+ fetch: await resolveWorkerHandlerPath(cwd, config.files?.fetch, DEFAULT_FETCH_ENTRY_FILES, "fetch"),
91
+ queue: await resolveWorkerHandlerPath(cwd, config.files?.queue, DEFAULT_QUEUE_ENTRY_FILES, "queue"),
92
+ scheduled: await resolveWorkerHandlerPath(cwd, config.files?.scheduled, DEFAULT_SCHEDULED_ENTRY_FILES, "scheduled"),
93
+ email: await resolveWorkerHandlerPath(cwd, config.files?.email, DEFAULT_EMAIL_ENTRY_FILES, "email")
86
94
  };
87
95
  }
96
+ function hasWorkerSurfacePaths(surfacePaths) {
97
+ return Object.values(surfacePaths).some((surfacePath) => typeof surfacePath === "string" && surfacePath.length > 0);
98
+ }
99
+
100
+ // src/worker-entry/composed-worker.ts
88
101
  function toImportSpecifier(fromFilePath, toFilePath) {
89
102
  const specifier = relative(dirname(fromFilePath), toFilePath).replace(/\\/g, "/");
90
103
  return specifier.startsWith(".") ? specifier : `./${specifier}`;
@@ -101,12 +114,65 @@ function createGeneratedRouteModuleImports(entryPath, routeDiscovery) {
101
114
  segmentsJson: JSON.stringify(route.segments)
102
115
  }));
103
116
  }
104
- function needsComposedWorkerEntrypoint(surfacePaths, routeDiscovery) {
105
- return Boolean(surfacePaths.fetch || surfacePaths.queue || surfacePaths.scheduled || surfacePaths.email || routeDiscovery?.routes.length);
117
+ async function createGeneratedDurableObjectExports(entryPath, cwd, config) {
118
+ if (config.files?.durableObjects === false || !config.bindings?.durableObjects) {
119
+ return [];
120
+ }
121
+ const localClassNames = new Set(Object.values(config.bindings.durableObjects).map((binding) => normalizeDOBinding(binding)).filter((binding) => !binding.scriptName).map((binding) => binding.className));
122
+ if (localClassNames.size === 0) {
123
+ return [];
124
+ }
125
+ const fs = await import("node:fs/promises");
126
+ const pattern = typeof config.files?.durableObjects === "string" ? config.files.durableObjects : DEFAULT_DO_PATTERN;
127
+ const matchedFiles = await findFiles(pattern, { cwd });
128
+ const exports = [];
129
+ const discoveredClassNames = new Set;
130
+ for (const filePath of matchedFiles) {
131
+ try {
132
+ const code = await fs.readFile(filePath, "utf-8");
133
+ const classNames = findDurableObjectClasses(code).filter((className) => localClassNames.has(className));
134
+ if (classNames.length === 0) {
135
+ continue;
136
+ }
137
+ for (const className of classNames) {
138
+ discoveredClassNames.add(className);
139
+ }
140
+ exports.push({
141
+ importPath: toImportSpecifier(entryPath, filePath),
142
+ filePath,
143
+ classNames
144
+ });
145
+ } catch {
146
+ continue;
147
+ }
148
+ }
149
+ const missingClassNames = Array.from(localClassNames).filter((className) => !discoveredClassNames.has(className));
150
+ if (missingClassNames.length > 0) {
151
+ throw new Error(`Failed to discover local Durable Object class${missingClassNames.length === 1 ? "" : "es"} ${missingClassNames.join(", ")} for worker composition. Ensure files.durableObjects matches the source file pattern for your do.* files.`);
152
+ }
153
+ return exports;
106
154
  }
107
- function getComposedWorkerEntrypointSource(surfaceImportPaths, configuredLocalSendEmailBindings = {}, routeImports = [], options = {}) {
155
+ function needsComposedWorkerEntrypoint(cwd, surfacePaths, config, routeDiscovery) {
156
+ const hasAdditionalWorkerSurfaces = Boolean(surfacePaths.queue || surfacePaths.scheduled || surfacePaths.email || routeDiscovery?.routes.length);
157
+ if (hasAdditionalWorkerSurfaces) {
158
+ return true;
159
+ }
160
+ if (!surfacePaths.fetch) {
161
+ return false;
162
+ }
163
+ const assetsDirectory = config.assets?.directory;
164
+ if (assetsDirectory) {
165
+ const generatedAssetsWorkerPath = resolve2(cwd, assetsDirectory, "_worker.js");
166
+ if (surfacePaths.fetch === generatedAssetsWorkerPath) {
167
+ return false;
168
+ }
169
+ }
170
+ return Boolean(surfacePaths.fetch);
171
+ }
172
+ function getComposedWorkerEntrypointSource(surfaceImportPaths, configuredLocalSendEmailBindings = {}, durableObjectExports = [], routeImports = [], options = {}) {
108
173
  const importLines = [`import { createEmailEvent, createFetchEvent, createQueueEvent, createRouteResolve, createScheduledEvent, invokeFetchModule, matchFetchRoute, runWithEventContext, setLocalSendEmailBindings } from 'devflare/runtime'`];
109
174
  const moduleFallbackLines = [];
175
+ const durableObjectExportLines = durableObjectExports.map(({ classNames, importPath }) => `export { ${classNames.join(", ")} } from '${importPath}'`);
110
176
  const localSendEmailBindings = JSON.stringify(configuredLocalSendEmailBindings);
111
177
  const routeManifestEntries = routeImports.map(({ identifier, filePath, routePath, segmentsJson }) => {
112
178
  return ` { filePath: ${JSON.stringify(filePath)}, routePath: ${JSON.stringify(routePath)}, segments: ${segmentsJson}, module: ${identifier} }`;
@@ -200,6 +266,8 @@ ${importLines.join(`
200
266
  `)}
201
267
  ${moduleFallbackLines.join(`
202
268
  `)}
269
+ ${durableObjectExportLines.join(`
270
+ `)}
203
271
 
204
272
  setLocalSendEmailBindings(${localSendEmailBindings})
205
273
 
@@ -306,12 +374,12 @@ async function prepareComposedWorkerEntrypoint(cwd, config, environment, options
306
374
  }
307
375
  const surfacePaths = await resolveWorkerSurfacePaths(cwd, resolvedConfig);
308
376
  const routeDiscovery = await discoverRoutes(cwd, resolvedConfig);
309
- if (!needsComposedWorkerEntrypoint(surfacePaths, routeDiscovery)) {
377
+ if (!needsComposedWorkerEntrypoint(cwd, surfacePaths, resolvedConfig, routeDiscovery)) {
310
378
  return null;
311
379
  }
312
380
  const fs = await import("node:fs/promises");
313
- const entryDir = resolve(cwd, ".devflare", "worker-entrypoints");
314
- const entryPath = resolve(entryDir, "main.ts");
381
+ const entryDir = resolve2(cwd, ".devflare", "worker-entrypoints");
382
+ const entryPath = resolve2(entryDir, "main.ts");
315
383
  await fs.mkdir(entryDir, { recursive: true });
316
384
  const surfaceImportPaths = {
317
385
  fetch: surfacePaths.fetch ? toImportSpecifier(entryPath, surfacePaths.fetch) : null,
@@ -319,8 +387,9 @@ async function prepareComposedWorkerEntrypoint(cwd, config, environment, options
319
387
  scheduled: surfacePaths.scheduled ? toImportSpecifier(entryPath, surfacePaths.scheduled) : null,
320
388
  email: surfacePaths.email ? toImportSpecifier(entryPath, surfacePaths.email) : null
321
389
  };
390
+ const durableObjectExports = await createGeneratedDurableObjectExports(entryPath, cwd, resolvedConfig);
322
391
  const routeImports = createGeneratedRouteModuleImports(entryPath, routeDiscovery);
323
- await fs.writeFile(entryPath, getComposedWorkerEntrypointSource(surfaceImportPaths, resolvedConfig.bindings?.sendEmail ?? {}, routeImports, options));
392
+ await fs.writeFile(entryPath, getComposedWorkerEntrypointSource(surfaceImportPaths, resolvedConfig.bindings?.sendEmail ?? {}, durableObjectExports, routeImports, options));
324
393
  return ".devflare/worker-entrypoints/main.ts";
325
394
  }
326
395
 
@@ -395,13 +464,6 @@ function createAuxiliaryWorkerConfig(wranglerConfig, discovery) {
395
464
  }
396
465
  };
397
466
  }
398
- function rebaseMainPathForConfigDir(projectRoot, configDir, mainEntry) {
399
- if (!mainEntry) {
400
- return mainEntry;
401
- }
402
- const absoluteMainPath = isAbsolute(mainEntry) ? mainEntry : resolve2(projectRoot, mainEntry);
403
- return relative2(configDir, absoluteMainPath).replace(/\\/g, "/");
404
- }
405
467
  function logDiscoveredDurableObjects(projectRoot, discovery) {
406
468
  if (!discovery || discovery.files.size === 0) {
407
469
  return;
@@ -413,9 +475,12 @@ function logDiscoveredDurableObjects(projectRoot, discovery) {
413
475
  }
414
476
  async function buildPluginContextState(projectRoot, devflareConfig, environment, mode = "serve") {
415
477
  const effectiveConfig = mode === "build" ? await resolveConfigResources(devflareConfig, { environment }) : resolveConfigForLocalRuntime(devflareConfig, environment);
416
- const wranglerConfig = compileConfig(effectiveConfig);
417
- const cloudflareConfig = compileToProgrammaticConfig(effectiveConfig);
418
- const composedMainEntry = await prepareComposedWorkerEntrypoint(projectRoot, effectiveConfig);
478
+ const compiledWranglerConfig = compileConfig(effectiveConfig);
479
+ const wranglerConfig = mode === "build" ? isolateViteBuildOutputPaths(projectRoot, compiledWranglerConfig) : compiledWranglerConfig;
480
+ const cloudflareConfig = {
481
+ ...mode === "build" ? isolateViteBuildOutputPaths(projectRoot, compileToProgrammaticConfig(effectiveConfig)) : compileToProgrammaticConfig(effectiveConfig)
482
+ };
483
+ const composedMainEntry = mode === "build" ? null : await prepareComposedWorkerEntrypoint(projectRoot, effectiveConfig, environment);
419
484
  if (composedMainEntry) {
420
485
  wranglerConfig.main = composedMainEntry;
421
486
  cloudflareConfig.main = composedMainEntry;
@@ -451,10 +516,10 @@ async function buildPluginContextState(projectRoot, devflareConfig, environment,
451
516
  };
452
517
  }
453
518
  async function ensureGeneratedConfigDir(projectRoot) {
454
- const configDir = resolve2(projectRoot, CONFIG_DIR);
519
+ const configDir = resolve3(projectRoot, CONFIG_DIR);
455
520
  const fs = await import("node:fs/promises");
456
521
  await fs.mkdir(configDir, { recursive: true });
457
- const gitignorePath = resolve2(configDir, ".gitignore");
522
+ const gitignorePath = resolve3(configDir, ".gitignore");
458
523
  try {
459
524
  await fs.access(gitignorePath);
460
525
  } catch {
@@ -465,17 +530,12 @@ async function ensureGeneratedConfigDir(projectRoot) {
465
530
  }
466
531
  async function writeGeneratedWranglerConfig(projectRoot, wranglerConfig) {
467
532
  const configDir = await ensureGeneratedConfigDir(projectRoot);
468
- const wranglerFileConfig = {
469
- ...wranglerConfig,
470
- ...wranglerConfig.main && {
471
- main: rebaseMainPathForConfigDir(projectRoot, configDir, wranglerConfig.main)
472
- }
473
- };
533
+ const wranglerFileConfig = rebaseWranglerConfigPaths(projectRoot, configDir, wranglerConfig);
474
534
  await writeWranglerConfig(configDir, wranglerFileConfig, "wrangler.jsonc");
475
535
  }
476
536
  async function resolvePluginConfigPath(projectRoot, configPath) {
477
537
  if (configPath) {
478
- return isAbsolute(configPath) ? configPath : resolve2(projectRoot, configPath);
538
+ return isAbsolute(configPath) ? configPath : resolve3(projectRoot, configPath);
479
539
  }
480
540
  return await resolveConfigPath(projectRoot) ?? null;
481
541
  }
@@ -598,7 +658,7 @@ export default { fetch: () => new Response("No DOs") }`;
598
658
  configureServer(server) {
599
659
  if (!watchConfig)
600
660
  return;
601
- const fullConfigPath = resolvedPluginConfigPath ?? resolve2(projectRoot, configPath || "devflare.config.ts");
661
+ const fullConfigPath = resolvedPluginConfigPath ?? resolve3(projectRoot, configPath || "devflare.config.ts");
602
662
  server.watcher.add(fullConfigPath);
603
663
  server.watcher.on("change", async (changedPath) => {
604
664
  if (changedPath === fullConfigPath) {
@@ -704,7 +764,6 @@ async function getDevflareConfigs(options = {}) {
704
764
  return { cloudflareConfig, auxiliaryWorkers };
705
765
  }
706
766
  // src/vite/config-file.ts
707
- import { loadConfigFromFile, mergeConfig } from "vite";
708
767
  var CONFIG_DIR2 = ".devflare";
709
768
  var GENERATED_VITE_CONFIG_FILENAME = "vite.config.mjs";
710
769
  function hasInlineViteConfig(viteConfig) {
@@ -720,30 +779,34 @@ function resolveEffectiveViteProject(detection, config, environment) {
720
779
  wantsViteIntegration: detection.wantsViteIntegration || hasDevflareConfig
721
780
  };
722
781
  }
723
- function collectPlugins(pluginOption, plugins = []) {
724
- if (Array.isArray(pluginOption)) {
725
- for (const nestedPlugin of pluginOption) {
726
- collectPlugins(nestedPlugin, plugins);
727
- }
728
- return plugins;
782
+ function isPromiseLike(value) {
783
+ return (typeof value === "object" || typeof value === "function") && value !== null && typeof value.then === "function";
784
+ }
785
+ function normalizePluginOptions(pluginOption) {
786
+ if (typeof pluginOption === "undefined") {
787
+ return [];
729
788
  }
730
- if (!pluginOption || typeof pluginOption === "boolean") {
731
- return plugins;
789
+ return Array.isArray(pluginOption) ? pluginOption : [pluginOption];
790
+ }
791
+ function removePluginByName(pluginOption, pluginName) {
792
+ if (Array.isArray(pluginOption)) {
793
+ const filteredPlugins = pluginOption.map((nestedPlugin) => removePluginByName(nestedPlugin, pluginName)).filter((nestedPlugin) => typeof nestedPlugin !== "undefined");
794
+ return filteredPlugins.length > 0 ? filteredPlugins : undefined;
732
795
  }
733
- if (typeof pluginOption.then === "function") {
734
- return plugins;
796
+ if (!pluginOption || typeof pluginOption === "boolean" || isPromiseLike(pluginOption)) {
797
+ return pluginOption;
735
798
  }
736
- plugins.push(pluginOption);
737
- return plugins;
799
+ return pluginOption.name === pluginName ? undefined : pluginOption;
738
800
  }
739
801
  function withInjectedDevflarePlugin(config, pluginOptions) {
740
- const existingPlugins = collectPlugins(config.plugins).filter((plugin) => plugin.name !== "devflare");
802
+ const existingPlugins = normalizePluginOptions(config.plugins).map((pluginOption) => removePluginByName(pluginOption, "devflare")).filter((pluginOption) => typeof pluginOption !== "undefined");
741
803
  return {
742
804
  ...config,
743
805
  plugins: [devflarePlugin(pluginOptions), ...existingPlugins]
744
806
  };
745
807
  }
746
808
  async function resolveViteUserConfig(configEnv, options = {}) {
809
+ const { loadConfigFromFile, mergeConfig } = await import("vite");
747
810
  const cwd = options.cwd ?? process.cwd();
748
811
  const devflareConfig = await loadConfig({
749
812
  cwd,
@@ -765,10 +828,10 @@ async function resolveViteUserConfig(configEnv, options = {}) {
765
828
  }
766
829
  async function ensureGeneratedConfigDir2(cwd) {
767
830
  const fs = await import("node:fs/promises");
768
- const { resolve: resolve3 } = await import("pathe");
769
- const configDir = resolve3(cwd, CONFIG_DIR2);
831
+ const { resolve: resolve4 } = await import("pathe");
832
+ const configDir = resolve4(cwd, CONFIG_DIR2);
770
833
  await fs.mkdir(configDir, { recursive: true });
771
- const gitignorePath = resolve3(configDir, ".gitignore");
834
+ const gitignorePath = resolve4(configDir, ".gitignore");
772
835
  try {
773
836
  await fs.access(gitignorePath);
774
837
  } catch {
@@ -777,13 +840,46 @@ async function ensureGeneratedConfigDir2(cwd) {
777
840
  }
778
841
  return configDir;
779
842
  }
843
+ async function resolveDevflarePackageRoot(currentFilePath) {
844
+ const fs = await import("node:fs/promises");
845
+ const { dirname: dirname2 } = await import("node:path");
846
+ const { resolve: resolve4 } = await import("pathe");
847
+ let currentDir = dirname2(currentFilePath);
848
+ while (true) {
849
+ const packageJsonPath = resolve4(currentDir, "package.json");
850
+ try {
851
+ const packageJson = JSON.parse(await fs.readFile(packageJsonPath, "utf-8"));
852
+ if (packageJson.name === "devflare") {
853
+ return currentDir;
854
+ }
855
+ } catch {}
856
+ const parentDir = dirname2(currentDir);
857
+ if (parentDir === currentDir) {
858
+ break;
859
+ }
860
+ currentDir = parentDir;
861
+ }
862
+ throw new Error("Could not resolve the devflare package root for generated Vite config imports.");
863
+ }
864
+ async function resolveGeneratedViteImportPath(configDir) {
865
+ const { extname, sep } = await import("node:path");
866
+ const { fileURLToPath } = await import("node:url");
867
+ const { relative: relative3, resolve: resolve4 } = await import("pathe");
868
+ const currentFilePath = fileURLToPath(import.meta.url);
869
+ const currentExtension = extname(currentFilePath);
870
+ const packageRoot = await resolveDevflarePackageRoot(currentFilePath);
871
+ const viteEntryPath = currentFilePath.includes(`${sep}dist${sep}`) ? resolve4(packageRoot, "dist/src/vite/index.js") : resolve4(packageRoot, `src/vite/index${currentExtension}`);
872
+ const relativeImportPath = relative3(configDir, viteEntryPath);
873
+ return relativeImportPath.startsWith(".") ? relativeImportPath : `./${relativeImportPath}`;
874
+ }
780
875
  async function writeGeneratedViteConfig(options) {
781
876
  const fs = await import("node:fs/promises");
782
- const { resolve: resolve3 } = await import("pathe");
877
+ const { resolve: resolve4 } = await import("pathe");
783
878
  const configDir = await ensureGeneratedConfigDir2(options.cwd);
784
- const generatedConfigPath = resolve3(configDir, GENERATED_VITE_CONFIG_FILENAME);
879
+ const generatedConfigPath = resolve4(configDir, GENERATED_VITE_CONFIG_FILENAME);
880
+ const viteImportPath = await resolveGeneratedViteImportPath(configDir);
785
881
  const content = `import { defineConfig } from 'vite'
786
- import { resolveViteUserConfig } from 'devflare/vite'
882
+ import { resolveViteUserConfig } from ${JSON.stringify(viteImportPath)}
787
883
 
788
884
  export default defineConfig(async (env) => {
789
885
  return await resolveViteUserConfig(env, {
@@ -798,4 +894,4 @@ export default defineConfig(async (env) => {
798
894
  await fs.writeFile(generatedConfigPath, content, "utf-8");
799
895
  return generatedConfigPath;
800
896
  }
801
- export { prepareComposedWorkerEntrypoint, getPluginContext, devflarePlugin, getCloudflareConfig, getDevflareConfigs, hasInlineViteConfig, resolveEffectiveViteProject, resolveViteUserConfig, writeGeneratedViteConfig };
897
+ export { DEFAULT_FETCH_ENTRY_FILES, DEFAULT_QUEUE_ENTRY_FILES, DEFAULT_SCHEDULED_ENTRY_FILES, DEFAULT_EMAIL_ENTRY_FILES, resolveWorkerSurfacePaths, hasWorkerSurfacePaths, prepareComposedWorkerEntrypoint, getPluginContext, devflarePlugin, getCloudflareConfig, getDevflareConfigs, hasInlineViteConfig, resolveEffectiveViteProject, resolveViteUserConfig, writeGeneratedViteConfig };
@@ -1,15 +1,16 @@
1
1
  import {
2
- apiGet,
3
- apiPost,
2
+ DEVFLARE_KV_NAMESPACE_TITLE,
4
3
  getEffectiveAccountId,
5
- getPrimaryAccount,
4
+ getOrCreateNamedKVNamespace,
5
+ getPrimaryAccount
6
+ } from "./index-xk9djfjp.js";
7
+ import {
6
8
  isAuthenticated,
7
9
  kvGet,
8
10
  kvPut
9
- } from "./index-xdq9ery1.js";
11
+ } from "./index-0w826dsr.js";
10
12
 
11
13
  // src/cloudflare/usage.ts
12
- var DEVFLARE_KV_NAMESPACE_TITLE = "devflare-usage";
13
14
  var USAGE_KEY_PREFIX = "usage:";
14
15
  var LIMITS_KEY = "limits";
15
16
  var DEFAULT_LIMITS = {
@@ -19,13 +20,7 @@ var DEFAULT_LIMITS = {
19
20
  enabled: true
20
21
  };
21
22
  async function getOrCreateUsageNamespace(accountId) {
22
- const namespaces = await apiGet(`/accounts/${accountId}/storage/kv/namespaces`);
23
- const existing = namespaces.find((ns) => ns.title === DEVFLARE_KV_NAMESPACE_TITLE);
24
- if (existing) {
25
- return existing.id;
26
- }
27
- const created = await apiPost(`/accounts/${accountId}/storage/kv/namespaces`, { title: DEVFLARE_KV_NAMESPACE_TITLE });
28
- return created.id;
23
+ return getOrCreateNamedKVNamespace(accountId, DEVFLARE_KV_NAMESPACE_TITLE);
29
24
  }
30
25
  function getTodayDate() {
31
26
  return new Date().toISOString().split("T")[0];