@rspack/dev-server 2.0.0 → 2.0.1
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/client/utils/ansiHTML.js +1 -1
- package/dist/0~http-proxy-middleware.js +37 -7
- package/dist/0~launch-editor.js +1 -1
- package/dist/index.d.ts +423 -2
- package/package.json +12 -12
package/client/utils/ansiHTML.js
CHANGED
|
@@ -2842,7 +2842,7 @@ function setupOutgoing(outgoing, options, req, forward) {
|
|
|
2842
2842
|
if (options.ca) outgoing.ca = options.ca;
|
|
2843
2843
|
if (isSSL.test(options[forward || "target"].protocol ?? "http")) outgoing.rejectUnauthorized = void 0 === options.secure ? true : options.secure;
|
|
2844
2844
|
if (void 0 !== options.agent) outgoing.agent = options.agent || false;
|
|
2845
|
-
else if (req.httpVersionMajor > 1) outgoing.agent = false;
|
|
2845
|
+
else if (req.httpVersionMajor > 1 || upgradeHeader.test(req.headers.connection || "")) outgoing.agent = false;
|
|
2846
2846
|
else {
|
|
2847
2847
|
const targetProto = options[forward || "target"].protocol ?? "http";
|
|
2848
2848
|
outgoing.agent = isSSL.test(targetProto) ? defaultAgents.https : defaultAgents.http;
|
|
@@ -3040,7 +3040,7 @@ const webIncomingMiddleware = [
|
|
|
3040
3040
|
"proto"
|
|
3041
3041
|
]){
|
|
3042
3042
|
const key = "x-forwarded-" + header;
|
|
3043
|
-
if (!req.headers[key]) req.headers[key] = values[header];
|
|
3043
|
+
if (!req.headers[key] && void 0 !== values[header]) req.headers[key] = values[header];
|
|
3044
3044
|
}
|
|
3045
3045
|
req.headers["x-forwarded-host"] = req.headers["x-forwarded-host"] || req.headers[":authority"] || req.headers.host || "";
|
|
3046
3046
|
}),
|
|
@@ -3197,7 +3197,7 @@ const websocketIncomingMiddleware = [
|
|
|
3197
3197
|
"proto"
|
|
3198
3198
|
]){
|
|
3199
3199
|
const key = "x-forwarded-" + header;
|
|
3200
|
-
if (!req.headers[key]) req.headers[key] = values[header];
|
|
3200
|
+
if (!req.headers[key] && void 0 !== values[header]) req.headers[key] = values[header];
|
|
3201
3201
|
}
|
|
3202
3202
|
}),
|
|
3203
3203
|
defineProxyMiddleware((req, socket, options, server, head, callback)=>{
|
|
@@ -3274,7 +3274,7 @@ var ProxyServer = class extends EventEmitter {
|
|
|
3274
3274
|
this.web = _createProxyFn("web", this);
|
|
3275
3275
|
this.ws = _createProxyFn("ws", this);
|
|
3276
3276
|
}
|
|
3277
|
-
listen(port, hostname) {
|
|
3277
|
+
listen(port, hostname, listeningListener) {
|
|
3278
3278
|
const closure = (req, res)=>this.web(req, res);
|
|
3279
3279
|
if (this.options.http2) {
|
|
3280
3280
|
if (!this.options.ssl) throw new Error("HTTP/2 requires ssl option");
|
|
@@ -3287,7 +3287,7 @@ var ProxyServer = class extends EventEmitter {
|
|
|
3287
3287
|
if (this.options.ws) this._server.on("upgrade", (req, socket, head)=>{
|
|
3288
3288
|
this.ws(req, socket, this.options, head).catch(()=>{});
|
|
3289
3289
|
});
|
|
3290
|
-
this._server.listen(port, hostname);
|
|
3290
|
+
this._server.listen(port, hostname, listeningListener);
|
|
3291
3291
|
return this;
|
|
3292
3292
|
}
|
|
3293
3293
|
close(callback) {
|
|
@@ -3640,8 +3640,8 @@ async function getTarget(req, config) {
|
|
|
3640
3640
|
}
|
|
3641
3641
|
function getTargetFromProxyTable(req, table) {
|
|
3642
3642
|
let result;
|
|
3643
|
-
const host = req.headers.host;
|
|
3644
|
-
const path = req.url;
|
|
3643
|
+
const host = req.headers.host ?? '';
|
|
3644
|
+
const path = req.url ?? '';
|
|
3645
3645
|
const hostAndPath = host + path;
|
|
3646
3646
|
for (const [key, value] of Object.entries(table))if (containsPath(key)) {
|
|
3647
3647
|
if (hostAndPath.indexOf(key) > -1) {
|
|
@@ -3659,6 +3659,35 @@ function getTargetFromProxyTable(req, table) {
|
|
|
3659
3659
|
function containsPath(v) {
|
|
3660
3660
|
return v.indexOf('/') > -1;
|
|
3661
3661
|
}
|
|
3662
|
+
const ipv6_debug = Debug.extend('ipv6');
|
|
3663
|
+
function normalizeIPv6LiteralTargets(options) {
|
|
3664
|
+
options.target = normalizeIPv6ProxyTarget(options.target, 'target');
|
|
3665
|
+
options.forward = normalizeIPv6ProxyTarget(options.forward, 'forward');
|
|
3666
|
+
}
|
|
3667
|
+
function normalizeIPv6ProxyTarget(target, optionName) {
|
|
3668
|
+
const targetUrl = toTargetUrl(target);
|
|
3669
|
+
if (targetUrl && isBracketedIPv6Hostname(targetUrl.hostname)) {
|
|
3670
|
+
ipv6_debug('normalized IPv6 "%s" %s', optionName, target);
|
|
3671
|
+
return {
|
|
3672
|
+
hostname: stripBrackets(targetUrl.hostname),
|
|
3673
|
+
pathname: targetUrl.pathname,
|
|
3674
|
+
port: targetUrl.port,
|
|
3675
|
+
protocol: targetUrl.protocol,
|
|
3676
|
+
search: targetUrl.search
|
|
3677
|
+
};
|
|
3678
|
+
}
|
|
3679
|
+
return target;
|
|
3680
|
+
}
|
|
3681
|
+
function toTargetUrl(target) {
|
|
3682
|
+
if ('string' == typeof target) return new URL(target);
|
|
3683
|
+
if (target instanceof URL) return target;
|
|
3684
|
+
}
|
|
3685
|
+
function isBracketedIPv6Hostname(hostname) {
|
|
3686
|
+
return hostname.startsWith('[') && hostname.endsWith(']');
|
|
3687
|
+
}
|
|
3688
|
+
function stripBrackets(hostname) {
|
|
3689
|
+
return hostname.replace(/^\[|\]$/g, '');
|
|
3690
|
+
}
|
|
3662
3691
|
class HttpProxyMiddleware {
|
|
3663
3692
|
wsInternalSubscribed = false;
|
|
3664
3693
|
serverOnCloseSubscribed = false;
|
|
@@ -3746,6 +3775,7 @@ class HttpProxyMiddleware {
|
|
|
3746
3775
|
prepareProxyRequest = async (req)=>{
|
|
3747
3776
|
const newProxyOptions = Object.assign({}, this.proxyOptions);
|
|
3748
3777
|
await this.applyRouter(req, newProxyOptions);
|
|
3778
|
+
normalizeIPv6LiteralTargets(newProxyOptions);
|
|
3749
3779
|
await this.applyPathRewrite(req, this.pathRewriter);
|
|
3750
3780
|
return newProxyOptions;
|
|
3751
3781
|
};
|
package/dist/0~launch-editor.js
CHANGED
|
@@ -442,7 +442,7 @@ __webpack_require__.add({
|
|
|
442
442
|
module.exports.createColors = createColors;
|
|
443
443
|
},
|
|
444
444
|
"./node_modules/.pnpm/shell-quote@1.8.3/node_modules/shell-quote/index.js" (__unused_rspack_module, exports, __webpack_require__) {
|
|
445
|
-
|
|
445
|
+
__webpack_require__("./node_modules/.pnpm/shell-quote@1.8.3/node_modules/shell-quote/quote.js");
|
|
446
446
|
exports.parse = __webpack_require__("./node_modules/.pnpm/shell-quote@1.8.3/node_modules/shell-quote/parse.js");
|
|
447
447
|
},
|
|
448
448
|
"./node_modules/.pnpm/shell-quote@1.8.3/node_modules/shell-quote/parse.js" (module) {
|
package/dist/index.d.ts
CHANGED
|
@@ -1,8 +1,14 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
|
|
3
|
+
import { Agent } from 'http';
|
|
1
4
|
import { API } from '@rspack/dev-middleware';
|
|
2
5
|
import { Callback } from '@rspack/dev-middleware';
|
|
6
|
+
import { ClientRequest } from 'http';
|
|
7
|
+
import { ClientRequestArgs } from 'http';
|
|
3
8
|
import { Compiler } from '@rspack/core';
|
|
4
9
|
import { DevServer as Configuration } from '@rspack/core';
|
|
5
10
|
import { Context } from '@rspack/dev-middleware';
|
|
11
|
+
import { createConnection } from 'net';
|
|
6
12
|
import type { DevServerClient } from '@rspack/core';
|
|
7
13
|
import type { DevServerHeaders } from '@rspack/core';
|
|
8
14
|
import type { DevServerHost } from '@rspack/core';
|
|
@@ -11,26 +17,33 @@ import type { DevServerOpenOptions } from '@rspack/core';
|
|
|
11
17
|
import type { DevServerProxyConfigArray } from '@rspack/core';
|
|
12
18
|
import type { DevServerStatic } from '@rspack/core';
|
|
13
19
|
import type { Dirent } from 'node:fs';
|
|
20
|
+
import { Duplex } from 'stream';
|
|
14
21
|
import { EventEmitter } from 'node:events';
|
|
22
|
+
import { EventEmitter as EventEmitter_2 } from 'events';
|
|
15
23
|
import * as http from 'node:http';
|
|
16
24
|
import type { IncomingMessage as IncomingMessage_2 } from 'node:http';
|
|
25
|
+
import { IncomingMessage as IncomingMessage_3 } from 'http';
|
|
17
26
|
import type { ListenOptions } from 'node:net';
|
|
18
27
|
import { MultiCompiler } from '@rspack/core';
|
|
19
28
|
import { MultiStats } from '@rspack/core';
|
|
20
29
|
import { Options } from '@rspack/dev-middleware';
|
|
30
|
+
import { OutgoingHttpHeaders } from 'http';
|
|
21
31
|
import { Readable } from 'node:stream';
|
|
32
|
+
import { SecureContextOptions } from 'tls';
|
|
22
33
|
import { Server as Server_2 } from 'node:net';
|
|
23
34
|
import { Server as Server_3 } from 'node:tls';
|
|
24
35
|
import type { Server as Server_4 } from 'node:http';
|
|
36
|
+
import { Server as Server_6 } from 'http';
|
|
37
|
+
import { Server as Server_7 } from 'https';
|
|
25
38
|
import type { ServerOptions } from 'node:https';
|
|
26
39
|
import type { ServerResponse } from 'node:http';
|
|
27
40
|
import { Socket } from 'node:net';
|
|
28
41
|
import { Stats } from 'node:fs';
|
|
29
42
|
import { Stats as Stats_2 } from '@rspack/core';
|
|
30
43
|
import { StatsOptions } from '@rspack/core';
|
|
44
|
+
import { URL as URL_2 } from 'url';
|
|
31
45
|
import type { WatchEventType } from 'node:fs';
|
|
32
|
-
import {
|
|
33
|
-
import { WebSocketServer as WebSocketServer_2 } from 'ws';
|
|
46
|
+
import { ZlibOptions } from 'zlib';
|
|
34
47
|
|
|
35
48
|
declare type AWF = {
|
|
36
49
|
stabilityThreshold: number;
|
|
@@ -57,6 +70,25 @@ declare type BasicOpts = {
|
|
|
57
70
|
|
|
58
71
|
declare type BasicServer = Server_2 | Server_3;
|
|
59
72
|
|
|
73
|
+
declare type BufferLike =
|
|
74
|
+
| string
|
|
75
|
+
| Buffer
|
|
76
|
+
| DataView
|
|
77
|
+
| number
|
|
78
|
+
| ArrayBufferView
|
|
79
|
+
| Uint8Array
|
|
80
|
+
| ArrayBuffer
|
|
81
|
+
| SharedArrayBuffer
|
|
82
|
+
| Blob
|
|
83
|
+
| readonly any[]
|
|
84
|
+
| readonly number[]
|
|
85
|
+
| { valueOf(): ArrayBuffer }
|
|
86
|
+
| { valueOf(): SharedArrayBuffer }
|
|
87
|
+
| { valueOf(): Uint8Array }
|
|
88
|
+
| { valueOf(): readonly number[] }
|
|
89
|
+
| { valueOf(): string }
|
|
90
|
+
| { [Symbol.toPrimitive](hint: string): string };
|
|
91
|
+
|
|
60
92
|
declare type ChokidarOptions = Partial<BasicOpts & {
|
|
61
93
|
ignored: Matcher | Matcher[];
|
|
62
94
|
awaitWriteFinish: boolean | Partial<AWF>;
|
|
@@ -510,6 +542,75 @@ declare interface Server extends EventEmitter {
|
|
|
510
542
|
listen(handle: unknown, listeningListener?: Function): http.Server;
|
|
511
543
|
}
|
|
512
544
|
|
|
545
|
+
declare class Server_5<
|
|
546
|
+
T extends typeof WebSocket_2 = typeof WebSocket_2,
|
|
547
|
+
U extends typeof IncomingMessage_3 = typeof IncomingMessage_3,
|
|
548
|
+
> extends EventEmitter_2 {
|
|
549
|
+
options: WebSocket_2.ServerOptions<T, U>;
|
|
550
|
+
path: string;
|
|
551
|
+
clients: Set<InstanceType<T>>;
|
|
552
|
+
|
|
553
|
+
constructor(options?: WebSocket_2.ServerOptions<T, U>, callback?: () => void);
|
|
554
|
+
|
|
555
|
+
address(): WebSocket_2.AddressInfo | string | null;
|
|
556
|
+
close(cb?: (err?: Error) => void): void;
|
|
557
|
+
handleUpgrade(
|
|
558
|
+
request: InstanceType<U>,
|
|
559
|
+
socket: Duplex,
|
|
560
|
+
upgradeHead: Buffer,
|
|
561
|
+
callback: (client: InstanceType<T>, request: InstanceType<U>) => void,
|
|
562
|
+
): void;
|
|
563
|
+
shouldHandle(request: InstanceType<U>): boolean | Promise<boolean>;
|
|
564
|
+
|
|
565
|
+
// Events
|
|
566
|
+
on(event: "connection", cb: (this: Server_5<T>, websocket: InstanceType<T>, request: InstanceType<U>) => void): this;
|
|
567
|
+
on(event: "error", cb: (this: Server_5<T>, error: Error) => void): this;
|
|
568
|
+
on(event: "headers", cb: (this: Server_5<T>, headers: string[], request: InstanceType<U>) => void): this;
|
|
569
|
+
on(event: "close" | "listening", cb: (this: Server_5<T>) => void): this;
|
|
570
|
+
on(
|
|
571
|
+
event: "wsClientError",
|
|
572
|
+
cb: (this: Server_5<T>, error: Error, socket: Duplex, request: InstanceType<U>) => void,
|
|
573
|
+
): this;
|
|
574
|
+
on(event: string | symbol, listener: (this: Server_5<T>, ...args: any[]) => void): this;
|
|
575
|
+
|
|
576
|
+
once(
|
|
577
|
+
event: "connection",
|
|
578
|
+
cb: (this: Server_5<T>, websocket: InstanceType<T>, request: InstanceType<U>) => void,
|
|
579
|
+
): this;
|
|
580
|
+
once(event: "error", cb: (this: Server_5<T>, error: Error) => void): this;
|
|
581
|
+
once(event: "headers", cb: (this: Server_5<T>, headers: string[], request: InstanceType<U>) => void): this;
|
|
582
|
+
once(event: "close" | "listening", cb: (this: Server_5<T>) => void): this;
|
|
583
|
+
once(
|
|
584
|
+
event: "wsClientError",
|
|
585
|
+
cb: (this: Server_5<T>, error: Error, socket: Duplex, request: InstanceType<U>) => void,
|
|
586
|
+
): this;
|
|
587
|
+
once(event: string | symbol, listener: (this: Server_5<T>, ...args: any[]) => void): this;
|
|
588
|
+
|
|
589
|
+
off(event: "connection", cb: (this: Server_5<T>, websocket: InstanceType<T>, request: InstanceType<U>) => void): this;
|
|
590
|
+
off(event: "error", cb: (this: Server_5<T>, error: Error) => void): this;
|
|
591
|
+
off(event: "headers", cb: (this: Server_5<T>, headers: string[], request: InstanceType<U>) => void): this;
|
|
592
|
+
off(event: "close" | "listening", cb: (this: Server_5<T>) => void): this;
|
|
593
|
+
off(
|
|
594
|
+
event: "wsClientError",
|
|
595
|
+
cb: (this: Server_5<T>, error: Error, socket: Duplex, request: InstanceType<U>) => void,
|
|
596
|
+
): this;
|
|
597
|
+
off(event: string | symbol, listener: (this: Server_5<T>, ...args: any[]) => void): this;
|
|
598
|
+
|
|
599
|
+
addListener(event: "connection", cb: (websocket: InstanceType<T>, request: InstanceType<U>) => void): this;
|
|
600
|
+
addListener(event: "error", cb: (error: Error) => void): this;
|
|
601
|
+
addListener(event: "headers", cb: (headers: string[], request: InstanceType<U>) => void): this;
|
|
602
|
+
addListener(event: "close" | "listening", cb: () => void): this;
|
|
603
|
+
addListener(event: "wsClientError", cb: (error: Error, socket: Duplex, request: InstanceType<U>) => void): this;
|
|
604
|
+
addListener(event: string | symbol, listener: (...args: any[]) => void): this;
|
|
605
|
+
|
|
606
|
+
removeListener(event: "connection", cb: (websocket: InstanceType<T>, request: InstanceType<U>) => void): this;
|
|
607
|
+
removeListener(event: "error", cb: (error: Error) => void): this;
|
|
608
|
+
removeListener(event: "headers", cb: (headers: string[], request: InstanceType<U>) => void): this;
|
|
609
|
+
removeListener(event: "close" | "listening", cb: () => void): this;
|
|
610
|
+
removeListener(event: "wsClientError", cb: (error: Error, socket: Duplex, request: InstanceType<U>) => void): this;
|
|
611
|
+
removeListener(event: string | symbol, listener: (...args: any[]) => void): this;
|
|
612
|
+
}
|
|
613
|
+
|
|
513
614
|
declare interface ServerConfiguration<A extends BasicApplication = Server, S extends BasicServer = Server_4> {
|
|
514
615
|
type?: ServerType<A, S>;
|
|
515
616
|
options?: ServerOptions;
|
|
@@ -572,8 +673,328 @@ declare class WatchHelper {
|
|
|
572
673
|
filterDir(entry: EntryInfo): boolean;
|
|
573
674
|
}
|
|
574
675
|
|
|
676
|
+
declare class WebSocket_2 extends EventEmitter_2 {
|
|
677
|
+
/** The connection is not yet open. */
|
|
678
|
+
static readonly CONNECTING: 0;
|
|
679
|
+
/** The connection is open and ready to communicate. */
|
|
680
|
+
static readonly OPEN: 1;
|
|
681
|
+
/** The connection is in the process of closing. */
|
|
682
|
+
static readonly CLOSING: 2;
|
|
683
|
+
/** The connection is closed. */
|
|
684
|
+
static readonly CLOSED: 3;
|
|
685
|
+
|
|
686
|
+
binaryType: "nodebuffer" | "arraybuffer" | "fragments";
|
|
687
|
+
readonly bufferedAmount: number;
|
|
688
|
+
readonly extensions: string;
|
|
689
|
+
/** Indicates whether the websocket is paused */
|
|
690
|
+
readonly isPaused: boolean;
|
|
691
|
+
readonly protocol: string;
|
|
692
|
+
/** The current state of the connection */
|
|
693
|
+
readonly readyState:
|
|
694
|
+
| typeof WebSocket_2.CONNECTING
|
|
695
|
+
| typeof WebSocket_2.OPEN
|
|
696
|
+
| typeof WebSocket_2.CLOSING
|
|
697
|
+
| typeof WebSocket_2.CLOSED;
|
|
698
|
+
readonly url: string;
|
|
699
|
+
|
|
700
|
+
/** The connection is not yet open. */
|
|
701
|
+
readonly CONNECTING: 0;
|
|
702
|
+
/** The connection is open and ready to communicate. */
|
|
703
|
+
readonly OPEN: 1;
|
|
704
|
+
/** The connection is in the process of closing. */
|
|
705
|
+
readonly CLOSING: 2;
|
|
706
|
+
/** The connection is closed. */
|
|
707
|
+
readonly CLOSED: 3;
|
|
708
|
+
|
|
709
|
+
onopen: ((event: WebSocket_2.Event) => void) | null;
|
|
710
|
+
onerror: ((event: WebSocket_2.ErrorEvent) => void) | null;
|
|
711
|
+
onclose: ((event: WebSocket_2.CloseEvent) => void) | null;
|
|
712
|
+
onmessage: ((event: WebSocket_2.MessageEvent) => void) | null;
|
|
713
|
+
|
|
714
|
+
constructor(address: null);
|
|
715
|
+
constructor(address: string | URL_2, options?: WebSocket_2.ClientOptions | ClientRequestArgs);
|
|
716
|
+
constructor(
|
|
717
|
+
address: string | URL_2,
|
|
718
|
+
protocols?: string | string[],
|
|
719
|
+
options?: WebSocket_2.ClientOptions | ClientRequestArgs,
|
|
720
|
+
);
|
|
721
|
+
|
|
722
|
+
close(code?: number, data?: string | Buffer): void;
|
|
723
|
+
ping(data?: any, mask?: boolean, cb?: (err: Error) => void): void;
|
|
724
|
+
pong(data?: any, mask?: boolean, cb?: (err: Error) => void): void;
|
|
725
|
+
// https://github.com/websockets/ws/issues/2076#issuecomment-1250354722
|
|
726
|
+
send(data: BufferLike, cb?: (err?: Error) => void): void;
|
|
727
|
+
send(
|
|
728
|
+
data: BufferLike,
|
|
729
|
+
options: {
|
|
730
|
+
mask?: boolean | undefined;
|
|
731
|
+
binary?: boolean | undefined;
|
|
732
|
+
compress?: boolean | undefined;
|
|
733
|
+
fin?: boolean | undefined;
|
|
734
|
+
},
|
|
735
|
+
cb?: (err?: Error) => void,
|
|
736
|
+
): void;
|
|
737
|
+
terminate(): void;
|
|
738
|
+
|
|
739
|
+
/**
|
|
740
|
+
* Pause the websocket causing it to stop emitting events. Some events can still be
|
|
741
|
+
* emitted after this is called, until all buffered data is consumed. This method
|
|
742
|
+
* is a noop if the ready state is `CONNECTING` or `CLOSED`.
|
|
743
|
+
*/
|
|
744
|
+
pause(): void;
|
|
745
|
+
/**
|
|
746
|
+
* Make a paused socket resume emitting events. This method is a noop if the ready
|
|
747
|
+
* state is `CONNECTING` or `CLOSED`.
|
|
748
|
+
*/
|
|
749
|
+
resume(): void;
|
|
750
|
+
|
|
751
|
+
// HTML5 WebSocket events
|
|
752
|
+
addEventListener<K extends keyof WebSocket_2.WebSocketEventMap>(
|
|
753
|
+
type: K,
|
|
754
|
+
listener:
|
|
755
|
+
| ((event: WebSocket_2.WebSocketEventMap[K]) => void)
|
|
756
|
+
| { handleEvent(event: WebSocket_2.WebSocketEventMap[K]): void },
|
|
757
|
+
options?: WebSocket_2.EventListenerOptions,
|
|
758
|
+
): void;
|
|
759
|
+
removeEventListener<K extends keyof WebSocket_2.WebSocketEventMap>(
|
|
760
|
+
type: K,
|
|
761
|
+
listener:
|
|
762
|
+
| ((event: WebSocket_2.WebSocketEventMap[K]) => void)
|
|
763
|
+
| { handleEvent(event: WebSocket_2.WebSocketEventMap[K]): void },
|
|
764
|
+
): void;
|
|
765
|
+
|
|
766
|
+
// Events
|
|
767
|
+
on(event: "close", listener: (this: WebSocket_2, code: number, reason: Buffer) => void): this;
|
|
768
|
+
on(event: "error", listener: (this: WebSocket_2, error: Error) => void): this;
|
|
769
|
+
on(event: "upgrade", listener: (this: WebSocket_2, request: IncomingMessage_3) => void): this;
|
|
770
|
+
on(event: "message", listener: (this: WebSocket_2, data: WebSocket_2.RawData, isBinary: boolean) => void): this;
|
|
771
|
+
on(event: "open", listener: (this: WebSocket_2) => void): this;
|
|
772
|
+
on(event: "ping" | "pong", listener: (this: WebSocket_2, data: Buffer) => void): this;
|
|
773
|
+
on(event: "redirect", listener: (this: WebSocket_2, url: string, request: ClientRequest) => void): this;
|
|
774
|
+
on(
|
|
775
|
+
event: "unexpected-response",
|
|
776
|
+
listener: (this: WebSocket_2, request: ClientRequest, response: IncomingMessage_3) => void,
|
|
777
|
+
): this;
|
|
778
|
+
on(event: string | symbol, listener: (this: WebSocket_2, ...args: any[]) => void): this;
|
|
779
|
+
|
|
780
|
+
once(event: "close", listener: (this: WebSocket_2, code: number, reason: Buffer) => void): this;
|
|
781
|
+
once(event: "error", listener: (this: WebSocket_2, error: Error) => void): this;
|
|
782
|
+
once(event: "upgrade", listener: (this: WebSocket_2, request: IncomingMessage_3) => void): this;
|
|
783
|
+
once(event: "message", listener: (this: WebSocket_2, data: WebSocket_2.RawData, isBinary: boolean) => void): this;
|
|
784
|
+
once(event: "open", listener: (this: WebSocket_2) => void): this;
|
|
785
|
+
once(event: "ping" | "pong", listener: (this: WebSocket_2, data: Buffer) => void): this;
|
|
786
|
+
once(event: "redirect", listener: (this: WebSocket_2, url: string, request: ClientRequest) => void): this;
|
|
787
|
+
once(
|
|
788
|
+
event: "unexpected-response",
|
|
789
|
+
listener: (this: WebSocket_2, request: ClientRequest, response: IncomingMessage_3) => void,
|
|
790
|
+
): this;
|
|
791
|
+
once(event: string | symbol, listener: (this: WebSocket_2, ...args: any[]) => void): this;
|
|
792
|
+
|
|
793
|
+
off(event: "close", listener: (this: WebSocket_2, code: number, reason: Buffer) => void): this;
|
|
794
|
+
off(event: "error", listener: (this: WebSocket_2, error: Error) => void): this;
|
|
795
|
+
off(event: "upgrade", listener: (this: WebSocket_2, request: IncomingMessage_3) => void): this;
|
|
796
|
+
off(event: "message", listener: (this: WebSocket_2, data: WebSocket_2.RawData, isBinary: boolean) => void): this;
|
|
797
|
+
off(event: "open", listener: (this: WebSocket_2) => void): this;
|
|
798
|
+
off(event: "ping" | "pong", listener: (this: WebSocket_2, data: Buffer) => void): this;
|
|
799
|
+
off(event: "redirect", listener: (this: WebSocket_2, url: string, request: ClientRequest) => void): this;
|
|
800
|
+
off(
|
|
801
|
+
event: "unexpected-response",
|
|
802
|
+
listener: (this: WebSocket_2, request: ClientRequest, response: IncomingMessage_3) => void,
|
|
803
|
+
): this;
|
|
804
|
+
off(event: string | symbol, listener: (this: WebSocket_2, ...args: any[]) => void): this;
|
|
805
|
+
|
|
806
|
+
addListener(event: "close", listener: (code: number, reason: Buffer) => void): this;
|
|
807
|
+
addListener(event: "error", listener: (error: Error) => void): this;
|
|
808
|
+
addListener(event: "upgrade", listener: (request: IncomingMessage_3) => void): this;
|
|
809
|
+
addListener(event: "message", listener: (data: WebSocket_2.RawData, isBinary: boolean) => void): this;
|
|
810
|
+
addListener(event: "open", listener: () => void): this;
|
|
811
|
+
addListener(event: "ping" | "pong", listener: (data: Buffer) => void): this;
|
|
812
|
+
addListener(event: "redirect", listener: (url: string, request: ClientRequest) => void): this;
|
|
813
|
+
addListener(
|
|
814
|
+
event: "unexpected-response",
|
|
815
|
+
listener: (request: ClientRequest, response: IncomingMessage_3) => void,
|
|
816
|
+
): this;
|
|
817
|
+
addListener(event: string | symbol, listener: (...args: any[]) => void): this;
|
|
818
|
+
|
|
819
|
+
removeListener(event: "close", listener: (code: number, reason: Buffer) => void): this;
|
|
820
|
+
removeListener(event: "error", listener: (error: Error) => void): this;
|
|
821
|
+
removeListener(event: "upgrade", listener: (request: IncomingMessage_3) => void): this;
|
|
822
|
+
removeListener(event: "message", listener: (data: WebSocket_2.RawData, isBinary: boolean) => void): this;
|
|
823
|
+
removeListener(event: "open", listener: () => void): this;
|
|
824
|
+
removeListener(event: "ping" | "pong", listener: (data: Buffer) => void): this;
|
|
825
|
+
removeListener(event: "redirect", listener: (url: string, request: ClientRequest) => void): this;
|
|
826
|
+
removeListener(
|
|
827
|
+
event: "unexpected-response",
|
|
828
|
+
listener: (request: ClientRequest, response: IncomingMessage_3) => void,
|
|
829
|
+
): this;
|
|
830
|
+
removeListener(event: string | symbol, listener: (...args: any[]) => void): this;
|
|
831
|
+
}
|
|
832
|
+
|
|
833
|
+
declare namespace WebSocket_2 {
|
|
834
|
+
/**
|
|
835
|
+
* Data represents the raw message payload received over the WebSocket.
|
|
836
|
+
*/
|
|
837
|
+
type RawData = Buffer | ArrayBuffer | Buffer[];
|
|
838
|
+
|
|
839
|
+
/**
|
|
840
|
+
* Data represents the message payload received over the WebSocket.
|
|
841
|
+
*/
|
|
842
|
+
type Data = string | Buffer | ArrayBuffer | Buffer[];
|
|
843
|
+
|
|
844
|
+
/**
|
|
845
|
+
* CertMeta represents the accepted types for certificate & key data.
|
|
846
|
+
*/
|
|
847
|
+
type CertMeta = string | string[] | Buffer | Buffer[];
|
|
848
|
+
|
|
849
|
+
/**
|
|
850
|
+
* VerifyClientCallbackSync is a synchronous callback used to inspect the
|
|
851
|
+
* incoming message. The return value (boolean) of the function determines
|
|
852
|
+
* whether or not to accept the handshake.
|
|
853
|
+
*/
|
|
854
|
+
type VerifyClientCallbackSync<Request extends IncomingMessage_3 = IncomingMessage_3> = (info: {
|
|
855
|
+
origin: string;
|
|
856
|
+
secure: boolean;
|
|
857
|
+
req: Request;
|
|
858
|
+
}) => boolean;
|
|
859
|
+
|
|
860
|
+
/**
|
|
861
|
+
* VerifyClientCallbackAsync is an asynchronous callback used to inspect the
|
|
862
|
+
* incoming message. The return value (boolean) of the function determines
|
|
863
|
+
* whether or not to accept the handshake.
|
|
864
|
+
*/
|
|
865
|
+
type VerifyClientCallbackAsync<Request extends IncomingMessage_3 = IncomingMessage_3> = (
|
|
866
|
+
info: { origin: string; secure: boolean; req: Request },
|
|
867
|
+
callback: (res: boolean, code?: number, message?: string, headers?: OutgoingHttpHeaders) => void,
|
|
868
|
+
) => void;
|
|
869
|
+
|
|
870
|
+
/**
|
|
871
|
+
* FinishRequestCallback is a callback for last minute customization of the
|
|
872
|
+
* headers. If finishRequest is set, then it has the responsibility to call
|
|
873
|
+
* request.end() once it is done setting request headers.
|
|
874
|
+
*/
|
|
875
|
+
type FinishRequestCallback = (request: ClientRequest, websocket: WebSocket_2) => void;
|
|
876
|
+
|
|
877
|
+
interface ClientOptions extends SecureContextOptions {
|
|
878
|
+
protocol?: string | undefined;
|
|
879
|
+
followRedirects?: boolean | undefined;
|
|
880
|
+
generateMask?(mask: Buffer): void;
|
|
881
|
+
handshakeTimeout?: number | undefined;
|
|
882
|
+
maxRedirects?: number | undefined;
|
|
883
|
+
perMessageDeflate?: boolean | PerMessageDeflateOptions | undefined;
|
|
884
|
+
localAddress?: string | undefined;
|
|
885
|
+
protocolVersion?: number | undefined;
|
|
886
|
+
headers?: { [key: string]: string } | undefined;
|
|
887
|
+
origin?: string | undefined;
|
|
888
|
+
agent?: Agent | undefined;
|
|
889
|
+
host?: string | undefined;
|
|
890
|
+
family?: number | undefined;
|
|
891
|
+
checkServerIdentity?(servername: string, cert: CertMeta): boolean;
|
|
892
|
+
rejectUnauthorized?: boolean | undefined;
|
|
893
|
+
allowSynchronousEvents?: boolean | undefined;
|
|
894
|
+
autoPong?: boolean | undefined;
|
|
895
|
+
maxPayload?: number | undefined;
|
|
896
|
+
skipUTF8Validation?: boolean | undefined;
|
|
897
|
+
createConnection?: typeof createConnection | undefined;
|
|
898
|
+
finishRequest?: FinishRequestCallback | undefined;
|
|
899
|
+
}
|
|
900
|
+
|
|
901
|
+
interface PerMessageDeflateOptions {
|
|
902
|
+
serverNoContextTakeover?: boolean | undefined;
|
|
903
|
+
clientNoContextTakeover?: boolean | undefined;
|
|
904
|
+
serverMaxWindowBits?: number | undefined;
|
|
905
|
+
clientMaxWindowBits?: number | undefined;
|
|
906
|
+
zlibDeflateOptions?:
|
|
907
|
+
| {
|
|
908
|
+
flush?: number | undefined;
|
|
909
|
+
finishFlush?: number | undefined;
|
|
910
|
+
chunkSize?: number | undefined;
|
|
911
|
+
windowBits?: number | undefined;
|
|
912
|
+
level?: number | undefined;
|
|
913
|
+
memLevel?: number | undefined;
|
|
914
|
+
strategy?: number | undefined;
|
|
915
|
+
dictionary?: Buffer | Buffer[] | DataView | undefined;
|
|
916
|
+
info?: boolean | undefined;
|
|
917
|
+
}
|
|
918
|
+
| undefined;
|
|
919
|
+
zlibInflateOptions?: ZlibOptions | undefined;
|
|
920
|
+
threshold?: number | undefined;
|
|
921
|
+
concurrencyLimit?: number | undefined;
|
|
922
|
+
}
|
|
923
|
+
|
|
924
|
+
interface Event {
|
|
925
|
+
type: string;
|
|
926
|
+
target: WebSocket_2;
|
|
927
|
+
}
|
|
928
|
+
|
|
929
|
+
interface ErrorEvent {
|
|
930
|
+
error: any;
|
|
931
|
+
message: string;
|
|
932
|
+
type: string;
|
|
933
|
+
target: WebSocket_2;
|
|
934
|
+
}
|
|
935
|
+
|
|
936
|
+
interface CloseEvent {
|
|
937
|
+
wasClean: boolean;
|
|
938
|
+
code: number;
|
|
939
|
+
reason: string;
|
|
940
|
+
type: string;
|
|
941
|
+
target: WebSocket_2;
|
|
942
|
+
}
|
|
943
|
+
|
|
944
|
+
interface MessageEvent {
|
|
945
|
+
data: Data;
|
|
946
|
+
type: string;
|
|
947
|
+
target: WebSocket_2;
|
|
948
|
+
}
|
|
949
|
+
|
|
950
|
+
interface WebSocketEventMap {
|
|
951
|
+
open: Event;
|
|
952
|
+
error: ErrorEvent;
|
|
953
|
+
close: CloseEvent;
|
|
954
|
+
message: MessageEvent;
|
|
955
|
+
}
|
|
956
|
+
|
|
957
|
+
interface EventListenerOptions {
|
|
958
|
+
once?: boolean | undefined;
|
|
959
|
+
}
|
|
960
|
+
|
|
961
|
+
interface ServerOptions<
|
|
962
|
+
U extends typeof WebSocket_2 = typeof WebSocket_2,
|
|
963
|
+
V extends typeof IncomingMessage_3 = typeof IncomingMessage_3,
|
|
964
|
+
> {
|
|
965
|
+
host?: string | undefined;
|
|
966
|
+
port?: number | undefined;
|
|
967
|
+
backlog?: number | undefined;
|
|
968
|
+
server?: Server_6<V> | Server_7<V> | undefined;
|
|
969
|
+
verifyClient?:
|
|
970
|
+
| VerifyClientCallbackAsync<InstanceType<V>>
|
|
971
|
+
| VerifyClientCallbackSync<InstanceType<V>>
|
|
972
|
+
| undefined;
|
|
973
|
+
handleProtocols?: (protocols: Set<string>, request: InstanceType<V>) => string | false;
|
|
974
|
+
path?: string | undefined;
|
|
975
|
+
noServer?: boolean | undefined;
|
|
976
|
+
allowSynchronousEvents?: boolean | undefined;
|
|
977
|
+
autoPong?: boolean | undefined;
|
|
978
|
+
clientTracking?: boolean | undefined;
|
|
979
|
+
perMessageDeflate?: boolean | PerMessageDeflateOptions | undefined;
|
|
980
|
+
maxPayload?: number | undefined;
|
|
981
|
+
skipUTF8Validation?: boolean | undefined;
|
|
982
|
+
WebSocket?: U | undefined;
|
|
983
|
+
}
|
|
984
|
+
|
|
985
|
+
interface AddressInfo {
|
|
986
|
+
address: string;
|
|
987
|
+
family: string;
|
|
988
|
+
port: number;
|
|
989
|
+
}
|
|
990
|
+
}
|
|
991
|
+
|
|
575
992
|
declare type WebSocketServer = WebSocketServer_2;
|
|
576
993
|
|
|
994
|
+
declare const WebSocketServer_2: typeof Server_5;
|
|
995
|
+
|
|
996
|
+
declare interface WebSocketServer_2 extends Server_5 {}
|
|
997
|
+
|
|
577
998
|
declare interface WebSocketServerConfiguration {
|
|
578
999
|
type?: LiteralUnion<'ws', string> | (() => WebSocketServerConfiguration);
|
|
579
1000
|
options?: Record<string, EXPECTED_ANY>;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@rspack/dev-server",
|
|
3
|
-
"version": "2.0.
|
|
3
|
+
"version": "2.0.1",
|
|
4
4
|
"description": "Development server for Rspack",
|
|
5
5
|
"homepage": "https://github.com/rstackjs/rspack-dev-server",
|
|
6
6
|
"bugs": "https://github.com/rstackjs/rspack-dev-server/issues",
|
|
@@ -49,13 +49,13 @@
|
|
|
49
49
|
"@rspack/dev-middleware": "^2.0.1"
|
|
50
50
|
},
|
|
51
51
|
"devDependencies": {
|
|
52
|
-
"@hono/node-server": "^
|
|
53
|
-
"@microsoft/api-extractor": "^7.58.
|
|
54
|
-
"@rslib/core": "^0.21.
|
|
55
|
-
"@rslint/core": "^0.
|
|
52
|
+
"@hono/node-server": "^2.0.0",
|
|
53
|
+
"@microsoft/api-extractor": "^7.58.7",
|
|
54
|
+
"@rslib/core": "^0.21.3",
|
|
55
|
+
"@rslint/core": "^0.5.0",
|
|
56
56
|
"@rspack/core": "2.0.0-rc.0",
|
|
57
|
-
"@rspack/plugin-react-refresh": "
|
|
58
|
-
"@rstest/core": "^0.9.
|
|
57
|
+
"@rspack/plugin-react-refresh": "2.0.0",
|
|
58
|
+
"@rstest/core": "^0.9.9",
|
|
59
59
|
"@types/connect-history-api-fallback": "^1.5.4",
|
|
60
60
|
"@types/mime-types": "3.0.1",
|
|
61
61
|
"@types/node": "^24.12.2",
|
|
@@ -67,23 +67,23 @@
|
|
|
67
67
|
"connect-next": "^4.0.1",
|
|
68
68
|
"cross-env": "^10.1.0",
|
|
69
69
|
"express": "^5.2.1",
|
|
70
|
-
"hono": "^4.12.
|
|
70
|
+
"hono": "^4.12.15",
|
|
71
71
|
"http-compression": "^1.1.3",
|
|
72
72
|
"http-proxy": "^1.18.1",
|
|
73
|
-
"http-proxy-middleware": "4.0.0-beta.
|
|
73
|
+
"http-proxy-middleware": "4.0.0-beta.4",
|
|
74
74
|
"ipaddr.js": "^2.3.0",
|
|
75
75
|
"launch-editor": "^2.13.2",
|
|
76
76
|
"nano-staged": "^0.9.0",
|
|
77
77
|
"open": "^11.0.0",
|
|
78
78
|
"p-retry": "^7.1.1",
|
|
79
79
|
"prettier": "3.8.3",
|
|
80
|
-
"puppeteer": "^24.
|
|
80
|
+
"puppeteer": "^24.42.0",
|
|
81
81
|
"react-refresh": "0.18.0",
|
|
82
82
|
"require-from-string": "^2.0.2",
|
|
83
83
|
"selfsigned": "^5.5.0",
|
|
84
84
|
"serve-static": "^2.2.1",
|
|
85
85
|
"simple-git-hooks": "^2.13.1",
|
|
86
|
-
"typescript": "^6.0.
|
|
86
|
+
"typescript": "^6.0.3",
|
|
87
87
|
"ws": "^8.20.0"
|
|
88
88
|
},
|
|
89
89
|
"peerDependencies": {
|
|
@@ -95,7 +95,7 @@
|
|
|
95
95
|
"optional": true
|
|
96
96
|
}
|
|
97
97
|
},
|
|
98
|
-
"packageManager": "pnpm@10.33.
|
|
98
|
+
"packageManager": "pnpm@10.33.2",
|
|
99
99
|
"engines": {
|
|
100
100
|
"node": "^20.19.0 || >=22.12.0"
|
|
101
101
|
},
|