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