Browse Source

Baseline for Neutrino v5

v5.0.0-beta
Eli Perelman 8 years ago
parent
commit
96ce5bf79a
  1. 4
      package.json
  2. 4
      packages/neutrino-lint-base/package.json
  3. 2
      packages/neutrino-lint-base/src/index.js
  4. 6
      packages/neutrino-preset-airbnb-base/package.json
  5. 3
      packages/neutrino-preset-airbnb-base/src/index.js
  6. 10
      packages/neutrino-preset-jest/package.json
  7. 63
      packages/neutrino-preset-jest/src/index.js
  8. 453
      packages/neutrino-preset-jest/yarn.lock
  9. 5
      packages/neutrino-preset-karma/package.json
  10. 16
      packages/neutrino-preset-karma/src/index.js
  11. 47
      packages/neutrino-preset-karma/yarn.lock
  12. 4
      packages/neutrino-preset-mocha/package.json
  13. 30
      packages/neutrino-preset-mocha/src/index.js
  14. 4
      packages/neutrino-preset-node/package.json
  15. 77
      packages/neutrino-preset-node/src/index.js
  16. 6
      packages/neutrino-preset-react/package.json
  17. 89
      packages/neutrino-preset-react/src/index.js
  18. 4
      packages/neutrino-preset-web/package.json
  19. 50
      packages/neutrino-preset-web/src/index.js
  20. 50
      packages/neutrino/bin/neutrino
  21. 2
      packages/neutrino/package.json
  22. 125
      packages/neutrino/src/neutrino.js
  23. 110
      yarn.lock

4
package.json

@ -1,6 +1,6 @@
{
"name": "neutrino-dev",
"version": "4.2.0",
"version": "5.0.0",
"private": true,
"author": "Eli Perelman <eli@eliperelman.com>",
"license": "MPL-2.0",
@ -29,6 +29,6 @@
"gitbook-plugin-github": "^2.0.0",
"gitbook-plugin-npmsearchlist": "^1.0.0",
"gitbook-plugin-prism": "^2.1.0",
"oao": "^0.5.7"
"oao": "^0.7.2"
}
}

4
packages/neutrino-lint-base/package.json

