mirror of https://github.com/status-im/metro.git
packager worker: more @flow
Reviewed By: matryoshcow Differential Revision: D4160528 fbshipit-source-id: 5f43cb47717288c5344c1204cf435ec727ca752e
This commit is contained in:
parent
855a74d2b1
commit
dfd9713fce
|
@ -5,10 +5,15 @@
|
|||
* This source code is licensed under the BSD-style license found in the
|
||||
* LICENSE file in the root directory of this source tree. An additional grant
|
||||
* of patent rights can be found in the PATENTS file in the same directory.
|
||||
*
|
||||
* @flow
|
||||
*/
|
||||
|
||||
'use strict';
|
||||
|
||||
const babel = require('babel-core');
|
||||
|
||||
import type {Ast, SourceMap} from 'babel-core';
|
||||
const t = babel.types;
|
||||
|
||||
const Conditional = {
|
||||
|
@ -65,7 +70,11 @@ const plugin = {
|
|||
},
|
||||
};
|
||||
|
||||
function constantFolding(filename, transformResult) {
|
||||
function constantFolding(filename: string, transformResult: {
|
||||
ast: Ast,
|
||||
code?: ?string,
|
||||
map: ?SourceMap,
|
||||
}) {
|
||||
return babel.transformFromAst(transformResult.ast, transformResult.code, {
|
||||
filename,
|
||||
plugins: [plugin],
|
||||
|
|
|
@ -5,7 +5,10 @@
|
|||
* This source code is licensed under the BSD-style license found in the
|
||||
* LICENSE file in the root directory of this source tree. An additional grant
|
||||
* of patent rights can be found in the PATENTS file in the same directory.
|
||||
*
|
||||
* @flow
|
||||
*/
|
||||
|
||||
'use strict';
|
||||
|
||||
const babel = require('babel-core');
|
||||
|
@ -20,7 +23,7 @@ const babylon = require('babylon');
|
|||
* dependencies, and an array of offsets to the string literals with module IDs.
|
||||
* The index points to the opening quote.
|
||||
*/
|
||||
function extractDependencies(code) {
|
||||
function extractDependencies(code: string) {
|
||||
const ast = babylon.parse(code);
|
||||
const dependencies = new Set();
|
||||
const dependencyOffsets = [];
|
||||
|
|
|
@ -5,10 +5,16 @@
|
|||
* This source code is licensed under the BSD-style license found in the
|
||||
* LICENSE file in the root directory of this source tree. An additional grant
|
||||
* of patent rights can be found in the PATENTS file in the same directory.
|
||||
*
|
||||
* @flow
|
||||
*/
|
||||
|
||||
'use strict';
|
||||
|
||||
const babel = require('babel-core');
|
||||
const invariant = require('invariant');
|
||||
|
||||
import type {Ast, SourceMap} from 'babel-core';
|
||||
const t = babel.types;
|
||||
|
||||
const React = {name: 'React'};
|
||||
|
@ -145,7 +151,17 @@ function checkRequireArgs(args, dependencyId) {
|
|||
t.isNumericLiteral(args[0]) && t.isStringLiteral(args[1], pattern);
|
||||
}
|
||||
|
||||
function inline(filename, transformResult, options) {
|
||||
type AstResult = {
|
||||
ast: Ast,
|
||||
code: ?string,
|
||||
map: ?SourceMap,
|
||||
};
|
||||
|
||||
function inline(
|
||||
filename: string,
|
||||
transformResult: {ast?: ?Ast, code: string, map: ?SourceMap},
|
||||
options: {},
|
||||
): AstResult {
|
||||
const code = transformResult.code;
|
||||
const babelOptions = {
|
||||
filename,
|
||||
|
@ -158,9 +174,12 @@ function inline(filename, transformResult, options) {
|
|||
compact: true,
|
||||
};
|
||||
|
||||
return transformResult.ast
|
||||
? babel.transformFromAst(transformResult.ast, code, babelOptions)
|
||||
: babel.transform(code, babelOptions);
|
||||
const result = transformResult.ast
|
||||
? babel.transformFromAst(transformResult.ast, code, babelOptions)
|
||||
: babel.transform(code, babelOptions);
|
||||
const {ast} = result;
|
||||
invariant(ast != null, 'Missing AST in babel transform results.');
|
||||
return {ast, code: result.code, map: result.map};
|
||||
}
|
||||
|
||||
inline.plugin = inlinePlugin;
|
||||
|
|
|
@ -5,12 +5,15 @@
|
|||
* This source code is licensed under the BSD-style license found in the
|
||||
* LICENSE file in the root directory of this source tree. An additional grant
|
||||
* of patent rights can be found in the PATENTS file in the same directory.
|
||||
*
|
||||
* @flow
|
||||
*/
|
||||
|
||||
'use strict';
|
||||
|
||||
const uglify = require('uglify-js');
|
||||
|
||||
function minify(filename, code, sourceMap) {
|
||||
function minify(filename: string, code: string, sourceMap: ?string) {
|
||||
const minifyResult = uglify.minify(code, {
|
||||
fromString: true,
|
||||
inSourceMap: sourceMap,
|
||||
|
|
|
@ -14,9 +14,11 @@
|
|||
const constantFolding = require('./constant-folding');
|
||||
const extractDependencies = require('./extract-dependencies');
|
||||
const inline = require('./inline');
|
||||
const invariant = require('invariant');
|
||||
const minify = require('./minify');
|
||||
|
||||
import type {LogEntry} from '../../Logger/Types';
|
||||
import type {Ast, SourceMap} from 'babel-core';
|
||||
|
||||
function makeTransformParams(filename, sourceCode, options) {
|
||||
if (filename.endsWith('.json')) {
|
||||
|
@ -32,11 +34,17 @@ export type TransformedCode = {
|
|||
map?: ?{},
|
||||
};
|
||||
|
||||
type Transform = (params: {
|
||||
filename: string,
|
||||
sourceCode: string,
|
||||
options: ?{},
|
||||
}) => mixed;
|
||||
type Transform = (
|
||||
params: {
|
||||
filename: string,
|
||||
sourceCode: string,
|
||||
options: ?{},
|
||||
},
|
||||
callback: (
|
||||
error?: Error,
|
||||
tranformed?: {ast: ?Ast, code: string, map: ?SourceMap},
|
||||
) => mixed,
|
||||
) => void;
|
||||
|
||||
export type Options = {transform?: {}};
|
||||
|
||||
|
@ -75,15 +83,18 @@ function transformCode(
|
|||
return;
|
||||
}
|
||||
|
||||
invariant(
|
||||
transformed != null,
|
||||
'Missing transform results despite having no error.',
|
||||
);
|
||||
|
||||
var code, map;
|
||||
if (options.minify) {
|
||||
const optimized =
|
||||
constantFolding(filename, inline(filename, transformed, options));
|
||||
code = optimized.code;
|
||||
map = optimized.map;
|
||||
({code, map} =
|
||||
constantFolding(filename, inline(filename, transformed, options)));
|
||||
invariant(code != null, 'Missing code from constant-folding transform.');
|
||||
} else {
|
||||
code = transformed.code;
|
||||
map = transformed.map;
|
||||
({code, map} = transformed);
|
||||
}
|
||||
|
||||
if (isJson) {
|
||||
|
|
|
@ -11,19 +11,13 @@
|
|||
|
||||
'use strict';
|
||||
|
||||
type SourceMapBase = {
|
||||
import type {SourceMap as BabelSourceMap} from 'babel-core';
|
||||
|
||||
export type SourceMap = BabelSourceMap;
|
||||
|
||||
export type CombinedSourceMap = {
|
||||
version: number,
|
||||
file: string,
|
||||
};
|
||||
|
||||
export type SourceMap = SourceMapBase & {
|
||||
sources: Array<string>,
|
||||
names: Array<string>,
|
||||
mappings: string,
|
||||
sourcesContent: Array<string>,
|
||||
};
|
||||
|
||||
export type CombinedSourceMap = SourceMapBase & {
|
||||
sections: Array<{
|
||||
offset: {line: number, column: number},
|
||||
map: SourceMap,
|
||||
|
|
Loading…
Reference in New Issue