UNPKG

creevey

Version:

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

137 lines (104 loc) 5.7 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = register; var _module = _interopRequireDefault(require("module")); var _fs = _interopRequireDefault(require("fs")); var _path = require("path"); var _pirates = require("pirates"); var _types = require("../../../types"); var _utils = require("../../utils"); var _creeveyPlugin = _interopRequireDefault(require("./creevey-plugin")); var _helpers = require("../../storybook/helpers"); 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; } let parents = null; let story = null; //@ts-expect-error private field doesn't have types // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-assignment const jsLoader = _module.default._extensions['.js']; //@ts-expect-error private field doesn't have types // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access _module.default._extensions['.js'] = function (mod, filename) { parents = Object.values(require.cache).filter(m => m === null || m === void 0 ? void 0 : m.children.includes(mod)).filter(_types.isDefined).map(m => m.filename); // eslint-disable-next-line @typescript-eslint/no-unsafe-call jsLoader(mod, filename); parents = null; }; (0, _pirates.addHook)(() => '', { exts: ['.jpg', '.jpeg', '.png', '.gif', '.eot', '.otf', '.svg', '.ttf', '.woff', '.woff2', '.css', '.less', '.scss', '.styl'], ignoreNodeModules: false }); function getRequireContext(rootDir) { return function requireContext(rootPath, deep, filter) { const ids = []; let contextPath; // Relative path if (rootPath.startsWith('.')) contextPath = (0, _path.resolve)(rootDir, rootPath); // Module path else if (!(0, _path.isAbsolute)(rootPath)) contextPath = require.resolve(rootPath); // Absolute path else contextPath = rootPath; const traverse = dirPath => { _fs.default.readdirSync(dirPath, { withFileTypes: true }).forEach(dirent => { var _filter$test; const filename = dirent.name; const filePath = (0, _path.join)(dirPath, filename); if (dirent.isDirectory() && deep) return traverse(filePath); if (dirent.isFile() && ((_filter$test = filter === null || filter === void 0 ? void 0 : filter.test(`./${(0, _path.relative)(contextPath, filePath)}`)) !== null && _filter$test !== void 0 ? _filter$test : true)) return ids.push(filePath); }); }; traverse(contextPath); const context = id => { story = id; // eslint-disable-next-line @typescript-eslint/no-var-requires const storyModule = require(id); story = null; return storyModule; }; context.id = contextPath; context.keys = () => ids; context.resolve = id => id; return context; }; } async function register(config, debug = false) { const requireContext = getRequireContext(config.storybookDir); const preview = (0, _path.resolve)(config.storybookDir, 'preview'); if ((0, _helpers.hasDocsAddon)()) { const mdx = (await Promise.resolve(`${(0, _helpers.resolveFromStorybookAddonDocs)('@mdx-js/mdx')}`).then(s => _interopRequireWildcard(require(s)))).default; const { mdxOptions } = await Promise.resolve().then(() => _interopRequireWildcard(require('../webpack/mdx-loader'))); (0, _pirates.addHook)((code, filename) => { if (!story || !filename.startsWith(story)) return code; return mdx.sync(code, mdxOptions()); }, { exts: ['.mdx'] }); } // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call (await Promise.resolve().then(() => _interopRequireWildcard(require('@babel/register')))).default(config.babelOptions({ babelrc: false, rootMode: 'upward-optional', ignore: [/node_modules/], extensions: (0, _helpers.hasDocsAddon)() ? [..._utils.extensions, '.mdx'] : _utils.extensions, parserOpts: { sourceType: 'module', plugins: ['classProperties', 'decorators-legacy', 'jsx', 'typescript'] }, plugins: [[_creeveyPlugin.default, { debug, preview, parents: () => parents, story: () => story }], ['@babel/plugin-transform-runtime', { // eslint-disable-next-line @typescript-eslint/no-var-requires version: require('@babel/helpers/package.json').version, absoluteRuntime: true, corejs: 3 }]], presets: [['@babel/preset-env', { targets: { node: '10' } }]] })); return requireContext; }