diff --git a/package.json b/package.json index f63e2fb..10ed325 100644 --- a/package.json +++ b/package.json @@ -48,7 +48,7 @@ }, "license": "AGPL-3.0-or-later", "dependencies": { - "@puppeteer/browsers": "^2.2.3", + "@puppeteer/browsers": "^2.4.0", "axios": "^1.7.2", "browserify": "^17.0.0", "camel-case": "^4.1.2", @@ -72,8 +72,8 @@ "pidtree": "^0.6.0", "pidusage": "^3.0.2", "prom-client": "^15.1.3", - "puppeteer": "^22.12.1", - "puppeteer-core": "^22.12.1", + "puppeteer": "^23.3.0", + "puppeteer-core": "^23.3.0", "puppeteer-intercept-and-modify-requests": "^1.3.1", "sdp-transform": "^2.14.2", "sprintf-js": "^1.1.3", diff --git a/scripts/peer-connection-stats.js b/scripts/peer-connection-stats.js index f58c7a7..0fc3690 100644 --- a/scripts/peer-connection-stats.js +++ b/scripts/peer-connection-stats.js @@ -605,9 +605,11 @@ window.collectPeerConnectionStats = async (raw = false, verbose = false) => { return { stats, - activePeerConnections, signalingHost, participantName: window.getParticipantName(), + activePeerConnections, + peerConnectionsCreated: webrtcperf.peerConnectionNextId, + peerConnectionsConnected: webrtcperf.peerConnectionsConnected, peerConnectionsDisconnected: webrtcperf.peerConnectionsDisconnected, peerConnectionsFailed: webrtcperf.peerConnectionsFailed, peerConnectionsClosed: webrtcperf.peerConnectionsClosed, diff --git a/scripts/peer-connection.js b/scripts/peer-connection.js index a69aa6a..d5e36c3 100644 --- a/scripts/peer-connection.js +++ b/scripts/peer-connection.js @@ -5,7 +5,7 @@ const timestampInsertableStreams = !!window.PARAMS?.timestampInsertableStreams const NativeRTCPeerConnection = window.RTCPeerConnection webrtcperf.peerConnectionNextId = 0 - +webrtcperf.peerConnectionsConnected = 0 webrtcperf.peerConnectionsDisconnected = 0 webrtcperf.peerConnectionsFailed = 0 webrtcperf.peerConnectionsClosed = 0 @@ -36,6 +36,10 @@ window.RTCPeerConnection = function (conf, options) { pc.addEventListener('connectionstatechange', () => { debug(`connectionState: ${pc.connectionState}`) switch (pc.connectionState) { + case 'connected': { + webrtcperf.peerConnectionsConnected++ + break + } case 'disconnected': { webrtcperf.peerConnectionsDisconnected++ break @@ -45,8 +49,10 @@ window.RTCPeerConnection = function (conf, options) { break } case 'closed': { - webrtcperf.peerConnectionsClosed++ - PeerConnections.delete(id) + if (PeerConnections.has(id)) { + PeerConnections.delete(id) + webrtcperf.peerConnectionsClosed++ + } break } } @@ -55,7 +61,10 @@ window.RTCPeerConnection = function (conf, options) { const closeNative = pc.close.bind(pc) pc.close = () => { debug('close') - PeerConnections.delete(id) + if (PeerConnections.has(id)) { + PeerConnections.delete(id) + webrtcperf.peerConnectionsClosed++ + } return closeNative() } diff --git a/src/config.ts b/src/config.ts index 84d8c49..b477a8c 100644 --- a/src/config.ts +++ b/src/config.ts @@ -243,7 +243,7 @@ to be included into the random selection.`, path is not provided.`, format: String, nullable: false, - default: puppeteer.default.browserRevision, + default: puppeteer.PUPPETEER_REVISIONS.chrome, env: 'CHROMIUM_VERSION', arg: 'chromium-version', }, diff --git a/src/rtcstats.ts b/src/rtcstats.ts index e589557..59021b4 100644 --- a/src/rtcstats.ts +++ b/src/rtcstats.ts @@ -29,6 +29,10 @@ export enum PageStatsNames { pages = 'pages', /** The current opened PeerConnections. */ peerConnections = 'peerConnections', + /** The total created PeerConnections. */ + peerConnectionsCreated = 'peerConnectionsCreated', + /** The total connected PeerConnections. */ + peerConnectionsConnected = 'peerConnectionsConnected', /** The total closed PeerConnections. */ peerConnectionsClosed = 'peerConnectionsClosed', /** The total disconnected PeerConnections. */ diff --git a/src/session.ts b/src/session.ts index 3f1537a..3e40a8f 100644 --- a/src/session.ts +++ b/src/session.ts @@ -59,6 +59,8 @@ declare global { signalingHost?: string participantName?: string activePeerConnections: number + peerConnectionsCreated: number + peerConnectionsConnected: number peerConnectionsDisconnected: number peerConnectionsFailed: number peerConnectionsClosed: number @@ -629,7 +631,6 @@ export class Session extends EventEmitter { try { this.browser = await puppeteer.connect({ browserURL: this.chromiumUrl, - ignoreHTTPSErrors: true, defaultViewport: { width: this.windowWidth, height: this.windowHeight, @@ -695,19 +696,20 @@ exec sg ${group} -c /tmp/webrtcperf-launcher-${mark}-browser`, ignoreDefaultArgs.push('--enable-automation') } - log.debug(`Using args:\n ${args.join('\n ')}`) - log.debug(`Default args:\n ${puppeteer.defaultArgs().join('\n ')}`) + log.debug(`[session ${this.id}] Using args:\n ${args.join('\n ')}`) + log.debug( + `[session ${this.id}] Default args:\n ${puppeteer.defaultArgs().join('\n ')}`, + ) try { - // log.debug('defaultArgs:', puppeteer.defaultArgs()); this.browser = await puppeteer.launch({ + browser: 'chrome', headless: this.display ? false : true, executablePath, handleSIGINT: false, env, dumpio: this.enableBrowserLogging, // devtools: true, - ignoreHTTPSErrors: true, defaultViewport: { width: this.windowWidth, height: this.windowHeight, @@ -719,8 +721,8 @@ exec sg ${group} -c /tmp/webrtcperf-launcher-${mark}-browser`, ignoreDefaultArgs, args, }) - // const version = await this.browser.version(); - // console.log(`[session ${this.id}] Using chrome version: ${version}`); + const version = await this.browser.version() + log.debug(`[session ${this.id}] Using chrome version: ${version}`) } catch (err) { log.error( `[session ${this.id}] Browser launch error: ${(err as Error).stack}`, @@ -1537,7 +1539,9 @@ window.SERVER_USE_HTTPS = ${this.serverUseHttps}; const pages: Record = {} const peerConnections: Record = {} + const peerConnectionsCreated: Record = {} const peerConnectionsClosed: Record = {} + const peerConnectionsConnected: Record = {} const peerConnectionsDisconnected: Record = {} const peerConnectionsFailed: Record = {} const audioEndToEndDelayStats: Record = {} @@ -1616,11 +1620,21 @@ window.SERVER_USE_HTTPS = ${this.serverUseHttps}; // Set peerConnections counters. increaseKey(peerConnections, pageKey, activePeerConnections) + increaseKey( + peerConnectionsCreated, + pageKey, + peerConnectionStats.peerConnectionsCreated, + ) increaseKey( peerConnectionsClosed, pageKey, peerConnectionStats.peerConnectionsClosed, ) + increaseKey( + peerConnectionsConnected, + pageKey, + peerConnectionStats.peerConnectionsConnected, + ) increaseKey( peerConnectionsDisconnected, pageKey, @@ -1714,35 +1728,19 @@ window.SERVER_USE_HTTPS = ${this.serverUseHttps}; this.throttleIndex, 'up', ) - if (throttleUpValues.rate !== undefined) { - throttleUpValuesRate[pageKey] = throttleUpValues.rate - } - if (throttleUpValues.delay !== undefined) { - throttleUpValuesDelay[pageKey] = throttleUpValues.delay - } - if (throttleUpValues.loss !== undefined) { - throttleUpValuesLoss[pageKey] = throttleUpValues.loss - } - if (throttleUpValues.queue !== undefined) { - throttleUpValuesQueue[pageKey] = throttleUpValues.queue - } + throttleUpValuesRate[pageKey] = throttleUpValues.rate || 0 + throttleUpValuesDelay[pageKey] = throttleUpValues.delay || 0 + throttleUpValuesLoss[pageKey] = throttleUpValues.loss || 0 + throttleUpValuesQueue[pageKey] = throttleUpValues.queue || 0 const throttleDownValues = getSessionThrottleValues( this.throttleIndex, 'down', ) - if (throttleDownValues.rate !== undefined) { - throttleDownValuesRate[pageKey] = throttleDownValues.rate - } - if (throttleDownValues.delay !== undefined) { - throttleDownValuesDelay[pageKey] = throttleDownValues.delay - } - if (throttleDownValues.loss !== undefined) { - throttleDownValuesLoss[pageKey] = throttleDownValues.loss - } - if (throttleDownValues.queue !== undefined) { - throttleDownValuesQueue[pageKey] = throttleDownValues.queue - } + throttleDownValuesRate[pageKey] = throttleDownValues.rate || 0 + throttleDownValuesDelay[pageKey] = throttleDownValues.delay || 0 + throttleDownValuesLoss[pageKey] = throttleDownValues.loss || 0 + throttleDownValuesQueue[pageKey] = throttleDownValues.queue || 0 } catch (err) { log.error( `collectPeerConnectionStats for page ${pageIndex} error: ${(err as Error).stack}`, @@ -1755,6 +1753,8 @@ window.SERVER_USE_HTTPS = ${this.serverUseHttps}; if (this.pageErrors) collectedStats.errors = this.pageErrors if (this.pageWarnings) collectedStats.warnings = this.pageWarnings collectedStats.peerConnections = peerConnections + collectedStats.peerConnectionsCreated = peerConnectionsCreated + collectedStats.peerConnectionsConnected = peerConnectionsConnected collectedStats.peerConnectionsClosed = peerConnectionsClosed collectedStats.peerConnectionsDisconnected = peerConnectionsDisconnected collectedStats.peerConnectionsFailed = peerConnectionsFailed diff --git a/src/utils.ts b/src/utils.ts index 456bfa3..131e6c5 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -655,6 +655,7 @@ export async function checkChromeExecutable(): Promise { revisions.sort(getVersionComparator(browser)) log.debug(`Available chrome versions: ${revisions}`) const requiredRevision = config.chromiumVersion + if (!requiredRevision) throw new Error('Chromium version not set') if (revisions.indexOf(fixSemVer(requiredRevision)) === -1) { log.info(`Downloading chrome ${requiredRevision}...`) let progress = 0 @@ -1132,7 +1133,6 @@ export async function pageScreenshot( } const browser = await puppeteer.launch({ headless: true, - ignoreHTTPSErrors: true, executablePath, defaultViewport: { width, @@ -1216,8 +1216,12 @@ export function enabledForSession( return false } -export function increaseKey(o: Record, key: string, value = 1) { - if (!value) return +export function increaseKey( + o: Record, + key: string, + value?: number, +): void { + if (value === undefined || !isFinite(value)) return if (o[key] === undefined) { o[key] = 0 } diff --git a/yarn.lock b/yarn.lock index e33c445..11e6922 100644 --- a/yarn.lock +++ b/yarn.lock @@ -581,19 +581,19 @@ resolved "https://registry.yarnpkg.com/@pkgr/core/-/core-0.1.1.tgz#1ec17e2edbec25c8306d424ecfbf13c7de1aaa31" integrity sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA== -"@puppeteer/browsers@2.2.3", "@puppeteer/browsers@^2.2.3": - version "2.2.3" - resolved "https://registry.yarnpkg.com/@puppeteer/browsers/-/browsers-2.2.3.tgz#ad6b79129c50825e77ddaba082680f4dad0b674e" - integrity sha512-bJ0UBsk0ESOs6RFcLXOt99a3yTDcOKlzfjad+rhFwdaG1Lu/Wzq58GHYCDTlZ9z6mldf4g+NTb+TXEfe0PpnsQ== - dependencies: - debug "4.3.4" - extract-zip "2.0.1" - progress "2.0.3" - proxy-agent "6.4.0" - semver "7.6.0" - tar-fs "3.0.5" - unbzip2-stream "1.4.3" - yargs "17.7.2" +"@puppeteer/browsers@2.4.0", "@puppeteer/browsers@^2.4.0": + version "2.4.0" + resolved "https://registry.yarnpkg.com/@puppeteer/browsers/-/browsers-2.4.0.tgz#a0dd0f4e381e53f509109ae83b891db5972750f5" + integrity sha512-x8J1csfIygOwf6D6qUAZ0ASk3z63zPb7wkNeHRerCMh82qWKUrOgkuP005AJC8lDL6/evtXETGEJVcwykKT4/g== + dependencies: + debug "^4.3.6" + extract-zip "^2.0.1" + progress "^2.0.3" + proxy-agent "^6.4.0" + semver "^7.6.3" + tar-fs "^3.0.6" + unbzip2-stream "^1.4.3" + yargs "^17.7.2" "@shikijs/core@1.10.0": version "1.10.0" @@ -2196,10 +2196,10 @@ chrome-trace-event@^1.0.2: resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz#1015eced4741e15d06664a957dbbf50d041e26ac" integrity sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg== -chromium-bidi@0.5.24: - version "0.5.24" - resolved "https://registry.yarnpkg.com/chromium-bidi/-/chromium-bidi-0.5.24.tgz#0fe672fa30b1e6bcc63ae818442b21c41849c435" - integrity sha512-5xQNN2SVBdZv4TxeMLaI+PelrnZsHDhn8h2JtyriLr+0qHcZS8BMuo93qN6J1VmtmrgYP+rmcLHcbpnA8QJh+w== +chromium-bidi@0.6.5: + version "0.6.5" + resolved "https://registry.yarnpkg.com/chromium-bidi/-/chromium-bidi-0.6.5.tgz#31be98f9ee5c93fa99d240c680518c9293d8c6bb" + integrity sha512-RuLrmzYrxSb0s9SgpB+QN5jJucPduZQ/9SIe76MDxYJuecPW5mxMdacJ1f4EtgiV+R0p3sCkznTMvH0MPGFqjA== dependencies: mitt "3.0.1" urlpattern-polyfill "10.0.0" @@ -2666,7 +2666,7 @@ debug@2.6.9, debug@^2.2.0, debug@^2.3.3: dependencies: ms "2.0.0" -debug@4, debug@4.3.4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4: +debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4: version "4.3.4" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== @@ -2680,12 +2680,12 @@ debug@^3.1.0, debug@^3.2.6, debug@^3.2.7: dependencies: ms "^2.1.1" -debug@^4.3.5: - version "4.3.5" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.5.tgz#e83444eceb9fedd4a1da56d671ae2446a01a6e1e" - integrity sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg== +debug@^4.3.6: + version "4.3.7" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.7.tgz#87945b4151a011d76d95a198d7111c865c360a52" + integrity sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ== dependencies: - ms "2.1.2" + ms "^2.1.3" decode-uri-component@^0.2.0: version "0.2.2" @@ -2912,10 +2912,10 @@ detective@^5.2.0: defined "^1.0.0" minimist "^1.2.6" -devtools-protocol@0.0.1299070: - version "0.0.1299070" - resolved "https://registry.yarnpkg.com/devtools-protocol/-/devtools-protocol-0.0.1299070.tgz#b3e4cf0b678a46f0f907ae6e07e03ad3a53c00df" - integrity sha512-+qtL3eX50qsJ7c+qVyagqi7AWMoQCBGNfoyJZMwm/NSXVqLYbuitrWEEIzxfUmTNy7//Xe8yhMmQ+elj3uAqSg== +devtools-protocol@0.0.1330662: + version "0.0.1330662" + resolved "https://registry.yarnpkg.com/devtools-protocol/-/devtools-protocol-0.0.1330662.tgz#400fe703c2820d6b2d9ebdd1785934310152373e" + integrity sha512-pzh6YQ8zZfz3iKlCvgzVCu22NdpZ8hNmwU6WnQjNVquh0A9iVosPtNLWDwaWVGyrntQlltPFztTMK5Cg6lfCuw== diff@^4.0.1: version "4.0.2" @@ -3676,7 +3676,7 @@ extglob@^2.0.4: snapdragon "^0.8.1" to-regex "^3.0.1" -extract-zip@2.0.1: +extract-zip@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/extract-zip/-/extract-zip-2.0.1.tgz#663dca56fe46df890d5f131ef4a06d22bb8ba13a" integrity sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg== @@ -6684,7 +6684,7 @@ process@~0.11.0: resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" integrity sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A== -progress@2.0.3: +progress@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== @@ -6731,7 +6731,7 @@ proxy-addr@~2.0.7: forwarded "0.2.0" ipaddr.js "1.9.1" -proxy-agent@6.4.0: +proxy-agent@^6.4.0: version "6.4.0" resolved "https://registry.yarnpkg.com/proxy-agent/-/proxy-agent-6.4.0.tgz#b4e2dd51dee2b377748aef8d45604c2d7608652d" integrity sha512-u0piLU+nCOHMgGjRbimiXmA9kM/L9EHh3zL81xCdp7m+Y2pHIsnmbdDoEDoAz5geaonNR6q6+yOPQs6n4T6sBQ== @@ -6805,16 +6805,17 @@ punycode@^2.1.0, punycode@^2.1.1: resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== -puppeteer-core@22.12.1, puppeteer-core@^22.12.1: - version "22.12.1" - resolved "https://registry.yarnpkg.com/puppeteer-core/-/puppeteer-core-22.12.1.tgz#4dacc2e9ab127ef534a4bb4793d33f9424a5b48d" - integrity sha512-XmqeDPVdC5/3nGJys1jbgeoZ02wP0WV1GBlPtr/ULRbGXJFuqgXMcKQ3eeNtFpBzGRbpeoCGWHge1ZWKWl0Exw== +puppeteer-core@23.3.0, puppeteer-core@^23.3.0: + version "23.3.0" + resolved "https://registry.yarnpkg.com/puppeteer-core/-/puppeteer-core-23.3.0.tgz#e9e7367367e230ab3ed0b6b674170b09ba0a96e3" + integrity sha512-sB2SsVMFs4gKad5OCdv6w5vocvtEUrRl0zQqSyRPbo/cj1Ktbarmhxy02Zyb9R9HrssBcJDZbkrvBnbaesPyYg== dependencies: - "@puppeteer/browsers" "2.2.3" - chromium-bidi "0.5.24" - debug "^4.3.5" - devtools-protocol "0.0.1299070" - ws "^8.17.1" + "@puppeteer/browsers" "2.4.0" + chromium-bidi "0.6.5" + debug "^4.3.6" + devtools-protocol "0.0.1330662" + typed-query-selector "^2.12.0" + ws "^8.18.0" puppeteer-intercept-and-modify-requests@^1.3.1: version "1.3.1" @@ -6823,15 +6824,17 @@ puppeteer-intercept-and-modify-requests@^1.3.1: dependencies: escape-string-regexp "^4.0.0" -puppeteer@^22.12.1: - version "22.12.1" - resolved "https://registry.yarnpkg.com/puppeteer/-/puppeteer-22.12.1.tgz#a648715c24e65a9b0cee515687d8923bfa639a67" - integrity sha512-1GxY8dnEnHr1SLzdSDr0FCjM6JQfAh2E2I/EqzeF8a58DbGVk9oVjj4lFdqNoVbpgFSpAbz7VER9St7S1wDpNg== +puppeteer@^23.3.0: + version "23.3.0" + resolved "https://registry.yarnpkg.com/puppeteer/-/puppeteer-23.3.0.tgz#f2a3b28c05c17504adf1a903247e01f93e27d6b5" + integrity sha512-e2jY8cdWSUGsrLxqGm3hIbJq/UIk1uOY8XY7SM51leXkH7shrIyE91lK90Q9byX6tte+cyL3HKqlWBEd6TjWTA== dependencies: - "@puppeteer/browsers" "2.2.3" + "@puppeteer/browsers" "2.4.0" + chromium-bidi "0.6.5" cosmiconfig "^9.0.0" - devtools-protocol "0.0.1299070" - puppeteer-core "22.12.1" + devtools-protocol "0.0.1330662" + puppeteer-core "23.3.0" + typed-query-selector "^2.12.0" qs@6.11.0: version "6.11.0" @@ -7284,13 +7287,6 @@ seek-bzip@^1.0.5: dependencies: commander "^2.8.1" -semver@7.6.0, semver@^7.3.5: - version "7.6.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.0.tgz#1a46a4db4bffcccd97b743b5005c8325f23d4e2d" - integrity sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg== - dependencies: - lru-cache "^6.0.0" - semver@^5.3.0, semver@^5.4.1, semver@^5.6.0, semver@^5.7.0: version "5.7.1" resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" @@ -7313,6 +7309,18 @@ semver@^7.3.4, semver@^7.3.7: dependencies: lru-cache "^6.0.0" +semver@^7.3.5: + version "7.6.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.0.tgz#1a46a4db4bffcccd97b743b5005c8325f23d4e2d" + integrity sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg== + dependencies: + lru-cache "^6.0.0" + +semver@^7.6.3: + version "7.6.3" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.3.tgz#980f7b5550bc175fb4dc09403085627f9eb33143" + integrity sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A== + semver@~5.3.0: version "5.3.0" resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f" @@ -7938,17 +7946,6 @@ tapable@^2.1.1, tapable@^2.2.0: resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0" integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ== -tar-fs@3.0.5: - version "3.0.5" - resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-3.0.5.tgz#f954d77767e4e6edf973384e1eb95f8f81d64ed9" - integrity sha512-JOgGAmZyMgbqpLwct7ZV8VzkEB6pxXFBVErLtb+XCOqzc6w1xiWKI9GVd6bwk68EX7eJ4DWmfXVmq8K2ziZTGg== - dependencies: - pump "^3.0.0" - tar-stream "^3.1.5" - optionalDependencies: - bare-fs "^2.1.1" - bare-path "^2.1.0" - tar-fs@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-2.1.1.tgz#489a15ab85f1f0befabb370b7de4f9eb5cbe8784" @@ -8363,6 +8360,11 @@ typed-array-length@^1.0.4: for-each "^0.3.3" is-typed-array "^1.1.9" +typed-query-selector@^2.12.0: + version "2.12.0" + resolved "https://registry.yarnpkg.com/typed-query-selector/-/typed-query-selector-2.12.0.tgz#92b65dbc0a42655fccf4aeb1a08b1dddce8af5f2" + integrity sha512-SbklCd1F0EiZOyPiW192rrHZzZ5sBijB6xM+cpmrwDqObvdtunOHHIk9fCGsoK5JVIYXoyEp4iEdE3upFH3PAg== + typedarray@^0.0.6: version "0.0.6" resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" @@ -8409,7 +8411,7 @@ unbox-primitive@^1.0.2: has-symbols "^1.0.3" which-boxed-primitive "^1.0.2" -unbzip2-stream@1.4.3, unbzip2-stream@^1.0.9: +unbzip2-stream@^1.0.9, unbzip2-stream@^1.4.3: version "1.4.3" resolved "https://registry.yarnpkg.com/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz#b0da04c4371311df771cdc215e87f2130991ace7" integrity sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg== @@ -8834,6 +8836,11 @@ ws@^8.17.1: resolved "https://registry.yarnpkg.com/ws/-/ws-8.17.1.tgz#9293da530bb548febc95371d90f9c878727d919b" integrity sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ== +ws@^8.18.0: + version "8.18.0" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.18.0.tgz#0d7505a6eafe2b0e712d232b42279f53bc289bbc" + integrity sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw== + xtend@^4.0.0, xtend@^4.0.1, xtend@^4.0.2, xtend@~4.0.1: version "4.0.2" resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" @@ -8874,7 +8881,7 @@ yargs-parser@^21.1.1: resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== -yargs@17.7.2: +yargs@^17.7.2: version "17.7.2" resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269" integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==