diff options
Diffstat (limited to 'packages/gitbook-plugin')
-rw-r--r-- | packages/gitbook-plugin/CONTRIBUTING.md | 11 | ||||
-rw-r--r-- | packages/gitbook-plugin/README.md | 1 | ||||
-rw-r--r-- | packages/gitbook-plugin/package.json | 39 | ||||
-rw-r--r-- | packages/gitbook-plugin/src/cli.js | 84 | ||||
-rw-r--r-- | packages/gitbook-plugin/src/compile.js | 41 | ||||
-rw-r--r-- | packages/gitbook-plugin/src/create.js | 61 | ||||
-rw-r--r-- | packages/gitbook-plugin/src/index.js | 0 | ||||
-rw-r--r-- | packages/gitbook-plugin/template/.eslintignore | 2 | ||||
-rw-r--r-- | packages/gitbook-plugin/template/.eslintrc | 3 | ||||
-rw-r--r-- | packages/gitbook-plugin/template/.gitignore | 31 | ||||
-rw-r--r-- | packages/gitbook-plugin/template/.npmignore | 2 | ||||
-rw-r--r-- | packages/gitbook-plugin/template/index.js | 10 | ||||
-rw-r--r-- | packages/gitbook-plugin/template/src/index.js | 11 |
13 files changed, 296 insertions, 0 deletions
diff --git a/packages/gitbook-plugin/CONTRIBUTING.md b/packages/gitbook-plugin/CONTRIBUTING.md new file mode 100644 index 0000000..19119b6 --- /dev/null +++ b/packages/gitbook-plugin/CONTRIBUTING.md @@ -0,0 +1,11 @@ +Compile the CLI using: + +``` +npm run dist +``` + +Then run the CLI in `lib/`: + +``` +./lib/cli.js +``` diff --git a/packages/gitbook-plugin/README.md b/packages/gitbook-plugin/README.md new file mode 100644 index 0000000..b2dab88 --- /dev/null +++ b/packages/gitbook-plugin/README.md @@ -0,0 +1 @@ +For instructions on how to create plugins, see [GitBook: Create a plugin](toolchain.gitbook.com/api/). diff --git a/packages/gitbook-plugin/package.json b/packages/gitbook-plugin/package.json new file mode 100644 index 0000000..9cdc2f8 --- /dev/null +++ b/packages/gitbook-plugin/package.json @@ -0,0 +1,39 @@ +{ + "name": "gitbook-plugin", + "version": "4.0.0", + "description": "CLI for compiling and testing plugins", + "main": "./lib/index.js", + "dependencies": { + "babel-preset-es2015": "^6.14.0", + "babel-preset-react": "^6.11.1", + "babelify": "^7.3.0", + "browserify": "^13.1.0", + "commander": "^2.9.0", + "fs-extra": "^0.30.0", + "inquirer": "^1.1.3", + "q": "^1.4.1", + "winston": "^2.2.0" + }, + "devDependencies": { + "babel-cli": "^6.14.0", + "babel-preset-es2015": "^6.14.0", + "babel-preset-react": "^6.11.1", + "babel-preset-stage-2": "^6.13.0" + }, + "bin": { + "gitbook-plugin": "./lib/cli.js" + }, + "scripts": { + "dist": "rm -rf lib/ && babel -d lib/ src/ && chmod +x ./lib/cli.js", + "prepublish": "npm run dist" + }, + "repository": { + "type": "git", + "url": "https://github.com/GitbookIO/gitbook.git" + }, + "author": "GitBook Inc. <contact@gitbook.com>", + "license": "Apache-2.0", + "bugs": { + "url": "https://github.com/GitbookIO/gitbook/issues" + } +} diff --git a/packages/gitbook-plugin/src/cli.js b/packages/gitbook-plugin/src/cli.js new file mode 100644 index 0000000..06e421d --- /dev/null +++ b/packages/gitbook-plugin/src/cli.js @@ -0,0 +1,84 @@ +#! /usr/bin/env node + +const program = require('commander'); +const path = require('path'); +const winston = require('winston'); +const inquirer = require('inquirer'); + +const pkg = require('../package.json'); +const compile = require('./compile'); +const create = require('./create'); + +const resolve = (input => path.resolve(process.cwd(), input)); + +program.version(pkg.version); +winston.cli(); + +program + .command('build [input] [output]') + .description('build a browser plugin') + .action(function(input, output, options) { + compile(resolve(input), resolve(output)) + .then( + () => winston.info('Plugin compiled successfully'), + (err) => winston.error('Error: ', err) + ); + }); + +program + .command('create [output]') + .description('create a new plugin') + .action(function(output, options) { + inquirer.prompt([ + { + name: 'title', + message: 'Title (as displayed on GitBook.com):' + }, + { + name: 'name', + message: 'Name (unique identifier for the plugin):' + }, + { + name: 'desc', + message: 'Description:' + }, + { + name: 'github', + message: 'GitHub repository URL:' + }, + { + name: 'categories', + message: 'Categories (as displayed on GitBook.com):', + type: 'checkbox', + choices: [ + 'analytics', + 'search', + 'content', + 'structure', + 'social', + 'visual' + ] + } + ]) + .then(answers => { + output = resolve(output || answers.name); + return create(output, answers); + }) + .then( + () => winston.info(`Plugin created successfully in "${output}"`), + (err) => winston.error('Error: ', err) + ); + }); + +program + .command('test [plugin]') + .description('test specs for a plugin') + .action(function(plugin, options) { + + }); + + +program.parse(process.argv); + +// Display help if no arguments +if (!program.args.length) program.help(); diff --git a/packages/gitbook-plugin/src/compile.js b/packages/gitbook-plugin/src/compile.js new file mode 100644 index 0000000..61c8777 --- /dev/null +++ b/packages/gitbook-plugin/src/compile.js @@ -0,0 +1,41 @@ +const fs = require('fs-extra'); +const Promise = require('q'); +const browserify = require('browserify'); +const babelify = require('babelify'); + +/** + * Compile a plugin to work with "gitbook-core" in the browser. + * @param {String} inputFile + * @param {String} outputFile + * @return {Promise} + */ +function compilePlugin(inputFile, outputFile) { + const d = Promise.defer(); + const b = browserify({ + standalone: 'GitBookPlugin' + }); + + b.add(inputFile); + b.external('react'); + b.external('react-dom'); + b.external('gitbook-core'); + b.transform(babelify, { + presets: [ + require('babel-preset-es2015'), + require('babel-preset-react') + ] + }); + + fs.ensureFileSync(outputFile); + + const output = fs.createWriteStream(outputFile); + + b.bundle() + .pipe(output) + .on('error', (err) => d.reject(err)) + .on('end', () => d.resolve()); + + return d.promise; +} + +module.exports = compilePlugin; diff --git a/packages/gitbook-plugin/src/create.js b/packages/gitbook-plugin/src/create.js new file mode 100644 index 0000000..31edb85 --- /dev/null +++ b/packages/gitbook-plugin/src/create.js @@ -0,0 +1,61 @@ +const fs = require('fs-extra'); +const path = require('path'); +const GITBOOK_VERSION = require('../package.json').version; + +const TEMPLATE_DIR = path.resolve(__dirname, '../template'); + +/** + * Create a new plugin + * @param {String} outputDir + * @param {String} spec.title + * @param {String} spec.name + * @param {String} spec.desc + * @param {Array} spec.keywords + */ +function create(outputDir, spec) { + const pkg = { + 'title': `${spec.title}`, + 'name': `gitbook-plugin-${spec.name}`, + 'description': `${spec.desc}`, + 'version': '0.0.0', + 'main': 'index.js', + 'browser': './_assets/plugin.js', + 'ebook': './_assets/plugin.js', + 'dependencies': { + 'gitbook-core': '^' + GITBOOK_VERSION + }, + 'devDependencies': { + 'gitbook-plugin': '^' + GITBOOK_VERSION, + 'eslint': '3.7.1', + 'eslint-config-gitbook': '1.4.0' + }, + 'engines': { + 'gitbook': '>=4.0.0-alpha.0' + }, + 'scripts': { + 'lint': 'eslint ./', + 'build-website': 'gitbook-plugin build ./src/index.js ./_assets/plugin.js', + 'prepublish': 'npm run build-website', + 'test': 'gitbook-plugin test && npm run lint' + }, + 'homepage': `${spec.github}`, + 'keywords': spec.categories.map(category => `gitbook:${category}`), + 'repository': { + 'type': 'git', + 'url': `${spec.github}.git` + }, + 'bugs': { + 'url': `${spec.github}/issues` + } + }; + + fs.copySync(TEMPLATE_DIR, outputDir, { + clobber: true + }); + + fs.outputJsonSync(path.resolve(outputDir, 'package.json'), pkg, { + spaces: 2 + }); +} + +module.exports = create; diff --git a/packages/gitbook-plugin/src/index.js b/packages/gitbook-plugin/src/index.js new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/packages/gitbook-plugin/src/index.js diff --git a/packages/gitbook-plugin/template/.eslintignore b/packages/gitbook-plugin/template/.eslintignore new file mode 100644 index 0000000..1d35cda --- /dev/null +++ b/packages/gitbook-plugin/template/.eslintignore @@ -0,0 +1,2 @@ +# Plugin assets +_assets/plugin.js diff --git a/packages/gitbook-plugin/template/.eslintrc b/packages/gitbook-plugin/template/.eslintrc new file mode 100644 index 0000000..90359b2 --- /dev/null +++ b/packages/gitbook-plugin/template/.eslintrc @@ -0,0 +1,3 @@ +{ + "extends": "gitbook/plugin" +} diff --git a/packages/gitbook-plugin/template/.gitignore b/packages/gitbook-plugin/template/.gitignore new file mode 100644 index 0000000..ef47881 --- /dev/null +++ b/packages/gitbook-plugin/template/.gitignore @@ -0,0 +1,31 @@ +# Logs +logs +*.log + +# Runtime data +pids +*.pid +*.seed + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage + +# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) +.grunt + +# Compiled binary addons (http://nodejs.org/api/addons.html) +build/Release + +# Dependency directory +# Deployed apps should consider commenting this line out: +# see https://npmjs.org/doc/faq.html#Should-I-check-my-node_modules-folder-into-git +node_modules + +# vim swapfile +*.swp + +# Plugin assets +_assets/plugin.js diff --git a/packages/gitbook-plugin/template/.npmignore b/packages/gitbook-plugin/template/.npmignore new file mode 100644 index 0000000..a0e53cf --- /dev/null +++ b/packages/gitbook-plugin/template/.npmignore @@ -0,0 +1,2 @@ +# Publish assets on NPM +!_assets/plugin.js diff --git a/packages/gitbook-plugin/template/index.js b/packages/gitbook-plugin/template/index.js new file mode 100644 index 0000000..e542ae8 --- /dev/null +++ b/packages/gitbook-plugin/template/index.js @@ -0,0 +1,10 @@ + +module.exports = { + blocks: { + + }, + + hooks: { + + } +}; diff --git a/packages/gitbook-plugin/template/src/index.js b/packages/gitbook-plugin/template/src/index.js new file mode 100644 index 0000000..0fe8869 --- /dev/null +++ b/packages/gitbook-plugin/template/src/index.js @@ -0,0 +1,11 @@ +const GitBook = require('gitbook-core'); + +module.exports = GitBook.createPlugin({ + activate: (dispatch, getState) => { + // Dispatch initialization actions + }, + deactivate: (dispatch, getState) => { + // Dispatch cleanup actions + }, + reduce: (state, action) => state +}); |