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",
|
"debug": "^2.2.0",
|
||||||
"denodeify": "^1.2.1",
|
"denodeify": "^1.2.1",
|
||||||
"fbjs": "^0.8.14",
|
"fbjs": "^0.8.14",
|
||||||
|
"fs-extra": "^1.0.0",
|
||||||
"graceful-fs": "^4.1.3",
|
"graceful-fs": "^4.1.3",
|
||||||
"image-size": "^0.6.0",
|
"image-size": "^0.6.0",
|
||||||
"jest-docblock": "21.3.0-beta.8",
|
"jest-docblock": "21.3.0-beta.8",
|
||||||
|
|
|
@ -19,9 +19,9 @@ import type {ConfigT} from './Config';
|
||||||
|
|
||||||
const METRO_CONFIG_FILENAME = 'metro.config.js';
|
const METRO_CONFIG_FILENAME = 'metro.config.js';
|
||||||
|
|
||||||
exports.findMetroConfig = async (
|
exports.findMetroConfig = async function(
|
||||||
filename: ?string,
|
filename: ?string,
|
||||||
): Promise<$Shape<ConfigT>> => {
|
): Promise<$Shape<ConfigT>> {
|
||||||
if (filename) {
|
if (filename) {
|
||||||
// $FlowFixMe: We want this require to be dynamic
|
// $FlowFixMe: We want this require to be dynamic
|
||||||
return require(path.resolve(process.cwd(), filename));
|
return require(path.resolve(process.cwd(), filename));
|
||||||
|
@ -44,3 +44,14 @@ exports.findMetroConfig = async (
|
||||||
return {};
|
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';
|
'use strict';
|
||||||
|
|
||||||
const MetroApi = require('..');
|
const MetroApi = require('..');
|
||||||
const findMetroConfig = require('../cli-utils').findMetroConfig;
|
|
||||||
|
|
||||||
const os = require('os');
|
const os = require('os');
|
||||||
|
|
||||||
|
const {findMetroConfig, makeAsyncCommand} = require('../cli-utils');
|
||||||
|
|
||||||
import typeof Yargs from 'yargs';
|
import typeof Yargs from 'yargs';
|
||||||
|
|
||||||
exports.command = 'build <entry>';
|
exports.command = 'build <entry>';
|
||||||
|
@ -49,8 +50,8 @@ exports.builder = (yargs: Yargs) => {
|
||||||
yargs.option('config', {alias: 'c', type: 'string'});
|
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);
|
argv.config = await findMetroConfig(argv.config);
|
||||||
|
|
||||||
await MetroApi.runBuild(argv);
|
await MetroApi.runBuild(argv);
|
||||||
};
|
});
|
||||||
|
|
|
@ -13,10 +13,11 @@
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
const MetroApi = require('..');
|
const MetroApi = require('..');
|
||||||
const findMetroConfig = require('../cli-utils').findMetroConfig;
|
|
||||||
|
|
||||||
const os = require('os');
|
const os = require('os');
|
||||||
|
|
||||||
|
const {findMetroConfig, makeAsyncCommand} = require('../cli-utils');
|
||||||
|
|
||||||
import typeof Yargs from 'yargs';
|
import typeof Yargs from 'yargs';
|
||||||
|
|
||||||
exports.command = 'serve';
|
exports.command = 'serve';
|
||||||
|
@ -46,7 +47,8 @@ exports.builder = (yargs: Yargs) => {
|
||||||
yargs.option('config', {alias: 'c', type: 'string'});
|
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);
|
argv.config = await findMetroConfig(argv.config);
|
||||||
|
|
||||||
await MetroApi.runServer({
|
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 connect = require('connect');
|
||||||
|
|
||||||
|
const {realpath} = require('fs');
|
||||||
const {readFile} = require('fs-extra');
|
const {readFile} = require('fs-extra');
|
||||||
const {resolve} = require('path');
|
|
||||||
|
|
||||||
const defaultAssetExts = require('./defaults').assetExts;
|
const defaultAssetExts = require('./defaults').assetExts;
|
||||||
const defaultSourceExts = require('./defaults').sourceExts;
|
const defaultSourceExts = require('./defaults').sourceExts;
|
||||||
|
@ -56,7 +56,22 @@ type PrivateMetroOptions = {|
|
||||||
watch?: boolean,
|
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,
|
config,
|
||||||
maxWorkers = 1,
|
maxWorkers = 1,
|
||||||
projectRoots,
|
projectRoots,
|
||||||
|
@ -105,9 +120,12 @@ function runMetro({
|
||||||
watch,
|
watch,
|
||||||
workerPath:
|
workerPath:
|
||||||
normalizedConfig.getWorkerPath && normalizedConfig.getWorkerPath(),
|
normalizedConfig.getWorkerPath && normalizedConfig.getWorkerPath(),
|
||||||
projectRoots: normalizedConfig
|
projectRoots: await Promise.all(
|
||||||
|
normalizedConfig
|
||||||
.getProjectRoots()
|
.getProjectRoots()
|
||||||
.concat([...projectRoots.map(path => resolve(path))]),
|
.concat(projectRoots)
|
||||||
|
.map(path => asyncRealpath(path)),
|
||||||
|
),
|
||||||
};
|
};
|
||||||
|
|
||||||
return new MetroServer(serverOptions);
|
return new MetroServer(serverOptions);
|
||||||
|
@ -117,8 +135,10 @@ type CreateConnectMiddlewareOptions = {|
|
||||||
...PublicMetroOptions,
|
...PublicMetroOptions,
|
||||||
|};
|
|};
|
||||||
|
|
||||||
exports.createConnectMiddleware = (options: CreateConnectMiddlewareOptions) => {
|
exports.createConnectMiddleware = async function(
|
||||||
const metroServer = runMetro({
|
options: CreateConnectMiddlewareOptions,
|
||||||
|
) {
|
||||||
|
const metroServer = await runMetro({
|
||||||
config: options.config,
|
config: options.config,
|
||||||
maxWorkers: options.maxWorkers,
|
maxWorkers: options.maxWorkers,
|
||||||
projectRoots: options.projectRoots,
|
projectRoots: options.projectRoots,
|
||||||
|
|
|
@ -31,7 +31,8 @@ module.exports = function(
|
||||||
const buffer: Buffer = asBuffer(code, encoding);
|
const buffer: Buffer = asBuffer(code, encoding);
|
||||||
const hash = crypto.createHash('sha1');
|
const hash = crypto.createHash('sha1');
|
||||||
hash.update(buffer);
|
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
|
const signature = Buffer.alloc
|
||||||
? Buffer.alloc(digest.length + 1)
|
? Buffer.alloc(digest.length + 1)
|
||||||
: new Buffer(digest.length + 1);
|
: new Buffer(digest.length + 1);
|
||||||
|
|
Loading…
Reference in New Issue