Skip to content

Commit

Permalink
Merge pull request #7 from rocjs/next
Browse files Browse the repository at this point in the history
v2.0.0
  • Loading branch information
dlmr authored Sep 22, 2016
2 parents 5ed5bc0 + 4655c5d commit 09837fe
Show file tree
Hide file tree
Showing 27 changed files with 369 additions and 305 deletions.
14 changes: 14 additions & 0 deletions .eslintrc
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
{
"extends": "airbnb-base",

"rules": {
"indent": [2, 4, { "SwitchCase": 1 }],
"max-len": [2, 120, 4],
"no-warning-comments": 1,

"import/order": [2, { "groups": ["builtin", "external", "internal", "parent", "sibling", "index"], "newlines-between": "always"}],
"import/newline-after-import": [2],

"global-require": 0
}
}
3 changes: 3 additions & 0 deletions .travis.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
language: node_js
node_js:
- stable
1 change: 0 additions & 1 deletion LICENSE
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@

The MIT License (MIT)

Copyright (c) 2016 Verdens Gang AS
Expand Down
54 changes: 46 additions & 8 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
# roc-internal-dev
# roc-internal-dev [![Travis][build-badge]][build] [![npm package][npm-badge]][npm]

Internal tool for building Roc packages.
Internal tool for building Roc extensions.

## How to use
Add this package as a dev dependency to the Roc package that you want to manage. Then you can connect npm scripts to the commands that this package exposes.
Add this module as a dev dependency to the Roc extension that you want to manage. Then you can connect npm scripts to the commands that this module exposes.

You can use the short name `rid` if you don't want to write out the entire name.
You can use the short name `rid` as an alternative to `roc-internal-dev` if you don't want to write out the entire name.

```js
"scripts": {
Expand All @@ -14,13 +14,45 @@ You can use the short name `rid` if you don't want to write out the entire name.
}
```

## Commands
[Please see here for all of the commands](/docs/Commands.md).
### Tip
A useful tip is to add an alias to rid that makes it easier to work with in the project.

```js
"scripts": {
"start": "rid",
// ...
}
```

It is then possible to run all possible commands using `npm start <command>`.

## Future
We should create a template that can be used to quickly create new packages/plugins.
## Get correct documentation
It is important to add the extension itself to the `package.json` for `roc-internal-dev` to be able to generate documentation.

__Example__
```json
{
"name": "roc-package-module",
...
"roc": {
"packages": [
"./lib/index.js"
]
}
}
```

## Available Commands
[Please see here for all of the commands](/docs/Commands.md).

# Changelog
## 2.0.0
- Updated to work with the latest version of `roc`.
- Now uses `extensions/` instead of `packages/` for the extensions.
- Changed from running `lint-alias` to `lint` on release by default and added option to use alias with `--use-alias`.
- Updated to use ESLint 3.0.
- Added new command, `rnm`, for removing `node_modules` in extensions directory.

## 1.3.2
- Fixed regression from the previous release.

Expand Down Expand Up @@ -48,3 +80,9 @@ We should create a template that can be used to quickly create new packages/plug

## 1.0.0
- Initial version

[build-badge]: https://img.shields.io/travis/rocjs/roc-internal-dev/master.svg?style=flat-square
[build]: https://travis-ci.org/rocjs/roc-internal-dev

[npm-badge]: https://img.shields.io/npm/v/@rocjs/roc-internal-dev.svg?style=flat-square
[npm]: https://www.npmjs.org/package/@rocjs/roc-internal-dev
7 changes: 0 additions & 7 deletions bin.js

This file was deleted.

14 changes: 14 additions & 0 deletions bin/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
#! /usr/bin/env node

const runCli = require('roc').runCli;

const packageJSON = require('../package.json');
const commands = require('../commands');

runCli({
info: {
version: packageJSON.version,
name: Object.keys(packageJSON.bin)[0],
},
commands,
});
1 change: 0 additions & 1 deletion commands/build-watch.js

This file was deleted.

