From 2fbd54eb52ddf44130299df27673fcaf8d754e22 Mon Sep 17 00:00:00 2001 From: Mateusz Jasiuk Date: Mon, 17 Jul 2023 10:57:52 +0200 Subject: [PATCH] test: init namada per test --- e2e/dl-wasms.sh | 17 ++++++ e2e/genesis.toml | 9 ++- e2e/package.json | 9 ++- e2e/setup-frontend.sh | 29 +++++++++ e2e/setup-namada.sh | 75 +++++++++++++++++++++++ e2e/setup-tests.sh | 91 ---------------------------- e2e/src/index.test.ts | 47 ++++++++++++++- e2e/start-namada.sh | 16 +++++ yarn.lock | 137 +++++++++++++++++++++++++++--------------- 9 files changed, 286 insertions(+), 144 deletions(-) create mode 100755 e2e/dl-wasms.sh create mode 100755 e2e/setup-frontend.sh create mode 100755 e2e/setup-namada.sh delete mode 100755 e2e/setup-tests.sh create mode 100755 e2e/start-namada.sh diff --git a/e2e/dl-wasms.sh b/e2e/dl-wasms.sh new file mode 100755 index 0000000000..5699566f80 --- /dev/null +++ b/e2e/dl-wasms.sh @@ -0,0 +1,17 @@ +#!/bin/bash -x + +NAMADA_DIR=".namada" +CHECKSUMS="${NAMADA_DIR}/checksums.json" +WASM="" +S3="https://namada-wasm-master.s3.eu-west-1.amazonaws.com" + +mkdir "${NAMADA_DIR}/wasm" + +while read -r line; +do + if [[ $line == *"wasm"* ]]; then + WASM=$(echo "$line" | sed -E "s/\".+\":\s\"//g" | sed -E "s/\".*//g"); + curl "${S3}/${WASM}" --output "${NAMADA_DIR}/wasm/${WASM}" + fi + +done < "$CHECKSUMS" diff --git a/e2e/genesis.toml b/e2e/genesis.toml index d045e61eae..e510464c98 100644 --- a/e2e/genesis.toml +++ b/e2e/genesis.toml @@ -41,6 +41,10 @@ Ester = "1000000" faucet = "9223372036854" "faucet.public_key" = "100" "validator-0.public_key" = "100" +TestA = "1000" +"TestA.public_key" = "1000" +TestB = "1000" +"TestB.public_key" = "1000" [token.BTC] address = "atest1v4ehgw36xdzryve5gsc52veeg5cnsv2yx5eygvp38qcrvd29xy6rys6p8yc5xvp4xfpy2v694wgwcp" @@ -136,9 +140,12 @@ vp = "vp_masp" [implicit.Ester] -[implicit.Test] +[established.TestA] address = "atest1d9khqw36xccyydp3xpznjvzrx3zrq3fexep5y33nxverqdz9xcc5ydeexgm52djrxvuyxsjr44hd2f" +[established.TestB] +address = "atest1d9khqw368qury3phx3prsvp4gezrssenxqmyxwpn8qmrqvpsg4znjdjp8ycry3p3g4p5vd6x66dnmw" + # Wasm VP definitions # Implicit VP diff --git a/e2e/package.json b/e2e/package.json index 1368ba6ccd..9ad886e8a9 100644 --- a/e2e/package.json +++ b/e2e/package.json @@ -11,9 +11,9 @@ "lint": "npx eslint src --ext .ts", "lint:fix": "yarn lint -- --fix", "lint:ci": "yarn lint --max-warnings 0", - "setup": "./setup-tests.sh", + "setup": "/setup-frontend.sh", "test": "jest --runInBand", - "test:watch": "jest --watch", + "test:watch": "jest --watch --runInBand", "e2e": "start-server-and-test setup http://localhost:3000 test" }, "dependencies": { @@ -21,13 +21,16 @@ }, "devDependencies": { "@types/jest": "^29.0.0", + "@types/node": "^20.4.2", "@types/puppeteer": "^7.0.4", "eslint": "^8.23.0", "eslint-config-airbnb": "^19.0.4", "eslint-config-prettier": "^8.5.0", "eslint-import-resolver-typescript": "^3.5.1", + "http-server": "^14.1.1", "jest": "^29.0.2", "jest-puppeteer": "^9.0.0", - "puppeteer": "^20.8.2" + "puppeteer": "^20.8.2", + "terminate": "^2.6.1" } } diff --git a/e2e/setup-frontend.sh b/e2e/setup-frontend.sh new file mode 100755 index 0000000000..2885d75a47 --- /dev/null +++ b/e2e/setup-frontend.sh @@ -0,0 +1,29 @@ +#!/bin/bash -x +CHAIN_ID="dev-test.000000000000000000000" + +# Run the extension +cd ../apps/extension && \ + yarn clean:chrome && \ + export NODE_ENV=development; \ + export TARGET=chrome; \ + export REACT_APP_NAMADA_CHAIN_ID=${CHAIN_ID}; \ + export REACT_APP_NAMADA_URL=http://127.0.0.1:27657 && \ + npx webpack --watch & + +# Run the interface +cd ../namada-interface && \ + export NODE_ENV=development; \ + export REACT_APP_LOCAL=true; \ + export REACT_APP_NAMADA_CHAIN_ID=${CHAIN_ID}; \ + export REACT_APP_NAMADA_URL=http://127.0.0.1:27657 && \ + npx webpack --watch & + +cd ../../e2e + +npx http-server -p 8080 -c-1 ../apps/namada-interface/build + +# Sleep indefinitely +while :; do sleep 86400; done + +# Kill all processes on exit +trap "trap - SIGTERM && kill -- -$$" SIGINT SIGTERM EXIT diff --git a/e2e/setup-namada.sh b/e2e/setup-namada.sh new file mode 100755 index 0000000000..2c01cb0141 --- /dev/null +++ b/e2e/setup-namada.sh @@ -0,0 +1,75 @@ +#!/bin/bash -x + +VERSION="v0.19.0" +CURRENT_VERSION="" +NAMADA_DIR=".namada" +NAMADA_BASE_DIR=".namada/basedir" + +# Read current version +CURRENT_VERSION_PATH="${NAMADA_DIR}/.version" +if test -f "$CURRENT_VERSION_PATH"; then + while read -r line; + do + CURRENT_VERSION=$line + + done < "$CURRENT_VERSION_PATH" +fi + +if [ "$CURRENT_VERSION" != "$VERSION" ]; then + # Download Namada binaries + FILENAME="namada-${VERSION}-Linux-x86_64.tar.gz" + curl --location --remote-header-name --remote-name https://github.com/anoma/namada/releases/download/${VERSION}/${FILENAME} + mkdir $NAMADA_DIR + tar -xzf ${FILENAME} --directory $NAMADA_DIR --strip-components 1 + rm -rf ${FILENAME} + + # Download wasm checksums + curl --location --remote-header-name --remote-name https://raw.githubusercontent.com/anoma/namada/${VERSION}/wasm/checksums.json + mv checksums.json "${NAMADA_DIR}/checksums.json" + + # Download wasms + CHECKSUMS="${NAMADA_DIR}/checksums.json" + WASM="" + S3="https://namada-wasm-master.s3.eu-west-1.amazonaws.com" + + rm -rf "${NAMADA_DIR}/wasm" + mkdir "${NAMADA_DIR}/wasm" + + while read -r line; + do + WASM=$(echo "$line" | sed -E "s/\".+\":\s\"//g" | sed -E "s/\".*//g"); + curl "${S3}/${WASM}" --output "${NAMADA_DIR}/wasm/${WASM}" + + done < "$CHECKSUMS" + + # Save version + echo "${VERSION}" > "${NAMADA_DIR}/.version" +fi + +# Clear the basedir +rm -rf $NAMADA_BASE_DIR + +"${NAMADA_DIR}/namadac" --base-dir $NAMADA_BASE_DIR utils init-network \ + --chain-prefix dev-test \ + --wasm-checksums-path "${NAMADA_DIR}/checksums.json" \ + --genesis-path genesis.toml \ + --dont-archive \ + --unsafe-dont-encrypt + +CONFIG="${NAMADA_BASE_DIR}/global-config.toml" +CHAIN_ID="" + +# Read CHAIN_ID from global-config.toml +while read -r line; +do + CHAIN_ID=$(echo "$line" | sed "s/default_chain_id = \"//g" | sed "s/\"//"); + +done < "$CONFIG" + +# Copy wasms +cp -f ${NAMADA_DIR}/wasm/*.wasm ${NAMADA_BASE_DIR}/${CHAIN_ID}/setup/validator-0/.namada/${CHAIN_ID}/wasm/ +cp -f ${NAMADA_DIR}/wasm/*.wasm ${NAMADA_BASE_DIR}/${CHAIN_ID}/wasm/ + +# Override envs - so we do not have to rebuild extension and app +find ../apps/extension/build/chrome -type f -exec sed -i -E "s/dev-test\..{21}/$CHAIN_ID/g" {} + +find ../apps/namada-interface/build -type f -exec sed -i -E "s/dev-test\..{21}/$CHAIN_ID/g" {} + diff --git a/e2e/setup-tests.sh b/e2e/setup-tests.sh deleted file mode 100755 index aa446e763e..0000000000 --- a/e2e/setup-tests.sh +++ /dev/null @@ -1,91 +0,0 @@ -#!/bin/bash -x - -VERSION="v0.19.0" -CURRENT_VERSION="" -NAMADA_DIR=".namada" -NAMADA_BASE_DIR=".namada/basedir" - -# Read current version -CURRENT_VERSION_PATH="${NAMADA_DIR}/.version" -while read -r line; -do - CURRENT_VERSION=$line - -done < "$CURRENT_VERSION_PATH" - -if [ "$CURRENT_VERSION" != "$VERSION" ]; then - # Download Namada binaries - FILENAME="namada-${VERSION}-Linux-x86_64.tar.gz" - curl --location --remote-header-name --remote-name https://github.com/anoma/namada/releases/download/${VERSION}/${FILENAME} - mkdir $NAMADA_DIR - tar -xzf ${FILENAME} --directory $NAMADA_DIR --strip-components 1 - rm -rf ${FILENAME} - - # Download wasm checksums - curl --location --remote-header-name --remote-name https://raw.githubusercontent.com/anoma/namada/${VERSION}/wasm/checksums.json - mv checksums.json "${NAMADA_DIR}/checksums.json" - - echo "${VERSION}" > "${NAMADA_DIR}/.version" -fi - -# Clear the basedir -rm -rf $NAMADA_BASE_DIR - -"${NAMADA_DIR}/namadac" --base-dir $NAMADA_BASE_DIR utils init-network \ - --chain-prefix dev-test \ - --wasm-checksums-path "${NAMADA_DIR}/checksums.json" \ - --genesis-path genesis.toml \ - --dont-archive \ - --unsafe-dont-encrypt - -CONFIG="${NAMADA_BASE_DIR}/global-config.toml" -CHAIN_ID="" - -# Read CHAIN_ID from global-config.toml -while read -r line; -do - CHAIN_ID=$(echo "$line" | sed "s/default_chain_id = \"//g" | sed "s/\"//"); - -done < "$CONFIG" - -# Run the extension -cd ../apps/extension && \ - yarn clean:chrome && \ - export NODE_ENV=development; \ - export TARGET=chrome; \ - export REACT_APP_NAMADA_CHAIN_ID=${CHAIN_ID}; \ - export REACT_APP_NAMADA_URL=http://127.0.0.1:27657 && \ - npx webpack --watch & - -# Run the interface -cd ../namada-interface && \ - export NODE_ENV=development; \ - export REACT_APP_LOCAL=true; \ - export REACT_APP_NAMADA_CHAIN_ID=${CHAIN_ID}; \ - export REACT_APP_NAMADA_URL=http://127.0.0.1:27657 && \ - npx webpack-dev-server & - -# Start the chain -cd ../../e2e -"${NAMADA_DIR}/namadan" --chain-id ${CHAIN_ID} --base-dir ${NAMADA_BASE_DIR}/${CHAIN_ID}/setup/validator-0/.namada ledger >/dev/null & - -"${NAMADA_DIR}/namadaw" --base-dir ${NAMADA_BASE_DIR} address gen --alias my-account --unsafe-dont-encrypt - -sleep 10 -"${NAMADA_DIR}/namadac" --base-dir ${NAMADA_BASE_DIR} transfer \ - --source faucet \ - --target atest1d9khqw36xccyydp3xpznjvzrx3zrq3fexep5y33nxverqdz9xcc5ydeexgm52djrxvuyxsjr44hd2f \ - --token NAM \ - --amount 1000 --node tcp://127.0.0.1:27657 --signer my-account - -"${NAMADA_DIR}/namadac" --base-dir ${NAMADA_BASE_DIR} transfer \ - --source faucet \ - --target atest1d9khqw368qury3phx3prsvp4gezrssenxqmyxwpn8qmrqvpsg4znjdjp8ycry3p3g4p5vd6x66dnmw \ - --token NAM \ - --amount 1000 --node tcp://127.0.0.1:27657 --signer my-account - -# Sleep indefinitely -while :; do sleep 86400; done - -# Kill all processes on exit -trap "trap - SIGTERM && kill -- -$$" SIGINT SIGTERM EXIT diff --git a/e2e/src/index.test.ts b/e2e/src/index.test.ts index b6a26aabee..68d9cf1ba7 100644 --- a/e2e/src/index.test.ts +++ b/e2e/src/index.test.ts @@ -3,10 +3,16 @@ */ import * as puppeteer from "puppeteer"; import nodePath from "node:path"; +import { ChildProcess, exec } from "child_process"; +import terminate from "terminate/promise"; +import util from "node:util"; import { mnemonic, pwdOrAlias } from "./utils/values"; import { targetPage, waitForXpath } from "./utils/helpers"; +// promisify exec +const execPromise = util.promisify(exec); + const root = nodePath.resolve(process.cwd(), ".."); const path = `${root}/apps/extension/build/chrome`; @@ -15,7 +21,7 @@ const puppeteerArgs = [ `--load-extension=${path}`, "--disable-features=DialMediaRouteProvider", ]; -jest.setTimeout(120000); +jest.setTimeout(70000); let browser: puppeteer.Browser; let page: puppeteer.Page; @@ -36,7 +42,7 @@ const getExtensionId = async (): Promise => { }; const openInterface = async (): Promise => { - await page.goto("http://localhost:3000", { + await page.goto("http://localhost:8080", { waitUntil: ["domcontentloaded"], }); }; @@ -59,8 +65,27 @@ const openSetup = async (): Promise => { }); }; +function startNamada(namRefs: Set): ChildProcess { + const nam = exec(`sh ${process.cwd()}/start-namada.sh`); + namRefs.add(nam); + return nam; +} + +async function setupNamada(): Promise { + await execPromise(`sh ${process.cwd()}/setup-namada.sh`); +} + +async function stopNamada(namada: ChildProcess): Promise { + if (namada.pid) { + await terminate(namada.pid); + } +} + describe("Namada extension", () => { + const namRefs = new Set(); + beforeEach(async function () { + await setupNamada(); browser = await puppeteer.launch({ headless: false, slowMo: 50, @@ -73,6 +98,20 @@ describe("Namada extension", () => { await browser.close(); }); + afterAll(async () => { + for await (const namada of namRefs) { + // We want to stop the namada process only if: + // - process is NOT about to stop - SIGKILL + // - process is NOT already stopped - exitCode is not set + const stop = !( + namada.signalCode === "SIGKILL" || namada.exitCode !== null + ); + if (stop) { + await stopNamada(namada); + } + } + }); + describe("open the popup", () => { test("should open the popup", async () => { await openPopup(); @@ -84,6 +123,8 @@ describe("Namada extension", () => { describe("send transfer", () => { test("should send transfer", async () => { + const nam = startNamada(namRefs); + await openSetup(); // Check H1 @@ -205,6 +246,8 @@ describe("Namada extension", () => { const toast = await page.waitForXPath( "//div[contains(., 'Transfer successful!')]" ); + + await stopNamada(nam); expect(toast).toBeDefined(); }); }); diff --git a/e2e/start-namada.sh b/e2e/start-namada.sh new file mode 100755 index 0000000000..040422fb87 --- /dev/null +++ b/e2e/start-namada.sh @@ -0,0 +1,16 @@ +#!/bin/bash -x + +NAMADA_DIR=".namada" +NAMADA_BASE_DIR=".namada/basedir" + +CONFIG="${NAMADA_BASE_DIR}/global-config.toml" + +# Read CHAIN_ID from global-config.toml +while read -r line; +do + CHAIN_ID=$(echo "$line" | sed "s/default_chain_id = \"//g" | sed "s/\"//"); + +done < "$CONFIG" + +# Start the chain +"${NAMADA_DIR}/namadan" --chain-id ${CHAIN_ID} --base-dir ${NAMADA_BASE_DIR}/${CHAIN_ID}/setup/validator-0/.namada ledger diff --git a/yarn.lock b/yarn.lock index 95dc067d0c..3759a889a5 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5491,6 +5491,11 @@ resolved "https://registry.yarnpkg.com/@types/node/-/node-18.7.14.tgz#0fe081752a3333392d00586d815485a17c2cf3c9" integrity sha512-6bbDaETVi8oyIARulOE9qF1/Qdi/23z6emrUh0fNJRUmjznqrixD4MpGDdgOFk5Xb0m2H6Xu42JGdvAxaJR/wA== +"@types/node@^20.4.2": + version "20.4.2" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.4.2.tgz#129cc9ae69f93824f92fac653eebfb4812ab4af9" + integrity sha512-Dd0BYtWgnWJKwO1jkmTrzofjK2QXXcai0dmtzvIBhcA+RsG5h8R3xlyta0kGOZRNfL9GuRtb1knmPEhQrePCEw== + "@types/parse-json@^4.0.0": version "4.0.0" resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0" @@ -6268,11 +6273,6 @@ arg@^5.0.1: resolved "https://registry.yarnpkg.com/arg/-/arg-5.0.1.tgz#eb0c9a8f77786cad2af8ff2b862899842d7b6adb" integrity sha512-e0hDa9H2Z9AwFkk2qDlwhoMYE4eToKarchkQHovNdLTCYMHZHeRjI71crOh+dio4K6u1IcwubQqo79Ga4CyAQA== -arg@^5.0.2: - version "5.0.2" - resolved "https://registry.yarnpkg.com/arg/-/arg-5.0.2.tgz#c81433cc427c92c4dcf4865142dbca6f15acd59c" - integrity sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg== - argparse@^1.0.7: version "1.0.10" resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" @@ -6815,6 +6815,13 @@ base64-js@^1.0.2, base64-js@^1.3.0, base64-js@^1.3.1: resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== +basic-auth@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/basic-auth/-/basic-auth-2.0.1.tgz#b998279bf47ce38344b4f3cf916d4679bbf51e3a" + integrity sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg== + dependencies: + safe-buffer "5.1.2" + batch@0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/batch/-/batch-0.6.1.tgz#dc34314f4e679318093fc760272525f94bf25c16" @@ -6860,7 +6867,7 @@ bip39@^3.0.2: pbkdf2 "^3.0.9" randombytes "^2.0.1" -bluebird@3.7.2, bluebird@^3.5.1, bluebird@^3.5.5: +bluebird@^3.5.1, bluebird@^3.5.5: version "3.7.2" resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== @@ -7244,11 +7251,6 @@ charenc@~0.0.1: resolved "https://registry.yarnpkg.com/charenc/-/charenc-0.0.2.tgz#c0a1d2f3a7092e03774bfa83f14c0fc5790a8667" integrity sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA== -check-more-types@2.24.0: - version "2.24.0" - resolved "https://registry.yarnpkg.com/check-more-types/-/check-more-types-2.24.0.tgz#1420ffb10fd444dcfc79b43891bbfffd32a84600" - integrity sha512-Pj779qHxV2tuapviy1bSZNEL1maXr13bPYpsvSDB68HlYcYuhlDrmGd63i0JHMCLKzc7rUSNIrpdJlhVlNwrxA== - check-types@^11.1.1: version "11.1.2" resolved "https://registry.yarnpkg.com/check-types/-/check-types-11.1.2.tgz#86a7c12bf5539f6324eb0e70ca8896c0e38f3e2f" @@ -7592,6 +7594,11 @@ core-util-is@~1.0.0: resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== +corser@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/corser/-/corser-2.0.1.tgz#8eda252ecaab5840dcd975ceb90d9370c819ff87" + integrity sha512-utCYNzRSQIZNPIcGZdQc92UVJYAhtGAteCFg0yRaFm8f0P+CPtyGyHXJcGXnffjCybUCEx3FQ2G7U3/o9eIkVQ== + cosmiconfig@8.2.0, cosmiconfig@^8.1.3: version "8.2.0" resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-8.2.0.tgz#f7d17c56a590856cd1e7cee98734dca272b0d8fd" @@ -9311,7 +9318,20 @@ evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: md5.js "^1.3.4" safe-buffer "^5.1.1" -execa@5.1.1, execa@^5.0.0: +execa@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" + integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA== + dependencies: + cross-spawn "^6.0.0" + get-stream "^4.0.0" + is-stream "^1.1.0" + npm-run-path "^2.0.0" + p-finally "^1.0.0" + signal-exit "^3.0.0" + strip-eof "^1.0.0" + +execa@^5.0.0: version "5.1.1" resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== @@ -9326,19 +9346,6 @@ execa@5.1.1, execa@^5.0.0: signal-exit "^3.0.3" strip-final-newline "^2.0.0" -execa@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" - integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA== - dependencies: - cross-spawn "^6.0.0" - get-stream "^4.0.0" - is-stream "^1.1.0" - npm-run-path "^2.0.0" - p-finally "^1.0.0" - signal-exit "^3.0.0" - strip-eof "^1.0.0" - exenv@^1.2.0: version "1.2.2" resolved "https://registry.yarnpkg.com/exenv/-/exenv-1.2.2.tgz#2ae78e85d9894158670b03d47bec1f03bd91bb9d" @@ -10413,6 +10420,25 @@ http-proxy@^1.18.1: follow-redirects "^1.0.0" requires-port "^1.0.0" +http-server@^14.1.1: + version "14.1.1" + resolved "https://registry.yarnpkg.com/http-server/-/http-server-14.1.1.tgz#d60fbb37d7c2fdff0f0fbff0d0ee6670bd285e2e" + integrity sha512-+cbxadF40UXd9T01zUHgA+rlo2Bg1Srer4+B4NwIHdaGxAGGv59nYRnGGDJ9LBk7alpS0US+J+bLLdQOOkJq4A== + dependencies: + basic-auth "^2.0.1" + chalk "^4.1.2" + corser "^2.0.1" + he "^1.2.0" + html-encoding-sniffer "^3.0.0" + http-proxy "^1.18.1" + mime "^1.6.0" + minimist "^1.2.6" + opener "^1.5.1" + portfinder "^1.0.28" + secure-compare "3.0.1" + union "~0.5.0" + url-join "^4.0.1" + https-proxy-agent@7.0.1: version "7.0.1" resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-7.0.1.tgz#0277e28f13a07d45c663633841e20a40aaafe0ab" @@ -13496,11 +13522,6 @@ language-tags@^1.0.5: dependencies: language-subtag-registry "~0.3.2" -lazy-ass@1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/lazy-ass/-/lazy-ass-1.6.0.tgz#7999655e8646c17f089fdd187d150d3324d54513" - integrity sha512-cc8oEVoctTvsFZ/Oje/kGnHbpWHYBe8IAJe4C0QNc3t8uM/0Y8+erSz/7Y1ALuXTEZTMvxXwO6YbX1ey3ujiZw== - leb128@^0.0.5: version "0.0.5" resolved "https://registry.yarnpkg.com/leb128/-/leb128-0.0.5.tgz#84524a86ef7799fb3933ce41345f6490e27ac948" @@ -13822,7 +13843,7 @@ mime-types@^2.1.12, mime-types@^2.1.27, mime-types@^2.1.31, mime-types@~2.1.17, dependencies: mime-db "1.52.0" -mime@1.6.0: +mime@1.6.0, mime@^1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== @@ -14231,6 +14252,11 @@ open@^8.0.9, open@^8.4.0: is-docker "^2.1.1" is-wsl "^2.2.0" +opener@^1.5.1: + version "1.5.2" + resolved "https://registry.yarnpkg.com/opener/-/opener-1.5.2.tgz#5d37e1f35077b9dcac4301372271afdeb2a13598" + integrity sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A== + optionator@^0.8.1: version "0.8.3" resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495" @@ -15287,7 +15313,7 @@ proxy-from-env@1.1.0: resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== -ps-tree@1.2.0: +ps-tree@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/ps-tree/-/ps-tree-1.2.0.tgz#5e7425b89508736cdd4f2224d028f7bb3f722ebd" integrity sha512-0VnamPPYHl4uaU/nSFeZZpR21QAWRz+sRv4iW9+v/GS/J5U5iZB5BNN6J0RMoOvdx2gWM2+ZFMIm58q24e4UYA== @@ -15394,6 +15420,13 @@ qs@6.9.7: resolved "https://registry.yarnpkg.com/qs/-/qs-6.9.7.tgz#4610846871485e1e048f44ae3b94033f0e675afe" integrity sha512-IhMFgUmuNpyRfxA90umL7ByLlgRXu6tIfKPpF5TmcfRLlLCckfP/g3IQmju6jjpu+Hh8rA+2p6A27ZSPOOHdKw== +qs@^6.4.0: + version "6.11.2" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.2.tgz#64bea51f12c1f5da1bc01496f48ffcff7c69d7d9" + integrity sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA== + dependencies: + side-channel "^1.0.4" + querystringify@^2.1.1: version "2.2.0" resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.2.0.tgz#3345941b4153cb9d082d8eee4cda2016a9aef7f6" @@ -16190,6 +16223,11 @@ secretjs@^0.17.0: protobufjs "^6.11.2" secure-random "1.1.2" +secure-compare@3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/secure-compare/-/secure-compare-3.0.1.tgz#f1a0329b308b221fae37b9974f3d578d0ca999e3" + integrity sha512-AckIIV90rPDcBcglUwXPF3kg0P0qmPsPXAj6BBEENQE1p5yA1xfmDJzfi1Tappj37Pv2mVbKpL3Z1T+Nn7k1Qw== + secure-random@1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/secure-random/-/secure-random-1.1.2.tgz#ed103b460a851632d420d46448b2a900a41e7f7c" @@ -16624,20 +16662,6 @@ stackframe@^1.1.1: resolved "https://registry.yarnpkg.com/stackframe/-/stackframe-1.2.1.tgz#1033a3473ee67f08e2f2fc8eba6aef4f845124e1" integrity sha512-h88QkzREN/hy8eRdyNhhsO7RSJ5oyTqxxmmn0dzBIMUclZsjpfmrsg81vp8mjjAs2vAZ72nyWxRUwSwmh0e4xg== -start-server-and-test@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/start-server-and-test/-/start-server-and-test-2.0.0.tgz#0644809d63036a8a001efb70582f3e37ebfdd33d" - integrity sha512-UqKLw0mJbfrsG1jcRLTUlvuRi9sjNuUiDOLI42r7R5fA9dsFoywAy9DoLXNYys9B886E4RCKb+qM1Gzu96h7DQ== - dependencies: - arg "^5.0.2" - bluebird "3.7.2" - check-more-types "2.24.0" - debug "4.3.4" - execa "5.1.1" - lazy-ass "1.6.0" - ps-tree "1.2.0" - wait-on "7.0.1" - statuses@2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" @@ -17063,6 +17087,13 @@ terminal-link@^2.0.0: ansi-escapes "^4.2.1" supports-hyperlinks "^2.0.0" +terminate@^2.6.1: + version "2.6.1" + resolved "https://registry.yarnpkg.com/terminate/-/terminate-2.6.1.tgz#99a4eb1647011b95f47401f6beb9f23e0362fbc0" + integrity sha512-0kdr49oam98yvjkVY+gfUaT3SMaJI6Sc+yijJjU+qhat+0NQKQn60OsIZZeKyVgTO0/33nRa3HowRbpw3A7u9A== + dependencies: + ps-tree "^1.2.0" + terser-webpack-plugin@^5.1.3, terser-webpack-plugin@^5.2.5: version "5.3.1" resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.1.tgz#0320dcc270ad5372c1e8993fabbd927929773e54" @@ -17476,6 +17507,13 @@ unicode-property-aliases-ecmascript@^2.0.0: resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.0.0.tgz#0a36cb9a585c4f6abd51ad1deddb285c165297c8" integrity sha512-5Zfuy9q/DFr4tfO7ZPeVXb1aPoeQSdeFMLpYuFebehDAhbuevLs5yxSZmIFN1tP5F9Wl4IpJrYojg85/zgyZHQ== +union@~0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/union/-/union-0.5.0.tgz#b2c11be84f60538537b846edb9ba266ba0090075" + integrity sha512-N6uOhuW6zO95P3Mel2I2zMsbsanvvtgn6jVqJv4vbVcz/JN0OkL9suomjQGmWtxJQXOCqUJvquc1sMeNz/IwlA== + dependencies: + qs "^6.4.0" + unique-string@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-2.0.0.tgz#39c6451f81afb2749de2b233e3f7c5e8843bd89d" @@ -17533,6 +17571,11 @@ uri-js@^4.2.2: dependencies: punycode "^2.1.0" +url-join@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/url-join/-/url-join-4.0.1.tgz#b642e21a2646808ffa178c4c5fda39844e12cde7" + integrity sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA== + url-parse@^1.5.3: version "1.5.10" resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.5.10.tgz#9d3c2f736c1d75dd3bd2be507dcc111f1e2ea9c1" @@ -17656,7 +17699,7 @@ w3c-xmlserializer@^3.0.0: dependencies: xml-name-validator "^4.0.0" -wait-on@7.0.1, wait-on@^7.0.1: +wait-on@^7.0.1: version "7.0.1" resolved "https://registry.yarnpkg.com/wait-on/-/wait-on-7.0.1.tgz#5cff9f8427e94f4deacbc2762e6b0a489b19eae9" integrity sha512-9AnJE9qTjRQOlTZIldAaf/da2eW0eSRSgcqq85mXQja/DW3MriHxkpODDSUEg+Gri/rKEcXUZHe+cevvYItaog==