-
Notifications
You must be signed in to change notification settings - Fork 327
/
Copy pathClerkProvider.tsx
36 lines (29 loc) · 1.3 KB
/
ClerkProvider.tsx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
import { isPublishableKey } from '@clerk/shared/keys';
import React from 'react';
import { errorThrower } from '../errors/errorThrower';
import { multipleClerkProvidersError } from '../errors/messages';
import type { ClerkProviderProps } from '../types';
import { withMaxAllowedInstancesGuard } from '../utils';
import { ClerkContextProvider } from './ClerkContextProvider';
function ClerkProviderBase(props: ClerkProviderProps) {
const { initialState, children, __internal_bypassMissingPublishableKey, ...restIsomorphicClerkOptions } = props;
const { publishableKey = '', Clerk: userInitialisedClerk } = restIsomorphicClerkOptions;
if (!userInitialisedClerk && !__internal_bypassMissingPublishableKey) {
if (!publishableKey) {
errorThrower.throwMissingPublishableKeyError();
} else if (publishableKey && !isPublishableKey(publishableKey)) {
errorThrower.throwInvalidPublishableKeyError({ key: publishableKey });
}
}
return (
<ClerkContextProvider
initialState={initialState}
isomorphicClerkOptions={restIsomorphicClerkOptions}
>
{children}
</ClerkContextProvider>
);
}
const ClerkProvider = withMaxAllowedInstancesGuard(ClerkProviderBase, 'ClerkProvider', multipleClerkProvidersError);
ClerkProvider.displayName = 'ClerkProvider';
export { ClerkProvider };