import React from 'react'; import useSyncExternalStoreExports from 'use-sync-external-store/shim/with-selector.js'; import { createStore } from 'zustand/vanilla'; const { useSyncExternalStoreWithSelector } = useSyncExternalStoreExports; const identity = (arg) => arg; function useStoreWithEqualityFn(api, selector = identity, equalityFn) { const slice = useSyncExternalStoreWithSelector( api.subscribe, api.getState, api.getInitialState, selector, equalityFn ); React.useDebugValue(slice); return slice; } const createWithEqualityFnImpl = (createState, defaultEqualityFn) => { const api = createStore(createState); const useBoundStoreWithEqualityFn = (selector, equalityFn = defaultEqualityFn) => useStoreWithEqualityFn(api, selector, equalityFn); Object.assign(useBoundStoreWithEqualityFn, api); return useBoundStoreWithEqualityFn; }; const createWithEqualityFn = ((createState, defaultEqualityFn) => createState ? createWithEqualityFnImpl(createState, defaultEqualityFn) : createWithEqualityFnImpl); export { createWithEqualityFn, useStoreWithEqualityFn };