[READ-ONLY] Mirror of https://github.com/FoxxMD/multi-scrobbler. Scrobble plays from multiple sources to multiple clients docs.multi-scrobbler.app
deezer docker jellyfin koito lastfm listenbrainz maloja mopidy mpris music music-assistant plex scrobble self-hosted spotify subsonic tautulli youtube-music
0

Configure Feed

Select the types of activity you want to include in your feed.

chore: Update eslint config to include react hooks rules

FoxxMD (Jul 6, 2026, 8:07 PM UTC) 8d7760df 75c95fda

+136 -33
+61 -28
eslint.config.js
··· 1 1 // For more info, see https://github.com/storybookjs/eslint-plugin-storybook#configuration-flat-config-format 2 2 import storybook from "eslint-plugin-storybook"; 3 3 4 + import { defineConfig, globalIgnores } from "eslint/config"; 5 + 4 6 // @ts-check 5 7 6 - import eslint from '@eslint/js'; 8 + import js from '@eslint/js'; 9 + import globals from 'globals'; 7 10 import tsEslint from 'typescript-eslint'; 8 11 import arrow from 'eslint-plugin-prefer-arrow-functions'; 12 + import hooks from 'eslint-plugin-react-hooks'; 9 13 10 - export default tsEslint.config({ 11 - files: ['src/backend/**/*.ts'], 12 - plugins: { 13 - "prefer-arrow-functions": arrow 14 - }, 15 - ignores: [ 16 - 'eslint.config.js', 17 - 'src/backend/tests/**/*.ts' 14 + const defaultRules = { 15 + 'no-useless-catch': 'off', 16 + '@typescript-eslint/no-unused-vars': 'warn', 17 + 'no-unused-vars': 'warn', 18 + "prefer-arrow-functions/prefer-arrow-functions": [ 19 + "warn", 20 + { 21 + "allowNamedFunctions": false, 22 + "classPropertiesAllowed": false, 23 + "disallowPrototype": false, 24 + "returnStyle": "unchanged", 25 + "singleReturnOnly": false 26 + } 18 27 ], 19 - extends: [ 20 - eslint.configs.recommended, 21 - ...tsEslint.configs.recommended, 22 - ], 23 - rules: { 24 - 'no-useless-catch': 'off', 25 - '@typescript-eslint/no-unused-vars': 'off', 26 - "prefer-arrow-functions/prefer-arrow-functions": [ 27 - "warn", 28 - { 29 - "allowNamedFunctions": false, 30 - "classPropertiesAllowed": false, 31 - "disallowPrototype": false, 32 - "returnStyle": "unchanged", 33 - "singleReturnOnly": false 34 - } 28 + "arrow-body-style": ["warn", "as-needed"], 29 + "@typescript-eslint/no-explicit-any": "warn" 30 + }; 31 + 32 + export default defineConfig([ 33 + globalIgnores([ 34 + 'docsite/build', 35 + 'docsite/.docusaurus', 36 + 'public/mockServiceWorker.js' 37 + ]), 38 + { 39 + plugins: { 40 + "prefer-arrow-functions": arrow, 41 + js 42 + }, 43 + rules: defaultRules, 44 + extends: [ 45 + tsEslint.configs.recommended, 46 + "js/recommended" 35 47 ], 36 - "arrow-body-style": ["warn", "as-needed"], 37 - "@typescript-eslint/no-explicit-any": "warn" 48 + languageOptions: { 49 + globals: { 50 + ...globals.node, 51 + } 52 + }, 53 + files: ['src/**/*.ts','src/**/*.tsx'] 54 + }, 55 + { 56 + extends: [ 57 + storybook.configs["flat/recommended"], 58 + ], 59 + files: ['src/client/stories/**/*.tsx'], 60 + }, 61 + { 62 + extends: [ 63 + hooks.configs.flat.recommended, 64 + ], 65 + languageOptions: { 66 + globals: { 67 + ...globals.browser, 68 + } 69 + }, 70 + files: ['src/client/**/*.tsx'], 38 71 } 39 - }, storybook.configs["flat/recommended"]); 72 + ]);
+72 -4
package-lock.json
··· 170 170 "chai-as-promised": "^8.0.2", 171 171 "clsx": "^2.1.1", 172 172 "drizzle-kit": "^1.0.0-rc.2-c5a84d1", 173 - "eslint": "^10.3.0", 173 + "eslint": "^10.6.0", 174 174 "eslint-plugin-prefer-arrow-functions": "^3.2.4", 175 + "eslint-plugin-react-hooks": "^7.1.1", 175 176 "eslint-plugin-storybook": "^10.3.6", 176 177 "git-cliff": "^2.12.0", 178 + "globals": "^17.7.0", 177 179 "ky": "^2.0.2", 178 180 "mocha": "^10.3.0", 179 181 "mockdate": "^3.0.5", ··· 10353 10355 } 10354 10356 }, 10355 10357 "node_modules/eslint": { 10356 - "version": "10.4.1", 10357 - "resolved": "https://registry.npmjs.org/eslint/-/eslint-10.4.1.tgz", 10358 - "integrity": "sha512-AyIKhnOBuOAdueD7RB3xB+YeAWScb9jHsJBgH2Hcde8InP5JYhqrRR6iTMHyTEwgENK54Cp44e4v8BwNhsuHuw==", 10358 + "version": "10.6.0", 10359 + "resolved": "https://registry.npmjs.org/eslint/-/eslint-10.6.0.tgz", 10360 + "integrity": "sha512-6lVbcqSodALYo+4ELD0heG6lFiFxnLMuLkiMi2qV8LMp54N8tE8FT1GMH+ev4Ti00nFjNze2+Su6DsV5OQW3Dg==", 10359 10361 "dev": true, 10360 10362 "license": "MIT", 10363 + "workspaces": [ 10364 + "packages/*" 10365 + ], 10361 10366 "dependencies": { 10362 10367 "@eslint-community/eslint-utils": "^4.8.0", 10363 10368 "@eslint-community/regexpp": "^4.12.2", ··· 10577 10582 }, 10578 10583 "peerDependencies": { 10579 10584 "typescript": ">=4.8.4" 10585 + } 10586 + }, 10587 + "node_modules/eslint-plugin-react-hooks": { 10588 + "version": "7.1.1", 10589 + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-7.1.1.tgz", 10590 + "integrity": "sha512-f2I7Gw6JbvCexzIInuSbZpfdQ44D7iqdWX01FKLvrPgqxoE7oMj8clOfto8U6vYiz4yd5oKu39rRSVOe1zRu0g==", 10591 + "dev": true, 10592 + "license": "MIT", 10593 + "dependencies": { 10594 + "@babel/core": "^7.24.4", 10595 + "@babel/parser": "^7.24.4", 10596 + "hermes-parser": "^0.25.1", 10597 + "zod": "^3.25.0 || ^4.0.0", 10598 + "zod-validation-error": "^3.5.0 || ^4.0.0" 10599 + }, 10600 + "engines": { 10601 + "node": ">=18" 10602 + }, 10603 + "peerDependencies": { 10604 + "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0 || ^10.0.0" 10605 + } 10606 + }, 10607 + "node_modules/eslint-plugin-react-hooks/node_modules/zod-validation-error": { 10608 + "version": "4.0.2", 10609 + "resolved": "https://registry.npmjs.org/zod-validation-error/-/zod-validation-error-4.0.2.tgz", 10610 + "integrity": "sha512-Q6/nZLe6jxuU80qb/4uJ4t5v2VEZ44lzQjPDhYJNztRQ4wyWc6VF3D3Kb/fAuPetZQnhS3hnajCf9CsWesghLQ==", 10611 + "dev": true, 10612 + "license": "MIT", 10613 + "engines": { 10614 + "node": ">=18.0.0" 10615 + }, 10616 + "peerDependencies": { 10617 + "zod": "^3.25.0 || ^4.0.0" 10580 10618 } 10581 10619 }, 10582 10620 "node_modules/eslint-plugin-storybook": { ··· 11901 11939 "node": ">=10.13.0" 11902 11940 } 11903 11941 }, 11942 + "node_modules/globals": { 11943 + "version": "17.7.0", 11944 + "resolved": "https://registry.npmjs.org/globals/-/globals-17.7.0.tgz", 11945 + "integrity": "sha512-Czmyns5dUsq4seFBR/Kdydhmo8y9kC79hiSkPn0YcGtNnYWnrgt0vjrSjx9tspoDGWm2CMarffRuLjM4xUz8xg==", 11946 + "dev": true, 11947 + "license": "MIT", 11948 + "engines": { 11949 + "node": ">=18" 11950 + }, 11951 + "funding": { 11952 + "url": "https://github.com/sponsors/sindresorhus" 11953 + } 11954 + }, 11904 11955 "node_modules/google-auth-library": { 11905 11956 "version": "9.15.1", 11906 11957 "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-9.15.1.tgz", ··· 12161 12212 "resolved": "https://registry.npmjs.org/help-me/-/help-me-5.0.0.tgz", 12162 12213 "integrity": "sha512-7xgomUX6ADmcYzFik0HzAxh/73YlKR9bmFzf51CZwR+b6YtzU2m0u49hQCqV6SvlqIqsaxovfwdvbnsw3b/zpg==", 12163 12214 "license": "MIT" 12215 + }, 12216 + "node_modules/hermes-estree": { 12217 + "version": "0.25.1", 12218 + "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.25.1.tgz", 12219 + "integrity": "sha512-0wUoCcLp+5Ev5pDW2OriHC2MJCbwLwuRx+gAqMTOkGKJJiBCLjtrvy4PWUGn6MIVefecRpzoOZ/UV6iGdOr+Cw==", 12220 + "dev": true, 12221 + "license": "MIT" 12222 + }, 12223 + "node_modules/hermes-parser": { 12224 + "version": "0.25.1", 12225 + "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.25.1.tgz", 12226 + "integrity": "sha512-6pEjquH3rqaI6cYAXYPcz9MS4rY6R4ngRgrgfDshRptUZIc3lw0MCIJIGDj9++mfySOuPTHB4nrSW99BCvOPIA==", 12227 + "dev": true, 12228 + "license": "MIT", 12229 + "dependencies": { 12230 + "hermes-estree": "0.25.1" 12231 + } 12164 12232 }, 12165 12233 "node_modules/hoist-non-react-statics": { 12166 12234 "version": "3.3.2",
+3 -1
package.json
··· 209 209 "chai-as-promised": "^8.0.2", 210 210 "clsx": "^2.1.1", 211 211 "drizzle-kit": "^1.0.0-rc.2-c5a84d1", 212 - "eslint": "^10.3.0", 212 + "eslint": "^10.6.0", 213 213 "eslint-plugin-prefer-arrow-functions": "^3.2.4", 214 + "eslint-plugin-react-hooks": "^7.1.1", 214 215 "eslint-plugin-storybook": "^10.3.6", 215 216 "git-cliff": "^2.12.0", 217 + "globals": "^17.7.0", 216 218 "ky": "^2.0.2", 217 219 "mocha": "^10.3.0", 218 220 "mockdate": "^3.0.5",