From 305c2c5ecb49a1349be2efb1ef557d61da9a64dc Mon Sep 17 00:00:00 2001 From: mhatvan Date: Thu, 5 Aug 2021 08:58:28 +0200 Subject: refactor: general code improvements - replace deprecated fs.exists with fs.existsSync - replace console.log with debug - replace hardcoded FERDI_VERSION in start.js with dynamic one from package.json - correct JSDoc annotations in Handler.js - simplify macOSPermissions.js - updates to various eslint rules - add FileReader to known globals --- .../app/Controllers/Http/ServiceController.js | 150 ++++++++++----------- src/internal-server/app/Exceptions/Handler.js | 10 +- src/internal-server/public/js/transfer.js | 3 +- src/internal-server/start.js | 17 +-- 4 files changed, 85 insertions(+), 95 deletions(-) (limited to 'src/internal-server') diff --git a/src/internal-server/app/Controllers/Http/ServiceController.js b/src/internal-server/app/Controllers/Http/ServiceController.js index 36d20c70c..c30e9e040 100644 --- a/src/internal-server/app/Controllers/Http/ServiceController.js +++ b/src/internal-server/app/Controllers/Http/ServiceController.js @@ -1,7 +1,5 @@ const Service = use('App/Models/Service'); -const { - validateAll, -} = use('Validator'); +const { validateAll } = use('Validator'); const Env = use('Env'); const uuid = require('uuid/v4'); @@ -10,10 +8,7 @@ const fs = require('fs-extra'); class ServiceController { // Create a new service for user - async create({ - request, - response, - }) { + async create({ request, response }) { // Validate user input const validation = await validateAll(request.all(), { name: 'required|string', @@ -33,7 +28,10 @@ class ServiceController { let serviceId; do { serviceId = uuid(); - } while ((await Service.query().where('serviceId', serviceId).fetch()).rows.length > 0); // eslint-disable-line no-await-in-loop + } while ( + (await Service.query().where('serviceId', serviceId).fetch()).rows + .length > 0 + ); // eslint-disable-line no-await-in-loop await Service.create({ serviceId, @@ -64,13 +62,14 @@ class ServiceController { } // List all services a user has created - async list({ - response, - }) { + async list({ response }) { const services = (await Service.all()).rows; // Convert to array with all data Franz wants - const servicesArray = services.map((service) => { - const settings = typeof service.settings === 'string' ? JSON.parse(service.settings) : service.settings; + const servicesArray = services.map(service => { + const settings = + typeof service.settings === 'string' + ? JSON.parse(service.settings) + : service.settings; return { customRecipe: false, @@ -84,7 +83,9 @@ class ServiceController { spellcheckerLanguage: '', workspaces: [], ...JSON.parse(service.settings), - iconUrl: settings.iconId ? `http://127.0.0.1:${Env.get('PORT')}/v1/icon/${settings.iconId}` : null, + iconUrl: settings.iconId + ? `http://127.0.0.1:${Env.get('PORT')}/v1/icon/${settings.iconId}` + : null, id: service.serviceId, name: service.name, recipeId: service.recipeId, @@ -95,11 +96,7 @@ class ServiceController { return response.send(servicesArray); } - async edit({ - request, - response, - params, - }) { + async edit({ request, response, params }) { if (request.file('icon')) { // Upload custom service icon await fs.ensureDir(path.join(Env.get('USER_PATH'), 'icons')); @@ -108,19 +105,19 @@ class ServiceController { types: ['image'], size: '2mb', }); - const { - id, - } = params; - const service = (await Service.query() - .where('serviceId', id).fetch()).rows[0]; - const settings = typeof service.settings === 'string' ? JSON.parse(service.settings) : service.settings; + const { id } = params; + const service = (await Service.query().where('serviceId', id).fetch()) + .rows[0]; + const settings = + typeof service.settings === 'string' + ? JSON.parse(service.settings) + : service.settings; // Generate new icon ID let iconId; do { iconId = uuid() + uuid(); - // eslint-disable-next-line no-await-in-loop - } while (await fs.exists(path.join(Env.get('USER_PATH'), 'icons', iconId))); + } while (fs.existsSync(path.join(Env.get('USER_PATH'), 'icons', iconId))); await icon.move(path.join(Env.get('USER_PATH'), 'icons'), { name: iconId, @@ -135,23 +132,29 @@ class ServiceController { ...settings, ...{ iconId, - customIconVersion: settings && settings.customIconVersion ? settings.customIconVersion + 1 : 1, + customIconVersion: + settings && settings.customIconVersion + ? settings.customIconVersion + 1 + : 1, }, }; // Update data in database - await (Service.query() - .where('serviceId', id)).update({ - name: service.name, - settings: JSON.stringify(newSettings), - }); + await Service.query() + .where('serviceId', id) + .update({ + name: service.name, + settings: JSON.stringify(newSettings), + }); return response.send({ data: { id, name: service.name, ...newSettings, - iconUrl: `http://127.0.0.1:${Env.get('PORT')}/v1/icon/${newSettings.iconId}`, + iconUrl: `http://127.0.0.1:${Env.get('PORT')}/v1/icon/${ + newSettings.iconId + }`, userId: 1, }, status: ['updated'], @@ -159,29 +162,30 @@ class ServiceController { } // Update service info const data = request.all(); - const { - id, - } = params; + const { id } = params; // Get current settings from db - const serviceData = (await Service.query() - .where('serviceId', id).fetch()).rows[0]; + const serviceData = (await Service.query().where('serviceId', id).fetch()) + .rows[0]; const settings = { - ...typeof serviceData.settings === 'string' ? JSON.parse(serviceData.settings) : serviceData.settings, + ...(typeof serviceData.settings === 'string' + ? JSON.parse(serviceData.settings) + : serviceData.settings), ...data, }; // Update data in database - await (Service.query() - .where('serviceId', id)).update({ - name: data.name, - settings: JSON.stringify(settings), - }); + await Service.query() + .where('serviceId', id) + .update({ + name: data.name, + settings: JSON.stringify(settings), + }); // Get updated row - const service = (await Service.query() - .where('serviceId', id).fetch()).rows[0]; + const service = (await Service.query().where('serviceId', id).fetch()) + .rows[0]; return response.send({ data: { @@ -195,34 +199,29 @@ class ServiceController { }); } - async icon({ - params, - response, - }) { - const { - id, - } = params; + async icon({ params, response }) { + const { id } = params; const iconPath = path.join(Env.get('USER_PATH'), 'icons', id); - if (!await fs.exists(iconPath)) { + if (!fs.existsSync(iconPath)) { return response.status(404).send({ - status: 'Icon doesn\'t exist', + status: "Icon doesn't exist", }); } return response.download(iconPath); } - async reorder({ - request, - response, - }) { + async reorder({ request, response }) { const data = request.all(); for (const service of Object.keys(data)) { // Get current settings from db - const serviceData = (await Service.query() // eslint-disable-line no-await-in-loop - .where('serviceId', service).fetch()).rows[0]; + const serviceData = ( + await Service.query() // eslint-disable-line no-await-in-loop + .where('serviceId', service) + .fetch() + ).rows[0]; const settings = { ...JSON.parse(serviceData.settings), @@ -230,8 +229,8 @@ class ServiceController { }; // Update data in database - await (Service.query() // eslint-disable-line no-await-in-loop - .where('serviceId', service)) + await Service.query() // eslint-disable-line no-await-in-loop + .where('serviceId', service) .update({ settings: JSON.stringify(settings), }); @@ -240,8 +239,11 @@ class ServiceController { // Get new services const services = (await Service.all()).rows; // Convert to array with all data Franz wants - const servicesArray = services.map((service) => { - const settings = typeof service.settings === 'string' ? JSON.parse(service.settings) : service.settings; + const servicesArray = services.map(service => { + const settings = + typeof service.settings === 'string' + ? JSON.parse(service.settings) + : service.settings; return { customRecipe: false, @@ -255,7 +257,9 @@ class ServiceController { spellcheckerLanguage: '', workspaces: [], ...JSON.parse(service.settings), - iconUrl: settings.iconId ? `http://127.0.0.1:${Env.get('PORT')}/v1/icon/${settings.iconId}` : null, + iconUrl: settings.iconId + ? `http://127.0.0.1:${Env.get('PORT')}/v1/icon/${settings.iconId}` + : null, id: service.serviceId, name: service.name, recipeId: service.recipeId, @@ -266,19 +270,13 @@ class ServiceController { return response.send(servicesArray); } - update({ - response, - }) { + update({ response }) { return response.send([]); } - async delete({ - params, - response, - }) { + async delete({ params, response }) { // Update data in database - await (Service.query() - .where('serviceId', params.id)).delete(); + await Service.query().where('serviceId', params.id).delete(); return response.send({ message: 'Sucessfully deleted service', diff --git a/src/internal-server/app/Exceptions/Handler.js b/src/internal-server/app/Exceptions/Handler.js index 111ef4e0e..ab323fd38 100644 --- a/src/internal-server/app/Exceptions/Handler.js +++ b/src/internal-server/app/Exceptions/Handler.js @@ -13,10 +13,9 @@ class ExceptionHandler extends BaseExceptionHandler { * @method handle * * @param {Object} error - * @param {Object} options.request - * @param {Object} options.response + * @param {object} options.response * - * @return {void} + * @return {Promise} */ async handle(error, { response }) { if (error.name === 'ValidationException') { @@ -31,10 +30,7 @@ class ExceptionHandler extends BaseExceptionHandler { * * @method report * - * @param {Object} error - * @param {Object} options.request - * - * @return {void} + * @return {Promise} */ async report() { return true; diff --git a/src/internal-server/public/js/transfer.js b/src/internal-server/public/js/transfer.js index c04a6d3b1..8382bba02 100644 --- a/src/internal-server/public/js/transfer.js +++ b/src/internal-server/public/js/transfer.js @@ -1,11 +1,10 @@ -/* eslint-env browser */ const submitBtn = document.getElementById('submit'); const fileInput = document.getElementById('file'); const fileOutput = document.getElementById('fileoutput'); fileInput.addEventListener('change', () => { const reader = new FileReader(); - reader.onload = function () { + reader.onload = () => { const text = reader.result; fileOutput.value = text; submitBtn.disabled = false; diff --git a/src/internal-server/start.js b/src/internal-server/start.js index adcac0bec..683f24651 100644 --- a/src/internal-server/start.js +++ b/src/internal-server/start.js @@ -14,22 +14,22 @@ | Also you can preload files by calling `preLoad('path/to/file')` method. | Make sure to pass a relative path from the project root. */ -process.env.FERDI_VERSION = '5.4.0-beta.5'; -const path = require('path'); +const fold = require('@adonisjs/fold'); +const { Ignitor } = require('@adonisjs/ignitor'); const fs = require('fs-extra'); const os = require('os'); +const path = require('path'); +const packageJSON = require('../../package.json'); +process.env.FERDI_VERSION = packageJSON.version; process.env.ENV_PATH = path.join(__dirname, 'env.ini'); -const { Ignitor } = require('@adonisjs/ignitor'); -const fold = require('@adonisjs/fold'); - module.exports = async (userPath, port) => { const dbPath = path.join(userPath, 'server.sqlite'); const dbTemplatePath = path.join(__dirname, 'database', 'template.sqlite'); - if (!await fs.exists(dbPath)) { + if (!fs.existsSync(dbPath)) { // Manually copy file // We can't use copyFile here as it will cause the file to be readonly on Windows const dbTemplate = await fs.readFile(dbTemplatePath); @@ -46,8 +46,5 @@ module.exports = async (userPath, port) => { process.env.USER_PATH = userPath; process.env.PORT = port; - new Ignitor(fold) - .appRoot(__dirname) - .fireHttpServer() - .catch(console.error); // eslint-disable-line no-console + new Ignitor(fold).appRoot(__dirname).fireHttpServer().catch(console.error); // eslint-disable-line no-console }; -- cgit v1.2.3-54-g00ecf