From d2e1572b94f89aaec7b39dc65cb12616d742b9ed Mon Sep 17 00:00:00 2001 From: Darren Ethier Date: Mon, 11 Feb 2019 12:10:07 -0500 Subject: [PATCH 1/5] yield instead --- packages/redux-routine/src/runtime.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/redux-routine/src/runtime.js b/packages/redux-routine/src/runtime.js index d3de265c3f2b1..ec984a148435e 100644 --- a/packages/redux-routine/src/runtime.js +++ b/packages/redux-routine/src/runtime.js @@ -28,7 +28,7 @@ export default function createRuntime( controls = {}, dispatch ) { // Async control routine awaits resolution. routine.then( yieldNext, yieldError ); } else { - next( routine ); + yieldNext( routine ); } return true; } ); From 6c1f236133d4c4b2fcd33707904160e4428ac61a Mon Sep 17 00:00:00 2001 From: Darren Ethier Date: Mon, 11 Feb 2019 14:07:34 -0500 Subject: [PATCH 2/5] add changelog entry --- packages/redux-routine/CHANGELOG.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/redux-routine/CHANGELOG.md b/packages/redux-routine/CHANGELOG.md index dbddb8321016b..a7979c19d6bd3 100644 --- a/packages/redux-routine/CHANGELOG.md +++ b/packages/redux-routine/CHANGELOG.md @@ -4,7 +4,8 @@ - Fix unhandled promise rejection error caused by returning null from registered generator ([#13314](https://github.com/WordPress/gutenberg/pull/13314)) - The middleware will no longer attempt to coerce an error to an instance of `Error`, and instead passes through the thrown value directly. This resolves issues where an `Error` would be thrown when the underlying values were not of type `Error` or `string` (e.g. a thrown object) and the message would end up not being useful (e.g. `[Object object]`). -([#13315](https://github.com/WordPress/gutenberg/pull/13315)) +([#13315](https://github.com/WordPress/gutenberg/pull/13315)) +- Fix unintended recursion when invoking sync routine ([#13716](https://github.com/WordPress/gutenberg/pull/13716)) ## 3.0.3 (2018-10-19) From d3e6b5015b99f156eb13748bd584b0e05a33421d Mon Sep 17 00:00:00 2001 From: Darren Ethier Date: Mon, 11 Feb 2019 14:08:17 -0500 Subject: [PATCH 3/5] woops fix incorrect link --- packages/redux-routine/CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/redux-routine/CHANGELOG.md b/packages/redux-routine/CHANGELOG.md index a7979c19d6bd3..1bec9149f6099 100644 --- a/packages/redux-routine/CHANGELOG.md +++ b/packages/redux-routine/CHANGELOG.md @@ -5,7 +5,7 @@ - Fix unhandled promise rejection error caused by returning null from registered generator ([#13314](https://github.com/WordPress/gutenberg/pull/13314)) - The middleware will no longer attempt to coerce an error to an instance of `Error`, and instead passes through the thrown value directly. This resolves issues where an `Error` would be thrown when the underlying values were not of type `Error` or `string` (e.g. a thrown object) and the message would end up not being useful (e.g. `[Object object]`). ([#13315](https://github.com/WordPress/gutenberg/pull/13315)) -- Fix unintended recursion when invoking sync routine ([#13716](https://github.com/WordPress/gutenberg/pull/13716)) +- Fix unintended recursion when invoking sync routine ([#13818](https://github.com/WordPress/gutenberg/pull/13818)) ## 3.0.3 (2018-10-19) From ed960d8679fc4b3ba9f96860a26c23afa9943771 Mon Sep 17 00:00:00 2001 From: Darren Ethier Date: Mon, 11 Feb 2019 16:01:59 -0500 Subject: [PATCH 4/5] add unit test reproducing bug and demonstrating fix --- packages/redux-routine/src/test/index.js | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/packages/redux-routine/src/test/index.js b/packages/redux-routine/src/test/index.js index 79a35673f70a5..b87a3c1ef13a0 100644 --- a/packages/redux-routine/src/test/index.js +++ b/packages/redux-routine/src/test/index.js @@ -143,4 +143,21 @@ describe( 'createMiddleware', () => { expect( store.getState() ).toBe( 2 ); } ); + + it( 'does not recurse when for action like returns from a sync ' + + 'control', () => { + const post = { type: 'post' }; + const middleware = createMiddleware( { + UPDATE: () => post, + } ); + const store = createStoreWithMiddleware( middleware ); + function* getPostAction() { + const nextState = yield { type: 'UPDATE' }; + return { type: 'CHANGE', nextState }; + } + + store.dispatch( getPostAction() ); + + expect( store.getState() ).toEqual( post ); + } ); } ); From 06ceb65d62b8f1eacdbad32b76cf24503b45c449 Mon Sep 17 00:00:00 2001 From: Darren Ethier Date: Mon, 11 Feb 2019 16:05:48 -0500 Subject: [PATCH 5/5] improve test description --- packages/redux-routine/src/test/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/redux-routine/src/test/index.js b/packages/redux-routine/src/test/index.js index b87a3c1ef13a0..4a25b4771580f 100644 --- a/packages/redux-routine/src/test/index.js +++ b/packages/redux-routine/src/test/index.js @@ -144,7 +144,7 @@ describe( 'createMiddleware', () => { expect( store.getState() ).toBe( 2 ); } ); - it( 'does not recurse when for action like returns from a sync ' + + it( 'does not recurse when action like object returns from a sync ' + 'control', () => { const post = { type: 'post' }; const middleware = createMiddleware( {