mirror of
https://github.com/status-im/metro.git
synced 2025-02-28 02:30:29 +00:00
Support null transformer AST output
Summary: This fixes https://github.com/facebook/metro/issues/99, which causes issues when metro tries to build files that are ignored by babel (if babel transformer ignores a file, it returns a null AST, which makes the collectDependencies logic break). Reviewed By: mjesun Differential Revision: D6466878 fbshipit-source-id: b5030e03775b982958a0b9204f4efccc8940ae4d
This commit is contained in:
parent
5d76d340e5
commit
de7f1d90f2
@ -14,6 +14,7 @@
|
|||||||
|
|
||||||
const JsFileWrapping = require('../../ModuleGraph/worker/JsFileWrapping');
|
const JsFileWrapping = require('../../ModuleGraph/worker/JsFileWrapping');
|
||||||
|
|
||||||
|
const babylon = require('babylon');
|
||||||
const collectDependencies = require('../../ModuleGraph/worker/collect-dependencies');
|
const collectDependencies = require('../../ModuleGraph/worker/collect-dependencies');
|
||||||
const constantFolding = require('./constant-folding');
|
const constantFolding = require('./constant-folding');
|
||||||
const generate = require('babel-generator').default;
|
const generate = require('babel-generator').default;
|
||||||
@ -43,7 +44,7 @@ export type TransformArgs<ExtraOptions: {}> = {|
|
|||||||
|};
|
|};
|
||||||
|
|
||||||
export type TransformResults = {
|
export type TransformResults = {
|
||||||
ast: Ast,
|
ast: ?Ast,
|
||||||
};
|
};
|
||||||
|
|
||||||
export type Transform<ExtraOptions: {}> = (
|
export type Transform<ExtraOptions: {}> = (
|
||||||
@ -92,8 +93,12 @@ function postTransform(
|
|||||||
isScript: boolean,
|
isScript: boolean,
|
||||||
options: Options,
|
options: Options,
|
||||||
transformFileStartLogEntry: LogEntry,
|
transformFileStartLogEntry: LogEntry,
|
||||||
ast: Ast,
|
receivedAst: ?Ast,
|
||||||
): Data {
|
): Data {
|
||||||
|
// Transformers can ouptut null ASTs (if they ignore the file). In that case
|
||||||
|
// we need to parse the module source code to get their AST.
|
||||||
|
const ast = receivedAst || babylon.parse(sourceCode, {sourceType: 'module'});
|
||||||
|
|
||||||
const timeDelta = process.hrtime(transformFileStartLogEntry.start_timestamp);
|
const timeDelta = process.hrtime(transformFileStartLogEntry.start_timestamp);
|
||||||
const duration_ms = Math.round((timeDelta[0] * 1e9 + timeDelta[1]) / 1e6);
|
const duration_ms = Math.round((timeDelta[0] * 1e9 + timeDelta[1]) / 1e6);
|
||||||
const transformFileEndLogEntry = {
|
const transformFileEndLogEntry = {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user