Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

CLI: MDX template support #8396

Merged
merged 38 commits into from
Oct 14, 2019
Merged
Show file tree
Hide file tree
Changes from 33 commits
Commits
Show all changes
38 commits
Select commit Hold shift + click to select a range
ee54029
CLI: MDX format option for CRA apps
shilman Oct 10, 2019
d014129
Fix missing import
shilman Oct 11, 2019
be1ab59
Remove unused import
shilman Oct 11, 2019
ad96cb0
CLI: Angular MDX template
shilman Oct 11, 2019
d82a63d
CLI: Ember story-format refactor
shilman Oct 11, 2019
7052500
CLI: HTML story-format refactor
shilman Oct 12, 2019
4cca156
New template directory pattern
shilman Oct 12, 2019
67fbb24
CLI: Backwards compatibility for async fs.rename
shilman Oct 12, 2019
452429b
CLI: HTML template for MDX
shilman Oct 12, 2019
d2376bf
CLI: Marko template CSF refactor
shilman Oct 12, 2019
fb2e607
CLI: Meteor template CSF refactor
shilman Oct 12, 2019
539181b
CLI: Mithril template CSF refactor
shilman Oct 12, 2019
996b7df
CLI: Polymer template CSF refactor
shilman Oct 12, 2019
256556f
CLI: Preact template CSF refactor
shilman Oct 12, 2019
0386298
CLI: RAX template CSF refactor
shilman Oct 12, 2019
277d6c5
CLI: REACT template CSF refactor
shilman Oct 12, 2019
a979df3
CLI: REACT template MDX support
shilman Oct 12, 2019
cb1e01e
CLI: REACT_NATIVE template CSF refactor
shilman Oct 12, 2019
f6629f3
CLI: RIOT template CSF refactor
shilman Oct 12, 2019
dd5eb21
CLI: SFC_VUE template CSF refactor
shilman Oct 12, 2019
6fd1ce3
CLI: REACT add missing presets file
shilman Oct 12, 2019
a5a402c
CLI: SFC_VUE template MDX support
shilman Oct 12, 2019
e9472ff
CLI: HTML template MDX use html docs preset
shilman Oct 12, 2019
ba61fb9
CLI: SVELTE template CSF refactor
shilman Oct 12, 2019
4871fc0
CLI: VUE template CSF refactor
shilman Oct 12, 2019
3a41a0d
CLI: SFC_VUE fixes
shilman Oct 12, 2019
e7364a4
CLI: REACT fixes
shilman Oct 12, 2019
0248e25
CLI: VUE template MDX support
shilman Oct 12, 2019
e64cecf
CLI: WEBPACK_REACT template CSF refactor
shilman Oct 12, 2019
b4df872
CLI: WEBPACK_REACT template MDX support
shilman Oct 12, 2019
4f89930
CLI: Fix DeepScan warnings
shilman Oct 12, 2019
464041e
CLI: Fix SVC_VUE typo
shilman Oct 12, 2019
57d7331
Merge branch 'next' into 7543-cli-mdx
shilman Oct 12, 2019
0845864
CLI: MDX configuration fixes
shilman Oct 13, 2019
fbbb454
CLI: Fix Vue MDX templates
shilman Oct 14, 2019
65200fd
CLI: React preset configureJSX by default
shilman Oct 14, 2019
07cc1f6
CLI: Add -s option for testing alternative story formats (e.g. MDX)
shilman Oct 14, 2019
fe64917
CLI: Fix option parsing in run_tests
shilman Oct 14, 2019
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
5 changes: 3 additions & 2 deletions lib/cli/bin/generate.js
Original file line number Diff line number Diff line change
Expand Up @@ -20,11 +20,12 @@ if (process.argv[1].includes('getstorybook')) {
program
.command('init')
.description('Initialize Storybook into your project.')
.option('-f --force', 'Forcely add storybook')
.option('-f --force', 'Force add storybook')
.option('-s --skip-install', 'Skip installing deps')
.option('-N --use-npm', 'Use npm to install deps')
.option('-p --parser <babel | babylon | flow | ts | tsx>', 'jscodeshift parser')
.option('-t --type <type>', 'Add Storybook for a specific project type')
.option('--story-format <csf | mdx>', 'Generate stories in a specified format')
.option('-y --yes', 'Answer yes to all prompts')
.action(options => initiate(options, pkg));

Expand Down Expand Up @@ -77,7 +78,7 @@ if (process.argv[1].includes('getstorybook')) {
invalidCmd
);
// eslint-disable-next-line
const suggestion = didYouMean(invalidCmd, program.commands.map(cmd => cmd._name));
const suggestion = didYouMean(invalidCmd, program.commands.map(cmd => cmd._name));
if (suggestion) {
logger.log(`\n Did you mean ${suggestion}?`);
}
Expand Down
2 changes: 1 addition & 1 deletion lib/cli/generators/.eslintrc.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ const ignore = 0;
module.exports = {
overrides: [
{
files: '*/template/**',
files: '*/template[-?]*/**',
env: {
browser: true,
},
Expand Down
40 changes: 16 additions & 24 deletions lib/cli/generators/ANGULAR/index.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
import fse from 'fs-extra';
import path from 'path';
import {
isDefaultProjectSet,
Expand All @@ -7,29 +6,29 @@ import {
getAngularAppTsConfigPath,
} from './angular-helpers';
import {
getVersions,
getPackageJson,
getVersionedPackages,
writePackageJson,
getBabelDependencies,
installDependencies,
writeFileAsJson,
copyTemplate,
} from '../../lib/helpers';

async function addDependencies(npmOptions) {
const [
storybookVersion,
notesVersion,
actionsVersion,
linksVersion,
addonsVersion,
] = await getVersions(
npmOptions,
async function addDependencies(npmOptions, { storyFormat }) {
const packages = [
'@storybook/angular',
'@storybook/addon-notes',
'@storybook/addon-actions',
'@storybook/addon-links',
'@storybook/addons'
);
'@storybook/addons',
];

if (storyFormat === 'mdx') {
packages.push('@storybook/addon-docs');
}

const versionedPackages = await getVersionedPackages(npmOptions, ...packages);

const packageJson = getPackageJson();

Expand All @@ -44,14 +43,7 @@ async function addDependencies(npmOptions) {

const babelDependencies = await getBabelDependencies(npmOptions, packageJson);

installDependencies(npmOptions, [
`@storybook/angular@${storybookVersion}`,
`@storybook/addon-notes@${notesVersion}`,
`@storybook/addon-actions@${actionsVersion}`,
`@storybook/addon-links@${linksVersion}`,
`@storybook/addons@${addonsVersion}`,
...babelDependencies,
]);
installDependencies(npmOptions, [...versionedPackages, ...babelDependencies]);
}

function editAngularAppTsConfig() {
Expand All @@ -70,16 +62,16 @@ function editAngularAppTsConfig() {
writeFileAsJson(getAngularAppTsConfigPath(), tsConfigJson);
}

export default async npmOptions => {
export default async (npmOptions, { storyFormat = 'csf' }) => {
if (!isDefaultProjectSet()) {
throw new Error(
'Could not find a default project in your Angular workspace. Add a project and re-run the installation.'
);
}

fse.copySync(path.resolve(__dirname, 'template/'), '.', { overwrite: true });
copyTemplate(__dirname, storyFormat);

await addDependencies(npmOptions);
await addDependencies(npmOptions, { storyFormat });
editAngularAppTsConfig();
editStorybookTsConfig(path.resolve('./.storybook/tsconfig.json'));
};
3 changes: 3 additions & 0 deletions lib/cli/generators/ANGULAR/template-mdx/.storybook/addons.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
import '@storybook/addon-actions/register';
import '@storybook/addon-links/register';
import '@storybook/addon-notes/register';
4 changes: 4 additions & 0 deletions lib/cli/generators/ANGULAR/template-mdx/.storybook/config.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
import { configure } from '@storybook/angular';

// automatically import all files ending in *.stories.ts
configure(require.context('../src/stories', true, /\.stories\.ts$/), module);
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
module.exports = ['@storybook/addon-docs/angular/preset'];
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
{
"extends": "%SET_DURING_SB_INIT%",
"compilerOptions": {
"types": ["node"]
},
"exclude": ["../src/test.ts", "../src/**/*.spec.ts", "../projects/**/*.spec.ts"],
"include": ["../src/**/*", "../projects/**/*"],
"files": ["./typings.d.ts"]
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
declare module '*.md' {
const content: string;
export default content;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
import { Meta, Story, Preview } from '@storybook/addon-docs/blocks';
import { Welcome } from '@storybook/angular/demo';

<Meta title="Welcome" />

# Welcome

This is a test document written in MDX that defines a `Welcome` story wrapped in a `Preview` doc block:

<Preview withToolbar>
<Story name="to Storybook">
{{
component: Welcome,
props: {},
}}
</Story>
</Preview>
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
import { Meta, Story, Preview } from '@storybook/addon-docs/blocks';
import { action } from '@storybook/addon-actions';
import { linkTo } from '@storybook/addon-links';

import { Button } from '@storybook/angular/demo';

<Meta title="Button" />

# Button

This `Button` document defines a few stories:

<Story name="text">
{{
component: Button,
props: {
text: 'Hello Button',
},
}}
</Story>

<Story name="emoji">
{{
component: Button,
props: {
text: '😀 😎 👍 💯',
},
}}
</Story>

<Story name="with some emoji and action">
{{
component: Button,
props: {
text: '😀 😎 👍 💯',
onClick: action('This was clicked OMG'),
},
}}
</Story>

<Story name="button with link to another story">
{{
component: Button,
props: {
text: 'Go to Welcome Story',
onClick: linkTo('Welcome'),
},
}}
</Story>
7 changes: 3 additions & 4 deletions lib/cli/generators/EMBER/index.js
Original file line number Diff line number Diff line change
@@ -1,14 +1,13 @@
import path from 'path';
import fse from 'fs-extra';
import {
getVersions,
getPackageJson,
writePackageJson,
getBabelDependencies,
installDependencies,
copyTemplate,
} from '../../lib/helpers';

export default async npmOptions => {
export default async (npmOptions, { storyFormat = 'csf' }) => {
const [storybookVersion, linksVersion, actionsVersion, addonsVersion] = await getVersions(
npmOptions,
'@storybook/ember',
Expand All @@ -17,7 +16,7 @@ export default async npmOptions => {
'@storybook/addons'
);

fse.copySync(path.resolve(__dirname, 'template/'), '.', { overwrite: true });
copyTemplate(__dirname, storyFormat);

const packageJson = getPackageJson();

Expand Down
18 changes: 11 additions & 7 deletions lib/cli/generators/HTML/index.js
Original file line number Diff line number Diff line change
@@ -1,17 +1,21 @@
import fse from 'fs-extra';
import path from 'path';
import npmInit from '../../lib/npm_init';
import {
getVersion,
getVersionedPackages,
getPackageJson,
writePackageJson,
getBabelDependencies,
installDependencies,
copyTemplate,
} from '../../lib/helpers';

export default async npmOptions => {
const storybookVersion = await getVersion(npmOptions, '@storybook/html');
fse.copySync(path.resolve(__dirname, 'template/'), '.', { overwrite: true });
export default async (npmOptions, { storyFormat = 'csf' }) => {
const packages = ['@storybook/html'];
const versionedPackages = await getVersionedPackages(npmOptions, ...packages);
if (storyFormat === 'mdx') {
packages.push('@storybook/addon-docs');
}

copyTemplate(__dirname, storyFormat);

let packageJson = getPackageJson();
if (!packageJson) {
Expand All @@ -30,5 +34,5 @@ export default async npmOptions => {

const babelDependencies = await getBabelDependencies(npmOptions, packageJson);

installDependencies(npmOptions, [`@storybook/html@${storybookVersion}`, ...babelDependencies]);
installDependencies(npmOptions, [...versionedPackages, ...babelDependencies]);
};
4 changes: 4 additions & 0 deletions lib/cli/generators/HTML/template-mdx/.storybook/config.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
import { configure } from '@storybook/html';

// automatically import all files ending in *.stories.js
configure(require.context('../stories', true, /\.stories\.js$/), module);
1 change: 1 addition & 0 deletions lib/cli/generators/HTML/template-mdx/.storybook/presets.js
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
module.exports = ['@storybook/addon-docs/html/preset'];
21 changes: 21 additions & 0 deletions lib/cli/generators/HTML/template-mdx/stories/index.stories.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
import { Meta, Story, Preview } from '@storybook/addon-docs/blocks';

# HTML MDX Demo

Here's a few sample HTML stories in MDX. Enjoy!

<Meta title="Demo" />

<Preview withToolbar>
<Story name="heading">{() => '<h1>Hello World</h1>'}</Story>
</Preview>

<Story name="button">
{() => {
const btn = document.createElement('button');
btn.type = 'button';
btn.innerText = 'Hello Button';
btn.addEventListener('click', e => console.log(e));
return btn;
}}
</Story>
7 changes: 3 additions & 4 deletions lib/cli/generators/MARKO/index.js
Original file line number Diff line number Diff line change
@@ -1,22 +1,21 @@
import path from 'path';
import fse from 'fs-extra';
import {
getVersions,
getPackageJson,
writePackageJson,
getBabelDependencies,
installDependencies,
copyTemplate,
} from '../../lib/helpers';

export default async npmOptions => {
export default async (npmOptions, { storyFormat = 'csf' }) => {
const [storybookVersion, addonActionVersion, addonKnobsVersion] = await getVersions(
npmOptions,
'@storybook/marko',
'@storybook/addon-actions',
'@storybook/addon-knobs'
);

fse.copySync(path.resolve(__dirname, 'template/'), '.', { overwrite: true });
copyTemplate(__dirname, storyFormat);

const packageJson = getPackageJson();

Expand Down
7 changes: 3 additions & 4 deletions lib/cli/generators/METEOR/index.js
Original file line number Diff line number Diff line change
@@ -1,16 +1,15 @@
import path from 'path';
import fs from 'fs';
import JSON5 from 'json5';
import fse from 'fs-extra';
import {
getVersions,
getPackageJson,
writePackageJson,
getBabelDependencies,
installDependencies,
copyTemplate,
} from '../../lib/helpers';

export default async npmOptions => {
export default async (npmOptions, { storyFormat = 'csf' }) => {
const [
storybookVersion,
actionsVersion,
Expand All @@ -32,7 +31,7 @@ export default async npmOptions => {
'@babel/preset-react'
);

fse.copySync(path.resolve(__dirname, 'template/'), '.', { overwrite: true });
copyTemplate(__dirname, storyFormat);

const packageJson = getPackageJson();
packageJson.devDependencies = packageJson.devDependencies || {};
Expand Down
7 changes: 3 additions & 4 deletions lib/cli/generators/MITHRIL/index.js
Original file line number Diff line number Diff line change
@@ -1,14 +1,13 @@
import path from 'path';
import fse from 'fs-extra';
import {
getVersions,
getPackageJson,
writePackageJson,
getBabelDependencies,
installDependencies,
copyTemplate,
} from '../../lib/helpers';

export default async npmOptions => {
export default async (npmOptions, { storyFormat = 'csf' }) => {
const [storybookVersion, actionsVersion, linksVersion, addonsVersion] = await getVersions(
npmOptions,
'@storybook/mithril',
Expand All @@ -17,7 +16,7 @@ export default async npmOptions => {
'@storybook/addons'
);

fse.copySync(path.resolve(__dirname, 'template/'), '.', { overwrite: true });
copyTemplate(__dirname, storyFormat);

const packageJson = getPackageJson();

Expand Down