import type { IAnyStateTreeNode } from 'mobx-state-tree'; /** * Connects the `model` to the redux devtools extension after loading the required * dependencies asynchronously. * * We have to apply a workaround to load `remotedev` by shimming the `global` object, * because `remotedev` uses an old version of `socketcluster-client` that refers to * `global` instead of `globalThis`. * * Due to the old dependencies, this function is not safe to call in production. * However, we don't bundle `remotedev` in production, so the call would fail anyways. * * @param model The store to connect to the redux devtools. * @see https://github.com/SocketCluster/socketcluster-client/issues/118#issuecomment-469064682 */ async function exposeToReduxDevtoolsAsync(model: IAnyStateTreeNode): Promise { (window as { global?: unknown }).global = window; const [remotedev, { connectReduxDevtools }] = await Promise.all([ // @ts-ignore import('remotedev'), import('mst-middlewares'), ]); connectReduxDevtools(remotedev, model); } /** * Connects the `model` to the redux devtools extension. * * @param model The store to connect to the redux devtools. */ export function exposeToReduxDevtools(model: IAnyStateTreeNode): void { exposeToReduxDevtoolsAsync(model).catch((err) => { console.error('Could not connect to Redux devtools', err); }); }