diff --git a/app/index.js b/app/index.js index a44dcbe..d87bdfd 100644 --- a/app/index.js +++ b/app/index.js @@ -268,7 +268,7 @@ module.exports.getGameDataFromURL = async function (url) { // Check URL if (!urlExists(url)) return null; - if (!isF95URL(url)) throw url + " is not a valid F95Zone URL"; + if (!isF95URL(url)) throw new Error(url + " is not a valid F95Zone URL"); // Gets the search results of the game being searched for if (_browser === null && !shared.isolation) _browser = await prepareBrowser(); @@ -508,9 +508,8 @@ async function loginF95(browser, username, password) { const c = await page.cookies(); fs.writeFileSync(shared.cookiesCachePath, JSON.stringify(c)); result.message = "Authentication successful"; - } - // Obtain the error message - else if ( + } else if ( + // Obtain the error message await page.evaluate( /* istanbul ignore next */ (selector) => document.querySelector(selector) !== null, diff --git a/app/scripts/classes/login-result.js b/app/scripts/classes/login-result.js index 9ed02dd..93d1782 100644 --- a/app/scripts/classes/login-result.js +++ b/app/scripts/classes/login-result.js @@ -4,17 +4,17 @@ * Object obtained in response to an attempt to login to the portal. */ class LoginResult { - constructor() { - /** - * Result of the login operation - * @type Boolean - */ - this.success = false; - /** - * Login response message - * @type String - */ - this.message = ''; - } + constructor() { + /** + * Result of the login operation + * @type Boolean + */ + this.success = false; + /** + * Login response message + * @type String + */ + this.message = ''; + } } module.exports = LoginResult; \ No newline at end of file diff --git a/app/scripts/constants/urls.js b/app/scripts/constants/urls.js index 1f662f3..da54df4 100644 --- a/app/scripts/constants/urls.js +++ b/app/scripts/constants/urls.js @@ -1,7 +1,7 @@ module.exports = Object.freeze({ - F95_BASE_URL: 'https://f95zone.to', - F95_SEARCH_URL: 'https://f95zone.to/search', - F95_LATEST_UPDATES: 'https://f95zone.to/latest', - F95_LOGIN_URL: 'https://f95zone.to/login', - F95_WATCHED_THREADS: 'https://f95zone.to/watched/threads', + F95_BASE_URL: 'https://f95zone.to', + F95_SEARCH_URL: 'https://f95zone.to/search', + F95_LATEST_UPDATES: 'https://f95zone.to/latest', + F95_LOGIN_URL: 'https://f95zone.to/login', + F95_WATCHED_THREADS: 'https://f95zone.to/watched/threads', }); \ No newline at end of file diff --git a/app/scripts/game-scraper.js b/app/scripts/game-scraper.js index 3114d1a..e0a6987 100644 --- a/app/scripts/game-scraper.js +++ b/app/scripts/game-scraper.js @@ -2,15 +2,21 @@ // Public modules from npm const HTMLParser = require("node-html-parser"); -const puppeteer = require("puppeteer"); +const puppeteer = require("puppeteer"); // skipcq: JS-0128 // Modules from file const shared = require("./shared.js"); const selectors = require("./constants/css-selectors.js"); -const { preparePage } = require("./puppeteer-helper.js"); +const { + preparePage +} = require("./puppeteer-helper.js"); const GameDownload = require("./classes/game-download.js"); const GameInfo = require("./classes/game-info.js"); -const { isStringAValidURL, isF95URL, urlExists } = require("./urls-helper.js"); +const { + isStringAValidURL, + isF95URL, + urlExists +} = require("./urls-helper.js"); /** * @protected @@ -24,7 +30,7 @@ module.exports.getGameInfo = async function (browser, url) { if (shared.debug) console.log("Obtaining game info"); // Verify the correctness of the URL - if (!isF95URL(url)) throw url + " is not a valid F95Zone URL"; + if (!isF95URL(url)) throw new Error(url + " is not a valid F95Zone URL"); const exists = await urlExists(url); if (!exists) return null; @@ -54,12 +60,12 @@ module.exports.getGameInfo = async function (browser, url) { info.overview = overview; info.tags = await tags; info.f95url = url; - info.version = info.isMod - ? parsedInfos["MOD VERSION"] - : parsedInfos["VERSION"]; - info.lastUpdate = info.isMod - ? parsedInfos["UPDATED"] - : parsedInfos["THREAD UPDATED"]; + info.version = info.isMod ? + parsedInfos["MOD VERSION"] : + parsedInfos["VERSION"]; + info.lastUpdate = info.isMod ? + parsedInfos["UPDATED"] : + parsedInfos["THREAD UPDATED"]; info.previewSource = await previewSource; info.changelog = (await changelog || "Unknown changelog"); //info.downloadInfo = await downloadData; @@ -132,7 +138,8 @@ async function getMainPostStructuredText(page) { // The info are plain text so we need to parse the HTML code const bodyHTML = await page.evaluate( - /* istanbul ignore next */ (mainPost) => mainPost.innerHTML, + /* istanbul ignore next */ + (mainPost) => mainPost.innerHTML, post ); return HTMLParser.parse(bodyHTML).structuredText; @@ -147,8 +154,9 @@ async function getMainPostStructuredText(page) { async function getGameAuthor(page) { // Get the game/mod name (without square brackets) const titleHTML = await page.evaluate( - /* istanbul ignore next */ (selector) => - document.querySelector(selector).innerHTML, + /* istanbul ignore next */ + (selector) => + document.querySelector(selector).innerHTML, selectors.GAME_TITLE ); const structuredTitle = HTMLParser.parse(titleHTML); @@ -196,7 +204,8 @@ function parseConversationPage(text) { */ async function getGamePreviewSource(page) { const src = await page.evaluate( - /* istanbul ignore next */ (selector) => { + /* istanbul ignore next */ + (selector) => { // Get the firs image available const img = document.querySelector(selector); @@ -219,8 +228,9 @@ async function getGamePreviewSource(page) { async function getGameTitle(page) { // Get the game/mod name (without square brackets) const titleHTML = await page.evaluate( - /* istanbul ignore next */ (selector) => - document.querySelector(selector).innerHTML, + /* istanbul ignore next */ + (selector) => + document.querySelector(selector).innerHTML, selectors.GAME_TITLE ); const structuredTitle = HTMLParser.parse(titleHTML); @@ -243,7 +253,8 @@ async function getGameTags(page) { // Get the game tags for (const handle of await page.$$(selectors.GAME_TAGS)) { const tag = await page.evaluate( - /* istanbul ignore next */ (element) => element.innerText, + /* istanbul ignore next */ + (element) => element.innerText, handle ); tags.push(tag.toUpperCase()); @@ -266,7 +277,8 @@ async function parsePrefixes(page, info) { info.status = "Ongoing"; for (const handle of await page.$$(selectors.GAME_TITLE_PREFIXES)) { const value = await page.evaluate( - /* istanbul ignore next */ (element) => element.innerText, + /* istanbul ignore next */ + (element) => element.innerText, handle ); @@ -310,6 +322,7 @@ async function getLastChangelog(page) { * @param {puppeteer.Page} page Page containing the links to be extrapolated * @returns {Promise} List of objects used for game download */ +// skipcq: JS-0128 async function getGameDownloadLink(page) { // Most used hosting platforms const hostingPlatforms = [ @@ -337,7 +350,8 @@ async function getGameDownloadLink(page) { if (container !== null) break; const upperText = ( await page.evaluate( - /* istanbul ignore next */ (e) => e.innerText, + /* istanbul ignore next */ + (e) => e.innerText, candidate ) ).toUpperCase(); @@ -355,7 +369,8 @@ async function getGameDownloadLink(page) { // Extract the HTML text from the container const searchText = ( await page.evaluate( - /* istanbul ignore next */ (e) => e.innerHTML, + /* istanbul ignore next */ + (e) => e.innerHTML, container ) ).toLowerCase(); @@ -398,8 +413,8 @@ function extractGameHostingData(platform, text) { // Find the end of the container if (endIndex === -1) endIndex = - text.indexOf(CONTAINER_SPAN_CLOSE, startIndex) + - CONTAINER_SPAN_CLOSE.length; + text.indexOf(CONTAINER_SPAN_CLOSE, startIndex) + + CONTAINER_SPAN_CLOSE.length; text = text.substring(startIndex, endIndex); diff --git a/app/scripts/game-searcher.js b/app/scripts/game-searcher.js index a3c865d..f760b5d 100644 --- a/app/scripts/game-searcher.js +++ b/app/scripts/game-searcher.js @@ -1,7 +1,7 @@ "use strict"; // Public modules from npm -const puppeteer = require("puppeteer"); +const puppeteer = require("puppeteer"); // skipcq: JS-0128 // Modules from file const shared = require("./shared.js"); diff --git a/app/scripts/urls-helper.js b/app/scripts/urls-helper.js index 459d846..b5fa93d 100644 --- a/app/scripts/urls-helper.js +++ b/app/scripts/urls-helper.js @@ -27,7 +27,7 @@ module.exports.isF95URL = function (url) { */ module.exports.isStringAValidURL = function (url) { try { - new URL(url); + new URL(url); // skipcq: JS-0078 return true; } catch (err) { return false;