diff --git a/.github/workflows/e2e.yml b/.github/workflows/e2e.yml new file mode 100644 index 0000000..b0207e6 --- /dev/null +++ b/.github/workflows/e2e.yml @@ -0,0 +1,63 @@ +name: CI + +on: + push: + branches: + - main + pull_request: + branches: + - main + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +jobs: + e2e: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Set up QEMU + uses: docker/setup-qemu-action@v3 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + - name: Cache Docker layers + uses: actions/cache@v4 + with: + path: /tmp/.buildx-cache + key: ${{ runner.os }}-buildx-${{ github.sha }} + restore-keys: | + ${{ runner.os }}-buildx- + - name: Run E2E Tests + run: | + docker-compose -f ui/test/e2e/docker-compose.yml --profile agd up --build -d && + docker-compose -f ui/test/e2e/docker-compose.yml --profile synpress up --build --exit-code-from synpress + env: + COMPOSE_DOCKER_CLI_BUILD: 1 + DOCKER_BUILDKIT: 1 + DOCKER_DEFAULT_PLATFORM: linux/amd64 + NGROK_AUTH: ${{ secrets.NGROK_AUTH }} + NGROK_BASIC_AUTH: ${{ secrets.NGROK_BASIC_AUTH }} + CYPRESS_PRIVATE_KEY_WITH_FUNDS: ${{ secrets.CYPRESS_PRIVATE_KEY_WITH_FUNDS }} + ANVIL_FORK_URL: ${{ secrets.ANVIL_FORK_URL }} + GH_PAT: ${{ secrets.GH_PAT }} + GH_USERNAME: ${{ secrets.GH_USERNAME }} + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + CYPRESS_PROJECT_ID: ${{ secrets.CYPRESS_PROJECT_ID }} + CYPRESS_RECORD_KEY: ${{ secrets.CYPRESS_RECORD_KEY }} + COMMIT_INFO_MESSAGE: ${{ github.event.pull_request.title }} + COMMIT_INFO_SHA: ${{ github.event.pull_request.head.sha }} + + - name: Upload Artifacts + uses: actions/upload-artifact@v4 + if: always() + with: + name: e2e-artifacts + path: | + ui/test/e2e/cypress/videos + ui/test/e2e/cypress/screenshots + continue-on-error: true \ No newline at end of file diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..0acc7bf --- /dev/null +++ b/Dockerfile @@ -0,0 +1,12 @@ +FROM --platform=linux/amd64 synthetixio/docker-e2e:18.16-ubuntu as base + +RUN mkdir /app +WORKDIR /app + +RUN apt update && apt install -y nginx + +COPY ui/test/e2e/nginx.conf /etc/nginx/sites-available/default + +COPY . . + +RUN yarn install --frozen-lockfile \ No newline at end of file diff --git a/contract/package.json b/contract/package.json index 3b6fc63..54003cc 100644 --- a/contract/package.json +++ b/contract/package.json @@ -11,6 +11,7 @@ "docker:make": "docker compose exec agd make -C /workspace/contract", "make:help": "make list", "start": "yarn docker:make clean start-contract", + "send-funds": "docker compose exec agd bash /workspace/contract/scripts/send-funds.sh", "build": "agoric run scripts/build-contract-deployer.js", "test": "ava --verbose", "lint": "eslint '**/*.js'", diff --git a/contract/scripts/run-chain.sh b/contract/scripts/run-chain.sh index 6534eae..d5d2d2b 100755 --- a/contract/scripts/run-chain.sh +++ b/contract/scripts/run-chain.sh @@ -54,6 +54,31 @@ approveProposals() { done } +sendFunds() { + echo "Sending Funds....." + src=agoric1t83za2h5zc5anmkxvfag82qafshr538mvzmnmx + dest=agoric1p2aqakv3ulz4qfy2nut86j9gx0dx0yw09h96md + amt=55535300uist + + echo "Sending ISTs" + agd tx bank send $src $dest $amt --keyring-backend=test --chain-id=agoriclocal \ + --gas=auto --gas-adjustment=1.2 --yes -b block + echo "ISTs sent successfully" + + amt=331000ubld + echo "Sending BLDs" + agd tx bank send $src $dest $amt --keyring-backend=test --chain-id=agoriclocal \ + --gas=auto --gas-adjustment=1.2 --yes -b block + echo "BLDs sent successfully" + + amt=9ibc/BA313C4A19DFBF943586C0387E6B11286F9E416B4DD27574E6909CABE0E342FA + echo "Sending ATOMs" + agd tx bank send $src $dest $amt --keyring-backend=test --chain-id=agoriclocal \ + --gas=auto --gas-adjustment=1.2 --yes -b block + echo "ATOMs sent successfully" + +} + # Start the chain in the background /usr/src/upgrade-test-scripts/start_agd.sh & @@ -63,8 +88,11 @@ waitForBlock 2 # Approve any proposals forever in the background. approveProposals & +sendFunds + make -C /workspace/contract mint100 make -C /workspace/contract lower-bundle-cost +make -C /workspace/contract clean start-contract # bring back chain process to foreground wait diff --git a/contract/scripts/send-funds.sh b/contract/scripts/send-funds.sh new file mode 100644 index 0000000..436449e --- /dev/null +++ b/contract/scripts/send-funds.sh @@ -0,0 +1,6 @@ +src=agoric1t83za2h5zc5anmkxvfag82qafshr538mvzmnmx +dest=agoric1p2aqakv3ulz4qfy2nut86j9gx0dx0yw09h96md +amt=5553530000uist + +agd tx bank send $src $dest $amt --keyring-backend=test --chain-id=agoriclocal \ +--gas=auto --gas-adjustment=1.2 --yes -b block \ No newline at end of file diff --git a/package.json b/package.json index dff7eef..832f842 100644 --- a/package.json +++ b/package.json @@ -49,11 +49,12 @@ "build": "yarn workspaces run build" }, "devDependencies": { - "@agoric/synpress": "^3.8.1-beta.1", + "@agoric/synpress": "^3.8.1", "eslint-config-turbo": "^1.13.0", "eslint-plugin-chai-friendly": "^0.7.4", "eslint-plugin-cypress": "^2.15.1", "eslint-plugin-testing-library": "^6.2.0", - "eslint-plugin-ui-testing": "^2.0.1" + "eslint-plugin-ui-testing": "^2.0.1", + "start-server-and-test": "^2.0.3" } } diff --git a/ui/package.json b/ui/package.json index c2e9c87..8d1b5a8 100644 --- a/ui/package.json +++ b/ui/package.json @@ -8,6 +8,7 @@ "build": "tsc && vite build", "test": "vitest spec", "test:e2e": "EXTENSION=keplr synpress run --configFile=test/e2e/synpress.config.cjs", + "test:e2e:ci": "start-server-and-test 'yarn dev' http-get://localhost:5173 'yarn test:e2e'", "lint": "eslint . --ext ts,tsx --report-unused-disable-directives --max-warnings 0", "lint:fix": "yarn lint --fix", "preview": "vite preview" diff --git a/ui/test/e2e/docker-compose.yml b/ui/test/e2e/docker-compose.yml new file mode 100644 index 0000000..317b9bb --- /dev/null +++ b/ui/test/e2e/docker-compose.yml @@ -0,0 +1,100 @@ +version: '3.9' + +services: + synpress: + profiles: + - synpress + container_name: synpress + build: ../../../ + environment: + - DISPLAY=display:0.0 + - CYPRESS_PRIVATE_KEY_WITH_FUNDS=${CYPRESS_PRIVATE_KEY_WITH_FUNDS} + - DEBUG=${DEBUG} + - CYPRESS_DOCKER_RUN=true + - GH_PAT=${GH_PAT} + - GH_USERNAME=${GH_USERNAME} + - CI=${CI} + # Cypress Dashboard + - CYPRESS_GROUP=${CYPRESS_GROUP} + - GITHUB_TOKEN=${GITHUB_TOKEN} + - CYPRESS_PROJECT_ID=${CYPRESS_PROJECT_ID} + - CYPRESS_RECORD_KEY=${CYPRESS_RECORD_KEY} + - COMMIT_INFO_MESSAGE=${COMMIT_INFO_MESSAGE} + - COMMIT_INFO_SHA=${COMMIT_INFO_SHA} + # CI variables + - GITHUB_ACTIONS=${GITHUB_ACTIONS} + - GITHUB_WORKFLOW=${GITHUB_WORKFLOW} + - GITHUB_ACTION=${GITHUB_ACTION} + - GITHUB_EVENT_NAME=${GITHUB_EVENT_NAME} + - GITHUB_RUN_ID=${GITHUB_RUN_ID} + - GITHUB_RUN_ATTEMPT=${GITHUB_RUN_ATTEMPT} + - GITHUB_REPOSITORY=${GITHUB_REPOSITORY} + - GH_BRANCH=${GH_BRANCH} + - GITHUB_SHA=${GITHUB_SHA} + - GITHUB_REF=${GITHUB_REF} + - GITHUB_BASE_REF=${GITHUB_BASE_REF} + - GITHUB_HEAD_REF=${GITHUB_HEAD_REF} + - SECRET_WORDS="orbit bench unit task food shock brand bracket domain regular warfare company announce wheel grape trust sphere boy doctor half guard ritual three ecology" + depends_on: + - display + entrypoint: [] + working_dir: /app + volumes: + - ./cypress/videos:/app/ui/test/e2e/videos + - ./cypress/screenshots:/app/ui/test/e2e/screenshots + command: > + bash -c 'echo -n "======> local noVNC URL: http://localhost:8080/vnc.html?autoconnect=true " && yarn wait-on http://display:8080 && echo -n "======> remote noVNC URL: " && curl -s ngrok:4040/api/tunnels | jq -r .tunnels[0].public_url && nginx && yarn test:e2e:ci' + networks: + - x11 + + display: + profiles: + - synpress + container_name: display + image: synthetixio/display:016121eafdfff448414894d0ca5a50b1d72b62eb-base + environment: + - RUN_XTERM=no + - DISPLAY_WIDTH=1920 + - DISPLAY_HEIGHT=1080 + ports: + - '8080:8080' + networks: + - x11 + + ngrok: + profiles: + - ngrok + container_name: ngrok + image: synthetixio/ngrok:016121eafdfff448414894d0ca5a50b1d72b62eb-base + ports: + - '4040:4040' + command: ['ngrok', 'http', 'display:8080', '--authtoken', '${NGROK_AUTH}'] + environment: + - NGROK_AUTH=${NGROK_AUTH} + - NGROK_BASIC_AUTH=${NGROK_BASIC_AUTH} + depends_on: + - display + networks: + - x11 + + agd: + profiles: + - agd + container_name: agoric_chain + image: ghcr.io/agoric/agoric-3-proposals:latest + platform: linux/amd64 + ports: + - 26656:26656 + - 26657:26657 + - 1317:1317 + environment: + DEST: 1 + DEBUG: "SwingSet:ls,SwingSet:vat" + volumes: + - ../../..:/workspace + entrypoint: /workspace/contract/scripts/run-chain.sh + networks: + - x11 + +networks: + x11: \ No newline at end of file diff --git a/ui/test/e2e/nginx.conf b/ui/test/e2e/nginx.conf new file mode 100644 index 0000000..958e69e --- /dev/null +++ b/ui/test/e2e/nginx.conf @@ -0,0 +1,39 @@ +server { + listen 26656; + server_name localhost; + + location / { + proxy_pass http://agoric_chain:26656; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + } +} + +server { + listen 26657; + server_name localhost; + + location / { + proxy_pass http://agoric_chain:26657; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + } +} + + +server { + listen 1317; + server_name localhost; + + location / { + proxy_pass http://agoric_chain:1317; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + } +} \ No newline at end of file diff --git a/yarn.lock b/yarn.lock index 24710cb..8bc7b85 100644 --- a/yarn.lock +++ b/yarn.lock @@ -743,10 +743,10 @@ resolved "https://registry.yarnpkg.com/@agoric/swingset-xsnap-supervisor/-/swingset-xsnap-supervisor-0.10.3-u13.0.tgz#83c7744c28b0093a93ef1dbdf3e3c7244dbf5265" integrity sha512-gEIOlyLd34JZkVRPWq9982Eu7G4ggE6H3I3RueO9JbbhOXwU+irYL922t0Ztdjc9aJW2H5f78ukcn9j1SZmtHQ== -"@agoric/synpress@^3.8.1-beta.1": - version "3.8.1-beta.1" - resolved "https://registry.yarnpkg.com/@agoric/synpress/-/synpress-3.8.1-beta.1.tgz#73da38ed062dc3d39ae5cfc4211f242f6434ae91" - integrity sha512-D7bRxNz/M0ExrojW9qyw1YNdFI3uSxDUkAB9xyPVkOa8US9ETaT7Akmvz16d40UG10n9G3H1WGlymG6nCTnRYQ== +"@agoric/synpress@^3.8.1": + version "3.8.1" + resolved "https://registry.yarnpkg.com/@agoric/synpress/-/synpress-3.8.1.tgz#0c71e16a5ce81b77f8b20588946d55c312acc34d" + integrity sha512-vD8TeKOWup/yrPO7LBiYwvKSy6LAjGJaMiCU52yfp/zqKFBWopfwCdUSpvzTnhBEZAz3VUxsrgzgfil5wCiRNQ== dependencies: "@cypress/code-coverage" "^3.11.0" "@cypress/webpack-dev-server" "^3.5.2" @@ -3691,6 +3691,11 @@ are-docs-informative@^0.0.2: resolved "https://registry.yarnpkg.com/are-docs-informative/-/are-docs-informative-0.0.2.tgz#387f0e93f5d45280373d387a59d34c96db321963" integrity sha512-ixiS0nLNNG5jNQzgZJNoUpBKdo9yTYZMGJ+QgT2jmjR7G7+QHRCc4v6LQ3NgE7EBJq+o0ams3waJwkrlBom8Ig== +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" @@ -4225,7 +4230,7 @@ bluebird@3.7.1: resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.1.tgz#df70e302b471d7473489acf26a93d63b53f874de" integrity sha512-DdmyoGCleJnkbp3nkbxTLJ18rjDsE4yCggEwKNXkeV123sPNfOCYeDoeuOY+F2FrSjO1YXcTU+dsy96KMy+gcg== -bluebird@^3.7.2: +bluebird@3.7.2, bluebird@^3.7.2: version "3.7.2" resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== @@ -4548,7 +4553,7 @@ check-error@^1.0.3: dependencies: get-func-name "^2.0.2" -check-more-types@^2.24.0: +check-more-types@2.24.0, 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== @@ -5666,6 +5671,11 @@ duplexer3@^0.1.4: resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.5.tgz#0b5e4d7bad5de8901ea4440624c8e1d20099217e" integrity sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA== +duplexer@~0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.2.tgz#3abe43aef3835f8ae077d136ddce0f276b0400e6" + integrity sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg== + eastasianwidth@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb" @@ -6506,6 +6516,19 @@ event-lite@^0.1.1: resolved "https://registry.yarnpkg.com/event-lite/-/event-lite-0.1.3.tgz#3dfe01144e808ac46448f0c19b4ab68e403a901d" integrity sha512-8qz9nOz5VeD2z96elrEKD2U433+L3DWdUdDkOINLGOJvx1GsMBbMn0aCeu28y8/e85A6mCigBiFlYMnTBEGlSw== +event-stream@=3.3.4: + version "3.3.4" + resolved "https://registry.yarnpkg.com/event-stream/-/event-stream-3.3.4.tgz#4ab4c9a0f5a54db9338b4c34d86bfce8f4b35571" + integrity sha512-QHpkERcGsR0T7Qm3HNJSyXKEEj8AHNxkY3PK8TS2KJvQ7NiSHe3DDpwVKKtoYprL/AreyzFBeIkBIWChAqn60g== + dependencies: + duplexer "~0.1.1" + from "~0" + map-stream "~0.1.0" + pause-stream "0.0.11" + split "0.3" + stream-combiner "~0.0.4" + through "~2.3.1" + eventemitter2@6.4.7: version "6.4.7" resolved "https://registry.yarnpkg.com/eventemitter2/-/eventemitter2-6.4.7.tgz#a7f6c4d7abf28a14c1ef3442f21cb306a054271d" @@ -6531,20 +6554,7 @@ execa@4.1.0: signal-exit "^3.0.2" 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" - -execa@^5.0.0: +execa@5.1.1, execa@^5.0.0: version "5.1.1" resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== @@ -6559,6 +6569,19 @@ 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" + execa@^7.1.1: version "7.2.0" resolved "https://registry.yarnpkg.com/execa/-/execa-7.2.0.tgz#657e75ba984f42a70f38928cedc87d6f2d4fe4e9" @@ -6992,6 +7015,11 @@ from2@^2.1.1: inherits "^2.0.1" readable-stream "^2.0.0" +from@~0: + version "0.1.7" + resolved "https://registry.yarnpkg.com/from/-/from-0.1.7.tgz#83c60afc58b9c56997007ed1a768b3ab303a44fe" + integrity sha512-twe20eF1OxVxp/ML/kq2p1uc6KvFK/+vs8WjEbeKmV2He22MKm7YF2ANIt+EOqhJ5L3K/SuuPhk0hWQDjOM23g== + fromentries@^1.2.0: version "1.3.2" resolved "https://registry.yarnpkg.com/fromentries/-/fromentries-1.3.2.tgz#e4bca6808816bf8f93b52750f1127f5a6fd86e3a" @@ -8578,7 +8606,7 @@ launch-editor@^2.6.0: picocolors "^1.0.0" shell-quote "^1.8.1" -lazy-ass@^1.6.0: +lazy-ass@1.6.0, 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== @@ -8910,6 +8938,11 @@ map-age-cleaner@^0.1.3: dependencies: p-defer "^1.0.0" +map-stream@~0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/map-stream/-/map-stream-0.1.0.tgz#e56aa94c4c8055a16404a0674b78f215f7c8e194" + integrity sha512-CkYQrPYZfWnu/DAmVCpTSX/xHpKZ80eKh2lAkyA6AJTef6bW+6JpbQZN5rofum7da+SyN1bi5ctTm+lTfcCW3g== + matcher@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/matcher/-/matcher-5.0.0.tgz#cd82f1c7ae7ee472a9eeaf8ec7cac45e0fe0da62" @@ -9996,6 +10029,13 @@ pathval@^1.1.1: resolved "https://registry.yarnpkg.com/pathval/-/pathval-1.1.1.tgz#8534e77a77ce7ac5a2512ea21e0fdb8fcf6c3d8d" integrity sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ== +pause-stream@0.0.11: + version "0.0.11" + resolved "https://registry.yarnpkg.com/pause-stream/-/pause-stream-0.0.11.tgz#fe5a34b0cbce12b5aa6a2b403ee2e73b602f1445" + integrity sha512-e3FBlXLmN/D1S+zHzanP4E/4Z60oFAa3O051qt1pxa7DEJWKAyil6upYVXCWadEnuoqa4Pkc9oUx9zsxYeRv8A== + dependencies: + through "~2.3" + pend@~1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50" @@ -10331,6 +10371,13 @@ 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: + 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== + dependencies: + event-stream "=3.3.4" + psl@^1.1.33: version "1.9.0" resolved "https://registry.yarnpkg.com/psl/-/psl-1.9.0.tgz#d0df2a137f00794565fcaf3b2c00cd09f8d5a5a7" @@ -11229,6 +11276,13 @@ speed-measure-webpack-plugin@1.4.2: dependencies: chalk "^4.1.0" +split@0.3: + version "0.3.3" + resolved "https://registry.yarnpkg.com/split/-/split-0.3.3.tgz#cd0eea5e63a211dfff7eb0f091c4133e2d0dd28f" + integrity sha512-wD2AeVmxXRBoX44wAycgjVpMhvbwdI2aZjCkvfNcH1YqHQvJVa1duWc73OyVGJUc05fhFaTZeQ/PYsrmyH0JVA== + dependencies: + through "2" + sprintf-js@~1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" @@ -11266,6 +11320,20 @@ stackback@0.0.2: resolved "https://registry.yarnpkg.com/stackback/-/stackback-0.0.2.tgz#1ac8a0d9483848d1695e418b6d031a3c3ce68e3b" integrity sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw== +start-server-and-test@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/start-server-and-test/-/start-server-and-test-2.0.3.tgz#15c53c85e23cba7698b498b8a2598cab95f3f802" + integrity sha512-QsVObjfjFZKJE6CS6bSKNwWZCKBG6975/jKRPPGFfFh+yOQglSeGXiNWjzgQNXdphcBI9nXbyso9tPfX4YAUhg== + 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.2.0" + statuses@2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" @@ -11288,6 +11356,13 @@ stop-iteration-iterator@^1.0.0: dependencies: internal-slot "^1.0.4" +stream-combiner@~0.0.4: + version "0.0.4" + resolved "https://registry.yarnpkg.com/stream-combiner/-/stream-combiner-0.0.4.tgz#4d5e433c185261dde623ca3f44c586bcf5c4ad14" + integrity sha512-rT00SPnTVyRsaSz5zgSPma/aHSOic5U1prhYdRy5HS2kTZviFpmDgzilbtsJsxiroqACmayynDN/9VzIbX5DOw== + dependencies: + duplexer "~0.1.1" + streamx@^2.15.0: version "2.15.6" resolved "https://registry.yarnpkg.com/streamx/-/streamx-2.15.6.tgz#28bf36997ebc7bf6c08f9eba958735231b833887" @@ -11655,7 +11730,7 @@ throttleit@^1.0.0: resolved "https://registry.yarnpkg.com/throttleit/-/throttleit-1.0.1.tgz#304ec51631c3b770c65c6c6f76938b384000f4d5" integrity sha512-vDZpf9Chs9mAdfY046mcPt8fg5QSZr37hEH4TXYBnDF+izxgrbRGUAAaBvIk/fJm9aOFCGFd1EsNg5AZCbnQCQ== -through@^2.3.6, through@^2.3.8: +through@2, through@^2.3.6, through@^2.3.8, through@~2.3, through@~2.3.1: version "2.3.8" resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== @@ -12228,7 +12303,7 @@ vitest@^1.2.1: vite-node "1.2.1" why-is-node-running "^2.2.2" -wait-on@^7.0.1: +wait-on@7.2.0, wait-on@^7.0.1: version "7.2.0" resolved "https://registry.yarnpkg.com/wait-on/-/wait-on-7.2.0.tgz#d76b20ed3fc1e2bebc051fae5c1ff93be7892928" integrity sha512-wCQcHkRazgjG5XoAq9jbTMLpNIjoSlZslrJ2+N9MxDsGEv1HnFoVjOCexL0ESva7Y9cu350j+DWADdk54s4AFQ==