@rsbuild/core 0.1.1 → 0.1.2

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.
@@ -0,0 +1,410 @@
1
+ /// <reference types="node" />
2
+
3
+ import { EventEmitter } from 'events';
4
+ import {
5
+ Agent,
6
+ ClientRequest,
7
+ ClientRequestArgs,
8
+ IncomingMessage,
9
+ OutgoingHttpHeaders,
10
+ Server as HTTPServer,
11
+ } from "http";
12
+ import { Server as HTTPSServer } from 'https';
13
+ import { Duplex, DuplexOptions } from 'stream';
14
+ import { SecureContextOptions } from 'tls';
15
+ import { URL } from 'url';
16
+ import { ZlibOptions } from 'zlib';
17
+
18
+ // can not get all overload of BufferConstructor['from'], need to copy all it's first arguments here
19
+ // https://github.com/microsoft/TypeScript/issues/32164
20
+ type BufferLike =
21
+ | string
22
+ | Buffer
23
+ | DataView
24
+ | number
25
+ | ArrayBufferView
26
+ | Uint8Array
27
+ | ArrayBuffer
28
+ | SharedArrayBuffer
29
+ | readonly any[]
30
+ | readonly number[]
31
+ | { valueOf(): ArrayBuffer }
32
+ | { valueOf(): SharedArrayBuffer }
33
+ | { valueOf(): Uint8Array }
34
+ | { valueOf(): readonly number[] }
35
+ | { valueOf(): string }
36
+ | { [Symbol.toPrimitive](hint: string): string };
37
+
38
+ // WebSocket socket.
39
+ declare class WebSocket extends EventEmitter {
40
+ /** The connection is not yet open. */
41
+ static readonly CONNECTING: 0;
42
+ /** The connection is open and ready to communicate. */
43
+ static readonly OPEN: 1;
44
+ /** The connection is in the process of closing. */
45
+ static readonly CLOSING: 2;
46
+ /** The connection is closed. */
47
+ static readonly CLOSED: 3;
48
+
49
+ binaryType: "nodebuffer" | "arraybuffer" | "fragments";
50
+ readonly bufferedAmount: number;
51
+ readonly extensions: string;
52
+ /** Indicates whether the websocket is paused */
53
+ readonly isPaused: boolean;
54
+ readonly protocol: string;
55
+ /** The current state of the connection */
56
+ readonly readyState:
57
+ | typeof WebSocket.CONNECTING
58
+ | typeof WebSocket.OPEN
59
+ | typeof WebSocket.CLOSING
60
+ | typeof WebSocket.CLOSED;
61
+ readonly url: string;
62
+
63
+ /** The connection is not yet open. */
64
+ readonly CONNECTING: 0;
65
+ /** The connection is open and ready to communicate. */
66
+ readonly OPEN: 1;
67
+ /** The connection is in the process of closing. */
68
+ readonly CLOSING: 2;
69
+ /** The connection is closed. */
70
+ readonly CLOSED: 3;
71
+
72
+ onopen: ((event: WebSocket.Event) => void) | null;
73
+ onerror: ((event: WebSocket.ErrorEvent) => void) | null;
74
+ onclose: ((event: WebSocket.CloseEvent) => void) | null;
75
+ onmessage: ((event: WebSocket.MessageEvent) => void) | null;
76
+
77
+ constructor(address: null);
78
+ constructor(address: string | URL, options?: WebSocket.ClientOptions | ClientRequestArgs);
79
+ constructor(
80
+ address: string | URL,
81
+ protocols?: string | string[],
82
+ options?: WebSocket.ClientOptions | ClientRequestArgs,
83
+ );
84
+
85
+ close(code?: number, data?: string | Buffer): void;
86
+ ping(data?: any, mask?: boolean, cb?: (err: Error) => void): void;
87
+ pong(data?: any, mask?: boolean, cb?: (err: Error) => void): void;
88
+ // https://github.com/websockets/ws/issues/2076#issuecomment-1250354722
89
+ send(data: BufferLike, cb?: (err?: Error) => void): void;
90
+ send(
91
+ data: BufferLike,
92
+ options: {
93
+ mask?: boolean | undefined;
94
+ binary?: boolean | undefined;
95
+ compress?: boolean | undefined;
96
+ fin?: boolean | undefined;
97
+ },
98
+ cb?: (err?: Error) => void,
99
+ ): void;
100
+ terminate(): void;
101
+
102
+ /**
103
+ * Pause the websocket causing it to stop emitting events. Some events can still be
104
+ * emitted after this is called, until all buffered data is consumed. This method
105
+ * is a noop if the ready state is `CONNECTING` or `CLOSED`.
106
+ */
107
+ pause(): void;
108
+ /**
109
+ * Make a paused socket resume emitting events. This method is a noop if the ready
110
+ * state is `CONNECTING` or `CLOSED`.
111
+ */
112
+ resume(): void;
113
+
114
+ // HTML5 WebSocket events
115
+ addEventListener(
116
+ method: "message",
117
+ cb: (event: WebSocket.MessageEvent) => void,
118
+ options?: WebSocket.EventListenerOptions,
119
+ ): void;
120
+ addEventListener(
121
+ method: "close",
122
+ cb: (event: WebSocket.CloseEvent) => void,
123
+ options?: WebSocket.EventListenerOptions,
124
+ ): void;
125
+ addEventListener(
126
+ method: "error",
127
+ cb: (event: WebSocket.ErrorEvent) => void,
128
+ options?: WebSocket.EventListenerOptions,
129
+ ): void;
130
+ addEventListener(
131
+ method: "open",
132
+ cb: (event: WebSocket.Event) => void,
133
+ options?: WebSocket.EventListenerOptions,
134
+ ): void;
135
+
136
+ removeEventListener(method: "message", cb: (event: WebSocket.MessageEvent) => void): void;
137
+ removeEventListener(method: "close", cb: (event: WebSocket.CloseEvent) => void): void;
138
+ removeEventListener(method: "error", cb: (event: WebSocket.ErrorEvent) => void): void;
139
+ removeEventListener(method: "open", cb: (event: WebSocket.Event) => void): void;
140
+
141
+ // Events
142
+ on(event: "close", listener: (this: WebSocket, code: number, reason: Buffer) => void): this;
143
+ on(event: "error", listener: (this: WebSocket, err: Error) => void): this;
144
+ on(event: "upgrade", listener: (this: WebSocket, request: IncomingMessage) => void): this;
145
+ on(event: "message", listener: (this: WebSocket, data: WebSocket.RawData, isBinary: boolean) => void): this;
146
+ on(event: "open", listener: (this: WebSocket) => void): this;
147
+ on(event: "ping" | "pong", listener: (this: WebSocket, data: Buffer) => void): this;
148
+ on(
149
+ event: "unexpected-response",
150
+ listener: (this: WebSocket, request: ClientRequest, response: IncomingMessage) => void,
151
+ ): this;
152
+ on(event: string | symbol, listener: (this: WebSocket, ...args: any[]) => void): this;
153
+
154
+ once(event: "close", listener: (this: WebSocket, code: number, reason: Buffer) => void): this;
155
+ once(event: "error", listener: (this: WebSocket, err: Error) => void): this;
156
+ once(event: "upgrade", listener: (this: WebSocket, request: IncomingMessage) => void): this;
157
+ once(event: "message", listener: (this: WebSocket, data: WebSocket.RawData, isBinary: boolean) => void): this;
158
+ once(event: "open", listener: (this: WebSocket) => void): this;
159
+ once(event: "ping" | "pong", listener: (this: WebSocket, data: Buffer) => void): this;
160
+ once(
161
+ event: "unexpected-response",
162
+ listener: (this: WebSocket, request: ClientRequest, response: IncomingMessage) => void,
163
+ ): this;
164
+ once(event: string | symbol, listener: (this: WebSocket, ...args: any[]) => void): this;
165
+
166
+ off(event: "close", listener: (this: WebSocket, code: number, reason: Buffer) => void): this;
167
+ off(event: "error", listener: (this: WebSocket, err: Error) => void): this;
168
+ off(event: "upgrade", listener: (this: WebSocket, request: IncomingMessage) => void): this;
169
+ off(event: "message", listener: (this: WebSocket, data: WebSocket.RawData, isBinary: boolean) => void): this;
170
+ off(event: "open", listener: (this: WebSocket) => void): this;
171
+ off(event: "ping" | "pong", listener: (this: WebSocket, data: Buffer) => void): this;
172
+ off(
173
+ event: "unexpected-response",
174
+ listener: (this: WebSocket, request: ClientRequest, response: IncomingMessage) => void,
175
+ ): this;
176
+ off(event: string | symbol, listener: (this: WebSocket, ...args: any[]) => void): this;
177
+
178
+ addListener(event: "close", listener: (code: number, reason: Buffer) => void): this;
179
+ addListener(event: "error", listener: (err: Error) => void): this;
180
+ addListener(event: "upgrade", listener: (request: IncomingMessage) => void): this;
181
+ addListener(event: "message", listener: (data: WebSocket.RawData, isBinary: boolean) => void): this;
182
+ addListener(event: "open", listener: () => void): this;
183
+ addListener(event: "ping" | "pong", listener: (data: Buffer) => void): this;
184
+ addListener(
185
+ event: "unexpected-response",
186
+ listener: (request: ClientRequest, response: IncomingMessage) => void,
187
+ ): this;
188
+ addListener(event: string | symbol, listener: (...args: any[]) => void): this;
189
+
190
+ removeListener(event: "close", listener: (code: number, reason: Buffer) => void): this;
191
+ removeListener(event: "error", listener: (err: Error) => void): this;
192
+ removeListener(event: "upgrade", listener: (request: IncomingMessage) => void): this;
193
+ removeListener(event: "message", listener: (data: WebSocket.RawData, isBinary: boolean) => void): this;
194
+ removeListener(event: "open", listener: () => void): this;
195
+ removeListener(event: "ping" | "pong", listener: (data: Buffer) => void): this;
196
+ removeListener(
197
+ event: "unexpected-response",
198
+ listener: (request: ClientRequest, response: IncomingMessage) => void,
199
+ ): this;
200
+ removeListener(event: string | symbol, listener: (...args: any[]) => void): this;
201
+ }
202
+
203
+ declare const WebSocketAlias: typeof WebSocket;
204
+ interface WebSocketAlias extends WebSocket {} // eslint-disable-line @typescript-eslint/no-empty-interface
205
+
206
+ declare namespace WebSocket {
207
+ /**
208
+ * Data represents the raw message payload received over the WebSocket.
209
+ */
210
+ type RawData = Buffer | ArrayBuffer | Buffer[];
211
+
212
+ /**
213
+ * Data represents the message payload received over the WebSocket.
214
+ */
215
+ type Data = string | Buffer | ArrayBuffer | Buffer[];
216
+
217
+ /**
218
+ * CertMeta represents the accepted types for certificate & key data.
219
+ */
220
+ type CertMeta = string | string[] | Buffer | Buffer[];
221
+
222
+ /**
223
+ * VerifyClientCallbackSync is a synchronous callback used to inspect the
224
+ * incoming message. The return value (boolean) of the function determines
225
+ * whether or not to accept the handshake.
226
+ */
227
+ type VerifyClientCallbackSync<Request extends IncomingMessage = IncomingMessage> = (info: {
228
+ origin: string;
229
+ secure: boolean;
230
+ req: Request;
231
+ }) => boolean;
232
+
233
+ /**
234
+ * VerifyClientCallbackAsync is an asynchronous callback used to inspect the
235
+ * incoming message. The return value (boolean) of the function determines
236
+ * whether or not to accept the handshake.
237
+ */
238
+ type VerifyClientCallbackAsync<Request extends IncomingMessage = IncomingMessage> = (
239
+ info: { origin: string; secure: boolean; req: Request },
240
+ callback: (res: boolean, code?: number, message?: string, headers?: OutgoingHttpHeaders) => void,
241
+ ) => void;
242
+
243
+ interface ClientOptions extends SecureContextOptions {
244
+ protocol?: string | undefined;
245
+ followRedirects?: boolean | undefined;
246
+ generateMask?(mask: Buffer): void;
247
+ handshakeTimeout?: number | undefined;
248
+ maxRedirects?: number | undefined;
249
+ perMessageDeflate?: boolean | PerMessageDeflateOptions | undefined;
250
+ localAddress?: string | undefined;
251
+ protocolVersion?: number | undefined;
252
+ headers?: { [key: string]: string } | undefined;
253
+ origin?: string | undefined;
254
+ agent?: Agent | undefined;
255
+ host?: string | undefined;
256
+ family?: number | undefined;
257
+ checkServerIdentity?(servername: string, cert: CertMeta): boolean;
258
+ rejectUnauthorized?: boolean | undefined;
259
+ maxPayload?: number | undefined;
260
+ skipUTF8Validation?: boolean | undefined;
261
+ }
262
+
263
+ interface PerMessageDeflateOptions {
264
+ serverNoContextTakeover?: boolean | undefined;
265
+ clientNoContextTakeover?: boolean | undefined;
266
+ serverMaxWindowBits?: number | undefined;
267
+ clientMaxWindowBits?: number | undefined;
268
+ zlibDeflateOptions?: {
269
+ flush?: number | undefined;
270
+ finishFlush?: number | undefined;
271
+ chunkSize?: number | undefined;
272
+ windowBits?: number | undefined;
273
+ level?: number | undefined;
274
+ memLevel?: number | undefined;
275
+ strategy?: number | undefined;
276
+ dictionary?: Buffer | Buffer[] | DataView | undefined;
277
+ info?: boolean | undefined;
278
+ } | undefined;
279
+ zlibInflateOptions?: ZlibOptions | undefined;
280
+ threshold?: number | undefined;
281
+ concurrencyLimit?: number | undefined;
282
+ }
283
+
284
+ interface Event {
285
+ type: string;
286
+ target: WebSocket;
287
+ }
288
+
289
+ interface ErrorEvent {
290
+ error: any;
291
+ message: string;
292
+ type: string;
293
+ target: WebSocket;
294
+ }
295
+
296
+ interface CloseEvent {
297
+ wasClean: boolean;
298
+ code: number;
299
+ reason: string;
300
+ type: string;
301
+ target: WebSocket;
302
+ }
303
+
304
+ interface MessageEvent {
305
+ data: Data;
306
+ type: string;
307
+ target: WebSocket;
308
+ }
309
+
310
+ interface EventListenerOptions {
311
+ once?: boolean | undefined;
312
+ }
313
+
314
+ interface ServerOptions<
315
+ U extends typeof WebSocket.WebSocket = typeof WebSocket.WebSocket,
316
+ V extends typeof IncomingMessage = typeof IncomingMessage,
317
+ > {
318
+ host?: string | undefined;
319
+ port?: number | undefined;
320
+ backlog?: number | undefined;
321
+ server?: HTTPServer<V> | HTTPSServer<V> | undefined;
322
+ verifyClient?:
323
+ | VerifyClientCallbackAsync<InstanceType<V>>
324
+ | VerifyClientCallbackSync<InstanceType<V>>
325
+ | undefined;
326
+ handleProtocols?: (protocols: Set<string>, request: InstanceType<V>) => string | false;
327
+ path?: string | undefined;
328
+ noServer?: boolean | undefined;
329
+ clientTracking?: boolean | undefined;
330
+ perMessageDeflate?: boolean | PerMessageDeflateOptions | undefined;
331
+ maxPayload?: number | undefined;
332
+ skipUTF8Validation?: boolean | undefined;
333
+ WebSocket?: U | undefined;
334
+ }
335
+
336
+ interface AddressInfo {
337
+ address: string;
338
+ family: string;
339
+ port: number;
340
+ }
341
+
342
+ // WebSocket Server
343
+ class Server<
344
+ T extends typeof WebSocket.WebSocket = typeof WebSocket.WebSocket,
345
+ U extends typeof IncomingMessage = typeof IncomingMessage,
346
+ > extends EventEmitter {
347
+ options: ServerOptions<T, U>;
348
+ path: string;
349
+ clients: Set<InstanceType<T>>;
350
+
351
+ constructor(options?: ServerOptions<T, U>, callback?: () => void);
352
+
353
+ address(): AddressInfo | string;
354
+ close(cb?: (err?: Error) => void): void;
355
+ handleUpgrade(
356
+ request: InstanceType<U>,
357
+ socket: Duplex,
358
+ upgradeHead: Buffer,
359
+ callback: (client: InstanceType<T>, request: InstanceType<U>) => void,
360
+ ): void;
361
+ shouldHandle(request: InstanceType<U>): boolean | Promise<boolean>;
362
+
363
+ // Events
364
+ on(event: "connection", cb: (this: Server<T>, socket: InstanceType<T>, request: InstanceType<U>) => void): this;
365
+ on(event: "error", cb: (this: Server<T>, error: Error) => void): this;
366
+ on(event: "headers", cb: (this: Server<T>, headers: string[], request: InstanceType<U>) => void): this;
367
+ on(event: "close" | "listening", cb: (this: Server<T>) => void): this;
368
+ on(event: string | symbol, listener: (this: Server<T>, ...args: any[]) => void): this;
369
+
370
+ once(
371
+ event: "connection",
372
+ cb: (this: Server<T>, socket: InstanceType<T>, request: InstanceType<U>) => void,
373
+ ): this;
374
+ once(event: "error", cb: (this: Server<T>, error: Error) => void): this;
375
+ once(event: "headers", cb: (this: Server<T>, headers: string[], request: InstanceType<U>) => void): this;
376
+ once(event: "close" | "listening", cb: (this: Server<T>) => void): this;
377
+ once(event: string | symbol, listener: (this: Server<T>, ...args: any[]) => void): this;
378
+
379
+ off(
380
+ event: "connection",
381
+ cb: (this: Server<T>, socket: InstanceType<T>, request: InstanceType<U>) => void,
382
+ ): this;
383
+ off(event: "error", cb: (this: Server<T>, error: Error) => void): this;
384
+ off(event: "headers", cb: (this: Server<T>, headers: string[], request: InstanceType<U>) => void): this;
385
+ off(event: "close" | "listening", cb: (this: Server<T>) => void): this;
386
+ off(event: string | symbol, listener: (this: Server<T>, ...args: any[]) => void): this;
387
+
388
+ addListener(event: "connection", cb: (client: InstanceType<T>, request: InstanceType<U>) => void): this;
389
+ addListener(event: "error", cb: (err: Error) => void): this;
390
+ addListener(event: "headers", cb: (headers: string[], request: InstanceType<U>) => void): this;
391
+ addListener(event: "close" | "listening", cb: () => void): this;
392
+ addListener(event: string | symbol, listener: (...args: any[]) => void): this;
393
+
394
+ removeListener(event: "connection", cb: (client: InstanceType<T>, request: InstanceType<U>) => void): this;
395
+ removeListener(event: "error", cb: (err: Error) => void): this;
396
+ removeListener(event: "headers", cb: (headers: string[], request: InstanceType<U>) => void): this;
397
+ removeListener(event: "close" | "listening", cb: () => void): this;
398
+ removeListener(event: string | symbol, listener: (...args: any[]) => void): this;
399
+ }
400
+
401
+ const WebSocketServer: typeof Server;
402
+ interface WebSocketServer extends Server {} // eslint-disable-line @typescript-eslint/no-empty-interface
403
+ const WebSocket: typeof WebSocketAlias;
404
+ interface WebSocket extends WebSocketAlias {} // eslint-disable-line @typescript-eslint/no-empty-interface
405
+
406
+ // WebSocket stream
407
+ function createWebSocketStream(websocket: WebSocket, options?: DuplexOptions): Duplex;
408
+ }
409
+
410
+ export = WebSocket;
@@ -0,0 +1 @@
1
+ (()=>{var __webpack_modules__={360:(e,t,s)=>{"use strict";const r=s(146);r.createWebSocketStream=s(56);r.Server=s(384);r.Receiver=s(235);r.Sender=s(679);r.WebSocket=r;r.WebSocketServer=r.Server;e.exports=r},639:(e,t,s)=>{"use strict";const{EMPTY_BUFFER:r}=s(821);const i=Buffer[Symbol.species];function concat(e,t){if(e.length===0)return r;if(e.length===1)return e[0];const s=Buffer.allocUnsafe(t);let n=0;for(let t=0;t<e.length;t++){const r=e[t];s.set(r,n);n+=r.length}if(n<t){return new i(s.buffer,s.byteOffset,n)}return s}function _mask(e,t,s,r,i){for(let n=0;n<i;n++){s[r+n]=e[n]^t[n&3]}}function _unmask(e,t){for(let s=0;s<e.length;s++){e[s]^=t[s&3]}}function toArrayBuffer(e){if(e.length===e.buffer.byteLength){return e.buffer}return e.buffer.slice(e.byteOffset,e.byteOffset+e.length)}function toBuffer(e){toBuffer.readOnly=true;if(Buffer.isBuffer(e))return e;let t;if(e instanceof ArrayBuffer){t=new i(e)}else if(ArrayBuffer.isView(e)){t=new i(e.buffer,e.byteOffset,e.byteLength)}else{t=Buffer.from(e);toBuffer.readOnly=false}return t}e.exports={concat:concat,mask:_mask,toArrayBuffer:toArrayBuffer,toBuffer:toBuffer,unmask:_unmask};if(!process.env.WS_NO_BUFFER_UTIL){try{const t=s(815);e.exports.mask=function(e,s,r,i,n){if(n<48)_mask(e,s,r,i,n);else t.mask(e,s,r,i,n)};e.exports.unmask=function(e,s){if(e.length<32)_unmask(e,s);else t.unmask(e,s)}}catch(e){}}},821:e=>{"use strict";e.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:()=>{}}},711:(e,t,s)=>{"use strict";const{kForOnEventAttribute:r,kListener:i}=s(821);const n=Symbol("kCode");const o=Symbol("kData");const a=Symbol("kError");const c=Symbol("kMessage");const l=Symbol("kReason");const f=Symbol("kTarget");const h=Symbol("kType");const d=Symbol("kWasClean");class Event{constructor(e){this[f]=null;this[h]=e}get target(){return this[f]}get type(){return this[h]}}Object.defineProperty(Event.prototype,"target",{enumerable:true});Object.defineProperty(Event.prototype,"type",{enumerable:true});class CloseEvent extends Event{constructor(e,t={}){super(e);this[n]=t.code===undefined?0:t.code;this[l]=t.reason===undefined?"":t.reason;this[d]=t.wasClean===undefined?false:t.wasClean}get code(){return this[n]}get reason(){return this[l]}get wasClean(){return this[d]}}Object.defineProperty(CloseEvent.prototype,"code",{enumerable:true});Object.defineProperty(CloseEvent.prototype,"reason",{enumerable:true});Object.defineProperty(CloseEvent.prototype,"wasClean",{enumerable:true});class ErrorEvent extends Event{constructor(e,t={}){super(e);this[a]=t.error===undefined?null:t.error;this[c]=t.message===undefined?"":t.message}get error(){return this[a]}get message(){return this[c]}}Object.defineProperty(ErrorEvent.prototype,"error",{enumerable:true});Object.defineProperty(ErrorEvent.prototype,"message",{enumerable:true});class MessageEvent extends Event{constructor(e,t={}){super(e);this[o]=t.data===undefined?null:t.data}get data(){return this[o]}}Object.defineProperty(MessageEvent.prototype,"data",{enumerable:true});const u={addEventListener(e,t,s={}){for(const n of this.listeners(e)){if(!s[r]&&n[i]===t&&!n[r]){return}}let n;if(e==="message"){n=function onMessage(e,s){const r=new MessageEvent("message",{data:s?e:e.toString()});r[f]=this;callListener(t,this,r)}}else if(e==="close"){n=function onClose(e,s){const r=new CloseEvent("close",{code:e,reason:s.toString(),wasClean:this._closeFrameReceived&&this._closeFrameSent});r[f]=this;callListener(t,this,r)}}else if(e==="error"){n=function onError(e){const s=new ErrorEvent("error",{error:e,message:e.message});s[f]=this;callListener(t,this,s)}}else if(e==="open"){n=function onOpen(){const e=new Event("open");e[f]=this;callListener(t,this,e)}}else{return}n[r]=!!s[r];n[i]=t;if(s.once){this.once(e,n)}else{this.on(e,n)}},removeEventListener(e,t){for(const s of this.listeners(e)){if(s[i]===t&&!s[r]){this.removeListener(e,s);break}}}};e.exports={CloseEvent:CloseEvent,ErrorEvent:ErrorEvent,Event:Event,EventTarget:u,MessageEvent:MessageEvent};function callListener(e,t,s){if(typeof e==="object"&&e.handleEvent){e.handleEvent.call(e,s)}else{e.call(t,s)}}},603:(e,t,s)=>{"use strict";const{tokenChars:r}=s(41);function push(e,t,s){if(e[t]===undefined)e[t]=[s];else e[t].push(s)}function parse(e){const t=Object.create(null);let s=Object.create(null);let i=false;let n=false;let o=false;let a;let c;let l=-1;let f=-1;let h=-1;let d=0;for(;d<e.length;d++){f=e.charCodeAt(d);if(a===undefined){if(h===-1&&r[f]===1){if(l===-1)l=d}else if(d!==0&&(f===32||f===9)){if(h===-1&&l!==-1)h=d}else if(f===59||f===44){if(l===-1){throw new SyntaxError(`Unexpected character at index ${d}`)}if(h===-1)h=d;const r=e.slice(l,h);if(f===44){push(t,r,s);s=Object.create(null)}else{a=r}l=h=-1}else{throw new SyntaxError(`Unexpected character at index ${d}`)}}else if(c===undefined){if(h===-1&&r[f]===1){if(l===-1)l=d}else if(f===32||f===9){if(h===-1&&l!==-1)h=d}else if(f===59||f===44){if(l===-1){throw new SyntaxError(`Unexpected character at index ${d}`)}if(h===-1)h=d;push(s,e.slice(l,h),true);if(f===44){push(t,a,s);s=Object.create(null);a=undefined}l=h=-1}else if(f===61&&l!==-1&&h===-1){c=e.slice(l,d);l=h=-1}else{throw new SyntaxError(`Unexpected character at index ${d}`)}}else{if(n){if(r[f]!==1){throw new SyntaxError(`Unexpected character at index ${d}`)}if(l===-1)l=d;else if(!i)i=true;n=false}else if(o){if(r[f]===1){if(l===-1)l=d}else if(f===34&&l!==-1){o=false;h=d}else if(f===92){n=true}else{throw new SyntaxError(`Unexpected character at index ${d}`)}}else if(f===34&&e.charCodeAt(d-1)===61){o=true}else if(h===-1&&r[f]===1){if(l===-1)l=d}else if(l!==-1&&(f===32||f===9)){if(h===-1)h=d}else if(f===59||f===44){if(l===-1){throw new SyntaxError(`Unexpected character at index ${d}`)}if(h===-1)h=d;let r=e.slice(l,h);if(i){r=r.replace(/\\/g,"");i=false}push(s,c,r);if(f===44){push(t,a,s);s=Object.create(null);a=undefined}c=undefined;l=h=-1}else{throw new SyntaxError(`Unexpected character at index ${d}`)}}}if(l===-1||o||f===32||f===9){throw new SyntaxError("Unexpected end of input")}if(h===-1)h=d;const u=e.slice(l,h);if(a===undefined){push(t,u,s)}else{if(c===undefined){push(s,u,true)}else if(i){push(s,c,u.replace(/\\/g,""))}else{push(s,c,u)}push(t,a,s)}return t}function format(e){return Object.keys(e).map((t=>{let s=e[t];if(!Array.isArray(s))s=[s];return s.map((e=>[t].concat(Object.keys(e).map((t=>{let s=e[t];if(!Array.isArray(s))s=[s];return s.map((e=>e===true?t:`${t}=${e}`)).join("; ")}))).join("; "))).join(", ")})).join(", ")}e.exports={format:format,parse:parse}},104:e=>{"use strict";const t=Symbol("kDone");const s=Symbol("kRun");class Limiter{constructor(e){this[t]=()=>{this.pending--;this[s]()};this.concurrency=e||Infinity;this.jobs=[];this.pending=0}add(e){this.jobs.push(e);this[s]()}[s](){if(this.pending===this.concurrency)return;if(this.jobs.length){const e=this.jobs.shift();this.pending++;e(this[t])}}}e.exports=Limiter},621:(e,t,s)=>{"use strict";const r=s(796);const i=s(639);const n=s(104);const{kStatusCode:o}=s(821);const a=Buffer[Symbol.species];const c=Buffer.from([0,0,255,255]);const l=Symbol("permessage-deflate");const f=Symbol("total-length");const h=Symbol("callback");const d=Symbol("buffers");const u=Symbol("error");let _;class PerMessageDeflate{constructor(e,t,s){this._maxPayload=s|0;this._options=e||{};this._threshold=this._options.threshold!==undefined?this._options.threshold:1024;this._isServer=!!t;this._deflate=null;this._inflate=null;this.params=null;if(!_){const e=this._options.concurrencyLimit!==undefined?this._options.concurrencyLimit:10;_=new n(e)}}static get extensionName(){return"permessage-deflate"}offer(){const e={};if(this._options.serverNoContextTakeover){e.server_no_context_takeover=true}if(this._options.clientNoContextTakeover){e.client_no_context_takeover=true}if(this._options.serverMaxWindowBits){e.server_max_window_bits=this._options.serverMaxWindowBits}if(this._options.clientMaxWindowBits){e.client_max_window_bits=this._options.clientMaxWindowBits}else if(this._options.clientMaxWindowBits==null){e.client_max_window_bits=true}return e}accept(e){e=this.normalizeParams(e);this.params=this._isServer?this.acceptAsServer(e):this.acceptAsClient(e);return this.params}cleanup(){if(this._inflate){this._inflate.close();this._inflate=null}if(this._deflate){const e=this._deflate[h];this._deflate.close();this._deflate=null;if(e){e(new Error("The deflate stream was closed while data was being processed"))}}}acceptAsServer(e){const t=this._options;const s=e.find((e=>{if(t.serverNoContextTakeover===false&&e.server_no_context_takeover||e.server_max_window_bits&&(t.serverMaxWindowBits===false||typeof t.serverMaxWindowBits==="number"&&t.serverMaxWindowBits>e.server_max_window_bits)||typeof t.clientMaxWindowBits==="number"&&!e.client_max_window_bits){return false}return true}));if(!s){throw new Error("None of the extension offers can be accepted")}if(t.serverNoContextTakeover){s.server_no_context_takeover=true}if(t.clientNoContextTakeover){s.client_no_context_takeover=true}if(typeof t.serverMaxWindowBits==="number"){s.server_max_window_bits=t.serverMaxWindowBits}if(typeof t.clientMaxWindowBits==="number"){s.client_max_window_bits=t.clientMaxWindowBits}else if(s.client_max_window_bits===true||t.clientMaxWindowBits===false){delete s.client_max_window_bits}return s}acceptAsClient(e){const t=e[0];if(this._options.clientNoContextTakeover===false&&t.client_no_context_takeover){throw new Error('Unexpected parameter "client_no_context_takeover"')}if(!t.client_max_window_bits){if(typeof this._options.clientMaxWindowBits==="number"){t.client_max_window_bits=this._options.clientMaxWindowBits}}else if(this._options.clientMaxWindowBits===false||typeof this._options.clientMaxWindowBits==="number"&&t.client_max_window_bits>this._options.clientMaxWindowBits){throw new Error('Unexpected or invalid parameter "client_max_window_bits"')}return t}normalizeParams(e){e.forEach((e=>{Object.keys(e).forEach((t=>{let s=e[t];if(s.length>1){throw new Error(`Parameter "${t}" must have only a single value`)}s=s[0];if(t==="client_max_window_bits"){if(s!==true){const e=+s;if(!Number.isInteger(e)||e<8||e>15){throw new TypeError(`Invalid value for parameter "${t}": ${s}`)}s=e}else if(!this._isServer){throw new TypeError(`Invalid value for parameter "${t}": ${s}`)}}else if(t==="server_max_window_bits"){const e=+s;if(!Number.isInteger(e)||e<8||e>15){throw new TypeError(`Invalid value for parameter "${t}": ${s}`)}s=e}else if(t==="client_no_context_takeover"||t==="server_no_context_takeover"){if(s!==true){throw new TypeError(`Invalid value for parameter "${t}": ${s}`)}}else{throw new Error(`Unknown parameter "${t}"`)}e[t]=s}))}));return e}decompress(e,t,s){_.add((r=>{this._decompress(e,t,((e,t)=>{r();s(e,t)}))}))}compress(e,t,s){_.add((r=>{this._compress(e,t,((e,t)=>{r();s(e,t)}))}))}_decompress(e,t,s){const n=this._isServer?"client":"server";if(!this._inflate){const e=`${n}_max_window_bits`;const t=typeof this.params[e]!=="number"?r.Z_DEFAULT_WINDOWBITS:this.params[e];this._inflate=r.createInflateRaw({...this._options.zlibInflateOptions,windowBits:t});this._inflate[l]=this;this._inflate[f]=0;this._inflate[d]=[];this._inflate.on("error",inflateOnError);this._inflate.on("data",inflateOnData)}this._inflate[h]=s;this._inflate.write(e);if(t)this._inflate.write(c);this._inflate.flush((()=>{const e=this._inflate[u];if(e){this._inflate.close();this._inflate=null;s(e);return}const r=i.concat(this._inflate[d],this._inflate[f]);if(this._inflate._readableState.endEmitted){this._inflate.close();this._inflate=null}else{this._inflate[f]=0;this._inflate[d]=[];if(t&&this.params[`${n}_no_context_takeover`]){this._inflate.reset()}}s(null,r)}))}_compress(e,t,s){const n=this._isServer?"server":"client";if(!this._deflate){const e=`${n}_max_window_bits`;const t=typeof this.params[e]!=="number"?r.Z_DEFAULT_WINDOWBITS:this.params[e];this._deflate=r.createDeflateRaw({...this._options.zlibDeflateOptions,windowBits:t});this._deflate[f]=0;this._deflate[d]=[];this._deflate.on("data",deflateOnData)}this._deflate[h]=s;this._deflate.write(e);this._deflate.flush(r.Z_SYNC_FLUSH,(()=>{if(!this._deflate){return}let e=i.concat(this._deflate[d],this._deflate[f]);if(t){e=new a(e.buffer,e.byteOffset,e.length-4)}this._deflate[h]=null;this._deflate[f]=0;this._deflate[d]=[];if(t&&this.params[`${n}_no_context_takeover`]){this._deflate.reset()}s(null,e)}))}}e.exports=PerMessageDeflate;function deflateOnData(e){this[d].push(e);this[f]+=e.length}function inflateOnData(e){this[f]+=e.length;if(this[l]._maxPayload<1||this[f]<=this[l]._maxPayload){this[d].push(e);return}this[u]=new RangeError("Max payload size exceeded");this[u].code="WS_ERR_UNSUPPORTED_MESSAGE_LENGTH";this[u][o]=1009;this.removeListener("data",inflateOnData);this.reset()}function inflateOnError(e){this[l]._inflate=null;e[o]=1007;this[h](e)}},235:(e,t,s)=>{"use strict";const{Writable:r}=s(781);const i=s(621);const{BINARY_TYPES:n,EMPTY_BUFFER:o,kStatusCode:a,kWebSocket:c}=s(821);const{concat:l,toArrayBuffer:f,unmask:h}=s(639);const{isValidStatusCode:d,isValidUTF8:u}=s(41);const _=Buffer[Symbol.species];const p=Promise.resolve();const m=typeof queueMicrotask==="function"?queueMicrotask:queueMicrotaskShim;const b=0;const k=1;const S=2;const y=3;const g=4;const E=5;const w=6;class Receiver extends r{constructor(e={}){super();this._binaryType=e.binaryType||n[0];this._extensions=e.extensions||{};this._isServer=!!e.isServer;this._maxPayload=e.maxPayload|0;this._skipUTF8Validation=!!e.skipUTF8Validation;this[c]=undefined;this._bufferedBytes=0;this._buffers=[];this._compressed=false;this._payloadLength=0;this._mask=undefined;this._fragmented=0;this._masked=false;this._fin=false;this._opcode=0;this._totalPayloadLength=0;this._messageLength=0;this._fragments=[];this._state=b;this._loop=false}_write(e,t,s){if(this._opcode===8&&this._state==b)return s();this._bufferedBytes+=e.length;this._buffers.push(e);this.startLoop(s)}consume(e){this._bufferedBytes-=e;if(e===this._buffers[0].length)return this._buffers.shift();if(e<this._buffers[0].length){const t=this._buffers[0];this._buffers[0]=new _(t.buffer,t.byteOffset+e,t.length-e);return new _(t.buffer,t.byteOffset,e)}const t=Buffer.allocUnsafe(e);do{const s=this._buffers[0];const r=t.length-e;if(e>=s.length){t.set(this._buffers.shift(),r)}else{t.set(new Uint8Array(s.buffer,s.byteOffset,e),r);this._buffers[0]=new _(s.buffer,s.byteOffset+e,s.length-e)}e-=s.length}while(e>0);return t}startLoop(e){let t;this._loop=true;do{switch(this._state){case b:t=this.getInfo();break;case k:t=this.getPayloadLength16();break;case S:t=this.getPayloadLength64();break;case y:this.getMask();break;case g:t=this.getData(e);break;case E:this._loop=false;return;default:this._loop=false;m((()=>{this._state=b;this.startLoop(e)}));return}}while(this._loop);e(t)}getInfo(){if(this._bufferedBytes<2){this._loop=false;return}const e=this.consume(2);if((e[0]&48)!==0){this._loop=false;return error(RangeError,"RSV2 and RSV3 must be clear",true,1002,"WS_ERR_UNEXPECTED_RSV_2_3")}const t=(e[0]&64)===64;if(t&&!this._extensions[i.extensionName]){this._loop=false;return error(RangeError,"RSV1 must be clear",true,1002,"WS_ERR_UNEXPECTED_RSV_1")}this._fin=(e[0]&128)===128;this._opcode=e[0]&15;this._payloadLength=e[1]&127;if(this._opcode===0){if(t){this._loop=false;return error(RangeError,"RSV1 must be clear",true,1002,"WS_ERR_UNEXPECTED_RSV_1")}if(!this._fragmented){this._loop=false;return error(RangeError,"invalid opcode 0",true,1002,"WS_ERR_INVALID_OPCODE")}this._opcode=this._fragmented}else if(this._opcode===1||this._opcode===2){if(this._fragmented){this._loop=false;return error(RangeError,`invalid opcode ${this._opcode}`,true,1002,"WS_ERR_INVALID_OPCODE")}this._compressed=t}else if(this._opcode>7&&this._opcode<11){if(!this._fin){this._loop=false;return error(RangeError,"FIN must be set",true,1002,"WS_ERR_EXPECTED_FIN")}if(t){this._loop=false;return error(RangeError,"RSV1 must be clear",true,1002,"WS_ERR_UNEXPECTED_RSV_1")}if(this._payloadLength>125||this._opcode===8&&this._payloadLength===1){this._loop=false;return error(RangeError,`invalid payload length ${this._payloadLength}`,true,1002,"WS_ERR_INVALID_CONTROL_PAYLOAD_LENGTH")}}else{this._loop=false;return error(RangeError,`invalid opcode ${this._opcode}`,true,1002,"WS_ERR_INVALID_OPCODE")}if(!this._fin&&!this._fragmented)this._fragmented=this._opcode;this._masked=(e[1]&128)===128;if(this._isServer){if(!this._masked){this._loop=false;return error(RangeError,"MASK must be set",true,1002,"WS_ERR_EXPECTED_MASK")}}else if(this._masked){this._loop=false;return error(RangeError,"MASK must be clear",true,1002,"WS_ERR_UNEXPECTED_MASK")}if(this._payloadLength===126)this._state=k;else if(this._payloadLength===127)this._state=S;else return this.haveLength()}getPayloadLength16(){if(this._bufferedBytes<2){this._loop=false;return}this._payloadLength=this.consume(2).readUInt16BE(0);return this.haveLength()}getPayloadLength64(){if(this._bufferedBytes<8){this._loop=false;return}const e=this.consume(8);const t=e.readUInt32BE(0);if(t>Math.pow(2,53-32)-1){this._loop=false;return error(RangeError,"Unsupported WebSocket frame: payload length > 2^53 - 1",false,1009,"WS_ERR_UNSUPPORTED_DATA_PAYLOAD_LENGTH")}this._payloadLength=t*Math.pow(2,32)+e.readUInt32BE(4);return this.haveLength()}haveLength(){if(this._payloadLength&&this._opcode<8){this._totalPayloadLength+=this._payloadLength;if(this._totalPayloadLength>this._maxPayload&&this._maxPayload>0){this._loop=false;return error(RangeError,"Max payload size exceeded",false,1009,"WS_ERR_UNSUPPORTED_MESSAGE_LENGTH")}}if(this._masked)this._state=y;else this._state=g}getMask(){if(this._bufferedBytes<4){this._loop=false;return}this._mask=this.consume(4);this._state=g}getData(e){let t=o;if(this._payloadLength){if(this._bufferedBytes<this._payloadLength){this._loop=false;return}t=this.consume(this._payloadLength);if(this._masked&&(this._mask[0]|this._mask[1]|this._mask[2]|this._mask[3])!==0){h(t,this._mask)}}if(this._opcode>7)return this.controlMessage(t);if(this._compressed){this._state=E;this.decompress(t,e);return}if(t.length){this._messageLength=this._totalPayloadLength;this._fragments.push(t)}return this.dataMessage()}decompress(e,t){const s=this._extensions[i.extensionName];s.decompress(e,this._fin,((e,s)=>{if(e)return t(e);if(s.length){this._messageLength+=s.length;if(this._messageLength>this._maxPayload&&this._maxPayload>0){return t(error(RangeError,"Max payload size exceeded",false,1009,"WS_ERR_UNSUPPORTED_MESSAGE_LENGTH"))}this._fragments.push(s)}const r=this.dataMessage();if(r)return t(r);this.startLoop(t)}))}dataMessage(){if(this._fin){const e=this._messageLength;const t=this._fragments;this._totalPayloadLength=0;this._messageLength=0;this._fragmented=0;this._fragments=[];if(this._opcode===2){let s;if(this._binaryType==="nodebuffer"){s=l(t,e)}else if(this._binaryType==="arraybuffer"){s=f(l(t,e))}else{s=t}this.emit("message",s,true)}else{const s=l(t,e);if(!this._skipUTF8Validation&&!u(s)){this._loop=false;return error(Error,"invalid UTF-8 sequence",true,1007,"WS_ERR_INVALID_UTF8")}this.emit("message",s,false)}}this._state=w}controlMessage(e){if(this._opcode===8){this._loop=false;if(e.length===0){this.emit("conclude",1005,o);this.end();this._state=b}else{const t=e.readUInt16BE(0);if(!d(t)){return error(RangeError,`invalid status code ${t}`,true,1002,"WS_ERR_INVALID_CLOSE_CODE")}const s=new _(e.buffer,e.byteOffset+2,e.length-2);if(!this._skipUTF8Validation&&!u(s)){return error(Error,"invalid UTF-8 sequence",true,1007,"WS_ERR_INVALID_UTF8")}this.emit("conclude",t,s);this.end();this._state=b}}else if(this._opcode===9){this.emit("ping",e);this._state=w}else{this.emit("pong",e);this._state=w}}}e.exports=Receiver;function error(e,t,s,r,i){const n=new e(s?`Invalid WebSocket frame: ${t}`:t);Error.captureStackTrace(n,error);n.code=i;n[a]=r;return n}function queueMicrotaskShim(e){p.then(e).catch(throwErrorNextTick)}function throwError(e){throw e}function throwErrorNextTick(e){process.nextTick(throwError,e)}},679:(e,t,s)=>{"use strict";const{Duplex:r}=s(781);const{randomFillSync:i}=s(113);const n=s(621);const{EMPTY_BUFFER:o}=s(821);const{isValidStatusCode:a}=s(41);const{mask:c,toBuffer:l}=s(639);const f=Symbol("kByteLength");const h=Buffer.alloc(4);class Sender{constructor(e,t,s){this._extensions=t||{};if(s){this._generateMask=s;this._maskBuffer=Buffer.alloc(4)}this._socket=e;this._firstFragment=true;this._compress=false;this._bufferedBytes=0;this._deflating=false;this._queue=[]}static frame(e,t){let s;let r=false;let n=2;let o=false;if(t.mask){s=t.maskBuffer||h;if(t.generateMask){t.generateMask(s)}else{i(s,0,4)}o=(s[0]|s[1]|s[2]|s[3])===0;n=6}let a;if(typeof e==="string"){if((!t.mask||o)&&t[f]!==undefined){a=t[f]}else{e=Buffer.from(e);a=e.length}}else{a=e.length;r=t.mask&&t.readOnly&&!o}let l=a;if(a>=65536){n+=8;l=127}else if(a>125){n+=2;l=126}const d=Buffer.allocUnsafe(r?a+n:n);d[0]=t.fin?t.opcode|128:t.opcode;if(t.rsv1)d[0]|=64;d[1]=l;if(l===126){d.writeUInt16BE(a,2)}else if(l===127){d[2]=d[3]=0;d.writeUIntBE(a,4,6)}if(!t.mask)return[d,e];d[1]|=128;d[n-4]=s[0];d[n-3]=s[1];d[n-2]=s[2];d[n-1]=s[3];if(o)return[d,e];if(r){c(e,s,d,n,a);return[d]}c(e,s,e,0,a);return[d,e]}close(e,t,s,r){let i;if(e===undefined){i=o}else if(typeof e!=="number"||!a(e)){throw new TypeError("First argument must be a valid error code number")}else if(t===undefined||!t.length){i=Buffer.allocUnsafe(2);i.writeUInt16BE(e,0)}else{const s=Buffer.byteLength(t);if(s>123){throw new RangeError("The message must not be greater than 123 bytes")}i=Buffer.allocUnsafe(2+s);i.writeUInt16BE(e,0);if(typeof t==="string"){i.write(t,2)}else{i.set(t,2)}}const n={[f]:i.length,fin:true,generateMask:this._generateMask,mask:s,maskBuffer:this._maskBuffer,opcode:8,readOnly:false,rsv1:false};if(this._deflating){this.enqueue([this.dispatch,i,false,n,r])}else{this.sendFrame(Sender.frame(i,n),r)}}ping(e,t,s){let r;let i;if(typeof e==="string"){r=Buffer.byteLength(e);i=false}else{e=l(e);r=e.length;i=l.readOnly}if(r>125){throw new RangeError("The data size must not be greater than 125 bytes")}const n={[f]:r,fin:true,generateMask:this._generateMask,mask:t,maskBuffer:this._maskBuffer,opcode:9,readOnly:i,rsv1:false};if(this._deflating){this.enqueue([this.dispatch,e,false,n,s])}else{this.sendFrame(Sender.frame(e,n),s)}}pong(e,t,s){let r;let i;if(typeof e==="string"){r=Buffer.byteLength(e);i=false}else{e=l(e);r=e.length;i=l.readOnly}if(r>125){throw new RangeError("The data size must not be greater than 125 bytes")}const n={[f]:r,fin:true,generateMask:this._generateMask,mask:t,maskBuffer:this._maskBuffer,opcode:10,readOnly:i,rsv1:false};if(this._deflating){this.enqueue([this.dispatch,e,false,n,s])}else{this.sendFrame(Sender.frame(e,n),s)}}send(e,t,s){const r=this._extensions[n.extensionName];let i=t.binary?2:1;let o=t.compress;let a;let c;if(typeof e==="string"){a=Buffer.byteLength(e);c=false}else{e=l(e);a=e.length;c=l.readOnly}if(this._firstFragment){this._firstFragment=false;if(o&&r&&r.params[r._isServer?"server_no_context_takeover":"client_no_context_takeover"]){o=a>=r._threshold}this._compress=o}else{o=false;i=0}if(t.fin)this._firstFragment=true;if(r){const r={[f]:a,fin:t.fin,generateMask:this._generateMask,mask:t.mask,maskBuffer:this._maskBuffer,opcode:i,readOnly:c,rsv1:o};if(this._deflating){this.enqueue([this.dispatch,e,this._compress,r,s])}else{this.dispatch(e,this._compress,r,s)}}else{this.sendFrame(Sender.frame(e,{[f]:a,fin:t.fin,generateMask:this._generateMask,mask:t.mask,maskBuffer:this._maskBuffer,opcode:i,readOnly:c,rsv1:false}),s)}}dispatch(e,t,s,r){if(!t){this.sendFrame(Sender.frame(e,s),r);return}const i=this._extensions[n.extensionName];this._bufferedBytes+=s[f];this._deflating=true;i.compress(e,s.fin,((e,t)=>{if(this._socket.destroyed){const e=new Error("The socket was closed while data was being compressed");if(typeof r==="function")r(e);for(let t=0;t<this._queue.length;t++){const s=this._queue[t];const r=s[s.length-1];if(typeof r==="function")r(e)}return}this._bufferedBytes-=s[f];this._deflating=false;s.readOnly=false;this.sendFrame(Sender.frame(t,s),r);this.dequeue()}))}dequeue(){while(!this._deflating&&this._queue.length){const e=this._queue.shift();this._bufferedBytes-=e[3][f];Reflect.apply(e[0],this,e.slice(1))}}enqueue(e){this._bufferedBytes+=e[3][f];this._queue.push(e)}sendFrame(e,t){if(e.length===2){this._socket.cork();this._socket.write(e[0]);this._socket.write(e[1],t);this._socket.uncork()}else{this._socket.write(e[0],t)}}}e.exports=Sender},56:(e,t,s)=>{"use strict";const{Duplex:r}=s(781);function emitClose(e){e.emit("close")}function duplexOnEnd(){if(!this.destroyed&&this._writableState.finished){this.destroy()}}function duplexOnError(e){this.removeListener("error",duplexOnError);this.destroy();if(this.listenerCount("error")===0){this.emit("error",e)}}function createWebSocketStream(e,t){let s=true;const i=new r({...t,autoDestroy:false,emitClose:false,objectMode:false,writableObjectMode:false});e.on("message",(function message(t,s){const r=!s&&i._readableState.objectMode?t.toString():t;if(!i.push(r))e.pause()}));e.once("error",(function error(e){if(i.destroyed)return;s=false;i.destroy(e)}));e.once("close",(function close(){if(i.destroyed)return;i.push(null)}));i._destroy=function(t,r){if(e.readyState===e.CLOSED){r(t);process.nextTick(emitClose,i);return}let n=false;e.once("error",(function error(e){n=true;r(e)}));e.once("close",(function close(){if(!n)r(t);process.nextTick(emitClose,i)}));if(s)e.terminate()};i._final=function(t){if(e.readyState===e.CONNECTING){e.once("open",(function open(){i._final(t)}));return}if(e._socket===null)return;if(e._socket._writableState.finished){t();if(i._readableState.endEmitted)i.destroy()}else{e._socket.once("finish",(function finish(){t()}));e.close()}};i._read=function(){if(e.isPaused)e.resume()};i._write=function(t,s,r){if(e.readyState===e.CONNECTING){e.once("open",(function open(){i._write(t,s,r)}));return}e.send(t,r)};i.on("end",duplexOnEnd);i.on("error",duplexOnError);return i}e.exports=createWebSocketStream},590:(e,t,s)=>{"use strict";const{tokenChars:r}=s(41);function parse(e){const t=new Set;let s=-1;let i=-1;let n=0;for(n;n<e.length;n++){const o=e.charCodeAt(n);if(i===-1&&r[o]===1){if(s===-1)s=n}else if(n!==0&&(o===32||o===9)){if(i===-1&&s!==-1)i=n}else if(o===44){if(s===-1){throw new SyntaxError(`Unexpected character at index ${n}`)}if(i===-1)i=n;const r=e.slice(s,i);if(t.has(r)){throw new SyntaxError(`The "${r}" subprotocol is duplicated`)}t.add(r);s=i=-1}else{throw new SyntaxError(`Unexpected character at index ${n}`)}}if(s===-1||i!==-1){throw new SyntaxError("Unexpected end of input")}const o=e.slice(s,n);if(t.has(o)){throw new SyntaxError(`The "${o}" subprotocol is duplicated`)}t.add(o);return t}e.exports={parse:parse}},41:(e,t,s)=>{"use strict";const{isUtf8:r}=s(300);const i=[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 isValidStatusCode(e){return e>=1e3&&e<=1014&&e!==1004&&e!==1005&&e!==1006||e>=3e3&&e<=4999}function _isValidUTF8(e){const t=e.length;let s=0;while(s<t){if((e[s]&128)===0){s++}else if((e[s]&224)===192){if(s+1===t||(e[s+1]&192)!==128||(e[s]&254)===192){return false}s+=2}else if((e[s]&240)===224){if(s+2>=t||(e[s+1]&192)!==128||(e[s+2]&192)!==128||e[s]===224&&(e[s+1]&224)===128||e[s]===237&&(e[s+1]&224)===160){return false}s+=3}else if((e[s]&248)===240){if(s+3>=t||(e[s+1]&192)!==128||(e[s+2]&192)!==128||(e[s+3]&192)!==128||e[s]===240&&(e[s+1]&240)===128||e[s]===244&&e[s+1]>143||e[s]>244){return false}s+=4}else{return false}}return true}e.exports={isValidStatusCode:isValidStatusCode,isValidUTF8:_isValidUTF8,tokenChars:i};if(r){e.exports.isValidUTF8=function(e){return e.length<24?_isValidUTF8(e):r(e)}}else if(!process.env.WS_NO_UTF_8_VALIDATE){try{const t=s(646);e.exports.isValidUTF8=function(e){return e.length<32?_isValidUTF8(e):t(e)}}catch(e){}}},384:(e,t,s)=>{"use strict";const r=s(361);const i=s(685);const{Duplex:n}=s(781);const{createHash:o}=s(113);const a=s(603);const c=s(621);const l=s(590);const f=s(146);const{GUID:h,kWebSocket:d}=s(821);const u=/^[+/0-9A-Za-z]{22}==$/;const _=0;const p=1;const m=2;class WebSocketServer extends r{constructor(e,t){super();e={maxPayload:100*1024*1024,skipUTF8Validation:false,perMessageDeflate:false,handleProtocols:null,clientTracking:true,verifyClient:null,noServer:false,backlog:null,server:null,host:null,path:null,port:null,WebSocket:f,...e};if(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=i.createServer(((e,t)=>{const s=i.STATUS_CODES[426];t.writeHead(426,{"Content-Length":s.length,"Content-Type":"text/plain"});t.end(s)}));this._server.listen(e.port,e.host,e.backlog,t)}else if(e.server){this._server=e.server}if(this._server){const e=this.emit.bind(this,"connection");this._removeListeners=addListeners(this._server,{listening:this.emit.bind(this,"listening"),error:this.emit.bind(this,"error"),upgrade:(t,s,r)=>{this.handleUpgrade(t,s,r,e)}})}if(e.perMessageDeflate===true)e.perMessageDeflate={};if(e.clientTracking){this.clients=new Set;this._shouldEmitClose=false}this.options=e;this._state=_}address(){if(this.options.noServer){throw new Error('The server is operating in "noServer" mode')}if(!this._server)return null;return this._server.address()}close(e){if(this._state===m){if(e){this.once("close",(()=>{e(new Error("The server is not running"))}))}process.nextTick(emitClose,this);return}if(e)this.once("close",e);if(this._state===p)return;this._state=p;if(this.options.noServer||this.options.server){if(this._server){this._removeListeners();this._removeListeners=this._server=null}if(this.clients){if(!this.clients.size){process.nextTick(emitClose,this)}else{this._shouldEmitClose=true}}else{process.nextTick(emitClose,this)}}else{const e=this._server;this._removeListeners();this._removeListeners=this._server=null;e.close((()=>{emitClose(this)}))}}shouldHandle(e){if(this.options.path){const t=e.url.indexOf("?");const s=t!==-1?e.url.slice(0,t):e.url;if(s!==this.options.path)return false}return true}handleUpgrade(e,t,s,r){t.on("error",socketOnError);const i=e.headers["sec-websocket-key"];const n=+e.headers["sec-websocket-version"];if(e.method!=="GET"){const s="Invalid HTTP method";abortHandshakeOrEmitwsClientError(this,e,t,405,s);return}if(e.headers.upgrade.toLowerCase()!=="websocket"){const s="Invalid Upgrade header";abortHandshakeOrEmitwsClientError(this,e,t,400,s);return}if(!i||!u.test(i)){const s="Missing or invalid Sec-WebSocket-Key header";abortHandshakeOrEmitwsClientError(this,e,t,400,s);return}if(n!==8&&n!==13){const s="Missing or invalid Sec-WebSocket-Version header";abortHandshakeOrEmitwsClientError(this,e,t,400,s);return}if(!this.shouldHandle(e)){abortHandshake(t,400);return}const o=e.headers["sec-websocket-protocol"];let f=new Set;if(o!==undefined){try{f=l.parse(o)}catch(s){const r="Invalid Sec-WebSocket-Protocol header";abortHandshakeOrEmitwsClientError(this,e,t,400,r);return}}const h=e.headers["sec-websocket-extensions"];const d={};if(this.options.perMessageDeflate&&h!==undefined){const s=new c(this.options.perMessageDeflate,true,this.options.maxPayload);try{const e=a.parse(h);if(e[c.extensionName]){s.accept(e[c.extensionName]);d[c.extensionName]=s}}catch(s){const r="Invalid or unacceptable Sec-WebSocket-Extensions header";abortHandshakeOrEmitwsClientError(this,e,t,400,r);return}}if(this.options.verifyClient){const o={origin:e.headers[`${n===8?"sec-websocket-origin":"origin"}`],secure:!!(e.socket.authorized||e.socket.encrypted),req:e};if(this.options.verifyClient.length===2){this.options.verifyClient(o,((n,o,a,c)=>{if(!n){return abortHandshake(t,o||401,a,c)}this.completeUpgrade(d,i,f,e,t,s,r)}));return}if(!this.options.verifyClient(o))return abortHandshake(t,401)}this.completeUpgrade(d,i,f,e,t,s,r)}completeUpgrade(e,t,s,r,i,n,l){if(!i.readable||!i.writable)return i.destroy();if(i[d]){throw new Error("server.handleUpgrade() was called more than once with the same "+"socket, possibly due to a misconfiguration")}if(this._state>_)return abortHandshake(i,503);const f=o("sha1").update(t+h).digest("base64");const u=["HTTP/1.1 101 Switching Protocols","Upgrade: websocket","Connection: Upgrade",`Sec-WebSocket-Accept: ${f}`];const p=new this.options.WebSocket(null);if(s.size){const e=this.options.handleProtocols?this.options.handleProtocols(s,r):s.values().next().value;if(e){u.push(`Sec-WebSocket-Protocol: ${e}`);p._protocol=e}}if(e[c.extensionName]){const t=e[c.extensionName].params;const s=a.format({[c.extensionName]:[t]});u.push(`Sec-WebSocket-Extensions: ${s}`);p._extensions=e}this.emit("headers",u,r);i.write(u.concat("\r\n").join("\r\n"));i.removeListener("error",socketOnError);p.setSocket(i,n,{maxPayload:this.options.maxPayload,skipUTF8Validation:this.options.skipUTF8Validation});if(this.clients){this.clients.add(p);p.on("close",(()=>{this.clients.delete(p);if(this._shouldEmitClose&&!this.clients.size){process.nextTick(emitClose,this)}}))}l(p,r)}}e.exports=WebSocketServer;function addListeners(e,t){for(const s of Object.keys(t))e.on(s,t[s]);return function removeListeners(){for(const s of Object.keys(t)){e.removeListener(s,t[s])}}}function emitClose(e){e._state=m;e.emit("close")}function socketOnError(){this.destroy()}function abortHandshake(e,t,s,r){s=s||i.STATUS_CODES[t];r={Connection:"close","Content-Type":"text/html","Content-Length":Buffer.byteLength(s),...r};e.once("finish",e.destroy);e.end(`HTTP/1.1 ${t} ${i.STATUS_CODES[t]}\r\n`+Object.keys(r).map((e=>`${e}: ${r[e]}`)).join("\r\n")+"\r\n\r\n"+s)}function abortHandshakeOrEmitwsClientError(e,t,s,r,i){if(e.listenerCount("wsClientError")){const r=new Error(i);Error.captureStackTrace(r,abortHandshakeOrEmitwsClientError);e.emit("wsClientError",r,s,t)}else{abortHandshake(s,r,i)}}},146:(e,t,s)=>{"use strict";const r=s(361);const i=s(687);const n=s(685);const o=s(808);const a=s(404);const{randomBytes:c,createHash:l}=s(113);const{Duplex:f,Readable:h}=s(781);const{URL:d}=s(310);const u=s(621);const _=s(235);const p=s(679);const{BINARY_TYPES:m,EMPTY_BUFFER:b,GUID:k,kForOnEventAttribute:S,kListener:y,kStatusCode:g,kWebSocket:E,NOOP:w}=s(821);const{EventTarget:{addEventListener:v,removeEventListener:x}}=s(711);const{format:O,parse:C}=s(603);const{toBuffer:T}=s(639);const N=30*1e3;const L=Symbol("kAborted");const W=[8,13];const P=["CONNECTING","OPEN","CLOSING","CLOSED"];const B=/^[!#$%&'*+\-.0-9A-Z^_`|a-z~]+$/;class WebSocket extends r{constructor(e,t,s){super();this._binaryType=m[0];this._closeCode=1006;this._closeFrameReceived=false;this._closeFrameSent=false;this._closeMessage=b;this._closeTimer=null;this._extensions={};this._paused=false;this._protocol="";this._readyState=WebSocket.CONNECTING;this._receiver=null;this._sender=null;this._socket=null;if(e!==null){this._bufferedAmount=0;this._isServer=false;this._redirects=0;if(t===undefined){t=[]}else if(!Array.isArray(t)){if(typeof t==="object"&&t!==null){s=t;t=[]}else{t=[t]}}initAsClient(this,e,t,s)}else{this._isServer=true}}get binaryType(){return this._binaryType}set binaryType(e){if(!m.includes(e))return;this._binaryType=e;if(this._receiver)this._receiver._binaryType=e}get bufferedAmount(){if(!this._socket)return this._bufferedAmount;return this._socket._writableState.length+this._sender._bufferedBytes}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,t,s){const r=new _({binaryType:this.binaryType,extensions:this._extensions,isServer:this._isServer,maxPayload:s.maxPayload,skipUTF8Validation:s.skipUTF8Validation});this._sender=new p(e,this._extensions,s.generateMask);this._receiver=r;this._socket=e;r[E]=this;e[E]=this;r.on("conclude",receiverOnConclude);r.on("drain",receiverOnDrain);r.on("error",receiverOnError);r.on("message",receiverOnMessage);r.on("ping",receiverOnPing);r.on("pong",receiverOnPong);if(e.setTimeout)e.setTimeout(0);if(e.setNoDelay)e.setNoDelay();if(t.length>0)e.unshift(t);e.on("close",socketOnClose);e.on("data",socketOnData);e.on("end",socketOnEnd);e.on("error",socketOnError);this._readyState=WebSocket.OPEN;this.emit("open")}emitClose(){if(!this._socket){this._readyState=WebSocket.CLOSED;this.emit("close",this._closeCode,this._closeMessage);return}if(this._extensions[u.extensionName]){this._extensions[u.extensionName].cleanup()}this._receiver.removeAllListeners();this._readyState=WebSocket.CLOSED;this.emit("close",this._closeCode,this._closeMessage)}close(e,t){if(this.readyState===WebSocket.CLOSED)return;if(this.readyState===WebSocket.CONNECTING){const e="WebSocket was closed before the connection was established";abortHandshake(this,this._req,e);return}if(this.readyState===WebSocket.CLOSING){if(this._closeFrameSent&&(this._closeFrameReceived||this._receiver._writableState.errorEmitted)){this._socket.end()}return}this._readyState=WebSocket.CLOSING;this._sender.close(e,t,!this._isServer,(e=>{if(e)return;this._closeFrameSent=true;if(this._closeFrameReceived||this._receiver._writableState.errorEmitted){this._socket.end()}}));this._closeTimer=setTimeout(this._socket.destroy.bind(this._socket),N)}pause(){if(this.readyState===WebSocket.CONNECTING||this.readyState===WebSocket.CLOSED){return}this._paused=true;this._socket.pause()}ping(e,t,s){if(this.readyState===WebSocket.CONNECTING){throw new Error("WebSocket is not open: readyState 0 (CONNECTING)")}if(typeof e==="function"){s=e;e=t=undefined}else if(typeof t==="function"){s=t;t=undefined}if(typeof e==="number")e=e.toString();if(this.readyState!==WebSocket.OPEN){sendAfterClose(this,e,s);return}if(t===undefined)t=!this._isServer;this._sender.ping(e||b,t,s)}pong(e,t,s){if(this.readyState===WebSocket.CONNECTING){throw new Error("WebSocket is not open: readyState 0 (CONNECTING)")}if(typeof e==="function"){s=e;e=t=undefined}else if(typeof t==="function"){s=t;t=undefined}if(typeof e==="number")e=e.toString();if(this.readyState!==WebSocket.OPEN){sendAfterClose(this,e,s);return}if(t===undefined)t=!this._isServer;this._sender.pong(e||b,t,s)}resume(){if(this.readyState===WebSocket.CONNECTING||this.readyState===WebSocket.CLOSED){return}this._paused=false;if(!this._receiver._writableState.needDrain)this._socket.resume()}send(e,t,s){if(this.readyState===WebSocket.CONNECTING){throw new Error("WebSocket is not open: readyState 0 (CONNECTING)")}if(typeof t==="function"){s=t;t={}}if(typeof e==="number")e=e.toString();if(this.readyState!==WebSocket.OPEN){sendAfterClose(this,e,s);return}const r={binary:typeof e!=="string",mask:!this._isServer,compress:true,fin:true,...t};if(!this._extensions[u.extensionName]){r.compress=false}this._sender.send(e||b,r,s)}terminate(){if(this.readyState===WebSocket.CLOSED)return;if(this.readyState===WebSocket.CONNECTING){const e="WebSocket was closed before the connection was established";abortHandshake(this,this._req,e);return}if(this._socket){this._readyState=WebSocket.CLOSING;this._socket.destroy()}}}Object.defineProperty(WebSocket,"CONNECTING",{enumerable:true,value:P.indexOf("CONNECTING")});Object.defineProperty(WebSocket.prototype,"CONNECTING",{enumerable:true,value:P.indexOf("CONNECTING")});Object.defineProperty(WebSocket,"OPEN",{enumerable:true,value:P.indexOf("OPEN")});Object.defineProperty(WebSocket.prototype,"OPEN",{enumerable:true,value:P.indexOf("OPEN")});Object.defineProperty(WebSocket,"CLOSING",{enumerable:true,value:P.indexOf("CLOSING")});Object.defineProperty(WebSocket.prototype,"CLOSING",{enumerable:true,value:P.indexOf("CLOSING")});Object.defineProperty(WebSocket,"CLOSED",{enumerable:true,value:P.indexOf("CLOSED")});Object.defineProperty(WebSocket.prototype,"CLOSED",{enumerable:true,value:P.indexOf("CLOSED")});["binaryType","bufferedAmount","extensions","isPaused","protocol","readyState","url"].forEach((e=>{Object.defineProperty(WebSocket.prototype,e,{enumerable:true})}));["open","error","close","message"].forEach((e=>{Object.defineProperty(WebSocket.prototype,`on${e}`,{enumerable:true,get(){for(const t of this.listeners(e)){if(t[S])return t[y]}return null},set(t){for(const t of this.listeners(e)){if(t[S]){this.removeListener(e,t);break}}if(typeof t!=="function")return;this.addEventListener(e,t,{[S]:true})}})}));WebSocket.prototype.addEventListener=v;WebSocket.prototype.removeEventListener=x;e.exports=WebSocket;function initAsClient(e,t,s,r){const o={protocolVersion:W[1],maxPayload:100*1024*1024,skipUTF8Validation:false,perMessageDeflate:true,followRedirects:false,maxRedirects:10,...r,createConnection:undefined,socketPath:undefined,hostname:undefined,protocol:undefined,timeout:undefined,method:"GET",host:undefined,path:undefined,port:undefined};if(!W.includes(o.protocolVersion)){throw new RangeError(`Unsupported protocol version: ${o.protocolVersion} `+`(supported versions: ${W.join(", ")})`)}let a;if(t instanceof d){a=t}else{try{a=new d(t)}catch(e){throw new SyntaxError(`Invalid URL: ${t}`)}}if(a.protocol==="http:"){a.protocol="ws:"}else if(a.protocol==="https:"){a.protocol="wss:"}e._url=a.href;const f=a.protocol==="wss:";const h=a.protocol==="ws+unix:";let _;if(a.protocol!=="ws:"&&!f&&!h){_='The URL\'s protocol must be one of "ws:", "wss:", '+'"http:", "https", or "ws+unix:"'}else if(h&&!a.pathname){_="The URL's pathname is empty"}else if(a.hash){_="The URL contains a fragment identifier"}if(_){const t=new SyntaxError(_);if(e._redirects===0){throw t}else{emitErrorAndClose(e,t);return}}const p=f?443:80;const m=c(16).toString("base64");const b=f?i.request:n.request;const S=new Set;let y;o.createConnection=f?tlsConnect:netConnect;o.defaultPort=o.defaultPort||p;o.port=a.port||p;o.host=a.hostname.startsWith("[")?a.hostname.slice(1,-1):a.hostname;o.headers={...o.headers,"Sec-WebSocket-Version":o.protocolVersion,"Sec-WebSocket-Key":m,Connection:"Upgrade",Upgrade:"websocket"};o.path=a.pathname+a.search;o.timeout=o.handshakeTimeout;if(o.perMessageDeflate){y=new u(o.perMessageDeflate!==true?o.perMessageDeflate:{},false,o.maxPayload);o.headers["Sec-WebSocket-Extensions"]=O({[u.extensionName]:y.offer()})}if(s.length){for(const e of s){if(typeof e!=="string"||!B.test(e)||S.has(e)){throw new SyntaxError("An invalid or duplicated subprotocol was specified")}S.add(e)}o.headers["Sec-WebSocket-Protocol"]=s.join(",")}if(o.origin){if(o.protocolVersion<13){o.headers["Sec-WebSocket-Origin"]=o.origin}else{o.headers.Origin=o.origin}}if(a.username||a.password){o.auth=`${a.username}:${a.password}`}if(h){const e=o.path.split(":");o.socketPath=e[0];o.path=e[1]}let g;if(o.followRedirects){if(e._redirects===0){e._originalIpc=h;e._originalSecure=f;e._originalHostOrSocketPath=h?o.socketPath:a.host;const t=r&&r.headers;r={...r,headers:{}};if(t){for(const[e,s]of Object.entries(t)){r.headers[e.toLowerCase()]=s}}}else if(e.listenerCount("redirect")===0){const t=h?e._originalIpc?o.socketPath===e._originalHostOrSocketPath:false:e._originalIpc?false:a.host===e._originalHostOrSocketPath;if(!t||e._originalSecure&&!f){delete o.headers.authorization;delete o.headers.cookie;if(!t)delete o.headers.host;o.auth=undefined}}if(o.auth&&!r.headers.authorization){r.headers.authorization="Basic "+Buffer.from(o.auth).toString("base64")}g=e._req=b(o);if(e._redirects){e.emit("redirect",e.url,g)}}else{g=e._req=b(o)}if(o.timeout){g.on("timeout",(()=>{abortHandshake(e,g,"Opening handshake has timed out")}))}g.on("error",(t=>{if(g===null||g[L])return;g=e._req=null;emitErrorAndClose(e,t)}));g.on("response",(i=>{const n=i.headers.location;const a=i.statusCode;if(n&&o.followRedirects&&a>=300&&a<400){if(++e._redirects>o.maxRedirects){abortHandshake(e,g,"Maximum redirects exceeded");return}g.abort();let i;try{i=new d(n,t)}catch(t){const s=new SyntaxError(`Invalid URL: ${n}`);emitErrorAndClose(e,s);return}initAsClient(e,i,s,r)}else if(!e.emit("unexpected-response",g,i)){abortHandshake(e,g,`Unexpected server response: ${i.statusCode}`)}}));g.on("upgrade",((t,s,r)=>{e.emit("upgrade",t);if(e.readyState!==WebSocket.CONNECTING)return;g=e._req=null;if(t.headers.upgrade.toLowerCase()!=="websocket"){abortHandshake(e,s,"Invalid Upgrade header");return}const i=l("sha1").update(m+k).digest("base64");if(t.headers["sec-websocket-accept"]!==i){abortHandshake(e,s,"Invalid Sec-WebSocket-Accept header");return}const n=t.headers["sec-websocket-protocol"];let a;if(n!==undefined){if(!S.size){a="Server sent a subprotocol but none was requested"}else if(!S.has(n)){a="Server sent an invalid subprotocol"}}else if(S.size){a="Server sent no subprotocol"}if(a){abortHandshake(e,s,a);return}if(n)e._protocol=n;const c=t.headers["sec-websocket-extensions"];if(c!==undefined){if(!y){const t="Server sent a Sec-WebSocket-Extensions header but no extension "+"was requested";abortHandshake(e,s,t);return}let t;try{t=C(c)}catch(t){const r="Invalid Sec-WebSocket-Extensions header";abortHandshake(e,s,r);return}const r=Object.keys(t);if(r.length!==1||r[0]!==u.extensionName){const t="Server indicated an extension that was not requested";abortHandshake(e,s,t);return}try{y.accept(t[u.extensionName])}catch(t){const r="Invalid Sec-WebSocket-Extensions header";abortHandshake(e,s,r);return}e._extensions[u.extensionName]=y}e.setSocket(s,r,{generateMask:o.generateMask,maxPayload:o.maxPayload,skipUTF8Validation:o.skipUTF8Validation})}));if(o.finishRequest){o.finishRequest(g,e)}else{g.end()}}function emitErrorAndClose(e,t){e._readyState=WebSocket.CLOSING;e.emit("error",t);e.emitClose()}function netConnect(e){e.path=e.socketPath;return o.connect(e)}function tlsConnect(e){e.path=undefined;if(!e.servername&&e.servername!==""){e.servername=o.isIP(e.host)?"":e.host}return a.connect(e)}function abortHandshake(e,t,s){e._readyState=WebSocket.CLOSING;const r=new Error(s);Error.captureStackTrace(r,abortHandshake);if(t.setHeader){t[L]=true;t.abort();if(t.socket&&!t.socket.destroyed){t.socket.destroy()}process.nextTick(emitErrorAndClose,e,r)}else{t.destroy(r);t.once("error",e.emit.bind(e,"error"));t.once("close",e.emitClose.bind(e))}}function sendAfterClose(e,t,s){if(t){const s=T(t).length;if(e._socket)e._sender._bufferedBytes+=s;else e._bufferedAmount+=s}if(s){const t=new Error(`WebSocket is not open: readyState ${e.readyState} `+`(${P[e.readyState]})`);process.nextTick(s,t)}}function receiverOnConclude(e,t){const s=this[E];s._closeFrameReceived=true;s._closeMessage=t;s._closeCode=e;if(s._socket[E]===undefined)return;s._socket.removeListener("data",socketOnData);process.nextTick(resume,s._socket);if(e===1005)s.close();else s.close(e,t)}function receiverOnDrain(){const e=this[E];if(!e.isPaused)e._socket.resume()}function receiverOnError(e){const t=this[E];if(t._socket[E]!==undefined){t._socket.removeListener("data",socketOnData);process.nextTick(resume,t._socket);t.close(e[g])}t.emit("error",e)}function receiverOnFinish(){this[E].emitClose()}function receiverOnMessage(e,t){this[E].emit("message",e,t)}function receiverOnPing(e){const t=this[E];t.pong(e,!t._isServer,w);t.emit("ping",e)}function receiverOnPong(e){this[E].emit("pong",e)}function resume(e){e.resume()}function socketOnClose(){const e=this[E];this.removeListener("close",socketOnClose);this.removeListener("data",socketOnData);this.removeListener("end",socketOnEnd);e._readyState=WebSocket.CLOSING;let t;if(!this._readableState.endEmitted&&!e._closeFrameReceived&&!e._receiver._writableState.errorEmitted&&(t=e._socket.read())!==null){e._receiver.write(t)}e._receiver.end();this[E]=undefined;clearTimeout(e._closeTimer);if(e._receiver._writableState.finished||e._receiver._writableState.errorEmitted){e.emitClose()}else{e._receiver.on("error",receiverOnFinish);e._receiver.on("finish",receiverOnFinish)}}function socketOnData(e){if(!this[E]._receiver.write(e)){this.pause()}}function socketOnEnd(){const e=this[E];e._readyState=WebSocket.CLOSING;e._receiver.end();this.end()}function socketOnError(){const e=this[E];this.removeListener("error",socketOnError);this.on("error",w);if(e){e._readyState=WebSocket.CLOSING;this.destroy()}}},815:module=>{module.exports=eval("require")("bufferutil")},646:module=>{module.exports=eval("require")("utf-8-validate")},300:e=>{"use strict";e.exports=require("buffer")},113:e=>{"use strict";e.exports=require("crypto")},361:e=>{"use strict";e.exports=require("events")},685:e=>{"use strict";e.exports=require("http")},687:e=>{"use strict";e.exports=require("https")},808:e=>{"use strict";e.exports=require("net")},781:e=>{"use strict";e.exports=require("stream")},404:e=>{"use strict";e.exports=require("tls")},310:e=>{"use strict";e.exports=require("url")},796:e=>{"use strict";e.exports=require("zlib")}};var __webpack_module_cache__={};function __nccwpck_require__(e){var t=__webpack_module_cache__[e];if(t!==undefined){return t.exports}var s=__webpack_module_cache__[e]={exports:{}};var r=true;try{__webpack_modules__[e](s,s.exports,__nccwpck_require__);r=false}finally{if(r)delete __webpack_module_cache__[e]}return s.exports}if(typeof __nccwpck_require__!=="undefined")__nccwpck_require__.ab=__dirname+"/";var __webpack_exports__=__nccwpck_require__(360);module.exports=__webpack_exports__})();
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2011 Einar Otto Stangvik <einaros@gmail.com>
2
+ Copyright (c) 2013 Arnout Kazemier and contributors
3
+ Copyright (c) 2016 Luigi Pinca and contributors
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy of
6
+ this software and associated documentation files (the "Software"), to deal in
7
+ the Software without restriction, including without limitation the rights to
8
+ use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
9
+ the Software, and to permit persons to whom the Software is furnished to do so,
10
+ subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
17
+ FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
18
+ COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
19
+ IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
20
+ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1 @@
1
+ {"name":"ws","author":"Einar Otto Stangvik <einaros@gmail.com> (http://2x.io)","version":"8.14.2","license":"MIT"}
@@ -2,6 +2,9 @@ import type { RsbuildMode } from '..';
2
2
  export type CommonOptions = {
3
3
  config?: string;
4
4
  };
5
+ export type BuildOptions = CommonOptions & {
6
+ watch?: boolean;
7
+ };
5
8
  export type InspectOptions = CommonOptions & {
6
9
  env: RsbuildMode;
7
10
  output: string;
@@ -62,7 +62,7 @@ async function init({
62
62
  }
63
63
  }
64
64
  function runCli() {
65
- import_commander.program.name("rsbuild").usage("<command> [options]").version("0.1.1");
65
+ import_commander.program.name("rsbuild").usage("<command> [options]").version("0.1.2");
66
66
  import_commander.program.command("dev").option(`--open`, "open the page in browser on startup").option(
67
67
  "-c --config <config>",
68
68
  "specify the configuration file, can be a relative or absolute path"
@@ -78,13 +78,15 @@ function runCli() {
78
78
  process.exit(1);
79
79
  }
80
80
  });
81
- import_commander.program.command("build").option(
81
+ import_commander.program.command("build").option(`-w --watch`, "turn on watch mode, watch for changes and rebuild").option(
82
82
  "-c --config <config>",
83
83
  "specify the configuration file, can be a relative or absolute path"
84
84
  ).description("build the app for production").action(async (options) => {
85
85
  try {
86
86
  const rsbuild = await init({ cliOptions: options });
87
- await (rsbuild == null ? void 0 : rsbuild.build());
87
+ await (rsbuild == null ? void 0 : rsbuild.build({
88
+ watch: options.watch
89
+ }));
88
90
  } catch (err) {
89
91
  import_shared.logger.error("Failed to build.");
90
92
  import_shared.logger.error(err);
@@ -34,7 +34,7 @@ function prepareCli() {
34
34
  if (!npm_execpath || npm_execpath.includes("npx-cli.js")) {
35
35
  console.log();
36
36
  }
37
- import_rslog.logger.greet(` ${`Rsbuild v${"0.1.1"}`}
37
+ import_rslog.logger.greet(` ${`Rsbuild v${"0.1.2"}`}
38
38
  `);
39
39
  }
40
40
  // Annotate the CommonJS export names for ESM import in node:
@@ -12,6 +12,6 @@ export declare function getFavicon(entryName: string, config: {
12
12
  export declare function getMetaTags(entryName: string, config: {
13
13
  html: HtmlConfig;
14
14
  output: NormalizedOutputConfig;
15
- }): Promise<import("@rsbuild/shared").MetaOptions>;
15
+ }, templateContent?: string): import("@rsbuild/shared").MetaOptions;
16
16
  export declare const applyInjectTags: (api: SharedRsbuildPluginAPI) => void;
17
17
  export declare const pluginHtml: () => RsbuildPlugin;
@@ -98,13 +98,20 @@ function getFavicon(entryName, config) {
98
98
  useObjectParam: true
99
99
  });
100
100
  }
101
- async function getMetaTags(entryName, config) {
102
- return (0, import_shared.mergeChainedOptions)({
101
+ function getMetaTags(entryName, config, templateContent) {
102
+ const metaTags = (0, import_shared.mergeChainedOptions)({
103
103
  defaults: {},
104
104
  options: config.html.meta,
105
105
  utils: { entryName },
106
106
  useObjectParam: true
107
107
  });
108
+ if (templateContent && metaTags.charset) {
109
+ const charsetRegExp = /<meta[^>]+charset=["'][^>]*>/i;
110
+ if (charsetRegExp.test(templateContent)) {
111
+ delete metaTags.charset;
112
+ }
113
+ }
114
+ return metaTags;
108
115
  }
109
116
  function getTemplateParameters(entryName, config, assetPrefix) {
110
117
  return (compilation, assets, assetTags, pluginOptions) => {
@@ -201,7 +208,7 @@ const pluginHtml = () => ({
201
208
  config,
202
209
  assetPrefix
203
210
  );
204
- const metaTags = await getMetaTags(entryName, config);
211
+ const metaTags = getMetaTags(entryName, config, templateContent);
205
212
  const pluginOptions = {
206
213
  meta: metaTags,
207
214
  chunks,
@@ -1,4 +1,4 @@
1
- import { type RspackConfig, CreateDevMiddlewareReturns, type RspackCompiler, type RspackMultiCompiler } from '@rsbuild/shared';
1
+ import { type RspackConfig, type RspackCompiler, type RspackMultiCompiler, type CreateDevMiddlewareReturns } from '@rsbuild/shared';
2
2
  import { type InitConfigsOptions } from './initConfigs';
3
3
  import type { Context } from '../../types';
4
4
  export declare function createCompiler({
@@ -35,6 +35,7 @@ module.exports = __toCommonJS(createCompiler_exports);
35
35
  var import_shared = require("@rsbuild/shared");
36
36
  var import_devMiddleware = require("./devMiddleware");
37
37
  var import_initConfigs = require("./initConfigs");
38
+ var import_shared2 = require("../shared");
38
39
  async function createCompiler({
39
40
  context,
40
41
  rspackConfigs
@@ -44,11 +45,26 @@ async function createCompiler({
44
45
  bundlerConfigs: rspackConfigs
45
46
  });
46
47
  const { rspack } = await Promise.resolve().then(() => __toESM(require("@rspack/core")));
48
+ if (!await (0, import_shared2.isSatisfyRspackVersion)(rspack.rspackVersion)) {
49
+ throw new Error(
50
+ `The current Rspack version does not meet the requirements, the minimum supported version of Rspack is ${import_shared.color.green(
51
+ import_shared2.rspackMinVersion
52
+ )}`
53
+ );
54
+ }
47
55
  const compiler = rspackConfigs.length === 1 ? rspack(rspackConfigs[0]) : rspack(rspackConfigs);
48
56
  let isFirstCompile = true;
49
57
  compiler.hooks.watchRun.tap("rsbuild:compiling", () => {
58
+ if (isFirstCompile) {
59
+ import_shared.logger.start(`Use Rspack v${rspack.rspackVersion}`);
60
+ }
50
61
  import_shared.logger.start("Compiling...");
51
62
  });
63
+ if ((0, import_shared.isProd)()) {
64
+ compiler.hooks.run.tap("rsbuild:run", () => {
65
+ import_shared.logger.start(`Use Rspack v${rspack.rspackVersion}`);
66
+ });
67
+ }
52
68
  compiler.hooks.done.tap("rsbuild:done", async (stats) => {
53
69
  const obj = stats.toJson({
54
70
  all: false,
@@ -64,7 +64,7 @@ function createContextByConfig(options, bundlerType, sourceConfig = {}, outputCo
64
64
  entry: sourceConfig.entry || // TODO: remove sourceConfig.entries in v0.2.0
65
65
  // compat with previous config
66
66
  sourceConfig.entries || getDefaultEntry(rootPath),
67
- version: "0.1.1",
67
+ version: "0.1.2",
68
68
  target,
69
69
  rootPath,
70
70
  distPath,
@@ -41,13 +41,6 @@ function rspackProvider({
41
41
  }) {
42
42
  const rsbuildConfig = (0, import_shared.pickRsbuildConfig)(originalRsbuildConfig);
43
43
  return async ({ pluginStore, rsbuildOptions, plugins }) => {
44
- if (!await (0, import_shared2.isSatisfyRspackMinimumVersion)()) {
45
- throw new Error(
46
- `The current Rspack version does not meet the requirements, the minimum supported version of Rspack is ${import_shared.color.green(
47
- import_shared2.supportedRspackMinimumVersion
48
- )}`
49
- );
50
- }
51
44
  const context = await (0, import_createContext.createContext)(rsbuildOptions, rsbuildConfig);
52
45
  const pluginAPI = (0, import_initPlugins.getPluginAPI)({ context, pluginStore });
53
46
  context.pluginAPI = pluginAPI;
@@ -2,7 +2,7 @@ import { RsbuildPlugin } from '../types';
2
2
  import { Plugins } from '@rsbuild/shared';
3
3
  export declare const applyDefaultPlugins: (plugins: Plugins) => import("@rsbuild/shared").AwaitableGetter<RsbuildPlugin>;
4
4
  export declare const getRspackVersion: () => Promise<string>;
5
- export declare const supportedRspackMinimumVersion = "0.3.6";
6
- export declare const isSatisfyRspackMinimumVersion: (customVersion?: string) => Promise<boolean>;
5
+ export declare const rspackMinVersion = "0.3.6";
6
+ export declare const isSatisfyRspackVersion: (version: string) => Promise<boolean>;
7
7
  export declare const getCompiledPath: (packageName: string) => string;
8
8
  export declare const BUILTIN_LOADER = "builtin:";
@@ -32,8 +32,8 @@ __export(shared_exports, {
32
32
  applyDefaultPlugins: () => applyDefaultPlugins,
33
33
  getCompiledPath: () => getCompiledPath,
34
34
  getRspackVersion: () => getRspackVersion,
35
- isSatisfyRspackMinimumVersion: () => isSatisfyRspackMinimumVersion,
36
- supportedRspackMinimumVersion: () => supportedRspackMinimumVersion
35
+ isSatisfyRspackVersion: () => isSatisfyRspackVersion,
36
+ rspackMinVersion: () => rspackMinVersion
37
37
  });
38
38
  module.exports = __toCommonJS(shared_exports);
39
39
  var import_path = require("path");
@@ -87,14 +87,13 @@ const getRspackVersion = async () => {
87
87
  return "";
88
88
  }
89
89
  };
90
- const supportedRspackMinimumVersion = "0.3.6";
91
- const isSatisfyRspackMinimumVersion = async (customVersion) => {
92
- let version = customVersion || await getRspackVersion();
90
+ const rspackMinVersion = "0.3.6";
91
+ const isSatisfyRspackVersion = async (version) => {
93
92
  const semver = await Promise.resolve().then(() => __toESM(require("semver")));
94
93
  if (version.includes("-canary")) {
95
94
  version = version.split("-canary")[0];
96
95
  }
97
- return version ? semver.lte(supportedRspackMinimumVersion, version) : true;
96
+ return version ? semver.lte(rspackMinVersion, version) : true;
98
97
  };
99
98
  const getCompiledPath = (packageName) => {
100
99
  const providerCompilerPath = (0, import_path.join)(__dirname, "../../compiled", packageName);
@@ -111,6 +110,6 @@ const BUILTIN_LOADER = "builtin:";
111
110
  applyDefaultPlugins,
112
111
  getCompiledPath,
113
112
  getRspackVersion,
114
- isSatisfyRspackMinimumVersion,
115
- supportedRspackMinimumVersion
113
+ isSatisfyRspackVersion,
114
+ rspackMinVersion
116
115
  });
@@ -1,7 +1,7 @@
1
1
  /// <reference types="node" />
2
- import { Server } from 'http';
3
- import ws from 'ws';
4
- import { Stats, DevConfig } from '@rsbuild/shared';
2
+ import type { Server } from 'http';
3
+ import ws from '../../../compiled/ws';
4
+ import { type Stats, type DevConfig } from '@rsbuild/shared';
5
5
  export default class SocketServer {
6
6
  private wsServer;
7
7
  private readonly sockets;
@@ -31,7 +31,7 @@ __export(socketServer_exports, {
31
31
  default: () => SocketServer
32
32
  });
33
33
  module.exports = __toCommonJS(socketServer_exports);
34
- var import_ws = __toESM(require("ws"));
34
+ var import_ws = __toESM(require("../../../compiled/ws"));
35
35
  var import_shared = require("@rsbuild/shared");
36
36
  class SocketServer {
37
37
  constructor(options) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rsbuild/core",
3
- "version": "0.1.1",
3
+ "version": "0.1.2",
4
4
  "description": "Unleash the power of Rspack with the out-of-the-box build tool.",
5
5
  "homepage": "https://rsbuild.dev",
6
6
  "bugs": {
@@ -63,12 +63,10 @@
63
63
  "html-webpack-plugin": "npm:html-rspack-plugin@5.5.7",
64
64
  "postcss": "8.4.31",
65
65
  "semver": "^7.5.4",
66
- "ws": "^8.2.0",
67
- "@rsbuild/shared": "0.1.1"
66
+ "@rsbuild/shared": "0.1.2"
68
67
  },
69
68
  "devDependencies": {
70
69
  "@types/node": "^16",
71
- "@types/ws": "^8.2.0",
72
70
  "@types/semver": "^7.5.4",
73
71
  "typescript": "^5.3.0"
74
72
  },