From e8f35e203cf30e9f331bd5e06f3d652445bc9b2a Mon Sep 17 00:00:00 2001 From: John Gozde Date: Thu, 7 Mar 2019 19:08:51 -0700 Subject: [PATCH 1/3] Use Set if WeakSet is not available --- src/createGridComponent.js | 1 + src/createListComponent.js | 1 + src/weakset.js | 4 ++++ 3 files changed, 6 insertions(+) create mode 100644 src/weakset.js diff --git a/src/createGridComponent.js b/src/createGridComponent.js index fd3893e8..f9d1d262 100644 --- a/src/createGridComponent.js +++ b/src/createGridComponent.js @@ -4,6 +4,7 @@ import memoizeOne from 'memoize-one'; import { createElement, PureComponent } from 'react'; import { cancelTimeout, requestTimeout } from './timer'; import { getScrollbarSize } from './domHelpers'; +import WeakSet from './weakset'; import type { TimeoutID } from './timer'; diff --git a/src/createListComponent.js b/src/createListComponent.js index 5756d44e..127a50bb 100644 --- a/src/createListComponent.js +++ b/src/createListComponent.js @@ -3,6 +3,7 @@ import memoizeOne from 'memoize-one'; import { createElement, PureComponent } from 'react'; import { cancelTimeout, requestTimeout } from './timer'; +import WeakSet from './weakset'; import type { TimeoutID } from './timer'; diff --git a/src/weakset.js b/src/weakset.js new file mode 100644 index 00000000..83a62ce7 --- /dev/null +++ b/src/weakset.js @@ -0,0 +1,4 @@ +// @flow + +const WeaksetExport = typeof WeakSet === 'undefined' ? Set : WeakSet; +export default WeaksetExport; From b48c94f987c7e6ef1dc380ee77c299c0b9c3fd91 Mon Sep 17 00:00:00 2001 From: John Gozde Date: Thu, 7 Mar 2019 19:54:08 -0700 Subject: [PATCH 2/3] Ensure WeakSet has proper type --- src/weakset.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/weakset.js b/src/weakset.js index 83a62ce7..720f838f 100644 --- a/src/weakset.js +++ b/src/weakset.js @@ -1,4 +1,5 @@ // @flow -const WeaksetExport = typeof WeakSet === 'undefined' ? Set : WeakSet; -export default WeaksetExport; +const WeakSetExport: typeof WeakSet = + typeof (WeakSet: any) === 'undefined' ? (Set: any) : (WeakSet: any); +export default WeakSetExport; From b0c511506610066685a1f5e70a89abe791e6bd10 Mon Sep 17 00:00:00 2001 From: John Gozde Date: Thu, 7 Mar 2019 20:28:53 -0700 Subject: [PATCH 3/3] Only create sets if WeakSet exists --- src/createGridComponent.js | 15 ++++++++------- src/createListComponent.js | 15 ++++++++------- src/weakset.js | 5 ----- 3 files changed, 16 insertions(+), 19 deletions(-) delete mode 100644 src/weakset.js diff --git a/src/createGridComponent.js b/src/createGridComponent.js index f9d1d262..ddf24178 100644 --- a/src/createGridComponent.js +++ b/src/createGridComponent.js @@ -4,7 +4,6 @@ import memoizeOne from 'memoize-one'; import { createElement, PureComponent } from 'react'; import { cancelTimeout, requestTimeout } from './timer'; import { getScrollbarSize } from './domHelpers'; -import WeakSet from './weakset'; import type { TimeoutID } from './timer'; @@ -133,8 +132,10 @@ const defaultItemKey = ({ columnIndex, data, rowIndex }) => let devWarningsOverscanCount = null; let devWarningsTagName = null; if (process.env.NODE_ENV !== 'production') { - devWarningsOverscanCount = new WeakSet(); - devWarningsTagName = new WeakSet(); + if (typeof window.WeakSet !== 'undefined') { + devWarningsOverscanCount = new WeakSet(); + devWarningsTagName = new WeakSet(); + } } export default function createGridComponent({ @@ -747,8 +748,8 @@ const validateSharedProps = ( ): void => { if (process.env.NODE_ENV !== 'production') { if (typeof overscanCount === 'number') { - if (!((devWarningsOverscanCount: any): WeakSet).has(instance)) { - ((devWarningsOverscanCount: any): WeakSet).add(instance); + if (devWarningsOverscanCount && !devWarningsOverscanCount.has(instance)) { + devWarningsOverscanCount.add(instance); console.warn( 'The overscanCount prop has been deprecated. ' + 'Please use the overscanColumnsCount and overscanRowsCount props instead.' @@ -757,8 +758,8 @@ const validateSharedProps = ( } if (innerTagName != null || outerTagName != null) { - if (!((devWarningsTagName: any): WeakSet).has(instance)) { - ((devWarningsTagName: any): WeakSet).add(instance); + if (devWarningsTagName && !devWarningsTagName.has(instance)) { + devWarningsTagName.add(instance); console.warn( 'The innerTagName and outerTagName props have been deprecated. ' + 'Please use the innerElementType and outerElementType props instead.' diff --git a/src/createListComponent.js b/src/createListComponent.js index 127a50bb..ae45952d 100644 --- a/src/createListComponent.js +++ b/src/createListComponent.js @@ -3,7 +3,6 @@ import memoizeOne from 'memoize-one'; import { createElement, PureComponent } from 'react'; import { cancelTimeout, requestTimeout } from './timer'; -import WeakSet from './weakset'; import type { TimeoutID } from './timer'; @@ -113,8 +112,10 @@ const defaultItemKey = (index: number, data: any) => index; let devWarningsDirection = null; let devWarningsTagName = null; if (process.env.NODE_ENV !== 'production') { - devWarningsDirection = new WeakSet(); - devWarningsTagName = new WeakSet(); + if (typeof window.WeakSet !== 'undefined') { + devWarningsDirection = new WeakSet(); + devWarningsTagName = new WeakSet(); + } } export default function createListComponent({ @@ -588,8 +589,8 @@ const validateSharedProps = ( ): void => { if (process.env.NODE_ENV !== 'production') { if (innerTagName != null || outerTagName != null) { - if (!((devWarningsTagName: any): WeakSet).has(instance)) { - ((devWarningsTagName: any): WeakSet).add(instance); + if (devWarningsTagName && !devWarningsTagName.has(instance)) { + devWarningsTagName.add(instance); console.warn( 'The innerTagName and outerTagName props have been deprecated. ' + 'Please use the innerElementType and outerElementType props instead.' @@ -603,8 +604,8 @@ const validateSharedProps = ( switch (direction) { case 'horizontal': case 'vertical': - if (!((devWarningsDirection: any): WeakSet).has(instance)) { - ((devWarningsDirection: any): WeakSet).add(instance); + if (devWarningsDirection && !devWarningsDirection.has(instance)) { + devWarningsDirection.add(instance); console.warn( 'The direction prop should be either "ltr" (default) or "rtl". ' + 'Please use the layout prop to specify "vertical" (default) or "horizontal" orientation.' diff --git a/src/weakset.js b/src/weakset.js deleted file mode 100644 index 720f838f..00000000 --- a/src/weakset.js +++ /dev/null @@ -1,5 +0,0 @@ -// @flow - -const WeakSetExport: typeof WeakSet = - typeof (WeakSet: any) === 'undefined' ? (Set: any) : (WeakSet: any); -export default WeakSetExport;