UNPKG

storybook-chrome-screenshot

Version:

A Storybook addon, Save the screenshot image of your stories! via puppeteer.

139 lines 7.59 kB
#!/usr/bin/env node "use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; var __generator = (this && this.__generator) || function (thisArg, body) { var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; function verb(n) { return function (v) { return step([n, v]); }; } function step(op) { if (f) throw new TypeError("Generator is already executing."); while (_) try { if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; if (y = 0, t) op = [op[0] & 2, t.value]; switch (op[0]) { case 0: case 1: t = op; break; case 4: _.label++; return { value: op[1], done: false }; case 5: _.label++; y = op[1]; op = [0]; continue; case 7: op = _.ops.pop(); _.trys.pop(); continue; default: if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } if (t[2]) _.ops.pop(); _.trys.pop(); continue; } op = body.call(thisArg, _); } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; } }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k]; result["default"] = mod; return result; }; var _this = this; Object.defineProperty(exports, "__esModule", { value: true }); require("babel-polyfill"); // tslint:disable-line: no-import-side-effect var child_process_1 = require("child_process"); var commander_1 = __importDefault(require("commander")); var is_ci_1 = __importDefault(require("is-ci")); var path = __importStar(require("path")); var app_1 = require("./core/app"); var utils_1 = require("./core/utils"); // tslint:disable-next-line: no-var-requires no-require-imports var pkg = require('../package.json'); // tslint:disable: max-line-length commander_1.default .version(pkg.version) .usage('[options]') .option('-p, --port [number]', 'Storybook server port.', utils_1.parser.identity, 9001) .option('-h, --host [string]', 'Storybook server host.', utils_1.parser.identity, 'localhost') .option('-s, --static-dir <dir-names>', 'Directory where to load static files from.', utils_1.parser.list) .option('-c, --config-dir [dir-name]', 'Directory where to load Storybook configurations from.', utils_1.parser.identity, '.storybook') .option('-o, --output-dir [dir-name]', 'Directory where screenshot images are saved.', utils_1.parser.identity, '__screenshots__') .option('--parallel [number]', 'Number of Page Instances of Puppeteer to be activated when shooting screenshots.', utils_1.parser.number, 4) .option('--filter-kind [regexp]', 'Filter of kind with RegExp. (example: "Button$")', utils_1.parser.regexp) .option('--filter-story [regexp]', 'Filter of story with RegExp. (example: "^with\\s.+$")', utils_1.parser.regexp) .option('--inject-files <file-names>', 'Path to the JavaScript file to be injected into frame.', utils_1.parser.list, []) .option('--browser-timeout [number]', 'Timeout milliseconds when Puppeteer opens Storybook.', utils_1.parser.number, 30000) .option('--puppeteer-launch-config [json]', 'JSON string of launch config for Puppeteer.', utils_1.parser.identity, '{"args":["--no-sandbox","--disable-setuid-sandbox", "--disable-dev-shm-usage"]}') .option('--silent', 'Suppress standard output.', utils_1.parser.identity, false) .option('--debug', 'Enable debug mode.', utils_1.parser.identity, false) .parse(process.argv); // tslint:enable var bin = child_process_1.execSync('echo $(npm bin)', { encoding: 'utf-8' }) .toString() .trim(); var options = { port: commander_1.default.port, host: commander_1.default.host, staticDir: commander_1.default.staticDir, configDir: commander_1.default.configDir, outputDir: commander_1.default.outputDir, filterKind: commander_1.default.filterKind, filterStory: commander_1.default.filterStory, browserTimeout: commander_1.default.browserTimeout, parallel: commander_1.default.parallel, injectFiles: commander_1.default.injectFiles, puppeteerLaunchConfig: commander_1.default.puppeteerLaunchConfig, silent: !!commander_1.default.silent, debug: !!commander_1.default.debug, ciMode: is_ci_1.default, cwd: path.resolve(bin, '..', '..'), cmd: path.resolve(bin, 'start-storybook') }; // tslint:disable-next-line: no-floating-promises (function () { return __awaiter(_this, void 0, void 0, function () { var store, terminal, app, e_1; return __generator(this, function (_a) { switch (_a.label) { case 0: store = new app_1.StoryStore(options.filterKind, options.filterStory); terminal = new app_1.Terminal(process.stdout, process.stderr, options.silent, options.debug, options.ciMode); app = new app_1.App(options, store, terminal, new app_1.Server(options, terminal, child_process_1.spawn), function (id) { return new app_1.Browser(id, store, options); }); _a.label = 1; case 1: _a.trys.push([1, 7, , 9]); return [4 /*yield*/, app.validate()]; case 2: _a.sent(); return [4 /*yield*/, app.launch()]; case 3: _a.sent(); return [4 /*yield*/, app.prepare()]; case 4: _a.sent(); return [4 /*yield*/, app.capture()]; case 5: _a.sent(); return [4 /*yield*/, app.teardown()]; case 6: _a.sent(); process.exit(0); return [3 /*break*/, 9]; case 7: e_1 = _a.sent(); return [4 /*yield*/, app.terminate(e_1)]; case 8: _a.sent(); process.exit(1); return [3 /*break*/, 9]; case 9: return [2 /*return*/]; } }); }); })(); //# sourceMappingURL=cli.js.map