Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

chore: convert some server files into TypeScript #757

Merged
merged 20 commits into from
Oct 7, 2019
Merged
Show file tree
Hide file tree
Changes from 12 commits
Commits
Show all changes
20 commits
Select commit Hold shift + click to select a range
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions packages/cli/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,8 @@
"@react-native-community/cli-types": "^3.0.0-alpha.2",
"@types/mkdirp": "^0.5.2",
"@types/semver": "^6.0.2",
"@types/ws": "^6.0.3",
thymikee marked this conversation as resolved.
Show resolved Hide resolved
"@types/node-notifier": "^5.4.0",
"chalk": "^2.4.2",
"command-exists": "^1.2.8",
"commander": "^2.19.0",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ fs.chmodSync(xsel, '0755');
/**
* Copy the content to host system clipboard.
*/
function copyToClipBoard(content) {
function copyToClipBoard(content: string) {
switch (process.platform) {
case 'darwin': {
const child = spawn('pbcopy', []);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@
* LICENSE file in the root directory of this source tree.
*
* @format
* @flow
*/

import open from 'open';
Expand All @@ -14,7 +13,7 @@ import {logger} from '@react-native-community/cli-tools';
import launchDefaultBrowser from './launchDefaultBrowser';
import chalk from 'chalk';

function commandExistsUnixSync(commandName) {
function commandExistsUnixSync(commandName: string) {
try {
const stdout = execSync(
`command -v ${commandName} 2>/dev/null` +
Expand All @@ -26,7 +25,7 @@ function commandExistsUnixSync(commandName) {
}
}

function commandExistsWindowsSync(commandName) {
function commandExistsWindowsSync(commandName: string) {
try {
const stdout = execSync('where ' + commandName, {stdio: []});
return !!stdout;
Expand All @@ -35,7 +34,7 @@ function commandExistsWindowsSync(commandName) {
}
}

function commandExists(commandName) {
function commandExists(commandName: string) {
switch (process.platform) {
case 'win32':
return commandExistsWindowsSync(commandName);
Expand Down Expand Up @@ -68,12 +67,14 @@ function getChromeAppName(): string {
}
}

function launchChrome(url: string) {
open(url, {app: [getChromeAppName()]}, err => {
async function launchChrome(url: string) {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please revert this whole change. It introduces a regression, since we don't want to catch this exception here

try {
await open(url, {app: [getChromeAppName()]});
} catch (err) {
if (err) {
logger.error('Google Chrome exited with error:', err);
}
});
}
}

function launchDebugger(url: string) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,18 +5,19 @@
* LICENSE file in the root directory of this source tree.
*
* @format
* @flow
*/

import open from 'open';
import {logger} from '@react-native-community/cli-tools';

function launchDefaultBrowser(url: string) {
open(url, err => {
async function launchDefaultBrowser(url: string) {
try {
await open(url);
} catch (err) {
if (err) {
logger.error('Browser exited with error:', err);
}
});
}
}

export default launchDefaultBrowser;
Original file line number Diff line number Diff line change
Expand Up @@ -10,11 +10,34 @@
import chalk from 'chalk';
import fs from 'fs';
import path from 'path';
import {execSync, spawn} from 'child_process';
import {execSync, spawn, ChildProcess} from 'child_process';
// @ts-ignore @types not installed
import shellQuote from 'shell-quote';
import {logger} from '@react-native-community/cli-tools';

function isTerminalEditor(editor) {
type Editor =
| 'vim'
| 'mvim'
| 'nano'
| 'code'
| 'atom'
| 'Atom'
| 'Atom Beta'
| 'subl'
| 'sublime'
| 'webstorm'
| 'wstorm'
| 'appcode'
| 'charm'
| 'idea'
| 'joe'
| 'emacs'
| 'emacsclient'
| 'rmate'
| 'mate'
| 'mine';
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nah, we don't have resources to maintain this list. Please use just string


function isTerminalEditor(editor: Editor) {
switch (editor) {
case 'vim':
case 'emacs':
Expand All @@ -28,7 +51,7 @@ function isTerminalEditor(editor) {
// Map from full process name to binary that starts the process
// We can't just re-use full process name, because it will spawn a new instance
// of the app every time
const COMMON_EDITORS = {
const COMMON_EDITORS: Record<string, string> = {
'/Applications/Atom.app/Contents/MacOS/Atom': 'atom',
'/Applications/Atom Beta.app/Contents/MacOS/Atom Beta':
'/Applications/Atom Beta.app/Contents/MacOS/Atom Beta',
Expand All @@ -46,14 +69,19 @@ const COMMON_EDITORS = {
// alphanumeric characters, periods, dashes, slashes, and underscores.
const WINDOWS_FILE_NAME_WHITELIST = /^(?:[\x2D-9A-Z\\_a-z\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0560-\u0588\u05D0-\u05EA\u05EF-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u0860-\u086A\u08A0-\u08B4\u08B6-\u08BD\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u09FC\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0AF9\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58-\u0C5A\u0C60\u0C61\u0C80\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D54-\u0D56\u0D5F-\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16F1-\u16F8\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1878\u1880-\u1884\u1887-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1C80-\u1C88\u1C90-\u1CBA\u1CBD-\u1CBF\u1CE9-\u1CEC\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312F\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FEF\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788\uA78B-\uA7B9\uA7F7-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA8FD\uA8FE\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uA9E0-\uA9E4\uA9E6-\uA9EF\uA9FA-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB65\uAB70-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDE80-\uDE9C\uDEA0-\uDED0\uDF00-\uDF1F\uDF2D-\uDF40\uDF42-\uDF49\uDF50-\uDF75\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF]|\uD801[\uDC00-\uDC9D\uDCB0-\uDCD3\uDCD8-\uDCFB\uDD00-\uDD27\uDD30-\uDD63\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00\uDE10-\uDE13\uDE15-\uDE17\uDE19-\uDE35\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE4\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2\uDD00-\uDD23\uDF00-\uDF1C\uDF27\uDF30-\uDF45]|\uD804[\uDC03-\uDC37\uDC83-\uDCAF\uDCD0-\uDCE8\uDD03-\uDD26\uDD44\uDD50-\uDD72\uDD76\uDD83-\uDDB2\uDDC1-\uDDC4\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE2B\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEDE\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3D\uDF50\uDF5D-\uDF61]|\uD805[\uDC00-\uDC34\uDC47-\uDC4A\uDC80-\uDCAF\uDCC4\uDCC5\uDCC7\uDD80-\uDDAE\uDDD8-\uDDDB\uDE00-\uDE2F\uDE44\uDE80-\uDEAA\uDF00-\uDF1A]|\uD806[\uDC00-\uDC2B\uDCA0-\uDCDF\uDCFF\uDE00\uDE0B-\uDE32\uDE3A\uDE50\uDE5C-\uDE83\uDE86-\uDE89\uDE9D\uDEC0-\uDEF8]|\uD807[\uDC00-\uDC08\uDC0A-\uDC2E\uDC40\uDC72-\uDC8F\uDD00-\uDD06\uDD08\uDD09\uDD0B-\uDD30\uDD46\uDD60-\uDD65\uDD67\uDD68\uDD6A-\uDD89\uDD98\uDEE0-\uDEF2]|\uD808[\uDC00-\uDF99]|\uD809[\uDC80-\uDD43]|[\uD80C\uD81C-\uD820\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDED0-\uDEED\uDF00-\uDF2F\uDF40-\uDF43\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDE40-\uDE7F\uDF00-\uDF44\uDF50\uDF93-\uDF9F\uDFE0\uDFE1]|\uD821[\uDC00-\uDFF1]|\uD822[\uDC00-\uDEF2]|\uD82C[\uDC00-\uDD1E\uDD70-\uDEFB]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB]|\uD83A[\uDC00-\uDCC4\uDD00-\uDD43]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDED6\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0]|\uD87E[\uDC00-\uDE1D])+$/;

function addWorkspaceToArgumentsIfExists(args, workspace) {
function addWorkspaceToArgumentsIfExists(args: string[], workspace: string) {
if (workspace) {
args.unshift(workspace);
}
return args;
}

function getArgumentsForLineNumber(editor, fileName, lineNumber, workspace) {
function getArgumentsForLineNumber(
editor: Editor,
fileName: string,
lineNumber: number,
workspace: any,
) {
switch (path.basename(editor)) {
case 'vim':
case 'mvim':
Expand Down Expand Up @@ -124,7 +152,7 @@ function guessEditor() {
return [null];
}

function printInstructions(title) {
function printInstructions(title: string) {
logger.info(
[
'',
Expand All @@ -140,23 +168,27 @@ function printInstructions(title) {
);
}

function transformToAbsolutePathIfNeeded(pathName) {
function transformToAbsolutePathIfNeeded(pathName: string) {
if (!path.isAbsolute(pathName)) {
return path.resolve(process.cwd(), pathName);
}
return pathName;
}

function findRootForFile(projectRoots, fileName) {
function findRootForFile(projectRoots: string[], fileName: string) {
const absoluteFileName = transformToAbsolutePathIfNeeded(fileName);
return projectRoots.find(root => {
const absoluteRoot = transformToAbsolutePathIfNeeded(root);
return absoluteFileName.startsWith(absoluteRoot + path.sep);
});
}

let _childProcess = null;
function launchEditor(fileName, lineNumber, projectRoots) {
let _childProcess: ChildProcess | null = null;
function launchEditor(
fileName: string,
lineNumber: number,
projectRoots: string[],
) {
if (!fs.existsSync(fileName)) {
return;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,27 @@ import url from 'url';
import {Server as WebSocketServer} from 'ws';
import notifier from 'node-notifier';
import {logger} from '@react-native-community/cli-tools';
import {Server as HttpServer} from 'http';
import {Server as HttpsServer} from 'https';

const PROTOCOL_VERSION = 2;

function parseMessage(data, binary) {
type IdObject = {
requestId: string;
clientId: string;
};

type Message = {
version?: string;
id?: IdObject;
method?: string;
target: string;
result?: any;
error?: Error;
params?: Record<string, any>;
};

function parseMessage(data: string, binary: any) {
if (binary) {
logger.error('Expected text message, got binary!');
return undefined;
Expand All @@ -31,21 +48,21 @@ function parseMessage(data, binary) {
return undefined;
}

function isBroadcast(message) {
function isBroadcast(message: Message) {
return (
typeof message.method === 'string' &&
message.id === undefined &&
message.target === undefined
);
}

function isRequest(message) {
function isRequest(message: Message) {
return (
typeof message.method === 'string' && typeof message.target === 'string'
);
}

function isResponse(message) {
function isResponse(message: Message) {
return (
typeof message.id === 'object' &&
typeof message.id.requestId !== 'undefined' &&
Expand All @@ -54,15 +71,16 @@ function isResponse(message) {
);
}

function attachToServer(server, path) {
type Server = HttpServer | HttpsServer;
function attachToServer(server: Server, path: string) {
const wss = new WebSocketServer({
server,
path,
});
const clients = new Map();
let nextClientId = 0;

function getClientWs(clientId) {
function getClientWs(clientId: string) {
const clientWs = clients.get(clientId);
if (clientWs === undefined) {
throw new Error(
Expand All @@ -72,7 +90,10 @@ function attachToServer(server, path) {
return clientWs;
}

function handleSendBroadcast(broadcasterId, message) {
function handleSendBroadcast(
broadcasterId: string | null,
message: Partial<Message>,
) {
const forwarded = {
version: PROTOCOL_VERSION,
method: message.method,
Expand Down Expand Up @@ -104,7 +125,7 @@ function attachToServer(server, path) {
wss.on('connection', clientWs => {
const clientId = `client#${nextClientId++}`;

function handleCaughtError(message, error) {
function handleCaughtError(message: Message, error: Error) {
const errorMessage = {
id: message.id,
method: message.method,
Expand Down Expand Up @@ -138,7 +159,7 @@ function attachToServer(server, path) {
}
}

function handleServerRequest(message) {
function handleServerRequest(message: Message) {
let result = null;
switch (message.method) {
case 'getid':
Expand All @@ -165,7 +186,7 @@ function attachToServer(server, path) {
);
}

function forwardRequest(message) {
function forwardRequest(message: Message) {
getClientWs(message.target).send(
JSON.stringify({
version: PROTOCOL_VERSION,
Expand All @@ -179,7 +200,10 @@ function attachToServer(server, path) {
);
}

function forwardResponse(message) {
function forwardResponse(message: Message) {
if (!message.id) {
return;
}
getClientWs(message.id.clientId).send(
JSON.stringify({
version: PROTOCOL_VERSION,
Expand All @@ -192,12 +216,13 @@ function attachToServer(server, path) {

clients.set(clientId, clientWs);
const onCloseHandler = () => {
// @ts-ignore
clientWs.onmessage = null;
thymikee marked this conversation as resolved.
Show resolved Hide resolved
clients.delete(clientId);
};
clientWs.onclose = onCloseHandler;
clientWs.onerror = onCloseHandler;
clientWs.onmessage = event => {
clientWs.onmessage = (event: any) => {
const message = parseMessage(event.data, event.binary);
if (message === undefined) {
logger.error('Received message not matching protocol');
Expand Down Expand Up @@ -225,7 +250,7 @@ function attachToServer(server, path) {
});

return {
broadcast: (method, params) => {
broadcast: (method: string, params: Record<string, any>) => {
handleSendBroadcast(null, {method, params});
},
};
Expand Down
2 changes: 2 additions & 0 deletions packages/cli/src/commands/server/runServer.js
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,9 @@ import morgan from 'morgan';
import path from 'path';
import {logger} from '@react-native-community/cli-tools';
import type {ConfigT} from 'types';
// $FlowFixMe - converted to TS
import messageSocket from './messageSocket';
// $FlowFixMe - converted to TS
import webSocketProxy from './webSocketProxy';
import MiddlewareManager from './middleware/MiddlewareManager';
// $FlowFixMe - converted to TS
Expand Down
Loading