diff --git a/packages/vite/package.json b/packages/vite/package.json index 3fcee0399cd05d..56df1eedb6e609 100644 --- a/packages/vite/package.json +++ b/packages/vite/package.json @@ -74,7 +74,7 @@ "@types/resolve": "^1.20.1", "@types/sass": "~1.43.0", "@types/stylus": "^0.48.36", - "@types/ws": "^8.2.0", + "@types/ws": "^8.2.2", "@vue/compiler-dom": "^3.2.22", "acorn": "^8.6.0", "acorn-class-fields": "^1.0.0", @@ -117,7 +117,7 @@ "tsconfck": "1.1.1", "tslib": "^2.3.1", "types": "link:./types", - "ws": "^8.2.3" + "ws": "^8.3.0" }, "peerDependencies": { "less": "*", diff --git a/packages/vite/src/node/index.ts b/packages/vite/src/node/index.ts index 5b92990f83a221..306d651d2ce07c 100644 --- a/packages/vite/src/node/index.ts +++ b/packages/vite/src/node/index.ts @@ -83,7 +83,7 @@ export type { ErrorPayload } from 'types/hmrPayload' export type { Connect } from 'types/connect' -export type { WebSocket } from 'types/ws' +export type { WebSocket, WebSocketAlias } from 'types/ws' export type { HttpProxy } from 'types/http-proxy' export type { FSWatcher, WatchOptions } from 'types/chokidar' export type { Terser } from 'types/terser' diff --git a/packages/vite/src/node/server/ws.ts b/packages/vite/src/node/server/ws.ts index 74b4ad8142e81a..8e0bbe7058bcb8 100644 --- a/packages/vite/src/node/server/ws.ts +++ b/packages/vite/src/node/server/ws.ts @@ -5,6 +5,7 @@ import { ServerOptions as HttpsServerOptions } from 'https' import { WebSocketServer as WebSocket, ServerOptions } from 'ws' +import { WebSocket as WebSocketTypes } from 'types/ws' import { ErrorPayload, HMRPayload } from 'types/hmrPayload' import { ResolvedConfig } from '..' import { isObject } from '../utils' @@ -12,8 +13,8 @@ import { Socket } from 'net' export const HMR_HEADER = 'vite-hmr' export interface WebSocketServer { - on: WebSocket['on'] - off: WebSocket['off'] + on: WebSocketTypes.Server['on'] + off: WebSocketTypes.Server['off'] send(payload: HMRPayload): void close(): Promise } diff --git a/packages/vite/types/ws.d.ts b/packages/vite/types/ws.d.ts index 3a174f9df47ea7..6c14174e098f0b 100644 --- a/packages/vite/types/ws.d.ts +++ b/packages/vite/types/ws.d.ts @@ -1,7 +1,4 @@ -// Inlined to avoid extra dependency -// MIT Licensed https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/LICENSE - -// Type definitions for ws 7.4 +// Type definitions for ws 8.2 // Project: https://github.com/websockets/ws // Definitions by: Paul Loyd // Margus Lamp @@ -24,286 +21,273 @@ import { Server as HTTPServer } from 'http' import { Server as HTTPSServer } from 'https' -import { Socket } from 'net' import { Duplex, DuplexOptions } from 'stream' import { SecureContextOptions } from 'tls' import { URL } from 'url' import { ZlibOptions } from 'zlib' -export declare namespace WebSocket { - // WebSocket socket. - export class WebSocket extends EventEmitter { - /** The connection is not yet open. */ - static readonly CONNECTING: 0 - /** The connection is open and ready to communicate. */ - static readonly OPEN: 1 - /** The connection is in the process of closing. */ - static readonly CLOSING: 2 - /** The connection is closed. */ - static readonly CLOSED: 3 - - binaryType: 'nodebuffer' | 'arraybuffer' | 'fragments' - readonly bufferedAmount: number - readonly extensions: string - readonly protocol: string - /** The current state of the connection */ - readonly readyState: - | typeof WebSocket.CONNECTING - | typeof WebSocket.OPEN - | typeof WebSocket.CLOSING - | typeof WebSocket.CLOSED - readonly url: string - - /** The connection is not yet open. */ - readonly CONNECTING: 0 - /** The connection is open and ready to communicate. */ - readonly OPEN: 1 - /** The connection is in the process of closing. */ - readonly CLOSING: 2 - /** The connection is closed. */ - readonly CLOSED: 3 - - onopen: (event: WebSocket.OpenEvent) => void - onerror: (event: WebSocket.ErrorEvent) => void - onclose: (event: WebSocket.CloseEvent) => void - onmessage: (event: WebSocket.MessageEvent) => void - - constructor( - address: string | URL, - options?: WebSocket.ClientOptions | ClientRequestArgs - ) - constructor( - address: string | URL, - protocols?: string | string[], - options?: WebSocket.ClientOptions | ClientRequestArgs - ) - - close(code?: number, data?: string): void - ping(data?: any, mask?: boolean, cb?: (err: Error) => void): void - pong(data?: any, mask?: boolean, cb?: (err: Error) => void): void - send(data: any, cb?: (err?: Error) => void): void - send( - data: any, - options: { - mask?: boolean | undefined - binary?: boolean | undefined - compress?: boolean | undefined - fin?: boolean | undefined - }, - cb?: (err?: Error) => void - ): void - terminate(): void - - // HTML5 WebSocket events - addEventListener( - method: 'message', - cb: (event: { data: any; type: string; target: WebSocket }) => void, - options?: WebSocket.EventListenerOptions - ): void - addEventListener( - method: 'close', - cb: (event: { - wasClean: boolean - code: number - reason: string - target: WebSocket - }) => void, - options?: WebSocket.EventListenerOptions - ): void - addEventListener( - method: 'error', - cb: (event: { - error: any - message: any - type: string - target: WebSocket - }) => void, - options?: WebSocket.EventListenerOptions - ): void - addEventListener( - method: 'open', - cb: (event: { target: WebSocket }) => void, - options?: WebSocket.EventListenerOptions - ): void - addEventListener( - method: string, - listener: () => void, - options?: WebSocket.EventListenerOptions - ): void - - removeEventListener( - method: 'message', - cb?: (event: { data: any; type: string; target: WebSocket }) => void - ): void - removeEventListener( - method: 'close', - cb?: (event: { - wasClean: boolean - code: number - reason: string - target: WebSocket - }) => void - ): void - removeEventListener( - method: 'error', - cb?: (event: { - error: any - message: any - type: string - target: WebSocket - }) => void - ): void - removeEventListener( - method: 'open', - cb?: (event: { target: WebSocket }) => void - ): void - removeEventListener(method: string, listener?: () => void): void - - // Events - on( - event: 'close', - listener: (this: WebSocket, code: number, reason: string) => void - ): this - on(event: 'error', listener: (this: WebSocket, err: Error) => void): this - on( - event: 'upgrade', - listener: (this: WebSocket, request: IncomingMessage) => void - ): this - on( - event: 'message', - listener: (this: WebSocket, data: WebSocket.Data) => void - ): this - on(event: 'open', listener: (this: WebSocket) => void): this - on( - event: 'ping' | 'pong', - listener: (this: WebSocket, data: Buffer) => void - ): this - on( - event: 'unexpected-response', - listener: ( - this: WebSocket, - request: ClientRequest, - response: IncomingMessage - ) => void - ): this - on( - event: string | symbol, - listener: (this: WebSocket, ...args: any[]) => void - ): this - - once( - event: 'close', - listener: (this: WebSocket, code: number, reason: string) => void - ): this - once(event: 'error', listener: (this: WebSocket, err: Error) => void): this - once( - event: 'upgrade', - listener: (this: WebSocket, request: IncomingMessage) => void - ): this - once( - event: 'message', - listener: (this: WebSocket, data: WebSocket.Data) => void - ): this - once(event: 'open', listener: (this: WebSocket) => void): this - once( - event: 'ping' | 'pong', - listener: (this: WebSocket, data: Buffer) => void - ): this - once( - event: 'unexpected-response', - listener: ( - this: WebSocket, - request: ClientRequest, - response: IncomingMessage - ) => void - ): this - once( - event: string | symbol, - listener: (this: WebSocket, ...args: any[]) => void - ): this - - off( - event: 'close', - listener: (this: WebSocket, code: number, reason: string) => void - ): this - off(event: 'error', listener: (this: WebSocket, err: Error) => void): this - off( - event: 'upgrade', - listener: (this: WebSocket, request: IncomingMessage) => void - ): this - off( - event: 'message', - listener: (this: WebSocket, data: WebSocket.Data) => void - ): this - off(event: 'open', listener: (this: WebSocket) => void): this - off( - event: 'ping' | 'pong', - listener: (this: WebSocket, data: Buffer) => void - ): this - off( - event: 'unexpected-response', - listener: ( - this: WebSocket, - request: ClientRequest, - response: IncomingMessage - ) => void - ): this - off( - event: string | symbol, - listener: (this: WebSocket, ...args: any[]) => void - ): this +// WebSocket socket. +declare class WebSocket extends EventEmitter { + /** The connection is not yet open. */ + static readonly CONNECTING: 0 + /** The connection is open and ready to communicate. */ + static readonly OPEN: 1 + /** The connection is in the process of closing. */ + static readonly CLOSING: 2 + /** The connection is closed. */ + static readonly CLOSED: 3 + + binaryType: 'nodebuffer' | 'arraybuffer' | 'fragments' + readonly bufferedAmount: number + readonly extensions: string + readonly protocol: string + /** The current state of the connection */ + readonly readyState: + | typeof WebSocket.CONNECTING + | typeof WebSocket.OPEN + | typeof WebSocket.CLOSING + | typeof WebSocket.CLOSED + readonly url: string + + /** The connection is not yet open. */ + readonly CONNECTING: 0 + /** The connection is open and ready to communicate. */ + readonly OPEN: 1 + /** The connection is in the process of closing. */ + readonly CLOSING: 2 + /** The connection is closed. */ + readonly CLOSED: 3 + + onopen: (event: WebSocket.Event) => void + onerror: (event: WebSocket.ErrorEvent) => void + onclose: (event: WebSocket.CloseEvent) => void + onmessage: (event: WebSocket.MessageEvent) => void + + constructor( + address: string | URL, + options?: WebSocket.ClientOptions | ClientRequestArgs + ) + constructor( + address: string | URL, + protocols?: string | string[], + options?: WebSocket.ClientOptions | ClientRequestArgs + ) + + close(code?: number, data?: string | Buffer): void + ping(data?: any, mask?: boolean, cb?: (err: Error) => void): void + pong(data?: any, mask?: boolean, cb?: (err: Error) => void): void + send(data: any, cb?: (err?: Error) => void): void + send( + data: any, + options: { + mask?: boolean | undefined + binary?: boolean | undefined + compress?: boolean | undefined + fin?: boolean | undefined + }, + cb?: (err?: Error) => void + ): void + terminate(): void + + // HTML5 WebSocket events + addEventListener( + method: 'message', + cb: (event: WebSocket.MessageEvent) => void, + options?: WebSocket.EventListenerOptions + ): void + addEventListener( + method: 'close', + cb: (event: WebSocket.CloseEvent) => void, + options?: WebSocket.EventListenerOptions + ): void + addEventListener( + method: 'error', + cb: (event: WebSocket.ErrorEvent) => void, + options?: WebSocket.EventListenerOptions + ): void + addEventListener( + method: 'open', + cb: (event: WebSocket.Event) => void, + options?: WebSocket.EventListenerOptions + ): void + + removeEventListener( + method: 'message', + cb: (event: WebSocket.MessageEvent) => void + ): void + removeEventListener( + method: 'close', + cb: (event: WebSocket.CloseEvent) => void + ): void + removeEventListener( + method: 'error', + cb: (event: WebSocket.ErrorEvent) => void + ): void + removeEventListener( + method: 'open', + cb: (event: WebSocket.Event) => void + ): void + + // Events + on( + event: 'close', + listener: (this: WebSocket, code: number, reason: Buffer) => void + ): this + on(event: 'error', listener: (this: WebSocket, err: Error) => void): this + on( + event: 'upgrade', + listener: (this: WebSocket, request: IncomingMessage) => void + ): this + on( + event: 'message', + listener: ( + this: WebSocket, + data: WebSocket.RawData, + isBinary: boolean + ) => void + ): this + on(event: 'open', listener: (this: WebSocket) => void): this + on( + event: 'ping' | 'pong', + listener: (this: WebSocket, data: Buffer) => void + ): this + on( + event: 'unexpected-response', + listener: ( + this: WebSocket, + request: ClientRequest, + response: IncomingMessage + ) => void + ): this + on( + event: string | symbol, + listener: (this: WebSocket, ...args: any[]) => void + ): this + + once( + event: 'close', + listener: (this: WebSocket, code: number, reason: Buffer) => void + ): this + once(event: 'error', listener: (this: WebSocket, err: Error) => void): this + once( + event: 'upgrade', + listener: (this: WebSocket, request: IncomingMessage) => void + ): this + once( + event: 'message', + listener: ( + this: WebSocket, + data: WebSocket.RawData, + isBinary: boolean + ) => void + ): this + once(event: 'open', listener: (this: WebSocket) => void): this + once( + event: 'ping' | 'pong', + listener: (this: WebSocket, data: Buffer) => void + ): this + once( + event: 'unexpected-response', + listener: ( + this: WebSocket, + request: ClientRequest, + response: IncomingMessage + ) => void + ): this + once( + event: string | symbol, + listener: (this: WebSocket, ...args: any[]) => void + ): this + + off( + event: 'close', + listener: (this: WebSocket, code: number, reason: Buffer) => void + ): this + off(event: 'error', listener: (this: WebSocket, err: Error) => void): this + off( + event: 'upgrade', + listener: (this: WebSocket, request: IncomingMessage) => void + ): this + off( + event: 'message', + listener: ( + this: WebSocket, + data: WebSocket.RawData, + isBinary: boolean + ) => void + ): this + off(event: 'open', listener: (this: WebSocket) => void): this + off( + event: 'ping' | 'pong', + listener: (this: WebSocket, data: Buffer) => void + ): this + off( + event: 'unexpected-response', + listener: ( + this: WebSocket, + request: ClientRequest, + response: IncomingMessage + ) => void + ): this + off( + event: string | symbol, + listener: (this: WebSocket, ...args: any[]) => void + ): this + + addListener( + event: 'close', + listener: (code: number, reason: Buffer) => void + ): this + addListener(event: 'error', listener: (err: Error) => void): this + addListener( + event: 'upgrade', + listener: (request: IncomingMessage) => void + ): this + addListener( + event: 'message', + listener: (data: WebSocket.RawData, isBinary: boolean) => void + ): this + addListener(event: 'open', listener: () => void): this + addListener(event: 'ping' | 'pong', listener: (data: Buffer) => void): this + addListener( + event: 'unexpected-response', + listener: (request: ClientRequest, response: IncomingMessage) => void + ): this + addListener(event: string | symbol, listener: (...args: any[]) => void): this + + removeListener( + event: 'close', + listener: (code: number, reason: Buffer) => void + ): this + removeListener(event: 'error', listener: (err: Error) => void): this + removeListener( + event: 'upgrade', + listener: (request: IncomingMessage) => void + ): this + removeListener( + event: 'message', + listener: (data: WebSocket.RawData, isBinary: boolean) => void + ): this + removeListener(event: 'open', listener: () => void): this + removeListener(event: 'ping' | 'pong', listener: (data: Buffer) => void): this + removeListener( + event: 'unexpected-response', + listener: (request: ClientRequest, response: IncomingMessage) => void + ): this + removeListener( + event: string | symbol, + listener: (...args: any[]) => void + ): this +} - addListener( - event: 'close', - listener: (code: number, message: string) => void - ): this - addListener(event: 'error', listener: (err: Error) => void): this - addListener( - event: 'upgrade', - listener: (request: IncomingMessage) => void - ): this - addListener( - event: 'message', - listener: (data: WebSocket.Data) => void - ): this - addListener(event: 'open', listener: () => void): this - addListener(event: 'ping' | 'pong', listener: (data: Buffer) => void): this - addListener( - event: 'unexpected-response', - listener: (request: ClientRequest, response: IncomingMessage) => void - ): this - addListener( - event: string | symbol, - listener: (...args: any[]) => void - ): this +declare const WebSocketAlias: typeof WebSocket +type WebSocketAlias = WebSocket - removeListener( - event: 'close', - listener: (code: number, message: string) => void - ): this - removeListener(event: 'error', listener: (err: Error) => void): this - removeListener( - event: 'upgrade', - listener: (request: IncomingMessage) => void - ): this - removeListener( - event: 'message', - listener: (data: WebSocket.Data) => void - ): this - removeListener(event: 'open', listener: () => void): this - removeListener( - event: 'ping' | 'pong', - listener: (data: Buffer) => void - ): this - removeListener( - event: 'unexpected-response', - listener: (request: ClientRequest, response: IncomingMessage) => void - ): this - removeListener( - event: string | symbol, - listener: (...args: any[]) => void - ): this - } +declare namespace WebSocket { + /** + * Data represents the raw message payload received over the WebSocket. + */ + type RawData = Buffer | ArrayBuffer | Buffer[] /** * Data represents the message payload received over the WebSocket. @@ -382,7 +366,7 @@ export declare namespace WebSocket { concurrencyLimit?: number | undefined } - interface OpenEvent { + interface Event { type: string target: WebSocket } @@ -421,12 +405,16 @@ export declare namespace WebSocket { | VerifyClientCallbackAsync | VerifyClientCallbackSync | undefined - handleProtocols?: any + handleProtocols?: ( + protocols: Set, + request: IncomingMessage + ) => string | false path?: string | undefined noServer?: boolean | undefined clientTracking?: boolean | undefined perMessageDeflate?: boolean | PerMessageDeflateOptions | undefined maxPayload?: number | undefined + skipUTF8Validation?: boolean | undefined } interface AddressInfo { @@ -436,7 +424,7 @@ export declare namespace WebSocket { } // WebSocket Server - export class Server extends EventEmitter { + class Server extends EventEmitter { options: ServerOptions path: string clients: Set @@ -447,7 +435,7 @@ export declare namespace WebSocket { close(cb?: (err?: Error) => void): void handleUpgrade( request: IncomingMessage, - socket: Socket, + socket: Duplex, upgradeHead: Buffer, callback: (client: WebSocket, request: IncomingMessage) => void ): void @@ -524,9 +512,17 @@ export declare namespace WebSocket { ): this } + const WebSocketServer: typeof Server + type WebSocketServer = Server + const WebSocket: typeof WebSocketAlias + type WebSocket = WebSocketAlias + // WebSocket stream function createWebSocketStream( websocket: WebSocket, options?: DuplexOptions ): Duplex } + +//export = WebSocket; +export { WebSocket, WebSocketAlias } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 8e775dd4470891..572696f0c3bbd9 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -704,6 +704,12 @@ importers: '@vue/babel-plugin-jsx': 1.1.1_@babel+core@7.16.0 hash-sum: 2.0.0 + packages/temp: + specifiers: + css-color-names: ^1.0.1 + devDependencies: + css-color-names: 1.0.1 + packages/vite: specifiers: '@ampproject/remapping': ^1.0.1 @@ -727,7 +733,7 @@ importers: '@types/resolve': ^1.20.1 '@types/sass': ~1.43.0 '@types/stylus': ^0.48.36 - '@types/ws': ^8.2.0 + '@types/ws': ^8.2.2 '@vue/compiler-dom': ^3.2.22 acorn: ^8.6.0 acorn-class-fields: ^1.0.0 @@ -775,7 +781,7 @@ importers: tsconfck: 1.1.1 tslib: ^2.3.1 types: link:./types - ws: ^8.2.3 + ws: ^8.3.0 dependencies: esbuild: 0.13.12 postcss: 8.3.11 @@ -805,7 +811,7 @@ importers: '@types/resolve': 1.20.1 '@types/sass': 1.43.0 '@types/stylus': 0.48.36 - '@types/ws': 8.2.0 + '@types/ws': 8.2.2 '@vue/compiler-dom': 3.2.22 acorn: 8.6.0 acorn-class-fields: 1.0.0_acorn@8.6.0 @@ -848,7 +854,7 @@ importers: tsconfck: 1.1.1_typescript@4.4.4 tslib: 2.3.1 types: link:types - ws: 8.2.3 + ws: 8.3.0 packages: @@ -2279,8 +2285,8 @@ packages: '@types/node': 16.11.9 dev: true - /@types/ws/8.2.0: - resolution: {integrity: sha512-cyeefcUCgJlEk+hk2h3N+MqKKsPViQgF5boi9TTHSK+PoR9KWBb/C5ccPcDyAqgsbAYHTwulch725DV84+pSpg==} + /@types/ws/8.2.2: + resolution: {integrity: sha512-NOn5eIcgWLOo6qW8AcuLZ7G8PycXu0xTxxkS6Q18VWFxgPUSOwV0pBj2a/4viNZVu25i7RIB7GttdkAIUUXOOg==} dependencies: '@types/node': 16.11.9 dev: true @@ -9188,8 +9194,8 @@ packages: optional: true dev: true - /ws/8.2.3: - resolution: {integrity: sha512-wBuoj1BDpC6ZQ1B7DWQBYVLphPWkm8i9Y0/3YdHjHKHiohOJ1ws+3OccDWtH+PoC9DZD5WOTrJvNbWvjS6JWaA==} + /ws/8.3.0: + resolution: {integrity: sha512-Gs5EZtpqZzLvmIM59w4igITU57lrtYVFneaa434VROv4thzJyV6UjIL3D42lslWlI+D4KzLYnxSwtfuiO79sNw==} engines: {node: '>=10.0.0'} peerDependencies: bufferutil: ^4.0.1