@storybook/cli
Version:
Storybook's CLI - easiest method of adding storybook to your projects
94 lines (74 loc) • 3.09 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.getStorybookInfo = void 0;
var _path = _interopRequireDefault(require("path"));
var _fsExtra = _interopRequireDefault(require("fs-extra"));
var _getStorybookConfiguration = require("./getStorybookConfiguration");
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
const viewLayers = {
'@storybook/react': 'react',
'@storybook/vue': 'vue',
'@storybook/vue3': 'vue3',
'@storybook/angular': 'angular',
'@storybook/html': 'html',
'@storybook/web-components': 'web-components',
'@storybook/polymer': 'polymer',
'@storybook/ember': 'ember',
'@storybook/marko': 'marko',
'@storybook/mithril': 'mithril',
'@storybook/riot': 'riot',
'@storybook/svelte': 'svelte',
'@storybook/preact': 'preact',
'@storybook/rax': 'rax'
};
const logger = console;
const findDependency = ({
dependencies,
devDependencies,
peerDependencies
}, predicate) => [Object.entries(dependencies || {}).find(predicate), Object.entries(devDependencies || {}).find(predicate), Object.entries(peerDependencies || {}).find(predicate)];
const getFrameworkInfo = packageJson => {
// Pull the viewlayer from dependencies in package.json
const [dep, devDep, peerDep] = findDependency(packageJson, ([key]) => viewLayers[key]);
const [pkg, version] = dep || devDep || peerDep || [];
const framework = viewLayers[pkg];
if (dep && devDep && dep[0] === devDep[0]) {
logger.warn(`Found "${dep[0]}" in both "dependencies" and "devDependencies". This is probably a mistake.`);
}
if (dep && peerDep && dep[0] === peerDep[0]) {
logger.warn(`Found "${dep[0]}" in both "dependencies" and "peerDependencies". This is probably a mistake.`);
}
return {
framework,
version
};
};
const validConfigExtensions = ['ts', 'js', 'tsx', 'jsx', 'mjs', 'cjs'];
const findConfigFile = (prefix, configDir) => {
const filePrefix = _path.default.join(configDir, prefix);
const extension = validConfigExtensions.find(ext => _fsExtra.default.existsSync(`${filePrefix}.${ext}`));
return extension ? `${filePrefix}.${extension}` : null;
};
const getConfigInfo = packageJson => {
var _packageJson$scripts;
let configDir = '.storybook';
const storybookScript = (_packageJson$scripts = packageJson.scripts) === null || _packageJson$scripts === void 0 ? void 0 : _packageJson$scripts.storybook;
if (storybookScript) {
const configParam = (0, _getStorybookConfiguration.getStorybookConfiguration)(storybookScript, '-c', '--config-dir');
if (configParam) configDir = configParam;
}
return {
configDir,
mainConfig: findConfigFile('main', configDir),
previewConfig: findConfigFile('preview', configDir),
managerConfig: findConfigFile('manager', configDir)
};
};
const getStorybookInfo = packageJson => {
const frameworkInfo = getFrameworkInfo(packageJson);
const configInfo = getConfigInfo(packageJson);
return Object.assign({}, frameworkInfo, configInfo);
};
exports.getStorybookInfo = getStorybookInfo;