Chore: Make tests less flakey & upgrade puppeteer to rrweb-snapshot test suite to run (#1084)

* Upgrade puppeteer to 17.1.3 in rrweb-snapshot

* Apply formatting changes

* Add ?

* Make tests less flakey

* Make attribute-setting more explicit

* Make test less flakey

* Make test less flakey

* Upgrade puppeteer for rrdom

* Use wait for request animation frame instead of timeout

* Force append to happen in second event

* Wait till iframe was loaded (now 100ms)

* Round the currentTime to 1 decimal place
This commit is contained in:
Justin Halsall
2026-04-01 12:00:00 +08:00
committed by GitHub
parent c62f888ec5
commit 6e06fd2536
11 changed files with 118 additions and 125 deletions

View File

@@ -120,7 +120,7 @@ In addition to adding integration tests and unit tests, rrweb also provides a RE
</tr> </tr>
</table> </table>
## Who's using rrweb ## Who's using rrweb?
<table> <table>
<tr> <tr>

View File

@@ -38,7 +38,7 @@
"@typescript-eslint/parser": "^5.23.0", "@typescript-eslint/parser": "^5.23.0",
"eslint": "^8.15.0", "eslint": "^8.15.0",
"jest": "^27.5.1", "jest": "^27.5.1",
"puppeteer": "^9.1.1", "puppeteer": "^17.1.3",
"rollup": "^2.56.3", "rollup": "^2.56.3",
"rollup-plugin-terser": "^7.0.2", "rollup-plugin-terser": "^7.0.2",
"rollup-plugin-typescript2": "^0.31.2", "rollup-plugin-typescript2": "^0.31.2",

View File

@@ -49,7 +49,7 @@
"jest": "^27.2.4", "jest": "^27.2.4",
"jest-snapshot": "^23.6.0", "jest-snapshot": "^23.6.0",
"jsdom": "^16.4.0", "jsdom": "^16.4.0",
"puppeteer": "^1.15.0", "puppeteer": "^17.1.3",
"rollup": "^2.45.2", "rollup": "^2.45.2",
"rollup-plugin-terser": "^7.0.2", "rollup-plugin-terser": "^7.0.2",
"rollup-plugin-typescript2": "^0.31.2", "rollup-plugin-typescript2": "^0.31.2",

View File

@@ -189,7 +189,7 @@ exports[`integration tests [html file]: block-element.html 1`] = `
`; `;
exports[`integration tests [html file]: compat-mode.html 1`] = ` exports[`integration tests [html file]: compat-mode.html 1`] = `
"<!DOCTYPE html PUBLIC \\"-//W3C//DTD HTML 4.0 Transitional//EN\\"><!-- no doctype! --><html><head> "<!-- no doctype! --><html><head>
<title>Compat Mode; image resizing</title> <title>Compat Mode; image resizing</title>
</head> </head>
<body> <body>
@@ -287,12 +287,12 @@ exports[`integration tests [html file]: iframe.html 1`] = `
`; `;
exports[`integration tests [html file]: iframe-inner.html 1`] = ` exports[`integration tests [html file]: iframe-inner.html 1`] = `
"<!DOCTYPE html PUBLIC \\"-//W3C//DTD HTML 4.0 Transitional//EN\\"><html><head></head><body><button>inner iframe button</button> "<html><head></head><body><button>inner iframe button</button>
</body></html>" </body></html>"
`; `;
exports[`integration tests [html file]: invalid-attribute.html 1`] = ` exports[`integration tests [html file]: invalid-attribute.html 1`] = `
"<!DOCTYPE html PUBLIC \\"-//W3C//DTD HTML 4.0 Transitional//EN\\"><html foo=\\"bar\\"><head></head><body> "<html foo=\\"bar\\"><head></head><body>
</body></html>" </body></html>"
`; `;
@@ -335,7 +335,7 @@ exports[`integration tests [html file]: mask-text.html 1`] = `
`; `;
exports[`integration tests [html file]: picture.html 1`] = ` exports[`integration tests [html file]: picture.html 1`] = `
"<!DOCTYPE html PUBLIC \\"-//W3C//DTD XHTML 1.0 Transitional//EN\\"><html xmlns=\\"http://www.w3.org/1999/xhtml\\"><head></head><body> "<html xmlns=\\"http://www.w3.org/1999/xhtml\\"><head></head><body>
<picture> <picture>
<source type=\\"image/webp\\" srcset=\\"http://localhost:3030/assets/img/characters/robot.webp\\" /> <source type=\\"image/webp\\" srcset=\\"http://localhost:3030/assets/img/characters/robot.webp\\" />
<img src=\\"http://localhost:3030/assets/img/characters/robot.png\\" /> <img src=\\"http://localhost:3030/assets/img/characters/robot.png\\" />
@@ -345,20 +345,20 @@ exports[`integration tests [html file]: picture.html 1`] = `
`; `;
exports[`integration tests [html file]: picture-blob.html 1`] = ` exports[`integration tests [html file]: picture-blob.html 1`] = `
"<!DOCTYPE html PUBLIC \\"-//W3C//DTD XHTML 1.0 Transitional//EN\\"><html xmlns=\\"http://www.w3.org/1999/xhtml\\"><head></head><body> "<html xmlns=\\"http://www.w3.org/1999/xhtml\\"><head></head><body>
<img src=\\"\\" alt=\\"This is a robot\\" /> <img src=\\"blob:http://localhost:xxxx/...\\" alt=\\"This is a robot\\" />
<noscript>SCRIPT_PLACEHOLDER</noscript></body></html>" <noscript>SCRIPT_PLACEHOLDER</noscript></body></html>"
`; `;
exports[`integration tests [html file]: picture-blob-in-frame.html 1`] = ` exports[`integration tests [html file]: picture-blob-in-frame.html 1`] = `
"<!DOCTYPE html PUBLIC \\"-//W3C//DTD XHTML 1.0 Transitional//EN\\"><html xmlns=\\"http://www.w3.org/1999/xhtml\\"><head></head><body> "<html xmlns=\\"http://www.w3.org/1999/xhtml\\"><head></head><body>
<iframe></iframe> <iframe></iframe>
</body></html>" </body></html>"
`; `;
exports[`integration tests [html file]: picture-in-frame.html 1`] = ` exports[`integration tests [html file]: picture-in-frame.html 1`] = `
"<!DOCTYPE html PUBLIC \\"-//W3C//DTD XHTML 1.0 Transitional//EN\\"><html xmlns=\\"http://www.w3.org/1999/xhtml\\"><head></head><body> "<html xmlns=\\"http://www.w3.org/1999/xhtml\\"><head></head><body>
<iframe></iframe> <iframe></iframe>
</body></html>" </body></html>"
`; `;
@@ -750,7 +750,7 @@ exports[`shadow DOM integration tests snapshot shadow DOM 1`] = `
\\"childNodes\\": [ \\"childNodes\\": [
{ {
\\"type\\": 3, \\"type\\": 3,
\\"textContent\\": \\":host { display: inline-block; width: 650px; font-family: \\\\\\"Roboto Slab\\\\\\"; contain: content; }:host([background]) { background: var(--background-color, #9E9E9E); border-radius: 10px; padding: 10px; }#panels { box-shadow: rgba(0, 0, 0, 0.3) 0px 2px 2px; background: white; border-radius: 3px; padding: 16px; height: 250px; overflow: auto; }#tabs { display: inline-flex; user-select: none; }#tabs slot { display: inline-flex; }#tabs ::slotted(*) { font: 400 16px/22px Roboto; padding: 16px 8px; margin: 0px; text-align: center; width: 100px; text-overflow: ellipsis; white-space: nowrap; overflow: hidden; cursor: pointer; border-top-left-radius: 3px; border-top-right-radius: 3px; background: linear-gradient(rgb(250, 250, 250), rgb(238, 238, 238)); border: none; }#tabs ::slotted([aria-selected=\\\\\\"true\\\\\\"]) { font-weight: 600; background: white; box-shadow: none; }#tabs ::slotted(:focus) { z-index: 1; }#panels ::slotted([aria-hidden=\\\\\\"true\\\\\\"]) { display: none; }\\", \\"textContent\\": \\":host { display: inline-block; width: 650px; font-family: \\\\\\"Roboto Slab\\\\\\"; contain: content; }:host([background]) { background: var(--background-color, #9E9E9E); border-radius: 10px; padding: 10px; }#panels { box-shadow: rgba(0, 0, 0, 0.3) 0px 2px 2px; background: white; border-radius: 3px; padding: 16px; height: 250px; overflow: auto; }#tabs { display: inline-flex; user-select: none; }#tabs slot { display: inline-flex; }#tabs ::slotted(*) { font: 400 16px / 22px Roboto; padding: 16px 8px; margin: 0px; text-align: center; width: 100px; text-overflow: ellipsis; white-space: nowrap; overflow: hidden; cursor: pointer; border-top-left-radius: 3px; border-top-right-radius: 3px; background: linear-gradient(rgb(250, 250, 250), rgb(238, 238, 238)); border: none; }#tabs ::slotted([aria-selected=\\\\\\"true\\\\\\"]) { font-weight: 600; background: white; box-shadow: none; }#tabs ::slotted(:focus) { z-index: 1; }#panels ::slotted([aria-hidden=\\\\\\"true\\\\\\"]) { display: none; }\\",
\\"isStyle\\": true, \\"isStyle\\": true,
\\"id\\": 38 \\"id\\": 38
} }

View File

@@ -9,7 +9,7 @@
const robotBlobUrl = URL.createObjectURL(robotBlob); const robotBlobUrl = URL.createObjectURL(robotBlob);
const images = document.querySelectorAll('img'); const images = document.querySelectorAll('img');
images.forEach((img) => { images.forEach((img) => {
img.src = robotBlobUrl; img.setAttribute('src', robotBlobUrl);
}); });
}, 0); }, 0);
</script> </script>

View File

@@ -128,8 +128,8 @@ describe('integration tests', function (this: ISuite) {
waitUntil: 'load', waitUntil: 'load',
}); });
} }
const rebuildHtml = ( await waitForRAF(page);
await page.evaluate(`${code} const rebuildHtml = ((await page.evaluate(`${code}
const x = new XMLSerializer(); const x = new XMLSerializer();
const snap = rrweb.snapshot(document); const snap = rrweb.snapshot(document);
let out = x.serializeToString(rrweb.rebuild(snap, { doc: document })); let out = x.serializeToString(rrweb.rebuild(snap, { doc: document }));
@@ -138,8 +138,12 @@ describe('integration tests', function (this: ISuite) {
out = out.replace(' xmlns=\"http://www.w3.org/1999/xhtml\"', ''); out = out.replace(' xmlns=\"http://www.w3.org/1999/xhtml\"', '');
} }
out; // return out; // return
`) `)) as string)
).replace(/\n\n/g, ''); .replace(/\n\n/g, '')
.replace(
/blob:http:\/\/localhost:\d+\/[0-9a-z\-]+/,
'blob:http://localhost:xxxx/...',
);
expect(rebuildHtml).toMatchSnapshot(); expect(rebuildHtml).toMatchSnapshot();
}); });
} }
@@ -158,9 +162,9 @@ describe('integration tests', function (this: ISuite) {
compatMode + compatMode +
' for compat-mode.html should be BackCompat as DOCTYPE is deliberately omitted', ' for compat-mode.html should be BackCompat as DOCTYPE is deliberately omitted',
); );
const renderedHeight = await page.evaluate( const renderedHeight = (await page.evaluate(
'document.querySelector("center").clientHeight', 'document.querySelector("center").clientHeight',
); )) as number;
// can remove following assertion if dimensions of page change // can remove following assertion if dimensions of page change
assert( assert(
renderedHeight < 400, renderedHeight < 400,
@@ -203,8 +207,10 @@ iframe.contentDocument.querySelector('center').clientHeight
inlineImages: true, inlineImages: true,
inlineStylesheet: false inlineStylesheet: false
})`); })`);
await page.waitFor(100); await waitForRAF(page);
const snapshot = await page.evaluate('JSON.stringify(snapshot, null, 2);'); const snapshot = (await page.evaluate(
'JSON.stringify(snapshot, null, 2);',
)) as string;
assert(snapshot.includes('"rr_dataURL"')); assert(snapshot.includes('"rr_dataURL"'));
assert(snapshot.includes('data:image/webp;base64,')); assert(snapshot.includes('data:image/webp;base64,'));
}); });
@@ -221,8 +227,10 @@ iframe.contentDocument.querySelector('center').clientHeight
inlineImages: true, inlineImages: true,
inlineStylesheet: false inlineStylesheet: false
})`); })`);
await page.waitFor(100); await waitForRAF(page);
const snapshot = await page.evaluate('JSON.stringify(snapshot, null, 2);'); const snapshot = (await page.evaluate(
'JSON.stringify(snapshot, null, 2);',
)) as string;
assert(snapshot.includes('"rr_dataURL"')); assert(snapshot.includes('"rr_dataURL"'));
assert(snapshot.includes('data:image/webp;base64,')); assert(snapshot.includes('data:image/webp;base64,'));
}); });
@@ -244,10 +252,10 @@ iframe.contentDocument.querySelector('center').clientHeight
window.snapshot = sn; window.snapshot = sn;
} }
})`); })`);
await page.waitFor(100); await waitForRAF(page);
const snapshot = await page.evaluate( const snapshot = (await page.evaluate(
'JSON.stringify(window.snapshot, null, 2);', 'JSON.stringify(window.snapshot, null, 2);',
); )) as string;
assert(snapshot.includes('"rr_dataURL"')); assert(snapshot.includes('"rr_dataURL"'));
assert(snapshot.includes('data:image/webp;base64,')); assert(snapshot.includes('data:image/webp;base64,'));
}); });
@@ -269,10 +277,10 @@ iframe.contentDocument.querySelector('center').clientHeight
window.snapshot = sn; window.snapshot = sn;
} }
})`); })`);
await page.waitFor(100); await waitForRAF(page);
const snapshot = await page.evaluate( const snapshot = (await page.evaluate(
'JSON.stringify(window.snapshot, null, 2);', 'JSON.stringify(window.snapshot, null, 2);',
); )) as string;
assert(snapshot.includes('"rr_dataURL"')); assert(snapshot.includes('"rr_dataURL"'));
assert(snapshot.includes('data:image/webp;base64,')); assert(snapshot.includes('data:image/webp;base64,'));
}); });
@@ -287,7 +295,7 @@ iframe.contentDocument.querySelector('center').clientHeight
window.snapshot = rrweb.snapshot(document, { window.snapshot = rrweb.snapshot(document, {
inlineStylesheet: true, inlineStylesheet: true,
})`); })`);
await page.waitFor(100); await waitForRAF(page);
const snapshot = (await page.evaluate( const snapshot = (await page.evaluate(
'JSON.stringify(window.snapshot, null, 2);', 'JSON.stringify(window.snapshot, null, 2);',
)) as string; )) as string;

View File

@@ -13,6 +13,6 @@
iframe5.id = 'five'; iframe5.id = 'five';
setTimeout(() => { setTimeout(() => {
document.body.appendChild(iframe5); document.body.appendChild(iframe5);
}, 10); }, 100);
</script> </script>
</html> </html>

View File

@@ -672,7 +672,7 @@ describe('record integration tests', function (this: ISuite) {
await page.goto('about:blank'); await page.goto('about:blank');
await page.setContent(getHtml.call(this, 'frame2.html')); await page.setContent(getHtml.call(this, 'frame2.html'));
await page.waitForTimeout(10); // wait till frame was added to dom await page.waitForSelector('iframe'); // wait for iframe to get added
await waitForRAF(page); // wait till browser loaded contents of frame await waitForRAF(page); // wait till browser loaded contents of frame
await page.evaluate(() => { await page.evaluate(() => {

View File

@@ -798,8 +798,23 @@ describe('replayer', function () {
events = ${JSON.stringify(adoptedStyleSheetModification)}; events = ${JSON.stringify(adoptedStyleSheetModification)};
const { Replayer } = rrweb; const { Replayer } = rrweb;
var replayer = new Replayer(events,{showDebug:true}); var replayer = new Replayer(events,{showDebug:true});
replayer.play(); replayer.pause(0);
`);
async function playTill(offsetTime) {
replayer.play();
return new Promise((resolve) => {
const checkTime = () => {
if (replayer.getCurrentTime() >= offsetTime) {
replayer.pause();
resolve(undefined);
} else {
requestAnimationFrame(checkTime);
}
};
checkTime();
});
}`);
const iframe = await page.$('iframe'); const iframe = await page.$('iframe');
const contentDocument = await iframe!.contentFrame()!; const contentDocument = await iframe!.contentFrame()!;
@@ -916,19 +931,19 @@ describe('replayer', function () {
).toBeTruthy(); ).toBeTruthy();
}; };
await page.waitForTimeout(235); await page.evaluate(`playTill(250)`);
await check250ms(); await check250ms();
await page.waitForTimeout(50); await page.evaluate(`playTill(300)`);
await check300ms(); await check300ms();
await page.waitForTimeout(100); await page.evaluate(`playTill(400)`);
await check400ms(); await check400ms();
await page.waitForTimeout(100); await page.evaluate(`playTill(500)`);
await check500ms(); await check500ms();
await page.waitForTimeout(100); await page.evaluate(`playTill(600)`);
await check600ms(); await check600ms();
// To test the correctness of replaying adopted stylesheet mutation events in the fast-forward mode. // To test the correctness of replaying adopted stylesheet mutation events in the fast-forward mode.

View File

@@ -185,6 +185,14 @@ function stringifySnapshots(snapshots: eventWithTime[]): string {
} }
} }
}); });
} else if (
s.type === EventType.IncrementalSnapshot &&
s.data.source === IncrementalSource.MediaInteraction
) {
// round the currentTime to 1 decimal place
if (s.data.currentTime) {
s.data.currentTime = Math.round(s.data.currentTime * 10) / 10;
}
} }
delete (s as Optional<eventWithTime, 'timestamp'>).timestamp; delete (s as Optional<eventWithTime, 'timestamp'>).timestamp;
return s as event; return s as event;

134
yarn.lock
View File

@@ -2659,13 +2659,6 @@ agent-base@6, agent-base@^6.0.2:
dependencies: dependencies:
debug "4" debug "4"
agent-base@^4.3.0:
version "4.3.0"
resolved "https://registry.npmjs.org/agent-base/-/agent-base-4.3.0.tgz"
integrity sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg==
dependencies:
es6-promisify "^5.0.0"
agentkeepalive@^4.1.3: agentkeepalive@^4.1.3:
version "4.1.4" version "4.1.4"
resolved "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.1.4.tgz" resolved "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.1.4.tgz"
@@ -2887,11 +2880,6 @@ ast-metadata-inferer@^0.7.0:
dependencies: dependencies:
"@mdn/browser-compat-data" "^3.3.14" "@mdn/browser-compat-data" "^3.3.14"
async-limiter@~1.0.0:
version "1.0.1"
resolved "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz"
integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==
asynckit@^0.4.0: asynckit@^0.4.0:
version "0.4.0" version "0.4.0"
resolved "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz" resolved "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz"
@@ -3686,16 +3674,6 @@ concat-map@0.0.1:
resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz"
integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=
concat-stream@^1.6.2:
version "1.6.2"
resolved "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz"
integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==
dependencies:
buffer-from "^1.0.0"
inherits "^2.0.3"
readable-stream "^2.2.2"
typedarray "^0.0.6"
concat-stream@^2.0.0: concat-stream@^2.0.0:
version "2.0.0" version "2.0.0"
resolved "https://registry.npmjs.org/concat-stream/-/concat-stream-2.0.0.tgz" resolved "https://registry.npmjs.org/concat-stream/-/concat-stream-2.0.0.tgz"
@@ -3915,6 +3893,13 @@ cross-env@^5.2.0:
dependencies: dependencies:
cross-spawn "^6.0.5" cross-spawn "^6.0.5"
cross-fetch@3.1.5:
version "3.1.5"
resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-3.1.5.tgz#e1389f44d9e7ba767907f7af8454787952ab534f"
integrity sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==
dependencies:
node-fetch "2.6.7"
cross-spawn@^6.0.5: cross-spawn@^6.0.5:
version "6.0.5" version "6.0.5"
resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz" resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz"
@@ -4152,7 +4137,7 @@ dateformat@^3.0.0:
resolved "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz" resolved "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz"
integrity sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q== integrity sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==
debug@2.6.9, debug@^2.6.9: debug@2.6.9:
version "2.6.9" version "2.6.9"
resolved "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz" resolved "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz"
integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==
@@ -4166,14 +4151,7 @@ debug@4, debug@4.3.2, debug@^4.1.0, debug@^4.1.1, debug@^4.3.2:
dependencies: dependencies:
ms "2.1.2" ms "2.1.2"
debug@^3.1.0: debug@4.3.4, debug@^4.3.3, debug@^4.3.4:
version "3.2.7"
resolved "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz"
integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==
dependencies:
ms "^2.1.1"
debug@^4.3.3, debug@^4.3.4:
version "4.3.4" version "4.3.4"
resolved "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz" resolved "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz"
integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==
@@ -4282,6 +4260,11 @@ detect-newline@^3.0.0:
resolved "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz" resolved "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz"
integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA== integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==
devtools-protocol@0.0.1036444:
version "0.0.1036444"
resolved "https://registry.yarnpkg.com/devtools-protocol/-/devtools-protocol-0.0.1036444.tgz#a570d3cdde61527c82f9b03919847b8ac7b1c2b9"
integrity sha512-0y4f/T8H9lsESV9kKP1HDUXgHxCdniFeJh6Erq+FbdOEvp/Ydp9t8kcAAM5gOd17pMrTDlFWntoHtzzeTUWKNw==
devtools-protocol@0.0.869402: devtools-protocol@0.0.869402:
version "0.0.869402" version "0.0.869402"
resolved "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.869402.tgz" resolved "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.869402.tgz"
@@ -4587,18 +4570,6 @@ es-to-primitive@^1.2.1:
is-date-object "^1.0.1" is-date-object "^1.0.1"
is-symbol "^1.0.2" is-symbol "^1.0.2"
es6-promise@^4.0.3:
version "4.2.8"
resolved "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz"
integrity sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==
es6-promisify@^5.0.0:
version "5.0.0"
resolved "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz"
integrity sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=
dependencies:
es6-promise "^4.0.3"
esbuild-android-64@0.14.38: esbuild-android-64@0.14.38:
version "0.14.38" version "0.14.38"
resolved "https://registry.yarnpkg.com/esbuild-android-64/-/esbuild-android-64-0.14.38.tgz#5b94a1306df31d55055f64a62ff6b763a47b7f64" resolved "https://registry.yarnpkg.com/esbuild-android-64/-/esbuild-android-64-0.14.38.tgz#5b94a1306df31d55055f64a62ff6b763a47b7f64"
@@ -5241,16 +5212,6 @@ extract-zip@2.0.1, extract-zip@^2.0.0:
optionalDependencies: optionalDependencies:
"@types/yauzl" "^2.9.1" "@types/yauzl" "^2.9.1"
extract-zip@^1.6.6:
version "1.7.0"
resolved "https://registry.npmjs.org/extract-zip/-/extract-zip-1.7.0.tgz"
integrity sha512-xoh5G1W/PB0/27lXgMQyIhP5DSY/LhoCsOyZgb+6iMmRtCwVBo55uKaMoEYrDCKQhWvqEip5ZPKAc6eFNyf/MA==
dependencies:
concat-stream "^1.6.2"
debug "^2.6.9"
mkdirp "^0.5.4"
yauzl "^2.10.0"
extsprintf@1.3.0: extsprintf@1.3.0:
version "1.3.0" version "1.3.0"
resolved "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz" resolved "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz"
@@ -6079,13 +6040,13 @@ https-proxy-agent@5.0.0, https-proxy-agent@^5.0.0:
agent-base "6" agent-base "6"
debug "4" debug "4"
https-proxy-agent@^2.2.1: https-proxy-agent@5.0.1:
version "2.2.4" version "5.0.1"
resolved "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.4.tgz" resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6"
integrity sha512-OmvfoQ53WLjtA9HeYP9RNrWMJzzAz1JGaSFr1nijg0PVR1JaD/xbJq1mdEIIlxGpXp9eSe/O2LgU9DJmTPd0Eg== integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==
dependencies: dependencies:
agent-base "^4.3.0" agent-base "6"
debug "^3.1.0" debug "4"
human-signals@^2.1.0: human-signals@^2.1.0:
version "2.1.0" version "2.1.0"
@@ -8351,7 +8312,7 @@ mime@1.6.0:
resolved "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz" resolved "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz"
integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==
mime@^2.0.3, mime@^2.3.1: mime@^2.3.1:
version "2.5.2" version "2.5.2"
resolved "https://registry.npmjs.org/mime/-/mime-2.5.2.tgz" resolved "https://registry.npmjs.org/mime/-/mime-2.5.2.tgz"
integrity sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg== integrity sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg==
@@ -8497,7 +8458,7 @@ mkdirp-infer-owner@^2.0.0:
infer-owner "^1.0.4" infer-owner "^1.0.4"
mkdirp "^1.0.3" mkdirp "^1.0.3"
mkdirp@^0.5.1, mkdirp@^0.5.4, mkdirp@^0.5.5, mkdirp@~0.5.1: mkdirp@^0.5.1, mkdirp@^0.5.5, mkdirp@~0.5.1:
version "0.5.5" version "0.5.5"
resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz" resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz"
integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==
@@ -8534,7 +8495,7 @@ ms@2.1.2:
resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz" resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz"
integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==
ms@^2.0.0, ms@^2.1.1: ms@^2.0.0:
version "2.1.3" version "2.1.3"
resolved "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz" resolved "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz"
integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==
@@ -8587,7 +8548,7 @@ node-fetch@2.6.5:
dependencies: dependencies:
whatwg-url "^5.0.0" whatwg-url "^5.0.0"
node-fetch@^2.6.1: node-fetch@2.6.7, node-fetch@^2.6.1:
version "2.6.7" version "2.6.7"
resolved "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz" resolved "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz"
integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ== integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==
@@ -9863,7 +9824,7 @@ proxy-addr@~2.0.5:
forwarded "0.2.0" forwarded "0.2.0"
ipaddr.js "1.9.1" ipaddr.js "1.9.1"
proxy-from-env@1.1.0, proxy-from-env@^1.0.0, proxy-from-env@^1.1.0: proxy-from-env@1.1.0, proxy-from-env@^1.1.0:
version "1.1.0" version "1.1.0"
resolved "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz" resolved "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz"
integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==
@@ -9886,20 +9847,6 @@ punycode@^2.1.0, punycode@^2.1.1:
resolved "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz" resolved "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz"
integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==
puppeteer@^1.15.0:
version "1.20.0"
resolved "https://registry.npmjs.org/puppeteer/-/puppeteer-1.20.0.tgz"
integrity sha512-bt48RDBy2eIwZPrkgbcwHtb51mj2nKvHOPMaSH2IsWiv7lOG9k9zhaRzpDZafrk05ajMc3cu+lSQYYOfH2DkVQ==
dependencies:
debug "^4.1.0"
extract-zip "^1.6.6"
https-proxy-agent "^2.2.1"
mime "^2.0.3"
progress "^2.0.1"
proxy-from-env "^1.0.0"
rimraf "^2.6.1"
ws "^6.1.0"
puppeteer@^11.0.0: puppeteer@^11.0.0:
version "11.0.0" version "11.0.0"
resolved "https://registry.yarnpkg.com/puppeteer/-/puppeteer-11.0.0.tgz#0808719c38e15315ecc1b1c28911f1c9054d201f" resolved "https://registry.yarnpkg.com/puppeteer/-/puppeteer-11.0.0.tgz#0808719c38e15315ecc1b1c28911f1c9054d201f"
@@ -9918,6 +9865,23 @@ puppeteer@^11.0.0:
unbzip2-stream "1.4.3" unbzip2-stream "1.4.3"
ws "8.2.3" ws "8.2.3"
puppeteer@^17.1.3:
version "17.1.3"
resolved "https://registry.yarnpkg.com/puppeteer/-/puppeteer-17.1.3.tgz#2814cf221925e19c681c69aa97401a68b30240c9"
integrity sha512-tVtvNSOOqlq75rUgwLeDAEQoLIiBqmRg0/zedpI6fuqIocIkuxG23A7FIl1oVSkuSMMLgcOP5kVhNETmsmjvPw==
dependencies:
cross-fetch "3.1.5"
debug "4.3.4"
devtools-protocol "0.0.1036444"
extract-zip "2.0.1"
https-proxy-agent "5.0.1"
progress "2.0.3"
proxy-from-env "1.1.0"
rimraf "3.0.2"
tar-fs "2.1.1"
unbzip2-stream "1.4.3"
ws "8.8.1"
puppeteer@^9.1.1: puppeteer@^9.1.1:
version "9.1.1" version "9.1.1"
resolved "https://registry.npmjs.org/puppeteer/-/puppeteer-9.1.1.tgz" resolved "https://registry.npmjs.org/puppeteer/-/puppeteer-9.1.1.tgz"
@@ -10115,7 +10079,7 @@ readable-stream@3, readable-stream@^3.0.0, readable-stream@^3.0.2, readable-stre
string_decoder "^1.1.1" string_decoder "^1.1.1"
util-deprecate "^1.0.1" util-deprecate "^1.0.1"
readable-stream@^2.0.6, readable-stream@^2.2.2, readable-stream@~2.3.6: readable-stream@^2.0.6, readable-stream@~2.3.6:
version "2.3.7" version "2.3.7"
resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz" resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz"
integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==
@@ -10335,7 +10299,7 @@ rimraf@3.0.2, rimraf@^3.0.0, rimraf@^3.0.2:
dependencies: dependencies:
glob "^7.1.3" glob "^7.1.3"
rimraf@^2.6.1, rimraf@^2.6.2, rimraf@^2.6.3: rimraf@^2.6.2, rimraf@^2.6.3:
version "2.7.1" version "2.7.1"
resolved "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz" resolved "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz"
integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==
@@ -12113,12 +12077,10 @@ ws@8.2.3:
resolved "https://registry.yarnpkg.com/ws/-/ws-8.2.3.tgz#63a56456db1b04367d0b721a0b80cae6d8becbba" resolved "https://registry.yarnpkg.com/ws/-/ws-8.2.3.tgz#63a56456db1b04367d0b721a0b80cae6d8becbba"
integrity sha512-wBuoj1BDpC6ZQ1B7DWQBYVLphPWkm8i9Y0/3YdHjHKHiohOJ1ws+3OccDWtH+PoC9DZD5WOTrJvNbWvjS6JWaA== integrity sha512-wBuoj1BDpC6ZQ1B7DWQBYVLphPWkm8i9Y0/3YdHjHKHiohOJ1ws+3OccDWtH+PoC9DZD5WOTrJvNbWvjS6JWaA==
ws@^6.1.0: ws@8.8.1:
version "6.2.2" version "8.8.1"
resolved "https://registry.npmjs.org/ws/-/ws-6.2.2.tgz" resolved "https://registry.yarnpkg.com/ws/-/ws-8.8.1.tgz#5dbad0feb7ade8ecc99b830c1d77c913d4955ff0"
integrity sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw== integrity sha512-bGy2JzvzkPowEJV++hF07hAD6niYSr0JzBNo/J29WsB57A2r7Wlc1UFcTR9IzrPvuNVO4B8LGqF8qcpsVOhJCA==
dependencies:
async-limiter "~1.0.0"
ws@^7.2.3: ws@^7.2.3:
version "7.5.7" version "7.5.7"