UNPKG

squint-cli

Version:

Squint makes visual reviews of web app releases easy

137 lines (117 loc) 6.55 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.parseCliArgs = exports.formatHelp = void 0; const arg_1 = __importDefault(require("arg")); const chalk_1 = __importDefault(require("chalk")); const lodash_1 = __importDefault(require("lodash")); function formatHelp(defaultConfig) { const helpMessage = chalk_1.default ` {bold EXAMPLES} Compare current production to beta. The whole site is automatically crawled. {dim $ squint compare https://example.com https://beta.example.com} Crawl all paths from beta site and pipe output to a file. The crawler only follows site-internal links. {dim $ squint crawl https://beta.example.com > paths.txt} Get screenshot of a page. {dim $ squint screenshot https://beta.example.com} Get screenshot of a single element in a page. {dim $ squint screenshot --selector 'div' https://beta.example.com} Compare current production to beta, but use an existing file of paths. {dim $ squint compare --paths-file paths.txt https://example.com https://beta.example.com} Compare a single page. {dim $ squint compare --single-page https://example.com/about https://beta.example.com/about} Compare a single element with a selector. {dim $ squint compare --selector '#logo' https://example.com https://beta.example.com} Compare a single element, but use JS to dig an element from the page. (page: Puppeteer.Page) => HTMLElement {dim $ squint compare --selector-js '(page) => page.$("#logo")' https://example.com https://beta.example.com} {bold COMMON OPTIONS} --help Shows this help message --puppeteer-launch-mode Options: launch, connect. Default: ${defaultConfig.puppeteerLaunchMode.type} --puppeteer-launch-options Puppeteer .launch or .connect options in JS. Default: ${JSON.stringify(defaultConfig.puppeteerLaunchMode.options)} --puppeteer-page-pool-max Maximum pages to use at the same time with Puppeteer. Default: ${defaultConfig.puppeteerPagePoolMax} --include-hash When enabled, URL hashes are not ignored when crawling. Default: ${defaultConfig.includeHash} --include-search-query When enabled, URL search queries are not ignored when crawling. Default: ${defaultConfig.includeSearchQuery} --should-visit Custom JS function that can limit which links the crawler follows. This is an AND filter on top of all other filters. ( urlToVisit: url.URL, hrefDetails: \{ currentUrl: string, href: string \}, visited: Set<string>, config: Config ) => boolean --trailing-slash-mode Options: preserve, remove, add. Default: ${defaultConfig.trailingSlashMode} {bold COMPARE & SCREENSHOT} -w --width Viewport width for Puppeteer. Default: ${defaultConfig.width} -h --height Viewport height for Puppeteer. Default: ${defaultConfig.height} --paths-file File of URL paths. One path per line. --selector Takes screenshot from a single element. Selector for document.querySelector. page.waitForSelector is called to ensure the element is visible. --selector-js Takes screenshot from a single element. Selector as JS function that digs an element. (page: Puppeteer.Page) => HTMLElement --screenshot-options Puppeteer .screenshot options in JS. Overrides other options. --after-goto Custom JS function that will be run after Puppeteer page.goto has been called. (page: Puppeteer.Page) => Promise<void> --after-page Custom JS function that will be run after Puppeteer page has been created. (page: Puppeteer.Page) => Promise<void> {bold COMPARE} --out-dir Output directory for images. Default: ${defaultConfig.outDir} --single-page Disable automatic crawling. Only take a screenshot from single page. -o --out-file Relevant in only in single-page mode. Output file for the diff image. --save-all Saves all diff image files, even if there are zero differences. {bold SCREENSHOT} -o --out-file Output file for the screenshot {bold CRAWL} --max-depth Maximum depth of links to follow. Default: ${defaultConfig.maxDepth} `; return helpMessage; } exports.formatHelp = formatHelp; function assertOneOf(args, flag, allowed) { if (lodash_1.default.isString(args[flag]) && !allowed.includes(args[flag])) { throw new Error(`Invalid value for ${flag}: '${args[flag]}'. Should be one of ${allowed.join(', ')}.`); } } function parseJsDataFlag(args, flag) { try { args[flag] = eval(`(() => { return ${args[flag]}; })()`); } catch (e) { throw new Error(`Unable to \`eval\` ${flag}: ${e}`); } } function parseCliArgs() { const args = arg_1.default({ '--help': Boolean, '--width': Number, '-w': '--width', '--height': Number, '-h': '--height', '--include-hash': Boolean, '--include-search-query': Boolean, '--should-visit': String, '--trailing-slash-mode': String, '--max-depth': Number, '--puppeteer-launch-mode': String, '--puppeteer-launch-options': String, '--puppeteer-page-pool-max': Number, '--after-goto': String, '--after-page': String, '--single-page': Boolean, '--selector': String, '--selector-js': String, '--paths-file': String, '--screenshot-options': String, '--save-all': Boolean, '--out-dir': String, '--out-file': String, '-o': '--out-file', }); assertOneOf(args, '--trailing-slash-mode', ['preserve', 'add', 'remove']); assertOneOf(args, '--puppeteer-launch-mode', ['launch', 'connect']); parseJsDataFlag(args, '--puppeteer-launch-options'); parseJsDataFlag(args, '--screenshot-options'); return args; } exports.parseCliArgs = parseCliArgs;