diff --git a/.github/dependabot.yml b/.github/dependabot.yml index c9fb5a08..5838fe7f 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -16,7 +16,7 @@ updates: patterns: - '@shlinkio/eslint-config-js-coding-standard' - '@typescript-eslint/*' - - 'eslint-plugin-*' + - '*eslint-plugin*' shlink: patterns: - '@shlinkio/*' diff --git a/docker-compose.yml b/docker-compose.yml index 5bf7cd4b..12de7071 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,7 +1,7 @@ services: shlink_web_client_node: container_name: shlink_web_client_node - image: node:20.7-alpine + image: node:22.3-alpine command: /bin/sh -c "cd /home/shlink/www && npm install && npm run start" volumes: - ./:/home/shlink/www diff --git a/package-lock.json b/package-lock.json index aa3d35c3..7ec5f9e8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -42,6 +42,7 @@ "devDependencies": { "@shlinkio/eslint-config-js-coding-standard": "~2.5.1", "@shlinkio/stylelint-config-css-coding-standard": "~1.1.1", + "@stylistic/eslint-plugin": "^2.2.0", "@testing-library/jest-dom": "^6.4.6", "@testing-library/react": "^16.0.0", "@testing-library/user-event": "^14.5.2", @@ -3075,7 +3076,7 @@ "resolved": "https://registry.npmjs.org/@stylistic/eslint-plugin/-/eslint-plugin-2.2.0.tgz", "integrity": "sha512-qJfzH3M83vpFssPkeS559uj6PbAn8Z54C1zTrKOaH1ooSH54bmPvJ2v3Zh+PRWJ0YscLz43TxQhgmlPD53ZJ9w==", "dev": true, - "peer": true, + "license": "MIT", "dependencies": { "@stylistic/eslint-plugin-js": "2.2.0", "@stylistic/eslint-plugin-jsx": "2.2.0", @@ -3095,7 +3096,6 @@ "resolved": "https://registry.npmjs.org/@stylistic/eslint-plugin-js/-/eslint-plugin-js-2.2.0.tgz", "integrity": "sha512-pdkNeVORubs+k7jmhHivYXggoFvw1ykAyGBQomodOYO8MhO8/IM798XVyjadC6EeTeBiXlEWYRy/4QV34hDz+A==", "dev": true, - "peer": true, "dependencies": { "@types/eslint": "^8.56.10", "acorn": "^8.11.3", @@ -3114,7 +3114,6 @@ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.0.0.tgz", "integrity": "sha512-OtIRv/2GyiF6o/d8K7MYKKbXrOUBIK6SfkIRM4Z0dY3w+LiQ0vy3F57m0Z71bjbyeiWFiHJ8brqnmE6H6/jEuw==", "dev": true, - "peer": true, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, @@ -3127,7 +3126,6 @@ "resolved": "https://registry.npmjs.org/espree/-/espree-10.0.1.tgz", "integrity": "sha512-MWkrWZbJsL2UwnjxTX3gG8FneachS/Mwg7tdGXce011sJd5b0JG54vat5KHnfSBODZ3Wvzd2WnjxyzsRoVv+ww==", "dev": true, - "peer": true, "dependencies": { "acorn": "^8.11.3", "acorn-jsx": "^5.3.2", @@ -3145,7 +3143,6 @@ "resolved": "https://registry.npmjs.org/@stylistic/eslint-plugin-jsx/-/eslint-plugin-jsx-2.2.0.tgz", "integrity": "sha512-1aHeR68inrbEFGJZ80rOMHK8gIzTboF4DgmF0eR5KJ+wgxkhlEasZKhsuDrrgXn4xaUIgbMzCeHg9Rw0AtqR9w==", "dev": true, - "peer": true, "dependencies": { "@stylistic/eslint-plugin-js": "^2.2.0", "@types/eslint": "^8.56.10", @@ -3164,7 +3161,6 @@ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true, - "peer": true, "engines": { "node": ">=4.0" } @@ -3174,7 +3170,6 @@ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", "dev": true, - "peer": true, "engines": { "node": ">=12" }, @@ -3187,7 +3182,6 @@ "resolved": "https://registry.npmjs.org/@stylistic/eslint-plugin-plus/-/eslint-plugin-plus-2.2.0.tgz", "integrity": "sha512-BVgtMc+oepdEuDkhsCX8ZLD32AIWC2cyhxmz/ku9WJjrfB4eF2qNb/chr7x2SyN+nlJIz/Vl5aSIa3aKAWylBA==", "dev": true, - "peer": true, "dependencies": { "@types/eslint": "^8.56.10", "@typescript-eslint/utils": "^7.12.0" @@ -3201,7 +3195,6 @@ "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.13.0.tgz", "integrity": "sha512-jceD8RgdKORVnB4Y6BqasfIkFhl4pajB1wVxrF4akxD2QPM8GNYjgGwEzYS+437ewlqqrg7Dw+6dhdpjMpeBFQ==", "dev": true, - "peer": true, "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", "@typescript-eslint/scope-manager": "7.13.0", @@ -3224,7 +3217,6 @@ "resolved": "https://registry.npmjs.org/@stylistic/eslint-plugin-ts/-/eslint-plugin-ts-2.2.0.tgz", "integrity": "sha512-34KDq7G1+PpFH9BT3DQyRjy82K1A1Fb/ywr1v4xjs77r/kRIMduadkwHoyj4fCMFTqkW3ML7qZ0jNV2OjdoR8g==", "dev": true, - "peer": true, "dependencies": { "@stylistic/eslint-plugin-js": "2.2.0", "@types/eslint": "^8.56.10", @@ -3242,7 +3234,6 @@ "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.13.0.tgz", "integrity": "sha512-jceD8RgdKORVnB4Y6BqasfIkFhl4pajB1wVxrF4akxD2QPM8GNYjgGwEzYS+437ewlqqrg7Dw+6dhdpjMpeBFQ==", "dev": true, - "peer": true, "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", "@typescript-eslint/scope-manager": "7.13.0", @@ -3625,7 +3616,6 @@ "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.56.10.tgz", "integrity": "sha512-Shavhk87gCtY2fhXDctcfS3e6FdxWkCx1iUZ9eEUbh7rTqlZT0/IzOkCOVt0fCjcFuZ9FPYfuezTBImfHCDBGQ==", "dev": true, - "peer": true, "dependencies": { "@types/estree": "*", "@types/json-schema": "*" @@ -13434,7 +13424,6 @@ "resolved": "https://registry.npmjs.org/@stylistic/eslint-plugin/-/eslint-plugin-2.2.0.tgz", "integrity": "sha512-qJfzH3M83vpFssPkeS559uj6PbAn8Z54C1zTrKOaH1ooSH54bmPvJ2v3Zh+PRWJ0YscLz43TxQhgmlPD53ZJ9w==", "dev": true, - "peer": true, "requires": { "@stylistic/eslint-plugin-js": "2.2.0", "@stylistic/eslint-plugin-jsx": "2.2.0", @@ -13448,7 +13437,6 @@ "resolved": "https://registry.npmjs.org/@stylistic/eslint-plugin-js/-/eslint-plugin-js-2.2.0.tgz", "integrity": "sha512-pdkNeVORubs+k7jmhHivYXggoFvw1ykAyGBQomodOYO8MhO8/IM798XVyjadC6EeTeBiXlEWYRy/4QV34hDz+A==", "dev": true, - "peer": true, "requires": { "@types/eslint": "^8.56.10", "acorn": "^8.11.3", @@ -13460,15 +13448,13 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.0.0.tgz", "integrity": "sha512-OtIRv/2GyiF6o/d8K7MYKKbXrOUBIK6SfkIRM4Z0dY3w+LiQ0vy3F57m0Z71bjbyeiWFiHJ8brqnmE6H6/jEuw==", - "dev": true, - "peer": true + "dev": true }, "espree": { "version": "10.0.1", "resolved": "https://registry.npmjs.org/espree/-/espree-10.0.1.tgz", "integrity": "sha512-MWkrWZbJsL2UwnjxTX3gG8FneachS/Mwg7tdGXce011sJd5b0JG54vat5KHnfSBODZ3Wvzd2WnjxyzsRoVv+ww==", "dev": true, - "peer": true, "requires": { "acorn": "^8.11.3", "acorn-jsx": "^5.3.2", @@ -13482,7 +13468,6 @@ "resolved": "https://registry.npmjs.org/@stylistic/eslint-plugin-jsx/-/eslint-plugin-jsx-2.2.0.tgz", "integrity": "sha512-1aHeR68inrbEFGJZ80rOMHK8gIzTboF4DgmF0eR5KJ+wgxkhlEasZKhsuDrrgXn4xaUIgbMzCeHg9Rw0AtqR9w==", "dev": true, - "peer": true, "requires": { "@stylistic/eslint-plugin-js": "^2.2.0", "@types/eslint": "^8.56.10", @@ -13494,15 +13479,13 @@ "version": "5.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "peer": true + "dev": true }, "picomatch": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", - "dev": true, - "peer": true + "dev": true } } }, @@ -13511,7 +13494,6 @@ "resolved": "https://registry.npmjs.org/@stylistic/eslint-plugin-plus/-/eslint-plugin-plus-2.2.0.tgz", "integrity": "sha512-BVgtMc+oepdEuDkhsCX8ZLD32AIWC2cyhxmz/ku9WJjrfB4eF2qNb/chr7x2SyN+nlJIz/Vl5aSIa3aKAWylBA==", "dev": true, - "peer": true, "requires": { "@types/eslint": "^8.56.10", "@typescript-eslint/utils": "^7.12.0" @@ -13522,7 +13504,6 @@ "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.13.0.tgz", "integrity": "sha512-jceD8RgdKORVnB4Y6BqasfIkFhl4pajB1wVxrF4akxD2QPM8GNYjgGwEzYS+437ewlqqrg7Dw+6dhdpjMpeBFQ==", "dev": true, - "peer": true, "requires": { "@eslint-community/eslint-utils": "^4.4.0", "@typescript-eslint/scope-manager": "7.13.0", @@ -13537,7 +13518,6 @@ "resolved": "https://registry.npmjs.org/@stylistic/eslint-plugin-ts/-/eslint-plugin-ts-2.2.0.tgz", "integrity": "sha512-34KDq7G1+PpFH9BT3DQyRjy82K1A1Fb/ywr1v4xjs77r/kRIMduadkwHoyj4fCMFTqkW3ML7qZ0jNV2OjdoR8g==", "dev": true, - "peer": true, "requires": { "@stylistic/eslint-plugin-js": "2.2.0", "@types/eslint": "^8.56.10", @@ -13549,7 +13529,6 @@ "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.13.0.tgz", "integrity": "sha512-jceD8RgdKORVnB4Y6BqasfIkFhl4pajB1wVxrF4akxD2QPM8GNYjgGwEzYS+437ewlqqrg7Dw+6dhdpjMpeBFQ==", "dev": true, - "peer": true, "requires": { "@eslint-community/eslint-utils": "^4.4.0", "@typescript-eslint/scope-manager": "7.13.0", @@ -13825,7 +13804,6 @@ "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.56.10.tgz", "integrity": "sha512-Shavhk87gCtY2fhXDctcfS3e6FdxWkCx1iUZ9eEUbh7rTqlZT0/IzOkCOVt0fCjcFuZ9FPYfuezTBImfHCDBGQ==", "dev": true, - "peer": true, "requires": { "@types/estree": "*", "@types/json-schema": "*" diff --git a/package.json b/package.json index f84f126b..03ab0667 100644 --- a/package.json +++ b/package.json @@ -59,6 +59,7 @@ "devDependencies": { "@shlinkio/eslint-config-js-coding-standard": "~2.5.1", "@shlinkio/stylelint-config-css-coding-standard": "~1.1.1", + "@stylistic/eslint-plugin": "^2.2.0", "@testing-library/jest-dom": "^6.4.6", "@testing-library/react": "^16.0.0", "@testing-library/user-event": "^14.5.2", diff --git a/src/common/ShlinkWebComponentContainer.tsx b/src/common/ShlinkWebComponentContainer.tsx index 573cbb87..293d9be1 100644 --- a/src/common/ShlinkWebComponentContainer.tsx +++ b/src/common/ShlinkWebComponentContainer.tsx @@ -22,8 +22,8 @@ type ShlinkWebComponentContainerDeps = { }; const ShlinkWebComponentContainer: FCWithDeps< -ShlinkWebComponentContainerProps, -ShlinkWebComponentContainerDeps + ShlinkWebComponentContainerProps, + ShlinkWebComponentContainerDeps // FIXME Using `memo` here to solve a flickering effect in charts. // memo is probably not the right solution. The root cause is the withSelectedServer HOC, but I couldn't fix the // extra rendering there. diff --git a/src/utils/helpers/redux.ts b/src/utils/helpers/redux.ts index b6dbcbe1..d2766cf3 100644 --- a/src/utils/helpers/redux.ts +++ b/src/utils/helpers/redux.ts @@ -6,7 +6,7 @@ export const createAsyncThunk = ( typePrefix: string, payloadCreator: AsyncThunkPayloadCreator, ) => baseCreateAsyncThunk( - typePrefix, - payloadCreator, - { serializeError: (e) => e }, - ); + typePrefix, + payloadCreator, + { serializeError: (e) => e }, +);