@little-bonsai/ingrates
Version:
An isomorphic actor system
3 lines (2 loc) • 5.38 kB
JavaScript
!function(n,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports,require("nanoid")):"function"==typeof define&&define.amd?define(["exports","nanoid"],e):e((n||self).ingrates={},n.nanoid)}(this,function(n,e){function t(){var n={};return{kill:function(e){var t=e.self,r=e.parent;try{var i=n[t].nickname;return delete n[t],delete n[r].children[i],Promise.resolve(!0)}catch(n){return Promise.reject(n)}},get:function(e){try{return Promise.resolve(n[e]||null)}catch(n){return Promise.reject(n)}},set:function(e){try{return n[e.self]=Object.assign({},n[e.self],e),Promise.resolve(!0)}catch(n){return Promise.reject(n)}}}}var r=function(n){try{var e;return Promise.resolve(function(n,e,t){if("function"==typeof n[i]){var r,s,a,f=n[i]();if(function n(i){try{for(;!((r=f.next()).done||t&&t());)if((i=e(r.value))&&i.then){if(!c(i))return void i.then(n,a||(a=o.bind(null,s=new u,2)));i=i.v}s?o(s,1,i):s=i}catch(n){o(s||(s=new u),2,n)}}(),f.return){var l=function(n){try{r.done||f.return()}catch(n){}return n};if(s&&s.then)return s.then(l,function(n){throw l(n)});l()}return s}if(!("length"in n))throw new TypeError("Object is not iterable");for(var h=[],m=0;m<n.length;m++)h.push(n[m]);return function(n,e,t){var r,i,s=-1;return function a(f){try{for(;++s<n.length&&(!t||!t());)if((f=e(s))&&f.then){if(!c(f))return void f.then(a,i||(i=o.bind(null,r=new u,2)));f=f.v}r?o(r,1,f):r=f}catch(n){o(r||(r=new u),2,n)}}(),r}(h,function(n){return e(h[n])},t)}(n,function(n){return Promise.resolve(n()).then(function(n){if(n)return e=1,n})},function(){return e}))}catch(n){return Promise.reject(n)}},i="undefined"!=typeof Symbol?Symbol.iterator||(Symbol.iterator=Symbol("Symbol.iterator")):"@@iterator";function o(n,e,t){if(!n.s){if(t instanceof u){if(!t.s)return void(t.o=o.bind(null,n,e));1&e&&(e=t.s),t=t.v}if(t&&t.then)return void t.then(o.bind(null,n,e),o.bind(null,n,2));n.s=e,n.v=t;var r=n.o;r&&r(n)}}var u=function(){function n(){}return n.prototype.then=function(e,t){var r=new n,i=this.s;if(i){var u=1&i?e:t;if(u){try{o(r,1,u(this.v))}catch(n){o(r,2,n)}return r}return this}return this.o=function(n){try{var i=n.v;1&n.s?o(r,1,e?e(i):i):t?o(r,1,t(i)):o(r,2,i)}catch(n){o(r,2,n)}},r},n}();function c(n){return n instanceof u&&1&n.s}var s=e.customAlphabet("23456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnpqrstuvwxyz",14);function a(){}n.createActorSystem=function n(e){var i=function n(e){try{var t=function(){setTimeout(n,0,e),y[e]=!1};if(y[e]||0===P[e].length||b[e])return Promise.resolve();y[e]=!0;var i=P[e].shift(),o="ADD_CHILD"===i.special?Promise.resolve(r(w.map(function(n){return function(){return n.get(e,g)}})).then(function(n){return Promise.all(w.map(function(e){var t;return e.set(Object.assign({},n,{children:Object.assign({},n.children,(t={},t[i.nickname]=i.child,t))}))}))})).then(function(){}):Promise.resolve(Promise.resolve(j.some(function(n){return n(e,i)})||r(w.map(function(n){return function(){return n.get(e,g)}})).then(function(n){return n?function(n){try{var e=n.args,t=n.msg,r=n.name,i=n.parent,o=n.self,u=n.state,c=T({children:n.children,msg:t,name:r,parent:i,self:o,state:u});return Promise.resolve(function(n,t){try{var i=Promise.resolve(g[r].apply(g,[c].concat(e))).then(function(n){return"function"==typeof n?n(u):n})}catch(n){return t(n)}return i&&i.then?i.then(void 0,t):i}(0,function(e){switch(p("RunError",e,{self:o,name:r,msg:t,state:u,parent:i}),(g[r].supervision||a)(e,n,{escalate:1,restart:2,resume:3,retry:4,stop:5})){case 1:S(o,i,{error:e,msg:t});case 5:return void k(i,o)}}))}catch(n){return Promise.reject(n)}}(Object.assign({msg:i},n)).then(function(e){return Object.assign({},n,{state:void 0===e?n.state:e})}).then(function(n){return Promise.all(w.map(function(e){return e.set(n)}))}):null}))).then(function(){});return Promise.resolve(o&&o.then?o.then(t):t())}catch(n){return Promise.reject(n)}},o=void 0===e?{}:e,u=o.enhancers,c=void 0===u?[]:u,f=o.realizers,l=void 0===f?[t]:f,h=o.transports,m=o.addressFn,v=void 0===m?s:m,d=o.onErr,p=void 0===d?console.error:d,y={},g={},b={},P={},j=(void 0===h?[]:h).map(function(e){return e(S,n)}),w=l.map(function(e){return e(n)});function O(n,e,t){var r=arguments,o=t.name;if(!g[o])return p("StartError",o,"unregistered actor"),null;var u=v();return(P[n]||[]).unshift({special:"ADD_CHILD",nickname:e,child:u}),setTimeout(i,0,u),P[u]=[{type:"Start",src:null},{type:"Mount",src:null}],b[u]=!0,Promise.all(w.map(function(t){return t.set({children:{},name:o,parent:n,nickname:e,self:u,args:[].slice.call(r,3),state:void 0},g)})).then(function(){b[u]=!1,setTimeout(i,0,u)}).catch(function(n){return p("StartError",n,{self:u,name:o})}),u}function S(n,e,t){var r=Object.assign({src:n},t);return P[e]?P[e].push(r):P[e]=[{type:"Mount",src:null},r],setTimeout(i,0,e),e}function k(n,e){w.forEach(function(t){return t.kill({self:e,parent:n},g)})}function T(n){var e=n.self,t=k.bind(null,e),r=S.bind(null,e),i=new Proxy(function(){return O.apply(void 0,[e,v()].concat(Array.prototype.slice.call(arguments)))},{get:function(n,t,r){return O.bind(null,e,t)}}),o=Object.assign(n,{dispatch:r,spawn:i,kill:t});return Object.assign(n,c.reduce(function(n,e){return Object.assign(e(n),n)},o))}return T({register:function(n){g[n.name]=n},self:null,parent:null,mount:function(n){P[n]=[{type:"Mount",src:null}],setTimeout(i,0,n)}})},n.createDefaultRAMRealizer=t,n.makeAddress=s});
//# sourceMappingURL=index.umd.js.map