mirror of https://github.com/status-im/metro.git
Upgrade uglify to v3 + es support
Summary: Upgrades uglify to version 3 with (experimental) ES6 support turned on. Reviewed By: jeanlauliac Differential Revision: D5842410 fbshipit-source-id: 1c8ccea15785bc5bb1c68d7a83b75881432d0ce2
This commit is contained in:
parent
025e1841d9
commit
ad927b93dc
|
@ -9,6 +9,60 @@
|
||||||
|
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
|
type _Input =
|
||||||
|
| string // code or file name
|
||||||
|
| Array<string> // array of file names
|
||||||
|
| {[filename: string]: string}; // file names and corresponding code
|
||||||
|
|
||||||
|
|
||||||
|
type _Options = {
|
||||||
|
// https://github.com/mishoo/UglifyJS2/tree/harmony#compress-options
|
||||||
|
compress?: false | Object,
|
||||||
|
ie8?: boolean,
|
||||||
|
mangle?: boolean | {
|
||||||
|
eval?: boolean,
|
||||||
|
keep_fnames?: boolean,
|
||||||
|
properties?: boolean | {
|
||||||
|
builtins?: boolean,
|
||||||
|
debug?: boolean,
|
||||||
|
keep_quoted?: boolean,
|
||||||
|
regex?: RegExp,
|
||||||
|
reserved?: Array<string>,
|
||||||
|
},
|
||||||
|
reserved?: Array<string>,
|
||||||
|
safari10?: boolean,
|
||||||
|
toplevel?: boolean,
|
||||||
|
},
|
||||||
|
output?: {
|
||||||
|
ascii_only?: boolean,
|
||||||
|
beautify?: boolean,
|
||||||
|
bracketize?: boolean,
|
||||||
|
comments?: boolean | 'all' | 'some' | RegExp | Function,
|
||||||
|
ecma?: 5 | 6,
|
||||||
|
indent_level?: number,
|
||||||
|
indent_start?: number,
|
||||||
|
inline_script?: number,
|
||||||
|
keep_quoted_props?: boolean,
|
||||||
|
max_line_len?: false | number,
|
||||||
|
preamble?: string,
|
||||||
|
preserve_line?: boolean,
|
||||||
|
quote_keys?: boolean,
|
||||||
|
quote_style?: 0 | 1 | 2 | 3,
|
||||||
|
semicolons?: boolean,
|
||||||
|
shebang?: boolean,
|
||||||
|
width?: number,
|
||||||
|
wrap_iife?: boolean,
|
||||||
|
},
|
||||||
|
parse?: {
|
||||||
|
bare_returns: boolean,
|
||||||
|
html5_comments: boolean,
|
||||||
|
shebang: boolean,
|
||||||
|
},
|
||||||
|
sourceMap?: false,
|
||||||
|
toplevel?: boolean,
|
||||||
|
warnings?: boolean | 'verbose',
|
||||||
|
};
|
||||||
|
|
||||||
type _SourceMap = {
|
type _SourceMap = {
|
||||||
file?: string,
|
file?: string,
|
||||||
mappings: string,
|
mappings: string,
|
||||||
|
@ -19,53 +73,24 @@ type _SourceMap = {
|
||||||
version: number,
|
version: number,
|
||||||
};
|
};
|
||||||
|
|
||||||
type _Result<MapT> = {
|
type _SourceMapOptions = true | {
|
||||||
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,
|
filename?: string,
|
||||||
|},
|
content?: ?string | _SourceMap,
|
||||||
sourceMapUrl?: string,
|
includeSources?: boolean,
|
||||||
sourceRoot?: string,
|
root?: string,
|
||||||
warnings?: boolean,
|
url?: string,
|
||||||
};
|
};
|
||||||
|
|
||||||
type _Input =
|
type _Error = {|error: Error|};
|
||||||
| string // code or file name
|
type _Result = {|code: string, warnings?: Array<string>|};
|
||||||
| Array<string> // array of file names
|
|
||||||
| {[filename: string]: string}; // file names and corresponding code
|
|
||||||
|
|
||||||
declare module 'uglify-js' {
|
declare module 'uglify-es' {
|
||||||
declare function minify(
|
declare function minify(
|
||||||
fileOrFilesOrCode: _Input,
|
code: _Input,
|
||||||
options?: _Options & {outSourceMap?: ?false | ''},
|
options?: _Options,
|
||||||
): _Result<void>;
|
): _Error | _Result;
|
||||||
declare function minify(
|
declare function minify(
|
||||||
fileOrFilesOrCode: _Input,
|
code: _Input,
|
||||||
options?: _Options & {outSourceMap: true | string},
|
options: {..._Options, sourceMap: _SourceMapOptions},
|
||||||
): _Result<string>;
|
): _Error | {|..._Result, map: string|};
|
||||||
}
|
}
|
||||||
|
|
|
@ -44,7 +44,7 @@
|
||||||
"source-map": "^0.5.6",
|
"source-map": "^0.5.6",
|
||||||
"temp": "0.8.3",
|
"temp": "0.8.3",
|
||||||
"throat": "^4.1.0",
|
"throat": "^4.1.0",
|
||||||
"uglify-js": "2.7.5",
|
"uglify-es": "^3.1.0",
|
||||||
"write-file-atomic": "^1.2.0",
|
"write-file-atomic": "^1.2.0",
|
||||||
"xpipe": "^1.0.5"
|
"xpipe": "^1.0.5"
|
||||||
}
|
}
|
||||||
|
|
|
@ -15,7 +15,7 @@
|
||||||
jest
|
jest
|
||||||
.setMock('worker-farm', () => () => undefined)
|
.setMock('worker-farm', () => () => undefined)
|
||||||
.setMock('../../worker-farm', () => () => undefined)
|
.setMock('../../worker-farm', () => () => undefined)
|
||||||
.setMock('uglify-js')
|
.setMock('../../JSTransformer/worker/minify')
|
||||||
.mock('image-size')
|
.mock('image-size')
|
||||||
.mock('fs')
|
.mock('fs')
|
||||||
.mock('os')
|
.mock('os')
|
||||||
|
|
|
@ -10,7 +10,7 @@
|
||||||
*/
|
*/
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
jest.mock('uglify-js', () => ({
|
jest.mock('uglify-es', () => ({
|
||||||
minify: jest.fn(code => {
|
minify: jest.fn(code => {
|
||||||
return {
|
return {
|
||||||
code: code.replace(/(^|\W)\s+/g, '$1'),
|
code: code.replace(/(^|\W)\s+/g, '$1'),
|
||||||
|
@ -29,7 +29,7 @@ describe('Minification:', () => {
|
||||||
let uglify;
|
let uglify;
|
||||||
|
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
uglify = require('uglify-js');
|
uglify = require('uglify-es');
|
||||||
uglify.minify.mockClear();
|
uglify.minify.mockClear();
|
||||||
uglify.minify.mockReturnValue({code: '', map: '{}'});
|
uglify.minify.mockReturnValue({code: '', map: '{}'});
|
||||||
map = {version: 3, sources: ['?'], mappings: ''};
|
map = {version: 3, sources: ['?'], mappings: ''};
|
||||||
|
@ -40,9 +40,10 @@ describe('Minification:', () => {
|
||||||
expect(uglify.minify).toBeCalledWith(
|
expect(uglify.minify).toBeCalledWith(
|
||||||
code,
|
code,
|
||||||
objectContaining({
|
objectContaining({
|
||||||
fromString: true,
|
sourceMap: {
|
||||||
inSourceMap: map,
|
content: map,
|
||||||
outSourceMap: true,
|
includeSources: true,
|
||||||
|
},
|
||||||
}),
|
}),
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
@ -52,8 +53,10 @@ describe('Minification:', () => {
|
||||||
expect(uglify.minify).toBeCalledWith(
|
expect(uglify.minify).toBeCalledWith(
|
||||||
code,
|
code,
|
||||||
objectContaining({
|
objectContaining({
|
||||||
fromString: true,
|
sourceMap: {
|
||||||
outSourceMap: true,
|
content: undefined,
|
||||||
|
includeSources: true,
|
||||||
|
},
|
||||||
}),
|
}),
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
|
@ -12,7 +12,7 @@
|
||||||
|
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
const uglify = require('uglify-js');
|
const uglify = require('uglify-es');
|
||||||
|
|
||||||
import type {MappingsMap} from '../../lib/SourceMap';
|
import type {MappingsMap} from '../../lib/SourceMap';
|
||||||
type ResultWithMap = {
|
type ResultWithMap = {
|
||||||
|
@ -20,11 +20,6 @@ type ResultWithMap = {
|
||||||
map: MappingsMap,
|
map: MappingsMap,
|
||||||
};
|
};
|
||||||
|
|
||||||
const UGLIFY_JS_OUTPUT_OPTIONS = {
|
|
||||||
ascii_only: true,
|
|
||||||
screw_ie8: true,
|
|
||||||
};
|
|
||||||
|
|
||||||
function noSourceMap(code: string): string {
|
function noSourceMap(code: string): string {
|
||||||
return minify(code).code;
|
return minify(code).code;
|
||||||
}
|
}
|
||||||
|
@ -42,12 +37,28 @@ function withSourceMap(
|
||||||
}
|
}
|
||||||
|
|
||||||
function minify(inputCode: string, inputMap: ?MappingsMap) {
|
function minify(inputCode: string, inputMap: ?MappingsMap) {
|
||||||
return uglify.minify(inputCode, {
|
const result = uglify.minify(inputCode, {
|
||||||
fromString: true,
|
mangle: {toplevel: true},
|
||||||
inSourceMap: inputMap,
|
output: {
|
||||||
outSourceMap: true,
|
ascii_only: true,
|
||||||
output: UGLIFY_JS_OUTPUT_OPTIONS,
|
quote_style: 3,
|
||||||
|
wrap_iife: true,
|
||||||
|
},
|
||||||
|
sourceMap: {
|
||||||
|
content: inputMap,
|
||||||
|
includeSources: true,
|
||||||
|
},
|
||||||
|
toplevel: true,
|
||||||
});
|
});
|
||||||
|
|
||||||
|
if (result.error) {
|
||||||
|
throw result.error;
|
||||||
|
}
|
||||||
|
|
||||||
|
return {
|
||||||
|
code: result.code,
|
||||||
|
map: result.map,
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
|
|
|
@ -13,7 +13,7 @@
|
||||||
|
|
||||||
jest.mock('../../worker-farm', () => () => () => {})
|
jest.mock('../../worker-farm', () => () => () => {})
|
||||||
.mock('worker-farm', () => () => () => {})
|
.mock('worker-farm', () => () => () => {})
|
||||||
.mock('uglify-js')
|
.mock('../../JSTransformer/worker/minify')
|
||||||
.mock('crypto')
|
.mock('crypto')
|
||||||
.mock(
|
.mock(
|
||||||
'../symbolicate',
|
'../symbolicate',
|
||||||
|
|
Loading…
Reference in New Issue