Resolve Symbol.observable at store creation time

This commit is contained in:
Nathan Bierema 2022-01-11 23:06:47 -05:00
parent 4ca5e23253
commit 8c48a73c28
3 changed files with 9 additions and 15 deletions

View File

@ -0,0 +1,3 @@
export default function getSymbolObservable() {
return (typeof Symbol === 'function' && Symbol.observable) || '@@observable';
}

View File

@ -1,16 +1,16 @@
import difference from 'lodash/difference';
import union from 'lodash/union';
import isPlainObject from 'lodash/isPlainObject';
import $$observable from './symbol-observable';
import {
Action,
Observable,
Observer,
PreloadedState,
Reducer,
Store,
StoreEnhancer,
StoreEnhancerStoreCreator,
} from 'redux';
import getSymbolObservable from './getSymbolObservable';
export const ActionTypes = {
PERFORM_ACTION: 'PERFORM_ACTION',
@ -903,6 +903,8 @@ export function unliftStore<
return action;
}
const $$observable = getSymbolObservable();
return {
liftedStore,
@ -924,10 +926,9 @@ export function unliftStore<
);
},
[$$observable](): Observable<S> {
[$$observable]() {
return {
...(liftedStore as any)[$$observable](),
subscribe(observer) {
subscribe(observer: Observer<S>) {
if (typeof observer !== 'object') {
throw new TypeError('Expected the observer to be an object.');
}

View File

@ -1,10 +0,0 @@
declare global {
interface SymbolConstructor {
readonly observable: symbol;
}
}
const $$observable = /* #__PURE__ */ (() =>
(typeof Symbol === 'function' && Symbol.observable) || '@@observable')();
export default $$observable;