E2E: Add SMTP tester (#88392)

* E2E: Add SMTP tester

* fix loadlocation issue when running tests on alpine

* temporary update

* add log

* update run-suite

* Update run-suite

* Update run-suite

* Update run-suite

* Update yarn.lock

* apply suggestions + cleanup logs

* update yarn.lock & package.json

* fix swagger
This commit is contained in:
Agnès Toulet 2024-06-18 14:32:19 +02:00 committed by GitHub
parent cc1d3d0f8d
commit 44a40f8e0c
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
7 changed files with 349 additions and 4 deletions

View File

@ -4,6 +4,7 @@ const path = require('path');
const benchmarkPlugin = require('./e2e/cypress/plugins/benchmark/index');
const readProvisions = require('./e2e/cypress/plugins/readProvisions');
const smtpTester = require('./e2e/cypress/plugins/smtpTester');
const typescriptPreprocessor = require('./e2e/cypress/plugins/typescriptPreprocessor');
module.exports = defineConfig({
@ -27,6 +28,10 @@ module.exports = defineConfig({
benchmarkPlugin.initialize(on, config);
}
if (config.env['SMTP_PLUGIN_ENABLED'] === true) {
smtpTester.initialize(on, config);
}
on('task', {
readProvisions: (filePaths) => readProvisions({ CWD: process.cwd(), filePaths }),
});

View File

@ -4,6 +4,7 @@ const path = require('path');
const benchmarkPlugin = require('./benchmark');
const extendConfig = require('./extendConfig');
const readProvisions = require('./readProvisions');
const smtpTester = require('./smtpTester');
const typescriptPreprocessor = require('./typescriptPreprocessor');
module.exports = (on, config) => {
@ -11,6 +12,10 @@ module.exports = (on, config) => {
benchmarkPlugin.initialize(on, config);
}
if (config.env['SMTP_PLUGIN_ENABLED'] === true) {
smtpTester.initialize(on, config);
}
on('file:preprocessor', typescriptPreprocessor);
on('task', {
log({ message, optional }) {

View File

@ -0,0 +1,34 @@
const ms = require('smtp-tester');
const PORT = 7777;
const initialize = (on, config) => {
// starts the SMTP server at localhost:7777
const mailServer = ms.init(PORT);
console.log('mail server at port %d', PORT);
let lastEmail = {};
// process all emails
mailServer.bind((addr, id, email) => {
lastEmail[email.headers.to] = email;
});
on('task', {
resetEmails(recipient) {
if (recipient) {
console.log('reset all emails for recipient %s', recipient);
delete lastEmail[recipient];
} else {
console.log('reset all emails');
lastEmail = {};
}
},
getLastEmail(email) {
return lastEmail[email] || null;
},
});
};
exports.initialize = initialize;

View File

@ -66,6 +66,7 @@ case "$1" in
;;
"enterprise")
echo "Enterprise"
env[SMTP_PLUGIN_ENABLED]=true
CLEANUP="rm -rf ./e2e/extensions-suite"
SETUP="cp -Lr ./e2e/extensions ./e2e/extensions-suite"
enterpriseSuite=$(basename "${args[1]}")
@ -105,6 +106,11 @@ case "$1" in
;;
esac
;;
"enterprise-smtp")
env[SMTP_PLUGIN_ENABLED]=true
cypressConfig[specPattern]=./e2e/extensions/enterprise/smtp-suite/$testFilesForSingleSuite
cypressConfig[video]=${args[1]}
;;
*)
cypressConfig[specPattern]=./e2e/"${args[0]}"/$testFilesForSingleSuite

View File

@ -165,6 +165,7 @@
"css-minimizer-webpack-plugin": "6.0.0",
"cypress": "13.10.0",
"cypress-file-upload": "5.0.8",
"cypress-recurse": "^1.35.3",
"esbuild": "0.20.2",
"esbuild-loader": "4.1.0",
"esbuild-plugin-browserslist": "^0.12.0",
@ -217,6 +218,7 @@
"rudder-sdk-js": "2.48.8",
"sass": "1.77.4",
"sass-loader": "14.2.1",
"smtp-tester": "^2.1.0",
"style-loader": "4.0.0",
"stylelint": "16.6.1",
"stylelint-config-sass-guidelines": "11.1.0",

View File

@ -16,7 +16,6 @@ import (
"path"
"path/filepath"
"regexp"
"runtime"
"strconv"
"strings"
"time"
@ -1024,9 +1023,9 @@ func (cfg *Cfg) validateStaticRootPath() error {
func (cfg *Cfg) Load(args CommandLineArgs) error {
cfg.setHomePath(args)
// Fix for missing IANA db on Windows
// Fix for missing IANA db on Windows or Alpine
_, zoneInfoSet := os.LookupEnv(zoneInfo)
if runtime.GOOS == "windows" && !zoneInfoSet {
if !zoneInfoSet {
if err := os.Setenv(zoneInfo, filepath.Join(cfg.HomePath, "tools", "zoneinfo.zip")); err != nil {
cfg.Logger.Error("Can't set ZONEINFO environment variable", "err", err)
}

296
yarn.lock
View File

@ -6300,6 +6300,16 @@ __metadata:
languageName: node
linkType: hard
"@selderee/plugin-htmlparser2@npm:^0.11.0":
version: 0.11.0
resolution: "@selderee/plugin-htmlparser2@npm:0.11.0"
dependencies:
domhandler: "npm:^5.0.3"
selderee: "npm:^0.11.0"
checksum: 10/7550108d270e6ea2be4850d55cbf4d58d5a90c109a15b874c3c7c622a1399bd8015359ef3672983a86118432ca8325a6aca1fe79d961b01278fdaeaea8895c5f
languageName: node
linkType: hard
"@sigstore/bundle@npm:^1.1.0":
version: 1.1.0
resolution: "@sigstore/bundle@npm:1.1.0"
@ -8772,6 +8782,16 @@ __metadata:
languageName: node
linkType: hard
"@types/mailparser@npm:^3.4.0":
version: 3.4.4
resolution: "@types/mailparser@npm:3.4.4"
dependencies:
"@types/node": "npm:*"
iconv-lite: "npm:^0.6.3"
checksum: 10/4f587e0667c1573bdc4481a520005e377a27d9604dd0ffdab5e86b4f6474a8625122b1c78b3f9536c674ffbc94d367cd0f9b51fe0c502e6752bc53100e1a6e84
languageName: node
linkType: hard
"@types/mdast@npm:^4.0.0":
version: 4.0.3
resolution: "@types/mdast@npm:4.0.3"
@ -8866,6 +8886,15 @@ __metadata:
languageName: node
linkType: hard
"@types/nodemailer@npm:*":
version: 6.4.15
resolution: "@types/nodemailer@npm:6.4.15"
dependencies:
"@types/node": "npm:*"
checksum: 10/1b400b694ed1bc51c242a719de44b484911481596c288407fff18b81ee76945d2d0c6e411371dfa4293747ebf4146a1f0df0e188ff7b9d2adaccd1183dfa1c2c
languageName: node
linkType: hard
"@types/normalize-package-data@npm:^2.4.0":
version: 2.4.1
resolution: "@types/normalize-package-data@npm:2.4.1"
@ -9217,6 +9246,16 @@ __metadata:
languageName: node
linkType: hard
"@types/smtp-server@npm:^3.5.7":
version: 3.5.10
resolution: "@types/smtp-server@npm:3.5.10"
dependencies:
"@types/node": "npm:*"
"@types/nodemailer": "npm:*"
checksum: 10/41410b7cdce7a71383f5253e69ffdfff72b1fdeeaf093291f3f50bff8d9b71d7ba55c132d3d9101903cf9e1d8770a9d6b8c317df64ae2c63c245b11e8211a930
languageName: node
linkType: hard
"@types/sockjs@npm:^0.3.36":
version: 0.3.36
resolution: "@types/sockjs@npm:0.3.36"
@ -11199,6 +11238,13 @@ __metadata:
languageName: node
linkType: hard
"base32.js@npm:0.1.0":
version: 0.1.0
resolution: "base32.js@npm:0.1.0"
checksum: 10/7d7401a8f5c4ec45336ff72c97ee554b9bc22c2153b301acf657e6f9e25928a6205b2cfc55731072ba5686515e4903e2d3e462bea49db5f1515bbd01da1276ad
languageName: node
linkType: hard
"base64-arraybuffer@npm:^1.0.2":
version: 1.0.2
resolution: "base64-arraybuffer@npm:1.0.2"
@ -13276,6 +13322,15 @@ __metadata:
languageName: node
linkType: hard
"cypress-recurse@npm:^1.35.3":
version: 1.35.3
resolution: "cypress-recurse@npm:1.35.3"
dependencies:
humanize-duration: "npm:^3.27.3"
checksum: 10/408781ff538c0ac832bf1ce61b3e6628a6ab5832d9c425e06c4d724eed977dcadec03f234d6f90ea1826f21d440d5f7f971738399770b83358918be16da53d75
languageName: node
linkType: hard
"cypress@npm:13.10.0":
version: 13.10.0
resolution: "cypress@npm:13.10.0"
@ -14543,6 +14598,20 @@ __metadata:
languageName: node
linkType: hard
"encoding-japanese@npm:2.0.0":
version: 2.0.0
resolution: "encoding-japanese@npm:2.0.0"
checksum: 10/aabdaa913fcd354ee3933142f121a2027cabb2cd2aff74d84464464d8e0b2bf2dc7223a0176d908954aa39c0682afe03045b6edf8042410bf5cc1fec34758e8f
languageName: node
linkType: hard
"encoding-japanese@npm:2.1.0":
version: 2.1.0
resolution: "encoding-japanese@npm:2.1.0"
checksum: 10/9c06abca6176aa9db49567956950b9b18508d59bc98eb132b9c8f841422812470bf45c7cba049e35a0bbdb8c888d5dcffc4a76ea696c88d846f7f0834e9f67fc
languageName: node
linkType: hard
"encoding@npm:^0.1.12, encoding@npm:^0.1.13":
version: 0.1.13
resolution: "encoding@npm:0.1.13"
@ -17118,6 +17187,7 @@ __metadata:
css-minimizer-webpack-plugin: "npm:6.0.0"
cypress: "npm:13.10.0"
cypress-file-upload: "npm:5.0.8"
cypress-recurse: "npm:^1.35.3"
d3: "npm:7.9.0"
d3-force: "npm:3.0.0"
d3-scale-chromatic: "npm:3.1.0"
@ -17254,6 +17324,7 @@ __metadata:
slate: "npm:0.47.9"
slate-plain-serializer: "npm:0.7.13"
slate-react: "npm:0.22.10"
smtp-tester: "npm:^2.1.0"
style-loader: "npm:4.0.0"
stylelint: "npm:16.6.1"
stylelint-config-sass-guidelines: "npm:11.1.0"
@ -17490,7 +17561,7 @@ __metadata:
languageName: node
linkType: hard
"he@npm:^1.2.0":
"he@npm:1.2.0, he@npm:^1.2.0":
version: 1.2.0
resolution: "he@npm:1.2.0"
bin:
@ -17725,6 +17796,19 @@ __metadata:
languageName: node
linkType: hard
"html-to-text@npm:9.0.5":
version: 9.0.5
resolution: "html-to-text@npm:9.0.5"
dependencies:
"@selderee/plugin-htmlparser2": "npm:^0.11.0"
deepmerge: "npm:^4.3.1"
dom-serializer: "npm:^2.0.0"
htmlparser2: "npm:^8.0.2"
selderee: "npm:^0.11.0"
checksum: 10/e5991f9946dd0e5c91c4ed863c71a4feaef3d5ce85cd8684fb0f2fc175b1ccee323bb97a1773b6bebc47ac7963dbbfd1fc81b024adff705ae7c0e08992d1dba5
languageName: node
linkType: hard
"html-webpack-plugin@npm:5.6.0, html-webpack-plugin@npm:^5.5.0":
version: 5.6.0
resolution: "html-webpack-plugin@npm:5.6.0"
@ -17780,6 +17864,18 @@ __metadata:
languageName: node
linkType: hard
"htmlparser2@npm:^8.0.2":
version: 8.0.2
resolution: "htmlparser2@npm:8.0.2"
dependencies:
domelementtype: "npm:^2.3.0"
domhandler: "npm:^5.0.3"
domutils: "npm:^3.0.1"
entities: "npm:^4.4.0"
checksum: 10/ea5512956eee06f5835add68b4291d313c745e8407efa63848f4b8a90a2dee45f498a698bca8614e436f1ee0cfdd609938b71d67c693794545982b76e53e6f11
languageName: node
linkType: hard
"http-cache-semantics@npm:^4.1.0, http-cache-semantics@npm:^4.1.1":
version: 4.1.1
resolution: "http-cache-semantics@npm:4.1.1"
@ -17962,6 +18058,13 @@ __metadata:
languageName: node
linkType: hard
"humanize-duration@npm:^3.27.3":
version: 3.32.1
resolution: "humanize-duration@npm:3.32.1"
checksum: 10/5909107485c33d0c025e5d15a45b2700f91c9efc1e88510867926b3d1ef24d2d0c8bf31f52abef92da53b29e69410c5acb3a4d6d72429bd8b61d82ac25739ce4
languageName: node
linkType: hard
"humanize-ms@npm:^1.2.1":
version: 1.2.1
resolution: "humanize-ms@npm:1.2.1"
@ -18317,6 +18420,13 @@ __metadata:
languageName: node
linkType: hard
"ipv6-normalize@npm:1.0.1":
version: 1.0.1
resolution: "ipv6-normalize@npm:1.0.1"
checksum: 10/217277069e50eb47f91d0b22e17f47a858cc99785e0e0c1a315e27c1f0c49bcbae448c220c35767666aeb523b87853d5905448ab6c835f0967778d450610cf54
languageName: node
linkType: hard
"is-absolute-url@npm:^4.0.0":
version: 4.0.1
resolution: "is-absolute-url@npm:4.0.1"
@ -20172,6 +20282,13 @@ __metadata:
languageName: node
linkType: hard
"leac@npm:^0.6.0":
version: 0.6.0
resolution: "leac@npm:0.6.0"
checksum: 10/bfe6aa128ca98664f124096f65584778194a8e1ddebf77d315fd9681be849c1619b0a9d9f4743e67aea0298808bd69ef25bd74320cad50a80be6852714627870
languageName: node
linkType: hard
"lead@npm:^4.0.0":
version: 4.0.0
resolution: "lead@npm:4.0.0"
@ -20294,6 +20411,44 @@ __metadata:
languageName: node
linkType: hard
"libbase64@npm:1.2.1":
version: 1.2.1
resolution: "libbase64@npm:1.2.1"
checksum: 10/b7b5c99c0c2305802e402cc6a21784396911e42853312a1aa530d11725c737776712d71b2fd2dc5f21b87a80fb186d29e6c472c34be31170aa86a587b23c1033
languageName: node
linkType: hard
"libbase64@npm:1.3.0":
version: 1.3.0
resolution: "libbase64@npm:1.3.0"
checksum: 10/e90f06c7c7af754521d254c53ef847bab8ca354ee38f4c5d866c3fc77b4cb7a2ab77aa220c0df433f8d17abd0e884cf322b2771d84c2f65760e22012dfecaa67
languageName: node
linkType: hard
"libmime@npm:5.2.0":
version: 5.2.0
resolution: "libmime@npm:5.2.0"
dependencies:
encoding-japanese: "npm:2.0.0"
iconv-lite: "npm:0.6.3"
libbase64: "npm:1.2.1"
libqp: "npm:2.0.1"
checksum: 10/d8de523d99bedb1d8055ad27b731ea697c2627595aadbc090eca8393a10def85f4f43e94a240f72a17943203c5ef37b8b24ae53b94d3bb6aa7c9deb6388f79ea
languageName: node
linkType: hard
"libmime@npm:5.3.5":
version: 5.3.5
resolution: "libmime@npm:5.3.5"
dependencies:
encoding-japanese: "npm:2.1.0"
iconv-lite: "npm:0.6.3"
libbase64: "npm:1.3.0"
libqp: "npm:2.1.0"
checksum: 10/7f610cd981081919fc698d4fc1f2281ddf90f2ed4f7b60687a443901ec2c06b9837cb504daf78b6ad772643ec06c67131554ba7a05f645aaab00d984d07c584c
languageName: node
linkType: hard
"libnpmaccess@npm:7.0.2":
version: 7.0.2
resolution: "libnpmaccess@npm:7.0.2"
@ -20320,6 +20475,20 @@ __metadata:
languageName: node
linkType: hard
"libqp@npm:2.0.1":
version: 2.0.1
resolution: "libqp@npm:2.0.1"
checksum: 10/5550280b09b1c0caa02870cdd0651be1de91cf74902ff4bfeb23889ae4c002fbedcf532aff3667e85ba2b0eda5b224ac12cae809653e71056439ee7216e70c55
languageName: node
linkType: hard
"libqp@npm:2.1.0":
version: 2.1.0
resolution: "libqp@npm:2.1.0"
checksum: 10/a44681f80523a2f88fe737dd395bb5bdcc9a1f731e24b2e66ec1de2f92a6292516c9b628f0a81f53ad991233764b5ca0a322268492e1a4534be5d532172b182a
languageName: node
linkType: hard
"lilconfig@npm:^3.0.0":
version: 3.0.0
resolution: "lilconfig@npm:3.0.0"
@ -20357,6 +20526,15 @@ __metadata:
languageName: node
linkType: hard
"linkify-it@npm:5.0.0":
version: 5.0.0
resolution: "linkify-it@npm:5.0.0"
dependencies:
uc.micro: "npm:^2.0.0"
checksum: 10/ef3b7609dda6ec0c0be8a7b879cea195f0d36387b0011660cd6711bba0ad82137f59b458b7e703ec74f11d88e7c1328e2ad9b855a8500c0ded67461a8c4519e6
languageName: node
linkType: hard
"listr2@npm:^3.8.3":
version: 3.14.0
resolution: "listr2@npm:3.14.0"
@ -20729,6 +20907,35 @@ __metadata:
languageName: node
linkType: hard
"mailparser@npm:^3.5.0":
version: 3.7.1
resolution: "mailparser@npm:3.7.1"
dependencies:
encoding-japanese: "npm:2.1.0"
he: "npm:1.2.0"
html-to-text: "npm:9.0.5"
iconv-lite: "npm:0.6.3"
libmime: "npm:5.3.5"
linkify-it: "npm:5.0.0"
mailsplit: "npm:5.4.0"
nodemailer: "npm:6.9.13"
punycode.js: "npm:2.3.1"
tlds: "npm:1.252.0"
checksum: 10/02a1b27b70cdf77b2a52ac4f7e4e25abf019a1fc5e0e2a5a23f09e26c39471469797f98060dbc7b8aadfb8dae1f254ff65057ef90453ab25f037e8f53eba6bed
languageName: node
linkType: hard
"mailsplit@npm:5.4.0":
version: 5.4.0
resolution: "mailsplit@npm:5.4.0"
dependencies:
libbase64: "npm:1.2.1"
libmime: "npm:5.2.0"
libqp: "npm:2.0.1"
checksum: 10/64a9e140ffaff5874b9fe6852514ffe119ee09ed4a0dd3a95a07997840519d07d93f451b3f9675b5524e44f5f12f8348680329183b2c723bac7bf84340c4e1cb
languageName: node
linkType: hard
"make-dir@npm:4.0.0":
version: 4.0.0
resolution: "make-dir@npm:4.0.0"
@ -22346,6 +22553,13 @@ __metadata:
languageName: node
linkType: hard
"nodemailer@npm:6.9.13":
version: 6.9.13
resolution: "nodemailer@npm:6.9.13"
checksum: 10/efbc6fc415ec1e1dc1b91530920b0bcfc648183003c3d79718cd54fc2efef4b7dd1917ddd3853ab127e4b5ebd7353903b5859f0ac3ccea487374b076d41ac8b8
languageName: node
linkType: hard
"nopt@npm:^5.0.0":
version: 5.0.0
resolution: "nopt@npm:5.0.0"
@ -23435,6 +23649,16 @@ __metadata:
languageName: node
linkType: hard
"parseley@npm:^0.12.0":
version: 0.12.1
resolution: "parseley@npm:0.12.1"
dependencies:
leac: "npm:^0.6.0"
peberminta: "npm:^0.9.0"
checksum: 10/64788dbe1fbbc231e0fef235357823e03ca3d915693b2109ad862293aad5d091e902fd7cf6f54763728e758a228d06497c787a9af0dfdacd6a941bc2dbf2019e
languageName: node
linkType: hard
"parseurl@npm:~1.3.2, parseurl@npm:~1.3.3":
version: 1.3.3
resolution: "parseurl@npm:1.3.3"
@ -23583,6 +23807,13 @@ __metadata:
languageName: node
linkType: hard
"peberminta@npm:^0.9.0":
version: 0.9.0
resolution: "peberminta@npm:0.9.0"
checksum: 10/b396cf8bac836b3cfe9315e6c94747fa02bb68b252a4b176c0f7d6a3fcbdc5e9f23c3523480c91244b42f87be63f200d775587b039abe4b4731915480da2528d
languageName: node
linkType: hard
"peek-stream@npm:^1.1.0":
version: 1.1.3
resolution: "peek-stream@npm:1.1.3"
@ -24500,6 +24731,20 @@ __metadata:
languageName: node
linkType: hard
"punycode.js@npm:2.3.1":
version: 2.3.1
resolution: "punycode.js@npm:2.3.1"
checksum: 10/f0e946d1edf063f9e3d30a32ca86d8ff90ed13ca40dad9c75d37510a04473340cfc98db23a905cc1e517b1e9deb0f6021dce6f422ace235c60d3c9ac47c5a16a
languageName: node
linkType: hard
"punycode@npm:2.3.1":
version: 2.3.1
resolution: "punycode@npm:2.3.1"
checksum: 10/febdc4362bead22f9e2608ff0171713230b57aff9dddc1c273aa2a651fbd366f94b7d6a71d78342a7c0819906750351ca7f2edd26ea41b626d87d6a13d1bd059
languageName: node
linkType: hard
"punycode@npm:^1.4.1":
version: 1.4.1
resolution: "punycode@npm:1.4.1"
@ -26838,6 +27083,15 @@ __metadata:
languageName: node
linkType: hard
"selderee@npm:^0.11.0":
version: 0.11.0
resolution: "selderee@npm:0.11.0"
dependencies:
parseley: "npm:^0.12.0"
checksum: 10/9f697a00b8270354777a8423e555fd3168abead1304b8d267412877a4b007830624d8aa562eb29a3ec2d9d2f7f977808d17b790b9c210a7d828c12ed9ef0f1f0
languageName: node
linkType: hard
"select-hose@npm:^2.0.0":
version: 2.0.0
resolution: "select-hose@npm:2.0.0"
@ -27385,6 +27639,30 @@ __metadata:
languageName: node
linkType: hard
"smtp-server@npm:^3.11.0":
version: 3.13.4
resolution: "smtp-server@npm:3.13.4"
dependencies:
base32.js: "npm:0.1.0"
ipv6-normalize: "npm:1.0.1"
nodemailer: "npm:6.9.13"
punycode: "npm:2.3.1"
checksum: 10/4c8039e912a724dd0f6d7e3b03f88401acdc1d7106a644b510f8a39e50335c8b1a28c3de71041aacac1f1444377725e3e12747397705506b46244c0510f5bc27
languageName: node
linkType: hard
"smtp-tester@npm:^2.1.0":
version: 2.1.0
resolution: "smtp-tester@npm:2.1.0"
dependencies:
"@types/mailparser": "npm:^3.4.0"
"@types/smtp-server": "npm:^3.5.7"
mailparser: "npm:^3.5.0"
smtp-server: "npm:^3.11.0"
checksum: 10/35d55cc3d690e9fb8f7a5c9bd61e57cbf33e2f5a2ade4124f4104450ac94654366bfde32c0e604e3b3d4dd5ec3a8284b3c9e28276ccb025d25910a85c40fed70
languageName: node
linkType: hard
"snake-case@npm:^3.0.4":
version: 3.0.4
resolution: "snake-case@npm:3.0.4"
@ -28728,6 +29006,15 @@ __metadata:
languageName: node
linkType: hard
"tlds@npm:1.252.0":
version: 1.252.0
resolution: "tlds@npm:1.252.0"
bin:
tlds: bin.js
checksum: 10/ea5b0d54ec7463e6da735eb45a6cd81533288cb95aa6ce62bd44c5b2264206ba6fabcc9202656ff2f0c7964dceeaa995622d9001efac2cd7e43aa07492a63235
languageName: node
linkType: hard
"tmp@npm:^0.0.33":
version: 0.0.33
resolution: "tmp@npm:0.0.33"
@ -29369,6 +29656,13 @@ __metadata:
languageName: node
linkType: hard
"uc.micro@npm:^2.0.0":
version: 2.1.0
resolution: "uc.micro@npm:2.1.0"
checksum: 10/37197358242eb9afe367502d4638ac8c5838b78792ab218eafe48287b0ed28aaca268ec0392cc5729f6c90266744de32c06ae938549aee041fc93b0f9672d6b2
languageName: node
linkType: hard
"uglify-js@npm:^3.1.4":
version: 3.17.4
resolution: "uglify-js@npm:3.17.4"