diff --git a/packages/deploy-cloudflare/src/diagnostics.ts b/packages/deploy-cloudflare/src/diagnostics.ts index 2d6da6ba1..d6804342b 100644 --- a/packages/deploy-cloudflare/src/diagnostics.ts +++ b/packages/deploy-cloudflare/src/diagnostics.ts @@ -3,8 +3,26 @@ import type { CloudflareCommandResult } from './execute.ts'; const MAX_DIAGNOSTIC_LENGTH = 4096; const MAX_DIAGNOSTIC_LINES = 24; +const ERROR_BOX = + /(?:^|\n)[ \t]*┌[ \t]*(?:APIError|Error)\b[^\n]*\n(?:[ \t]*│[^\n]*\n)*[ \t]*└[^\n]*/i; +// cf draws upload progress, binding tables, config diffs and upload conflicts as log +// lines: a guide symbol, or its fallback for terminals without Unicode, then two spaces. +// These lines can show binding values. cf printed them on stdout before 1.0.0-beta.21, +// and on stderr since. +const LOG_LINE = /^[├│◆◇●▲■└|*o•!x—](?: {2}|$)/; +const UPLOAD_CONFLICT = + /^[ \t]*(?:\S[ \t]+)?(Aborting the upload operation because of conflicts\..*)$/m; +const SCRIPT_API_ORIGIN = + /^[ \t]*(?:\S[ \t]+)?(You are about to upload a Worker that was last updated via the script API\.)/m; -/** Keep the uploader's error, excluding stdout binding tables and redacting common credential formats. */ +function withoutLogLines(output: string): string { + return output + .split('\n') + .filter((line) => !LOG_LINE.test(line)) + .join('\n'); +} + +/** Keep the uploader's error, excluding cf's log lines and redacting common credential formats. */ export function cloudflareCommandDiagnostic(result: CloudflareCommandResult): string | undefined { const stderr = stripVTControlCharacters(result.stderr).replace(/\r\n?/g, '\n'); const stdout = stripVTControlCharacters(result.stdout).replace(/\r\n?/g, '\n'); @@ -17,29 +35,28 @@ export function cloudflareCommandDiagnostic(result: CloudflareCommandResult): st } } if (message === stderr && !/(?:^|\n)[ \t]*(?:[✘×X][ \t]+)?\[ERROR\]/i.test(stderr)) { - // cf renders API failures as a box on stdout while config warnings go to - // stderr. Only copy the error box; stdout may also contain binding values. - const box = - /(?:^|\n)[ \t]*┌[ \t]*(?:APIError|Error)\b[^\n]*\n(?:[ \t]*│[^\n]*\n)*[ \t]*└[^\n]*/i.exec( - stdout, - ); + // Copy only an error box on stdout, the upload conflict without the config diff + // that explains it, or stderr without cf's log lines. + const box = ERROR_BOX.exec(stdout); + const conflict = UPLOAD_CONFLICT.exec(`${stdout}\n${stderr}`); if (box) { message = box[0].trim(); + } else if (conflict) { + message = [SCRIPT_API_ORIGIN.exec(`${stdout}\n${stderr}`)?.[1], conflict[1]] + .filter(Boolean) + .join('\n'); } else { - const lines = stdout.split('\n'); - const abort = lines.find((line) => - line.startsWith('■ Aborting the upload operation because of conflicts.'), - ); - if (abort) { - const reason = 'You are about to upload a Worker that was last updated via the script API.'; - message = [lines.includes(`▲ ${reason}`) ? reason : '', abort.slice('■ '.length)] - .filter(Boolean) - .join('\n'); - } + // Keep an error box on stderr whole: its bars look like log lines. + const stderrBox = ERROR_BOX.exec(stderr); + message = stderrBox + ? withoutLogLines(stderr.slice(0, stderrBox.index)) + + stderrBox[0] + + withoutLogLines(stderr.slice(stderrBox.index + stderrBox[0].length)) + : withoutLogLines(stderr); } } - // Upload progress and bindings are printed on stdout. Never echo that whole stream - // when no error block was found, even when the process failed without stderr. + // Never echo stdout, or cf's log lines on stderr, when no error block was found, + // even when the process failed without stderr. message = stripVTControlCharacters(message) .split(/\n\s*(?:🪵|Logs (?:were )?written|If you think this is a bug)/)[0]! .trim(); diff --git a/packages/deploy-cloudflare/test/unit/diagnostics.test.ts b/packages/deploy-cloudflare/test/unit/diagnostics.test.ts index c16ec9177..0a8289798 100644 --- a/packages/deploy-cloudflare/test/unit/diagnostics.test.ts +++ b/packages/deploy-cloudflare/test/unit/diagnostics.test.ts @@ -53,6 +53,92 @@ describe('Cloudflare command diagnostics', () => { ).toBe('┌ APIError\n│ [10000] Worker upload failed.\n└'); }); + it('keeps an error box and its advice on stderr without the binding table before it', () => { + expect( + cloudflareCommandDiagnostic({ + status: 1, + stdout: '', + // cf 1.0.0-beta.21 and later print upload progress and bindings on stderr. + stderr: [ + '├ Upload', + '│ Your Worker has access to the following bindings:', + '│ Binding Resource', + '│ env.PRIVATE_VALUE ("do-not-echo") Environment Variable', + '| env.ASCII_VALUE ("do-not-echo") Environment Variable', + '│', + '', + '┌ APIError', + '│ [10000] Authentication error [code: 10000]', + '│', + '│ 403 Forbidden', + '└', + '', + '→ Check your API token permissions', + ].join('\n'), + }), + ).toBe( + '┌ APIError\n│ [10000] Authentication error [code: 10000]\n│\n│ 403 Forbidden\n└\n\n→ Check your API token permissions', + ); + expect( + cloudflareCommandDiagnostic({ + status: 1, + stdout: '', + stderr: '├ Upload\n│ env.PRIVATE_VALUE ("do-not-echo")\nUpload stopped.', + }), + ).toBe('Upload stopped.'); + expect( + cloudflareCommandDiagnostic({ + status: 1, + stdout: '', + stderr: '├ Upload\n│ env.PRIVATE_VALUE ("do-not-echo")\n◆ Version upload complete', + }), + ).toBeUndefined(); + }); + + it('reports upload conflicts from either stream without the config diff', () => { + const abort = + 'Aborting the upload operation because of conflicts. To override and upload anyway, remove the `--strict` flag'; + const reason = 'You are about to upload a Worker that was last updated via the script API.'; + const scriptApi = [ + '├ Upload', + `▲ ${reason}`, + '│ Edits that have been made via the script API will be overridden by your local code and config.', + `■ ${abort}`, + '◆ Version upload complete', + ].join('\n'); + // cf 1.0.0-beta.21 and later print upload messages on stderr, earlier releases on stdout. + for (const [stdout, stderr] of [ + ['', scriptApi], + [scriptApi, ''], + // Without a Unicode terminal, cf prints fallback symbols. + ['', scriptApi.replace('▲', '!').replace('■', 'x').replace('│', '|').replace('◆', '*')], + ]) { + expect(cloudflareCommandDiagnostic({ status: 1, stdout: stdout!, stderr: stderr! })).toBe( + `${reason}\n${abort}`, + ); + } + expect( + cloudflareCommandDiagnostic({ + status: 1, + stdout: '', + stderr: [ + '├ Upload', + '▲ The local configuration being used (generated from your local configuration file) differs from the remote configuration of your Worker set via the Cloudflare Dashboard:', + '│ {', + '│ vars: {', + '│ - REMOTE_VALUE: "do-not-echo"', + `│ + LOCAL_VALUE: "${abort} do-not-echo"`, + '│ }', + '│ }', + '│', + '│ Uploading the Worker will override the remote configuration with your local one.', + `■ ${abort}`, + '◆ Version upload complete', + ].join('\n'), + }), + ).toBe(abort); + }); + it('retains plain stderr and process-spawn failures', () => { expect( cloudflareCommandDiagnostic({ status: 1, stdout: '', stderr: 'Unknown argument: strict' }), diff --git a/packages/void/package.json b/packages/void/package.json index 1a8bf73c4..6a6dde7c7 100644 --- a/packages/void/package.json +++ b/packages/void/package.json @@ -378,7 +378,7 @@ "jsonc-parser": "^3.3.1", "mime": "^4.1.1", "miniflare": "catalog:", - "minimatch": "^10.2.6", + "minimatch": "^11.0.3", "mysql2": "^3.24.6", "pg": "^8.23.1", "postal-mime": "catalog:", diff --git a/packages/void/src/cli/cf-command-values.ts b/packages/void/src/cli/cf-command-values.ts index 7dae62602..f14c5d240 100644 --- a/packages/void/src/cli/cf-command-values.ts +++ b/packages/void/src/cli/cf-command-values.ts @@ -19,13 +19,18 @@ export function isD1Bookmark(value: unknown): value is string { return typeof value === 'string' && /^[0-9a-f]+(?:-[0-9a-f]+)+$/i.test(value); } -/** Read the version ID and URLs that cf prints after a prebuilt upload. */ -export function readCfUploadOutput( - stdout: string, -): Record<'versionId' | 'previewUrl' | 'workersDevUrl', string | undefined> { +/** + * Read the version ID and URLs that cf prints after a prebuilt upload: on stdout before + * cf 1.0.0-beta.21, and on stderr since. + */ +export function readCfUploadOutput(result: { + stdout: string; + stderr: string; +}): Record<'versionId' | 'previewUrl' | 'workersDevUrl', string | undefined> { + const output = `${result.stdout}\n${result.stderr}`; return { - versionId: stdout.match(/(?:Worker|Current) Version ID:\s*([0-9a-f]{8}-[0-9a-f-]{27})/i)?.[1], - previewUrl: stdout.match(/Version Preview(?: Alias)? URL:\s*(https:\/\/\S+)/i)?.[1], - workersDevUrl: stdout.match(/(https:\/\/[a-z0-9.-]+\.workers\.dev(?:\/[^\s]*)?)/i)?.[1], + versionId: output.match(/(?:Worker|Current) Version ID:\s*([0-9a-f]{8}-[0-9a-f-]{27})/i)?.[1], + previewUrl: output.match(/Version Preview(?: Alias)? URL:\s*(https:\/\/\S+)/i)?.[1], + workersDevUrl: output.match(/(https:\/\/[a-z0-9.-]+\.workers\.dev(?:\/[^\s]*)?)/i)?.[1], }; } diff --git a/packages/void/src/cli/cf-version-api.ts b/packages/void/src/cli/cf-version-api.ts index 808757f19..59fd730bb 100644 --- a/packages/void/src/cli/cf-version-api.ts +++ b/packages/void/src/cli/cf-version-api.ts @@ -823,7 +823,10 @@ async function prepareContainerMetadata(options: { if (pushed.status !== 0 || pushed.signal || pushed.error) { throw new Error('Cloudflare Container image push failed.'); } - const matches = [...pushed.stdout.matchAll(/Pushed image:\s*(\S+)/g)]; + // cf prints this on stdout before 1.0.0-beta.21, and on stderr since. + const matches = [ + ...`${pushed.stdout}\n${pushed.stderr}`.matchAll(/Pushed image:\s*(\S+)/g), + ]; const remote = matches.length === 1 ? matches[0][1] : ''; if ( !remote.startsWith(`registry.cloudflare.com/${options.accountId}/`) || diff --git a/packages/void/src/cli/cf-version-runner.ts b/packages/void/src/cli/cf-version-runner.ts index a798045d3..305e965aa 100644 --- a/packages/void/src/cli/cf-version-runner.ts +++ b/packages/void/src/cli/cf-version-runner.ts @@ -389,7 +389,7 @@ export function createCfVersionRunner(options: { if (record(result.data) && typeof result.data.versionId === 'string') { return result; } - const { versionId, previewUrl, workersDevUrl } = readCfUploadOutput(result.stdout); + const { versionId, previewUrl, workersDevUrl } = readCfUploadOutput(result); return { ...result, data: versionId diff --git a/packages/void/src/cli/cloudflare-operation-process.ts b/packages/void/src/cli/cloudflare-operation-process.ts index a655ff14d..d96b4611e 100644 --- a/packages/void/src/cli/cloudflare-operation-process.ts +++ b/packages/void/src/cli/cloudflare-operation-process.ts @@ -1192,7 +1192,7 @@ async function workerChanges(): Promise { } catch { /* Human upload presentation. */ } - const printed = readCfUploadOutput(called.stdout); + const printed = readCfUploadOutput(called); const versionId = uploaded.version_id ?? uploaded.id ?? uploaded.versionId ?? printed.versionId; if (typeof versionId !== 'string' || !/^[0-9a-f]{8}-[0-9a-f-]{27}$/i.test(versionId)) { throw new Error('Cloudflare did not return the uploaded Worker version ID.'); diff --git a/packages/void/test/unit/cf-build-output.test.ts b/packages/void/test/unit/cf-build-output.test.ts index e9d373fff..e6aee09e2 100644 --- a/packages/void/test/unit/cf-build-output.test.ts +++ b/packages/void/test/unit/cf-build-output.test.ts @@ -576,7 +576,10 @@ it( }); expect(built.workers.default.config.manifest?.mainModule).toBe('index.js'); expect(built.workers.default.assetsDir).toBeDefined(); - expect(expectCfDryRun(prepared.directory).stdout).toContain('--dry-run: exiting now.'); + const dryRun = expectCfDryRun(prepared.directory); + // cf 1.0.0-beta.21 and later print upload messages on stderr. + expect(dryRun.stdout).toBe(''); + expect(dryRun.stderr).toContain('--dry-run: exiting now.'); }, ); expect(existsSync(disposed.directory)).toBe(false); diff --git a/packages/void/test/unit/cf-version-runner.test.ts b/packages/void/test/unit/cf-version-runner.test.ts index 66e08ceed..e35f4e7a8 100644 --- a/packages/void/test/unit/cf-version-runner.test.ts +++ b/packages/void/test/unit/cf-version-runner.test.ts @@ -19,6 +19,7 @@ import { type ParsedInputConfig, } from '@cloudflare/config'; import { afterEach, expect, it, vi } from 'vite-plus/test'; +import { cloudflareCommandDiagnostic } from '../../../deploy-cloudflare/src/diagnostics.ts'; import { isVoidSecretOnlyDraft } from '../../../deploy-cloudflare/src/secret-draft.ts'; import { activateCloudflareVersion, @@ -324,10 +325,12 @@ it( capture: true, }); expect(result).toMatchObject({ status: 1, signal: null, error: null }); - expect(result.stdout.replace(/\s+/g, ' ')).toContain( - 'Aborting the upload operation because of conflicts.', + // cf 1.0.0-beta.21 and later print upload messages on stderr. + expect(result.stdout).toBe(''); + expect(cloudflareCommandDiagnostic(result)).toBe( + 'You are about to upload a Worker that was last updated via the script API.\n' + + 'Aborting the upload operation because of conflicts. To override and upload anyway, remove the `--strict` flag', ); - expect(result.stdout.replace(/\s+/g, ' ')).toContain('last updated via the script API'); expect(requests).toEqual([ { method: 'GET', path: '/client/v4/accounts/account-id/workers/services/void-test' }, ]); @@ -338,6 +341,142 @@ it( REAL_CF_TIMEOUT_MS, ); +it( + 'keeps the dashboard config diff out of the pinned cf upload conflict diagnostic', + async () => { + const prepared = await output({ vars: { LOCAL_VALUE: 'local-value-do-not-echo' } }); + const apiBaseUrl = await listen( + createServer((request, response) => { + const path = request.url!.split('?')[0]!; + request.resume(); + response.writeHead(200, { 'Content-Type': 'application/json' }); + response.end( + JSON.stringify({ + success: true, + errors: [], + messages: [], + result: path.endsWith('/services/void-test') + ? { + default_environment: { + environment: 'production', + script: { id: 'void-test', last_deployed_from: 'dash' }, + }, + } + : path.endsWith('/bindings') + ? [{ type: 'plain_text', name: 'REMOTE_VALUE', text: 'remote-value-do-not-echo' }] + : path.endsWith('/environments/production') + ? { script: { compatibility_date: '2026-01-01' } } + : path.endsWith('/schedules') + ? { schedules: [] } + : [], + }), + ); + }), + ); + try { + const result = await pinnedCf(apiBaseUrl)(['workers', 'versions', 'create', '--prebuilt'], { + cwd: prepared.directory, + capture: true, + }); + expect(result).toMatchObject({ status: 1, signal: null, error: null }); + // The diff that explains the conflict shows values from both configurations. + expect(result.stderr).toContain('remote-value-do-not-echo'); + expect(result.stderr).toContain('local-value-do-not-echo'); + expect(cloudflareCommandDiagnostic(result)).toBe( + 'Aborting the upload operation because of conflicts. To override and upload anyway, remove the `--strict` flag', + ); + } finally { + prepared.dispose(); + } + }, + REAL_CF_TIMEOUT_MS, +); + +it.each([false, true])( + 'reads the pinned cf upload result without echoing its binding table (rejected=%s)', + async (rejected) => { + const next = '22222222-2222-4222-8222-222222222222'; + const prepared = await output({ vars: { LOCAL_VALUE: 'local-value-do-not-echo' } }); + const apiBaseUrl = await listen( + createServer((request, response) => { + const path = request.url!.split('?')[0]!; + const upload = request.method === 'POST' && path.endsWith('/scripts/void-test/versions'); + request.resume(); + response.writeHead(upload && rejected ? 400 : 200, { + 'Content-Type': 'application/json', + }); + response.end( + JSON.stringify( + upload && rejected + ? { + success: false, + errors: [{ code: 10021, message: 'Uploaded script has a validation error.' }], + messages: [], + result: null, + } + : { + success: true, + errors: [], + messages: [], + result: upload + ? { id: next, number: 2, metadata: { has_preview: true }, resources: {} } + : path.endsWith('/workers/workers/void-test') + ? { + subdomain: { + enabled: true, + previews_enabled: true, + preview_url_suffix: '-void-test.example.workers.dev', + }, + } + : path.endsWith('/services/void-test') + ? { + default_environment: { + environment: 'production', + script: { id: 'void-test' }, + }, + } + : path.endsWith('/settings') + ? {} + : [], + }, + ), + ); + }), + ); + try { + const runner = createCfVersionRunner({ + output: prepared, + workerName: 'void-test', + runCf: pinnedCf(apiBaseUrl), + verifyResources: async () => ({ status: 0, stdout: '', stderr: '' }), + }); + const result = await runner( + { type: 'versions.upload', workerName: 'void-test' }, + { capture: true }, + ); + // cf prints the binding table, with values, before it uploads. + expect(result.stderr).toContain('local-value-do-not-echo'); + if (rejected) { + expect(result.status).toBe(1); + expect(cloudflareCommandDiagnostic(result)).toBe( + '┌ APIError\n│ [10021] Uploaded script has a validation error. [code: 10021]\n│ 400 Bad Request\n└', + ); + } else { + expect(result).toMatchObject({ + status: 0, + data: { + versionId: next, + previewUrl: `https://${next.slice(0, 8)}-void-test.example.workers.dev`, + }, + }); + } + } finally { + prepared.dispose(); + } + }, + REAL_CF_TIMEOUT_MS, +); + // This exercises multiple fresh cf subprocesses. Windows CI has exceeded 30s // across those startups; bound each child and give the complete protocol a // separate Windows budget, including assertion and cleanup overhead. @@ -2244,10 +2383,11 @@ it.each([ ] as const)('preserves pinned Sandbox image and application lifecycle: %s', async (mode) => { const { prepared, requests, counts, existing, expectedImages, apiBaseUrl } = await containerApi(mode); + // cf 1.0.0-beta.21 and later print the pushed image on stderr. const runCf = vi.fn(() => ({ status: 0, - stdout: 'Pushed image: registry.cloudflare.com/account-id/sandbox:fixture\n', - stderr: '', + stdout: '', + stderr: '│ Pushed image: registry.cloudflare.com/account-id/sandbox:fixture\n', })); const inspect = mode === 'local' diff --git a/packages/void/test/unit/cloudflare-operation-process.test.ts b/packages/void/test/unit/cloudflare-operation-process.test.ts index f80fff61a..cc92d0797 100644 --- a/packages/void/test/unit/cloudflare-operation-process.test.ts +++ b/packages/void/test/unit/cloudflare-operation-process.test.ts @@ -1027,7 +1027,12 @@ const actualSpawnSync=child.spawnSync; child.spawnSync = (binary, args, options) => { if(args.slice(1,4).join(' ') !== 'workers versions create' && args[1] !== 'deploy') return actualSpawnSync(binary,args,options); writeFileSync(${JSON.stringify(join(directory, 'upload-environment.json'))}, JSON.stringify({version:options.env.CLI_VERSION,telemetry:options.env.CF_SEND_TELEMETRY})); - return { status:0, stdout:JSON.stringify({id:'11111111-1111-4111-8111-111111111111'}), stderr:'' }; + return ${ + uploadType === 'worker.deploy' + ? // cf 1.0.0-beta.21 and later print the uploaded version on stderr. + "{ status:0, stdout:'', stderr:'│ Current Version ID: 11111111-1111-4111-8111-111111111111\\n' }" + : "{ status:0, stdout:JSON.stringify({id:'11111111-1111-4111-8111-111111111111'}), stderr:'' }" + }; }; syncBuiltinESMExports();`, ); diff --git a/packages/void/test/unit/platform-installer-errors.test.ts b/packages/void/test/unit/platform-installer-errors.test.ts index 8fcadaeb1..4afcceba4 100644 --- a/packages/void/test/unit/platform-installer-errors.test.ts +++ b/packages/void/test/unit/platform-installer-errors.test.ts @@ -6,57 +6,66 @@ const UPLOAD_CONFLICT = const OUTSIDE_CHANGE_ADVICE = ' This Worker was changed outside Void. Run the same command in a terminal. Void then lists the changes and asks you before it replaces them.'; -it('explains the cf upload conflict after a Workers API change without binding values', () => { - const result = { - status: 1, - stderr: '', - stdout: [ - 'env.PRIVATE_VALUE: "do-not-echo"', - '├ Upload', - '▲ You are about to upload a Worker that was last updated via the script API.', - '│ Edits that have been made via the script API will be overridden by your local code and config.', - `■ ${UPLOAD_CONFLICT}`, - '│', - '◆ Version upload complete', - '', - ].join('\n'), - }; +// cf 1.0.0-beta.21 and later print upload messages on stderr, earlier releases on stdout. +it.each(['stdout', 'stderr'] as const)( + 'explains the cf upload conflict after a Workers API change without binding values (%s)', + (stream) => { + const result = { + status: 1, + stdout: '', + stderr: '', + [stream]: [ + 'env.PRIVATE_VALUE: "do-not-echo"', + '├ Upload', + '▲ You are about to upload a Worker that was last updated via the script API.', + '│ Edits that have been made via the script API will be overridden by your local code and config.', + `■ ${UPLOAD_CONFLICT}`, + '│', + '◆ Version upload complete', + '', + ].join('\n'), + }; - expect(() => assertCleanPlatformWrangler(result, 'upload test-worker')).toThrow( - 'platform: The Cloudflare CLI did not upload test-worker: ' + - 'You are about to upload a Worker that was last updated via the script API.' + - OUTSIDE_CHANGE_ADVICE, - ); - expect(() => assertCleanPlatformWrangler(result, 'upload test-worker')).not.toThrow( - /do-not-echo|--strict|Wrangler/, - ); -}); + expect(() => assertCleanPlatformWrangler(result, 'upload test-worker')).toThrow( + 'platform: The Cloudflare CLI did not upload test-worker: ' + + 'You are about to upload a Worker that was last updated via the script API.' + + OUTSIDE_CHANGE_ADVICE, + ); + expect(() => assertCleanPlatformWrangler(result, 'upload test-worker')).not.toThrow( + /do-not-echo|--strict|Wrangler/, + ); + }, +); -it('explains the cf upload conflict after a dashboard change without its diff', () => { - const result = { - status: 1, - stderr: '', - stdout: [ - '├ Upload', - '▲ The local configuration being used (generated from your local configuration file) differs from the remote configuration of your Worker set via the Cloudflare Dashboard:', - '│ vars: {', - '│ - EMAIL_FROM: "Team "', - '│ }', - '│ Uploading the Worker will override the remote configuration with your local one.', - `■ ${UPLOAD_CONFLICT}`, - '◆ Version upload complete', - ].join('\n'), - }; +it.each(['stdout', 'stderr'] as const)( + 'explains the cf upload conflict after a dashboard change without its diff (%s)', + (stream) => { + const result = { + status: 1, + stdout: '', + stderr: '', + [stream]: [ + '├ Upload', + '▲ The local configuration being used (generated from your local configuration file) differs from the remote configuration of your Worker set via the Cloudflare Dashboard:', + '│ vars: {', + '│ - EMAIL_FROM: "Team "', + '│ }', + '│ Uploading the Worker will override the remote configuration with your local one.', + `■ ${UPLOAD_CONFLICT}`, + '◆ Version upload complete', + ].join('\n'), + }; - expect(() => assertCleanPlatformWrangler(result, 'upload void-team-api')).toThrow( - 'platform: The Cloudflare CLI did not upload void-team-api: ' + - 'The local configuration being used (generated from your local configuration file) differs from the remote configuration of your Worker set via the Cloudflare Dashboard.' + - OUTSIDE_CHANGE_ADVICE, - ); - expect(() => assertCleanPlatformWrangler(result, 'upload void-team-api')).not.toThrow( - /team@example\.com|--strict/, - ); -}); + expect(() => assertCleanPlatformWrangler(result, 'upload void-team-api')).toThrow( + 'platform: The Cloudflare CLI did not upload void-team-api: ' + + 'The local configuration being used (generated from your local configuration file) differs from the remote configuration of your Worker set via the Cloudflare Dashboard.' + + OUTSIDE_CHANGE_ADVICE, + ); + expect(() => assertCleanPlatformWrangler(result, 'upload void-team-api')).not.toThrow( + /team@example\.com|--strict/, + ); + }, +); describe('cf upload conflicts that do not show a change outside Void', () => { const CONFLICT_ADVICE = diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 9b8238a7b..fbb1d6905 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -214,29 +214,29 @@ catalogs: specifier: 0.7.1 version: 0.7.1 '@cloudflare/build-output-utils': - specifier: ^0.9.3 - version: 0.9.3 + specifier: ^0.9.5 + version: 0.9.6 '@cloudflare/codemods': specifier: ^0.5.1 version: 0.5.1 '@cloudflare/config': - specifier: ^0.27.0 - version: 0.27.0 + specifier: ^0.28.1 + version: 0.28.1 '@cloudflare/sandbox': specifier: ^1.0.2 version: 1.0.2 '@cloudflare/vite-plugin': - specifier: ^1.64.0 - version: 1.64.0 + specifier: ^1.66.0 + version: 1.66.0 '@cloudflare/workers-auth': - specifier: ^0.14.1 - version: 0.14.1 + specifier: ^0.15.3 + version: 0.15.3 '@cloudflare/workers-types': specifier: ^5.20261019.1 version: 5.20261019.1 '@cloudflare/workers-utils': - specifier: ^0.47.3 - version: 0.47.3 + specifier: ^0.50.1 + version: 0.50.1 '@electric-sql/pglite': specifier: 0.5.10 version: 0.5.10 @@ -283,8 +283,8 @@ catalogs: specifier: ^1.7.11 version: 1.7.11 cf: - specifier: '>=1.0.0-beta.18 <1.0.0-beta.19' - version: 1.0.0-beta.18 + specifier: '>=1.0.0-beta.24 <1.0.0-beta.25' + version: 1.0.0-beta.24 happy-dom: specifier: ^21.0.4 version: 21.0.4 @@ -295,8 +295,8 @@ catalogs: specifier: ^1.4.3 version: 1.4.3 miniflare: - specifier: ^5.20261012.1-beta - version: 5.20261012.1-beta + specifier: ^5.20261023.1-beta + version: 5.20261023.1-beta nuxt: specifier: ^4.6.2 version: 4.6.2 @@ -355,8 +355,8 @@ catalogs: specifier: 5.0.5 version: 5.0.5 wrangler: - specifier: ^4.151.3 - version: 4.151.3 + specifier: ^4.154.0 + version: 4.156.0 platform: '@cloudflare/workers-types': specifier: ^5.20261019.1 @@ -441,7 +441,7 @@ importers: version: 3.5.44(typescript@7.0.2) wrangler: specifier: 'catalog:' - version: 4.151.3(@cloudflare/workers-types@5.20261019.1)(@types/node@26.6.5) + version: 4.156.0(@cloudflare/workers-types@5.20261019.1)(@types/node@26.6.5) packages/create-void: devDependencies: @@ -602,7 +602,7 @@ importers: version: 1.3.0(@astrojs/compiler-rs@0.5.2)(@types/node@26.6.5)(@vitest/ui@5.0.5)(esbuild@0.28.2)(happy-dom@21.0.4)(jiti@2.7.0)(playwright@1.64.1)(sass-embedded@1.104.1)(sass@1.104.1)(svelte@5.57.2)(terser@5.51.2)(tsx@4.23.15)(typescript@7.0.2)(yaml@2.9.1) wrangler: specifier: 'catalog:' - version: 4.151.3(@cloudflare/workers-types@5.20261019.1)(@types/node@26.6.5) + version: 4.156.0(@cloudflare/workers-types@5.20261019.1)(@types/node@26.6.5) packages/react: dependencies: @@ -695,28 +695,28 @@ importers: dependencies: '@cloudflare/build-output-utils': specifier: 'catalog:' - version: 0.9.3 + version: 0.9.6 '@cloudflare/codemods': specifier: 'catalog:' version: 0.5.1 '@cloudflare/config': specifier: 'catalog:' - version: 0.27.0 + version: 0.28.1 '@cloudflare/sandbox': specifier: 'catalog:' version: 1.0.2 '@cloudflare/vite-plugin': specifier: 'catalog:' - version: 1.64.0(@types/node@26.6.5)(@voidzero-dev/vite-plus-core@1.3.0(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(typescript@7.0.2)(yaml@2.9.1))(wrangler@4.151.3(@cloudflare/workers-types@5.20261019.1)(@types/node@26.6.5)) + version: 1.66.0(@types/node@26.6.5)(@voidzero-dev/vite-plus-core@1.3.0(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(typescript@7.0.2)(yaml@2.9.1))(workerd@1.20261023.1)(wrangler@4.156.0(@cloudflare/workers-types@5.20261019.1)(@types/node@26.6.5)) '@cloudflare/workers-auth': specifier: 'catalog:' - version: 0.14.1(vitest@5.0.5) + version: 0.15.3(vitest@5.0.5) '@cloudflare/workers-types': specifier: 'catalog:' version: 5.20261019.1 '@cloudflare/workers-utils': specifier: 'catalog:' - version: 0.47.3(vitest@5.0.5) + version: 0.50.1(vitest@5.0.5) '@napi-rs/keyring': specifier: 'catalog:' version: 2.1.2 @@ -749,7 +749,7 @@ importers: version: 1.1.0 cf: specifier: 'catalog:' - version: 1.0.0-beta.18(@types/node@26.6.5) + version: 1.0.0-beta.24(@types/node@26.6.5) drizzle-arktype: specifier: ^0.1.3 version: 0.1.3(arktype@2.2.8)(drizzle-orm@0.45.4(@cloudflare/workers-types@5.20261019.1)(@electric-sql/pglite@0.5.10)(@types/better-sqlite3@9.6.0)(@types/pg@8.23.1)(better-sqlite3@13.0.3)(kysely@0.29.7)(mysql2@3.24.6(@types/node@26.6.5))(pg@8.23.1)) @@ -785,10 +785,10 @@ importers: version: 4.1.1 miniflare: specifier: 'catalog:' - version: 5.20261012.1-beta(@types/node@26.6.5) + version: 5.20261023.1-beta(@types/node@26.6.5) minimatch: - specifier: ^10.2.6 - version: 10.2.6 + specifier: ^11.0.3 + version: 11.0.3 mysql2: specifier: ^3.24.6 version: 3.24.6(@types/node@26.6.5) @@ -1022,7 +1022,7 @@ importers: version: 0.31.11 miniflare: specifier: 'catalog:' - version: 5.20261012.1-beta(@types/node@26.6.5) + version: 5.20261023.1-beta(@types/node@26.6.5) typescript: specifier: 'catalog:' version: 7.0.2 @@ -1261,13 +1261,13 @@ importers: version: link:../../packages/void wrangler: specifier: 'catalog:' - version: 4.151.3(@cloudflare/workers-types@5.20261019.1)(@types/node@26.6.5) + version: 4.156.0(@cloudflare/workers-types@5.20261019.1)(@types/node@26.6.5) playground/astro: dependencies: '@astrojs/cloudflare': specifier: 'catalog:' - version: 14.4.0(@types/node@26.6.5)(astro@7.4.0(@types/node@26.6.5)(aws4fetch@1.0.20)(db0@0.3.4(@electric-sql/pglite@0.5.10)(better-sqlite3@13.0.3)(drizzle-orm@0.45.4(@cloudflare/workers-types@5.20261019.1)(@electric-sql/pglite@0.5.10)(@types/better-sqlite3@9.6.0)(@types/pg@8.23.1)(better-sqlite3@13.0.3)(kysely@0.29.7)(mysql2@3.24.6(@types/node@26.6.5))(pg@8.23.1))(mysql2@3.24.6(@types/node@26.6.5)))(esbuild@0.28.2)(ioredis@5.11.1(supports-color@10.2.2))(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(typescript@7.0.2)(yaml@2.9.1))(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(typescript@7.0.2)(wrangler@4.151.3(@cloudflare/workers-types@5.20261019.1)(@types/node@26.6.5))(yaml@2.9.1) + version: 14.4.0(@types/node@26.6.5)(astro@7.4.0(@types/node@26.6.5)(aws4fetch@1.0.20)(db0@0.3.4(@electric-sql/pglite@0.5.10)(better-sqlite3@13.0.3)(drizzle-orm@0.45.4(@cloudflare/workers-types@5.20261019.1)(@electric-sql/pglite@0.5.10)(@types/better-sqlite3@9.6.0)(@types/pg@8.23.1)(better-sqlite3@13.0.3)(kysely@0.29.7)(mysql2@3.24.6(@types/node@26.6.5))(pg@8.23.1))(mysql2@3.24.6(@types/node@26.6.5)))(esbuild@0.28.2)(ioredis@5.11.1(supports-color@10.2.2))(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(typescript@7.0.2)(yaml@2.9.1))(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(typescript@7.0.2)(wrangler@4.156.0(@cloudflare/workers-types@5.20261019.1)(@types/node@26.6.5))(yaml@2.9.1) astro: specifier: 'catalog:' version: 7.4.0(@types/node@26.6.5)(aws4fetch@1.0.20)(db0@0.3.4(@electric-sql/pglite@0.5.10)(better-sqlite3@13.0.3)(drizzle-orm@0.45.4(@cloudflare/workers-types@5.20261019.1)(@electric-sql/pglite@0.5.10)(@types/better-sqlite3@9.6.0)(@types/pg@8.23.1)(better-sqlite3@13.0.3)(kysely@0.29.7)(mysql2@3.24.6(@types/node@26.6.5))(pg@8.23.1))(mysql2@3.24.6(@types/node@26.6.5)))(esbuild@0.28.2)(ioredis@5.11.1(supports-color@10.2.2))(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(typescript@7.0.2)(yaml@2.9.1) @@ -1518,7 +1518,7 @@ importers: version: link:../../packages/void wrangler: specifier: 'catalog:' - version: 4.151.3(@cloudflare/workers-types@5.20261019.1)(@types/node@26.6.5) + version: 4.156.0(@cloudflare/workers-types@5.20261019.1)(@types/node@26.6.5) playground/pg-api-test: devDependencies: @@ -1793,7 +1793,7 @@ importers: dependencies: '@sveltejs/adapter-cloudflare': specifier: 'catalog:' - version: 8.0.1(@sveltejs/kit@3.1.0(@sveltejs/vite-plugin-svelte@7.3.1(@voidzero-dev/vite-plus-core@1.3.0(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(typescript@6.0.3)(yaml@2.9.1))(svelte@5.57.2))(@voidzero-dev/vite-plus-core@1.3.0(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(typescript@6.0.3)(yaml@2.9.1))(svelte@5.57.2)(typescript@6.0.3))(wrangler@4.151.3(@cloudflare/workers-types@5.20261019.1)(@types/node@26.6.5)) + version: 8.0.1(@sveltejs/kit@3.1.0(@sveltejs/vite-plugin-svelte@7.3.1(@voidzero-dev/vite-plus-core@1.3.0(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(typescript@6.0.3)(yaml@2.9.1))(svelte@5.57.2))(@voidzero-dev/vite-plus-core@1.3.0(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(typescript@6.0.3)(yaml@2.9.1))(svelte@5.57.2)(typescript@6.0.3))(wrangler@4.156.0(@cloudflare/workers-types@5.20261019.1)(@types/node@26.6.5)) '@sveltejs/kit': specifier: 'catalog:' version: 3.1.0(@sveltejs/vite-plugin-svelte@7.3.1(@voidzero-dev/vite-plus-core@1.3.0(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(typescript@6.0.3)(yaml@2.9.1))(svelte@5.57.2))(@voidzero-dev/vite-plus-core@1.3.0(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(typescript@6.0.3)(yaml@2.9.1))(svelte@5.57.2)(typescript@6.0.3) @@ -1818,7 +1818,7 @@ importers: version: link:../../packages/void wrangler: specifier: 'catalog:' - version: 4.151.3(@cloudflare/workers-types@5.20261019.1)(@types/node@26.6.5) + version: 4.156.0(@cloudflare/workers-types@5.20261019.1)(@types/node@26.6.5) playground/tanstack-start: dependencies: @@ -2016,7 +2016,7 @@ importers: devDependencies: '@sveltejs/adapter-cloudflare': specifier: 7.2.9 - version: 7.2.9(@sveltejs/kit@2.70.3(@sveltejs/vite-plugin-svelte@7.3.1(@voidzero-dev/vite-plus-core@1.3.0(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(typescript@6.0.3)(yaml@2.9.1))(svelte@5.57.2))(@voidzero-dev/vite-plus-core@1.3.0(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(typescript@6.0.3)(yaml@2.9.1))(svelte@5.57.2)(typescript@6.0.3))(wrangler@4.151.3(@cloudflare/workers-types@5.20261019.1)(@types/node@26.6.5)) + version: 7.2.9(@sveltejs/kit@2.70.3(@sveltejs/vite-plugin-svelte@7.3.1(@voidzero-dev/vite-plus-core@1.3.0(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(typescript@6.0.3)(yaml@2.9.1))(svelte@5.57.2))(@voidzero-dev/vite-plus-core@1.3.0(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(typescript@6.0.3)(yaml@2.9.1))(svelte@5.57.2)(typescript@6.0.3))(wrangler@4.156.0(@cloudflare/workers-types@5.20261019.1)(@types/node@26.6.5)) '@sveltejs/kit': specifier: 2.70.3 version: 2.70.3(@sveltejs/vite-plugin-svelte@7.3.1(@voidzero-dev/vite-plus-core@1.3.0(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(typescript@6.0.3)(yaml@2.9.1))(svelte@5.57.2))(@voidzero-dev/vite-plus-core@1.3.0(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(typescript@6.0.3)(yaml@2.9.1))(svelte@5.57.2)(typescript@6.0.3) @@ -2040,7 +2040,7 @@ importers: version: link:../../../packages/void wrangler: specifier: 'catalog:' - version: 4.151.3(@cloudflare/workers-types@5.20261019.1)(@types/node@26.6.5) + version: 4.156.0(@cloudflare/workers-types@5.20261019.1)(@types/node@26.6.5) packages: @@ -2717,15 +2717,21 @@ packages: resolution: {integrity: sha512-dlT1m5e/0yUL0kRNcQn7yGLVThkgbB0Ga/1AmfDDC/8ik6AIiSf2QLQO2zPYvefsHP0aFgxO93cVLCCfDp7kzQ==} engines: {node: '>= 20.12.0'} - '@cloudflare/build-output-utils@0.9.3': - resolution: {integrity: sha512-0MgvIq6UxbRWLwB2QJU7qjLqpPkfygOebN3UiENhdp+z6zpRKrNnwkms2ynadmxCOh3sL2v+SI0/pNXxgXdteA==} + '@cloudflare/build-output-utils@0.9.5': + resolution: {integrity: sha512-/OYHkTHFTqvImsY68psI+mhjNRE4Xcsm/oUqZzFY81KufBVfeYWZGYrhsDnwarKw7cEJO/htFF/dOZtoMgWajg==} + + '@cloudflare/build-output-utils@0.9.6': + resolution: {integrity: sha512-JjNSJPctyGbQn4XDXzsqy1/M/xdNAh3XRPj0c/4KY1BYCUWA/ejcrnj3nuTHyoN8Zl+RmVIThIj+am29jTV+kQ==} '@cloudflare/codemods@0.5.1': resolution: {integrity: sha512-8pAR4f6XhcA+194Oov82bDirSC/k8g0IXoIl+1ej3d7PUS3CPvlM2E4uQSzusiUbSS+4vTLP2RZA16vWuKIPAQ==} hasBin: true - '@cloudflare/config@0.27.0': - resolution: {integrity: sha512-wNnL0z4lj5Gm2fze5qXTOvRPbUOi4jlMmwPk7ArCUakI5oVxgjfl3Rhnfd/Mmzo3g86x/ofH75yPIhsa5msqdQ==} + '@cloudflare/config@0.28.1': + resolution: {integrity: sha512-pQS0jJmk2grEK2XdkvJxyk8y8W607D4daOrEdv+iyqSslSLTvH7lChF/3fpCQIy//3rBLUnzanZ8rgyekbh0/g==} + + '@cloudflare/config@0.29.0': + resolution: {integrity: sha512-0sD73G6xRdz6/9DXNcAuLv6VbnNiWA09zo7VwhPyaa3ysIGvLMXJR5G19r3+iG5ZIB9ErGMwqgprVOVaYKsIpw==} '@cloudflare/containers@0.3.7': resolution: {integrity: sha512-DM9dm3FnIBSyiSJ1FLavKwl/lk3oAmTaynCzZQ9pZR0ncRPquSxkxd8Nu2MFILxmDDsPkxKsSNEh9mHHMty4Fw==} @@ -2738,8 +2744,8 @@ packages: resolution: {integrity: sha512-jxQYkj8dSIzc0cD6cMMNdOc1UVjqSqu8BZdor5s8cGjW2I8BjODt/kWPVdY+u9zj3ms75Q5qaZgnxUad83+eAg==} engines: {node: '>=22.0.0'} - '@cloudflare/runtime-types@0.1.12': - resolution: {integrity: sha512-eYF5teHQ+Jss4sbSVINM5tNPHxo/kJ2gKcMs7omyy7gO9PEkgUbGPZCYl06SxbBWTcJFF2vrX4epB775QTE4BQ==} + '@cloudflare/runtime-types@0.1.16': + resolution: {integrity: sha512-znHsvvjWm7Q0uydqdZqZAFfoLj9CTYjRyeUVF3j8gf2SVAkZvb56rOXiLVinueCcCcimdzDleudJ43svdLLzqg==} '@cloudflare/sandbox@1.0.2': resolution: {integrity: sha512-JPPASKBQ5PE1XLy18zzljh3oIyDleu8lK3jW/HaSGq+eh9aJMl5zwAgobuP7I2FLuRMlqA18te5MIPEBF56jlg==} @@ -2760,6 +2766,12 @@ packages: vite: ^6.1.0 || ^7.0.0 || ^8.0.0 wrangler: ^4.151.0 + '@cloudflare/vite-plugin@1.66.0': + resolution: {integrity: sha512-hlXPbS6SWXHCJVztghkg+iW7dQNrx/wuy00SOLB6V2Ho78agt7RZdzb3iQuksl4XcFrp7cr/4WX4myBTiqitNw==} + peerDependencies: + vite: ^6.1.0 || ^7.0.0 || ^8.0.0 + wrangler: ^4.154.0 + '@cloudflare/workerd-darwin-64@1.20261012.1': resolution: {integrity: sha512-dkTL9aY3V4D40b+jBpGPCistWUPFQ/M61wlWi6i1o8MvHFFgEw7EQkcaYEv6Yd3bkPDD/3TFT4hRsMb2xVZSwQ==} engines: {node: '>=16'} @@ -2772,6 +2784,12 @@ packages: cpu: [x64] os: [darwin] + '@cloudflare/workerd-darwin-64@1.20261023.1': + resolution: {integrity: sha512-lsEx0i7nR0PNG/erUFFHmQmiidEhLfDE5uQmAL9421/y4/ycuxDDOSaxu3VGGYFFPK5sduyUeMmjIlX4CwOBFg==} + engines: {node: '>=16'} + cpu: [x64] + os: [darwin] + '@cloudflare/workerd-darwin-arm64@1.20261012.1': resolution: {integrity: sha512-2/nVGcKXjNNI+DhxKSepTKvFng9H7aN2WXv6Zu67iqgI6JrxypNt5kTPv4ZHosxrcfyKMci/2RfN7GIrN0BitQ==} engines: {node: '>=16'} @@ -2784,6 +2802,12 @@ packages: cpu: [arm64] os: [darwin] + '@cloudflare/workerd-darwin-arm64@1.20261023.1': + resolution: {integrity: sha512-5e79fHgabdDD8EgmjOhJ1S+xMsf6DbC7fL7IgTBizMnzOp0P2isDn7pYmUxI9AJZE9FVQ4RUilH/I36YNg+GQQ==} + engines: {node: '>=16'} + cpu: [arm64] + os: [darwin] + '@cloudflare/workerd-linux-64@1.20261012.1': resolution: {integrity: sha512-uMe7ONHnLxStD1Ye0YFHBO36uj4cStv5P53rW+5GVWXFT8BRjqVixlH0IqCAHe1Pmcwyd1+7fVoGde89MZSCJg==} engines: {node: '>=16'} @@ -2796,6 +2820,12 @@ packages: cpu: [x64] os: [linux] + '@cloudflare/workerd-linux-64@1.20261023.1': + resolution: {integrity: sha512-VHQ6jKFSihjR2+x1buby8XTdBLLJztVnYiB7OLOTYO8aDXB+c1Rd2410PdgFuFYc4AgFEk6PCJLyCLL5L1KBnw==} + engines: {node: '>=16'} + cpu: [x64] + os: [linux] + '@cloudflare/workerd-linux-arm64@1.20261012.1': resolution: {integrity: sha512-I0VMdcXk7ygG5vYDce0ePTBFdnBXC0i9WiBY5mWiv0iTinbfea6/rHqSQ7B1UMpjgrYVs9E0m4bZ9ufsk5GCFA==} engines: {node: '>=16'} @@ -2808,6 +2838,12 @@ packages: cpu: [arm64] os: [linux] + '@cloudflare/workerd-linux-arm64@1.20261023.1': + resolution: {integrity: sha512-ilpRHzfDN8YFRM5CLRKuFw40x/LJBS89yVdhdQmxehlVDuBqjKpJB++zPFbTgKRRFaNupgnXc8RHktXAIhgCmQ==} + engines: {node: '>=16'} + cpu: [arm64] + os: [linux] + '@cloudflare/workerd-windows-64@1.20261012.1': resolution: {integrity: sha512-c5hQvNx574UEoknaCFvMa/NdLrrYiALNbe6sx1okW8uOiRYWxrFuA8WpXFnBJ5XJypm0TEAHYaUTGv3rRLpY7Q==} engines: {node: '>=16'} @@ -2820,8 +2856,14 @@ packages: cpu: [x64] os: [win32] - '@cloudflare/workers-auth@0.14.1': - resolution: {integrity: sha512-JghUxus3O6IJW8UcghCUHBvVSVEiGVQ2ESQ2GJw/EZKX8K/rP6vwzq2VT59bgWY8w3epdzYwlm3INrzFJQCACQ==} + '@cloudflare/workerd-windows-64@1.20261023.1': + resolution: {integrity: sha512-279WLVjNsMycAwr0EZNiNEf0l2SY6NUtsN80NwZzbTHzakmiN+WSx4w38muxPm+PAU0oSPPAPXKVD+H6Hya8xw==} + engines: {node: '>=16'} + cpu: [x64] + os: [win32] + + '@cloudflare/workers-auth@0.15.3': + resolution: {integrity: sha512-ZXTuSNw7MSrsyrdcVMyYPrM95f2jDljs68RiDOvcyQlZRB5h+7Nf28c3Q7TiT9gU83yjwQbWX0g+A/xsbaJcEA==} peerDependencies: msw: 2.14.6 vitest: 5.0.5 @@ -2837,8 +2879,8 @@ packages: '@cloudflare/workers-types@5.20261019.1': resolution: {integrity: sha512-llvvy7WBVhK+OfykyBkG9A7OgsGvgwHSNyU40XGVkiy/xVFy0t/xflyhEBHT+U59yQECZQbmcZsJtqCNnLpIRg==} - '@cloudflare/workers-utils@0.47.3': - resolution: {integrity: sha512-Eez8j60Iglt7Yyca+vsGy5HEX0+DynkW4mNG7YjLePezh+J9OOG18XZFeQsZh6R9R27/fL6jcNEzW5SZGEiHCQ==} + '@cloudflare/workers-utils@0.50.1': + resolution: {integrity: sha512-b2sKwfyafHkXNp6lfsG7ZPKR5XQqI4i2qqXP5YzoiZV559I4kI+Dq0hXoj2jeq2Cxr88//IWDv0eKEZGN9iVSw==} peerDependencies: vitest: 5.0.5 peerDependenciesMeta: @@ -3393,6 +3435,9 @@ packages: resolution: {integrity: sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==} engines: {node: '>=18.0.0'} + '@isaacs/nonrecursive-glob-match@1.0.3': + resolution: {integrity: sha512-SI7kyKHq4XXDRozw+r9GlRZkia1ZkFrpLW98r2IC2Bpr8YkFGE3fvjzmxCG0x78A++69HmDNrDvSMYBZmHGpKA==} + '@jridgewell/gen-mapping@0.3.13': resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==} @@ -6547,9 +6592,9 @@ packages: ccount@2.0.1: resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} - cf@1.0.0-beta.18: - resolution: {integrity: sha512-SG9NqB6xEZf/WZm6+E2v0OIY5JA0b9DUgl1VOOlF0D5Y+Nk5PyhHonJOd6K2/g6f261h+Z0FwTEK69c9bfIq4g==} - engines: {node: '>=22'} + cf@1.0.0-beta.24: + resolution: {integrity: sha512-33uVpEZTtHjEQEpBKP6Y38hq/kCG0eNdVS5H7ojY8JVX8BwWo3ywKcif4lWc6K9IgognY1AhsEWpDAeL6RadRQ==} + engines: {node: ^22.23.0 || ^24.22.0 || ^26.12.0} hasBin: true chai@6.3.0: @@ -8171,18 +8216,30 @@ packages: resolution: {integrity: sha512-Cjrs+vHHQ7krLO4HYELYpYBJBuMhcnNZD/Z5z/UcQSnFqWSQY3DhtTCFalXgI1/yO1iK+YrRKK8EYkumrEopxg==} engines: {node: '>=22.0.0'} - miniflare@5.20261012.1-beta: - resolution: {integrity: sha512-8Canhy6g9+vAhqMc0o80YphqYIwpiA3aAp8aX+uDXU7J/qbUeoZzcII9c2V1P4uT/eHD4SB93qet1o1bRY3BuQ==} - engines: {node: '>=22.0.0'} - miniflare@5.20261019.1-beta: resolution: {integrity: sha512-1n7MN2UqZnPniyYAqNuV1YEAaja66ozKGVCc5ZTmYQhTubnoAwGLccwb+ZWYLOajuw3pOaJ70u//bZMuURlRew==} engines: {node: '>=22.0.0'} + miniflare@5.20261023.0-beta: + resolution: {integrity: sha512-SHY8A98gCvmrnBLqABHRTSh3duAL1z+tHPRZu/tqxHFqVARrZ4oQis/ALYwp3XvzHvs6B/ff/CdcCafqP+cOFA==} + engines: {node: '>=22.0.0'} + + miniflare@5.20261023.1-beta: + resolution: {integrity: sha512-hgm1AJhwC6W+iaRhvMnfs7bPOsxjKa8LXTFR2WVPA5qA9KhpyBd2LddmT+9M9tm65VZ8YWkwQGvB+cKbqJoKeA==} + engines: {node: '>=22.0.0'} + + miniflare@5.20261023.3-beta: + resolution: {integrity: sha512-thdXzlktu5GE1o/BlmMAPeJ0Cu6Tu5LpMbRlyfRrpVvMRrhd6p52TMqcITCZZLVzt1UO92VGBkLDhLOpryUAyQ==} + engines: {node: '>=22.0.0'} + minimatch@10.2.6: resolution: {integrity: sha512-vpLQEs+VLCr1nU0BXS07maYoFwlDAH0gngQuuttxIwutDFEMHq2blX+8vpgxDdK3J1PwjCJiep77OitTZ4Ll1A==} engines: {node: 18 || 20 || >=22} + minimatch@11.0.3: + resolution: {integrity: sha512-iny/40PEGkNJQ5/Pv6z3nm6FbRAby32GeZRjCUJk2WnNDbgPSTcdI+DDvLqsgBdD4cD5sMtMheqPPnehCCa8Nw==} + engines: {node: 18 || 20 || >=22} + minimatch@5.1.9: resolution: {integrity: sha512-7o1wEA2RyMP7Iu7GNba9vc0RWWGACJOCZBJX2GJWip0ikV+wcOsgVuY9uE8CPiyQhkGFSlhuSkZPavN7u1c2Fw==} engines: {node: '>=10'} @@ -9569,6 +9626,10 @@ packages: resolution: {integrity: sha512-RYONW2MeafgYlkVOKYKkA/Ag7BmXqgIWCa8t1m0JcxrQg9pI9lEqRhAOruOBCbAohOa/gkCF+iPi9hrgvTzu6Q==} engines: {node: '>=20.18.1'} + undici@7.30.1: + resolution: {integrity: sha512-03KrMbjIFDWQR5RNPrSw3bd1r12JpyFQl9/yxjUbJtqkjmllqC5lFjZh6ujeuJCKr8EOQvRW872Oy/az+nLYxg==} + engines: {node: '>=20.18.1'} + undici@8.12.2: resolution: {integrity: sha512-XtuDWVdqTLr3NAxm2ly9/hU6kUsJOgGh1RASzMBbsw6aWCOaQzHdW+QQDfdERjfJ2V5vL5pRPa4RetO9UfivDg==} engines: {node: '>=22.19.0'} @@ -10090,6 +10151,11 @@ packages: engines: {node: '>=16'} hasBin: true + workerd@1.20261023.1: + resolution: {integrity: sha512-NeofJFyaYNpqKpFRJW3ApuonaerPd6/JWlfTtLDYf2A6ygqrDEFnYgEXmc0hhOxqnJsSM+kXJN6VebPojzRrsg==} + engines: {node: '>=16'} + hasBin: true + worktop@0.8.0-next.18: resolution: {integrity: sha512-+TvsA6VAVoMC3XDKR5MoC/qlLqDixEfOBysDEKnPIPou/NvoPWCAuXHXMsswwlvmEuvX56lQjvELLyLuzTKvRw==} engines: {node: '>=12'} @@ -10104,6 +10170,16 @@ packages: '@cloudflare/workers-types': optional: true + wrangler@4.156.0: + resolution: {integrity: sha512-kVLAShuLiNgE3jcrmXcymDf/iPKDPrSxACe5ueugW/33HeNB9E9CkKYchudCeBwgmsnl4k+1zt4NO7vqb/fRuQ==} + engines: {node: '>=22.0.0'} + hasBin: true + peerDependencies: + '@cloudflare/workers-types': ^5.20261023.1 + peerDependenciesMeta: + '@cloudflare/workers-types': + optional: true + wrap-ansi@10.0.2: resolution: {integrity: sha512-6OLRNZqRntVGBm26ghZ5eZhCuWWyOkRCSn8XsOIuq5stpCE/tjLbdozd93naILZig0lmD8ANfRwnhn0DLeXGlg==} engines: {node: '>=20'} @@ -10228,8 +10304,8 @@ packages: peerDependencies: zod: ^3.25.0 || ^4.0.0 - zod@4.6.5: - resolution: {integrity: sha512-v5l/aFXZQeai4awLbOpSoHecE9UiMrnfx75tEXLjNonXVARxQ5mOeipTjROUchszUNCqnE+hqAMujRsRHsut2Q==} + zod@4.6.6: + resolution: {integrity: sha512-4UmzQUF5fxvfcYHlbjBmejU+w+hbDnWFx4aS8kBx7nPBHcO2SqPbpAG8snbdg+Xse4pRefR98hgjFgIMCI/UhA==} zod@4.6.7: resolution: {integrity: sha512-g8W2D2kU6a8untc053fX1uVBKzM7yqAxW/3zwk83+6RyF2+SKOuV+c0wBDhUwzV1PaGapmZH+rmcUzPf+3CGwg==} @@ -10537,15 +10613,15 @@ snapshots: '@ark/util@0.56.7': {} - '@astrojs/cloudflare@14.4.0(@types/node@26.6.5)(astro@7.4.0(@types/node@26.6.5)(aws4fetch@1.0.20)(db0@0.3.4(@electric-sql/pglite@0.5.10)(better-sqlite3@13.0.3)(drizzle-orm@0.45.4(@cloudflare/workers-types@5.20261019.1)(@electric-sql/pglite@0.5.10)(@types/better-sqlite3@9.6.0)(@types/pg@8.23.1)(better-sqlite3@13.0.3)(kysely@0.29.7)(mysql2@3.24.6(@types/node@26.6.5))(pg@8.23.1))(mysql2@3.24.6(@types/node@26.6.5)))(esbuild@0.28.2)(ioredis@5.11.1(supports-color@10.2.2))(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(typescript@7.0.2)(yaml@2.9.1))(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(typescript@7.0.2)(wrangler@4.151.3(@cloudflare/workers-types@5.20261019.1)(@types/node@26.6.5))(yaml@2.9.1)': + '@astrojs/cloudflare@14.4.0(@types/node@26.6.5)(astro@7.4.0(@types/node@26.6.5)(aws4fetch@1.0.20)(db0@0.3.4(@electric-sql/pglite@0.5.10)(better-sqlite3@13.0.3)(drizzle-orm@0.45.4(@cloudflare/workers-types@5.20261019.1)(@electric-sql/pglite@0.5.10)(@types/better-sqlite3@9.6.0)(@types/pg@8.23.1)(better-sqlite3@13.0.3)(kysely@0.29.7)(mysql2@3.24.6(@types/node@26.6.5))(pg@8.23.1))(mysql2@3.24.6(@types/node@26.6.5)))(esbuild@0.28.2)(ioredis@5.11.1(supports-color@10.2.2))(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(typescript@7.0.2)(yaml@2.9.1))(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(typescript@7.0.2)(wrangler@4.156.0(@cloudflare/workers-types@5.20261019.1)(@types/node@26.6.5))(yaml@2.9.1)': dependencies: '@astrojs/internal-helpers': 0.13.0 '@astrojs/underscore-redirects': 1.0.4 - '@cloudflare/vite-plugin': 1.64.0(@types/node@26.6.5)(@voidzero-dev/vite-plus-core@1.3.0(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(typescript@7.0.2)(yaml@2.9.1))(wrangler@4.151.3(@cloudflare/workers-types@5.20261019.1)(@types/node@26.6.5)) + '@cloudflare/vite-plugin': 1.64.0(@types/node@26.6.5)(@voidzero-dev/vite-plus-core@1.3.0(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(typescript@7.0.2)(yaml@2.9.1))(wrangler@4.156.0(@cloudflare/workers-types@5.20261019.1)(@types/node@26.6.5)) astro: 7.4.0(@types/node@26.6.5)(aws4fetch@1.0.20)(db0@0.3.4(@electric-sql/pglite@0.5.10)(better-sqlite3@13.0.3)(drizzle-orm@0.45.4(@cloudflare/workers-types@5.20261019.1)(@electric-sql/pglite@0.5.10)(@types/better-sqlite3@9.6.0)(@types/pg@8.23.1)(better-sqlite3@13.0.3)(kysely@0.29.7)(mysql2@3.24.6(@types/node@26.6.5))(pg@8.23.1))(mysql2@3.24.6(@types/node@26.6.5)))(esbuild@0.28.2)(ioredis@5.11.1(supports-color@10.2.2))(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(typescript@7.0.2)(yaml@2.9.1) piccolore: 0.1.3 vite: '@voidzero-dev/vite-plus-core@1.3.0(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(typescript@7.0.2)(yaml@2.9.1)' - wrangler: 4.151.3(@cloudflare/workers-types@5.20261019.1)(@types/node@26.6.5) + wrangler: 4.156.0(@cloudflare/workers-types@5.20261019.1)(@types/node@26.6.5) transitivePeerDependencies: - '@arethetypeswrong/core' - '@types/node' @@ -11056,15 +11132,23 @@ snapshots: fast-wrap-ansi: 0.2.2 sisteransi: 1.0.5 - '@cloudflare/build-output-utils@0.9.3': + '@cloudflare/build-output-utils@0.9.5': + dependencies: + '@cloudflare/config': 0.28.1 + + '@cloudflare/build-output-utils@0.9.6': dependencies: - '@cloudflare/config': 0.27.0 + '@cloudflare/config': 0.29.0 '@cloudflare/codemods@0.5.1': {} - '@cloudflare/config@0.27.0': + '@cloudflare/config@0.28.1': dependencies: - zod: 4.6.5 + zod: 4.6.6 + + '@cloudflare/config@0.29.0': + dependencies: + zod: 4.6.6 '@cloudflare/containers@0.3.7': {} @@ -11072,10 +11156,10 @@ snapshots: '@cloudflare/kv-asset-handler@0.5.0': {} - '@cloudflare/runtime-types@0.1.12(@types/node@26.6.5)': + '@cloudflare/runtime-types@0.1.16(@types/node@26.6.5)': dependencies: - miniflare: 5.20261012.1-beta(@types/node@26.6.5) - workerd: 1.20261012.1 + miniflare: 5.20261023.0-beta(@types/node@26.6.5) + workerd: 1.20261023.1 transitivePeerDependencies: - '@types/node' - bufferutil @@ -11098,54 +11182,89 @@ snapshots: optionalDependencies: workerd: 1.20261019.1 - '@cloudflare/vite-plugin@1.64.0(@types/node@26.6.5)(@voidzero-dev/vite-plus-core@1.3.0(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(typescript@7.0.2)(yaml@2.9.1))(wrangler@4.151.3(@cloudflare/workers-types@5.20261019.1)(@types/node@26.6.5))': + '@cloudflare/unenv-preset@2.16.2(unenv@2.0.0-rc.24)(workerd@1.20261023.1)': + dependencies: + unenv: 2.0.0-rc.24 + optionalDependencies: + workerd: 1.20261023.1 + + '@cloudflare/vite-plugin@1.64.0(@types/node@26.6.5)(@voidzero-dev/vite-plus-core@1.3.0(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(typescript@7.0.2)(yaml@2.9.1))(wrangler@4.156.0(@cloudflare/workers-types@5.20261019.1)(@types/node@26.6.5))': dependencies: '@cloudflare/unenv-preset': 2.16.2(unenv@2.0.0-rc.24)(workerd@1.20261012.1) miniflare: 5.20261012.0-beta(@types/node@26.6.5) unenv: 2.0.0-rc.24 vite: '@voidzero-dev/vite-plus-core@1.3.0(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(typescript@7.0.2)(yaml@2.9.1)' workerd: 1.20261012.1 - wrangler: 4.151.3(@cloudflare/workers-types@5.20261019.1)(@types/node@26.6.5) + wrangler: 4.156.0(@cloudflare/workers-types@5.20261019.1)(@types/node@26.6.5) ws: 8.21.0 transitivePeerDependencies: - '@types/node' - bufferutil - utf-8-validate + '@cloudflare/vite-plugin@1.66.0(@types/node@26.6.5)(@voidzero-dev/vite-plus-core@1.3.0(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(typescript@7.0.2)(yaml@2.9.1))(workerd@1.20261023.1)(wrangler@4.156.0(@cloudflare/workers-types@5.20261019.1)(@types/node@26.6.5))': + dependencies: + '@cloudflare/unenv-preset': 2.16.2(unenv@2.0.0-rc.24)(workerd@1.20261023.1) + miniflare: 5.20261023.1-beta(@types/node@26.6.5) + unenv: 2.0.0-rc.24 + vite: '@voidzero-dev/vite-plus-core@1.3.0(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(typescript@7.0.2)(yaml@2.9.1)' + wrangler: 4.156.0(@cloudflare/workers-types@5.20261019.1)(@types/node@26.6.5) + ws: 8.22.0 + transitivePeerDependencies: + - '@types/node' + - bufferutil + - utf-8-validate + - workerd + '@cloudflare/workerd-darwin-64@1.20261012.1': optional: true '@cloudflare/workerd-darwin-64@1.20261019.1': optional: true + '@cloudflare/workerd-darwin-64@1.20261023.1': + optional: true + '@cloudflare/workerd-darwin-arm64@1.20261012.1': optional: true '@cloudflare/workerd-darwin-arm64@1.20261019.1': optional: true + '@cloudflare/workerd-darwin-arm64@1.20261023.1': + optional: true + '@cloudflare/workerd-linux-64@1.20261012.1': optional: true '@cloudflare/workerd-linux-64@1.20261019.1': optional: true + '@cloudflare/workerd-linux-64@1.20261023.1': + optional: true + '@cloudflare/workerd-linux-arm64@1.20261012.1': optional: true '@cloudflare/workerd-linux-arm64@1.20261019.1': optional: true + '@cloudflare/workerd-linux-arm64@1.20261023.1': + optional: true + '@cloudflare/workerd-windows-64@1.20261012.1': optional: true '@cloudflare/workerd-windows-64@1.20261019.1': optional: true - '@cloudflare/workers-auth@0.14.1(vitest@5.0.5)': + '@cloudflare/workerd-windows-64@1.20261023.1': + optional: true + + '@cloudflare/workers-auth@0.15.3(vitest@5.0.5)': dependencies: - '@cloudflare/workers-utils': 0.47.3(vitest@5.0.5) - undici: 7.29.1 + '@cloudflare/workers-utils': 0.50.1(vitest@5.0.5) + undici: 7.30.1 optionalDependencies: vitest: 5.0.5(@types/node@26.6.5)(@vitest/browser-preview@5.0.5)(@vitest/ui@5.0.5)(@voidzero-dev/vite-plus-core@1.3.0(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(typescript@7.0.2)(yaml@2.9.1))(happy-dom@21.0.4) @@ -11153,11 +11272,11 @@ snapshots: '@cloudflare/workers-types@5.20261019.1': {} - '@cloudflare/workers-utils@0.47.3(vitest@5.0.5)': + '@cloudflare/workers-utils@0.50.1(vitest@5.0.5)': dependencies: chalk: 5.3.0 dotenv: 16.3.1 - undici: 7.29.1 + undici: 7.30.1 optionalDependencies: vitest: 5.0.5(@types/node@26.6.5)(@vitest/browser-preview@5.0.5)(@vitest/ui@5.0.5)(@voidzero-dev/vite-plus-core@1.3.0(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(typescript@7.0.2)(yaml@2.9.1))(happy-dom@21.0.4) @@ -11600,6 +11719,8 @@ snapshots: dependencies: minipass: 7.1.3 + '@isaacs/nonrecursive-glob-match@1.0.3': {} + '@jridgewell/gen-mapping@0.3.13': dependencies: '@jridgewell/sourcemap-codec': 1.6.0 @@ -12961,19 +13082,19 @@ snapshots: dependencies: acorn: 8.19.0 - '@sveltejs/adapter-cloudflare@7.2.9(@sveltejs/kit@2.70.3(@sveltejs/vite-plugin-svelte@7.3.1(@voidzero-dev/vite-plus-core@1.3.0(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(typescript@6.0.3)(yaml@2.9.1))(svelte@5.57.2))(@voidzero-dev/vite-plus-core@1.3.0(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(typescript@6.0.3)(yaml@2.9.1))(svelte@5.57.2)(typescript@6.0.3))(wrangler@4.151.3(@cloudflare/workers-types@5.20261019.1)(@types/node@26.6.5))': + '@sveltejs/adapter-cloudflare@7.2.9(@sveltejs/kit@2.70.3(@sveltejs/vite-plugin-svelte@7.3.1(@voidzero-dev/vite-plus-core@1.3.0(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(typescript@6.0.3)(yaml@2.9.1))(svelte@5.57.2))(@voidzero-dev/vite-plus-core@1.3.0(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(typescript@6.0.3)(yaml@2.9.1))(svelte@5.57.2)(typescript@6.0.3))(wrangler@4.156.0(@cloudflare/workers-types@5.20261019.1)(@types/node@26.6.5))': dependencies: '@cloudflare/workers-types': 4.20260702.1 '@sveltejs/kit': 2.70.3(@sveltejs/vite-plugin-svelte@7.3.1(@voidzero-dev/vite-plus-core@1.3.0(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(typescript@6.0.3)(yaml@2.9.1))(svelte@5.57.2))(@voidzero-dev/vite-plus-core@1.3.0(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(typescript@6.0.3)(yaml@2.9.1))(svelte@5.57.2)(typescript@6.0.3) worktop: 0.8.0-next.18 - wrangler: 4.151.3(@cloudflare/workers-types@5.20261019.1)(@types/node@26.6.5) + wrangler: 4.156.0(@cloudflare/workers-types@5.20261019.1)(@types/node@26.6.5) - '@sveltejs/adapter-cloudflare@8.0.1(@sveltejs/kit@3.1.0(@sveltejs/vite-plugin-svelte@7.3.1(@voidzero-dev/vite-plus-core@1.3.0(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(typescript@6.0.3)(yaml@2.9.1))(svelte@5.57.2))(@voidzero-dev/vite-plus-core@1.3.0(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(typescript@6.0.3)(yaml@2.9.1))(svelte@5.57.2)(typescript@6.0.3))(wrangler@4.151.3(@cloudflare/workers-types@5.20261019.1)(@types/node@26.6.5))': + '@sveltejs/adapter-cloudflare@8.0.1(@sveltejs/kit@3.1.0(@sveltejs/vite-plugin-svelte@7.3.1(@voidzero-dev/vite-plus-core@1.3.0(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(typescript@6.0.3)(yaml@2.9.1))(svelte@5.57.2))(@voidzero-dev/vite-plus-core@1.3.0(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(typescript@6.0.3)(yaml@2.9.1))(svelte@5.57.2)(typescript@6.0.3))(wrangler@4.156.0(@cloudflare/workers-types@5.20261019.1)(@types/node@26.6.5))': dependencies: '@cloudflare/workers-types': 5.20261019.1 '@rolldown/pluginutils': 1.0.1 '@sveltejs/kit': 3.1.0(@sveltejs/vite-plugin-svelte@7.3.1(@voidzero-dev/vite-plus-core@1.3.0(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(typescript@6.0.3)(yaml@2.9.1))(svelte@5.57.2))(@voidzero-dev/vite-plus-core@1.3.0(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(typescript@6.0.3)(yaml@2.9.1))(svelte@5.57.2)(typescript@6.0.3) - wrangler: 4.151.3(@cloudflare/workers-types@5.20261019.1)(@types/node@26.6.5) + wrangler: 4.156.0(@cloudflare/workers-types@5.20261019.1)(@types/node@26.6.5) '@sveltejs/kit@2.70.3(@sveltejs/vite-plugin-svelte@7.3.1(@voidzero-dev/vite-plus-core@1.3.0(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(typescript@6.0.3)(yaml@2.9.1))(svelte@5.57.2))(@voidzero-dev/vite-plus-core@1.3.0(@types/node@26.6.5)(esbuild@0.28.2)(jiti@2.7.0)(sass-embedded@1.104.1)(sass@1.104.1)(terser@5.51.2)(tsx@4.23.15)(typescript@6.0.3)(yaml@2.9.1))(svelte@5.57.2)(typescript@6.0.3)': dependencies: @@ -14620,13 +14741,13 @@ snapshots: ccount@2.0.1: {} - cf@1.0.0-beta.18(@types/node@26.6.5): + cf@1.0.0-beta.24(@types/node@26.6.5): dependencies: - '@cloudflare/build-output-utils': 0.9.3 - '@cloudflare/config': 0.27.0 - '@cloudflare/runtime-types': 0.1.12(@types/node@26.6.5) + '@cloudflare/build-output-utils': 0.9.5 + '@cloudflare/config': 0.28.1 + '@cloudflare/runtime-types': 0.1.16(@types/node@26.6.5) blake3-wasm: 2.1.5 - miniflare: 5.20261012.1-beta(@types/node@26.6.5) + miniflare: 5.20261023.1-beta(@types/node@26.6.5) transitivePeerDependencies: - '@types/node' - bufferutil @@ -16047,12 +16168,12 @@ snapshots: - bufferutil - utf-8-validate - miniflare@5.20261012.1-beta(@types/node@26.6.5): + miniflare@5.20261019.1-beta(@types/node@26.6.5): dependencies: '@cspotcode/source-map-support': 0.8.1 sharp: 0.35.5(@types/node@26.6.5) undici: 7.29.1 - workerd: 1.20261012.1 + workerd: 1.20261019.1 ws: 8.21.0 youch: 4.1.0-beta.10 transitivePeerDependencies: @@ -16060,12 +16181,38 @@ snapshots: - bufferutil - utf-8-validate - miniflare@5.20261019.1-beta(@types/node@26.6.5): + miniflare@5.20261023.0-beta(@types/node@26.6.5): dependencies: '@cspotcode/source-map-support': 0.8.1 sharp: 0.35.5(@types/node@26.6.5) - undici: 7.29.1 - workerd: 1.20261019.1 + undici: 7.30.1 + workerd: 1.20261023.1 + ws: 8.21.0 + youch: 4.1.0-beta.10 + transitivePeerDependencies: + - '@types/node' + - bufferutil + - utf-8-validate + + miniflare@5.20261023.1-beta(@types/node@26.6.5): + dependencies: + '@cspotcode/source-map-support': 0.8.1 + sharp: 0.35.5(@types/node@26.6.5) + undici: 7.30.1 + workerd: 1.20261023.1 + ws: 8.21.0 + youch: 4.1.0-beta.10 + transitivePeerDependencies: + - '@types/node' + - bufferutil + - utf-8-validate + + miniflare@5.20261023.3-beta(@types/node@26.6.5): + dependencies: + '@cspotcode/source-map-support': 0.8.1 + sharp: 0.35.5(@types/node@26.6.5) + undici: 7.30.1 + workerd: 1.20261023.1 ws: 8.21.0 youch: 4.1.0-beta.10 transitivePeerDependencies: @@ -16077,6 +16224,11 @@ snapshots: dependencies: brace-expansion: 5.0.12 + minimatch@11.0.3: + dependencies: + '@isaacs/nonrecursive-glob-match': 1.0.3 + brace-expansion: 5.0.12 + minimatch@5.1.9: dependencies: brace-expansion: 2.1.7 @@ -17923,6 +18075,8 @@ snapshots: undici@7.29.1: {} + undici@7.30.1: {} + undici@8.12.2: {} unenv@2.0.0-rc.24: @@ -18727,6 +18881,14 @@ snapshots: '@cloudflare/workerd-linux-arm64': 1.20261019.1 '@cloudflare/workerd-windows-64': 1.20261019.1 + workerd@1.20261023.1: + optionalDependencies: + '@cloudflare/workerd-darwin-64': 1.20261023.1 + '@cloudflare/workerd-darwin-arm64': 1.20261023.1 + '@cloudflare/workerd-linux-64': 1.20261023.1 + '@cloudflare/workerd-linux-arm64': 1.20261023.1 + '@cloudflare/workerd-windows-64': 1.20261023.1 + worktop@0.8.0-next.18: dependencies: mrmime: 2.0.1 @@ -18750,6 +18912,24 @@ snapshots: - bufferutil - utf-8-validate + wrangler@4.156.0(@cloudflare/workers-types@5.20261019.1)(@types/node@26.6.5): + dependencies: + '@cloudflare/kv-asset-handler': 0.5.0 + '@cloudflare/unenv-preset': 2.16.2(unenv@2.0.0-rc.24)(workerd@1.20261023.1) + blake3-wasm: 2.1.5 + esbuild: 0.28.2 + miniflare: 5.20261023.3-beta(@types/node@26.6.5) + path-to-regexp: 6.3.0 + unenv: 2.0.0-rc.24 + workerd: 1.20261023.1 + optionalDependencies: + '@cloudflare/workers-types': 5.20261019.1 + fsevents: 2.3.3 + transitivePeerDependencies: + - '@types/node' + - bufferutil + - utf-8-validate + wrap-ansi@10.0.2: dependencies: ansi-styles: 6.2.3 @@ -18875,7 +19055,7 @@ snapshots: dependencies: zod: 4.6.7 - zod@4.6.5: {} + zod@4.6.6: {} zod@4.6.7: {} diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 63d66a5f3..1f936bf50 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -24,7 +24,7 @@ allowBuilds: catalog: '@cloudflare/workers-types': ^5.20261019.1 - '@cloudflare/workers-utils': ^0.47.3 + '@cloudflare/workers-utils': ^0.50.1 '@types/node': ^26.6.5 '@voidzero-dev/vite-plus-prompts': 1.3.0 typescript: 7.0.2 @@ -33,28 +33,28 @@ catalog: vite: npm:@voidzero-dev/vite-plus-core@1.3.0 vite-plus: 1.3.0 vitest: 5.0.5 - wrangler: ^4.151.3 - # beta.19 adds a second workerd release beside the stable Vite plugin's runtime. - # Recheck packed install size before widening this range. - cf: '>=1.0.0-beta.18 <1.0.0-beta.19' + wrangler: ^4.154.0 + # beta.24 and Vite plugin 1.66 use the same workerd release, 1.20261023.1. A later + # beta can add a second one. Recheck packed install size before widening this range. + cf: '>=1.0.0-beta.24 <1.0.0-beta.25' oauth4webapi: ^3.8.8 '@astryxdesign/core': 0.7.1 '@astryxdesign/theme-neutral': 0.7.1 '@stylexjs/stylex': 0.19.1 '@angular/build': ^22.2.3 '@astrojs/cloudflare': ^14.4.0 - '@cloudflare/build-output-utils': ^0.9.3 + '@cloudflare/build-output-utils': ^0.9.5 '@cloudflare/codemods': ^0.5.1 - '@cloudflare/config': ^0.27.0 - '@cloudflare/vite-plugin': ^1.64.0 - '@cloudflare/workers-auth': ^0.14.1 + '@cloudflare/config': ^0.28.1 + '@cloudflare/vite-plugin': ^1.66.0 + '@cloudflare/workers-auth': ^0.15.3 '@nkzw/fate': 1.9.0 '@vitejs/plugin-react': ^6.1.2 '@vitejs/plugin-rsc': ^0.5.38 astro: ^7.4.0 magic-string: ^1.4.3 - # Match cf beta.18; the stable Vite plugin shares this workerd release. - miniflare: ^5.20261012.1-beta + # Match cf beta.24 and Vite plugin 1.66: workerd 1.20261023.1 and undici 7.30.1. + miniflare: ^5.20261023.1-beta nuxt: ^4.6.2 playwright: ^1.64.1 postal-mime: ^4.0.11