Alexey Kureev c4a66a89a2 Code clean-ups and createServer migration
Summary:
Scope of the diff:

1. Middleware
`react-native-github/local-cli` and `react-native-internal-cli` uses a very similar set of middlewares (internal cli extends github version), so I decided to move it to a standalone file (middleware manager) in order to remove duplications and increase readability.

2. Types
Seems that after Flow upgrade to version 0.68 there were many type issues to resolve, so all of them were auto-mocked. This is fine, but I'd like to see Flow assists me with `Metro.createServer` -> `Metro.runServer` migration. Hence, I decided to resolve flow mocks, related to runServer.

3. `runServer` signature
In `react-native-github` repo I cleaned up `runServer` signature by removing `startCallback` and `readyCallback` from the function parameters and moved them to `runServer` instead.

4. Replace `createServer` by `runServer`
In `react-native-github` repo, `createServer` has been replaced by `runServer`. __Some of arguments are not mapped__.

Note that this diff will partially break argument mapping. This is intentional. @[100000044482482:ives] will fix it with a new config package.

Reviewed By: mjesun

Differential Revision: D8711717

fbshipit-source-id: a843ab576360ff7242099910d8f25a9cb0a388c0
2018-07-02 09:47:39 -07:00

138 lines
3.8 KiB
JavaScript

/**
* Copyright (c) 2015-present, Facebook, Inc.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*
* @format
* @flow
*/
'use strict';
const runServer = require('./runServer');
import type {RNConfig} from '../core';
import type {ConfigT} from 'metro';
import type {Args as RunServerArgs} from './runServer';
/**
* Starts the React Native Packager Server.
*/
function server(argv: mixed, config: RNConfig, args: RunServerArgs) {
/* $FlowFixMe(site=react_native_fb) ConfigT shouldn't be extendable. */
const configT: ConfigT = config;
runServer(args, configT);
}
module.exports = {
name: 'start',
func: server,
description: 'starts the webserver',
options: [
{
command: '--port [number]',
default: process.env.RCT_METRO_PORT || 8081,
parse: (val: string) => Number(val),
},
{
command: '--host [string]',
default: '',
},
{
command: '--projectRoot [string]',
description: 'Specify the main project root',
default: (config: ConfigT) => {
return config.getProjectRoot();
},
},
{
command: '--watchFolders [list]',
description:
'Specify any additional folders to be added to the watch list',
parse: (val: string) => val.split(','),
default: (config: ConfigT) => {
return config.getWatchFolders();
},
},
{
command: '--assetExts [list]',
description:
'Specify any additional asset extensions to be used by the packager',
parse: (val: string) => val.split(','),
default: (config: ConfigT) => config.getAssetExts(),
},
{
command: '--sourceExts [list]',
description:
'Specify any additional source extensions to be used by the packager',
parse: (val: string) => val.split(','),
default: (config: ConfigT) => config.getSourceExts(),
},
{
command: '--platforms [list]',
description:
'Specify any additional platforms to be used by the packager',
parse: (val: string) => val.split(','),
default: (config: ConfigT) => config.getPlatforms(),
},
{
command: '--providesModuleNodeModules [list]',
description:
'Specify any npm packages that import dependencies with providesModule',
parse: (val: string) => val.split(','),
default: (config: RNConfig) => {
if (typeof config.getProvidesModuleNodeModules === 'function') {
return config.getProvidesModuleNodeModules();
}
return null;
},
},
{
command: '--max-workers [number]',
description:
'Specifies the maximum number of workers the worker-pool ' +
'will spawn for transforming files. This defaults to the number of the ' +
'cores available on your machine.',
parse: (workers: string) => Number(workers),
},
{
command: '--skipflow',
description: 'Disable flow checks',
},
{
command: '--nonPersistent',
description: 'Disable file watcher',
},
{
command: '--transformer [string]',
description: 'Specify a custom transformer to be used',
},
{
command: '--reset-cache, --resetCache',
description: 'Removes cached files',
},
{
command: '--custom-log-reporter-path, --customLogReporterPath [string]',
description:
'Path to a JavaScript file that exports a log reporter as a replacement for TerminalReporter',
},
{
command: '--verbose',
description: 'Enables logging',
},
{
command: '--https',
description: 'Enables https connections to the server',
},
{
command: '--key [path]',
description: 'Path to custom SSL key',
},
{
command: '--cert [path]',
description: 'Path to custom SSL cert',
},
],
};