@merkur/cli 0.36.4 → 0.37.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/lib/server.mjs CHANGED
@@ -1,7 +1,7 @@
1
- var Vt=Object.create;var We=Object.defineProperty;var Ht=Object.getOwnPropertyDescriptor;var zt=Object.getOwnPropertyNames;var Yt=Object.getPrototypeOf,Kt=Object.prototype.hasOwnProperty;var p=(t=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(t,{get:(e,r)=>(typeof require<"u"?require:e)[r]}):t)(function(t){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+t+'" is not supported')});var x=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports);var Xt=(t,e,r,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of zt(e))!Kt.call(t,s)&&s!==r&&We(t,s,{get:()=>e[s],enumerable:!(i=Ht(e,s))||i.enumerable});return t};var G=(t,e,r)=>(r=t!=null?Vt(Yt(t)):{},Xt(e||!t||!t.__esModule?We(r,"default",{value:t,enumerable:!0}):r,t));var $e=x((cs,Ge)=>{"use strict";var{Duplex:Zt}=p("stream");function Ae(t){t.emit("close")}function Jt(){!this.destroyed&&this._writableState.finished&&this.destroy()}function Fe(t){this.removeListener("error",Fe),this.destroy(),this.listenerCount("error")===0&&this.emit("error",t)}function Qt(t,e){let r=!0,i=new Zt({...e,autoDestroy:!1,emitClose:!1,objectMode:!1,writableObjectMode:!1});return t.on("message",function(n,o){let f=!o&&i._readableState.objectMode?n.toString():n;i.push(f)||t.pause()}),t.once("error",function(n){i.destroyed||(r=!1,i.destroy(n))}),t.once("close",function(){i.destroyed||i.push(null)}),i._destroy=function(s,n){if(t.readyState===t.CLOSED){n(s),process.nextTick(Ae,i);return}let o=!1;t.once("error",function(l){o=!0,n(l)}),t.once("close",function(){o||n(s),process.nextTick(Ae,i)}),r&&t.terminate()},i._final=function(s){if(t.readyState===t.CONNECTING){t.once("open",function(){i._final(s)});return}t._socket!==null&&(t._socket._writableState.finished?(s(),i._readableState.endEmitted&&i.destroy()):(t._socket.once("finish",function(){s()}),t.close()))},i._read=function(){t.isPaused&&t.resume()},i._write=function(s,n,o){if(t.readyState===t.CONNECTING){t.once("open",function(){i._write(s,n,o)});return}t.send(s,o)},i.on("end",Jt),i.on("error",Fe),i}Ge.exports=Qt});var N=x((hs,qe)=>{"use strict";qe.exports={BINARY_TYPES:["nodebuffer","arraybuffer","fragments"],EMPTY_BUFFER:Buffer.alloc(0),GUID:"258EAFA5-E914-47DA-95CA-C5AB0DC85B11",kForOnEventAttribute:Symbol("kIsForOnEventAttribute"),kListener:Symbol("kListener"),kStatusCode:Symbol("status-code"),kWebSocket:Symbol("websocket"),NOOP:()=>{}}});var $=x((us,Q)=>{"use strict";var{EMPTY_BUFFER:er}=N(),de=Buffer[Symbol.species];function tr(t,e){if(t.length===0)return er;if(t.length===1)return t[0];let r=Buffer.allocUnsafe(e),i=0;for(let s=0;s<t.length;s++){let n=t[s];r.set(n,i),i+=n.length}return i<e?new de(r.buffer,r.byteOffset,i):r}function je(t,e,r,i,s){for(let n=0;n<s;n++)r[i+n]=t[n]^e[n&3]}function Ve(t,e){for(let r=0;r<t.length;r++)t[r]^=e[r&3]}function rr(t){return t.length===t.buffer.byteLength?t.buffer:t.buffer.slice(t.byteOffset,t.byteOffset+t.length)}function _e(t){if(_e.readOnly=!0,Buffer.isBuffer(t))return t;let e;return t instanceof ArrayBuffer?e=new de(t):ArrayBuffer.isView(t)?e=new de(t.buffer,t.byteOffset,t.byteLength):(e=Buffer.from(t),_e.readOnly=!1),e}Q.exports={concat:tr,mask:je,toArrayBuffer:rr,toBuffer:_e,unmask:Ve};if(!process.env.WS_NO_BUFFER_UTIL)try{let t=p("bufferutil");Q.exports.mask=function(e,r,i,s,n){n<48?je(e,r,i,s,n):t.mask(e,r,i,s,n)},Q.exports.unmask=function(e,r){e.length<32?Ve(e,r):t.unmask(e,r)}}catch{}});var Ye=x((ds,ze)=>{"use strict";var He=Symbol("kDone"),pe=Symbol("kRun"),me=class{constructor(e){this[He]=()=>{this.pending--,this[pe]()},this.concurrency=e||1/0,this.jobs=[],this.pending=0}add(e){this.jobs.push(e),this[pe]()}[pe](){if(this.pending!==this.concurrency&&this.jobs.length){let e=this.jobs.shift();this.pending++,e(this[He])}}};ze.exports=me});var V=x((_s,Je)=>{"use strict";var q=p("zlib"),Ke=$(),sr=Ye(),{kStatusCode:Xe}=N(),ir=Buffer[Symbol.species],nr=Buffer.from([0,0,255,255]),re=Symbol("permessage-deflate"),k=Symbol("total-length"),j=Symbol("callback"),L=Symbol("buffers"),te=Symbol("error"),ee,ge=class{constructor(e,r,i){if(this._maxPayload=i|0,this._options=e||{},this._threshold=this._options.threshold!==void 0?this._options.threshold:1024,this._isServer=!!r,this._deflate=null,this._inflate=null,this.params=null,!ee){let s=this._options.concurrencyLimit!==void 0?this._options.concurrencyLimit:10;ee=new sr(s)}}static get extensionName(){return"permessage-deflate"}offer(){let e={};return this._options.serverNoContextTakeover&&(e.server_no_context_takeover=!0),this._options.clientNoContextTakeover&&(e.client_no_context_takeover=!0),this._options.serverMaxWindowBits&&(e.server_max_window_bits=this._options.serverMaxWindowBits),this._options.clientMaxWindowBits?e.client_max_window_bits=this._options.clientMaxWindowBits:this._options.clientMaxWindowBits==null&&(e.client_max_window_bits=!0),e}accept(e){return e=this.normalizeParams(e),this.params=this._isServer?this.acceptAsServer(e):this.acceptAsClient(e),this.params}cleanup(){if(this._inflate&&(this._inflate.close(),this._inflate=null),this._deflate){let e=this._deflate[j];this._deflate.close(),this._deflate=null,e&&e(new Error("The deflate stream was closed while data was being processed"))}}acceptAsServer(e){let r=this._options,i=e.find(s=>!(r.serverNoContextTakeover===!1&&s.server_no_context_takeover||s.server_max_window_bits&&(r.serverMaxWindowBits===!1||typeof r.serverMaxWindowBits=="number"&&r.serverMaxWindowBits>s.server_max_window_bits)||typeof r.clientMaxWindowBits=="number"&&!s.client_max_window_bits));if(!i)throw new Error("None of the extension offers can be accepted");return r.serverNoContextTakeover&&(i.server_no_context_takeover=!0),r.clientNoContextTakeover&&(i.client_no_context_takeover=!0),typeof r.serverMaxWindowBits=="number"&&(i.server_max_window_bits=r.serverMaxWindowBits),typeof r.clientMaxWindowBits=="number"?i.client_max_window_bits=r.clientMaxWindowBits:(i.client_max_window_bits===!0||r.clientMaxWindowBits===!1)&&delete i.client_max_window_bits,i}acceptAsClient(e){let r=e[0];if(this._options.clientNoContextTakeover===!1&&r.client_no_context_takeover)throw new Error('Unexpected parameter "client_no_context_takeover"');if(!r.client_max_window_bits)typeof this._options.clientMaxWindowBits=="number"&&(r.client_max_window_bits=this._options.clientMaxWindowBits);else if(this._options.clientMaxWindowBits===!1||typeof this._options.clientMaxWindowBits=="number"&&r.client_max_window_bits>this._options.clientMaxWindowBits)throw new Error('Unexpected or invalid parameter "client_max_window_bits"');return r}normalizeParams(e){return e.forEach(r=>{Object.keys(r).forEach(i=>{let s=r[i];if(s.length>1)throw new Error(`Parameter "${i}" must have only a single value`);if(s=s[0],i==="client_max_window_bits"){if(s!==!0){let n=+s;if(!Number.isInteger(n)||n<8||n>15)throw new TypeError(`Invalid value for parameter "${i}": ${s}`);s=n}else if(!this._isServer)throw new TypeError(`Invalid value for parameter "${i}": ${s}`)}else if(i==="server_max_window_bits"){let n=+s;if(!Number.isInteger(n)||n<8||n>15)throw new TypeError(`Invalid value for parameter "${i}": ${s}`);s=n}else if(i==="client_no_context_takeover"||i==="server_no_context_takeover"){if(s!==!0)throw new TypeError(`Invalid value for parameter "${i}": ${s}`)}else throw new Error(`Unknown parameter "${i}"`);r[i]=s})}),e}decompress(e,r,i){ee.add(s=>{this._decompress(e,r,(n,o)=>{s(),i(n,o)})})}compress(e,r,i){ee.add(s=>{this._compress(e,r,(n,o)=>{s(),i(n,o)})})}_decompress(e,r,i){let s=this._isServer?"client":"server";if(!this._inflate){let n=`${s}_max_window_bits`,o=typeof this.params[n]!="number"?q.Z_DEFAULT_WINDOWBITS:this.params[n];this._inflate=q.createInflateRaw({...this._options.zlibInflateOptions,windowBits:o}),this._inflate[re]=this,this._inflate[k]=0,this._inflate[L]=[],this._inflate.on("error",ar),this._inflate.on("data",Ze)}this._inflate[j]=i,this._inflate.write(e),r&&this._inflate.write(nr),this._inflate.flush(()=>{let n=this._inflate[te];if(n){this._inflate.close(),this._inflate=null,i(n);return}let o=Ke.concat(this._inflate[L],this._inflate[k]);this._inflate._readableState.endEmitted?(this._inflate.close(),this._inflate=null):(this._inflate[k]=0,this._inflate[L]=[],r&&this.params[`${s}_no_context_takeover`]&&this._inflate.reset()),i(null,o)})}_compress(e,r,i){let s=this._isServer?"server":"client";if(!this._deflate){let n=`${s}_max_window_bits`,o=typeof this.params[n]!="number"?q.Z_DEFAULT_WINDOWBITS:this.params[n];this._deflate=q.createDeflateRaw({...this._options.zlibDeflateOptions,windowBits:o}),this._deflate[k]=0,this._deflate[L]=[],this._deflate.on("data",or)}this._deflate[j]=i,this._deflate.write(e),this._deflate.flush(q.Z_SYNC_FLUSH,()=>{if(!this._deflate)return;let n=Ke.concat(this._deflate[L],this._deflate[k]);r&&(n=new ir(n.buffer,n.byteOffset,n.length-4)),this._deflate[j]=null,this._deflate[k]=0,this._deflate[L]=[],r&&this.params[`${s}_no_context_takeover`]&&this._deflate.reset(),i(null,n)})}};Je.exports=ge;function or(t){this[L].push(t),this[k]+=t.length}function Ze(t){if(this[k]+=t.length,this[re]._maxPayload<1||this[k]<=this[re]._maxPayload){this[L].push(t);return}this[te]=new RangeError("Max payload size exceeded"),this[te].code="WS_ERR_UNSUPPORTED_MESSAGE_LENGTH",this[te][Xe]=1009,this.removeListener("data",Ze),this.reset()}function ar(t){this[re]._inflate=null,t[Xe]=1007,this[j](t)}});var H=x((ps,se)=>{"use strict";var{isUtf8:Qe}=p("buffer"),fr=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,1,0,0,1,1,0,1,1,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,1,0];function lr(t){return t>=1e3&&t<=1014&&t!==1004&&t!==1005&&t!==1006||t>=3e3&&t<=4999}function ye(t){let e=t.length,r=0;for(;r<e;)if(!(t[r]&128))r++;else if((t[r]&224)===192){if(r+1===e||(t[r+1]&192)!==128||(t[r]&254)===192)return!1;r+=2}else if((t[r]&240)===224){if(r+2>=e||(t[r+1]&192)!==128||(t[r+2]&192)!==128||t[r]===224&&(t[r+1]&224)===128||t[r]===237&&(t[r+1]&224)===160)return!1;r+=3}else if((t[r]&248)===240){if(r+3>=e||(t[r+1]&192)!==128||(t[r+2]&192)!==128||(t[r+3]&192)!==128||t[r]===240&&(t[r+1]&240)===128||t[r]===244&&t[r+1]>143||t[r]>244)return!1;r+=4}else return!1;return!0}se.exports={isValidStatusCode:lr,isValidUTF8:ye,tokenChars:fr};if(Qe)se.exports.isValidUTF8=function(t){return t.length<24?ye(t):Qe(t)};else if(!process.env.WS_NO_UTF_8_VALIDATE)try{let t=p("utf-8-validate");se.exports.isValidUTF8=function(e){return e.length<32?ye(e):t(e)}}catch{}});var be=x((ms,ot)=>{"use strict";var{Writable:cr}=p("stream"),et=V(),{BINARY_TYPES:hr,EMPTY_BUFFER:tt,kStatusCode:ur,kWebSocket:dr}=N(),{concat:Se,toArrayBuffer:_r,unmask:pr}=$(),{isValidStatusCode:mr,isValidUTF8:rt}=H(),ie=Buffer[Symbol.species],v=0,st=1,it=2,nt=3,xe=4,Ee=5,ne=6,ve=class extends cr{constructor(e={}){super(),this._allowSynchronousEvents=e.allowSynchronousEvents!==void 0?e.allowSynchronousEvents:!0,this._binaryType=e.binaryType||hr[0],this._extensions=e.extensions||{},this._isServer=!!e.isServer,this._maxPayload=e.maxPayload|0,this._skipUTF8Validation=!!e.skipUTF8Validation,this[dr]=void 0,this._bufferedBytes=0,this._buffers=[],this._compressed=!1,this._payloadLength=0,this._mask=void 0,this._fragmented=0,this._masked=!1,this._fin=!1,this._opcode=0,this._totalPayloadLength=0,this._messageLength=0,this._fragments=[],this._errored=!1,this._loop=!1,this._state=v}_write(e,r,i){if(this._opcode===8&&this._state==v)return i();this._bufferedBytes+=e.length,this._buffers.push(e),this.startLoop(i)}consume(e){if(this._bufferedBytes-=e,e===this._buffers[0].length)return this._buffers.shift();if(e<this._buffers[0].length){let i=this._buffers[0];return this._buffers[0]=new ie(i.buffer,i.byteOffset+e,i.length-e),new ie(i.buffer,i.byteOffset,e)}let r=Buffer.allocUnsafe(e);do{let i=this._buffers[0],s=r.length-e;e>=i.length?r.set(this._buffers.shift(),s):(r.set(new Uint8Array(i.buffer,i.byteOffset,e),s),this._buffers[0]=new ie(i.buffer,i.byteOffset+e,i.length-e)),e-=i.length}while(e>0);return r}startLoop(e){this._loop=!0;do switch(this._state){case v:this.getInfo(e);break;case st:this.getPayloadLength16(e);break;case it:this.getPayloadLength64(e);break;case nt:this.getMask();break;case xe:this.getData(e);break;case Ee:case ne:this._loop=!1;return}while(this._loop);this._errored||e()}getInfo(e){if(this._bufferedBytes<2){this._loop=!1;return}let r=this.consume(2);if(r[0]&48){let s=this.createError(RangeError,"RSV2 and RSV3 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_2_3");e(s);return}let i=(r[0]&64)===64;if(i&&!this._extensions[et.extensionName]){let s=this.createError(RangeError,"RSV1 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_1");e(s);return}if(this._fin=(r[0]&128)===128,this._opcode=r[0]&15,this._payloadLength=r[1]&127,this._opcode===0){if(i){let s=this.createError(RangeError,"RSV1 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_1");e(s);return}if(!this._fragmented){let s=this.createError(RangeError,"invalid opcode 0",!0,1002,"WS_ERR_INVALID_OPCODE");e(s);return}this._opcode=this._fragmented}else if(this._opcode===1||this._opcode===2){if(this._fragmented){let s=this.createError(RangeError,`invalid opcode ${this._opcode}`,!0,1002,"WS_ERR_INVALID_OPCODE");e(s);return}this._compressed=i}else if(this._opcode>7&&this._opcode<11){if(!this._fin){let s=this.createError(RangeError,"FIN must be set",!0,1002,"WS_ERR_EXPECTED_FIN");e(s);return}if(i){let s=this.createError(RangeError,"RSV1 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_1");e(s);return}if(this._payloadLength>125||this._opcode===8&&this._payloadLength===1){let s=this.createError(RangeError,`invalid payload length ${this._payloadLength}`,!0,1002,"WS_ERR_INVALID_CONTROL_PAYLOAD_LENGTH");e(s);return}}else{let s=this.createError(RangeError,`invalid opcode ${this._opcode}`,!0,1002,"WS_ERR_INVALID_OPCODE");e(s);return}if(!this._fin&&!this._fragmented&&(this._fragmented=this._opcode),this._masked=(r[1]&128)===128,this._isServer){if(!this._masked){let s=this.createError(RangeError,"MASK must be set",!0,1002,"WS_ERR_EXPECTED_MASK");e(s);return}}else if(this._masked){let s=this.createError(RangeError,"MASK must be clear",!0,1002,"WS_ERR_UNEXPECTED_MASK");e(s);return}this._payloadLength===126?this._state=st:this._payloadLength===127?this._state=it:this.haveLength(e)}getPayloadLength16(e){if(this._bufferedBytes<2){this._loop=!1;return}this._payloadLength=this.consume(2).readUInt16BE(0),this.haveLength(e)}getPayloadLength64(e){if(this._bufferedBytes<8){this._loop=!1;return}let r=this.consume(8),i=r.readUInt32BE(0);if(i>Math.pow(2,21)-1){let s=this.createError(RangeError,"Unsupported WebSocket frame: payload length > 2^53 - 1",!1,1009,"WS_ERR_UNSUPPORTED_DATA_PAYLOAD_LENGTH");e(s);return}this._payloadLength=i*Math.pow(2,32)+r.readUInt32BE(4),this.haveLength(e)}haveLength(e){if(this._payloadLength&&this._opcode<8&&(this._totalPayloadLength+=this._payloadLength,this._totalPayloadLength>this._maxPayload&&this._maxPayload>0)){let r=this.createError(RangeError,"Max payload size exceeded",!1,1009,"WS_ERR_UNSUPPORTED_MESSAGE_LENGTH");e(r);return}this._masked?this._state=nt:this._state=xe}getMask(){if(this._bufferedBytes<4){this._loop=!1;return}this._mask=this.consume(4),this._state=xe}getData(e){let r=tt;if(this._payloadLength){if(this._bufferedBytes<this._payloadLength){this._loop=!1;return}r=this.consume(this._payloadLength),this._masked&&this._mask[0]|this._mask[1]|this._mask[2]|this._mask[3]&&pr(r,this._mask)}if(this._opcode>7){this.controlMessage(r,e);return}if(this._compressed){this._state=Ee,this.decompress(r,e);return}r.length&&(this._messageLength=this._totalPayloadLength,this._fragments.push(r)),this.dataMessage(e)}decompress(e,r){this._extensions[et.extensionName].decompress(e,this._fin,(s,n)=>{if(s)return r(s);if(n.length){if(this._messageLength+=n.length,this._messageLength>this._maxPayload&&this._maxPayload>0){let o=this.createError(RangeError,"Max payload size exceeded",!1,1009,"WS_ERR_UNSUPPORTED_MESSAGE_LENGTH");r(o);return}this._fragments.push(n)}this.dataMessage(r),this._state===v&&this.startLoop(r)})}dataMessage(e){if(!this._fin){this._state=v;return}let r=this._messageLength,i=this._fragments;if(this._totalPayloadLength=0,this._messageLength=0,this._fragmented=0,this._fragments=[],this._opcode===2){let s;this._binaryType==="nodebuffer"?s=Se(i,r):this._binaryType==="arraybuffer"?s=_r(Se(i,r)):s=i,this._allowSynchronousEvents?(this.emit("message",s,!0),this._state=v):(this._state=ne,setImmediate(()=>{this.emit("message",s,!0),this._state=v,this.startLoop(e)}))}else{let s=Se(i,r);if(!this._skipUTF8Validation&&!rt(s)){let n=this.createError(Error,"invalid UTF-8 sequence",!0,1007,"WS_ERR_INVALID_UTF8");e(n);return}this._state===Ee||this._allowSynchronousEvents?(this.emit("message",s,!1),this._state=v):(this._state=ne,setImmediate(()=>{this.emit("message",s,!1),this._state=v,this.startLoop(e)}))}}controlMessage(e,r){if(this._opcode===8){if(e.length===0)this._loop=!1,this.emit("conclude",1005,tt),this.end();else{let i=e.readUInt16BE(0);if(!mr(i)){let n=this.createError(RangeError,`invalid status code ${i}`,!0,1002,"WS_ERR_INVALID_CLOSE_CODE");r(n);return}let s=new ie(e.buffer,e.byteOffset+2,e.length-2);if(!this._skipUTF8Validation&&!rt(s)){let n=this.createError(Error,"invalid UTF-8 sequence",!0,1007,"WS_ERR_INVALID_UTF8");r(n);return}this._loop=!1,this.emit("conclude",i,s),this.end()}this._state=v;return}this._allowSynchronousEvents?(this.emit(this._opcode===9?"ping":"pong",e),this._state=v):(this._state=ne,setImmediate(()=>{this.emit(this._opcode===9?"ping":"pong",e),this._state=v,this.startLoop(r)}))}createError(e,r,i,s,n){this._loop=!1,this._errored=!0;let o=new e(i?`Invalid WebSocket frame: ${r}`:r);return Error.captureStackTrace(o,this.createError),o.code=n,o[ur]=s,o}};ot.exports=ve});var Oe=x((ys,lt)=>{"use strict";var{Duplex:gs}=p("stream"),{randomFillSync:gr}=p("crypto"),at=V(),{EMPTY_BUFFER:yr}=N(),{isValidStatusCode:Sr}=H(),{mask:ft,toBuffer:D}=$(),b=Symbol("kByteLength"),xr=Buffer.alloc(4),we=class t{constructor(e,r,i){this._extensions=r||{},i&&(this._generateMask=i,this._maskBuffer=Buffer.alloc(4)),this._socket=e,this._firstFragment=!0,this._compress=!1,this._bufferedBytes=0,this._deflating=!1,this._queue=[]}static frame(e,r){let i,s=!1,n=2,o=!1;r.mask&&(i=r.maskBuffer||xr,r.generateMask?r.generateMask(i):gr(i,0,4),o=(i[0]|i[1]|i[2]|i[3])===0,n=6);let f;typeof e=="string"?(!r.mask||o)&&r[b]!==void 0?f=r[b]:(e=Buffer.from(e),f=e.length):(f=e.length,s=r.mask&&r.readOnly&&!o);let l=f;f>=65536?(n+=8,l=127):f>125&&(n+=2,l=126);let a=Buffer.allocUnsafe(s?f+n:n);return a[0]=r.fin?r.opcode|128:r.opcode,r.rsv1&&(a[0]|=64),a[1]=l,l===126?a.writeUInt16BE(f,2):l===127&&(a[2]=a[3]=0,a.writeUIntBE(f,4,6)),r.mask?(a[1]|=128,a[n-4]=i[0],a[n-3]=i[1],a[n-2]=i[2],a[n-1]=i[3],o?[a,e]:s?(ft(e,i,a,n,f),[a]):(ft(e,i,e,0,f),[a,e])):[a,e]}close(e,r,i,s){let n;if(e===void 0)n=yr;else{if(typeof e!="number"||!Sr(e))throw new TypeError("First argument must be a valid error code number");if(r===void 0||!r.length)n=Buffer.allocUnsafe(2),n.writeUInt16BE(e,0);else{let f=Buffer.byteLength(r);if(f>123)throw new RangeError("The message must not be greater than 123 bytes");n=Buffer.allocUnsafe(2+f),n.writeUInt16BE(e,0),typeof r=="string"?n.write(r,2):n.set(r,2)}}let o={[b]:n.length,fin:!0,generateMask:this._generateMask,mask:i,maskBuffer:this._maskBuffer,opcode:8,readOnly:!1,rsv1:!1};this._deflating?this.enqueue([this.dispatch,n,!1,o,s]):this.sendFrame(t.frame(n,o),s)}ping(e,r,i){let s,n;if(typeof e=="string"?(s=Buffer.byteLength(e),n=!1):(e=D(e),s=e.length,n=D.readOnly),s>125)throw new RangeError("The data size must not be greater than 125 bytes");let o={[b]:s,fin:!0,generateMask:this._generateMask,mask:r,maskBuffer:this._maskBuffer,opcode:9,readOnly:n,rsv1:!1};this._deflating?this.enqueue([this.dispatch,e,!1,o,i]):this.sendFrame(t.frame(e,o),i)}pong(e,r,i){let s,n;if(typeof e=="string"?(s=Buffer.byteLength(e),n=!1):(e=D(e),s=e.length,n=D.readOnly),s>125)throw new RangeError("The data size must not be greater than 125 bytes");let o={[b]:s,fin:!0,generateMask:this._generateMask,mask:r,maskBuffer:this._maskBuffer,opcode:10,readOnly:n,rsv1:!1};this._deflating?this.enqueue([this.dispatch,e,!1,o,i]):this.sendFrame(t.frame(e,o),i)}send(e,r,i){let s=this._extensions[at.extensionName],n=r.binary?2:1,o=r.compress,f,l;if(typeof e=="string"?(f=Buffer.byteLength(e),l=!1):(e=D(e),f=e.length,l=D.readOnly),this._firstFragment?(this._firstFragment=!1,o&&s&&s.params[s._isServer?"server_no_context_takeover":"client_no_context_takeover"]&&(o=f>=s._threshold),this._compress=o):(o=!1,n=0),r.fin&&(this._firstFragment=!0),s){let a={[b]:f,fin:r.fin,generateMask:this._generateMask,mask:r.mask,maskBuffer:this._maskBuffer,opcode:n,readOnly:l,rsv1:o};this._deflating?this.enqueue([this.dispatch,e,this._compress,a,i]):this.dispatch(e,this._compress,a,i)}else this.sendFrame(t.frame(e,{[b]:f,fin:r.fin,generateMask:this._generateMask,mask:r.mask,maskBuffer:this._maskBuffer,opcode:n,readOnly:l,rsv1:!1}),i)}dispatch(e,r,i,s){if(!r){this.sendFrame(t.frame(e,i),s);return}let n=this._extensions[at.extensionName];this._bufferedBytes+=i[b],this._deflating=!0,n.compress(e,i.fin,(o,f)=>{if(this._socket.destroyed){let l=new Error("The socket was closed while data was being compressed");typeof s=="function"&&s(l);for(let a=0;a<this._queue.length;a++){let h=this._queue[a],c=h[h.length-1];typeof c=="function"&&c(l)}return}this._bufferedBytes-=i[b],this._deflating=!1,i.readOnly=!1,this.sendFrame(t.frame(f,i),s),this.dequeue()})}dequeue(){for(;!this._deflating&&this._queue.length;){let e=this._queue.shift();this._bufferedBytes-=e[3][b],Reflect.apply(e[0],this,e.slice(1))}}enqueue(e){this._bufferedBytes+=e[3][b],this._queue.push(e)}sendFrame(e,r){e.length===2?(this._socket.cork(),this._socket.write(e[0]),this._socket.write(e[1],r),this._socket.uncork()):this._socket.write(e[0],r)}};lt.exports=we});var yt=x((Ss,gt)=>{"use strict";var{kForOnEventAttribute:z,kListener:ke}=N(),ct=Symbol("kCode"),ht=Symbol("kData"),ut=Symbol("kError"),dt=Symbol("kMessage"),_t=Symbol("kReason"),W=Symbol("kTarget"),pt=Symbol("kType"),mt=Symbol("kWasClean"),T=class{constructor(e){this[W]=null,this[pt]=e}get target(){return this[W]}get type(){return this[pt]}};Object.defineProperty(T.prototype,"target",{enumerable:!0});Object.defineProperty(T.prototype,"type",{enumerable:!0});var I=class extends T{constructor(e,r={}){super(e),this[ct]=r.code===void 0?0:r.code,this[_t]=r.reason===void 0?"":r.reason,this[mt]=r.wasClean===void 0?!1:r.wasClean}get code(){return this[ct]}get reason(){return this[_t]}get wasClean(){return this[mt]}};Object.defineProperty(I.prototype,"code",{enumerable:!0});Object.defineProperty(I.prototype,"reason",{enumerable:!0});Object.defineProperty(I.prototype,"wasClean",{enumerable:!0});var A=class extends T{constructor(e,r={}){super(e),this[ut]=r.error===void 0?null:r.error,this[dt]=r.message===void 0?"":r.message}get error(){return this[ut]}get message(){return this[dt]}};Object.defineProperty(A.prototype,"error",{enumerable:!0});Object.defineProperty(A.prototype,"message",{enumerable:!0});var Y=class extends T{constructor(e,r={}){super(e),this[ht]=r.data===void 0?null:r.data}get data(){return this[ht]}};Object.defineProperty(Y.prototype,"data",{enumerable:!0});var Er={addEventListener(t,e,r={}){for(let s of this.listeners(t))if(!r[z]&&s[ke]===e&&!s[z])return;let i;if(t==="message")i=function(n,o){let f=new Y("message",{data:o?n:n.toString()});f[W]=this,oe(e,this,f)};else if(t==="close")i=function(n,o){let f=new I("close",{code:n,reason:o.toString(),wasClean:this._closeFrameReceived&&this._closeFrameSent});f[W]=this,oe(e,this,f)};else if(t==="error")i=function(n){let o=new A("error",{error:n,message:n.message});o[W]=this,oe(e,this,o)};else if(t==="open")i=function(){let n=new T("open");n[W]=this,oe(e,this,n)};else return;i[z]=!!r[z],i[ke]=e,r.once?this.once(t,i):this.on(t,i)},removeEventListener(t,e){for(let r of this.listeners(t))if(r[ke]===e&&!r[z]){this.removeListener(t,r);break}}};gt.exports={CloseEvent:I,ErrorEvent:A,Event:T,EventTarget:Er,MessageEvent:Y};function oe(t,e,r){typeof t=="object"&&t.handleEvent?t.handleEvent.call(t,r):t.call(e,r)}});var Te=x((xs,St)=>{"use strict";var{tokenChars:K}=H();function w(t,e,r){t[e]===void 0?t[e]=[r]:t[e].push(r)}function vr(t){let e=Object.create(null),r=Object.create(null),i=!1,s=!1,n=!1,o,f,l=-1,a=-1,h=-1,c=0;for(;c<t.length;c++)if(a=t.charCodeAt(c),o===void 0)if(h===-1&&K[a]===1)l===-1&&(l=c);else if(c!==0&&(a===32||a===9))h===-1&&l!==-1&&(h=c);else if(a===59||a===44){if(l===-1)throw new SyntaxError(`Unexpected character at index ${c}`);h===-1&&(h=c);let y=t.slice(l,h);a===44?(w(e,y,r),r=Object.create(null)):o=y,l=h=-1}else throw new SyntaxError(`Unexpected character at index ${c}`);else if(f===void 0)if(h===-1&&K[a]===1)l===-1&&(l=c);else if(a===32||a===9)h===-1&&l!==-1&&(h=c);else if(a===59||a===44){if(l===-1)throw new SyntaxError(`Unexpected character at index ${c}`);h===-1&&(h=c),w(r,t.slice(l,h),!0),a===44&&(w(e,o,r),r=Object.create(null),o=void 0),l=h=-1}else if(a===61&&l!==-1&&h===-1)f=t.slice(l,c),l=h=-1;else throw new SyntaxError(`Unexpected character at index ${c}`);else if(s){if(K[a]!==1)throw new SyntaxError(`Unexpected character at index ${c}`);l===-1?l=c:i||(i=!0),s=!1}else if(n)if(K[a]===1)l===-1&&(l=c);else if(a===34&&l!==-1)n=!1,h=c;else if(a===92)s=!0;else throw new SyntaxError(`Unexpected character at index ${c}`);else if(a===34&&t.charCodeAt(c-1)===61)n=!0;else if(h===-1&&K[a]===1)l===-1&&(l=c);else if(l!==-1&&(a===32||a===9))h===-1&&(h=c);else if(a===59||a===44){if(l===-1)throw new SyntaxError(`Unexpected character at index ${c}`);h===-1&&(h=c);let y=t.slice(l,h);i&&(y=y.replace(/\\/g,""),i=!1),w(r,f,y),a===44&&(w(e,o,r),r=Object.create(null),o=void 0),f=void 0,l=h=-1}else throw new SyntaxError(`Unexpected character at index ${c}`);if(l===-1||n||a===32||a===9)throw new SyntaxError("Unexpected end of input");h===-1&&(h=c);let m=t.slice(l,h);return o===void 0?w(e,m,r):(f===void 0?w(r,m,!0):i?w(r,f,m.replace(/\\/g,"")):w(r,f,m),w(e,o,r)),e}function br(t){return Object.keys(t).map(e=>{let r=t[e];return Array.isArray(r)||(r=[r]),r.map(i=>[e].concat(Object.keys(i).map(s=>{let n=i[s];return Array.isArray(n)||(n=[n]),n.map(o=>o===!0?s:`${s}=${o}`).join("; ")})).join("; ")).join(", ")}).join(", ")}St.exports={format:br,parse:vr}});var Re=x((bs,Lt)=>{"use strict";var wr=p("events"),Or=p("https"),kr=p("http"),vt=p("net"),Tr=p("tls"),{randomBytes:Cr,createHash:Nr}=p("crypto"),{Duplex:Es,Readable:vs}=p("stream"),{URL:Ce}=p("url"),P=V(),Lr=be(),Pr=Oe(),{BINARY_TYPES:xt,EMPTY_BUFFER:ae,GUID:Rr,kForOnEventAttribute:Ne,kListener:Ir,kStatusCode:Ur,kWebSocket:g,NOOP:bt}=N(),{EventTarget:{addEventListener:Br,removeEventListener:Mr}}=yt(),{format:Dr,parse:Wr}=Te(),{toBuffer:Ar}=$(),Fr=30*1e3,wt=Symbol("kAborted"),Le=[8,13],C=["CONNECTING","OPEN","CLOSING","CLOSED"],Gr=/^[!#$%&'*+\-.0-9A-Z^_`|a-z~]+$/,d=class t extends wr{constructor(e,r,i){super(),this._binaryType=xt[0],this._closeCode=1006,this._closeFrameReceived=!1,this._closeFrameSent=!1,this._closeMessage=ae,this._closeTimer=null,this._extensions={},this._paused=!1,this._protocol="",this._readyState=t.CONNECTING,this._receiver=null,this._sender=null,this._socket=null,e!==null?(this._bufferedAmount=0,this._isServer=!1,this._redirects=0,r===void 0?r=[]:Array.isArray(r)||(typeof r=="object"&&r!==null?(i=r,r=[]):r=[r]),Ot(this,e,r,i)):(this._autoPong=i.autoPong,this._isServer=!0)}get binaryType(){return this._binaryType}set binaryType(e){xt.includes(e)&&(this._binaryType=e,this._receiver&&(this._receiver._binaryType=e))}get bufferedAmount(){return this._socket?this._socket._writableState.length+this._sender._bufferedBytes:this._bufferedAmount}get extensions(){return Object.keys(this._extensions).join()}get isPaused(){return this._paused}get onclose(){return null}get onerror(){return null}get onopen(){return null}get onmessage(){return null}get protocol(){return this._protocol}get readyState(){return this._readyState}get url(){return this._url}setSocket(e,r,i){let s=new Lr({allowSynchronousEvents:i.allowSynchronousEvents,binaryType:this.binaryType,extensions:this._extensions,isServer:this._isServer,maxPayload:i.maxPayload,skipUTF8Validation:i.skipUTF8Validation});this._sender=new Pr(e,this._extensions,i.generateMask),this._receiver=s,this._socket=e,s[g]=this,e[g]=this,s.on("conclude",jr),s.on("drain",Vr),s.on("error",Hr),s.on("message",zr),s.on("ping",Yr),s.on("pong",Kr),e.setTimeout&&e.setTimeout(0),e.setNoDelay&&e.setNoDelay(),r.length>0&&e.unshift(r),e.on("close",Tt),e.on("data",le),e.on("end",Ct),e.on("error",Nt),this._readyState=t.OPEN,this.emit("open")}emitClose(){if(!this._socket){this._readyState=t.CLOSED,this.emit("close",this._closeCode,this._closeMessage);return}this._extensions[P.extensionName]&&this._extensions[P.extensionName].cleanup(),this._receiver.removeAllListeners(),this._readyState=t.CLOSED,this.emit("close",this._closeCode,this._closeMessage)}close(e,r){if(this.readyState!==t.CLOSED){if(this.readyState===t.CONNECTING){E(this,this._req,"WebSocket was closed before the connection was established");return}if(this.readyState===t.CLOSING){this._closeFrameSent&&(this._closeFrameReceived||this._receiver._writableState.errorEmitted)&&this._socket.end();return}this._readyState=t.CLOSING,this._sender.close(e,r,!this._isServer,i=>{i||(this._closeFrameSent=!0,(this._closeFrameReceived||this._receiver._writableState.errorEmitted)&&this._socket.end())}),this._closeTimer=setTimeout(this._socket.destroy.bind(this._socket),Fr)}}pause(){this.readyState===t.CONNECTING||this.readyState===t.CLOSED||(this._paused=!0,this._socket.pause())}ping(e,r,i){if(this.readyState===t.CONNECTING)throw new Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof e=="function"?(i=e,e=r=void 0):typeof r=="function"&&(i=r,r=void 0),typeof e=="number"&&(e=e.toString()),this.readyState!==t.OPEN){Pe(this,e,i);return}r===void 0&&(r=!this._isServer),this._sender.ping(e||ae,r,i)}pong(e,r,i){if(this.readyState===t.CONNECTING)throw new Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof e=="function"?(i=e,e=r=void 0):typeof r=="function"&&(i=r,r=void 0),typeof e=="number"&&(e=e.toString()),this.readyState!==t.OPEN){Pe(this,e,i);return}r===void 0&&(r=!this._isServer),this._sender.pong(e||ae,r,i)}resume(){this.readyState===t.CONNECTING||this.readyState===t.CLOSED||(this._paused=!1,this._receiver._writableState.needDrain||this._socket.resume())}send(e,r,i){if(this.readyState===t.CONNECTING)throw new Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof r=="function"&&(i=r,r={}),typeof e=="number"&&(e=e.toString()),this.readyState!==t.OPEN){Pe(this,e,i);return}let s={binary:typeof e!="string",mask:!this._isServer,compress:!0,fin:!0,...r};this._extensions[P.extensionName]||(s.compress=!1),this._sender.send(e||ae,s,i)}terminate(){if(this.readyState!==t.CLOSED){if(this.readyState===t.CONNECTING){E(this,this._req,"WebSocket was closed before the connection was established");return}this._socket&&(this._readyState=t.CLOSING,this._socket.destroy())}}};Object.defineProperty(d,"CONNECTING",{enumerable:!0,value:C.indexOf("CONNECTING")});Object.defineProperty(d.prototype,"CONNECTING",{enumerable:!0,value:C.indexOf("CONNECTING")});Object.defineProperty(d,"OPEN",{enumerable:!0,value:C.indexOf("OPEN")});Object.defineProperty(d.prototype,"OPEN",{enumerable:!0,value:C.indexOf("OPEN")});Object.defineProperty(d,"CLOSING",{enumerable:!0,value:C.indexOf("CLOSING")});Object.defineProperty(d.prototype,"CLOSING",{enumerable:!0,value:C.indexOf("CLOSING")});Object.defineProperty(d,"CLOSED",{enumerable:!0,value:C.indexOf("CLOSED")});Object.defineProperty(d.prototype,"CLOSED",{enumerable:!0,value:C.indexOf("CLOSED")});["binaryType","bufferedAmount","extensions","isPaused","protocol","readyState","url"].forEach(t=>{Object.defineProperty(d.prototype,t,{enumerable:!0})});["open","error","close","message"].forEach(t=>{Object.defineProperty(d.prototype,`on${t}`,{enumerable:!0,get(){for(let e of this.listeners(t))if(e[Ne])return e[Ir];return null},set(e){for(let r of this.listeners(t))if(r[Ne]){this.removeListener(t,r);break}typeof e=="function"&&this.addEventListener(t,e,{[Ne]:!0})}})});d.prototype.addEventListener=Br;d.prototype.removeEventListener=Mr;Lt.exports=d;function Ot(t,e,r,i){let s={allowSynchronousEvents:!0,autoPong:!0,protocolVersion:Le[1],maxPayload:104857600,skipUTF8Validation:!1,perMessageDeflate:!0,followRedirects:!1,maxRedirects:10,...i,socketPath:void 0,hostname:void 0,protocol:void 0,timeout:void 0,method:"GET",host:void 0,path:void 0,port:void 0};if(t._autoPong=s.autoPong,!Le.includes(s.protocolVersion))throw new RangeError(`Unsupported protocol version: ${s.protocolVersion} (supported versions: ${Le.join(", ")})`);let n;if(e instanceof Ce)n=e;else try{n=new Ce(e)}catch{throw new SyntaxError(`Invalid URL: ${e}`)}n.protocol==="http:"?n.protocol="ws:":n.protocol==="https:"&&(n.protocol="wss:"),t._url=n.href;let o=n.protocol==="wss:",f=n.protocol==="ws+unix:",l;if(n.protocol!=="ws:"&&!o&&!f?l=`The URL's protocol must be one of "ws:", "wss:", "http:", "https", or "ws+unix:"`:f&&!n.pathname?l="The URL's pathname is empty":n.hash&&(l="The URL contains a fragment identifier"),l){let u=new SyntaxError(l);if(t._redirects===0)throw u;fe(t,u);return}let a=o?443:80,h=Cr(16).toString("base64"),c=o?Or.request:kr.request,m=new Set,y;if(s.createConnection=s.createConnection||(o?qr:$r),s.defaultPort=s.defaultPort||a,s.port=n.port||a,s.host=n.hostname.startsWith("[")?n.hostname.slice(1,-1):n.hostname,s.headers={...s.headers,"Sec-WebSocket-Version":s.protocolVersion,"Sec-WebSocket-Key":h,Connection:"Upgrade",Upgrade:"websocket"},s.path=n.pathname+n.search,s.timeout=s.handshakeTimeout,s.perMessageDeflate&&(y=new P(s.perMessageDeflate!==!0?s.perMessageDeflate:{},!1,s.maxPayload),s.headers["Sec-WebSocket-Extensions"]=Dr({[P.extensionName]:y.offer()})),r.length){for(let u of r){if(typeof u!="string"||!Gr.test(u)||m.has(u))throw new SyntaxError("An invalid or duplicated subprotocol was specified");m.add(u)}s.headers["Sec-WebSocket-Protocol"]=r.join(",")}if(s.origin&&(s.protocolVersion<13?s.headers["Sec-WebSocket-Origin"]=s.origin:s.headers.Origin=s.origin),(n.username||n.password)&&(s.auth=`${n.username}:${n.password}`),f){let u=s.path.split(":");s.socketPath=u[0],s.path=u[1]}let _;if(s.followRedirects){if(t._redirects===0){t._originalIpc=f,t._originalSecure=o,t._originalHostOrSocketPath=f?s.socketPath:n.host;let u=i&&i.headers;if(i={...i,headers:{}},u)for(let[S,M]of Object.entries(u))i.headers[S.toLowerCase()]=M}else if(t.listenerCount("redirect")===0){let u=f?t._originalIpc?s.socketPath===t._originalHostOrSocketPath:!1:t._originalIpc?!1:n.host===t._originalHostOrSocketPath;(!u||t._originalSecure&&!o)&&(delete s.headers.authorization,delete s.headers.cookie,u||delete s.headers.host,s.auth=void 0)}s.auth&&!i.headers.authorization&&(i.headers.authorization="Basic "+Buffer.from(s.auth).toString("base64")),_=t._req=c(s),t._redirects&&t.emit("redirect",t.url,_)}else _=t._req=c(s);s.timeout&&_.on("timeout",()=>{E(t,_,"Opening handshake has timed out")}),_.on("error",u=>{_===null||_[wt]||(_=t._req=null,fe(t,u))}),_.on("response",u=>{let S=u.headers.location,M=u.statusCode;if(S&&s.followRedirects&&M>=300&&M<400){if(++t._redirects>s.maxRedirects){E(t,_,"Maximum redirects exceeded");return}_.abort();let J;try{J=new Ce(S,e)}catch{let R=new SyntaxError(`Invalid URL: ${S}`);fe(t,R);return}Ot(t,J,r,i)}else t.emit("unexpected-response",_,u)||E(t,_,`Unexpected server response: ${u.statusCode}`)}),_.on("upgrade",(u,S,M)=>{if(t.emit("upgrade",u),t.readyState!==d.CONNECTING)return;if(_=t._req=null,u.headers.upgrade.toLowerCase()!=="websocket"){E(t,S,"Invalid Upgrade header");return}let J=Nr("sha1").update(h+Rr).digest("base64");if(u.headers["sec-websocket-accept"]!==J){E(t,S,"Invalid Sec-WebSocket-Accept header");return}let F=u.headers["sec-websocket-protocol"],R;if(F!==void 0?m.size?m.has(F)||(R="Server sent an invalid subprotocol"):R="Server sent a subprotocol but none was requested":m.size&&(R="Server sent no subprotocol"),R){E(t,S,R);return}F&&(t._protocol=F);let Me=u.headers["sec-websocket-extensions"];if(Me!==void 0){if(!y){E(t,S,"Server sent a Sec-WebSocket-Extensions header but no extension was requested");return}let he;try{he=Wr(Me)}catch{E(t,S,"Invalid Sec-WebSocket-Extensions header");return}let De=Object.keys(he);if(De.length!==1||De[0]!==P.extensionName){E(t,S,"Server indicated an extension that was not requested");return}try{y.accept(he[P.extensionName])}catch{E(t,S,"Invalid Sec-WebSocket-Extensions header");return}t._extensions[P.extensionName]=y}t.setSocket(S,M,{allowSynchronousEvents:s.allowSynchronousEvents,generateMask:s.generateMask,maxPayload:s.maxPayload,skipUTF8Validation:s.skipUTF8Validation})}),s.finishRequest?s.finishRequest(_,t):_.end()}function fe(t,e){t._readyState=d.CLOSING,t.emit("error",e),t.emitClose()}function $r(t){return t.path=t.socketPath,vt.connect(t)}function qr(t){return t.path=void 0,!t.servername&&t.servername!==""&&(t.servername=vt.isIP(t.host)?"":t.host),Tr.connect(t)}function E(t,e,r){t._readyState=d.CLOSING;let i=new Error(r);Error.captureStackTrace(i,E),e.setHeader?(e[wt]=!0,e.abort(),e.socket&&!e.socket.destroyed&&e.socket.destroy(),process.nextTick(fe,t,i)):(e.destroy(i),e.once("error",t.emit.bind(t,"error")),e.once("close",t.emitClose.bind(t)))}function Pe(t,e,r){if(e){let i=Ar(e).length;t._socket?t._sender._bufferedBytes+=i:t._bufferedAmount+=i}if(r){let i=new Error(`WebSocket is not open: readyState ${t.readyState} (${C[t.readyState]})`);process.nextTick(r,i)}}function jr(t,e){let r=this[g];r._closeFrameReceived=!0,r._closeMessage=e,r._closeCode=t,r._socket[g]!==void 0&&(r._socket.removeListener("data",le),process.nextTick(kt,r._socket),t===1005?r.close():r.close(t,e))}function Vr(){let t=this[g];t.isPaused||t._socket.resume()}function Hr(t){let e=this[g];e._socket[g]!==void 0&&(e._socket.removeListener("data",le),process.nextTick(kt,e._socket),e.close(t[Ur])),e.emit("error",t)}function Et(){this[g].emitClose()}function zr(t,e){this[g].emit("message",t,e)}function Yr(t){let e=this[g];e._autoPong&&e.pong(t,!this._isServer,bt),e.emit("ping",t)}function Kr(t){this[g].emit("pong",t)}function kt(t){t.resume()}function Tt(){let t=this[g];this.removeListener("close",Tt),this.removeListener("data",le),this.removeListener("end",Ct),t._readyState=d.CLOSING;let e;!this._readableState.endEmitted&&!t._closeFrameReceived&&!t._receiver._writableState.errorEmitted&&(e=t._socket.read())!==null&&t._receiver.write(e),t._receiver.end(),this[g]=void 0,clearTimeout(t._closeTimer),t._receiver._writableState.finished||t._receiver._writableState.errorEmitted?t.emitClose():(t._receiver.on("error",Et),t._receiver.on("finish",Et))}function le(t){this[g]._receiver.write(t)||this.pause()}function Ct(){let t=this[g];t._readyState=d.CLOSING,t._receiver.end(),this.end()}function Nt(){let t=this[g];this.removeListener("error",Nt),this.on("error",bt),t&&(t._readyState=d.CLOSING,this.destroy())}});var Rt=x((ws,Pt)=>{"use strict";var{tokenChars:Xr}=H();function Zr(t){let e=new Set,r=-1,i=-1,s=0;for(s;s<t.length;s++){let o=t.charCodeAt(s);if(i===-1&&Xr[o]===1)r===-1&&(r=s);else if(s!==0&&(o===32||o===9))i===-1&&r!==-1&&(i=s);else if(o===44){if(r===-1)throw new SyntaxError(`Unexpected character at index ${s}`);i===-1&&(i=s);let f=t.slice(r,i);if(e.has(f))throw new SyntaxError(`The "${f}" subprotocol is duplicated`);e.add(f),r=i=-1}else throw new SyntaxError(`Unexpected character at index ${s}`)}if(r===-1||i!==-1)throw new SyntaxError("Unexpected end of input");let n=t.slice(r,s);if(e.has(n))throw new SyntaxError(`The "${n}" subprotocol is duplicated`);return e.add(n),e}Pt.exports={parse:Zr}});var At=x((ks,Wt)=>{"use strict";var Jr=p("events"),ce=p("http"),{Duplex:Os}=p("stream"),{createHash:Qr}=p("crypto"),It=Te(),U=V(),es=Rt(),ts=Re(),{GUID:rs,kWebSocket:ss}=N(),is=/^[+/0-9A-Za-z]{22}==$/,Ut=0,Bt=1,Dt=2,Ie=class extends Jr{constructor(e,r){if(super(),e={allowSynchronousEvents:!0,autoPong:!0,maxPayload:100*1024*1024,skipUTF8Validation:!1,perMessageDeflate:!1,handleProtocols:null,clientTracking:!0,verifyClient:null,noServer:!1,backlog:null,server:null,host:null,path:null,port:null,WebSocket:ts,...e},e.port==null&&!e.server&&!e.noServer||e.port!=null&&(e.server||e.noServer)||e.server&&e.noServer)throw new TypeError('One and only one of the "port", "server", or "noServer" options must be specified');if(e.port!=null?(this._server=ce.createServer((i,s)=>{let n=ce.STATUS_CODES[426];s.writeHead(426,{"Content-Length":n.length,"Content-Type":"text/plain"}),s.end(n)}),this._server.listen(e.port,e.host,e.backlog,r)):e.server&&(this._server=e.server),this._server){let i=this.emit.bind(this,"connection");this._removeListeners=ns(this._server,{listening:this.emit.bind(this,"listening"),error:this.emit.bind(this,"error"),upgrade:(s,n,o)=>{this.handleUpgrade(s,n,o,i)}})}e.perMessageDeflate===!0&&(e.perMessageDeflate={}),e.clientTracking&&(this.clients=new Set,this._shouldEmitClose=!1),this.options=e,this._state=Ut}address(){if(this.options.noServer)throw new Error('The server is operating in "noServer" mode');return this._server?this._server.address():null}close(e){if(this._state===Dt){e&&this.once("close",()=>{e(new Error("The server is not running"))}),process.nextTick(X,this);return}if(e&&this.once("close",e),this._state!==Bt)if(this._state=Bt,this.options.noServer||this.options.server)this._server&&(this._removeListeners(),this._removeListeners=this._server=null),this.clients?this.clients.size?this._shouldEmitClose=!0:process.nextTick(X,this):process.nextTick(X,this);else{let r=this._server;this._removeListeners(),this._removeListeners=this._server=null,r.close(()=>{X(this)})}}shouldHandle(e){if(this.options.path){let r=e.url.indexOf("?");if((r!==-1?e.url.slice(0,r):e.url)!==this.options.path)return!1}return!0}handleUpgrade(e,r,i,s){r.on("error",Mt);let n=e.headers["sec-websocket-key"],o=+e.headers["sec-websocket-version"];if(e.method!=="GET"){B(this,e,r,405,"Invalid HTTP method");return}if(e.headers.upgrade.toLowerCase()!=="websocket"){B(this,e,r,400,"Invalid Upgrade header");return}if(!n||!is.test(n)){B(this,e,r,400,"Missing or invalid Sec-WebSocket-Key header");return}if(o!==8&&o!==13){B(this,e,r,400,"Missing or invalid Sec-WebSocket-Version header");return}if(!this.shouldHandle(e)){Z(r,400);return}let f=e.headers["sec-websocket-protocol"],l=new Set;if(f!==void 0)try{l=es.parse(f)}catch{B(this,e,r,400,"Invalid Sec-WebSocket-Protocol header");return}let a=e.headers["sec-websocket-extensions"],h={};if(this.options.perMessageDeflate&&a!==void 0){let c=new U(this.options.perMessageDeflate,!0,this.options.maxPayload);try{let m=It.parse(a);m[U.extensionName]&&(c.accept(m[U.extensionName]),h[U.extensionName]=c)}catch{B(this,e,r,400,"Invalid or unacceptable Sec-WebSocket-Extensions header");return}}if(this.options.verifyClient){let c={origin:e.headers[`${o===8?"sec-websocket-origin":"origin"}`],secure:!!(e.socket.authorized||e.socket.encrypted),req:e};if(this.options.verifyClient.length===2){this.options.verifyClient(c,(m,y,_,u)=>{if(!m)return Z(r,y||401,_,u);this.completeUpgrade(h,n,l,e,r,i,s)});return}if(!this.options.verifyClient(c))return Z(r,401)}this.completeUpgrade(h,n,l,e,r,i,s)}completeUpgrade(e,r,i,s,n,o,f){if(!n.readable||!n.writable)return n.destroy();if(n[ss])throw new Error("server.handleUpgrade() was called more than once with the same socket, possibly due to a misconfiguration");if(this._state>Ut)return Z(n,503);let a=["HTTP/1.1 101 Switching Protocols","Upgrade: websocket","Connection: Upgrade",`Sec-WebSocket-Accept: ${Qr("sha1").update(r+rs).digest("base64")}`],h=new this.options.WebSocket(null,void 0,this.options);if(i.size){let c=this.options.handleProtocols?this.options.handleProtocols(i,s):i.values().next().value;c&&(a.push(`Sec-WebSocket-Protocol: ${c}`),h._protocol=c)}if(e[U.extensionName]){let c=e[U.extensionName].params,m=It.format({[U.extensionName]:[c]});a.push(`Sec-WebSocket-Extensions: ${m}`),h._extensions=e}this.emit("headers",a,s),n.write(a.concat(`\r
1
+ var tr=Object.create;var Ve=Object.defineProperty;var rr=Object.getOwnPropertyDescriptor;var sr=Object.getOwnPropertyNames;var ir=Object.getPrototypeOf,nr=Object.prototype.hasOwnProperty;var m=(t=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(t,{get:(e,r)=>(typeof require<"u"?require:e)[r]}):t)(function(t){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+t+'" is not supported')});var x=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports);var or=(t,e,r,s)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of sr(e))!nr.call(t,i)&&i!==r&&Ve(t,i,{get:()=>e[i],enumerable:!(s=rr(e,i))||s.enumerable});return t};var H=(t,e,r)=>(r=t!=null?tr(ir(t)):{},or(e||!t||!t.__esModule?Ve(r,"default",{value:t,enumerable:!0}):r,t));var Ke=x((Ns,Ye)=>{"use strict";var{Duplex:ar}=m("stream");function ze(t){t.emit("close")}function fr(){!this.destroyed&&this._writableState.finished&&this.destroy()}function He(t){this.removeListener("error",He),this.destroy(),this.listenerCount("error")===0&&this.emit("error",t)}function lr(t,e){let r=!0,s=new ar({...e,autoDestroy:!1,emitClose:!1,objectMode:!1,writableObjectMode:!1});return t.on("message",function(n,o){let f=!o&&s._readableState.objectMode?n.toString():n;s.push(f)||t.pause()}),t.once("error",function(n){s.destroyed||(r=!1,s.destroy(n))}),t.once("close",function(){s.destroyed||s.push(null)}),s._destroy=function(i,n){if(t.readyState===t.CLOSED){n(i),process.nextTick(ze,s);return}let o=!1;t.once("error",function(l){o=!0,n(l)}),t.once("close",function(){o||n(i),process.nextTick(ze,s)}),r&&t.terminate()},s._final=function(i){if(t.readyState===t.CONNECTING){t.once("open",function(){s._final(i)});return}t._socket!==null&&(t._socket._writableState.finished?(i(),s._readableState.endEmitted&&s.destroy()):(t._socket.once("finish",function(){i()}),t.close()))},s._read=function(){t.isPaused&&t.resume()},s._write=function(i,n,o){if(t.readyState===t.CONNECTING){t.once("open",function(){s._write(i,n,o)});return}t.send(i,o)},s.on("end",fr),s.on("error",He),s}Ye.exports=lr});var T=x((Ls,Je)=>{"use strict";var Xe=["nodebuffer","arraybuffer","fragments"],Ze=typeof Blob<"u";Ze&&Xe.push("blob");Je.exports={BINARY_TYPES:Xe,EMPTY_BUFFER:Buffer.alloc(0),GUID:"258EAFA5-E914-47DA-95CA-C5AB0DC85B11",hasBlob:Ze,kForOnEventAttribute:Symbol("kIsForOnEventAttribute"),kListener:Symbol("kListener"),kStatusCode:Symbol("status-code"),kWebSocket:Symbol("websocket"),NOOP:()=>{}}});var Y=x((Ps,se)=>{"use strict";var{EMPTY_BUFFER:cr}=T(),ye=Buffer[Symbol.species];function hr(t,e){if(t.length===0)return cr;if(t.length===1)return t[0];let r=Buffer.allocUnsafe(e),s=0;for(let i=0;i<t.length;i++){let n=t[i];r.set(n,s),s+=n.length}return s<e?new ye(r.buffer,r.byteOffset,s):r}function Qe(t,e,r,s,i){for(let n=0;n<i;n++)r[s+n]=t[n]^e[n&3]}function et(t,e){for(let r=0;r<t.length;r++)t[r]^=e[r&3]}function ur(t){return t.length===t.buffer.byteLength?t.buffer:t.buffer.slice(t.byteOffset,t.byteOffset+t.length)}function Se(t){if(Se.readOnly=!0,Buffer.isBuffer(t))return t;let e;return t instanceof ArrayBuffer?e=new ye(t):ArrayBuffer.isView(t)?e=new ye(t.buffer,t.byteOffset,t.byteLength):(e=Buffer.from(t),Se.readOnly=!1),e}se.exports={concat:hr,mask:Qe,toArrayBuffer:ur,toBuffer:Se,unmask:et};if(!process.env.WS_NO_BUFFER_UTIL)try{let t=m("bufferutil");se.exports.mask=function(e,r,s,i,n){n<48?Qe(e,r,s,i,n):t.mask(e,r,s,i,n)},se.exports.unmask=function(e,r){e.length<32?et(e,r):t.unmask(e,r)}}catch{}});var st=x((Bs,rt)=>{"use strict";var tt=Symbol("kDone"),xe=Symbol("kRun"),Ee=class{constructor(e){this[tt]=()=>{this.pending--,this[xe]()},this.concurrency=e||1/0,this.jobs=[],this.pending=0}add(e){this.jobs.push(e),this[xe]()}[xe](){if(this.pending!==this.concurrency&&this.jobs.length){let e=this.jobs.shift();this.pending++,e(this[tt])}}};rt.exports=Ee});var Z=x((Rs,at)=>{"use strict";var K=m("zlib"),it=Y(),dr=st(),{kStatusCode:nt}=T(),_r=Buffer[Symbol.species],pr=Buffer.from([0,0,255,255]),oe=Symbol("permessage-deflate"),C=Symbol("total-length"),X=Symbol("callback"),P=Symbol("buffers"),ne=Symbol("error"),ie,ve=class{constructor(e,r,s){if(this._maxPayload=s|0,this._options=e||{},this._threshold=this._options.threshold!==void 0?this._options.threshold:1024,this._isServer=!!r,this._deflate=null,this._inflate=null,this.params=null,!ie){let i=this._options.concurrencyLimit!==void 0?this._options.concurrencyLimit:10;ie=new dr(i)}}static get extensionName(){return"permessage-deflate"}offer(){let e={};return this._options.serverNoContextTakeover&&(e.server_no_context_takeover=!0),this._options.clientNoContextTakeover&&(e.client_no_context_takeover=!0),this._options.serverMaxWindowBits&&(e.server_max_window_bits=this._options.serverMaxWindowBits),this._options.clientMaxWindowBits?e.client_max_window_bits=this._options.clientMaxWindowBits:this._options.clientMaxWindowBits==null&&(e.client_max_window_bits=!0),e}accept(e){return e=this.normalizeParams(e),this.params=this._isServer?this.acceptAsServer(e):this.acceptAsClient(e),this.params}cleanup(){if(this._inflate&&(this._inflate.close(),this._inflate=null),this._deflate){let e=this._deflate[X];this._deflate.close(),this._deflate=null,e&&e(new Error("The deflate stream was closed while data was being processed"))}}acceptAsServer(e){let r=this._options,s=e.find(i=>!(r.serverNoContextTakeover===!1&&i.server_no_context_takeover||i.server_max_window_bits&&(r.serverMaxWindowBits===!1||typeof r.serverMaxWindowBits=="number"&&r.serverMaxWindowBits>i.server_max_window_bits)||typeof r.clientMaxWindowBits=="number"&&!i.client_max_window_bits));if(!s)throw new Error("None of the extension offers can be accepted");return r.serverNoContextTakeover&&(s.server_no_context_takeover=!0),r.clientNoContextTakeover&&(s.client_no_context_takeover=!0),typeof r.serverMaxWindowBits=="number"&&(s.server_max_window_bits=r.serverMaxWindowBits),typeof r.clientMaxWindowBits=="number"?s.client_max_window_bits=r.clientMaxWindowBits:(s.client_max_window_bits===!0||r.clientMaxWindowBits===!1)&&delete s.client_max_window_bits,s}acceptAsClient(e){let r=e[0];if(this._options.clientNoContextTakeover===!1&&r.client_no_context_takeover)throw new Error('Unexpected parameter "client_no_context_takeover"');if(!r.client_max_window_bits)typeof this._options.clientMaxWindowBits=="number"&&(r.client_max_window_bits=this._options.clientMaxWindowBits);else if(this._options.clientMaxWindowBits===!1||typeof this._options.clientMaxWindowBits=="number"&&r.client_max_window_bits>this._options.clientMaxWindowBits)throw new Error('Unexpected or invalid parameter "client_max_window_bits"');return r}normalizeParams(e){return e.forEach(r=>{Object.keys(r).forEach(s=>{let i=r[s];if(i.length>1)throw new Error(`Parameter "${s}" must have only a single value`);if(i=i[0],s==="client_max_window_bits"){if(i!==!0){let n=+i;if(!Number.isInteger(n)||n<8||n>15)throw new TypeError(`Invalid value for parameter "${s}": ${i}`);i=n}else if(!this._isServer)throw new TypeError(`Invalid value for parameter "${s}": ${i}`)}else if(s==="server_max_window_bits"){let n=+i;if(!Number.isInteger(n)||n<8||n>15)throw new TypeError(`Invalid value for parameter "${s}": ${i}`);i=n}else if(s==="client_no_context_takeover"||s==="server_no_context_takeover"){if(i!==!0)throw new TypeError(`Invalid value for parameter "${s}": ${i}`)}else throw new Error(`Unknown parameter "${s}"`);r[s]=i})}),e}decompress(e,r,s){ie.add(i=>{this._decompress(e,r,(n,o)=>{i(),s(n,o)})})}compress(e,r,s){ie.add(i=>{this._compress(e,r,(n,o)=>{i(),s(n,o)})})}_decompress(e,r,s){let i=this._isServer?"client":"server";if(!this._inflate){let n=`${i}_max_window_bits`,o=typeof this.params[n]!="number"?K.Z_DEFAULT_WINDOWBITS:this.params[n];this._inflate=K.createInflateRaw({...this._options.zlibInflateOptions,windowBits:o}),this._inflate[oe]=this,this._inflate[C]=0,this._inflate[P]=[],this._inflate.on("error",gr),this._inflate.on("data",ot)}this._inflate[X]=s,this._inflate.write(e),r&&this._inflate.write(pr),this._inflate.flush(()=>{let n=this._inflate[ne];if(n){this._inflate.close(),this._inflate=null,s(n);return}let o=it.concat(this._inflate[P],this._inflate[C]);this._inflate._readableState.endEmitted?(this._inflate.close(),this._inflate=null):(this._inflate[C]=0,this._inflate[P]=[],r&&this.params[`${i}_no_context_takeover`]&&this._inflate.reset()),s(null,o)})}_compress(e,r,s){let i=this._isServer?"server":"client";if(!this._deflate){let n=`${i}_max_window_bits`,o=typeof this.params[n]!="number"?K.Z_DEFAULT_WINDOWBITS:this.params[n];this._deflate=K.createDeflateRaw({...this._options.zlibDeflateOptions,windowBits:o}),this._deflate[C]=0,this._deflate[P]=[],this._deflate.on("data",mr)}this._deflate[X]=s,this._deflate.write(e),this._deflate.flush(K.Z_SYNC_FLUSH,()=>{if(!this._deflate)return;let n=it.concat(this._deflate[P],this._deflate[C]);r&&(n=new _r(n.buffer,n.byteOffset,n.length-4)),this._deflate[X]=null,this._deflate[C]=0,this._deflate[P]=[],r&&this.params[`${i}_no_context_takeover`]&&this._deflate.reset(),s(null,n)})}};at.exports=ve;function mr(t){this[P].push(t),this[C]+=t.length}function ot(t){if(this[C]+=t.length,this[oe]._maxPayload<1||this[C]<=this[oe]._maxPayload){this[P].push(t);return}this[ne]=new RangeError("Max payload size exceeded"),this[ne].code="WS_ERR_UNSUPPORTED_MESSAGE_LENGTH",this[ne][nt]=1009,this.removeListener("data",ot),this.reset()}function gr(t){this[oe]._inflate=null,t[nt]=1007,this[X](t)}});var F=x((Is,ae)=>{"use strict";var{isUtf8:ft}=m("buffer"),{hasBlob:yr}=T(),Sr=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,1,0,0,1,1,0,1,1,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,1,0];function xr(t){return t>=1e3&&t<=1014&&t!==1004&&t!==1005&&t!==1006||t>=3e3&&t<=4999}function be(t){let e=t.length,r=0;for(;r<e;)if(!(t[r]&128))r++;else if((t[r]&224)===192){if(r+1===e||(t[r+1]&192)!==128||(t[r]&254)===192)return!1;r+=2}else if((t[r]&240)===224){if(r+2>=e||(t[r+1]&192)!==128||(t[r+2]&192)!==128||t[r]===224&&(t[r+1]&224)===128||t[r]===237&&(t[r+1]&224)===160)return!1;r+=3}else if((t[r]&248)===240){if(r+3>=e||(t[r+1]&192)!==128||(t[r+2]&192)!==128||(t[r+3]&192)!==128||t[r]===240&&(t[r+1]&240)===128||t[r]===244&&t[r+1]>143||t[r]>244)return!1;r+=4}else return!1;return!0}function Er(t){return yr&&typeof t=="object"&&typeof t.arrayBuffer=="function"&&typeof t.type=="string"&&typeof t.stream=="function"&&(t[Symbol.toStringTag]==="Blob"||t[Symbol.toStringTag]==="File")}ae.exports={isBlob:Er,isValidStatusCode:xr,isValidUTF8:be,tokenChars:Sr};if(ft)ae.exports.isValidUTF8=function(t){return t.length<24?be(t):ft(t)};else if(!process.env.WS_NO_UTF_8_VALIDATE)try{let t=m("utf-8-validate");ae.exports.isValidUTF8=function(e){return e.length<32?be(e):t(e)}}catch{}});var Ce=x((Us,pt)=>{"use strict";var{Writable:vr}=m("stream"),lt=Z(),{BINARY_TYPES:br,EMPTY_BUFFER:ct,kStatusCode:wr,kWebSocket:Or}=T(),{concat:we,toArrayBuffer:kr,unmask:Tr}=Y(),{isValidStatusCode:Cr,isValidUTF8:ht}=F(),fe=Buffer[Symbol.species],v=0,ut=1,dt=2,_t=3,Oe=4,ke=5,le=6,Te=class extends vr{constructor(e={}){super(),this._allowSynchronousEvents=e.allowSynchronousEvents!==void 0?e.allowSynchronousEvents:!0,this._binaryType=e.binaryType||br[0],this._extensions=e.extensions||{},this._isServer=!!e.isServer,this._maxPayload=e.maxPayload|0,this._skipUTF8Validation=!!e.skipUTF8Validation,this[Or]=void 0,this._bufferedBytes=0,this._buffers=[],this._compressed=!1,this._payloadLength=0,this._mask=void 0,this._fragmented=0,this._masked=!1,this._fin=!1,this._opcode=0,this._totalPayloadLength=0,this._messageLength=0,this._fragments=[],this._errored=!1,this._loop=!1,this._state=v}_write(e,r,s){if(this._opcode===8&&this._state==v)return s();this._bufferedBytes+=e.length,this._buffers.push(e),this.startLoop(s)}consume(e){if(this._bufferedBytes-=e,e===this._buffers[0].length)return this._buffers.shift();if(e<this._buffers[0].length){let s=this._buffers[0];return this._buffers[0]=new fe(s.buffer,s.byteOffset+e,s.length-e),new fe(s.buffer,s.byteOffset,e)}let r=Buffer.allocUnsafe(e);do{let s=this._buffers[0],i=r.length-e;e>=s.length?r.set(this._buffers.shift(),i):(r.set(new Uint8Array(s.buffer,s.byteOffset,e),i),this._buffers[0]=new fe(s.buffer,s.byteOffset+e,s.length-e)),e-=s.length}while(e>0);return r}startLoop(e){this._loop=!0;do switch(this._state){case v:this.getInfo(e);break;case ut:this.getPayloadLength16(e);break;case dt:this.getPayloadLength64(e);break;case _t:this.getMask();break;case Oe:this.getData(e);break;case ke:case le:this._loop=!1;return}while(this._loop);this._errored||e()}getInfo(e){if(this._bufferedBytes<2){this._loop=!1;return}let r=this.consume(2);if(r[0]&48){let i=this.createError(RangeError,"RSV2 and RSV3 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_2_3");e(i);return}let s=(r[0]&64)===64;if(s&&!this._extensions[lt.extensionName]){let i=this.createError(RangeError,"RSV1 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_1");e(i);return}if(this._fin=(r[0]&128)===128,this._opcode=r[0]&15,this._payloadLength=r[1]&127,this._opcode===0){if(s){let i=this.createError(RangeError,"RSV1 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_1");e(i);return}if(!this._fragmented){let i=this.createError(RangeError,"invalid opcode 0",!0,1002,"WS_ERR_INVALID_OPCODE");e(i);return}this._opcode=this._fragmented}else if(this._opcode===1||this._opcode===2){if(this._fragmented){let i=this.createError(RangeError,`invalid opcode ${this._opcode}`,!0,1002,"WS_ERR_INVALID_OPCODE");e(i);return}this._compressed=s}else if(this._opcode>7&&this._opcode<11){if(!this._fin){let i=this.createError(RangeError,"FIN must be set",!0,1002,"WS_ERR_EXPECTED_FIN");e(i);return}if(s){let i=this.createError(RangeError,"RSV1 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_1");e(i);return}if(this._payloadLength>125||this._opcode===8&&this._payloadLength===1){let i=this.createError(RangeError,`invalid payload length ${this._payloadLength}`,!0,1002,"WS_ERR_INVALID_CONTROL_PAYLOAD_LENGTH");e(i);return}}else{let i=this.createError(RangeError,`invalid opcode ${this._opcode}`,!0,1002,"WS_ERR_INVALID_OPCODE");e(i);return}if(!this._fin&&!this._fragmented&&(this._fragmented=this._opcode),this._masked=(r[1]&128)===128,this._isServer){if(!this._masked){let i=this.createError(RangeError,"MASK must be set",!0,1002,"WS_ERR_EXPECTED_MASK");e(i);return}}else if(this._masked){let i=this.createError(RangeError,"MASK must be clear",!0,1002,"WS_ERR_UNEXPECTED_MASK");e(i);return}this._payloadLength===126?this._state=ut:this._payloadLength===127?this._state=dt:this.haveLength(e)}getPayloadLength16(e){if(this._bufferedBytes<2){this._loop=!1;return}this._payloadLength=this.consume(2).readUInt16BE(0),this.haveLength(e)}getPayloadLength64(e){if(this._bufferedBytes<8){this._loop=!1;return}let r=this.consume(8),s=r.readUInt32BE(0);if(s>Math.pow(2,21)-1){let i=this.createError(RangeError,"Unsupported WebSocket frame: payload length > 2^53 - 1",!1,1009,"WS_ERR_UNSUPPORTED_DATA_PAYLOAD_LENGTH");e(i);return}this._payloadLength=s*Math.pow(2,32)+r.readUInt32BE(4),this.haveLength(e)}haveLength(e){if(this._payloadLength&&this._opcode<8&&(this._totalPayloadLength+=this._payloadLength,this._totalPayloadLength>this._maxPayload&&this._maxPayload>0)){let r=this.createError(RangeError,"Max payload size exceeded",!1,1009,"WS_ERR_UNSUPPORTED_MESSAGE_LENGTH");e(r);return}this._masked?this._state=_t:this._state=Oe}getMask(){if(this._bufferedBytes<4){this._loop=!1;return}this._mask=this.consume(4),this._state=Oe}getData(e){let r=ct;if(this._payloadLength){if(this._bufferedBytes<this._payloadLength){this._loop=!1;return}r=this.consume(this._payloadLength),this._masked&&this._mask[0]|this._mask[1]|this._mask[2]|this._mask[3]&&Tr(r,this._mask)}if(this._opcode>7){this.controlMessage(r,e);return}if(this._compressed){this._state=ke,this.decompress(r,e);return}r.length&&(this._messageLength=this._totalPayloadLength,this._fragments.push(r)),this.dataMessage(e)}decompress(e,r){this._extensions[lt.extensionName].decompress(e,this._fin,(i,n)=>{if(i)return r(i);if(n.length){if(this._messageLength+=n.length,this._messageLength>this._maxPayload&&this._maxPayload>0){let o=this.createError(RangeError,"Max payload size exceeded",!1,1009,"WS_ERR_UNSUPPORTED_MESSAGE_LENGTH");r(o);return}this._fragments.push(n)}this.dataMessage(r),this._state===v&&this.startLoop(r)})}dataMessage(e){if(!this._fin){this._state=v;return}let r=this._messageLength,s=this._fragments;if(this._totalPayloadLength=0,this._messageLength=0,this._fragmented=0,this._fragments=[],this._opcode===2){let i;this._binaryType==="nodebuffer"?i=we(s,r):this._binaryType==="arraybuffer"?i=kr(we(s,r)):this._binaryType==="blob"?i=new Blob(s):i=s,this._allowSynchronousEvents?(this.emit("message",i,!0),this._state=v):(this._state=le,setImmediate(()=>{this.emit("message",i,!0),this._state=v,this.startLoop(e)}))}else{let i=we(s,r);if(!this._skipUTF8Validation&&!ht(i)){let n=this.createError(Error,"invalid UTF-8 sequence",!0,1007,"WS_ERR_INVALID_UTF8");e(n);return}this._state===ke||this._allowSynchronousEvents?(this.emit("message",i,!1),this._state=v):(this._state=le,setImmediate(()=>{this.emit("message",i,!1),this._state=v,this.startLoop(e)}))}}controlMessage(e,r){if(this._opcode===8){if(e.length===0)this._loop=!1,this.emit("conclude",1005,ct),this.end();else{let s=e.readUInt16BE(0);if(!Cr(s)){let n=this.createError(RangeError,`invalid status code ${s}`,!0,1002,"WS_ERR_INVALID_CLOSE_CODE");r(n);return}let i=new fe(e.buffer,e.byteOffset+2,e.length-2);if(!this._skipUTF8Validation&&!ht(i)){let n=this.createError(Error,"invalid UTF-8 sequence",!0,1007,"WS_ERR_INVALID_UTF8");r(n);return}this._loop=!1,this.emit("conclude",s,i),this.end()}this._state=v;return}this._allowSynchronousEvents?(this.emit(this._opcode===9?"ping":"pong",e),this._state=v):(this._state=le,setImmediate(()=>{this.emit(this._opcode===9?"ping":"pong",e),this._state=v,this.startLoop(r)}))}createError(e,r,s,i,n){this._loop=!1,this._errored=!0;let o=new e(s?`Invalid WebSocket frame: ${r}`:r);return Error.captureStackTrace(o,this.createError),o.code=n,o[wr]=i,o}};pt.exports=Te});var Pe=x((Ms,yt)=>{"use strict";var{Duplex:Ds}=m("stream"),{randomFillSync:Nr}=m("crypto"),mt=Z(),{EMPTY_BUFFER:Lr,kWebSocket:Pr,NOOP:Br}=T(),{isBlob:G,isValidStatusCode:Rr}=F(),{mask:gt,toBuffer:R}=Y(),b=Symbol("kByteLength"),Ir=Buffer.alloc(4),ce=8*1024,I,q=ce,w=0,Ur=1,Dr=2,Ne=class t{constructor(e,r,s){this._extensions=r||{},s&&(this._generateMask=s,this._maskBuffer=Buffer.alloc(4)),this._socket=e,this._firstFragment=!0,this._compress=!1,this._bufferedBytes=0,this._queue=[],this._state=w,this.onerror=Br,this[Pr]=void 0}static frame(e,r){let s,i=!1,n=2,o=!1;r.mask&&(s=r.maskBuffer||Ir,r.generateMask?r.generateMask(s):(q===ce&&(I===void 0&&(I=Buffer.alloc(ce)),Nr(I,0,ce),q=0),s[0]=I[q++],s[1]=I[q++],s[2]=I[q++],s[3]=I[q++]),o=(s[0]|s[1]|s[2]|s[3])===0,n=6);let f;typeof e=="string"?(!r.mask||o)&&r[b]!==void 0?f=r[b]:(e=Buffer.from(e),f=e.length):(f=e.length,i=r.mask&&r.readOnly&&!o);let l=f;f>=65536?(n+=8,l=127):f>125&&(n+=2,l=126);let a=Buffer.allocUnsafe(i?f+n:n);return a[0]=r.fin?r.opcode|128:r.opcode,r.rsv1&&(a[0]|=64),a[1]=l,l===126?a.writeUInt16BE(f,2):l===127&&(a[2]=a[3]=0,a.writeUIntBE(f,4,6)),r.mask?(a[1]|=128,a[n-4]=s[0],a[n-3]=s[1],a[n-2]=s[2],a[n-1]=s[3],o?[a,e]:i?(gt(e,s,a,n,f),[a]):(gt(e,s,e,0,f),[a,e])):[a,e]}close(e,r,s,i){let n;if(e===void 0)n=Lr;else{if(typeof e!="number"||!Rr(e))throw new TypeError("First argument must be a valid error code number");if(r===void 0||!r.length)n=Buffer.allocUnsafe(2),n.writeUInt16BE(e,0);else{let f=Buffer.byteLength(r);if(f>123)throw new RangeError("The message must not be greater than 123 bytes");n=Buffer.allocUnsafe(2+f),n.writeUInt16BE(e,0),typeof r=="string"?n.write(r,2):n.set(r,2)}}let o={[b]:n.length,fin:!0,generateMask:this._generateMask,mask:s,maskBuffer:this._maskBuffer,opcode:8,readOnly:!1,rsv1:!1};this._state!==w?this.enqueue([this.dispatch,n,!1,o,i]):this.sendFrame(t.frame(n,o),i)}ping(e,r,s){let i,n;if(typeof e=="string"?(i=Buffer.byteLength(e),n=!1):G(e)?(i=e.size,n=!1):(e=R(e),i=e.length,n=R.readOnly),i>125)throw new RangeError("The data size must not be greater than 125 bytes");let o={[b]:i,fin:!0,generateMask:this._generateMask,mask:r,maskBuffer:this._maskBuffer,opcode:9,readOnly:n,rsv1:!1};G(e)?this._state!==w?this.enqueue([this.getBlobData,e,!1,o,s]):this.getBlobData(e,!1,o,s):this._state!==w?this.enqueue([this.dispatch,e,!1,o,s]):this.sendFrame(t.frame(e,o),s)}pong(e,r,s){let i,n;if(typeof e=="string"?(i=Buffer.byteLength(e),n=!1):G(e)?(i=e.size,n=!1):(e=R(e),i=e.length,n=R.readOnly),i>125)throw new RangeError("The data size must not be greater than 125 bytes");let o={[b]:i,fin:!0,generateMask:this._generateMask,mask:r,maskBuffer:this._maskBuffer,opcode:10,readOnly:n,rsv1:!1};G(e)?this._state!==w?this.enqueue([this.getBlobData,e,!1,o,s]):this.getBlobData(e,!1,o,s):this._state!==w?this.enqueue([this.dispatch,e,!1,o,s]):this.sendFrame(t.frame(e,o),s)}send(e,r,s){let i=this._extensions[mt.extensionName],n=r.binary?2:1,o=r.compress,f,l;typeof e=="string"?(f=Buffer.byteLength(e),l=!1):G(e)?(f=e.size,l=!1):(e=R(e),f=e.length,l=R.readOnly),this._firstFragment?(this._firstFragment=!1,o&&i&&i.params[i._isServer?"server_no_context_takeover":"client_no_context_takeover"]&&(o=f>=i._threshold),this._compress=o):(o=!1,n=0),r.fin&&(this._firstFragment=!0);let a={[b]:f,fin:r.fin,generateMask:this._generateMask,mask:r.mask,maskBuffer:this._maskBuffer,opcode:n,readOnly:l,rsv1:o};G(e)?this._state!==w?this.enqueue([this.getBlobData,e,this._compress,a,s]):this.getBlobData(e,this._compress,a,s):this._state!==w?this.enqueue([this.dispatch,e,this._compress,a,s]):this.dispatch(e,this._compress,a,s)}getBlobData(e,r,s,i){this._bufferedBytes+=s[b],this._state=Dr,e.arrayBuffer().then(n=>{if(this._socket.destroyed){let f=new Error("The socket was closed while the blob was being read");process.nextTick(Le,this,f,i);return}this._bufferedBytes-=s[b];let o=R(n);r?this.dispatch(o,r,s,i):(this._state=w,this.sendFrame(t.frame(o,s),i),this.dequeue())}).catch(n=>{process.nextTick(Mr,this,n,i)})}dispatch(e,r,s,i){if(!r){this.sendFrame(t.frame(e,s),i);return}let n=this._extensions[mt.extensionName];this._bufferedBytes+=s[b],this._state=Ur,n.compress(e,s.fin,(o,f)=>{if(this._socket.destroyed){let l=new Error("The socket was closed while data was being compressed");Le(this,l,i);return}this._bufferedBytes-=s[b],this._state=w,s.readOnly=!1,this.sendFrame(t.frame(f,s),i),this.dequeue()})}dequeue(){for(;this._state===w&&this._queue.length;){let e=this._queue.shift();this._bufferedBytes-=e[3][b],Reflect.apply(e[0],this,e.slice(1))}}enqueue(e){this._bufferedBytes+=e[3][b],this._queue.push(e)}sendFrame(e,r){e.length===2?(this._socket.cork(),this._socket.write(e[0]),this._socket.write(e[1],r),this._socket.uncork()):this._socket.write(e[0],r)}};yt.exports=Ne;function Le(t,e,r){typeof r=="function"&&r(e);for(let s=0;s<t._queue.length;s++){let i=t._queue[s],n=i[i.length-1];typeof n=="function"&&n(e)}}function Mr(t,e,r){Le(t,e,r),t.onerror(e)}});var Tt=x((As,kt)=>{"use strict";var{kForOnEventAttribute:J,kListener:Be}=T(),St=Symbol("kCode"),xt=Symbol("kData"),Et=Symbol("kError"),vt=Symbol("kMessage"),bt=Symbol("kReason"),$=Symbol("kTarget"),wt=Symbol("kType"),Ot=Symbol("kWasClean"),N=class{constructor(e){this[$]=null,this[wt]=e}get target(){return this[$]}get type(){return this[wt]}};Object.defineProperty(N.prototype,"target",{enumerable:!0});Object.defineProperty(N.prototype,"type",{enumerable:!0});var U=class extends N{constructor(e,r={}){super(e),this[St]=r.code===void 0?0:r.code,this[bt]=r.reason===void 0?"":r.reason,this[Ot]=r.wasClean===void 0?!1:r.wasClean}get code(){return this[St]}get reason(){return this[bt]}get wasClean(){return this[Ot]}};Object.defineProperty(U.prototype,"code",{enumerable:!0});Object.defineProperty(U.prototype,"reason",{enumerable:!0});Object.defineProperty(U.prototype,"wasClean",{enumerable:!0});var j=class extends N{constructor(e,r={}){super(e),this[Et]=r.error===void 0?null:r.error,this[vt]=r.message===void 0?"":r.message}get error(){return this[Et]}get message(){return this[vt]}};Object.defineProperty(j.prototype,"error",{enumerable:!0});Object.defineProperty(j.prototype,"message",{enumerable:!0});var Q=class extends N{constructor(e,r={}){super(e),this[xt]=r.data===void 0?null:r.data}get data(){return this[xt]}};Object.defineProperty(Q.prototype,"data",{enumerable:!0});var Ar={addEventListener(t,e,r={}){for(let i of this.listeners(t))if(!r[J]&&i[Be]===e&&!i[J])return;let s;if(t==="message")s=function(n,o){let f=new Q("message",{data:o?n:n.toString()});f[$]=this,he(e,this,f)};else if(t==="close")s=function(n,o){let f=new U("close",{code:n,reason:o.toString(),wasClean:this._closeFrameReceived&&this._closeFrameSent});f[$]=this,he(e,this,f)};else if(t==="error")s=function(n){let o=new j("error",{error:n,message:n.message});o[$]=this,he(e,this,o)};else if(t==="open")s=function(){let n=new N("open");n[$]=this,he(e,this,n)};else return;s[J]=!!r[J],s[Be]=e,r.once?this.once(t,s):this.on(t,s)},removeEventListener(t,e){for(let r of this.listeners(t))if(r[Be]===e&&!r[J]){this.removeListener(t,r);break}}};kt.exports={CloseEvent:U,ErrorEvent:j,Event:N,EventTarget:Ar,MessageEvent:Q};function he(t,e,r){typeof t=="object"&&t.handleEvent?t.handleEvent.call(t,r):t.call(e,r)}});var Re=x((Ws,Ct)=>{"use strict";var{tokenChars:ee}=F();function O(t,e,r){t[e]===void 0?t[e]=[r]:t[e].push(r)}function Wr(t){let e=Object.create(null),r=Object.create(null),s=!1,i=!1,n=!1,o,f,l=-1,a=-1,c=-1,h=0;for(;h<t.length;h++)if(a=t.charCodeAt(h),o===void 0)if(c===-1&&ee[a]===1)l===-1&&(l=h);else if(h!==0&&(a===32||a===9))c===-1&&l!==-1&&(c=h);else if(a===59||a===44){if(l===-1)throw new SyntaxError(`Unexpected character at index ${h}`);c===-1&&(c=h);let g=t.slice(l,c);a===44?(O(e,g,r),r=Object.create(null)):o=g,l=c=-1}else throw new SyntaxError(`Unexpected character at index ${h}`);else if(f===void 0)if(c===-1&&ee[a]===1)l===-1&&(l=h);else if(a===32||a===9)c===-1&&l!==-1&&(c=h);else if(a===59||a===44){if(l===-1)throw new SyntaxError(`Unexpected character at index ${h}`);c===-1&&(c=h),O(r,t.slice(l,c),!0),a===44&&(O(e,o,r),r=Object.create(null),o=void 0),l=c=-1}else if(a===61&&l!==-1&&c===-1)f=t.slice(l,h),l=c=-1;else throw new SyntaxError(`Unexpected character at index ${h}`);else if(i){if(ee[a]!==1)throw new SyntaxError(`Unexpected character at index ${h}`);l===-1?l=h:s||(s=!0),i=!1}else if(n)if(ee[a]===1)l===-1&&(l=h);else if(a===34&&l!==-1)n=!1,c=h;else if(a===92)i=!0;else throw new SyntaxError(`Unexpected character at index ${h}`);else if(a===34&&t.charCodeAt(h-1)===61)n=!0;else if(c===-1&&ee[a]===1)l===-1&&(l=h);else if(l!==-1&&(a===32||a===9))c===-1&&(c=h);else if(a===59||a===44){if(l===-1)throw new SyntaxError(`Unexpected character at index ${h}`);c===-1&&(c=h);let g=t.slice(l,c);s&&(g=g.replace(/\\/g,""),s=!1),O(r,f,g),a===44&&(O(e,o,r),r=Object.create(null),o=void 0),f=void 0,l=c=-1}else throw new SyntaxError(`Unexpected character at index ${h}`);if(l===-1||n||a===32||a===9)throw new SyntaxError("Unexpected end of input");c===-1&&(c=h);let _=t.slice(l,c);return o===void 0?O(e,_,r):(f===void 0?O(r,_,!0):s?O(r,f,_.replace(/\\/g,"")):O(r,f,_),O(e,o,r)),e}function Fr(t){return Object.keys(t).map(e=>{let r=t[e];return Array.isArray(r)||(r=[r]),r.map(s=>[e].concat(Object.keys(s).map(i=>{let n=s[i];return Array.isArray(n)||(n=[n]),n.map(o=>o===!0?i:`${i}=${o}`).join("; ")})).join("; ")).join(", ")}).join(", ")}Ct.exports={format:Fr,parse:Wr}});var Ae=x((qs,Ft)=>{"use strict";var Gr=m("events"),qr=m("https"),$r=m("http"),Pt=m("net"),jr=m("tls"),{randomBytes:Vr,createHash:zr}=m("crypto"),{Duplex:Fs,Readable:Gs}=m("stream"),{URL:Ie}=m("url"),B=Z(),Hr=Ce(),Yr=Pe(),{isBlob:Kr}=F(),{BINARY_TYPES:Nt,EMPTY_BUFFER:ue,GUID:Xr,kForOnEventAttribute:Ue,kListener:Zr,kStatusCode:Jr,kWebSocket:y,NOOP:Bt}=T(),{EventTarget:{addEventListener:Qr,removeEventListener:es}}=Tt(),{format:ts,parse:rs}=Re(),{toBuffer:ss}=Y(),is=30*1e3,Rt=Symbol("kAborted"),De=[8,13],L=["CONNECTING","OPEN","CLOSING","CLOSED"],ns=/^[!#$%&'*+\-.0-9A-Z^_`|a-z~]+$/,d=class t extends Gr{constructor(e,r,s){super(),this._binaryType=Nt[0],this._closeCode=1006,this._closeFrameReceived=!1,this._closeFrameSent=!1,this._closeMessage=ue,this._closeTimer=null,this._errorEmitted=!1,this._extensions={},this._paused=!1,this._protocol="",this._readyState=t.CONNECTING,this._receiver=null,this._sender=null,this._socket=null,e!==null?(this._bufferedAmount=0,this._isServer=!1,this._redirects=0,r===void 0?r=[]:Array.isArray(r)||(typeof r=="object"&&r!==null?(s=r,r=[]):r=[r]),It(this,e,r,s)):(this._autoPong=s.autoPong,this._isServer=!0)}get binaryType(){return this._binaryType}set binaryType(e){Nt.includes(e)&&(this._binaryType=e,this._receiver&&(this._receiver._binaryType=e))}get bufferedAmount(){return this._socket?this._socket._writableState.length+this._sender._bufferedBytes:this._bufferedAmount}get extensions(){return Object.keys(this._extensions).join()}get isPaused(){return this._paused}get onclose(){return null}get onerror(){return null}get onopen(){return null}get onmessage(){return null}get protocol(){return this._protocol}get readyState(){return this._readyState}get url(){return this._url}setSocket(e,r,s){let i=new Hr({allowSynchronousEvents:s.allowSynchronousEvents,binaryType:this.binaryType,extensions:this._extensions,isServer:this._isServer,maxPayload:s.maxPayload,skipUTF8Validation:s.skipUTF8Validation}),n=new Yr(e,this._extensions,s.generateMask);this._receiver=i,this._sender=n,this._socket=e,i[y]=this,n[y]=this,e[y]=this,i.on("conclude",fs),i.on("drain",ls),i.on("error",cs),i.on("message",hs),i.on("ping",us),i.on("pong",ds),n.onerror=_s,e.setTimeout&&e.setTimeout(0),e.setNoDelay&&e.setNoDelay(),r.length>0&&e.unshift(r),e.on("close",Mt),e.on("data",_e),e.on("end",At),e.on("error",Wt),this._readyState=t.OPEN,this.emit("open")}emitClose(){if(!this._socket){this._readyState=t.CLOSED,this.emit("close",this._closeCode,this._closeMessage);return}this._extensions[B.extensionName]&&this._extensions[B.extensionName].cleanup(),this._receiver.removeAllListeners(),this._readyState=t.CLOSED,this.emit("close",this._closeCode,this._closeMessage)}close(e,r){if(this.readyState!==t.CLOSED){if(this.readyState===t.CONNECTING){E(this,this._req,"WebSocket was closed before the connection was established");return}if(this.readyState===t.CLOSING){this._closeFrameSent&&(this._closeFrameReceived||this._receiver._writableState.errorEmitted)&&this._socket.end();return}this._readyState=t.CLOSING,this._sender.close(e,r,!this._isServer,s=>{s||(this._closeFrameSent=!0,(this._closeFrameReceived||this._receiver._writableState.errorEmitted)&&this._socket.end())}),Dt(this)}}pause(){this.readyState===t.CONNECTING||this.readyState===t.CLOSED||(this._paused=!0,this._socket.pause())}ping(e,r,s){if(this.readyState===t.CONNECTING)throw new Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof e=="function"?(s=e,e=r=void 0):typeof r=="function"&&(s=r,r=void 0),typeof e=="number"&&(e=e.toString()),this.readyState!==t.OPEN){Me(this,e,s);return}r===void 0&&(r=!this._isServer),this._sender.ping(e||ue,r,s)}pong(e,r,s){if(this.readyState===t.CONNECTING)throw new Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof e=="function"?(s=e,e=r=void 0):typeof r=="function"&&(s=r,r=void 0),typeof e=="number"&&(e=e.toString()),this.readyState!==t.OPEN){Me(this,e,s);return}r===void 0&&(r=!this._isServer),this._sender.pong(e||ue,r,s)}resume(){this.readyState===t.CONNECTING||this.readyState===t.CLOSED||(this._paused=!1,this._receiver._writableState.needDrain||this._socket.resume())}send(e,r,s){if(this.readyState===t.CONNECTING)throw new Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof r=="function"&&(s=r,r={}),typeof e=="number"&&(e=e.toString()),this.readyState!==t.OPEN){Me(this,e,s);return}let i={binary:typeof e!="string",mask:!this._isServer,compress:!0,fin:!0,...r};this._extensions[B.extensionName]||(i.compress=!1),this._sender.send(e||ue,i,s)}terminate(){if(this.readyState!==t.CLOSED){if(this.readyState===t.CONNECTING){E(this,this._req,"WebSocket was closed before the connection was established");return}this._socket&&(this._readyState=t.CLOSING,this._socket.destroy())}}};Object.defineProperty(d,"CONNECTING",{enumerable:!0,value:L.indexOf("CONNECTING")});Object.defineProperty(d.prototype,"CONNECTING",{enumerable:!0,value:L.indexOf("CONNECTING")});Object.defineProperty(d,"OPEN",{enumerable:!0,value:L.indexOf("OPEN")});Object.defineProperty(d.prototype,"OPEN",{enumerable:!0,value:L.indexOf("OPEN")});Object.defineProperty(d,"CLOSING",{enumerable:!0,value:L.indexOf("CLOSING")});Object.defineProperty(d.prototype,"CLOSING",{enumerable:!0,value:L.indexOf("CLOSING")});Object.defineProperty(d,"CLOSED",{enumerable:!0,value:L.indexOf("CLOSED")});Object.defineProperty(d.prototype,"CLOSED",{enumerable:!0,value:L.indexOf("CLOSED")});["binaryType","bufferedAmount","extensions","isPaused","protocol","readyState","url"].forEach(t=>{Object.defineProperty(d.prototype,t,{enumerable:!0})});["open","error","close","message"].forEach(t=>{Object.defineProperty(d.prototype,`on${t}`,{enumerable:!0,get(){for(let e of this.listeners(t))if(e[Ue])return e[Zr];return null},set(e){for(let r of this.listeners(t))if(r[Ue]){this.removeListener(t,r);break}typeof e=="function"&&this.addEventListener(t,e,{[Ue]:!0})}})});d.prototype.addEventListener=Qr;d.prototype.removeEventListener=es;Ft.exports=d;function It(t,e,r,s){let i={allowSynchronousEvents:!0,autoPong:!0,protocolVersion:De[1],maxPayload:104857600,skipUTF8Validation:!1,perMessageDeflate:!0,followRedirects:!1,maxRedirects:10,...s,socketPath:void 0,hostname:void 0,protocol:void 0,timeout:void 0,method:"GET",host:void 0,path:void 0,port:void 0};if(t._autoPong=i.autoPong,!De.includes(i.protocolVersion))throw new RangeError(`Unsupported protocol version: ${i.protocolVersion} (supported versions: ${De.join(", ")})`);let n;if(e instanceof Ie)n=e;else try{n=new Ie(e)}catch{throw new SyntaxError(`Invalid URL: ${e}`)}n.protocol==="http:"?n.protocol="ws:":n.protocol==="https:"&&(n.protocol="wss:"),t._url=n.href;let o=n.protocol==="wss:",f=n.protocol==="ws+unix:",l;if(n.protocol!=="ws:"&&!o&&!f?l=`The URL's protocol must be one of "ws:", "wss:", "http:", "https", or "ws+unix:"`:f&&!n.pathname?l="The URL's pathname is empty":n.hash&&(l="The URL contains a fragment identifier"),l){let u=new SyntaxError(l);if(t._redirects===0)throw u;de(t,u);return}let a=o?443:80,c=Vr(16).toString("base64"),h=o?qr.request:$r.request,_=new Set,g;if(i.createConnection=i.createConnection||(o?as:os),i.defaultPort=i.defaultPort||a,i.port=n.port||a,i.host=n.hostname.startsWith("[")?n.hostname.slice(1,-1):n.hostname,i.headers={...i.headers,"Sec-WebSocket-Version":i.protocolVersion,"Sec-WebSocket-Key":c,Connection:"Upgrade",Upgrade:"websocket"},i.path=n.pathname+n.search,i.timeout=i.handshakeTimeout,i.perMessageDeflate&&(g=new B(i.perMessageDeflate!==!0?i.perMessageDeflate:{},!1,i.maxPayload),i.headers["Sec-WebSocket-Extensions"]=ts({[B.extensionName]:g.offer()})),r.length){for(let u of r){if(typeof u!="string"||!ns.test(u)||_.has(u))throw new SyntaxError("An invalid or duplicated subprotocol was specified");_.add(u)}i.headers["Sec-WebSocket-Protocol"]=r.join(",")}if(i.origin&&(i.protocolVersion<13?i.headers["Sec-WebSocket-Origin"]=i.origin:i.headers.Origin=i.origin),(n.username||n.password)&&(i.auth=`${n.username}:${n.password}`),f){let u=i.path.split(":");i.socketPath=u[0],i.path=u[1]}let p;if(i.followRedirects){if(t._redirects===0){t._originalIpc=f,t._originalSecure=o,t._originalHostOrSocketPath=f?i.socketPath:n.host;let u=s&&s.headers;if(s={...s,headers:{}},u)for(let[S,A]of Object.entries(u))s.headers[S.toLowerCase()]=A}else if(t.listenerCount("redirect")===0){let u=f?t._originalIpc?i.socketPath===t._originalHostOrSocketPath:!1:t._originalIpc?!1:n.host===t._originalHostOrSocketPath;(!u||t._originalSecure&&!o)&&(delete i.headers.authorization,delete i.headers.cookie,u||delete i.headers.host,i.auth=void 0)}i.auth&&!s.headers.authorization&&(s.headers.authorization="Basic "+Buffer.from(i.auth).toString("base64")),p=t._req=h(i),t._redirects&&t.emit("redirect",t.url,p)}else p=t._req=h(i);i.timeout&&p.on("timeout",()=>{E(t,p,"Opening handshake has timed out")}),p.on("error",u=>{p===null||p[Rt]||(p=t._req=null,de(t,u))}),p.on("response",u=>{let S=u.headers.location,A=u.statusCode;if(S&&i.followRedirects&&A>=300&&A<400){if(++t._redirects>i.maxRedirects){E(t,p,"Maximum redirects exceeded");return}p.abort();let V;try{V=new Ie(S,e)}catch{let W=new SyntaxError(`Invalid URL: ${S}`);de(t,W);return}It(t,V,r,s)}else t.emit("unexpected-response",p,u)||E(t,p,`Unexpected server response: ${u.statusCode}`)}),p.on("upgrade",(u,S,A)=>{if(t.emit("upgrade",u),t.readyState!==d.CONNECTING)return;p=t._req=null;let V=u.headers.upgrade;if(V===void 0||V.toLowerCase()!=="websocket"){E(t,S,"Invalid Upgrade header");return}let qe=zr("sha1").update(c+Xr).digest("base64");if(u.headers["sec-websocket-accept"]!==qe){E(t,S,"Invalid Sec-WebSocket-Accept header");return}let W=u.headers["sec-websocket-protocol"],z;if(W!==void 0?_.size?_.has(W)||(z="Server sent an invalid subprotocol"):z="Server sent a subprotocol but none was requested":_.size&&(z="Server sent no subprotocol"),z){E(t,S,z);return}W&&(t._protocol=W);let $e=u.headers["sec-websocket-extensions"];if($e!==void 0){if(!g){E(t,S,"Server sent a Sec-WebSocket-Extensions header but no extension was requested");return}let me;try{me=rs($e)}catch{E(t,S,"Invalid Sec-WebSocket-Extensions header");return}let je=Object.keys(me);if(je.length!==1||je[0]!==B.extensionName){E(t,S,"Server indicated an extension that was not requested");return}try{g.accept(me[B.extensionName])}catch{E(t,S,"Invalid Sec-WebSocket-Extensions header");return}t._extensions[B.extensionName]=g}t.setSocket(S,A,{allowSynchronousEvents:i.allowSynchronousEvents,generateMask:i.generateMask,maxPayload:i.maxPayload,skipUTF8Validation:i.skipUTF8Validation})}),i.finishRequest?i.finishRequest(p,t):p.end()}function de(t,e){t._readyState=d.CLOSING,t._errorEmitted=!0,t.emit("error",e),t.emitClose()}function os(t){return t.path=t.socketPath,Pt.connect(t)}function as(t){return t.path=void 0,!t.servername&&t.servername!==""&&(t.servername=Pt.isIP(t.host)?"":t.host),jr.connect(t)}function E(t,e,r){t._readyState=d.CLOSING;let s=new Error(r);Error.captureStackTrace(s,E),e.setHeader?(e[Rt]=!0,e.abort(),e.socket&&!e.socket.destroyed&&e.socket.destroy(),process.nextTick(de,t,s)):(e.destroy(s),e.once("error",t.emit.bind(t,"error")),e.once("close",t.emitClose.bind(t)))}function Me(t,e,r){if(e){let s=Kr(e)?e.size:ss(e).length;t._socket?t._sender._bufferedBytes+=s:t._bufferedAmount+=s}if(r){let s=new Error(`WebSocket is not open: readyState ${t.readyState} (${L[t.readyState]})`);process.nextTick(r,s)}}function fs(t,e){let r=this[y];r._closeFrameReceived=!0,r._closeMessage=e,r._closeCode=t,r._socket[y]!==void 0&&(r._socket.removeListener("data",_e),process.nextTick(Ut,r._socket),t===1005?r.close():r.close(t,e))}function ls(){let t=this[y];t.isPaused||t._socket.resume()}function cs(t){let e=this[y];e._socket[y]!==void 0&&(e._socket.removeListener("data",_e),process.nextTick(Ut,e._socket),e.close(t[Jr])),e._errorEmitted||(e._errorEmitted=!0,e.emit("error",t))}function Lt(){this[y].emitClose()}function hs(t,e){this[y].emit("message",t,e)}function us(t){let e=this[y];e._autoPong&&e.pong(t,!this._isServer,Bt),e.emit("ping",t)}function ds(t){this[y].emit("pong",t)}function Ut(t){t.resume()}function _s(t){let e=this[y];e.readyState!==d.CLOSED&&(e.readyState===d.OPEN&&(e._readyState=d.CLOSING,Dt(e)),this._socket.end(),e._errorEmitted||(e._errorEmitted=!0,e.emit("error",t)))}function Dt(t){t._closeTimer=setTimeout(t._socket.destroy.bind(t._socket),is)}function Mt(){let t=this[y];this.removeListener("close",Mt),this.removeListener("data",_e),this.removeListener("end",At),t._readyState=d.CLOSING;let e;!this._readableState.endEmitted&&!t._closeFrameReceived&&!t._receiver._writableState.errorEmitted&&(e=t._socket.read())!==null&&t._receiver.write(e),t._receiver.end(),this[y]=void 0,clearTimeout(t._closeTimer),t._receiver._writableState.finished||t._receiver._writableState.errorEmitted?t.emitClose():(t._receiver.on("error",Lt),t._receiver.on("finish",Lt))}function _e(t){this[y]._receiver.write(t)||this.pause()}function At(){let t=this[y];t._readyState=d.CLOSING,t._receiver.end(),this.end()}function Wt(){let t=this[y];this.removeListener("error",Wt),this.on("error",Bt),t&&(t._readyState=d.CLOSING,this.destroy())}});var qt=x(($s,Gt)=>{"use strict";var{tokenChars:ps}=F();function ms(t){let e=new Set,r=-1,s=-1,i=0;for(i;i<t.length;i++){let o=t.charCodeAt(i);if(s===-1&&ps[o]===1)r===-1&&(r=i);else if(i!==0&&(o===32||o===9))s===-1&&r!==-1&&(s=i);else if(o===44){if(r===-1)throw new SyntaxError(`Unexpected character at index ${i}`);s===-1&&(s=i);let f=t.slice(r,s);if(e.has(f))throw new SyntaxError(`The "${f}" subprotocol is duplicated`);e.add(f),r=s=-1}else throw new SyntaxError(`Unexpected character at index ${i}`)}if(r===-1||s!==-1)throw new SyntaxError("Unexpected end of input");let n=t.slice(r,i);if(e.has(n))throw new SyntaxError(`The "${n}" subprotocol is duplicated`);return e.add(n),e}Gt.exports={parse:ms}});var Kt=x((Vs,Yt)=>{"use strict";var gs=m("events"),pe=m("http"),{Duplex:js}=m("stream"),{createHash:ys}=m("crypto"),$t=Re(),D=Z(),Ss=qt(),xs=Ae(),{GUID:Es,kWebSocket:vs}=T(),bs=/^[+/0-9A-Za-z]{22}==$/,jt=0,Vt=1,Ht=2,We=class extends gs{constructor(e,r){if(super(),e={allowSynchronousEvents:!0,autoPong:!0,maxPayload:100*1024*1024,skipUTF8Validation:!1,perMessageDeflate:!1,handleProtocols:null,clientTracking:!0,verifyClient:null,noServer:!1,backlog:null,server:null,host:null,path:null,port:null,WebSocket:xs,...e},e.port==null&&!e.server&&!e.noServer||e.port!=null&&(e.server||e.noServer)||e.server&&e.noServer)throw new TypeError('One and only one of the "port", "server", or "noServer" options must be specified');if(e.port!=null?(this._server=pe.createServer((s,i)=>{let n=pe.STATUS_CODES[426];i.writeHead(426,{"Content-Length":n.length,"Content-Type":"text/plain"}),i.end(n)}),this._server.listen(e.port,e.host,e.backlog,r)):e.server&&(this._server=e.server),this._server){let s=this.emit.bind(this,"connection");this._removeListeners=ws(this._server,{listening:this.emit.bind(this,"listening"),error:this.emit.bind(this,"error"),upgrade:(i,n,o)=>{this.handleUpgrade(i,n,o,s)}})}e.perMessageDeflate===!0&&(e.perMessageDeflate={}),e.clientTracking&&(this.clients=new Set,this._shouldEmitClose=!1),this.options=e,this._state=jt}address(){if(this.options.noServer)throw new Error('The server is operating in "noServer" mode');return this._server?this._server.address():null}close(e){if(this._state===Ht){e&&this.once("close",()=>{e(new Error("The server is not running"))}),process.nextTick(te,this);return}if(e&&this.once("close",e),this._state!==Vt)if(this._state=Vt,this.options.noServer||this.options.server)this._server&&(this._removeListeners(),this._removeListeners=this._server=null),this.clients?this.clients.size?this._shouldEmitClose=!0:process.nextTick(te,this):process.nextTick(te,this);else{let r=this._server;this._removeListeners(),this._removeListeners=this._server=null,r.close(()=>{te(this)})}}shouldHandle(e){if(this.options.path){let r=e.url.indexOf("?");if((r!==-1?e.url.slice(0,r):e.url)!==this.options.path)return!1}return!0}handleUpgrade(e,r,s,i){r.on("error",zt);let n=e.headers["sec-websocket-key"],o=e.headers.upgrade,f=+e.headers["sec-websocket-version"];if(e.method!=="GET"){M(this,e,r,405,"Invalid HTTP method");return}if(o===void 0||o.toLowerCase()!=="websocket"){M(this,e,r,400,"Invalid Upgrade header");return}if(n===void 0||!bs.test(n)){M(this,e,r,400,"Missing or invalid Sec-WebSocket-Key header");return}if(f!==8&&f!==13){M(this,e,r,400,"Missing or invalid Sec-WebSocket-Version header");return}if(!this.shouldHandle(e)){re(r,400);return}let l=e.headers["sec-websocket-protocol"],a=new Set;if(l!==void 0)try{a=Ss.parse(l)}catch{M(this,e,r,400,"Invalid Sec-WebSocket-Protocol header");return}let c=e.headers["sec-websocket-extensions"],h={};if(this.options.perMessageDeflate&&c!==void 0){let _=new D(this.options.perMessageDeflate,!0,this.options.maxPayload);try{let g=$t.parse(c);g[D.extensionName]&&(_.accept(g[D.extensionName]),h[D.extensionName]=_)}catch{M(this,e,r,400,"Invalid or unacceptable Sec-WebSocket-Extensions header");return}}if(this.options.verifyClient){let _={origin:e.headers[`${f===8?"sec-websocket-origin":"origin"}`],secure:!!(e.socket.authorized||e.socket.encrypted),req:e};if(this.options.verifyClient.length===2){this.options.verifyClient(_,(g,p,u,S)=>{if(!g)return re(r,p||401,u,S);this.completeUpgrade(h,n,a,e,r,s,i)});return}if(!this.options.verifyClient(_))return re(r,401)}this.completeUpgrade(h,n,a,e,r,s,i)}completeUpgrade(e,r,s,i,n,o,f){if(!n.readable||!n.writable)return n.destroy();if(n[vs])throw new Error("server.handleUpgrade() was called more than once with the same socket, possibly due to a misconfiguration");if(this._state>jt)return re(n,503);let a=["HTTP/1.1 101 Switching Protocols","Upgrade: websocket","Connection: Upgrade",`Sec-WebSocket-Accept: ${ys("sha1").update(r+Es).digest("base64")}`],c=new this.options.WebSocket(null,void 0,this.options);if(s.size){let h=this.options.handleProtocols?this.options.handleProtocols(s,i):s.values().next().value;h&&(a.push(`Sec-WebSocket-Protocol: ${h}`),c._protocol=h)}if(e[D.extensionName]){let h=e[D.extensionName].params,_=$t.format({[D.extensionName]:[h]});a.push(`Sec-WebSocket-Extensions: ${_}`),c._extensions=e}this.emit("headers",a,i),n.write(a.concat(`\r
2
2
  `).join(`\r
3
- `)),n.removeListener("error",Mt),h.setSocket(n,o,{allowSynchronousEvents:this.options.allowSynchronousEvents,maxPayload:this.options.maxPayload,skipUTF8Validation:this.options.skipUTF8Validation}),this.clients&&(this.clients.add(h),h.on("close",()=>{this.clients.delete(h),this._shouldEmitClose&&!this.clients.size&&process.nextTick(X,this)})),f(h,s)}};Wt.exports=Ie;function ns(t,e){for(let r of Object.keys(e))t.on(r,e[r]);return function(){for(let i of Object.keys(e))t.removeListener(i,e[i])}}function X(t){t._state=Dt,t.emit("close")}function Mt(){this.destroy()}function Z(t,e,r,i){r=r||ce.STATUS_CODES[e],i={Connection:"close","Content-Type":"text/html","Content-Length":Buffer.byteLength(r),...i},t.once("finish",t.destroy),t.end(`HTTP/1.1 ${e} ${ce.STATUS_CODES[e]}\r
4
- `+Object.keys(i).map(s=>`${s}: ${i[s]}`).join(`\r
3
+ `)),n.removeListener("error",zt),c.setSocket(n,o,{allowSynchronousEvents:this.options.allowSynchronousEvents,maxPayload:this.options.maxPayload,skipUTF8Validation:this.options.skipUTF8Validation}),this.clients&&(this.clients.add(c),c.on("close",()=>{this.clients.delete(c),this._shouldEmitClose&&!this.clients.size&&process.nextTick(te,this)})),f(c,i)}};Yt.exports=We;function ws(t,e){for(let r of Object.keys(e))t.on(r,e[r]);return function(){for(let s of Object.keys(e))t.removeListener(s,e[s])}}function te(t){t._state=Ht,t.emit("close")}function zt(){this.destroy()}function re(t,e,r,s){r=r||pe.STATUS_CODES[e],s={Connection:"close","Content-Type":"text/html","Content-Length":Buffer.byteLength(r),...s},t.once("finish",t.destroy),t.end(`HTTP/1.1 ${e} ${pe.STATUS_CODES[e]}\r
4
+ `+Object.keys(s).map(i=>`${i}: ${s[i]}`).join(`\r
5
5
  `)+`\r
6
6
  \r
7
- `+r)}function B(t,e,r,i,s){if(t.listenerCount("wsClientError")){let n=new Error(s);Error.captureStackTrace(n,B),t.emit("wsClientError",n,r,e)}else Z(r,i,s)}});import O from"process";var os=G($e(),1),as=G(be(),1),fs=G(Oe(),1),Ft=G(Re(),1),Gt=G(At(),1);var $t=Ft.default;function qt({merkurConfig:t}){let{protocol:e,host:r}=t.socketServer;return new $t(`${e}//${r}`)}var Ue,Be;function Rs(){return O.env.CLI_CONFIG&&!Ue&&(Ue=JSON.parse(O.env.CLI_CONFIG)),O.env.MERKUR_CONFIG&&!Be&&(Be=JSON.parse(O.env.MERKUR_CONFIG)),{merkurConfig:Be,cliConfig:Ue}}function Is({merkurConfig:t,cliConfig:e}){function r(){let i=qt({merkurConfig:t});i.on("error",s=>{console.error(s),i.terminate()}),i.on("open",function(){setTimeout(()=>{i.send(JSON.stringify({to:"browser",command:"reload",changed:[],errors:[]})),i.terminate()},50)})}if(e.watch){r();let i=()=>O.exit(0);O.on("SIGINT",i),O.on("SIGQUIT",i),O.on("SIGTERM",i),O.on("uncaughtException",()=>{r()}),O.on("unhandledRejection",()=>{r()})}}export{Is as autoReload,Rs as resolveConfig};
7
+ `+r)}function M(t,e,r,s,i){if(t.listenerCount("wsClientError")){let n=new Error(i);Error.captureStackTrace(n,M),t.emit("wsClientError",n,r,e)}else re(r,s,i)}});import k from"process";var Os=H(Ke(),1),ks=H(Ce(),1),Ts=H(Pe(),1),Xt=H(Ae(),1),Zt=H(Kt(),1);var Jt=Xt.default;function Qt({merkurConfig:t}){let{protocol:e,host:r}=t.socketServer;return new Jt(`${e}//${r}`)}var Fe,Ge;function Zs(){return k.env.CLI_CONFIG&&!Fe&&(Fe=JSON.parse(k.env.CLI_CONFIG)),k.env.MERKUR_CONFIG&&!Ge&&(Ge=JSON.parse(k.env.MERKUR_CONFIG)),{merkurConfig:Ge,cliConfig:Fe}}function Js({merkurConfig:t,cliConfig:e}){function r(){let s=Qt({merkurConfig:t});s.on("error",i=>{console.error(i),s.terminate()}),s.on("open",function(){setTimeout(()=>{s.send(JSON.stringify({to:"browser",command:"reload",changed:[],errors:[]})),s.terminate()},50)})}if(e.watch){r();let s=()=>k.exit(0);k.on("SIGINT",s),k.on("SIGQUIT",s),k.on("SIGTERM",s),k.on("uncaughtException",()=>{r()}),k.on("unhandledRejection",()=>{r()})}}export{Js as autoReload,Zs as resolveConfig};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@merkur/cli",
3
- "version": "0.36.4",
3
+ "version": "0.37.0",
4
4
  "description": "Merkur is tiny and extensible library for creating front-end microservices.",
5
5
  "bin": {
6
6
  "merkur": "./bin/merkur.mjs"
@@ -47,6 +47,7 @@
47
47
  "dependencies": {
48
48
  "@esmj/emitter": "^0.4.1",
49
49
  "@esmj/observable": "^0.1.1",
50
+ "@types/cors": "^2.8.17",
50
51
  "chalk": "^5.3.0",
51
52
  "commander": "^12.0.0",
52
53
  "compression": "^1.7.4",
@@ -66,5 +67,5 @@
66
67
  "engines": {
67
68
  "node": ">=20"
68
69
  },
69
- "gitHead": "d980d225d1aea2186663940f0a984dafa1232c21"
70
+ "gitHead": "af826493e5ed4b37602dd43ce89a59baeeb1bada"
70
71
  }
package/src/CLIConfig.mjs CHANGED
@@ -10,9 +10,10 @@ export async function createCLIConfig({ args, command } = {}) {
10
10
  command: command ?? 'unknown',
11
11
  watch: args?.watch ?? !isProduction,
12
12
  writeToDisk: args?.writeToDisk ?? isProduction,
13
+ sourcemap: args?.sourcemap ?? !isProduction,
13
14
  outFile: args?.outFile ?? './build/widget.cjs',
14
15
  port: args?.port ?? 4444,
15
- runTask: args?.runTask ?? [],
16
+ runTasks: args?.runTasks ?? [],
16
17
  devServerPort: args?.devServerPort ?? 4445,
17
18
  projectFolder: args?.projectFolder ?? process.cwd(),
18
19
  cliFolder: import.meta.dirname,
@@ -22,6 +23,7 @@ export async function createCLIConfig({ args, command } = {}) {
22
23
  hasRunDevServer: args?.hasRunDevServer ?? false,
23
24
  hasRunWidgetServer: args?.hasRunWidgetServer ?? false,
24
25
  inspect: args.inspect ?? false,
26
+ analyze: args.analyze ?? false,
25
27
  verbose: args.verbose ?? false,
26
28
  };
27
29
  }
@@ -1,10 +1,13 @@
1
1
  import { readdir } from 'node:fs/promises';
2
+ import path from 'node:path';
2
3
 
3
4
  import manifestPlugin from 'esbuild-plugin-manifest';
4
5
 
5
6
  import { EMITTER_EVENTS, emitter, RESULT_KEY } from './emitter.mjs';
7
+ import { aliasPlugin } from './plugins/aliasPlugin.mjs';
6
8
  import { memoryStaticPlugin } from './plugins/memoryStaticPlugin.mjs';
7
9
  import { metaPlugin } from './plugins/metaPlugin.mjs';
10
+ import { excludeVendorsFromSourceMapPlugin } from './plugins/excludeVendorsFromSourceMapPlugin.mjs';
8
11
 
9
12
  export async function createBuildConfig({
10
13
  definition,
@@ -13,7 +16,7 @@ export async function createBuildConfig({
13
16
  cliConfig,
14
17
  context,
15
18
  }) {
16
- const { isServer, writeToDisk } = config;
19
+ const { isServer, writeToDisk, sourcemap, analyze } = config;
17
20
  const { isProduction, outFile, staticFolder, projectFolder } = cliConfig;
18
21
 
19
22
  const entries = await getEntries({ merkurConfig, cliConfig });
@@ -23,12 +26,13 @@ export async function createBuildConfig({
23
26
  entryPoints: isServer ? entries.server : entries.client,
24
27
  bundle: true,
25
28
  treeShaking: isProduction,
26
- sourcemap: true,
29
+ sourcemap,
27
30
  minify: isProduction,
28
31
  target: 'es2022',
29
32
  write: writeToDisk,
30
33
  entryNames: isServer || !isProduction ? 'widget' : 'widget.[hash]',
31
34
  format: isServer ? 'cjs' : 'iife',
35
+ metafile: analyze,
32
36
  mainFields: isServer ? ['module', 'main'] : ['browser', 'module', 'main'],
33
37
 
34
38
  //@TODO map right versions
@@ -38,7 +42,7 @@ export async function createBuildConfig({
38
42
 
39
43
  // Alias
40
44
  alias: {
41
- '@widget': `${projectFolder}/src/widget.js`,
45
+ '@widget': path.resolve(`${projectFolder}/src/widget.js`),
42
46
  ...definition.build.alias,
43
47
  },
44
48
 
@@ -47,6 +51,7 @@ export async function createBuildConfig({
47
51
  !isServer &&
48
52
  manifestPlugin({
49
53
  shortNames: true,
54
+ append: true,
50
55
  generate: (manifest) => {
51
56
  return Object.keys(manifest).reduce((result, originalKey) => {
52
57
  const key = originalKey
@@ -59,7 +64,9 @@ export async function createBuildConfig({
59
64
  }, {});
60
65
  },
61
66
  }),
67
+ aliasPlugin,
62
68
  !writeToDisk && memoryStaticPlugin,
69
+ sourcemap && excludeVendorsFromSourceMapPlugin,
63
70
  metaPlugin,
64
71
  ...(definition.build?.plugins ?? []),
65
72
  ]
@@ -88,14 +95,16 @@ async function getEntries({ merkurConfig, cliConfig }) {
88
95
  };
89
96
 
90
97
  try {
91
- const files = await readdir(`${cliConfig.projectFolder}/src/entries/`);
98
+ const files = await readdir(
99
+ path.resolve(`${cliConfig.projectFolder}/src/entries/`),
100
+ );
92
101
  const FILENAMES = ['client', 'server'];
93
102
 
94
103
  files.forEach((file) => {
95
104
  FILENAMES.forEach((filename) => {
96
105
  if (file.startsWith(filename)) {
97
106
  entries[filename] = [
98
- `${cliConfig.projectFolder}/src/entries/${file}`,
107
+ path.resolve(`${cliConfig.projectFolder}/src/entries/${file}`),
99
108
  ];
100
109
  }
101
110
  });
@@ -3,4 +3,5 @@ export const COMMAND_NAME = {
3
3
  DEV: 'dev',
4
4
  BUILD: 'build',
5
5
  TEST: 'test',
6
+ CUSTOM: 'custom',
6
7
  };
@@ -0,0 +1,63 @@
1
+ import fs from 'node:fs/promises';
2
+ import path from 'node:path';
3
+
4
+ import chalk from 'chalk';
5
+
6
+ import { createCLIConfig } from '../CLIConfig.mjs';
7
+ import { createContext } from '../context.mjs';
8
+ import { createLogger } from '../logger.mjs';
9
+ import { createMerkurConfig } from '../merkurConfig.mjs';
10
+ import { handleExit } from '../handleExit.mjs';
11
+
12
+ export const CUSTOM_PART = {
13
+ PLAYGROUND_BODY: 'playground:body',
14
+ PLAYGROUND_FOOTER: 'playground:footer',
15
+ };
16
+
17
+ export async function custom({ args, command }) {
18
+ const context = await createContext();
19
+ let baseCliConfig = await createCLIConfig({ args, command });
20
+
21
+ const { merkurConfig, cliConfig } = await createMerkurConfig({
22
+ args,
23
+ cliConfig: baseCliConfig,
24
+ context,
25
+ });
26
+
27
+ const logger = createLogger('Custom command:', cliConfig);
28
+
29
+ await handleExit({ context });
30
+
31
+ let file = null;
32
+
33
+ switch (args.part) {
34
+ case CUSTOM_PART.PLAYGROUND_BODY: {
35
+ file = 'body.ejs';
36
+ break;
37
+ }
38
+ case CUSTOM_PART.PLAYGROUND_FOOTER: {
39
+ file = 'footer.ejs';
40
+ break;
41
+ }
42
+ }
43
+
44
+ if (file) {
45
+ const src = path.resolve(
46
+ `${merkurConfig.playground.templateFolder}/${file}`,
47
+ );
48
+ const dest = path.resolve(
49
+ `${merkurConfig.playground.serverTemplateFolder}/${file}`,
50
+ );
51
+ const dirFolder = path.dirname(dest);
52
+
53
+ logger.debug(`Create directory ${dirFolder}`);
54
+ await fs.mkdir(dirFolder, { recursive: true });
55
+
56
+ logger.debug(`Copy file from ${src} to ${dest}`);
57
+ await fs.copyFile(src, dest);
58
+
59
+ logger.info(`You can customize ${chalk.green(dest)} file.`);
60
+ } else {
61
+ logger.warn(`You define unknown part ${args.part}`);
62
+ }
63
+ }
@@ -9,7 +9,7 @@ import { createLogger } from '../logger.mjs';
9
9
  import { createMerkurConfig } from '../merkurConfig.mjs';
10
10
  import { handleExit } from '../handleExit.mjs';
11
11
 
12
- export async function test({ args, command }) {
12
+ export async function test({ args, commandArgs, command }) {
13
13
  const context = await createContext();
14
14
  let baseCliConfig = await createCLIConfig({ args, command });
15
15
 
@@ -22,10 +22,10 @@ export async function test({ args, command }) {
22
22
 
23
23
  await handleExit({ context });
24
24
 
25
- args.unshift('./jest.config.js');
26
- args.unshift('-c');
25
+ commandArgs.unshift('./jest.config.js');
26
+ commandArgs.unshift('-c');
27
27
 
28
- const runner = spawn('jest', args, {
28
+ const runner = spawn('jest', commandArgs, {
29
29
  env: {
30
30
  ...process.env,
31
31
  PATH: npmRunPath(),
@@ -37,7 +37,7 @@ export async function test({ args, command }) {
37
37
  });
38
38
 
39
39
  runner.on('spawn', () => {
40
- logger.debug(`Run test runner ${args.join(', ')}`);
40
+ logger.debug(`Run test runner ${commandArgs.join(', ')}`);
41
41
  });
42
42
  runner.on('exit', (code, signal) => {
43
43
  logger.info(`child process exited with code ${code} and signal ${signal}`);
package/src/devServer.mjs CHANGED
@@ -26,10 +26,11 @@ export async function runDevServer({ context, merkurConfig, cliConfig }) {
26
26
  const {
27
27
  template,
28
28
  templateFolder,
29
+ serverTemplateFolder,
29
30
  path: playgroundPath,
30
31
  widgetHandler,
31
32
  } = merkurConfig.playground;
32
- const { cliFolder, projectFolder, command, writeToDisk } = cliConfig;
33
+ const { cliFolder, command, writeToDisk } = cliConfig;
33
34
 
34
35
  return new Promise((resolve, reject) => {
35
36
  const app = express();
@@ -116,14 +117,17 @@ export async function runDevServer({ context, merkurConfig, cliConfig }) {
116
117
  }
117
118
 
118
119
  const devClient = isDevCommand
119
- ? fs.readFileSync(`${cliFolder}/../lib/devClient.mjs`, 'utf8')
120
+ ? fs.readFileSync(
121
+ path.resolve(`${cliFolder}/../lib/devClient.mjs`),
122
+ 'utf8',
123
+ )
120
124
  : '';
121
125
 
122
126
  const playgroundTemplate = ejs.compile(
123
127
  fs.readFileSync(template, 'utf8'),
124
128
  {
125
129
  views: [
126
- `${projectFolder}/server/playground/templates/`,
130
+ serverTemplateFolder,
127
131
  path.dirname(template),
128
132
  templateFolder,
129
133
  ],
@@ -172,7 +176,7 @@ export async function runDevServer({ context, merkurConfig, cliConfig }) {
172
176
  },
173
177
  });
174
178
  })
175
- .listen({ port, host: merkurConfig.constant.HOST }, () => {
179
+ .listen({ port }, () => {
176
180
  logger.info(`Playground: ${chalk.green(`${protocol}//${host}`)}`);
177
181
  resolve(app);
178
182
  });
@@ -16,10 +16,12 @@ export async function createMerkurConfig({ cliConfig, context, args } = {}) {
16
16
 
17
17
  try {
18
18
  logger.debug(
19
- `Load merkur config on path ${projectFolder}/${MERKUR_CONFIG_FILE}`,
19
+ `Load merkur config on path ${path.resolve(`${projectFolder}/${MERKUR_CONFIG_FILE}`)}`,
20
20
  );
21
21
 
22
- const file = await import(`${projectFolder}/${MERKUR_CONFIG_FILE}`);
22
+ const file = await import(
23
+ path.resolve(`${projectFolder}/${MERKUR_CONFIG_FILE}`)
24
+ );
23
25
  merkurConfig = await file.default({
24
26
  cliConfig,
25
27
  context,
@@ -28,6 +30,7 @@ export async function createMerkurConfig({ cliConfig, context, args } = {}) {
28
30
  });
29
31
  } catch (error) {
30
32
  logger.error(error);
33
+ process.exit(1);
31
34
  }
32
35
 
33
36
  cliConfig = { ...cliConfig, ...(merkurConfig?.cliConfig ?? {}), ...args };
@@ -84,7 +87,7 @@ async function registerHooks({ merkurConfig }) {
84
87
  emitter.on(
85
88
  EMITTER_EVENTS.MERKUR_CONFIG,
86
89
  function defaultTask({ merkurConfig, cliConfig }) {
87
- const { staticFolder, runTask } = cliConfig;
90
+ const { staticFolder, runTasks } = cliConfig;
88
91
 
89
92
  merkurConfig.task = merkurConfig.task ?? {};
90
93
 
@@ -94,22 +97,25 @@ emitter.on(
94
97
  build: {
95
98
  platform: 'node',
96
99
  write: true,
100
+ metafile: false,
97
101
  },
98
102
  },
99
103
  es13: {
100
104
  name: 'es13',
105
+ folder: 'es13',
101
106
  build: {
102
107
  platform: 'browser',
103
- outdir: `${staticFolder}/es13`,
108
+ outdir: path.resolve(`${staticFolder}/es13`),
104
109
  plugins: [devPlugin],
105
110
  },
106
111
  },
107
112
  es9: {
108
113
  name: 'es9',
114
+ folder: 'es9',
109
115
  build: {
110
116
  platform: 'browser',
111
117
  target: 'es2018',
112
- outdir: `${staticFolder}/es9`,
118
+ outdir: path.resolve(`${staticFolder}/es9`),
113
119
  },
114
120
  },
115
121
  };
@@ -128,9 +134,9 @@ emitter.on(
128
134
  );
129
135
  });
130
136
 
131
- if (runTask.length !== 0) {
137
+ if (runTasks.length !== 0) {
132
138
  Object.keys(merkurConfig.task)
133
- .filter((taskName) => !runTask.includes(taskName))
139
+ .filter((taskName) => !runTasks.includes(taskName))
134
140
  .forEach((taskKey) => {
135
141
  delete merkurConfig.task[taskKey];
136
142
  });
@@ -170,8 +176,12 @@ emitter.on(
170
176
  EMITTER_EVENTS.MERKUR_CONFIG,
171
177
  function defaultEntries({ merkurConfig, cliConfig }) {
172
178
  merkurConfig.defaultEntries = {
173
- client: [`${cliConfig.projectFolder}/src/entries/client.js`],
174
- server: [`${cliConfig.projectFolder}/src/entries/server.js`],
179
+ client: [
180
+ path.resolve(`${cliConfig.projectFolder}/src/entries/client.js`),
181
+ ],
182
+ server: [
183
+ path.resolve(`${cliConfig.projectFolder}/src/entries/server.js`),
184
+ ],
175
185
  ...merkurConfig.defaultEntries,
176
186
  };
177
187
 
@@ -183,8 +193,11 @@ emitter.on(
183
193
  EMITTER_EVENTS.MERKUR_CONFIG,
184
194
  function playground({ merkurConfig, cliConfig }) {
185
195
  merkurConfig.playground = {
186
- template: `${cliConfig.cliFolder}/templates/playground.ejs`,
187
- templateFolder: `${cliConfig.cliFolder}/templates`,
196
+ template: path.resolve(`${cliConfig.cliFolder}/templates/playground.ejs`),
197
+ templateFolder: path.resolve(`${cliConfig.cliFolder}/templates`),
198
+ serverTemplateFolder: path.resolve(
199
+ `${cliConfig.projectFolder}/server/playground/templates`,
200
+ ),
188
201
  path: '/',
189
202
  widgetHandler: async (req) => {
190
203
  const { protocol, host } = merkurConfig.widgetServer;
@@ -243,6 +256,17 @@ emitter.on(
243
256
  buildFolder: path.resolve(cliConfig.projectFolder, cliConfig.buildFolder),
244
257
  clusters: cliConfig.command === COMMAND_NAME.DEV ? 0 : 3,
245
258
  ...merkurConfig.widgetServer,
259
+ cors: {
260
+ options: {
261
+ origin: [
262
+ new RegExp('^https?://localhost(:[0-9]+)?$'),
263
+ new RegExp('^https?://127\\.0\\.0\\.1(:[0-9]+)?$'),
264
+ ],
265
+ methods: ['GET', 'HEAD', 'PUT', 'PATCH', 'POST', 'DELETE', 'OPTIONS'],
266
+ optionsSuccessStatus: 200,
267
+ ...merkurConfig.widgetServer?.cors?.options,
268
+ },
269
+ },
246
270
  };
247
271
 
248
272
  const { origin, host, protocol } = merkurConfig.widgetServer;