From 4f6d1ae835f35578ca317ed5b616fbf1b744f7b8 Mon Sep 17 00:00:00 2001 From: wobsoriano Date: Sun, 16 Aug 2026 23:13:45 -0700 Subject: [PATCH 1/3] fix(astro): avoid deprecated optimizeDeps.esbuildOptions on Vite 8 Vite 8 and rolldown-vite prebundle dependencies with Rolldown, deprecate optimizeDeps.esbuildOptions and silently drop its target. Set the es2022 target under optimizeDeps.rolldownOptions.transform when the resolved Vite is Rolldown-based, and keep esbuildOptions for Astro 5 and 6. --- .changeset/lazy-jars-brake.md | 5 +++ .../__tests__/create-integration.test.ts | 42 +++++++++++++++++++ .../src/integration/create-integration.ts | 22 +++++++--- packages/astro/src/integration/vite-flavor.ts | 16 +++++++ 4 files changed, 79 insertions(+), 6 deletions(-) create mode 100644 .changeset/lazy-jars-brake.md create mode 100644 packages/astro/src/integration/__tests__/create-integration.test.ts create mode 100644 packages/astro/src/integration/vite-flavor.ts diff --git a/.changeset/lazy-jars-brake.md b/.changeset/lazy-jars-brake.md new file mode 100644 index 00000000000..ff80491b273 --- /dev/null +++ b/.changeset/lazy-jars-brake.md @@ -0,0 +1,5 @@ +--- +'@clerk/astro': patch +--- + +Fix the `optimizeDeps.esbuildOptions` deprecation warning logged by Vite 8 on Astro 7. diff --git a/packages/astro/src/integration/__tests__/create-integration.test.ts b/packages/astro/src/integration/__tests__/create-integration.test.ts new file mode 100644 index 00000000000..e474097b4e4 --- /dev/null +++ b/packages/astro/src/integration/__tests__/create-integration.test.ts @@ -0,0 +1,42 @@ +// @vitest-environment node +import { beforeEach, describe, expect, it, vi } from 'vitest'; + +import { createIntegration } from '../create-integration'; +import { usesRolldownDepOptimizer } from '../vite-flavor'; + +vi.mock('../vite-flavor', () => ({ + usesRolldownDepOptimizer: vi.fn(), +})); + +const runConfigSetup = () => { + const updateConfig = vi.fn(); + + const integration = createIntegration()(); + (integration.hooks['astro:config:setup'] as any)({ + config: { output: 'static', vite: {} }, + injectScript: vi.fn(), + updateConfig, + logger: { error: vi.fn() }, + command: 'dev', + }); + + return (updateConfig.mock.calls[0] as any)[0].vite.optimizeDeps; +}; + +describe('createIntegration', () => { + beforeEach(() => { + vi.mocked(usesRolldownDepOptimizer).mockReset(); + }); + + it('sets the dependency prebundling target via esbuildOptions on esbuild-based Vite', () => { + vi.mocked(usesRolldownDepOptimizer).mockReturnValue(false); + + expect(runConfigSetup()).toEqual({ esbuildOptions: { target: 'es2022' } }); + }); + + it('sets the dependency prebundling target via rolldownOptions on Rolldown-based Vite', () => { + vi.mocked(usesRolldownDepOptimizer).mockReturnValue(true); + + expect(runConfigSetup()).toEqual({ rolldownOptions: { transform: { target: 'es2022' } } }); + }); +}); diff --git a/packages/astro/src/integration/create-integration.ts b/packages/astro/src/integration/create-integration.ts index fc2bfa17fb8..056b65e3ed1 100644 --- a/packages/astro/src/integration/create-integration.ts +++ b/packages/astro/src/integration/create-integration.ts @@ -1,12 +1,26 @@ import type { ClerkOptions } from '@clerk/shared/types'; -import type { AstroIntegration } from 'astro'; +import type { AstroConfig, AstroIntegration } from 'astro'; import { envField } from 'astro/config'; import { name as packageName, version as packageVersion } from '../../package.json'; import type { AstroClerkIntegrationParams } from '../types'; import { buildBeforeHydrationSnippet, buildPageLoadSnippet } from './snippets'; +import { usesRolldownDepOptimizer } from './vite-flavor'; import { vitePluginAstroConfig } from './vite-plugin-astro-config'; +type ViteOptimizeDeps = NonNullable['optimizeDeps']>; + +/** + * Vite 8 replaced the esbuild dependency prebundler with Rolldown, so the `target` needed for + * top-level await has to be set under a different option depending on the installed Vite. + */ +const buildOptimizeDepsConfig = (): ViteOptimizeDeps => { + const target = 'es2022'; + return usesRolldownDepOptimizer() + ? ({ rolldownOptions: { transform: { target } } } as ViteOptimizeDeps) + : { esbuildOptions: { target } }; +}; + const buildEnvVarFromOption = (valueToBeStored: unknown, envName: keyof InternalEnv) => { return valueToBeStored ? { [`import.meta.env.${envName}`]: JSON.stringify(valueToBeStored) } : {}; }; @@ -74,11 +88,7 @@ function createIntegration() }, // We need this for top-level await - optimizeDeps: { - esbuildOptions: { - target: 'es2022', - }, - }, + optimizeDeps: buildOptimizeDepsConfig(), build: { target: 'es2022', rollupOptions: { diff --git a/packages/astro/src/integration/vite-flavor.ts b/packages/astro/src/integration/vite-flavor.ts new file mode 100644 index 00000000000..3955cdec3e8 --- /dev/null +++ b/packages/astro/src/integration/vite-flavor.ts @@ -0,0 +1,16 @@ +import { createRequire } from 'node:module'; + +/** + * Vite 8 and `rolldown-vite` prebundle dependencies with Rolldown and deprecate + * `optimizeDeps.esbuildOptions`, which is also no longer able to carry a `target`. + */ +export function usesRolldownDepOptimizer(): boolean { + try { + const require = createRequire(import.meta.url); + const astroRequire = createRequire(require.resolve('astro/package.json')); + const { name, version } = astroRequire('vite/package.json'); + return name === 'rolldown-vite' || Number.parseInt(version, 10) >= 8; + } catch { + return false; + } +} From 9293101c4ba3b03e4bd51fd3228cb6a38df7ef06 Mon Sep 17 00:00:00 2001 From: wobsoriano Date: Sun, 16 Aug 2026 23:18:17 -0700 Subject: [PATCH 2/3] refactor(astro): gate the optimizeDeps target on the Astro major Check astro/package.json directly instead of resolving Vite through Astro. Astro 7 is the version that ships the Rolldown-based Vite 8. --- .../__tests__/create-integration.test.ts | 42 ------------------- .../src/integration/create-integration.ts | 17 ++++++-- packages/astro/src/integration/vite-flavor.ts | 16 ------- 3 files changed, 13 insertions(+), 62 deletions(-) delete mode 100644 packages/astro/src/integration/__tests__/create-integration.test.ts delete mode 100644 packages/astro/src/integration/vite-flavor.ts diff --git a/packages/astro/src/integration/__tests__/create-integration.test.ts b/packages/astro/src/integration/__tests__/create-integration.test.ts deleted file mode 100644 index e474097b4e4..00000000000 --- a/packages/astro/src/integration/__tests__/create-integration.test.ts +++ /dev/null @@ -1,42 +0,0 @@ -// @vitest-environment node -import { beforeEach, describe, expect, it, vi } from 'vitest'; - -import { createIntegration } from '../create-integration'; -import { usesRolldownDepOptimizer } from '../vite-flavor'; - -vi.mock('../vite-flavor', () => ({ - usesRolldownDepOptimizer: vi.fn(), -})); - -const runConfigSetup = () => { - const updateConfig = vi.fn(); - - const integration = createIntegration()(); - (integration.hooks['astro:config:setup'] as any)({ - config: { output: 'static', vite: {} }, - injectScript: vi.fn(), - updateConfig, - logger: { error: vi.fn() }, - command: 'dev', - }); - - return (updateConfig.mock.calls[0] as any)[0].vite.optimizeDeps; -}; - -describe('createIntegration', () => { - beforeEach(() => { - vi.mocked(usesRolldownDepOptimizer).mockReset(); - }); - - it('sets the dependency prebundling target via esbuildOptions on esbuild-based Vite', () => { - vi.mocked(usesRolldownDepOptimizer).mockReturnValue(false); - - expect(runConfigSetup()).toEqual({ esbuildOptions: { target: 'es2022' } }); - }); - - it('sets the dependency prebundling target via rolldownOptions on Rolldown-based Vite', () => { - vi.mocked(usesRolldownDepOptimizer).mockReturnValue(true); - - expect(runConfigSetup()).toEqual({ rolldownOptions: { transform: { target: 'es2022' } } }); - }); -}); diff --git a/packages/astro/src/integration/create-integration.ts b/packages/astro/src/integration/create-integration.ts index 056b65e3ed1..9d48dd42cdb 100644 --- a/packages/astro/src/integration/create-integration.ts +++ b/packages/astro/src/integration/create-integration.ts @@ -1,3 +1,5 @@ +import { createRequire } from 'node:module'; + import type { ClerkOptions } from '@clerk/shared/types'; import type { AstroConfig, AstroIntegration } from 'astro'; import { envField } from 'astro/config'; @@ -5,18 +7,25 @@ import { envField } from 'astro/config'; import { name as packageName, version as packageVersion } from '../../package.json'; import type { AstroClerkIntegrationParams } from '../types'; import { buildBeforeHydrationSnippet, buildPageLoadSnippet } from './snippets'; -import { usesRolldownDepOptimizer } from './vite-flavor'; import { vitePluginAstroConfig } from './vite-plugin-astro-config'; type ViteOptimizeDeps = NonNullable['optimizeDeps']>; +function getAstroMajorVersion(): number { + try { + return Number.parseInt(createRequire(import.meta.url)('astro/package.json').version, 10); + } catch { + return 0; + } +} + /** - * Vite 8 replaced the esbuild dependency prebundler with Rolldown, so the `target` needed for - * top-level await has to be set under a different option depending on the installed Vite. + * Sets the `target` we need for top-level await. Astro 7 ships Vite 8, which prebundles + * dependencies with Rolldown and deprecates `optimizeDeps.esbuildOptions`. */ const buildOptimizeDepsConfig = (): ViteOptimizeDeps => { const target = 'es2022'; - return usesRolldownDepOptimizer() + return getAstroMajorVersion() >= 7 ? ({ rolldownOptions: { transform: { target } } } as ViteOptimizeDeps) : { esbuildOptions: { target } }; }; diff --git a/packages/astro/src/integration/vite-flavor.ts b/packages/astro/src/integration/vite-flavor.ts deleted file mode 100644 index 3955cdec3e8..00000000000 --- a/packages/astro/src/integration/vite-flavor.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { createRequire } from 'node:module'; - -/** - * Vite 8 and `rolldown-vite` prebundle dependencies with Rolldown and deprecate - * `optimizeDeps.esbuildOptions`, which is also no longer able to carry a `target`. - */ -export function usesRolldownDepOptimizer(): boolean { - try { - const require = createRequire(import.meta.url); - const astroRequire = createRequire(require.resolve('astro/package.json')); - const { name, version } = astroRequire('vite/package.json'); - return name === 'rolldown-vite' || Number.parseInt(version, 10) >= 8; - } catch { - return false; - } -} From 7bd5bd403f1595a4758605d819115d513c5b5fb5 Mon Sep 17 00:00:00 2001 From: wobsoriano Date: Mon, 17 Aug 2026 08:08:21 -0700 Subject: [PATCH 3/3] fix(astro): drop the unused optimizeDeps target The es2022 override existed to compile the top-level await in async-local-storage.server.ts, but the `browser` condition on the #async-local-storage subpath import means the client dep optimizer always resolves the client variant, which has no top-level await. Verified on Astro 5/Vite 6 and Astro 7/Vite 8 that dev and build are unchanged. Removing it also clears the `optimizeDeps.esbuildOptions` deprecation warning Vite 8 logs on Astro 7. --- .changeset/lazy-jars-brake.md | 2 +- .../src/integration/create-integration.ts | 27 +------------------ 2 files changed, 2 insertions(+), 27 deletions(-) diff --git a/.changeset/lazy-jars-brake.md b/.changeset/lazy-jars-brake.md index ff80491b273..d5371571942 100644 --- a/.changeset/lazy-jars-brake.md +++ b/.changeset/lazy-jars-brake.md @@ -2,4 +2,4 @@ '@clerk/astro': patch --- -Fix the `optimizeDeps.esbuildOptions` deprecation warning logged by Vite 8 on Astro 7. +Remove the Vite `optimizeDeps` target override, which is no longer needed and logged a deprecation warning on Astro 7. diff --git a/packages/astro/src/integration/create-integration.ts b/packages/astro/src/integration/create-integration.ts index 9d48dd42cdb..6b5582d372b 100644 --- a/packages/astro/src/integration/create-integration.ts +++ b/packages/astro/src/integration/create-integration.ts @@ -1,7 +1,5 @@ -import { createRequire } from 'node:module'; - import type { ClerkOptions } from '@clerk/shared/types'; -import type { AstroConfig, AstroIntegration } from 'astro'; +import type { AstroIntegration } from 'astro'; import { envField } from 'astro/config'; import { name as packageName, version as packageVersion } from '../../package.json'; @@ -9,27 +7,6 @@ import type { AstroClerkIntegrationParams } from '../types'; import { buildBeforeHydrationSnippet, buildPageLoadSnippet } from './snippets'; import { vitePluginAstroConfig } from './vite-plugin-astro-config'; -type ViteOptimizeDeps = NonNullable['optimizeDeps']>; - -function getAstroMajorVersion(): number { - try { - return Number.parseInt(createRequire(import.meta.url)('astro/package.json').version, 10); - } catch { - return 0; - } -} - -/** - * Sets the `target` we need for top-level await. Astro 7 ships Vite 8, which prebundles - * dependencies with Rolldown and deprecates `optimizeDeps.esbuildOptions`. - */ -const buildOptimizeDepsConfig = (): ViteOptimizeDeps => { - const target = 'es2022'; - return getAstroMajorVersion() >= 7 - ? ({ rolldownOptions: { transform: { target } } } as ViteOptimizeDeps) - : { esbuildOptions: { target } }; -}; - const buildEnvVarFromOption = (valueToBeStored: unknown, envName: keyof InternalEnv) => { return valueToBeStored ? { [`import.meta.env.${envName}`]: JSON.stringify(valueToBeStored) } : {}; }; @@ -96,8 +73,6 @@ function createIntegration() external: ['node:async_hooks'], }, - // We need this for top-level await - optimizeDeps: buildOptimizeDepsConfig(), build: { target: 'es2022', rollupOptions: {