void 0.20.3 → 0.21.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.
- package/README.md +2 -2
- package/dist/agents-gni4eqBu.mjs +111 -0
- package/dist/auth-3sGB0zJ1.mjs +22 -0
- package/dist/{auth-DPl6kck4.mjs → auth-B9_D6ygs.mjs} +6 -241
- package/dist/auth-CAw7zHqj.mjs +2 -0
- package/dist/auth-client-BWBT8HLp.mjs +6 -0
- package/dist/auth-client-Bawdj38n.d.mts +7 -0
- package/dist/auth-client-react-7GFffu8R.d.mts +7 -0
- package/dist/auth-client-react-CMLwT2xI.mjs +6 -0
- package/dist/auth-client-solid-DyTFL4cq.d.mts +7 -0
- package/dist/auth-client-solid-UoreJWZG.mjs +6 -0
- package/dist/auth-client-svelte-Cv_WvrRk.mjs +6 -0
- package/dist/auth-client-svelte-zetW0KIH.d.mts +7 -0
- package/dist/auth-client-vue-CFk7Xbv3.mjs +6 -0
- package/dist/auth-client-vue-bChShbQP.d.mts +7 -0
- package/dist/{auth-cmd-CzwquNiP.mjs → auth-cmd-MkBG2u1f.mjs} +5 -5
- package/dist/{auth-link-ElDTgF7j.mjs → auth-link-Devmv96E.mjs} +5 -5
- package/dist/{better-auth-shared-DSCeohOK.d.mts → better-auth-shared-BoVwA5Vm.d.mts} +1 -6
- package/dist/{better-auth-shared-CYw1T3k4.mjs → better-auth-shared-syGYYmnY.mjs} +1 -1
- package/dist/{build-cmd-BpJe6boP.mjs → build-cmd-DsBGwtfs.mjs} +6 -4
- package/dist/{cache-D98YTqeE.mjs → cache-BMw8eMyF.mjs} +6 -4
- package/dist/{cancel-deploy-CPbEQLMG.mjs → cancel-deploy-B3_s9NIN.mjs} +5 -3
- package/dist/cf-access-rAZxzMkL.mjs +181 -0
- package/dist/cf-build-output-CTdlo6Rt.mjs +520 -0
- package/dist/cli/cf-compat.d.mts +1 -0
- package/dist/cli/cf-compat.mjs +934 -0
- package/dist/cli/cli.mjs +60 -38
- package/dist/cli/env-schema-probe.mjs +3 -3
- package/dist/client-DAAivdid.mjs +2 -0
- package/dist/{client-BQBrZoCX.mjs → client-PdAJ-F0t.mjs} +6 -12
- package/dist/{cloudflare-auth-6M5llVPC.mjs → cloudflare-auth-BCmTc1X_.mjs} +13 -44
- package/dist/{cloudflare-cmd-4RPGN3KB.mjs → cloudflare-cmd-D6PrKn7o.mjs} +4 -7
- package/dist/{cloudflare-connect-t1UU5svD.mjs → cloudflare-connect-DloREDlc.mjs} +6 -6
- package/dist/cloudflare-operations-BHNJVDbN.mjs +2 -0
- package/dist/{cloudflare-operations-BzWnlC1_.mjs → cloudflare-operations-CPEdHYhM.mjs} +37 -39
- package/dist/cloudflare-user-output-Q-k0QoNQ.mjs +20 -0
- package/dist/collect-DAUItMDS.mjs +2 -0
- package/dist/collect-DXHNWHcT.mjs +48 -0
- package/dist/config--T87TD8T.mjs +2 -0
- package/dist/{config-NOG_U1aK.mjs → config-BSe70f4T.mjs} +4 -6
- package/dist/config-DDIFxQYx.mjs +2 -0
- package/dist/{config-uNGuFsI2.mjs → config-Dxr6cTXn.mjs} +22 -37
- package/dist/config-DywxBLQC.d.mts +185 -0
- package/dist/config-entry.d.mts +6 -0
- package/dist/config-entry.mjs +7 -0
- package/dist/config-uP7ZDtVZ.mjs +21 -0
- package/dist/config-write-y3CBI_ux.mjs +60 -0
- package/dist/{connect-WCQZ_u3m.mjs → connect-BvC9kolB.mjs} +8 -6
- package/dist/{create-project-D0oXA090.mjs → create-project-C9lQhRzj.mjs} +8 -23
- package/dist/create-project-CI-17RVJ.mjs +2 -0
- package/dist/database-provider-Cx525bwX.mjs +6 -0
- package/dist/database-provider.mjs +1 -5
- package/dist/{db-DJ-9qs3S.mjs → db-R7IQgOv5.mjs} +48 -44
- package/dist/{delete-BZ4-WaGm.mjs → delete-CghI_NXn.mjs} +6 -4
- package/dist/deploy-CYPymbtG.mjs +2 -0
- package/dist/{deploy-BAhhcg5q.mjs → deploy-H968Lo4T.mjs} +751 -190
- package/dist/discover-BBzDZe_o.mjs +2 -0
- package/dist/{discover-xvfrgJeo.mjs → discover-C4O6YxVS.mjs} +3 -8
- package/dist/{dist-BrsS7cai.mjs → dist-4WkAWhWx.mjs} +1 -15
- package/dist/{dist-m40_XgNh.mjs → dist-Bn8Kodjp.mjs} +1 -1
- package/dist/dist-C5fND3R0.mjs +2 -0
- package/dist/dist-D7-nEOXi.mjs +2 -0
- package/dist/{output-B0cfNSx5.mjs → dist-Dn6nn2IU.mjs} +3 -926
- package/dist/{domain-BxAyhxXN.mjs → domain-CITt8lC-.mjs} +7 -5
- package/dist/{route-types-Da-DpyUp.mjs → drizzle-Beb2Am5S.mjs} +1 -280
- package/dist/{email-Ce6SQq-i.mjs → email-C5kaZXzJ.mjs} +2 -2
- package/dist/{email-Bj7Cvdwp.mjs → email-_8VmyX7V.mjs} +14 -12
- package/dist/{entry-DU3oDoQ3.mjs → entry-DdRFGK0y.mjs} +2 -2
- package/dist/{env-DP_EErve.mjs → env-DV4r3nHz.mjs} +9 -7
- package/dist/{env-DBKmK4vc.mjs → env-DX_v-Q-v.mjs} +1 -1
- package/dist/env-Yz4HcvHs.mjs +78 -0
- package/dist/env-helpers--wFmQ_5Q.mjs +136 -0
- package/dist/{env-types-BNPhro-M.mjs → env-types-CWDtqHgw.mjs} +6 -2
- package/dist/{env-validation-CF6KvTRf.mjs → env-validation-BsFEXps5.mjs} +19 -28
- package/dist/env-validation-DIDGM7h4.mjs +2 -0
- package/dist/fetch-CXDChK7B.mjs +18 -0
- package/dist/fetch-_SeGZao9.d.mts +57 -0
- package/dist/fetch-stream-AOByI7Ki.mjs +81 -0
- package/dist/fetch-stream-Bjf0hoZb.d.mts +49 -0
- package/dist/gen-BBiIZw6g.mjs +2 -0
- package/dist/{gen-B_wPnVTK.mjs → gen-CFOEEc-t.mjs} +13 -11
- package/dist/{generate-RTK8_kK1.mjs → generate-C0VY6RVf.mjs} +2 -2
- package/dist/{github-cmd-C-z_xRrQ.mjs → github-cmd-jYjha2LO.mjs} +6 -4
- package/dist/{handler-D1hLsObx.d.mts → handler-BXJTXd02.d.mts} +6 -1
- package/dist/handler-DghKr6dU.mjs +150 -0
- package/dist/head-D_QRR5Yd.mjs +112 -0
- package/dist/head-client-DzmJGN4C.mjs +90 -0
- package/dist/{headers-BAHwgHdW.mjs → headers-B_HBMgi0.mjs} +2 -2
- package/dist/{help-CwOX-zmI.mjs → help-C46mnlUS.mjs} +17 -12
- package/dist/help-CS_nAsWu.mjs +2 -0
- package/dist/index.d.mts +2 -20
- package/dist/index.mjs +116 -60
- package/dist/{init-BGktCXgA.mjs → init-CSXmvxKu.mjs} +49 -50
- package/dist/{link-D2kbqhWb.mjs → link-DxMOALXk.mjs} +7 -5
- package/dist/{list-CvkK_G7k.mjs → list-0wQs0oYg.mjs} +7 -5
- package/dist/live-CB1y5IuC.mjs +411 -0
- package/dist/live-CKiJilLr.d.mts +105 -0
- package/dist/local-d1-DzykTWY8.mjs +104 -0
- package/dist/{login-WIjNc77c.mjs → login-CKk5NX4d.mjs} +6 -11
- package/dist/login-Ch9cgWRF.mjs +2 -0
- package/dist/{logs-dLUFCapG.mjs → logs-hxWBSoej.mjs} +6 -4
- package/dist/migrate-CLty4mZR.mjs +2 -0
- package/dist/migrate-DcW8F2W8.mjs +285 -0
- package/dist/migration-handler-DM4clYj5.d.mts +51 -0
- package/dist/{neon-DHwd2zvC.mjs → neon-n74ta1Pr.mjs} +1 -1
- package/dist/{node-Ez5KW5rn.mjs → node-Cupyf7-s.mjs} +6 -6
- package/dist/{operator-auth-B3e08unv.mjs → operator-auth-BkVgJqv-.mjs} +2 -2
- package/dist/{operator-client-LUZnlnYk.mjs → operator-client-A0iex2yi.mjs} +2 -1
- package/dist/{operator-cmd-CKJ7xIRs.mjs → operator-cmd-BEUYhaHB.mjs} +6 -6
- package/dist/output-urU86XeT.mjs +146 -0
- package/dist/{package-json-CPoWX79C.mjs → package-json-iCbMg5XF.mjs} +1 -1
- package/dist/pages/client.d.mts +5 -2
- package/dist/pages/client.mjs +5 -3
- package/dist/pages/head-client.mjs +1 -89
- package/dist/pages/head.mjs +1 -111
- package/dist/pages/index.d.mts +2 -3
- package/dist/pages/index.mjs +7 -7
- package/dist/pages/islands-plugin.mjs +2 -2
- package/dist/pages/prefetch.d.mts +2 -30
- package/dist/pages/prefetch.mjs +1 -89
- package/dist/pages/protocol.d.mts +2 -2
- package/dist/pages/protocol.mjs +3 -3
- package/dist/pages/serialize.d.mts +2 -9
- package/dist/pages/serialize.mjs +1 -13
- package/dist/plan-BEZ8VJW0.mjs +256 -0
- package/dist/plan-DpuOr14e.mjs +2 -0
- package/dist/{platform-auth-config-CdVWRRJr.mjs → platform-auth-config-Df6yVw-e.mjs} +6 -6
- package/dist/{platform-auth-protection-Drl0qhrn.mjs → platform-auth-protection-Jb0yftay.mjs} +7 -5
- package/dist/{platform-auth-recovery-CmKEWpDo.mjs → platform-auth-recovery-DmRyIfW0.mjs} +6 -5
- package/dist/platform-cmd-C9Vt7m-d.mjs +2 -0
- package/dist/{platform-cmd-5q_k56xS.mjs → platform-cmd-DRxCOTwy.mjs} +8 -5
- package/dist/{platform-domain-4GiDlcqx.mjs → platform-domain-IjiXgrXJ.mjs} +4 -3
- package/dist/{platform-lifecycle-R9xAxvtG.mjs → platform-lifecycle-BquAaU-5.mjs} +208 -37
- package/dist/platform-lifecycle-CuJIZNvA.mjs +2 -0
- package/dist/{platform-management-BfWsXHEW.mjs → platform-management-CCQKGsq4.mjs} +8 -5
- package/dist/platform-management-Cgyed0WY.mjs +2 -0
- package/dist/{platform-recovery-CbK-I1FB.mjs → platform-recovery-DS8ih1SW.mjs} +3 -3
- package/dist/platform-registry-BJbgZLS1.mjs +431 -0
- package/dist/{plugin-inference-BDRfZngg.mjs → plugin-inference-DsvtJLll.mjs} +4 -4
- package/dist/prefetch-Bsc_Pb6c.mjs +90 -0
- package/dist/prefetch-Ce6la4EI.d.mts +31 -0
- package/dist/{prepare-blNRQvQl.mjs → prepare-CaUxODOU.mjs} +3 -2
- package/dist/prepare-D4CkM3_v.mjs +2 -0
- package/dist/{prepare-CtDJjoOj.mjs → prepare-pcWcxSCh.mjs} +13 -11
- package/dist/prerender-render-Cf_WDE9W.mjs +111 -0
- package/dist/prerender-render.mjs +1 -110
- package/dist/{preset-lAy0B0BQ.mjs → preset-Dowh9tTt.mjs} +16 -118
- package/dist/project-BEBFDFLz.mjs +2 -0
- package/dist/project-CWNIPoXc.mjs +209 -0
- package/dist/{project-cmd-CTdmnzvc.mjs → project-cmd-2lN--YAX.mjs} +18 -16
- package/dist/{project-paths-SK8nMHPp.mjs → project-paths-CKQ-Q5JS.mjs} +47 -14
- package/dist/project-slug-23TpquG4.mjs +8 -0
- package/dist/project-slug-DofjTFd-.mjs +2 -0
- package/dist/{project-team-CGxsQe3_.mjs → project-team-Dapn9HZn.mjs} +6 -4
- package/dist/{project-token-Cirx7uwZ.mjs → project-token-C90v9SJK.mjs} +6 -4
- package/dist/{project-tsconfig-Ql2XsSQp.mjs → project-tsconfig-CwfqUnVp.mjs} +2 -2
- package/dist/{protocol-C-pqYJjE.d.mts → protocol-ZH3jP4a7.d.mts} +1 -1
- package/dist/providers-BNKRacMr.d.mts +7 -0
- package/dist/provision-CNgEBkVA.mjs +3 -0
- package/dist/{provision-CSJOjjQk.mjs → provision-Cck2m3jJ.mjs} +11 -25
- package/dist/queues-BWKt1Xo4.d.mts +7 -0
- package/dist/{requests-4Nq59hOr.mjs → requests-CzX46I0i.mjs} +5 -3
- package/dist/resolve-project-BTotl8Nn.mjs +2 -0
- package/dist/{resolve-project--Vxawf7z.mjs → resolve-project-Xvis70DG.mjs} +2 -8
- package/dist/response-Tn7rU0MV.mjs +30 -0
- package/dist/{rollback-Dr7u0Ljx.mjs → rollback-BEeyc73H.mjs} +6 -4
- package/dist/{rolldown-runtime-rQ84J-ij.mjs → rolldown-runtime-DXIUcv95.mjs} +1 -10
- package/dist/route-types-Id82-veQ.mjs +280 -0
- package/dist/{local-d1-D2I6Ox5F.mjs → runner-BGVsGgkb.mjs} +6 -114
- package/dist/runner-CQs_cDSG.mjs +2 -0
- package/dist/runner-mysql-1o47achK.mjs +2 -0
- package/dist/{runner-mysql-7BPUNGmL.mjs → runner-mysql-BhwMk2Bm.mjs} +2 -9
- package/dist/{runner-pg-BkEza-dX.mjs → runner-pg-CJ_JeGF6.mjs} +2 -9
- package/dist/runner-pg-D7z01mQS.mjs +2 -0
- package/dist/runtime/ai.mjs +1 -1
- package/dist/runtime/auth-client-react.d.mts +2 -6
- package/dist/runtime/auth-client-react.mjs +1 -5
- package/dist/runtime/auth-client-solid.d.mts +2 -6
- package/dist/runtime/auth-client-solid.mjs +1 -5
- package/dist/runtime/auth-client-svelte.d.mts +2 -6
- package/dist/runtime/auth-client-svelte.mjs +1 -5
- package/dist/runtime/auth-client-vue.d.mts +2 -6
- package/dist/runtime/auth-client-vue.mjs +1 -5
- package/dist/runtime/auth-client.d.mts +2 -6
- package/dist/runtime/auth-client.mjs +1 -5
- package/dist/runtime/auth.mjs +1 -21
- package/dist/runtime/better-auth-mysql.d.mts +1 -1
- package/dist/runtime/better-auth-mysql.mjs +1 -1
- package/dist/runtime/better-auth-pg.d.mts +1 -1
- package/dist/runtime/better-auth-pg.mjs +1 -1
- package/dist/runtime/better-auth.d.mts +1 -1
- package/dist/runtime/better-auth.mjs +1 -1
- package/dist/runtime/client-react.d.mts +3 -3
- package/dist/runtime/client-react.mjs +3 -3
- package/dist/runtime/client-solid.d.mts +3 -3
- package/dist/runtime/client-solid.mjs +3 -3
- package/dist/runtime/client-svelte.d.mts +3 -3
- package/dist/runtime/client-svelte.mjs +3 -3
- package/dist/runtime/client-vue.d.mts +3 -3
- package/dist/runtime/client-vue.mjs +3 -3
- package/dist/runtime/client.d.mts +3 -3
- package/dist/runtime/client.mjs +3 -3
- package/dist/runtime/db.mjs +1 -1
- package/dist/runtime/durable.mjs +1 -1
- package/dist/runtime/email/testing.mjs +1 -1
- package/dist/runtime/env-helpers.mjs +1 -135
- package/dist/runtime/env-public-client.mjs +1 -1
- package/dist/runtime/env-public.mjs +2 -2
- package/dist/runtime/env.mjs +1 -77
- package/dist/runtime/fetch-stream.d.mts +2 -49
- package/dist/runtime/fetch-stream.mjs +2 -80
- package/dist/runtime/fetch.d.mts +2 -57
- package/dist/runtime/fetch.mjs +2 -17
- package/dist/runtime/handler.d.mts +1 -1
- package/dist/runtime/handler.mjs +1 -149
- package/dist/runtime/kv.mjs +1 -1
- package/dist/runtime/live-client.d.mts +1 -1
- package/dist/runtime/live-server.mjs +2 -2
- package/dist/runtime/live.d.mts +2 -104
- package/dist/runtime/live.mjs +1 -410
- package/dist/runtime/migration-handler-mysql.d.mts +1 -1
- package/dist/runtime/migration-handler-pg.d.mts +1 -1
- package/dist/runtime/migration-handler.d.mts +2 -50
- package/dist/runtime/queues.d.mts +2 -6
- package/dist/runtime/queues.mjs +1 -1
- package/dist/runtime/response.mjs +1 -29
- package/dist/runtime/sandbox.mjs +1 -1
- package/dist/runtime/sse.mjs +1 -171
- package/dist/runtime/storage.mjs +1 -1
- package/dist/runtime/validator.d.mts +1 -1
- package/dist/runtime/validator.mjs +1 -71
- package/dist/runtime/ws-server.d.mts +2 -2
- package/dist/runtime/ws-server.mjs +2 -2
- package/dist/runtime/ws.d.mts +2 -121
- package/dist/{scan-CpK-57ug.mjs → scan-DJbooZm2.mjs} +3 -3
- package/dist/{scan-BMH4rzlv.mjs → scan-DdDvRCU1.mjs} +8 -26
- package/dist/{secret-AcPi-FoA.mjs → secret-wnTel5Yw.mjs} +8 -6
- package/dist/serialize-BPvnNQuA.mjs +14 -0
- package/dist/serialize-CfSwWfF2.d.mts +10 -0
- package/dist/{skills-C0RvGjeE.mjs → skills-B-690E7h.mjs} +3 -2
- package/dist/sse-BaC1jXko.mjs +172 -0
- package/dist/{subcommand-prompt-Bmyn5Rlc.mjs → subcommand-prompt-Gj3VzLIh.mjs} +2 -1
- package/dist/sveltekit.d.mts +2 -1
- package/dist/sveltekit.mjs +3 -2
- package/dist/validate-DqJ33oHj.mjs +2 -0
- package/dist/validate-qNhV00PD.mjs +180 -0
- package/dist/validator-BTOu0fB0.mjs +72 -0
- package/dist/{wrangler--imS8n0d.mjs → wrangler-D01qs6VB.mjs} +259 -71
- package/dist/ws-BwcqizuH.d.mts +122 -0
- package/dist/{yarn-pnp-DxSInkzL.mjs → yarn-pnp-CVEc3gE7.mjs} +1 -1
- package/package.json +19 -8
- package/skills/void/SKILL.md +6 -4
- package/skills/void/docs/guide/ai.md +3 -3
- package/skills/void/docs/guide/app-types.md +12 -11
- package/skills/void/docs/guide/auth.md +2 -2
- package/skills/void/docs/guide/database/d1.md +1 -1
- package/skills/void/docs/guide/database/mysql.md +1 -1
- package/skills/void/docs/guide/database/postgresql.md +3 -3
- package/skills/void/docs/guide/deployment.md +2 -2
- package/skills/void/docs/guide/durable-state.md +2 -2
- package/skills/void/docs/guide/edge/headers.md +3 -3
- package/skills/void/docs/guide/edge/prerendering.md +1 -1
- package/skills/void/docs/guide/edge/redirects.md +4 -4
- package/skills/void/docs/guide/edge/revalidation.md +6 -6
- package/skills/void/docs/guide/edge/rewrites.md +28 -27
- package/skills/void/docs/guide/edge/static-assets.md +1 -1
- package/skills/void/docs/guide/email.md +15 -15
- package/skills/void/docs/guide/env-migration.md +1 -1
- package/skills/void/docs/guide/index.md +1 -1
- package/skills/void/docs/guide/pages-routing/head.md +1 -1
- package/skills/void/docs/guide/platform/administration/access.md +13 -5
- package/skills/void/docs/guide/platform/administration/projects.md +3 -1
- package/skills/void/docs/guide/platform/installation/ci.md +3 -0
- package/skills/void/docs/guide/platform/installation/credentials.md +15 -5
- package/skills/void/docs/guide/platform/installation/prerequisites.md +2 -0
- package/skills/void/docs/guide/platform/installation/setup.md +1 -1
- package/skills/void/docs/guide/remote-dev.md +2 -2
- package/skills/void/docs/guide/sandboxes.md +1 -1
- package/skills/void/docs/guide/ssg.md +1 -1
- package/skills/void/docs/guide/websockets.md +1 -1
- package/skills/void/docs/integrations/cloudflare.md +86 -84
- package/skills/void/docs/integrations/frameworks/analog.md +14 -9
- package/skills/void/docs/integrations/frameworks/astro.md +14 -10
- package/skills/void/docs/integrations/frameworks/nuxt.md +14 -9
- package/skills/void/docs/integrations/frameworks/overview.md +35 -29
- package/skills/void/docs/integrations/frameworks/react-router.md +1 -1
- package/skills/void/docs/integrations/frameworks/sveltekit.md +33 -30
- package/skills/void/docs/integrations/frameworks/tanstack-start.md +1 -1
- package/skills/void/docs/integrations/nodejs-bun-deno.md +5 -5
- package/skills/void/docs/reference/api.md +21 -4
- package/skills/void/docs/reference/cli.md +32 -23
- package/skills/void/docs/reference/config.md +56 -33
- package/skills/void/docs/reference/structure.md +2 -2
- package/dist/validate-tBBN_dXH.mjs +0 -505
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { a as join, n as dirname } from "./dist-4WkAWhWx.mjs";
|
|
2
|
+
import { existsSync, mkdirSync, readFileSync, readdirSync, writeFileSync } from "node:fs";
|
|
3
|
+
//#region src/migrations/collect.ts
|
|
4
|
+
/**
|
|
5
|
+
* Collect all .sql migration files from the migrations directory,
|
|
6
|
+
* sorted by filename (lexicographic order).
|
|
7
|
+
*/
|
|
8
|
+
function collectMigrations(migrationsDir) {
|
|
9
|
+
if (!existsSync(migrationsDir)) return [];
|
|
10
|
+
return readdirSync(migrationsDir).filter((f) => f.endsWith(".sql") && f !== "seed.sql").sort().map((name) => ({
|
|
11
|
+
name,
|
|
12
|
+
sql: readFileSync(join(migrationsDir, name), "utf-8")
|
|
13
|
+
}));
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Read `db/migrations/meta/_journal.json` if it exists. Drizzle maintains
|
|
17
|
+
* this file whenever `drizzle-kit generate` runs; every `.sql` migration
|
|
18
|
+
* under `db/migrations/` should correspond to an entry whose `tag` is the
|
|
19
|
+
* filename without the `.sql` suffix.
|
|
20
|
+
*/
|
|
21
|
+
function readJournal(migrationsDir) {
|
|
22
|
+
const journalPath = join(migrationsDir, "meta", "_journal.json");
|
|
23
|
+
if (!existsSync(journalPath)) return;
|
|
24
|
+
try {
|
|
25
|
+
return JSON.parse(readFileSync(journalPath, "utf-8"));
|
|
26
|
+
} catch (err) {
|
|
27
|
+
throw new Error(`db: Failed to parse db/migrations/meta/_journal.json: '${err.message}'.`);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Write `db/migrations/meta/_journal.json` with pretty-printed JSON and a
|
|
32
|
+
* trailing newline, matching the format Drizzle itself emits. Creates the
|
|
33
|
+
* `meta/` directory if it does not yet exist.
|
|
34
|
+
*/
|
|
35
|
+
function writeJournal(migrationsDir, journal) {
|
|
36
|
+
const journalPath = join(migrationsDir, "meta", "_journal.json");
|
|
37
|
+
mkdirSync(dirname(journalPath), { recursive: true });
|
|
38
|
+
writeFileSync(journalPath, JSON.stringify(journal, null, 2) + "\n");
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Drop the `.sql` extension from a migration filename, leaving any other
|
|
42
|
+
* suffix untouched. Used to line filenames up with journal `tag` values.
|
|
43
|
+
*/
|
|
44
|
+
function stripSqlExt(name) {
|
|
45
|
+
return name.endsWith(".sql") ? name.slice(0, -4) : name;
|
|
46
|
+
}
|
|
47
|
+
//#endregion
|
|
48
|
+
export { writeJournal as i, readJournal as n, stripSqlExt as r, collectMigrations as t };
|
|
@@ -1,10 +1,8 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import { n as
|
|
4
|
-
import { r as schemaSpecifier, t as discoverSchema } from "./discover-xvfrgJeo.mjs";
|
|
1
|
+
import { a as join, l as relative } from "./dist-4WkAWhWx.mjs";
|
|
2
|
+
import { n as readProjectPaths } from "./project-paths-CKQ-Q5JS.mjs";
|
|
3
|
+
import { n as schemaSpecifier, t as discoverSchema } from "./discover-C4O6YxVS.mjs";
|
|
5
4
|
import { mkdirSync, writeFileSync } from "node:fs";
|
|
6
5
|
//#region src/drizzle/config.ts
|
|
7
|
-
var config_exports = /* @__PURE__ */ __exportAll({ writeDrizzleConfig: () => writeDrizzleConfig });
|
|
8
6
|
/**
|
|
9
7
|
* Write a temporary drizzle-kit config to `.void/drizzle.config.json`.
|
|
10
8
|
* All paths are relative to the project root (drizzle-kit resolves
|
|
@@ -31,4 +29,4 @@ function writeDrizzleConfig(root, dbPath, dialect = "sqlite", options) {
|
|
|
31
29
|
return configPath;
|
|
32
30
|
}
|
|
33
31
|
//#endregion
|
|
34
|
-
export { writeDrizzleConfig as
|
|
32
|
+
export { writeDrizzleConfig as t };
|
|
@@ -1,27 +1,7 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { o as join } from "./dist-BrsS7cai.mjs";
|
|
3
|
-
import { a as validateSourceDir } from "./project-paths-SK8nMHPp.mjs";
|
|
1
|
+
import { a as validateSourceDir, c as loadVoidConfig } from "./project-paths-CKQ-Q5JS.mjs";
|
|
4
2
|
import { i as isVoidAuthProvider, t as VOID_AUTH_PROVIDERS } from "./providers-CJlNS3kT.mjs";
|
|
5
3
|
import { a as parseAddress, n as MimeError } from "./mime-D5Nmdzf7.mjs";
|
|
6
|
-
import { readFileSync } from "node:fs";
|
|
7
4
|
//#region src/config.ts
|
|
8
|
-
var config_exports = /* @__PURE__ */ __exportAll({
|
|
9
|
-
VALID_NOT_FOUND_HANDLING: () => VALID_NOT_FOUND_HANDLING,
|
|
10
|
-
VALID_REDIRECT_STATUSES: () => VALID_REDIRECT_STATUSES,
|
|
11
|
-
assertSingleSplat: () => assertSingleSplat,
|
|
12
|
-
assertUniqueCaptureNames: () => assertUniqueCaptureNames,
|
|
13
|
-
convertFallbacksConfig: () => convertFallbacksConfig,
|
|
14
|
-
convertHeadersConfig: () => convertHeadersConfig,
|
|
15
|
-
convertRedirectsConfig: () => convertRedirectsConfig,
|
|
16
|
-
convertRewritesConfig: () => convertRewritesConfig,
|
|
17
|
-
countSplats: () => countSplats,
|
|
18
|
-
getDatabaseDialect: () => getDatabaseDialect,
|
|
19
|
-
isNodeTarget: () => isNodeTarget,
|
|
20
|
-
isProtocolRelative: () => isProtocolRelative,
|
|
21
|
-
parseHostPrefixedSource: () => parseHostPrefixedSource,
|
|
22
|
-
readConfig: () => readConfig,
|
|
23
|
-
resolveBindingNames: () => resolveBindingNames
|
|
24
|
-
});
|
|
25
5
|
const CONFIG_FILE = "void.json";
|
|
26
6
|
const VALID_TARGETS = /* @__PURE__ */ new Set([
|
|
27
7
|
"cloudflare",
|
|
@@ -220,24 +200,21 @@ const MIGRATION_ERRORS = {
|
|
|
220
200
|
mode: "\"mode\" has been renamed to \"inference.appType\"",
|
|
221
201
|
revalidate: "\"revalidate\" has moved to \"routing.revalidate\""
|
|
222
202
|
};
|
|
223
|
-
/**
|
|
224
|
-
* Read and validate the `void.json` config file from the project root.
|
|
225
|
-
* Returns an empty config object if no file exists.
|
|
226
|
-
*/
|
|
203
|
+
/** Read and validate the project's typed config, with legacy JSON compatibility. */
|
|
227
204
|
function readConfig(root) {
|
|
228
|
-
const
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
return {};
|
|
234
|
-
}
|
|
235
|
-
let config;
|
|
205
|
+
const loaded = loadVoidConfig(root);
|
|
206
|
+
return loaded ? validateConfig(loaded.value, loaded.source) : {};
|
|
207
|
+
}
|
|
208
|
+
/** Runtime validation also applies to TypeScript configs, whose types may be bypassed. */
|
|
209
|
+
function validateConfig(config, source = CONFIG_FILE) {
|
|
236
210
|
try {
|
|
237
|
-
|
|
238
|
-
} catch {
|
|
239
|
-
throw new Error(
|
|
211
|
+
return validateConfigObject(config);
|
|
212
|
+
} catch (error) {
|
|
213
|
+
if (source !== CONFIG_FILE && error instanceof Error) throw new Error(error.message.replaceAll(CONFIG_FILE, source), { cause: error });
|
|
214
|
+
throw error;
|
|
240
215
|
}
|
|
216
|
+
}
|
|
217
|
+
function validateConfigObject(config) {
|
|
241
218
|
if (typeof config !== "object" || config === null || Array.isArray(config)) throw new Error(`config: ${CONFIG_FILE} must be a JSON object.`);
|
|
242
219
|
const obj = config;
|
|
243
220
|
for (const [key, message] of Object.entries(MIGRATION_ERRORS)) if (obj[key] !== void 0) throw new Error(`config: ${message} in ${CONFIG_FILE}.`);
|
|
@@ -457,6 +434,9 @@ function readConfig(root) {
|
|
|
457
434
|
}
|
|
458
435
|
}
|
|
459
436
|
}
|
|
437
|
+
if (obj.cloudflare !== void 0) {
|
|
438
|
+
if (typeof obj.cloudflare !== "object" || obj.cloudflare === null || Array.isArray(obj.cloudflare)) throw new Error(`config: "cloudflare" in ${CONFIG_FILE} must be an object.`);
|
|
439
|
+
}
|
|
460
440
|
if (obj.database !== void 0) {
|
|
461
441
|
if (typeof obj.database !== "string" || !VALID_DATABASE_VALUES.has(obj.database)) throw new Error(`config: "database" in ${CONFIG_FILE} must be "pg" or "mysql".`);
|
|
462
442
|
}
|
|
@@ -472,6 +452,11 @@ function readConfig(root) {
|
|
|
472
452
|
for (const key of Object.keys(emailCfg)) if (key !== "from") throw new Error(`config: Unknown key 'email.${key}' in ${CONFIG_FILE}. Valid: from.`);
|
|
473
453
|
if (emailCfg.from !== void 0) parseEmailFrom(emailCfg.from);
|
|
474
454
|
}
|
|
455
|
+
if ("$schema" in obj) {
|
|
456
|
+
const resolved = { ...obj };
|
|
457
|
+
delete resolved.$schema;
|
|
458
|
+
return resolved;
|
|
459
|
+
}
|
|
475
460
|
return obj;
|
|
476
461
|
}
|
|
477
462
|
/**
|
|
@@ -642,4 +627,4 @@ function convertFallbacksConfig(fallbacks) {
|
|
|
642
627
|
return rules.length > 0 ? rules : void 0;
|
|
643
628
|
}
|
|
644
629
|
//#endregion
|
|
645
|
-
export {
|
|
630
|
+
export { convertFallbacksConfig as a, convertRewritesConfig as c, isNodeTarget as d, isProtocolRelative as f, validateConfig as g, resolveBindingNames as h, assertUniqueCaptureNames as i, countSplats as l, readConfig as m, VALID_REDIRECT_STATUSES as n, convertHeadersConfig as o, parseHostPrefixedSource as p, assertSingleSplat as r, convertRedirectsConfig as s, VALID_NOT_FOUND_HANDLING as t, getDatabaseDialect as u };
|
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
import "./types-CKWnYgfy.mjs";
|
|
2
|
+
import { t as VoidAuthProvider } from "./providers-BNKRacMr.mjs";
|
|
3
|
+
import { t as HeadConfig } from "./head-Do8P4puT.mjs";
|
|
4
|
+
import { RewriteDestination } from "void/routes";
|
|
5
|
+
//#region src/sandbox/config.d.ts
|
|
6
|
+
type SandboxInstanceType = "dev" | "lite" | "basic" | "standard" | "standard-1" | "standard-2" | "standard-3" | "standard-4";
|
|
7
|
+
type SandboxConfig = {
|
|
8
|
+
binding?: string;
|
|
9
|
+
className?: string;
|
|
10
|
+
containerName?: string;
|
|
11
|
+
image?: string;
|
|
12
|
+
imageBuildContext?: string;
|
|
13
|
+
platformImage?: string;
|
|
14
|
+
instanceType?: SandboxInstanceType;
|
|
15
|
+
maxInstances?: number;
|
|
16
|
+
};
|
|
17
|
+
//#endregion
|
|
18
|
+
//#region src/config.d.ts
|
|
19
|
+
/** Redirect destination — string (302) or object with explicit status. */
|
|
20
|
+
type RedirectDestination = string | {
|
|
21
|
+
to: string;
|
|
22
|
+
status?: 301 | 302 | 303 | 307 | 308;
|
|
23
|
+
};
|
|
24
|
+
/** Curated Worker fields accepted in the legacy void.json config. */
|
|
25
|
+
type WranglerConfig = {
|
|
26
|
+
compatibility_date?: string;
|
|
27
|
+
compatibility_flags?: Array<string>;
|
|
28
|
+
vars?: Record<string, string>;
|
|
29
|
+
limits?: {
|
|
30
|
+
cpu_ms?: number;
|
|
31
|
+
};
|
|
32
|
+
};
|
|
33
|
+
/**
|
|
34
|
+
* How the asset layer answers a request that matched no asset and no worker
|
|
35
|
+
* route. Mirrors Cloudflare's `assets.not_found_handling`.
|
|
36
|
+
*/
|
|
37
|
+
type NotFoundHandling = "single-page-application" | "404-page" | "none";
|
|
38
|
+
/** Routing configuration — headers, redirects, rewrites, fallbacks, revalidation, prerendering. */
|
|
39
|
+
type RoutingConfig = {
|
|
40
|
+
/** Disable ISR and edge prerendering, including per-page policies. Static output is unaffected. */
|
|
41
|
+
isr?: boolean;
|
|
42
|
+
revalidate?: number | Record<string, number>;
|
|
43
|
+
revalidateQueryAllowlist?: Record<string, Array<string>>;
|
|
44
|
+
prerender?: Array<string>;
|
|
45
|
+
headers?: Record<string, Array<string>>;
|
|
46
|
+
redirects?: Record<string, RedirectDestination>;
|
|
47
|
+
rewrites?: Record<string, RewriteDestination>;
|
|
48
|
+
fallbacks?: Record<string, RewriteDestination>;
|
|
49
|
+
/**
|
|
50
|
+
* Override the inferred `not_found_handling` for the asset layer.
|
|
51
|
+
*
|
|
52
|
+
* Void infers `single-page-application` whenever the worker does not own HTML
|
|
53
|
+
* routing, because a real SPA needs `/index.html` served for deep links. An
|
|
54
|
+
* app whose assets were emitted by a static site generator (VitePress,
|
|
55
|
+
* Docusaurus, …) wants the opposite: unknown URLs should serve the generator's
|
|
56
|
+
* own `404.html` with a real HTTP 404, not `index.html` with a 200. Nothing in
|
|
57
|
+
* a built asset tree distinguishes the two, so this is an explicit opt-in.
|
|
58
|
+
*
|
|
59
|
+
* Only `not_found_handling` is affected — `run_worker_first` is unchanged, so
|
|
60
|
+
* API routes, auth, and `/__void/*` still reach the worker first.
|
|
61
|
+
*/
|
|
62
|
+
notFound?: NotFoundHandling;
|
|
63
|
+
};
|
|
64
|
+
/** Inference configuration — bindings, scanDirs, build, outputDir, appType. */
|
|
65
|
+
type InferenceConfig = {
|
|
66
|
+
bindings?: {
|
|
67
|
+
db?: boolean | string;
|
|
68
|
+
kv?: boolean | string;
|
|
69
|
+
storage?: boolean | string;
|
|
70
|
+
ai?: boolean | string;
|
|
71
|
+
email?: boolean;
|
|
72
|
+
};
|
|
73
|
+
scanDirs?: ReadonlyArray<string>;
|
|
74
|
+
build?: string;
|
|
75
|
+
outputDir?: string;
|
|
76
|
+
appType?: "spa" | "static" | "void" | "framework";
|
|
77
|
+
};
|
|
78
|
+
/** Auth configuration — high-level provider selection for Better Auth defaults. */
|
|
79
|
+
type AuthConfig = {
|
|
80
|
+
providers?: Array<VoidAuthProvider>;
|
|
81
|
+
};
|
|
82
|
+
/** AI configuration — the Cloudflare AI Gateway used by `ai.provider().fetch()` on self-hosted deploys (Workers AI `ai.run`/`ai.image` use the `env.AI` binding directly). */
|
|
83
|
+
type AiConfig = {
|
|
84
|
+
gateway?: string;
|
|
85
|
+
};
|
|
86
|
+
/**
|
|
87
|
+
* Email configuration. `from` is the default sender for `sendEmail()` — one
|
|
88
|
+
* address, optionally with a display name (`Acme <noreply@mail.acme.com>`) —
|
|
89
|
+
* and, on `void deploy --platform cloudflare`, its host is the domain the CLI
|
|
90
|
+
* sets Email Routing and Email Sending up on.
|
|
91
|
+
*/
|
|
92
|
+
type EmailConfig = {
|
|
93
|
+
from?: string;
|
|
94
|
+
};
|
|
95
|
+
/** Cloudflare Worker configuration passed through to the native deploy artifact. */
|
|
96
|
+
type CloudflareField<T> = T & Record<string, unknown>;
|
|
97
|
+
type CloudflareConfig = Record<string, unknown> & {
|
|
98
|
+
account_id?: string;
|
|
99
|
+
name?: string;
|
|
100
|
+
main?: string;
|
|
101
|
+
compatibility_date?: string;
|
|
102
|
+
compatibility_flags?: Array<string>;
|
|
103
|
+
workers_dev?: boolean;
|
|
104
|
+
preview_urls?: boolean;
|
|
105
|
+
vars?: Record<string, unknown>;
|
|
106
|
+
routes?: Array<string | CloudflareField<{
|
|
107
|
+
pattern: string;
|
|
108
|
+
zone_name?: string;
|
|
109
|
+
zone_id?: string;
|
|
110
|
+
}>>;
|
|
111
|
+
route?: string | CloudflareField<{
|
|
112
|
+
pattern: string;
|
|
113
|
+
zone_name?: string;
|
|
114
|
+
zone_id?: string;
|
|
115
|
+
}>;
|
|
116
|
+
d1_databases?: Array<CloudflareField<{
|
|
117
|
+
binding: string;
|
|
118
|
+
database_name?: string;
|
|
119
|
+
database_id?: string;
|
|
120
|
+
migrations_dir?: string;
|
|
121
|
+
migrations_table?: string;
|
|
122
|
+
}>>;
|
|
123
|
+
kv_namespaces?: Array<CloudflareField<{
|
|
124
|
+
binding: string;
|
|
125
|
+
id?: string;
|
|
126
|
+
preview_id?: string;
|
|
127
|
+
}>>;
|
|
128
|
+
r2_buckets?: Array<CloudflareField<{
|
|
129
|
+
binding: string;
|
|
130
|
+
bucket_name?: string;
|
|
131
|
+
preview_bucket_name?: string;
|
|
132
|
+
}>>;
|
|
133
|
+
hyperdrive?: Array<CloudflareField<{
|
|
134
|
+
binding: string;
|
|
135
|
+
id?: string;
|
|
136
|
+
}>>;
|
|
137
|
+
queues?: CloudflareField<{
|
|
138
|
+
producers?: Array<CloudflareField<{
|
|
139
|
+
binding: string;
|
|
140
|
+
queue: string;
|
|
141
|
+
}>>;
|
|
142
|
+
consumers?: Array<CloudflareField<{
|
|
143
|
+
queue: string;
|
|
144
|
+
max_batch_size?: number;
|
|
145
|
+
max_batch_timeout?: number;
|
|
146
|
+
max_retries?: number;
|
|
147
|
+
dead_letter_queue?: string;
|
|
148
|
+
}>>;
|
|
149
|
+
}>;
|
|
150
|
+
assets?: CloudflareField<{
|
|
151
|
+
directory?: string;
|
|
152
|
+
binding?: string;
|
|
153
|
+
not_found_handling?: "single-page-application" | "404-page" | "none";
|
|
154
|
+
run_worker_first?: boolean | Array<string>;
|
|
155
|
+
}>;
|
|
156
|
+
triggers?: CloudflareField<{
|
|
157
|
+
crons?: Array<string>;
|
|
158
|
+
}>;
|
|
159
|
+
send_email?: Array<CloudflareField<{
|
|
160
|
+
name: string;
|
|
161
|
+
destination_address?: string;
|
|
162
|
+
allowed_destination_addresses?: Array<string>;
|
|
163
|
+
allowed_sender_addresses?: Array<string>;
|
|
164
|
+
}>>;
|
|
165
|
+
addresses?: Array<string>;
|
|
166
|
+
};
|
|
167
|
+
/** Shape of the Void project config. All fields optional. */
|
|
168
|
+
type VoidConfig = {
|
|
169
|
+
sourceDir?: string;
|
|
170
|
+
target?: "cloudflare" | "node" | "bun" | "deno";
|
|
171
|
+
output?: "server" | "static";
|
|
172
|
+
auth?: AuthConfig;
|
|
173
|
+
head?: HeadConfig;
|
|
174
|
+
routing?: RoutingConfig;
|
|
175
|
+
inference?: InferenceConfig;
|
|
176
|
+
sandbox?: boolean | SandboxConfig;
|
|
177
|
+
remote?: boolean;
|
|
178
|
+
worker?: WranglerConfig;
|
|
179
|
+
cloudflare?: CloudflareConfig;
|
|
180
|
+
database?: "pg" | "mysql";
|
|
181
|
+
ai?: AiConfig;
|
|
182
|
+
email?: EmailConfig;
|
|
183
|
+
};
|
|
184
|
+
//#endregion
|
|
185
|
+
export { VoidConfig as t };
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { t as VoidConfig } from "./config-DywxBLQC.mjs";
|
|
2
|
+
//#region src/config-entry.d.ts
|
|
3
|
+
/** Define a typed Void project configuration without loading the Vite plugin. */
|
|
4
|
+
export declare function defineConfig<const T extends VoidConfig>(config: T): T;
|
|
5
|
+
//#endregion
|
|
6
|
+
export type { VoidConfig };
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { n as readProjectPaths } from "./project-paths-CKQ-Q5JS.mjs";
|
|
2
|
+
import { existsSync, readFileSync } from "node:fs";
|
|
3
|
+
import { pathToFileURL } from "node:url";
|
|
4
|
+
//#region src/auth/config.ts
|
|
5
|
+
function isVoidAuthConfigSource(code) {
|
|
6
|
+
return /\bfrom\s+["']void\/auth["']/.test(code);
|
|
7
|
+
}
|
|
8
|
+
function findVoidAuthConfig(root, paths = readProjectPaths(root)) {
|
|
9
|
+
for (const absPath of paths.authConfigCandidates) {
|
|
10
|
+
if (!existsSync(absPath)) continue;
|
|
11
|
+
if (isVoidAuthConfigSource(readFileSync(absPath, "utf-8"))) return absPath;
|
|
12
|
+
}
|
|
13
|
+
return null;
|
|
14
|
+
}
|
|
15
|
+
async function loadVoidAuthConfig(configPath) {
|
|
16
|
+
if (!configPath) return;
|
|
17
|
+
const mod = await import(pathToFileURL(configPath).href);
|
|
18
|
+
return mod.default ?? mod.auth ?? mod.config;
|
|
19
|
+
}
|
|
20
|
+
//#endregion
|
|
21
|
+
export { loadVoidAuthConfig as n, findVoidAuthConfig as t };
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { a as join } from "./dist-4WkAWhWx.mjs";
|
|
2
|
+
import { o as TYPED_CONFIG_FILE, s as loadTypedVoidConfigFile } from "./project-paths-CKQ-Q5JS.mjs";
|
|
3
|
+
import { g as validateConfig } from "./config-Dxr6cTXn.mjs";
|
|
4
|
+
import { existsSync, readFileSync, writeFileSync } from "node:fs";
|
|
5
|
+
import { parse } from "acorn";
|
|
6
|
+
//#region src/config-write.ts
|
|
7
|
+
const GENERATED_MARKERS = [
|
|
8
|
+
"// Generated by void migrate.",
|
|
9
|
+
"// Generated from void.json by void migrate.",
|
|
10
|
+
"// Generated by void init."
|
|
11
|
+
];
|
|
12
|
+
function renderVoidConfig(config, marker = GENERATED_MARKERS[0]) {
|
|
13
|
+
return `${marker}\nimport { defineConfig } from 'void/config';\n\nexport default defineConfig(${JSON.stringify(config, null, 2)});\n`;
|
|
14
|
+
}
|
|
15
|
+
function isStaticValue(node) {
|
|
16
|
+
if (!node) return false;
|
|
17
|
+
if (node.type === "Literal") return node.value === null || [
|
|
18
|
+
"string",
|
|
19
|
+
"number",
|
|
20
|
+
"boolean"
|
|
21
|
+
].includes(typeof node.value);
|
|
22
|
+
if (node.type === "UnaryExpression") return node.operator === "-" && node.argument?.type === "Literal" && typeof node.argument.value === "number";
|
|
23
|
+
if (node.type === "ArrayExpression") return node.elements?.every(isStaticValue) ?? false;
|
|
24
|
+
if (node.type !== "ObjectExpression") return false;
|
|
25
|
+
return node.properties?.every((property) => property.type === "Property" && property.kind === "init" && !property.computed && !property.method && (property.key?.type === "Identifier" || property.key?.type === "Literal") && isStaticValue(property.value)) ?? false;
|
|
26
|
+
}
|
|
27
|
+
function isGeneratedStaticConfig(source) {
|
|
28
|
+
if (!GENERATED_MARKERS.some((marker) => source.startsWith(marker))) return false;
|
|
29
|
+
const comments = [];
|
|
30
|
+
let program;
|
|
31
|
+
try {
|
|
32
|
+
program = parse(source, {
|
|
33
|
+
ecmaVersion: "latest",
|
|
34
|
+
sourceType: "module",
|
|
35
|
+
onComment: (_block, comment) => comments.push(comment.trim())
|
|
36
|
+
});
|
|
37
|
+
} catch {
|
|
38
|
+
return false;
|
|
39
|
+
}
|
|
40
|
+
if (comments.length !== 1 || !GENERATED_MARKERS.includes(`// ${comments[0]}`)) return false;
|
|
41
|
+
const [importDeclaration, exportDeclaration] = program.body ?? [];
|
|
42
|
+
const call = exportDeclaration?.declaration;
|
|
43
|
+
return program.body?.length === 2 && importDeclaration?.type === "ImportDeclaration" && importDeclaration.source?.value === "void/config" && importDeclaration.specifiers?.length === 1 && importDeclaration.specifiers[0]?.imported?.name === "defineConfig" && importDeclaration.specifiers[0]?.local?.name === "defineConfig" && exportDeclaration?.type === "ExportDefaultDeclaration" && call?.type === "CallExpression" && call.callee?.name === "defineConfig" && call.arguments?.length === 1 && isStaticValue(call.arguments[0]);
|
|
44
|
+
}
|
|
45
|
+
function canRewriteVoidProjectConfig(root) {
|
|
46
|
+
const path = join(root, TYPED_CONFIG_FILE);
|
|
47
|
+
return !existsSync(path) || isGeneratedStaticConfig(readFileSync(path, "utf8"));
|
|
48
|
+
}
|
|
49
|
+
/** Update CLI-owned static config without silently rewriting authored TypeScript. */
|
|
50
|
+
function writeVoidProjectConfig(root, config) {
|
|
51
|
+
validateConfig(config, TYPED_CONFIG_FILE);
|
|
52
|
+
const path = join(root, TYPED_CONFIG_FILE);
|
|
53
|
+
if (existsSync(path)) {
|
|
54
|
+
if (!isGeneratedStaticConfig(readFileSync(path, "utf8"))) throw new Error(`config: ${TYPED_CONFIG_FILE} contains authored TypeScript or comments. Update it directly and rerun the command.`);
|
|
55
|
+
validateConfig(loadTypedVoidConfigFile(path), TYPED_CONFIG_FILE);
|
|
56
|
+
}
|
|
57
|
+
writeFileSync(path, renderVoidConfig(config, "// Generated by void init."));
|
|
58
|
+
}
|
|
59
|
+
//#endregion
|
|
60
|
+
export { writeVoidProjectConfig as n, canRewriteVoidProjectConfig as t };
|
|
@@ -1,9 +1,11 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import { t as
|
|
1
|
+
import { f as readPlatformToken } from "./auth-B9_D6ygs.mjs";
|
|
2
|
+
import { o as listPlatformConnections, s as normalizePlatformApiUrl } from "./platform-registry-BJbgZLS1.mjs";
|
|
3
|
+
import { i as readDeploymentPlatform, l as writeDeploymentPlatform, u as writePlatformSelection } from "./project-CWNIPoXc.mjs";
|
|
4
|
+
import { I as select, W as isCancel, j as log } from "./dist-Dn6nn2IU.mjs";
|
|
5
|
+
import { i as isExpiredTokenError, n as PlatformClient } from "./client-PdAJ-F0t.mjs";
|
|
6
|
+
import { t as promptForLoginToken } from "./login-CKk5NX4d.mjs";
|
|
7
|
+
import { i as saveDiscoveredPlatform, n as promptPlatformUrl, t as discoverPlatform } from "./platform-cmd-DRxCOTwy.mjs";
|
|
8
|
+
import { t as connectCloudflare } from "./cloudflare-connect-DloREDlc.mjs";
|
|
7
9
|
//#region src/cli/connect.ts
|
|
8
10
|
async function selectVoidPlatform(interactive) {
|
|
9
11
|
if (!interactive) throw new Error("connect: Supply a Void platform URL in non-interactive mode.");
|
|
@@ -1,20 +1,10 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
MAX_SLUG_LENGTH: () => 56,
|
|
9
|
-
validateProjectSlug: () => validateProjectSlug
|
|
10
|
-
});
|
|
11
|
-
function validateProjectSlug(value) {
|
|
12
|
-
const slug = (value ?? "").trim();
|
|
13
|
-
if (slug.length === 0) return "Project slug is required.";
|
|
14
|
-
if (!(slug.length === 1 ? /^[a-z0-9]$/.test(slug) : /^[a-z0-9][a-z0-9-]*[a-z0-9]$/.test(slug))) return "Slug must be lowercase alphanumeric with dashes.";
|
|
15
|
-
if (slug.length > 56) return `Slug must be at most 56 characters (it forms the email sender <slug>+noreply@).`;
|
|
16
|
-
}
|
|
17
|
-
//#endregion
|
|
1
|
+
import { c as import_picocolors } from "./output-urU86XeT.mjs";
|
|
2
|
+
import { s as getSiteDomain } from "./auth-B9_D6ygs.mjs";
|
|
3
|
+
import { d as writeProjectConfig, t as attachSelectedPlatform } from "./project-CWNIPoXc.mjs";
|
|
4
|
+
import { B as text, E as confirm, I as select, T as cancel, W as isCancel, j as log } from "./dist-Dn6nn2IU.mjs";
|
|
5
|
+
import { t as PlatformApiError } from "./client-PdAJ-F0t.mjs";
|
|
6
|
+
import { t as validateProjectSlug } from "./project-slug-23TpquG4.mjs";
|
|
7
|
+
import { n as inferDefaultSlug } from "./resolve-project-Xvis70DG.mjs";
|
|
18
8
|
//#region src/cli/prompt.ts
|
|
19
9
|
async function promptProjectSetupAction(message = "Set up a Void project:", options = {}) {
|
|
20
10
|
const result = await select({
|
|
@@ -79,11 +69,6 @@ async function promptProjectSlug(defaultSlug) {
|
|
|
79
69
|
}
|
|
80
70
|
//#endregion
|
|
81
71
|
//#region src/cli/create-project.ts
|
|
82
|
-
var create_project_exports = /* @__PURE__ */ __exportAll({
|
|
83
|
-
createProjectWithSlugRetry: () => createProjectWithSlugRetry,
|
|
84
|
-
isRetryableCreateError: () => isRetryableCreateError,
|
|
85
|
-
promptAndCreateProject: () => promptAndCreateProject
|
|
86
|
-
});
|
|
87
72
|
/**
|
|
88
73
|
* Prompts for a slug and calls `client.createProject`, re-prompting whenever
|
|
89
74
|
* the server rejects with a retryable error (e.g. free-plan short-slug 403,
|
|
@@ -136,4 +121,4 @@ function isSlugRelatedError(error) {
|
|
|
136
121
|
return `${error.code ?? ""} ${error.body ?? ""}`.toLowerCase().includes("slug");
|
|
137
122
|
}
|
|
138
123
|
//#endregion
|
|
139
|
-
export {
|
|
124
|
+
export { promptProjectSetupAction as a, promptProjectSelection as i, isRetryableCreateError as n, promptAndCreateProject as r, createProjectWithSlugRetry as t };
|