UNPKG

creevey

Version:

Cross-browser screenshot testing tool for Storybook with fancy UI Runner

86 lines (70 loc) 3.87 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.readConfig = readConfig; exports.defaultConfig = exports.defaultBrowser = void 0; var _fs = _interopRequireDefault(require("fs")); var _path = _interopRequireDefault(require("path")); var _helpers = require("./storybook/helpers"); var _types = require("../types"); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); } function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; } const defaultBrowser = 'chrome'; exports.defaultBrowser = defaultBrowser; const defaultConfig = { useDocker: true, useWebpackToExtractTests: false, dockerImage: 'aerokube/selenoid:latest-release', pullImages: true, storybookUrl: 'http://localhost:6006', screenDir: _path.default.resolve('images'), reportDir: _path.default.resolve('report'), storybookDir: _path.default.resolve('.storybook'), maxRetries: 0, diffOptions: { threshold: 0, includeAA: true }, browsers: { [defaultBrowser]: true }, hooks: {}, babelOptions: _ => _ }; exports.defaultConfig = defaultConfig; function normalizeBrowserConfig(name, config) { if (typeof config == 'boolean') return { browserName: name }; if (typeof config == 'string') return { browserName: config }; return config; } function resolveConfigPath(configPath) { const rootDir = process.cwd(); const configDir = _path.default.resolve('.creevey'); if ((0, _types.isDefined)(configPath)) { configPath = _path.default.resolve(configPath); } else if (_fs.default.existsSync(configDir)) { configPath = _path.default.join(configDir, 'config'); // TODO We already find file with extension, why not use it? } else if (_fs.default.readdirSync(rootDir).find(filename => filename.startsWith('creevey.config'))) { configPath = _path.default.join(rootDir, 'creevey.config'); } return configPath; } async function readConfig(options) { const configPath = resolveConfigPath(options.config); const userConfig = { ...defaultConfig }; if ((0, _types.isDefined)(configPath)) Object.assign(userConfig, (await Promise.resolve(`${configPath}`).then(s => _interopRequireWildcard(require(s)))).default); _helpers.storybookDirRef.current = userConfig.storybookDir; if ((0, _helpers.isStorybookVersionLessThan)(6, 2)) userConfig.useWebpackToExtractTests = true; if (options.reportDir) userConfig.reportDir = _path.default.resolve(options.reportDir); if (options.screenDir) userConfig.screenDir = _path.default.resolve(options.screenDir); // NOTE: Hack to pass typescript checking const config = userConfig; Object.entries(config.browsers).forEach(([browser, browserConfig]) => config.browsers[browser] = normalizeBrowserConfig(browser, browserConfig)); return config; }