Skip to content

Commit

Permalink
Merge pull request #1079 from storybooks/cli/improvement-versioning
Browse files Browse the repository at this point in the history
IMPROVE cli
  • Loading branch information
ndelangen authored May 20, 2017
2 parents 2567684 + a52ab86 commit 4efdb5b
Show file tree
Hide file tree
Showing 7 changed files with 168 additions and 154 deletions.
96 changes: 37 additions & 59 deletions lib/cli/bin/generate.js
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ updateNotifier({

let projectType;

let done = commandLog('Detecting project type');
const done = commandLog('Detecting project type');
try {
projectType = detect({
force: program.force,
Expand All @@ -50,89 +50,67 @@ try {
}
done();

const end = () => {
installDeps(npmOptions);

logger.log('\nTo run your storybook, type:\n');
codeLog([runStorybookCommand]);
logger.log('\nFor more information visit:', chalk.cyan('https://storybooks.js.org'));

// Add a new line for the clear visibility.
logger.log();
};

switch (projectType) {
case types.ALREADY_HAS_STORYBOOK:
logger.log();
paddedLog('There seems to be a storybook already available in this project.');
paddedLog('Apply following command to force:\n');
codeLog(['getstorybook -f']);

// Add a new line for the clear visibility.
logger.log();
break;
case types.REACT_SCRIPTS:
done = commandLog('Adding storybook support to your "Create React App" based project');
require('../generators/REACT_SCRIPTS');
done();

installDeps(npmOptions);

logger.log('\nTo run your storybook, type:\n');
codeLog([runStorybookCommand]);
logger.log('\nFor more information visit:', chalk.cyan('http://getstorybook.io'));
require('../generators/REACT_SCRIPTS')
.then(commandLog('Adding storybook support to your "Create React App" based project'))
.then(end);
break;

case types.REACT:
done = commandLog('Adding storybook support to your "React" app');
require('../generators/REACT');
done();

installDeps(npmOptions);

logger.log('\nTo run your storybook, type:\n');
codeLog([runStorybookCommand]);
logger.log('\nFor more information visit:', chalk.cyan('http://getstorybook.io'));
require('../generators/REACT')
.then(commandLog('Adding storybook support to your "React" app'))
.then(end);
break;

case types.REACT_NATIVE:
done = commandLog('Adding storybook support to your "React Native" app');
require('../generators/REACT_NATIVE');
done();

installDeps(npmOptions);

logger.log('\nTo run your storybook, type:\n');
codeLog([runStorybookCommand]);
logger.log('\nFor more information visit:', chalk.cyan('http://getstorybook.io'));
require('../generators/REACT_NATIVE')
.then(commandLog('Adding storybook support to your "React Native" app'))
.then(end);
break;

case types.METEOR:
done = commandLog('Adding storybook support to your "Meteor" app');
require('../generators/METEOR');
done();

installDeps(npmOptions);

logger.log('\nTo run your storybook, type:\n');
codeLog([runStorybookCommand]);
logger.log('\nFor more information visit:', chalk.cyan('http://getstorybook.io'));
require('../generators/METEOR')
.then(commandLog('Adding storybook support to your "Meteor" app'))
.then(end);
break;

case types.WEBPACK_REACT:
done = commandLog('Adding storybook support to your "Webpack React" app');
require('../generators/WEBPACK_REACT');
done();

installDeps(npmOptions);

logger.log('\nTo run your storybook, type:\n');
codeLog([runStorybookCommand]);
logger.log('\nFor more information visit:', chalk.cyan('http://getstorybook.io'));
require('../generators/WEBPACK_REACT')
.then(commandLog('Adding storybook support to your "Webpack React" app'))
.then(end);
break;

case types.REACT_PROJECT:
done = commandLog('Adding storybook support to your "React" library');
require('../generators/REACT');
done();

installDeps(npmOptions);

logger.log('\nTo run your storybook, type:\n');
codeLog([runStorybookCommand]);
logger.log('\nFor more information visit:', chalk.cyan('http://getstorybook.io'));
require('../generators/REACT')
.then(commandLog('Adding storybook support to your "React" library'))
.then(end);
break;

default:
paddedLog(`Unsupported Project type. (code: ${projectType})`);
paddedLog('Visit http://getstorybook.io for more information.');
}
paddedLog('Visit https://storybooks.js.org for more information.');

// Add a new line for the clear visibility.
logger.log();
// Add a new line for the clear visibility.
logger.log();
}
119 changes: 72 additions & 47 deletions lib/cli/generators/METEOR/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,51 +4,76 @@ const path = require('path');
const fs = require('fs');
const sh = require('shelljs');
const JSON5 = require('json5');
const latestVersion = require('latest-version');

mergeDirs(path.resolve(__dirname, 'template/'), '.', 'overwrite');

const packageJson = helpers.getPackageJson();
packageJson.devDependencies = packageJson.devDependencies || {};
packageJson.scripts = packageJson.scripts || {};
packageJson.dependencies = packageJson.dependencies || {};

// create or update .babelrc
let babelrc = null;
if (fs.existsSync('.babelrc')) {
const babelrcContent = fs.readFileSync('.babelrc', 'utf8');
babelrc = JSON5.parse(babelrcContent);
babelrc.plugins = babelrc.plugins || [];

if (babelrc.plugins.indexOf('babel-root-slash-import') < 0) {
babelrc.plugins.push('babel-root-slash-import');
packageJson.devDependencies['babel-root-slash-import'] = '^1.1.0';
}
} else {
babelrc = {
presets: ['es2015', 'es2016', 'react', 'stage-1'],
plugins: ['babel-root-slash-import'],
};

packageJson.devDependencies['babel-preset-es2015'] = '^6.9.0';
packageJson.devDependencies['babel-preset-es2016'] = '^6.11.3';
packageJson.devDependencies['babel-preset-react'] = '^6.11.1';
packageJson.devDependencies['babel-preset-stage-1'] = '^6.13.0';
packageJson.devDependencies['babel-root-slash-import'] = '^1.1.0';
}

fs.writeFileSync('.babelrc', JSON.stringify(babelrc, null, 2), 'utf8');

// write the new package.json.
packageJson.devDependencies['@storybook/react'] = '^2.21.0';
packageJson.scripts['storybook'] = 'start-storybook -p 6006';
packageJson.scripts['build-storybook'] = 'build-storybook';

// add react packages.
if (!packageJson.dependencies.react) {
packageJson.dependencies.react = '^15.3.0';
}
if (!packageJson.dependencies['react-dom']) {
packageJson.dependencies['react-dom'] = '^15.3.0';
}

helpers.writePackageJson(packageJson);
module.exports = Promise.all([
latestVersion('@storybook/react'),
latestVersion('react'),
latestVersion('react-dom'),
latestVersion('babel-preset-es2015'),
latestVersion('babel-preset-es2016'),
latestVersion('babel-preset-react'),
latestVersion('babel-preset-stage-1'),
latestVersion('babel-root-slash-import'),
]).then(
(
[
storybookVersion,
reactVersion,
reactDomVersion,
presetEs2015Version,
presetEs2016Version,
presetReactVersion,
presetStage1Version,
rootSlashImportVersion,
],
) => {
mergeDirs(path.resolve(__dirname, 'template/'), '.', 'overwrite');

const packageJson = helpers.getPackageJson();
packageJson.devDependencies = packageJson.devDependencies || {};
packageJson.scripts = packageJson.scripts || {};
packageJson.dependencies = packageJson.dependencies || {};

// create or update .babelrc
let babelrc = null;
if (fs.existsSync('.babelrc')) {
const babelrcContent = fs.readFileSync('.babelrc', 'utf8');
babelrc = JSON5.parse(babelrcContent);
babelrc.plugins = babelrc.plugins || [];

if (babelrc.plugins.indexOf('babel-root-slash-import') < 0) {
babelrc.plugins.push('babel-root-slash-import');
packageJson.devDependencies['babel-root-slash-import'] = `^${rootSlashImportVersion}`;
}
} else {
babelrc = {
presets: ['es2015', 'es2016', 'react', 'stage-1'],
plugins: ['babel-root-slash-import'],
};

packageJson.devDependencies['babel-preset-es2015'] = `^${presetEs2015Version}`;
packageJson.devDependencies['babel-preset-es2016'] = `^${presetEs2016Version}`;
packageJson.devDependencies['babel-preset-react'] = `^${presetReactVersion}`;
packageJson.devDependencies['babel-preset-stage-1'] = `^${presetStage1Version}`;
packageJson.devDependencies['babel-root-slash-import'] = `^${rootSlashImportVersion}`;
}

fs.writeFileSync('.babelrc', JSON.stringify(babelrc, null, 2), 'utf8');

// write the new package.json.
packageJson.devDependencies['@storybook/react'] = `^${storybookVersion}`;
packageJson.scripts['storybook'] = 'start-storybook -p 6006';
packageJson.scripts['build-storybook'] = 'build-storybook';

// add react packages.
if (!packageJson.dependencies.react) {
packageJson.dependencies.react = `^${reactVersion}`;
}
if (!packageJson.dependencies['react-dom']) {
packageJson.dependencies['react-dom'] = `^${reactDomVersion}`;
}

helpers.writePackageJson(packageJson);
},
);
20 changes: 11 additions & 9 deletions lib/cli/generators/REACT/index.js
Original file line number Diff line number Diff line change
@@ -1,17 +1,19 @@
const mergeDirs = require('merge-dirs').default;
const helpers = require('../../lib/helpers');
const path = require('path');
const latestVersion = require('latest-version');

mergeDirs(path.resolve(__dirname, 'template/'), '.', 'overwrite');
module.exports = latestVersion('@storybook/react').then(version => {
mergeDirs(path.resolve(__dirname, 'template/'), '.', 'overwrite');

const packageJson = helpers.getPackageJson();
const packageJson = helpers.getPackageJson();

// TODO: Get the latest version of storybook here.
packageJson.devDependencies = packageJson.devDependencies || {};
packageJson.devDependencies['@storybook/react'] = '^2.21.0';
packageJson.devDependencies = packageJson.devDependencies || {};
packageJson.devDependencies['@storybook/react'] = `^${version}`;

packageJson.scripts = packageJson.scripts || {};
packageJson.scripts['storybook'] = 'start-storybook -p 6006';
packageJson.scripts['build-storybook'] = 'build-storybook';
packageJson.scripts = packageJson.scripts || {};
packageJson.scripts['storybook'] = 'start-storybook -p 6006';
packageJson.scripts['build-storybook'] = 'build-storybook';

helpers.writePackageJson(packageJson);
helpers.writePackageJson(packageJson);
});
36 changes: 19 additions & 17 deletions lib/cli/generators/REACT_NATIVE/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,26 +2,28 @@ const mergeDirs = require('merge-dirs').default;
const helpers = require('../../lib/helpers');
const path = require('path');
const shell = require('shelljs');
const latestVersion = require('latest-version');

// copy all files from the template directory to project directory
mergeDirs(path.resolve(__dirname, 'template/'), '.', 'overwrite');
module.exports = latestVersion('@storybook/react-native').then(version => {
// copy all files from the template directory to project directory
mergeDirs(path.resolve(__dirname, 'template/'), '.', 'overwrite');

// set correct project name on entry files if possible
const dirname = shell.ls('-d', 'ios/*.xcodeproj').stdout;
const projectName =
dirname && dirname.slice('ios/'.length, dirname.length - '.xcodeproj'.length - 1);
if (projectName) {
shell.sed('-i', '%APP_NAME%', projectName, 'storybook/index.ios.js');
shell.sed('-i', '%APP_NAME%', projectName, 'storybook/index.android.js');
}
// set correct project name on entry files if possible
const dirname = shell.ls('-d', 'ios/*.xcodeproj').stdout;
const projectName =
dirname && dirname.slice('ios/'.length, dirname.length - '.xcodeproj'.length - 1);
if (projectName) {
shell.sed('-i', '%APP_NAME%', projectName, 'storybook/index.ios.js');
shell.sed('-i', '%APP_NAME%', projectName, 'storybook/index.android.js');
}

const packageJson = helpers.getPackageJson();
const packageJson = helpers.getPackageJson();

// TODO: Get the latest version of storybook here.
packageJson.devDependencies = packageJson.devDependencies || {};
packageJson.devDependencies['@storybook/react-native'] = '^2.0.0';
packageJson.devDependencies = packageJson.devDependencies || {};
packageJson.devDependencies['@storybook/react-native'] = `^${version}`;

packageJson.scripts = packageJson.scripts || {};
packageJson.scripts['storybook'] = 'storybook start -p 7007';
packageJson.scripts = packageJson.scripts || {};
packageJson.scripts['storybook'] = 'storybook start -p 7007';

helpers.writePackageJson(packageJson);
helpers.writePackageJson(packageJson);
});
26 changes: 14 additions & 12 deletions lib/cli/generators/REACT_SCRIPTS/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,20 +2,22 @@ const mergeDirs = require('merge-dirs').default;
const helpers = require('../../lib/helpers');
const path = require('path');
const fs = require('fs');
const latestVersion = require('latest-version');

mergeDirs(path.resolve(__dirname, 'template/'), '.', 'overwrite');
module.exports = latestVersion('@storybook/react').then(version => {
mergeDirs(path.resolve(__dirname, 'template/'), '.', 'overwrite');

const packageJson = helpers.getPackageJson();
const packageJson = helpers.getPackageJson();

// TODO: Get the latest version of storybook here.
packageJson.devDependencies['@storybook/react'] = '^2.21.0';
packageJson.scripts['storybook'] = 'start-storybook -p 9009';
packageJson.scripts['build-storybook'] = 'build-storybook';
packageJson.devDependencies['@storybook/react'] = `^${version}`;
packageJson.scripts['storybook'] = 'start-storybook -p 9009';
packageJson.scripts['build-storybook'] = 'build-storybook';

if (fs.existsSync(path.resolve('./public'))) {
// has a public folder and add support to it.
packageJson.scripts['storybook'] += ' -s public';
packageJson.scripts['build-storybook'] += ' -s public';
}
if (fs.existsSync(path.resolve('./public'))) {
// has a public folder and add support to it.
packageJson.scripts['storybook'] += ' -s public';
packageJson.scripts['build-storybook'] += ' -s public';
}

helpers.writePackageJson(packageJson);
helpers.writePackageJson(packageJson);
});
20 changes: 11 additions & 9 deletions lib/cli/generators/WEBPACK_REACT/index.js
Original file line number Diff line number Diff line change
@@ -1,17 +1,19 @@
const mergeDirs = require('merge-dirs').default;
const helpers = require('../../lib/helpers');
const path = require('path');
const latestVersion = require('latest-version');

mergeDirs(path.resolve(__dirname, 'template/'), '.', 'overwrite');
module.exports = latestVersion('@storybook/react').then(version => {
mergeDirs(path.resolve(__dirname, 'template/'), '.', 'overwrite');

const packageJson = helpers.getPackageJson();
const packageJson = helpers.getPackageJson();

// TODO: Get the latest version of storybook here.
packageJson.devDependencies = packageJson.devDependencies || {};
packageJson.devDependencies['@storybook/react'] = '^2.21.0';
packageJson.devDependencies = packageJson.devDependencies || {};
packageJson.devDependencies['@storybook/react'] = `^${version}`;

packageJson.scripts = packageJson.scripts || {};
packageJson.scripts['storybook'] = 'start-storybook -p 6006';
packageJson.scripts['build-storybook'] = 'build-storybook';
packageJson.scripts = packageJson.scripts || {};
packageJson.scripts['storybook'] = 'start-storybook -p 6006';
packageJson.scripts['build-storybook'] = 'build-storybook';

helpers.writePackageJson(packageJson);
helpers.writePackageJson(packageJson);
});
Loading

0 comments on commit 4efdb5b

Please sign in to comment.