diff --git a/package.json b/package.json index 01a44cdbf..91ccff182 100644 --- a/package.json +++ b/package.json @@ -1,5 +1,6 @@ { "devDependencies": { + "babel-7-jest": "^21.3.2", "babel-eslint": "^8.0.1", "eslint": "^4.13.1", "eslint-config-standard": "^11.0.0-beta.0", @@ -25,7 +26,11 @@ "/dist/", "/xo-vmdk-to-vhd/" ], - "testRegex": "\\.spec\\.js$" + "testRegex": "\\.spec\\.js$", + "transform": { + "complex-matcher/.+\\.jsx?$": "babel-7-jest", + "\\.jsx?$": "babel-jest" + } }, "lint-staged": { "*.js": [ diff --git a/packages/complex-matcher/.babelrc.js b/packages/complex-matcher/.babelrc.js new file mode 100644 index 000000000..973b88535 --- /dev/null +++ b/packages/complex-matcher/.babelrc.js @@ -0,0 +1,27 @@ +const { NODE_ENV = 'development' } = process.env +const __PROD__ = NODE_ENV === 'production' +const __TEST__ = NODE_ENV === 'test' + +module.exports = { + comments: !__PROD__, + compact: __PROD__, + ignore: __TEST__ ? undefined : [ /\.spec\.js$/ ], + plugins: ['lodash'], + presets: [ + [ + '@babel/env', + { + debug: !__TEST__, + loose: true, + shippedProposals: true, + targets: __PROD__ + ? { + browsers: '>2%', + node: '4', + } + : { node: 'current' }, + useBuiltIns: 'usage', + }, + ], + ], +} diff --git a/packages/complex-matcher/.npmignore b/packages/complex-matcher/.npmignore new file mode 100644 index 000000000..e058b6bc1 --- /dev/null +++ b/packages/complex-matcher/.npmignore @@ -0,0 +1,24 @@ +/benchmark/ +/benchmarks/ +*.bench.js +*.bench.js.map + +/examples/ +example.js +example.js.map +*.example.js +*.example.js.map + +/fixture/ +/fixtures/ +*.fixture.js +*.fixture.js.map +*.fixtures.js +*.fixtures.js.map + +/test/ +/tests/ +*.spec.js +*.spec.js.map + +__snapshots__/ diff --git a/packages/complex-matcher/README.md b/packages/complex-matcher/README.md new file mode 100644 index 000000000..3680a8445 --- /dev/null +++ b/packages/complex-matcher/README.md @@ -0,0 +1,66 @@ +# complex-matcher [![Build Status](https://travis-ci.org/vatesfr/xen-orchestra.png?branch=master)](https://travis-ci.org/vatesfr/xen-orchestra) + +> ${pkg.description} + +## Install + +Installation of the [npm package](https://npmjs.org/package/complex-matcher): + +``` +> npm install --save complex-matcher +``` + +## Usage + +```js +import * as CM from 'complex-matcher' + +const characters = [ + { name: 'Catwoman', costumeColor: 'black' }, + { name: 'Superman', costumeColor: 'blue', hasCape: true }, + { name: 'Wonder Woman', costumeColor: 'blue' }, +] + +const predicate = CM.parse('costumeColor:blue hasCape?').createPredicate() + +characters.filter(predicate) +// [ +// { name: 'Superman', costumeColor: 'blue', hasCape: true }, +// ] + +new CM.String('foo').createPredicate() +``` + +## Development + +``` +# Install dependencies +> yarn + +# Run the tests +> yarn test + +# Continuously compile +> yarn dev + +# Continuously run the tests +> yarn dev-test + +# Build for production (automatically called by npm install) +> yarn build +``` + +## Contributions + +Contributions are *very* welcomed, either on the documentation or on +the code. + +You may: + +- report any [issue](https://github.com/vatesfr/xo-web/issues) + you've encountered; +- fork and create a pull request. + +## License + +ISC © [Vates SAS](https://vates.fr) diff --git a/packages/complex-matcher/package.json b/packages/complex-matcher/package.json new file mode 100644 index 000000000..b1b06d8bd --- /dev/null +++ b/packages/complex-matcher/package.json @@ -0,0 +1,45 @@ +{ + "name": "complex-matcher", + "version": "0.1.0", + "license": "ISC", + "description": "", + "keywords": [], + "homepage": "https://github.com/vatesfr/xen-orchestra/tree/master/packages/complex-matcher", + "bugs": "https://github.com/vatesfr/xo-web/issues", + "repository": { + "type": "git", + "url": "https://github.com/vatesfr/xen-orchestra.git" + }, + "author": { + "name": "Julien Fontanet", + "email": "julien.fontanet@isonoe.net" + }, + "preferGlobal": false, + "main": "dist/", + "bin": {}, + "files": [ + "dist/" + ], + "engines": { + "node": ">=4" + }, + "dependencies": { + "@babel/polyfill": "^7.0.0-beta.35", + "lodash": "^4.17.4" + }, + "devDependencies": { + "@babel/cli": "^7.0.0-beta.35", + "@babel/core": "^7.0.0-beta.35", + "@babel/preset-env": "^7.0.0-beta.35", + "babel-plugin-lodash": "^3.3.2", + "cross-env": "^5.1.1", + "rimraf": "^2.6.2" + }, + "scripts": { + "build": "cross-env NODE_ENV=production babel --source-maps --out-dir=dist/ src/", + "dev": "cross-env NODE_ENV=development babel --watch --source-maps --out-dir=dist/ src/", + "prebuild": "rimraf dist/", + "predev": "npm run prebuild", + "prepublishOnly": "npm run build" + } +} diff --git a/packages/complex-matcher/src/index.bench.js b/packages/complex-matcher/src/index.bench.js new file mode 100644 index 000000000..5c2dd8bf2 --- /dev/null +++ b/packages/complex-matcher/src/index.bench.js @@ -0,0 +1,12 @@ +import { parse } from './' +import { ast, pattern } from './index.fixtures' + +export default ({ benchmark }) => { + benchmark('parse', () => { + parse(pattern) + }) + + benchmark('toString', () => { + ast.toString() + }) +} diff --git a/packages/complex-matcher/src/index.fixtures.js b/packages/complex-matcher/src/index.fixtures.js new file mode 100644 index 000000000..a520e54ae --- /dev/null +++ b/packages/complex-matcher/src/index.fixtures.js @@ -0,0 +1,13 @@ +import * as CM from './' + +export const pattern = 'foo !"\\\\ \\"" name:|(wonderwoman batman) hasCape?' + +export const ast = new CM.And([ + new CM.String('foo'), + new CM.Not(new CM.String('\\ "')), + new CM.Property( + 'name', + new CM.Or([new CM.String('wonderwoman'), new CM.String('batman')]) + ), + new CM.TruthyProperty('hasCape'), +]) diff --git a/packages/complex-matcher/src/index.js b/packages/complex-matcher/src/index.js new file mode 100644 index 000000000..c8f0b90c2 --- /dev/null +++ b/packages/complex-matcher/src/index.js @@ -0,0 +1,429 @@ +import { isPlainObject, some } from 'lodash' + +// =================================================================== + +// Invoke a function and returns it result. +// All parameters are forwarded. +// +// Why using `invoke()`? +// - avoid tedious IIFE syntax +// - avoid declaring variables in the common scope +// - monkey-patching +// +// ```js +// const sum = invoke(1, 2, (a, b) => a + b) +// +// eventEmitter.emit = invoke(eventEmitter.emit, emit => function (event) { +// if (event === 'foo') { +// throw new Error('event foo is disabled') +// } +// +// return emit.apply(this, arguments) +// }) +// ``` +function invoke (fn) { + const n = arguments.length - 1 + if (!n) { + return fn() + } + + fn = arguments[n] + const args = new Array(n) + for (let i = 0; i < n; ++i) { + args[i] = arguments[i] + } + + return fn.apply(undefined, args) +} + +// =================================================================== + +const RAW_STRING_CHARS = invoke(() => { + const chars = { __proto__: null } + const add = (a, b = a) => { + let i = a.charCodeAt(0) + const j = b.charCodeAt(0) + while (i <= j) { + chars[String.fromCharCode(i++)] = true + } + } + add('$') + add('-') + add('.') + add('0', '9') + add('_') + add('A', 'Z') + add('a', 'z') + return chars +}) +const isRawString = string => { + const { length } = string + for (let i = 0; i < length; ++i) { + if (!(string[i] in RAW_STRING_CHARS)) { + return false + } + } + return true +} + +// ------------------------------------------------------------------- + +class Node { + createPredicate () { + return value => this.match(value) + } +} + +const formatTerms = terms => terms.map(term => term.toString(true)).join(' ') + +export class And extends Node { + constructor (children) { + super() + + if (children.length === 1) { + return children[0] + } + this.children = children + } + + match (value) { + return this.children.every(child => child.match(value)) + } + + toString (isNested) { + const terms = formatTerms(this.children) + return isNested ? `(${terms})` : terms + } +} + +export class Or extends Node { + constructor (children) { + super() + + if (children.length === 1) { + return children[0] + } + this.children = children + } + + match (value) { + return this.children.some(child => child.match(value)) + } + + toString () { + return `|(${formatTerms(this.children)})` + } +} + +export class Not extends Node { + constructor (child) { + super() + + this.child = child + } + + match (value) { + return !this.child.match(value) + } + + toString () { + return '!' + this.child.toString(true) + } +} + +export class Property extends Node { + constructor (name, child) { + super() + + this.name = name + this.child = child + } + + match (value) { + return value != null && this.child.match(value[this.name]) + } + + toString () { + return `${formatString(this.name)}:${this.child.toString(true)}` + } +} + +const escapeChar = char => '\\' + char +const formatString = value => isRawString(value) + ? value + : `"${value.replace(/\\|"/g, escapeChar)}"` + +export class StringNode extends Node { + constructor (value) { + super() + + this.lcValue = value.toLowerCase() + this.value = value + + // should not be enumerable for the tests + Object.defineProperty(this, 'match', { + value: this.match.bind(this), + }) + } + + match (value) { + if (typeof value === 'string') { + return value.toLowerCase().indexOf(this.lcValue) !== -1 + } + + if (Array.isArray(value) || isPlainObject(value)) { + return some(value, this.match) + } + + return false + } + + toString () { + return formatString(this.value) + } +} +export { StringNode as String } + +export class TruthyProperty extends Node { + constructor (name) { + super() + + this.name = name + } + + match (value) { + return value != null && !!value[this.name] + } + + toString () { + return formatString(this.name) + '?' + } +} + +// ------------------------------------------------------------------- + +// terms = term+ +// term = ws (and | or | not | property | truthyProperty | string) ws +// ws = ' '* +// *and = "(" terms ")" +// *or = "|" ws "(" terms ")" +// *not = "!" term +// *property = string ws ":" term +// *truthyProperty = string ws "?" +// *string = quotedString | rawString +// quotedString = "\"" ( /[^"\]/ | "\\\\" | "\\\"" )+ +// rawString = /[a-z0-9-_.]+/i +export const parse = invoke(() => { + let i + let n + let input + + // ----- + + const backtrace = parser => () => { + const pos = i + const node = parser() + if (node !== undefined) { + return node + } + i = pos + } + + // ----- + + const parseTerms = Node => { + let term = parseTerm() + if (!term) { + return + } + + const terms = [term] + while ((term = parseTerm())) { + terms.push(term) + } + return new Node(terms) + } + const parseTerm = () => { + parseWs() + + const child = + parseAnd() || + parseOr() || + parseNot() || + parseProperty() || + parseTruthyProperty() || + parseString() + if (child) { + parseWs() + return child + } + } + const parseWs = () => { + while (input[i] === ' ') { + ++i + } + + return true + } + const parseAnd = backtrace(() => { + let and + if (input[i++] === '(' && (and = parseTerm(And)) && input[i++] === ')') { + return and + } + }) + const parseOr = backtrace(() => { + let or + if ( + input[i++] === '|' && + parseWs() && + input[i++] === '(' && + (or = parseTerms(Or)) && + input[i++] === ')' + ) { + return or + } + }) + const parseNot = backtrace(() => { + let child + if (input[i++] === '!' && (child = parseTerm())) { + return new Not(child) + } + }) + const parseProperty = backtrace(() => { + let name, child + if ( + (name = parseString()) && + parseWs() && + input[i++] === ':' && + (child = parseTerm()) + ) { + return new Property(name.value, child) + } + }) + const parseString = () => { + let value + if ( + (value = parseQuotedString()) !== undefined || + (value = parseRawString()) !== undefined + ) { + return new StringNode(value) + } + } + const parseQuotedString = backtrace(() => { + if (input[i++] !== '"') { + return + } + + const value = [] + let char + while (i < n && (char = input[i++]) !== '"') { + if (char === '\\') { + char = input[i++] + } + value.push(char) + } + + return value.join('') + }) + const parseRawString = () => { + let value = '' + let c + while ((c = input[i]) && RAW_STRING_CHARS[c]) { + ++i + value += c + } + if (value.length) { + return value + } + } + const parseTruthyProperty = backtrace(() => { + let name + if ((name = parseString()) && parseWs() && input[i++] === '?') { + return new TruthyProperty(name.value) + } + }) + + return input_ => { + i = 0 + input = input_.split('') + n = input.length + + try { + return parseTerms(And) + } finally { + input = undefined + } + } +}) + +// ------------------------------------------------------------------- + +const _getPropertyClauseStrings = ({ child }) => { + if (child instanceof Or) { + const strings = [] + child.children.forEach(child => { + if (child instanceof StringNode) { + strings.push(child.value) + } + }) + return strings + } + + if (child instanceof StringNode) { + return [child.value] + } + + return [] +} + +// Find possible values for property clauses in a and clause. +export const getPropertyClausesStrings = node => { + if (!node) { + return {} + } + + if (node instanceof Property) { + return { + [node.name]: _getPropertyClauseStrings(node), + } + } + + if (node instanceof And) { + const strings = {} + node.children.forEach(node => { + if (node instanceof Property) { + const { name } = node + const values = strings[name] + if (values) { + values.push.apply(values, _getPropertyClauseStrings(node)) + } else { + strings[name] = _getPropertyClauseStrings(node) + } + } + }) + return strings + } + + return {} +} + +// ------------------------------------------------------------------- + +export const setPropertyClause = (node, name, child) => { + const property = child && new Property( + name, + typeof child === 'string' ? new StringNode(child) : child + ) + + if (node === undefined) { + return property + } + + const children = (node instanceof And ? node.children : [node]).filter(child => + !(child instanceof Property && child.name === name) + ) + if (property !== undefined) { + children.push(property) + } + return new And(children) +} diff --git a/packages/complex-matcher/src/index.spec.js b/packages/complex-matcher/src/index.spec.js new file mode 100644 index 000000000..e777d4fc6 --- /dev/null +++ b/packages/complex-matcher/src/index.spec.js @@ -0,0 +1,56 @@ +/* eslint-env jest */ + +import { + getPropertyClausesStrings, + parse, + setPropertyClause, +} from './' +import { ast, pattern } from './index.fixtures' + +it('getPropertyClausesStrings', () => { + const tmp = getPropertyClausesStrings(parse('foo bar:baz baz:|(foo bar)')) + expect(tmp).toEqual({ + bar: ['baz'], + baz: ['foo', 'bar'], + }) +}) + +it('parse', () => { + expect(parse(pattern)).toEqual(ast) +}) + +describe('setPropertyClause', () => { + it('creates a node if none passed', () => { + expect(setPropertyClause(undefined, 'foo', 'bar').toString()).toBe('foo:bar') + }) + + it('adds a property clause if there was none', () => { + expect( + setPropertyClause(parse('baz'), 'foo', 'bar').toString() + ).toBe('baz foo:bar') + }) + + it('replaces the property clause if there was one', () => { + expect( + setPropertyClause(parse('plip foo:baz plop'), 'foo', 'bar').toString() + ).toBe('plip plop foo:bar') + + expect( + setPropertyClause(parse('foo:|(baz plop)'), 'foo', 'bar').toString() + ).toBe('foo:bar') + }) + + it('removes the property clause if no chid is passed', () => { + expect( + setPropertyClause(parse('foo bar:baz qux'), 'bar', undefined).toString() + ).toBe('foo qux') + + expect( + setPropertyClause(parse('foo bar:baz qux'), 'baz', undefined).toString() + ).toBe('foo bar:baz qux') + }) +}) + +it('toString', () => { + expect(pattern).toBe(ast.toString()) +}) diff --git a/scripts/normalize-packages b/scripts/normalize-packages index c35e778ba..1eb349b6e 100755 --- a/scripts/normalize-packages +++ b/scripts/normalize-packages @@ -32,6 +32,7 @@ require('exec-promise')(() => deleteProperties(pkg, 'config', [ 'commitizen' ]) deleteProperties(pkg, 'devDependencies', [ + 'babel-7-jest', 'babel-eslint', 'commitizen', 'cz-conventional-changelog', @@ -68,7 +69,7 @@ require('exec-promise')(() => JSON.stringify(pkg, null, 2) + '\n' ), unlink(`${dir}/.editorconfig`), - unlink(`${dir}/.eslintrc`), + unlink(`${dir}/.eslintrc.js`), unlink(`${dir}/.gitignore`), unlink(`${dir}/.jshintrc`), unlink(`${dir}/.travis.yml`), diff --git a/yarn.lock b/yarn.lock index 59f944110..b4fe88f7d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,6 +2,21 @@ # yarn lockfile v1 +"@babel/cli@^7.0.0-beta.35": + version "7.0.0-beta.35" + resolved "https://registry.yarnpkg.com/@babel/cli/-/cli-7.0.0-beta.35.tgz#9e180810080f29daa917747e2f08fe1b903a7e46" + dependencies: + commander "^2.8.1" + convert-source-map "^1.1.0" + fs-readdir-recursive "^1.0.0" + glob "^7.0.0" + lodash "^4.2.0" + output-file-sync "^2.0.0" + slash "^1.0.0" + source-map "^0.5.0" + optionalDependencies: + chokidar "^1.6.1" + "@babel/code-frame@7.0.0-beta.31": version "7.0.0-beta.31" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.0.0-beta.31.tgz#473d021ecc573a2cce1c07d5b509d5215f46ba35" @@ -10,7 +25,7 @@ esutils "^2.0.2" js-tokens "^3.0.0" -"@babel/code-frame@^7.0.0-beta.35": +"@babel/code-frame@7.0.0-beta.35", "@babel/code-frame@^7.0.0-beta.35": version "7.0.0-beta.35" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.0.0-beta.35.tgz#04eeb6dca7efef8f65776a4c214157303b85ad51" dependencies: @@ -18,6 +33,71 @@ esutils "^2.0.2" js-tokens "^3.0.0" +"@babel/core@^7.0.0-beta.35": + version "7.0.0-beta.35" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.0.0-beta.35.tgz#69dc61d317c73177b91fdc4432619f997155b60f" + dependencies: + "@babel/code-frame" "7.0.0-beta.35" + "@babel/generator" "7.0.0-beta.35" + "@babel/helpers" "7.0.0-beta.35" + "@babel/template" "7.0.0-beta.35" + "@babel/traverse" "7.0.0-beta.35" + "@babel/types" "7.0.0-beta.35" + babylon "7.0.0-beta.35" + convert-source-map "^1.1.0" + debug "^3.0.1" + json5 "^0.5.0" + lodash "^4.2.0" + micromatch "^2.3.11" + resolve "^1.3.2" + source-map "^0.5.0" + +"@babel/generator@7.0.0-beta.35": + version "7.0.0-beta.35" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.0.0-beta.35.tgz#09798d7e714ef8a3cd6ac27afb140e21c2794cef" + dependencies: + "@babel/types" "7.0.0-beta.35" + jsesc "^2.5.1" + lodash "^4.2.0" + source-map "^0.5.0" + trim-right "^1.0.1" + +"@babel/helper-annotate-as-pure@7.0.0-beta.35": + version "7.0.0-beta.35" + resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.0.0-beta.35.tgz#d391e76ccb1a6b417007a2b774c688539e115fdb" + dependencies: + "@babel/types" "7.0.0-beta.35" + +"@babel/helper-builder-binary-assignment-operator-visitor@7.0.0-beta.35": + version "7.0.0-beta.35" + resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.0.0-beta.35.tgz#cc63f36ec86a7fa5bae5ec2a255c459414b4263c" + dependencies: + "@babel/helper-explode-assignable-expression" "7.0.0-beta.35" + "@babel/types" "7.0.0-beta.35" + +"@babel/helper-call-delegate@7.0.0-beta.35": + version "7.0.0-beta.35" + resolved "https://registry.yarnpkg.com/@babel/helper-call-delegate/-/helper-call-delegate-7.0.0-beta.35.tgz#4322fd23212ff2d1855792a69cb765ee711fffb6" + dependencies: + "@babel/helper-hoist-variables" "7.0.0-beta.35" + "@babel/traverse" "7.0.0-beta.35" + "@babel/types" "7.0.0-beta.35" + +"@babel/helper-define-map@7.0.0-beta.35": + version "7.0.0-beta.35" + resolved "https://registry.yarnpkg.com/@babel/helper-define-map/-/helper-define-map-7.0.0-beta.35.tgz#38dea093c57565dc50ac96ead46e355e12985ced" + dependencies: + "@babel/helper-function-name" "7.0.0-beta.35" + "@babel/types" "7.0.0-beta.35" + lodash "^4.2.0" + +"@babel/helper-explode-assignable-expression@7.0.0-beta.35": + version "7.0.0-beta.35" + resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.0.0-beta.35.tgz#f88536e506bf1df2d6ec4b975df8324aa37b4b08" + dependencies: + "@babel/traverse" "7.0.0-beta.35" + "@babel/types" "7.0.0-beta.35" + "@babel/helper-function-name@7.0.0-beta.31": version "7.0.0-beta.31" resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.0.0-beta.31.tgz#afe63ad799209989348b1109b44feb66aa245f57" @@ -27,12 +107,338 @@ "@babel/traverse" "7.0.0-beta.31" "@babel/types" "7.0.0-beta.31" +"@babel/helper-function-name@7.0.0-beta.35": + version "7.0.0-beta.35" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.0.0-beta.35.tgz#b2fc51a59fe95fcc56ee5e9db21c500606ea2fab" + dependencies: + "@babel/helper-get-function-arity" "7.0.0-beta.35" + "@babel/template" "7.0.0-beta.35" + "@babel/types" "7.0.0-beta.35" + "@babel/helper-get-function-arity@7.0.0-beta.31": version "7.0.0-beta.31" resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0-beta.31.tgz#1176d79252741218e0aec872ada07efb2b37a493" dependencies: "@babel/types" "7.0.0-beta.31" +"@babel/helper-get-function-arity@7.0.0-beta.35": + version "7.0.0-beta.35" + resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0-beta.35.tgz#7f3c86d6646527a03423d42cf0fd06a26718d7cb" + dependencies: + "@babel/types" "7.0.0-beta.35" + +"@babel/helper-hoist-variables@7.0.0-beta.35": + version "7.0.0-beta.35" + resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.0.0-beta.35.tgz#b4fcbafe5c18bc90c6cdad8969ba0dc6bb64e664" + dependencies: + "@babel/types" "7.0.0-beta.35" + +"@babel/helper-module-imports@7.0.0-beta.35": + version "7.0.0-beta.35" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.0.0-beta.35.tgz#308e350e731752cdb4d0f058df1d704925c64e0a" + dependencies: + "@babel/types" "7.0.0-beta.35" + lodash "^4.2.0" + +"@babel/helper-module-transforms@7.0.0-beta.35": + version "7.0.0-beta.35" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.0.0-beta.35.tgz#2219dfb9e470704235bbb3477ac63a946a2b3812" + dependencies: + "@babel/helper-module-imports" "7.0.0-beta.35" + "@babel/helper-simple-access" "7.0.0-beta.35" + "@babel/template" "7.0.0-beta.35" + "@babel/types" "7.0.0-beta.35" + lodash "^4.2.0" + +"@babel/helper-optimise-call-expression@7.0.0-beta.35": + version "7.0.0-beta.35" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.0.0-beta.35.tgz#3adc8c5347b4a8d4ef8b117d99535f6fa3b61a71" + dependencies: + "@babel/types" "7.0.0-beta.35" + +"@babel/helper-regex@7.0.0-beta.35": + version "7.0.0-beta.35" + resolved "https://registry.yarnpkg.com/@babel/helper-regex/-/helper-regex-7.0.0-beta.35.tgz#b3f33c8151cb7c1e3de9cc7a5402a5de57e74902" + dependencies: + lodash "^4.2.0" + +"@babel/helper-remap-async-to-generator@7.0.0-beta.35": + version "7.0.0-beta.35" + resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.0.0-beta.35.tgz#272aecf58ae20cd6d4582766fe106c6d77104e1c" + dependencies: + "@babel/helper-annotate-as-pure" "7.0.0-beta.35" + "@babel/helper-wrap-function" "7.0.0-beta.35" + "@babel/template" "7.0.0-beta.35" + "@babel/traverse" "7.0.0-beta.35" + "@babel/types" "7.0.0-beta.35" + +"@babel/helper-replace-supers@7.0.0-beta.35": + version "7.0.0-beta.35" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.0.0-beta.35.tgz#fb59070aba45002d09898c8dfb8f8ac05bde4d19" + dependencies: + "@babel/helper-optimise-call-expression" "7.0.0-beta.35" + "@babel/template" "7.0.0-beta.35" + "@babel/traverse" "7.0.0-beta.35" + "@babel/types" "7.0.0-beta.35" + +"@babel/helper-simple-access@7.0.0-beta.35": + version "7.0.0-beta.35" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.0.0-beta.35.tgz#1e7221daa67261f541d9125a4f7a1fc7badf884e" + dependencies: + "@babel/template" "7.0.0-beta.35" + "@babel/types" "7.0.0-beta.35" + lodash "^4.2.0" + +"@babel/helper-wrap-function@7.0.0-beta.35": + version "7.0.0-beta.35" + resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.0.0-beta.35.tgz#2fb82e91842e0bbdc67fc60babf156b6fa781239" + dependencies: + "@babel/helper-function-name" "7.0.0-beta.35" + "@babel/template" "7.0.0-beta.35" + "@babel/traverse" "7.0.0-beta.35" + "@babel/types" "7.0.0-beta.35" + +"@babel/helpers@7.0.0-beta.35": + version "7.0.0-beta.35" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.0.0-beta.35.tgz#8cde270b68c227dca8cb35cd30c6eb3e5a280c09" + dependencies: + "@babel/template" "7.0.0-beta.35" + "@babel/traverse" "7.0.0-beta.35" + "@babel/types" "7.0.0-beta.35" + +"@babel/plugin-check-constants@7.0.0-beta.35": + version "7.0.0-beta.35" + resolved "https://registry.yarnpkg.com/@babel/plugin-check-constants/-/plugin-check-constants-7.0.0-beta.35.tgz#18cca7d9fbba746171c879ced7c69defbdc8bc11" + +"@babel/plugin-proposal-async-generator-functions@7.0.0-beta.35": + version "7.0.0-beta.35" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.0.0-beta.35.tgz#7f55a538b0f347e13504c9301807a16b8b5b5cc9" + dependencies: + "@babel/helper-remap-async-to-generator" "7.0.0-beta.35" + "@babel/plugin-syntax-async-generators" "7.0.0-beta.35" + +"@babel/plugin-proposal-object-rest-spread@7.0.0-beta.35": + version "7.0.0-beta.35" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.0.0-beta.35.tgz#e5b4e4521bb847cd4931720b5f4472835b5e3c68" + dependencies: + "@babel/plugin-syntax-object-rest-spread" "7.0.0-beta.35" + +"@babel/plugin-proposal-optional-catch-binding@7.0.0-beta.35": + version "7.0.0-beta.35" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.0.0-beta.35.tgz#44d6e492243e442ab1a686c96ed851b55a459223" + dependencies: + "@babel/plugin-syntax-optional-catch-binding" "7.0.0-beta.35" + +"@babel/plugin-proposal-unicode-property-regex@7.0.0-beta.35": + version "7.0.0-beta.35" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.0.0-beta.35.tgz#687d134d5e3638f1ded6d334455d576368d73ee1" + dependencies: + "@babel/helper-regex" "7.0.0-beta.35" + regexpu-core "^4.1.3" + +"@babel/plugin-syntax-async-generators@7.0.0-beta.35": + version "7.0.0-beta.35" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.0.0-beta.35.tgz#ff672774420f1fa1cedc407ba0c33e8503339198" + +"@babel/plugin-syntax-object-rest-spread@7.0.0-beta.35": + version "7.0.0-beta.35" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.0.0-beta.35.tgz#da521551c5439fdd32025bd26299d99fd704df95" + +"@babel/plugin-syntax-optional-catch-binding@7.0.0-beta.35": + version "7.0.0-beta.35" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.0.0-beta.35.tgz#a2451f5dd30f858d31ec55ce12602f43d2cf5cdc" + +"@babel/plugin-transform-arrow-functions@7.0.0-beta.35": + version "7.0.0-beta.35" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.0.0-beta.35.tgz#c9764114c629bf1ef0037339b1b05267a5e4aab1" + +"@babel/plugin-transform-async-to-generator@7.0.0-beta.35": + version "7.0.0-beta.35" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.0.0-beta.35.tgz#fd83aa60c374f91f549f1ecea39a766702cb15f0" + dependencies: + "@babel/helper-module-imports" "7.0.0-beta.35" + "@babel/helper-remap-async-to-generator" "7.0.0-beta.35" + +"@babel/plugin-transform-block-scoped-functions@7.0.0-beta.35": + version "7.0.0-beta.35" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.0.0-beta.35.tgz#7bf54e90261fdf33b152b3a249ecf2ec6b649338" + +"@babel/plugin-transform-block-scoping@7.0.0-beta.35": + version "7.0.0-beta.35" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.0.0-beta.35.tgz#065a1bfebe60be2c1c433edfad20591df4ef76f5" + dependencies: + lodash "^4.2.0" + +"@babel/plugin-transform-classes@7.0.0-beta.35": + version "7.0.0-beta.35" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.0.0-beta.35.tgz#ae1367d9c41081528f87d5770f6b8c6ee7141b52" + dependencies: + "@babel/helper-annotate-as-pure" "7.0.0-beta.35" + "@babel/helper-define-map" "7.0.0-beta.35" + "@babel/helper-function-name" "7.0.0-beta.35" + "@babel/helper-optimise-call-expression" "7.0.0-beta.35" + "@babel/helper-replace-supers" "7.0.0-beta.35" + +"@babel/plugin-transform-computed-properties@7.0.0-beta.35": + version "7.0.0-beta.35" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.0.0-beta.35.tgz#2e42ac7d57935c725471e19a1a6127072f3bc2da" + +"@babel/plugin-transform-destructuring@7.0.0-beta.35": + version "7.0.0-beta.35" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.0.0-beta.35.tgz#b08d63ca71b54805735681175f0451c7587855b5" + +"@babel/plugin-transform-duplicate-keys@7.0.0-beta.35": + version "7.0.0-beta.35" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.0.0-beta.35.tgz#c0409a2d2d8a4718b0abea3a8fd136fdf3b4ff3e" + +"@babel/plugin-transform-exponentiation-operator@7.0.0-beta.35": + version "7.0.0-beta.35" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.0.0-beta.35.tgz#a5470fad798a7052596e19fefbb6f391b17ac6e8" + dependencies: + "@babel/helper-builder-binary-assignment-operator-visitor" "7.0.0-beta.35" + +"@babel/plugin-transform-for-of@7.0.0-beta.35": + version "7.0.0-beta.35" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.0.0-beta.35.tgz#50774c6c1cf68a38493ee76d34acb7b55470e05f" + +"@babel/plugin-transform-function-name@7.0.0-beta.35": + version "7.0.0-beta.35" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.0.0-beta.35.tgz#efad92ef7c63bc34b4f3379f319bcafdccce7b7f" + dependencies: + "@babel/helper-function-name" "7.0.0-beta.35" + +"@babel/plugin-transform-literals@7.0.0-beta.35": + version "7.0.0-beta.35" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.0.0-beta.35.tgz#c0634fc137702afd7ae77829a41be45c4fa530ca" + +"@babel/plugin-transform-modules-amd@7.0.0-beta.35": + version "7.0.0-beta.35" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.0.0-beta.35.tgz#3d26e48a481938983b9f067daf9b3458717419b7" + dependencies: + "@babel/helper-module-transforms" "7.0.0-beta.35" + +"@babel/plugin-transform-modules-commonjs@7.0.0-beta.35": + version "7.0.0-beta.35" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.0.0-beta.35.tgz#b5b85b47d4cef093ce974a55d5012532f0a2b182" + dependencies: + "@babel/helper-module-transforms" "7.0.0-beta.35" + "@babel/helper-simple-access" "7.0.0-beta.35" + +"@babel/plugin-transform-modules-systemjs@7.0.0-beta.35": + version "7.0.0-beta.35" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.0.0-beta.35.tgz#ef9704902423054fa6326f9d0596aa3a46e5be80" + dependencies: + "@babel/helper-hoist-variables" "7.0.0-beta.35" + +"@babel/plugin-transform-modules-umd@7.0.0-beta.35": + version "7.0.0-beta.35" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.0.0-beta.35.tgz#ca3fbd3f00752310a75c9a97f21f37c1df00c902" + dependencies: + "@babel/helper-module-transforms" "7.0.0-beta.35" + +"@babel/plugin-transform-new-target@7.0.0-beta.35": + version "7.0.0-beta.35" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.0.0-beta.35.tgz#457fd711ff6d554c9cd6fc9d5e139e0375739d17" + +"@babel/plugin-transform-object-super@7.0.0-beta.35": + version "7.0.0-beta.35" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.0.0-beta.35.tgz#768dd11a3d336a96b42fde9f2c4437c19ab548b4" + dependencies: + "@babel/helper-replace-supers" "7.0.0-beta.35" + +"@babel/plugin-transform-parameters@7.0.0-beta.35": + version "7.0.0-beta.35" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.0.0-beta.35.tgz#6c44edc8218df6afc635d65593bf391a0482993c" + dependencies: + "@babel/helper-call-delegate" "7.0.0-beta.35" + "@babel/helper-get-function-arity" "7.0.0-beta.35" + +"@babel/plugin-transform-regenerator@7.0.0-beta.35": + version "7.0.0-beta.35" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.0.0-beta.35.tgz#91d87172445d0238dde257e01de74c63fa92c818" + dependencies: + regenerator-transform "^0.12.2" + +"@babel/plugin-transform-shorthand-properties@7.0.0-beta.35": + version "7.0.0-beta.35" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.0.0-beta.35.tgz#20077ee7a82d5845d4ecf03e2d11aa13f6b6a4d4" + +"@babel/plugin-transform-spread@7.0.0-beta.35": + version "7.0.0-beta.35" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.0.0-beta.35.tgz#aa5c0fa12c01d23b8f02d367e66b49715d4b77a4" + +"@babel/plugin-transform-sticky-regex@7.0.0-beta.35": + version "7.0.0-beta.35" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.0.0-beta.35.tgz#ee70fed27bf78e407d2338519db09176cca73597" + dependencies: + "@babel/helper-regex" "7.0.0-beta.35" + +"@babel/plugin-transform-template-literals@7.0.0-beta.35": + version "7.0.0-beta.35" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.0.0-beta.35.tgz#fc27efe898e3716066d65742afae7d811eed8667" + dependencies: + "@babel/helper-annotate-as-pure" "7.0.0-beta.35" + +"@babel/plugin-transform-typeof-symbol@7.0.0-beta.35": + version "7.0.0-beta.35" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.0.0-beta.35.tgz#ab8a83cf44fa63556471622ae886a14187e118c2" + +"@babel/plugin-transform-unicode-regex@7.0.0-beta.35": + version "7.0.0-beta.35" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.0.0-beta.35.tgz#0cb1148921dbabfb819221754b9a54d5cf8fb443" + dependencies: + "@babel/helper-regex" "7.0.0-beta.35" + regexpu-core "^4.1.3" + +"@babel/polyfill@^7.0.0-beta.35": + version "7.0.0-beta.35" + resolved "https://registry.yarnpkg.com/@babel/polyfill/-/polyfill-7.0.0-beta.35.tgz#49d033c4fdfa54a3a11e8f87239530141650d47a" + dependencies: + core-js "^2.4.0" + regenerator-runtime "^0.11.1" + +"@babel/preset-env@^7.0.0-beta.35": + version "7.0.0-beta.35" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.0.0-beta.35.tgz#634431813b14ebe841f293fbf459a3ffa61d7ef6" + dependencies: + "@babel/plugin-check-constants" "7.0.0-beta.35" + "@babel/plugin-proposal-async-generator-functions" "7.0.0-beta.35" + "@babel/plugin-proposal-object-rest-spread" "7.0.0-beta.35" + "@babel/plugin-proposal-optional-catch-binding" "7.0.0-beta.35" + "@babel/plugin-proposal-unicode-property-regex" "7.0.0-beta.35" + "@babel/plugin-syntax-async-generators" "7.0.0-beta.35" + "@babel/plugin-syntax-object-rest-spread" "7.0.0-beta.35" + "@babel/plugin-syntax-optional-catch-binding" "7.0.0-beta.35" + "@babel/plugin-transform-arrow-functions" "7.0.0-beta.35" + "@babel/plugin-transform-async-to-generator" "7.0.0-beta.35" + "@babel/plugin-transform-block-scoped-functions" "7.0.0-beta.35" + "@babel/plugin-transform-block-scoping" "7.0.0-beta.35" + "@babel/plugin-transform-classes" "7.0.0-beta.35" + "@babel/plugin-transform-computed-properties" "7.0.0-beta.35" + "@babel/plugin-transform-destructuring" "7.0.0-beta.35" + "@babel/plugin-transform-duplicate-keys" "7.0.0-beta.35" + "@babel/plugin-transform-exponentiation-operator" "7.0.0-beta.35" + "@babel/plugin-transform-for-of" "7.0.0-beta.35" + "@babel/plugin-transform-function-name" "7.0.0-beta.35" + "@babel/plugin-transform-literals" "7.0.0-beta.35" + "@babel/plugin-transform-modules-amd" "7.0.0-beta.35" + "@babel/plugin-transform-modules-commonjs" "7.0.0-beta.35" + "@babel/plugin-transform-modules-systemjs" "7.0.0-beta.35" + "@babel/plugin-transform-modules-umd" "7.0.0-beta.35" + "@babel/plugin-transform-new-target" "7.0.0-beta.35" + "@babel/plugin-transform-object-super" "7.0.0-beta.35" + "@babel/plugin-transform-parameters" "7.0.0-beta.35" + "@babel/plugin-transform-regenerator" "7.0.0-beta.35" + "@babel/plugin-transform-shorthand-properties" "7.0.0-beta.35" + "@babel/plugin-transform-spread" "7.0.0-beta.35" + "@babel/plugin-transform-sticky-regex" "7.0.0-beta.35" + "@babel/plugin-transform-template-literals" "7.0.0-beta.35" + "@babel/plugin-transform-typeof-symbol" "7.0.0-beta.35" + "@babel/plugin-transform-unicode-regex" "7.0.0-beta.35" + browserslist "^2.4.0" + invariant "^2.2.2" + semver "^5.3.0" + "@babel/template@7.0.0-beta.31": version "7.0.0-beta.31" resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.0.0-beta.31.tgz#577bb29389f6c497c3e7d014617e7d6713f68bda" @@ -42,6 +448,15 @@ babylon "7.0.0-beta.31" lodash "^4.2.0" +"@babel/template@7.0.0-beta.35": + version "7.0.0-beta.35" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.0.0-beta.35.tgz#459230417f51c29401cf71162aeeff6cef2bcca7" + dependencies: + "@babel/code-frame" "7.0.0-beta.35" + "@babel/types" "7.0.0-beta.35" + babylon "7.0.0-beta.35" + lodash "^4.2.0" + "@babel/traverse@7.0.0-beta.31": version "7.0.0-beta.31" resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.0.0-beta.31.tgz#db399499ad74aefda014f0c10321ab255134b1df" @@ -55,6 +470,19 @@ invariant "^2.2.0" lodash "^4.2.0" +"@babel/traverse@7.0.0-beta.35": + version "7.0.0-beta.35" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.0.0-beta.35.tgz#c91819807b7ac256d2f6dd5aaa94d4c66e06bbc5" + dependencies: + "@babel/code-frame" "7.0.0-beta.35" + "@babel/helper-function-name" "7.0.0-beta.35" + "@babel/types" "7.0.0-beta.35" + babylon "7.0.0-beta.35" + debug "^3.0.1" + globals "^10.0.0" + invariant "^2.2.0" + lodash "^4.2.0" + "@babel/types@7.0.0-beta.31": version "7.0.0-beta.31" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.0.0-beta.31.tgz#42c9c86784f674c173fb21882ca9643334029de4" @@ -63,6 +491,14 @@ lodash "^4.2.0" to-fast-properties "^2.0.0" +"@babel/types@7.0.0-beta.35": + version "7.0.0-beta.35" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.0.0-beta.35.tgz#cf933a9a9a38484ca724b335b88d83726d5ab960" + dependencies: + esutils "^2.0.2" + lodash "^4.2.0" + to-fast-properties "^2.0.0" + "@marsaud/smb2-promise@^0.2.0": version "0.2.1" resolved "https://registry.yarnpkg.com/@marsaud/smb2-promise/-/smb2-promise-0.2.1.tgz#fee95f4baba6e4d930e8460d3377aa12560e0f0e" @@ -359,6 +795,13 @@ aws4@^1.2.1, aws4@^1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.6.0.tgz#83ef5ca860b2b32e4a0deedee8c771b9db57471e" +babel-7-jest@^21.3.2: + version "21.3.2" + resolved "https://registry.yarnpkg.com/babel-7-jest/-/babel-7-jest-21.3.2.tgz#bdc3d053094779f2c497d8f45bf2ec6d78a78bd8" + dependencies: + babel-plugin-istanbul "^4.1.5" + babel-preset-jest "^21.2.0" + babel-cli@^6.18.0, babel-cli@^6.24.1: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-cli/-/babel-cli-6.26.0.tgz#502ab54874d7db88ad00b887a06383ce03d002f1" @@ -748,6 +1191,10 @@ babel-plugin-istanbul@^4.1.5: istanbul-lib-instrument "^1.7.5" test-exclude "^4.1.1" +babel-plugin-jest-hoist@^21.2.0: + version "21.2.0" + resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-21.2.0.tgz#2cef637259bd4b628a6cace039de5fcd14dbb006" + babel-plugin-jest-hoist@^22.0.3: version "22.0.3" resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-22.0.3.tgz#62cde5fe962fd41ae89c119f481ca5cd7dd48bb4" @@ -1344,6 +1791,13 @@ babel-preset-flow@^7.0.0-beta.3: dependencies: babel-plugin-transform-flow-strip-types "7.0.0-beta.3" +babel-preset-jest@^21.2.0: + version "21.2.0" + resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-21.2.0.tgz#ff9d2bce08abd98e8a36d9a8a5189b9173b85638" + dependencies: + babel-plugin-jest-hoist "^21.2.0" + babel-plugin-syntax-object-rest-spread "^6.13.0" + babel-preset-jest@^22.0.3: version "22.0.3" resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-22.0.3.tgz#e2bb6f6b4a509d3ea0931f013db78c5a84856693" @@ -1458,6 +1912,10 @@ babylon@7.0.0-beta.31: version "7.0.0-beta.31" resolved "https://registry.yarnpkg.com/babylon/-/babylon-7.0.0-beta.31.tgz#7ec10f81e0e456fd0f855ad60fa30c2ac454283f" +babylon@7.0.0-beta.35: + version "7.0.0-beta.35" + resolved "https://registry.yarnpkg.com/babylon/-/babylon-7.0.0-beta.35.tgz#9f9e609ed50c28d4333f545b373a381b47e9e6ed" + babylon@^6.18.0: version "6.18.0" resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3" @@ -1911,7 +2369,7 @@ cron@^1.1.0, cron@^1.2.1: dependencies: moment-timezone "^0.5.x" -cross-env@^5.1.3: +cross-env@^5.1.1, cross-env@^5.1.3: version "5.1.3" resolved "https://registry.yarnpkg.com/cross-env/-/cross-env-5.1.3.tgz#f8ae18faac87692b0a8b4d2f7000d4ec3a85dfd7" dependencies: @@ -5108,7 +5566,7 @@ regenerator-runtime@^0.10.5: version "0.10.5" resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz#336c3efc1220adcedda2c9fab67b5a7955a33658" -regenerator-runtime@^0.11.0: +regenerator-runtime@^0.11.0, regenerator-runtime@^0.11.1: version "0.11.1" resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9" @@ -5127,6 +5585,12 @@ regenerator-transform@^0.11.0: babel-types "7.0.0-beta.3" private "^0.1.6" +regenerator-transform@^0.12.2: + version "0.12.2" + resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.12.2.tgz#55c038e9203086b445c67fcd77422eb53a4c406b" + dependencies: + private "^0.1.6" + regex-cache@^0.4.2: version "0.4.4" resolved "https://registry.yarnpkg.com/regex-cache/-/regex-cache-0.4.4.tgz#75bdc58a2a1496cec48a12835bc54c8d562336dd"