1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111 |
- // src/utils/react.ts
- import * as ReactOriginal from "react";
- var React = (
- // prettier-ignore
- // @ts-ignore
- "default" in ReactOriginal ? ReactOriginal["default"] : ReactOriginal
- );
- // src/alternate-renderers.ts
- import { useSyncExternalStoreWithSelector as useSyncExternalStoreWithSelector2 } from "use-sync-external-store/with-selector.js";
- // src/components/Context.ts
- var ContextKey = Symbol.for(`react-redux-context`);
- var gT = typeof globalThis !== "undefined" ? globalThis : (
- /* fall back to a per-module scope (pre-8.1 behaviour) if `globalThis` is not available */
- {}
- );
- function getContext() {
- if (!React.createContext)
- return {};
- const contextMap = gT[ContextKey] ?? (gT[ContextKey] = /* @__PURE__ */ new Map());
- let realContext = contextMap.get(React.createContext);
- if (!realContext) {
- realContext = React.createContext(
- null
- );
- if (process.env.NODE_ENV !== "production") {
- realContext.displayName = "ReactRedux";
- }
- contextMap.set(React.createContext, realContext);
- }
- return realContext;
- }
- var ReactReduxContext = /* @__PURE__ */ getContext();
- // src/utils/useSyncExternalStore.ts
- var notInitialized = () => {
- throw new Error("uSES not initialized!");
- };
- // src/hooks/useReduxContext.ts
- function createReduxContextHook(context = ReactReduxContext) {
- return function useReduxContext2() {
- const contextValue = React.useContext(context);
- if (process.env.NODE_ENV !== "production" && !contextValue) {
- throw new Error(
- "could not find react-redux context value; please ensure the component is wrapped in a <Provider>"
- );
- }
- return contextValue;
- };
- }
- var useReduxContext = /* @__PURE__ */ createReduxContextHook();
- // src/hooks/useSelector.ts
- var useSyncExternalStoreWithSelector = notInitialized;
- var initializeUseSelector = (fn) => {
- useSyncExternalStoreWithSelector = fn;
- };
- var refEquality = (a, b) => a === b;
- function createSelectorHook(context = ReactReduxContext) {
- const useReduxContext2 = context === ReactReduxContext ? useReduxContext : createReduxContextHook(context);
- return function useSelector2(selector, equalityFnOrOptions = {}) {
- const { equalityFn = refEquality, devModeChecks = {} } = typeof equalityFnOrOptions === "function" ? { equalityFn: equalityFnOrOptions } : equalityFnOrOptions;
- if (process.env.NODE_ENV !== "production") {
- if (!selector) {
- throw new Error(`You must pass a selector to useSelector`);
- }
- if (typeof selector !== "function") {
- throw new Error(`You must pass a function as a selector to useSelector`);
- }
- if (typeof equalityFn !== "function") {
- throw new Error(
- `You must pass a function as an equality function to useSelector`
- );
- }
- }
- const {
- store,
- subscription,
- getServerState,
- stabilityCheck,
- identityFunctionCheck
- } = useReduxContext2();
- const firstRun = React.useRef(true);
- const wrappedSelector = React.useCallback(
- {
- [selector.name](state) {
- const selected = selector(state);
- if (process.env.NODE_ENV !== "production") {
- const {
- identityFunctionCheck: finalIdentityFunctionCheck,
- stabilityCheck: finalStabilityCheck
- } = {
- stabilityCheck,
- identityFunctionCheck,
- ...devModeChecks
- };
- if (finalStabilityCheck === "always" || finalStabilityCheck === "once" && firstRun.current) {
- const toCompare = selector(state);
- if (!equalityFn(selected, toCompare)) {
- let stack = void 0;
- try {
- throw new Error();
- } catch (e) {
- ;
- ({ stack } = e);
- }
- console.warn(
- "Selector " + (selector.name || "unknown") + " returned a different result when called with the same parameters. This can lead to unnecessary rerenders.\nSelectors that return a new reference (such as an object or an array) should be memoized: https://redux.js.org/usage/deriving-data-selectors#optimizing-selectors-with-memoization",
- {
- state,
- selected,
- selected2: toCompare,
- stack
- }
- );
- }
- }
- if (finalIdentityFunctionCheck === "always" || finalIdentityFunctionCheck === "once" && firstRun.current) {
- if (selected === state) {
- let stack = void 0;
- try {
- throw new Error();
- } catch (e) {
- ;
- ({ stack } = e);
- }
- console.warn(
- "Selector " + (selector.name || "unknown") + " returned the root state when called. This can lead to unnecessary rerenders.\nSelectors that return the entire state are almost certainly a mistake, as they will cause a rerender whenever *anything* in state changes.",
- { stack }
- );
- }
- }
- if (firstRun.current)
- firstRun.current = false;
- }
- return selected;
- }
- }[selector.name],
- [selector, stabilityCheck, devModeChecks.stabilityCheck]
- );
- const selectedState = useSyncExternalStoreWithSelector(
- subscription.addNestedSub,
- store.getState,
- getServerState || store.getState,
- wrappedSelector,
- equalityFn
- );
- React.useDebugValue(selectedState);
- return selectedState;
- };
- }
- var useSelector = /* @__PURE__ */ createSelectorHook();
- // src/utils/react-is.ts
- var REACT_ELEMENT_TYPE = Symbol.for("react.element");
- var REACT_PORTAL_TYPE = Symbol.for("react.portal");
- var REACT_FRAGMENT_TYPE = Symbol.for("react.fragment");
- var REACT_STRICT_MODE_TYPE = Symbol.for("react.strict_mode");
- var REACT_PROFILER_TYPE = Symbol.for("react.profiler");
- var REACT_PROVIDER_TYPE = Symbol.for("react.provider");
- var REACT_CONTEXT_TYPE = Symbol.for("react.context");
- var REACT_SERVER_CONTEXT_TYPE = Symbol.for("react.server_context");
- var REACT_FORWARD_REF_TYPE = Symbol.for("react.forward_ref");
- var REACT_SUSPENSE_TYPE = Symbol.for("react.suspense");
- var REACT_SUSPENSE_LIST_TYPE = Symbol.for("react.suspense_list");
- var REACT_MEMO_TYPE = Symbol.for("react.memo");
- var REACT_LAZY_TYPE = Symbol.for("react.lazy");
- var REACT_OFFSCREEN_TYPE = Symbol.for("react.offscreen");
- var REACT_CLIENT_REFERENCE = Symbol.for("react.client.reference");
- var ForwardRef = REACT_FORWARD_REF_TYPE;
- var Memo = REACT_MEMO_TYPE;
- function isValidElementType(type) {
- if (typeof type === "string" || typeof type === "function") {
- return true;
- }
- if (type === REACT_FRAGMENT_TYPE || type === REACT_PROFILER_TYPE || type === REACT_STRICT_MODE_TYPE || type === REACT_SUSPENSE_TYPE || type === REACT_SUSPENSE_LIST_TYPE || type === REACT_OFFSCREEN_TYPE) {
- return true;
- }
- if (typeof type === "object" && type !== null) {
- if (type.$$typeof === REACT_LAZY_TYPE || type.$$typeof === REACT_MEMO_TYPE || type.$$typeof === REACT_PROVIDER_TYPE || type.$$typeof === REACT_CONTEXT_TYPE || type.$$typeof === REACT_FORWARD_REF_TYPE || // This needs to include all possible module reference object
- // types supported by any Flight configuration anywhere since
- // we don't know which Flight build this will end up being used
- // with.
- type.$$typeof === REACT_CLIENT_REFERENCE || type.getModuleId !== void 0) {
- return true;
- }
- }
- return false;
- }
- function typeOf(object) {
- if (typeof object === "object" && object !== null) {
- const $$typeof = object.$$typeof;
- switch ($$typeof) {
- case REACT_ELEMENT_TYPE: {
- const type = object.type;
- switch (type) {
- case REACT_FRAGMENT_TYPE:
- case REACT_PROFILER_TYPE:
- case REACT_STRICT_MODE_TYPE:
- case REACT_SUSPENSE_TYPE:
- case REACT_SUSPENSE_LIST_TYPE:
- return type;
- default: {
- const $$typeofType = type && type.$$typeof;
- switch ($$typeofType) {
- case REACT_SERVER_CONTEXT_TYPE:
- case REACT_CONTEXT_TYPE:
- case REACT_FORWARD_REF_TYPE:
- case REACT_LAZY_TYPE:
- case REACT_MEMO_TYPE:
- case REACT_PROVIDER_TYPE:
- return $$typeofType;
- default:
- return $$typeof;
- }
- }
- }
- }
- case REACT_PORTAL_TYPE: {
- return $$typeof;
- }
- }
- }
- return void 0;
- }
- function isContextConsumer(object) {
- return typeOf(object) === REACT_CONTEXT_TYPE;
- }
- function isMemo(object) {
- return typeOf(object) === REACT_MEMO_TYPE;
- }
- // src/utils/warning.ts
- function warning(message) {
- if (typeof console !== "undefined" && typeof console.error === "function") {
- console.error(message);
- }
- try {
- throw new Error(message);
- } catch (e) {
- }
- }
- // src/connect/verifySubselectors.ts
- function verify(selector, methodName) {
- if (!selector) {
- throw new Error(`Unexpected value for ${methodName} in connect.`);
- } else if (methodName === "mapStateToProps" || methodName === "mapDispatchToProps") {
- if (!Object.prototype.hasOwnProperty.call(selector, "dependsOnOwnProps")) {
- warning(
- `The selector for ${methodName} of connect did not specify a value for dependsOnOwnProps.`
- );
- }
- }
- }
- function verifySubselectors(mapStateToProps, mapDispatchToProps, mergeProps) {
- verify(mapStateToProps, "mapStateToProps");
- verify(mapDispatchToProps, "mapDispatchToProps");
- verify(mergeProps, "mergeProps");
- }
- // src/connect/selectorFactory.ts
- function pureFinalPropsSelectorFactory(mapStateToProps, mapDispatchToProps, mergeProps, dispatch, {
- areStatesEqual,
- areOwnPropsEqual,
- areStatePropsEqual
- }) {
- let hasRunAtLeastOnce = false;
- let state;
- let ownProps;
- let stateProps;
- let dispatchProps;
- let mergedProps;
- function handleFirstCall(firstState, firstOwnProps) {
- state = firstState;
- ownProps = firstOwnProps;
- stateProps = mapStateToProps(state, ownProps);
- dispatchProps = mapDispatchToProps(dispatch, ownProps);
- mergedProps = mergeProps(stateProps, dispatchProps, ownProps);
- hasRunAtLeastOnce = true;
- return mergedProps;
- }
- function handleNewPropsAndNewState() {
- stateProps = mapStateToProps(state, ownProps);
- if (mapDispatchToProps.dependsOnOwnProps)
- dispatchProps = mapDispatchToProps(dispatch, ownProps);
- mergedProps = mergeProps(stateProps, dispatchProps, ownProps);
- return mergedProps;
- }
- function handleNewProps() {
- if (mapStateToProps.dependsOnOwnProps)
- stateProps = mapStateToProps(state, ownProps);
- if (mapDispatchToProps.dependsOnOwnProps)
- dispatchProps = mapDispatchToProps(dispatch, ownProps);
- mergedProps = mergeProps(stateProps, dispatchProps, ownProps);
- return mergedProps;
- }
- function handleNewState() {
- const nextStateProps = mapStateToProps(state, ownProps);
- const statePropsChanged = !areStatePropsEqual(nextStateProps, stateProps);
- stateProps = nextStateProps;
- if (statePropsChanged)
- mergedProps = mergeProps(stateProps, dispatchProps, ownProps);
- return mergedProps;
- }
- function handleSubsequentCalls(nextState, nextOwnProps) {
- const propsChanged = !areOwnPropsEqual(nextOwnProps, ownProps);
- const stateChanged = !areStatesEqual(
- nextState,
- state,
- nextOwnProps,
- ownProps
- );
- state = nextState;
- ownProps = nextOwnProps;
- if (propsChanged && stateChanged)
- return handleNewPropsAndNewState();
- if (propsChanged)
- return handleNewProps();
- if (stateChanged)
- return handleNewState();
- return mergedProps;
- }
- return function pureFinalPropsSelector(nextState, nextOwnProps) {
- return hasRunAtLeastOnce ? handleSubsequentCalls(nextState, nextOwnProps) : handleFirstCall(nextState, nextOwnProps);
- };
- }
- function finalPropsSelectorFactory(dispatch, {
- initMapStateToProps,
- initMapDispatchToProps,
- initMergeProps,
- ...options
- }) {
- const mapStateToProps = initMapStateToProps(dispatch, options);
- const mapDispatchToProps = initMapDispatchToProps(dispatch, options);
- const mergeProps = initMergeProps(dispatch, options);
- if (process.env.NODE_ENV !== "production") {
- verifySubselectors(mapStateToProps, mapDispatchToProps, mergeProps);
- }
- return pureFinalPropsSelectorFactory(mapStateToProps, mapDispatchToProps, mergeProps, dispatch, options);
- }
- // src/utils/bindActionCreators.ts
- function bindActionCreators(actionCreators, dispatch) {
- const boundActionCreators = {};
- for (const key in actionCreators) {
- const actionCreator = actionCreators[key];
- if (typeof actionCreator === "function") {
- boundActionCreators[key] = (...args) => dispatch(actionCreator(...args));
- }
- }
- return boundActionCreators;
- }
- // src/utils/isPlainObject.ts
- function isPlainObject(obj) {
- if (typeof obj !== "object" || obj === null)
- return false;
- let proto = Object.getPrototypeOf(obj);
- if (proto === null)
- return true;
- let baseProto = proto;
- while (Object.getPrototypeOf(baseProto) !== null) {
- baseProto = Object.getPrototypeOf(baseProto);
- }
- return proto === baseProto;
- }
- // src/utils/verifyPlainObject.ts
- function verifyPlainObject(value, displayName, methodName) {
- if (!isPlainObject(value)) {
- warning(
- `${methodName}() in ${displayName} must return a plain object. Instead received ${value}.`
- );
- }
- }
- // src/connect/wrapMapToProps.ts
- function wrapMapToPropsConstant(getConstant) {
- return function initConstantSelector(dispatch) {
- const constant = getConstant(dispatch);
- function constantSelector() {
- return constant;
- }
- constantSelector.dependsOnOwnProps = false;
- return constantSelector;
- };
- }
- function getDependsOnOwnProps(mapToProps) {
- return mapToProps.dependsOnOwnProps ? Boolean(mapToProps.dependsOnOwnProps) : mapToProps.length !== 1;
- }
- function wrapMapToPropsFunc(mapToProps, methodName) {
- return function initProxySelector(dispatch, { displayName }) {
- const proxy = function mapToPropsProxy(stateOrDispatch, ownProps) {
- return proxy.dependsOnOwnProps ? proxy.mapToProps(stateOrDispatch, ownProps) : proxy.mapToProps(stateOrDispatch, void 0);
- };
- proxy.dependsOnOwnProps = true;
- proxy.mapToProps = function detectFactoryAndVerify(stateOrDispatch, ownProps) {
- proxy.mapToProps = mapToProps;
- proxy.dependsOnOwnProps = getDependsOnOwnProps(mapToProps);
- let props = proxy(stateOrDispatch, ownProps);
- if (typeof props === "function") {
- proxy.mapToProps = props;
- proxy.dependsOnOwnProps = getDependsOnOwnProps(props);
- props = proxy(stateOrDispatch, ownProps);
- }
- if (process.env.NODE_ENV !== "production")
- verifyPlainObject(props, displayName, methodName);
- return props;
- };
- return proxy;
- };
- }
- // src/connect/invalidArgFactory.ts
- function createInvalidArgFactory(arg, name) {
- return (dispatch, options) => {
- throw new Error(
- `Invalid value of type ${typeof arg} for ${name} argument when connecting component ${options.wrappedComponentName}.`
- );
- };
- }
- // src/connect/mapDispatchToProps.ts
- function mapDispatchToPropsFactory(mapDispatchToProps) {
- return mapDispatchToProps && typeof mapDispatchToProps === "object" ? wrapMapToPropsConstant(
- (dispatch) => (
- // @ts-ignore
- bindActionCreators(mapDispatchToProps, dispatch)
- )
- ) : !mapDispatchToProps ? wrapMapToPropsConstant((dispatch) => ({
- dispatch
- })) : typeof mapDispatchToProps === "function" ? (
- // @ts-ignore
- wrapMapToPropsFunc(mapDispatchToProps, "mapDispatchToProps")
- ) : createInvalidArgFactory(mapDispatchToProps, "mapDispatchToProps");
- }
- // src/connect/mapStateToProps.ts
- function mapStateToPropsFactory(mapStateToProps) {
- return !mapStateToProps ? wrapMapToPropsConstant(() => ({})) : typeof mapStateToProps === "function" ? (
- // @ts-ignore
- wrapMapToPropsFunc(mapStateToProps, "mapStateToProps")
- ) : createInvalidArgFactory(mapStateToProps, "mapStateToProps");
- }
- // src/connect/mergeProps.ts
- function defaultMergeProps(stateProps, dispatchProps, ownProps) {
- return { ...ownProps, ...stateProps, ...dispatchProps };
- }
- function wrapMergePropsFunc(mergeProps) {
- return function initMergePropsProxy(dispatch, { displayName, areMergedPropsEqual }) {
- let hasRunOnce = false;
- let mergedProps;
- return function mergePropsProxy(stateProps, dispatchProps, ownProps) {
- const nextMergedProps = mergeProps(stateProps, dispatchProps, ownProps);
- if (hasRunOnce) {
- if (!areMergedPropsEqual(nextMergedProps, mergedProps))
- mergedProps = nextMergedProps;
- } else {
- hasRunOnce = true;
- mergedProps = nextMergedProps;
- if (process.env.NODE_ENV !== "production")
- verifyPlainObject(mergedProps, displayName, "mergeProps");
- }
- return mergedProps;
- };
- };
- }
- function mergePropsFactory(mergeProps) {
- return !mergeProps ? () => defaultMergeProps : typeof mergeProps === "function" ? wrapMergePropsFunc(mergeProps) : createInvalidArgFactory(mergeProps, "mergeProps");
- }
- // src/utils/batch.ts
- function defaultNoopBatch(callback) {
- callback();
- }
- var batch = defaultNoopBatch;
- var getBatch = () => batch;
- // src/utils/Subscription.ts
- function createListenerCollection() {
- const batch3 = getBatch();
- let first = null;
- let last = null;
- return {
- clear() {
- first = null;
- last = null;
- },
- notify() {
- batch3(() => {
- let listener = first;
- while (listener) {
- listener.callback();
- listener = listener.next;
- }
- });
- },
- get() {
- let listeners = [];
- let listener = first;
- while (listener) {
- listeners.push(listener);
- listener = listener.next;
- }
- return listeners;
- },
- subscribe(callback) {
- let isSubscribed = true;
- let listener = last = {
- callback,
- next: null,
- prev: last
- };
- if (listener.prev) {
- listener.prev.next = listener;
- } else {
- first = listener;
- }
- return function unsubscribe() {
- if (!isSubscribed || first === null)
- return;
- isSubscribed = false;
- if (listener.next) {
- listener.next.prev = listener.prev;
- } else {
- last = listener.prev;
- }
- if (listener.prev) {
- listener.prev.next = listener.next;
- } else {
- first = listener.next;
- }
- };
- }
- };
- }
- var nullListeners = {
- notify() {
- },
- get: () => []
- };
- function createSubscription(store, parentSub) {
- let unsubscribe;
- let listeners = nullListeners;
- let subscriptionsAmount = 0;
- let selfSubscribed = false;
- function addNestedSub(listener) {
- trySubscribe();
- const cleanupListener = listeners.subscribe(listener);
- let removed = false;
- return () => {
- if (!removed) {
- removed = true;
- cleanupListener();
- tryUnsubscribe();
- }
- };
- }
- function notifyNestedSubs() {
- listeners.notify();
- }
- function handleChangeWrapper() {
- if (subscription.onStateChange) {
- subscription.onStateChange();
- }
- }
- function isSubscribed() {
- return selfSubscribed;
- }
- function trySubscribe() {
- subscriptionsAmount++;
- if (!unsubscribe) {
- unsubscribe = parentSub ? parentSub.addNestedSub(handleChangeWrapper) : store.subscribe(handleChangeWrapper);
- listeners = createListenerCollection();
- }
- }
- function tryUnsubscribe() {
- subscriptionsAmount--;
- if (unsubscribe && subscriptionsAmount === 0) {
- unsubscribe();
- unsubscribe = void 0;
- listeners.clear();
- listeners = nullListeners;
- }
- }
- function trySubscribeSelf() {
- if (!selfSubscribed) {
- selfSubscribed = true;
- trySubscribe();
- }
- }
- function tryUnsubscribeSelf() {
- if (selfSubscribed) {
- selfSubscribed = false;
- tryUnsubscribe();
- }
- }
- const subscription = {
- addNestedSub,
- notifyNestedSubs,
- handleChangeWrapper,
- isSubscribed,
- trySubscribe: trySubscribeSelf,
- tryUnsubscribe: tryUnsubscribeSelf,
- getListeners: () => listeners
- };
- return subscription;
- }
- // src/utils/useIsomorphicLayoutEffect.ts
- var canUseDOM = !!(typeof window !== "undefined" && typeof window.document !== "undefined" && typeof window.document.createElement !== "undefined");
- var useIsomorphicLayoutEffect = canUseDOM ? React.useLayoutEffect : React.useEffect;
- // src/utils/shallowEqual.ts
- function is(x, y) {
- if (x === y) {
- return x !== 0 || y !== 0 || 1 / x === 1 / y;
- } else {
- return x !== x && y !== y;
- }
- }
- function shallowEqual(objA, objB) {
- if (is(objA, objB))
- return true;
- if (typeof objA !== "object" || objA === null || typeof objB !== "object" || objB === null) {
- return false;
- }
- const keysA = Object.keys(objA);
- const keysB = Object.keys(objB);
- if (keysA.length !== keysB.length)
- return false;
- for (let i = 0; i < keysA.length; i++) {
- if (!Object.prototype.hasOwnProperty.call(objB, keysA[i]) || !is(objA[keysA[i]], objB[keysA[i]])) {
- return false;
- }
- }
- return true;
- }
- // src/utils/hoistStatics.ts
- var REACT_STATICS = {
- childContextTypes: true,
- contextType: true,
- contextTypes: true,
- defaultProps: true,
- displayName: true,
- getDefaultProps: true,
- getDerivedStateFromError: true,
- getDerivedStateFromProps: true,
- mixins: true,
- propTypes: true,
- type: true
- };
- var KNOWN_STATICS = {
- name: true,
- length: true,
- prototype: true,
- caller: true,
- callee: true,
- arguments: true,
- arity: true
- };
- var FORWARD_REF_STATICS = {
- $$typeof: true,
- render: true,
- defaultProps: true,
- displayName: true,
- propTypes: true
- };
- var MEMO_STATICS = {
- $$typeof: true,
- compare: true,
- defaultProps: true,
- displayName: true,
- propTypes: true,
- type: true
- };
- var TYPE_STATICS = {
- [ForwardRef]: FORWARD_REF_STATICS,
- [Memo]: MEMO_STATICS
- };
- function getStatics(component) {
- if (isMemo(component)) {
- return MEMO_STATICS;
- }
- return TYPE_STATICS[component["$$typeof"]] || REACT_STATICS;
- }
- var defineProperty = Object.defineProperty;
- var getOwnPropertyNames = Object.getOwnPropertyNames;
- var getOwnPropertySymbols = Object.getOwnPropertySymbols;
- var getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;
- var getPrototypeOf = Object.getPrototypeOf;
- var objectPrototype = Object.prototype;
- function hoistNonReactStatics(targetComponent, sourceComponent) {
- if (typeof sourceComponent !== "string") {
- if (objectPrototype) {
- const inheritedComponent = getPrototypeOf(sourceComponent);
- if (inheritedComponent && inheritedComponent !== objectPrototype) {
- hoistNonReactStatics(targetComponent, inheritedComponent);
- }
- }
- let keys = getOwnPropertyNames(sourceComponent);
- if (getOwnPropertySymbols) {
- keys = keys.concat(getOwnPropertySymbols(sourceComponent));
- }
- const targetStatics = getStatics(targetComponent);
- const sourceStatics = getStatics(sourceComponent);
- for (let i = 0; i < keys.length; ++i) {
- const key = keys[i];
- if (!KNOWN_STATICS[key] && !(sourceStatics && sourceStatics[key]) && !(targetStatics && targetStatics[key])) {
- const descriptor = getOwnPropertyDescriptor(sourceComponent, key);
- try {
- defineProperty(targetComponent, key, descriptor);
- } catch (e) {
- }
- }
- }
- }
- return targetComponent;
- }
- // src/components/connect.tsx
- var useSyncExternalStore = notInitialized;
- var initializeConnect = (fn) => {
- useSyncExternalStore = fn;
- };
- var NO_SUBSCRIPTION_ARRAY = [null, null];
- var stringifyComponent = (Comp) => {
- try {
- return JSON.stringify(Comp);
- } catch (err) {
- return String(Comp);
- }
- };
- function useIsomorphicLayoutEffectWithArgs(effectFunc, effectArgs, dependencies) {
- useIsomorphicLayoutEffect(() => effectFunc(...effectArgs), dependencies);
- }
- function captureWrapperProps(lastWrapperProps, lastChildProps, renderIsScheduled, wrapperProps, childPropsFromStoreUpdate, notifyNestedSubs) {
- lastWrapperProps.current = wrapperProps;
- renderIsScheduled.current = false;
- if (childPropsFromStoreUpdate.current) {
- childPropsFromStoreUpdate.current = null;
- notifyNestedSubs();
- }
- }
- function subscribeUpdates(shouldHandleStateChanges, store, subscription, childPropsSelector, lastWrapperProps, lastChildProps, renderIsScheduled, isMounted, childPropsFromStoreUpdate, notifyNestedSubs, additionalSubscribeListener) {
- if (!shouldHandleStateChanges)
- return () => {
- };
- let didUnsubscribe = false;
- let lastThrownError = null;
- const checkForUpdates = () => {
- if (didUnsubscribe || !isMounted.current) {
- return;
- }
- const latestStoreState = store.getState();
- let newChildProps, error;
- try {
- newChildProps = childPropsSelector(
- latestStoreState,
- lastWrapperProps.current
- );
- } catch (e) {
- error = e;
- lastThrownError = e;
- }
- if (!error) {
- lastThrownError = null;
- }
- if (newChildProps === lastChildProps.current) {
- if (!renderIsScheduled.current) {
- notifyNestedSubs();
- }
- } else {
- lastChildProps.current = newChildProps;
- childPropsFromStoreUpdate.current = newChildProps;
- renderIsScheduled.current = true;
- additionalSubscribeListener();
- }
- };
- subscription.onStateChange = checkForUpdates;
- subscription.trySubscribe();
- checkForUpdates();
- const unsubscribeWrapper = () => {
- didUnsubscribe = true;
- subscription.tryUnsubscribe();
- subscription.onStateChange = null;
- if (lastThrownError) {
- throw lastThrownError;
- }
- };
- return unsubscribeWrapper;
- }
- function strictEqual(a, b) {
- return a === b;
- }
- var hasWarnedAboutDeprecatedPureOption = false;
- function connect(mapStateToProps, mapDispatchToProps, mergeProps, {
- // The `pure` option has been removed, so TS doesn't like us destructuring this to check its existence.
- // @ts-ignore
- pure,
- areStatesEqual = strictEqual,
- areOwnPropsEqual = shallowEqual,
- areStatePropsEqual = shallowEqual,
- areMergedPropsEqual = shallowEqual,
- // use React's forwardRef to expose a ref of the wrapped component
- forwardRef = false,
- // the context consumer to use
- context = ReactReduxContext
- } = {}) {
- if (process.env.NODE_ENV !== "production") {
- if (pure !== void 0 && !hasWarnedAboutDeprecatedPureOption) {
- hasWarnedAboutDeprecatedPureOption = true;
- warning(
- 'The `pure` option has been removed. `connect` is now always a "pure/memoized" component'
- );
- }
- }
- const Context = context;
- const initMapStateToProps = mapStateToPropsFactory(mapStateToProps);
- const initMapDispatchToProps = mapDispatchToPropsFactory(mapDispatchToProps);
- const initMergeProps = mergePropsFactory(mergeProps);
- const shouldHandleStateChanges = Boolean(mapStateToProps);
- const wrapWithConnect = (WrappedComponent) => {
- if (process.env.NODE_ENV !== "production") {
- const isValid = /* @__PURE__ */ isValidElementType(WrappedComponent);
- if (!isValid)
- throw new Error(
- `You must pass a component to the function returned by connect. Instead received ${stringifyComponent(
- WrappedComponent
- )}`
- );
- }
- const wrappedComponentName = WrappedComponent.displayName || WrappedComponent.name || "Component";
- const displayName = `Connect(${wrappedComponentName})`;
- const selectorFactoryOptions = {
- shouldHandleStateChanges,
- displayName,
- wrappedComponentName,
- WrappedComponent,
- // @ts-ignore
- initMapStateToProps,
- // @ts-ignore
- initMapDispatchToProps,
- initMergeProps,
- areStatesEqual,
- areStatePropsEqual,
- areOwnPropsEqual,
- areMergedPropsEqual
- };
- function ConnectFunction(props) {
- const [propsContext, reactReduxForwardedRef, wrapperProps] = React.useMemo(() => {
- const { reactReduxForwardedRef: reactReduxForwardedRef2, ...wrapperProps2 } = props;
- return [props.context, reactReduxForwardedRef2, wrapperProps2];
- }, [props]);
- const ContextToUse = React.useMemo(() => {
- let ResultContext = Context;
- if (propsContext?.Consumer) {
- if (process.env.NODE_ENV !== "production") {
- const isValid = /* @__PURE__ */ isContextConsumer(
- // @ts-ignore
- /* @__PURE__ */ React.createElement(propsContext.Consumer, null)
- );
- if (!isValid) {
- throw new Error(
- "You must pass a valid React context consumer as `props.context`"
- );
- }
- ResultContext = propsContext;
- }
- }
- return ResultContext;
- }, [propsContext, Context]);
- const contextValue = React.useContext(ContextToUse);
- const didStoreComeFromProps = Boolean(props.store) && Boolean(props.store.getState) && Boolean(props.store.dispatch);
- const didStoreComeFromContext = Boolean(contextValue) && Boolean(contextValue.store);
- if (process.env.NODE_ENV !== "production" && !didStoreComeFromProps && !didStoreComeFromContext) {
- throw new Error(
- `Could not find "store" in the context of "${displayName}". Either wrap the root component in a <Provider>, or pass a custom React context provider to <Provider> and the corresponding React context consumer to ${displayName} in connect options.`
- );
- }
- const store = didStoreComeFromProps ? props.store : contextValue.store;
- const getServerState = didStoreComeFromContext ? contextValue.getServerState : store.getState;
- const childPropsSelector = React.useMemo(() => {
- return finalPropsSelectorFactory(store.dispatch, selectorFactoryOptions);
- }, [store]);
- const [subscription, notifyNestedSubs] = React.useMemo(() => {
- if (!shouldHandleStateChanges)
- return NO_SUBSCRIPTION_ARRAY;
- const subscription2 = createSubscription(
- store,
- didStoreComeFromProps ? void 0 : contextValue.subscription
- );
- const notifyNestedSubs2 = subscription2.notifyNestedSubs.bind(subscription2);
- return [subscription2, notifyNestedSubs2];
- }, [store, didStoreComeFromProps, contextValue]);
- const overriddenContextValue = React.useMemo(() => {
- if (didStoreComeFromProps) {
- return contextValue;
- }
- return {
- ...contextValue,
- subscription
- };
- }, [didStoreComeFromProps, contextValue, subscription]);
- const lastChildProps = React.useRef();
- const lastWrapperProps = React.useRef(wrapperProps);
- const childPropsFromStoreUpdate = React.useRef();
- const renderIsScheduled = React.useRef(false);
- const isProcessingDispatch = React.useRef(false);
- const isMounted = React.useRef(false);
- const latestSubscriptionCallbackError = React.useRef();
- useIsomorphicLayoutEffect(() => {
- isMounted.current = true;
- return () => {
- isMounted.current = false;
- };
- }, []);
- const actualChildPropsSelector = React.useMemo(() => {
- const selector = () => {
- if (childPropsFromStoreUpdate.current && wrapperProps === lastWrapperProps.current) {
- return childPropsFromStoreUpdate.current;
- }
- return childPropsSelector(store.getState(), wrapperProps);
- };
- return selector;
- }, [store, wrapperProps]);
- const subscribeForReact = React.useMemo(() => {
- const subscribe = (reactListener) => {
- if (!subscription) {
- return () => {
- };
- }
- return subscribeUpdates(
- shouldHandleStateChanges,
- store,
- subscription,
- // @ts-ignore
- childPropsSelector,
- lastWrapperProps,
- lastChildProps,
- renderIsScheduled,
- isMounted,
- childPropsFromStoreUpdate,
- notifyNestedSubs,
- reactListener
- );
- };
- return subscribe;
- }, [subscription]);
- useIsomorphicLayoutEffectWithArgs(captureWrapperProps, [
- lastWrapperProps,
- lastChildProps,
- renderIsScheduled,
- wrapperProps,
- childPropsFromStoreUpdate,
- notifyNestedSubs
- ]);
- let actualChildProps;
- try {
- actualChildProps = useSyncExternalStore(
- // TODO We're passing through a big wrapper that does a bunch of extra side effects besides subscribing
- subscribeForReact,
- // TODO This is incredibly hacky. We've already processed the store update and calculated new child props,
- // TODO and we're just passing that through so it triggers a re-render for us rather than relying on `uSES`.
- actualChildPropsSelector,
- getServerState ? () => childPropsSelector(getServerState(), wrapperProps) : actualChildPropsSelector
- );
- } catch (err) {
- if (latestSubscriptionCallbackError.current) {
- ;
- err.message += `
- The error may be correlated with this previous error:
- ${latestSubscriptionCallbackError.current.stack}
- `;
- }
- throw err;
- }
- useIsomorphicLayoutEffect(() => {
- latestSubscriptionCallbackError.current = void 0;
- childPropsFromStoreUpdate.current = void 0;
- lastChildProps.current = actualChildProps;
- });
- const renderedWrappedComponent = React.useMemo(() => {
- return (
- // @ts-ignore
- /* @__PURE__ */ React.createElement(
- WrappedComponent,
- {
- ...actualChildProps,
- ref: reactReduxForwardedRef
- }
- )
- );
- }, [reactReduxForwardedRef, WrappedComponent, actualChildProps]);
- const renderedChild = React.useMemo(() => {
- if (shouldHandleStateChanges) {
- return /* @__PURE__ */ React.createElement(ContextToUse.Provider, { value: overriddenContextValue }, renderedWrappedComponent);
- }
- return renderedWrappedComponent;
- }, [ContextToUse, renderedWrappedComponent, overriddenContextValue]);
- return renderedChild;
- }
- const _Connect = React.memo(ConnectFunction);
- const Connect = _Connect;
- Connect.WrappedComponent = WrappedComponent;
- Connect.displayName = ConnectFunction.displayName = displayName;
- if (forwardRef) {
- const _forwarded = React.forwardRef(function forwardConnectRef(props, ref) {
- return /* @__PURE__ */ React.createElement(Connect, { ...props, reactReduxForwardedRef: ref });
- });
- const forwarded = _forwarded;
- forwarded.displayName = displayName;
- forwarded.WrappedComponent = WrappedComponent;
- return /* @__PURE__ */ hoistNonReactStatics(forwarded, WrappedComponent);
- }
- return /* @__PURE__ */ hoistNonReactStatics(Connect, WrappedComponent);
- };
- return wrapWithConnect;
- }
- var connect_default = connect;
- // src/components/Provider.tsx
- function Provider({
- store,
- context,
- children,
- serverState,
- stabilityCheck = "once",
- identityFunctionCheck = "once"
- }) {
- const contextValue = React.useMemo(() => {
- const subscription = createSubscription(store);
- return {
- store,
- subscription,
- getServerState: serverState ? () => serverState : void 0,
- stabilityCheck,
- identityFunctionCheck
- };
- }, [store, serverState, stabilityCheck, identityFunctionCheck]);
- const previousState = React.useMemo(() => store.getState(), [store]);
- useIsomorphicLayoutEffect(() => {
- const { subscription } = contextValue;
- subscription.onStateChange = subscription.notifyNestedSubs;
- subscription.trySubscribe();
- if (previousState !== store.getState()) {
- subscription.notifyNestedSubs();
- }
- return () => {
- subscription.tryUnsubscribe();
- subscription.onStateChange = void 0;
- };
- }, [contextValue, previousState]);
- const Context = context || ReactReduxContext;
- return /* @__PURE__ */ React.createElement(Context.Provider, { value: contextValue }, children);
- }
- var Provider_default = Provider;
- // src/hooks/useStore.ts
- function createStoreHook(context = ReactReduxContext) {
- const useReduxContext2 = (
- // @ts-ignore
- context === ReactReduxContext ? useReduxContext : (
- // @ts-ignore
- createReduxContextHook(context)
- )
- );
- return function useStore2() {
- const { store } = useReduxContext2();
- return store;
- };
- }
- var useStore = /* @__PURE__ */ createStoreHook();
- // src/hooks/useDispatch.ts
- function createDispatchHook(context = ReactReduxContext) {
- const useStore2 = (
- // @ts-ignore
- context === ReactReduxContext ? useStore : createStoreHook(context)
- );
- return function useDispatch2() {
- const store = useStore2();
- return store.dispatch;
- };
- }
- var useDispatch = /* @__PURE__ */ createDispatchHook();
- // src/alternate-renderers.ts
- initializeUseSelector(useSyncExternalStoreWithSelector2);
- initializeConnect(React.useSyncExternalStore);
- var batch2 = getBatch();
- export {
- Provider_default as Provider,
- ReactReduxContext,
- batch2 as batch,
- connect_default as connect,
- createDispatchHook,
- createSelectorHook,
- createStoreHook,
- shallowEqual,
- useDispatch,
- useSelector,
- useStore
- };
- //# sourceMappingURL=react-redux.alternate-renderers.mjs.map
|