UNPKG

@clerk/nextjs

Version:

Clerk SDK for NextJS

70 lines 3.45 kB
"use client"; import "../../chunk-BUSYA2B4.js"; import { InternalClerkProvider as ReactClerkProvider } from "@clerk/react/internal"; import { InitialStateProvider } from "@clerk/shared/react"; import dynamic from "next/dynamic"; import { useRouter } from "next/navigation"; import React from "react"; import { useSafeLayoutEffect } from "../../client-boundary/hooks/useSafeLayoutEffect"; import { ClerkNextOptionsProvider, useClerkNextOptions } from "../../client-boundary/NextOptionsContext"; import { canUseKeyless } from "../../utils/feature-flags"; import { mergeNextClerkPropsWithEnv } from "../../utils/mergeNextClerkPropsWithEnv"; import { RouterTelemetry } from "../../utils/router-telemetry"; import { invalidateCacheAction } from "../server-actions"; import { ClerkScripts } from "./ClerkScripts"; import { useAwaitablePush } from "./useAwaitablePush"; import { useAwaitableReplace } from "./useAwaitableReplace"; const LazyCreateKeylessApplication = dynamic( () => import("./keyless-creator-reader.js").then((m) => m.KeylessCreatorOrReader) ); const NextClientClerkProvider = (props) => { const { __internal_invokeMiddlewareOnAuthStateChange = true, __internal_scriptsSlot, children } = props; const router = useRouter(); const push = useAwaitablePush(); const replace = useAwaitableReplace(); useSafeLayoutEffect(() => { window.__internal_onBeforeSetActive = (intent) => { return new Promise((resolve) => { var _a; const nextVersion = ((_a = window == null ? void 0 : window.next) == null ? void 0 : _a.version) || ""; if ((nextVersion.startsWith("15") || nextVersion.startsWith("16")) && intent === "sign-out") { resolve(); } else { void invalidateCacheAction().then(() => resolve()); } }); }; window.__internal_onAfterSetActive = () => { if (__internal_invokeMiddlewareOnAuthStateChange) { return router.refresh(); } }; }, []); const mergedProps = mergeNextClerkPropsWithEnv({ ...props, // @ts-expect-error Error because of the stricter types of internal `push` routerPush: push, // @ts-expect-error Error because of the stricter types of internal `replace` routerReplace: replace }); return /* @__PURE__ */ React.createElement(ClerkNextOptionsProvider, { options: mergedProps }, /* @__PURE__ */ React.createElement(ReactClerkProvider, { ...mergedProps }, /* @__PURE__ */ React.createElement(RouterTelemetry, null), __internal_scriptsSlot != null ? __internal_scriptsSlot : /* @__PURE__ */ React.createElement(ClerkScripts, null), children)); }; const ClientClerkProvider = (props) => { const { children, disableKeyless = false, ...rest } = props; const safePublishableKey = mergeNextClerkPropsWithEnv(rest).publishableKey; const isNested = Boolean(useClerkNextOptions()); if (isNested) { if (rest.initialState) { return /* @__PURE__ */ React.createElement(InitialStateProvider, { initialState: rest.initialState }, children); } return children; } if (safePublishableKey || !canUseKeyless || disableKeyless) { return /* @__PURE__ */ React.createElement(NextClientClerkProvider, { ...rest }, children); } return /* @__PURE__ */ React.createElement(LazyCreateKeylessApplication, null, /* @__PURE__ */ React.createElement(NextClientClerkProvider, { ...rest }, children)); }; export { ClientClerkProvider }; //# sourceMappingURL=ClerkProvider.js.map