diff --git a/.eslintrc.js b/.eslintrc.js index a1de9853eef..a119974e1fe 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -166,6 +166,8 @@ module.exports = { default: 'array-simple', }, ], + // By default this is a warning but we want it to error. + '@typescript-eslint/explicit-module-boundary-types': 2, }, }, { diff --git a/package.json b/package.json index f8c2e63c7e6..6b20c2a4541 100644 --- a/package.json +++ b/package.json @@ -72,7 +72,7 @@ "@commitlint/cli": "^11.0.0", "@commitlint/config-conventional": "^11.0.0", "@microsoft/api-documenter": "^7.12.7", - "@microsoft/api-extractor": "^7.13.1", + "@microsoft/api-extractor": "7.15.1", "@types/debug": "0.0.31", "@types/mime": "^2.0.0", "@types/mocha": "^7.0.2", @@ -82,8 +82,8 @@ "@types/sinon": "^9.0.4", "@types/tar-fs": "^1.16.2", "@types/ws": "^7.2.4", - "@typescript-eslint/eslint-plugin": "^4.4.0", - "@typescript-eslint/parser": "^4.4.0", + "@typescript-eslint/eslint-plugin": "4.23.0", + "@typescript-eslint/parser": "4.23.0", "@web/test-runner": "^0.12.15", "commonmark": "^0.28.1", "cross-env": "^7.0.2", @@ -109,7 +109,7 @@ "standard-version": "^9.0.0", "text-diff": "^1.0.1", "ts-node": "^9.0.0", - "typescript": "^4.1.5" + "typescript": "4.2.4" }, "husky": { "hooks": { diff --git a/src/common/EventEmitter.ts b/src/common/EventEmitter.ts index e75377130f7..88d97762df1 100644 --- a/src/common/EventEmitter.ts +++ b/src/common/EventEmitter.ts @@ -21,7 +21,7 @@ export interface CommonEventEmitter { */ addListener(event: EventType, handler: Handler): CommonEventEmitter; removeListener(event: EventType, handler: Handler): CommonEventEmitter; - emit(event: EventType, eventData?: any): boolean; + emit(event: EventType, eventData?: unknown): boolean; once(event: EventType, handler: Handler): CommonEventEmitter; listenerCount(event: string): number; @@ -98,7 +98,7 @@ export class EventEmitter implements CommonEventEmitter { * @param eventData - any data you'd like to emit with the event * @returns `true` if there are any listeners, `false` if there are not. */ - emit(event: EventType, eventData?: any): boolean { + emit(event: EventType, eventData?: unknown): boolean { this.emitter.emit(event, eventData); return this.eventListenersCount(event) > 0; } diff --git a/src/common/FileChooser.ts b/src/common/FileChooser.ts index eb3f4d91c81..d1cbea73a38 100644 --- a/src/common/FileChooser.ts +++ b/src/common/FileChooser.ts @@ -76,7 +76,7 @@ export class FileChooser { /** * Closes the file chooser without selecting any files. */ - cancel() { + cancel(): void { assert( !this._handled, 'Cannot cancel FileChooser which is already handled!' diff --git a/src/node/install.ts b/src/node/install.ts index 373cfbd558d..d7e751f44ef 100644 --- a/src/node/install.ts +++ b/src/node/install.ts @@ -26,7 +26,7 @@ const supportedProducts = { firefox: 'Firefox Nightly', } as const; -export async function downloadBrowser() { +export async function downloadBrowser(): Promise { const downloadHost = process.env.PUPPETEER_DOWNLOAD_HOST || process.env.npm_config_puppeteer_download_host || @@ -178,7 +178,7 @@ export async function downloadBrowser() { } } -export function logPolitely(toBeLogged) { +export function logPolitely(toBeLogged: unknown): void { const logLevel = process.env.npm_config_loglevel; const logLevelDisplay = ['silent', 'error', 'warn'].indexOf(logLevel) > -1; diff --git a/test/cookies.spec.ts b/test/cookies.spec.ts index 38f6852527b..ad7339b0d39 100644 --- a/test/cookies.spec.ts +++ b/test/cookies.spec.ts @@ -231,13 +231,12 @@ describe('Cookie specs', () => { value: 'bar', } ); - expectCookieEquals( - await page.evaluate(() => { - const cookies = document.cookie.split(';'); - return cookies.map((cookie) => cookie.trim()).sort(); - }), - ['foo=bar', 'password=123456'] - ); + const cookieStrings = await page.evaluate(() => { + const cookies = document.cookie.split(';'); + return cookies.map((cookie) => cookie.trim()).sort(); + }); + + expect(cookieStrings).toEqual(['foo=bar', 'password=123456']); }); it('should have |expires| set to |-1| for session cookies', async () => { const { page, server } = getTestState(); diff --git a/test/mocha-utils.ts b/test/mocha-utils.ts index 6d713f1c138..238addfef23 100644 --- a/test/mocha-utils.ts +++ b/test/mocha-utils.ts @@ -31,6 +31,7 @@ import rimraf from 'rimraf'; import expect from 'expect'; import { trackCoverage } from './coverage-utils.js'; +import Protocol from 'devtools-protocol'; const setupServer = async () => { const assetsPath = path.join(__dirname, 'assets'); @@ -177,7 +178,10 @@ export const itFailsWindowsUntilDate = ( return it(description, body); }; -export const itFailsWindows = (description: string, body: Mocha.Func) => { +export const itFailsWindows = ( + description: string, + body: Mocha.Func +): Mocha.Test => { if (os.platform() === 'win32') { return xit(description, body); } @@ -217,7 +221,7 @@ console.log( }` ); -export const setupTestBrowserHooks = () => { +export const setupTestBrowserHooks = (): void => { before(async () => { const browser = await puppeteer.launch(defaultBrowserOptions); state.browser = browser; @@ -229,7 +233,7 @@ export const setupTestBrowserHooks = () => { }); }; -export const setupTestPageAndContextHooks = () => { +export const setupTestPageAndContextHooks = (): void => { beforeEach(async () => { state.context = await state.browser.createIncognitoBrowserContext(); state.page = await state.context.newPage(); @@ -244,7 +248,7 @@ export const setupTestPageAndContextHooks = () => { export const mochaHooks = { beforeAll: [ - async () => { + async (): Promise => { const { server, httpsServer } = await setupServer(); state.puppeteer = puppeteer; @@ -259,13 +263,13 @@ export const mochaHooks = { coverageHooks.beforeAll, ], - beforeEach: async () => { + beforeEach: async (): Promise => { state.server.reset(); state.httpsServer.reset(); }, afterAll: [ - async () => { + async (): Promise => { await state.server.stop(); state.server = null; await state.httpsServer.stop(); @@ -274,12 +278,15 @@ export const mochaHooks = { coverageHooks.afterAll, ], - afterEach: () => { + afterEach: (): void => { sinon.restore(); }, }; -export const expectCookieEquals = (cookies, expectedCookies) => { +export const expectCookieEquals = ( + cookies: Protocol.Network.Cookie[], + expectedCookies: Array> +): void => { const { isChrome } = getTestState(); if (!isChrome) { // Only keep standard properties when testing on a browser other than Chrome. diff --git a/utils/doclint/check_public_api/index.js b/utils/doclint/check_public_api/index.js index e524e52b6a7..989b78bcee9 100644 --- a/utils/doclint/check_public_api/index.js +++ b/utils/doclint/check_public_api/index.js @@ -685,7 +685,8 @@ function compareDocumentations(actual, expected) { 'Method Page.emulateVisionDeficiency() type', { actualName: 'string', - expectedName: 'Object', + expectedName: + '"none"|"achromatopsia"|"blurredVision"|"deuteranopia"|"protanopia"|"tritanopia"', }, ], [ @@ -849,14 +850,6 @@ function compareDocumentations(actual, expected) { expectedName: '...DeleteCookiesRequest', }, ], - [ - 'Method Page.emulateVisionDeficiency() type', - { - actualName: 'string', - expectedName: - '"none"|"achromatopsia"|"blurredVision"|"deuteranopia"|"protanopia"|"tritanopia"', - }, - ], [ 'Method BrowserContext.overridePermissions() permissions', { @@ -885,6 +878,13 @@ function compareDocumentations(actual, expected) { expectedName: 'Object', }, ], + [ + 'Method EventEmitter.emit() eventData', + { + actualName: 'Object', + expectedName: 'unknown', + }, + ], ]); const expectedForSource = expectedNamingMismatches.get(source);