UNPKG

clerk-solidjs

Version:
131 lines (126 loc) 4.31 kB
import { ClerkProvider } from '../chunk/AKK762YZ.js'; import { getPublicEnvVariables } from '../chunk/5MCYVUKZ.js'; import '../chunk/ZQDJMLYE.js'; import { createComponent, mergeProps, isServer, getRequestEvent } from 'solid-js/web'; import { destructure } from '@solid-primitives/destructure'; import { splitProps, createMemo, onMount, useTransition, createEffect, on } from 'solid-js'; import { useNavigate, useLocation } from '@solidjs/router'; var useAwaitableNavigate = () => { const navigate = useNavigate(); const location = useLocation(); const resolveFunctionsRef = []; const resolveAll = () => { resolveFunctionsRef.forEach((resolve) => resolve()); resolveFunctionsRef.splice(0, resolveFunctionsRef.length); }; const [, startTransition] = useTransition(); createEffect( on( () => location, () => { resolveAll(); } ) ); return (to, options) => { return new Promise((res) => { startTransition(() => { resolveFunctionsRef.push(res); res(navigate(to, options)); }); }); }; }; // src/start/client/utils.ts var pickFromClerkInitState = (clerkInitState) => { const { __clerk_ssr_state, __publishableKey, __proxyUrl, __domain, __isSatellite, __signInUrl, __signUpUrl, __afterSignInUrl, __afterSignUpUrl, __clerkJSUrl, __clerkJSVersion, __telemetryDisabled, __telemetryDebug, __signInForceRedirectUrl, __signUpForceRedirectUrl, __signInFallbackRedirectUrl, __signUpFallbackRedirectUrl } = clerkInitState || {}; return { clerkSsrState: __clerk_ssr_state, publishableKey: __publishableKey, proxyUrl: __proxyUrl, domain: __domain, isSatellite: !!__isSatellite, signInUrl: __signInUrl, signUpUrl: __signUpUrl, afterSignInUrl: __afterSignInUrl, afterSignUpUrl: __afterSignUpUrl, clerkJSUrl: __clerkJSUrl, clerkJSVersion: __clerkJSVersion, telemetry: { disabled: __telemetryDisabled, debug: __telemetryDebug }, signInForceRedirectUrl: __signInForceRedirectUrl, signUpForceRedirectUrl: __signUpForceRedirectUrl, signInFallbackRedirectUrl: __signInFallbackRedirectUrl, signUpFallbackRedirectUrl: __signUpFallbackRedirectUrl }; }; var mergeWithPublicEnvs = (restInitState) => { const publicEnvVariables = getPublicEnvVariables(); return { ...restInitState, publishableKey: restInitState.publishableKey || publicEnvVariables.publishableKey, domain: restInitState.domain || publicEnvVariables.domain, isSatellite: restInitState.isSatellite || publicEnvVariables.isSatellite, signInUrl: restInitState.signInUrl || publicEnvVariables.signInUrl, signUpUrl: restInitState.signUpUrl || publicEnvVariables.signUpUrl, afterSignInUrl: restInitState.afterSignInUrl || publicEnvVariables.afterSignInUrl, afterSignUpUrl: restInitState.afterSignUpUrl || publicEnvVariables.afterSignUpUrl, clerkJSUrl: restInitState.clerkJSUrl || publicEnvVariables.clerkJsUrl, clerkJSVersion: restInitState.clerkJSVersion || publicEnvVariables.clerkJsVersion, signInForceRedirectUrl: restInitState.signInForceRedirectUrl, clerkJSVariant: restInitState.clerkJSVariant || publicEnvVariables.clerkJsVariant }; }; // src/start/client/clerk-provider.tsx function ClerkProvider2(props) { const [local, providerProps] = splitProps(props, ["children"]); const awaitableNavigate = useAwaitableNavigate(); const clerkInitState = () => isServer ? getRequestEvent()?.locals.clerkInitialState : window.__clerk_init_state; const states = createMemo(() => pickFromClerkInitState(clerkInitState()?.__internal_clerk_state)); const { clerkSsrState } = destructure(states); const mergedProps = () => ({ ...mergeWithPublicEnvs(states()), ...providerProps }); onMount(() => { window.__clerk_init_state = clerkInitState(); }); return createComponent(ClerkProvider, mergeProps({ get initialState() { return clerkSsrState(); }, routerPush: (to) => awaitableNavigate(to, { replace: false }), routerReplace: (to) => awaitableNavigate(to, { replace: true }) }, mergedProps, { get children() { return local.children; } })); } export { ClerkProvider2 as ClerkProvider };