Skip to content

Commit b2820b1

Browse files
authored
fix(react-router): read VITE env-var for dev-warning suppression in SPA mode (#8682)
1 parent c24a965 commit b2820b1

3 files changed

Lines changed: 32 additions & 2 deletions

File tree

.changeset/spa-dev-warning-env.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'@clerk/react-router': patch
3+
---
4+
5+
Read `VITE_CLERK_UNSAFE_DISABLE_DEVELOPMENT_MODE_CONSOLE_WARNING` on the client when React Router is used in SPA mode (or as a library). Previously the env-var shortcut only took effect through the SSR `rootAuthLoader`, so client-only setups had no way to suppress the development-keys warning without passing `unsafe_disableDevelopmentModeConsoleWarning` to `<ClerkProvider>` directly.

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

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import {
77
isSpaMode as _isSpaMode,
88
warnForSsr,
99
} from '../utils/assert';
10+
import { getPublicEnvVariables } from '../utils/env';
1011
import { ClerkReactRouterOptionsProvider } from './ReactRouterOptionsContext';
1112
import type { ClerkState, ReactRouterClerkProviderProps } from './types';
1213
import { useAwaitableNavigate } from './useAwaitableNavigate';
@@ -102,7 +103,9 @@ function ClerkProviderBase<TUi extends Ui = Ui>({ children, ...rest }: ClerkProv
102103
disabled: __telemetryDisabled,
103104
debug: __telemetryDebug,
104105
},
105-
unsafe_disableDevelopmentModeConsoleWarning: __unsafeDisableDevelopmentModeConsoleWarning,
106+
unsafe_disableDevelopmentModeConsoleWarning:
107+
__unsafeDisableDevelopmentModeConsoleWarning ??
108+
getPublicEnvVariables(undefined).unsafeDisableDevelopmentModeConsoleWarning,
106109
};
107110

108111
const keylessProps = __keylessClaimUrl

packages/react-router/src/client/__tests__/ClerkProvider.test.tsx

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,20 +16,24 @@ vi.mock('react-router', () => ({
1616
UNSAFE_DataRouterContext: React.createContext(null),
1717
}));
1818

19+
const isSpaModeMock = vi.fn(() => false as boolean);
20+
1921
vi.mock('../../utils/assert', () => ({
2022
assertPublishableKeyInSpaMode: vi.fn(),
2123
assertValidClerkState: vi.fn(),
22-
isSpaMode: () => false,
24+
isSpaMode: () => isSpaModeMock(),
2325
warnForSsr: vi.fn(),
2426
}));
2527

2628
describe('ClerkProvider __internal_clerkUIUrl via clerkState', () => {
2729
beforeEach(() => {
2830
vi.clearAllMocks();
31+
isSpaModeMock.mockReturnValue(false);
2932
});
3033

3134
afterEach(() => {
3235
vi.clearAllMocks();
36+
vi.unstubAllEnvs();
3337
});
3438

3539
it('passes __internal_clerkUIUrl from clerkState to the underlying ClerkProvider', async () => {
@@ -73,6 +77,24 @@ describe('ClerkProvider __internal_clerkUIUrl via clerkState', () => {
7377
);
7478
});
7579

80+
it('reads VITE_CLERK_UNSAFE_DISABLE_DEVELOPMENT_MODE_CONSOLE_WARNING in SPA mode where clerkState is absent', async () => {
81+
isSpaModeMock.mockReturnValue(true);
82+
vi.stubEnv('VITE_CLERK_UNSAFE_DISABLE_DEVELOPMENT_MODE_CONSOLE_WARNING', 'true');
83+
const { ClerkProvider } = await import('../ReactRouterClerkProvider');
84+
85+
render(
86+
<ClerkProvider publishableKey='pk_test_xxx'>
87+
<div>Test</div>
88+
</ClerkProvider>,
89+
);
90+
91+
expect(mockClerkProvider).toHaveBeenCalledWith(
92+
expect.objectContaining({
93+
unsafe_disableDevelopmentModeConsoleWarning: true,
94+
}),
95+
);
96+
});
97+
7698
it('passes __internal_clerkUIUrl alongside other props from clerkState', async () => {
7799
const { ClerkProvider } = await import('../ReactRouterClerkProvider');
78100

0 commit comments

Comments
 (0)