void 0.25.0 → 0.26.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/dist/{account-cmd-DcR1ywt8.mjs → account-cmd-CDry3B5V.mjs} +4 -4
- package/dist/{application-analysis-BVsVqc11.mjs → application-analysis-DC2yPvzY.mjs} +1 -1
- package/dist/{application-routing-B7QEjqSR.mjs → application-routing-C9khgLiS.mjs} +1 -1
- package/dist/{auth-CdgZ9uag.mjs → auth-B60QDbjg.mjs} +1 -1
- package/dist/{auth-7wuZ5ob8.mjs → auth-D52yG7hl.mjs} +3 -3
- package/dist/{auth-link-Z6E5DYvM.mjs → auth-link-DjeOptYi.mjs} +4 -4
- package/dist/{auth-router-BdM4avI8.mjs → auth-router-BRxIuqDi.mjs} +5 -5
- package/dist/{build-cmd-CEE7D-hM.mjs → build-cmd-Ce3C8huo.mjs} +4 -4
- package/dist/{cache-TcZnBLtH.mjs → cache-CS8Yxr5a.mjs} +4 -4
- package/dist/{cancel-deploy-CYoZmcmR.mjs → cancel-deploy-mZsD88Xa.mjs} +3 -3
- package/dist/{cf-access-AHKBzmuu.mjs → cf-access-YTlqvAsk.mjs} +1 -1
- package/dist/cli/cli.mjs +40 -40
- package/dist/cli/cloudflare-operation-process.mjs +1 -1
- package/dist/cli/env-schema-probe.d.mts +1 -1
- package/dist/client-BxVixJBI.mjs +2 -0
- package/dist/{client-RsPo8wsP.mjs → client-mC-dFGDD.mjs} +5 -5
- package/dist/{cloudflare-operations-CjaV4lZi.mjs → cloudflare-operations-DYa3coIk.mjs} +1 -1
- package/dist/{cloudflare-operations-BhbK6yTq.mjs → cloudflare-operations-DoQrVHAt.mjs} +1 -1
- package/dist/{connect-DCvUmPXY.mjs → connect-H6EvP62X.mjs} +6 -6
- package/dist/{create-project-eAPgYq35.mjs → create-project-B2kk9Q0o.mjs} +4 -4
- package/dist/{create-project-C734I-Mu.mjs → create-project-Dbb4uiN-.mjs} +1 -1
- package/dist/{db-C07GEdKF.mjs → db-DpCKZto0.mjs} +21 -21
- package/dist/{delete-pKMVsrpJ.mjs → delete-CxlSvsvW.mjs} +6 -6
- package/dist/{deploy-DfsAe-T0.mjs → deploy-CeEbnv4b.mjs} +38 -24
- package/dist/{deploy-BDu1vhSH.mjs → deploy-qmiLE1G1.mjs} +1 -1
- package/dist/{domain-D3uA9ize.mjs → domain-B_9VgOm6.mjs} +6 -6
- package/dist/{email-z3o2cwjH.mjs → email-BokHgjKj.mjs} +6 -6
- package/dist/{env-3Q8-_2IH.mjs → env-BdTc-K2L.mjs} +6 -5
- package/dist/{env-public-BX_r8HR6.d.mts → env-public-DR7ZM6d-.d.mts} +1 -1
- package/dist/{fetch-stream-IvCYKyQL.mjs → fetch-stream-Nm3hkZbT.mjs} +8 -1
- package/dist/{gen-NjwoG9FK.mjs → gen-BhDlTpwW.mjs} +1 -1
- package/dist/gen-qCBwH3fZ.mjs +2 -0
- package/dist/{github-cmd-DquUq-b1.mjs → github-cmd-hhkTzlGS.mjs} +4 -4
- package/dist/{handler-CZ4nAylQ.d.mts → handler-BeK3weD4.d.mts} +1 -1
- package/dist/{help-DRZXC4fj.mjs → help-Bv44e2tm.mjs} +13 -9
- package/dist/help-Dw5f9Xrg.mjs +2 -0
- package/dist/index.d.mts +1 -1
- package/dist/index.mjs +30 -17
- package/dist/{info-BmA3_IFZ.mjs → info-DhtTKh65.mjs} +1 -1
- package/dist/{init-DT7yuuyl.mjs → init-BMf4T03q.mjs} +10 -9
- package/dist/{limits-Bq5LG8Id.d.mts → limits-CFsDKQvU.d.mts} +1 -10
- package/dist/{limits-Cjuk2VPm.mjs → limits-D0vD1M9A.mjs} +1 -22
- package/dist/{link-CXOlqh2F.mjs → link-BqYsSS_I.mjs} +5 -5
- package/dist/{list-eEWVJEPn.mjs → list-_kBToO-l.mjs} +7 -6
- package/dist/{live-Chw1eIMv.d.mts → live-iAuEH1hd.d.mts} +1 -1
- package/dist/{local-d1-Df4XpwhW.mjs → local-d1-fGxYrVD6.mjs} +1 -1
- package/dist/login-D7meQg_3.mjs +2 -0
- package/dist/{login-pWQHYVu2.mjs → login-DFuo-RWO.mjs} +4 -4
- package/dist/{logs-DnxVX7TR.mjs → logs-DYgnh6dH.mjs} +5 -5
- package/dist/{node-BkyRWRx8.mjs → node-C6Q6e1Es.mjs} +1 -1
- package/dist/{operator-args-CAVcmwUt.mjs → operator-args-DdY54Bgb.mjs} +1 -1
- package/dist/{operator-auth-CkmTE3rt.mjs → operator-auth-2dsGlTT5.mjs} +4 -8
- package/dist/{operator-client-LmwjxT6q.mjs → operator-client-BFqpp6z0.mjs} +3 -3
- package/dist/{operator-cmd-d-IEKgNk.mjs → operator-cmd-CUGHXrQf.mjs} +27 -9
- package/dist/operator-cmd-DRPvhpjM.mjs +2 -0
- package/dist/{output-BBsUwdyT.mjs → output-BvdaehtE.mjs} +26 -2
- package/dist/pages/client.d.mts +1 -1
- package/dist/pages/index.mjs +1 -1
- package/dist/pages/islands-plugin.mjs +1 -1
- package/dist/pages/protocol.d.mts +2 -2
- package/dist/{plan-NPpwZ_kc.mjs → plan-CJGEeTEI.mjs} +2 -2
- package/dist/plan-COtUvdMA.mjs +2 -0
- package/dist/{platform-args-Bzf8JPc2.mjs → platform-args-DSV2p4nY.mjs} +4 -2
- package/dist/platform-args-Dcy_5b_Y.mjs +2 -0
- package/dist/{platform-auth-config-0V0lA3pF.mjs → platform-auth-config-Bosx7U1h.mjs} +18 -17
- package/dist/{platform-auth-protection-DFeJ-JkK.mjs → platform-auth-protection-DcbL_LW_.mjs} +6 -6
- package/dist/{platform-auth-recovery-ICy4muq6.mjs → platform-auth-recovery-WfTZ8K6o.mjs} +5 -5
- package/dist/{platform-cmd-D7vSWMvV.mjs → platform-cmd-DbKtQb_4.mjs} +45 -20
- package/dist/{platform-cmd-BPySFOew.mjs → platform-cmd-dyFUof0t.mjs} +1 -1
- package/dist/{platform-discovery-DDDUvnqp.mjs → platform-discovery-BC0HCKYt.mjs} +18 -4
- package/dist/{platform-domain-CUdY064e.mjs → platform-domain-Bsq43AJp.mjs} +5 -4
- package/dist/{platform-lifecycle-BaUdTRPU.mjs → platform-lifecycle--5gWmDoI.mjs} +1 -1
- package/dist/{platform-lifecycle-Dm09JNkn.mjs → platform-lifecycle-Cfi0o6xM.mjs} +863 -35
- package/dist/{platform-management-Bp6aoH2C.mjs → platform-management-Bbwf6-Dq.mjs} +1 -1
- package/dist/{platform-management-BSEc_ZeG.mjs → platform-management-BrF9STZp.mjs} +173 -30
- package/dist/{platform-plans-config-B0pOVQyW.mjs → platform-plans-config-DU-8nC2Y.mjs} +2 -2
- package/dist/{platform-recovery-WOZ95Uze.mjs → platform-recovery-DQAqAQYu.mjs} +3 -3
- package/dist/{platform-registry-KfNEF84O.mjs → platform-registry-P387v42A.mjs} +17 -10
- package/dist/prepare-BBknoZI1.mjs +2 -0
- package/dist/{prepare-39EvOhI6.mjs → prepare-BMrRWLwP.mjs} +3 -2
- package/dist/{prepare-DnaKBi--.mjs → prepare-WoUubFKL.mjs} +1 -1
- package/dist/{project-IOjBU8R6.mjs → project-BiaPQ7ur.mjs} +1 -1
- package/dist/{project-BkbfDs0V.mjs → project-DQstYTxO.mjs} +1 -1
- package/dist/{project-cmd-Bs5A392E.mjs → project-cmd-BbH2LptN.mjs} +18 -18
- package/dist/{project-team-ohAWWaew.mjs → project-team-Yiww3-go.mjs} +5 -5
- package/dist/{project-token-CP01Jna6.mjs → project-token-BrtT2NkY.mjs} +4 -4
- package/dist/{project-zero-trust-BzkVgx35.mjs → project-zero-trust-nYJ2V2nc.mjs} +5 -5
- package/dist/{protocol-CjF_iI9X.d.mts → protocol-BX8t2jiw.d.mts} +1 -1
- package/dist/{provision-BEv0k-qz.mjs → provision-DMTPG8Rh.mjs} +1 -1
- package/dist/{provision-Btj1jppf.mjs → provision-VeqAC77A.mjs} +13 -1
- package/dist/{requests-B3PBuGlX.mjs → requests-TIz_jtSu.mjs} +4 -4
- package/dist/{rollback-DDub9GsO.mjs → rollback-dBqICPzj.mjs} +5 -5
- package/dist/{runner-Ol0TNjk6.mjs → runner--2KF6Kua.mjs} +1 -1
- package/dist/{runner-CXA9Fh8h.mjs → runner-voIltZrY.mjs} +1 -1
- package/dist/runtime/ai.d.mts +10 -11
- package/dist/runtime/ai.mjs +13 -18
- package/dist/runtime/client-react.mjs +1 -1
- package/dist/runtime/client-solid.mjs +1 -1
- package/dist/runtime/client-svelte.mjs +1 -1
- package/dist/runtime/client-vue.mjs +1 -1
- package/dist/runtime/client.mjs +1 -1
- package/dist/runtime/env-public.d.mts +1 -1
- package/dist/runtime/fetch-stream.mjs +1 -1
- package/dist/runtime/handler.d.mts +1 -1
- package/dist/runtime/limits.d.mts +2 -2
- package/dist/runtime/limits.mjs +2 -2
- package/dist/runtime/live-client.d.mts +1 -1
- package/dist/runtime/live.d.mts +1 -1
- package/dist/runtime/migration-handler.mjs +33 -7
- package/dist/runtime/routing.d.mts +1 -1
- package/dist/runtime/sandbox.d.mts +1 -1
- package/dist/runtime/sandbox.mjs +12 -22
- package/dist/runtime/validator.d.mts +1 -1
- package/dist/runtime/ws-server.d.mts +1 -1
- package/dist/runtime/ws.d.mts +1 -1
- package/dist/{sandbox-XZAqzFlG.d.mts → sandbox-C5LFoJMf.d.mts} +7 -7
- package/dist/{scan-C7okrLyM.mjs → scan-C8dA7iM4.mjs} +10 -6
- package/dist/{secret-3c72lY1U.mjs → secret-AKnNXNP5.mjs} +6 -6
- package/dist/{subcommand-prompt-Dhom39bd.mjs → subcommand-prompt-B6WS9Aoz.mjs} +1 -1
- package/dist/validate-pna7R3Pv.mjs +2 -0
- package/dist/{validate-ctOrgiS3.mjs → validate-ymhap6M_.mjs} +1 -1
- package/dist/{ws-CL1w7GXU.d.mts → ws-C79j4aED.d.mts} +1 -1
- package/package.json +7 -7
- package/skills/void/SKILL.md +5 -2
- package/skills/void/docs/guide/ai.md +65 -62
- package/skills/void/docs/guide/app-types.md +1 -1
- package/skills/void/docs/guide/database.md +15 -0
- package/skills/void/docs/guide/live.md +2 -0
- package/skills/void/docs/guide/pages-routing/actions-and-forms.md +1 -1
- package/skills/void/docs/guide/platform/installation/credentials.md +2 -2
- package/skills/void/docs/guide/platform/installation/first-deployment.md +5 -1
- package/skills/void/docs/guide/platform/installation/maintenance.md +3 -1
- package/skills/void/docs/guide/platform/installation/setup.md +1 -1
- package/skills/void/docs/guide/platform/installation/uninstall.md +44 -11
- package/skills/void/docs/guide/sandboxes.md +39 -20
- package/skills/void/docs/reference/api/resources.md +11 -14
- package/skills/void/docs/reference/api.md +35 -34
- package/skills/void/docs/reference/cli/auth.md +3 -1
- package/skills/void/docs/reference/cli/platform-config.md +2 -2
- package/skills/void/docs/reference/cli/platform-installation.md +14 -12
- package/skills/void/docs/reference/cli/platform.md +4 -2
- package/skills/void/docs/reference/cli.md +1 -1
- package/skills/void/docs/reference/resource-inference.md +1 -0
- package/dist/client-B4Me-9HE.mjs +0 -2
- package/dist/gen-ById9r2j.mjs +0 -2
- package/dist/help-DPGBwomV.mjs +0 -2
- package/dist/login-C98-sw79.mjs +0 -2
- package/dist/plan-D1Q5rf-r.mjs +0 -2
- package/dist/platform-args-Cq6EjQro.mjs +0 -2
- package/dist/prepare-CnjcTV2s.mjs +0 -2
- package/dist/validate-Dq_L3s0S.mjs +0 -2
|
@@ -5,49 +5,49 @@ import { m as needsApplicationDatabase, r as detectFramework } from "./plugin-in
|
|
|
5
5
|
import { n as readProjectPaths, t as assertNoRootSourceConventionConflicts } from "./project-paths-GgcMozYz.mjs";
|
|
6
6
|
import { d as isNodeTarget, h as resolveBindingNames, m as readConfig } from "./config-Br_JZD6u.mjs";
|
|
7
7
|
import { n as isIdentifier, r as isLiteral } from "./ast-CPGPjb0V.mjs";
|
|
8
|
-
import { o as scanDurableObjectModules, t as analyzeApplicationSync } from "./application-analysis-
|
|
8
|
+
import { o as scanDurableObjectModules, t as analyzeApplicationSync } from "./application-analysis-DC2yPvzY.mjs";
|
|
9
9
|
import { t as collectMigrations } from "./collect-DiTn9yr6.mjs";
|
|
10
10
|
import { o as validateSsrEntry } from "./entry-CF5wvH4w.mjs";
|
|
11
11
|
import { r as hasEmailHandlers } from "./email--tEtMoj_.mjs";
|
|
12
12
|
import { a as hasSandboxSqliteMigration, c as resolveSandboxConfig, i as assertSandboxNamespaceConfig, l as sandboxContainerConfig, r as SANDBOX_MIGRATION_TAG, s as requiresSandboxPlatformImage } from "./config-C_XRIPx2.mjs";
|
|
13
13
|
import { i as voidWarn, r as voidLog } from "./log-vqY3pqwI.mjs";
|
|
14
14
|
import { n as lintDuplicateSources, r as mergeRoutingRules, t as lintDestinationSplats } from "./headers-2rKda9Y6.mjs";
|
|
15
|
-
import {
|
|
16
|
-
import { l as writeProjectConfig, n as readDeploymentPlatform, o as shouldLinkDeployProject, r as readProjectConfig, s as writeDeploymentPlatform, t as attachSelectedPlatform } from "./project-
|
|
15
|
+
import { s as listPlatformConnections } from "./platform-registry-P387v42A.mjs";
|
|
16
|
+
import { l as writeProjectConfig, n as readDeploymentPlatform, o as shouldLinkDeployProject, r as readProjectConfig, s as writeDeploymentPlatform, t as attachSelectedPlatform } from "./project-DQstYTxO.mjs";
|
|
17
17
|
import { i as persistCloudflareConfig, r as materializeCloudflareConfig, s as stashCloudflareDeployPointer } from "./cloudflare-config-Bktvwtpf.mjs";
|
|
18
18
|
import { A as writeProvisionedWranglerConfig, C as readWranglerPublishedTrafficSnapshot, D as syncWranglerDurableObjects, E as syncWranglerBindings, O as syncWranglerWebSockets, S as readWranglerManagedQueueCleanupCandidates, T as resolveLiveBindingConfig, _ as readExistingLiveBindingConfig, a as LIVE_MIGRATION_TAG, c as bindingEntriesForField, g as normalizeWranglerCompatibilityFlags, h as nextDurableObjectMigrationTag, j as writeWranglerPublishedTrafficSnapshot, l as bindingNamesForField, m as hasDurableObjectSqliteMigration, o as acknowledgeWranglerManagedQueueRemovals, p as findBindingNameOwner, r as FRIENDLY_BINDING_NAMES, u as ensureWranglerCompat } from "./wrangler-DhUerFkW.mjs";
|
|
19
|
-
import { n as buildMigrationPlanBundle } from "./plan-
|
|
19
|
+
import { n as buildMigrationPlanBundle } from "./plan-CJGEeTEI.mjs";
|
|
20
20
|
import { n as scopedAccessCredentials, r as trustedCloudflareWorkerAccessHeaders, t as cfAccessHeaders } from "./cf-access-TWNzXltp.mjs";
|
|
21
|
-
import { r as ensurePlatformProxyAccess, t as ensureCloudflaredToken } from "./cf-access-
|
|
22
|
-
import { a as getApiUrl, c as getToken, l as getTokenSource, o as getProxyUrl } from "./auth-
|
|
21
|
+
import { r as ensurePlatformProxyAccess, t as ensureCloudflaredToken } from "./cf-access-YTlqvAsk.mjs";
|
|
22
|
+
import { a as getApiUrl, c as getToken, l as getTokenSource, o as getProxyUrl } from "./auth-D52yG7hl.mjs";
|
|
23
23
|
import { r as scanWranglerDotenvKeys } from "./dotenv-VQxupEUv.mjs";
|
|
24
24
|
import { t as discoverSchema } from "./discover-BcPPiF1o.mjs";
|
|
25
25
|
import { t as MagicString } from "./dist-AoCzRTJE.mjs";
|
|
26
26
|
import { t as findEnvFile } from "./env-types-D5kds_OZ.mjs";
|
|
27
27
|
import { d as formatEnvReport, f as listSelfHostSecretNames, g as validateProdEnv, h as selfHostSchemaFailureMessage, i as SelfHostSecretListError, l as dischargeSelfHostEnvContext, n as SelfHostFirstDeployError, p as readEmittedWorkerVars, r as SelfHostSchemaError, s as deriveSelfHostEnvContextFromVars, t as SelfHostEnvValidationError, u as fetchRemoteSecretNames, v as readGeneratedWranglerConfigFile } from "./env-validation-vBSQ8gw5.mjs";
|
|
28
28
|
import { n as CLOUDFLARE_DEPLOY_BUILD_ENV, o as resolveRemoteMode, s as stripInternalEnvKeys } from "./env-_v349JBd.mjs";
|
|
29
|
-
import { A as confirm,
|
|
29
|
+
import { A as confirm, H as outro, K as select, L as log$1, N as intro, tt as isCancel } from "./prompts-6OSVA7DJ.mjs";
|
|
30
30
|
import { n as getPackageDir } from "./agents-B_pX_HmQ.mjs";
|
|
31
|
-
import { a as isExpiredTokenError, c as platformErrorMessage, i as isCliOutdatedError, n as PlatformApiError, r as PlatformClient, s as parsePlatformErrorBody } from "./client-
|
|
31
|
+
import { a as isExpiredTokenError, c as platformErrorMessage, i as isCliOutdatedError, n as PlatformApiError, r as PlatformClient, s as parsePlatformErrorBody } from "./client-mC-dFGDD.mjs";
|
|
32
32
|
import { r as discoverFrameworkWranglerFiles, t as migrateLegacyVoidConfig } from "./migrate-CV1on-yJ.mjs";
|
|
33
33
|
import { a as detectPreset, c as resolveCloudflareOperationArgv, i as FRAMEWORK_PRESETS, l as resolveProjectCommand, o as formatProjectCommand, s as hasBackendFiles, t as createCloudflareProcessRunner } from "./cloudflare-process-B-wekeR6.mjs";
|
|
34
34
|
import { t as formatCloudflareUserMessage } from "./cloudflare-user-output-Q-k0QoNQ.mjs";
|
|
35
|
-
import { c as import_picocolors$1, l as
|
|
36
|
-
import { a as promptProjectSelection, i as reportProjectCreationWarnings, o as promptProjectSetupAction, r as promptAndCreateProject } from "./create-project-
|
|
35
|
+
import { c as import_picocolors$1, l as note, o as formatCount, r as createSpinner, u as sanitizeTerminalText } from "./output-BvdaehtE.mjs";
|
|
36
|
+
import { a as promptProjectSelection, i as reportProjectCreationWarnings, o as promptProjectSetupAction, r as promptAndCreateProject } from "./create-project-B2kk9Q0o.mjs";
|
|
37
37
|
import { t as getRequestedProjectSlug } from "./resolve-project-BG5ORGID.mjs";
|
|
38
|
-
import { n as completeApplicationAnalysis, t as analyzeApplication } from "./application-routing-
|
|
38
|
+
import { n as completeApplicationAnalysis, t as analyzeApplication } from "./application-routing-C9khgLiS.mjs";
|
|
39
39
|
import { n as openMigrationValidationDatabase, t as SqliteMigrationError } from "./sqlite-validation-BzKMWnO4.mjs";
|
|
40
40
|
import { i as migrateBuiltWranglerConfig, n as prepareCfFrameworkBuildOutput, r as prepareCfStaticBuildOutput, t as prepareCfBuildOutput } from "./cf-build-output-U8o1Gl6X.mjs";
|
|
41
41
|
import { a as parseCloudflareAuthSession, i as ensureCloudflareAuthentication, n as cloudflareCredentialOverrides, t as CloudflareAuthenticationError } from "./cloudflare-auth-Qdc7tw8F.mjs";
|
|
42
|
-
import { a as createCloudflareEmptyDomainPublisher, i as createCloudflareEmptyCronPublisher } from "./cloudflare-operations-
|
|
43
|
-
import { i as validateMigrations, t as assertJournalCoherence } from "./validate-
|
|
42
|
+
import { a as createCloudflareEmptyDomainPublisher, i as createCloudflareEmptyCronPublisher } from "./cloudflare-operations-DYa3coIk.mjs";
|
|
43
|
+
import { i as validateMigrations, r as listDrizzleArtifacts, t as assertJournalCoherence } from "./validate-ymhap6M_.mjs";
|
|
44
44
|
import { t as writeDrizzleConfig } from "./config-D8MOgiQV.mjs";
|
|
45
45
|
import { i as runMySqlMigrations } from "./runner-mysql-DmWchSWJ.mjs";
|
|
46
46
|
import { i as runPgMigrations } from "./runner-pg-D4OPlil-.mjs";
|
|
47
47
|
import { n as writeVoidProjectConfig } from "./config-write-B1f88wJA.mjs";
|
|
48
48
|
import { t as renderPrerenderPaths } from "./prerender-render-D9qbLs2f.mjs";
|
|
49
49
|
import { t as collectGitDeployMetadata } from "./git-metadata-D-gurjzG.mjs";
|
|
50
|
-
import { t as promptForLoginToken } from "./login-
|
|
50
|
+
import { t as promptForLoginToken } from "./login-DFuo-RWO.mjs";
|
|
51
51
|
import { createRequire } from "node:module";
|
|
52
52
|
import { copyFileSync, cpSync, createWriteStream, existsSync, mkdirSync, mkdtempSync, readFileSync, readdirSync, readlinkSync, realpathSync, renameSync, rmSync, statSync, unlinkSync, writeFileSync } from "node:fs";
|
|
53
53
|
import { fileURLToPath } from "node:url";
|
|
@@ -254,12 +254,17 @@ async function prepareExistingCloudflareDeploy(options) {
|
|
|
254
254
|
configPath: options.configPath,
|
|
255
255
|
workerName: config.name
|
|
256
256
|
});
|
|
257
|
-
assertExistingCloudflareConfig(existing, config, false, options.approvedKv);
|
|
258
|
-
let updated = text;
|
|
259
257
|
const patch = {
|
|
260
258
|
account_id: options.accountId,
|
|
261
259
|
keep_vars: true
|
|
262
260
|
};
|
|
261
|
+
const metadataBindings = existing.bindings.filter((binding) => binding.type === "version_metadata");
|
|
262
|
+
if (config.version_metadata === void 0 && metadataBindings.length === 1 && typeof metadataBindings[0].name === "string") {
|
|
263
|
+
config.version_metadata = { binding: metadataBindings[0].name };
|
|
264
|
+
patch.version_metadata = config.version_metadata;
|
|
265
|
+
}
|
|
266
|
+
assertExistingCloudflareConfig(existing, config, false, options.approvedKv);
|
|
267
|
+
let updated = text;
|
|
263
268
|
for (const key of [
|
|
264
269
|
"compatibility_date",
|
|
265
270
|
"compatibility_flags",
|
|
@@ -1068,7 +1073,7 @@ async function generateWrapper(workerDir, workerMain, root, features) {
|
|
|
1068
1073
|
let migrationPlanBundle;
|
|
1069
1074
|
if (features.hasMigrations) {
|
|
1070
1075
|
const { collectMigrations } = await import("./collect-DLyFDiKW.mjs");
|
|
1071
|
-
const { buildMigrationPlanBundle } = await import("./plan-
|
|
1076
|
+
const { buildMigrationPlanBundle } = await import("./plan-COtUvdMA.mjs");
|
|
1072
1077
|
const migrationsDir = readProjectPaths(root).migrationsDir;
|
|
1073
1078
|
migrations = collectMigrations(migrationsDir);
|
|
1074
1079
|
migrationPlanBundle = features.migrationDialect === "sqlite" ? buildMigrationPlanBundle(migrations) : void 0;
|
|
@@ -1309,6 +1314,9 @@ function generateWrapperSource(renamedEntry, handlersModule, features, migration
|
|
|
1309
1314
|
}
|
|
1310
1315
|
if (features.readiness || features.crons.length > 0 || features.queues.length > 0 || features.hasMigrations) {
|
|
1311
1316
|
lines.push(" if (request.method === \"GET\" && url.pathname === \"/__void/ready\") {");
|
|
1317
|
+
lines.push(" if (typeof original?.fetch !== \"function\") {");
|
|
1318
|
+
lines.push(" return Response.json({ ready: false, error: \"worker entry has no fetch handler\" }, { status: 503, headers: { \"cache-control\": \"no-store\" } });");
|
|
1319
|
+
lines.push(" }");
|
|
1312
1320
|
lines.push(` return Response.json({ ready: true${features.versionMetadataBinding ? `, versionId: env[${JSON.stringify(features.versionMetadataBinding)}]?.id` : ""} }${features.versionMetadataBinding ? ", { headers: { \"cache-control\": \"no-store\" } }" : ""});`);
|
|
1313
1321
|
lines.push(" }");
|
|
1314
1322
|
}
|
|
@@ -1911,7 +1919,7 @@ let loadedProvisionModule;
|
|
|
1911
1919
|
* so a managed deploy never imports it — and thus never loads `proper-lockfile`.
|
|
1912
1920
|
*/
|
|
1913
1921
|
async function loadProvisionModule() {
|
|
1914
|
-
loadedProvisionModule ??= await import("./provision-
|
|
1922
|
+
loadedProvisionModule ??= await import("./provision-DMTPG8Rh.mjs");
|
|
1915
1923
|
return loadedProvisionModule;
|
|
1916
1924
|
}
|
|
1917
1925
|
/**
|
|
@@ -5646,7 +5654,10 @@ function applyDeployEvent(event, s) {
|
|
|
5646
5654
|
s.message("Waiting for worker to become reachable...");
|
|
5647
5655
|
return { kind: "continue" };
|
|
5648
5656
|
case "migration_start":
|
|
5649
|
-
s.message(`
|
|
5657
|
+
s.message(`Checking ${event.pending} bundled migration${event.pending === 1 ? "" : "s"}...`);
|
|
5658
|
+
return { kind: "continue" };
|
|
5659
|
+
case "migration_warning":
|
|
5660
|
+
log.warn(event.message);
|
|
5650
5661
|
return { kind: "continue" };
|
|
5651
5662
|
case "migration":
|
|
5652
5663
|
s.message(`Applied migration: ${event.name} (${event.durationMs}ms)`);
|
|
@@ -6326,7 +6337,7 @@ function assertDeploySchemaDriftFree(root, dialect) {
|
|
|
6326
6337
|
log.error(getErrorMessage$1(error));
|
|
6327
6338
|
process.exit(1);
|
|
6328
6339
|
}
|
|
6329
|
-
log.error(getDeploySchemaDriftMessage());
|
|
6340
|
+
log.error(getDeploySchemaDriftMessage(root));
|
|
6330
6341
|
process.exit(1);
|
|
6331
6342
|
}
|
|
6332
6343
|
function hasDeploySchemaDrift(root, dialect) {
|
|
@@ -6371,7 +6382,9 @@ function runDrizzleKitGenerate(root, configPath) {
|
|
|
6371
6382
|
if (result.status !== 0) throw new Error(output || `drizzle-kit generate exited with code ${result.status}.`);
|
|
6372
6383
|
return output;
|
|
6373
6384
|
}
|
|
6374
|
-
function getDeploySchemaDriftMessage() {
|
|
6385
|
+
function getDeploySchemaDriftMessage(root) {
|
|
6386
|
+
const migrationsDir = readProjectPaths(root).migrationsDir;
|
|
6387
|
+
if (collectMigrations(migrationsDir).length > 0 && !existsSync(join(migrationsDir, "meta", "_journal.json")) && listDrizzleArtifacts(migrationsDir).length === 0) return [`Missing Drizzle metadata in ${`${relative(root, migrationsDir)}/`}.`, "See https://void.cloud/guide/database#hand-written-migrations"].join("\n");
|
|
6375
6388
|
return ["Schema drift detected between your Drizzle schema and db/migrations/.", "Run `void db generate`, review the generated migration, commit it yourself, then rerun `void deploy`."].join("\n");
|
|
6376
6389
|
}
|
|
6377
6390
|
function formatDeploySchemaDriftCheckError(error) {
|
|
@@ -6662,7 +6675,7 @@ function formatCloudflareDriftMessage(missing, reasons, header, footer) {
|
|
|
6662
6675
|
* seam; tests inject a stub to avoid spawning drizzle-kit.
|
|
6663
6676
|
*/
|
|
6664
6677
|
function assertRemoteMigrationsDeployable(root, dialect, migrationsDir, migrations) {
|
|
6665
|
-
if (hasDeploySchemaDrift(root, dialect)) throw new Error(getDeploySchemaDriftMessage());
|
|
6678
|
+
if (hasDeploySchemaDrift(root, dialect)) throw new Error(getDeploySchemaDriftMessage(root));
|
|
6666
6679
|
assertJournalCoherence(migrationsDir, migrations);
|
|
6667
6680
|
if (migrations.length > 0) validateMigrations(migrations);
|
|
6668
6681
|
}
|
|
@@ -10098,9 +10111,10 @@ function openDeployLog(opts) {
|
|
|
10098
10111
|
const dir = join(homedir(), ".void", "logs");
|
|
10099
10112
|
mkdirSync(dir, { recursive: true });
|
|
10100
10113
|
const ts = (/* @__PURE__ */ new Date()).toISOString().replace(/[:.]/g, "-");
|
|
10101
|
-
const
|
|
10114
|
+
const suffix = randomBytes(3).toString("hex");
|
|
10115
|
+
const filePath = join(dir, `deploy-${ts}-${process.pid}-${suffix}.jsonl`);
|
|
10102
10116
|
stream = createWriteStream(filePath, {
|
|
10103
|
-
flags: "
|
|
10117
|
+
flags: "wx",
|
|
10104
10118
|
autoClose: true
|
|
10105
10119
|
});
|
|
10106
10120
|
stream.on("error", () => {
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { r as runDeploy, t as parseRootWranglerConfig, y as checkWranglerMigrationApplySet } from "./deploy-
|
|
1
|
+
import { r as runDeploy, t as parseRootWranglerConfig, y as checkWranglerMigrationApplySet } from "./deploy-CeEbnv4b.mjs";
|
|
2
2
|
export { checkWranglerMigrationApplySet, parseRootWranglerConfig, runDeploy };
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { n as readDeploymentPlatform, r as readProjectConfig } from "./project-
|
|
2
|
-
import { c as getToken } from "./auth-
|
|
3
|
-
import {
|
|
4
|
-
import { r as PlatformClient } from "./client-
|
|
5
|
-
import { c as import_picocolors } from "./output-
|
|
1
|
+
import { n as readDeploymentPlatform, r as readProjectConfig } from "./project-DQstYTxO.mjs";
|
|
2
|
+
import { c as getToken } from "./auth-D52yG7hl.mjs";
|
|
3
|
+
import { L as log } from "./prompts-6OSVA7DJ.mjs";
|
|
4
|
+
import { r as PlatformClient } from "./client-mC-dFGDD.mjs";
|
|
5
|
+
import { c as import_picocolors, l as note } from "./output-BvdaehtE.mjs";
|
|
6
6
|
//#region src/cli/domain.ts
|
|
7
7
|
async function runDomainCommand(root, args) {
|
|
8
8
|
const platform = readDeploymentPlatform(root);
|
|
@@ -40,7 +40,7 @@ async function runDomainCommand(root, args) {
|
|
|
40
40
|
}
|
|
41
41
|
async function runCloudflareDomainCommand(root, args) {
|
|
42
42
|
if (args.projectSlug) throw new Error("domain: --project selects a Void platform project and is not used for direct Cloudflare apps.");
|
|
43
|
-
const { changeCloudflareDomain, listCloudflareDomains } = await import("./cloudflare-operations-
|
|
43
|
+
const { changeCloudflareDomain, listCloudflareDomains } = await import("./cloudflare-operations-DoQrVHAt.mjs");
|
|
44
44
|
if (args.subcommand === "add") {
|
|
45
45
|
const result = await changeCloudflareDomain(root, args.hostname, "add");
|
|
46
46
|
log.success(result.modified ? `Domain ${args.hostname} added and activated on Cloudflare.` : `Domain ${args.hostname} is already configured.`);
|
|
@@ -2,13 +2,13 @@ import { a as join } from "./dist-BVqXeR_h.mjs";
|
|
|
2
2
|
import { n as readProjectPaths } from "./project-paths-GgcMozYz.mjs";
|
|
3
3
|
import { m as readConfig } from "./config-Br_JZD6u.mjs";
|
|
4
4
|
import { a as scanEmailHandlersSync } from "./email--tEtMoj_.mjs";
|
|
5
|
-
import { B as resolveDeployTransport, F as isWranglerNonInteractiveOrCI, G as deriveWorkerName, I as runWranglerAuthToken, N as createDeployWranglerRunner, d as applyEmailSetup, f as createNodeEmailDns, g as renderEmailChecklist, h as renderAddressMap, j as discoverRootWranglerConfig, m as preflightEmail, p as findEmailConfigConflicts, q as loadProvisionModule } from "./deploy-
|
|
6
|
-
import { r as readProjectConfig } from "./project-
|
|
5
|
+
import { B as resolveDeployTransport, F as isWranglerNonInteractiveOrCI, G as deriveWorkerName, I as runWranglerAuthToken, N as createDeployWranglerRunner, d as applyEmailSetup, f as createNodeEmailDns, g as renderEmailChecklist, h as renderAddressMap, j as discoverRootWranglerConfig, m as preflightEmail, p as findEmailConfigConflicts, q as loadProvisionModule } from "./deploy-CeEbnv4b.mjs";
|
|
6
|
+
import { r as readProjectConfig } from "./project-DQstYTxO.mjs";
|
|
7
7
|
import { A as writeProvisionedWranglerConfig } from "./wrangler-DhUerFkW.mjs";
|
|
8
|
-
import { c as getToken, u as openBrowser } from "./auth-
|
|
9
|
-
import { A as confirm,
|
|
10
|
-
import { n as PlatformApiError, r as PlatformClient } from "./client-
|
|
11
|
-
import { c as import_picocolors, r as createSpinner } from "./output-
|
|
8
|
+
import { c as getToken, u as openBrowser } from "./auth-D52yG7hl.mjs";
|
|
9
|
+
import { A as confirm, L as log, U as password, tt as isCancel } from "./prompts-6OSVA7DJ.mjs";
|
|
10
|
+
import { n as PlatformApiError, r as PlatformClient } from "./client-mC-dFGDD.mjs";
|
|
11
|
+
import { c as import_picocolors, l as note, r as createSpinner } from "./output-BvdaehtE.mjs";
|
|
12
12
|
import { existsSync, mkdtempSync, rmSync, writeFileSync } from "node:fs";
|
|
13
13
|
import { tmpdir } from "node:os";
|
|
14
14
|
import { execSync } from "node:child_process";
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import { a as join } from "./dist-BVqXeR_h.mjs";
|
|
2
|
-
import { n as readDeploymentPlatform, r as readProjectConfig } from "./project-
|
|
3
|
-
import { c as getToken } from "./auth-
|
|
2
|
+
import { n as readDeploymentPlatform, r as readProjectConfig } from "./project-DQstYTxO.mjs";
|
|
3
|
+
import { c as getToken } from "./auth-D52yG7hl.mjs";
|
|
4
4
|
import { r as generateEnvTypes, t as findEnvFile } from "./env-types-D5kds_OZ.mjs";
|
|
5
5
|
import { d as formatEnvReport, g as validateProdEnv, u as fetchRemoteSecretNames } from "./env-validation-vBSQ8gw5.mjs";
|
|
6
|
-
import {
|
|
7
|
-
import { r as PlatformClient } from "./client-
|
|
6
|
+
import { H as outro, L as log } from "./prompts-6OSVA7DJ.mjs";
|
|
7
|
+
import { r as PlatformClient } from "./client-mC-dFGDD.mjs";
|
|
8
|
+
import { l as note } from "./output-BvdaehtE.mjs";
|
|
8
9
|
import { mkdirSync, writeFileSync } from "node:fs";
|
|
9
10
|
//#region src/cli/env.ts
|
|
10
11
|
async function runEnvCommand(root, args) {
|
|
@@ -24,7 +25,7 @@ async function runCheck(root, useRemoteSecrets) {
|
|
|
24
25
|
const platform = readDeploymentPlatform(root);
|
|
25
26
|
if (platform === "none") throw new Error("env: Deployment is disabled. Run `void init` to choose a platform.");
|
|
26
27
|
if (platform === "cloudflare") {
|
|
27
|
-
const { listCloudflareSecrets, resolveCloudflareOperationContext } = await import("./cloudflare-operations-
|
|
28
|
+
const { listCloudflareSecrets, resolveCloudflareOperationContext } = await import("./cloudflare-operations-DoQrVHAt.mjs");
|
|
28
29
|
remoteSecrets = await listCloudflareSecrets(resolveCloudflareOperationContext(root));
|
|
29
30
|
} else {
|
|
30
31
|
const token = getToken(root);
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { l as VoidPlatformSandbox } from "./sandbox-
|
|
1
|
+
import { l as VoidPlatformSandbox } from "./sandbox-C5LFoJMf.mjs";
|
|
2
2
|
import { t as StandardSchemaV1 } from "./standard-schema-Fo_vCAZh.mjs";
|
|
3
3
|
//#region src/runtime/env-public.d.ts
|
|
4
4
|
type AnyValidator = StandardSchemaV1<unknown, unknown>;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { n as ofetch, t as FetchError } from "./fetch-error-Dj3crt0e.mjs";
|
|
2
2
|
import { t as interpolateRouteParams } from "./route-url-CG7U-cRN.mjs";
|
|
3
|
+
import { n as asUsageLimit, r as limitFromResponse } from "./limits-D0vD1M9A.mjs";
|
|
3
4
|
//#region src/runtime/fetch-stream.ts
|
|
4
5
|
/**
|
|
5
6
|
* Consume an SSE endpoint as an async generator of text chunks.
|
|
@@ -30,6 +31,10 @@ async function* fetchStream(path, options) {
|
|
|
30
31
|
signal: options?.signal,
|
|
31
32
|
baseURL: options?.baseURL,
|
|
32
33
|
responseType: "stream"
|
|
34
|
+
}).catch(async (error) => {
|
|
35
|
+
const response = error && typeof error === "object" && "response" in error ? error.response : null;
|
|
36
|
+
if (response instanceof Response) throw await limitFromResponse(response, "ai") ?? error;
|
|
37
|
+
throw error;
|
|
33
38
|
}))._data;
|
|
34
39
|
if (!body) return;
|
|
35
40
|
const reader = body.getReader();
|
|
@@ -39,11 +44,13 @@ async function* fetchStream(path, options) {
|
|
|
39
44
|
const terminal = (data) => {
|
|
40
45
|
if (event !== "void:error" && event !== "void:limit") return;
|
|
41
46
|
let message = "Generation was interrupted.";
|
|
47
|
+
let limit = null;
|
|
42
48
|
try {
|
|
43
49
|
const body = JSON.parse(data);
|
|
50
|
+
if (event === "void:limit") limit = asUsageLimit(body);
|
|
44
51
|
if (typeof body.message === "string") message = body.message;
|
|
45
52
|
} catch {}
|
|
46
|
-
throw new FetchError(message);
|
|
53
|
+
throw limit ?? new FetchError(message);
|
|
47
54
|
};
|
|
48
55
|
try {
|
|
49
56
|
while (true) {
|
|
@@ -4,7 +4,7 @@ import { m as readConfig, u as getDatabaseDialect } from "./config-Br_JZD6u.mjs"
|
|
|
4
4
|
import { n as readJournal, t as collectMigrations } from "./collect-DiTn9yr6.mjs";
|
|
5
5
|
import { n as ensureProjectTsconfig } from "./project-tsconfig-B8GeM0RM.mjs";
|
|
6
6
|
import { H as outro, K as select, L as log, O as cancel, tt as isCancel } from "./prompts-6OSVA7DJ.mjs";
|
|
7
|
-
import { r as listDrizzleArtifacts, t as assertJournalCoherence } from "./validate-
|
|
7
|
+
import { r as listDrizzleArtifacts, t as assertJournalCoherence } from "./validate-ymhap6M_.mjs";
|
|
8
8
|
import { t as writeDrizzleConfig } from "./config-D8MOgiQV.mjs";
|
|
9
9
|
import { t as buildDrizzleKitSpawnEnv } from "./yarn-pnp-BV4AzNul.mjs";
|
|
10
10
|
import { existsSync, mkdirSync, readFileSync, readdirSync, unlinkSync, writeFileSync } from "node:fs";
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { r as readProjectConfig } from "./project-
|
|
2
|
-
import { c as getToken, n as createCodeChallenge, r as createCodeVerifier, t as awaitBrowserCallback, u as openBrowser } from "./auth-
|
|
1
|
+
import { r as readProjectConfig } from "./project-DQstYTxO.mjs";
|
|
2
|
+
import { c as getToken, n as createCodeChallenge, r as createCodeVerifier, t as awaitBrowserCallback, u as openBrowser } from "./auth-D52yG7hl.mjs";
|
|
3
3
|
import { A as confirm, K as select, L as log, O as cancel, X as text, tt as isCancel } from "./prompts-6OSVA7DJ.mjs";
|
|
4
|
-
import { c as platformErrorMessage, n as PlatformApiError, r as PlatformClient, s as parsePlatformErrorBody } from "./client-
|
|
5
|
-
import { c as import_picocolors } from "./output-
|
|
4
|
+
import { c as platformErrorMessage, n as PlatformApiError, r as PlatformClient, s as parsePlatformErrorBody } from "./client-mC-dFGDD.mjs";
|
|
5
|
+
import { c as import_picocolors } from "./output-BvdaehtE.mjs";
|
|
6
6
|
import { r as resolveProjectBySlug, t as getRequestedProjectSlug } from "./resolve-project-BG5ORGID.mjs";
|
|
7
7
|
import { t as collectGitDeployMetadata } from "./git-metadata-D-gurjzG.mjs";
|
|
8
8
|
import { randomBytes } from "node:crypto";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { l as VoidPlatformSandbox } from "./sandbox-
|
|
1
|
+
import { l as VoidPlatformSandbox } from "./sandbox-C5LFoJMf.mjs";
|
|
2
2
|
import { t as StandardSchemaV1 } from "./standard-schema-Fo_vCAZh.mjs";
|
|
3
3
|
import { n as HeadDescriptor } from "./head-Do8P4puT.mjs";
|
|
4
4
|
import { r as AuthUser, t as AuthSession } from "./auth-DkcFflXV.mjs";
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { a as join } from "./dist-BVqXeR_h.mjs";
|
|
2
|
-
import {
|
|
2
|
+
import { H as outro } from "./prompts-6OSVA7DJ.mjs";
|
|
3
3
|
import { n as getPackageDir } from "./agents-B_pX_HmQ.mjs";
|
|
4
|
-
import { c as import_picocolors,
|
|
5
|
-
import { n as operatorGroups, t as operatorCommands } from "./operator-args-
|
|
4
|
+
import { c as import_picocolors, d as sectionTitle, l as note, s as helpLine, t as categoryTitle } from "./output-BvdaehtE.mjs";
|
|
5
|
+
import { n as operatorGroups, t as operatorCommands } from "./operator-args-DdY54Bgb.mjs";
|
|
6
6
|
import { readFileSync } from "node:fs";
|
|
7
7
|
//#region src/cli/ascii.ts
|
|
8
8
|
const asciiArts = [
|
|
@@ -42,7 +42,7 @@ function operatorHelpTree() {
|
|
|
42
42
|
usage: entry.usage ?? [`void platform ${group} ${entry.action}${entry.positional?.map((name) => entry.optionalPositional ? ` [${name}]` : ` <${name}>`).join("") ?? ""} [options]`],
|
|
43
43
|
options: [
|
|
44
44
|
{
|
|
45
|
-
command: "--connection <
|
|
45
|
+
command: "--connection <slug-or-url>",
|
|
46
46
|
description: "Choose a registered connection; otherwise use VOID_API_URL or the active connection"
|
|
47
47
|
},
|
|
48
48
|
{
|
|
@@ -91,7 +91,7 @@ function operatorHelpTree() {
|
|
|
91
91
|
}
|
|
92
92
|
const HELP_TREE = {
|
|
93
93
|
connect: {
|
|
94
|
-
summary: "Connect this project to Cloudflare or an existing Void platform.",
|
|
94
|
+
summary: "Connect this project to Cloudflare or an existing Void platform. Platform hostnames default to HTTPS.",
|
|
95
95
|
usage: ["void connect [url] [--platform <cloudflare|void>] [--no-login]"],
|
|
96
96
|
options: [{
|
|
97
97
|
command: "--platform <cloudflare|void>",
|
|
@@ -106,7 +106,7 @@ const HELP_TREE = {
|
|
|
106
106
|
description: "Choose a destination and sign in"
|
|
107
107
|
},
|
|
108
108
|
{
|
|
109
|
-
command: "void connect
|
|
109
|
+
command: "void connect platform.example.com",
|
|
110
110
|
description: "Join a Void platform"
|
|
111
111
|
},
|
|
112
112
|
{
|
|
@@ -416,7 +416,7 @@ const HELP_TREE = {
|
|
|
416
416
|
],
|
|
417
417
|
options: [
|
|
418
418
|
{
|
|
419
|
-
command: "--connection <
|
|
419
|
+
command: "--connection <slug-or-url>",
|
|
420
420
|
description: "Select a registered platform"
|
|
421
421
|
},
|
|
422
422
|
{
|
|
@@ -504,7 +504,7 @@ const HELP_TREE = {
|
|
|
504
504
|
],
|
|
505
505
|
options: [
|
|
506
506
|
{
|
|
507
|
-
command: "--connection <
|
|
507
|
+
command: "--connection <slug-or-url>",
|
|
508
508
|
description: "Select a registered platform"
|
|
509
509
|
},
|
|
510
510
|
{
|
|
@@ -574,7 +574,7 @@ const HELP_TREE = {
|
|
|
574
574
|
} }
|
|
575
575
|
},
|
|
576
576
|
list: basicSubcommand("List installed and connected platforms.", "void platform list"),
|
|
577
|
-
use: basicSubcommand("Select the default Void platform.", "void platform use [id]"),
|
|
577
|
+
use: basicSubcommand("Select the default Void platform by installation slug, name, saved ID, or API URL.", "void platform use [id]"),
|
|
578
578
|
status: basicSubcommand("Inspect a platform and its health.", "void platform status [id]"),
|
|
579
579
|
discover: {
|
|
580
580
|
summary: "Recover owned platform installations from Cloudflare.",
|
|
@@ -719,6 +719,10 @@ const HELP_TREE = {
|
|
|
719
719
|
command: "--purge-data",
|
|
720
720
|
description: "Delete installer-owned data even when it contains apps"
|
|
721
721
|
},
|
|
722
|
+
{
|
|
723
|
+
command: "--purge-resources",
|
|
724
|
+
description: "Delete every resource the installation created (includes --purge-data); keeps zones, adopted resources, and PostgreSQL"
|
|
725
|
+
},
|
|
722
726
|
{
|
|
723
727
|
command: "--keep-zone",
|
|
724
728
|
description: "Explicitly retain an installer-created zone"
|
package/dist/index.d.mts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { n as HeadDescriptor } from "./head-Do8P4puT.mjs";
|
|
2
2
|
import { r as AuthUser } from "./auth-DkcFflXV.mjs";
|
|
3
|
-
import { C as defer, E as ValidatorSlots, S as InferProps, T as HandlerInput, _ as defineQueue, a as CloudEnv, b as Deferred, c as QueueRetryOptions, d as TypedQueueHandler, f as VoidAssetRewriteError, g as defineMiddleware, h as defineHead, i as CloudContextVariables, l as RenderAssetTags, m as defineHandler, o as QueueBatch, p as basicAuth, r as CloudContext, s as QueueMessage, t as BasicAuthOptions, u as TypedHandler, v as defineRender, x as DeferredState, y as defineScheduled } from "./handler-
|
|
3
|
+
import { C as defer, E as ValidatorSlots, S as InferProps, T as HandlerInput, _ as defineQueue, a as CloudEnv, b as Deferred, c as QueueRetryOptions, d as TypedQueueHandler, f as VoidAssetRewriteError, g as defineMiddleware, h as defineHead, i as CloudContextVariables, l as RenderAssetTags, m as defineHandler, o as QueueBatch, p as basicAuth, r as CloudContext, s as QueueMessage, t as BasicAuthOptions, u as TypedHandler, v as defineRender, x as DeferredState, y as defineScheduled } from "./handler-BeK3weD4.mjs";
|
|
4
4
|
import { t as QueueMap } from "./queues-BWKt1Xo4.mjs";
|
|
5
5
|
import { PluginConfig } from "@cloudflare/vite-plugin";
|
|
6
6
|
import { Plugin } from "vite";
|
package/dist/index.mjs
CHANGED
|
@@ -7,21 +7,21 @@ import { n as loadVoidAuthConfig } from "./config-DPByhVck.mjs";
|
|
|
7
7
|
import { d as isNodeTarget, m as readConfig, u as getDatabaseDialect } from "./config-Br_JZD6u.mjs";
|
|
8
8
|
import { i as isMemberExpression, n as isIdentifier, r as isLiteral } from "./ast-CPGPjb0V.mjs";
|
|
9
9
|
import { t as isRouteEnabledForEnvironment } from "./parse-filename-CUbj-1MP.mjs";
|
|
10
|
-
import { r as scanQueuesSync, s as scanJobsSync, t as analyzeApplicationSync } from "./application-analysis-
|
|
10
|
+
import { r as scanQueuesSync, s as scanJobsSync, t as analyzeApplicationSync } from "./application-analysis-DC2yPvzY.mjs";
|
|
11
11
|
import { a as validateSsrEntries, n as SSR_SERVER_ENTRY_RELATIVE_PATHS, o as validateSsrEntry, t as SSR_CLIENT_ENTRY_RELATIVE_PATHS } from "./entry-CF5wvH4w.mjs";
|
|
12
12
|
import { r as hasEmailHandlers } from "./email--tEtMoj_.mjs";
|
|
13
|
-
import { i as resolveLayoutIds } from "./scan-
|
|
13
|
+
import { i as resolveLayoutIds } from "./scan-C8dA7iM4.mjs";
|
|
14
14
|
import { a as hasSandboxSqliteMigration, c as resolveSandboxConfig, i as assertSandboxNamespaceConfig, l as sandboxContainerConfig, n as DEFAULT_SANDBOX_CLASS_NAME, r as SANDBOX_MIGRATION_TAG } from "./config-C_XRIPx2.mjs";
|
|
15
|
-
import { Ct as hasDocumentRoutes, H as selectNativeVersionMetadataBinding, J as collectPages, St as hasApiRoutes, Tt as resolveAssetRoutingPolicy, V as CLOUDFLARE_PRESERVE_BINDINGS_BUILD_ENV, X as hasRevalidate, Y as collectRevalidate, at as resolveDistDir, lt as resolveWorkerDirName, o as prerenderPages, s as prerenderPagesNode, u as SEND_EMAIL_BINDING, xt as generateQueueResolverSource } from "./deploy-
|
|
15
|
+
import { Ct as hasDocumentRoutes, H as selectNativeVersionMetadataBinding, J as collectPages, St as hasApiRoutes, Tt as resolveAssetRoutingPolicy, V as CLOUDFLARE_PRESERVE_BINDINGS_BUILD_ENV, X as hasRevalidate, Y as collectRevalidate, at as resolveDistDir, lt as resolveWorkerDirName, o as prerenderPages, s as prerenderPagesNode, u as SEND_EMAIL_BINDING, xt as generateQueueResolverSource } from "./deploy-CeEbnv4b.mjs";
|
|
16
16
|
import { i as voidWarn, n as voidError, r as voidLog, t as setShowTimestamp } from "./log-vqY3pqwI.mjs";
|
|
17
17
|
import { n as lintDuplicateSources, r as mergeRoutingRules, t as lintDestinationSplats } from "./headers-2rKda9Y6.mjs";
|
|
18
|
-
import { n as readDeploymentPlatform, r as readProjectConfig } from "./project-
|
|
18
|
+
import { n as readDeploymentPlatform, r as readProjectConfig } from "./project-DQstYTxO.mjs";
|
|
19
19
|
import { a as restoreCloudflarePreviewPointer, r as materializeCloudflareConfig, s as stashCloudflareDeployPointer } from "./cloudflare-config-Bktvwtpf.mjs";
|
|
20
20
|
import { D as syncWranglerDurableObjects, E as syncWranglerBindings, O as syncWranglerWebSockets, T as resolveLiveBindingConfig, _ as readExistingLiveBindingConfig, a as LIVE_MIGRATION_TAG, b as readWranglerCompat, d as ensureWranglerCompatibilityDate, f as ensureWranglerNodejsAlsFlag, g as normalizeWranglerCompatibilityFlags, h as nextDurableObjectMigrationTag, m as hasDurableObjectSqliteMigration, p as findBindingNameOwner, u as ensureWranglerCompat, w as readWranglerWebSocketTombstones } from "./wrangler-DhUerFkW.mjs";
|
|
21
|
-
import { n as writeLocalD1PersistState, t as resolveLocalD1Target } from "./local-d1-
|
|
21
|
+
import { n as writeLocalD1PersistState, t as resolveLocalD1Target } from "./local-d1-fGxYrVD6.mjs";
|
|
22
22
|
import { n as scopedAccessCredentials } from "./cf-access-TWNzXltp.mjs";
|
|
23
|
-
import { r as ensurePlatformProxyAccess } from "./cf-access-
|
|
24
|
-
import { a as getApiUrl, c as getToken, o as getProxyUrl } from "./auth-
|
|
23
|
+
import { r as ensurePlatformProxyAccess } from "./cf-access-YTlqvAsk.mjs";
|
|
24
|
+
import { a as getApiUrl, c as getToken, o as getProxyUrl } from "./auth-D52yG7hl.mjs";
|
|
25
25
|
import { n as parseDotenvFile } from "./dotenv-VQxupEUv.mjs";
|
|
26
26
|
import { n as ensureProjectTsconfig, r as writeFileIfChanged } from "./project-tsconfig-B8GeM0RM.mjs";
|
|
27
27
|
import { i as generateDbDts, n as generateQueueTypes, r as DRIZZLE_OPERATORS, t as generateRouteTypes } from "./route-types-Clm4WD0B.mjs";
|
|
@@ -32,7 +32,7 @@ import { n as findEnvFileForPaths, r as generateEnvTypes, t as findEnvFile } fro
|
|
|
32
32
|
import { y as loadUserEnvFile } from "./env-validation-vBSQ8gw5.mjs";
|
|
33
33
|
import { a as loadLocalEnv, o as resolveRemoteMode, r as findLegacyEnvFiles, s as stripInternalEnvKeys, t as CLIENT_ENV_PREFIX$2 } from "./env-_v349JBd.mjs";
|
|
34
34
|
import { n as INTERNAL_BINDING_PREFIXES, t as INTERNAL_BINDING_EXACT_NAMES } from "./env-raw-Cx8ElDdj.mjs";
|
|
35
|
-
import { n as completeApplicationAnalysis } from "./application-routing-
|
|
35
|
+
import { n as completeApplicationAnalysis } from "./application-routing-C9khgLiS.mjs";
|
|
36
36
|
import { n as generateVoidAuthDrizzleSchema, t as generateVoidAuthDatabaseModule } from "./drizzle-Beb2Am5S.mjs";
|
|
37
37
|
import { n as defer } from "./defer-YsYDUoii.mjs";
|
|
38
38
|
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-DghKr6dU.mjs";
|
|
@@ -502,8 +502,8 @@ function readVoidDevCredentials(root) {
|
|
|
502
502
|
*/
|
|
503
503
|
async function runAiSetupPrompt(root, token, apiUrl, server) {
|
|
504
504
|
const { select, text, isCancel, log } = await import("./prompts-ZAuJlyCj.mjs");
|
|
505
|
-
const { PlatformClient } = await import("./client-
|
|
506
|
-
const { attachSelectedPlatform, writeProjectConfig } = await import("./project-
|
|
505
|
+
const { PlatformClient } = await import("./client-BxVixJBI.mjs");
|
|
506
|
+
const { attachSelectedPlatform, writeProjectConfig } = await import("./project-BiaPQ7ur.mjs");
|
|
507
507
|
const { inferDefaultSlug } = await import("./resolve-project-DtbidV4y.mjs");
|
|
508
508
|
const client = new PlatformClient(token, apiUrl);
|
|
509
509
|
let projects;
|
|
@@ -531,7 +531,7 @@ async function runAiSetupPrompt(root, token, apiUrl, server) {
|
|
|
531
531
|
let slug;
|
|
532
532
|
if (result === "__create__") {
|
|
533
533
|
const { validateProjectSlug } = await import("./project-slug-DofjTFd-.mjs");
|
|
534
|
-
const { createProjectWithSlugRetry } = await import("./create-project-
|
|
534
|
+
const { createProjectWithSlugRetry } = await import("./create-project-Dbb4uiN-.mjs");
|
|
535
535
|
let created;
|
|
536
536
|
try {
|
|
537
537
|
created = await createProjectWithSlugRetry(client, inferDefaultSlug(root), async (defaultSlug) => {
|
|
@@ -1021,7 +1021,7 @@ function createPrimaryDb(d1) {
|
|
|
1021
1021
|
const migrationsDir = paths.migrationsDir;
|
|
1022
1022
|
if (!(existsSync(migrationsDir) && readdirSync(migrationsDir).some((f) => f.endsWith(".sql")))) {
|
|
1023
1023
|
if (dialect === "sqlite") {
|
|
1024
|
-
const { getApplicationTables, getMiniflareDatabasePath } = await import("./runner-
|
|
1024
|
+
const { getApplicationTables, getMiniflareDatabasePath } = await import("./runner-voIltZrY.mjs");
|
|
1025
1025
|
if ((await getApplicationTables(getMiniflareDatabasePath(options.localD1PersistRoot ?? join(root, ".void"), options.localD1DatabaseId ?? "local")).catch(() => [])).length > 0) return;
|
|
1026
1026
|
}
|
|
1027
1027
|
voidWarn(`Schema found but no migrations in ${paths.sourceRelative("db/migrations")}/.\n \`void db push\` syncs the schema to your local DB without creating migration files.
|
|
@@ -3456,7 +3456,7 @@ function migrationPlugin(root, dialect, databaseId = "local", persistRoot = join
|
|
|
3456
3456
|
return;
|
|
3457
3457
|
}
|
|
3458
3458
|
const { collectMigrations } = await import("./collect-DLyFDiKW.mjs");
|
|
3459
|
-
const { validateMigrations } = await import("./validate-
|
|
3459
|
+
const { validateMigrations } = await import("./validate-pna7R3Pv.mjs");
|
|
3460
3460
|
const allMigrations = collectMigrations(migrationsDir);
|
|
3461
3461
|
const appliedNames = dialect === "mysql" ? await import("./runner-mysql-CEG5JozK.mjs").then((runner) => runner.getMySqlAppliedMigrations(url)) : await import("./runner-pg-Bh4AgZdj.mjs").then((runner) => runner.getPgAppliedMigrations(url));
|
|
3462
3462
|
const appliedSet = new Set(appliedNames);
|
|
@@ -3469,9 +3469,9 @@ function migrationPlugin(root, dialect, databaseId = "local", persistRoot = join
|
|
|
3469
3469
|
const applied = dialect === "mysql" ? await import("./runner-mysql-CEG5JozK.mjs").then((runner) => runner.runMySqlMigrations(migrationsDir, url)) : await import("./runner-pg-Bh4AgZdj.mjs").then((runner) => runner.runPgMigrations(migrationsDir, url));
|
|
3470
3470
|
if (applied.length > 0) voidLog(`Applied ${applied.length} migration(s): ${applied.join(", ")}`);
|
|
3471
3471
|
} else if (hasSqlMigrations) {
|
|
3472
|
-
const { runMigrations, getMiniflareDatabasePath, getAppliedMigrations } = await import("./runner-
|
|
3472
|
+
const { runMigrations, getMiniflareDatabasePath, getAppliedMigrations } = await import("./runner-voIltZrY.mjs");
|
|
3473
3473
|
const { collectMigrations } = await import("./collect-DLyFDiKW.mjs");
|
|
3474
|
-
const { validateMigrations } = await import("./validate-
|
|
3474
|
+
const { validateMigrations } = await import("./validate-pna7R3Pv.mjs");
|
|
3475
3475
|
const dbPath = getMiniflareDatabasePath(persistRoot, databaseId);
|
|
3476
3476
|
const allMigrations = collectMigrations(migrationsDir);
|
|
3477
3477
|
const appliedRows = await getAppliedMigrations(dbPath);
|
|
@@ -3486,7 +3486,7 @@ function migrationPlugin(root, dialect, databaseId = "local", persistRoot = join
|
|
|
3486
3486
|
if (applied.length > 0) voidLog(`Applied ${applied.length} migration(s): ${applied.join(", ")}`);
|
|
3487
3487
|
}
|
|
3488
3488
|
if (auth?.enabled) {
|
|
3489
|
-
const { runLocalVoidAuthMigrations } = await import("./node-
|
|
3489
|
+
const { runLocalVoidAuthMigrations } = await import("./node-C6Q6e1Es.mjs");
|
|
3490
3490
|
await runLocalVoidAuthMigrations(root, dialect, persistRoot, databaseId, auth.configPath);
|
|
3491
3491
|
voidLog("Applied Better Auth migrations");
|
|
3492
3492
|
}
|
|
@@ -4345,7 +4345,7 @@ function routingPlugin(root, options) {
|
|
|
4345
4345
|
const migrationsDir = paths.migrationsDir;
|
|
4346
4346
|
if (existsSync(migrationsDir) || compileOptions.auth) {
|
|
4347
4347
|
const { collectMigrations } = await import("./collect-DLyFDiKW.mjs");
|
|
4348
|
-
const { buildMigrationPlanBundle } = await import("./plan-
|
|
4348
|
+
const { buildMigrationPlanBundle } = await import("./plan-COtUvdMA.mjs");
|
|
4349
4349
|
const migrations = existsSync(migrationsDir) ? collectMigrations(migrationsDir) : [];
|
|
4350
4350
|
const dialect = getDatabaseDialect(readConfig(root));
|
|
4351
4351
|
compileOptions.migrationHandlerPath = resolveFile(dialect === "postgresql" ? "#self/runtime/migration-handler-pg" : dialect === "mysql" ? "#self/runtime/migration-handler-mysql" : "#self/runtime/migration-handler");
|
|
@@ -5151,6 +5151,18 @@ function voidPlugin(options) {
|
|
|
5151
5151
|
}
|
|
5152
5152
|
}
|
|
5153
5153
|
} : void 0;
|
|
5154
|
+
const vinextWorkerEntry = framework === "vinext-app" || framework === "vinext-pages" ? {
|
|
5155
|
+
name: "void:vinext-worker-entry",
|
|
5156
|
+
enforce: "post",
|
|
5157
|
+
configEnvironment(name, environmentConfig) {
|
|
5158
|
+
if (name !== viteEnvironment.name) return;
|
|
5159
|
+
environmentConfig.build ??= {};
|
|
5160
|
+
environmentConfig.build.rolldownOptions = {
|
|
5161
|
+
...environmentConfig.build.rolldownOptions,
|
|
5162
|
+
input: { index: "virtual:cloudflare/worker-entry" }
|
|
5163
|
+
};
|
|
5164
|
+
}
|
|
5165
|
+
} : void 0;
|
|
5154
5166
|
return [
|
|
5155
5167
|
createCloudflareBuiltinsExternalPlugin(),
|
|
5156
5168
|
createWorkerEnvironmentSanitizerPlugin([viteEnvironment.name, ...viteEnvironment.childEnvironments ?? []]),
|
|
@@ -5174,6 +5186,7 @@ function voidPlugin(options) {
|
|
|
5174
5186
|
}),
|
|
5175
5187
|
migrationPlugin(root, dialect, localD1.databaseId, localD1.persistRoot),
|
|
5176
5188
|
...vinextCompat ? [vinextCompat] : [],
|
|
5189
|
+
...vinextWorkerEntry ? [vinextWorkerEntry] : [],
|
|
5177
5190
|
frameworkBuildWrapperPlugin,
|
|
5178
5191
|
frameworkTriggersPlugin(root, { devTriggerToken }),
|
|
5179
5192
|
devTriggersHintPlugin(root, {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { a as join, l as relative } from "./dist-BVqXeR_h.mjs";
|
|
2
2
|
import { a as deriveWebSocketClassNameFromName, o as inferWebSocketResourceName } from "./plugin-inference-CXWnn79A.mjs";
|
|
3
3
|
import { m as readConfig } from "./config-Br_JZD6u.mjs";
|
|
4
|
-
import { a as inferDurableResourceName, i as deriveDurableResourceIdentity, t as analyzeApplicationSync } from "./application-analysis-
|
|
4
|
+
import { a as inferDurableResourceName, i as deriveDurableResourceIdentity, t as analyzeApplicationSync } from "./application-analysis-DC2yPvzY.mjs";
|
|
5
5
|
import { n as VOID_LOCK_FILE } from "./cloudflare-config-Bktvwtpf.mjs";
|
|
6
6
|
import { existsSync, readFileSync } from "node:fs";
|
|
7
7
|
import { isRecord } from "@void/deploy-core";
|
|
@@ -2,23 +2,24 @@ import { a as join, i as isAbsolute, l as relative, n as dirname, t as basename,
|
|
|
2
2
|
import { r as detectFramework } from "./plugin-inference-CXWnn79A.mjs";
|
|
3
3
|
import { n as readProjectPaths, o as TYPED_CONFIG_FILE } from "./project-paths-GgcMozYz.mjs";
|
|
4
4
|
import { m as readConfig, u as getDatabaseDialect } from "./config-Br_JZD6u.mjs";
|
|
5
|
-
import { l as writeProjectConfig, n as readDeploymentPlatform, r as readProjectConfig, s as writeDeploymentPlatform, t as attachSelectedPlatform } from "./project-
|
|
5
|
+
import { l as writeProjectConfig, n as readDeploymentPlatform, r as readProjectConfig, s as writeDeploymentPlatform, t as attachSelectedPlatform } from "./project-DQstYTxO.mjs";
|
|
6
6
|
import { r as materializeCloudflareConfig } from "./cloudflare-config-Bktvwtpf.mjs";
|
|
7
7
|
import { A as writeProvisionedWranglerConfig, i as LATEST_KNOWN_COMPAT_DATE } from "./wrangler-DhUerFkW.mjs";
|
|
8
|
-
import { c as getToken } from "./auth-
|
|
8
|
+
import { c as getToken } from "./auth-D52yG7hl.mjs";
|
|
9
9
|
import { n as parseDotenvFile, t as expandDotenv } from "./dotenv-VQxupEUv.mjs";
|
|
10
10
|
import { n as ensureProjectTsconfig, t as createProjectTsconfig } from "./project-tsconfig-B8GeM0RM.mjs";
|
|
11
11
|
import { t as MagicString } from "./dist-AoCzRTJE.mjs";
|
|
12
|
-
import { A as confirm,
|
|
12
|
+
import { A as confirm, H as outro, K as select, L as log, O as cancel, X as text, tt as isCancel } from "./prompts-6OSVA7DJ.mjs";
|
|
13
13
|
import { n as getPackageDir, t as detectAgents } from "./agents-B_pX_HmQ.mjs";
|
|
14
|
-
import { r as PlatformClient } from "./client-
|
|
14
|
+
import { r as PlatformClient } from "./client-mC-dFGDD.mjs";
|
|
15
15
|
import { i as migrateFrameworkAdapterPaths, t as migrateLegacyVoidConfig } from "./migrate-CV1on-yJ.mjs";
|
|
16
16
|
import { o as formatProjectCommand } from "./cloudflare-process-B-wekeR6.mjs";
|
|
17
|
-
import {
|
|
17
|
+
import { l as note } from "./output-BvdaehtE.mjs";
|
|
18
|
+
import { a as promptProjectSelection, r as promptAndCreateProject } from "./create-project-B2kk9Q0o.mjs";
|
|
18
19
|
import { t as writeDrizzleConfig } from "./config-D8MOgiQV.mjs";
|
|
19
20
|
import { n as writeVoidProjectConfig, t as canRewriteVoidProjectConfig } from "./config-write-B1f88wJA.mjs";
|
|
20
|
-
import { t as promptForLoginToken } from "./login-
|
|
21
|
-
import { i as saveDiscoveredPlatform, t as discoverPlatform } from "./platform-cmd-
|
|
21
|
+
import { t as promptForLoginToken } from "./login-DFuo-RWO.mjs";
|
|
22
|
+
import { i as saveDiscoveredPlatform, t as discoverPlatform } from "./platform-cmd-DbKtQb_4.mjs";
|
|
22
23
|
import { t as connectCloudflare } from "./cloudflare-connect-CuhRgk3k.mjs";
|
|
23
24
|
import { n as findInstalledYarnPnpRuntime, r as hasLocalLockfile, t as buildDrizzleKitSpawnEnv } from "./yarn-pnp-BV4AzNul.mjs";
|
|
24
25
|
import { createRequire } from "node:module";
|
|
@@ -1932,7 +1933,7 @@ async function ensureVoidPlatformConnection(root) {
|
|
|
1932
1933
|
let selectedApiUrl = null;
|
|
1933
1934
|
let promptedForPlatform = false;
|
|
1934
1935
|
try {
|
|
1935
|
-
const { getApiUrl, getSiteDomain } = await import("./auth-
|
|
1936
|
+
const { getApiUrl, getSiteDomain } = await import("./auth-B60QDbjg.mjs");
|
|
1936
1937
|
selectedApiUrl = getApiUrl(root);
|
|
1937
1938
|
getSiteDomain(root);
|
|
1938
1939
|
} catch (error) {
|
|
@@ -2712,7 +2713,7 @@ async function runInitCommand(root, initArgs) {
|
|
|
2712
2713
|
let shouldSetupGithub = targeted ? initArgs?.github === true : deploymentPlatform !== "none";
|
|
2713
2714
|
if (shouldSetupGithub && !githubStepSkipForSubpackage && deploymentPlatform !== "cloudflare" && deploymentPlatform !== "none") {
|
|
2714
2715
|
if (!voidPlatformDiscovery) {
|
|
2715
|
-
const { getApiUrl } = await import("./auth-
|
|
2716
|
+
const { getApiUrl } = await import("./auth-B60QDbjg.mjs");
|
|
2716
2717
|
voidPlatformDiscovery = await discoverPlatform(getApiUrl(root));
|
|
2717
2718
|
}
|
|
2718
2719
|
if (!voidPlatformDiscovery.capabilities.githubActions) {
|