Fixes issues with uglify.js usage

Summary: Adds flow type defs for uglify, and fixes the two issues found

Reviewed By: jeanlauliac

Differential Revision: D5029190

fbshipit-source-id: eb5947b051844938da241e002b727edc1384e3a6
This commit is contained in:
David Aurelio 2017-05-10 05:15:18 -07:00 коммит произвёл Facebook Github Bot
Родитель f088bca580
Коммит f1a220b3cf
5 изменённых файлов: 87 добавлений и 9 удалений

71
flow/uglify.js Normal file
Просмотреть файл

@ -0,0 +1,71 @@
/**
* Copyright (c) 2013-present, Facebook, Inc.
* All rights reserved.
*
* 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.
*/
'use strict';
type _SourceMap = {
file?: string,
mappings: string,
names: Array<string>,
sourceRoot?: string,
sources: Array<string>,
sourcesContent?: Array<?string>,
version: number,
};
type _Result<MapT> = {
code: string,
map: MapT,
};
type _Options = {
compress?: false | {||},
fromString?: boolean,
inSourceMap?: string | ?_SourceMap,
mangle?: boolean | {|
except?: Array<string>,
toplevel?: boolean,
eval?: boolean,
keep_fnames?: boolean,
|},
mangleProperties?: boolean | {|
regex?: RegExp,
ignore_quoted?: boolean,
debug?: false | string,
|},
outFileName?: string,
output?: {|
ascii_only?: boolean,
screw_ie8?: boolean,
|},
parse?: {|
strict?: boolean,
bare_returns?: boolean,
filename?: string,
|},
sourceMapUrl?: string,
sourceRoot?: string,
warnings?: boolean,
};
type _Input =
| string // code or file name
| Array<string> // array of file names
| {[filename: string]: string}; // file names and corresponding code
declare module 'uglify-js' {
declare function minify(
fileOrFilesOrCode: _Input,
options?: _Options & {outSourceMap?: ?false | ''},
): _Result<void>;
declare function minify(
fileOrFilesOrCode: _Input,
options?: _Options & {outSourceMap: true | string},
): _Result<string>;
}

Просмотреть файл

@ -15,17 +15,19 @@ const uglify = require('uglify-js');
const {UGLIFY_JS_OUTPUT_OPTIONS} = require('./JsMinification');
function minify(filename: string, code: string, sourceMap: ?string) {
const minifyResult = uglify.minify(code, {
import type {MappingsMap} from '../../lib/SourceMap';
function minify(filename: string, inputCode: string, sourceMap: ?MappingsMap) {
let {code, map} = uglify.minify(inputCode, {
fromString: true,
inSourceMap: sourceMap,
outSourceMap: true,
output: UGLIFY_JS_OUTPUT_OPTIONS,
});
minifyResult.map = JSON.parse(minifyResult.map);
minifyResult.map.sources = [filename];
return minifyResult;
map = JSON.parse(map);
map.sources = [filename];
return {code, map};
}
module.exports = minify;

Просмотреть файл

@ -166,7 +166,7 @@ exports.transformAndExtractDependencies = (
exports.minify = (
filename: string,
code: string,
sourceMap: string,
sourceMap: MappingsMap,
callback: (error: ?Error, result: mixed) => mixed,
) => {
var result;

Просмотреть файл

@ -110,7 +110,7 @@ export type TransformResult = {|
code: string,
dependencies: Array<string>,
dependencyMapName?: string,
map: ?Object,
map: ?MappingsMap,
|};
export type TransformResults = {[string]: TransformResult};

Просмотреть файл

@ -19,6 +19,7 @@ const minify = require('../../JSTransformer/worker/minify');
const sourceMap = require('source-map');
import type {TransformedSourceFile, TransformResult} from '../types.flow';
import type {MappingsMap, SourceMap} from '../../lib/SourceMap';
export type OptimizationOptions = {|
dev: boolean,
@ -71,7 +72,7 @@ function optimize(transformed, file, originalCode, options): TransformResult {
gen.code,
inputMap && mergeSourceMaps(file, inputMap, gen.map),
);
return {code: min.code, map: inputMap && min.map, dependencies};
return {code: min.code, map: min.map, dependencies};
}
function optimizeCode(code, map, filename, inliningOptions) {
@ -86,7 +87,11 @@ function optimizeCode(code, map, filename, inliningOptions) {
});
}
function mergeSourceMaps(file, originalMap, secondMap) {
function mergeSourceMaps(
file: string,
originalMap: SourceMap,
secondMap: SourceMap,
): MappingsMap {
const merged = new sourceMap.SourceMapGenerator();
const inputMap = new sourceMap.SourceMapConsumer(originalMap);
new sourceMap.SourceMapConsumer(secondMap)