Skip to content

Commit

Permalink
Move kibana-plugin-helpers to kbn-plugin-helpers package (#16565)
Browse files Browse the repository at this point in the history
* initial commit

Original commit: elastic/kibana-plugin-helpers@06c603d

* simplify bin scripts and get them working

Original commit: elastic/kibana-plugin-helpers@1455f09

* [npm] finish package.json

Original commit: elastic/kibana-plugin-helpers@c7b0e9d

* [readme] inception

Original commit: elastic/kibana-plugin-helpers@5caa197

* [npm] rename

Original commit: elastic/kibana-plugin-helpers@9fb16dd

* [package.json] fix typo

Original commit: elastic/kibana-plugin-helpers@f135485

* [npm] do not commit npm logs

Original commit: elastic/kibana-plugin-helpers@a1bf750

* version 5.0.0-beta1

Original commit: elastic/kibana-plugin-helpers@5abf8ee

* Fix start cmd on Windows

Original commit: elastic/kibana-plugin-helpers@7718cef

* 5.0.0-beta2

Original commit: elastic/kibana-plugin-helpers@4e70c3e

* added license files for better visiblity

Original commit: elastic/kibana-plugin-helpers@a3297e2

* group task related files

Original commit: elastic/kibana-plugin-helpers@4a8ccce

* [build] place the plugin contents under the kibana directory

Original commit: elastic/kibana-plugin-helpers@0a0f5fe

* [start] send extra args to the kibana process

Original commit: elastic/kibana-plugin-helpers@ce943ca

* 5.0.0

Original commit: elastic/kibana-plugin-helpers@42163ce

* Correctly bundle dependencies if there is only one

Fixes elastic/kibana-plugin-helpers#8

Original commit: elastic/kibana-plugin-helpers@c46b2ca

* [test:server] include Kibana node_modules/.bin in path when running server tests

Original commit: elastic/kibana-plugin-helpers@bbda801

* 5.0.1-pre

Original commit: elastic/kibana-plugin-helpers@2d26645

* Pass pluginId and plugin-path values through correctly (elastic/kibana-plugin-helpers#11)

Fixes elastic/kibana-plugin-helpers#10

Original commit: elastic/kibana-plugin-helpers@74defe4

* 5.0.1-pre2

Original commit: elastic/kibana-plugin-helpers@0fd7d07

* [build] ask for kibana version when set to "kibana"

Original commit: elastic/kibana-plugin-helpers@5fe34c4

* 5.0.1-pre3

Original commit: elastic/kibana-plugin-helpers@2e0e101

* Running main, corrected build, checking for no dependencies (elastic/kibana-plugin-helpers#15)

* Updated if check if there are no dependencies

* Now running main()

* Build now uses the correct parameter.

Original commit: elastic/kibana-plugin-helpers@7cf31d2

* fix lint error

Original commit: elastic/kibana-plugin-helpers@06af5c3

* support defining an alternate plugin root

Original commit: elastic/kibana-plugin-helpers@0e4d4fa

* add an optional callback to the build action

Original commit: elastic/kibana-plugin-helpers@6a1012f

* run vinyl.src in the plugin.root directory

Original commit: elastic/kibana-plugin-helpers@8f3081b

* add basic test for the build action

Original commit: elastic/kibana-plugin-helpers@52230f6

* include nvmrc file for development

Original commit: elastic/kibana-plugin-helpers@f51115d

* add circle-ci config file

Original commit: elastic/kibana-plugin-helpers@80505e1

* 5.0.1

Original commit: elastic/kibana-plugin-helpers@e42d134

* use a promise instead of a callback to track task completion

Original commit: elastic/kibana-plugin-helpers@c6dacf3

* 5.0.1-patch1

Original commit: elastic/kibana-plugin-helpers@d49bb6e

* do not pass stdin to sub tasks, fixes elastic/kibana-plugin-helpers#19

Original commit: elastic/kibana-plugin-helpers@f872954

* 5.0.1-patch2

Original commit: elastic/kibana-plugin-helpers@a754ef5

* Use json files to override default config values (elastic/kibana-plugin-helpers#21)

* read json overrides, mix into defaults

* rename plugin config helper

* use the plugin config in start

Original commit: elastic/kibana-plugin-helpers@4cfbe28

* allow browser tests to be runOnce

Original commit: elastic/kibana-plugin-helpers@ede52ec

* add a test/all task

Original commit: elastic/kibana-plugin-helpers@9b7c15c

* add test command to execute test/all

Original commit: elastic/kibana-plugin-helpers@e096ac5

* remove use of spread and default assignment

Original commit: elastic/kibana-plugin-helpers@17532f0

* pass run method into tasks

don't reach into lib for it

Original commit: elastic/kibana-plugin-helpers@d92d2e9

* use --dev flag for browser dev mode

Original commit: elastic/kibana-plugin-helpers@a790fdd

* fix default command, no more use of call

Original commit: elastic/kibana-plugin-helpers@fe13b98

* Move require calls outside of task functions (elastic/kibana-plugin-helpers#23)

* move require calls outside of task functions

* fix default command value

Original commit: elastic/kibana-plugin-helpers@846855e

* add --include options to test:server

Original commit: elastic/kibana-plugin-helpers@d3b5e24

* split and concat and included server test paths

Original commit: elastic/kibana-plugin-helpers@e7dffb6

* add plugins option to browser tests

used to pass your own testsBundle.pluginIds to the test runner

Original commit: elastic/kibana-plugin-helpers@d370d74

* if plugins are specified, use the option value instead of the default

Original commit: elastic/kibana-plugin-helpers@d610c9c

* assign args in argument passing code

minor syntax change

Original commit: elastic/kibana-plugin-helpers@ce77d07

* make server test files an argument

Original commit: elastic/kibana-plugin-helpers@b043b42

* add not about custom tests executiong to the readme/help

Original commit: elastic/kibana-plugin-helpers@139221e

* Separate the task runner and the command line parser (elastic/kibana-plugin-helpers#25)

* remove conditionl require in runner

add tasks module to load all tasks, throw if task does not exist

* change task signatures and action handlers

- tasks get plugin, run, and an options object
- action handler controls what goes into each task
- taskRunner wrapper moves the command object to the first argument

* change test command signature

allow files to be passed in, and pass all options to test:server and test:browser

* simplify the task runner

* fix typo in unknownOptions

* expose the task runner as the module's main

this way tasks can be run programatically without going through a cli parser

* add tests for task runner

* remove file passing for testAll

* add serverTestPaths to the plugin config

useful for overriding the value via a config file

* [config] plugin.serverTestPaths -> plugin.serverTestPatterns

Original commit: elastic/kibana-plugin-helpers@82af4df

* 5.1.0

Original commit: elastic/kibana-plugin-helpers@6dd1407

* update the readme

Original commit: elastic/kibana-plugin-helpers@c650c45

* append build info to package.json

Original commit: elastic/kibana-plugin-helpers@504fd07

* format the package.json file

Original commit: elastic/kibana-plugin-helpers@c474820

* node4 support: const -> var

Original commit: elastic/kibana-plugin-helpers@19b607d

* fix cli parsing of --dev flag

Original commit: elastic/kibana-plugin-helpers@3aa37c2

* 5.1.1

Original commit: elastic/kibana-plugin-helpers@ad9a8e8

* Enable custom builds (elastic/kibana-plugin-helpers#27)

* only modify root package.json file

previously this was modifying every package.json from node_modules as well

* refactor the build task

export the build, define helpers outside of the task

* allow custom kibana and build versions

both can be passed via flags

* allow custom build globs to be specified

* move build into its own module

* add simple option parsing tests

* update readme

* move dependency file appending into the action

* put source and target into variables

* move config file loading into a module

* refactor test_server_action slightly

be more explicit about the files option overwriting the plugin settings

* move default build patterns to plugin config

allows the setting to be overridden via the config file

* fix dirname on relative includes

trim any leading '../' off the path when moving it into the build target

* move node_module dirs into plugin_config module, use existing promises

* rename file_config => config_file

Original commit: elastic/kibana-plugin-helpers@743e4a3

* return the result of running the action

Original commit: elastic/kibana-plugin-helpers@9b819ee

* Allow custom build target via --build-destination flag (elastic/kibana-plugin-helpers#30)

* pass buildTarget into createBuild

allow override from options

* add cli option to override build destination

--build-destination

* fix tests

* resolve build destination from plugin.root

this allows both relative and absolute paths to be used

* add short option

* update the help

Original commit: elastic/kibana-plugin-helpers@6c9fb34

* 5.2.0

Original commit: elastic/kibana-plugin-helpers@8c2a547

* Use npm/yarn to install build dependencies (elastic/kibana-plugin-helpers#28)

* remove scripts and devDependencies from package

these are only useful in development, and serve no purpose in the build

* refactor the package rewriter

* clean up the buildTarget before building

* run npm install after build creation

* break apart the create_build module

* add create_package modules

call it from within the build_action

* add flag to skip package zip creation

* rename skip-package flag to skip-archive

* rename rewritePackage to rewritePackageJson

* include lock and shrinkwrap files if they exist

* add test for skipping zip creation

* add some tests to build creation

Original commit: elastic/kibana-plugin-helpers@ef6b9c6

* 6.0.0

Original commit: elastic/kibana-plugin-helpers@9ee7b62

* Update URLs in package.json (elastic/kibana-plugin-helpers#31)

The package.json URLs are still referencing @spalger's version, whilst development and collaboration happens on @elastic's version

Original commit: elastic/kibana-plugin-helpers@1f322c1

* 6.0.1

Original commit: elastic/kibana-plugin-helpers@8eae537

* [tasks/test/browser] fix --kbnServer.tests_bundle flag

Original commit: elastic/kibana-plugin-helpers@12e7552

* 6.0.2

Original commit: elastic/kibana-plugin-helpers@ff9d402

* change let to var (elastic/kibana-plugin-helpers#35)

allow helpers to run on pre-6.0 node

Original commit: elastic/kibana-plugin-helpers@91de9a8

* Fix running tasks on Windows (elastic/kibana-plugin-helpers#37)

* create windows cmd wrapper

* use windows cmd wrapper on browser tests

* be explicit about the mocha command location

* use windows cmd wrapper on server tests

* use windows cmd wrapper on build

default to using npm as well

Original commit: elastic/kibana-plugin-helpers@35f80a0

* 6.0.3

Original commit: elastic/kibana-plugin-helpers@b4da11f

* fix `build` task when yarn is not installed

Original commit: elastic/kibana-plugin-helpers@d48808f

* 6.0.4

Original commit: elastic/kibana-plugin-helpers@0c0ee17

* Added helpers, KIBANA_ROOT environment override (elastic/kibana-plugin-helpers#41)

* run is now a named export, added helpers for interacting with the kibana repo

* [config] override the kibana root config with KIBANA_ROOT envvar

Original commit: elastic/kibana-plugin-helpers@54a38cd

* bump to version 7 snapshot

Original commit: elastic/kibana-plugin-helpers@0c1b2c1

* [utils] use actual plugin config (with defaults)

Original commit: elastic/kibana-plugin-helpers@f3bfdb2

* require node 6 (elastic/kibana-plugin-helpers#42)

* switch to .node-version file

* require and validate node version 6+

Original commit: elastic/kibana-plugin-helpers@85655f2

* Bump eslint rules, update code to match rules (elastic/kibana-plugin-helpers#43)

* bump @elastic/eslint-config-kibana and deps

* eslint --fix

* fix unused vars

some exceptions for tests

* move eslint-config-kibana to dev

* rename create_package function

* make .node-version looser, match internal checks

Original commit: elastic/kibana-plugin-helpers@6fac14b

* 7.0.0

Original commit: elastic/kibana-plugin-helpers@2ff10e0

* commit yarn.lock file

Original commit: elastic/kibana-plugin-helpers@22bc67e

* [utils/babelRegister] add support for changes in #13973

Original commit: elastic/kibana-plugin-helpers@13f30fb

* 7.0.1

Original commit: elastic/kibana-plugin-helpers@abb9989

* Feat: add translations to default build source paths (elastic/kibana-plugin-helpers#48)

* feat: add translations path to build

included by default, to better match what's in the elastic products and even the plugin template

also add a translations path to the mock plugin for tests

* chore: add script to run tests with linting

Original commit: elastic/kibana-plugin-helpers@9871a4b

* chore: add yarn.lock file to repo

Original commit: elastic/kibana-plugin-helpers@4108fe6

* v7.0.2

Original commit: elastic/kibana-plugin-helpers@dba9da1

* Feat: add includePlugins setting (elastic/kibana-plugin-helpers#49)

* observe includePlugins setting

* fix: move resolve up to config parser

this ensures that the path is resolved relative to the plugin root

Original commit: elastic/kibana-plugin-helpers@fd07d61

* Fix: readme include docs (elastic/kibana-plugin-helpers#50)

* chore: add a simple version compat chart

* chore: document the settings and how to use them

* chore: use icon for license info

* chore: use matching badge for circleci status

Original commit: elastic/kibana-plugin-helpers@1f39e48

* v7.1.0

Original commit: elastic/kibana-plugin-helpers@11238b2

* fix: read package file instead of using require

require uses a cache, so if the package.json file was changed before running build, the changes won't exist in the build runtime. using fs.readFileSync instead ensures that the information read from package.json is current.

Original commit: elastic/kibana-plugin-helpers@f78e891

* v7.1.1

Original commit: elastic/kibana-plugin-helpers@b489c76

* Fix: Package use build target (elastic/kibana-plugin-helpers#52)

* fix: pass build target into package task

use the build target for the zip output

* chore: change up the npm scripts

* chore: add create package tests

* chore: update eslint deps

* chore: fix linting issues, add engines

Original commit: elastic/kibana-plugin-helpers@51058fb

* v7.1.2

Original commit: elastic/kibana-plugin-helpers@e314c21

* Use scripts/kibana instead of bin if available (elastic/kibana-plugin-helpers#53)

* Use scripts/kibana instead of bin if available

* semicolons

* Don't fallback to legacy bin/kibana start method

* chore: add 8.x version to compat chart

Original commit: elastic/kibana-plugin-helpers@fc72de5

* v8.0.0

Original commit: elastic/kibana-plugin-helpers@d538b32

* chore: add kibanaRoot setting to readme

Original commit: elastic/kibana-plugin-helpers@3769efd

* [createToolingLog] update require path for toolingLog (elastic/kibana-plugin-helpers#54)

Original commit: elastic/kibana-plugin-helpers@d968819

* v8.0.1

Original commit: elastic/kibana-plugin-helpers@2663bef

* Add support for passing in node options via environment variable (elastic/kibana-plugin-helpers#56)

* Add support for passing in node options via environment variable

* Split node options

* semicolon

Original commit: elastic/kibana-plugin-helpers@3fc4ec0

* Update yarn.lock

Original commit: elastic/kibana-plugin-helpers@b3d62e5

* v8.1.0

Original commit: elastic/kibana-plugin-helpers@fb979ff

* Deprecate specifying kibana root location (elastic/kibana-plugin-helpers#59)

Original commit: elastic/kibana-plugin-helpers@385fded

* Remove kibanaRoot option, require kibana-extra (elastic/kibana-plugin-helpers#58)

* Remove kibanaRoot option, require kibana-extra

* Check location of Kibana on postinstall

* Fix eslint

* Remove 'process.env.KIBANA_ROOT'

Original commit: elastic/kibana-plugin-helpers@3511054

* v9.0.0

Original commit: elastic/kibana-plugin-helpers@8d5af74

* [npm] upgrade gulp-zip (elastic/kibana-plugin-helpers#61)

Original commit: elastic/kibana-plugin-helpers@94e7530

* chore: ignore yarn.lock file

Original commit: elastic/kibana-plugin-helpers@9cad57c

* [npm] upgraded eslint-related deps (elastic/kibana-plugin-helpers#62)

* [npm] upgraded eslint-related deps

* [npm] reflect peer deps from @elastic/eslint-config-kibana

Original commit: elastic/kibana-plugin-helpers@1add265

* v9.0.1

Original commit: elastic/kibana-plugin-helpers@140024a

* [config] throw if config file has a syntax error (elastic/kibana-plugin-helpers#65)

Original commit: elastic/kibana-plugin-helpers@487dd70

* v9.0.2

Original commit: elastic/kibana-plugin-helpers@3bd57fb

* [kbn-plugin-helpers] remove redundant configs

* [kbn-plugin-helpers/yarn] add yarn.lock file

* run kbn-plugin-helpers tests on ci

* [plugin-helpers] remove keywords from package.json

* [plugin-helpers] rely on kibana eslint

* [plugin-helpers/eslint] remove unused vars

* [eslint] allow kebab-case in any bin directory

* [plugin-helpers] replace last few uses of old package name
  • Loading branch information
spalger authored Feb 8, 2018
1 parent 32f50b0 commit 5ecdaa7
Show file tree
Hide file tree
Showing 46 changed files with 3,789 additions and 3 deletions.
2 changes: 1 addition & 1 deletion .eslintrc.js
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ module.exports = {

// files not transpiled by babel can't using things like object-spread
{
files: ['.eslintrc.js'],
files: ['.eslintrc.js', 'packages/kbn-plugin-helpers/**/*.js'],
rules: {
'prefer-object-spread/prefer-object-spread': 'off',
},
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ To get started copy and paste this example to `test/functional/config.js`:
["source","js"]
-----------
import { resolve } from 'path';
import { resolveKibanaPath } from '@elastic/plugin-helpers';
import { resolveKibanaPath } from '@kbn/plugin-helpers';
import { MyServiceProvider } from './services/my_service';
import { MyAppPageProvider } from './services/my_app_page;
Expand Down
64 changes: 64 additions & 0 deletions packages/kbn-plugin-helpers/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
# kibana-plugin-helpers

[![Apache License](https://img.shields.io/badge/license-apache_2.0-a9215a.svg)](https://raw.githubusercontent.com/elastic/kibana-plugin-helpers/master/LICENSE)
[![CircleCI](https://img.shields.io/circleci/project/github/elastic/kibana-plugin-helpers.svg)](https://circleci.com/gh/elastic/kibana-plugin-helpers/tree/master)

Just some helpers for kibana plugin devs.

This simple CLI has several tasks that plugin devs can run from to easily debug, test, or package kibana plugins.

```sh
$ plugin-helpers help

Usage: plugin-helpers [options] [command]

Commands:

start Start kibana and have it include this plugin
build [options] [files...] Build a distributable archive
test Run the server and browser tests
test:browser [options] Run the browser tests in a real web browser
test:server [files...] Run the server tests using mocha

Options:

-h, --help output usage information
-V, --version output the version number

```

## Versions

Plugin Helpers | Kibana
-------------- | ------
9.x | 7.0+ (`kibanaRoot` setting removed from `plugin-helpers`)
8.x | 7.0+
7.x | 4.6.x to 6.x (node 6+ only)
6.x | 4.6.x to 6.x
5.x | 4.x

## Configuration

`plugin-helpers` accepts a number of settings, which can be specified at runtime, or included in a `.kibana-plugin-helpers.json` file if you'd like to bundle those settings with your project.

It will also observe a `.kibana-plugin-helpers.dev.json`, much like Kibana does, which we encourage you to add to your `.gitignore` file and use for local settings that you don't intend to share. These "dev" settings will override any settings in the normal json config.

All configuration setting listed below can simply can be included in the json config files. If you intend to inline the command, you will need to convert the setting to snake case (ie. `skipArchive` becomes `--skip-archive`).

## Global settings

### Settings for `start`

Setting | Description
------- | -----------
`includePlugins` | Intended to be used in a config file, an array of additional plugin paths to include, absolute or relative to the plugin root
`*` | Any options/flags included will be passed unmodified to the Kibana binary

### Settings for `build`

Setting | Description
------- | -----------
`skipArchive` | Don't create the zip file, leave the build path alone
`buildDestination` | Target path for the build output, absolute or relative to the plugin root
`buildVersion` | Version for the build output
`kibanaVersion` | Kibana version for the build output (added to package.json)
9 changes: 9 additions & 0 deletions packages/kbn-plugin-helpers/bin/plugin-helpers.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
#!/usr/bin/env node

const nodeMajorVersion = parseFloat(process.version.replace(/^v(\d+)\..+/, '$1'));
if (nodeMajorVersion < 6) {
console.error('FATAL: kibana-plugin-helpers requires node 6+');
process.exit(1);
}

require('../cli');
87 changes: 87 additions & 0 deletions packages/kbn-plugin-helpers/cli.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
const program = require('commander');

const pkg = require('./package.json');
const run = require('./lib/run');
const docs = require('./lib/docs');
const enableCollectingUnknownOptions = require('./lib/enable_collecting_unknown_options');

function taskRunner(fn) {
return function actionWrapper() {
const args = [].slice.apply(arguments);
const command = args.pop();
fn.apply(null, [command].concat(args));
};
}

program
.version(pkg.version);

enableCollectingUnknownOptions(
program
.command('start')
.description('Start kibana and have it include this plugin')
.on('--help', docs('start'))
.action(taskRunner(function (command) {
run('start', {
flags: command.unknownOptions
});
}))
);

program
.command('build [files...]')
.description('Build a distributable archive')
.on('--help', docs('build'))
.option('--skip-archive', 'Don\'t create the zip file, leave the build path alone')
.option('-d, --build-destination <path>', 'Target path for the build output, absolute or relative to the plugin root')
.option('-b, --build-version <version>', 'Version for the build output')
.option('-k, --kibana-version <version>', 'Kibana version for the build output')
.action(taskRunner(function (command, files) {
run('build', {
buildDestination: command.buildDestination,
buildVersion: command.buildVersion,
kibanaVersion: command.kibanaVersion,
skipArchive: Boolean(command.skipArchive),
files: files,
});
}));

program
.command('test')
.description('Run the server and browser tests')
.on('--help', docs('test/all'))
.action(taskRunner(function () {
run('testAll');
}));

program
.command('test:browser')
.description('Run the browser tests in a real web browser')
.option('--dev', 'Enable dev mode, keeps the test server running')
.option('-p, --plugins <plugin-ids>', 'Manually specify which plugins\' test bundles to run')
.on('--help', docs('test/browser'))
.action(taskRunner(function (command) {
run('testBrowser', {
dev: Boolean(command.dev),
plugins: command.plugins,
});
}));

program
.command('test:server [files...]')
.description('Run the server tests using mocha')
.on('--help', docs('test/server'))
.action(taskRunner(function (command, files) {
run('testServer', {
files: files
});
}));

program
.command('postinstall')
.action(taskRunner(function () {
run('postinstall');
}));

program
.parse(process.argv);
49 changes: 49 additions & 0 deletions packages/kbn-plugin-helpers/lib/config_file.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
const resolve = require('path').resolve;
const readFileSync = require('fs').readFileSync;

const configFiles = [ '.kibana-plugin-helpers.json', '.kibana-plugin-helpers.dev.json' ];
const configCache = {};

module.exports = function (root) {
if (!root) root = process.cwd();

if (configCache[root]) {
return configCache[root];
}

// config files to read from, in the order they are merged together
let config = configCache[root] = {};

configFiles.forEach(function (configFile) {
try {
const content = JSON.parse(readFileSync(resolve(root, configFile)));
config = Object.assign(config, content);
} catch (e) {
// rethrow error unless it's complaining about file not existing
if (e.code !== 'ENOENT') {
throw e;
}
}
});

const deprecationMsg = 'has been removed from `@kbn/plugin-helpers`. ' +
'During development your plugin must be located in `../kibana-extra/{pluginName}` ' +
'relative to the Kibana directory to work with this package.\n';

if (config.kibanaRoot) {
throw new Error(
'The `kibanaRoot` config option ' + deprecationMsg
);
}
if (process.env.KIBANA_ROOT) {
throw new Error(
'The `KIBANA_ROOT` environment variable ' + deprecationMsg
);
}

// use resolve to ensure correct resolution of paths
const { includePlugins } = config;
if (includePlugins) config.includePlugins = includePlugins.map(path => resolve(root, path));

return config;
};
18 changes: 18 additions & 0 deletions packages/kbn-plugin-helpers/lib/docs.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
const resolve = require('path').resolve;
const readFileSync = require('fs').readFileSync;

function indent(txt, n) {
const space = (new Array(n + 1)).join(' ');
return space + txt.split('\n').join('\n' + space);
}

module.exports = function docs(name) {
const md = readFileSync(resolve(__dirname, '../tasks', name, 'README.md'), 'utf8');

return function () {
console.log('\n Docs:');
console.log('');
console.log(indent(md, 4));
console.log('');
};
};
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@

module.exports = function enableCollectingUnknownOptions(command) {
const origParse = command.parseOptions;
command.allowUnknownOption();
command.parseOptions = function (argv) {
const opts = origParse.call(this, argv);
this.unknownOptions = opts.unknown;
return opts;
};
};
13 changes: 13 additions & 0 deletions packages/kbn-plugin-helpers/lib/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
const run = require('./run');
const utils = require('./utils');

module.exports = function () {
console.error(
'running tasks with the default export of @kbn/plugin-helpers is deprecated.' +
'use `require(\'@kbn/plugin-helpers\').run()` instead'
);

return run.apply(this, arguments);
};

Object.assign(module.exports, { run: run }, utils);
44 changes: 44 additions & 0 deletions packages/kbn-plugin-helpers/lib/plugin_config.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
const resolve = require('path').resolve;
const statSync = require('fs').statSync;
const readFileSync = require('fs').readFileSync;
const configFile = require('./config_file');

module.exports = function (root) {
if (!root) root = process.cwd();

const pkg = JSON.parse(readFileSync(resolve(root, 'package.json')));
const config = configFile(root);

const buildSourcePatterns = [
'package.json',
'index.js',
'{lib,public,server,webpackShims,translations}/**/*',
];

// add shrinkwrap and lock files, if they exist
['npm-shrinkwrap.json', 'yarn.lock']
.forEach(function (file) {
if (fileExists(resolve(root, file))) {
buildSourcePatterns.push(file);
}
});

return Object.assign({
root: root,
kibanaRoot: resolve(root, '../../kibana'),
serverTestPatterns: ['server/**/__tests__/**/*.js'],
buildSourcePatterns: buildSourcePatterns,
id: pkg.name,
pkg: pkg,
version: pkg.version,
}, config);
};

function fileExists(path) {
try {
const stat = statSync(path);
return stat.isFile();
} catch (e) {
return false;
}
}
10 changes: 10 additions & 0 deletions packages/kbn-plugin-helpers/lib/run.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
const pluginConfig = require('./plugin_config');
const tasks = require('./tasks');

module.exports = function run(name, options) {
const action = tasks[name];
if (!action) throw new Error('Invalid task: "' + name + '"');

const plugin = pluginConfig();
return action(plugin, run, options);
};
30 changes: 30 additions & 0 deletions packages/kbn-plugin-helpers/lib/run.spec.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
/*eslint-env jest*/

const testTask = jest.fn();
const plugin = { id: 'testPlugin' };

jest.mock('./plugin_config', () => () => plugin);
jest.mock('./tasks', () => {
return { testTask };
});
const run = require('./run');

describe('task runner', () => {
beforeEach(() => jest.resetAllMocks());

it('throw given an invalid task', function () {
const invalidTaskName = 'thisisnotavalidtasknameandneverwillbe';
const runner = () => run(invalidTaskName);

expect(runner).toThrow(/invalid task/i);
});

it('runs specified task with plugin and runner', function () {
run('testTask');

const args = testTask.mock.calls[0];
expect(testTask.mock.calls).toHaveLength(1);
expect(args[0]).toBe(plugin);
expect(args[1]).toBe(run);
});
});
15 changes: 15 additions & 0 deletions packages/kbn-plugin-helpers/lib/tasks.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
const buildTask = require('../tasks/build');
const startTask = require('../tasks/start');
const testAllTask = require('../tasks/test/all');
const testBrowserTask = require('../tasks/test/browser');
const testServerTask = require('../tasks/test/server');
const postinstallTask = require('../tasks/postinstall');

module.exports = {
build: buildTask,
start: startTask,
testAll: testAllTask,
testBrowser: testBrowserTask,
testServer: testServerTask,
postinstall: postinstallTask
};
Loading

0 comments on commit 5ecdaa7

Please sign in to comment.