File: /volume1/@appstore/Spreadsheet/server/common/thread-worker/task.js
"use strict";Object.defineProperty(exports,"__esModule",{value:true});Object.defineProperty(exports,"ThreadWorkerTask",{enumerable:true,get:function(){return e}});class e{constructor(e,t=Object.create(null)){this.worker=e;this.timeout=t.timeout??36e5;this.timer=null;this.startTime=0;this.request=undefined;this._resolve=undefined;this._reject=undefined}execute(e){this.startTime=Date.now();this.request=e;return new Promise(((t,r)=>{this._resolve=t;this._reject=r;const i=this.worker;i.once("message",(e=>{if(e.error||!e.data){this.reject(`Worker command \`${e.cmd}\` failed with error ${e.error}.`)}else{this.resolve(e)}}));i.postMessage(e);this.timer=setTimeout((()=>{this.reject(`Worker timeout after ${this.timeout}ms.`,true)}),this.timeout)}))}terminate(){this.reject("Worker terminated.",true)}reset(){this._resolve=undefined;this._reject=undefined;if(this.timer!=null){clearTimeout(this.timer);this.timer=null}}resolve(e){if(!this._resolve){return}this._resolve(e);this.reset()}reject(e,t=false){if(!this._reject){return}this._reject(e);this.reset();if(t){this.worker.terminate()}}async stat(){const{request:e,startTime:t}=this;return e?{command:e.cmd,executionTime:Date.now()-t}:{command:"",executionTime:0}}}