36 changes: 18 additions & 18 deletions commands/build.js
Original file line number Diff line number Diff line change
@@ -1,24 +1,24 @@
const babel = require.resolve('babel-cli/bin/babel');

const babelPlugins = [
require.resolve('babel-plugin-transform-object-rest-spread'),
require.resolve('babel-plugin-transform-es2015-spread'),
require.resolve('babel-plugin-transform-es2015-function-name'),
require.resolve('babel-plugin-transform-es2015-sticky-regex'),
require.resolve('babel-plugin-transform-es2015-unicode-regex'),
require.resolve('babel-plugin-transform-es2015-parameters'),
require.resolve('babel-plugin-transform-es2015-destructuring'),
require.resolve('babel-plugin-transform-es2015-modules-commonjs'),
require.resolve('babel-plugin-transform-export-extensions'),
].join(',');
'babel-plugin-transform-object-rest-spread',
'babel-plugin-transform-es2015-spread',
'babel-plugin-transform-es2015-function-name',
'babel-plugin-transform-es2015-sticky-regex',
'babel-plugin-transform-es2015-unicode-regex',
'babel-plugin-transform-es2015-parameters',
'babel-plugin-transform-es2015-destructuring',
'babel-plugin-transform-es2015-modules-commonjs',
'babel-plugin-transform-export-extensions',
].map((plugin) => require.resolve(plugin)).join(',');

const babelCommand = (package, extra) => {
extra = extra ? ' ' + extra : '';
return `${babel} ${package.path}/src --out-dir ${package.path}/lib --source-maps --plugins ${babelPlugins}${extra}`;
}
const babelCommand = (extension, extra) => {
const additional = extra ? ` ${extra}` : '';
return `${babel} ${extension.path}/src --out-dir ${extension.path}/lib ` +
` --source-maps --plugins ${babelPlugins}${additional}`;
};

module.exports = (packages, extra) => {
return packages
.map((package) => babelCommand(package, extra))
module.exports = (extensions, extra) =>
extensions
.map((extension) => babelCommand(extension, extra))
.join(' & ');
}
1 change: 1 addition & 0 deletions commands/buildWatch.js
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
module.exports = (extensions) => require('./build')(extensions, '--watch');
7 changes: 3 additions & 4 deletions commands/clean.js
Original file line number Diff line number Diff line change
@@ -1,9 +1,8 @@
const rimraf = require.resolve('rimraf/bin');

const clean = (package) => `${rimraf} ${package.path}/lib ${package.path}/esdocs`;
const clean = (extension) => `${rimraf} ${extension.path}/lib ${extension.path}/esdocs`;

module.exports = (packages) => {
return packages
module.exports = (extensions) =>
extensions
.map(clean)
.join(' & ');
}
83 changes: 22 additions & 61 deletions commands/docs.js
Original file line number Diff line number Diff line change
@@ -1,63 +1,24 @@
const writeFile = require('fs').writeFile;
const join = require('path').join;

const toHide = Object.keys(require('roc').roc.config.commands).join(',');

const getConfiguration = require('roc').getConfiguration;

const rocPackage = require('roc');

const settingsDocs =
'node bin/index.js markdown-settings > ./docs/Settings.md';
const commandsDocs =
`node bin/index.js markdown-commands --hide-commands ${toHide} /dev/docs/Settings.md > ./docs/Commands.md`;
const hooksDocs =
'node bin/index.js markdown-hooks > ./docs/Hooks.md';
const actionsDocs =
'node bin/index.js markdown-actions > ./docs/Actions.md';

const generateDocumentation = (path) =>
`cd ${path} && ${settingsDocs} && ${commandsDocs} && ${hooksDocs} && ${actionsDocs}`;

const writeFilePromise = (file) => {
return new Promise((resolve, reject) => {
writeFile(file.path, file.content, (err) => {
if (err) {
return reject(err);
}

return resolve();
});
});
}

