From 3fae7adc4ad19939c77d34a7e98460e573e960ff Mon Sep 17 00:00:00 2001 From: Jerko Steiner Date: Sun, 17 Mar 2019 19:42:26 +0500 Subject: [PATCH] Add isClientSide helper for server-side rendering --- packages/client/src/renderer/index.ts | 1 + .../client/src/renderer/isClientSide.test.ts | 27 +++++++++++++++++++ packages/client/src/renderer/isClientSide.ts | 5 ++++ 3 files changed, 33 insertions(+) create mode 100644 packages/client/src/renderer/isClientSide.test.ts create mode 100644 packages/client/src/renderer/isClientSide.ts diff --git a/packages/client/src/renderer/index.ts b/packages/client/src/renderer/index.ts index cb6e9f5..5614ea8 100644 --- a/packages/client/src/renderer/index.ts +++ b/packages/client/src/renderer/index.ts @@ -2,3 +2,4 @@ export * from './ClientRenderer' export * from './IClientConfig' export * from './IRenderer' export * from './IStoreFactory' +export * from './isClientSide' diff --git a/packages/client/src/renderer/isClientSide.test.ts b/packages/client/src/renderer/isClientSide.test.ts new file mode 100644 index 0000000..8b20f80 --- /dev/null +++ b/packages/client/src/renderer/isClientSide.test.ts @@ -0,0 +1,27 @@ +import {isClientSide} from './isClientSide' + +describe('isClientSide', () => { + + describe('client', () => { + it('returns true when running in browser', () => { + expect(isClientSide()).toBe(true) + }) + }) + + describe('server', () => { + + const g: any = global + const window = g.window + beforeEach(() => { + delete g.window + }) + + afterEach(() => { + g.window = window + }) + it('returns false when running on server', () => { + expect(isClientSide()).toBe(false) + }) + }) + +}) diff --git a/packages/client/src/renderer/isClientSide.ts b/packages/client/src/renderer/isClientSide.ts new file mode 100644 index 0000000..d907866 --- /dev/null +++ b/packages/client/src/renderer/isClientSide.ts @@ -0,0 +1,5 @@ +export function isClientSide() { + return typeof window !== 'undefined' && + typeof window.document !== 'undefined' && + typeof window.document.createElement === 'function' +}