UNPKG

@nice-move/cli

Version:
1 lines 3.38 kB
const e=[];e.push(`SIGHUP`,`SIGINT`,`SIGTERM`),process.platform!==`win32`&&e.push(`SIGALRM`,`SIGABRT`,`SIGVTALRM`,`SIGXCPU`,`SIGXFSZ`,`SIGUSR2`,`SIGTRAP`,`SIGSYS`,`SIGQUIT`,`SIGIOT`),process.platform===`linux`&&e.push(`SIGIO`,`SIGPOLL`,`SIGPWR`,`SIGSTKFLT`);const t=e=>!!e&&typeof e==`object`&&typeof e.removeListener==`function`&&typeof e.emit==`function`&&typeof e.reallyExit==`function`&&typeof e.listeners==`function`&&typeof e.kill==`function`&&typeof e.pid==`number`&&typeof e.on==`function`,n=Symbol.for(`signal-exit emitter`),r=globalThis,i=Object.defineProperty.bind(Object);var a=class{emitted={afterExit:!1,exit:!1};listeners={afterExit:[],exit:[]};count=0;id=Math.random();constructor(){if(r[n])return r[n];i(r,n,{value:this,writable:!1,enumerable:!1,configurable:!1})}on(e,t){this.listeners[e].push(t)}removeListener(e,t){let n=this.listeners[e],r=n.indexOf(t);r!==-1&&(r===0&&n.length===1?n.length=0:n.splice(r,1))}emit(e,t,n){if(this.emitted[e])return!1;this.emitted[e]=!0;let r=!1;for(let i of this.listeners[e])r=i(t,n)===!0||r;return e===`exit`&&(r=this.emit(`afterExit`,t,n)||r),r}},o=class{};const s=e=>({onExit(t,n){return e.onExit(t,n)},load(){return e.load()},unload(){return e.unload()}});var c=class extends o{onExit(){return()=>{}}load(){}unload(){}},l=class extends o{#hupSig=u.platform===`win32`?`SIGINT`:`SIGHUP`;#emitter=new a;#process;#originalProcessEmit;#originalProcessReallyExit;#sigListeners={};#loaded=!1;constructor(t){super(),this.#process=t,this.#sigListeners={};for(let n of e)this.#sigListeners[n]=()=>{let e=this.#process.listeners(n),{count:r}=this.#emitter,i=t;if(typeof i.__signal_exit_emitter__==`object`&&typeof i.__signal_exit_emitter__.count==`number`&&(r+=i.__signal_exit_emitter__.count),e.length===r){this.unload();let e=this.#emitter.emit(`exit`,null,n),r=n===`SIGHUP`?this.#hupSig:n;e||t.kill(t.pid,r)}};this.#originalProcessReallyExit=t.reallyExit,this.#originalProcessEmit=t.emit}onExit(e,n){if(!t(this.#process))return()=>{};this.#loaded===!1&&this.load();let r=n?.alwaysLast?`afterExit`:`exit`;return this.#emitter.on(r,e),()=>{this.#emitter.removeListener(r,e),this.#emitter.listeners.exit.length===0&&this.#emitter.listeners.afterExit.length===0&&this.unload()}}load(){if(!this.#loaded){this.#loaded=!0,this.#emitter.count+=1;for(let t of e)try{let e=this.#sigListeners[t];e&&this.#process.on(t,e)}catch(e){}this.#process.emit=(e,...t)=>this.#processEmit(e,...t),this.#process.reallyExit=e=>this.#processReallyExit(e)}}unload(){this.#loaded&&(this.#loaded=!1,e.forEach(e=>{let t=this.#sigListeners[e];if(!t)throw Error(`Listener not defined for signal: `+e);try{this.#process.removeListener(e,t)}catch(e){}}),this.#process.emit=this.#originalProcessEmit,this.#process.reallyExit=this.#originalProcessReallyExit,--this.#emitter.count)}#processReallyExit(e){return t(this.#process)?(this.#process.exitCode=e||0,this.#emitter.emit(`exit`,this.#process.exitCode,null),this.#originalProcessReallyExit.call(this.#process,this.#process.exitCode)):0}#processEmit(e,...n){let r=this.#originalProcessEmit;if(e===`exit`&&t(this.#process)){typeof n[0]==`number`&&(this.#process.exitCode=n[0]);let t=r.call(this.#process,e,...n);return this.#emitter.emit(`exit`,this.#process.exitCode,null),t}else return r.call(this.#process,e,...n)}};const u=globalThis.process,{onExit:d,load:f,unload:p}=s(t(u)?new l(u):new c);export{d as onExit};