From 0d00783c0c52c65a6bc0218e81eb58d092b22bc5 Mon Sep 17 00:00:00 2001 From: Simon Knott Date: Thu, 6 Mar 2025 09:15:37 +0100 Subject: [PATCH] chore: merge ESLint configs (#35038) --- eslint-react.config.mjs | 95 ---- eslint.config.mjs | 537 +++++++++++------- package.json | 2 +- packages/recorder/vite.config.ts | 3 +- .../trace-viewer/src/sw/snapshotRenderer.ts | 1 + .../trace-viewer/src/sw/snapshotStorage.ts | 6 +- packages/trace-viewer/src/sw/traceModel.ts | 4 +- .../trace-viewer/src/sw/traceModelBackends.ts | 4 +- packages/trace-viewer/src/ui/modelUtil.ts | 3 +- packages/trace-viewer/vite.config.ts | 4 +- packages/trace-viewer/vite.sw.config.ts | 4 +- packages/web/playwright.config.ts | 1 + packages/web/src/theme.ts | 1 + packages/web/src/uiUtils.ts | 3 +- utils/doclint/linting-code-snippets/cli.js | 1 - 15 files changed, 349 insertions(+), 320 deletions(-) delete mode 100644 eslint-react.config.mjs diff --git a/eslint-react.config.mjs b/eslint-react.config.mjs deleted file mode 100644 index 83ee993487..0000000000 --- a/eslint-react.config.mjs +++ /dev/null @@ -1,95 +0,0 @@ -/** - * Copyright (c) Microsoft Corporation. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { fixupConfigRules } from '@eslint/compat'; -import { FlatCompat } from '@eslint/eslintrc'; -import js from '@eslint/js'; -import typescriptEslint from '@typescript-eslint/eslint-plugin'; -import tsParser from '@typescript-eslint/parser'; -import notice from 'eslint-plugin-notice'; -import path from 'path'; -import { fileURLToPath } from 'url'; -import stylistic from '@stylistic/eslint-plugin'; -import { baseRules } from './eslint.config.mjs'; - -const __filename = fileURLToPath(import.meta.url); -const __dirname = path.dirname(__filename); - -const compat = new FlatCompat({ - baseDirectory: __dirname, - recommendedConfig: js.configs.recommended, - allConfig: js.configs.all -}); - -const baseConfig = fixupConfigRules(compat.extends('plugin:react/recommended', 'plugin:react-hooks/recommended')); - -const plugins = { - '@stylistic': stylistic, - '@typescript-eslint': typescriptEslint, - notice, -}; - -const ignores = [ - '.github/', - '*.js', - '**/.cache/', - '**/*.d.ts', - '**/dist/**', - 'index.d.ts', - 'node_modules/', - 'output/', - 'packages/*/lib/', - 'test-results/', - 'tests/', - 'utils/', -]; - -export default [ - { ignores }, - { - plugins, - settings: { - react: { version: 'detect' }, - } - }, - ...baseConfig, - packageSection('html-reporter'), - packageSection('recorder'), - packageSection('trace-viewer'), -]; - -function packageSection(packageName) { - return { - files: [ - `packages/${packageName}/src/**/*.ts`, - `packages/${packageName}/src/**/*.tsx`, - `packages/web/src/**/*.ts`, - `packages/web/src/**/*.tsx`, - ], - languageOptions: { - parser: tsParser, - ecmaVersion: 9, - sourceType: 'module', - parserOptions: { - project: path.join(__dirname, 'packages', packageName, 'tsconfig.json'), - }, - }, - rules: { - ...baseRules, - 'no-console': 2, - } - }; -} diff --git a/eslint.config.mjs b/eslint.config.mjs index 41799d05f9..7909c3414a 100644 --- a/eslint.config.mjs +++ b/eslint.config.mjs @@ -14,279 +14,390 @@ * limitations under the License. */ -import typescriptEslint from '@typescript-eslint/eslint-plugin'; -import tsParser from '@typescript-eslint/parser'; -import notice from 'eslint-plugin-notice'; -import path from 'path'; -import { fileURLToPath } from 'url'; -import stylistic from '@stylistic/eslint-plugin'; -import importRules from 'eslint-plugin-import'; +import typescriptEslint from "@typescript-eslint/eslint-plugin"; +import tsParser from "@typescript-eslint/parser"; +import notice from "eslint-plugin-notice"; +import path from "path"; +import { fileURLToPath } from "url"; +import stylistic from "@stylistic/eslint-plugin"; +import importRules from "eslint-plugin-import"; +import { fixupConfigRules } from "@eslint/compat"; +import { FlatCompat } from "@eslint/eslintrc"; +import js from "@eslint/js"; const __filename = fileURLToPath(import.meta.url); const __dirname = path.dirname(__filename); const plugins = { - '@stylistic': stylistic, - '@typescript-eslint': typescriptEslint, + "@stylistic": stylistic, + "@typescript-eslint": typescriptEslint, notice, import: importRules, }; const ignores = [ - '.github/', - '*.js', - '**/.cache/', - '**/*.d.ts', - 'index.d.ts', - 'node_modules/', - 'output/', - 'packages/*/lib/', - 'packages/html-reporter/**', - 'packages/playwright-core/src/generated/*', - 'packages/playwright-core/src/third_party/', - 'packages/playwright-core/types/*', - 'packages/playwright-ct-core/src/generated/*', - 'packages/recorder/**', - 'packages/trace-viewer/**', - 'packages/web/**', - 'test-results/', - 'tests/assets/', - 'tests/components/', - 'tests/installation/fixture-scripts/', - 'tests/third_party/', - 'utils/', + ".github/", + "*.js", + "**/.cache/", + "**/*.d.ts", + "index.d.ts", + "node_modules/", + "output/", + "**/playwright-report/", + "packages/*/lib/", + "packages/playwright-core/src/generated/*", + "packages/playwright-core/src/third_party/", + "packages/playwright-core/types/*", + "packages/playwright-ct-core/src/generated/*", + "packages/html-reporter/bundle.ts", + "packages/html-reporter/playwright.config.ts", + "packages/html-reporter/playwright/*", + "packages/html-reporter/vite.config.ts", + "test-results/", + "tests/assets/", + "tests/components/", + "tests/installation/fixture-scripts/", + "tests/third_party/", + "utils/", ]; export const baseRules = { - '@typescript-eslint/no-unused-vars': [2, { args: 'none', caughtErrors: 'none' }], + "@typescript-eslint/no-unused-vars": [ + 2, + { args: "none", caughtErrors: "none" }, + ], /** * Enforced rules */ // syntax preferences - 'object-curly-spacing': ['error', 'always'], - 'quotes': [2, 'single', { - 'avoidEscape': true, - 'allowTemplateLiterals': true - }], - 'jsx-quotes': [2, 'prefer-single'], - 'no-extra-semi': 2, - '@stylistic/semi': [2], - 'comma-style': [2, 'last'], - 'wrap-iife': [2, 'inside'], - 'spaced-comment': [2, 'always', { - 'markers': ['*'] - }], - 'eqeqeq': [2], - 'accessor-pairs': [2, { - 'getWithoutSet': false, - 'setWithoutGet': false - }], - 'brace-style': [2, '1tbs', { 'allowSingleLine': true }], - 'curly': [2, 'multi-or-nest', 'consistent'], - 'new-parens': 2, - 'arrow-parens': [2, 'as-needed'], - 'prefer-const': 2, - 'quote-props': [2, 'consistent'], - 'nonblock-statement-body-position': [2, 'below'], + "object-curly-spacing": ["error", "always"], + quotes: [ + 2, + "single", + { + avoidEscape: true, + allowTemplateLiterals: true, + }, + ], + "jsx-quotes": [2, "prefer-single"], + "no-extra-semi": 2, + "@stylistic/semi": [2], + "comma-style": [2, "last"], + "wrap-iife": [2, "inside"], + "spaced-comment": [ + 2, + "always", + { + markers: ["*"], + }, + ], + eqeqeq: [2], + "accessor-pairs": [ + 2, + { + getWithoutSet: false, + setWithoutGet: false, + }, + ], + "brace-style": [2, "1tbs", { allowSingleLine: true }], + curly: [2, "multi-or-nest", "consistent"], + "new-parens": 2, + "arrow-parens": [2, "as-needed"], + "prefer-const": 2, + "quote-props": [2, "consistent"], + "nonblock-statement-body-position": [2, "below"], // anti-patterns - 'no-var': 2, - 'no-with': 2, - 'no-multi-str': 2, - 'no-caller': 2, - 'no-implied-eval': 2, - 'no-labels': 2, - 'no-new-object': 2, - 'no-octal-escape': 2, - 'no-self-compare': 2, - 'no-shadow-restricted-names': 2, - 'no-cond-assign': 2, - 'no-debugger': 2, - 'no-dupe-keys': 2, - 'no-duplicate-case': 2, - 'no-empty-character-class': 2, - 'no-unreachable': 2, - 'no-unsafe-negation': 2, - 'radix': 2, - 'valid-typeof': 2, - 'no-implicit-globals': [2], - 'no-unused-expressions': [2, { 'allowShortCircuit': true, 'allowTernary': true, 'allowTaggedTemplates': true }], - 'no-proto': 2, + "no-var": 2, + "no-with": 2, + "no-multi-str": 2, + "no-caller": 2, + "no-implied-eval": 2, + "no-labels": 2, + "no-new-object": 2, + "no-octal-escape": 2, + "no-self-compare": 2, + "no-shadow-restricted-names": 2, + "no-cond-assign": 2, + "no-debugger": 2, + "no-dupe-keys": 2, + "no-duplicate-case": 2, + "no-empty-character-class": 2, + "no-unreachable": 2, + "no-unsafe-negation": 2, + radix: 2, + "valid-typeof": 2, + "no-implicit-globals": [2], + "no-unused-expressions": [ + 2, + { allowShortCircuit: true, allowTernary: true, allowTaggedTemplates: true }, + ], + "no-proto": 2, // es2015 features - 'require-yield': 2, - 'template-curly-spacing': [2, 'never'], + "require-yield": 2, + "template-curly-spacing": [2, "never"], // spacing details - 'space-infix-ops': 2, - 'space-in-parens': [2, 'never'], - 'array-bracket-spacing': [2, 'never'], - 'comma-spacing': [2, { 'before': false, 'after': true }], - 'keyword-spacing': [2, 'always'], - 'space-before-function-paren': [2, { - 'anonymous': 'never', - 'named': 'never', - 'asyncArrow': 'always' - }], - 'no-whitespace-before-property': 2, - 'keyword-spacing': [2, { - 'overrides': { - 'if': { 'after': true }, - 'else': { 'after': true }, - 'for': { 'after': true }, - 'while': { 'after': true }, - 'do': { 'after': true }, - 'switch': { 'after': true }, - 'return': { 'after': true } - } - }], - 'arrow-spacing': [2, { - 'after': true, - 'before': true - }], - '@stylistic/func-call-spacing': 2, - '@stylistic/type-annotation-spacing': 2, + "space-infix-ops": 2, + "space-in-parens": [2, "never"], + "array-bracket-spacing": [2, "never"], + "comma-spacing": [2, { before: false, after: true }], + "keyword-spacing": [2, "always"], + "space-before-function-paren": [ + 2, + { + anonymous: "never", + named: "never", + asyncArrow: "always", + }, + ], + "no-whitespace-before-property": 2, + "keyword-spacing": [ + 2, + { + overrides: { + if: { after: true }, + else: { after: true }, + for: { after: true }, + while: { after: true }, + do: { after: true }, + switch: { after: true }, + return: { after: true }, + }, + }, + ], + "arrow-spacing": [ + 2, + { + after: true, + before: true, + }, + ], + "@stylistic/func-call-spacing": 2, + "@stylistic/type-annotation-spacing": 2, // file whitespace - 'no-multiple-empty-lines': [2, { 'max': 2, 'maxEOF': 0 }], - 'no-mixed-spaces-and-tabs': 2, - 'no-trailing-spaces': 2, - 'linebreak-style': [process.platform === 'win32' ? 0 : 2, 'unix'], - 'indent': [2, 2, { 'SwitchCase': 1, 'CallExpression': { 'arguments': 2 }, 'MemberExpression': 2 }], - 'key-spacing': [2, { - 'beforeColon': false - }], - 'eol-last': 2, + "no-multiple-empty-lines": [2, { max: 2, maxEOF: 0 }], + "no-mixed-spaces-and-tabs": 2, + "no-trailing-spaces": 2, + "linebreak-style": [process.platform === "win32" ? 0 : 2, "unix"], + indent: [ + 2, + 2, + { SwitchCase: 1, CallExpression: { arguments: 2 }, MemberExpression: 2 }, + ], + "key-spacing": [ + 2, + { + beforeColon: false, + }, + ], + "eol-last": 2, // copyright - 'notice/notice': [2, { - 'mustMatch': 'Copyright', - 'templateFile': path.join(__dirname, 'utils', 'copyright.js'), - }], + "notice/notice": [ + 2, + { + mustMatch: "Copyright", + templateFile: path.join(__dirname, "utils", "copyright.js"), + }, + ], // react - 'react/react-in-jsx-scope': 0 + "react/react-in-jsx-scope": 0, }; const noFloatingPromisesRules = { - '@typescript-eslint/no-floating-promises': 'error', + "@typescript-eslint/no-floating-promises": "error", }; const noBooleanCompareRules = { - '@typescript-eslint/no-unnecessary-boolean-literal-compare': 2, + "@typescript-eslint/no-unnecessary-boolean-literal-compare": 2, }; const noWebGlobalsRules = { - 'no-restricted-globals': [ - 'error', - { 'name': 'window' }, - { 'name': 'document' }, - { 'name': 'globalThis' }, + "no-restricted-globals": [ + "error", + { name: "window" }, + { name: "document" }, + { name: "globalThis" }, ], }; const noNodeGlobalsRules = { - 'no-restricted-globals': [ - 'error', - { 'name': 'process' }, - ], + "no-restricted-globals": ["error", { name: "process" }], }; const importOrderRules = { - 'import/order': [2, { - 'groups': ['builtin', 'external', 'internal', ['parent', 'sibling'], 'index', 'type'], - 'newlines-between': 'always', - }], - 'import/consistent-type-specifier-style': [2, 'prefer-top-level'] + "import/order": [ + 2, + { + groups: [ + "builtin", + "external", + "internal", + ["parent", "sibling"], + "index", + "type", + ], + "newlines-between": "always", + }, + ], + "import/consistent-type-specifier-style": [2, "prefer-top-level"], }; const languageOptions = { parser: tsParser, ecmaVersion: 9, - sourceType: 'module', + sourceType: "module", }; const languageOptionsWithTsConfig = { parser: tsParser, ecmaVersion: 9, - sourceType: 'module', + sourceType: "module", parserOptions: { - project: path.join(__dirname, 'tsconfig.json'), + project: path.join(__dirname, "tsconfig.json"), }, }; -export default [{ - ignores, -}, { - files: ['**/*.ts'], - plugins, - languageOptions, - rules: baseRules, -}, { - files: ['packages/**/*.ts'], - languageOptions: languageOptionsWithTsConfig, - rules: { - 'no-console': 2, - 'no-restricted-properties': [2, { - 'object': 'process', - 'property': 'exit', - 'message': 'Please use gracefullyProcessExitDoNotHang function to exit the process.', - }], - } -}, { - files: [ - 'packages/**/*.ts', - ], - rules: { - ...importOrderRules +const compat = new FlatCompat({ + baseDirectory: __dirname, + recommendedConfig: js.configs.recommended, + allConfig: js.configs.all, +}); +const reactBaseConfig = fixupConfigRules( + compat.extends("plugin:react/recommended", "plugin:react-hooks/recommended") +); +const reactFiles = [ + `packages/html-reporter/src/**/*.ts`, + `packages/html-reporter/src/**/*.tsx`, + `packages/recorder/src/**/*.ts`, + `packages/recorder/src/**/*.tsx`, + `packages/trace-viewer/src/**/*.ts`, + `packages/trace-viewer/src/**/*.tsx`, + `packages/web/src/**/*.ts`, + `packages/web/src/**/*.tsx`, +]; + +function reactPackageSection(packageName) { + return { + files: [ + `packages/${packageName}/src/**/*.ts`, + `packages/${packageName}/src/**/*.tsx`, + `packages/web/src/**/*.ts`, + `packages/web/src/**/*.tsx`, + ], + languageOptions: { + parser: tsParser, + ecmaVersion: 9, + sourceType: "module", + parserOptions: { + project: path.join(__dirname, "packages", packageName, "tsconfig.json"), + }, + }, + rules: { + ...baseRules, + "no-console": 2, + }, + }; +} + +export default [ + { + ignores, }, -}, { - files: ['packages/playwright/**/*.ts'], - rules: { - ...noFloatingPromisesRules, - } -}, { - files: ['packages/playwright/src/reporters/**/*.ts'], - languageOptions: languageOptionsWithTsConfig, - rules: { - 'no-console': 'off' - } -}, { - files: [ - 'packages/playwright-core/src/server/injected/**/*.ts', - 'packages/playwright-core/src/server/isomorphic/**/*.ts', - 'packages/playwright-core/src/utils/isomorphic/**/*.ts', - ], - languageOptions: languageOptionsWithTsConfig, - rules: { - ...noWebGlobalsRules, - ...noFloatingPromisesRules, - ...noBooleanCompareRules, - } -}, { - files: [ - 'packages/playwright-core/src/client/**/*.ts', - 'packages/playwright-core/src/protocol/**/*.ts', - 'packages/playwright-core/src/utils/**/*.ts', - ], - languageOptions: languageOptionsWithTsConfig, - rules: { - ...noNodeGlobalsRules, - ...noFloatingPromisesRules, - ...noBooleanCompareRules, - } -}, { - files: ['tests/**/*.spec.js', 'tests/**/*.ts'], - languageOptions: { - parser: tsParser, - ecmaVersion: 9, - sourceType: 'module', - parserOptions: { - project: path.join(__dirname, 'tests', 'tsconfig.json'), + { + files: ["**/*.ts", "**/*.tsx"], + plugins, + languageOptions, + rules: baseRules, + settings: { + react: { version: "detect" }, }, }, - rules: { - ...noFloatingPromisesRules, - } -}]; + { + files: ["packages/**/*.ts"], + languageOptions: languageOptionsWithTsConfig, + rules: { + "no-console": 2, + "no-restricted-properties": [ + 2, + { + object: "process", + property: "exit", + message: + "Please use gracefullyProcessExitDoNotHang function to exit the process.", + }, + ], + }, + }, + { + files: ["packages/**/*.ts"], + rules: { + ...importOrderRules, + }, + }, + { + files: ["packages/playwright/**/*.ts"], + rules: { + ...noFloatingPromisesRules, + }, + }, + { + files: ["packages/playwright/src/reporters/**/*.ts"], + languageOptions: languageOptionsWithTsConfig, + rules: { + "no-console": "off", + }, + }, + { + files: [ + "packages/playwright-core/src/server/injected/**/*.ts", + "packages/playwright-core/src/server/isomorphic/**/*.ts", + "packages/playwright-core/src/utils/isomorphic/**/*.ts", + ], + languageOptions: languageOptionsWithTsConfig, + rules: { + ...noWebGlobalsRules, + ...noFloatingPromisesRules, + ...noBooleanCompareRules, + }, + }, + { + files: [ + "packages/playwright-core/src/client/**/*.ts", + "packages/playwright-core/src/protocol/**/*.ts", + "packages/playwright-core/src/utils/**/*.ts", + ], + languageOptions: languageOptionsWithTsConfig, + rules: { + ...noNodeGlobalsRules, + ...noFloatingPromisesRules, + ...noBooleanCompareRules, + }, + }, + { + files: ["tests/**/*.spec.js", "tests/**/*.ts"], + languageOptions: { + parser: tsParser, + ecmaVersion: 9, + sourceType: "module", + parserOptions: { + project: path.join(__dirname, "tests", "tsconfig.json"), + }, + }, + rules: { + ...noFloatingPromisesRules, + }, + }, + ...reactBaseConfig.map((config) => ({ + ...config, + files: reactFiles, + })), + reactPackageSection("html-reporter"), + reactPackageSection("recorder"), + reactPackageSection("trace-viewer"), +]; diff --git a/package.json b/package.json index 7c7475f09f..e72cdee4d1 100644 --- a/package.json +++ b/package.json @@ -30,7 +30,7 @@ "ttest": "node ./tests/playwright-test/stable-test-runner/node_modules/@playwright/test/cli test --config=tests/playwright-test/playwright.config.ts", "ct": "playwright test tests/components/test-all.spec.js --reporter=list", "test": "playwright test --config=tests/library/playwright.config.ts", - "eslint": "eslint --cache && eslint -c eslint-react.config.mjs", + "eslint": "eslint --cache", "tsc": "tsc -p . && tsc -p packages/html-reporter/", "build-installer": "babel -s --extensions \".ts\" --out-dir packages/playwright-core/lib/utils/ packages/playwright-core/src/utils", "doc": "node utils/doclint/cli.js", diff --git a/packages/recorder/vite.config.ts b/packages/recorder/vite.config.ts index 17468bdc69..b26956d042 100644 --- a/packages/recorder/vite.config.ts +++ b/packages/recorder/vite.config.ts @@ -14,9 +14,10 @@ * limitations under the License. */ +import path from 'path'; + import { defineConfig } from 'vite'; import react from '@vitejs/plugin-react'; -import path from 'path'; // https://vitejs.dev/config/ export default defineConfig({ diff --git a/packages/trace-viewer/src/sw/snapshotRenderer.ts b/packages/trace-viewer/src/sw/snapshotRenderer.ts index 722ef69e40..d9a903813a 100644 --- a/packages/trace-viewer/src/sw/snapshotRenderer.ts +++ b/packages/trace-viewer/src/sw/snapshotRenderer.ts @@ -15,6 +15,7 @@ */ import { escapeHTMLAttribute, escapeHTML } from '@isomorphic/stringUtils'; + import type { FrameSnapshot, NodeNameAttributesChildNodesSnapshot, NodeSnapshot, RenderedFrameSnapshot, ResourceSnapshot, SubtreeReferenceSnapshot } from '@trace/snapshot'; import type { PageEntry } from '../types/entries'; import type { LRUCache } from './lruCache'; diff --git a/packages/trace-viewer/src/sw/snapshotStorage.ts b/packages/trace-viewer/src/sw/snapshotStorage.ts index a0adadefb1..d08fba6470 100644 --- a/packages/trace-viewer/src/sw/snapshotStorage.ts +++ b/packages/trace-viewer/src/sw/snapshotStorage.ts @@ -14,11 +14,13 @@ * limitations under the License. */ -import type { FrameSnapshot, ResourceSnapshot } from '@trace/snapshot'; import { rewriteURLForCustomProtocol, SnapshotRenderer } from './snapshotRenderer'; -import type { PageEntry } from '../types/entries'; import { LRUCache } from './lruCache'; +import type { FrameSnapshot, ResourceSnapshot } from '@trace/snapshot'; +import type { PageEntry } from '../types/entries'; + + export class SnapshotStorage { private _frameSnapshots = new Map; hasEntry(entryName: string): Promise; diff --git a/packages/trace-viewer/src/sw/traceModelBackends.ts b/packages/trace-viewer/src/sw/traceModelBackends.ts index 4f8ea94c3d..91aad60c9a 100644 --- a/packages/trace-viewer/src/sw/traceModelBackends.ts +++ b/packages/trace-viewer/src/sw/traceModelBackends.ts @@ -13,10 +13,10 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - -import type * as zip from '@zip.js/zip.js'; // @ts-ignore import * as zipImport from '@zip.js/zip.js/lib/zip-no-worker-inflate.js'; + +import type * as zip from '@zip.js/zip.js'; import type { TraceModelBackend } from './traceModel'; const zipjs = zipImport as typeof zip; diff --git a/packages/trace-viewer/src/ui/modelUtil.ts b/packages/trace-viewer/src/ui/modelUtil.ts index 6e5ad33bf9..00f88cc8ec 100644 --- a/packages/trace-viewer/src/ui/modelUtil.ts +++ b/packages/trace-viewer/src/ui/modelUtil.ts @@ -14,13 +14,14 @@ * limitations under the License. */ +import { kTopLevelAttachmentPrefix } from '@testIsomorphic/util'; + import type { Language } from '@isomorphic/locatorGenerators'; import type { ResourceSnapshot } from '@trace/snapshot'; import type * as trace from '@trace/trace'; import type { ActionTraceEvent } from '@trace/trace'; import type { ActionEntry, ContextEntry, PageEntry } from '../types/entries'; import type { StackFrame } from '@protocol/channels'; -import { kTopLevelAttachmentPrefix } from '@testIsomorphic/util'; const contextSymbol = Symbol('context'); const nextInContextSymbol = Symbol('next'); diff --git a/packages/trace-viewer/vite.config.ts b/packages/trace-viewer/vite.config.ts index 00b367bbc8..0f7615149a 100644 --- a/packages/trace-viewer/vite.config.ts +++ b/packages/trace-viewer/vite.config.ts @@ -14,10 +14,12 @@ * limitations under the License. */ +import path from 'path'; + import { defineConfig } from 'vite'; import react from '@vitejs/plugin-react'; + import { bundle } from './bundle'; -import path from 'path'; // https://vitejs.dev/config/ export default defineConfig({ diff --git a/packages/trace-viewer/vite.sw.config.ts b/packages/trace-viewer/vite.sw.config.ts index 60e90b96ac..1db9593644 100644 --- a/packages/trace-viewer/vite.sw.config.ts +++ b/packages/trace-viewer/vite.sw.config.ts @@ -14,10 +14,12 @@ * limitations under the License. */ +import path from 'path'; + import { defineConfig } from 'vite'; import react from '@vitejs/plugin-react'; + import { bundle } from './bundle'; -import path from 'path'; // https://vitejs.dev/config/ export default defineConfig({ diff --git a/packages/web/playwright.config.ts b/packages/web/playwright.config.ts index 6cf9899b36..7b32fcf6b2 100644 --- a/packages/web/playwright.config.ts +++ b/packages/web/playwright.config.ts @@ -15,6 +15,7 @@ */ import { devices, defineConfig } from '@playwright/experimental-ct-react'; + import type { ReporterDescription } from '@playwright/test'; const reporters = () => { diff --git a/packages/web/src/theme.ts b/packages/web/src/theme.ts index 426a66a97e..f81e230f78 100644 --- a/packages/web/src/theme.ts +++ b/packages/web/src/theme.ts @@ -15,6 +15,7 @@ */ import React from 'react'; + import { settings } from './uiUtils'; declare global { diff --git a/packages/web/src/uiUtils.ts b/packages/web/src/uiUtils.ts index cded19af20..ed070fcfbc 100644 --- a/packages/web/src/uiUtils.ts +++ b/packages/web/src/uiUtils.ts @@ -14,9 +14,10 @@ limitations under the License. */ -import type { EffectCallback } from 'react'; import React from 'react'; +import type { EffectCallback } from 'react'; + // Recalculates the value when dependencies change. export function useAsyncMemo(fn: () => Promise, deps: React.DependencyList, initialValue: T, resetValue?: T) { const [value, setValue] = React.useState(initialValue); diff --git a/utils/doclint/linting-code-snippets/cli.js b/utils/doclint/linting-code-snippets/cli.js index 2892fdc193..a5a7419805 100644 --- a/utils/doclint/linting-code-snippets/cli.js +++ b/utils/doclint/linting-code-snippets/cli.js @@ -160,7 +160,6 @@ class JSLintingService extends LintingService { baseConfig, plugins: /** @type {any}*/({ '@stylistic': (await import('@stylistic/eslint-plugin')).default, - 'notice': await import('eslint-plugin-notice'), }), ignore: false, overrideConfig: {