Skip to content

Commit

Permalink
Fixes issues with uglify.js usage
Browse files Browse the repository at this point in the history
Summary: Adds flow type defs for uglify, and fixes the two issues found

Reviewed By: jeanlauliac

Differential Revision: D5029190

fbshipit-source-id: eb5947b051844938da241e002b727edc1384e3a6
  • Loading branch information
davidaurelio authored and facebook-github-bot committed May 10, 2017
1 parent f088bca commit f1a220b
Show file tree
Hide file tree
Showing 5 changed files with 87 additions and 9 deletions.
71 changes: 71 additions & 0 deletions flow/uglify.js
Original file line number Diff line number Diff line change
@@ -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>;
}
12 changes: 7 additions & 5 deletions packager/src/JSTransformer/worker/minify.js
Original file line number Diff line number Diff line change
Expand Up @@ -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;
2 changes: 1 addition & 1 deletion packager/src/JSTransformer/worker/worker.js
Original file line number Diff line number Diff line change
Expand Up @@ -166,7 +166,7 @@ exports.transformAndExtractDependencies = (
exports.minify = (
filename: string,
code: string,
sourceMap: string,
sourceMap: MappingsMap,
callback: (error: ?Error, result: mixed) => mixed,
) => {
var result;
Expand Down
2 changes: 1 addition & 1 deletion packager/src/ModuleGraph/types.flow.js
Original file line number Diff line number Diff line change
Expand Up @@ -110,7 +110,7 @@ export type TransformResult = {|
code: string,
dependencies: Array<string>,
dependencyMapName?: string,
map: ?Object,
map: ?MappingsMap,
|};

export type TransformResults = {[string]: TransformResult};
Expand Down
9 changes: 7 additions & 2 deletions packager/src/ModuleGraph/worker/optimize-module.js
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down Expand Up @@ -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) {
Expand All @@ -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)
Expand Down

0 comments on commit f1a220b

Please sign in to comment.