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",
|
"@types/showdown": "^2.0.6",
|
||||||
"@typescript-eslint/eslint-plugin": "^8.7.0",
|
"@typescript-eslint/eslint-plugin": "^8.7.0",
|
||||||
"@typescript-eslint/parser": "^8.7.0",
|
"@typescript-eslint/parser": "^8.7.0",
|
||||||
"@wdio/browser-runner": "^9.1.0",
|
"@wdio/browser-runner": "^8.40.2",
|
||||||
"@wdio/cli": "^9.1.0",
|
"@wdio/cli": "^8.40.2",
|
||||||
"@wdio/mocha-framework": "^9.1.0",
|
"@wdio/mocha-framework": "^9.1.0",
|
||||||
"@wdio/spec-reporter": "^9.1.0",
|
"@wdio/spec-reporter": "^9.1.0",
|
||||||
"babel-plugin-macros": "^3.1.0",
|
"babel-plugin-macros": "^3.1.0",
|
||||||
@ -86,7 +86,6 @@
|
|||||||
"esbuild": "^0.24.0",
|
"esbuild": "^0.24.0",
|
||||||
"eslint": "^9.11.1",
|
"eslint": "^9.11.1",
|
||||||
"eslint-plugin-lit": "^1.14.0",
|
"eslint-plugin-lit": "^1.14.0",
|
||||||
"eslint-plugin-sonarjs": "^2.0.2",
|
|
||||||
"eslint-plugin-wc": "^2.1.0",
|
"eslint-plugin-wc": "^2.1.0",
|
||||||
"github-slugger": "^2.0.0",
|
"github-slugger": "^2.0.0",
|
||||||
"glob": "^11.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 eslint from "@eslint/js";
|
||||||
import tsparser from "@typescript-eslint/parser";
|
import tsparser from "@typescript-eslint/parser";
|
||||||
import litconf from "eslint-plugin-lit";
|
import litconf from "eslint-plugin-lit";
|
||||||
import sonar from "eslint-plugin-sonarjs";
|
|
||||||
import wcconf from "eslint-plugin-wc";
|
import wcconf from "eslint-plugin-wc";
|
||||||
import globals from "globals";
|
import globals from "globals";
|
||||||
import tseslint from "typescript-eslint";
|
import tseslint from "typescript-eslint";
|
||||||
@ -9,7 +8,9 @@ import tseslint from "typescript-eslint";
|
|||||||
const MAX_DEPTH = 4;
|
const MAX_DEPTH = 4;
|
||||||
const MAX_NESTED_CALLBACKS = 4;
|
const MAX_NESTED_CALLBACKS = 4;
|
||||||
const MAX_PARAMS = 5;
|
const MAX_PARAMS = 5;
|
||||||
const MAX_COGNITIVE_COMPLEXITY = 9;
|
|
||||||
|
// Waiting for SonarJS to be compatible
|
||||||
|
// const MAX_COGNITIVE_COMPLEXITY = 9;
|
||||||
|
|
||||||
const rules = {
|
const rules = {
|
||||||
"accessor-pairs": "error",
|
"accessor-pairs": "error",
|
||||||
@ -128,9 +129,11 @@ const rules = {
|
|||||||
|
|
||||||
"no-unused-vars": "off",
|
"no-unused-vars": "off",
|
||||||
"no-console": ["error", { allow: ["debug", "warn", "error"] }],
|
"no-console": ["error", { allow: ["debug", "warn", "error"] }],
|
||||||
"sonarjs/cognitive-complexity": ["off", MAX_COGNITIVE_COMPLEXITY],
|
// SonarJS is not yet compatible with ESLint 9. Commenting these out
|
||||||
"sonarjs/no-duplicate-string": "off",
|
// until it is.
|
||||||
"sonarjs/no-nested-template-literals": "off",
|
// "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/ban-ts-comment": "off",
|
||||||
"@typescript-eslint/no-unused-vars": [
|
"@typescript-eslint/no-unused-vars": [
|
||||||
"error",
|
"error",
|
||||||
@ -167,7 +170,7 @@ export default [
|
|||||||
wcconf.configs["flat/recommended"],
|
wcconf.configs["flat/recommended"],
|
||||||
litconf.configs["flat/recommended"],
|
litconf.configs["flat/recommended"],
|
||||||
...tseslint.configs.recommended,
|
...tseslint.configs.recommended,
|
||||||
sonar.configs.recommended,
|
// sonar.configs.recommended,
|
||||||
{
|
{
|
||||||
languageOptions: {
|
languageOptions: {
|
||||||
parser: tsparser,
|
parser: tsparser,
|
||||||
|
|||||||
@ -1,7 +1,6 @@
|
|||||||
import eslint from "@eslint/js";
|
import eslint from "@eslint/js";
|
||||||
import tsparser from "@typescript-eslint/parser";
|
import tsparser from "@typescript-eslint/parser";
|
||||||
import litconf from "eslint-plugin-lit";
|
import litconf from "eslint-plugin-lit";
|
||||||
import sonar from "eslint-plugin-sonarjs";
|
|
||||||
import wcconf from "eslint-plugin-wc";
|
import wcconf from "eslint-plugin-wc";
|
||||||
import globals from "globals";
|
import globals from "globals";
|
||||||
import tseslint from "typescript-eslint";
|
import tseslint from "typescript-eslint";
|
||||||
@ -30,7 +29,7 @@ export default [
|
|||||||
wcconf.configs["flat/recommended"],
|
wcconf.configs["flat/recommended"],
|
||||||
litconf.configs["flat/recommended"],
|
litconf.configs["flat/recommended"],
|
||||||
...tseslint.configs.recommended,
|
...tseslint.configs.recommended,
|
||||||
sonar.configs.recommended,
|
// sonar.configs.recommended,
|
||||||
{
|
{
|
||||||
languageOptions: {
|
languageOptions: {
|
||||||
parser: tsparser,
|
parser: tsparser,
|
||||||
@ -43,9 +42,11 @@ export default [
|
|||||||
rules: {
|
rules: {
|
||||||
"no-unused-vars": "off",
|
"no-unused-vars": "off",
|
||||||
"no-console": ["error", { allow: ["debug", "warn", "error"] }],
|
"no-console": ["error", { allow: ["debug", "warn", "error"] }],
|
||||||
"sonarjs/cognitive-complexity": ["off", 9],
|
// SonarJS is not yet compatible with ESLint 9. Commenting these out
|
||||||
"sonarjs/no-duplicate-string": "off",
|
// until it is.
|
||||||
"sonarjs/no-nested-template-literals": "off",
|
// "sonarjs/cognitive-complexity": ["off", 9],
|
||||||
|
// "sonarjs/no-duplicate-string": "off",
|
||||||
|
// "sonarjs/no-nested-template-literals": "off",
|
||||||
"@typescript-eslint/ban-ts-comment": "off",
|
"@typescript-eslint/ban-ts-comment": "off",
|
||||||
"@typescript-eslint/no-unused-vars": [
|
"@typescript-eslint/no-unused-vars": [
|
||||||
"error",
|
"error",
|
||||||
|
|||||||
@ -7,11 +7,14 @@ import tsconfigPaths from "vite-tsconfig-paths";
|
|||||||
const isProdBuild = process.env.NODE_ENV === "production";
|
const isProdBuild = process.env.NODE_ENV === "production";
|
||||||
const apiBasePath = process.env.AK_API_BASE_PATH || "";
|
const apiBasePath = process.env.AK_API_BASE_PATH || "";
|
||||||
const runHeadless = process.env.CI !== undefined;
|
const runHeadless = process.env.CI !== undefined;
|
||||||
|
|
||||||
|
const DEFAULT_MAX_INSTANCES = 10;
|
||||||
|
|
||||||
const maxInstances =
|
const maxInstances =
|
||||||
process.env.MAX_INSTANCES !== undefined
|
process.env.MAX_INSTANCES === undefined
|
||||||
? parseInt(process.env.MAX_INSTANCES, 10)
|
? parseInt(process.env.MAX_INSTANCES, 10)
|
||||||
: runHeadless
|
: runHeadless
|
||||||
? 10
|
? DEFAULT_MAX_INSTANCES
|
||||||
: 1;
|
: 1;
|
||||||
|
|
||||||
export const config: WebdriverIO.Config = {
|
export const config: WebdriverIO.Config = {
|
||||||
|
|||||||
Reference in New Issue
Block a user