void 1.3.0 → 1.4.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 (152) hide show
  1. package/dist/{account-cmd-B4i71m7k.mjs → account-cmd-HP8bixYo.mjs} +3 -3
  2. package/dist/{application-analysis-DYdVoMAY.mjs → application-analysis-DDOQwiXk.mjs} +11 -7
  3. package/dist/{application-routing-C8EqRDfv.mjs → application-routing-4719u_kf.mjs} +1 -1
  4. package/dist/auth-g2TQbDLD.d.mts +70 -0
  5. package/dist/{auth-link-BKwHPbdv.mjs → auth-link-CedYpDCy.mjs} +3 -3
  6. package/dist/{auth-router-DqLx8E0F.mjs → auth-router-vafo7x8w.mjs} +11 -6
  7. package/dist/{better-auth-shared-DVk2DkTW.d.mts → better-auth-shared-BHB8kiTE.d.mts} +1 -1
  8. package/dist/{build-cmd-Dy4psnt1.mjs → build-cmd-9vUAQ1_V.mjs} +1 -1
  9. package/dist/{cache-DV37S6dl.mjs → cache-jvwLNb0h.mjs} +1 -1
  10. package/dist/{cancel-deploy-DMPyu1Vt.mjs → cancel-deploy-Dw0UmWKO.mjs} +1 -1
  11. package/dist/{cf-build-output-Bapzc_8Z.mjs → cf-build-output-XpNR9zoh.mjs} +20 -4
  12. package/dist/cf-build-output-bd8Uwv1P.mjs +1 -0
  13. package/dist/{cf-worker-settings-BECvvTVd.mjs → cf-worker-settings-Dg27RzyT.mjs} +11 -5
  14. package/dist/cli/cli.mjs +25 -25
  15. package/dist/cli/cloudflare-operation-process.mjs +9 -3
  16. package/dist/cli/env-schema-probe.mjs +2 -2
  17. package/dist/{client-BEMtySaV.mjs → client-B3LnB_bE.mjs} +1 -1
  18. package/dist/client-BZb9j66F.mjs +1 -0
  19. package/dist/{cloudflare-auth-Byo_0_N9.mjs → cloudflare-auth-DyD_kVFr.mjs} +1 -1
  20. package/dist/{cloudflare-cmd-BaqIigwI.mjs → cloudflare-cmd-D-b_u3T4.mjs} +2 -2
  21. package/dist/{cloudflare-config-DchHxPTo.mjs → cloudflare-config-CH1AylZT.mjs} +14 -3
  22. package/dist/{cloudflare-connect-pNLQmr_e.mjs → cloudflare-connect-zTJh8UnN.mjs} +2 -2
  23. package/dist/{cloudflare-operations-vP3b5CQf.mjs → cloudflare-operations-Bc-7fN44.mjs} +4 -4
  24. package/dist/{cloudflare-operations-PCM4wucv.mjs → cloudflare-operations-BtulCNOg.mjs} +1 -1
  25. package/dist/{config-BU6hMu1W.mjs → config-BV2ASlpn.mjs} +1 -1
  26. package/dist/{config-Du88-7Y8.d.mts → config-CAdZVTLN.d.mts} +2 -0
  27. package/dist/config-D-6q7EBH.mjs +87 -0
  28. package/dist/{config-DHgSEWT7.mjs → config-OFOAimzt.mjs} +5 -3
  29. package/dist/config-entry.d.mts +1 -1
  30. package/dist/{config-BIaXIkkv.mjs → config-tqMM6DwY.mjs} +1 -1
  31. package/dist/{connect-DwVsBvVh.mjs → connect-BOM6zvFX.mjs} +4 -4
  32. package/dist/{create-project-CjzbBlTv.mjs → create-project-Bxd02EHN.mjs} +1 -1
  33. package/dist/{create-project-CgrnvzyA.mjs → create-project-C2K0DN2O.mjs} +1 -1
  34. package/dist/{db-rvo64snS.mjs → db-Cdvr3zwG.mjs} +16 -16
  35. package/dist/{db-types-NGxPwnlt.mjs → db-types-0eCiqYb1.mjs} +1 -1
  36. package/dist/{delete-DWX6dP4M.mjs → delete-lETE6Tpt.mjs} +1 -1
  37. package/dist/deploy-CX94CmKa.mjs +2 -0
  38. package/dist/{deploy-hRPvw8ci.mjs → deploy-CdM-LAxX.mjs} +260 -95
  39. package/dist/{deploy-managed-static-CDYA2p3L.mjs → deploy-managed-static-DjeBFG2c.mjs} +24 -17
  40. package/dist/{deploy-transport-JCxw7QDi.mjs → deploy-transport-DIq_gFTP.mjs} +13 -12
  41. package/dist/deploy.d.mts +2 -0
  42. package/dist/deploy.mjs +7 -5
  43. package/dist/{dispatch-OVLeWW8K.mjs → dispatch-CLa2LThw.mjs} +5 -5
  44. package/dist/{domain-CH5iBD9Y.mjs → domain-DyhNtdYf.mjs} +2 -2
  45. package/dist/{email-CbTO1l78.mjs → email-DM2wDcBN.mjs} +6 -6
  46. package/dist/{email-cloudflare-B8-pq_-W.mjs → email-cloudflare-PMbAev9Q.mjs} +20 -7
  47. package/dist/{env-BBdw236G.mjs → env-78hbN-oI.mjs} +3 -3
  48. package/dist/{env-validation-XcukUlFM.mjs → env-validation-B3VobvXm.mjs} +1 -0
  49. package/dist/{env-validation-BfBVvBNe.mjs → env-validation-BUfFZ6bt.mjs} +1 -1
  50. package/dist/error-pages-CLIJ7aYq.mjs +37 -0
  51. package/dist/gen-BhWBT4iu.mjs +1 -0
  52. package/dist/{gen-CCx3t2Ju.mjs → gen-CFmsUsW1.mjs} +3 -3
  53. package/dist/{github-cmd-BzkRLkbg.mjs → github-cmd-De-_IWbM.mjs} +1 -1
  54. package/dist/{handler-CQv5YDS0.d.mts → handler-BHktmuTL.d.mts} +3 -1
  55. package/dist/{headers-D522zd0A.mjs → headers--vaK_chu.mjs} +1 -1
  56. package/dist/index.d.mts +2 -2
  57. package/dist/index.mjs +68 -33
  58. package/dist/{info-oBm8yK8J.mjs → info-Yg0-V5Rs.mjs} +3 -3
  59. package/dist/{init-CBp_uMve.mjs → init-CDiJQycf.mjs} +31 -16
  60. package/dist/{link-Dt_QXmM4.mjs → link-Dllip08S.mjs} +2 -2
  61. package/dist/{list-DF6asTdt.mjs → list-BYRP6am0.mjs} +2 -2
  62. package/dist/{live-CXJ9yC98.d.mts → live-BllfDuzA.d.mts} +2 -2
  63. package/dist/{local-d1-CUhH3qtj.mjs → local-d1-CAwAs9GH.mjs} +1 -1
  64. package/dist/login-BAPmYnb7.mjs +1 -0
  65. package/dist/{login-BjSyhXlT.mjs → login-PcFy5mlC.mjs} +2 -2
  66. package/dist/{logs-DmvBl6xA.mjs → logs-DmJTBhed.mjs} +2 -2
  67. package/dist/{migrate-BXRHpYwR.mjs → migrate-B8S2xTcb.mjs} +5 -66
  68. package/dist/migrate-BIYTPQE6.mjs +1 -0
  69. package/dist/nitro.mjs +4 -4
  70. package/dist/{node-DtD7ZiPf.mjs → node-CDOPrGSl.mjs} +3 -3
  71. package/dist/operator-cmd-CjazwOyb.mjs +1 -0
  72. package/dist/{operator-cmd-DjZKGGgN.mjs → operator-cmd-DmkmS2wL.mjs} +2 -2
  73. package/dist/pages/client.d.mts +17 -2
  74. package/dist/pages/client.mjs +26 -1
  75. package/dist/pages/index.d.mts +17 -1
  76. package/dist/pages/index.mjs +95 -4
  77. package/dist/pages/protocol.d.mts +2 -2
  78. package/dist/{platform-auth-config-BgnuMbml.mjs → platform-auth-config-CImnfohz.mjs} +3 -3
  79. package/dist/{platform-auth-protection-NjRejttU.mjs → platform-auth-protection-BogLhtHi.mjs} +2 -2
  80. package/dist/{platform-auth-recovery-Ug12d9W5.mjs → platform-auth-recovery-B-mEaWEi.mjs} +2 -2
  81. package/dist/{platform-cmd-BYKLMPCn.mjs → platform-cmd-CV8NxIIn.mjs} +1 -1
  82. package/dist/{platform-cmd-HByuZAO7.mjs → platform-cmd-DZK2ixMl.mjs} +3 -3
  83. package/dist/{platform-domain-DLSQ8GF8.mjs → platform-domain-CRvelPGE.mjs} +2 -2
  84. package/dist/{platform-lifecycle-3dwFJmnq.mjs → platform-lifecycle-CPYY7E9B.mjs} +8 -8
  85. package/dist/{platform-lifecycle-BRqcxerG.mjs → platform-lifecycle-DwXq7kZt.mjs} +1 -1
  86. package/dist/{platform-management-ZZ6bQM5j.mjs → platform-management-BOnGbMSM.mjs} +1 -1
  87. package/dist/{platform-management-ZK6XcbCo.mjs → platform-management-lXdgGgAM.mjs} +1 -1
  88. package/dist/{platform-recovery-8vNE5dNN.mjs → platform-recovery-noaALXnE.mjs} +2 -2
  89. package/dist/{prepare-5BR7Splm.mjs → prepare-BuOS18AM.mjs} +1 -1
  90. package/dist/{prepare-Dseww74N.mjs → prepare-D604Yiyr.mjs} +11 -7
  91. package/dist/prepare-DU-tOpS5.mjs +1 -0
  92. package/dist/{project-cmd-CjLNNxwe.mjs → project-cmd-DBYqAIbe.mjs} +13 -13
  93. package/dist/{project-team-DE5drjcl.mjs → project-team-BjCLgTRC.mjs} +1 -1
  94. package/dist/{project-token-XEYEXfiJ.mjs → project-token-BB6PwaA9.mjs} +1 -1
  95. package/dist/{project-tsconfig-Itv1f4WC.mjs → project-tsconfig-CVvk6Z_e.mjs} +24 -2
  96. package/dist/{project-zero-trust-6VPU8zmV.mjs → project-zero-trust-CWDh1P_t.mjs} +1 -1
  97. package/dist/{protocol-BekmFxCI.d.mts → protocol-D5XDySYu.d.mts} +1 -1
  98. package/dist/{provision-Chq0NRAV.mjs → provision-DfxLCg-d.mjs} +1 -1
  99. package/dist/{provision-B7UFrBH7.mjs → provision-DztLJ97X.mjs} +24 -8
  100. package/dist/{requests-CG-Pj8ze.mjs → requests-D_pbzDyz.mjs} +1 -1
  101. package/dist/{rollback-CIrm2txZ.mjs → rollback-CjfIYsJx.mjs} +2 -2
  102. package/dist/{route-types--PAOzHlH.mjs → route-types-DvEGmPif.mjs} +61 -3
  103. package/dist/runtime/auth.d.mts +2 -2
  104. package/dist/runtime/better-auth-mysql.d.mts +1 -1
  105. package/dist/runtime/better-auth-pg.d.mts +1 -1
  106. package/dist/runtime/better-auth.d.mts +1 -1
  107. package/dist/runtime/client-react.d.mts +1 -1
  108. package/dist/runtime/client-solid.d.mts +1 -1
  109. package/dist/runtime/client-svelte.d.mts +1 -1
  110. package/dist/runtime/client-vue.d.mts +1 -1
  111. package/dist/runtime/client.d.mts +1 -1
  112. package/dist/runtime/handler.d.mts +1 -1
  113. package/dist/runtime/live-client.d.mts +1 -1
  114. package/dist/runtime/live.d.mts +1 -1
  115. package/dist/runtime/routing.d.mts +5 -4
  116. package/dist/runtime/routing.mjs +10 -70
  117. package/dist/runtime/validator.d.mts +1 -1
  118. package/dist/runtime/ws-server.d.mts +3 -3
  119. package/dist/runtime/ws.d.mts +1 -1
  120. package/dist/runtime/ws.mjs +4 -2
  121. package/dist/{secret-BL6g7mF5.mjs → secret-3X0PxmuX.mjs} +9 -12
  122. package/dist/{version-metadata-DmaZNTYW.mjs → version-metadata-D2vfMQzv.mjs} +2 -1
  123. package/dist/{wrangler-CDiEBCdS.mjs → wrangler-I-scB_1t.mjs} +80 -12
  124. package/dist/wrangler-UnwdISay.mjs +1 -0
  125. package/dist/{wrapper-CEiDeCqD.mjs → wrapper-BBl1rC32.mjs} +3 -3
  126. package/dist/{ws-D1zWiB_P.d.mts → ws-B3ClMVDh.d.mts} +3 -2
  127. package/docs/guide/auth.md +1 -1
  128. package/docs/guide/edge/redirects.md +22 -0
  129. package/docs/guide/pages-routing/actions-and-forms.md +24 -0
  130. package/docs/guide/platform/installation/maintenance.md +3 -1
  131. package/docs/guide/server-routing.md +2 -0
  132. package/docs/guide/ssg.md +8 -0
  133. package/docs/integrations/cloudflare.md +16 -7
  134. package/docs/reference/api/auth.md +6 -2
  135. package/docs/reference/api/deploy.md +9 -5
  136. package/docs/reference/api/pages.md +2 -0
  137. package/docs/reference/cli/deploy.md +10 -9
  138. package/docs/reference/config.md +11 -1
  139. package/package.json +8 -7
  140. package/schema.json +4 -0
  141. package/skills/void/SKILL.md +1 -1
  142. package/dist/auth-DkcFflXV.d.mts +0 -42
  143. package/dist/cf-build-output-DlBkWdNU.mjs +0 -1
  144. package/dist/client-DyxPQnF_.mjs +0 -1
  145. package/dist/config-BTu1o3Dc.mjs +0 -49
  146. package/dist/deploy-CtHE2A3R.mjs +0 -2
  147. package/dist/gen-TgXy93Rr.mjs +0 -1
  148. package/dist/login-Cdo8Aco1.mjs +0 -1
  149. package/dist/migrate-COPncCGx.mjs +0 -1
  150. package/dist/operator-cmd-DDiX7Y3f.mjs +0 -1
  151. package/dist/prepare-B3VrSF1Z.mjs +0 -1
  152. package/dist/wrangler-DOPr4jyI.mjs +0 -1
