diff --git a/src/classes/utils/ArgsParser.js b/src/classes/utils/ArgsParser.js new file mode 100644 index 0000000..ad55f12 --- /dev/null +++ b/src/classes/utils/ArgsParser.js @@ -0,0 +1,33 @@ +const parseArgs = require('minimist'); +const { InvalidArgumentError } = require('../../errors'); + +class ArgsParser { + constructor(minimistOptions = ArgsParser.DEFAULT_OPTIONS, requiredArgs = []) { + this.options = minimistOptions; + this.required = requiredArgs; + } + + parse(argv) { + const parsedArgs = parseArgs(argv, this.options); + this.validate(parsedArgs); + + return parsedArgs; + } + + validate(parsedArgs) { + this.required.forEach((arg) => { + if (!parsedArgs[arg]) { + throw new InvalidArgumentError(`--${arg} is required!`); + } + }); + } +} + +ArgsParser.DEFAULT_OPTIONS = { + boolean: ['display'], + default: { + display: false + } +}; + +module.exports = ArgsParser; diff --git a/src/errors/InvalidArgumentError.js b/src/errors/InvalidArgumentError.js new file mode 100644 index 0000000..2673def --- /dev/null +++ b/src/errors/InvalidArgumentError.js @@ -0,0 +1,9 @@ +class InvalidArgumentError extends Error { + constructor(message) { + super(message); + + this.name = 'InvalidArgumentError'; + } +} + +module.exports = InvalidArgumentError; diff --git a/src/errors/index.js b/src/errors/index.js index 841618d..c5819fa 100644 --- a/src/errors/index.js +++ b/src/errors/index.js @@ -1,9 +1,11 @@ const FatalError = require('./FatalError'); const ScraperError = require('./ScraperError'); const JDownloaderError = require('./JDownloaderError'); +const InvalidArgumentError = require('./InvalidArgumentError'); module.exports = { FatalError, ScraperError, - JDownloaderError + JDownloaderError, + InvalidArgumentError }; diff --git a/src/index.js b/src/index.js index b85b8a0..56a1665 100644 --- a/src/index.js +++ b/src/index.js @@ -1,14 +1,17 @@ const puppeteer = require('puppeteer-extra'); const StealthPlugin = require('puppeteer-extra-plugin-stealth'); const AdBlockerPlugin = require('puppeteer-extra-plugin-adblocker'); +const ArgsParser = require('./classes/utils/ArgsParser'); const KissAsianScraper = require('./classes/scraping/KissAsianScraper'); const credentials = require('../data/credentials.json'); +const args = new ArgsParser().parse(process.argv.slice(2)); + puppeteer.use(StealthPlugin()); puppeteer.use(AdBlockerPlugin({ blockTrackers: true })); const main = async() => { - const browser = await puppeteer.launch({ headless: false, slowMo: 250 }); + const browser = await puppeteer.launch({ headless: !args.display, slowMo: 250 }); const page = await browser.newPage(); const scraper = new KissAsianScraper(page);