mirror of https://github.com/status-im/metro.git
Fixes for the Metro cli
Reviewed By: BYK Differential Revision: D6348698 fbshipit-source-id: 3a00d9af7e03c5d636e2a51ce95842ca7d45b6e1
This commit is contained in:
parent
eb1ddfdcd9
commit
c2c99c4c1b
|
@ -30,6 +30,7 @@
|
|||
"debug": "^2.2.0",
|
||||
"denodeify": "^1.2.1",
|
||||
"fbjs": "^0.8.14",
|
||||
"fs-extra": "^1.0.0",
|
||||
"graceful-fs": "^4.1.3",
|
||||
"image-size": "^0.6.0",
|
||||
"jest-docblock": "21.3.0-beta.8",
|
||||
|
|
|
@ -19,9 +19,9 @@ import type {ConfigT} from './Config';
|
|||
|
||||
const METRO_CONFIG_FILENAME = 'metro.config.js';
|
||||
|
||||
exports.findMetroConfig = async (
|
||||
exports.findMetroConfig = async function(
|
||||
filename: ?string,
|
||||
): Promise<$Shape<ConfigT>> => {
|
||||
): Promise<$Shape<ConfigT>> {
|
||||
if (filename) {
|
||||
// $FlowFixMe: We want this require to be dynamic
|
||||
return require(path.resolve(process.cwd(), filename));
|
||||
|
@ -44,3 +44,14 @@ exports.findMetroConfig = async (
|
|||
return {};
|
||||
}
|
||||
};
|
||||
|
||||
// eslint-disable-next-line no-unclear-flowtypes
|
||||
exports.makeAsyncCommand = (command: (argv: any) => Promise<*>) => (
|
||||
// eslint-disable-next-line no-unclear-flowtypes
|
||||
argv: any,
|
||||
) => {
|
||||
Promise.resolve(command(argv)).catch(error => {
|
||||
console.error(error.stack);
|
||||
process.exitCode = 1;
|
||||
});
|
||||
};
|
||||
|
|
|
@ -13,10 +13,11 @@
|
|||
'use strict';
|
||||
|
||||
const MetroApi = require('..');
|
||||
const findMetroConfig = require('../cli-utils').findMetroConfig;
|
||||
|
||||
const os = require('os');
|
||||
|
||||
const {findMetroConfig, makeAsyncCommand} = require('../cli-utils');
|
||||
|
||||
import typeof Yargs from 'yargs';
|
||||
|
||||
exports.command = 'build <entry>';
|
||||
|
@ -49,8 +50,8 @@ exports.builder = (yargs: Yargs) => {
|
|||
yargs.option('config', {alias: 'c', type: 'string'});
|
||||
};
|
||||
|
||||
exports.handler = async (argv: any) => {
|
||||
// eslint-disable-next-line no-unclear-flowtypes
|
||||
exports.handler = makeAsyncCommand(async (argv: any) => {
|
||||
argv.config = await findMetroConfig(argv.config);
|
||||
|
||||
await MetroApi.runBuild(argv);
|
||||
};
|
||||
});
|
||||
|
|
|
@ -13,10 +13,11 @@
|
|||
'use strict';
|
||||
|
||||
const MetroApi = require('..');
|
||||
const findMetroConfig = require('../cli-utils').findMetroConfig;
|
||||
|
||||
const os = require('os');
|
||||
|
||||
const {findMetroConfig, makeAsyncCommand} = require('../cli-utils');
|
||||
|
||||
import typeof Yargs from 'yargs';
|
||||
|
||||
exports.command = 'serve';
|
||||
|
@ -46,7 +47,8 @@ exports.builder = (yargs: Yargs) => {
|
|||
yargs.option('config', {alias: 'c', type: 'string'});
|
||||
};
|
||||
|
||||
exports.handler = async (argv: any) => {
|
||||
// eslint-disable-next-line no-unclear-flowtypes
|
||||
exports.handler = makeAsyncCommand(async (argv: any) => {
|
||||
argv.config = await findMetroConfig(argv.config);
|
||||
|
||||
await MetroApi.runServer({
|
||||
|
@ -58,4 +60,4 @@ exports.handler = async (argv: any) => {
|
|||
);
|
||||
},
|
||||
});
|
||||
};
|
||||
});
|
||||
|
|
|
@ -22,8 +22,8 @@ const TransformCaching = require('./lib/TransformCaching');
|
|||
|
||||
const connect = require('connect');
|
||||
|
||||
const {realpath} = require('fs');
|
||||
const {readFile} = require('fs-extra');
|
||||
const {resolve} = require('path');
|
||||
|
||||
const defaultAssetExts = require('./defaults').assetExts;
|
||||
const defaultSourceExts = require('./defaults').sourceExts;
|
||||
|
@ -56,7 +56,22 @@ type PrivateMetroOptions = {|
|
|||
watch?: boolean,
|
||||
|};
|
||||
|
||||
function runMetro({
|
||||
// We'll be able to remove this to use the one provided by modern versions of
|
||||
// fs-extra once https://github.com/jprichardson/node-fs-extra/pull/520 will
|
||||
// have been merged (until then, they'll break on devservers/Sandcastle)
|
||||
async function asyncRealpath(path): Promise<string> {
|
||||
return new Promise((resolve, reject) => {
|
||||
realpath(path, (error, result) => {
|
||||
if (error) {
|
||||
reject(error);
|
||||
} else {
|
||||
resolve(result);
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
async function runMetro({
|
||||
config,
|
||||
maxWorkers = 1,
|
||||
projectRoots,
|
||||
|
@ -105,9 +120,12 @@ function runMetro({
|
|||
watch,
|
||||
workerPath:
|
||||
normalizedConfig.getWorkerPath && normalizedConfig.getWorkerPath(),
|
||||
projectRoots: normalizedConfig
|
||||
projectRoots: await Promise.all(
|
||||
normalizedConfig
|
||||
.getProjectRoots()
|
||||
.concat([...projectRoots.map(path => resolve(path))]),
|
||||
.concat(projectRoots)
|
||||
.map(path => asyncRealpath(path)),
|
||||
),
|
||||
};
|
||||
|
||||
return new MetroServer(serverOptions);
|
||||
|
@ -117,8 +135,10 @@ type CreateConnectMiddlewareOptions = {|
|
|||
...PublicMetroOptions,
|
||||
|};
|
||||
|
||||
exports.createConnectMiddleware = (options: CreateConnectMiddlewareOptions) => {
|
||||
const metroServer = runMetro({
|
||||
exports.createConnectMiddleware = async function(
|
||||
options: CreateConnectMiddlewareOptions,
|
||||
) {
|
||||
const metroServer = await runMetro({
|
||||
config: options.config,
|
||||
maxWorkers: options.maxWorkers,
|
||||
projectRoots: options.projectRoots,
|
||||
|
|
|
@ -31,7 +31,8 @@ module.exports = function(
|
|||
const buffer: Buffer = asBuffer(code, encoding);
|
||||
const hash = crypto.createHash('sha1');
|
||||
hash.update(buffer);
|
||||
const digest = hash.digest();
|
||||
// $FlowFixMe: Flow doesn't know that 'buffer' is a valid value
|
||||
const digest = hash.digest('buffer');
|
||||
const signature = Buffer.alloc
|
||||
? Buffer.alloc(digest.length + 1)
|
||||
: new Buffer(digest.length + 1);
|
||||
|
|
Loading…
Reference in New Issue