Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: Add CLI #5

Merged
merged 7 commits into from
Aug 18, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -83,4 +83,5 @@ typings/
# End of https://www.gitignore.io/api/node

lighthouse
dist
dist
.vscode
14 changes: 14 additions & 0 deletions cli.js
Original file line number Diff line number Diff line change
@@ -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 <url>', 'starting valid url for auto-lighthouse')
.option('-o, --open <open>', 'boolean for auto opening reports')
.option('-p, --port <port>', 'port for local express server', 9000);

program.parse(process.argv);
main(program);

3 changes: 2 additions & 1 deletion config/runnerConfiguration.json
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
{
"autoOpenReports": false
"autoOpenReports": false,
"port": 9000
}
53 changes: 37 additions & 16 deletions lighthouse_runner.js
Original file line number Diff line number Diff line change
Expand Up @@ -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');
Expand Down Expand Up @@ -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)) {
Expand All @@ -167,32 +170,31 @@ 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);
}
})();

};

/**
* 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);
Expand All @@ -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);
});
Expand All @@ -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)
Expand All @@ -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;
9 changes: 7 additions & 2 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

12 changes: 8 additions & 4 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -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",
Expand All @@ -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"
}
}