diff --git a/src/lib/react-shared-internals.ts b/src/lib/react-shared-internals.ts index c38c7c3..b741118 100644 --- a/src/lib/react-shared-internals.ts +++ b/src/lib/react-shared-internals.ts @@ -2,14 +2,33 @@ import * as React from 'react' type AnyHook = (...args: any[]) => any; type ReactSharedInternalsType = { + // React 18 and below ReactCurrentDispatcher: { current?: { [name: string]: AnyHook }; }; +} | { + // React 19 + H: { + [name: string]: AnyHook + } | null } -export const ReactSharedInternals = - (React as any).__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED as ReactSharedInternalsType +export const ReactSharedInternals: ReactSharedInternalsType = + (React as any).__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED ?? + (React as any).__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE ?? + (React as any).__SERVER_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE; -export const ReactCurrentDispatcher = ReactSharedInternals.ReactCurrentDispatcher +function resolveDispatcher() { + if("ReactCurrentDispatcher" in ReactSharedInternals) { + return ReactSharedInternals.ReactCurrentDispatcher; + } else { + return Object.defineProperty({}, 'current', { + get: () => ReactSharedInternals.H ?? undefined, + set: (v) => { ReactSharedInternals.H = v }, + }); + } +} + +export const ReactCurrentDispatcher = resolveDispatcher();