From 5c4a077892dbab2d57185a7f9996bb539493eadb Mon Sep 17 00:00:00 2001 From: brucou Date: Fri, 4 Jan 2019 07:40:24 +0100 Subject: [PATCH 1/4] fix(#184): replacing setImmediate by setTimeour when not defined --- src/helpers.js | 17 ++++++++++++++++- src/wait-for-dom-change.js | 5 ++++- src/wait-for-element.js | 3 ++- 3 files changed, 22 insertions(+), 3 deletions(-) diff --git a/src/helpers.js b/src/helpers.js index afafe115..89a5a689 100644 --- a/src/helpers.js +++ b/src/helpers.js @@ -17,4 +17,19 @@ function getDocument() { return window.document } -export {getDocument, newMutationObserver} +/** + * There are browsers for which `setImmediate` is not available. This + * serves as a polyfill of sorts, adopting `setTimeout` as the closest + * equivalent + */ +function getSetImmediate() { + if (typeof setImmediate === 'function') { + return setImmediate + } + else { + return function setImmediate(fn) { return setTimeout(fn, 0)} + } +} + +export {getDocument, newMutationObserver, getSetImmediate} + diff --git a/src/wait-for-dom-change.js b/src/wait-for-dom-change.js index a4ef4841..d4045bad 100644 --- a/src/wait-for-dom-change.js +++ b/src/wait-for-dom-change.js @@ -1,4 +1,4 @@ -import {newMutationObserver, getDocument} from './helpers' +import {getDocument, getSetImmediate, newMutationObserver} from './helpers' function waitForDomChange({ container = getDocument(), @@ -11,6 +11,7 @@ function waitForDomChange({ }, } = {}) { return new Promise((resolve, reject) => { + const setImmediate = getSetImmediate() const timer = setTimeout(onTimeout, timeout) const observer = newMutationObserver(onMutation) observer.observe(container, mutationObserverOptions) @@ -24,9 +25,11 @@ function waitForDomChange({ resolve(result) } } + function onMutation(mutationsList) { onDone(null, mutationsList) } + function onTimeout() { onDone(new Error('Timed out in waitForDomChange.'), null) } diff --git a/src/wait-for-element.js b/src/wait-for-element.js index 41e92092..82e47a3f 100644 --- a/src/wait-for-element.js +++ b/src/wait-for-element.js @@ -1,4 +1,4 @@ -import {newMutationObserver, getDocument} from './helpers' +import {newMutationObserver, getDocument, getSetImmediate} from './helpers' function waitForElement( callback, @@ -22,6 +22,7 @@ function waitForElement( const observer = newMutationObserver(onMutation) observer.observe(container, mutationObserverOptions) function onDone(error, result) { + const setImmediate = getSetImmediate(); clearTimeout(timer) setImmediate(() => observer.disconnect()) if (error) { From 31f321365b8c630396b67602d1a33e82c5a6c55e Mon Sep 17 00:00:00 2001 From: brucou Date: Fri, 4 Jan 2019 07:43:44 +0100 Subject: [PATCH 2/4] fix(#184): replacing setImmediate by setTimeour when not defined --- src/wait-for-dom-change.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/wait-for-dom-change.js b/src/wait-for-dom-change.js index d4045bad..9855ea9c 100644 --- a/src/wait-for-dom-change.js +++ b/src/wait-for-dom-change.js @@ -1,4 +1,4 @@ -import {getDocument, getSetImmediate, newMutationObserver} from './helpers' +import {newMutationObserver, getDocument, getSetImmediate} from './helpers' function waitForDomChange({ container = getDocument(), From 1f408769c4baeaf46ba81087fd1f1f71ab890212 Mon Sep 17 00:00:00 2001 From: "Kent C. Dodds" Date: Fri, 4 Jan 2019 09:17:52 -0700 Subject: [PATCH 3/4] chore: fix formatting issues --- src/helpers.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/helpers.js b/src/helpers.js index 89a5a689..67e09182 100644 --- a/src/helpers.js +++ b/src/helpers.js @@ -17,7 +17,7 @@ function getDocument() { return window.document } -/** +/* * There are browsers for which `setImmediate` is not available. This * serves as a polyfill of sorts, adopting `setTimeout` as the closest * equivalent @@ -25,11 +25,11 @@ function getDocument() { function getSetImmediate() { if (typeof setImmediate === 'function') { return setImmediate - } - else { - return function setImmediate(fn) { return setTimeout(fn, 0)} + } else { + return function setImmediate(fn) { + return setTimeout(fn, 0) + } } } export {getDocument, newMutationObserver, getSetImmediate} - From 6cddb5250359144d9141857c97a7e76b744b5e36 Mon Sep 17 00:00:00 2001 From: "Kent C. Dodds" Date: Fri, 4 Jan 2019 09:20:38 -0700 Subject: [PATCH 4/4] chore: coverage (no need to cover this in tests) --- src/helpers.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/helpers.js b/src/helpers.js index 67e09182..1fefa0b8 100644 --- a/src/helpers.js +++ b/src/helpers.js @@ -23,6 +23,7 @@ function getDocument() { * equivalent */ function getSetImmediate() { + /* istanbul ignore else */ if (typeof setImmediate === 'function') { return setImmediate } else {