diff --git a/.gitignore b/.gitignore index 2703a1f..4f9a353 100644 --- a/.gitignore +++ b/.gitignore @@ -3,3 +3,4 @@ node_modules test/testproj coverage test/support/.config +test/**/package-lock.json diff --git a/package.json b/package.json index 2f60879..706c9c9 100644 --- a/package.json +++ b/package.json @@ -11,33 +11,35 @@ ], "dependencies": { "argparse": "^1.0.2", - "ejs": "^2.3.1", + "ejs": "^2.5.7", "isbinaryfile": "^3.0.0", - "joi": "^10.0.0", - "js-yaml": "^3.4.5", + "joi": "^10.6.0", + "js-yaml": "^3.9.1", "lodash": "^4.12.0", - "minimatch": "^3.0.0", + "minimatch": "^3.0.4", "mkdirp": "^0.5.1", "ncp": "^2.0.0", "readdirp": "^2.0.0", - "rimraf": "^2.5.2", + "rimraf": "^2.6.1", "underscore.string": "^3.1.1", - "when": "^3.7.7", - "which": "^1.2.8" + "when": "^3.7.8", + "which": "^1.3.0" }, "devDependencies": { - "babel-core": "^6.8.0", - "babel-preset-es2015": "^6.6.0", - "babel-preset-stage-2": "^6.5.0", - "chai": "^3.0.0", - "coveralls": "^2.11.2", + "babel-core": "^6.26.0", + "babel-preset-es2015": "^6.24.1", + "babel-preset-stage-2": "^6.24.1", + "chai": "^4.1.1", + "chai-as-promised": "^7.1.1", + "coveralls": "^2.13.1", + "dirty-chai": "^2.0.1", "errno": "^0.1.2", "istanbul": "^0.4.1", - "jsdoc": "^3.3.1", - "mocha": "^2.5.3", - "mockery": "^2.0.0", - "snazzy": "^6.0.0", - "standard": "^9.0.0" + "jsdoc": "^3.5.4", + "mocha": "^3.5.0", + "mockery": "^2.1.0", + "snazzy": "^7.0.0", + "standard": "^10.0.3" }, "engines": { "node": ">=4.0.0" @@ -64,7 +66,7 @@ }, "standard": { "ignore": [ - "/test/*" + "/test/fixtures" ] } } diff --git a/test/test.js b/test/test.js index 69954a8..e52b8db 100644 --- a/test/test.js +++ b/test/test.js @@ -1,6 +1,8 @@ /* global describe, it, before */ import chai from 'chai' +import dirtyChai from 'dirty-chai' +import chaiAsPromised from 'chai-as-promised' import path from 'path' import fs from 'fs' import W from 'when' @@ -23,2025 +25,1386 @@ const exec = node.lift(_exec) const rimraf = node.lift(_rimraf) const fixturesPath = path.join(__dirname, 'fixtures') +chai.use(dirtyChai) +chai.use(chaiAsPromised) chai.should() -describe('sprout', - function () { - var sproutFixturesPath, +describe('sprout', () => { + let sproutFixturesPath, sprout + + before(() => { + sproutFixturesPath = path.join(fixturesPath, 'sprout') + sprout = new Sprout(path.join(sproutFixturesPath, '__sprout__')) + }) + + it('should construct with a valid path', done => { + const p = path.join(sproutFixturesPath, 'validPath') + ;(() => new Sprout(p))().should.be.ok() + done() + }) + + it("should throw if path doesn't exist", done => { + const p = 'foo/bar/foo/bar/foo/bar/doge' + ;(() => new Sprout(p)).should.throw(`${p} does not exist`) + done() + }) + + it('should throw if path is not a directory', done => { + const p = path.join(sproutFixturesPath, 'notDirectory.foo') + ;(() => new Sprout(p)).should.throw(`${p} is not a directory`) + done() + }) + + it('should instantiate all directories as template objects.', done => { + const p = path.join(sproutFixturesPath, 'templates') + const newSprout = new Sprout(p) + newSprout.templates.foo.should.be.instanceof(Template) + newSprout.templates.bar.should.be.instanceof(Template) + done() + }) + + describe('add', () => { + it('should add template', done => { + const name = 'add' + const src = 'https://github.com/carrot/sprout-sprout' sprout - - before( - function () { - sproutFixturesPath = path.join(fixturesPath, 'sprout') - sprout = new Sprout(path.join(sproutFixturesPath, '__sprout__')) - } - ) - - it('should construct with a valid path', - function (done) { - var p = path.join(sproutFixturesPath, 'validPath') - ;(function () { return new Sprout(p) })().should.be.ok + .add(name, src) + .then(sprout => { + sprout.templates[name].should.be.instanceof(Template) + sprout.templates[name].src.should.eq(src) + fs.existsSync(sprout.templates[name].path).should.be.true() + return sprout.remove(name) + }) + .then(() => done()) + }) + + it('should throw if no name', done => { + (() => sprout.add(null, 'https://github.com/carrot/sprout-sprout')).should.throw() + done() + }) + }) + + describe('remove', () => { + it('should remove template', done => { + const name = 'remove' + const src = 'https://github.com/carrot/sprout-sprout' + let template + sprout + .add(name, src) + .then(sprout => { + template = sprout.templates[name] + template.should.be.instanceof(Template) + template.src.should.eq(src) + fs.existsSync(template.path).should.be.true() + return sprout.remove(name) + }) + .then(() => { + ;(sprout.templates[name] === undefined).should.be.true() + fs.existsSync(template.path).should.be.false() + done() + }) + }) + + it('should throw if no name', done => { + sprout.remove(null).should.be.rejected() + done() + }) + }) + + describe('init', () => { + it('should init template', done => { + const name = 'init' + const fixture = path.join(sproutFixturesPath, name) + const src = 'https://github.com/carrot/sprout-sprout' + const target = path.join(fixture, 'target') + sprout + .add(name, src) + .then(sprout => { + sprout.templates[name].should.be.instanceof(Template) + sprout.templates[name].src.should.eq(src) + fs.existsSync(sprout.templates[name].path).should.be.true() + return sprout.init(name, target, { + locals: { + name: 'bar', + description: 'foo', + github_username: 'carrot' + } + }) + }) + .then(() => { + fs.existsSync(target).should.be.true() + return sprout.remove(name) + }) + .then(() => { + rimraf(target, done) + }) + }) + + it('should throw if no name', done => { + sprout.init(null).should.be.rejected() + done() + }) + }) + + describe('run', () => { + it('should run generator in template', done => { + const name = 'run' + const fixture = path.join(sproutFixturesPath, name) + const src = path.join(fixture, 'src') + const target = path.join(fixture, 'target') + gitInit(src) + .then(() => sprout.add(name, src)) + .then(() => { + sprout.templates[name].should.be.instanceof(Template) + sprout.templates[name].src.should.eq(src) + fs.existsSync(sprout.templates[name].path).should.be.true() + return sprout.init(name, target) + }) + .then(() => sprout.run(name, target, 'foo')) + .then(() => { + fs.readFileSync(path.join(target, 'foo'), 'utf8').should.eq('bar') + return sprout.remove(name) + }) + .then(() => rimraf(target, done)) + }) + + it('should throw if no name', done => { + sprout.run(null).should.be.rejected() + done() + }) + }) +}) + +describe('api', () => { + let apiFixturesPath, sprout + + before(() => { + apiFixturesPath = path.join(fixturesPath, 'api') + sprout = new Sprout(path.join(apiFixturesPath, '__sprout__')) + }) + + describe('add', () => { + it('should add template', done => { + apiAdd(sprout, 'foo', 'https://github.com/carrot/sprout-sprout') + .then(() => { + sprout.templates.foo.should.be.ok() + fs.existsSync(path.join(sprout.path, 'foo')).should.be.true() + return apiRemove(sprout, 'foo') + }) + .then(() => done()) + }) + }) + + describe('remove', () => { + it('should remove template', done => { + apiAdd(sprout, 'foo', 'https://github.com/carrot/sprout-sprout') + .then(() => { + sprout.templates.foo.should.be.ok() + fs.existsSync(path.join(sprout.path, 'foo')).should.be.true() + return apiRemove(sprout, 'foo') + }) + .then(() => { + ;(sprout.templates.foo === undefined).should.be.true() + fs.existsSync(path.join(sprout.path, 'foo')).should.be.false() + done() + }) + }) + + it('should throw if template does not exists', done => { + apiRemove(sprout, 'foo').catch(error => { + error.toString().should.eq('Error: template foo does not exist') done() - } - ) - - it("should throw if path doesn't exist", - function (done) { - var p = 'foo/bar/foo/bar/foo/bar/doge' - ;(function () { return new Sprout(p) }).should.throw(p + ' does not exist') + }) + }) + }) + + describe('init', () => { + it('should init template', done => { + const action = 'init' + const fixture = path.join(apiFixturesPath, action) + const src = path.join(fixture, 'src') + const target = path.join(fixture, 'target') + gitInit(src) + .then(() => apiAdd(sprout, action, src)) + .then(() => { + sprout.templates[action].should.be.ok() + fs.existsSync(path.join(sprout.path, action)).should.be.true() + return apiInit(sprout, action, target) + }) + .then(() => { + fs.existsSync(target).should.be.true() + return apiRemove(sprout, action) + }) + .then(() => rimraf(target, done)) + }) + + it('should throw if template does not exists', done => { + apiInit(sprout, 'foo').catch(error => { + error.toString().should.eq('Error: template foo does not exist') done() - } - ) - - it('should throw if path is not a directory', - function (done) { - var p = path.join(sproutFixturesPath, 'notDirectory.foo') - ;(function () { return new Sprout(p) }).should.throw(p + ' is not a directory') + }) + }) + }) + + describe('run', () => { + it('should run generator in template', done => { + const action = 'run' + const fixture = path.join(apiFixturesPath, action) + const src = path.join(fixture, 'src') + const target = path.join(fixture, 'target') + gitInit(src) + .then(() => apiAdd(sprout, action, src)) + .then(() => { + sprout.templates[action].should.be.ok() + fs.existsSync(path.join(sprout.path, action)).should.be.true() + return apiInit(sprout, action, target) + }) + .then(() => { + fs.existsSync(target).should.be.true() + return apiRun(sprout, action, target, 'foo') + }) + .then(() => { + fs.readFileSync(path.join(target, 'foo'), 'utf8').should.eq('bar') + return apiRemove(sprout, action) + }) + .then(() => rimraf(target, done)) + }) + + it('should throw if template does not exists', done => { + apiRun(sprout, 'foo').catch(error => { + error.toString().should.eq('Error: template foo does not exist') done() - } - ) - - it('should instantiate all directories as template objects.', - function (done) { - var p = path.join(sproutFixturesPath, 'templates') - var newSprout = new Sprout(p) - newSprout.templates['foo'].should.be.instanceof(Template) - newSprout.templates['bar'].should.be.instanceof(Template) + }) + }) + }) +}) + +describe('template', () => { + let templateFixturesPath, sprout + + before(() => { + templateFixturesPath = path.join(fixturesPath, 'template') + sprout = new Sprout(path.join(templateFixturesPath, '__sprout__')) + }) + + it('should construct with a valid name and path', done => { + const name = 'validNamePath' + const src = path.join(templateFixturesPath, name) + ;(() => new Template({ sprout, name, src })).should.be.ok() + done() + }) + + it('should throw without a valid name', done => { + const name = null + const src = path.join(templateFixturesPath, 'foo') + ;(() => new Template({ sprout, name, src })).should.throw() + done() + }) + + it('should determine that src is remote', done => { + const name = 'foo' + const src = 'https://github.com/carrot/sprout-sprout' + const template = new Template({ sprout, name, src }) + template.isRemote.should.be.true() + done() + }) + + it('should determine that src is local', done => { + const name = 'foo' + const src = path.join(templateFixturesPath, 'isLocal') + const template = new Template({ sprout, name, src }) + template.isRemote.should.be.false() + done() + }) + + describe('save', () => { + let saveTemplateFixturesPath + + before(() => { + saveTemplateFixturesPath = path.join(templateFixturesPath, 'save') + }) + + it('should save a remote template', done => { + const name = 'remote' + const src = 'https://github.com/carrot/sprout-sprout' + const template = new Template({ sprout, name, src }) + template + .save() + .then(template => { + fs.existsSync(template.path).should.be.true() + return template.remove(name) + }) + .then(() => done()) + }) + + it('should save a local template', done => { + const name = 'local' + const src = path.join(saveTemplateFixturesPath, name) + const template = new Template({ sprout, name, src }) + gitInit(src) + .then(() => template.save()) + .then(template => { + fs.existsSync(template.path).should.be.true() + return template.remove(name) + }) + .then(() => done()) + }) + + it('should replace existing template with same name', done => { + const name = 'replace' + const src = path.join(saveTemplateFixturesPath, name) + const template = new Template({ + sprout, + name, + src: 'https://github.com/carrot/sprout-sprout' + }) + template + .save() + .then(template => { + fs.existsSync(template.path).should.be.true() + return gitInit(src) + }) + .then(() => new Template({ sprout, name, src }).save()) + .then(() => { + fs.existsSync(template.path).should.be.true() + template.name.should.eq(name) + fs + .readFileSync(path.join(template.path, 'init.js'), 'utf8') + .should.eq('module.exports = {};\n') + return template.remove(name) + }) + .then(() => done()) + }) + + it('should throw if template has no src', done => { + const name = 'noSrc' + const template = new Template({ sprout, name }) + template.save().catch(error => { + error.toString().should.eq('Error: no source provided') done() - } - ) - - describe('add', - function () { - it('should add template', - function (done) { - var name = 'add' - var src = 'https://github.com/carrot/sprout-sprout' - sprout.add(name, src).then( - function (sprout) { - sprout.templates[name].should.be.instanceof(Template) - sprout.templates[name].src.should.eq(src) - fs.existsSync(sprout.templates[name].path).should.be.true - return sprout.remove(name) - } - ).then( - function () { - done() - } - ) - } - ) - - it('should throw if no name', - function (done) { - (function () { sprout.add(null, 'https://github.com/carrot/sprout-sprout') }).should.throw - done() - } - ) - } - ) - - describe('remove', - function () { - it('should remove template', - function (done) { - var name = 'remove' - var src = 'https://github.com/carrot/sprout-sprout' - var template - sprout.add(name, src).then( - function (sprout) { - template = sprout.templates[name] - template.should.be.instanceof(Template) - template.src.should.eq(src) - fs.existsSync(template.path).should.be.true - return sprout.remove(name) - } - ).then( - function () { - (sprout.templates[name] === undefined).should.be.true - fs.existsSync(template.path).should.be.false - done() - } - ) - } - ) - - it('should throw if no name', - function (done) { - (function () { sprout.remove(null) }).should.throw - done() - } - ) - } - ) - - describe('init', - function () { - it('should init template', - function (done) { - var name = 'init' - var fixture = path.join(sproutFixturesPath, name) - var src = 'https://github.com/carrot/sprout-sprout' - var target = path.join(fixture, 'target') - sprout.add(name, src).then( - function (sprout) { - sprout.templates[name].should.be.instanceof(Template) - sprout.templates[name].src.should.eq(src) - fs.existsSync(sprout.templates[name].path).should.be.true - return sprout.init(name, target, { - locals: { - name: 'bar', - description: 'foo', - github_username: 'carrot' - } - }) - } - ).then( - function () { - fs.existsSync(target).should.be.true - return sprout.remove(name) - } - ).then( - function () { - rimraf(target, done) - } - ) - } - ) - - it('should throw if no name', - function (done) { - (function () { sprout.init(null) }).should.throw - done() - } - ) - } - ) - - describe('run', - function () { - it('should run generator in template', - function (done) { - var name = 'run' - var fixture = path.join(sproutFixturesPath, name) - var src = path.join(fixture, 'src') - var target = path.join(fixture, 'target') - return gitInit(src).then( - function () { - return sprout.add(name, src) - } - ).then( - function () { - sprout.templates[name].should.be.instanceof(Template) - sprout.templates[name].src.should.eq(src) - fs.existsSync(sprout.templates[name].path).should.be.true - return sprout.init(name, target) - } - ).then( - function () { - return sprout.run(name, target, 'foo') - } - ).then( - function () { - fs.readFileSync(path.join(target, 'foo'), 'utf8').should.eq('bar') - return sprout.remove(name) - } - ).then( - function () { - return rimraf(target, done) - } - ) - } - ) - - it('should throw if no name', - function (done) { - (function () { sprout.run(null) }).should.throw - done() - } - ) - } - ) - } -) - -describe('api', - function () { - var apiFixturesPath, - sprout - - before( - function () { - apiFixturesPath = path.join(fixturesPath, 'api') - sprout = new Sprout(path.join(apiFixturesPath, '__sprout__')) - } - ) - - describe('add', - function () { - it('should add template', - function (done) { - return apiAdd(sprout, 'foo', 'https://github.com/carrot/sprout-sprout').then( - function () { - sprout.templates['foo'].should.be.ok - fs.existsSync(path.join(sprout.path, 'foo')).should.be.true - return apiRemove(sprout, 'foo') - } - ).then( - function () { - done() - } - ) - } - ) - } - ) - - describe('remove', - function () { - it('should remove template', - function (done) { - return apiAdd(sprout, 'foo', 'https://github.com/carrot/sprout-sprout').then( - function () { - sprout.templates['foo'].should.be.ok - fs.existsSync(path.join(sprout.path, 'foo')).should.be.true - return apiRemove(sprout, 'foo') - } - ).then( - function () { - (sprout.templates['foo'] === undefined).should.be.true - fs.existsSync(path.join(sprout.path, 'foo')).should.be.false - done() - } - ) - } - ) - - it('should throw if template does not exists', - function (done) { - return apiRemove(sprout, 'foo').catch( - function (error) { - error.toString().should.eq('Error: template foo does not exist') - done() - } - ) - } - ) - } - ) - - describe('init', - function () { - it('should init template', - function (done) { - var action = 'init' - var fixture = path.join(apiFixturesPath, action) - var src = path.join(fixture, 'src') - var target = path.join(fixture, 'target') - return gitInit(src).then( - function () { - return apiAdd(sprout, action, src) - } - ).then( - function () { - sprout.templates[action].should.be.ok - fs.existsSync(path.join(sprout.path, action)).should.be.true - return apiInit(sprout, action, target) - } - ).then( - function () { - fs.existsSync(target).should.be.true - return apiRemove(sprout, action) - } - ).then( - function () { - return rimraf(target, done) - } - ) - } - ) - - it('should throw if template does not exists', - function (done) { - return apiInit(sprout, 'foo').catch( - function (error) { - error.toString().should.eq('Error: template foo does not exist') - done() - } - ) - } - ) - } - ) - - describe('run', - function () { - it('should run generator in template', - function (done) { - var action = 'run' - var fixture = path.join(apiFixturesPath, action) - var src = path.join(fixture, 'src') - var target = path.join(fixture, 'target') - return gitInit(src).then( - function () { - return apiAdd(sprout, action, src) - } - ).then( - function () { - sprout.templates[action].should.be.ok - fs.existsSync(path.join(sprout.path, action)).should.be.true - return apiInit(sprout, action, target) - } - ).then( - function () { - fs.existsSync(target).should.be.true - return apiRun(sprout, action, target, 'foo') - } - ).then( - function () { - fs.readFileSync(path.join(target, 'foo'), 'utf8').should.eq('bar') - return apiRemove(sprout, action) - } - ).then( - function () { - return rimraf(target, done) - } - ) - } - ) - - it('should throw if template does not exists', - function (done) { - return apiRun(sprout, 'foo').catch( - function (error) { - error.toString().should.eq('Error: template foo does not exist') - done() - } - ) - } - ) - } - ) - } -) - -describe('template', - function () { - var templateFixturesPath, - sprout - - before( - function () { - templateFixturesPath = path.join(fixturesPath, 'template') - sprout = new Sprout(path.join(templateFixturesPath, '__sprout__')) - } - ) - - it('should construct with a valid name and path', - function (done) { - var name = 'validNamePath' - var src = path.join(templateFixturesPath, name) - ;(function () { return new Template({ sprout: sprout, name: name, src: src }) }).should.be.ok + }) + }) + + it('should throw if src is remote and there is no internet', done => { + mockery.enable({ useCleanCache: true, warnOnUnregistered: false }) + mockery.registerMock('dns', { + resolve (name, callback) { + return callback(errno.code.ECONNREFUSED) + } + }) + const name = 'noInternet' + const src = 'https://github.com/carrot/sprout-sprout' + const template = new (require('./../lib/template'))({ + sprout, + name, + src + }) + template.save().catch(error => { + error + .toString() + .should.eq('Error: make sure that you are connected to the internet!') + mockery.deregisterMock('dns') + mockery.disable() done() - } - ) - - it('should throw without a valid name', - function (done) { - var name = null - var src = path.join(templateFixturesPath, 'foo') - ;(function () { return new Template({ sprout: sprout, name: name, src: src }) }).should.throw + }) + }) + + it("should throw if src is local and doesn't exist", done => { + const name = 'noLocal' + const src = path.join(saveTemplateFixturesPath, name) + const template = new Template({ sprout, name, src }) + template.save().catch(error => { + error + .toString() + .should.eq(`Error: there is no sprout template located at ${src}`) done() - } - ) - - it('should determine that src is remote', - function (done) { - var name = 'foo' - var src = 'https://github.com/carrot/sprout-sprout' - var template = new Template({ sprout: sprout, name: name, src: src }) - template.isRemote.should.be.true + }) + }) + }) + + describe('init', () => { + let initTemplateFixturesPath + + before(() => { + initTemplateFixturesPath = path.join(templateFixturesPath, 'init') + }) + + it('should init template', done => { + const name = 'init' + const fixture = path.join(initTemplateFixturesPath, name) + const src = 'https://github.com/carrot/sprout-sprout' + const target = path.join(fixture, 'target') + const template = new Template({ sprout, name, src }) + template + .save() + .then(template => { + fs.existsSync(template.path).should.be.true() + return template.init(target, { + locals: { + name: 'bar', + description: 'foo', + github_username: 'carrot' + } + }) + }) + .then(template => { + fs.existsSync(target).should.be.true() + return template.remove() + }) + .then(() => rimraf(target, done)) + }) + + it('should throw when no root path', done => { + const name = 'noRoot' + const fixture = path.join(initTemplateFixturesPath, name) + const src = path.join(fixture, 'src') + const target = path.join(fixture, 'target') + const template = new Template({ sprout, name, src }) + gitInit(src) + .then(() => template.save()) + .then(template => { + fs.existsSync(template.path).should.be.true() + return rimraf(template.rootPath) + }) + .then(() => template.init(target)) + .catch(error => { + error + .toString() + .should.eq('Error: root path does not exist in template') + fs.mkdirSync(template.rootPath) + fs.writeFileSync(path.join(template.rootPath, '.keep'), '') + return template.remove().then(() => done()) + }) + }) + + it('should throw when no target provided', done => { + const name = 'noRoot' + const src = 'https://github.com/carrot/sprout-sprout' + const template = new Template({ sprout, name, src }) + template + .save() + .then(template => { + fs.existsSync(template.path).should.be.true() + return template.init(null) + }) + .catch(error => { + error.toString().should.match(/"target" must be a string/) + return template.remove().then(() => done()) + }) + }) + + it('should throw when target exists', done => { + const name = 'targetExists' + const fixture = path.join(initTemplateFixturesPath, name) + const src = 'https://github.com/carrot/sprout-sprout' + const target = path.join(fixture, 'target') + const template = new Template({ sprout, name, src }) + template + .save() + .then(() => { + fs.existsSync(template.path).should.be.true() + return template.init(target) + }) + .catch(error => { + error.toString().should.eq(`Error: ${target} already exists`) + return template.remove().then(() => done()) + }) + }) + + it('should throw when no init.js provided', done => { + const name = 'init' + const fixture = path.join(initTemplateFixturesPath, name) + const src = 'https://github.com/carrot/sprout-sprout' + const target = path.join(fixture, 'target') + const template = new Template({ sprout, name, src }) + template + .save() + .then(template => { + fs.existsSync(template.path).should.be.true() + fs.unlinkSync(path.join(template.path, 'init.js')) + return template.init(target) + }) + .catch(error => { + error + .toString() + .should.eq('Error: init.js does not exist in this template') + return template.remove().then(() => { + rimraf(target, done) + }) + }) + }) + + it('should throw when require init throws', done => { + const name = 'initThrows' + const fixture = path.join(initTemplateFixturesPath, name) + const src = path.join(fixture, 'src') + const target = path.join(fixture, 'target') + const template = new Template({ sprout, name, src }) + gitInit(src) + .then(() => template.save()) + .then(template => { + fs.existsSync(template.path).should.be.true() + return template.init(target) + }) + .catch(error => { + error.toString().should.eq("Error: Cannot find module 'doge'") + return template.remove().then(() => { + rimraf(target, done) + }) + }) + }) + + it('should use init.js', done => { + const name = 'initJs' + const fixture = path.join(initTemplateFixturesPath, name) + const src = path.join(fixture, 'src') + const target = path.join(fixture, 'target') + const template = new Template({ sprout, name, src }) + gitInit(src) + .then(() => template.save()) + .then(template => { + fs.existsSync(template.path).should.be.true() + return template.init(target) + }) + .then(template => { + fs.readFileSync(path.join(target, 'foo'), 'utf8').should.eq('bar\n') + return template.remove() + }) + .then(() => rimraf(target, done)) + }) + + it('should use a different git branch if specified', done => { + const name = 'branch' + const fixture = path.join(initTemplateFixturesPath, name) + const sproutPath = path.join(os.tmpdir(), '__sprout__') + const src = path.join(os.tmpdir(), name) + const srcRoot = path.join(src, 'root') + const srcInit = path.join(src, 'init.js') + const target = path.join(fixture, 'target') + let template + rimraf(sproutPath) + .then(() => { + fs.mkdirSync(sproutPath) + return rimraf(src) + }) + .then(() => { + fs.mkdirSync(src) + fs.writeFileSync(srcInit, 'module.exports={};') + fs.mkdirSync(srcRoot) + fs.writeFileSync(path.join(srcRoot, '.keep'), '') + template = new Template({ + sprout: new Sprout(sproutPath), + name, + src + }) + }) + .then(() => gitInit(src)) + .then(() => gitCommitAdd(src)) + .then(() => template.save()) + .then(() => gitCreateBranch(template.path, name)) + .then(() => { + fs.writeFileSync(path.join(template.rootPath, 'foo'), '', 'utf8') + return gitCommitAdd(template.path) + }) + .then(() => gitCheckout(template.path, 'master')) + .then(() => template.init(target, { branch: name })) + .then(() => { + fs.existsSync(path.join(target, 'foo')).should.be.true() + return gitCurrentBranch(template.path) + }) + .then(branch => { + branch.should.eq('master\n') + return template.remove() + }) + .then(() => rimraf(target, done)) + }) + + it('should use a different git tag if specified', done => { + const name = 'tag' + const fixture = path.join(initTemplateFixturesPath, name) + const sproutPath = path.join(os.tmpdir(), '__sprout__') + const src = path.join(os.tmpdir(), name) + const srcRoot = path.join(src, 'root') + const srcInit = path.join(src, 'init.js') + const target = path.join(fixture, 'target') + let template + rimraf(sproutPath) + .then(() => { + fs.mkdirSync(sproutPath) + return rimraf(src) + }) + .then(() => { + fs.mkdirSync(src) + fs.writeFileSync(srcInit, 'module.exports={};') + fs.mkdirSync(srcRoot) + fs.writeFileSync(path.join(srcRoot, '.keep'), '') + template = new Template({ + sprout: new Sprout(sproutPath), + name, + src + }) + }) + .then(() => gitInit(src)) + .then(() => gitCommitAdd(src)) + .then(() => template.save()) + .then(() => { + fs.writeFileSync(path.join(template.rootPath, 'foo'), '', 'utf8') + return gitCommitAdd(template.path) + }) + .then(() => gitTag(template.path, name)) + .then(() => { + fs.writeFileSync(path.join(template.rootPath, 'foo2'), '', 'utf8') + return gitCommitAdd(template.path) + }) + .then(() => gitCheckout(template.path, 'master')) + .then(() => template.init(target, { tag: name })) + .then(() => { + fs.existsSync(path.join(target, 'foo2')).should.be.false() + return gitCurrentBranch(template.path) + }) + .then(branch => { + branch.should.eq('master\n') + return template.remove() + }) + .then(() => rimraf(target, done)) + }) + + it("should throw error if tag doesn't exist", done => { + const name = 'tagMissing' + const fixture = path.join(initTemplateFixturesPath, name) + const src = 'https://github.com/carrot/sprout-sprout' + const target = path.join(fixture, 'target') + const template = new Template({ sprout, name, src }) + template + .save() + .then(template => { + fs.existsSync(template.path).should.be.true() + return template.init(target, { tag: 'foooooooo' }) + }) + .catch(error => { + error + .toString() + .should.match( + /Error: Command failed:.*git checkout tags\/foooooooo/ + ) + return template.remove().then(() => rimraf(target, done)) + }) + }) + + it('should use .json configuration file', done => { + const name = 'jsonConfig' + const fixture = path.join(initTemplateFixturesPath, name) + const src = path.join(fixture, 'src') + const target = path.join(fixture, 'target') + const template = new Template({ sprout, name, src }) + gitInit(src) + .then(() => template.save()) + .then(template => { + fs.existsSync(template.path).should.be.true() + return template.init(target, { + configPath: path.join(fixture, 'config.json') + }) + }) + .then(template => { + fs.readFileSync(path.join(target, 'foo'), 'utf8').should.eq('bar\n') + return template.remove() + }) + .then(() => rimraf(target, done)) + }) + + it('should use .yaml configuration file', done => { + const name = 'yamlConfig' + const fixture = path.join(initTemplateFixturesPath, name) + const src = path.join(fixture, 'src') + const target = path.join(fixture, 'target') + const template = new Template({ sprout, name, src }) + gitInit(src) + .then(() => template.save()) + .then(template => { + fs.existsSync(template.path).should.be.true() + return template.init(target, { + configPath: path.join(fixture, 'config.yaml') + }) + }) + .then(template => { + fs.readFileSync(path.join(target, 'foo'), 'utf8').should.eq('bar\n') + return template.remove() + }) + .then(() => rimraf(target, done)) + }) + + it('it should ignore files specified in init', done => { + const name = 'ignore' + const fixture = path.join(initTemplateFixturesPath, name) + const src = path.join(fixture, 'src') + const target = path.join(fixture, 'target') + const template = new Template({ sprout, name, src }) + gitInit(src) + .then(() => template.save()) + .then(template => { + fs.existsSync(template.path).should.be.true() + return template.init(target) + }) + .then(template => { + fs + .readFileSync(path.join(target, 'foo'), 'utf8') + .should.eq('<%= foo %>\n') + return template.remove() + }) + .then(() => rimraf(target, done)) + }) + + it('it should ignore one file specified in init', done => { + const name = 'ignoreOne' + const fixture = path.join(initTemplateFixturesPath, name) + const src = path.join(fixture, 'src') + const target = path.join(fixture, 'target') + const template = new Template({ sprout, name, src }) + gitInit(src) + .then(() => template.save()) + .then(template => { + fs.existsSync(template.path).should.be.true() + return template.init(target) + }) + .then(template => { + fs + .readFileSync(path.join(target, 'foo'), 'utf8') + .should.eq('<%= foo %>\n') + return template.remove() + }) + .then(() => rimraf(target, done)) + }) + + it('should ask questions if questionnaire is passed', done => { + const name = 'questionnaire' + const fixture = path.join(initTemplateFixturesPath, name) + const src = path.join(fixture, 'src') + const target = path.join(fixture, 'target') + const template = new Template({ sprout, name, src }) + const q = () => W.resolve({ foo: 'bar' }) + gitInit(src) + .then(() => template.save()) + .then(template => { + fs.existsSync(template.path).should.be.true() + return template.init(target, { questionnaire: q }) + }) + .then(template => { + fs.readFileSync(path.join(target, 'foo'), 'utf8').should.eq('bar\n') + return template.remove() + }) + .then(() => rimraf(target, done)) + }) + + it('should throw error if configuration file is invalid', done => { + const name = 'invalidConfig' + const fixture = path.join(initTemplateFixturesPath, name) + const src = path.join(fixture, 'src') + const target = path.join(fixture, 'target') + const configPath = path.join(fixture, 'foobar') + const template = new Template({ sprout, name, src }) + gitInit(src) + .then(() => template.save()) + .then(template => { + fs.existsSync(template.path).should.be.true() + return template.init(target, { configPath }) + }) + .catch(error => { + error + .toString() + .should.match(/Error: ENOENT: no such file or directory/) + return template.remove().then(() => done()) + }) + }) + + it('should include underscore.string as EJS "local"', done => { + const name = 'underscoreString' + const fixture = path.join(initTemplateFixturesPath, name) + const src = path.join(fixture, 'src') + const target = path.join(fixture, 'target') + const template = new Template({ sprout, name, src }) + gitInit(src) + .then(() => template.save()) + .then(template => { + fs.existsSync(template.path).should.be.true() + return template.init(target) + }) + .then(template => { + fs.readFileSync(path.join(target, 'foo'), 'utf8').should.eq('Bar\n') + return template.remove() + }) + .then(() => rimraf(target, done)) + }) + + it('should apply defaults', done => { + const name = 'defaults' + const fixture = path.join(initTemplateFixturesPath, name) + const src = path.join(fixture, 'src') + const target = path.join(fixture, 'target') + const template = new Template({ sprout, name, src }) + gitInit(src) + .then(() => template.save()) + .then(template => { + fs.existsSync(template.path).should.be.true() + return template.init(target) + }) + .then(template => { + fs.readFileSync(path.join(target, 'foo'), 'utf8').should.eq('bar\n') + return template.remove() + }) + .then(() => rimraf(target, done)) + }) + + it('should apply moment.js as a local', done => { + const name = 'defaultsLocals' + const fixture = path.join(initTemplateFixturesPath, name) + const src = path.join(fixture, 'src') + const target = path.join(fixture, 'target') + const template = new Template({ sprout, name, src }) + gitInit(src) + .then(() => template.save()) + .then(template => { + fs.existsSync(template.path).should.be.true() + return template.init(target) + }) + .then(template => { + fs.readFileSync(path.join(target, 'foo'), 'utf8').should.eq('1984\n') + return template.remove() + }) + .then(() => rimraf(target, done)) + }) + + it('should install npm dependencies', done => { + const name = 'npm' + const fixture = path.join(initTemplateFixturesPath, name) + const src = path.join(fixture, 'src') + const target = path.join(fixture, 'target') + const template = new Template({ sprout, name, src }) + gitInit(src) + .then(() => template.save()) + .then(template => { + fs.existsSync(template.path).should.be.true() + return template.init(target) + }) + .then(template => { + fs.existsSync(path.join(template.path, 'node_modules')).should.be.true() + return template.remove() + }) + .then(() => rimraf(target, done)) + }) + + it('should copy files that are binaries', done => { + const name = 'binary' + const fixture = path.join(initTemplateFixturesPath, name) + const src = path.join(fixture, 'src') + const target = path.join(fixture, 'target') + const template = new Template({ sprout, name, src }) + gitInit(src) + .then(() => template.save()) + .then(template => { + fs.existsSync(template.path).should.be.true() + return template.init(target) + }) + .then(template => { + ;(fs.readFileSync(path.join(src, 'root', 'logo.png')).length === + fs.readFileSync(path.join(target, 'logo.png')).length).should.be + .true() + return template.remove() + }) + .then(() => rimraf(target, done)) + }) + + it('should run before hook', done => { + const name = 'before' + const fixture = path.join(initTemplateFixturesPath, name) + const src = path.join(fixture, 'src') + const target = path.join(fixture, 'target') + const template = new Template({ sprout, name, src }) + gitInit(src) + .then(() => template.save()) + .then(template => { + fs.existsSync(template.path).should.be.true() + return template.init(target) + }) + .then(template => { + fs.existsSync(path.join(target, 'bar')).should.be.true() + return template.remove() + }) + .then(() => rimraf(target, done)) + }) + + it('should run beforeRender hook', done => { + const name = 'beforeRender' + const fixture = path.join(initTemplateFixturesPath, name) + const src = path.join(fixture, 'src') + const target = path.join(fixture, 'target') + const template = new Template({ sprout, name, src }) + gitInit(src) + .then(() => template.save()) + .then(template => { + fs.existsSync(template.path).should.be.true() + return template.init(target) + }) + .then(template => { + fs.readFileSync(path.join(target, 'foo'), 'utf8').should.eq('foo\n') + return template.remove() + }) + .then(() => rimraf(target, done)) + }) + + it('should run after hook', done => { + const name = 'after' + const fixture = path.join(initTemplateFixturesPath, name) + const src = path.join(fixture, 'src') + const target = path.join(fixture, 'target') + const template = new Template({ sprout, name, src }) + gitInit(src) + .then(() => template.save()) + .then(template => { + fs.existsSync(template.path).should.be.true() + return template.init(target) + }) + .then(template => { + fs.existsSync(path.join(target, 'bar')).should.be.true() + return template.remove() + }) + .then(() => rimraf(target, done)) + }) + + it('should remove target directory if error thrown after target directory created', done => { + const name = 'removeTarget' + const fixture = path.join(initTemplateFixturesPath, name) + const src = path.join(fixture, 'src') + const target = path.join(fixture, 'target') + const template = new Template({ sprout, name, src }) + gitInit(src) + .then(() => template.save()) + .then(template => { + fs.existsSync(template.path).should.be.true() + return template.init(target) + }) + .catch(() => { + fs.existsSync(target).should.be.false() + return template.remove().then(() => done()) + }) + }) + + it('should work if internet is missing', done => { + mockery.enable({ useCleanCache: true, warnOnUnregistered: false }) + mockery.registerMock('dns', { + resolve (name, callback) { + return callback(errno.code.ECONNREFUSED) + } + }) + const name = 'noInternet' + const fixture = path.join(initTemplateFixturesPath, name) + const src = path.join(fixture, 'src') + const target = path.join(fixture, 'target') + const template = new Template({ sprout, name, src }) + gitInit(src) + .then(() => template.save()) + .then(template => { + fs.existsSync(template.path).should.be.true() + return template.init(target) + }) + .then(template => { + fs.existsSync(target).should.be.true() + return template.remove() + }) + .then(() => { + mockery.deregisterMock('dns') + mockery.disable() + return rimraf(target, done) + }) + }) + }) + + describe('update', () => { + it('should update', done => { + const name = 'update' + const src = 'https://github.com/carrot/sprout-sprout' + const template = new Template({ sprout, name, src }) + template + .save() + .then(template => { + fs.existsSync(template.path).should.be.true() + return template.update() + }) + .then(template => template.remove()) + .then(() => done()) + }) + }) + + describe('run', () => { + let runTemplateFixturesPath + + before(() => { + runTemplateFixturesPath = path.join(templateFixturesPath, 'run') + }) + + it('should run generator', done => { + const name = 'run' + const fixture = path.join(runTemplateFixturesPath, name) + const src = path.join(fixture, 'src') + const target = path.join(fixture, 'target') + const template = new Template({ sprout, name, src }) + gitInit(src) + .then(() => template.save()) + .then(() => template.init(target)) + .then(template => template.run(target, 'foo')) + .then(template => { + fs.readFileSync(path.join(target, 'foo'), 'utf8').should.eq('bar') + return template.remove(name) + }) + .then(() => rimraf(target, done)) + }) + + it('should throw if no target set', done => { + const name = 'noTarget' + const fixture = path.join(runTemplateFixturesPath, name) + const src = path.join(fixture, 'src') + const target = path.join(fixture, 'target') + const template = new Template({ sprout, name, src }) + gitInit(src) + .then(() => template.save()) + .then(() => template.init(target)) + .then(template => template.run(null, 'foo')) + .catch(error => { + error + .toString() + .should.eq( + 'ValidationError: [sprout generator] option "target" must be a string' + ) + return template.remove(name).then(() => rimraf(target, done)) + }) + }) + + it('should throw if target missing', done => { + const name = 'noTarget' + const fixture = path.join(runTemplateFixturesPath, name) + const src = path.join(fixture, 'src') + const target = path.join(fixture, 'target') + const fakeTarget = path.join(fixture, 'doge/doge/doge/doge/doge') + const template = new Template({ sprout, name, src }) + gitInit(src) + .then(() => template.save()) + .then(() => template.init(target)) + .then(template => template.run(fakeTarget, 'foo')) + .catch(error => { + error.toString().should.eq(`Error: ${fakeTarget} does not exist`) + return template.remove(name).then(() => rimraf(target, done)) + }) + }) + + it('should throw if no generator name', done => { + const name = 'noGenerator' + const fixture = path.join(runTemplateFixturesPath, name) + const src = path.join(fixture, 'src') + const target = path.join(fixture, 'target') + const template = new Template({ sprout, name, src }) + gitInit(src) + .then(() => template.save()) + .then(() => template.init(target)) + .then(template => template.run(target, null)) + .catch(error => { + error + .toString() + .should.eq( + 'ValidationError: [sprout generator] option "generator" must be a string' + ) + return template.remove(name).then(() => rimraf(target, done)) + }) + }) + + it('should throw if generator missing', done => { + const name = 'generatorMissing' + const fixture = path.join(runTemplateFixturesPath, name) + const src = path.join(fixture, 'src') + const target = path.join(fixture, 'target') + const template = new Template({ sprout, name, src }) + gitInit(src) + .then(() => template.save()) + .then(() => template.init(target)) + .then(template => template.run(target, 'foo2')) + .catch(error => { + error + .toString() + .should.eq("Error: 'foo2' is not a generator in this template") + return template.remove(name).then(() => rimraf(target, done)) + }) + }) + + it("should run generator if it's a .js file", done => { + const name = 'generatorJs' + const fixture = path.join(runTemplateFixturesPath, name) + const src = path.join(fixture, 'src') + const target = path.join(fixture, 'target') + const template = new Template({ sprout, name, src }) + gitInit(src) + .then(() => template.save()) + .then(() => template.init(target)) + .then(template => template.run(target, 'foo')) + .then(template => { + fs.readFileSync(path.join(target, 'foo'), 'utf8').should.eq('bar') + return template.remove(name) + }) + .then(() => rimraf(target, done)) + }) + + it('should throw error if require returns error', done => { + const name = 'requireError' + const fixture = path.join(runTemplateFixturesPath, name) + const src = path.join(fixture, 'src') + const target = path.join(fixture, 'target') + const template = new Template({ sprout, name, src }) + gitInit(src) + .then(() => template.save()) + .then(() => template.init(target)) + .then(template => template.run(target, 'foo')) + .catch(error => { + error.toString().should.eq("Error: Cannot find module 'foo'") + return template.remove(name).then(() => rimraf(target, done)) + }) + }) + + it.skip('it should pass arguments', done => { + const name = 'arguments' + const fixture = path.join(runTemplateFixturesPath, name) + const src = path.join(fixture, 'src') + const target = path.join(fixture, 'target') + const template = new Template({ sprout, name, src }) + gitInit(src) + .then(() => template.save()) + .then(() => template.init(target)) + .then(template => template.run(target, 'foo', ['bar'])) + .then(template => { + fs.readFileSync(path.join(target, 'foo'), 'utf8').should.eq('bar') + return template.remove(name) + }) + .then(() => rimraf(target, done)) + }) + + it('it should not break if undefined is passed as arguments', done => { + const name = 'undefinedArguments' + const fixture = path.join(runTemplateFixturesPath, name) + const src = path.join(fixture, 'src') + const target = path.join(fixture, 'target') + const template = new Template({ sprout, name, src }) + gitInit(src) + .then(() => template.save()) + .then(() => template.init(target)) + .then(template => template.run(target, 'foo', undefined)) + .then(template => { + fs.readFileSync(path.join(target, 'foo'), 'utf8').should.eq('bar') + return template.remove(name) + }) + .then(() => rimraf(target, done)) + }) + }) + + describe('remove', () => { + it('should remove', done => { + const name = 'remove' + const src = 'https://github.com/carrot/sprout-sprout' + const template = new Template({ sprout, name, src }) + template.save().then(() => template.remove()).then(template => { + fs.existsSync(template.path).should.be.false() done() - } - ) - - it('should determine that src is local', - function (done) { - var name = 'foo' - var src = path.join(templateFixturesPath, 'isLocal') - var template = new Template({ sprout: sprout, name: name, src: src }) - template.isRemote.should.be.false + }) + }) + }) +}) + +describe('utils', () => { + let utilsFixturesPath + + before(() => { + utilsFixturesPath = path.join(fixturesPath, 'utils') + }) + + describe('copy', () => { + let utilsCopyFixturesPath + + before(() => { + utilsCopyFixturesPath = path.join(utilsFixturesPath, 'copy') + }) + + it('should copy from one path relative to the src, to another', done => { + const fixture = path.join(utilsCopyFixturesPath, 'base') + const utils = new Utils(fixture, fixture) + utils.copy('foo', 'bar').then(() => { + fs.readFileSync(path.join(fixture, 'bar'), 'utf8').should.eq('bar\n') + fs.unlinkSync(path.join(fixture, 'bar')) done() - } - ) - - describe('save', - function () { - var saveTemplateFixturesPath - - before( - function () { - saveTemplateFixturesPath = path.join(templateFixturesPath, 'save') - } - ) - - it('should save a remote template', - function (done) { - var name = 'remote' - var src = 'https://github.com/carrot/sprout-sprout' - var template = new Template({ sprout: sprout, name: name, src: src }) - return template.save().then( - function (template) { - fs.existsSync(template.path).should.be.true - return template.remove(name) - } - ).then( - function () { - done() - } - ) - } - ) - - it('should save a local template', - function (done) { - var name = 'local' - var src = path.join(saveTemplateFixturesPath, name) - var template = new Template({ sprout: sprout, name: name, src: src }) - gitInit(src).then( - function () { - return template.save() - } - ).then( - function (template) { - fs.existsSync(template.path).should.be.true - return template.remove(name) - } - ).then( - function () { - done() - } - ) - } - ) - - it('should replace existing template with same name', - function (done) { - var name = 'replace' - var src = path.join(saveTemplateFixturesPath, name) - var template = new Template({ sprout: sprout, name: name, src: 'https://github.com/carrot/sprout-sprout' }) - return template.save().then( - function (template) { - fs.existsSync(template.path).should.be.true - return gitInit(src) - } - ).then( - function () { - return (new Template({ sprout: sprout, name: name, src: src })).save() - } - ).then( - function () { - fs.existsSync(template.path).should.be.true - template.name.should.eq(name) - fs.readFileSync(path.join(template.path, 'init.js'), 'utf8').should.eq('module.exports = {};\n') - return template.remove(name) - } - ).then( - function () { - done() - } - ) - } - ) - - it('should throw if template has no src', - function (done) { - var name = 'noSrc' - var template = new Template({ sprout: sprout, name: name }) - return template.save().catch( - function (error) { - error.toString().should.eq('Error: no source provided') - done() - } - ) - } - ) - - it('should throw if src is remote and there is no internet', - function (done) { - mockery.enable({useCleanCache: true, warnOnUnregistered: false}) - mockery.registerMock('dns', { - resolve: function (name, callback) { - return callback(errno.code.ECONNREFUSED) - } - }) - var name = 'noInternet' - var src = 'https://github.com/carrot/sprout-sprout' - var template = new (require('./../lib/template'))({ sprout: sprout, name: name, src: src }) - return template.save().catch( - function (error) { - error.toString().should.eq('Error: make sure that you are connected to the internet!') - mockery.deregisterMock('dns') - mockery.disable() - done() - } - ) - } - ) - - it("should throw if src is local and doesn't exist", - function (done) { - var name = 'noLocal' - var src = path.join(saveTemplateFixturesPath, name) - var template = new Template({ sprout: sprout, name: name, src: src }) - return template.save().catch( - function (error) { - error.toString().should.eq('Error: there is no sprout template located at ' + src) - done() - } - ) - } - ) - } - ) - - describe('init', - function () { - var initTemplateFixturesPath - - before( - function () { - initTemplateFixturesPath = path.join(templateFixturesPath, 'init') - } - ) - - it('should init template', - function (done) { - var name = 'init' - var fixture = path.join(initTemplateFixturesPath, name) - var src = 'https://github.com/carrot/sprout-sprout' - var target = path.join(fixture, 'target') - var template = new Template({ sprout: sprout, name: name, src: src }) - return template.save().then( - function (template) { - fs.existsSync(template.path).should.be.true - return template.init(target, { - locals: { - name: 'bar', - description: 'foo', - github_username: 'carrot' - } - }) - } - ).then( - function (template) { - fs.existsSync(target).should.be.true - return template.remove() - } - ).then( - function () { - return rimraf(target, done) - } - ) - } - ) - - it('should throw when no root path', - function (done) { - var name = 'noRoot' - var fixture = path.join(initTemplateFixturesPath, name) - var src = path.join(fixture, 'src') - var target = path.join(fixture, 'target') - var template = new Template({ sprout: sprout, name: name, src: src }) - return gitInit(src).then( - function () { - return template.save() - } - ).then( - function (template) { - fs.existsSync(template.path).should.be.true - return rimraf(template.rootPath) - } - ).then( - function () { - return template.init(target) - } - ).catch( - function (error) { - error.toString().should.eq('Error: root path does not exist in template') - fs.mkdirSync(template.rootPath) - fs.writeFileSync(path.join(template.rootPath, '.keep'), '') - return template.remove().then( - function () { - done() - } - ) - } - ) - } - ) - - it('should throw when no target provided', - function (done) { - var name = 'noRoot' - var src = 'https://github.com/carrot/sprout-sprout' - var template = new Template({ sprout: sprout, name: name, src: src }) - return template.save().then( - function (template) { - fs.existsSync(template.path).should.be.true - return template.init(null) - } - ).catch( - function (error) { - error.toString().should.match(/"target" must be a string/) - return template.remove().then( - function () { - done() - } - ) - } - ) - } - ) - - it('should throw when target exists', - function (done) { - var name = 'targetExists' - var fixture = path.join(initTemplateFixturesPath, name) - var src = 'https://github.com/carrot/sprout-sprout' - var target = path.join(fixture, 'target') - var template = new Template({ sprout: sprout, name: name, src: src }) - return template.save().then( - function () { - fs.existsSync(template.path).should.be.true - return template.init(target) - } - ).catch( - function (error) { - error.toString().should.eq('Error: ' + target + ' already exists') - return template.remove().then( - function () { - done() - } - ) - } - ) - } - ) - - it('should throw when no init.js provided', - function (done) { - var name = 'init' - var fixture = path.join(initTemplateFixturesPath, name) - var src = 'https://github.com/carrot/sprout-sprout' - var target = path.join(fixture, 'target') - var template = new Template({ sprout: sprout, name: name, src: src }) - return template.save().then( - function (template) { - fs.existsSync(template.path).should.be.true - fs.unlinkSync(path.join(template.path, 'init.js')) - return template.init(target) - } - ).catch( - function (error) { - error.toString().should.eq('Error: init.js does not exist in this template') - return template.remove().then( - function () { - rimraf(target, done) - } - ) - } - ) - } - ) - - it('should throw when require init throws', - function (done) { - var name = 'initThrows' - var fixture = path.join(initTemplateFixturesPath, name) - var src = path.join(fixture, 'src') - var target = path.join(fixture, 'target') - var template = new Template({ sprout: sprout, name: name, src: src }) - return gitInit(src).then( - function () { - return template.save() - } - ).then( - function (template) { - fs.existsSync(template.path).should.be.true - return template.init(target) - } - ).catch( - function (error) { - error.toString().should.eq("Error: Cannot find module 'doge'") - return template.remove().then( - function () { - rimraf(target, done) - } - ) - } - ) - } - ) - - it('should use init.js', - function (done) { - var name = 'initJs' - var fixture = path.join(initTemplateFixturesPath, name) - var src = path.join(fixture, 'src') - var target = path.join(fixture, 'target') - var template = new Template({ sprout: sprout, name: name, src: src }) - return gitInit(src).then( - function () { - return template.save() - } - ).then( - function (template) { - fs.existsSync(template.path).should.be.true - return template.init(target) - } - ).then( - function (template) { - fs.readFileSync(path.join(target, 'foo'), 'utf8').should.eq('bar\n') - return template.remove() - } - ).then( - function () { - return rimraf(target, done) - } - ) - } - ) - - it('should use a different git branch if specified', - function (done) { - var name = 'branch' - var fixture = path.join(initTemplateFixturesPath, name) - var sproutPath = path.join((os.tmpdir ? os.tmpdir() : os.tmpDir()), '__sprout__') - var src = path.join((os.tmpdir ? os.tmpdir() : os.tmpDir()), name) - var srcRoot = path.join(src, 'root') - var srcInit = path.join(src, 'init.js') - var target = path.join(fixture, 'target') - var template - return rimraf(sproutPath).then( - function () { - fs.mkdirSync(sproutPath) - return rimraf(src) - } - ).then( - function () { - fs.mkdirSync(src) - fs.writeFileSync(srcInit, 'module.exports={};') - fs.mkdirSync(srcRoot) - fs.writeFileSync(path.join(srcRoot, '.keep'), '') - template = new Template({ sprout: new Sprout(sproutPath), name: name, src: src }) - } - ).then( - function () { - return gitInit(src) - } - ).then( - function () { - return gitCommitAdd(src) - } - ).then( - function () { - return template.save() - } - ) - .then( - function () { - return gitCreateBranch(template.path, name) - } - ).then( - function () { - fs.writeFileSync(path.join(template.rootPath, 'foo'), '', 'utf8') - return gitCommitAdd(template.path) - } - ).then( - function () { - return gitCheckout(template.path, 'master') - } - ).then( - function () { - return template.init(target, {branch: name}) - } - ).then( - function () { - fs.existsSync(path.join(target, 'foo')).should.be.true - return gitCurrentBranch(template.path) - } - ).then( - function (branch) { - branch.should.eq('master\n') - return template.remove() - } - ).then( - function () { - return rimraf(target, done) - } - ) - } - ) - - it('should use a different git tag if specified', - function (done) { - var name = 'tag' - var fixture = path.join(initTemplateFixturesPath, name) - var sproutPath = path.join((os.tmpdir ? os.tmpdir() : os.tmpDir()), '__sprout__') - var src = path.join((os.tmpdir ? os.tmpdir() : os.tmpDir()), name) - var srcRoot = path.join(src, 'root') - var srcInit = path.join(src, 'init.js') - var target = path.join(fixture, 'target') - var template - return rimraf(sproutPath).then( - function () { - fs.mkdirSync(sproutPath) - return rimraf(src) - } - ).then( - function () { - fs.mkdirSync(src) - fs.writeFileSync(srcInit, 'module.exports={};') - fs.mkdirSync(srcRoot) - fs.writeFileSync(path.join(srcRoot, '.keep'), '') - template = new Template({ sprout: new Sprout(sproutPath), name: name, src: src }) - } - ).then( - function () { - return gitInit(src) - } - ).then( - function () { - return gitCommitAdd(src) - } - ).then( - function () { - return template.save() - } - ).then( - function () { - fs.writeFileSync(path.join(template.rootPath, 'foo'), '', 'utf8') - return gitCommitAdd(template.path) - } - ) - .then( - function () { - return gitTag(template.path, name) - } - ).then( - function () { - fs.writeFileSync(path.join(template.rootPath, 'foo2'), '', 'utf8') - return gitCommitAdd(template.path) - } - ).then( - function () { - return gitCheckout(template.path, 'master') - } - ).then( - function () { - return template.init(target, {tag: name}) - } - ).then( - function () { - fs.existsSync(path.join(target, 'foo2')).should.be.false - return gitCurrentBranch(template.path) - } - ).then( - function (branch) { - branch.should.eq('master\n') - return template.remove() - } - ).then( - function () { - return rimraf(target, done) - } - ) - } - ) - - it("should throw error if tag doesn't exist", - function (done) { - var name = 'tagMissing' - var fixture = path.join(initTemplateFixturesPath, name) - var src = 'https://github.com/carrot/sprout-sprout' - var target = path.join(fixture, 'target') - var template = new Template({ sprout: sprout, name: name, src: src }) - return template.save().then( - function (template) { - fs.existsSync(template.path).should.be.true - return template.init(target, {tag: 'foooooooo'}) - } - ).catch( - function (error) { - error.toString().should.match(/Error: Command failed:.*git checkout tags\/foooooooo/) - return template.remove().then( - function () { - return rimraf(target, done) - } - ) - } - ) - } - ) - - it('should use .json configuration file', - function (done) { - var name = 'jsonConfig' - var fixture = path.join(initTemplateFixturesPath, name) - var src = path.join(fixture, 'src') - var target = path.join(fixture, 'target') - var template = new Template({ sprout: sprout, name: name, src: src }) - return gitInit(src).then( - function () { - return template.save() - } - ).then( - function (template) { - fs.existsSync(template.path).should.be.true - return template.init(target, {configPath: path.join(fixture, 'config.json')}) - } - ).then( - function (template) { - fs.readFileSync(path.join(target, 'foo'), 'utf8').should.eq('bar\n') - return template.remove() - } - ).then( - function () { - return rimraf(target, done) - } - ) - } - ) - - it('should use .yaml configuration file', - function (done) { - var name = 'yamlConfig' - var fixture = path.join(initTemplateFixturesPath, name) - var src = path.join(fixture, 'src') - var target = path.join(fixture, 'target') - var template = new Template({ sprout: sprout, name: name, src: src }) - return gitInit(src).then( - function () { - return template.save() - } - ).then( - function (template) { - fs.existsSync(template.path).should.be.true - return template.init(target, {configPath: path.join(fixture, 'config.yaml')}) - } - ).then( - function (template) { - fs.readFileSync(path.join(target, 'foo'), 'utf8').should.eq('bar\n') - return template.remove() - } - ).then( - function () { - return rimraf(target, done) - } - ) - } - ) - - it('it should ignore files specified in init', - function (done) { - var name = 'ignore' - var fixture = path.join(initTemplateFixturesPath, name) - var src = path.join(fixture, 'src') - var target = path.join(fixture, 'target') - var template = new Template({ sprout: sprout, name: name, src: src }) - return gitInit(src).then( - function () { - return template.save() - } - ).then( - function (template) { - fs.existsSync(template.path).should.be.true - return template.init(target) - } - ).then( - function (template) { - fs.readFileSync(path.join(target, 'foo'), 'utf8').should.eq('<%= foo %>\n') - return template.remove() - } - ).then( - function () { - return rimraf(target, done) - } - ) - } - ) - - it('it should ignore one file specified in init', - function (done) { - var name = 'ignoreOne' - var fixture = path.join(initTemplateFixturesPath, name) - var src = path.join(fixture, 'src') - var target = path.join(fixture, 'target') - var template = new Template({ sprout: sprout, name: name, src: src }) - return gitInit(src).then( - function () { - return template.save() - } - ).then( - function (template) { - fs.existsSync(template.path).should.be.true - return template.init(target) - } - ).then( - function (template) { - fs.readFileSync(path.join(target, 'foo'), 'utf8').should.eq('<%= foo %>\n') - return template.remove() - } - ).then( - function () { - return rimraf(target, done) - } - ) - } - ) - - it('should ask questions if questionnaire is passed', - function (done) { - var name = 'questionnaire' - var fixture = path.join(initTemplateFixturesPath, name) - var src = path.join(fixture, 'src') - var target = path.join(fixture, 'target') - var template = new Template({ sprout: sprout, name: name, src: src }) - var q = function () { - return W.resolve({ foo: 'bar' }) - } - return gitInit(src).then( - function () { - return template.save() - } - ).then( - function (template) { - fs.existsSync(template.path).should.be.true - return template.init(target, {questionnaire: q}) - } - ).then( - function (template) { - fs.readFileSync(path.join(target, 'foo'), 'utf8').should.eq('bar\n') - return template.remove() - } - ).then( - function () { - return rimraf(target, done) - } - ) - } - ) - - it('should throw error if configuration file is invalid', - function (done) { - var name = 'invalidConfig' - var fixture = path.join(initTemplateFixturesPath, name) - var src = path.join(fixture, 'src') - var target = path.join(fixture, 'target') - var configPath = path.join(fixture, 'foobar') - var template = new Template({ sprout: sprout, name: name, src: src }) - return gitInit(src).then( - function () { - return template.save() - } - ).then( - function (template) { - fs.existsSync(template.path).should.be.true - return template.init(target, {configPath: configPath}) - } - ).catch( - function (error) { - error.toString().should.match(/Error: ENOENT: no such file or directory/) - return template.remove().then( - function () { - done() - } - ) - } - ) - } - ) - - it('should include underscore.string as EJS "local"', - function (done) { - var name = 'underscoreString' - var fixture = path.join(initTemplateFixturesPath, name) - var src = path.join(fixture, 'src') - var target = path.join(fixture, 'target') - var template = new Template({ sprout: sprout, name: name, src: src }) - return gitInit(src).then( - function () { - return template.save() - } - ).then( - function (template) { - fs.existsSync(template.path).should.be.true - return template.init(target) - } - ).then( - function (template) { - fs.readFileSync(path.join(target, 'foo'), 'utf8').should.eq('Bar\n') - return template.remove() - } - ).then( - function () { - return rimraf(target, done) - } - ) - } - ) - - it('should apply defaults', - function (done) { - var name = 'defaults' - var fixture = path.join(initTemplateFixturesPath, name) - var src = path.join(fixture, 'src') - var target = path.join(fixture, 'target') - var template = new Template({ sprout: sprout, name: name, src: src }) - return gitInit(src).then( - function () { - return template.save() - } - ).then( - function (template) { - fs.existsSync(template.path).should.be.true - return template.init(target) - } - ).then( - function (template) { - fs.readFileSync(path.join(target, 'foo'), 'utf8').should.eq('bar\n') - return template.remove() - } - ).then( - function () { - return rimraf(target, done) - } - ) - } - ) - - it('should apply moment.js as a local', - function (done) { - var name = 'defaultsLocals' - var fixture = path.join(initTemplateFixturesPath, name) - var src = path.join(fixture, 'src') - var target = path.join(fixture, 'target') - var template = new Template({ sprout: sprout, name: name, src: src }) - return gitInit(src).then( - function () { - return template.save() - } - ).then( - function (template) { - fs.existsSync(template.path).should.be.true - return template.init(target) - } - ).then( - function (template) { - fs.readFileSync(path.join(target, 'foo'), 'utf8') - .should.eq('1984\n') - return template.remove() - } - ).then( - function () { - return rimraf(target, done) - } - ) - } - ) - - it('should install npm dependencies', - function (done) { - var name = 'npm' - var fixture = path.join(initTemplateFixturesPath, name) - var src = path.join(fixture, 'src') - var target = path.join(fixture, 'target') - var template = new Template({ sprout: sprout, name: name, src: src }) - return gitInit(src).then( - function () { - return template.save() - } - ).then( - function (template) { - fs.existsSync(template.path).should.be.true - return template.init(target) - } - ).then( - function (template) { - fs.existsSync(path.join(template.path, 'node_modules')).should.be.true - return template.remove() - } - ).then( - function () { - return rimraf(target, done) - } - ) - } - ) - - it('should copy files that are binaries', - function (done) { - var name = 'binary' - var fixture = path.join(initTemplateFixturesPath, name) - var src = path.join(fixture, 'src') - var target = path.join(fixture, 'target') - var template = new Template({ sprout: sprout, name: name, src: src }) - return gitInit(src).then( - function () { - return template.save() - } - ).then( - function (template) { - fs.existsSync(template.path).should.be.true - return template.init(target) - } - ).then( - function (template) { - (fs.readFileSync(path.join(src, 'root', 'logo.png')).length === fs.readFileSync(path.join(target, 'logo.png')).length).should.be.true - return template.remove() - } - ).then( - function () { - return rimraf(target, done) - } - ) - } - ) - - it('should run before hook', - function (done) { - var name = 'before' - var fixture = path.join(initTemplateFixturesPath, name) - var src = path.join(fixture, 'src') - var target = path.join(fixture, 'target') - var template = new Template({ sprout: sprout, name: name, src: src }) - return gitInit(src).then( - function () { - return template.save() - } - ).then( - function (template) { - fs.existsSync(template.path).should.be.true - return template.init(target) - } - ).then( - function (template) { - fs.existsSync(path.join(target, 'bar')).should.be.true - return template.remove() - } - ).then( - function () { - return rimraf(target, done) - } - ) - } - ) - - it('should run beforeRender hook', - function (done) { - var name = 'beforeRender' - var fixture = path.join(initTemplateFixturesPath, name) - var src = path.join(fixture, 'src') - var target = path.join(fixture, 'target') - var template = new Template({ sprout: sprout, name: name, src: src }) - return gitInit(src).then( - function () { - return template.save() - } - ).then( - function (template) { - fs.existsSync(template.path).should.be.true - return template.init(target) - } - ).then( - function (template) { - fs.readFileSync(path.join(target, 'foo'), 'utf8').should.eq('foo\n') - return template.remove() - } - ).then( - function () { - return rimraf(target, done) - } - ) - } - ) - - it('should run after hook', - function (done) { - var name = 'after' - var fixture = path.join(initTemplateFixturesPath, name) - var src = path.join(fixture, 'src') - var target = path.join(fixture, 'target') - var template = new Template({ sprout: sprout, name: name, src: src }) - return gitInit(src).then( - function () { - return template.save() - } - ).then( - function (template) { - fs.existsSync(template.path).should.be.true - return template.init(target) - } - ).then( - function (template) { - fs.existsSync(path.join(target, 'bar')).should.be.true - return template.remove() - } - ).then( - function () { - return rimraf(target, done) - } - ) - } - ) - - it('should remove target directory if error thrown after target directory created', - function (done) { - var name = 'removeTarget' - var fixture = path.join(initTemplateFixturesPath, name) - var src = path.join(fixture, 'src') - var target = path.join(fixture, 'target') - var template = new Template({ sprout: sprout, name: name, src: src }) - return gitInit(src).then( - function () { - return template.save() - } - ).then( - function (template) { - fs.existsSync(template.path).should.be.true - return template.init(target) - } - ).catch( - function () { - fs.existsSync(target).should.be.false - return template.remove().then( - function () { - done() - } - ) - } - ) - } - ) - - it('should work if internet is missing', - function (done) { - mockery.enable({useCleanCache: true, warnOnUnregistered: false}) - mockery.registerMock('dns', { - resolve: function (name, callback) { - return callback(errno.code.ECONNREFUSED) - } - }) - var name = 'noInternet' - var fixture = path.join(initTemplateFixturesPath, name) - var src = path.join(fixture, 'src') - var target = path.join(fixture, 'target') - var template = new Template({ sprout: sprout, name: name, src: src }) - return gitInit(src).then( - function () { - return template.save() - } - ).then( - function (template) { - fs.existsSync(template.path).should.be.true - return template.init(target) - } - ).then( - function (template) { - fs.existsSync(target).should.be.true - return template.remove() - } - ).then( - function () { - mockery.deregisterMock('dns') - mockery.disable() - return rimraf(target, done) - } - ) - } - ) - } - ) - - describe('update', - function () { - it('should update', - function (done) { - var name = 'update' - var src = 'https://github.com/carrot/sprout-sprout' - var template = new Template({ sprout: sprout, name: name, src: src }) - return template.save().then( - function (template) { - fs.existsSync(template.path).should.be.true - return template.update() - } - ).then( - function (template) { - return template.remove() - } - ).then( - function () { - done() - } - ) - } - ) - } - ) - - describe('run', - function () { - var runTemplateFixturesPath - - before( - function () { - runTemplateFixturesPath = path.join(templateFixturesPath, 'run') - } - ) - - it('should run generator', - function (done) { - var name = 'run' - var fixture = path.join(runTemplateFixturesPath, name) - var src = path.join(fixture, 'src') - var target = path.join(fixture, 'target') - var template = new Template({ sprout: sprout, name: name, src: src }) - return gitInit(src).then( - function () { - return template.save() - } - ).then( - function () { - return template.init(target) - } - ).then( - function (template) { - return template.run(target, 'foo') - } - ).then( - function (template) { - fs.readFileSync(path.join(target, 'foo'), 'utf8').should.eq('bar') - return template.remove(name) - } - ).then( - function () { - return rimraf(target, done) - } - ) - } - ) - - it('should throw if no target set', - function (done) { - var name = 'noTarget' - var fixture = path.join(runTemplateFixturesPath, name) - var src = path.join(fixture, 'src') - var target = path.join(fixture, 'target') - var template = new Template({ sprout: sprout, name: name, src: src }) - return gitInit(src).then( - function () { - return template.save() - } - ).then( - function () { - return template.init(target) - } - ).then( - function (template) { - return template.run(null, 'foo') - } - ).catch( - function (error) { - error.toString().should.eq('ValidationError: [sprout generator] option "target" must be a string') - return template.remove(name).then( - function () { - return rimraf(target, done) - } - ) - } - ) - } - ) - - it('should throw if target missing', - function (done) { - var name = 'noTarget' - var fixture = path.join(runTemplateFixturesPath, name) - var src = path.join(fixture, 'src') - var target = path.join(fixture, 'target') - var fakeTarget = path.join(fixture, 'doge/doge/doge/doge/doge') - var template = new Template({ sprout: sprout, name: name, src: src }) - return gitInit(src).then( - function () { - return template.save() - } - ).then( - function () { - return template.init(target) - } - ).then( - function (template) { - return template.run(fakeTarget, 'foo') - } - ).catch( - function (error) { - error.toString().should.eq('Error: ' + fakeTarget + ' does not exist') - return template.remove(name).then( - function () { - return rimraf(target, done) - } - ) - } - ) - } - ) - - it('should throw if no generator name', - function (done) { - var name = 'noGenerator' - var fixture = path.join(runTemplateFixturesPath, name) - var src = path.join(fixture, 'src') - var target = path.join(fixture, 'target') - var template = new Template({ sprout: sprout, name: name, src: src }) - return gitInit(src).then( - function () { - return template.save() - } - ).then( - function () { - return template.init(target) - } - ).then( - function (template) { - return template.run(target, null) - } - ).catch( - function (error) { - error.toString().should.eq('ValidationError: [sprout generator] option "generator" must be a string') - return template.remove(name).then( - function () { - return rimraf(target, done) - } - ) - } - ) - } - ) - - it('should throw if generator missing', - function (done) { - var name = 'generatorMissing' - var fixture = path.join(runTemplateFixturesPath, name) - var src = path.join(fixture, 'src') - var target = path.join(fixture, 'target') - var template = new Template({ sprout: sprout, name: name, src: src }) - return gitInit(src).then( - function () { - return template.save() - } - ).then( - function () { - return template.init(target) - } - ).then( - function (template) { - return template.run(target, 'foo2') - } - ).catch( - function (error) { - error.toString().should.eq('Error: \'foo2\' is not a generator in this template') - return template.remove(name).then( - function () { - return rimraf(target, done) - } - ) - } - ) - } - ) - - it("should run generator if it's a .js file", - function (done) { - var name = 'generatorJs' - var fixture = path.join(runTemplateFixturesPath, name) - var src = path.join(fixture, 'src') - var target = path.join(fixture, 'target') - var template = new Template({ sprout: sprout, name: name, src: src }) - return gitInit(src).then( - function () { - return template.save() - } - ).then( - function () { - return template.init(target) - } - ).then( - function (template) { - return template.run(target, 'foo') - } - ).then( - function (template) { - fs.readFileSync(path.join(target, 'foo'), 'utf8').should.eq('bar') - return template.remove(name) - } - ).then( - function () { - return rimraf(target, done) - } - ) - } - ) - - it('should throw error if require returns error', - function (done) { - var name = 'requireError' - var fixture = path.join(runTemplateFixturesPath, name) - var src = path.join(fixture, 'src') - var target = path.join(fixture, 'target') - var template = new Template({ sprout: sprout, name: name, src: src }) - return gitInit(src).then( - function () { - return template.save() - } - ).then( - function () { - return template.init(target) - } - ).then( - function (template) { - return template.run(target, 'foo') - } - ).catch( - function (error) { - error.toString().should.eq("Error: Cannot find module 'foo'") - return template.remove(name).then( - function () { - return rimraf(target, done) - } - ) - } - ) - } - ) - - it.skip('it should pass arguments', - function (done) { - var name = 'arguments' - var fixture = path.join(runTemplateFixturesPath, name) - var src = path.join(fixture, 'src') - var target = path.join(fixture, 'target') - var template = new Template({ sprout: sprout, name: name, src: src }) - return gitInit(src).then( - function () { - return template.save() - } - ).then( - function () { - return template.init(target) - } - ).then( - function (template) { - return template.run(target, 'foo', ['bar']) - } - ).then( - function (template) { - fs.readFileSync(path.join(target, 'foo'), 'utf8').should.eq('bar') - return template.remove(name) - } - ).then( - function () { - return rimraf(target, done) - } - ) - } - ) - - it('it should not break if undefined is passed as arguments', - function (done) { - var name = 'undefinedArguments' - var fixture = path.join(runTemplateFixturesPath, name) - var src = path.join(fixture, 'src') - var target = path.join(fixture, 'target') - var template = new Template({ sprout: sprout, name: name, src: src }) - return gitInit(src).then( - function () { - return template.save() - } - ).then( - function () { - return template.init(target) - } - ).then( - function (template) { - return template.run(target, 'foo', undefined) - } - ).then( - function (template) { - fs.readFileSync(path.join(target, 'foo'), 'utf8').should.eq('bar') - return template.remove(name) - } - ).then( - function () { - return rimraf(target, done) - } - ) - } - ) - } - ) - - describe('remove', - function () { - it('should remove', - function (done) { - var name = 'remove' - var src = 'https://github.com/carrot/sprout-sprout' - var template = new Template({ sprout: sprout, name: name, src: src }) - return template.save().then( - function () { - return template.remove() - } - ).then( - function (template) { - fs.existsSync(template.path).should.be.false - done() - } - ) - } - ) - } - ) - } -) - -describe('utils', - function () { - var utilsFixturesPath - - before( - function () { - utilsFixturesPath = path.join(fixturesPath, 'utils') - } - ) - - describe('copy', - function () { - var utilsCopyFixturesPath - - before( - function () { - utilsCopyFixturesPath = path.join(utilsFixturesPath, 'copy') - } - ) - - it('should copy from one path relative to the src, to another', - function (done) { - var fixture = path.join(utilsCopyFixturesPath, 'base') - var utils = new Utils(fixture, fixture) - return utils.copy('foo', 'bar').then( - function () { - fs.readFileSync(path.join(fixture, 'bar'), 'utf8').should.eq('bar\n') - fs.unlinkSync(path.join(fixture, 'bar')) - done() - } - ) - } - ) - } - ) - - describe('src', - function () { - var utilsSrcFixturesPath - - before( - function () { - utilsSrcFixturesPath = path.join(utilsFixturesPath, 'src') - } - ) - - it('should read from a path relative to the source path', - function (done) { - var fixture = path.join(utilsSrcFixturesPath, 'read') - var utils = new Utils(fixture, null) - return utils.src.read('foo').then( - function (output) { - output.should.eq('bar\n') - done() - } - ) - } - ) - - it('should return the source path', - function (done) { - var fixture = path.join(utilsSrcFixturesPath, 'path') - var utils = new Utils(fixture, null) - utils.src.path.should.eq(fixture) - done() - } - ) - } - ) - - describe('target', - function () { - var utilsTargetFixturesPath - - before( - function () { - utilsTargetFixturesPath = path.join(utilsFixturesPath, 'target') - } - ) - - it('should return the target path', - function (done) { - var fixture = path.join(utilsTargetFixturesPath, 'path') - var utils = new Utils(fixture, null) - utils.src.path.should.eq(fixture) - done() - } - ) - - it('should copy from one path to another, relative to the target', - function (done) { - var fixture = path.join(utilsTargetFixturesPath, 'copy') - var utils = new Utils(null, fixture) - return utils.target.copy('foo', 'bar').then( - function () { - fs.readFileSync(path.join(fixture, 'bar'), 'utf8').should.eq('bar\n') - fs.unlinkSync(path.join(fixture, 'bar')) - done() - } - ) - } - ) - - it('should read from a path relative to the source path', - function (done) { - var fixture = path.join(utilsTargetFixturesPath, 'read') - var utils = new Utils(null, fixture) - return utils.target.read('foo').then( - function (output) { - output.should.eq('bar\n') - done() - } - ) - } - ) - - it('should write to path relative to the source path', - function (done) { - var fixture = path.join(utilsTargetFixturesPath, 'write') - var utils = new Utils(null, fixture) - return utils.target.write('foo', 'bar').then( - function (output) { - fs.readFileSync(path.join(fixture, 'foo'), 'utf8').should.eq('bar') - fs.unlinkSync(path.join(fixture, 'foo')) - done() - } - ) - } - ) - - it('should write to path relative to the source path and use locals', - function (done) { - var fixture = path.join(utilsTargetFixturesPath, 'writeLocals') - var utils = new Utils(null, fixture) - return utils.target.write('foo', '<%= foo %>', {foo: 'bar'}).then( - function (output) { - fs.readFileSync(path.join(fixture, 'foo'), 'utf8').should.eq('bar') - fs.unlinkSync(path.join(fixture, 'foo')) - done() - } - ) - } - ) - - it('should write to path relative to the source path recursively', - function (done) { - var fixture = path.join(utilsTargetFixturesPath, 'writeRecursive') - var utils = new Utils(null, fixture) - return utils.target.write('nested/deep/foo', 'bar').then( - function (output) { - fs.readFileSync(path.join(fixture, 'nested', 'deep', 'foo'), 'utf8').should.eq('bar') - rimraf(path.join(fixture, 'nested')).then(() => done()) - } - ) - } - ) - - it('should write to path relative to the source path recursively, even if dir exists', - function (done) { - var fixture = path.join(utilsTargetFixturesPath, 'writeRecursiveExists') - var utils = new Utils(null, fixture) - return utils.target.write('nested/deep/foo', 'bar').then( - function (output) { - fs.readFileSync(path.join(fixture, 'nested', 'deep', 'foo'), 'utf8').should.eq('bar') - rimraf(path.join(fixture, 'nested', 'deep')).then(() => done()) - } - ) - } - ) - - it('should rename from one path to another, relative to the target', - function (done) { - var fixture = path.join(utilsTargetFixturesPath, 'rename') - var utils = new Utils(null, fixture) - return utils.target.rename('foo', 'bar').then( - function () { - fs.existsSync(path.join(fixture, 'bar')).should.be.true - fs.renameSync(path.join(fixture, 'bar'), path.join(fixture, 'foo')) - done() - } - ) - } - ) - - it('should remove from a path, relative to the target', - function (done) { - var fixture = path.join(utilsTargetFixturesPath, 'remove') - var utils = new Utils(null, fixture) - return utils.target.remove('foo').then( - function () { - fs.existsSync(path.join(fixture, 'foo')).should.be.false - fs.writeFileSync(path.join(fixture, 'foo'), '', 'utf8') - done() - } - ) - } - ) - - it('should remove an array of paths, relative to the target', - function (done) { - var fixture = path.join(utilsTargetFixturesPath, 'removeArray') - var utils = new Utils(null, fixture) - return utils.target.remove(['foo', 'bar']).then( - function () { - fs.existsSync(path.join(fixture, 'foo')).should.be.false - fs.existsSync(path.join(fixture, 'bar')).should.be.false - fs.writeFileSync(path.join(fixture, 'foo'), '', 'utf8') - fs.writeFileSync(path.join(fixture, 'bar'), '', 'utf8') - done() - } - ) - } - ) - - it('should execute a command with the target as a working directory', - function (done) { - var fixture = path.join(utilsTargetFixturesPath, 'exec') - var utils = new Utils(null, fixture) - return utils.target.exec('rm -rf foo').then( - function () { - fs.existsSync(path.join(fixture, 'foo')).should.be.false - fs.writeFileSync(path.join(fixture, 'foo'), '', 'utf8') - done() - } - ) - } - ) - - it('should execute a command with a path relative to the target as a working directory', - function (done) { - var fixture = path.join(utilsTargetFixturesPath, 'execRelative') - var utils = new Utils(null, fixture) - return utils.target.exec('rm -rf foo', 'bar').then( - function () { - fs.existsSync(path.join(fixture, 'bar', 'foo')).should.be.false - fs.writeFileSync(path.join(fixture, 'bar', 'foo'), '', 'utf8') - done() - } - ) - } - ) - } - ) - } -) - -describe('helpers', - function () { - describe('isGitURL', - function () { - it('should determine is git url', - function (done) { - helpers.isGitUrl('git@github.com:foo/bar').should.be.true - done() - } - ) - - it('should determine is not git url', - function (done) { - helpers.isGitUrl('asdfadsfasdf').should.be.false - done() - } - ) - } - ) - } -) + }) + }) + }) + + describe('src', () => { + let utilsSrcFixturesPath + + before(() => { + utilsSrcFixturesPath = path.join(utilsFixturesPath, 'src') + }) + + it('should read from a path relative to the source path', done => { + const fixture = path.join(utilsSrcFixturesPath, 'read') + const utils = new Utils(fixture, null) + utils.src.read('foo').then(output => { + output.should.eq('bar\n') + done() + }) + }) + + it('should return the source path', done => { + const fixture = path.join(utilsSrcFixturesPath, 'path') + const utils = new Utils(fixture, null) + utils.src.path.should.eq(fixture) + done() + }) + }) + + describe('target', () => { + let utilsTargetFixturesPath + + before(() => { + utilsTargetFixturesPath = path.join(utilsFixturesPath, 'target') + }) + + it('should return the target path', done => { + const fixture = path.join(utilsTargetFixturesPath, 'path') + const utils = new Utils(fixture, null) + utils.src.path.should.eq(fixture) + done() + }) + + it('should copy from one path to another, relative to the target', done => { + const fixture = path.join(utilsTargetFixturesPath, 'copy') + const utils = new Utils(null, fixture) + utils.target.copy('foo', 'bar').then(() => { + fs.readFileSync(path.join(fixture, 'bar'), 'utf8').should.eq('bar\n') + fs.unlinkSync(path.join(fixture, 'bar')) + done() + }) + }) + + it('should read from a path relative to the source path', done => { + const fixture = path.join(utilsTargetFixturesPath, 'read') + const utils = new Utils(null, fixture) + utils.target.read('foo').then(output => { + output.should.eq('bar\n') + done() + }) + }) + + it('should write to path relative to the source path', done => { + const fixture = path.join(utilsTargetFixturesPath, 'write') + const utils = new Utils(null, fixture) + utils.target.write('foo', 'bar').then(() => { + fs.readFileSync(path.join(fixture, 'foo'), 'utf8').should.eq('bar') + fs.unlinkSync(path.join(fixture, 'foo')) + done() + }) + }) + + it('should write to path relative to the source path and use locals', done => { + const fixture = path.join(utilsTargetFixturesPath, 'writeLocals') + const utils = new Utils(null, fixture) + utils.target.write('foo', '<%= foo %>', { foo: 'bar' }).then(() => { + fs.readFileSync(path.join(fixture, 'foo'), 'utf8').should.eq('bar') + fs.unlinkSync(path.join(fixture, 'foo')) + done() + }) + }) + + it('should write to path relative to the source path recursively', done => { + const fixture = path.join(utilsTargetFixturesPath, 'writeRecursive') + const utils = new Utils(null, fixture) + utils.target.write('nested/deep/foo', 'bar').then(() => { + fs + .readFileSync(path.join(fixture, 'nested', 'deep', 'foo'), 'utf8') + .should.eq('bar') + rimraf(path.join(fixture, 'nested')).then(() => done()) + }) + }) + + it('should write to path relative to the source path recursively, even if dir exists', done => { + const fixture = path.join(utilsTargetFixturesPath, 'writeRecursiveExists') + const utils = new Utils(null, fixture) + utils.target.write('nested/deep/foo', 'bar').then(() => { + fs + .readFileSync(path.join(fixture, 'nested', 'deep', 'foo'), 'utf8') + .should.eq('bar') + rimraf(path.join(fixture, 'nested', 'deep')).then(() => done()) + }) + }) + + it('should rename from one path to another, relative to the target', done => { + const fixture = path.join(utilsTargetFixturesPath, 'rename') + const utils = new Utils(null, fixture) + utils.target.rename('foo', 'bar').then(() => { + fs.existsSync(path.join(fixture, 'bar')).should.be.true() + fs.renameSync(path.join(fixture, 'bar'), path.join(fixture, 'foo')) + done() + }) + }) + + it('should remove from a path, relative to the target', done => { + const fixture = path.join(utilsTargetFixturesPath, 'remove') + const utils = new Utils(null, fixture) + utils.target.remove('foo').then(() => { + fs.existsSync(path.join(fixture, 'foo')).should.be.false() + fs.writeFileSync(path.join(fixture, 'foo'), '', 'utf8') + done() + }) + }) + + it('should remove an array of paths, relative to the target', done => { + const fixture = path.join(utilsTargetFixturesPath, 'removeArray') + const utils = new Utils(null, fixture) + utils.target.remove(['foo', 'bar']).then(() => { + fs.existsSync(path.join(fixture, 'foo')).should.be.false() + fs.existsSync(path.join(fixture, 'bar')).should.be.false() + fs.writeFileSync(path.join(fixture, 'foo'), '', 'utf8') + fs.writeFileSync(path.join(fixture, 'bar'), '', 'utf8') + done() + }) + }) + + it('should execute a command with the target as a working directory', done => { + const fixture = path.join(utilsTargetFixturesPath, 'exec') + const utils = new Utils(null, fixture) + utils.target.exec('rm -rf foo').then(() => { + fs.existsSync(path.join(fixture, 'foo')).should.be.false() + fs.writeFileSync(path.join(fixture, 'foo'), '', 'utf8') + done() + }) + }) + + it('should execute a command with a path relative to the target as a working directory', done => { + const fixture = path.join(utilsTargetFixturesPath, 'execRelative') + const utils = new Utils(null, fixture) + utils.target.exec('rm -rf foo', 'bar').then(() => { + fs.existsSync(path.join(fixture, 'bar', 'foo')).should.be.false() + fs.writeFileSync(path.join(fixture, 'bar', 'foo'), '', 'utf8') + done() + }) + }) + }) +}) + +describe('helpers', () => { + describe('isGitURL', () => { + it('should determine is git url', done => { + helpers.isGitUrl('git@github.com:foo/bar').should.be.true() + done() + }) + + it('should determine is not git url', done => { + helpers.isGitUrl('asdfadsfasdf').should.be.false() + done() + }) + }) +}) /* * Helper function for initializing a git repository @@ -2049,9 +1412,7 @@ describe('helpers', * @param {String} dir - directory to create repo in. */ -var gitInit = function (dir) { - return exec('git init .', { cwd: dir }) -} +const gitInit = dir => exec('git init .', { cwd: dir }) /* * Helper function for `git tag` command @@ -2060,9 +1421,7 @@ var gitInit = function (dir) { * @param {String} tag - tag to create. */ -var gitTag = function (dir, tag) { - return exec('git tag ' + tag, { cwd: dir }) -} +const gitTag = (dir, tag) => exec(`git tag ${tag}`, { cwd: dir }) /* * Helper function for creating a new branch @@ -2071,9 +1430,8 @@ var gitTag = function (dir, tag) { * @param {String} branch - branch to checkout. */ -var gitCreateBranch = function (dir, branch) { - return exec('git checkout -b ' + branch, { cwd: dir }) -} +const gitCreateBranch = (dir, branch) => + exec(`git checkout -b ${branch}`, { cwd: dir }) /* * Helper function for `git checkout` command @@ -2082,9 +1440,8 @@ var gitCreateBranch = function (dir, branch) { * @param {String} branch - branch to checkout. */ -var gitCheckout = function (dir, branch) { - return exec('git checkout ' + branch, { cwd: dir }) -} +const gitCheckout = (dir, branch) => + exec(`git checkout ${branch}`, { cwd: dir }) /* * Helper function for committing all added, @@ -2092,9 +1449,8 @@ var gitCheckout = function (dir, branch) { * @param {String} dir - git repo. */ -var gitCommitAdd = function (dir) { - return exec('git add . && git commit -m "sprout test" .', { cwd: dir }) -} +const gitCommitAdd = dir => + exec('git add . && git commit -m "sprout test" .', { cwd: dir }) /* * Helper function for determining the @@ -2102,10 +1458,5 @@ var gitCommitAdd = function (dir) { * @param {String} dir - git repo. */ -var gitCurrentBranch = function (dir) { - return exec('git rev-parse --abbrev-ref HEAD', { cwd: dir }).spread( - function (stdout) { - return stdout - } - ) -} +const gitCurrentBranch = dir => + exec('git rev-parse --abbrev-ref HEAD', { cwd: dir }).spread(stdout => stdout) diff --git a/yarn.lock b/yarn.lock index 5088109..129d37b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -12,14 +12,14 @@ acorn-jsx@^3.0.0: dependencies: acorn "^3.0.4" -acorn@4.0.4: - version "4.0.4" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-4.0.4.tgz#17a8d6a7a6c4ef538b814ec9abac2779293bf30a" - -acorn@^3.0.4, acorn@^3.3.0: +acorn@^3.0.4: version "3.3.0" resolved "https://registry.yarnpkg.com/acorn/-/acorn-3.3.0.tgz#45e37fb39e8da3f25baee3ff5369e2bb5f22017a" +acorn@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.1.1.tgz#53fe161111f912ab999ee887a90a0bc52822fd75" + ajv-keywords@^1.0.0: version "1.5.1" resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-1.5.1.tgz#314dd0a4b3368fad3dfcdc54ede6171b886daf3c" @@ -71,6 +71,13 @@ array-uniq@^1.0.1: version "1.0.3" resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" +array.prototype.find@^2.0.1: + version "2.0.4" + resolved "https://registry.yarnpkg.com/array.prototype.find/-/array.prototype.find-2.0.4.tgz#556a5c5362c08648323ddaeb9de9d14bc1864c90" + dependencies: + define-properties "^1.1.2" + es-abstract "^1.7.0" + arrify@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" @@ -111,7 +118,7 @@ aws4@^1.2.1: version "1.6.0" resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.6.0.tgz#83ef5ca860b2b32e4a0deedee8c771b9db57471e" -babel-code-frame@^6.16.0, babel-code-frame@^6.22.0: +babel-code-frame@^6.16.0: version "6.22.0" resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.22.0.tgz#027620bee567a88c32561574e7fd0801d33118e4" dependencies: @@ -119,163 +126,172 @@ babel-code-frame@^6.16.0, babel-code-frame@^6.22.0: esutils "^2.0.2" js-tokens "^3.0.0" -babel-core@^6.22.0, babel-core@^6.8.0: - version "6.22.1" - resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.22.1.tgz#9c5fd658ba1772d28d721f6d25d968fc7ae21648" +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" dependencies: - babel-code-frame "^6.22.0" - babel-generator "^6.22.0" - babel-helpers "^6.22.0" - babel-messages "^6.22.0" - babel-register "^6.22.0" - babel-runtime "^6.22.0" - babel-template "^6.22.0" - babel-traverse "^6.22.1" - babel-types "^6.22.0" - babylon "^6.11.0" - convert-source-map "^1.1.0" - debug "^2.1.1" - json5 "^0.5.0" - lodash "^4.2.0" - minimatch "^3.0.2" - path-is-absolute "^1.0.0" - private "^0.1.6" + chalk "^1.1.3" + esutils "^2.0.2" + js-tokens "^3.0.2" + +babel-core@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.26.0.tgz#af32f78b31a6fcef119c87b0fd8d9753f03a0bb8" + dependencies: + babel-code-frame "^6.26.0" + babel-generator "^6.26.0" + 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.0" + debug "^2.6.8" + json5 "^0.5.1" + lodash "^4.17.4" + minimatch "^3.0.4" + path-is-absolute "^1.0.1" + private "^0.1.7" slash "^1.0.0" - source-map "^0.5.0" + source-map "^0.5.6" -babel-generator@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.22.0.tgz#d642bf4961911a8adc7c692b0c9297f325cda805" +babel-generator@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.26.0.tgz#ac1ae20070b79f6e3ca1d3269613053774f20dc5" dependencies: - babel-messages "^6.22.0" - babel-runtime "^6.22.0" - babel-types "^6.22.0" + babel-messages "^6.23.0" + babel-runtime "^6.26.0" + babel-types "^6.26.0" detect-indent "^4.0.0" jsesc "^1.3.0" - lodash "^4.2.0" - source-map "^0.5.0" + lodash "^4.17.4" + source-map "^0.5.6" + trim-right "^1.0.1" -babel-helper-bindify-decorators@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-helper-bindify-decorators/-/babel-helper-bindify-decorators-6.22.0.tgz#d7f5bc261275941ac62acfc4e20dacfb8a3fe952" +babel-helper-bindify-decorators@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-bindify-decorators/-/babel-helper-bindify-decorators-6.24.1.tgz#14c19e5f142d7b47f19a52431e52b1ccbc40a330" dependencies: babel-runtime "^6.22.0" - babel-traverse "^6.22.0" - babel-types "^6.22.0" + babel-traverse "^6.24.1" + babel-types "^6.24.1" -babel-helper-builder-binary-assignment-operator-visitor@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.22.0.tgz#29df56be144d81bdeac08262bfa41d2c5e91cdcd" +babel-helper-builder-binary-assignment-operator-visitor@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.24.1.tgz#cce4517ada356f4220bcae8a02c2b346f9a56664" dependencies: - babel-helper-explode-assignable-expression "^6.22.0" + babel-helper-explode-assignable-expression "^6.24.1" babel-runtime "^6.22.0" - babel-types "^6.22.0" + babel-types "^6.24.1" -babel-helper-call-delegate@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-helper-call-delegate/-/babel-helper-call-delegate-6.22.0.tgz#119921b56120f17e9dae3f74b4f5cc7bcc1b37ef" +babel-helper-call-delegate@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz#ece6aacddc76e41c3461f88bfc575bd0daa2df8d" dependencies: - babel-helper-hoist-variables "^6.22.0" + babel-helper-hoist-variables "^6.24.1" babel-runtime "^6.22.0" - babel-traverse "^6.22.0" - babel-types "^6.22.0" + babel-traverse "^6.24.1" + babel-types "^6.24.1" -babel-helper-define-map@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-helper-define-map/-/babel-helper-define-map-6.22.0.tgz#9544e9502b2d6dfe7d00ff60e82bd5a7a89e95b7" +babel-helper-define-map@^6.24.1: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-helper-define-map/-/babel-helper-define-map-6.26.0.tgz#a5f56dab41a25f97ecb498c7ebaca9819f95be5f" dependencies: - babel-helper-function-name "^6.22.0" - babel-runtime "^6.22.0" - babel-types "^6.22.0" - lodash "^4.2.0" + babel-helper-function-name "^6.24.1" + babel-runtime "^6.26.0" + babel-types "^6.26.0" + lodash "^4.17.4" -babel-helper-explode-assignable-expression@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-helper-explode-assignable-expression/-/babel-helper-explode-assignable-expression-6.22.0.tgz#c97bf76eed3e0bae4048121f2b9dae1a4e7d0478" +babel-helper-explode-assignable-expression@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-explode-assignable-expression/-/babel-helper-explode-assignable-expression-6.24.1.tgz#f25b82cf7dc10433c55f70592d5746400ac22caa" dependencies: babel-runtime "^6.22.0" - babel-traverse "^6.22.0" - babel-types "^6.22.0" + babel-traverse "^6.24.1" + babel-types "^6.24.1" -babel-helper-explode-class@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-helper-explode-class/-/babel-helper-explode-class-6.22.0.tgz#646304924aa6388a516843ba7f1855ef8dfeb69b" +babel-helper-explode-class@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-explode-class/-/babel-helper-explode-class-6.24.1.tgz#7dc2a3910dee007056e1e31d640ced3d54eaa9eb" dependencies: - babel-helper-bindify-decorators "^6.22.0" + babel-helper-bindify-decorators "^6.24.1" babel-runtime "^6.22.0" - babel-traverse "^6.22.0" - babel-types "^6.22.0" + babel-traverse "^6.24.1" + babel-types "^6.24.1" -babel-helper-function-name@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-helper-function-name/-/babel-helper-function-name-6.22.0.tgz#51f1bdc4bb89b15f57a9b249f33d742816dcbefc" +babel-helper-function-name@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz#d3475b8c03ed98242a25b48351ab18399d3580a9" dependencies: - babel-helper-get-function-arity "^6.22.0" + babel-helper-get-function-arity "^6.24.1" babel-runtime "^6.22.0" - babel-template "^6.22.0" - babel-traverse "^6.22.0" - babel-types "^6.22.0" + babel-template "^6.24.1" + babel-traverse "^6.24.1" + babel-types "^6.24.1" -babel-helper-get-function-arity@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.22.0.tgz#0beb464ad69dc7347410ac6ade9f03a50634f5ce" +babel-helper-get-function-arity@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz#8f7782aa93407c41d3aa50908f89b031b1b6853d" dependencies: babel-runtime "^6.22.0" - babel-types "^6.22.0" + babel-types "^6.24.1" -babel-helper-hoist-variables@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.22.0.tgz#3eacbf731d80705845dd2e9718f600cfb9b4ba72" +babel-helper-hoist-variables@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz#1ecb27689c9d25513eadbc9914a73f5408be7a76" dependencies: babel-runtime "^6.22.0" - babel-types "^6.22.0" + babel-types "^6.24.1" -babel-helper-optimise-call-expression@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.22.0.tgz#f8d5d4b40a6e2605a6a7f9d537b581bea3756d15" +babel-helper-optimise-call-expression@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz#f7a13427ba9f73f8f4fa993c54a97882d1244257" dependencies: babel-runtime "^6.22.0" - babel-types "^6.22.0" + babel-types "^6.24.1" -babel-helper-regex@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-helper-regex/-/babel-helper-regex-6.22.0.tgz#79f532be1647b1f0ee3474b5f5c3da58001d247d" +babel-helper-regex@^6.24.1: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-helper-regex/-/babel-helper-regex-6.26.0.tgz#325c59f902f82f24b74faceed0363954f6495e72" dependencies: - babel-runtime "^6.22.0" - babel-types "^6.22.0" - lodash "^4.2.0" + babel-runtime "^6.26.0" + babel-types "^6.26.0" + lodash "^4.17.4" -babel-helper-remap-async-to-generator@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.22.0.tgz#2186ae73278ed03b8b15ced089609da981053383" +babel-helper-remap-async-to-generator@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.24.1.tgz#5ec581827ad723fecdd381f1c928390676e4551b" dependencies: - babel-helper-function-name "^6.22.0" + babel-helper-function-name "^6.24.1" babel-runtime "^6.22.0" - babel-template "^6.22.0" - babel-traverse "^6.22.0" - babel-types "^6.22.0" + babel-template "^6.24.1" + babel-traverse "^6.24.1" + babel-types "^6.24.1" -babel-helper-replace-supers@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-helper-replace-supers/-/babel-helper-replace-supers-6.22.0.tgz#1fcee2270657548908c34db16bcc345f9850cf42" +babel-helper-replace-supers@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz#bf6dbfe43938d17369a213ca8a8bf74b6a90ab1a" dependencies: - babel-helper-optimise-call-expression "^6.22.0" - babel-messages "^6.22.0" + babel-helper-optimise-call-expression "^6.24.1" + babel-messages "^6.23.0" babel-runtime "^6.22.0" - babel-template "^6.22.0" - babel-traverse "^6.22.0" - babel-types "^6.22.0" + babel-template "^6.24.1" + babel-traverse "^6.24.1" + babel-types "^6.24.1" -babel-helpers@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-helpers/-/babel-helpers-6.22.0.tgz#d275f55f2252b8101bff07bc0c556deda657392c" +babel-helpers@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helpers/-/babel-helpers-6.24.1.tgz#3471de9caec388e5c850e597e58a26ddf37602b2" dependencies: babel-runtime "^6.22.0" - babel-template "^6.22.0" + babel-template "^6.24.1" -babel-messages@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-messages/-/babel-messages-6.22.0.tgz#36066a214f1217e4ed4164867669ecb39e3ea575" +babel-messages@^6.23.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-messages/-/babel-messages-6.23.0.tgz#f3cdf4703858035b2a2951c6ec5edf6c62f2630e" dependencies: babel-runtime "^6.22.0" @@ -317,40 +333,40 @@ babel-plugin-syntax-trailing-function-commas@^6.22.0: version "6.22.0" resolved "https://registry.yarnpkg.com/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz#ba0360937f8d06e40180a43fe0d5616fff532cf3" -babel-plugin-transform-async-generator-functions@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-async-generator-functions/-/babel-plugin-transform-async-generator-functions-6.22.0.tgz#a720a98153a7596f204099cd5409f4b3c05bab46" +babel-plugin-transform-async-generator-functions@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-async-generator-functions/-/babel-plugin-transform-async-generator-functions-6.24.1.tgz#f058900145fd3e9907a6ddf28da59f215258a5db" dependencies: - babel-helper-remap-async-to-generator "^6.22.0" + babel-helper-remap-async-to-generator "^6.24.1" babel-plugin-syntax-async-generators "^6.5.0" babel-runtime "^6.22.0" -babel-plugin-transform-async-to-generator@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.22.0.tgz#194b6938ec195ad36efc4c33a971acf00d8cd35e" +babel-plugin-transform-async-to-generator@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.24.1.tgz#6536e378aff6cb1d5517ac0e40eb3e9fc8d08761" dependencies: - babel-helper-remap-async-to-generator "^6.22.0" + babel-helper-remap-async-to-generator "^6.24.1" babel-plugin-syntax-async-functions "^6.8.0" babel-runtime "^6.22.0" -babel-plugin-transform-class-properties@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-class-properties/-/babel-plugin-transform-class-properties-6.22.0.tgz#aa78f8134495c7de06c097118ba061844e1dc1d8" +babel-plugin-transform-class-properties@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-class-properties/-/babel-plugin-transform-class-properties-6.24.1.tgz#6a79763ea61d33d36f37b611aa9def81a81b46ac" dependencies: - babel-helper-function-name "^6.22.0" + babel-helper-function-name "^6.24.1" babel-plugin-syntax-class-properties "^6.8.0" babel-runtime "^6.22.0" - babel-template "^6.22.0" + babel-template "^6.24.1" -babel-plugin-transform-decorators@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-decorators/-/babel-plugin-transform-decorators-6.22.0.tgz#c03635b27a23b23b7224f49232c237a73988d27c" +babel-plugin-transform-decorators@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-decorators/-/babel-plugin-transform-decorators-6.24.1.tgz#788013d8f8c6b5222bdf7b344390dfd77569e24d" dependencies: - babel-helper-explode-class "^6.22.0" + babel-helper-explode-class "^6.24.1" babel-plugin-syntax-decorators "^6.13.0" babel-runtime "^6.22.0" - babel-template "^6.22.0" - babel-types "^6.22.0" + babel-template "^6.24.1" + babel-types "^6.24.1" babel-plugin-transform-es2015-arrow-functions@^6.22.0: version "6.22.0" @@ -364,36 +380,36 @@ babel-plugin-transform-es2015-block-scoped-functions@^6.22.0: dependencies: babel-runtime "^6.22.0" -babel-plugin-transform-es2015-block-scoping@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.22.0.tgz#00d6e3a0bebdcfe7536b9d653b44a9141e63e47e" - dependencies: - babel-runtime "^6.22.0" - babel-template "^6.22.0" - babel-traverse "^6.22.0" - babel-types "^6.22.0" - lodash "^4.2.0" - -babel-plugin-transform-es2015-classes@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.22.0.tgz#54d44998fd823d9dca15292324161c331c1b6f14" - dependencies: - babel-helper-define-map "^6.22.0" - babel-helper-function-name "^6.22.0" - babel-helper-optimise-call-expression "^6.22.0" - babel-helper-replace-supers "^6.22.0" - babel-messages "^6.22.0" +babel-plugin-transform-es2015-block-scoping@^6.24.1: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz#d70f5299c1308d05c12f463813b0a09e73b1895f" + dependencies: + babel-runtime "^6.26.0" + babel-template "^6.26.0" + babel-traverse "^6.26.0" + babel-types "^6.26.0" + lodash "^4.17.4" + +babel-plugin-transform-es2015-classes@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz#5a4c58a50c9c9461e564b4b2a3bfabc97a2584db" + dependencies: + babel-helper-define-map "^6.24.1" + babel-helper-function-name "^6.24.1" + babel-helper-optimise-call-expression "^6.24.1" + babel-helper-replace-supers "^6.24.1" + babel-messages "^6.23.0" babel-runtime "^6.22.0" - babel-template "^6.22.0" - babel-traverse "^6.22.0" - babel-types "^6.22.0" + babel-template "^6.24.1" + babel-traverse "^6.24.1" + babel-types "^6.24.1" -babel-plugin-transform-es2015-computed-properties@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.22.0.tgz#7c383e9629bba4820c11b0425bdd6290f7f057e7" +babel-plugin-transform-es2015-computed-properties@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz#6fe2a8d16895d5634f4cd999b6d3480a308159b3" dependencies: babel-runtime "^6.22.0" - babel-template "^6.22.0" + babel-template "^6.24.1" babel-plugin-transform-es2015-destructuring@^6.22.0: version "6.22.0" @@ -401,12 +417,12 @@ babel-plugin-transform-es2015-destructuring@^6.22.0: dependencies: babel-runtime "^6.22.0" -babel-plugin-transform-es2015-duplicate-keys@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.22.0.tgz#672397031c21610d72dd2bbb0ba9fb6277e1c36b" +babel-plugin-transform-es2015-duplicate-keys@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz#73eb3d310ca969e3ef9ec91c53741a6f1576423e" dependencies: babel-runtime "^6.22.0" - babel-types "^6.22.0" + babel-types "^6.24.1" babel-plugin-transform-es2015-for-of@^6.22.0: version "6.22.0" @@ -414,13 +430,13 @@ babel-plugin-transform-es2015-for-of@^6.22.0: dependencies: babel-runtime "^6.22.0" -babel-plugin-transform-es2015-function-name@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.22.0.tgz#f5fcc8b09093f9a23c76ac3d9e392c3ec4b77104" +babel-plugin-transform-es2015-function-name@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz#834c89853bc36b1af0f3a4c5dbaa94fd8eacaa8b" dependencies: - babel-helper-function-name "^6.22.0" + babel-helper-function-name "^6.24.1" babel-runtime "^6.22.0" - babel-types "^6.22.0" + babel-types "^6.24.1" babel-plugin-transform-es2015-literals@^6.22.0: version "6.22.0" @@ -428,63 +444,63 @@ babel-plugin-transform-es2015-literals@^6.22.0: dependencies: babel-runtime "^6.22.0" -babel-plugin-transform-es2015-modules-amd@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.22.0.tgz#bf69cd34889a41c33d90dfb740e0091ccff52f21" +babel-plugin-transform-es2015-modules-amd@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz#3b3e54017239842d6d19c3011c4bd2f00a00d154" dependencies: - babel-plugin-transform-es2015-modules-commonjs "^6.22.0" + babel-plugin-transform-es2015-modules-commonjs "^6.24.1" babel-runtime "^6.22.0" - babel-template "^6.22.0" + babel-template "^6.24.1" -babel-plugin-transform-es2015-modules-commonjs@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.22.0.tgz#6ca04e22b8e214fb50169730657e7a07dc941145" +babel-plugin-transform-es2015-modules-commonjs@^6.24.1: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.0.tgz#0d8394029b7dc6abe1a97ef181e00758dd2e5d8a" dependencies: - babel-plugin-transform-strict-mode "^6.22.0" - babel-runtime "^6.22.0" - babel-template "^6.22.0" - babel-types "^6.22.0" + babel-plugin-transform-strict-mode "^6.24.1" + babel-runtime "^6.26.0" + babel-template "^6.26.0" + babel-types "^6.26.0" -babel-plugin-transform-es2015-modules-systemjs@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.22.0.tgz#810cd0cd025a08383b84236b92c6e31f88e644ad" +babel-plugin-transform-es2015-modules-systemjs@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz#ff89a142b9119a906195f5f106ecf305d9407d23" dependencies: - babel-helper-hoist-variables "^6.22.0" + babel-helper-hoist-variables "^6.24.1" babel-runtime "^6.22.0" - babel-template "^6.22.0" + babel-template "^6.24.1" -babel-plugin-transform-es2015-modules-umd@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.22.0.tgz#60d0ba3bd23258719c64391d9bf492d648dc0fae" +babel-plugin-transform-es2015-modules-umd@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz#ac997e6285cd18ed6176adb607d602344ad38468" dependencies: - babel-plugin-transform-es2015-modules-amd "^6.22.0" + babel-plugin-transform-es2015-modules-amd "^6.24.1" babel-runtime "^6.22.0" - babel-template "^6.22.0" + babel-template "^6.24.1" -babel-plugin-transform-es2015-object-super@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.22.0.tgz#daa60e114a042ea769dd53fe528fc82311eb98fc" +babel-plugin-transform-es2015-object-super@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz#24cef69ae21cb83a7f8603dad021f572eb278f8d" dependencies: - babel-helper-replace-supers "^6.22.0" + babel-helper-replace-supers "^6.24.1" babel-runtime "^6.22.0" -babel-plugin-transform-es2015-parameters@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.22.0.tgz#57076069232019094f27da8c68bb7162fe208dbb" +babel-plugin-transform-es2015-parameters@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz#57ac351ab49caf14a97cd13b09f66fdf0a625f2b" dependencies: - babel-helper-call-delegate "^6.22.0" - babel-helper-get-function-arity "^6.22.0" + babel-helper-call-delegate "^6.24.1" + babel-helper-get-function-arity "^6.24.1" babel-runtime "^6.22.0" - babel-template "^6.22.0" - babel-traverse "^6.22.0" - babel-types "^6.22.0" + babel-template "^6.24.1" + babel-traverse "^6.24.1" + babel-types "^6.24.1" -babel-plugin-transform-es2015-shorthand-properties@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.22.0.tgz#8ba776e0affaa60bff21e921403b8a652a2ff723" +babel-plugin-transform-es2015-shorthand-properties@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz#24f875d6721c87661bbd99a4622e51f14de38aa0" dependencies: babel-runtime "^6.22.0" - babel-types "^6.22.0" + babel-types "^6.24.1" babel-plugin-transform-es2015-spread@^6.22.0: version "6.22.0" @@ -492,13 +508,13 @@ babel-plugin-transform-es2015-spread@^6.22.0: dependencies: babel-runtime "^6.22.0" -babel-plugin-transform-es2015-sticky-regex@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.22.0.tgz#ab316829e866ee3f4b9eb96939757d19a5bc4593" +babel-plugin-transform-es2015-sticky-regex@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz#00c1cdb1aca71112cdf0cf6126c2ed6b457ccdbc" dependencies: - babel-helper-regex "^6.22.0" + babel-helper-regex "^6.24.1" babel-runtime "^6.22.0" - babel-types "^6.22.0" + babel-types "^6.24.1" babel-plugin-transform-es2015-template-literals@^6.22.0: version "6.22.0" @@ -512,19 +528,19 @@ babel-plugin-transform-es2015-typeof-symbol@^6.22.0: dependencies: babel-runtime "^6.22.0" -babel-plugin-transform-es2015-unicode-regex@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.22.0.tgz#8d9cc27e7ee1decfe65454fb986452a04a613d20" +babel-plugin-transform-es2015-unicode-regex@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz#d38b12f42ea7323f729387f18a7c5ae1faeb35e9" dependencies: - babel-helper-regex "^6.22.0" + babel-helper-regex "^6.24.1" babel-runtime "^6.22.0" regexpu-core "^2.0.0" -babel-plugin-transform-exponentiation-operator@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-exponentiation-operator/-/babel-plugin-transform-exponentiation-operator-6.22.0.tgz#d57c8335281918e54ef053118ce6eb108468084d" +babel-plugin-transform-exponentiation-operator@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-exponentiation-operator/-/babel-plugin-transform-exponentiation-operator-6.24.1.tgz#2ab0c9c7f3098fa48907772bb813fe41e8de3a0e" dependencies: - babel-helper-builder-binary-assignment-operator-visitor "^6.22.0" + babel-helper-builder-binary-assignment-operator-visitor "^6.24.1" babel-plugin-syntax-exponentiation-operator "^6.8.0" babel-runtime "^6.22.0" @@ -535,78 +551,78 @@ babel-plugin-transform-object-rest-spread@^6.22.0: babel-plugin-syntax-object-rest-spread "^6.8.0" babel-runtime "^6.22.0" -babel-plugin-transform-regenerator@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.22.0.tgz#65740593a319c44522157538d690b84094617ea6" +babel-plugin-transform-regenerator@^6.24.1: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz#e0703696fbde27f0a3efcacf8b4dca2f7b3a8f2f" dependencies: - regenerator-transform "0.9.8" + regenerator-transform "^0.10.0" -babel-plugin-transform-strict-mode@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.22.0.tgz#e008df01340fdc87e959da65991b7e05970c8c7c" +babel-plugin-transform-strict-mode@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz#d5faf7aa578a65bbe591cf5edae04a0c67020758" dependencies: babel-runtime "^6.22.0" - babel-types "^6.22.0" + babel-types "^6.24.1" -babel-preset-es2015@^6.6.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-preset-es2015/-/babel-preset-es2015-6.22.0.tgz#af5a98ecb35eb8af764ad8a5a05eb36dc4386835" +babel-preset-es2015@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-preset-es2015/-/babel-preset-es2015-6.24.1.tgz#d44050d6bc2c9feea702aaf38d727a0210538939" dependencies: babel-plugin-check-es2015-constants "^6.22.0" babel-plugin-transform-es2015-arrow-functions "^6.22.0" babel-plugin-transform-es2015-block-scoped-functions "^6.22.0" - babel-plugin-transform-es2015-block-scoping "^6.22.0" - babel-plugin-transform-es2015-classes "^6.22.0" - babel-plugin-transform-es2015-computed-properties "^6.22.0" + babel-plugin-transform-es2015-block-scoping "^6.24.1" + babel-plugin-transform-es2015-classes "^6.24.1" + babel-plugin-transform-es2015-computed-properties "^6.24.1" babel-plugin-transform-es2015-destructuring "^6.22.0" - babel-plugin-transform-es2015-duplicate-keys "^6.22.0" + babel-plugin-transform-es2015-duplicate-keys "^6.24.1" babel-plugin-transform-es2015-for-of "^6.22.0" - babel-plugin-transform-es2015-function-name "^6.22.0" + babel-plugin-transform-es2015-function-name "^6.24.1" babel-plugin-transform-es2015-literals "^6.22.0" - babel-plugin-transform-es2015-modules-amd "^6.22.0" - babel-plugin-transform-es2015-modules-commonjs "^6.22.0" - babel-plugin-transform-es2015-modules-systemjs "^6.22.0" - babel-plugin-transform-es2015-modules-umd "^6.22.0" - babel-plugin-transform-es2015-object-super "^6.22.0" - babel-plugin-transform-es2015-parameters "^6.22.0" - babel-plugin-transform-es2015-shorthand-properties "^6.22.0" + babel-plugin-transform-es2015-modules-amd "^6.24.1" + babel-plugin-transform-es2015-modules-commonjs "^6.24.1" + babel-plugin-transform-es2015-modules-systemjs "^6.24.1" + babel-plugin-transform-es2015-modules-umd "^6.24.1" + babel-plugin-transform-es2015-object-super "^6.24.1" + babel-plugin-transform-es2015-parameters "^6.24.1" + babel-plugin-transform-es2015-shorthand-properties "^6.24.1" babel-plugin-transform-es2015-spread "^6.22.0" - babel-plugin-transform-es2015-sticky-regex "^6.22.0" + babel-plugin-transform-es2015-sticky-regex "^6.24.1" babel-plugin-transform-es2015-template-literals "^6.22.0" babel-plugin-transform-es2015-typeof-symbol "^6.22.0" - babel-plugin-transform-es2015-unicode-regex "^6.22.0" - babel-plugin-transform-regenerator "^6.22.0" + babel-plugin-transform-es2015-unicode-regex "^6.24.1" + babel-plugin-transform-regenerator "^6.24.1" -babel-preset-stage-2@^6.5.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-preset-stage-2/-/babel-preset-stage-2-6.22.0.tgz#ccd565f19c245cade394b21216df704a73b27c07" +babel-preset-stage-2@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-preset-stage-2/-/babel-preset-stage-2-6.24.1.tgz#d9e2960fb3d71187f0e64eec62bc07767219bdc1" dependencies: babel-plugin-syntax-dynamic-import "^6.18.0" - babel-plugin-transform-class-properties "^6.22.0" - babel-plugin-transform-decorators "^6.22.0" - babel-preset-stage-3 "^6.22.0" + babel-plugin-transform-class-properties "^6.24.1" + babel-plugin-transform-decorators "^6.24.1" + babel-preset-stage-3 "^6.24.1" -babel-preset-stage-3@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-preset-stage-3/-/babel-preset-stage-3-6.22.0.tgz#a4e92bbace7456fafdf651d7a7657ee0bbca9c2e" +babel-preset-stage-3@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-preset-stage-3/-/babel-preset-stage-3-6.24.1.tgz#836ada0a9e7a7fa37cb138fb9326f87934a48395" dependencies: babel-plugin-syntax-trailing-function-commas "^6.22.0" - babel-plugin-transform-async-generator-functions "^6.22.0" - babel-plugin-transform-async-to-generator "^6.22.0" - babel-plugin-transform-exponentiation-operator "^6.22.0" + babel-plugin-transform-async-generator-functions "^6.24.1" + babel-plugin-transform-async-to-generator "^6.24.1" + babel-plugin-transform-exponentiation-operator "^6.24.1" babel-plugin-transform-object-rest-spread "^6.22.0" -babel-register@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-register/-/babel-register-6.22.0.tgz#a61dd83975f9ca4a9e7d6eff3059494cd5ea4c63" +babel-register@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-register/-/babel-register-6.26.0.tgz#6ed021173e2fcb486d7acb45c6009a856f647071" dependencies: - babel-core "^6.22.0" - babel-runtime "^6.22.0" - core-js "^2.4.0" + babel-core "^6.26.0" + babel-runtime "^6.26.0" + core-js "^2.5.0" home-or-tmp "^2.0.0" - lodash "^4.2.0" + lodash "^4.17.4" mkdirp "^0.5.1" - source-map-support "^0.4.2" + source-map-support "^0.4.15" babel-runtime@^6.18.0, babel-runtime@^6.22.0: version "6.22.0" @@ -615,31 +631,38 @@ babel-runtime@^6.18.0, babel-runtime@^6.22.0: core-js "^2.4.0" regenerator-runtime "^0.10.0" -babel-template@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.22.0.tgz#403d110905a4626b317a2a1fcb8f3b73204b2edb" +babel-runtime@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe" dependencies: - babel-runtime "^6.22.0" - babel-traverse "^6.22.0" - babel-types "^6.22.0" - babylon "^6.11.0" - lodash "^4.2.0" - -babel-traverse@^6.22.0, babel-traverse@^6.22.1: - version "6.22.1" - resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.22.1.tgz#3b95cd6b7427d6f1f757704908f2fc9748a5f59f" - dependencies: - babel-code-frame "^6.22.0" - babel-messages "^6.22.0" - babel-runtime "^6.22.0" - babel-types "^6.22.0" - babylon "^6.15.0" - debug "^2.2.0" - globals "^9.0.0" - invariant "^2.2.0" - lodash "^4.2.0" - -babel-types@^6.19.0, babel-types@^6.22.0: + core-js "^2.4.0" + regenerator-runtime "^0.11.0" + +babel-template@^6.24.1, babel-template@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.26.0.tgz#de03e2d16396b069f46dd9fff8521fb1a0e35e02" + dependencies: + babel-runtime "^6.26.0" + babel-traverse "^6.26.0" + babel-types "^6.26.0" + babylon "^6.18.0" + lodash "^4.17.4" + +babel-traverse@^6.24.1, babel-traverse@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.26.0.tgz#46a9cbd7edcc62c8e5c064e2d2d8d0f4035766ee" + dependencies: + babel-code-frame "^6.26.0" + babel-messages "^6.23.0" + babel-runtime "^6.26.0" + babel-types "^6.26.0" + babylon "^6.18.0" + debug "^2.6.8" + globals "^9.18.0" + invariant "^2.2.2" + lodash "^4.17.4" + +babel-types@^6.19.0: version "6.22.0" resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.22.0.tgz#2a447e8d0ea25d2512409e4175479fd78cc8b1db" dependencies: @@ -648,23 +671,40 @@ babel-types@^6.19.0, babel-types@^6.22.0: lodash "^4.2.0" to-fast-properties "^1.0.1" -babylon@^6.11.0, babylon@^6.15.0: - version "6.15.0" - resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.15.0.tgz#ba65cfa1a80e1759b0e89fb562e27dccae70348e" +babel-types@^6.24.1, babel-types@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.26.0.tgz#a3b073f94ab49eb6fa55cd65227a334380632497" + dependencies: + babel-runtime "^6.26.0" + esutils "^2.0.2" + lodash "^4.17.4" + to-fast-properties "^1.0.3" + +babylon@^6.18.0: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3" + +babylon@~7.0.0-beta.19: + version "7.0.0-beta.20" + resolved "https://registry.yarnpkg.com/babylon/-/babylon-7.0.0-beta.20.tgz#7dbc70cc88de13334066fe5200e0efaa30c0490e" balanced-match@^0.4.1: version "0.4.2" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-0.4.2.tgz#cb3f3e3c732dc0f01ee70b403f302e61d7709838" +balanced-match@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" + bcrypt-pbkdf@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz#63bc5dcb61331b92bc05fd528953c33462a06f8d" dependencies: tweetnacl "^0.14.3" -bluebird@~3.4.6: - version "3.4.7" - resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.4.7.tgz#f72d760be09b7f76d08ed8fae98b289a8d05fab3" +bluebird@~3.5.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.0.tgz#791420d7f551eea2897453a8a77653f96606d67c" boom@2.x.x: version "2.10.1" @@ -679,10 +719,25 @@ brace-expansion@^1.0.0: balanced-match "^0.4.1" concat-map "0.0.1" +brace-expansion@^1.1.7: + version "1.1.8" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.8.tgz#c07b211c7c952ec1f8efd51a77ef0d1d3990a292" + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +browser-stdout@1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.0.tgz#f351d32969d32fa5d7a5567154263d928ae3bd1f" + buffer-shims@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/buffer-shims/-/buffer-shims-1.0.0.tgz#9978ce317388c649ad8793028c3477ef044a8b51" +builtin-modules@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" + caller-path@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-0.1.0.tgz#94085ef63581ecd3daa92444a8fe94e82577751f" @@ -701,9 +756,9 @@ caseless@~0.11.0: version "0.11.0" resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.11.0.tgz#715b96ea9841593cc33067923f5ec60ebda4f7d7" -catharsis@~0.8.8: - version "0.8.8" - resolved "https://registry.yarnpkg.com/catharsis/-/catharsis-0.8.8.tgz#693479f43aac549d806bd73e924cd0d944951a06" +catharsis@~0.8.9: + version "0.8.9" + resolved "https://registry.yarnpkg.com/catharsis/-/catharsis-0.8.9.tgz#98cc890ca652dd2ef0e70b37925310ff9e90fc8b" dependencies: underscore-contrib "~0.3.0" @@ -714,13 +769,22 @@ center-align@^0.1.1: align-text "^0.1.3" lazy-cache "^1.0.3" -chai@^3.0.0: - version "3.5.0" - resolved "https://registry.yarnpkg.com/chai/-/chai-3.5.0.tgz#4d02637b067fe958bdbfdd3a40ec56fef7373247" +chai-as-promised@^7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/chai-as-promised/-/chai-as-promised-7.1.1.tgz#08645d825deb8696ee61725dbf590c012eb00ca0" + dependencies: + check-error "^1.0.2" + +chai@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/chai/-/chai-4.1.1.tgz#66e21279e6f3c6415ff8231878227900e2171b39" dependencies: assertion-error "^1.0.1" - deep-eql "^0.1.3" - type-detect "^1.0.0" + check-error "^1.0.1" + deep-eql "^2.0.1" + get-func-name "^2.0.0" + pathval "^1.0.0" + type-detect "^4.0.0" chalk@^1.0.0, chalk@^1.1.0, chalk@^1.1.1, chalk@^1.1.3: version "1.1.3" @@ -732,6 +796,10 @@ chalk@^1.0.0, chalk@^1.1.0, chalk@^1.1.1, chalk@^1.1.3: strip-ansi "^3.0.0" supports-color "^2.0.0" +check-error@^1.0.1, check-error@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/check-error/-/check-error-1.0.2.tgz#574d312edd88bb5dd8912e9286dd6c0aed4aac82" + circular-json@^0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/circular-json/-/circular-json-0.3.1.tgz#be8b36aefccde8b3ca7aa2d6afc07a37242c0d2d" @@ -768,15 +836,7 @@ combined-stream@^1.0.5, combined-stream@~1.0.5: dependencies: delayed-stream "~1.0.0" -commander@0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/commander/-/commander-0.6.1.tgz#fa68a14f6a945d54dbbe50d8cdb3320e9e3b1a06" - -commander@2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.3.0.tgz#fd430e889832ec353b9acd1de217c11cb3eef873" - -commander@^2.9.0: +commander@2.9.0, commander@^2.9.0: version "2.9.0" resolved "https://registry.yarnpkg.com/commander/-/commander-2.9.0.tgz#9c99094176e12240cb22d6c5146098400fe0f7d4" dependencies: @@ -786,7 +846,7 @@ concat-map@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" -concat-stream@^1.4.6, concat-stream@^1.5.0: +concat-stream@^1.5.0, concat-stream@^1.5.2: version "1.6.0" resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.0.tgz#0aac662fd52be78964d5532f694784e70110acf7" dependencies: @@ -794,21 +854,29 @@ concat-stream@^1.4.6, concat-stream@^1.5.0: readable-stream "^2.2.2" typedarray "^0.0.6" -convert-source-map@^1.1.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.3.0.tgz#e9f3e9c6e2728efc2676696a70eb382f73106a67" +contains-path@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/contains-path/-/contains-path-0.1.0.tgz#fe8cf184ff6670b6baef01a9d4861a5cbec4120a" + +convert-source-map@^1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.5.0.tgz#9acd70851c6d5dfdd93d9282e5edf94a03ff46b5" core-js@^2.4.0: version "2.4.1" resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.4.1.tgz#4de911e667b0eae9124e34254b53aea6fc618d3e" +core-js@^2.5.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.5.0.tgz#569c050918be6486b3837552028ae0466b717086" + core-util-is@~1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" -coveralls@^2.11.2: - version "2.11.16" - resolved "https://registry.yarnpkg.com/coveralls/-/coveralls-2.11.16.tgz#da9061265142ddee954f68379122be97be8ab4b1" +coveralls@^2.13.1: + version "2.13.1" + resolved "https://registry.yarnpkg.com/coveralls/-/coveralls-2.13.1.tgz#d70bb9acc1835ec4f063ff9dac5423c17b11f178" dependencies: js-yaml "3.6.1" lcov-parse "0.0.10" @@ -838,7 +906,13 @@ debug-log@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/debug-log/-/debug-log-1.0.1.tgz#2307632d4c04382b8df8a32f70b895046d52745f" -debug@2.2.0, debug@^2.1.1, debug@^2.2.0: +debug@2.6.8, debug@^2.6.8: + version "2.6.8" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.8.tgz#e731531ca2ede27d188222427da17821d68ff4fc" + dependencies: + ms "2.0.0" + +debug@^2.1.1, debug@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/debug/-/debug-2.2.0.tgz#f87057e995b1a1f6ae6a4960664137bc56f039da" dependencies: @@ -848,17 +922,24 @@ decamelize@^1.0.0: version "1.2.0" resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" -deep-eql@^0.1.3: - version "0.1.3" - resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-0.1.3.tgz#ef558acab8de25206cd713906d74e56930eb69f2" +deep-eql@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-2.0.2.tgz#b1bac06e56f0a76777686d50c9feb75c2ed7679a" dependencies: - type-detect "0.1.1" + type-detect "^3.0.0" deep-is@~0.1.3: version "0.1.3" resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" -deglob@^2.0.0: +define-properties@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.2.tgz#83a73f2fea569898fb737193c8f873caf6d45c94" + dependencies: + foreach "^2.0.5" + object-keys "^1.0.8" + +deglob@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/deglob/-/deglob-2.1.0.tgz#4d44abe16ef32c779b4972bd141a80325029a14a" dependencies: @@ -891,26 +972,37 @@ detect-indent@^4.0.0: dependencies: repeating "^2.0.0" -diff@1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/diff/-/diff-1.4.0.tgz#7f28d2eb9ee7b15a97efd89ce63dcfdaa3ccbabf" +diff@3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/diff/-/diff-3.2.0.tgz#c9ce393a4b7cbd0b058a725c93df299027868ff9" -doctrine@^1.2.2: +dirty-chai@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/dirty-chai/-/dirty-chai-2.0.1.tgz#6b2162ef17f7943589da840abc96e75bda01aff3" + +doctrine@1.5.0, doctrine@^1.2.2: version "1.5.0" resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-1.5.0.tgz#379dce730f6166f76cefa4e6707a159b02c5a6fa" dependencies: esutils "^2.0.2" isarray "^1.0.0" +doctrine@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.0.0.tgz#c73d8d2909d22291e1a007a395804da8b665fe63" + dependencies: + esutils "^2.0.2" + isarray "^1.0.0" + ecc-jsbn@~0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz#0fc73a9ed5f0d53c38193398523ef7e543777505" dependencies: jsbn "~0.1.0" -ejs@^2.3.1: - version "2.5.5" - resolved "https://registry.yarnpkg.com/ejs/-/ejs-2.5.5.tgz#6ef4e954ea7dcf54f66aad2fe7aa421932d9ed77" +ejs@^2.5.7: + version "2.5.7" + resolved "https://registry.yarnpkg.com/ejs/-/ejs-2.5.7.tgz#cc872c168880ae3c7189762fd5ffc00896c9518a" errno@^0.1.2: version "0.1.4" @@ -918,6 +1010,30 @@ errno@^0.1.2: dependencies: prr "~0.0.0" +error-ex@^1.2.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.1.tgz#f855a86ce61adc4e8621c3cda21e7a7612c3a8dc" + dependencies: + is-arrayish "^0.2.1" + +es-abstract@^1.7.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.8.0.tgz#3b00385e85729932beffa9163bbea1234e932914" + dependencies: + es-to-primitive "^1.1.1" + function-bind "^1.1.0" + has "^1.0.1" + is-callable "^1.1.3" + is-regex "^1.0.4" + +es-to-primitive@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.1.1.tgz#45355248a88979034b6792e19bb81f2b7975dd0d" + dependencies: + is-callable "^1.1.1" + is-date-object "^1.0.1" + is-symbol "^1.0.1" + es5-ext@^0.10.7, es5-ext@^0.10.8, es5-ext@~0.10.11, es5-ext@~0.10.2, es5-ext@~0.10.7: version "0.10.12" resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.12.tgz#aa84641d4db76b62abba5e45fd805ecbab140047" @@ -970,11 +1086,7 @@ es6-weak-map@^2.0.1: es6-iterator "2" es6-symbol "3" -escape-string-regexp@1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.2.tgz#4dbc2fe674e71949caf3fb2695ce7f2dc1d9a8d1" - -escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5, escape-string-regexp@~1.0.5: +escape-string-regexp@1.0.5, escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5, 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" @@ -998,45 +1110,89 @@ escope@^3.6.0: esrecurse "^4.1.0" estraverse "^4.1.1" -eslint-config-standard-jsx@3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/eslint-config-standard-jsx/-/eslint-config-standard-jsx-3.2.0.tgz#c240e26ed919a11a42aa4de8059472b38268d620" +eslint-config-standard-jsx@4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/eslint-config-standard-jsx/-/eslint-config-standard-jsx-4.0.2.tgz#009e53c4ddb1e9ee70b4650ffe63a7f39f8836e1" + +eslint-config-standard@10.2.1: + version "10.2.1" + resolved "https://registry.yarnpkg.com/eslint-config-standard/-/eslint-config-standard-10.2.1.tgz#c061e4d066f379dc17cd562c64e819b4dd454591" -eslint-config-standard@6.2.1: - version "6.2.1" - resolved "https://registry.yarnpkg.com/eslint-config-standard/-/eslint-config-standard-6.2.1.tgz#d3a68aafc7191639e7ee441e7348739026354292" +eslint-import-resolver-node@^0.2.0: + version "0.2.3" + resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.2.3.tgz#5add8106e8c928db2cba232bcd9efa846e3da16c" + dependencies: + debug "^2.2.0" + object-assign "^4.0.1" + resolve "^1.1.6" -eslint-plugin-promise@~3.4.0: - version "3.4.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-promise/-/eslint-plugin-promise-3.4.1.tgz#6911a9010bf84e17d82e19e0ab0f80ab3ad6db4c" +eslint-module-utils@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.1.1.tgz#abaec824177613b8a95b299639e1b6facf473449" + dependencies: + debug "^2.6.8" + pkg-dir "^1.0.0" -eslint-plugin-react@~6.7.1: - version "6.7.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-6.7.1.tgz#1af96aea545856825157d97c1b50d5a8fb64a5a7" +eslint-plugin-import@~2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.2.0.tgz#72ba306fad305d67c4816348a4699a4229ac8b4e" dependencies: + builtin-modules "^1.1.1" + contains-path "^0.1.0" + debug "^2.2.0" + doctrine "1.5.0" + eslint-import-resolver-node "^0.2.0" + eslint-module-utils "^2.0.0" + has "^1.0.1" + lodash.cond "^4.3.0" + minimatch "^3.0.3" + pkg-up "^1.0.0" + +eslint-plugin-node@~4.2.2: + version "4.2.3" + resolved "https://registry.yarnpkg.com/eslint-plugin-node/-/eslint-plugin-node-4.2.3.tgz#c04390ab8dbcbb6887174023d6f3a72769e63b97" + dependencies: + ignore "^3.0.11" + minimatch "^3.0.2" + object-assign "^4.0.1" + resolve "^1.1.7" + semver "5.3.0" + +eslint-plugin-promise@~3.5.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-promise/-/eslint-plugin-promise-3.5.0.tgz#78fbb6ffe047201627569e85a6c5373af2a68fca" + +eslint-plugin-react@~6.10.0: + version "6.10.3" + resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-6.10.3.tgz#c5435beb06774e12c7db2f6abaddcbf900cd3f78" + dependencies: + array.prototype.find "^2.0.1" doctrine "^1.2.2" - jsx-ast-utils "^1.3.3" + has "^1.0.1" + jsx-ast-utils "^1.3.4" + object.assign "^4.0.4" -eslint-plugin-standard@~2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-standard/-/eslint-plugin-standard-2.0.1.tgz#3589699ff9c917f2c25f76a916687f641c369ff3" +eslint-plugin-standard@~3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-standard/-/eslint-plugin-standard-3.0.1.tgz#34d0c915b45edc6f010393c7eef3823b08565cf2" -eslint@~3.10.2: - version "3.10.2" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-3.10.2.tgz#c9a10e8bf6e9d65651204778c503341f1eac3ce7" +eslint@~3.19.0: + version "3.19.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-3.19.0.tgz#c8fc6201c7f40dd08941b87c085767386a679acc" dependencies: babel-code-frame "^6.16.0" chalk "^1.1.3" - concat-stream "^1.4.6" + concat-stream "^1.5.2" debug "^2.1.1" - doctrine "^1.2.2" + doctrine "^2.0.0" escope "^3.6.0" - espree "^3.3.1" + espree "^3.4.0" + esquery "^1.0.0" estraverse "^4.2.0" esutils "^2.0.2" file-entry-cache "^2.0.0" glob "^7.0.3" - globals "^9.2.0" + globals "^9.14.0" ignore "^3.2.0" imurmurhash "^0.1.4" inquirer "^0.12.0" @@ -1055,23 +1211,16 @@ eslint@~3.10.2: require-uncached "^1.0.2" shelljs "^0.7.5" strip-bom "^3.0.0" - strip-json-comments "~1.0.1" + strip-json-comments "~2.0.1" table "^3.7.8" text-table "~0.2.0" user-home "^2.0.0" -espree@^3.3.1: - version "3.4.0" - resolved "https://registry.yarnpkg.com/espree/-/espree-3.4.0.tgz#41656fa5628e042878025ef467e78f125cb86e1d" - dependencies: - acorn "4.0.4" - acorn-jsx "^3.0.0" - -espree@~3.1.7: - version "3.1.7" - resolved "https://registry.yarnpkg.com/espree/-/espree-3.1.7.tgz#fd5deec76a97a5120a9cd3a7cb1177a0923b11d2" +espree@^3.4.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/espree/-/espree-3.5.0.tgz#98358625bdd055861ea27e2867ea729faf463d8d" dependencies: - acorn "^3.3.0" + acorn "^5.1.1" acorn-jsx "^3.0.0" esprima@2.7.x, esprima@^2.6.0, esprima@^2.7.1: @@ -1082,6 +1231,16 @@ esprima@^3.1.1: version "3.1.3" resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633" +esprima@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.0.tgz#4499eddcd1110e0b218bacf2fa7f7f59f55ca804" + +esquery@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.0.0.tgz#cfba8b57d7fba93f17298a8a006a04cda13d80fa" + dependencies: + estraverse "^4.0.0" + esrecurse@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.1.0.tgz#4713b6536adf7f2ac4f327d559e7756bff648220" @@ -1093,7 +1252,7 @@ estraverse@^1.9.1: version "1.9.3" resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-1.9.3.tgz#af67f2dc922582415950926091a4005d29c9bb44" -estraverse@^4.1.1, estraverse@^4.2.0: +estraverse@^4.0.0, estraverse@^4.1.1, estraverse@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13" @@ -1146,6 +1305,19 @@ find-root@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/find-root/-/find-root-1.0.0.tgz#962ff211aab25c6520feeeb8d6287f8f6e95807a" +find-up@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" + dependencies: + path-exists "^2.0.0" + pinkie-promise "^2.0.0" + +find-up@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" + dependencies: + locate-path "^2.0.0" + flat-cache@^1.2.1: version "1.2.2" resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-1.2.2.tgz#fa86714e72c21db88601761ecf2f555d1abc6b96" @@ -1155,6 +1327,10 @@ flat-cache@^1.2.1: graceful-fs "^4.1.2" write "^0.2.1" +foreach@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/foreach/-/foreach-2.0.5.tgz#0bee005018aeb260d0a3af3ae658dd0136ec1b99" + forever-agent@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" @@ -1171,6 +1347,10 @@ fs.realpath@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" +function-bind@^1.0.2, function-bind@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.0.tgz#16176714c801798e4e8f2cf7f7529467bb4a5771" + generate-function@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/generate-function/-/generate-function-2.0.0.tgz#6858fe7c0969b7d4e9093337647ac79f60dfbe74" @@ -1181,6 +1361,10 @@ generate-object-property@^1.1.0: dependencies: is-property "^1.0.0" +get-func-name@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/get-func-name/-/get-func-name-2.0.0.tgz#ead774abee72e20409433a066366023dd6887a41" + get-stdin@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-5.0.1.tgz#122e161591e21ff4c52530305693f20e6393a398" @@ -1191,12 +1375,16 @@ getpass@^0.1.1: dependencies: assert-plus "^1.0.0" -glob@3.2.11: - version "3.2.11" - resolved "https://registry.yarnpkg.com/glob/-/glob-3.2.11.tgz#4a973f635b9190f715d10987d5c00fd2815ebe3d" +glob@7.1.1, glob@^7.0.0, glob@^7.0.3, glob@^7.0.5: + version "7.1.1" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.1.tgz#805211df04faaf1c63a3600306cdf5ade50b2ec8" dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" inherits "2" - minimatch "0.3" + minimatch "^3.0.2" + once "^1.3.0" + path-is-absolute "^1.0.0" glob@^5.0.15: version "5.0.15" @@ -1208,20 +1396,9 @@ glob@^5.0.15: once "^1.3.0" path-is-absolute "^1.0.0" -glob@^7.0.0, glob@^7.0.3, glob@^7.0.5: - version "7.1.1" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.1.tgz#805211df04faaf1c63a3600306cdf5ade50b2ec8" - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.0.2" - once "^1.3.0" - path-is-absolute "^1.0.0" - -globals@^9.0.0, globals@^9.2.0: - version "9.14.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-9.14.0.tgz#8859936af0038741263053b39d0e76ca241e4034" +globals@^9.14.0, globals@^9.18.0: + version "9.18.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a" globby@^5.0.0: version "5.0.0" @@ -1275,6 +1452,12 @@ has-flag@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa" +has@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/has/-/has-1.0.1.tgz#8461733f538b0837c9361e39a9ab9e9704dc2f28" + dependencies: + function-bind "^1.0.2" + hawk@~3.1.3: version "3.1.3" resolved "https://registry.yarnpkg.com/hawk/-/hawk-3.1.3.tgz#078444bd7c1640b0fe540d2c9b73d59678e8e1c4" @@ -1307,6 +1490,10 @@ http-signature@~1.1.0: jsprim "^1.2.2" sshpk "^1.7.0" +ignore@^3.0.11: + version "3.3.3" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.3.tgz#432352e57accd87ab3110e82d3fea0e47812156d" + ignore@^3.0.9, ignore@^3.2.0: version "3.2.2" resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.2.2.tgz#1c51e1ef53bab6ddc15db4d9ac4ec139eceb3410" @@ -1348,16 +1535,28 @@ interpret@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.0.1.tgz#d579fb7f693b858004947af39fa0db49f795602c" -invariant@^2.2.0: +invariant@^2.2.2: version "2.2.2" resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.2.tgz#9e1f56ac0acdb6bf303306f338be3b204ae60360" dependencies: loose-envify "^1.0.0" +is-arrayish@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + is-buffer@^1.0.2: version "1.1.4" resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.4.tgz#cfc86ccd5dc5a52fa80489111c6920c457e2d98b" +is-callable@^1.1.1, is-callable@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.3.tgz#86eb75392805ddc33af71c92a0eedf74ee7604b2" + +is-date-object@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.1.tgz#9aa20eb6aeebbff77fbd33e74ca01b33581d3a16" + is-finite@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.0.2.tgz#cc6677695602be550ef11e8b4aa6305342b6d0aa" @@ -1403,12 +1602,22 @@ is-property@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/is-property/-/is-property-1.0.2.tgz#57fe1c4e48474edd65b09911f26b1cd4095dda84" +is-regex@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.4.tgz#5517489b547091b0930e095654ced25ee97e9491" + dependencies: + has "^1.0.1" + is-resolvable@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.0.0.tgz#8df57c61ea2e3c501408d100fb013cf8d6e0cc62" dependencies: tryit "^1.0.1" +is-symbol@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.1.tgz#3cc59f00025194b6ab2e38dbae6689256b660572" + is-typedarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" @@ -1429,6 +1638,10 @@ isexe@^1.1.1: version "1.1.2" resolved "https://registry.yarnpkg.com/isexe/-/isexe-1.1.2.tgz#36f3e22e60750920f5e7241a476a8c6a42275ad0" +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + isstream@~0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" @@ -1456,22 +1669,15 @@ items@2.x.x: version "2.1.1" resolved "https://registry.yarnpkg.com/items/-/items-2.1.1.tgz#8bd16d9c83b19529de5aea321acaada78364a198" -jade@0.26.3: - version "0.26.3" - resolved "https://registry.yarnpkg.com/jade/-/jade-0.26.3.tgz#8f10d7977d8d79f2f6ff862a81b0513ccb25686c" - dependencies: - commander "0.6.1" - mkdirp "0.3.0" - jodid25519@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/jodid25519/-/jodid25519-1.0.2.tgz#06d4912255093419477d425633606e0e90782967" dependencies: jsbn "~0.1.0" -joi@^10.0.0: - version "10.2.2" - resolved "https://registry.yarnpkg.com/joi/-/joi-10.2.2.tgz#dc5a792b7b4c6fffa562242a95b55d9d3f077e24" +joi@^10.6.0: + version "10.6.0" + resolved "https://registry.yarnpkg.com/joi/-/joi-10.6.0.tgz#52587f02d52b8b75cdb0c74f0b164a191a0e1fc2" dependencies: hoek "4.x.x" isemail "2.x.x" @@ -1482,6 +1688,10 @@ js-tokens@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.1.tgz#08e9f132484a2c45a30907e9dc4d5567b7f114d7" +js-tokens@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" + js-yaml@3.6.1: version "3.6.1" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.6.1.tgz#6e5fe67d8b205ce4d22fad05b7781e8dadcc4b30" @@ -1489,31 +1699,40 @@ js-yaml@3.6.1: argparse "^1.0.7" esprima "^2.6.0" -js-yaml@3.x, js-yaml@^3.4.5, js-yaml@^3.5.1: +js-yaml@3.x, js-yaml@^3.5.1: version "3.8.1" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.8.1.tgz#782ba50200be7b9e5a8537001b7804db3ad02628" dependencies: argparse "^1.0.7" esprima "^3.1.1" -js2xmlparser@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/js2xmlparser/-/js2xmlparser-1.0.0.tgz#5a170f2e8d6476ce45405e04823242513782fe30" +js-yaml@^3.9.1: + version "3.9.1" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.9.1.tgz#08775cebdfdd359209f0d2acd383c8f86a6904a0" + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + +js2xmlparser@~3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/js2xmlparser/-/js2xmlparser-3.0.0.tgz#3fb60eaa089c5440f9319f51760ccd07e2499733" + dependencies: + xmlcreate "^1.0.1" jsbn@~0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.0.tgz#650987da0dd74f4ebf5a11377a2aa2d273e97dfd" -jsdoc@^3.3.1: - version "3.4.3" - resolved "https://registry.yarnpkg.com/jsdoc/-/jsdoc-3.4.3.tgz#e5740d6145c681f6679e6c17783a88dbdd97ccd3" +jsdoc@^3.5.4: + version "3.5.4" + resolved "https://registry.yarnpkg.com/jsdoc/-/jsdoc-3.5.4.tgz#ceeef7c4bac4335cb10ff41e3a0f58939a534428" dependencies: - bluebird "~3.4.6" - catharsis "~0.8.8" + babylon "~7.0.0-beta.19" + bluebird "~3.5.0" + catharsis "~0.8.9" escape-string-regexp "~1.0.5" - espree "~3.1.7" - js2xmlparser "~1.0.0" - klaw "~1.3.0" + js2xmlparser "~3.0.0" + klaw "~2.0.0" marked "~0.3.6" mkdirp "~0.5.1" requizzle "~0.2.1" @@ -1543,7 +1762,11 @@ json-stringify-safe@~5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" -json5@^0.5.0: +json3@3.3.2: + version "3.3.2" + resolved "https://registry.yarnpkg.com/json3/-/json3-3.3.2.tgz#3c0434743df93e2f5c42aee7b19bcb483575f4e1" + +json5@^0.5.1: version "0.5.1" resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821" @@ -1563,11 +1786,9 @@ jsprim@^1.2.2: json-schema "0.2.3" verror "1.3.6" -jsx-ast-utils@^1.3.3: - version "1.4.0" - resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-1.4.0.tgz#5afe38868f56bc8cc7aeaef0100ba8c75bd12591" - dependencies: - object-assign "^4.1.0" +jsx-ast-utils@^1.3.4: + version "1.4.1" + resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-1.4.1.tgz#3867213e8dd79bf1e8f2300c0cfc1efb182c0df1" kind-of@^3.0.2: version "3.1.0" @@ -1575,10 +1796,10 @@ kind-of@^3.0.2: dependencies: is-buffer "^1.0.2" -klaw@~1.3.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/klaw/-/klaw-1.3.1.tgz#4088433b46b3b1ba259d78785d8e96f73ba02439" - optionalDependencies: +klaw@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/klaw/-/klaw-2.0.0.tgz#59c128e0dc5ce410201151194eeb9cbf858650f6" + dependencies: graceful-fs "^4.1.9" lazy-cache@^1.0.3: @@ -1596,7 +1817,74 @@ levn@^0.3.0, levn@~0.3.0: prelude-ls "~1.1.2" type-check "~0.3.2" -lodash@^4.0.0, lodash@^4.12.0, lodash@^4.2.0, lodash@^4.3.0: +load-json-file@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-2.0.0.tgz#7947e42149af80d696cbf797bcaabcfe1fe29ca8" + dependencies: + graceful-fs "^4.1.2" + parse-json "^2.2.0" + pify "^2.0.0" + strip-bom "^3.0.0" + +locate-path@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" + dependencies: + p-locate "^2.0.0" + path-exists "^3.0.0" + +lodash._baseassign@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz#8c38a099500f215ad09e59f1722fd0c52bfe0a4e" + dependencies: + lodash._basecopy "^3.0.0" + lodash.keys "^3.0.0" + +lodash._basecopy@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz#8da0e6a876cf344c0ad8a54882111dd3c5c7ca36" + +lodash._basecreate@^3.0.0: + version "3.0.3" + resolved "https://registry.yarnpkg.com/lodash._basecreate/-/lodash._basecreate-3.0.3.tgz#1bc661614daa7fc311b7d03bf16806a0213cf821" + +lodash._getnative@^3.0.0: + version "3.9.1" + resolved "https://registry.yarnpkg.com/lodash._getnative/-/lodash._getnative-3.9.1.tgz#570bc7dede46d61cdcde687d65d3eecbaa3aaff5" + +lodash._isiterateecall@^3.0.0: + version "3.0.9" + resolved "https://registry.yarnpkg.com/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz#5203ad7ba425fae842460e696db9cf3e6aac057c" + +lodash.cond@^4.3.0: + version "4.5.2" + resolved "https://registry.yarnpkg.com/lodash.cond/-/lodash.cond-4.5.2.tgz#f471a1da486be60f6ab955d17115523dd1d255d5" + +lodash.create@3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/lodash.create/-/lodash.create-3.1.1.tgz#d7f2849f0dbda7e04682bb8cd72ab022461debe7" + dependencies: + lodash._baseassign "^3.0.0" + lodash._basecreate "^3.0.0" + lodash._isiterateecall "^3.0.0" + +lodash.isarguments@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz#2f573d85c6a24289ff00663b491c1d338ff3458a" + +lodash.isarray@^3.0.0: + version "3.0.4" + resolved "https://registry.yarnpkg.com/lodash.isarray/-/lodash.isarray-3.0.4.tgz#79e4eb88c36a8122af86f844aa9bcd851b5fbb55" + +lodash.keys@^3.0.0: + version "3.1.2" + resolved "https://registry.yarnpkg.com/lodash.keys/-/lodash.keys-3.1.2.tgz#4dbc0472b156be50a0b286855d1bd0b0c656098a" + dependencies: + lodash._getnative "^3.0.0" + lodash.isarguments "^3.0.0" + lodash.isarray "^3.0.0" + +lodash@^4.0.0, lodash@^4.12.0, lodash@^4.17.4, lodash@^4.2.0, lodash@^4.3.0: version "4.17.4" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae" @@ -1614,10 +1902,6 @@ loose-envify@^1.0.0: dependencies: js-tokens "^3.0.0" -lru-cache@2: - version "2.7.3" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-2.7.3.tgz#6d4524e8b955f95d4f5b58851ce21dd72fb4e952" - marked@~0.3.6: version "0.3.6" resolved "https://registry.yarnpkg.com/marked/-/marked-0.3.6.tgz#b2c6c618fccece4ef86c4fc6cb8a7cbf5aeda8d7" @@ -1632,19 +1916,18 @@ mime-types@^2.1.12, mime-types@~2.1.7: dependencies: mime-db "~1.26.0" -minimatch@0.3: - version "0.3.0" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-0.3.0.tgz#275d8edaac4f1bb3326472089e7949c8394699dd" - dependencies: - lru-cache "2" - sigmund "~1.0.0" - -"minimatch@2 || 3", minimatch@^3.0.0, minimatch@^3.0.2: +"minimatch@2 || 3", minimatch@^3.0.2: version "3.0.3" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.3.tgz#2a4e4090b96b2db06a9d7df01055a62a77c9b774" dependencies: brace-expansion "^1.0.0" +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: + brace-expansion "^1.1.7" + minimist@0.0.8, minimist@~0.0.1: version "0.0.8" resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" @@ -1653,39 +1936,40 @@ minimist@1.2.0, minimist@^1.1.0, minimist@^1.1.1: version "1.2.0" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" -mkdirp@0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.3.0.tgz#1bbf5ab1ba827af23575143490426455f481fe1e" - mkdirp@0.5.1, mkdirp@0.5.x, mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.1: version "0.5.1" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" dependencies: minimist "0.0.8" -mocha@^2.5.3: - version "2.5.3" - resolved "https://registry.yarnpkg.com/mocha/-/mocha-2.5.3.tgz#161be5bdeb496771eb9b35745050b622b5aefc58" - dependencies: - commander "2.3.0" - debug "2.2.0" - diff "1.4.0" - escape-string-regexp "1.0.2" - glob "3.2.11" +mocha@^3.5.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/mocha/-/mocha-3.5.0.tgz#1328567d2717f997030f8006234bce9b8cd72465" + dependencies: + browser-stdout "1.3.0" + commander "2.9.0" + debug "2.6.8" + diff "3.2.0" + escape-string-regexp "1.0.5" + glob "7.1.1" growl "1.9.2" - jade "0.26.3" + json3 "3.3.2" + lodash.create "3.1.1" mkdirp "0.5.1" - supports-color "1.2.0" - to-iso-string "0.0.2" + supports-color "3.1.2" -mockery@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/mockery/-/mockery-2.0.0.tgz#0569a11a1848461fdc347cf8cca2df2f3129bc03" +mockery@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/mockery/-/mockery-2.1.0.tgz#5b0aef1ff564f0f8139445e165536c7909713470" ms@0.7.1: version "0.7.1" resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.1.tgz#9cd13c03adbff25b65effde7ce864ee952017098" +ms@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + mute-stream@0.0.5: version "0.0.5" resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.5.tgz#8fbfabb0a98a253d3184331f9e8deb7372fac6c0" @@ -1716,6 +2000,18 @@ object-assign@^4.0.1, object-assign@^4.1.0: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" +object-keys@^1.0.10, object-keys@^1.0.8: + version "1.0.11" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.0.11.tgz#c54601778ad560f1142ce0e01bcca8b56d13426d" + +object.assign@^4.0.4: + version "4.0.4" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.0.4.tgz#b1c9cc044ef1b9fe63606fc141abbb32e14730cc" + dependencies: + define-properties "^1.1.2" + function-bind "^1.1.0" + object-keys "^1.0.10" + once@1.x, once@^1.3.0: version "1.4.0" resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" @@ -1752,7 +2048,33 @@ os-tmpdir@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" -path-is-absolute@^1.0.0: +p-limit@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.1.0.tgz#b07ff2d9a5d88bec806035895a2bab66a27988bc" + +p-locate@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" + dependencies: + p-limit "^1.1.0" + +parse-json@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" + dependencies: + error-ex "^1.2.0" + +path-exists@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b" + dependencies: + pinkie-promise "^2.0.0" + +path-exists@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" + +path-is-absolute@^1.0.0, path-is-absolute@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" @@ -1760,6 +2082,14 @@ path-is-inside@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" +path-parse@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.5.tgz#3c1adf871ea9cd6c9431b6ea2bd74a0ff055c4c1" + +pathval@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/pathval/-/pathval-1.1.0.tgz#b942e6d4bde653005ef6b71361def8727d0645e0" + pify@^2.0.0: version "2.3.0" resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" @@ -1774,7 +2104,14 @@ pinkie@^2.0.0: version "2.0.4" resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" -pkg-config@^1.0.1, pkg-config@^1.1.0: +pkg-conf@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/pkg-conf/-/pkg-conf-2.0.0.tgz#071c87650403bccfb9c627f58751bfe47c067279" + dependencies: + find-up "^2.0.0" + load-json-file "^2.0.0" + +pkg-config@^1.1.0: version "1.1.1" resolved "https://registry.yarnpkg.com/pkg-config/-/pkg-config-1.1.1.tgz#557ef22d73da3c8837107766c52eadabde298fe4" dependencies: @@ -1782,6 +2119,18 @@ pkg-config@^1.0.1, pkg-config@^1.1.0: find-root "^1.0.0" xtend "^4.0.1" +pkg-dir@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-1.0.0.tgz#7a4b508a8d5bb2d629d447056ff4e9c9314cf3d4" + dependencies: + find-up "^1.0.0" + +pkg-up@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/pkg-up/-/pkg-up-1.0.0.tgz#3e08fb461525c4421624a33b9f7e6d0af5b05a26" + dependencies: + find-up "^1.0.0" + pluralize@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-1.2.1.tgz#d1a21483fd22bb41e58a12fa3421823140897c45" @@ -1790,7 +2139,7 @@ prelude-ls@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" -private@^0.1.6: +private@^0.1.6, private@^0.1.7: version "0.1.7" resolved "https://registry.yarnpkg.com/private/-/private-0.1.7.tgz#68ce5e8a1ef0a23bb570cc28537b5332aba63ef1" @@ -1857,9 +2206,13 @@ regenerator-runtime@^0.10.0: version "0.10.1" resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.10.1.tgz#257f41961ce44558b18f7814af48c17559f9faeb" -regenerator-transform@0.9.8: - version "0.9.8" - resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.9.8.tgz#0f88bb2bc03932ddb7b6b7312e68078f01026d6c" +regenerator-runtime@^0.11.0: + version "0.11.0" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.0.tgz#7e54fe5b5ccd5d6624ea6255c3473be090b802e1" + +regenerator-transform@^0.10.0: + version "0.10.1" + resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.10.1.tgz#1e4996837231da8b7f3cf4114d71b5691a0680dd" dependencies: babel-runtime "^6.18.0" babel-types "^6.19.0" @@ -1939,6 +2292,12 @@ resolve@1.1.x, resolve@^1.1.6: version "1.1.7" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" +resolve@^1.1.7: + version "1.4.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.4.0.tgz#a75be01c53da25d934a98ebd0e4c4a7312f92a86" + dependencies: + path-parse "^1.0.5" + restore-cursor@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-1.0.1.tgz#34661f46886327fed2991479152252df92daa541" @@ -1952,12 +2311,18 @@ right-align@^0.1.1: dependencies: align-text "^0.1.1" -rimraf@^2.2.8, rimraf@^2.5.2: +rimraf@^2.2.8: version "2.5.4" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.5.4.tgz#96800093cbf1a0c86bd95b4625467535c29dfa04" 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@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/run-async/-/run-async-0.1.0.tgz#c8ad4a5e110661e402a7d21b530e009f25f8e389" @@ -1972,6 +2337,10 @@ rx-lite@^3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/rx-lite/-/rx-lite-3.1.2.tgz#19ce502ca572665f3b647b10939f97fd1615f102" +semver@5.3.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f" + 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" @@ -1984,10 +2353,6 @@ shelljs@^0.7.5: interpret "^1.0.0" rechoir "^0.6.2" -sigmund@~1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/sigmund/-/sigmund-1.0.1.tgz#3ff21f198cad2175f9f3b781853fd94d0d19b590" - slash@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55" @@ -1996,15 +2361,14 @@ slice-ansi@0.0.4: version "0.0.4" resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-0.0.4.tgz#edbf8903f66f7ce2f8eafd6ceed65e264c831b35" -snazzy@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/snazzy/-/snazzy-6.0.0.tgz#6a17d4798cbbc8bc6e113153694907a8bac9494d" +snazzy@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/snazzy/-/snazzy-7.0.0.tgz#95edaccc4a8d6f80f4ac5cc7b520e8f8f9ac2325" dependencies: chalk "^1.1.0" inherits "^2.0.1" minimist "^1.1.1" readable-stream "^2.0.6" - standard "*" standard-json "^1.0.0" text-table "^0.2.0" @@ -2014,11 +2378,11 @@ sntp@1.x.x: dependencies: hoek "2.x.x" -source-map-support@^0.4.2: - version "0.4.11" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.11.tgz#647f939978b38535909530885303daf23279f322" +source-map-support@^0.4.15: + version "0.4.16" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.16.tgz#16fecf98212467d017d586a2af68d628b9421cd8" dependencies: - source-map "^0.5.3" + source-map "^0.5.6" source-map@^0.4.4: version "0.4.4" @@ -2026,9 +2390,9 @@ source-map@^0.4.4: dependencies: amdefine ">=0.0.4" -source-map@^0.5.0, source-map@^0.5.3, source-map@~0.5.1: - version "0.5.6" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.6.tgz#75ce38f52bf0733c5a7f0c118d81334a2bb5f412" +source-map@^0.5.6: + version "0.5.7" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" source-map@~0.2.0: version "0.2.0" @@ -2036,6 +2400,10 @@ source-map@~0.2.0: dependencies: amdefine ">=0.0.4" +source-map@~0.5.1: + version "0.5.6" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.6.tgz#75ce38f52bf0733c5a7f0c118d81334a2bb5f412" + sprintf-js@^1.0.3, sprintf-js@~1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" @@ -2055,16 +2423,14 @@ sshpk@^1.7.0: jsbn "~0.1.0" tweetnacl "~0.14.0" -standard-engine@~5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/standard-engine/-/standard-engine-5.2.0.tgz#400660ae5acce8afd4db60ff2214a9190ad790a3" +standard-engine@~7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/standard-engine/-/standard-engine-7.0.0.tgz#ebb77b9c8fc2c8165ffa353bd91ba0dff41af690" dependencies: - deglob "^2.0.0" - find-root "^1.0.0" + deglob "^2.1.0" get-stdin "^5.0.1" - home-or-tmp "^2.0.0" minimist "^1.1.0" - pkg-config "^1.0.1" + pkg-conf "^2.0.0" standard-json@^1.0.0: version "1.0.2" @@ -2072,17 +2438,19 @@ standard-json@^1.0.0: dependencies: concat-stream "^1.5.0" -standard@*, standard@^8.6.0: - version "8.6.0" - resolved "https://registry.yarnpkg.com/standard/-/standard-8.6.0.tgz#635132be7bfb567c2921005f30f9e350e4752aad" +standard@^10.0.3: + version "10.0.3" + resolved "https://registry.yarnpkg.com/standard/-/standard-10.0.3.tgz#7869bcbf422bdeeaab689a1ffb1fea9677dd50ea" dependencies: - eslint "~3.10.2" - eslint-config-standard "6.2.1" - eslint-config-standard-jsx "3.2.0" - eslint-plugin-promise "~3.4.0" - eslint-plugin-react "~6.7.1" - eslint-plugin-standard "~2.0.1" - standard-engine "~5.2.0" + eslint "~3.19.0" + eslint-config-standard "10.2.1" + eslint-config-standard-jsx "4.0.2" + eslint-plugin-import "~2.2.0" + eslint-plugin-node "~4.2.2" + eslint-plugin-promise "~3.5.0" + eslint-plugin-react "~6.10.0" + eslint-plugin-standard "~3.0.1" + standard-engine "~7.0.0" string-width@^1.0.1: version "1.0.2" @@ -2117,17 +2485,15 @@ strip-bom@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" -strip-json-comments@~1.0.1: - version "1.0.4" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-1.0.4.tgz#1e15fbcac97d3ee99bf2d73b4c656b082bbafb91" - strip-json-comments@~2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" -supports-color@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-1.2.0.tgz#ff1ed1e61169d06b3cf2d588e188b18d8847e17e" +supports-color@3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.1.2.tgz#72a262894d9d408b956ca05ff37b2ed8a6e2a2d5" + dependencies: + has-flag "^1.0.0" supports-color@^2.0.0: version "2.0.0" @@ -2166,9 +2532,9 @@ to-fast-properties@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.2.tgz#f3f5c0c3ba7299a7ef99427e44633257ade43320" -to-iso-string@0.0.2: - version "0.0.2" - resolved "https://registry.yarnpkg.com/to-iso-string/-/to-iso-string-0.0.2.tgz#4dc19e664dfccbe25bd8db508b00c6da158255d1" +to-fast-properties@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.3.tgz#b83571fa4d8c25b82e231b06e3a3055de4ca1a47" topo@2.x.x: version "2.0.2" @@ -2182,6 +2548,10 @@ tough-cookie@~2.3.0: dependencies: punycode "^1.4.1" +trim-right@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" + tryit@^1.0.1: version "1.0.3" resolved "https://registry.yarnpkg.com/tryit/-/tryit-1.0.3.tgz#393be730a9446fd1ead6da59a014308f36c289cb" @@ -2200,13 +2570,13 @@ type-check@~0.3.2: dependencies: prelude-ls "~1.1.2" -type-detect@0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-0.1.1.tgz#0ba5ec2a885640e470ea4e8505971900dac58822" +type-detect@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-3.0.0.tgz#46d0cc8553abb7b13a352b0d6dea2fd58f2d9b55" -type-detect@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-1.0.0.tgz#762217cc06db258ec48908a1298e8b95121e8ea2" +type-detect@^4.0.0: + version "4.0.3" + resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.3.tgz#0e3f2670b44099b0b46c284d136a7ef49c74c2ea" typedarray@^0.0.6: version "0.0.6" @@ -2270,16 +2640,22 @@ verror@1.3.6: dependencies: extsprintf "1.0.2" -when@^3.7.7: - version "3.7.7" - resolved "https://registry.yarnpkg.com/when/-/when-3.7.7.tgz#aba03fc3bb736d6c88b091d013d8a8e590d84718" +when@^3.7.8: + version "3.7.8" + resolved "https://registry.yarnpkg.com/when/-/when-3.7.8.tgz#c7130b6a7ea04693e842cdc9e7a1f2aa39a39f82" -which@^1.1.1, which@^1.2.8: +which@^1.1.1: version "1.2.12" resolved "https://registry.yarnpkg.com/which/-/which-1.2.12.tgz#de67b5e450269f194909ef23ece4ebe416fa1192" dependencies: isexe "^1.1.1" +which@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/which/-/which-1.3.0.tgz#ff04bdfc010ee547d780bec38e1ac1c2777d253a" + dependencies: + isexe "^2.0.0" + window-size@0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.0.tgz#5438cd2ea93b202efa3a19fe8887aee7c94f9c9d" @@ -2306,6 +2682,10 @@ write@^0.2.1: dependencies: mkdirp "^0.5.1" +xmlcreate@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/xmlcreate/-/xmlcreate-1.0.2.tgz#fa6bf762a60a413fb3dd8f4b03c5b269238d308f" + xtend@^4.0.0, xtend@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af"