// eslint-disable-next-line no-restricted-globals type BrowserCallback = (params: { window: typeof window }) => TReturn; type SafelyRunOnBrowserOptions = { /** * Fallback to run on server environments. */ fallback: () => TReturn; }; /** * Runs code on browser environments safely. */ export function safelyRunOnBrowser( callback: BrowserCallback, { fallback }: SafelyRunOnBrowserOptions = { fallback: () => undefined as unknown as TReturn, } ): TReturn { // eslint-disable-next-line no-restricted-globals if (typeof window === 'undefined') { return fallback(); } // eslint-disable-next-line no-restricted-globals return callback({ window }); }