Commit a2db3e27 authored by Zach Pomerantz's avatar Zach Pomerantz Committed by GitHub

test(e2e): configure Cypress to post PR status comments (#6591)

parent b62f9066
...@@ -127,7 +127,7 @@ jobs: ...@@ -127,7 +127,7 @@ jobs:
id: cypress-cache id: cypress-cache
with: with:
path: /root/.cache/Cypress path: /root/.cache/Cypress
key: ${{ runner.os }}-cypress key: ${{ runner.os }}-cypress-${{ hashFiles('**/node_modules/cypress/package.json') }}
- run: | - run: |
yarn cypress install yarn cypress install
yarn cypress info yarn cypress info
...@@ -140,14 +140,25 @@ jobs: ...@@ -140,14 +140,25 @@ jobs:
- uses: cypress-io/github-action@v4 - uses: cypress-io/github-action@v4
with: with:
install: false install: false
record: true
parallel: true
start: yarn serve start: yarn serve
wait-on: 'http://localhost:3000' wait-on: 'http://localhost:3000'
browser: chrome browser: chrome
record: true group: e2e
parallel: true
env: env:
CYPRESS_RECORD_KEY: ${{ secrets.CYPRESS_RECORD_KEY }} CYPRESS_RECORD_KEY: ${{ secrets.CYPRESS_RECORD_KEY }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
COMMIT_INFO_BRANCH: ${{ github.event.pull_request.head.ref || github.ref_name }}
COMMIT_INFO_MESSAGE: ${{ github.event.pull_request.title || github.event.head_commit.message }}
COMMIT_INFO_AUTHOR: ${{ github.event.sender.login || github.event.head_commit.author.login }}
# Cypress requires an email for filtering by author, but GitHub does not expose one.
# GitHub's public profile email can be deterministically produced from user id/login.
COMMIT_INFO_EMAIL: ${{ github.event.sender.id || github.event.head_commit.author.id }}+${{ github.event.sender.login || github.event.head_commit.author.login }}@users.noreply.github.com
COMMIT_INFO_SHA: ${{ github.event.pull_request.head.sha || github.event.head_commit.sha }}
COMMIT_INFO_TIMESTAMP: ${{ github.event.pull_request.updated_at || github.event.head_commit.timestamp }}
CYPRESS_PULL_REQUEST_ID: ${{ github.event.pull_request.number }}
CYPRESS_PULL_REQUEST_URL: ${{ github.event.pull_request.html_url }}
- uses: codecov/codecov-action@v3 - uses: codecov/codecov-action@v3
with: with:
......
...@@ -21,6 +21,7 @@ describe('Landing Page', () => { ...@@ -21,6 +21,7 @@ describe('Landing Page', () => {
}) })
it('shows landing page when the unicorn icon in nav is selected', () => { it('shows landing page when the unicorn icon in nav is selected', () => {
cy.visit('/swap')
cy.get(getTestSelector('uniswap-logo')).click() cy.get(getTestSelector('uniswap-logo')).click()
cy.get(getTestSelector('landing-page')) cy.get(getTestSelector('landing-page'))
}) })
......
...@@ -7,7 +7,7 @@ const UNI_MAINNET = UNI[SupportedChainId.MAINNET] ...@@ -7,7 +7,7 @@ const UNI_MAINNET = UNI[SupportedChainId.MAINNET]
describe('Swap', () => { describe('Swap', () => {
describe('Swap on main page', () => { describe('Swap on main page', () => {
before(() => { beforeEach(() => {
cy.visit('/swap', { ethereum: 'hardhat' }) cy.visit('/swap', { ethereum: 'hardhat' })
}) })
...@@ -41,55 +41,53 @@ describe('Swap', () => { ...@@ -41,55 +41,53 @@ describe('Swap', () => {
it('should render an error when a transaction fails due to a passed deadline', () => { it('should render an error when a transaction fails due to a passed deadline', () => {
const DEADLINE_MINUTES = 1 const DEADLINE_MINUTES = 1
const TEN_MINUTES_MS = 1000 * 60 * DEADLINE_MINUTES * 10 const TEN_MINUTES_MS = 1000 * 60 * DEADLINE_MINUTES * 10
cy.visit('/swap', { ethereum: 'hardhat' }) cy.hardhat({ automine: false }).then((hardhat) => {
.hardhat({ automine: false }) cy.then(() => hardhat.getBalance(hardhat.wallet.address, USDC_MAINNET))
.then((hardhat) => { .then((balance) => Number(balance.toFixed(1)))
cy.then(() => hardhat.getBalance(hardhat.wallet.address, USDC_MAINNET)) .then((initialBalance) => {
.then((balance) => Number(balance.toFixed(1))) // Input swap info.
.then((initialBalance) => { cy.get('#swap-currency-output .open-currency-select-button').click()
// Input swap info. cy.contains('USDC').click()
cy.get('#swap-currency-output .open-currency-select-button').click() cy.get('#swap-currency-output .token-amount-input').clear().type('1')
cy.contains('USDC').click() cy.get('#swap-currency-input .token-amount-input').should('not.equal', '')
cy.get('#swap-currency-output .token-amount-input').clear().type('1')
cy.get('#swap-currency-input .token-amount-input').should('not.equal', '') // Set deadline to minimum. (1 minute)
cy.get(getTestSelector('open-settings-dialog-button')).click()
// Set deadline to minimum. (1 minute) cy.get(getTestSelector('transaction-deadline-settings')).click()
cy.get(getTestSelector('open-settings-dialog-button')).click() cy.get(getTestSelector('deadline-input')).clear().type(DEADLINE_MINUTES.toString())
cy.get(getTestSelector('transaction-deadline-settings')).click() cy.get('body').click('topRight')
cy.get(getTestSelector('deadline-input')).clear().type(DEADLINE_MINUTES.toString()) cy.get(getTestSelector('deadline-input')).should('not.exist')
cy.get('body').click('topRight')
cy.get(getTestSelector('deadline-input')).should('not.exist') cy.get('#swap-button').click()
cy.get('#confirm-swap-or-send').click()
cy.get('#swap-button').click()
cy.get('#confirm-swap-or-send').click() // Dismiss the modal that appears when a transaction is broadcast to the network.
cy.get(getTestSelector('dismiss-tx-confirmation')).click()
// Dismiss the modal that appears when a transaction is broadcast to the network.
cy.get(getTestSelector('dismiss-tx-confirmation')).click() // The UI should show the transaction as pending.
cy.contains('1 Pending').should('exist')
// The UI should show the transaction as pending.
cy.contains('1 Pending').should('exist') // Mine a block past the deadline.
cy.then(() => hardhat.mine(1, TEN_MINUTES_MS)).then(() => {
// Mine a block past the deadline. // The UI should no longer show the transaction as pending.
cy.then(() => hardhat.mine(1, TEN_MINUTES_MS)).then(() => { cy.contains('1 Pending').should('not.exist')
// The UI should no longer show the transaction as pending.
cy.contains('1 Pending').should('not.exist') // Check that the user is informed of the failure
cy.contains('Swap failed').should('exist')
// Check that the user is informed of the failure
cy.contains('Swap failed').should('exist') // Check that the balance is unchanged in the UI
cy.get('#swap-currency-output [data-testid="balance-text"]').should(
// Check that the balance is unchanged in the UI 'have.text',
cy.get('#swap-currency-output [data-testid="balance-text"]').should( `Balance: ${initialBalance}`
'have.text', )
`Balance: ${initialBalance}`
) // Check that the balance is unchanged on chain
cy.then(() => hardhat.getBalance(hardhat.wallet.address, USDC_MAINNET))
// Check that the balance is unchanged on chain .then((balance) => Number(balance.toFixed(1)))
cy.then(() => hardhat.getBalance(hardhat.wallet.address, USDC_MAINNET)) .should('eq', initialBalance)
.then((balance) => Number(balance.toFixed(1)))
.should('eq', initialBalance)
})
}) })
}) })
})
}) })
it('should default inputs from URL params ', () => { it('should default inputs from URL params ', () => {
...@@ -107,7 +105,6 @@ describe('Swap', () => { ...@@ -107,7 +105,6 @@ describe('Swap', () => {
}) })
it('ETH to wETH is same value (wrapped swaps have no price impact)', () => { it('ETH to wETH is same value (wrapped swaps have no price impact)', () => {
cy.visit('/swap')
cy.get(`#swap-currency-output .open-currency-select-button`).click() cy.get(`#swap-currency-output .open-currency-select-button`).click()
cy.contains('WETH').click() cy.contains('WETH').click()
cy.get('#swap-currency-input .token-amount-input').clear().type('0.01') cy.get('#swap-currency-input .token-amount-input').clear().type('0.01')
...@@ -115,7 +112,6 @@ describe('Swap', () => { ...@@ -115,7 +112,6 @@ describe('Swap', () => {
}) })
it('Opens and closes the settings menu', () => { it('Opens and closes the settings menu', () => {
cy.visit('/swap')
cy.contains('Settings').should('not.exist') cy.contains('Settings').should('not.exist')
cy.get(getTestSelector('open-settings-dialog-button')).click() cy.get(getTestSelector('open-settings-dialog-button')).click()
cy.contains('Max slippage').should('exist') cy.contains('Max slippage').should('exist')
...@@ -135,7 +131,6 @@ describe('Swap', () => { ...@@ -135,7 +131,6 @@ describe('Swap', () => {
}) })
it('can swap ETH for USDC', () => { it('can swap ETH for USDC', () => {
cy.visit('/swap', { ethereum: 'hardhat' })
const TOKEN_ADDRESS = USDC_MAINNET.address const TOKEN_ADDRESS = USDC_MAINNET.address
const BALANCE_INCREMENT = 1 const BALANCE_INCREMENT = 1
cy.hardhat().then((hardhat) => { cy.hardhat().then((hardhat) => {
......
import { getTestSelector } from '../utils' import { getTestSelector } from '../utils'
function visit(darkMode: boolean) {
cy.visit('/swap', {
onBeforeLoad(win) {
cy.stub(win, 'matchMedia')
.withArgs('(prefers-color-scheme: dark)')
.returns({
matches: darkMode,
addEventListener() {
// do nothing
},
})
},
})
}
describe('Wallet Dropdown', () => { describe('Wallet Dropdown', () => {
before(() => { function itShouldChangeTheTheme() {
cy.visit('/pools') it('should change the theme', () => {
}) cy.get(getTestSelector('theme-lightmode')).click()
it('should change the theme', () => { cy.get(getTestSelector('theme-lightmode')).should('not.have.css', 'background-color', 'rgba(0, 0, 0, 0)')
cy.get(getTestSelector('web3-status-connected')).click() cy.get(getTestSelector('theme-darkmode')).should('have.css', 'background-color', 'rgba(0, 0, 0, 0)')
cy.get(getTestSelector('wallet-settings')).click() cy.get(getTestSelector('theme-auto')).should('have.css', 'background-color', 'rgba(0, 0, 0, 0)')
cy.get(getTestSelector('theme-lightmode')).click()
cy.get(getTestSelector('theme-lightmode')).should('not.have.css', 'background-color', 'rgba(0, 0, 0, 0)') cy.get(getTestSelector('theme-darkmode')).click()
cy.get(getTestSelector('theme-darkmode')).should('have.css', 'background-color', 'rgba(0, 0, 0, 0)') cy.get(getTestSelector('theme-lightmode')).should('have.css', 'background-color', 'rgba(0, 0, 0, 0)')
cy.get(getTestSelector('theme-auto')).should('have.css', 'background-color', 'rgba(0, 0, 0, 0)') cy.get(getTestSelector('theme-darkmode')).should('not.have.css', 'background-color', 'rgba(0, 0, 0, 0)')
cy.get(getTestSelector('theme-auto')).should('have.css', 'background-color', 'rgba(0, 0, 0, 0)')
cy.get(getTestSelector('theme-darkmode')).click() cy.get(getTestSelector('theme-auto')).click()
cy.get(getTestSelector('theme-lightmode')).should('have.css', 'background-color', 'rgba(0, 0, 0, 0)') cy.get(getTestSelector('theme-lightmode')).should('have.css', 'background-color', 'rgba(0, 0, 0, 0)')
cy.get(getTestSelector('theme-darkmode')).should('not.have.css', 'background-color', 'rgba(0, 0, 0, 0)') cy.get(getTestSelector('theme-darkmode')).should('have.css', 'background-color', 'rgba(0, 0, 0, 0)')
cy.get(getTestSelector('theme-auto')).should('have.css', 'background-color', 'rgba(0, 0, 0, 0)') cy.get(getTestSelector('theme-auto')).should('not.have.css', 'background-color', 'rgba(0, 0, 0, 0)')
})
}
cy.get(getTestSelector('theme-auto')).click() function itShouldChangeTheLanguage() {
cy.get(getTestSelector('theme-lightmode')).should('have.css', 'background-color', 'rgba(0, 0, 0, 0)') it('should select a language', () => {
cy.get(getTestSelector('theme-darkmode')).should('have.css', 'background-color', 'rgba(0, 0, 0, 0)') cy.get(getTestSelector('wallet-language-item')).contains('Deutsch').click({ force: true })
cy.get(getTestSelector('theme-auto')).should('not.have.css', 'background-color', 'rgba(0, 0, 0, 0)') cy.get(getTestSelector('wallet-header')).should('contain', 'Sprache')
}) cy.get(getTestSelector('wallet-language-item')).contains('English').click({ force: true })
cy.get(getTestSelector('wallet-header')).should('contain', 'Language')
cy.get(getTestSelector('wallet-back')).click()
})
}
it('should select a language', () => { describe('connected', () => {
cy.get(getTestSelector('wallet-language-item')).contains('Deutsch').click({ force: true }) beforeEach(() => {
cy.get(getTestSelector('wallet-header')).should('contain', 'Sprache') cy.visit('/')
cy.get(getTestSelector('wallet-language-item')).contains('English').click({ force: true }) cy.get(getTestSelector('web3-status-connected')).click()
cy.get(getTestSelector('wallet-header')).should('contain', 'Language') cy.get(getTestSelector('wallet-settings')).click()
cy.get(getTestSelector('wallet-back')).click() })
itShouldChangeTheTheme()
itShouldChangeTheLanguage()
}) })
it('should change the theme when not connected', () => { describe('disconnected', () => {
cy.get(getTestSelector('wallet-disconnect')).click() beforeEach(() => {
cy.get(getTestSelector('wallet-settings')).click() cy.visit('/')
cy.get(getTestSelector('theme-lightmode')).should('exist') cy.get(getTestSelector('web3-status-connected')).click()
cy.get(getTestSelector('wallet-disconnect')).click()
cy.get(getTestSelector('wallet-settings')).click()
})
itShouldChangeTheTheme()
itShouldChangeTheLanguage()
}) })
it('should select a language when not connected', () => { describe('with color theme', () => {
cy.get(getTestSelector('wallet-language-item')).contains('Deutsch').click({ force: true }) function visitSwapWithColorTheme({ dark }: { dark: boolean }) {
cy.get(getTestSelector('wallet-header')).should('contain', 'Sprache') cy.visit('/swap', {
cy.get(getTestSelector('wallet-language-item')).contains('English').click({ force: true }) onBeforeLoad(win) {
cy.get(getTestSelector('wallet-header')).should('contain', 'Language') cy.stub(win, 'matchMedia')
cy.get(getTestSelector('wallet-back')).click() .withArgs('(prefers-color-scheme: dark)')
}) .returns({
matches: dark,
addEventListener() {
/* noop */
},
removeEventListener() {
/* noop */
},
})
},
})
}
it('should properly use dark system theme when auto theme setting is selected', () => { it('should properly use dark system theme when auto theme setting is selected', () => {
visit(true) visitSwapWithColorTheme({ dark: true })
cy.get(getTestSelector('web3-status-connected')).click() cy.get(getTestSelector('web3-status-connected')).click()
cy.get(getTestSelector('wallet-settings')).click() cy.get(getTestSelector('wallet-settings')).click()
cy.get(getTestSelector('theme-auto')).click() cy.get(getTestSelector('theme-auto')).click()
cy.get(getTestSelector('wallet-header')).should('have.css', 'color', 'rgb(152, 161, 192)') cy.get(getTestSelector('wallet-header')).should('have.css', 'color', 'rgb(152, 161, 192)')
}) })
it('should properly use light system theme when auto theme setting is selected', () => { it('should properly use light system theme when auto theme setting is selected', () => {
visit(false) visitSwapWithColorTheme({ dark: false })
cy.get(getTestSelector('web3-status-connected')).click() cy.get(getTestSelector('web3-status-connected')).click()
cy.get(getTestSelector('wallet-settings')).click() cy.get(getTestSelector('wallet-settings')).click()
cy.get(getTestSelector('theme-auto')).click() cy.get(getTestSelector('theme-auto')).click()
cy.get(getTestSelector('wallet-header')).should('have.css', 'color', 'rgb(119, 128, 160)') cy.get(getTestSelector('wallet-header')).should('have.css', 'color', 'rgb(119, 128, 160)')
})
}) })
it('should dismiss the wallet bottom sheet when clicking buy crypto', () => { describe('mobile', () => {
visit(false) beforeEach(() => {
cy.viewport('iphone-6') cy.viewport('iphone-6').visit('/')
cy.get(getTestSelector('web3-status-connected')).click() })
cy.get(getTestSelector('wallet-buy-crypto')).click()
cy.contains('Buy crypto').should('not.be.visible') it('should dismiss the wallet bottom sheet when clicking buy crypto', () => {
}) cy.get(getTestSelector('web3-status-connected')).click()
cy.get(getTestSelector('wallet-buy-crypto')).click()
cy.contains('Buy crypto').should('not.be.visible')
})
it('should use a bottom sheet and dismiss when on a mobile screen size', () => { it('should use a bottom sheet and dismiss when on a mobile screen size', () => {
visit(true) cy.get(getTestSelector('web3-status-connected')).click()
cy.viewport('iphone-6') cy.root().click(15, 40)
cy.get(getTestSelector('web3-status-connected')).click() cy.get(getTestSelector('wallet-settings')).should('not.be.visible')
cy.root().click(15, 40) })
cy.get(getTestSelector('wallet-settings')).should('not.be.visible')
}) })
}) })
...@@ -8165,7 +8165,7 @@ commander@^5.1.0: ...@@ -8165,7 +8165,7 @@ commander@^5.1.0:
resolved "https://registry.yarnpkg.com/commander/-/commander-5.1.0.tgz#46abbd1652f8e059bddaef99bbdcb2ad9cf179ae" resolved "https://registry.yarnpkg.com/commander/-/commander-5.1.0.tgz#46abbd1652f8e059bddaef99bbdcb2ad9cf179ae"
integrity sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg== integrity sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==
commander@^6.1.0: commander@^6.1.0, commander@^6.2.1:
version "6.2.1" version "6.2.1"
resolved "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz" resolved "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz"
integrity sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA== integrity sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==
...@@ -8662,10 +8662,10 @@ cypress-hardhat@^2.3.0: ...@@ -8662,10 +8662,10 @@ cypress-hardhat@^2.3.0:
"@uniswap/sdk-core" "^3.0.1" "@uniswap/sdk-core" "^3.0.1"
"@uniswap/universal-router-sdk" "^1.3.8" "@uniswap/universal-router-sdk" "^1.3.8"
cypress@*, cypress@10.3.1: cypress@*, cypress@12.12.0:
version "10.3.1" version "12.12.0"
resolved "https://registry.yarnpkg.com/cypress/-/cypress-10.3.1.tgz#7fab4ef43481c05a9a17ebe9a0ec860e15b95a19" resolved "https://registry.yarnpkg.com/cypress/-/cypress-12.12.0.tgz#0da622a34c970d8699ca6562d8e905ed7ce33c77"
integrity sha512-As9HrExjAgpgjCnbiQCuPdw5sWKx5HUJcK2EOKziu642akwufr/GUeqL5UnCPYXTyyibvEdWT/pSC2qnGW/e5w== integrity sha512-UU5wFQ7SMVCR/hyKok/KmzG6fpZgBHHfrXcHzDmPHWrT+UUetxFzQgt7cxCszlwfozckzwkd22dxMwl/vNkWRw==
dependencies: dependencies:
"@cypress/request" "^2.88.10" "@cypress/request" "^2.88.10"
"@cypress/xvfb" "^1.2.4" "@cypress/xvfb" "^1.2.4"
...@@ -8681,12 +8681,12 @@ cypress@*, cypress@10.3.1: ...@@ -8681,12 +8681,12 @@ cypress@*, cypress@10.3.1:
check-more-types "^2.24.0" check-more-types "^2.24.0"
cli-cursor "^3.1.0" cli-cursor "^3.1.0"
cli-table3 "~0.6.1" cli-table3 "~0.6.1"
commander "^5.1.0" commander "^6.2.1"
common-tags "^1.8.0" common-tags "^1.8.0"
dayjs "^1.10.4" dayjs "^1.10.4"
debug "^4.3.2" debug "^4.3.4"
enquirer "^2.3.6" enquirer "^2.3.6"
eventemitter2 "^6.4.3" eventemitter2 "6.4.7"
execa "4.1.0" execa "4.1.0"
executable "^4.1.1" executable "^4.1.1"
extract-zip "2.0.1" extract-zip "2.0.1"
...@@ -8699,7 +8699,7 @@ cypress@*, cypress@10.3.1: ...@@ -8699,7 +8699,7 @@ cypress@*, cypress@10.3.1:
listr2 "^3.8.3" listr2 "^3.8.3"
lodash "^4.17.21" lodash "^4.17.21"
log-symbols "^4.0.0" log-symbols "^4.0.0"
minimist "^1.2.6" minimist "^1.2.8"
ospath "^1.2.2" ospath "^1.2.2"
pretty-bytes "^5.6.0" pretty-bytes "^5.6.0"
proxy-from-env "1.0.0" proxy-from-env "1.0.0"
...@@ -10357,10 +10357,10 @@ event-target-shim@^5.0.0: ...@@ -10357,10 +10357,10 @@ event-target-shim@^5.0.0:
resolved "https://registry.yarnpkg.com/event-target-shim/-/event-target-shim-5.0.1.tgz#5d4d3ebdf9583d63a5333ce2deb7480ab2b05789" resolved "https://registry.yarnpkg.com/event-target-shim/-/event-target-shim-5.0.1.tgz#5d4d3ebdf9583d63a5333ce2deb7480ab2b05789"
integrity sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ== integrity sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==
eventemitter2@^6.4.3: eventemitter2@6.4.7, eventemitter2@^6.4.3:
version "6.4.4" version "6.4.7"
resolved "https://registry.yarnpkg.com/eventemitter2/-/eventemitter2-6.4.4.tgz#aa96e8275c4dbeb017a5d0e03780c65612a1202b" resolved "https://registry.yarnpkg.com/eventemitter2/-/eventemitter2-6.4.7.tgz#a7f6c4d7abf28a14c1ef3442f21cb306a054271d"
integrity sha512-HLU3NDY6wARrLCEwyGKRBvuWYyvW6mHYv72SJJAH3iJN3a6eVUvkjFkcxah1bcTgGVBBrFdIopBJPhCQFMLyXw== integrity sha512-tYUSVOGeQPKt/eC1ABfhHy5Xd96N3oIijJvN3O9+TsC28T5V9yX9oEfEK5faP0EFSNVOG97qtAS68GBrQB2hDg==
eventemitter3@4.0.7, eventemitter3@^4.0.0, eventemitter3@^4.0.7: eventemitter3@4.0.7, eventemitter3@^4.0.0, eventemitter3@^4.0.7:
version "4.0.7" version "4.0.7"
...@@ -13900,10 +13900,10 @@ minimatch@^5.0.1: ...@@ -13900,10 +13900,10 @@ minimatch@^5.0.1:
dependencies: dependencies:
brace-expansion "^2.0.1" brace-expansion "^2.0.1"
minimist@^1.2.0, minimist@^1.2.5, minimist@^1.2.6: minimist@^1.2.0, minimist@^1.2.5, minimist@^1.2.6, minimist@^1.2.8:
version "1.2.6" version "1.2.8"
resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.6.tgz#8637a5b759ea0d6e98702cfb3a9283323c93af44" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c"
integrity sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q== integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==
mkdirp@^0.5.1, mkdirp@~0.5.1: mkdirp@^0.5.1, mkdirp@~0.5.1:
version "0.5.5" version "0.5.5"
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment