creevey
Version:
Cross-browser screenshot testing tool for Storybook with fancy UI Runner
86 lines (70 loc) • 3.87 kB
JavaScript
;
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;
}