You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
69 lines
1.5 KiB
69 lines
1.5 KiB
/**
|
|
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
*
|
|
* This source code is licensed under the MIT license found in the
|
|
* LICENSE file in the root directory of this source tree.
|
|
*
|
|
* @flow strict-local
|
|
* @format
|
|
*/
|
|
|
|
'use strict';
|
|
|
|
import type {BasicSourceMap} from 'metro-source-map';
|
|
import type {MinifierOptions, MinifierResult} from 'metro-transform-worker';
|
|
|
|
const uglify = require('uglify-es');
|
|
|
|
function minifier(options: MinifierOptions): MinifierResult {
|
|
const result = minify(options);
|
|
|
|
if (!options.map || result.map == null) {
|
|
return {code: result.code};
|
|
}
|
|
|
|
const map: BasicSourceMap = JSON.parse(result.map);
|
|
|
|
return {code: result.code, map: {...map, sources: [options.filename]}};
|
|
}
|
|
|
|
function minify({code, map, reserved, config}: MinifierOptions): {
|
|
code: string,
|
|
map: ?string,
|
|
...
|
|
} {
|
|
const options = {
|
|
...config,
|
|
mangle:
|
|
config.mangle === false
|
|
? false
|
|
: {
|
|
...config.mangle,
|
|
reserved,
|
|
},
|
|
sourceMap:
|
|
config.sourceMap === false
|
|
? false
|
|
: {
|
|
...config.sourceMap,
|
|
content: map,
|
|
},
|
|
};
|
|
|
|
/* $FlowFixMe(>=0.111.0 site=react_native_fb) This comment suppresses an
|
|
* error found when Flow v0.111 was deployed. To see the error, delete this
|
|
* comment and run Flow. */
|
|
const result = uglify.minify(code, options);
|
|
|
|
if (result.error) {
|
|
throw result.error;
|
|
}
|
|
|
|
return {
|
|
code: result.code,
|
|
map: result.map,
|
|
};
|
|
}
|
|
|
|
module.exports = minifier;
|