void 0.10.12 → 0.20.0

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 (431) hide show
  1. package/AGENTS_TEMPLATE.md +6 -0
  2. package/{skills/void/docs/node_modules/void/node_modules/pglite-server/LICENSE.md → LICENSE} +1 -1
  3. package/README.md +34 -8
  4. package/dist/{auth-qgMlYp7Z.d.mts → auth-DkcFflXV.d.mts} +10 -11
  5. package/dist/auth-W9WII-mN.mjs +630 -0
  6. package/dist/{auth-cmd-BqsdZJp5.mjs → auth-cmd-CYVhSNFy.mjs} +4 -3
  7. package/dist/{auth-migrations-BTZ-ATvQ.mjs → auth-migrations-9vif1uj8.mjs} +53 -12
  8. package/dist/{better-auth-shared-BQooDxbw.mjs → better-auth-shared-CYw1T3k4.mjs} +7 -10
  9. package/dist/{better-auth-shared-DealXecJ.d.mts → better-auth-shared-DSCeohOK.d.mts} +10 -5
  10. package/dist/{build-cmd-Bujrv5q-.mjs → build-cmd-CkVD1uOh.mjs} +6 -4
  11. package/dist/{cache-C11V8Fxq.mjs → cache-QcUfR-ff.mjs} +9 -5
  12. package/dist/{cancel-deploy-fwFYF04b.mjs → cancel-deploy-DsvWKFTe.mjs} +3 -2
  13. package/dist/cf-access-AJ1ehiFR.mjs +42 -0
  14. package/dist/cf-access-DsSsZUPr.mjs +67 -0
  15. package/dist/cli/cli.d.mts +1 -1
  16. package/dist/cli/cli.mjs +1592 -153
  17. package/dist/cli/env-schema-probe.d.mts +48 -61
  18. package/dist/cli/env-schema-probe.mjs +10 -58
  19. package/dist/{client-Gb71-XkG.mjs → client-CyCHWSO_.mjs} +61 -463
  20. package/dist/cloudflare-auth-DRkGe7-s.mjs +170 -0
  21. package/dist/cloudflare-cmd-D3ME2GAe.mjs +62 -0
  22. package/dist/cloudflare-connect-BivMefMA.mjs +56 -0
  23. package/dist/cloudflare-operations-CPTpRW6d.mjs +566 -0
  24. package/dist/{config-BkTvs43g.mjs → config-BQFq7QvD.mjs} +85 -41
  25. package/dist/{config-CutEMNGJ.mjs → config-NOG_U1aK.mjs} +10 -15
  26. package/dist/connect-D9Yr-T5f.mjs +79 -0
  27. package/dist/{create-project-DsYvl3TB.mjs → create-project-DMV-csEm.mjs} +26 -16
  28. package/dist/database-provider.d.mts +21 -0
  29. package/dist/database-provider.mjs +6 -0
  30. package/dist/{db-DOiJMRt2.mjs → db-BxoUWL0F.mjs} +600 -115
  31. package/dist/{delete-mh6p-zkQ.mjs → delete-iJOqxBz1.mjs} +9 -6
  32. package/dist/{deploy-u7Rv9q_q.mjs → deploy-CcDoeBIf.mjs} +3451 -1986
  33. package/dist/dev-inbox-DkgRWLkW.mjs +307 -0
  34. package/dist/{discover-CJHyvYfR.mjs → discover-xvfrgJeo.mjs} +3 -3
  35. package/dist/{magic-string.es-ZQjdJFFn.mjs → dist-BR1quN_w.mjs} +570 -216
  36. package/dist/{dist-DaKKDf8D.mjs → dist-BrsS7cai.mjs} +17 -2
  37. package/dist/{dist-BuiRJkTd.mjs → dist-m40_XgNh.mjs} +48 -33
  38. package/dist/{domain-DiaNQbrl.mjs → domain-gu_iaHmn.mjs} +41 -4
  39. package/dist/dotenv-VQxupEUv.mjs +181 -0
  40. package/dist/edge.d.mts +2 -0
  41. package/dist/edge.mjs +2 -0
  42. package/dist/email-Ce6SQq-i.mjs +182 -0
  43. package/dist/email-r6DHJyAB.mjs +262 -0
  44. package/dist/{entry-D7yy4xVH.mjs → entry-DU3oDoQ3.mjs} +2 -2
  45. package/dist/env-D4Emu-M_.mjs +95 -0
  46. package/dist/env-DmU2To0C.mjs +73 -0
  47. package/dist/env-helpers-CyKtOBpj.d.mts +22 -0
  48. package/dist/env-public-D_6u46fX.d.mts +135 -0
  49. package/dist/{env-types-QBj-ndax.mjs → env-types-BNPhro-M.mjs} +2 -2
  50. package/dist/{env-validation-Dea3v3ej.mjs → env-validation-ENpMy6Ez.mjs} +68 -122
  51. package/dist/{gen-o_w-8yI8.mjs → gen-BKw6qHIg.mjs} +70 -15
  52. package/dist/{github-cmd-DKcGUNsj.mjs → github-cmd-DJS5Ab-H.mjs} +39 -31
  53. package/dist/{handler-Cjh8uM3Y.d.mts → handler-D1hLsObx.d.mts} +124 -122
  54. package/dist/{head-nmvOgFjd.d.mts → head-Do8P4puT.d.mts} +9 -8
  55. package/dist/{headers-nsHIFixA.mjs → headers-D8QfRX9Y.mjs} +12 -10
  56. package/dist/inbound-BJ70in1n.d.mts +354 -0
  57. package/dist/inbound-CNKxb3FY.mjs +694 -0
  58. package/dist/index.d.mts +61 -34
  59. package/dist/index.mjs +1048 -321
  60. package/dist/{init-3rgHKBVi.mjs → init-Dx5cgKqK.mjs} +329 -271
  61. package/dist/link-D_rm5sRH.mjs +52 -0
  62. package/dist/{list-CPwFDZ_c.mjs → list-M8XShti7.mjs} +37 -5
  63. package/dist/{runner-kapo9aPs.mjs → local-d1-BE8KBbMy.mjs} +116 -6
  64. package/dist/{login-BT3H8PN3.mjs → login-C8-UuLnp.mjs} +17 -15
  65. package/dist/{logs-Bt313ax7.mjs → logs-DwFU7dMW.mjs} +16 -2
  66. package/dist/mime-BJD7d_qL.mjs +1216 -0
  67. package/dist/neon-DHwd2zvC.mjs +54 -0
  68. package/dist/{node-Da0UcsGA.mjs → node-BkaXcpAc.mjs} +29 -8
  69. package/dist/operator-cmd-DYWRbWUA.mjs +348 -0
  70. package/dist/{agents-CtgBYqld.mjs → output-tFQLLj26.mjs} +676 -211
  71. package/dist/{package-json-Cx1osYo6.mjs → package-json-CPoWX79C.mjs} +1 -1
  72. package/dist/pages/client.d.mts +43 -41
  73. package/dist/pages/client.mjs +40 -33
  74. package/dist/pages/head-client.d.mts +10 -12
  75. package/dist/pages/head.d.mts +1 -1
  76. package/dist/pages/index.d.mts +37 -14
  77. package/dist/pages/index.mjs +5 -5
  78. package/dist/pages/islands-plugin.d.mts +25 -27
  79. package/dist/pages/islands-plugin.mjs +6 -4
  80. package/dist/pages/prefetch.d.mts +6 -7
  81. package/dist/pages/protocol.d.mts +2 -2
  82. package/dist/pages/protocol.mjs +2 -1
  83. package/dist/pages/serialize.d.mts +7 -8
  84. package/dist/platform-cmd-BEOVv1PN.mjs +123 -0
  85. package/dist/platform-domain-BszUfiS8.mjs +228 -0
  86. package/dist/platform-lifecycle-CjSr6xf0.mjs +4450 -0
  87. package/dist/platform-management-W30iCaTL.mjs +698 -0
  88. package/dist/platform-recovery-pHHv4ZSg.mjs +99 -0
  89. package/dist/{plugin-inference-DMeavIJ6.mjs → plugin-inference-BDRfZngg.mjs} +35 -19
  90. package/dist/prepare-BfJvFUtJ.mjs +14 -0
  91. package/dist/{prepare-BoKHgMNx.mjs → prepare-CBetXvsN.mjs} +15 -24
  92. package/dist/{preset-BjyR3lzz.mjs → preset-lAy0B0BQ.mjs} +25 -212
  93. package/dist/{project-cmd-D_w-4w5B.mjs → project-cmd-DCpk1cDt.mjs} +25 -12
  94. package/dist/{project-paths-BQd7OmIo.mjs → project-paths-SK8nMHPp.mjs} +3 -1
  95. package/dist/{project-tsconfig-B-QtXjLQ.mjs → project-tsconfig-Ql2XsSQp.mjs} +2 -2
  96. package/dist/{protocol-Bnb0LFp3.d.mts → protocol-C-pqYJjE.d.mts} +3 -4
  97. package/dist/{provision-rShh6MKY.mjs → provision-Blnstcm2.mjs} +78 -45
  98. package/dist/r2-conditions-D1Wk8i7b.mjs +30 -0
  99. package/dist/{requests-B8sZxaFM.mjs → requests-Dn8Vheh1.mjs} +5 -3
  100. package/dist/{resolve-project-BBMtLLV9.mjs → resolve-project--Vxawf7z.mjs} +2 -2
  101. package/dist/rollback-CtlPXEBi.mjs +166 -0
  102. package/dist/{rolldown-runtime-DJK8HYOj.mjs → rolldown-runtime-rQ84J-ij.mjs} +1 -1
  103. package/dist/{route-types-COI2DsZv.mjs → route-types-Da-DpyUp.mjs} +85 -26
  104. package/dist/routes-stub.d.mts +22 -23
  105. package/dist/runner-mysql-CgRFl3s6.mjs +61 -0
  106. package/dist/{runner-pg-CHM76xuC.mjs → runner-pg-DCkWPsWS.mjs} +18 -6
  107. package/dist/runtime/ai.d.mts +21 -14
  108. package/dist/runtime/ai.mjs +5 -4
  109. package/dist/runtime/auth-client-react.d.mts +3 -5
  110. package/dist/runtime/auth-client-solid.d.mts +3 -5
  111. package/dist/runtime/auth-client-svelte.d.mts +3 -5
  112. package/dist/runtime/auth-client-vue.d.mts +3 -5
  113. package/dist/runtime/auth-client.d.mts +3 -5
  114. package/dist/runtime/auth.d.mts +1 -1
  115. package/dist/runtime/better-auth-mysql.d.mts +10 -0
  116. package/dist/runtime/better-auth-mysql.mjs +49 -0
  117. package/dist/runtime/better-auth-pg.d.mts +8 -9
  118. package/dist/runtime/better-auth-pg.mjs +2 -2
  119. package/dist/runtime/better-auth.d.mts +8 -9
  120. package/dist/runtime/better-auth.mjs +2 -2
  121. package/dist/runtime/client-react.d.mts +1 -1
  122. package/dist/runtime/client-solid.d.mts +1 -1
  123. package/dist/runtime/client-svelte.d.mts +1 -1
  124. package/dist/runtime/client-vue.d.mts +1 -1
  125. package/dist/runtime/client.d.mts +1 -1
  126. package/dist/runtime/db-mysql.d.mts +2 -0
  127. package/dist/runtime/db-mysql.mjs +1 -0
  128. package/dist/runtime/db.d.mts +10 -11
  129. package/dist/runtime/durable.d.mts +47 -0
  130. package/dist/runtime/durable.mjs +146 -0
  131. package/dist/runtime/email/testing.d.mts +112 -0
  132. package/dist/runtime/email/testing.mjs +283 -0
  133. package/dist/runtime/email.d.mts +30 -0
  134. package/dist/runtime/email.mjs +573 -0
  135. package/dist/runtime/env-helpers.d.mts +2 -2
  136. package/dist/runtime/env-helpers.mjs +5 -42
  137. package/dist/runtime/env-public-client.d.mts +10 -11
  138. package/dist/runtime/env-public-client.mjs +1 -1
  139. package/dist/runtime/env-public.d.mts +2 -2
  140. package/dist/runtime/env-public.mjs +104 -49
  141. package/dist/runtime/env.d.mts +19 -18
  142. package/dist/runtime/env.mjs +15 -2
  143. package/dist/runtime/fetch-stream.d.mts +20 -21
  144. package/dist/runtime/fetch.d.mts +15 -16
  145. package/dist/runtime/handler.d.mts +1 -1
  146. package/dist/runtime/isr.d.mts +21 -22
  147. package/dist/runtime/isr.mjs +26 -8
  148. package/dist/runtime/kv.d.mts +9 -10
  149. package/dist/runtime/live-client.d.mts +5 -7
  150. package/dist/runtime/live-client.mjs +9 -7
  151. package/dist/runtime/live-server.d.mts +4 -5
  152. package/dist/runtime/live.d.mts +22 -24
  153. package/dist/runtime/live.mjs +1 -1
  154. package/dist/runtime/log.d.mts +16 -17
  155. package/dist/runtime/migration-handler-mysql.d.mts +4 -0
  156. package/dist/runtime/migration-handler-mysql.mjs +81 -0
  157. package/dist/runtime/migration-handler-pg.d.mts +2 -4
  158. package/dist/runtime/migration-handler.d.mts +5 -6
  159. package/dist/runtime/migration-handler.mjs +4 -3
  160. package/dist/runtime/queues.d.mts +3 -4
  161. package/dist/runtime/queues.mjs +2 -1
  162. package/dist/runtime/remote/binding-handler.d.mts +10 -12
  163. package/dist/runtime/remote/binding-handler.mjs +24 -3
  164. package/dist/runtime/remote/index.d.mts +5 -6
  165. package/dist/runtime/remote/index.mjs +21 -18
  166. package/dist/runtime/response.d.mts +10 -11
  167. package/dist/runtime/sandbox.d.mts +56 -55
  168. package/dist/runtime/sandbox.mjs +57 -49
  169. package/dist/runtime/schema-mysql.d.mts +1 -0
  170. package/dist/runtime/schema-mysql.mjs +2 -0
  171. package/dist/runtime/seed.d.mts +14 -9
  172. package/dist/runtime/sse-client.d.mts +6 -7
  173. package/dist/runtime/sse.d.mts +11 -12
  174. package/dist/runtime/storage.d.mts +3 -4
  175. package/dist/runtime/validator.d.mts +1 -1
  176. package/dist/runtime/ws-server.d.mts +12 -12
  177. package/dist/runtime/ws-server.mjs +32 -4
  178. package/dist/runtime/ws.d.mts +19 -21
  179. package/dist/{scan-DYXkrasO.mjs → scan-BMH4rzlv.mjs} +53 -31
  180. package/dist/{scan-DEwlM_Xy.mjs → scan-CpK-57ug.mjs} +9 -5
  181. package/dist/{secret-Dt32J6RI.mjs → secret-BqTxGqki.mjs} +62 -5
  182. package/dist/{skills-CLjN0uUO.mjs → skills-Q46GZMO-.mjs} +6 -4
  183. package/dist/{standard-schema-DJ0HW7QP.d.mts → standard-schema-Fo_vCAZh.d.mts} +6 -6
  184. package/dist/{subcommand-prompt-BzV8iQZo.mjs → subcommand-prompt-WfySCQ7S.mjs} +67 -48
  185. package/dist/sveltekit.d.mts +12 -11
  186. package/dist/sveltekit.mjs +1 -1
  187. package/dist/types-BAp5AEBU.d.mts +79 -0
  188. package/dist/types-CKWnYgfy.d.mts +1 -0
  189. package/dist/{validate-Cw_RLeTj.mjs → validate-Bihr8WBi.mjs} +3 -3
  190. package/dist/wrangler--imS8n0d.mjs +1796 -0
  191. package/dist/{yarn-pnp-DJn3SAHF.mjs → yarn-pnp-DxSInkzL.mjs} +1 -1
  192. package/package.json +79 -65
  193. package/schema.json +35 -3
  194. package/skills/migrate-vite-cloudflare-to-void/SKILL.md +1 -1
  195. package/skills/void/SKILL.md +59 -2
  196. package/skills/void/docs/guide/ai.md +32 -14
  197. package/skills/void/docs/guide/app-types.md +6 -6
  198. package/skills/void/docs/guide/auth.md +14 -16
  199. package/skills/void/docs/guide/database/d1.md +6 -0
  200. package/skills/void/docs/guide/database/mysql.md +60 -0
  201. package/skills/void/docs/guide/database/postgresql.md +14 -9
  202. package/skills/void/docs/guide/database.md +39 -26
  203. package/skills/void/docs/guide/deployment.md +163 -22
  204. package/skills/void/docs/guide/durable-state.md +140 -0
  205. package/skills/void/docs/guide/edge/headers.md +5 -5
  206. package/skills/void/docs/guide/edge/prerendering.md +2 -0
  207. package/skills/void/docs/guide/edge/revalidation.md +21 -6
  208. package/skills/void/docs/guide/edge/rewrites.md +18 -14
  209. package/skills/void/docs/guide/edge/static-assets.md +23 -8
  210. package/skills/void/docs/guide/email.md +609 -0
  211. package/skills/void/docs/guide/env-migration.md +109 -0
  212. package/skills/void/docs/guide/env-vars.md +70 -248
  213. package/skills/void/docs/guide/index.md +15 -17
  214. package/skills/void/docs/guide/jobs.md +8 -5
  215. package/skills/void/docs/guide/live.md +7 -15
  216. package/skills/void/docs/guide/pages-routing/actions-and-forms.md +8 -4
  217. package/skills/void/docs/guide/pages-routing/islands.md +3 -3
  218. package/skills/void/docs/guide/pages-routing/loaders.md +6 -4
  219. package/skills/void/docs/guide/pages-routing/overview.md +7 -7
  220. package/skills/void/docs/guide/platform-administration.md +212 -0
  221. package/skills/void/docs/guide/platform-development.md +235 -0
  222. package/skills/void/docs/guide/queues.md +10 -10
  223. package/skills/void/docs/guide/quickstart.md +46 -67
  224. package/skills/void/docs/guide/remote-dev.md +8 -6
  225. package/skills/void/docs/guide/sandboxes.md +33 -16
  226. package/skills/void/docs/guide/self-hosted-platform.md +553 -0
  227. package/skills/void/docs/guide/server-routing.md +25 -5
  228. package/skills/void/docs/guide/sse.md +4 -4
  229. package/skills/void/docs/guide/ssg.md +5 -3
  230. package/skills/void/docs/guide/storage.md +2 -2
  231. package/skills/void/docs/guide/websockets.md +18 -7
  232. package/skills/void/docs/index.md +3 -3
  233. package/skills/void/docs/integrations/agents.md +6 -64
  234. package/skills/void/docs/integrations/cloudflare.md +165 -146
  235. package/skills/void/docs/integrations/frameworks/analog.md +4 -4
  236. package/skills/void/docs/integrations/frameworks/astro.md +5 -5
  237. package/skills/void/docs/integrations/frameworks/nuxt.md +5 -5
  238. package/skills/void/docs/integrations/frameworks/overview.md +3 -3
  239. package/skills/void/docs/integrations/frameworks/react-router.md +3 -3
  240. package/skills/void/docs/integrations/frameworks/sveltekit.md +3 -3
  241. package/skills/void/docs/integrations/frameworks/tanstack-start.md +2 -2
  242. package/skills/void/docs/integrations/nodejs-bun-deno.md +11 -4
  243. package/skills/void/docs/reference/api.md +42 -6
  244. package/skills/void/docs/reference/cli.md +637 -159
  245. package/skills/void/docs/reference/config.md +80 -25
  246. package/skills/void/docs/reference/resource-inference.md +13 -9
  247. package/skills/void/docs/reference/structure.md +10 -11
  248. package/AGENT_PROMPT.md +0 -19
  249. package/dist/cf-access-Bqw81xAf.mjs +0 -22
  250. package/dist/env-CZy5MorI.mjs +0 -299
  251. package/dist/env-helpers-z4stu8uc.d.mts +0 -52
  252. package/dist/env-mask-Dd47NbR6.mjs +0 -90
  253. package/dist/env-public-BfiLcMBk.d.mts +0 -140
  254. package/dist/link-CdGHSIy-.mjs +0 -45
  255. package/dist/mcp-DoM3_nhd.mjs +0 -377
  256. package/dist/project-paths-GpziKeQQ.d.mts +0 -25
  257. package/dist/providers-BNKRacMr.d.mts +0 -7
  258. package/dist/proxy-D-3_D-Gl.mjs +0 -5
  259. package/dist/rollback-CkvTFXx5.mjs +0 -90
  260. package/dist/runtime/isr-cache.d.mts +0 -207
  261. package/dist/runtime/isr-cache.mjs +0 -523
  262. package/dist/types-lLjNE9Qp.d.mts +0 -51
  263. package/getting-started-prompt.txt +0 -28
  264. package/skills/void/command/void.md +0 -7
  265. package/skills/void/docs/integrations/auth-providers.md +0 -0
  266. package/skills/void/docs/integrations/payment-processors.md +0 -0
  267. package/skills/void/docs/node_modules/@iconify/vue/README.md +0 -408
  268. package/skills/void/docs/node_modules/@iconify/vue/offline/readme.md +0 -5
  269. package/skills/void/docs/node_modules/@voidzero-dev/vitepress-theme/README.md +0 -103
  270. package/skills/void/docs/node_modules/oxc-minify/README.md +0 -78
  271. package/skills/void/docs/node_modules/reka-ui/README.md +0 -80
  272. package/skills/void/docs/node_modules/vitepress/README.md +0 -28
  273. package/skills/void/docs/node_modules/vitepress/template/api-examples.md +0 -49
  274. package/skills/void/docs/node_modules/vitepress/template/index.md +0 -28
  275. package/skills/void/docs/node_modules/vitepress/template/markdown-examples.md +0 -85
  276. package/skills/void/docs/node_modules/vitepress-plugin-group-icons/README.md +0 -101
  277. package/skills/void/docs/node_modules/void/AGENT_PROMPT.md +0 -19
  278. package/skills/void/docs/node_modules/void/CLAUDE.md +0 -219
  279. package/skills/void/docs/node_modules/void/README.md +0 -90
  280. package/skills/void/docs/node_modules/void/node_modules/@clack/prompts/CHANGELOG.md +0 -685
  281. package/skills/void/docs/node_modules/void/node_modules/@clack/prompts/README.md +0 -396
  282. package/skills/void/docs/node_modules/void/node_modules/@cloudflare/sandbox/README.md +0 -219
  283. package/skills/void/docs/node_modules/void/node_modules/@cloudflare/vite-plugin/README.md +0 -37
  284. package/skills/void/docs/node_modules/void/node_modules/@cloudflare/workers-types/README.md +0 -135
  285. package/skills/void/docs/node_modules/void/node_modules/@electric-sql/pglite/README.md +0 -189
  286. package/skills/void/docs/node_modules/void/node_modules/@hono/oauth-providers/CHANGELOG.md +0 -143
  287. package/skills/void/docs/node_modules/void/node_modules/@hono/oauth-providers/README.md +0 -1272
  288. package/skills/void/docs/node_modules/void/node_modules/@napi-rs/keyring/README.md +0 -19
  289. package/skills/void/docs/node_modules/void/node_modules/@types/better-sqlite3/README.md +0 -15
  290. package/skills/void/docs/node_modules/void/node_modules/@types/node/README.md +0 -15
  291. package/skills/void/docs/node_modules/void/node_modules/@types/pg/README.md +0 -15
  292. package/skills/void/docs/node_modules/void/node_modules/@types/proper-lockfile/README.md +0 -51
  293. package/skills/void/docs/node_modules/void/node_modules/@typescript/native-preview/README.md +0 -22
  294. package/skills/void/docs/node_modules/void/node_modules/@typescript/native-preview/vendor/vscode-jsonrpc/README.md +0 -69
  295. package/skills/void/docs/node_modules/void/node_modules/@void/md/README.md +0 -153
  296. package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/@shikijs/engine-javascript/README.md +0 -9
  297. package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/@shikijs/transformers/README.md +0 -9
  298. package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/@types/node/README.md +0 -15
  299. package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/gray-matter/CHANGELOG.md +0 -24
  300. package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/gray-matter/README.md +0 -565
  301. package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/markdown-exit/README.md +0 -127
  302. package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/markdown-it-anchor/README.md +0 -600
  303. package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/markdown-it-attrs/README.md +0 -386
  304. package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/markdown-it-container/README.md +0 -95
  305. package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/markdown-it-emoji/README.md +0 -101
  306. package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/markdown-it-footnote/README.md +0 -135
  307. package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/pathslash/README.md +0 -64
  308. package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/shiki/README.md +0 -15
  309. package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/tinyglobby/README.md +0 -25
  310. package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/AGENTS.md +0 -16
  311. package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/README.md +0 -220
  312. package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/config/build.md +0 -21
  313. package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/config/check.md +0 -35
  314. package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/config/create.md +0 -70
  315. package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/config/fmt.md +0 -20
  316. package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/config/index.md +0 -35
  317. package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/config/lint.md +0 -26
  318. package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/config/pack.md +0 -17
  319. package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/config/run.md +0 -364
  320. package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/config/staged.md +0 -15
  321. package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/config/test.md +0 -18
  322. package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/guide/automatic-data-tracking.md +0 -145
  323. package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/guide/build.md +0 -40
  324. package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/guide/cache.md +0 -107
  325. package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/guide/check.md +0 -60
  326. package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/guide/ci.md +0 -62
  327. package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/guide/commit-hooks.md +0 -60
  328. package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/guide/create.md +0 -341
  329. package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/guide/dev.md +0 -24
  330. package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/guide/docker.md +0 -175
  331. package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/guide/env.md +0 -167
  332. package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/guide/fmt.md +0 -41
  333. package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/guide/github-actions-cache.md +0 -165
  334. package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/guide/ide-integration.md +0 -101
  335. package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/guide/implode.md +0 -23
  336. package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/guide/index.md +0 -134
  337. package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/guide/install.md +0 -199
  338. package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/guide/lint.md +0 -50
  339. package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/guide/migrate-rules.md +0 -347
  340. package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/guide/migrate.md +0 -197
  341. package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/guide/monorepo.md +0 -176
  342. package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/guide/pack.md +0 -69
  343. package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/guide/run.md +0 -356
  344. package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/guide/test.md +0 -35
  345. package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/guide/troubleshooting.md +0 -108
  346. package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/guide/upgrade.md +0 -101
  347. package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/guide/vpx.md +0 -66
  348. package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/guide/why.md +0 -39
  349. package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/index.md +0 -12
  350. package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/team.md +0 -35
  351. package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/templates/generator/README.md +0 -35
  352. package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/templates/monorepo/README.md +0 -29
  353. package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vue/README.md +0 -58
  354. package/skills/void/docs/node_modules/void/node_modules/arktype/README.md +0 -165
  355. package/skills/void/docs/node_modules/void/node_modules/better-auth/LICENSE.md +0 -20
  356. package/skills/void/docs/node_modules/void/node_modules/better-auth/README.md +0 -32
  357. package/skills/void/docs/node_modules/void/node_modules/better-sqlite3/README.md +0 -99
  358. package/skills/void/docs/node_modules/void/node_modules/blake3-jit/README.md +0 -108
  359. package/skills/void/docs/node_modules/void/node_modules/drizzle-arktype/README.md +0 -51
  360. package/skills/void/docs/node_modules/void/node_modules/drizzle-kit/README.md +0 -79
  361. package/skills/void/docs/node_modules/void/node_modules/drizzle-orm/README.md +0 -44
  362. package/skills/void/docs/node_modules/void/node_modules/drizzle-valibot/README.md +0 -51
  363. package/skills/void/docs/node_modules/void/node_modules/drizzle-zod/README.md +0 -65
  364. package/skills/void/docs/node_modules/void/node_modules/es-module-lexer/README.md +0 -403
  365. package/skills/void/docs/node_modules/void/node_modules/estree-walker/README.md +0 -48
  366. package/skills/void/docs/node_modules/void/node_modules/hono/README.md +0 -85
  367. package/skills/void/docs/node_modules/void/node_modules/ignore/README.md +0 -452
  368. package/skills/void/docs/node_modules/void/node_modules/jsonc-parser/CHANGELOG.md +0 -76
  369. package/skills/void/docs/node_modules/void/node_modules/jsonc-parser/LICENSE.md +0 -21
  370. package/skills/void/docs/node_modules/void/node_modules/jsonc-parser/README.md +0 -364
  371. package/skills/void/docs/node_modules/void/node_modules/jsonc-parser/SECURITY.md +0 -41
  372. package/skills/void/docs/node_modules/void/node_modules/magic-string/README.md +0 -325
  373. package/skills/void/docs/node_modules/void/node_modules/ofetch/README.md +0 -398
  374. package/skills/void/docs/node_modules/void/node_modules/pathslash/README.md +0 -64
  375. package/skills/void/docs/node_modules/void/node_modules/pg/README.md +0 -96
  376. package/skills/void/docs/node_modules/void/node_modules/pglite-server/README.md +0 -135
  377. package/skills/void/docs/node_modules/void/node_modules/picocolors/README.md +0 -21
  378. package/skills/void/docs/node_modules/void/node_modules/proper-lockfile/CHANGELOG.md +0 -108
  379. package/skills/void/docs/node_modules/void/node_modules/proper-lockfile/README.md +0 -183
  380. package/skills/void/docs/node_modules/void/node_modules/tinyglobby/README.md +0 -25
  381. package/skills/void/docs/node_modules/void/node_modules/valibot/LICENSE.md +0 -9
  382. package/skills/void/docs/node_modules/void/node_modules/valibot/README.md +0 -94
  383. package/skills/void/docs/node_modules/void/node_modules/vite-plus/AGENTS.md +0 -16
  384. package/skills/void/docs/node_modules/void/node_modules/vite-plus/README.md +0 -220
  385. package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/config/build.md +0 -21
  386. package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/config/check.md +0 -35
  387. package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/config/create.md +0 -70
  388. package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/config/fmt.md +0 -20
  389. package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/config/index.md +0 -35
  390. package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/config/lint.md +0 -26
  391. package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/config/pack.md +0 -17
  392. package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/config/run.md +0 -364
  393. package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/config/staged.md +0 -15
  394. package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/config/test.md +0 -18
  395. package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/guide/automatic-data-tracking.md +0 -145
  396. package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/guide/build.md +0 -40
  397. package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/guide/cache.md +0 -107
  398. package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/guide/check.md +0 -60
  399. package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/guide/ci.md +0 -62
  400. package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/guide/commit-hooks.md +0 -60
  401. package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/guide/create.md +0 -341
  402. package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/guide/dev.md +0 -24
  403. package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/guide/docker.md +0 -175
  404. package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/guide/env.md +0 -167
  405. package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/guide/fmt.md +0 -41
  406. package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/guide/github-actions-cache.md +0 -165
  407. package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/guide/ide-integration.md +0 -101
  408. package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/guide/implode.md +0 -23
  409. package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/guide/index.md +0 -134
  410. package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/guide/install.md +0 -199
  411. package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/guide/lint.md +0 -50
  412. package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/guide/migrate-rules.md +0 -347
  413. package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/guide/migrate.md +0 -197
  414. package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/guide/monorepo.md +0 -176
  415. package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/guide/pack.md +0 -69
  416. package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/guide/run.md +0 -356
  417. package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/guide/test.md +0 -35
  418. package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/guide/troubleshooting.md +0 -108
  419. package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/guide/upgrade.md +0 -101
  420. package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/guide/vpx.md +0 -66
  421. package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/guide/why.md +0 -39
  422. package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/index.md +0 -12
  423. package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/team.md +0 -35
  424. package/skills/void/docs/node_modules/void/node_modules/vite-plus/templates/generator/README.md +0 -35
  425. package/skills/void/docs/node_modules/void/node_modules/vite-plus/templates/monorepo/README.md +0 -29
  426. package/skills/void/docs/node_modules/void/node_modules/wrangler/README.md +0 -63
  427. package/skills/void/docs/node_modules/void/node_modules/zod/README.md +0 -191
  428. package/skills/void/docs/node_modules/void/skills/migrate-vite-cloudflare-to-void/SKILL.md +0 -175
  429. package/skills/void/docs/node_modules/void/skills/void/SKILL.md +0 -76
  430. package/skills/void/docs/node_modules/void/skills/void/command/void.md +0 -7
  431. package/skills/void/docs/node_modules/void/test/e2e/README.md +0 -85
