@typescript-tea/core
Advanced tools
Comparing version 0.5.0 to 0.5.1
@@ -8,4 +8,16 @@ # Change Log | ||
## [Unreleased](https://github.com/typescript-tea/core/compare/v0.4.0...master) | ||
## [Unreleased](https://github.com/typescript-tea/core/compare/v0.5.1...master) | ||
## [0.5.1](https://github.com/typescript-tea/core/compare/v0.5.0...0.5.1) - 2021-05-23 | ||
### Fixed | ||
- Always call all effect managers so they get updated subscriptions even if there are no subscriptions anymore. See PR [#8](https://github.com/typescript-tea/core/pull/8) and See PR [#9](https://github.com/typescript-tea/core/pull/9). | ||
## [0.5.0](https://github.com/typescript-tea/core/compare/v0.4.0...0.5.0) - 2020-10-22 | ||
### Added | ||
- Add internal dummy field to preserve generic parameter of `Cmd<Action>` and `Sub<Action>`. | ||
## [0.4.0](https://github.com/typescript-tea/core/compare/v0.3.0...0.4.0) - 2020-04-24 | ||
@@ -12,0 +24,0 @@ |
@@ -26,2 +26,3 @@ /** | ||
* This field is only needed in order to preserve the generic type paramter Action | ||
* @ignore | ||
*/ | ||
@@ -28,0 +29,0 @@ readonly __$$dummy_tag?: Action; |
@@ -1,2 +0,2 @@ | ||
function r(r){var t=function(r){return Object.fromEntries(r.map(function(r){return[r.home,r]}))}(r);return function(r){var n=t[r];if(!n)throw new Error("Could not find effect manager '"+r+"'. Make sure it was passed to the runtime.");return n}}function t(r){return{home:"__internal",type:"Batched",list:r.filter(function(r){return void 0!==r})}}function n(r,t){return void 0===t?void 0:{home:"__internal",type:"Mapped",actionMapper:r,original:t}}function e(r,t,n,o,i){if(void 0===i&&(i=void 0),"__internal"===o.home){var a=o;switch(a.type){case"Batched":return void a.list.flatMap(function(o){return e(r,t,n,o,i)});case"Mapped":return void e(r,t,n,a.original,i?function(r){return i(a.actionMapper(r))}:a.actionMapper);default:throw new Error("Invalid result type "+a)}}else{var u=r(o.home);t[o.home]||(t[o.home]={cmds:[],subs:[]}),(n?t[o.home].cmds:t[o.home].subs).push(i?(n?u.mapCmd:u.mapSub)(i,o):o)}}var o={__proto__:null,run:function(t,n,o,i){void 0===i&&(i=[]);var a,u=r(i),c=t.update,f=t.view,s=t.subscriptions,p={},l=[],v=!1,h=!1,d=[];function m(){if(v&&!h){for(h=!0;d.length>0;){var r=d.shift();r.dispatch(r.action)}h=!1}}function _(r){v&&g(c(r,a))}var b=function(r){return function(t){w(function(r){return function(t){if(v){var n=u(r),e=b(r);p[r]=n.onSelfAction(y,e,t,p[r])}}}(r),t)}},y=function(r){w(_,r)};function w(r,t){v&&(d.push({dispatch:r,action:t}),m())}function g(r){a=r[0];var t=r[1],n=s&&s(a),i={};t&&e(u,i,!0,t),n&&e(u,i,!1,n);for(var c=0,l=Object.keys(i);c<l.length;c++){var v=l[c],h=i[v],d=h.cmds,m=h.subs,_=u(v);p[v]=_.onEffects(y,b(v),d,m,p[v])}o(f({state:a,dispatch:y}))}return function(){var r=i,t=Array.isArray(r),n=0;for(r=t?r:r[Symbol.iterator]();;){var e;if(t){if(n>=r.length)break;e=r[n++]}else{if((n=r.next()).done)break;e=n.value}l.push(e.setup(y,b(e.home)))}}(),v=!0,g(t.init(n)),m(),function(){v&&(v=!1,function(){var r=l,t=Array.isArray(r),n=0;for(r=t?r:r[Symbol.iterator]();;){var e;if(t){if(n>=r.length)break;e=r[n++]}else{if((n=r.next()).done)break;e=n.value}e()}}())}}},i=new Map;function a(r){return{type:"Ok",value:r}}function u(r){return{type:"Err",error:r}}var c=o,f={__proto__:null,map:function(r,t){var n=i.get(t),e=n&&n.get(r);if(e)return e;var o=function(n){return t(r(n))};return n||(n=new Map,i.set(t,n)),n.set(r,o),o}},s={__proto__:null,batch:function(r){return t(r)},map:function(r,t){return n(r,t)}},p={__proto__:null,Ok:a,Err:u,mapError:function(r,t){switch(t.type){case"Ok":return a(t.value);case"Err":return u(r(t.error));default:throw new Error("Invalid result type "+t)}}};exports.Cmd={__proto__:null,batch:function(r){return t(r)},map:function(r,t){return n(r,t)}},exports.Dispatch=f,exports.Program=c,exports.Result=p,exports.Sub=s,exports.createGetEffectManager=r; | ||
function r(r){var t=function(r){return Object.fromEntries(r.map(function(r){return[r.home,r]}))}(r);return function(r){var n=t[r];if(!n)throw new Error("Could not find effect manager '"+r+"'. Make sure it was passed to the runtime.");return n}}function t(r){return{home:"__internal",type:"Batched",list:r.filter(function(r){return void 0!==r})}}function n(r,t){return void 0===t?void 0:{home:"__internal",type:"Mapped",actionMapper:r,original:t}}function e(r,t,n,o,i){if(void 0===i&&(i=void 0),"__internal"===o.home){var a=o;switch(a.type){case"Batched":return void a.list.flatMap(function(o){return e(r,t,n,o,i)});case"Mapped":return void e(r,t,n,a.original,i?function(r){return i(a.actionMapper(r))}:a.actionMapper);default:throw new Error("Invalid result type "+a)}}else{var u=r(o.home);t[o.home]||(t[o.home]={cmds:[],subs:[]}),(n?t[o.home].cmds:t[o.home].subs).push(i?(n?u.mapCmd:u.mapSub)(i,o):o)}}var o={__proto__:null,run:function(t,n,o,i){void 0===i&&(i=[]);var a,u=r(i),f=t.update,c=t.view,s=t.subscriptions,p={},l=[],v=!1,h=!1,d=[];function m(){if(v&&!h){for(h=!0;d.length>0;){var r=d.shift();r.dispatch(r.action)}h=!1}}function _(r){v&&g(f(r,a))}var b=function(r){return function(t){w(function(r){return function(t){if(v){var n=u(r),e=b(r);p[r]=n.onSelfAction(y,e,t,p[r])}}}(r),t)}},y=function(r){w(_,r)};function w(r,t){v&&(d.push({dispatch:r,action:t}),m())}function g(r){a=r[0];var t=r[1],n=s&&s(a),f={};t&&e(u,f,!0,t),n&&e(u,f,!1,n);var l=i,v=Array.isArray(l),h=0;for(l=v?l:l[Symbol.iterator]();;){var d,m;if(v){if(h>=l.length)break;m=l[h++]}else{if((h=l.next()).done)break;m=h.value}var _=m.home,w=null!=(d=f[_])?d:{cmds:[],subs:[]},g=w.cmds,k=w.subs,E=u(_);p[_]=E.onEffects(y,b(_),g,k,p[_])}o(c({state:a,dispatch:y}))}return function(){var r=i,t=Array.isArray(r),n=0;for(r=t?r:r[Symbol.iterator]();;){var e;if(t){if(n>=r.length)break;e=r[n++]}else{if((n=r.next()).done)break;e=n.value}l.push(e.setup(y,b(e.home)))}}(),v=!0,g(t.init(n)),m(),function(){v&&(v=!1,function(){var r=l,t=Array.isArray(r),n=0;for(r=t?r:r[Symbol.iterator]();;){var e;if(t){if(n>=r.length)break;e=r[n++]}else{if((n=r.next()).done)break;e=n.value}e()}}())}}},i=new Map;function a(r){return{type:"Ok",value:r}}function u(r){return{type:"Err",error:r}}var f=o,c={__proto__:null,map:function(r,t){var n=i.get(t),e=n&&n.get(r);if(e)return e;var o=function(n){return t(r(n))};return n||(n=new Map,i.set(t,n)),n.set(r,o),o}},s={__proto__:null,batch:function(r){return t(r)},map:function(r,t){return n(r,t)}},p={__proto__:null,Ok:a,Err:u,mapError:function(r,t){switch(t.type){case"Ok":return a(t.value);case"Err":return u(r(t.error));default:throw new Error("Invalid result type "+t)}}};exports.Cmd={__proto__:null,batch:function(r){return t(r)},map:function(r,t){return n(r,t)}},exports.Dispatch=c,exports.Program=f,exports.Result=p,exports.Sub=s,exports.createGetEffectManager=r; | ||
//# sourceMappingURL=core.js.map |
@@ -1,2 +0,2 @@ | ||
function r(r){var n=function(r){return Object.fromEntries(r.map(function(r){return[r.home,r]}))}(r);return function(r){var t=n[r];if(!t)throw new Error("Could not find effect manager '"+r+"'. Make sure it was passed to the runtime.");return t}}function n(r){return{home:"__internal",type:"Batched",list:r.filter(function(r){return void 0!==r})}}function t(r,n){return void 0===n?void 0:{home:"__internal",type:"Mapped",actionMapper:r,original:n}}function e(r,n,t,o,i){if(void 0===i&&(i=void 0),"__internal"===o.home){var u=o;switch(u.type){case"Batched":return void u.list.flatMap(function(o){return e(r,n,t,o,i)});case"Mapped":return void e(r,n,t,u.original,i?function(r){return i(u.actionMapper(r))}:u.actionMapper);default:throw new Error("Invalid result type "+u)}}else{var a=r(o.home);n[o.home]||(n[o.home]={cmds:[],subs:[]}),(t?n[o.home].cmds:n[o.home].subs).push(i?(t?a.mapCmd:a.mapSub)(i,o):o)}}var o={__proto__:null,run:function(n,t,o,i){void 0===i&&(i=[]);var u,a=r(i),c=n.update,f=n.view,s=n.subscriptions,p={},l=[],v=!1,h=!1,d=[];function m(){if(v&&!h){for(h=!0;d.length>0;){var r=d.shift();r.dispatch(r.action)}h=!1}}function _(r){v&&g(c(r,u))}var b=function(r){return function(n){w(function(r){return function(n){if(v){var t=a(r),e=b(r);p[r]=t.onSelfAction(y,e,n,p[r])}}}(r),n)}},y=function(r){w(_,r)};function w(r,n){v&&(d.push({dispatch:r,action:n}),m())}function g(r){u=r[0];var n=r[1],t=s&&s(u),i={};n&&e(a,i,!0,n),t&&e(a,i,!1,t);for(var c=0,l=Object.keys(i);c<l.length;c++){var v=l[c],h=i[v],d=h.cmds,m=h.subs,_=a(v);p[v]=_.onEffects(y,b(v),d,m,p[v])}o(f({state:u,dispatch:y}))}return function(){var r=i,n=Array.isArray(r),t=0;for(r=n?r:r[Symbol.iterator]();;){var e;if(n){if(t>=r.length)break;e=r[t++]}else{if((t=r.next()).done)break;e=t.value}l.push(e.setup(y,b(e.home)))}}(),v=!0,g(n.init(t)),m(),function(){v&&(v=!1,function(){var r=l,n=Array.isArray(r),t=0;for(r=n?r:r[Symbol.iterator]();;){var e;if(n){if(t>=r.length)break;e=r[t++]}else{if((t=r.next()).done)break;e=t.value}e()}}())}}},i=new Map;function u(r){return{type:"Ok",value:r}}function a(r){return{type:"Err",error:r}}var c=o,f={__proto__:null,map:function(r,n){var t=i.get(n),e=t&&t.get(r);if(e)return e;var o=function(t){return n(r(t))};return t||(t=new Map,i.set(n,t)),t.set(r,o),o}},s={__proto__:null,batch:function(r){return n(r)},map:function(r,n){return t(r,n)}},p={__proto__:null,batch:function(r){return n(r)},map:function(r,n){return t(r,n)}},l={__proto__:null,Ok:u,Err:a,mapError:function(r,n){switch(n.type){case"Ok":return u(n.value);case"Err":return a(r(n.error));default:throw new Error("Invalid result type "+n)}}};export{s as Cmd,f as Dispatch,c as Program,l as Result,p as Sub,r as createGetEffectManager}; | ||
function r(r){var n=function(r){return Object.fromEntries(r.map(function(r){return[r.home,r]}))}(r);return function(r){var t=n[r];if(!t)throw new Error("Could not find effect manager '"+r+"'. Make sure it was passed to the runtime.");return t}}function n(r){return{home:"__internal",type:"Batched",list:r.filter(function(r){return void 0!==r})}}function t(r,n){return void 0===n?void 0:{home:"__internal",type:"Mapped",actionMapper:r,original:n}}function e(r,n,t,o,i){if(void 0===i&&(i=void 0),"__internal"===o.home){var a=o;switch(a.type){case"Batched":return void a.list.flatMap(function(o){return e(r,n,t,o,i)});case"Mapped":return void e(r,n,t,a.original,i?function(r){return i(a.actionMapper(r))}:a.actionMapper);default:throw new Error("Invalid result type "+a)}}else{var u=r(o.home);n[o.home]||(n[o.home]={cmds:[],subs:[]}),(t?n[o.home].cmds:n[o.home].subs).push(i?(t?u.mapCmd:u.mapSub)(i,o):o)}}var o={__proto__:null,run:function(n,t,o,i){void 0===i&&(i=[]);var a,u=r(i),f=n.update,c=n.view,s=n.subscriptions,l={},p=[],v=!1,h=!1,d=[];function m(){if(v&&!h){for(h=!0;d.length>0;){var r=d.shift();r.dispatch(r.action)}h=!1}}function _(r){v&&k(f(r,a))}var b=function(r){return function(n){w(function(r){return function(n){if(v){var t=u(r),e=b(r);l[r]=t.onSelfAction(y,e,n,l[r])}}}(r),n)}},y=function(r){w(_,r)};function w(r,n){v&&(d.push({dispatch:r,action:n}),m())}function k(r){a=r[0];var n=r[1],t=s&&s(a),f={};n&&e(u,f,!0,n),t&&e(u,f,!1,t);var p=i,v=Array.isArray(p),h=0;for(p=v?p:p[Symbol.iterator]();;){var d,m;if(v){if(h>=p.length)break;m=p[h++]}else{if((h=p.next()).done)break;m=h.value}var _=m.home,w=null!=(d=f[_])?d:{cmds:[],subs:[]},k=w.cmds,g=w.subs,E=u(_);l[_]=E.onEffects(y,b(_),k,g,l[_])}o(c({state:a,dispatch:y}))}return function(){var r=i,n=Array.isArray(r),t=0;for(r=n?r:r[Symbol.iterator]();;){var e;if(n){if(t>=r.length)break;e=r[t++]}else{if((t=r.next()).done)break;e=t.value}p.push(e.setup(y,b(e.home)))}}(),v=!0,k(n.init(t)),m(),function(){v&&(v=!1,function(){var r=p,n=Array.isArray(r),t=0;for(r=n?r:r[Symbol.iterator]();;){var e;if(n){if(t>=r.length)break;e=r[t++]}else{if((t=r.next()).done)break;e=t.value}e()}}())}}},i=new Map;function a(r){return{type:"Ok",value:r}}function u(r){return{type:"Err",error:r}}var f=o,c={__proto__:null,map:function(r,n){var t=i.get(n),e=t&&t.get(r);if(e)return e;var o=function(t){return n(r(t))};return t||(t=new Map,i.set(n,t)),t.set(r,o),o}},s={__proto__:null,batch:function(r){return n(r)},map:function(r,n){return t(r,n)}},l={__proto__:null,batch:function(r){return n(r)},map:function(r,n){return t(r,n)}},p={__proto__:null,Ok:a,Err:u,mapError:function(r,n){switch(n.type){case"Ok":return a(n.value);case"Err":return u(r(n.error));default:throw new Error("Invalid result type "+n)}}};export{s as Cmd,c as Dispatch,f as Program,p as Result,l as Sub,r as createGetEffectManager}; | ||
//# sourceMappingURL=core.m.js.map |
@@ -1,2 +0,2 @@ | ||
function r(r){var n=function(r){return Object.fromEntries(r.map(function(r){return[r.home,r]}))}(r);return function(r){var t=n[r];if(!t)throw new Error("Could not find effect manager '"+r+"'. Make sure it was passed to the runtime.");return t}}function n(r){return{home:"__internal",type:"Batched",list:r.filter(function(r){return void 0!==r})}}function t(r,n){return void 0===n?void 0:{home:"__internal",type:"Mapped",actionMapper:r,original:n}}function e(r,n,t,o,i){if(void 0===i&&(i=void 0),"__internal"===o.home){var u=o;switch(u.type){case"Batched":return void u.list.flatMap(function(o){return e(r,n,t,o,i)});case"Mapped":return void e(r,n,t,u.original,i?function(r){return i(u.actionMapper(r))}:u.actionMapper);default:throw new Error("Invalid result type "+u)}}else{var a=r(o.home);n[o.home]||(n[o.home]={cmds:[],subs:[]}),(t?n[o.home].cmds:n[o.home].subs).push(i?(t?a.mapCmd:a.mapSub)(i,o):o)}}var o={__proto__:null,run:function(n,t,o,i){void 0===i&&(i=[]);var u,a=r(i),c=n.update,f=n.view,s=n.subscriptions,p={},l=[],v=!1,h=!1,d=[];function m(){if(v&&!h){for(h=!0;d.length>0;){var r=d.shift();r.dispatch(r.action)}h=!1}}function _(r){v&&g(c(r,u))}var b=function(r){return function(n){w(function(r){return function(n){if(v){var t=a(r),e=b(r);p[r]=t.onSelfAction(y,e,n,p[r])}}}(r),n)}},y=function(r){w(_,r)};function w(r,n){v&&(d.push({dispatch:r,action:n}),m())}function g(r){u=r[0];var n=r[1],t=s&&s(u),i={};n&&e(a,i,!0,n),t&&e(a,i,!1,t);for(var c=0,l=Object.keys(i);c<l.length;c++){var v=l[c],h=i[v],d=h.cmds,m=h.subs,_=a(v);p[v]=_.onEffects(y,b(v),d,m,p[v])}o(f({state:u,dispatch:y}))}return function(){var r=i,n=Array.isArray(r),t=0;for(r=n?r:r[Symbol.iterator]();;){var e;if(n){if(t>=r.length)break;e=r[t++]}else{if((t=r.next()).done)break;e=t.value}l.push(e.setup(y,b(e.home)))}}(),v=!0,g(n.init(t)),m(),function(){v&&(v=!1,function(){var r=l,n=Array.isArray(r),t=0;for(r=n?r:r[Symbol.iterator]();;){var e;if(n){if(t>=r.length)break;e=r[t++]}else{if((t=r.next()).done)break;e=t.value}e()}}())}}},i=new Map;function u(r){return{type:"Ok",value:r}}function a(r){return{type:"Err",error:r}}var c=o,f={__proto__:null,map:function(r,n){var t=i.get(n),e=t&&t.get(r);if(e)return e;var o=function(t){return n(r(t))};return t||(t=new Map,i.set(n,t)),t.set(r,o),o}},s={__proto__:null,batch:function(r){return n(r)},map:function(r,n){return t(r,n)}},p={__proto__:null,batch:function(r){return n(r)},map:function(r,n){return t(r,n)}},l={__proto__:null,Ok:u,Err:a,mapError:function(r,n){switch(n.type){case"Ok":return u(n.value);case"Err":return a(r(n.error));default:throw new Error("Invalid result type "+n)}}};export{s as Cmd,f as Dispatch,c as Program,l as Result,p as Sub,r as createGetEffectManager}; | ||
function r(r){var n=function(r){return Object.fromEntries(r.map(function(r){return[r.home,r]}))}(r);return function(r){var t=n[r];if(!t)throw new Error("Could not find effect manager '"+r+"'. Make sure it was passed to the runtime.");return t}}function n(r){return{home:"__internal",type:"Batched",list:r.filter(function(r){return void 0!==r})}}function t(r,n){return void 0===n?void 0:{home:"__internal",type:"Mapped",actionMapper:r,original:n}}function e(r,n,t,o,i){if(void 0===i&&(i=void 0),"__internal"===o.home){var a=o;switch(a.type){case"Batched":return void a.list.flatMap(function(o){return e(r,n,t,o,i)});case"Mapped":return void e(r,n,t,a.original,i?function(r){return i(a.actionMapper(r))}:a.actionMapper);default:throw new Error("Invalid result type "+a)}}else{var u=r(o.home);n[o.home]||(n[o.home]={cmds:[],subs:[]}),(t?n[o.home].cmds:n[o.home].subs).push(i?(t?u.mapCmd:u.mapSub)(i,o):o)}}var o={__proto__:null,run:function(n,t,o,i){void 0===i&&(i=[]);var a,u=r(i),f=n.update,c=n.view,s=n.subscriptions,l={},p=[],v=!1,h=!1,d=[];function m(){if(v&&!h){for(h=!0;d.length>0;){var r=d.shift();r.dispatch(r.action)}h=!1}}function _(r){v&&k(f(r,a))}var b=function(r){return function(n){w(function(r){return function(n){if(v){var t=u(r),e=b(r);l[r]=t.onSelfAction(y,e,n,l[r])}}}(r),n)}},y=function(r){w(_,r)};function w(r,n){v&&(d.push({dispatch:r,action:n}),m())}function k(r){a=r[0];var n=r[1],t=s&&s(a),f={};n&&e(u,f,!0,n),t&&e(u,f,!1,t);var p=i,v=Array.isArray(p),h=0;for(p=v?p:p[Symbol.iterator]();;){var d,m;if(v){if(h>=p.length)break;m=p[h++]}else{if((h=p.next()).done)break;m=h.value}var _=m.home,w=null!=(d=f[_])?d:{cmds:[],subs:[]},k=w.cmds,g=w.subs,E=u(_);l[_]=E.onEffects(y,b(_),k,g,l[_])}o(c({state:a,dispatch:y}))}return function(){var r=i,n=Array.isArray(r),t=0;for(r=n?r:r[Symbol.iterator]();;){var e;if(n){if(t>=r.length)break;e=r[t++]}else{if((t=r.next()).done)break;e=t.value}p.push(e.setup(y,b(e.home)))}}(),v=!0,k(n.init(t)),m(),function(){v&&(v=!1,function(){var r=p,n=Array.isArray(r),t=0;for(r=n?r:r[Symbol.iterator]();;){var e;if(n){if(t>=r.length)break;e=r[t++]}else{if((t=r.next()).done)break;e=t.value}e()}}())}}},i=new Map;function a(r){return{type:"Ok",value:r}}function u(r){return{type:"Err",error:r}}var f=o,c={__proto__:null,map:function(r,n){var t=i.get(n),e=t&&t.get(r);if(e)return e;var o=function(t){return n(r(t))};return t||(t=new Map,i.set(n,t)),t.set(r,o),o}},s={__proto__:null,batch:function(r){return n(r)},map:function(r,n){return t(r,n)}},l={__proto__:null,batch:function(r){return n(r)},map:function(r,n){return t(r,n)}},p={__proto__:null,Ok:a,Err:u,mapError:function(r,n){switch(n.type){case"Ok":return a(n.value);case"Err":return u(r(n.error));default:throw new Error("Invalid result type "+n)}}};export{s as Cmd,c as Dispatch,f as Program,p as Result,l as Sub,r as createGetEffectManager}; | ||
//# sourceMappingURL=core.modern.js.map |
@@ -1,2 +0,2 @@ | ||
!function(r,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((r=r||self).core={})}(this,function(r){function t(r){var t=function(r){return Object.fromEntries(r.map(function(r){return[r.home,r]}))}(r);return function(r){var n=t[r];if(!n)throw new Error("Could not find effect manager '"+r+"'. Make sure it was passed to the runtime.");return n}}function n(r){return{home:"__internal",type:"Batched",list:r.filter(function(r){return void 0!==r})}}function e(r,t){return void 0===t?void 0:{home:"__internal",type:"Mapped",actionMapper:r,original:t}}function o(r,t,n,e,i){if(void 0===i&&(i=void 0),"__internal"===e.home){var u=e;switch(u.type){case"Batched":return void u.list.flatMap(function(e){return o(r,t,n,e,i)});case"Mapped":return void o(r,t,n,u.original,i?function(r){return i(u.actionMapper(r))}:u.actionMapper);default:throw new Error("Invalid result type "+u)}}else{var a=r(e.home);t[e.home]||(t[e.home]={cmds:[],subs:[]}),(n?t[e.home].cmds:t[e.home].subs).push(i?(n?a.mapCmd:a.mapSub)(i,e):e)}}var i={__proto__:null,run:function(r,n,e,i){void 0===i&&(i=[]);var u,a=t(i),f=r.update,c=r.view,s=r.subscriptions,p={},l=[],d=!1,v=!1,h=[];function m(){if(d&&!v){for(v=!0;h.length>0;){var r=h.shift();r.dispatch(r.action)}v=!1}}function _(r){d&&g(f(r,u))}var y=function(r){return function(t){w(function(r){return function(t){if(d){var n=a(r),e=y(r);p[r]=n.onSelfAction(b,e,t,p[r])}}}(r),t)}},b=function(r){w(_,r)};function w(r,t){d&&(h.push({dispatch:r,action:t}),m())}function g(r){u=r[0];var t=r[1],n=s&&s(u),i={};t&&o(a,i,!0,t),n&&o(a,i,!1,n);for(var f=0,l=Object.keys(i);f<l.length;f++){var d=l[f],v=i[d],h=v.cmds,m=v.subs,_=a(d);p[d]=_.onEffects(b,y(d),h,m,p[d])}e(c({state:u,dispatch:b}))}return function(){var r=i,t=Array.isArray(r),n=0;for(r=t?r:r[Symbol.iterator]();;){var e;if(t){if(n>=r.length)break;e=r[n++]}else{if((n=r.next()).done)break;e=n.value}l.push(e.setup(b,y(e.home)))}}(),d=!0,g(r.init(n)),m(),function(){d&&(d=!1,function(){var r=l,t=Array.isArray(r),n=0;for(r=t?r:r[Symbol.iterator]();;){var e;if(t){if(n>=r.length)break;e=r[n++]}else{if((n=r.next()).done)break;e=n.value}e()}}())}}},u=new Map;function a(r){return{type:"Ok",value:r}}function f(r){return{type:"Err",error:r}}var c=i,s={__proto__:null,map:function(r,t){var n=u.get(t),e=n&&n.get(r);if(e)return e;var o=function(n){return t(r(n))};return n||(n=new Map,u.set(t,n)),n.set(r,o),o}},p={__proto__:null,batch:function(r){return n(r)},map:function(r,t){return e(r,t)}},l={__proto__:null,Ok:a,Err:f,mapError:function(r,t){switch(t.type){case"Ok":return a(t.value);case"Err":return f(r(t.error));default:throw new Error("Invalid result type "+t)}}};r.Cmd={__proto__:null,batch:function(r){return n(r)},map:function(r,t){return e(r,t)}},r.Dispatch=s,r.Program=c,r.Result=l,r.Sub=p,r.createGetEffectManager=t}); | ||
!function(r,n){"object"==typeof exports&&"undefined"!=typeof module?n(exports):"function"==typeof define&&define.amd?define(["exports"],n):n((r=r||self).core={})}(this,function(r){function n(r){var n=function(r){return Object.fromEntries(r.map(function(r){return[r.home,r]}))}(r);return function(r){var t=n[r];if(!t)throw new Error("Could not find effect manager '"+r+"'. Make sure it was passed to the runtime.");return t}}function t(r){return{home:"__internal",type:"Batched",list:r.filter(function(r){return void 0!==r})}}function e(r,n){return void 0===n?void 0:{home:"__internal",type:"Mapped",actionMapper:r,original:n}}function o(r,n,t,e,i){if(void 0===i&&(i=void 0),"__internal"===e.home){var a=e;switch(a.type){case"Batched":return void a.list.flatMap(function(e){return o(r,n,t,e,i)});case"Mapped":return void o(r,n,t,a.original,i?function(r){return i(a.actionMapper(r))}:a.actionMapper);default:throw new Error("Invalid result type "+a)}}else{var u=r(e.home);n[e.home]||(n[e.home]={cmds:[],subs:[]}),(t?n[e.home].cmds:n[e.home].subs).push(i?(t?u.mapCmd:u.mapSub)(i,e):e)}}var i={__proto__:null,run:function(r,t,e,i){void 0===i&&(i=[]);var a,u=n(i),f=r.update,c=r.view,s=r.subscriptions,p={},l=[],d=!1,v=!1,h=[];function m(){if(d&&!v){for(v=!0;h.length>0;){var r=h.shift();r.dispatch(r.action)}v=!1}}function _(r){d&&g(f(r,a))}var b=function(r){return function(n){w(function(r){return function(n){if(d){var t=u(r),e=b(r);p[r]=t.onSelfAction(y,e,n,p[r])}}}(r),n)}},y=function(r){w(_,r)};function w(r,n){d&&(h.push({dispatch:r,action:n}),m())}function g(r){a=r[0];var n=r[1],t=s&&s(a),f={};n&&o(u,f,!0,n),t&&o(u,f,!1,t);var l=i,d=Array.isArray(l),v=0;for(l=d?l:l[Symbol.iterator]();;){var h,m;if(d){if(v>=l.length)break;m=l[v++]}else{if((v=l.next()).done)break;m=v.value}var _=m.home,w=null!=(h=f[_])?h:{cmds:[],subs:[]},g=w.cmds,k=w.subs,E=u(_);p[_]=E.onEffects(y,b(_),g,k,p[_])}e(c({state:a,dispatch:y}))}return function(){var r=i,n=Array.isArray(r),t=0;for(r=n?r:r[Symbol.iterator]();;){var e;if(n){if(t>=r.length)break;e=r[t++]}else{if((t=r.next()).done)break;e=t.value}l.push(e.setup(y,b(e.home)))}}(),d=!0,g(r.init(t)),m(),function(){d&&(d=!1,function(){var r=l,n=Array.isArray(r),t=0;for(r=n?r:r[Symbol.iterator]();;){var e;if(n){if(t>=r.length)break;e=r[t++]}else{if((t=r.next()).done)break;e=t.value}e()}}())}}},a=new Map;function u(r){return{type:"Ok",value:r}}function f(r){return{type:"Err",error:r}}var c=i,s={__proto__:null,map:function(r,n){var t=a.get(n),e=t&&t.get(r);if(e)return e;var o=function(t){return n(r(t))};return t||(t=new Map,a.set(n,t)),t.set(r,o),o}},p={__proto__:null,batch:function(r){return t(r)},map:function(r,n){return e(r,n)}},l={__proto__:null,Ok:u,Err:f,mapError:function(r,n){switch(n.type){case"Ok":return u(n.value);case"Err":return f(r(n.error));default:throw new Error("Invalid result type "+n)}}};r.Cmd={__proto__:null,batch:function(r){return t(r)},map:function(r,n){return e(r,n)}},r.Dispatch=s,r.Program=c,r.Result=l,r.Sub=p,r.createGetEffectManager=n}); | ||
//# sourceMappingURL=core.umd.js.map |
@@ -18,2 +18,3 @@ /** | ||
* This field is only needed in order to preserve the generic type paramter Action | ||
* @ignore | ||
*/ | ||
@@ -20,0 +21,0 @@ readonly __$$dummy_tag?: Action; |
{ | ||
"name": "@typescript-tea/core", | ||
"version": "0.5.0", | ||
"version": "0.5.1", | ||
"description": "The Elm Architecture for typescript", | ||
@@ -42,3 +42,3 @@ "main": "dist/core.js", | ||
"microbundle": "^0.12.0-next.8", | ||
"prettier": "^2.1.2", | ||
"prettier": "^2.3.0", | ||
"rimraf": "^3.0.0", | ||
@@ -54,2 +54,3 @@ "ts-jest": "^26.4.1", | ||
"test-coverage": "jest --coverage", | ||
"test:work": "jest src/__tests__/program.test.ts", | ||
"lint": "eslint './src/**/*.ts{,x}' --ext .js,.ts,.tsx -f visualstudio", | ||
@@ -56,0 +57,0 @@ "dist": "yarn build && rimraf dist && microbundle src/index.ts", |
@@ -0,2 +1,6 @@ | ||
/* eslint-disable functional/prefer-readonly-type */ | ||
import { Program, run } from "../program"; | ||
import { createMockEffectManager } from "./helpers/mock-effect-manager"; | ||
import { createMockProgram } from "./helpers/mock-program"; | ||
import { createMockRender } from "./helpers/mock-render"; | ||
@@ -34,19 +38,65 @@ beforeAll(() => { | ||
test("View can dispatch", (done) => { | ||
const render = (): void => { | ||
// Do nothing | ||
}; | ||
const program: Program<undefined, number, string, string> = { | ||
init: () => [0], | ||
update: () => [1], | ||
view: ({ dispatch, state }) => { | ||
if (state === 0) { | ||
dispatch("increment"); | ||
} else { | ||
expect(state).toEqual(1); | ||
done(); | ||
} | ||
return "view"; | ||
}, | ||
}; | ||
run(program, undefined, render, []); | ||
// Create mocks | ||
const mp = createMockProgram(); | ||
const mr = createMockRender(); | ||
// Setup mokcs | ||
mp.update.mockImplementationOnce(() => [1]); | ||
mp.view | ||
.mockImplementationOnce(({ dispatch }) => dispatch("increment")) | ||
.mockImplementationOnce(({ state }) => { | ||
expect(state).toEqual(1); | ||
done(); | ||
}); | ||
// Run | ||
run(mp, undefined, mr, []); | ||
}); | ||
test("onEffects is called when subscriptions is not undefined", (done) => { | ||
// Create mocks | ||
const emHome = "mock1" as const; | ||
const me = createMockEffectManager(emHome); | ||
const mp = createMockProgram(); | ||
const mr = createMockRender(); | ||
// Setup mocks | ||
mp.update.mockImplementationOnce(() => [1]); | ||
mp.subscriptions.mockReturnValue({ home: emHome, type: "nisse" }); | ||
mp.view | ||
.mockImplementationOnce(({ dispatch }) => dispatch("increment")) | ||
.mockImplementationOnce(({ state }) => { | ||
expect(state).toEqual(1); | ||
expect(me.onEffects.mock.calls.length).toBe(2); | ||
done(); | ||
}); | ||
me.onEffects.mockReturnValueOnce(0); | ||
// Run | ||
run(mp, undefined, mr, [me]); | ||
}); | ||
/** | ||
* onEffects must be called with undefined subscriptions becuase | ||
* the previous call may have had subscriptions so teh effect | ||
* manager must know to clear those subscriptions when undefined | ||
* is returned from program.subscription(). | ||
*/ | ||
test("onEffects is called when subscriptions is undefined", (done) => { | ||
// Create mocks | ||
const emHome = "mock1" as const; | ||
const me = createMockEffectManager(emHome); | ||
const mp = createMockProgram(); | ||
const mr = createMockRender(); | ||
// Setup mocks | ||
mp.update.mockImplementationOnce(() => [1]); | ||
mp.subscriptions.mockReturnValueOnce(undefined); | ||
mp.view.mockImplementationOnce(({ state }) => { | ||
expect(state).toEqual(0); | ||
expect(me.onEffects.mock.calls.length).toBe(1); | ||
// cmds passed to onEffects() should be an empty array | ||
expect(me.onEffects.mock.calls[0][2]).toStrictEqual([]); | ||
// subs passed to onEffects() should be an empty array | ||
expect(me.onEffects.mock.calls[0][3]).toStrictEqual([]); | ||
done(); | ||
}); | ||
me.onEffects.mockReturnValueOnce(0); | ||
// Run | ||
run(mp, undefined, mr, [me]); | ||
}); |
@@ -31,2 +31,3 @@ /** | ||
* This field is only needed in order to preserve the generic type paramter Action | ||
* @ignore | ||
*/ | ||
@@ -33,0 +34,0 @@ readonly __$$dummy_tag?: Action; |
@@ -57,9 +57,16 @@ import { Cmd } from "./cmd"; | ||
const dispatchManager = (home: string) => (action: Action): void => { | ||
if (isRunning) { | ||
const manager = getEffectManager(home); | ||
const enqueueSelfAction = enqueueManagerAction(home); | ||
managerStates[home] = manager.onSelfAction(enqueueProgramAction, enqueueSelfAction, action, managerStates[home]); | ||
} | ||
}; | ||
const dispatchManager = | ||
(home: string) => | ||
(action: Action): void => { | ||
if (isRunning) { | ||
const manager = getEffectManager(home); | ||
const enqueueSelfAction = enqueueManagerAction(home); | ||
managerStates[home] = manager.onSelfAction( | ||
enqueueProgramAction, | ||
enqueueSelfAction, | ||
action, | ||
managerStates[home] | ||
); | ||
} | ||
}; | ||
@@ -72,5 +79,7 @@ function dispatchApp(action: Action): void { | ||
const enqueueManagerAction = (home: string) => (action: unknown): void => { | ||
enqueueRaw(dispatchManager(home), action); | ||
}; | ||
const enqueueManagerAction = | ||
(home: string) => | ||
(action: unknown): void => { | ||
enqueueRaw(dispatchManager(home), action); | ||
}; | ||
@@ -95,4 +104,6 @@ const enqueueProgramAction = (action: Action): void => { | ||
sub && gatherEffects(getEffectManager, gatheredEffects, false, sub); // eslint-disable-line @typescript-eslint/no-unused-expressions,no-unused-expressions | ||
for (const home of Object.keys(gatheredEffects)) { | ||
const { cmds, subs } = gatheredEffects[home]; | ||
// Always call all effect managers so they get updated subscriptions even if there are no subscriptions anymore | ||
for (const em of effectManagers) { | ||
const home = em.home; | ||
const { cmds, subs } = gatheredEffects[home] ?? { cmds: [], subs: [] }; | ||
const manager = getEffectManager(home); | ||
@@ -99,0 +110,0 @@ managerStates[home] = manager.onEffects( |
@@ -33,2 +33,3 @@ /** | ||
* This field is only needed in order to preserve the generic type paramter Action | ||
* @ignore | ||
*/ | ||
@@ -35,0 +36,0 @@ readonly __$$dummy_tag?: Action; |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
168773
45
1064