diff --git a/.eslintrc b/.eslintrc index 8ff014259ba..e4fc990bda5 100644 --- a/.eslintrc +++ b/.eslintrc @@ -93,10 +93,25 @@ "linebreak-style": [2, "unix"], "no-duplicate-imports": 2, "comma-dangle": ["error", "always-multiline"], + "prefer-rest-params": 0, + "prefer-spread": 0, "@typescript-eslint/no-extra-parens": 2, "@typescript-eslint/no-use-before-define": [2, "nofunc"], "@typescript-eslint/no-var-requires": [0], - "@typescript-eslint/explicit-function-return-type": [2, { "allowExpressions": true }], - "@typescript-eslint/no-unused-vars": 2 - } + "@typescript-eslint/explicit-function-return-type": "off", + "@typescript-eslint/no-unused-vars": 2, + "@typescript-eslint/no-empty-function": 0, + "@typescript-eslint/no-this-alias": 0 + }, + overrides: [ + { + files: ["*.ts"], + rules: { + "@typescript-eslint/explicit-function-return-type": [2, { "allowExpressions": true }], + "@typescript-eslint/no-empty-function": 2, + "prefer-spread": 2, + "@typescript-eslint/ban-ts-ignore": 0 + } + } + ] } diff --git a/.github/workflows/deploy-to-artifacts.yml b/.github/workflows/deploy-to-artifacts.yml index d4687b41f0d..567d7e4cbe9 100644 --- a/.github/workflows/deploy-to-artifacts.yml +++ b/.github/workflows/deploy-to-artifacts.yml @@ -4,19 +4,19 @@ on: workflow_dispatch: inputs: sha: - description: 'The commit ref or SHA' + description: 'The commit ref or SHA' required: true default: 'master' merged_sha: - description: 'The merge commit SHA' + description: 'The merge commit SHA' base_sha: - description: 'The base commit SHA' - -jobs: + description: 'The base commit SHA' + +jobs: build: runs-on: ubuntu-latest outputs: - sha: ${{steps.prep.outputs.sha}} + sha: ${{steps.prep.outputs.sha}} steps: - name: Build Info run: | @@ -39,13 +39,13 @@ jobs: uses: actions/github-script@v3 with: github-token: ${{ secrets.ACTIVE_TOKEN }} - script: | + script: | core.setOutput('sha', context.payload.inputs.merged_sha || context.payload.inputs.sha); - uses: actions/checkout@v2 with: ref: ${{steps.prep.outputs.sha}} - run: | - npm i --legacy-peer-deps + npm i npx gulp build npm pack - id: package-name @@ -53,7 +53,7 @@ jobs: with: script: | const { name, version } = require(require('path').join(process.env.GITHUB_WORKSPACE, 'package.json')); - + core.setOutput('packageName', `${name}-${version}`); core.setOutput('imageName', `${name}/${name}:${version}`); @@ -65,7 +65,7 @@ jobs: package-lock.json - run: | npx gulp docker-build - docker save -o ${{steps.package-name.outputs.packageName}}.tar ${{steps.package-name.outputs.imageName}} + docker save -o ${{steps.package-name.outputs.packageName}}.tar ${{steps.package-name.outputs.imageName}} - uses: actions/upload-artifact@v2 with: name: docker @@ -82,7 +82,7 @@ jobs: context: context.workflow, state: 'failure', target_url: `https://github.com/${context.repo.owner}/${context.repo.repo}/actions/runs/${context.runId}` - }); + }); changes: # TODO: currently cannot generate a list of changes after rebase runs-on: ubuntu-latest @@ -127,7 +127,7 @@ jobs: runs-on: ubuntu-latest needs: [build, changes] environment: CI - steps: + steps: - uses: actions/download-artifact@v2 with: name: changes @@ -137,7 +137,7 @@ jobs: script: | function getInputs () { const { sha, merged_sha } = context.payload.inputs; - + return { ...merged_sha ? { merged_sha } : {}, sha, @@ -154,12 +154,12 @@ jobs: inputs: getInputs() }); } - + // TODO: Optimize by running only necessary tests for corresponding changes const fileList = require('fs').readFileSync('changes.txt').toString().split('\n').filter(line => line); - + const tasks = []; - + tasks.push('test-client-desktop.yml'); tasks.push('test-client-mobile.yml'); @@ -176,11 +176,11 @@ jobs: tasks.push('test-functional-remote-macos.yml'); tasks.push('test-functional-remote-mobile.yml'); - + tasks.push('test-server-docker.yml'); tasks.push('test-server-lts.yml'); tasks.push('test-server-stable.yml'); - + // Temporary disable // tasks.push('test-cdp.yml'); @@ -209,4 +209,4 @@ jobs: context: context.workflow, state: 'failure', target_url: `https://github.com/${context.repo.owner}/${context.repo.repo}/actions/runs/${context.runId}` - }); + }); diff --git a/.github/workflows/test-dependencies.yml b/.github/workflows/test-dependencies.yml index ac56206b916..4caab5ba7ca 100644 --- a/.github/workflows/test-dependencies.yml +++ b/.github/workflows/test-dependencies.yml @@ -15,5 +15,5 @@ jobs: steps: - uses: actions/checkout@v2 - uses: actions/setup-node@v2 - - run: npm i --legacy-peer-deps --package-lock-only + - run: npm i --package-lock-only - run: npm audit --production diff --git a/package.json b/package.json index 272b36cde46..40a1df59dcf 100644 --- a/package.json +++ b/package.json @@ -170,8 +170,8 @@ "@types/semver": "^7.3.4", "@types/source-map-support": "^0.5.0", "@types/useragent": "^2.1.1", - "@typescript-eslint/eslint-plugin": "1.13.0", - "@typescript-eslint/parser": "^3.10.1", + "@typescript-eslint/eslint-plugin": "2.0.0", + "@typescript-eslint/parser": "^2.0.0", "babel-plugin-add-module-exports": "^0.2.0", "basic-auth": "^1.1.0", "body-parser": "^1.17.1", diff --git a/src/browser/provider/built-in/dedicated/chrome/cdp-client/index.ts b/src/browser/provider/built-in/dedicated/chrome/cdp-client/index.ts index 2cf69880012..3dc10a8368e 100644 --- a/src/browser/provider/built-in/dedicated/chrome/cdp-client/index.ts +++ b/src/browser/provider/built-in/dedicated/chrome/cdp-client/index.ts @@ -181,7 +181,7 @@ export class BrowserClient { }); } - private async _evaluateRuntime (client: remoteChrome.ProtocolApi, expression: string, returnByValue: boolean = false): Promise { + private async _evaluateRuntime (client: remoteChrome.ProtocolApi, expression: string, returnByValue = false): Promise { return client.Runtime.evaluate({ expression, returnByValue }); } diff --git a/src/browser/provider/built-in/dedicated/chrome/cdp-client/shared-adapter-initializer.ts b/src/browser/provider/built-in/dedicated/chrome/cdp-client/shared-adapter-initializer.ts index d0f3d875d5a..989deeb7a7c 100644 --- a/src/browser/provider/built-in/dedicated/chrome/cdp-client/shared-adapter-initializer.ts +++ b/src/browser/provider/built-in/dedicated/chrome/cdp-client/shared-adapter-initializer.ts @@ -94,7 +94,7 @@ initializeAdapter({ createMouseClickStrategy, }, - _ensureWindowAndCursorForLegacyTests () { + _ensureWindowAndCursorForLegacyTests () { // eslint-disable-line no-empty-function }, }, }); diff --git a/src/browser/provider/built-in/dedicated/chrome/cdp-client/utils/create-event-sequence.ts b/src/browser/provider/built-in/dedicated/chrome/cdp-client/utils/create-event-sequence.ts index 684164d1ac1..63167678d1a 100644 --- a/src/browser/provider/built-in/dedicated/chrome/cdp-client/utils/create-event-sequence.ts +++ b/src/browser/provider/built-in/dedicated/chrome/cdp-client/utils/create-event-sequence.ts @@ -7,9 +7,6 @@ interface ChromeCdpEventSequenceEventOptions { } class ChromeCdpEventSequence { - public constructor () { - } - public async run (currentElement: ServerNode, prevElement: ServerNode, options: ChromeCdpEventSequenceEventOptions): Promise { const { Input } = clientsManager.getClient(); diff --git a/src/client/core/shared-adapter-initializer.ts b/src/client/core/shared-adapter-initializer.ts index 8197b4d5297..9a948a204c8 100644 --- a/src/client/core/shared-adapter-initializer.ts +++ b/src/client/core/shared-adapter-initializer.ts @@ -28,7 +28,7 @@ initializeAdapter({ createMouseClickStrategy: () => new MouseClickStrategyEmpty(), }, - _ensureWindowAndCursorForLegacyTests () { + _ensureWindowAndCursorForLegacyTests () { // eslint-disable-line no-empty-function }, }, }); diff --git a/src/client/driver/command-executors/client-functions/replicator/transforms/client-function-node-transform.ts b/src/client/driver/command-executors/client-functions/replicator/transforms/client-function-node-transform.ts index 006719a370d..80a8b07b02c 100644 --- a/src/client/driver/command-executors/client-functions/replicator/transforms/client-function-node-transform.ts +++ b/src/client/driver/command-executors/client-functions/replicator/transforms/client-function-node-transform.ts @@ -17,9 +17,9 @@ export default class ClientFunctionNodeTransform implements Transform { return false; } - public toSerializable (): void { + public toSerializable (): void { // eslint-disable-line @typescript-eslint/no-empty-function } - public fromSerializable (): void { + public fromSerializable (): void { // eslint-disable-line @typescript-eslint/no-empty-function } } diff --git a/src/client/driver/command-executors/client-functions/replicator/transforms/selector-element-action-transform.ts b/src/client/driver/command-executors/client-functions/replicator/transforms/selector-element-action-transform.ts index 4b265b63cb7..76b96f0f848 100644 --- a/src/client/driver/command-executors/client-functions/replicator/transforms/selector-element-action-transform.ts +++ b/src/client/driver/command-executors/client-functions/replicator/transforms/selector-element-action-transform.ts @@ -13,6 +13,6 @@ export default class SelectorElementActionTransform implements Transform { return new ElementActionSnapshot(node); } - public fromSerializable (): void { + public fromSerializable (): void { // eslint-disable-line @typescript-eslint/no-empty-function } } diff --git a/src/client/driver/command-executors/client-functions/replicator/transforms/selector-node-transform.ts b/src/client/driver/command-executors/client-functions/replicator/transforms/selector-node-transform.ts index 6399b7f1577..9f4c2f87ebd 100644 --- a/src/client/driver/command-executors/client-functions/replicator/transforms/selector-node-transform.ts +++ b/src/client/driver/command-executors/client-functions/replicator/transforms/selector-node-transform.ts @@ -39,6 +39,6 @@ export default class SelectorNodeTransform implements Transform { return snapshot; } - public fromSerializable (): void { + public fromSerializable (): void { // eslint-disable-line no-empty-function } } diff --git a/src/client/driver/shared-adapter-initializer.ts b/src/client/driver/shared-adapter-initializer.ts index a9e740f2484..2a635497ea4 100644 --- a/src/client/driver/shared-adapter-initializer.ts +++ b/src/client/driver/shared-adapter-initializer.ts @@ -29,7 +29,7 @@ initializeAdapter({ createMouseClickStrategy: () => new MouseClickStrategyEmpty(), }, - _ensureWindowAndCursorForLegacyTests () { + _ensureWindowAndCursorForLegacyTests () { // eslint-disable-line no-empty-function }, }, }); diff --git a/src/errors/is-internal-stack-frame.ts b/src/errors/is-internal-stack-frame.ts index 4de0b60f798..3961e08ba84 100644 --- a/src/errors/is-internal-stack-frame.ts +++ b/src/errors/is-internal-stack-frame.ts @@ -31,7 +31,7 @@ const INTERNAL_INCLUDES_PATH_SEGMENTS = [ TESTCAFE_HAMMERHEAD, ]; -function isInternalFile (filename: string = ''): boolean { +function isInternalFile (filename = ''): boolean { return !filename || !filename.includes(sep) || INTERNAL_INCLUDES_PATH_SEGMENTS.some(pathSegment => filename.includes(pathSegment)) || diff --git a/src/live/keyboard-observer.ts b/src/live/keyboard-observer.ts index 00e048e89a9..87d96acb592 100644 --- a/src/live/keyboard-observer.ts +++ b/src/live/keyboard-observer.ts @@ -9,7 +9,7 @@ let instance: LiveModeKeyboardEventObserver; export default class LiveModeKeyboardEventObserver { private controllers: LiveModeController[] = []; - private lockKeyPress: boolean = false; + private lockKeyPress = false; public constructor () { if (!instance) { diff --git a/src/notifications/warning-log.ts b/src/notifications/warning-log.ts index 8f6030618d8..c30d756ec79 100644 --- a/src/notifications/warning-log.ts +++ b/src/notifications/warning-log.ts @@ -44,7 +44,7 @@ export default class WarningLog { args = [message].concat(args); // @ts-ignore - message = renderTemplate.apply(null, args); + message = renderTemplate.apply(null, args); // eslint-disable-line prefer-spread this.addPlainMessage({ message, actionId }); diff --git a/src/reporter/command/command-formatter.ts b/src/reporter/command/command-formatter.ts index 355bc9d73aa..15f3dafa045 100644 --- a/src/reporter/command/command-formatter.ts +++ b/src/reporter/command/command-formatter.ts @@ -168,7 +168,7 @@ export class CommandFormatter { this._elements = Array.isArray(decoded) ? decoded : [decoded]; } - private static _getModifiedOptions (commandOptions: object): Dictionary | null { + private static _getModifiedOptions (commandOptions: object): Dictionary { const constructor = commandOptions.constructor as ObjectConstructor; const defaultOptions = new constructor(); diff --git a/src/reporter/plugin-host.ts b/src/reporter/plugin-host.ts index d5bf6e10e15..208899b11ee 100644 --- a/src/reporter/plugin-host.ts +++ b/src/reporter/plugin-host.ts @@ -187,10 +187,11 @@ export default class ReporterPluginHost { } // NOTE: It's an optional method - public async init (): Promise { + public async init (): Promise { // eslint-disable-line @typescript-eslint/no-empty-function + // Optional } // NOTE: It's an optional method - public async reportWarnings (/* warnings */): Promise { + public async reportWarnings (/* warnings */): Promise { // eslint-disable-line @typescript-eslint/no-empty-function } } diff --git a/src/services/compiler/test-run-proxy.ts b/src/services/compiler/test-run-proxy.ts index 6004fbc4134..8d1c6163f6e 100644 --- a/src/services/compiler/test-run-proxy.ts +++ b/src/services/compiler/test-run-proxy.ts @@ -39,7 +39,7 @@ class TestRunProxy extends AsyncEventEmitter { public readonly observedCallsites: ObservedCallsitesStorage; public readonly warningLog: WarningLog; public fixtureCtx: object; - public debugging: boolean = false; + public debugging = false; private readonly dispatcher: TestRunDispatcherProtocol; public ctx: object; private readonly _options: Dictionary; diff --git a/src/services/utils/ipc/proxy.ts b/src/services/utils/ipc/proxy.ts index 0c911452f14..b590be3cf41 100644 --- a/src/services/utils/ipc/proxy.ts +++ b/src/services/utils/ipc/proxy.ts @@ -20,7 +20,7 @@ interface RequestOptions { export class IPCProxy extends EventEmitter { private _transport: IPCTransport; - private _requestCounter: number = 0; + private _requestCounter = 0; private readonly _handlers: { [name: string]: Function }; private _stopped: boolean; diff --git a/src/shared/actions/automations/click/mouse-click-strategy-base.ts b/src/shared/actions/automations/click/mouse-click-strategy-base.ts index cbc071fef36..33b72f14546 100644 --- a/src/shared/actions/automations/click/mouse-click-strategy-base.ts +++ b/src/shared/actions/automations/click/mouse-click-strategy-base.ts @@ -1,9 +1,6 @@ import { MouseEventArgs } from '../visible-element-automation'; export abstract class MouseClickStrategyBase { - public constructor () { - } - public abstract mousedown (eventArgs: MouseEventArgs): Promise; public abstract mouseup (element: E, eventArgs: MouseEventArgs): Promise>; diff --git a/src/shared/actions/automations/visible-element-automation.ts b/src/shared/actions/automations/visible-element-automation.ts index fa2fb25b499..7728ef4fdba 100644 --- a/src/shared/actions/automations/visible-element-automation.ts +++ b/src/shared/actions/automations/visible-element-automation.ts @@ -207,7 +207,7 @@ export default class VisibleElementAutomation extends return state; } - protected _ensureElement (useStrictElementCheck: boolean, skipCheckAfterMoving: boolean = false, skipMoving: boolean = false): Promise> { + protected _ensureElement (useStrictElementCheck: boolean, skipCheckAfterMoving = false, skipMoving = false): Promise> { return this ._wrapAction(() => this._scrollToElement()) .then(state => VisibleElementAutomation._checkElementState(state, useStrictElementCheck)) diff --git a/src/shared/barriers/script-execution.ts b/src/shared/barriers/script-execution.ts index 152da37a2b8..16bd2b32c1e 100644 --- a/src/shared/barriers/script-execution.ts +++ b/src/shared/barriers/script-execution.ts @@ -42,7 +42,7 @@ export default class ScriptExecutionBarrier { this._scripts.set(script, loadingTimeout); } - private _onScriptLoadedOrFailed (script: S, isTimeout: boolean = false): void { + private _onScriptLoadedOrFailed (script: S, isTimeout = false): void { if (!this._scripts.has(script)) return; diff --git a/src/test-run/index.ts b/src/test-run/index.ts index f4d24601478..0c699bc7d81 100644 --- a/src/test-run/index.ts +++ b/src/test-run/index.ts @@ -253,7 +253,7 @@ export default class TestRun extends AsyncEventEmitter { private asyncJsExpressionCallsites: Map; public readonly browser: Browser; private readonly _messageBus?: MessageBus; - private _clientEnvironmentPrepared: boolean = false; + private _clientEnvironmentPrepared = false; public readonly startRunExecutionTime?: Date; public constructor ({ test, browserConnection, screenshotCapturer, globalWarningLog, opts, compilerService, messageBus, startRunExecutionTime }: TestRunInit) { diff --git a/src/utils/diff.ts b/src/utils/diff.ts index 6dab71d1ad0..356a5d9740a 100644 --- a/src/utils/diff.ts +++ b/src/utils/diff.ts @@ -8,7 +8,7 @@ function getFullPropertyPath (property: string, parentProperty: string): string return property; } -function diff (source: Dictionary, modified: Dictionary, result: Dictionary, parentProperty: string = ''): void { +function diff (source: Dictionary, modified: Dictionary, result: Dictionary, parentProperty = ''): void { for (const property in source) { const fullPropertyPath = getFullPropertyPath(property, parentProperty); @@ -27,7 +27,7 @@ function diff (source: Dictionary, modified: Dictionary, result: } } -export default (source: Dictionary, modified: Dictionary) => { +export default (source: Dictionary, modified: Dictionary): Dictionary => { const result = {}; if (isObjectLike(source) && isObjectLike(modified)) diff --git a/src/utils/parse-user-agent.ts b/src/utils/parse-user-agent.ts index 0982660e830..763ea3dad18 100644 --- a/src/utils/parse-user-agent.ts +++ b/src/utils/parse-user-agent.ts @@ -55,7 +55,7 @@ function calculatePrettyUserAgent (browser: ParsedComponent, os: ParsedComponent return `${browser.name} ${browser.version} / ${os.name} ${os.version}`; } -export default function parseUserAgent (userAgent: string = ''): ParsedUserAgent { +export default function parseUserAgent (userAgent = ''): ParsedUserAgent { const parsedUserAgent = userAgent ? Bowser.parse(userAgent) : EMPTY_PARSED_USER_AGENT; const browser = calculateBrowser(parsedUserAgent.browser); const os = calculateOs(parsedUserAgent.os); diff --git a/src/utils/to-posix-path.ts b/src/utils/to-posix-path.ts index d65ab230f44..3a02908b440 100644 --- a/src/utils/to-posix-path.ts +++ b/src/utils/to-posix-path.ts @@ -1,6 +1,6 @@ import { sep, posix } from 'path'; -export default function (val: string = ''): string { +export default function (val = ''): string { return val.split(sep) .join(posix.sep); }