diff --git a/.gitignore b/.gitignore index 24a6afd..a07c278 100644 --- a/.gitignore +++ b/.gitignore @@ -83,4 +83,5 @@ typings/ # End of https://www.gitignore.io/api/node lighthouse -dist \ No newline at end of file +dist +.vscode \ No newline at end of file diff --git a/cli.js b/cli.js new file mode 100644 index 0000000..a4d85bd --- /dev/null +++ b/cli.js @@ -0,0 +1,14 @@ +#!/usr/bin/env node +const program = require('commander'); +const main = require('./lighthouse_runner'); +const package = require('./package.json'); + +program.version(package.version); +program + .option('-u, --url ', 'starting valid url for auto-lighthouse') + .option('-o, --open ', 'boolean for auto opening reports') + .option('-p, --port ', 'port for local express server', 9000); + +program.parse(process.argv); +main(program); + diff --git a/config/runnerConfiguration.json b/config/runnerConfiguration.json index 739ec17..8c50e48 100644 --- a/config/runnerConfiguration.json +++ b/config/runnerConfiguration.json @@ -1,3 +1,4 @@ { - "autoOpenReports": false + "autoOpenReports": false, + "port": 9000 } \ No newline at end of file diff --git a/lighthouse_runner.js b/lighthouse_runner.js index 9fbb0e9..60521db 100644 --- a/lighthouse_runner.js +++ b/lighthouse_runner.js @@ -6,6 +6,8 @@ const fs = require('fs'); const path = require('path'); const { URL } = require('url'); const open = require('open'); +let autoOpen = false; +let port; const simpleCrawlerConfig = require('./config/simpleCrawler'); const runnerConfig = require('./config/runnerConfiguration'); @@ -149,11 +151,12 @@ const complete = (urlList) => { chromeFlags: ['--headless'], emulatedFormFactor: 'desktop' }; - let fileTime = new Date().toISOString(); - // Replacing characters that make Windows filesystem sad + let fileTime = new Date().toLocaleString(); + // Replacing characters that make OS sad + fileTime = fileTime.replace(/ /g, ''); + fileTime = fileTime.replace(/\//g, '_'); + fileTime = fileTime.replace(/,/g, '_'); fileTime = fileTime.replace(/:/g, "_"); - fileTime = fileTime.replace(/\./g, "_"); - // tempFilePath is wherever we want to store the generated report let tempFilePath = path.join(__dirname, "lighthouse", fileTime); if (!fs.existsSync(tempFilePath)) { @@ -167,18 +170,18 @@ const complete = (urlList) => { (async () => { try { let combinedOpts = [desktopOpts, opts]; - const desktopPromises = await parallelLimit( + const promises = await parallelLimit( [ processReports(urlList, combinedOpts, tempFilePath) ], 2); - await Promise.all(desktopPromises); - console.log('done with desktop reports!'); + await Promise.all(promises); + console.log('Done with reports!'); } catch (e) { console.error(e); } - if (runnerConfig.autoOpenReports === true) { - openReports(tempFilePath); + if (autoOpen) { + openReports(port); } })(); @@ -186,13 +189,12 @@ const complete = (urlList) => { /** * Opens generated reports in your preferred browser as an explorable list - * + * @param {Number} port Port used by Express */ -const openReports = () => { +const openReports = (port) => { const express = require('express'); const serveIndex = require('serve-index'); const app = express(); - const port = 3000; app.use(express.static('lighthouse'), serveIndex('lighthouse', { 'icons': true })); app.listen(port); open('http://localhost:' + port); @@ -207,7 +209,7 @@ const openReportsWithoutServer = (tempFilePath) => { let filePath = tempFilePath; if (fs.existsSync(filePath)) { fs.readdirSync(filePath).forEach(file => { - console.log('opening: ', file); + console.log('Opening: ', file); let tempPath = path.join(tempFilePath, file); open(tempPath); }); @@ -216,11 +218,24 @@ const openReportsWithoutServer = (tempFilePath) => { /** * Main function. * This kicks off the Lighthouse Runner process + * @param {commander} program - An instance of a Commander.js program */ -const main = () => { +function main(program) { + let domainRoot; + if (program.open === undefined) { + autoOpen = runnerConfig.autoOpenReports; + } else { + autoOpen = program.open; + } + if (program.url === undefined) { + domainRoot = new URL(simpleCrawlerConfig.host); + } else { + domainRoot = new URL(program.url) + } + port = program.port; let urlList = []; - let domainRoot = new URL(simpleCrawlerConfig.host); urlList.push(domainRoot.href); + console.log('Pushed: ', domainRoot.href); let simpleCrawler = new Crawler(domainRoot.href) .on('queueadd', (queueItem) => { queueAdd(queueItem, urlList) @@ -233,7 +248,13 @@ const main = () => { simpleCrawler[key] = simpleCrawlerConfig[key]; } simpleCrawler.host = domainRoot.hostname; + if (autoOpen) { + console.log('Automatically opening reports when done!'); + } else if (!autoOpen) { + console.log('Not automatically opening reports when done!'); + } console.log('Starting simple crawler on', simpleCrawler.host + '!'); simpleCrawler.start(); } -main(); + +module.exports = main; diff --git a/package-lock.json b/package-lock.json index 08e8571..44ebe5c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { - "name": "lighthouse-runner", - "version": "0.0.2", + "name": "auto-lighthouse", + "version": "0.0.1", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -312,6 +312,11 @@ "delayed-stream": "~1.0.0" } }, + "commander": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-3.0.0.tgz", + "integrity": "sha512-pl3QrGOBa9RZaslQiqnnKX2J068wcQw7j9AIaBQ9/JEp5RY6je4jKTImg0Bd+rpoONSe7GUFSgkxLeo17m3Pow==" + }, "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", diff --git a/package.json b/package.json index 86aa4ad..5ce9a53 100644 --- a/package.json +++ b/package.json @@ -2,9 +2,12 @@ "name": "auto-lighthouse", "version": "0.0.1", "description": "A utility package for automating lighthouse reports ", - "main": "lighthouse_runner.js", + "main": "cli.js", + "bin": { + "auto-lighthouse": "./cli.js" + }, "scripts": { - "start": "node lighthouse_runner" + "start": "node cli" }, "repository": { "type": "git", @@ -18,10 +21,11 @@ "homepage": "https://github.com/TGiles/useful_scripts#readme", "dependencies": { "chrome-launcher": "^0.11.2", + "commander": "^3.0.0", "express": "^4.17.1", "lighthouse": "^5.2.0", "open": "6.4.0", - "simplecrawler": "^1.1.8", - "serve-index": "^1.9.1" + "serve-index": "^1.9.1", + "simplecrawler": "^1.1.8" } }