diff --git a/__old__/bit-resolver/bit-resolver.js b/__old__/bit-resolver/bit-resolver.js deleted file mode 100644 index b6e89dd..0000000 --- a/__old__/bit-resolver/bit-resolver.js +++ /dev/null @@ -1,22 +0,0 @@ -import path from 'path'; -import fs from 'fs'; -import BitJson from 'bit-scope-client/bit-json'; -import { DEFAULT_DIST_DIRNAME, DEFAULT_BUNDLE_FILENAME } from '../constants'; -import { ComponentNotExistsInException } from '../exceptions'; - -module.exports = (bitPath, opts) => { - if (!fs.existsSync(bitPath)) throw new ComponentNotExistsInException(bitPath); - - const distFile = path.join(bitPath, DEFAULT_DIST_DIRNAME, DEFAULT_BUNDLE_FILENAME); - if (fs.existsSync(distFile)) { - try { - return opts && opts.pathOnly ? distFile : require(distFile); // eslint-disable-line - } catch (e) { throw (e); } - } - - try { - const bitJson = BitJson.load(bitPath); - const implFile = path.join(bitPath, bitJson.impl); - return opts && opts.pathOnly ? implFile : require(implFile); // eslint-disable-line - } catch (e) { throw e; } -}; diff --git a/__old__/bit-resolver/index.js b/__old__/bit-resolver/index.js deleted file mode 100644 index 418a77e..0000000 --- a/__old__/bit-resolver/index.js +++ /dev/null @@ -1,3 +0,0 @@ -const bitResolver = require('./bit-resolver'); - -module.exports = bitResolver; diff --git a/__old__/bit-resolver/resolve-from-full-id.js b/__old__/bit-resolver/resolve-from-full-id.js deleted file mode 100644 index d3bc5c9..0000000 --- a/__old__/bit-resolver/resolve-from-full-id.js +++ /dev/null @@ -1,22 +0,0 @@ -const path = require('path'); -const Consumer = require('../consumer/consumer'); -const locateBitEnvironment = require('../consumer/locate-bit-environment'); -const parseBitFullId = require('bit-scope-client/bit-id').parseBitFullId; -const resolveBit = require('./bit-resolver'); -const { LATEST_VERSION } = require('../constants'); -const findLatestVersion = require('bit-scope-client/bit-id').findLatestVersion; - -module.exports = (fullId, dir, opts) => { - const consumerPath = locateBitEnvironment(dir); - const consumer = new Consumer(consumerPath); - const { scope, box, name, version } = - parseBitFullId({ id: fullId }); - - let realVersion = version; - if (!version || version === LATEST_VERSION) { - realVersion = findLatestVersion({ scope, box, name, consumerPath }); - } - - const bitPath = path.join(consumer.getBitsDir(), box, name, scope, realVersion); - return resolveBit(bitPath, opts); -}; diff --git a/__old__/bit/bit.js b/__old__/bit/bit.js deleted file mode 100644 index f7e230c..0000000 --- a/__old__/bit/bit.js +++ /dev/null @@ -1,62 +0,0 @@ -const fs = require('fs'); -const path = require('path'); -const requireFromString = require('require-from-string'); -const { NO_PLUGIN_TYPE } = require('../constants'); -const BitJson = require('bit-scope-client/bit-json'); -const resolveFromFullId = require('../bit-resolver/resolve-from-full-id'); - -class Bit { - constructor(bitPath, consumer) { - this.bitJson = null; - this.bitPath = bitPath; - this.consumer = consumer; - } - - getPath() { - return this.bitPath; - } - - getBitJson() { - if (!this.bitJson) { return this.populateAndGetBitJson(); } - - return this.bitJson; - } - - populateAndGetBitJson() { - this.bitJson = BitJson.load(this.bitPath); - return this.bitJson; - } - - getImpl(opts) { - let implBasename; - let compilerId; - - try { - implBasename = this.getBitJson().impl; - } catch (e) { - implBasename = this.consumer.getBitJson().impl; - } - - const implFilePath = path.join(this.getPath(), implBasename); - - if (opts && opts.pathOnly) return implFilePath; - - try { - compilerId = this.getBitJson().compiler; - } catch (e) { - try { - compilerId = this.consumer.getBitJson().compiler; - } catch (err) { - compilerId = NO_PLUGIN_TYPE; - } - } - - if (compilerId === NO_PLUGIN_TYPE) return require(implFilePath); // eslint-disable-line - - const compiler = resolveFromFullId(compilerId, this.consumer.getPath()); - const rawImpl = fs.readFileSync(implFilePath, 'utf8'); - return requireFromString(compiler.compile(rawImpl).code, implFilePath); - } -} - -module.exports = Bit; diff --git a/__old__/consumer/consumer-utils.js b/__old__/consumer/consumer-utils.js deleted file mode 100644 index 51058d1..0000000 --- a/__old__/consumer/consumer-utils.js +++ /dev/null @@ -1,36 +0,0 @@ -const fs = require('fs'); -const path = require('path'); -const { - COMPONENTS_DIRNAME, - INLINE_COMPONENTS_DIRNAME, - BIT_JSON_NAME, - SCOPE_JSON_NAME, -} = require('../constants'); - -const composeBitJsonPath = p => path.join(p, BIT_JSON_NAME); -const composeComponentsPath = p => path.join(p, COMPONENTS_DIRNAME); -const composeInlineComponentsPath = p => path.join(p, INLINE_COMPONENTS_DIRNAME); -const composeScopeJsonPath = p => path.join(p, SCOPE_JSON_NAME); - -const pathHasBitJson = p => fs.existsSync(composeBitJsonPath(p)); -const pathHasScopeJson = p => fs.existsSync(composeScopeJsonPath(p)); - - -const pathHasComponentsDir = p => fs.existsSync(composeComponentsPath(p)); -const pathHasInlineComponentsDir = p => fs.existsSync(composeInlineComponentsPath(p)); - -const pathHasConsumer = p => pathHasBitJson(p) && -(pathHasComponentsDir(p) || pathHasInlineComponentsDir(p)); - -const pathHasScope = p => pathHasScopeJson(p) && -(pathHasComponentsDir(p) || pathHasInlineComponentsDir(p)); - -const pathHasBitEnvironment = p => pathHasConsumer(p) || pathHasScope(p); - -module.exports = { - pathHasConsumer, - composeBitJsonPath, - composeComponentsPath, - pathHasScope, - pathHasBitEnvironment, -}; diff --git a/__old__/consumer/consumer.js b/__old__/consumer/consumer.js deleted file mode 100644 index 4341c49..0000000 --- a/__old__/consumer/consumer.js +++ /dev/null @@ -1,52 +0,0 @@ -const path = require('path'); -const { readDependenciesMap } = require('./consumer-utils'); -const { INLINE_BITS_DIRNAME, BITS_DIRNAME } = require('../constants.js'); -const BitJson = require('bit-scope-client/bit-json'); - -class Consumer { - constructor(consumerPath) { - this.bitJson = null; - this.dependenciesMap = null; - this.consumerPath = consumerPath; - } - - getPath() { - return this.consumerPath; - } - - getBitJson() { - if (!this.bitJson) { - return this.populateAndGetBitJson(); - } - - return this.bitJson; - } - - populateAndGetBitJson() { - this.bitJson = BitJson.load(this.consumerPath); - return this.bitJson; - } - - getDependenciesMap() { - if (!this.dependenciesMap) { - return this.populateAndGetDependenciesMap(); - } - - return this.dependenciesMap; - } - - populateAndGetDependenciesMap() { - this.dependenciesMap = readDependenciesMap(this.consumerPath); - return this.dependenciesMap; - } - - getBitsDir() { - return path.join(this.consumerPath, BITS_DIRNAME); - } - - getInlineDir() { - return path.join(this.consumerPath, INLINE_BITS_DIRNAME); - } -} - -module.exports = Consumer; diff --git a/__old__/consumer/locate-bit-environment.js b/__old__/consumer/locate-bit-environment.js deleted file mode 100644 index 82dcd8f..0000000 --- a/__old__/consumer/locate-bit-environment.js +++ /dev/null @@ -1,5 +0,0 @@ -const { pathHasBitEnvironment } = require('./consumer-utils'); -const { NoConsumerFoundException } = require('../exceptions'); -const locateRecursively = require('./locate-recursively'); - -module.exports = locateRecursively(pathHasBitEnvironment, NoConsumerFoundException); diff --git a/__old__/consumer/locate-consumer.js b/__old__/consumer/locate-consumer.js deleted file mode 100644 index 2074c2b..0000000 --- a/__old__/consumer/locate-consumer.js +++ /dev/null @@ -1,5 +0,0 @@ -const { pathHasConsumer } = require('./consumer-utils'); -const { NoConsumerFoundException } = require('../exceptions'); -const locateRecursively = require('./locate-recursively'); - -module.exports = locateRecursively(pathHasConsumer, NoConsumerFoundException); diff --git a/__old__/consumer/locate-recursively.js b/__old__/consumer/locate-recursively.js deleted file mode 100644 index f857a4c..0000000 --- a/__old__/consumer/locate-recursively.js +++ /dev/null @@ -1,24 +0,0 @@ -const path = require('path'); - -const locateRecursively = (isDirectoryFunction, SpecificError) => (absPath) => { - const buildPropogationPaths = () => { - const paths = []; - const pathParts = absPath.split(path.sep); - - pathParts.forEach((val, index) => { - const part = pathParts.slice(0, index).join('/'); - if (!part) { return; } - paths.push(part); - }); - - return paths.reverse(); - }; - - if (isDirectoryFunction(absPath)) return absPath; - const resultPath = buildPropogationPaths().find(searchPath => isDirectoryFunction(searchPath)); - - if (resultPath) return resultPath; - throw SpecificError ? new SpecificError(absPath) : new Error(absPath); -}; - -module.exports = locateRecursively; diff --git a/__old__/strategies/index.js b/__old__/strategies/index.js deleted file mode 100644 index 059c2ef..0000000 --- a/__old__/strategies/index.js +++ /dev/null @@ -1,13 +0,0 @@ -const loadBitInline = require('./load-bit-inline'); -const loadBitAssumingOneScopeOneVersion = require('./load-bit-assuming-one-scope-one-version'); -const loadBitUsingBitJsons = require('./load-bit-using-bit-jsons'); -const loadLatestBitAssumingOneScope = require('./load-latest-bit-assuming-one-scope'); -const loadBitMultipleScopes = require('./load-bit-multiple-scopes'); - -module.exports = { - loadBitInline, - loadBitAssumingOneScopeOneVersion, - loadBitUsingBitJsons, - loadLatestBitAssumingOneScope, - loadBitMultipleScopes, -}; diff --git a/__old__/strategies/load-bit-assuming-one-scope-one-version.js b/__old__/strategies/load-bit-assuming-one-scope-one-version.js deleted file mode 100644 index 8a00abd..0000000 --- a/__old__/strategies/load-bit-assuming-one-scope-one-version.js +++ /dev/null @@ -1,13 +0,0 @@ -const glob = require('glob'); -const path = require('path'); -const resolveBit = require('../bit-resolver'); - -module.exports = (consumer, boxName, bitName, opts) => { - const directoryToLookIn = path.join(consumer.getBitsDir(), boxName, bitName); - const optionalBits = glob.sync(path.join(directoryToLookIn, '*', '*')); - if (optionalBits.length === 1) { - return resolveBit(optionalBits[0], opts); - } - - return null; -}; diff --git a/__old__/strategies/load-bit-inline.js b/__old__/strategies/load-bit-inline.js deleted file mode 100644 index 979095d..0000000 --- a/__old__/strategies/load-bit-inline.js +++ /dev/null @@ -1,11 +0,0 @@ -const fs = require('fs'); -const path = require('path'); -const Bit = require('../bit/bit'); - -module.exports = (consumer, boxName, bitName, opts) => { - const directoryToLookIn = consumer.getInlineDir(); - const inlinePath = path.join(directoryToLookIn, boxName, bitName); - if (!fs.existsSync(inlinePath)) return; - const bit = new Bit(inlinePath, consumer); - return bit.getImpl(opts); // eslint-disable-line -}; diff --git a/__old__/strategies/load-bit-multiple-scopes.js b/__old__/strategies/load-bit-multiple-scopes.js deleted file mode 100644 index 5a3246b..0000000 --- a/__old__/strategies/load-bit-multiple-scopes.js +++ /dev/null @@ -1,13 +0,0 @@ -const glob = require('glob'); -const path = require('path'); -const { MultipleScopesNoDefException } = require('../exceptions'); - -module.exports = (consumer, boxName, bitName) => { - const directoryToLookIn = path.join(consumer.getBitsDir(), boxName, bitName); - const optionalScopes = glob.sync(path.join(directoryToLookIn, '*')); - if (optionalScopes.length > 1) { - throw new MultipleScopesNoDefException(directoryToLookIn); - } - - return null; -}; diff --git a/__old__/strategies/load-bit-using-bit-jsons.js b/__old__/strategies/load-bit-using-bit-jsons.js deleted file mode 100644 index 7606033..0000000 --- a/__old__/strategies/load-bit-using-bit-jsons.js +++ /dev/null @@ -1,30 +0,0 @@ -const path = require('path'); -const fs = require('fs'); -const R = require('ramda'); -const { ID_DELIMITER, BIT_JSON_NAME } = require('../constants'); -const resolveBit = require('../bit-resolver'); -const stackTrace = require('stack-trace'); -const BitJson = require('bit-scope-client/bit-json'); - -module.exports = (consumer, boxName, bitName, opts) => { // eslint-disable-line - let dependencyMap = null; - const callerDirectory = path.dirname(stackTrace.get()[2].getFileName()); - const localBitJsonPath = path.join(callerDirectory, BIT_JSON_NAME); - - const consumerBitJson = consumer.getBitJson(); - const consumerDependencyMap = consumerBitJson.getDependencyMap(consumer.getPath()); - - if (fs.existsSync(localBitJsonPath)) { - const localBitJson = BitJson.load(callerDirectory); - const localDependencyMap = localBitJson.getDependencyMap(consumer.getPath()); - dependencyMap = R.merge(consumerDependencyMap, localDependencyMap); - } else { dependencyMap = consumerDependencyMap; } - - const chosenDependency = dependencyMap[`${boxName}${ID_DELIMITER}${bitName}`]; - - if (chosenDependency) { - const { scope, box, name, version } = chosenDependency; - const bitPath = path.join(consumer.getBitsDir(), box, name, scope, version); - return resolveBit(bitPath, opts); - } -}; diff --git a/__old__/strategies/load-latest-bit-assuming-one-scope.js b/__old__/strategies/load-latest-bit-assuming-one-scope.js deleted file mode 100644 index f179d97..0000000 --- a/__old__/strategies/load-latest-bit-assuming-one-scope.js +++ /dev/null @@ -1,20 +0,0 @@ -const glob = require('glob'); -const path = require('path'); -const resolveBit = require('../bit-resolver'); - -const ArrayMax = arr => Math.max.apply(Math, arr); // eslint-disable-line - -module.exports = (consumer, boxName, bitName, opts) => { - const directoryToLookIn = path.join(consumer.getBitsDir(), boxName, bitName); - const optionalScopes = glob.sync(path.join(directoryToLookIn, '*')); - if (optionalScopes.length === 1) { - const optionalBits = glob.sync(path.join(optionalScopes[0], '*')); - if (optionalBits.length < 1) { return null; } - const latestVersion = String(ArrayMax(optionalBits.map(p => parseInt(path.basename(p), 10)))); - if (latestVersion === 'NaN') { return null; } - const latestBit = path.join(optionalScopes[0], latestVersion); - return resolveBit(latestBit, opts); - } - - return null; -}; diff --git a/__tests__/actions/bind.test.js b/__tests__/actions/bind.test.js deleted file mode 100644 index bca69b5..0000000 --- a/__tests__/actions/bind.test.js +++ /dev/null @@ -1,87 +0,0 @@ -import fs from 'fs-extra'; -import R from 'ramda'; -import BitJson from 'bit-scope-client/bit-json'; -import bindAction from '../../src/actions/bind'; - -import { - publicApiComponentLevel, - componentsDependencies, - publicApiForInlineComponents, - publicApiForExportPendingComponents, - dependenciesForInlineComponents, - publicApiNamespaceLevel, - publicApiRootLevel, -} from '../../src/links-generator'; - -import { - build, - buildForInline, - buildForNamespaces, -} from '../../src/components-map'; - -import bitJsonOneDep from '../mocks/bit.1.json'; - -jest.mock('../../src/links-generator'); -jest.mock('bit-scope-client/bit-json'); -jest.mock('../../src/components-map'); -jest.mock('fs-extra'); - -const VERSION_DELIMITER = '@'; -const fromObjectToDependenciesArray = dependencies => R.toPairs(dependencies) - .map(([component, version]) => component + VERSION_DELIMITER + version); - -beforeEach(() => { - const dependenciesArray = fromObjectToDependenciesArray(bitJsonOneDep.dependencies); - const loadedBitJson = { - dependencies: bitJsonOneDep.dependencies, - getDependenciesArray: dependenciesArray, - }; - BitJson.load.mockReturnValue(loadedBitJson); -}); - -describe('bindAction', () => { - it('should remove the moduleDir', () => { - bindAction({}); - expect(fs.remove.mock.calls[0][0].includes('node_modules/bit')).toBeTruthy(); - }); - it('should call the ComponentMap.build function', () => { - bindAction({}); - expect(build.mock.calls).not.toBeNull(); - }); - it('should call the ComponentMap.buildForInline function', () => { - bindAction({}); - expect(buildForInline.mock.calls).not.toBeNull(); - }); - it('should call the ComponentMap.buildForNamespaces function', () => { - bindAction({}); - expect(buildForNamespaces.mock.calls).not.toBeNull(); - }); - it('should call the LinksGenerator.publicApiComponentLevel function', () => { - bindAction({}); - expect(publicApiComponentLevel.mock.calls).not.toBeNull(); - }); - it('should call the LinksGenerator.componentsDependencies function', () => { - bindAction({}); - expect(componentsDependencies.mock.calls).not.toBeNull(); - }); - it('should call the LinksGenerator.publicApiForInlineComponents function', () => { - bindAction({}); - expect(publicApiForInlineComponents.mock.calls).not.toBeNull(); - }); - it('should call the LinksGenerator.publicApiForExportPendingComponents function', () => { - bindAction({}); - expect(publicApiForExportPendingComponents.mock.calls).not.toBeNull(); - }); - it('should call the LinksGenerator.dependenciesForInlineComponents function', () => { - bindAction({}); - expect(dependenciesForInlineComponents.mock.calls).not.toBeNull(); - }); - it('should call the LinksGenerator.publicApiNamespaceLevel function', () => { - bindAction({}); - expect(publicApiNamespaceLevel.mock.calls).not.toBeNull(); - }); - it('should call the LinksGenerator.publicApiRootLevel function', () => { - bindAction({}); - expect(publicApiRootLevel.mock.calls).not.toBeNull(); - }); -}); diff --git a/__tests__/actions/fetch.test.js b/__tests__/actions/fetch.test.js deleted file mode 100644 index 5be8665..0000000 --- a/__tests__/actions/fetch.test.js +++ /dev/null @@ -1,100 +0,0 @@ -const mockFs = require('mock-fs'); -const { readIdsFromBitJson, getIdsFromBitJsonIfNeeded } = require('../../src/actions/fetch'); - -const mockGoodConsumerPath = '/my/good/consumer'; -const mockBadConsumerPath = '/my/bad/consumer'; -const mockBitJson = `{ - "sources": { - "impl": "impl.js", - "spec": "spec.js" - }, - "env": { - "compiler": "bit.envs/compilers/flow::2", - "tester": "bit.envs/testers/mocha::6" - }, - "dependencies": { - "bit.utils/global/is-string": "1", - "bit.utils/string/to-base64": "1", - "bit.utils/global/is-number": "1", - "bit.utils/ssh/parse-url": "1", - "bit.utils/string/remove-new-lines": "1", - "bit.utils/string/from-base64": "1", - "bit.utils/object/merge": "1", - "bit.utils/object/merge-all": "1", - "bit.utils/buffer/from": "15", - "bit.utils/object/values": "1", - "bit.utils/function/compose": "1", - "bit.utils/object/evolve": "2", - "bit.utils/object/group-by": "3", - "bit.utils/object/map": "1", - "bit.utils/array/flat-map": "1" - } -}`; - -const extractedIds = [ - 'bit.utils/global/is-string::1', - 'bit.utils/string/to-base64::1', - 'bit.utils/global/is-number::1', - 'bit.utils/ssh/parse-url::1', - 'bit.utils/string/remove-new-lines::1', - 'bit.utils/string/from-base64::1', - 'bit.utils/object/merge::1', - 'bit.utils/object/merge-all::1', - 'bit.utils/buffer/from::15', - 'bit.utils/object/values::1', - 'bit.utils/function/compose::1', - 'bit.utils/object/evolve::2', - 'bit.utils/object/group-by::3', - 'bit.utils/object/map::1', - 'bit.utils/array/flat-map::1', -]; - -beforeEach(() => { - mockFs({ - [mockGoodConsumerPath]: { - 'bit.json': mockBitJson, - }, - [mockBadConsumerPath]: { - 'bit.json': {}, - }, - }); -}); - -afterEach(() => { - mockFs.restore(); -}); - -describe('readIdsFromBitJson', () => { - it('should read the ids if the bit.json exists', done => - readIdsFromBitJson(mockGoodConsumerPath) - .then((ids) => { - expect(ids).toEqual(extractedIds); - done(); - }).catch(done.fail), - ); - - it('should reject with code INVALJSON if the bit.json is not there or not a valid one', done => - readIdsFromBitJson(mockBadConsumerPath) - .catch((e) => { - expect(e.code).toEqual('INVALJSON'); - done(); - }), - ); -}); - -describe('getIdsFromBitJsonIfNeeded', () => { - it('should get the ids from the bit.json if no ids were supllied', (done) => { - getIdsFromBitJsonIfNeeded([], mockGoodConsumerPath).then((ids) => { - expect(ids).toEqual(extractedIds); - done(); - }).catch(done.fail); - }); - - it('should get return the ids if they supplied', (done) => { - const mockIds = ['bit.utils/global/is-number::1', 'bit.utils/ssh/parse-url::1']; - getIdsFromBitJsonIfNeeded(mockIds, mockGoodConsumerPath).then((ids) => { - expect(ids).toEqual(mockIds); - done(); - }).catch(done.fail); - }); -}); diff --git a/__tests__/components-map/components-map.test.js b/__tests__/components-map/components-map.test.js deleted file mode 100644 index 2015dd6..0000000 --- a/__tests__/components-map/components-map.test.js +++ /dev/null @@ -1,54 +0,0 @@ -import mockFs from 'mock-fs'; -import ComponentsMap from '../../src/maps/components-map'; - -const bitJsonFixture = { - sources: { - impl: 'impl.js', - misc: [], - }, - env: { - compiler: 'none', - tester: 'none', - }, - dependencies: {}, -}; - -const bitJsonValuesFixture = Object.assign({}, bitJsonFixture); -bitJsonValuesFixture.dependencies = { 'bit.utils/object/foreach': '1' }; - -beforeEach(() => { - mockFs({ - 'my/project/.bit': { - 'scope.json': JSON.stringify({ name: 'project' }), - }, - 'my/project/components/compilers/flow/bit.envs/2': { - 'bit.json': JSON.stringify(bitJsonFixture), - }, - 'my/project/components/object/foreach/bit.utils/1': { - 'bit.json': JSON.stringify(bitJsonFixture), - }, - 'my/project/components/object/values/bit.utils/1': { - 'bit.json': JSON.stringify(bitJsonValuesFixture), - }, - 'my/project/components/global/is-number/project/1': { - 'bit.json': JSON.stringify(bitJsonFixture), - }, - 'my/project/inline_components/global/is-string': {}, - }); -}); - -afterEach(() => { - mockFs.restore(); -}); - -describe('build', () => { - it('should create a map from components directory', () => { - return ComponentsMap.create('my/project', {}, 'project').then((componentsMap) => { - const flowComponent = componentsMap._map['compilers/flow/bit.envs']['2']; - expect(flowComponent.name).toEqual('flow'); - expect(flowComponent.namespace).toEqual('compilers'); - expect(flowComponent.scope).toEqual('bit.envs'); - expect(flowComponent.version).toEqual('2'); - }); - }); -}); diff --git a/__tests__/dependency-resloution/dependency.test.js b/__tests__/dependency-resloution/dependency.test.js deleted file mode 100644 index 4971a62..0000000 --- a/__tests__/dependency-resloution/dependency.test.js +++ /dev/null @@ -1,23 +0,0 @@ -import mockFs from 'mock-fs'; -import { getDependencyTree } from '../../src/dependency-builder'; -const vm = jest.genMockFromModule('vm'); -jest.mock('vm'); - -const fileOne = 'import test1 from \'./test2\';'; -const fileTwo = 'import test2 from \'npmPackage\';'; -beforeEach(() => { - mockFs({ - 'my/project/component': { - 'test.js': fileOne, - 'test2.js': fileTwo, - }, - }); -}); -describe('getDependencyTree', () => { - it('should return missing dependency for component', () => { - return getDependencyTree(process.cwd(), 'my/project/component/test.js').then((dependencies) => { - expect(dependencies.missing).toEqual(['npmPackage']); - }); - }); -}); - diff --git a/__tests__/links-generator/links-generator.test.js b/__tests__/links-generator/links-generator.test.js deleted file mode 100644 index 04e3793..0000000 --- a/__tests__/links-generator/links-generator.test.js +++ /dev/null @@ -1,234 +0,0 @@ -import fsMock from 'fs-extra'; -import * as linksGenerator from '../../src/links-generator'; - -jest.mock('fs-extra'); -fsMock.outputFile = jest.fn((file, content, cb) => cb()); - -afterEach(() => { - fsMock.outputFile.mockClear(); -}); - -const mapFixture = { - 'bit.envs/compilers/flow::2': { - loc: 'compilers/flow/bit.envs/2', - file: 'impl.js', - dependencies: [], - isFromLocalScope: true, - }, - 'bit.utils/object/foreach::1': { - loc: 'object/foreach/bit.utils/1', - file: 'dist/dist.js', - dependencies: [], - }, - 'bit.utils/object/values::1': { - loc: 'object/values/bit.utils/1', - file: 'dist/dist.js', - dependencies: ['bit.utils/object/foreach::1'], - }, -}; - -const namespacesMapFixture = { compilers: ['flow'] }; - -const projectBitJsonFixture = { - impl: 'impl.js', - spec: 'spec.js', - misc: [], - compiler: 'none', - tester: 'none', - dependencies: - { 'bit.envs/compilers/flow': '2', 'bit.utils/object/values': '1' }, - packageDepndencies: undefined, - dependencyMap: null, - getDependenciesArray: () => ['bit.envs/compilers/flow::2', 'bit.utils/object/values::1'], -}; - -describe('componentsDependencies', () => { - it('should not create links if there are no dependencies', () => { - const result = linksGenerator.componentsDependencies('dir', {}, {}, {}); - return result.then(() => { - expect(fsMock.outputFile.mock.calls.length).toBe(0); - }); - }); - - it('should generate dependencies links', () => { - const result = linksGenerator.componentsDependencies('/my/project/components', mapFixture, {}, projectBitJsonFixture); - return result.then(() => { - const outputFileCalls = fsMock.outputFile.mock.calls; - expect(outputFileCalls.length).toBe(3); - expect(outputFileCalls[0][0]).toBe('/my/project/components/object/values/bit.utils/1/node_modules/bit/object/foreach/index.js'); - expect(outputFileCalls[0][1]).toBe("module.exports = require('../../../../../../../../object/foreach/bit.utils/1/dist/dist.js');"); - }); - }); -}); - -describe('publicApiComponentLevel', () => { - it('should not generate links if there are no dependencies', () => { - const result = linksGenerator.publicApiComponentLevel('dir', {}, {}); - return result.then(() => { - expect(fsMock.outputFile.mock.calls.length).toBe(0); - }); - }); - it('should generate links', () => { - const result = linksGenerator.publicApiComponentLevel('/my/project/node_modules/bit', mapFixture, projectBitJsonFixture); - return result - .then(() => { - const outputFileCalls = fsMock.outputFile.mock.calls; - - // this makes sure it doesn't generate a link for "foreach" as it's not in the bit.json - expect(outputFileCalls.length).toBe(2); - - expect(outputFileCalls[0][0]).toBe('/my/project/node_modules/bit/compilers/flow/index.js'); - expect(outputFileCalls[0][1]).toBe("module.exports = require('../../../../components/compilers/flow/bit.envs/2/impl.js');"); - - expect(outputFileCalls[1][0]).toBe('/my/project/node_modules/bit/object/values/index.js'); - expect(outputFileCalls[1][1]).toBe("module.exports = require('../../../../components/object/values/bit.utils/1/dist/dist.js');"); - }); - }); -}); - -describe('publicApiForInlineComponents', () => { - const env = process.env.NODE_ENV; - const inlineMapFixture = { 'global/is-string': { loc: 'global/is-string', file: 'impl.js', compiler: 'none' } }; - const inlineMapWithCompilerFixture = { 'global/is-string': - { loc: 'global/is-string', file: 'dist/impl.js', compiler: 'bit.envs/compilers/babel::2' } }; - afterEach(() => { - process.env.NODE_ENV = env; - }); - - it('should not create links if there are no inline components', () => { - const result = linksGenerator.publicApiForInlineComponents('dir', {}); - return result.then(() => { - expect(fsMock.outputFile.mock.calls.length).toBe(0); - }); - }); - - it('should generate public-api links', () => { - const result = linksGenerator.publicApiForInlineComponents('/my/project/node_modules/bit', - inlineMapFixture, '/my/project/inline_components'); - return result.then(() => { - const outputFileCalls = fsMock.outputFile.mock.calls; - expect(outputFileCalls.length).toBe(1); - expect(outputFileCalls[0][0]).toBe('/my/project/node_modules/bit/global/is-string/index.js'); - expect(outputFileCalls[0][1]).toBe("module.exports = require('../../../../inline_components/global/is-string/impl.js');"); - }); - }); - - xit('should generate "register" public-api links when compiler is specified and environment is not prod', () => { - process.env.NODE_ENV = 'dev'; - const result = linksGenerator.publicApiForInlineComponents('/my/project/node_modules/bit', - inlineMapWithCompilerFixture, '/my/project/inline_components'); - return result.then(() => { - const outputFileCalls = fsMock.outputFile.mock.calls; - expect(outputFileCalls.length).toBe(1); - expect(outputFileCalls[0][0]).toBe('/my/project/node_modules/bit/global/is-string/index.js'); - expect(outputFileCalls[0][1]).toBe("module.exports = require('bit-javascript/register-component')('/my/project/inline_components/global/is-string','/my/project/inline_components/global/is-string/dist/impl.js');"); - }); - }); - - it('should NOT generate "register" public-api links when compiler is specified but the environment is production', () => { - process.env.NODE_ENV = 'production'; - const result = linksGenerator.publicApiForInlineComponents('/my/project/node_modules/bit', - inlineMapWithCompilerFixture, '/my/project/inline_components'); - return result.then(() => { - const outputFileCalls = fsMock.outputFile.mock.calls; - expect(outputFileCalls.length).toBe(1); - expect(outputFileCalls[0][0]).toBe('/my/project/node_modules/bit/global/is-string/index.js'); - expect(outputFileCalls[0][1]).toBe("module.exports = require('../../../../inline_components/global/is-string/dist/impl.js');"); - }); - }); -}); - -describe('publicApiRootLevel', () => { - it('should not create links if there are no boxes', () => { - const result = linksGenerator.publicApiRootLevel('dir', []); - return result.then(() => { - expect(fsMock.outputFile.mock.calls.length).toBe(0); - }); - }); - - it('should generate an index.js in the node_modules/bit root', () => { - const result = linksGenerator.publicApiRootLevel('/my/project/node_modules/bit', namespacesMapFixture); - return result.then(() => { - const outputFileCalls = fsMock.outputFile.mock.calls; - expect(outputFileCalls.length).toBe(1); - expect(outputFileCalls[0][0]).toBe('/my/project/node_modules/bit/index.js'); - expect(outputFileCalls[0][1]).toBe(`module.exports = { - compilers: require('./compilers') -};`); - }); - }); -}); - -describe('publicApiNamespaceLevel', () => { - it('should not create links if there are no namespaces', () => { - const result = linksGenerator.publicApiNamespaceLevel('dir', {}); - return result.then(() => { - expect(fsMock.outputFile.mock.calls.length).toBe(0); - }); - }); - - it('should generate an index.js in the node_modules/bit/namespace directory', () => { - const result = linksGenerator.publicApiNamespaceLevel('/my/project/node_modules/bit', namespacesMapFixture); - return result.then(() => { - const outputFileCalls = fsMock.outputFile.mock.calls; - expect(outputFileCalls.length).toBe(1); - expect(outputFileCalls[0][0]).toBe('/my/project/node_modules/bit/compilers/index.js'); - expect(outputFileCalls[0][1]).toBe(`module.exports = { - flow: require('./flow') -};`); - }); - }); -}); - -describe('publicApiForExportPendingComponents', () => { - it('should not generate links if there are no export-pending components', () => { - const result = linksGenerator.publicApiForExportPendingComponents('dir', {}); - return result.then(() => { - expect(fsMock.outputFile.mock.calls.length).toBe(0); - }); - }); - it('should generate links for components with isFromLocalScope = true', () => { - const result = linksGenerator.publicApiForExportPendingComponents('/my/project/node_modules/bit', mapFixture); - return result - .then(() => { - const outputFileCalls = fsMock.outputFile.mock.calls; - expect(outputFileCalls.length).toBe(1); - expect(outputFileCalls[0][0]).toBe('/my/project/node_modules/bit/compilers/flow/index.js'); - expect(outputFileCalls[0][1]).toBe("module.exports = require('../../../../components/compilers/flow/bit.envs/2/impl.js');"); - }); - }); -}); - -describe('dependenciesForInlineComponents', () => { - it('should not generate links if there are no dependencies in the inline-map', () => { - const result = linksGenerator.dependenciesForInlineComponents('dir', {}, {}); - return result.then(() => { - expect(fsMock.outputFile.mock.calls.length).toBe(0); - }); - }); - it('should generate dependencies links for inline components', () => { - const inlineMapFixture = { 'global/is-string': { loc: 'global/is-string', file: 'impl.js', compiler: 'none', dependencies: ['bit.utils/object/foreach::1'] } }; - const result = linksGenerator.dependenciesForInlineComponents('/my/project/inline_components', mapFixture, inlineMapFixture); - return result - .then(() => { - const outputFileCalls = fsMock.outputFile.mock.calls; - expect(outputFileCalls.length).toBe(3); - - // name level - expect(outputFileCalls[0][0]).toBe('/my/project/inline_components/global/is-string/node_modules/bit/object/foreach/index.js'); - expect(outputFileCalls[0][1]).toBe("module.exports = require('../../../../../../../components/object/foreach/bit.utils/1/dist/dist.js');"); - - // namespace level - expect(outputFileCalls[1][0]).toBe('/my/project/inline_components/global/is-string/node_modules/bit/object/index.js'); - expect(outputFileCalls[1][1]).toBe(`module.exports = { - foreach: require('./foreach') -};`); - - // root level - expect(outputFileCalls[2][0]).toBe('/my/project/inline_components/global/is-string/node_modules/bit/index.js'); - expect(outputFileCalls[2][1]).toBe(`module.exports = { - object: require('./object') -};`); - }); - }); -}); diff --git a/__tests__/mocks/bit.1.json b/__tests__/mocks/bit.1.json deleted file mode 100644 index ec4edbf..0000000 --- a/__tests__/mocks/bit.1.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "sources": { - "impl": "impl.js", - "spec": "spec.js" - }, - "env": { - "compiler": "bit.envs/compilers/flow::2", - "tester": "bit.envs/testers/mocha::6" - }, - "dependencies": { - "bit.utils/global/is-string": "1" - } -} diff --git a/__tests__/mocks/bit.2.json b/__tests__/mocks/bit.2.json deleted file mode 100644 index 75f745a..0000000 --- a/__tests__/mocks/bit.2.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "sources": { - "impl": "impl.js", - "spec": "spec.js" - }, - "env": { - "compiler": "bit.envs/compilers/flow::2", - "tester": "bit.envs/testers/mocha::6" - }, - "dependencies": { - "bit.utils/global/is-string": "1", - "bit.utils/string/to-base64": "1", - "bit.utils/global/is-number": "1", - "bit.utils/ssh/parse-url": "1", - "bit.utils/string/remove-new-lines": "1", - "bit.utils/string/from-base64": "1", - "bit.utils/object/merge": "1", - "bit.utils/object/merge-all": "1", - "bit.utils/buffer/from": "15", - "bit.utils/object/values": "1", - "bit.utils/function/compose": "1", - "bit.utils/object/evolve": "2", - "bit.utils/object/group-by": "3", - "bit.utils/object/map": "1", - "bit.utils/array/flat-map": "1" - } -} diff --git a/__tests__/mocks/bit.empty.json b/__tests__/mocks/bit.empty.json deleted file mode 100644 index 862973b..0000000 --- a/__tests__/mocks/bit.empty.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "sources": { - "impl": "impl.js", - "spec": "spec.js" - }, - "env": { - "compiler": "none", - "tester": "none" - }, - "dependencies": {} -} diff --git a/__tests__/register-component/register-component.spec.js b/__tests__/register-component/register-component.spec.js deleted file mode 100644 index ade2f30..0000000 --- a/__tests__/register-component/register-component.spec.js +++ /dev/null @@ -1,81 +0,0 @@ -import mockFs from 'mock-fs'; -import * as componentResolverMock from 'bit-scope-client/component-resolver'; -import BitJsonMock from 'bit-scope-client/bit-json'; -import registerComponent from '../../src/register-component'; - -jest.mock('bit-scope-client/bit-json'); -jest.mock('bit-scope-client/component-resolver'); -jest.mock('console'); - -const bitJsonFixture = { compiler: 'bit.envs/compilers/babel::2', impl: 'impl.js' }; -const implementationCodeFixture = 'export function foo() {}'; -const compiledCodeFixture = 'module.exports = function foo() { return \'bar\'; }'; - -let consoleErrorMock; -beforeEach(() => { - consoleErrorMock = jest.fn(() => ''); - console.error = consoleErrorMock; - BitJsonMock.load = jest.fn(() => (bitJsonFixture)); -}); - -afterEach(() => { - mockFs.restore(); - componentResolverMock.default.mockClear(); - BitJsonMock.load.mockClear(); - console.error.mockClear(); -}); - - -describe.skip('registerComponent', () => { - it('should require the compiled implementation', () => { - mockFs({ - '/my/path/inline_components/global/is-string': { - 'impl.js': implementationCodeFixture, - dist: { - 'impl.js': '', - }, - }, - '/my/path/components/compilers/babel/bit.envs/2': { - 'impl.js': `module.exports = { compile: () => { return { code: "${compiledCodeFixture}" }; } }`, - }, - }); - componentResolverMock.default = jest.fn(() => '/my/path/components/compilers/babel/bit.envs/2/impl.js'); - const foo = registerComponent('/my/path/inline_components/global/is-string', '/my/path/inline_components/global/is-string/dist/impl.js'); - expect(typeof foo).toBe('function'); - expect(foo()).toBe('bar'); - }); - - it('should work also when the dist folder is not there (component have never built)', () => { - mockFs({ - '/my/path/inline_components/global/is-string': { - 'impl.js': implementationCodeFixture, - }, - '/my/path/components/compilers/babel/bit.envs/2': { - 'impl.js': `module.exports = { compile: () => { return { code: "${compiledCodeFixture}" }; } }`, - }, - }); - componentResolverMock.default = jest.fn(() => '/my/path/components/compilers/babel/bit.envs/2/impl.js'); - const foo = registerComponent('/my/path/inline_components/global/is-string', '/my/path/inline_components/global/is-string/dist/impl.js'); - expect(typeof foo).toBe('function'); - expect(foo()).toBe('bar'); - }); - - it('should console error with the component path when there are not component files', () => { - mockFs({ }); - const foo = registerComponent('/my/path/inline_components/global/is-string', '/my/path/inline_components/global/is-string/dist/impl.js'); - expect(consoleErrorMock.mock.calls[0][0].includes('/my/path/inline_components/global/is-string')).toBeTruthy(); - expect(foo).toBeNull(); - }); - - it('should console error with the compiler-id when the compiler was not found', () => { - mockFs({ - '/my/path/inline_components/global/is-string': { - 'impl.js': implementationCodeFixture, - }, - }); - componentResolverMock.default = jest.fn(() => { throw new Error(); }); - const foo = registerComponent('/my/path/inline_components/global/is-string', '/my/path/inline_components/global/is-string/dist/impl.js'); - expect(consoleErrorMock.mock.calls[0][0].includes('bit.envs/compilers/babel::2')).toBeTruthy(); - expect(foo).toBeNull(); - }); -}); diff --git a/legacy/directories/abstract-link.js b/legacy/directories/abstract-link.js deleted file mode 100644 index 25759e4..0000000 --- a/legacy/directories/abstract-link.js +++ /dev/null @@ -1,19 +0,0 @@ -// @flow -import { writeFileP } from '../utils'; - -export default class AbstractLink { - from: string; - - constructor(from: string) { - this.from = from; - } - - // $FlowFixMe - get template() { // eslint-disable-line - throw new Error('must implement'); - } - - async persist(): Promise<*> { - return writeFileP(this.from, this.template); - } -} diff --git a/legacy/directories/bit-module-directory.js b/legacy/directories/bit-module-directory.js deleted file mode 100644 index aa805cb..0000000 --- a/legacy/directories/bit-module-directory.js +++ /dev/null @@ -1,108 +0,0 @@ -// @flow -import R from 'ramda'; -import path from 'path'; -import { BitId as ComponentId } from '../bit-id'; -import LinksDirectory from './links-directory'; -import Component from '../maps/component'; -import { InlineComponentsMap, ComponentsMap } from '../maps'; -import InlineComponent from '../maps/inline-component'; -import Link from './link'; -import MultiLink from './multi-link'; -import { - INLINE_COMPONENTS_DIRNAME, - COMPONENTS_DIRNAME, - COMPONENT_ORIGINS, - MODULES_DIR, - MODULE_NAME, - INDEX_JS, -} from '../constants'; - -const bitModuleRelativePath = path.join(MODULES_DIR, MODULE_NAME); - -export default class BitModuleDirectory extends LinksDirectory { - linkedComponents: Component[]; - - constructor(rootPath: string) { - super(rootPath, bitModuleRelativePath); - this.linkedComponents = []; - } - - getComponentFilePath({ name, namespace }: { name: string, namespace: string }) { - return path.join(this.path, namespace, name, INDEX_JS); - } - - getNamespaceFilePath(namespace: string) { - return path.join(this.path, namespace, INDEX_JS); - } - - async addNamespaceLinks(componentsMap: ComponentsMap) { - componentsMap.forEachNamespace((namespace: string, components: Component[]) => { - this.addLink( - MultiLink.create({ - from: this.getNamespaceFilePath(namespace), - names: R.uniq(components.map(c => c.name)), - }), - ); - }); - } - - addLinksFromBitMap(componentsMap) { - const directDependencies = Object.keys(componentsMap) - .filter(component => componentsMap[component].origin !== COMPONENT_ORIGINS.NESTED); - const components = directDependencies.map((componentId) => { - const componentIdParsed = ComponentId.parse(componentId); - const sourceFile = this.getComponentFilePath({ - name: componentIdParsed.name, - namespace: componentIdParsed.box, - }); - - const mainFilePath = componentsMap[componentId].mainDistFile || componentsMap[componentId].mainFile; - - if (!mainFilePath) { - // todo: log a warning - return null; - } - - const destFile = path.join(this.rootPath, mainFilePath); - - this.addLink( - Link.create({ - from: sourceFile, - to: destFile, - }), - ); - return { - namespace: componentIdParsed.box, - name: componentIdParsed.name, - scope: componentIdParsed.scope, - version: componentIdParsed.version, - }; - }); - this.linkedComponents = this.linkedComponents.concat(components); - return components; - } - - addLinksForNamespacesAndRoot() { - if (!this.linkedComponents.length) return; - const namespaceMap = {}; - this.linkedComponents.forEach((component) => { - if (namespaceMap[component.namespace]) namespaceMap[component.namespace].push(component.name); - else namespaceMap[component.namespace] = [component.name]; - }); - - Object.keys(namespaceMap).forEach((namespace) => { - this.addLink( - MultiLink.create({ - from: path.join(this.path, namespace, INDEX_JS), - names: namespaceMap[namespace], - }), - ); - }); - this.addLink( - MultiLink.create({ - from: path.join(this.path, INDEX_JS), - names: Object.keys(namespaceMap), - }), - ); - } -} diff --git a/legacy/directories/components-directory.js b/legacy/directories/components-directory.js deleted file mode 100644 index af66103..0000000 --- a/legacy/directories/components-directory.js +++ /dev/null @@ -1,94 +0,0 @@ -// @flow -import path from 'path'; -import R from 'ramda'; -import { BitId as ComponentId } from '../bit-id'; -import LinksDirectory from './links-directory'; -import { MODULES_DIR, MODULE_NAME, INDEX_JS } from '../constants'; -import type { ComponentMap } from '../bit-map/bit-map'; -import Link from './link'; -import MultiLink from './multi-link'; - -export default class ComponentsDirectory extends LinksDirectory { - - getComponentFilePath({ name, namespace, parentComponent }: { - name: string, namespace: string, parentComponent: ComponentMap, - }): string { - return path.join( - this.rootPath, - parentComponent.path, - MODULES_DIR, - MODULE_NAME, - namespace, - name, - INDEX_JS, - ); - } - - addLinksForNamespacesAndRoot(dependencies, parentComponent) { - dependencies = R.reject(R.isNil, dependencies); // eslint-disable-line - if (!dependencies.length) return; - const namespaceMap = {}; - dependencies.forEach((component) => { - if (namespaceMap[component.namespace]) namespaceMap[component.namespace].push(component.name); - else namespaceMap[component.namespace] = [component.name]; - }); - Object.keys(namespaceMap).forEach((namespace) => { - const namespacePath = path.join(this.rootPath, parentComponent.path, MODULES_DIR, MODULE_NAME, - namespace, INDEX_JS, - ); - this.addLink( - MultiLink.create({ - from: namespacePath, - names: namespaceMap[namespace], - }), - ); - }); - const rootPath = path.join(this.rootPath, parentComponent.path, MODULES_DIR, MODULE_NAME, INDEX_JS); - this.addLink( - MultiLink.create({ - from: rootPath, - names: Object.keys(namespaceMap), - }), - ); - } - - addLinksToDependencies(componentsMap: ComponentMap[]): void { - Object.keys(componentsMap).forEach((parentComponentId: string) => { - const parentComponent: ComponentMap = componentsMap[parentComponentId]; - if (!parentComponent.dependencies) return; - const parentMainFile = parentComponent.files[parentComponent.mainFile]; - parentComponent.path = parentComponent.rootDir || path.dirname(parentMainFile); - const dependencies = parentComponent.dependencies.map((dependencyIdStr: string) => { - const dependencyId = ComponentId.parse(dependencyIdStr); - const dependency = componentsMap[dependencyIdStr]; - if (!dependency) return null; // todo: log error - - const sourceFile = this.getComponentFilePath({ - parentComponent, - name: dependencyId.name, - namespace: dependencyId.box, - }); - - const dependencyMainFile = dependency.mainDistFile || dependency.mainFile; - const destFile = path.join( - this.rootPath, - dependencyMainFile, - ); - - this.addLink( - Link.create({ - from: sourceFile, - to: destFile, - }), - ); - return { - namespace: dependencyId.box, - name: dependencyId.name, - scope: dependencyId.scope, - version: dependencyId.version, - }; - }); - this.addLinksForNamespacesAndRoot(dependencies, parentComponent); - }); - } -} diff --git a/legacy/directories/index.js b/legacy/directories/index.js deleted file mode 100644 index 9d16441..0000000 --- a/legacy/directories/index.js +++ /dev/null @@ -1,9 +0,0 @@ -import LinksDirectory from './links-directory'; -import ComponentsDirectory from './components-directory'; -import BitModuleDirectory from './bit-module-directory'; - -export { - LinksDirectory, - BitModuleDirectory, - ComponentsDirectory, -}; diff --git a/legacy/directories/link.js b/legacy/directories/link.js deleted file mode 100644 index e76e405..0000000 --- a/legacy/directories/link.js +++ /dev/null @@ -1,24 +0,0 @@ -// @flow -import path from 'path'; -import AbstractLink from './abstract-link'; - -export default class Link extends AbstractLink { - to: string; - - constructor(from: string, to: string) { - super(from); - this.to = to; - } - - get relativeDestination(): string { - return path.relative(path.dirname(this.from), this.to); - } - - get template(): string { - return `module.exports = require('${this.relativeDestination}');`; - } - - static create({ from, to }: { from: string, to: string }): Link { - return new Link(from, to); - } -} diff --git a/legacy/directories/links-directory.js b/legacy/directories/links-directory.js deleted file mode 100644 index abfabb7..0000000 --- a/legacy/directories/links-directory.js +++ /dev/null @@ -1,36 +0,0 @@ -// @flow -import R from 'ramda'; -import path from 'path'; -import AbstractLink from './abstract-link'; -import { removeDirP } from '../utils'; - - -export default class Directory { - rootPath: string; - relativePath: string; - links: {[string]: AbstractLink}; - - constructor(rootPath: string, relativePath: string) { - this.rootPath = rootPath; - this.relativePath = relativePath; - this.links = {}; - } - - get path(): string { - return path.join(this.rootPath, this.relativePath); - } - - addLink(link: AbstractLink): boolean { - if (Object.hasOwnProperty.call(this.links, link.from)) return false; - this.links[link.from] = link; - return true; - } - - async persist(): Promise { - return Promise.all(R.values(this.links).map(link => link.persist())); - } - - async erase(): Promise { - return removeDirP(this.path); - } -} diff --git a/legacy/directories/multi-link.js b/legacy/directories/multi-link.js deleted file mode 100644 index 4a69059..0000000 --- a/legacy/directories/multi-link.js +++ /dev/null @@ -1,24 +0,0 @@ -// @flow -import path from 'path'; -import camelcase from 'camelcase'; -import AbstractLink from './abstract-link'; - -export default class MultiLink extends AbstractLink { - names: string[]; - - constructor(from: string, names: string[]) { - super(from); - this.names = names; - } - - get template(): string { - const links = this.names.map(name => `${camelcase(name)}: require('.${path.sep}${name}')`); - return `module.exports = { - ${links.join(',\n ')} -};`; - } - - static create({ from, names }: { from: string, names: string[] }): MultiLink { - return new MultiLink(from, names); - } -} diff --git a/legacy/maps/component.js b/legacy/maps/component.js deleted file mode 100644 index e384ebf..0000000 --- a/legacy/maps/component.js +++ /dev/null @@ -1,56 +0,0 @@ -// @flow -import path from 'path'; - -export default class Component { - name: string; - namespace: string; - scope: string; - version: string; - file: string; - compiler: string; - dependencies: string[]; - isLocal: boolean; - - constructor({ name, namespace, scope, version, file, compiler, dependencies, isLocal }: { - name: string, - namespace: string, - scope: string, - version: string, - file: string, - compiler: string, - dependencies: string[], - isLocal: boolean, - }) { - this.name = name; - this.namespace = namespace; - this.scope = scope; - this.version = version; - this.file = file; - this.compiler = compiler; - this.dependencies = dependencies; - this.isLocal = isLocal; - } - - get path(): string { - return path.join(this.namespace, this.name, this.scope, this.version); - } - - get filePath(): string { - return path.join(this.path, this.file); - } - - static create({ loc, file, compiler, dependencies, localScopeName }): Component { - const [namespace, name, scope, version] = loc.split(path.sep); - const isLocal = localScopeName === scope; - return new Component({ - name, - namespace, - scope, - version, - file, - compiler, - dependencies, - isLocal, - }); - } -} diff --git a/legacy/maps/components-map.js b/legacy/maps/components-map.js deleted file mode 100644 index 53cd6e1..0000000 --- a/legacy/maps/components-map.js +++ /dev/null @@ -1,111 +0,0 @@ -// @flow -import R from 'ramda'; -import glob from 'glob'; -import path from 'path'; -import BitId from '../bit-id/bit-id'; -import BitJson from 'bit-scope-client/bit-json'; -import { COMPONENTS_DIRNAME, LATEST_VERSION, REMOTE_ALIAS_SIGN } from '../constants'; -import Component from './component'; - -export default class ComponentsMap { - targetDir: string; - projectBitJson: BitJson; - _map: { string?: { [string]: Component } }; - scopeName: ?string; - - constructor(targetDir: string, projectBitJson: BitJson, localScopeName: ?string) { - this.targetDir = targetDir; - this.projectBitJson = projectBitJson; - this.scopeName = localScopeName; - this._map = {}; - } - - addComponent(loc: string, bitJson: BitJson) { - const separatorLocation = loc.lastIndexOf('/'); - const base = loc.slice(0, separatorLocation); - const version = loc.slice(separatorLocation + 1); - - if (!this._map[base]) this._map[base] = {}; - - this._map[base][version] = Component.create({ - loc, - file: bitJson.getRequiredFile(), - compiler: bitJson.compiler, - dependencies: bitJson.getDependenciesArray(), - localScopeName: this.scopeName, - }); - } - - build(): Promise { - return new Promise((resolve, reject) => { - glob('*/*/*/*', { cwd: this.targetDir }, (err, files) => { - if (err) return reject(err); - files.forEach((loc) => { - const componentPath = path.join(this.targetDir, loc); - const bitJson = BitJson.load(componentPath, this.projectBitJson); - this.addComponent(loc, bitJson); - }); - - return resolve(this); - }); - }); - } - - getComponent(componentId: BitId): ?Component { - const scope = componentId.scope.startsWith(REMOTE_ALIAS_SIGN) ? - componentId.scope.replace(REMOTE_ALIAS_SIGN, '') : componentId.scope; - const base = `${componentId.box}/${componentId.name}/${scope}`; - const version = componentId.version; - if (version === LATEST_VERSION) return this.getLatestComponent(base); - if (!Object.hasOwnProperty.call(this._map, base)) return null; - if (!Object.hasOwnProperty.call(this._map[base], version)) return null; - return this._map[base][version]; - } - - getLatestComponent(baseId: string): ?Component { - if (!Object.hasOwnProperty.call(this._map, baseId)) return null; - if (R.isEmpty(this._map[baseId])) return null; - - const maxInArr = R.reduce(R.max, null); - const castArrToNumber = R.map(s => parseInt(s, 10)); - const versionsArr = castArrToNumber(R.keys(this._map[baseId])); - const maxVersion = maxInArr(versionsArr).toString(); - - return this._map[baseId][maxVersion]; - } - - forEach(func: Function): void { - R.mapObjIndexed((versionsObj) => { - R.mapObjIndexed((component) => { - func(component); - }, versionsObj); - }, this._map); - } - - map(func: Function): Component[] { - return R.mapObjIndexed(versionsObj => - R.mapEachObjIndexed(component => - func(component), - versionsObj), - this._map); - } - - getLatestComponents(): Component[] { - const baseIds = R.keys(this._map); - return baseIds.map(this.getLatestComponent.bind(this)); - } - - getLatestStagedComponents(): Component[] { - return this.getLatestComponents().filter(c => c.isLocal); - } - - isEmpty() { - return !this._map || R.isEmpty(this._map); - } - - static async create(projectRoot, projectBitJson, localScopeName): Promise { - const componentsDir = path.join(projectRoot, COMPONENTS_DIRNAME); - const map = new ComponentsMap(componentsDir, projectBitJson, localScopeName); - return map.build(); - } -} diff --git a/legacy/maps/index.js b/legacy/maps/index.js deleted file mode 100644 index 179fdc5..0000000 --- a/legacy/maps/index.js +++ /dev/null @@ -1,7 +0,0 @@ -import InlineComponentsMap from './inline-components-map'; -import ComponentsMap from './components-map'; - -export { - InlineComponentsMap, - ComponentsMap, -}; diff --git a/legacy/maps/inline-component.js b/legacy/maps/inline-component.js deleted file mode 100644 index 83e42cd..0000000 --- a/legacy/maps/inline-component.js +++ /dev/null @@ -1,33 +0,0 @@ -// @flow -import path from 'path'; - -export default class InlineComponent { - name: string; - namespace: string; - file: string; - compiler: string; - dependencies: string[]; - - constructor({ name, namespace, file, compiler, dependencies }: { - name: string, namespace: string, file: string, compiler: string, dependencies: string[] - }) { - this.name = name; - this.namespace = namespace; - this.file = file; - this.compiler = compiler; - this.dependencies = dependencies; - } - - get path(): string { - return path.join(this.namespace, this.name); - } - - get filePath(): string { - return path.join(this.path, this.file); - } - - static create({ loc, file, compiler, dependencies }): InlineComponent { - const [namespace, name] = loc.split(path.sep); - return new InlineComponent({ name, namespace, file, compiler, dependencies }); - } -} diff --git a/legacy/maps/inline-components-map.js b/legacy/maps/inline-components-map.js deleted file mode 100644 index f6fcbb1..0000000 --- a/legacy/maps/inline-components-map.js +++ /dev/null @@ -1,76 +0,0 @@ -// @flow -import R from 'ramda'; -import glob from 'glob'; -import path from 'path'; -import BitJson from 'bit-scope-client/bit-json'; -import { INLINE_COMPONENTS_DIRNAME } from '../constants'; -import InlineComponent from './inline-component'; - -export default class InlineComponentsMap { - targetDir: string; - projectBitJson: BitJson; - _map: { string?: ?InlineComponent }; - - constructor(targetDir: string, projectBitJson: BitJson) { - this.targetDir = targetDir; - this.projectBitJson = projectBitJson; - this._map = {}; - } - - addComponent(id: string, bitJson: BitJson) { - this._map[id] = InlineComponent.create({ - loc: id, - file: bitJson.getRequiredFile(), - compiler: bitJson.compiler, - dependencies: bitJson.getDependenciesArray(), - }); - } - - build(): Promise { - return new Promise((resolve, reject) => { - glob('*/*', { cwd: this.targetDir }, (err, files) => { - if (err) return reject(err); - files.forEach((loc) => { - const componentPath = path.join(this.targetDir, loc); - let bitJson; - try { - bitJson = BitJson.loadIfExists(componentPath); - } catch (e) { - bitJson = BitJson.load(componentPath, this.projectBitJson); - bitJson.dependencies = []; - } - this.addComponent(loc, bitJson); - }); - - return resolve(this); - }); - }); - } - - getComponent(id: string) { - if (!Object.hasOwnProperty.call(this._map, id)) return null; - return this._map[id]; - } - - map(func: Function): any[] { - return Object.keys(this._map).map((key: string, index: number) => - func(this._map[key], key, index), - ); - } - - forEach(func: Function): void { - return Object.keys(this._map).forEach((key: string, index: number) => - func(this._map[key], key, index), - ); - } - - isEmpty() { - return !this._map || R.isEmpty(this._map); - } - - static async create(projectRoot, projectBitJson): Promise { - const inlineComponentsDir = path.join(projectRoot, INLINE_COMPONENTS_DIRNAME); - const map = new InlineComponentsMap(inlineComponentsDir, projectBitJson); - return map.build(); - } -} diff --git a/legacy/register-component/index.js b/legacy/register-component/index.js deleted file mode 100644 index ec2323b..0000000 --- a/legacy/register-component/index.js +++ /dev/null @@ -1,3 +0,0 @@ -import registerComponent from './register-component'; - -module.exports = registerComponent; diff --git a/legacy/register-component/register-component.js b/legacy/register-component/register-component.js deleted file mode 100644 index fc878ae..0000000 --- a/legacy/register-component/register-component.js +++ /dev/null @@ -1,51 +0,0 @@ -// @flow -import fs from 'fs-extra'; -import path from 'path'; -import chalk from 'chalk'; -import requireFromString from 'require-from-string'; -import BitJson from 'bit-scope-client/bit-json'; -import componentResolver from 'bit-scope-client/component-resolver'; - -class CompilerError extends Error { - compilerId: string; - constructor(compilerId: string) { - super(); - this.compilerId = compilerId; - } -} -class CompilerNotFound extends CompilerError {} -class InvalidCompiler extends CompilerError {} - -function requireCompiledSource(componentDir: string, distFile: string): string { - const bitJson = BitJson.load(componentDir); - const compilerId = bitJson.compiler; - const implFile = path.join(componentDir, bitJson.impl); - let compilerPath: string; - const implFileContent = fs.readFileSync(implFile); - try { - compilerPath = componentResolver(compilerId); - } catch (err) { - throw new CompilerNotFound(compilerId); - } - const compiler = require(compilerPath); // eslint-disable-line - if (!compiler.compile) throw new InvalidCompiler(compilerId); - const src = compiler.compile(implFileContent); - fs.outputFileSync(distFile, src.code); - return requireFromString(src.code); -} - -export default function registerComponent(componentDir: string, distFile: string): string { - try { - return requireCompiledSource(componentDir, distFile); - } catch (err) { - if (err instanceof CompilerNotFound) { - const cmd = chalk.bold(`bit import ${err.compilerId} --compiler --save`); - console.error(chalk.red(`your compiler ${err.compilerId} was not found. Please install it by running ${cmd}`)); // eslint-disable-line - } else if (err instanceof InvalidCompiler) { - console.error(chalk.red(`"${err.compilerId}" does not have a valid compiler interface, it has to return a compile method`)); // eslint-disable-line - } else { - console.error(chalk.red(`An error has been found while compiling your inline-component at ${componentDir} \n`), err); // eslint-disable-line - } - return null; - } -} diff --git a/mocks/response-mock.js b/mocks/response-mock.js deleted file mode 100644 index 77ed960..0000000 --- a/mocks/response-mock.js +++ /dev/null @@ -1,2 +0,0 @@ -/* eslint-disable */ -module.exports = [{"headers":{"version":"0.5.0"},"payload":[{"component":{"scope":"bit.promise","name":"promisify","box":"global","impl":{"file":"/** @flow */\n\n/**\n * Returns a function that will wrap the given node function with a promise. \n * Instead of taking a callback, the returned function will return a promise whose resolved in case \n * the second node function argument is falsy, in case the promise is resolved the \n * first argument will be passed.\n * The node function should conform to node.js convention of accepting a callback as last * * \n * argument and calling that callback with error as the first argument and success value \n * on the second argument. \n * @name promisify\n * @param {function} fn function to be wrapped as promise.\n * @returns {function} promisfied function\n * @example\n * ```js\n * const read = promisify(fs.readFile);\n * read('/path/to/file')\n * .then(data => console.log(data))\n * .catch(err => console.error(err));\n * ```\n */\nmodule.exports = function promisify(fn: (...args: any[]) => any) {\n return (...args: any[]): Promise => {\n return new Promise((resolve, reject) => {\n fn(...args, (err, res) => {\n if (err) return reject(err);\n return resolve(res);\n });\n });\n };\n};\n","name":"impl.js"},"specs":{"file":"import { expect } from 'chai';\n\nconst promisify = require(__impl__);\n\ndescribe('#promisify', () => {\n it('should wrap errFn with a promise and expect a failure', () => {\n const errFn = (cb) => {\n cb(new Error());\n };\n\n promisify(errFn)().catch((err) => {\n expect(err).to.deep.equal(new Error());\n });\n });\n\n it('should wrap dataFn with a promise and expect string `foo`', () => {\n const dataFn = (cb) => {\n cb(null, 'foo');\n };\n\n promisify(dataFn)().then(str => expect(str).to.equal('foo'));\n });\n});\n","name":"spec.js"},"dist":{"file":"{\"src\":\"\\\"use strict\\\";\\n\\nfunction _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }\\n\\n/**\\n * Returns a function that will wrap the given node function with a promise. \\n * Instead of taking a callback, the returned function will return a promise whose resolved in case \\n * the second node function argument is falsy, in case the promise is resolved the \\n * first argument will be passed.\\n * The node function should conform to node.js convention of accepting a callback as last * * \\n * argument and calling that callback with error as the first argument and success value \\n * on the second argument. \\n * @name promisify\\n * @param {function} fn function to be wrapped as promise.\\n * @returns {function} promisfied function\\n * @example\\n * ```js\\n * const read = promisify(fs.readFile);\\n * read('/path/to/file')\\n * .then(data => console.log(data))\\n * .catch(err => console.error(err));\\n * ```\\n */module.exports = function promisify(fn) {\\n return function () {\\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\\n args[_key] = arguments[_key];\\n }\\n\\n return new Promise(function (resolve, reject) {\\n fn.apply(undefined, _toConsumableArray(args).concat([function (err, res) {\\n if (err) return reject(err);\\n return resolve(res);\\n }]));\\n });\\n };\\n};\",\"mappings\":\";;;;AAEA;;;;;;;;;;;;;;;;;;GAmBAA,OAAOC,OAAP,GAAiB,SAASC,SAAT,CAAmBC,EAAnB,EAAgD;AAC/D,SAAO,YAAkC;AAAA,sCAA9BC,IAA8B;AAA9BA,UAA8B;AAAA;;AACvC,WAAO,IAAIC,OAAJ,CAAY,UAACC,OAAD,EAAUC,MAAV,EAAqB;AACtCJ,6CAAMC,IAAN,UAAY,UAACI,GAAD,EAAMC,GAAN,EAAc;AACxB,YAAID,GAAJ,EAAS,OAAOD,OAAOC,GAAP,CAAP;AACT,eAAOF,QAAQG,GAAR,CAAP;AACD,OAHD;AAID,KALM,CAAP;AAMD,GAPD;AAQD,CATD\"}","name":"dist.js"},"compiler":"bit.envs/compilers/flow::latest","tester":"bit.envs/testers/mocha-chai::latest","log":{"message":"initial commit","date":"1487255358963","username":"Ran Mizrahi","email":"ran@cocycles.com"},"dependencies":[],"docs":[{"name":"promisify","description":"Returns a function that will wrap the given node function with a promise. \nInstead of taking a callback, the returned function will return a promise whose resolved in case \nthe second node function argument is falsy, in case the promise is resolved the \nfirst argument will be passed.\nThe node function should conform to node.js convention of accepting a callback as last * * \nargument and calling that callback with error as the first argument and success value \non the second argument.","args":[{"description":"function to be wrapped as promise.","type":"function","name":"fn"}],"returns":{"description":"promisfied function","type":"function"},"access":"public","examples":[{"raw":"```js\n const read = promisify(fs.readFile);\n read('/path/to/file')\n .then(data => console.log(data))\n .catch(err => console.error(err));\n```","code":"```js\nconst read = promisify(fs.readFile);\nread('/path/to/file')\n.then(data => console.log(data))\n.catch(err => console.error(err));\n```"}],"static":false}],"ci":{"startTime":"1491156555230","endTime":"1491156638041"},"specsResults":{"tests":[{"title":"#promisify should wrap errFn with a promise and expect a failure","pass":true,"err":null,"duration":3},{"title":"#promisify should wrap dataFn with a promise and expect string `foo`","pass":true,"err":null,"duration":0}],"stats":{"start":"2017-04-02T18:10:37.954Z","end":"2017-04-02T18:10:37.975Z","duration":21},"pass":true},"flattenedDependencies":[],"packageDependencies":{},"version":"1"},"dependencies":[]}]},{"headers":{"version":"0.5.0"},"payload":[{"component":{"scope":"bit.utils","name":"values","box":"object","impl":{"file":"/** @flow */\nimport bit from 'bit-js';\n\nconst forEach = bit('object/foreach');\n\n/**\n * get all object values.\n * @name values\n * @param {object} object\n * @returns {[]} object's values\n * @example\n * ```js\n * values({ a: 1, b: 2, c: 3 }) // => [1, 2, 3]\n * ```\n */\nmodule.exports = function values(object: {[any]: any}): any[] {\n const objValues = [];\n forEach(object, val => objValues.push(val)); \n return objValues;\n};\n","name":"impl.js"},"specs":{"file":"import { expect } from 'chai';\nimport bit from 'bit-js';\n\nbit.mockComponents({\n 'object/foreach': (obj, fn) => fn('foo')\n});\n\nconst values = require(__impl__);\n\nconst mock = { \n a: 'foo',\n b: 'bar'\n};\n\ndescribe('#values()', () => {\n it('should return values `foo` from object', () => {\n expect(values(mock)).to.deep.equal(['foo']);\n });\n});\n","name":"spec.js"},"dist":{"file":"{\"src\":\"'use strict';\\n\\nvar _bitJs = require('bit-js');\\n\\nvar _bitJs2 = _interopRequireDefault(_bitJs);\\n\\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\\n\\nvar forEach = (0, _bitJs2.default)('object/foreach');\\n\\n/**\\n * get all object values.\\n * @name values\\n * @param {object} object\\n * @returns {[]} object's values\\n * @example\\n * ```js\\n * values({ a: 1, b: 2, c: 3 }) // => [1, 2, 3]\\n * ```\\n */\\n\\nmodule.exports = function values(object) {\\n var objValues = [];\\n forEach(object, function (val) {\\n return objValues.push(val);\\n });\\n return objValues;\\n};\",\"mappings\":\";;AACA;;;;;;AAEA,IAAMA,UAAU,qBAAI,gBAAJ,CAAhB;;AAEA;;;;;;;;;;;AAUAC,OAAOC,OAAP,GAAiB,SAASC,MAAT,CAAgBC,MAAhB,EAA6C;AAC5D,MAAMC,YAAY,EAAlB;AACAL,UAAQI,MAAR,EAAgB;AAAA,WAAOC,UAAUC,IAAV,CAAeC,GAAf,CAAP;AAAA,GAAhB;AACA,SAAOF,SAAP;AACD,CAJD\"}","name":"dist.js"},"compiler":"bit.envs/compilers/flow::latest","tester":"bit.envs/testers/mocha-chai::latest","log":{"message":"initial commit","date":"1487178628236","username":"Ran Mizrahi","email":"ran@cocycles.com"},"dependencies":["bit.utils/object/foreach::1"],"docs":[{"name":"values","description":"get all object values.","args":[{"description":null,"type":"object","name":"object"}],"returns":{"description":"object's values","type":"[]"},"access":"public","examples":[{"raw":"```js\n values({ a: 1, b: 2, c: 3 }) // => [1, 2, 3]\n```","code":"```js\nvalues({ a: 1, b: 2, c: 3 }) // => [1, 2, 3]\n```"}],"static":false}],"ci":{"startTime":"1491156515124","endTime":"1491156538014","error":{"errno":-2,"code":"NPM_INSTALL_ERR","syscall":"access","path":"/tmp/scope/node_modules/camelcase","name":"Error","message":"ENOENT: no such file or directory, access '/tmp/scope/node_modules/camelcase'","stack":"Error: ENOENT: no such file or directory, access '/tmp/scope/node_modules/camelcase'"}},"specsResults":{"tests":[{"title":"#values() should return values `foo` from object","pass":true,"err":null,"duration":2}],"stats":{"start":"2017-04-02T08:48:11.697Z","end":"2017-04-02T08:48:11.704Z","duration":7},"pass":true},"flattenedDependencies":["bit.utils/object/foreach::1"],"packageDependencies":{},"version":"1"},"dependencies":[{"scope":"bit.utils","name":"foreach","box":"object","impl":{"file":"/** @flow */\nexport type CbFn = (val: any, key: string|number) => void;\n\n/**\n * invoke `cb` function for every key within given object or array.\n * @name forEach\n * @param {object} obj object or array to iterate \n * @param {function} cb callback function to invoke\n * @example \n * ```js\n * forEach({ a: 1, b: 2, c: 3 }, (val, key) => console.log(key, val));\n * // => a 1 b 2 c 3\n * ```\n */\nmodule.exports = function forEach(obj: {[string|number]: any}, cb: CbFn) {\n const keys = Object.keys(obj);\n keys.forEach(key => cb(obj[key], key));\n};\n","name":"impl.js"},"specs":{"file":"import { expect } from 'chai';\n\nconst forEach = require(__impl__);\n\ndescribe('#forEach()', () => {\n const mock = {\n a: 1,\n b: 2,\n c: 3\n };\n\n const mockArray = ['a', 'b', 'c', 'd'];\n\n it('should invoke `cb` for every key within given object', () => {\n const targetKeys = Object.keys(mock);\n const invokedKeys = [];\n\n forEach(mock, (val, key) => {\n invokedKeys.push(key);\n });\n\n expect(targetKeys).to.deep.equal(targetKeys);\n });\n\n it('should invoke `cb` for every key within given array', () => {\n const arrKeys = Object.keys(mockArray);\n const invokedKeys = [];\n\n forEach(mockArray, (val, key) => {\n invokedKeys.push(key);\n });\n\n expect(arrKeys).to.deep.equal(invokedKeys); \n });\n});\n","name":"spec.js"},"dist":{"file":"{\"src\":\"\\\"use strict\\\";\\n\\n/**\\n * invoke `cb` function for every key within given object or array.\\n * @name forEach\\n * @param {object} obj object or array to iterate \\n * @param {function} cb callback function to invoke\\n * @example \\n * ```js\\n * forEach({ a: 1, b: 2, c: 3 }, (val, key) => console.log(key, val));\\n * // => a 1 b 2 c 3\\n * ```\\n */\\nmodule.exports = function forEach(obj, cb) {\\n var keys = Object.keys(obj);\\n keys.forEach(function (key) {\\n return cb(obj[key], key);\\n });\\n};\",\"mappings\":\";;AAGA;;;;;;;;;;;AAWAA,OAAOC,OAAP,GAAiB,SAASC,OAAT,CAAiBC,GAAjB,EAA8CC,EAA9C,EAAwD;AACvE,MAAMC,OAAOC,OAAOD,IAAP,CAAYF,GAAZ,CAAb;AACAE,OAAKH,OAAL,CAAa;AAAA,WAAOE,GAAGD,IAAII,GAAJ,CAAH,EAAaA,GAAb,CAAP;AAAA,GAAb;AACD,CAHD\"}","name":"dist.js"},"compiler":"bit.envs/compilers/flow::latest","tester":"bit.envs/testers/mocha-chai::latest","log":{"message":"initial commit","date":"1487178345233","username":"Ran Mizrahi","email":"ran@cocycles.com"},"dependencies":[],"docs":[{"name":"forEach","description":"invoke `cb` function for every key within given object or array.","args":[{"description":"object or array to iterate","type":"object","name":"obj"},{"description":"callback function to invoke","type":"function","name":"cb"}],"returns":{},"access":"public","examples":[{"raw":"```js\n forEach({ a: 1, b: 2, c: 3 }, (val, key) => console.log(key, val));\n // => a 1 b 2 c 3\n```","code":"```js\nforEach({ a: 1, b: 2, c: 3 }, (val, key) => console.log(key, val));"}],"static":false}],"ci":{"startTime":"1491156538194","endTime":"1491156571537","error":{"errno":-116,"code":"NPM_INSTALL_ERR","syscall":"mkdir","path":"/tmp/scope/node_modules/.staging/camelcase-f1d3c524","fstream_type":"Directory","fstream_path":"/tmp/scope/node_modules/.staging/camelcase-f1d3c524","fstream_class":"DirWriter","fstream_stack":["/usr/lib/node_modules/bit-bin/node_modules/npm/node_modules/fstream/lib/dir-writer.js:35:25","/usr/lib/node_modules/bit-bin/node_modules/npm/node_modules/mkdirp/index.js:47:53","/usr/lib/node_modules/bit-bin/node_modules/npm/node_modules/graceful-fs/polyfills.js:264:29","FSReqWrap.oncomplete (fs.js:114:15)"],"name":"Error","message":"Unknown system error -116: Unknown system error -116, mkdir '/tmp/scope/node_modules/.staging/camelcase-f1d3c524'","stack":"Error: Unknown system error -116: Unknown system error -116, mkdir '/tmp/scope/node_modules/.staging/camelcase-f1d3c524'"}},"specsResults":{"tests":[{"title":"#forEach() should invoke `cb` for every key within given object","pass":true,"err":null,"duration":1},{"title":"#forEach() should invoke `cb` for every key within given array","pass":true,"err":null,"duration":1}],"stats":{"start":"2017-04-02T12:14:55.815Z","end":"2017-04-02T12:14:55.822Z","duration":7},"pass":true},"flattenedDependencies":[],"packageDependencies":{},"version":"1"}]}]}]; \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 3d1b3d9..5603121 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,14 +1,24 @@ { "name": "bit-javascript", - "version": "0.10.17-dev.2", + "version": "1.0.1-dev.1", "lockfileVersion": 1, "requires": true, "dependencies": { - "abab": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/abab/-/abab-1.0.4.tgz", - "integrity": "sha1-X6rZwsB/YN12dw9xzwJbYqY8/U4=", - "dev": true + "@sinonjs/formatio": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@sinonjs/formatio/-/formatio-2.0.0.tgz", + "integrity": "sha512-ls6CAMA6/5gG+O/IdsBcblvnd8qcO/l1TYoNeAzp3wcISOxlPXQEus0mLcdwazEkWjaBdaJ3TaxmNgCLWwvWzg==", + "dev": true, + "requires": { + "samsam": "1.3.0" + } + }, + "abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "dev": true, + "optional": true }, "acorn": { "version": "5.5.3", @@ -16,30 +26,13 @@ "integrity": "sha512-jd5MkIUlbbmb07nXH0DT3y7rDVtkzDi4XZOUVWAer8ajmF/DTSSbl5oNFyDOl/OXA33Bl79+ypHhl2pN20VeOQ==", "dev": true }, - "acorn-globals": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-3.1.0.tgz", - "integrity": "sha1-/YJw9x+7SZawBPqIDuXUZXOnMb8=", - "dev": true, - "requires": { - "acorn": "^4.0.4" - }, - "dependencies": { - "acorn": { - "version": "4.0.13", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-4.0.13.tgz", - "integrity": "sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c=", - "dev": true - } - } - }, "acorn-jsx": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-3.0.1.tgz", "integrity": "sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s=", "dev": true, "requires": { - "acorn": "^3.0.4" + "acorn": "3.3.0" }, "dependencies": { "acorn": { @@ -56,8 +49,8 @@ "integrity": "sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY=", "dev": true, "requires": { - "co": "^4.6.0", - "json-stable-stringify": "^1.0.1" + "co": "4.6.0", + "json-stable-stringify": "1.0.1" } }, "ajv-keywords": { @@ -66,23 +59,6 @@ "integrity": "sha1-MU3QpLM2j609/NxU7eYXG4htrzw=", "dev": true }, - "align-text": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", - "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=", - "dev": true, - "requires": { - "kind-of": "^3.0.2", - "longest": "^1.0.1", - "repeat-string": "^1.5.2" - } - }, - "amdefine": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", - "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=", - "dev": true - }, "ansi": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/ansi/-/ansi-0.3.1.tgz", @@ -108,9 +84,10 @@ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.2.tgz", "integrity": "sha512-0XNayC8lTHQ2OI8aljNCN3sSx6hsr/1+rlcDAotXJR7C1oZZHCNsfpbKwMjRA3Uqb5tF1Rae2oloTr4xpq+WjA==", "dev": true, + "optional": true, "requires": { - "micromatch": "^2.1.5", - "normalize-path": "^2.0.0" + "micromatch": "2.3.11", + "normalize-path": "2.1.1" } }, "app-module-path": { @@ -118,22 +95,20 @@ "resolved": "http://registry.npmjs.org/app-module-path/-/app-module-path-2.2.0.tgz", "integrity": "sha1-ZBqlXft9am8KgUHEucCqULbCTdU=" }, - "append-transform": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-0.4.0.tgz", - "integrity": "sha1-126/jKlNJ24keja61EpLdKthGZE=", + "aproba": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", "dev": true, - "requires": { - "default-require-extensions": "^1.0.0" - } + "optional": true }, "are-we-there-yet": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.4.tgz", "integrity": "sha1-u13KOCu5TwXhUZQ3PRb9O6HKEQ0=", "requires": { - "delegates": "^1.0.0", - "readable-stream": "^2.0.6" + "delegates": "1.0.0", + "readable-stream": "2.3.5" } }, "argparse": { @@ -142,7 +117,7 @@ "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "dev": true, "requires": { - "sprintf-js": "~1.0.2" + "sprintf-js": "1.0.3" } }, "arr-diff": { @@ -150,27 +125,17 @@ "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", "dev": true, + "optional": true, "requires": { - "arr-flatten": "^1.0.1" + "arr-flatten": "1.1.0" } }, "arr-flatten": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", - "dev": true - }, - "arr-union": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", - "dev": true - }, - "array-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-equal/-/array-equal-1.0.0.tgz", - "integrity": "sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM=", - "dev": true + "dev": true, + "optional": true }, "array-union": { "version": "1.0.2", @@ -178,7 +143,7 @@ "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", "dev": true, "requires": { - "array-uniq": "^1.0.1" + "array-uniq": "1.0.3" } }, "array-uniq": { @@ -191,7 +156,8 @@ "version": "0.2.1", "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", - "dev": true + "dev": true, + "optional": true }, "arrify": { "version": "1.0.1", @@ -211,12 +177,6 @@ "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", "dev": true }, - "assign-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", - "dev": true - }, "ast-module-types": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/ast-module-types/-/ast-module-types-2.3.2.tgz", @@ -240,12 +200,6 @@ "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", "dev": true }, - "atob": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.0.3.tgz", - "integrity": "sha1-GcenYEc3dEaPILLS0DNyrX1Mv10=", - "dev": true - }, "aws-sign2": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", @@ -264,21 +218,21 @@ "integrity": "sha1-UCq1SHTX24itALiHoGODzgPQAvE=", "dev": true, "requires": { - "babel-core": "^6.26.0", - "babel-polyfill": "^6.26.0", - "babel-register": "^6.26.0", - "babel-runtime": "^6.26.0", - "chokidar": "^1.6.1", - "commander": "^2.11.0", - "convert-source-map": "^1.5.0", - "fs-readdir-recursive": "^1.0.0", - "glob": "^7.1.2", - "lodash": "^4.17.4", - "output-file-sync": "^1.1.2", - "path-is-absolute": "^1.0.1", - "slash": "^1.0.0", - "source-map": "^0.5.6", - "v8flags": "^2.1.1" + "babel-core": "6.26.0", + "babel-polyfill": "6.26.0", + "babel-register": "6.26.0", + "babel-runtime": "6.26.0", + "chokidar": "1.7.0", + "commander": "2.15.0", + "convert-source-map": "1.5.1", + "fs-readdir-recursive": "1.1.0", + "glob": "7.1.2", + "lodash": "4.17.5", + "output-file-sync": "1.1.2", + "path-is-absolute": "1.0.1", + "slash": "1.0.0", + "source-map": "0.5.7", + "v8flags": "2.1.1" }, "dependencies": { "lodash": { @@ -295,9 +249,9 @@ "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", "dev": true, "requires": { - "chalk": "^1.1.3", - "esutils": "^2.0.2", - "js-tokens": "^3.0.2" + "chalk": "1.1.3", + "esutils": "2.0.2", + "js-tokens": "3.0.2" } }, "babel-core": { @@ -306,25 +260,25 @@ "integrity": "sha1-rzL3izGm/O8RnIew/Y2XU/A6C7g=", "dev": true, "requires": { - "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.6" + "babel-code-frame": "6.26.0", + "babel-generator": "6.26.1", + "babel-helpers": "6.24.1", + "babel-messages": "6.23.0", + "babel-register": "6.26.0", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0", + "babylon": "6.18.0", + "convert-source-map": "1.5.1", + "debug": "2.6.9", + "json5": "0.5.1", + "lodash": "4.17.5", + "minimatch": "3.0.4", + "path-is-absolute": "1.0.1", + "private": "0.1.8", + "slash": "1.0.0", + "source-map": "0.5.7" }, "dependencies": { "debug": { @@ -350,10 +304,10 @@ "integrity": "sha1-sv4tgBJkcPXBlELcdXJTqJdxCCc=", "dev": true, "requires": { - "babel-code-frame": "^6.22.0", - "babel-traverse": "^6.23.1", - "babel-types": "^6.23.0", - "babylon": "^6.17.0" + "babel-code-frame": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0", + "babylon": "6.18.0" } }, "babel-generator": { @@ -362,14 +316,14 @@ "integrity": "sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA==", "dev": true, "requires": { - "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.17.4", - "source-map": "^0.5.7", - "trim-right": "^1.0.1" + "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.17.5", + "source-map": "0.5.7", + "trim-right": "1.0.1" }, "dependencies": { "jsesc": { @@ -392,9 +346,9 @@ "integrity": "sha1-zORReto1b0IgvK6KAsKzRvmlZmQ=", "dev": true, "requires": { - "babel-helper-explode-assignable-expression": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" + "babel-helper-explode-assignable-expression": "6.24.1", + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" } }, "babel-helper-call-delegate": { @@ -403,10 +357,10 @@ "integrity": "sha1-7Oaqzdx25Bw0YfiL/Fdb0Nqi340=", "dev": true, "requires": { - "babel-helper-hoist-variables": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" + "babel-helper-hoist-variables": "6.24.1", + "babel-runtime": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0" } }, "babel-helper-define-map": { @@ -415,10 +369,10 @@ "integrity": "sha1-pfVtq0GiX5fstJjH66ypgZ+Vvl8=", "dev": true, "requires": { - "babel-helper-function-name": "^6.24.1", - "babel-runtime": "^6.26.0", - "babel-types": "^6.26.0", - "lodash": "^4.17.4" + "babel-helper-function-name": "6.24.1", + "babel-runtime": "6.26.0", + "babel-types": "6.26.0", + "lodash": "4.17.5" }, "dependencies": { "lodash": { @@ -435,9 +389,9 @@ "integrity": "sha1-8luCz33BBDPFX3BZLVdGQArCLKo=", "dev": true, "requires": { - "babel-runtime": "^6.22.0", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" + "babel-runtime": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0" } }, "babel-helper-function-name": { @@ -446,11 +400,11 @@ "integrity": "sha1-00dbjAPtmCQqJbSDUasYOZ01gKk=", "dev": true, "requires": { - "babel-helper-get-function-arity": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" + "babel-helper-get-function-arity": "6.24.1", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0" } }, "babel-helper-get-function-arity": { @@ -459,8 +413,8 @@ "integrity": "sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0=", "dev": true, "requires": { - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" } }, "babel-helper-hoist-variables": { @@ -469,8 +423,8 @@ "integrity": "sha1-HssnaJydJVE+rbyZFKc/VAi+enY=", "dev": true, "requires": { - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" } }, "babel-helper-optimise-call-expression": { @@ -479,8 +433,8 @@ "integrity": "sha1-96E0J7qfc/j0+pk8VKl4gtEkQlc=", "dev": true, "requires": { - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" } }, "babel-helper-regex": { @@ -489,9 +443,9 @@ "integrity": "sha1-MlxZ+QL4LyS3T6zu0DY5VPZJXnI=", "dev": true, "requires": { - "babel-runtime": "^6.26.0", - "babel-types": "^6.26.0", - "lodash": "^4.17.4" + "babel-runtime": "6.26.0", + "babel-types": "6.26.0", + "lodash": "4.17.5" }, "dependencies": { "lodash": { @@ -508,11 +462,11 @@ "integrity": "sha1-XsWBgnrXI/7N04HxySg5BnbkVRs=", "dev": true, "requires": { - "babel-helper-function-name": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" + "babel-helper-function-name": "6.24.1", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0" } }, "babel-helper-replace-supers": { @@ -521,12 +475,12 @@ "integrity": "sha1-v22/5Dk40XNpohPKiov3S2qQqxo=", "dev": true, "requires": { - "babel-helper-optimise-call-expression": "^6.24.1", - "babel-messages": "^6.23.0", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" + "babel-helper-optimise-call-expression": "6.24.1", + "babel-messages": "6.23.0", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0" } }, "babel-helpers": { @@ -535,19 +489,8 @@ "integrity": "sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI=", "dev": true, "requires": { - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1" - } - }, - "babel-jest": { - "version": "20.0.3", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-20.0.3.tgz", - "integrity": "sha1-5KA7E9wQOJ4UD8ZF0J/8TO0wFnE=", - "dev": true, - "requires": { - "babel-core": "^6.0.0", - "babel-plugin-istanbul": "^4.0.0", - "babel-preset-jest": "^20.0.3" + "babel-runtime": "6.26.0", + "babel-template": "6.26.0" } }, "babel-messages": { @@ -556,7 +499,7 @@ "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=", "dev": true, "requires": { - "babel-runtime": "^6.22.0" + "babel-runtime": "6.26.0" } }, "babel-plugin-check-es2015-constants": { @@ -565,26 +508,9 @@ "integrity": "sha1-NRV7EBQm/S/9PaP3XH0ekYNbv4o=", "dev": true, "requires": { - "babel-runtime": "^6.22.0" + "babel-runtime": "6.26.0" } }, - "babel-plugin-istanbul": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-4.1.5.tgz", - "integrity": "sha1-Z2DN2Xf0EdPhdbsGTyvDJ9mbK24=", - "dev": true, - "requires": { - "find-up": "^2.1.0", - "istanbul-lib-instrument": "^1.7.5", - "test-exclude": "^4.1.1" - } - }, - "babel-plugin-jest-hoist": { - "version": "20.0.3", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-20.0.3.tgz", - "integrity": "sha1-r+3IU70/jcNUjqZx++adA8wsF2c=", - "dev": true - }, "babel-plugin-syntax-async-functions": { "version": "6.13.0", "resolved": "https://registry.npmjs.org/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz", @@ -615,9 +541,9 @@ "integrity": "sha1-ZTbjeK/2yx1VF6wOQOs+n8jQh2E=", "dev": true, "requires": { - "babel-helper-remap-async-to-generator": "^6.24.1", - "babel-plugin-syntax-async-functions": "^6.8.0", - "babel-runtime": "^6.22.0" + "babel-helper-remap-async-to-generator": "6.24.1", + "babel-plugin-syntax-async-functions": "6.13.0", + "babel-runtime": "6.26.0" } }, "babel-plugin-transform-builtin-extend": { @@ -626,8 +552,8 @@ "integrity": "sha1-Xpb+z1i4+h7XTvytiEdbKvPJEW4=", "dev": true, "requires": { - "babel-runtime": "^6.2.0", - "babel-template": "^6.3.0" + "babel-runtime": "6.26.0", + "babel-template": "6.26.0" } }, "babel-plugin-transform-es2015-arrow-functions": { @@ -636,7 +562,7 @@ "integrity": "sha1-RSaSy3EdX3ncf4XkQM5BufJE0iE=", "dev": true, "requires": { - "babel-runtime": "^6.22.0" + "babel-runtime": "6.26.0" } }, "babel-plugin-transform-es2015-block-scoped-functions": { @@ -645,7 +571,7 @@ "integrity": "sha1-u8UbSflk1wy42OC5ToICRs46YUE=", "dev": true, "requires": { - "babel-runtime": "^6.22.0" + "babel-runtime": "6.26.0" } }, "babel-plugin-transform-es2015-block-scoping": { @@ -654,11 +580,11 @@ "integrity": "sha1-1w9SmcEwjQXBL0Y4E7CgnnOxiV8=", "dev": true, "requires": { - "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-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0", + "lodash": "4.17.5" }, "dependencies": { "lodash": { @@ -675,15 +601,15 @@ "integrity": "sha1-WkxYpQyclGHlZLSyo7+ryXolhNs=", "dev": true, "requires": { - "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.24.1", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" + "babel-helper-define-map": "6.26.0", + "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.26.0", + "babel-template": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0" } }, "babel-plugin-transform-es2015-computed-properties": { @@ -692,8 +618,8 @@ "integrity": "sha1-b+Ko0WiV1WNPTNmZttNICjCBWbM=", "dev": true, "requires": { - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1" + "babel-runtime": "6.26.0", + "babel-template": "6.26.0" } }, "babel-plugin-transform-es2015-destructuring": { @@ -702,7 +628,7 @@ "integrity": "sha1-mXux8auWf2gtKwh2/jWNYOdlxW0=", "dev": true, "requires": { - "babel-runtime": "^6.22.0" + "babel-runtime": "6.26.0" } }, "babel-plugin-transform-es2015-duplicate-keys": { @@ -711,8 +637,8 @@ "integrity": "sha1-c+s9MQypaePvnskcU3QabxV2Qj4=", "dev": true, "requires": { - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" } }, "babel-plugin-transform-es2015-for-of": { @@ -721,7 +647,7 @@ "integrity": "sha1-9HyVsrYT3x0+zC/bdXNiPHUkhpE=", "dev": true, "requires": { - "babel-runtime": "^6.22.0" + "babel-runtime": "6.26.0" } }, "babel-plugin-transform-es2015-function-name": { @@ -730,9 +656,9 @@ "integrity": "sha1-g0yJhTvDaxrw86TF26qU/Y6sqos=", "dev": true, "requires": { - "babel-helper-function-name": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" + "babel-helper-function-name": "6.24.1", + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" } }, "babel-plugin-transform-es2015-literals": { @@ -741,7 +667,7 @@ "integrity": "sha1-T1SgLWzWbPkVKAAZox0xklN3yi4=", "dev": true, "requires": { - "babel-runtime": "^6.22.0" + "babel-runtime": "6.26.0" } }, "babel-plugin-transform-es2015-modules-amd": { @@ -750,9 +676,9 @@ "integrity": "sha1-Oz5UAXI5hC1tGcMBHEvS8AoA0VQ=", "dev": true, "requires": { - "babel-plugin-transform-es2015-modules-commonjs": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1" + "babel-plugin-transform-es2015-modules-commonjs": "6.26.0", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0" } }, "babel-plugin-transform-es2015-modules-commonjs": { @@ -761,10 +687,10 @@ "integrity": "sha1-DYOUApt9xqvhqX7xgeAHWN0uXYo=", "dev": true, "requires": { - "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-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": { @@ -773,9 +699,9 @@ "integrity": "sha1-/4mhQrkRmpBhlfXxBuzzBdlAfSM=", "dev": true, "requires": { - "babel-helper-hoist-variables": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1" + "babel-helper-hoist-variables": "6.24.1", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0" } }, "babel-plugin-transform-es2015-modules-umd": { @@ -784,9 +710,9 @@ "integrity": "sha1-rJl+YoXNGO1hdq22B9YCNErThGg=", "dev": true, "requires": { - "babel-plugin-transform-es2015-modules-amd": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1" + "babel-plugin-transform-es2015-modules-amd": "6.24.1", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0" } }, "babel-plugin-transform-es2015-object-super": { @@ -795,8 +721,8 @@ "integrity": "sha1-JM72muIcuDp/hgPa0CH1cusnj40=", "dev": true, "requires": { - "babel-helper-replace-supers": "^6.24.1", - "babel-runtime": "^6.22.0" + "babel-helper-replace-supers": "6.24.1", + "babel-runtime": "6.26.0" } }, "babel-plugin-transform-es2015-parameters": { @@ -805,12 +731,12 @@ "integrity": "sha1-V6w1GrScrxSpfNE7CfZv3wpiXys=", "dev": true, "requires": { - "babel-helper-call-delegate": "^6.24.1", - "babel-helper-get-function-arity": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" + "babel-helper-call-delegate": "6.24.1", + "babel-helper-get-function-arity": "6.24.1", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0" } }, "babel-plugin-transform-es2015-shorthand-properties": { @@ -819,8 +745,8 @@ "integrity": "sha1-JPh11nIch2YbvZmkYi5R8U3jiqA=", "dev": true, "requires": { - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" } }, "babel-plugin-transform-es2015-spread": { @@ -829,7 +755,7 @@ "integrity": "sha1-1taKmfia7cRTbIGlQujdnxdG+NE=", "dev": true, "requires": { - "babel-runtime": "^6.22.0" + "babel-runtime": "6.26.0" } }, "babel-plugin-transform-es2015-sticky-regex": { @@ -838,9 +764,9 @@ "integrity": "sha1-AMHNsaynERLN8M9hJsLta0V8zbw=", "dev": true, "requires": { - "babel-helper-regex": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" + "babel-helper-regex": "6.26.0", + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" } }, "babel-plugin-transform-es2015-template-literals": { @@ -849,7 +775,7 @@ "integrity": "sha1-qEs0UPfp+PH2g51taH2oS7EjbY0=", "dev": true, "requires": { - "babel-runtime": "^6.22.0" + "babel-runtime": "6.26.0" } }, "babel-plugin-transform-es2015-typeof-symbol": { @@ -858,7 +784,7 @@ "integrity": "sha1-3sCfHN3/lLUqxz1QXITfWdzOs3I=", "dev": true, "requires": { - "babel-runtime": "^6.22.0" + "babel-runtime": "6.26.0" } }, "babel-plugin-transform-es2015-unicode-regex": { @@ -867,9 +793,9 @@ "integrity": "sha1-04sS9C6nMj9yk4fxinxa4frrNek=", "dev": true, "requires": { - "babel-helper-regex": "^6.24.1", - "babel-runtime": "^6.22.0", - "regexpu-core": "^2.0.0" + "babel-helper-regex": "6.26.0", + "babel-runtime": "6.26.0", + "regexpu-core": "2.0.0" } }, "babel-plugin-transform-exponentiation-operator": { @@ -878,9 +804,9 @@ "integrity": "sha1-KrDJx/MJj6SJB3cruBP+QejeOg4=", "dev": true, "requires": { - "babel-helper-builder-binary-assignment-operator-visitor": "^6.24.1", - "babel-plugin-syntax-exponentiation-operator": "^6.8.0", - "babel-runtime": "^6.22.0" + "babel-helper-builder-binary-assignment-operator-visitor": "6.24.1", + "babel-plugin-syntax-exponentiation-operator": "6.13.0", + "babel-runtime": "6.26.0" } }, "babel-plugin-transform-flow-strip-types": { @@ -889,8 +815,8 @@ "integrity": "sha1-hMtnKTXUNxT9wyvOhFaNh0Qc988=", "dev": true, "requires": { - "babel-plugin-syntax-flow": "^6.18.0", - "babel-runtime": "^6.22.0" + "babel-plugin-syntax-flow": "6.18.0", + "babel-runtime": "6.26.0" } }, "babel-plugin-transform-regenerator": { @@ -899,7 +825,7 @@ "integrity": "sha1-4HA2lvveJ/Cj78rPi03KL3s6jy8=", "dev": true, "requires": { - "regenerator-transform": "^0.10.0" + "regenerator-transform": "0.10.1" } }, "babel-plugin-transform-strict-mode": { @@ -908,8 +834,8 @@ "integrity": "sha1-1fr3qleKZbvlkc9e2uBKDGcCB1g=", "dev": true, "requires": { - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" } }, "babel-polyfill": { @@ -918,9 +844,9 @@ "integrity": "sha1-N5k3q8Z9eJWXCtxiHyhM2WbPIVM=", "dev": true, "requires": { - "babel-runtime": "^6.26.0", - "core-js": "^2.5.0", - "regenerator-runtime": "^0.10.5" + "babel-runtime": "6.26.0", + "core-js": "2.5.3", + "regenerator-runtime": "0.10.5" } }, "babel-preset-env": { @@ -929,36 +855,36 @@ "integrity": "sha512-W6VIyA6Ch9ePMI7VptNn2wBM6dbG0eSz25HEiL40nQXCsXGTGZSTZu1Iap+cj3Q0S5a7T9+529l/5Bkvd+afNA==", "dev": true, "requires": { - "babel-plugin-check-es2015-constants": "^6.22.0", - "babel-plugin-syntax-trailing-function-commas": "^6.22.0", - "babel-plugin-transform-async-to-generator": "^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.23.0", - "babel-plugin-transform-es2015-classes": "^6.23.0", - "babel-plugin-transform-es2015-computed-properties": "^6.22.0", - "babel-plugin-transform-es2015-destructuring": "^6.23.0", - "babel-plugin-transform-es2015-duplicate-keys": "^6.22.0", - "babel-plugin-transform-es2015-for-of": "^6.23.0", - "babel-plugin-transform-es2015-function-name": "^6.22.0", - "babel-plugin-transform-es2015-literals": "^6.22.0", - "babel-plugin-transform-es2015-modules-amd": "^6.22.0", - "babel-plugin-transform-es2015-modules-commonjs": "^6.23.0", - "babel-plugin-transform-es2015-modules-systemjs": "^6.23.0", - "babel-plugin-transform-es2015-modules-umd": "^6.23.0", - "babel-plugin-transform-es2015-object-super": "^6.22.0", - "babel-plugin-transform-es2015-parameters": "^6.23.0", - "babel-plugin-transform-es2015-shorthand-properties": "^6.22.0", - "babel-plugin-transform-es2015-spread": "^6.22.0", - "babel-plugin-transform-es2015-sticky-regex": "^6.22.0", - "babel-plugin-transform-es2015-template-literals": "^6.22.0", - "babel-plugin-transform-es2015-typeof-symbol": "^6.23.0", - "babel-plugin-transform-es2015-unicode-regex": "^6.22.0", - "babel-plugin-transform-exponentiation-operator": "^6.22.0", - "babel-plugin-transform-regenerator": "^6.22.0", - "browserslist": "^2.1.2", - "invariant": "^2.2.2", - "semver": "^5.3.0" + "babel-plugin-check-es2015-constants": "6.22.0", + "babel-plugin-syntax-trailing-function-commas": "6.22.0", + "babel-plugin-transform-async-to-generator": "6.24.1", + "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.26.0", + "babel-plugin-transform-es2015-classes": "6.24.1", + "babel-plugin-transform-es2015-computed-properties": "6.24.1", + "babel-plugin-transform-es2015-destructuring": "6.23.0", + "babel-plugin-transform-es2015-duplicate-keys": "6.24.1", + "babel-plugin-transform-es2015-for-of": "6.23.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.24.1", + "babel-plugin-transform-es2015-modules-commonjs": "6.26.0", + "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.24.1", + "babel-plugin-transform-es2015-template-literals": "6.22.0", + "babel-plugin-transform-es2015-typeof-symbol": "6.23.0", + "babel-plugin-transform-es2015-unicode-regex": "6.24.1", + "babel-plugin-transform-exponentiation-operator": "6.24.1", + "babel-plugin-transform-regenerator": "6.26.0", + "browserslist": "2.11.3", + "invariant": "2.2.4", + "semver": "5.5.0" } }, "babel-preset-es2015": { @@ -967,39 +893,30 @@ "integrity": "sha1-1EBQ1rwsn+6nAqrzjXJ6AhBTiTk=", "dev": true, "requires": { - "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.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.24.1", - "babel-plugin-transform-es2015-for-of": "^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.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.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.24.1", - "babel-plugin-transform-regenerator": "^6.24.1" - } - }, - "babel-preset-jest": { - "version": "20.0.3", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-20.0.3.tgz", - "integrity": "sha1-y6yq3stdaJyh4d4TYOv8ZoYsF4o=", - "dev": true, - "requires": { - "babel-plugin-jest-hoist": "^20.0.3" + "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.26.0", + "babel-plugin-transform-es2015-classes": "6.24.1", + "babel-plugin-transform-es2015-computed-properties": "6.24.1", + "babel-plugin-transform-es2015-destructuring": "6.23.0", + "babel-plugin-transform-es2015-duplicate-keys": "6.24.1", + "babel-plugin-transform-es2015-for-of": "6.23.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.24.1", + "babel-plugin-transform-es2015-modules-commonjs": "6.26.0", + "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.24.1", + "babel-plugin-transform-es2015-template-literals": "6.22.0", + "babel-plugin-transform-es2015-typeof-symbol": "6.23.0", + "babel-plugin-transform-es2015-unicode-regex": "6.24.1", + "babel-plugin-transform-regenerator": "6.26.0" } }, "babel-register": { @@ -1008,13 +925,13 @@ "integrity": "sha1-btAhFz4vy0htestFxgCahW9kcHE=", "dev": true, "requires": { - "babel-core": "^6.26.0", - "babel-runtime": "^6.26.0", - "core-js": "^2.5.0", - "home-or-tmp": "^2.0.0", - "lodash": "^4.17.4", - "mkdirp": "^0.5.1", - "source-map-support": "^0.4.15" + "babel-core": "6.26.0", + "babel-runtime": "6.26.0", + "core-js": "2.5.3", + "home-or-tmp": "2.0.0", + "lodash": "4.17.5", + "mkdirp": "0.5.1", + "source-map-support": "0.4.18" }, "dependencies": { "lodash": { @@ -1031,8 +948,8 @@ "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", "dev": true, "requires": { - "core-js": "^2.4.0", - "regenerator-runtime": "^0.11.0" + "core-js": "2.5.3", + "regenerator-runtime": "0.11.1" }, "dependencies": { "regenerator-runtime": { @@ -1049,11 +966,11 @@ "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=", "dev": true, "requires": { - "babel-runtime": "^6.26.0", - "babel-traverse": "^6.26.0", - "babel-types": "^6.26.0", - "babylon": "^6.18.0", - "lodash": "^4.17.4" + "babel-runtime": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0", + "babylon": "6.18.0", + "lodash": "4.17.5" }, "dependencies": { "lodash": { @@ -1070,15 +987,15 @@ "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=", "dev": true, "requires": { - "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-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.9", + "globals": "9.18.0", + "invariant": "2.2.4", + "lodash": "4.17.5" }, "dependencies": { "debug": { @@ -1104,10 +1021,10 @@ "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", "dev": true, "requires": { - "babel-runtime": "^6.26.0", - "esutils": "^2.0.2", - "lodash": "^4.17.4", - "to-fast-properties": "^1.0.3" + "babel-runtime": "6.26.0", + "esutils": "2.0.2", + "lodash": "4.17.5", + "to-fast-properties": "1.0.3" }, "dependencies": { "lodash": { @@ -1128,38 +1045,6 @@ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" }, - "base": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", - "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", - "dev": true, - "requires": { - "cache-base": "^1.0.1", - "class-utils": "^0.3.5", - "component-emitter": "^1.2.1", - "define-property": "^1.0.0", - "isobject": "^3.0.1", - "mixin-deep": "^1.2.0", - "pascalcase": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - } - } - }, "bcrypt-pbkdf": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz", @@ -1167,7 +1052,7 @@ "dev": true, "optional": true, "requires": { - "tweetnacl": "^0.14.3" + "tweetnacl": "0.14.5" } }, "binary-extensions": { @@ -1177,6 +1062,15 @@ "dev": true, "optional": true }, + "block-stream": { + "version": "0.0.9", + "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz", + "integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=", + "dev": true, + "requires": { + "inherits": "2.0.3" + } + }, "bluebird": { "version": "3.5.1", "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz", @@ -1188,7 +1082,7 @@ "integrity": "sha1-T4owBctKfjiJ90kDD9JbluAdLjE=", "dev": true, "requires": { - "hoek": "4.x.x" + "hoek": "4.2.1" } }, "brace-expansion": { @@ -1196,7 +1090,7 @@ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "requires": { - "balanced-match": "^1.0.0", + "balanced-match": "1.0.0", "concat-map": "0.0.1" } }, @@ -1205,28 +1099,18 @@ "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", "dev": true, + "optional": true, "requires": { - "expand-range": "^1.8.1", - "preserve": "^0.2.0", - "repeat-element": "^1.1.2" + "expand-range": "1.8.2", + "preserve": "0.2.0", + "repeat-element": "1.1.2" } }, - "browser-resolve": { - "version": "1.11.2", - "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-1.11.2.tgz", - "integrity": "sha1-j/CbCixCFxihBRwmCzLkj0QpOM4=", - "dev": true, - "requires": { - "resolve": "1.1.7" - }, - "dependencies": { - "resolve": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", - "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=", - "dev": true - } - } + "browser-stdout": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", + "dev": true }, "browserslist": { "version": "2.11.3", @@ -1234,17 +1118,8 @@ "integrity": "sha512-yWu5cXT7Av6mVwzWc8lMsJMHWn4xyjSuGYi4IozbVTLUOEYPSagUB8kiMDUHA1fS3zjr8nkxkn9jdvug4BBRmA==", "dev": true, "requires": { - "caniuse-lite": "^1.0.30000792", - "electron-to-chromium": "^1.3.30" - } - }, - "bser": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/bser/-/bser-2.0.0.tgz", - "integrity": "sha1-mseNPtXZFYBP2HrLFYvHlxR6Fxk=", - "dev": true, - "requires": { - "node-int64": "^0.4.0" + "caniuse-lite": "1.0.30000815", + "electron-to-chromium": "1.3.39" } }, "builtin-modules": { @@ -1253,38 +1128,13 @@ "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", "dev": true }, - "cache-base": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", - "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", - "dev": true, - "requires": { - "collection-visit": "^1.0.0", - "component-emitter": "^1.2.1", - "get-value": "^2.0.6", - "has-value": "^1.0.0", - "isobject": "^3.0.1", - "set-value": "^2.0.0", - "to-object-path": "^0.3.0", - "union-value": "^1.0.0", - "unset-value": "^1.0.0" - }, - "dependencies": { - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - } - } - }, "caller-path": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz", "integrity": "sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=", "dev": true, "requires": { - "callsites": "^0.2.0" + "callsites": "0.2.0" } }, "callsites": { @@ -1300,7 +1150,7 @@ }, "camelcase-css": { "version": "1.0.1", - "resolved": "http://registry.npmjs.org/camelcase-css/-/camelcase-css-1.0.1.tgz", + "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-1.0.1.tgz", "integrity": "sha1-FXxCOCZfXPlKHf/ehkRlUsvz9wU=" }, "caniuse-lite": { @@ -1314,15 +1164,15 @@ "resolved": "https://registry.npmjs.org/caporal/-/caporal-0.5.0.tgz", "integrity": "sha1-94eshs1VI0eOtCE7SAQio54CKf4=", "requires": { - "bluebird": "^3.4.7", - "chalk": "^1.1.3", - "cli-table2": "^0.2.0", - "fast-levenshtein": "^2.0.6", - "lodash.camelcase": "^4.3.0", - "micromist": "^1.0.1", - "prettyjson": "^1.2.1", - "tabtab": "^2.2.2", - "winston": "^2.3.1" + "bluebird": "3.5.1", + "chalk": "1.1.3", + "cli-table2": "0.2.0", + "fast-levenshtein": "2.0.6", + "lodash.camelcase": "4.3.0", + "micromist": "1.0.2", + "prettyjson": "1.2.1", + "tabtab": "2.2.2", + "winston": "2.4.1" } }, "caseless": { @@ -1331,29 +1181,30 @@ "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", "dev": true }, - "center-align": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz", - "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=", - "dev": true, - "optional": true, - "requires": { - "align-text": "^0.1.3", - "lazy-cache": "^1.0.3" - } - }, "chalk": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" + "ansi-styles": "2.2.1", + "escape-string-regexp": "1.0.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" } }, + "chardet": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.4.2.tgz", + "integrity": "sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I=", + "dev": true + }, + "charenc": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", + "integrity": "sha1-wKHS86cJLgN3S/qD8UwPxXkKhmc=", + "dev": true + }, "chokidar": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-1.7.0.tgz", @@ -1361,121 +1212,29 @@ "dev": true, "optional": true, "requires": { - "anymatch": "^1.3.0", - "async-each": "^1.0.0", - "fsevents": "^1.0.0", - "glob-parent": "^2.0.0", - "inherits": "^2.0.1", - "is-binary-path": "^1.0.0", - "is-glob": "^2.0.0", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.0.0" + "anymatch": "1.3.2", + "async-each": "1.0.1", + "fsevents": "1.1.3", + "glob-parent": "2.0.0", + "inherits": "2.0.3", + "is-binary-path": "1.0.1", + "is-glob": "2.0.1", + "path-is-absolute": "1.0.1", + "readdirp": "2.1.0" } }, - "ci-info": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.1.3.tgz", - "integrity": "sha512-SK/846h/Rcy8q9Z9CAwGBLfCJ6EkjJWdpelWDufQpqVDYq2Wnnv8zlSO6AMQap02jvhVruKKpEtQOufo3pFhLg==", - "dev": true - }, "circular-json": { "version": "0.3.3", "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.3.tgz", "integrity": "sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==", "dev": true }, - "class-utils": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", - "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", - "dev": true, - "requires": { - "arr-union": "^3.1.0", - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "static-extend": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - } - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - }, - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - } - } - }, "cli-cursor": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-1.0.2.tgz", "integrity": "sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc=", "requires": { - "restore-cursor": "^1.0.1" + "restore-cursor": "1.0.1" } }, "cli-spinners": { @@ -1488,9 +1247,9 @@ "resolved": "https://registry.npmjs.org/cli-table2/-/cli-table2-0.2.0.tgz", "integrity": "sha1-LR738hig54biFFQFYtS9F3/jLZc=", "requires": { - "colors": "^1.1.2", - "lodash": "^3.10.1", - "string-width": "^1.0.1" + "colors": "1.2.1", + "lodash": "3.10.1", + "string-width": "1.0.2" } }, "cli-width": { @@ -1498,27 +1257,6 @@ "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz", "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=" }, - "cliui": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", - "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", - "dev": true, - "optional": true, - "requires": { - "center-align": "^0.1.1", - "right-align": "^0.1.1", - "wordwrap": "0.0.2" - }, - "dependencies": { - "wordwrap": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", - "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=", - "dev": true, - "optional": true - } - } - }, "co": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", @@ -1530,22 +1268,12 @@ "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=" }, - "collection-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", - "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", - "dev": true, - "requires": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.0" - } - }, "color-convert": { "version": "1.9.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.1.tgz", "integrity": "sha512-mjGanIiwQJskCC18rPR6OmrZ6fm2Lc7PeGFYwCmy5J34wC6F1PzdGL6xeMfmgicfYcNLGuVFA3WzXtIDCQSZxQ==", "requires": { - "color-name": "^1.1.1" + "color-name": "1.1.3" } }, "color-name": { @@ -1564,7 +1292,7 @@ "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=", "dev": true, "requires": { - "delayed-stream": "~1.0.0" + "delayed-stream": "1.0.0" } }, "commander": { @@ -1572,18 +1300,6 @@ "resolved": "http://registry.npmjs.org/commander/-/commander-2.15.0.tgz", "integrity": "sha1-rSojocOwNuOSRpuAEs7GsztMEyI=" }, - "compare-versions": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-3.1.0.tgz", - "integrity": "sha512-4hAxDSBypT/yp2ySFD346So6Ragw5xmBn/e/agIGl3bZr6DLUqnoRZPusxKrXdYRZpgexO9daejmIenlq/wrIQ==", - "dev": true - }, - "component-emitter": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", - "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", - "dev": true - }, "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -1594,35 +1310,29 @@ "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.1.tgz", "integrity": "sha512-gslSSJx03QKa59cIKqeJO9HQ/WZMotvYJCuaUULrLpjj8oG40kV2Z+gz82pVxlTkOADi4PJxQPPfhl1ELYrrXw==", "requires": { - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" + "inherits": "2.0.3", + "readable-stream": "2.3.5", + "typedarray": "0.0.6" } }, + "console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", + "dev": true + }, "contains-path": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/contains-path/-/contains-path-0.1.0.tgz", "integrity": "sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo=", "dev": true }, - "content-type-parser": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/content-type-parser/-/content-type-parser-1.0.2.tgz", - "integrity": "sha512-lM4l4CnMEwOLHAHr/P6MEZwZFPJFtAAKgL6pogbXmVZggIqXhdB6RbBtPOTsw2FcXwYhehRGERJmRrjOiIB8pQ==", - "dev": true - }, "convert-source-map": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.5.1.tgz", "integrity": "sha1-uCeAl7m8IpNl3lxiz1/K7YtVmeU=", "dev": true }, - "copy-descriptor": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", - "dev": true - }, "core-js": { "version": "2.5.3", "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.3.tgz", @@ -1634,13 +1344,30 @@ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" }, + "cross-spawn": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", + "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", + "dev": true, + "requires": { + "lru-cache": "4.1.3", + "shebang-command": "1.2.0", + "which": "1.3.1" + } + }, + "crypt": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", + "integrity": "sha1-iNf/fsDfuG9xPch7u0LQRNPmxBs=", + "dev": true + }, "cryptiles": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-3.1.2.tgz", "integrity": "sha1-qJ+7Ig9c4l7FboxKqKT9e1sNKf4=", "dev": true, "requires": { - "boom": "5.x.x" + "boom": "5.2.0" }, "dependencies": { "boom": { @@ -1649,73 +1376,38 @@ "integrity": "sha512-Z5BTk6ZRe4tXXQlkqftmsAUANpXmuwlsF5Oov8ThoMbQRzdGTA1ngYRW160GexgOgjsFOKJz0LYhoNi+2AMBUw==", "dev": true, "requires": { - "hoek": "4.x.x" + "hoek": "4.2.1" } } } }, "css-selector-tokenizer": { "version": "0.7.0", - "resolved": "http://registry.npmjs.org/css-selector-tokenizer/-/css-selector-tokenizer-0.7.0.tgz", + "resolved": "https://registry.npmjs.org/css-selector-tokenizer/-/css-selector-tokenizer-0.7.0.tgz", "integrity": "sha1-5piEdK6MlTR3v15+/s/OzNnPTIY=", "requires": { - "cssesc": "^0.1.0", - "fastparse": "^1.1.1", - "regexpu-core": "^1.0.0" + "cssesc": "0.1.0", + "fastparse": "1.1.1", + "regexpu-core": "1.0.0" }, "dependencies": { "regexpu-core": { "version": "1.0.0", - "resolved": "http://registry.npmjs.org/regexpu-core/-/regexpu-core-1.0.0.tgz", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-1.0.0.tgz", "integrity": "sha1-hqdj9Y7k18L2sQLkdkBQ3n7ZDGs=", "requires": { - "regenerate": "^1.2.1", - "regjsgen": "^0.2.0", - "regjsparser": "^0.1.4" - }, - "dependencies": { - "regenerate": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.3.3.tgz", - "integrity": "sha512-jVpo1GadrDAK59t/0jRx5VxYWQEDkkEKi6+HjE3joFVLfDOh9Xrdh0dF1eSq+BI/SwvTQ44gSscJ8N5zYL61sg==" - }, - "regjsgen": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.2.0.tgz", - "integrity": "sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc=" - }, - "regjsparser": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.1.5.tgz", - "integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=", - "requires": { - "jsesc": "~0.5.0" - } - } + "regenerate": "1.3.3", + "regjsgen": "0.2.0", + "regjsparser": "0.1.5" } } } }, "cssesc": { "version": "0.1.0", - "resolved": "http://registry.npmjs.org/cssesc/-/cssesc-0.1.0.tgz", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-0.1.0.tgz", "integrity": "sha1-yBSQPkViM3GgR3tAEJqq++6t27Q=" }, - "cssom": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.2.tgz", - "integrity": "sha1-uANhcMefB6kP8vFuIihAJ6JDhIs=", - "dev": true - }, - "cssstyle": { - "version": "0.2.37", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-0.2.37.tgz", - "integrity": "sha1-VBCXI0yyUTyDzu06zdwn/yeYfVQ=", - "dev": true, - "requires": { - "cssom": "0.3.x" - } - }, "cycle": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/cycle/-/cycle-1.0.3.tgz", @@ -1727,7 +1419,7 @@ "integrity": "sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=", "dev": true, "requires": { - "es5-ext": "^0.10.9" + "es5-ext": "0.10.41" } }, "dashdash": { @@ -1736,7 +1428,7 @@ "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", "dev": true, "requires": { - "assert-plus": "^1.0.0" + "assert-plus": "1.0.0" } }, "de-indent": { @@ -1752,53 +1444,21 @@ "ms": "2.0.0" } }, - "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", - "dev": true - }, - "decode-uri-component": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", - "dev": true + "deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "dev": true, + "optional": true }, "deep-is": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=" }, - "default-require-extensions": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-1.0.0.tgz", - "integrity": "sha1-836hXT4T/9m0N9M+GnW1+5eHTLg=", - "dev": true, - "requires": { - "strip-bom": "^2.0.0" - } - }, - "define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", - "dev": true, - "requires": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - }, - "dependencies": { - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - } - } - }, "deindent": { "version": "0.1.0", - "resolved": "http://registry.npmjs.org/deindent/-/deindent-0.1.0.tgz", + "resolved": "https://registry.npmjs.org/deindent/-/deindent-0.1.0.tgz", "integrity": "sha1-YuHc3R2Elwnlx0A8iQ5H486+OZ0=" }, "del": { @@ -1807,13 +1467,13 @@ "integrity": "sha1-wSyYHQZ4RshLyvhiz/kw2Qf/0ag=", "dev": true, "requires": { - "globby": "^5.0.0", - "is-path-cwd": "^1.0.0", - "is-path-in-cwd": "^1.0.0", - "object-assign": "^4.0.1", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0", - "rimraf": "^2.2.8" + "globby": "5.0.0", + "is-path-cwd": "1.0.0", + "is-path-in-cwd": "1.0.0", + "object-assign": "4.1.1", + "pify": "2.3.0", + "pinkie-promise": "2.0.1", + "rimraf": "2.6.2" } }, "delayed-stream": { @@ -1827,24 +1487,37 @@ "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=" }, + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", + "dev": true + }, "detect-indent": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz", "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=", "dev": true, "requires": { - "repeating": "^2.0.0" + "repeating": "2.0.1" } }, + "detect-libc": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", + "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=", + "dev": true, + "optional": true + }, "detective-amd": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/detective-amd/-/detective-amd-2.4.0.tgz", "integrity": "sha1-XrDfTvXBipQDOwfa8TbbzV/HXNU=", "requires": { - "ast-module-types": "^2.3.1", - "escodegen": "^1.8.0", - "get-amd-module-type": "^2.0.4", - "node-source-walk": "^3.0.0" + "ast-module-types": "2.3.2", + "escodegen": "1.9.0", + "get-amd-module-type": "2.0.5", + "node-source-walk": "3.3.0" }, "dependencies": { "escodegen": { @@ -1852,11 +1525,11 @@ "resolved": "http://registry.npmjs.org/escodegen/-/escodegen-1.9.0.tgz", "integrity": "sha1-mBGi8mXcHNOJRCDuNxcGS2MriFI=", "requires": { - "esprima": "^3.1.3", - "estraverse": "^4.2.0", - "esutils": "^2.0.2", - "optionator": "^0.8.1", - "source-map": "~0.5.6" + "esprima": "3.1.3", + "estraverse": "4.2.0", + "esutils": "2.0.2", + "optionator": "0.8.2", + "source-map": "0.5.7" }, "dependencies": { "esprima": { @@ -1879,12 +1552,12 @@ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", "requires": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.4", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "wordwrap": "~1.0.0" + "deep-is": "0.1.3", + "fast-levenshtein": "2.0.6", + "levn": "0.3.0", + "prelude-ls": "1.1.2", + "type-check": "0.3.2", + "wordwrap": "1.0.0" } }, "source-map": { @@ -1897,23 +1570,14 @@ } } }, - "detective-cjs": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/detective-cjs/-/detective-cjs-2.0.0.tgz", - "integrity": "sha1-3OTJMCzcpS5ri/04d8qT9ixczAM=", - "requires": { - "ast-module-types": "^2.3.2", - "node-source-walk": "^3.0.0" - } - }, "detective-less": { "version": "1.0.1", "resolved": "http://registry.npmjs.org/detective-less/-/detective-less-1.0.1.tgz", "integrity": "sha1-Bs4Z397qUykQdM4oiMxLZEvJTAk=", "requires": { - "debug": "^3.1.0", - "gonzales-pe": "^3.4.4", - "node-source-walk": "^3.2.0" + "debug": "3.1.0", + "gonzales-pe": "3.4.7", + "node-source-walk": "3.3.0" } }, "detective-sass": { @@ -1921,9 +1585,9 @@ "resolved": "https://registry.npmjs.org/detective-sass/-/detective-sass-2.0.1.tgz", "integrity": "sha1-BWYKoblc/Yf1dGQ7+s4+iiaBEqE=", "requires": { - "debug": "^3.1.0", - "gonzales-pe": "^3.4.4", - "node-source-walk": "^3.2.0" + "debug": "3.1.0", + "gonzales-pe": "3.4.7", + "node-source-walk": "3.3.0" }, "dependencies": { "debug": { @@ -1941,9 +1605,9 @@ "resolved": "https://registry.npmjs.org/detective-scss/-/detective-scss-1.0.1.tgz", "integrity": "sha1-dDJGoN01jZ2R/0ElQX9qd/vPJw8=", "requires": { - "debug": "^3.1.0", - "gonzales-pe": "^3.4.4", - "node-source-walk": "^3.2.0" + "debug": "3.1.0", + "gonzales-pe": "3.4.7", + "node-source-walk": "3.3.0" }, "dependencies": { "debug": { @@ -1973,15 +1637,15 @@ "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", "dev": true, "requires": { - "esutils": "^2.0.2" + "esutils": "2.0.2" } }, "dot-prop": { "version": "4.2.0", - "resolved": "http://registry.npmjs.org/dot-prop/-/dot-prop-4.2.0.tgz", - "integrity": "sha1-HxngwuGqDjJ5fEl5nyg3rGr2nFc=", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.0.tgz", + "integrity": "sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ==", "requires": { - "is-obj": "^1.0.0" + "is-obj": "1.0.1" } }, "ecc-jsbn": { @@ -1991,7 +1655,7 @@ "dev": true, "optional": true, "requires": { - "jsbn": "~0.1.0" + "jsbn": "0.1.1" } }, "electron-to-chromium": { @@ -2005,9 +1669,9 @@ "resolved": "http://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.0.0.tgz", "integrity": "sha1-40puqnkPYvzNcdk5WfVrK0MtsQo=", "requires": { - "graceful-fs": "^4.1.2", - "memory-fs": "^0.4.0", - "tapable": "^1.0.0" + "graceful-fs": "4.1.11", + "memory-fs": "0.4.1", + "tapable": "1.0.0" } }, "errno": { @@ -2015,7 +1679,7 @@ "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz", "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==", "requires": { - "prr": "~1.0.1" + "prr": "1.0.1" } }, "error-ex": { @@ -2024,7 +1688,7 @@ "integrity": "sha1-+FWobOYa3E6GIcPNoh56dhLDqNw=", "dev": true, "requires": { - "is-arrayish": "^0.2.1" + "is-arrayish": "0.2.1" } }, "es5-ext": { @@ -2033,9 +1697,9 @@ "integrity": "sha512-MYK02wXfwTMie5TEJWPolgOsXEmz7wKCQaGzgmRjZOoV6VLG8I5dSv2bn6AOClXhK64gnSQTQ9W9MKvx87J4gw==", "dev": true, "requires": { - "es6-iterator": "~2.0.3", - "es6-symbol": "~3.1.1", - "next-tick": "1" + "es6-iterator": "2.0.3", + "es6-symbol": "3.1.1", + "next-tick": "1.0.0" } }, "es6-iterator": { @@ -2044,9 +1708,9 @@ "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", "dev": true, "requires": { - "d": "1", - "es5-ext": "^0.10.35", - "es6-symbol": "^3.1.1" + "d": "1.0.0", + "es5-ext": "0.10.41", + "es6-symbol": "3.1.1" } }, "es6-map": { @@ -2055,12 +1719,12 @@ "integrity": "sha1-kTbgUD3MBqMBaQ8LsU/042TpSfA=", "dev": true, "requires": { - "d": "1", - "es5-ext": "~0.10.14", - "es6-iterator": "~2.0.1", - "es6-set": "~0.1.5", - "es6-symbol": "~3.1.1", - "event-emitter": "~0.3.5" + "d": "1.0.0", + "es5-ext": "0.10.41", + "es6-iterator": "2.0.3", + "es6-set": "0.1.5", + "es6-symbol": "3.1.1", + "event-emitter": "0.3.5" } }, "es6-set": { @@ -2069,11 +1733,11 @@ "integrity": "sha1-0rPsXU2ADO2BjbU40ol02wpzzLE=", "dev": true, "requires": { - "d": "1", - "es5-ext": "~0.10.14", - "es6-iterator": "~2.0.1", + "d": "1.0.0", + "es5-ext": "0.10.41", + "es6-iterator": "2.0.3", "es6-symbol": "3.1.1", - "event-emitter": "~0.3.5" + "event-emitter": "0.3.5" } }, "es6-symbol": { @@ -2082,8 +1746,8 @@ "integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=", "dev": true, "requires": { - "d": "1", - "es5-ext": "~0.10.14" + "d": "1.0.0", + "es5-ext": "0.10.41" } }, "es6-weak-map": { @@ -2092,10 +1756,10 @@ "integrity": "sha1-XjqzIlH/0VOKH45f+hNXdy+S2W8=", "dev": true, "requires": { - "d": "1", - "es5-ext": "^0.10.14", - "es6-iterator": "^2.0.1", - "es6-symbol": "^3.1.1" + "d": "1.0.0", + "es5-ext": "0.10.41", + "es6-iterator": "2.0.3", + "es6-symbol": "3.1.1" } }, "escape-string-regexp": { @@ -2103,44 +1767,16 @@ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" }, - "escodegen": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.9.1.tgz", - "integrity": "sha512-6hTjO1NAWkHnDk3OqQ4YrCuwwmGHL9S3nPlzBOUG/R44rda3wLNrfvQ5fkSGjyhHFKM7ALPKcKGrwvCLe0lC7Q==", + "escope": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/escope/-/escope-3.6.0.tgz", + "integrity": "sha1-4Bl16BJ4GhY6ba392AOY3GTIicM=", "dev": true, "requires": { - "esprima": "^3.1.3", - "estraverse": "^4.2.0", - "esutils": "^2.0.2", - "optionator": "^0.8.1", - "source-map": "~0.6.1" - }, - "dependencies": { - "esprima": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz", - "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=", - "dev": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "optional": true - } - } - }, - "escope": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/escope/-/escope-3.6.0.tgz", - "integrity": "sha1-4Bl16BJ4GhY6ba392AOY3GTIicM=", - "dev": true, - "requires": { - "es6-map": "^0.1.3", - "es6-weak-map": "^2.0.1", - "esrecurse": "^4.1.0", - "estraverse": "^4.1.1" + "es6-map": "0.1.5", + "es6-weak-map": "2.0.2", + "esrecurse": "4.2.1", + "estraverse": "4.2.0" } }, "eslint": { @@ -2149,41 +1785,41 @@ "integrity": "sha1-yPxiAcf0DdCJQbh8CFdnOGpnmsw=", "dev": true, "requires": { - "babel-code-frame": "^6.16.0", - "chalk": "^1.1.3", - "concat-stream": "^1.5.2", - "debug": "^2.1.1", - "doctrine": "^2.0.0", - "escope": "^3.6.0", - "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.14.0", - "ignore": "^3.2.0", - "imurmurhash": "^0.1.4", - "inquirer": "^0.12.0", - "is-my-json-valid": "^2.10.0", - "is-resolvable": "^1.0.0", - "js-yaml": "^3.5.1", - "json-stable-stringify": "^1.0.0", - "levn": "^0.3.0", - "lodash": "^4.0.0", - "mkdirp": "^0.5.0", - "natural-compare": "^1.4.0", - "optionator": "^0.8.2", - "path-is-inside": "^1.0.1", - "pluralize": "^1.2.1", - "progress": "^1.1.8", - "require-uncached": "^1.0.2", - "shelljs": "^0.7.5", - "strip-bom": "^3.0.0", - "strip-json-comments": "~2.0.1", - "table": "^3.7.8", - "text-table": "~0.2.0", - "user-home": "^2.0.0" + "babel-code-frame": "6.26.0", + "chalk": "1.1.3", + "concat-stream": "1.6.1", + "debug": "2.6.9", + "doctrine": "2.1.0", + "escope": "3.6.0", + "espree": "3.5.4", + "esquery": "1.0.0", + "estraverse": "4.2.0", + "esutils": "2.0.2", + "file-entry-cache": "2.0.0", + "glob": "7.1.2", + "globals": "9.18.0", + "ignore": "3.3.7", + "imurmurhash": "0.1.4", + "inquirer": "0.12.0", + "is-my-json-valid": "2.17.2", + "is-resolvable": "1.1.0", + "js-yaml": "3.11.0", + "json-stable-stringify": "1.0.1", + "levn": "0.3.0", + "lodash": "4.17.5", + "mkdirp": "0.5.1", + "natural-compare": "1.4.0", + "optionator": "0.8.2", + "path-is-inside": "1.0.2", + "pluralize": "1.2.1", + "progress": "1.1.8", + "require-uncached": "1.0.3", + "shelljs": "0.7.8", + "strip-bom": "3.0.0", + "strip-json-comments": "2.0.1", + "table": "3.8.3", + "text-table": "0.2.0", + "user-home": "2.0.0" }, "dependencies": { "debug": { @@ -2201,19 +1837,19 @@ "integrity": "sha1-HvK/1jUE3wvHV4X/+MLEHfEvB34=", "dev": true, "requires": { - "ansi-escapes": "^1.1.0", - "ansi-regex": "^2.0.0", - "chalk": "^1.0.0", - "cli-cursor": "^1.0.1", - "cli-width": "^2.0.0", - "figures": "^1.3.5", - "lodash": "^4.3.0", - "readline2": "^1.0.1", - "run-async": "^0.1.0", - "rx-lite": "^3.1.2", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.0", - "through": "^2.3.6" + "ansi-escapes": "1.4.0", + "ansi-regex": "2.1.1", + "chalk": "1.1.3", + "cli-cursor": "1.0.2", + "cli-width": "2.2.0", + "figures": "1.7.0", + "lodash": "4.17.5", + "readline2": "1.0.1", + "run-async": "0.1.0", + "rx-lite": "3.1.2", + "string-width": "1.0.2", + "strip-ansi": "3.0.1", + "through": "2.3.8" } }, "lodash": { @@ -2228,7 +1864,7 @@ "integrity": "sha1-yK1KXhEGYeQCp9IbUw4AnyX444k=", "dev": true, "requires": { - "once": "^1.3.0" + "once": "1.4.0" } }, "strip-bom": { @@ -2243,7 +1879,7 @@ "integrity": "sha1-nHC/2Babwdy/SGBODwS4tJzenp8=", "dev": true, "requires": { - "os-homedir": "^1.0.0" + "os-homedir": "1.0.2" } } } @@ -2254,7 +1890,7 @@ "integrity": "sha512-/fhjt/VqzBA2SRsx7ErDtv6Ayf+XLw9LIOqmpBuHFCVwyJo2EtzGWMB9fYRFBoWWQLxmNmCpenNiH0RxyeS41w==", "dev": true, "requires": { - "eslint-restricted-globals": "^0.1.1" + "eslint-restricted-globals": "0.1.1" } }, "eslint-import-resolver-node": { @@ -2263,8 +1899,8 @@ "integrity": "sha512-sfmTqJfPSizWu4aymbPr4Iidp5yKm8yDkHp+Ir3YiTHiiDfxh69mOUsmiqW6RZ9zRXFaF64GtYmN7e+8GHBv6Q==", "dev": true, "requires": { - "debug": "^2.6.9", - "resolve": "^1.5.0" + "debug": "2.6.9", + "resolve": "1.5.0" }, "dependencies": { "debug": { @@ -2284,8 +1920,8 @@ "integrity": "sha512-jDI/X5l/6D1rRD/3T43q8Qgbls2nq5km5KSqiwlyUbGo5+04fXhMKdCPhjwbqAa6HXWaMxj8Q4hQDIh7IadJQw==", "dev": true, "requires": { - "debug": "^2.6.8", - "pkg-dir": "^1.0.0" + "debug": "2.6.9", + "pkg-dir": "1.0.0" }, "dependencies": { "debug": { @@ -2305,7 +1941,7 @@ "integrity": "sha512-GJzxW7QwiIiW0ZA/+nY+N5TuK3es4Uei0D4xuy14dLZBYEFhM6e7c0J1u4+/iwfPqFtkr5a0oSApnSKF4U6KHw==", "dev": true, "requires": { - "lodash": "^4.15.0" + "lodash": "4.17.5" }, "dependencies": { "lodash": { @@ -2322,16 +1958,16 @@ "integrity": "sha1-JgAu+/ylmJtyiKwEdQi9JPIXsWk=", "dev": true, "requires": { - "builtin-modules": "^1.1.1", - "contains-path": "^0.1.0", - "debug": "^2.6.8", + "builtin-modules": "1.1.1", + "contains-path": "0.1.0", + "debug": "2.6.9", "doctrine": "1.5.0", - "eslint-import-resolver-node": "^0.3.1", - "eslint-module-utils": "^2.1.1", - "has": "^1.0.1", - "lodash": "^4.17.4", - "minimatch": "^3.0.3", - "read-pkg-up": "^2.0.0" + "eslint-import-resolver-node": "0.3.2", + "eslint-module-utils": "2.1.1", + "has": "1.0.1", + "lodash": "4.17.5", + "minimatch": "3.0.4", + "read-pkg-up": "2.0.0" }, "dependencies": { "debug": { @@ -2349,8 +1985,8 @@ "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=", "dev": true, "requires": { - "esutils": "^2.0.2", - "isarray": "^1.0.0" + "esutils": "2.0.2", + "isarray": "1.0.0" } }, "load-json-file": { @@ -2359,10 +1995,10 @@ "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", "dev": true, "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^2.2.0", - "pify": "^2.0.0", - "strip-bom": "^3.0.0" + "graceful-fs": "4.1.11", + "parse-json": "2.2.0", + "pify": "2.3.0", + "strip-bom": "3.0.0" } }, "lodash": { @@ -2377,7 +2013,7 @@ "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", "dev": true, "requires": { - "pify": "^2.0.0" + "pify": "2.3.0" } }, "read-pkg": { @@ -2386,9 +2022,9 @@ "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", "dev": true, "requires": { - "load-json-file": "^2.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^2.0.0" + "load-json-file": "2.0.0", + "normalize-package-data": "2.4.0", + "path-type": "2.0.0" } }, "read-pkg-up": { @@ -2397,8 +2033,8 @@ "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", "dev": true, "requires": { - "find-up": "^2.0.0", - "read-pkg": "^2.0.0" + "find-up": "2.1.0", + "read-pkg": "2.0.0" } }, "strip-bom": { @@ -2409,26 +2045,36 @@ } } }, - "eslint-plugin-jest": { - "version": "19.0.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-19.0.1.tgz", - "integrity": "sha1-QqQg6Q6BqnThYsFhZuQ6MbiQ7s4=", - "dev": true - }, "eslint-restricted-globals": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/eslint-restricted-globals/-/eslint-restricted-globals-0.1.1.tgz", "integrity": "sha1-NfDVy8ZMLj7WLpO0saevBbp+1Nc=", "dev": true }, + "eslint-scope": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-3.7.1.tgz", + "integrity": "sha1-PWPD7f2gLgbgGkUq2IyqzHzctug=", + "dev": true, + "requires": { + "esrecurse": "4.2.1", + "estraverse": "4.2.0" + } + }, + "eslint-visitor-keys": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz", + "integrity": "sha512-qzm/XxIbxm/FHyH341ZrbnMUpe+5Bocte9xkmFMzPMjRaZMcXww+MpBptFvtU+79L362nqiLhekCxCxDPaUMBQ==", + "dev": true + }, "espree": { "version": "3.5.4", "resolved": "https://registry.npmjs.org/espree/-/espree-3.5.4.tgz", "integrity": "sha512-yAcIQxtmMiB/jL32dzEp2enBeidsB7xWPLNiw3IIkpVds1P+h7qF9YwJq1yUNzp2OKXgAprs4F61ih66UsoD1A==", "dev": true, "requires": { - "acorn": "^5.5.0", - "acorn-jsx": "^3.0.0" + "acorn": "5.5.3", + "acorn-jsx": "3.0.1" } }, "esprima": { @@ -2443,7 +2089,7 @@ "integrity": "sha1-z7qLV9f7qT8XKYqKAGoEzaE9gPo=", "dev": true, "requires": { - "estraverse": "^4.0.0" + "estraverse": "4.2.0" } }, "esrecurse": { @@ -2452,7 +2098,7 @@ "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", "dev": true, "requires": { - "estraverse": "^4.1.0" + "estraverse": "4.2.0" } }, "estraverse": { @@ -2473,17 +2119,8 @@ "integrity": "sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk=", "dev": true, "requires": { - "d": "1", - "es5-ext": "~0.10.14" - } - }, - "exec-sh": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.2.1.tgz", - "integrity": "sha512-aLt95pexaugVtQerpmE51+4QfWrNc304uez7jvj6fWnN8GeEHpttB8F36n8N7uVhUMbH/1enbxQ9HImZ4w/9qg==", - "dev": true, - "requires": { - "merge": "^1.1.3" + "d": "1.0.0", + "es5-ext": "0.10.41" } }, "exit-hook": { @@ -2496,8 +2133,9 @@ "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", "dev": true, + "optional": true, "requires": { - "is-posix-bracket": "^0.1.0" + "is-posix-bracket": "0.1.1" } }, "expand-range": { @@ -2505,8 +2143,9 @@ "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz", "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=", "dev": true, + "optional": true, "requires": { - "fill-range": "^2.1.0" + "fill-range": "2.2.3" } }, "extend": { @@ -2514,35 +2153,14 @@ "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=" }, - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dev": true, - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, "external-editor": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-1.1.1.tgz", "integrity": "sha1-Etew24UPf/fnCBuvQAVwAGDEYAs=", "requires": { - "extend": "^3.0.0", - "spawn-sync": "^1.0.15", - "tmp": "^0.0.29" + "extend": "3.0.1", + "spawn-sync": "1.0.15", + "tmp": "0.0.29" } }, "extglob": { @@ -2550,8 +2168,9 @@ "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", "dev": true, + "optional": true, "requires": { - "is-extglob": "^1.0.0" + "is-extglob": "1.0.0" } }, "extsprintf": { @@ -2584,25 +2203,16 @@ }, "fastparse": { "version": "1.1.1", - "resolved": "http://registry.npmjs.org/fastparse/-/fastparse-1.1.1.tgz", + "resolved": "https://registry.npmjs.org/fastparse/-/fastparse-1.1.1.tgz", "integrity": "sha1-0eJkOzipTXWDtHkGDmxK/8lAcfg=" }, - "fb-watchman": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.0.tgz", - "integrity": "sha1-VOmr99+i8mzZsWNsWIwa/AXeXVg=", - "dev": true, - "requires": { - "bser": "^2.0.0" - } - }, "figures": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=", "requires": { - "escape-string-regexp": "^1.0.5", - "object-assign": "^4.1.0" + "escape-string-regexp": "1.0.5", + "object-assign": "4.1.1" } }, "file-entry-cache": { @@ -2611,8 +2221,8 @@ "integrity": "sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=", "dev": true, "requires": { - "flat-cache": "^1.2.1", - "object-assign": "^4.0.1" + "flat-cache": "1.3.0", + "object-assign": "4.1.1" } }, "file-exists": { @@ -2624,29 +2234,21 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz", "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=", - "dev": true - }, - "fileset": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/fileset/-/fileset-2.0.3.tgz", - "integrity": "sha1-jnVIqW08wjJ+5eZ0FocjozO7oqA=", "dev": true, - "requires": { - "glob": "^7.0.3", - "minimatch": "^3.0.3" - } + "optional": true }, "fill-range": { "version": "2.2.3", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.3.tgz", "integrity": "sha1-ULd9/X5Gm8dJJHCWNpn+eoSFpyM=", "dev": true, + "optional": true, "requires": { - "is-number": "^2.1.0", - "isobject": "^2.0.0", - "randomatic": "^1.1.3", - "repeat-element": "^1.1.2", - "repeat-string": "^1.5.2" + "is-number": "2.1.0", + "isobject": "2.1.0", + "randomatic": "1.1.7", + "repeat-element": "1.1.2", + "repeat-string": "1.6.1" } }, "find": { @@ -2654,7 +2256,7 @@ "resolved": "http://registry.npmjs.org/find/-/find-0.2.9.tgz", "integrity": "sha1-S3Px/55WrZG3bnFkB/5f/mVUu4w=", "requires": { - "traverse-chain": "~0.1.0" + "traverse-chain": "0.1.0" } }, "find-up": { @@ -2663,7 +2265,7 @@ "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", "dev": true, "requires": { - "locate-path": "^2.0.0" + "locate-path": "2.0.0" } }, "flat-cache": { @@ -2672,10 +2274,10 @@ "integrity": "sha1-0wMLMrOBVPTjt+nHCfSQ9++XxIE=", "dev": true, "requires": { - "circular-json": "^0.3.1", - "del": "^2.0.2", - "graceful-fs": "^4.1.2", - "write": "^0.2.1" + "circular-json": "0.3.3", + "del": "2.2.2", + "graceful-fs": "4.1.11", + "write": "0.2.1" } }, "flow-bin": { @@ -2688,15 +2290,17 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", - "dev": true + "dev": true, + "optional": true }, "for-own": { "version": "0.1.5", "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", "dev": true, + "optional": true, "requires": { - "for-in": "^1.0.1" + "for-in": "1.0.2" } }, "forever-agent": { @@ -2711,18 +2315,9 @@ "integrity": "sha1-SXBJi+YEwgwAXU9cI67NIda0kJk=", "dev": true, "requires": { - "asynckit": "^0.4.0", + "asynckit": "0.4.0", "combined-stream": "1.0.6", - "mime-types": "^2.1.12" - } - }, - "fragment-cache": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", - "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", - "dev": true, - "requires": { - "map-cache": "^0.2.2" + "mime-types": "2.1.18" } }, "fs-extra": { @@ -2730,9 +2325,9 @@ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.3.tgz", "integrity": "sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==", "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" + "graceful-fs": "4.1.11", + "jsonfile": "4.0.0", + "universalify": "0.1.1" } }, "fs-readdir-recursive": { @@ -2753,1104 +2348,201 @@ "dev": true, "optional": true, "requires": { - "nan": "^2.3.0", - "node-pre-gyp": "^0.6.39" + "nan": "2.10.0", + "node-pre-gyp": "0.6.39" + } + }, + "fstream": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.11.tgz", + "integrity": "sha1-XB+x8RdHcRTwYyoOtLcbPLD9MXE=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "inherits": "2.0.3", + "mkdirp": "0.5.1", + "rimraf": "2.6.2" + } + }, + "fstream-ignore": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/fstream-ignore/-/fstream-ignore-1.0.5.tgz", + "integrity": "sha1-nDHa40dnAY/h0kmyTa2mfQktoQU=", + "dev": true, + "optional": true, + "requires": { + "fstream": "1.0.11", + "inherits": "2.0.3", + "minimatch": "3.0.4" + } + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", + "dev": true + }, + "gauge": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-1.2.7.tgz", + "integrity": "sha1-6c7FSD09TuDvRLYKfZnkk14TbZM=", + "requires": { + "ansi": "0.3.1", + "has-unicode": "2.0.1", + "lodash.pad": "4.5.1", + "lodash.padend": "4.6.1", + "lodash.padstart": "4.6.1" + } + }, + "generate-function": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.0.0.tgz", + "integrity": "sha1-aFj+fAlpt9TpCTM3ZHrHn2DfvnQ=", + "dev": true + }, + "generate-object-property": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/generate-object-property/-/generate-object-property-1.2.0.tgz", + "integrity": "sha1-nA4cQDCM6AT0eDYYuTf6iPmdUNA=", + "dev": true, + "requires": { + "is-property": "1.0.2" + } + }, + "get-amd-module-type": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-amd-module-type/-/get-amd-module-type-2.0.5.tgz", + "integrity": "sha1-5nHsWpatX79To6IqKJ6SOMdy3bA=", + "requires": { + "ast-module-types": "2.3.2", + "node-source-walk": "3.3.0" + } + }, + "get-own-enumerable-property-symbols": { + "version": "2.0.1", + "resolved": "http://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-2.0.1.tgz", + "integrity": "sha1-XErYfyg0xLm06EVJ3B4GUPs4wks=" + }, + "getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "dev": true, + "requires": { + "assert-plus": "1.0.0" + } + }, + "glob": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", + "requires": { + "fs.realpath": "1.0.0", + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" + } + }, + "glob-base": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", + "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", + "dev": true, + "optional": true, + "requires": { + "glob-parent": "2.0.0", + "is-glob": "2.0.1" + } + }, + "glob-parent": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", + "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", + "dev": true, + "requires": { + "is-glob": "2.0.1" + } + }, + "globals": { + "version": "9.18.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", + "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==", + "dev": true + }, + "globby": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-5.0.0.tgz", + "integrity": "sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0=", + "dev": true, + "requires": { + "array-union": "1.0.2", + "arrify": "1.0.1", + "glob": "7.1.2", + "object-assign": "4.1.1", + "pify": "2.3.0", + "pinkie-promise": "2.0.1" + } + }, + "gonzales-pe": { + "version": "3.4.7", + "resolved": "https://registry.npmjs.org/gonzales-pe/-/gonzales-pe-3.4.7.tgz", + "integrity": "sha1-F8e+Z61sr/Ynej44esc26YPSgOw=", + "requires": { + "minimist": "1.1.3" + }, + "dependencies": { + "minimist": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.1.3.tgz", + "integrity": "sha1-O+39kaktOQFvz6ocaB6Pqhoe/ag=" + } + } + }, + "graceful-fs": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=" + }, + "growl": { + "version": "1.10.5", + "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", + "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", + "dev": true + }, + "har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", + "dev": true + }, + "har-validator": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.0.3.tgz", + "integrity": "sha1-ukAsJmGU8VlW7xXg/PJCmT9qff0=", + "dev": true, + "requires": { + "ajv": "5.5.2", + "har-schema": "2.0.0" }, "dependencies": { - "abbrev": { - "version": "1.1.0", - "bundled": true, - "dev": true, - "optional": true - }, "ajv": { - "version": "4.11.8", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "co": "^4.6.0", - "json-stable-stringify": "^1.0.1" - } - }, - "ansi-regex": { - "version": "2.1.1", - "bundled": true, - "dev": true - }, - "aproba": { - "version": "1.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "are-we-there-yet": { - "version": "1.1.4", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "delegates": "^1.0.0", - "readable-stream": "^2.0.6" - } - }, - "asn1": { - "version": "0.2.3", - "bundled": true, - "dev": true, - "optional": true - }, - "assert-plus": { - "version": "0.2.0", - "bundled": true, - "dev": true, - "optional": true - }, - "asynckit": { - "version": "0.4.0", - "bundled": true, - "dev": true, - "optional": true - }, - "aws-sign2": { - "version": "0.6.0", - "bundled": true, - "dev": true, - "optional": true - }, - "aws4": { - "version": "1.6.0", - "bundled": true, - "dev": true, - "optional": true - }, - "balanced-match": { - "version": "0.4.2", - "bundled": true, - "dev": true - }, - "bcrypt-pbkdf": { - "version": "1.0.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "tweetnacl": "^0.14.3" - } - }, - "block-stream": { - "version": "0.0.9", - "bundled": true, + "version": "5.5.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", + "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", "dev": true, "requires": { - "inherits": "~2.0.0" - } - }, - "boom": { - "version": "2.10.1", - "bundled": true, - "dev": true, - "requires": { - "hoek": "2.x.x" - } - }, - "brace-expansion": { - "version": "1.1.7", - "bundled": true, - "dev": true, - "requires": { - "balanced-match": "^0.4.1", - "concat-map": "0.0.1" - } - }, - "buffer-shims": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "caseless": { - "version": "0.12.0", - "bundled": true, - "dev": true, - "optional": true - }, - "co": { - "version": "4.6.0", - "bundled": true, - "dev": true, - "optional": true - }, - "code-point-at": { - "version": "1.1.0", - "bundled": true, - "dev": true - }, - "combined-stream": { - "version": "1.0.5", - "bundled": true, - "dev": true, - "requires": { - "delayed-stream": "~1.0.0" - } - }, - "concat-map": { - "version": "0.0.1", - "bundled": true, - "dev": true - }, - "console-control-strings": { - "version": "1.1.0", - "bundled": true, - "dev": true - }, - "core-util-is": { - "version": "1.0.2", - "bundled": true, - "dev": true - }, - "cryptiles": { - "version": "2.0.5", - "bundled": true, - "dev": true, - "requires": { - "boom": "2.x.x" - } - }, - "dashdash": { - "version": "1.14.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "assert-plus": "^1.0.0" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - } - } - }, - "debug": { - "version": "2.6.8", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "ms": "2.0.0" - } - }, - "deep-extend": { - "version": "0.4.2", - "bundled": true, - "dev": true, - "optional": true - }, - "delayed-stream": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "delegates": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "detect-libc": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "ecc-jsbn": { - "version": "0.1.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "jsbn": "~0.1.0" - } - }, - "extend": { - "version": "3.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "extsprintf": { - "version": "1.0.2", - "bundled": true, - "dev": true - }, - "forever-agent": { - "version": "0.6.1", - "bundled": true, - "dev": true, - "optional": true - }, - "form-data": { - "version": "2.1.4", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.5", - "mime-types": "^2.1.12" - } - }, - "fs.realpath": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "fstream": { - "version": "1.0.11", - "bundled": true, - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "inherits": "~2.0.0", - "mkdirp": ">=0.5 0", - "rimraf": "2" - } - }, - "fstream-ignore": { - "version": "1.0.5", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "fstream": "^1.0.0", - "inherits": "2", - "minimatch": "^3.0.0" - } - }, - "gauge": { - "version": "2.7.4", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "aproba": "^1.0.3", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.0", - "object-assign": "^4.1.0", - "signal-exit": "^3.0.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wide-align": "^1.1.0" - } - }, - "getpass": { - "version": "0.1.7", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "assert-plus": "^1.0.0" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - } - } - }, - "glob": { - "version": "7.1.2", - "bundled": true, - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "graceful-fs": { - "version": "4.1.11", - "bundled": true, - "dev": true - }, - "har-schema": { - "version": "1.0.5", - "bundled": true, - "dev": true, - "optional": true - }, - "har-validator": { - "version": "4.2.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "ajv": "^4.9.1", - "har-schema": "^1.0.5" - } - }, - "has-unicode": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "hawk": { - "version": "3.1.3", - "bundled": true, - "dev": true, - "requires": { - "boom": "2.x.x", - "cryptiles": "2.x.x", - "hoek": "2.x.x", - "sntp": "1.x.x" - } - }, - "hoek": { - "version": "2.16.3", - "bundled": true, - "dev": true - }, - "http-signature": { - "version": "1.1.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "assert-plus": "^0.2.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" - } - }, - "inflight": { - "version": "1.0.6", - "bundled": true, - "dev": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.3", - "bundled": true, - "dev": true - }, - "ini": { - "version": "1.3.4", - "bundled": true, - "dev": true, - "optional": true - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "is-typedarray": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "isarray": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "isstream": { - "version": "0.1.2", - "bundled": true, - "dev": true, - "optional": true - }, - "jodid25519": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "jsbn": "~0.1.0" - } - }, - "jsbn": { - "version": "0.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "json-schema": { - "version": "0.2.3", - "bundled": true, - "dev": true, - "optional": true - }, - "json-stable-stringify": { - "version": "1.0.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "jsonify": "~0.0.0" - } - }, - "json-stringify-safe": { - "version": "5.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "jsonify": { - "version": "0.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "jsprim": { - "version": "1.4.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.0.2", - "json-schema": "0.2.3", - "verror": "1.3.6" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - } - } - }, - "mime-db": { - "version": "1.27.0", - "bundled": true, - "dev": true - }, - "mime-types": { - "version": "2.1.15", - "bundled": true, - "dev": true, - "requires": { - "mime-db": "~1.27.0" - } - }, - "minimatch": { - "version": "3.0.4", - "bundled": true, - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "0.0.8", - "bundled": true, - "dev": true - }, - "mkdirp": { - "version": "0.5.1", - "bundled": true, - "dev": true, - "requires": { - "minimist": "0.0.8" - } - }, - "ms": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "node-pre-gyp": { - "version": "0.6.39", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "detect-libc": "^1.0.2", - "hawk": "3.1.3", - "mkdirp": "^0.5.1", - "nopt": "^4.0.1", - "npmlog": "^4.0.2", - "rc": "^1.1.7", - "request": "2.81.0", - "rimraf": "^2.6.1", - "semver": "^5.3.0", - "tar": "^2.2.1", - "tar-pack": "^3.4.0" - } - }, - "nopt": { - "version": "4.0.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "abbrev": "1", - "osenv": "^0.1.4" - } - }, - "npmlog": { - "version": "4.1.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" - } - }, - "number-is-nan": { - "version": "1.0.1", - "bundled": true, - "dev": true - }, - "oauth-sign": { - "version": "0.8.2", - "bundled": true, - "dev": true, - "optional": true - }, - "object-assign": { - "version": "4.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "once": { - "version": "1.4.0", - "bundled": true, - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "os-homedir": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "os-tmpdir": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "osenv": { - "version": "0.1.4", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.0" - } - }, - "path-is-absolute": { - "version": "1.0.1", - "bundled": true, - "dev": true - }, - "performance-now": { - "version": "0.2.0", - "bundled": true, - "dev": true, - "optional": true - }, - "process-nextick-args": { - "version": "1.0.7", - "bundled": true, - "dev": true - }, - "punycode": { - "version": "1.4.1", - "bundled": true, - "dev": true, - "optional": true - }, - "qs": { - "version": "6.4.0", - "bundled": true, - "dev": true, - "optional": true - }, - "rc": { - "version": "1.2.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "deep-extend": "~0.4.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "bundled": true, - "dev": true, - "optional": true - } - } - }, - "readable-stream": { - "version": "2.2.9", - "bundled": true, - "dev": true, - "requires": { - "buffer-shims": "~1.0.0", - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "~1.0.0", - "process-nextick-args": "~1.0.6", - "string_decoder": "~1.0.0", - "util-deprecate": "~1.0.1" - } - }, - "request": { - "version": "2.81.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "aws-sign2": "~0.6.0", - "aws4": "^1.2.1", - "caseless": "~0.12.0", - "combined-stream": "~1.0.5", - "extend": "~3.0.0", - "forever-agent": "~0.6.1", - "form-data": "~2.1.1", - "har-validator": "~4.2.1", - "hawk": "~3.1.3", - "http-signature": "~1.1.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.7", - "oauth-sign": "~0.8.1", - "performance-now": "^0.2.0", - "qs": "~6.4.0", - "safe-buffer": "^5.0.1", - "stringstream": "~0.0.4", - "tough-cookie": "~2.3.0", - "tunnel-agent": "^0.6.0", - "uuid": "^3.0.0" - } - }, - "rimraf": { - "version": "2.6.1", - "bundled": true, - "dev": true, - "requires": { - "glob": "^7.0.5" - } - }, - "safe-buffer": { - "version": "5.0.1", - "bundled": true, - "dev": true - }, - "semver": { - "version": "5.3.0", - "bundled": true, - "dev": true, - "optional": true - }, - "set-blocking": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "signal-exit": { - "version": "3.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "sntp": { - "version": "1.0.9", - "bundled": true, - "dev": true, - "requires": { - "hoek": "2.x.x" - } - }, - "sshpk": { - "version": "1.13.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jodid25519": "^1.0.0", - "jsbn": "~0.1.0", - "tweetnacl": "~0.14.0" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - } - } - }, - "string-width": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - }, - "string_decoder": { - "version": "1.0.1", - "bundled": true, - "dev": true, - "requires": { - "safe-buffer": "^5.0.1" - } - }, - "stringstream": { - "version": "0.0.5", - "bundled": true, - "dev": true, - "optional": true - }, - "strip-ansi": { - "version": "3.0.1", - "bundled": true, - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "strip-json-comments": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "tar": { - "version": "2.2.1", - "bundled": true, - "dev": true, - "requires": { - "block-stream": "*", - "fstream": "^1.0.2", - "inherits": "2" - } - }, - "tar-pack": { - "version": "3.4.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "debug": "^2.2.0", - "fstream": "^1.0.10", - "fstream-ignore": "^1.0.5", - "once": "^1.3.3", - "readable-stream": "^2.1.4", - "rimraf": "^2.5.1", - "tar": "^2.2.1", - "uid-number": "^0.0.6" - } - }, - "tough-cookie": { - "version": "2.3.2", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "punycode": "^1.4.1" - } - }, - "tunnel-agent": { - "version": "0.6.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "safe-buffer": "^5.0.1" - } - }, - "tweetnacl": { - "version": "0.14.5", - "bundled": true, - "dev": true, - "optional": true - }, - "uid-number": { - "version": "0.0.6", - "bundled": true, - "dev": true, - "optional": true - }, - "util-deprecate": { - "version": "1.0.2", - "bundled": true, - "dev": true - }, - "uuid": { - "version": "3.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "verror": { - "version": "1.3.6", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "extsprintf": "1.0.2" - } - }, - "wide-align": { - "version": "1.1.2", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "string-width": "^1.0.2" - } - }, - "wrappy": { - "version": "1.0.2", - "bundled": true, - "dev": true - } - } - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "gauge": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-1.2.7.tgz", - "integrity": "sha1-6c7FSD09TuDvRLYKfZnkk14TbZM=", - "requires": { - "ansi": "^0.3.0", - "has-unicode": "^2.0.0", - "lodash.pad": "^4.1.0", - "lodash.padend": "^4.1.0", - "lodash.padstart": "^4.1.0" - } - }, - "generate-function": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.0.0.tgz", - "integrity": "sha1-aFj+fAlpt9TpCTM3ZHrHn2DfvnQ=", - "dev": true - }, - "generate-object-property": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/generate-object-property/-/generate-object-property-1.2.0.tgz", - "integrity": "sha1-nA4cQDCM6AT0eDYYuTf6iPmdUNA=", - "dev": true, - "requires": { - "is-property": "^1.0.0" - } - }, - "get-amd-module-type": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-amd-module-type/-/get-amd-module-type-2.0.5.tgz", - "integrity": "sha1-5nHsWpatX79To6IqKJ6SOMdy3bA=", - "requires": { - "ast-module-types": "^2.3.2", - "node-source-walk": "^3.2.0" - } - }, - "get-caller-file": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.2.tgz", - "integrity": "sha1-9wLmMSfn4jHBYKgMFVSstw1QR+U=", - "dev": true - }, - "get-own-enumerable-property-symbols": { - "version": "2.0.1", - "resolved": "http://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-2.0.1.tgz", - "integrity": "sha1-XErYfyg0xLm06EVJ3B4GUPs4wks=" - }, - "get-value": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", - "dev": true - }, - "getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0" - } - }, - "glob": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "glob-base": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", - "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", - "dev": true, - "requires": { - "glob-parent": "^2.0.0", - "is-glob": "^2.0.0" - } - }, - "glob-parent": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", - "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", - "dev": true, - "requires": { - "is-glob": "^2.0.0" - } - }, - "globals": { - "version": "9.18.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", - "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==", - "dev": true - }, - "globby": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-5.0.0.tgz", - "integrity": "sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0=", - "dev": true, - "requires": { - "array-union": "^1.0.1", - "arrify": "^1.0.0", - "glob": "^7.0.3", - "object-assign": "^4.0.1", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" - } - }, - "gonzales-pe": { - "version": "3.4.7", - "resolved": "https://registry.npmjs.org/gonzales-pe/-/gonzales-pe-3.4.7.tgz", - "integrity": "sha1-F8e+Z61sr/Ynej44esc26YPSgOw=", - "requires": { - "minimist": "1.1.x" - }, - "dependencies": { - "minimist": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.1.3.tgz", - "integrity": "sha1-O+39kaktOQFvz6ocaB6Pqhoe/ag=" - } - } - }, - "graceful-fs": { - "version": "4.1.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", - "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=" - }, - "growly": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz", - "integrity": "sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=", - "dev": true - }, - "handlebars": { - "version": "4.0.11", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.0.11.tgz", - "integrity": "sha1-Ywo13+ApS8KB7a5v/F0yn8eYLcw=", - "dev": true, - "requires": { - "async": "^1.4.0", - "optimist": "^0.6.1", - "source-map": "^0.4.4", - "uglify-js": "^2.6" - }, - "dependencies": { - "async": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", - "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", - "dev": true - }, - "source-map": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", - "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", - "dev": true, - "requires": { - "amdefine": ">=0.0.4" - } - } - } - }, - "har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", - "dev": true - }, - "har-validator": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.0.3.tgz", - "integrity": "sha1-ukAsJmGU8VlW7xXg/PJCmT9qff0=", - "dev": true, - "requires": { - "ajv": "^5.1.0", - "har-schema": "^2.0.0" - }, - "dependencies": { - "ajv": { - "version": "5.5.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", - "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", - "dev": true, - "requires": { - "co": "^4.6.0", - "fast-deep-equal": "^1.0.0", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.3.0" + "co": "4.6.0", + "fast-deep-equal": "1.1.0", + "fast-json-stable-stringify": "2.0.0", + "json-schema-traverse": "0.3.1" } } } @@ -3861,7 +2553,7 @@ "integrity": "sha1-hGFzP1OLCDfJNh45qauelwTcLyg=", "dev": true, "requires": { - "function-bind": "^1.0.2" + "function-bind": "1.1.1" } }, "has-ansi": { @@ -3869,7 +2561,7 @@ "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", "requires": { - "ansi-regex": "^2.0.0" + "ansi-regex": "2.1.1" } }, "has-flag": { @@ -3882,76 +2574,16 @@ "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=" }, - "has-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", - "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", - "dev": true, - "requires": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" - }, - "dependencies": { - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - } - } - }, - "has-values": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", - "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" - }, - "dependencies": { - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, "hawk": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/hawk/-/hawk-6.0.2.tgz", "integrity": "sha512-miowhl2+U7Qle4vdLqDdPt9m09K6yZhkLDTWGoUiUzrQCn+mHHSmfJgAyGaLRZbPmTqfFFjRV1QWCW0VWUJBbQ==", "dev": true, "requires": { - "boom": "4.x.x", - "cryptiles": "3.x.x", - "hoek": "4.x.x", - "sntp": "2.x.x" + "boom": "4.3.1", + "cryptiles": "3.1.2", + "hoek": "4.2.1", + "sntp": "2.1.0" } }, "he": { @@ -3971,24 +2603,15 @@ "integrity": "sha1-42w/LSyufXRqhX440Y1fMqeILbg=", "dev": true, "requires": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.1" + "os-homedir": "1.0.2", + "os-tmpdir": "1.0.2" } }, "hosted-git-info": { "version": "2.6.0", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.6.0.tgz", - "integrity": "sha512-lIbgIIQA3lz5XaB6vxakj6sDHADJiZadYEJB+FgA+C4nubM1NwcuvUr9EJPmnH1skZqpqUzWborWo8EIUi0Sdw==", - "dev": true - }, - "html-encoding-sniffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz", - "integrity": "sha512-71lZziiDnsuabfdYiUeWdCVyKuqwWi23L8YeIgV9jSSZHCtb6wB1BKWooH7L3tn4/FuZJMVWyNaIDr4RGmaSYw==", - "dev": true, - "requires": { - "whatwg-encoding": "^1.0.1" - } + "integrity": "sha512-lIbgIIQA3lz5XaB6vxakj6sDHADJiZadYEJB+FgA+C4nubM1NwcuvUr9EJPmnH1skZqpqUzWborWo8EIUi0Sdw==", + "dev": true }, "http-signature": { "version": "1.2.0", @@ -3996,16 +2619,19 @@ "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", "dev": true, "requires": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" + "assert-plus": "1.0.0", + "jsprim": "1.4.1", + "sshpk": "1.14.1" } }, "iconv-lite": { - "version": "0.4.19", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz", - "integrity": "sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ==", - "dev": true + "version": "0.4.23", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz", + "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==", + "dev": true, + "requires": { + "safer-buffer": "2.1.2" + } }, "ignore": { "version": "3.3.7", @@ -4021,7 +2647,7 @@ }, "indexes-of": { "version": "1.0.1", - "resolved": "http://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz", + "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz", "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=" }, "inflight": { @@ -4029,8 +2655,8 @@ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", "requires": { - "once": "^1.3.0", - "wrappy": "1" + "once": "1.4.0", + "wrappy": "1.0.2" } }, "inherits": { @@ -4038,6 +2664,13 @@ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" }, + "ini": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", + "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", + "dev": true, + "optional": true + }, "ini-builder": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ini-builder/-/ini-builder-1.1.1.tgz", @@ -4048,20 +2681,20 @@ "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-1.2.3.tgz", "integrity": "sha1-TexvMvN+97sLLtPx0aXD9UUHSRg=", "requires": { - "ansi-escapes": "^1.1.0", - "chalk": "^1.0.0", - "cli-cursor": "^1.0.1", - "cli-width": "^2.0.0", - "external-editor": "^1.1.0", - "figures": "^1.3.5", - "lodash": "^4.3.0", + "ansi-escapes": "1.4.0", + "chalk": "1.1.3", + "cli-cursor": "1.0.2", + "cli-width": "2.2.0", + "external-editor": "1.1.1", + "figures": "1.7.0", + "lodash": "4.17.5", "mute-stream": "0.0.6", - "pinkie-promise": "^2.0.0", - "run-async": "^2.2.0", - "rx": "^4.1.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.0", - "through": "^2.3.6" + "pinkie-promise": "2.0.1", + "run-async": "2.3.0", + "rx": "4.1.0", + "string-width": "1.0.2", + "strip-ansi": "3.0.1", + "through": "2.3.8" }, "dependencies": { "lodash": { @@ -4083,30 +2716,7 @@ "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", "dev": true, "requires": { - "loose-envify": "^1.0.0" - } - }, - "invert-kv": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", - "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=", - "dev": true - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - }, - "dependencies": { - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true - } + "loose-envify": "1.3.1" } }, "is-arrayish": { @@ -4122,7 +2732,7 @@ "dev": true, "optional": true, "requires": { - "binary-extensions": "^1.0.0" + "binary-extensions": "1.11.0" } }, "is-buffer": { @@ -4137,74 +2747,32 @@ "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", "dev": true, "requires": { - "builtin-modules": "^1.0.0" - } - }, - "is-ci": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-1.1.0.tgz", - "integrity": "sha512-c7TnwxLePuqIlxHgr7xtxzycJPegNHFuIrBkwbf8hc58//+Op1CqFkyS+xnIMkwn9UsJIwc174BIjkyBmSpjKg==", - "dev": true, - "requires": { - "ci-info": "^1.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - }, - "dependencies": { - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true - } - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - }, - "dependencies": { - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true - } + "builtin-modules": "1.1.1" } }, "is-dotfile": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz", "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=", - "dev": true + "dev": true, + "optional": true }, "is-equal-shallow": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz", "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=", "dev": true, + "optional": true, "requires": { - "is-primitive": "^2.0.0" + "is-primitive": "2.0.0" } }, "is-extendable": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true + "dev": true, + "optional": true }, "is-extglob": { "version": "1.0.0", @@ -4218,7 +2786,7 @@ "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", "dev": true, "requires": { - "number-is-nan": "^1.0.0" + "number-is-nan": "1.0.1" } }, "is-fullwidth-code-point": { @@ -4226,7 +2794,7 @@ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", "requires": { - "number-is-nan": "^1.0.0" + "number-is-nan": "1.0.1" } }, "is-glob": { @@ -4235,7 +2803,7 @@ "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", "dev": true, "requires": { - "is-extglob": "^1.0.0" + "is-extglob": "1.0.0" } }, "is-my-ip-valid": { @@ -4250,11 +2818,11 @@ "integrity": "sha512-IBhBslgngMQN8DDSppmgDv7RNrlFotuuDsKcrCP3+HbFaVivIBU7u9oiiErw8sH4ynx3+gOGQ3q2otkgiSi6kg==", "dev": true, "requires": { - "generate-function": "^2.0.0", - "generate-object-property": "^1.1.0", - "is-my-ip-valid": "^1.0.0", - "jsonpointer": "^4.0.0", - "xtend": "^4.0.0" + "generate-function": "2.0.0", + "generate-object-property": "1.2.0", + "is-my-ip-valid": "1.0.0", + "jsonpointer": "4.0.1", + "xtend": "4.0.1" } }, "is-number": { @@ -4262,8 +2830,9 @@ "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", "dev": true, + "optional": true, "requires": { - "kind-of": "^3.0.2" + "kind-of": "3.2.2" } }, "is-obj": { @@ -4271,23 +2840,6 @@ "resolved": "http://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=" }, - "is-odd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-odd/-/is-odd-2.0.0.tgz", - "integrity": "sha512-OTiixgpZAT1M4NHgS5IguFp/Vz2VI3U7Goh4/HA1adtwyLtSBrxYlcSYkhpAE07s4fKEcjrFxyvtQBND4vFQyQ==", - "dev": true, - "requires": { - "is-number": "^4.0.0" - }, - "dependencies": { - "is-number": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", - "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", - "dev": true - } - } - }, "is-path-cwd": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz", @@ -4300,7 +2852,7 @@ "integrity": "sha1-ZHdYK4IU1gI0YJRWcAO+ip6sBNw=", "dev": true, "requires": { - "is-path-inside": "^1.0.0" + "is-path-inside": "1.0.1" } }, "is-path-inside": { @@ -4309,37 +2861,22 @@ "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=", "dev": true, "requires": { - "path-is-inside": "^1.0.1" - } - }, - "is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "requires": { - "isobject": "^3.0.1" - }, - "dependencies": { - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - } + "path-is-inside": "1.0.2" } }, "is-posix-bracket": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz", "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=", - "dev": true + "dev": true, + "optional": true }, "is-primitive": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz", "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=", - "dev": true + "dev": true, + "optional": true }, "is-promise": { "version": "2.1.0", @@ -4374,26 +2911,6 @@ "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", "dev": true }, - "is-utf8": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", - "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", - "dev": true - }, - "is-vendor-prefixed": { - "version": "1.0.0", - "resolved": "http://registry.npmjs.org/is-vendor-prefixed/-/is-vendor-prefixed-1.0.0.tgz", - "integrity": "sha1-0QQwU/TRTNeAfr4ohiGmoOrRrfg=", - "requires": { - "vendor-prefixes": "1.0.0" - } - }, - "is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", - "dev": true - }, "isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", @@ -4410,6 +2927,7 @@ "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", "dev": true, + "optional": true, "requires": { "isarray": "1.0.0" } @@ -4419,414 +2937,6 @@ "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" }, - "istanbul-api": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/istanbul-api/-/istanbul-api-1.3.1.tgz", - "integrity": "sha512-duj6AlLcsWNwUpfyfHt0nWIeRiZpuShnP40YTxOGQgtaN8fd6JYSxsvxUphTDy8V5MfDXo4s/xVCIIvVCO808g==", - "dev": true, - "requires": { - "async": "^2.1.4", - "compare-versions": "^3.1.0", - "fileset": "^2.0.2", - "istanbul-lib-coverage": "^1.2.0", - "istanbul-lib-hook": "^1.2.0", - "istanbul-lib-instrument": "^1.10.1", - "istanbul-lib-report": "^1.1.4", - "istanbul-lib-source-maps": "^1.2.4", - "istanbul-reports": "^1.3.0", - "js-yaml": "^3.7.0", - "mkdirp": "^0.5.1", - "once": "^1.4.0" - }, - "dependencies": { - "async": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.0.tgz", - "integrity": "sha512-xAfGg1/NTLBBKlHFmnd7PlmUW9KhVQIUuSrYem9xzFUZy13ScvtyGGejaae9iAVRiRq9+Cx7DPFaAAhCpyxyPw==", - "dev": true, - "requires": { - "lodash": "^4.14.0" - } - }, - "istanbul-lib-source-maps": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.4.tgz", - "integrity": "sha512-UzuK0g1wyQijiaYQxj/CdNycFhAd2TLtO2obKQMTZrZ1jzEMRY3rvpASEKkaxbRR6brvdovfA03znPa/pXcejg==", - "dev": true, - "requires": { - "debug": "^3.1.0", - "istanbul-lib-coverage": "^1.2.0", - "mkdirp": "^0.5.1", - "rimraf": "^2.6.1", - "source-map": "^0.5.3" - } - }, - "lodash": { - "version": "4.17.5", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.5.tgz", - "integrity": "sha512-svL3uiZf1RwhH+cWrfZn3A4+U58wbP0tGVTLQPbjplZxZ8ROD9VLuNgsRniTlLe7OlSqR79RUehXgpBW/s0IQw==", - "dev": true - } - } - }, - "istanbul-lib-coverage": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-1.2.0.tgz", - "integrity": "sha512-GvgM/uXRwm+gLlvkWHTjDAvwynZkL9ns15calTrmhGgowlwJBbWMYzWbKqE2DT6JDP1AFXKa+Zi0EkqNCUqY0A==", - "dev": true - }, - "istanbul-lib-hook": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-1.2.0.tgz", - "integrity": "sha512-p3En6/oGkFQV55Up8ZPC2oLxvgSxD8CzA0yBrhRZSh3pfv3OFj9aSGVC0yoerAi/O4u7jUVnOGVX1eVFM+0tmQ==", - "dev": true, - "requires": { - "append-transform": "^0.4.0" - } - }, - "istanbul-lib-instrument": { - "version": "1.10.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-1.10.1.tgz", - "integrity": "sha512-1dYuzkOCbuR5GRJqySuZdsmsNKPL3PTuyPevQfoCXJePT9C8y1ga75neU+Tuy9+yS3G/dgx8wgOmp2KLpgdoeQ==", - "dev": true, - "requires": { - "babel-generator": "^6.18.0", - "babel-template": "^6.16.0", - "babel-traverse": "^6.18.0", - "babel-types": "^6.18.0", - "babylon": "^6.18.0", - "istanbul-lib-coverage": "^1.2.0", - "semver": "^5.3.0" - } - }, - "istanbul-lib-report": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-1.1.4.tgz", - "integrity": "sha512-Azqvq5tT0U09nrncK3q82e/Zjkxa4tkFZv7E6VcqP0QCPn6oNljDPfrZEC/umNXds2t7b8sRJfs6Kmpzt8m2kA==", - "dev": true, - "requires": { - "istanbul-lib-coverage": "^1.2.0", - "mkdirp": "^0.5.1", - "path-parse": "^1.0.5", - "supports-color": "^3.1.2" - }, - "dependencies": { - "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", - "dev": true - }, - "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "dev": true, - "requires": { - "has-flag": "^1.0.0" - } - } - } - }, - "istanbul-lib-source-maps": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.3.tgz", - "integrity": "sha512-fDa0hwU/5sDXwAklXgAoCJCOsFsBplVQ6WBldz5UwaqOzmDhUK4nfuR7/G//G2lERlblUNJB8P6e8cXq3a7MlA==", - "dev": true, - "requires": { - "debug": "^3.1.0", - "istanbul-lib-coverage": "^1.1.2", - "mkdirp": "^0.5.1", - "rimraf": "^2.6.1", - "source-map": "^0.5.3" - } - }, - "istanbul-reports": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-1.3.0.tgz", - "integrity": "sha512-y2Z2IMqE1gefWUaVjrBm0mSKvUkaBy9Vqz8iwr/r40Y9hBbIteH5wqHG/9DLTfJ9xUnUT2j7A3+VVJ6EaYBllA==", - "dev": true, - "requires": { - "handlebars": "^4.0.3" - } - }, - "jest-changed-files": { - "version": "20.0.3", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-20.0.3.tgz", - "integrity": "sha1-k5TVzGXEOEBhSb7xv01Sto4D4/g=", - "dev": true - }, - "jest-cli": { - "version": "20.0.4", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-20.0.4.tgz", - "integrity": "sha1-5TKxnYiuW8bEF+iwWTpv6VSx3JM=", - "dev": true, - "requires": { - "ansi-escapes": "^1.4.0", - "callsites": "^2.0.0", - "chalk": "^1.1.3", - "graceful-fs": "^4.1.11", - "is-ci": "^1.0.10", - "istanbul-api": "^1.1.1", - "istanbul-lib-coverage": "^1.0.1", - "istanbul-lib-instrument": "^1.4.2", - "istanbul-lib-source-maps": "^1.1.0", - "jest-changed-files": "^20.0.3", - "jest-config": "^20.0.4", - "jest-docblock": "^20.0.3", - "jest-environment-jsdom": "^20.0.3", - "jest-haste-map": "^20.0.4", - "jest-jasmine2": "^20.0.4", - "jest-message-util": "^20.0.3", - "jest-regex-util": "^20.0.3", - "jest-resolve-dependencies": "^20.0.3", - "jest-runtime": "^20.0.4", - "jest-snapshot": "^20.0.3", - "jest-util": "^20.0.3", - "micromatch": "^2.3.11", - "node-notifier": "^5.0.2", - "pify": "^2.3.0", - "slash": "^1.0.0", - "string-length": "^1.0.1", - "throat": "^3.0.0", - "which": "^1.2.12", - "worker-farm": "^1.3.1", - "yargs": "^7.0.2" - }, - "dependencies": { - "callsites": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", - "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=", - "dev": true - } - } - }, - "jest-config": { - "version": "20.0.4", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-20.0.4.tgz", - "integrity": "sha1-43kwqyIXyRNgXv8T5712PsSPruo=", - "dev": true, - "requires": { - "chalk": "^1.1.3", - "glob": "^7.1.1", - "jest-environment-jsdom": "^20.0.3", - "jest-environment-node": "^20.0.3", - "jest-jasmine2": "^20.0.4", - "jest-matcher-utils": "^20.0.3", - "jest-regex-util": "^20.0.3", - "jest-resolve": "^20.0.4", - "jest-validate": "^20.0.3", - "pretty-format": "^20.0.3" - } - }, - "jest-diff": { - "version": "20.0.3", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-20.0.3.tgz", - "integrity": "sha1-gfKI/Z5nXw+yPHXxwrGURf5YZhc=", - "dev": true, - "requires": { - "chalk": "^1.1.3", - "diff": "^3.2.0", - "jest-matcher-utils": "^20.0.3", - "pretty-format": "^20.0.3" - } - }, - "jest-docblock": { - "version": "20.0.3", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-20.0.3.tgz", - "integrity": "sha1-F76phDQswz2DxQ++FUXqDvqkRxI=", - "dev": true - }, - "jest-environment-jsdom": { - "version": "20.0.3", - "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-20.0.3.tgz", - "integrity": "sha1-BIqKwS7iJfcZBBdxODS7mZeH3pk=", - "dev": true, - "requires": { - "jest-mock": "^20.0.3", - "jest-util": "^20.0.3", - "jsdom": "^9.12.0" - } - }, - "jest-environment-node": { - "version": "20.0.3", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-20.0.3.tgz", - "integrity": "sha1-1Ii8RhKvLCRumG6K52caCZFj1AM=", - "dev": true, - "requires": { - "jest-mock": "^20.0.3", - "jest-util": "^20.0.3" - } - }, - "jest-haste-map": { - "version": "20.0.5", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-20.0.5.tgz", - "integrity": "sha512-0IKAQjUvuZjMCNi/0VNQQF74/H9KB67hsHJqGiwTWQC6XO5Azs7kLWm+6Q/dwuhvDUvABDOBMFK2/FwZ3sZ07Q==", - "dev": true, - "requires": { - "fb-watchman": "^2.0.0", - "graceful-fs": "^4.1.11", - "jest-docblock": "^20.0.3", - "micromatch": "^2.3.11", - "sane": "~1.6.0", - "worker-farm": "^1.3.1" - } - }, - "jest-jasmine2": { - "version": "20.0.4", - "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-20.0.4.tgz", - "integrity": "sha1-/MWxQReA2RHQQpAu8YWehS5g1eE=", - "dev": true, - "requires": { - "chalk": "^1.1.3", - "graceful-fs": "^4.1.11", - "jest-diff": "^20.0.3", - "jest-matcher-utils": "^20.0.3", - "jest-matchers": "^20.0.3", - "jest-message-util": "^20.0.3", - "jest-snapshot": "^20.0.3", - "once": "^1.4.0", - "p-map": "^1.1.1" - } - }, - "jest-matcher-utils": { - "version": "20.0.3", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-20.0.3.tgz", - "integrity": "sha1-s6a443yld4A7CDKpixZPRLeBVhI=", - "dev": true, - "requires": { - "chalk": "^1.1.3", - "pretty-format": "^20.0.3" - } - }, - "jest-matchers": { - "version": "20.0.3", - "resolved": "https://registry.npmjs.org/jest-matchers/-/jest-matchers-20.0.3.tgz", - "integrity": "sha1-ymnbHDLbWm9wf6XgQBq7VXAN/WA=", - "dev": true, - "requires": { - "jest-diff": "^20.0.3", - "jest-matcher-utils": "^20.0.3", - "jest-message-util": "^20.0.3", - "jest-regex-util": "^20.0.3" - } - }, - "jest-message-util": { - "version": "20.0.3", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-20.0.3.tgz", - "integrity": "sha1-auwoRDBvyw5udNV5bBAG2W/dgxw=", - "dev": true, - "requires": { - "chalk": "^1.1.3", - "micromatch": "^2.3.11", - "slash": "^1.0.0" - } - }, - "jest-mock": { - "version": "20.0.3", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-20.0.3.tgz", - "integrity": "sha1-i8Bw6QQUqhVcEajWTIaaDVxx2lk=", - "dev": true - }, - "jest-regex-util": { - "version": "20.0.3", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-20.0.3.tgz", - "integrity": "sha1-hburXRM+RGJbGfr4xqpRItCF12I=", - "dev": true - }, - "jest-resolve": { - "version": "20.0.4", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-20.0.4.tgz", - "integrity": "sha1-lEiz6La6/BVHlETGSZBFt//ll6U=", - "dev": true, - "requires": { - "browser-resolve": "^1.11.2", - "is-builtin-module": "^1.0.0", - "resolve": "^1.3.2" - } - }, - "jest-resolve-dependencies": { - "version": "20.0.3", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-20.0.3.tgz", - "integrity": "sha1-bhSntxevDyyzZnxUneQK8Bexcjo=", - "dev": true, - "requires": { - "jest-regex-util": "^20.0.3" - } - }, - "jest-runtime": { - "version": "20.0.4", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-20.0.4.tgz", - "integrity": "sha1-osgCIZxCA/dU3xQE5JAYYWnRJNg=", - "dev": true, - "requires": { - "babel-core": "^6.0.0", - "babel-jest": "^20.0.3", - "babel-plugin-istanbul": "^4.0.0", - "chalk": "^1.1.3", - "convert-source-map": "^1.4.0", - "graceful-fs": "^4.1.11", - "jest-config": "^20.0.4", - "jest-haste-map": "^20.0.4", - "jest-regex-util": "^20.0.3", - "jest-resolve": "^20.0.4", - "jest-util": "^20.0.3", - "json-stable-stringify": "^1.0.1", - "micromatch": "^2.3.11", - "strip-bom": "3.0.0", - "yargs": "^7.0.2" - }, - "dependencies": { - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", - "dev": true - } - } - }, - "jest-snapshot": { - "version": "20.0.3", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-20.0.3.tgz", - "integrity": "sha1-W4R+GtsaTZCFKn+fElCG4YfHZWY=", - "dev": true, - "requires": { - "chalk": "^1.1.3", - "jest-diff": "^20.0.3", - "jest-matcher-utils": "^20.0.3", - "jest-util": "^20.0.3", - "natural-compare": "^1.4.0", - "pretty-format": "^20.0.3" - } - }, - "jest-util": { - "version": "20.0.3", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-20.0.3.tgz", - "integrity": "sha1-DAf32A2C9OWmfG+LnD/n9lz9Mq0=", - "dev": true, - "requires": { - "chalk": "^1.1.3", - "graceful-fs": "^4.1.11", - "jest-message-util": "^20.0.3", - "jest-mock": "^20.0.3", - "jest-validate": "^20.0.3", - "leven": "^2.1.0", - "mkdirp": "^0.5.1" - } - }, - "jest-validate": { - "version": "20.0.3", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-20.0.3.tgz", - "integrity": "sha1-0M/R3k9XnymEhJJcKA+PHZTsPKs=", - "dev": true, - "requires": { - "chalk": "^1.1.3", - "jest-matcher-utils": "^20.0.3", - "leven": "^2.1.0", - "pretty-format": "^20.0.3" - } - }, "js-tokens": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", @@ -4839,8 +2949,8 @@ "integrity": "sha512-saJstZWv7oNeOyBh3+Dx1qWzhW0+e6/8eDzo7p5rDFqxntSztloLtuKu+Ejhtq82jsilwOIZYsCz+lIjthg1Hw==", "dev": true, "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" + "argparse": "1.0.10", + "esprima": "4.0.0" } }, "jsbn": { @@ -4850,41 +2960,6 @@ "dev": true, "optional": true }, - "jsdom": { - "version": "9.12.0", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-9.12.0.tgz", - "integrity": "sha1-6MVG//ywbADUgzyoRBD+1/igl9Q=", - "dev": true, - "requires": { - "abab": "^1.0.3", - "acorn": "^4.0.4", - "acorn-globals": "^3.1.0", - "array-equal": "^1.0.0", - "content-type-parser": "^1.0.1", - "cssom": ">= 0.3.2 < 0.4.0", - "cssstyle": ">= 0.2.37 < 0.3.0", - "escodegen": "^1.6.1", - "html-encoding-sniffer": "^1.0.1", - "nwmatcher": ">= 1.3.9 < 2.0.0", - "parse5": "^1.5.1", - "request": "^2.79.0", - "sax": "^1.2.1", - "symbol-tree": "^3.2.1", - "tough-cookie": "^2.3.2", - "webidl-conversions": "^4.0.0", - "whatwg-encoding": "^1.0.1", - "whatwg-url": "^4.3.0", - "xml-name-validator": "^2.0.1" - }, - "dependencies": { - "acorn": { - "version": "4.0.13", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-4.0.13.tgz", - "integrity": "sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c=", - "dev": true - } - } - }, "jsesc": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", @@ -4908,9 +2983,15 @@ "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", "dev": true, "requires": { - "jsonify": "~0.0.0" + "jsonify": "0.0.0" } }, + "json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", + "dev": true + }, "json-stringify-safe": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", @@ -4928,7 +3009,7 @@ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", "requires": { - "graceful-fs": "^4.1.6" + "graceful-fs": "4.1.11" } }, "jsonify": { @@ -4955,57 +3036,28 @@ "verror": "1.10.0" } }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - }, - "lazy-cache": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", - "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=", - "dev": true, - "optional": true + "just-extend": { + "version": "1.1.27", + "resolved": "https://registry.npmjs.org/just-extend/-/just-extend-1.1.27.tgz", + "integrity": "sha512-mJVp13Ix6gFo3SBAy9U/kL+oeZqzlYYYLQBwXVBlVzIsZwBqGREnOro24oC/8s8aox+rJhtZ2DiQof++IrkA+g==", + "dev": true }, - "lcid": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", - "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "invert-kv": "^1.0.0" + "is-buffer": "1.1.6" } }, - "leven": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-2.1.0.tgz", - "integrity": "sha1-wuep93IJTe6dNCAq6KzORoeHVYA=", - "dev": true - }, "levn": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", "requires": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - } - }, - "load-json-file": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", - "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^2.2.0", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0", - "strip-bom": "^2.0.0" + "prelude-ls": "1.1.2", + "type-check": "0.3.2" } }, "locate-path": { @@ -5014,8 +3066,8 @@ "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", "dev": true, "requires": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" + "p-locate": "2.0.0", + "path-exists": "3.0.0" } }, "lodash": { @@ -5030,7 +3082,7 @@ }, "lodash.clonedeep": { "version": "4.5.0", - "resolved": "http://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=" }, "lodash.difference": { @@ -5038,10 +3090,11 @@ "resolved": "https://registry.npmjs.org/lodash.difference/-/lodash.difference-4.5.0.tgz", "integrity": "sha1-nMtOUF1Ia5FlE0V3KIWi3yf9AXw=" }, - "lodash.flatten": { - "version": "4.4.0", - "resolved": "http://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", - "integrity": "sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8=" + "lodash.get": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", + "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=", + "dev": true }, "lodash.pad": { "version": "4.5.1", @@ -5083,7 +3136,7 @@ "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", "requires": { - "chalk": "^2.0.1" + "chalk": "2.3.2" }, "dependencies": { "ansi-styles": { @@ -5091,7 +3144,7 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "requires": { - "color-convert": "^1.9.0" + "color-convert": "1.9.1" } }, "chalk": { @@ -5099,9 +3152,9 @@ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.2.tgz", "integrity": "sha512-ZM4j2/ld/YZDc3Ma8PgN7gyAk+kHMMMyzLNryCPGhWrsfAuDVeuid5bpRFTDgMH9JBK2lA4dyyAkkZYF/WcqDQ==", "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "ansi-styles": "3.2.1", + "escape-string-regexp": "1.0.5", + "supports-color": "5.3.0" } }, "supports-color": { @@ -5109,15 +3162,15 @@ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.3.0.tgz", "integrity": "sha512-0aP01LLIskjKs3lq52EC0aGBAJhLq7B2Rd8HC/DR/PtNNpcLilNmHC12O+hu0usQpo7wtHNRqtrhBwtDb0+dNg==", "requires": { - "has-flag": "^3.0.0" + "has-flag": "3.0.0" } } } }, - "longest": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", - "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=", + "lolex": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/lolex/-/lolex-2.7.0.tgz", + "integrity": "sha512-uJkH2e0BVfU5KOJUevbTOtpDduooSarH5PopO+LfM/vZf8Z9sJzODqKev804JYM2i++ktJfUmC1le4LwFQ1VMg==", "dev": true }, "loose-envify": { @@ -5126,31 +3179,28 @@ "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=", "dev": true, "requires": { - "js-tokens": "^3.0.0" + "js-tokens": "3.0.2" } }, - "makeerror": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.11.tgz", - "integrity": "sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw=", + "lru-cache": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.3.tgz", + "integrity": "sha512-fFEhvcgzuIoJVUF8fYr5KR0YqxD238zgObTps31YdADwPPAp82a4M8TrckkWyx7ekNlf9aBcVn81cFwwXngrJA==", "dev": true, "requires": { - "tmpl": "1.0.x" + "pseudomap": "1.0.2", + "yallist": "2.1.2" } }, - "map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", - "dev": true - }, - "map-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", - "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", + "md5": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/md5/-/md5-2.2.1.tgz", + "integrity": "sha1-U6s41f48iJG6RlMp6iP6wFQBJvk=", "dev": true, "requires": { - "object-visit": "^1.0.0" + "charenc": "0.0.2", + "crypt": "0.0.2", + "is-buffer": "1.1.6" } }, "memory-fs": { @@ -5158,35 +3208,30 @@ "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", "requires": { - "errno": "^0.1.3", - "readable-stream": "^2.0.1" + "errno": "0.1.7", + "readable-stream": "2.3.5" } }, - "merge": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/merge/-/merge-1.2.0.tgz", - "integrity": "sha1-dTHjnUlJwoGma4xabgJl6LBYlNo=", - "dev": true - }, "micromatch": { "version": "2.3.11", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", "dev": true, + "optional": true, "requires": { - "arr-diff": "^2.0.0", - "array-unique": "^0.2.1", - "braces": "^1.8.2", - "expand-brackets": "^0.1.4", - "extglob": "^0.3.1", - "filename-regex": "^2.0.0", - "is-extglob": "^1.0.0", - "is-glob": "^2.0.1", - "kind-of": "^3.0.2", - "normalize-path": "^2.0.1", - "object.omit": "^2.0.0", - "parse-glob": "^3.0.4", - "regex-cache": "^0.4.2" + "arr-diff": "2.0.0", + "array-unique": "0.2.1", + "braces": "1.8.5", + "expand-brackets": "0.1.5", + "extglob": "0.3.2", + "filename-regex": "2.0.1", + "is-extglob": "1.0.0", + "is-glob": "2.0.1", + "kind-of": "3.2.2", + "normalize-path": "2.1.1", + "object.omit": "2.0.1", + "parse-glob": "3.0.4", + "regex-cache": "0.4.4" } }, "micromist": { @@ -5194,7 +3239,7 @@ "resolved": "https://registry.npmjs.org/micromist/-/micromist-1.0.2.tgz", "integrity": "sha1-QfhJSaBMMM3GCjlNDLBqqgi4Y2Q=", "requires": { - "lodash.camelcase": "^4.3.0" + "lodash.camelcase": "4.3.0" } }, "mime-db": { @@ -5209,7 +3254,7 @@ "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==", "dev": true, "requires": { - "mime-db": "~1.33.0" + "mime-db": "1.33.0" } }, "mimic-fn": { @@ -5222,7 +3267,7 @@ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "requires": { - "brace-expansion": "^1.1.7" + "brace-expansion": "1.1.11" } }, "minimist": { @@ -5230,46 +3275,119 @@ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" }, - "mixin-deep": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz", - "integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==", + "mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "requires": { + "minimist": "0.0.8" + }, + "dependencies": { + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" + } + } + }, + "mocha": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-5.2.0.tgz", + "integrity": "sha512-2IUgKDhc3J7Uug+FxMXuqIyYzH7gJjXECKe/w43IGgQHTSj3InJi+yAA7T24L9bQMRKiUEHxEX37G5JpVUGLcQ==", "dev": true, "requires": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" + "browser-stdout": "1.3.1", + "commander": "2.15.1", + "debug": "3.1.0", + "diff": "3.5.0", + "escape-string-regexp": "1.0.5", + "glob": "7.1.2", + "growl": "1.10.5", + "he": "1.1.1", + "minimatch": "3.0.4", + "mkdirp": "0.5.1", + "supports-color": "5.4.0" }, "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "commander": { + "version": "2.15.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.15.1.tgz", + "integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==", + "dev": true + }, + "supports-color": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", + "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", "dev": true, "requires": { - "is-plain-object": "^2.0.4" + "has-flag": "3.0.0" } } } }, - "mkdirp": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "mocha-appveyor-reporter": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/mocha-appveyor-reporter/-/mocha-appveyor-reporter-0.4.0.tgz", + "integrity": "sha1-gpOC/8Bla2Z+e+ZQoJSgba69Uk8=", + "dev": true, "requires": { - "minimist": "0.0.8" + "request-json": "0.6.3" + } + }, + "mocha-circleci-reporter": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/mocha-circleci-reporter/-/mocha-circleci-reporter-0.0.3.tgz", + "integrity": "sha512-sZHmd+HH0pgQjTdk0itV2+RSOikqLo7kravRLKTmzcvyu9lA69pXd4KLAv5NMcF4c3EnSatX0iBSM4gSXFYjEw==", + "dev": true, + "requires": { + "mocha": "5.2.0", + "mocha-junit-reporter": "1.17.0" + } + }, + "mocha-junit-reporter": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/mocha-junit-reporter/-/mocha-junit-reporter-1.17.0.tgz", + "integrity": "sha1-LlFJ7UD8XS48px5C21qx/snG2Fw=", + "dev": true, + "requires": { + "debug": "2.6.9", + "md5": "2.2.1", + "mkdirp": "0.5.1", + "strip-ansi": "4.0.0", + "xml": "1.0.1" }, "dependencies": { - "minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "3.0.0" + } } } }, "mock-fs": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/mock-fs/-/mock-fs-4.4.2.tgz", - "integrity": "sha512-dF+yxZSojSiI8AXGoxj5qdFWpucndc54Ug+TwlpHFaV7j22MGG+OML2+FVa6xAZtjb/OFFQhOC37Jegx2GbEwA==", + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/mock-fs/-/mock-fs-4.5.0.tgz", + "integrity": "sha512-qqudNfOX7ZmX9vm1WIAU+gWlmxVNAnwY6UG3RkFutNywmRCUGP83tujP6IxX2DS1TmcaEZBOhYwDuYEmJYE+3w==", "dev": true }, "module-definition": { @@ -5277,8 +3395,8 @@ "resolved": "https://registry.npmjs.org/module-definition/-/module-definition-2.2.4.tgz", "integrity": "sha1-wKN3HeWM9rzxKu0kdnBsWWrUsss=", "requires": { - "ast-module-types": "^2.3.2", - "node-source-walk": "^3.0.0" + "ast-module-types": "2.3.2", + "node-source-walk": "3.3.0" } }, "module-lookup-amd": { @@ -5286,12 +3404,12 @@ "resolved": "http://registry.npmjs.org/module-lookup-amd/-/module-lookup-amd-5.0.1.tgz", "integrity": "sha1-ftnGqBoMMxffBknp+Jh3yVMVlOA=", "requires": { - "commander": "^2.8.1", - "debug": "^3.1.0", - "file-exists": "^2.0.0", - "find": "^0.2.8", - "requirejs": "^2.3.5", - "requirejs-config-file": "^3.0.0" + "commander": "2.15.0", + "debug": "3.1.0", + "file-exists": "2.0.0", + "find": "0.2.9", + "requirejs": "2.3.5", + "requirejs-config-file": "3.0.0" } }, "ms": { @@ -5301,7 +3419,7 @@ }, "murmurhash": { "version": "0.0.2", - "resolved": "http://registry.npmjs.org/murmurhash/-/murmurhash-0.0.2.tgz", + "resolved": "https://registry.npmjs.org/murmurhash/-/murmurhash-0.0.2.tgz", "integrity": "sha1-bwe9ihEF5wnCb8iUIMtZMMJFhf4=" }, "mute-stream": { @@ -5316,46 +3434,6 @@ "dev": true, "optional": true }, - "nanomatch": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.9.tgz", - "integrity": "sha512-n8R9bS8yQ6eSXaV6jHUpKzD8gLsin02w1HSFiegwrs9E098Ylhw5jdyKPaYqvHknHaSCKTPp7C8dGCQ0q9koXA==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "fragment-cache": "^0.2.1", - "is-odd": "^2.0.0", - "is-windows": "^1.0.2", - "kind-of": "^6.0.2", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", - "dev": true - }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", - "dev": true - }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true - } - } - }, "natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", @@ -5368,22 +3446,215 @@ "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=", "dev": true }, - "node-int64": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", - "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=", - "dev": true + "nise": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/nise/-/nise-1.4.2.tgz", + "integrity": "sha512-BxH/DxoQYYdhKgVAfqVy4pzXRZELHOIewzoesxpjYvpU+7YOalQhGNPf7wAx8pLrTNPrHRDlLOkAl8UI0ZpXjw==", + "dev": true, + "requires": { + "@sinonjs/formatio": "2.0.0", + "just-extend": "1.1.27", + "lolex": "2.7.0", + "path-to-regexp": "1.7.0", + "text-encoding": "0.6.4" + } }, - "node-notifier": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-5.2.1.tgz", - "integrity": "sha512-MIBs+AAd6dJ2SklbbE8RUDRlIVhU8MaNLh1A9SUZDUHPiZkWLFde6UNwG41yQHZEToHgJMXqyVZ9UcS/ReOVTg==", + "node-pre-gyp": { + "version": "0.6.39", + "resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.6.39.tgz", + "integrity": "sha512-OsJV74qxnvz/AMGgcfZoDaeDXKD3oY3QVIbBmwszTFkRisTSXbMQyn4UWzUMOtA5SVhrBZOTp0wcoSBgfMfMmQ==", "dev": true, + "optional": true, "requires": { - "growly": "^1.3.0", - "semver": "^5.4.1", - "shellwords": "^0.1.1", - "which": "^1.3.0" + "detect-libc": "1.0.3", + "hawk": "3.1.3", + "mkdirp": "0.5.1", + "nopt": "4.0.1", + "npmlog": "4.1.2", + "rc": "1.2.8", + "request": "2.81.0", + "rimraf": "2.6.2", + "semver": "5.5.0", + "tar": "2.2.1", + "tar-pack": "3.4.1" + }, + "dependencies": { + "assert-plus": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz", + "integrity": "sha1-104bh+ev/A24qttwIfP+SBAasjQ=", + "dev": true, + "optional": true + }, + "aws-sign2": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz", + "integrity": "sha1-FDQt0428yU0OW4fXY81jYSwOeU8=", + "dev": true, + "optional": true + }, + "boom": { + "version": "2.10.1", + "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz", + "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=", + "dev": true, + "requires": { + "hoek": "2.16.3" + } + }, + "cryptiles": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz", + "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=", + "dev": true, + "requires": { + "boom": "2.10.1" + } + }, + "form-data": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.1.4.tgz", + "integrity": "sha1-M8GDrPGTJ27KqYFDpp6Uv+4XUNE=", + "dev": true, + "optional": true, + "requires": { + "asynckit": "0.4.0", + "combined-stream": "1.0.6", + "mime-types": "2.1.18" + } + }, + "gauge": { + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", + "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", + "dev": true, + "optional": true, + "requires": { + "aproba": "1.2.0", + "console-control-strings": "1.1.0", + "has-unicode": "2.0.1", + "object-assign": "4.1.1", + "signal-exit": "3.0.2", + "string-width": "1.0.2", + "strip-ansi": "3.0.1", + "wide-align": "1.1.3" + } + }, + "har-schema": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-1.0.5.tgz", + "integrity": "sha1-0mMTX0MwfALGAq/I/pWXDAFRNp4=", + "dev": true, + "optional": true + }, + "har-validator": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-4.2.1.tgz", + "integrity": "sha1-M0gdDxu/9gDdID11gSpqX7oALio=", + "dev": true, + "optional": true, + "requires": { + "ajv": "4.11.8", + "har-schema": "1.0.5" + } + }, + "hawk": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz", + "integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=", + "dev": true, + "requires": { + "boom": "2.10.1", + "cryptiles": "2.0.5", + "hoek": "2.16.3", + "sntp": "1.0.9" + } + }, + "hoek": { + "version": "2.16.3", + "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", + "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=", + "dev": true + }, + "http-signature": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz", + "integrity": "sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=", + "dev": true, + "optional": true, + "requires": { + "assert-plus": "0.2.0", + "jsprim": "1.4.1", + "sshpk": "1.14.1" + } + }, + "npmlog": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", + "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", + "dev": true, + "optional": true, + "requires": { + "are-we-there-yet": "1.1.4", + "console-control-strings": "1.1.0", + "gauge": "2.7.4", + "set-blocking": "2.0.0" + } + }, + "performance-now": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-0.2.0.tgz", + "integrity": "sha1-M+8wxcd9TqIcWlOGnZG1bY8lVeU=", + "dev": true, + "optional": true + }, + "qs": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.4.0.tgz", + "integrity": "sha1-E+JtKK1rD/qpExLNO/cI7TUecjM=", + "dev": true, + "optional": true + }, + "request": { + "version": "2.81.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.81.0.tgz", + "integrity": "sha1-xpKJRqDgbF+Nb4qTM0af/aRimKA=", + "dev": true, + "optional": true, + "requires": { + "aws-sign2": "0.6.0", + "aws4": "1.6.0", + "caseless": "0.12.0", + "combined-stream": "1.0.6", + "extend": "3.0.1", + "forever-agent": "0.6.1", + "form-data": "2.1.4", + "har-validator": "4.2.1", + "hawk": "3.1.3", + "http-signature": "1.1.1", + "is-typedarray": "1.0.0", + "isstream": "0.1.2", + "json-stringify-safe": "5.0.1", + "mime-types": "2.1.18", + "oauth-sign": "0.8.2", + "performance-now": "0.2.0", + "qs": "6.4.0", + "safe-buffer": "5.1.1", + "stringstream": "0.0.5", + "tough-cookie": "2.3.4", + "tunnel-agent": "0.6.0", + "uuid": "3.2.1" + } + }, + "sntp": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz", + "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=", + "dev": true, + "requires": { + "hoek": "2.16.3" + } + } } }, "node-source-walk": { @@ -5391,7 +3662,18 @@ "resolved": "https://registry.npmjs.org/node-source-walk/-/node-source-walk-3.3.0.tgz", "integrity": "sha1-rRjjW/2z0Lb34OSv8eePhGo7iHM=", "requires": { - "babylon": "^6.17.0" + "babylon": "6.18.0" + } + }, + "nopt": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.1.tgz", + "integrity": "sha1-0NRoWv1UFRk8jHUFYC0NF81kR00=", + "dev": true, + "optional": true, + "requires": { + "abbrev": "1.1.1", + "osenv": "0.1.5" } }, "normalize-package-data": { @@ -5400,10 +3682,10 @@ "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==", "dev": true, "requires": { - "hosted-git-info": "^2.1.4", - "is-builtin-module": "^1.0.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" + "hosted-git-info": "2.6.0", + "is-builtin-module": "1.0.0", + "semver": "5.5.0", + "validate-npm-package-license": "3.0.3" } }, "normalize-path": { @@ -5412,142 +3694,44 @@ "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", "dev": true, "requires": { - "remove-trailing-separator": "^1.0.1" + "remove-trailing-separator": "1.1.0" } }, "npmlog": { "version": "2.0.4", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-2.0.4.tgz", - "integrity": "sha1-mLUlMPJRTKkNCexbIsiEZyI3VpI=", - "requires": { - "ansi": "~0.3.1", - "are-we-there-yet": "~1.1.2", - "gauge": "~1.2.5" - } - }, - "number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" - }, - "nwmatcher": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/nwmatcher/-/nwmatcher-1.4.4.tgz", - "integrity": "sha512-3iuY4N5dhgMpCUrOVnuAdGrgxVqV2cJpM+XNccjR2DKOB1RUP0aA+wGXEiNziG/UKboFyGBIoKOaNlJxx8bciQ==", - "dev": true - }, - "oauth-sign": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", - "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=", - "dev": true - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" - }, - "object-copy": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", - "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", - "dev": true, - "requires": { - "copy-descriptor": "^0.1.0", - "define-property": "^0.2.5", - "kind-of": "^3.0.3" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "dependencies": { - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - } - } - } + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-2.0.4.tgz", + "integrity": "sha1-mLUlMPJRTKkNCexbIsiEZyI3VpI=", + "requires": { + "ansi": "0.3.1", + "are-we-there-yet": "1.1.4", + "gauge": "1.2.7" } }, - "object-visit": { + "number-is-nan": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", - "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", - "dev": true, - "requires": { - "isobject": "^3.0.0" - }, - "dependencies": { - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - } - } + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" + }, + "oauth-sign": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", + "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=", + "dev": true + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" }, "object.omit": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=", "dev": true, + "optional": true, "requires": { - "for-own": "^0.1.4", - "is-extendable": "^0.1.1" - } - }, - "object.pick": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", - "dev": true, - "requires": { - "isobject": "^3.0.1" - }, - "dependencies": { - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - } + "for-own": "0.1.5", + "is-extendable": "0.1.1" } }, "once": { @@ -5555,7 +3739,7 @@ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", "requires": { - "wrappy": "1" + "wrappy": "1.0.2" } }, "onetime": { @@ -5563,42 +3747,18 @@ "resolved": "http://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz", "integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=" }, - "optimist": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", - "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", - "dev": true, - "requires": { - "minimist": "~0.0.1", - "wordwrap": "~0.0.2" - }, - "dependencies": { - "minimist": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz", - "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=", - "dev": true - }, - "wordwrap": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", - "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=", - "dev": true - } - } - }, "optionator": { "version": "0.8.2", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", "dev": true, "requires": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.4", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "wordwrap": "~1.0.0" + "deep-is": "0.1.3", + "fast-levenshtein": "2.0.6", + "levn": "0.3.0", + "prelude-ls": "1.1.2", + "type-check": "0.3.2", + "wordwrap": "1.0.0" } }, "ora": { @@ -5606,10 +3766,10 @@ "resolved": "https://registry.npmjs.org/ora/-/ora-1.4.0.tgz", "integrity": "sha512-iMK1DOQxzzh2MBlVsU42G80mnrvUhqsMh74phHtDlrcTZPK0pH6o7l7DRshK+0YsxDyEuaOkziVdvM3T0QTzpw==", "requires": { - "chalk": "^2.1.0", - "cli-cursor": "^2.1.0", - "cli-spinners": "^1.0.1", - "log-symbols": "^2.1.0" + "chalk": "2.3.2", + "cli-cursor": "2.1.0", + "cli-spinners": "1.1.0", + "log-symbols": "2.2.0" }, "dependencies": { "ansi-styles": { @@ -5617,7 +3777,7 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "requires": { - "color-convert": "^1.9.0" + "color-convert": "1.9.1" } }, "chalk": { @@ -5625,9 +3785,9 @@ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.2.tgz", "integrity": "sha512-ZM4j2/ld/YZDc3Ma8PgN7gyAk+kHMMMyzLNryCPGhWrsfAuDVeuid5bpRFTDgMH9JBK2lA4dyyAkkZYF/WcqDQ==", "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "ansi-styles": "3.2.1", + "escape-string-regexp": "1.0.5", + "supports-color": "5.3.0" } }, "cli-cursor": { @@ -5635,7 +3795,7 @@ "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", "requires": { - "restore-cursor": "^2.0.0" + "restore-cursor": "2.0.0" } }, "onetime": { @@ -5643,7 +3803,7 @@ "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", "requires": { - "mimic-fn": "^1.0.0" + "mimic-fn": "1.2.0" } }, "restore-cursor": { @@ -5651,8 +3811,8 @@ "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", "requires": { - "onetime": "^2.0.0", - "signal-exit": "^3.0.2" + "onetime": "2.0.1", + "signal-exit": "3.0.2" } }, "supports-color": { @@ -5660,7 +3820,7 @@ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.3.0.tgz", "integrity": "sha512-0aP01LLIskjKs3lq52EC0aGBAJhLq7B2Rd8HC/DR/PtNNpcLilNmHC12O+hu0usQpo7wtHNRqtrhBwtDb0+dNg==", "requires": { - "has-flag": "^3.0.0" + "has-flag": "3.0.0" } } } @@ -5670,15 +3830,6 @@ "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=" }, - "os-locale": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", - "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", - "dev": true, - "requires": { - "lcid": "^1.0.0" - } - }, "os-shim": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/os-shim/-/os-shim-0.1.3.tgz", @@ -5689,15 +3840,26 @@ "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" }, + "osenv": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", + "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", + "dev": true, + "optional": true, + "requires": { + "os-homedir": "1.0.2", + "os-tmpdir": "1.0.2" + } + }, "output-file-sync": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/output-file-sync/-/output-file-sync-1.1.2.tgz", "integrity": "sha1-0KM+7+YaIF+suQCS6CZZjVJFznY=", "dev": true, "requires": { - "graceful-fs": "^4.1.4", - "mkdirp": "^0.5.1", - "object-assign": "^4.1.0" + "graceful-fs": "4.1.11", + "mkdirp": "0.5.1", + "object-assign": "4.1.1" } }, "p-limit": { @@ -5706,7 +3868,7 @@ "integrity": "sha512-Y/OtIaXtUPr4/YpMv1pCL5L5ed0rumAaAeBSj12F+bSlMdys7i8oQF/GUJmfpTS/QoaRrS/k6pma29haJpsMng==", "dev": true, "requires": { - "p-try": "^1.0.0" + "p-try": "1.0.0" } }, "p-locate": { @@ -5715,15 +3877,9 @@ "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", "dev": true, "requires": { - "p-limit": "^1.1.0" + "p-limit": "1.2.0" } }, - "p-map": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-1.2.0.tgz", - "integrity": "sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA==", - "dev": true - }, "p-try": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", @@ -5735,7 +3891,7 @@ "resolved": "https://registry.npmjs.org/parents/-/parents-1.0.1.tgz", "integrity": "sha1-/t1NK/GTp3dF/nHjcdc8MwfZx1E=", "requires": { - "path-platform": "~0.11.15" + "path-platform": "0.11.15" } }, "parse-glob": { @@ -5743,11 +3899,12 @@ "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=", "dev": true, + "optional": true, "requires": { - "glob-base": "^0.3.0", - "is-dotfile": "^1.0.0", - "is-extglob": "^1.0.0", - "is-glob": "^2.0.0" + "glob-base": "0.3.0", + "is-dotfile": "1.0.3", + "is-extglob": "1.0.0", + "is-glob": "2.0.1" } }, "parse-json": { @@ -5756,21 +3913,9 @@ "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", "dev": true, "requires": { - "error-ex": "^1.2.0" + "error-ex": "1.3.1" } }, - "parse5": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-1.5.1.tgz", - "integrity": "sha1-m387DeMr543CQBsXVzzK8Pb1nZQ=", - "dev": true - }, - "pascalcase": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", - "dev": true - }, "path-exists": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", @@ -5798,15 +3943,21 @@ "resolved": "https://registry.npmjs.org/path-platform/-/path-platform-0.11.15.tgz", "integrity": "sha1-6GQhf3TDaFDwhSt43Hv31KVyG/I=" }, - "path-type": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", - "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", + "path-to-regexp": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.7.0.tgz", + "integrity": "sha1-Wf3g9DW62suhA6hOnTvGTpa5k30=", "dev": true, "requires": { - "graceful-fs": "^4.1.2", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" + "isarray": "0.0.1" + }, + "dependencies": { + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true + } } }, "performance-now": { @@ -5831,7 +3982,7 @@ "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", "requires": { - "pinkie": "^2.0.0" + "pinkie": "2.0.4" } }, "pkg-dir": { @@ -5840,7 +3991,7 @@ "integrity": "sha1-ektQio1bstYp1EcFb/TpyTFM89Q=", "dev": true, "requires": { - "find-up": "^1.0.0" + "find-up": "1.1.2" }, "dependencies": { "find-up": { @@ -5849,8 +4000,8 @@ "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", "dev": true, "requires": { - "path-exists": "^2.0.0", - "pinkie-promise": "^2.0.0" + "path-exists": "2.1.0", + "pinkie-promise": "2.0.1" } }, "path-exists": { @@ -5859,7 +4010,7 @@ "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", "dev": true, "requires": { - "pinkie-promise": "^2.0.0" + "pinkie-promise": "2.0.1" } } } @@ -5870,93 +4021,82 @@ "integrity": "sha1-0aIUg/0iu0HlihL6NCGCMUCJfEU=", "dev": true }, - "posix-character-classes": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", - "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", - "dev": true - }, "postcss": { - "version": "6.0.20", - "resolved": "http://registry.npmjs.org/postcss/-/postcss-6.0.20.tgz", - "integrity": "sha1-aGEH50OhLVUwy2hDjFkNWyv3LDw=", + "version": "6.0.23", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", + "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", "requires": { - "chalk": "^2.3.2", - "source-map": "^0.6.1", - "supports-color": "^5.3.0" + "chalk": "2.4.1", + "source-map": "0.6.1", + "supports-color": "5.4.0" }, "dependencies": { "ansi-styles": { "version": "3.2.1", - "resolved": "http://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha1-QfuyAkPlCxK+DwS43tvwdSDOhB0=", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "requires": { - "color-convert": "^1.9.0" + "color-convert": "1.9.1" } }, "chalk": { - "version": "2.3.2", - "resolved": "http://registry.npmjs.org/chalk/-/chalk-2.3.2.tgz", - "integrity": "sha1-JQ3JawdJG/1gHmSNZt319gx6XGU=", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", + "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "ansi-styles": "3.2.1", + "escape-string-regexp": "1.0.5", + "supports-color": "5.4.0" } }, - "has-flag": { - "version": "3.0.0", - "resolved": "http://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" - }, "source-map": { "version": "0.6.1", - "resolved": "http://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=" + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" }, "supports-color": { - "version": "5.3.0", - "resolved": "http://registry.npmjs.org/supports-color/-/supports-color-5.3.0.tgz", - "integrity": "sha1-WySsFduA+pJ89SJ6SjP9PEx2dsA=", + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", + "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", "requires": { - "has-flag": "^3.0.0" + "has-flag": "3.0.0" } } } }, "postcss-js": { "version": "1.0.1", - "resolved": "http://registry.npmjs.org/postcss-js/-/postcss-js-1.0.1.tgz", - "integrity": "sha1-/68pIm45nqdLXc4CyrFynXrdvHs=", + "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-1.0.1.tgz", + "integrity": "sha512-smhUUMF5o5W1ZCQSyh5A3lNOXFLdNrxqyhWbLsGolZH2AgVmlyhxhYbIixfsdKE6r1vG5i7O40DPcvEvE1mvjw==", "requires": { - "camelcase-css": "^1.0.1", - "postcss": "^6.0.11" + "camelcase-css": "1.0.1", + "postcss": "6.0.23" } }, "postcss-nested": { "version": "3.0.0", - "resolved": "http://registry.npmjs.org/postcss-nested/-/postcss-nested-3.0.0.tgz", - "integrity": "sha1-zeQL0HoHhWXz33Li3CZlhxxySFI=", + "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-3.0.0.tgz", + "integrity": "sha512-1xxmLHSfubuUi6xZZ0zLsNoiKfk3BWQj6fkNMaBJC529wKKLcdeCxXt6KJmDLva+trNyQNwEaE/ZWMA7cve1fA==", "requires": { - "postcss": "^6.0.14", - "postcss-selector-parser": "^3.1.1" + "postcss": "6.0.23", + "postcss-selector-parser": "3.1.1" } }, "postcss-safe-parser": { "version": "3.0.1", - "resolved": "http://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-3.0.1.tgz", + "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-3.0.1.tgz", "integrity": "sha1-t1Pv9sfArqXoN1++TN6L+QY/8UI=", "requires": { - "postcss": "^6.0.6" + "postcss": "6.0.23" } }, "postcss-selector-matches": { "version": "3.0.1", - "resolved": "http://registry.npmjs.org/postcss-selector-matches/-/postcss-selector-matches-3.0.1.tgz", + "resolved": "https://registry.npmjs.org/postcss-selector-matches/-/postcss-selector-matches-3.0.1.tgz", "integrity": "sha1-5WNAEeE5UIgYYbvdWMLQER/8lqs=", "requires": { - "balanced-match": "^0.4.2", - "postcss": "^6.0.1" + "balanced-match": "0.4.2", + "postcss": "6.0.23" }, "dependencies": { "balanced-match": { @@ -5968,17 +4108,17 @@ }, "postcss-selector-parser": { "version": "3.1.1", - "resolved": "http://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.1.tgz", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.1.tgz", "integrity": "sha1-T4dfSvsMllc9XPTXQBGu4lCn6GU=", "requires": { - "dot-prop": "^4.1.1", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" + "dot-prop": "4.2.0", + "indexes-of": "1.0.1", + "uniq": "1.0.1" } }, "postcss-value-parser": { "version": "3.3.0", - "resolved": "http://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.0.tgz", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.0.tgz", "integrity": "sha1-h/OPnxj3dKSrTIojL1xc6IcqnRU=" }, "prelude-ls": { @@ -5990,36 +4130,16 @@ "version": "0.2.0", "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz", "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=", - "dev": true - }, - "pretty-format": { - "version": "20.0.3", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-20.0.3.tgz", - "integrity": "sha1-Ag41ClYKH+GpjcO+tsz/s4beixQ=", "dev": true, - "requires": { - "ansi-regex": "^2.1.1", - "ansi-styles": "^3.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - } - } + "optional": true }, "prettyjson": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prettyjson/-/prettyjson-1.2.1.tgz", "integrity": "sha1-/P+rQdGcq0365eV15kJGYZsS0ok=", "requires": { - "colors": "^1.1.2", - "minimist": "^1.2.0" + "colors": "1.2.1", + "minimist": "1.2.0" } }, "private": { @@ -6044,6 +4164,12 @@ "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=" }, + "pseudomap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", + "dev": true + }, "punycode": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", @@ -6066,9 +4192,10 @@ "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-1.1.7.tgz", "integrity": "sha512-D5JUjPyJbaJDkuAazpVnSfVkLlpeO3wDlPROTMLGKG1zMFNFRgrciKo1ltz/AzNTkqE0HzDx655QOL51N06how==", "dev": true, + "optional": true, "requires": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" + "is-number": "3.0.0", + "kind-of": "4.0.0" }, "dependencies": { "is-number": { @@ -6076,8 +4203,9 @@ "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", "dev": true, + "optional": true, "requires": { - "kind-of": "^3.0.2" + "kind-of": "3.2.2" }, "dependencies": { "kind-of": { @@ -6085,8 +4213,9 @@ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, + "optional": true, "requires": { - "is-buffer": "^1.1.5" + "is-buffer": "1.1.6" } } } @@ -6096,52 +4225,24 @@ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", "dev": true, + "optional": true, "requires": { - "is-buffer": "^1.1.5" + "is-buffer": "1.1.6" } } } }, - "read-pkg": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", - "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", - "dev": true, - "requires": { - "load-json-file": "^1.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^1.0.0" - } - }, - "read-pkg-up": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", - "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", + "rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", "dev": true, + "optional": true, "requires": { - "find-up": "^1.0.0", - "read-pkg": "^1.0.0" - }, - "dependencies": { - "find-up": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", - "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", - "dev": true, - "requires": { - "path-exists": "^2.0.0", - "pinkie-promise": "^2.0.0" - } - }, - "path-exists": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", - "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", - "dev": true, - "requires": { - "pinkie-promise": "^2.0.0" - } - } + "deep-extend": "0.6.0", + "ini": "1.3.5", + "minimist": "1.2.0", + "strip-json-comments": "2.0.1" } }, "readable-stream": { @@ -6149,13 +4250,13 @@ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.5.tgz", "integrity": "sha512-tK0yDhrkygt/knjowCUiWP9YdV7c5R+8cR0r/kt9ZhBU906Fs6RpQJCEilamRJj1Nx2rWI6LkW9gKqjTkshhEw==", "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.0.3", - "util-deprecate": "~1.0.1" + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "2.0.0", + "safe-buffer": "5.1.1", + "string_decoder": "1.0.3", + "util-deprecate": "1.0.2" } }, "readdirp": { @@ -6165,10 +4266,10 @@ "dev": true, "optional": true, "requires": { - "graceful-fs": "^4.1.2", - "minimatch": "^3.0.2", - "readable-stream": "^2.0.2", - "set-immediate-shim": "^1.0.1" + "graceful-fs": "4.1.11", + "minimatch": "3.0.4", + "readable-stream": "2.3.5", + "set-immediate-shim": "1.0.1" } }, "readline2": { @@ -6177,8 +4278,8 @@ "integrity": "sha1-QQWWCP/BVHV7cV2ZidGZ/783LjU=", "dev": true, "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", "mute-stream": "0.0.5" }, "dependencies": { @@ -6196,14 +4297,13 @@ "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", "dev": true, "requires": { - "resolve": "^1.1.6" + "resolve": "1.5.0" } }, "regenerate": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.3.3.tgz", - "integrity": "sha512-jVpo1GadrDAK59t/0jRx5VxYWQEDkkEKi6+HjE3joFVLfDOh9Xrdh0dF1eSq+BI/SwvTQ44gSscJ8N5zYL61sg==", - "dev": true + "integrity": "sha512-jVpo1GadrDAK59t/0jRx5VxYWQEDkkEKi6+HjE3joFVLfDOh9Xrdh0dF1eSq+BI/SwvTQ44gSscJ8N5zYL61sg==" }, "regenerator-runtime": { "version": "0.10.5", @@ -6216,9 +4316,9 @@ "integrity": "sha512-PJepbvDbuK1xgIgnau7Y90cwaAmO/LCLMI2mPvaXq2heGMR3aWW5/BQvYrhJ8jgmQjXewXvBjzfqKcVOmhjZ6Q==", "dev": true, "requires": { - "babel-runtime": "^6.18.0", - "babel-types": "^6.19.0", - "private": "^0.1.6" + "babel-runtime": "6.26.0", + "babel-types": "6.26.0", + "private": "0.1.8" } }, "regex-cache": { @@ -6226,19 +4326,16 @@ "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz", "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==", "dev": true, + "optional": true, "requires": { - "is-equal-shallow": "^0.1.3" + "is-equal-shallow": "0.1.3" } }, - "regex-not": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", - "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", - "dev": true, - "requires": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" - } + "regexpp": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-1.1.0.tgz", + "integrity": "sha512-LOPw8FpgdQF9etWMaAfG/WRthIdXJGYp4mJ2Jgn/2lpkbod9jPn0t9UqN7AxBOKNfzRbYyVfgc7Vk4t/MpnXgw==", + "dev": true }, "regexpu-core": { "version": "2.0.0", @@ -6246,24 +4343,22 @@ "integrity": "sha1-SdA4g3uNz4v6W5pCE5k45uoq4kA=", "dev": true, "requires": { - "regenerate": "^1.2.1", - "regjsgen": "^0.2.0", - "regjsparser": "^0.1.4" + "regenerate": "1.3.3", + "regjsgen": "0.2.0", + "regjsparser": "0.1.5" } }, "regjsgen": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.2.0.tgz", - "integrity": "sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc=", - "dev": true + "integrity": "sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc=" }, "regjsparser": { "version": "0.1.5", "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.1.5.tgz", "integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=", - "dev": true, "requires": { - "jsesc": "~0.5.0" + "jsesc": "0.5.0" } }, "remove-trailing-separator": { @@ -6282,7 +4377,8 @@ "version": "1.6.1", "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", - "dev": true + "dev": true, + "optional": true }, "repeating": { "version": "2.0.1", @@ -6290,50 +4386,50 @@ "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", "dev": true, "requires": { - "is-finite": "^1.0.0" - } - }, - "request": { - "version": "2.85.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.85.0.tgz", - "integrity": "sha512-8H7Ehijd4js+s6wuVPLjwORxD4zeuyjYugprdOXlPSqaApmL/QOy+EB/beICHVCHkGMKNh5rvihb5ov+IDw4mg==", - "dev": true, - "requires": { - "aws-sign2": "~0.7.0", - "aws4": "^1.6.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.5", - "extend": "~3.0.1", - "forever-agent": "~0.6.1", - "form-data": "~2.3.1", - "har-validator": "~5.0.3", - "hawk": "~6.0.2", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.17", - "oauth-sign": "~0.8.2", - "performance-now": "^2.1.0", - "qs": "~6.5.1", - "safe-buffer": "^5.1.1", - "stringstream": "~0.0.5", - "tough-cookie": "~2.3.3", - "tunnel-agent": "^0.6.0", - "uuid": "^3.1.0" - } - }, - "require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", - "dev": true + "is-finite": "1.0.2" + } }, - "require-main-filename": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", - "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", - "dev": true + "request-json": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/request-json/-/request-json-0.6.3.tgz", + "integrity": "sha512-5TVnMD3LaeK0GRCyFlsNgJf5Fjg8J8j7VEfsoJESSWZlWRgPIf7IojsBLbTHcg2798JrrRkJ6L3k1+wj4sglgw==", + "dev": true, + "requires": { + "depd": "1.1.2", + "request": "2.83.0" + }, + "dependencies": { + "request": { + "version": "2.83.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.83.0.tgz", + "integrity": "sha512-lR3gD69osqm6EYLk9wB/G1W/laGWjzH90t1vEa2xuxHD5KUrSzp9pUSfTm+YC5Nxt2T8nMPEvKlhbQayU7bgFw==", + "dev": true, + "requires": { + "aws-sign2": "0.7.0", + "aws4": "1.6.0", + "caseless": "0.12.0", + "combined-stream": "1.0.6", + "extend": "3.0.1", + "forever-agent": "0.6.1", + "form-data": "2.3.2", + "har-validator": "5.0.3", + "hawk": "6.0.2", + "http-signature": "1.2.0", + "is-typedarray": "1.0.0", + "isstream": "0.1.2", + "json-stringify-safe": "5.0.1", + "mime-types": "2.1.18", + "oauth-sign": "0.8.2", + "performance-now": "2.1.0", + "qs": "6.5.1", + "safe-buffer": "5.1.1", + "stringstream": "0.0.5", + "tough-cookie": "2.3.4", + "tunnel-agent": "0.6.0", + "uuid": "3.2.1" + } + } + } }, "require-uncached": { "version": "1.0.3", @@ -6341,8 +4437,8 @@ "integrity": "sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=", "dev": true, "requires": { - "caller-path": "^0.1.0", - "resolve-from": "^1.0.0" + "caller-path": "0.1.0", + "resolve-from": "1.0.1" } }, "requirejs": { @@ -6355,90 +4451,347 @@ "resolved": "http://registry.npmjs.org/requirejs-config-file/-/requirejs-config-file-3.0.0.tgz", "integrity": "sha1-Dv9YLWvacRCZQ3lBgDrUelpFF4M=", "requires": { - "esprima": "^4.0.0", - "fs-extra": "^5.0.0", - "stringify-object": "^3.2.1" + "esprima": "4.0.0", + "fs-extra": "5.0.0", + "stringify-object": "3.2.2" }, "dependencies": { "esprima": { "version": "4.0.0", - "resolved": "http://registry.npmjs.org/esprima/-/esprima-4.0.0.tgz", - "integrity": "sha1-RJnt3NERDgshi6zy+n9/WfVcqAQ=" + "resolved": "http://registry.npmjs.org/esprima/-/esprima-4.0.0.tgz", + "integrity": "sha1-RJnt3NERDgshi6zy+n9/WfVcqAQ=" + }, + "fs-extra": { + "version": "5.0.0", + "resolved": "http://registry.npmjs.org/fs-extra/-/fs-extra-5.0.0.tgz", + "integrity": "sha1-QU0BEM3QZwVzTQVWUsVBEmDDGr0=", + "requires": { + "graceful-fs": "4.1.11", + "jsonfile": "4.0.0", + "universalify": "0.1.1" + } + }, + "rimraf": { + "version": "2.2.8", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.2.8.tgz", + "integrity": "sha1-5Dm+Kq7jJzIZUnMPmaiSnk/FBYI=" + } + } + }, + "resolve": { + "version": "1.5.0", + "resolved": "http://registry.npmjs.org/resolve/-/resolve-1.5.0.tgz", + "integrity": "sha1-HwmsznlsmnYlefMbLBzEw83fnzY=", + "requires": { + "path-parse": "1.0.5" + } + }, + "resolve-dependency-path": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/resolve-dependency-path/-/resolve-dependency-path-1.0.2.tgz", + "integrity": "sha1-ar6Tpt4+T53Oe16CYeH0eqGvTcI=" + }, + "resolve-from": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz", + "integrity": "sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY=", + "dev": true + }, + "restore-cursor": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-1.0.1.tgz", + "integrity": "sha1-NGYfRohjJ/7SmRR5FSJS35LapUE=", + "requires": { + "exit-hook": "1.1.1", + "onetime": "1.1.0" + } + }, + "rewire": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/rewire/-/rewire-4.0.1.tgz", + "integrity": "sha512-+7RQ/BYwTieHVXetpKhT11UbfF6v1kGhKFrtZN7UDL2PybMsSt/rpLWeEUGF5Ndsl1D5BxiCB14VDJyoX+noYw==", + "dev": true, + "requires": { + "eslint": "4.19.1" + }, + "dependencies": { + "ajv": { + "version": "5.5.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", + "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", + "dev": true, + "requires": { + "co": "4.6.0", + "fast-deep-equal": "1.1.0", + "fast-json-stable-stringify": "2.0.0", + "json-schema-traverse": "0.3.1" + } + }, + "ajv-keywords": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-2.1.1.tgz", + "integrity": "sha1-YXmX/F9gV2iUxDX5QNgZ4TW4B2I=", + "dev": true + }, + "ansi-escapes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.1.0.tgz", + "integrity": "sha512-UgAb8H9D41AQnu/PbWlCofQVcnV4Gs2bBJi9eZPxfU/hgglFh3SMDMENRIqdr7H6XFnXdoknctFByVsCOotTVw==", + "dev": true + }, + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "1.9.1" + } + }, + "chalk": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", + "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", + "dev": true, + "requires": { + "ansi-styles": "3.2.1", + "escape-string-regexp": "1.0.5", + "supports-color": "5.4.0" + } + }, + "cli-cursor": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", + "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", + "dev": true, + "requires": { + "restore-cursor": "2.0.0" + } + }, + "eslint": { + "version": "4.19.1", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-4.19.1.tgz", + "integrity": "sha512-bT3/1x1EbZB7phzYu7vCr1v3ONuzDtX8WjuM9c0iYxe+cq+pwcKEoQjl7zd3RpC6YOLgnSy3cTN58M2jcoPDIQ==", + "dev": true, + "requires": { + "ajv": "5.5.2", + "babel-code-frame": "6.26.0", + "chalk": "2.4.1", + "concat-stream": "1.6.1", + "cross-spawn": "5.1.0", + "debug": "3.1.0", + "doctrine": "2.1.0", + "eslint-scope": "3.7.1", + "eslint-visitor-keys": "1.0.0", + "espree": "3.5.4", + "esquery": "1.0.0", + "esutils": "2.0.2", + "file-entry-cache": "2.0.0", + "functional-red-black-tree": "1.0.1", + "glob": "7.1.2", + "globals": "11.7.0", + "ignore": "3.3.7", + "imurmurhash": "0.1.4", + "inquirer": "3.3.0", + "is-resolvable": "1.1.0", + "js-yaml": "3.11.0", + "json-stable-stringify-without-jsonify": "1.0.1", + "levn": "0.3.0", + "lodash": "4.17.10", + "minimatch": "3.0.4", + "mkdirp": "0.5.1", + "natural-compare": "1.4.0", + "optionator": "0.8.2", + "path-is-inside": "1.0.2", + "pluralize": "7.0.0", + "progress": "2.0.0", + "regexpp": "1.1.0", + "require-uncached": "1.0.3", + "semver": "5.5.0", + "strip-ansi": "4.0.0", + "strip-json-comments": "2.0.1", + "table": "4.0.2", + "text-table": "0.2.0" + } + }, + "external-editor": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-2.2.0.tgz", + "integrity": "sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A==", + "dev": true, + "requires": { + "chardet": "0.4.2", + "iconv-lite": "0.4.23", + "tmp": "0.0.33" + } + }, + "figures": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", + "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", + "dev": true, + "requires": { + "escape-string-regexp": "1.0.5" + } + }, + "globals": { + "version": "11.7.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.7.0.tgz", + "integrity": "sha512-K8BNSPySfeShBQXsahYB/AbbWruVOTyVpgoIDnl8odPpeSfP2J5QO2oLFFdl2j7GfDCtZj2bMKar2T49itTPCg==", + "dev": true + }, + "inquirer": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-3.3.0.tgz", + "integrity": "sha512-h+xtnyk4EwKvFWHrUYsWErEVR+igKtLdchu+o0Z1RL7VU/jVMFbYir2bp6bAj8efFNxWqHX0dIss6fJQ+/+qeQ==", + "dev": true, + "requires": { + "ansi-escapes": "3.1.0", + "chalk": "2.4.1", + "cli-cursor": "2.1.0", + "cli-width": "2.2.0", + "external-editor": "2.2.0", + "figures": "2.0.0", + "lodash": "4.17.10", + "mute-stream": "0.0.7", + "run-async": "2.3.0", + "rx-lite": "4.0.8", + "rx-lite-aggregates": "4.0.8", + "string-width": "2.1.1", + "strip-ansi": "4.0.0", + "through": "2.3.8" + } + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "lodash": { + "version": "4.17.10", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz", + "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==", + "dev": true + }, + "mute-stream": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", + "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=", + "dev": true + }, + "onetime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", + "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", + "dev": true, + "requires": { + "mimic-fn": "1.2.0" + } + }, + "pluralize": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-7.0.0.tgz", + "integrity": "sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow==", + "dev": true + }, + "progress": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.0.tgz", + "integrity": "sha1-ihvjZr+Pwj2yvSPxDG/pILQ4nR8=", + "dev": true + }, + "restore-cursor": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", + "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", + "dev": true, + "requires": { + "onetime": "2.0.1", + "signal-exit": "3.0.2" + } + }, + "rx-lite": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-4.0.8.tgz", + "integrity": "sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ=", + "dev": true + }, + "slice-ansi": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-1.0.0.tgz", + "integrity": "sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "2.0.0" + } + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "2.0.0", + "strip-ansi": "4.0.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "3.0.0" + } }, - "fs-extra": { - "version": "5.0.0", - "resolved": "http://registry.npmjs.org/fs-extra/-/fs-extra-5.0.0.tgz", - "integrity": "sha1-QU0BEM3QZwVzTQVWUsVBEmDDGr0=", + "supports-color": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", + "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", + "dev": true, "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" + "has-flag": "3.0.0" } }, - "rimraf": { - "version": "2.2.8", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.2.8.tgz", - "integrity": "sha1-5Dm+Kq7jJzIZUnMPmaiSnk/FBYI=" + "table": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/table/-/table-4.0.2.tgz", + "integrity": "sha512-UUkEAPdSGxtRpiV9ozJ5cMTtYiqz7Ni1OGqLXRCynrvzdtR1p+cfOWe2RJLwvUG8hNanaSRjecIqwOjqeatDsA==", + "dev": true, + "requires": { + "ajv": "5.5.2", + "ajv-keywords": "2.1.1", + "chalk": "2.4.1", + "lodash": "4.17.10", + "slice-ansi": "1.0.0", + "string-width": "2.1.1" + } + }, + "tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dev": true, + "requires": { + "os-tmpdir": "1.0.2" + } } } }, - "resolve": { - "version": "1.5.0", - "resolved": "http://registry.npmjs.org/resolve/-/resolve-1.5.0.tgz", - "integrity": "sha1-HwmsznlsmnYlefMbLBzEw83fnzY=", - "requires": { - "path-parse": "^1.0.5" - } - }, - "resolve-dependency-path": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/resolve-dependency-path/-/resolve-dependency-path-1.0.2.tgz", - "integrity": "sha1-ar6Tpt4+T53Oe16CYeH0eqGvTcI=" - }, - "resolve-from": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz", - "integrity": "sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY=", - "dev": true - }, - "resolve-url": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", - "dev": true - }, - "restore-cursor": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-1.0.1.tgz", - "integrity": "sha1-NGYfRohjJ/7SmRR5FSJS35LapUE=", - "requires": { - "exit-hook": "^1.0.0", - "onetime": "^1.0.0" - } - }, - "ret": { - "version": "0.1.15", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", - "dev": true - }, - "right-align": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", - "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=", - "dev": true, - "optional": true, - "requires": { - "align-text": "^0.1.1" - } - }, "rimraf": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", "dev": true, "requires": { - "glob": "^7.0.5" + "glob": "7.1.2" } }, "run-async": { @@ -6446,7 +4799,7 @@ "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz", "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=", "requires": { - "is-promise": "^2.1.0" + "is-promise": "2.1.0" } }, "rx": { @@ -6460,62 +4813,39 @@ "integrity": "sha1-Gc5QLKVyZl87ZHsQk5+X/RYV8QI=", "dev": true }, + "rx-lite-aggregates": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz", + "integrity": "sha1-dTuHqJoRyVRnxKwWJsTvxOBcZ74=", + "dev": true, + "requires": { + "rx-lite": "3.1.2" + } + }, "safe-buffer": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==" }, - "safe-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", - "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", - "dev": true, - "requires": { - "ret": "~0.1.10" - } + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true }, - "sane": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/sane/-/sane-1.6.0.tgz", - "integrity": "sha1-lhDEUjB6E10pwf3+JUcDQYDEZ3U=", - "dev": true, - "requires": { - "anymatch": "^1.3.0", - "exec-sh": "^0.2.0", - "fb-watchman": "^1.8.0", - "minimatch": "^3.0.2", - "minimist": "^1.1.1", - "walker": "~1.0.5", - "watch": "~0.10.0" - }, - "dependencies": { - "bser": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bser/-/bser-1.0.2.tgz", - "integrity": "sha1-OBEWlwsqbe6lZG3RXdcnhES1YWk=", - "dev": true, - "requires": { - "node-int64": "^0.4.0" - } - }, - "fb-watchman": { - "version": "1.9.2", - "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-1.9.2.tgz", - "integrity": "sha1-okz0eCf4LTj7Waaa1wt247auc4M=", - "dev": true, - "requires": { - "bser": "1.0.2" - } - } - } + "samsam": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/samsam/-/samsam-1.3.0.tgz", + "integrity": "sha512-1HwIYD/8UlOtFS3QO3w7ey+SdSDFE4HRNLZoZRYVQefrOY3l17epswImeB1ijgJFQJodIaHcwkp3r/myBjFVbg==", + "dev": true }, "sass-lookup": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/sass-lookup/-/sass-lookup-1.1.0.tgz", "integrity": "sha1-2kSiG+6llV8U7/24G97idRttFeI=", "requires": { - "commander": "~2.8.1", - "is-relative-path": "~1.0.0" + "commander": "2.8.1", + "is-relative-path": "1.0.2" }, "dependencies": { "commander": { @@ -6523,7 +4853,7 @@ "resolved": "https://registry.npmjs.org/commander/-/commander-2.8.1.tgz", "integrity": "sha1-Br42f+v9oMMwqh4qBy09yXYkJdQ=", "requires": { - "graceful-readlink": ">= 1.0.0" + "graceful-readlink": "1.0.1" }, "dependencies": { "graceful-readlink": { @@ -6533,233 +4863,101 @@ } } }, - "is-relative-path": { - "version": "1.0.2", - "resolved": "http://registry.npmjs.org/is-relative-path/-/is-relative-path-1.0.2.tgz", - "integrity": "sha1-CRtGoNZ8HtD+hfH4z93gBrslHUY=" - } - } - }, - "sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", - "dev": true - }, - "semver": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz", - "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==", - "dev": true - }, - "set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", - "dev": true - }, - "set-immediate-shim": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz", - "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=", - "dev": true, - "optional": true - }, - "set-value": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz", - "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.3", - "split-string": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "shelljs": { - "version": "0.7.8", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.7.8.tgz", - "integrity": "sha1-3svPh0sNHl+3LhSxZKloMEjprLM=", - "dev": true, - "requires": { - "glob": "^7.0.0", - "interpret": "^1.0.0", - "rechoir": "^0.6.2" - } - }, - "shellwords": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz", - "integrity": "sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==", - "dev": true - }, - "signal-exit": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", - "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=" - }, - "slash": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", - "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=", - "dev": true - }, - "slice-ansi": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-0.0.4.tgz", - "integrity": "sha1-7b+JA/ZvfOL46v1s7tZeJkyDGzU=", - "dev": true - }, - "snapdragon": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", - "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", - "dev": true, - "requires": { - "base": "^0.11.1", - "debug": "^2.2.0", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "map-cache": "^0.2.2", - "source-map": "^0.5.6", - "source-map-resolve": "^0.5.0", - "use": "^3.1.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - } - }, - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true + "is-relative-path": { + "version": "1.0.2", + "resolved": "http://registry.npmjs.org/is-relative-path/-/is-relative-path-1.0.2.tgz", + "integrity": "sha1-CRtGoNZ8HtD+hfH4z93gBrslHUY=" } } }, - "snapdragon-node": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", - "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", + "semver": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz", + "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==", + "dev": true + }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "dev": true, + "optional": true + }, + "set-immediate-shim": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz", + "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=", + "dev": true, + "optional": true + }, + "shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "dev": true, + "requires": { + "shebang-regex": "1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "dev": true + }, + "shelljs": { + "version": "0.7.8", + "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.7.8.tgz", + "integrity": "sha1-3svPh0sNHl+3LhSxZKloMEjprLM=", + "dev": true, + "requires": { + "glob": "7.1.2", + "interpret": "1.1.0", + "rechoir": "0.6.2" + } + }, + "signal-exit": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=" + }, + "sinon": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/sinon/-/sinon-6.0.1.tgz", + "integrity": "sha512-rfszhNcfamK2+ofIPi9XqeH89pH7KGDcAtM+F9CsjHXOK3jzWG99vyhyD2V+r7s4IipmWcWUFYq4ftZ9/Eu2Wg==", "dev": true, "requires": { - "define-property": "^1.0.0", - "isobject": "^3.0.0", - "snapdragon-util": "^3.0.1" + "@sinonjs/formatio": "2.0.0", + "diff": "3.5.0", + "lodash.get": "4.4.2", + "lolex": "2.7.0", + "nise": "1.4.2", + "supports-color": "5.4.0", + "type-detect": "4.0.8" }, "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "supports-color": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", + "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", "dev": true, "requires": { - "is-descriptor": "^1.0.0" + "has-flag": "3.0.0" } - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true } } }, - "snapdragon-util": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", - "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", - "dev": true, - "requires": { - "kind-of": "^3.2.0" - } + "slash": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", + "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=", + "dev": true + }, + "slice-ansi": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-0.0.4.tgz", + "integrity": "sha1-7b+JA/ZvfOL46v1s7tZeJkyDGzU=", + "dev": true }, "sntp": { "version": "2.1.0", @@ -6767,7 +4965,7 @@ "integrity": "sha512-FL1b58BDrqS3A11lJ0zEdnJ3UOKqVxawAkF3k7F0CVN7VQ34aZrV+G8BZ1WC9ZL7NyrwsW0oviwsWDgRuVYtJg==", "dev": true, "requires": { - "hoek": "4.x.x" + "hoek": "4.2.1" } }, "source-map": { @@ -6776,41 +4974,22 @@ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", "dev": true }, - "source-map-resolve": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.1.tgz", - "integrity": "sha512-0KW2wvzfxm8NCTb30z0LMNyPqWCdDGE2viwzUaucqJdkTRXtZiSY3I+2A6nVAjmdOy0I4gU8DwnVVGsk9jvP2A==", - "dev": true, - "requires": { - "atob": "^2.0.0", - "decode-uri-component": "^0.2.0", - "resolve-url": "^0.2.1", - "source-map-url": "^0.4.0", - "urix": "^0.1.0" - } - }, "source-map-support": { "version": "0.4.18", "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz", "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==", "dev": true, "requires": { - "source-map": "^0.5.6" + "source-map": "0.5.7" } }, - "source-map-url": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", - "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", - "dev": true - }, "spawn-sync": { "version": "1.0.15", "resolved": "https://registry.npmjs.org/spawn-sync/-/spawn-sync-1.0.15.tgz", "integrity": "sha1-sAeZVX63+wyDdsKdROih6mfldHY=", "requires": { - "concat-stream": "^1.4.7", - "os-shim": "^0.1.2" + "concat-stream": "1.6.1", + "os-shim": "0.1.3" } }, "spdx-correct": { @@ -6819,8 +4998,8 @@ "integrity": "sha512-N19o9z5cEyc8yQQPukRCZ9EUmb4HUpnrmaL/fxS2pBo2jbfcFRVuFZ/oFC+vZz0MNNk0h80iMn5/S6qGZOL5+g==", "dev": true, "requires": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" + "spdx-expression-parse": "3.0.0", + "spdx-license-ids": "3.0.0" } }, "spdx-exceptions": { @@ -6835,8 +5014,8 @@ "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", "dev": true, "requires": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" + "spdx-exceptions": "2.1.0", + "spdx-license-ids": "3.0.0" } }, "spdx-license-ids": { @@ -6845,15 +5024,6 @@ "integrity": "sha512-2+EPwgbnmOIl8HjGBXXMd9NAu02vLjOO1nWw4kmeRDFyHn+M/ETfHxQUK0oXg8ctgVnl9t3rosNVsZ1jG61nDA==", "dev": true }, - "split-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", - "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", - "dev": true, - "requires": { - "extend-shallow": "^3.0.0" - } - }, "sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", @@ -6866,14 +5036,14 @@ "integrity": "sha1-Ew9Zde3a2WPx1W+SuaxsUfqfg+s=", "dev": true, "requires": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "tweetnacl": "~0.14.0" + "asn1": "0.2.3", + "assert-plus": "1.0.0", + "bcrypt-pbkdf": "1.0.1", + "dashdash": "1.14.1", + "ecc-jsbn": "0.1.1", + "getpass": "0.1.7", + "jsbn": "0.1.1", + "tweetnacl": "0.14.5" } }, "stack-trace": { @@ -6881,101 +5051,14 @@ "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=" }, - "static-extend": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", - "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", - "dev": true, - "requires": { - "define-property": "^0.2.5", - "object-copy": "^0.1.0" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - } - }, - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - } - } - }, - "string-length": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/string-length/-/string-length-1.0.1.tgz", - "integrity": "sha1-VpcPscOFWOnnC3KL894mmsRa36w=", - "dev": true, - "requires": { - "strip-ansi": "^3.0.0" - } - }, "string-width": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" } }, "string_decoder": { @@ -6983,7 +5066,7 @@ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", "requires": { - "safe-buffer": "~5.1.0" + "safe-buffer": "5.1.1" } }, "stringify-object": { @@ -6991,9 +5074,9 @@ "resolved": "http://registry.npmjs.org/stringify-object/-/stringify-object-3.2.2.tgz", "integrity": "sha1-mFMFLlqI+2BaRM0nRFqiV61/+80=", "requires": { - "get-own-enumerable-property-symbols": "^2.0.1", - "is-obj": "^1.0.1", - "is-regexp": "^1.0.0" + "get-own-enumerable-property-symbols": "2.0.1", + "is-obj": "1.0.1", + "is-regexp": "1.0.0" } }, "stringstream": { @@ -7007,16 +5090,7 @@ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "requires": { - "ansi-regex": "^2.0.0" - } - }, - "strip-bom": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", - "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", - "dev": true, - "requires": { - "is-utf8": "^0.2.0" + "ansi-regex": "2.1.1" } }, "strip-json-comments": { @@ -7026,38 +5100,37 @@ "dev": true }, "stylable": { - "version": "5.3.0", - "resolved": "http://registry.npmjs.org/stylable/-/stylable-5.3.0.tgz", - "integrity": "sha1-ZjTfQXgwNOhypqyO1632Wm8aRts=", - "requires": { - "css-selector-tokenizer": "^0.7.0", - "deindent": "^0.1.0", - "enhanced-resolve": "^3.4.1", - "is-vendor-prefixed": "^1.0.0", - "lodash.clonedeep": "^4.5.0", - "murmurhash": "^0.0.2", - "postcss": "^6.0.17", - "postcss-js": "^1.0.1", - "postcss-nested": "^3.0.0", - "postcss-safe-parser": "^3.0.1", - "postcss-selector-matches": "^3.0.1", - "postcss-value-parser": "^3.3.0" + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/stylable/-/stylable-5.2.2.tgz", + "integrity": "sha512-OBABxOpF3qt2DuxZoCcMRgjrTuywlWSrle8W9UPLs9l6TPHuc9Jg27tOOLAykAiBhhSIHVgJ0Sa44YCBsM+MYg==", + "requires": { + "css-selector-tokenizer": "0.7.0", + "deindent": "0.1.0", + "enhanced-resolve": "3.4.1", + "lodash.clonedeep": "4.5.0", + "murmurhash": "0.0.2", + "postcss": "6.0.23", + "postcss-js": "1.0.1", + "postcss-nested": "3.0.0", + "postcss-safe-parser": "3.0.1", + "postcss-selector-matches": "3.0.1", + "postcss-value-parser": "3.3.0" }, "dependencies": { "enhanced-resolve": { "version": "3.4.1", - "resolved": "http://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-3.4.1.tgz", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-3.4.1.tgz", "integrity": "sha1-BCHjOf1xQZs9oT0Smzl5BAIwR24=", "requires": { - "graceful-fs": "^4.1.2", - "memory-fs": "^0.4.0", - "object-assign": "^4.0.1", - "tapable": "^0.2.7" + "graceful-fs": "4.1.11", + "memory-fs": "0.4.1", + "object-assign": "4.1.1", + "tapable": "0.2.8" } }, "tapable": { "version": "0.2.8", - "resolved": "http://registry.npmjs.org/tapable/-/tapable-0.2.8.tgz", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-0.2.8.tgz", "integrity": "sha1-mTcqXJmb8t8WCvwNdL7U9HlIzSI=" } } @@ -7067,9 +5140,9 @@ "resolved": "https://registry.npmjs.org/stylus-lookup/-/stylus-lookup-1.0.2.tgz", "integrity": "sha1-eVm+rAu1V+vROvO8Osvu/7J2YNQ=", "requires": { - "commander": "~2.8.1", - "debug": "^3.1.0", - "is-relative-path": "~1.0.0" + "commander": "2.8.1", + "debug": "3.1.0", + "is-relative-path": "1.0.2" }, "dependencies": { "commander": { @@ -7077,7 +5150,7 @@ "resolved": "https://registry.npmjs.org/commander/-/commander-2.8.1.tgz", "integrity": "sha1-Br42f+v9oMMwqh4qBy09yXYkJdQ=", "requires": { - "graceful-readlink": ">= 1.0.0" + "graceful-readlink": "1.0.1" }, "dependencies": { "graceful-readlink": { @@ -7107,24 +5180,18 @@ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" }, - "symbol-tree": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.2.tgz", - "integrity": "sha1-rifbOPZgp64uHDt9G8KQgZuFGeY=", - "dev": true - }, "table": { "version": "3.8.3", "resolved": "https://registry.npmjs.org/table/-/table-3.8.3.tgz", "integrity": "sha1-K7xULw/amGGnVdOUf+/Ys/UThV8=", "dev": true, "requires": { - "ajv": "^4.7.0", - "ajv-keywords": "^1.0.0", - "chalk": "^1.1.1", - "lodash": "^4.0.0", + "ajv": "4.11.8", + "ajv-keywords": "1.5.1", + "chalk": "1.1.3", + "lodash": "4.17.5", "slice-ansi": "0.0.4", - "string-width": "^2.0.0" + "string-width": "2.1.1" }, "dependencies": { "ansi-regex": { @@ -7148,346 +5215,106 @@ "string-width": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - } - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - } - } - }, - "tabtab": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/tabtab/-/tabtab-2.2.2.tgz", - "integrity": "sha1-egR/FDsBC0y9MfhX6ClhUSy/ThQ=", - "requires": { - "debug": "^2.2.0", - "inquirer": "^1.0.2", - "lodash.difference": "^4.5.0", - "lodash.uniq": "^4.5.0", - "minimist": "^1.2.0", - "mkdirp": "^0.5.1", - "npmlog": "^2.0.3", - "object-assign": "^4.1.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - } - } - }, - "tapable": { - "version": "1.0.0", - "resolved": "http://registry.npmjs.org/tapable/-/tapable-1.0.0.tgz", - "integrity": "sha1-y7Y52QAu7ZxrWXXrIFmNeTbx+fI=" - }, - "test-exclude": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-4.2.1.tgz", - "integrity": "sha512-qpqlP/8Zl+sosLxBcVKl9vYy26T9NPalxSzzCP/OY6K7j938ui2oKgo+kRZYfxAeIpLqpbVnsHq1tyV70E4lWQ==", - "dev": true, - "requires": { - "arrify": "^1.0.1", - "micromatch": "^3.1.8", - "object-assign": "^4.1.0", - "read-pkg-up": "^1.0.1", - "require-main-filename": "^1.0.1" - }, - "dependencies": { - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", - "dev": true - }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", - "dev": true - }, - "braces": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.1.tgz", - "integrity": "sha512-SO5lYHA3vO6gz66erVvedSCkp7AKWdv6VcQ2N4ysXfPxdAlxAMMAdwegGGcv1Bqwm7naF1hNdk5d6AAIEHV2nQ==", - "dev": true, - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "kind-of": "^6.0.2", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", - "dev": true, - "requires": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - } - }, - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - } - } - }, - "extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "dev": true, - "requires": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", "dev": true, "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } + "is-fullwidth-code-point": "2.0.0", + "strip-ansi": "4.0.0" } }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", "dev": true, "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } + "ansi-regex": "3.0.0" } - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, + } + } + }, + "tabtab": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/tabtab/-/tabtab-2.2.2.tgz", + "integrity": "sha1-egR/FDsBC0y9MfhX6ClhUSy/ThQ=", + "requires": { + "debug": "2.6.9", + "inquirer": "1.2.3", + "lodash.difference": "4.5.0", + "lodash.uniq": "4.5.0", + "minimist": "1.2.0", + "mkdirp": "0.5.1", + "npmlog": "2.0.4", + "object-assign": "4.1.1" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } + "ms": "2.0.0" } - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true - }, - "micromatch": { - "version": "3.1.9", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.9.tgz", - "integrity": "sha512-SlIz6sv5UPaAVVFRKodKjCg48EbNoIhgetzfK/Cy0v5U52Z6zB136M8tp0UC9jM53LYbmIRihJszvvqpKkfm9g==", + } + } + }, + "tapable": { + "version": "1.0.0", + "resolved": "http://registry.npmjs.org/tapable/-/tapable-1.0.0.tgz", + "integrity": "sha1-y7Y52QAu7ZxrWXXrIFmNeTbx+fI=" + }, + "tar": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.1.tgz", + "integrity": "sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE=", + "dev": true, + "requires": { + "block-stream": "0.0.9", + "fstream": "1.0.11", + "inherits": "2.0.3" + } + }, + "tar-pack": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/tar-pack/-/tar-pack-3.4.1.tgz", + "integrity": "sha512-PPRybI9+jM5tjtCbN2cxmmRU7YmqT3Zv/UDy48tAh2XRkLa9bAORtSWLkVc13+GJF+cdTh1yEnHEk3cpTaL5Kg==", + "dev": true, + "optional": true, + "requires": { + "debug": "2.6.9", + "fstream": "1.0.11", + "fstream-ignore": "1.0.5", + "once": "1.4.0", + "readable-stream": "2.3.5", + "rimraf": "2.6.2", + "tar": "2.2.1", + "uid-number": "0.0.6" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, + "optional": true, "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" + "ms": "2.0.0" } } } }, + "text-encoding": { + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/text-encoding/-/text-encoding-0.6.4.tgz", + "integrity": "sha1-45mpgiV6J22uQou5KEXLcb3CbRk=", + "dev": true + }, "text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", "dev": true }, - "throat": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/throat/-/throat-3.2.0.tgz", - "integrity": "sha512-/EY8VpvlqJ+sFtLPeOgc8Pl7kQVOWv0woD87KTXVHPIAE842FGT+rokxIhe8xIUP1cfgrkt0as0vDLjDiMtr8w==", - "dev": true - }, "through": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", @@ -7498,78 +5325,24 @@ "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.29.tgz", "integrity": "sha1-8lEl/w3Z2jzLDC3Tce4SiLuRKMA=", "requires": { - "os-tmpdir": "~1.0.1" + "os-tmpdir": "1.0.2" } }, - "tmpl": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.4.tgz", - "integrity": "sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE=", - "dev": true - }, "to-fast-properties": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=", "dev": true }, - "to-object-path": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", - "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - } - }, - "to-regex": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", - "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", - "dev": true, - "requires": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" - } - }, - "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - }, - "dependencies": { - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - } - } - } - }, "tough-cookie": { "version": "2.3.4", "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.4.tgz", "integrity": "sha512-TZ6TTfI5NtZnuyy/Kecv+CnoROnyXn2DN97LontgQpCwsX2XyLYCC0ENhYkehSOwAp8rTQKc/NUIF7BkQ5rKLA==", "dev": true, "requires": { - "punycode": "^1.4.1" + "punycode": "1.4.1" } }, - "tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=", - "dev": true - }, "traverse-chain": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/traverse-chain/-/traverse-chain-0.1.0.tgz", @@ -7587,7 +5360,7 @@ "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", "dev": true, "requires": { - "safe-buffer": "^5.0.1" + "safe-buffer": "5.1.1" } }, "tweetnacl": { @@ -7602,9 +5375,15 @@ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", "requires": { - "prelude-ls": "~1.1.2" + "prelude-ls": "1.1.2" } }, + "type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "dev": true + }, "typedarray": { "version": "0.0.6", "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", @@ -7631,85 +5410,16 @@ } } }, - "uglify-js": { - "version": "2.8.29", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz", - "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=", - "dev": true, - "optional": true, - "requires": { - "source-map": "~0.5.1", - "uglify-to-browserify": "~1.0.0", - "yargs": "~3.10.0" - }, - "dependencies": { - "camelcase": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", - "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=", - "dev": true, - "optional": true - }, - "yargs": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", - "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", - "dev": true, - "optional": true, - "requires": { - "camelcase": "^1.0.2", - "cliui": "^2.1.0", - "decamelize": "^1.0.0", - "window-size": "0.1.0" - } - } - } - }, - "uglify-to-browserify": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz", - "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=", + "uid-number": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/uid-number/-/uid-number-0.0.6.tgz", + "integrity": "sha1-DqEOgDXo61uOREnwbaHHMGY7qoE=", "dev": true, "optional": true }, - "union-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz", - "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=", - "dev": true, - "requires": { - "arr-union": "^3.1.0", - "get-value": "^2.0.6", - "is-extendable": "^0.1.1", - "set-value": "^0.4.3" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "set-value": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz", - "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.1", - "to-object-path": "^0.3.0" - } - } - } - }, "uniq": { "version": "1.0.1", - "resolved": "http://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz", + "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz", "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=" }, "universalify": { @@ -7717,81 +5427,12 @@ "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.1.tgz", "integrity": "sha1-+nG63UQ3r0wUiEHjs7Fl+enlkLc=" }, - "unset-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", - "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", - "dev": true, - "requires": { - "has-value": "^0.3.1", - "isobject": "^3.0.0" - }, - "dependencies": { - "has-value": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", - "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", - "dev": true, - "requires": { - "get-value": "^2.0.3", - "has-values": "^0.1.4", - "isobject": "^2.0.0" - }, - "dependencies": { - "isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "dev": true, - "requires": { - "isarray": "1.0.0" - } - } - } - }, - "has-values": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", - "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", - "dev": true - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - } - } - }, - "urix": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", - "dev": true - }, - "use": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/use/-/use-3.1.0.tgz", - "integrity": "sha512-6UJEQM/L+mzC3ZJNM56Q4DFGLX/evKGRg15UJHGB9X5j5Z3AFbgZvjUh2yq/UJUY4U5dh7Fal++XbNg1uzpRAw==", - "dev": true, - "requires": { - "kind-of": "^6.0.2" - }, - "dependencies": { - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true - } - } - }, "user-home": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/user-home/-/user-home-2.0.0.tgz", "integrity": "sha1-nHC/2Babwdy/SGBODwS4tJzenp8=", "requires": { - "os-homedir": "^1.0.0" + "os-homedir": "1.0.2" } }, "util-deprecate": { @@ -7811,7 +5452,7 @@ "integrity": "sha1-qrGh+jDUX4jdMhFIh1rALAtV5bQ=", "dev": true, "requires": { - "user-home": "^1.1.1" + "user-home": "1.1.1" }, "dependencies": { "user-home": { @@ -7828,24 +5469,19 @@ "integrity": "sha512-63ZOUnL4SIXj4L0NixR3L1lcjO38crAbgrTpl28t8jjrfuiOBL5Iygm+60qPs/KsZGzPNg6Smnc/oY16QTjF0g==", "dev": true, "requires": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" + "spdx-correct": "3.0.0", + "spdx-expression-parse": "3.0.0" } }, - "vendor-prefixes": { - "version": "1.0.0", - "resolved": "http://registry.npmjs.org/vendor-prefixes/-/vendor-prefixes-1.0.0.tgz", - "integrity": "sha1-HHuS7ORuLxoGxakHYT9dUARd9TE=" - }, "verror": { "version": "1.10.0", "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", "dev": true, "requires": { - "assert-plus": "^1.0.0", + "assert-plus": "1.0.0", "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" + "extsprintf": "1.3.0" } }, "vue-template-compiler": { @@ -7853,91 +5489,40 @@ "resolved": "http://registry.npmjs.org/vue-template-compiler/-/vue-template-compiler-2.5.13.tgz", "integrity": "sha1-EqKqDs1hWKxeXxTSlLCZPzmcPTg=", "requires": { - "de-indent": "^1.0.2", - "he": "^1.1.0" + "de-indent": "1.0.2", + "he": "1.1.1" } }, - "walker": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.7.tgz", - "integrity": "sha1-L3+bj9ENZ3JisYqITijRlhjgKPs=", - "dev": true, - "requires": { - "makeerror": "1.0.x" - } - }, - "watch": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/watch/-/watch-0.10.0.tgz", - "integrity": "sha1-d3mLLaD5kQ1ZXxrOWwwiWFIfIdw=", - "dev": true - }, - "webidl-conversions": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", - "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", - "dev": true - }, - "whatwg-encoding": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.3.tgz", - "integrity": "sha512-jLBwwKUhi8WtBfsMQlL4bUUcT8sMkAtQinscJAe/M4KHCkHuUJAF6vuB0tueNIw4c8ziO6AkRmgY+jL3a0iiPw==", - "dev": true, - "requires": { - "iconv-lite": "0.4.19" - } - }, - "whatwg-url": { - "version": "4.8.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-4.8.0.tgz", - "integrity": "sha1-0pgaqRSMHgCkHFphMRZqtGg7vMA=", + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", "dev": true, "requires": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - }, - "dependencies": { - "webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=", - "dev": true - } + "isexe": "2.0.0" } }, - "which": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.0.tgz", - "integrity": "sha512-xcJpopdamTuY5duC/KnTTNBraPK54YwpenP4lzxU8H91GudWpFv38u0CKjclE1Wi2EH2EDz5LRcHcKbCIzqGyg==", + "wide-align": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", + "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", "dev": true, + "optional": true, "requires": { - "isexe": "^2.0.0" + "string-width": "1.0.2" } }, - "which-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", - "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=", - "dev": true - }, - "window-size": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz", - "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=", - "dev": true, - "optional": true - }, "winston": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/winston/-/winston-2.4.1.tgz", "integrity": "sha512-k/+Dkzd39ZdyJHYkuaYmf4ff+7j+sCIy73UCOWHYA67/WXU+FF/Y6PF28j+Vy7qNRPHWO+dR+/+zkoQWPimPqg==", "requires": { - "async": "~1.0.0", - "colors": "1.0.x", - "cycle": "1.0.x", - "eyes": "0.1.x", - "isstream": "0.1.x", - "stack-trace": "0.0.x" + "async": "1.0.0", + "colors": "1.0.3", + "cycle": "1.0.3", + "eyes": "0.1.8", + "isstream": "0.1.2", + "stack-trace": "0.0.10" }, "dependencies": { "colors": { @@ -7952,25 +5537,6 @@ "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=" }, - "worker-farm": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.6.0.tgz", - "integrity": "sha512-6w+3tHbM87WnSWnENBUvA2pxJPLhQUg5LKwUQHq3r+XPhIM+Gh2R5ycbwPCyuGbNg+lPgdcnQUhuC02kJCvffQ==", - "dev": true, - "requires": { - "errno": "~0.1.7" - } - }, - "wrap-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", - "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", - "dev": true, - "requires": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1" - } - }, "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", @@ -7982,13 +5548,13 @@ "integrity": "sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=", "dev": true, "requires": { - "mkdirp": "^0.5.1" + "mkdirp": "0.5.1" } }, - "xml-name-validator": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-2.0.1.tgz", - "integrity": "sha1-TYuPHszTQZqjYgYb7O9RXh5VljU=", + "xml": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/xml/-/xml-1.0.1.tgz", + "integrity": "sha1-eLpyAgApxbyHuKgaPPzXS0ovweU=", "dev": true }, "xtend": { @@ -7997,68 +5563,11 @@ "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=", "dev": true }, - "y18n": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", - "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=", + "yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", "dev": true - }, - "yargs": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-7.1.0.tgz", - "integrity": "sha1-a6MY6xaWFyf10oT46gA+jWFU0Mg=", - "dev": true, - "requires": { - "camelcase": "^3.0.0", - "cliui": "^3.2.0", - "decamelize": "^1.1.1", - "get-caller-file": "^1.0.1", - "os-locale": "^1.4.0", - "read-pkg-up": "^1.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^1.0.1", - "set-blocking": "^2.0.0", - "string-width": "^1.0.2", - "which-module": "^1.0.0", - "y18n": "^3.2.1", - "yargs-parser": "^5.0.0" - }, - "dependencies": { - "camelcase": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", - "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", - "dev": true - }, - "cliui": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", - "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", - "dev": true, - "requires": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wrap-ansi": "^2.0.0" - } - } - } - }, - "yargs-parser": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.0.tgz", - "integrity": "sha1-J17PDX/+Bcd+ZOfIbkzZS/DhIoo=", - "dev": true, - "requires": { - "camelcase": "^3.0.0" - }, - "dependencies": { - "camelcase": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", - "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", - "dev": true - } - } } } } diff --git a/package.json b/package.json index 5365243..9ffa6ad 100644 --- a/package.json +++ b/package.json @@ -4,8 +4,8 @@ "scripts": { "flow": "flow; test $? -eq 0 -o $? -eq 2", "lint": "eslint src && flow check || true", - "test": "jest", - "test-watch": "jest --watch", + "test": "mocha --require babel-core/register './src/**/*.spec.js'", + "test-circle": "mocha --require babel-core/register --reporter mocha-circleci-reporter './src/**/*.spec.js'", "clean": "rm -rf dist", "build": "babel src -d dist --source-maps", "watch": "babel --watch src -d dist --source-maps", @@ -70,7 +70,6 @@ "devDependencies": { "babel-cli": "^6.24.0", "babel-eslint": "^7.2.1", - "babel-jest": "^20.0.3", "babel-plugin-syntax-async-functions": "^6.13.0", "babel-plugin-transform-builtin-extend": "^1.1.2", "babel-plugin-transform-flow-strip-types": "^6.22.0", @@ -80,12 +79,13 @@ "eslint-config-airbnb-base": "^11.1.3", "eslint-plugin-flowtype": "^2.30.4", "eslint-plugin-import": "^2.2.0", - "eslint-plugin-jest": "^19.0.1", "flow-bin": "^0.43.0", - "jest-cli": "^20.0.3", - "mock-fs": "^4.2.0" - }, - "jest": { - "testEnvironment": "node" + "mocha": "^5.1.1", + "mocha-appveyor-reporter": "^0.4.0", + "mocha-circleci-reporter": "0.0.3", + "mocha-junit-reporter": "^1.13.0", + "mock-fs": "^4.5.0", + "rewire": "^4.0.1", + "sinon": "^6.0.1" } } diff --git a/src/dependency-builder/dependency-tree/test/example/amd/a.js b/src/dependency-builder/dependency-tree/test/example/amd/a.js new file mode 100644 index 0000000..b28af9a --- /dev/null +++ b/src/dependency-builder/dependency-tree/test/example/amd/a.js @@ -0,0 +1,8 @@ +define([ + './b', + './c' +], function(b, c) { + 'use strict'; + + return 'cool'; +}); diff --git a/src/dependency-builder/dependency-tree/test/example/amd/b.js b/src/dependency-builder/dependency-tree/test/example/amd/b.js new file mode 100644 index 0000000..96fbfbe --- /dev/null +++ b/src/dependency-builder/dependency-tree/test/example/amd/b.js @@ -0,0 +1,7 @@ +define([ + './c' +], function(c) { + 'use strict'; + + return c; +}); diff --git a/src/dependency-builder/dependency-tree/test/example/amd/c.js b/src/dependency-builder/dependency-tree/test/example/amd/c.js new file mode 100644 index 0000000..20e4f18 --- /dev/null +++ b/src/dependency-builder/dependency-tree/test/example/amd/c.js @@ -0,0 +1 @@ +define({}); diff --git a/src/dependency-builder/dependency-tree/test/example/commonjs/a.js b/src/dependency-builder/dependency-tree/test/example/commonjs/a.js new file mode 100644 index 0000000..8b1c62e --- /dev/null +++ b/src/dependency-builder/dependency-tree/test/example/commonjs/a.js @@ -0,0 +1,2 @@ +var b = require('./b'); +var c = require('./c'); diff --git a/src/dependency-builder/dependency-tree/test/example/commonjs/b.js b/src/dependency-builder/dependency-tree/test/example/commonjs/b.js new file mode 100644 index 0000000..cb36827 --- /dev/null +++ b/src/dependency-builder/dependency-tree/test/example/commonjs/b.js @@ -0,0 +1,3 @@ +var path = require('path'); + +module.exports = {}; diff --git a/src/dependency-builder/dependency-tree/test/example/commonjs/c.js b/src/dependency-builder/dependency-tree/test/example/commonjs/c.js new file mode 100644 index 0000000..4429ee3 --- /dev/null +++ b/src/dependency-builder/dependency-tree/test/example/commonjs/c.js @@ -0,0 +1,3 @@ +var fs = require('fs'); + +module.exports = {}; diff --git a/src/dependency-builder/dependency-tree/test/example/onlyRealDeps/a.js b/src/dependency-builder/dependency-tree/test/example/onlyRealDeps/a.js new file mode 100644 index 0000000..a641188 --- /dev/null +++ b/src/dependency-builder/dependency-tree/test/example/onlyRealDeps/a.js @@ -0,0 +1,3 @@ +var path = require('path'); +var debug = require('debug'); +var notReal = require('not-real'); \ No newline at end of file diff --git a/src/dependency-builder/dependency-tree/test/example/webpack/aliased.js b/src/dependency-builder/dependency-tree/test/example/webpack/aliased.js new file mode 100644 index 0000000..cbb7bb2 --- /dev/null +++ b/src/dependency-builder/dependency-tree/test/example/webpack/aliased.js @@ -0,0 +1 @@ +var foo = require('F'); \ No newline at end of file diff --git a/src/dependency-builder/dependency-tree/test/example/webpack/unaliased.js b/src/dependency-builder/dependency-tree/test/example/webpack/unaliased.js new file mode 100644 index 0000000..6b94512 --- /dev/null +++ b/src/dependency-builder/dependency-tree/test/example/webpack/unaliased.js @@ -0,0 +1 @@ +var cabinet = require('filing-cabinet'); \ No newline at end of file diff --git a/src/dependency-builder/dependency-tree/test/test.spec.js b/src/dependency-builder/dependency-tree/test/test.spec.js new file mode 100644 index 0000000..072c243 --- /dev/null +++ b/src/dependency-builder/dependency-tree/test/test.spec.js @@ -0,0 +1,921 @@ +import assert from 'assert'; +import sinon from 'sinon'; +import mockfs from 'mock-fs'; +import path from 'path'; +import precinct from '../../precinct'; +import rewire from 'rewire'; +import Config from '../Config'; + +// Bootstrap lazy requires +import resolve from 'resolve'; +import typescript from 'typescript'; +import moduleDefinition from 'module-definition'; + +const dependencyTree = rewire('../'); + +describe('dependencyTree', function() { + this.timeout(8000); + function testTreesForFormat(format, ext = '.js') { + it('returns an object form of the dependency tree for a file', function() { + const root = `${__dirname}/example/${format}`; + const filename = `${root}/a${ext}`; + + const tree = dependencyTree({filename, root}); + + assert(tree instanceof Object); + + const aSubTree = tree[filename]; + + assert.ok(aSubTree instanceof Object); + const filesInSubTree = Object.keys(aSubTree); + + assert.equal(filesInSubTree.length, 2); + }); + } + + function mockStylus() { + mockfs({ + [__dirname + '/example/stylus']: { + 'a.styl': ` + @import "b" + @require "c.styl" + `, + 'b.styl': '@import "c"', + 'c.styl': '' + } + }); + } + + function mockSass() { + mockfs({ + [__dirname + '/example/sass']: { + 'a.scss': ` + @import "_b"; + @import "_c.scss"; + `, + '_b.scss': 'body { color: blue; }', + '_c.scss': 'body { color: pink; }' + } + }); + } + + function mockLess() { + mockfs({ + [__dirname + '/example/less']: { + 'a.less': ` + @import "b.css"; + @import "c.less"; + `, + 'b.css': 'body { color: blue; }', + 'c.less': 'body { color: pink; }' + } + }); + } + + function mockes6() { + mockfs({ + [__dirname + '/example/es6']: { + 'a.js': ` + import b from './b'; + import c from './c'; + `, + 'b.js': 'export default function() {};', + 'c.js': 'export default function() {};', + 'jsx.js': `import c from './c';\n export default ;`, + 'foo.jsx': `import React from 'react';\n import b from 'b';\n export default ;`, + 'es7.js': `import c from './c';\n export default async function foo() {};` + } + }); + } + + function mockTS() { + mockfs({ + [__dirname + '/example/ts']: { + 'a.ts': ` + import b from './b'; + import c from './c'; + `, + 'b.ts': 'export default function() {};', + 'c.ts': 'export default function() {};' + } + }); + } + + afterEach(function() { + mockfs.restore(); + }); + + it('returns an empty object for a non-existent filename', function() { + mockfs({ + imaginary: {} + }); + + const root = __dirname + '/imaginary'; + const filename = root + '/notafile.js'; + const tree = dependencyTree({filename, root}); + + assert(tree instanceof Object); + assert(!Object.keys(tree).length); + }); + + it('handles nested tree structures', function() { + mockfs({ + [__dirname + '/extended']: { + 'a.js': `var b = require('./b'); + var c = require('./c');`, + 'b.js': `var d = require('./d'); + var e = require('./e');`, + 'c.js': `var f = require('./f'); + var g = require('./g');`, + 'd.js': '', + 'e.js': '', + 'f.js': '', + 'g.js': '' + } + }); + + const directory = __dirname + '/extended'; + const filename = directory + '/a.js'; + + const tree = dependencyTree({filename, directory}); + assert(tree[filename] instanceof Object); + + // b and c + const subTree = tree[filename]; + assert.equal(Object.keys(subTree).length, 2); + + const bTree = subTree[directory + '/b.js']; + const cTree = subTree[directory + '/c.js']; + // d and e + assert.equal(Object.keys(bTree).length, 2); + // f ang g + assert.equal(Object.keys(cTree).length, 2); + }); + + it('does not include files that are not real (#13)', function() { + mockfs({ + [__dirname + '/onlyRealDeps']: { + 'a.js': 'var notReal = require("./notReal");' + } + }); + + const directory = __dirname + '/onlyRealDeps'; + const filename = directory + '/a.js'; + + const tree = dependencyTree({filename, directory}); + const subTree = tree[filename]; + + assert.ok(!Object.keys(subTree).some(dep => dep.indexOf('notReal') !== -1)); + }); + + it('does not choke on cyclic dependencies', function() { + mockfs({ + [__dirname + '/cyclic']: { + 'a.js': 'var b = require("./b");', + 'b.js': 'var a = require("./a");' + } + }); + + const directory = __dirname + '/cyclic'; + const filename = directory + '/a.js'; + + const spy = sinon.spy(dependencyTree, '_getDependencies'); + + const tree = dependencyTree({filename, directory}); + + assert(spy.callCount === 2); + assert(Object.keys(tree[filename]).length); + + dependencyTree._getDependencies.restore(); + }); + + it('excludes Nodejs core modules by default', function() { + const directory = __dirname + '/example/commonjs'; + const filename = directory + '/b.js'; + + const tree = dependencyTree({filename, directory}); + assert(Object.keys(tree[filename]).length === 0); + assert(Object.keys(tree)[0].indexOf('b.js') !== -1); + }); + + it('traverses installed 3rd party node modules', function() { + const directory = __dirname + '/example/onlyRealDeps'; + const filename = directory + '/a.js'; + + const tree = dependencyTree({filename, directory}); + const subTree = tree[filename]; + + assert(Object.keys(subTree).some(dep => dep === require.resolve('debug'))); + }); + + it('returns a list of absolutely pathed files', function() { + const directory = __dirname + '/example/commonjs'; + const filename = directory + '/b.js'; + + const tree = dependencyTree({filename, directory}); + + for (let node in tree.nodes) { + assert(node.indexOf(process.cwd()) !== -1); + } + }); + + it('excludes duplicate modules from the tree', function() { + mockfs({ + root: { + // More than one module includes c + 'a.js': `import b from "b"; + import c from "c";`, + 'b.js': 'import c from "c";', + 'c.js': 'export default 1;' + } + }); + + const tree = dependencyTree.toList({ + filename: 'root/a.js', + directory: 'root' + }); + + assert(tree.length === 3); + }); + + describe('when given a detective configuration', function() { + it('passes it through to precinct', function() { + const spy = sinon.spy(precinct, 'paperwork'); + const directory = __dirname + '/example/onlyRealDeps'; + const filename = directory + '/a.js'; + const detectiveConfig = { + amd: { + skipLazyLoaded: true + } + }; + + dependencyTree({ + filename, + directory, + detective: detectiveConfig + }); + + assert.ok(spy.calledWith(filename, detectiveConfig)); + spy.restore(); + }); + }); + + describe('when given a list to store non existent partials', function() { + describe('and the file contains no valid partials', function() { + it('stores the invalid partials', function() { + mockfs({ + [__dirname + '/onlyRealDeps']: { + 'a.js': 'var notReal = require("./notReal");' + } + }); + + const directory = __dirname + '/onlyRealDeps'; + const filename = directory + '/a.js'; + const nonExistent = []; + + const tree = dependencyTree({filename, directory, nonExistent}); + + assert.equal(nonExistent.length, 1); + assert.equal(nonExistent[0], './notReal'); + }); + }); + + describe('and the file contains all valid partials', function() { + it('does not store anything', function() { + mockfs({ + [__dirname + '/onlyRealDeps']: { + 'a.js': 'var b = require("./b");', + 'b.js': 'export default 1;' + } + }); + + const directory = __dirname + '/onlyRealDeps'; + const filename = directory + '/a.js'; + const nonExistent = []; + + const tree = dependencyTree({filename, directory, nonExistent}); + + assert.equal(nonExistent.length, 0); + }); + }); + + describe('and the file contains a mix of invalid and valid partials', function() { + it('stores the invalid ones', function() { + mockfs({ + [__dirname + '/onlyRealDeps']: { + 'a.js': 'var b = require("./b");', + 'b.js': 'var c = require("./c"); export default 1;', + 'c.js': 'var crap = require("./notRealMan");' + } + }); + + const directory = __dirname + '/onlyRealDeps'; + const filename = directory + '/a.js'; + const nonExistent = []; + + const tree = dependencyTree({filename, directory, nonExistent}); + + assert.equal(nonExistent.length, 1); + assert.equal(nonExistent[0], './notRealMan'); + }); + }); + + describe('and there is more than one reference to the invalid partial', function() { + it('only includes the non-existent partial once', function() { + mockfs({ + [__dirname + '/onlyRealDeps']: { + 'a.js': 'var b = require("./b");\nvar crap = require("./notRealMan");', + 'b.js': 'var c = require("./c"); export default 1;', + 'c.js': 'var crap = require("./notRealMan");' + } + }); + + const directory = __dirname + '/onlyRealDeps'; + const filename = directory + '/a.js'; + const nonExistent = []; + + const tree = dependencyTree({filename, directory, nonExistent}); + + assert.equal(nonExistent.length, 1); + assert.equal(nonExistent[0], './notRealMan'); + }); + }); + }); + + describe('throws', function() { + beforeEach(function() { + this._directory = __dirname + '/example/commonjs'; + this._revert = dependencyTree.__set__('traverse', () => []); + }); + + afterEach(function() { + this._revert(); + }); + + it('throws if the filename is missing', function() { + assert.throws(function() { + dependencyTree({ + filename: undefined, + directory: this._directory + }); + }); + }); + + it('throws if the root is missing', function() { + assert.throws(function() { + dependencyTree({filename}); + }); + }); + + it('throws if a supplied filter is not a function', function() { + assert.throws(function() { + const directory = __dirname + '/example/onlyRealDeps'; + const filename = directory + '/a.js'; + + const tree = dependencyTree({ + filename, + directory, + filter: 'foobar' + }); + }); + }); + + it('does not throw on the legacy `root` option', function() { + assert.doesNotThrow(function() { + const directory = __dirname + '/example/onlyRealDeps'; + const filename = directory + '/a.js'; + + const tree = dependencyTree({ + filename, + root: directory + }); + }); + }); + }); + + describe('on file error', function() { + beforeEach(function() { + this._directory = __dirname + '/example/commonjs'; + }); + + it('does not throw', function() { + assert.doesNotThrow(() => { + dependencyTree({ + filename: 'foo', + directory: this._directory + }); + }); + }); + + it('returns no dependencies', function() { + const tree = dependencyTree({filename: 'foo', directory: this._directory}); + assert(!tree.length); + }); + }); + + describe('memoization (#2)', function() { + beforeEach(function() { + this._spy = sinon.spy(dependencyTree, '_getDependencies'); + }); + + afterEach(function() { + dependencyTree._getDependencies.restore(); + }); + + it('accepts a cache object for memoization (#2)', function() { + const filename = __dirname + '/example/amd/a.js'; + const directory = __dirname + '/example/amd'; + const cache = {}; + + cache[__dirname + '/example/amd/b.js'] = [ + __dirname + '/example/amd/b.js', + __dirname + '/example/amd/c.js' + ]; + + const tree = dependencyTree({ + filename, + directory, + visited: cache + }); + + assert.equal(Object.keys(tree[filename]).length, 2); + assert(this._spy.neverCalledWith(__dirname + '/example/amd/b.js')); + }); + + it('returns the precomputed list of a cached entry point', function() { + const filename = __dirname + '/example/amd/a.js'; + const directory = __dirname + '/example/amd'; + + const cache = { + // Shouldn't process the first file's tree + [filename]: [] + }; + + const tree = dependencyTree({ + filename, + directory, + visited: cache + }); + + assert(!tree.length); + }); + }); + + describe('module formats', function() { + describe('amd', function() { + testTreesForFormat('amd'); + }); + + describe('commonjs', function() { + testTreesForFormat('commonjs'); + }); + + describe('es6', function() { + beforeEach(function() { + this._directory = __dirname + '/example/es6'; + mockes6(); + }); + + testTreesForFormat('es6'); + + it('resolves files that have jsx', function() { + const filename = `${this._directory}/jsx.js`; + const {[filename]: tree} = dependencyTree({ + filename, + directory: this._directory + }); + + assert.ok(tree[`${this._directory}/c.js`]); + }); + + it('resolves files with a jsx extension', function() { + const filename = `${this._directory}/foo.jsx`; + const {[filename]: tree} = dependencyTree({ + filename, + directory: this._directory + }); + + assert.ok(tree[`${this._directory}/b.js`]); + }); + + it('resolves files that have es7', function() { + const filename = `${this._directory}/es7.js`; + const {[filename]: tree} = dependencyTree({ + filename, + directory: this._directory + }); + + assert.ok(tree[`${this._directory}/c.js`]); + }); + }); + + describe('sass', function() { + beforeEach(function() { + mockSass(); + }); + + testTreesForFormat('sass', '.scss'); + }); + + describe('stylus', function() { + beforeEach(function() { + mockStylus(); + }); + + testTreesForFormat('stylus', '.styl'); + }); + + describe('less', function() { + beforeEach(function() { + mockLess(); + }); + + testTreesForFormat('less', '.less'); + }); + + describe('typescript', function() { + beforeEach(function() { + mockTS(); + }); + + testTreesForFormat('ts', '.ts'); + }); + }); + + describe('toList', function() { + function testToList(format, ext = '.js') { + it('returns a post-order list form of the dependency tree', function() { + const directory = __dirname + '/example/' + format; + const filename = directory + '/a' + ext; + + const list = dependencyTree.toList({ + filename, + directory + }); + + assert(list instanceof Array); + assert(list.length); + }); + } + + it('returns an empty list on a non-existent filename', function() { + mockfs({ + imaginary: {} + }); + + const directory = __dirname + '/imaginary'; + const filename = directory + '/notafile.js'; + + const list = dependencyTree.toList({ + filename, + directory + }); + + assert(list instanceof Array); + assert(!list.length); + }); + + it('orders the visited files by last visited', function() { + const directory = __dirname + '/example/amd'; + const filename = directory + '/a.js'; + const list = dependencyTree.toList({ + filename, + directory + }); + + assert(list.length === 3); + assert(list[0] === directory + '/c.js'); + assert(list[1] === directory + '/b.js'); + assert(list[list.length - 1] === filename); + }); + + describe('module formats', function() { + describe('amd', function() { + testToList('amd'); + }); + + describe('commonjs', function() { + testToList('commonjs'); + }); + + describe('es6', function() { + beforeEach(function() { + mockes6(); + }); + + testToList('es6'); + }); + + describe('sass', function() { + beforeEach(function() { + mockSass(); + }); + + testToList('sass', '.scss'); + }); + + describe('stylus', function() { + beforeEach(function() { + mockStylus(); + }); + + testToList('stylus', '.styl'); + }); + + describe('less', function() { + beforeEach(function() { + mockLess(); + }); + + testToList('less', '.less'); + }); + + describe('typescript', function() { + beforeEach(function() { + mockTS(); + }); + + testToList('ts', '.ts'); + }); + }); + }); + + describe('webpack', function() { + beforeEach(function() { + // Note: not mocking because webpack's resolver needs a real project with dependencies; + // otherwise, we'd have to mock a ton of files. + this._root = path.join(__dirname, '../'); + this._webpackConfig = this._root + '/webpack.config.js'; + + this._testResolution = name => { + const results = dependencyTree.toList({ + filename: `${__dirname}/example/webpack/${name}.js`, + directory: this._root, + webpackConfig: this._webpackConfig, + filter: filename => filename.indexOf('filing-cabinet') !== -1 + }); + + assert.ok(results.some(filename => filename.indexOf('node_modules/filing-cabinet') !== -1)); + }; + }); + + it('resolves aliased modules', function() { + this.timeout(5000); + this._testResolution('aliased'); + }); + + it('resolves unaliased modules', function() { + this.timeout(5000); + this._testResolution('unaliased'); + }); + }); + + describe('requirejs', function() { + beforeEach(function() { + mockfs({ + root: { + 'lodizzle.js': 'define({})', + 'require.config.js': ` + requirejs.config({ + baseUrl: './', + paths: { + F: './lodizzle.js' + } + }); + `, + 'a.js': ` + define([ + 'F' + ], function(F) { + + }); + `, + 'b.js': ` + define([ + './lodizzle' + ], function(F) { + + }); + ` + } + }); + }); + + it('resolves aliased modules', function() { + const tree = dependencyTree({ + filename: 'root/a.js', + directory: 'root', + config: 'root/require.config.js' + }); + + const filename = path.resolve(process.cwd(), 'root/a.js'); + const aliasedFile = path.resolve(process.cwd(), 'root/lodizzle.js'); + assert.ok('root/lodizzle.js' in tree[filename]); + }); + + it('resolves non-aliased paths', function() { + const tree = dependencyTree({ + filename: 'root/b.js', + directory: 'root', + config: 'root/require.config.js' + }); + + const filename = path.resolve(process.cwd(), 'root/b.js'); + const aliasedFile = path.resolve(process.cwd(), 'root/lodizzle.js'); + assert.ok('root/lodizzle.js' in tree[filename]); + }); + }); + + describe('when a filter function is supplied', function() { + it('uses the filter to determine if a file should be included in the results', function() { + const directory = __dirname + '/example/onlyRealDeps'; + const filename = directory + '/a.js'; + + const tree = dependencyTree({ + filename, + directory, + // Skip all 3rd party deps + filter: (filePath, moduleFile) => { + assert.ok(require.resolve('debug')); + assert.ok(moduleFile.match('test/example/onlyRealDeps/a.js')); + return filePath.indexOf('node_modules') === -1; + } + }); + + const subTree = tree[filename]; + assert.ok(Object.keys(tree).length); + + const has3rdPartyDep = Object.keys(subTree).some(dep => dep === require.resolve('debug')); + assert.ok(!has3rdPartyDep); + }); + }); + + describe('when given a CJS file with lazy requires', function() { + beforeEach(function() { + mockfs({ + [__dirname + '/cjs']: { + 'foo.js': 'module.exports = function(bar = require("./bar")) {};', + 'bar.js': 'module.exports = 1;' + } + }); + }); + + it('includes the lazy dependency', function() { + const directory = __dirname + '/cjs'; + const filename = directory + '/foo.js'; + + const tree = dependencyTree({filename, directory}); + const subTree = tree[filename]; + + assert.ok(`${directory}/bar.js` in subTree); + }); + }); + + describe('when given an es6 file using CJS lazy requires', function() { + beforeEach(function() { + mockfs({ + [__dirname + '/es6']: { + 'foo.js': 'export default function(bar = require("./bar")) {};', + 'bar.js': 'export default 1;' + } + }); + }); + + describe('and mixedImport mode is turned on', function() { + it('includes the lazy dependency', function() { + const directory = __dirname + '/es6'; + const filename = directory + '/foo.js'; + + const tree = dependencyTree({ + filename, + directory, + detective: { + es6: { + mixedImports: true + } + } + }); + + const subTree = tree[filename]; + + assert.ok(`${directory}/bar.js` in subTree); + }); + + it('also works for toList', function() { + const directory = __dirname + '/es6'; + const filename = directory + '/foo.js'; + + const results = dependencyTree.toList({ + filename, + directory, + detective: { + es6: { + mixedImports: true + } + } + }); + + assert.equal(results[0], `${directory}/bar.js`); + assert.equal(results[1], filename); + }); + }); + + describe('and mixedImport mode is turned off', function() { + it('does not include the lazy dependency', function() { + const directory = __dirname + '/es6'; + const filename = directory + '/foo.js'; + + const tree = dependencyTree({ + filename, + directory + }); + + const subTree = tree[filename]; + + assert.ok(!(`${directory}/bar.js` in subTree)); + }); + }); + }); + + describe('when given an es6 file using dynamic imports', function() { + beforeEach(function() { + mockfs({ + [__dirname + '/es6']: { + 'foo.js': 'import("./bar");', + 'bar.js': 'export default 1;' + } + }); + }); + + it('includes the dynamic import', function() { + const directory = __dirname + '/es6'; + const filename = directory + '/foo.js'; + + const tree = dependencyTree({ + filename, + directory + }); + + const subTree = tree[filename]; + + assert.ok(!(`${directory}/bar.js` in subTree)); + }); + }); + + describe('when given a CJS file with module property in package.json', function() { + beforeEach(function() { + mockfs({ + [__dirname + '/es6']: { + ['module.entry.js']: 'import * as module from "module.entry"', + ['node_modules']: { + ['module.entry']: { + 'index.main.js': 'module.exports = function() {};', + 'index.module.js': 'module.exports = function() {};', + 'package.json': '{ "main": "index.main.js", "module": "index.module.js" }' + } + } + } + }); + }); + + it('it includes the module entry as dependency', function() { + const directory = __dirname + '/es6'; + const filename = directory + '/module.entry.js'; + + const tree = dependencyTree({ + filename, + directory, + nodeModulesConfig: { + entry: 'module' + } + }); + const subTree = tree[filename]; + + assert.ok(`${directory}/node_modules/module.entry/index.module.js` in subTree); + }); + }); + + describe('Config', function() { + describe('when cloning', function() { + describe('and a detective config was set', function() { + it('retains the detective config in the clone', function() { + const detectiveConfig = { + es6: { + mixedImports: true + } + }; + + const config = new Config({ + detectiveConfig, + filename: 'foo', + directory: 'bar' + }); + + const clone = config.clone(); + + assert.deepEqual(clone.detectiveConfig, detectiveConfig); + }); + }); + }); + }); +}); diff --git a/src/dependency-builder/detectives/detective-es6/index.js b/src/dependency-builder/detectives/detective-es6/index.js index 17f5cfa..fb0a97a 100644 --- a/src/dependency-builder/detectives/detective-es6/index.js +++ b/src/dependency-builder/detectives/detective-es6/index.js @@ -1,5 +1,5 @@ /** -* this file had been forked from https://github.com/dependents/node-detective-es6 +* this file had been forked (and changed since then) from https://github.com/dependents/node-detective-es6 */ var Walker = require('node-source-walk'); diff --git a/src/dependency-builder/detectives/detective-es6/index.spec.js b/src/dependency-builder/detectives/detective-es6/index.spec.js new file mode 100644 index 0000000..04488b0 --- /dev/null +++ b/src/dependency-builder/detectives/detective-es6/index.spec.js @@ -0,0 +1,107 @@ +/** +* this file had been forked (and changed since then) from https://github.com/dependents/node-detective-es6 +*/ + +const assert = require('assert'); +const detective = require('./'); + +describe('detective-es6', function() { + var ast = { + type: 'Program', + body: [{ + type: 'VariableDeclaration', + declarations: [{ + type: 'VariableDeclarator', + id: { + type: 'Identifier', + name: 'x' + }, + init: { + type: 'Literal', + value: 4, + raw: '4' + } + }], + kind: 'let' + }] + }; + + it('accepts an ast', function() { + var deps = detective(ast); + assert(!deps.length); + }); + + it('retrieves the dependencies of es6 modules', function() { + var deps = detective('import {foo, bar} from "mylib";'); + const depsKeys = Object.keys(deps); + assert(depsKeys.length === 1); + assert(depsKeys[0] === 'mylib'); + }); + + it('retrieves the re-export dependencies of es6 modules', function() { + const deps = detective('export {foo, bar} from "mylib";'); + const depsKeys = Object.keys(deps); + assert(depsKeys.length === 1); + assert(depsKeys[0] === 'mylib'); + }); + + it('retrieves the re-export * dependencies of es6 modules', function() { + var deps = detective('export * from "mylib";'); + const depsKeys = Object.keys(deps); + assert(depsKeys.length === 1); + assert(depsKeys[0] === 'mylib'); + }); + + it('handles multiple imports', function() { + var deps = detective('import {foo, bar} from "mylib";\nimport "mylib2"'); + const depsKeys = Object.keys(deps); + assert(depsKeys.length === 2); + assert(depsKeys[0] === 'mylib'); + assert(depsKeys[1] === 'mylib2'); + }); + + it('handles default imports', function() { + var deps = detective('import foo from "foo";'); + const depsKeys = Object.keys(deps); + assert(depsKeys.length === 1); + assert(depsKeys[0] === 'foo'); + }); + + it('handles dynamic imports', function() { + var deps = detective('import("foo").then(foo => foo());'); + const depsKeys = Object.keys(deps); + assert(depsKeys.length === 1); + assert(depsKeys[0] === 'foo'); + }) + + it('should support commonJS syntax', function() { + var deps = detective('var foo = require("foo");'); + const depsKeys = Object.keys(deps); + assert(depsKeys.length === 1); + assert(depsKeys[0] === 'foo'); + }); + + it('returns an empty list for empty files', function() { + var deps = detective(''); + const depsKeys = Object.keys(deps); + assert.equal(depsKeys.length, 0); + }); + + it('throws when content is not provided', function() { + assert.throws(function() { + detective(); + }, Error, 'src not given'); + }); + + it('does not throw with jsx in a module', function() { + assert.doesNotThrow(function() { + detective('import foo from \'foo\'; var templ = ;'); + }); + }); + + it('does not throw on an async ES7 function', function() { + assert.doesNotThrow(function() { + detective('import foo from \'foo\'; export default async function foo() {}'); + }); + }); +}); diff --git a/src/dependency-builder/detectives/detective-typescript/index.spec.js b/src/dependency-builder/detectives/detective-typescript/index.spec.js new file mode 100644 index 0000000..c6a2969 --- /dev/null +++ b/src/dependency-builder/detectives/detective-typescript/index.spec.js @@ -0,0 +1,90 @@ +/* eslint-env mocha */ + +const assert = require('assert'); +const detective = require('./'); + +describe('detective-typescript', () => { + const ast = { + type: 'Program', + body: [{ + type: 'VariableDeclaration', + declarations: [{ + type: 'VariableDeclarator', + id: { + type: 'Identifier', + name: 'x' + }, + init: { + type: 'Literal', + value: 4, + raw: '4' + } + }], + kind: 'let' + }] + }; + + it('accepts an ast', () => { + const deps = detective(ast); + assert(!deps.length); + }); + + it('retrieves the dependencies of modules', () => { + const deps = detective('import {foo, bar} from "mylib";'); + assert(deps.length === 1); + assert(deps[0] === 'mylib'); + }); + + it('retrieves the re-export dependencies of modules', () => { + const deps = detective('export {foo, bar} from "mylib";'); + assert(deps.length === 1); + assert(deps[0] === 'mylib'); + }); + + it('retrieves the re-export * dependencies of modules', () => { + const deps = detective('export * from "mylib";'); + assert(deps.length === 1); + assert(deps[0] === 'mylib'); + }); + + it('handles multiple imports', () => { + const deps = detective('import {foo, bar} from "mylib";\nimport "mylib2"'); + assert(deps.length === 2); + assert(deps[0] === 'mylib'); + assert(deps[1] === 'mylib2'); + }); + + it('handles default imports', () => { + const deps = detective('import foo from "foo";'); + assert(deps.length === 1); + assert(deps[0] === 'foo'); + }); + + it('retrieves dependencies from modules using "export ="', () => { + const deps = detective('import foo = require("mylib");'); + assert(deps.length === 1); + assert(deps[0] === 'mylib'); + }); + + it('returns an empty list for non modules', () => { + const deps = detective('var foo = require("foo");'); + assert(!deps.length); + }); + + it('returns an empty list for empty files', () => { + const deps = detective(''); + assert.equal(deps.length, 0); + }); + + it('throws when content is not provided', () => { + assert.throws(() => { + detective(); + }, Error, 'src not given'); + }); + + it('does not throw with jsx in a module', () => { + assert.doesNotThrow(() => { + detective('import foo from \'foo\'; var baz = bar;'); + }); + }); +}); diff --git a/src/dependency-builder/filing-cabinet/test/ast.js b/src/dependency-builder/filing-cabinet/test/ast.js new file mode 100644 index 0000000..02dd8e9 --- /dev/null +++ b/src/dependency-builder/filing-cabinet/test/ast.js @@ -0,0 +1,266 @@ +// AST of 'import bar from "./bar";' +module.exports = { + "type": "File", + "start": 0, + "end": 24, + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 24 + } + }, + "program": { + "type": "Program", + "start": 0, + "end": 24, + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 24 + } + }, + "sourceType": "module", + "body": [ + { + "type": "ImportDeclaration", + "start": 0, + "end": 24, + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 24 + } + }, + "specifiers": [ + { + "type": "ImportDefaultSpecifier", + "start": 7, + "end": 10, + "loc": { + "start": { + "line": 1, + "column": 7 + }, + "end": { + "line": 1, + "column": 10 + } + }, + "local": { + "type": "Identifier", + "start": 7, + "end": 10, + "loc": { + "start": { + "line": 1, + "column": 7 + }, + "end": { + "line": 1, + "column": 10 + } + }, + "name": "bar" + } + } + ], + "importKind": "value", + "source": { + "type": "StringLiteral", + "start": 16, + "end": 23, + "loc": { + "start": { + "line": 1, + "column": 16 + }, + "end": { + "line": 1, + "column": 23 + } + }, + "extra": { + "rawValue": "./bar", + "raw": "\"./bar\"" + }, + "value": "./bar" + } + } + ], + "directives": [] + }, + "comments": [], + "tokens": [ + { + "type": { + "label": "import", + "keyword": "import", + "beforeExpr": false, + "startsExpr": false, + "rightAssociative": false, + "isLoop": false, + "isAssign": false, + "prefix": false, + "postfix": false, + "binop": null, + "updateContext": null + }, + "value": "import", + "start": 0, + "end": 6, + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 6 + } + } + }, + { + "type": { + "label": "name", + "beforeExpr": false, + "startsExpr": true, + "rightAssociative": false, + "isLoop": false, + "isAssign": false, + "prefix": false, + "postfix": false, + "binop": null + }, + "value": "bar", + "start": 7, + "end": 10, + "loc": { + "start": { + "line": 1, + "column": 7 + }, + "end": { + "line": 1, + "column": 10 + } + } + }, + { + "type": { + "label": "name", + "beforeExpr": false, + "startsExpr": true, + "rightAssociative": false, + "isLoop": false, + "isAssign": false, + "prefix": false, + "postfix": false, + "binop": null + }, + "value": "from", + "start": 11, + "end": 15, + "loc": { + "start": { + "line": 1, + "column": 11 + }, + "end": { + "line": 1, + "column": 15 + } + } + }, + { + "type": { + "label": "string", + "beforeExpr": false, + "startsExpr": true, + "rightAssociative": false, + "isLoop": false, + "isAssign": false, + "prefix": false, + "postfix": false, + "binop": null, + "updateContext": null + }, + "value": "./bar", + "start": 16, + "end": 23, + "loc": { + "start": { + "line": 1, + "column": 16 + }, + "end": { + "line": 1, + "column": 23 + } + } + }, + { + "type": { + "label": ";", + "beforeExpr": true, + "startsExpr": false, + "rightAssociative": false, + "isLoop": false, + "isAssign": false, + "prefix": false, + "postfix": false, + "binop": null, + "updateContext": null + }, + "start": 23, + "end": 24, + "loc": { + "start": { + "line": 1, + "column": 23 + }, + "end": { + "line": 1, + "column": 24 + } + } + }, + { + "type": { + "label": "eof", + "beforeExpr": false, + "startsExpr": false, + "rightAssociative": false, + "isLoop": false, + "isAssign": false, + "prefix": false, + "postfix": false, + "binop": null, + "updateContext": null + }, + "start": 24, + "end": 24, + "loc": { + "start": { + "line": 1, + "column": 24 + }, + "end": { + "line": 1, + "column": 24 + } + } + } + ] +}; diff --git a/src/dependency-builder/filing-cabinet/test/foo.jsx b/src/dependency-builder/filing-cabinet/test/foo.jsx new file mode 100644 index 0000000..fa1ca12 --- /dev/null +++ b/src/dependency-builder/filing-cabinet/test/foo.jsx @@ -0,0 +1,3 @@ +export default () => { + return ; +} diff --git a/src/dependency-builder/filing-cabinet/test/mockedJSFiles.js b/src/dependency-builder/filing-cabinet/test/mockedJSFiles.js new file mode 100644 index 0000000..1cb4d43 --- /dev/null +++ b/src/dependency-builder/filing-cabinet/test/mockedJSFiles.js @@ -0,0 +1,59 @@ +module.exports = { + 'js': { + 'es6': { + 'foo.js': 'import bar from "./bar";', + 'foo.jsx': 'import React from "react"; export default () => { return (
); }', + 'bar.js': 'export default function() {};' + }, + 'cjs': { + 'foo.js': 'module.exports = 1;', + 'bar.jsx': 'var React = require("react"); module.exports = function() { return (
); };' + }, + 'ts': { + 'index.ts': 'import foo from "./foo";', + 'foo.ts': 'export default 1;' + }, + 'amd': { + 'foo.js': 'define(["./bar"], function(bar){ return bar; });', + 'bar.js': 'define({});' + }, + 'commonjs': { + 'foo.js': 'var bar = require("./bar");', + 'bar.js': 'module.exports = function() {};', + 'foo.baz': 'module.exports = "yo";', + 'index.js': '', + 'module.entry.js': 'import * as module from "module.entry"', + 'subdir': { + 'module.js': 'var entry = require("../");', + 'index.js': '' + }, + 'test': { + 'index.spec.js': 'var subdir = require("subdir");' + } + }, + 'node_modules': { + 'lodash.assign': { + 'index.js': 'module.exports = function() {};' + }, + 'module.entry': { + 'index.main.js': 'module.exports = function() {};', + 'index.module.js': 'module.exports = function() {};', + 'package.json': '{ "main": "index.main.js", "module": "index.module.js" }' + }, + 'nested': { + 'index.js': 'require("lodash.assign")', + 'node_modules': { + 'lodash.assign': { + 'index.js': 'module.exports = function() {};' + } + } + } + }, + 'withIndex': { + 'subdir': { + 'index.js': '' + }, + 'index.js': 'var sub = require("./subdir");' + } + } +}; diff --git a/src/dependency-builder/filing-cabinet/test/root1/mod1.js b/src/dependency-builder/filing-cabinet/test/root1/mod1.js new file mode 100644 index 0000000..a099545 --- /dev/null +++ b/src/dependency-builder/filing-cabinet/test/root1/mod1.js @@ -0,0 +1 @@ +module.exports = {}; \ No newline at end of file diff --git a/src/dependency-builder/filing-cabinet/test/root2/mod2.js b/src/dependency-builder/filing-cabinet/test/root2/mod2.js new file mode 100644 index 0000000..a099545 --- /dev/null +++ b/src/dependency-builder/filing-cabinet/test/root2/mod2.js @@ -0,0 +1 @@ +module.exports = {}; \ No newline at end of file diff --git a/src/dependency-builder/filing-cabinet/test/test.spec.js b/src/dependency-builder/filing-cabinet/test/test.spec.js new file mode 100644 index 0000000..6b26e24 --- /dev/null +++ b/src/dependency-builder/filing-cabinet/test/test.spec.js @@ -0,0 +1,663 @@ +var assert = require('assert'); +var sinon = require('sinon'); +var rewire = require('rewire'); +var mock = require('mock-fs'); +var path = require('path'); + +var cabinet = rewire('../'); +//manually add dynamic imports to rewired app +cabinet.__set__('resolveDependencyPath', require('resolve-dependency-path')); +cabinet.__set__('resolve', require('resolve')); +cabinet.__set__('getModuleType', require('module-definition')); +cabinet.__set__('ts', require('typescript')); +cabinet.__set__('amdLookup', require('module-lookup-amd')); +cabinet.__set__('webpackResolve', require('enhanced-resolve')); + +var mockedFiles = require('./mockedJSFiles'); +var mockAST = require('./ast'); + +describe('filing-cabinet', function() { + describe('JavaScript', function() { + beforeEach(function() { + mock(mockedFiles); + }); + + afterEach(function() { + mock.restore(); + }); + + it('dangles off its supported file extensions', function() { + assert.deepEqual(cabinet.supportedFileExtensions, [ + '.js', + '.jsx', + '.ts', + '.scss', + '.sass', + '.styl', + '.less' + ]); + }); + + it('uses a generic resolve for unsupported file extensions', function() { + var stub = sinon.stub(); + var revert = cabinet.__set__('resolveDependencyPath', stub); + + cabinet({ + partial: './bar', + filename: 'js/commonjs/foo.baz', + directory: 'js/commonjs/' + }); + + assert.ok(stub.called); + + revert(); + }); + + describe('when given an ast for a JS file', function() { + it('reuses the ast when trying to determine the module type', function() { + var stub = sinon.stub(); + var revert = cabinet.__set__('getModuleType', { + fromSource: stub + }); + var ast = {}; + + var result = cabinet({ + partial: './bar', + filename: 'js/es6/foo.js', + directory: 'js/es6/', + ast + }); + + assert.deepEqual(stub.args[0][0], ast); + revert(); + }); + + it('resolves the partial successfully', function() { + var result = cabinet({ + partial: './bar', + filename: 'js/es6/foo.js', + directory: 'js/es6/', + ast: mockAST + }); + + assert.equal(result, path.join(__dirname, '../js/es6/bar.js')); + }); + }); + + describe('when not given an ast', function() { + it('uses the filename to look for the module type', function() { + var stub = sinon.stub(); + + var revert = cabinet.__set__('getModuleType', { + sync: stub + }); + + var options = { + partial: './bar', + filename: 'js/es6/foo.js', + directory: 'js/es6/' + }; + + var result = cabinet(options); + + assert.deepEqual(stub.args[0][0], options.filename); + revert(); + }); + }); + + describe('es6', function() { + it('assumes commonjs for es6 modules with no requirejs/webpack config', function() { + var stub = sinon.stub(); + var revert = cabinet.__set__('commonJSLookup', stub); + + cabinet({ + partial: './bar', + filename: 'js/es6/foo.js', + directory: 'js/es6/' + }); + + assert.ok(stub.called); + + revert(); + }); + + it('assumes amd for es6 modules with a requirejs config', function() { + var spy = sinon.spy(cabinet, '_getJSType'); + + var result = cabinet({ + partial: './bar', + filename: 'js/es6/foo.js', + directory: 'js/es6/', + config: { + baseUrl: './' + } + }); + + assert.ok(spy.called); + assert.equal(result, 'js/es6/bar.js'); + spy.restore(); + }); + }); + + describe('jsx', function() { + it('resolves files with the .jsx extension', function() { + const result = cabinet({ + partial: './bar', + filename: 'js/es6/foo.jsx', + directory: 'js/es6/' + }); + + assert.equal(result, `${path.join(__dirname, '../js/es6/bar.js')}`); + }); + }); + + describe('amd', function() { + it('uses the amd resolver', function() { + var stub = sinon.stub(); + var revert = cabinet.__set__('amdLookup', stub); + + cabinet({ + partial: './bar', + filename: 'js/amd/foo.js', + directory: 'js/amd/' + }); + + assert.ok(stub.called); + + revert(); + }); + + it('passes along arguments', function() { + var stub = sinon.stub(); + var revert = cabinet.__set__('amdLookup', stub); + var config = {baseUrl: 'js'}; + + cabinet({ + partial: 'bar', + config, + configPath: 'config.js', + filename: 'js/amd/foo.js', + directory: 'js/amd/' + }); + + var args = stub.getCall(0).args[0]; + + assert.equal(args.partial, 'bar'); + assert.equal(args.config, config); + assert.equal(args.configPath, 'config.js'); + assert.equal(args.filename, 'js/amd/foo.js'); + assert.equal(args.directory, 'js/amd/'); + + assert.ok(stub.called); + + revert(); + }); + }); + + describe('commonjs', function() { + it('uses require\'s resolver', function() { + var stub = sinon.stub(); + var revert = cabinet.__set__('commonJSLookup', stub); + + cabinet({ + partial: './bar', + filename: 'js/commonjs/foo.js', + directory: 'js/commonjs/' + }); + + assert.ok(stub.called); + + revert(); + }); + + it('returns an empty string for an unresolved module', function() { + var result = cabinet({ + partial: 'foobar', + filename: 'js/commonjs/foo.js', + directory: 'js/commonjs/' + }); + + assert.equal(result, ''); + }); + + it('adds the directory to the require resolution paths', function() { + var directory = 'js/commonjs/'; + var result = cabinet({ + partial: 'foobar', + filename: 'js/commonjs/foo.js', + directory: directory + }); + + assert.ok(require.main.paths.some(function(p) { + return p.indexOf(directory) !== -1; + })); + }); + + it('resolves a relative partial about the filename', function() { + var directory = 'js/commonjs/'; + var filename = directory + 'foo.js'; + + var result = cabinet({ + partial: './bar', + filename: filename, + directory: directory + }); + + assert.equal(result, path.join(path.resolve(directory), 'bar.js')); + }); + + it('resolves a .. partial to its parent directory\'s index.js file', function() { + var directory = 'js/commonjs/'; + var filename = directory + 'subdir/module.js'; + + var result = cabinet({ + partial: '../', + filename: filename, + directory: directory + }); + + assert.equal(result, path.join(path.resolve(directory), 'index.js')); + }); + + it('resolves a partial within a directory outside of the given file', function() { + var directory = 'js/commonjs/'; + var filename = directory + 'test/index.spec.js'; + + var result = cabinet({ + partial: 'subdir', + filename: filename, + directory: directory + }); + + assert.equal(result, path.join(path.resolve(directory), 'subdir/index.js')); + }); + + it('resolves a node module with module entry in package.json', function() { + var directory = 'js/commonjs/'; + var filename = directory + 'module.entry.js'; + + var result = cabinet({ + partial: 'module.entry', + filename: filename, + directory: directory, + nodeModulesConfig: { + entry: 'module' + } + }); + + assert.equal( + result, + path.join( + path.resolve(directory), + '..', + 'node_modules', + 'module.entry', + 'index.module.js' + ) + ); + }); + + it('resolves a nested module', function() { + var directory = 'js/node_modules/nested/'; + var filename = directory + 'index.js'; + + var result = cabinet({ + partial: 'lodash.assign', + filename: filename, + directory: directory + }); + + assert.equal( + result, + path.join( + path.resolve(directory), + 'node_modules', + 'lodash.assign', + 'index.js' + ) + ); + }); + + it('resolves to the index.js file of a directory', function() { + var directory = 'js/withIndex'; + var filename = directory + '/index.js'; + + var result = cabinet({ + partial: './subdir', + filename: filename, + directory: directory + }); + + assert.equal( + result, + path.resolve(directory) + '/subdir/index.js' + ); + }); + + it('resolves implicit .jsx requires', function() { + const result = cabinet({ + partial: './bar', + filename: 'js/cjs/foo.js', + directory: 'js/cjs/' + }); + + assert.equal(result, `${path.join(__dirname, '../js/cjs/bar.jsx')}`); + }); + }); + + describe('typescript', function() { + it('resolves an import', function() { + var directory = 'js/ts'; + var filename = directory + '/index.ts'; + + var result = cabinet({ + partial: './foo', + filename, + directory + }); + + assert.equal( + result, + path.join(path.resolve(directory), 'foo.ts') + ); + }); + + describe('when a partial does not exist', function() { + it('returns an empty result', function() { + var directory = 'js/ts'; + var filename = directory + '/index.ts'; + + var result = cabinet({ + partial: './barbar', + filename, + directory + }); + + assert.equal(result, ''); + }); + }); + }); + }); + + describe('CSS', function() { + beforeEach(function() { + mock({ + stylus: { + 'foo.styl': '', + 'bar.styl': '' + }, + sass: { + 'foo.scss': '', + 'bar.scss': '', + 'foo.sass': '', + 'bar.sass': '' + }, + less: { + 'foo.less': '', + 'bar.less': '', + 'bar.css': '' + } + }); + + this._directory = path.resolve(__dirname, '../'); + }); + + afterEach(function() { + mock.restore(); + }); + + describe('sass', function() { + it('uses the sass resolver for .scss files', function() { + const result = cabinet({ + partial: 'bar', + filename: 'sass/foo.scss', + directory: 'sass/' + }); + + assert.equal(result, `${this._directory}/sass/bar.scss`); + }); + + it('uses the sass resolver for .sass files', function() { + const result = cabinet({ + partial: 'bar', + filename: 'sass/foo.sass', + directory: 'sass/' + }); + + assert.equal(result, `${this._directory}/sass/bar.sass`); + }); + }); + + describe('stylus', function() { + it('uses the stylus resolver', function() { + const result = cabinet({ + partial: 'bar', + filename: 'stylus/foo.styl', + directory: 'stylus/' + }); + + assert.equal(result, `${this._directory}/stylus/bar.styl`); + }); + }); + + describe('less', function() { + it('resolves extensionless partials', function() { + const result = cabinet({ + partial: 'bar', + filename: 'less/foo.less', + directory: 'less/' + }); + + assert.equal(result, `${this._directory}/less/bar.less`); + }); + + it('resolves partials with a less extension', function() { + const result = cabinet({ + partial: 'bar.less', + filename: 'less/foo.less', + directory: 'less/' + }); + + assert.equal(result, `${this._directory}/less/bar.less`); + }); + + it('resolves partials with a css extension', function() { + const result = cabinet({ + partial: 'bar.css', + filename: 'less/foo.less', + directory: 'less/' + }); + + assert.equal(result, `${this._directory}/less/bar.css`); + }); + }); + }); + + describe('.register', function() { + it('registers a custom resolver for a given extension', function() { + var stub = sinon.stub().returns('foo.foobar'); + cabinet.register('.foobar', stub); + + var path = cabinet({ + partial: './bar', + filename: 'js/amd/foo.foobar', + directory: 'js/amd/' + }); + + assert.ok(stub.called); + assert.equal(path, 'foo.foobar'); + }); + + it('allows does not break default resolvers', function() { + mock({ + stylus: { + 'foo.styl': '', + 'bar.styl': '' + } + }); + + var stub = sinon.stub().returns('foo'); + + cabinet.register('.foobar', stub); + + cabinet({ + partial: './bar', + filename: 'js/amd/foo.foobar', + directory: 'js/amd/' + }); + + var result = cabinet({ + partial: './bar', + filename: 'stylus/foo.styl', + directory: 'stylus/' + }); + + assert.ok(stub.called); + assert.ok(result); + + mock.restore(); + }); + + it('can be called multiple times', function() { + var stub = sinon.stub().returns('foo'); + var stub2 = sinon.stub().returns('foo'); + + cabinet.register('.foobar', stub); + cabinet.register('.barbar', stub2); + + cabinet({ + partial: './bar', + filename: 'js/amd/foo.foobar', + directory: 'js/amd/' + }); + + cabinet({ + partial: './bar', + filename: 'js/amd/foo.barbar', + directory: 'js/amd/' + }); + + assert.ok(stub.called); + assert.ok(stub2.called); + }); + + it('does not add redundant extensions to supportedFileExtensions', function() { + const stub = sinon.stub; + const newExt = '.foobar'; + + cabinet.register(newExt, stub); + cabinet.register(newExt, stub); + + const {supportedFileExtensions} = cabinet; + + assert.equal(supportedFileExtensions.indexOf(newExt), supportedFileExtensions.lastIndexOf(newExt)); + }); + }); + + describe('webpack', function() { + let directory; + + beforeEach(function() { + directory = path.resolve(__dirname, '../'); + }); + + function testResolution(partial, expected) { + const resolved = cabinet({ + partial, + filename: `${directory}/index.js`, + directory, + webpackConfig: `${directory}/webpack.config.js` + }); + + assert.equal(resolved, expected); + } + + it('resolves an aliased path', function() { + testResolution('R', `${directory}/node_modules/resolve/index.js`); + }); + + it('resolves a non-aliased path', function() { + testResolution('resolve', `${directory}/node_modules/resolve/index.js`); + }); + + it('resolves a relative path', function() { + testResolution('./test/ast', `${directory}/test/ast.js`); + }); + + it('resolves an absolute path from a file within a subdirectory', function() { + const resolved = cabinet({ + partial: 'R', + filename: `${directory}/test/ast.js`, + directory, + webpackConfig: `${directory}/webpack.config.js` + }); + + assert.equal(resolved, `${directory}/node_modules/resolve/index.js`); + }); + + it('resolves a path using resolve.root', function() { + const resolved = cabinet({ + partial: 'mod1', + filename: `${directory}/index.js`, + directory, + webpackConfig: `${directory}/webpack-root.config.js` + }); + + assert.equal(resolved, `${directory}/test/root1/mod1.js`); + }); + + it('resolves NPM module when using resolve.root', function() { + const resolved = cabinet({ + partial: 'resolve', + filename: `${directory}/index.js`, + directory, + webpackConfig: `${directory}/webpack-root.config.js` + }); + + assert.equal(resolved, `${directory}/node_modules/resolve/index.js`); + }); + + it('resolves NPM module when using resolve.modulesDirectories', function() { + const resolved = cabinet({ + partial: 'resolve', + filename: `${directory}/index.js`, + directory, + webpackConfig: `${directory}/webpack-root.config.js` + }); + + assert.equal(resolved, `${directory}/node_modules/resolve/index.js`); + }); + + it('resolves a path using resolve.modulesDirectories', function() { + const resolved = cabinet({ + partial: 'mod2', + filename: `${directory}/index.js`, + directory, + webpackConfig: `${directory}/webpack-root.config.js` + }); + + assert.equal(resolved, `${directory}/test/root2/mod2.js`); + }); + + it('resolves a path using webpack config that exports a function', function() { + const resolved = cabinet({ + partial: 'R', + filename: `${directory}/index.js`, + directory, + webpackConfig: `${directory}/webpack-env.config.js` + }); + + assert.equal(resolved, `${directory}/node_modules/resolve/index.js`); + }); + + it('resolves files with a .jsx extension', function() { + testResolution('./test/foo.jsx', `${directory}/test/foo.jsx`); + }); + + describe('when the partial contains a loader', function() { + it('still works', function() { + testResolution('hgn!resolve', `${directory}/node_modules/resolve/index.js`); + }); + }); + }); +}); diff --git a/src/dependency-builder/precinct/test/Gruntfile.js b/src/dependency-builder/precinct/test/Gruntfile.js new file mode 100644 index 0000000..e7ae806 --- /dev/null +++ b/src/dependency-builder/precinct/test/Gruntfile.js @@ -0,0 +1,23 @@ +module.exports = function(grunt) { + + grunt.initConfig({ + jshint: { + files: ['Gruntfile.js', 'src/**/*.js', 'test/**/*.js'], + options: { + globals: { + jQuery: true + } + } + }, + watch: { + files: ['<%= jshint.files %>'], + tasks: ['jshint'] + } + }); + + grunt.loadNpmTasks('grunt-contrib-jshint'); + grunt.loadNpmTasks('grunt-contrib-watch'); + + grunt.registerTask('default', ['jshint']); + +}; \ No newline at end of file diff --git a/src/dependency-builder/precinct/test/amd.js b/src/dependency-builder/precinct/test/amd.js new file mode 100644 index 0000000..ab7c738 --- /dev/null +++ b/src/dependency-builder/precinct/test/amd.js @@ -0,0 +1,6 @@ +define([ + './a', + './b' +], function(a, b) { + +}); diff --git a/src/dependency-builder/precinct/test/cjsExportLazy.js b/src/dependency-builder/precinct/test/cjsExportLazy.js new file mode 100644 index 0000000..e766f32 --- /dev/null +++ b/src/dependency-builder/precinct/test/cjsExportLazy.js @@ -0,0 +1,8 @@ +module.exports = function({ + // Just requiring any files that exist + amd = require('./amd'), + es6 = require('./es6').foo, + es7 = require('./es7'), +}) { + +} diff --git a/src/dependency-builder/precinct/test/cjsMixedImport.js b/src/dependency-builder/precinct/test/cjsMixedImport.js new file mode 100644 index 0000000..9cd824c --- /dev/null +++ b/src/dependency-builder/precinct/test/cjsMixedImport.js @@ -0,0 +1,2 @@ +var bar = require('./bar'); +import foo from './foo'; diff --git a/src/dependency-builder/precinct/test/commonjs.js b/src/dependency-builder/precinct/test/commonjs.js new file mode 100644 index 0000000..c98b798 --- /dev/null +++ b/src/dependency-builder/precinct/test/commonjs.js @@ -0,0 +1,2 @@ +var a = require('./a'), + b = require('./b'); diff --git a/src/dependency-builder/precinct/test/coreModules.js b/src/dependency-builder/precinct/test/coreModules.js new file mode 100644 index 0000000..acb18f6 --- /dev/null +++ b/src/dependency-builder/precinct/test/coreModules.js @@ -0,0 +1,3 @@ +var assert = require('assert'); +var path = require('path'); +var fs = require('fs'); \ No newline at end of file diff --git a/src/dependency-builder/precinct/test/es6.js b/src/dependency-builder/precinct/test/es6.js new file mode 100644 index 0000000..352043b --- /dev/null +++ b/src/dependency-builder/precinct/test/es6.js @@ -0,0 +1,3 @@ +import { square, diag } from 'lib'; +console.log(square(11)); // 121 +console.log(diag(4, 3)); // 5 \ No newline at end of file diff --git a/src/dependency-builder/precinct/test/es6MixedExportLazy.js b/src/dependency-builder/precinct/test/es6MixedExportLazy.js new file mode 100644 index 0000000..eafa7ac --- /dev/null +++ b/src/dependency-builder/precinct/test/es6MixedExportLazy.js @@ -0,0 +1,8 @@ +export default function({ + // Just requiring any files that exist + amd = require('./amd'), + es6 = require('./es6'), + es7 = require('./es7') +}) { + +} diff --git a/src/dependency-builder/precinct/test/es6MixedImport.js b/src/dependency-builder/precinct/test/es6MixedImport.js new file mode 100644 index 0000000..81f9d10 --- /dev/null +++ b/src/dependency-builder/precinct/test/es6MixedImport.js @@ -0,0 +1,2 @@ +import foo from './foo'; +var bar = require('./bar'); diff --git a/src/dependency-builder/precinct/test/es6NoImport.js b/src/dependency-builder/precinct/test/es6NoImport.js new file mode 100644 index 0000000..5eef441 --- /dev/null +++ b/src/dependency-builder/precinct/test/es6NoImport.js @@ -0,0 +1,7 @@ +export const sqrt = Math.sqrt; +export function square(x) { + return x * x; +} +export function diag(x, y) { + return sqrt(square(x) + square(y)); +} \ No newline at end of file diff --git a/src/dependency-builder/precinct/test/es6WithError.js b/src/dependency-builder/precinct/test/es6WithError.js new file mode 100644 index 0000000..8c8015d --- /dev/null +++ b/src/dependency-builder/precinct/test/es6WithError.js @@ -0,0 +1,3 @@ +import { square, diag } from 'lib' // error, semicolon +console.log(square(11)); // 121 +console.log(diag(4, 3); // 5, error, missing paren \ No newline at end of file diff --git a/src/dependency-builder/precinct/test/es7.js b/src/dependency-builder/precinct/test/es7.js new file mode 100644 index 0000000..8364fb9 --- /dev/null +++ b/src/dependency-builder/precinct/test/es7.js @@ -0,0 +1,2 @@ +import { square, diag } from 'lib'; +async function foo() {}; diff --git a/src/dependency-builder/precinct/test/exampleAST.js b/src/dependency-builder/precinct/test/exampleAST.js new file mode 100644 index 0000000..498f1d1 --- /dev/null +++ b/src/dependency-builder/precinct/test/exampleAST.js @@ -0,0 +1,26 @@ +module.exports = { + type: 'Program', + body: [{ + type: 'VariableDeclaration', + declarations: [{ + type: 'VariableDeclarator', + id: { + type: 'Identifier', + name: 'a' + }, + init: { + type: 'CallExpression', + callee: { + type: 'Identifier', + name: 'require' + }, + arguments: [{ + type: 'Literal', + value: './a', + raw: './a' + }] + } + }], + kind: 'var' + }] +}; diff --git a/src/dependency-builder/precinct/test/index.spec.js b/src/dependency-builder/precinct/test/index.spec.js new file mode 100644 index 0000000..d238acc --- /dev/null +++ b/src/dependency-builder/precinct/test/index.spec.js @@ -0,0 +1,296 @@ +var assert = require('assert'); +var fs = require('fs'); +var path = require('path'); +var rewire = require('rewire'); +var sinon = require('sinon'); +var ast = require('./exampleAST'); +var precinct = rewire('../'); + +function read(filename) { + return fs.readFileSync(path.join(__dirname, filename), 'utf8'); +} + +describe('node-precinct', function() { + it('accepts an AST', function() { + var deps = precinct(ast); + assert(deps.length === 1); + }); + + it('dangles off a given ast', function() { + var deps = precinct(ast); + assert.deepEqual(precinct.ast, ast); + }); + + it('dangles off the parsed ast from a .js file', function() { + precinct(read('amd.js')); + assert.ok(precinct.ast); + assert.notDeepEqual(precinct.ast, ast); + }); + + it('dangles off the parsed ast from a scss detective', function() { + precinct(read('styles.scss'), 'scss'); + assert.notDeepEqual(precinct.ast, {}); + }); + + it('dangles off the parsed ast from a sass detective', function() { + precinct(read('styles.sass'), 'sass'); + assert.notDeepEqual(precinct.ast, {}); + }); + + it('grabs dependencies of amd modules', function() { + var amd = precinct(read('amd.js')); + assert(amd.indexOf('./a') !== -1); + assert(amd.indexOf('./b') !== -1); + assert(amd.length === 2); + }); + + it('grabs dependencies of commonjs modules', function() { + var cjs = precinct(read('commonjs.js')); + assert(cjs.indexOf('./a') !== -1); + assert(cjs.indexOf('./b') !== -1); + assert(cjs.length === 2); + }); + + it('grabs dependencies of es6 modules', function() { + var cjs = precinct(read('es6.js')); + assert(cjs.indexOf('lib') !== -1); + assert(cjs.length === 1); + }); + + it('grabs dependencies of es6 modules with embedded jsx', function() { + var cjs = precinct(read('jsx.js')); + assert(cjs.indexOf('lib') !== -1); + assert(cjs.length === 1); + }); + + it('grabs dependencies of es6 modules with embedded es7', function() { + var cjs = precinct(read('es7.js')); + assert(cjs.indexOf('lib') !== -1); + assert(cjs.length === 1); + }); + + it('does not grabs dependencies of es6 modules with syntax errors', function() { + var cjs = precinct(read('es6WithError.js')); + assert(cjs.length === 0); + }); + + it('grabs dependencies of css files', function() { + var css = precinct(read('styles.css'), 'css'); + assert.deepEqual(css, ['foo.css', 'baz.css', 'bla.css', 'another.css']); + }); + + it('grabs dependencies of scss files', function() { + var scss = precinct(read('styles.scss'), 'scss'); + assert.deepEqual(scss, ['_foo', 'baz.scss']); + }); + + it('grabs dependencies of sass files', function() { + var sass = precinct(read('styles.sass'), 'sass'); + assert.deepEqual(sass, ['_foo']); + }); + + it('grabs dependencies of stylus files', function() { + var result = precinct(read('styles.styl'), 'stylus'); + var expected = ['mystyles', 'styles2.styl', 'styles3.styl', 'styles4']; + + assert.deepEqual(result, expected); + }); + + it('grabs dependencies of less files', function() { + var result = precinct(read('styles.less'), 'less'); + var expected = ['_foo', '_bar.css', 'baz.less']; + + assert.deepEqual(result, expected); + }); + + it('grabs dependencies of typescript files', function() { + var result = precinct(read('typescript.ts'), 'ts'); + var expected = ['fs', 'lib', './bar', './my-module.js', './ZipCodeValidator']; + + assert.deepEqual(result, expected); + }); + + it('does not grabs dependencies of typescript modules with syntax errors', function() { + var result = precinct(read('typescriptWithError.ts')); + assert(result.length === 0); + }); + + it('supports the object form of type configuration', function() { + var result = precinct(read('styles.styl'), {type: 'stylus'}); + var expected = ['mystyles', 'styles2.styl', 'styles3.styl', 'styles4']; + + assert.deepEqual(result, expected); + }); + + it('yields no dependencies for es6 modules with no imports', function() { + var cjs = precinct(read('es6NoImport.js')); + assert.equal(cjs.length, 0); + }); + + it('yields no dependencies for non-modules', function() { + var none = precinct(read('none.js')); + assert.equal(none.length, 0); + }); + + it('ignores unparsable .js files', function() { + var cjs = precinct(read('unparseable.js')); + + assert(cjs.indexOf('lib') < 0); + assert.equal(cjs.length, 0); + }); + + it('does not throw on unparsable .js files', function() { + assert.doesNotThrow(function() { + precinct(read('unparseable.js')); + }, SyntaxError); + }); + + it('does not blow up when parsing a gruntfile #2', function() { + assert.doesNotThrow(function() { + precinct(read('Gruntfile.js')); + }); + }); + + describe('paperwork', function() { + it('returns the dependencies for the given filepath', function() { + assert.ok(precinct.paperwork(__dirname + '/es6.js').length); + assert.ok(precinct.paperwork(__dirname + '/styles.scss').length); + assert.ok(precinct.paperwork(__dirname + '/typescript.ts').length); + assert.ok(precinct.paperwork(__dirname + '/styles.css').length); + }); + + it('throws if the file cannot be found', function() { + assert.throws(function() { + precinct.paperwork('foo'); + }); + }); + + it('filters out core modules if options.includeCore is false', function() { + var deps = precinct.paperwork(__dirname + '/coreModules.js', { + includeCore: false + }); + + assert(!deps.length); + }); + + it('does not filter out core modules by default', function() { + var deps = precinct.paperwork(__dirname + '/coreModules.js'); + assert(deps.length); + }); + + it('supports passing detective configuration', function() { + var stub = sinon.stub().returns([]); + var revert = precinct.__set__('detectiveAmd', stub); + var config = { + amd: { + skipLazyLoaded: true + } + }; + + var deps = precinct.paperwork(__dirname + '/amd.js', { + includeCore: false, + amd: config.amd + }); + + assert.deepEqual(stub.args[0][1], config.amd); + revert(); + }); + + describe('when given detective configuration', function() { + it('still does not filter out core module by default', function() { + var stub = sinon.stub().returns([]); + var revert = precinct.__set__('precinct', stub); + + var deps = precinct.paperwork(__dirname + '/amd.js', { + amd: { + skipLazyLoaded: true + } + }); + + assert.equal(stub.args[0][1].includeCore, true); + revert(); + }); + }); + }); + + describe('when given a configuration object', function() { + it('passes amd config to the amd detective', function() { + var stub = sinon.stub(); + var revert = precinct.__set__('detectiveAmd', stub); + var config = { + amd: { + skipLazyLoaded: true + } + }; + + precinct(read('amd.js'), config); + + assert.deepEqual(stub.args[0][1], config.amd); + revert(); + }); + + describe('that sets mixedImports for es6', function() { + describe('for a file identified as es6', function() { + it('returns both the commonjs and es6 dependencies', function() { + var deps = precinct(read('es6MixedImport.js'), { + es6: { + mixedImports: true + } + }); + + assert.equal(deps.length, 2); + }); + }); + + describe('for a file identified as cjs', function() { + it('returns both the commonjs and es6 dependencies', function() { + var deps = precinct(read('cjsMixedImport.js'), { + es6: { + mixedImports: true + } + }); + + assert.equal(deps.length, 2); + }); + }); + }); + }); + + describe('when lazy exported dependencies in CJS', function() { + it('grabs those lazy dependencies', function() { + var cjs = precinct(read('cjsExportLazy.js')); + + assert.equal(cjs[0], './amd'); + assert.equal(cjs[1], './es6'); + assert.equal(cjs[2], './es7'); + assert.equal(cjs.length, 3); + }); + }); + + describe('when given an es6 file', function() { + describe('that uses CJS imports for lazy dependencies', function() { + describe('and mixedImport mode is turned on', function() { + it('grabs the lazy imports', function() { + var es6 = precinct(read('es6MixedExportLazy.js'), { + es6: { + mixedImports: true + } + }); + + assert.equal(es6[0], './amd'); + assert.equal(es6[1], './es6'); + assert.equal(es6[2], './es7'); + assert.equal(es6.length, 3); + }); + }); + + describe('and mixedImport mode is turned off', function() { + it('does not grab any imports', function() { + var es6 = precinct(read('es6MixedExportLazy.js')); + + assert.equal(es6.length, 0); + }); + }); + }); + }); +}); diff --git a/src/dependency-builder/precinct/test/jsx.js b/src/dependency-builder/precinct/test/jsx.js new file mode 100644 index 0000000..adee58e --- /dev/null +++ b/src/dependency-builder/precinct/test/jsx.js @@ -0,0 +1,2 @@ +import { square, diag } from 'lib'; +const tmpl = ; diff --git a/src/dependency-builder/precinct/test/none.js b/src/dependency-builder/precinct/test/none.js new file mode 100644 index 0000000..aca862d --- /dev/null +++ b/src/dependency-builder/precinct/test/none.js @@ -0,0 +1 @@ +var a = new window.Foo(); diff --git a/src/dependency-builder/precinct/test/styles.css b/src/dependency-builder/precinct/test/styles.css new file mode 100644 index 0000000..f87c5d9 --- /dev/null +++ b/src/dependency-builder/precinct/test/styles.css @@ -0,0 +1,4 @@ +@import "foo.css"; +@import url("baz.css"); +@value a from 'bla.css'; +@value a, b as x from url(another.css); diff --git a/src/dependency-builder/precinct/test/styles.less b/src/dependency-builder/precinct/test/styles.less new file mode 100644 index 0000000..b029819 --- /dev/null +++ b/src/dependency-builder/precinct/test/styles.less @@ -0,0 +1,3 @@ +@import "_foo"; +@import "_bar.css"; +@import "baz.less"; diff --git a/src/dependency-builder/precinct/test/styles.sass b/src/dependency-builder/precinct/test/styles.sass new file mode 100644 index 0000000..6bbc7ae --- /dev/null +++ b/src/dependency-builder/precinct/test/styles.sass @@ -0,0 +1 @@ +@import _foo diff --git a/src/dependency-builder/precinct/test/styles.scss b/src/dependency-builder/precinct/test/styles.scss new file mode 100644 index 0000000..bba4449 --- /dev/null +++ b/src/dependency-builder/precinct/test/styles.scss @@ -0,0 +1,2 @@ +@import "_foo"; +@import "baz.scss"; diff --git a/src/dependency-builder/precinct/test/styles.styl b/src/dependency-builder/precinct/test/styles.styl new file mode 100644 index 0000000..6498aa3 --- /dev/null +++ b/src/dependency-builder/precinct/test/styles.styl @@ -0,0 +1,4 @@ +@import "mystyles" +@import "styles2.styl" +@require "styles3.styl"; +@require "styles4"; \ No newline at end of file diff --git a/src/dependency-builder/precinct/test/typescript.ts b/src/dependency-builder/precinct/test/typescript.ts new file mode 100644 index 0000000..3a7ac1f --- /dev/null +++ b/src/dependency-builder/precinct/test/typescript.ts @@ -0,0 +1,8 @@ +import * as fs from 'fs'; +import { square, diag } from 'lib'; +import foo from './bar'; +import "./my-module.js"; // Import a module for side-effects only +import zip = require("./ZipCodeValidator"); // needed when importing a module using `export =` syntax + +console.log(square(11)); // 121 +console.log(diag(4, 3)); // 5 diff --git a/src/dependency-builder/precinct/test/typescriptWithError.ts b/src/dependency-builder/precinct/test/typescriptWithError.ts new file mode 100644 index 0000000..a1db790 --- /dev/null +++ b/src/dependency-builder/precinct/test/typescriptWithError.ts @@ -0,0 +1,3 @@ +import { square, diag } from 'lib'; + +console.log(diag(4, 3); // error, missing bracket diff --git a/src/dependency-builder/precinct/test/unparseable.js b/src/dependency-builder/precinct/test/unparseable.js new file mode 100644 index 0000000..5ba19ae --- /dev/null +++ b/src/dependency-builder/precinct/test/unparseable.js @@ -0,0 +1,5 @@ +{ + "very invalid": "javascript", + "this", "is actually json", + "But" not even valid json. +} \ No newline at end of file