package/dist/index.mjs CHANGED
@@ -3,27 +3,27 @@ import { a as join, c as resolve, i as isAbsolute, n as dirname, o as normalize,
3
3
  import { t as require_picocolors } from "./picocolors-BsDfhxIw.mjs";
4
4
  import { l as inferBindingsFromSource, m as applyBindingOverrides, n as FRAMEWORK_SCAN_DIRS, t as DEFAULT_SCAN_DIRS, u as staticModuleReferences } from "./plugin-inference-CeiB6BG5.mjs";
5
5
  import { n as readProjectPaths, t as assertNoRootSourceConventionConflicts } from "./project-paths-DGu_QZ_Q.mjs";
6
- import { i as loadVoidAuthConfig, n as devAuthConfigImporter, t as AUTH_CONFIG_ENVIRONMENT } from "./config-BTu1o3Dc.mjs";
7
- import { c as getDatabaseCasing, l as getDatabaseDialect, p as readConfig, u as isNodeTarget } from "./config-DHgSEWT7.mjs";
6
+ import { i as loadVoidAuthConfig, n as devAuthConfigImporter, o as viteAuthConfigImporter, t as AUTH_CONFIG_ENVIRONMENT } from "./config-D-6q7EBH.mjs";
7
+ import { c as getDatabaseCasing, l as getDatabaseDialect, p as readConfig, u as isNodeTarget } from "./config-OFOAimzt.mjs";
8
8
  import { f as invalidateSourceAnalysis, o as resolveLayoutIds, p as isRouteEnabledForEnvironment } from "./scan-N9WzdcAl.mjs";
9
9
  import { i as isMemberExpression, n as isIdentifier, r as isLiteral } from "./ast-CsZ_q_gc.mjs";
10
10
  import { n as bindingResolver } from "./ast-bindings-C3yaPs1y.mjs";
11
- import { a as hasSandboxSqliteMigration, c as sandboxContainerConfig, i as assertSandboxNamespaceConfig, n as DEFAULT_SANDBOX_CLASS_NAME, p as scanJobsSync, r as SANDBOX_MIGRATION_TAG, s as resolveSandboxConfig, t as analyzeApplicationSync, u as scanQueuesSync } from "./application-analysis-DYdVoMAY.mjs";
11
+ import { a as hasSandboxSqliteMigration, c as sandboxContainerConfig, i as assertSandboxNamespaceConfig, n as DEFAULT_SANDBOX_CLASS_NAME, p as scanJobsSync, r as SANDBOX_MIGRATION_TAG, s as resolveSandboxConfig, t as analyzeApplicationSync, u as scanQueuesSync } from "./application-analysis-DDOQwiXk.mjs";
12
12
  import { i as voidWarn, n as voidError, r as voidLog, t as setShowTimestamp } from "./log-BMwmN5Ae.mjs";
13
13
  import { t as MagicString } from "./dist-Cegxq8gs.mjs";
14
14
  import { a as validateSsrEntries, n as SSR_SERVER_ENTRY_RELATIVE_PATHS, o as validateSsrEntry, t as SSR_CLIENT_ENTRY_RELATIVE_PATHS } from "./entry-BEM8ZuGP.mjs";
15
15
  import { r as hasEmailHandlers } from "./email-B9ayYQEG.mjs";
16
16
  import { a as resolveDistDir, c as hasDocumentRoutes, n as collectRevalidate, o as resolveWorkerDirName, r as hasRevalidate, s as hasApiRoutes, t as collectPages, u as resolveAssetRoutingPolicy } from "./isr-config-fZaJJ8t7.mjs";
17
- import { n as mergeRoutingRules, t as lintRoutingPhases } from "./headers-D522zd0A.mjs";
17
+ import { n as mergeRoutingRules, t as lintRoutingPhases } from "./headers--vaK_chu.mjs";
18
18
  import { n as readDeploymentPlatform, r as readProjectConfig } from "./project-rqDnVsJN.mjs";
19
- import { a as restoreCloudflarePreviewPointer, r as materializeCloudflareConfig, s as stashCloudflareDeployPointer } from "./cloudflare-config-DchHxPTo.mjs";
20
- import { A as syncWranglerWebSockets, E as resolveLiveBindingConfig, O as syncWranglerBindings, T as readWranglerWebSocketTombstones, a as LIVE_MIGRATION_TAG, b as readRootWranglerConfig, d as ensureWranglerCompatibilityDate, f as ensureWranglerNodejsAlsFlag, g as normalizeWranglerCompatibilityFlags, h as nextDurableObjectMigrationTag, k as syncWranglerDurableObjects, m as hasDurableObjectSqliteMigration, p as findBindingNameOwner, u as ensureWranglerCompat, v as readExistingLiveBindingConfig, x as readWranglerCompat } from "./wrangler-CDiEBCdS.mjs";
21
- import { n as writeLocalD1PersistState, t as resolveLocalD1Target } from "./local-d1-CUhH3qtj.mjs";
19
+ import { c as stashCloudflareDeployPointer, i as materializeCloudflareConfig, o as restoreCloudflarePreviewPointer } from "./cloudflare-config-CH1AylZT.mjs";
20
+ import { A as syncWranglerWebSockets, E as resolveLiveBindingConfig, O as syncWranglerBindings, T as readWranglerWebSocketTombstones, a as LIVE_MIGRATION_TAG, b as readRootWranglerConfig, d as ensureWranglerCompatibilityDate, f as ensureWranglerNodejsAlsFlag, g as normalizeWranglerCompatibilityFlags, h as nextDurableObjectMigrationTag, k as syncWranglerDurableObjects, m as hasDurableObjectSqliteMigration, p as findBindingNameOwner, u as ensureWranglerCompat, v as readExistingLiveBindingConfig, x as readWranglerCompat } from "./wrangler-I-scB_1t.mjs";
21
+ import { n as writeLocalD1PersistState, t as resolveLocalD1Target } from "./local-d1-CAwAs9GH.mjs";
22
22
  import { n as scopedAccessCredentials } from "./cf-access-BM9G0lhO.mjs";
23
23
  import { n as ensurePlatformProxyAccess } from "./cf-access-CWP4avfP.mjs";
24
24
  import { a as getApiUrl, c as getToken, o as getProxyUrl } from "./auth-B6iOCjKI.mjs";
25
- import { r as writeFileIfChanged } from "./project-tsconfig-Itv1f4WC.mjs";
26
- import { a as readDeployBuildQueueNames, r as cloudflareQueueName, s as drizzlePlugin, t as generateQueueResolverSource } from "./dispatch-OVLeWW8K.mjs";
25
+ import { i as writeFileIfChanged, r as syncAuthTypesInProjectTsconfig } from "./project-tsconfig-CVvk6Z_e.mjs";
26
+ import { a as readDeployBuildQueueNames, r as cloudflareQueueName, s as drizzlePlugin, t as generateQueueResolverSource } from "./dispatch-CLa2LThw.mjs";
27
27
  import { _ as parseCapturedMessage, a as DEV_INBOX_ENV_VAR, c as DEV_INBOX_TOKEN_ENV_VAR, f as clearDevBuffer, g as listDevMessages, l as DEV_INBOX_TOKEN_HEADER, m as findDevMessage, n as DEV_INBOX_ACK_VALUE, o as DEV_INBOX_MAX_CAPTURE_BYTES, s as DEV_INBOX_PREFIX, t as DEV_INBOX_ACK_HEADER, u as DEV_INBOX_TOKEN_QUERY, v as pushToDevBuffer } from "./dev-inbox-D0jxye_D.mjs";
28
28
  import { n as scanWranglerDotenvKeys } from "./dotenv-CNazY3-w.mjs";
29
29
  import { a as findReservedEnvKeys, c as reservedEnvKeysMessage, i as findLegacyEnvFiles, l as resolveRemoteMode, o as isClientEnvKey, r as LOCAL_ENV_FILE, s as loadLocalEnv } from "./env-BaMz0j7H.mjs";
@@ -32,18 +32,18 @@ import { t as loadUserEnvFile } from "./load-user-env-DD5qveNU.mjs";
32
32
  import { n as INTERNAL_BINDING_PREFIXES, t as INTERNAL_BINDING_EXACT_NAMES } from "./env-raw-D74P4ebM.mjs";
33
33
  import { t as ASSET_EXTENSIONS } from "./routing-assets-DdSFxoLp.mjs";
34
34
  import { t as assertNoPrerenderFailures } from "./prerender-render-CaShbHJ3.mjs";
35
- import { r as selectNativeVersionMetadataBinding, t as CLOUDFLARE_PRESERVE_BINDINGS_BUILD_ENV } from "./version-metadata-DmaZNTYW.mjs";
36
- import { d as isGeneratedAssetHeaders, f as resolveAssetWorkerBypass, g as prerenderPagesNode, h as prerenderPages, n as SEND_EMAIL_BINDING, u as isAssetBypassRule } from "./email-cloudflare-B8-pq_-W.mjs";
35
+ import { r as selectNativeVersionMetadataBinding, t as CLOUDFLARE_PRESERVE_BINDINGS_BUILD_ENV } from "./version-metadata-D2vfMQzv.mjs";
36
+ import { d as isGeneratedAssetHeaders, f as resolveAssetWorkerBypass, g as prerenderPagesNode, h as prerenderPages, n as SEND_EMAIL_BINDING, u as isAssetBypassRule } from "./email-cloudflare-PMbAev9Q.mjs";
37
37
  import { r as defer } from "./validation-error-Dg9Recn1.mjs";
38
38
  import { i as safeJsonStringify } from "./protocol-DimNxVRr.mjs";
39
- import { n as completeApplicationAnalysis } from "./application-routing-C8EqRDfv.mjs";
40
- import { n as generateQueueTypes, t as generateRouteTypes } from "./route-types--PAOzHlH.mjs";
39
+ import { n as completeApplicationAnalysis } from "./application-routing-4719u_kf.mjs";
40
+ import { a as syncAuthTypesFile, i as removeAuthTypesIfPresent, n as generateQueueTypes, t as generateRouteTypes } from "./route-types-DvEGmPif.mjs";
41
41
  import { a as defineMiddleware, c as defineScheduled, i as defineHead, n as basicAuth, o as defineQueue, r as defineHandler, s as defineRender, t as VoidAssetRewriteError } from "./handler-BZ1t7-Rv.mjs";
42
42
  import module, { builtinModules, createRequire } from "node:module";
43
43
  import { chmodSync, closeSync, existsSync, mkdirSync, openSync, readFileSync, realpathSync, rmSync, statSync, writeFileSync, writeSync } from "node:fs";
44
44
  import { cloudflare } from "@cloudflare/vite-plugin";
45
- import { fileURLToPath, pathToFileURL } from "node:url";
46
45
  import { createRunnableDevEnvironment, defaultServerConditions, isRunnableDevEnvironment, loadEnv, normalizePath, parseSync, resolveEnvPrefix } from "vite";
46
+ import { fileURLToPath, pathToFileURL } from "node:url";
47
47
  import { appendSqliteClassMigration } from "@void/deploy-core";
48
48
  import { randomBytes, timingSafeEqual } from "node:crypto";
49
49
  import { homedir } from "node:os";
@@ -489,7 +489,7 @@ function readVoidDevCredentials(root) {
489
489
  */
490
490
  async function runAiSetupPrompt(root, token, apiUrl, server) {
491
491
  const { select, text, isCancel, log } = await import("./dist-B1PLt4_8.mjs");
492
- const { PlatformClient } = await import("./client-DyxPQnF_.mjs");
492
+ const { PlatformClient } = await import("./client-BZb9j66F.mjs");
493
493
  const { attachSelectedPlatform, writeProjectConfig } = await import("./project-zdB3fs9G.mjs");
494
494
  const { inferDefaultSlug } = await import("./resolve-project-DD1vu8s9.mjs");
495
495
  const { printSuccess } = await import("./output-BW9uK099.mjs");
@@ -519,7 +519,7 @@ async function runAiSetupPrompt(root, token, apiUrl, server) {
519
519
  let slug;
520
520
  if (result === "__create__") {
521
521
  const { validateProjectSlug } = await import("./project-slug-6cyz8E7k.mjs");
522
- const { createProjectWithSlugRetry } = await import("./create-project-CgrnvzyA.mjs");
522
+ const { createProjectWithSlugRetry } = await import("./create-project-C2K0DN2O.mjs");
523
523
  let created;
524
524
  try {
525
525
  created = await createProjectWithSlugRetry(client, inferDefaultSlug(root), async (defaultSlug) => {
@@ -2154,6 +2154,27 @@ function pushDefaultErrorPageHelpers(lines, options) {
2154
2154
  lines.push("app.onError(__errorRenderer.onError);");
2155
2155
  }
2156
2156
  /**
2157
+ * Returns a lookup that gives each key its own identifier suffix. The suffix
2158
+ * keeps the key's ASCII letters and digits; keys that clean up to the same
2159
+ * text (user-list.ts and user_list.ts, or two CJK names of one length) get a
2160
+ * counter so the generated consts never clash.
2161
+ */
2162
+ function createIdentifierNames() {
2163
+ const byKey = /* @__PURE__ */ new Map();
2164
+ const used = /* @__PURE__ */ new Set();
2165
+ return (key) => {
2166
+ const known = byKey.get(key);
2167
+ if (known !== void 0) return known;
2168
+ let base = "";
2169
+ for (const char of key.split("")) base += char >= "0" && char <= "9" || char >= "a" && char <= "z" || char >= "A" && char <= "Z" ? char : "_";
2170
+ let name = base;
2171
+ for (let n = 2; used.has(name); n++) name = `${base}_${n}`;
2172
+ used.add(name);
2173
+ byKey.set(key, name);
2174
+ return name;
2175
+ };
2176
+ }
2177
+ /**
2157
2178
  * Generate the code for the virtual route table module (virtual:void-routes).
2158
2179
  * This module creates a Hono app with:
2159
2180
  * - Middleware registered via app.use()
@@ -2253,9 +2274,10 @@ function compileRouteTable(scan, routesDir, middlewareDir, jobsDir, queuesDir, s
2253
2274
  lines.push("");
2254
2275
  }
2255
2276
  const seenFiles = /* @__PURE__ */ new Set();
2277
+ const routeNames = createIdentifierNames();
2256
2278
  for (const route of scan.routes) {
2257
2279
  const filePath = `${routesDir}/${route.filePath}`;
2258
- const loaderName = `_load_${route.filePath.replace(/[^a-zA-Z0-9]/g, "_")}`;
2280
+ const loaderName = `_load_${routeNames(route.filePath)}`;
2259
2281
  if (!seenFiles.has(route.filePath)) {
2260
2282
  seenFiles.add(route.filePath);
2261
2283
  lines.push(`const ${loaderName} = __createModuleLoader(() => import(${JSON.stringify(filePath)}), ${JSON.stringify(options.dev !== true)});`);
@@ -2295,11 +2317,12 @@ function compileRouteTable(scan, routesDir, middlewareDir, jobsDir, queuesDir, s
2295
2317
  lines.push("export const VoidLiveStreamDurableObject = __createLiveDurableObject();");
2296
2318
  lines.push("");
2297
2319
  }
2298
- if (pages && scan.pages.pages.length > 0) compilePageRoutes(lines, scan, pages, options);
2320
+ const pageNames = createIdentifierNames();
2321
+ if (pages && scan.pages.pages.length > 0) compilePageRoutes(lines, scan, pages, options, pageNames);
2299
2322
  for (let i = 0; i < webSockets.length; i++) lines.push(`app.all(${JSON.stringify(webSockets[i].pattern)}, __markRouteHandler((c) => __forwardWebSocketRequest(c.req.raw, c.env, __voidWebSocketRoutes[${i}])));`);
2300
2323
  if (webSockets.length > 0) lines.push("");
2301
2324
  if (pages && scan.pages.pages.length > 0) lines.push(`app.notFound(__createPagesFallback({ routing: __routingRuntime, errors: __errorRenderer, assetsDir: ${JSON.stringify(options.assetsDir)}, fallbackRules: ${fallbackRulesJson} }));`);
2302
- compilePrerenderCollector(lines, scan, ssr, options);
2325
+ compilePrerenderCollector(lines, scan, ssr, options, pageNames);
2303
2326
  if (ssr) {
2304
2327
  lines.push(`const getClientAssetTags = __createClientAssetTags(${JSON.stringify({
2305
2328
  entryId: ssr.clientEntryRelativePath,
@@ -2548,7 +2571,7 @@ function compileRouteTable(scan, routesDir, middlewareDir, jobsDir, queuesDir, s
2548
2571
  lines.push(`export default app;`);
2549
2572
  return lines.join("\n");
2550
2573
  }
2551
- function compilePrerenderCollector(lines, scan, ssr, options) {
2574
+ function compilePrerenderCollector(lines, scan, ssr, options, pageNames) {
2552
2575
  const staticPaths = scan.pages.pages.filter((page) => page.shouldPrerender && page.params.length === 0 && !page.catchAll).map((page) => page.pattern);
2553
2576
  const dynamicPages = scan.pages.pages.filter((page) => page.shouldPrerender && page.hasGetPrerenderPaths && (page.params.length > 0 || page.catchAll));
2554
2577
  const explicitPaths = options.explicitPrerenderPaths ?? [];
@@ -2568,7 +2591,7 @@ function compilePrerenderCollector(lines, scan, ssr, options) {
2568
2591
  lines.push(` const paths = [];`);
2569
2592
  for (const path of staticPaths) lines.push(` paths.push(${JSON.stringify(path)});`);
2570
2593
  for (const page of dynamicPages) {
2571
- const loaderName = `_pload_${page.componentId.replace(/[^a-zA-Z0-9]/g, "_")}`;
2594
+ const loaderName = `_pload_${pageNames(page.componentId)}`;
2572
2595
  lines.push(` {`);
2573
2596
  lines.push(` const mod = await ${loaderName}();`);
2574
2597
  lines.push(` if (typeof mod.getPrerenderPaths === "function") {`);
@@ -2601,7 +2624,7 @@ function compilePrerenderCollector(lines, scan, ssr, options) {
2601
2624
  lines.push(`}`);
2602
2625
  lines.push("");
2603
2626
  }
2604
- function compilePageRoutes(lines, scan, pages, options) {
2627
+ function compilePageRoutes(lines, scan, pages, options, pageNames) {
2605
2628
  lines.push(`import { renderPage } from "virtual:void-pages-renderer";`);
2606
2629
  if (options.dev) lines.push(`import { getVoidPagesDevCss } from "virtual:void-pages-dev-assets";`);
2607
2630
  const hasIslandPages = scan.pages.pages.some((p) => p.renderMode === "island");
@@ -2666,7 +2689,7 @@ function compilePageRoutes(lines, scan, pages, options) {
2666
2689
  })}${devCssOption} }, __loadPagesManifest);`);
2667
2690
  const seenServerFiles = /* @__PURE__ */ new Set();
2668
2691
  for (const page of scan.pages.pages) {
2669
- const safeId = page.componentId.replace(/[^a-zA-Z0-9]/g, "_");
2692
+ const safeId = pageNames(page.componentId);
2670
2693
  let serverImportPath = null;
2671
2694
  if (page.serverPath) serverImportPath = `${pages.pagesDir}/${page.serverPath}`;
2672
2695
  if (serverImportPath && !seenServerFiles.has(serverImportPath)) {
@@ -2722,7 +2745,7 @@ const serveWithAssets = __createAssetFallback(${JSON.stringify({
2722
2745
  * proxy-backed versions.
2723
2746
  */
2724
2747
  function compileWorkerEntry(options = {}) {
2725
- const { hasQueues = false, versionMetadataBinding, remote, assetsDir = "assets", webSocketClasses = [], runtimeEnvPath = "void/_env", runtimeEmailPath = "void/email", envSchemaModule, sandbox, serveSpaFallback = false, hasEmail = false, live, dev = false, isr, notFound = "none", durableObjects = [] } = options;
2748
+ const { hasQueues = false, versionMetadataBinding, alwaysUseHttps = false, remote, assetsDir = "assets", webSocketClasses = [], runtimeEnvPath = "void/_env", runtimeEmailPath = "void/email", envSchemaModule, sandbox, serveSpaFallback = false, hasEmail = false, live, dev = false, isr, notFound = "none", durableObjects = [] } = options;
2726
2749
  const remotePath = remote?.remotePath;
2727
2750
  const remoteBindingNames = JSON.stringify(remote?.bindingNames);
2728
2751
  const createRemoteEnvCall = `createRemoteEnv(env${remote?.bindingNames ? `, ${remoteBindingNames}` : ""})`;
@@ -2758,7 +2781,7 @@ const __filterInternalBindings = (env) => __filterBindings(env, ${JSON.stringify
2758
2781
  app, assets: serveWithAssets, withRawEnv: __withRawEnv, withRuntimeEnv,
2759
2782
  filterBindings: __filterInternalBindings,
2760
2783
  internalRoute: __voidHandleInternalRoute,
2761
- collectPrerenderPaths: __voidCollectPrerenderPaths${versionMetadataBinding ? ", versionMetadataBinding: " + JSON.stringify(versionMetadataBinding) : ""}${envSchemaModule ? ", validateEnv: _validateEnvOnce" : ""}${remotePath ? ", remoteEnv: (env) => " + createRemoteEnvCall : ""}${hasEmail ? ", emailReceipt: __handleEmailReceipt" : ""}${isr ? ", isr: { deploymentId: __VOID_ISR_DEPLOYMENT_ID, handle: (request, env, ctx, render) => handleIsr(request, env, ctx, { revalidate: __VOID_ISR_REVALIDATE, pages: __VOID_ISR_PAGES, pathRevalidate: __VOID_ISR_PATH_REVALIDATE, deploymentId: __VOID_ISR_DEPLOYMENT_ID, queryAllowlist: " + JSON.stringify(isr.queryAllowlist) + " }, render) }" : ""}
2784
+ collectPrerenderPaths: __voidCollectPrerenderPaths${alwaysUseHttps ? ", alwaysUseHttps: true" : ""}${versionMetadataBinding ? ", versionMetadataBinding: " + JSON.stringify(versionMetadataBinding) : ""}${envSchemaModule ? ", validateEnv: _validateEnvOnce" : ""}${remotePath ? ", remoteEnv: (env) => " + createRemoteEnvCall : ""}${hasEmail ? ", emailReceipt: __handleEmailReceipt" : ""}${isr ? ", isr: { deploymentId: __VOID_ISR_DEPLOYMENT_ID, handle: (request, env, ctx, render) => handleIsr(request, env, ctx, { revalidate: __VOID_ISR_REVALIDATE, pages: __VOID_ISR_PAGES, pathRevalidate: __VOID_ISR_PATH_REVALIDATE, deploymentId: __VOID_ISR_DEPLOYMENT_ID, queryAllowlist: " + JSON.stringify(isr.queryAllowlist) + " }, render) }" : ""}
2762
2785
  })`;
2763
2786
  const remoteEnvSwap = remotePath ? ` if (env.__VOID_REMOTE === "1") env = ${createRemoteEnvCall};\n` : "";
2764
2787
  const scheduledHandler = `async function handleScheduled(controller, env, ctx) {
@@ -3296,7 +3319,7 @@ function migrationPlugin(root, dialect, databaseId = "local", persistRoot = join
3296
3319
  const hasSqlMigrations = existsSync(migrationsDir);
3297
3320
  if (!hasSqlMigrations && !auth?.enabled) return;
3298
3321
  const migrateAuth = async (databaseUrl) => {
3299
- const { runLocalVoidAuthMigrations } = await import("./node-DtD7ZiPf.mjs");
3322
+ const { runLocalVoidAuthMigrations } = await import("./node-CDOPrGSl.mjs");
3300
3323
  await runLocalVoidAuthMigrations(root, dialect, persistRoot, databaseId, auth?.configPath, databaseUrl, devAuthConfigImporter(server));
3301
3324
  };
3302
3325
  const mysqlAuth = dialect === "mysql" && auth?.enabled === true;
@@ -3581,19 +3604,20 @@ function createFrameworkPlugins(input) {
3581
3604
  const syncFrameworkCompat = (compat) => {
3582
3605
  if (ensureWranglerCompatibilityDate(root, compat.compatibilityDate)) voidLog("Synced compatibility_date to Cloudflare config");
3583
3606
  };
3607
+ const ensureFrameworkCompat = () => ensureWranglerCompat(root, config, void 0, { rootWrangler: true });
3584
3608
  const wranglerCompatPlugin = {
3585
3609
  name: "void:wrangler-compat",
3586
3610
  enforce: "pre",
3587
3611
  config(_, env) {
3588
- syncFrameworkCompat(ensureWranglerCompat(root, config));
3612
+ syncFrameworkCompat(ensureFrameworkCompat());
3589
3613
  if (env.command !== "serve") return;
3590
3614
  if (ensureWranglerNodejsAlsFlag(root)) voidLog("Synced nodejs_als to Cloudflare config");
3591
3615
  },
3592
3616
  buildStart() {
3593
- syncFrameworkCompat(ensureWranglerCompat(root, config));
3617
+ syncFrameworkCompat(ensureFrameworkCompat());
3594
3618
  },
3595
3619
  configureServer() {
3596
- syncFrameworkCompat(ensureWranglerCompat(root, config));
3620
+ syncFrameworkCompat(ensureFrameworkCompat());
3597
3621
  }
3598
3622
  };
3599
3623
  const syncFrameworkBindings = (command) => {
@@ -3808,6 +3832,7 @@ function honoMiddleware(getApp) {
3808
3832
  response.headers.forEach((value, key) => {
3809
3833
  res.setHeader(key, value);
3810
3834
  });
3835
+ res.setHeader("set-cookie", response.headers.getSetCookie());
3811
3836
  if (response.body) {
3812
3837
  const reader = response.body.getReader();
3813
3838
  while (true) {
@@ -4357,7 +4382,11 @@ function routingPlugin(root, options) {
4357
4382
  "routes.d.ts",
4358
4383
  "queues.d.ts",
4359
4384
  ...options.target ? ["app.ts", "index.ts"] : ["entry.ts"],
4360
- ...compileOptions.auth ? ["better-auth-db.ts", "better-auth-schema.ts"] : []
4385
+ ...compileOptions.auth ? [
4386
+ "better-auth-db.ts",
4387
+ "better-auth-schema.ts",
4388
+ ...compileOptions.auth.authConfigPath ? ["auth.d.ts"] : []
4389
+ ] : []
4361
4390
  ];
4362
4391
  const parts = [];
4363
4392
  for (const file of files) {
@@ -4372,14 +4401,17 @@ function routingPlugin(root, options) {
4372
4401
  if (authConfigStale && environment) environment.moduleGraph.invalidateAll();
4373
4402
  authConfigStale = false;
4374
4403
  try {
4375
- return await loadVoidAuthConfig(configPath, environment && ((path) => environment.runner.import(path)));
4404
+ return await loadVoidAuthConfig(configPath, environment ? (path) => environment.runner.import(path) : viteAuthConfigImporter(root, resolvedConfig?.mode, resolvedConfig?.resolve));
4376
4405
  } catch (error) {
4377
4406
  authConfigStale = true;
4378
4407
  throw error;
4379
4408
  }
4380
4409
  }
4381
4410
  async function writeAuthDatabaseFiles() {
4382
- if (!compileOptions.auth) return;
4411
+ if (!compileOptions.auth) {
4412
+ if (removeAuthTypesIfPresent(outDir)) syncAuthTypesInProjectTsconfig(root);
4413
+ return;
4414
+ }
4383
4415
  const { generateVoidAuthDatabaseModule, generateVoidAuthDrizzleSchema } = await import("./drizzle-9TubSZvI.mjs");
4384
4416
  const authRuntime = {
4385
4417
  dialect: compileOptions.auth.dialect,
@@ -4397,6 +4429,8 @@ function routingPlugin(root, options) {
4397
4429
  schemaImportPath: authSchemaPath,
4398
4430
  drizzleAdapterPath
4399
4431
  }));
4432
+ syncAuthTypesFile(compileOptions.auth.authConfigPath, outDir);
4433
+ syncAuthTypesInProjectTsconfig(root);
4400
4434
  }
4401
4435
  let resolvedConfig = null;
4402
4436
  let isrRevalidate;
@@ -4523,6 +4557,7 @@ function routingPlugin(root, options) {
4523
4557
  const policy = resolveCurrentAssetRoutingPolicy();
4524
4558
  writeFileIfChanged(join(outDir, "entry.ts"), compileWorkerEntry({
4525
4559
  versionMetadataBinding: options.getVersionMetadataBinding?.(),
4560
+ alwaysUseHttps: options.routing?.alwaysUseHttps === true && resolvedConfig?.command === "build" && !compileOptions.managedDispatch,
4526
4561
  hasQueues: scan.queues.length > 0,
4527
4562
  remote,
4528
4563
  assetsDir: resolvedConfig?.build.assetsDir,
@@ -5543,7 +5578,7 @@ function voidPlugin(options) {
5543
5578
  dir: assetRoutingPublicDir,
5544
5579
  routing: config.routing
5545
5580
  });
5546
- if (!managedCloudflareBuild && (rules.headerRules.length > 0 || rules.redirectRules.length > 0 || (rules.fallbackRules?.length ?? 0) > 0)) {
5581
+ if (!managedCloudflareBuild && (config.routing?.alwaysUseHttps === true || rules.headerRules.length > 0 || rules.redirectRules.length > 0 || (rules.fallbackRules?.length ?? 0) > 0)) {
5547
5582
  policy.assetConfig.run_worker_first = ["/**"];
5548
5583
  if (rules.fallbackRules?.length && policy.assetConfig.not_found_handling === "single-page-application") {
5549
5584
  policy.assetConfig.not_found_handling = "none";
@@ -1,8 +1,8 @@
1
1
  import { a as join, s as relative } from "./dist-ipQi0Q8y.mjs";
2
2
  import { a as deriveWebSocketClassNameFromName, o as inferWebSocketResourceName } from "./plugin-inference-CeiB6BG5.mjs";
3
- import { p as readConfig } from "./config-DHgSEWT7.mjs";
4
- import { d as deriveDurableResourceIdentity, f as inferDurableResourceName, t as analyzeApplicationSync } from "./application-analysis-DYdVoMAY.mjs";
5
- import { n as VOID_LOCK_FILE } from "./cloudflare-config-DchHxPTo.mjs";
3
+ import { p as readConfig } from "./config-OFOAimzt.mjs";
4
+ import { d as deriveDurableResourceIdentity, f as inferDurableResourceName, t as analyzeApplicationSync } from "./application-analysis-DDOQwiXk.mjs";
5
+ import { n as VOID_LOCK_FILE } from "./cloudflare-config-CH1AylZT.mjs";
6
6
  import { existsSync, readFileSync } from "node:fs";
7
7
  import { isRecord } from "@void/deploy-core";
8
8
  //#region src/cli/info.ts
@@ -1,28 +1,28 @@
1
1
  import { a as join, c as resolve, i as isAbsolute, n as dirname, s as relative, t as basename } from "./dist-ipQi0Q8y.mjs";
2
2
  import { r as detectFramework } from "./plugin-inference-CeiB6BG5.mjs";
3
3
  import { n as readProjectPaths, o as TYPED_CONFIG_FILE } from "./project-paths-DGu_QZ_Q.mjs";
4
- import { c as getDatabaseCasing, l as getDatabaseDialect, p as readConfig, s as databaseConfigValue } from "./config-DHgSEWT7.mjs";
4
+ import { c as getDatabaseCasing, l as getDatabaseDialect, p as readConfig, s as databaseConfigValue } from "./config-OFOAimzt.mjs";
5
5
  import { t as MagicString } from "./dist-Cegxq8gs.mjs";
6
6
  import { c as writeDeploymentPlatform, n as readDeploymentPlatform, r as readProjectConfig, t as attachSelectedPlatform, u as writeProjectConfig } from "./project-rqDnVsJN.mjs";
7
- import { r as materializeCloudflareConfig } from "./cloudflare-config-DchHxPTo.mjs";
8
- import { M as writeProvisionedWranglerConfig, i as LATEST_KNOWN_COMPAT_DATE } from "./wrangler-CDiEBCdS.mjs";
7
+ import { i as materializeCloudflareConfig } from "./cloudflare-config-CH1AylZT.mjs";
8
+ import { F as canRewriteVoidProjectConfig, L as writeVoidProjectConfig, M as writeProvisionedWranglerConfig, i as LATEST_KNOWN_COMPAT_DATE } from "./wrangler-I-scB_1t.mjs";
9
9
  import { i as readPackageJson, n as hasPackageDependency } from "./package-json-BjYqR-So.mjs";
10
10
  import { c as getToken } from "./auth-B6iOCjKI.mjs";
11
- import { n as ensureProjectTsconfig, t as createProjectTsconfig } from "./project-tsconfig-Itv1f4WC.mjs";
11
+ import { n as ensureProjectTsconfig, t as createProjectTsconfig } from "./project-tsconfig-CVvk6Z_e.mjs";
12
12
  import { t as parseDotenvFile } from "./dotenv-CNazY3-w.mjs";
13
- import { r as writeDrizzleConfig, t as PLACEHOLDER_DB_URL } from "./config-BIaXIkkv.mjs";
13
+ import { r as writeDrizzleConfig, t as PLACEHOLDER_DB_URL } from "./config-tqMM6DwY.mjs";
14
14
  import { A as confirm, K as select, L as log, O as cancel, X as text, tt as isCancel } from "./dist-Cor9XGoz.mjs";
15
15
  import { n as getOwnVersion, r as getPackageDir, t as detectAgents } from "./agents-CuNtT0D_.mjs";
16
- import { r as PlatformClient } from "./client-BEMtySaV.mjs";
16
+ import { r as PlatformClient } from "./client-B3LnB_bE.mjs";
17
17
  import { l as formatUrl, m as printSuccess, p as note } from "./output-BpgYODYx.mjs";
18
- import { a as promptProjectSelection, r as promptAndCreateProject } from "./create-project-CjzbBlTv.mjs";
18
+ import { a as promptProjectSelection, r as promptAndCreateProject } from "./create-project-Bxd02EHN.mjs";
19
19
  import { s as formatProjectCommand } from "./cloudflare-process-8jEYIeim.mjs";
20
20
  import { i as hasLocalLockfile, n as drizzleKitBin, r as findInstalledYarnPnpRuntime, t as buildDrizzleKitSpawnEnv } from "./yarn-pnp-DLbEFMT0.mjs";
21
- import { t as promptForLoginToken } from "./login-BjSyhXlT.mjs";
22
- import { i as saveDiscoveredPlatform, t as discoverPlatform } from "./platform-cmd-HByuZAO7.mjs";
23
- import { t as connectCloudflare } from "./cloudflare-connect-pNLQmr_e.mjs";
21
+ import { t as promptForLoginToken } from "./login-PcFy5mlC.mjs";
22
+ import { i as saveDiscoveredPlatform, t as discoverPlatform } from "./platform-cmd-DZK2ixMl.mjs";
23
+ import { t as connectCloudflare } from "./cloudflare-connect-zTJh8UnN.mjs";
24
24
  import { n as snapshotDrizzleOutputs } from "./generate-B1m4Cm4n.mjs";
25
- import { i as writeVoidProjectConfig, o as migrateFrameworkAdapterPaths, r as canRewriteVoidProjectConfig, t as migrateLegacyVoidConfig } from "./migrate-BXRHpYwR.mjs";
25
+ import { i as migrateFrameworkAdapterPaths, t as migrateLegacyVoidConfig } from "./migrate-B8S2xTcb.mjs";
26
26
  import { createRequire } from "node:module";
27
27
  import { existsSync, mkdirSync, readFileSync, readdirSync, writeFileSync } from "node:fs";
28
28
  import { parseSync } from "vite";
@@ -245,7 +245,7 @@ const SCAFFOLD_TOOLCHAIN_OPTIONS = [{
245
245
  label: "Vite",
246
246
  hint: "Uses plain Vite commands without Vite+."
247
247
  }];
248
- const REACT_SCAFFOLD_COMPILER_DEV_DEPENDENCIES = { "oxc-transform-react": "^0.149.0" };
248
+ const REACT_SCAFFOLD_COMPILER_DEV_DEPENDENCIES = { "oxc-transform-react": "^0.152.0" };
249
249
  const SCAFFOLD_FRAMEWORK_OPTIONS = [
250
250
  {
251
251
  value: "react",
@@ -2428,18 +2428,28 @@ export const posts = sqliteTable("posts", {
2428
2428
  });
2429
2429
  `;
2430
2430
  }
2431
+ function demoFiles(root) {
2432
+ const paths = readProjectPaths(root);
2433
+ return {
2434
+ schema: paths.schemaFile,
2435
+ route: join(paths.routesDir, "api", "posts.ts"),
2436
+ client: join(paths.ssrDir, "demo.ts")
2437
+ };
2438
+ }
2431
2439
  /**
2432
2440
  * Scaffolds the "SQL → types → handler → fetch" demo into an existing project.
2433
2441
  * `setupExistingProject` has already declared `void` in `package.json`.
2442
+ * The caller skips the demo when any of its files exists, so these writes never replace user code.
2434
2443
  */
2435
2444
  function scaffoldDemo(root, dialect) {
2436
2445
  const devCommand = getDevCommand(root);
2437
2446
  const paths = readProjectPaths(root);
2447
+ const files = demoFiles(root);
2438
2448
  mkdirSync(paths.dbDir, { recursive: true });
2439
- writeFileSync(paths.schemaFile, demoSchemaSource(dialect));
2449
+ writeFileSync(files.schema, demoSchemaSource(dialect));
2440
2450
  log.step("Created db/schema.ts");
2441
2451
  mkdirSync(join(paths.routesDir, "api"), { recursive: true });
2442
- writeFileSync(join(paths.routesDir, "api", "posts.ts"), `import { defineHandler } from "void";
2452
+ writeFileSync(files.route, `import { defineHandler } from "void";
2443
2453
  import { db } from "void/db";
2444
2454
  import { posts } from "@schema";
2445
2455
 
@@ -2451,7 +2461,7 @@ export const GET = defineHandler(async () => {
2451
2461
  log.step("Created routes/api/posts.ts");
2452
2462
  ensureProjectTsconfig(root, void 0, true, true, { paths });
2453
2463
  mkdirSync(paths.ssrDir, { recursive: true });
2454
- writeFileSync(join(paths.ssrDir, "demo.ts"), `import { fetch } from "void/client";
2464
+ writeFileSync(files.client, `import { fetch } from "void/client";
2455
2465
 
2456
2466
  // Fully typed: response type is inferred from the GET handler's return type,
2457
2467
  // which is derived from the migration schema. No manual types needed.
@@ -2589,8 +2599,13 @@ async function runInitCommand(root, initArgs) {
2589
2599
  linkSkillsForSpecificAgents(root, agents);
2590
2600
  } else log.info("Bundled Void docs: node_modules/void/docs/");
2591
2601
  if (!targeted && !framework) {
2602
+ const existingDemoFiles = Object.values(demoFiles(root)).filter((file) => existsSync(file));
2592
2603
  if (didScaffoldStarter || state.hasRoutes || state.hasMigrations || state.hasPages) log.info("Project already has pages, routes, or migrations, skipping demo");
2593
- else {
2604
+ else if (hasDrizzleSchema(root)) log.info("Project already has a database schema, skipping demo");
2605
+ else if (existingDemoFiles.length > 0) {
2606
+ const names = existingDemoFiles.map((file) => relative(root, file)).join(", ");
2607
+ log.info(`Project already has ${names}, skipping demo`);
2608
+ } else {
2594
2609
  const scaffold = await confirm({ message: "Scaffold demo code? (migration + API route + frontend fetch)" });
2595
2610
  if (isCancel(scaffold)) {
2596
2611
  cancel("Setup cancelled.");
@@ -1,9 +1,9 @@
1
1
  import { r as readProjectConfig, t as attachSelectedPlatform, u as writeProjectConfig } from "./project-rqDnVsJN.mjs";
2
2
  import { c as getToken, s as getSiteDomain } from "./auth-B6iOCjKI.mjs";
3
3
  import { H as outro, L as log, O as cancel } from "./dist-Cor9XGoz.mjs";
4
- import { r as PlatformClient } from "./client-BEMtySaV.mjs";
4
+ import { r as PlatformClient } from "./client-B3LnB_bE.mjs";
5
5
  import { f as import_picocolors, m as printSuccess } from "./output-BpgYODYx.mjs";
6
- import { a as promptProjectSelection, r as promptAndCreateProject } from "./create-project-CjzbBlTv.mjs";
6
+ import { a as promptProjectSelection, r as promptAndCreateProject } from "./create-project-Bxd02EHN.mjs";
7
7
  import { a as resolveProjectBySlug } from "./resolve-project-Xoi6eTWY.mjs";
8
8
  //#region src/cli/link.ts
9
9
  function projectLabel(slug, root, url) {
@@ -1,7 +1,7 @@
1
1
  import { n as readDeploymentPlatform, r as readProjectConfig } from "./project-rqDnVsJN.mjs";
2
2
  import { c as getToken } from "./auth-B6iOCjKI.mjs";
3
3
  import { H as outro, L as log } from "./dist-Cor9XGoz.mjs";
4
- import { r as PlatformClient } from "./client-BEMtySaV.mjs";
4
+ import { r as PlatformClient } from "./client-B3LnB_bE.mjs";
5
5
  import { _ as tablePrefix, c as formatRelativeTime, f as import_picocolors, h as sanitizeTerminalText, i as dim, o as formatCount } from "./output-BpgYODYx.mjs";
6
6
  import { a as resolveProjectBySlug } from "./resolve-project-Xoi6eTWY.mjs";
7
7
  //#region src/cli/list.ts
@@ -42,7 +42,7 @@ async function runListCommand(root, slug) {
42
42
  }
43
43
  async function showCloudflareDeployments(root, slug) {
44
44
  if (slug) throw new Error("project: A project name selects a Void platform project and is not used for direct Cloudflare apps.");
45
- const { readCloudflareWorkerStatus, resolveCloudflareOperationContext } = await import("./cloudflare-operations-PCM4wucv.mjs");
45
+ const { readCloudflareWorkerStatus, resolveCloudflareOperationContext } = await import("./cloudflare-operations-BtulCNOg.mjs");
46
46
  const status = await readCloudflareWorkerStatus(resolveCloudflareOperationContext(root));
47
47
  if (status.versions.length === 0) {
48
48
  outro(`No deployments for ${status.workerName}.`);
@@ -1,5 +1,5 @@
1
- import { r as AuthUser } from "./auth-DkcFflXV.mjs";
2
- import { a as CloudEnv, r as CloudContext } from "./handler-CQv5YDS0.mjs";
1
+ import { r as AuthUser } from "./auth-g2TQbDLD.mjs";
2
+ import { a as CloudEnv, r as CloudContext } from "./handler-BHktmuTL.mjs";
3
3
  //#region src/runtime/live.d.ts
4
4
  type MaybePromise<T> = T | Promise<T>;
5
5
  type LiveControlRequest = {
@@ -1,5 +1,5 @@
1
1
  import { a as join, c as resolve, i as isAbsolute } from "./dist-ipQi0Q8y.mjs";
2
- import { b as readRootWranglerConfig } from "./wrangler-CDiEBCdS.mjs";
2
+ import { b as readRootWranglerConfig } from "./wrangler-I-scB_1t.mjs";
3
3
  import { r as getMiniflareDatabasePath } from "./runner-3uGC-oLF.mjs";
4
4
  import { existsSync, mkdirSync, readFileSync, rmSync, writeFileSync } from "node:fs";
5
5
  import { createHash } from "node:crypto";
@@ -0,0 +1 @@
1
+ export { r as selectPlatformLoginMethod } from "./login-PcFy5mlC.mjs";
@@ -1,6 +1,6 @@
1
1
  import { a as getApiUrl, c as getToken, f as removeToken, l as getTokenSource, m as savePlatformToken, p as runPlatformLogin } from "./auth-B6iOCjKI.mjs";
2
2
  import { H as outro, K as select, L as log, O as cancel, tt as isCancel } from "./dist-Cor9XGoz.mjs";
3
- import { a as isExpiredTokenError, r as PlatformClient } from "./client-BEMtySaV.mjs";
3
+ import { a as isExpiredTokenError, r as PlatformClient } from "./client-B3LnB_bE.mjs";
4
4
  import { f as import_picocolors, l as formatUrl, m as printSuccess, r as createSpinner } from "./output-BpgYODYx.mjs";
5
5
  //#region src/cli/login.ts
6
6
  async function selectPlatformLoginMethod(platform, requestedId) {
@@ -30,7 +30,7 @@ async function selectPlatformLoginMethod(platform, requestedId) {
30
30
  }
31
31
  async function promptForLoginToken(root = process.cwd(), platform) {
32
32
  const apiUrl = platform?.apiUrl ?? getApiUrl(root);
33
- const { id: provider, label: providerName } = await selectPlatformLoginMethod(platform ?? await (await import("./platform-cmd-BYKLMPCn.mjs")).discoverPlatform(apiUrl));
33
+ const { id: provider, label: providerName } = await selectPlatformLoginMethod(platform ?? await (await import("./platform-cmd-CV8NxIIn.mjs")).discoverPlatform(apiUrl));
34
34
  const s = createSpinner();
35
35
  s.start(`Opening browser for ${providerName} login...`);
36
36
  try {
@@ -1,7 +1,7 @@
1
1
  import { n as readDeploymentPlatform, r as readProjectConfig } from "./project-rqDnVsJN.mjs";
2
2
  import { c as getToken } from "./auth-B6iOCjKI.mjs";
3
3
  import { $ as wrapTextWithPrefix, H as outro, L as log } from "./dist-Cor9XGoz.mjs";
4
- import { r as PlatformClient } from "./client-BEMtySaV.mjs";
4
+ import { r as PlatformClient } from "./client-B3LnB_bE.mjs";
5
5
  import { a as errorStackFrames, f as import_picocolors, i as dim, o as formatCount } from "./output-BpgYODYx.mjs";
6
6
  import { t as sanitizeTerminalLogText } from "./terminal-log-text-D9ACPOuG.mjs";
7
7
  //#region src/cli/logs.ts
@@ -9,7 +9,7 @@ async function runLogsCommand(root, filter, range, deployment, level) {
9
9
  console.log();
10
10
  const platform = readDeploymentPlatform(root);
11
11
  if (platform === "cloudflare") {
12
- const { resolveCloudflareOperationContext, tailCloudflareWorker } = await import("./cloudflare-operations-PCM4wucv.mjs");
12
+ const { resolveCloudflareOperationContext, tailCloudflareWorker } = await import("./cloudflare-operations-BtulCNOg.mjs");
13
13
  if (range !== "1h") log.warn("Cloudflare tail streams live logs; --range does not select historical entries.");
14
14
  if (level && level !== "all" && level !== "error") log.warn("Cloudflare tail cannot filter individual console levels; showing all invocation logs.");
15
15
  await tailCloudflareWorker(resolveCloudflareOperationContext(root), {
@@ -1,9 +1,9 @@
1
1
  import { a as join, n as dirname } from "./dist-ipQi0Q8y.mjs";
2
2
  import { o as TYPED_CONFIG_FILE, s as loadTypedVoidConfigFile } from "./project-paths-DGu_QZ_Q.mjs";
3
- import { h as validateConfig } from "./config-DHgSEWT7.mjs";
3
+ import { h as validateConfig } from "./config-OFOAimzt.mjs";
4
4
  import { t as parseJsoncObject } from "./generated-wrangler-config-DeWj5F9Y.mjs";
5
- import { n as VOID_LOCK_FILE, o as seedCloudflareConfig, s as stashCloudflareDeployPointer } from "./cloudflare-config-DchHxPTo.mjs";
6
- import "./wrangler-CDiEBCdS.mjs";
5
+ import { c as stashCloudflareDeployPointer, n as VOID_LOCK_FILE, r as ignoreMaterializedCloudflareConfig, s as seedCloudflareConfig } from "./cloudflare-config-CH1AylZT.mjs";
6
+ import { I as renderVoidConfig, P as GENERATED_MARKERS } from "./wrangler-I-scB_1t.mjs";
7
7
  import { L as log } from "./dist-Cor9XGoz.mjs";
8
8
  import { m as printSuccess } from "./output-BpgYODYx.mjs";
9
9
  import { existsSync, mkdirSync, readFileSync, renameSync, rmSync, unlinkSync, writeFileSync } from "node:fs";
@@ -198,61 +198,6 @@ function migrateFrameworkAdapterPaths(root) {
198
198
  return applyFrameworkConfigMigration(root, planFrameworkConfigMigration(root));
199
199
  }
200
200
  //#endregion
201
- //#region src/config-write.ts
202
- const GENERATED_MARKERS = [
203
- "// Generated by void migrate.",
204
- "// Generated from void.json by void migrate.",
205
- "// Generated by void init."
206
- ];
207
- function renderVoidConfig(config, marker = GENERATED_MARKERS[0]) {
208
- return `${marker}\nimport { defineConfig } from 'void/config';\n\nexport default defineConfig(${JSON.stringify(config, null, 2)});\n`;
209
- }
210
- function isStaticValue(node) {
211
- if (!node) return false;
212
- if (node.type === "Literal") return node.value === null || [
213
- "string",
214
- "number",
215
- "boolean"
216
- ].includes(typeof node.value);
217
- if (node.type === "UnaryExpression") return node.operator === "-" && node.argument?.type === "Literal" && typeof node.argument.value === "number";
218
- if (node.type === "ArrayExpression") return node.elements?.every(isStaticValue) ?? false;
219
- if (node.type !== "ObjectExpression") return false;
220
- 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;
221
- }
222
- function isGeneratedStaticConfig(source) {
223
- if (!GENERATED_MARKERS.some((marker) => source.startsWith(marker))) return false;
224
- let program;
225
- try {
226
- const parsed = parseSync(TYPED_CONFIG_FILE, source, {
227
- lang: "js",
228
- sourceType: "module",
229
- preserveParens: false,
230
- showSemanticErrors: true
231
- });
232
- if (parsed.errors.length > 0 || parsed.comments.length !== 1 || !GENERATED_MARKERS.includes(`// ${parsed.comments[0]?.value.trim()}`)) return false;
233
- program = parsed.program;
234
- } catch {
235
- return false;
236
- }
237
- const [importDeclaration, exportDeclaration] = program.body ?? [];
238
- const call = exportDeclaration?.declaration;
239
- 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]);
240
- }
241
- function canRewriteVoidProjectConfig(root) {
242
- const path = join(root, TYPED_CONFIG_FILE);
243
- return !existsSync(path) || isGeneratedStaticConfig(readFileSync(path, "utf8"));
244
- }
245
- /** Update CLI-owned static config without silently rewriting authored TypeScript. */
246
- function writeVoidProjectConfig(root, config) {
247
- validateConfig(config, TYPED_CONFIG_FILE);
248
- const path = join(root, TYPED_CONFIG_FILE);
249
- if (existsSync(path)) {
250
- if (!isGeneratedStaticConfig(readFileSync(path, "utf8"))) throw new Error(`config: ${TYPED_CONFIG_FILE} contains authored TypeScript or comments. Update it directly and rerun the command.`);
251
- validateConfig(loadTypedVoidConfigFile(path), TYPED_CONFIG_FILE);
252
- }
253
- writeFileSync(path, renderVoidConfig(config, "// Generated by void init."));
254
- }
255
- //#endregion
256
201
  //#region src/cli/migrate.ts
257
202
  const LEGACY_FILE = "void.json";
258
203
  function parseWranglerJsonc(path, raw) {
@@ -291,12 +236,6 @@ function isOrphanedCompatibilityConfig(root, legacy, typed) {
291
236
  return false;
292
237
  }
293
238
  }
294
- function ignoreGeneratedCloudflareConfig(root) {
295
- const path = join(root, ".gitignore");
296
- const source = existsSync(path) ? readFileSync(path, "utf8") : "";
297
- if (source.split(/\r?\n/).some((line) => /^\/?\.void-wrangler\.jsonc$/.test(line.trim()))) return;
298
- writeFileSync(path, `${source}${source && !source.endsWith("\n") ? "\n" : ""}.void-wrangler.jsonc\n`);
299
- }
300
239
  /** Move Void and Cloudflare JSON/JSONC settings into a typed, checked-in project config. */
301
240
  function migrateLegacyVoidConfig(root) {
302
241
  const legacyPath = join(root, LEGACY_FILE);
@@ -353,7 +292,7 @@ function migrateLegacyVoidConfig(root) {
353
292
  applyFrameworkConfigMigration(root, frameworkPatches);
354
293
  if (raw !== void 0) unlinkSync(legacyPath);
355
294
  if (wranglerName) unlinkSync(join(root, wranglerName));
356
- ignoreGeneratedCloudflareConfig(root);
295
+ ignoreMaterializedCloudflareConfig(root);
357
296
  stashCloudflareDeployPointer(root);
358
297
  return true;
359
298
  } finally {
@@ -368,4 +307,4 @@ async function runMigrateCommand(root) {
368
307
  } else log.info("No legacy project configuration found.");
369
308
  }
370
309
  //#endregion
371
- export { discoverFrameworkWranglerFiles as a, writeVoidProjectConfig as i, runMigrateCommand as n, migrateFrameworkAdapterPaths as o, canRewriteVoidProjectConfig as r, migrateLegacyVoidConfig as t };
310
+ export { migrateFrameworkAdapterPaths as i, runMigrateCommand as n, discoverFrameworkWranglerFiles as r, migrateLegacyVoidConfig as t };
@@ -0,0 +1 @@
1
+ export { n as runMigrateCommand } from "./migrate-B8S2xTcb.mjs";
package/dist/nitro.mjs CHANGED
@@ -1,9 +1,9 @@
1
1
  import { a as join, n as dirname } from "./dist-ipQi0Q8y.mjs";
2
- import { l as getDatabaseDialect, p as readConfig } from "./config-DHgSEWT7.mjs";
3
- import { c as voidDbBundlerPlugin } from "./dispatch-OVLeWW8K.mjs";
4
- import { n as bundleWorkerSqlDriver } from "./wrapper-CEiDeCqD.mjs";
5
- import { fileURLToPath } from "node:url";
2
+ import { l as getDatabaseDialect, p as readConfig } from "./config-OFOAimzt.mjs";
3
+ import { c as voidDbBundlerPlugin } from "./dispatch-CLa2LThw.mjs";
4
+ import { n as bundleWorkerSqlDriver } from "./wrapper-BBl1rC32.mjs";
6
5
  import { normalizePath } from "vite";
6
+ import { fileURLToPath } from "node:url";
7
7
  import { resolve } from "node:path/win32";
8
8
  //#region src/nitro.ts
9
9
  const envModuleFile = fileURLToPath(import.meta.resolve("#self/_env"));