module.exports = (packages) => () => {
return Promise.all(packages.map((package) => {
const rocCommandObject = getConfiguration(package.path);

return Promise.all([
{
content: rocPackage.generateMarkdownActions(package.name, rocCommandObject.actions),
path: `${package.path}/docs/Actions.md`
}, {
content: rocPackage.generateMarkdownHooks(package.name, rocCommandObject.hooks),
path: `${package.path}/docs/Hooks.md`
}, {
content: rocPackage.generateMarkdownDocumentation(package.name, rocCommandObject.packageConfig, rocCommandObject.metaObject),
path: `${package.path}/docs/Settings.md`
}, {
content: rocPackage.generateMarkdownCommands(
package.name,
rocCommandObject.packageConfig,
rocCommandObject.metaObject,
`/packages/${package.folder}/docs/Settings.md`
),
path: `${package.path}/docs/Commands.md`
}
].map(writeFilePromise));
})).then(() => console.log('Done'))
const chalk = require('chalk');
const buildContext = require('roc/lib/context/buildContext').default;
const generateDocumentation = require('roc/lib/documentation/markdown/generateDocumentation').default;
const log = require('roc/log/default/small');

module.exports = (extensions) => () =>
extensions.reduce((promise, extension) =>
promise.then(() => {
log.log(`Generating documentation for ${chalk.cyan(extension.name)}`);
return generateDocumentation({
commandObject: {
context: buildContext(extension.path, undefined, false),
directory: extension.path,
},
extension: true,
});
}), Promise.resolve())
.then(() => {
log.log();
log.success('Documentation created for all extensions!');
})
.catch((err) => {
console.log('An error happened', err)
process.exit(1);
log.error('An error happened when generating documentation', err);
});
};
7 changes: 3 additions & 4 deletions commands/esdocs.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,9 @@ const esdoc = require.resolve('esdoc/out/src/ESDocCLI.js');

const esdocConfig = require.resolve('../configuration/esdoc.js');

const esdocs = (package) => `cd ${package.path} && ${esdoc} -c ${esdocConfig}`;
const esdocs = (extension) => `cd ${extension.path} && ${esdoc} -c ${esdocConfig}`;

module.exports = (packages) => {
return packages
module.exports = (extensions) =>
extensions
.map(esdocs)
.join(' & ');
}
78 changes: 78 additions & 0 deletions commands/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
const fs = require('fs');

const roc = require('roc');
const converters = require('roc/converters');
const validators = require('roc/validators');

const extensions =
!roc.folderExists(`${process.cwd()}/extensions`) ? [] :
fs.readdirSync(`${process.cwd()}/extensions`)
.map((extension) => {
if (roc.fileExists(`${process.cwd()}/extensions/${extension}/package.json`)) {
return {
folder: extension,
path: `${process.cwd()}/extensions/${extension}`,
name: require(`${process.cwd()}/extensions/${extension}/package.json`).name,
};
}
return undefined;
})
.filter((extension) => extension !== undefined);

module.exports = {
build: {
command: require('./build')(extensions),
description: 'Builds project',
},
'build:watch': {
command: require('./buildWatch')(extensions),
description: 'Builds project in watch mode',
},
clean: {
command: require('./clean')(extensions),
description: 'Cleans generated files',
},
docs: {
command: require('./docs')(extensions),
description: 'Generates markdown documentation',
},
esdocs: {
command: require('./esdocs')(extensions),
description: 'Generates ESDoc',
},
link: {
command: require('./link')(extensions),
description: 'Links up the project',
arguments: {
modules: {
description: 'Modules that should be linked into the extensions in extensions/',
converter: converters.toArray(),
validator: validators.isArray(),
},
},
},
'lint:alias': {
command: require('./lintAlias')(extensions),
description: 'Run local lint inside packages',
},
lint: {
command: require('./lint')(extensions),
description: 'Runs lint',
},
release: {
command: require('./release')(extensions),
description: 'Run release script',
options: {
'use-alias': {
description: 'If lint:alias should be used over the default lint when doing releases',
default: false,
converter: converters.toBoolean,
validator: validators.isBoolean,
},
},
},
rnm: {
command: require('./removeNodeModules')(extensions),
description: 'Removes node_modules folders in extensions/',
},
};
Loading

0 comments on commit 09837fe

Please sign in to comment.