squint-cli
Version:
Squint makes visual reviews of web app releases easy
96 lines (95 loc) • 3.91 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,
includeSearchQuery: false,
trailingSlashMode: 'preserve',
saveAll: false,
maxDepth: Infinity,
puppeteerLaunchMode: {
type: 'launch',
options: {
headless: true,
},
},
puppeteerPagePoolMax: 10,
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 defaultOutFile = command === 'compare'
? path_1.default.join(outDir, 'diff.png')
: path_1.default.join(outDir, 'screenshot.png');
const config = {
width: args['--width'] ?? exports.defaultConfig.width,
height: args['--height'] ?? exports.defaultConfig.height,
includeHash: args['--include-hash'] ?? exports.defaultConfig.includeHash,
includeSearchQuery: args['--include-search-query'] ?? exports.defaultConfig.includeSearchQuery,
trailingSlashMode: args['--trailing-slash-mode'] ?? exports.defaultConfig.trailingSlashMode,
shouldVisit: args['--should-visit'],
maxDepth: args['--max-depth'] ?? exports.defaultConfig.maxDepth,
outDir,
outFile: args['--out-file'] ?? defaultOutFile,
puppeteerLaunchMode: {
type: args['--puppeteer-launch-mode'] ??
exports.defaultConfig.puppeteerLaunchMode.type,
options: args['--puppeteer-launch-options'] ??
exports.defaultConfig.puppeteerLaunchMode.options,
},
puppeteerPagePoolMax: args['--puppeteer-page-pool-max'] ?? exports.defaultConfig.puppeteerPagePoolMax,
afterGoto: args['--after-goto'],
afterPage: args['--after-page'],
selector: args['--selector'],
selectorJs: args['--selector-js'],
singlePage: args['--single-page'] ?? false,
saveAll: args['--save-all'] ?? 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;