squint-cli
Version:
Squint makes visual reviews of web app releases easy
88 lines (87 loc) • 3.66 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.parseConfig = exports.defaultConfig = void 0;
const path_1 = __importDefault(require("path"));
const lodash_1 = __importDefault(require("lodash"));
const cli_1 = require("./cli");
exports.defaultConfig = {
width: 1280,
height: 800,
includeHash: false,
trailingSlashMode: 'preserve',
// This should in most cases be just 'siteInternal'
// Removing filters would make the crawler start following
// external links, and comparing those paths visually doesn't make sense
crawlFilters: ['siteInternal'],
maxDepth: Infinity,
puppeteerLaunchMode: {
type: 'launch',
options: {
headless: true,
}
},
outDir: '.squint',
screenshotOptions: {},
};
function isEmptyArgument(val) {
return !lodash_1.default.isString(val) || val.length < 1;
}
function parseConfig() {
const args = cli_1.parseCliArgs();
if (args['--help']) {
console.error(cli_1.formatHelp(exports.defaultConfig));
process.exit(0);
}
const command = args['_'][0];
const outDir = args['--out-dir'] ?? exports.defaultConfig.outDir;
const config = {
width: args['--width'] ?? exports.defaultConfig.width,
height: args['--height'] ?? exports.defaultConfig.height,
includeHash: args['--include-hash'] ?? exports.defaultConfig.includeHash,
trailingSlashMode: args['--trailing-slash-mode'] ?? exports.defaultConfig.trailingSlashMode,
crawlFilters: exports.defaultConfig.crawlFilters,
maxDepth: args['--max-depth'] ?? exports.defaultConfig.maxDepth,
outDir,
outFile: args['--out-file'] ?? command === 'compare' ? path_1.default.join(outDir, 'diff.png') : path_1.default.join(outDir, 'screenshot.png'),
puppeteerLaunchMode: {
type: args['--puppeteer-launch-mode'] ?? exports.defaultConfig.puppeteerLaunchMode.type,
options: args['--puppeteer-launch-options'] ?? exports.defaultConfig.puppeteerLaunchMode.options
},
js: args['--js'],
selector: args['--selector'],
selectorJs: args['--selector-js'],
singlePage: args['--single-page'] ?? false,
pathsFile: args['--paths-file'],
screenshotOptions: args['--screenshot-options'] ?? exports.defaultConfig.screenshotOptions,
// Positional arguments
command,
oldUrl: args['_'][1],
newUrl: args['_'][2],
crawlUrl: args['_'][1],
screenshotUrl: args['_'][1],
};
if (config.command === 'crawl' && isEmptyArgument(config.screenshotUrl)) {
throw new Error(`Command crawl missing a <url> argument`);
}
if (config.command === 'screenshot' && isEmptyArgument(config.crawlUrl)) {
throw new Error(`Command screenshot missing a <url> argument`);
}
if (config.command === 'compare' && isEmptyArgument(config.oldUrl)) {
throw new Error(`Command compare missing <oldUrl> argument`);
}
if (config.command === 'compare' && isEmptyArgument(config.newUrl)) {
throw new Error(`Command compare missing <newUrl> argument`);
}
if (config.command === 'compare' && !config.singlePage) {
const oldPath = new URL(config.oldUrl).pathname;
const newPath = new URL(config.newUrl).pathname;
if (oldPath !== newPath) {
throw new Error(`Mismatch between url paths detected!`);
}
}
return config;
}
exports.parseConfig = parseConfig;