Add selenium-webdriver and testing cross-browser in PRs (#9821)
* Migrate from wd to selenium-webdriver * Add chaining for next-webdriver * Re-add browserStackLocal global for teardown * Add additional element methods * Use freshWindow helper for chrome * Add selenium-server * Add cross-env for windows compat * Fix single quote windows * Update production preload tests * Update preload tests count * Update CircleCi for testing other browsers * Update CI configs * Update config * Add browser.url command * Add more methods * Update xcode version * Make sure to add chromedriver to path * Add forceExit flag * Update config * Update config * Disable safari * Fix bug in test * Add teardown logging * Update jest teardown * Move testing ie11 to Azure * Update job names * Remove force exiting on long teardown * Update Azure config * Re-add safari testing with BrowserStack * Update config * Update prefetch tests for ie11 * Update prefetch for safari and ids for ie11 testing * trigger prefetching manually in ie
This commit is contained in:
parent
ec440d4b7b
commit
f89d55f10d
11 changed files with 647 additions and 722 deletions
|
@ -20,10 +20,13 @@ aliases:
|
|||
# Executors
|
||||
#########################
|
||||
|
||||
orbs:
|
||||
win: circleci/windows@2.2.0
|
||||
|
||||
executors:
|
||||
node:
|
||||
docker:
|
||||
- image: circleci/node@sha256:8631b3dc0f49fc179940bbd4254ced0c41b99d02bfdbf1d8bdd4d0b135e3ee5f
|
||||
- image: circleci/node:10-browsers
|
||||
working_directory: ~/repo
|
||||
|
||||
#########################
|
||||
|
@ -36,13 +39,6 @@ commands:
|
|||
- run:
|
||||
name: Installing Dependencies
|
||||
command: yarn install --frozen-lockfile --check-files
|
||||
- run:
|
||||
name: Install correct Chrome Driver version
|
||||
command: node node_modules/chromedriver/install.js
|
||||
environment:
|
||||
CHROMEDRIVER_VERSION: '76.0.3809.68'
|
||||
- run: google-chrome --version
|
||||
- run: yarn chromedriver --version
|
||||
yarn_lint:
|
||||
steps:
|
||||
- run:
|
||||
|
@ -53,8 +49,6 @@ commands:
|
|||
- run:
|
||||
name: Upgrade to most recent release in React's Next channel
|
||||
command: yarn upgrade react@next react-dom@next -W --dev # upgrade (vs add) will skip re-building Next.js, which doesn't bundle React internals (so this is OK!)
|
||||
environment:
|
||||
CHROMEDRIVER_VERSION: '76.0.3809.68'
|
||||
yarn_info:
|
||||
steps:
|
||||
- run:
|
||||
|
@ -62,6 +56,8 @@ commands:
|
|||
command: yarn why react && yarn why react-dom
|
||||
test_all:
|
||||
steps:
|
||||
- run: google-chrome --version
|
||||
- run: chromedriver --version
|
||||
- run:
|
||||
name: Run All Tests
|
||||
command: |
|
||||
|
@ -71,22 +67,22 @@ commands:
|
|||
)
|
||||
environment:
|
||||
NEXT_TELEMETRY_DISABLED: '1'
|
||||
test_browser:
|
||||
parameters:
|
||||
browser:
|
||||
type: string
|
||||
test_safari:
|
||||
steps:
|
||||
- run:
|
||||
name: Test in a browser
|
||||
name: Test Safari
|
||||
command: |
|
||||
if [[ ! -z $BROWSERSTACK_USERNAME ]]; then
|
||||
yarn testall test/integration/production/
|
||||
else
|
||||
echo "Not running for PR"
|
||||
fi
|
||||
yarn testsafari --forceExit test/integration/production/
|
||||
environment:
|
||||
NEXT_TELEMETRY_DISABLED: '1'
|
||||
BROWSERSTACK: 'true'
|
||||
BROWSER_NAME: << parameters.browser >>
|
||||
test_firefox:
|
||||
steps:
|
||||
- run:
|
||||
name: Test Firefox
|
||||
command: |
|
||||
yarn testfirefox --forceExit test/integration/production/
|
||||
environment:
|
||||
NEXT_TELEMETRY_DISABLED: '1'
|
||||
save_npm_token:
|
||||
steps:
|
||||
|
@ -151,24 +147,16 @@ jobs:
|
|||
- yarn_info
|
||||
- test_all
|
||||
- *store_test_results
|
||||
test-ie11:
|
||||
executor: node
|
||||
steps:
|
||||
- *attach_workspace
|
||||
- test_browser:
|
||||
browser: 'ie'
|
||||
test-safari:
|
||||
executor: node
|
||||
steps:
|
||||
- *attach_workspace
|
||||
- test_browser:
|
||||
browser: 'safari'
|
||||
- test_safari
|
||||
test-firefox:
|
||||
executor: node
|
||||
steps:
|
||||
- *attach_workspace
|
||||
- test_browser:
|
||||
browser: 'firefox'
|
||||
- test_firefox
|
||||
deploy:
|
||||
executor: node
|
||||
steps:
|
||||
|
@ -186,41 +174,23 @@ workflows:
|
|||
build-test-and-deploy:
|
||||
jobs:
|
||||
- build
|
||||
- test:
|
||||
requires:
|
||||
- build
|
||||
- lint:
|
||||
requires:
|
||||
- build
|
||||
- test-ie11:
|
||||
requires:
|
||||
- build
|
||||
filters:
|
||||
branches:
|
||||
only:
|
||||
- master
|
||||
- canary
|
||||
- test-safari:
|
||||
requires:
|
||||
- build
|
||||
- test
|
||||
- test-ie11
|
||||
filters:
|
||||
branches:
|
||||
only:
|
||||
- master
|
||||
- canary
|
||||
- test-firefox:
|
||||
requires:
|
||||
- build
|
||||
- test
|
||||
- test-ie11
|
||||
- test-safari
|
||||
- test:
|
||||
requires:
|
||||
- build
|
||||
- test-safari:
|
||||
requires:
|
||||
- build
|
||||
filters:
|
||||
branches:
|
||||
only:
|
||||
- master
|
||||
- canary
|
||||
- lint:
|
||||
requires:
|
||||
- build
|
||||
- deploy:
|
||||
requires:
|
||||
- test
|
||||
|
|
|
@ -1,51 +1,66 @@
|
|||
pool:
|
||||
vmImage: 'windows-2019'
|
||||
|
||||
variables:
|
||||
NEXT_TELEMETRY_DISABLED: '1'
|
||||
YARN_CACHE_FOLDER: $(Pipeline.Workspace)/.yarn
|
||||
CHROMEDRIVER_VERSION: '78.0.3904.70'
|
||||
NEXT_TELEMETRY_DISABLED: '1'
|
||||
node_version: ^10.10.0
|
||||
|
||||
strategy:
|
||||
maxParallel: 10
|
||||
matrix:
|
||||
node-10-1:
|
||||
group: 1/4
|
||||
node_version: ^10.10.0
|
||||
node-10-2:
|
||||
group: 2/4
|
||||
node_version: ^10.10.0
|
||||
node-10-3:
|
||||
group: 3/4
|
||||
node_version: ^10.10.0
|
||||
node-10-4:
|
||||
group: 4/4
|
||||
node_version: ^10.10.0
|
||||
jobs:
|
||||
- job: test_ie11
|
||||
pool:
|
||||
vmImage: 'windows-2019'
|
||||
steps:
|
||||
- task: NodeTool@0
|
||||
inputs:
|
||||
versionSpec: $(node_version)
|
||||
displayName: 'Install Node.js'
|
||||
|
||||
steps:
|
||||
- script: |
|
||||
wmic datafile where name="C:\\Program Files (x86)\\Google\\Chrome\\Application\\chrome.exe" get Version /value
|
||||
displayName: 'List Chrome version'
|
||||
- task: CacheBeta@0
|
||||
inputs:
|
||||
key: yarn | $(Agent.OS) | yarn.lock
|
||||
path: $(YARN_CACHE_FOLDER)
|
||||
displayName: Cache Yarn packages
|
||||
|
||||
- task: NodeTool@0
|
||||
inputs:
|
||||
versionSpec: $(node_version)
|
||||
displayName: 'Install Node.js'
|
||||
- script: |
|
||||
yarn install --frozen-lockfile --check-files
|
||||
displayName: 'Install dependencies'
|
||||
|
||||
- task: CacheBeta@0
|
||||
inputs:
|
||||
key: yarn | $(Agent.OS) | yarn.lock
|
||||
path: $(YARN_CACHE_FOLDER)
|
||||
displayName: Cache Yarn packages
|
||||
- script: |
|
||||
yarn testie --forceExit test/integration/production/
|
||||
displayName: 'Run tests'
|
||||
|
||||
- script: |
|
||||
yarn install --frozen-lockfile --check-files
|
||||
displayName: 'Install dependencies'
|
||||
- job: test_chrome
|
||||
pool:
|
||||
vmImage: 'windows-2019'
|
||||
strategy:
|
||||
maxParallel: 10
|
||||
matrix:
|
||||
node-10-1:
|
||||
group: 1/4
|
||||
node-10-2:
|
||||
group: 2/4
|
||||
node-10-3:
|
||||
group: 3/4
|
||||
node-10-4:
|
||||
group: 4/4
|
||||
steps:
|
||||
- script: |
|
||||
wmic datafile where name="C:\\Program Files (x86)\\Google\\Chrome\\Application\\chrome.exe" get Version /value
|
||||
displayName: 'List Chrome version'
|
||||
|
||||
- script: |
|
||||
node node_modules/chromedriver/install.js
|
||||
displayName: 'Install correct Chrome Driver version'
|
||||
- task: NodeTool@0
|
||||
inputs:
|
||||
versionSpec: $(node_version)
|
||||
displayName: 'Install Node.js'
|
||||
|
||||
- script: |
|
||||
node run-tests.js -g $(group)
|
||||
displayName: 'Run tests'
|
||||
- task: CacheBeta@0
|
||||
inputs:
|
||||
key: yarn | $(Agent.OS) | yarn.lock
|
||||
path: $(YARN_CACHE_FOLDER)
|
||||
displayName: Cache Yarn packages
|
||||
|
||||
- script: |
|
||||
yarn install --frozen-lockfile --check-files
|
||||
displayName: 'Install dependencies'
|
||||
|
||||
- script: |
|
||||
node run-tests.js -g $(group)
|
||||
displayName: 'Run tests'
|
||||
|
|
10
package.json
10
package.json
|
@ -9,7 +9,10 @@
|
|||
"dev": "lerna run build --stream --parallel",
|
||||
"dev2": "while true; do yarn --check-files && yarn dev; done",
|
||||
"testonly": "jest --runInBand",
|
||||
"testheadless": "HEADLESS=true yarn testonly",
|
||||
"testheadless": "cross-env HEADLESS=true yarn testonly",
|
||||
"testsafari": "cross-env BROWSER_NAME=safari yarn testonly",
|
||||
"testfirefox": "cross-env BROWSER_NAME=firefox yarn testonly",
|
||||
"testie": "cross-env BROWSER_NAME=\"internet explorer\" yarn testonly",
|
||||
"testall": "yarn run testonly -- --ci --forceExit",
|
||||
"pretest": "yarn run lint",
|
||||
"git-reset": "git reset --hard HEAD",
|
||||
|
@ -52,9 +55,9 @@
|
|||
"babel-jest": "24.9.0",
|
||||
"browserstack-local": "1.4.0",
|
||||
"cheerio": "0.22.0",
|
||||
"chromedriver": "78.0.1",
|
||||
"clone": "2.1.2",
|
||||
"coveralls": "3.0.3",
|
||||
"cross-env": "6.0.3",
|
||||
"cross-spawn": "6.0.5",
|
||||
"escape-string-regexp": "2.0.0",
|
||||
"eslint": "6.6.0",
|
||||
|
@ -89,13 +92,14 @@
|
|||
"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",
|
||||
"shell-quote": "1.7.2",
|
||||
"tailwindcss": "1.1.3",
|
||||
"taskr": "1.1.0",
|
||||
"tree-kill": "1.2.1",
|
||||
"typescript": "3.7.3",
|
||||
"wait-port": "0.2.2",
|
||||
"wd": "1.11.3",
|
||||
"webpack-bundle-analyzer": "3.3.2"
|
||||
},
|
||||
"resolutions": {
|
||||
|
|
|
@ -82,7 +82,7 @@ describe('Client Navigation', () => {
|
|||
await waitFor(3000)
|
||||
await browser.back()
|
||||
await waitFor(3000)
|
||||
const text = await browser.elementsByCss('#about-link').text()
|
||||
const text = await browser.elementByCss('#about-link').text()
|
||||
if (browser) await browser.close()
|
||||
expect(text).toMatch(/About/)
|
||||
})
|
||||
|
@ -96,7 +96,7 @@ describe('Client Navigation', () => {
|
|||
await waitFor(3000)
|
||||
await browser.forward()
|
||||
await waitFor(3000)
|
||||
const text = await browser.elementsByCss('p').text()
|
||||
const text = await browser.elementByCss('p').text()
|
||||
if (browser) await browser.close()
|
||||
expect(text).toMatch(/this is the about page/i)
|
||||
})
|
||||
|
|
|
@ -266,7 +266,7 @@ const runTests = (dev = false) => {
|
|||
const browser = await webdriver(appPort, '/')
|
||||
await waitFor(500)
|
||||
await browser.eval('window.beforeClick = true')
|
||||
await browser.click('#broken-post')
|
||||
await browser.elementByCss('#broken-post').click()
|
||||
await waitFor(1000)
|
||||
expect(await browser.eval('window.beforeClick')).not.toBe('true')
|
||||
})
|
||||
|
|
|
@ -6,22 +6,22 @@ export default () => {
|
|||
<ul>
|
||||
<li>
|
||||
<Link href="/" prefetch>
|
||||
<a>index</a>
|
||||
<a id="prefetch-1">index</a>
|
||||
</Link>
|
||||
</li>
|
||||
<li>
|
||||
<Link href="/process-env" prefetch>
|
||||
<a>process env</a>
|
||||
<a id="prefetch-2">process env</a>
|
||||
</Link>
|
||||
</li>
|
||||
<li>
|
||||
<Link href="/counter" prefetch>
|
||||
<a>counter</a>
|
||||
<a id="prefetch-3">counter</a>
|
||||
</Link>
|
||||
</li>
|
||||
<li>
|
||||
<Link href="/about" prefetch>
|
||||
<a>about</a>
|
||||
<a id="prefetch-4">about</a>
|
||||
</Link>
|
||||
</li>
|
||||
</ul>
|
||||
|
|
|
@ -441,45 +441,60 @@ describe('Production Usage', () => {
|
|||
}
|
||||
})
|
||||
|
||||
if (browserName === 'chrome') {
|
||||
it('should add prefetch tags when Link prefetch prop is used', async () => {
|
||||
const browser = await webdriver(appPort, '/prefetch')
|
||||
await waitFor(2000)
|
||||
it('should add prefetch tags when Link prefetch prop is used', async () => {
|
||||
const browser = await webdriver(appPort, '/prefetch')
|
||||
|
||||
if (browserName === 'internet explorer') {
|
||||
// IntersectionObserver isn't present so we need to trigger manually
|
||||
await waitFor(1000)
|
||||
await browser.eval(`(function() {
|
||||
window.next.router.prefetch('/')
|
||||
window.next.router.prefetch('/process-env')
|
||||
window.next.router.prefetch('/counter')
|
||||
window.next.router.prefetch('/about')
|
||||
})()`)
|
||||
}
|
||||
|
||||
await waitFor(2000)
|
||||
|
||||
if (browserName === 'safari') {
|
||||
const elements = await browser.elementsByCss('link[rel=preload]')
|
||||
// 4 page preloads and 5 existing preloads for _app, commons, main, etc
|
||||
expect(elements.length).toBe(9)
|
||||
} else {
|
||||
const elements = await browser.elementsByCss('link[rel=prefetch]')
|
||||
|
||||
expect(elements.length).toBe(4)
|
||||
await Promise.all(
|
||||
elements.map(async element => {
|
||||
const rel = await element.getAttribute('rel')
|
||||
const as = await element.getAttribute('as')
|
||||
expect(rel).toBe('prefetch')
|
||||
expect(as).toBe('script')
|
||||
})
|
||||
)
|
||||
await browser.close()
|
||||
})
|
||||
|
||||
// This is a workaround to fix https://github.com/zeit/next.js/issues/5860
|
||||
// TODO: remove this workaround when https://bugs.webkit.org/show_bug.cgi?id=187726 is fixed.
|
||||
it('It does not add a timestamp to link tags with prefetch attribute', async () => {
|
||||
const browser = await webdriver(appPort, '/prefetch')
|
||||
const links = await browser.elementsByCss('link[rel=prefetch]')
|
||||
await Promise.all(
|
||||
links.map(async element => {
|
||||
const href = await element.getAttribute('href')
|
||||
expect(href).not.toMatch(/\?ts=/)
|
||||
})
|
||||
)
|
||||
const scripts = await browser.elementsByCss('script[src]')
|
||||
await Promise.all(
|
||||
scripts.map(async element => {
|
||||
const src = await element.getAttribute('src')
|
||||
expect(src).not.toMatch(/\?ts=/)
|
||||
})
|
||||
)
|
||||
await browser.close()
|
||||
})
|
||||
for (const element of elements) {
|
||||
const rel = await element.getAttribute('rel')
|
||||
const as = await element.getAttribute('as')
|
||||
expect(rel).toBe('prefetch')
|
||||
expect(as).toBe('script')
|
||||
}
|
||||
}
|
||||
await browser.close()
|
||||
})
|
||||
|
||||
// This is a workaround to fix https://github.com/zeit/next.js/issues/5860
|
||||
// TODO: remove this workaround when https://bugs.webkit.org/show_bug.cgi?id=187726 is fixed.
|
||||
it('It does not add a timestamp to link tags with prefetch attribute', async () => {
|
||||
const browser = await webdriver(appPort, '/prefetch')
|
||||
const links = await browser.elementsByCss('link[rel=prefetch]')
|
||||
|
||||
for (const element of links) {
|
||||
const href = await element.getAttribute('href')
|
||||
expect(href).not.toMatch(/\?ts=/)
|
||||
}
|
||||
const scripts = await browser.elementsByCss('script[src]')
|
||||
|
||||
for (const element of scripts) {
|
||||
const src = await element.getAttribute('src')
|
||||
expect(src).not.toMatch(/\?ts=/)
|
||||
}
|
||||
await browser.close()
|
||||
})
|
||||
|
||||
if (browserName === 'chrome') {
|
||||
it('should reload the page on page script error with prefetch', async () => {
|
||||
const browser = await webdriver(appPort, '/counter')
|
||||
if (global.browserName !== 'chrome') return
|
||||
|
|
|
@ -1,72 +1,10 @@
|
|||
// my-custom-environment
|
||||
const wd = require('wd')
|
||||
const os = require('os')
|
||||
const http = require('http')
|
||||
const fetch = require('node-fetch')
|
||||
const getPort = require('get-port')
|
||||
const waitPort = require('wait-port')
|
||||
const chromedriver = require('chromedriver')
|
||||
const seleniumServer = require('selenium-standalone')
|
||||
const NodeEnvironment = require('jest-environment-node')
|
||||
const {
|
||||
BROWSER_NAME,
|
||||
BROWSERSTACK,
|
||||
BROWSERSTACK_USERNAME,
|
||||
BROWSERSTACK_ACCESS_KEY,
|
||||
} = process.env
|
||||
|
||||
let browser
|
||||
let initialWindow
|
||||
let browserOptions = {
|
||||
browserName: BROWSER_NAME || 'chrome',
|
||||
...(process.env.HEADLESS === 'true'
|
||||
? {
|
||||
chromeOptions: { args: ['--headless'] },
|
||||
}
|
||||
: {}),
|
||||
}
|
||||
let deviceIP = 'localhost'
|
||||
let driverPort = '9515'
|
||||
|
||||
const isIE = BROWSER_NAME === 'ie'
|
||||
const isSafari = BROWSER_NAME === 'safari'
|
||||
const isFirefox = BROWSER_NAME === 'firefox'
|
||||
// 30 seconds for BrowserStack 5 seconds for local
|
||||
const isBrowserStack =
|
||||
BROWSERSTACK && BROWSERSTACK_USERNAME && BROWSERSTACK_ACCESS_KEY
|
||||
const browserTimeout = (isBrowserStack ? 30 : 5) * 1000
|
||||
|
||||
if (isBrowserStack) {
|
||||
const safariOpts = {
|
||||
os: 'OS X',
|
||||
os_version: 'Mojave',
|
||||
browser: 'Safari',
|
||||
}
|
||||
const ieOpts = {
|
||||
os: 'Windows',
|
||||
os_version: '10',
|
||||
browser: 'IE',
|
||||
}
|
||||
const firefoxOpts = {
|
||||
os: 'Windows',
|
||||
os_version: '10',
|
||||
browser: 'Firefox',
|
||||
}
|
||||
const sharedOpts = {
|
||||
'browserstack.local': true,
|
||||
'browserstack.video': false,
|
||||
'browserstack.localIdentifier':
|
||||
global.browserStackLocal.localIdentifierFlag,
|
||||
}
|
||||
|
||||
browserOptions = {
|
||||
...browserOptions,
|
||||
...sharedOpts,
|
||||
|
||||
...(isIE ? ieOpts : {}),
|
||||
...(isSafari ? safariOpts : {}),
|
||||
...(isFirefox ? firefoxOpts : {}),
|
||||
}
|
||||
}
|
||||
const { BROWSER_NAME: browserName = 'chrome' } = process.env
|
||||
|
||||
const newTabPg = `
|
||||
<!DOCTYPE html>
|
||||
|
@ -81,160 +19,66 @@ const newTabPg = `
|
|||
`
|
||||
|
||||
class CustomEnvironment extends NodeEnvironment {
|
||||
async createBrowser() {
|
||||
// always create new browser session if not BrowserStack
|
||||
if (!browser) {
|
||||
if (!isBrowserStack) {
|
||||
driverPort = await getPort()
|
||||
chromedriver.start([`--port=${driverPort}`])
|
||||
|
||||
// https://github.com/giggio/node-chromedriver/issues/117
|
||||
await waitPort({
|
||||
port: driverPort,
|
||||
timeout: 1000 * 60 * 2, // 2 Minutes
|
||||
})
|
||||
}
|
||||
|
||||
browser = wd.promiseChainRemote(
|
||||
...(isBrowserStack
|
||||
? [
|
||||
'hub-cloud.browserstack.com', // seleniumHost
|
||||
80, // seleniumPort
|
||||
BROWSERSTACK_USERNAME,
|
||||
BROWSERSTACK_ACCESS_KEY,
|
||||
]
|
||||
: [`http://localhost:${driverPort}`])
|
||||
)
|
||||
|
||||
// Setup the browser instance
|
||||
await browser.init(browserOptions)
|
||||
initialWindow = await browser.windowHandle()
|
||||
}
|
||||
|
||||
// disable browser.close and we handle it manually
|
||||
browser.origClose = browser.close
|
||||
browser.close = () => {}
|
||||
async setup() {
|
||||
await super.setup()
|
||||
// Since ie11 doesn't like dataURIs we have to spin up a
|
||||
// server to handle the new tab page
|
||||
this.server = http.createServer((req, res) => {
|
||||
res.statusCode = 200
|
||||
res.end(newTabPg)
|
||||
})
|
||||
this.newTabPort = await getPort()
|
||||
const newTabPort = await getPort()
|
||||
|
||||
await new Promise((resolve, reject) => {
|
||||
this.server.listen(this.newTabPort, err => {
|
||||
this.server.listen(newTabPort, err => {
|
||||
if (err) return reject(err)
|
||||
resolve()
|
||||
})
|
||||
})
|
||||
|
||||
if (isBrowserStack) {
|
||||
const networkIntfs = os.networkInterfaces()
|
||||
// find deviceIP to use with BrowserStack
|
||||
for (const intf of Object.keys(networkIntfs)) {
|
||||
const addresses = networkIntfs[intf]
|
||||
let seleniumServerPort
|
||||
|
||||
for (const { internal, address, family } of addresses) {
|
||||
if (family !== 'IPv4' || internal) continue
|
||||
try {
|
||||
const res = await fetch(`http://${address}:${this.newTabPort}`)
|
||||
if (res.ok) {
|
||||
deviceIP = address
|
||||
break
|
||||
}
|
||||
} catch (_) {}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
this.global.browserName = browserOptions.browserName
|
||||
|
||||
// Mock current browser set up
|
||||
this.global.sharedWD = async (appPort, pathname) => {
|
||||
const url = `http://${deviceIP}:${appPort}${pathname}`
|
||||
console.log(`\n> Loading browser with ${url}\n`)
|
||||
await this.freshWindow()
|
||||
|
||||
return new Promise((resolve, reject) => {
|
||||
let timedOut = false
|
||||
const timeoutHandler = setTimeout(() => {
|
||||
timedOut = true
|
||||
reject(new Error(`Loading browser with ${url} timed out`))
|
||||
}, browserTimeout)
|
||||
|
||||
browser.get(url, err => {
|
||||
if (browserName !== 'chrome') {
|
||||
console.log('Installing selenium server')
|
||||
await new Promise((resolve, reject) => {
|
||||
seleniumServer.install(err => {
|
||||
if (err) return reject(err)
|
||||
clearTimeout(timeoutHandler)
|
||||
if (!timedOut) resolve(browser)
|
||||
resolve()
|
||||
})
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
async freshWindow(tries = 0) {
|
||||
if (tries > 3) throw new Error('failed to get fresh browser window')
|
||||
// Since we need a fresh start for each window
|
||||
// we have to force a new tab which can be disposed
|
||||
const startWindows = await browser.windowHandles()
|
||||
|
||||
// let's close all windows that aren't the initial window
|
||||
for (const window of startWindows) {
|
||||
if (!window || window === initialWindow) continue
|
||||
try {
|
||||
await browser.window(window)
|
||||
await browser.origClose()
|
||||
} catch (_) {
|
||||
/* should already be closed */
|
||||
}
|
||||
}
|
||||
// focus initial window
|
||||
await browser.window(initialWindow)
|
||||
const newTabUrl = `http://${deviceIP}:${this.newTabPort}/`
|
||||
|
||||
// load html to open new tab
|
||||
if ((await browser.url()) !== newTabUrl) {
|
||||
await browser.get(newTabUrl)
|
||||
}
|
||||
// click new tab link
|
||||
await browser.elementByCss('#new').click()
|
||||
|
||||
// focus fresh window
|
||||
const newWindows = await browser.windowHandles()
|
||||
try {
|
||||
await browser.window(
|
||||
newWindows.find(win => {
|
||||
if (win && win !== initialWindow && startWindows.indexOf(win) < 0) {
|
||||
return win
|
||||
}
|
||||
return false
|
||||
console.log('Starting selenium server')
|
||||
await new Promise((resolve, reject) => {
|
||||
seleniumServer.start((err, child) => {
|
||||
if (err) return reject(err)
|
||||
this.seleniumServer = child
|
||||
resolve()
|
||||
})
|
||||
)
|
||||
} catch (err) {
|
||||
await this.freshWindow(tries + 1)
|
||||
})
|
||||
console.log('Started selenium server')
|
||||
seleniumServerPort = 4444
|
||||
}
|
||||
}
|
||||
|
||||
async setup() {
|
||||
await super.setup()
|
||||
await this.createBrowser()
|
||||
this.global.wd = null
|
||||
this.global._newTabPort = newTabPort
|
||||
this.global.browserName = browserName
|
||||
this.global.seleniumServerPort = seleniumServerPort
|
||||
this.global.browserStackLocalId = global.browserStackLocalId
|
||||
}
|
||||
|
||||
async teardown() {
|
||||
await super.teardown()
|
||||
if (this.server) this.server.close()
|
||||
if (browser) {
|
||||
// Close all remaining browser windows
|
||||
try {
|
||||
const windows = await browser.windowHandles()
|
||||
for (const window of windows) {
|
||||
if (!window) continue
|
||||
await browser.window(window)
|
||||
await browser.origClose()
|
||||
await browser.quit()
|
||||
}
|
||||
} catch (_) {}
|
||||
|
||||
if (this.server) {
|
||||
this.server.close()
|
||||
}
|
||||
if (this.global.wd) {
|
||||
await this.global.wd.quit()
|
||||
}
|
||||
// must come after wd.quit()
|
||||
if (this.seleniumServer) {
|
||||
this.seleniumServer.kill()
|
||||
}
|
||||
chromedriver.stop()
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -8,6 +8,7 @@ if (process.env.BROWSERSTACK) {
|
|||
localIdentifier: new Date().getTime(), // Adding a unique local identifier to run parallel tests on BrowserStack
|
||||
}
|
||||
global.browserStackLocal = browserStackLocal
|
||||
global.browserStackLocalId = localBrowserStackOpts.localIdentifier
|
||||
|
||||
globalSetup = () => {
|
||||
return new Promise((resolve, reject) => {
|
||||
|
|
|
@ -1 +1,314 @@
|
|||
export default global.sharedWD
|
||||
import os from 'os'
|
||||
import path from 'path'
|
||||
import fetch from 'node-fetch'
|
||||
import { until, Builder, By } from 'selenium-webdriver'
|
||||
import { Options as ChromeOptions } from 'selenium-webdriver/chrome'
|
||||
import { Options as SafariOptions } from 'selenium-webdriver/safari'
|
||||
import { Options as FireFoxOptions } from 'selenium-webdriver/firefox'
|
||||
|
||||
const {
|
||||
BROWSER_NAME: browserName = 'chrome',
|
||||
BROWSERSTACK,
|
||||
BROWSERSTACK_USERNAME,
|
||||
BROWSERSTACK_ACCESS_KEY,
|
||||
HEADLESS,
|
||||
CHROME_BIN,
|
||||
} = process.env
|
||||
|
||||
let capabilities = {}
|
||||
|
||||
const isChrome = browserName === 'chrome'
|
||||
const isSafari = browserName === 'safari'
|
||||
const isFirefox = browserName === 'firefox'
|
||||
const isIE = browserName === 'internet explorer'
|
||||
|
||||
if (process.env.ChromeWebDriver) {
|
||||
process.env.PATH = `${process.env.ChromeWebDriver}${path.delimiter}${process.env.PATH}`
|
||||
}
|
||||
|
||||
const isBrowserStack =
|
||||
BROWSERSTACK && BROWSERSTACK_USERNAME && BROWSERSTACK_ACCESS_KEY
|
||||
|
||||
if (isBrowserStack) {
|
||||
const safariOpts = {
|
||||
os: 'OS X',
|
||||
os_version: 'Mojave',
|
||||
browser: 'Safari',
|
||||
}
|
||||
const ieOpts = {
|
||||
os: 'Windows',
|
||||
os_version: '10',
|
||||
browser: 'IE',
|
||||
}
|
||||
const firefoxOpts = {
|
||||
os: 'Windows',
|
||||
os_version: '10',
|
||||
browser: 'Firefox',
|
||||
}
|
||||
const sharedOpts = {
|
||||
'browserstack.local': true,
|
||||
'browserstack.video': false,
|
||||
'browserstack.user': BROWSERSTACK_USERNAME,
|
||||
'browserstack.key': BROWSERSTACK_ACCESS_KEY,
|
||||
'browserstack.localIdentifier': global.browserStackLocalId,
|
||||
}
|
||||
|
||||
capabilities = {
|
||||
...capabilities,
|
||||
...sharedOpts,
|
||||
|
||||
...(isIE ? ieOpts : {}),
|
||||
...(isSafari ? safariOpts : {}),
|
||||
...(isFirefox ? firefoxOpts : {}),
|
||||
}
|
||||
}
|
||||
|
||||
let chromeOptions = new ChromeOptions()
|
||||
let firefoxOptions = new FireFoxOptions()
|
||||
let safariOptions = new SafariOptions()
|
||||
|
||||
if (HEADLESS) {
|
||||
const screenSize = { width: 1280, height: 720 }
|
||||
chromeOptions = chromeOptions.headless().windowSize(screenSize)
|
||||
firefoxOptions = firefoxOptions.headless().windowSize(screenSize)
|
||||
}
|
||||
|
||||
if (CHROME_BIN) {
|
||||
chromeOptions = chromeOptions.setChromeBinaryPath(path.resolve(CHROME_BIN))
|
||||
}
|
||||
|
||||
let seleniumServer
|
||||
|
||||
if (isBrowserStack) {
|
||||
seleniumServer = 'http://hub-cloud.browserstack.com/wd/hub'
|
||||
} else if (global.seleniumServerPort) {
|
||||
seleniumServer = `http://localhost:${global.seleniumServerPort}/wd/hub`
|
||||
}
|
||||
|
||||
let browser = new Builder()
|
||||
.usingServer(seleniumServer)
|
||||
.withCapabilities(capabilities)
|
||||
.forBrowser(browserName)
|
||||
.setChromeOptions(chromeOptions)
|
||||
.setFirefoxOptions(firefoxOptions)
|
||||
.setSafariOptions(safariOptions)
|
||||
.build()
|
||||
|
||||
global.wd = browser
|
||||
|
||||
/*
|
||||
# Methods to match
|
||||
|
||||
- elementByCss
|
||||
- elementsByCss
|
||||
- waitForElementByCss
|
||||
- elementByCss.text
|
||||
- elementByCss.click
|
||||
*/
|
||||
|
||||
let initialWindow
|
||||
let deviceIP = 'localhost'
|
||||
|
||||
const getDeviceIP = async () => {
|
||||
const networkIntfs = os.networkInterfaces()
|
||||
// find deviceIP to use with BrowserStack
|
||||
for (const intf of Object.keys(networkIntfs)) {
|
||||
const addresses = networkIntfs[intf]
|
||||
|
||||
for (const { internal, address, family } of addresses) {
|
||||
if (family !== 'IPv4' || internal) continue
|
||||
try {
|
||||
const res = await fetch(`http://${address}:${global._newTabPort}`)
|
||||
if (res.ok) {
|
||||
deviceIP = address
|
||||
break
|
||||
}
|
||||
} catch (_) {}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// eslint-disable-next-line no-unused-vars
|
||||
const freshWindow = async () => {
|
||||
// First we close all extra windows left over
|
||||
let allWindows = await browser.getAllWindowHandles()
|
||||
|
||||
for (const win of allWindows) {
|
||||
if (win === initialWindow) continue
|
||||
try {
|
||||
await browser.switchTo().window(win)
|
||||
await browser.close()
|
||||
} catch (_) {}
|
||||
}
|
||||
await browser.switchTo().window(initialWindow)
|
||||
|
||||
// now we open a fresh window
|
||||
await browser.get(`http://${deviceIP}:${global._newTabPort}`)
|
||||
|
||||
const newTabLink = await browser.findElement(By.css('#new'))
|
||||
await newTabLink.click()
|
||||
|
||||
allWindows = await browser.getAllWindowHandles()
|
||||
const newWindow = allWindows.find(win => win !== initialWindow)
|
||||
await browser.switchTo().window(newWindow)
|
||||
}
|
||||
|
||||
export default async (appPort, path) => {
|
||||
if (!initialWindow) {
|
||||
initialWindow = await browser.getWindowHandle()
|
||||
}
|
||||
if (isBrowserStack && deviceIP === 'localhost') {
|
||||
await getDeviceIP()
|
||||
}
|
||||
// browser.switchTo().window() fails with `missing field `handle``
|
||||
// in safari and firefox so disabling freshWindow since our
|
||||
// tests shouldn't rely on it
|
||||
if (isChrome) {
|
||||
await freshWindow()
|
||||
}
|
||||
|
||||
const url = `http://${deviceIP}:${appPort}${path}`
|
||||
console.log(`\n> Loading browser with ${url}\n`)
|
||||
|
||||
await browser.get(url)
|
||||
console.log(`\n> Loaded browser with ${url}\n`)
|
||||
|
||||
class Chain {
|
||||
updateChain(nextCall) {
|
||||
if (!this.promise) {
|
||||
this.promise = Promise.resolve()
|
||||
}
|
||||
this.promise = this.promise.then(nextCall)
|
||||
this.then = cb => this.promise.then(cb)
|
||||
this.catch = cb => this.promise.catch(cb)
|
||||
this.finally = cb => this.promise.finally(cb)
|
||||
return this
|
||||
}
|
||||
|
||||
elementByCss(sel) {
|
||||
return this.updateChain(() =>
|
||||
browser.findElement(By.css(sel)).then(el => {
|
||||
el.sel = sel
|
||||
el.text = () => el.getText()
|
||||
el.getComputedCss = prop => el.getCssValue(prop)
|
||||
el.type = text => el.sendKeys(text)
|
||||
el.getValue = () =>
|
||||
browser.executeScript(
|
||||
`return document.querySelector('${sel}').value`
|
||||
)
|
||||
return el
|
||||
})
|
||||
)
|
||||
}
|
||||
|
||||
elementById(sel) {
|
||||
return this.elementByCss(`#${sel}`)
|
||||
}
|
||||
|
||||
getValue() {
|
||||
return this.updateChain(el =>
|
||||
browser.executeScript(
|
||||
`return document.querySelector('${el.sel}').value`
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
text() {
|
||||
return this.updateChain(el => el.getText())
|
||||
}
|
||||
|
||||
type(text) {
|
||||
return this.updateChain(el => el.sendKeys(text))
|
||||
}
|
||||
|
||||
moveTo() {
|
||||
return this.updateChain(el => {
|
||||
return browser
|
||||
.actions()
|
||||
.move({ origin: el })
|
||||
.perform()
|
||||
.then(() => el)
|
||||
})
|
||||
}
|
||||
|
||||
getComputedCss(prop) {
|
||||
return this.updateChain(el => {
|
||||
return el.getCssValue(prop)
|
||||
})
|
||||
}
|
||||
|
||||
getAttribute(attr) {
|
||||
return this.updateChain(el => el.getAttribute(attr))
|
||||
}
|
||||
|
||||
hasElementByCssSelector(sel) {
|
||||
return this.eval(`document.querySelector('${sel}')`)
|
||||
}
|
||||
|
||||
click() {
|
||||
return this.updateChain(el => {
|
||||
return el.click().then(() => el)
|
||||
})
|
||||
}
|
||||
|
||||
elementsByCss(sel) {
|
||||
return this.updateChain(() => browser.findElements(By.css(sel)))
|
||||
}
|
||||
|
||||
waitForElementByCss(sel, timeout) {
|
||||
return this.updateChain(() =>
|
||||
browser.wait(until.elementLocated(By.css(sel), timeout))
|
||||
)
|
||||
}
|
||||
|
||||
eval(snippet) {
|
||||
if (typeof snippet === 'string' && !snippet.startsWith('return')) {
|
||||
snippet = `return ${snippet}`
|
||||
}
|
||||
return this.updateChain(() => browser.executeScript(snippet))
|
||||
}
|
||||
|
||||
log(type) {
|
||||
return this.updateChain(() =>
|
||||
browser
|
||||
.manage()
|
||||
.logs()
|
||||
.get(type)
|
||||
)
|
||||
}
|
||||
|
||||
url() {
|
||||
return this.updateChain(() => browser.getCurrentUrl())
|
||||
}
|
||||
|
||||
back() {
|
||||
return this.updateChain(() => browser.navigate().back())
|
||||
}
|
||||
|
||||
forward() {
|
||||
return this.updateChain(() => browser.navigate().forward())
|
||||
}
|
||||
|
||||
refresh() {
|
||||
return this.updateChain(() => browser.navigate().refresh())
|
||||
}
|
||||
|
||||
close() {
|
||||
return this.updateChain(() => Promise.resolve())
|
||||
}
|
||||
quit() {
|
||||
return this.close()
|
||||
}
|
||||
}
|
||||
|
||||
const promiseProp = new Set(['then', 'catch', 'finally'])
|
||||
|
||||
return new Proxy(new Chain(), {
|
||||
get(obj, prop) {
|
||||
if (obj[prop] || promiseProp.has(prop)) {
|
||||
return obj[prop]
|
||||
}
|
||||
return browser[prop]
|
||||
},
|
||||
})
|
||||
}
|
||||
|
|
529
yarn.lock
529
yarn.lock
|
@ -3366,13 +3366,6 @@ amphtml-validator@1.0.23:
|
|||
commander "2.9.0"
|
||||
promise "7.1.1"
|
||||
|
||||
ansi-colors@^1.0.1:
|
||||
version "1.1.0"
|
||||
resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-1.1.0.tgz#6374b4dd5d4718ff3ce27a671a3b1cad077132a9"
|
||||
integrity sha512-SFKX67auSNoVR38N3L+nvsPjOE0bybKTYbkf5tRvushrAPQ9V75huw0ZxBkKVeRU9kqH3d6HA4xTckbwZ4ixmA==
|
||||
dependencies:
|
||||
ansi-wrap "^0.1.0"
|
||||
|
||||
ansi-colors@^3.0.0:
|
||||
version "3.2.4"
|
||||
resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-3.2.4.tgz#e3a3da4bfbae6c86a9c285625de124a234026fbf"
|
||||
|
@ -3390,13 +3383,6 @@ ansi-escapes@^4.2.1:
|
|||
dependencies:
|
||||
type-fest "^0.5.2"
|
||||
|
||||
ansi-gray@^0.1.1:
|
||||
version "0.1.1"
|
||||
resolved "https://registry.yarnpkg.com/ansi-gray/-/ansi-gray-0.1.1.tgz#2962cf54ec9792c48510a3deb524436861ef7251"
|
||||
integrity sha1-KWLPVOyXksSFEKPetSRDaGHvclE=
|
||||
dependencies:
|
||||
ansi-wrap "0.1.0"
|
||||
|
||||
ansi-html@0.0.7:
|
||||
version "0.0.7"
|
||||
resolved "https://registry.yarnpkg.com/ansi-html/-/ansi-html-0.0.7.tgz#813584021962a9e9e6fd039f940d12f56ca7859e"
|
||||
|
@ -3429,11 +3415,6 @@ ansi-styles@^3.2.0, ansi-styles@^3.2.1:
|
|||
dependencies:
|
||||
color-convert "^1.9.0"
|
||||
|
||||
ansi-wrap@0.1.0, ansi-wrap@^0.1.0:
|
||||
version "0.1.0"
|
||||
resolved "https://registry.yarnpkg.com/ansi-wrap/-/ansi-wrap-0.1.0.tgz#a82250ddb0015e9a27ca82e82ea603bbfa45efaf"
|
||||
integrity sha1-qCJQ3bABXponyoLoLqYDu/pF768=
|
||||
|
||||
any-observable@^0.3.0:
|
||||
version "0.3.0"
|
||||
resolved "https://registry.yarnpkg.com/any-observable/-/any-observable-0.3.0.tgz#af933475e5806a67d0d7df090dd5e8bef65d119b"
|
||||
|
@ -3473,35 +3454,6 @@ aproba@^2.0.0:
|
|||
resolved "https://registry.yarnpkg.com/aproba/-/aproba-2.0.0.tgz#52520b8ae5b569215b354efc0caa3fe1e45a8adc"
|
||||
integrity sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==
|
||||
|
||||
archiver-utils@^2.1.0:
|
||||
version "2.1.0"
|
||||
resolved "https://registry.yarnpkg.com/archiver-utils/-/archiver-utils-2.1.0.tgz#e8a460e94b693c3e3da182a098ca6285ba9249e2"
|
||||
integrity sha512-bEL/yUb/fNNiNTuUz979Z0Yg5L+LzLxGJz8x79lYmR54fmTIb6ob/hNQgkQnIUDWIFjZVQwl9Xs356I6BAMHfw==
|
||||
dependencies:
|
||||
glob "^7.1.4"
|
||||
graceful-fs "^4.2.0"
|
||||
lazystream "^1.0.0"
|
||||
lodash.defaults "^4.2.0"
|
||||
lodash.difference "^4.5.0"
|
||||
lodash.flatten "^4.4.0"
|
||||
lodash.isplainobject "^4.0.6"
|
||||
lodash.union "^4.6.0"
|
||||
normalize-path "^3.0.0"
|
||||
readable-stream "^2.0.0"
|
||||
|
||||
archiver@^3.0.0:
|
||||
version "3.1.1"
|
||||
resolved "https://registry.yarnpkg.com/archiver/-/archiver-3.1.1.tgz#9db7819d4daf60aec10fe86b16cb9258ced66ea0"
|
||||
integrity sha512-5Hxxcig7gw5Jod/8Gq0OneVgLYET+oNHcxgWItq4TbhOzRLKNAFUb9edAftiMKXvXfCB0vbGrJdZDNq0dWMsxg==
|
||||
dependencies:
|
||||
archiver-utils "^2.1.0"
|
||||
async "^2.6.3"
|
||||
buffer-crc32 "^0.2.1"
|
||||
glob "^7.1.4"
|
||||
readable-stream "^3.4.0"
|
||||
tar-stream "^2.1.0"
|
||||
zip-stream "^2.1.2"
|
||||
|
||||
are-we-there-yet@~1.1.2:
|
||||
version "1.1.5"
|
||||
resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz#4b35c2944f062a8bfcda66410760350fe9ddfc21"
|
||||
|
@ -3725,14 +3677,14 @@ async-sema@3.0.1:
|
|||
resolved "https://registry.yarnpkg.com/async-sema/-/async-sema-3.0.1.tgz#404225197ea43e3be91ac7d711fb7088f2469c79"
|
||||
integrity sha512-fKT2riE8EHAvJEfLJXZiATQWqZttjx1+tfgnVshCDrH8vlw4YC8aECe0B8MU184g+aVRFVgmfxFlKZKaozSrNw==
|
||||
|
||||
async@^2.0.0, async@^2.1.5:
|
||||
async@^2.1.5:
|
||||
version "2.6.2"
|
||||
resolved "https://registry.yarnpkg.com/async/-/async-2.6.2.tgz#18330ea7e6e313887f5d2f2a904bac6fe4dd5381"
|
||||
integrity sha512-H1qVYh1MYhEEFLsP97cVKqCGo7KfCyTt6uEWqsTBr9SO84oK9Uwbyd/yCW+6rKJLHksBNUVWZDAjfS+Ccx0Bbg==
|
||||
dependencies:
|
||||
lodash "^4.17.11"
|
||||
|
||||
async@^2.6.3:
|
||||
async@^2.6.2:
|
||||
version "2.6.3"
|
||||
resolved "https://registry.yarnpkg.com/async/-/async-2.6.3.tgz#d72625e2344a3656e3a3ad4fa749fa83299d82ff"
|
||||
integrity sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==
|
||||
|
@ -3987,12 +3939,13 @@ binary-extensions@^2.0.0:
|
|||
resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.0.0.tgz#23c0df14f6a88077f5f986c0d167ec03c3d5537c"
|
||||
integrity sha512-Phlt0plgpIIBOGTT/ehfFnbNlfsDEiqmzE2KRXoX1bLIlir4X/MR+zSyBEkL05ffWgnRSf/DXv+WrUAVr93/ow==
|
||||
|
||||
bl@^3.0.0:
|
||||
version "3.0.0"
|
||||
resolved "https://registry.yarnpkg.com/bl/-/bl-3.0.0.tgz#3611ec00579fd18561754360b21e9f784500ff88"
|
||||
integrity sha512-EUAyP5UHU5hxF8BPT0LKW8gjYLhq1DQIcneOX/pL/m2Alo+OYDQAJlHq+yseMP50Os2nHXOSic6Ss3vSQeyf4A==
|
||||
bl@^2.2.0:
|
||||
version "2.2.0"
|
||||
resolved "https://registry.yarnpkg.com/bl/-/bl-2.2.0.tgz#e1a574cdf528e4053019bb800b041c0ac88da493"
|
||||
integrity sha512-wbgvOpqopSr7uq6fJrLH8EsvYMJf9gzfo2jCsL2eTy75qXPukA4pCgHamOQkZtY5vmfVtjB+P3LNlMHW5CEZXA==
|
||||
dependencies:
|
||||
readable-stream "^3.0.1"
|
||||
readable-stream "^2.3.5"
|
||||
safe-buffer "^5.1.1"
|
||||
|
||||
block-stream@*:
|
||||
version "0.0.9"
|
||||
|
@ -4108,11 +4061,6 @@ browser-resolve@^1.11.3:
|
|||
dependencies:
|
||||
resolve "1.1.7"
|
||||
|
||||
browser-stdout@1.3.1:
|
||||
version "1.3.1"
|
||||
resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60"
|
||||
integrity sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==
|
||||
|
||||
browserify-aes@^1.0.0, browserify-aes@^1.0.4:
|
||||
version "1.2.0"
|
||||
resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48"
|
||||
|
@ -4204,7 +4152,7 @@ btoa-lite@^1.0.0:
|
|||
resolved "https://registry.yarnpkg.com/btoa-lite/-/btoa-lite-1.0.0.tgz#337766da15801210fdd956c22e9c6891ab9d0337"
|
||||
integrity sha1-M3dm2hWAEhD92VbCLpxokaudAzc=
|
||||
|
||||
buffer-crc32@^0.2.1, buffer-crc32@^0.2.13:
|
||||
buffer-crc32@~0.2.3:
|
||||
version "0.2.13"
|
||||
resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242"
|
||||
integrity sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=
|
||||
|
@ -4233,14 +4181,6 @@ buffer@^4.3.0:
|
|||
ieee754 "^1.1.4"
|
||||
isarray "^1.0.0"
|
||||
|
||||
buffer@^5.1.0:
|
||||
version "5.2.1"
|
||||
resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.2.1.tgz#dd57fa0f109ac59c602479044dca7b8b3d0b71d6"
|
||||
integrity sha512-c+Ko0loDaFfuPWiL02ls9Xd3GO3cPVmUobQ6t3rXNUk304u6hGq+8N/kFi+QEIKhzK3uwolVhLzszmfLmMLnqg==
|
||||
dependencies:
|
||||
base64-js "^1.0.2"
|
||||
ieee754 "^1.1.4"
|
||||
|
||||
builtin-status-codes@^3.0.0:
|
||||
version "3.0.0"
|
||||
resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8"
|
||||
|
@ -4660,17 +4600,6 @@ chrome-trace-event@^1.0.2:
|
|||
dependencies:
|
||||
tslib "^1.9.0"
|
||||
|
||||
chromedriver@78.0.1:
|
||||
version "78.0.1"
|
||||
resolved "https://registry.yarnpkg.com/chromedriver/-/chromedriver-78.0.1.tgz#2db3425a2cba6fcaf1a41d9538b16c3d06fa74a8"
|
||||
integrity sha512-eOsyFk4xb9EECs1VMrDbxO713qN+Bu1XUE8K9AuePc3839TPdAegg72kpXSzkeNqRNZiHbnJUItIVCLFkDqceA==
|
||||
dependencies:
|
||||
del "^4.1.1"
|
||||
extract-zip "^1.6.7"
|
||||
mkdirp "^0.5.1"
|
||||
request "^2.88.0"
|
||||
tcp-port-used "^1.0.1"
|
||||
|
||||
ci-info@2.0.0, ci-info@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46"
|
||||
|
@ -4865,11 +4794,6 @@ color-string@^1.5.2:
|
|||
color-name "^1.0.0"
|
||||
simple-swizzle "^0.2.2"
|
||||
|
||||
color-support@^1.1.3:
|
||||
version "1.1.3"
|
||||
resolved "https://registry.yarnpkg.com/color-support/-/color-support-1.1.3.tgz#93834379a1cc9a0c61f82f52f0d04322251bd5a2"
|
||||
integrity sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==
|
||||
|
||||
color@^3.0.0:
|
||||
version "3.1.1"
|
||||
resolved "https://registry.yarnpkg.com/color/-/color-3.1.1.tgz#7abf5c0d38e89378284e873c207ae2172dcc8a61"
|
||||
|
@ -4903,11 +4827,6 @@ combined-stream@^1.0.6, combined-stream@~1.0.5, combined-stream@~1.0.6:
|
|||
dependencies:
|
||||
delayed-stream "~1.0.0"
|
||||
|
||||
commander@2.15.1:
|
||||
version "2.15.1"
|
||||
resolved "https://registry.yarnpkg.com/commander/-/commander-2.15.1.tgz#df46e867d0fc2aec66a34662b406a9ccafff5b0f"
|
||||
integrity sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==
|
||||
|
||||
commander@2.20.0, commander@^2.18.0, commander@^2.20.0, commander@^2.9.0, commander@~2.20.0:
|
||||
version "2.20.0"
|
||||
resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.0.tgz#d58bb2b5c1ee8f87b0d340027e9e94e222c5a422"
|
||||
|
@ -4920,6 +4839,11 @@ commander@2.9.0:
|
|||
dependencies:
|
||||
graceful-readlink ">= 1.0.0"
|
||||
|
||||
commander@^2.19.0:
|
||||
version "2.20.3"
|
||||
resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33"
|
||||
integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==
|
||||
|
||||
commondir@^1.0.1:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b"
|
||||
|
@ -4938,16 +4862,6 @@ component-emitter@^1.2.0, component-emitter@^1.2.1:
|
|||
resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0"
|
||||
integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==
|
||||
|
||||
compress-commons@^2.1.1:
|
||||
version "2.1.1"
|
||||
resolved "https://registry.yarnpkg.com/compress-commons/-/compress-commons-2.1.1.tgz#9410d9a534cf8435e3fbbb7c6ce48de2dc2f0610"
|
||||
integrity sha512-eVw6n7CnEMFzc3duyFVrQEuY1BlHR3rYsSztyG32ibGMW722i3C6IizEGMFmfMU+A+fALvBIwxN3czffTcdA+Q==
|
||||
dependencies:
|
||||
buffer-crc32 "^0.2.13"
|
||||
crc32-stream "^3.0.1"
|
||||
normalize-path "^3.0.0"
|
||||
readable-stream "^2.3.6"
|
||||
|
||||
compressible@~2.0.16:
|
||||
version "2.0.17"
|
||||
resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.17.tgz#6e8c108a16ad58384a977f3a482ca20bff2f38c1"
|
||||
|
@ -4973,7 +4887,7 @@ concat-map@0.0.1:
|
|||
resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
|
||||
integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=
|
||||
|
||||
concat-stream@1.6.2, concat-stream@^1.4.7, concat-stream@^1.5.0:
|
||||
concat-stream@^1.4.7, concat-stream@^1.5.0:
|
||||
version "1.6.2"
|
||||
resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34"
|
||||
integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==
|
||||
|
@ -5279,21 +5193,6 @@ cpy@7.3.0:
|
|||
globby "^9.2.0"
|
||||
nested-error-stacks "^2.1.0"
|
||||
|
||||
crc32-stream@^3.0.1:
|
||||
version "3.0.1"
|
||||
resolved "https://registry.yarnpkg.com/crc32-stream/-/crc32-stream-3.0.1.tgz#cae6eeed003b0e44d739d279de5ae63b171b4e85"
|
||||
integrity sha512-mctvpXlbzsvK+6z8kJwSJ5crm7yBwrQMTybJzMw1O4lLGJqjlDCXY2Zw7KheiA6XBEcBmfLx1D88mjRGVJtY9w==
|
||||
dependencies:
|
||||
crc "^3.4.4"
|
||||
readable-stream "^3.4.0"
|
||||
|
||||
crc@^3.4.4:
|
||||
version "3.8.0"
|
||||
resolved "https://registry.yarnpkg.com/crc/-/crc-3.8.0.tgz#ad60269c2c856f8c299e2c4cc0de4556914056c6"
|
||||
integrity sha512-iX3mfgcTMIq3ZKLIsVFAbv7+Mc10kxabAGQb8HvjA1o3T1PIYprbakQ65d3I+2HGHt6nSKkM9PYjgoJO2KcFBQ==
|
||||
dependencies:
|
||||
buffer "^5.1.0"
|
||||
|
||||
create-ecdh@^4.0.0:
|
||||
version "4.0.3"
|
||||
resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.3.tgz#c9111b6f33045c4697f144787f9254cdc77c45ff"
|
||||
|
@ -5325,6 +5224,13 @@ create-hmac@^1.1.0, create-hmac@^1.1.2, create-hmac@^1.1.4:
|
|||
safe-buffer "^5.0.1"
|
||||
sha.js "^2.4.8"
|
||||
|
||||
cross-env@6.0.3:
|
||||
version "6.0.3"
|
||||
resolved "https://registry.yarnpkg.com/cross-env/-/cross-env-6.0.3.tgz#4256b71e49b3a40637a0ce70768a6ef5c72ae941"
|
||||
integrity sha512-+KqxF6LCvfhWvADcDPqo64yVIB31gv/jQulX2NGzKS/g3GEVz6/pt4wjHFtFWsHMddebWD/sDthJemzM4MaAag==
|
||||
dependencies:
|
||||
cross-spawn "^7.0.0"
|
||||
|
||||
cross-spawn@6.0.5, cross-spawn@^6.0.0, cross-spawn@^6.0.5:
|
||||
version "6.0.5"
|
||||
resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4"
|
||||
|
@ -5698,11 +5604,6 @@ dargs@^4.0.1:
|
|||
dependencies:
|
||||
number-is-nan "^1.0.0"
|
||||
|
||||
dargs@^5.1.0:
|
||||
version "5.1.0"
|
||||
resolved "https://registry.yarnpkg.com/dargs/-/dargs-5.1.0.tgz#ec7ea50c78564cd36c9d5ec18f66329fade27829"
|
||||
integrity sha1-7H6lDHhWTNNsnV7Bj2Yyn63ieCk=
|
||||
|
||||
dashdash@^1.12.0:
|
||||
version "1.14.1"
|
||||
resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0"
|
||||
|
@ -5748,13 +5649,6 @@ debug@3.1.0:
|
|||
dependencies:
|
||||
ms "2.0.0"
|
||||
|
||||
debug@4.1.0:
|
||||
version "4.1.0"
|
||||
resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.0.tgz#373687bffa678b38b1cd91f861b63850035ddc87"
|
||||
integrity sha512-heNPJUJIqC+xB6ayLAMHaIrmN9HKa7aQO8MGqKpvCA+uJYVcvR6l5kgdrhRuwPFHU7P5/A1w0BjByPHwpfTDKg==
|
||||
dependencies:
|
||||
ms "^2.1.1"
|
||||
|
||||
debug@^3.1.0, debug@^3.2.6:
|
||||
version "3.2.6"
|
||||
resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b"
|
||||
|
@ -5814,7 +5708,7 @@ deep-extend@^0.6.0:
|
|||
resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac"
|
||||
integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==
|
||||
|
||||
deep-is@^0.1.3, deep-is@~0.1.3:
|
||||
deep-is@~0.1.3:
|
||||
version "0.1.3"
|
||||
resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34"
|
||||
integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=
|
||||
|
@ -5877,19 +5771,6 @@ del@^3.0.0:
|
|||
pify "^3.0.0"
|
||||
rimraf "^2.2.8"
|
||||
|
||||
del@^4.1.1:
|
||||
version "4.1.1"
|
||||
resolved "https://registry.yarnpkg.com/del/-/del-4.1.1.tgz#9e8f117222ea44a31ff3a156c049b99052a9f0b4"
|
||||
integrity sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ==
|
||||
dependencies:
|
||||
"@types/glob" "^7.1.1"
|
||||
globby "^6.1.0"
|
||||
is-path-cwd "^2.0.0"
|
||||
is-path-in-cwd "^2.0.0"
|
||||
p-map "^2.0.0"
|
||||
pify "^4.0.1"
|
||||
rimraf "^2.6.3"
|
||||
|
||||
del@^5.0.0:
|
||||
version "5.1.0"
|
||||
resolved "https://registry.yarnpkg.com/del/-/del-5.1.0.tgz#d9487c94e367410e6eff2925ee58c0c84a75b3a7"
|
||||
|
@ -5977,11 +5858,6 @@ diff-sequences@^24.9.0:
|
|||
resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-24.9.0.tgz#5715d6244e2aa65f48bba0bc972db0b0b11e95b5"
|
||||
integrity sha512-Dj6Wk3tWyTE+Fo1rW8v0Xhwk80um6yFYKbuAxc9c3EZxIHFDYwbi34Uk42u1CdnIiVorvt4RmlSDjIPyzGC2ew==
|
||||
|
||||
diff@3.5.0:
|
||||
version "3.5.0"
|
||||
resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12"
|
||||
integrity sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==
|
||||
|
||||
diffie-hellman@^5.0.0:
|
||||
version "5.0.3"
|
||||
resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875"
|
||||
|
@ -6196,13 +6072,20 @@ encoding@^0.1.11:
|
|||
dependencies:
|
||||
iconv-lite "~0.4.13"
|
||||
|
||||
end-of-stream@^1.0.0, end-of-stream@^1.1.0, end-of-stream@^1.4.1:
|
||||
end-of-stream@^1.0.0, end-of-stream@^1.1.0:
|
||||
version "1.4.1"
|
||||
resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.1.tgz#ed29634d19baba463b6ce6b80a37213eab71ec43"
|
||||
integrity sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==
|
||||
dependencies:
|
||||
once "^1.4.0"
|
||||
|
||||
end-of-stream@^1.4.1:
|
||||
version "1.4.4"
|
||||
resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0"
|
||||
integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==
|
||||
dependencies:
|
||||
once "^1.4.0"
|
||||
|
||||
enhanced-resolve@^4.1.0:
|
||||
version "4.1.0"
|
||||
resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.1.0.tgz#41c7e0bfdfe74ac1ffe1e57ad6a5c6c9f3742a7f"
|
||||
|
@ -6330,16 +6213,16 @@ escape-html@~1.0.3:
|
|||
resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988"
|
||||
integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=
|
||||
|
||||
escape-string-regexp@1.0.5, escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5:
|
||||
version "1.0.5"
|
||||
resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
|
||||
integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=
|
||||
|
||||
escape-string-regexp@2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344"
|
||||
integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==
|
||||
|
||||
escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5:
|
||||
version "1.0.5"
|
||||
resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
|
||||
integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=
|
||||
|
||||
escodegen@^1.9.1:
|
||||
version "1.11.1"
|
||||
resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.11.1.tgz#c485ff8d6b4cdb89e27f4a856e91f118401ca510"
|
||||
|
@ -6552,19 +6435,6 @@ execa@2.0.3:
|
|||
signal-exit "^3.0.2"
|
||||
strip-final-newline "^2.0.0"
|
||||
|
||||
execa@^0.10.0:
|
||||
version "0.10.0"
|
||||
resolved "https://registry.yarnpkg.com/execa/-/execa-0.10.0.tgz#ff456a8f53f90f8eccc71a96d11bdfc7f082cb50"
|
||||
integrity sha512-7XOMnz8Ynx1gGo/3hyV9loYNPWM94jG3+3T3Y8tsfSstFmETmENCMU/A/zj8Lyaj1lkgEepKepvd6240tBRvlw==
|
||||
dependencies:
|
||||
cross-spawn "^6.0.0"
|
||||
get-stream "^3.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@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8"
|
||||
|
@ -6750,16 +6620,6 @@ extract-css-chunks-webpack-plugin@^3.2.0:
|
|||
schema-utils "^1.0.0"
|
||||
webpack-sources "^1.1.0"
|
||||
|
||||
extract-zip@^1.6.7:
|
||||
version "1.6.7"
|
||||
resolved "https://registry.yarnpkg.com/extract-zip/-/extract-zip-1.6.7.tgz#a840b4b8af6403264c8db57f4f1a74333ef81fe9"
|
||||
integrity sha1-qEC0uK9kAyZMjbV/Txp0Mz74H+k=
|
||||
dependencies:
|
||||
concat-stream "1.6.2"
|
||||
debug "2.6.9"
|
||||
mkdirp "0.5.1"
|
||||
yauzl "2.4.1"
|
||||
|
||||
extracted-loader@1.0.4:
|
||||
version "1.0.4"
|
||||
resolved "https://registry.yarnpkg.com/extracted-loader/-/extracted-loader-1.0.4.tgz#e1a3f1791813c14091a1959e261e23e95dd90115"
|
||||
|
@ -6775,16 +6635,6 @@ extsprintf@^1.2.0:
|
|||
resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f"
|
||||
integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8=
|
||||
|
||||
fancy-log@^1.3.3:
|
||||
version "1.3.3"
|
||||
resolved "https://registry.yarnpkg.com/fancy-log/-/fancy-log-1.3.3.tgz#dbc19154f558690150a23953a0adbd035be45fc7"
|
||||
integrity sha512-k9oEhlyc0FrVh25qYuSELjr8oxsCoc4/LEZfg2iJJrfEk/tZL9bCoJE47gqAvI2m/AUjluCS4+3I0eTx8n3AEw==
|
||||
dependencies:
|
||||
ansi-gray "^0.1.1"
|
||||
color-support "^1.1.3"
|
||||
parse-node-version "^1.0.0"
|
||||
time-stamp "^1.0.0"
|
||||
|
||||
fast-deep-equal@^1.0.0:
|
||||
version "1.1.0"
|
||||
resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz#c053477817c86b51daa853c81e059b733d023614"
|
||||
|
@ -6867,10 +6717,10 @@ fb-watchman@^2.0.0:
|
|||
dependencies:
|
||||
bser "^2.0.0"
|
||||
|
||||
fd-slicer@~1.0.1:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/fd-slicer/-/fd-slicer-1.0.1.tgz#8b5bcbd9ec327c5041bf9ab023fd6750f1177e65"
|
||||
integrity sha1-i1vL2ewyfFBBv5qwI/1nUPEXfmU=
|
||||
fd-slicer@~1.1.0:
|
||||
version "1.1.0"
|
||||
resolved "https://registry.yarnpkg.com/fd-slicer/-/fd-slicer-1.1.0.tgz#25c7c89cb1f9077f8891bbe61d8f390eae256f1e"
|
||||
integrity sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=
|
||||
dependencies:
|
||||
pend "~1.2.0"
|
||||
|
||||
|
@ -7542,18 +7392,6 @@ glob-to-regexp@^0.4.1:
|
|||
resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e"
|
||||
integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==
|
||||
|
||||
glob@7.1.2:
|
||||
version "7.1.2"
|
||||
resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15"
|
||||
integrity sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==
|
||||
dependencies:
|
||||
fs.realpath "^1.0.0"
|
||||
inflight "^1.0.4"
|
||||
inherits "2"
|
||||
minimatch "^3.0.4"
|
||||
once "^1.3.0"
|
||||
path-is-absolute "^1.0.0"
|
||||
|
||||
glob@^7.0.0, glob@^7.0.3, glob@^7.0.5, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@~7.1.1:
|
||||
version "7.1.4"
|
||||
resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.4.tgz#aa608a2f6c577ad357e1ae5a5c26d9a8d1969255"
|
||||
|
@ -7707,7 +7545,7 @@ graceful-fs@^4.2.2:
|
|||
resolved "https://registry.yarnpkg.com/graceful-readlink/-/graceful-readlink-1.0.1.tgz#4cafad76bc62f02fa039b2f94e9a3dd3a391a725"
|
||||
integrity sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=
|
||||
|
||||
growl@1.10.5, "growl@~> 1.10.0":
|
||||
"growl@~> 1.10.0":
|
||||
version "1.10.5"
|
||||
resolved "https://registry.yarnpkg.com/growl/-/growl-1.10.5.tgz#f2735dc2283674fa67478b10181059355c369e5e"
|
||||
integrity sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==
|
||||
|
@ -7728,19 +7566,6 @@ grpc@1.22.2:
|
|||
node-pre-gyp "^0.13.0"
|
||||
protobufjs "^5.0.3"
|
||||
|
||||
gulp-mocha@^6.0.0:
|
||||
version "6.0.0"
|
||||
resolved "https://registry.yarnpkg.com/gulp-mocha/-/gulp-mocha-6.0.0.tgz#80f32bc705ce30747f355ddb8ccd96a1c73bef13"
|
||||
integrity sha512-FfBldW5ttnDpKf4Sg6/BLOOKCCbr5mbixDGK1t02/8oSrTCwNhgN/mdszG3cuQuYNzuouUdw4EH/mlYtgUscPg==
|
||||
dependencies:
|
||||
dargs "^5.1.0"
|
||||
execa "^0.10.0"
|
||||
mocha "^5.2.0"
|
||||
npm-run-path "^2.0.2"
|
||||
plugin-error "^1.0.1"
|
||||
supports-color "^5.4.0"
|
||||
through2 "^2.0.3"
|
||||
|
||||
gzip-size@5.1.1, gzip-size@^5.0.0:
|
||||
version "5.1.1"
|
||||
resolved "https://registry.yarnpkg.com/gzip-size/-/gzip-size-5.1.1.tgz#cb9bee692f87c0612b232840a873904e4c135274"
|
||||
|
@ -7889,11 +7714,6 @@ hawk@~6.0.2:
|
|||
hoek "4.x.x"
|
||||
sntp "2.x.x"
|
||||
|
||||
he@1.1.1:
|
||||
version "1.1.1"
|
||||
resolved "https://registry.yarnpkg.com/he/-/he-1.1.1.tgz#93410fd21b009735151f8868c2f271f3427e23fd"
|
||||
integrity sha1-k0EP0hsAlzUVH4howvJx80J+I/0=
|
||||
|
||||
header-case@^1.0.0:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/header-case/-/header-case-1.0.1.tgz#9535973197c144b09613cd65d317ef19963bd02d"
|
||||
|
@ -8116,6 +7936,11 @@ ignore@^5.1.1:
|
|||
resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.4.tgz#84b7b3dbe64552b6ef0eca99f6743dbec6d97adf"
|
||||
integrity sha512-MzbUSahkTW1u7JpKKjY7LCARd1fU5W2rLdxlM4kdkayuCwZImjkpluF9CM1aLewYJguPDqewLam18Y6AU69A8A==
|
||||
|
||||
immediate@~3.0.5:
|
||||
version "3.0.6"
|
||||
resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.0.6.tgz#9db1dbd0faf8de6fbe0f5dd5e56bb606280de69b"
|
||||
integrity sha1-nbHb0Pr43m++D13V5Wu2BigN5ps=
|
||||
|
||||
import-cwd@^2.0.0:
|
||||
version "2.1.0"
|
||||
resolved "https://registry.yarnpkg.com/import-cwd/-/import-cwd-2.1.0.tgz#aa6cf36e722761285cb371ec6519f53e2435b0a9"
|
||||
|
@ -8631,7 +8456,7 @@ is-path-cwd@^1.0.0:
|
|||
resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-1.0.0.tgz#d225ec23132e89edd38fda767472e62e65f1106d"
|
||||
integrity sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=
|
||||
|
||||
is-path-cwd@^2.0.0, is-path-cwd@^2.2.0:
|
||||
is-path-cwd@^2.2.0:
|
||||
version "2.2.0"
|
||||
resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-2.2.0.tgz#67d43b82664a7b5191fd9119127eb300048a9fdb"
|
||||
integrity sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==
|
||||
|
@ -8643,13 +8468,6 @@ is-path-in-cwd@^1.0.0:
|
|||
dependencies:
|
||||
is-path-inside "^1.0.0"
|
||||
|
||||
is-path-in-cwd@^2.0.0:
|
||||
version "2.1.0"
|
||||
resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz#bfe2dca26c69f397265a4009963602935a053acb"
|
||||
integrity sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ==
|
||||
dependencies:
|
||||
is-path-inside "^2.1.0"
|
||||
|
||||
is-path-inside@^1.0.0:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-1.0.1.tgz#8ef5b7de50437a3fdca6b4e865ef7aa55cb48036"
|
||||
|
@ -8657,13 +8475,6 @@ is-path-inside@^1.0.0:
|
|||
dependencies:
|
||||
path-is-inside "^1.0.1"
|
||||
|
||||
is-path-inside@^2.1.0:
|
||||
version "2.1.0"
|
||||
resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-2.1.0.tgz#7c9810587d659a40d27bcdb4d5616eab059494b2"
|
||||
integrity sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg==
|
||||
dependencies:
|
||||
path-is-inside "^1.0.2"
|
||||
|
||||
is-path-inside@^3.0.1:
|
||||
version "3.0.2"
|
||||
resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.2.tgz#f5220fc82a3e233757291dddc9c5877f2a1f3017"
|
||||
|
@ -8780,11 +8591,6 @@ is-upper-case@^1.1.0:
|
|||
dependencies:
|
||||
upper-case "^1.1.0"
|
||||
|
||||
is-url@^1.2.2:
|
||||
version "1.2.4"
|
||||
resolved "https://registry.yarnpkg.com/is-url/-/is-url-1.2.4.tgz#04a4df46d28c4cff3d73d01ff06abeb318a1aa52"
|
||||
integrity sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==
|
||||
|
||||
is-utf8@^0.2.0:
|
||||
version "0.2.1"
|
||||
resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72"
|
||||
|
@ -8820,15 +8626,6 @@ is-wsl@^1.1.0:
|
|||
resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d"
|
||||
integrity sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=
|
||||
|
||||
is2@2.0.1:
|
||||
version "2.0.1"
|
||||
resolved "https://registry.yarnpkg.com/is2/-/is2-2.0.1.tgz#8ac355644840921ce435d94f05d3a94634d3481a"
|
||||
integrity sha512-+WaJvnaA7aJySz2q/8sLjMb2Mw14KTplHmSwcSpZ/fWJPkUmqw3YTzSWbPJ7OAwRvdYTWF2Wg+yYJ1AdP5Z8CA==
|
||||
dependencies:
|
||||
deep-is "^0.1.3"
|
||||
ip-regex "^2.1.0"
|
||||
is-url "^1.2.2"
|
||||
|
||||
isarray@0.0.1:
|
||||
version "0.0.1"
|
||||
resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf"
|
||||
|
@ -9465,6 +9262,16 @@ jsx-ast-utils@^2.2.1:
|
|||
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"
|
||||
integrity sha512-NmKajvAFQpbg3taXQXr/ccS2wcucR1AZ+NtyWp2Nq7HHVsXhcJFR8p0Baf32C2yVvBylFWVeKf+WI2AnvlPhpA==
|
||||
dependencies:
|
||||
lie "~3.3.0"
|
||||
pako "~1.0.2"
|
||||
readable-stream "~2.3.6"
|
||||
set-immediate-shim "~1.0.1"
|
||||
|
||||
keyv@^3.0.0:
|
||||
version "3.1.0"
|
||||
resolved "https://registry.yarnpkg.com/keyv/-/keyv-3.1.0.tgz#ecc228486f69991e49e9476485a5be1e8fc5c4d9"
|
||||
|
@ -9534,13 +9341,6 @@ lazy-cache@^1.0.4:
|
|||
resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-1.0.4.tgz#a1d78fc3a50474cb80845d3b3b6e1da49a446e8e"
|
||||
integrity sha1-odePw6UEdMuAhF07O24dpJpEbo4=
|
||||
|
||||
lazystream@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/lazystream/-/lazystream-1.0.0.tgz#f6995fe0f820392f61396be89462407bb77168e4"
|
||||
integrity sha1-9plf4PggOS9hOWvolGJAe7dxaOQ=
|
||||
dependencies:
|
||||
readable-stream "^2.0.5"
|
||||
|
||||
lcid@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835"
|
||||
|
@ -9631,6 +9431,13 @@ libnpmpublish@^1.1.1:
|
|||
semver "^5.5.1"
|
||||
ssri "^6.0.1"
|
||||
|
||||
lie@~3.3.0:
|
||||
version "3.3.0"
|
||||
resolved "https://registry.yarnpkg.com/lie/-/lie-3.3.0.tgz#dcf82dee545f46074daf200c7c1c5a08e0f40f6a"
|
||||
integrity sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==
|
||||
dependencies:
|
||||
immediate "~3.0.5"
|
||||
|
||||
limit-spawn@0.0.3:
|
||||
version "0.0.3"
|
||||
resolved "https://registry.yarnpkg.com/limit-spawn/-/limit-spawn-0.0.3.tgz#cc09c24467a0f0a1ed10a5196dba597cad3f65dc"
|
||||
|
@ -9803,22 +9610,17 @@ lodash.curry@4.1.1:
|
|||
resolved "https://registry.yarnpkg.com/lodash.curry/-/lodash.curry-4.1.1.tgz#248e36072ede906501d75966200a86dab8b23170"
|
||||
integrity sha1-JI42By7ekGUB11lmIAqG2riyMXA=
|
||||
|
||||
lodash.defaults@^4.0.1, lodash.defaults@^4.2.0:
|
||||
lodash.defaults@^4.0.1:
|
||||
version "4.2.0"
|
||||
resolved "https://registry.yarnpkg.com/lodash.defaults/-/lodash.defaults-4.2.0.tgz#d09178716ffea4dde9e5fb7b37f6f0802274580c"
|
||||
integrity sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw=
|
||||
|
||||
lodash.difference@^4.5.0:
|
||||
version "4.5.0"
|
||||
resolved "https://registry.yarnpkg.com/lodash.difference/-/lodash.difference-4.5.0.tgz#9ccb4e505d486b91651345772885a2df27fd017c"
|
||||
integrity sha1-nMtOUF1Ia5FlE0V3KIWi3yf9AXw=
|
||||
|
||||
lodash.filter@^4.4.0:
|
||||
version "4.6.0"
|
||||
resolved "https://registry.yarnpkg.com/lodash.filter/-/lodash.filter-4.6.0.tgz#668b1d4981603ae1cc5a6fa760143e480b4c4ace"
|
||||
integrity sha1-ZosdSYFgOuHMWm+nYBQ+SAtMSs4=
|
||||
|
||||
lodash.flatten@^4.2.0, lodash.flatten@^4.4.0:
|
||||
lodash.flatten@^4.2.0:
|
||||
version "4.4.0"
|
||||
resolved "https://registry.yarnpkg.com/lodash.flatten/-/lodash.flatten-4.4.0.tgz#f31c22225a9632d2bbf8e4addbef240aa765a61f"
|
||||
integrity sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8=
|
||||
|
@ -9838,11 +9640,6 @@ lodash.ismatch@^4.4.0:
|
|||
resolved "https://registry.yarnpkg.com/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz#756cb5150ca3ba6f11085a78849645f188f85f37"
|
||||
integrity sha1-dWy1FQyjum8RCFp4hJZF8Yj4Xzc=
|
||||
|
||||
lodash.isplainobject@^4.0.6:
|
||||
version "4.0.6"
|
||||
resolved "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb"
|
||||
integrity sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=
|
||||
|
||||
lodash.map@^4.4.0:
|
||||
version "4.6.0"
|
||||
resolved "https://registry.yarnpkg.com/lodash.map/-/lodash.map-4.6.0.tgz#771ec7839e3473d9c4cde28b19394c3562f4f6d3"
|
||||
|
@ -9926,11 +9723,6 @@ lodash.unescape@4.0.1:
|
|||
resolved "https://registry.yarnpkg.com/lodash.unescape/-/lodash.unescape-4.0.1.tgz#bf2249886ce514cda112fae9218cdc065211fc9c"
|
||||
integrity sha1-vyJJiGzlFM2hEvrpIYzcBlIR/Jw=
|
||||
|
||||
lodash.union@^4.6.0:
|
||||
version "4.6.0"
|
||||
resolved "https://registry.yarnpkg.com/lodash.union/-/lodash.union-4.6.0.tgz#48bb5088409f16f1821666641c44dd1aaae3cd88"
|
||||
integrity sha1-SLtQiECfFvGCFmZkHETdGqrjzYg=
|
||||
|
||||
lodash.uniq@^4.5.0:
|
||||
version "4.5.0"
|
||||
resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773"
|
||||
|
@ -10414,7 +10206,7 @@ minimalistic-crypto-utils@^1.0.0, minimalistic-crypto-utils@^1.0.1:
|
|||
resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a"
|
||||
integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=
|
||||
|
||||
minimatch@3.0.4, minimatch@^3.0.0, minimatch@^3.0.4, minimatch@~3.0.2:
|
||||
minimatch@^3.0.0, minimatch@^3.0.4, minimatch@~3.0.2:
|
||||
version "3.0.4"
|
||||
resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083"
|
||||
integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==
|
||||
|
@ -10503,23 +10295,6 @@ mkdirp@0.5.1, "mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.0, mkd
|
|||
dependencies:
|
||||
minimist "0.0.8"
|
||||
|
||||
mocha@^5.2.0:
|
||||
version "5.2.0"
|
||||
resolved "https://registry.yarnpkg.com/mocha/-/mocha-5.2.0.tgz#6d8ae508f59167f940f2b5b3c4a612ae50c90ae6"
|
||||
integrity sha512-2IUgKDhc3J7Uug+FxMXuqIyYzH7gJjXECKe/w43IGgQHTSj3InJi+yAA7T24L9bQMRKiUEHxEX37G5JpVUGLcQ==
|
||||
dependencies:
|
||||
browser-stdout "1.3.1"
|
||||
commander "2.15.1"
|
||||
debug "3.1.0"
|
||||
diff "3.5.0"
|
||||
escape-string-regexp "1.0.5"
|
||||
glob "7.1.2"
|
||||
growl "1.10.5"
|
||||
he "1.1.1"
|
||||
minimatch "3.0.4"
|
||||
mkdirp "0.5.1"
|
||||
supports-color "5.4.0"
|
||||
|
||||
modify-values@^1.0.0:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/modify-values/-/modify-values-1.0.1.tgz#b3939fa605546474e3e3e3c63d64bd43b4ee6022"
|
||||
|
@ -10999,7 +10774,7 @@ npm-run-all@4.1.5:
|
|||
shell-quote "^1.6.1"
|
||||
string.prototype.padend "^3.0.0"
|
||||
|
||||
npm-run-path@^2.0.0, npm-run-path@^2.0.2:
|
||||
npm-run-path@^2.0.0:
|
||||
version "2.0.2"
|
||||
resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f"
|
||||
integrity sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=
|
||||
|
@ -11327,7 +11102,7 @@ os-shim@^0.1.2:
|
|||
resolved "https://registry.yarnpkg.com/os-shim/-/os-shim-0.1.3.tgz#6b62c3791cf7909ea35ed46e17658bb417cb3917"
|
||||
integrity sha1-a2LDeRz3kJ6jXtRuF2WLtBfLORc=
|
||||
|
||||
os-tmpdir@^1.0.0, os-tmpdir@~1.0.2:
|
||||
os-tmpdir@^1.0.0, os-tmpdir@~1.0.1, os-tmpdir@~1.0.2:
|
||||
version "1.0.2"
|
||||
resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274"
|
||||
integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=
|
||||
|
@ -11510,7 +11285,7 @@ pacote@^9.5.0:
|
|||
unique-filename "^1.1.1"
|
||||
which "^1.3.1"
|
||||
|
||||
pako@~1.0.5:
|
||||
pako@~1.0.2, pako@~1.0.5:
|
||||
version "1.0.10"
|
||||
resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.10.tgz#4328badb5086a426aa90f541977d4955da5c9732"
|
||||
integrity sha512-0DTvPVU3ed8+HNXOu5Bs+o//Mbdj9VNQMUOe9oKCwh8l0GNwpTDMKCWbRjgtD291AWnkAgkqA/LOnQS8AmS1tw==
|
||||
|
@ -11607,11 +11382,6 @@ parse-json@^4.0.0:
|
|||
error-ex "^1.3.1"
|
||||
json-parse-better-errors "^1.0.1"
|
||||
|
||||
parse-node-version@^1.0.0:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/parse-node-version/-/parse-node-version-1.0.1.tgz#e2b5dbede00e7fa9bc363607f53327e8b073189b"
|
||||
integrity sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==
|
||||
|
||||
parse-passwd@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6"
|
||||
|
@ -11709,7 +11479,7 @@ path-is-absolute@^1.0.0:
|
|||
resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
|
||||
integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18=
|
||||
|
||||
path-is-inside@^1.0.1, path-is-inside@^1.0.2:
|
||||
path-is-inside@^1.0.1:
|
||||
version "1.0.2"
|
||||
resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53"
|
||||
integrity sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=
|
||||
|
@ -11888,16 +11658,6 @@ please-upgrade-node@^3.1.1:
|
|||
dependencies:
|
||||
semver-compare "^1.0.0"
|
||||
|
||||
plugin-error@^1.0.1:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/plugin-error/-/plugin-error-1.0.1.tgz#77016bd8919d0ac377fdcdd0322328953ca5781c"
|
||||
integrity sha512-L1zP0dk7vGweZME2i+EeakvUNqSrdiI3F91TwEoYiGrAfUXmVv6fJIq4g82PAXxNsWOp0J7ZqQy/3Szz0ajTxA==
|
||||
dependencies:
|
||||
ansi-colors "^1.0.1"
|
||||
arr-diff "^4.0.0"
|
||||
arr-union "^3.1.0"
|
||||
extend-shallow "^3.0.2"
|
||||
|
||||
pn@^1.1.0:
|
||||
version "1.1.0"
|
||||
resolved "https://registry.yarnpkg.com/pn/-/pn-1.1.0.tgz#e2f4cef0e219f463c179ab37463e4e1ecdccbafb"
|
||||
|
@ -12732,7 +12492,7 @@ process@^0.11.10:
|
|||
resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182"
|
||||
integrity sha1-czIwDoQBYb2j5podHZGn1LwW8YI=
|
||||
|
||||
progress@^2.0.0:
|
||||
progress@2.0.3, progress@^2.0.0:
|
||||
version "2.0.3"
|
||||
resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8"
|
||||
integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==
|
||||
|
@ -13159,7 +12919,7 @@ read@1, read@~1.0.1:
|
|||
dependencies:
|
||||
mute-stream "~0.0.4"
|
||||
|
||||
"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.5, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.5, readable-stream@^2.3.6, readable-stream@~2.3.6:
|
||||
"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.5, readable-stream@^2.3.6, readable-stream@~2.3.6:
|
||||
version "2.3.6"
|
||||
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf"
|
||||
integrity sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==
|
||||
|
@ -13181,15 +12941,6 @@ read@1, read@~1.0.1:
|
|||
string_decoder "^1.1.1"
|
||||
util-deprecate "^1.0.1"
|
||||
|
||||
readable-stream@^3.0.1, readable-stream@^3.4.0:
|
||||
version "3.4.0"
|
||||
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.4.0.tgz#a51c26754658e0a3c21dbf59163bd45ba6f447fc"
|
||||
integrity sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ==
|
||||
dependencies:
|
||||
inherits "^2.0.3"
|
||||
string_decoder "^1.1.1"
|
||||
util-deprecate "^1.0.1"
|
||||
|
||||
readable-stream@~1.0.17:
|
||||
version "1.0.34"
|
||||
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.0.34.tgz#125820e34bc842d2f2aaafafe4c2916ee32c157c"
|
||||
|
@ -13823,7 +13574,7 @@ sass-loader@6.0.6:
|
|||
lodash.tail "^4.1.1"
|
||||
pify "^3.0.0"
|
||||
|
||||
sax@^1.2.4, sax@~1.2.4:
|
||||
sax@>=0.6.0, sax@^1.2.4, sax@~1.2.4:
|
||||
version "1.2.4"
|
||||
resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9"
|
||||
integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==
|
||||
|
@ -13869,6 +13620,35 @@ 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"
|
||||
integrity sha512-5PSnDHwMiq+OCiAGlhwQ8BM9xuwFfvBOZ7Tfbw+ifkTnOy0PWbZmI1B9gPGuyGHpbQ/3J3CzIK7BYwrQ7EjtWQ==
|
||||
dependencies:
|
||||
async "^2.6.2"
|
||||
commander "^2.19.0"
|
||||
cross-spawn "^6.0.5"
|
||||
debug "^4.1.1"
|
||||
lodash "^4.17.11"
|
||||
minimist "^1.2.0"
|
||||
mkdirp "^0.5.1"
|
||||
progress "2.0.3"
|
||||
request "2.88.0"
|
||||
tar-stream "2.0.0"
|
||||
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"
|
||||
integrity sha512-hktl3DSrhzM59yLhWzDGHIX9o56DvA+cVK7Dw6FcJR6qQ4CGzkaHeXQPcdrslkWMTeq0Ci9AmCxq0EMOvm2Rkg==
|
||||
dependencies:
|
||||
jszip "^3.1.5"
|
||||
rimraf "^2.6.3"
|
||||
tmp "0.0.30"
|
||||
xml2js "^0.4.19"
|
||||
|
||||
semver-compare@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/semver-compare/-/semver-compare-1.0.0.tgz#0dee216a1c941ab37e9efb1788f6afc5ff5537fc"
|
||||
|
@ -13946,6 +13726,11 @@ set-blocking@^2.0.0, set-blocking@~2.0.0:
|
|||
resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7"
|
||||
integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc=
|
||||
|
||||
set-immediate-shim@~1.0.1:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz#4b2b1b27eb808a9f8dcc481a58e5e56f599f3f61"
|
||||
integrity sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=
|
||||
|
||||
set-value@^0.4.3:
|
||||
version "0.4.3"
|
||||
resolved "https://registry.yarnpkg.com/set-value/-/set-value-0.4.3.tgz#7db08f9d3d22dc7f78e53af3c3bf4666ecdfccf1"
|
||||
|
@ -14660,13 +14445,6 @@ superagent@^3.8.1:
|
|||
qs "^6.5.1"
|
||||
readable-stream "^2.3.5"
|
||||
|
||||
supports-color@5.4.0:
|
||||
version "5.4.0"
|
||||
resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.4.0.tgz#1c6b337402c2137605efe19f10fec390f6faab54"
|
||||
integrity sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==
|
||||
dependencies:
|
||||
has-flag "^3.0.0"
|
||||
|
||||
supports-color@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7"
|
||||
|
@ -14779,12 +14557,12 @@ tapable@^1.0.0, tapable@^1.1.3:
|
|||
resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2"
|
||||
integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==
|
||||
|
||||
tar-stream@^2.1.0:
|
||||
version "2.1.0"
|
||||
resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-2.1.0.tgz#d1aaa3661f05b38b5acc9b7020efdca5179a2cc3"
|
||||
integrity sha512-+DAn4Nb4+gz6WZigRzKEZl1QuJVOLtAwwF+WUxy1fJ6X63CaGaUAxJRD2KEn1OMfcbCjySTYpNC6WmfQoIEOdw==
|
||||
tar-stream@2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-2.0.0.tgz#8829bbf83067bc0288a9089db49c56be395b6aea"
|
||||
integrity sha512-n2vtsWshZOVr/SY4KtslPoUlyNh06I2SGgAOCZmquCEjlbV/LjY2CY80rDtdQRHFOYXNlgBDo6Fr3ww2CWPOtA==
|
||||
dependencies:
|
||||
bl "^3.0.0"
|
||||
bl "^2.2.0"
|
||||
end-of-stream "^1.4.1"
|
||||
fs-constants "^1.0.0"
|
||||
inherits "^2.0.3"
|
||||
|
@ -14837,14 +14615,6 @@ taskr@1.1.0:
|
|||
mri "^1.1.0"
|
||||
tinydate "^1.0.0"
|
||||
|
||||
tcp-port-used@^1.0.1:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/tcp-port-used/-/tcp-port-used-1.0.1.tgz#46061078e2d38c73979a2c2c12b5a674e6689d70"
|
||||
integrity sha512-rwi5xJeU6utXoEIiMvVBMc9eJ2/ofzB+7nLOdnZuFTmNCLqRiQh2sMG9MqCxHU/69VC/Fwp5dV9306Qd54ll1Q==
|
||||
dependencies:
|
||||
debug "4.1.0"
|
||||
is2 "2.0.1"
|
||||
|
||||
temp-dir@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/temp-dir/-/temp-dir-1.0.0.tgz#0a7c0ea26d3a39afa7e0ebea9c1fc0bc4daa011d"
|
||||
|
@ -14943,7 +14713,7 @@ throat@^4.0.0:
|
|||
resolved "https://registry.yarnpkg.com/throat/-/throat-4.1.0.tgz#89037cbc92c56ab18926e6ba4cbb200e15672a6a"
|
||||
integrity sha1-iQN8vJLFarGJJua6TLsgDhVnKmo=
|
||||
|
||||
through2@^2.0.0, through2@^2.0.2, through2@^2.0.3:
|
||||
through2@^2.0.0, through2@^2.0.2:
|
||||
version "2.0.5"
|
||||
resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd"
|
||||
integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==
|
||||
|
@ -14971,11 +14741,6 @@ through@2, "through@>=2.2.7 <3", through@^2.3.4, through@^2.3.6, through@~2.3, t
|
|||
resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5"
|
||||
integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=
|
||||
|
||||
time-stamp@^1.0.0:
|
||||
version "1.1.0"
|
||||
resolved "https://registry.yarnpkg.com/time-stamp/-/time-stamp-1.1.0.tgz#764a5a11af50561921b133f3b44e618687e0f5c3"
|
||||
integrity sha1-dkpaEa9QVhkhsTPztE5hhofg9cM=
|
||||
|
||||
timed-out@^4.0.0:
|
||||
version "4.0.1"
|
||||
resolved "https://registry.yarnpkg.com/timed-out/-/timed-out-4.0.1.tgz#f32eacac5a175bea25d7fab565ab3ed8741ef56f"
|
||||
|
@ -15006,6 +14771,13 @@ title-case@^2.1.0:
|
|||
no-case "^2.2.0"
|
||||
upper-case "^1.0.3"
|
||||
|
||||
tmp@0.0.30:
|
||||
version "0.0.30"
|
||||
resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.30.tgz#72419d4a8be7d6ce75148fd8b324e593a711c2ed"
|
||||
integrity sha1-ckGdSovn1s51FI/YsyTlk6cRwu0=
|
||||
dependencies:
|
||||
os-tmpdir "~1.0.1"
|
||||
|
||||
tmp@^0.0.33:
|
||||
version "0.0.33"
|
||||
resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9"
|
||||
|
@ -15501,6 +15273,11 @@ uri-js@^4.2.2:
|
|||
dependencies:
|
||||
punycode "^2.1.0"
|
||||
|
||||
urijs@^1.19.1:
|
||||
version "1.19.2"
|
||||
resolved "https://registry.yarnpkg.com/urijs/-/urijs-1.19.2.tgz#f9be09f00c4c5134b7cb3cf475c1dd394526265a"
|
||||
integrity sha512-s/UIq9ap4JPZ7H1EB5ULo/aOUbWqfDi7FKzMC2Nz+0Si8GiT1rIEaprt8hy3Vy2Ex2aJPpOQv4P4DuOZ+K1c6w==
|
||||
|
||||
urix@^0.1.0:
|
||||
version "0.1.0"
|
||||
resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72"
|
||||
|
@ -15621,11 +15398,6 @@ validate-npm-package-name@3.0.0, validate-npm-package-name@^3.0.0:
|
|||
dependencies:
|
||||
builtins "^1.0.3"
|
||||
|
||||
vargs@^0.1.0:
|
||||
version "0.1.0"
|
||||
resolved "https://registry.yarnpkg.com/vargs/-/vargs-0.1.0.tgz#6b6184da6520cc3204ce1b407cac26d92609ebff"
|
||||
integrity sha1-a2GE2mUgzDIEzhtAfKwm2SYJ6/8=
|
||||
|
||||
vary@~1.1.2:
|
||||
version "1.1.2"
|
||||
resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc"
|
||||
|
@ -15720,21 +15492,6 @@ wcwidth@^1.0.0, wcwidth@^1.0.1:
|
|||
dependencies:
|
||||
defaults "^1.0.3"
|
||||
|
||||
wd@1.11.3:
|
||||
version "1.11.3"
|
||||
resolved "https://registry.yarnpkg.com/wd/-/wd-1.11.3.tgz#db228863e15648e0c1466df45b263fc30470dbc4"
|
||||
integrity sha512-doB7E6DDhis6sSCfWps9Uz0UBBPAySv1x96KH6klfHp8y89HvhqEq3c0O8LPZhG37egJULN0m7+M9t16xUTG0g==
|
||||
dependencies:
|
||||
archiver "^3.0.0"
|
||||
async "^2.0.0"
|
||||
fancy-log "^1.3.3"
|
||||
gulp-mocha "^6.0.0"
|
||||
lodash "^4.0.0"
|
||||
mkdirp "^0.5.1"
|
||||
q "^1.5.1"
|
||||
request "2.88.0"
|
||||
vargs "^0.1.0"
|
||||
|
||||
webidl-conversions@^4.0.2:
|
||||
version "4.0.2"
|
||||
resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad"
|
||||
|
@ -16094,6 +15851,20 @@ xml-name-validator@^3.0.0:
|
|||
resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a"
|
||||
integrity sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==
|
||||
|
||||
xml2js@^0.4.19:
|
||||
version "0.4.22"
|
||||
resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.4.22.tgz#4fa2d846ec803237de86f30aa9b5f70b6600de02"
|
||||
integrity sha512-MWTbxAQqclRSTnehWWe5nMKzI3VmJ8ltiJEco8akcC6j3miOhjjfzKum5sId+CWhfxdOs/1xauYr8/ZDBtQiRw==
|
||||
dependencies:
|
||||
sax ">=0.6.0"
|
||||
util.promisify "~1.0.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"
|
||||
integrity sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==
|
||||
|
||||
xmlhttprequest@1.8.0:
|
||||
version "1.8.0"
|
||||
resolved "https://registry.yarnpkg.com/xmlhttprequest/-/xmlhttprequest-1.8.0.tgz#67fe075c5c24fef39f9d65f5f7b7fe75171968fc"
|
||||
|
@ -16245,18 +16016,10 @@ yargs@^7.0.0:
|
|||
y18n "^3.2.1"
|
||||
yargs-parser "^5.0.0"
|
||||
|
||||
yauzl@2.4.1:
|
||||
version "2.4.1"
|
||||
resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.4.1.tgz#9528f442dab1b2284e58b4379bb194e22e0c4005"
|
||||
integrity sha1-lSj0QtqxsihOWLQ3m7GU4i4MQAU=
|
||||
yauzl@^2.10.0:
|
||||
version "2.10.0"
|
||||
resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.10.0.tgz#c7eb17c93e112cb1086fa6d8e51fb0667b79a5f9"
|
||||
integrity sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=
|
||||
dependencies:
|
||||
fd-slicer "~1.0.1"
|
||||
|
||||
zip-stream@^2.1.2:
|
||||
version "2.1.2"
|
||||
resolved "https://registry.yarnpkg.com/zip-stream/-/zip-stream-2.1.2.tgz#841efd23214b602ff49c497cba1a85d8b5fbc39c"
|
||||
integrity sha512-ykebHGa2+uzth/R4HZLkZh3XFJzivhVsjJt8bN3GvBzLaqqrUdRacu+c4QtnUgjkkQfsOuNE1JgLKMCPNmkKgg==
|
||||
dependencies:
|
||||
archiver-utils "^2.1.0"
|
||||
compress-commons "^2.1.1"
|
||||
readable-stream "^3.4.0"
|
||||
buffer-crc32 "~0.2.3"
|
||||
fd-slicer "~1.1.0"
|
||||
|
|
Loading…
Reference in a new issue