void 0.10.1 → 0.10.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (70) hide show
  1. package/dist/{auth-cmd-DBnbrX9Y.mjs → auth-cmd-CblKzAdD.mjs} +2 -2
  2. package/dist/{better-auth-shared-a7H3wk9J.d.mts → better-auth-shared-jkksALri.d.mts} +2 -2
  3. package/dist/build-cmd-CJQSRupz.mjs +140 -0
  4. package/dist/{cache-DNX0hLsO.mjs → cache-CMzjhxHh.mjs} +1 -1
  5. package/dist/{cancel-deploy-CDzkVaYZ.mjs → cancel-deploy-S2N8NSv6.mjs} +1 -1
  6. package/dist/cli/cli.mjs +208 -29
  7. package/dist/{client-D4awzTnj.mjs → client-YIzxv2ZO.mjs} +30 -1
  8. package/dist/{create-project-CGodxfzH.mjs → create-project-pLQdzEPe.mjs} +1 -1
  9. package/dist/{db-ERzz4oly.mjs → db-hAmBumot.mjs} +3 -3
  10. package/dist/{delete-CJZGDLBR.mjs → delete-CfSe3EJO.mjs} +1 -1
  11. package/dist/{deploy-Cwa5sooV.mjs → deploy-DpOdwtla.mjs} +138 -4
  12. package/dist/{domain-WvoAHE6w.mjs → domain-CkowysQx.mjs} +1 -1
  13. package/dist/{env-Cx4czPsR.mjs → env-CIwG2y7G.mjs} +1 -1
  14. package/dist/{env-helpers-ZatKyjen.d.mts → env-helpers-B_ks681T.d.mts} +1 -1
  15. package/dist/{gen-Dgi4D7GC.mjs → gen-q6McxXgE.mjs} +1 -1
  16. package/dist/{github-cmd-CUB041gj.mjs → github-cmd-D3L0f93X.mjs} +147 -3
  17. package/dist/{handler-DczZlaXR.d.mts → handler-B7rCOy21.d.mts} +3 -3
  18. package/dist/index.d.mts +3 -3
  19. package/dist/index.mjs +5 -5
  20. package/dist/{init-DvaRDMIc.mjs → init-CZP69LJu.mjs} +13 -22
  21. package/dist/{link-CpbWJY3P.mjs → link-BKLElphS.mjs} +2 -2
  22. package/dist/{list-BkwE5vH4.mjs → list-B7qXBBjo.mjs} +1 -1
  23. package/dist/{login-Ca6mhQVI.mjs → login-B3l_sDwT.mjs} +1 -1
  24. package/dist/{logs-ArQzZquo.mjs → logs-AXm660MB.mjs} +1 -1
  25. package/dist/{mcp-Cc2MMXdQ.mjs → mcp-D2plINxM.mjs} +1 -1
  26. package/dist/pages/client.d.mts +1 -1
  27. package/dist/pages/head-client.d.mts +1 -1
  28. package/dist/pages/head.d.mts +1 -1
  29. package/dist/pages/index.d.mts +2 -2
  30. package/dist/pages/islands-plugin.d.mts +1 -1
  31. package/dist/pages/protocol.d.mts +2 -2
  32. package/dist/{project-cmd-CWZeawuN.mjs → project-cmd-InegJruy.mjs} +8 -8
  33. package/dist/{protocol-63PHtCHS.d.mts → protocol-6UZCowS1.d.mts} +3 -3
  34. package/dist/{rollback-BJ60ktsW.mjs → rollback-CHVE-DeT.mjs} +1 -1
  35. package/dist/runtime/auth.d.mts +1 -1
  36. package/dist/runtime/better-auth-pg.d.mts +1 -1
  37. package/dist/runtime/better-auth.d.mts +1 -1
  38. package/dist/runtime/client-react.d.mts +2 -2
  39. package/dist/runtime/client-solid.d.mts +2 -2
  40. package/dist/runtime/client-svelte.d.mts +2 -2
  41. package/dist/runtime/client-vue.d.mts +2 -2
  42. package/dist/runtime/client.d.mts +2 -2
  43. package/dist/runtime/env-helpers.d.mts +1 -1
  44. package/dist/runtime/env-public-client.d.mts +1 -1
  45. package/dist/runtime/env-public.d.mts +2 -2
  46. package/dist/runtime/fetch-stream.d.mts +1 -1
  47. package/dist/runtime/fetch.d.mts +1 -1
  48. package/dist/runtime/handler.d.mts +1 -1
  49. package/dist/runtime/live.d.mts +2 -2
  50. package/dist/runtime/validator.d.mts +1 -1
  51. package/dist/runtime/ws-server.d.mts +2 -2
  52. package/dist/runtime/ws.d.mts +3 -3
  53. package/dist/{secret-BRbXyu7E.mjs → secret-CVKwIOm3.mjs} +1 -1
  54. package/package.json +2 -2
  55. package/skills/void/docs/guide/deployment.md +1 -12
  56. package/skills/void/docs/guide/pages-routing/markdown.md +12 -0
  57. package/skills/void/docs/node_modules/void/node_modules/@void/md/README.md +2 -1
  58. package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/markdown-it-footnote/README.md +135 -0
  59. package/skills/void/docs/reference/cli.md +71 -8
  60. /package/dist/{auth-nEUVHuFI.d.mts → auth-Dz2CCn4T.d.mts} +0 -0
  61. /package/dist/{fetch-error-BQMdPvge.d.mts → fetch-error-B6RaJ-eZ.d.mts} +0 -0
  62. /package/dist/{head-JAH2l3fg.d.mts → head-eOUCWUNy.d.mts} +0 -0
  63. /package/dist/{prepare-DH2WnEpD.mjs → prepare-DRRboRqH.mjs} +0 -0
  64. /package/dist/{providers-BkiAlEad.d.mts → providers-BJIoduK9.d.mts} +0 -0
  65. /package/dist/{runner-pg-BAheiT6v.mjs → runner-pg-EuhrFW3D.mjs} +0 -0
  66. /package/dist/{skills--OMgLmXW.mjs → skills-Dl3u05da.mjs} +0 -0
  67. /package/dist/{standard-schema-BCBv-QaP.d.mts → standard-schema-Cy0lfeWv.d.mts} +0 -0
  68. /package/dist/{subcommand-prompt-ClwpLlKD.mjs → subcommand-prompt-B8ng0FTS.mjs} +0 -0
  69. /package/dist/{types-BnHMXezo.d.mts → types-BodZGegX.d.mts} +0 -0
  70. /package/dist/{yarn-pnp-DhCHHLAz.mjs → yarn-pnp-WLW2IHUY.mjs} +0 -0
@@ -3,7 +3,8 @@ import { a as join, c as resolve, i as isAbsolute, n as dirname, r as extname, s
3
3
  import { n as cliTitle, r as createSpinner, s as import_picocolors } from "./output-DeiS4oEX.mjs";
4
4
  import { i as resolveProjectPaths, n as readProjectPaths } from "./project-paths-CCMrHYQm.mjs";
5
5
  import { t as findVoidAuthConfig } from "./config-hhMYPVRT.mjs";
6
- import { a as isExpiredTokenError, d as getToken, f as getTokenSource, i as isCliOutdatedError, n as PlatformClient, o as parsePlatformErrorBody, p as isStagingMode, t as PlatformApiError } from "./client-D4awzTnj.mjs";
6
+ import { t as cfAccessHeaders } from "./cf-access-DKDsgwOU.mjs";
7
+ import { a as isExpiredTokenError, f as getToken, i as isCliOutdatedError, m as isStagingMode, n as PlatformClient, o as parsePlatformErrorBody, p as getTokenSource, t as PlatformApiError, u as getApiUrl, y as ensureCloudflaredToken } from "./client-YIzxv2ZO.mjs";
7
8
  import { c as R, g as ge, u as Se, v as ue, x as q, y as ye } from "./dist-abzUneor.mjs";
8
9
  import { a as writeProjectConfig, r as readProjectConfig } from "./project-CH9pdo16.mjs";
9
10
  import { c as getDatabaseDialect, f as readConfig, l as isNodeTarget, p as resolveBindingNames } from "./config-8dLIngKW.mjs";
@@ -19,11 +20,11 @@ import { n as buildMigrationPlanBundle } from "./plan-aD3wRDqF.mjs";
19
20
  import { r as validateMigrations, t as assertJournalCoherence } from "./validate-CNWm-PsL.mjs";
20
21
  import { t as scanPages } from "./scan-VCAM1oh3.mjs";
21
22
  import { n as STAGING_PROXY_URL, t as DEFAULT_PROXY_URL } from "./proxy-M3pxItg2.mjs";
22
- import { i as promptProjectSetupAction, n as promptAndCreateProject, r as promptProjectSelection } from "./create-project-CGodxfzH.mjs";
23
+ import { i as promptProjectSetupAction, n as promptAndCreateProject, r as promptProjectSelection } from "./create-project-pLQdzEPe.mjs";
23
24
  import { r as resolveProjectBySlug, t as getRequestedProjectSlug } from "./resolve-project-D4O1_fZz.mjs";
24
25
  import { t as collectGitDeployMetadata } from "./git-metadata-Ce0AtSZL.mjs";
25
26
  import { n as lintDuplicateSources, r as mergeRoutingRules, t as lintDestinationSplats } from "./headers-BNWymgnH.mjs";
26
- import { t as promptForLoginToken } from "./login-Ca6mhQVI.mjs";
27
+ import { t as promptForLoginToken } from "./login-B3l_sDwT.mjs";
27
28
  import { i as resolveProjectCommand, n as detectPreset, r as formatProjectCommand, t as FRAMEWORK_PRESETS } from "./preset-B7ZQZn0u.mjs";
28
29
  import { createRequire } from "node:module";
29
30
  import { copyFileSync, cpSync, createWriteStream, existsSync, mkdirSync, mkdtempSync, readFileSync, readdirSync, renameSync, rmSync, unlinkSync, writeFileSync } from "node:fs";
@@ -1168,6 +1169,129 @@ function sleep(ms) {
1168
1169
  return new Promise((resolve) => setTimeout(resolve, ms));
1169
1170
  }
1170
1171
  //#endregion
1172
+ //#region src/cli/github-oidc.ts
1173
+ /**
1174
+ * GitHub Actions OIDC → Void deploy-token exchange.
1175
+ *
1176
+ * When `void deploy` runs inside GitHub Actions with no explicit `VOID_TOKEN`,
1177
+ * the CLI mints a short-lived GitHub OIDC token (audience `void`) and exchanges
1178
+ * it at `POST $VOID_API_URL/auth/github-oidc` for a short-lived, project-scoped
1179
+ * Void deploy token. Doing the exchange in-process lets the scaffolded workflow
1180
+ * collapse to a single `void deploy` step — no curl/jq token-exchange step.
1181
+ *
1182
+ * Server contract (platform `POST /auth/github-oidc` handler):
1183
+ * request { oidcToken: string, project: string } (project = slug)
1184
+ * response { token: string, projectId, buildId }
1185
+ */
1186
+ const OIDC_AUDIENCE = "void";
1187
+ /**
1188
+ * True when the process is running inside GitHub Actions with the OIDC token
1189
+ * request endpoint available — i.e. the workflow granted
1190
+ * `permissions: id-token: write`, so GitHub injected the request URL + token.
1191
+ */
1192
+ function isGithubActionsOidcAvailable(env = process.env) {
1193
+ return env.GITHUB_ACTIONS === "true" && typeof env.ACTIONS_ID_TOKEN_REQUEST_URL === "string" && env.ACTIONS_ID_TOKEN_REQUEST_URL.length > 0 && typeof env.ACTIONS_ID_TOKEN_REQUEST_TOKEN === "string" && env.ACTIONS_ID_TOKEN_REQUEST_TOKEN.length > 0;
1194
+ }
1195
+ /**
1196
+ * Mint a GitHub Actions OIDC token (audience `void`) and exchange it for a
1197
+ * short-lived, project-scoped Void deploy token.
1198
+ *
1199
+ * Two hops:
1200
+ * 1. GET $ACTIONS_ID_TOKEN_REQUEST_URL&audience=void (Bearer request token)
1201
+ * → `.value` is the OIDC JWT.
1202
+ * 2. POST $apiUrl/auth/github-oidc { oidcToken, project }
1203
+ * → `.token` is the Void deploy token.
1204
+ *
1205
+ * Throws a clear, actionable error (including the HTTP status and server error
1206
+ * body when available) on any non-OK response or missing field.
1207
+ */
1208
+ async function exchangeGithubOidcForDeployToken(apiUrl, project, env = process.env) {
1209
+ const requestUrl = env.ACTIONS_ID_TOKEN_REQUEST_URL;
1210
+ const requestToken = env.ACTIONS_ID_TOKEN_REQUEST_TOKEN;
1211
+ if (!requestUrl || !requestToken) throw new Error("github-oidc: GitHub Actions OIDC is unavailable (missing ACTIONS_ID_TOKEN_REQUEST_URL/TOKEN). Ensure the workflow grants `permissions: id-token: write`.");
1212
+ return exchangeOidcTokenAtApi(apiUrl, project, await requestGithubOidcToken(requestUrl, requestToken));
1213
+ }
1214
+ /**
1215
+ * GET the GitHub Actions OIDC token for audience `void`. GitHub's request URL
1216
+ * already carries a query string, so `audience` is appended alongside it.
1217
+ */
1218
+ async function requestGithubOidcToken(requestUrl, requestToken) {
1219
+ const url = new URL(requestUrl);
1220
+ url.searchParams.set("audience", OIDC_AUDIENCE);
1221
+ let res;
1222
+ try {
1223
+ res = await fetch(url, { headers: { Authorization: `Bearer ${requestToken}` } });
1224
+ } catch (err) {
1225
+ throw new Error(`github-oidc: Failed to reach the GitHub OIDC token endpoint: ${errText(err)}`);
1226
+ }
1227
+ if (!res.ok) {
1228
+ const body = await safeText(res);
1229
+ throw new Error(`github-oidc: Failed to mint a GitHub OIDC token (${res.status})${body ? `: ${body}` : ""}.`);
1230
+ }
1231
+ let body;
1232
+ try {
1233
+ body = await res.json();
1234
+ } catch {
1235
+ throw new Error("github-oidc: GitHub OIDC token endpoint returned an invalid response.");
1236
+ }
1237
+ const value = body?.value;
1238
+ if (typeof value !== "string" || value.length === 0) throw new Error("github-oidc: GitHub OIDC token endpoint did not return a token value.");
1239
+ return value;
1240
+ }
1241
+ /** POST the OIDC JWT to the Void API and return the minted deploy token. */
1242
+ async function exchangeOidcTokenAtApi(apiUrl, project, oidcToken) {
1243
+ const url = `${apiUrl.endsWith("/") ? apiUrl.slice(0, -1) : apiUrl}/auth/github-oidc`;
1244
+ ensureCloudflaredToken(apiUrl);
1245
+ let res;
1246
+ try {
1247
+ res = await fetch(url, {
1248
+ method: "POST",
1249
+ headers: {
1250
+ "Content-Type": "application/json",
1251
+ ...cfAccessHeaders(process.env)
1252
+ },
1253
+ body: JSON.stringify({
1254
+ oidcToken,
1255
+ project
1256
+ })
1257
+ });
1258
+ } catch (err) {
1259
+ throw new Error(`github-oidc: Failed to reach ${url}: ${errText(err)}`);
1260
+ }
1261
+ if (!res.ok) {
1262
+ const body = await safeText(res);
1263
+ throw new Error(`github-oidc: OIDC token exchange failed (${res.status})${body ? `: ${body}` : ""}. Confirm the repository is connected to project "${project}" with the github_actions executor.`);
1264
+ }
1265
+ let body;
1266
+ try {
1267
+ body = await res.json();
1268
+ } catch {
1269
+ throw new Error("github-oidc: OIDC token exchange returned an invalid response.");
1270
+ }
1271
+ const token = body?.token;
1272
+ if (typeof token !== "string" || token.length === 0) throw new Error("github-oidc: OIDC token exchange did not return a deploy token.");
1273
+ return token;
1274
+ }
1275
+ /**
1276
+ * Emit a GitHub Actions `::add-mask::` workflow command so `value` is redacted
1277
+ * from workflow logs. No-op when not running inside GitHub Actions. GitHub reads
1278
+ * workflow commands from stdout.
1279
+ */
1280
+ function maskGithubActionsSecret(value, env = process.env) {
1281
+ if (env.GITHUB_ACTIONS !== "true" || !value) return;
1282
+ process.stdout.write(`::add-mask::${value}\n`);
1283
+ }
1284
+ function errText(err) {
1285
+ return err instanceof Error ? err.message : String(err);
1286
+ }
1287
+ async function safeText(res) {
1288
+ try {
1289
+ return (await res.text()).trim();
1290
+ } catch {
1291
+ return "";
1292
+ }
1293
+ }
1294
+ //#endregion
1171
1295
  //#region src/cli/log-file.ts
1172
1296
  /**
1173
1297
  * Walk `err.cause` up to 6 levels and return a plain JSON-friendly chain.
@@ -2377,7 +2501,17 @@ function buildEnv(extra) {
2377
2501
  async function runDeployInner(root, options, cliLog) {
2378
2502
  let reauthenticated = false;
2379
2503
  while (true) try {
2380
- const token = getToken(root);
2504
+ let token = process.env.VOID_TOKEN ?? null;
2505
+ if (!token && isGithubActionsOidcAvailable()) {
2506
+ const slug = getRequestedProjectSlug(options) ?? readProjectConfig(root)?.slug;
2507
+ if (!slug) throw new Error("deploy: running in GitHub Actions but the project is unknown — pass --project <slug> or link the project.");
2508
+ cliLog.info("github_oidc_exchange_start", { slug });
2509
+ token = await exchangeGithubOidcForDeployToken(getApiUrl(root), slug);
2510
+ maskGithubActionsSecret(token);
2511
+ process.env.VOID_TOKEN = token;
2512
+ cliLog.info("github_oidc_exchange_success", { slug });
2513
+ }
2514
+ token ??= getToken(root);
2381
2515
  if (!token) {
2382
2516
  R.error("No auth token found. Run `void auth login` first.");
2383
2517
  process.exit(1);
@@ -1,5 +1,5 @@
1
1
  import { s as import_picocolors } from "./output-DeiS4oEX.mjs";
2
- import { d as getToken, n as PlatformClient } from "./client-D4awzTnj.mjs";
2
+ import { f as getToken, n as PlatformClient } from "./client-YIzxv2ZO.mjs";
3
3
  import { c as R, u as Se } from "./dist-abzUneor.mjs";
4
4
  import { r as readProjectConfig } from "./project-CH9pdo16.mjs";
5
5
  //#region src/cli/domain.ts
@@ -1,6 +1,6 @@
1
1
  import { a as join } from "./pathe.M-eThtNZ-BrPhGF_K.mjs";
2
2
  import { n as cliTitle } from "./output-DeiS4oEX.mjs";
3
- import { d as getToken, n as PlatformClient } from "./client-D4awzTnj.mjs";
3
+ import { f as getToken, n as PlatformClient } from "./client-YIzxv2ZO.mjs";
4
4
  import { c as R, g as ge, u as Se, y as ye } from "./dist-abzUneor.mjs";
5
5
  import { r as readProjectConfig } from "./project-CH9pdo16.mjs";
6
6
  import { r as generateEnvTypes, t as findEnvFile } from "./env-types-CaJaIRXU.mjs";
@@ -1,4 +1,4 @@
1
- import { t as StandardSchemaV1 } from "./standard-schema-BCBv-QaP.mjs";
1
+ import { t as StandardSchemaV1 } from "./standard-schema-Cy0lfeWv.mjs";
2
2
 
3
3
  //#region src/shared/env-mask.d.ts
4
4
  /** Per-key override set by `.secret()` / `.public()` on built-in helpers. */
@@ -7,7 +7,7 @@ import { c as getDatabaseDialect, f as readConfig } from "./config-8dLIngKW.mjs"
7
7
  import { n as writeDrizzleConfig } from "./config--wXmVOoe.mjs";
8
8
  import { r as readJournal, t as collectMigrations } from "./collect-9rO3JFNM.mjs";
9
9
  import { n as listDrizzleArtifacts, t as assertJournalCoherence } from "./validate-CNWm-PsL.mjs";
10
- import { t as buildDrizzleKitSpawnEnv } from "./yarn-pnp-DhCHHLAz.mjs";
10
+ import { t as buildDrizzleKitSpawnEnv } from "./yarn-pnp-WLW2IHUY.mjs";
11
11
  import { existsSync, mkdirSync, readFileSync, readdirSync, unlinkSync, writeFileSync } from "node:fs";
12
12
  import { fileURLToPath } from "node:url";
13
13
  import { spawnSync } from "node:child_process";
@@ -1,5 +1,5 @@
1
1
  import { s as import_picocolors } from "./output-DeiS4oEX.mjs";
2
- import { c as createCodeChallenge, d as getToken, l as createCodeVerifier, m as openBrowser, n as PlatformClient, o as parsePlatformErrorBody, s as awaitBrowserCallback, t as PlatformApiError } from "./client-D4awzTnj.mjs";
2
+ import { c as createCodeChallenge, f as getToken, h as openBrowser, l as createCodeVerifier, n as PlatformClient, o as parsePlatformErrorBody, s as awaitBrowserCallback, t as PlatformApiError } from "./client-YIzxv2ZO.mjs";
3
3
  import { _ as me, c as R, i as Ee, l as Re, x as q } from "./dist-abzUneor.mjs";
4
4
  import { r as readProjectConfig } from "./project-CH9pdo16.mjs";
5
5
  import { r as resolveProjectBySlug, t as getRequestedProjectSlug } from "./resolve-project-D4O1_fZz.mjs";
@@ -22,6 +22,18 @@ function describeConnectError(status, errorCode) {
22
22
  return null;
23
23
  }
24
24
  /**
25
+ * Like {@link describeConnectError}, but for `void github update`. The update
26
+ * flow starts from an EXISTING connection, so a 404 "connection not found"
27
+ * (the project has no GitHub connection, or it was disconnected between the
28
+ * read and the write) is the common case and gets a "connect first" message.
29
+ * Everything else defers to the shared connect mapping.
30
+ */
31
+ function describeUpdateError(status, errorCode) {
32
+ const code = errorCode ?? "";
33
+ if (status === 404 && code.includes("connection not found")) return "This project is not connected to a GitHub repository. Run `void github connect` first.";
34
+ return describeConnectError(status, code);
35
+ }
36
+ /**
25
37
  * Extract `owner/repo` from a `https://github.com/owner/repo(.git)?` URL.
26
38
  * Returns null for non-GitHub URLs or null input.
27
39
  */
@@ -61,6 +73,7 @@ async function runGithubCommand(root, args) {
61
73
  case "install": return runInstall(root, client);
62
74
  case "installations": return runInstallations(client);
63
75
  case "connect": return runConnect(root, client, args);
76
+ case "update": return runGithubUpdate(root, client, args);
64
77
  case "link": return runGithubLink(root, client);
65
78
  }
66
79
  }
@@ -282,12 +295,14 @@ async function runConnect(root, client, args) {
282
295
  branch = input.trim() || branchDefault;
283
296
  }
284
297
  const executor = args.executor ?? "container";
298
+ let connection;
285
299
  try {
286
- await client.connectGithub(projectId, {
300
+ connection = await client.connectGithub(projectId, {
287
301
  installationId: installation.installation_id,
288
302
  repoFullName,
289
303
  branch,
290
- buildExecutor: executor
304
+ buildExecutor: executor,
305
+ workflowPath: args.workflowPath
291
306
  });
292
307
  } catch (err) {
293
308
  if (err instanceof PlatformApiError) {
@@ -302,7 +317,136 @@ async function runConnect(root, client, args) {
302
317
  }
303
318
  throw err;
304
319
  }
320
+ if (args.workflowPath !== void 0 && connection.workflow_path !== args.workflowPath) {
321
+ R.error(`connect: server did not apply --workflow ${args.workflowPath} (got ${connection.workflow_path ?? "none"}). The platform may be too old to support a custom workflow path.`);
322
+ process.exit(1);
323
+ }
305
324
  R.success(`Connected ${repoFullName} (${branch}) → project. Push to ${branch} to deploy.`);
306
325
  }
326
+ async function runGithubUpdate(root, client, args) {
327
+ const isTTY = process.stdin.isTTY === true;
328
+ if (!isTTY && args.branch === void 0 && args.executor === void 0 && args.workflowPath === void 0) {
329
+ R.error("update: Nothing to update. Pass --branch <name>, --executor <container|github_actions>, and/or --workflow <.github/workflows/...>.");
330
+ process.exit(1);
331
+ }
332
+ let projectId;
333
+ const requestedSlug = getRequestedProjectSlug({ projectSlug: args.projectName || void 0 });
334
+ if (requestedSlug) {
335
+ const resolved = resolveProjectBySlug(await client.listProjects(), requestedSlug);
336
+ if (!resolved) {
337
+ R.error(`update: No project found with slug '${requestedSlug}'.`);
338
+ process.exit(1);
339
+ }
340
+ projectId = resolved.projectId;
341
+ } else {
342
+ const linked = readProjectConfig(root);
343
+ if (linked) projectId = linked.projectId;
344
+ else if (!isTTY) {
345
+ R.error("update: No project specified. Pass a project name or --project <name>, set VOID_PROJECT, or link one with `void project link`.");
346
+ process.exit(1);
347
+ } else {
348
+ const projects = await client.listProjects();
349
+ if (projects.length === 0) {
350
+ R.error("No projects found. Create one first with `void deploy`.");
351
+ process.exit(1);
352
+ }
353
+ const picked = await Ee({
354
+ message: "Select a project:",
355
+ options: projects.map((p) => ({
356
+ value: p.id,
357
+ label: p.slug
358
+ }))
359
+ });
360
+ if (q(picked)) {
361
+ me("Cancelled.");
362
+ process.exit(0);
363
+ }
364
+ projectId = picked;
365
+ }
366
+ }
367
+ let current;
368
+ try {
369
+ current = await client.getGithubConnection(projectId);
370
+ } catch (err) {
371
+ if (err instanceof PlatformApiError) {
372
+ const body = parsePlatformErrorBody(err.body);
373
+ const code = body?.error ?? body?.message ?? "";
374
+ const message = describeUpdateError(err.status, code);
375
+ if (message !== null) {
376
+ R.error(`update: ${message}`);
377
+ process.exit(1);
378
+ }
379
+ }
380
+ throw err;
381
+ }
382
+ let branch;
383
+ let executor;
384
+ if (isTTY) {
385
+ if (args.branch !== void 0) branch = args.branch;
386
+ else {
387
+ const input = await Re({
388
+ message: "Branch to deploy from:",
389
+ placeholder: current.branch,
390
+ initialValue: current.branch
391
+ });
392
+ if (q(input)) {
393
+ me("Cancelled.");
394
+ process.exit(0);
395
+ }
396
+ branch = input.trim() || current.branch;
397
+ }
398
+ if (args.executor !== void 0) executor = args.executor;
399
+ else {
400
+ const picked = await Ee({
401
+ message: "Build executor:",
402
+ options: [{
403
+ value: "container",
404
+ label: "container"
405
+ }, {
406
+ value: "github_actions",
407
+ label: "github_actions"
408
+ }],
409
+ initialValue: current.build_executor
410
+ });
411
+ if (q(picked)) {
412
+ me("Cancelled.");
413
+ process.exit(0);
414
+ }
415
+ executor = picked;
416
+ }
417
+ } else {
418
+ branch = args.branch ?? current.branch;
419
+ executor = args.executor ?? current.build_executor;
420
+ }
421
+ const patch = {};
422
+ if (branch !== current.branch) patch.branch = branch;
423
+ if (executor !== current.build_executor) patch.buildExecutor = executor;
424
+ if (args.workflowPath !== void 0 && args.workflowPath !== current.workflow_path) patch.workflowPath = args.workflowPath;
425
+ if (patch.branch === void 0 && patch.buildExecutor === void 0 && patch.workflowPath === void 0) {
426
+ R.info(`No changes. ${current.repo_full_name} already deploys from ${current.branch} via ${current.build_executor}.`);
427
+ return;
428
+ }
429
+ let updated;
430
+ try {
431
+ updated = await client.updateGithubConnection(projectId, patch);
432
+ } catch (err) {
433
+ if (err instanceof PlatformApiError) {
434
+ const body = parsePlatformErrorBody(err.body);
435
+ const code = body?.error ?? body?.message ?? "";
436
+ const message = describeUpdateError(err.status, code);
437
+ if (message !== null) {
438
+ R.error(`update: ${message}`);
439
+ process.exit(1);
440
+ }
441
+ throw err;
442
+ }
443
+ throw err;
444
+ }
445
+ if (patch.workflowPath !== void 0 && updated.workflow_path !== patch.workflowPath) {
446
+ R.error(`update: server did not apply --workflow ${patch.workflowPath} (got ${updated.workflow_path ?? "none"}). The platform may be too old to support a custom workflow path.`);
447
+ process.exit(1);
448
+ }
449
+ R.success(`Updated ${updated.repo_full_name} → branch ${updated.branch}, executor ${updated.build_executor}, workflow ${updated.workflow_path}.`);
450
+ }
307
451
  //#endregion
308
452
  export { runGithubCommand };
@@ -1,6 +1,6 @@
1
- import { n as HeadDescriptor } from "./head-JAH2l3fg.mjs";
2
- import { r as AuthUser, t as AuthSession } from "./auth-nEUVHuFI.mjs";
3
- import { t as StandardSchemaV1 } from "./standard-schema-BCBv-QaP.mjs";
1
+ import { n as HeadDescriptor } from "./head-eOUCWUNy.mjs";
2
+ import { r as AuthUser, t as AuthSession } from "./auth-Dz2CCn4T.mjs";
3
+ import { t as StandardSchemaV1 } from "./standard-schema-Cy0lfeWv.mjs";
4
4
  import * as _$_cloudflare_sandbox0 from "@cloudflare/sandbox";
5
5
  import { Context, Env, MiddlewareHandler } from "hono";
6
6
  import { RewriteDestination } from "void/routes";
package/dist/index.d.mts CHANGED
@@ -1,6 +1,6 @@
1
- import { n as HeadDescriptor } from "./head-JAH2l3fg.mjs";
2
- import { r as AuthUser } from "./auth-nEUVHuFI.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-DczZlaXR.mjs";
1
+ import { n as HeadDescriptor } from "./head-eOUCWUNy.mjs";
2
+ import { r as AuthUser } from "./auth-Dz2CCn4T.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-B7rCOy21.mjs";
4
4
  import { QueueMap } from "./runtime/queues.mjs";
5
5
  import { PluginConfig } from "@cloudflare/vite-plugin";
6
6
  import { Plugin } from "vite";
package/dist/index.mjs CHANGED
@@ -1,10 +1,10 @@
1
1
  import { r as __toESM } from "./chunk-DJd-R1mw.mjs";
2
2
  import { a as join, n as dirname, s as relative } from "./pathe.M-eThtNZ-BrPhGF_K.mjs";
3
3
  import { u as require_picocolors } from "./output-DeiS4oEX.mjs";
4
- import { C as hasApiRoutes, S as resolveSandboxConfig, T as resolveAssetRoutingPolicy, _ as readWranglerCompat, a as prerenderPagesNode, b as SANDBOX_MIGRATION_TAG, c as stripInternalEnvKeys, d as ensureWranglerCompatibilityDate, f as ensureWranglerNodejsAlsFlag, g as readExistingLiveBindingConfig, h as normalizeWranglerCompatibilityFlags, i as prerenderPages, l as LIVE_MIGRATION_TAG, m as nextDurableObjectMigrationTag, n as resolveDistDir, o as filterLoadedEnv, p as hasDurableObjectSqliteMigration, r as resolveWorkerDirName, s as resolveRemoteMode, u as ensureWranglerCompat, v as resolveLiveBindingConfig, w as hasDocumentRoutes, x as isSandboxEnabled, y as syncWranglerBindings } from "./deploy-Cwa5sooV.mjs";
4
+ import { C as hasApiRoutes, S as resolveSandboxConfig, T as resolveAssetRoutingPolicy, _ as readWranglerCompat, a as prerenderPagesNode, b as SANDBOX_MIGRATION_TAG, c as stripInternalEnvKeys, d as ensureWranglerCompatibilityDate, f as ensureWranglerNodejsAlsFlag, g as readExistingLiveBindingConfig, h as normalizeWranglerCompatibilityFlags, i as prerenderPages, l as LIVE_MIGRATION_TAG, m as nextDurableObjectMigrationTag, n as resolveDistDir, o as filterLoadedEnv, p as hasDurableObjectSqliteMigration, r as resolveWorkerDirName, s as resolveRemoteMode, u as ensureWranglerCompat, v as resolveLiveBindingConfig, w as hasDocumentRoutes, x as isSandboxEnabled, y as syncWranglerBindings } from "./deploy-DpOdwtla.mjs";
5
5
  import { i as resolveProjectPaths, n as readProjectPaths, t as assertNoRootSourceConventionConflicts } from "./project-paths-CCMrHYQm.mjs";
6
6
  import { n as loadVoidAuthConfig, t as findVoidAuthConfig } from "./config-hhMYPVRT.mjs";
7
- import { d as getToken, p as isStagingMode } from "./client-D4awzTnj.mjs";
7
+ import { f as getToken, m as isStagingMode } from "./client-YIzxv2ZO.mjs";
8
8
  import { r as readProjectConfig } from "./project-CH9pdo16.mjs";
9
9
  import { n as ensureProjectTsconfig, r as writeFileIfChanged } from "./project-tsconfig-BTNuNoJ0.mjs";
10
10
  import { c as getDatabaseDialect, f as readConfig, l as isNodeTarget, p as resolveBindingNames } from "./config-8dLIngKW.mjs";
@@ -1654,7 +1654,7 @@ function migrationPlugin(root, dialect, databaseId = "local", persistRoot = join
1654
1654
  else warn();
1655
1655
  return;
1656
1656
  }
1657
- const { runPgMigrations, getPgAppliedMigrations } = await import("./runner-pg-BAheiT6v.mjs");
1657
+ const { runPgMigrations, getPgAppliedMigrations } = await import("./runner-pg-EuhrFW3D.mjs");
1658
1658
  const { collectMigrations } = await import("./collect-9rO3JFNM.mjs").then((n) => n.n);
1659
1659
  const { validateMigrations } = await import("./validate-CNWm-PsL.mjs").then((n) => n.i);
1660
1660
  const allMigrations = collectMigrations(migrationsDir);
@@ -4916,7 +4916,7 @@ const STAGING_API_URL = "https://api.staging.void.cloud";
4916
4916
  */
4917
4917
  async function runAiSetupPrompt(root, token, staging, server) {
4918
4918
  const { select, text, isCancel, log } = await import("./dist-abzUneor.mjs").then((n) => n.p);
4919
- const { PlatformClient } = await import("./client-D4awzTnj.mjs").then((n) => n.r);
4919
+ const { PlatformClient } = await import("./client-YIzxv2ZO.mjs").then((n) => n.r);
4920
4920
  const { writeProjectConfig } = await import("./project-CH9pdo16.mjs").then((n) => n.n);
4921
4921
  const { inferDefaultSlug } = await import("./resolve-project-D4O1_fZz.mjs").then((n) => n.i);
4922
4922
  const client = new PlatformClient(token, staging ? STAGING_API_URL : DEFAULT_API_URL);
@@ -4945,7 +4945,7 @@ async function runAiSetupPrompt(root, token, staging, server) {
4945
4945
  let slug;
4946
4946
  if (result === "__create__") {
4947
4947
  const { validateProjectSlug } = await import("./project-slug-rX3kTOfY.mjs").then((n) => n.t);
4948
- const { createProjectWithSlugRetry } = await import("./create-project-CGodxfzH.mjs").then((n) => n.t);
4948
+ const { createProjectWithSlugRetry } = await import("./create-project-pLQdzEPe.mjs").then((n) => n.t);
4949
4949
  let created;
4950
4950
  try {
4951
4951
  created = await createProjectWithSlugRetry(client, inferDefaultSlug(root), async (defaultSlug) => {
@@ -1,7 +1,7 @@
1
1
  import { a as join, c as resolve, i as isAbsolute, n as dirname, s as relative, t as basename } from "./pathe.M-eThtNZ-BrPhGF_K.mjs";
2
2
  import { n as cliTitle } from "./output-DeiS4oEX.mjs";
3
3
  import { n as readProjectPaths } from "./project-paths-CCMrHYQm.mjs";
4
- import { d as getToken, n as PlatformClient, p as isStagingMode } from "./client-D4awzTnj.mjs";
4
+ import { f as getToken, m as isStagingMode, n as PlatformClient } from "./client-YIzxv2ZO.mjs";
5
5
  import { _ as me, c as R, g as ge, i as Ee, l as Re, u as Se, v as ue, x as q, y as ye } from "./dist-abzUneor.mjs";
6
6
  import { a as writeProjectConfig, r as readProjectConfig } from "./project-CH9pdo16.mjs";
7
7
  import { n as ensureProjectTsconfig, t as createProjectTsconfig } from "./project-tsconfig-BTNuNoJ0.mjs";
@@ -11,10 +11,10 @@ import { r as parseDotenvFile, t as expandDotenv } from "./dotenv-lS94ymhM.mjs";
11
11
  import { t as MagicString } from "./magic-string.es-C1Fb0uxq.mjs";
12
12
  import { n as writeDrizzleConfig } from "./config--wXmVOoe.mjs";
13
13
  import { n as getAgentById, r as getPackageDir, t as detectAgents } from "./agents-MhSzNMiC.mjs";
14
- import { n as promptAndCreateProject, r as promptProjectSelection } from "./create-project-CGodxfzH.mjs";
15
- import { t as promptForLoginToken } from "./login-Ca6mhQVI.mjs";
14
+ import { n as promptAndCreateProject, r as promptProjectSelection } from "./create-project-pLQdzEPe.mjs";
15
+ import { t as promptForLoginToken } from "./login-B3l_sDwT.mjs";
16
16
  import { r as formatProjectCommand } from "./preset-B7ZQZn0u.mjs";
17
- import { n as findInstalledYarnPnpRuntime, r as hasLocalLockfile, t as buildDrizzleKitSpawnEnv } from "./yarn-pnp-DhCHHLAz.mjs";
17
+ import { n as findInstalledYarnPnpRuntime, r as hasLocalLockfile, t as buildDrizzleKitSpawnEnv } from "./yarn-pnp-WLW2IHUY.mjs";
18
18
  import { createRequire } from "node:module";
19
19
  import { existsSync, mkdirSync, readFileSync, readdirSync, rmdirSync, unlinkSync, writeFileSync } from "node:fs";
20
20
  import { fileURLToPath } from "node:url";
@@ -1805,10 +1805,12 @@ function getWorkflowSetupSteps(root, pm) {
1805
1805
  }
1806
1806
  /**
1807
1807
  * Scaffold the GitHub Actions workflow that deploys via GitHub OIDC — no
1808
- * long-lived secret stored in the repo. The job requests an OIDC token from
1809
- * GitHub (audience `void`), exchanges it at `POST $VOID_API_URL/auth/github-oidc`
1810
- * for a short-lived (15-min) project-scoped deploy token, then runs
1811
- * `void deploy --project <slug>` with that token exported as `VOID_TOKEN`.
1808
+ * long-lived secret stored in the repo. `void deploy` itself detects GitHub
1809
+ * Actions, mints an OIDC token (audience `void`), exchanges it at
1810
+ * `POST $VOID_API_URL/auth/github-oidc` for a short-lived, project-scoped deploy
1811
+ * token, and uses it — so the workflow is a single `void deploy` step (no
1812
+ * curl/jq). `permissions: id-token: write` is still required: it is what lets
1813
+ * the job (and thus the CLI) mint the OIDC token.
1812
1814
  *
1813
1815
  * `slug` is the linked project slug when known (from `.void/project.json`);
1814
1816
  * otherwise a `${{ vars.VOID_PROJECT }}` placeholder is emitted with a comment
@@ -1830,8 +1832,8 @@ concurrency:
1830
1832
  cancel-in-progress: true
1831
1833
 
1832
1834
  # id-token: write lets the job mint a GitHub OIDC token. No long-lived
1833
- # VOID_TOKEN secret is stored — the token below is exchanged for a
1834
- # short-lived, project-scoped deploy token at deploy time.
1835
+ # VOID_TOKEN secret is stored — \`void deploy\` mints that OIDC token and
1836
+ # exchanges it for a short-lived, project-scoped deploy token at deploy time.
1835
1837
  permissions:
1836
1838
  id-token: write
1837
1839
  contents: read
@@ -1850,17 +1852,6 @@ jobs:
1850
1852
  - uses: actions/checkout@v6
1851
1853
  ${setup}
1852
1854
  ${install}
1853
- - name: Exchange GitHub OIDC token for a Void deploy token
1854
- run: |
1855
- OIDC_TOKEN="$(curl -sf \\
1856
- -H "Authorization: Bearer $ACTIONS_ID_TOKEN_REQUEST_TOKEN" \\
1857
- "$ACTIONS_ID_TOKEN_REQUEST_URL&audience=void" | jq -r '.value')"
1858
- VOID_TOKEN="$(curl -sf \\
1859
- -H 'Content-Type: application/json' \\
1860
- -d "$(jq -n --arg t "$OIDC_TOKEN" --arg p "$VOID_PROJECT" '{oidcToken: $t, project: $p}')" \\
1861
- "$VOID_API_URL/auth/github-oidc" | jq -r '.token')"
1862
- echo "::add-mask::$VOID_TOKEN"
1863
- echo "VOID_TOKEN=$VOID_TOKEN" >> "$GITHUB_ENV"
1864
1855
  - name: Deploy
1865
1856
  run: ${runner} deploy --project "$VOID_PROJECT"
1866
1857
  `;
@@ -2807,7 +2798,7 @@ async function runInitCommand(root, initArgs) {
2807
2798
  const agentSetup = await resolveAgentSetup(root);
2808
2799
  injectAgentBlock(root, agentSetup.instructionFilePath);
2809
2800
  if (agentSetup.agents.length > 0) {
2810
- const { linkSkillsForSpecificAgents } = await import("./skills--OMgLmXW.mjs");
2801
+ const { linkSkillsForSpecificAgents } = await import("./skills-Dl3u05da.mjs");
2811
2802
  linkSkillsForSpecificAgents(root, agentSetup.agents);
2812
2803
  } else R.info("Skills linking skipped for generic agent setup");
2813
2804
  setupMcpConfig(root, agentSetup.agents);
@@ -1,8 +1,8 @@
1
1
  import { n as cliTitle, s as import_picocolors } from "./output-DeiS4oEX.mjs";
2
- import { d as getToken, n as PlatformClient, u as getSiteDomain } from "./client-D4awzTnj.mjs";
2
+ import { d as getSiteDomain, f as getToken, n as PlatformClient } from "./client-YIzxv2ZO.mjs";
3
3
  import { _ as me, c as R, g as ge, y as ye } from "./dist-abzUneor.mjs";
4
4
  import { a as writeProjectConfig, r as readProjectConfig } from "./project-CH9pdo16.mjs";
5
- import { n as promptAndCreateProject, r as promptProjectSelection } from "./create-project-CGodxfzH.mjs";
5
+ import { n as promptAndCreateProject, r as promptProjectSelection } from "./create-project-pLQdzEPe.mjs";
6
6
  import { r as resolveProjectBySlug } from "./resolve-project-D4O1_fZz.mjs";
7
7
  //#region src/cli/link.ts
8
8
  async function runLink(root, slug) {
@@ -1,5 +1,5 @@
1
1
  import { a as ensureUtc, i as dim, l as tablePrefix, n as cliTitle, s as import_picocolors } from "./output-DeiS4oEX.mjs";
2
- import { d as getToken, n as PlatformClient } from "./client-D4awzTnj.mjs";
2
+ import { f as getToken, n as PlatformClient } from "./client-YIzxv2ZO.mjs";
3
3
  import { c as R, g as ge, y as ye } from "./dist-abzUneor.mjs";
4
4
  import { r as readProjectConfig } from "./project-CH9pdo16.mjs";
5
5
  import { r as resolveProjectBySlug } from "./resolve-project-D4O1_fZz.mjs";
@@ -1,5 +1,5 @@
1
1
  import { n as cliTitle, r as createSpinner, s as import_picocolors } from "./output-DeiS4oEX.mjs";
2
- import { _ as saveToken, a as isExpiredTokenError, d as getToken, f as getTokenSource, g as runLogin, h as removeToken, n as PlatformClient, p as isStagingMode } from "./client-D4awzTnj.mjs";
2
+ import { _ as runLogin, a as isExpiredTokenError, f as getToken, g as removeToken, m as isStagingMode, n as PlatformClient, p as getTokenSource, v as saveToken } from "./client-YIzxv2ZO.mjs";
3
3
  import { _ as me, c as R, g as ge, i as Ee, x as q, y as ye } from "./dist-abzUneor.mjs";
4
4
  //#region src/cli/login.ts
5
5
  async function promptForLoginToken(root = process.cwd()) {
@@ -1,5 +1,5 @@
1
1
  import { i as dim, n as cliTitle, s as import_picocolors } from "./output-DeiS4oEX.mjs";
2
- import { d as getToken, n as PlatformClient } from "./client-D4awzTnj.mjs";
2
+ import { f as getToken, n as PlatformClient } from "./client-YIzxv2ZO.mjs";
3
3
  import { c as R, g as ge, y as ye } from "./dist-abzUneor.mjs";
4
4
  import { r as readProjectConfig } from "./project-CH9pdo16.mjs";
5
5
  //#region src/cli/logs.ts
@@ -1,5 +1,5 @@
1
1
  import { a as join, n as dirname } from "./pathe.M-eThtNZ-BrPhGF_K.mjs";
2
- import { d as getToken, n as PlatformClient } from "./client-D4awzTnj.mjs";
2
+ import { f as getToken, n as PlatformClient } from "./client-YIzxv2ZO.mjs";
3
3
  import { a as writeProjectConfig } from "./project-CH9pdo16.mjs";
4
4
  import { existsSync, readFileSync, readdirSync } from "node:fs";
5
5
  import { fileURLToPath } from "node:url";
@@ -1,4 +1,4 @@
1
- import { t as PageObject } from "../protocol-63PHtCHS.mjs";
1
+ import { t as PageObject } from "../protocol-6UZCowS1.mjs";
2
2
  import { CacheForInput, CacheForResult } from "./prefetch.mjs";
3
3
 
4
4
  //#region src/pages/action-result.d.ts
@@ -1,4 +1,4 @@
1
- import { n as HeadDescriptor } from "../head-JAH2l3fg.mjs";
1
+ import { n as HeadDescriptor } from "../head-eOUCWUNy.mjs";
2
2
 
3
3
  //#region src/pages/head-client.d.ts
4
4
  /**
@@ -1,2 +1,2 @@
1
- import { a as renderHtmlAttrs, i as renderHeadToString, n as HeadDescriptor, o as resolveHead, r as renderBodyAttrs, t as HeadConfig } from "../head-JAH2l3fg.mjs";
1
+ import { a as renderHtmlAttrs, i as renderHeadToString, n as HeadDescriptor, o as resolveHead, r as renderBodyAttrs, t as HeadConfig } from "../head-eOUCWUNy.mjs";
2
2
  export { HeadConfig, HeadDescriptor, renderBodyAttrs, renderHeadToString, renderHtmlAttrs, resolveHead };
@@ -1,5 +1,5 @@
1
- import { a as renderHtmlAttrs, i as renderHeadToString, n as HeadDescriptor, o as resolveHead, r as renderBodyAttrs, t as HeadConfig } from "../head-JAH2l3fg.mjs";
2
- import { i as PageDefinition, n as LayoutDefinition, o as PageScanResult, r as NamedLayoutDefinition } from "../types-BnHMXezo.mjs";
1
+ import { a as renderHtmlAttrs, i as renderHeadToString, n as HeadDescriptor, o as resolveHead, r as renderBodyAttrs, t as HeadConfig } from "../head-eOUCWUNy.mjs";
2
+ import { i as PageDefinition, n as LayoutDefinition, o as PageScanResult, r as NamedLayoutDefinition } from "../types-BodZGegX.mjs";
3
3
  import { serializePageData } from "./serialize.mjs";
4
4
  import { RewriteDestination } from "void/routes";
5
5
 
@@ -1,4 +1,4 @@
1
- import { o as PageScanResult } from "../types-BnHMXezo.mjs";
1
+ import { o as PageScanResult } from "../types-BodZGegX.mjs";
2
2
  import { ResolvedConfig, ViteDevServer } from "vite";
3
3
 
4
4
  //#region src/pages/islands-plugin.d.ts
@@ -1,3 +1,3 @@
1
- import { w as ValidationError } from "../handler-DczZlaXR.mjs";
2
- import { a as handlePageMutation, i as handlePageGet, n as PageRenderResult, o as safeJsonStringify, r as flattenValidationErrors, t as PageObject } from "../protocol-63PHtCHS.mjs";
1
+ import { w as ValidationError } from "../handler-B7rCOy21.mjs";
2
+ import { a as handlePageMutation, i as handlePageGet, n as PageRenderResult, o as safeJsonStringify, r as flattenValidationErrors, t as PageObject } from "../protocol-6UZCowS1.mjs";
3
3
  export { PageObject, PageRenderResult, ValidationError, flattenValidationErrors, handlePageGet, handlePageMutation, safeJsonStringify };