diff --git a/packages/metro/package.json b/packages/metro/package.json index 77615f5892..4981104957 100644 --- a/packages/metro/package.json +++ b/packages/metro/package.json @@ -63,7 +63,6 @@ }, "devDependencies": { "@babel/plugin-transform-flow-strip-types": "^7.0.0", - "@types/ws": "^8.5.4", "babel-jest": "^29.2.1", "dedent": "^0.7.0", "jest-snapshot": "^26.5.2", diff --git a/packages/metro/src/index.flow.js b/packages/metro/src/index.flow.js index e97c150787..0f62b111d1 100644 --- a/packages/metro/src/index.flow.js +++ b/packages/metro/src/index.flow.js @@ -15,7 +15,8 @@ import type {CustomResolverOptions} from 'metro-resolver'; import type {ReadOnlyGraph} from './DeltaBundler'; import type {ServerOptions} from './Server'; import type {OutputOptions, RequestOptions} from './shared/types.flow.js'; -import type {Server as HttpServer} from 'http'; +import type EventEmitter from 'events'; +import type {IncomingMessage, Server as HttpServer} from 'http'; import type {Server as HttpsServer} from 'https'; import type { ConfigT, @@ -24,6 +25,7 @@ import type { Middleware, } from 'metro-config/src/configTypes.flow'; import type {CustomTransformOptions} from 'metro-transform-worker'; +import type {Duplex} from 'stream'; import typeof Yargs from 'yargs'; const makeBuildCommand = require('./commands/build'); @@ -48,7 +50,6 @@ const {Terminal} = require('metro-core'); const {InspectorProxy} = require('metro-inspector-proxy'); const net = require('net'); const {parse} = require('url'); -const ws = require('ws'); type MetroMiddleWare = { attachHmrServer: (httpServer: HttpServer | HttpsServer) => void, @@ -62,6 +63,15 @@ export type RunMetroOptions = { waitForBundler?: boolean, }; +interface WebsocketServer extends EventEmitter { + handleUpgrade( + request: IncomingMessage, + socket: Duplex, + upgradeHead: Buffer, + callback: (client: T, request: IncomingMessage) => void, + ): void; +} + export type RunServerOptions = $ReadOnly<{ hasReducedPerformance?: boolean, host?: string, @@ -75,7 +85,7 @@ export type RunServerOptions = $ReadOnly<{ waitForBundler?: boolean, watch?: boolean, websocketEndpoints?: $ReadOnly<{ - [path: string]: typeof ws.Server, + [path: string]: WebsocketServer, }>, }>; diff --git a/packages/metro/types/index.d.ts b/packages/metro/types/index.d.ts index ff60ed3f7e..d9966c2920 100644 --- a/packages/metro/types/index.d.ts +++ b/packages/metro/types/index.d.ts @@ -14,7 +14,8 @@ export * from './ModuleGraph/worker/collectDependencies'; export * from './Server'; export * from './lib/reporting'; -import type {Server as HttpServer} from 'http'; +import type {EventEmitter} from 'events'; +import type {IncomingMessage, Server as HttpServer} from 'http'; import type {Server as HttpsServer} from 'https'; import type { ConfigT, @@ -24,7 +25,7 @@ import type { } from 'metro-config'; import type {CustomTransformOptions} from 'metro-babel-transformer'; import type {ReadOnlyGraph} from './DeltaBundler/types'; -import type {Server} from 'ws'; +import type {Duplex} from 'stream'; import Yargs = require('yargs'); import type {default as MetroServer, ServerOptions} from './Server'; import type {OutputOptions, RequestOptions} from './shared/types'; @@ -45,6 +46,15 @@ export interface RunMetroOptions extends ServerOptions { waitForBundler?: boolean; } +interface WebsocketServer extends EventEmitter { + handleUpgrade( + request: IncomingMessage, + socket: Duplex, + upgradeHead: Buffer, + callback: (client: T, request: IncomingMessage) => void, + ): void; +} + export interface RunServerOptions { hasReducedPerformance?: boolean; host?: string; @@ -65,7 +75,7 @@ export interface RunServerOptions { waitForBundler?: boolean; watch?: boolean; websocketEndpoints?: { - [path: string]: Server; + [path: string]: WebsocketServer; }; } diff --git a/yarn.lock b/yarn.lock index 136cff2deb..a4cce98853 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1296,13 +1296,6 @@ resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.0.tgz#7036640b4e21cc2f259ae826ce843d277dad8cff" integrity sha512-RJJrrySY7A8havqpGObOB4W92QXKJo63/jFLLgpvOtsGUqbQZ9Sbgl35KMm1DjC6j7AvmmU2bIno+3IyEaemaw== -"@types/ws@^8.5.4": - version "8.5.4" - resolved "https://registry.yarnpkg.com/@types/ws/-/ws-8.5.4.tgz#bb10e36116d6e570dd943735f86c933c1587b8a5" - integrity sha512-zdQDHKUgcX/zBc4GrwsE/7dVdAD8JR4EuiAXiiUhhfyIJXXb2+PrGshFyeXWQPMmmZ2XxgaqclgpIC7eTXc1mg== - dependencies: - "@types/node" "*" - "@types/yargs-parser@*": version "15.0.0" resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-15.0.0.tgz#cb3f9f741869e20cce330ffbeb9271590483882d"