microcosm
Advanced tools
Comparing version 12.6.0 to 12.6.1-alpha
@@ -409,8 +409,12 @@ 'use strict'; | ||
/** | ||
* Is the provided value a generator function? | ||
* Is the provided value a generator function? This is largely informed | ||
* by the regenerator runtime. | ||
* @param {*} value | ||
* @return {boolean} | ||
*/ | ||
var $Symbol = typeof Symbol === "function" ? Symbol : {}; | ||
var toStringTagSymbol = $Symbol.toStringTag || "@@toStringTag"; | ||
function isGeneratorFn(value) { | ||
return get(value, ['constructor', 'name'], '') === 'GeneratorFunction'; | ||
return get(value, toStringTagSymbol, '') === 'GeneratorFunction'; | ||
} | ||
@@ -1675,2 +1679,33 @@ | ||
/** | ||
* Provide support for generators, performing a sequence of actions in | ||
* order. | ||
*/ | ||
function processGenerator(action, body, repo) { | ||
action.open(); | ||
var iterator = body(repo); | ||
function step(payload) { | ||
var next = iterator.next(payload); | ||
if (next.done) { | ||
action.resolve(payload); | ||
} else { | ||
progress(next.value); | ||
} | ||
} | ||
function progress(subAction) { | ||
subAction.onDone(step); | ||
subAction.onCancel(action.cancel, action); | ||
subAction.onError(action.reject, action); | ||
} | ||
step(); | ||
return action; | ||
} | ||
/** | ||
* Coroutine is used by an action to determine how it should resolve | ||
@@ -1710,26 +1745,3 @@ * the body of their associated command. | ||
if (isGeneratorFn(body)) { | ||
var step = function step(payload) { | ||
var next = iterator.next(payload); | ||
if (next.done) { | ||
action.resolve(payload); | ||
} else { | ||
progress(next.value); | ||
} | ||
}; | ||
var progress = function progress(subAction) { | ||
subAction.onDone(step); | ||
subAction.onCancel(action.cancel, action); | ||
subAction.onError(action.reject, action); | ||
}; | ||
action.open(); | ||
var iterator = body(repo); | ||
step(); | ||
return action; | ||
return processGenerator(action, body, repo); | ||
} | ||
@@ -1736,0 +1748,0 @@ |
@@ -1,1 +0,1 @@ | ||
"use strict";function t(){this.a=[]}function n(t,n){if(null==t)throw new Error("Unable to identify "+t+" action");if(t.b===!0)return t;"string"==typeof t&&(n=t,t=function(t){return t}),P+=1;var e=n||(t.name||_)+"."+P;return t.open=e+".open",t.loading=e+".loading",t.update=t.loading,t.done=e,t.resolve=t.done,t.error=e+".error",t.reject=t.error,t.cancel=e+".cancel",t.cancelled=t.cancel,t.toString=function(){return e},t.b=!0,t}function e(t){return""===t||null===t||void 0===t}function i(t){return Array.isArray(t)?t:e(t)?[]:"string"==typeof t?t.split(H):[t]}function r(t){var n=t;return Array.isArray(t)===!1&&(n=(""+n).split(N)),n.map(i)}function s(t){return t.join(H)}function o(t){return t.map(s).join(N)}function a(t){if(Array.isArray(t))return t.slice(0);if(d(t)===!1)return t;var n={};for(var e in t)n[e]=t[e];return n}function h(){for(var t=null,n=null,e=0,i=arguments.length;e<i;e++){t=t||arguments[e],n=n||t;var r=arguments[e];for(var s in r)t[s]!==r[s]&&(t===n&&(t=a(n)),t[s]=r[s])}return t}function c(t,n,e){return t.__proto__=n,t.prototype=h(Object.create(n.prototype),{constructor:t.prototype.constructor},e),t}function u(t,n,e){if(null==t)return e;for(var r=i(n),s=0,o=r.length;s<o;s++){var a=null==t?void 0:t[r[s]];if(void 0===a)return e;t=a}return t}function f(t,n,e){for(var r=i(n),s=0,o=r.length;s<o;s++){var n=r[s];if(!t||B.call(t,n)===!1)return!1;t=t[n]}return!0}function p(t,n,e){var r=i(n),s=r.length;if(s<=0)return e;if(u(t,r)===e)return t;for(var o=a(t),h=o,c=0;c<s;c++){var f=r[c],p=e;c<s-1&&(p=f in h?a(h[f]):{}),h[f]=p,h=h[f]}return o}function l(t){var n=void 0===t?"undefined":R(t);return!!t&&("object"===n||"function"===n)&&"function"==typeof t.then}function d(t){return!!t&&"object"===(void 0===t?"undefined":R(t))}function v(t){return"GeneratorFunction"===u(t,["constructor","name"],"")}function g(t,n,e){return"function"==typeof t?new t(n,e):Object.create(t)}function y(t,n,e,r){var s=i(n);return"function"!=typeof e?p(t,s,e):p(t,s,e(u(t,s,r)))}function m(e,i){t.call(this),this.id=C++,this.command=n(e),this.timestamp=Date.now(),this.children=[],i&&this[i]()}function x(t,n){return function(e,i){var r=t;if(n)try{r=i.deserialize(t)}catch(t){throw e.reject(t),t}var s=i.domains.sanitize(r);e.resolve(s)}}function w(n){t.call(this),this.size=0,this.limit=Math.max(1,n||1),this.repos=[],this.begin()}function b(){this.pool={}}function z(t,n){this.repo=n}function k(t,n,e){var i=U[e],r=t[n],s=n[e];return d(r)?r[i]||r[e]:t[s]}function A(t){this.repo=t,this.domains=[],this.registry={},this.add([],z)}function S(t){this.repo=t,this.effects=[]}function j(t,n,e){this.id=t,this.key=n,this.edges=[],e&&(this.parent=e,e.connect(this))}function O(n,e){t.call(this),this.id=n,this.keyPaths=r(e)}function D(t){this.snapshot=t,this.nodes={}}function I(t,n,e){if(l(n))return t.open(),n.then(function(n){return global.setTimeout(function(){return t.resolve(n)},0)},function(n){return global.setTimeout(function(){return t.reject(n)},0)}),t;if(v(n)){var i=function(n){var e=s.next(n);e.done?t.resolve(n):r(e.value)},r=function(n){n.onDone(i),n.onCancel(t.cancel,t),n.onError(t.reject,t)};t.open();var s=n(e);return i(),t}return"function"==typeof n?(n(t,e),t):t.resolve(n)}function E(n,e,i){t.call(this);var r=h(E.defaults,this.constructor.defaults,n);this.parent=r.parent,this.history=this.parent?this.parent.history:new w(r.maxHistory),this.history.addRepo(this),this.archive=new b,this.domains=new A(this),this.effects=new S(this),this.changes=new D(this.state),this.initial=this.parent?this.parent.initial:{},this.state=this.parent?this.parent.state:this.initial,this.setup(r),e&&this.reset(e,i)}Object.defineProperty(exports,"__esModule",{value:!0}),t.prototype={on:function(t,n,e){return this.a.push({event:t,fn:n,scope:e,once:!1}),this},once:function(t,n,e){return this.a.push({event:t,fn:n,scope:e,once:!0}),this},off:function(t,n,e){for(var i=null==n,r=0;r<this.a.length;){var s=this.a[r];s.event===t&&(i||s.fn===n&&s.scope===e)?this.a.splice(r,1):r+=1}return this},removeAllListeners:function(){this.a.length=0},c:function(t){for(var n=0,e=arguments.length,i=Array(e>1?e-1:0),r=1;r<e;r++)i[r-1]=arguments[r];for(;n<this.a.length;){var s=this.a[n];s.event===t&&(s.fn.apply(s.scope||this,i),s.once)?this.a.splice(n,1):n+=1}return this}};var P=0,_="_action",H=".",N=",",R="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},B=Object.prototype.hasOwnProperty,C=0;c(m,t,{status:"inactive",payload:void 0,disabled:!1,complete:!1,parent:null,next:null,open:function(t){return this.d.apply(this,arguments),this.e("open",!1),this},update:function(t){return this.d.apply(this,arguments),this.e("update",!1),this},resolve:function(t){return this.d.apply(this,arguments),this.e("resolve",!0),this},reject:function(t){return this.d.apply(this,arguments),this.e("reject",!0),this},cancel:function(t){return this.d.apply(this,arguments),this.e("cancel",!0),this},onOpen:function(t,n){return this.f("open",t,n),this},onUpdate:function(t,n){return this.on("update",t,n)},onDone:function(t,n){return this.f("resolve",t,n),this},onError:function(t,n){return this.f("reject",t,n),this},onCancel:function(t,n){return this.f("cancel",t,n),this},is:function(t){return this.command[this.status]===this.command[t]},toggle:function(t){return this.disabled=!this.disabled,t||this.c("change",this),this},then:function(t,n){var e=this;return new Promise(function(t,n){e.onDone(t),e.onError(n)}).then(t,n)},isDisconnected:function(){return!this.parent},prune:function(){this.parent.parent=null},lead:function(t){this.next=t,t&&this.adopt(t)},adopt:function(t){this.children.indexOf(t)<0&&this.children.push(t),t.parent=this},remove:function(){this.parent.abandon(this),this.removeAllListeners()},abandon:function(t){var n=this.children.indexOf(t);n>=0&&(this.children.splice(n,1),t.parent=null),this.next===t&&this.lead(t.next)},d:function(t){arguments.length&&(this.payload=t)},e:function(t,n){this.complete||(this.status=t,this.complete=n,this.c("change",this),this.c(t,this.payload))},f:function(t,n,e){n&&(this.is(t)?n.call(e,this.payload):this.once(t,n,e))}}),Object.defineProperty(m.prototype,"type",{get:function(){return this.command[this.status]}});var L=n(function(t,n){return x(t,n)},"$reset"),M=n(function(t,n){return x(t,n)},"$patch"),J=function(){},Q=function(){},T=function(t){return t};c(w,t,{checkout:function(t){return this.head=t||this.head,this.setActiveBranch(),this.reconcile(this.head),this},toggle:function(t){var n=[].concat(t);n.forEach(function(t){return t.toggle("silently")}),this.reconcile(n[0])},toArray:function(){return this.map(function(t){return t})},map:function(t,n){for(var e=this.size,i=Array(e),r=this.head;e--;)i[e]=t.call(n,r),r=r.parent;return i},wait:function(){var t=this.toArray(),n=t.length;return new Promise(function(e,i){function r(){n-=1,n<=0&&e()}t.map(function(t){t.onDone(r),t.onCancel(r),t.onError(i)})})},then:function(t,n){return this.wait().then(t,n)},begin:function(){this.head=this.root=null,this.append(Q,"resolve")},addRepo:function(t){this.repos.push(t)},removeRepo:function(t){var n=this.repos.indexOf(t);~n&&this.repos.splice(n,1)},invoke:function(t,n){for(var e=this.repos,i=0;i<e.length;i++)e[i][t](n)},append:function(t,n){var e=new m(t,n);return this.size>0?this.head.lead(e):(new m(J,"resolve").adopt(e),this.root=e),this.head=e,this.size+=1,this.invoke("createInitialSnapshot",e),e.on("change",this.reconcile,this),this.c("append",e),this.head},remove:function(t){if(!t.isDisconnected()){var n=t.next,e=t.parent;if(this.clean(t),this.size<=0)return void this.begin();n?t===this.root&&(this.root=n):n=this.head=e,t.disabled||this.reconcile(n)}},clean:function(t){this.size-=1,this.invoke("removeSnapshot",t),t.remove()},reconcile:function(t){for(var n=t;n&&(this.invoke("reconcile",n),n!==this.head);)n=n.next;this.archive(),this.invoke("release",t)},archive:function(){for(var t=this.size,n=this.root;t>this.limit&&n.complete;)t-=1,this.invoke("removeSnapshot",n.parent),n=n.next;n.prune(),this.root=n,this.size=t},setActiveBranch:function(){for(var t=this.head,n=1;t!==this.root;){var e=t.parent;e.next=t,t=e,n+=1}this.size=n}}),b.prototype={create:function(t){this.set(t,this.get(t.parent))},get:function(t,n){var e=this.pool[t.id];return void 0===e?n:e},set:function(t,n){this.pool[t.id]=n},remove:function(t){delete this.pool[t.id]}},z.prototype={reset:function(t,n){var e=this.repo.domains.sanitize(n);return h(t,this.repo.getInitialState(),e)},patch:function(t,n){return h(t,this.repo.domains.sanitize(n))},addDomain:function(t){return h(this.repo.getInitialState(),t)},register:function(){var t;return t={},t[L]=this.reset,t[M]=this.patch,t[T]=this.addDomain,t}};var U={inactive:"inactive",open:"open",update:"loading",loading:"update",done:"resolve",resolve:"done",reject:"error",error:"reject",cancel:"cancelled",cancelled:"cancel"};A.prototype={getHandlers:function(t){for(var n=t.command,e=t.status,i=[],r=0,s=this.domains.length;r<s;r++){var o=this.domains[r],a=o[0],h=o[1];if(h.register){var c=k(h.register(),n,e);c&&i.push({key:a,domain:h,handler:c})}}return i},register:function(t){var n=t.type;return void 0===this.registry[n]&&(this.registry[n]=this.getHandlers(t)),this.registry[n]},add:function(t,n,e){var r=g(n,e,this.repo);return this.domains.push([i(t),r]),this.registry={},r.setup&&r.setup(this.repo,e),r},reduce:function(t,n,e){for(var i=n,r=1,s=this.domains.length;r<s;r++){var o=this.domains[r],a=o[0],h=o[1];i=t.call(e,i,a,h)}return i},sanitize:function(t){for(var n={},e=0,i=this.domains.length;e<i;e++){var r=this.domains[e],s=r[0];s.length&&f(t,s)&&(n=p(n,s,u(t,s)))}return n},dispatch:function(t,n){for(var e=this.register(n),i=0,r=e.length;i<r;i++){var s=e[i],o=s.key,a=s.domain,h=s.handler,c=u(t,o);t=p(t,o,h.call(a,c,n.payload))}return t},deserialize:function(t){return this.reduce(function(n,e,i){return i.deserialize?p(n,e,i.deserialize(u(t,e))):n},t)},serialize:function(t,n){return this.reduce(function(n,e,i){return i.serialize?p(n,e,i.serialize(u(t,e))):n},n)},teardown:function(){for(var t=0,n=this.domains.length;t<n;t++){var e=this.domains[t],i=(e[0],e[1]);i.teardown&&i.teardown(this.repo)}}},S.prototype={add:function(t,n){var e=g(t,n,this.repo);return e.setup&&e.setup(this.repo,n),this.effects.push(e),e},teardown:function(){for(var t=0,n=this.effects.length;t<n;t++){var e=this.effects[t];e.teardown&&e.teardown(this.repo)}},dispatch:function(t){for(var n=t.command,e=t.payload,i=t.status,r=0,s=this.effects.length;r<s;r++){var o=this.effects[r];if(o.register){var a=k(o.register(),n,i);a&&a.call(o,this.repo,e)}}}},j.prototype={parent:null,connect:function(t){t!==this&&this.edges.indexOf(t)<0&&this.edges.push(t)},disconnect:function(t){var n=this.edges.indexOf(t);~n&&this.edges.splice(n,1)},isAlone:function(){return this.edges.length<=0},orphan:function(){this.parent&&this.parent.disconnect(this)}},O.getId=function(t){return"query:"+o(r(t))},c(O,t,{extract:function(t){for(var n=this.keyPaths.length,e=Array(n),i=0;i<n;i++)e[i]=u(t,this.keyPaths[i]);return e},trigger:function(t){var n=this.extract(t);this.c.apply(this,["change"].concat(n))},isEmpty:function(){return this.a.length<=0}});var $="";D.prototype={on:function(t,n,e){for(var i=r(t),s=O.getId(t),o=this.addQuery(s,i),a=0;a<i.length;a++)this.addBranch(i[a],o);return o.on("change",n,e),o},off:function(t,n,e){var i=O.getId(t),r=this.nodes[i];r&&(r.off("change",n,e),r.isEmpty()&&this.prune(r))},update:function(t){var n=this.snapshot;this.snapshot=t;var e=this.nodes[$];e&&this.scan(e,n,t)},addNode:function(t,n,e){return this.nodes[t]||(this.nodes[t]=new j(t,n,e)),this.nodes[t]},addQuery:function(t,n){return this.nodes[t]||(this.nodes[t]=new O(t,n)),this.nodes[t]},remove:function(t){delete this.nodes[t.id]},prune:function(t){for(var n=t.keyPaths.map(s),e=0,i=n.length;e<i;e++){var r=this.nodes[n[e]];r.disconnect(t);do{if(!r.isAlone())break;r.orphan(),this.remove(r),r=r.parent}while(r)}this.remove(t)},addBranch:function(t,n){for(var e=this.addNode($,"",null),i="",r=0,s=t.length;r<s;r++)i=i?i+"."+t[r]:t[r],e=this.addNode(i,t[r],e);e.connect(n)},scan:function(t,n,e){for(var i=[{node:t,last:n,next:e}],r=[];i.length;){var s=i.pop(),o=s.node,a=s.last,h=s.next;if(a!==h)for(var c=o.edges,u=0,f=c.length;u<f;u++){var p=c[u];p instanceof O&&r.indexOf(p)<0?(p.trigger(this.snapshot),r.push(p)):i.push({node:p,last:null==a?a:a[p.key],next:null==h?h:h[p.key]})}}}},E.defaults={maxHistory:0,parent:null},c(E,t,{setup:function(){},teardown:function(){this.effects.teardown(),this.domains.teardown(),this.c("teardown",this),this.history.removeRepo(this),this.removeAllListeners()},getInitialState:function(){return this.initial},recall:function(t,n){return this.archive.get(t,n)},createInitialSnapshot:function(t){this.archive.create(t)},updateSnapshot:function(t,n){this.archive.set(t,n)},removeSnapshot:function(t){this.archive.remove(t)},reconcile:function(t){var n=this.recall(t.parent,this.initial);this.parent&&(n=h(n,this.parent.recall(t))),t.disabled||(n=this.domains.dispatch(n,t)),this.updateSnapshot(t,n),this.state=n},release:function(t){this.changes.update(this.state),this.effects.dispatch(t)},on:function(n,e,i){var r=n.split(":",2),s=r[0],o=r[1],a=void 0===o?"":o;switch(s){case"change":this.changes.on(a,e,i);break;default:t.prototype.on.apply(this,arguments)}return this},off:function(n,e,i){var r=n.split(":",2),s=r[0],o=r[1],a=void 0===o?"":o;switch(s){case"change":this.changes.off(a,e,i);break;default:t.prototype.off.apply(this,arguments)}return this},append:function(t,n){return this.history.append(t,n)},push:function(t){for(var n=this.append(t),e=arguments.length,i=Array(e>1?e-1:0),r=1;r<e;r++)i[r-1]=arguments[r];return I(n,n.command.apply(null,i),this),n},prepare:function(){for(var t=this,n=arguments.length,e=Array(n),i=0;i<n;i++)e[i]=arguments[i];return function(){for(var n=arguments.length,i=Array(n),r=0;r<n;r++)i[r]=arguments[r];return t.push.apply(t,e.concat(i))}},addDomain:function(t,n,e){var i=this.domains.add(t,n,e);return i.getInitialState&&(this.initial=p(this.initial,t,i.getInitialState())),this.push(T,i),i},addEffect:function(t,n){return this.effects.add(t,n)},reset:function(t,n){return this.push(L,t,n)},patch:function(t,n){return this.push(M,t,n)},deserialize:function(t){var n=t;return this.parent?n=this.parent.deserialize(t):"string"==typeof n&&(n=JSON.parse(n)),this.domains.deserialize(n)},serialize:function(){var t=this.parent?this.parent.serialize():{};return this.domains.serialize(this.state,t)},toJSON:function(){return this.serialize()},checkout:function(t){return this.history.checkout(t),this},fork:function(){return new E({parent:this})}}),exports.default=E,exports.Microcosm=E,exports.Action=m,exports.History=w,exports.tag=n,exports.get=u,exports.set=p,exports.update=y,exports.merge=h,exports.inherit=c,exports.getRegistration=k; | ||
"use strict";function t(){this.a=[]}function n(t,n){if(null==t)throw new Error("Unable to identify "+t+" action");if(t.b===!0)return t;"string"==typeof t&&(n=t,t=function(t){return t}),_+=1;var e=n||(t.name||H)+"."+_;return t.open=e+".open",t.loading=e+".loading",t.update=t.loading,t.done=e,t.resolve=t.done,t.error=e+".error",t.reject=t.error,t.cancel=e+".cancel",t.cancelled=t.cancel,t.toString=function(){return e},t.b=!0,t}function e(t){return""===t||null===t||void 0===t}function i(t){return Array.isArray(t)?t:e(t)?[]:"string"==typeof t?t.split(N):[t]}function r(t){var n=t;return Array.isArray(t)===!1&&(n=(""+n).split(R)),n.map(i)}function s(t){return t.join(N)}function o(t){return t.map(s).join(R)}function a(t){if(Array.isArray(t))return t.slice(0);if(d(t)===!1)return t;var n={};for(var e in t)n[e]=t[e];return n}function h(){for(var t=null,n=null,e=0,i=arguments.length;e<i;e++){t=t||arguments[e],n=n||t;var r=arguments[e];for(var s in r)t[s]!==r[s]&&(t===n&&(t=a(n)),t[s]=r[s])}return t}function c(t,n,e){return t.__proto__=n,t.prototype=h(Object.create(n.prototype),{constructor:t.prototype.constructor},e),t}function u(t,n,e){if(null==t)return e;for(var r=i(n),s=0,o=r.length;s<o;s++){var a=null==t?void 0:t[r[s]];if(void 0===a)return e;t=a}return t}function f(t,n,e){for(var r=i(n),s=0,o=r.length;s<o;s++){var n=r[s];if(!t||T.call(t,n)===!1)return!1;t=t[n]}return!0}function p(t,n,e){var r=i(n),s=r.length;if(s<=0)return e;if(u(t,r)===e)return t;for(var o=a(t),h=o,c=0;c<s;c++){var f=r[c],p=e;c<s-1&&(p=f in h?a(h[f]):{}),h[f]=p,h=h[f]}return o}function l(t){var n=void 0===t?"undefined":B(t);return!!t&&("object"===n||"function"===n)&&"function"==typeof t.then}function d(t){return!!t&&"object"===(void 0===t?"undefined":B(t))}function v(t){return"GeneratorFunction"===u(t,L,"")}function g(t,n,e){return"function"==typeof t?new t(n,e):Object.create(t)}function y(t,n,e,r){var s=i(n);return"function"!=typeof e?p(t,s,e):p(t,s,e(u(t,s,r)))}function m(e,i){t.call(this),this.id=M++,this.command=n(e),this.timestamp=Date.now(),this.children=[],i&&this[i]()}function x(t,n){return function(e,i){var r=t;if(n)try{r=i.deserialize(t)}catch(t){throw e.reject(t),t}var s=i.domains.sanitize(r);e.resolve(s)}}function b(n){t.call(this),this.size=0,this.limit=Math.max(1,n||1),this.repos=[],this.begin()}function w(){this.pool={}}function z(t,n){this.repo=n}function S(t,n,e){var i=F[e],r=t[n],s=n[e];return d(r)?r[i]||r[e]:t[s]}function k(t){this.repo=t,this.domains=[],this.registry={},this.add([],z)}function A(t){this.repo=t,this.effects=[]}function j(t,n,e){this.id=t,this.key=n,this.edges=[],e&&(this.parent=e,e.connect(this))}function O(n,e){t.call(this),this.id=n,this.keyPaths=r(e)}function D(t){this.snapshot=t,this.nodes={}}function I(t,n,e){function i(n){var e=s.next(n);e.done?t.resolve(n):r(e.value)}function r(n){n.onDone(i),n.onCancel(t.cancel,t),n.onError(t.reject,t)}t.open();var s=n(e);return i(),t}function E(t,n,e){return l(n)?(t.open(),n.then(function(n){return global.setTimeout(function(){return t.resolve(n)},0)},function(n){return global.setTimeout(function(){return t.reject(n)},0)}),t):v(n)?I(t,n,e):"function"==typeof n?(n(t,e),t):t.resolve(n)}function P(n,e,i){t.call(this);var r=h(P.defaults,this.constructor.defaults,n);this.parent=r.parent,this.history=this.parent?this.parent.history:new b(r.maxHistory),this.history.addRepo(this),this.archive=new w,this.domains=new k(this),this.effects=new A(this),this.changes=new D(this.state),this.initial=this.parent?this.parent.initial:{},this.state=this.parent?this.parent.state:this.initial,this.setup(r),e&&this.reset(e,i)}Object.defineProperty(exports,"__esModule",{value:!0}),t.prototype={on:function(t,n,e){return this.a.push({event:t,fn:n,scope:e,once:!1}),this},once:function(t,n,e){return this.a.push({event:t,fn:n,scope:e,once:!0}),this},off:function(t,n,e){for(var i=null==n,r=0;r<this.a.length;){var s=this.a[r];s.event===t&&(i||s.fn===n&&s.scope===e)?this.a.splice(r,1):r+=1}return this},removeAllListeners:function(){this.a.length=0},c:function(t){for(var n=0,e=arguments.length,i=Array(e>1?e-1:0),r=1;r<e;r++)i[r-1]=arguments[r];for(;n<this.a.length;){var s=this.a[n];s.event===t&&(s.fn.apply(s.scope||this,i),s.once)?this.a.splice(n,1):n+=1}return this}};var _=0,H="_action",N=".",R=",",B="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},T=Object.prototype.hasOwnProperty,C="function"==typeof Symbol?Symbol:{},L=C.toStringTag||"@@toStringTag",M=0;c(m,t,{status:"inactive",payload:void 0,disabled:!1,complete:!1,parent:null,next:null,open:function(t){return this.d.apply(this,arguments),this.e("open",!1),this},update:function(t){return this.d.apply(this,arguments),this.e("update",!1),this},resolve:function(t){return this.d.apply(this,arguments),this.e("resolve",!0),this},reject:function(t){return this.d.apply(this,arguments),this.e("reject",!0),this},cancel:function(t){return this.d.apply(this,arguments),this.e("cancel",!0),this},onOpen:function(t,n){return this.f("open",t,n),this},onUpdate:function(t,n){return this.on("update",t,n)},onDone:function(t,n){return this.f("resolve",t,n),this},onError:function(t,n){return this.f("reject",t,n),this},onCancel:function(t,n){return this.f("cancel",t,n),this},is:function(t){return this.command[this.status]===this.command[t]},toggle:function(t){return this.disabled=!this.disabled,t||this.c("change",this),this},then:function(t,n){var e=this;return new Promise(function(t,n){e.onDone(t),e.onError(n)}).then(t,n)},isDisconnected:function(){return!this.parent},prune:function(){this.parent.parent=null},lead:function(t){this.next=t,t&&this.adopt(t)},adopt:function(t){this.children.indexOf(t)<0&&this.children.push(t),t.parent=this},remove:function(){this.parent.abandon(this),this.removeAllListeners()},abandon:function(t){var n=this.children.indexOf(t);n>=0&&(this.children.splice(n,1),t.parent=null),this.next===t&&this.lead(t.next)},d:function(t){arguments.length&&(this.payload=t)},e:function(t,n){this.complete||(this.status=t,this.complete=n,this.c("change",this),this.c(t,this.payload))},f:function(t,n,e){n&&(this.is(t)?n.call(e,this.payload):this.once(t,n,e))}}),Object.defineProperty(m.prototype,"type",{get:function(){return this.command[this.status]}});var J=n(function(t,n){return x(t,n)},"$reset"),Q=n(function(t,n){return x(t,n)},"$patch"),U=function(){},$=function(){},q=function(t){return t};c(b,t,{checkout:function(t){return this.head=t||this.head,this.setActiveBranch(),this.reconcile(this.head),this},toggle:function(t){var n=[].concat(t);n.forEach(function(t){return t.toggle("silently")}),this.reconcile(n[0])},toArray:function(){return this.map(function(t){return t})},map:function(t,n){for(var e=this.size,i=Array(e),r=this.head;e--;)i[e]=t.call(n,r),r=r.parent;return i},wait:function(){var t=this.toArray(),n=t.length;return new Promise(function(e,i){function r(){n-=1,n<=0&&e()}t.map(function(t){t.onDone(r),t.onCancel(r),t.onError(i)})})},then:function(t,n){return this.wait().then(t,n)},begin:function(){this.head=this.root=null,this.append($,"resolve")},addRepo:function(t){this.repos.push(t)},removeRepo:function(t){var n=this.repos.indexOf(t);~n&&this.repos.splice(n,1)},invoke:function(t,n){for(var e=this.repos,i=0;i<e.length;i++)e[i][t](n)},append:function(t,n){var e=new m(t,n);return this.size>0?this.head.lead(e):(new m(U,"resolve").adopt(e),this.root=e),this.head=e,this.size+=1,this.invoke("createInitialSnapshot",e),e.on("change",this.reconcile,this),this.c("append",e),this.head},remove:function(t){if(!t.isDisconnected()){var n=t.next,e=t.parent;if(this.clean(t),this.size<=0)return void this.begin();n?t===this.root&&(this.root=n):n=this.head=e,t.disabled||this.reconcile(n)}},clean:function(t){this.size-=1,this.invoke("removeSnapshot",t),t.remove()},reconcile:function(t){for(var n=t;n&&(this.invoke("reconcile",n),n!==this.head);)n=n.next;this.archive(),this.invoke("release",t)},archive:function(){for(var t=this.size,n=this.root;t>this.limit&&n.complete;)t-=1,this.invoke("removeSnapshot",n.parent),n=n.next;n.prune(),this.root=n,this.size=t},setActiveBranch:function(){for(var t=this.head,n=1;t!==this.root;){var e=t.parent;e.next=t,t=e,n+=1}this.size=n}}),w.prototype={create:function(t){this.set(t,this.get(t.parent))},get:function(t,n){var e=this.pool[t.id];return void 0===e?n:e},set:function(t,n){this.pool[t.id]=n},remove:function(t){delete this.pool[t.id]}},z.prototype={reset:function(t,n){var e=this.repo.domains.sanitize(n);return h(t,this.repo.getInitialState(),e)},patch:function(t,n){return h(t,this.repo.domains.sanitize(n))},addDomain:function(t){return h(this.repo.getInitialState(),t)},register:function(){var t;return t={},t[J]=this.reset,t[Q]=this.patch,t[q]=this.addDomain,t}};var F={inactive:"inactive",open:"open",update:"loading",loading:"update",done:"resolve",resolve:"done",reject:"error",error:"reject",cancel:"cancelled",cancelled:"cancel"};k.prototype={getHandlers:function(t){for(var n=t.command,e=t.status,i=[],r=0,s=this.domains.length;r<s;r++){var o=this.domains[r],a=o[0],h=o[1];if(h.register){var c=S(h.register(),n,e);c&&i.push({key:a,domain:h,handler:c})}}return i},register:function(t){var n=t.type;return void 0===this.registry[n]&&(this.registry[n]=this.getHandlers(t)),this.registry[n]},add:function(t,n,e){var r=g(n,e,this.repo);return this.domains.push([i(t),r]),this.registry={},r.setup&&r.setup(this.repo,e),r},reduce:function(t,n,e){for(var i=n,r=1,s=this.domains.length;r<s;r++){var o=this.domains[r],a=o[0],h=o[1];i=t.call(e,i,a,h)}return i},sanitize:function(t){for(var n={},e=0,i=this.domains.length;e<i;e++){var r=this.domains[e],s=r[0];s.length&&f(t,s)&&(n=p(n,s,u(t,s)))}return n},dispatch:function(t,n){for(var e=this.register(n),i=0,r=e.length;i<r;i++){var s=e[i],o=s.key,a=s.domain,h=s.handler,c=u(t,o);t=p(t,o,h.call(a,c,n.payload))}return t},deserialize:function(t){return this.reduce(function(n,e,i){return i.deserialize?p(n,e,i.deserialize(u(t,e))):n},t)},serialize:function(t,n){return this.reduce(function(n,e,i){return i.serialize?p(n,e,i.serialize(u(t,e))):n},n)},teardown:function(){for(var t=0,n=this.domains.length;t<n;t++){var e=this.domains[t],i=(e[0],e[1]);i.teardown&&i.teardown(this.repo)}}},A.prototype={add:function(t,n){var e=g(t,n,this.repo);return e.setup&&e.setup(this.repo,n),this.effects.push(e),e},teardown:function(){for(var t=0,n=this.effects.length;t<n;t++){var e=this.effects[t];e.teardown&&e.teardown(this.repo)}},dispatch:function(t){for(var n=t.command,e=t.payload,i=t.status,r=0,s=this.effects.length;r<s;r++){var o=this.effects[r];if(o.register){var a=S(o.register(),n,i);a&&a.call(o,this.repo,e)}}}},j.prototype={parent:null,connect:function(t){t!==this&&this.edges.indexOf(t)<0&&this.edges.push(t)},disconnect:function(t){var n=this.edges.indexOf(t);~n&&this.edges.splice(n,1)},isAlone:function(){return this.edges.length<=0},orphan:function(){this.parent&&this.parent.disconnect(this)}},O.getId=function(t){return"query:"+o(r(t))},c(O,t,{extract:function(t){for(var n=this.keyPaths.length,e=Array(n),i=0;i<n;i++)e[i]=u(t,this.keyPaths[i]);return e},trigger:function(t){var n=this.extract(t);this.c.apply(this,["change"].concat(n))},isEmpty:function(){return this.a.length<=0}});var G="";D.prototype={on:function(t,n,e){for(var i=r(t),s=O.getId(t),o=this.addQuery(s,i),a=0;a<i.length;a++)this.addBranch(i[a],o);return o.on("change",n,e),o},off:function(t,n,e){var i=O.getId(t),r=this.nodes[i];r&&(r.off("change",n,e),r.isEmpty()&&this.prune(r))},update:function(t){var n=this.snapshot;this.snapshot=t;var e=this.nodes[G];e&&this.scan(e,n,t)},addNode:function(t,n,e){return this.nodes[t]||(this.nodes[t]=new j(t,n,e)),this.nodes[t]},addQuery:function(t,n){return this.nodes[t]||(this.nodes[t]=new O(t,n)),this.nodes[t]},remove:function(t){delete this.nodes[t.id]},prune:function(t){for(var n=t.keyPaths.map(s),e=0,i=n.length;e<i;e++){var r=this.nodes[n[e]];r.disconnect(t);do{if(!r.isAlone())break;r.orphan(),this.remove(r),r=r.parent}while(r)}this.remove(t)},addBranch:function(t,n){for(var e=this.addNode(G,"",null),i="",r=0,s=t.length;r<s;r++)i=i?i+"."+t[r]:t[r],e=this.addNode(i,t[r],e);e.connect(n)},scan:function(t,n,e){for(var i=[{node:t,last:n,next:e}],r=[];i.length;){var s=i.pop(),o=s.node,a=s.last,h=s.next;if(a!==h)for(var c=o.edges,u=0,f=c.length;u<f;u++){var p=c[u];p instanceof O&&r.indexOf(p)<0?(p.trigger(this.snapshot),r.push(p)):i.push({node:p,last:null==a?a:a[p.key],next:null==h?h:h[p.key]})}}}},P.defaults={maxHistory:0,parent:null},c(P,t,{setup:function(){},teardown:function(){this.effects.teardown(),this.domains.teardown(),this.c("teardown",this),this.history.removeRepo(this),this.removeAllListeners()},getInitialState:function(){return this.initial},recall:function(t,n){return this.archive.get(t,n)},createInitialSnapshot:function(t){this.archive.create(t)},updateSnapshot:function(t,n){this.archive.set(t,n)},removeSnapshot:function(t){this.archive.remove(t)},reconcile:function(t){var n=this.recall(t.parent,this.initial);this.parent&&(n=h(n,this.parent.recall(t))),t.disabled||(n=this.domains.dispatch(n,t)),this.updateSnapshot(t,n),this.state=n},release:function(t){this.changes.update(this.state),this.effects.dispatch(t)},on:function(n,e,i){var r=n.split(":",2),s=r[0],o=r[1],a=void 0===o?"":o;switch(s){case"change":this.changes.on(a,e,i);break;default:t.prototype.on.apply(this,arguments)}return this},off:function(n,e,i){var r=n.split(":",2),s=r[0],o=r[1],a=void 0===o?"":o;switch(s){case"change":this.changes.off(a,e,i);break;default:t.prototype.off.apply(this,arguments)}return this},append:function(t,n){return this.history.append(t,n)},push:function(t){for(var n=this.append(t),e=arguments.length,i=Array(e>1?e-1:0),r=1;r<e;r++)i[r-1]=arguments[r];return E(n,n.command.apply(null,i),this),n},prepare:function(){for(var t=this,n=arguments.length,e=Array(n),i=0;i<n;i++)e[i]=arguments[i];return function(){for(var n=arguments.length,i=Array(n),r=0;r<n;r++)i[r]=arguments[r];return t.push.apply(t,e.concat(i))}},addDomain:function(t,n,e){var i=this.domains.add(t,n,e);return i.getInitialState&&(this.initial=p(this.initial,t,i.getInitialState())),this.push(q,i),i},addEffect:function(t,n){return this.effects.add(t,n)},reset:function(t,n){return this.push(J,t,n)},patch:function(t,n){return this.push(Q,t,n)},deserialize:function(t){var n=t;return this.parent?n=this.parent.deserialize(t):"string"==typeof n&&(n=JSON.parse(n)),this.domains.deserialize(n)},serialize:function(){var t=this.parent?this.parent.serialize():{};return this.domains.serialize(this.state,t)},toJSON:function(){return this.serialize()},checkout:function(t){return this.history.checkout(t),this},fork:function(){return new P({parent:this})}}),exports.default=P,exports.Microcosm=P,exports.Action=m,exports.History=b,exports.tag=n,exports.get=u,exports.set=p,exports.update=y,exports.merge=h,exports.inherit=c,exports.getRegistration=S; |
{ | ||
"name": "microcosm", | ||
"version": "12.6.0", | ||
"version": "12.6.1-alpha", | ||
"description": "Flux with actions at center stage. Write optimistic updates, cancel requests, and track changes with ease.", | ||
@@ -5,0 +5,0 @@ "main": "microcosm.js", |
@@ -409,8 +409,12 @@ 'use strict'; | ||
/** | ||
* Is the provided value a generator function? | ||
* Is the provided value a generator function? This is largely informed | ||
* by the regenerator runtime. | ||
* @param {*} value | ||
* @return {boolean} | ||
*/ | ||
var $Symbol = typeof Symbol === "function" ? Symbol : {}; | ||
var toStringTagSymbol = $Symbol.toStringTag || "@@toStringTag"; | ||
function isGeneratorFn(value) { | ||
return get(value, ['constructor', 'name'], '') === 'GeneratorFunction'; | ||
return get(value, toStringTagSymbol, '') === 'GeneratorFunction'; | ||
} | ||
@@ -1698,2 +1702,34 @@ | ||
/** | ||
* Provide support for generators, performing a sequence of actions in | ||
* order. | ||
*/ | ||
function processGenerator(action, body, repo) { | ||
action.open(); | ||
var iterator = body(repo); | ||
function step(payload) { | ||
var next = iterator.next(payload); | ||
if (next.done) { | ||
action.resolve(payload); | ||
} else { | ||
progress(next.value); | ||
} | ||
} | ||
function progress(subAction) { | ||
console.assert(subAction instanceof Action, 'Iteration of generator expected an Action. Instead got ' + subAction); | ||
subAction.onDone(step); | ||
subAction.onCancel(action.cancel, action); | ||
subAction.onError(action.reject, action); | ||
} | ||
step(); | ||
return action; | ||
} | ||
/** | ||
* Coroutine is used by an action to determine how it should resolve | ||
@@ -1733,27 +1769,3 @@ * the body of their associated command. | ||
if (isGeneratorFn(body)) { | ||
var step = function step(payload) { | ||
var next = iterator.next(payload); | ||
if (next.done) { | ||
action.resolve(payload); | ||
} else { | ||
progress(next.value); | ||
} | ||
}; | ||
var progress = function progress(subAction) { | ||
console.assert(subAction instanceof Action, 'Iteration of generator expected an Action. Instead got ' + subAction); | ||
subAction.onDone(step); | ||
subAction.onCancel(action.cancel, action); | ||
subAction.onError(action.reject, action); | ||
}; | ||
action.open(); | ||
var iterator = body(repo); | ||
step(); | ||
return action; | ||
return processGenerator(action, body, repo); | ||
} | ||
@@ -1760,0 +1772,0 @@ |
No v1
QualityPackage is not semver >=1. This means it is not stable and does not support ^ ranges.
Found 1 instance in 1 package
314055
4332
7