@ -1,6 +1,6 @@
{
"name": "neutrino-lint-base",
"version": "4.3.1",
"version": "5.0.0",
"description": "Neutrino preset starter for adding building ESLint-based presets",
"main": "src/index.js",
"keywords": [
@ -20,7 +20,7 @@
"lodash.clonedeep": "^4.5.0"
},
"peerDependencies": {
"neutrino": "^4.0.0"
"neutrino": "^5.0.0"
},
"homepage": "https://neutrino.js.org",
"bugs": "https://github.com/mozilla-neutrino/neutrino-dev/issues"

2
packages/neutrino-lint-base/src/index.js

@ -41,7 +41,7 @@ module.exports = neutrino => {
config.resolve.modules.add(MODULES);
config.resolveLoader.modules.add(MODULES);
neutrino.custom.eslintrc = () => {
neutrino.eslintrc = () => {
const options = clone(config.module.rule('lint').loaders.get('eslint').options);
options.extends = options.baseConfig.extends;

6
packages/neutrino-preset-airbnb-base/package.json

@ -1,6 +1,6 @@
{
"name": "neutrino-preset-airbnb-base",
"version": "4.3.1",
"version": "5.0.0",
"description": "Neutrino preset for adding Airbnb's base JS ESLint config, following the Airbnb styleguide",
"main": "src/index.js",
"keywords": [
@ -15,10 +15,10 @@
"dependencies": {
"deepmerge": "^1.3.2",
"eslint-config-airbnb-base": "^11.1.0",
"neutrino-lint-base": "^4.3.1"
"neutrino-lint-base": "^5.0.0"
},
"peerDependencies": {
"neutrino": "^4.0.0"
"neutrino": "^5.0.0"
},
"homepage": "https://neutrino.js.org",
"bugs": "https://github.com/mozilla-neutrino/neutrino-dev/issues"

3
packages/neutrino-preset-airbnb-base/src/index.js

@ -1,8 +1,7 @@
const lint = require('neutrino-lint-base');
const merge = require('deepmerge');
module.exports = neutrino => {
lint(neutrino);
neutrino.use(require('neutrino-lint-base'));
neutrino.config.module
.rule('lint')
.loader('eslint', props => merge(props, {

10
packages/neutrino-preset-jest/package.json

@ -1,6 +1,6 @@
{
"name": "neutrino-preset-jest",
"version": "4.3.0",
"version": "5.0.0",
"description": "Neutrino preset for testing Neutrino projects with Jest",
"main": "src/index.js",
"keywords": [
@ -12,15 +12,17 @@
"license": "MPL-2.0",
"repository": "mozilla-neutrino/neutrino-dev",
"peerDependencies": {
"neutrino": "^4.0.0"
"neutrino": "^5.0.0"
},
"dependencies": {
"babel-core": "^6.23.1",
"babel-plugin-transform-es2015-modules-commonjs": "^6.23.0",
"babel-preset-jest": "^18.0.0",
"babel-preset-jest": "^19.0.0",
"deepmerge": "^1.3.2",
"eslint-plugin-jest": "^19.0.1",
"jest-cli": "^18.1.0"
"jest": "^19.0.2",
"jest-cli": "^19.0.2",
"lodash.clonedeep": "^4.5.0"
},
"homepage": "https://neutrino.js.org",
"bugs": "https://github.com/mozilla-neutrino/neutrino-dev/issues"

63
packages/neutrino-preset-jest/src/index.js

@ -3,51 +3,55 @@ const fs = require('fs');
const path = require('path');
const merge = require('deepmerge');
const os = require('os');
const clone = require('lodash.clonedeep');
const pkg = require(path.join(process.cwd(), 'package.json'));
function normalizeJestConfig(neutrino, args) {
const jest = neutrino.custom.jest;
const config = neutrino.config;
function normalizeJestOptions(jestOptions, config, args) {
const options = clone(jestOptions);
const aliases = config.options.get('alias') || {};
Object
.keys(aliases)
.map(key => jest.moduleNameMapper[key] = path.join('<rootDir>', aliases[key]));
.map(key => options.moduleNameMapper[key] = path.join('<rootDir>', aliases[key]));
jest.moduleFileExtensions = [...new Set([
...jest.moduleFileExtensions,
options.moduleFileExtensions = [...new Set([
...options.moduleFileExtensions,
...config.resolve.extensions.values().map(e => e.replace('.', ''))
])];
jest.moduleDirectories = [...new Set([
...jest.moduleDirectories,
options.moduleDirectories = [...new Set([
...options.moduleDirectories,
...config.resolve.modules.values()
])];
jest.globals = Object.assign({
options.globals = Object.assign({
BABEL_OPTIONS: config.module.rule('compile').loaders.get('babel').options
}, jest.globals);
}, options.globals);
if (args.files.length) {
jest.testRegex = args.files.join('|').replace('.', '\\.');
options.testRegex = args.files.join('|').replace('.', '\\.');
}
return Object.assign({}, jest, pkg.jest);
return options;
}
module.exports = neutrino => {
neutrino.custom.jest = {
bail: true,
transform: {
"\\.(js|jsx)$": require.resolve('./transformer')
const jestOptions = merge.all([
{
bail: true,
transform: {
"\\.(js|jsx)$": require.resolve('./transformer')
},
roots: [path.join(process.cwd(), 'test')],
testRegex: '(_test|_spec|\\.test|\\.spec)\\.jsx?$',
moduleFileExtensions: ['js', 'jsx'],
moduleDirectories: [path.join(__dirname, '../node_modules')],
moduleNameMapper: {
'\\.(jpg|jpeg|png|gif|eot|otf|webp|svg|ttf|woff|woff2|mp4|webm|wav|mp3|m4a|aac|oga)$': require.resolve('./file-mock'),
'\\.(css|less|sass)$': require.resolve('./style-mock')
}
},
testPathDirs: [path.join(process.cwd(), 'test')],
testRegex: '(_test|_spec|\\.test|\\.spec)\\.jsx?$',
moduleFileExtensions: ['js', 'jsx'],
moduleDirectories: [path.join(__dirname, '../node_modules')],
moduleNameMapper: {
'\\.(jpg|jpeg|png|gif|eot|otf|webp|svg|ttf|woff|woff2|mp4|webm|wav|mp3|m4a|aac|oga)$': require.resolve('./file-mock'),
'\\.(css|less|sass)$': require.resolve('./style-mock')
}
};
pkg.jest,
neutrino.options.jest
]);
neutrino.config.module
.rule('compile')
@ -75,14 +79,15 @@ module.exports = neutrino => {
}
neutrino.on('test', args => {
const jest = normalizeJestConfig(neutrino, args);
const options = normalizeJestOptions(jestOptions, neutrino.config, args);
const configFile = path.join(os.tmpdir(), 'config.json');
return new Promise((resolve, reject) => {
const jestCliOptions = { config: configFile, coverage: args.coverage, watch: args.watch };
const cliOptions = { config: configFile, coverage: args.coverage, watch: args.watch };
const dir = options.rootDir || process.cwd();
fs.writeFileSync(configFile, `${JSON.stringify(jest, null, 2)}\n`);
runCLI(jestCliOptions, jest.rootDir || process.cwd(), result => {
fs.writeFileSync(configFile, `${JSON.stringify(options, null, 2)}\n`);
runCLI(cliOptions, dir, result => {
if (result.numFailedTests || result.numFailedTestSuites) {
reject();
} else {

453
packages/neutrino-preset-jest/yarn.lock

@ -40,10 +40,23 @@ ansi-styles@^2.2.1:
version "2.2.1"
resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe"
ansi-styles@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.0.0.tgz#5404e93a544c4fec7f048262977bebfe3155e0c1"
dependencies:
color-convert "^1.0.0"
ansicolors@~0.2.1:
version "0.2.1"
resolved "https://registry.yarnpkg.com/ansicolors/-/ansicolors-0.2.1.tgz#be089599097b74a5c9c4a84a0cdbcdb62bd87aef"
anymatch@^1.3.0:
version "1.3.0"
resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-1.3.0.tgz#a3e52fa39168c825ff57b0248126ce5a8ff95507"
dependencies:
arrify "^1.0.0"
micromatch "^2.1.5"
append-transform@^0.4.0:
version "0.4.0"
resolved "https://registry.yarnpkg.com/append-transform/-/append-transform-0.4.0.tgz#d76ebf8ca94d276e247a36bad44a4b74ab611991"
@ -74,7 +87,7 @@ array-unique@^0.2.1:
version "0.2.1"
resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53"
arrify@^1.0.1:
arrify@^1.0.0, arrify@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d"
@ -124,31 +137,7 @@ babel-code-frame@^6.22.0:
esutils "^2.0.2"
js-tokens "^3.0.0"
babel-core@^6.0.0, babel-core@^6.22.0:
version "6.22.1"
resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.22.1.tgz#9c5fd658ba1772d28d721f6d25d968fc7ae21648"
dependencies:
babel-code-frame "^6.22.0"
babel-generator "^6.22.0"
babel-helpers "^6.22.0"
babel-messages "^6.22.0"
babel-register "^6.22.0"
babel-runtime "^6.22.0"
babel-template "^6.22.0"
babel-traverse "^6.22.1"
babel-types "^6.22.0"
babylon "^6.11.0"
convert-source-map "^1.1.0"
debug "^2.1.1"
json5 "^0.5.0"
lodash "^4.2.0"
minimatch "^3.0.2"
path-is-absolute "^1.0.0"
private "^0.1.6"
slash "^1.0.0"
source-map "^0.5.0"
babel-core@^6.23.0, babel-core@^6.23.1:
babel-core@^6.0.0, babel-core@^6.23.0, babel-core@^6.23.1:
version "6.23.1"
resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.23.1.tgz#c143cb621bb2f621710c220c5d579d15b8a442df"
dependencies:
@ -172,19 +161,7 @@ babel-core@^6.23.0, babel-core@^6.23.1:
slash "^1.0.0"
source-map "^0.5.0"
babel-generator@^6.18.0, babel-generator@^6.22.0:
version "6.22.0"
resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.22.0.tgz#d642bf4961911a8adc7c692b0c9297f325cda805"
dependencies:
babel-messages "^6.22.0"
babel-runtime "^6.22.0"
babel-types "^6.22.0"
detect-indent "^4.0.0"
jsesc "^1.3.0"
lodash "^4.2.0"
source-map "^0.5.0"
babel-generator@^6.23.0:
babel-generator@^6.18.0, babel-generator@^6.23.0:
version "6.23.0"
resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.23.0.tgz#6b8edab956ef3116f79d8c84c5a3c05f32a74bc5"
dependencies:
@ -197,13 +174,6 @@ babel-generator@^6.23.0:
source-map "^0.5.0"
trim-right "^1.0.1"
babel-helpers@^6.22.0:
version "6.22.0"
resolved "https://registry.yarnpkg.com/babel-helpers/-/babel-helpers-6.22.0.tgz#d275f55f2252b8101bff07bc0c556deda657392c"
dependencies:
babel-runtime "^6.22.0"
babel-template "^6.22.0"
babel-helpers@^6.23.0:
version "6.23.0"
resolved "https://registry.yarnpkg.com/babel-helpers/-/babel-helpers-6.23.0.tgz#4f8f2e092d0b6a8808a4bde79c27f1e2ecf0d992"
@ -219,11 +189,13 @@ babel-jest@^18.0.0:
babel-plugin-istanbul "^3.0.0"
babel-preset-jest "^18.0.0"
babel-messages@^6.22.0:
version "6.22.0"
resolved "https://registry.yarnpkg.com/babel-messages/-/babel-messages-6.22.0.tgz#36066a214f1217e4ed4164867669ecb39e3ea575"
babel-jest@^19.0.0:
version "19.0.0"
resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-19.0.0.tgz#59323ced99a3a84d359da219ca881074ffc6ce3f"
dependencies:
babel-runtime "^6.22.0"
babel-core "^6.0.0"
babel-plugin-istanbul "^4.0.0"
babel-preset-jest "^19.0.0"
babel-messages@^6.23.0:
version "6.23.0"
@ -240,10 +212,22 @@ babel-plugin-istanbul@^3.0.0:
object-assign "^4.1.0"
test-exclude "^3.3.0"
babel-plugin-istanbul@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-4.0.0.tgz#36bde8fbef4837e5ff0366531a2beabd7b1ffa10"
dependencies:
find-up "^2.1.0"
istanbul-lib-instrument "^1.4.2"
test-exclude "^4.0.0"
babel-plugin-jest-hoist@^18.0.0:
version "18.0.0"
resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-18.0.0.tgz#4150e70ecab560e6e7344adc849498072d34e12a"
babel-plugin-jest-hoist@^19.0.0:
version "19.0.0"
resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-19.0.0.tgz#4ae2a04ea612a6e73651f3fde52c178991304bea"
babel-plugin-transform-es2015-modules-commonjs@^6.23.0:
version "6.23.0"
resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.23.0.tgz#cba7aa6379fb7ec99250e6d46de2973aaffa7b92"
@ -266,17 +250,11 @@ babel-preset-jest@^18.0.0:
dependencies:
babel-plugin-jest-hoist "^18.0.0"
babel-register@^6.22.0:
version "6.22.0"
resolved "https://registry.yarnpkg.com/babel-register/-/babel-register-6.22.0.tgz#a61dd83975f9ca4a9e7d6eff3059494cd5ea4c63"
babel-preset-jest@^19.0.0:
version "19.0.0"
resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-19.0.0.tgz#22d67201d02324a195811288eb38294bb3cac396"
dependencies:
babel-core "^6.22.0"
babel-runtime "^6.22.0"
core-js "^2.4.0"
home-or-tmp "^2.0.0"
lodash "^4.2.0"
mkdirp "^0.5.1"
source-map-support "^0.4.2"
babel-plugin-jest-hoist "^19.0.0"
babel-register@^6.23.0:
version "6.23.0"
@ -297,17 +275,7 @@ babel-runtime@^6.22.0:
core-js "^2.4.0"
regenerator-runtime "^0.10.0"
babel-template@^6.16.0, babel-template@^6.22.0:
version "6.22.0"
resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.22.0.tgz#403d110905a4626b317a2a1fcb8f3b73204b2edb"
dependencies:
babel-runtime "^6.22.0"
babel-traverse "^6.22.0"
babel-types "^6.22.0"
babylon "^6.11.0"
lodash "^4.2.0"
babel-template@^6.23.0:
babel-template@^6.16.0, babel-template@^6.23.0:
version "6.23.0"
resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.23.0.tgz#04d4f270adbb3aa704a8143ae26faa529238e638"
dependencies:
@ -317,21 +285,7 @@ babel-template@^6.23.0:
babylon "^6.11.0"
lodash "^4.2.0"
babel-traverse@^6.18.0, babel-traverse@^6.22.0, babel-traverse@^6.22.1:
version "6.22.1"
resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.22.1.tgz#3b95cd6b7427d6f1f757704908f2fc9748a5f59f"
dependencies:
babel-code-frame "^6.22.0"
babel-messages "^6.22.0"
babel-runtime "^6.22.0"
babel-types "^6.22.0"
babylon "^6.15.0"
debug "^2.2.0"
globals "^9.0.0"
invariant "^2.2.0"
lodash "^4.2.0"
babel-traverse@^6.23.0, babel-traverse@^6.23.1:
babel-traverse@^6.18.0, babel-traverse@^6.23.0, babel-traverse@^6.23.1:
version "6.23.1"
resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.23.1.tgz#d3cb59010ecd06a97d81310065f966b699e14f48"
dependencies:
@ -345,16 +299,7 @@ babel-traverse@^6.23.0, babel-traverse@^6.23.1:
invariant "^2.2.0"
lodash "^4.2.0"
babel-types@^6.18.0, babel-types@^6.22.0:
version "6.22.0"
resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.22.0.tgz#2a447e8d0ea25d2512409e4175479fd78cc8b1db"
dependencies:
babel-runtime "^6.22.0"
esutils "^2.0.2"
lodash "^4.2.0"
to-fast-properties "^1.0.1"
babel-types@^6.23.0:
babel-types@^6.18.0, babel-types@^6.22.0, babel-types@^6.23.0:
version "6.23.0"
resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.23.0.tgz#bb17179d7538bad38cd0c9e115d340f77e7e9acf"
dependencies:
@ -410,6 +355,12 @@ bser@1.0.2:
dependencies:
node-int64 "^0.4.0"
bser@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/bser/-/bser-2.0.0.tgz#9ac78d3ed5d915804fd87acb158bc797147a1719"
dependencies:
node-int64 "^0.4.0"
builtin-modules@^1.0.0:
version "1.1.1"
resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f"
@ -491,6 +442,16 @@ code-point-at@^1.0.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77"
color-convert@^1.0.0:
version "1.9.0"
resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.0.tgz#1accf97dd739b983bf994d56fec8f95853641b7a"
dependencies:
color-name "^1.1.1"
color-name@^1.1.1:
version "1.1.1"
resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.1.tgz#4b1415304cf50028ea81643643bd82ea05803689"
colors@1.0.3:
version "1.0.3"
resolved "https://registry.yarnpkg.com/colors/-/colors-1.0.3.tgz#0433f44d809680fdeb60ed260f1b0c262e82a40b"
@ -682,6 +643,12 @@ fb-watchman@^1.8.0, fb-watchman@^1.9.0:
dependencies:
bser "1.0.2"
fb-watchman@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.0.tgz#54e9abf7dfa2f26cd9b1636c588c1afc05de5d58"
dependencies:
bser "^2.0.0"
filename-regex@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.0.tgz#996e3e80479b98b9897f15a8a58b3d084e926775"
@ -710,6 +677,12 @@ find-up@^1.0.0, find-up@^1.1.2:
path-exists "^2.0.0"
pinkie-promise "^2.0.0"
find-up@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7"
dependencies:
locate-path "^2.0.0"
for-in@^0.1.5:
version "0.1.6"
resolved "https://registry.yarnpkg.com/for-in/-/for-in-0.1.6.tgz#c9f96e89bfad18a545af5ec3ed352a1d9e5b4dc8"
@ -792,7 +765,7 @@ graceful-fs@^4.1.2, graceful-fs@^4.1.6:
version "1.0.1"
resolved "https://registry.yarnpkg.com/graceful-readlink/-/graceful-readlink-1.0.1.tgz#4cafad76bc62f02fa039b2f94e9a3dd3a391a725"
growly@^1.2.0:
growly@^1.2.0, growly@^1.3.0:
version "1.3.0"
resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081"
@ -1065,6 +1038,10 @@ jest-changed-files@^17.0.2:
version "17.0.2"
resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-17.0.2.tgz#f5657758736996f590a51b87e5c9369d904ba7b7"
jest-changed-files@^19.0.2:
version "19.0.2"
resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-19.0.2.tgz#16c54c84c3270be408e06d2e8af3f3e37a885824"
jest-cli@^18.1.0:
version "18.1.0"
resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-18.1.0.tgz#5ead36ecad420817c2c9baa2aa7574f63257b3d6"
@ -1098,6 +1075,38 @@ jest-cli@^18.1.0:
worker-farm "^1.3.1"
yargs "^6.3.0"
jest-cli@^19.0.2:
version "19.0.2"
resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-19.0.2.tgz#cc3620b62acac5f2d93a548cb6ef697d4ec85443"
dependencies:
ansi-escapes "^1.4.0"
callsites "^2.0.0"
chalk "^1.1.1"
graceful-fs "^4.1.6"
is-ci "^1.0.9"
istanbul-api "^1.1.0-alpha.1"
istanbul-lib-coverage "^1.0.0"
istanbul-lib-instrument "^1.1.1"
jest-changed-files "^19.0.2"
jest-config "^19.0.2"
jest-environment-jsdom "^19.0.2"
jest-haste-map "^19.0.0"
jest-jasmine2 "^19.0.2"
jest-message-util "^19.0.0"
jest-regex-util "^19.0.0"
jest-resolve-dependencies "^19.0.0"
jest-runtime "^19.0.2"
jest-snapshot "^19.0.2"
jest-util "^19.0.2"
micromatch "^2.3.11"
node-notifier "^5.0.1"
slash "^1.0.0"
string-length "^1.0.1"
throat "^3.0.0"
which "^1.1.1"
worker-farm "^1.3.1"
yargs "^6.3.0"
jest-config@^18.1.0:
version "18.1.0"
resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-18.1.0.tgz#6111740a6d48aab86ff5a9e6ab0b98bd993b6ff4"
@ -1111,6 +1120,19 @@ jest-config@^18.1.0:
jest-util "^18.1.0"
json-stable-stringify "^1.0.0"
jest-config@^19.0.2:
version "19.0.2"
resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-19.0.2.tgz#1b9bd2db0ddd16df61c2b10a54009e1768da6411"
dependencies:
chalk "^1.1.1"
jest-environment-jsdom "^19.0.2"
jest-environment-node "^19.0.2"
jest-jasmine2 "^19.0.2"
jest-regex-util "^19.0.0"
jest-resolve "^19.0.2"
jest-validate "^19.0.2"
pretty-format "^19.0.0"
jest-diff@^18.1.0:
version "18.1.0"
resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-18.1.0.tgz#4ff79e74dd988c139195b365dc65d87f606f4803"
@ -1120,6 +1142,15 @@ jest-diff@^18.1.0:
jest-matcher-utils "^18.1.0"
pretty-format "^18.1.0"
jest-diff@^19.0.0:
version "19.0.0"
resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-19.0.0.tgz#d1563cfc56c8b60232988fbc05d4d16ed90f063c"
dependencies:
chalk "^1.1.3"
diff "^3.0.0"
jest-matcher-utils "^19.0.0"
pretty-format "^19.0.0"
jest-environment-jsdom@^18.1.0:
version "18.1.0"
resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-18.1.0.tgz#18b42f0c4ea2bae9f36cab3639b1e8f8c384e24e"
@ -1128,6 +1159,14 @@ jest-environment-jsdom@^18.1.0:
jest-util "^18.1.0"
jsdom "^9.9.1"
jest-environment-jsdom@^19.0.2:
version "19.0.2"
resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-19.0.2.tgz#ceda859c4a4b94ab35e4de7dab54b926f293e4a3"
dependencies:
jest-mock "^19.0.0"
jest-util "^19.0.2"
jsdom "^9.11.0"
jest-environment-node@^18.1.0:
version "18.1.0"
resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-18.1.0.tgz#4d6797572c8dda99acf5fae696eb62945547c779"
@ -1135,10 +1174,21 @@ jest-environment-node@^18.1.0:
jest-mock "^18.0.0"
jest-util "^18.1.0"
jest-environment-node@^19.0.2:
version "19.0.2"
resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-19.0.2.tgz#6e84079db87ed21d0c05e1f9669f207b116fe99b"
dependencies:
jest-mock "^19.0.0"
jest-util "^19.0.2"
jest-file-exists@^17.0.0:
version "17.0.0"
resolved "https://registry.yarnpkg.com/jest-file-exists/-/jest-file-exists-17.0.0.tgz#7f63eb73a1c43a13f461be261768b45af2cdd169"
jest-file-exists@^19.0.0:
version "19.0.0"
resolved "https://registry.yarnpkg.com/jest-file-exists/-/jest-file-exists-19.0.0.tgz#cca2e587a11ec92e24cfeab3f8a94d657f3fceb8"
jest-haste-map@^18.1.0:
version "18.1.0"
resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-18.1.0.tgz#06839c74b770a40c1a106968851df8d281c08375"
@ -1149,6 +1199,16 @@ jest-haste-map@^18.1.0:
sane "~1.4.1"
worker-farm "^1.3.1"
jest-haste-map@^19.0.0:
version "19.0.0"
resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-19.0.0.tgz#adde00b62b1fe04432a104b3254fc5004514b55e"
dependencies:
fb-watchman "^2.0.0"
graceful-fs "^4.1.6"
micromatch "^2.3.11"
sane "~1.5.0"
worker-farm "^1.3.1"
jest-jasmine2@^18.1.0:
version "18.1.0"
resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-18.1.0.tgz#094e104c2c189708766c77263bb2aecb5860a80b"
@ -1159,6 +1219,16 @@ jest-jasmine2@^18.1.0:
jest-snapshot "^18.1.0"
jest-util "^18.1.0"
jest-jasmine2@^19.0.2:
version "19.0.2"
resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-19.0.2.tgz#167991ac825981fb1a800af126e83afcca832c73"
dependencies:
graceful-fs "^4.1.6"
jest-matcher-utils "^19.0.0"
jest-matchers "^19.0.0"
jest-message-util "^19.0.0"
jest-snapshot "^19.0.2"
jest-matcher-utils@^18.1.0:
version "18.1.0"
resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-18.1.0.tgz#1ac4651955ee2a60cef1e7fcc98cdfd773c0f932"
@ -1166,6 +1236,13 @@ jest-matcher-utils@^18.1.0:
chalk "^1.1.3"
pretty-format "^18.1.0"
jest-matcher-utils@^19.0.0:
version "19.0.0"
resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-19.0.0.tgz#5ecd9b63565d2b001f61fbf7ec4c7f537964564d"
dependencies:
chalk "^1.1.3"
pretty-format "^19.0.0"
jest-matchers@^18.1.0:
version "18.1.0"
resolved "https://registry.yarnpkg.com/jest-matchers/-/jest-matchers-18.1.0.tgz#0341484bf87a1fd0bac0a4d2c899e2b77a3f1ead"
@ -1175,10 +1252,34 @@ jest-matchers@^18.1.0:
jest-util "^18.1.0"
pretty-format "^18.1.0"
jest-matchers@^19.0.0:
version "19.0.0"
resolved "https://registry.yarnpkg.com/jest-matchers/-/jest-matchers-19.0.0.tgz#c74ecc6ebfec06f384767ba4d6fa4a42d6755754"
dependencies:
jest-diff "^19.0.0"
jest-matcher-utils "^19.0.0"
jest-message-util "^19.0.0"
jest-regex-util "^19.0.0"
jest-message-util@^19.0.0:
version "19.0.0"
resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-19.0.0.tgz#721796b89c0e4d761606f9ba8cb828a3b6246416"
dependencies:
chalk "^1.1.1"
micromatch "^2.3.11"
jest-mock@^18.0.0:
version "18.0.0"
resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-18.0.0.tgz#5c248846ea33fa558b526f5312ab4a6765e489b3"
jest-mock@^19.0.0:
version "19.0.0"
resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-19.0.0.tgz#67038641e9607ab2ce08ec4a8cb83aabbc899d01"
jest-regex-util@^19.0.0:
version "19.0.0"
resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-19.0.0.tgz#b7754587112aede1456510bb1f6afe74ef598691"
jest-resolve-dependencies@^18.1.0:
version "18.1.0"
resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-18.1.0.tgz#8134fb5caf59c9ed842fe0152ab01c52711f1bbb"
@ -1186,6 +1287,12 @@ jest-resolve-dependencies@^18.1.0:
jest-file-exists "^17.0.0"
jest-resolve "^18.1.0"
jest-resolve-dependencies@^19.0.0:
version "19.0.0"
resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-19.0.0.tgz#a741ad1fa094140e64ecf2642a504f834ece22ee"
dependencies:
jest-file-exists "^19.0.0"
jest-resolve@^18.1.0:
version "18.1.0"
resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-18.1.0.tgz#6800accb536658c906cd5e29de412b1ab9ac249b"
@ -1195,6 +1302,14 @@ jest-resolve@^18.1.0:
jest-haste-map "^18.1.0"
resolve "^1.2.0"
jest-resolve@^19.0.2:
version "19.0.2"
resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-19.0.2.tgz#5793575de4f07aec32f7d7ff0c6c181963eefb3c"
dependencies:
browser-resolve "^1.11.2"
jest-haste-map "^19.0.0"
resolve "^1.2.0"
jest-runtime@^18.1.0:
version "18.1.0"
resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-18.1.0.tgz#3abfd687175b21fc3b85a2b8064399e997859922"
@ -1215,6 +1330,26 @@ jest-runtime@^18.1.0:
micromatch "^2.3.11"
yargs "^6.3.0"
jest-runtime@^19.0.2:
version "19.0.2"
resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-19.0.2.tgz#d9a43e72de416d27d196fd9c7940d98fe6685407"
dependencies:
babel-core "^6.0.0"
babel-jest "^19.0.0"
babel-plugin-istanbul "^4.0.0"
chalk "^1.1.3"
graceful-fs "^4.1.6"
jest-config "^19.0.2"
jest-file-exists "^19.0.0"
jest-haste-map "^19.0.0"
jest-regex-util "^19.0.0"
jest-resolve "^19.0.2"
jest-util "^19.0.2"
json-stable-stringify "^1.0.1"
micromatch "^2.3.11"
strip-bom "3.0.0"
yargs "^6.3.0"
jest-snapshot@^18.1.0:
version "18.1.0"
resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-18.1.0.tgz#55b96d2ee639c9bce76f87f2a3fd40b71c7a5916"
@ -1226,6 +1361,18 @@ jest-snapshot@^18.1.0:
natural-compare "^1.4.0"
pretty-format "^18.1.0"
jest-snapshot@^19.0.2:
version "19.0.2"
resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-19.0.2.tgz#9c1b216214f7187c38bfd5c70b1efab16b0ff50b"
dependencies:
chalk "^1.1.3"
jest-diff "^19.0.0"
jest-file-exists "^19.0.0"
jest-matcher-utils "^19.0.0"
jest-util "^19.0.2"
natural-compare "^1.4.0"
pretty-format "^19.0.0"
jest-util@^18.1.0:
version "18.1.0"
resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-18.1.0.tgz#3a99c32114ab17f84be094382527006e6d4bfc6a"
@ -1237,6 +1384,34 @@ jest-util@^18.1.0:
jest-mock "^18.0.0"
mkdirp "^0.5.1"
jest-util@^19.0.2:
version "19.0.2"
resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-19.0.2.tgz#e0a0232a2ab9e6b2b53668bdb3534c2b5977ed41"
dependencies:
chalk "^1.1.1"
graceful-fs "^4.1.6"
jest-file-exists "^19.0.0"
jest-message-util "^19.0.0"
jest-mock "^19.0.0"
jest-validate "^19.0.2"
leven "^2.0.0"
mkdirp "^0.5.1"
jest-validate@^19.0.2:
version "19.0.2"
resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-19.0.2.tgz#dc534df5f1278d5b63df32b14241d4dbf7244c0c"
dependencies:
chalk "^1.1.1"
jest-matcher-utils "^19.0.0"
leven "^2.0.0"
pretty-format "^19.0.0"
jest@^19.0.2:
version "19.0.2"
resolved "https://registry.yarnpkg.com/jest/-/jest-19.0.2.tgz#b794faaf8ff461e7388f28beef559a54f20b2c10"
dependencies:
jest-cli "^19.0.2"
jodid25519@^1.0.0:
version "1.0.2"
resolved "https://registry.yarnpkg.com/jodid25519/-/jodid25519-1.0.2.tgz#06d4912255093419477d425633606e0e90782967"
@ -1258,7 +1433,7 @@ jsbn@~0.1.0:
version "0.1.1"
resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513"
jsdom@^9.9.1:
jsdom@^9.11.0, jsdom@^9.9.1:
version "9.11.0"
resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-9.11.0.tgz#a95b0304e521a2ca5a63c6ea47bf7708a7a84591"
dependencies:
@ -1290,7 +1465,7 @@ json-schema@0.2.3:
version "0.2.3"
resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13"
json-stable-stringify@^1.0.0:
json-stable-stringify@^1.0.0, json-stable-stringify@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af"
dependencies:
@ -1336,6 +1511,10 @@ lcid@^1.0.0:
dependencies:
invert-kv "^1.0.0"
leven@^2.0.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/leven/-/leven-2.1.0.tgz#c2e7a9f772094dee9d34202ae8acce4687875580"
levn@~0.3.0:
version "0.3.0"
resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee"
@ -1353,6 +1532,13 @@ load-json-file@^1.0.0:
pinkie-promise "^2.0.0"
strip-bom "^2.0.0"
locate-path@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e"
dependencies:
p-locate "^2.0.0"
path-exists "^3.0.0"
lodash._arraycopy@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/lodash._arraycopy/-/lodash._arraycopy-3.0.0.tgz#76e7b7c1f1fb92547374878a562ed06a3e50f6e1"
@ -1406,6 +1592,10 @@ lodash.clonedeep@^3.0.0:
lodash._baseclone "^3.0.0"
lodash._bindcallback "^3.0.0"
lodash.clonedeep@^4.5.0:
version "4.5.0"
resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef"
lodash.isarguments@^3.0.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz#2f573d85c6a24289ff00663b491c1d338ff3458a"
@ -1460,7 +1650,7 @@ merge@^1.1.3:
version "1.2.0"
resolved "https://registry.yarnpkg.com/merge/-/merge-1.2.0.tgz#7531e39d4949c281a66b8c5a6e0265e8b05894da"
micromatch@^2.3.11:
micromatch@^2.1.5, micromatch@^2.3.11:
version "2.3.11"
resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565"
dependencies:
@ -1538,6 +1728,15 @@ node-notifier@^4.6.1:
shellwords "^0.1.0"
which "^1.0.5"
node-notifier@^5.0.1:
version "5.0.2"
resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-5.0.2.tgz#4438449fe69e321f941cef943986b0797032701b"
dependencies:
growly "^1.3.0"
semver "^5.3.0"
shellwords "^0.1.0"
which "^1.2.12"
normalize-package-data@^2.3.2:
version "2.3.5"
resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.3.5.tgz#8d924f142960e1777e7ffe170543631cc7cb02df"
@ -1612,6 +1811,16 @@ os-tmpdir@^1.0.1:
version "1.0.2"
resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274"
p-limit@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.1.0.tgz#b07ff2d9a5d88bec806035895a2bab66a27988bc"
p-locate@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43"
dependencies:
p-limit "^1.1.0"
parse-glob@^3.0.4:
version "3.0.4"
resolved "https://registry.yarnpkg.com/parse-glob/-/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c"
@ -1637,6 +1846,10 @@ path-exists@^2.0.0:
dependencies:
pinkie-promise "^2.0.0"
path-exists@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515"
path-is-absolute@^1.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
@ -1681,6 +1894,12 @@ pretty-format@^18.1.0:
dependencies:
ansi-styles "^2.2.1"
pretty-format@^19.0.0:
version "19.0.0"
resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-19.0.0.tgz#56530d32acb98a3fa4851c4e2b9d37b420684c84"
dependencies:
ansi-styles "^3.0.0"
private@^0.1.6:
version "0.1.7"
resolved "https://registry.yarnpkg.com/private/-/private-0.1.7.tgz#68ce5e8a1ef0a23bb570cc28537b5332aba63ef1"
@ -1814,6 +2033,18 @@ sane@~1.4.1:
walker "~1.0.5"
watch "~0.10.0"
sane@~1.5.0:
version "1.5.0"
resolved "https://registry.yarnpkg.com/sane/-/sane-1.5.0.tgz#a4adeae764d048621ecb27d5f9ecf513101939f3"
dependencies:
anymatch "^1.3.0"
exec-sh "^0.2.0"
fb-watchman "^1.8.0"
minimatch "^3.0.2"
minimist "^1.1.1"
walker "~1.0.5"
watch "~0.10.0"
sax@^1.2.1:
version "1.2.2"
resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.2.tgz#fd8631a23bc7826bef5d871bdb87378c95647828"
@ -1895,6 +2126,12 @@ sshpk@^1.7.0:
jsbn "~0.1.0"
tweetnacl "~0.14.0"
string-length@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/string-length/-/string-length-1.0.1.tgz#56970fb1c38558e9e70b728bf3de269ac45adfac"
dependencies:
strip-ansi "^3.0.0"
string-width@^1.0.1, string-width@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3"
@ -1917,6 +2154,10 @@ strip-ansi@^3.0.0, strip-ansi@^3.0.1:
dependencies:
ansi-regex "^2.0.0"
strip-bom@3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3"
strip-bom@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e"
@ -1947,6 +2188,16 @@ test-exclude@^3.3.0:
read-pkg-up "^1.0.1"
require-main-filename "^1.0.1"
test-exclude@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-4.0.0.tgz#0ddc0100b8ae7e88b34eb4fd98a907e961991900"
dependencies:
arrify "^1.0.1"
micromatch "^2.3.11"
object-assign "^4.1.0"
read-pkg-up "^1.0.1"
require-main-filename "^1.0.1"
throat@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/throat/-/throat-3.0.0.tgz#e7c64c867cbb3845f10877642f7b60055b8ec0d6"
@ -2052,7 +2303,7 @@ which-module@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/which-module/-/which-module-1.0.0.tgz#bba63ca861948994ff307736089e3b96026c2a4f"
which@^1.0.5, which@^1.1.1:
which@^1.0.5, which@^1.1.1, which@^1.2.12:
version "1.2.12"
resolved "https://registry.yarnpkg.com/which/-/which-1.2.12.tgz#de67b5e450269f194909ef23ece4ebe416fa1192"
dependencies:

5
packages/neutrino-preset-karma/package.json

@ -1,6 +1,6 @@
{
"name": "neutrino-preset-karma",
"version": "4.2.0",
"version": "5.0.0",
"description": "Neutrino preset for testing Neutrino projects with Karma",
"main": "src/index.js",
"keywords": [
@ -14,9 +14,10 @@
"license": "MPL-2.0",
"repository": "mozilla-neutrino/neutrino-dev",
"peerDependencies": {
"neutrino": "^4.0.0"
"neutrino": "^5.0.0"
},
"dependencies": {
"deepmerge": "^1.3.2",
"karma": "^1.5.0",
"karma-chrome-launcher": "^2.0.0",
"karma-coverage": "^1.1.1",

16
packages/neutrino-preset-karma/src/index.js

@ -1,7 +1,8 @@
const { Server } = require('karma');
const merge = require('deepmerge');
module.exports = neutrino => {
neutrino.custom.karma = {
const defaults = {
plugins: [
require.resolve('karma-webpack'),
require.resolve('karma-chrome-launcher'),
@ -35,11 +36,16 @@ module.exports = neutrino => {
};
neutrino.on('test', ({ files, watch }) => {
const { karma } = neutrino.custom;
const karma = merge.all([
defaults,
neutrino.options.karma,
{
singleRun: !watch,
autoWatch: watch,
webpack: neutrino.getWebpackOptions()
}
]);
karma.singleRun = !watch;
karma.autoWatch = watch;
karma.webpack = neutrino.getWebpackOptions();
delete karma.webpack.plugins;
if (files && files.length) {

47
packages/neutrino-preset-karma/yarn.lock

@ -630,6 +630,10 @@ deep-is@~0.1.3:
version "0.1.3"
resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34"
deepmerge@^1.3.2:
version "1.3.2"
resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-1.3.2.tgz#1663691629d4dbfe364fa12a2a4f0aa86aa3a050"
delayed-stream@~1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619"
@ -1002,7 +1006,7 @@ glob-parent@^2.0.0:
dependencies:
is-glob "^2.0.0"
glob@7.0.5, glob@^7.0.5:
glob@7.0.5:
version "7.0.5"
resolved "https://registry.yarnpkg.com/glob/-/glob-7.0.5.tgz#b4202a69099bbb4d292a7c1b95b6682b67ebdc95"
dependencies:
@ -1023,7 +1027,7 @@ glob@^5.0.15:
once "^1.3.0"
path-is-absolute "^1.0.0"
glob@^7.1.1:
glob@^7.0.5, glob@^7.1.1:
version "7.1.1"
resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.1.tgz#805211df04faaf1c63a3600306cdf5ade50b2ec8"
dependencies:
@ -1788,14 +1792,10 @@ oauth-sign@~0.8.1:
version "0.8.2"
resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43"
object-assign@4.1.0:
object-assign@4.1.0, object-assign@^4.0.1, object-assign@^4.1.0:
version "4.1.0"
resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.0.tgz#7a3b3d0e98063d43f4c03f2e8ae6cd51a86883a0"
object-assign@^4.0.1, object-assign@^4.1.0:
version "4.1.1"
resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
object-component@0.0.3:
version "0.0.3"
resolved "https://registry.yarnpkg.com/object-component/-/object-component-0.0.3.tgz#f0c69aa50efc95b866c186f400a33769cb2f1291"
@ -2180,15 +2180,15 @@ right-align@^0.1.1:
dependencies:
align-text "^0.1.1"
rimraf@2, rimraf@~2.5.1, rimraf@~2.5.4:
version "2.5.4"
resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.5.4.tgz#96800093cbf1a0c86bd95b4625467535c29dfa04"
rimraf@2, rimraf@^2.6.0:
version "2.6.1"
resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.1.tgz#c2338ec643df7a1b7fe5c54fa86f57428a55f33d"
dependencies:
glob "^7.0.5"
rimraf@^2.6.0:
version "2.6.1"
resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.1.tgz#c2338ec643df7a1b7fe5c54fa86f57428a55f33d"
rimraf@~2.5.1, rimraf@~2.5.4:
version "2.5.4"
resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.5.4.tgz#96800093cbf1a0c86bd95b4625467535c29dfa04"
dependencies:
glob "^7.0.5"
@ -2200,14 +2200,14 @@ safe-buffer@^5.0.1:
version "5.0.1"
resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.0.1.tgz#d263ca54696cd8a306b5ca6551e92de57918fbe7"
"semver@2 || 3 || 4 || 5", semver@~4.3.3:
version "4.3.6"
resolved "https://registry.yarnpkg.com/semver/-/semver-4.3.6.tgz#300bc6e0e86374f7ba61068b5b1ecd57fc6532da"
semver@~5.3.0:
"semver@2 || 3 || 4 || 5", semver@~5.3.0:
version "5.3.0"
resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f"
semver@~4.3.3:
version "4.3.6"
resolved "https://registry.yarnpkg.com/semver/-/semver-4.3.6.tgz#300bc6e0e86374f7ba61068b5b1ecd57fc6532da"
set-blocking@^2.0.0, set-blocking@~2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7"
@ -2580,16 +2580,7 @@ watchpack@^1.2.0:
chokidar "^1.4.3"
graceful-fs "^4.1.2"
webpack-dev-middleware@^1.0.11:
version "1.10.0"
resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-1.10.0.tgz#7d5be2651e692fddfafd8aaed177c16ff51f0eb8"
dependencies:
memory-fs "~0.4.1"
mime "^1.3.4"
path-is-absolute "^1.0.0"
range-parser "^1.0.3"
webpack-dev-middleware@^1.10.1:
webpack-dev-middleware@^1.0.11, webpack-dev-middleware@^1.10.1:
version "1.10.1"
resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-1.10.1.tgz#c6b4cf428139cf1aefbe06a0c00fdb4f8da2f893"
dependencies:

4
packages/neutrino-preset-mocha/package.json

@ -1,6 +1,6 @@
{
"name": "neutrino-preset-mocha",
"version": "4.2.0",
"version": "5.0.0",
"description": "Neutrino preset for testing Neutrino projects with Mocha",
"main": "src/index.js",
"keywords": [
@ -12,7 +12,7 @@
"license": "MPL-2.0",
"repository": "mozilla-neutrino/neutrino-dev",
"peerDependencies": {
"neutrino": "^4.0.0"
"neutrino": "^5.0.0"
},
"dependencies": {
"babel-plugin-transform-es2015-modules-commonjs": "^6.23.0",

30
packages/neutrino-preset-mocha/src/index.js

@ -2,7 +2,7 @@ const mocha = require('./mocha');
const merge = require('deepmerge');
module.exports = neutrino => {
neutrino.custom.mocha = {
const defaults = {
reporter: 'spec',
ui: 'tdd',
bail: true
@ -10,21 +10,19 @@ module.exports = neutrino => {
neutrino.config.module
.rule('compile')
.loader('babel', ({ options }) => {
return {
options: merge(options, {
env: {
test: {
plugins: [require.resolve('babel-plugin-transform-es2015-modules-commonjs')]
}
.loader('babel', props => merge(props, {
options: {
env: {
test: {
plugins: [require.resolve('babel-plugin-transform-es2015-modules-commonjs')]
}
})
};
});
}
}
}));
neutrino.on('test', ({ files }) => {
const babelOptions = neutrino.config.module.rule('compile').loaders.get('babel').options;
return mocha(neutrino.custom.mocha, babelOptions, files);
});
neutrino.on('test', ({ files }) => mocha(
merge(defaults, neutrino.options.mocha),
neutrino.config.module.rule('compile').loaders.get('babel').options,
files
));
};

4
packages/neutrino-preset-node/package.json

@ -1,6 +1,6 @@
{
"name": "neutrino-preset-node",
"version": "4.2.2",
"version": "5.0.0",
"description": "Neutrino preset for building Node.js projects",
"main": "src/index.js",
"keywords": [
@ -26,7 +26,7 @@
"webpack-node-externals": "1.5.4"
},
"peerDependencies": {
"neutrino": "^4.0.0"
"neutrino": "^5.0.0"
},
"homepage": "https://neutrino.js.org",
"bugs": "https://github.com/mozilla-neutrino/neutrino-dev/issues"

77
packages/neutrino-preset-node/src/index.js

@ -69,49 +69,47 @@ module.exports = neutrino => {
if (config.module.rules.has('lint')) {
config.module
.rule('lint')
.loader('eslint', ({ options }) => {
return {
options: merge(options, {
envs: ['node'],
rules: {
// enforce return after a callback
'callback-return': 'off',
.loader('eslint', props => merge(props, {
options: {
envs: ['node'],
rules: {
// enforce return after a callback
'callback-return': 'off',
// require all requires be top-level
// http://eslint.org/docs/rules/global-require
'global-require': 'error',
// require all requires be top-level
// http://eslint.org/docs/rules/global-require
'global-require': 'error',
// enforces error handling in callbacks (node environment)
'handle-callback-err': 'off',
// enforces error handling in callbacks (node environment)
'handle-callback-err': 'off',
// Allow console in Node.js
'no-console': 'off',
// Allow console in Node.js
'no-console': 'off',
// disallow mixing regular variable and require declarations
'no-mixed-requires': ['off', false],
// disallow mixing regular variable and require declarations
'no-mixed-requires': ['off', false],
// disallow use of new operator with the require function
'no-new-require': 'error',
// disallow use of new operator with the require function
'no-new-require': 'error',
// disallow string concatenation with __dirname and __filename
// http://eslint.org/docs/rules/no-path-concat
'no-path-concat': 'error',
// disallow string concatenation with __dirname and __filename
// http://eslint.org/docs/rules/no-path-concat
'no-path-concat': 'error',
// disallow use of process.env
'no-process-env': 'off',
// disallow use of process.env
'no-process-env': 'off',
// disallow process.exit()
'no-process-exit': 'off',
// disallow process.exit()
'no-process-exit': 'off',
// restrict usage of specified node modules
'no-restricted-modules': 'off',
// restrict usage of specified node modules
'no-restricted-modules': 'off',
// disallow use of synchronous methods (off by default)
'no-sync': 'off'
}
})
};
});
// disallow use of synchronous methods (off by default)
'no-sync': 'off'
}
}
}));
}
config.module
@ -120,15 +118,12 @@ module.exports = neutrino => {
.include(SRC, TEST)
.loader('babel', require.resolve('babel-loader'), {
presets: [
[
require.resolve('babel-preset-env'),
{
modules: false,
targets: {
node: 6.9
}
[require.resolve('babel-preset-env'), {
modules: false,
targets: {
node: 6.9
}
]
}]
]
});

6
packages/neutrino-preset-react/package.json

@ -1,6 +1,6 @@
{
"name": "neutrino-preset-react",
"version": "4.2.3",
"version": "5.0.0",
"description": "Neutrino preset for building React web applications",
"main": "src/index.js",
"keywords": [
@ -18,12 +18,12 @@
"babel-preset-react": "^6.23.0",
"deepmerge": "^1.3.2",
"eslint-plugin-react": "^6.10.0",
"neutrino-preset-web": "^4.2.3",
"neutrino-preset-web": "^5.0.0",
"react-hot-loader": "^3.0.0-beta.6",
"webpack": "^2.2.1"
},
"peerDependencies": {
"neutrino": "^4.0.0"
"neutrino": "^5.0.0"
},
"homepage": "https://neutrino.js.org",
"bugs": "https://github.com/mozilla-neutrino/neutrino-dev/issues"

89
packages/neutrino-preset-react/src/index.js

@ -1,6 +1,5 @@
'use strict';
const web = require('neutrino-preset-web');
const merge = require('deepmerge');
const path = require('path');
const webpack = require('webpack');
@ -8,7 +7,7 @@ const webpack = require('webpack');
const MODULES = path.join(__dirname, '../node_modules');
module.exports = neutrino => {
web(neutrino);
neutrino.use(require('neutrino-preset-web'));
const { config } = neutrino;
@ -16,58 +15,54 @@ module.exports = neutrino => {
config.module
.rule('lint')
.test(/\.jsx?$/)
.loader('eslint', ({ options }) => {
return {
options: merge(options, {
plugins: ['react'],
baseConfig: {
extends: ['plugin:react/recommended']
},
parserOptions: {
ecmaFeatures: {
experimentalObjectRestSpread: true
}
},
rules: {
'react/prop-types': ['off'],
'jsx-quotes': ['error', 'prefer-double'],
'class-methods-use-this': ['error', {
exceptMethods: [
'render',
'getInitialState',
'getDefaultProps',
'getChildContext',
'componentWillMount',
'componentDidMount',
'componentWillReceiveProps',
'shouldComponentUpdate',
'componentWillUpdate',
'componentDidUpdate',
'componentWillUnmount'
]
}]
.loader('eslint', props => merge(props, {
options: {
plugins: ['react'],
baseConfig: {
extends: ['plugin:react/recommended']
},
parserOptions: {
ecmaFeatures: {
experimentalObjectRestSpread: true
}
})
};
});
},
rules: {
'react/prop-types': ['off'],
'jsx-quotes': ['error', 'prefer-double'],
'class-methods-use-this': ['error', {
exceptMethods: [
'render',
'getInitialState',
'getDefaultProps',
'getChildContext',
'componentWillMount',
'componentDidMount',
'componentWillReceiveProps',
'shouldComponentUpdate',
'componentWillUpdate',
'componentDidUpdate',
'componentWillUnmount'
]
}]
}
}
}));
}
config.module
.rule('compile')
.test(/\.jsx?$/)
.loader('babel', ({ options }) => {
return {
options: merge(options, {
presets: [require.resolve('babel-preset-react')],
plugins: [require.resolve('babel-plugin-transform-object-rest-spread')],
env: {
development: {
plugins: [require.resolve('react-hot-loader/babel')]
}
.loader('babel', props => merge(props, {
options: {
presets: [require.resolve('babel-preset-react')],
plugins: [require.resolve('babel-plugin-transform-object-rest-spread')],
env: {
development: {
plugins: [require.resolve('react-hot-loader/babel')]
}
})
};
});
}
}
}));
config.resolve.modules.add(MODULES);
config.resolve.extensions.add('.jsx');

4
packages/neutrino-preset-web/package.json

@ -1,6 +1,6 @@
{
"name": "neutrino-preset-web",
"version": "4.2.3",
"version": "5.0.0",
"description": "Neutrino preset for building generic web applications",
"main": "src/index.js",
"keywords": [
@ -34,7 +34,7 @@
"worker-loader": "^0.8.0"
},
"peerDependencies": {
"neutrino": "^4.0.0"
"neutrino": "^5.0.0"
},
"homepage": "https://neutrino.js.org",
"bugs": "https://github.com/mozilla-neutrino/neutrino-dev/issues"

50
packages/neutrino-preset-web/src/index.js

@ -22,7 +22,23 @@ const URL_LOADER = require.resolve('url-loader');
const PROJECT_MODULES = path.join(CWD, 'node_modules');
const MODULES = path.join(__dirname, '../node_modules');
module.exports = ({ config }) => {
module.exports = neutrino => {
const { config } = neutrino;
const html = {
inject: false,
template: htmlTemplate,
appMountId: 'root',
xhtml: true,
mobile: true,
minify: {
useShortDoctype: true,
keepClosingSlash: true,
collapseWhitespace: true,
preserveLineBreaks: true,
}
};
config
.target('web')
.context(CWD)
@ -142,14 +158,12 @@ module.exports = ({ config }) => {
if (config.module.rules.has('lint')) {
config.module
.rule('lint')
.loader('eslint', ({ options }) => {
return {
options: merge(options, {
globals: ['Buffer'],
envs: ['browser', 'commonjs']
})
};
});
.loader('eslint', props => merge(props, {
options: {
globals: ['Buffer'],
envs: ['browser', 'commonjs']
}
}));
}
config
@ -158,19 +172,7 @@ module.exports = ({ config }) => {
config
.plugin('html')
.use(HtmlPlugin, merge({
inject: false,
template: htmlTemplate,
appMountId: 'root',
xhtml: true,
mobile: true,
minify: {
useShortDoctype: true,
keepClosingSlash: true,
collapseWhitespace: true,
preserveLineBreaks: true,
}
}, PKG.config && PKG.config.html ? PKG.config.html : {}));
.use(HtmlPlugin, merge(html, neutrino.options.html));
if (process.env.NODE_ENV !== 'test') {
config
@ -184,10 +186,10 @@ module.exports = ({ config }) => {
if (process.env.NODE_ENV === 'development') {
const protocol = !!process.env.HTTPS ? 'https' : 'http';
const host = process.env.HOST ||
PKG.config && PKG.config.neutrino && PKG.config.neutrino.devServer && PKG.config.neutrino.devServer.host ||
(PKG.neutrino && PKG.neutrino.config && PKG.neutrino.config.devServer && PKG.neutrino.config.devServer.host) ||
'localhost';
const port = parseInt(process.env.PORT) ||
PKG.config && PKG.config.neutrino && PKG.config.neutrino.devServer && parseInt(PKG.config.neutrino.devServer.port) ||
(PKG.neutrino && PKG.neutrino.config && PKG.neutrino.config.devServer && parseInt(PKG.neutrino.config.devServer.port)) ||
5000;
config.devtool('eval');

50
packages/neutrino/bin/neutrino

@ -2,10 +2,16 @@
const Neutrino = require('../src/neutrino');
const yargs = require('yargs');
const path = require('path');
const pkg = require(path.join(process.cwd(), 'package.json'));
const { join } = require('path');
const pkgPresets = pkg.config && pkg.config.presets ? pkg.config.presets : [];
const cwd = process.cwd();
let pkg = {};
try {
pkg = require(join(cwd, 'package.json'));
} catch (ex) {}
const pkgPresets = pkg.neutrino && pkg.neutrino.presets ? pkg.neutrino.presets : [];
const environments = { build: 'production', start: 'development', test: 'test' };
const args = yargs
.option('presets', {
@ -37,9 +43,43 @@ const args = yargs
function run(command, presets) {
process.env.NODE_ENV = environments[command];
const N = new Neutrino(presets);
N[command](args)
const options = pkg.neutrino && pkg.neutrino.options ? pkg.neutrino.options : {};
const api = new Neutrino(options);
const cwd = process.cwd();
// Grab all presets and merge them into a single webpack-chain config instance
presets.forEach(preset => {
const paths = [
join(cwd, preset),
join(cwd, 'node_modules', preset),
preset
];
for (let i = 0; i < paths.length; i += 1) {
try {
api.use(require(paths[i]));
} catch (exception) {
if (/Cannot find module/.test(exception.message)) {
continue;
}
exception.message = `Neutrino was unable to load the module '${preset}'. ` +
`Ensure this module exports a function and is free from errors.\n${exception.message}`;
throw exception;
}
}
throw new Error(`Neutrino cannot find a module with the name or path '${preset}'. ` +
`Ensure this module can be found relative to the root of the project.`);
});
// Also grab any Neutrino config from package.json and merge it into the config at a higher precedence
if (pkg.neutrino && pkg.neutrino.config) {
api.config.merge(pkg.neutrino.config);
}
api[command](args)
.then(() => process.exit(0))
.catch(err => {
if (err) {

2
packages/neutrino/package.json

@ -1,6 +1,6 @@
{
"name": "neutrino",
"version": "4.3.1",
"version": "5.0.0",
"description": "Create and build JS applications with managed configurations",
"main": "src/neutrino.js",
"bin": {

125
packages/neutrino/src/neutrino.js

@ -5,48 +5,19 @@ const webpack = require('webpack');
const Config = require('webpack-chain');
const ora = require('ora');
const cwd = process.cwd();
class Neutrino extends EventEmitter {
constructor(presets = []) {
constructor(options) {
super();
this.config = new Config();
this.custom = {};
// Grab all presets and merge them into a single webpack-chain config instance
presets.forEach(preset => {
const paths = [
path.join(cwd, preset),
path.join(cwd, 'node_modules', preset),
preset
];
for (let i = 0; i < paths.length; i += 1) {
try {
return require(paths[i])(this);
} catch (exception) {
if (/Cannot find module/.test(exception.message)) {
continue;
}
exception.message = `Neutrino was unable to load the module '${preset}'. ` +
`Ensure this module exports a function and is free from errors.\n${exception.message}`;
throw exception;
}
}
throw new Error(`Neutrino cannot find a module with the name or path '${preset}'. ` +
`Ensure this module can be found relative to the root of the project.`);
});
this.options = options;
}
// Also grab any Neutrino config from package.json and merge it into the config
try {
const pkg = require(path.join(process.cwd(), 'package.json'));
use(presets = []) {
if (!Array.isArray(presets)) {
presets = [presets];
}
if (pkg.config && pkg.config.neutrino) {
this.config.merge(pkg.config.neutrino);
}
} catch (ex) {}
presets.map(preset => preset(this));
}
handleErrors(err, stats) {
@ -85,26 +56,7 @@ class Neutrino extends EventEmitter {
build(args) {
return this
.emitForAll('prebuild', args)
.then(() => new Promise((resolve, reject) => {
const config = this.getWebpackOptions();
const compiler = webpack(config);
compiler.run((err, stats) => {
const failed = this.handleErrors(err, stats);
if (failed) {
return reject();
}
console.log(stats.toString({
colors: true,
chunks: false,
children: false
}));
resolve();
});
}))
.then(() => this.builder())
.then(() => this.emitForAll('build', args));
}
@ -115,28 +67,26 @@ class Neutrino extends EventEmitter {
const config = this.getWebpackOptions();
if (config.devServer) {
return this._devServer();
return this.devServer();
}
if (config.target === 'node') {
console.log('Warning: This preset does not support watch compilation. Falling back to a one-time build.');
return this.build();
return this.builder();
}
return new Promise(resolve => {
const config = this.getWebpackOptions();
const compiler = webpack(config);
const watcher = compiler.watch(config.watchOptions || {}, (err, stats) => {
this.handleErrors(err, stats);
});
process.on('SIGINT', () => watcher.close(resolve));
});
return this.watcher();
})
.then(() => this.emitForAll('start', args));
}
_devServer() {
test(args) {
return this
.emitForAll('pretest', args)
.then(() => this.emitForAll('test', args));
}
devServer() {
return new Promise(resolve => {
const starting = ora('Starting development server').start();
const config = this.getWebpackOptions();
@ -162,10 +112,39 @@ class Neutrino extends EventEmitter {
});
}
test(args) {
return this
.emitForAll('pretest', args)
.then(() => this.emitForAll('test', args));
watcher() {
return new Promise(resolve => {
const config = this.getWebpackOptions();
const compiler = webpack(config);
const watcher = compiler.watch(config.watchOptions || {}, (err, stats) => {
this.handleErrors(err, stats);
});
process.on('SIGINT', () => watcher.close(resolve));
});
}
builder() {
return new Promise((resolve, reject) => {
const config = this.getWebpackOptions();
const compiler = webpack(config);
compiler.run((err, stats) => {
const failed = this.handleErrors(err, stats);
if (failed) {
return reject();
}
console.log(stats.toString({
colors: true,
chunks: false,
children: false
}));
resolve();
});
});
}
}

110
yarn.lock

@ -340,6 +340,14 @@ core-util-is@~1.0.0:
version "1.0.2"
resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
cross-spawn@^5.0.1:
version "5.1.0"
resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449"
dependencies:
lru-cache "^4.0.1"
shebang-command "^1.2.0"
which "^1.2.9"
cryptiles@2.x.x:
version "2.0.5"
resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-2.0.5.tgz#3bdfecdc608147c1c67202fa291e7dca59eaa3b8"
@ -470,6 +478,18 @@ escape-string-regexp@^1.0.0, escape-string-regexp@^1.0.2, escape-string-regexp@^
version "1.0.5"
resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
execa@^0.6.0:
version "0.6.0"
resolved "https://registry.yarnpkg.com/execa/-/execa-0.6.0.tgz#934fc9f04a9febb4d4b449d976e92cfd95ef4f6e"
dependencies:
cross-spawn "^5.0.1"
get-stream "^3.0.0"
is-stream "^1.1.0"
npm-run-path "^2.0.0"
p-finally "^1.0.0"
signal-exit "^3.0.0"
strip-eof "^1.0.0"
exit@0.1.2:
version "0.1.2"
resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c"
@ -588,6 +608,10 @@ generate-object-property@^1.1.0:
dependencies:
is-property "^1.0.0"
get-stream@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14"
getpass@^0.1.1:
version "0.1.6"
resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.6.tgz#283ffd9fc1256840875311c1b60e8c40187110e6"
@ -861,6 +885,10 @@ is-property@^1.0.0:
version "1.0.2"
resolved "https://registry.yarnpkg.com/is-property/-/is-property-1.0.2.tgz#57fe1c4e48474edd65b09911f26b1cd4095dda84"
is-stream@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44"
is-typedarray@~1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a"
@ -1096,7 +1124,7 @@ lru-cache@2:
version "2.7.3"
resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-2.7.3.tgz#6d4524e8b955f95d4f5b58851ce21dd72fb4e952"
lru-cache@~4.0.1:
lru-cache@^4.0.1, lru-cache@~4.0.1:
version "4.0.2"
resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.0.2.tgz#1d17679c069cda5d040991a09dbc2c0db377e55e"
dependencies:
@ -1291,6 +1319,12 @@ npm-registry-client@~7.2.1:
optionalDependencies:
npmlog "~2.0.0 || ~3.1.0"
npm-run-path@^2.0.0:
version "2.0.2"
resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f"
dependencies:
path-key "^2.0.0"
npm-user-validate@~0.1.2, npm-user-validate@~0.1.5:
version "0.1.5"
resolved "https://registry.yarnpkg.com/npm-user-validate/-/npm-user-validate-0.1.5.tgz#52465d50c2d20294a57125b996baedbf56c5004b"
@ -1468,20 +1502,23 @@ nth-check@~1.0.1:
dependencies:
boolbase "~1.0.0"
oao@^0.5.7:
version "0.5.7"
resolved "https://registry.yarnpkg.com/oao/-/oao-0.5.7.tgz#ab512b50ace0586066d43e2f8e86c2ab40a85ce4"
oao@^0.7.2:
version "0.7.2"
resolved "https://registry.yarnpkg.com/oao/-/oao-0.7.2.tgz#ac4b8d3da07fdafe7b9f2e3cbf56edcd996d5d09"
dependencies:
babel-polyfill "6.22.0"
commander "2.9.0"
execa "^0.6.0"
globby "6.1.0"
inquirer "3.0.1"
kebab-case "1.0.0"
rimraf "^2.6.1"
semver "5.3.0"
shelljs "0.7.6"
split "1.0.0"
storyboard "^3.0.0"
storyboard-preset-console "^3.0.0"
storyboard "^3.1.0"
storyboard-listener-console "^3.0.0"
storyboard-listener-console-parallel "^3.1.0"
terminal-kit "^0.26.1"
timm "^1.2.3"
@ -1537,6 +1574,10 @@ osenv@0, osenv@~0.1.3:
os-homedir "^1.0.0"
os-tmpdir "^1.0.0"
p-finally@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae"
path-array@^1.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/path-array/-/path-array-1.0.1.tgz#7e2f0f35f07a2015122b868b7eac0eb2c4fec271"
@ -1551,6 +1592,10 @@ path-is-inside@^1.0.1, path-is-inside@~1.0.0, path-is-inside@~1.0.1:
version "1.0.2"
resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53"
path-key@^2.0.0:
version "2.0.1"
resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40"
pify@^2.0.0:
version "2.3.0"
resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c"
@ -1809,6 +1854,12 @@ rimraf@2, rimraf@^2.2.8, rimraf@^2.5.2, rimraf@^2.5.4, rimraf@~2.5.2, rimraf@~2.
dependencies:
glob "^7.0.5"
rimraf@^2.6.1:
version "2.6.1"
resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.1.tgz#c2338ec643df7a1b7fe5c54fa86f57428a55f33d"
dependencies:
glob "^7.0.5"
run-async@^2.2.0:
version "2.3.0"
resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.3.0.tgz#0371ab4ae0bdd720d4166d7dfda64ff7a445a6c0"
@ -1819,14 +1870,14 @@ rx@^4.1.0:
version "4.1.0"
resolved "https://registry.yarnpkg.com/rx/-/rx-4.1.0.tgz#a5f13ff79ef3b740fe30aa803fb09f98805d4782"
"semver@2 >=2.2.1 || 3.x || 4 || 5", "semver@2 || 3 || 4 || 5", "semver@2.x || 3.x || 4 || 5", "semver@4 || 5", semver@5.3.0, "semver@^2.3.0 || 3.x || 4 || 5":
version "5.3.0"
resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f"
semver@5.1.0, semver@~5.1.0:
"semver@2 >=2.2.1 || 3.x || 4 || 5", "semver@2 || 3 || 4 || 5", "semver@2.x || 3.x || 4 || 5", "semver@4 || 5", semver@5.1.0, "semver@^2.3.0 || 3.x || 4 || 5", semver@~5.1.0:
version "5.1.0"
resolved "https://registry.yarnpkg.com/semver/-/semver-5.1.0.tgz#85f2cf8550465c4df000cf7d86f6b054106ab9e5"
semver@5.3.0:
version "5.3.0"
resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f"
semver@^4.0.3, semver@^4.1.0:
version "4.3.6"
resolved "https://registry.yarnpkg.com/semver/-/semver-4.3.6.tgz#300bc6e0e86374f7ba61068b5b1ecd57fc6532da"
@ -1838,6 +1889,16 @@ sha@~2.0.1:
graceful-fs "^4.1.2"
readable-stream "^2.0.2"
shebang-command@^1.2.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea"
dependencies:
shebang-regex "^1.0.0"
shebang-regex@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3"
shelljs@0.7.6:
version "0.7.6"
resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.7.6.tgz#379cccfb56b91c8601e4793356eb5382924de9ad"
@ -1850,7 +1911,7 @@ sigmund@~1.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/sigmund/-/sigmund-1.0.1.tgz#3ff21f198cad2175f9f3b781853fd94d0d19b590"
signal-exit@^3.0.2:
signal-exit@^3.0.0, signal-exit@^3.0.2:
version "3.0.2"
resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d"
@ -1917,21 +1978,22 @@ storyboard-core@^3.0.0-rc.2:
timm "^1.2.3"
uuid "^3.0.1"
storyboard-listener-console@^3.0.0-rc.2:
version "3.0.0-rc.2"
resolved "https://registry.yarnpkg.com/storyboard-listener-console/-/storyboard-listener-console-3.0.0-rc.2.tgz#3e854d13af2b7b589699bf0306bb355a38264eb7"
storyboard-listener-console-parallel@^3.1.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/storyboard-listener-console-parallel/-/storyboard-listener-console-parallel-3.1.0.tgz#97f96f78c51f1e9147af18943ec506777afc3ee7"
dependencies:
terminal-kit "^0.26.1"
timm "^1.2.3"
storyboard-preset-console@^3.0.0:
storyboard-listener-console@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/storyboard-preset-console/-/storyboard-preset-console-3.0.0.tgz#ae3f098e5b386876b2d41ab7c89d55bfd3ac0a44"
resolved "https://registry.yarnpkg.com/storyboard-listener-console/-/storyboard-listener-console-3.0.0.tgz#feeb54e25fc5def0f41145d2dea23f6003fff2cd"
dependencies:
storyboard-listener-console "^3.0.0-rc.2"
timm "^1.2.3"
storyboard@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/storyboard/-/storyboard-3.0.0.tgz#839515a88fbefb89a22f9055d3df5b0d5e6e9099"
storyboard@^3.1.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/storyboard/-/storyboard-3.1.0.tgz#00053f50b2df3657a531d26b996e56a606323936"
dependencies:
storyboard-core "^3.0.0-rc.2"
@ -1968,6 +2030,10 @@ strip-ansi@^3.0.0, strip-ansi@~3.0.1:
dependencies:
ansi-regex "^2.0.0"
strip-eof@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf"
supports-color@^0.2.0:
version "0.2.0"
resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-0.2.0.tgz#d92de2694eb3f67323973d7ae3d8b55b4c22190a"
@ -2118,7 +2184,7 @@ weak-map@1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/weak-map/-/weak-map-1.0.0.tgz#b66e56a9df0bd25a76bbf1b514db129080614a37"
which@1, which@~1.2.11, which@~1.2.4:
which@1, which@^1.2.9, which@~1.2.11, which@~1.2.4:
version "1.2.12"
resolved "https://registry.yarnpkg.com/which/-/which-1.2.12.tgz#de67b5e450269f194909ef23ece4ebe416fa1192"
dependencies:

Loading…
Cancel
Save