UNPKG

squint-cli

Version:

Squint makes visual reviews of web app releases easy

88 lines (87 loc) 3.66 kB
"use strict"; 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;