diff --git a/benchmark/performance.js b/benchmark/performance.js index 3518052434..c37ac09777 100644 --- a/benchmark/performance.js +++ b/benchmark/performance.js @@ -8,11 +8,9 @@ * Run with: npm run benchmark */ -/* eslint-disable no-console */ - const core = require('@actions/core'); const Parse = require('parse/node'); -const { performance, PerformanceObserver } = require('perf_hooks'); +const { performance } = require('node:perf_hooks'); const { MongoClient } = require('mongodb'); const { wrapMongoDBWithLatency } = require('./MongoLatencyWrapper'); diff --git a/ci/nodeEngineCheck.js b/ci/nodeEngineCheck.js index 4023353e17..65a806f760 100644 --- a/ci/nodeEngineCheck.js +++ b/ci/nodeEngineCheck.js @@ -86,7 +86,7 @@ class NodeEngineCheck { file: file, nodeVersion: version }); - } catch(e) { + } catch { // eslint-disable-next-line no-console console.log(`Ignoring file because it is not valid JSON: ${file}`); core.warning(`Ignoring file because it is not valid JSON: ${file}`); diff --git a/eslint.config.js b/eslint.config.js index d1cbac6e5e..3c5bd6806e 100644 --- a/eslint.config.js +++ b/eslint.config.js @@ -1,6 +1,8 @@ const js = require("@eslint/js"); const babelParser = require("@babel/eslint-parser"); const globals = require("globals"); +const unusedImports = require("eslint-plugin-unused-imports"); + module.exports = [ { ignores: ["**/lib/**", "**/coverage/**", "**/out/**", "**/types/**"], @@ -19,8 +21,13 @@ module.exports = [ requireConfigFile: false, }, }, + plugins: { + "unused-imports": unusedImports, + }, rules: { indent: ["error", 2, { SwitchCase: 1 }], + "unused-imports/no-unused-imports": "error", + "unused-imports/no-unused-vars": "error", "linebreak-style": ["error", "unix"], "no-trailing-spaces": "error", "eol-last": "error", diff --git a/package-lock.json b/package-lock.json index 6019119b96..5adf5b2725 100644 --- a/package-lock.json +++ b/package-lock.json @@ -82,6 +82,7 @@ "deep-diff": "1.0.2", "eslint": "9.27.0", "eslint-plugin-expect-type": "0.6.2", + "eslint-plugin-unused-imports": "^4.3.0", "flow-bin": "0.271.0", "form-data": "4.0.4", "globals": "16.2.0", @@ -10246,6 +10247,22 @@ "typescript": ">=4" } }, + "node_modules/eslint-plugin-unused-imports": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-unused-imports/-/eslint-plugin-unused-imports-4.3.0.tgz", + "integrity": "sha512-ZFBmXMGBYfHttdRtOG9nFFpmUvMtbHSjsKrS20vdWdbfiVYsO3yA2SGYy9i9XmZJDfMGBflZGBCm70SEnFQtOA==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "@typescript-eslint/eslint-plugin": "^8.0.0-0 || ^7.0.0 || ^6.0.0 || ^5.0.0", + "eslint": "^9.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "@typescript-eslint/eslint-plugin": { + "optional": true + } + } + }, "node_modules/eslint-scope": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", @@ -30154,6 +30171,13 @@ "get-tsconfig": "^4.8.1" } }, + "eslint-plugin-unused-imports": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-unused-imports/-/eslint-plugin-unused-imports-4.3.0.tgz", + "integrity": "sha512-ZFBmXMGBYfHttdRtOG9nFFpmUvMtbHSjsKrS20vdWdbfiVYsO3yA2SGYy9i9XmZJDfMGBflZGBCm70SEnFQtOA==", + "dev": true, + "requires": {} + }, "eslint-scope": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", diff --git a/package.json b/package.json index 4881e562a7..261700884a 100644 --- a/package.json +++ b/package.json @@ -89,6 +89,7 @@ "deep-diff": "1.0.2", "eslint": "9.27.0", "eslint-plugin-expect-type": "0.6.2", + "eslint-plugin-unused-imports": "4.3.0", "flow-bin": "0.271.0", "form-data": "4.0.4", "globals": "16.2.0", diff --git a/src/Adapters/Analytics/AnalyticsAdapter.js b/src/Adapters/Analytics/AnalyticsAdapter.js index e3cced14f5..380d869a5e 100644 --- a/src/Adapters/Analytics/AnalyticsAdapter.js +++ b/src/Adapters/Analytics/AnalyticsAdapter.js @@ -1,4 +1,4 @@ -/*eslint no-unused-vars: "off"*/ +/* eslint-disable unused-imports/no-unused-vars */ /** * @interface AnalyticsAdapter * @module Adapters diff --git a/src/Adapters/Auth/AuthAdapter.js b/src/Adapters/Auth/AuthAdapter.js index afc05d0bb2..ebcea4d3d8 100644 --- a/src/Adapters/Auth/AuthAdapter.js +++ b/src/Adapters/Auth/AuthAdapter.js @@ -1,4 +1,4 @@ -/*eslint no-unused-vars: "off"*/ +/* eslint-disable unused-imports/no-unused-vars */ /** * @interface ParseAuthResponse diff --git a/src/Adapters/Auth/apple.js b/src/Adapters/Auth/apple.js index 24502f4a55..7c9a845e95 100644 --- a/src/Adapters/Auth/apple.js +++ b/src/Adapters/Auth/apple.js @@ -63,7 +63,7 @@ const getAppleKeyByKeyId = async (keyId, cacheMaxEntries, cacheMaxAge) => { let key; try { key = await authUtils.getSigningKey(client, keyId); - } catch (error) { + } catch { throw new Parse.Error( Parse.Error.OBJECT_NOT_FOUND, `Unable to find matching key for Key ID: ${keyId}` diff --git a/src/Adapters/Auth/facebook.js b/src/Adapters/Auth/facebook.js index 273004ad62..d9b6589ab5 100644 --- a/src/Adapters/Auth/facebook.js +++ b/src/Adapters/Auth/facebook.js @@ -122,7 +122,7 @@ const getFacebookKeyByKeyId = async (keyId, cacheMaxEntries, cacheMaxAge) => { let key; try { key = await authUtils.getSigningKey(client, keyId); - } catch (error) { + } catch { throw new Parse.Error( Parse.Error.OBJECT_NOT_FOUND, `Unable to find matching key for Key ID: ${keyId}` diff --git a/src/Adapters/Cache/CacheAdapter.js b/src/Adapters/Cache/CacheAdapter.js index 7632797e55..9a84f89ec6 100644 --- a/src/Adapters/Cache/CacheAdapter.js +++ b/src/Adapters/Cache/CacheAdapter.js @@ -1,4 +1,4 @@ -/*eslint no-unused-vars: "off"*/ +/* eslint-disable unused-imports/no-unused-vars */ /** * @interface * @memberof module:Adapters diff --git a/src/Adapters/Email/MailAdapter.js b/src/Adapters/Email/MailAdapter.js index 93069e2c27..10e77232b4 100644 --- a/src/Adapters/Email/MailAdapter.js +++ b/src/Adapters/Email/MailAdapter.js @@ -1,4 +1,4 @@ -/*eslint no-unused-vars: "off"*/ +/* eslint-disable unused-imports/no-unused-vars */ /** * @interface * @memberof module:Adapters diff --git a/src/Adapters/Files/FilesAdapter.js b/src/Adapters/Files/FilesAdapter.js index f06c52df89..0e9b555853 100644 --- a/src/Adapters/Files/FilesAdapter.js +++ b/src/Adapters/Files/FilesAdapter.js @@ -1,4 +1,4 @@ -/*eslint no-unused-vars: "off"*/ +/* eslint-disable unused-imports/no-unused-vars */ // Files Adapter // // Allows you to change the file storage mechanism. diff --git a/src/Adapters/Files/GridFSBucketAdapter.js b/src/Adapters/Files/GridFSBucketAdapter.js index b301d1c0c1..6820fc887f 100644 --- a/src/Adapters/Files/GridFSBucketAdapter.js +++ b/src/Adapters/Files/GridFSBucketAdapter.js @@ -171,7 +171,7 @@ export class GridFSBucketAdapter extends FilesAdapter { fileNamesNotRotated = fileNamesNotRotated.filter(function (value) { return value !== fileName; }); - } catch (err) { + } catch { continue; } } diff --git a/src/Adapters/Logger/LoggerAdapter.js b/src/Adapters/Logger/LoggerAdapter.js index 3853d5f480..957719be9b 100644 --- a/src/Adapters/Logger/LoggerAdapter.js +++ b/src/Adapters/Logger/LoggerAdapter.js @@ -1,4 +1,4 @@ -/*eslint no-unused-vars: "off"*/ +/* eslint-disable unused-imports/no-unused-vars */ /** * @interface * @memberof module:Adapters diff --git a/src/Adapters/Logger/WinstonLogger.js b/src/Adapters/Logger/WinstonLogger.js index fe28660056..886a1394f3 100644 --- a/src/Adapters/Logger/WinstonLogger.js +++ b/src/Adapters/Logger/WinstonLogger.js @@ -42,7 +42,7 @@ function configureTransports(options) { parseServerError.name = 'parse-server-error'; transports.push(parseServerError); } - } catch (e) { + } catch { /* */ } @@ -86,7 +86,7 @@ export function configureLogger({ } try { fs.mkdirSync(logsFolder); - } catch (e) { + } catch { /* */ } } diff --git a/src/Adapters/PubSub/PubSubAdapter.js b/src/Adapters/PubSub/PubSubAdapter.js index 728dff90e8..b68d9bee5d 100644 --- a/src/Adapters/PubSub/PubSubAdapter.js +++ b/src/Adapters/PubSub/PubSubAdapter.js @@ -1,4 +1,4 @@ -/*eslint no-unused-vars: "off"*/ +/* eslint-disable unused-imports/no-unused-vars */ /** * @interface * @memberof module:Adapters diff --git a/src/Adapters/Push/PushAdapter.js b/src/Adapters/Push/PushAdapter.js index fb0adbf469..d6862b00c3 100644 --- a/src/Adapters/Push/PushAdapter.js +++ b/src/Adapters/Push/PushAdapter.js @@ -1,5 +1,5 @@ +/* eslint-disable unused-imports/no-unused-vars */ // @flow -/*eslint no-unused-vars: "off"*/ // Push Adapter // // Allows you to change the push notification mechanism. diff --git a/src/Adapters/WebSocketServer/WSAdapter.js b/src/Adapters/WebSocketServer/WSAdapter.js index 5522dad365..db35d928bf 100644 --- a/src/Adapters/WebSocketServer/WSAdapter.js +++ b/src/Adapters/WebSocketServer/WSAdapter.js @@ -1,4 +1,4 @@ -/*eslint no-unused-vars: "off"*/ +/* eslint-disable unused-imports/no-unused-vars */ import { WSSAdapter } from './WSSAdapter'; const WebSocketServer = require('ws').Server; diff --git a/src/Adapters/WebSocketServer/WSSAdapter.js b/src/Adapters/WebSocketServer/WSSAdapter.js index a810c03f9d..0831828f3c 100644 --- a/src/Adapters/WebSocketServer/WSSAdapter.js +++ b/src/Adapters/WebSocketServer/WSSAdapter.js @@ -1,4 +1,4 @@ -/*eslint no-unused-vars: "off"*/ +/* eslint-disable unused-imports/no-unused-vars */ // WebSocketServer Adapter // // Adapter classes must implement the following functions: diff --git a/src/Controllers/HooksController.js b/src/Controllers/HooksController.js index fef01946f6..6497784754 100644 --- a/src/Controllers/HooksController.js +++ b/src/Controllers/HooksController.js @@ -225,7 +225,7 @@ function wrapToHTTPRequest(hook, key) { if (typeof body === 'string') { try { body = JSON.parse(body); - } catch (e) { + } catch { err = { error: 'Malformed response', code: -1, diff --git a/src/Controllers/index.js b/src/Controllers/index.js index abf0950640..9397dac561 100644 --- a/src/Controllers/index.js +++ b/src/Controllers/index.js @@ -217,7 +217,7 @@ export function getDatabaseAdapter(databaseURI, collectionPrefix, databaseOption try { const parsedURI = new URL(databaseURI); protocol = parsedURI.protocol ? parsedURI.protocol.toLowerCase() : null; - } catch (e) { + } catch { /* */ } switch (protocol) { diff --git a/src/GraphQL/loaders/filesMutations.js b/src/GraphQL/loaders/filesMutations.js index 0a16a1c4a6..8439dfeb4f 100644 --- a/src/GraphQL/loaders/filesMutations.js +++ b/src/GraphQL/loaders/filesMutations.js @@ -38,7 +38,7 @@ const handleUpload = async (upload, config) => { res.on('end', () => { try { resolve(JSON.parse(data)); - } catch (e) { + } catch { reject(new Parse.Error(Parse.error, data)); } }); diff --git a/src/Options/parsers.js b/src/Options/parsers.js index 384b5494ef..3fdad89dc3 100644 --- a/src/Options/parsers.js +++ b/src/Options/parsers.js @@ -55,7 +55,7 @@ function moduleOrObjectParser(opt) { } try { return JSON.parse(opt); - } catch (e) { + } catch { /* */ } return opt; diff --git a/src/Routers/ClassesRouter.js b/src/Routers/ClassesRouter.js index 8b6e447757..dd1ccb0a6b 100644 --- a/src/Routers/ClassesRouter.js +++ b/src/Routers/ClassesRouter.js @@ -149,7 +149,7 @@ export class ClassesRouter extends PromiseRouter { for (const [key, value] of _.entries(query)) { try { json[key] = JSON.parse(value); - } catch (e) { + } catch { json[key] = value; } } diff --git a/src/Routers/FilesRouter.js b/src/Routers/FilesRouter.js index 5cb39abf47..a2ce85e222 100644 --- a/src/Routers/FilesRouter.js +++ b/src/Routers/FilesRouter.js @@ -310,7 +310,7 @@ export class FilesRouter { const data = await filesController.getMetadata(filename); res.status(200); res.json(data); - } catch (e) { + } catch { res.status(200); res.json({}); } diff --git a/src/Routers/PagesRouter.js b/src/Routers/PagesRouter.js index 1ea3211684..74beec770c 100644 --- a/src/Routers/PagesRouter.js +++ b/src/Routers/PagesRouter.js @@ -432,7 +432,7 @@ export class PagesRouter extends PromiseRouter { let data; try { data = await this.readFile(path); - } catch (e) { + } catch { return this.notFound(); } @@ -474,7 +474,7 @@ export class PagesRouter extends PromiseRouter { let data; try { data = await this.readFile(path); - } catch (e) { + } catch { return this.notFound(); } @@ -517,7 +517,7 @@ export class PagesRouter extends PromiseRouter { try { const json = require(path.resolve('./', this.pagesConfig.localizationJsonPath)); this.jsonParameters = json; - } catch (e) { + } catch { throw errors.jsonFailedFileLoading; } } diff --git a/src/Utils.js b/src/Utils.js index cc00ac0bb7..0eca833552 100644 --- a/src/Utils.js +++ b/src/Utils.js @@ -82,7 +82,7 @@ class Utils { try { await fs.access(path); return true; - } catch (e) { + } catch { return false; } } diff --git a/src/batch.js b/src/batch.js index 80fa028cc6..ca1bea621a 100644 --- a/src/batch.js +++ b/src/batch.js @@ -13,7 +13,7 @@ function mountOnto(router) { function parseURL(urlString) { try { return new URL(urlString); - } catch (error) { + } catch { return undefined; } } diff --git a/src/cli/utils/runner.js b/src/cli/utils/runner.js index ed66cdfef8..6b18012af5 100644 --- a/src/cli/utils/runner.js +++ b/src/cli/utils/runner.js @@ -20,7 +20,7 @@ function logStartupOptions(options) { if (typeof value === 'object') { try { value = JSON.stringify(value); - } catch (e) { + } catch { if (value && value.constructor && value.constructor.name) { value = value.constructor.name; } diff --git a/src/middlewares.js b/src/middlewares.js index 93b16f3846..8ba3a9acff 100644 --- a/src/middlewares.js +++ b/src/middlewares.js @@ -79,7 +79,7 @@ export async function handleParseHeaders(req, res, next) { if (Object.prototype.toString.call(context) !== '[object Object]') { throw 'Context is not an object'; } - } catch (e) { + } catch { return malformedContext(req, res); } } @@ -126,7 +126,7 @@ export async function handleParseHeaders(req, res, next) { // to provide x-parse-app-id in header and parse a binary file will fail try { req.body = JSON.parse(req.body); - } catch (e) { + } catch { return invalidRequest(req, res); } fileViaJSON = true; @@ -173,7 +173,7 @@ export async function handleParseHeaders(req, res, next) { if (Object.prototype.toString.call(info.context) !== '[object Object]') { throw 'Context is not an object'; } - } catch (e) { + } catch { return malformedContext(req, res); } } diff --git a/src/password.js b/src/password.js index eebec14368..844f021937 100644 --- a/src/password.js +++ b/src/password.js @@ -8,7 +8,7 @@ try { hash: _bcrypt.hash, compare: _bcrypt.verify, }; -} catch (e) { +} catch { /* */ } diff --git a/src/request.js b/src/request.js index bc58ee40ac..d5754d9201 100644 --- a/src/request.js +++ b/src/request.js @@ -31,7 +31,7 @@ class HTTPResponse { if (!_data) { try { _data = JSON.parse(getText()); - } catch (e) { + } catch { /* */ } }