@storybook/cli
Version:
Storybook's CLI - easiest method of adding storybook to your projects
85 lines (67 loc) • 2.77 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.configure = configure;
var _fsExtra = _interopRequireDefault(require("fs-extra"));
var _tsDedent = _interopRequireDefault(require("ts-dedent"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
function configureMain(_ref) {
let {
addons,
extensions = ['js', 'jsx', 'ts', 'tsx'],
commonJs = false
} = _ref,
custom = _objectWithoutPropertiesLoose(_ref, ["addons", "extensions", "commonJs"]);
const prefix = _fsExtra.default.existsSync('./src') ? '../src' : '../stories';
const config = Object.assign({
stories: [`${prefix}/**/*.stories.mdx`, `${prefix}/**/*.stories.@(${extensions.join('|')})`],
addons
}, custom); // replace escaped values and delimiters
const stringified = `module.exports = ${JSON.stringify(config, null, 2).replace(/\\"/g, '"').replace(/['"]%%/g, '').replace(/%%['"]/, '').replace(/\\n/g, '\r\n')}`;
_fsExtra.default.ensureDirSync('./.storybook');
_fsExtra.default.writeFileSync(`./.storybook/main.${commonJs ? 'cjs' : 'js'}`, stringified, {
encoding: 'utf8'
});
}
const frameworkToPreviewParts = {
angular: {
prefix: (0, _tsDedent.default)`
import { setCompodocJson } from "@storybook/addon-docs/angular";
import docJson from "../documentation.json";
setCompodocJson(docJson);
`.trimStart(),
extraParameters: 'docs: { inlineStories: true },'
}
};
function configurePreview(framework, commonJs) {
const {
prefix = '',
extraParameters = ''
} = frameworkToPreviewParts[framework] || {};
const previewPath = `./.storybook/preview.${commonJs ? 'cjs' : 'js'}`; // If the framework template included a preview then we have nothing to do
if (_fsExtra.default.existsSync(previewPath)) {
return;
}
const preview = (0, _tsDedent.default)`
${prefix}
export const parameters = {
actions: { argTypesRegex: "^on[A-Z].*" },
controls: {
matchers: {
color: /(background|color)$/i,
date: /Date$/,
},
},
${extraParameters}
}`.replace(' \n', '').trim();
_fsExtra.default.writeFileSync(previewPath, preview, {
encoding: 'utf8'
});
}
function configure(framework, mainOptions) {
_fsExtra.default.ensureDirSync('./.storybook');
configureMain(mainOptions);
configurePreview(framework, mainOptions.commonJs);
}