web: small fixes for wdio and lint
- Roll back another dependabot breaking change, this time to WebdriverIO - Remove the redundant scripts wrapping ESLint for Precommit mode. Access to those modes is available through the flags to the `./web/scripts/eslint.mjs` script. - Remove SonarJS checks until SonarJS is ESLint 9 compatible. - Minor nitpicking.
This commit is contained in:
		
							
								
								
									
										5994
									
								
								web/package-lock.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										5994
									
								
								web/package-lock.json
									
									
									
										generated
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @ -75,8 +75,8 @@ | ||||
|         "@types/showdown": "^2.0.6", | ||||
|         "@typescript-eslint/eslint-plugin": "^8.7.0", | ||||
|         "@typescript-eslint/parser": "^8.7.0", | ||||
|         "@wdio/browser-runner": "^9.1.0", | ||||
|         "@wdio/cli": "^9.1.0", | ||||
|         "@wdio/browser-runner": "^8.40.2", | ||||
|         "@wdio/cli": "^8.40.2", | ||||
|         "@wdio/mocha-framework": "^9.1.0", | ||||
|         "@wdio/spec-reporter": "^9.1.0", | ||||
|         "babel-plugin-macros": "^3.1.0", | ||||
| @ -86,7 +86,6 @@ | ||||
|         "esbuild": "^0.24.0", | ||||
|         "eslint": "^9.11.1", | ||||
|         "eslint-plugin-lit": "^1.14.0", | ||||
|         "eslint-plugin-sonarjs": "^2.0.2", | ||||
|         "eslint-plugin-wc": "^2.1.0", | ||||
|         "github-slugger": "^2.0.0", | ||||
|         "glob": "^11.0.0", | ||||
|  | ||||
| @ -1,67 +0,0 @@ | ||||
| import { execFileSync } from "child_process"; | ||||
| import { ESLint } from "eslint"; | ||||
| import path from "path"; | ||||
| import process from "process"; | ||||
|  | ||||
| // Code assumes this script is in the './web/scripts' folder. | ||||
| const projectRoot = execFileSync("git", ["rev-parse", "--show-toplevel"], { | ||||
|     encoding: "utf8", | ||||
| }).replace("\n", ""); | ||||
| process.chdir(path.join(projectRoot, "./web")); | ||||
|  | ||||
| const eslintConfig = { | ||||
|     fix: true, | ||||
|     overrideConfig: { | ||||
|         env: { | ||||
|             browser: true, | ||||
|             es2021: true, | ||||
|         }, | ||||
|         extends: [ | ||||
|             "eslint:recommended", | ||||
|             "plugin:@typescript-eslint/recommended", | ||||
|             "plugin:lit/recommended", | ||||
|             "plugin:custom-elements/recommended", | ||||
|             "plugin:storybook/recommended", | ||||
|             "plugin:sonarjs/recommended", | ||||
|         ], | ||||
|         parser: "@typescript-eslint/parser", | ||||
|         parserOptions: { | ||||
|             ecmaVersion: 12, | ||||
|             sourceType: "module", | ||||
|             project: true, | ||||
|         }, | ||||
|         plugins: ["@typescript-eslint", "lit", "custom-elements", "sonarjs"], | ||||
|         ignorePatterns: ["authentik-live-tests/**", "./.storybook/**/*.ts"], | ||||
|         rules: { | ||||
|             "indent": "off", | ||||
|             "linebreak-style": ["error", "unix"], | ||||
|             "quotes": ["error", "double", { avoidEscape: true }], | ||||
|             "semi": ["error", "always"], | ||||
|             "@typescript-eslint/ban-ts-comment": "off", | ||||
|             "no-unused-vars": "off", | ||||
|             "sonarjs/cognitive-complexity": ["warn", 9], | ||||
|             "sonarjs/no-duplicate-string": "off", | ||||
|             "sonarjs/no-nested-template-literals": "off", | ||||
|             "@typescript-eslint/no-unused-vars": [ | ||||
|                 "error", | ||||
|                 { | ||||
|                     argsIgnorePattern: "^_", | ||||
|                     varsIgnorePattern: "^_", | ||||
|                     caughtErrorsIgnorePattern: "^_", | ||||
|                 }, | ||||
|             ], | ||||
|             "no-console": ["error", { allow: ["debug", "warn", "error"] }], | ||||
|         }, | ||||
|     }, | ||||
| }; | ||||
|  | ||||
| const updated = ["./src/", "./build.mjs", "./scripts/*.mjs"]; | ||||
|  | ||||
| const eslint = new ESLint(eslintConfig); | ||||
| const results = await eslint.lintFiles(updated); | ||||
| const formatter = await eslint.loadFormatter("stylish"); | ||||
| const resultText = formatter.format(results); | ||||
| const errors = results.reduce((acc, result) => acc + result.errorCount, 0); | ||||
|  | ||||
| console.log(resultText); | ||||
| process.exit(errors > 1 ? 1 : 0); | ||||
| @ -1,94 +0,0 @@ | ||||
| import { execFileSync } from "child_process"; | ||||
| import { ESLint } from "eslint"; | ||||
| import path from "path"; | ||||
| import process from "process"; | ||||
|  | ||||
| // Code assumes this script is in the './web/scripts' folder. | ||||
| const projectRoot = execFileSync("git", ["rev-parse", "--show-toplevel"], { | ||||
|     encoding: "utf8", | ||||
| }).replace("\n", ""); | ||||
| process.chdir(path.join(projectRoot, "./web")); | ||||
|  | ||||
| const eslintConfig = { | ||||
|     fix: true, | ||||
|     overrideConfig: { | ||||
|         env: { | ||||
|             browser: true, | ||||
|             es2021: true, | ||||
|         }, | ||||
|         extends: [ | ||||
|             "eslint:recommended", | ||||
|             "plugin:@typescript-eslint/recommended", | ||||
|             "plugin:lit/recommended", | ||||
|             "plugin:custom-elements/recommended", | ||||
|             "plugin:storybook/recommended", | ||||
|             "plugin:sonarjs/recommended", | ||||
|         ], | ||||
|         parser: "@typescript-eslint/parser", | ||||
|         parserOptions: { | ||||
|             ecmaVersion: 12, | ||||
|             sourceType: "module", | ||||
|             project: true, | ||||
|         }, | ||||
|         plugins: ["@typescript-eslint", "lit", "custom-elements", "sonarjs"], | ||||
|         ignorePatterns: ["authentik-live-tests/**", "./.storybook/**/*.ts"], | ||||
|         rules: { | ||||
|             "indent": "off", | ||||
|             "linebreak-style": ["error", "unix"], | ||||
|             "quotes": ["error", "double", { avoidEscape: true }], | ||||
|             "semi": ["error", "always"], | ||||
|             "@typescript-eslint/ban-ts-comment": "off", | ||||
|             "no-unused-vars": "off", | ||||
|             "sonarjs/cognitive-complexity": ["warn", 9], | ||||
|             "sonarjs/no-duplicate-string": "off", | ||||
|             "sonarjs/no-nested-template-literals": "off", | ||||
|             "@typescript-eslint/no-unused-vars": [ | ||||
|                 "error", | ||||
|                 { | ||||
|                     argsIgnorePattern: "^_", | ||||
|                     varsIgnorePattern: "^_", | ||||
|                     caughtErrorsIgnorePattern: "^_", | ||||
|                 }, | ||||
|             ], | ||||
|             "no-console": ["error", { allow: ["debug", "warn", "error"] }], | ||||
|         }, | ||||
|     }, | ||||
| }; | ||||
|  | ||||
| const porcelainV1 = /^(..)\s+(.*$)/; | ||||
| const gitStatus = execFileSync("git", ["status", "--porcelain", "."], { encoding: "utf8" }); | ||||
|  | ||||
| const statuses = gitStatus.split("\n").reduce((acc, line) => { | ||||
|     const match = porcelainV1.exec(line.replace("\n")); | ||||
|     if (!match) { | ||||
|         return acc; | ||||
|     } | ||||
|     const [status, path] = Array.from(match).slice(1, 3); | ||||
|     return [...acc, [status, path.split("\x00")[0]]]; | ||||
| }, []); | ||||
|  | ||||
| const isModified = /^(M|\?|\s)(M|\?|\s)/; | ||||
| const modified = (s) => isModified.test(s); | ||||
|  | ||||
| const isCheckable = /\.(ts|js|mjs)$/; | ||||
| const checkable = (s) => isCheckable.test(s); | ||||
|  | ||||
| const ignored = /\/\.storybook\//; | ||||
| const notIgnored = (s) => !ignored.test(s); | ||||
|  | ||||
| const updated = statuses.reduce( | ||||
|     (acc, [status, filename]) => | ||||
|         modified(status) && checkable(filename) && notIgnored(filename) | ||||
|             ? [...acc, path.join(projectRoot, filename)] | ||||
|             : acc, | ||||
|     [], | ||||
| ); | ||||
|  | ||||
| const eslint = new ESLint(eslintConfig); | ||||
| const results = await eslint.lintFiles(updated); | ||||
| const formatter = await eslint.loadFormatter("stylish"); | ||||
| const resultText = formatter.format(results); | ||||
| const errors = results.reduce((acc, result) => acc + result.errorCount, 0); | ||||
|  | ||||
| console.log(resultText); | ||||
| process.exit(errors > 1 ? 1 : 0); | ||||
| @ -1,7 +1,6 @@ | ||||
| import eslint from "@eslint/js"; | ||||
| import tsparser from "@typescript-eslint/parser"; | ||||
| import litconf from "eslint-plugin-lit"; | ||||
| import sonar from "eslint-plugin-sonarjs"; | ||||
| import wcconf from "eslint-plugin-wc"; | ||||
| import globals from "globals"; | ||||
| import tseslint from "typescript-eslint"; | ||||
| @ -9,7 +8,9 @@ import tseslint from "typescript-eslint"; | ||||
| const MAX_DEPTH = 4; | ||||
| const MAX_NESTED_CALLBACKS = 4; | ||||
| const MAX_PARAMS = 5; | ||||
| const MAX_COGNITIVE_COMPLEXITY = 9; | ||||
|  | ||||
| // Waiting for SonarJS to be compatible | ||||
| // const MAX_COGNITIVE_COMPLEXITY = 9; | ||||
|  | ||||
| const rules = { | ||||
|     "accessor-pairs": "error", | ||||
| @ -128,9 +129,11 @@ const rules = { | ||||
|  | ||||
|     "no-unused-vars": "off", | ||||
|     "no-console": ["error", { allow: ["debug", "warn", "error"] }], | ||||
|     "sonarjs/cognitive-complexity": ["off", MAX_COGNITIVE_COMPLEXITY], | ||||
|     "sonarjs/no-duplicate-string": "off", | ||||
|     "sonarjs/no-nested-template-literals": "off", | ||||
|     // SonarJS is not yet compatible with ESLint 9.  Commenting these out | ||||
|     // until it is. | ||||
|     //    "sonarjs/cognitive-complexity": ["off", MAX_COGNITIVE_COMPLEXITY], | ||||
|     //    "sonarjs/no-duplicate-string": "off", | ||||
|     //    "sonarjs/no-nested-template-literals": "off", | ||||
|     "@typescript-eslint/ban-ts-comment": "off", | ||||
|     "@typescript-eslint/no-unused-vars": [ | ||||
|         "error", | ||||
| @ -167,7 +170,7 @@ export default [ | ||||
|     wcconf.configs["flat/recommended"], | ||||
|     litconf.configs["flat/recommended"], | ||||
|     ...tseslint.configs.recommended, | ||||
|     sonar.configs.recommended, | ||||
|     //     sonar.configs.recommended, | ||||
|     { | ||||
|         languageOptions: { | ||||
|             parser: tsparser, | ||||
|  | ||||
| @ -1,7 +1,6 @@ | ||||
| import eslint from "@eslint/js"; | ||||
| import tsparser from "@typescript-eslint/parser"; | ||||
| import litconf from "eslint-plugin-lit"; | ||||
| import sonar from "eslint-plugin-sonarjs"; | ||||
| import wcconf from "eslint-plugin-wc"; | ||||
| import globals from "globals"; | ||||
| import tseslint from "typescript-eslint"; | ||||
| @ -30,7 +29,7 @@ export default [ | ||||
|     wcconf.configs["flat/recommended"], | ||||
|     litconf.configs["flat/recommended"], | ||||
|     ...tseslint.configs.recommended, | ||||
|     sonar.configs.recommended, | ||||
|     //    sonar.configs.recommended, | ||||
|     { | ||||
|         languageOptions: { | ||||
|             parser: tsparser, | ||||
| @ -43,9 +42,11 @@ export default [ | ||||
|         rules: { | ||||
|             "no-unused-vars": "off", | ||||
|             "no-console": ["error", { allow: ["debug", "warn", "error"] }], | ||||
|             "sonarjs/cognitive-complexity": ["off", 9], | ||||
|             "sonarjs/no-duplicate-string": "off", | ||||
|             "sonarjs/no-nested-template-literals": "off", | ||||
|             // SonarJS is not yet compatible with ESLint 9.  Commenting these out | ||||
|             // until it is. | ||||
|             //    "sonarjs/cognitive-complexity": ["off", 9], | ||||
|             //    "sonarjs/no-duplicate-string": "off", | ||||
|             //    "sonarjs/no-nested-template-literals": "off", | ||||
|             "@typescript-eslint/ban-ts-comment": "off", | ||||
|             "@typescript-eslint/no-unused-vars": [ | ||||
|                 "error", | ||||
|  | ||||
| @ -7,11 +7,14 @@ import tsconfigPaths from "vite-tsconfig-paths"; | ||||
| const isProdBuild = process.env.NODE_ENV === "production"; | ||||
| const apiBasePath = process.env.AK_API_BASE_PATH || ""; | ||||
| const runHeadless = process.env.CI !== undefined; | ||||
|  | ||||
| const DEFAULT_MAX_INSTANCES = 10; | ||||
|  | ||||
| const maxInstances = | ||||
|     process.env.MAX_INSTANCES !== undefined | ||||
|     process.env.MAX_INSTANCES === undefined | ||||
|         ? parseInt(process.env.MAX_INSTANCES, 10) | ||||
|         : runHeadless | ||||
|           ? 10 | ||||
|           ? DEFAULT_MAX_INSTANCES | ||||
|           : 1; | ||||
|  | ||||
| export const config: WebdriverIO.Config = { | ||||
|  | ||||
		Reference in New Issue
	
	Block a user
	 Ken Sternberg
					Ken Sternberg