From 81fd08a8834ac82ef5138eaeeee8da8c22c1a5a7 Mon Sep 17 00:00:00 2001 From: Rodolphe Stoclin Date: Wed, 2 Nov 2016 16:32:40 +0100 Subject: [PATCH] refactor(es2015+): refactoring in es2015+ syntax --- .circleci/config.yml | 5 - .eslintrc | 4 +- .gitignore | 2 + .npmignore | 21 +- .travis.yml | 1 - __tests__/cli-test.js | 88 +- __tests__/node-minify-test.js | 352 +-- appveyor.yml | 1 - bin/cli.js | 12 +- lib/compress.js | 148 - lib/deprecated.js | 56 - package-lock.json | 2505 +++++++++++------ package.json | 47 +- ...ure_compiler-v20131014-legacy-java-1.6.jar | Bin .../google_closure_compiler-v20151216.jar | Bin {lib => src}/binaries/yuicompressor-2.4.7.jar | Bin {lib => src}/cli/compress.js | 31 +- {lib => src}/cli/index.js | 79 +- {lib => src}/cli/spinner.js | 34 +- src/compress.js | 137 + {lib => src}/compressors/babel-minify.js | 30 +- {lib => src}/compressors/butternut.js | 24 +- {lib => src}/compressors/clean-css.js | 24 +- {lib => src}/compressors/csso.js | 24 +- {lib => src}/compressors/gcc-java.js | 40 +- {lib => src}/compressors/gcc.js | 43 +- src/compressors/index.js | 9 + {lib => src}/compressors/no-compress.js | 20 +- {lib => src}/compressors/sqwish.js | 24 +- {lib => src}/compressors/uglifyjs.js | 24 +- {lib => src}/compressors/yui.js | 32 +- {lib => src}/node-minify.js | 26 +- {lib => src}/runner.js | 48 +- {lib => src}/setup.js | 76 +- {lib => src}/utils.js | 68 +- yarn.lock | 573 +++- 36 files changed, 2875 insertions(+), 1733 deletions(-) delete mode 100644 lib/compress.js delete mode 100644 lib/deprecated.js rename {lib => src}/binaries/google_closure_compiler-v20131014-legacy-java-1.6.jar (100%) rename {lib => src}/binaries/google_closure_compiler-v20151216.jar (100%) rename {lib => src}/binaries/yuicompressor-2.4.7.jar (100%) rename {lib => src}/cli/compress.js (61%) rename {lib => src}/cli/index.js (67%) rename {lib => src}/cli/spinner.js (63%) create mode 100644 src/compress.js rename {lib => src}/compressors/babel-minify.js (68%) rename {lib => src}/compressors/butternut.js (69%) rename {lib => src}/compressors/clean-css.js (61%) rename {lib => src}/compressors/csso.js (63%) rename {lib => src}/compressors/gcc-java.js (62%) rename {lib => src}/compressors/gcc.js (77%) create mode 100644 src/compressors/index.js rename {lib => src}/compressors/no-compress.js (75%) rename {lib => src}/compressors/sqwish.js (63%) rename {lib => src}/compressors/uglifyjs.js (69%) rename {lib => src}/compressors/yui.js (62%) rename {lib => src}/node-minify.js (60%) rename {lib => src}/runner.js (69%) rename {lib => src}/setup.js (77%) rename {lib => src}/utils.js (52%) diff --git a/.circleci/config.yml b/.circleci/config.yml index 012b1a0eb..ca1720707 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -2,7 +2,6 @@ workflows: version: 2 node-multi-build: jobs: - - node-v4 - node-v6 - node-v8 - node-v9 @@ -42,10 +41,6 @@ jobs: - /usr/local/share/.cache/yarn - /root/.cache/yarn - node-v4: - <<: *node-base - docker: - - image: circleci/node:4-browsers node-v6: <<: *node-base docker: diff --git a/.eslintrc b/.eslintrc index e1502ce8c..6cebb6166 100644 --- a/.eslintrc +++ b/.eslintrc @@ -7,7 +7,9 @@ "extends": ["eslint:recommended", "prettier"], "rules": { "prettier/prettier": "error", - "no-console": 0 + "no-console": 0, + "no-var": "error", + "strict": [2, "never"] }, "parserOptions": { "sourceType": "module" diff --git a/.gitignore b/.gitignore index 6c8620246..d16e873ec 100644 --- a/.gitignore +++ b/.gitignore @@ -5,3 +5,5 @@ node_modules coverage .history +dist +lib diff --git a/.npmignore b/.npmignore index 950546552..67a89b0d0 100644 --- a/.npmignore +++ b/.npmignore @@ -1,19 +1,2 @@ -.DS_Store -.idea -.vscode -._* -.history -node_modules -coverage -examples -__tests__ -.circleci -.editorconfig -.gitignore -.npmignore -.npmrc -.travis.yml -.yarnrc -appveyor.yml -codecov.yml -yarn.lock +* +!lib/* diff --git a/.travis.yml b/.travis.yml index 4abe64767..b0fa5d1dc 100644 --- a/.travis.yml +++ b/.travis.yml @@ -10,7 +10,6 @@ node_js: - 9 - 8 - 6 - - 4 before_install: - curl -o- -L https://yarnpkg.com/install.sh | bash -s -- --version 1.2.1 diff --git a/__tests__/cli-test.js b/__tests__/cli-test.js index 6038b6583..bd3a72910 100644 --- a/__tests__/cli-test.js +++ b/__tests__/cli-test.js @@ -1,65 +1,63 @@ -'use strict'; +/*! + * node-minify + * Copyright(c) 2011-2018 Rodolphe Stoclin + * MIT Licensed + */ jasmine.DEFAULT_TIMEOUT_INTERVAL = 30000; -var childProcess = require('child_process'); -var nodeMinify = require('../lib/node-minify'); -var cli = require('../lib/cli'); -var utils = require('../lib/utils'); +import childProcess from 'child_process'; +import { minify } from '../src/node-minify'; +import * as cli from '../src/cli'; +import { utils } from '../src/utils'; -describe('cli', function() { - test('should minify to have been called', function() { - var spy = jest.spyOn(nodeMinify, 'minify'); - cli({ +describe('cli', () => { + test('should minify to have been called', () => { + const spy = jest.spyOn(cli, 'run'); + cli.run({ compressor: 'gcc', input: 'examples/public/js/sample.js', output: 'examples/public/js-dist/babili-es6.js' }); expect(spy).toHaveBeenCalled(); }); - test('should minify to have been called with all compressors', function() { - var spy = jest.spyOn(nodeMinify, 'minify'); - return cli({ - compressor: 'all', - input: 'examples/public/js/sample.js', - output: 'examples/public/js-dist/babili-es6.js' - }).then(function() { - expect(spy).toHaveBeenCalled(); - }); + test('should minify to have been called with all compressors', () => { + const spy = jest.spyOn(cli, 'run'); + return cli + .run({ + compressor: 'all', + input: 'examples/public/js/sample.js', + output: 'examples/public/js-dist/babili-es6.js' + }) + .then(() => expect(spy).toHaveBeenCalled()); }); }); -describe('cli error', function() { - beforeEach(function() { - spyOn(childProcess, 'spawn').and.throwError('UnsupportedClassVersionError'); - }); - test('should minify to throw with all compressors', function() { - var spy = jest.spyOn(nodeMinify, 'minify'); - return cli({ - compressor: 'all', - input: 'examples/public/js/sample.js', - output: 'examples/public/js-dist/babili-es6.js' - }).catch(function(err) { - expect(spy).toHaveBeenCalled(); - return expect(err.message).toMatch( - /(UnsupportedClassVersionError)|(Latest Google Closure Compiler requires Java >= 1.7, please update Java or use gcc-legacy)/ - ); - }); +describe('cli error', () => { + beforeEach(() => spyOn(childProcess, 'spawn').and.throwError('UnsupportedClassVersionError')); + test('should minify to throw with all compressors', () => { + const spy = jest.spyOn(cli, 'run'); + return cli + .run({ + compressor: 'all', + input: 'examples/public/js/sample.js', + output: 'examples/public/js-dist/babili-es6.js' + }) + .catch(err => { + expect(spy).toHaveBeenCalled(); + return expect(err.message).toMatch( + /(UnsupportedClassVersionError)|(Latest Google Closure Compiler requires Java >= 1.7, please update Java or use gcc-legacy)/ + ); + }); }); }); -describe('pretty bytes', function() { - test('should throw when not a number', function() { - expect(function() { - utils.prettyBytes('a'); - }).toThrow(); +describe('pretty bytes', () => { + test('should throw when not a number', () => { + expect(() => utils.prettyBytes('a')).toThrow(); }); - test('should return a negative number', function() { - expect(utils.prettyBytes(-1)).toBe('-1 B'); - }); + test('should return a negative number', () => expect(utils.prettyBytes(-1)).toBe('-1 B')); - test('should return 0', function() { - expect(utils.prettyBytes(0)).toBe('0 B'); - }); + test('should return 0', () => expect(utils.prettyBytes(0)).toBe('0 B')); }); diff --git a/__tests__/node-minify-test.js b/__tests__/node-minify-test.js index 4a96df3d7..3a3b93b1d 100644 --- a/__tests__/node-minify-test.js +++ b/__tests__/node-minify-test.js @@ -4,37 +4,35 @@ * MIT Licensed */ -'use strict'; - jasmine.DEFAULT_TIMEOUT_INTERVAL = 30000; -var childProcess = require('child_process'); -var mkdirp = require('mkdirp'); -var nodeMinify = require('../lib/node-minify'); +import childProcess from 'child_process'; +import mkdirp from 'mkdirp'; +import { minify } from '../src/node-minify'; -var oneFile = __dirname + '/../examples/public/js/sample.js'; -var filesArray = [__dirname + '/../examples/public/js/sample.js', __dirname + '/../examples/public/js/sample2.js']; -var filesArrayWithWildcards = ['sample.js', 'sample2.js', '**/*.js']; -var filesArrayWithWildcards2 = [ +const oneFile = __dirname + '/../examples/public/js/sample.js'; +const filesArray = [__dirname + '/../examples/public/js/sample.js', __dirname + '/../examples/public/js/sample2.js']; +const filesArrayWithWildcards = ['sample.js', 'sample2.js', '**/*.js']; +const filesArrayWithWildcards2 = [ __dirname + '/../examples/public/js/sample.js', __dirname + '/../examples/public/js/sample2.js', __dirname + '/../examples/public/js/**/*.js' ]; -var fileJSOut = __dirname + '/../examples/public/dist/sample.js'; -var fileCSS = __dirname + '/../examples/public/css/sample.css'; -var fileCSSArray = [ +const fileJSOut = __dirname + '/../examples/public/dist/sample.js'; +const fileCSS = __dirname + '/../examples/public/css/sample.css'; +const fileCSSArray = [ __dirname + '/../examples/public/css/sample.css', __dirname + '/../examples/public/css/sample2.css' ]; -var fileCSSArrayWithWildcards = ['sample.css', 'sample2.css', '/**/*.css']; -var fileCSSArrayWithWildcards2 = [ +const fileCSSArrayWithWildcards = ['sample.css', 'sample2.css', '/**/*.css']; +const fileCSSArrayWithWildcards2 = [ __dirname + '/../examples/public/css/sample.css', __dirname + '/../examples/public/css/sample2.css', __dirname + '/**/*.css' ]; -var fileCSSOut = __dirname + '/../examples/public/dist/sample.css'; +const fileCSSOut = __dirname + '/../examples/public/dist/sample.css'; -var tests = { +const tests = { concat: [ { it: 'should concat javascript and no compress and an array of file', @@ -406,7 +404,7 @@ var tests = { ] }; -var runOneTest = function(options, compressor, sync) { +const runOneTest = (options, compressor, sync) => { options = JSON.parse(JSON.stringify(options)); options.minify.compressor = options.minify.compressor.replace('{compressor}', compressor); @@ -416,79 +414,79 @@ var runOneTest = function(options, compressor, sync) { options.minify.sync = true; } - test(options.it.replace('{compressor}', compressor), function() { - return new Promise(function(resolve) { - options.minify.callback = function(err, min) { + test(options.it.replace('{compressor}', compressor), () => { + return new Promise(resolve => { + options.minify.callback = (err, min) => { resolve(err, min); }; - nodeMinify.minify(options.minify); - }).then(function(err, min) { + minify(options.minify); + }).then((err, min) => { expect(err).toBeNull(); expect(min).not.toBeNull(); }); }); }; -describe('node-minify', function() { +describe('node-minify', () => { mkdirp('/tmp/'); - describe('Fake binary', function() { - test('should throw an error if binary does not exist', function() { - var options = {}; + describe('Fake binary', () => { + test('should throw an error if binary does not exist', () => { + const options = {}; options.minify = { compressor: 'fake', input: __dirname + '/../examples/public/js/**/*.js', output: fileJSOut }; - return nodeMinify.minify(options.minify).catch(function(err) { + return minify(options.minify).catch(err => { return expect(err.toString()).toEqual('Error: Type "fake" does not exist'); }); }); }); - describe('No mandatories', function() { - test('should throw an error if no compressor', function() { - var options = {}; + describe('No mandatories', () => { + test('should throw an error if no compressor', () => { + const options = {}; options.minify = { input: __dirname + '/../examples/public/js/**/*.js', output: fileJSOut }; - return nodeMinify.minify(options.minify).catch(function(err) { + return minify(options.minify).catch(err => { return expect(err.toString()).toEqual('Error: compressor is mandatory.'); }); }); - test('should throw an error if no input', function() { - var options = {}; + test('should throw an error if no input', () => { + const options = {}; options.minify = { compressor: 'no-compress', output: fileJSOut }; - return nodeMinify.minify(options.minify).catch(function(err) { + return minify(options.minify).catch(err => { return expect(err.toString()).toEqual('Error: input is mandatory.'); }); }); - test('should throw an error if no output', function() { - var options = {}; + test('should throw an error if no output', () => { + const options = {}; options.minify = { compressor: 'no-compress', input: __dirname + '/../examples/public/js/**/*.js' }; - return nodeMinify.minify(options.minify).catch(function(err) { + return minify(options.minify).catch(err => { return expect(err.toString()).toEqual('Error: output is mandatory.'); }); }); }); - describe('Create errors', function() { - test('should callback an error if gcc with bad options', function() { - var options = {}; + describe('Create errors', () => { + test('should callback an error if gcc with bad options', () => { + const options = {}; options.minify = { compressor: 'gcc-java', input: oneFile, @@ -496,18 +494,18 @@ describe('node-minify', function() { options: { fake: true }, - callback: function() {} + callback: () => {} }; - var spy = jest.spyOn(options.minify, 'callback'); + const spy = jest.spyOn(options.minify, 'callback'); - return nodeMinify.minify(options.minify).catch(function(err) { + return minify(options.minify).catch(err => { expect(spy).toHaveBeenCalled(); return expect(err.toString()).toMatch('"--fake" is not a valid option'); }); }); - test('should callback an error if gcc with bad options and sync', function() { - var options = {}; + test('should callback an error if gcc with bad options and sync', () => { + const options = {}; options.minify = { compressor: 'gcc-java', input: oneFile, @@ -518,13 +516,13 @@ describe('node-minify', function() { } }; - return nodeMinify.minify(options.minify).catch(function(err) { + return minify(options.minify).catch(err => { return expect(err.toString()).toMatch('"--fake" is not a valid option'); }); }); - test('should callback an error if yui with bad options', function() { - var options = {}; + test('should callback an error if yui with bad options', () => { + const options = {}; options.minify = { compressor: 'yui-js', input: oneFile, @@ -534,13 +532,13 @@ describe('node-minify', function() { } }; - return nodeMinify.minify(options.minify).catch(function(err) { + return minify(options.minify).catch(err => { return expect(err.toString()).toMatch('Usage: java -jar'); }); }); - test('should callback an error if yui with bad options and sync', function() { - var options = {}; + test('should callback an error if yui with bad options and sync', () => { + const options = {}; options.minify = { compressor: 'yui-js', input: oneFile, @@ -551,18 +549,18 @@ describe('node-minify', function() { } }; - return nodeMinify.minify(options.minify).catch(function(err) { + return minify(options.minify).catch(err => { return expect(err.toString()).toMatch('Usage: java -jar'); }); }); }); - describe('Create sync errors', function() { - beforeEach(function() { + describe('Create sync errors', () => { + beforeEach(() => { spyOn(childProcess, 'spawnSync').and.throwError('UnsupportedClassVersionError'); }); - test('should callback an error on spawnSync', function() { - var options = {}; + test('should callback an error on spawnSync', () => { + const options = {}; options.minify = { compressor: 'gcc-java', input: oneFile, @@ -570,7 +568,7 @@ describe('node-minify', function() { sync: true }; - return nodeMinify.minify(options.minify).catch(function(err) { + return minify(options.minify).catch(err => { return expect(err.toString()).toEqual( 'Latest Google Closure Compiler requires Java >= 1.7, please' + ' update Java or use gcc-legacy' ); @@ -578,156 +576,96 @@ describe('node-minify', function() { }); }); - describe('Create async errors', function() { - beforeEach(function() { + describe('Create async errors', () => { + beforeEach(() => { spyOn(childProcess, 'spawn').and.throwError('error manual test'); }); - test('should callback an error on spawn', function() { - var options = {}; + test('should callback an error on spawn', () => { + const options = {}; options.minify = { compressor: 'gcc-java', input: oneFile, output: fileJSOut, sync: false, - callback: function() {} + callback: () => {} }; - var spy = jest.spyOn(options.minify, 'callback'); + const spy = jest.spyOn(options.minify, 'callback'); - return nodeMinify.minify(options.minify).catch(function(err) { + return minify(options.minify).catch(err => { expect(spy).toHaveBeenCalled(); return expect(err.toString()).toEqual('Error: error manual test'); }); }); }); - describe('Deprecated', function() { - test('should show a deprecated message', function(done) { - var options = {}; - options.minify = { - compressor: 'uglifyjs', - input: __dirname + '/../examples/public/js/**/*.js', - output: fileJSOut - }; - - options.minify.callback = function(err, min) { - expect(err).toBeNull(); - expect(min).not.toBeNull(); - done(); - }; - - new nodeMinify.minify(options.minify); - }); - - test('should show a deprecated message for babili', function(done) { - var options = {}; - options.minify = { - compressor: 'babili', - input: __dirname + '/../examples/public/js/**/*.js', - output: fileJSOut - }; - - options.minify.callback = function(err, min) { - expect(err).toBeNull(); - expect(min).not.toBeNull(); - done(); - }; - - new nodeMinify.minify(options.minify); - }); - - test('should show throw on type option', function() { - var options = {}; + describe('Mandatory', () => { + test('should show throw on type option', () => { + const options = {}; options.minify = { type: 'uglifyjs', input: __dirname + '/../examples/public/js/**/*.js', output: fileJSOut, - callback: function() {} + callback: () => {} }; - return nodeMinify.minify(options.minify).catch(function(err) { + return minify(options.minify).catch(err => { return expect(err.toString()).toEqual('Error: compressor is mandatory.'); }); }); - - test('should show throw on type fileIn', function() { - var options = {}; - options.minify = { - compressor: 'uglifyjs', - fileIn: __dirname + '/../examples/public/js/**/*.js', - output: fileJSOut - }; - - return nodeMinify.minify(options.minify).catch(function(err) { - return expect(err.toString()).toEqual('Error: input is mandatory.'); - }); - }); - - test('should show throw on type fileOut', function() { - var options = {}; - options.minify = { - compressor: 'uglifyjs', - input: __dirname + '/../examples/public/js/**/*.js', - fileOut: fileJSOut - }; - - return nodeMinify.minify(options.minify).catch(function(err) { - return expect(err.toString()).toEqual('Error: output is mandatory.'); - }); - }); }); - describe('use_strict', function() { - beforeEach(function() { - this.originalExecArgv = JSON.parse(JSON.stringify(process.execArgv)); + describe('use_strict', () => { + let originalExecArgv; + beforeEach(() => { + originalExecArgv = JSON.parse(JSON.stringify(process.execArgv)); process.execArgv.push('--use_strict'); }); - afterEach(function() { - process.execArgv = this.originalExecArgv; + afterEach(() => { + process.execArgv = originalExecArgv; }); - test('should not throw with --use_strict flag', function(done) { + test('should not throw with --use_strict flag', done => { jest.resetModules(); - var nodeMinify = require('../lib/node-minify'); - var options = {}; + const nodeMinify = require('../src/node-minify').minify; + const options = {}; options.minify = { compressor: 'gcc', input: __dirname + '/../examples/public/js/sample.js', output: fileJSOut }; - options.minify.callback = function(err, min) { + options.minify.callback = (err, min) => { expect(err).toBeNull(); expect(min).not.toBeNull(); done(); }; - - new nodeMinify.minify(options.minify); + nodeMinify(options.minify); }); }); - describe('Concatenation', function() { - tests.concat.forEach(function(o) { + describe('Concatenation', () => { + tests.concat.forEach(o => { runOneTest(o, 'no-compress'); }); - tests.concat.forEach(function(o) { + tests.concat.forEach(o => { runOneTest(o, 'no-compress', true); }); }); - describe('Babel-minify', function() { - tests.commonjs.forEach(function(o) { + describe('Babel-minify', () => { + tests.commonjs.forEach(o => { runOneTest(o, 'babel-minify'); }); - tests.babelMinify.forEach(function(o) { + tests.babelMinify.forEach(o => { runOneTest(o, 'babel-minify'); }); - tests.commonjs.forEach(function(o) { + tests.commonjs.forEach(o => { runOneTest(o, 'babel-minify', true); }); - tests.babelMinify.forEach(function(o) { + tests.babelMinify.forEach(o => { runOneTest(o, 'babel-minify', true); }); - test('should compress with some options', function(done) { - var options = {}; + test('should compress with some options', done => { + const options = {}; options.minify = { compressor: 'babel-minify', input: __dirname + '/../examples/public/js/**/*.js', @@ -737,41 +675,41 @@ describe('node-minify', function() { } }; - options.minify.callback = function(err, min) { + options.minify.callback = (err, min) => { expect(err).toBeNull(); expect(min).not.toBeNull(); done(); }; - nodeMinify.minify(options.minify); + minify(options.minify); }); }); - describe('Butternut', function() { - tests.commonjs.forEach(function(o) { + describe('Butternut', () => { + tests.commonjs.forEach(o => { runOneTest(o, 'butternut'); }); - tests.butternut.forEach(function(o) { + tests.butternut.forEach(o => { runOneTest(o, 'butternut'); }); - tests.commonjs.forEach(function(o) { + tests.commonjs.forEach(o => { runOneTest(o, 'butternut', true); }); - tests.butternut.forEach(function(o) { + tests.butternut.forEach(o => { runOneTest(o, 'butternut', true); }); }); - describe('GCC', function() { - tests.commonjs.forEach(function(o) { + describe('GCC', () => { + tests.commonjs.forEach(o => { runOneTest(o, 'gcc'); }); - tests.commonjs.forEach(function(o) { + tests.commonjs.forEach(o => { runOneTest(o, 'gcc', true); }); - test('should compress with some options', function(done) { - var options = {}; + test('should compress with some options', done => { + const options = {}; options.minify = { compressor: 'gcc', input: __dirname + '/../examples/public/js/**/*.js', @@ -782,26 +720,26 @@ describe('node-minify', function() { } }; - options.minify.callback = function(err, min) { + options.minify.callback = (err, min) => { expect(err).toBeNull(); expect(min).not.toBeNull(); done(); }; - nodeMinify.minify(options.minify); + minify(options.minify); }); }); - describe('GCC Java', function() { - tests.commonjs.forEach(function(o) { + describe('GCC Java', () => { + tests.commonjs.forEach(o => { runOneTest(o, 'gcc-java'); }); - tests.commonjs.forEach(function(o) { + tests.commonjs.forEach(o => { runOneTest(o, 'gcc-java', true); }); - test('should compress with some options', function(done) { - var options = {}; + test('should compress with some options', done => { + const options = {}; options.minify = { compressor: 'gcc-java', input: __dirname + '/../examples/public/js/**/*.js', @@ -811,26 +749,26 @@ describe('node-minify', function() { } }; - options.minify.callback = function(err, min) { + options.minify.callback = (err, min) => { expect(err).toBeNull(); expect(min).not.toBeNull(); done(); }; - nodeMinify.minify(options.minify); + minify(options.minify); }); }); - describe('GCC Legacy', function() { - tests.commonjs.forEach(function(o) { + describe('GCC Legacy', () => { + tests.commonjs.forEach(o => { runOneTest(o, 'gcc-legacy'); }); - tests.commonjs.forEach(function(o) { + tests.commonjs.forEach(o => { runOneTest(o, 'gcc-legacy', true); }); - test('should compress with some options', function(done) { - var options = {}; + test('should compress with some options', done => { + const options = {}; options.minify = { compressor: 'gcc-legacy', input: __dirname + '/../examples/public/js/**/*.js', @@ -840,33 +778,33 @@ describe('node-minify', function() { } }; - options.minify.callback = function(err, min) { + options.minify.callback = (err, min) => { expect(err).toBeNull(); expect(min).not.toBeNull(); done(); }; - nodeMinify.minify(options.minify); + minify(options.minify); }); }); - describe('YUI', function() { - tests.commonjs.forEach(function(o) { + describe('YUI', () => { + tests.commonjs.forEach(o => { runOneTest(o, 'yui-js'); }); - tests.commonjs.forEach(function(o) { + tests.commonjs.forEach(o => { runOneTest(o, 'yui-js', true); }); - tests.commoncss.forEach(function(o) { + tests.commoncss.forEach(o => { runOneTest(o, 'yui-css'); }); - tests.commoncss.forEach(function(o) { + tests.commoncss.forEach(o => { runOneTest(o, 'yui', true); }); - test('should compress with some options', function(done) { - var options = {}; + test('should compress with some options', done => { + const options = {}; options.minify = { compressor: 'yui-js', input: __dirname + '/../examples/public/js/**/*.js', @@ -876,26 +814,26 @@ describe('node-minify', function() { } }; - options.minify.callback = function(err, min) { + options.minify.callback = (err, min) => { expect(err).toBeNull(); expect(min).not.toBeNull(); done(); }; - nodeMinify.minify(options.minify); + minify(options.minify); }); }); - describe('UglifyJS', function() { - tests.commonjs.forEach(function(o) { + describe('UglifyJS', () => { + tests.commonjs.forEach(o => { runOneTest(o, 'uglifyjs'); }); - tests.commonjs.forEach(function(o) { + tests.commonjs.forEach(o => { runOneTest(o, 'uglifyjs', true); }); - test('should create a source map', function(done) { - var options = {}; + test('should create a source map', done => { + const options = {}; options.minify = { compressor: 'uglifyjs', input: __dirname + '/../examples/public/js/**/*.js', @@ -908,17 +846,17 @@ describe('node-minify', function() { } }; - options.minify.callback = function(err, min) { + options.minify.callback = (err, min) => { expect(err).toBeNull(); expect(min).not.toBeNull(); done(); }; - nodeMinify.minify(options.minify); + minify(options.minify); }); - test('should compress with some options', function(done) { - var options = {}; + test('should compress with some options', done => { + const options = {}; options.minify = { compressor: 'uglifyjs', input: __dirname + '/../examples/public/js/**/*.js', @@ -928,40 +866,40 @@ describe('node-minify', function() { } }; - options.minify.callback = function(err, min) { + options.minify.callback = (err, min) => { expect(err).toBeNull(); expect(min).not.toBeNull(); done(); }; - nodeMinify.minify(options.minify); + minify(options.minify); }); }); - describe('Clean-css', function() { - tests.commoncss.forEach(function(o) { + describe('Clean-css', () => { + tests.commoncss.forEach(o => { runOneTest(o, 'clean-css'); }); - tests.commoncss.forEach(function(o) { + tests.commoncss.forEach(o => { runOneTest(o, 'clean-css', true); }); }); - describe('CSSO', function() { - tests.commoncss.forEach(function(o) { + describe('CSSO', () => { + tests.commoncss.forEach(o => { runOneTest(o, 'csso'); }); - tests.commoncss.forEach(function(o) { + tests.commoncss.forEach(o => { runOneTest(o, 'csso', true); }); }); - describe('Sqwish', function() { - tests.commoncss.forEach(function(o) { + describe('Sqwish', () => { + tests.commoncss.forEach(o => { runOneTest(o, 'sqwish'); }); - tests.commoncss.forEach(function(o) { + tests.commoncss.forEach(o => { runOneTest(o, 'sqwish', true); }); }); diff --git a/appveyor.yml b/appveyor.yml index 23f5ce92a..6f9b24cf6 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -3,7 +3,6 @@ environment: - node_version: "9" - node_version: "8" - node_version: "6" - - node_version: "4" skip_tags: true diff --git a/bin/cli.js b/bin/cli.js index 153dc863c..2f63ee44d 100755 --- a/bin/cli.js +++ b/bin/cli.js @@ -6,10 +6,10 @@ * MIT Licensed */ -var updateNotifier = require('update-notifier'); -var program = require('commander'); -var cli = require('../lib/cli'); -var pkg = require('../package.json'); +const updateNotifier = require('update-notifier'); +const program = require('commander'); +const cli = require('../lib/cli'); +const pkg = require('../package.json'); updateNotifier({ pkg: pkg }).notify(); @@ -32,7 +32,7 @@ program.on('--help', function() { program.parse(process.argv); -var options = program.opts(); +const options = program.opts(); /** * Show help if missing mandatory. @@ -42,7 +42,7 @@ if (!options.compressor || !options.input || !options.output) { program.help(); } -cli(options).catch(function(err) { +cli.run(options).catch(err => { console.error(err); process.exit(1); }); diff --git a/lib/compress.js b/lib/compress.js deleted file mode 100644 index 623e4b84f..000000000 --- a/lib/compress.js +++ /dev/null @@ -1,148 +0,0 @@ -/*! - * node-minify - * Copyright(c) 2011-2018 Rodolphe Stoclin - * MIT Licensed - */ - -'use strict'; - -/** - * Module dependencies. - */ - -var fs = require('fs'); -var mkdirp = require('mkdirp'); -var utils = require('../lib/utils'); -var babelMinify = require('./compressors/babel-minify'); -var butternut = require('./compressors/butternut'); -var cleanCSS = require('./compressors/clean-css'); -var csso = require('./compressors/csso'); -var gcc; -var gccJava = require('./compressors/gcc-java'); -var noCompress = require('./compressors/no-compress'); -var sqwish = require('./compressors/sqwish'); -var uglifyjs = require('./compressors/uglifyjs'); -var yui = require('./compressors/yui'); - -if ((process.execArgv && process.execArgv.indexOf('--use_strict') > -1) || !utils.isNodeV4AndHigher()) { - gcc = require('./compressors/gcc-java'); -} else { - gcc = require('./compressors/gcc'); -} - -/** - * Mapping input compressors to functions - * to be executed - */ - -var compressorsMap = { - 'babel-minify': babelMinify, - butternut: butternut, - yui: function(settings, data, callback) { - return yui('css', settings, data, callback); - }, - 'yui-css': function(settings, data, callback) { - return yui('css', settings, data, callback); - }, - 'yui-js': function(settings, data, callback) { - return yui('js', settings, data, callback); - }, - gcc: gcc, - 'gcc-java': function(settings, data, callback) { - return gccJava(settings, data, callback, false); - }, - 'gcc-legacy': function(settings, data, callback) { - return gccJava(settings, data, callback, true); - }, - uglifyjs: uglifyjs, - sqwish: sqwish, - 'clean-css': cleanCSS, - csso: csso, - 'no-compress': noCompress, - /** - * @deprecated since version 2.4.0 - babili was renamed to babel-minify - */ - babili: babelMinify -}; - -/** - * Expose `compress()`. - */ - -module.exports = compress; - -/** - * Run compressor. - * - * @param {Object} settings - */ - -function compress(settings) { - if (typeof compressorsMap[settings.compressor] !== 'function') { - throw new Error('Type "' + settings.compressor + '" does not exist'); - } - - createDirectory(settings.output); - var content = getContentFromFiles(settings.input); - return settings.sync ? runSync(settings, content) : runAsync(settings, content); -} - -/** - * Run compressor in sync. - * - * @param {Object} settings - * @param {String} content - * @return {String} - */ - -function runSync(settings, content) { - return compressorsMap[settings.compressor](settings, content); -} - -/** - * Run compressor in async. - * - * @param {Object} settings - * @param {String} content - * @return {Promise} - */ - -function runAsync(settings, content) { - return new Promise(function(resolve, reject) { - compressorsMap[settings.compressor](settings, content, function(err, min) { - if (err) { - return reject(err); - } - resolve(min); - }); - }); -} - -/** - * Concatenate all input files and get the data. - * - * @param {String|Array} input - * @return {String} - */ - -function getContentFromFiles(input) { - if (!Array.isArray(input)) { - return fs.readFileSync(input, 'utf8'); - } - - return input - .map(function(path) { - return fs.readFileSync(path, 'utf8'); - }) - .join('\n'); -} - -/** - * Create folder of the target file. - * - * @param {String} file - Full path of the file - */ - -function createDirectory(file) { - mkdirp.sync(file.substr(0, file.lastIndexOf('/'))); -} diff --git a/lib/deprecated.js b/lib/deprecated.js deleted file mode 100644 index f41e6de0c..000000000 --- a/lib/deprecated.js +++ /dev/null @@ -1,56 +0,0 @@ -/*! - * node-minify - * Copyright(c) 2011-2018 Rodolphe Stoclin - * MIT Licensed - */ - -'use strict'; - -/** - * Module dependencies. - */ - -var deprecate = require('depd')('node-minify'); - -/** - * Expose `deprecated()`. - */ - -module.exports = deprecated; - -/** - * Deprecate some old syntax. - * - * @param {String} constructorName - * @param {Object} settings - */ - -function deprecated(constructorName, settings) { - if (constructorName === 'minify') { - deprecate( - 'Instantiate is no longer necessary.\n' + - 'new compressor.minify() is deprecated.\n' + - 'Please use:\n' + - '\n' + - ' var compressor = require("node-minify");\n' + - ' compressor.minify();\n' + - '\n' - ); - } - - if (settings.type) { - deprecate('type was renamed to compressor'); - } - - if (settings.fileIn) { - deprecate('fileIn was renamed to input'); - } - - if (settings.fileOut) { - deprecate('fileOut was renamed to output'); - } - - if (settings.compressor === 'babili') { - deprecate('babili was renamed to babel-minify'); - } -} diff --git a/package-lock.json b/package-lock.json index 09cce5304..d9fa9002b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4,6 +4,48 @@ "lockfileVersion": 1, "requires": true, "dependencies": { + "@babel/code-frame": { + "version": "7.0.0-beta.42", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0-beta.42.tgz", + "integrity": "sha512-L8i94FLSyaLQpRfDo/qqSm8Ndb44zMtXParXo0MebJICG1zoCCL4+GkzUOlB4BNTRSXXQdb3feam/qw7bKPipQ==", + "dev": true, + "requires": { + "@babel/highlight": "7.0.0-beta.42" + } + }, + "@babel/highlight": { + "version": "7.0.0-beta.42", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.0.0-beta.42.tgz", + "integrity": "sha512-X3Ur/A/lIbbP8W0pmwgqtDXIxhQmxPaiwY9SKP7kF9wvZfjZRwMvbJE92ozUhF3UDK3DCKaV7oGqmI1rP/zqWA==", + "dev": true, + "requires": { + "chalk": "2.3.2", + "esutils": "2.0.2", + "js-tokens": "3.0.2" + }, + "dependencies": { + "chalk": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.2.tgz", + "integrity": "sha512-ZM4j2/ld/YZDc3Ma8PgN7gyAk+kHMMMyzLNryCPGhWrsfAuDVeuid5bpRFTDgMH9JBK2lA4dyyAkkZYF/WcqDQ==", + "dev": true, + "requires": { + "ansi-styles": "3.2.1", + "escape-string-regexp": "1.0.5", + "supports-color": "5.3.0" + } + }, + "supports-color": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.3.0.tgz", + "integrity": "sha512-0aP01LLIskjKs3lq52EC0aGBAJhLq7B2Rd8HC/DR/PtNNpcLilNmHC12O+hu0usQpo7wtHNRqtrhBwtDb0+dNg==", + "dev": true, + "requires": { + "has-flag": "3.0.0" + } + } + } + }, "abab": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/abab/-/abab-1.0.4.tgz", @@ -13,8 +55,7 @@ "acorn": { "version": "5.5.3", "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.5.3.tgz", - "integrity": "sha512-jd5MkIUlbbmb07nXH0DT3y7rDVtkzDi4XZOUVWAer8ajmF/DTSSbl5oNFyDOl/OXA33Bl79+ypHhl2pN20VeOQ==", - "dev": true + "integrity": "sha512-jd5MkIUlbbmb07nXH0DT3y7rDVtkzDi4XZOUVWAer8ajmF/DTSSbl5oNFyDOl/OXA33Bl79+ypHhl2pN20VeOQ==" }, "acorn-globals": { "version": "3.1.0", @@ -97,9 +138,9 @@ "dev": true }, "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" }, "ansi-styles": { "version": "3.2.1", @@ -116,448 +157,242 @@ "dev": true }, "anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.2.tgz", + "integrity": "sha512-0XNayC8lTHQ2OI8aljNCN3sSx6hsr/1+rlcDAotXJR7C1oZZHCNsfpbKwMjRA3Uqb5tF1Rae2oloTr4xpq+WjA==", "dev": true, + "optional": true, "requires": { - "micromatch": "3.1.10", + "micromatch": "2.3.11", "normalize-path": "2.1.1" + } + }, + "app-root-path": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/app-root-path/-/app-root-path-2.0.1.tgz", + "integrity": "sha1-zWLc+OT9WkF+/GZNLlsQZTxlG0Y=", + "dev": true + }, + "append-transform": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-0.4.0.tgz", + "integrity": "sha1-126/jKlNJ24keja61EpLdKthGZE=", + "dev": true, + "requires": { + "default-require-extensions": "1.0.0" + } + }, + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "requires": { + "sprintf-js": "1.0.3" + } + }, + "argv": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/argv/-/argv-0.0.2.tgz", + "integrity": "sha1-7L0W+JSbFXGDcRsb2jNPN4QBhas=", + "dev": true + }, + "arr-diff": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", + "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", + "dev": true, + "requires": { + "arr-flatten": "1.1.0" + } + }, + "arr-flatten": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", + "dev": true + }, + "arr-union": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", + "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", + "dev": true + }, + "array-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-equal/-/array-equal-1.0.0.tgz", + "integrity": "sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM=", + "dev": true + }, + "array-union": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", + "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", + "dev": true, + "requires": { + "array-uniq": "1.0.3" + } + }, + "array-uniq": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", + "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", + "dev": true + }, + "array-unique": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", + "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", + "dev": true + }, + "arrify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", + "dev": true + }, + "asn1": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz", + "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=", + "dev": true + }, + "assert-plus": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz", + "integrity": "sha1-104bh+ev/A24qttwIfP+SBAasjQ=", + "dev": true + }, + "assign-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", + "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", + "dev": true + }, + "astral-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", + "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", + "dev": true + }, + "async": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.0.tgz", + "integrity": "sha512-xAfGg1/NTLBBKlHFmnd7PlmUW9KhVQIUuSrYem9xzFUZy13ScvtyGGejaae9iAVRiRq9+Cx7DPFaAAhCpyxyPw==", + "dev": true, + "requires": { + "lodash": "4.17.5" + } + }, + "async-each": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz", + "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0=", + "dev": true, + "optional": true + }, + "async-limiter": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz", + "integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg==", + "dev": true + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", + "dev": true + }, + "atob": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.0.tgz", + "integrity": "sha512-SuiKH8vbsOyCALjA/+EINmt/Kdl+TQPrtFgW7XZZcwtryFu9e5kQoX3bjCW6mIvGH1fbeAZZuvwGR5IlBRznGw==", + "dev": true + }, + "aws-sign2": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz", + "integrity": "sha1-FDQt0428yU0OW4fXY81jYSwOeU8=", + "dev": true + }, + "aws4": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.6.0.tgz", + "integrity": "sha1-g+9cqGCysy5KDe7e6MdxudtXRx4=", + "dev": true + }, + "babel-cli": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/babel-cli/-/babel-cli-6.18.0.tgz", + "integrity": "sha1-khF/NBrdnerZD2+n0Kl8DMCOwYY=", + "dev": true, + "requires": { + "babel-core": "6.26.0", + "babel-polyfill": "6.26.0", + "babel-register": "6.26.0", + "babel-runtime": "6.26.0", + "chokidar": "1.7.0", + "commander": "2.9.0", + "convert-source-map": "1.5.1", + "fs-readdir-recursive": "1.1.0", + "glob": "5.0.15", + "lodash": "4.17.5", + "output-file-sync": "1.1.2", + "path-is-absolute": "1.0.1", + "slash": "1.0.0", + "source-map": "0.5.7", + "v8flags": "2.1.1" }, "dependencies": { - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", - "dev": true - }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", - "dev": true - }, - "braces": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.1.tgz", - "integrity": "sha512-SO5lYHA3vO6gz66erVvedSCkp7AKWdv6VcQ2N4ysXfPxdAlxAMMAdwegGGcv1Bqwm7naF1hNdk5d6AAIEHV2nQ==", + "glob": { + "version": "5.0.15", + "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", + "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", "dev": true, "requires": { - "arr-flatten": "1.1.0", - "array-unique": "0.3.2", - "define-property": "1.0.0", - "extend-shallow": "2.0.1", - "fill-range": "4.0.0", - "isobject": "3.0.1", - "kind-of": "6.0.2", - "repeat-element": "1.1.2", - "snapdragon": "0.8.2", - "snapdragon-node": "2.1.1", - "split-string": "3.1.0", - "to-regex": "3.0.2" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "1.0.2" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "0.1.1" - } - } - } - }, - "expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", - "dev": true, - "requires": { - "debug": "2.6.9", - "define-property": "0.2.5", - "extend-shallow": "2.0.1", - "posix-character-classes": "0.1.1", - "regex-not": "1.0.2", - "snapdragon": "0.8.2", - "to-regex": "3.0.2" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "0.1.6" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "0.1.1" - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "0.1.6", - "is-data-descriptor": "0.1.4", - "kind-of": "5.1.0" - } - }, - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - } - } - }, - "extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "dev": true, - "requires": { - "array-unique": "0.3.2", - "define-property": "1.0.0", - "expand-brackets": "2.1.4", - "extend-shallow": "2.0.1", - "fragment-cache": "0.2.1", - "regex-not": "1.0.2", - "snapdragon": "0.8.2", - "to-regex": "3.0.2" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "1.0.2" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "0.1.1" - } - } - } - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dev": true, - "requires": { - "extend-shallow": "2.0.1", - "is-number": "3.0.0", - "repeat-string": "1.6.1", - "to-regex-range": "2.1.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "0.1.1" - } - } - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "requires": { - "kind-of": "3.2.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "1.1.6" - } - } - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "requires": { - "kind-of": "3.2.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "1.1.6" - } - } - } - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "3.2.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "1.1.6" - } - } - } - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "requires": { - "arr-diff": "4.0.0", - "array-unique": "0.3.2", - "braces": "2.3.1", - "define-property": "2.0.2", - "extend-shallow": "3.0.2", - "extglob": "2.0.4", - "fragment-cache": "0.2.1", - "kind-of": "6.0.2", - "nanomatch": "1.2.9", - "object.pick": "1.3.0", - "regex-not": "1.0.2", - "snapdragon": "0.8.2", - "to-regex": "3.0.2" + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" } } } }, - "app-root-path": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/app-root-path/-/app-root-path-2.0.1.tgz", - "integrity": "sha1-zWLc+OT9WkF+/GZNLlsQZTxlG0Y=", - "dev": true - }, - "append-transform": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-0.4.0.tgz", - "integrity": "sha1-126/jKlNJ24keja61EpLdKthGZE=", - "dev": true, + "babel-code-frame": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", + "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", "requires": { - "default-require-extensions": "1.0.0" + "chalk": "1.1.3", + "esutils": "2.0.2", + "js-tokens": "3.0.2" } }, - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, + "babel-core": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-6.26.0.tgz", + "integrity": "sha1-rzL3izGm/O8RnIew/Y2XU/A6C7g=", "requires": { - "sprintf-js": "1.0.3" - } - }, - "argv": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/argv/-/argv-0.0.2.tgz", - "integrity": "sha1-7L0W+JSbFXGDcRsb2jNPN4QBhas=", - "dev": true - }, - "arr-diff": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", - "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", - "dev": true, - "requires": { - "arr-flatten": "1.1.0" - } - }, - "arr-flatten": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", - "dev": true - }, - "arr-union": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", - "dev": true - }, - "array-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-equal/-/array-equal-1.0.0.tgz", - "integrity": "sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM=", - "dev": true - }, - "array-union": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", - "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", - "dev": true, - "requires": { - "array-uniq": "1.0.3" - } - }, - "array-uniq": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", - "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", - "dev": true - }, - "array-unique": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", - "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", - "dev": true - }, - "arrify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", - "dev": true - }, - "asn1": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz", - "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=", - "dev": true - }, - "assert-plus": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz", - "integrity": "sha1-104bh+ev/A24qttwIfP+SBAasjQ=", - "dev": true - }, - "assign-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", - "dev": true - }, - "astral-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", - "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", - "dev": true - }, - "async": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.0.tgz", - "integrity": "sha512-xAfGg1/NTLBBKlHFmnd7PlmUW9KhVQIUuSrYem9xzFUZy13ScvtyGGejaae9iAVRiRq9+Cx7DPFaAAhCpyxyPw==", - "dev": true, - "requires": { - "lodash": "4.17.5" - } - }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", - "dev": true - }, - "atob": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.0.tgz", - "integrity": "sha512-SuiKH8vbsOyCALjA/+EINmt/Kdl+TQPrtFgW7XZZcwtryFu9e5kQoX3bjCW6mIvGH1fbeAZZuvwGR5IlBRznGw==", - "dev": true - }, - "aws-sign2": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz", - "integrity": "sha1-FDQt0428yU0OW4fXY81jYSwOeU8=", - "dev": true - }, - "aws4": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.6.0.tgz", - "integrity": "sha1-g+9cqGCysy5KDe7e6MdxudtXRx4=", - "dev": true - }, - "babel-code-frame": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", - "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", - "requires": { - "chalk": "1.1.3", - "esutils": "2.0.2", - "js-tokens": "3.0.2" - } - }, - "babel-core": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-6.26.0.tgz", - "integrity": "sha1-rzL3izGm/O8RnIew/Y2XU/A6C7g=", - "requires": { - "babel-code-frame": "6.26.0", - "babel-generator": "6.26.1", - "babel-helpers": "6.24.1", - "babel-messages": "6.23.0", - "babel-register": "6.26.0", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0", - "babylon": "6.18.0", - "convert-source-map": "1.5.1", - "debug": "2.6.9", - "json5": "0.5.1", - "lodash": "4.17.5", - "minimatch": "3.0.4", - "path-is-absolute": "1.0.1", - "private": "0.1.8", - "slash": "1.0.0", - "source-map": "0.5.7" + "babel-code-frame": "6.26.0", + "babel-generator": "6.26.1", + "babel-helpers": "6.24.1", + "babel-messages": "6.23.0", + "babel-register": "6.26.0", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0", + "babylon": "6.18.0", + "convert-source-map": "1.5.1", + "debug": "2.6.9", + "json5": "0.5.1", + "lodash": "4.17.5", + "minimatch": "3.0.4", + "path-is-absolute": "1.0.1", + "private": "0.1.8", + "slash": "1.0.0", + "source-map": "0.5.7" } }, "babel-generator": { @@ -747,13 +582,14 @@ } }, "babel-jest": { - "version": "21.2.0", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-21.2.0.tgz", - "integrity": "sha512-O0W2qLoWu1QOoOGgxiR2JID4O6WSpxPiQanrkyi9SSlM0PJ60Ptzlck47lhtnr9YZO3zYOsxHwnyeWJ6AffoBQ==", + "version": "19.0.0", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-19.0.0.tgz", + "integrity": "sha1-WTI87ZmjqE01naIZyogQdP/Gzj8=", "dev": true, "requires": { + "babel-core": "6.26.0", "babel-plugin-istanbul": "4.1.5", - "babel-preset-jest": "21.2.0" + "babel-preset-jest": "19.0.0" } }, "babel-messages": { @@ -785,9 +621,9 @@ } }, "babel-plugin-jest-hoist": { - "version": "21.2.0", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-21.2.0.tgz", - "integrity": "sha512-yi5QuiVyyvhBUDLP4ButAnhYzkdrUwWDtvUJv71hjH3fclhnZg4HkDeqaitcR2dZZx/E67kGkRcPVjtVu+SJfQ==", + "version": "19.0.0", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-19.0.0.tgz", + "integrity": "sha1-SuKgTqYSpuc2UfP95SwXiZEwS+o=", "dev": true }, "babel-plugin-minify-builtins": { @@ -1214,6 +1050,15 @@ "babel-helper-evaluate-path": "0.3.0" } }, + "babel-plugin-transform-runtime": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-runtime/-/babel-plugin-transform-runtime-6.23.0.tgz", + "integrity": "sha1-iEkNRGUC6puOfvsP4J7E2ZR5se4=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0" + } + }, "babel-plugin-transform-simplify-comparison-operators": { "version": "6.9.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-simplify-comparison-operators/-/babel-plugin-transform-simplify-comparison-operators-6.9.0.tgz", @@ -1234,6 +1079,25 @@ "resolved": "https://registry.npmjs.org/babel-plugin-transform-undefined-to-void/-/babel-plugin-transform-undefined-to-void-6.9.0.tgz", "integrity": "sha512-AVDVEmp0S9mbF1O8zekWbsOOmqnR08PZah5NRZJqSvJnFgiL0ep4Lwo4EymH8OieJR2QgQdR3q71TNW+wiVn4g==" }, + "babel-polyfill": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-polyfill/-/babel-polyfill-6.26.0.tgz", + "integrity": "sha1-N5k3q8Z9eJWXCtxiHyhM2WbPIVM=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "core-js": "2.5.4", + "regenerator-runtime": "0.10.5" + }, + "dependencies": { + "regenerator-runtime": { + "version": "0.10.5", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz", + "integrity": "sha1-M2w+/BIgrc7dosn6tntaeVWjNlg=", + "dev": true + } + } + }, "babel-preset-env": { "version": "1.6.1", "resolved": "https://registry.npmjs.org/babel-preset-env/-/babel-preset-env-1.6.1.tgz", @@ -1273,13 +1137,12 @@ } }, "babel-preset-jest": { - "version": "21.2.0", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-21.2.0.tgz", - "integrity": "sha512-hm9cBnr2h3J7yXoTtAVV0zg+3vg0Q/gT2GYuzlreTU0EPkJRtlNgKJJ3tBKEn0+VjAi3JykV6xCJkuUYttEEfA==", + "version": "19.0.0", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-19.0.0.tgz", + "integrity": "sha1-ItZyAdAjJKGVgRKI6zgpS7PKw5Y=", "dev": true, "requires": { - "babel-plugin-jest-hoist": "21.2.0", - "babel-plugin-syntax-object-rest-spread": "6.13.0" + "babel-plugin-jest-hoist": "19.0.0" } }, "babel-preset-minify": { @@ -1433,6 +1296,13 @@ "tweetnacl": "0.14.5" } }, + "binary-extensions": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.11.0.tgz", + "integrity": "sha1-RqoXUftqL5PuXmibsQh9SxTGwgU=", + "dev": true, + "optional": true + }, "boom": { "version": "2.10.1", "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz", @@ -1496,6 +1366,12 @@ "repeat-element": "1.1.2" } }, + "browser-process-hrtime": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-0.1.2.tgz", + "integrity": "sha1-Ql1opY00R/AqBKqJQYf86K+Le44=", + "dev": true + }, "browser-resolve": { "version": "1.11.2", "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-1.11.2.tgz", @@ -1511,8 +1387,8 @@ "integrity": "sha512-yWu5cXT7Av6mVwzWc8lMsJMHWn4xyjSuGYi4IozbVTLUOEYPSagUB8kiMDUHA1fS3zjr8nkxkn9jdvug4BBRmA==", "dev": true, "requires": { - "caniuse-lite": "1.0.30000821", - "electron-to-chromium": "1.3.41" + "caniuse-lite": "1.0.30000820", + "electron-to-chromium": "1.3.40" } }, "bser": { @@ -1546,13 +1422,6 @@ "magic-string": "0.20.0", "minimist": "1.2.0", "sourcemap-codec": "1.4.1" - }, - "dependencies": { - "acorn": { - "version": "5.5.3", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.5.3.tgz", - "integrity": "sha512-jd5MkIUlbbmb07nXH0DT3y7rDVtkzDi4XZOUVWAer8ajmF/DTSSbl5oNFyDOl/OXA33Bl79+ypHhl2pN20VeOQ==" - } } }, "cache-base": { @@ -1601,9 +1470,9 @@ "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=" }, "caniuse-lite": { - "version": "1.0.30000821", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000821.tgz", - "integrity": "sha512-qyYay02wr/5k7PO86W+LKFaEUZfWIvT65PaXuPP16jkSpgZGIsSstHKiYAPVLjTj98j2WnWwZg8CjXPx7UIPYg==", + "version": "1.0.30000820", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000820.tgz", + "integrity": "sha512-E0dpVjnt1XTNmWlGgdiae/tOF0jrJ/s+dOnwk8PLmPdu5uSu8wTLJhhbhcgUWU4aO9Iy5yUMZYxT60JS259sbQ==", "dev": true }, "capture-stack-trace": { @@ -1653,6 +1522,24 @@ "integrity": "sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I=", "dev": true }, + "chokidar": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-1.7.0.tgz", + "integrity": "sha1-eY5ol3gVHIB2tLNg5e3SjNortGg=", + "dev": true, + "optional": true, + "requires": { + "anymatch": "1.3.2", + "async-each": "1.0.1", + "fsevents": "1.1.3", + "glob-parent": "2.0.0", + "inherits": "2.0.3", + "is-binary-path": "1.0.1", + "is-glob": "2.0.1", + "path-is-absolute": "1.0.1", + "readdirp": "2.1.0" + } + }, "ci-info": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.1.3.tgz", @@ -2009,6 +1896,18 @@ "js-yaml": "3.11.0", "parse-json": "4.0.0", "require-from-string": "2.0.1" + }, + "dependencies": { + "parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "dev": true, + "requires": { + "error-ex": "1.3.1", + "json-parse-better-errors": "1.0.2" + } + } } }, "create-error-class": { @@ -2142,17 +2041,6 @@ "dev": true, "requires": { "strip-bom": "2.0.0" - }, - "dependencies": { - "strip-bom": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", - "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", - "dev": true, - "requires": { - "is-utf8": "0.2.1" - } - } } }, "define-property": { @@ -2185,7 +2073,7 @@ "object-assign": "4.1.1", "pify": "2.3.0", "pinkie-promise": "2.0.1", - "rimraf": "2.6.2" + "rimraf": "2.6.1" } }, "delayed-stream": { @@ -2194,11 +2082,6 @@ "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", "dev": true }, - "depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" - }, "detect-indent": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz", @@ -2222,6 +2105,15 @@ "esutils": "2.0.2" } }, + "domexception": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/domexception/-/domexception-1.0.1.tgz", + "integrity": "sha512-raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug==", + "dev": true, + "requires": { + "webidl-conversions": "4.0.2" + } + }, "dot-prop": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.0.tgz", @@ -2251,9 +2143,9 @@ } }, "electron-to-chromium": { - "version": "1.3.41", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.41.tgz", - "integrity": "sha1-fjNkPgDNhe39F+BBlPbQDnNzcjU=", + "version": "1.3.40", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.40.tgz", + "integrity": "sha1-H71tl779crim+SHcONIkE9L2/d8=", "dev": true }, "elegant-spinner": { @@ -2350,7 +2242,7 @@ "path-is-inside": "1.0.2", "pluralize": "7.0.0", "progress": "2.0.0", - "regexpp": "1.1.0", + "regexpp": "1.0.1", "require-uncached": "1.0.3", "semver": "5.5.0", "strip-ansi": "4.0.0", @@ -2371,12 +2263,6 @@ "json-schema-traverse": "0.3.1" } }, - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, "chalk": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.2.tgz", @@ -2760,6 +2646,12 @@ "map-cache": "0.2.2" } }, + "fs-readdir-recursive": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz", + "integrity": "sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA==", + "dev": true + }, "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", @@ -2778,13 +2670,15 @@ "dependencies": { "abbrev": { "version": "1.1.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.0.tgz", + "integrity": "sha1-0FVMIlZjbi9W58LlrRg/hZQo2B8=", "dev": true, "optional": true }, "ajv": { "version": "4.11.8", - "bundled": true, + "resolved": "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz", + "integrity": "sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY=", "dev": true, "optional": true, "requires": { @@ -2794,18 +2688,21 @@ }, "ansi-regex": { "version": "2.1.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", "dev": true }, "aproba": { "version": "1.1.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.1.1.tgz", + "integrity": "sha1-ldNgDwdxCqDpKYxyatXs8urLq6s=", "dev": true, "optional": true }, "are-we-there-yet": { "version": "1.1.4", - "bundled": true, + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.4.tgz", + "integrity": "sha1-u13KOCu5TwXhUZQ3PRb9O6HKEQ0=", "dev": true, "optional": true, "requires": { @@ -2815,42 +2712,49 @@ }, "asn1": { "version": "0.2.3", - "bundled": true, + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz", + "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=", "dev": true, "optional": true }, "assert-plus": { "version": "0.2.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz", + "integrity": "sha1-104bh+ev/A24qttwIfP+SBAasjQ=", "dev": true, "optional": true }, "asynckit": { "version": "0.4.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", "dev": true, "optional": true }, "aws-sign2": { "version": "0.6.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz", + "integrity": "sha1-FDQt0428yU0OW4fXY81jYSwOeU8=", "dev": true, "optional": true }, "aws4": { "version": "1.6.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.6.0.tgz", + "integrity": "sha1-g+9cqGCysy5KDe7e6MdxudtXRx4=", "dev": true, "optional": true }, "balanced-match": { "version": "0.4.2", - "bundled": true, + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz", + "integrity": "sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg=", "dev": true }, "bcrypt-pbkdf": { "version": "1.0.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz", + "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=", "dev": true, "optional": true, "requires": { @@ -2859,7 +2763,8 @@ }, "block-stream": { "version": "0.0.9", - "bundled": true, + "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz", + "integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=", "dev": true, "requires": { "inherits": "2.0.3" @@ -2867,7 +2772,8 @@ }, "boom": { "version": "2.10.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz", + "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=", "dev": true, "requires": { "hoek": "2.16.3" @@ -2875,7 +2781,8 @@ }, "brace-expansion": { "version": "1.1.7", - "bundled": true, + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.7.tgz", + "integrity": "sha1-Pv/DxQ4ABTH7cg6v+A8K6O8jz1k=", "dev": true, "requires": { "balanced-match": "0.4.2", @@ -2884,29 +2791,34 @@ }, "buffer-shims": { "version": "1.0.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/buffer-shims/-/buffer-shims-1.0.0.tgz", + "integrity": "sha1-mXjOMXOIxkmth5MCjDR37wRKi1E=", "dev": true }, "caseless": { "version": "0.12.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", "dev": true, "optional": true }, "co": { "version": "4.6.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", "dev": true, "optional": true }, "code-point-at": { "version": "1.1.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", "dev": true }, "combined-stream": { "version": "1.0.5", - "bundled": true, + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz", + "integrity": "sha1-k4NwpXtKUd6ix3wV1cX9+JUWQAk=", "dev": true, "requires": { "delayed-stream": "1.0.0" @@ -2914,22 +2826,26 @@ }, "concat-map": { "version": "0.0.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", "dev": true }, "console-control-strings": { "version": "1.1.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", "dev": true }, "core-util-is": { "version": "1.0.2", - "bundled": true, + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", "dev": true }, "cryptiles": { "version": "2.0.5", - "bundled": true, + "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz", + "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=", "dev": true, "requires": { "boom": "2.10.1" @@ -2937,7 +2853,8 @@ }, "dashdash": { "version": "1.14.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", "dev": true, "optional": true, "requires": { @@ -2946,7 +2863,8 @@ "dependencies": { "assert-plus": { "version": "1.0.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", "dev": true, "optional": true } @@ -2954,7 +2872,8 @@ }, "debug": { "version": "2.6.8", - "bundled": true, + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz", + "integrity": "sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw=", "dev": true, "optional": true, "requires": { @@ -2963,30 +2882,35 @@ }, "deep-extend": { "version": "0.4.2", - "bundled": true, + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.4.2.tgz", + "integrity": "sha1-SLaZwn4zS/ifEIkr5DL25MfTSn8=", "dev": true, "optional": true }, "delayed-stream": { "version": "1.0.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", "dev": true }, "delegates": { "version": "1.0.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", "dev": true, "optional": true }, "detect-libc": { "version": "1.0.2", - "bundled": true, + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.2.tgz", + "integrity": "sha1-ca1dIEvxempsqPRQxhRUBm70YeE=", "dev": true, "optional": true }, "ecc-jsbn": { "version": "0.1.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz", + "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=", "dev": true, "optional": true, "requires": { @@ -2995,24 +2919,28 @@ }, "extend": { "version": "3.0.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", + "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=", "dev": true, "optional": true }, "extsprintf": { "version": "1.0.2", - "bundled": true, + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.0.2.tgz", + "integrity": "sha1-4QgOBljjALBilJkMxw4VAiNf1VA=", "dev": true }, "forever-agent": { "version": "0.6.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", "dev": true, "optional": true }, "form-data": { "version": "2.1.4", - "bundled": true, + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.1.4.tgz", + "integrity": "sha1-M8GDrPGTJ27KqYFDpp6Uv+4XUNE=", "dev": true, "optional": true, "requires": { @@ -3023,12 +2951,14 @@ }, "fs.realpath": { "version": "1.0.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", "dev": true }, "fstream": { "version": "1.0.11", - "bundled": true, + "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.11.tgz", + "integrity": "sha1-XB+x8RdHcRTwYyoOtLcbPLD9MXE=", "dev": true, "requires": { "graceful-fs": "4.1.11", @@ -3039,7 +2969,8 @@ }, "fstream-ignore": { "version": "1.0.5", - "bundled": true, + "resolved": "https://registry.npmjs.org/fstream-ignore/-/fstream-ignore-1.0.5.tgz", + "integrity": "sha1-nDHa40dnAY/h0kmyTa2mfQktoQU=", "dev": true, "optional": true, "requires": { @@ -3050,7 +2981,8 @@ }, "gauge": { "version": "2.7.4", - "bundled": true, + "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", + "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", "dev": true, "optional": true, "requires": { @@ -3066,7 +2998,8 @@ }, "getpass": { "version": "0.1.7", - "bundled": true, + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", "dev": true, "optional": true, "requires": { @@ -3075,7 +3008,8 @@ "dependencies": { "assert-plus": { "version": "1.0.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", "dev": true, "optional": true } @@ -3083,7 +3017,8 @@ }, "glob": { "version": "7.1.2", - "bundled": true, + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", "dev": true, "requires": { "fs.realpath": "1.0.0", @@ -3096,18 +3031,21 @@ }, "graceful-fs": { "version": "4.1.11", - "bundled": true, + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", "dev": true }, "har-schema": { "version": "1.0.5", - "bundled": true, + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-1.0.5.tgz", + "integrity": "sha1-0mMTX0MwfALGAq/I/pWXDAFRNp4=", "dev": true, "optional": true }, "har-validator": { "version": "4.2.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-4.2.1.tgz", + "integrity": "sha1-M0gdDxu/9gDdID11gSpqX7oALio=", "dev": true, "optional": true, "requires": { @@ -3117,13 +3055,15 @@ }, "has-unicode": { "version": "2.0.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", "dev": true, "optional": true }, "hawk": { "version": "3.1.3", - "bundled": true, + "resolved": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz", + "integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=", "dev": true, "requires": { "boom": "2.10.1", @@ -3134,12 +3074,14 @@ }, "hoek": { "version": "2.16.3", - "bundled": true, + "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", + "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=", "dev": true }, "http-signature": { "version": "1.1.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz", + "integrity": "sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=", "dev": true, "optional": true, "requires": { @@ -3150,7 +3092,8 @@ }, "inflight": { "version": "1.0.6", - "bundled": true, + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", "dev": true, "requires": { "once": "1.4.0", @@ -3159,18 +3102,21 @@ }, "inherits": { "version": "2.0.3", - "bundled": true, + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", "dev": true }, "ini": { "version": "1.3.4", - "bundled": true, + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.4.tgz", + "integrity": "sha1-BTfLedr1m1mhpRff9wbIbsA5Fi4=", "dev": true, "optional": true }, "is-fullwidth-code-point": { "version": "1.0.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", "dev": true, "requires": { "number-is-nan": "1.0.1" @@ -3178,24 +3124,28 @@ }, "is-typedarray": { "version": "1.0.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", "dev": true, "optional": true }, "isarray": { "version": "1.0.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", "dev": true }, "isstream": { "version": "0.1.2", - "bundled": true, + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", "dev": true, "optional": true }, "jodid25519": { "version": "1.0.2", - "bundled": true, + "resolved": "https://registry.npmjs.org/jodid25519/-/jodid25519-1.0.2.tgz", + "integrity": "sha1-BtSRIlUJNBlHfUJWM2BuDpB4KWc=", "dev": true, "optional": true, "requires": { @@ -3204,19 +3154,22 @@ }, "jsbn": { "version": "0.1.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", "dev": true, "optional": true }, "json-schema": { "version": "0.2.3", - "bundled": true, + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", "dev": true, "optional": true }, "json-stable-stringify": { "version": "1.0.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", + "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", "dev": true, "optional": true, "requires": { @@ -3225,19 +3178,22 @@ }, "json-stringify-safe": { "version": "5.0.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", "dev": true, "optional": true }, "jsonify": { "version": "0.0.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", + "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=", "dev": true, "optional": true }, "jsprim": { "version": "1.4.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.0.tgz", + "integrity": "sha1-o7h+QCmNjDgFUtjMdiigu5WiKRg=", "dev": true, "optional": true, "requires": { @@ -3249,7 +3205,8 @@ "dependencies": { "assert-plus": { "version": "1.0.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", "dev": true, "optional": true } @@ -3257,12 +3214,14 @@ }, "mime-db": { "version": "1.27.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.27.0.tgz", + "integrity": "sha1-gg9XIpa70g7CXtVeW13oaeVDbrE=", "dev": true }, "mime-types": { "version": "2.1.15", - "bundled": true, + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.15.tgz", + "integrity": "sha1-pOv1BkCUVpI3uM9wBGd20J/JKu0=", "dev": true, "requires": { "mime-db": "1.27.0" @@ -3270,7 +3229,8 @@ }, "minimatch": { "version": "3.0.4", - "bundled": true, + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "dev": true, "requires": { "brace-expansion": "1.1.7" @@ -3278,12 +3238,14 @@ }, "minimist": { "version": "0.0.8", - "bundled": true, + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", "dev": true }, "mkdirp": { "version": "0.5.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", "dev": true, "requires": { "minimist": "0.0.8" @@ -3291,13 +3253,15 @@ }, "ms": { "version": "2.0.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true, "optional": true }, "node-pre-gyp": { "version": "0.6.39", - "bundled": true, + "resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.6.39.tgz", + "integrity": "sha512-OsJV74qxnvz/AMGgcfZoDaeDXKD3oY3QVIbBmwszTFkRisTSXbMQyn4UWzUMOtA5SVhrBZOTp0wcoSBgfMfMmQ==", "dev": true, "optional": true, "requires": { @@ -3316,7 +3280,8 @@ }, "nopt": { "version": "4.0.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.1.tgz", + "integrity": "sha1-0NRoWv1UFRk8jHUFYC0NF81kR00=", "dev": true, "optional": true, "requires": { @@ -3326,7 +3291,8 @@ }, "npmlog": { "version": "4.1.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.0.tgz", + "integrity": "sha512-ocolIkZYZt8UveuiDS0yAkkIjid1o7lPG8cYm05yNYzBn8ykQtaiPMEGp8fY9tKdDgm8okpdKzkvu1y9hUYugA==", "dev": true, "optional": true, "requires": { @@ -3338,24 +3304,28 @@ }, "number-is-nan": { "version": "1.0.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", "dev": true }, "oauth-sign": { "version": "0.8.2", - "bundled": true, + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", + "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=", "dev": true, "optional": true }, "object-assign": { "version": "4.1.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", "dev": true, "optional": true }, "once": { "version": "1.4.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", "dev": true, "requires": { "wrappy": "1.0.2" @@ -3363,19 +3333,22 @@ }, "os-homedir": { "version": "1.0.2", - "bundled": true, + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", "dev": true, "optional": true }, "os-tmpdir": { "version": "1.0.2", - "bundled": true, + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", "dev": true, "optional": true }, "osenv": { "version": "0.1.4", - "bundled": true, + "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.4.tgz", + "integrity": "sha1-Qv5tWVPfBsgGS+bxdsPQWqqjRkQ=", "dev": true, "optional": true, "requires": { @@ -3385,35 +3358,41 @@ }, "path-is-absolute": { "version": "1.0.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", "dev": true }, "performance-now": { "version": "0.2.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-0.2.0.tgz", + "integrity": "sha1-M+8wxcd9TqIcWlOGnZG1bY8lVeU=", "dev": true, "optional": true }, "process-nextick-args": { "version": "1.0.7", - "bundled": true, + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", + "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=", "dev": true }, "punycode": { "version": "1.4.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", "dev": true, "optional": true }, "qs": { "version": "6.4.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/qs/-/qs-6.4.0.tgz", + "integrity": "sha1-E+JtKK1rD/qpExLNO/cI7TUecjM=", "dev": true, "optional": true }, "rc": { "version": "1.2.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.1.tgz", + "integrity": "sha1-LgPo5C7kULjLPc5lvhv4l04d/ZU=", "dev": true, "optional": true, "requires": { @@ -3425,7 +3404,8 @@ "dependencies": { "minimist": { "version": "1.2.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", "dev": true, "optional": true } @@ -3433,7 +3413,8 @@ }, "readable-stream": { "version": "2.2.9", - "bundled": true, + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.9.tgz", + "integrity": "sha1-z3jsb0ptHrQ9JkiMrJfwQudLf8g=", "dev": true, "requires": { "buffer-shims": "1.0.0", @@ -3447,7 +3428,8 @@ }, "request": { "version": "2.81.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/request/-/request-2.81.0.tgz", + "integrity": "sha1-xpKJRqDgbF+Nb4qTM0af/aRimKA=", "dev": true, "optional": true, "requires": { @@ -3477,7 +3459,8 @@ }, "rimraf": { "version": "2.6.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.1.tgz", + "integrity": "sha1-wjOOxkPfeht/5cVPqG9XQopV8z0=", "dev": true, "requires": { "glob": "7.1.2" @@ -3485,30 +3468,35 @@ }, "safe-buffer": { "version": "5.0.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.0.1.tgz", + "integrity": "sha1-0mPKVGls2KMGtcplUekt5XkY++c=", "dev": true }, "semver": { "version": "5.3.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz", + "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=", "dev": true, "optional": true }, "set-blocking": { "version": "2.0.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", "dev": true, "optional": true }, "signal-exit": { "version": "3.0.2", - "bundled": true, + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", "dev": true, "optional": true }, "sntp": { "version": "1.0.9", - "bundled": true, + "resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz", + "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=", "dev": true, "requires": { "hoek": "2.16.3" @@ -3516,7 +3504,8 @@ }, "sshpk": { "version": "1.13.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.13.0.tgz", + "integrity": "sha1-/yo+T9BEl1Vf7Zezmg/YL6+zozw=", "dev": true, "optional": true, "requires": { @@ -3533,7 +3522,8 @@ "dependencies": { "assert-plus": { "version": "1.0.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", "dev": true, "optional": true } @@ -3541,7 +3531,8 @@ }, "string-width": { "version": "1.0.2", - "bundled": true, + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", "dev": true, "requires": { "code-point-at": "1.1.0", @@ -3551,7 +3542,8 @@ }, "string_decoder": { "version": "1.0.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.1.tgz", + "integrity": "sha1-YuIA8DmVWmgQ2N8KM//A8BNmLZg=", "dev": true, "requires": { "safe-buffer": "5.0.1" @@ -3559,13 +3551,15 @@ }, "stringstream": { "version": "0.0.5", - "bundled": true, + "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz", + "integrity": "sha1-TkhM1N5aC7vuGORjB3EKioFiGHg=", "dev": true, "optional": true }, "strip-ansi": { "version": "3.0.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dev": true, "requires": { "ansi-regex": "2.1.1" @@ -3573,13 +3567,15 @@ }, "strip-json-comments": { "version": "2.0.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", "dev": true, "optional": true }, "tar": { "version": "2.2.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.1.tgz", + "integrity": "sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE=", "dev": true, "requires": { "block-stream": "0.0.9", @@ -3589,7 +3585,8 @@ }, "tar-pack": { "version": "3.4.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/tar-pack/-/tar-pack-3.4.0.tgz", + "integrity": "sha1-I74tf2cagzk3bL2wuP4/3r8xeYQ=", "dev": true, "optional": true, "requires": { @@ -3605,7 +3602,8 @@ }, "tough-cookie": { "version": "2.3.2", - "bundled": true, + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.2.tgz", + "integrity": "sha1-8IH3bkyFcg5sN6X6ztc3FQ2EByo=", "dev": true, "optional": true, "requires": { @@ -3614,7 +3612,8 @@ }, "tunnel-agent": { "version": "0.6.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", "dev": true, "optional": true, "requires": { @@ -3623,30 +3622,35 @@ }, "tweetnacl": { "version": "0.14.5", - "bundled": true, + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", "dev": true, "optional": true }, "uid-number": { "version": "0.0.6", - "bundled": true, + "resolved": "https://registry.npmjs.org/uid-number/-/uid-number-0.0.6.tgz", + "integrity": "sha1-DqEOgDXo61uOREnwbaHHMGY7qoE=", "dev": true, "optional": true }, "util-deprecate": { "version": "1.0.2", - "bundled": true, + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", "dev": true }, "uuid": { "version": "3.0.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.0.1.tgz", + "integrity": "sha1-ZUS7ot/ajBzxfmKaOjBeK7H+5sE=", "dev": true, "optional": true }, "verror": { "version": "1.3.6", - "bundled": true, + "resolved": "https://registry.npmjs.org/verror/-/verror-1.3.6.tgz", + "integrity": "sha1-z/XfEpRtKX0rqu+qJoniW+AcAFw=", "dev": true, "optional": true, "requires": { @@ -3655,7 +3659,8 @@ }, "wide-align": { "version": "1.1.2", - "bundled": true, + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.2.tgz", + "integrity": "sha512-ijDLlyQ7s6x1JgCLur53osjm/UXUYD9+0PbYKrBsYisYXzCxN+HC3mYDNy/dWdmf3AwqwU3CXwDCvsNgGK1S0w==", "dev": true, "optional": true, "requires": { @@ -3664,7 +3669,8 @@ }, "wrappy": { "version": "1.0.2", - "bundled": true, + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", "dev": true } } @@ -3925,6 +3931,13 @@ "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", "requires": { "ansi-regex": "2.1.1" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + } } }, "has-flag": { @@ -4075,31 +4088,85 @@ "signal-exit": "3.0.2", "strip-eof": "1.0.0" } - } - } - }, - "iconv-lite": { - "version": "0.4.19", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz", - "integrity": "sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ==", - "dev": true - }, - "ignore": { - "version": "3.3.7", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.7.tgz", - "integrity": "sha512-YGG3ejvBNHRqu0559EOxxNFihD0AjpvHlC/pdGKd3X3ofe+CoJkYazwNJYTNebqpPKN+VVQbh4ZFn1DivMNuHA==", - "dev": true - }, - "import-lazy": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", - "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=" - }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=" - }, + }, + "load-json-file": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", + "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "parse-json": "4.0.0", + "pify": "3.0.0", + "strip-bom": "3.0.0" + } + }, + "parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "dev": true, + "requires": { + "error-ex": "1.3.1", + "json-parse-better-errors": "1.0.2" + } + }, + "path-type": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "dev": true, + "requires": { + "pify": "3.0.0" + } + }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + }, + "read-pkg": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", + "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", + "dev": true, + "requires": { + "load-json-file": "4.0.0", + "normalize-package-data": "2.4.0", + "path-type": "3.0.0" + } + }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true + } + } + }, + "iconv-lite": { + "version": "0.4.19", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz", + "integrity": "sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ==", + "dev": true + }, + "ignore": { + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.7.tgz", + "integrity": "sha512-YGG3ejvBNHRqu0559EOxxNFihD0AjpvHlC/pdGKd3X3ofe+CoJkYazwNJYTNebqpPKN+VVQbh4ZFn1DivMNuHA==", + "dev": true + }, + "import-lazy": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", + "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=" + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=" + }, "indent-string": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", @@ -4150,12 +4217,6 @@ "through": "2.3.8" }, "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, "chalk": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.2.tgz", @@ -4224,6 +4285,16 @@ "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", "dev": true }, + "is-binary-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", + "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "dev": true, + "optional": true, + "requires": { + "binary-extensions": "1.11.0" + } + }, "is-buffer": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", @@ -4329,6 +4400,12 @@ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" }, + "is-generator-fn": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-1.0.0.tgz", + "integrity": "sha1-lp1J4bszKfa7fwkIm+JleLLd1Go=", + "dev": true + }, "is-glob": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", @@ -4558,7 +4635,7 @@ "debug": "3.1.0", "istanbul-lib-coverage": "1.2.0", "mkdirp": "0.5.1", - "rimraf": "2.6.2", + "rimraf": "2.6.1", "source-map": "0.5.7" } } @@ -4632,7 +4709,7 @@ "debug": "3.1.0", "istanbul-lib-coverage": "1.2.0", "mkdirp": "0.5.1", - "rimraf": "2.6.2", + "rimraf": "2.6.1", "source-map": "0.5.7" }, "dependencies": { @@ -4665,12 +4742,6 @@ "jest-cli": "21.2.1" }, "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, "chalk": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.2.tgz", @@ -5085,6 +5156,32 @@ "yargs": "9.0.1" }, "dependencies": { + "babel-jest": { + "version": "21.2.0", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-21.2.0.tgz", + "integrity": "sha512-O0W2qLoWu1QOoOGgxiR2JID4O6WSpxPiQanrkyi9SSlM0PJ60Ptzlck47lhtnr9YZO3zYOsxHwnyeWJ6AffoBQ==", + "dev": true, + "requires": { + "babel-plugin-istanbul": "4.1.5", + "babel-preset-jest": "21.2.0" + } + }, + "babel-plugin-jest-hoist": { + "version": "21.2.0", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-21.2.0.tgz", + "integrity": "sha512-yi5QuiVyyvhBUDLP4ButAnhYzkdrUwWDtvUJv71hjH3fclhnZg4HkDeqaitcR2dZZx/E67kGkRcPVjtVu+SJfQ==", + "dev": true + }, + "babel-preset-jest": { + "version": "21.2.0", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-21.2.0.tgz", + "integrity": "sha512-hm9cBnr2h3J7yXoTtAVV0zg+3vg0Q/gT2GYuzlreTU0EPkJRtlNgKJJ3tBKEn0+VjAi3JykV6xCJkuUYttEEfA==", + "dev": true, + "requires": { + "babel-plugin-jest-hoist": "21.2.0", + "babel-plugin-syntax-object-rest-spread": "6.13.0" + } + }, "chalk": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.2.tgz", @@ -5096,6 +5193,12 @@ "supports-color": "5.3.0" } }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true + }, "supports-color": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.3.0.tgz", @@ -5385,6 +5488,12 @@ "invert-kv": "1.0.0" } }, + "left-pad": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/left-pad/-/left-pad-1.2.0.tgz", + "integrity": "sha1-0wpzxrggHY99jnlWupYWCHpo4O4=", + "dev": true + }, "leven": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/leven/-/leven-2.1.0.tgz", @@ -5402,9 +5511,9 @@ } }, "lint-staged": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-6.1.1.tgz", - "integrity": "sha512-M/7bwLdXbeG7ZNLcasGeLMBDg60/w6obj3KOtINwJyxAxb53XGY0yH5FSZlWklEzuVbTtqtIfAajh6jYIN90AA==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-7.0.0.tgz", + "integrity": "sha512-6Z89we28Qy1Ez7ZxO8yYfPKqzdxkSjnURq1d3RS2gKkZrA135xN+ptF3EWHrcHyBMmgA20vA7dGCQGj+OMS22g==", "dev": true, "requires": { "app-root-path": "2.0.1", @@ -5413,22 +5522,71 @@ "cosmiconfig": "4.0.0", "debug": "3.1.0", "dedent": "0.7.0", - "execa": "0.8.0", + "execa": "0.9.0", "find-parent-dir": "0.3.0", "is-glob": "4.0.0", - "jest-validate": "21.2.1", + "jest-validate": "22.4.3", "listr": "0.13.0", "lodash": "4.17.5", "log-symbols": "2.2.0", - "minimatch": "3.0.4", + "micromatch": "3.1.10", "npm-which": "3.0.1", "p-map": "1.2.0", "path-is-inside": "1.0.2", "pify": "3.0.0", - "staged-git-files": "1.0.0", + "please-upgrade-node": "3.0.1", + "staged-git-files": "1.1.0", "stringify-object": "3.2.2" }, "dependencies": { + "acorn-globals": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-4.1.0.tgz", + "integrity": "sha512-KjZwU26uG3u6eZcfGbTULzFcsoz6pegNKtHPksZPOUsiKo5bUmiBPa38FuHZ/Eun+XYh/JCCkS9AS3Lu4McQOQ==", + "dev": true, + "requires": { + "acorn": "5.5.3" + } + }, + "ajv": { + "version": "5.5.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", + "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", + "dev": true, + "requires": { + "co": "4.6.0", + "fast-deep-equal": "1.1.0", + "fast-json-stable-stringify": "2.0.0", + "json-schema-traverse": "0.3.1" + } + }, + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true + }, + "aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", + "dev": true + }, + "boom": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/boom/-/boom-4.3.1.tgz", + "integrity": "sha1-T4owBctKfjiJ90kDD9JbluAdLjE=", + "dev": true, + "requires": { + "hoek": "4.2.1" + } + }, + "callsites": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", + "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=", + "dev": true + }, "chalk": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.2.tgz", @@ -5446,60 +5604,709 @@ "integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==", "dev": true }, - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "cryptiles": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-3.1.2.tgz", + "integrity": "sha1-qJ+7Ig9c4l7FboxKqKT9e1sNKf4=", + "dev": true, + "requires": { + "boom": "5.2.0" + }, + "dependencies": { + "boom": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/boom/-/boom-5.2.0.tgz", + "integrity": "sha512-Z5BTk6ZRe4tXXQlkqftmsAUANpXmuwlsF5Oov8ThoMbQRzdGTA1ngYRW160GexgOgjsFOKJz0LYhoNi+2AMBUw==", + "dev": true, + "requires": { + "hoek": "4.2.1" + } + } + } + }, + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "execa": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-0.9.0.tgz", + "integrity": "sha512-BbUMBiX4hqiHZUA5+JujIjNb6TyAlp2D5KLheMjMluwOuzcnylDL4AxZYLLn1n2AGB49eSWwyKvvEQoRpnAtmA==", + "dev": true, + "requires": { + "cross-spawn": "5.1.0", + "get-stream": "3.0.0", + "is-stream": "1.1.0", + "npm-run-path": "2.0.2", + "p-finally": "1.0.0", + "signal-exit": "3.0.2", + "strip-eof": "1.0.0" + } + }, + "expect": { + "version": "22.4.3", + "resolved": "https://registry.npmjs.org/expect/-/expect-22.4.3.tgz", + "integrity": "sha512-XcNXEPehqn8b/jm8FYotdX0YrXn36qp4HWlrVT4ktwQas1l1LPxiVWncYnnL2eyMtKAmVIaG0XAp0QlrqJaxaA==", + "dev": true, + "requires": { + "ansi-styles": "3.2.1", + "jest-diff": "22.4.3", + "jest-get-type": "22.4.3", + "jest-matcher-utils": "22.4.3", + "jest-message-util": "22.4.3", + "jest-regex-util": "22.4.3" + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "requires": { + "extend-shallow": "2.0.1", + "is-number": "3.0.0", + "repeat-string": "1.6.1", + "to-regex-range": "2.1.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "0.1.1" + } + } + } + }, + "form-data": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.2.tgz", + "integrity": "sha1-SXBJi+YEwgwAXU9cI67NIda0kJk=", + "dev": true, + "requires": { + "asynckit": "0.4.0", + "combined-stream": "1.0.6", + "mime-types": "2.1.18" + } + }, + "har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", + "dev": true + }, + "har-validator": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.0.3.tgz", + "integrity": "sha1-ukAsJmGU8VlW7xXg/PJCmT9qff0=", + "dev": true, + "requires": { + "ajv": "5.5.2", + "har-schema": "2.0.0" + } + }, + "hawk": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/hawk/-/hawk-6.0.2.tgz", + "integrity": "sha512-miowhl2+U7Qle4vdLqDdPt9m09K6yZhkLDTWGoUiUzrQCn+mHHSmfJgAyGaLRZbPmTqfFFjRV1QWCW0VWUJBbQ==", + "dev": true, + "requires": { + "boom": "4.3.1", + "cryptiles": "3.1.2", + "hoek": "4.2.1", + "sntp": "2.1.0" + } + }, + "hoek": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/hoek/-/hoek-4.2.1.tgz", + "integrity": "sha512-QLg82fGkfnJ/4iy1xZ81/9SIJiq1NGFUMGs6ParyjBZr6jW2Ufj/snDqTHixNlHdPNwN2RLVD0Pi3igeK9+JfA==", + "dev": true + }, + "http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "dev": true, + "requires": { + "assert-plus": "1.0.0", + "jsprim": "1.4.1", + "sshpk": "1.14.1" + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "requires": { + "kind-of": "3.2.2" + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "requires": { + "kind-of": "3.2.2" + } + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true + }, + "is-glob": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz", + "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=", + "dev": true, + "requires": { + "is-extglob": "2.1.1" + } + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "3.2.2" + } + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + }, + "jest-config": { + "version": "22.4.3", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-22.4.3.tgz", + "integrity": "sha512-KSg3EOToCgkX+lIvenKY7J8s426h6ahXxaUFJxvGoEk0562Z6inWj1TnKoGycTASwiLD+6kSYFALcjdosq9KIQ==", + "dev": true, + "requires": { + "chalk": "2.3.2", + "glob": "7.1.2", + "jest-environment-jsdom": "22.4.3", + "jest-environment-node": "22.4.3", + "jest-get-type": "22.4.3", + "jest-jasmine2": "22.4.3", + "jest-regex-util": "22.4.3", + "jest-resolve": "22.4.3", + "jest-util": "22.4.3", + "jest-validate": "22.4.3", + "pretty-format": "22.4.3" + } + }, + "jest-diff": { + "version": "22.4.3", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-22.4.3.tgz", + "integrity": "sha512-/QqGvCDP5oZOF6PebDuLwrB2BMD8ffJv6TAGAdEVuDx1+uEgrHpSFrfrOiMRx2eJ1hgNjlQrOQEHetVwij90KA==", + "dev": true, + "requires": { + "chalk": "2.3.2", + "diff": "3.5.0", + "jest-get-type": "22.4.3", + "pretty-format": "22.4.3" + } + }, + "jest-environment-jsdom": { + "version": "22.4.3", + "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-22.4.3.tgz", + "integrity": "sha512-FviwfR+VyT3Datf13+ULjIMO5CSeajlayhhYQwpzgunswoaLIPutdbrnfUHEMyJCwvqQFaVtTmn9+Y8WCt6n1w==", + "dev": true, + "requires": { + "jest-mock": "22.4.3", + "jest-util": "22.4.3", + "jsdom": "11.6.2" + } + }, + "jest-environment-node": { + "version": "22.4.3", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-22.4.3.tgz", + "integrity": "sha512-reZl8XF6t/lMEuPWwo9OLfttyC26A5AMgDyEQ6DBgZuyfyeNUzYT8BFo6uxCCP/Av/b7eb9fTi3sIHFPBzmlRA==", + "dev": true, + "requires": { + "jest-mock": "22.4.3", + "jest-util": "22.4.3" + } + }, + "jest-get-type": { + "version": "22.4.3", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-22.4.3.tgz", + "integrity": "sha512-/jsz0Y+V29w1chdXVygEKSz2nBoHoYqNShPe+QgxSNjAuP1i8+k4LbQNrfoliKej0P45sivkSCh7yiD6ubHS3w==", + "dev": true + }, + "jest-jasmine2": { + "version": "22.4.3", + "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-22.4.3.tgz", + "integrity": "sha512-yZCPCJUcEY6R5KJB/VReo1AYI2b+5Ky+C+JA1v34jndJsRcLpU4IZX4rFJn7yDTtdNbO/nNqg+3SDIPNH2ecnw==", + "dev": true, + "requires": { + "chalk": "2.3.2", + "co": "4.6.0", + "expect": "22.4.3", + "graceful-fs": "4.1.11", + "is-generator-fn": "1.0.0", + "jest-diff": "22.4.3", + "jest-matcher-utils": "22.4.3", + "jest-message-util": "22.4.3", + "jest-snapshot": "22.4.3", + "jest-util": "22.4.3", + "source-map-support": "0.5.4" + } + }, + "jest-matcher-utils": { + "version": "22.4.3", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-22.4.3.tgz", + "integrity": "sha512-lsEHVaTnKzdAPR5t4B6OcxXo9Vy4K+kRRbG5gtddY8lBEC+Mlpvm1CJcsMESRjzUhzkz568exMV1hTB76nAKbA==", + "dev": true, + "requires": { + "chalk": "2.3.2", + "jest-get-type": "22.4.3", + "pretty-format": "22.4.3" + } + }, + "jest-message-util": { + "version": "22.4.3", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-22.4.3.tgz", + "integrity": "sha512-iAMeKxhB3Se5xkSjU0NndLLCHtP4n+GtCqV0bISKA5dmOXQfEbdEmYiu2qpnWBDCQdEafNDDU6Q+l6oBMd/+BA==", + "dev": true, + "requires": { + "@babel/code-frame": "7.0.0-beta.42", + "chalk": "2.3.2", + "micromatch": "2.3.11", + "slash": "1.0.0", + "stack-utils": "1.0.1" + }, + "dependencies": { + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "dev": true + }, + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "dev": true, + "requires": { + "is-extglob": "1.0.0" + } + }, + "micromatch": { + "version": "2.3.11", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", + "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", + "dev": true, + "requires": { + "arr-diff": "2.0.0", + "array-unique": "0.2.1", + "braces": "1.8.5", + "expand-brackets": "0.1.5", + "extglob": "0.3.2", + "filename-regex": "2.0.1", + "is-extglob": "1.0.0", + "is-glob": "2.0.1", + "kind-of": "3.2.2", + "normalize-path": "2.1.1", + "object.omit": "2.0.1", + "parse-glob": "3.0.4", + "regex-cache": "0.4.4" + } + } + } + }, + "jest-mock": { + "version": "22.4.3", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-22.4.3.tgz", + "integrity": "sha512-+4R6mH5M1G4NK16CKg9N1DtCaFmuxhcIqF4lQK/Q1CIotqMs/XBemfpDPeVZBFow6iyUNu6EBT9ugdNOTT5o5Q==", + "dev": true + }, + "jest-regex-util": { + "version": "22.4.3", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-22.4.3.tgz", + "integrity": "sha512-LFg1gWr3QinIjb8j833bq7jtQopiwdAs67OGfkPrvy7uNUbVMfTXXcOKXJaeY5GgjobELkKvKENqq1xrUectWg==", + "dev": true + }, + "jest-resolve": { + "version": "22.4.3", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-22.4.3.tgz", + "integrity": "sha512-u3BkD/MQBmwrOJDzDIaxpyqTxYH+XqAXzVJP51gt29H8jpj3QgKof5GGO2uPGKGeA1yTMlpbMs1gIQ6U4vcRhw==", + "dev": true, + "requires": { + "browser-resolve": "1.11.2", + "chalk": "2.3.2" + } + }, + "jest-snapshot": { + "version": "22.4.3", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-22.4.3.tgz", + "integrity": "sha512-JXA0gVs5YL0HtLDCGa9YxcmmV2LZbwJ+0MfyXBBc5qpgkEYITQFJP7XNhcHFbUvRiniRpRbGVfJrOoYhhGE0RQ==", + "dev": true, + "requires": { + "chalk": "2.3.2", + "jest-diff": "22.4.3", + "jest-matcher-utils": "22.4.3", + "mkdirp": "0.5.1", + "natural-compare": "1.4.0", + "pretty-format": "22.4.3" + } + }, + "jest-util": { + "version": "22.4.3", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-22.4.3.tgz", + "integrity": "sha512-rfDfG8wyC5pDPNdcnAlZgwKnzHvZDu8Td2NJI/jAGKEGxJPYiE4F0ss/gSAkG4778Y23Hvbz+0GMrDJTeo7RjQ==", + "dev": true, + "requires": { + "callsites": "2.0.0", + "chalk": "2.3.2", + "graceful-fs": "4.1.11", + "is-ci": "1.1.0", + "jest-message-util": "22.4.3", + "mkdirp": "0.5.1", + "source-map": "0.6.1" + } + }, + "jest-validate": { + "version": "22.4.3", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-22.4.3.tgz", + "integrity": "sha512-CfFM18W3GSP/xgmA4UouIx0ljdtfD2mjeBC6c89Gg17E44D4tQhAcTrZmf9djvipwU30kSTnk6CzcxdCCeSXfA==", + "dev": true, + "requires": { + "chalk": "2.3.2", + "jest-config": "22.4.3", + "jest-get-type": "22.4.3", + "leven": "2.1.0", + "pretty-format": "22.4.3" + } + }, + "jsdom": { + "version": "11.6.2", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-11.6.2.tgz", + "integrity": "sha512-pAeZhpbSlUp5yQcS6cBQJwkbzmv4tWFaYxHbFVSxzXefqjvtRA851Z5N2P+TguVG9YeUDcgb8pdeVQRJh0XR3Q==", + "dev": true, + "requires": { + "abab": "1.0.4", + "acorn": "5.5.3", + "acorn-globals": "4.1.0", + "array-equal": "1.0.0", + "browser-process-hrtime": "0.1.2", + "content-type-parser": "1.0.2", + "cssom": "0.3.2", + "cssstyle": "0.2.37", + "domexception": "1.0.1", + "escodegen": "1.9.1", + "html-encoding-sniffer": "1.0.2", + "left-pad": "1.2.0", + "nwmatcher": "1.4.4", + "parse5": "4.0.0", + "pn": "1.1.0", + "request": "2.85.0", + "request-promise-native": "1.0.5", + "sax": "1.2.4", + "symbol-tree": "3.2.2", + "tough-cookie": "2.3.4", + "w3c-hr-time": "1.0.1", + "webidl-conversions": "4.0.2", + "whatwg-encoding": "1.0.3", + "whatwg-url": "6.4.0", + "ws": "4.1.0", + "xml-name-validator": "3.0.0" + } + }, + "log-symbols": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", + "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", + "dev": true, + "requires": { + "chalk": "2.3.2" + } + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "requires": { + "arr-diff": "4.0.0", + "array-unique": "0.3.2", + "braces": "2.3.1", + "define-property": "2.0.2", + "extend-shallow": "3.0.2", + "extglob": "2.0.4", + "fragment-cache": "0.2.1", + "kind-of": "6.0.2", + "nanomatch": "1.2.9", + "object.pick": "1.3.0", + "regex-not": "1.0.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" + }, + "dependencies": { + "arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "dev": true + }, + "array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "dev": true + }, + "braces": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.1.tgz", + "integrity": "sha512-SO5lYHA3vO6gz66erVvedSCkp7AKWdv6VcQ2N4ysXfPxdAlxAMMAdwegGGcv1Bqwm7naF1hNdk5d6AAIEHV2nQ==", + "dev": true, + "requires": { + "arr-flatten": "1.1.0", + "array-unique": "0.3.2", + "define-property": "1.0.0", + "extend-shallow": "2.0.1", + "fill-range": "4.0.0", + "isobject": "3.0.1", + "kind-of": "6.0.2", + "repeat-element": "1.1.2", + "snapdragon": "0.8.2", + "snapdragon-node": "2.1.1", + "split-string": "3.1.0", + "to-regex": "3.0.2" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "1.0.2" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "0.1.1" + } + } + } + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "dev": true, + "requires": { + "debug": "2.6.9", + "define-property": "0.2.5", + "extend-shallow": "2.0.1", + "posix-character-classes": "0.1.1", + "regex-not": "1.0.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "0.1.6" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "0.1.1" + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "0.1.6", + "is-data-descriptor": "0.1.4", + "kind-of": "5.1.0" + } + }, + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true + } + } + }, + "extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "dev": true, + "requires": { + "array-unique": "0.3.2", + "define-property": "1.0.0", + "expand-brackets": "2.1.4", + "extend-shallow": "2.0.1", + "fragment-cache": "0.2.1", + "regex-not": "1.0.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "1.0.2" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "0.1.1" + } + } + } + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true + } + } + }, + "parse5": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-4.0.0.tgz", + "integrity": "sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA==", + "dev": true + }, + "performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", + "dev": true + }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + }, + "pretty-format": { + "version": "22.4.3", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-22.4.3.tgz", + "integrity": "sha512-S4oT9/sT6MN7/3COoOy+ZJeA92VmOnveLHgrwBE3Z1W5N9S2A1QGNYiE1z75DAENbJrXXUb+OWXhpJcg05QKQQ==", "dev": true, "requires": { - "ms": "2.0.0" + "ansi-regex": "3.0.0", + "ansi-styles": "3.2.1" } }, - "execa": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-0.8.0.tgz", - "integrity": "sha1-2NdrvBtVIX7RkP1t1J08d07PyNo=", - "dev": true, - "requires": { - "cross-spawn": "5.1.0", - "get-stream": "3.0.0", - "is-stream": "1.1.0", - "npm-run-path": "2.0.2", - "p-finally": "1.0.0", - "signal-exit": "3.0.2", - "strip-eof": "1.0.0" - } + "punycode": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.0.tgz", + "integrity": "sha1-X4Y+3Im5bbCQdLrXlHvwkFbKTn0=", + "dev": true }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "qs": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz", + "integrity": "sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A==", "dev": true }, - "is-glob": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz", - "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=", + "request": { + "version": "2.85.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.85.0.tgz", + "integrity": "sha512-8H7Ehijd4js+s6wuVPLjwORxD4zeuyjYugprdOXlPSqaApmL/QOy+EB/beICHVCHkGMKNh5rvihb5ov+IDw4mg==", "dev": true, "requires": { - "is-extglob": "2.1.1" + "aws-sign2": "0.7.0", + "aws4": "1.6.0", + "caseless": "0.12.0", + "combined-stream": "1.0.6", + "extend": "3.0.1", + "forever-agent": "0.6.1", + "form-data": "2.3.2", + "har-validator": "5.0.3", + "hawk": "6.0.2", + "http-signature": "1.2.0", + "is-typedarray": "1.0.0", + "isstream": "0.1.2", + "json-stringify-safe": "5.0.1", + "mime-types": "2.1.18", + "oauth-sign": "0.8.2", + "performance-now": "2.1.0", + "qs": "6.5.1", + "safe-buffer": "5.1.1", + "stringstream": "0.0.5", + "tough-cookie": "2.3.4", + "tunnel-agent": "0.6.0", + "uuid": "3.2.1" } }, - "log-symbols": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", - "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", + "sntp": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/sntp/-/sntp-2.1.0.tgz", + "integrity": "sha512-FL1b58BDrqS3A11lJ0zEdnJ3UOKqVxawAkF3k7F0CVN7VQ34aZrV+G8BZ1WC9ZL7NyrwsW0oviwsWDgRuVYtJg==", "dev": true, "requires": { - "chalk": "2.3.2" + "hoek": "4.2.1" } }, - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true }, + "source-map-support": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.4.tgz", + "integrity": "sha512-PETSPG6BjY1AHs2t64vS2aqAgu6dMIMXJULWFBGbh2Gr8nVLbCFDo6i/RMMvviIQ2h1Z8+5gQhVKSn2je9nmdg==", + "dev": true, + "requires": { + "source-map": "0.6.1" + } + }, "supports-color": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.3.0.tgz", @@ -5508,6 +6315,32 @@ "requires": { "has-flag": "3.0.0" } + }, + "tr46": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", + "integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=", + "dev": true, + "requires": { + "punycode": "2.1.0" + } + }, + "whatwg-url": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-6.4.0.tgz", + "integrity": "sha512-Z0CVh/YE217Foyb488eo+iBv+r7eAQ0wSTyApi9n06jhcA3z6Nidg/EGvl0UFkg7kMdKxfBzzr+o9JF+cevgMg==", + "dev": true, + "requires": { + "lodash.sortby": "4.7.0", + "tr46": "1.0.1", + "webidl-conversions": "4.0.2" + } + }, + "xml-name-validator": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", + "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==", + "dev": true } } }, @@ -5681,23 +6514,16 @@ } }, "load-json-file": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", - "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", + "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", "dev": true, "requires": { "graceful-fs": "4.1.11", - "parse-json": "4.0.0", - "pify": "3.0.0", - "strip-bom": "3.0.0" - }, - "dependencies": { - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - } + "parse-json": "2.2.0", + "pify": "2.3.0", + "pinkie-promise": "2.0.1", + "strip-bom": "2.0.0" } }, "locate-path": { @@ -5725,6 +6551,12 @@ "resolved": "https://registry.npmjs.org/lodash.some/-/lodash.some-4.6.0.tgz", "integrity": "sha1-G7nzFO9ri63tE7VJFpsqlF62jk0=" }, + "lodash.sortby": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", + "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=", + "dev": true + }, "log-symbols": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-1.0.2.tgz", @@ -6337,6 +7169,17 @@ "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" }, + "output-file-sync": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/output-file-sync/-/output-file-sync-1.1.2.tgz", + "integrity": "sha1-0KM+7+YaIF+suQCS6CZZjVJFznY=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "mkdirp": "0.5.1", + "object-assign": "4.1.1" + } + }, "p-cancelable": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-0.3.0.tgz", @@ -6402,13 +7245,12 @@ } }, "parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", "dev": true, "requires": { - "error-ex": "1.3.1", - "json-parse-better-errors": "1.0.2" + "error-ex": "1.3.1" } }, "parse5": { @@ -6451,20 +7293,14 @@ "dev": true }, "path-type": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", - "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", + "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", "dev": true, "requires": { - "pify": "3.0.0" - }, - "dependencies": { - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - } + "graceful-fs": "4.1.11", + "pify": "2.3.0", + "pinkie-promise": "2.0.1" } }, "performance-now": { @@ -6503,12 +7339,24 @@ "find-up": "2.1.0" } }, + "please-upgrade-node": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/please-upgrade-node/-/please-upgrade-node-3.0.1.tgz", + "integrity": "sha1-CmgfLBiRXlQzpcos2U4Lggangts=", + "dev": true + }, "pluralize": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-7.0.0.tgz", "integrity": "sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow==", "dev": true }, + "pn": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/pn/-/pn-1.1.0.tgz", + "integrity": "sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA==", + "dev": true + }, "posix-character-classes": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", @@ -6533,9 +7381,9 @@ "dev": true }, "prettier": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.11.0.tgz", - "integrity": "sha512-5TznPccvjc3WtACW2YuHXQDCCpE6cTU7rpRLTw7dtNmvrI6j8lirXwICrYImyDZknIC4RL2epnGVqRbVAsQw+w==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.11.1.tgz", + "integrity": "sha512-T/KD65Ot0PB97xTrG8afQ46x3oiVhnfGjGESSI9NWYcG92+OUPZKkwHqGWXH2t9jK1crnQjubECW0FuOth+hxw==", "dev": true }, "pretty-format": { @@ -6546,14 +7394,6 @@ "requires": { "ansi-regex": "3.0.0", "ansi-styles": "3.2.1" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - } } }, "private": { @@ -6654,14 +7494,14 @@ } }, "read-pkg": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", - "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", + "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", "dev": true, "requires": { - "load-json-file": "4.0.0", + "load-json-file": "1.1.0", "normalize-package-data": "2.4.0", - "path-type": "3.0.0" + "path-type": "1.1.0" } }, "read-pkg-up": { @@ -6684,28 +7524,6 @@ "pinkie-promise": "2.0.1" } }, - "load-json-file": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", - "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", - "dev": true, - "requires": { - "graceful-fs": "4.1.11", - "parse-json": "2.2.0", - "pify": "2.3.0", - "pinkie-promise": "2.0.1", - "strip-bom": "2.0.0" - } - }, - "parse-json": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", - "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", - "dev": true, - "requires": { - "error-ex": "1.3.1" - } - }, "path-exists": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", @@ -6714,37 +7532,6 @@ "requires": { "pinkie-promise": "2.0.1" } - }, - "path-type": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", - "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", - "dev": true, - "requires": { - "graceful-fs": "4.1.11", - "pify": "2.3.0", - "pinkie-promise": "2.0.1" - } - }, - "read-pkg": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", - "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", - "dev": true, - "requires": { - "load-json-file": "1.1.0", - "normalize-package-data": "2.4.0", - "path-type": "1.1.0" - } - }, - "strip-bom": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", - "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", - "dev": true, - "requires": { - "is-utf8": "0.2.1" - } } } }, @@ -6762,6 +7549,19 @@ "util-deprecate": "1.0.2" } }, + "readdirp": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.1.0.tgz", + "integrity": "sha1-TtCtBg3zBzMAxIRANz9y0cxkLXg=", + "dev": true, + "optional": true, + "requires": { + "graceful-fs": "4.1.11", + "minimatch": "3.0.4", + "readable-stream": "2.3.5", + "set-immediate-shim": "1.0.1" + } + }, "regenerate": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.3.3.tgz", @@ -6804,9 +7604,9 @@ } }, "regexpp": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-1.1.0.tgz", - "integrity": "sha512-LOPw8FpgdQF9etWMaAfG/WRthIdXJGYp4mJ2Jgn/2lpkbod9jPn0t9UqN7AxBOKNfzRbYyVfgc7Vk4t/MpnXgw==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-1.0.1.tgz", + "integrity": "sha512-8Ph721maXiOYSLtaDGKVmDn5wdsNaF6Px85qFNeMPQq0r8K5Y10tgP6YuR65Ws35n4DvzFcCxEnRNBIXQunzLw==", "dev": true }, "regexpu-core": { @@ -6920,6 +7720,26 @@ "uuid": "3.2.1" } }, + "request-promise-core": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.1.tgz", + "integrity": "sha1-Pu4AssWqgyOc+wTFcA2jb4HNCLY=", + "dev": true, + "requires": { + "lodash": "4.17.5" + } + }, + "request-promise-native": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.5.tgz", + "integrity": "sha1-UoF3D2jgyXGeUWP9P6tIIhX0/aU=", + "dev": true, + "requires": { + "request-promise-core": "1.1.1", + "stealthy-require": "1.1.1", + "tough-cookie": "2.3.4" + } + }, "require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", @@ -6993,9 +7813,9 @@ } }, "rimraf": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", - "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.1.tgz", + "integrity": "sha1-wjOOxkPfeht/5cVPqG9XQopV8z0=", "dev": true, "requires": { "glob": "7.1.2" @@ -7078,6 +7898,16 @@ "watch": "0.18.0" }, "dependencies": { + "anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "dev": true, + "requires": { + "micromatch": "3.1.10", + "normalize-path": "2.1.1" + } + }, "arr-diff": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", @@ -7361,6 +8191,13 @@ "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", "dev": true }, + "set-immediate-shim": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz", + "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=", + "dev": true, + "optional": true + }, "set-value": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz", @@ -7679,10 +8516,16 @@ } } }, + "stack-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-1.0.1.tgz", + "integrity": "sha1-1PM6tU6OOHeLDKXP07OvsS22hiA=", + "dev": true + }, "staged-git-files": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/staged-git-files/-/staged-git-files-1.0.0.tgz", - "integrity": "sha1-zbhHg3wfzFLAioctSIPMCHdmioA=", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/staged-git-files/-/staged-git-files-1.1.0.tgz", + "integrity": "sha1-GpuxMcGIVgECPHqt3T1UwiFCxSY=", "dev": true }, "static-extend": { @@ -7763,6 +8606,12 @@ } } }, + "stealthy-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz", + "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=", + "dev": true + }, "stream-to-observable": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/stream-to-observable/-/stream-to-observable-0.2.0.tgz", @@ -7782,12 +8631,6 @@ "strip-ansi": "4.0.0" }, "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, "strip-ansi": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", @@ -7808,11 +8651,6 @@ "strip-ansi": "4.0.0" }, "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" - }, "strip-ansi": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", @@ -7854,13 +8692,23 @@ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "requires": { "ansi-regex": "2.1.1" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + } } }, "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", - "dev": true + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", + "dev": true, + "requires": { + "is-utf8": "0.2.1" + } }, "strip-eof": { "version": "1.0.0", @@ -8547,6 +9395,12 @@ } } }, + "user-home": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/user-home/-/user-home-1.1.1.tgz", + "integrity": "sha1-K1viOjK2Onyd640PKNSFcko98ZA=", + "dev": true + }, "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", @@ -8558,6 +9412,15 @@ "integrity": "sha512-jZnMwlb9Iku/O3smGWvZhauCf6cvvpKi4BKRiliS3cxnI+Gz9j5MEpTz2UFuXiKPJocb7gnsLHwiS05ige5BEA==", "dev": true }, + "v8flags": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-2.1.1.tgz", + "integrity": "sha1-qrGh+jDUX4jdMhFIh1rALAtV5bQ=", + "dev": true, + "requires": { + "user-home": "1.1.1" + } + }, "validate-npm-package-license": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.3.tgz", @@ -8605,6 +9468,15 @@ "resolved": "https://registry.npmjs.org/vlq/-/vlq-0.2.3.tgz", "integrity": "sha512-DRibZL6DsNhIgYQ+wNdWDL2SL3bKPlVrRiBqV5yuMm++op8W4kGFtaQfCs4KEJn0wBZcHVHJ3eoywX8983k1ow==" }, + "w3c-hr-time": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.1.tgz", + "integrity": "sha1-gqwr/2PZUOqeMYmlimViX+3xkEU=", + "dev": true, + "requires": { + "browser-process-hrtime": "0.1.2" + } + }, "walker": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.7.tgz", @@ -8776,6 +9648,16 @@ "signal-exit": "3.0.2" } }, + "ws": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-4.1.0.tgz", + "integrity": "sha512-ZGh/8kF9rrRNffkLFV4AzhvooEclrOH0xaugmqGsIfFgOE/pIz4fMc4Ef+5HSQqTEug2S9JZIWDR47duDSLfaA==", + "dev": true, + "requires": { + "async-limiter": "1.0.0", + "safe-buffer": "5.1.1" + } + }, "xdg-basedir": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-3.0.0.tgz", @@ -8869,15 +9751,6 @@ "strip-bom": "3.0.0" } }, - "parse-json": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", - "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", - "dev": true, - "requires": { - "error-ex": "1.3.1" - } - }, "path-type": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", @@ -8907,6 +9780,12 @@ "find-up": "2.1.0", "read-pkg": "2.0.0" } + }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true } } }, diff --git a/package.json b/package.json index 817441bfd..d14c89270 100644 --- a/package.json +++ b/package.json @@ -15,7 +15,7 @@ "url": "https://github.com/srod/node-minify.git" }, "engines": { - "node": ">=4.0.0" + "node": ">=6.0.0" }, "keywords": [ "compressor", @@ -36,21 +36,23 @@ "butternut" ], "scripts": { - "eslint": "eslint lib test || true", + "eslint": "eslint src test || true", "pretest": "npm run eslint", "test": "jest", "posttest": "npm run clean", - "precommit": "lint-staged", + "precommit": "npm run eslint && lint-staged", "clean": "rm -f ./examples/public/dist/* ./examples/public/js-dist/*", "release-patch": "npm version patch -m 'Bump %s' && git push --tags origin HEAD:master", "release-minor": "npm version minor -m 'Bump %s' && git push --tags origin HEAD:master", "release-major": "npm version major -m 'Bump %s' && git push --tags origin HEAD:master", "release-next": "git push --tags origin HEAD:develop", + "prepublish": "npm run build", "publish-latest": "npm publish", "publish-next": "npm publish --tag next", "prettier": "prettier", "prettier-write": "npm run prettier -- --write", - "prettier-project": "npm run prettier-write -- '{lib,__tests__}/**/*.js'" + "prettier-project": "npm run prettier-write -- '{bin,src,__tests__}/**/*.js'", + "build": "rimraf lib && babel src -d lib && cp -r src/binaries lib/binaries" }, "bin": { "node-minify": "bin/cli.js" @@ -63,7 +65,6 @@ "clean-css": "4.1.11", "commander": "2.9.0", "csso": "3.5.0", - "depd": "1.1.2", "glob": "7.1.2", "google-closure-compiler-js": "20180319.0.0", "gzip-size": "3.0.0", @@ -77,22 +78,52 @@ "xtend": "4.0.1" }, "devDependencies": { + "babel-cli": "6.18.0", + "babel-jest": "19.0.0", + "babel-plugin-transform-runtime": "6.23.0", "babel-preset-env": "1.6.1", + "babel-runtime": "6.26.0", "codecov": "3.0.0", "eslint": "4.19.1", "eslint-config-prettier": "2.9.0", "eslint-plugin-prettier": "2.6.0", "husky": "0.15.0-rc.2", "jest": "21.2.1", - "lint-staged": "6.1.1", - "prettier": "1.11.0" + "lint-staged": "7.0.0", + "prettier": "1.11.1", + "rimraf": "2.6.1" + }, + "babel": { + "plugins": [ + [ + "transform-runtime", + { + "polyfill": false, + "regenerator": true + } + ] + ], + "presets": [ + [ + "env", + { + "targets": { + "node": "6" + } + } + ] + ] }, "jest": { "notify": true, "verbose": true, "testEnvironment": "node", "coverageDirectory": "./coverage/", - "collectCoverage": true + "collectCoverage": true, + "testPathIgnorePatterns": [ + "/node_modules/", + ".history" + ] }, "lint-staged": { "*.js": [ diff --git a/lib/binaries/google_closure_compiler-v20131014-legacy-java-1.6.jar b/src/binaries/google_closure_compiler-v20131014-legacy-java-1.6.jar similarity index 100% rename from lib/binaries/google_closure_compiler-v20131014-legacy-java-1.6.jar rename to src/binaries/google_closure_compiler-v20131014-legacy-java-1.6.jar diff --git a/lib/binaries/google_closure_compiler-v20151216.jar b/src/binaries/google_closure_compiler-v20151216.jar similarity index 100% rename from lib/binaries/google_closure_compiler-v20151216.jar rename to src/binaries/google_closure_compiler-v20151216.jar diff --git a/lib/binaries/yuicompressor-2.4.7.jar b/src/binaries/yuicompressor-2.4.7.jar similarity index 100% rename from lib/binaries/yuicompressor-2.4.7.jar rename to src/binaries/yuicompressor-2.4.7.jar diff --git a/lib/cli/compress.js b/src/cli/compress.js similarity index 61% rename from lib/cli/compress.js rename to src/cli/compress.js index 2407801ab..bf1421069 100644 --- a/lib/cli/compress.js +++ b/src/cli/compress.js @@ -4,29 +4,20 @@ * MIT Licensed */ -'use strict'; - /** * Module dependencies. */ -var compressor = require('../node-minify'); -var utils = require('../utils'); - -/** - * Expose `compress()`. - */ - -module.exports = compress; +import { minify } from '../node-minify'; +import { utils } from '../utils'; -function compress(options) { - return new Promise(function(resolve, reject) { - compressor - .minify(options) - .then(function() { +const compress = options => { + return new Promise((resolve, reject) => { + minify(options) + .then(() => { utils .getFilesizeGzippedInBytes(options.output) - .then(function(sizeGzip) { + .then(sizeGzip => { resolve({ compressor: options.compressor, size: utils.getFilesizeInBytes(options.output), @@ -37,4 +28,10 @@ function compress(options) { }) .catch(reject); }); -} +}; + +/** + * Expose `compress()`. + */ + +export { compress }; diff --git a/lib/cli/index.js b/src/cli/index.js similarity index 67% rename from lib/cli/index.js rename to src/cli/index.js index efd4b2cd5..944087ea1 100644 --- a/lib/cli/index.js +++ b/src/cli/index.js @@ -4,32 +4,31 @@ * MIT Licensed */ -'use strict'; - /** * Module dependencies. */ -var chalk = require('chalk'); -var table = require('text-table'); -var compress = require('./compress'); -var spinner = require('./spinner'); +import chalk from 'chalk'; +import table from 'text-table'; +import { compress } from './compress'; +import { spinnerStart, spinnerStop, spinnerError } from './spinner'; + +let cliOptions; /** * Module variables. */ -var all = ['babel-minify', 'butternut', 'gcc', 'uglifyjs', 'yui']; -var cliOptions; -var selectedCompressors; +const all = ['babel-minify', 'butternut', 'gcc', 'uglifyjs', 'yui']; +let selectedCompressors; /** * Last step after minify. */ -function finalize(results, smallers) { +const finalize = (results, smallers) => { if (results.length - 1 === selectedCompressors.length) { - var _table = table(results); + const _table = table(results); console.log(''); console.log(chalk.bgBlue.black(' INFO '), 'Result'); @@ -39,34 +38,34 @@ function finalize(results, smallers) { console.log(chalk.bgBlue.black(' INFO '), formatSmallers(smallers)); console.log('\nCompressing with ' + chalk.green(smallers[0].compressor) + ' to ' + chalk.yellow(cliOptions.output)); - runOne(cliOptions, smallers[0].compressor, results, smallers).then(function() { + runOne(cliOptions, smallers[0].compressor, results, smallers).then(() => { console.log(''); console.log(chalk.bgGreen.black(' DONE '), chalk.green('All done!')); console.log(''); }); } -} +}; /** * Format the output. */ -function formatSmallers(smallers) { - var sizeGzip = 0; - var output = 'The smallest ' + (smallers.length > 1 ? 'are' : 'is') + ': '; - smallers.forEach(function(item) { +const formatSmallers = smallers => { + let sizeGzip = 0; + let output = 'The smallest ' + (smallers.length > 1 ? 'are' : 'is') + ': '; + smallers.forEach(item => { output += chalk.green(item.compressor) + ' '; sizeGzip = chalk.green(item.sizeGzip); }); output += 'with ' + sizeGzip; return output; -} +}; /** * Set the smallers compressor result. */ -function setSmaller(result, smallers) { +const setSmaller = (result, smallers) => { if (!smallers[0].sizeGzip) { smallers[0] = result; return; @@ -79,50 +78,50 @@ function setSmaller(result, smallers) { if (smallers[0].sizeGzip === result.sizeGzip) { smallers.push(result); } -} +}; /** * Run one compressor. */ -function runOne(cli, compressor, results, smallers) { - return new Promise(function(resolve, reject) { - var options = { +const runOne = (cli, compressor, results, smallers) => { + return new Promise((resolve, reject) => { + const options = { compressor: compressor || cli.compressor, input: cli.input.split(','), output: cli.output }; - spinner.start(compressor || cli.compressor); + spinnerStart(compressor || cli.compressor); return compress(options) - .then(function(result) { + .then(result => { results.push([result.compressor, result.size, result.sizeGzip]); setSmaller(result, smallers); - spinner.stop(compressor); + spinnerStop(compressor); resolve(); }) - .catch(function(err) { - spinner.error(compressor); + .catch(err => { + spinnerError(compressor); reject(err); }); }); -} +}; /** * Run cli. */ -function run(cli) { - var results = [['Compressor', 'Size minified', 'Size Gzipped']]; - var smallers = [{ sizeGzip: undefined }]; +const run = cli => { + const results = [['Compressor', 'Size minified', 'Size Gzipped']]; + const smallers = [{ sizeGzip: undefined }]; cliOptions = cli; console.log(''); console.log(chalk.bgBlue.black(' INFO '), 'Starting compression...'); console.log(''); - return new Promise(function(resolve, reject) { + return new Promise((resolve, reject) => { if (cli.compressor === 'all') { selectedCompressors = all; } else { @@ -133,14 +132,14 @@ function run(cli) { const isMultipleCompressors = selectedCompressors.length > 1; if (isMultipleCompressors) { - var sequence = Promise.resolve(); - selectedCompressors.forEach(function(compressor) { - sequence = sequence.then(function() { + let sequence = Promise.resolve(); + selectedCompressors.forEach(compressor => { + sequence = sequence.then(() => { return runOne(cli, compressor, results, smallers); }); }); sequence - .then(function() { + .then(() => { finalize(results, smallers); resolve(); }) @@ -148,7 +147,7 @@ function run(cli) { return sequence; } else { runOne(cli, cli.compressor, results, smallers) - .then(function() { + .then(() => { console.log(''); console.log(chalk.bgGreen.black(' DONE '), chalk.green('Done!')); console.log(''); @@ -157,6 +156,6 @@ function run(cli) { .catch(reject); } }); -} +}; -module.exports = run; +export { run }; diff --git a/lib/cli/spinner.js b/src/cli/spinner.js similarity index 63% rename from lib/cli/spinner.js rename to src/cli/spinner.js index 105745fc2..009d48996 100644 --- a/lib/cli/spinner.js +++ b/src/cli/spinner.js @@ -4,36 +4,32 @@ * MIT Licensed */ -'use strict'; - /** * Module dependencies. */ -var chalk = require('chalk'); -var ora = require('ora'); - -/** - * Expose `start() and stop()`. - */ - -module.exports.start = start; -module.exports.stop = stop; -module.exports.error = error; +import chalk from 'chalk'; +import ora from 'ora'; -var spinner = ora(); +const spinner = ora(); -function start(compressor) { +const start = compressor => { spinner.text = 'Compressing file(s) with ' + chalk.green(compressor) + '...'; spinner.start(); -} +}; -function stop(compressor) { +const stop = compressor => { spinner.text = 'File(s) compressed successfully with ' + chalk.green(compressor); spinner.succeed(); -} +}; -function error(compressor) { +const error = compressor => { spinner.text = 'Error - file(s) not compressed with ' + chalk.red(compressor); spinner.fail(); -} +}; + +/** + * Expose `start() and stop()`. + */ + +export { start as spinnerStart, stop as spinnerStop, error as spinnerError }; diff --git a/src/compress.js b/src/compress.js new file mode 100644 index 000000000..8d938d992 --- /dev/null +++ b/src/compress.js @@ -0,0 +1,137 @@ +/*! + * node-minify + * Copyright(c) 2011-2018 Rodolphe Stoclin + * MIT Licensed + */ + +/** + * Module dependencies. + */ + +import fs from 'fs'; +import mkdirp from 'mkdirp'; +import { utils } from './utils'; +import { + compressBabelMinify, + compressButternut, + compressCleanCSS, + compressCSSO, + compressGCC, + noCompress, + compressSqwish, + compressUglifyJS, + compressYUI +} from './compressors'; + +let gcc; + +if ((process.execArgv && process.execArgv.indexOf('--use_strict') > -1) || !utils.isNodeV4AndHigher()) { + gcc = require('./compressors/gcc-java').compressGCC; +} else { + gcc = require('./compressors/gcc').compressGCCJS; +} + +/** + * Mapping input compressors to functions + * to be executed + */ + +const compressorsMap = { + 'babel-minify': compressBabelMinify, + butternut: compressButternut, + yui: (settings, data, callback) => { + return compressYUI('css', settings, data, callback); + }, + 'yui-css': (settings, data, callback) => { + return compressYUI('css', settings, data, callback); + }, + 'yui-js': (settings, data, callback) => { + return compressYUI('js', settings, data, callback); + }, + gcc, + 'gcc-java': (settings, data, callback) => { + return compressGCC(settings, data, callback, false); + }, + 'gcc-legacy': (settings, data, callback) => { + return compressGCC(settings, data, callback, true); + }, + uglifyjs: compressUglifyJS, + sqwish: compressSqwish, + 'clean-css': compressCleanCSS, + csso: compressCSSO, + 'no-compress': noCompress +}; + +/** + * Run compressor. + * + * @param {Object} settings + */ + +const compress = settings => { + if (typeof compressorsMap[settings.compressor] !== 'function') { + throw new Error(`Type "${settings.compressor}" does not exist`); + } + + createDirectory(settings.output); + const content = getContentFromFiles(settings.input); + return settings.sync ? runSync(settings, content) : runAsync(settings, content); +}; + +/** + * Run compressor in sync. + * + * @param {Object} settings + * @param {String} content + * @return {String} + */ + +const runSync = (settings, content) => compressorsMap[settings.compressor](settings, content); + +/** + * Run compressor in async. + * + * @param {Object} settings + * @param {String} content + * @return {Promise} + */ + +const runAsync = (settings, content) => { + return new Promise((resolve, reject) => { + compressorsMap[settings.compressor](settings, content, (err, min) => { + if (err) { + return reject(err); + } + resolve(min); + }); + }); +}; + +/** + * Concatenate all input files and get the data. + * + * @param {String|Array} input + * @return {String} + */ + +const getContentFromFiles = input => { + if (!Array.isArray(input)) { + return fs.readFileSync(input, 'utf8'); + } + + return input.map(path => fs.readFileSync(path, 'utf8')).join('\n'); +}; + +/** + * Create folder of the target file. + * + * @param {String} file - Full path of the file + */ + +const createDirectory = file => mkdirp.sync(file.substr(0, file.lastIndexOf('/'))); + +/** + * Expose `compress()`. + */ + +export { compress }; diff --git a/lib/compressors/babel-minify.js b/src/compressors/babel-minify.js similarity index 68% rename from lib/compressors/babel-minify.js rename to src/compressors/babel-minify.js index 1eb6feed6..a89ecc26d 100644 --- a/lib/compressors/babel-minify.js +++ b/src/compressors/babel-minify.js @@ -4,21 +4,13 @@ * MIT Licensed */ -'use strict'; - /** * Module dependencies. */ -var babel = require('babel-core'); -var minify = require('babel-preset-minify'); -var utils = require('../utils'); - -/** - * Expose `compressBabelMinify()`. - */ - -module.exports = compressBabelMinify; +import { transform } from 'babel-core'; +import { minify } from 'babel-preset-minify'; +import { utils } from '../utils'; /** * Run babel-minify. @@ -28,8 +20,8 @@ module.exports = compressBabelMinify; * @param {Function} callback */ -function compressBabelMinify(settings, content, callback) { - var babelOptions = { +const compressBabelMinify = (settings, content, callback) => { + let babelOptions = { presets: [] }; @@ -38,7 +30,7 @@ function compressBabelMinify(settings, content, callback) { } if (settings.options.presets) { - var babelrcPresets = babelOptions.presets || []; + const babelrcPresets = babelOptions.presets || []; babelOptions.presets = babelrcPresets.concat(settings.options.presets); } @@ -46,10 +38,16 @@ function compressBabelMinify(settings, content, callback) { babelOptions.presets = babelOptions.presets.concat([minify]); } - var contentMinified = babel.transform(content, babelOptions); + const contentMinified = transform(content, babelOptions); utils.writeFile(settings.output, contentMinified.code); if (callback) { return callback(null, contentMinified.code); } return contentMinified.code; -} +}; + +/** + * Expose `compressBabelMinify()`. + */ + +export { compressBabelMinify }; diff --git a/lib/compressors/butternut.js b/src/compressors/butternut.js similarity index 69% rename from lib/compressors/butternut.js rename to src/compressors/butternut.js index be005417c..b81b869dc 100644 --- a/lib/compressors/butternut.js +++ b/src/compressors/butternut.js @@ -4,20 +4,12 @@ * MIT Licensed */ -'use strict'; - /** * Module dependencies. */ -var butternut = require('butternut'); -var utils = require('../utils'); - -/** - * Expose `compressButternut()`. - */ - -module.exports = compressButternut; +import { squash } from 'butternut'; +import { utils } from '../utils'; /** * Run butternut. @@ -27,8 +19,8 @@ module.exports = compressButternut; * @param {Function} callback */ -function compressButternut(settings, content, callback) { - var contentMinified = butternut.squash(content, settings.options); +const compressButternut = (settings, content, callback) => { + const contentMinified = squash(content, settings.options); if (contentMinified.map && settings.options.sourceMap) { utils.writeFile(settings.output + '.map', contentMinified.map); } @@ -37,4 +29,10 @@ function compressButternut(settings, content, callback) { return callback(null, contentMinified.code); } return contentMinified.code; -} +}; + +/** + * Expose `compressButternut()`. + */ + +export { compressButternut }; diff --git a/lib/compressors/clean-css.js b/src/compressors/clean-css.js similarity index 61% rename from lib/compressors/clean-css.js rename to src/compressors/clean-css.js index 0aea06053..ec0ec87ca 100644 --- a/lib/compressors/clean-css.js +++ b/src/compressors/clean-css.js @@ -4,20 +4,12 @@ * MIT Licensed */ -'use strict'; - /** * Module dependencies. */ -var CleanCSS = require('clean-css'); -var utils = require('../utils'); - -/** - * Expose `compressCleanCSS()`. - */ - -module.exports = compressCleanCSS; +import CleanCSS from 'clean-css'; +import { utils } from '../utils'; /** * Run clean-css. @@ -27,11 +19,17 @@ module.exports = compressCleanCSS; * @param {Function} callback */ -function compressCleanCSS(settings, content, callback) { - var contentMinified = new CleanCSS(settings.options).minify(content).styles; +const compressCleanCSS = (settings, content, callback) => { + const contentMinified = new CleanCSS(settings.options).minify(content).styles; utils.writeFile(settings.output, contentMinified); if (callback) { return callback(null, contentMinified); } return contentMinified; -} +}; + +/** + * Expose `compressCleanCSS()`. + */ + +export { compressCleanCSS }; diff --git a/lib/compressors/csso.js b/src/compressors/csso.js similarity index 63% rename from lib/compressors/csso.js rename to src/compressors/csso.js index 37d231ab1..977d2e5a8 100644 --- a/lib/compressors/csso.js +++ b/src/compressors/csso.js @@ -4,20 +4,12 @@ * MIT Licensed */ -'use strict'; - /** * Module dependencies. */ -var csso = require('csso'); -var utils = require('../utils'); - -/** - * Expose `compressCSSO()`. - */ - -module.exports = compressCSSO; +import csso from 'csso'; +import { utils } from '../utils'; /** * Run csso. @@ -27,11 +19,17 @@ module.exports = compressCSSO; * @param {Function} callback */ -function compressCSSO(settings, content, callback) { - var contentMinified = csso.minify(content, settings.options.restructureOff); +const compressCSSO = (settings, content, callback) => { + const contentMinified = csso.minify(content, settings.options.restructureOff); utils.writeFile(settings.output, contentMinified.css); if (callback) { return callback(null, contentMinified.css); } return contentMinified.css; -} +}; + +/** + * Expose `compressCSSO()`. + */ + +export { compressCSSO }; diff --git a/lib/compressors/gcc-java.js b/src/compressors/gcc-java.js similarity index 62% rename from lib/compressors/gcc-java.js rename to src/compressors/gcc-java.js index dd1327917..0e8a6f610 100644 --- a/lib/compressors/gcc-java.js +++ b/src/compressors/gcc-java.js @@ -4,27 +4,19 @@ * MIT Licensed */ -'use strict'; - /** * Module dependencies. */ -var path = require('path'); -var utils = require('../utils'); -var execCompressor = require('../runner'); +import path from 'path'; +import { utils } from '../utils'; +import { runCommandLine } from '../runner'; /** * Module variables. */ -var binGcc = path.normalize(__dirname + '/../binaries/google_closure_compiler-v20151216.jar'); -var binGccLegacy = path.normalize(__dirname + '/../binaries/google_closure_compiler-v20131014-legacy-java-1.6.jar'); - -/** - * Expose `compressGCC()`. - */ - -module.exports = compressGCC; +const binGcc = path.normalize(__dirname + '/../binaries/google_closure_compiler-v20151216.jar'); +const binGccLegacy = path.normalize(__dirname + '/../binaries/google_closure_compiler-v20131014-legacy-java-1.6.jar'); /** * Run Google Closure Compiler. @@ -35,8 +27,8 @@ module.exports = compressGCC; * @param {Function} callback */ -function compressGCC(settings, content, callback, legacy) { - return execCompressor(gccCommand(settings.options, legacy), content, settings, function(err, contentMinified) { +const compressGCC = (settings, content, callback, legacy) => { + return runCommandLine(gccCommand(settings.options, legacy), content, settings, (err, contentMinified) => { if (err) { return handleErrors(err, callback); } @@ -46,10 +38,10 @@ function compressGCC(settings, content, callback, legacy) { } return contentMinified; }); -} +}; -function handleErrors(err, callback) { - var message = null; +const handleErrors = (err, callback) => { + let message = null; if (err.message.indexOf('UnsupportedClassVersionError') > -1) { message = 'Latest Google Closure Compiler requires Java >= 1.7, please update Java or use gcc-legacy'; } @@ -59,13 +51,13 @@ function handleErrors(err, callback) { } else { throw message || err; } -} +}; /** * Google Closure Compiler command line. */ -function gccCommand(options, legacy) { +const gccCommand = (options, legacy) => { return [ '-server', '-XX:+TieredCompilation', @@ -75,4 +67,10 @@ function gccCommand(options, legacy) { '--warning_level', 'QUIET' ].concat(utils.buildArgs(options)); -} +}; + +/** + * Expose `compressGCC()`. + */ + +export { compressGCC }; diff --git a/lib/compressors/gcc.js b/src/compressors/gcc.js similarity index 77% rename from lib/compressors/gcc.js rename to src/compressors/gcc.js index 08b9fa341..b33c1742d 100644 --- a/lib/compressors/gcc.js +++ b/src/compressors/gcc.js @@ -4,16 +4,15 @@ * MIT Licensed */ -'use strict'; - /** * Module dependencies. */ -var gcc = require('google-closure-compiler-js'); -var utils = require('../utils'); +import gcc from 'google-closure-compiler-js'; +import { utils } from '../utils'; + // the allowed flags, taken from https://github.com/google/closure-compiler-js -var allowedFlags = [ +const allowedFlags = [ 'angularPass', 'applyInputSourceMaps', 'assumeFunctionWrapper', @@ -39,12 +38,6 @@ var allowedFlags = [ 'warningLevel' ]; -/** - * Expose `compressGCCJS()`. - */ - -module.exports = compressGCCJS; - /** * Run Google Closure Compiler. * @@ -53,10 +46,10 @@ module.exports = compressGCCJS; * @param {Function} callback */ -function compressGCCJS(settings, content, callback) { - var flags = { jsCode: [{ src: content }] }; +const compressGCCJS = (settings, content, callback) => { + let flags = { jsCode: [{ src: content }] }; flags = applyOptions(flags, settings.options); - var contentMinified = gcc.compile(flags); + const contentMinified = gcc.compile(flags); utils.writeFile(settings.output, contentMinified.compiledCode); /** @@ -67,7 +60,7 @@ function compressGCCJS(settings, content, callback) { */ if (settings.options.createSourceMap) { - var sourceMapOutput = + const sourceMapOutput = typeof settings.options.createSourceMap === 'boolean' ? settings.output + '.map' : settings.options.createSourceMap; @@ -78,7 +71,7 @@ function compressGCCJS(settings, content, callback) { return callback(null, contentMinified.compiledCode); } return contentMinified.compiledCode; -} +}; /** * Adds any valid options passed in the options parameters to the flags parameter and returns the flags object. @@ -87,16 +80,18 @@ function compressGCCJS(settings, content, callback) { * @returns {Object} flags */ -function applyOptions(flags, options) { +const applyOptions = (flags, options) => { if (!options || Object.keys(options).length === 0) { return flags; } Object.keys(options) - .filter(function(option) { - return allowedFlags.indexOf(option) > -1; - }) - .forEach(function(option) { - return (flags[option] = options[option]); - }); + .filter(option => allowedFlags.indexOf(option) > -1) + .forEach(option => (flags[option] = options[option])); return flags; -} +}; + +/** + * Expose `compressGCCJS()`. + */ + +export { compressGCCJS }; diff --git a/src/compressors/index.js b/src/compressors/index.js new file mode 100644 index 000000000..d3276e4a4 --- /dev/null +++ b/src/compressors/index.js @@ -0,0 +1,9 @@ +export { compressBabelMinify } from './babel-minify'; +export { compressButternut } from './butternut'; +export { compressCleanCSS } from './clean-css'; +export { compressCSSO } from './csso'; +export { compressGCC } from './gcc-java'; +export { noCompress } from './no-compress'; +export { compressSqwish } from './sqwish'; +export { compressUglifyJS } from './uglifyjs'; +export { compressYUI } from './yui'; diff --git a/lib/compressors/no-compress.js b/src/compressors/no-compress.js similarity index 75% rename from lib/compressors/no-compress.js rename to src/compressors/no-compress.js index 700e5ce75..94e5efe6a 100644 --- a/lib/compressors/no-compress.js +++ b/src/compressors/no-compress.js @@ -4,19 +4,11 @@ * MIT Licensed */ -'use strict'; - /** * Module dependencies. */ -var utils = require('../utils'); - -/** - * Expose `noCompress()`. - */ - -module.exports = noCompress; +import { utils } from '../utils'; /** * Just merge, no compression. @@ -26,10 +18,16 @@ module.exports = noCompress; * @param {Function} callback */ -function noCompress(settings, content, callback) { +const noCompress = (settings, content, callback) => { utils.writeFile(settings.output, content); if (callback) { return callback(null, content); } return content; -} +}; + +/** + * Expose `noCompress()`. + */ + +export { noCompress }; diff --git a/lib/compressors/sqwish.js b/src/compressors/sqwish.js similarity index 63% rename from lib/compressors/sqwish.js rename to src/compressors/sqwish.js index f11d0b104..ceb12d0da 100644 --- a/lib/compressors/sqwish.js +++ b/src/compressors/sqwish.js @@ -4,20 +4,12 @@ * MIT Licensed */ -'use strict'; - /** * Module dependencies. */ -var sqwish = require('sqwish'); -var utils = require('../utils'); - -/** - * Expose `compressSqwish()`. - */ - -module.exports = compressSqwish; +import sqwish from 'sqwish'; +import { utils } from '../utils'; /** * Run sqwish. @@ -27,11 +19,17 @@ module.exports = compressSqwish; * @param {Function} callback */ -function compressSqwish(settings, content, callback) { - var contentMinified = sqwish.minify(content, settings.options.strict); +const compressSqwish = (settings, content, callback) => { + const contentMinified = sqwish.minify(content, settings.options.strict); utils.writeFile(settings.output, contentMinified); if (callback) { return callback(null, contentMinified); } return contentMinified; -} +}; + +/** + * Expose `compressSqwish()`. + */ + +export { compressSqwish }; diff --git a/lib/compressors/uglifyjs.js b/src/compressors/uglifyjs.js similarity index 69% rename from lib/compressors/uglifyjs.js rename to src/compressors/uglifyjs.js index 1d67af5ed..95ddd584d 100644 --- a/lib/compressors/uglifyjs.js +++ b/src/compressors/uglifyjs.js @@ -4,20 +4,12 @@ * MIT Licensed */ -'use strict'; - /** * Module dependencies. */ -var uglifyJS = require('uglify-js'); -var utils = require('../utils'); - -/** - * Expose `compressUglifyJS()`. - */ - -module.exports = compressUglifyJS; +import uglifyJS from 'uglify-js'; +import { utils } from '../utils'; /** * Run uglifyJS. @@ -27,8 +19,8 @@ module.exports = compressUglifyJS; * @param {Function} callback */ -function compressUglifyJS(settings, content, callback) { - var contentMinified = uglifyJS.minify(content, settings.options); +const compressUglifyJS = (settings, content, callback) => { + const contentMinified = uglifyJS.minify(content, settings.options); if (contentMinified.map && settings.options.sourceMap) { utils.writeFile(settings.options.sourceMap.url, contentMinified.map); } @@ -37,4 +29,10 @@ function compressUglifyJS(settings, content, callback) { return callback(null, contentMinified.code); } return contentMinified.code; -} +}; + +/** + * Expose `compressUglifyJS()`. + */ + +export { compressUglifyJS }; diff --git a/lib/compressors/yui.js b/src/compressors/yui.js similarity index 62% rename from lib/compressors/yui.js rename to src/compressors/yui.js index 30369d49d..2c4e6fad8 100644 --- a/lib/compressors/yui.js +++ b/src/compressors/yui.js @@ -4,26 +4,18 @@ * MIT Licensed */ -'use strict'; - /** * Module dependencies. */ -var path = require('path'); -var utils = require('../utils'); -var execCompressor = require('../runner'); +import path from 'path'; +import { utils } from '../utils'; +import { runCommandLine } from '../runner'; /** * Module variables. */ -var binYui = path.normalize(__dirname + '/../binaries/yuicompressor-2.4.7.jar'); - -/** - * Expose `compressYUI()`. - */ - -module.exports = compressYUI; +const binYui = path.normalize(__dirname + '/../binaries/yuicompressor-2.4.7.jar'); /** * Run YUI Compressor. @@ -34,8 +26,8 @@ module.exports = compressYUI; * @param {Function} callback */ -function compressYUI(type, settings, content, callback) { - return execCompressor(yuiCommand(type, settings.options), content, settings, function(err, contentMinified) { +const compressYUI = (type, settings, content, callback) => { + return runCommandLine(yuiCommand(type, settings.options), content, settings, (err, contentMinified) => { if (err) { if (callback) { return callback(err); @@ -49,12 +41,18 @@ function compressYUI(type, settings, content, callback) { } return contentMinified; }); -} +}; /** * YUI Compressor CSS command line. */ -function yuiCommand(type, options) { +const yuiCommand = (type, options) => { return ['-jar', '-Xss2048k', binYui, '--type', type].concat(utils.buildArgs(options)); -} +}; + +/** + * Expose `compressYUI()`. + */ + +export { compressYUI }; diff --git a/lib/node-minify.js b/src/node-minify.js similarity index 60% rename from lib/node-minify.js rename to src/node-minify.js index 7e9eb6268..6786fe2a2 100644 --- a/lib/node-minify.js +++ b/src/node-minify.js @@ -4,21 +4,12 @@ * MIT Licensed */ -'use strict'; - /** * Module dependencies. */ -var deprecated = require('./deprecated'); -var setup = require('./setup'); -var compress = require('./compress'); - -/** - * Expose `minify()`. - */ - -var app = (module.exports = {}); +import { setup } from './setup'; +import { compress } from './compress'; /** * Run node-minify. @@ -26,26 +17,25 @@ var app = (module.exports = {}); * @param {Object} settings - Settings from user input */ -app.minify = function minify(settings) { - deprecated(this.constructor.name, settings); - return new Promise(function(resolve, reject) { +const minify = settings => { + return new Promise((resolve, reject) => { settings = setup(settings); if (!settings.sync) { compress(settings) - .then(function(min) { + .then(min => { if (settings.callback) { settings.callback(null, min); } resolve(min); }) - .catch(function(err) { + .catch(err => { if (settings.callback) { settings.callback(err); } reject(err); }); } else { - var min = compress(settings); + const min = compress(settings); if (settings.callback) { settings.callback(null, min); } @@ -53,3 +43,5 @@ app.minify = function minify(settings) { } }); }; + +export { minify }; diff --git a/lib/runner.js b/src/runner.js similarity index 69% rename from lib/runner.js rename to src/runner.js index ff2f92687..d1c9d1926 100644 --- a/lib/runner.js +++ b/src/runner.js @@ -4,19 +4,11 @@ * MIT Licensed */ -'use strict'; - /** * Module dependencies. */ -var childProcess = require('child_process'); - -/** - * Expose `runCommandLine()`. - */ - -module.exports = runCommandLine; +import childProcess from 'child_process'; /** * Run the command line with spawn. @@ -27,13 +19,13 @@ module.exports = runCommandLine; * @param {Function} callback */ -function runCommandLine(args, data, settings, callback) { +const runCommandLine = (args, data, settings, callback) => { if (settings.sync) { return runSync(settings, data, args, callback); } return runAsync(data, args, callback); -} +}; /** * Exec command as async. @@ -43,11 +35,11 @@ function runCommandLine(args, data, settings, callback) { * @param {Function} callback */ -function runAsync(content, args, callback) { - var stdout = ''; - var stderr = ''; +const runAsync = (content, args, callback) => { + let stdout = ''; + let stderr = ''; - var child = childProcess.spawn('java', args, { + const child = childProcess.spawn('java', args, { stdio: 'pipe' }); @@ -56,7 +48,7 @@ function runAsync(content, args, callback) { child.stdout.on('error', console.log.bind(console, 'child.stdout')); child.stderr.on('error', console.log.bind(console, 'child.stderr')); - child.on('exit', function(code) { + child.on('exit', code => { if (code !== 0) { return callback(new Error(stderr)); } @@ -64,15 +56,15 @@ function runAsync(content, args, callback) { return callback(null, stdout); }); - child.stdout.on('data', function(chunk) { + child.stdout.on('data', chunk => { stdout += chunk; }); - child.stderr.on('data', function(chunk) { + child.stderr.on('data', chunk => { stderr += chunk; }); child.stdin.end(content); -} +}; /** * Exec command as sync. @@ -83,16 +75,16 @@ function runAsync(content, args, callback) { * @param {Function} callback */ -function runSync(settings, content, args, callback) { +const runSync = (settings, content, args, callback) => { try { - var child = childProcess.spawnSync('java', args, { + const child = childProcess.spawnSync('java', args, { input: content, stdio: 'pipe', maxBuffer: settings.buffer }); - var stdout = child.stdout.toString(); - var stderr = child.stderr.toString(); - var code = child.status; + const stdout = child.stdout.toString(); + const stderr = child.stderr.toString(); + const code = child.status; if (code !== 0) { return callback(new Error(stderr)); @@ -102,4 +94,10 @@ function runSync(settings, content, args, callback) { } catch (err) { return callback(err); } -} +}; + +/** + * Expose `runCommandLine()`. + */ + +export { runCommandLine }; diff --git a/lib/setup.js b/src/setup.js similarity index 77% rename from lib/setup.js rename to src/setup.js index 3c8677210..13fb7511b 100644 --- a/lib/setup.js +++ b/src/setup.js @@ -4,34 +4,26 @@ * MIT Licensed */ -'use strict'; - /** * Module dependencies. */ -var path = require('path'); -var glob = require('glob'); -var extend = require('xtend'); -var utils = require('./utils'); +import path from 'path'; +import glob from 'glob'; +import extend from 'xtend'; +import { utils } from './utils'; /** * Default settings. */ -var defaultSettings = { +const defaultSettings = { sync: false, options: {}, buffer: 1000 * 1024, callback: false }; -/** - * Expose `setup()`. - */ - -module.exports = setup; - /** * Run setup. * @@ -39,15 +31,15 @@ module.exports = setup; * @return {Object} */ -function setup(inputSettings) { +const setup = inputSettings => { checkMandatories(inputSettings); - var settings = extend(utils.clone(defaultSettings), inputSettings); + let settings = extend(utils.clone(defaultSettings), inputSettings); settings = extend(settings, wildcards(settings.input, settings.publicFolder)); settings = extend(settings, setPublicFolder(settings.input, settings.publicFolder)); return settings; -} +}; /** * Handle wildcards in a path, get the real path of each files. @@ -57,14 +49,14 @@ function setup(inputSettings) { * @return {Object} */ -function wildcards(input, publicFolder) { +const wildcards = (input, publicFolder) => { // If it's a string if (!Array.isArray(input)) { return wildcardsString(input, publicFolder); } return wildcardsArray(input, publicFolder); -} +}; /** * Handle wildcards in a path (string only), get the real path of each files. @@ -74,15 +66,15 @@ function wildcards(input, publicFolder) { * @return {Object} */ -function wildcardsString(input, publicFolder) { - var output = {}; +const wildcardsString = (input, publicFolder) => { + const output = {}; if (input.indexOf('*') > -1) { output.input = getFilesFromWildcards(input, publicFolder); } return output; -} +}; /** * Handle wildcards in a path (array only), get the real path of each files. @@ -92,18 +84,18 @@ function wildcardsString(input, publicFolder) { * @return {Object} */ -function wildcardsArray(input, publicFolder) { - var output = {}; +const wildcardsArray = (input, publicFolder) => { + let output = {}; output.input = input; // Transform all wildcards to path file - input.forEach(function(item) { + input.forEach(item => { output.input = output.input.concat(getFilesFromWildcards(item, publicFolder)); }); // Remove all wildcards from array - for (var i = 0; i < output.input.length; i++) { + for (let i = 0; i < output.input.length; i++) { if (output.input[i].indexOf('*') > -1) { output.input.splice(i, 1); @@ -112,7 +104,7 @@ function wildcardsArray(input, publicFolder) { } return output; -} +}; /** * Get the real path of each files. @@ -122,15 +114,15 @@ function wildcardsArray(input, publicFolder) { * @return {Object} */ -function getFilesFromWildcards(input, publicFolder) { - var output = []; +const getFilesFromWildcards = (input, publicFolder) => { + let output = []; if (input.indexOf('*') > -1) { output = glob.sync((publicFolder || '') + input, null); } return output; -} +}; /** * Prepend the public folder to each file. @@ -140,8 +132,8 @@ function getFilesFromWildcards(input, publicFolder) { * @return {Object} */ -function setPublicFolder(input, publicFolder) { - var output = {}; +const setPublicFolder = (input, publicFolder) => { + let output = {}; if (typeof publicFolder !== 'string') { return output; @@ -150,7 +142,7 @@ function setPublicFolder(input, publicFolder) { publicFolder = path.normalize(publicFolder); if (Array.isArray(input)) { - output.input = input.map(function(item) { + output.input = input.map(item => { // Check if publicFolder is already in path if (path.normalize(item).indexOf(publicFolder) > -1) { return item; @@ -171,7 +163,7 @@ function setPublicFolder(input, publicFolder) { output.input = path.normalize(publicFolder + input); return output; -} +}; /** * Check if some settings are here. @@ -179,11 +171,9 @@ function setPublicFolder(input, publicFolder) { * @param {Object} settings */ -function checkMandatories(settings) { - ['compressor', 'input', 'output'].forEach(function(item) { - mandatory(item, settings); - }); -} +const checkMandatories = settings => { + ['compressor', 'input', 'output'].forEach(item => mandatory(item, settings)); +}; /** * Check if the setting exist. @@ -192,8 +182,14 @@ function checkMandatories(settings) { * @param {Object} settings */ -function mandatory(setting, settings) { +const mandatory = (setting, settings) => { if (!settings[setting]) { throw new Error(setting + ' is mandatory.'); } -} +}; + +/** + * Expose `setup()`. + */ + +export { setup }; diff --git a/lib/utils.js b/src/utils.js similarity index 52% rename from lib/utils.js rename to src/utils.js index 6ec73b34e..efaf67b24 100644 --- a/lib/utils.js +++ b/src/utils.js @@ -4,21 +4,15 @@ * MIT Licensed */ -'use strict'; - /** * Module dependencies. */ -var fs = require('fs'); -var nodeVersion = require('node-version'); -var gzipSize = require('gzip-size'); +import fs from 'fs'; +import nodeVersion from 'node-version'; +import gzipSize from 'gzip-size'; -/** - * Expose `utils`. - */ - -var utils = (module.exports = {}); +const utils = {}; /** * Read content from file. @@ -27,9 +21,7 @@ var utils = (module.exports = {}); * @returns {String} */ -utils.readFile = function readFile(file) { - return fs.readFileSync(file, 'utf8'); -}; +utils.readFile = file => fs.readFileSync(file, 'utf8'); /** * Write content into file. @@ -39,7 +31,7 @@ utils.readFile = function readFile(file) { * @returns {String} */ -utils.writeFile = function writeFile(file, content) { +utils.writeFile = (file, content) => { fs.writeFileSync(file, content, 'utf8'); return content; }; @@ -51,10 +43,10 @@ utils.writeFile = function writeFile(file, content) { * @returns {Array} */ -utils.buildArgs = function buildArgs(options) { - var args = []; +utils.buildArgs = options => { + const args = []; - Object.keys(options).forEach(function(key) { + Object.keys(options).forEach(key => { if (options[key] && options[key] !== false) { args.push('--' + key); } @@ -74,9 +66,7 @@ utils.buildArgs = function buildArgs(options) { * @returns {Object} */ -utils.clone = function clone(obj) { - return JSON.parse(JSON.stringify(obj)); -}; +utils.clone = obj => JSON.parse(JSON.stringify(obj)); /** * Check in node is higher or equal to 4. @@ -84,9 +74,7 @@ utils.clone = function clone(obj) { * @returns {Boolean} */ -utils.isNodeV4AndHigher = function isNodeV4AndHigher() { - return parseInt(nodeVersion.major, 10) >= 4; -}; +utils.isNodeV4AndHigher = () => parseInt(nodeVersion.major, 10) >= 4; /** * Get the file size in bytes. @@ -94,9 +82,9 @@ utils.isNodeV4AndHigher = function isNodeV4AndHigher() { * @returns {String} */ -utils.getFilesizeInBytes = function(file) { - var stats = fs.statSync(file); - var fileSizeInBytes = stats.size; +utils.getFilesizeInBytes = file => { + const stats = fs.statSync(file); + const fileSizeInBytes = stats.size; return utils.prettyBytes(fileSizeInBytes); }; @@ -106,10 +94,10 @@ utils.getFilesizeInBytes = function(file) { * @returns {Promise.} */ -utils.getFilesizeGzippedInBytes = function(file) { - return new Promise(function(resolve) { - var source = fs.createReadStream(file); - source.pipe(gzipSize.stream()).on('gzip-size', function(size) { +utils.getFilesizeGzippedInBytes = file => { + return new Promise(resolve => { + const source = fs.createReadStream(file); + source.pipe(gzipSize.stream()).on('gzip-size', size => { resolve(utils.prettyBytes(size)); }); }); @@ -122,14 +110,14 @@ utils.getFilesizeGzippedInBytes = function(file) { * @returns {String} */ -utils.prettyBytes = function(num) { - var UNITS = ['B', 'kB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB']; +utils.prettyBytes = num => { + const UNITS = ['B', 'kB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB']; if (!Number.isFinite(num)) { - throw new TypeError('Expected a finite number, got ' + typeof num + ': ' + num); + throw new TypeError(`Expected a finite number, got ${typeof num}: ${num}`); } - var neg = num < 0; + const neg = num < 0; if (neg) { num = -num; @@ -139,9 +127,15 @@ utils.prettyBytes = function(num) { return (neg ? '-' : '') + num + ' B'; } - var exponent = Math.min(Math.floor(Math.log(num) / Math.log(1000)), UNITS.length - 1); - var numStr = Number((num / Math.pow(1000, exponent)).toPrecision(3)); - var unit = UNITS[exponent]; + const exponent = Math.min(Math.floor(Math.log(num) / Math.log(1000)), UNITS.length - 1); + const numStr = Number((num / Math.pow(1000, exponent)).toPrecision(3)); + const unit = UNITS[exponent]; return (neg ? '-' : '') + numStr + ' ' + unit; }; + +/** + * Expose `utils`. + */ + +export { utils }; diff --git a/yarn.lock b/yarn.lock index 0b9e1d418..9209ad0b9 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,7 +2,21 @@ # yarn lockfile v1 -abab@^1.0.3: +"@babel/code-frame@^7.0.0-beta.35": + version "7.0.0-beta.42" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.0.0-beta.42.tgz#a9c83233fa7cd06b39dc77adbb908616ff4f1962" + dependencies: + "@babel/highlight" "7.0.0-beta.42" + +"@babel/highlight@7.0.0-beta.42": + version "7.0.0-beta.42" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.0.0-beta.42.tgz#a502a1c0d6f99b2b0e81d468a1b0c0e81e3f3623" + dependencies: + chalk "^2.0.0" + esutils "^2.0.2" + js-tokens "^3.0.0" + +abab@^1.0.3, abab@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/abab/-/abab-1.0.4.tgz#5faad9c2c07f60dd76770f71cf025b62a63cfd4e" @@ -16,6 +30,12 @@ acorn-globals@^3.1.0: dependencies: acorn "^4.0.4" +acorn-globals@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-4.1.0.tgz#ab716025dbe17c54d3ef81d32ece2b2d99fe2538" + dependencies: + acorn "^5.0.0" + acorn-jsx@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-3.0.1.tgz#afdf9488fb1ecefc8348f6fb22f464e32a58b36b" @@ -30,7 +50,7 @@ acorn@^4.0.4: version "4.0.13" resolved "https://registry.yarnpkg.com/acorn/-/acorn-4.0.13.tgz#105495ae5361d697bd195c825192e1ad7f253787" -acorn@^5.0.3, acorn@^5.5.0: +acorn@^5.0.0, acorn@^5.0.3, acorn@^5.3.0, acorn@^5.5.0: version "5.5.3" resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.5.3.tgz#f473dd47e0277a08e28e9bec5aeeb04751f0b8c9" @@ -102,6 +122,13 @@ any-observable@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/any-observable/-/any-observable-0.2.0.tgz#c67870058003579009083f54ac0abafb5c33d242" +anymatch@^1.3.0: + version "1.3.2" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-1.3.2.tgz#553dcb8f91e3c889845dfdba34c77721b90b9d7a" + dependencies: + micromatch "^2.1.5" + normalize-path "^2.0.0" + anymatch@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" @@ -109,7 +136,7 @@ anymatch@^2.0.0: micromatch "^3.1.4" normalize-path "^2.1.1" -app-root-path@^2.0.0: +app-root-path@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/app-root-path/-/app-root-path-2.0.1.tgz#cd62dcf8e4fd5a417efc664d2e5b10653c651b46" @@ -204,6 +231,14 @@ astral-regex@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" +async-each@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.1.tgz#19d386a1d9edc6e7c1c85d388aedbcc56d33602d" + +async-limiter@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.0.tgz#78faed8c3d074ab81f22b4e985d79e8738f720f8" + async@^1.4.0: version "1.5.2" resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" @@ -219,8 +254,8 @@ asynckit@^0.4.0: resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" atob@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.0.tgz#ab2b150e51d7b122b9efc8d7340c06b6c41076bc" + version "2.0.3" + resolved "https://registry.yarnpkg.com/atob/-/atob-2.0.3.tgz#19c7a760473774468f20b2d2d03372ad7d4cbf5d" aws-sign2@~0.6.0: version "0.6.0" @@ -234,6 +269,27 @@ aws4@^1.2.1, aws4@^1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.6.0.tgz#83ef5ca860b2b32e4a0deedee8c771b9db57471e" +babel-cli@6.18.0: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babel-cli/-/babel-cli-6.18.0.tgz#92117f341add9dead90f6fa7d0a97c0cc08ec186" + dependencies: + babel-core "^6.18.0" + babel-polyfill "^6.16.0" + babel-register "^6.18.0" + babel-runtime "^6.9.0" + commander "^2.8.1" + convert-source-map "^1.1.0" + fs-readdir-recursive "^1.0.0" + glob "^5.0.5" + lodash "^4.2.0" + output-file-sync "^1.1.0" + path-is-absolute "^1.0.0" + slash "^1.0.0" + source-map "^0.5.0" + v8flags "^2.0.10" + optionalDependencies: + chokidar "^1.0.0" + babel-code-frame@^6.22.0, babel-code-frame@^6.26.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b" @@ -242,7 +298,7 @@ babel-code-frame@^6.22.0, babel-code-frame@^6.26.0: esutils "^2.0.2" js-tokens "^3.0.2" -babel-core@6.26.0, babel-core@^6.0.0, babel-core@^6.26.0: +babel-core@6.26.0, babel-core@^6.0.0, babel-core@^6.18.0, babel-core@^6.26.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.26.0.tgz#af32f78b31a6fcef119c87b0fd8d9753f03a0bb8" dependencies: @@ -408,6 +464,14 @@ babel-helpers@^6.24.1: babel-runtime "^6.22.0" babel-template "^6.24.1" +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-core "^6.0.0" + babel-plugin-istanbul "^4.0.0" + babel-preset-jest "^19.0.0" + babel-jest@^21.2.0: version "21.2.0" resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-21.2.0.tgz#2ce059519a9374a2c46f2455b6fbef5ad75d863e" @@ -435,6 +499,10 @@ babel-plugin-istanbul@^4.0.0: istanbul-lib-instrument "^1.7.5" test-exclude "^4.1.1" +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-jest-hoist@^21.2.0: version "21.2.0" resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-21.2.0.tgz#2cef637259bd4b628a6cace039de5fcd14dbb006" @@ -750,6 +818,12 @@ babel-plugin-transform-remove-undefined@^0.3.0: dependencies: babel-helper-evaluate-path "^0.3.0" +babel-plugin-transform-runtime@6.23.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-runtime/-/babel-plugin-transform-runtime-6.23.0.tgz#88490d446502ea9b8e7efb0fe09ec4d99479b1ee" + dependencies: + babel-runtime "^6.22.0" + babel-plugin-transform-simplify-comparison-operators@^6.9.0: version "6.9.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-simplify-comparison-operators/-/babel-plugin-transform-simplify-comparison-operators-6.9.0.tgz#586252fea023cb13f2400a09c0ab178dc0844f0a" @@ -765,6 +839,14 @@ babel-plugin-transform-undefined-to-void@^6.9.0: version "6.9.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-undefined-to-void/-/babel-plugin-transform-undefined-to-void-6.9.0.tgz#eb5db0554caffe9ded0206468ec0c6c3b332b9d2" +babel-polyfill@^6.16.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-polyfill/-/babel-polyfill-6.26.0.tgz#379937abc67d7895970adc621f284cd966cf2153" + dependencies: + babel-runtime "^6.26.0" + core-js "^2.5.0" + regenerator-runtime "^0.10.5" + babel-preset-env@1.6.1: version "1.6.1" resolved "https://registry.yarnpkg.com/babel-preset-env/-/babel-preset-env-1.6.1.tgz#a18b564cc9b9afdf4aae57ae3c1b0d99188e6f48" @@ -800,6 +882,12 @@ babel-preset-env@1.6.1: invariant "^2.2.2" semver "^5.3.0" +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-plugin-jest-hoist "^19.0.0" + babel-preset-jest@^21.2.0: version "21.2.0" resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-21.2.0.tgz#ff9d2bce08abd98e8a36d9a8a5189b9173b85638" @@ -835,7 +923,7 @@ babel-preset-minify@0.3.0: babel-plugin-transform-undefined-to-void "^6.9.0" lodash.isplainobject "^4.0.6" -babel-register@^6.26.0: +babel-register@^6.18.0, babel-register@^6.26.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-register/-/babel-register-6.26.0.tgz#6ed021173e2fcb486d7acb45c6009a856f647071" dependencies: @@ -847,7 +935,7 @@ babel-register@^6.26.0: mkdirp "^0.5.1" source-map-support "^0.4.15" -babel-runtime@^6.18.0, babel-runtime@^6.22.0, babel-runtime@^6.26.0: +babel-runtime@6.26.0, babel-runtime@^6.18.0, babel-runtime@^6.22.0, babel-runtime@^6.26.0, babel-runtime@^6.9.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe" dependencies: @@ -913,6 +1001,10 @@ bcrypt-pbkdf@^1.0.0: dependencies: tweetnacl "^0.14.3" +binary-extensions@^1.0.0: + version "1.11.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.11.0.tgz#46aa1751fb6a2f93ee5e689bb1087d4b14c6c205" + block-stream@*: version "0.0.9" resolved "https://registry.yarnpkg.com/block-stream/-/block-stream-0.0.9.tgz#13ebfe778a03205cfe03751481ebb4b3300c126a" @@ -981,6 +1073,10 @@ braces@^2.3.1: split-string "^3.0.2" to-regex "^3.0.1" +browser-process-hrtime@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-0.1.2.tgz#425d68a58d3447f02a04aa894187fce8af8b7b8e" + browser-resolve@^1.11.2: version "1.11.2" resolved "https://registry.yarnpkg.com/browser-resolve/-/browser-resolve-1.11.2.tgz#8ff09b0a2c421718a1051c260b32e48f442938ce" @@ -1055,8 +1151,8 @@ camelcase@^4.0.0, camelcase@^4.1.0: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" caniuse-lite@^1.0.30000792: - version "1.0.30000821" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000821.tgz#0f3223f1e048ed96451c56ca6cf197058c42cb93" + version "1.0.30000820" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000820.tgz#6e36ee75187a2c83d26d6504a1af47cc580324d2" capture-stack-trace@^1.0.0: version "1.0.0" @@ -1083,7 +1179,7 @@ chalk@1.1.3, chalk@^1.0.0, chalk@^1.1.1, chalk@^1.1.3: strip-ansi "^3.0.0" supports-color "^2.0.0" -chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0: +chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.3.1: version "2.3.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.3.2.tgz#250dc96b07491bfd601e648d66ddf5f60c7a5c65" dependencies: @@ -1095,6 +1191,21 @@ chardet@^0.4.0: version "0.4.2" resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.4.2.tgz#b5473b33dc97c424e5d98dc87d55d4d8a29c8bf2" +chokidar@^1.0.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-1.7.0.tgz#798e689778151c8076b4b360e5edd28cda2bb468" + dependencies: + anymatch "^1.3.0" + async-each "^1.0.0" + glob-parent "^2.0.0" + inherits "^2.0.1" + is-binary-path "^1.0.0" + is-glob "^2.0.0" + path-is-absolute "^1.0.0" + readdirp "^2.0.0" + optionalDependencies: + fsevents "^1.0.0" + ci-info@^1.0.0: version "1.1.3" resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-1.1.3.tgz#710193264bb05c77b8c90d02f5aaf22216a667b2" @@ -1234,7 +1345,7 @@ commander@2.9.0: dependencies: graceful-readlink ">= 1.0.0" -commander@^2.11.0, commander@^2.9.0, commander@~2.15.0: +commander@^2.14.1, commander@^2.8.1, commander@^2.9.0, commander@~2.15.0: version "2.15.1" resolved "https://registry.yarnpkg.com/commander/-/commander-2.15.1.tgz#df46e867d0fc2aec66a34662b406a9ccafff5b0f" @@ -1274,11 +1385,11 @@ console-control-strings@^1.0.0, console-control-strings@~1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" -content-type-parser@^1.0.1: +content-type-parser@^1.0.1, content-type-parser@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/content-type-parser/-/content-type-parser-1.0.2.tgz#caabe80623e63638b2502fd4c7f12ff4ce2352e7" -convert-source-map@^1.4.0, convert-source-map@^1.5.0: +convert-source-map@^1.1.0, convert-source-map@^1.4.0, convert-source-map@^1.5.0: version "1.5.1" resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.5.1.tgz#b8278097b9bc229365de5c62cf5fcaed8b5599e5" @@ -1287,8 +1398,8 @@ copy-descriptor@^0.1.0: resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" core-js@^2.4.0, core-js@^2.5.0: - version "2.5.4" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.5.4.tgz#f2c8bf181f2a80b92f360121429ce63a2f0aeae0" + version "2.5.3" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.5.3.tgz#8acc38345824f16d8365b7c9b4259168e8ed603e" core-util-is@1.0.2, core-util-is@~1.0.0: version "1.0.2" @@ -1443,10 +1554,6 @@ delegates@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" -depd@1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" - detect-indent@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-4.0.0.tgz#f76d064352cdf43a1cb6ce619c4ee3a9475de208" @@ -1467,6 +1574,12 @@ doctrine@^2.1.0: dependencies: esutils "^2.0.2" +domexception@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/domexception/-/domexception-1.0.1.tgz#937442644ca6a31261ef36e3ec677fe805582c90" + dependencies: + webidl-conversions "^4.0.2" + dot-prop@^4.1.0: version "4.2.0" resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-4.2.0.tgz#1f19e0c2e1aa0e32797c49799f2837ac6af69c57" @@ -1488,8 +1601,8 @@ ecc-jsbn@~0.1.1: jsbn "~0.1.0" electron-to-chromium@^1.3.30: - version "1.3.41" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.41.tgz#7e33643e00cd85edfd17e04194f6d00e73737235" + version "1.3.40" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.40.tgz#1fbd6d97befd72b8a6f921dc38d22413d2f6fddf" elegant-spinner@^1.0.1: version "1.0.1" @@ -1511,7 +1624,7 @@ escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" -escodegen@^1.6.1: +escodegen@^1.6.1, escodegen@^1.9.0: version "1.9.1" resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.9.1.tgz#dbae17ef96c8e4bedb1356f4504fa4cc2f7cb7e2" dependencies: @@ -1642,18 +1755,6 @@ execa@^0.7.0: signal-exit "^3.0.0" strip-eof "^1.0.0" -execa@^0.8.0: - version "0.8.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-0.8.0.tgz#d8d76bbc1b55217ed190fd6dd49d3c774ecfc8da" - 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" - execa@^0.9.0: version "0.9.0" resolved "https://registry.yarnpkg.com/execa/-/execa-0.9.0.tgz#adb7ce62cf985071f60580deb4a88b9e34712d01" @@ -1705,6 +1806,17 @@ expect@^21.2.1: jest-message-util "^21.2.1" jest-regex-util "^21.2.0" +expect@^22.4.3: + version "22.4.3" + resolved "https://registry.yarnpkg.com/expect/-/expect-22.4.3.tgz#d5a29d0a0e1fb2153557caef2674d4547e914674" + dependencies: + ansi-styles "^3.2.0" + jest-diff "^22.4.3" + jest-get-type "^22.4.3" + jest-matcher-utils "^22.4.3" + jest-message-util "^22.4.3" + jest-regex-util "^22.4.3" + extend-shallow@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" @@ -1891,11 +2003,15 @@ fragment-cache@^0.2.1: dependencies: map-cache "^0.2.2" +fs-readdir-recursive@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz#e32fc030a2ccee44a6b5371308da54be0b397d27" + fs.realpath@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" -fsevents@^1.1.1: +fsevents@^1.0.0, fsevents@^1.1.1: version "1.1.3" resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.1.3.tgz#11f82318f5fe7bb2cd22965a108e9306208216d8" dependencies: @@ -1986,6 +2102,16 @@ glob@7.1.2, glob@^7.0.3, glob@^7.0.5, glob@^7.1.1, glob@^7.1.2: once "^1.3.0" path-is-absolute "^1.0.0" +glob@^5.0.5: + version "5.0.15" + resolved "https://registry.yarnpkg.com/glob/-/glob-5.0.15.tgz#1bc936b9e02f4a603fcc222ecf7633d30b8b93b1" + dependencies: + inflight "^1.0.4" + inherits "2" + minimatch "2 || 3" + once "^1.3.0" + path-is-absolute "^1.0.0" + global-dirs@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-0.1.1.tgz#b319c0dd4607f353f3be9cca4c72fc148c49f445" @@ -2035,7 +2161,7 @@ got@^6.7.1: unzip-response "^2.0.1" url-parse-lax "^1.0.0" -graceful-fs@^4.1.11, graceful-fs@^4.1.2: +graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.4: version "4.1.11" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658" @@ -2167,7 +2293,7 @@ hosted-git-info@^2.1.4: version "2.6.0" resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.6.0.tgz#23235b29ab230c576aab0d4f13fc046b0b038222" -html-encoding-sniffer@^1.0.1: +html-encoding-sniffer@^1.0.1, html-encoding-sniffer@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz#e70d84b94da53aa375e11fe3a351be6642ca46f8" dependencies: @@ -2288,6 +2414,12 @@ is-arrayish@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" +is-binary-path@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" + dependencies: + binary-extensions "^1.0.0" + is-buffer@^1.1.5: version "1.1.6" resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" @@ -2380,6 +2512,10 @@ is-fullwidth-code-point@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" +is-generator-fn@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-1.0.0.tgz#969d49e1bb3329f6bb7f09089be26578b2ddd46a" + is-glob@^2.0.0, is-glob@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863" @@ -2653,6 +2789,22 @@ jest-config@^21.2.1: jest-validate "^21.2.1" pretty-format "^21.2.1" +jest-config@^22.4.3: + version "22.4.3" + resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-22.4.3.tgz#0e9d57db267839ea31309119b41dc2fa31b76403" + dependencies: + chalk "^2.0.1" + glob "^7.1.1" + jest-environment-jsdom "^22.4.3" + jest-environment-node "^22.4.3" + jest-get-type "^22.4.3" + jest-jasmine2 "^22.4.3" + jest-regex-util "^22.4.3" + jest-resolve "^22.4.3" + jest-util "^22.4.3" + jest-validate "^22.4.3" + pretty-format "^22.4.3" + jest-diff@^21.2.1: version "21.2.1" resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-21.2.1.tgz#46cccb6cab2d02ce98bc314011764bb95b065b4f" @@ -2662,6 +2814,15 @@ jest-diff@^21.2.1: jest-get-type "^21.2.0" pretty-format "^21.2.1" +jest-diff@^22.4.3: + version "22.4.3" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-22.4.3.tgz#e18cc3feff0aeef159d02310f2686d4065378030" + dependencies: + chalk "^2.0.1" + diff "^3.2.0" + jest-get-type "^22.4.3" + pretty-format "^22.4.3" + jest-docblock@^21.0.0, jest-docblock@^21.2.0: version "21.2.0" resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-21.2.0.tgz#51529c3b30d5fd159da60c27ceedc195faf8d414" @@ -2674,6 +2835,14 @@ jest-environment-jsdom@^21.2.1: jest-util "^21.2.1" jsdom "^9.12.0" +jest-environment-jsdom@^22.4.3: + version "22.4.3" + resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-22.4.3.tgz#d67daa4155e33516aecdd35afd82d4abf0fa8a1e" + dependencies: + jest-mock "^22.4.3" + jest-util "^22.4.3" + jsdom "^11.5.1" + jest-environment-node@^21.2.1: version "21.2.1" resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-21.2.1.tgz#98c67df5663c7fbe20f6e792ac2272c740d3b8c8" @@ -2681,10 +2850,21 @@ jest-environment-node@^21.2.1: jest-mock "^21.2.0" jest-util "^21.2.1" +jest-environment-node@^22.4.3: + version "22.4.3" + resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-22.4.3.tgz#54c4eaa374c83dd52a9da8759be14ebe1d0b9129" + dependencies: + jest-mock "^22.4.3" + jest-util "^22.4.3" + jest-get-type@^21.2.0: version "21.2.0" resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-21.2.0.tgz#f6376ab9db4b60d81e39f30749c6c466f40d4a23" +jest-get-type@^22.4.3: + version "22.4.3" + resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-22.4.3.tgz#e3a8504d8479342dd4420236b322869f18900ce4" + jest-haste-map@^21.2.0: version "21.2.0" resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-21.2.0.tgz#1363f0a8bb4338f24f001806571eff7a4b2ff3d8" @@ -2709,6 +2889,22 @@ jest-jasmine2@^21.2.1: jest-snapshot "^21.2.1" p-cancelable "^0.3.0" +jest-jasmine2@^22.4.3: + version "22.4.3" + resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-22.4.3.tgz#4daf64cd14c793da9db34a7c7b8dcfe52a745965" + dependencies: + chalk "^2.0.1" + co "^4.6.0" + expect "^22.4.3" + graceful-fs "^4.1.11" + is-generator-fn "^1.0.0" + jest-diff "^22.4.3" + jest-matcher-utils "^22.4.3" + jest-message-util "^22.4.3" + jest-snapshot "^22.4.3" + jest-util "^22.4.3" + source-map-support "^0.5.0" + jest-matcher-utils@^21.2.1: version "21.2.1" resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-21.2.1.tgz#72c826eaba41a093ac2b4565f865eb8475de0f64" @@ -2717,6 +2913,14 @@ jest-matcher-utils@^21.2.1: jest-get-type "^21.2.0" pretty-format "^21.2.1" +jest-matcher-utils@^22.4.3: + version "22.4.3" + resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-22.4.3.tgz#4632fe428ebc73ebc194d3c7b65d37b161f710ff" + dependencies: + chalk "^2.0.1" + jest-get-type "^22.4.3" + pretty-format "^22.4.3" + jest-message-util@^21.2.1: version "21.2.1" resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-21.2.1.tgz#bfe5d4692c84c827d1dcf41823795558f0a1acbe" @@ -2725,14 +2929,32 @@ jest-message-util@^21.2.1: micromatch "^2.3.11" slash "^1.0.0" +jest-message-util@^22.4.3: + version "22.4.3" + resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-22.4.3.tgz#cf3d38aafe4befddbfc455e57d65d5239e399eb7" + dependencies: + "@babel/code-frame" "^7.0.0-beta.35" + chalk "^2.0.1" + micromatch "^2.3.11" + slash "^1.0.0" + stack-utils "^1.0.1" + jest-mock@^21.2.0: version "21.2.0" resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-21.2.0.tgz#7eb0770e7317968165f61ea2a7281131534b3c0f" +jest-mock@^22.4.3: + version "22.4.3" + resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-22.4.3.tgz#f63ba2f07a1511772cdc7979733397df770aabc7" + jest-regex-util@^21.2.0: version "21.2.0" resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-21.2.0.tgz#1b1e33e63143babc3e0f2e6c9b5ba1eb34b2d530" +jest-regex-util@^22.4.3: + version "22.4.3" + resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-22.4.3.tgz#a826eb191cdf22502198c5401a1fc04de9cef5af" + jest-resolve-dependencies@^21.2.0: version "21.2.0" resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-21.2.0.tgz#9e231e371e1a736a1ad4e4b9a843bc72bfe03d09" @@ -2747,6 +2969,13 @@ jest-resolve@^21.2.0: chalk "^2.0.1" is-builtin-module "^1.0.0" +jest-resolve@^22.4.3: + version "22.4.3" + resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-22.4.3.tgz#0ce9d438c8438229aa9b916968ec6b05c1abb4ea" + dependencies: + browser-resolve "^1.11.2" + chalk "^2.0.1" + jest-runner@^21.2.1: version "21.2.1" resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-21.2.1.tgz#194732e3e518bfb3d7cbfc0fd5871246c7e1a467" @@ -2795,6 +3024,17 @@ jest-snapshot@^21.2.1: natural-compare "^1.4.0" pretty-format "^21.2.1" +jest-snapshot@^22.4.3: + version "22.4.3" + resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-22.4.3.tgz#b5c9b42846ffb9faccb76b841315ba67887362d2" + dependencies: + chalk "^2.0.1" + jest-diff "^22.4.3" + jest-matcher-utils "^22.4.3" + mkdirp "^0.5.1" + natural-compare "^1.4.0" + pretty-format "^22.4.3" + jest-util@^21.2.1: version "21.2.1" resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-21.2.1.tgz#a274b2f726b0897494d694a6c3d6a61ab819bb78" @@ -2807,7 +3047,19 @@ jest-util@^21.2.1: jest-validate "^21.2.1" mkdirp "^0.5.1" -jest-validate@^21.1.0, jest-validate@^21.2.1: +jest-util@^22.4.3: + version "22.4.3" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-22.4.3.tgz#c70fec8eec487c37b10b0809dc064a7ecf6aafac" + dependencies: + callsites "^2.0.0" + chalk "^2.0.1" + graceful-fs "^4.1.11" + is-ci "^1.0.10" + jest-message-util "^22.4.3" + mkdirp "^0.5.1" + source-map "^0.6.0" + +jest-validate@^21.2.1: version "21.2.1" resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-21.2.1.tgz#cc0cbca653cd54937ba4f2a111796774530dd3c7" dependencies: @@ -2816,6 +3068,16 @@ jest-validate@^21.1.0, jest-validate@^21.2.1: leven "^2.1.0" pretty-format "^21.2.1" +jest-validate@^22.4.0, jest-validate@^22.4.3: + version "22.4.3" + resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-22.4.3.tgz#0780954a5a7daaeec8d3c10834b9280865976b30" + dependencies: + chalk "^2.0.1" + jest-config "^22.4.3" + jest-get-type "^22.4.3" + leven "^2.1.0" + pretty-format "^22.4.3" + jest@21.2.1: version "21.2.1" resolved "https://registry.yarnpkg.com/jest/-/jest-21.2.1.tgz#c964e0b47383768a1438e3ccf3c3d470327604e1" @@ -2837,6 +3099,37 @@ jsbn@~0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" +jsdom@^11.5.1: + version "11.6.2" + resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-11.6.2.tgz#25d1ef332d48adf77fc5221fe2619967923f16bb" + dependencies: + abab "^1.0.4" + acorn "^5.3.0" + acorn-globals "^4.1.0" + array-equal "^1.0.0" + browser-process-hrtime "^0.1.2" + content-type-parser "^1.0.2" + cssom ">= 0.3.2 < 0.4.0" + cssstyle ">= 0.2.37 < 0.3.0" + domexception "^1.0.0" + escodegen "^1.9.0" + html-encoding-sniffer "^1.0.2" + left-pad "^1.2.0" + nwmatcher "^1.4.3" + parse5 "4.0.0" + pn "^1.1.0" + request "^2.83.0" + request-promise-native "^1.0.5" + sax "^1.2.4" + symbol-tree "^3.2.2" + tough-cookie "^2.3.3" + w3c-hr-time "^1.0.1" + webidl-conversions "^4.0.2" + whatwg-encoding "^1.0.3" + whatwg-url "^6.4.0" + ws "^4.0.0" + xml-name-validator "^3.0.0" + jsdom@^9.12.0: version "9.12.0" resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-9.12.0.tgz#e8c546fffcb06c00d4833ca84410fed7f8a097d4" @@ -2948,6 +3241,10 @@ lcid@^1.0.0: dependencies: invert-kv "^1.0.0" +left-pad@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/left-pad/-/left-pad-1.2.0.tgz#d30a73c6b8201d8f7d8e7956ba9616087a68e0ee" + leven@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/leven/-/leven-2.1.0.tgz#c2e7a9f772094dee9d34202ae8acce4687875580" @@ -2959,30 +3256,31 @@ levn@^0.3.0, levn@~0.3.0: prelude-ls "~1.1.2" type-check "~0.3.2" -lint-staged@6.1.1: - version "6.1.1" - resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-6.1.1.tgz#cd08c4d9b8ccc2d37198d1c47ce77d22be6cf324" +lint-staged@7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-7.0.0.tgz#57926c63201e7bd38ca0576d74391efa699b4a9d" dependencies: - app-root-path "^2.0.0" - chalk "^2.1.0" - commander "^2.11.0" + app-root-path "^2.0.1" + chalk "^2.3.1" + commander "^2.14.1" cosmiconfig "^4.0.0" debug "^3.1.0" dedent "^0.7.0" - execa "^0.8.0" + execa "^0.9.0" find-parent-dir "^0.3.0" is-glob "^4.0.0" - jest-validate "^21.1.0" + jest-validate "^22.4.0" listr "^0.13.0" - lodash "^4.17.4" - log-symbols "^2.0.0" - minimatch "^3.0.0" + lodash "^4.17.5" + log-symbols "^2.2.0" + micromatch "^3.1.8" npm-which "^3.0.1" p-map "^1.1.1" path-is-inside "^1.0.2" pify "^3.0.0" - staged-git-files "1.0.0" - stringify-object "^3.2.0" + please-upgrade-node "^3.0.1" + staged-git-files "1.1.0" + stringify-object "^3.2.2" listr-silent-renderer@^1.1.1: version "1.1.1" @@ -3075,7 +3373,11 @@ lodash.some@^4.6.0: version "4.6.0" resolved "https://registry.yarnpkg.com/lodash.some/-/lodash.some-4.6.0.tgz#1bb9f314ef6b8baded13b549169b2a945eb68e4d" -lodash@^4.14.0, lodash@^4.17.4, lodash@^4.3.0: +lodash.sortby@^4.7.0: + version "4.7.0" + resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" + +lodash@^4.13.1, lodash@^4.14.0, lodash@^4.17.4, lodash@^4.17.5, lodash@^4.2.0, lodash@^4.3.0: version "4.17.5" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.5.tgz#99a92d65c0272debe8c96b6057bc8fbfa3bed511" @@ -3085,7 +3387,7 @@ log-symbols@^1.0.2: dependencies: chalk "^1.0.0" -log-symbols@^2.0.0: +log-symbols@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-2.2.0.tgz#5740e1c5d6f0dfda4ad9323b5332107ef6b4c40a" dependencies: @@ -3161,7 +3463,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: @@ -3211,7 +3513,7 @@ mimic-fn@^1.0.0: version "1.2.0" resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" -minimatch@^3.0.0, minimatch@^3.0.2, minimatch@^3.0.3, minimatch@^3.0.4: +"minimatch@2 || 3", minimatch@^3.0.0, minimatch@^3.0.2, minimatch@^3.0.3, minimatch@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" dependencies: @@ -3324,7 +3626,7 @@ normalize-package-data@^2.3.2: semver "2 || 3 || 4 || 5" validate-npm-package-license "^3.0.1" -normalize-path@^2.0.1, normalize-path@^2.1.1: +normalize-path@^2.0.0, normalize-path@^2.0.1, normalize-path@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" dependencies: @@ -3363,7 +3665,7 @@ number-is-nan@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" -"nwmatcher@>= 1.3.9 < 2.0.0": +"nwmatcher@>= 1.3.9 < 2.0.0", nwmatcher@^1.4.3: version "1.4.4" resolved "https://registry.yarnpkg.com/nwmatcher/-/nwmatcher-1.4.4.tgz#2285631f34a95f0d0395cd900c96ed39b58f346e" @@ -3477,6 +3779,14 @@ osenv@^0.1.4: os-homedir "^1.0.0" os-tmpdir "^1.0.0" +output-file-sync@^1.1.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/output-file-sync/-/output-file-sync-1.1.2.tgz#d0a33eefe61a205facb90092e826598d5245ce76" + dependencies: + graceful-fs "^4.1.4" + mkdirp "^0.5.1" + object-assign "^4.1.0" + p-cancelable@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-0.3.0.tgz#b9e123800bcebb7ac13a479be195b507b98d30fa" @@ -3536,6 +3846,10 @@ parse-json@^4.0.0: error-ex "^1.3.1" json-parse-better-errors "^1.0.1" +parse5@4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-4.0.0.tgz#6d78656e3da8d78b4ec0b906f7c08ef1dfe3f608" + parse5@^1.5.1: version "1.5.1" resolved "https://registry.yarnpkg.com/parse5/-/parse5-1.5.1.tgz#9b7f3b0de32be78dc2401b17573ccaf0f6f59d94" @@ -3622,10 +3936,18 @@ pkg-dir@^2.0.0: dependencies: find-up "^2.1.0" +please-upgrade-node@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/please-upgrade-node/-/please-upgrade-node-3.0.1.tgz#0a681f2c18915e5433a5ca2cd94e0b8206a782db" + pluralize@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-7.0.0.tgz#298b89df8b93b0221dbf421ad2b1b1ea23fc6777" +pn@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/pn/-/pn-1.1.0.tgz#e2f4cef0e219f463c179ab37463e4e1ecdccbafb" + posix-character-classes@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" @@ -3642,9 +3964,9 @@ preserve@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b" -prettier@1.11.0: - version "1.11.0" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.11.0.tgz#c024f70cab158c993f50fc0c25ffe738cb8b0f85" +prettier@1.11.1: + version "1.11.1" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.11.1.tgz#61e43fc4cd44e68f2b0dfc2c38cd4bb0fccdcc75" pretty-format@^21.2.1: version "21.2.1" @@ -3653,6 +3975,13 @@ pretty-format@^21.2.1: ansi-regex "^3.0.0" ansi-styles "^3.2.0" +pretty-format@^22.4.3: + version "22.4.3" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-22.4.3.tgz#f873d780839a9c02e9664c8a082e9ee79eaac16f" + dependencies: + ansi-regex "^3.0.0" + ansi-styles "^3.2.0" + private@^0.1.6, private@^0.1.7: version "0.1.8" resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff" @@ -3677,6 +4006,10 @@ punycode@^1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" +punycode@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.0.tgz#5f863edc89b96db09074bad7947bf09056ca4e7d" + pupa@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/pupa/-/pupa-1.0.0.tgz#9a9568a5af7e657b8462a6e9d5328743560ceff6" @@ -3743,7 +4076,7 @@ read-pkg@^3.0.0: normalize-package-data "^2.3.2" path-type "^3.0.0" -readable-stream@^2.0.6, readable-stream@^2.1.4, readable-stream@^2.2.2, readable-stream@^2.3.5: +readable-stream@^2.0.2, readable-stream@^2.0.6, readable-stream@^2.1.4, readable-stream@^2.2.2, readable-stream@^2.3.5: version "2.3.5" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.5.tgz#b4f85003a938cbb6ecbce2a124fb1012bd1a838d" dependencies: @@ -3755,10 +4088,23 @@ readable-stream@^2.0.6, readable-stream@^2.1.4, readable-stream@^2.2.2, readable string_decoder "~1.0.3" util-deprecate "~1.0.1" +readdirp@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.1.0.tgz#4ed0ad060df3073300c48440373f72d1cc642d78" + dependencies: + graceful-fs "^4.1.2" + minimatch "^3.0.2" + readable-stream "^2.0.2" + set-immediate-shim "^1.0.1" + regenerate@^1.2.1: version "1.3.3" resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.3.3.tgz#0c336d3980553d755c39b586ae3b20aa49c82b7f" +regenerator-runtime@^0.10.5: + version "0.10.5" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz#336c3efc1220adcedda2c9fab67b5a7955a33658" + regenerator-runtime@^0.11.0: version "0.11.1" resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9" @@ -3841,6 +4187,20 @@ replace-ext@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/replace-ext/-/replace-ext-1.0.0.tgz#de63128373fcbf7c3ccfa4de5a480c45a67958eb" +request-promise-core@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/request-promise-core/-/request-promise-core-1.1.1.tgz#3eee00b2c5aa83239cfb04c5700da36f81cd08b6" + dependencies: + lodash "^4.13.1" + +request-promise-native@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/request-promise-native/-/request-promise-native-1.0.5.tgz#5281770f68e0c9719e5163fd3fab482215f4fda5" + dependencies: + request-promise-core "1.1.1" + stealthy-require "^1.1.0" + tough-cookie ">=2.3.3" + request@2.81.0: version "2.81.0" resolved "https://registry.yarnpkg.com/request/-/request-2.81.0.tgz#c6928946a0e06c5f8d6f8a9333469ffda46298a0" @@ -3868,7 +4228,7 @@ request@2.81.0: tunnel-agent "^0.6.0" uuid "^3.0.0" -request@^2.79.0: +request@^2.79.0, request@^2.83.0: version "2.85.0" resolved "https://registry.yarnpkg.com/request/-/request-2.85.0.tgz#5a03615a47c61420b3eb99b7dba204f83603e1fa" dependencies: @@ -3956,6 +4316,12 @@ rimraf@2, rimraf@^2.2.8, rimraf@^2.5.1, rimraf@^2.6.1: 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" @@ -4006,7 +4372,7 @@ sane@^2.0.0: optionalDependencies: fsevents "^1.1.1" -sax@^1.2.1: +sax@^1.2.1, sax@^1.2.4: version "1.2.4" resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" @@ -4024,6 +4390,10 @@ 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" +set-immediate-shim@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz#4b2b1b27eb808a9f8dcc481a58e5e56f599f3f61" + set-value@^0.4.3: version "0.4.3" resolved "https://registry.yarnpkg.com/set-value/-/set-value-0.4.3.tgz#7db08f9d3d22dc7f78e53af3c3bf4666ecdfccf1" @@ -4133,11 +4503,17 @@ source-map-support@^0.4.15: dependencies: source-map "^0.5.6" +source-map-support@^0.5.0: + version "0.5.4" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.4.tgz#54456efa89caa9270af7cd624cc2f123e51fbae8" + dependencies: + source-map "^0.6.0" + source-map-url@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" -source-map@0.5.x, source-map@^0.5.3, source-map@^0.5.6, source-map@^0.5.7, source-map@~0.5.1: +source-map@0.5.x, source-map@^0.5.0, source-map@^0.5.3, source-map@^0.5.6, source-map@^0.5.7, source-map@~0.5.1: version "0.5.7" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" @@ -4147,7 +4523,7 @@ source-map@^0.4.4, source-map@~0.4.1: dependencies: amdefine ">=0.0.4" -source-map@~0.6.1: +source-map@^0.6.0, source-map@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" @@ -4205,9 +4581,13 @@ sshpk@^1.7.0: jsbn "~0.1.0" tweetnacl "~0.14.0" -staged-git-files@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/staged-git-files/-/staged-git-files-1.0.0.tgz#cdb847837c1fcc52c08a872d4883cc0877668a80" +stack-utils@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-1.0.1.tgz#d4f33ab54e8e38778b0ca5cfd3b3afb12db68620" + +staged-git-files@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/staged-git-files/-/staged-git-files-1.1.0.tgz#1a9bb131c1885601023c7aaddd3d54c22142c526" static-extend@^0.1.1: version "0.1.2" @@ -4216,6 +4596,10 @@ static-extend@^0.1.1: define-property "^0.2.5" object-copy "^0.1.0" +stealthy-require@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/stealthy-require/-/stealthy-require-1.1.1.tgz#35b09875b4ff49f26a777e509b3090a3226bf24b" + stream-to-observable@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/stream-to-observable/-/stream-to-observable-0.2.0.tgz#59d6ea393d87c2c0ddac10aa0d561bc6ba6f0e10" @@ -4250,7 +4634,7 @@ string_decoder@~1.0.3: dependencies: safe-buffer "~5.1.0" -stringify-object@^3.2.0: +stringify-object@^3.2.2: version "3.2.2" resolved "https://registry.yarnpkg.com/stringify-object/-/stringify-object-3.2.2.tgz#9853052e5a88fb605a44cd27445aa257ad7ffbcd" dependencies: @@ -4316,7 +4700,7 @@ symbol-observable@^0.2.2: version "0.2.4" resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-0.2.4.tgz#95a83db26186d6af7e7a18dbd9760a2f86d08f40" -symbol-tree@^3.2.1: +symbol-tree@^3.2.1, symbol-tree@^3.2.2: version "3.2.2" resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.2.tgz#ae27db38f660a7ae2e1c3b7d1bc290819b8519e6" @@ -4420,12 +4804,18 @@ to-regex@^3.0.1, to-regex@^3.0.2: regex-not "^1.0.2" safe-regex "^1.1.0" -tough-cookie@^2.3.2, tough-cookie@~2.3.0, tough-cookie@~2.3.3: +tough-cookie@>=2.3.3, tough-cookie@^2.3.2, tough-cookie@^2.3.3, tough-cookie@~2.3.0, tough-cookie@~2.3.3: version "2.3.4" resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.4.tgz#ec60cee38ac675063ffc97a5c18970578ee83655" dependencies: punycode "^1.4.1" +tr46@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-1.0.1.tgz#a8b13fd6bfd2489519674ccde55ba3693b706d09" + dependencies: + punycode "^2.1.0" + tr46@~0.0.3: version "0.0.3" resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" @@ -4539,6 +4929,10 @@ use@^3.1.0: dependencies: kind-of "^6.0.2" +user-home@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/user-home/-/user-home-1.1.1.tgz#2b5be23a32b63a7c9deb8d0f28d485724a3df190" + util-deprecate@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" @@ -4547,6 +4941,12 @@ uuid@^3.0.0, uuid@^3.1.0: version "3.2.1" resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.2.1.tgz#12c528bb9d58d0b9265d9a2f6f0fe8be17ff1f14" +v8flags@^2.0.10: + version "2.1.1" + resolved "https://registry.yarnpkg.com/v8flags/-/v8flags-2.1.1.tgz#aab1a1fa30d45f88dd321148875ac02c0b55e5b4" + dependencies: + user-home "^1.1.1" + validate-npm-package-license@^3.0.1: version "3.0.3" resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.3.tgz#81643bcbef1bdfecd4623793dc4648948ba98338" @@ -4577,6 +4977,12 @@ vlq@^0.2.1: version "0.2.3" resolved "https://registry.yarnpkg.com/vlq/-/vlq-0.2.3.tgz#8f3e4328cf63b1540c0d67e1b2778386f8975b26" +w3c-hr-time@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.1.tgz#82ac2bff63d950ea9e3189a58a65625fedf19045" + dependencies: + browser-process-hrtime "^0.1.2" + walker@~1.0.5: version "1.0.7" resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.7.tgz#2f7f9b8fd10d677262b18a884e28d19618e028fb" @@ -4594,7 +5000,7 @@ webidl-conversions@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" -webidl-conversions@^4.0.0: +webidl-conversions@^4.0.0, webidl-conversions@^4.0.1, webidl-conversions@^4.0.2: version "4.0.2" resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad" @@ -4605,7 +5011,7 @@ webpack-core@^0.6.8: source-list-map "~0.1.7" source-map "~0.4.1" -whatwg-encoding@^1.0.1: +whatwg-encoding@^1.0.1, whatwg-encoding@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.3.tgz#57c235bc8657e914d24e1a397d3c82daee0a6ba3" dependencies: @@ -4618,6 +5024,14 @@ whatwg-url@^4.3.0: tr46 "~0.0.3" webidl-conversions "^3.0.0" +whatwg-url@^6.4.0: + version "6.4.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-6.4.0.tgz#08fdf2b9e872783a7a1f6216260a1d66cc722e08" + dependencies: + lodash.sortby "^4.7.0" + tr46 "^1.0.0" + webidl-conversions "^4.0.1" + which-module@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" @@ -4687,6 +5101,13 @@ write@^0.2.1: dependencies: mkdirp "^0.5.1" +ws@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/ws/-/ws-4.1.0.tgz#a979b5d7d4da68bf54efe0408967c324869a7289" + dependencies: + async-limiter "~1.0.0" + safe-buffer "~5.1.0" + xdg-basedir@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-3.0.0.tgz#496b2cc109eca8dbacfe2dc72b603c17c5870ad4" @@ -4695,6 +5116,10 @@ xml-name-validator@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-2.0.1.tgz#4d8b8f1eccd3419aa362061becef515e1e559635" +xml-name-validator@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a" + xtend@4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af"