@clerk/nextjs
Version:
Clerk SDK for NextJS
70 lines • 3.45 kB
JavaScript
"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