Skip to content

Commit 90beaeb

Browse files
authored
feat(astro,nuxt,react-router,tanstack-react-start): Env-var to suppress dev keys warning (#8402)
1 parent 1f804dc commit 90beaeb

14 files changed

Lines changed: 118 additions & 1 deletion

File tree

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
---
2+
'@clerk/astro': minor
3+
'@clerk/nuxt': minor
4+
'@clerk/react-router': minor
5+
'@clerk/tanstack-react-start': minor
6+
'@clerk/shared': patch
7+
---
8+
9+
Add an env-var shortcut for `unsafe_disableDevelopmentModeConsoleWarning` across the Astro, Nuxt, React Router, and TanStack Start integrations so the development-keys console warning can be suppressed without threading the option through `<ClerkProvider>` manually:
10+
11+
- Astro: `PUBLIC_CLERK_UNSAFE_DISABLE_DEVELOPMENT_MODE_CONSOLE_WARNING`
12+
- Nuxt: `NUXT_PUBLIC_CLERK_UNSAFE_DISABLE_DEVELOPMENT_MODE_CONSOLE_WARNING`
13+
- React Router: `VITE_CLERK_UNSAFE_DISABLE_DEVELOPMENT_MODE_CONSOLE_WARNING` (or `CLERK_UNSAFE_DISABLE_DEVELOPMENT_MODE_CONSOLE_WARNING`)
14+
- TanStack Start: `VITE_CLERK_UNSAFE_DISABLE_DEVELOPMENT_MODE_CONSOLE_WARNING` (or `CLERK_UNSAFE_DISABLE_DEVELOPMENT_MODE_CONSOLE_WARNING`)
15+
16+
The Next.js equivalent (`NEXT_PUBLIC_CLERK_UNSAFE_DISABLE_DEVELOPMENT_MODE_CONSOLE_WARNING`) already existed; the JSDoc on `unsafe_disableDevelopmentModeConsoleWarning` now lists every framework's env-var shortcut and clarifies that suppressing the warning at source also keeps it from being mirrored to the dev-server terminal (e.g. Next.js with `experimental.browserDebugInfoInTerminal`).
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
import { afterEach, describe, expect, it, vi } from 'vitest';
2+
3+
import { mergeEnvVarsWithParams } from '../merge-env-vars-with-params';
4+
5+
describe('mergeEnvVarsWithParams', () => {
6+
afterEach(() => {
7+
vi.unstubAllEnvs();
8+
});
9+
10+
it('preserves an explicit unsafe_disableDevelopmentModeConsoleWarning false when env is true', () => {
11+
vi.stubEnv('PUBLIC_CLERK_UNSAFE_DISABLE_DEVELOPMENT_MODE_CONSOLE_WARNING', 'true');
12+
13+
const result = mergeEnvVarsWithParams({
14+
unsafe_disableDevelopmentModeConsoleWarning: false,
15+
});
16+
17+
expect(result.unsafe_disableDevelopmentModeConsoleWarning).toBe(false);
18+
});
19+
});

packages/astro/src/internal/merge-env-vars-with-params.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ const mergeEnvVarsWithParams = (
4242
__internal_clerkUIUrl: paramClerkUIUrl,
4343
__internal_clerkUIVersion: paramClerkUIVersion,
4444
prefetchUI: paramPrefetchUI,
45+
unsafe_disableDevelopmentModeConsoleWarning: paramUnsafeDisableDevelopmentModeConsoleWarning,
4546
...rest
4647
} = params || {};
4748

@@ -65,6 +66,9 @@ const mergeEnvVarsWithParams = (
6566
disabled: isTruthy(import.meta.env.PUBLIC_CLERK_TELEMETRY_DISABLED),
6667
debug: isTruthy(import.meta.env.PUBLIC_CLERK_TELEMETRY_DEBUG),
6768
},
69+
unsafe_disableDevelopmentModeConsoleWarning:
70+
paramUnsafeDisableDevelopmentModeConsoleWarning ??
71+
isTruthy(import.meta.env.PUBLIC_CLERK_UNSAFE_DISABLE_DEVELOPMENT_MODE_CONSOLE_WARNING),
6872
// Read from params (server-injected via __CLERK_ASTRO_SAFE_VARS__)
6973
// These are dynamically resolved by middleware, not from env vars
7074
__internal_keylessClaimUrl: internalOptions?.keylessClaimUrl,

packages/nuxt/src/module.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,8 @@ export default defineNuxtModule<ModuleOptions>({
7171
// prefetchUI config: can be false or undefined
7272
prefetchUI: options.prefetchUI,
7373
isSatellite: options.isSatellite,
74+
// Listed explicitly so it can be overridden via NUXT_PUBLIC_CLERK_UNSAFE_DISABLE_DEVELOPMENT_MODE_CONSOLE_WARNING.
75+
unsafe_disableDevelopmentModeConsoleWarning: options.unsafe_disableDevelopmentModeConsoleWarning,
7476
// Backend specific variables that are safe to share.
7577
// We want them to be overridable like the other public keys (e.g NUXT_PUBLIC_CLERK_PROXY_URL)
7678
proxyUrl: options.proxyUrl,

packages/react-router/src/client/ReactRouterClerkProvider.tsx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@ function ClerkProviderBase<TUi extends Ui = Ui>({ children, ...rest }: ClerkProv
6767
__prefetchUI,
6868
__telemetryDisabled,
6969
__telemetryDebug,
70+
__unsafeDisableDevelopmentModeConsoleWarning,
7071
__keylessClaimUrl,
7172
__keylessApiKeysUrl,
7273
} = clerkState?.__internal_clerk_state || {};
@@ -101,6 +102,7 @@ function ClerkProviderBase<TUi extends Ui = Ui>({ children, ...rest }: ClerkProv
101102
disabled: __telemetryDisabled,
102103
debug: __telemetryDebug,
103104
},
105+
unsafe_disableDevelopmentModeConsoleWarning: __unsafeDisableDevelopmentModeConsoleWarning,
104106
};
105107

106108
const keylessProps = __keylessClaimUrl

packages/react-router/src/client/types.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ export type ClerkState = {
2525
__prefetchUI: boolean | undefined;
2626
__telemetryDisabled: boolean | undefined;
2727
__telemetryDebug: boolean | undefined;
28+
__unsafeDisableDevelopmentModeConsoleWarning: boolean | undefined;
2829
__keylessClaimUrl?: string;
2930
__keylessApiKeysUrl?: string;
3031
};

packages/react-router/src/server/utils.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,7 @@ export function getResponseClerkState(requestState: RequestStateWithRedirectUrls
102102
__prefetchUI: envVars.prefetchUI,
103103
__telemetryDisabled: envVars.telemetryDisabled,
104104
__telemetryDebug: envVars.telemetryDebug,
105+
__unsafeDisableDevelopmentModeConsoleWarning: envVars.unsafeDisableDevelopmentModeConsoleWarning,
105106
};
106107

107108
if (canUseKeyless && __keylessClaimUrl) {

packages/react-router/src/utils/env.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,9 @@ export const getPublicEnvVariables = (context: AppLoadContext | undefined) => {
2121
prefetchUI: getValue('CLERK_PREFETCH_UI') === 'false' ? false : undefined,
2222
telemetryDisabled: isTruthy(getValue('CLERK_TELEMETRY_DISABLED')),
2323
telemetryDebug: isTruthy(getValue('CLERK_TELEMETRY_DEBUG')),
24+
unsafeDisableDevelopmentModeConsoleWarning: isTruthy(
25+
getValue('CLERK_UNSAFE_DISABLE_DEVELOPMENT_MODE_CONSOLE_WARNING'),
26+
),
2427
signInForceRedirectUrl: getValue('CLERK_SIGN_IN_FORCE_REDIRECT_URL'),
2528
signUpForceRedirectUrl: getValue('CLERK_SIGN_UP_FORCE_REDIRECT_URL'),
2629
signInFallbackRedirectUrl: getValue('CLERK_SIGN_IN_FALLBACK_REDIRECT_URL'),

packages/shared/src/types/clerk.ts

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1123,7 +1123,17 @@ type ClerkOptionsNavigation =
11231123

11241124
type ClerkUnsafeOptions = {
11251125
/**
1126-
* Disables the console warning that is logged when Clerk is initialized with development keys.
1126+
* Disables the `Clerk has been loaded with development keys` console warning that is logged when Clerk is
1127+
* initialized with development keys. The warning is emitted by `clerk-js` to the browser console; in dev servers
1128+
* that mirror browser logs to the terminal (e.g. Next.js with `experimental.browserDebugInfoInTerminal`), setting
1129+
* this option also stops it from showing up there.
1130+
*
1131+
* Each framework integration also exposes an env-var shortcut so you don't need to thread the option through
1132+
* `<ClerkProvider>` manually:
1133+
* - Next.js: `NEXT_PUBLIC_CLERK_UNSAFE_DISABLE_DEVELOPMENT_MODE_CONSOLE_WARNING`
1134+
* - Astro: `PUBLIC_CLERK_UNSAFE_DISABLE_DEVELOPMENT_MODE_CONSOLE_WARNING`
1135+
* - TanStack Start / React Router: `VITE_CLERK_UNSAFE_DISABLE_DEVELOPMENT_MODE_CONSOLE_WARNING`
1136+
* - Nuxt: `NUXT_PUBLIC_CLERK_UNSAFE_DISABLE_DEVELOPMENT_MODE_CONSOLE_WARNING`
11271137
*
11281138
* [WARNING] The development mode warning is intended to ensure that you don't go to production with a non-production
11291139
* Clerk instance. If you're disabling it, please make sure you don't ship with a non-production Clerk instance!
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
import type { RequestState } from '@clerk/backend/internal';
2+
import { afterEach, describe, expect, it, vi } from 'vitest';
3+
4+
import { mergeWithPublicEnvs, pickFromClerkInitState } from '../client/utils';
5+
import { getResponseClerkState } from '../server/utils';
6+
7+
const createRequestState = (): RequestState =>
8+
({
9+
domain: undefined,
10+
isSatellite: false,
11+
publishableKey: 'pk_test_xxx',
12+
proxyUrl: undefined,
13+
signInUrl: undefined,
14+
signUpUrl: undefined,
15+
toAuth: () => ({}),
16+
}) as RequestState;
17+
18+
describe('unsafe_disableDevelopmentModeConsoleWarning', () => {
19+
afterEach(() => {
20+
vi.unstubAllEnvs();
21+
});
22+
23+
it('preserves an explicit false from the initial state when public env is true', () => {
24+
vi.stubEnv('VITE_CLERK_UNSAFE_DISABLE_DEVELOPMENT_MODE_CONSOLE_WARNING', 'true');
25+
26+
const result = mergeWithPublicEnvs({
27+
unsafe_disableDevelopmentModeConsoleWarning: false,
28+
});
29+
30+
expect(result.unsafe_disableDevelopmentModeConsoleWarning).toBe(false);
31+
});
32+
33+
it('hydrates the unprefixed env value from server state', () => {
34+
vi.stubEnv('CLERK_UNSAFE_DISABLE_DEVELOPMENT_MODE_CONSOLE_WARNING', 'true');
35+
36+
const clerkInitialState = getResponseClerkState(createRequestState());
37+
const pickedState = pickFromClerkInitState(clerkInitialState.__internal_clerk_state);
38+
const result = mergeWithPublicEnvs(pickedState);
39+
40+
expect(result.unsafe_disableDevelopmentModeConsoleWarning).toBe(true);
41+
});
42+
});

0 commit comments

Comments
 (0)