UNPKG

19.2 kBJavaScriptView Raw
1!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define("operationkit",[],t):"object"==typeof exports?exports.operationkit=t():e.operationkit=t()}(window,function(){return function(e){var t={};function i(n){if(t[n])return t[n].exports;var r=t[n]={i:n,l:!1,exports:{}};return e[n].call(r.exports,r,r.exports,i),r.l=!0,r.exports}return i.m=e,i.c=t,i.d=function(e,t,n){i.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},i.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},i.t=function(e,t){if(1&t&&(e=i(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(i.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var r in e)i.d(n,r,function(t){return e[t]}.bind(null,r));return n},i.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return i.d(t,"a",t),t},i.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},i.p="",i(i.s=9)}([function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const n=i(1),r=i(3),s=i(10),o=i(2),u=i(6);t.Operation=class extends r.EventEmitter{constructor(e=null){super(),this._queuePriority=n.QueuePriority.normal,e||(e=s.v4()),this.id=e,this.name=null,this.completionCallback=null,this.map={},this.isExecuting=!1,this.error=!0,this.promise=null,this.runPromise=null,this._dependencies=[],this._done=!1,this._isInQueue=!1,this._canStart=!1,this._cancelled=!1,this._resolve=null,this._reject=null}get isFinished(){return this._done}get isCancelled(){return this._cancelled}set isInQueue(e){this._isInQueue=e}get isInQueue(){return this._isInQueue}set queuePriority(e){this.isExecuting||this.isCancelled||this.isFinished||e in n.QueuePriority&&(this._queuePriority=e)}get queuePriority(){return this._queuePriority}set dependencies(e){this.isExecuting||this.isCancelled||this.isFinished||(this._dependencies=e)}get dependencies(){return this.isExecuting||this.isCancelled||this.isFinished?u.copyArray(this._dependencies):this._dependencies}cancel(){this._cancelled=!0,Promise.resolve(this.promise),this.emit(o.OperationEvent.CANCEL,this),this._resolve&&this._resolve()}done(){this._done=!0,this.completionCallback&&this.completionCallback(this),this.emit(o.OperationEvent.DONE,this),this._resolve&&this._resolve(this.result)}isDone(){return this._done}addDependency(e){this._dependencies.push(e)}removeDependency(e){this._dependencies=this._dependencies.filter(t=>t.id!==e.id)}start(){return this.isExecuting||this.isCancelled||this.isFinished?this.promise:(this.promise&&!this._canStart?this._preProcessStart():this.promise&&this._canStart?this._isInQueue?this.emit(o.OperationEvent.READY,this):this.main():this.promise=new Promise((e,t)=>{this._resolve=e,this._reject=t,this._preProcessStart()}),this.promise)}main(){this.isExecuting=!0,this.emit(o.OperationEvent.START,this),this.runPromise=this.run().then(e=>{this.result=e,this.done()}).catch(e=>{this.isExecuting=!1,this.error=!0,this.emit(o.OperationEvent.ERROR,{err:e,operation:this}),this.emit(o.OperationEvent.DONE,this),this._reject&&this._reject()})}_preProcessStart(){this._createMap(),this._canStart&&(this._isInQueue?this.emit(o.OperationEvent.READY,this):this.main())}_createMap(){this._dependencies.length?this._dependencies.forEach(e=>{this.map[e.id]=!0,e.on(o.OperationEvent.DONE,this._onDependantOperationDone.bind(this)),e.start()}):this._canStart=!0}_onDependantOperationDone(e){delete this.map[e.id],this._tryStart()}_tryStart(){this.isExecuting||this.isCancelled||this.isFinished||u.isObjectEmpty(this.map)&&(this._canStart=!0,this.isInQueue?this.emit(o.OperationEvent.READY,this):this.start())}}},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),function(e){e[e.veryLow=0]="veryLow",e[e.low=1]="low",e[e.normal=2]="normal",e[e.high=3]="high",e[e.veryHigh=4]="veryHigh"}(t.QueuePriority||(t.QueuePriority={}))},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),function(e){e.START="start",e.READY="ready",e.DONE="done",e.CANCEL="cancel",e.ERROR="error"}(t.OperationEvent||(t.OperationEvent={}))},function(e,t,i){"use strict";var n,r="object"==typeof Reflect?Reflect:null,s=r&&"function"==typeof r.apply?r.apply:function(e,t,i){return Function.prototype.apply.call(e,t,i)};n=r&&"function"==typeof r.ownKeys?r.ownKeys:Object.getOwnPropertySymbols?function(e){return Object.getOwnPropertyNames(e).concat(Object.getOwnPropertySymbols(e))}:function(e){return Object.getOwnPropertyNames(e)};var o=Number.isNaN||function(e){return e!=e};function u(){u.init.call(this)}e.exports=u,u.EventEmitter=u,u.prototype._events=void 0,u.prototype._eventsCount=0,u.prototype._maxListeners=void 0;var a=10;function h(e){return void 0===e._maxListeners?u.defaultMaxListeners:e._maxListeners}function c(e,t,i,n){var r,s,o,u;if("function"!=typeof i)throw new TypeError('The "listener" argument must be of type Function. Received type '+typeof i);if(void 0===(s=e._events)?(s=e._events=Object.create(null),e._eventsCount=0):(void 0!==s.newListener&&(e.emit("newListener",t,i.listener?i.listener:i),s=e._events),o=s[t]),void 0===o)o=s[t]=i,++e._eventsCount;else if("function"==typeof o?o=s[t]=n?[i,o]:[o,i]:n?o.unshift(i):o.push(i),(r=h(e))>0&&o.length>r&&!o.warned){o.warned=!0;var a=new Error("Possible EventEmitter memory leak detected. "+o.length+" "+String(t)+" listeners added. Use emitter.setMaxListeners() to increase limit");a.name="MaxListenersExceededWarning",a.emitter=e,a.type=t,a.count=o.length,u=a,console&&console.warn&&console.warn(u)}return e}function p(e,t,i){var n={fired:!1,wrapFn:void 0,target:e,type:t,listener:i},r=function(){for(var e=[],t=0;t<arguments.length;t++)e.push(arguments[t]);this.fired||(this.target.removeListener(this.type,this.wrapFn),this.fired=!0,s(this.listener,this.target,e))}.bind(n);return r.listener=i,n.wrapFn=r,r}function l(e,t,i){var n=e._events;if(void 0===n)return[];var r=n[t];return void 0===r?[]:"function"==typeof r?i?[r.listener||r]:[r]:i?function(e){for(var t=new Array(e.length),i=0;i<t.length;++i)t[i]=e[i].listener||e[i];return t}(r):f(r,r.length)}function d(e){var t=this._events;if(void 0!==t){var i=t[e];if("function"==typeof i)return 1;if(void 0!==i)return i.length}return 0}function f(e,t){for(var i=new Array(t),n=0;n<t;++n)i[n]=e[n];return i}Object.defineProperty(u,"defaultMaxListeners",{enumerable:!0,get:function(){return a},set:function(e){if("number"!=typeof e||e<0||o(e))throw new RangeError('The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received '+e+".");a=e}}),u.init=function(){void 0!==this._events&&this._events!==Object.getPrototypeOf(this)._events||(this._events=Object.create(null),this._eventsCount=0),this._maxListeners=this._maxListeners||void 0},u.prototype.setMaxListeners=function(e){if("number"!=typeof e||e<0||o(e))throw new RangeError('The value of "n" is out of range. It must be a non-negative number. Received '+e+".");return this._maxListeners=e,this},u.prototype.getMaxListeners=function(){return h(this)},u.prototype.emit=function(e){for(var t=[],i=1;i<arguments.length;i++)t.push(arguments[i]);var n="error"===e,r=this._events;if(void 0!==r)n=n&&void 0===r.error;else if(!n)return!1;if(n){var o;if(t.length>0&&(o=t[0]),o instanceof Error)throw o;var u=new Error("Unhandled error."+(o?" ("+o.message+")":""));throw u.context=o,u}var a=r[e];if(void 0===a)return!1;if("function"==typeof a)s(a,this,t);else{var h=a.length,c=f(a,h);for(i=0;i<h;++i)s(c[i],this,t)}return!0},u.prototype.addListener=function(e,t){return c(this,e,t,!1)},u.prototype.on=u.prototype.addListener,u.prototype.prependListener=function(e,t){return c(this,e,t,!0)},u.prototype.once=function(e,t){if("function"!=typeof t)throw new TypeError('The "listener" argument must be of type Function. Received type '+typeof t);return this.on(e,p(this,e,t)),this},u.prototype.prependOnceListener=function(e,t){if("function"!=typeof t)throw new TypeError('The "listener" argument must be of type Function. Received type '+typeof t);return this.prependListener(e,p(this,e,t)),this},u.prototype.removeListener=function(e,t){var i,n,r,s,o;if("function"!=typeof t)throw new TypeError('The "listener" argument must be of type Function. Received type '+typeof t);if(void 0===(n=this._events))return this;if(void 0===(i=n[e]))return this;if(i===t||i.listener===t)0==--this._eventsCount?this._events=Object.create(null):(delete n[e],n.removeListener&&this.emit("removeListener",e,i.listener||t));else if("function"!=typeof i){for(r=-1,s=i.length-1;s>=0;s--)if(i[s]===t||i[s].listener===t){o=i[s].listener,r=s;break}if(r<0)return this;0===r?i.shift():function(e,t){for(;t+1<e.length;t++)e[t]=e[t+1];e.pop()}(i,r),1===i.length&&(n[e]=i[0]),void 0!==n.removeListener&&this.emit("removeListener",e,o||t)}return this},u.prototype.off=u.prototype.removeListener,u.prototype.removeAllListeners=function(e){var t,i,n;if(void 0===(i=this._events))return this;if(void 0===i.removeListener)return 0===arguments.length?(this._events=Object.create(null),this._eventsCount=0):void 0!==i[e]&&(0==--this._eventsCount?this._events=Object.create(null):delete i[e]),this;if(0===arguments.length){var r,s=Object.keys(i);for(n=0;n<s.length;++n)"removeListener"!==(r=s[n])&&this.removeAllListeners(r);return this.removeAllListeners("removeListener"),this._events=Object.create(null),this._eventsCount=0,this}if("function"==typeof(t=i[e]))this.removeListener(e,t);else if(void 0!==t)for(n=t.length-1;n>=0;n--)this.removeListener(e,t[n]);return this},u.prototype.listeners=function(e){return l(this,e,!0)},u.prototype.rawListeners=function(e){return l(this,e,!1)},u.listenerCount=function(e,t){return"function"==typeof e.listenerCount?e.listenerCount(t):d.call(e,t)},u.prototype.listenerCount=d,u.prototype.eventNames=function(){return this._eventsCount>0?n(this._events):[]}},function(e,t){var i="undefined"!=typeof crypto&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto)||"undefined"!=typeof msCrypto&&"function"==typeof window.msCrypto.getRandomValues&&msCrypto.getRandomValues.bind(msCrypto);if(i){var n=new Uint8Array(16);e.exports=function(){return i(n),n}}else{var r=new Array(16);e.exports=function(){for(var e,t=0;t<16;t++)0==(3&t)&&(e=4294967296*Math.random()),r[t]=e>>>((3&t)<<3)&255;return r}}},function(e,t){for(var i=[],n=0;n<256;++n)i[n]=(n+256).toString(16).substr(1);e.exports=function(e,t){var n=t||0,r=i;return[r[e[n++]],r[e[n++]],r[e[n++]],r[e[n++]],"-",r[e[n++]],r[e[n++]],"-",r[e[n++]],r[e[n++]],"-",r[e[n++]],r[e[n++]],"-",r[e[n++]],r[e[n++]],r[e[n++]],r[e[n++]],r[e[n++]],r[e[n++]]].join("")}},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.copyArray=e=>e.map(e=>Object.assign(Object.create(e),e)),t.copyObject=e=>Object.assign(Object.create(e),e),t.isObjectEmpty=e=>{for(const t in e)return!1;return!0}},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const n=i(3),r=i(13),s=i(2),o=i(1),u=i(8),a=i(6);t.OperationQueue=class extends n.EventEmitter{constructor(){super(),this.map={},this.operations=[],this._processedOperations=[],this.resolve=null,this.completionCallback=null,this.maximumConcurrentOperations=10,this.readyQueueMap={},this.readyQueue=[],this.runningQueueMap={},this.runningQueue=[],this.queues={},this.queues[o.QueuePriority.high]=[],this.queues[o.QueuePriority.normal]=[],this.queues[o.QueuePriority.low]=[],this.queues[o.QueuePriority.veryLow]=[],this.queues[o.QueuePriority.veryHigh]=[]}get isExecuting(){return!a.isObjectEmpty(this.map)}done(){this.completionCallback&&this.completionCallback(),this.resolve()}addOperation(e){return this.addOperations([e])}addOperations(e){return this.operations=this.operations.concat(e),this._preProcessOperations(e),this._processedOperations=this._processedOperations.concat(this.operations),this._begin(),this.promise}pause(){this._paused||(this._paused=!0,this.emit(u.QueueEvent.PAUSED,this))}resume(){this._paused&&(this._paused=!1,this.emit(u.QueueEvent.RESUMED,this),this._checkNextOperation())}get isPaused(){return this._paused}_preProcessOperations(e){try{new r.CircularOperationValidator(e)}catch(e){throw e}e.forEach(e=>{this.map[e.id]||(this.map[e.id]=!0,e.isInQueue=!0,this._bindOperation(e)),this._preProcessOperations(e.dependencies)})}_bindOperation(e){e.on(s.OperationEvent.START,this._onOperationStart.bind(this)),e.on(s.OperationEvent.READY,this._onOperationReady.bind(this)),e.on(s.OperationEvent.CANCEL,this._onOperationCancel.bind(this)),e.on(s.OperationEvent.DONE,this._onOperationDone.bind(this))}_unbindOperation(e){e.off(s.OperationEvent.START,this._onOperationStart.bind(this)),e.off(s.OperationEvent.READY,this._onOperationReady.bind(this)),e.off(s.OperationEvent.CANCEL,this._onOperationCancel.bind(this)),e.off(s.OperationEvent.DONE,this._onOperationDone.bind(this))}_begin(){this.promise?this._startOperations():this.promise=new Promise((e,t)=>{this.resolve=e,this.reject=t,this._startOperations()})}_startOperations(){this._processedOperations.forEach(e=>{this._startOperation(e)})}_startOperation(e){e.start()}_onOperationStart(e){}_onOperationReady(e){this.readyQueueMap[e.id]=!0,this.queues[e.queuePriority].push(e),this._checkNextOperation()}_onOperationDone(e){this._unbindOperation(e),this.runningQueue=this.runningQueue.filter(t=>t.id!==e.id),delete this.map[e.id],delete this.runningQueueMap[e.id],a.isObjectEmpty(this.map)?(this.emit(u.QueueEvent.DONE,this),this.done()):this._checkNextOperation()}_checkNextOperation(){if(!this._paused&&this.runningQueue.length<this.maximumConcurrentOperations&&this.hasOperations()){const e=this.getNextOperation();(!e||e.isExecuting)&&e.isCancelled&&this.runningQueueMap[e.id]||(this.runningQueueMap[e.id]=!0,this.runningQueue.push(e),e.main(),this._checkNextOperation())}}hasOperations(){return!!(this.queues[o.QueuePriority.veryHigh].length+this.queues[o.QueuePriority.high].length+this.queues[o.QueuePriority.normal].length+this.queues[o.QueuePriority.low].length+this.queues[o.QueuePriority.veryLow].length)}getNextOperation(){let e=null;return this.queues[o.QueuePriority.veryHigh].length?e=this.queues[o.QueuePriority.veryHigh].pop():this.queues[o.QueuePriority.high].length?e=this.queues[o.QueuePriority.high].pop():this.queues[o.QueuePriority.normal].length?e=this.queues[o.QueuePriority.normal].pop():this.queues[o.QueuePriority.low].length?e=this.queues[o.QueuePriority.low].pop():this.queues[o.QueuePriority.veryLow].length?e=this.queues[o.QueuePriority.veryLow].pop():e}_onOperationCancel(e){delete this.map[e.id],delete this.queues[e.queuePriority],this.operations=this.operations.filter(t=>t.id!==e.id),a.isObjectEmpty(this.map)&&(this.emit(u.QueueEvent.DONE,this),this.done())}}},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),function(e){e.DONE="done",e.PAUSED="paused",e.RESUMED="resumed"}(t.QueueEvent||(t.QueueEvent={}))},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const n=i(0),r=i(7),s=i(14),o=i(15),u=i(2),a=i(8),h=i(1);e.exports={Operation:n.Operation,OperationQueue:r.OperationQueue,BlockOperation:s.BlockOperation,GroupOperation:o.GroupOperation,OperationEvent:u.OperationEvent,QueueEvent:a.QueueEvent,QueuePriority:h.QueuePriority}},function(e,t,i){var n=i(11),r=i(12),s=r;s.v1=n,s.v4=r,e.exports=s},function(e,t,i){var n,r,s=i(4),o=i(5),u=0,a=0;e.exports=function(e,t,i){var h=t&&i||0,c=t||[],p=(e=e||{}).node||n,l=void 0!==e.clockseq?e.clockseq:r;if(null==p||null==l){var d=s();null==p&&(p=n=[1|d[0],d[1],d[2],d[3],d[4],d[5]]),null==l&&(l=r=16383&(d[6]<<8|d[7]))}var f=void 0!==e.msecs?e.msecs:(new Date).getTime(),v=void 0!==e.nsecs?e.nsecs:a+1,y=f-u+(v-a)/1e4;if(y<0&&void 0===e.clockseq&&(l=l+1&16383),(y<0||f>u)&&void 0===e.nsecs&&(v=0),v>=1e4)throw new Error("uuid.v1(): Can't create more than 10M uuids/sec");u=f,a=v,r=l;var _=(1e4*(268435455&(f+=122192928e5))+v)%4294967296;c[h++]=_>>>24&255,c[h++]=_>>>16&255,c[h++]=_>>>8&255,c[h++]=255&_;var m=f/4294967296*1e4&268435455;c[h++]=m>>>8&255,c[h++]=255&m,c[h++]=m>>>24&15|16,c[h++]=m>>>16&255,c[h++]=l>>>8|128,c[h++]=255&l;for(var O=0;O<6;++O)c[h+O]=p[O];return t||o(c)}},function(e,t,i){var n=i(4),r=i(5);e.exports=function(e,t,i){var s=t&&i||0;"string"==typeof e&&(t="binary"===e?new Array(16):null,e=null);var o=(e=e||{}).random||(e.rng||n)();if(o[6]=15&o[6]|64,o[8]=63&o[8]|128,t)for(var u=0;u<16;++u)t[s+u]=o[u];return t||r(o)}},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0});class n extends Error{constructor(e){super(),this.message=e}}t.CircularOperationValidator=class{constructor(e){this.operations=e,this._checkCircular()}_checkCircular(){this.operations.forEach(e=>{e.dependencies.forEach(t=>{let i={};i[e.id]=Object.keys(i).length,this._verifyOpMap(t,i),this._checkDependencies(t,i)})})}_checkDependencies(e,t){e.dependencies.forEach(e=>{let i=JSON.parse(JSON.stringify(t));this._verifyOpMap(e,i),this._checkDependencies(e,i)})}_verifyOpMap(e,t){void 0!==t[e.id]&&this._throwError(e,t),t[e.id]=Object.keys(t).length}_throwError(e,t){let i={};for(let e in t)i[t[e]]=e;const r=Object.values(i);throw r.push(e.id),new n(`Circular: ${r}`)}}},function(e,t,i){"use strict";var n=this&&this.__awaiter||function(e,t,i,n){return new(i||(i=Promise))(function(r,s){function o(e){try{a(n.next(e))}catch(e){s(e)}}function u(e){try{a(n.throw(e))}catch(e){s(e)}}function a(e){var t;e.done?r(e.value):(t=e.value,t instanceof i?t:new i(function(e){e(t)})).then(o,u)}a((n=n.apply(e,t||[])).next())})};Object.defineProperty(t,"__esModule",{value:!0});const r=i(0);t.BlockOperation=class extends r.Operation{constructor(){let e,t;const i=arguments[0];if("number"==typeof i){e=i;const n=arguments[1];"function"==typeof n&&(t=n)}else{if("function"!=typeof i)throw new Error("Wrong arguments passed: missing ID and/or function");t=i}super(e),this.blocks=[t]}run(){return n(this,void 0,void 0,function*(){const e=[];this.blocks.forEach(t=>{e.push(t(this))});const t=yield Promise.all(e);return 1===t.length?t[0]:t})}addBlock(e){this.blocks.push(e)}}},function(e,t,i){"use strict";var n=this&&this.__awaiter||function(e,t,i,n){return new(i||(i=Promise))(function(r,s){function o(e){try{a(n.next(e))}catch(e){s(e)}}function u(e){try{a(n.throw(e))}catch(e){s(e)}}function a(e){var t;e.done?r(e.value):(t=e.value,t instanceof i?t:new i(function(e){e(t)})).then(o,u)}a((n=n.apply(e,t||[])).next())})};Object.defineProperty(t,"__esModule",{value:!0});const r=i(0),s=i(7);t.GroupOperation=class extends r.Operation{constructor(){super(),this.queue=new s.OperationQueue,this.operations=[]}run(){return n(this,void 0,void 0,function*(){return yield this.queue.addOperations(this.operations),this.operations.reduce((e,t)=>(e.push(t.result),e),[])})}start(){const e=Object.create(null,{start:{get:()=>super.start}});return n(this,void 0,void 0,function*(){return this.dependencies=[],e.start.call(this)})}addOperation(e){this.operations.push(e),this.dependencies=[]}addOperations(e){this.operations=this.operations.concat(e),this.dependencies=[]}}}])});
2//# sourceMappingURL=operationkit.min.js.map
\No newline at end of file