UNPKG

squint-cli

Version:

Squint makes visual reviews of web app releases easy

96 lines (95 loc) 3.91 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, 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;