diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 205c7176..00e941e5 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -23,6 +23,7 @@ updates: - "eslint" - "eslint-plugin-*" - "eslint-config-*" + - "@eslint/*" - "@typescript-eslint/*" passport: patterns: diff --git a/bin/u-wave-core.js b/bin/u-wave-core.js index 17818d33..eb77047a 100755 --- a/bin/u-wave-core.js +++ b/bin/u-wave-core.js @@ -1,6 +1,6 @@ #!/usr/bin/env node -/* eslint-disable no-console,n/no-process-exit */ +/* eslint-disable n/no-process-exit */ import fs from 'node:fs'; import explain from 'explain-error'; import Ajv from 'ajv'; diff --git a/package.json b/package.json index 4f43783c..21be99b9 100644 --- a/package.json +++ b/package.json @@ -73,7 +73,7 @@ "yaml": "^2.0.0" }, "devDependencies": { - "@eslint/js": "^8.57.1", + "@eslint/js": "^9.12.0", "@tsconfig/node18": "^18.2.2", "@types/bcryptjs": "^2.4.2", "@types/cookie": "^0.6.0", @@ -104,7 +104,7 @@ "concat-stream": "^2.0.0", "delay": "^6.0.0", "dotenv": "^16.0.0", - "eslint": "^8.2.0", + "eslint": "^9.12.0", "eslint-plugin-import": "^2.30.0", "eslint-plugin-n": "^17.10.2", "get-port": "^7.0.0", diff --git a/src/Uwave.js b/src/Uwave.js index 5526c7d3..60be7f35 100644 --- a/src/Uwave.js +++ b/src/Uwave.js @@ -228,7 +228,7 @@ class UwaveServer extends EventEmitter { * a source plugin factory was passed to `sourcePlugin`. */ source(sourcePlugin, opts = {}) { - if (typeof sourcePlugin === 'string') { // eslint-disable-line prefer-rest-params + if (typeof sourcePlugin === 'string') { return this.#sources.get(sourcePlugin); } diff --git a/src/index.js b/src/index.js index ce73beae..4a6f4fb2 100644 --- a/src/index.js +++ b/src/index.js @@ -1,4 +1,3 @@ -/* eslint-disable import/extensions */ import Uwave from './Uwave.js'; import HttpApi from './HttpApi.js'; import SocketServer from './SocketServer.js'; diff --git a/src/plugins/acl.js b/src/plugins/acl.js index 5d42b495..c9cc83b5 100644 --- a/src/plugins/acl.js +++ b/src/plugins/acl.js @@ -39,7 +39,6 @@ class Acl { if (existingRoles === 0) { this.#logger.info('no roles found, adding defaults'); for (const [roleName, permissions] of Object.entries(defaultRoles)) { - // eslint-disable-next-line no-await-in-loop await this.createRole(roleName, permissions); } } diff --git a/src/plugins/bans.js b/src/plugins/bans.js index 95348de5..da11c130 100644 --- a/src/plugins/bans.js +++ b/src/plugins/bans.js @@ -41,7 +41,7 @@ class Bans { * * @param {User} user A user object. */ - // eslint-disable-next-line class-methods-use-this + async isBanned(user) { return isValidBan(user); } @@ -171,7 +171,7 @@ class Bans { * @param {import('../Uwave.js').default} uw */ async function bans(uw) { - uw.bans = new Bans(uw); // eslint-disable-line no-param-reassign + uw.bans = new Bans(uw); } export default bans; diff --git a/src/plugins/booth.js b/src/plugins/booth.js index f849a714..36bbb6a4 100644 --- a/src/plugins/booth.js +++ b/src/plugins/booth.js @@ -300,7 +300,7 @@ class Booth { * * @param {PopulateMedia} historyEntry */ - // eslint-disable-next-line class-methods-use-this + getMediaForPlayback(historyEntry) { return Object.assign(omit(historyEntry.media, 'sourceData'), { media: { diff --git a/src/plugins/emotes.js b/src/plugins/emotes.js index 81c8c44e..820d1622 100644 --- a/src/plugins/emotes.js +++ b/src/plugins/emotes.js @@ -358,7 +358,7 @@ class Emotes { * @returns {Promise} */ async function emotesPlugin(uw) { - uw.emotes = new Emotes(uw); // eslint-disable-line no-param-reassign + uw.emotes = new Emotes(uw); uw.httpApi.use('/emotes', routes()); } diff --git a/src/plugins/playlists.js b/src/plugins/playlists.js index d1a84a4e..78d8e3fa 100644 --- a/src/plugins/playlists.js +++ b/src/plugins/playlists.js @@ -179,7 +179,7 @@ class PlaylistsRepository { * @param {object} patch * @returns {Promise} */ - // eslint-disable-next-line class-methods-use-this + async updatePlaylist(playlist, patch = {}) { Object.assign(playlist, patch); await playlist.save(); @@ -190,7 +190,7 @@ class PlaylistsRepository { * @param {Playlist} playlist * @returns {Promise} */ - // eslint-disable-next-line class-methods-use-this + async shufflePlaylist(playlist) { playlist.media = shuffle(playlist.media); await playlist.save(); @@ -201,7 +201,7 @@ class PlaylistsRepository { * @param {Playlist} playlist * @returns {Promise} */ - // eslint-disable-next-line class-methods-use-this + async deletePlaylist(playlist) { await playlist.deleteOne(); } @@ -535,7 +535,7 @@ class PlaylistsRepository { * @param {object} patch * @returns {Promise} */ - // eslint-disable-next-line class-methods-use-this + async updatePlaylistItem(item, patch = {}) { Object.assign(item, patch); await item.save(); @@ -547,7 +547,7 @@ class PlaylistsRepository { * @param {ObjectId[]} itemIDs * @param {{ afterID: ObjectId? }} options */ - // eslint-disable-next-line class-methods-use-this + async movePlaylistItems(playlist, itemIDs, { afterID }) { // Use a plain array instead of a mongoose array because we need `splice()`. const itemsInPlaylist = [...playlist.media]; diff --git a/src/plugins/waitlist.js b/src/plugins/waitlist.js index db7a990f..d9929a0e 100644 --- a/src/plugins/waitlist.js +++ b/src/plugins/waitlist.js @@ -365,7 +365,7 @@ class Waitlist { * @returns {Promise} */ async function waitlistPlugin(uw) { - uw.waitlist = new Waitlist(uw); // eslint-disable-line no-param-reassign + uw.waitlist = new Waitlist(uw); uw.httpApi.use('/waitlist', routes()); } diff --git a/src/sockets/GuestConnection.js b/src/sockets/GuestConnection.js index 122e2470..211c21d4 100644 --- a/src/sockets/GuestConnection.js +++ b/src/sockets/GuestConnection.js @@ -92,7 +92,6 @@ class GuestConnection extends EventEmitter { this.events.remove(); } - // eslint-disable-next-line class-methods-use-this toString() { return 'Guest'; } diff --git a/test/sources.mjs b/test/sources.mjs index be1019d7..b802fa62 100644 --- a/test/sources.mjs +++ b/test/sources.mjs @@ -29,7 +29,7 @@ describe('Media Sources', () => { return { name: 'test-source', search, - get: get, // eslint-disable-line object-shorthand + get: get, }; } diff --git a/test/utils/deleteDatabase.mjs b/test/utils/deleteDatabase.mjs index fb312a25..0ff674f4 100644 --- a/test/utils/deleteDatabase.mjs +++ b/test/utils/deleteDatabase.mjs @@ -8,14 +8,12 @@ export default async function deleteDatabase(url) { const mongo = mongoose.createConnection(url); await once(mongo, 'connected'); - /* eslint-disable no-await-in-loop */ for (let i = 0; i < 50; i += 1) { try { await mongo.dropDatabase(); break; } catch (error) { if (error.code === IN_PROGRESS_ERROR) { - // eslint-disable-next-line no-console console.log('database op in progress...waiting'); await delay(100); } else { @@ -23,7 +21,6 @@ export default async function deleteDatabase(url) { } } } - /* eslint-enable no-await-in-loop */ await mongo.close(); } diff --git a/test/waitlist.mjs b/test/waitlist.mjs index 34415395..4ec8da62 100644 --- a/test/waitlist.mjs +++ b/test/waitlist.mjs @@ -58,7 +58,6 @@ describe('Waitlist', () => { await Promise.all(users.map(createTestPlaylistItem)); for (const u of users) { - // eslint-disable-next-line no-await-in-loop await uw.waitlist.addUser(u.id); }