{ "manifest": { "name": "terser-webpack-plugin", "version": "5.2.5", "description": "Terser plugin for webpack", "license": "MIT", "repository": { "type": "git", "url": "https://github.com/webpack-contrib/terser-webpack-plugin.git" }, "author": { "name": "webpack Contrib Team" }, "homepage": "https://github.com/webpack-contrib/terser-webpack-plugin", "bugs": { "url": "https://github.com/webpack-contrib/terser-webpack-plugin/issues" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/webpack" }, "main": "dist/cjs.js", "types": "types/cjs.d.ts", "engines": { "node": ">= 10.13.0" }, "scripts": { "clean": "del-cli dist types", "prebuild": "npm run clean", "build:types": "tsc --declaration --emitDeclarationOnly --outDir types && prettier \"types/**/*.ts\" --write && node scripts/fix-types.js && prettier types --write", "build:code": "cross-env NODE_ENV=production babel src -d dist --copy-files", "build": "npm-run-all -p \"build:**\"", "commitlint": "commitlint --from=master", "security": "npm audit --production", "lint:prettier": "prettier --list-different .", "lint:js": "eslint --cache .", "lint:types": "tsc --pretty --noEmit", "lint": "npm-run-all -l -p \"lint:**\"", "test:only": "cross-env NODE_ENV=test jest", "test:watch": "npm run test:only -- --watch", "test:coverage": "npm run test:only -- --collectCoverageFrom=\"src/**/*.js\" --coverage", "pretest": "npm run lint", "test": "npm run test:coverage", "prepare": "husky install && npm run build", "release": "standard-version" }, "files": [ "dist", "types" ], "peerDependencies": { "webpack": "^5.1.0" }, "peerDependenciesMeta": { "@swc/core": { "optional": true }, "uglify-js": { "optional": true }, "esbuild": { "optional": true } }, "dependencies": { "jest-worker": "^27.0.6", "schema-utils": "^3.1.1", "serialize-javascript": "^6.0.0", "source-map": "^0.6.1", "terser": "^5.7.2" }, "devDependencies": { "@babel/cli": "^7.14.8", "@babel/core": "^7.14.8", "@babel/preset-env": "^7.14.9", "@commitlint/cli": "^14.1.0", "@commitlint/config-conventional": "^14.1.0", "@swc/core": "^1.2.82", "@types/serialize-javascript": "^5.0.1", "@types/uglify-js": "^3.13.1", "@webpack-contrib/eslint-config-webpack": "^3.0.0", "babel-jest": "^27.0.6", "copy-webpack-plugin": "^9.0.1", "cross-env": "^7.0.3", "del": "^6.0.0", "del-cli": "^3.0.1", "esbuild": "^0.13.3", "eslint": "^7.32.0", "eslint-config-prettier": "^8.3.0", "eslint-plugin-import": "^2.24.2", "file-loader": "^6.2.0", "husky": "^7.0.2", "jest": "^27.0.6", "lint-staged": "^11.0.1", "memfs": "^3.2.2", "npm-run-all": "^4.1.5", "prettier": "^2.3.2", "standard-version": "^9.3.1", "typescript": "^4.3.5", "uglify-js": "^3.14.1", "webpack": "^5.48.0", "worker-loader": "^3.0.8" }, "keywords": [ "uglify", "uglify-js", "uglify-es", "terser", "webpack", "webpack-plugin", "minification", "compress", "compressor", "min", "minification", "minifier", "minify", "optimize", "optimizer" ], "_registry": "npm", "_loc": "/home/josie/.cache/yarn/v6/npm-terser-webpack-plugin-5.2.5-integrity/node_modules/terser-webpack-plugin/package.json", "readmeFilename": "README.md", "readme": "
\n \n \n \n
\n\n[![npm][npm]][npm-url]\n[![node][node]][node-url]\n[![deps][deps]][deps-url]\n[![tests][tests]][tests-url]\n[![cover][cover]][cover-url]\n[![chat][chat]][chat-url]\n[![size][size]][size-url]\n\n# terser-webpack-plugin\n\nThis plugin uses [terser](https://github.com/terser/terser) to minify/minimize your JavaScript.\n\n## Getting Started\n\nWebpack v5 comes with the latest `terser-webpack-plugin` out of the box. If you are using Webpack v5 or above and wish to customize the options, you will still need to install `terser-webpack-plugin`. Using Webpack v4, you have to install `terser-webpack-plugin` v4.\n\nTo begin, you'll need to install `terser-webpack-plugin`:\n\n```console\n$ npm install terser-webpack-plugin --save-dev\n```\n\nThen add the plugin to your `webpack` config. For example:\n\n**webpack.config.js**\n\n```js\nconst TerserPlugin = require(\"terser-webpack-plugin\");\n\nmodule.exports = {\n optimization: {\n minimize: true,\n minimizer: [new TerserPlugin()],\n },\n};\n```\n\nAnd run `webpack` via your preferred method.\n\n## Note about source maps\n\n**Works only with `source-map`, `inline-source-map`, `hidden-source-map` and `nosources-source-map` values for the [`devtool`](https://webpack.js.org/configuration/devtool/) option.**\n\nWhy?\n\n- `eval` wraps modules in `eval(\"string\")` and the minimizer does not handle strings.\n- `cheap` has not column information and minimizer generate only a single line, which leave only a single mapping.\n\nUsing supported `devtool` values enable source map generation.\n\n## Options\n\n| Name | Type | Default | Description |\n| :---------------------------------------: | :-----------------------------------------------------------------------------: | :----------------------------------------------------------: | :------------------------------------------------------------------------ |\n| **[`test`](#test)** | `String\\|RegExp\\|Array` | `/\\.m?js(\\?.*)?$/i` | Test to match files against. |\n| **[`include`](#include)** | `String\\|RegExp\\|Array` | `undefined` | Files to include. |\n| **[`exclude`](#exclude)** | `String\\|RegExp\\|Array` | `undefined` | Files to exclude. |\n| **[`parallel`](#parallel)** | `Boolean\\|Number` | `true` | Use multi-process parallel running to improve the build speed. |\n| **[`minify`](#minify)** | `Function` | `TerserPlugin.terserMinify` | Allows you to override default minify function. |\n| **[`terserOptions`](#terseroptions)** | `Object` | [`default`](https://github.com/terser/terser#minify-options) | Terser [minify options](https://github.com/terser/terser#minify-options). |\n| **[`extractComments`](#extractcomments)** | `Boolean\\|String\\|RegExp\\|Function<(node, comment) -> Boolean\\|Object>\\|Object` | `true` | Whether comments shall be extracted to a separate file. |\n\n### `test`\n\nType: `String|RegExp|Array`\nDefault: `/\\.m?js(\\?.*)?$/i`\n\nTest to match files against.\n\n**webpack.config.js**\n\n```js\nmodule.exports = {\n optimization: {\n minimize: true,\n minimizer: [\n new TerserPlugin({\n test: /\\.js(\\?.*)?$/i,\n }),\n ],\n },\n};\n```\n\n### `include`\n\nType: `String|RegExp|Array`\nDefault: `undefined`\n\nFiles to include.\n\n**webpack.config.js**\n\n```js\nmodule.exports = {\n optimization: {\n minimize: true,\n minimizer: [\n new TerserPlugin({\n include: /\\/includes/,\n }),\n ],\n },\n};\n```\n\n### `exclude`\n\nType: `String|RegExp|Array`\nDefault: `undefined`\n\nFiles to exclude.\n\n**webpack.config.js**\n\n```js\nmodule.exports = {\n optimization: {\n minimize: true,\n minimizer: [\n new TerserPlugin({\n exclude: /\\/excludes/,\n }),\n ],\n },\n};\n```\n\n### `parallel`\n\nType: `Boolean|Number`\nDefault: `true`\n\nUse multi-process parallel running to improve the build speed.\nDefault number of concurrent runs: `os.cpus().length - 1`.\n\n> ℹ️ Parallelization can speedup your build significantly and is therefore **highly recommended**.\n\n> ⚠️ If you use **Circle CI** or any other environment that doesn't provide real available count of CPUs then you need to setup explicitly number of CPUs to avoid `Error: Call retries were exceeded` (see [#143](https://github.com/webpack-contrib/terser-webpack-plugin/issues/143), [#202](https://github.com/webpack-contrib/terser-webpack-plugin/issues/202)).\n\n#### `Boolean`\n\nEnable/disable multi-process parallel running.\n\n**webpack.config.js**\n\n```js\nmodule.exports = {\n optimization: {\n minimize: true,\n minimizer: [\n new TerserPlugin({\n parallel: true,\n }),\n ],\n },\n};\n```\n\n#### `Number`\n\nEnable multi-process parallel running and set number of concurrent runs.\n\n**webpack.config.js**\n\n```js\nmodule.exports = {\n optimization: {\n minimize: true,\n minimizer: [\n new TerserPlugin({\n parallel: 4,\n }),\n ],\n },\n};\n```\n\n### `minify`\n\nType: `Function`\nDefault: `TerserPlugin.terserMinify`\n\nAllows you to override default minify function.\nBy default plugin uses [terser](https://github.com/terser/terser) package.\nUseful for using and testing unpublished versions or forks.\n\n> ⚠️ **Always use `require` inside `minify` function when `parallel` option enabled**.\n\n**webpack.config.js**\n\n```js\n// Can be async\nconst minify = (input, sourceMap, minimizerOptions, extractsComments) => {\n // The `minimizerOptions` option contains option from the `terserOptions` option\n // You can use `minimizerOptions.myCustomOption`\n\n // Custom logic for extract comments\n const { map, code } = require(\"uglify-module\") // Or require('./path/to/uglify-module')\n .minify(input, {\n /* Your options for minification */\n });\n\n return { map, code, warnings: [], errors: [], extractedComments: [] };\n};\n\n// Used to regenerate `fullhash`/`chunkhash` between different implementation\n// Example: you fix a bug in custom minimizer/custom function, but unfortunately webpack doesn't know about it, so you will get the same fullhash/chunkhash\n// to avoid this you can provide version of your custom minimizer\n// You don't need if you use only `contenthash`\nminify.getMinimizerVersion = () => {\n let packageJson;\n\n try {\n // eslint-disable-next-line global-require, import/no-extraneous-dependencies\n packageJson = require(\"uglify-module/package.json\");\n } catch (error) {\n // Ignore\n }\n\n return packageJson && packageJson.version;\n};\n\nmodule.exports = {\n optimization: {\n minimize: true,\n minimizer: [\n new TerserPlugin({\n terserOptions: {\n myCustomOption: true,\n },\n minify,\n }),\n ],\n },\n};\n```\n\n### `terserOptions`\n\nType: `Object`\nDefault: [default](https://github.com/terser/terser#minify-options)\n\nTerser [options](https://github.com/terser/terser#minify-options).\n\n**webpack.config.js**\n\n```js\nmodule.exports = {\n optimization: {\n minimize: true,\n minimizer: [\n new TerserPlugin({\n terserOptions: {\n ecma: undefined,\n parse: {},\n compress: {},\n mangle: true, // Note `mangle.properties` is `false` by default.\n module: false,\n // Deprecated\n output: null,\n format: null,\n toplevel: false,\n nameCache: null,\n ie8: false,\n keep_classnames: undefined,\n keep_fnames: false,\n safari10: false,\n },\n }),\n ],\n },\n};\n```\n\n### `extractComments`\n\nType: `Boolean|String|RegExp|Function<(node, comment) -> Boolean|Object>|Object`\nDefault: `true`\n\nWhether comments shall be extracted to a separate file, (see [details](https://github.com/webpack/webpack/commit/71933e979e51c533b432658d5e37917f9e71595a)).\nBy default extract only comments using `/^\\**!|@preserve|@license|@cc_on/i` regexp condition and remove remaining comments.\nIf the original file is named `foo.js`, then the comments will be stored to `foo.js.LICENSE.txt`.\nThe `terserOptions.format.comments` option specifies whether the comment will be preserved, i.e. it is possible to preserve some comments (e.g. annotations) while extracting others or even preserving comments that have been extracted.\n\n#### `Boolean`\n\nEnable/disable extracting comments.\n\n**webpack.config.js**\n\n```js\nmodule.exports = {\n optimization: {\n minimize: true,\n minimizer: [\n new TerserPlugin({\n extractComments: true,\n }),\n ],\n },\n};\n```\n\n#### `String`\n\nExtract `all` or `some` (use `/^\\**!|@preserve|@license|@cc_on/i` RegExp) comments.\n\n**webpack.config.js**\n\n```js\nmodule.exports = {\n optimization: {\n minimize: true,\n minimizer: [\n new TerserPlugin({\n extractComments: \"all\",\n }),\n ],\n },\n};\n```\n\n#### `RegExp`\n\nAll comments that match the given expression will be extracted to the separate file.\n\n**webpack.config.js**\n\n```js\nmodule.exports = {\n optimization: {\n minimize: true,\n minimizer: [\n new TerserPlugin({\n extractComments: /@extract/i,\n }),\n ],\n },\n};\n```\n\n#### `Function<(node, comment) -> Boolean>`\n\nAll comments that match the given expression will be extracted to the separate file.\n\n**webpack.config.js**\n\n```js\nmodule.exports = {\n optimization: {\n minimize: true,\n minimizer: [\n new TerserPlugin({\n extractComments: (astNode, comment) => {\n if (/@extract/i.test(comment.value)) {\n return true;\n }\n\n return false;\n },\n }),\n ],\n },\n};\n```\n\n#### `Object`\n\nAllow to customize condition for extract comments, specify extracted file name and banner.\n\n**webpack.config.js**\n\n```js\nmodule.exports = {\n optimization: {\n minimize: true,\n minimizer: [\n new TerserPlugin({\n extractComments: {\n condition: /^\\**!|@preserve|@license|@cc_on/i,\n filename: (fileData) => {\n // The \"fileData\" argument contains object with \"filename\", \"basename\", \"query\" and \"hash\"\n return `${fileData.filename}.LICENSE.txt${fileData.query}`;\n },\n banner: (licenseFile) => {\n return `License information can be found in ${licenseFile}`;\n },\n },\n }),\n ],\n },\n};\n```\n\n##### `condition`\n\nType: `Boolean|String|RegExp|Function<(node, comment) -> Boolean|Object>`\n\nCondition what comments you need extract.\n\n**webpack.config.js**\n\n```js\nmodule.exports = {\n optimization: {\n minimize: true,\n minimizer: [\n new TerserPlugin({\n extractComments: {\n condition: \"some\",\n filename: (fileData) => {\n // The \"fileData\" argument contains object with \"filename\", \"basename\", \"query\" and \"hash\"\n return `${fileData.filename}.LICENSE.txt${fileData.query}`;\n },\n banner: (licenseFile) => {\n return `License information can be found in ${licenseFile}`;\n },\n },\n }),\n ],\n },\n};\n```\n\n##### `filename`\n\nType: `String|Function<(string) -> String>`\nDefault: `[file].LICENSE.txt[query]`\n\nAvailable placeholders: `[file]`, `[query]` and `[filebase]` (`[base]` for webpack 5).\n\nThe file where the extracted comments will be stored.\nDefault is to append the suffix `.LICENSE.txt` to the original filename.\n\n> ⚠️ We highly recommend using the `txt` extension. Using `js`/`cjs`/`mjs` extensions may conflict with existing assets which leads to broken code.\n\n**webpack.config.js**\n\n```js\nmodule.exports = {\n optimization: {\n minimize: true,\n minimizer: [\n new TerserPlugin({\n extractComments: {\n condition: /^\\**!|@preserve|@license|@cc_on/i,\n filename: \"extracted-comments.js\",\n banner: (licenseFile) => {\n return `License information can be found in ${licenseFile}`;\n },\n },\n }),\n ],\n },\n};\n```\n\n##### `banner`\n\nType: `Boolean|String|Function<(string) -> String>`\nDefault: `/*! For license information please see ${commentsFile} */`\n\nThe banner text that points to the extracted file and will be added on top of the original file.\nCan be `false` (no banner), a `String`, or a `Function<(string) -> String>` that will be called with the filename where extracted comments have been stored.\nWill be wrapped into comment.\n\n**webpack.config.js**\n\n```js\nmodule.exports = {\n optimization: {\n minimize: true,\n minimizer: [\n new TerserPlugin({\n extractComments: {\n condition: true,\n filename: (fileData) => {\n // The \"fileData\" argument contains object with \"filename\", \"basename\", \"query\" and \"hash\"\n return `${fileData.filename}.LICENSE.txt${fileData.query}`;\n },\n banner: (commentsFile) => {\n return `My custom banner about license information ${commentsFile}`;\n },\n },\n }),\n ],\n },\n};\n```\n\n## Examples\n\n### Preserve Comments\n\nExtract all legal comments (i.e. `/^\\**!|@preserve|@license|@cc_on/i`) and preserve `/@license/i` comments.\n\n**webpack.config.js**\n\n```js\nmodule.exports = {\n optimization: {\n minimize: true,\n minimizer: [\n new TerserPlugin({\n terserOptions: {\n format: {\n comments: /@license/i,\n },\n },\n extractComments: true,\n }),\n ],\n },\n};\n```\n\n### Remove Comments\n\nIf you avoid building with comments, use this config:\n\n**webpack.config.js**\n\n```js\nmodule.exports = {\n optimization: {\n minimize: true,\n minimizer: [\n new TerserPlugin({\n terserOptions: {\n format: {\n comments: false,\n },\n },\n extractComments: false,\n }),\n ],\n },\n};\n```\n\n### [`uglify-js`](https://github.com/mishoo/UglifyJS)\n\n[`UglifyJS`](https://github.com/mishoo/UglifyJS) is a JavaScript parser, minifier, compressor and beautifier toolkit.\n\n**webpack.config.js**\n\n```js\nmodule.exports = {\n optimization: {\n minimize: true,\n minimizer: [\n new TerserPlugin({\n minify: TerserPlugin.uglifyJsMinify,\n // `terserOptions` options will be passed to `uglify-js`\n // Link to options - https://github.com/mishoo/UglifyJS#minify-options\n terserOptions: {},\n }),\n ],\n },\n};\n```\n\n### [`swc`](https://github.com/swc-project/swc)\n\n[`swc`](https://github.com/swc-project/swc) is a super-fast compiler written in rust; producing widely-supported javascript from modern standards and typescript.\n\n> ⚠ the `extractComments` option is not supported and all comments will be removed by default, it will be fixed in future\n\n**webpack.config.js**\n\n```js\nmodule.exports = {\n optimization: {\n minimize: true,\n minimizer: [\n new TerserPlugin({\n minify: TerserPlugin.swcMinify,\n // `terserOptions` options will be passed to `swc` (`@swc/core`)\n // Link to options - https://swc.rs/docs/config-js-minify\n terserOptions: {},\n }),\n ],\n },\n};\n```\n\n### [`esbuild`](https://github.com/evanw/esbuild)\n\n[`esbuild`](https://github.com/evanw/esbuild) is an extremely fast JavaScript bundler and minifier.\n\n> ⚠ the `extractComments` option is not supported and all legal comments (i.e. copyright, licenses and etc) will be preserved\n\n**webpack.config.js**\n\n```js\nmodule.exports = {\n optimization: {\n minimize: true,\n minimizer: [\n new TerserPlugin({\n minify: TerserPlugin.esbuildMinify,\n // `terserOptions` options will be passed to `esbuild`\n // Link to options - https://esbuild.github.io/api/#minify\n // Note: the `minify` options is true by default (and override other `minify*` options), so if you want to disable the `minifyIdentifiers` option (or other `minify*` options) please use:\n // terserOptions: {\n // minify: false,\n // minifyWhitespace: true,\n // minifyIdentifiers: false,\n // minifySyntax: true,\n // },\n terserOptions: {},\n }),\n ],\n },\n};\n```\n\n### Custom Minify Function\n\nOverride default minify function - use `uglify-js` for minification.\n\n**webpack.config.js**\n\n```js\nmodule.exports = {\n optimization: {\n minimize: true,\n minimizer: [\n new TerserPlugin({\n minify: (file, sourceMap) => {\n // https://github.com/mishoo/UglifyJS2#minify-options\n const uglifyJsOptions = {\n /* your `uglify-js` package options */\n };\n\n if (sourceMap) {\n uglifyJsOptions.sourceMap = {\n content: sourceMap,\n };\n }\n\n return require(\"uglify-js\").minify(file, uglifyJsOptions);\n },\n }),\n ],\n },\n};\n```\n\n### Typescript\n\nWith default terser minify function:\n\n```ts\nmodule.exports = {\n optimization: {\n minimize: true,\n minimizer: [\n new TerserPlugin({\n terserOptions: {\n compress: true,\n },\n }),\n ],\n },\n};\n```\n\nWith built-in minify functions:\n\n```ts\nimport type { JsMinifyOptions as SwcOptions } from \"@swc/core\";\nimport type { MinifyOptions as UglifyJSOptions } from \"uglify-js\";\nimport type { TransformOptions as EsbuildOptions } from \"esbuild\";\nimport type { MinifyOptions as TerserOptions } from \"terser\";\n\nmodule.exports = {\n optimization: {\n minimize: true,\n minimizer: [\n new TerserPlugin({\n minify: TerserPlugin.swcMinify,\n terserOptions: {\n // `swc` options\n },\n }),\n new TerserPlugin({\n minify: TerserPlugin.uglifyJsMinify,\n terserOptions: {\n // `uglif-js` options\n },\n }),\n new TerserPlugin({\n minify: TerserPlugin.esbuildMinify,\n terserOptions: {\n // `esbuild` options\n },\n }),\n\n // Alternative usage:\n new TerserPlugin({\n minify: TerserPlugin.terserMinify,\n terserOptions: {\n // `terser` options\n },\n }),\n ],\n },\n};\n```\n\n## Contributing\n\nPlease take a moment to read our contributing guidelines if you haven't yet done so.\n\n[CONTRIBUTING](./.github/CONTRIBUTING.md)\n\n## License\n\n[MIT](./LICENSE)\n\n[npm]: https://img.shields.io/npm/v/terser-webpack-plugin.svg\n[npm-url]: https://npmjs.com/package/terser-webpack-plugin\n[node]: https://img.shields.io/node/v/terser-webpack-plugin.svg\n[node-url]: https://nodejs.org\n[deps]: https://david-dm.org/webpack-contrib/terser-webpack-plugin.svg\n[deps-url]: https://david-dm.org/webpack-contrib/terser-webpack-plugin\n[tests]: https://github.com/webpack-contrib/terser-webpack-plugin/workflows/terser-webpack-plugin/badge.svg\n[tests-url]: https://github.com/webpack-contrib/terser-webpack-plugin/actions\n[cover]: https://codecov.io/gh/webpack-contrib/terser-webpack-plugin/branch/master/graph/badge.svg\n[cover-url]: https://codecov.io/gh/webpack-contrib/terser-webpack-plugin\n[chat]: https://img.shields.io/badge/gitter-webpack%2Fwebpack-brightgreen.svg\n[chat-url]: https://gitter.im/webpack/webpack\n[size]: https://packagephobia.now.sh/badge?p=terser-webpack-plugin\n[size-url]: https://packagephobia.now.sh/result?p=terser-webpack-plugin\n", "licenseText": "Copyright JS Foundation and other contributors\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n'Software'), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n" }, "artifacts": [], "remote": { "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.2.5.tgz", "type": "tarball", "reference": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.2.5.tgz", "hash": "", "integrity": "sha512-3luOVHku5l0QBeYS8r4CdHYWEGMmIj3H1U64jgkdZzECcSOJAyJ9TjuqcQZvw1Y+4AOBN9SeYJPJmFn2cM4/2g==", "registry": "npm", "packageName": "terser-webpack-plugin", "cacheIntegrity": "sha512-3luOVHku5l0QBeYS8r4CdHYWEGMmIj3H1U64jgkdZzECcSOJAyJ9TjuqcQZvw1Y+4AOBN9SeYJPJmFn2cM4/2g== sha1-zmW5iAoMNoclVcSHT0W72wLuMsk=" }, "registry": "npm", "hash": "de5b8e54792ee65d1005e612f2be02747616106326223dc7d54eb88e091d67310271238903227d4e3baa71066fc3563ee0038137d49e6093c99859f670ce3fda" }