diff --git a/.eslintrc.js b/.eslintrc.js index dc74eca9f15..4a5ad8c996b 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -23,6 +23,8 @@ module.exports = { rules: { // Brackets keep code readable. curly: [2, 'all'], + // Brackets keep code readable and `return` intentions clear. + 'arrow-body-style': ['error', 'always'], // Error if files are not formatted with Prettier correctly. 'prettier/prettier': 2, // syntax preferences @@ -134,6 +136,8 @@ module.exports = { rules: { // Brackets keep code readable. curly: [2, 'all'], + // Brackets keep code readable and `return` intentions clear. + 'arrow-body-style': ['error', 'always'], // Error if comments do not adhere to `tsdoc`. 'tsdoc/syntax': 2, 'no-unused-vars': 0, diff --git a/examples/detect-sniff.js b/examples/detect-sniff.js index 76bb75b386d..b7d8d66fdae 100644 --- a/examples/detect-sniff.js +++ b/examples/detect-sniff.js @@ -38,7 +38,12 @@ function sniffDetector() { const page = await browser.newPage(); await page.evaluateOnNewDocument(sniffDetector); await page.goto('https://www.google.com', { waitUntil: 'networkidle2' }); - console.log('Sniffed: ' + (await page.evaluate(() => !!navigator.sniffed))); + console.log( + 'Sniffed: ' + + (await page.evaluate(() => { + return !!navigator.sniffed; + })) + ); await browser.close(); })(); diff --git a/examples/oopif.js b/examples/oopif.js index 7a8f8e061fb..b147595fea0 100644 --- a/examples/oopif.js +++ b/examples/oopif.js @@ -23,7 +23,9 @@ async function attachFrame(frameId, url) { frame.src = url; frame.id = frameId; document.body.appendChild(frame); - await new Promise((x) => (frame.onload = x)); + await new Promise((x) => { + return (frame.onload = x); + }); return frame; } diff --git a/scripts/ensure-pinned-deps.ts b/scripts/ensure-pinned-deps.ts index ea0d1fc8cbc..98523510722 100644 --- a/scripts/ensure-pinned-deps.ts +++ b/scripts/ensure-pinned-deps.ts @@ -30,7 +30,13 @@ for (const [depKey, depValue] of Object.entries(allDeps)) { if (invalidDeps.size > 0) { console.error('Found non-pinned dependencies in package.json:'); - console.log([...invalidDeps.keys()].map((k) => ` ${k}`).join('\n')); + console.log( + [...invalidDeps.keys()] + .map((k) => { + return ` ${k}`; + }) + .join('\n') + ); process.exit(1); } diff --git a/scripts/test-ts-definition-files.ts b/scripts/test-ts-definition-files.ts index 3241b899832..ba596000a94 100644 --- a/scripts/test-ts-definition-files.ts +++ b/scripts/test-ts-definition-files.ts @@ -171,9 +171,9 @@ function testProject(folder: string) { const result = compileAndCatchErrors(projectLocation); const expectedErrors = EXPECTED_ERRORS.get(folder) || []; if ( - result.tsErrorMesssage.find( - (line) => line.includes('good.ts') || line.includes('good.js') - ) + result.tsErrorMesssage.find((line) => { + return line.includes('good.ts') || line.includes('good.js'); + }) ) { console.error( `Error for ${projectLocation} contained unexpected failures in good.ts/good.js:\n${result.tsErrorMesssage.join( @@ -182,9 +182,9 @@ function testProject(folder: string) { ); process.exit(1); } - const errorsInTsMessage = result.tsErrorMesssage.filter( - (line) => line.includes('bad.ts') || line.includes('bad.js') - ); + const errorsInTsMessage = result.tsErrorMesssage.filter((line) => { + return line.includes('bad.ts') || line.includes('bad.js'); + }); const expectedErrorsThatHaveOccurred = new Set(); const unexpectedErrors = errorsInTsMessage.filter((message) => { const isExpected = expectedErrors.some((expectedError) => { diff --git a/src/common/Accessibility.ts b/src/common/Accessibility.ts index 3a342c7f636..87498604fb9 100644 --- a/src/common/Accessibility.ts +++ b/src/common/Accessibility.ts @@ -193,9 +193,9 @@ export class Accessibility { const defaultRoot = AXNode.createTree(nodes); let needle: AXNode | null = defaultRoot; if (backendNodeId) { - needle = defaultRoot.find( - (node) => node.payload.backendDOMNodeId === backendNodeId - ); + needle = defaultRoot.find((node) => { + return node.payload.backendDOMNodeId === backendNodeId; + }); if (!needle) { return null; } @@ -455,8 +455,9 @@ class AXNode { 'roledescription', 'valuetext', ]; - const getUserStringPropertyValue = (key: UserStringProperty): string => - properties.get(key) as string; + const getUserStringPropertyValue = (key: UserStringProperty): string => { + return properties.get(key) as string; + }; for (const userStringProperty of userStringProperties) { if (!properties.has(userStringProperty)) { @@ -487,8 +488,9 @@ class AXNode { 'required', 'selected', ]; - const getBooleanPropertyValue = (key: BooleanProperty): boolean => - properties.get(key) as boolean; + const getBooleanPropertyValue = (key: BooleanProperty): boolean => { + return properties.get(key) as boolean; + }; for (const booleanProperty of booleanProperties) { // RootWebArea's treat focus differently than other nodes. They report whether @@ -521,8 +523,9 @@ class AXNode { 'valuemax', 'valuemin', ]; - const getNumericalPropertyValue = (key: NumbericalProperty): number => - properties.get(key) as number; + const getNumericalPropertyValue = (key: NumbericalProperty): number => { + return properties.get(key) as number; + }; for (const numericalProperty of numericalProperties) { if (!properties.has(numericalProperty)) { continue; @@ -541,8 +544,9 @@ class AXNode { 'invalid', 'orientation', ]; - const getTokenPropertyValue = (key: TokenProperty): string => - properties.get(key) as string; + const getTokenPropertyValue = (key: TokenProperty): string => { + return properties.get(key) as string; + }; for (const tokenProperty of tokenProperties) { const value = getTokenPropertyValue(tokenProperty); if (!value || value === 'false') { diff --git a/src/common/AriaQueryHandler.ts b/src/common/AriaQueryHandler.ts index c0a23274e9c..01122cb2979 100644 --- a/src/common/AriaQueryHandler.ts +++ b/src/common/AriaQueryHandler.ts @@ -33,14 +33,16 @@ async function queryAXTree( role, }); const filteredNodes: Protocol.Accessibility.AXNode[] = nodes.filter( - (node: Protocol.Accessibility.AXNode) => - !node.role || node.role.value !== 'StaticText' + (node: Protocol.Accessibility.AXNode) => { + return !node.role || node.role.value !== 'StaticText'; + } ); return filteredNodes; } -const normalizeValue = (value: string): string => - value.replace(/ +/g, ' ').trim(); +const normalizeValue = (value: string): string => { + return value.replace(/ +/g, ' ').trim(); +}; const knownAttributes = new Set(['name', 'role']); const attributeRegexp = /\[\s*(?\w+)\s*=\s*(?"|')(?\\.|.*?(?=\k))\k\s*\]/g; @@ -109,12 +111,13 @@ const waitFor = async ( }, }; return domWorld._waitForSelectorInPage( - (_: Element, selector: string) => - ( + (_: Element, selector: string) => { + return ( globalThis as any as unknown as { ariaQuerySelector(selector: string): void; } - ).ariaQuerySelector(selector), + ).ariaQuerySelector(selector); + }, selector, options, binding @@ -129,7 +132,9 @@ const queryAll = async ( const { name, role } = parseAriaSelector(selector); const res = await queryAXTree(exeCtx._client, element, name, role); return Promise.all( - res.map((axNode) => exeCtx._adoptBackendNodeId(axNode.backendDOMNodeId)) + res.map((axNode) => { + return exeCtx._adoptBackendNodeId(axNode.backendDOMNodeId); + }) ); }; @@ -139,10 +144,9 @@ const queryAllArray = async ( ): Promise => { const elementHandles = await queryAll(element, selector); const exeCtx = element.executionContext(); - const jsHandle = exeCtx.evaluateHandle( - (...elements) => elements, - ...elementHandles - ); + const jsHandle = exeCtx.evaluateHandle((...elements) => { + return elements; + }, ...elementHandles); return jsHandle; }; diff --git a/src/common/Browser.ts b/src/common/Browser.ts index e98eeeb6942..3c1740b0066 100644 --- a/src/common/Browser.ts +++ b/src/common/Browser.ts @@ -280,7 +280,11 @@ export class Browser extends EventEmitter { this.#screenshotTaskQueue = new TaskQueue(); this.#connection = connection; this.#closeCallback = closeCallback || function (): void {}; - this.#targetFilterCallback = targetFilterCallback || ((): boolean => true); + this.#targetFilterCallback = + targetFilterCallback || + ((): boolean => { + return true; + }); this.#setIsPageTargetCallback(isPageTargetCallback); this.#defaultContext = new BrowserContext(this.#connection, this); @@ -293,9 +297,9 @@ export class Browser extends EventEmitter { } this.#targets = new Map(); - this.#connection.on(ConnectionEmittedEvents.Disconnected, () => - this.emit(BrowserEmittedEvents.Disconnected) - ); + this.#connection.on(ConnectionEmittedEvents.Disconnected, () => { + return this.emit(BrowserEmittedEvents.Disconnected); + }); this.#connection.on('Target.targetCreated', this.#targetCreated.bind(this)); this.#connection.on( 'Target.targetDestroyed', @@ -423,7 +427,9 @@ export class Browser extends EventEmitter { const target = new Target( targetInfo, context, - () => this.#connection.createSession(targetInfo), + () => { + return this.#connection.createSession(targetInfo); + }, this.#ignoreHTTPSErrors, this.#defaultViewport ?? null, this.#screenshotTaskQueue, @@ -542,18 +548,18 @@ export class Browser extends EventEmitter { * an array with all the targets in all browser contexts. */ targets(): Target[] { - return Array.from(this.#targets.values()).filter( - (target) => target._isInitialized - ); + return Array.from(this.#targets.values()).filter((target) => { + return target._isInitialized; + }); } /** * The target associated with the browser. */ target(): Target { - const browserTarget = this.targets().find( - (target) => target.type() === 'browser' - ); + const browserTarget = this.targets().find((target) => { + return target.type() === 'browser'; + }); if (!browserTarget) { throw new Error('Browser target is not found'); } @@ -581,7 +587,9 @@ export class Browser extends EventEmitter { const { timeout = 30000 } = options; let resolve: (value: Target | PromiseLike) => void; let isResolved = false; - const targetPromise = new Promise((x) => (resolve = x)); + const targetPromise = new Promise((x) => { + return (resolve = x); + }); this.on(BrowserEmittedEvents.TargetCreated, check); this.on(BrowserEmittedEvents.TargetChanged, check); try { @@ -614,10 +622,14 @@ export class Browser extends EventEmitter { */ async pages(): Promise { const contextPages = await Promise.all( - this.browserContexts().map((context) => context.pages()) + this.browserContexts().map((context) => { + return context.pages(); + }) ); // Flatten array. - return contextPages.reduce((acc, x) => acc.concat(x), []); + return contextPages.reduce((acc, x) => { + return acc.concat(x); + }, []); } /** @@ -750,9 +762,9 @@ export class BrowserContext extends EventEmitter { * An array of all active targets inside the browser context. */ targets(): Target[] { - return this.#browser - .targets() - .filter((target) => target.browserContext() === this); + return this.#browser.targets().filter((target) => { + return target.browserContext() === this; + }); } /** @@ -776,10 +788,9 @@ export class BrowserContext extends EventEmitter { predicate: (x: Target) => boolean | Promise, options: { timeout?: number } = {} ): Promise { - return this.#browser.waitForTarget( - (target) => target.browserContext() === this && predicate(target), - options - ); + return this.#browser.waitForTarget((target) => { + return target.browserContext() === this && predicate(target); + }, options); } /** @@ -792,17 +803,22 @@ export class BrowserContext extends EventEmitter { async pages(): Promise { const pages = await Promise.all( this.targets() - .filter( - (target) => + .filter((target) => { + return ( target.type() === 'page' || (target.type() === 'other' && this.#browser._getIsPageTargetCallback()?.( target._getTargetInfo() )) - ) - .map((target) => target.page()) + ); + }) + .map((target) => { + return target.page(); + }) ); - return pages.filter((page): page is Page => !!page); + return pages.filter((page): page is Page => { + return !!page; + }); } /** diff --git a/src/common/BrowserConnector.ts b/src/common/BrowserConnector.ts index 3325970a30e..a004bd22f9f 100644 --- a/src/common/BrowserConnector.ts +++ b/src/common/BrowserConnector.ts @@ -119,7 +119,9 @@ export async function _connectToBrowser( ignoreHTTPSErrors, defaultViewport, undefined, - () => connection.send('Browser.close').catch(debugError), + () => { + return connection.send('Browser.close').catch(debugError); + }, targetFilter, isPageTarget ); diff --git a/src/common/BrowserWebSocketTransport.ts b/src/common/BrowserWebSocketTransport.ts index ad300232e8c..eb02a51568a 100644 --- a/src/common/BrowserWebSocketTransport.ts +++ b/src/common/BrowserWebSocketTransport.ts @@ -20,9 +20,9 @@ export class BrowserWebSocketTransport implements ConnectionTransport { return new Promise((resolve, reject) => { const ws = new WebSocket(url); - ws.addEventListener('open', () => - resolve(new BrowserWebSocketTransport(ws)) - ); + ws.addEventListener('open', () => { + return resolve(new BrowserWebSocketTransport(ws)); + }); ws.addEventListener('error', reject); }); } diff --git a/src/common/Connection.ts b/src/common/Connection.ts index e1886680ab5..623fc4324c4 100644 --- a/src/common/Connection.ts +++ b/src/common/Connection.ts @@ -130,7 +130,9 @@ export class Connection extends EventEmitter { async #onMessage(message: string): Promise { if (this.#delay) { - await new Promise((f) => setTimeout(f, this.#delay)); + await new Promise((f) => { + return setTimeout(f, this.#delay); + }); } debugProtocolReceive(message); const object = JSON.parse(message); diff --git a/src/common/Coverage.ts b/src/common/Coverage.ts index 0443db60e64..31a821a4be9 100644 --- a/src/common/Coverage.ts +++ b/src/common/Coverage.ts @@ -480,5 +480,7 @@ function convertToDisjointRanges( } } // Filter out empty ranges. - return results.filter((range) => range.end - range.start > 1); + return results.filter((range) => { + return range.end - range.start > 1; + }); } diff --git a/src/common/DOMWorld.ts b/src/common/DOMWorld.ts index 4ed27b8183f..1b6818fc9d4 100644 --- a/src/common/DOMWorld.ts +++ b/src/common/DOMWorld.ts @@ -108,8 +108,9 @@ export class DOMWorld { return this.#boundFunctions; } - static #bindingIdentifier = (name: string, contextId: number) => - `${name}_${contextId}`; + static #bindingIdentifier = (name: string, contextId: number) => { + return `${name}_${contextId}`; + }; constructor( client: CDPSession, @@ -444,7 +445,9 @@ export class DOMWorld { script.id = id; } let error = null; - script.onerror = (e) => (error = e); + script.onerror = (e) => { + return (error = e); + }; document.head.appendChild(script); if (error) { throw error; @@ -843,7 +846,9 @@ export class DOMWorld { } async title(): Promise { - return this.evaluate(() => document.title); + return this.evaluate(() => { + return document.title; + }); } } @@ -933,10 +938,9 @@ export class WaitTask { const timeoutError = new TimeoutError( `waiting for ${options.title} failed: timeout ${options.timeout}ms exceeded` ); - this.#timeoutTimer = setTimeout( - () => this.terminate(timeoutError), - options.timeout - ); + this.#timeoutTimer = setTimeout(() => { + return this.terminate(timeoutError); + }, options.timeout); } this.rerun(); } @@ -987,7 +991,13 @@ export class WaitTask { // throw an error - ignore this predicate run altogether. if ( !error && - (await this.#domWorld.evaluate((s) => !s, success).catch(() => true)) + (await this.#domWorld + .evaluate((s) => { + return !s; + }, success) + .catch(() => { + return true; + })) ) { if (!success) { throw new Error('Assertion: result handle is not available'); @@ -1053,7 +1063,9 @@ async function waitForPredicatePageFunction( const predicate = new Function('...args', predicateBody); let timedOut = false; if (timeout) { - setTimeout(() => (timedOut = true), timeout); + setTimeout(() => { + return (timedOut = true); + }, timeout); } switch (polling) { case 'raf': @@ -1073,7 +1085,9 @@ async function waitForPredicatePageFunction( } let fulfill = (_?: unknown) => {}; - const result = new Promise((x) => (fulfill = x)); + const result = new Promise((x) => { + return (fulfill = x); + }); const observer = new MutationObserver(async () => { if (timedOut) { observer.disconnect(); @@ -1100,7 +1114,9 @@ async function waitForPredicatePageFunction( async function pollRaf(): Promise { let fulfill = (_?: unknown): void => {}; - const result = new Promise((x) => (fulfill = x)); + const result = new Promise((x) => { + return (fulfill = x); + }); await onRaf(); return result; @@ -1122,7 +1138,9 @@ async function waitForPredicatePageFunction( async function pollInterval(pollInterval: number): Promise { let fulfill = (_?: unknown): void => {}; - const result = new Promise((x) => (fulfill = x)); + const result = new Promise((x) => { + return (fulfill = x); + }); await onTimeout(); return result; diff --git a/src/common/FrameManager.ts b/src/common/FrameManager.ts index 8af2bb28394..be4a21f80c5 100644 --- a/src/common/FrameManager.ts +++ b/src/common/FrameManager.ts @@ -166,9 +166,9 @@ export class FrameManager extends EventEmitter { this.#handleFrameTree(client, frameTree); await Promise.all([ client.send('Page.setLifecycleEventsEnabled', { enabled: true }), - client - .send('Runtime.enable') - .then(() => this._ensureIsolatedWorld(client, UTILITY_WORLD_NAME)), + client.send('Runtime.enable').then(() => { + return this._ensureIsolatedWorld(client, UTILITY_WORLD_NAME); + }), // TODO: Network manager is not aware of OOP iframes yet. client === this.#client ? this.#networkManager.initialize() @@ -443,16 +443,18 @@ export class FrameManager extends EventEmitter { // Frames might be removed before we send this. await Promise.all( this.frames() - .filter((frame) => frame._client() === session) - .map((frame) => - session + .filter((frame) => { + return frame._client() === session; + }) + .map((frame) => { + return session .send('Page.createIsolatedWorld', { frameId: frame._id, worldName: name, grantUniveralAccess: true, }) - .catch(debugError) - ) + .catch(debugError); + }) ); } @@ -1281,9 +1283,9 @@ export class Frame { return this.waitForSelector(string, options); } if (isNumber(selectorOrFunctionOrTimeout)) { - return new Promise((fulfill) => - setTimeout(fulfill, selectorOrFunctionOrTimeout) - ); + return new Promise((fulfill) => { + return setTimeout(fulfill, selectorOrFunctionOrTimeout); + }); } if (typeof selectorOrFunctionOrTimeout === 'function') { return this.waitForFunction( diff --git a/src/common/HTTPRequest.ts b/src/common/HTTPRequest.ts index 4eeddae5b95..02a759344cf 100644 --- a/src/common/HTTPRequest.ts +++ b/src/common/HTTPRequest.ts @@ -269,10 +269,9 @@ export class HTTPRequest { * the request interception. */ async finalizeInterceptions(): Promise { - await this.#interceptHandlers.reduce( - (promiseChain, interceptAction) => promiseChain.then(interceptAction), - Promise.resolve() - ); + await this.#interceptHandlers.reduce((promiseChain, interceptAction) => { + return promiseChain.then(interceptAction); + }, Promise.resolve()); const { action } = this.interceptResolutionState(); switch (action) { case 'abort': @@ -576,7 +575,9 @@ export class HTTPRequest { const value = response.headers[header]; responseHeaders[header.toLowerCase()] = Array.isArray(value) - ? value.map((item) => String(item)) + ? value.map((item) => { + return String(item); + }) : String(value); } } @@ -738,7 +739,11 @@ function headersArray( if (!Object.is(value, undefined)) { const values = Array.isArray(value) ? value : [value]; - result.push(...values.map((value) => ({ name, value: value + '' }))); + result.push( + ...values.map((value) => { + return { name, value: value + '' }; + }) + ); } } return result; diff --git a/src/common/Input.ts b/src/common/Input.ts index ef3554f7106..e452adff57e 100644 --- a/src/common/Input.ts +++ b/src/common/Input.ts @@ -277,7 +277,9 @@ export class Keyboard { await this.press(char, { delay }); } else { if (delay) { - await new Promise((f) => setTimeout(f, delay)); + await new Promise((f) => { + return setTimeout(f, delay); + }); } await this.sendCharacter(char); } @@ -311,7 +313,9 @@ export class Keyboard { const { delay = null } = options; await this.down(key, options); if (delay) { - await new Promise((f) => setTimeout(f, options.delay)); + await new Promise((f) => { + return setTimeout(f, options.delay); + }); } await this.up(key); } @@ -453,7 +457,9 @@ export class Mouse { if (delay !== null) { await this.move(x, y); await this.down(options); - await new Promise((f) => setTimeout(f, delay)); + await new Promise((f) => { + return setTimeout(f, delay); + }); await this.up(options); } else { await this.move(x, y); @@ -535,9 +541,9 @@ export class Mouse { */ async drag(start: Point, target: Point): Promise { const promise = new Promise((resolve) => { - this.#client.once('Input.dragIntercepted', (event) => - resolve(event.data) - ); + this.#client.once('Input.dragIntercepted', (event) => { + return resolve(event.data); + }); }); await this.move(start.x, start.y); await this.down(); @@ -608,7 +614,9 @@ export class Mouse { await this.dragEnter(target, data); await this.dragOver(target, data); if (delay) { - await new Promise((resolve) => setTimeout(resolve, delay)); + await new Promise((resolve) => { + return setTimeout(resolve, delay); + }); } await this.drop(target, data); await this.up(); diff --git a/src/common/JSHandle.ts b/src/common/JSHandle.ts index 533f890bd91..a1ebb20e520 100644 --- a/src/common/JSHandle.ts +++ b/src/common/JSHandle.ts @@ -86,8 +86,15 @@ export function _createJSHandle( return new JSHandle(context, context._client, remoteObject); } -const applyOffsetsToQuad = (quad: Point[], offsetX: number, offsetY: number) => - quad.map((part) => ({ x: part.x + offsetX, y: part.y + offsetY })); +const applyOffsetsToQuad = ( + quad: Point[], + offsetX: number, + offsetY: number +) => { + return quad.map((part) => { + return { x: part.x + offsetX, y: part.y + offsetY }; + }); +}; /** * Represents an in-page JavaScript object. JSHandles can be created with the @@ -634,12 +641,18 @@ export class ElementHandle< layoutMetrics.cssLayoutViewport || layoutMetrics.layoutViewport; const { offsetX, offsetY } = await this.#getOOPIFOffsets(this.#frame); const quads = result.quads - .map((quad) => this.#fromProtocolQuad(quad)) - .map((quad) => applyOffsetsToQuad(quad, offsetX, offsetY)) - .map((quad) => - this.#intersectQuadWithViewport(quad, clientWidth, clientHeight) - ) - .filter((quad) => computeQuadArea(quad) > 1); + .map((quad) => { + return this.#fromProtocolQuad(quad); + }) + .map((quad) => { + return applyOffsetsToQuad(quad, offsetX, offsetY); + }) + .map((quad) => { + return this.#intersectQuadWithViewport(quad, clientWidth, clientHeight); + }) + .filter((quad) => { + return computeQuadArea(quad) > 1; + }); if (!quads.length) { throw new Error('Node is either not clickable or not an HTMLElement'); } @@ -683,9 +696,9 @@ export class ElementHandle< const params: Protocol.DOM.GetBoxModelRequest = { objectId: this._remoteObject.objectId, }; - return this._client - .send('DOM.getBoxModel', params) - .catch((error) => debugError(error)); + return this._client.send('DOM.getBoxModel', params).catch((error) => { + return debugError(error); + }); } #fromProtocolQuad(quad: number[]): Point[] { @@ -702,10 +715,12 @@ export class ElementHandle< width: number, height: number ): Point[] { - return quad.map((point) => ({ - x: Math.min(Math.max(point.x, 0), width), - y: Math.min(Math.max(point.y, 0), height), - })); + return quad.map((point) => { + return { + x: Math.min(Math.max(point.x, 0), width), + y: Math.min(Math.max(point.y, 0), height), + }; + }); } /** @@ -930,9 +945,9 @@ export class ElementHandle< * Calls {@link https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/focus | focus} on the element. */ async focus(): Promise { - await (this as ElementHandle).evaluate((element) => - element.focus() - ); + await (this as ElementHandle).evaluate((element) => { + return element.focus(); + }); } /** diff --git a/src/common/LifecycleWatcher.ts b/src/common/LifecycleWatcher.ts index b44e314e34e..25e50ad4d1b 100644 --- a/src/common/LifecycleWatcher.ts +++ b/src/common/LifecycleWatcher.ts @@ -214,9 +214,9 @@ export class LifecycleWatcher { } const errorMessage = 'Navigation timeout of ' + this.#timeout + ' ms exceeded'; - await new Promise( - (fulfill) => (this.#maximumTimer = setTimeout(fulfill, this.#timeout)) - ); + await new Promise((fulfill) => { + return (this.#maximumTimer = setTimeout(fulfill, this.#timeout)); + }); return new TimeoutError(errorMessage); } diff --git a/src/common/Page.ts b/src/common/Page.ts index b22f9c993ee..f21bb9742dc 100644 --- a/src/common/Page.ts +++ b/src/common/Page.ts @@ -554,49 +554,67 @@ export class Page extends EventEmitter { this.emit(PageEmittedEvents.WorkerDestroyed, worker); }); - this.#frameManager.on(FrameManagerEmittedEvents.FrameAttached, (event) => - this.emit(PageEmittedEvents.FrameAttached, event) - ); - this.#frameManager.on(FrameManagerEmittedEvents.FrameDetached, (event) => - this.emit(PageEmittedEvents.FrameDetached, event) - ); - this.#frameManager.on(FrameManagerEmittedEvents.FrameNavigated, (event) => - this.emit(PageEmittedEvents.FrameNavigated, event) - ); + this.#frameManager.on(FrameManagerEmittedEvents.FrameAttached, (event) => { + return this.emit(PageEmittedEvents.FrameAttached, event); + }); + this.#frameManager.on(FrameManagerEmittedEvents.FrameDetached, (event) => { + return this.emit(PageEmittedEvents.FrameDetached, event); + }); + this.#frameManager.on(FrameManagerEmittedEvents.FrameNavigated, (event) => { + return this.emit(PageEmittedEvents.FrameNavigated, event); + }); const networkManager = this.#frameManager.networkManager(); - networkManager.on(NetworkManagerEmittedEvents.Request, (event) => - this.emit(PageEmittedEvents.Request, event) - ); + networkManager.on(NetworkManagerEmittedEvents.Request, (event) => { + return this.emit(PageEmittedEvents.Request, event); + }); networkManager.on( NetworkManagerEmittedEvents.RequestServedFromCache, - (event) => this.emit(PageEmittedEvents.RequestServedFromCache, event) - ); - networkManager.on(NetworkManagerEmittedEvents.Response, (event) => - this.emit(PageEmittedEvents.Response, event) - ); - networkManager.on(NetworkManagerEmittedEvents.RequestFailed, (event) => - this.emit(PageEmittedEvents.RequestFailed, event) - ); - networkManager.on(NetworkManagerEmittedEvents.RequestFinished, (event) => - this.emit(PageEmittedEvents.RequestFinished, event) + (event) => { + return this.emit(PageEmittedEvents.RequestServedFromCache, event); + } ); + networkManager.on(NetworkManagerEmittedEvents.Response, (event) => { + return this.emit(PageEmittedEvents.Response, event); + }); + networkManager.on(NetworkManagerEmittedEvents.RequestFailed, (event) => { + return this.emit(PageEmittedEvents.RequestFailed, event); + }); + networkManager.on(NetworkManagerEmittedEvents.RequestFinished, (event) => { + return this.emit(PageEmittedEvents.RequestFinished, event); + }); this.#fileChooserInterceptors = new Set(); - client.on('Page.domContentEventFired', () => - this.emit(PageEmittedEvents.DOMContentLoaded) - ); - client.on('Page.loadEventFired', () => this.emit(PageEmittedEvents.Load)); - client.on('Runtime.consoleAPICalled', (event) => this.#onConsoleAPI(event)); - client.on('Runtime.bindingCalled', (event) => this.#onBindingCalled(event)); - client.on('Page.javascriptDialogOpening', (event) => this.#onDialog(event)); - client.on('Runtime.exceptionThrown', (exception) => - this.#handleException(exception.exceptionDetails) - ); - client.on('Inspector.targetCrashed', () => this.#onTargetCrashed()); - client.on('Performance.metrics', (event) => this.#emitMetrics(event)); - client.on('Log.entryAdded', (event) => this.#onLogEntryAdded(event)); - client.on('Page.fileChooserOpened', (event) => this.#onFileChooser(event)); + client.on('Page.domContentEventFired', () => { + return this.emit(PageEmittedEvents.DOMContentLoaded); + }); + client.on('Page.loadEventFired', () => { + return this.emit(PageEmittedEvents.Load); + }); + client.on('Runtime.consoleAPICalled', (event) => { + return this.#onConsoleAPI(event); + }); + client.on('Runtime.bindingCalled', (event) => { + return this.#onBindingCalled(event); + }); + client.on('Page.javascriptDialogOpening', (event) => { + return this.#onDialog(event); + }); + client.on('Runtime.exceptionThrown', (exception) => { + return this.#handleException(exception.exceptionDetails); + }); + client.on('Inspector.targetCrashed', () => { + return this.#onTargetCrashed(); + }); + client.on('Performance.metrics', (event) => { + return this.#emitMetrics(event); + }); + client.on('Log.entryAdded', (event) => { + return this.#onLogEntryAdded(event); + }); + client.on('Page.fileChooserOpened', (event) => { + return this.#onFileChooser(event); + }); this.#target._isClosedPromise.then(() => { this.emit(PageEmittedEvents.Close); this.#closed = true; @@ -662,9 +680,9 @@ export class Page extends EventEmitter { const wrap = this.#handlerMap.get(handler) || ((event: HTTPRequest) => { - event.enqueueInterceptAction(() => - handler(event as PageEventObject[K]) - ); + event.enqueueInterceptAction(() => { + return handler(event as PageEventObject[K]); + }); }); this.#handlerMap.set(handler, wrap); @@ -727,7 +745,9 @@ export class Page extends EventEmitter { const { timeout = this.#timeoutSettings.timeout() } = options; let callback!: (value: FileChooser | PromiseLike) => void; - const promise = new Promise((x) => (callback = x)); + const promise = new Promise((x) => { + return (callback = x); + }); this.#fileChooserInterceptors.add(callback); return waitWithTimeout( promise, @@ -808,7 +828,9 @@ export class Page extends EventEmitter { #onLogEntryAdded(event: Protocol.Log.EntryAddedEvent): void { const { level, text, args, source, url, lineNumber } = event.entry; if (args) { - args.map((arg) => releaseObject(this.#client, arg)); + args.map((arg) => { + return releaseObject(this.#client, arg); + }); } if (source !== 'worker') { this.emit( @@ -1455,7 +1477,9 @@ export class Page extends EventEmitter { source: expression, }); await Promise.all( - this.frames().map((frame) => frame.evaluate(expression).catch(debugError)) + this.frames().map((frame) => { + return frame.evaluate(expression).catch(debugError); + }) ); } @@ -1585,7 +1609,9 @@ export class Page extends EventEmitter { event.executionContextId, this.#client ); - const values = event.args.map((arg) => _createJSHandle(context, arg)); + const values = event.args.map((arg) => { + return _createJSHandle(context, arg); + }); this.#addConsoleMessage(event.type, values, event.stackTrace); } @@ -1636,7 +1662,9 @@ export class Page extends EventEmitter { stackTrace?: Protocol.Runtime.StackTrace ): void { if (!this.listenerCount(PageEmittedEvents.Console)) { - args.forEach((arg) => arg.dispose()); + args.forEach((arg) => { + return arg.dispose(); + }); return; } const textTokens = []; @@ -1882,11 +1910,11 @@ export class Page extends EventEmitter { #sessionClosePromise(): Promise { if (!this.#disconnectPromise) { - this.#disconnectPromise = new Promise((fulfill) => - this.#client.once(CDPSessionEmittedEvents.Disconnected, () => - fulfill(new Error('Target closed')) - ) - ); + this.#disconnectPromise = new Promise((fulfill) => { + return this.#client.once(CDPSessionEmittedEvents.Disconnected, () => { + return fulfill(new Error('Target closed')); + }); + }); } return this.#disconnectPromise; } @@ -2010,7 +2038,9 @@ export class Page extends EventEmitter { }); let idleTimer: NodeJS.Timeout; - const onIdle = () => idleResolveCallback(); + const onIdle = () => { + return idleResolveCallback(); + }; const cleanup = () => { idleTimer && clearTimeout(idleTimer); @@ -2031,8 +2061,15 @@ export class Page extends EventEmitter { return false; }; - const listenToEvent = (event: symbol) => - waitForEvent(networkManager, event, eventHandler, timeout, abortPromise); + const listenToEvent = (event: symbol) => { + return waitForEvent( + networkManager, + event, + eventHandler, + timeout, + abortPromise + ); + }; const eventPromises = [ listenToEvent(NetworkManagerEmittedEvents.Request), @@ -2080,8 +2117,9 @@ export class Page extends EventEmitter { let predicate: (frame: Frame) => Promise; if (isString(urlOrPredicate)) { - predicate = (frame: Frame) => - Promise.resolve(urlOrPredicate === frame.url()); + predicate = (frame: Frame) => { + return Promise.resolve(urlOrPredicate === frame.url()); + }; } else { predicate = (frame: Frame) => { const value = urlOrPredicate(frame); @@ -2799,9 +2837,9 @@ export class Page extends EventEmitter { 'Expected options.clip.height not to be 0.' ); } - return this.#screenshotTaskQueue.postTask(() => - this.#screenshotTask(screenshotType, options) - ); + return this.#screenshotTaskQueue.postTask(() => { + return this.#screenshotTask(screenshotType, options); + }); } async #screenshotTask( diff --git a/src/common/QueryHandler.ts b/src/common/QueryHandler.ts index 7c359f107ac..0f0c58ba8e6 100644 --- a/src/common/QueryHandler.ts +++ b/src/common/QueryHandler.ts @@ -78,7 +78,9 @@ function makeQueryHandler(handler: CustomQueryHandler): InternalQueryHandler { domWorld: DOMWorld, selector: string, options: WaitForSelectorOptions - ) => domWorld._waitForSelectorInPage(queryOne, selector, options); + ) => { + return domWorld._waitForSelectorInPage(queryOne, selector, options); + }; } if (handler.queryAll) { @@ -99,7 +101,9 @@ function makeQueryHandler(handler: CustomQueryHandler): InternalQueryHandler { internalHandler.queryAllArray = async (element, selector) => { const resultHandle = await element.evaluateHandle(queryAll, selector); const arrayHandle = await resultHandle.evaluateHandle( - (res: Element[] | NodeListOf) => Array.from(res) + (res: Element[] | NodeListOf) => { + return Array.from(res); + } ); return arrayHandle; }; @@ -109,10 +113,12 @@ function makeQueryHandler(handler: CustomQueryHandler): InternalQueryHandler { } const _defaultHandler = makeQueryHandler({ - queryOne: (element: Element | Document, selector: string) => - element.querySelector(selector), - queryAll: (element: Element | Document, selector: string) => - element.querySelectorAll(selector), + queryOne: (element: Element | Document, selector: string) => { + return element.querySelector(selector); + }, + queryAll: (element: Element | Document, selector: string) => { + return element.querySelectorAll(selector); + }, }); const pierceHandler = makeQueryHandler({ @@ -205,7 +211,9 @@ export function _unregisterCustomQueryHandler(name: string): void { * @internal */ export function _customQueryHandlerNames(): string[] { - return [...queryHandlers.keys()].filter((name) => !builtInHandlers.has(name)); + return [...queryHandlers.keys()].filter((name) => { + return !builtInHandlers.has(name); + }); } /** diff --git a/src/common/Target.ts b/src/common/Target.ts index 7b5c02459f2..954e9f361aa 100644 --- a/src/common/Target.ts +++ b/src/common/Target.ts @@ -84,9 +84,9 @@ export class Target { this.#defaultViewport = defaultViewport ?? undefined; this.#screenshotTaskQueue = screenshotTaskQueue; this._isPageTargetCallback = isPageTargetCallback; - this._initializedPromise = new Promise( - (fulfill) => (this._initializedCallback = fulfill) - ).then(async (success) => { + this._initializedPromise = new Promise((fulfill) => { + return (this._initializedCallback = fulfill); + }).then(async (success) => { if (!success) { return false; } @@ -102,9 +102,9 @@ export class Target { openerPage.emit(PageEmittedEvents.Popup, popupPage); return true; }); - this._isClosedPromise = new Promise( - (fulfill) => (this._closedCallback = fulfill) - ); + this._isClosedPromise = new Promise((fulfill) => { + return (this._closedCallback = fulfill); + }); this._isInitialized = !this._isPageTargetCallback(this.#targetInfo) || this.#targetInfo.url !== ''; @@ -132,15 +132,15 @@ export class Target { */ async page(): Promise { if (this._isPageTargetCallback(this.#targetInfo) && !this.#pagePromise) { - this.#pagePromise = this.#sessionFactory().then((client) => - Page._create( + this.#pagePromise = this.#sessionFactory().then((client) => { + return Page._create( client, this, this.#ignoreHTTPSErrors, this.#defaultViewport ?? null, this.#screenshotTaskQueue - ) - ); + ); + }); } return (await this.#pagePromise) ?? null; } @@ -157,15 +157,14 @@ export class Target { } if (!this.#workerPromise) { // TODO(einbinder): Make workers send their console logs. - this.#workerPromise = this.#sessionFactory().then( - (client) => - new WebWorker( - client, - this.#targetInfo.url, - () => {} /* consoleAPICalled */, - () => {} /* exceptionThrown */ - ) - ); + this.#workerPromise = this.#sessionFactory().then((client) => { + return new WebWorker( + client, + this.#targetInfo.url, + () => {} /* consoleAPICalled */, + () => {} /* exceptionThrown */ + ); + }); } return this.#workerPromise; } diff --git a/src/common/TaskQueue.ts b/src/common/TaskQueue.ts index eabff2b0fca..1403f2ee95e 100644 --- a/src/common/TaskQueue.ts +++ b/src/common/TaskQueue.ts @@ -24,8 +24,12 @@ export class TaskQueue { postTask(task: () => Promise): Promise { const result = this.#chain.then(task); this.#chain = result.then( - () => undefined, - () => undefined + () => { + return undefined; + }, + () => { + return undefined; + } ); return result; } diff --git a/src/common/Tracing.ts b/src/common/Tracing.ts index 26585bd45ce..686a7a5911d 100644 --- a/src/common/Tracing.ts +++ b/src/common/Tracing.ts @@ -94,9 +94,15 @@ export class Tracing { } const excludedCategories = categories - .filter((cat) => cat.startsWith('-')) - .map((cat) => cat.slice(1)); - const includedCategories = categories.filter((cat) => !cat.startsWith('-')); + .filter((cat) => { + return cat.startsWith('-'); + }) + .map((cat) => { + return cat.slice(1); + }); + const includedCategories = categories.filter((cat) => { + return !cat.startsWith('-'); + }); this.#path = path; this.#recording = true; diff --git a/src/common/WebWorker.ts b/src/common/WebWorker.ts index cff74c41622..5d5645a1434 100644 --- a/src/common/WebWorker.ts +++ b/src/common/WebWorker.ts @@ -79,31 +79,32 @@ export class WebWorker extends EventEmitter { super(); this.#client = client; this.#url = url; - this.#executionContextPromise = new Promise( - (x) => (this.#executionContextCallback = x) - ); + this.#executionContextPromise = new Promise((x) => { + return (this.#executionContextCallback = x); + }); let jsHandleFactory: JSHandleFactory; this.#client.once('Runtime.executionContextCreated', async (event) => { // eslint-disable-next-line @typescript-eslint/explicit-function-return-type - jsHandleFactory = (remoteObject) => - new JSHandle(executionContext, client, remoteObject); + jsHandleFactory = (remoteObject) => { + return new JSHandle(executionContext, client, remoteObject); + }; const executionContext = new ExecutionContext(client, event.context); this.#executionContextCallback(executionContext); }); // This might fail if the target is closed before we receive all execution contexts. this.#client.send('Runtime.enable').catch(debugError); - this.#client.on('Runtime.consoleAPICalled', (event) => - consoleAPICalled( + this.#client.on('Runtime.consoleAPICalled', (event) => { + return consoleAPICalled( event.type, event.args.map(jsHandleFactory), event.stackTrace - ) - ); - this.#client.on('Runtime.exceptionThrown', (exception) => - exceptionThrown(exception.exceptionDetails) - ); + ); + }); + this.#client.on('Runtime.exceptionThrown', (exception) => { + return exceptionThrown(exception.exceptionDetails); + }); } /** diff --git a/src/common/util.ts b/src/common/util.ts index 59006346c85..f1e86a1aa7a 100644 --- a/src/common/util.ts +++ b/src/common/util.ts @@ -212,9 +212,9 @@ export function pageBindingInitString(type: string, name: string): string { } const seq = (me.lastSeq || 0) + 1; me.lastSeq = seq; - const promise = new Promise((resolve, reject) => - callbacks.set(seq, { resolve, reject }) - ); + const promise = new Promise((resolve, reject) => { + return callbacks.set(seq, { resolve, reject }); + }); binding(JSON.stringify({ type, name: bindingName, seq, args })); return promise; }; @@ -318,10 +318,14 @@ export async function waitWithTimeout( const timeoutError = new TimeoutError( `waiting for ${taskName} failed: timeout ${timeout}ms exceeded` ); - const timeoutPromise = new Promise((_res, rej) => (reject = rej)); + const timeoutPromise = new Promise((_res, rej) => { + return (reject = rej); + }); let timeoutTimer = null; if (timeout) { - timeoutTimer = setTimeout(() => reject(timeoutError), timeout); + timeoutTimer = setTimeout(() => { + return reject(timeoutError); + }, timeout); } try { return await Promise.race([promise, timeoutPromise]); diff --git a/src/node/BrowserFetcher.ts b/src/node/BrowserFetcher.ts index 9ccfa06139b..411b1a611fb 100644 --- a/src/node/BrowserFetcher.ts +++ b/src/node/BrowserFetcher.ts @@ -143,7 +143,9 @@ const chmodAsync = promisify(fs.chmod.bind(fs)); function existsAsync(filePath: string): Promise { return new Promise((resolve) => { - fs.access(filePath, (err) => resolve(!err)); + fs.access(filePath, (err) => { + return resolve(!err); + }); }); } @@ -365,14 +367,19 @@ export class BrowserFetcher { } const fileNames = await readdirAsync(this.#downloadsFolder); return fileNames - .map((fileName) => parseFolderPath(this.#product, fileName)) + .map((fileName) => { + return parseFolderPath(this.#product, fileName); + }) .filter( ( entry - ): entry is { product: string; platform: string; revision: string } => - (entry && entry.platform === this.#platform) ?? false + ): entry is { product: string; platform: string; revision: string } => { + return (entry && entry.platform === this.#platform) ?? false; + } ) - .map((entry) => entry.revision); + .map((entry) => { + return entry.revision; + }); } /** @@ -388,7 +395,9 @@ export class BrowserFetcher { await existsAsync(folderPath), `Failed to remove: revision ${revision} is not downloaded` ); - await new Promise((fulfill) => removeRecursive(folderPath, fulfill)); + await new Promise((fulfill) => { + return removeRecursive(folderPath, fulfill); + }); } /** @@ -518,15 +527,21 @@ function _downloadFile( return; } const file = fs.createWriteStream(destinationPath); - file.on('finish', () => fulfill()); - file.on('error', (error) => reject(error)); + file.on('finish', () => { + return fulfill(); + }); + file.on('error', (error) => { + return reject(error); + }); response.pipe(file); totalBytes = parseInt(response.headers['content-length']!, 10); if (progressCallback) { response.on('data', onData); } }); - request.on('error', (error) => reject(error)); + request.on('error', (error) => { + return reject(error); + }); return promise; function onData(chunk: string): void { @@ -542,9 +557,9 @@ function install(archivePath: string, folderPath: string): Promise { } else if (archivePath.endsWith('.tar.bz2')) { return _extractTar(archivePath, folderPath); } else if (archivePath.endsWith('.dmg')) { - return mkdirAsync(folderPath).then(() => - _installDMG(archivePath, folderPath) - ); + return mkdirAsync(folderPath).then(() => { + return _installDMG(archivePath, folderPath); + }); } else { throw new Error(`Unsupported archive format: ${archivePath}`); } @@ -582,9 +597,9 @@ function _installDMG(dmgPath: string, folderPath: string): Promise { mountPath = volumes[0]!; readdirAsync(mountPath) .then((fileNames) => { - const appName = fileNames.find( - (item) => typeof item === 'string' && item.endsWith('.app') - ); + const appName = fileNames.find((item) => { + return typeof item === 'string' && item.endsWith('.app'); + }); if (!appName) { return reject(new Error(`Cannot find app in ${mountPath}`)); } diff --git a/src/node/BrowserRunner.ts b/src/node/BrowserRunner.ts index a17e53d7c75..0e3a28c471a 100644 --- a/src/node/BrowserRunner.ts +++ b/src/node/BrowserRunner.ts @@ -286,9 +286,15 @@ function waitForWSEndpoint( return new Promise((resolve, reject) => { const listeners = [ addEventListener(rl, 'line', onLine), - addEventListener(rl, 'close', () => onClose()), - addEventListener(browserProcess, 'exit', () => onClose()), - addEventListener(browserProcess, 'error', (error) => onClose(error)), + addEventListener(rl, 'close', () => { + return onClose(); + }), + addEventListener(browserProcess, 'exit', () => { + return onClose(); + }), + addEventListener(browserProcess, 'error', (error) => { + return onClose(error); + }), ]; const timeoutId = timeout ? setTimeout(onTimeout, timeout) : 0; diff --git a/src/node/Launcher.ts b/src/node/Launcher.ts index 0e430968614..4fe005eb97f 100644 --- a/src/node/Launcher.ts +++ b/src/node/Launcher.ts @@ -35,7 +35,9 @@ import { import { Product } from '../common/Product.js'; -const tmpDir = () => process.env['PUPPETEER_TMP_DIR'] || os.tmpdir(); +const tmpDir = () => { + return process.env['PUPPETEER_TMP_DIR'] || os.tmpdir(); +}; /** * Describes a launcher - a class that is able to create and launch a browser instance. @@ -100,18 +102,18 @@ class ChromeLauncher implements ProductLauncher { chromeArguments.push(...this.defaultArgs(options)); } else if (Array.isArray(ignoreDefaultArgs)) { chromeArguments.push( - ...this.defaultArgs(options).filter( - (arg) => !ignoreDefaultArgs.includes(arg) - ) + ...this.defaultArgs(options).filter((arg) => { + return !ignoreDefaultArgs.includes(arg); + }) ); } else { chromeArguments.push(...args); } if ( - !chromeArguments.some((argument) => - argument.startsWith('--remote-debugging-') - ) + !chromeArguments.some((argument) => { + return argument.startsWith('--remote-debugging-'); + }) ) { if (pipe) { assert( @@ -202,7 +204,12 @@ class ChromeLauncher implements ProductLauncher { if (waitForInitialPage) { try { - await browser.waitForTarget((t) => t.type() === 'page', { timeout }); + await browser.waitForTarget( + (t) => { + return t.type() === 'page'; + }, + { timeout } + ); } catch (error) { await browser.close(); throw error; @@ -264,7 +271,11 @@ class ChromeLauncher implements ProductLauncher { '--mute-audio' ); } - if (args.every((arg) => arg.startsWith('-'))) { + if ( + args.every((arg) => { + return arg.startsWith('-'); + }) + ) { chromeArguments.push('about:blank'); } chromeArguments.push(...args); @@ -337,18 +348,18 @@ class FirefoxLauncher implements ProductLauncher { firefoxArguments.push(...this.defaultArgs(options)); } else if (Array.isArray(ignoreDefaultArgs)) { firefoxArguments.push( - ...this.defaultArgs(options).filter( - (arg) => !ignoreDefaultArgs.includes(arg) - ) + ...this.defaultArgs(options).filter((arg) => { + return !ignoreDefaultArgs.includes(arg); + }) ); } else { firefoxArguments.push(...args); } if ( - !firefoxArguments.some((argument) => - argument.startsWith('--remote-debugging-') - ) + !firefoxArguments.some((argument) => { + return argument.startsWith('--remote-debugging-'); + }) ) { if (pipe) { assert( @@ -438,7 +449,12 @@ class FirefoxLauncher implements ProductLauncher { if (waitForInitialPage) { try { - await browser.waitForTarget((t) => t.type() === 'page', { timeout }); + await browser.waitForTarget( + (t) => { + return t.type() === 'page'; + }, + { timeout } + ); } catch (error) { await browser.close(); throw error; @@ -499,7 +515,11 @@ class FirefoxLauncher implements ProductLauncher { if (devtools) { firefoxArguments.push('--devtools'); } - if (args.every((arg) => arg.startsWith('-'))) { + if ( + args.every((arg) => { + return arg.startsWith('-'); + }) + ) { firefoxArguments.push('about:blank'); } firefoxArguments.push(...args); diff --git a/src/node/NodeWebSocketTransport.ts b/src/node/NodeWebSocketTransport.ts index a3a57bc6101..b7154bb9892 100644 --- a/src/node/NodeWebSocketTransport.ts +++ b/src/node/NodeWebSocketTransport.ts @@ -43,9 +43,9 @@ export class NodeWebSocketTransport implements ConnectionTransport { }, }); - ws.addEventListener('open', () => - resolve(new NodeWebSocketTransport(ws)) - ); + ws.addEventListener('open', () => { + return resolve(new NodeWebSocketTransport(ws)); + }); ws.addEventListener('error', reject); }); } diff --git a/src/node/PipeTransport.ts b/src/node/PipeTransport.ts index 2d8237e0f9d..f3e283f9761 100644 --- a/src/node/PipeTransport.ts +++ b/src/node/PipeTransport.ts @@ -38,7 +38,9 @@ export class PipeTransport implements ConnectionTransport { ) { this.#pipeWrite = pipeWrite; this.#eventListeners = [ - addEventListener(pipeRead, 'data', (buffer) => this.#dispatch(buffer)), + addEventListener(pipeRead, 'data', (buffer) => { + return this.#dispatch(buffer); + }), addEventListener(pipeRead, 'close', () => { if (this.onclose) { this.onclose.call(null); diff --git a/src/node/install.ts b/src/node/install.ts index ffb409c853f..40f9dacfdc9 100644 --- a/src/node/install.ts +++ b/src/node/install.ts @@ -111,12 +111,12 @@ export async function downloadBrowser(): Promise { logPolitely( `${supportedProducts[product]} (${revisionInfo.revision}) downloaded to ${revisionInfo.folderPath}` ); - localRevisions = localRevisions.filter( - (revision) => revision !== revisionInfo.revision - ); - const cleanupOldVersions = localRevisions.map((revision) => - browserFetcher.remove(revision) - ); + localRevisions = localRevisions.filter((revision) => { + return revision !== revisionInfo.revision; + }); + const cleanupOldVersions = localRevisions.map((revision) => { + return browserFetcher.remove(revision); + }); Promise.all([...cleanupOldVersions]); } @@ -151,7 +151,9 @@ export async function downloadBrowser(): Promise { return browserFetcher .download(revisionInfo.revision, onProgress) - .then(() => browserFetcher.localRevisions()) + .then(() => { + return browserFetcher.localRevisions(); + }) .then(onSuccess) .catch(onError); } diff --git a/test/.eslintrc.js b/test/.eslintrc.js index 878d3896627..9d86da20e14 100644 --- a/test/.eslintrc.js +++ b/test/.eslintrc.js @@ -1,6 +1,5 @@ module.exports = { rules: { - 'arrow-body-style': ['error', 'always'], 'no-restricted-imports': [ 'error', { diff --git a/typescript-if-required.js b/typescript-if-required.js index 7c721a9aec1..e691fb79875 100644 --- a/typescript-if-required.js +++ b/typescript-if-required.js @@ -22,10 +22,15 @@ const { promisify } = require('util'); const exec = promisify(child_process.exec); const fsAccess = promisify(fs.access); -const fileExists = async (filePath) => - fsAccess(filePath) - .then(() => true) - .catch(() => false); +const fileExists = async (filePath) => { + return fsAccess(filePath) + .then(() => { + return true; + }) + .catch(() => { + return false; + }); +}; /* * Now Puppeteer is built with TypeScript, we need to ensure that diff --git a/utils/bisect.js b/utils/bisect.js index 913548fa9d2..6998c90455a 100755 --- a/utils/bisect.js +++ b/utils/bisect.js @@ -168,8 +168,12 @@ function runScript(scriptPath, revisionInfo) { }, }); return new Promise((resolve, reject) => { - child.on('error', (err) => reject(err)); - child.on('exit', (code) => resolve(code)); + child.on('error', (err) => { + return reject(err); + }); + child.on('exit', (code) => { + return resolve(code); + }); }); } @@ -185,8 +189,12 @@ function runUnitTest(pattern, revisionInfo) { }, }); return new Promise((resolve, reject) => { - child.on('error', (err) => reject(err)); - child.on('exit', (code) => resolve(code)); + child.on('error', (err) => { + return reject(err); + }); + child.on('exit', (code) => { + return resolve(code); + }); }); } @@ -274,10 +282,16 @@ function fetchJSON(url) { const req = agent.request(options, function (res) { let result = ''; res.setEncoding('utf8'); - res.on('data', (chunk) => (result += chunk)); - res.on('end', () => resolve(JSON.parse(result))); + res.on('data', (chunk) => { + return (result += chunk); + }); + res.on('end', () => { + return resolve(JSON.parse(result)); + }); + }); + req.on('error', (err) => { + return reject(err); }); - req.on('error', (err) => reject(err)); req.end(); }); } diff --git a/utils/check_availability.js b/utils/check_availability.js index 1bb9b6a7f40..52289e36cc0 100755 --- a/utils/check_availability.js +++ b/utils/check_availability.js @@ -155,7 +155,9 @@ async function checkOmahaProxyAvailability() { 'https://storage.googleapis.com/chromium-browser-snapshots/Win_x64/LAST_CHANGE' ), ]) - ).map((s) => parseInt(s, 10)); + ).map((s) => { + return parseInt(s, 10); + }); const from = Math.max(...latestRevisions); await checkRangeAvailability({ fromRevision: from, @@ -183,7 +185,9 @@ async function printLatestRevisionForPlatform(platform) { 'https://storage.googleapis.com/chromium-browser-snapshots/Win_x64/LAST_CHANGE' ), ]) - ).map((s) => parseInt(s, 10)); + ).map((s) => { + return parseInt(s, 10); + }); const from = Math.max(...latestRevisions); await checkRangeAvailability({ fromRevision: from, @@ -233,13 +237,18 @@ async function checkRangeAvailability({ platforms = platforms || SUPPORTED_PLATFORMS; let table; if (printAsTable) { - table = new Table([10, ...platforms.map(() => 7)]); + table = new Table([ + 10, + ...platforms.map(() => { + return 7; + }), + ]); table.drawRow([''].concat(platforms)); } - const fetchers = platforms.map( - (platform) => new BrowserFetcher('', { platform }) - ); + const fetchers = platforms.map((platform) => { + return new BrowserFetcher('', { platform }); + }); const inc = fromRevision < toRevision ? 1 : -1; const revisionToStop = toRevision + inc; // +inc so the range is fully inclusive @@ -248,9 +257,13 @@ async function checkRangeAvailability({ revision !== revisionToStop; revision += inc ) { - const promises = fetchers.map((fetcher) => fetcher.canDownload(revision)); + const promises = fetchers.map((fetcher) => { + return fetcher.canDownload(revision); + }); const availability = await Promise.all(promises); - const allAvailable = availability.every((e) => !!e); + const allAvailable = availability.every((e) => { + return !!e; + }); if (table) { const values = [ ' ' + @@ -279,7 +292,9 @@ async function checkRangeAvailability({ */ function fetch(url) { let resolve; - const promise = new Promise((x) => (resolve = x)); + const promise = new Promise((x) => { + return (resolve = x); + }); https .get(url, (response) => { if (response.statusCode !== 200) { diff --git a/utils/fetch_devices.js b/utils/fetch_devices.js index 5a9584aa6ca..2efab604ea2 100755 --- a/utils/fetch_devices.js +++ b/utils/fetch_devices.js @@ -86,8 +86,12 @@ async function main(url) { return; } const devicePayloads = json.extensions - .filter((extension) => extension.type === 'emulated-device') - .map((extension) => extension.device); + .filter((extension) => { + return extension.type === 'emulated-device'; + }) + .map((extension) => { + return extension.device; + }); let devices = []; for (const payload of devicePayloads) { let names = []; @@ -112,8 +116,12 @@ async function main(url) { } } } - devices = devices.filter((device) => device.viewport.isMobile); - devices.sort((a, b) => a.name.localeCompare(b.name)); + devices = devices.filter((device) => { + return device.viewport.isMobile; + }); + devices.sort((a, b) => { + return a.name.localeCompare(b.name); + }); // Use single-quotes instead of double-quotes to conform with codestyle. const serialized = JSON.stringify(devices, null, 2) .replace(/'/g, `\\'`) @@ -282,8 +290,12 @@ function httpGET(url) { const request = driver.get(url, (response) => { let data = ''; response.setEncoding('utf8'); - response.on('data', (chunk) => (data += chunk)); - response.on('end', () => fulfill(data)); + response.on('data', (chunk) => { + return (data += chunk); + }); + response.on('end', () => { + return fulfill(data); + }); response.on('error', reject); }); request.on('error', reject); diff --git a/utils/testserver/src/index.ts b/utils/testserver/src/index.ts index cdcff72d93b..87767ffe5a7 100644 --- a/utils/testserver/src/index.ts +++ b/utils/testserver/src/index.ts @@ -67,7 +67,9 @@ export class TestServer { static async create(dirPath: string, port: number): Promise { const server = new TestServer(dirPath, port); - await new Promise((x) => server.#server.once('listening', x)); + await new Promise((x) => { + return server.#server.once('listening', x); + }); return server; } @@ -77,7 +79,9 @@ export class TestServer { cert: readFileSync(join(__dirname, '..', 'cert.pem')), passphrase: 'aaaa', }); - await new Promise((x) => server.#server.once('listening', x)); + await new Promise((x) => { + return server.#server.once('listening', x); + }); return server; } @@ -104,7 +108,9 @@ export class TestServer { throw error; } }); - connection.once('close', () => this.#connections.delete(connection)); + connection.once('close', () => { + return this.#connections.delete(connection); + }); }; enableHTTPCache(pathPrefix: string): void { @@ -129,7 +135,9 @@ export class TestServer { socket.destroy(); } this.#connections.clear(); - await new Promise((x) => this.#server.close(x)); + await new Promise((x) => { + return this.#server.close(x); + }); } setRoute( @@ -186,8 +194,12 @@ export class TestServer { }); request.postBody = new Promise((resolve) => { let body = ''; - request.on('data', (chunk: string) => (body += chunk)); - request.on('end', () => resolve(body)); + request.on('data', (chunk: string) => { + return (body += chunk); + }); + request.on('end', () => { + return resolve(body); + }); }); assert(request.url); const url = new URL(request.url, `https://${request.headers.host}`);