void 0.21.9 → 0.23.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 +5 -1
- package/dist/{account-cmd-DZZGK80W.mjs → account-cmd-C84Ee8cO.mjs} +5 -5
- package/dist/{scan-ClYmX3sa.mjs → application-analysis-BVsVqc11.mjs} +135 -18
- package/dist/application-routing-B7QEjqSR.mjs +27 -0
- package/dist/{auth-CZuiVsFh.mjs → auth-CCjt0hcq.mjs} +1 -1
- package/dist/{auth-DLNN0D3Z.mjs → auth-CSkdO2Bb.mjs} +4 -47
- package/dist/{auth-link-B_CeugBw.mjs → auth-link-CioEg6uY.mjs} +5 -5
- package/dist/{auth-router-BgEFRuvZ.mjs → auth-router-BsR981d4.mjs} +5 -5
- package/dist/{better-auth-shared-rsBGBvWJ.mjs → better-auth-shared-hy6RPh9W.mjs} +13 -2
- package/dist/{build-cmd-Dpt0jd-x.mjs → build-cmd-LzvNJORH.mjs} +19 -7
- package/dist/{cache-7_UeZdTk.mjs → cache-C4MvnrMH.mjs} +4 -4
- package/dist/{cancel-deploy-D23R1RXT.mjs → cancel-deploy-abUxpP2n.mjs} +4 -4
- package/dist/{cf-build-output-CGT03qCD.mjs → cf-build-output-BPqOT964.mjs} +141 -63
- package/dist/cf-build-output-_0HNWysu.mjs +2 -0
- package/dist/cli/cli.mjs +114 -460
- package/dist/cli/cloudflare-operation-process.mjs +1103 -0
- package/dist/cli/env-schema-probe.d.mts +2 -1
- package/dist/cli/env-schema-probe.mjs +3 -3
- package/dist/client-Cu7jWiF1.mjs +2 -0
- package/dist/{client-QTl6ko_D.mjs → client-RV8NVeB8.mjs} +165 -21
- package/dist/{cloudflare-auth-C4_GPZr0.mjs → cloudflare-auth-Qdc7tw8F.mjs} +41 -43
- package/dist/{cloudflare-cmd-bSmZ1d5L.mjs → cloudflare-cmd-BcrVyTmJ.mjs} +9 -10
- package/dist/cloudflare-config-Bktvwtpf.mjs +182 -0
- package/dist/{cloudflare-connect-jAwacxxP.mjs → cloudflare-connect-B8uPZ4nx.mjs} +4 -4
- package/dist/{cloudflare-operations-BipGMJ5O.mjs → cloudflare-operations-AiWashgg.mjs} +1 -1
- package/dist/{cloudflare-operations-sMZXpk_S.mjs → cloudflare-operations-fxHb-byx.mjs} +118 -203
- package/dist/{preset-UHj9ARyP.mjs → cloudflare-process-B-wekeR6.mjs} +93 -6
- package/dist/{config-CF69HgXc.d.mts → config-BMHb8RCj.d.mts} +2 -2
- package/dist/{config-CafTW6Cz.mjs → config-Br_JZD6u.mjs} +2 -7
- package/dist/config-C_XRIPx2.mjs +89 -0
- package/dist/{config-s7Xj7tPb.mjs → config-CyQ-wVd7.mjs} +1 -1
- package/dist/config-entry.d.mts +1 -1
- package/dist/{config-write-BSduPMY8.mjs → config-write-B1f88wJA.mjs} +1 -1
- package/dist/{connect-BsUSRzln.mjs → connect-Bd4kJd9U.mjs} +6 -6
- package/dist/{create-project-BniEV0OW.mjs → create-project-Boczwj5r.mjs} +1 -1
- package/dist/{create-project-DBfFSZKY.mjs → create-project-bMf6ffLZ.mjs} +9 -5
- package/dist/{db-hRrvZaq_.mjs → db-8uG64XLl.mjs} +26 -26
- package/dist/{delete-D6dZ9B6B.mjs → delete-NvbiyeJf.mjs} +4 -4
- package/dist/{deploy-WaAQez1O.mjs → deploy-DzAIwqNU.mjs} +944 -607
- package/dist/{deploy-DDz7c8LK.mjs → deploy-bjXdFCtn.mjs} +1 -1
- package/dist/{dist-BR1quN_w.mjs → dist-AoCzRTJE.mjs} +226 -60
- package/dist/{dist-C5fND3R0.mjs → dist-BuDuKZJv.mjs} +1 -1
- package/dist/{dist-Dn6nn2IU.mjs → dist-CTBk70IR.mjs} +42 -42
- package/dist/{domain-Dmhvb2oU.mjs → domain-y5Tvydvo.mjs} +5 -5
- package/dist/{email-DFi-s2t4.mjs → email-B3umsW75.mjs} +15 -30
- package/dist/{env-Csi-tMbT.mjs → env-BS6qYHDb.mjs} +6 -6
- package/dist/{env-public-D_6u46fX.d.mts → env-public-BX_r8HR6.d.mts} +2 -1
- package/dist/{env-validation-BB4GkLxn.mjs → env-validation-BPn7vk-V.mjs} +18 -71
- package/dist/{env-validation-BXge7uyK.mjs → env-validation-DbTg7-ar.mjs} +1 -1
- package/dist/{fetch-CXDChK7B.mjs → fetch-BIZJh7vR.mjs} +2 -2
- package/dist/{fetch-stream-AOByI7Ki.mjs → fetch-stream-IvCYKyQL.mjs} +24 -4
- package/dist/{gen-Dz3X1Qab.mjs → gen-B580--vC.mjs} +5 -5
- package/dist/gen-BVaUUumi.mjs +2 -0
- package/dist/{github-cmd-BED3_9JD.mjs → github-cmd-v45BdfKX.mjs} +6 -8
- package/dist/{handler-BXJTXd02.d.mts → handler-CZ4nAylQ.d.mts} +2 -1
- package/dist/{headers-BOg_velo.mjs → headers-DWi2IXWx.mjs} +1 -1
- package/dist/help-DofyZuY7.mjs +2 -0
- package/dist/{help-DC7gdz7L.mjs → help-daGKjXGk.mjs} +268 -666
- package/dist/index.d.mts +1 -1
- package/dist/index.mjs +305 -1490
- package/dist/info-B97bTX9N.mjs +113 -0
- package/dist/{init-WO0JlPx8.mjs → init-Bvy7zrBo.mjs} +51 -20
- package/dist/limits-Bq5LG8Id.d.mts +27 -0
- package/dist/limits-Cjuk2VPm.mjs +68 -0
- package/dist/{link-CsHOinF7.mjs → link-CDqqCjFl.mjs} +5 -5
- package/dist/{list-CDb-4bZ1.mjs → list-CZj0dzKY.mjs} +5 -5
- package/dist/{live-CKiJilLr.d.mts → live-Chw1eIMv.d.mts} +1 -1
- package/dist/{local-d1-CC8sKFGu.mjs → local-d1-2CMnpuW_.mjs} +2 -2
- package/dist/login-DYt_An22.mjs +2 -0
- package/dist/{login-DvqXsfGs.mjs → login-UZKFM_u7.mjs} +5 -5
- package/dist/{logs-BdfiOezj.mjs → logs-CUZ6t9t3.mjs} +5 -5
- package/dist/migrate-8_2u55MD.mjs +2 -0
- package/dist/{migrate-B8KuoYsO.mjs → migrate-DHul7PRV.mjs} +5 -4
- package/dist/{node-BM43oz4G.mjs → node-BkyRWRx8.mjs} +2 -2
- package/dist/operator-args-CLgKGlwU.mjs +690 -0
- package/dist/{operator-cmd-03819ATr.mjs → operator-cmd-DBA6dl0m.mjs} +69 -23
- package/dist/output-Dm_A4Tbv.mjs +81 -0
- package/dist/pages/client.d.mts +34 -2
- package/dist/pages/client.mjs +59 -3
- package/dist/pages/index.d.mts +1 -1
- package/dist/pages/index.mjs +3 -3
- package/dist/pages/islands-plugin.d.mts +16 -6
- package/dist/pages/islands-plugin.mjs +2 -2
- package/dist/pages/protocol.d.mts +2 -2
- package/dist/pages/protocol.mjs +2 -308
- package/dist/{parse-filename-DioPHiR9.mjs → parse-filename-CUbj-1MP.mjs} +35 -1
- package/dist/{output-CCH48AMM.mjs → picocolors-BTps1_gs.mjs} +2 -76
- package/dist/plan-D1Q5rf-r.mjs +2 -0
- package/dist/plan-NPpwZ_kc.mjs +58 -0
- package/dist/platform-args-BJdRtlLq.mjs +506 -0
- package/dist/platform-args-D3RXyR6h.mjs +2 -0
- package/dist/{platform-auth-config-z92h63q5.mjs → platform-auth-config-B56E9YP1.mjs} +4 -4
- package/dist/{platform-auth-protection-DeE3yr2R.mjs → platform-auth-protection-BDWO_aER.mjs} +3 -3
- package/dist/{platform-auth-recovery-o_340Ixx.mjs → platform-auth-recovery-1gg4CSRe.mjs} +4 -4
- package/dist/{platform-cmd-C4ZV3Vpy.mjs → platform-cmd-Bt-1w6pY.mjs} +1 -1
- package/dist/{platform-cmd-DNl8WosH.mjs → platform-cmd-DMcQStSc.mjs} +26 -5
- package/dist/{platform-domain-CU1JtJkW.mjs → platform-domain-BNkcz0OB.mjs} +36 -9
- package/dist/{platform-lifecycle-Bc047IeT.mjs → platform-lifecycle-9OyBALhH.mjs} +850 -276
- package/dist/{platform-lifecycle-Bs2qx1E3.mjs → platform-lifecycle-BE6C_jxh.mjs} +1 -1
- package/dist/{platform-management-CVpGI9Y5.mjs → platform-management-CjwLVQwN.mjs} +59 -11
- package/dist/{platform-management-C8tt6D8h.mjs → platform-management-CnyTdcWX.mjs} +1 -1
- package/dist/platform-plans-config-BNGKGr4P.mjs +359 -0
- package/dist/{platform-recovery-dvUaptLr.mjs → platform-recovery-D6KSpuFm.mjs} +2 -2
- package/dist/{plugin-inference-BMfKRSqE.mjs → plugin-inference-CXWnn79A.mjs} +174 -64
- package/dist/{prepare-DyZ-Yok5.mjs → prepare-B5Mkic5u.mjs} +3 -3
- package/dist/{prepare-C3kt3Rst.mjs → prepare-DOsL0CC9.mjs} +4 -20
- package/dist/prepare-cgvDMtSb.mjs +2 -0
- package/dist/{project-cmd-B44I8J_W.mjs → project-cmd-CNzrqvBv.mjs} +30 -16
- package/dist/{project-team-BkbYIsXN.mjs → project-team-DQOWPfQT.mjs} +4 -4
- package/dist/{project-token-C8xEEQnB.mjs → project-token-CTDYU0Cc.mjs} +4 -4
- package/dist/project-zero-trust-BNAkW-_0.mjs +63 -0
- package/dist/{protocol-ZH3jP4a7.d.mts → protocol-CjF_iI9X.d.mts} +2 -2
- package/dist/protocol-U7bfjHmA.mjs +331 -0
- package/dist/{provision-DNtrtaVD.mjs → provision-C4ORE7G7.mjs} +1 -1
- package/dist/{provision-BhreDAOS.mjs → provision-CJFgTZY8.mjs} +111 -215
- package/dist/{requests-DFyhBMaf.mjs → requests-MhxYnau8.mjs} +4 -4
- package/dist/resource-name-C7LVpcRm.mjs +11 -0
- package/dist/{rollback-DHHxXZiS.mjs → rollback-CJ6iSDoU.mjs} +5 -5
- package/dist/route-url-CG7U-cRN.mjs +15 -0
- package/dist/{runner-B8wXwWlo.mjs → runner-CXA9Fh8h.mjs} +1 -1
- package/dist/{runner-p-dMs2UN.mjs → runner-Ol0TNjk6.mjs} +2 -2
- package/dist/runtime/ai.d.mts +12 -8
- package/dist/runtime/ai.mjs +84 -17
- package/dist/runtime/better-auth-mysql.mjs +1 -1
- package/dist/runtime/better-auth-pg.mjs +1 -1
- package/dist/runtime/better-auth.mjs +1 -1
- package/dist/runtime/client-react.mjs +2 -2
- package/dist/runtime/client-solid.mjs +2 -2
- package/dist/runtime/client-svelte.mjs +2 -2
- package/dist/runtime/client-vue.mjs +2 -2
- package/dist/runtime/client.mjs +2 -2
- package/dist/runtime/durable.d.mts +3 -1
- package/dist/runtime/durable.mjs +4 -1
- package/dist/runtime/email/testing.mjs +1 -1
- package/dist/runtime/env-public.d.mts +1 -1
- package/dist/runtime/fetch-stream.mjs +1 -1
- package/dist/runtime/fetch.mjs +1 -1
- package/dist/runtime/handler.d.mts +1 -1
- package/dist/runtime/kv.mjs +0 -1
- package/dist/runtime/limits.d.mts +2 -0
- package/dist/runtime/limits.mjs +2 -0
- package/dist/runtime/live-client.d.mts +1 -1
- package/dist/runtime/live-server.mjs +25 -16
- package/dist/runtime/live.d.mts +1 -1
- package/dist/runtime/migration-handler.mjs +62 -42
- package/dist/runtime/route-url.d.mts +4 -0
- package/dist/runtime/route-url.mjs +2 -0
- package/dist/runtime/routing.d.mts +180 -0
- package/dist/runtime/routing.mjs +1082 -0
- package/dist/runtime/sandbox-container.d.mts +3 -0
- package/dist/runtime/sandbox-container.mjs +2 -0
- package/dist/runtime/sandbox.d.mts +4 -32
- package/dist/runtime/sandbox.mjs +151 -75
- package/dist/runtime/sse.mjs +1 -1
- package/dist/runtime/validator.d.mts +1 -1
- package/dist/runtime/ws-server.d.mts +4 -2
- package/dist/runtime/ws-server.mjs +27 -2
- package/dist/runtime/ws.d.mts +2 -2
- package/dist/runtime/ws.mjs +8 -6
- package/dist/sandbox-XZAqzFlG.d.mts +52 -0
- package/dist/sandbox-container-Bo0eiFKz.d.mts +73 -0
- package/dist/sandbox-container-C6ItmVuN.mjs +281 -0
- package/dist/{scan-4tfN-PSn.mjs → scan-C7okrLyM.mjs} +4 -35
- package/dist/{secret-DN9sSNiV.mjs → secret-Dli5fP0B.mjs} +6 -6
- package/dist/{skills-O6FUaizK.mjs → skills-D1II1Juz.mjs} +1 -1
- package/dist/{sse-BaC1jXko.mjs → sse-CQNaDFFV.mjs} +6 -3
- package/dist/{subcommand-prompt-BuGYkAkC.mjs → subcommand-prompt-CY1C4fvl.mjs} +2 -2
- package/dist/validate-Dq_L3s0S.mjs +2 -0
- package/dist/{validate-CIUwFpjB.mjs → validate-ctOrgiS3.mjs} +2 -1
- package/dist/{wrangler-BymcxrRa.mjs → wrangler-7K-bW_DL.mjs} +14 -235
- package/dist/{ws-BwcqizuH.d.mts → ws-CL1w7GXU.d.mts} +13 -2
- package/package.json +48 -33
- package/sandbox.Dockerfile +4 -0
- package/schema.json +10 -22
- package/skills/migrate-vite-cloudflare-to-void/SKILL.md +34 -157
- package/skills/void/SKILL.md +50 -133
- package/skills/void/docs/guide/ai.md +94 -84
- package/skills/void/docs/guide/app-types.md +3 -32
- package/skills/void/docs/guide/auth.md +12 -116
- package/skills/void/docs/guide/database/d1.md +9 -54
- package/skills/void/docs/guide/database/mysql.md +1 -1
- package/skills/void/docs/guide/database/postgresql.md +5 -26
- package/skills/void/docs/guide/database.md +23 -75
- package/skills/void/docs/guide/deployment.md +27 -113
- package/skills/void/docs/guide/durable-state.md +43 -18
- package/skills/void/docs/guide/edge/headers.md +3 -47
- package/skills/void/docs/guide/edge/prerendering.md +5 -20
- package/skills/void/docs/guide/edge/redirects.md +11 -64
- package/skills/void/docs/guide/edge/revalidation.md +6 -19
- package/skills/void/docs/guide/edge/rewrites.md +56 -284
- package/skills/void/docs/guide/edge/static-assets.md +23 -72
- package/skills/void/docs/guide/email/domains.md +112 -0
- package/skills/void/docs/guide/email/receiving.md +139 -0
- package/skills/void/docs/guide/email/sending.md +231 -0
- package/skills/void/docs/guide/email.md +13 -619
- package/skills/void/docs/guide/env-migration.md +11 -11
- package/skills/void/docs/guide/env-vars.md +9 -29
- package/skills/void/docs/guide/index.md +0 -15
- package/skills/void/docs/guide/jobs.md +3 -18
- package/skills/void/docs/guide/kv.md +5 -11
- package/skills/void/docs/guide/live.md +5 -56
- package/skills/void/docs/guide/pages-routing/actions-and-forms.md +78 -125
- package/skills/void/docs/guide/pages-routing/head.md +10 -10
- package/skills/void/docs/guide/pages-routing/islands.md +6 -36
- package/skills/void/docs/guide/pages-routing/layouts.md +6 -128
- package/skills/void/docs/guide/pages-routing/loaders.md +3 -19
- package/skills/void/docs/guide/pages-routing/markdown.md +13 -171
- package/skills/void/docs/guide/pages-routing/overview.md +7 -17
- package/skills/void/docs/guide/pages-routing/view-transitions.md +1 -1
- package/skills/void/docs/guide/platform/administration/access.md +1 -4
- package/skills/void/docs/guide/platform/administration/email.md +35 -8
- package/skills/void/docs/guide/platform/administration/operations.md +26 -4
- package/skills/void/docs/guide/platform/administration/plans.md +126 -0
- package/skills/void/docs/guide/platform/administration/projects.md +5 -2
- package/skills/void/docs/guide/platform/administration/zero-trust.md +189 -0
- package/skills/void/docs/guide/platform/development/local.md +2 -2
- package/skills/void/docs/guide/platform/development/runtime.md +3 -13
- package/skills/void/docs/guide/platform/development/schema-ci.md +0 -58
- package/skills/void/docs/guide/platform/installation/credentials.md +6 -4
- package/skills/void/docs/guide/platform/installation/domains.md +31 -3
- package/skills/void/docs/guide/platform/installation/first-deployment.md +6 -0
- package/skills/void/docs/guide/platform/installation/maintenance.md +3 -1
- package/skills/void/docs/guide/platform/installation/prerequisites.md +21 -16
- package/skills/void/docs/guide/platform/installation/setup.md +9 -5
- package/skills/void/docs/guide/platform/installation/uninstall.md +17 -2
- package/skills/void/docs/guide/platform-administration.md +2 -0
- package/skills/void/docs/guide/queues.md +7 -9
- package/skills/void/docs/guide/quickstart.md +38 -37
- package/skills/void/docs/guide/remote-dev.md +4 -9
- package/skills/void/docs/guide/sandboxes.md +78 -41
- package/skills/void/docs/guide/server-routing.md +9 -72
- package/skills/void/docs/guide/sse.md +4 -18
- package/skills/void/docs/guide/ssg.md +3 -15
- package/skills/void/docs/guide/ssr.md +14 -62
- package/skills/void/docs/guide/storage.md +9 -4
- package/skills/void/docs/guide/type-safety.md +3 -14
- package/skills/void/docs/guide/typed-fetch.md +3 -7
- package/skills/void/docs/guide/websockets.md +68 -40
- package/skills/void/docs/integrations/agents.md +3 -3
- package/skills/void/docs/integrations/cloudflare.md +85 -316
- package/skills/void/docs/integrations/frameworks/analog.md +5 -64
- package/skills/void/docs/integrations/frameworks/astro.md +4 -73
- package/skills/void/docs/integrations/frameworks/nuxt.md +5 -62
- package/skills/void/docs/integrations/frameworks/overview.md +11 -54
- package/skills/void/docs/integrations/frameworks/react-router.md +5 -60
- package/skills/void/docs/integrations/frameworks/sveltekit.md +6 -65
- package/skills/void/docs/integrations/frameworks/tanstack-start.md +4 -62
- package/skills/void/docs/integrations/nodejs-bun-deno.md +5 -69
- package/skills/void/docs/reference/api/auth.md +156 -0
- package/skills/void/docs/reference/api/client.md +87 -0
- package/skills/void/docs/reference/api/database.md +95 -0
- package/skills/void/docs/reference/api/durable.md +46 -0
- package/skills/void/docs/reference/api/env.md +50 -0
- package/skills/void/docs/reference/api/handlers.md +254 -0
- package/skills/void/docs/reference/api/pages.md +241 -0
- package/skills/void/docs/reference/api/plugin.md +39 -0
- package/skills/void/docs/reference/api/resources.md +109 -0
- package/skills/void/docs/reference/api/rewrites.md +76 -0
- package/skills/void/docs/reference/api/types.md +92 -0
- package/skills/void/docs/reference/api.md +56 -1218
- package/skills/void/docs/reference/cli/auth.md +88 -0
- package/skills/void/docs/reference/cli/database.md +128 -0
- package/skills/void/docs/reference/cli/deploy.md +85 -0
- package/skills/void/docs/reference/cli/domains.md +41 -0
- package/skills/void/docs/reference/cli/email.md +129 -0
- package/skills/void/docs/reference/cli/generate.md +116 -0
- package/skills/void/docs/reference/cli/github.md +189 -0
- package/skills/void/docs/reference/cli/platform-config.md +92 -0
- package/skills/void/docs/reference/cli/platform-email.md +81 -0
- package/skills/void/docs/reference/cli/platform-installation.md +127 -0
- package/skills/void/docs/reference/cli/platform-operations.md +90 -0
- package/skills/void/docs/reference/cli/platform-users.md +89 -0
- package/skills/void/docs/reference/cli/platform-zero-trust.md +45 -0
- package/skills/void/docs/reference/cli/platform.md +70 -0
- package/skills/void/docs/reference/cli/project.md +214 -0
- package/skills/void/docs/reference/cli/secrets.md +76 -0
- package/skills/void/docs/reference/cli/setup.md +70 -0
- package/skills/void/docs/reference/cli.md +33 -1621
- package/skills/void/docs/reference/config.md +26 -32
- package/skills/void/docs/reference/resource-inference.md +3 -58
- package/skills/void/docs/reference/structure.md +14 -41
- package/dist/canonical-json-DuDiiUsQ.mjs +0 -13
- package/dist/cli/cf-compat.mjs +0 -968
- package/dist/client-4cDVv7BO.mjs +0 -2
- package/dist/gen-Vnv2f65C.mjs +0 -2
- package/dist/help-DQMfeKMz.mjs +0 -2
- package/dist/login-DFQk7rbW.mjs +0 -2
- package/dist/migrate-TsHGBnDA.mjs +0 -2
- package/dist/plan-BEZ8VJW0.mjs +0 -256
- package/dist/plan-DpuOr14e.mjs +0 -2
- package/dist/prepare-BZXkjdNe.mjs +0 -2
- package/dist/validate-EKmJWxmy.mjs +0 -2
- /package/dist/cli/{cf-compat.d.mts → cloudflare-operation-process.d.mts} +0 -0
|
@@ -0,0 +1,281 @@
|
|
|
1
|
+
import { DurableObject, RpcTarget } from "cloudflare:workers";
|
|
2
|
+
import { Files } from "@cloudflare/sandbox";
|
|
3
|
+
//#region src/runtime/sandbox-container.ts
|
|
4
|
+
const OPTIONS = /* @__PURE__ */ new Set([
|
|
5
|
+
"inactivityTimeoutMs",
|
|
6
|
+
"enableInternet",
|
|
7
|
+
"labels"
|
|
8
|
+
]);
|
|
9
|
+
const FILE_OPERATIONS = /* @__PURE__ */ new Set([
|
|
10
|
+
"readFile",
|
|
11
|
+
"writeFile",
|
|
12
|
+
"stat",
|
|
13
|
+
"lstat",
|
|
14
|
+
"readDirectory",
|
|
15
|
+
"mkdir",
|
|
16
|
+
"rename",
|
|
17
|
+
"remove"
|
|
18
|
+
]);
|
|
19
|
+
const DEFAULT_SANDBOX_INACTIVITY_TIMEOUT_MS = 6e5;
|
|
20
|
+
function validateSandboxOptions(options) {
|
|
21
|
+
if (!options || typeof options !== "object" || Array.isArray(options)) throw new TypeError("Sandbox options must be an object.");
|
|
22
|
+
for (const key of Object.keys(options)) if (!OPTIONS.has(key)) throw new TypeError(`Unsupported Sandbox option: ${key}`);
|
|
23
|
+
if (options.inactivityTimeoutMs !== void 0 && (!Number.isInteger(options.inactivityTimeoutMs) || options.inactivityTimeoutMs < 1 || options.inactivityTimeoutMs > 216e5)) throw new TypeError("Sandbox inactivityTimeoutMs must be an integer between 1 and 21600000.");
|
|
24
|
+
if (options.enableInternet !== void 0 && typeof options.enableInternet !== "boolean") throw new TypeError("Sandbox enableInternet must be a boolean.");
|
|
25
|
+
if (options.labels !== void 0 && (!options.labels || typeof options.labels !== "object" || Array.isArray(options.labels) || Object.values(options.labels).some((value) => typeof value !== "string"))) throw new TypeError("Sandbox labels must be strings.");
|
|
26
|
+
}
|
|
27
|
+
var ProcessCapability = class extends RpcTarget {
|
|
28
|
+
#process;
|
|
29
|
+
#exited = false;
|
|
30
|
+
#waitForExit;
|
|
31
|
+
constructor(process, waitForExit) {
|
|
32
|
+
super();
|
|
33
|
+
this.#process = process;
|
|
34
|
+
this.#waitForExit = waitForExit;
|
|
35
|
+
process.exitCode.then(() => {
|
|
36
|
+
this.#exited = true;
|
|
37
|
+
}, () => {
|
|
38
|
+
this.#exited = true;
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
async invoke(operation, args) {
|
|
42
|
+
if (!Array.isArray(args)) throw new TypeError("Sandbox arguments must be an array.");
|
|
43
|
+
if (operation === "exitCode") return this.#waitForExit();
|
|
44
|
+
if (operation === "kill") {
|
|
45
|
+
if (this.#exited) return;
|
|
46
|
+
return this.#process.kill(args[0]);
|
|
47
|
+
}
|
|
48
|
+
if (operation === "resize") return this.#process.resize(args[0], args[1]);
|
|
49
|
+
throw new TypeError(`Unsupported Sandbox process operation: ${operation}`);
|
|
50
|
+
}
|
|
51
|
+
};
|
|
52
|
+
/** Decode cancellation without trying to serialize an AbortSignal over Workers RPC. */
|
|
53
|
+
function operationOptions(value) {
|
|
54
|
+
const { abort, ...options } = value ?? {};
|
|
55
|
+
if (abort === void 0) return {
|
|
56
|
+
options,
|
|
57
|
+
finish() {}
|
|
58
|
+
};
|
|
59
|
+
if (!(abort instanceof ReadableStream)) throw new TypeError("Invalid Sandbox cancellation stream.");
|
|
60
|
+
const controller = new AbortController();
|
|
61
|
+
const reader = abort.getReader();
|
|
62
|
+
let finished = false;
|
|
63
|
+
reader.read().then(() => {
|
|
64
|
+
if (!finished) controller.abort();
|
|
65
|
+
}, () => {
|
|
66
|
+
if (!finished) controller.abort();
|
|
67
|
+
});
|
|
68
|
+
return {
|
|
69
|
+
options: {
|
|
70
|
+
...options,
|
|
71
|
+
signal: controller.signal
|
|
72
|
+
},
|
|
73
|
+
finish() {
|
|
74
|
+
finished = true;
|
|
75
|
+
reader.cancel().catch(() => {});
|
|
76
|
+
}
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
/** Shared native execution, used by local Workers and the trusted platform controller. */
|
|
80
|
+
var SandboxContainer = class extends DurableObject {
|
|
81
|
+
instanceType = "lite";
|
|
82
|
+
#setup;
|
|
83
|
+
#options = {};
|
|
84
|
+
#ready;
|
|
85
|
+
starting = false;
|
|
86
|
+
#epoch = 0;
|
|
87
|
+
constructor(ctx, env) {
|
|
88
|
+
super(ctx, env);
|
|
89
|
+
this.#ready = ctx.blockConcurrencyWhile(async () => {
|
|
90
|
+
this.#options = await ctx.storage.get("__voidSandboxOptions") ?? {};
|
|
91
|
+
if (this.container.running) await this.container.setInactivityTimeout(this.inactivityTimeoutMs);
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
get container() {
|
|
95
|
+
if (!this.ctx.container) throw new Error("Sandbox container binding is missing.");
|
|
96
|
+
return this.ctx.container;
|
|
97
|
+
}
|
|
98
|
+
async configure(options) {
|
|
99
|
+
validateSandboxOptions(options);
|
|
100
|
+
await this.#ready;
|
|
101
|
+
this.#options = { ...options };
|
|
102
|
+
await this.ctx.storage.put("__voidSandboxOptions", this.#options);
|
|
103
|
+
if (this.container.running) await this.container.setInactivityTimeout(this.inactivityTimeoutMs);
|
|
104
|
+
}
|
|
105
|
+
get inactivityTimeoutMs() {
|
|
106
|
+
return this.#options.inactivityTimeoutMs ?? 6e5;
|
|
107
|
+
}
|
|
108
|
+
async beforeStart() {}
|
|
109
|
+
async afterStart() {}
|
|
110
|
+
async beforeUse() {}
|
|
111
|
+
async stopped() {}
|
|
112
|
+
processContext(_exitCode) {}
|
|
113
|
+
async waitForProcessExit(exitCode, _context) {
|
|
114
|
+
return exitCode;
|
|
115
|
+
}
|
|
116
|
+
/** Native abort listeners must be detached as soon as a process exits. */
|
|
117
|
+
async execProcess(argv, options = {}) {
|
|
118
|
+
const { signal, ...nativeOptions } = options;
|
|
119
|
+
if (!signal) return this.container.exec(argv, nativeOptions);
|
|
120
|
+
const controller = new AbortController();
|
|
121
|
+
const abort = () => controller.abort();
|
|
122
|
+
if (signal.aborted) abort();
|
|
123
|
+
else signal.addEventListener("abort", abort, { once: true });
|
|
124
|
+
const finish = () => signal.removeEventListener("abort", abort);
|
|
125
|
+
try {
|
|
126
|
+
const process = await this.container.exec(argv, {
|
|
127
|
+
...nativeOptions,
|
|
128
|
+
signal: controller.signal
|
|
129
|
+
});
|
|
130
|
+
process.exitCode.then(finish, finish);
|
|
131
|
+
return process;
|
|
132
|
+
} catch (error) {
|
|
133
|
+
finish();
|
|
134
|
+
throw error;
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
async initializationOutput(argv, options, timeoutMs) {
|
|
138
|
+
const controller = new AbortController();
|
|
139
|
+
const timer = setTimeout(() => controller.abort(), timeoutMs);
|
|
140
|
+
const finish = () => clearTimeout(timer);
|
|
141
|
+
try {
|
|
142
|
+
const process = await this.execProcess(argv, {
|
|
143
|
+
...options,
|
|
144
|
+
signal: controller.signal
|
|
145
|
+
});
|
|
146
|
+
process.exitCode.then(finish, finish);
|
|
147
|
+
return await process.output();
|
|
148
|
+
} finally {
|
|
149
|
+
finish();
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
async initialize() {
|
|
153
|
+
if ((await this.initializationOutput([
|
|
154
|
+
"sh",
|
|
155
|
+
"-c",
|
|
156
|
+
"mkdir -p /workspace"
|
|
157
|
+
], {}, 6e4)).exitCode !== 0) throw new Error("Sandbox workspace initialization failed.");
|
|
158
|
+
}
|
|
159
|
+
get entrypoint() {}
|
|
160
|
+
get image() {
|
|
161
|
+
return this.container.images.default;
|
|
162
|
+
}
|
|
163
|
+
async ensureRunning() {
|
|
164
|
+
if (!this.#setup || !this.container.running && !this.starting) {
|
|
165
|
+
this.starting = true;
|
|
166
|
+
this.#setup = this.setup(this.#epoch).catch((error) => {
|
|
167
|
+
this.#setup = void 0;
|
|
168
|
+
throw error;
|
|
169
|
+
}).finally(() => {
|
|
170
|
+
this.starting = false;
|
|
171
|
+
});
|
|
172
|
+
}
|
|
173
|
+
await this.#setup;
|
|
174
|
+
await this.beforeUse();
|
|
175
|
+
}
|
|
176
|
+
async setup(epoch) {
|
|
177
|
+
await this.#ready;
|
|
178
|
+
try {
|
|
179
|
+
await this.beforeStart();
|
|
180
|
+
if (epoch !== this.#epoch) throw new Error("Sandbox startup was cancelled.");
|
|
181
|
+
if (!this.container.running) this.container.start({
|
|
182
|
+
image: this.image,
|
|
183
|
+
instance: this.instanceType,
|
|
184
|
+
enableInternet: this.#options.enableInternet ?? false,
|
|
185
|
+
labels: this.#options.labels,
|
|
186
|
+
...this.entrypoint ? { entrypoint: this.entrypoint } : {}
|
|
187
|
+
});
|
|
188
|
+
await this.initialize();
|
|
189
|
+
if (epoch !== this.#epoch) throw new Error("Sandbox startup was cancelled.");
|
|
190
|
+
await this.container.setInactivityTimeout(this.inactivityTimeoutMs);
|
|
191
|
+
await this.afterStart();
|
|
192
|
+
} catch (error) {
|
|
193
|
+
await this.destroy().catch(() => {});
|
|
194
|
+
throw error;
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
async destroy() {
|
|
198
|
+
this.#epoch++;
|
|
199
|
+
if (this.container.running) await this.container.destroy();
|
|
200
|
+
if (this.container.running) throw new Error("VOID_SANDBOX_unavailable");
|
|
201
|
+
if (!this.starting) this.#setup = void 0;
|
|
202
|
+
await this.stopped();
|
|
203
|
+
}
|
|
204
|
+
async invoke(operation, args) {
|
|
205
|
+
if (!Array.isArray(args)) throw new TypeError("Sandbox arguments must be an array.");
|
|
206
|
+
if (operation === "destroy") return this.destroy();
|
|
207
|
+
if (operation === "running") return this.container.running;
|
|
208
|
+
if (operation === "files") {
|
|
209
|
+
const [method, ...parameters] = args;
|
|
210
|
+
if (!FILE_OPERATIONS.has(method)) throw new TypeError(`Unsupported Sandbox file operation: ${String(method)}`);
|
|
211
|
+
await this.ensureRunning();
|
|
212
|
+
const index = method === "writeFile" || method === "rename" ? 2 : 1;
|
|
213
|
+
const { options, finish } = operationOptions(parameters[index]);
|
|
214
|
+
parameters[index] = options;
|
|
215
|
+
try {
|
|
216
|
+
const files = new Files({ exec: (argv, options) => this.execProcess(argv, options) });
|
|
217
|
+
const result = await files[method].apply(files, parameters);
|
|
218
|
+
if (result instanceof Response && result.body) {
|
|
219
|
+
const reader = result.body.getReader();
|
|
220
|
+
return new Response(new ReadableStream({
|
|
221
|
+
async pull(controller) {
|
|
222
|
+
try {
|
|
223
|
+
const chunk = await reader.read();
|
|
224
|
+
if (chunk.done) {
|
|
225
|
+
finish();
|
|
226
|
+
controller.close();
|
|
227
|
+
} else controller.enqueue(chunk.value);
|
|
228
|
+
} catch (error) {
|
|
229
|
+
finish();
|
|
230
|
+
controller.error(error);
|
|
231
|
+
}
|
|
232
|
+
},
|
|
233
|
+
async cancel(reason) {
|
|
234
|
+
finish();
|
|
235
|
+
await reader.cancel(reason);
|
|
236
|
+
}
|
|
237
|
+
}), result);
|
|
238
|
+
}
|
|
239
|
+
finish();
|
|
240
|
+
return result;
|
|
241
|
+
} catch (error) {
|
|
242
|
+
finish();
|
|
243
|
+
throw error;
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
if (operation === "exec") {
|
|
247
|
+
const [argv, value] = args;
|
|
248
|
+
if (!Array.isArray(argv) || argv.length === 0 || argv.some((arg) => typeof arg !== "string")) throw new TypeError("Sandbox exec requires an executable and arguments as an array of strings.");
|
|
249
|
+
const { options, finish } = operationOptions(value);
|
|
250
|
+
try {
|
|
251
|
+
await this.ensureRunning();
|
|
252
|
+
const process = await this.execProcess(argv, {
|
|
253
|
+
cwd: "/workspace",
|
|
254
|
+
...options
|
|
255
|
+
});
|
|
256
|
+
process.exitCode.then(finish, finish);
|
|
257
|
+
const processContext = this.processContext(process.exitCode);
|
|
258
|
+
return {
|
|
259
|
+
capability: new ProcessCapability(process, () => this.waitForProcessExit(process.exitCode, processContext)),
|
|
260
|
+
pid: process.pid,
|
|
261
|
+
isPty: process.isPty ?? false,
|
|
262
|
+
stdin: process.stdin ?? null,
|
|
263
|
+
stdout: process.stdout ?? null,
|
|
264
|
+
stderr: process.stderr ?? null
|
|
265
|
+
};
|
|
266
|
+
} catch (error) {
|
|
267
|
+
finish();
|
|
268
|
+
throw error;
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
if (operation === "fetch") {
|
|
272
|
+
const [port, request] = args;
|
|
273
|
+
if (!Number.isInteger(port) || port < 1 || port > 65535) throw new TypeError("Invalid Sandbox TCP port.");
|
|
274
|
+
await this.ensureRunning();
|
|
275
|
+
return this.container.getTcpPort(port).fetch(request);
|
|
276
|
+
}
|
|
277
|
+
throw new TypeError(`Unsupported Sandbox operation: ${operation}`);
|
|
278
|
+
}
|
|
279
|
+
};
|
|
280
|
+
//#endregion
|
|
281
|
+
export { SandboxContainer as n, validateSandboxOptions as r, DEFAULT_SANDBOX_INACTIVITY_TIMEOUT_MS as t };
|
|
@@ -2,41 +2,9 @@ import { a as join, n as dirname, r as extname, t as basename } from "./dist-BVq
|
|
|
2
2
|
import { n as readProjectPaths } from "./project-paths-GgcMozYz.mjs";
|
|
3
3
|
import { t as glob } from "./dist-Bn8Kodjp.mjs";
|
|
4
4
|
import { n as isIdentifier, r as isLiteral } from "./ast-CPGPjb0V.mjs";
|
|
5
|
-
import { n as parseRouteFilename } from "./parse-filename-
|
|
5
|
+
import { a as staticLiteral, i as staticExportInitializers, n as parseRouteFilename } from "./parse-filename-CUbj-1MP.mjs";
|
|
6
6
|
import { existsSync, readFileSync } from "node:fs";
|
|
7
7
|
import { parseSync } from "vite";
|
|
8
|
-
//#region src/shared/static-exports.ts
|
|
9
|
-
/** Read the initializer of directly exported constants without evaluating user code. */
|
|
10
|
-
function staticExportInitializers(filename, source, names) {
|
|
11
|
-
const result = /* @__PURE__ */ new Map();
|
|
12
|
-
const program = parseSync(filename, source).program;
|
|
13
|
-
for (const statement of program.body ?? []) {
|
|
14
|
-
if (statement.type !== "ExportNamedDeclaration") continue;
|
|
15
|
-
const declaration = statement.declaration;
|
|
16
|
-
if (declaration?.type !== "VariableDeclaration" || declaration.kind !== "const") continue;
|
|
17
|
-
for (const variable of declaration.declarations ?? []) if (isIdentifier(variable.id) && names.has(variable.id.name) && variable.init) result.set(variable.id.name, variable.init);
|
|
18
|
-
}
|
|
19
|
-
return result;
|
|
20
|
-
}
|
|
21
|
-
function unwrapStaticExpression(node) {
|
|
22
|
-
while (node && [
|
|
23
|
-
"ParenthesizedExpression",
|
|
24
|
-
"TSAsExpression",
|
|
25
|
-
"TSSatisfiesExpression",
|
|
26
|
-
"TSTypeAssertion"
|
|
27
|
-
].includes(node.type)) node = node.expression;
|
|
28
|
-
return node;
|
|
29
|
-
}
|
|
30
|
-
function staticLiteral(node) {
|
|
31
|
-
node = unwrapStaticExpression(node);
|
|
32
|
-
if (node?.type === "Literal") return node.value;
|
|
33
|
-
if (node?.type === "TemplateLiteral") {
|
|
34
|
-
const expressions = node.expressions;
|
|
35
|
-
const quasis = node.quasis;
|
|
36
|
-
if (expressions?.length === 0 && quasis?.length === 1) return quasis[0]?.value?.cooked;
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
//#endregion
|
|
40
8
|
//#region src/pages/layout-resolution.ts
|
|
41
9
|
function isNamedLayout(layout) {
|
|
42
10
|
return "name" in layout;
|
|
@@ -131,7 +99,8 @@ function componentLayout(source, filename) {
|
|
|
131
99
|
const scripts = filename.endsWith(".vue") || filename.endsWith(".svelte") ? [...source.matchAll(/<script\b[^>]*>([\s\S]*?)<\/script\s*>/gi)].map((match) => match[1]) : [source];
|
|
132
100
|
for (const script of scripts) {
|
|
133
101
|
if (!script.includes("layout")) continue;
|
|
134
|
-
const
|
|
102
|
+
const initializer = staticExportInitializers(filename.replace(/\.(vue|svelte)$/, ".ts"), script, /* @__PURE__ */ new Set(["layout"])).get("layout");
|
|
103
|
+
const value = staticLiteral(initializer);
|
|
135
104
|
if (typeof value === "string" || value === false) return value;
|
|
136
105
|
}
|
|
137
106
|
}
|
|
@@ -366,4 +335,4 @@ function extractFrontmatterLayout(source) {
|
|
|
366
335
|
return value;
|
|
367
336
|
}
|
|
368
337
|
//#endregion
|
|
369
|
-
export { resolveNamedLayout as a,
|
|
338
|
+
export { resolveNamedLayout as a, resolveLayoutIds as i, resolveEffectiveLayoutChain as n, resolveLayoutChain as r, scanPages as t };
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { c as getToken } from "./auth-DLNN0D3Z.mjs";
|
|
1
|
+
import { c as getToken } from "./auth-CSkdO2Bb.mjs";
|
|
3
2
|
import { i as readDeploymentPlatform, o as readProjectConfig } from "./project-C0Fqu05O.mjs";
|
|
4
|
-
import { _ as validateSecretValues } from "./env-validation-
|
|
5
|
-
import { E as confirm, F as password, N as note, O as intro, P as outro, T as cancel, W as isCancel, j as log } from "./dist-
|
|
6
|
-
import { n as PlatformClient } from "./client-
|
|
3
|
+
import { _ as validateSecretValues } from "./env-validation-BPn7vk-V.mjs";
|
|
4
|
+
import { E as confirm, F as password, N as note, O as intro, P as outro, T as cancel, W as isCancel, j as log } from "./dist-CTBk70IR.mjs";
|
|
5
|
+
import { n as PlatformClient } from "./client-RV8NVeB8.mjs";
|
|
6
|
+
import { r as cliTitle } from "./output-Dm_A4Tbv.mjs";
|
|
7
7
|
import { r as resolveProjectBySlug, t as getRequestedProjectSlug } from "./resolve-project-BG5ORGID.mjs";
|
|
8
8
|
import { readFileSync } from "node:fs";
|
|
9
9
|
//#region src/cli/secret.ts
|
|
@@ -78,7 +78,7 @@ async function runSecretCommand(root, args) {
|
|
|
78
78
|
}
|
|
79
79
|
async function runCloudflareSecretCommand(root, args) {
|
|
80
80
|
if (args.projectName) throw new Error("secret: --project selects a Void platform project and is not used for direct Cloudflare apps.");
|
|
81
|
-
const { deleteCloudflareSecret, listCloudflareSecrets, putCloudflareSecret, resolveCloudflareOperationContext, syncCloudflareSecrets } = await import("./cloudflare-operations-
|
|
81
|
+
const { deleteCloudflareSecret, listCloudflareSecrets, putCloudflareSecret, resolveCloudflareOperationContext, syncCloudflareSecrets } = await import("./cloudflare-operations-AiWashgg.mjs");
|
|
82
82
|
const context = resolveCloudflareOperationContext(root);
|
|
83
83
|
if (args.action === "list") {
|
|
84
84
|
const secrets = await listCloudflareSecrets(context);
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { a as join, l as relative } from "./dist-BVqXeR_h.mjs";
|
|
2
|
-
import { j as log } from "./dist-
|
|
2
|
+
import { j as log } from "./dist-CTBk70IR.mjs";
|
|
3
3
|
import { n as getPackageDir } from "./agents-B_pX_HmQ.mjs";
|
|
4
4
|
import { existsSync, mkdirSync, readFileSync, readdirSync, readlinkSync, symlinkSync } from "node:fs";
|
|
5
5
|
//#region src/cli/skills.ts
|
|
@@ -55,6 +55,7 @@ function eventStream(start, options = {}) {
|
|
|
55
55
|
const markClosed = () => {
|
|
56
56
|
if (closedOnce) return;
|
|
57
57
|
closedOnce = true;
|
|
58
|
+
options.signal?.removeEventListener("abort", abort);
|
|
58
59
|
if (!signalController.signal.aborted) signalController.abort();
|
|
59
60
|
if (keepAliveTimer != null) {
|
|
60
61
|
clearInterval(keepAliveTimer);
|
|
@@ -68,10 +69,12 @@ function eventStream(start, options = {}) {
|
|
|
68
69
|
await writer.close().catch(() => {});
|
|
69
70
|
}
|
|
70
71
|
async function fail(error) {
|
|
71
|
-
if (closedOnce) return;
|
|
72
72
|
markClosed();
|
|
73
73
|
await writer.abort(error).catch(() => {});
|
|
74
74
|
}
|
|
75
|
+
function abort() {
|
|
76
|
+
fail(options.signal?.reason ?? new SseStreamClosedError());
|
|
77
|
+
}
|
|
75
78
|
async function write(text) {
|
|
76
79
|
if (closedOnce) throw new SseStreamClosedError();
|
|
77
80
|
try {
|
|
@@ -95,11 +98,11 @@ function eventStream(start, options = {}) {
|
|
|
95
98
|
writer.closed.catch(() => {
|
|
96
99
|
close();
|
|
97
100
|
});
|
|
98
|
-
if (options.signal?.aborted) close();
|
|
99
|
-
else options.signal?.addEventListener("abort", () => void close(), { once: true });
|
|
100
101
|
if (keepAlive) keepAliveTimer = setInterval(() => {
|
|
101
102
|
stream.comment(keepAlive.comment).catch(() => close());
|
|
102
103
|
}, keepAlive.intervalMs);
|
|
104
|
+
if (options.signal?.aborted) abort();
|
|
105
|
+
else options.signal?.addEventListener("abort", abort, { once: true });
|
|
103
106
|
queueMicrotask(() => {
|
|
104
107
|
(async () => {
|
|
105
108
|
try {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { c as
|
|
2
|
-
import {
|
|
1
|
+
import { S as S_STEP_SUBMIT, _ as S_RADIO_ACTIVE, c as S_CHECKBOX_INACTIVE, i as S_BAR_END, q as wrapAnsi, r as S_BAR, s as S_CHECKBOX_ACTIVE, v as S_RADIO_INACTIVE, y as S_STEP_ACTIVE } from "./dist-CTBk70IR.mjs";
|
|
2
|
+
import { c as import_picocolors } from "./output-Dm_A4Tbv.mjs";
|
|
3
3
|
//#region src/cli/subcommand-prompt.ts
|
|
4
4
|
function promptSubcommand(command, subcommands) {
|
|
5
5
|
return new Promise((resolve) => {
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { a as join } from "./dist-BVqXeR_h.mjs";
|
|
2
2
|
import { n as readJournal, r as stripSqlExt } from "./collect-DiTn9yr6.mjs";
|
|
3
|
-
import { t as DESTRUCTIVE_PRAGMA
|
|
3
|
+
import { t as DESTRUCTIVE_PRAGMA } from "./plan-NPpwZ_kc.mjs";
|
|
4
4
|
import { existsSync, readdirSync } from "node:fs";
|
|
5
|
+
import { tokenizeSql } from "@void/deploy-core";
|
|
5
6
|
//#region src/migrations/validate.ts
|
|
6
7
|
/**
|
|
7
8
|
* Destructive SQL patterns that are rejected unless the migration
|