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