diff --git a/packages/cli/package.json b/packages/cli/package.json index 8d54bb3ab..7ed797ed2 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -29,9 +29,9 @@ "@react-native-community/cli-tools": "^2.8.3", "@react-native-community/cli-types": "^3.0.0-alpha.2", "@types/mkdirp": "^0.5.2", + "@types/node-notifier": "^5.4.0", "@types/semver": "^6.0.2", "@types/ws": "^6.0.3", - "@types/node-notifier": "^5.4.0", "chalk": "^2.4.2", "command-exists": "^1.2.8", "commander": "^2.19.0", @@ -72,11 +72,14 @@ }, "devDependencies": { "@types/command-exists": "^1.2.0", + "@types/compression": "^1.0.1", "@types/cosmiconfig": "^5.0.3", + "@types/errorhandler": "^0.0.32", "@types/graceful-fs": "^4.1.3", "@types/hapi__joi": "^15.0.4", "@types/minimist": "^1.2.0", "@types/mkdirp": "^0.5.2", + "@types/morgan": "^1.7.37", "@types/semver": "^6.0.2", "@types/wcwidth": "^1.0.0", "slash": "^3.0.0", diff --git a/packages/cli/src/commands/doctor/healthchecks/androidSDK.ts b/packages/cli/src/commands/doctor/healthchecks/androidSDK.ts index a53b56487..e4d8fcec6 100644 --- a/packages/cli/src/commands/doctor/healthchecks/androidSDK.ts +++ b/packages/cli/src/commands/doctor/healthchecks/androidSDK.ts @@ -20,7 +20,6 @@ export default { // See the PR: https://github.com/tabrindle/envinfo/pull/119 if (sdks === 'Not Found' && process.platform !== 'darwin') { try { - // $FlowFixMe bad execa types const {stdout} = await execa( process.env.ANDROID_HOME ? `${process.env.ANDROID_HOME}/tools/bin/sdkmanager` diff --git a/packages/cli/src/commands/link/__tests__/link-test.ts b/packages/cli/src/commands/link/__tests__/link.test.ts similarity index 100% rename from packages/cli/src/commands/link/__tests__/link-test.ts rename to packages/cli/src/commands/link/__tests__/link.test.ts diff --git a/packages/cli/src/commands/link/__tests__/makeHook-test.ts b/packages/cli/src/commands/link/__tests__/makeHook.test.ts similarity index 100% rename from packages/cli/src/commands/link/__tests__/makeHook-test.ts rename to packages/cli/src/commands/link/__tests__/makeHook.test.ts diff --git a/packages/cli/src/commands/server/messageSocket.ts b/packages/cli/src/commands/server/messageSocket.ts index 911622900..c3bd6603b 100644 --- a/packages/cli/src/commands/server/messageSocket.ts +++ b/packages/cli/src/commands/server/messageSocket.ts @@ -250,7 +250,8 @@ function attachToServer(server: Server, path: string) { }); return { - broadcast: (method: string, params: Record) => { + isDebuggerConnected: () => true, + broadcast: (method: string, params?: Record) => { handleSendBroadcast(null, {method, params}); }, }; diff --git a/packages/cli/src/commands/server/middleware/MiddlewareManager.js b/packages/cli/src/commands/server/middleware/MiddlewareManager.ts similarity index 87% rename from packages/cli/src/commands/server/middleware/MiddlewareManager.js rename to packages/cli/src/commands/server/middleware/MiddlewareManager.ts index bf429fb51..018e8fcf5 100644 --- a/packages/cli/src/commands/server/middleware/MiddlewareManager.js +++ b/packages/cli/src/commands/server/middleware/MiddlewareManager.ts @@ -3,9 +3,6 @@ * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. - * - * @strict - * @flow */ import compression from 'compression'; @@ -26,19 +23,18 @@ import systraceProfileMiddleware from './systraceProfileMiddleware'; import getDevToolsMiddleware from './getDevToolsMiddleware'; type Options = { - +watchFolders: $ReadOnlyArray, - +host?: string, + host?: string; + watchFolders: Array; + port: number; }; type WebSocketProxy = { - server: WebSocketServer, - isDebuggerConnected: () => boolean, + server?: WebSocketServer; + isDebuggerConnected: () => boolean; }; -type Connect = $Call; - export default class MiddlewareManager { - app: Connect; + app: connect.Server; options: Options; @@ -49,6 +45,7 @@ export default class MiddlewareManager { this.app = connect() .use(getSecurityHeadersMiddleware) .use(loadRawBodyMiddleware) + // @ts-ignore compression and connect types mismatch .use(compression()) .use('/debugger-ui', serveStatic(debuggerUIFolder)) .use(openStackFrameInEditorMiddleware(this.options)) @@ -61,6 +58,7 @@ export default class MiddlewareManager { } serveStatic(folder: string) { + // @ts-ignore serveStatic and connect types mismatch this.app.use(serveStatic(folder)); } diff --git a/packages/cli/src/commands/server/middleware/copyToClipBoardMiddleware.js b/packages/cli/src/commands/server/middleware/copyToClipBoardMiddleware.ts similarity index 70% rename from packages/cli/src/commands/server/middleware/copyToClipBoardMiddleware.js rename to packages/cli/src/commands/server/middleware/copyToClipBoardMiddleware.ts index ab369efdb..d7665c1f5 100644 --- a/packages/cli/src/commands/server/middleware/copyToClipBoardMiddleware.js +++ b/packages/cli/src/commands/server/middleware/copyToClipBoardMiddleware.ts @@ -4,9 +4,8 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * - * @format */ - +import http from 'http'; import copyToClipBoard from '../copyToClipBoard'; import {logger} from '@react-native-community/cli-tools'; @@ -14,9 +13,15 @@ import {logger} from '@react-native-community/cli-tools'; * Handle the request from JS to copy contents onto host system clipboard. * This is only supported on Mac for now. */ -export default function copyMiddleware(req, res, next) { +export default function copyMiddleware( + req: http.IncomingMessage, + res: http.ServerResponse, + next: (err?: any) => void, +) { if (req.url === '/copy-to-clipboard') { - const ret = copyToClipBoard(req.rawBody); + const ret = copyToClipBoard( + (req as http.IncomingMessage & {rawBody: string}).rawBody, + ); if (!ret) { logger.warn('Copy button is not supported on this platform!'); } diff --git a/packages/cli/src/commands/server/middleware/getDevToolsMiddleware.js b/packages/cli/src/commands/server/middleware/getDevToolsMiddleware.ts similarity index 63% rename from packages/cli/src/commands/server/middleware/getDevToolsMiddleware.js rename to packages/cli/src/commands/server/middleware/getDevToolsMiddleware.ts index fad5a8728..9f13b2ba5 100644 --- a/packages/cli/src/commands/server/middleware/getDevToolsMiddleware.js +++ b/packages/cli/src/commands/server/middleware/getDevToolsMiddleware.ts @@ -3,25 +3,29 @@ * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. - * - * @format */ +import http from 'http'; import {logger} from '@react-native-community/cli-tools'; import {exec} from 'child_process'; import launchDebugger from '../launchDebugger'; -function launchDefaultDebugger(port, args = '') { +function launchDefaultDebugger(port: number, args = '') { const debuggerURL = `http://localhost:${port}/debugger-ui${args}`; logger.info('Launching Dev Tools...'); launchDebugger(debuggerURL); } -function escapePath(pathname) { +function escapePath(pathname: string) { // " Can escape paths with spaces in OS X, Windows, and *nix return `"${pathname}"`; } -function launchDevTools({port, watchFolders}, isDebuggerConnected) { +type LaunchDevToolsOptions = {port: number; watchFolders: Array}; + +function launchDevTools( + {port, watchFolders}: LaunchDevToolsOptions, + isDebuggerConnected: () => boolean, +) { // Explicit config always wins const customDebugger = process.env.REACT_DEBUGGER; if (customDebugger) { @@ -32,19 +36,32 @@ function launchDevTools({port, watchFolders}, isDebuggerConnected) { } } -function startCustomDebugger({watchFolders, customDebugger}) { +function startCustomDebugger({ + watchFolders, + customDebugger, +}: { + watchFolders: Array; + customDebugger: string; +}) { const folders = watchFolders.map(escapePath).join(' '); const command = `${customDebugger} ${folders}`; logger.info('Starting custom debugger by executing:', command); - exec(command, function(error, stdout, stderr) { + exec(command, function(error) { if (error !== null) { - logger.error('Error while starting custom debugger:', error); + logger.error('Error while starting custom debugger:', error.stack || ''); } }); } -export default function getDevToolsMiddleware(options, isDebuggerConnected) { - return function devToolsMiddleware(req, res, next) { +export default function getDevToolsMiddleware( + options: LaunchDevToolsOptions, + isDebuggerConnected: () => boolean, +) { + return function devToolsMiddleware( + req: http.IncomingMessage, + res: http.ServerResponse, + next: (err?: any) => void, + ) { if (req.url === '/launch-js-devtools') { launchDevTools(options, isDebuggerConnected); res.end('OK'); diff --git a/packages/cli/src/commands/server/middleware/getSecurityHeadersMiddleware.js b/packages/cli/src/commands/server/middleware/getSecurityHeadersMiddleware.ts similarity index 74% rename from packages/cli/src/commands/server/middleware/getSecurityHeadersMiddleware.js rename to packages/cli/src/commands/server/middleware/getSecurityHeadersMiddleware.ts index 38de1c232..498ce8b6f 100644 --- a/packages/cli/src/commands/server/middleware/getSecurityHeadersMiddleware.js +++ b/packages/cli/src/commands/server/middleware/getSecurityHeadersMiddleware.ts @@ -3,12 +3,15 @@ * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. - * - * @strict - * @format */ +import http from 'http'; -export default function getSecurityHeadersMiddleware(req, res, next) { +export default function getSecurityHeadersMiddleware( + req: http.IncomingMessage, + res: http.ServerResponse, + next: (err?: any) => void, +) { + // @ts-ignore Property 'client' does not exist on type 'IncomingMessage', verify const address = req.client.server.address(); // Block any cross origin request. diff --git a/packages/cli/src/commands/server/middleware/indexPage.js b/packages/cli/src/commands/server/middleware/indexPage.ts similarity index 71% rename from packages/cli/src/commands/server/middleware/indexPage.js rename to packages/cli/src/commands/server/middleware/indexPage.ts index 28a1d48b8..403c8e922 100644 --- a/packages/cli/src/commands/server/middleware/indexPage.js +++ b/packages/cli/src/commands/server/middleware/indexPage.ts @@ -3,14 +3,16 @@ * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. - * - * @format */ - +import http from 'http'; import fs from 'fs'; import path from 'path'; -export default function indexPageMiddleware(req, res, next) { +export default function indexPageMiddleware( + req: http.IncomingMessage, + res: http.ServerResponse, + next: (err?: any) => void, +) { if (req.url === '/') { res.setHeader('Content-Type', 'text/html'); res.end(fs.readFileSync(path.join(__dirname, 'index.html'))); diff --git a/packages/cli/src/commands/server/middleware/loadRawBodyMiddleware.js b/packages/cli/src/commands/server/middleware/loadRawBodyMiddleware.js deleted file mode 100644 index d65533986..000000000 --- a/packages/cli/src/commands/server/middleware/loadRawBodyMiddleware.js +++ /dev/null @@ -1,21 +0,0 @@ -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - * - * @format - */ - -export default function rawBodyMiddleware(req, res, next) { - req.rawBody = ''; - req.setEncoding('utf8'); - - req.on('data', chunk => { - req.rawBody += chunk; - }); - - req.on('end', () => { - next(); - }); -} diff --git a/packages/cli/src/commands/server/middleware/loadRawBodyMiddleware.ts b/packages/cli/src/commands/server/middleware/loadRawBodyMiddleware.ts new file mode 100644 index 000000000..2a9746387 --- /dev/null +++ b/packages/cli/src/commands/server/middleware/loadRawBodyMiddleware.ts @@ -0,0 +1,24 @@ +/** + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ +import http from 'http'; + +export default function rawBodyMiddleware( + req: http.IncomingMessage, + _res: http.ServerResponse, + next: (err?: any) => void, +) { + (req as http.IncomingMessage & {rawBody: string}).rawBody = ''; + req.setEncoding('utf8'); + + req.on('data', (chunk: string) => { + (req as http.IncomingMessage & {rawBody: string}).rawBody += chunk; + }); + + req.on('end', () => { + next(); + }); +} diff --git a/packages/cli/src/commands/server/middleware/openStackFrameInEditorMiddleware.js b/packages/cli/src/commands/server/middleware/openStackFrameInEditorMiddleware.ts similarity index 61% rename from packages/cli/src/commands/server/middleware/openStackFrameInEditorMiddleware.js rename to packages/cli/src/commands/server/middleware/openStackFrameInEditorMiddleware.ts index 676ddd49a..6e6b89b3f 100644 --- a/packages/cli/src/commands/server/middleware/openStackFrameInEditorMiddleware.js +++ b/packages/cli/src/commands/server/middleware/openStackFrameInEditorMiddleware.ts @@ -3,14 +3,20 @@ * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. - * - * @format */ - +import http from 'http'; import launchEditor from '../launchEditor'; -export default function getOpenStackFrameInEditorMiddleware({watchFolders}) { - return (req, res, next) => { +export default function getOpenStackFrameInEditorMiddleware({ + watchFolders, +}: { + watchFolders: Array; +}) { + return ( + req: http.IncomingMessage & {rawBody: string}, + res: http.ServerResponse, + next: (err?: any) => void, + ) => { if (req.url === '/open-stack-frame') { const frame = JSON.parse(req.rawBody); launchEditor(frame.file, frame.lineNumber, watchFolders); diff --git a/packages/cli/src/commands/server/middleware/openURLMiddleware.js b/packages/cli/src/commands/server/middleware/openURLMiddleware.ts similarity index 76% rename from packages/cli/src/commands/server/middleware/openURLMiddleware.js rename to packages/cli/src/commands/server/middleware/openURLMiddleware.ts index 6f468c0a3..1a3a4525f 100644 --- a/packages/cli/src/commands/server/middleware/openURLMiddleware.js +++ b/packages/cli/src/commands/server/middleware/openURLMiddleware.ts @@ -3,17 +3,19 @@ * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. - * - * @format */ - +import http from 'http'; import launchDefaultBrowser from '../launchDefaultBrowser'; import {logger} from '@react-native-community/cli-tools'; /** * Handle request from JS to open an arbitrary URL in Chrome */ -export default function openURLMiddleware(req, res, next) { +export default function openURLMiddleware( + req: http.IncomingMessage & {rawBody: string}, + res: http.ServerResponse, + next: (err?: any) => void, +) { if (req.url === '/open-url') { const {url} = JSON.parse(req.rawBody); logger.info(`Opening ${url}...`); diff --git a/packages/cli/src/commands/server/middleware/statusPageMiddleware.js b/packages/cli/src/commands/server/middleware/statusPageMiddleware.ts similarity index 72% rename from packages/cli/src/commands/server/middleware/statusPageMiddleware.js rename to packages/cli/src/commands/server/middleware/statusPageMiddleware.ts index 183ecc0f7..215bf5c3c 100644 --- a/packages/cli/src/commands/server/middleware/statusPageMiddleware.js +++ b/packages/cli/src/commands/server/middleware/statusPageMiddleware.ts @@ -3,15 +3,18 @@ * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. - * - * @format */ +import http from 'http'; /** * Status page so that anyone who needs to can verify that the packager is * running on 8081 and not another program / service. */ -export default function statusPageMiddleware(req, res, next) { +export default function statusPageMiddleware( + req: http.IncomingMessage, + res: http.ServerResponse, + next: (err?: any) => void, +) { if (req.url === '/status') { res.end('packager-status:running'); } else { diff --git a/packages/cli/src/commands/server/middleware/systraceProfileMiddleware.js b/packages/cli/src/commands/server/middleware/systraceProfileMiddleware.ts similarity index 81% rename from packages/cli/src/commands/server/middleware/systraceProfileMiddleware.js rename to packages/cli/src/commands/server/middleware/systraceProfileMiddleware.ts index 0a54d0687..35557aa81 100644 --- a/packages/cli/src/commands/server/middleware/systraceProfileMiddleware.js +++ b/packages/cli/src/commands/server/middleware/systraceProfileMiddleware.ts @@ -3,14 +3,16 @@ * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. - * - * @format */ - +import http from 'http'; import fs from 'fs'; import {logger} from '@react-native-community/cli-tools'; -export default function systraceProfileMiddleware(req, res, next) { +export default function systraceProfileMiddleware( + req: http.IncomingMessage & {rawBody: string}, + res: http.ServerResponse, + next: (err?: any) => void, +) { if (req.url !== '/systrace') { next(); return; diff --git a/packages/cli/src/commands/server/middleware/unless.js b/packages/cli/src/commands/server/middleware/unless.js deleted file mode 100644 index 77f11d75e..000000000 --- a/packages/cli/src/commands/server/middleware/unless.js +++ /dev/null @@ -1,16 +0,0 @@ -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - * - * @format - */ - -export default (url, middleware) => (req, res, next) => { - if (req.url === url || req.url.startsWith(`${url}/`)) { - middleware(req, res, next); - } else { - next(); - } -}; diff --git a/packages/cli/src/commands/server/runServer.js b/packages/cli/src/commands/server/runServer.ts similarity index 75% rename from packages/cli/src/commands/server/runServer.js rename to packages/cli/src/commands/server/runServer.ts index e2039f31f..968297ebe 100644 --- a/packages/cli/src/commands/server/runServer.js +++ b/packages/cli/src/commands/server/runServer.ts @@ -3,48 +3,44 @@ * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. - * - * @flow */ +// @ts-ignore untyped metro import Metro from 'metro'; +// @ts-ignore untyped metro import {Terminal} from 'metro-core'; 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 {Config} from '@react-native-community/cli-types'; import messageSocket from './messageSocket'; -// $FlowFixMe - converted to TS import webSocketProxy from './webSocketProxy'; import MiddlewareManager from './middleware/MiddlewareManager'; -// $FlowFixMe - converted to TS import loadMetroConfig from '../../tools/loadMetroConfig'; -// $FlowFixMe - converted to TS import releaseChecker from '../../tools/releaseChecker'; -export type Args = {| - assetPlugins?: string[], - cert?: string, - customLogReporterPath?: string, - host?: string, - https?: boolean, - maxWorkers?: number, - key?: string, - platforms?: string[], - port?: number, - resetCache?: boolean, - sourceExts?: string[], - transformer?: string, - verbose?: boolean, - watchFolders?: string[], - config?: string, - projectRoot?: string, -|}; - -async function runServer(argv: Array, ctx: ConfigT, args: Args) { +export type Args = { + assetPlugins?: string[]; + cert?: string; + customLogReporterPath?: string; + host?: string; + https?: boolean; + maxWorkers?: number; + key?: string; + platforms?: string[]; + port?: number; + resetCache?: boolean; + sourceExts?: string[]; + transformer?: string; + verbose?: boolean; + watchFolders?: string[]; + config?: string; + projectRoot?: string; +}; + +async function runServer(_argv: Array, ctx: Config, args: Args) { const terminal = new Terminal(process.stdout); - const ReporterImpl = getReporterImpl(args.customLogReporterPath || null); + const ReporterImpl = getReporterImpl(args.customLogReporterPath); const reporter = new ReporterImpl(terminal); const metroConfig = await loadMetroConfig(ctx, { @@ -71,11 +67,14 @@ async function runServer(argv: Array, ctx: ConfigT, args: Args) { }); middlewareManager.getConnectInstance().use( + // @ts-ignore morgan and connect types mismatch morgan( 'combined', - !logger.isVerbose() && { - skip: (req, res) => res.statusCode < 400, - }, + !logger.isVerbose() + ? { + skip: (_req, res) => res.statusCode < 400, + } + : undefined, ), ); @@ -85,7 +84,7 @@ async function runServer(argv: Array, ctx: ConfigT, args: Args) { const customEnhanceMiddleware = metroConfig.server.enhanceMiddleware; - metroConfig.server.enhanceMiddleware = (middleware, server) => { + metroConfig.server.enhanceMiddleware = (middleware: any, server: unknown) => { if (customEnhanceMiddleware) { middleware = customEnhanceMiddleware(middleware, server); } @@ -109,10 +108,12 @@ async function runServer(argv: Array, ctx: ConfigT, args: Args) { middlewareManager.attachDevToolsSocket(wsProxy); middlewareManager.attachDevToolsSocket(ms); - middlewareManager.getConnectInstance().use('/reload', (req, res) => { - ms.broadcast('reload', null); - res.end('OK'); - }); + middlewareManager + .getConnectInstance() + .use('/reload', (_req: unknown, res: any) => { + ms.broadcast('reload'); + res.end('OK'); + }); // In Node 8, the default keep-alive for an HTTP connection is 5 seconds. In // early versions of Node 8, this was implemented in a buggy way which caused @@ -129,8 +130,8 @@ async function runServer(argv: Array, ctx: ConfigT, args: Args) { await releaseChecker(ctx.root); } -function getReporterImpl(customLogReporterPath: ?string) { - if (customLogReporterPath == null) { +function getReporterImpl(customLogReporterPath: string | void) { + if (customLogReporterPath === undefined) { return require('metro/src/lib/TerminalReporter'); } try { diff --git a/packages/cli/src/commands/server/server.js b/packages/cli/src/commands/server/server.ts similarity index 99% rename from packages/cli/src/commands/server/server.js rename to packages/cli/src/commands/server/server.ts index 42e120faf..d7c7b86ca 100644 --- a/packages/cli/src/commands/server/server.js +++ b/packages/cli/src/commands/server/server.ts @@ -4,8 +4,6 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * - * @format - * @flow */ import path from 'path'; diff --git a/packages/cli/src/tools/config/__tests__/findDependencies-test.ts b/packages/cli/src/tools/config/__tests__/findDependencies-test.ts index a0a8afaee..818643ca9 100644 --- a/packages/cli/src/tools/config/__tests__/findDependencies-test.ts +++ b/packages/cli/src/tools/config/__tests__/findDependencies-test.ts @@ -6,7 +6,7 @@ import findDependencies from '../findDependencies'; import { cleanup, writeFiles, - getTempDirectory, // $FlowFixMe - converted to TS + getTempDirectory, } from '../../../../../../jest/helpers'; jest.mock('../resolveNodeModuleDir'); diff --git a/packages/cli/src/tools/config/__tests__/index-test.ts b/packages/cli/src/tools/config/__tests__/index-test.ts index e789bd890..015012c45 100644 --- a/packages/cli/src/tools/config/__tests__/index-test.ts +++ b/packages/cli/src/tools/config/__tests__/index-test.ts @@ -8,7 +8,7 @@ import {logger} from '@react-native-community/cli-tools'; import { cleanup, writeFiles, - getTempDirectory, // $FlowFixMe - converted to TS + getTempDirectory, } from '../../../../../../jest/helpers'; jest.mock('../resolveNodeModuleDir'); diff --git a/packages/cli/src/tools/config/index.ts b/packages/cli/src/tools/config/index.ts index f0a5d1b2b..7420108b5 100644 --- a/packages/cli/src/tools/config/index.ts +++ b/packages/cli/src/tools/config/index.ts @@ -43,8 +43,6 @@ function getDependencyConfig( ? null : platformConfig.dependencyConfig( root, - /* $FlowFixMe - can't figure out which platform's dependency - config to choose */ config.dependency.platforms[platform], ); return dependency; diff --git a/packages/cli/src/tools/loadMetroConfig.ts b/packages/cli/src/tools/loadMetroConfig.ts index b9c3426c2..7b82e592f 100644 --- a/packages/cli/src/tools/loadMetroConfig.ts +++ b/packages/cli/src/tools/loadMetroConfig.ts @@ -46,6 +46,7 @@ export interface MetroConfig { }; server: { port: number; + enhanceMiddleware?: Function; }; symbolicator: { customizeFrame: (frame: {file: string | null}) => {collapse: boolean}; @@ -53,6 +54,7 @@ export interface MetroConfig { transformer: { babelTransformerPath: string; assetRegistryPath: string; + assetPlugins?: Array; }; watchFolders: string[]; reporter?: any; diff --git a/yarn.lock b/yarn.lock index dd6834730..da7c17a9e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2027,11 +2027,33 @@ dependencies: "@babel/types" "^7.3.0" +"@types/body-parser@*": + version "1.17.1" + resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.17.1.tgz#18fcf61768fb5c30ccc508c21d6fd2e8b3bf7897" + integrity sha512-RoX2EZjMiFMjZh9lmYrwgoP9RTpAjSHiJxdp4oidAQVO02T7HER3xj9UKue5534ULWeqVEkujhWcyvUce+d68w== + dependencies: + "@types/connect" "*" + "@types/node" "*" + "@types/command-exists@^1.2.0": version "1.2.0" resolved "https://registry.yarnpkg.com/@types/command-exists/-/command-exists-1.2.0.tgz#d97e0ed10097090e4ab0367ed425b0312fad86f3" integrity sha512-ugsxEJfsCuqMLSuCD4PIJkp5Uk2z6TCMRCgYVuhRo5cYQY3+1xXTQkSlPtkpGHuvWMjS2KTeVQXxkXRACMbM6A== +"@types/compression@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@types/compression/-/compression-1.0.1.tgz#f3682a6b3ce2dbd4aece48547153ebc592281fa7" + integrity sha512-GuoIYzD70h+4JUqUabsm31FGqvpCYHGKcLtor7nQ/YvUyNX0o9SJZ9boFI5HjFfbOda5Oe/XOvNK6FES8Y/79w== + dependencies: + "@types/express" "*" + +"@types/connect@*": + version "3.4.32" + resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.32.tgz#aa0e9616b9435ccad02bc52b5b454ffc2c70ba28" + integrity sha512-4r8qa0quOvh7lGD0pre62CAb1oni1OO6ecJLGCezTmhQ8Fz50Arx9RUszryR8KlgK6avuSXvviL6yWyViQABOg== + dependencies: + "@types/node" "*" + "@types/cosmiconfig@^5.0.3": version "5.0.3" resolved "https://registry.yarnpkg.com/@types/cosmiconfig/-/cosmiconfig-5.0.3.tgz#880644bb155d4038d3b752159684b777b0a159dd" @@ -2039,6 +2061,13 @@ dependencies: "@types/node" "*" +"@types/errorhandler@^0.0.32": + version "0.0.32" + resolved "https://registry.yarnpkg.com/@types/errorhandler/-/errorhandler-0.0.32.tgz#387eca73957b481254baddc15d1d40f7fe7153c6" + integrity sha512-wC9CfwPMIzklPd5lEYC8HnQdlMC1PswlohWmEDMWlw+E/rMYuz5eSqKBc72Earb29KptKJrRl77qVRJzrZndww== + dependencies: + "@types/express" "*" + "@types/events@*": version "3.0.0" resolved "https://registry.yarnpkg.com/@types/events/-/events-3.0.0.tgz#2862f3f58a9a7f7c3e78d79f130dd4d71c25c2a7" @@ -2051,6 +2080,23 @@ dependencies: "@types/node" "*" +"@types/express-serve-static-core@*": + version "4.16.9" + resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.16.9.tgz#69e00643b0819b024bdede95ced3ff239bb54558" + integrity sha512-GqpaVWR0DM8FnRUJYKlWgyARoBUAVfRIeVDZQKOttLFp5SmhhF9YFIYeTPwMd/AXfxlP7xVO2dj1fGu0Q+krKQ== + dependencies: + "@types/node" "*" + "@types/range-parser" "*" + +"@types/express@*": + version "4.17.1" + resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.1.tgz#4cf7849ae3b47125a567dfee18bfca4254b88c5c" + integrity sha512-VfH/XCP0QbQk5B5puLqTLEeFgR8lfCJHZJKkInZ9mkYd+u8byX0kztXEQxEk4wZXJs8HI+7km2ALXjn4YKcX9w== + dependencies: + "@types/body-parser" "*" + "@types/express-serve-static-core" "*" + "@types/serve-static" "*" + "@types/fs-extra@^8.0.0": version "8.0.0" resolved "https://registry.yarnpkg.com/@types/fs-extra/-/fs-extra-8.0.0.tgz#d3e2c313ca29f95059f198dd60d1f774642d4b25" @@ -2113,7 +2159,7 @@ resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.123.tgz#39be5d211478c8dd3bdae98ee75bb7efe4abfe4d" integrity sha512-pQvPkc4Nltyx7G1Ww45OjVqUsJP4UsZm+GWJpigXgkikZqJgRm4c48g027o6tdgubWHwFRF15iFd+Y4Pmqv6+Q== -"@types/mime@^2.0.1": +"@types/mime@*", "@types/mime@^2.0.1": version "2.0.1" resolved "https://registry.yarnpkg.com/@types/mime/-/mime-2.0.1.tgz#dc488842312a7f075149312905b5e3c0b054c79d" integrity sha512-FwI9gX75FgVBJ7ywgnq/P7tw+/o1GUbtP0KzbtusLigAOgIgNISRK0ZPl4qertvXSIE8YbsVJueQ90cDt9YYyw== @@ -2135,6 +2181,13 @@ dependencies: "@types/node" "*" +"@types/morgan@^1.7.37": + version "1.7.37" + resolved "https://registry.yarnpkg.com/@types/morgan/-/morgan-1.7.37.tgz#ebdd0b0f0276073f85283bf4f03c7c54284874df" + integrity sha512-tIdEA10BcHcOumMmUiiYdw8lhiVVq62r0ghih5Xpp4WETkfsMiTUZL4w9jCI502BBOrKhFrAOGml9IeELvVaBA== + dependencies: + "@types/express" "*" + "@types/node-fetch@^2.3.3": version "2.3.3" resolved "https://registry.yarnpkg.com/@types/node-fetch/-/node-fetch-2.3.3.tgz#eb9c2a0ce8e9424ebe0c0cbe6f1e8ea7576c1310" @@ -2174,11 +2227,24 @@ "@types/node" "*" xmlbuilder ">=11.0.1" +"@types/range-parser@*": + version "1.2.3" + resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.3.tgz#7ee330ba7caafb98090bece86a5ee44115904c2c" + integrity sha512-ewFXqrQHlFsgc09MK5jP5iR7vumV/BYayNC6PgJO2LPe8vrnNFyjQjSppfEngITi0qvfKtzFvgKymGheFM9UOA== + "@types/semver@^6.0.2": version "6.0.2" resolved "https://registry.yarnpkg.com/@types/semver/-/semver-6.0.2.tgz#5e8b09f0e4af53034b1d0fb9977a277847836205" integrity sha512-G1Ggy7/9Nsa1Jt2yiBR2riEuyK2DFNnqow6R7cromXPMNynackRY1vqFTLz/gwnef1LHokbXThcPhqMRjUbkpQ== +"@types/serve-static@*": + version "1.13.3" + resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.13.3.tgz#eb7e1c41c4468272557e897e9171ded5e2ded9d1" + integrity sha512-oprSwp094zOglVrXdlo/4bAHtKTAxX6VT8FOZlBKrmyLbNvE1zxZyJ6yikMVtHIvwP45+ZQGJn+FdXGKTozq0g== + dependencies: + "@types/express-serve-static-core" "*" + "@types/mime" "*" + "@types/stack-utils@^1.0.1": version "1.0.1" resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-1.0.1.tgz#0a851d3bd96498fa25c33ab7278ed3bd65f06c3e"