@@ -1,523 +0,0 @@
1
- //#region src/runtime/isr-cache.ts
2
- /**
3
- * Build the normalized path segment for an ISR-cached page.
4
- * Root path `/` maps to `__index__` to avoid trailing-slash ambiguity.
5
- */
6
- function normalizeIsrPath(pathname) {
7
- let normalized = pathname;
8
- if (normalized === "/") normalized = "__index__";
9
- else {
10
- normalized = normalized.startsWith("/") ? normalized.slice(1) : normalized;
11
- if (normalized.endsWith("/")) normalized = normalized.slice(0, -1);
12
- }
13
- return normalized;
14
- }
15
- /**
16
- * Inverse of `normalizeIsrPath`: turn a normalized segment back into a
17
- * pathname starting with `/`.
18
- */
19
- function denormalizeIsrPath(normalized) {
20
- return normalized === "__index__" ? "/" : `/${normalized}`;
21
- }
22
- /**
23
- * Canonicalize an inbound pathname to the form used inside edge cache URLs.
24
- * Equivalent to `denormalizeIsrPath(normalizeIsrPath(pathname))` — strips any
25
- * trailing slash except for root.
26
- */
27
- function canonicalIsrPathname(pathname) {
28
- return denormalizeIsrPath(normalizeIsrPath(pathname));
29
- }
30
- /**
31
- * KV cache key for an ISR-cached page. Deployment- AND host-scoped: cached HTML
32
- * cannot outlive the hashed assets of the deployment that produced it (a fresh
33
- * `wrangler deploy` mints a new deployment id → cold cache), and one host's
34
- * cached content never bleeds into another host served by the same worker
35
- * (custom domain + workers.dev, apex + www, etc.).
36
- */
37
- function isrKey(deploymentId, host, pathname) {
38
- return `void-isr/${deploymentId}/${host}/${normalizeIsrPath(pathname)}`;
39
- }
40
- /**
41
- * Host-registry key. Every host that has written cached content registers itself
42
- * under `void-isr-hosts/<id>/<host>` (value `''`) so a purge with no request host
43
- * (cron / queue `revalidate({ paths })`) can enumerate the hosts to purge.
44
- * Scoped by deployment id so registrations from an old deploy do not leak.
45
- */
46
- function hostRegistryKey(deploymentId, host) {
47
- return `void-isr-hosts/${deploymentId}/${host}`;
48
- }
49
- /**
50
- * Edge-cache (`caches.default`) key for the HTML variant. The public URL stays
51
- * clean; this internal key carries the deployment id so a new deploy never
52
- * reads HTML produced by an older deploy.
53
- */
54
- function htmlEdgeKey(host, pathname, id) {
55
- return `https://${host}${canonicalIsrPathname(pathname)}?__void_isr=${id}`;
56
- }
57
- /**
58
- * Edge-cache key for the JSON (pages-protocol) variant. Separated from HTML by
59
- * the `&__void=json` marker.
60
- */
61
- function jsonEdgeKey(host, pathname, id) {
62
- return `${htmlEdgeKey(host, pathname, id)}&__void=json`;
63
- }
64
- const MAX_CACHE = 256;
65
- const literalRegexCache = /* @__PURE__ */ new Map();
66
- /**
67
- * Match a pattern against a pathname using LITERAL semantics — no named
68
- * captures. Two wildcards are special: `*` matches any characters INCLUDING `/`
69
- * (a splat), and a WHOLE-segment `:name` (preceded by `/` or start, followed by
70
- * `/` or end) matches exactly ONE path segment (`[^/]+`). A mid-segment literal
71
- * `:` (e.g. `/api/v1:health`) is left alone. This is a strict SUPERSET of the
72
- * old `*`-only matcher (old `*`-only manifests match identically). Malformed
73
- * patterns yield `false` rather than throwing.
74
- */
75
- function matchLiteralPattern(pattern, pathname) {
76
- let regex = literalRegexCache.get(pattern);
77
- if (regex) {
78
- literalRegexCache.delete(pattern);
79
- literalRegexCache.set(pattern, regex);
80
- } else {
81
- try {
82
- const escaped = pattern.replace(/(^|\/):[A-Za-z0-9_]+(?=\/|$)/g, "$1").replace(/[.+?^${}()|[\]\\]/g, "\\$&").replaceAll("*", ".*").replaceAll("", "[^/]+");
83
- regex = new RegExp(`^${escaped}$`);
84
- } catch {
85
- return false;
86
- }
87
- if (literalRegexCache.size >= MAX_CACHE) {
88
- const first = literalRegexCache.keys().next();
89
- if (!first.done) literalRegexCache.delete(first.value);
90
- }
91
- literalRegexCache.set(pattern, regex);
92
- }
93
- try {
94
- return regex.test(pathname);
95
- } catch {
96
- return false;
97
- }
98
- }
99
- /**
100
- * Pack response headers + body into a single ArrayBuffer.
101
- * Format: [4 bytes uint32 LE header length][UTF-8 header JSON][raw body]
102
- */
103
- function packIsrValue(headers, body) {
104
- const headerJson = new TextEncoder().encode(JSON.stringify(headers));
105
- const buffer = new ArrayBuffer(4 + headerJson.byteLength + body.byteLength);
106
- new DataView(buffer).setUint32(0, headerJson.byteLength, true);
107
- new Uint8Array(buffer, 4, headerJson.byteLength).set(headerJson);
108
- new Uint8Array(buffer, 4 + headerJson.byteLength).set(new Uint8Array(body));
109
- return buffer;
110
- }
111
- /**
112
- * Unpack headers + body from a packed ArrayBuffer.
113
- * Returns null if the buffer is too small or malformed.
114
- */
115
- function unpackIsrValue(buffer) {
116
- if (buffer.byteLength < 4) return null;
117
- const headerLen = new DataView(buffer).getUint32(0, true);
118
- if (buffer.byteLength < 4 + headerLen) return null;
119
- try {
120
- const headerBytes = new Uint8Array(buffer, 4, headerLen);
121
- return {
122
- headers: JSON.parse(new TextDecoder().decode(headerBytes)),
123
- body: buffer.slice(4 + headerLen)
124
- };
125
- } catch {
126
- return null;
127
- }
128
- }
129
- /**
130
- * Read an ISR cache entry from KV. Returns null on cache miss, malformed
131
- * metadata, or ANY KV error (fail-open → caller renders live). The KV key is
132
- * deployment-scoped via `env.__VOID_ISR_DEPLOYMENT_ID` (see module header) and
133
- * host-scoped via `host` so one host never reads another host's cached bytes.
134
- */
135
- async function readIsrCache(env, host, pathname) {
136
- const kv = env.ISR_CACHE;
137
- if (!kv) return null;
138
- const key = isrKey(env.__VOID_ISR_DEPLOYMENT_ID ?? "", host, pathname);
139
- let value;
140
- let metadata;
141
- try {
142
- const result = await kv.getWithMetadata(key, "arrayBuffer");
143
- value = result.value;
144
- metadata = result.metadata;
145
- } catch {
146
- return null;
147
- }
148
- if (!value || !metadata) return null;
149
- const unpacked = unpackIsrValue(value);
150
- if (!unpacked) return null;
151
- if (!Number.isInteger(metadata.s) || metadata.s < 200 || metadata.s > 599) return null;
152
- if (!Number.isFinite(metadata.c) || metadata.c <= 0 || !Number.isFinite(metadata.t) || metadata.t <= 0) return null;
153
- try {
154
- new Headers(unpacked.headers);
155
- } catch {
156
- return null;
157
- }
158
- return {
159
- body: new ReadableStream({ start(controller) {
160
- controller.enqueue(new Uint8Array(unpacked.body));
161
- controller.close();
162
- } }),
163
- status: metadata.s,
164
- headers: unpacked.headers,
165
- createdAt: metadata.c,
166
- ttl: metadata.t
167
- };
168
- }
169
- /**
170
- * Write an ISR cache entry to KV. The `response.clone()` is taken SYNCHRONOUSLY
171
- * before any `await` so a caller that consumes `response.body` for the client
172
- * response (after kicking us off via `ctx.waitUntil`) cannot race the body
173
- * away. Any KV error is swallowed (fail-open on the write path).
174
- */
175
- async function writeIsrCache(env, host, pathname, response, ttl) {
176
- const kv = env.ISR_CACHE;
177
- if (!kv) return;
178
- const responseClone = response.clone();
179
- const headers = serializeHeaders(responseClone);
180
- const status = responseClone.status;
181
- const id = env.__VOID_ISR_DEPLOYMENT_ID ?? "";
182
- try {
183
- const packed = packIsrValue(headers, await responseClone.arrayBuffer());
184
- await kv.put(isrKey(id, host, pathname), packed, { metadata: {
185
- s: status,
186
- c: Date.now(),
187
- t: ttl
188
- } });
189
- } catch {}
190
- await registerIsrHost(kv, id, host);
191
- }
192
- /**
193
- * In-isolate guard: `${id}/${host}` values whose host-registry key this isolate
194
- * has already written (or attempted). Bounds host registration to ~one KV write
195
- * per (isolate, deployment, host) instead of one per page write.
196
- */
197
- const registeredHosts = /* @__PURE__ */ new Set();
198
- async function registerIsrHost(kv, deploymentId, host) {
199
- const guardKey = `${deploymentId}/${host}`;
200
- if (registeredHosts.has(guardKey)) return;
201
- registeredHosts.add(guardKey);
202
- try {
203
- await kv.put(hostRegistryKey(deploymentId, host), "");
204
- } catch {
205
- registeredHosts.delete(guardKey);
206
- }
207
- }
208
- /**
209
- * List every host that has registered cached content for a deployment. Used by
210
- * the on-demand `revalidate({ paths })` purge when there is no request host
211
- * (cron / queue). Fail-open: a registry read error yields the hosts collected so
212
- * far (or none) rather than throwing — degraded purge coverage, never a 500.
213
- */
214
- async function listIsrHosts(kv, deploymentId) {
215
- const prefix = `void-isr-hosts/${deploymentId}/`;
216
- const hosts = [];
217
- try {
218
- let cursor;
219
- do {
220
- const list = await kv.list({
221
- prefix,
222
- cursor
223
- });
224
- for (const key of list.keys) hosts.push(key.name.slice(prefix.length));
225
- cursor = list.list_complete ? void 0 : list.cursor;
226
- } while (cursor);
227
- } catch {}
228
- return hosts;
229
- }
230
- /**
231
- * Delete an ISR cache entry from KV. Used when a worker permanently opts out
232
- * via `x-revalidate: 0`. Any KV error is swallowed (fail-open).
233
- */
234
- async function deleteIsrCache(env, host, pathname) {
235
- const kv = env.ISR_CACHE;
236
- if (!kv) return;
237
- try {
238
- await kv.delete(isrKey(env.__VOID_ISR_DEPLOYMENT_ID ?? "", host, pathname));
239
- } catch {}
240
- }
241
- /** Check if a cached entry is stale. */
242
- function isStale(entry) {
243
- return Date.now() - entry.createdAt > entry.ttl * 1e3;
244
- }
245
- /** Build a Response from an ISR cache entry. */
246
- function isrCacheResponse(entry, stale) {
247
- const headers = new Headers(entry.headers);
248
- headers.set("x-isr-cache", stale ? "STALE" : "HIT");
249
- if (stale) {
250
- const staleTtl = Math.min(10, entry.ttl);
251
- headers.set("Cache-Control", `public, s-maxage=${staleTtl}, max-age=0, must-revalidate`);
252
- } else {
253
- const remainingSeconds = Math.max(0, Math.floor((entry.createdAt + entry.ttl * 1e3 - Date.now()) / 1e3));
254
- headers.set("Cache-Control", `public, s-maxage=${remainingSeconds}, max-age=0, must-revalidate`);
255
- }
256
- return new Response(entry.body, {
257
- status: entry.status,
258
- headers
259
- });
260
- }
261
- /**
262
- * Read the `x-revalidate` header from a worker response.
263
- * Returns the override TTL, or the default. A value of 0 means "do not cache".
264
- */
265
- function resolveRevalidateTtl(response, defaultTtl) {
266
- const header = response.headers.get("x-revalidate");
267
- if (header === null) return defaultTtl;
268
- const value = parseInt(header, 10);
269
- if (isNaN(value) || value < 0) return defaultTtl;
270
- return value;
271
- }
272
- function acceptsEventStream(request) {
273
- return request.headers.get("Accept")?.toLowerCase().split(",").some((part) => part.split(";", 1)[0]?.trim() === "text/event-stream") ?? false;
274
- }
275
- /**
276
- * ISR should be bypassed for requests with credentials and EventSource
277
- * requests. Pages protocol navigation (X-VoidPages) uses a separate JSON edge
278
- * cache.
279
- */
280
- function shouldBypassIsr(request) {
281
- return request.headers.has("Cookie") || request.headers.has("Authorization") || acceptsEventStream(request);
282
- }
283
- /**
284
- * Resolve the ISR TTL for a given pathname.
285
- * Accepts the `revalidate` config (number, object, or undefined). For the
286
- * object form, the first matching pattern wins.
287
- */
288
- function resolvePathTtl(revalidate, pathname) {
289
- if (revalidate == null) return 0;
290
- if (typeof revalidate === "number") return revalidate;
291
- for (const [pattern, ttl] of Object.entries(revalidate)) if (matchLiteralPattern(pattern, pathname)) return ttl;
292
- return 0;
293
- }
294
- /** Extract response headers as a plain object, skipping ISR-managed headers. */
295
- const SKIP_HEADERS = /* @__PURE__ */ new Set([
296
- "cache-control",
297
- "x-isr-cache",
298
- "x-void-page-data",
299
- "set-cookie"
300
- ]);
301
- function serializeHeaders(response) {
302
- const result = {};
303
- response.headers.forEach((value, key) => {
304
- if (!SKIP_HEADERS.has(key.toLowerCase())) result[key] = value;
305
- });
306
- return result;
307
- }
308
- const PAGE_DATA_SCRIPT_RE = /<script\b[^>]*\bid=(["'])__VOID_PAGE_DATA__\1[^>]*>([\s\S]*?)<\/script>/i;
309
- function normalizePageDataForJsonCache(raw) {
310
- try {
311
- const parsed = JSON.parse(raw);
312
- if (parsed.deferred !== void 0 || parsed.deferredKeys !== void 0) return null;
313
- return raw;
314
- } catch {
315
- return null;
316
- }
317
- }
318
- function extractPageDataFromHtml(html) {
319
- const match = html.match(PAGE_DATA_SCRIPT_RE);
320
- if (!match) return null;
321
- return normalizePageDataForJsonCache(match[2]);
322
- }
323
- const CLIENT_REVALIDATE_CACHE_CONTROL = "public, max-age=0, must-revalidate";
324
- function clientRevalidateResponse(response) {
325
- const res = new Response(response.body, response);
326
- res.headers.set("Cache-Control", CLIENT_REVALIDATE_CACHE_CONTROL);
327
- return res;
328
- }
329
- function isEventStreamResponse(response) {
330
- return response.headers.get("content-type")?.toLowerCase().split(";", 1)[0]?.trim() === "text/event-stream";
331
- }
332
- function jsonCacheResponse(pageData, ttl, state) {
333
- return new Response(pageData, { headers: {
334
- "content-type": "application/json",
335
- "X-VoidPages": "true",
336
- Vary: "X-VoidPages",
337
- "Cache-Control": `public, s-maxage=${ttl}, max-age=0, must-revalidate`,
338
- "x-isr-cache": state
339
- } });
340
- }
341
- /**
342
- * Populate the JSON edge cache from a response's embedded page data (the
343
- * `x-void-page-data` header or the `__VOID_PAGE_DATA__` inline script). No-ops
344
- * when there is no extractable page data. Any cache error is swallowed
345
- * (fail-open) so this is always safe to fire inside `ctx.waitUntil`.
346
- */
347
- async function populateJsonEdgeCache(cache, cacheKey, response, ttl, state) {
348
- if (!cache) return;
349
- try {
350
- const fromHeader = response.headers.get("x-void-page-data");
351
- const pageData = fromHeader ? normalizePageDataForJsonCache(fromHeader) : extractPageDataFromHtml(await response.clone().text());
352
- if (!pageData) return;
353
- await cache.put(cacheKey, jsonCacheResponse(pageData, ttl, state));
354
- } catch {}
355
- }
356
- /**
357
- * The per-colo edge cache (`caches.default`), or `undefined` when the Cache API
358
- * is absent/degraded. Accessed through a cast because this package has both
359
- * `@types/node` and `@cloudflare/workers-types` in scope, and Node's ambient
360
- * `CacheStorage` (which lacks `.default`) otherwise shadows the Workers one on
361
- * the `caches` global.
362
- *
363
- * Non-throwing by contract: dereferencing `caches.default` can throw if the
364
- * Cache API is missing (e.g. a non-worker runtime) or degraded. We swallow that
365
- * here and return `undefined` so `handleIsr` never rejects before its fail-open
366
- * guards run — the serving invariant is a degraded cache must render live, never
367
- * 500. Every call site guards `undefined` (via `if (!cache)` or `cache?.`).
368
- */
369
- function edgeCache() {
370
- try {
371
- return caches.default;
372
- } catch {
373
- return;
374
- }
375
- }
376
- async function safeCachePut(cache, key, response) {
377
- if (!cache) return;
378
- try {
379
- await cache.put(key, response);
380
- } catch {}
381
- }
382
- async function safeCacheDelete(cache, key) {
383
- if (!cache) return;
384
- try {
385
- await cache.delete(key);
386
- } catch {}
387
- }
388
- /**
389
- * Build a new Request with the `X-VoidPages` header removed. Headers on an
390
- * existing Request are immutable, so we must clone into a fresh Request. ISR
391
- * only runs for GET, so there is no body to preserve.
392
- */
393
- function cloneWithoutVoidPages(request) {
394
- const headers = new Headers(request.headers);
395
- headers.delete("X-VoidPages");
396
- return new Request(request, { headers });
397
- }
398
- /**
399
- * Revalidate an ISR page in the background. Re-renders as HTML (X-VoidPages
400
- * stripped), writes fresh HTML to KV + HTML edge cache, and populates the JSON
401
- * edge cache from embedded page data. Errors are caught and logged — serve
402
- * stale, don't retry. `ttl === 0` means the worker permanently opted out:
403
- * delete the KV entry and both edge variants.
404
- */
405
- async function revalidateInBackground(env, request, host, pathname, defaultTtl, keys, render) {
406
- try {
407
- const response = await render(cloneWithoutVoidPages(request));
408
- if (isEventStreamResponse(response)) return;
409
- const ttl = resolveRevalidateTtl(response, defaultTtl);
410
- const cache = edgeCache();
411
- if (ttl > 0 && response.status === 200) {
412
- await writeIsrCache(env, host, pathname, response, ttl);
413
- const headers = new Headers(response.headers);
414
- headers.set("x-isr-cache", "HIT");
415
- headers.set("Cache-Control", `public, s-maxage=${ttl}, max-age=0, must-revalidate`);
416
- headers.delete("set-cookie");
417
- headers.delete("x-void-page-data");
418
- await safeCachePut(cache, keys.htmlKey, new Response(response.clone().body, {
419
- status: response.status,
420
- headers
421
- }));
422
- await populateJsonEdgeCache(cache, keys.jsonKey, response, ttl, "HIT");
423
- } else if (ttl === 0) {
424
- await deleteIsrCache(env, host, pathname);
425
- await safeCacheDelete(cache, keys.htmlKey);
426
- await safeCacheDelete(cache, keys.jsonKey);
427
- }
428
- } catch (err) {
429
- console.error("ISR revalidation failed:", err);
430
- }
431
- }
432
- /**
433
- * Run the ISR caching ladder for a request.
434
- *
435
- * Returns a cached/rendered `Response` when ISR applies, or `null` when the
436
- * caller should render live itself (request not ISR-eligible, or a read/hit
437
- * cache op failed open).
438
- *
439
- * Ladder:
440
- * - Bail (`null`) if not GET, a Range request, `shouldBypassIsr`, or the path
441
- * has no ISR TTL. Range requests bail BEFORE any cache read/write so they
442
- * render live (correct 206) and never touch the shared full-response entry.
443
- * - JSON (X-VoidPages) path: edge match → hit serves `clientRevalidateResponse`;
444
- * miss renders live JSON and returns it — the JSON path never writes the edge
445
- * cache. The JSON edge variant is warmed only as a side-effect of the HTML
446
- * render path (cold colo re-renders JSON).
447
- * - HTML path: L1 edge match → L2 KV. Hit serves `isrCacheResponse`
448
- * (stale hits also queue a background revalidation). Miss renders live and,
449
- * when cacheable, writes KV + JSON edge + HTML edge in the background.
450
- */
451
- async function handleIsr(request, env, ctx, options, render) {
452
- const { revalidate, deploymentId } = options;
453
- if (request.method !== "GET") return null;
454
- if (request.headers.has("range")) return null;
455
- if (shouldBypassIsr(request)) return null;
456
- const url = new URL(request.url);
457
- const pathname = url.pathname;
458
- const isrTtl = resolvePathTtl(revalidate, pathname);
459
- if (isrTtl <= 0) return null;
460
- env.__VOID_ISR_DEPLOYMENT_ID ??= deploymentId;
461
- const host = url.hostname;
462
- const cache = edgeCache();
463
- if (request.headers.has("X-VoidPages")) {
464
- const jsonKey = jsonEdgeKey(host, pathname, deploymentId);
465
- let jsonCached;
466
- try {
467
- jsonCached = await cache?.match(jsonKey);
468
- } catch {
469
- return null;
470
- }
471
- if (jsonCached) return clientRevalidateResponse(jsonCached);
472
- return render(request);
473
- }
474
- const htmlKey = htmlEdgeKey(host, pathname, deploymentId);
475
- const jsonKey = jsonEdgeKey(host, pathname, deploymentId);
476
- let edgeCached;
477
- try {
478
- edgeCached = await cache?.match(htmlKey);
479
- } catch {
480
- return null;
481
- }
482
- if (edgeCached) return clientRevalidateResponse(edgeCached);
483
- const cached = await readIsrCache(env, host, pathname);
484
- if (cached) try {
485
- const stale = isStale(cached);
486
- if (stale) ctx.waitUntil(revalidateInBackground(env, request, host, pathname, isrTtl, {
487
- htmlKey,
488
- jsonKey
489
- }, render));
490
- const cacheResponse = isrCacheResponse(cached, stale);
491
- ctx.waitUntil(safeCachePut(cache, htmlKey, cacheResponse.clone()));
492
- return clientRevalidateResponse(cacheResponse);
493
- } catch {
494
- return null;
495
- }
496
- const response = await render(request);
497
- if (isEventStreamResponse(response)) return response;
498
- const ttl = resolveRevalidateTtl(response, isrTtl);
499
- if (ttl > 0 && response.status === 200) {
500
- ctx.waitUntil(writeIsrCache(env, host, pathname, response, ttl));
501
- ctx.waitUntil(populateJsonEdgeCache(cache, jsonKey, response, ttl, "MISS"));
502
- const cacheHeaders = new Headers(response.headers);
503
- cacheHeaders.set("Cache-Control", `public, s-maxage=${ttl}, max-age=0, must-revalidate`);
504
- cacheHeaders.set("x-isr-cache", "MISS");
505
- cacheHeaders.delete("x-void-page-data");
506
- cacheHeaders.delete("set-cookie");
507
- const cacheResponse = new Response(response.clone().body, {
508
- status: response.status,
509
- headers: cacheHeaders
510
- });
511
- ctx.waitUntil(safeCachePut(cache, htmlKey, cacheResponse));
512
- const clientHeaders = new Headers(cacheHeaders);
513
- clientHeaders.set("Cache-Control", CLIENT_REVALIDATE_CACHE_CONTROL);
514
- for (const cookie of response.headers.getSetCookie()) clientHeaders.append("set-cookie", cookie);
515
- return new Response(response.body, {
516
- status: response.status,
517
- headers: clientHeaders
518
- });
519
- }
520
- return response;
521
- }
522
- //#endregion
523
- export { canonicalIsrPathname, clientRevalidateResponse, cloneWithoutVoidPages, deleteIsrCache, denormalizeIsrPath, extractPageDataFromHtml, handleIsr, hostRegistryKey, htmlEdgeKey, isEventStreamResponse, isStale, isrCacheResponse, isrKey, jsonEdgeKey, listIsrHosts, matchLiteralPattern, normalizeIsrPath, normalizePageDataForJsonCache, packIsrValue, populateJsonEdgeCache, readIsrCache, resolvePathTtl, resolveRevalidateTtl, serializeHeaders, shouldBypassIsr, unpackIsrValue, writeIsrCache };
@@ -1,51 +0,0 @@
1
- //#region src/pages/types.d.ts
2
- type ExplicitBoolean = true | false | undefined;
3
- type SsrMode = "auto" | "server" | "client";
4
- type PrerenderMode = "auto" | "force" | "disabled";
5
- type PageRenderMode = "server" | "client" | "island";
6
- type PageDefinition = {
7
- /** URL pattern, e.g. "/users/:id" */pattern: string; /** Route params, e.g. ["id"] */
8
- params: Array<string>; /** Whether this is a catch-all route */
9
- catchAll: boolean; /** Component file relative path, e.g. "users/[id].vue" */
10
- componentPath: string; /** Server handler file relative path, e.g. "users/[id].server.ts" */
11
- serverPath: string | null; /** HTTP methods exported by server handler */
12
- methods: Array<string>; /** Component ID used in page object, e.g. "users/[id]" */
13
- componentId: string; /** Edge caching revalidate TTL in seconds, from .server.ts export */
14
- revalidate?: number; /** Whether `export const prerender = true/false` is set in server handler */
15
- prerender?: ExplicitBoolean; /** Whether `export const ssr = true/false` is set in server handler */
16
- ssr?: ExplicitBoolean; /** Normalized SSR mode from the public `ssr` export */
17
- ssrMode: SsrMode; /** Normalized prerender mode from the public `prerender` export */
18
- prerenderMode: PrerenderMode; /** Normalized page render mode */
19
- renderMode: PageRenderMode; /** Whether this page should participate in prerender collection */
20
- shouldPrerender: boolean; /** Whether `export function getPrerenderPaths` is defined in server handler */
21
- hasGetPrerenderPaths?: boolean; /** Whether this is an island page (.island.tsx/.island.vue) */
22
- island?: boolean; /** Frontmatter metadata extracted from .md files (title, description) */
23
- metadata?: {
24
- title?: string;
25
- description?: string;
26
- }; /** Named layout selection: "name", "!name", false, or relative path */
27
- layout?: string | false;
28
- };
29
- type LayoutDefinition = {
30
- /** Directory path relative to pages/, e.g. "" (root) or "users" */directory: string; /** Layout file relative path, e.g. "layout.vue" or "users/layout.vue" */
31
- filePath: string; /** Whether this is an island layout (layout.island.tsx/.island.vue) */
32
- island?: boolean;
33
- };
34
- type NamedLayoutDefinition = {
35
- /** Layout name, e.g. "home", "post" */name: string; /** Directory containing _layouts/, e.g. "" (root) or "guide" */
36
- directory: string; /** File path relative to pages/, e.g. "_layouts/home.vue" */
37
- filePath: string; /** Whether this is an island layout */
38
- island?: boolean;
39
- };
40
- type PageScanResult = {
41
- pages: Array<PageDefinition>;
42
- layouts: Array<LayoutDefinition>;
43
- namedLayouts: Array<NamedLayoutDefinition>;
44
- };
45
- type DevCssAsset = {
46
- /** Vite client URL used to request the CSS module. */url: string; /** Vite dev style id used by the client to adopt/update SSR-inlined styles. */
47
- id?: string; /** CSS bytes returned by Vite's client environment transform with ?inline. */
48
- css: string;
49
- };
50
- //#endregion
51
- export { PageRenderMode as a, PageDefinition as i, LayoutDefinition as n, PageScanResult as o, NamedLayoutDefinition as r, DevCssAsset as t };
@@ -1,28 +0,0 @@
1
- Void is a fullstack Vite framework and deployment platform for Cloudflare.
2
- In an empty directory, set up a new app like this:
3
-
4
- npm install -D void
5
-
6
- Then run:
7
-
8
- npx void init
9
-
10
- In an empty directory, `void init` will add the matching Pages adapter and starter dependencies after you choose a scaffold toolchain and framework. Vite+ is the default toolchain. In an existing app, it configures Void in place by adding missing Vite scripts and creating or patching `vite.config.*` with `voidPlugin()`.
11
-
12
- During `void init`, choose Vite+ unless you specifically want plain Vite scripts, then choose a Pages framework (React, Vue, Svelte, or Solid). Choose D1 for a zero-config, fully managed default or PostgreSQL if you already have Postgres infrastructure or expect heavier writes and more complex queries.
13
-
14
- At the end of the interactive flow, `void init` can also log you in and link or create your Void project so your first deploy is just:
15
-
16
- void deploy
17
-
18
- To deploy to your OWN Cloudflare account instead of the Void platform, use `void deploy --backend cloudflare` (add `--provision` on the first deploy to create the D1/KV/R2/Queues/Hyperdrive resources your app needs). Pin an account first (`account_id` in `wrangler.jsonc` or `CLOUDFLARE_ACCOUNT_ID`) and keep real secrets in `wrangler secret put` — `.env` values ship as plaintext worker vars. v1 deploys full Void apps on the Cloudflare Workers target only (D1/KV/R2/Queues/Hyperdrive; auth and ISR on D1/SQLite); framework SSR of every kind (TanStack Start, React Router, vinext, SvelteKit, Nuxt, Analog, Astro), static/SPA/SSG apps (including output: "static"), WebSocket/Durable Object apps (*.ws.ts), a custom migrations_pattern, node/bun/deno targets, and PostgreSQL apps with auth all fail closed with guidance, and auth apps need checked-in migrations that produce the Better Auth schema. `--provision` is a single-operator, dev-machine step and is disabled in CI.
19
-
20
- Database workflow: define Drizzle tables in `db/schema.ts`, import `db` from `void/db` and tables from `@schema`. Use `void db push` to prototype (applies schema directly, no migration files). Use `void db generate` when ready to create production migration files in `db/migrations/`. `drizzle-orm` and `drizzle-kit` ship with void — no extra install needed. Scaffold new tables with `void gen model <name> [columns...]`.
21
-
22
- Routing extras: declare static redirects/rewrites/fallbacks in `void.json` under `routing.*`, or in a `public/_redirects` file. For dynamic rewrites, call `c.rewrite(path)` in a `defineMiddleware`.
23
-
24
- Logs: surface app-level errors via `import { logger } from "void/log"` and `logger.error(msg, fields?)` (also `.warn` / `.info`) so they appear under `void project logs --level error`. Errors only persisted to your own DB are invisible to Cloudflare Tail. Logs only exist where a worker ran — for 5xx generated by the edge router or on static/SPA projects, use `void project requests --status 5xx` instead.
25
-
26
- CI / fresh clones: run `void prepare` after install to generate `.void/routes.d.ts`, `.void/db.d.ts`, `.void/queues.d.ts`, `.void/env.d.ts`, and `.void/tsconfig.json` without booting Vite. `vite dev` / `vite build` populate these during normal app workflows.
27
-
28
- Now ask me what I want to build.
@@ -1,7 +0,0 @@
1
- # `/void` Command Flow
2
-
3
- 1. Open `SKILL.md`.
4
- 2. If no task/arguments are provided, run the brief app status check from `SKILL.md`.
5
- 3. If a task is provided, route to the smallest relevant set of `docs/*.md` files.
6
- 4. For CLI syntax and flags, always use `docs/cli.md`.
7
- 5. Execute, verify, and report concise next actions.
File without changes