diff --git a/package.json b/package.json index 661cb0b35b35d4f881cbd767c5341d44604b0b3f..0e6df064ec9786f3da1b356c9a50d406aa75a8cd 100644 --- a/package.json +++ b/package.json @@ -112,8 +112,8 @@ "release": "6.0.1", "request-promise-core": "1.1.2", "rimraf": "2.6.3", - "selenium-standalone": "6.17.0", - "selenium-webdriver": "4.0.0-alpha.5", + "selenium-standalone": "6.18.0", + "selenium-webdriver": "4.0.0-alpha.7", "shell-quote": "1.7.2", "styled-components": "5.1.0", "styled-jsx-plugin-postcss": "2.0.1", diff --git a/run-tests.js b/run-tests.js index 5dd3964ab57cda6f53b4a6166e76d8333436dc83..c37091b807d6649fff2b5ae94d344e83a146ce75 100644 --- a/run-tests.js +++ b/run-tests.js @@ -136,7 +136,7 @@ const TIMINGS_API = `https://next-timings.jjsweb.site/api/timings` { stdio: 'inherit', env: { - JEST_RETRY_TIMES: 2, + JEST_RETRY_TIMES: 0, ...process.env, ...(isAzure ? { diff --git a/test/integration/amphtml/pages/only-amp.js b/test/integration/amphtml/pages/only-amp.js index 653dbecd541d569615abee59f778742fc7a57004..41866b35c52c3fe53bc2d61dcbb5372fe2c5efc6 100644 --- a/test/integration/amphtml/pages/only-amp.js +++ b/test/integration/amphtml/pages/only-amp.js @@ -1,7 +1,9 @@ export const config = { amp: true } -export default () => ( -
-

Only AMP for me...

-
-) +export default function Page() { + return ( +
+

Only AMP for me...

+
+ ) +} diff --git a/test/integration/auto-export/pages/[post]/[cmnt].js b/test/integration/auto-export/pages/[post]/[cmnt].js index 6c7af1c61ca1a146fa64698b0df663e15f31f851..0982164d25db0cc6dd781ba110e155b97d1f7e5c 100644 --- a/test/integration/auto-export/pages/[post]/[cmnt].js +++ b/test/integration/auto-export/pages/[post]/[cmnt].js @@ -5,17 +5,17 @@ if (typeof window !== 'undefined') { const origWarn = window.console.warn const origError = window.console.error window.console.warn = function (...args) { - window.caughtWarns.push(1) + window.caughtWarns.push(args) origWarn(...args) } window.console.error = function (...args) { - window.caughtWarns.push(1) + window.caughtWarns.push(args) origError(...args) } window.pathnames = [] } -export default () => { +export default function Page() { if (typeof window !== 'undefined') { window.pathnames.push(window.location.pathname) } diff --git a/test/integration/auto-export/pages/[post]/index.js b/test/integration/auto-export/pages/[post]/index.js index 94492b467fa5119c630eae1f0b5ef4ce9e1f8d05..f3aee05d5bb12ea95af72b4f1b65ccbcc76325ff 100644 --- a/test/integration/auto-export/pages/[post]/index.js +++ b/test/integration/auto-export/pages/[post]/index.js @@ -1,6 +1,6 @@ import { useRouter } from 'next/router' -export default () => { +export default function Page() { const { query } = useRouter() return

post: {query.post}

diff --git a/test/integration/auto-export/test/index.test.js b/test/integration/auto-export/test/index.test.js index 6407b174dbc2ebb3e385c801deb195f46b4278e4..edaff678a19d5070ac77975f6309ec303039cb37 100644 --- a/test/integration/auto-export/test/index.test.js +++ b/test/integration/auto-export/test/index.test.js @@ -81,9 +81,8 @@ describe('Auto Export', () => { it('should not show hydration warning from mismatching asPath', async () => { const browser = await webdriver(appPort, '/zeit/cmnt-1') - - const numCaught = await browser.eval(`window.caughtWarns.length`) - expect(numCaught).toBe(0) + const caughtWarns = await browser.eval(`window.caughtWarns`) + expect(caughtWarns).toEqual([]) }) }) }) diff --git a/test/integration/build-indicator/pages/a.js b/test/integration/build-indicator/pages/a.js index f87a68489341815b6cdb7e81c9e3bf0eea23195c..45361f18d6af33ac51ee163b697ea21cb7b50849 100644 --- a/test/integration/build-indicator/pages/a.js +++ b/test/integration/build-indicator/pages/a.js @@ -1 +1,3 @@ -export default () =>

Hello from a

+export default function Page() { + return

Hello from a

+} diff --git a/test/integration/build-indicator/pages/b.js b/test/integration/build-indicator/pages/b.js index 6226f2d97f20a2887d721517bed38f05a7ff0174..fb38aab0d4496af179f897d02fcdecfd2feeb021 100644 --- a/test/integration/build-indicator/pages/b.js +++ b/test/integration/build-indicator/pages/b.js @@ -1 +1,3 @@ -export default () =>

Hello from b

+export default function Page() { + return

Hello from b

+} diff --git a/test/integration/build-indicator/pages/index.js b/test/integration/build-indicator/pages/index.js index 9f630e36e417e0194b8a1bfc15fe5703fba67353..b810ac290b56cfe31b6b54133e550118809fc34b 100644 --- a/test/integration/build-indicator/pages/index.js +++ b/test/integration/build-indicator/pages/index.js @@ -1,12 +1,14 @@ import Link from 'next/link' -export default () => ( - <> - - Go to a - - - Go to b - - -) +export default function Page() { + return ( + <> + + Go to a + + + Go to b + + + ) +} diff --git a/test/integration/dynamic-optional-routing/test/index.test.js b/test/integration/dynamic-optional-routing/test/index.test.js index 90dcb70c9e138e98a7ff8249290a875e1ab6fb1c..c17bd9168bf550c41ef667f98ed07aceaa74d4ca 100644 --- a/test/integration/dynamic-optional-routing/test/index.test.js +++ b/test/integration/dynamic-optional-routing/test/index.test.js @@ -10,7 +10,7 @@ import { nextBuild, nextStart, renderViaHTTP, - waitFor, + check, } from 'next-test-utils' import { join } from 'path' @@ -18,6 +18,7 @@ jest.setTimeout(1000 * 60 * 2) let app let appPort +let stderr const appDir = join(__dirname, '../') const DUMMY_PAGE = 'export default () => null' @@ -187,9 +188,10 @@ function runInvalidPagesTests(buildFn) { const invalidRoute = appDir + 'pages/index.js' try { await fs.outputFile(invalidRoute, DUMMY_PAGE, 'utf-8') - const { stderr } = await buildFn(appDir) - await expect(stderr).toMatch( - 'You cannot define a route with the same specificity as a optional catch-all route' + await buildFn(appDir) + await check( + () => stderr, + /You cannot define a route with the same specificity as a optional catch-all route/ ) } finally { await fs.unlink(invalidRoute) @@ -200,9 +202,10 @@ function runInvalidPagesTests(buildFn) { const invalidRoute = appDir + 'pages/nested.js' try { await fs.outputFile(invalidRoute, DUMMY_PAGE, 'utf-8') - const { stderr } = await buildFn(appDir) - await expect(stderr).toMatch( - 'You cannot define a route with the same specificity as a optional catch-all route' + await buildFn(appDir) + await check( + () => stderr, + /You cannot define a route with the same specificity as a optional catch-all route/ ) } finally { await fs.unlink(invalidRoute) @@ -213,8 +216,8 @@ function runInvalidPagesTests(buildFn) { const invalidRoute = appDir + 'pages/nested/[...param].js' try { await fs.outputFile(invalidRoute, DUMMY_PAGE, 'utf-8') - const { stderr } = await buildFn(appDir) - await expect(stderr).toMatch(/You cannot use both .+ at the same level/) + await buildFn(appDir) + await check(() => stderr, /You cannot use both .+ at the same level/) } finally { await fs.unlink(invalidRoute) } @@ -224,9 +227,10 @@ function runInvalidPagesTests(buildFn) { const invalidRoute = appDir + 'pages/invalid/[[param]].js' try { await fs.outputFile(invalidRoute, DUMMY_PAGE, 'utf-8') - const { stderr } = await buildFn(appDir) - await expect(stderr).toMatch( - 'Optional route parameters are not yet supported' + await buildFn(appDir) + await check( + () => stderr, + /Optional route parameters are not yet supported/ ) } finally { await fs.unlink(invalidRoute) @@ -245,14 +249,12 @@ describe('Dynamic Optional Routing', () => { runTests() runInvalidPagesTests(async (appDir) => { - let stderr = '' + stderr = '' await launchApp(appDir, await findPort(), { onStderr: (msg) => { stderr += msg }, }) - await waitFor(1000) - return { stderr } }) }) @@ -272,9 +274,9 @@ describe('Dynamic Optional Routing', () => { runTests() - runInvalidPagesTests(async (appDir) => - nextBuild(appDir, [], { stderr: true }) - ) + runInvalidPagesTests(async (appDir) => { + ;({ stderr } = await nextBuild(appDir, [], { stderr: true })) + }) it('should fail to build when param is not explicitly defined', async () => { const invalidRoute = appDir + 'pages/invalid/[[...slug]].js' diff --git a/test/integration/error-in-error/test/index.test.js b/test/integration/error-in-error/test/index.test.js index 2b4bee2991071a71ee60be2a113695c3c7368044..4443aec17bc33f94106550513c902542cc9426b5 100644 --- a/test/integration/error-in-error/test/index.test.js +++ b/test/integration/error-in-error/test/index.test.js @@ -31,7 +31,7 @@ describe('Handles an Error in _error', () => { it('Handles error during client transition', async () => { const browser = await webdriver(port, '/') - await browser.elementByCss('a').click() + await browser.waitForElementByCss('a').click() await waitFor(1000) const html = await browser.eval('document.body.innerHTML') expect(html).toMatch(/internal server error/i) diff --git a/test/integration/invalid-href/pages/third.js b/test/integration/invalid-href/pages/third.js index 12daa4342716619e4f8f4dbe50f617e8f77c9e93..509367eab393da1fdf9ec4032d38ece3547fb499 100644 --- a/test/integration/invalid-href/pages/third.js +++ b/test/integration/invalid-href/pages/third.js @@ -3,7 +3,7 @@ import { useState } from 'react' const invalidLink = 'https://vercel.com/' -export default () => { +export default function Page() { const { query, ...router } = useRouter() const [isDone, setIsDone] = useState(false) const { method = 'push' } = query diff --git a/test/integration/invalid-href/test/index.test.js b/test/integration/invalid-href/test/index.test.js index b612671d88a38c70c824d5f3134e3bfdfdf78f08..cb95ed64945cd8c968f0516e116e10f18720244c 100644 --- a/test/integration/invalid-href/test/index.test.js +++ b/test/integration/invalid-href/test/index.test.js @@ -30,24 +30,18 @@ jest.retryTimes(0) const showsError = async (pathname, regex, click = false, isWarn = false) => { const browser = await webdriver(appPort, pathname) try { + // wait for page to be built and navigated to + await browser.waitForElementByCss('#click-me') if (isWarn) { await browser.eval(`(function() { window.warnLogs = [] var origWarn = window.console.warn - window.console.warn = function() { - var warnStr = '' - for (var i = 0; i < arguments.length; i++) { - if (i > 0) warnStr += ' '; - warnStr += arguments[i] - } - window.warnLogs.push(warnStr) - origWarn.apply(undefined, arguments) + window.console.warn = (...args) => { + window.warnLogs.push(args.join(' ')) + origWarn.apply(window.console, args) } })()`) } - // wait for page to be built and navigated to - await waitFor(3000) - await browser.waitForElementByCss('#click-me') if (click) { await browser.elementByCss('#click-me').click() await waitFor(500) @@ -70,6 +64,11 @@ const showsError = async (pathname, regex, click = false, isWarn = false) => { const noError = async (pathname, click = false) => { const browser = await webdriver(appPort, '/') try { + await check(async () => { + const appReady = await browser.eval('!!window.next.router') + console.log('app ready: ', appReady) + return appReady ? 'ready' : 'nope' + }, 'ready') await browser.eval(`(function() { window.caughtErrors = [] window.addEventListener('error', function (error) { @@ -80,8 +79,6 @@ const noError = async (pathname, click = false) => { }) window.next.router.replace('${pathname}') })()`) - // wait for page to be built and navigated to - await waitFor(3000) await browser.waitForElementByCss('#click-me') if (click) { await browser.elementByCss('#click-me').click() diff --git a/test/integration/query-with-encoding/test/index.test.js b/test/integration/query-with-encoding/test/index.test.js index 237a054c152a143ad0ecdb079472a26b90d6ef76..3b25cc0e5301674b742f4901a3db3dd35766109e 100644 --- a/test/integration/query-with-encoding/test/index.test.js +++ b/test/integration/query-with-encoding/test/index.test.js @@ -1,12 +1,6 @@ /* eslint-env jest */ -import { - nextBuild, - nextServer, - startApp, - stopApp, - waitFor, -} from 'next-test-utils' +import { nextBuild, nextServer, startApp, stopApp } from 'next-test-utils' import webdriver from 'next-webdriver' import { join } from 'path' @@ -46,12 +40,11 @@ describe('Query String with Encoding', () => { it('should have correct query on Router#push', async () => { const browser = await webdriver(appPort, '/') try { - await waitFor(2000) + await browser.waitForCondition('!!window.next.router') await browser.eval( `window.next.router.push({pathname:'/',query:{abc:'def\\n'}})` ) - await waitFor(1000) - const text = await browser.elementByCss('#query-content').text() + const text = await browser.waitForElementByCss('#query-content').text() expect(text).toBe('{"abc":"def\\n"}') } finally { await browser.close() @@ -61,10 +54,8 @@ describe('Query String with Encoding', () => { it('should have correct query on simple client-side ', async () => { const browser = await webdriver(appPort, '/newline') try { - await waitFor(2000) - await browser.elementByCss('#hello-lf').click() - await waitFor(1000) - const text = await browser.elementByCss('#query-content').text() + await browser.waitForElementByCss('#hello-lf').click() + const text = await browser.waitForElementByCss('#query-content').text() expect(text).toBe('{"another":"hello\\n"}') } finally { await browser.close() @@ -74,10 +65,8 @@ describe('Query String with Encoding', () => { it('should have correct query on complex client-side ', async () => { const browser = await webdriver(appPort, '/newline') try { - await waitFor(2000) - await browser.elementByCss('#hello-complex').click() - await waitFor(1000) - const text = await browser.elementByCss('#query-content').text() + await browser.waitForElementByCss('#hello-complex').click() + const text = await browser.waitForElementByCss('#query-content').text() expect(text).toBe('{"complex":"yes\\n"}') } finally { await browser.close() @@ -99,12 +88,11 @@ describe('Query String with Encoding', () => { it('should have correct query on Router#push', async () => { const browser = await webdriver(appPort, '/') try { - await waitFor(2000) + await browser.waitForCondition('!!window.next.router') await browser.eval( `window.next.router.push({pathname:'/',query:{abc:'def '}})` ) - await waitFor(1000) - const text = await browser.elementByCss('#query-content').text() + const text = await browser.waitForElementByCss('#query-content').text() expect(text).toBe('{"abc":"def "}') } finally { await browser.close() @@ -114,10 +102,8 @@ describe('Query String with Encoding', () => { it('should have correct query on simple client-side ', async () => { const browser = await webdriver(appPort, '/space') try { - await waitFor(2000) - await browser.elementByCss('#hello-space').click() - await waitFor(1000) - const text = await browser.elementByCss('#query-content').text() + await browser.waitForElementByCss('#hello-space').click() + const text = await browser.waitForElementByCss('#query-content').text() expect(text).toBe('{"another":"hello "}') } finally { await browser.close() @@ -127,10 +113,8 @@ describe('Query String with Encoding', () => { it('should have correct query on complex client-side ', async () => { const browser = await webdriver(appPort, '/space') try { - await waitFor(2000) - await browser.elementByCss('#hello-complex').click() - await waitFor(1000) - const text = await browser.elementByCss('#query-content').text() + await browser.waitForElementByCss('#hello-complex').click() + const text = await browser.waitForElementByCss('#query-content').text() expect(text).toBe('{"complex":"yes "}') } finally { await browser.close() @@ -152,12 +136,11 @@ describe('Query String with Encoding', () => { it('should have correct query on Router#push', async () => { const browser = await webdriver(appPort, '/') try { - await waitFor(2000) + await browser.waitForCondition('!!window.next.router') await browser.eval( `window.next.router.push({pathname:'/',query:{abc:'def%'}})` ) - await waitFor(1000) - const text = await browser.elementByCss('#query-content').text() + const text = await browser.waitForElementByCss('#query-content').text() expect(text).toBe('{"abc":"def%"}') } finally { await browser.close() @@ -167,10 +150,8 @@ describe('Query String with Encoding', () => { it('should have correct query on simple client-side ', async () => { const browser = await webdriver(appPort, '/percent') try { - await waitFor(2000) - await browser.elementByCss('#hello-percent').click() - await waitFor(1000) - const text = await browser.elementByCss('#query-content').text() + await browser.waitForElementByCss('#hello-percent').click() + const text = await browser.waitForElementByCss('#query-content').text() expect(text).toBe('{"another":"hello%"}') } finally { await browser.close() @@ -180,10 +161,8 @@ describe('Query String with Encoding', () => { it('should have correct query on complex client-side ', async () => { const browser = await webdriver(appPort, '/percent') try { - await waitFor(2000) - await browser.elementByCss('#hello-complex').click() - await waitFor(1000) - const text = await browser.elementByCss('#query-content').text() + await browser.waitForElementByCss('#hello-complex').click() + const text = await browser.waitForElementByCss('#query-content').text() expect(text).toBe('{"complex":"yes%"}') } finally { await browser.close() @@ -205,12 +184,11 @@ describe('Query String with Encoding', () => { it('should have correct query on Router#push', async () => { const browser = await webdriver(appPort, '/') try { - await waitFor(2000) + await browser.waitForCondition('!!window.next.router') await browser.eval( `window.next.router.push({pathname:'/',query:{abc:'def+'}})` ) - await waitFor(1000) - const text = await browser.elementByCss('#query-content').text() + const text = await browser.waitForElementByCss('#query-content').text() expect(text).toBe('{"abc":"def+"}') } finally { await browser.close() @@ -220,10 +198,8 @@ describe('Query String with Encoding', () => { it('should have correct query on simple client-side ', async () => { const browser = await webdriver(appPort, '/plus') try { - await waitFor(2000) - await browser.elementByCss('#hello-plus').click() - await waitFor(1000) - const text = await browser.elementByCss('#query-content').text() + await browser.waitForElementByCss('#hello-plus').click() + const text = await browser.waitForElementByCss('#query-content').text() expect(text).toBe('{"another":"hello+"}') } finally { await browser.close() @@ -233,10 +209,8 @@ describe('Query String with Encoding', () => { it('should have correct query on complex client-side ', async () => { const browser = await webdriver(appPort, '/plus') try { - await waitFor(2000) - await browser.elementByCss('#hello-complex').click() - await waitFor(1000) - const text = await browser.elementByCss('#query-content').text() + await browser.waitForElementByCss('#hello-complex').click() + const text = await browser.waitForElementByCss('#query-content').text() expect(text).toBe('{"complex":"yes+"}') } finally { await browser.close() diff --git a/test/integration/scroll-back-restoration/pages/another.js b/test/integration/scroll-back-restoration/pages/another.js index a37308e7d87796f6d70409ae7349469397370169..340b4403e3d8072c99109f032a67a9312809f3b4 100644 --- a/test/integration/scroll-back-restoration/pages/another.js +++ b/test/integration/scroll-back-restoration/pages/another.js @@ -1,10 +1,12 @@ import Link from 'next/link' -export default () => ( - <> -

hi from another

- - to index - - -) +export default function Page() { + return ( + <> +

hi from another

+ + to index + + + ) +} diff --git a/test/integration/serverless-runtime-configs/pages/_app.js b/test/integration/serverless-runtime-configs/pages/_app.js index 9d7f9f03f9d3bbc0be5fde7e5aa24c2b038c5e96..de6491178176753b5113fdfdc4d6006a064b2783 100644 --- a/test/integration/serverless-runtime-configs/pages/_app.js +++ b/test/integration/serverless-runtime-configs/pages/_app.js @@ -2,9 +2,11 @@ import getConfig from 'next/config' const config = getConfig() -export default ({ Component, pageProps }) => ( - <> -

{JSON.stringify(config)}

- - -) +export default function App({ Component, pageProps }) { + return ( + <> +

{JSON.stringify(config)}

+ + + ) +} diff --git a/test/lib/wd-chain.js b/test/lib/wd-chain.js index fc807464183a7790767eb087a6ac2cd62e51ce0f..af562bf313771a3891c195074a8a58b8fa786cbe 100644 --- a/test/lib/wd-chain.js +++ b/test/lib/wd-chain.js @@ -92,6 +92,14 @@ export default class Chain { ) } + waitForCondition(condition) { + return this.updateChain(() => + this.browser.wait(async (driver) => { + return driver.executeScript('return ' + condition).catch(() => false) + }) + ) + } + eval(snippet) { if (typeof snippet === 'string' && !snippet.startsWith('return')) { snippet = `return ${snippet}` diff --git a/yarn.lock b/yarn.lock index fa0589cc1b5e3ff9aa235148bbd7bef1ce3abad1..8668aa68108819bb8356ca49c1220613e07f999e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3917,19 +3917,21 @@ bindings@^1.5.0: dependencies: file-uri-to-path "1.0.0" -bl@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/bl/-/bl-2.2.0.tgz#e1a574cdf528e4053019bb800b041c0ac88da493" - dependencies: - readable-stream "^2.3.5" - safe-buffer "^5.1.1" - bl@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/bl/-/bl-3.0.0.tgz#3611ec00579fd18561754360b21e9f784500ff88" dependencies: readable-stream "^3.0.1" +bl@^4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/bl/-/bl-4.0.2.tgz#52b71e9088515d0606d9dd9cc7aa48dc1f98e73a" + integrity sha512-j4OH8f6Qg2bGuWfRiltT2HYGx0e1QcBTrK9KAHNMwMZdQnDZFk0ZSYIpADjYCB3U12nicC5tVJwSIhwOWjb4RQ== + dependencies: + buffer "^5.5.0" + inherits "^2.0.4" + readable-stream "^3.4.0" + block-stream@*: version "0.0.9" resolved "https://registry.yarnpkg.com/block-stream/-/block-stream-0.0.9.tgz#13ebfe778a03205cfe03751481ebb4b3300c126a" @@ -4177,6 +4179,14 @@ buffer@^4.3.0: ieee754 "^1.1.4" isarray "^1.0.0" +buffer@^5.5.0: + version "5.6.0" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.6.0.tgz#a31749dc7d81d84db08abf937b6b8c4033f62786" + integrity sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw== + dependencies: + base64-js "^1.0.2" + ieee754 "^1.1.4" + builtin-modules@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-3.1.0.tgz#aad97c15131eb76b65b50ef208e7584cd76a7484" @@ -9509,9 +9519,10 @@ jsx-ast-utils@^2.2.3: array-includes "^3.0.3" object.assign "^4.1.0" -jszip@^3.1.5: - version "3.2.2" - resolved "https://registry.yarnpkg.com/jszip/-/jszip-3.2.2.tgz#b143816df7e106a9597a94c77493385adca5bd1d" +jszip@^3.2.2: + version "3.5.0" + resolved "https://registry.yarnpkg.com/jszip/-/jszip-3.5.0.tgz#b4fd1f368245346658e781fec9675802489e15f6" + integrity sha512-WRtu7TPCmYePR1nazfrtuF216cIVon/3GWOvHS9QR5bIwSbnxtdpma6un3jyGGNhHsKCSzn5Ypk+EkDRvTGiFA== dependencies: lie "~3.3.0" pako "~1.0.2" @@ -13267,7 +13278,7 @@ read@1, read@~1.0.1: string_decoder "^1.1.1" util-deprecate "^1.0.1" -readable-stream@^3.6.0: +readable-stream@^3.4.0, readable-stream@^3.6.0: version "3.6.0" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== @@ -13638,9 +13649,9 @@ request@2.85.0: tunnel-agent "^0.6.0" uuid "^3.1.0" -request@2.88.0, request@^2.86.0, request@^2.87.0, request@^2.88.0: - version "2.88.0" - resolved "https://registry.yarnpkg.com/request/-/request-2.88.0.tgz#9c2fca4f7d35b592efe57c7f0a55e81052124fef" +request@2.88.2, request@^2.88.2: + version "2.88.2" + resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" dependencies: aws-sign2 "~0.7.0" aws4 "^1.8.0" @@ -13649,7 +13660,7 @@ request@2.88.0, request@^2.86.0, request@^2.87.0, request@^2.88.0: extend "~3.0.2" forever-agent "~0.6.1" form-data "~2.3.2" - har-validator "~5.1.0" + har-validator "~5.1.3" http-signature "~1.2.0" is-typedarray "~1.0.0" isstream "~0.1.2" @@ -13659,13 +13670,13 @@ request@2.88.0, request@^2.86.0, request@^2.87.0, request@^2.88.0: performance-now "^2.1.0" qs "~6.5.2" safe-buffer "^5.1.2" - tough-cookie "~2.4.3" + tough-cookie "~2.5.0" tunnel-agent "^0.6.0" uuid "^3.3.2" -request@^2.88.2: - version "2.88.2" - resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" +request@^2.86.0, request@^2.87.0, request@^2.88.0: + version "2.88.0" + resolved "https://registry.yarnpkg.com/request/-/request-2.88.0.tgz#9c2fca4f7d35b592efe57c7f0a55e81052124fef" dependencies: aws-sign2 "~0.7.0" aws4 "^1.8.0" @@ -13674,7 +13685,7 @@ request@^2.88.2: extend "~3.0.2" forever-agent "~0.6.1" form-data "~2.3.2" - har-validator "~5.1.3" + har-validator "~5.1.0" http-signature "~1.2.0" is-typedarray "~1.0.0" isstream "~0.1.2" @@ -13684,7 +13695,7 @@ request@^2.88.2: performance-now "^2.1.0" qs "~6.5.2" safe-buffer "^5.1.2" - tough-cookie "~2.5.0" + tough-cookie "~2.4.3" tunnel-agent "^0.6.0" uuid "^3.3.2" @@ -14122,7 +14133,7 @@ sass-loader@8.0.2: schema-utils "^2.6.1" semver "^6.3.0" -sax@>=0.6.0, sax@^1.2.4, sax@~1.2.1, sax@~1.2.4: +sax@^1.2.4, sax@~1.2.1, sax@~1.2.4: version "1.2.4" resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" @@ -14169,9 +14180,10 @@ scss-tokenizer@^0.2.3: js-base64 "^2.1.8" source-map "^0.4.2" -selenium-standalone@6.17.0: - version "6.17.0" - resolved "https://registry.yarnpkg.com/selenium-standalone/-/selenium-standalone-6.17.0.tgz#0f24b691836205ee9bc3d7a6f207ebcb28170cd9" +selenium-standalone@6.18.0: + version "6.18.0" + resolved "https://registry.yarnpkg.com/selenium-standalone/-/selenium-standalone-6.18.0.tgz#011e0672b1b86893f77244a86ddea1b6baadfb87" + integrity sha512-JfuJZoPPhnRuOXPM60wElwzzf3f92VkHa/W1f0QLBxSMKy6K/CTICfPo75aSro8X5wf6pa2npjD/CQmZjUqsoA== dependencies: async "^2.6.2" commander "^2.19.0" @@ -14181,20 +14193,20 @@ selenium-standalone@6.17.0: minimist "^1.2.0" mkdirp "^0.5.1" progress "2.0.3" - request "2.88.0" - tar-stream "2.0.0" + request "2.88.2" + tar-stream "2.1.3" urijs "^1.19.1" which "^1.3.1" yauzl "^2.10.0" -selenium-webdriver@4.0.0-alpha.5: - version "4.0.0-alpha.5" - resolved "https://registry.yarnpkg.com/selenium-webdriver/-/selenium-webdriver-4.0.0-alpha.5.tgz#e4683b3dbf827d70df09a7e43bf02ebad20fa7c1" +selenium-webdriver@4.0.0-alpha.7: + version "4.0.0-alpha.7" + resolved "https://registry.yarnpkg.com/selenium-webdriver/-/selenium-webdriver-4.0.0-alpha.7.tgz#e3879d8457fd7ad8e4424094b7dc0540d99e6797" + integrity sha512-D4qnTsyTr91jT8f7MfN+OwY0IlU5+5FmlO5xlgRUV6hDEV8JyYx2NerdTEqDDkNq7RZDYc4VoPALk8l578RBHw== dependencies: - jszip "^3.1.5" - rimraf "^2.6.3" + jszip "^3.2.2" + rimraf "^2.7.1" tmp "0.0.30" - xml2js "^0.4.19" semver-compare@^1.0.0: version "1.0.0" @@ -15087,11 +15099,12 @@ tar-fs@^2.0.0: pump "^3.0.0" tar-stream "^2.0.0" -tar-stream@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-2.0.0.tgz#8829bbf83067bc0288a9089db49c56be395b6aea" +tar-stream@2.1.3: + version "2.1.3" + resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-2.1.3.tgz#1e2022559221b7866161660f118255e20fa79e41" + integrity sha512-Z9yri56Dih8IaK8gncVPx4Wqt86NDmQTSh49XLZgjWpGZL9GK9HKParS2scqHCC4w6X9Gh2jwaU45V47XTKwVA== dependencies: - bl "^2.2.0" + bl "^4.0.1" end-of-stream "^1.4.1" fs-constants "^1.0.0" inherits "^2.0.3" @@ -16325,17 +16338,6 @@ xml-name-validator@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a" -xml2js@^0.4.19: - version "0.4.23" - resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.4.23.tgz#a0c69516752421eb2ac758ee4d4ccf58843eac66" - dependencies: - sax ">=0.6.0" - xmlbuilder "~11.0.0" - -xmlbuilder@~11.0.0: - version "11.0.1" - resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-11.0.1.tgz#be9bae1c8a046e76b31127726347d0ad7002beb3" - xmlchars@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb"