From 1c1f113bc41ca623a6d4118a58c0156b0ef92105 Mon Sep 17 00:00:00 2001 From: Jacob Parker Date: Fri, 30 Jun 2017 08:34:09 +0100 Subject: [PATCH 01/83] Update flex.js --- src/transforms/flex.js | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/transforms/flex.js b/src/transforms/flex.js index 6458870..5277f87 100644 --- a/src/transforms/flex.js +++ b/src/transforms/flex.js @@ -6,6 +6,8 @@ const defaultFlexGrow = 1; const defaultFlexShrink = 1; const defaultFlexBasis = 0; +const FLEX_BASIS_AUTO = {}; // Used for reference equality + module.exports = (tokenStream) => { let flexGrow; let flexShrink; @@ -14,8 +16,7 @@ module.exports = (tokenStream) => { if (tokenStream.matches(NONE)) { tokenStream.expectEmpty(); return { $merge: { flexGrow: 0, flexShrink: 0 } }; - } else if (tokenStream.matches(AUTO)) { - tokenStream.expectEmpty(); + } else if (tokenStream.matches(AUTO) && !tokenStream.lookAhead().hasTokens()) { return { $merge: { flexGrow: 1, flexShrink: 1 } }; } @@ -32,6 +33,8 @@ module.exports = (tokenStream) => { } } else if (flexBasis === undefined && tokenStream.matches(LENGTH)) { flexBasis = tokenStream.lastValue; + } else if (flexBasis === undefined && tokenStream.matches(AUTO)) { + flexBasis = FLEX_BASIS_AUTO; } else { tokenStream.throw(); } @@ -45,5 +48,7 @@ module.exports = (tokenStream) => { if (flexShrink === undefined) flexShrink = defaultFlexShrink; if (flexBasis === undefined) flexBasis = defaultFlexBasis; - return { $merge: { flexGrow, flexShrink, flexBasis } }; + return flexBasis !== FLEX_BASIS_AUTO + ? { $merge: { flexGrow, flexShrink, flexBasis } } + : { $merge: { flexGrow, flexShrink } }; }; From 014417ac57c04ad37897614d1e17f16d71ba7a79 Mon Sep 17 00:00:00 2001 From: Jacob Parker Date: Tue, 11 Jul 2017 21:42:12 +0100 Subject: [PATCH 02/83] Implement auto keyword for flex including in shorthand for flex-basis --- src/TokenStream.js | 26 +++++++++++++++++--------- src/index.test.js | 16 ++++++++++++++++ src/transforms/flex.js | 4 ++-- 3 files changed, 35 insertions(+), 11 deletions(-) diff --git a/src/TokenStream.js b/src/TokenStream.js index 3650f2b..2e712e2 100644 --- a/src/TokenStream.js +++ b/src/TokenStream.js @@ -1,3 +1,4 @@ +const SYMBOL_BASE_MATCH = 'SYMBOL_BASE_MATCH'; const SYMBOL_MATCH = 'SYMBOL_MATCH'; module.exports = class TokenStream { @@ -16,11 +17,11 @@ module.exports = class TokenStream { return this.nodes.length > 0; } - lookahead() { + lookAhead() { return new TokenStream(this.nodes.slice(1), this.parent); } - [SYMBOL_MATCH](...tokenDescriptors) { + [SYMBOL_BASE_MATCH](...tokenDescriptors) { const node = this.node; if (!node) return null; @@ -28,18 +29,25 @@ module.exports = class TokenStream { for (let i = 0; i < tokenDescriptors.length; i += 1) { const tokenDescriptor = tokenDescriptors[i]; const value = tokenDescriptor(node); - - if (value !== null) { - this.nodes = this.nodes.slice(1); - this.lastFunction = null; - this.lastValue = value; - return value; - } + if (value !== null) return value; } return null; } + [SYMBOL_MATCH](...tokenDescriptors) { + const value = this[SYMBOL_BASE_MATCH](...tokenDescriptors); + if (value === null) return null; + this.nodes = this.nodes.slice(1); + this.lastFunction = null; + this.lastValue = value; + return value; + } + + test(...tokenDescriptors) { + return this[SYMBOL_BASE_MATCH](...tokenDescriptors) !== null; + } + matches(...tokenDescriptors) { return this[SYMBOL_MATCH](...tokenDescriptors) !== null; } diff --git a/src/index.test.js b/src/index.test.js index 436dd8d..7e047d4 100644 --- a/src/index.test.js +++ b/src/index.test.js @@ -261,6 +261,22 @@ it('transforms flex shorthand with flex-grow/shrink taking priority over basis', ['flex', '0 1 0'], ], { flexGrow: 0, flexShrink: 1, flexBasis: 0 })); +it('transforms flex shorthand with flex-basis set to auto', () => runTest([ + ['flex', '0 1 auto'], +], { flexGrow: 0, flexShrink: 1 })); + +it('transforms flex shorthand with flex-basis set to auto appearing first', () => runTest([ + ['flex', 'auto 0 1'], +], { flexGrow: 0, flexShrink: 1 })); + +it('transforms flex auto keyword', () => runTest([ + ['flex', 'auto'], +], { flexGrow: 1, flexShrink: 1 })); + +it('transforms flex none keyword', () => runTest([ + ['flex', 'none'], +], { flexGrow: 0, flexShrink: 0 })); + it('transforms flexFlow shorthand with two values', () => runTest([ ['flex-flow', 'column wrap'], ], { flexDirection: 'column', flexWrap: 'wrap' })); diff --git a/src/transforms/flex.js b/src/transforms/flex.js index 5277f87..b76fdf8 100644 --- a/src/transforms/flex.js +++ b/src/transforms/flex.js @@ -16,7 +16,7 @@ module.exports = (tokenStream) => { if (tokenStream.matches(NONE)) { tokenStream.expectEmpty(); return { $merge: { flexGrow: 0, flexShrink: 0 } }; - } else if (tokenStream.matches(AUTO) && !tokenStream.lookAhead().hasTokens()) { + } else if (tokenStream.test(AUTO) && !tokenStream.lookAhead().hasTokens()) { return { $merge: { flexGrow: 1, flexShrink: 1 } }; } @@ -27,7 +27,7 @@ module.exports = (tokenStream) => { if (flexGrow === undefined && tokenStream.matches(NUMBER)) { flexGrow = tokenStream.lastValue; - if (tokenStream.lookahead().matches(NUMBER)) { + if (tokenStream.lookAhead().matches(NUMBER)) { tokenStream.expect(SPACE); flexShrink = tokenStream.expect(NUMBER); } From 8df00cd3f9479b1c510fe3a6363e2ea2b46d59d3 Mon Sep 17 00:00:00 2001 From: Jacob Parker Date: Sun, 27 Aug 2017 11:31:24 +0100 Subject: [PATCH 03/83] Implement support for box-shadow shorthand --- README.md | 2 ++ src/TokenStream.js | 4 +-- src/index.test.js | 42 +++++++++++++++++++++++++++++++ src/transforms/boxShadow.js | 50 +++++++++++++++++++++++++++++++++++++ src/transforms/index.js | 2 ++ 5 files changed, 98 insertions(+), 2 deletions(-) create mode 100644 src/transforms/boxShadow.js diff --git a/README.md b/README.md index 22c70c4..32de7df 100644 --- a/README.md +++ b/README.md @@ -63,6 +63,8 @@ margin: 5px 7px 2px; Shorthands will only accept values that are supported in React, so `background` will only accept a colour, `backgroundColor` +There is also support for the `box-shadow` shorthand, and this converts into `shadow-` properties. Note that these only work on iOS. + #### Shorthand Notes `border{Top,Right,Bottom,Left}` shorthands are not supported, because `borderStyle` cannot be applied to individual border sides. diff --git a/src/TokenStream.js b/src/TokenStream.js index 2e712e2..b827360 100644 --- a/src/TokenStream.js +++ b/src/TokenStream.js @@ -58,7 +58,7 @@ module.exports = class TokenStream { return this.throw(); } - matchFunction() { + matchesFunction() { const node = this.node; if (node.type !== 'function') return null; const value = new TokenStream(node.nodes, node); @@ -69,7 +69,7 @@ module.exports = class TokenStream { } expectFunction() { - const value = this.matchFunction(); + const value = this.matchesFunction(); if (value !== null) return value; return this.throw(); } diff --git a/src/index.test.js b/src/index.test.js index 7e047d4..c9f95a6 100644 --- a/src/index.test.js +++ b/src/index.test.js @@ -442,6 +442,48 @@ it('does not transform invalid flex', () => { expect(() => transformCss([['flex', '1 2px 3']])).toThrow(); }); +it('transforms box-shadow into shadow- properties', () => runTest([ + ['box-shadow', '10px 20px 30px red'], +], { + shadowOffset: { width: 10, height: 20 }, + shadowRadius: 30, + shadowColor: 'red', +})); + +it('transforms box-shadow without blur-radius', () => runTest([ + ['box-shadow', '10px 20px red'], +], { + shadowOffset: { width: 10, height: 20 }, + shadowRadius: 0, + shadowColor: 'red', +})); + +it('transforms box-shadow without color', () => runTest([ + ['box-shadow', '10px 20px red'], +], { + shadowOffset: { width: 10, height: 20 }, + shadowRadius: 0, + shadowColor: 'red', +})); + +it('transforms box-shadow without blur-radius, color', () => runTest([ + ['box-shadow', '10px 20px'], +], { + shadowOffset: { width: 10, height: 20 }, + shadowRadius: 0, + shadowColor: 'black', +})); + +it('transforms box-shadow enforces offset to be present', () => { + expect(() => transformCss([['box-shadow', 'red']])) + .toThrow('Failed to parse declaration "boxShadow: red"'); +}); + +it('transforms box-shadow and enforces offset-y if offset-x present', () => { + expect(() => transformCss([['box-shadow', '10px']])) + .toThrow('Failed to parse declaration "boxShadow: 10px"'); +}); + it('allows blacklisting shorthands', () => { const actualStyles = transformCss([['border-radius', '50']], ['borderRadius']); expect(actualStyles).toEqual({ borderRadius: 50 }); diff --git a/src/transforms/boxShadow.js b/src/transforms/boxShadow.js new file mode 100644 index 0000000..c9930bd --- /dev/null +++ b/src/transforms/boxShadow.js @@ -0,0 +1,50 @@ +const { tokens } = require('../tokenTypes'); + +const { NONE, SPACE, WORD, LENGTH } = tokens; + +module.exports = (tokenStream) => { + let offsetX; + let offsetY; + let blurRadius; + let color; + + if (tokenStream.matches(NONE)) { + tokenStream.expectEmpty(); + return { + $merge: { shadowOffset: { width: 0, height: 0 }, shadowRadius: 0, shadowColor: 'black' }, + }; + } + + let didParseFirst = false; + while (tokenStream.hasTokens()) { + if (didParseFirst) tokenStream.expect(SPACE); + + if (offsetX === undefined && tokenStream.matches(LENGTH)) { + offsetX = tokenStream.lastValue; + tokenStream.expect(SPACE); + offsetY = tokenStream.expect(LENGTH); + + if (tokenStream.lookAhead().matches(LENGTH)) { + tokenStream.expect(SPACE); + blurRadius = tokenStream.expect(LENGTH); + } + } else if (color === undefined && ( + tokenStream.matchesFunction() || tokenStream.matches(WORD) + )) { + color = String(tokenStream.lastValue); + } else { + tokenStream.throw(); + } + + didParseFirst = true; + } + + if (offsetX === undefined) tokenStream.throw(); + + const $merge = { + shadowOffset: { width: offsetX, height: offsetY }, + shadowRadius: blurRadius !== undefined ? blurRadius : 0, + shadowColor: color !== undefined ? color : 'black', + }; + return { $merge }; +}; diff --git a/src/transforms/index.js b/src/transforms/index.js index 64c3667..960e229 100644 --- a/src/transforms/index.js +++ b/src/transforms/index.js @@ -1,4 +1,5 @@ const { regExpToken, tokens } = require('../tokenTypes'); +const boxShadow = require('./boxShadow'); const flex = require('./flex'); const font = require('./font'); const fontFamily = require('./fontFamily'); @@ -56,6 +57,7 @@ module.exports = { borderColor, borderRadius, borderWidth, + boxShadow, flex, flexFlow, font, From 4f89d5f73e7959392ebba7d37d18a7de1cf00cc1 Mon Sep 17 00:00:00 2001 From: Bruno Lemos Date: Sat, 11 Nov 2017 02:34:44 -0200 Subject: [PATCH 04/83] Handle null and undefined values --- src/index.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/index.js b/src/index.js index 3f25730..330bd84 100644 --- a/src/index.js +++ b/src/index.js @@ -12,6 +12,9 @@ const boolRe = /^true|false$/i; export const transformRawValue = (input) => { const value = input.trim(); + if (value === 'null') return null + if (value === 'undefined') return undefined + const numberMatch = value.match(numberOrLengthRe); if (numberMatch !== null) return Number(numberMatch[1]); From 38987921c156fec503db2265643767cb11136ab0 Mon Sep 17 00:00:00 2001 From: Bruno Lemos Date: Sat, 11 Nov 2017 03:32:49 -0200 Subject: [PATCH 05/83] Point to src folder while not on npm --- .babelrc | 1 - package.json | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) delete mode 100644 .babelrc diff --git a/.babelrc b/.babelrc deleted file mode 100644 index 9d8d516..0000000 --- a/.babelrc +++ /dev/null @@ -1 +0,0 @@ -{ "presets": ["es2015"] } diff --git a/package.json b/package.json index 5273050..99e170a 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "css-to-react-native", "version": "2.0.4", "description": "Convert CSS text to a React Native stylesheet object", - "main": "dist/index.js", + "main": "src/index.js", "scripts": { "build": "babel src --ignore test.js --out-dir dist", "test": "jest", From fea61dbcdb4fd65a76e540bc84bb162b9456164a Mon Sep 17 00:00:00 2001 From: Bruno Lemos Date: Sat, 11 Nov 2017 03:33:47 -0200 Subject: [PATCH 06/83] Revert "Point to src folder while not on npm" This reverts commit 38987921c156fec503db2265643767cb11136ab0. --- .babelrc | 1 + package.json | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) create mode 100644 .babelrc diff --git a/.babelrc b/.babelrc new file mode 100644 index 0000000..9d8d516 --- /dev/null +++ b/.babelrc @@ -0,0 +1 @@ +{ "presets": ["es2015"] } diff --git a/package.json b/package.json index 99e170a..5273050 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "css-to-react-native", "version": "2.0.4", "description": "Convert CSS text to a React Native stylesheet object", - "main": "src/index.js", + "main": "dist/index.js", "scripts": { "build": "babel src --ignore test.js --out-dir dist", "test": "jest", From 82a5b32c19d041a0134d3417bae7a10763b39d9f Mon Sep 17 00:00:00 2001 From: Jacob Parker Date: Mon, 13 Nov 2017 08:55:36 +0000 Subject: [PATCH 07/83] Revert "Handle null and undefined values" This reverts commit 4f89d5f73e7959392ebba7d37d18a7de1cf00cc1. --- src/index.js | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/index.js b/src/index.js index 330bd84..3f25730 100644 --- a/src/index.js +++ b/src/index.js @@ -12,9 +12,6 @@ const boolRe = /^true|false$/i; export const transformRawValue = (input) => { const value = input.trim(); - if (value === 'null') return null - if (value === 'undefined') return undefined - const numberMatch = value.match(numberOrLengthRe); if (numberMatch !== null) return Number(numberMatch[1]); From d5eee81d2d4859c55676114590766973f6bc8164 Mon Sep 17 00:00:00 2001 From: Simon Vocella Date: Sat, 18 Nov 2017 17:10:15 +0100 Subject: [PATCH 08/83] Add .travis.yml for CI --- .travis.yml | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 .travis.yml diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000..9ca1d79 --- /dev/null +++ b/.travis.yml @@ -0,0 +1,20 @@ + +language: node_js +dist: trusty +node_js: + - 6 + - 8 +script: + - node --version + - yarn --version + - yarn run danger run -- --verbose + - yarn run flow + - yarn run lint && yarn run typescript && yarn run tslint && yarn run test +notifications: + email: + on_failure: change +cache: + yarn: true + bundler: true + directories: + - node_modules From 9928b30925fc9b36ac7ecee0ac038aa4ef4d2e59 Mon Sep 17 00:00:00 2001 From: Simon Vocella Date: Sat, 18 Nov 2017 17:15:15 +0100 Subject: [PATCH 09/83] Update .travis.yml --- .travis.yml | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/.travis.yml b/.travis.yml index 9ca1d79..03c7111 100644 --- a/.travis.yml +++ b/.travis.yml @@ -7,9 +7,7 @@ node_js: script: - node --version - yarn --version - - yarn run danger run -- --verbose - - yarn run flow - - yarn run lint && yarn run typescript && yarn run tslint && yarn run test + - yarn run test notifications: email: on_failure: change From ac06fd61e727289feffa605dc5ddbf09281a5aea Mon Sep 17 00:00:00 2001 From: Bruno Lemos Date: Mon, 13 Nov 2017 19:52:08 -0200 Subject: [PATCH 10/83] Handle null and undefined values `transformRawValue` expects a string as input So when it receives a number, for example, it's transforming '1' to 1 But null and undefined are also valid values on react native styles (e.g. `width: null` is used sometimes) Currently if we pass `transformRawValue('width', null)` it will crash and if we pass `transformRawValue('width', 'null')` it will return `{ width: 'null' }` which is not a valid property. --- src/index.js | 8 ++++++++ src/index.test.js | 18 +++++++++++++++++- 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/src/index.js b/src/index.js index 3f25730..f42816e 100644 --- a/src/index.js +++ b/src/index.js @@ -7,6 +7,8 @@ const TokenStream = require('./TokenStream'); // Note if this is wrong, you'll need to change tokenTypes.js too const numberOrLengthRe = /^([+-]?(?:\d*\.)?\d+(?:[Ee][+-]?\d+)?)(?:px)?$/i; const boolRe = /^true|false$/i; +const nullRe = /^null$/i; +const undefinedRe = /^undefined$/i; // Undocumented export export const transformRawValue = (input) => { @@ -18,6 +20,12 @@ export const transformRawValue = (input) => { const boolMatch = input.match(boolRe); if (boolMatch !== null) return boolMatch[0].toLowerCase() === 'true'; + const nullMatch = input.match(nullRe); + if (nullMatch !== null) return null; + + const undefinedMatch = input.match(undefinedRe); + if (undefinedMatch !== null) return undefined; + return value; }; diff --git a/src/index.test.js b/src/index.test.js index c9f95a6..9fe6434 100644 --- a/src/index.test.js +++ b/src/index.test.js @@ -17,7 +17,7 @@ it('allows pixels in unspecialized transform', () => runTest([ ['top', '0px'], ], { top: 0 })); -it('allows boolean values values', () => runTest([ +it('allows boolean values', () => runTest([ ['boolTrue1', 'true'], ['boolTrue2', 'TRUE'], ['boolFalse1', 'false'], @@ -29,6 +29,22 @@ it('allows boolean values values', () => runTest([ boolFalse2: false, })); +it('allows null values', () => runTest([ + ['null1', 'null'], + ['null2', 'NULL'], +], { + null1: null, + null2: null, +})); + +it('allows undefined values', () => runTest([ + ['undefined1', 'undefined'], + ['undefined2', 'UNDEFINED'], +], { + undefined1: undefined, + undefined2: undefined, +})); + it('allows percent in unspecialized transform', () => runTest([ ['top', '0%'], ], { top: '0%' })); From d58a100c4058285e34b2cb7ea9445d77e4ca19e8 Mon Sep 17 00:00:00 2001 From: wtgtybhertgeghgtwtg Date: Fri, 26 Jan 2018 18:48:27 -0700 Subject: [PATCH 11/83] Use `files` field in `package.json`. --- .npmignore | 2 -- package.json | 1 + 2 files changed, 1 insertion(+), 2 deletions(-) delete mode 100644 .npmignore diff --git a/.npmignore b/.npmignore deleted file mode 100644 index b670b70..0000000 --- a/.npmignore +++ /dev/null @@ -1,2 +0,0 @@ -/node_modules -.babelrc diff --git a/package.json b/package.json index 5273050..9abf211 100644 --- a/package.json +++ b/package.json @@ -9,6 +9,7 @@ "test:watch": "jest --watch", "prepublish": "npm run build" }, + "files": ["dist", "src"], "repository": { "type": "git", "url": "git+https://github.com/styled-components/css-to-react-native.git" From f68806e8ca0d73c2e6ee6a2b51eac284d3e63730 Mon Sep 17 00:00:00 2001 From: Jacob Parker Date: Sat, 3 Feb 2018 10:20:48 +0000 Subject: [PATCH 12/83] v2.1.0 --- package.json | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 9abf211..eb71ea7 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "css-to-react-native", - "version": "2.0.4", + "version": "2.1.0", "description": "Convert CSS text to a React Native stylesheet object", "main": "dist/index.js", "scripts": { @@ -9,7 +9,10 @@ "test:watch": "jest --watch", "prepublish": "npm run build" }, - "files": ["dist", "src"], + "files": [ + "dist", + "src" + ], "repository": { "type": "git", "url": "git+https://github.com/styled-components/css-to-react-native.git" From 1ee00116a3b03e056beb61439a4139a8eeee3205 Mon Sep 17 00:00:00 2001 From: krister Date: Sat, 3 Feb 2018 23:18:44 +0200 Subject: [PATCH 13/83] box-shadow transform: fix rgb(a) and hsl(a) color values being transformed to null --- src/index.test.js | 38 ++++++++++++++++++++++++++++++++++--- src/transforms/boxShadow.js | 8 +++----- 2 files changed, 38 insertions(+), 8 deletions(-) diff --git a/src/index.test.js b/src/index.test.js index 9fe6434..007460f 100644 --- a/src/index.test.js +++ b/src/index.test.js @@ -475,11 +475,11 @@ it('transforms box-shadow without blur-radius', () => runTest([ })); it('transforms box-shadow without color', () => runTest([ - ['box-shadow', '10px 20px red'], + ['box-shadow', '10px 20px 30px'], ], { shadowOffset: { width: 10, height: 20 }, - shadowRadius: 0, - shadowColor: 'red', + shadowRadius: 30, + shadowColor: 'black', })); it('transforms box-shadow without blur-radius, color', () => runTest([ @@ -490,6 +490,38 @@ it('transforms box-shadow without blur-radius, color', () => runTest([ shadowColor: 'black', })); +it('transforms box-shadow with rgb color', () => runTest([ + ['box-shadow', '10px 20px rgb(100, 100, 100)'], +], { + shadowOffset: { width: 10, height: 20 }, + shadowRadius: 0, + shadowColor: 'rgb(100, 100, 100)', +})); + +it('transforms box-shadow with rgba color', () => runTest([ + ['box-shadow', '10px 20px rgba(100, 100, 100, 0.5)'], +], { + shadowOffset: { width: 10, height: 20 }, + shadowRadius: 0, + shadowColor: 'rgba(100, 100, 100, 0.5)', +})); + +it('transforms box-shadow with hsl color', () => runTest([ + ['box-shadow', '10px 20px hsl(120, 100%, 50%)'], +], { + shadowOffset: { width: 10, height: 20 }, + shadowRadius: 0, + shadowColor: 'hsl(120, 100%, 50%)', +})); + +it('transforms box-shadow with hsla color', () => runTest([ + ['box-shadow', '10px 20px hsla(120, 100%, 50%, 0.7)'], +], { + shadowOffset: { width: 10, height: 20 }, + shadowRadius: 0, + shadowColor: 'hsla(120, 100%, 50%, 0.7)', +})); + it('transforms box-shadow enforces offset to be present', () => { expect(() => transformCss([['box-shadow', 'red']])) .toThrow('Failed to parse declaration "boxShadow: red"'); diff --git a/src/transforms/boxShadow.js b/src/transforms/boxShadow.js index c9930bd..ffe8093 100644 --- a/src/transforms/boxShadow.js +++ b/src/transforms/boxShadow.js @@ -1,6 +1,6 @@ const { tokens } = require('../tokenTypes'); -const { NONE, SPACE, WORD, LENGTH } = tokens; +const { NONE, SPACE, COLOR, LENGTH } = tokens; module.exports = (tokenStream) => { let offsetX; @@ -28,10 +28,8 @@ module.exports = (tokenStream) => { tokenStream.expect(SPACE); blurRadius = tokenStream.expect(LENGTH); } - } else if (color === undefined && ( - tokenStream.matchesFunction() || tokenStream.matches(WORD) - )) { - color = String(tokenStream.lastValue); + } else if (tokenStream.matches(COLOR)) { + color = tokenStream.lastValue; } else { tokenStream.throw(); } From fad10399fb9ef4f9da6fa796427ff11266d2b389 Mon Sep 17 00:00:00 2001 From: krister Date: Sat, 3 Feb 2018 23:20:15 +0200 Subject: [PATCH 14/83] box-shadow transform: always set shadowOpacity to 1 --- src/index.test.js | 8 ++++++++ src/transforms/boxShadow.js | 3 ++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/src/index.test.js b/src/index.test.js index 007460f..537a4bd 100644 --- a/src/index.test.js +++ b/src/index.test.js @@ -464,6 +464,7 @@ it('transforms box-shadow into shadow- properties', () => runTest([ shadowOffset: { width: 10, height: 20 }, shadowRadius: 30, shadowColor: 'red', + shadowOpacity: 1, })); it('transforms box-shadow without blur-radius', () => runTest([ @@ -472,6 +473,7 @@ it('transforms box-shadow without blur-radius', () => runTest([ shadowOffset: { width: 10, height: 20 }, shadowRadius: 0, shadowColor: 'red', + shadowOpacity: 1, })); it('transforms box-shadow without color', () => runTest([ @@ -480,6 +482,7 @@ it('transforms box-shadow without color', () => runTest([ shadowOffset: { width: 10, height: 20 }, shadowRadius: 30, shadowColor: 'black', + shadowOpacity: 1, })); it('transforms box-shadow without blur-radius, color', () => runTest([ @@ -488,6 +491,7 @@ it('transforms box-shadow without blur-radius, color', () => runTest([ shadowOffset: { width: 10, height: 20 }, shadowRadius: 0, shadowColor: 'black', + shadowOpacity: 1, })); it('transforms box-shadow with rgb color', () => runTest([ @@ -496,6 +500,7 @@ it('transforms box-shadow with rgb color', () => runTest([ shadowOffset: { width: 10, height: 20 }, shadowRadius: 0, shadowColor: 'rgb(100, 100, 100)', + shadowOpacity: 1, })); it('transforms box-shadow with rgba color', () => runTest([ @@ -504,6 +509,7 @@ it('transforms box-shadow with rgba color', () => runTest([ shadowOffset: { width: 10, height: 20 }, shadowRadius: 0, shadowColor: 'rgba(100, 100, 100, 0.5)', + shadowOpacity: 1, })); it('transforms box-shadow with hsl color', () => runTest([ @@ -512,6 +518,7 @@ it('transforms box-shadow with hsl color', () => runTest([ shadowOffset: { width: 10, height: 20 }, shadowRadius: 0, shadowColor: 'hsl(120, 100%, 50%)', + shadowOpacity: 1, })); it('transforms box-shadow with hsla color', () => runTest([ @@ -520,6 +527,7 @@ it('transforms box-shadow with hsla color', () => runTest([ shadowOffset: { width: 10, height: 20 }, shadowRadius: 0, shadowColor: 'hsla(120, 100%, 50%, 0.7)', + shadowOpacity: 1, })); it('transforms box-shadow enforces offset to be present', () => { diff --git a/src/transforms/boxShadow.js b/src/transforms/boxShadow.js index ffe8093..67023ee 100644 --- a/src/transforms/boxShadow.js +++ b/src/transforms/boxShadow.js @@ -11,7 +11,7 @@ module.exports = (tokenStream) => { if (tokenStream.matches(NONE)) { tokenStream.expectEmpty(); return { - $merge: { shadowOffset: { width: 0, height: 0 }, shadowRadius: 0, shadowColor: 'black' }, + $merge: { shadowOffset: { width: 0, height: 0 }, shadowRadius: 0, shadowColor: 'black', shadowOpacity: 1 }, }; } @@ -43,6 +43,7 @@ module.exports = (tokenStream) => { shadowOffset: { width: offsetX, height: offsetY }, shadowRadius: blurRadius !== undefined ? blurRadius : 0, shadowColor: color !== undefined ? color : 'black', + shadowOpacity: 1, }; return { $merge }; }; From 78299848659f1044d7d95e50cf2593d0494221a4 Mon Sep 17 00:00:00 2001 From: krister Date: Sun, 4 Feb 2018 13:15:56 +0200 Subject: [PATCH 15/83] make sure that there is only one color for box-shadow --- src/index.test.js | 5 +++++ src/transforms/boxShadow.js | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/src/index.test.js b/src/index.test.js index 537a4bd..0783d94 100644 --- a/src/index.test.js +++ b/src/index.test.js @@ -530,6 +530,11 @@ it('transforms box-shadow with hsla color', () => runTest([ shadowOpacity: 1, })); +it('transforms box-shadow and throws if multiple colors are used', () => { + expect(() => transformCss([['box-shadow', '0 0 0 red yellow green blue']])) + .toThrow('Failed to parse declaration "boxShadow: 0 0 0 red yellow green blue"'); +}); + it('transforms box-shadow enforces offset to be present', () => { expect(() => transformCss([['box-shadow', 'red']])) .toThrow('Failed to parse declaration "boxShadow: red"'); diff --git a/src/transforms/boxShadow.js b/src/transforms/boxShadow.js index 67023ee..f0198e2 100644 --- a/src/transforms/boxShadow.js +++ b/src/transforms/boxShadow.js @@ -28,7 +28,7 @@ module.exports = (tokenStream) => { tokenStream.expect(SPACE); blurRadius = tokenStream.expect(LENGTH); } - } else if (tokenStream.matches(COLOR)) { + } else if (color === undefined && tokenStream.matches(COLOR)) { color = tokenStream.lastValue; } else { tokenStream.throw(); From 16d02a40ca2877cc965cde5d0513712516a201d7 Mon Sep 17 00:00:00 2001 From: Jacob Parker Date: Sun, 4 Feb 2018 18:18:58 +0000 Subject: [PATCH 16/83] Improve tokenstream performance, implement prettier --- .eslintrc.js | 2 +- package.json | 6 +- src/TokenStream.js | 68 +-- src/index.js | 53 +- src/index.test.js | 1070 +++++++++++++++++----------------- src/tokenTypes.js | 42 +- src/transforms/boxShadow.js | 23 +- src/transforms/flex.js | 18 +- src/transforms/font.js | 10 +- src/transforms/fontFamily.js | 4 +- src/transforms/index.js | 54 +- src/transforms/transform.js | 23 +- src/transforms/util.js | 29 +- yarn.lock | 14 + 14 files changed, 737 insertions(+), 679 deletions(-) diff --git a/.eslintrc.js b/.eslintrc.js index 1b6a646..45390b0 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -1,3 +1,3 @@ module.exports = { - extends: 'airbnb-base', + extends: ["airbnb-base", "prettier"] }; diff --git a/package.json b/package.json index eb71ea7..2fee4c0 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "css-to-react-native", - "version": "2.1.0", + "version": "2.1.1", "description": "Convert CSS text to a React Native stylesheet object", "main": "dist/index.js", "scripts": { @@ -35,8 +35,10 @@ "babel-preset-es2015": "^6.18.0", "eslint": "^3.9.1", "eslint-config-airbnb-base": "^10.0.1", + "eslint-config-prettier": "^2.9.0", "eslint-plugin-import": "^2.2.0", - "jest": "^17.0.0" + "jest": "^17.0.0", + "prettier": "^1.10.2" }, "dependencies": { "css-color-keywords": "^1.0.0", diff --git a/src/TokenStream.js b/src/TokenStream.js index b827360..bcbbfa0 100644 --- a/src/TokenStream.js +++ b/src/TokenStream.js @@ -1,77 +1,57 @@ -const SYMBOL_BASE_MATCH = 'SYMBOL_BASE_MATCH'; -const SYMBOL_MATCH = 'SYMBOL_MATCH'; +const SYMBOL_MATCH = "SYMBOL_MATCH"; module.exports = class TokenStream { constructor(nodes, parent) { + this.index = 0; this.nodes = nodes; - this.parent = parent; - this.lastFunction = null; + this.functionName = parent != null ? parent.value : null; this.lastValue = null; - } - - get node() { - return this.nodes[0]; + this.rewindIndex = -1; } hasTokens() { - return this.nodes.length > 0; - } - - lookAhead() { - return new TokenStream(this.nodes.slice(1), this.parent); + return this.index <= this.nodes.length - 1; } - [SYMBOL_BASE_MATCH](...tokenDescriptors) { - const node = this.node; + [SYMBOL_MATCH](...tokenDescriptors) { + if (!this.hasTokens()) return null; - if (!node) return null; + const node = this.nodes[this.index]; for (let i = 0; i < tokenDescriptors.length; i += 1) { const tokenDescriptor = tokenDescriptors[i]; const value = tokenDescriptor(node); - if (value !== null) return value; + if (value !== null) { + this.index += 1; + this.lastValue = value; + return value; + } } return null; } - [SYMBOL_MATCH](...tokenDescriptors) { - const value = this[SYMBOL_BASE_MATCH](...tokenDescriptors); - if (value === null) return null; - this.nodes = this.nodes.slice(1); - this.lastFunction = null; - this.lastValue = value; - return value; - } - - test(...tokenDescriptors) { - return this[SYMBOL_BASE_MATCH](...tokenDescriptors) !== null; - } - matches(...tokenDescriptors) { return this[SYMBOL_MATCH](...tokenDescriptors) !== null; } expect(...tokenDescriptors) { const value = this[SYMBOL_MATCH](...tokenDescriptors); - if (value !== null) return value; - return this.throw(); + return value !== null ? value : this.throw(); } matchesFunction() { - const node = this.node; - if (node.type !== 'function') return null; + const node = this.nodes[this.index]; + if (node.type !== "function") return null; const value = new TokenStream(node.nodes, node); - this.nodes = this.nodes.slice(1); - this.lastFunction = value; + this.index += 1; this.lastValue = null; return value; } expectFunction() { const value = this.matchesFunction(); - if (value !== null) return value; - return this.throw(); + return value !== null ? value : this.throw(); } expectEmpty() { @@ -79,6 +59,16 @@ module.exports = class TokenStream { } throw() { - throw new Error(`Unexpected token type: ${this.node.type}`); + throw new Error(`Unexpected token type: ${this.nodes[this.index].type}`); + } + + saveRewindPoint() { + this.rewindIndex = this.index; + } + + rewind() { + if (this.rewindIndex === -1) throw new Error("Internal error"); + this.index = this.rewindIndex; + this.lastValue = null; } }; diff --git a/src/index.js b/src/index.js index f42816e..8fa30fe 100644 --- a/src/index.js +++ b/src/index.js @@ -1,8 +1,8 @@ /* eslint-disable no-param-reassign */ -const parse = require('postcss-value-parser'); -const camelizeStyleName = require('fbjs/lib/camelizeStyleName'); -const transforms = require('./transforms'); -const TokenStream = require('./TokenStream'); +const parse = require("postcss-value-parser"); +const camelizeStyleName = require("fbjs/lib/camelizeStyleName"); +const transforms = require("./transforms"); +const TokenStream = require("./TokenStream"); // Note if this is wrong, you'll need to change tokenTypes.js too const numberOrLengthRe = /^([+-]?(?:\d*\.)?\d+(?:[Ee][+-]?\d+)?)(?:px)?$/i; @@ -11,14 +11,14 @@ const nullRe = /^null$/i; const undefinedRe = /^undefined$/i; // Undocumented export -export const transformRawValue = (input) => { +export const transformRawValue = input => { const value = input.trim(); const numberMatch = value.match(numberOrLengthRe); if (numberMatch !== null) return Number(numberMatch[1]); const boolMatch = input.match(boolRe); - if (boolMatch !== null) return boolMatch[0].toLowerCase() === 'true'; + if (boolMatch !== null) return boolMatch[0].toLowerCase() === "true"; const nullMatch = input.match(nullRe); if (nullMatch !== null) return null; @@ -35,32 +35,39 @@ const baseTransformShorthandValue = (propName, inputValue) => { return transforms[propName](tokenStream); }; -const transformShorthandValue = (process.env.NODE_ENV === 'production') - ? baseTransformShorthandValue - : (propName, inputValue) => { - try { - return baseTransformShorthandValue(propName, inputValue); - } catch (e) { - throw new Error(`Failed to parse declaration "${propName}: ${inputValue}"`); - } - }; +const transformShorthandValue = + process.env.NODE_ENV === "production" + ? baseTransformShorthandValue + : (propName, inputValue) => { + try { + return baseTransformShorthandValue(propName, inputValue); + } catch (e) { + throw new Error( + `Failed to parse declaration "${propName}: ${inputValue}"` + ); + } + }; export const getStylesForProperty = (propName, inputValue, allowShorthand) => { - const isRawValue = (allowShorthand === false) || !(propName in transforms); + const isRawValue = allowShorthand === false || !(propName in transforms); const propValue = isRawValue ? transformRawValue(inputValue) : transformShorthandValue(propName, inputValue.trim()); - return (propValue && propValue.$merge) + return propValue && propValue.$merge ? propValue.$merge : { [propName]: propValue }; }; export const getPropertyName = camelizeStyleName; -export default (rules, shorthandBlacklist = []) => rules.reduce((accum, rule) => { - const propertyName = getPropertyName(rule[0]); - const value = rule[1]; - const allowShorthand = shorthandBlacklist.indexOf(propertyName) === -1; - return Object.assign(accum, getStylesForProperty(propertyName, value, allowShorthand)); -}, {}); +export default (rules, shorthandBlacklist = []) => + rules.reduce((accum, rule) => { + const propertyName = getPropertyName(rule[0]); + const value = rule[1]; + const allowShorthand = shorthandBlacklist.indexOf(propertyName) === -1; + return Object.assign( + accum, + getStylesForProperty(propertyName, value, allowShorthand) + ); + }, {}); diff --git a/src/index.test.js b/src/index.test.js index 0783d94..2222c61 100644 --- a/src/index.test.js +++ b/src/index.test.js @@ -1,556 +1,572 @@ /* global jest it, expect */ -import transformCss, { getStylesForProperty } from '.'; +import transformCss, { getStylesForProperty } from "."; const runTest = (inputCss, expectedStyles) => { const actualStyles = transformCss(inputCss); expect(actualStyles).toEqual(expectedStyles); }; -it('transforms numbers', () => runTest([ - ['top', '0'], - ['left', '0'], - ['right', '0'], - ['bottom', '0'], -], { top: 0, left: 0, right: 0, bottom: 0 })); - -it('allows pixels in unspecialized transform', () => runTest([ - ['top', '0px'], -], { top: 0 })); - -it('allows boolean values', () => runTest([ - ['boolTrue1', 'true'], - ['boolTrue2', 'TRUE'], - ['boolFalse1', 'false'], - ['boolFalse2', 'FALSE'], -], { - boolTrue1: true, - boolTrue2: true, - boolFalse1: false, - boolFalse2: false, -})); - -it('allows null values', () => runTest([ - ['null1', 'null'], - ['null2', 'NULL'], -], { - null1: null, - null2: null, -})); - -it('allows undefined values', () => runTest([ - ['undefined1', 'undefined'], - ['undefined2', 'UNDEFINED'], -], { - undefined1: undefined, - undefined2: undefined, -})); - -it('allows percent in unspecialized transform', () => runTest([ - ['top', '0%'], -], { top: '0%' })); - -it('allows decimal values', () => { - expect(getStylesForProperty('margin', '0.5px').marginTop).toBe(0.5); - expect(getStylesForProperty('margin', '1.5px').marginTop).toBe(1.5); - expect(getStylesForProperty('margin', '10.5px').marginTop).toBe(10.5); - expect(getStylesForProperty('margin', '100.5px').marginTop).toBe(100.5); - expect(getStylesForProperty('margin', '-0.5px').marginTop).toBe(-0.5); - expect(getStylesForProperty('margin', '-1.5px').marginTop).toBe(-1.5); - expect(getStylesForProperty('margin', '-10.5px').marginTop).toBe(-10.5); - expect(getStylesForProperty('margin', '-100.5px').marginTop).toBe(-100.5); - expect(getStylesForProperty('margin', '.5px').marginTop).toBe(0.5); - expect(getStylesForProperty('margin', '-.5px').marginTop).toBe(-0.5); +it("transforms numbers", () => + runTest([["top", "0"], ["left", "0"], ["right", "0"], ["bottom", "0"]], { + top: 0, + left: 0, + right: 0, + bottom: 0 + })); + +it("allows pixels in unspecialized transform", () => + runTest([["top", "0px"]], { top: 0 })); + +it("allows boolean values", () => + runTest( + [ + ["boolTrue1", "true"], + ["boolTrue2", "TRUE"], + ["boolFalse1", "false"], + ["boolFalse2", "FALSE"] + ], + { + boolTrue1: true, + boolTrue2: true, + boolFalse1: false, + boolFalse2: false + } + )); + +it("allows null values", () => + runTest([["null1", "null"], ["null2", "NULL"]], { + null1: null, + null2: null + })); + +it("allows undefined values", () => + runTest([["undefined1", "undefined"], ["undefined2", "UNDEFINED"]], { + undefined1: undefined, + undefined2: undefined + })); + +it("allows percent in unspecialized transform", () => + runTest([["top", "0%"]], { top: "0%" })); + +it("allows decimal values", () => { + expect(getStylesForProperty("margin", "0.5px").marginTop).toBe(0.5); + expect(getStylesForProperty("margin", "1.5px").marginTop).toBe(1.5); + expect(getStylesForProperty("margin", "10.5px").marginTop).toBe(10.5); + expect(getStylesForProperty("margin", "100.5px").marginTop).toBe(100.5); + expect(getStylesForProperty("margin", "-0.5px").marginTop).toBe(-0.5); + expect(getStylesForProperty("margin", "-1.5px").marginTop).toBe(-1.5); + expect(getStylesForProperty("margin", "-10.5px").marginTop).toBe(-10.5); + expect(getStylesForProperty("margin", "-100.5px").marginTop).toBe(-100.5); + expect(getStylesForProperty("margin", ".5px").marginTop).toBe(0.5); + expect(getStylesForProperty("margin", "-.5px").marginTop).toBe(-0.5); }); -it('allows decimal values in transformed values', () => runTest([ - ['border-radius', '1.5px'], -], { - borderTopLeftRadius: 1.5, - borderTopRightRadius: 1.5, - borderBottomRightRadius: 1.5, - borderBottomLeftRadius: 1.5, -})); - -it('allows negative values in transformed values', () => runTest([ - ['border-radius', '-1.5px'], -], { - borderTopLeftRadius: -1.5, - borderTopRightRadius: -1.5, - borderBottomRightRadius: -1.5, - borderBottomLeftRadius: -1.5, -})); - -it('allows percent values in transformed values', () => runTest([ - ['margin', '10%'], -], { - marginTop: '10%', - marginRight: '10%', - marginBottom: '10%', - marginLeft: '10%', -})); - -it('allows color values in transformed border-color values', () => runTest([ - ['border-color', 'red'], -], { - borderTopColor: 'red', - borderRightColor: 'red', - borderBottomColor: 'red', - borderLeftColor: 'red', -})); - -it('allows omitting units for 0', () => runTest([ - ['margin', '10px 0'], -], { - marginTop: 10, - marginRight: 0, - marginBottom: 10, - marginLeft: 0, -})); - -it('transforms strings', () => runTest([ - ['color', 'red'], -], { color: 'red' })); - -it('transforms hex colors', () => runTest([ - ['color', '#f00'], -], { color: '#f00' })); - -it('transforms rgb colors', () => runTest([ - ['color', 'rgb(255, 0, 0)'], -], { color: 'rgb(255, 0, 0)' })); - -it('converts to camel-case', () => runTest([ - ['background-color', 'red'], -], { backgroundColor: 'red' })); - -it('transforms background to backgroundColor', () => runTest([ - ['background', '#f00'], -], { backgroundColor: '#f00' })); - -it('transforms background to backgroundColor with rgb', () => runTest([ - ['background', 'rgb(255, 0, 0)'], -], { backgroundColor: 'rgb(255, 0, 0)' })); - -it('transforms background to backgroundColor with named colour', () => runTest([ - ['background', 'red'], -], { backgroundColor: 'red' })); - -it('transforms font weights as strings', () => runTest([ - ['font-weight', ' 400'], -], { fontWeight: '400' })); - -it('transforms font variant as an array', () => runTest([ - ['font-variant', 'tabular-nums'], -], { fontVariant: ['tabular-nums'] })); - -it('transforms shadow offsets', () => runTest([ - ['shadow-offset', '10px 5px'], -], { shadowOffset: { width: 10, height: 5 } })); - -it('transforms text shadow offsets', () => runTest([ - ['text-shadow-offset', '10px 5px'], -], { textShadowOffset: { width: 10, height: 5 } })); - -it('transforms a single transform value with number', () => runTest([ - ['transform', 'scaleX(5)'], -], { transform: [{ scaleX: 5 }] })); - -it('transforms a single transform value with string', () => runTest([ - ['transform', 'rotate(5deg)'], -], { transform: [{ rotate: '5deg' }] })); - -it('transforms multiple transform values', () => runTest([ - ['transform', 'scaleX(5) skewX(1deg)'], -], { transform: [{ skewX: '1deg' }, { scaleX: 5 }] })); - -it('transforms scale(number, number) to scaleX and scaleY', () => runTest([ - ['transform', 'scale(2, 3)'], -], { transform: [{ scaleY: 3 }, { scaleX: 2 }] })); - -it('transforms scale(number) to scale', () => runTest([ - ['transform', 'scale(5)'], -], { transform: [{ scale: 5 }] })); - -it('transforms translate(length, length) to translateX and translateY', () => runTest([ - ['transform', 'translate(2px, 3px)'], -], { transform: [{ translateY: 3 }, { translateX: 2 }] })); - -it('transforms translate(length) to translateX and translateY', () => runTest([ - ['transform', 'translate(5px)'], -], { transform: [{ translateY: 0 }, { translateX: 5 }] })); - -it('transforms skew(angle, angle) to skewX and skewY', () => runTest([ - ['transform', 'skew(2deg, 3deg)'], -], { transform: [{ skewY: '3deg' }, { skewX: '2deg' }] })); - -it('transforms skew(angle) to skewX and skewY', () => runTest([ - ['transform', 'skew(5deg)'], -], { transform: [{ skewY: '0deg' }, { skewX: '5deg' }] })); - -it('transforms border shorthand', () => runTest([ - ['border', '2px dashed #f00'], -], { borderWidth: 2, borderColor: '#f00', borderStyle: 'dashed' })); - -it('transforms border shorthand in other order', () => runTest([ - ['border', '#f00 2px dashed'], -], { borderWidth: 2, borderColor: '#f00', borderStyle: 'dashed' })); - -it('transforms border shorthand missing color', () => runTest([ - ['border', '2px dashed'], -], { borderWidth: 2, borderColor: 'black', borderStyle: 'dashed' })); - -it('transforms border shorthand missing style', () => runTest([ - ['border', '2px #f00'], -], { borderWidth: 2, borderColor: '#f00', borderStyle: 'solid' })); - -it('transforms border shorthand missing width', () => runTest([ - ['border', '#f00 dashed'], -], { borderWidth: 1, borderColor: '#f00', borderStyle: 'dashed' })); - -it('transforms border shorthand missing color & width', () => runTest([ - ['border', 'dashed'], -], { borderWidth: 1, borderColor: 'black', borderStyle: 'dashed' })); - -it('transforms border shorthand missing style & width', () => runTest([ - ['border', '#f00'], -], { borderWidth: 1, borderColor: '#f00', borderStyle: 'solid' })); - -it('transforms border shorthand missing color & style', () => runTest([ - ['border', '2px'], -], { borderWidth: 2, borderColor: 'black', borderStyle: 'solid' })); - -it('transforms margin shorthands using 4 values', () => runTest([ - ['margin', '10px 20px 30px 40px'], -], { marginTop: 10, marginRight: 20, marginBottom: 30, marginLeft: 40 })); - -it('transforms margin shorthands using 3 values', () => runTest([ - ['margin', '10px 20px 30px'], -], { marginTop: 10, marginRight: 20, marginBottom: 30, marginLeft: 20 })); - -it('transforms margin shorthands using 2 values', () => runTest([ - ['margin', '10px 20px'], -], { marginTop: 10, marginRight: 20, marginBottom: 10, marginLeft: 20 })); - -it('transforms margin shorthands using 1 value', () => runTest([ - ['margin', '10px'], -], { marginTop: 10, marginRight: 10, marginBottom: 10, marginLeft: 10 })); - -it('shorthand with 1 value should override previous values', () => runTest([ - ['margin-top', '2px'], - ['margin', '1px'], -], { marginTop: 1, marginRight: 1, marginBottom: 1, marginLeft: 1 })); - -it('transforms flex shorthand with 3 values', () => runTest([ - ['flex', '1 2 3px'], -], { flexGrow: 1, flexShrink: 2, flexBasis: 3 })); - -it('transforms flex shorthand with 3 values in reverse order', () => runTest([ - ['flex', '3px 1 2'], -], { flexGrow: 1, flexShrink: 2, flexBasis: 3 })); - -it('transforms flex shorthand with 2 values of flex-grow and flex-shrink', () => runTest([ - ['flex', '1 2'], -], { flexGrow: 1, flexShrink: 2, flexBasis: 0 })); - -it('transforms flex shorthand with 2 values of flex-grow and flex-basis', () => runTest([ - ['flex', '2 2px'], -], { flexGrow: 2, flexShrink: 1, flexBasis: 2 })); - -it('transforms flex shorthand with 2 values of flex-grow and flex-basis (reversed)', () => runTest([ - ['flex', '2px 2'], -], { flexGrow: 2, flexShrink: 1, flexBasis: 2 })); - -it('transforms flex shorthand with 1 value of flex-grow', () => runTest([ - ['flex', '2'], -], { flexGrow: 2, flexShrink: 1, flexBasis: 0 })); - -it('transforms flex shorthand with 1 value of flex-basis', () => runTest([ - ['flex', '10px'], -], { flexGrow: 1, flexShrink: 1, flexBasis: 10 })); +it("allows decimal values in transformed values", () => + runTest([["border-radius", "1.5px"]], { + borderTopLeftRadius: 1.5, + borderTopRightRadius: 1.5, + borderBottomRightRadius: 1.5, + borderBottomLeftRadius: 1.5 + })); + +it("allows negative values in transformed values", () => + runTest([["border-radius", "-1.5px"]], { + borderTopLeftRadius: -1.5, + borderTopRightRadius: -1.5, + borderBottomRightRadius: -1.5, + borderBottomLeftRadius: -1.5 + })); + +it("allows percent values in transformed values", () => + runTest([["margin", "10%"]], { + marginTop: "10%", + marginRight: "10%", + marginBottom: "10%", + marginLeft: "10%" + })); + +it("allows color values in transformed border-color values", () => + runTest([["border-color", "red"]], { + borderTopColor: "red", + borderRightColor: "red", + borderBottomColor: "red", + borderLeftColor: "red" + })); + +it("allows omitting units for 0", () => + runTest([["margin", "10px 0"]], { + marginTop: 10, + marginRight: 0, + marginBottom: 10, + marginLeft: 0 + })); + +it("transforms strings", () => runTest([["color", "red"]], { color: "red" })); + +it("transforms hex colors", () => + runTest([["color", "#f00"]], { color: "#f00" })); + +it("transforms rgb colors", () => + runTest([["color", "rgb(255, 0, 0)"]], { color: "rgb(255, 0, 0)" })); + +it("converts to camel-case", () => + runTest([["background-color", "red"]], { backgroundColor: "red" })); + +it("transforms background to backgroundColor", () => + runTest([["background", "#f00"]], { backgroundColor: "#f00" })); + +it("transforms background to backgroundColor with rgb", () => + runTest([["background", "rgb(255, 0, 0)"]], { + backgroundColor: "rgb(255, 0, 0)" + })); + +it("transforms background to backgroundColor with named colour", () => + runTest([["background", "red"]], { backgroundColor: "red" })); + +it("transforms font weights as strings", () => + runTest([["font-weight", " 400"]], { fontWeight: "400" })); + +it("transforms font variant as an array", () => + runTest([["font-variant", "tabular-nums"]], { + fontVariant: ["tabular-nums"] + })); + +it("transforms shadow offsets", () => + runTest([["shadow-offset", "10px 5px"]], { + shadowOffset: { width: 10, height: 5 } + })); + +it("transforms text shadow offsets", () => + runTest([["text-shadow-offset", "10px 5px"]], { + textShadowOffset: { width: 10, height: 5 } + })); + +it("transforms a single transform value with number", () => + runTest([["transform", "scaleX(5)"]], { transform: [{ scaleX: 5 }] })); + +it("transforms a single transform value with string", () => + runTest([["transform", "rotate(5deg)"]], { + transform: [{ rotate: "5deg" }] + })); + +it("transforms multiple transform values", () => + runTest([["transform", "scaleX(5) skewX(1deg)"]], { + transform: [{ skewX: "1deg" }, { scaleX: 5 }] + })); + +it("transforms scale(number, number) to scaleX and scaleY", () => + runTest([["transform", "scale(2, 3)"]], { + transform: [{ scaleY: 3 }, { scaleX: 2 }] + })); + +it("transforms scale(number) to scale", () => + runTest([["transform", "scale(5)"]], { transform: [{ scale: 5 }] })); + +it("transforms translate(length, length) to translateX and translateY", () => + runTest([["transform", "translate(2px, 3px)"]], { + transform: [{ translateY: 3 }, { translateX: 2 }] + })); + +it("transforms translate(length) to translateX and translateY", () => + runTest([["transform", "translate(5px)"]], { + transform: [{ translateY: 0 }, { translateX: 5 }] + })); + +it("transforms skew(angle, angle) to skewX and skewY", () => + runTest([["transform", "skew(2deg, 3deg)"]], { + transform: [{ skewY: "3deg" }, { skewX: "2deg" }] + })); + +it("transforms skew(angle) to skewX and skewY", () => + runTest([["transform", "skew(5deg)"]], { + transform: [{ skewY: "0deg" }, { skewX: "5deg" }] + })); + +it("transforms border shorthand", () => + runTest([["border", "2px dashed #f00"]], { + borderWidth: 2, + borderColor: "#f00", + borderStyle: "dashed" + })); + +it("transforms border shorthand in other order", () => + runTest([["border", "#f00 2px dashed"]], { + borderWidth: 2, + borderColor: "#f00", + borderStyle: "dashed" + })); + +it("transforms border shorthand missing color", () => + runTest([["border", "2px dashed"]], { + borderWidth: 2, + borderColor: "black", + borderStyle: "dashed" + })); + +it("transforms border shorthand missing style", () => + runTest([["border", "2px #f00"]], { + borderWidth: 2, + borderColor: "#f00", + borderStyle: "solid" + })); + +it("transforms border shorthand missing width", () => + runTest([["border", "#f00 dashed"]], { + borderWidth: 1, + borderColor: "#f00", + borderStyle: "dashed" + })); + +it("transforms border shorthand missing color & width", () => + runTest([["border", "dashed"]], { + borderWidth: 1, + borderColor: "black", + borderStyle: "dashed" + })); + +it("transforms border shorthand missing style & width", () => + runTest([["border", "#f00"]], { + borderWidth: 1, + borderColor: "#f00", + borderStyle: "solid" + })); + +it("transforms border shorthand missing color & style", () => + runTest([["border", "2px"]], { + borderWidth: 2, + borderColor: "black", + borderStyle: "solid" + })); + +it("transforms margin shorthands using 4 values", () => + runTest([["margin", "10px 20px 30px 40px"]], { + marginTop: 10, + marginRight: 20, + marginBottom: 30, + marginLeft: 40 + })); + +it("transforms margin shorthands using 3 values", () => + runTest([["margin", "10px 20px 30px"]], { + marginTop: 10, + marginRight: 20, + marginBottom: 30, + marginLeft: 20 + })); + +it("transforms margin shorthands using 2 values", () => + runTest([["margin", "10px 20px"]], { + marginTop: 10, + marginRight: 20, + marginBottom: 10, + marginLeft: 20 + })); + +it("transforms margin shorthands using 1 value", () => + runTest([["margin", "10px"]], { + marginTop: 10, + marginRight: 10, + marginBottom: 10, + marginLeft: 10 + })); + +it("shorthand with 1 value should override previous values", () => + runTest([["margin-top", "2px"], ["margin", "1px"]], { + marginTop: 1, + marginRight: 1, + marginBottom: 1, + marginLeft: 1 + })); + +it("transforms flex shorthand with 3 values", () => + runTest([["flex", "1 2 3px"]], { flexGrow: 1, flexShrink: 2, flexBasis: 3 })); + +it("transforms flex shorthand with 3 values in reverse order", () => + runTest([["flex", "3px 1 2"]], { flexGrow: 1, flexShrink: 2, flexBasis: 3 })); + +it("transforms flex shorthand with 2 values of flex-grow and flex-shrink", () => + runTest([["flex", "1 2"]], { flexGrow: 1, flexShrink: 2, flexBasis: 0 })); + +it("transforms flex shorthand with 2 values of flex-grow and flex-basis", () => + runTest([["flex", "2 2px"]], { flexGrow: 2, flexShrink: 1, flexBasis: 2 })); + +it("transforms flex shorthand with 2 values of flex-grow and flex-basis (reversed)", () => + runTest([["flex", "2px 2"]], { flexGrow: 2, flexShrink: 1, flexBasis: 2 })); + +it("transforms flex shorthand with 1 value of flex-grow", () => + runTest([["flex", "2"]], { flexGrow: 2, flexShrink: 1, flexBasis: 0 })); + +it("transforms flex shorthand with 1 value of flex-basis", () => + runTest([["flex", "10px"]], { flexGrow: 1, flexShrink: 1, flexBasis: 10 })); /* A unitless zero that is not already preceded by two flex factors must be interpreted as a flex factor. To avoid misinterpretation or invalid declarations, authors must specify a zero <‘flex-basis’> component with a unit or precede it by two flex factors. */ -it('transforms flex shorthand with flex-grow/shrink taking priority over basis', () => runTest([ - ['flex', '0 1 0'], -], { flexGrow: 0, flexShrink: 1, flexBasis: 0 })); - -it('transforms flex shorthand with flex-basis set to auto', () => runTest([ - ['flex', '0 1 auto'], -], { flexGrow: 0, flexShrink: 1 })); - -it('transforms flex shorthand with flex-basis set to auto appearing first', () => runTest([ - ['flex', 'auto 0 1'], -], { flexGrow: 0, flexShrink: 1 })); - -it('transforms flex auto keyword', () => runTest([ - ['flex', 'auto'], -], { flexGrow: 1, flexShrink: 1 })); - -it('transforms flex none keyword', () => runTest([ - ['flex', 'none'], -], { flexGrow: 0, flexShrink: 0 })); - -it('transforms flexFlow shorthand with two values', () => runTest([ - ['flex-flow', 'column wrap'], -], { flexDirection: 'column', flexWrap: 'wrap' })); - -it('transforms flexFlow shorthand missing flexDirection', () => runTest([ - ['flex-flow', 'wrap'], -], { flexDirection: 'row', flexWrap: 'wrap' })); - -it('transforms flexFlow shorthand missing flexWrap', () => runTest([ - ['flex-flow', 'column'], -], { flexDirection: 'column', flexWrap: 'nowrap' })); - -it('transforms font', () => runTest([ - ['font', 'bold italic small-caps 16px/18px "Helvetica"'], -], { - fontFamily: 'Helvetica', - fontSize: 16, - fontWeight: 'bold', - fontStyle: 'italic', - fontVariant: ['small-caps'], - lineHeight: 18, -})); - -it('transforms font missing font-variant', () => runTest([ - ['font', 'bold italic 16px/18px "Helvetica"'], -], { - fontFamily: 'Helvetica', - fontSize: 16, - fontWeight: 'bold', - fontStyle: 'italic', - fontVariant: [], - lineHeight: 18, -})); - -it('transforms font missing font-style', () => runTest([ - ['font', 'bold small-caps 16px/18px "Helvetica"'], -], { - fontFamily: 'Helvetica', - fontSize: 16, - fontWeight: 'bold', - fontStyle: 'normal', - fontVariant: ['small-caps'], - lineHeight: 18, -})); - -it('transforms font missing font-weight', () => runTest([ - ['font', 'italic small-caps 16px/18px "Helvetica"'], -], { - fontFamily: 'Helvetica', - fontSize: 16, - fontWeight: 'normal', - fontStyle: 'italic', - fontVariant: ['small-caps'], - lineHeight: 18, -})); - -it('transforms font with font-weight normal', () => runTest([ - ['font', 'normal 16px/18px "Helvetica"'], -], { - fontFamily: 'Helvetica', - fontSize: 16, - fontWeight: 'normal', - fontStyle: 'normal', - fontVariant: [], - lineHeight: 18, -})); - -it('transforms font with font-weight and font-style normal', () => runTest([ - ['font', 'normal normal 16px/18px "Helvetica"'], -], { - fontFamily: 'Helvetica', - fontSize: 16, - fontWeight: 'normal', - fontStyle: 'normal', - fontVariant: [], - lineHeight: 18, -})); - -it('transforms font with no font-weight, font-style, and font-variant', () => runTest([ - ['font', '16px/18px "Helvetica"'], -], { - fontFamily: 'Helvetica', - fontSize: 16, - fontWeight: 'normal', - fontStyle: 'normal', - fontVariant: [], - lineHeight: 18, -})); - -it('omits line height if not specified', () => runTest([ - ['font', '16px "Helvetica"'], -], { - fontFamily: 'Helvetica', - fontSize: 16, - fontWeight: 'normal', - fontStyle: 'normal', - fontVariant: [], -})); - -it('allows line height as multiple', () => runTest([ - ['font', '16px/1.5 "Helvetica"'], -], { - fontFamily: 'Helvetica', - fontSize: 16, - fontWeight: 'normal', - fontStyle: 'normal', - fontVariant: [], - lineHeight: 24, -})); - -it('transforms font without quotes', () => runTest([ - ['font', 'bold italic small-caps 16px/18px Helvetica Neue'], -], { - fontFamily: 'Helvetica Neue', - fontSize: 16, - fontWeight: 'bold', - fontStyle: 'italic', - fontVariant: ['small-caps'], - lineHeight: 18, -})); - -it('transforms font-family with double quotes', () => runTest([ - ['font-family', '"Helvetica Neue"'], -], { - fontFamily: 'Helvetica Neue', -})); - -it('transforms font-family with single quotes', () => runTest([ - ['font-family', '\'Helvetica Neue\''], -], { - fontFamily: 'Helvetica Neue', -})); - -it('transforms font-family without quotes', () => runTest([ - ['font-family', 'Helvetica Neue'], -], { - fontFamily: 'Helvetica Neue', -})); - -it('transforms font-family with quotes with otherwise invalid values', () => runTest([ - ['font-family', '"Goudy Bookletter 1911"'], -], { - fontFamily: 'Goudy Bookletter 1911', -})); - -it('transforms font-family with quotes with escaped values', () => runTest([ - ['font-family', '"test\\A test"'], -], { - fontFamily: 'test\ntest', -})); - -it('transforms font-family with quotes with escaped quote', () => runTest([ - ['font-family', '"test\\"test"'], -], { - fontFamily: 'test"test', -})); - -it('does not transform invalid unquoted font-family', () => { - expect(() => transformCss([['font-family', 'Goudy Bookletter 1911']])).toThrow(); +it("transforms flex shorthand with flex-grow/shrink taking priority over basis", () => + runTest([["flex", "0 1 0"]], { flexGrow: 0, flexShrink: 1, flexBasis: 0 })); + +it("transforms flex shorthand with flex-basis set to auto", () => + runTest([["flex", "0 1 auto"]], { flexGrow: 0, flexShrink: 1 })); + +it("transforms flex shorthand with flex-basis set to auto appearing first", () => + runTest([["flex", "auto 0 1"]], { flexGrow: 0, flexShrink: 1 })); + +it("transforms flex auto keyword", () => + runTest([["flex", "auto"]], { flexGrow: 1, flexShrink: 1 })); + +it("transforms flex none keyword", () => + runTest([["flex", "none"]], { flexGrow: 0, flexShrink: 0 })); + +it("transforms flexFlow shorthand with two values", () => + runTest([["flex-flow", "column wrap"]], { + flexDirection: "column", + flexWrap: "wrap" + })); + +it("transforms flexFlow shorthand missing flexDirection", () => + runTest([["flex-flow", "wrap"]], { flexDirection: "row", flexWrap: "wrap" })); + +it("transforms flexFlow shorthand missing flexWrap", () => + runTest([["flex-flow", "column"]], { + flexDirection: "column", + flexWrap: "nowrap" + })); + +it("transforms font", () => + runTest([["font", 'bold italic small-caps 16px/18px "Helvetica"']], { + fontFamily: "Helvetica", + fontSize: 16, + fontWeight: "bold", + fontStyle: "italic", + fontVariant: ["small-caps"], + lineHeight: 18 + })); + +it("transforms font missing font-variant", () => + runTest([["font", 'bold italic 16px/18px "Helvetica"']], { + fontFamily: "Helvetica", + fontSize: 16, + fontWeight: "bold", + fontStyle: "italic", + fontVariant: [], + lineHeight: 18 + })); + +it("transforms font missing font-style", () => + runTest([["font", 'bold small-caps 16px/18px "Helvetica"']], { + fontFamily: "Helvetica", + fontSize: 16, + fontWeight: "bold", + fontStyle: "normal", + fontVariant: ["small-caps"], + lineHeight: 18 + })); + +it("transforms font missing font-weight", () => + runTest([["font", 'italic small-caps 16px/18px "Helvetica"']], { + fontFamily: "Helvetica", + fontSize: 16, + fontWeight: "normal", + fontStyle: "italic", + fontVariant: ["small-caps"], + lineHeight: 18 + })); + +it("transforms font with font-weight normal", () => + runTest([["font", 'normal 16px/18px "Helvetica"']], { + fontFamily: "Helvetica", + fontSize: 16, + fontWeight: "normal", + fontStyle: "normal", + fontVariant: [], + lineHeight: 18 + })); + +it("transforms font with font-weight and font-style normal", () => + runTest([["font", 'normal normal 16px/18px "Helvetica"']], { + fontFamily: "Helvetica", + fontSize: 16, + fontWeight: "normal", + fontStyle: "normal", + fontVariant: [], + lineHeight: 18 + })); + +it("transforms font with no font-weight, font-style, and font-variant", () => + runTest([["font", '16px/18px "Helvetica"']], { + fontFamily: "Helvetica", + fontSize: 16, + fontWeight: "normal", + fontStyle: "normal", + fontVariant: [], + lineHeight: 18 + })); + +it("omits line height if not specified", () => + runTest([["font", '16px "Helvetica"']], { + fontFamily: "Helvetica", + fontSize: 16, + fontWeight: "normal", + fontStyle: "normal", + fontVariant: [] + })); + +it("allows line height as multiple", () => + runTest([["font", '16px/1.5 "Helvetica"']], { + fontFamily: "Helvetica", + fontSize: 16, + fontWeight: "normal", + fontStyle: "normal", + fontVariant: [], + lineHeight: 24 + })); + +it("transforms font without quotes", () => + runTest([["font", "bold italic small-caps 16px/18px Helvetica Neue"]], { + fontFamily: "Helvetica Neue", + fontSize: 16, + fontWeight: "bold", + fontStyle: "italic", + fontVariant: ["small-caps"], + lineHeight: 18 + })); + +it("transforms font-family with double quotes", () => + runTest([["font-family", '"Helvetica Neue"']], { + fontFamily: "Helvetica Neue" + })); + +it("transforms font-family with single quotes", () => + runTest([["font-family", "'Helvetica Neue'"]], { + fontFamily: "Helvetica Neue" + })); + +it("transforms font-family without quotes", () => + runTest([["font-family", "Helvetica Neue"]], { + fontFamily: "Helvetica Neue" + })); + +it("transforms font-family with quotes with otherwise invalid values", () => + runTest([["font-family", '"Goudy Bookletter 1911"']], { + fontFamily: "Goudy Bookletter 1911" + })); + +it("transforms font-family with quotes with escaped values", () => + runTest([["font-family", '"test\\A test"']], { + fontFamily: "test\ntest" + })); + +it("transforms font-family with quotes with escaped quote", () => + runTest([["font-family", '"test\\"test"']], { + fontFamily: 'test"test' + })); + +it("does not transform invalid unquoted font-family", () => { + expect(() => + transformCss([["font-family", "Goudy Bookletter 1911"]]) + ).toThrow(); }); -it('does not transform invalid flex', () => { - expect(() => transformCss([['flex', '1 2px 3']])).toThrow(); +it("does not transform invalid flex", () => { + expect(() => transformCss([["flex", "1 2px 3"]])).toThrow(); }); -it('transforms box-shadow into shadow- properties', () => runTest([ - ['box-shadow', '10px 20px 30px red'], -], { - shadowOffset: { width: 10, height: 20 }, - shadowRadius: 30, - shadowColor: 'red', - shadowOpacity: 1, -})); - -it('transforms box-shadow without blur-radius', () => runTest([ - ['box-shadow', '10px 20px red'], -], { - shadowOffset: { width: 10, height: 20 }, - shadowRadius: 0, - shadowColor: 'red', - shadowOpacity: 1, -})); - -it('transforms box-shadow without color', () => runTest([ - ['box-shadow', '10px 20px 30px'], -], { - shadowOffset: { width: 10, height: 20 }, - shadowRadius: 30, - shadowColor: 'black', - shadowOpacity: 1, -})); - -it('transforms box-shadow without blur-radius, color', () => runTest([ - ['box-shadow', '10px 20px'], -], { - shadowOffset: { width: 10, height: 20 }, - shadowRadius: 0, - shadowColor: 'black', - shadowOpacity: 1, -})); - -it('transforms box-shadow with rgb color', () => runTest([ - ['box-shadow', '10px 20px rgb(100, 100, 100)'], -], { - shadowOffset: { width: 10, height: 20 }, - shadowRadius: 0, - shadowColor: 'rgb(100, 100, 100)', - shadowOpacity: 1, -})); - -it('transforms box-shadow with rgba color', () => runTest([ - ['box-shadow', '10px 20px rgba(100, 100, 100, 0.5)'], -], { - shadowOffset: { width: 10, height: 20 }, - shadowRadius: 0, - shadowColor: 'rgba(100, 100, 100, 0.5)', - shadowOpacity: 1, -})); - -it('transforms box-shadow with hsl color', () => runTest([ - ['box-shadow', '10px 20px hsl(120, 100%, 50%)'], -], { - shadowOffset: { width: 10, height: 20 }, - shadowRadius: 0, - shadowColor: 'hsl(120, 100%, 50%)', - shadowOpacity: 1, -})); - -it('transforms box-shadow with hsla color', () => runTest([ - ['box-shadow', '10px 20px hsla(120, 100%, 50%, 0.7)'], -], { - shadowOffset: { width: 10, height: 20 }, - shadowRadius: 0, - shadowColor: 'hsla(120, 100%, 50%, 0.7)', - shadowOpacity: 1, -})); - -it('transforms box-shadow and throws if multiple colors are used', () => { - expect(() => transformCss([['box-shadow', '0 0 0 red yellow green blue']])) - .toThrow('Failed to parse declaration "boxShadow: 0 0 0 red yellow green blue"'); +it("transforms box-shadow into shadow- properties", () => + runTest([["box-shadow", "10px 20px 30px red"]], { + shadowOffset: { width: 10, height: 20 }, + shadowRadius: 30, + shadowColor: "red", + shadowOpacity: 1 + })); + +it("transforms box-shadow without blur-radius", () => + runTest([["box-shadow", "10px 20px red"]], { + shadowOffset: { width: 10, height: 20 }, + shadowRadius: 0, + shadowColor: "red", + shadowOpacity: 1 + })); + +it("transforms box-shadow without color", () => + runTest([["box-shadow", "10px 20px 30px"]], { + shadowOffset: { width: 10, height: 20 }, + shadowRadius: 30, + shadowColor: "black", + shadowOpacity: 1 + })); + +it("transforms box-shadow without blur-radius, color", () => + runTest([["box-shadow", "10px 20px"]], { + shadowOffset: { width: 10, height: 20 }, + shadowRadius: 0, + shadowColor: "black", + shadowOpacity: 1 + })); + +it("transforms box-shadow with rgb color", () => + runTest([["box-shadow", "10px 20px rgb(100, 100, 100)"]], { + shadowOffset: { width: 10, height: 20 }, + shadowRadius: 0, + shadowColor: "rgb(100, 100, 100)", + shadowOpacity: 1 + })); + +it("transforms box-shadow with rgba color", () => + runTest([["box-shadow", "10px 20px rgba(100, 100, 100, 0.5)"]], { + shadowOffset: { width: 10, height: 20 }, + shadowRadius: 0, + shadowColor: "rgba(100, 100, 100, 0.5)", + shadowOpacity: 1 + })); + +it("transforms box-shadow with hsl color", () => + runTest([["box-shadow", "10px 20px hsl(120, 100%, 50%)"]], { + shadowOffset: { width: 10, height: 20 }, + shadowRadius: 0, + shadowColor: "hsl(120, 100%, 50%)", + shadowOpacity: 1 + })); + +it("transforms box-shadow with hsla color", () => + runTest([["box-shadow", "10px 20px hsla(120, 100%, 50%, 0.7)"]], { + shadowOffset: { width: 10, height: 20 }, + shadowRadius: 0, + shadowColor: "hsla(120, 100%, 50%, 0.7)", + shadowOpacity: 1 + })); + +it("transforms box-shadow and throws if multiple colors are used", () => { + expect(() => + transformCss([["box-shadow", "0 0 0 red yellow green blue"]]) + ).toThrow( + 'Failed to parse declaration "boxShadow: 0 0 0 red yellow green blue"' + ); }); -it('transforms box-shadow enforces offset to be present', () => { - expect(() => transformCss([['box-shadow', 'red']])) - .toThrow('Failed to parse declaration "boxShadow: red"'); +it("transforms box-shadow enforces offset to be present", () => { + expect(() => transformCss([["box-shadow", "red"]])).toThrow( + 'Failed to parse declaration "boxShadow: red"' + ); }); -it('transforms box-shadow and enforces offset-y if offset-x present', () => { - expect(() => transformCss([['box-shadow', '10px']])) - .toThrow('Failed to parse declaration "boxShadow: 10px"'); +it("transforms box-shadow and enforces offset-y if offset-x present", () => { + expect(() => transformCss([["box-shadow", "10px"]])).toThrow( + 'Failed to parse declaration "boxShadow: 10px"' + ); }); -it('allows blacklisting shorthands', () => { - const actualStyles = transformCss([['border-radius', '50']], ['borderRadius']); +it("allows blacklisting shorthands", () => { + const actualStyles = transformCss( + [["border-radius", "50"]], + ["borderRadius"] + ); expect(actualStyles).toEqual({ borderRadius: 50 }); }); -it('throws useful errors', () => { - expect(() => transformCss([['margin', '10']])) - .toThrow('Failed to parse declaration "margin: 10"'); +it("throws useful errors", () => { + expect(() => transformCss([["margin", "10"]])).toThrow( + 'Failed to parse declaration "margin: 10"' + ); }); diff --git a/src/tokenTypes.js b/src/tokenTypes.js index 0d1216e..891a518 100644 --- a/src/tokenTypes.js +++ b/src/tokenTypes.js @@ -1,22 +1,25 @@ -const { stringify } = require('postcss-value-parser'); -const cssColorKeywords = require('css-color-keywords'); +const { stringify } = require("postcss-value-parser"); +const cssColorKeywords = require("css-color-keywords"); -const matchString = (node) => { - if (node.type !== 'string') return null; +const matchString = node => { + if (node.type !== "string") return null; return node.value - .replace(/\\([0-9a-f]{1,6})(?:\s|$)/gi, (match, charCode) => ( + .replace(/\\([0-9a-f]{1,6})(?:\s|$)/gi, (match, charCode) => String.fromCharCode(parseInt(charCode, 16)) - )) - .replace(/\\/g, ''); + ) + .replace(/\\/g, ""); }; const hexColorRe = /^(#(?:[0-9a-f]{3,4}){1,2})$/i; const cssFunctionNameRe = /^(rgba?|hsla?|hwb|lab|lch|gray|color)$/; -const matchColor = (node) => { - if (node.type === 'word' && (hexColorRe.test(node.value) || node.value in cssColorKeywords)) { +const matchColor = node => { + if ( + node.type === "word" && + (hexColorRe.test(node.value) || node.value in cssColorKeywords) + ) { return node.value; - } else if (node.type === 'function' && cssFunctionNameRe.test(node.value)) { + } else if (node.type === "function" && cssFunctionNameRe.test(node.value)) { return stringify(node); } return null; @@ -32,12 +35,13 @@ const lengthRe = /^(0$|(?:[+-]?(?:\d*\.)?\d+(?:[Ee][+-]?\d+)?)(?=px$))/; const angleRe = /^([+-]?(?:\d*\.)?\d+(?:[Ee][+-]?\d+)?(?:deg|rad))$/; const percentRe = /^([+-]?(?:\d*\.)?\d+(?:[Ee][+-]?\d+)?%)$/; -const noopToken = predicate => node => (predicate(node) ? '' : null); +const noopToken = predicate => node => (predicate(node) ? "" : null); -const valueForTypeToken = type => node => (node.type === type ? node.value : null); +const valueForTypeToken = type => node => + node.type === type ? node.value : null; -const regExpToken = (regExp, transform = String) => (node) => { - if (node.type !== 'word') return null; +const regExpToken = (regExp, transform = String) => node => { + if (node.type !== "word") return null; const match = node.value.match(regExp); if (match === null) return null; @@ -50,10 +54,10 @@ const regExpToken = (regExp, transform = String) => (node) => { module.exports.regExpToken = regExpToken; module.exports.tokens = { - SPACE: noopToken(node => node.type === 'space'), - SLASH: noopToken(node => node.type === 'div' && node.value === '/'), - COMMA: noopToken(node => node.type === 'div' && node.value === ','), - WORD: valueForTypeToken('word'), + SPACE: noopToken(node => node.type === "space"), + SLASH: noopToken(node => node.type === "div" && node.value === "/"), + COMMA: noopToken(node => node.type === "div" && node.value === ","), + WORD: valueForTypeToken("word"), NONE: regExpToken(noneRe), AUTO: regExpToken(autoRe), NUMBER: regExpToken(numberRe, Number), @@ -62,5 +66,5 @@ module.exports.tokens = { PERCENT: regExpToken(percentRe), IDENT: regExpToken(identRe), STRING: matchString, - COLOR: matchColor, + COLOR: matchColor }; diff --git a/src/transforms/boxShadow.js b/src/transforms/boxShadow.js index f0198e2..f687991 100644 --- a/src/transforms/boxShadow.js +++ b/src/transforms/boxShadow.js @@ -1,8 +1,8 @@ -const { tokens } = require('../tokenTypes'); +const { tokens } = require("../tokenTypes"); const { NONE, SPACE, COLOR, LENGTH } = tokens; -module.exports = (tokenStream) => { +module.exports = tokenStream => { let offsetX; let offsetY; let blurRadius; @@ -11,7 +11,12 @@ module.exports = (tokenStream) => { if (tokenStream.matches(NONE)) { tokenStream.expectEmpty(); return { - $merge: { shadowOffset: { width: 0, height: 0 }, shadowRadius: 0, shadowColor: 'black', shadowOpacity: 1 }, + $merge: { + shadowOffset: { width: 0, height: 0 }, + shadowRadius: 0, + shadowColor: "black", + shadowOpacity: 1 + } }; } @@ -24,9 +29,11 @@ module.exports = (tokenStream) => { tokenStream.expect(SPACE); offsetY = tokenStream.expect(LENGTH); - if (tokenStream.lookAhead().matches(LENGTH)) { - tokenStream.expect(SPACE); - blurRadius = tokenStream.expect(LENGTH); + tokenStream.saveRewindPoint(); + if (tokenStream.matches(SPACE) && tokenStream.matches(LENGTH)) { + blurRadius = tokenStream.lastValue; + } else { + tokenStream.rewind(); } } else if (color === undefined && tokenStream.matches(COLOR)) { color = tokenStream.lastValue; @@ -42,8 +49,8 @@ module.exports = (tokenStream) => { const $merge = { shadowOffset: { width: offsetX, height: offsetY }, shadowRadius: blurRadius !== undefined ? blurRadius : 0, - shadowColor: color !== undefined ? color : 'black', - shadowOpacity: 1, + shadowColor: color !== undefined ? color : "black", + shadowOpacity: 1 }; return { $merge }; }; diff --git a/src/transforms/flex.js b/src/transforms/flex.js index b76fdf8..e819560 100644 --- a/src/transforms/flex.js +++ b/src/transforms/flex.js @@ -1,4 +1,4 @@ -const { tokens } = require('../tokenTypes'); +const { tokens } = require("../tokenTypes"); const { NONE, AUTO, NUMBER, LENGTH, SPACE } = tokens; @@ -8,7 +8,7 @@ const defaultFlexBasis = 0; const FLEX_BASIS_AUTO = {}; // Used for reference equality -module.exports = (tokenStream) => { +module.exports = tokenStream => { let flexGrow; let flexShrink; let flexBasis; @@ -16,9 +16,13 @@ module.exports = (tokenStream) => { if (tokenStream.matches(NONE)) { tokenStream.expectEmpty(); return { $merge: { flexGrow: 0, flexShrink: 0 } }; - } else if (tokenStream.test(AUTO) && !tokenStream.lookAhead().hasTokens()) { + } + + tokenStream.saveRewindPoint(); + if (tokenStream.matches(AUTO) && !tokenStream.hasTokens()) { return { $merge: { flexGrow: 1, flexShrink: 1 } }; } + tokenStream.rewind(); let partsParsed = 0; while (partsParsed < 2 && tokenStream.hasTokens()) { @@ -27,9 +31,11 @@ module.exports = (tokenStream) => { if (flexGrow === undefined && tokenStream.matches(NUMBER)) { flexGrow = tokenStream.lastValue; - if (tokenStream.lookAhead().matches(NUMBER)) { - tokenStream.expect(SPACE); - flexShrink = tokenStream.expect(NUMBER); + tokenStream.saveRewindPoint(); + if (tokenStream.matches(SPACE) && tokenStream.matches(NUMBER)) { + flexShrink = tokenStream.lastValue; + } else { + tokenStream.rewind(); } } else if (flexBasis === undefined && tokenStream.matches(LENGTH)) { flexBasis = tokenStream.lastValue; diff --git a/src/transforms/font.js b/src/transforms/font.js index c7b02e6..5f2991e 100644 --- a/src/transforms/font.js +++ b/src/transforms/font.js @@ -1,5 +1,5 @@ -const parseFontFamily = require('./fontFamily'); -const { regExpToken, tokens } = require('../tokenTypes'); +const parseFontFamily = require("./fontFamily"); +const { regExpToken, tokens } = require("../tokenTypes"); const { SPACE, LENGTH, NUMBER, SLASH } = tokens; const NORMAL = regExpToken(/^(normal)$/); @@ -7,11 +7,11 @@ const STYLE = regExpToken(/^(italic)$/); const WEIGHT = regExpToken(/^([1-9]00|bold)$/); const VARIANT = regExpToken(/^(small-caps)$/); -const defaultFontStyle = 'normal'; -const defaultFontWeight = 'normal'; +const defaultFontStyle = "normal"; +const defaultFontWeight = "normal"; const defaultFontVariant = []; -module.exports = (tokenStream) => { +module.exports = tokenStream => { let fontStyle; let fontWeight; let fontVariant; diff --git a/src/transforms/fontFamily.js b/src/transforms/fontFamily.js index 3b3f368..f3449a8 100644 --- a/src/transforms/fontFamily.js +++ b/src/transforms/fontFamily.js @@ -1,8 +1,8 @@ -const { tokens } = require('../tokenTypes'); +const { tokens } = require("../tokenTypes"); const { SPACE, IDENT, STRING } = tokens; -module.exports = (tokenStream) => { +module.exports = tokenStream => { let fontFamily; if (tokenStream.matches(STRING)) { diff --git a/src/transforms/index.js b/src/transforms/index.js index 960e229..e241d7f 100644 --- a/src/transforms/index.js +++ b/src/transforms/index.js @@ -1,50 +1,56 @@ -const { regExpToken, tokens } = require('../tokenTypes'); -const boxShadow = require('./boxShadow'); -const flex = require('./flex'); -const font = require('./font'); -const fontFamily = require('./fontFamily'); -const transform = require('./transform'); -const { directionFactory, anyOrderFactory, shadowOffsetFactory } = require('./util'); +const { regExpToken, tokens } = require("../tokenTypes"); +const boxShadow = require("./boxShadow"); +const flex = require("./flex"); +const font = require("./font"); +const fontFamily = require("./fontFamily"); +const transform = require("./transform"); +const { + directionFactory, + anyOrderFactory, + shadowOffsetFactory +} = require("./util"); const { IDENT, WORD, COLOR } = tokens; -const background = tokenStream => ({ $merge: { backgroundColor: tokenStream.expect(COLOR) } }); +const background = tokenStream => ({ + $merge: { backgroundColor: tokenStream.expect(COLOR) } +}); const border = anyOrderFactory({ borderWidth: { token: tokens.LENGTH, - default: 1, + default: 1 }, borderColor: { token: COLOR, - default: 'black', + default: "black" }, borderStyle: { token: regExpToken(/^(solid|dashed|dotted)$/), - default: 'solid', - }, + default: "solid" + } }); const borderColor = directionFactory({ types: [WORD], - prefix: 'border', - suffix: 'Color', + prefix: "border", + suffix: "Color" }); const borderRadius = directionFactory({ - directions: ['TopRight', 'BottomRight', 'BottomLeft', 'TopLeft'], - prefix: 'border', - suffix: 'Radius', + directions: ["TopRight", "BottomRight", "BottomLeft", "TopLeft"], + prefix: "border", + suffix: "Radius" }); -const borderWidth = directionFactory({ prefix: 'border', suffix: 'Width' }); -const margin = directionFactory({ prefix: 'margin' }); -const padding = directionFactory({ prefix: 'padding' }); +const borderWidth = directionFactory({ prefix: "border", suffix: "Width" }); +const margin = directionFactory({ prefix: "margin" }); +const padding = directionFactory({ prefix: "padding" }); const flexFlow = anyOrderFactory({ flexWrap: { token: regExpToken(/(nowrap|wrap|wrap-reverse)/), - default: 'nowrap', + default: "nowrap" }, flexDirection: { token: regExpToken(/(row|row-reverse|column|column-reverse)/), - default: 'row', - }, + default: "row" + } }); const fontVariant = tokenStream => [tokenStream.expect(IDENT)]; const fontWeight = tokenStream => tokenStream.expect(WORD); // Also match numbers as strings @@ -68,5 +74,5 @@ module.exports = { padding, shadowOffset, textShadowOffset, - transform, + transform }; diff --git a/src/transforms/transform.js b/src/transforms/transform.js index 5b434c7..5ba89aa 100644 --- a/src/transforms/transform.js +++ b/src/transforms/transform.js @@ -1,8 +1,8 @@ -const { tokens } = require('../tokenTypes'); +const { tokens } = require("../tokenTypes"); const { SPACE, COMMA, LENGTH, NUMBER, ANGLE } = tokens; -const oneOfType = tokenType => (functionStream) => { +const oneOfType = tokenType => functionStream => { const value = functionStream.expect(tokenType); functionStream.expectEmpty(); return value; @@ -11,7 +11,10 @@ const oneOfType = tokenType => (functionStream) => { const singleNumber = oneOfType(NUMBER); const singleLength = oneOfType(LENGTH); const singleAngle = oneOfType(ANGLE); -const xyTransformFactory = tokenType => (key, valueIfOmitted) => (functionStream) => { +const xyTransformFactory = tokenType => ( + key, + valueIfOmitted +) => functionStream => { const x = functionStream.expect(tokenType); let y; @@ -36,10 +39,10 @@ const xyAngle = xyTransformFactory(ANGLE); const partTransforms = { perspective: singleNumber, - scale: xyNumber('scale'), + scale: xyNumber("scale"), scaleX: singleNumber, scaleY: singleNumber, - translate: xyLength('translate', 0), + translate: xyLength("translate", 0), translateX: singleLength, translateY: singleLength, rotate: singleAngle, @@ -48,10 +51,10 @@ const partTransforms = { rotateZ: singleAngle, skewX: singleAngle, skewY: singleAngle, - skew: xyAngle('skew', '0deg'), + skew: xyAngle("skew", "0deg") }; -module.exports = (tokenStream) => { +module.exports = tokenStream => { let transforms = []; let didParseFirst = false; @@ -59,10 +62,10 @@ module.exports = (tokenStream) => { if (didParseFirst) tokenStream.expect(SPACE); const functionStream = tokenStream.expectFunction(); - const transformName = functionStream.parent.value; - let transformedValues = partTransforms[transformName](functionStream); + const { functionName } = functionStream; + let transformedValues = partTransforms[functionName](functionStream); if (!Array.isArray(transformedValues)) { - transformedValues = [{ [transformName]: transformedValues }]; + transformedValues = [{ [functionName]: transformedValues }]; } transforms = transformedValues.concat(transforms); diff --git a/src/transforms/util.js b/src/transforms/util.js index 03bdcf1..2a4038e 100644 --- a/src/transforms/util.js +++ b/src/transforms/util.js @@ -1,13 +1,13 @@ -const { tokens } = require('../tokenTypes'); +const { tokens } = require("../tokenTypes"); const { LENGTH, PERCENT, SPACE } = tokens; module.exports.directionFactory = ({ types = [LENGTH, PERCENT], - directions = ['Top', 'Right', 'Bottom', 'Left'], - prefix = '', - suffix = '', -}) => (tokenStream) => { + directions = ["Top", "Right", "Bottom", "Left"], + prefix = "", + suffix = "" +}) => tokenStream => { const values = []; // borderWidth doesn't currently allow a percent value, but may do in the future @@ -28,13 +28,13 @@ module.exports.directionFactory = ({ [keyFor(0)]: top, [keyFor(1)]: right, [keyFor(2)]: bottom, - [keyFor(3)]: left, + [keyFor(3)]: left }; return { $merge: output }; }; -module.exports.anyOrderFactory = (properties, delim = SPACE) => (tokenStream) => { +module.exports.anyOrderFactory = (properties, delim = SPACE) => tokenStream => { const propertyNames = Object.keys(properties); const values = propertyNames.reduce((accum, propertyName) => { accum[propertyName] === undefined; // eslint-disable-line @@ -45,9 +45,11 @@ module.exports.anyOrderFactory = (properties, delim = SPACE) => (tokenStream) => while (numParsed < propertyNames.length && tokenStream.hasTokens()) { if (numParsed) tokenStream.expect(delim); - const matchedPropertyName = propertyNames.find(propertyName => ( - values[propertyName] === undefined && tokenStream.matches(properties[propertyName].token) - )); + const matchedPropertyName = propertyNames.find( + propertyName => + values[propertyName] === undefined && + tokenStream.matches(properties[propertyName].token) + ); if (!matchedPropertyName) { tokenStream.throw(); @@ -60,14 +62,15 @@ module.exports.anyOrderFactory = (properties, delim = SPACE) => (tokenStream) => tokenStream.expectEmpty(); - propertyNames.forEach((propertyName) => { - if (values[propertyName] === undefined) values[propertyName] = properties[propertyName].default; + propertyNames.forEach(propertyName => { + if (values[propertyName] === undefined) + values[propertyName] = properties[propertyName].default; }); return { $merge: values }; }; -module.exports.shadowOffsetFactory = () => (tokenStream) => { +module.exports.shadowOffsetFactory = () => tokenStream => { const width = tokenStream.expect(LENGTH); const height = tokenStream.matches(SPACE) ? tokenStream.expect(LENGTH) diff --git a/yarn.lock b/yarn.lock index 62ec6e2..a5f7203 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1078,6 +1078,12 @@ eslint-config-airbnb-base@^10.0.1: version "10.0.1" resolved "https://registry.yarnpkg.com/eslint-config-airbnb-base/-/eslint-config-airbnb-base-10.0.1.tgz#f17d4e52992c1d45d1b7713efbcd5ecd0e7e0506" +eslint-config-prettier@^2.9.0: + version "2.9.0" + resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-2.9.0.tgz#5ecd65174d486c22dff389fe036febf502d468a3" + dependencies: + get-stdin "^5.0.1" + eslint-import-resolver-node@^0.2.0: version "0.2.3" resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.2.3.tgz#5add8106e8c928db2cba232bcd9efa846e3da16c" @@ -1387,6 +1393,10 @@ get-caller-file@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.2.tgz#f702e63127e7e231c160a80c1554acb70d5047e5" +get-stdin@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-5.0.1.tgz#122e161591e21ff4c52530305693f20e6393a398" + getpass@^0.1.1: version "0.1.6" resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.6.tgz#283ffd9fc1256840875311c1b60e8c40187110e6" @@ -2556,6 +2566,10 @@ preserve@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b" +prettier@^1.10.2: + version "1.10.2" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.10.2.tgz#1af8356d1842276a99a5b5529c82dd9e9ad3cc93" + pretty-format@~4.2.1: version "4.2.3" resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-4.2.3.tgz#8894c2ac81419cf801629d8f66320a25380d8b05" From 4db60e4a1d93f0816f7afef661e07eda8ce4e3f8 Mon Sep 17 00:00:00 2001 From: Jacob Parker Date: Sun, 4 Feb 2018 18:28:25 +0000 Subject: [PATCH 17/83] Update prettier to match main repo --- .prettierrc | 5 + .travis.yml | 1 - src/TokenStream.js | 66 +-- src/index.js | 74 ++-- src/index.test.js | 815 +++++++++++++++++------------------ src/tokenTypes.js | 70 +-- src/transforms/boxShadow.js | 56 +-- src/transforms/flex.js | 60 +-- src/transforms/font.js | 66 +-- src/transforms/fontFamily.js | 22 +- src/transforms/index.js | 72 ++-- src/transforms/transform.js | 72 ++-- src/transforms/util.js | 74 ++-- 13 files changed, 726 insertions(+), 727 deletions(-) create mode 100644 .prettierrc diff --git a/.prettierrc b/.prettierrc new file mode 100644 index 0000000..36301bc --- /dev/null +++ b/.prettierrc @@ -0,0 +1,5 @@ +{ + "semi": false, + "singleQuote": true, + "trailingComma": "es5" +} diff --git a/.travis.yml b/.travis.yml index 03c7111..467b86f 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,4 +1,3 @@ - language: node_js dist: trusty node_js: diff --git a/src/TokenStream.js b/src/TokenStream.js index bcbbfa0..4dd8a48 100644 --- a/src/TokenStream.js +++ b/src/TokenStream.js @@ -1,74 +1,74 @@ -const SYMBOL_MATCH = "SYMBOL_MATCH"; +const SYMBOL_MATCH = 'SYMBOL_MATCH' module.exports = class TokenStream { constructor(nodes, parent) { - this.index = 0; - this.nodes = nodes; - this.functionName = parent != null ? parent.value : null; - this.lastValue = null; - this.rewindIndex = -1; + this.index = 0 + this.nodes = nodes + this.functionName = parent != null ? parent.value : null + this.lastValue = null + this.rewindIndex = -1 } hasTokens() { - return this.index <= this.nodes.length - 1; + return this.index <= this.nodes.length - 1 } [SYMBOL_MATCH](...tokenDescriptors) { - if (!this.hasTokens()) return null; + if (!this.hasTokens()) return null - const node = this.nodes[this.index]; + const node = this.nodes[this.index] for (let i = 0; i < tokenDescriptors.length; i += 1) { - const tokenDescriptor = tokenDescriptors[i]; - const value = tokenDescriptor(node); + const tokenDescriptor = tokenDescriptors[i] + const value = tokenDescriptor(node) if (value !== null) { - this.index += 1; - this.lastValue = value; - return value; + this.index += 1 + this.lastValue = value + return value } } - return null; + return null } matches(...tokenDescriptors) { - return this[SYMBOL_MATCH](...tokenDescriptors) !== null; + return this[SYMBOL_MATCH](...tokenDescriptors) !== null } expect(...tokenDescriptors) { - const value = this[SYMBOL_MATCH](...tokenDescriptors); - return value !== null ? value : this.throw(); + const value = this[SYMBOL_MATCH](...tokenDescriptors) + return value !== null ? value : this.throw() } matchesFunction() { - const node = this.nodes[this.index]; - if (node.type !== "function") return null; - const value = new TokenStream(node.nodes, node); - this.index += 1; - this.lastValue = null; - return value; + const node = this.nodes[this.index] + if (node.type !== 'function') return null + const value = new TokenStream(node.nodes, node) + this.index += 1 + this.lastValue = null + return value } expectFunction() { - const value = this.matchesFunction(); - return value !== null ? value : this.throw(); + const value = this.matchesFunction() + return value !== null ? value : this.throw() } expectEmpty() { - if (this.hasTokens()) this.throw(); + if (this.hasTokens()) this.throw() } throw() { - throw new Error(`Unexpected token type: ${this.nodes[this.index].type}`); + throw new Error(`Unexpected token type: ${this.nodes[this.index].type}`) } saveRewindPoint() { - this.rewindIndex = this.index; + this.rewindIndex = this.index } rewind() { - if (this.rewindIndex === -1) throw new Error("Internal error"); - this.index = this.rewindIndex; - this.lastValue = null; + if (this.rewindIndex === -1) throw new Error('Internal error') + this.index = this.rewindIndex + this.lastValue = null } -}; +} diff --git a/src/index.js b/src/index.js index 8fa30fe..5ade741 100644 --- a/src/index.js +++ b/src/index.js @@ -1,73 +1,73 @@ /* eslint-disable no-param-reassign */ -const parse = require("postcss-value-parser"); -const camelizeStyleName = require("fbjs/lib/camelizeStyleName"); -const transforms = require("./transforms"); -const TokenStream = require("./TokenStream"); +const parse = require('postcss-value-parser') +const camelizeStyleName = require('fbjs/lib/camelizeStyleName') +const transforms = require('./transforms') +const TokenStream = require('./TokenStream') // Note if this is wrong, you'll need to change tokenTypes.js too -const numberOrLengthRe = /^([+-]?(?:\d*\.)?\d+(?:[Ee][+-]?\d+)?)(?:px)?$/i; -const boolRe = /^true|false$/i; -const nullRe = /^null$/i; -const undefinedRe = /^undefined$/i; +const numberOrLengthRe = /^([+-]?(?:\d*\.)?\d+(?:[Ee][+-]?\d+)?)(?:px)?$/i +const boolRe = /^true|false$/i +const nullRe = /^null$/i +const undefinedRe = /^undefined$/i // Undocumented export export const transformRawValue = input => { - const value = input.trim(); + const value = input.trim() - const numberMatch = value.match(numberOrLengthRe); - if (numberMatch !== null) return Number(numberMatch[1]); + const numberMatch = value.match(numberOrLengthRe) + if (numberMatch !== null) return Number(numberMatch[1]) - const boolMatch = input.match(boolRe); - if (boolMatch !== null) return boolMatch[0].toLowerCase() === "true"; + const boolMatch = input.match(boolRe) + if (boolMatch !== null) return boolMatch[0].toLowerCase() === 'true' - const nullMatch = input.match(nullRe); - if (nullMatch !== null) return null; + const nullMatch = input.match(nullRe) + if (nullMatch !== null) return null - const undefinedMatch = input.match(undefinedRe); - if (undefinedMatch !== null) return undefined; + const undefinedMatch = input.match(undefinedRe) + if (undefinedMatch !== null) return undefined - return value; -}; + return value +} const baseTransformShorthandValue = (propName, inputValue) => { - const ast = parse(inputValue.trim()); - const tokenStream = new TokenStream(ast.nodes); - return transforms[propName](tokenStream); -}; + const ast = parse(inputValue.trim()) + const tokenStream = new TokenStream(ast.nodes) + return transforms[propName](tokenStream) +} const transformShorthandValue = - process.env.NODE_ENV === "production" + process.env.NODE_ENV === 'production' ? baseTransformShorthandValue : (propName, inputValue) => { try { - return baseTransformShorthandValue(propName, inputValue); + return baseTransformShorthandValue(propName, inputValue) } catch (e) { throw new Error( `Failed to parse declaration "${propName}: ${inputValue}"` - ); + ) } - }; + } export const getStylesForProperty = (propName, inputValue, allowShorthand) => { - const isRawValue = allowShorthand === false || !(propName in transforms); + const isRawValue = allowShorthand === false || !(propName in transforms) const propValue = isRawValue ? transformRawValue(inputValue) - : transformShorthandValue(propName, inputValue.trim()); + : transformShorthandValue(propName, inputValue.trim()) return propValue && propValue.$merge ? propValue.$merge - : { [propName]: propValue }; -}; + : { [propName]: propValue } +} -export const getPropertyName = camelizeStyleName; +export const getPropertyName = camelizeStyleName export default (rules, shorthandBlacklist = []) => rules.reduce((accum, rule) => { - const propertyName = getPropertyName(rule[0]); - const value = rule[1]; - const allowShorthand = shorthandBlacklist.indexOf(propertyName) === -1; + const propertyName = getPropertyName(rule[0]) + const value = rule[1] + const allowShorthand = shorthandBlacklist.indexOf(propertyName) === -1 return Object.assign( accum, getStylesForProperty(propertyName, value, allowShorthand) - ); - }, {}); + ) + }, {}) diff --git a/src/index.test.js b/src/index.test.js index 2222c61..3375f70 100644 --- a/src/index.test.js +++ b/src/index.test.js @@ -1,572 +1,569 @@ /* global jest it, expect */ -import transformCss, { getStylesForProperty } from "."; +import transformCss, { getStylesForProperty } from '.' const runTest = (inputCss, expectedStyles) => { - const actualStyles = transformCss(inputCss); - expect(actualStyles).toEqual(expectedStyles); -}; + const actualStyles = transformCss(inputCss) + expect(actualStyles).toEqual(expectedStyles) +} -it("transforms numbers", () => - runTest([["top", "0"], ["left", "0"], ["right", "0"], ["bottom", "0"]], { +it('transforms numbers', () => + runTest([['top', '0'], ['left', '0'], ['right', '0'], ['bottom', '0']], { top: 0, left: 0, right: 0, - bottom: 0 - })); + bottom: 0, + })) -it("allows pixels in unspecialized transform", () => - runTest([["top", "0px"]], { top: 0 })); +it('allows pixels in unspecialized transform', () => + runTest([['top', '0px']], { top: 0 })) -it("allows boolean values", () => +it('allows boolean values', () => runTest( [ - ["boolTrue1", "true"], - ["boolTrue2", "TRUE"], - ["boolFalse1", "false"], - ["boolFalse2", "FALSE"] + ['boolTrue1', 'true'], + ['boolTrue2', 'TRUE'], + ['boolFalse1', 'false'], + ['boolFalse2', 'FALSE'], ], { boolTrue1: true, boolTrue2: true, boolFalse1: false, - boolFalse2: false + boolFalse2: false, } - )); + )) -it("allows null values", () => - runTest([["null1", "null"], ["null2", "NULL"]], { +it('allows null values', () => + runTest([['null1', 'null'], ['null2', 'NULL']], { null1: null, - null2: null - })); + null2: null, + })) -it("allows undefined values", () => - runTest([["undefined1", "undefined"], ["undefined2", "UNDEFINED"]], { +it('allows undefined values', () => + runTest([['undefined1', 'undefined'], ['undefined2', 'UNDEFINED']], { undefined1: undefined, - undefined2: undefined - })); - -it("allows percent in unspecialized transform", () => - runTest([["top", "0%"]], { top: "0%" })); - -it("allows decimal values", () => { - expect(getStylesForProperty("margin", "0.5px").marginTop).toBe(0.5); - expect(getStylesForProperty("margin", "1.5px").marginTop).toBe(1.5); - expect(getStylesForProperty("margin", "10.5px").marginTop).toBe(10.5); - expect(getStylesForProperty("margin", "100.5px").marginTop).toBe(100.5); - expect(getStylesForProperty("margin", "-0.5px").marginTop).toBe(-0.5); - expect(getStylesForProperty("margin", "-1.5px").marginTop).toBe(-1.5); - expect(getStylesForProperty("margin", "-10.5px").marginTop).toBe(-10.5); - expect(getStylesForProperty("margin", "-100.5px").marginTop).toBe(-100.5); - expect(getStylesForProperty("margin", ".5px").marginTop).toBe(0.5); - expect(getStylesForProperty("margin", "-.5px").marginTop).toBe(-0.5); -}); - -it("allows decimal values in transformed values", () => - runTest([["border-radius", "1.5px"]], { + undefined2: undefined, + })) + +it('allows percent in unspecialized transform', () => + runTest([['top', '0%']], { top: '0%' })) + +it('allows decimal values', () => { + expect(getStylesForProperty('margin', '0.5px').marginTop).toBe(0.5) + expect(getStylesForProperty('margin', '1.5px').marginTop).toBe(1.5) + expect(getStylesForProperty('margin', '10.5px').marginTop).toBe(10.5) + expect(getStylesForProperty('margin', '100.5px').marginTop).toBe(100.5) + expect(getStylesForProperty('margin', '-0.5px').marginTop).toBe(-0.5) + expect(getStylesForProperty('margin', '-1.5px').marginTop).toBe(-1.5) + expect(getStylesForProperty('margin', '-10.5px').marginTop).toBe(-10.5) + expect(getStylesForProperty('margin', '-100.5px').marginTop).toBe(-100.5) + expect(getStylesForProperty('margin', '.5px').marginTop).toBe(0.5) + expect(getStylesForProperty('margin', '-.5px').marginTop).toBe(-0.5) +}) + +it('allows decimal values in transformed values', () => + runTest([['border-radius', '1.5px']], { borderTopLeftRadius: 1.5, borderTopRightRadius: 1.5, borderBottomRightRadius: 1.5, - borderBottomLeftRadius: 1.5 - })); + borderBottomLeftRadius: 1.5, + })) -it("allows negative values in transformed values", () => - runTest([["border-radius", "-1.5px"]], { +it('allows negative values in transformed values', () => + runTest([['border-radius', '-1.5px']], { borderTopLeftRadius: -1.5, borderTopRightRadius: -1.5, borderBottomRightRadius: -1.5, - borderBottomLeftRadius: -1.5 - })); - -it("allows percent values in transformed values", () => - runTest([["margin", "10%"]], { - marginTop: "10%", - marginRight: "10%", - marginBottom: "10%", - marginLeft: "10%" - })); - -it("allows color values in transformed border-color values", () => - runTest([["border-color", "red"]], { - borderTopColor: "red", - borderRightColor: "red", - borderBottomColor: "red", - borderLeftColor: "red" - })); - -it("allows omitting units for 0", () => - runTest([["margin", "10px 0"]], { + borderBottomLeftRadius: -1.5, + })) + +it('allows percent values in transformed values', () => + runTest([['margin', '10%']], { + marginTop: '10%', + marginRight: '10%', + marginBottom: '10%', + marginLeft: '10%', + })) + +it('allows color values in transformed border-color values', () => + runTest([['border-color', 'red']], { + borderTopColor: 'red', + borderRightColor: 'red', + borderBottomColor: 'red', + borderLeftColor: 'red', + })) + +it('allows omitting units for 0', () => + runTest([['margin', '10px 0']], { marginTop: 10, marginRight: 0, marginBottom: 10, - marginLeft: 0 - })); + marginLeft: 0, + })) -it("transforms strings", () => runTest([["color", "red"]], { color: "red" })); +it('transforms strings', () => runTest([['color', 'red']], { color: 'red' })) -it("transforms hex colors", () => - runTest([["color", "#f00"]], { color: "#f00" })); +it('transforms hex colors', () => + runTest([['color', '#f00']], { color: '#f00' })) -it("transforms rgb colors", () => - runTest([["color", "rgb(255, 0, 0)"]], { color: "rgb(255, 0, 0)" })); +it('transforms rgb colors', () => + runTest([['color', 'rgb(255, 0, 0)']], { color: 'rgb(255, 0, 0)' })) -it("converts to camel-case", () => - runTest([["background-color", "red"]], { backgroundColor: "red" })); +it('converts to camel-case', () => + runTest([['background-color', 'red']], { backgroundColor: 'red' })) -it("transforms background to backgroundColor", () => - runTest([["background", "#f00"]], { backgroundColor: "#f00" })); +it('transforms background to backgroundColor', () => + runTest([['background', '#f00']], { backgroundColor: '#f00' })) -it("transforms background to backgroundColor with rgb", () => - runTest([["background", "rgb(255, 0, 0)"]], { - backgroundColor: "rgb(255, 0, 0)" - })); +it('transforms background to backgroundColor with rgb', () => + runTest([['background', 'rgb(255, 0, 0)']], { + backgroundColor: 'rgb(255, 0, 0)', + })) -it("transforms background to backgroundColor with named colour", () => - runTest([["background", "red"]], { backgroundColor: "red" })); +it('transforms background to backgroundColor with named colour', () => + runTest([['background', 'red']], { backgroundColor: 'red' })) -it("transforms font weights as strings", () => - runTest([["font-weight", " 400"]], { fontWeight: "400" })); +it('transforms font weights as strings', () => + runTest([['font-weight', ' 400']], { fontWeight: '400' })) -it("transforms font variant as an array", () => - runTest([["font-variant", "tabular-nums"]], { - fontVariant: ["tabular-nums"] - })); +it('transforms font variant as an array', () => + runTest([['font-variant', 'tabular-nums']], { + fontVariant: ['tabular-nums'], + })) -it("transforms shadow offsets", () => - runTest([["shadow-offset", "10px 5px"]], { - shadowOffset: { width: 10, height: 5 } - })); +it('transforms shadow offsets', () => + runTest([['shadow-offset', '10px 5px']], { + shadowOffset: { width: 10, height: 5 }, + })) -it("transforms text shadow offsets", () => - runTest([["text-shadow-offset", "10px 5px"]], { - textShadowOffset: { width: 10, height: 5 } - })); +it('transforms text shadow offsets', () => + runTest([['text-shadow-offset', '10px 5px']], { + textShadowOffset: { width: 10, height: 5 }, + })) -it("transforms a single transform value with number", () => - runTest([["transform", "scaleX(5)"]], { transform: [{ scaleX: 5 }] })); +it('transforms a single transform value with number', () => + runTest([['transform', 'scaleX(5)']], { transform: [{ scaleX: 5 }] })) -it("transforms a single transform value with string", () => - runTest([["transform", "rotate(5deg)"]], { - transform: [{ rotate: "5deg" }] - })); +it('transforms a single transform value with string', () => + runTest([['transform', 'rotate(5deg)']], { + transform: [{ rotate: '5deg' }], + })) -it("transforms multiple transform values", () => - runTest([["transform", "scaleX(5) skewX(1deg)"]], { - transform: [{ skewX: "1deg" }, { scaleX: 5 }] - })); +it('transforms multiple transform values', () => + runTest([['transform', 'scaleX(5) skewX(1deg)']], { + transform: [{ skewX: '1deg' }, { scaleX: 5 }], + })) -it("transforms scale(number, number) to scaleX and scaleY", () => - runTest([["transform", "scale(2, 3)"]], { - transform: [{ scaleY: 3 }, { scaleX: 2 }] - })); +it('transforms scale(number, number) to scaleX and scaleY', () => + runTest([['transform', 'scale(2, 3)']], { + transform: [{ scaleY: 3 }, { scaleX: 2 }], + })) -it("transforms scale(number) to scale", () => - runTest([["transform", "scale(5)"]], { transform: [{ scale: 5 }] })); +it('transforms scale(number) to scale', () => + runTest([['transform', 'scale(5)']], { transform: [{ scale: 5 }] })) -it("transforms translate(length, length) to translateX and translateY", () => - runTest([["transform", "translate(2px, 3px)"]], { - transform: [{ translateY: 3 }, { translateX: 2 }] - })); +it('transforms translate(length, length) to translateX and translateY', () => + runTest([['transform', 'translate(2px, 3px)']], { + transform: [{ translateY: 3 }, { translateX: 2 }], + })) -it("transforms translate(length) to translateX and translateY", () => - runTest([["transform", "translate(5px)"]], { - transform: [{ translateY: 0 }, { translateX: 5 }] - })); +it('transforms translate(length) to translateX and translateY', () => + runTest([['transform', 'translate(5px)']], { + transform: [{ translateY: 0 }, { translateX: 5 }], + })) -it("transforms skew(angle, angle) to skewX and skewY", () => - runTest([["transform", "skew(2deg, 3deg)"]], { - transform: [{ skewY: "3deg" }, { skewX: "2deg" }] - })); +it('transforms skew(angle, angle) to skewX and skewY', () => + runTest([['transform', 'skew(2deg, 3deg)']], { + transform: [{ skewY: '3deg' }, { skewX: '2deg' }], + })) -it("transforms skew(angle) to skewX and skewY", () => - runTest([["transform", "skew(5deg)"]], { - transform: [{ skewY: "0deg" }, { skewX: "5deg" }] - })); +it('transforms skew(angle) to skewX and skewY', () => + runTest([['transform', 'skew(5deg)']], { + transform: [{ skewY: '0deg' }, { skewX: '5deg' }], + })) -it("transforms border shorthand", () => - runTest([["border", "2px dashed #f00"]], { +it('transforms border shorthand', () => + runTest([['border', '2px dashed #f00']], { borderWidth: 2, - borderColor: "#f00", - borderStyle: "dashed" - })); + borderColor: '#f00', + borderStyle: 'dashed', + })) -it("transforms border shorthand in other order", () => - runTest([["border", "#f00 2px dashed"]], { +it('transforms border shorthand in other order', () => + runTest([['border', '#f00 2px dashed']], { borderWidth: 2, - borderColor: "#f00", - borderStyle: "dashed" - })); + borderColor: '#f00', + borderStyle: 'dashed', + })) -it("transforms border shorthand missing color", () => - runTest([["border", "2px dashed"]], { +it('transforms border shorthand missing color', () => + runTest([['border', '2px dashed']], { borderWidth: 2, - borderColor: "black", - borderStyle: "dashed" - })); + borderColor: 'black', + borderStyle: 'dashed', + })) -it("transforms border shorthand missing style", () => - runTest([["border", "2px #f00"]], { +it('transforms border shorthand missing style', () => + runTest([['border', '2px #f00']], { borderWidth: 2, - borderColor: "#f00", - borderStyle: "solid" - })); + borderColor: '#f00', + borderStyle: 'solid', + })) -it("transforms border shorthand missing width", () => - runTest([["border", "#f00 dashed"]], { +it('transforms border shorthand missing width', () => + runTest([['border', '#f00 dashed']], { borderWidth: 1, - borderColor: "#f00", - borderStyle: "dashed" - })); + borderColor: '#f00', + borderStyle: 'dashed', + })) -it("transforms border shorthand missing color & width", () => - runTest([["border", "dashed"]], { +it('transforms border shorthand missing color & width', () => + runTest([['border', 'dashed']], { borderWidth: 1, - borderColor: "black", - borderStyle: "dashed" - })); + borderColor: 'black', + borderStyle: 'dashed', + })) -it("transforms border shorthand missing style & width", () => - runTest([["border", "#f00"]], { +it('transforms border shorthand missing style & width', () => + runTest([['border', '#f00']], { borderWidth: 1, - borderColor: "#f00", - borderStyle: "solid" - })); + borderColor: '#f00', + borderStyle: 'solid', + })) -it("transforms border shorthand missing color & style", () => - runTest([["border", "2px"]], { +it('transforms border shorthand missing color & style', () => + runTest([['border', '2px']], { borderWidth: 2, - borderColor: "black", - borderStyle: "solid" - })); + borderColor: 'black', + borderStyle: 'solid', + })) -it("transforms margin shorthands using 4 values", () => - runTest([["margin", "10px 20px 30px 40px"]], { +it('transforms margin shorthands using 4 values', () => + runTest([['margin', '10px 20px 30px 40px']], { marginTop: 10, marginRight: 20, marginBottom: 30, - marginLeft: 40 - })); + marginLeft: 40, + })) -it("transforms margin shorthands using 3 values", () => - runTest([["margin", "10px 20px 30px"]], { +it('transforms margin shorthands using 3 values', () => + runTest([['margin', '10px 20px 30px']], { marginTop: 10, marginRight: 20, marginBottom: 30, - marginLeft: 20 - })); + marginLeft: 20, + })) -it("transforms margin shorthands using 2 values", () => - runTest([["margin", "10px 20px"]], { +it('transforms margin shorthands using 2 values', () => + runTest([['margin', '10px 20px']], { marginTop: 10, marginRight: 20, marginBottom: 10, - marginLeft: 20 - })); + marginLeft: 20, + })) -it("transforms margin shorthands using 1 value", () => - runTest([["margin", "10px"]], { +it('transforms margin shorthands using 1 value', () => + runTest([['margin', '10px']], { marginTop: 10, marginRight: 10, marginBottom: 10, - marginLeft: 10 - })); + marginLeft: 10, + })) -it("shorthand with 1 value should override previous values", () => - runTest([["margin-top", "2px"], ["margin", "1px"]], { +it('shorthand with 1 value should override previous values', () => + runTest([['margin-top', '2px'], ['margin', '1px']], { marginTop: 1, marginRight: 1, marginBottom: 1, - marginLeft: 1 - })); + marginLeft: 1, + })) -it("transforms flex shorthand with 3 values", () => - runTest([["flex", "1 2 3px"]], { flexGrow: 1, flexShrink: 2, flexBasis: 3 })); +it('transforms flex shorthand with 3 values', () => + runTest([['flex', '1 2 3px']], { flexGrow: 1, flexShrink: 2, flexBasis: 3 })) -it("transforms flex shorthand with 3 values in reverse order", () => - runTest([["flex", "3px 1 2"]], { flexGrow: 1, flexShrink: 2, flexBasis: 3 })); +it('transforms flex shorthand with 3 values in reverse order', () => + runTest([['flex', '3px 1 2']], { flexGrow: 1, flexShrink: 2, flexBasis: 3 })) -it("transforms flex shorthand with 2 values of flex-grow and flex-shrink", () => - runTest([["flex", "1 2"]], { flexGrow: 1, flexShrink: 2, flexBasis: 0 })); +it('transforms flex shorthand with 2 values of flex-grow and flex-shrink', () => + runTest([['flex', '1 2']], { flexGrow: 1, flexShrink: 2, flexBasis: 0 })) -it("transforms flex shorthand with 2 values of flex-grow and flex-basis", () => - runTest([["flex", "2 2px"]], { flexGrow: 2, flexShrink: 1, flexBasis: 2 })); +it('transforms flex shorthand with 2 values of flex-grow and flex-basis', () => + runTest([['flex', '2 2px']], { flexGrow: 2, flexShrink: 1, flexBasis: 2 })) -it("transforms flex shorthand with 2 values of flex-grow and flex-basis (reversed)", () => - runTest([["flex", "2px 2"]], { flexGrow: 2, flexShrink: 1, flexBasis: 2 })); +it('transforms flex shorthand with 2 values of flex-grow and flex-basis (reversed)', () => + runTest([['flex', '2px 2']], { flexGrow: 2, flexShrink: 1, flexBasis: 2 })) -it("transforms flex shorthand with 1 value of flex-grow", () => - runTest([["flex", "2"]], { flexGrow: 2, flexShrink: 1, flexBasis: 0 })); +it('transforms flex shorthand with 1 value of flex-grow', () => + runTest([['flex', '2']], { flexGrow: 2, flexShrink: 1, flexBasis: 0 })) -it("transforms flex shorthand with 1 value of flex-basis", () => - runTest([["flex", "10px"]], { flexGrow: 1, flexShrink: 1, flexBasis: 10 })); +it('transforms flex shorthand with 1 value of flex-basis', () => + runTest([['flex', '10px']], { flexGrow: 1, flexShrink: 1, flexBasis: 10 })) /* A unitless zero that is not already preceded by two flex factors must be interpreted as a flex factor. To avoid misinterpretation or invalid declarations, authors must specify a zero <‘flex-basis’> component with a unit or precede it by two flex factors. */ -it("transforms flex shorthand with flex-grow/shrink taking priority over basis", () => - runTest([["flex", "0 1 0"]], { flexGrow: 0, flexShrink: 1, flexBasis: 0 })); +it('transforms flex shorthand with flex-grow/shrink taking priority over basis', () => + runTest([['flex', '0 1 0']], { flexGrow: 0, flexShrink: 1, flexBasis: 0 })) -it("transforms flex shorthand with flex-basis set to auto", () => - runTest([["flex", "0 1 auto"]], { flexGrow: 0, flexShrink: 1 })); +it('transforms flex shorthand with flex-basis set to auto', () => + runTest([['flex', '0 1 auto']], { flexGrow: 0, flexShrink: 1 })) -it("transforms flex shorthand with flex-basis set to auto appearing first", () => - runTest([["flex", "auto 0 1"]], { flexGrow: 0, flexShrink: 1 })); +it('transforms flex shorthand with flex-basis set to auto appearing first', () => + runTest([['flex', 'auto 0 1']], { flexGrow: 0, flexShrink: 1 })) -it("transforms flex auto keyword", () => - runTest([["flex", "auto"]], { flexGrow: 1, flexShrink: 1 })); +it('transforms flex auto keyword', () => + runTest([['flex', 'auto']], { flexGrow: 1, flexShrink: 1 })) -it("transforms flex none keyword", () => - runTest([["flex", "none"]], { flexGrow: 0, flexShrink: 0 })); +it('transforms flex none keyword', () => + runTest([['flex', 'none']], { flexGrow: 0, flexShrink: 0 })) -it("transforms flexFlow shorthand with two values", () => - runTest([["flex-flow", "column wrap"]], { - flexDirection: "column", - flexWrap: "wrap" - })); +it('transforms flexFlow shorthand with two values', () => + runTest([['flex-flow', 'column wrap']], { + flexDirection: 'column', + flexWrap: 'wrap', + })) -it("transforms flexFlow shorthand missing flexDirection", () => - runTest([["flex-flow", "wrap"]], { flexDirection: "row", flexWrap: "wrap" })); +it('transforms flexFlow shorthand missing flexDirection', () => + runTest([['flex-flow', 'wrap']], { flexDirection: 'row', flexWrap: 'wrap' })) -it("transforms flexFlow shorthand missing flexWrap", () => - runTest([["flex-flow", "column"]], { - flexDirection: "column", - flexWrap: "nowrap" - })); +it('transforms flexFlow shorthand missing flexWrap', () => + runTest([['flex-flow', 'column']], { + flexDirection: 'column', + flexWrap: 'nowrap', + })) -it("transforms font", () => - runTest([["font", 'bold italic small-caps 16px/18px "Helvetica"']], { - fontFamily: "Helvetica", +it('transforms font', () => + runTest([['font', 'bold italic small-caps 16px/18px "Helvetica"']], { + fontFamily: 'Helvetica', fontSize: 16, - fontWeight: "bold", - fontStyle: "italic", - fontVariant: ["small-caps"], - lineHeight: 18 - })); - -it("transforms font missing font-variant", () => - runTest([["font", 'bold italic 16px/18px "Helvetica"']], { - fontFamily: "Helvetica", + fontWeight: 'bold', + fontStyle: 'italic', + fontVariant: ['small-caps'], + lineHeight: 18, + })) + +it('transforms font missing font-variant', () => + runTest([['font', 'bold italic 16px/18px "Helvetica"']], { + fontFamily: 'Helvetica', fontSize: 16, - fontWeight: "bold", - fontStyle: "italic", + fontWeight: 'bold', + fontStyle: 'italic', fontVariant: [], - lineHeight: 18 - })); + lineHeight: 18, + })) -it("transforms font missing font-style", () => - runTest([["font", 'bold small-caps 16px/18px "Helvetica"']], { - fontFamily: "Helvetica", +it('transforms font missing font-style', () => + runTest([['font', 'bold small-caps 16px/18px "Helvetica"']], { + fontFamily: 'Helvetica', fontSize: 16, - fontWeight: "bold", - fontStyle: "normal", - fontVariant: ["small-caps"], - lineHeight: 18 - })); - -it("transforms font missing font-weight", () => - runTest([["font", 'italic small-caps 16px/18px "Helvetica"']], { - fontFamily: "Helvetica", + fontWeight: 'bold', + fontStyle: 'normal', + fontVariant: ['small-caps'], + lineHeight: 18, + })) + +it('transforms font missing font-weight', () => + runTest([['font', 'italic small-caps 16px/18px "Helvetica"']], { + fontFamily: 'Helvetica', fontSize: 16, - fontWeight: "normal", - fontStyle: "italic", - fontVariant: ["small-caps"], - lineHeight: 18 - })); - -it("transforms font with font-weight normal", () => - runTest([["font", 'normal 16px/18px "Helvetica"']], { - fontFamily: "Helvetica", + fontWeight: 'normal', + fontStyle: 'italic', + fontVariant: ['small-caps'], + lineHeight: 18, + })) + +it('transforms font with font-weight normal', () => + runTest([['font', 'normal 16px/18px "Helvetica"']], { + fontFamily: 'Helvetica', fontSize: 16, - fontWeight: "normal", - fontStyle: "normal", + fontWeight: 'normal', + fontStyle: 'normal', fontVariant: [], - lineHeight: 18 - })); + lineHeight: 18, + })) -it("transforms font with font-weight and font-style normal", () => - runTest([["font", 'normal normal 16px/18px "Helvetica"']], { - fontFamily: "Helvetica", +it('transforms font with font-weight and font-style normal', () => + runTest([['font', 'normal normal 16px/18px "Helvetica"']], { + fontFamily: 'Helvetica', fontSize: 16, - fontWeight: "normal", - fontStyle: "normal", + fontWeight: 'normal', + fontStyle: 'normal', fontVariant: [], - lineHeight: 18 - })); + lineHeight: 18, + })) -it("transforms font with no font-weight, font-style, and font-variant", () => - runTest([["font", '16px/18px "Helvetica"']], { - fontFamily: "Helvetica", +it('transforms font with no font-weight, font-style, and font-variant', () => + runTest([['font', '16px/18px "Helvetica"']], { + fontFamily: 'Helvetica', fontSize: 16, - fontWeight: "normal", - fontStyle: "normal", + fontWeight: 'normal', + fontStyle: 'normal', fontVariant: [], - lineHeight: 18 - })); + lineHeight: 18, + })) -it("omits line height if not specified", () => - runTest([["font", '16px "Helvetica"']], { - fontFamily: "Helvetica", +it('omits line height if not specified', () => + runTest([['font', '16px "Helvetica"']], { + fontFamily: 'Helvetica', fontSize: 16, - fontWeight: "normal", - fontStyle: "normal", - fontVariant: [] - })); - -it("allows line height as multiple", () => - runTest([["font", '16px/1.5 "Helvetica"']], { - fontFamily: "Helvetica", + fontWeight: 'normal', + fontStyle: 'normal', + fontVariant: [], + })) + +it('allows line height as multiple', () => + runTest([['font', '16px/1.5 "Helvetica"']], { + fontFamily: 'Helvetica', fontSize: 16, - fontWeight: "normal", - fontStyle: "normal", + fontWeight: 'normal', + fontStyle: 'normal', fontVariant: [], - lineHeight: 24 - })); + lineHeight: 24, + })) -it("transforms font without quotes", () => - runTest([["font", "bold italic small-caps 16px/18px Helvetica Neue"]], { - fontFamily: "Helvetica Neue", +it('transforms font without quotes', () => + runTest([['font', 'bold italic small-caps 16px/18px Helvetica Neue']], { + fontFamily: 'Helvetica Neue', fontSize: 16, - fontWeight: "bold", - fontStyle: "italic", - fontVariant: ["small-caps"], - lineHeight: 18 - })); - -it("transforms font-family with double quotes", () => - runTest([["font-family", '"Helvetica Neue"']], { - fontFamily: "Helvetica Neue" - })); - -it("transforms font-family with single quotes", () => - runTest([["font-family", "'Helvetica Neue'"]], { - fontFamily: "Helvetica Neue" - })); - -it("transforms font-family without quotes", () => - runTest([["font-family", "Helvetica Neue"]], { - fontFamily: "Helvetica Neue" - })); - -it("transforms font-family with quotes with otherwise invalid values", () => - runTest([["font-family", '"Goudy Bookletter 1911"']], { - fontFamily: "Goudy Bookletter 1911" - })); - -it("transforms font-family with quotes with escaped values", () => - runTest([["font-family", '"test\\A test"']], { - fontFamily: "test\ntest" - })); - -it("transforms font-family with quotes with escaped quote", () => - runTest([["font-family", '"test\\"test"']], { - fontFamily: 'test"test' - })); - -it("does not transform invalid unquoted font-family", () => { + fontWeight: 'bold', + fontStyle: 'italic', + fontVariant: ['small-caps'], + lineHeight: 18, + })) + +it('transforms font-family with double quotes', () => + runTest([['font-family', '"Helvetica Neue"']], { + fontFamily: 'Helvetica Neue', + })) + +it('transforms font-family with single quotes', () => + runTest([['font-family', "'Helvetica Neue'"]], { + fontFamily: 'Helvetica Neue', + })) + +it('transforms font-family without quotes', () => + runTest([['font-family', 'Helvetica Neue']], { + fontFamily: 'Helvetica Neue', + })) + +it('transforms font-family with quotes with otherwise invalid values', () => + runTest([['font-family', '"Goudy Bookletter 1911"']], { + fontFamily: 'Goudy Bookletter 1911', + })) + +it('transforms font-family with quotes with escaped values', () => + runTest([['font-family', '"test\\A test"']], { + fontFamily: 'test\ntest', + })) + +it('transforms font-family with quotes with escaped quote', () => + runTest([['font-family', '"test\\"test"']], { + fontFamily: 'test"test', + })) + +it('does not transform invalid unquoted font-family', () => { expect(() => - transformCss([["font-family", "Goudy Bookletter 1911"]]) - ).toThrow(); -}); + transformCss([['font-family', 'Goudy Bookletter 1911']]) + ).toThrow() +}) -it("does not transform invalid flex", () => { - expect(() => transformCss([["flex", "1 2px 3"]])).toThrow(); -}); +it('does not transform invalid flex', () => { + expect(() => transformCss([['flex', '1 2px 3']])).toThrow() +}) -it("transforms box-shadow into shadow- properties", () => - runTest([["box-shadow", "10px 20px 30px red"]], { +it('transforms box-shadow into shadow- properties', () => + runTest([['box-shadow', '10px 20px 30px red']], { shadowOffset: { width: 10, height: 20 }, shadowRadius: 30, - shadowColor: "red", - shadowOpacity: 1 - })); + shadowColor: 'red', + shadowOpacity: 1, + })) -it("transforms box-shadow without blur-radius", () => - runTest([["box-shadow", "10px 20px red"]], { +it('transforms box-shadow without blur-radius', () => + runTest([['box-shadow', '10px 20px red']], { shadowOffset: { width: 10, height: 20 }, shadowRadius: 0, - shadowColor: "red", - shadowOpacity: 1 - })); + shadowColor: 'red', + shadowOpacity: 1, + })) -it("transforms box-shadow without color", () => - runTest([["box-shadow", "10px 20px 30px"]], { +it('transforms box-shadow without color', () => + runTest([['box-shadow', '10px 20px 30px']], { shadowOffset: { width: 10, height: 20 }, shadowRadius: 30, - shadowColor: "black", - shadowOpacity: 1 - })); + shadowColor: 'black', + shadowOpacity: 1, + })) -it("transforms box-shadow without blur-radius, color", () => - runTest([["box-shadow", "10px 20px"]], { +it('transforms box-shadow without blur-radius, color', () => + runTest([['box-shadow', '10px 20px']], { shadowOffset: { width: 10, height: 20 }, shadowRadius: 0, - shadowColor: "black", - shadowOpacity: 1 - })); + shadowColor: 'black', + shadowOpacity: 1, + })) -it("transforms box-shadow with rgb color", () => - runTest([["box-shadow", "10px 20px rgb(100, 100, 100)"]], { +it('transforms box-shadow with rgb color', () => + runTest([['box-shadow', '10px 20px rgb(100, 100, 100)']], { shadowOffset: { width: 10, height: 20 }, shadowRadius: 0, - shadowColor: "rgb(100, 100, 100)", - shadowOpacity: 1 - })); + shadowColor: 'rgb(100, 100, 100)', + shadowOpacity: 1, + })) -it("transforms box-shadow with rgba color", () => - runTest([["box-shadow", "10px 20px rgba(100, 100, 100, 0.5)"]], { +it('transforms box-shadow with rgba color', () => + runTest([['box-shadow', '10px 20px rgba(100, 100, 100, 0.5)']], { shadowOffset: { width: 10, height: 20 }, shadowRadius: 0, - shadowColor: "rgba(100, 100, 100, 0.5)", - shadowOpacity: 1 - })); + shadowColor: 'rgba(100, 100, 100, 0.5)', + shadowOpacity: 1, + })) -it("transforms box-shadow with hsl color", () => - runTest([["box-shadow", "10px 20px hsl(120, 100%, 50%)"]], { +it('transforms box-shadow with hsl color', () => + runTest([['box-shadow', '10px 20px hsl(120, 100%, 50%)']], { shadowOffset: { width: 10, height: 20 }, shadowRadius: 0, - shadowColor: "hsl(120, 100%, 50%)", - shadowOpacity: 1 - })); + shadowColor: 'hsl(120, 100%, 50%)', + shadowOpacity: 1, + })) -it("transforms box-shadow with hsla color", () => - runTest([["box-shadow", "10px 20px hsla(120, 100%, 50%, 0.7)"]], { +it('transforms box-shadow with hsla color', () => + runTest([['box-shadow', '10px 20px hsla(120, 100%, 50%, 0.7)']], { shadowOffset: { width: 10, height: 20 }, shadowRadius: 0, - shadowColor: "hsla(120, 100%, 50%, 0.7)", - shadowOpacity: 1 - })); + shadowColor: 'hsla(120, 100%, 50%, 0.7)', + shadowOpacity: 1, + })) -it("transforms box-shadow and throws if multiple colors are used", () => { +it('transforms box-shadow and throws if multiple colors are used', () => { expect(() => - transformCss([["box-shadow", "0 0 0 red yellow green blue"]]) + transformCss([['box-shadow', '0 0 0 red yellow green blue']]) ).toThrow( 'Failed to parse declaration "boxShadow: 0 0 0 red yellow green blue"' - ); -}); + ) +}) -it("transforms box-shadow enforces offset to be present", () => { - expect(() => transformCss([["box-shadow", "red"]])).toThrow( +it('transforms box-shadow enforces offset to be present', () => { + expect(() => transformCss([['box-shadow', 'red']])).toThrow( 'Failed to parse declaration "boxShadow: red"' - ); -}); + ) +}) -it("transforms box-shadow and enforces offset-y if offset-x present", () => { - expect(() => transformCss([["box-shadow", "10px"]])).toThrow( +it('transforms box-shadow and enforces offset-y if offset-x present', () => { + expect(() => transformCss([['box-shadow', '10px']])).toThrow( 'Failed to parse declaration "boxShadow: 10px"' - ); -}); - -it("allows blacklisting shorthands", () => { - const actualStyles = transformCss( - [["border-radius", "50"]], - ["borderRadius"] - ); - expect(actualStyles).toEqual({ borderRadius: 50 }); -}); - -it("throws useful errors", () => { - expect(() => transformCss([["margin", "10"]])).toThrow( + ) +}) + +it('allows blacklisting shorthands', () => { + const actualStyles = transformCss([['border-radius', '50']], ['borderRadius']) + expect(actualStyles).toEqual({ borderRadius: 50 }) +}) + +it('throws useful errors', () => { + expect(() => transformCss([['margin', '10']])).toThrow( 'Failed to parse declaration "margin: 10"' - ); -}); + ) +}) diff --git a/src/tokenTypes.js b/src/tokenTypes.js index 891a518..483df24 100644 --- a/src/tokenTypes.js +++ b/src/tokenTypes.js @@ -1,63 +1,63 @@ -const { stringify } = require("postcss-value-parser"); -const cssColorKeywords = require("css-color-keywords"); +const { stringify } = require('postcss-value-parser') +const cssColorKeywords = require('css-color-keywords') const matchString = node => { - if (node.type !== "string") return null; + if (node.type !== 'string') return null return node.value .replace(/\\([0-9a-f]{1,6})(?:\s|$)/gi, (match, charCode) => String.fromCharCode(parseInt(charCode, 16)) ) - .replace(/\\/g, ""); -}; + .replace(/\\/g, '') +} -const hexColorRe = /^(#(?:[0-9a-f]{3,4}){1,2})$/i; -const cssFunctionNameRe = /^(rgba?|hsla?|hwb|lab|lch|gray|color)$/; +const hexColorRe = /^(#(?:[0-9a-f]{3,4}){1,2})$/i +const cssFunctionNameRe = /^(rgba?|hsla?|hwb|lab|lch|gray|color)$/ const matchColor = node => { if ( - node.type === "word" && + node.type === 'word' && (hexColorRe.test(node.value) || node.value in cssColorKeywords) ) { - return node.value; - } else if (node.type === "function" && cssFunctionNameRe.test(node.value)) { - return stringify(node); + return node.value + } else if (node.type === 'function' && cssFunctionNameRe.test(node.value)) { + return stringify(node) } - return null; -}; + return null +} -const noneRe = /^(none)$/i; -const autoRe = /^(auto)$/i; -const identRe = /(^-?[_a-z][_a-z0-9-]*$)/i; +const noneRe = /^(none)$/i +const autoRe = /^(auto)$/i +const identRe = /(^-?[_a-z][_a-z0-9-]*$)/i // Note if these are wrong, you'll need to change index.js too -const numberRe = /^([+-]?(?:\d*\.)?\d+(?:[Ee][+-]?\d+)?)$/; +const numberRe = /^([+-]?(?:\d*\.)?\d+(?:[Ee][+-]?\d+)?)$/ // Note lengthRe is sneaky: you can omit units for 0 -const lengthRe = /^(0$|(?:[+-]?(?:\d*\.)?\d+(?:[Ee][+-]?\d+)?)(?=px$))/; -const angleRe = /^([+-]?(?:\d*\.)?\d+(?:[Ee][+-]?\d+)?(?:deg|rad))$/; -const percentRe = /^([+-]?(?:\d*\.)?\d+(?:[Ee][+-]?\d+)?%)$/; +const lengthRe = /^(0$|(?:[+-]?(?:\d*\.)?\d+(?:[Ee][+-]?\d+)?)(?=px$))/ +const angleRe = /^([+-]?(?:\d*\.)?\d+(?:[Ee][+-]?\d+)?(?:deg|rad))$/ +const percentRe = /^([+-]?(?:\d*\.)?\d+(?:[Ee][+-]?\d+)?%)$/ -const noopToken = predicate => node => (predicate(node) ? "" : null); +const noopToken = predicate => node => (predicate(node) ? '' : null) const valueForTypeToken = type => node => - node.type === type ? node.value : null; + node.type === type ? node.value : null const regExpToken = (regExp, transform = String) => node => { - if (node.type !== "word") return null; + if (node.type !== 'word') return null - const match = node.value.match(regExp); - if (match === null) return null; + const match = node.value.match(regExp) + if (match === null) return null - const value = transform(match[1]); + const value = transform(match[1]) - return value; -}; + return value +} -module.exports.regExpToken = regExpToken; +module.exports.regExpToken = regExpToken module.exports.tokens = { - SPACE: noopToken(node => node.type === "space"), - SLASH: noopToken(node => node.type === "div" && node.value === "/"), - COMMA: noopToken(node => node.type === "div" && node.value === ","), - WORD: valueForTypeToken("word"), + SPACE: noopToken(node => node.type === 'space'), + SLASH: noopToken(node => node.type === 'div' && node.value === '/'), + COMMA: noopToken(node => node.type === 'div' && node.value === ','), + WORD: valueForTypeToken('word'), NONE: regExpToken(noneRe), AUTO: regExpToken(autoRe), NUMBER: regExpToken(numberRe, Number), @@ -66,5 +66,5 @@ module.exports.tokens = { PERCENT: regExpToken(percentRe), IDENT: regExpToken(identRe), STRING: matchString, - COLOR: matchColor -}; + COLOR: matchColor, +} diff --git a/src/transforms/boxShadow.js b/src/transforms/boxShadow.js index f687991..b3b942a 100644 --- a/src/transforms/boxShadow.js +++ b/src/transforms/boxShadow.js @@ -1,56 +1,56 @@ -const { tokens } = require("../tokenTypes"); +const { tokens } = require('../tokenTypes') -const { NONE, SPACE, COLOR, LENGTH } = tokens; +const { NONE, SPACE, COLOR, LENGTH } = tokens module.exports = tokenStream => { - let offsetX; - let offsetY; - let blurRadius; - let color; + let offsetX + let offsetY + let blurRadius + let color if (tokenStream.matches(NONE)) { - tokenStream.expectEmpty(); + tokenStream.expectEmpty() return { $merge: { shadowOffset: { width: 0, height: 0 }, shadowRadius: 0, - shadowColor: "black", - shadowOpacity: 1 - } - }; + shadowColor: 'black', + shadowOpacity: 1, + }, + } } - let didParseFirst = false; + let didParseFirst = false while (tokenStream.hasTokens()) { - if (didParseFirst) tokenStream.expect(SPACE); + if (didParseFirst) tokenStream.expect(SPACE) if (offsetX === undefined && tokenStream.matches(LENGTH)) { - offsetX = tokenStream.lastValue; - tokenStream.expect(SPACE); - offsetY = tokenStream.expect(LENGTH); + offsetX = tokenStream.lastValue + tokenStream.expect(SPACE) + offsetY = tokenStream.expect(LENGTH) - tokenStream.saveRewindPoint(); + tokenStream.saveRewindPoint() if (tokenStream.matches(SPACE) && tokenStream.matches(LENGTH)) { - blurRadius = tokenStream.lastValue; + blurRadius = tokenStream.lastValue } else { - tokenStream.rewind(); + tokenStream.rewind() } } else if (color === undefined && tokenStream.matches(COLOR)) { - color = tokenStream.lastValue; + color = tokenStream.lastValue } else { - tokenStream.throw(); + tokenStream.throw() } - didParseFirst = true; + didParseFirst = true } - if (offsetX === undefined) tokenStream.throw(); + if (offsetX === undefined) tokenStream.throw() const $merge = { shadowOffset: { width: offsetX, height: offsetY }, shadowRadius: blurRadius !== undefined ? blurRadius : 0, - shadowColor: color !== undefined ? color : "black", - shadowOpacity: 1 - }; - return { $merge }; -}; + shadowColor: color !== undefined ? color : 'black', + shadowOpacity: 1, + } + return { $merge } +} diff --git a/src/transforms/flex.js b/src/transforms/flex.js index e819560..44314b3 100644 --- a/src/transforms/flex.js +++ b/src/transforms/flex.js @@ -1,60 +1,60 @@ -const { tokens } = require("../tokenTypes"); +const { tokens } = require('../tokenTypes') -const { NONE, AUTO, NUMBER, LENGTH, SPACE } = tokens; +const { NONE, AUTO, NUMBER, LENGTH, SPACE } = tokens -const defaultFlexGrow = 1; -const defaultFlexShrink = 1; -const defaultFlexBasis = 0; +const defaultFlexGrow = 1 +const defaultFlexShrink = 1 +const defaultFlexBasis = 0 -const FLEX_BASIS_AUTO = {}; // Used for reference equality +const FLEX_BASIS_AUTO = {} // Used for reference equality module.exports = tokenStream => { - let flexGrow; - let flexShrink; - let flexBasis; + let flexGrow + let flexShrink + let flexBasis if (tokenStream.matches(NONE)) { - tokenStream.expectEmpty(); - return { $merge: { flexGrow: 0, flexShrink: 0 } }; + tokenStream.expectEmpty() + return { $merge: { flexGrow: 0, flexShrink: 0 } } } - tokenStream.saveRewindPoint(); + tokenStream.saveRewindPoint() if (tokenStream.matches(AUTO) && !tokenStream.hasTokens()) { - return { $merge: { flexGrow: 1, flexShrink: 1 } }; + return { $merge: { flexGrow: 1, flexShrink: 1 } } } - tokenStream.rewind(); + tokenStream.rewind() - let partsParsed = 0; + let partsParsed = 0 while (partsParsed < 2 && tokenStream.hasTokens()) { - if (partsParsed !== 0) tokenStream.expect(SPACE); + if (partsParsed !== 0) tokenStream.expect(SPACE) if (flexGrow === undefined && tokenStream.matches(NUMBER)) { - flexGrow = tokenStream.lastValue; + flexGrow = tokenStream.lastValue - tokenStream.saveRewindPoint(); + tokenStream.saveRewindPoint() if (tokenStream.matches(SPACE) && tokenStream.matches(NUMBER)) { - flexShrink = tokenStream.lastValue; + flexShrink = tokenStream.lastValue } else { - tokenStream.rewind(); + tokenStream.rewind() } } else if (flexBasis === undefined && tokenStream.matches(LENGTH)) { - flexBasis = tokenStream.lastValue; + flexBasis = tokenStream.lastValue } else if (flexBasis === undefined && tokenStream.matches(AUTO)) { - flexBasis = FLEX_BASIS_AUTO; + flexBasis = FLEX_BASIS_AUTO } else { - tokenStream.throw(); + tokenStream.throw() } - partsParsed += 1; + partsParsed += 1 } - tokenStream.expectEmpty(); + tokenStream.expectEmpty() - if (flexGrow === undefined) flexGrow = defaultFlexGrow; - if (flexShrink === undefined) flexShrink = defaultFlexShrink; - if (flexBasis === undefined) flexBasis = defaultFlexBasis; + if (flexGrow === undefined) flexGrow = defaultFlexGrow + if (flexShrink === undefined) flexShrink = defaultFlexShrink + if (flexBasis === undefined) flexBasis = defaultFlexBasis return flexBasis !== FLEX_BASIS_AUTO ? { $merge: { flexGrow, flexShrink, flexBasis } } - : { $merge: { flexGrow, flexShrink } }; -}; + : { $merge: { flexGrow, flexShrink } } +} diff --git a/src/transforms/font.js b/src/transforms/font.js index 5f2991e..2d44b23 100644 --- a/src/transforms/font.js +++ b/src/transforms/font.js @@ -1,62 +1,62 @@ -const parseFontFamily = require("./fontFamily"); -const { regExpToken, tokens } = require("../tokenTypes"); +const parseFontFamily = require('./fontFamily') +const { regExpToken, tokens } = require('../tokenTypes') -const { SPACE, LENGTH, NUMBER, SLASH } = tokens; -const NORMAL = regExpToken(/^(normal)$/); -const STYLE = regExpToken(/^(italic)$/); -const WEIGHT = regExpToken(/^([1-9]00|bold)$/); -const VARIANT = regExpToken(/^(small-caps)$/); +const { SPACE, LENGTH, NUMBER, SLASH } = tokens +const NORMAL = regExpToken(/^(normal)$/) +const STYLE = regExpToken(/^(italic)$/) +const WEIGHT = regExpToken(/^([1-9]00|bold)$/) +const VARIANT = regExpToken(/^(small-caps)$/) -const defaultFontStyle = "normal"; -const defaultFontWeight = "normal"; -const defaultFontVariant = []; +const defaultFontStyle = 'normal' +const defaultFontWeight = 'normal' +const defaultFontVariant = [] module.exports = tokenStream => { - let fontStyle; - let fontWeight; - let fontVariant; + let fontStyle + let fontWeight + let fontVariant // let fontSize; - let lineHeight; + let lineHeight // let fontFamily; - let numStyleWeightVariantMatched = 0; + let numStyleWeightVariantMatched = 0 while (numStyleWeightVariantMatched < 3 && tokenStream.hasTokens()) { if (tokenStream.matches(NORMAL)) { /* pass */ } else if (fontStyle === undefined && tokenStream.matches(STYLE)) { - fontStyle = tokenStream.lastValue; + fontStyle = tokenStream.lastValue } else if (fontWeight === undefined && tokenStream.matches(WEIGHT)) { - fontWeight = tokenStream.lastValue; + fontWeight = tokenStream.lastValue } else if (fontVariant === undefined && tokenStream.matches(VARIANT)) { - fontVariant = [tokenStream.lastValue]; + fontVariant = [tokenStream.lastValue] } else { - break; + break } - tokenStream.expect(SPACE); - numStyleWeightVariantMatched += 1; + tokenStream.expect(SPACE) + numStyleWeightVariantMatched += 1 } - const fontSize = tokenStream.expect(LENGTH); + const fontSize = tokenStream.expect(LENGTH) if (tokenStream.matches(SLASH)) { if (tokenStream.matches(NUMBER)) { - lineHeight = fontSize * tokenStream.lastValue; + lineHeight = fontSize * tokenStream.lastValue } else { - lineHeight = tokenStream.expect(LENGTH); + lineHeight = tokenStream.expect(LENGTH) } } - tokenStream.expect(SPACE); + tokenStream.expect(SPACE) - const fontFamily = parseFontFamily(tokenStream); + const fontFamily = parseFontFamily(tokenStream) - if (fontStyle === undefined) fontStyle = defaultFontStyle; - if (fontWeight === undefined) fontWeight = defaultFontWeight; - if (fontVariant === undefined) fontVariant = defaultFontVariant; + if (fontStyle === undefined) fontStyle = defaultFontStyle + if (fontWeight === undefined) fontWeight = defaultFontWeight + if (fontVariant === undefined) fontVariant = defaultFontVariant - const out = { fontStyle, fontWeight, fontVariant, fontSize, fontFamily }; - if (lineHeight !== undefined) out.lineHeight = lineHeight; + const out = { fontStyle, fontWeight, fontVariant, fontSize, fontFamily } + if (lineHeight !== undefined) out.lineHeight = lineHeight - return { $merge: out }; -}; + return { $merge: out } +} diff --git a/src/transforms/fontFamily.js b/src/transforms/fontFamily.js index f3449a8..f363b38 100644 --- a/src/transforms/fontFamily.js +++ b/src/transforms/fontFamily.js @@ -1,22 +1,22 @@ -const { tokens } = require("../tokenTypes"); +const { tokens } = require('../tokenTypes') -const { SPACE, IDENT, STRING } = tokens; +const { SPACE, IDENT, STRING } = tokens module.exports = tokenStream => { - let fontFamily; + let fontFamily if (tokenStream.matches(STRING)) { - fontFamily = tokenStream.lastValue; + fontFamily = tokenStream.lastValue } else { - fontFamily = tokenStream.expect(IDENT); + fontFamily = tokenStream.expect(IDENT) while (tokenStream.hasTokens()) { - tokenStream.expect(SPACE); - const nextIdent = tokenStream.expect(IDENT); - fontFamily += ` ${nextIdent}`; + tokenStream.expect(SPACE) + const nextIdent = tokenStream.expect(IDENT) + fontFamily += ` ${nextIdent}` } } - tokenStream.expectEmpty(); + tokenStream.expectEmpty() - return fontFamily; -}; + return fontFamily +} diff --git a/src/transforms/index.js b/src/transforms/index.js index e241d7f..22e9978 100644 --- a/src/transforms/index.js +++ b/src/transforms/index.js @@ -1,61 +1,61 @@ -const { regExpToken, tokens } = require("../tokenTypes"); -const boxShadow = require("./boxShadow"); -const flex = require("./flex"); -const font = require("./font"); -const fontFamily = require("./fontFamily"); -const transform = require("./transform"); +const { regExpToken, tokens } = require('../tokenTypes') +const boxShadow = require('./boxShadow') +const flex = require('./flex') +const font = require('./font') +const fontFamily = require('./fontFamily') +const transform = require('./transform') const { directionFactory, anyOrderFactory, - shadowOffsetFactory -} = require("./util"); + shadowOffsetFactory, +} = require('./util') -const { IDENT, WORD, COLOR } = tokens; +const { IDENT, WORD, COLOR } = tokens const background = tokenStream => ({ - $merge: { backgroundColor: tokenStream.expect(COLOR) } -}); + $merge: { backgroundColor: tokenStream.expect(COLOR) }, +}) const border = anyOrderFactory({ borderWidth: { token: tokens.LENGTH, - default: 1 + default: 1, }, borderColor: { token: COLOR, - default: "black" + default: 'black', }, borderStyle: { token: regExpToken(/^(solid|dashed|dotted)$/), - default: "solid" - } -}); + default: 'solid', + }, +}) const borderColor = directionFactory({ types: [WORD], - prefix: "border", - suffix: "Color" -}); + prefix: 'border', + suffix: 'Color', +}) const borderRadius = directionFactory({ - directions: ["TopRight", "BottomRight", "BottomLeft", "TopLeft"], - prefix: "border", - suffix: "Radius" -}); -const borderWidth = directionFactory({ prefix: "border", suffix: "Width" }); -const margin = directionFactory({ prefix: "margin" }); -const padding = directionFactory({ prefix: "padding" }); + directions: ['TopRight', 'BottomRight', 'BottomLeft', 'TopLeft'], + prefix: 'border', + suffix: 'Radius', +}) +const borderWidth = directionFactory({ prefix: 'border', suffix: 'Width' }) +const margin = directionFactory({ prefix: 'margin' }) +const padding = directionFactory({ prefix: 'padding' }) const flexFlow = anyOrderFactory({ flexWrap: { token: regExpToken(/(nowrap|wrap|wrap-reverse)/), - default: "nowrap" + default: 'nowrap', }, flexDirection: { token: regExpToken(/(row|row-reverse|column|column-reverse)/), - default: "row" - } -}); -const fontVariant = tokenStream => [tokenStream.expect(IDENT)]; -const fontWeight = tokenStream => tokenStream.expect(WORD); // Also match numbers as strings -const shadowOffset = shadowOffsetFactory(); -const textShadowOffset = shadowOffsetFactory(); + default: 'row', + }, +}) +const fontVariant = tokenStream => [tokenStream.expect(IDENT)] +const fontWeight = tokenStream => tokenStream.expect(WORD) // Also match numbers as strings +const shadowOffset = shadowOffsetFactory() +const textShadowOffset = shadowOffsetFactory() module.exports = { background, @@ -74,5 +74,5 @@ module.exports = { padding, shadowOffset, textShadowOffset, - transform -}; + transform, +} diff --git a/src/transforms/transform.js b/src/transforms/transform.js index 5ba89aa..ecbb710 100644 --- a/src/transforms/transform.js +++ b/src/transforms/transform.js @@ -1,48 +1,48 @@ -const { tokens } = require("../tokenTypes"); +const { tokens } = require('../tokenTypes') -const { SPACE, COMMA, LENGTH, NUMBER, ANGLE } = tokens; +const { SPACE, COMMA, LENGTH, NUMBER, ANGLE } = tokens const oneOfType = tokenType => functionStream => { - const value = functionStream.expect(tokenType); - functionStream.expectEmpty(); - return value; -}; + const value = functionStream.expect(tokenType) + functionStream.expectEmpty() + return value +} -const singleNumber = oneOfType(NUMBER); -const singleLength = oneOfType(LENGTH); -const singleAngle = oneOfType(ANGLE); +const singleNumber = oneOfType(NUMBER) +const singleLength = oneOfType(LENGTH) +const singleAngle = oneOfType(ANGLE) const xyTransformFactory = tokenType => ( key, valueIfOmitted ) => functionStream => { - const x = functionStream.expect(tokenType); + const x = functionStream.expect(tokenType) - let y; + let y if (functionStream.hasTokens()) { - functionStream.expect(COMMA); - y = functionStream.expect(tokenType); + functionStream.expect(COMMA) + y = functionStream.expect(tokenType) } else if (valueIfOmitted !== undefined) { - y = valueIfOmitted; + y = valueIfOmitted } else { // Assumption, if x === y, then we can omit XY // I.e. scale(5) => [{ scale: 5 }] rather than [{ scaleX: 5 }, { scaleY: 5 }] - return x; + return x } - functionStream.expectEmpty(); + functionStream.expectEmpty() - return [{ [`${key}Y`]: y }, { [`${key}X`]: x }]; -}; -const xyNumber = xyTransformFactory(NUMBER); -const xyLength = xyTransformFactory(LENGTH); -const xyAngle = xyTransformFactory(ANGLE); + return [{ [`${key}Y`]: y }, { [`${key}X`]: x }] +} +const xyNumber = xyTransformFactory(NUMBER) +const xyLength = xyTransformFactory(LENGTH) +const xyAngle = xyTransformFactory(ANGLE) const partTransforms = { perspective: singleNumber, - scale: xyNumber("scale"), + scale: xyNumber('scale'), scaleX: singleNumber, scaleY: singleNumber, - translate: xyLength("translate", 0), + translate: xyLength('translate', 0), translateX: singleLength, translateY: singleLength, rotate: singleAngle, @@ -51,26 +51,26 @@ const partTransforms = { rotateZ: singleAngle, skewX: singleAngle, skewY: singleAngle, - skew: xyAngle("skew", "0deg") -}; + skew: xyAngle('skew', '0deg'), +} module.exports = tokenStream => { - let transforms = []; + let transforms = [] - let didParseFirst = false; + let didParseFirst = false while (tokenStream.hasTokens()) { - if (didParseFirst) tokenStream.expect(SPACE); + if (didParseFirst) tokenStream.expect(SPACE) - const functionStream = tokenStream.expectFunction(); - const { functionName } = functionStream; - let transformedValues = partTransforms[functionName](functionStream); + const functionStream = tokenStream.expectFunction() + const { functionName } = functionStream + let transformedValues = partTransforms[functionName](functionStream) if (!Array.isArray(transformedValues)) { - transformedValues = [{ [functionName]: transformedValues }]; + transformedValues = [{ [functionName]: transformedValues }] } - transforms = transformedValues.concat(transforms); + transforms = transformedValues.concat(transforms) - didParseFirst = true; + didParseFirst = true } - return transforms; -}; + return transforms +} diff --git a/src/transforms/util.js b/src/transforms/util.js index 2a4038e..1eaf722 100644 --- a/src/transforms/util.js +++ b/src/transforms/util.js @@ -1,80 +1,78 @@ -const { tokens } = require("../tokenTypes"); +const { tokens } = require('../tokenTypes') -const { LENGTH, PERCENT, SPACE } = tokens; +const { LENGTH, PERCENT, SPACE } = tokens module.exports.directionFactory = ({ types = [LENGTH, PERCENT], - directions = ["Top", "Right", "Bottom", "Left"], - prefix = "", - suffix = "" + directions = ['Top', 'Right', 'Bottom', 'Left'], + prefix = '', + suffix = '', }) => tokenStream => { - const values = []; + const values = [] // borderWidth doesn't currently allow a percent value, but may do in the future - values.push(tokenStream.expect(...types)); + values.push(tokenStream.expect(...types)) while (values.length < 4 && tokenStream.hasTokens()) { - tokenStream.expect(SPACE); - values.push(tokenStream.expect(...types)); + tokenStream.expect(SPACE) + values.push(tokenStream.expect(...types)) } - tokenStream.expectEmpty(); + tokenStream.expectEmpty() - const [top, right = top, bottom = top, left = right] = values; + const [top, right = top, bottom = top, left = right] = values - const keyFor = n => `${prefix}${directions[n]}${suffix}`; + const keyFor = n => `${prefix}${directions[n]}${suffix}` const output = { [keyFor(0)]: top, [keyFor(1)]: right, [keyFor(2)]: bottom, - [keyFor(3)]: left - }; + [keyFor(3)]: left, + } - return { $merge: output }; -}; + return { $merge: output } +} module.exports.anyOrderFactory = (properties, delim = SPACE) => tokenStream => { - const propertyNames = Object.keys(properties); + const propertyNames = Object.keys(properties) const values = propertyNames.reduce((accum, propertyName) => { - accum[propertyName] === undefined; // eslint-disable-line - return accum; - }, {}); + accum[propertyName] === undefined // eslint-disable-line + return accum + }, {}) - let numParsed = 0; + let numParsed = 0 while (numParsed < propertyNames.length && tokenStream.hasTokens()) { - if (numParsed) tokenStream.expect(delim); + if (numParsed) tokenStream.expect(delim) const matchedPropertyName = propertyNames.find( propertyName => values[propertyName] === undefined && tokenStream.matches(properties[propertyName].token) - ); + ) if (!matchedPropertyName) { - tokenStream.throw(); + tokenStream.throw() } else { - values[matchedPropertyName] = tokenStream.lastValue; + values[matchedPropertyName] = tokenStream.lastValue } - numParsed += 1; + numParsed += 1 } - tokenStream.expectEmpty(); + tokenStream.expectEmpty() propertyNames.forEach(propertyName => { if (values[propertyName] === undefined) - values[propertyName] = properties[propertyName].default; - }); + values[propertyName] = properties[propertyName].default + }) - return { $merge: values }; -}; + return { $merge: values } +} module.exports.shadowOffsetFactory = () => tokenStream => { - const width = tokenStream.expect(LENGTH); - const height = tokenStream.matches(SPACE) - ? tokenStream.expect(LENGTH) - : width; - tokenStream.expectEmpty(); - return { width, height }; -}; + const width = tokenStream.expect(LENGTH) + const height = tokenStream.matches(SPACE) ? tokenStream.expect(LENGTH) : width + tokenStream.expectEmpty() + return { width, height } +} From 2352b49be60c612ae7c5590503933314d3de4d40 Mon Sep 17 00:00:00 2001 From: Jacob Parker Date: Sun, 4 Feb 2018 18:36:15 +0000 Subject: [PATCH 18/83] Add linting to CI, precommit --- .eslintrc.js | 8 +- .travis.yml | 1 + package.json | 13 +- yarn.lock | 459 ++++++++++++++++++++++++++++++++++++++++++++++++++- 4 files changed, 473 insertions(+), 8 deletions(-) diff --git a/.eslintrc.js b/.eslintrc.js index 45390b0..b24299d 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -1,3 +1,7 @@ module.exports = { - extends: ["airbnb-base", "prettier"] -}; + extends: ['airbnb-base', 'prettier'], + plugins: ['prettier'], + rules: { + 'prettier/prettier': 2, + }, +} diff --git a/.travis.yml b/.travis.yml index 467b86f..b95ea8d 100644 --- a/.travis.yml +++ b/.travis.yml @@ -7,6 +7,7 @@ script: - node --version - yarn --version - yarn run test + - yarn run lint notifications: email: on_failure: change diff --git a/package.json b/package.json index 2fee4c0..2597ac0 100644 --- a/package.json +++ b/package.json @@ -7,7 +7,10 @@ "build": "babel src --ignore test.js --out-dir dist", "test": "jest", "test:watch": "jest --watch", - "prepublish": "npm run build" + "lint": "eslint src", + "prepublish": "npm run build", + "precommit": "lint-staged", + "lint-staged": "lint-staged" }, "files": [ "dist", @@ -37,12 +40,20 @@ "eslint-config-airbnb-base": "^10.0.1", "eslint-config-prettier": "^2.9.0", "eslint-plugin-import": "^2.2.0", + "eslint-plugin-prettier": "^2.6.0", "jest": "^17.0.0", + "lint-staged": "^6.1.0", "prettier": "^1.10.2" }, "dependencies": { "css-color-keywords": "^1.0.0", "fbjs": "^0.8.5", "postcss-value-parser": "^3.3.0" + }, + "lint-staged": { + "*.js": [ + "eslint --fix", + "git add" + ] } } diff --git a/yarn.lock b/yarn.lock index a5f7203..072c87f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -57,7 +57,7 @@ amdefine@>=0.0.4: version "1.0.1" resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" -ansi-escapes@^1.1.0, ansi-escapes@^1.4.0: +ansi-escapes@^1.0.0, ansi-escapes@^1.1.0, ansi-escapes@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-1.4.0.tgz#d3a8a83b319aa67793662b13e761c7911422306e" @@ -65,14 +65,28 @@ ansi-regex@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" +ansi-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" + ansi-styles@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" +ansi-styles@^3.1.0, ansi-styles@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.0.tgz#c159b8d5be0f9e5a6f346dab94f16ce022161b88" + dependencies: + color-convert "^1.9.0" + ansicolors@~0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/ansicolors/-/ansicolors-0.2.1.tgz#be089599097b74a5c9c4a84a0cdbcdb62bd87aef" +any-observable@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/any-observable/-/any-observable-0.2.0.tgz#c67870058003579009083f54ac0abafb5c33d242" + anymatch@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-1.3.0.tgz#a3e52fa39168c825ff57b0248126ce5a8ff95507" @@ -80,6 +94,10 @@ anymatch@^1.3.0: arrify "^1.0.0" micromatch "^2.1.5" +app-root-path@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/app-root-path/-/app-root-path-2.0.1.tgz#cd62dcf8e4fd5a417efc664d2e5b10653c651b46" + append-transform@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/append-transform/-/append-transform-0.4.0.tgz#d76ebf8ca94d276e247a36bad44a4b74ab611991" @@ -749,6 +767,14 @@ chalk@^1.0.0, chalk@^1.1.0, chalk@^1.1.1, chalk@^1.1.3: strip-ansi "^3.0.0" supports-color "^2.0.0" +chalk@^2.0.1, chalk@^2.1.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.3.0.tgz#b5ea48efc9c1793dccc9b4767c93914d3f2d52ba" + dependencies: + ansi-styles "^3.1.0" + escape-string-regexp "^1.0.5" + supports-color "^4.0.0" + chokidar@^1.6.1: version "1.6.1" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-1.6.1.tgz#2f4447ab5e96e50fb3d789fd90d4c72e0e4c70c2" @@ -772,18 +798,29 @@ circular-json@^0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/circular-json/-/circular-json-0.3.1.tgz#be8b36aefccde8b3ca7aa2d6afc07a37242c0d2d" -cli-cursor@^1.0.1: +cli-cursor@^1.0.1, cli-cursor@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-1.0.2.tgz#64da3f7d56a54412e59794bd62dc35295e8f2987" dependencies: restore-cursor "^1.0.1" +cli-spinners@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-0.1.2.tgz#bb764d88e185fb9e1e6a2a1f19772318f605e31c" + cli-table@^0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/cli-table/-/cli-table-0.3.1.tgz#f53b05266a8b1a0b934b3d0821e6e2dc5914ae23" dependencies: colors "1.0.3" +cli-truncate@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-0.2.1.tgz#9f15cfbb0705005369216c626ac7d05ab90dd574" + dependencies: + slice-ansi "0.0.4" + string-width "^1.0.1" + cli-usage@^0.1.1: version "0.1.4" resolved "https://registry.yarnpkg.com/cli-usage/-/cli-usage-0.1.4.tgz#7c01e0dc706c234b39c933838c8e20b2175776e2" @@ -819,6 +856,16 @@ code-point-at@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" +color-convert@^1.9.0: + version "1.9.1" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.1.tgz#c1261107aeb2f294ebffec9ed9ecad529a6097ed" + dependencies: + color-name "^1.1.1" + +color-name@^1.1.1: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + colors@1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/colors/-/colors-1.0.3.tgz#0433f44d809680fdeb60ed260f1b0c262e82a40b" @@ -829,6 +876,10 @@ combined-stream@^1.0.5, combined-stream@~1.0.5: dependencies: delayed-stream "~1.0.0" +commander@^2.11.0: + version "2.13.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.13.0.tgz#6964bca67685df7c1f1430c584f07d7597885b9c" + commander@^2.8.1, commander@^2.9.0: version "2.9.0" resolved "https://registry.yarnpkg.com/commander/-/commander-2.9.0.tgz#9c99094176e12240cb22d6c5146098400fe0f7d4" @@ -875,6 +926,23 @@ core-util-is@~1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" +cosmiconfig@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-4.0.0.tgz#760391549580bbd2df1e562bc177b13c290972dc" + dependencies: + is-directory "^0.3.1" + js-yaml "^3.9.0" + parse-json "^4.0.0" + require-from-string "^2.0.1" + +cross-spawn@^5.0.1: + version "5.1.0" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" + dependencies: + lru-cache "^4.0.1" + shebang-command "^1.2.0" + which "^1.2.9" + cryptiles@2.x.x: version "2.0.5" resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-2.0.5.tgz#3bdfecdc608147c1c67202fa291e7dca59eaa3b8" @@ -907,6 +975,10 @@ dashdash@^1.12.0: dependencies: assert-plus "^1.0.0" +date-fns@^1.27.2: + version "1.29.0" + resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-1.29.0.tgz#12e609cdcb935127311d04d33334e2960a2a54e6" + debug@2.2.0, debug@~2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/debug/-/debug-2.2.0.tgz#f87057e995b1a1f6ae6a4960664137bc56f039da" @@ -919,10 +991,20 @@ debug@^2.1.1, debug@^2.2.0: dependencies: ms "0.7.2" +debug@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" + dependencies: + ms "2.0.0" + decamelize@^1.0.0, decamelize@^1.1.1: version "1.2.0" resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" +dedent@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c" + deep-extend@~0.4.0: version "0.4.1" resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.4.1.tgz#efe4113d08085f4e6f9687759810f807469e2253" @@ -980,6 +1062,10 @@ ecc-jsbn@~0.1.1: dependencies: jsbn "~0.1.0" +elegant-spinner@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/elegant-spinner/-/elegant-spinner-1.0.1.tgz#db043521c95d7e303fd8f345bedc3349cfb0729e" + encoding@^0.1.11: version "0.1.12" resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.12.tgz#538b66f3ee62cd1ab51ec323829d1f9480c74beb" @@ -998,6 +1084,12 @@ error-ex@^1.2.0: dependencies: is-arrayish "^0.2.1" +error-ex@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.1.tgz#f855a86ce61adc4e8621c3cda21e7a7612c3a8dc" + dependencies: + is-arrayish "^0.2.1" + es5-ext@^0.10.7, es5-ext@^0.10.8, es5-ext@~0.10.11, es5-ext@~0.10.2, es5-ext@~0.10.7: version "0.10.12" resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.12.tgz#aa84641d4db76b62abba5e45fd805ecbab140047" @@ -1114,6 +1206,13 @@ eslint-plugin-import@^2.2.0: minimatch "^3.0.3" pkg-up "^1.0.0" +eslint-plugin-prettier@^2.6.0: + version "2.6.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-2.6.0.tgz#33e4e228bdb06142d03c560ce04ec23f6c767dd7" + dependencies: + fast-diff "^1.1.1" + jest-docblock "^21.0.0" + eslint@^3.9.1: version "3.14.0" resolved "https://registry.yarnpkg.com/eslint/-/eslint-3.14.0.tgz#2c617e5f782fda5cbee5bc8be7ef5053af8e63a3" @@ -1164,6 +1263,10 @@ esprima@2.7.x, esprima@^2.6.0, esprima@^2.7.1: version "2.7.3" resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581" +esprima@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.0.tgz#4499eddcd1110e0b218bacf2fa7f7f59f55ca804" + esprima@~3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.0.0.tgz#53cf247acda77313e551c3aa2e73342d3fb4f7d9" @@ -1204,6 +1307,18 @@ exec-sh@^0.2.0: dependencies: merge "^1.1.3" +execa@^0.8.0: + version "0.8.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-0.8.0.tgz#d8d76bbc1b55217ed190fd6dd49d3c774ecfc8da" + dependencies: + cross-spawn "^5.0.1" + get-stream "^3.0.0" + is-stream "^1.1.0" + npm-run-path "^2.0.0" + p-finally "^1.0.0" + signal-exit "^3.0.0" + strip-eof "^1.0.0" + exit-hook@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/exit-hook/-/exit-hook-1.1.1.tgz#f05ca233b48c05d54fff07765df8507e95c02ff8" @@ -1234,6 +1349,10 @@ extsprintf@1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.0.2.tgz#e1080e0658e300b06294990cc70e1502235fd550" +fast-diff@^1.1.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.1.2.tgz#4b62c42b8e03de3f848460b639079920695d0154" + fast-levenshtein@~2.0.4: version "2.0.6" resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" @@ -1256,7 +1375,7 @@ fbjs@^0.8.5: setimmediate "^1.0.5" ua-parser-js "^0.7.9" -figures@^1.3.5: +figures@^1.3.5, figures@^1.7.0: version "1.7.0" resolved "https://registry.yarnpkg.com/figures/-/figures-1.7.0.tgz#cbe1e3affcf1cd44b80cadfed28dc793a9701d2e" dependencies: @@ -1291,6 +1410,10 @@ fill-range@^2.1.0: repeat-element "^1.1.2" repeat-string "^1.5.2" +find-parent-dir@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/find-parent-dir/-/find-parent-dir-0.3.0.tgz#33c44b429ab2b2f0646299c5f9f718f376ff8d54" + find-up@^1.0.0, find-up@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" @@ -1393,10 +1516,18 @@ get-caller-file@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.2.tgz#f702e63127e7e231c160a80c1554acb70d5047e5" +get-own-enumerable-property-symbols@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-2.0.1.tgz#5c4ad87f2834c4b9b4e84549dc1e0650fb38c24b" + get-stdin@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-5.0.1.tgz#122e161591e21ff4c52530305693f20e6393a398" +get-stream@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" + getpass@^0.1.1: version "0.1.6" resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.6.tgz#283ffd9fc1256840875311c1b60e8c40187110e6" @@ -1493,6 +1624,10 @@ has-flag@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa" +has-flag@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-2.0.0.tgz#e8207af1cc7b30d446cc70b734b5e8be18f88d51" + has-unicode@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" @@ -1557,6 +1692,16 @@ imurmurhash@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" +indent-string@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-2.1.0.tgz#8e2d48348742121b4a8218b7a137e9a52049dc80" + dependencies: + repeating "^2.0.0" + +indent-string@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-3.2.0.tgz#4a5fd6d27cc332f37e5419a504dbb837105c9289" + inflight@^1.0.4: version "1.0.6" resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" @@ -1630,6 +1775,10 @@ is-ci@^1.0.9: dependencies: ci-info "^1.0.0" +is-directory@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/is-directory/-/is-directory-0.3.1.tgz#61339b6f2475fc772fd9c9d83f5c8575dc154ae1" + is-dotfile@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.2.tgz#2c132383f39199f8edc268ca01b9b007d205cc4d" @@ -1648,6 +1797,10 @@ is-extglob@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0" +is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + is-finite@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.0.2.tgz#cc6677695602be550ef11e8b4aa6305342b6d0aa" @@ -1670,6 +1823,12 @@ is-glob@^2.0.0, is-glob@^2.0.1: dependencies: is-extglob "^1.0.0" +is-glob@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.0.tgz#9521c76845cc2610a85203ddf080a958c2ffabc0" + dependencies: + is-extglob "^2.1.1" + is-my-json-valid@^2.10.0, is-my-json-valid@^2.12.4: version "2.15.0" resolved "https://registry.yarnpkg.com/is-my-json-valid/-/is-my-json-valid-2.15.0.tgz#936edda3ca3c211fd98f3b2d3e08da43f7b2915b" @@ -1685,6 +1844,16 @@ is-number@^2.0.2, is-number@^2.1.0: dependencies: kind-of "^3.0.2" +is-obj@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" + +is-observable@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/is-observable/-/is-observable-0.2.0.tgz#b361311d83c6e5d726cabf5e250b0237106f5ae2" + dependencies: + symbol-observable "^0.2.2" + is-path-cwd@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-1.0.0.tgz#d225ec23132e89edd38fda767472e62e65f1106d" @@ -1709,17 +1878,25 @@ is-primitive@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/is-primitive/-/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575" +is-promise@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa" + is-property@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/is-property/-/is-property-1.0.2.tgz#57fe1c4e48474edd65b09911f26b1cd4095dda84" +is-regexp@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-regexp/-/is-regexp-1.0.0.tgz#fd2d883545c46bac5a633e7b9a09e87fa2cb5069" + is-resolvable@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.0.0.tgz#8df57c61ea2e3c501408d100fb013cf8d6e0cc62" dependencies: tryit "^1.0.1" -is-stream@^1.0.1: +is-stream@^1.0.1, is-stream@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" @@ -1739,6 +1916,10 @@ isexe@^1.1.1: version "1.1.2" resolved "https://registry.yarnpkg.com/isexe/-/isexe-1.1.2.tgz#36f3e22e60750920f5e7241a476a8c6a42275ad0" +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + isobject@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" @@ -1899,6 +2080,10 @@ jest-diff@^17.0.3: jest-matcher-utils "^17.0.3" pretty-format "~4.2.1" +jest-docblock@^21.0.0: + version "21.2.0" + resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-21.2.0.tgz#51529c3b30d5fd159da60c27ceedc195faf8d414" + jest-environment-jsdom@^17.0.2: version "17.0.2" resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-17.0.2.tgz#a3098dc29806d40802c52b62b848ab6aa00fdba0" @@ -1918,6 +2103,10 @@ jest-file-exists@^17.0.0: version "17.0.0" resolved "https://registry.yarnpkg.com/jest-file-exists/-/jest-file-exists-17.0.0.tgz#7f63eb73a1c43a13f461be261768b45af2cdd169" +jest-get-type@^21.2.0: + version "21.2.0" + resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-21.2.0.tgz#f6376ab9db4b60d81e39f30749c6c466f40d4a23" + jest-haste-map@^17.0.3: version "17.0.3" resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-17.0.3.tgz#5232783e70577217b6b17d2a1c1766637a1d2fbd" @@ -2014,6 +2203,15 @@ jest-util@^17.0.2: jest-mock "^17.0.2" mkdirp "^0.5.1" +jest-validate@^21.1.0: + version "21.2.1" + resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-21.2.1.tgz#cc0cbca653cd54937ba4f2a111796774530dd3c7" + dependencies: + chalk "^2.0.1" + jest-get-type "^21.2.0" + leven "^2.1.0" + pretty-format "^21.2.1" + jest@^17.0.0: version "17.0.3" resolved "https://registry.yarnpkg.com/jest/-/jest-17.0.3.tgz#89c43b30b0aaad42462e9ea701352dacbad4a354" @@ -2037,6 +2235,13 @@ js-yaml@3.x, js-yaml@^3.5.1, js-yaml@^3.7.0: argparse "^1.0.7" esprima "^2.6.0" +js-yaml@^3.9.0: + version "3.10.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.10.0.tgz#2e78441646bd4682e963f22b6e92823c309c62dc" + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + jsbn@~0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.0.tgz#650987da0dd74f4ebf5a11377a2aa2d273e97dfd" @@ -2074,6 +2279,10 @@ jsesc@~0.5.0: version "0.5.0" resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" +json-parse-better-errors@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.1.tgz#50183cd1b2d25275de069e9e71b467ac9eab973a" + json-schema@0.2.3: version "0.2.3" resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" @@ -2124,6 +2333,10 @@ lcid@^1.0.0: dependencies: invert-kv "^1.0.0" +leven@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/leven/-/leven-2.1.0.tgz#c2e7a9f772094dee9d34202ae8acce4687875580" + levn@^0.3.0, levn@~0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" @@ -2131,6 +2344,79 @@ levn@^0.3.0, levn@~0.3.0: prelude-ls "~1.1.2" type-check "~0.3.2" +lint-staged@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-6.1.0.tgz#28f600c10a6cbd249ceb003118a1552e53544a93" + dependencies: + app-root-path "^2.0.0" + chalk "^2.1.0" + commander "^2.11.0" + cosmiconfig "^4.0.0" + debug "^3.1.0" + dedent "^0.7.0" + execa "^0.8.0" + find-parent-dir "^0.3.0" + is-glob "^4.0.0" + jest-validate "^21.1.0" + listr "^0.13.0" + lodash "^4.17.4" + log-symbols "^2.0.0" + minimatch "^3.0.0" + npm-which "^3.0.1" + p-map "^1.1.1" + path-is-inside "^1.0.2" + pify "^3.0.0" + staged-git-files "0.0.4" + stringify-object "^3.2.0" + +listr-silent-renderer@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/listr-silent-renderer/-/listr-silent-renderer-1.1.1.tgz#924b5a3757153770bf1a8e3fbf74b8bbf3f9242e" + +listr-update-renderer@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/listr-update-renderer/-/listr-update-renderer-0.4.0.tgz#344d980da2ca2e8b145ba305908f32ae3f4cc8a7" + dependencies: + chalk "^1.1.3" + cli-truncate "^0.2.1" + elegant-spinner "^1.0.1" + figures "^1.7.0" + indent-string "^3.0.0" + log-symbols "^1.0.2" + log-update "^1.0.2" + strip-ansi "^3.0.1" + +listr-verbose-renderer@^0.4.0: + version "0.4.1" + resolved "https://registry.yarnpkg.com/listr-verbose-renderer/-/listr-verbose-renderer-0.4.1.tgz#8206f4cf6d52ddc5827e5fd14989e0e965933a35" + dependencies: + chalk "^1.1.3" + cli-cursor "^1.0.2" + date-fns "^1.27.2" + figures "^1.7.0" + +listr@^0.13.0: + version "0.13.0" + resolved "https://registry.yarnpkg.com/listr/-/listr-0.13.0.tgz#20bb0ba30bae660ee84cc0503df4be3d5623887d" + dependencies: + chalk "^1.1.3" + cli-truncate "^0.2.1" + figures "^1.7.0" + indent-string "^2.1.0" + is-observable "^0.2.0" + is-promise "^2.1.0" + is-stream "^1.1.0" + listr-silent-renderer "^1.1.1" + listr-update-renderer "^0.4.0" + listr-verbose-renderer "^0.4.0" + log-symbols "^1.0.2" + log-update "^1.0.2" + ora "^0.2.3" + p-map "^1.1.1" + rxjs "^5.4.2" + stream-to-observable "^0.2.0" + strip-ansi "^3.0.1" + load-json-file@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0" @@ -2218,6 +2504,29 @@ lodash@^4.0.0, lodash@^4.14.0, lodash@^4.2.0, lodash@^4.3.0: version "4.17.4" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae" +lodash@^4.17.4: + version "4.17.5" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.5.tgz#99a92d65c0272debe8c96b6057bc8fbfa3bed511" + +log-symbols@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-1.0.2.tgz#376ff7b58ea3086a0f09facc74617eca501e1a18" + dependencies: + chalk "^1.0.0" + +log-symbols@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-2.2.0.tgz#5740e1c5d6f0dfda4ad9323b5332107ef6b4c40a" + dependencies: + chalk "^2.0.1" + +log-update@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/log-update/-/log-update-1.0.2.tgz#19929f64c4093d2d2e7075a1dad8af59c296b8d1" + dependencies: + ansi-escapes "^1.0.0" + cli-cursor "^1.0.2" + longest@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/longest/-/longest-1.0.1.tgz#30a0b2da38f73770e8294a0d22e6625ed77d0097" @@ -2228,6 +2537,13 @@ loose-envify@^1.0.0: dependencies: js-tokens "^3.0.0" +lru-cache@^4.0.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.1.tgz#622e32e82488b49279114a4f9ecf45e7cd6bba55" + dependencies: + pseudomap "^1.0.2" + yallist "^2.1.2" + makeerror@1.0.x: version "1.0.11" resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.11.tgz#e01a5c9109f2af79660e4e8b9587790184f5a96c" @@ -2308,6 +2624,10 @@ ms@0.7.2: version "0.7.2" resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.2.tgz#ae25cf2512b3885a1d95d7f037868d8431124765" +ms@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + multimatch@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/multimatch/-/multimatch-2.1.0.tgz#9c7906a22fb4c02919e2f5f75161b4cdbd4b2a2b" @@ -2391,6 +2711,26 @@ normalize-path@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.0.1.tgz#47886ac1662760d4261b7d979d241709d3ce3f7a" +npm-path@^2.0.2: + version "2.0.4" + resolved "https://registry.yarnpkg.com/npm-path/-/npm-path-2.0.4.tgz#c641347a5ff9d6a09e4d9bce5580c4f505278e64" + dependencies: + which "^1.2.10" + +npm-run-path@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" + dependencies: + path-key "^2.0.0" + +npm-which@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/npm-which/-/npm-which-3.0.1.tgz#9225f26ec3a285c209cae67c3b11a6b4ab7140aa" + dependencies: + commander "^2.9.0" + npm-path "^2.0.2" + which "^1.2.10" + npmlog@^4.0.1: version "4.0.2" resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.0.2.tgz#d03950e0e78ce1527ba26d2a7592e9348ac3e75f" @@ -2457,6 +2797,15 @@ optionator@^0.8.1, optionator@^0.8.2: type-check "~0.3.2" wordwrap "~1.0.0" +ora@^0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/ora/-/ora-0.2.3.tgz#37527d220adcd53c39b73571d754156d5db657a4" + dependencies: + chalk "^1.1.1" + cli-cursor "^1.0.2" + cli-spinners "^0.1.2" + object-assign "^4.0.1" + os-homedir@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" @@ -2479,6 +2828,14 @@ output-file-sync@^1.1.0: mkdirp "^0.5.1" object-assign "^4.1.0" +p-finally@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" + +p-map@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/p-map/-/p-map-1.2.0.tgz#e4e94f311eabbc8633a1e79908165fca26241b6b" + parse-glob@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/parse-glob/-/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c" @@ -2494,6 +2851,13 @@ parse-json@^2.2.0: dependencies: error-ex "^1.2.0" +parse-json@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" + dependencies: + error-ex "^1.3.1" + json-parse-better-errors "^1.0.1" + parse5@^1.5.1: version "1.5.1" resolved "https://registry.yarnpkg.com/parse5/-/parse5-1.5.1.tgz#9b7f3b0de32be78dc2401b17573ccaf0f6f59d94" @@ -2508,10 +2872,14 @@ path-is-absolute@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" -path-is-inside@^1.0.1: +path-is-inside@^1.0.1, path-is-inside@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" +path-key@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" + path-parse@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.5.tgz#3c1adf871ea9cd6c9431b6ea2bd74a0ff055c4c1" @@ -2528,6 +2896,10 @@ pify@^2.0.0: version "2.3.0" resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" +pify@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" + pinkie-promise@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" @@ -2570,6 +2942,13 @@ prettier@^1.10.2: version "1.10.2" resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.10.2.tgz#1af8356d1842276a99a5b5529c82dd9e9ad3cc93" +pretty-format@^21.2.1: + version "21.2.1" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-21.2.1.tgz#ae5407f3cf21066cd011aa1ba5fce7b6a2eddb36" + dependencies: + ansi-regex "^3.0.0" + ansi-styles "^3.2.0" + pretty-format@~4.2.1: version "4.2.3" resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-4.2.3.tgz#8894c2ac81419cf801629d8f66320a25380d8b05" @@ -2596,6 +2975,10 @@ prr@~0.0.0: version "0.0.0" resolved "https://registry.yarnpkg.com/prr/-/prr-0.0.0.tgz#1a84b85908325501411853d0081ee3fa86e2926a" +pseudomap@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" + punycode@^1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" @@ -2772,6 +3155,10 @@ require-directory@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" +require-from-string@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.1.tgz#c545233e9d7da6616e9d59adfb39fc9f588676ff" + require-main-filename@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1" @@ -2824,6 +3211,12 @@ rx-lite@^3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/rx-lite/-/rx-lite-3.1.2.tgz#19ce502ca572665f3b647b10939f97fd1615f102" +rxjs@^5.4.2: + version "5.5.6" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-5.5.6.tgz#e31fb96d6fd2ff1fd84bcea8ae9c02d007179c02" + dependencies: + symbol-observable "1.0.1" + sane@~1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/sane/-/sane-1.4.1.tgz#88f763d74040f5f0c256b6163db399bf110ac715" @@ -2855,6 +3248,16 @@ setimmediate@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" +shebang-command@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" + dependencies: + shebang-regex "^1.0.0" + +shebang-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" + shelljs@^0.7.5: version "0.7.6" resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.7.6.tgz#379cccfb56b91c8601e4793356eb5382924de9ad" @@ -2940,6 +3343,16 @@ sshpk@^1.7.0: jsbn "~0.1.0" tweetnacl "~0.14.0" +staged-git-files@0.0.4: + version "0.0.4" + resolved "https://registry.yarnpkg.com/staged-git-files/-/staged-git-files-0.0.4.tgz#d797e1b551ca7a639dec0237dc6eb4bb9be17d35" + +stream-to-observable@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/stream-to-observable/-/stream-to-observable-0.2.0.tgz#59d6ea393d87c2c0ddac10aa0d561bc6ba6f0e10" + dependencies: + any-observable "^0.2.0" + string-width@^1.0.1, string-width@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" @@ -2963,6 +3376,14 @@ string_decoder@~0.10.x: version "0.10.31" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" +stringify-object@^3.2.0: + version "3.2.1" + resolved "https://registry.yarnpkg.com/stringify-object/-/stringify-object-3.2.1.tgz#2720c2eff940854c819f6ee252aaeb581f30624d" + dependencies: + get-own-enumerable-property-symbols "^2.0.1" + is-obj "^1.0.1" + is-regexp "^1.0.0" + stringstream@~0.0.4: version "0.0.5" resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.5.tgz#4e484cd4de5a0bbbee18e46307710a8a81621878" @@ -2983,6 +3404,10 @@ strip-bom@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" +strip-eof@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" + strip-json-comments@~1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-1.0.4.tgz#1e15fbcac97d3ee99bf2d73b4c656b082bbafb91" @@ -3005,6 +3430,20 @@ supports-color@^3.1.0, supports-color@^3.1.2: dependencies: has-flag "^1.0.0" +supports-color@^4.0.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-4.5.0.tgz#be7a0de484dec5c5cddf8b3d59125044912f635b" + dependencies: + has-flag "^2.0.0" + +symbol-observable@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.0.1.tgz#8340fc4702c3122df5d22288f88283f513d3fdd4" + +symbol-observable@^0.2.2: + version "0.2.4" + resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-0.2.4.tgz#95a83db26186d6af7e7a18dbd9760a2f86d08f40" + "symbol-tree@>= 3.1.0 < 4.0.0": version "3.2.1" resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.1.tgz#8549dd1d01fa9f893c18cc9ab0b106b4d9b168cb" @@ -3202,6 +3641,12 @@ which@^1.0.5, which@^1.1.1: dependencies: isexe "^1.1.1" +which@^1.2.10, which@^1.2.9: + version "1.3.0" + resolved "https://registry.yarnpkg.com/which/-/which-1.3.0.tgz#ff04bdfc010ee547d780bec38e1ac1c2777d253a" + dependencies: + isexe "^2.0.0" + wide-align@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.0.tgz#40edde802a71fea1f070da3e62dcda2e7add96ad" @@ -3260,6 +3705,10 @@ y18n@^3.2.1: version "3.2.1" resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41" +yallist@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" + yargs-parser@^4.2.0: version "4.2.1" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-4.2.1.tgz#29cceac0dc4f03c6c87b4a9f217dd18c9f74871c" From c5d5d950d048685b6653490f31864f911b044038 Mon Sep 17 00:00:00 2001 From: Marcin Chudy Date: Tue, 6 Feb 2018 23:19:17 +0100 Subject: [PATCH 19/83] Add support for text-decoration property --- src/index.test.js | 55 +++++++++++++++++++++++++++++ src/transforms/index.js | 2 ++ src/transforms/textDecoration.js | 60 ++++++++++++++++++++++++++++++++ 3 files changed, 117 insertions(+) create mode 100644 src/transforms/textDecoration.js diff --git a/src/index.test.js b/src/index.test.js index 3375f70..1ca4b27 100644 --- a/src/index.test.js +++ b/src/index.test.js @@ -557,6 +557,61 @@ it('transforms box-shadow and enforces offset-y if offset-x present', () => { ) }) +it('transforms text-decoration into text-decoration- properties', () => + runTest([['text-decoration', 'underline dotted red']], { + textDecorationLine: 'underline', + textDecorationStyle: 'dotted', + textDecorationColor: 'red', + })) + +it('transforms text-decoration without color', () => + runTest([['text-decoration', 'underline dotted']], { + textDecorationLine: 'underline', + textDecorationStyle: 'dotted', + textDecorationColor: 'black', + })) + +it('transforms text-decoration without style', () => + runTest([['text-decoration', 'underline red']], { + textDecorationLine: 'underline', + textDecorationStyle: 'solid', + textDecorationColor: 'red', + })) + +it('transforms text-decoration without style and color', () => + runTest([['text-decoration', 'underline']], { + textDecorationLine: 'underline', + textDecorationStyle: 'solid', + textDecorationColor: 'black', + })) + +it('transforms text-decoration with two line properties', () => + runTest([['text-decoration', 'underline line-through dashed red']], { + textDecorationLine: 'underline line-through', + textDecorationStyle: 'dashed', + textDecorationColor: 'red', + })) + +it('transforms text-decoration in different order', () => + runTest([['text-decoration', 'dashed red underline line-through']], { + textDecorationLine: 'underline line-through', + textDecorationStyle: 'dashed', + textDecorationColor: 'red', + })) + +it('transforms text-decoration with none', () => + runTest([['text-decoration', 'none']], { + textDecorationLine: 'none', + textDecorationStyle: 'solid', + textDecorationColor: 'black', + })) + +it('does not transform text-decoration if multiple colors are used', () => { + expect(() => + transformCss([['text-decoration', 'underline red yellow']]) + ).toThrow() +}) + it('allows blacklisting shorthands', () => { const actualStyles = transformCss([['border-radius', '50']], ['borderRadius']) expect(actualStyles).toEqual({ borderRadius: 50 }) diff --git a/src/transforms/index.js b/src/transforms/index.js index 22e9978..ff958aa 100644 --- a/src/transforms/index.js +++ b/src/transforms/index.js @@ -3,6 +3,7 @@ const boxShadow = require('./boxShadow') const flex = require('./flex') const font = require('./font') const fontFamily = require('./fontFamily') +const textDecoration = require('./textDecoration') const transform = require('./transform') const { directionFactory, @@ -74,5 +75,6 @@ module.exports = { padding, shadowOffset, textShadowOffset, + textDecoration, transform, } diff --git a/src/transforms/textDecoration.js b/src/transforms/textDecoration.js new file mode 100644 index 0000000..33455a6 --- /dev/null +++ b/src/transforms/textDecoration.js @@ -0,0 +1,60 @@ +import { regExpToken, tokens } from '../tokenTypes' + +const { NONE, SPACE, COLOR } = tokens + +const STYLE = regExpToken(/^(solid|double|dotted|dashed)$/) +const LINE = regExpToken(/^(none|underline|line-through)$/) + +const defaultTextDecorationLine = 'none' +const defaultTextDecorationStyle = 'solid' +const defaultTextDecorationColor = 'black' + +module.exports = tokenStream => { + let line + let style + let color + + if (tokenStream.matches(NONE)) { + tokenStream.expectEmpty() + return { + $merge: { + textDecorationLine: defaultTextDecorationLine, + textDecorationStyle: defaultTextDecorationStyle, + textDecorationColor: defaultTextDecorationColor, + }, + } + } + + let didParseFirst = false + while (tokenStream.hasTokens()) { + if (didParseFirst) tokenStream.expect(SPACE) + + if (line === undefined && tokenStream.matches(LINE)) { + line = tokenStream.lastValue + + tokenStream.saveRewindPoint() + if (tokenStream.matches(SPACE) && tokenStream.matches(LINE)) { + line += ` ${tokenStream.lastValue}` + } else { + tokenStream.rewind() + } + } else if (style === undefined && tokenStream.matches(STYLE)) { + style = tokenStream.lastValue + } else if (color === undefined && tokenStream.matches(COLOR)) { + color = tokenStream.lastValue + } else { + tokenStream.throw() + } + + didParseFirst = true + } + + const $merge = { + textDecorationLine: line !== undefined ? line : defaultTextDecorationLine, + textDecorationColor: + color !== undefined ? color : defaultTextDecorationColor, + textDecorationStyle: + style !== undefined ? style : defaultTextDecorationStyle, + } + return { $merge } +} From 0559ff2846bb7de2178b776819428cd363f05240 Mon Sep 17 00:00:00 2001 From: Jacob Parker Date: Wed, 7 Feb 2018 21:17:33 +0000 Subject: [PATCH 20/83] Improve spec compliance for text-decoration --- src/index.test.js | 14 ++++++++++++++ src/transforms/textDecoration.js | 30 +++++++++++++++--------------- 2 files changed, 29 insertions(+), 15 deletions(-) diff --git a/src/index.test.js b/src/index.test.js index 1ca4b27..baeb2ad 100644 --- a/src/index.test.js +++ b/src/index.test.js @@ -599,6 +599,13 @@ it('transforms text-decoration in different order', () => textDecorationColor: 'red', })) +it('transforms text-decoration with ine in different order', () => + runTest([['text-decoration', 'line-through underline']], { + textDecorationLine: 'underline line-through', + textDecorationStyle: 'solid', + textDecorationColor: 'black', + })) + it('transforms text-decoration with none', () => runTest([['text-decoration', 'none']], { textDecorationLine: 'none', @@ -606,6 +613,13 @@ it('transforms text-decoration with none', () => textDecorationColor: 'black', })) +it('transforms text-decoration with none as part of multiple terms', () => + runTest([['text-decoration', 'yellow none']], { + textDecorationLine: 'none', + textDecorationStyle: 'solid', + textDecorationColor: 'yellow', + })) + it('does not transform text-decoration if multiple colors are used', () => { expect(() => transformCss([['text-decoration', 'underline red yellow']]) diff --git a/src/transforms/textDecoration.js b/src/transforms/textDecoration.js index 33455a6..3b963ad 100644 --- a/src/transforms/textDecoration.js +++ b/src/transforms/textDecoration.js @@ -1,6 +1,6 @@ import { regExpToken, tokens } from '../tokenTypes' -const { NONE, SPACE, COLOR } = tokens +const { SPACE, COLOR } = tokens const STYLE = regExpToken(/^(solid|double|dotted|dashed)$/) const LINE = regExpToken(/^(none|underline|line-through)$/) @@ -14,30 +14,30 @@ module.exports = tokenStream => { let style let color - if (tokenStream.matches(NONE)) { - tokenStream.expectEmpty() - return { - $merge: { - textDecorationLine: defaultTextDecorationLine, - textDecorationStyle: defaultTextDecorationStyle, - textDecorationColor: defaultTextDecorationColor, - }, - } - } - let didParseFirst = false while (tokenStream.hasTokens()) { if (didParseFirst) tokenStream.expect(SPACE) if (line === undefined && tokenStream.matches(LINE)) { - line = tokenStream.lastValue + const lines = [tokenStream.lastValue] tokenStream.saveRewindPoint() - if (tokenStream.matches(SPACE) && tokenStream.matches(LINE)) { - line += ` ${tokenStream.lastValue}` + if ( + lines[0] !== 'none' && + tokenStream.matches(SPACE) && + tokenStream.matches(LINE) + ) { + lines.push(tokenStream.lastValue) + if (lines[0] === lines[1]) { + throw new Error('Expected two different text decoration line styles') + } + // Underline comes before line-through + lines.sort().reverse() } else { tokenStream.rewind() } + + line = lines.join(' ') } else if (style === undefined && tokenStream.matches(STYLE)) { style = tokenStream.lastValue } else if (color === undefined && tokenStream.matches(COLOR)) { From b744210ae1ade75c4c633614dee89302a8d65f35 Mon Sep 17 00:00:00 2001 From: Jacob Parker Date: Wed, 7 Feb 2018 21:28:55 +0000 Subject: [PATCH 21/83] Add support for text-decoration-line --- src/index.test.js | 15 +++++++++++++++ src/tokenTypes.js | 1 + src/transforms/index.js | 2 ++ src/transforms/textDecoration.js | 3 +-- src/transforms/textDecorationLine.js | 20 ++++++++++++++++++++ 5 files changed, 39 insertions(+), 2 deletions(-) create mode 100644 src/transforms/textDecorationLine.js diff --git a/src/index.test.js b/src/index.test.js index 1ca4b27..ac06b6c 100644 --- a/src/index.test.js +++ b/src/index.test.js @@ -612,6 +612,21 @@ it('does not transform text-decoration if multiple colors are used', () => { ).toThrow() }) +it('transforms text-decoration-line with underline line-through', () => + runTest([['text-decoration-line', 'underline line-through']], { + textDecorationLine: 'underline line-through', + })) + +it('transforms text-decoration-line with line-through underline', () => + runTest([['text-decoration-line', 'line-through underline']], { + textDecorationLine: 'underline line-through', + })) + +it('transforms text-decoration-line with none', () => + runTest([['text-decoration-line', 'none']], { + textDecorationLine: 'none', + })) + it('allows blacklisting shorthands', () => { const actualStyles = transformCss([['border-radius', '50']], ['borderRadius']) expect(actualStyles).toEqual({ borderRadius: 50 }) diff --git a/src/tokenTypes.js b/src/tokenTypes.js index 483df24..acef3d0 100644 --- a/src/tokenTypes.js +++ b/src/tokenTypes.js @@ -67,4 +67,5 @@ module.exports.tokens = { IDENT: regExpToken(identRe), STRING: matchString, COLOR: matchColor, + LINE: regExpToken(/^(none|underline|line-through)$/), } diff --git a/src/transforms/index.js b/src/transforms/index.js index ff958aa..4845b10 100644 --- a/src/transforms/index.js +++ b/src/transforms/index.js @@ -4,6 +4,7 @@ const flex = require('./flex') const font = require('./font') const fontFamily = require('./fontFamily') const textDecoration = require('./textDecoration') +const textDecorationLine = require('./textDecorationLine') const transform = require('./transform') const { directionFactory, @@ -76,5 +77,6 @@ module.exports = { shadowOffset, textShadowOffset, textDecoration, + textDecorationLine, transform, } diff --git a/src/transforms/textDecoration.js b/src/transforms/textDecoration.js index 33455a6..80433a6 100644 --- a/src/transforms/textDecoration.js +++ b/src/transforms/textDecoration.js @@ -1,9 +1,8 @@ import { regExpToken, tokens } from '../tokenTypes' -const { NONE, SPACE, COLOR } = tokens +const { NONE, SPACE, LINE, COLOR } = tokens const STYLE = regExpToken(/^(solid|double|dotted|dashed)$/) -const LINE = regExpToken(/^(none|underline|line-through)$/) const defaultTextDecorationLine = 'none' const defaultTextDecorationStyle = 'solid' diff --git a/src/transforms/textDecorationLine.js b/src/transforms/textDecorationLine.js new file mode 100644 index 0000000..6f51338 --- /dev/null +++ b/src/transforms/textDecorationLine.js @@ -0,0 +1,20 @@ +const { tokens } = require('../tokenTypes') + +const { SPACE, LINE } = tokens + +module.exports = tokenStream => { + const lines = [] + + let didParseFirst = false + while (tokenStream.hasTokens()) { + if (didParseFirst) tokenStream.expect(SPACE) + + lines.push(tokenStream.expect(LINE)) + + didParseFirst = true + } + + lines.sort().reverse() + + return lines.join(' ') +} From 9c729d4d27b75e2f9548f01224b58eec626381d5 Mon Sep 17 00:00:00 2001 From: Jacob Parker Date: Thu, 8 Feb 2018 09:29:32 +0000 Subject: [PATCH 22/83] Leave validation of text-decoration-line to react-native --- src/transforms/textDecoration.js | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/transforms/textDecoration.js b/src/transforms/textDecoration.js index 3b963ad..e257012 100644 --- a/src/transforms/textDecoration.js +++ b/src/transforms/textDecoration.js @@ -28,9 +28,6 @@ module.exports = tokenStream => { tokenStream.matches(LINE) ) { lines.push(tokenStream.lastValue) - if (lines[0] === lines[1]) { - throw new Error('Expected two different text decoration line styles') - } // Underline comes before line-through lines.sort().reverse() } else { From ba73205ff67008b430a5280ee291780b9f662676 Mon Sep 17 00:00:00 2001 From: Jacob Parker Date: Fri, 9 Feb 2018 21:30:58 +0000 Subject: [PATCH 23/83] Implement text shadow, unify text & box shadow, improve spec compliance, begin new test layout --- .eslintrc.js | 6 + package.json | 12 +- src/index.test.js | 29 +- src/transforms/__tests__/textShadow.js | 34 + src/transforms/boxShadow.js | 61 +- src/transforms/index.js | 2 + src/transforms/textShadow.js | 12 + src/transforms/util.js | 50 +- yarn.lock | 2739 +++++++++++++++--------- 9 files changed, 1866 insertions(+), 1079 deletions(-) create mode 100644 src/transforms/__tests__/textShadow.js create mode 100644 src/transforms/textShadow.js diff --git a/.eslintrc.js b/.eslintrc.js index b24299d..e78f1d0 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -4,4 +4,10 @@ module.exports = { rules: { 'prettier/prettier': 2, }, + overrides: [ + { + files: '**/__tests__/*.js', + env: { jest: true }, + }, + ], } diff --git a/package.json b/package.json index 2597ac0..d861704 100644 --- a/package.json +++ b/package.json @@ -34,14 +34,14 @@ }, "homepage": "https://github.com/styled-components/css-to-react-native#readme", "devDependencies": { - "babel-cli": "^6.18.0", - "babel-preset-es2015": "^6.18.0", - "eslint": "^3.9.1", - "eslint-config-airbnb-base": "^10.0.1", + "babel-cli": "^6.26.0", + "babel-preset-es2015": "^6.24.1", + "eslint": "^4.17.0", + "eslint-config-airbnb-base": "^12.1.0", "eslint-config-prettier": "^2.9.0", - "eslint-plugin-import": "^2.2.0", + "eslint-plugin-import": "^2.8.0", "eslint-plugin-prettier": "^2.6.0", - "jest": "^17.0.0", + "jest": "^22.2.2", "lint-staged": "^6.1.0", "prettier": "^1.10.2" }, diff --git a/src/index.test.js b/src/index.test.js index 1ca4b27..40e7043 100644 --- a/src/index.test.js +++ b/src/index.test.js @@ -1,4 +1,4 @@ -/* global jest it, expect */ +/* global it, expect */ import transformCss, { getStylesForProperty } from '.' const runTest = (inputCss, expectedStyles) => { @@ -489,22 +489,6 @@ it('transforms box-shadow without blur-radius', () => shadowOpacity: 1, })) -it('transforms box-shadow without color', () => - runTest([['box-shadow', '10px 20px 30px']], { - shadowOffset: { width: 10, height: 20 }, - shadowRadius: 30, - shadowColor: 'black', - shadowOpacity: 1, - })) - -it('transforms box-shadow without blur-radius, color', () => - runTest([['box-shadow', '10px 20px']], { - shadowOffset: { width: 10, height: 20 }, - shadowRadius: 0, - shadowColor: 'black', - shadowOpacity: 1, - })) - it('transforms box-shadow with rgb color', () => runTest([['box-shadow', '10px 20px rgb(100, 100, 100)']], { shadowOffset: { width: 10, height: 20 }, @@ -551,10 +535,13 @@ it('transforms box-shadow enforces offset to be present', () => { ) }) -it('transforms box-shadow and enforces offset-y if offset-x present', () => { - expect(() => transformCss([['box-shadow', '10px']])).toThrow( - 'Failed to parse declaration "boxShadow: 10px"' - ) +it('transforms box-shadow and enforces offset-x and offset-y', () => { + expect(() => transformCss([['box-shadow', 'black']])).toThrow() + expect(() => transformCss([['box-shadow', '10px black']])).toThrow() +}) + +it('transforms box-shadow and enforces color', () => { + expect(() => transformCss([['text-decoration', '10px 20px 30px']])).toThrow() }) it('transforms text-decoration into text-decoration- properties', () => diff --git a/src/transforms/__tests__/textShadow.js b/src/transforms/__tests__/textShadow.js new file mode 100644 index 0000000..2505de0 --- /dev/null +++ b/src/transforms/__tests__/textShadow.js @@ -0,0 +1,34 @@ +import transformCss from '../..' + +it('textShadow with all values', () => { + expect(transformCss([['text-shadow', '10px 20px 30px red']])).toEqual({ + textShadowOffset: { width: 10, height: 20 }, + textShadowRadius: 30, + textShadowColor: 'red', + }) +}) + +it('textShadow omitting blur', () => { + expect(transformCss([['text-shadow', '10px 20px red']])).toEqual({ + textShadowOffset: { width: 10, height: 20 }, + textShadowRadius: 0, + textShadowColor: 'red', + }) +}) + +it('textShadow omitting blur, offset-y', () => { + expect(transformCss([['text-shadow', '10px 20px red']])).toEqual({ + textShadowOffset: { width: 10, height: 20 }, + textShadowRadius: 0, + textShadowColor: 'red', + }) +}) + +it('textShadow enforces offset-x and offset-y', () => { + expect(() => transformCss([['text-shadow', 'red']])).toThrow() + expect(() => transformCss([['text-shadow', '10px red']])).toThrow() +}) + +it('textShadow enforces color', () => { + expect(() => transformCss([['text-shadow', '10px 20px']])).toThrow() +}) diff --git a/src/transforms/boxShadow.js b/src/transforms/boxShadow.js index b3b942a..24bae34 100644 --- a/src/transforms/boxShadow.js +++ b/src/transforms/boxShadow.js @@ -1,56 +1,13 @@ -const { tokens } = require('../tokenTypes') - -const { NONE, SPACE, COLOR, LENGTH } = tokens +const { parseShadow } = require('./util') module.exports = tokenStream => { - let offsetX - let offsetY - let blurRadius - let color - - if (tokenStream.matches(NONE)) { - tokenStream.expectEmpty() - return { - $merge: { - shadowOffset: { width: 0, height: 0 }, - shadowRadius: 0, - shadowColor: 'black', - shadowOpacity: 1, - }, - } - } - - let didParseFirst = false - while (tokenStream.hasTokens()) { - if (didParseFirst) tokenStream.expect(SPACE) - - if (offsetX === undefined && tokenStream.matches(LENGTH)) { - offsetX = tokenStream.lastValue - tokenStream.expect(SPACE) - offsetY = tokenStream.expect(LENGTH) - - tokenStream.saveRewindPoint() - if (tokenStream.matches(SPACE) && tokenStream.matches(LENGTH)) { - blurRadius = tokenStream.lastValue - } else { - tokenStream.rewind() - } - } else if (color === undefined && tokenStream.matches(COLOR)) { - color = tokenStream.lastValue - } else { - tokenStream.throw() - } - - didParseFirst = true - } - - if (offsetX === undefined) tokenStream.throw() - - const $merge = { - shadowOffset: { width: offsetX, height: offsetY }, - shadowRadius: blurRadius !== undefined ? blurRadius : 0, - shadowColor: color !== undefined ? color : 'black', - shadowOpacity: 1, + const { offset, radius, color } = parseShadow(tokenStream) + return { + $merge: { + shadowOffset: offset, + shadowRadius: radius, + shadowColor: color, + shadowOpacity: 1, + }, } - return { $merge } } diff --git a/src/transforms/index.js b/src/transforms/index.js index ff958aa..136d165 100644 --- a/src/transforms/index.js +++ b/src/transforms/index.js @@ -3,6 +3,7 @@ const boxShadow = require('./boxShadow') const flex = require('./flex') const font = require('./font') const fontFamily = require('./fontFamily') +const textShadow = require('./textShadow') const textDecoration = require('./textDecoration') const transform = require('./transform') const { @@ -74,6 +75,7 @@ module.exports = { margin, padding, shadowOffset, + textShadow, textShadowOffset, textDecoration, transform, diff --git a/src/transforms/textShadow.js b/src/transforms/textShadow.js new file mode 100644 index 0000000..3a87fdd --- /dev/null +++ b/src/transforms/textShadow.js @@ -0,0 +1,12 @@ +const { parseShadow } = require('./util') + +module.exports = tokenStream => { + const { offset, radius, color } = parseShadow(tokenStream) + return { + $merge: { + textShadowOffset: offset, + textShadowRadius: radius, + textShadowColor: color, + }, + } +} diff --git a/src/transforms/util.js b/src/transforms/util.js index 1eaf722..c745a43 100644 --- a/src/transforms/util.js +++ b/src/transforms/util.js @@ -1,6 +1,6 @@ const { tokens } = require('../tokenTypes') -const { LENGTH, PERCENT, SPACE } = tokens +const { LENGTH, PERCENT, COLOR, SPACE, NONE } = tokens module.exports.directionFactory = ({ types = [LENGTH, PERCENT], @@ -76,3 +76,51 @@ module.exports.shadowOffsetFactory = () => tokenStream => { tokenStream.expectEmpty() return { width, height } } + +module.exports.parseShadow = tokenStream => { + let offsetX + let offsetY + let radius = 0 + let color + + if (tokenStream.matches(NONE)) { + tokenStream.expectEmpty() + return { + offset: { width: 0, height: 0 }, + radius: 0, + color: 'black', + } + } + + let didParseFirst = false + while (tokenStream.hasTokens()) { + if (didParseFirst) tokenStream.expect(SPACE) + + if (offsetX === undefined && tokenStream.matches(LENGTH)) { + offsetX = tokenStream.lastValue + tokenStream.expect(SPACE) + offsetY = tokenStream.expect(LENGTH) + + tokenStream.saveRewindPoint() + if (tokenStream.matches(SPACE) && tokenStream.matches(LENGTH)) { + radius = tokenStream.lastValue + } else { + tokenStream.rewind() + } + } else if (color === undefined && tokenStream.matches(COLOR)) { + color = tokenStream.lastValue + } else { + tokenStream.throw() + } + + didParseFirst = true + } + + if (offsetX === undefined || color === undefined) tokenStream.throw() + + return { + offset: { width: offsetX, height: offsetY }, + radius, + color, + } +} diff --git a/yarn.lock b/yarn.lock index 072c87f..6fbd000 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,19 +2,27 @@ # yarn lockfile v1 -abab@^1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/abab/-/abab-1.0.3.tgz#b81de5f7274ec4e756d797cd834f303642724e5d" +"@babel/code-frame@^7.0.0-beta.35": + version "7.0.0-beta.39" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.0.0-beta.39.tgz#91c90bb65207fc5a55128cb54956ded39e850457" + dependencies: + chalk "^2.0.0" + esutils "^2.0.2" + js-tokens "^3.0.0" -abbrev@1, abbrev@1.0.x: +abab@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/abab/-/abab-1.0.4.tgz#5faad9c2c07f60dd76770f71cf025b62a63cfd4e" + +abbrev@1: version "1.0.9" resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.0.9.tgz#91b4792588a7738c25f35dd6f63752a2f8776135" -acorn-globals@^1.0.4: - version "1.0.9" - resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-1.0.9.tgz#55bb5e98691507b74579d0513413217c380c54cf" +acorn-globals@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-4.1.0.tgz#ab716025dbe17c54d3ef81d32ece2b2d99fe2538" dependencies: - acorn "^2.1.0" + acorn "^5.0.0" acorn-jsx@^3.0.0: version "3.0.1" @@ -22,29 +30,34 @@ acorn-jsx@^3.0.0: dependencies: acorn "^3.0.4" -acorn@^2.1.0, acorn@^2.4.0: - version "2.7.0" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-2.7.0.tgz#ab6e7d9d886aaca8b085bc3312b79a198433f0e7" - acorn@^3.0.4: version "3.3.0" resolved "https://registry.yarnpkg.com/acorn/-/acorn-3.3.0.tgz#45e37fb39e8da3f25baee3ff5369e2bb5f22017a" -acorn@^4.0.1: - version "4.0.4" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-4.0.4.tgz#17a8d6a7a6c4ef538b814ec9abac2779293bf30a" +acorn@^5.0.0, acorn@^5.3.0, acorn@^5.4.0: + version "5.4.1" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.4.1.tgz#fdc58d9d17f4a4e98d102ded826a9b9759125102" -ajv-keywords@^1.0.0: - version "1.5.1" - resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-1.5.1.tgz#314dd0a4b3368fad3dfcdc54ede6171b886daf3c" +ajv-keywords@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-2.1.1.tgz#617997fc5f60576894c435f940d819e135b80762" -ajv@^4.7.0: - version "4.11.2" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-4.11.2.tgz#f166c3c11cbc6cb9dcc102a5bcfe5b72c95287e6" +ajv@^4.9.1: + version "4.11.8" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-4.11.8.tgz#82ffb02b29e662ae53bdc20af15947706739c536" dependencies: co "^4.6.0" json-stable-stringify "^1.0.1" +ajv@^5.1.0, ajv@^5.2.3, ajv@^5.3.0: + version "5.5.2" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.5.2.tgz#73b5eeca3fab653e3d3f9422b341ad42205dc965" + dependencies: + co "^4.6.0" + fast-deep-equal "^1.0.0" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.3.0" + align-text@^0.1.1, align-text@^0.1.3: version "0.1.4" resolved "https://registry.yarnpkg.com/align-text/-/align-text-0.1.4.tgz#0cd90a561093f35d0a99256c22b7069433fad117" @@ -57,10 +70,14 @@ amdefine@>=0.0.4: version "1.0.1" resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" -ansi-escapes@^1.0.0, ansi-escapes@^1.1.0, ansi-escapes@^1.4.0: +ansi-escapes@^1.0.0: version "1.4.0" resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-1.4.0.tgz#d3a8a83b319aa67793662b13e761c7911422306e" +ansi-escapes@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.0.0.tgz#ec3e8b4e9f8064fc02c3ac9b65f1c275bda8ef92" + ansi-regex@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" @@ -79,10 +96,6 @@ ansi-styles@^3.1.0, ansi-styles@^3.2.0: dependencies: color-convert "^1.9.0" -ansicolors@~0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/ansicolors/-/ansicolors-0.2.1.tgz#be089599097b74a5c9c4a84a0cdbcdb62bd87aef" - any-observable@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/any-observable/-/any-observable-0.2.0.tgz#c67870058003579009083f54ac0abafb5c33d242" @@ -131,10 +144,6 @@ arr-flatten@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.0.1.tgz#e5ffe54d45e19f32f216e91eb99c8ce892bb604b" -array-differ@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/array-differ/-/array-differ-1.0.0.tgz#eff52e3758249d33be402b8bb8e564bb2b5d4031" - array-equal@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/array-equal/-/array-equal-1.0.0.tgz#8c2a5ef2472fd9ea742b04c77a75093ba2757c93" @@ -173,11 +182,19 @@ assert-plus@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" +astral-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" + async-each@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.1.tgz#19d386a1d9edc6e7c1c85d388aedbcc56d33602d" -async@1.x, async@^1.4.0, async@^1.4.2: +async-limiter@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.0.tgz#78faed8c3d074ab81f22b4e985d79e8738f720f8" + +async@^1.4.0: version "1.5.2" resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" @@ -199,32 +216,40 @@ aws-sign2@~0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.6.0.tgz#14342dd38dbcc94d0e5b87d763cd63612c0e794f" +aws-sign2@~0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" + aws4@^1.2.1: version "1.5.0" resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.5.0.tgz#0a29ffb79c31c9e712eeb087e8e7a64b4a56d755" -babel-cli@^6.18.0: - version "6.22.2" - resolved "https://registry.yarnpkg.com/babel-cli/-/babel-cli-6.22.2.tgz#3f814c8acf52759082b8fedd9627f938936ab559" +aws4@^1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.6.0.tgz#83ef5ca860b2b32e4a0deedee8c771b9db57471e" + +babel-cli@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-cli/-/babel-cli-6.26.0.tgz#502ab54874d7db88ad00b887a06383ce03d002f1" dependencies: - babel-core "^6.22.1" - babel-polyfill "^6.22.0" - babel-register "^6.22.0" - babel-runtime "^6.22.0" - commander "^2.8.1" - convert-source-map "^1.1.0" + babel-core "^6.26.0" + babel-polyfill "^6.26.0" + babel-register "^6.26.0" + babel-runtime "^6.26.0" + commander "^2.11.0" + convert-source-map "^1.5.0" fs-readdir-recursive "^1.0.0" - glob "^7.0.0" - lodash "^4.2.0" - output-file-sync "^1.1.0" - path-is-absolute "^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.0" - v8flags "^2.0.10" + source-map "^0.5.6" + v8flags "^2.1.1" optionalDependencies: chokidar "^1.6.1" -babel-code-frame@^6.16.0, babel-code-frame@^6.22.0: +babel-code-frame@^6.22.0: version "6.22.0" resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.22.0.tgz#027620bee567a88c32561574e7fd0801d33118e4" dependencies: @@ -232,7 +257,15 @@ babel-code-frame@^6.16.0, babel-code-frame@^6.22.0: esutils "^2.0.2" js-tokens "^3.0.0" -babel-core@^6.0.0, babel-core@^6.22.0, babel-core@^6.22.1: +babel-code-frame@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b" + dependencies: + chalk "^1.1.3" + esutils "^2.0.2" + js-tokens "^3.0.2" + +babel-core@^6.0.0, babel-core@^6.22.0: version "6.22.1" resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.22.1.tgz#9c5fd658ba1772d28d721f6d25d968fc7ae21648" dependencies: @@ -256,6 +289,30 @@ babel-core@^6.0.0, babel-core@^6.22.0, babel-core@^6.22.1: slash "^1.0.0" source-map "^0.5.0" +babel-core@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.26.0.tgz#af32f78b31a6fcef119c87b0fd8d9753f03a0bb8" + dependencies: + 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-generator@^6.18.0, babel-generator@^6.22.0: version "6.22.0" resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.22.0.tgz#d642bf4961911a8adc7c692b0c9297f325cda805" @@ -268,73 +325,86 @@ babel-generator@^6.18.0, babel-generator@^6.22.0: lodash "^4.2.0" source-map "^0.5.0" -babel-helper-call-delegate@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-helper-call-delegate/-/babel-helper-call-delegate-6.22.0.tgz#119921b56120f17e9dae3f74b4f5cc7bcc1b37ef" +babel-generator@^6.26.0: + version "6.26.1" + resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.26.1.tgz#1844408d3b8f0d35a404ea7ac180f087a601bd90" dependencies: - babel-helper-hoist-variables "^6.22.0" - babel-runtime "^6.22.0" - babel-traverse "^6.22.0" - babel-types "^6.22.0" + babel-messages "^6.23.0" + babel-runtime "^6.26.0" + babel-types "^6.26.0" + detect-indent "^4.0.0" + jsesc "^1.3.0" + lodash "^4.17.4" + source-map "^0.5.7" + trim-right "^1.0.1" -babel-helper-define-map@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-helper-define-map/-/babel-helper-define-map-6.22.0.tgz#9544e9502b2d6dfe7d00ff60e82bd5a7a89e95b7" +babel-helper-call-delegate@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz#ece6aacddc76e41c3461f88bfc575bd0daa2df8d" dependencies: - babel-helper-function-name "^6.22.0" + babel-helper-hoist-variables "^6.24.1" babel-runtime "^6.22.0" - babel-types "^6.22.0" - lodash "^4.2.0" + babel-traverse "^6.24.1" + babel-types "^6.24.1" -babel-helper-function-name@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-helper-function-name/-/babel-helper-function-name-6.22.0.tgz#51f1bdc4bb89b15f57a9b249f33d742816dcbefc" +babel-helper-define-map@^6.24.1: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-helper-define-map/-/babel-helper-define-map-6.26.0.tgz#a5f56dab41a25f97ecb498c7ebaca9819f95be5f" dependencies: - babel-helper-get-function-arity "^6.22.0" - babel-runtime "^6.22.0" - babel-template "^6.22.0" - babel-traverse "^6.22.0" - babel-types "^6.22.0" + babel-helper-function-name "^6.24.1" + babel-runtime "^6.26.0" + babel-types "^6.26.0" + lodash "^4.17.4" -babel-helper-get-function-arity@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.22.0.tgz#0beb464ad69dc7347410ac6ade9f03a50634f5ce" +babel-helper-function-name@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz#d3475b8c03ed98242a25b48351ab18399d3580a9" dependencies: + babel-helper-get-function-arity "^6.24.1" babel-runtime "^6.22.0" - babel-types "^6.22.0" + babel-template "^6.24.1" + babel-traverse "^6.24.1" + babel-types "^6.24.1" -babel-helper-hoist-variables@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.22.0.tgz#3eacbf731d80705845dd2e9718f600cfb9b4ba72" +babel-helper-get-function-arity@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz#8f7782aa93407c41d3aa50908f89b031b1b6853d" dependencies: babel-runtime "^6.22.0" - babel-types "^6.22.0" + babel-types "^6.24.1" -babel-helper-optimise-call-expression@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.22.0.tgz#f8d5d4b40a6e2605a6a7f9d537b581bea3756d15" +babel-helper-hoist-variables@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz#1ecb27689c9d25513eadbc9914a73f5408be7a76" dependencies: babel-runtime "^6.22.0" - babel-types "^6.22.0" + babel-types "^6.24.1" -babel-helper-regex@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-helper-regex/-/babel-helper-regex-6.22.0.tgz#79f532be1647b1f0ee3474b5f5c3da58001d247d" +babel-helper-optimise-call-expression@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz#f7a13427ba9f73f8f4fa993c54a97882d1244257" dependencies: babel-runtime "^6.22.0" - babel-types "^6.22.0" - lodash "^4.2.0" + babel-types "^6.24.1" -babel-helper-replace-supers@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-helper-replace-supers/-/babel-helper-replace-supers-6.22.0.tgz#1fcee2270657548908c34db16bcc345f9850cf42" +babel-helper-regex@^6.24.1: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-helper-regex/-/babel-helper-regex-6.26.0.tgz#325c59f902f82f24b74faceed0363954f6495e72" dependencies: - babel-helper-optimise-call-expression "^6.22.0" - babel-messages "^6.22.0" + babel-runtime "^6.26.0" + babel-types "^6.26.0" + lodash "^4.17.4" + +babel-helper-replace-supers@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz#bf6dbfe43938d17369a213ca8a8bf74b6a90ab1a" + dependencies: + babel-helper-optimise-call-expression "^6.24.1" + babel-messages "^6.23.0" babel-runtime "^6.22.0" - babel-template "^6.22.0" - babel-traverse "^6.22.0" - babel-types "^6.22.0" + babel-template "^6.24.1" + babel-traverse "^6.24.1" + babel-types "^6.24.1" babel-helpers@^6.22.0: version "6.22.0" @@ -343,13 +413,19 @@ babel-helpers@^6.22.0: babel-runtime "^6.22.0" babel-template "^6.22.0" -babel-jest@^17.0.2: - version "17.0.2" - resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-17.0.2.tgz#8d51e0d03759713c331f108eb0b2eaa4c6efff74" +babel-helpers@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helpers/-/babel-helpers-6.24.1.tgz#3471de9caec388e5c850e597e58a26ddf37602b2" dependencies: - babel-core "^6.0.0" - babel-plugin-istanbul "^2.0.0" - babel-preset-jest "^17.0.2" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + +babel-jest@^22.2.2: + version "22.2.2" + resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-22.2.2.tgz#eda38dca284e32cc5257f96a9b51351975de4e04" + dependencies: + babel-plugin-istanbul "^4.1.5" + babel-preset-jest "^22.2.0" babel-messages@^6.22.0: version "6.22.0" @@ -357,24 +433,33 @@ babel-messages@^6.22.0: dependencies: babel-runtime "^6.22.0" +babel-messages@^6.23.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-messages/-/babel-messages-6.23.0.tgz#f3cdf4703858035b2a2951c6ec5edf6c62f2630e" + dependencies: + babel-runtime "^6.22.0" + babel-plugin-check-es2015-constants@^6.22.0: version "6.22.0" resolved "https://registry.yarnpkg.com/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz#35157b101426fd2ffd3da3f75c7d1e91835bbf8a" dependencies: babel-runtime "^6.22.0" -babel-plugin-istanbul@^2.0.0: - version "2.0.3" - resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-2.0.3.tgz#266b304b9109607d60748474394676982f660df4" +babel-plugin-istanbul@^4.1.5: + version "4.1.5" + resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-4.1.5.tgz#6760cdd977f411d3e175bb064f2bc327d99b2b6e" dependencies: - find-up "^1.1.2" - istanbul-lib-instrument "^1.1.4" - object-assign "^4.1.0" - test-exclude "^2.1.1" + find-up "^2.1.0" + istanbul-lib-instrument "^1.7.5" + test-exclude "^4.1.1" + +babel-plugin-jest-hoist@^22.2.0: + version "22.2.0" + resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-22.2.0.tgz#bd34f39d652406669713b8c89e23ef25c890b993" -babel-plugin-jest-hoist@^17.0.2: - version "17.0.2" - resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-17.0.2.tgz#213488ce825990acd4c30f887dca09fffeb45235" +babel-plugin-syntax-object-rest-spread@^6.13.0: + version "6.13.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz#fd6536f2bce13836ffa3a5458c4903a597bb3bf5" babel-plugin-transform-es2015-arrow-functions@^6.22.0: version "6.22.0" @@ -388,36 +473,36 @@ babel-plugin-transform-es2015-block-scoped-functions@^6.22.0: dependencies: babel-runtime "^6.22.0" -babel-plugin-transform-es2015-block-scoping@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.22.0.tgz#00d6e3a0bebdcfe7536b9d653b44a9141e63e47e" +babel-plugin-transform-es2015-block-scoping@^6.24.1: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz#d70f5299c1308d05c12f463813b0a09e73b1895f" dependencies: - babel-runtime "^6.22.0" - babel-template "^6.22.0" - babel-traverse "^6.22.0" - babel-types "^6.22.0" - lodash "^4.2.0" + babel-runtime "^6.26.0" + babel-template "^6.26.0" + babel-traverse "^6.26.0" + babel-types "^6.26.0" + lodash "^4.17.4" -babel-plugin-transform-es2015-classes@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.22.0.tgz#54d44998fd823d9dca15292324161c331c1b6f14" +babel-plugin-transform-es2015-classes@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz#5a4c58a50c9c9461e564b4b2a3bfabc97a2584db" dependencies: - babel-helper-define-map "^6.22.0" - babel-helper-function-name "^6.22.0" - babel-helper-optimise-call-expression "^6.22.0" - babel-helper-replace-supers "^6.22.0" - babel-messages "^6.22.0" + babel-helper-define-map "^6.24.1" + babel-helper-function-name "^6.24.1" + babel-helper-optimise-call-expression "^6.24.1" + babel-helper-replace-supers "^6.24.1" + babel-messages "^6.23.0" babel-runtime "^6.22.0" - babel-template "^6.22.0" - babel-traverse "^6.22.0" - babel-types "^6.22.0" + babel-template "^6.24.1" + babel-traverse "^6.24.1" + babel-types "^6.24.1" -babel-plugin-transform-es2015-computed-properties@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.22.0.tgz#7c383e9629bba4820c11b0425bdd6290f7f057e7" +babel-plugin-transform-es2015-computed-properties@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz#6fe2a8d16895d5634f4cd999b6d3480a308159b3" dependencies: babel-runtime "^6.22.0" - babel-template "^6.22.0" + babel-template "^6.24.1" babel-plugin-transform-es2015-destructuring@^6.22.0: version "6.22.0" @@ -425,12 +510,12 @@ babel-plugin-transform-es2015-destructuring@^6.22.0: dependencies: babel-runtime "^6.22.0" -babel-plugin-transform-es2015-duplicate-keys@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.22.0.tgz#672397031c21610d72dd2bbb0ba9fb6277e1c36b" +babel-plugin-transform-es2015-duplicate-keys@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz#73eb3d310ca969e3ef9ec91c53741a6f1576423e" dependencies: babel-runtime "^6.22.0" - babel-types "^6.22.0" + babel-types "^6.24.1" babel-plugin-transform-es2015-for-of@^6.22.0: version "6.22.0" @@ -438,13 +523,13 @@ babel-plugin-transform-es2015-for-of@^6.22.0: dependencies: babel-runtime "^6.22.0" -babel-plugin-transform-es2015-function-name@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.22.0.tgz#f5fcc8b09093f9a23c76ac3d9e392c3ec4b77104" +babel-plugin-transform-es2015-function-name@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz#834c89853bc36b1af0f3a4c5dbaa94fd8eacaa8b" dependencies: - babel-helper-function-name "^6.22.0" + babel-helper-function-name "^6.24.1" babel-runtime "^6.22.0" - babel-types "^6.22.0" + babel-types "^6.24.1" babel-plugin-transform-es2015-literals@^6.22.0: version "6.22.0" @@ -452,63 +537,63 @@ babel-plugin-transform-es2015-literals@^6.22.0: dependencies: babel-runtime "^6.22.0" -babel-plugin-transform-es2015-modules-amd@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.22.0.tgz#bf69cd34889a41c33d90dfb740e0091ccff52f21" +babel-plugin-transform-es2015-modules-amd@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz#3b3e54017239842d6d19c3011c4bd2f00a00d154" dependencies: - babel-plugin-transform-es2015-modules-commonjs "^6.22.0" + babel-plugin-transform-es2015-modules-commonjs "^6.24.1" babel-runtime "^6.22.0" - babel-template "^6.22.0" + babel-template "^6.24.1" -babel-plugin-transform-es2015-modules-commonjs@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.22.0.tgz#6ca04e22b8e214fb50169730657e7a07dc941145" +babel-plugin-transform-es2015-modules-commonjs@^6.24.1: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.0.tgz#0d8394029b7dc6abe1a97ef181e00758dd2e5d8a" dependencies: - babel-plugin-transform-strict-mode "^6.22.0" - babel-runtime "^6.22.0" - babel-template "^6.22.0" - babel-types "^6.22.0" + babel-plugin-transform-strict-mode "^6.24.1" + babel-runtime "^6.26.0" + babel-template "^6.26.0" + babel-types "^6.26.0" -babel-plugin-transform-es2015-modules-systemjs@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.22.0.tgz#810cd0cd025a08383b84236b92c6e31f88e644ad" +babel-plugin-transform-es2015-modules-systemjs@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz#ff89a142b9119a906195f5f106ecf305d9407d23" dependencies: - babel-helper-hoist-variables "^6.22.0" + babel-helper-hoist-variables "^6.24.1" babel-runtime "^6.22.0" - babel-template "^6.22.0" + babel-template "^6.24.1" -babel-plugin-transform-es2015-modules-umd@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.22.0.tgz#60d0ba3bd23258719c64391d9bf492d648dc0fae" +babel-plugin-transform-es2015-modules-umd@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz#ac997e6285cd18ed6176adb607d602344ad38468" dependencies: - babel-plugin-transform-es2015-modules-amd "^6.22.0" + babel-plugin-transform-es2015-modules-amd "^6.24.1" babel-runtime "^6.22.0" - babel-template "^6.22.0" + babel-template "^6.24.1" -babel-plugin-transform-es2015-object-super@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.22.0.tgz#daa60e114a042ea769dd53fe528fc82311eb98fc" +babel-plugin-transform-es2015-object-super@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz#24cef69ae21cb83a7f8603dad021f572eb278f8d" dependencies: - babel-helper-replace-supers "^6.22.0" + babel-helper-replace-supers "^6.24.1" babel-runtime "^6.22.0" -babel-plugin-transform-es2015-parameters@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.22.0.tgz#57076069232019094f27da8c68bb7162fe208dbb" +babel-plugin-transform-es2015-parameters@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz#57ac351ab49caf14a97cd13b09f66fdf0a625f2b" dependencies: - babel-helper-call-delegate "^6.22.0" - babel-helper-get-function-arity "^6.22.0" + babel-helper-call-delegate "^6.24.1" + babel-helper-get-function-arity "^6.24.1" babel-runtime "^6.22.0" - babel-template "^6.22.0" - babel-traverse "^6.22.0" - babel-types "^6.22.0" + babel-template "^6.24.1" + babel-traverse "^6.24.1" + babel-types "^6.24.1" -babel-plugin-transform-es2015-shorthand-properties@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.22.0.tgz#8ba776e0affaa60bff21e921403b8a652a2ff723" +babel-plugin-transform-es2015-shorthand-properties@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz#24f875d6721c87661bbd99a4622e51f14de38aa0" dependencies: babel-runtime "^6.22.0" - babel-types "^6.22.0" + babel-types "^6.24.1" babel-plugin-transform-es2015-spread@^6.22.0: version "6.22.0" @@ -516,13 +601,13 @@ babel-plugin-transform-es2015-spread@^6.22.0: dependencies: babel-runtime "^6.22.0" -babel-plugin-transform-es2015-sticky-regex@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.22.0.tgz#ab316829e866ee3f4b9eb96939757d19a5bc4593" +babel-plugin-transform-es2015-sticky-regex@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz#00c1cdb1aca71112cdf0cf6126c2ed6b457ccdbc" dependencies: - babel-helper-regex "^6.22.0" + babel-helper-regex "^6.24.1" babel-runtime "^6.22.0" - babel-types "^6.22.0" + babel-types "^6.24.1" babel-plugin-transform-es2015-template-literals@^6.22.0: version "6.22.0" @@ -536,69 +621,70 @@ babel-plugin-transform-es2015-typeof-symbol@^6.22.0: dependencies: babel-runtime "^6.22.0" -babel-plugin-transform-es2015-unicode-regex@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.22.0.tgz#8d9cc27e7ee1decfe65454fb986452a04a613d20" +babel-plugin-transform-es2015-unicode-regex@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz#d38b12f42ea7323f729387f18a7c5ae1faeb35e9" dependencies: - babel-helper-regex "^6.22.0" + babel-helper-regex "^6.24.1" babel-runtime "^6.22.0" regexpu-core "^2.0.0" -babel-plugin-transform-regenerator@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.22.0.tgz#65740593a319c44522157538d690b84094617ea6" +babel-plugin-transform-regenerator@^6.24.1: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz#e0703696fbde27f0a3efcacf8b4dca2f7b3a8f2f" dependencies: - regenerator-transform "0.9.8" + regenerator-transform "^0.10.0" -babel-plugin-transform-strict-mode@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.22.0.tgz#e008df01340fdc87e959da65991b7e05970c8c7c" +babel-plugin-transform-strict-mode@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz#d5faf7aa578a65bbe591cf5edae04a0c67020758" dependencies: babel-runtime "^6.22.0" - babel-types "^6.22.0" + babel-types "^6.24.1" -babel-polyfill@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-polyfill/-/babel-polyfill-6.22.0.tgz#1ac99ebdcc6ba4db1e2618c387b2084a82154a3b" +babel-polyfill@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-polyfill/-/babel-polyfill-6.26.0.tgz#379937abc67d7895970adc621f284cd966cf2153" dependencies: - babel-runtime "^6.22.0" - core-js "^2.4.0" - regenerator-runtime "^0.10.0" + babel-runtime "^6.26.0" + core-js "^2.5.0" + regenerator-runtime "^0.10.5" -babel-preset-es2015@^6.18.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-preset-es2015/-/babel-preset-es2015-6.22.0.tgz#af5a98ecb35eb8af764ad8a5a05eb36dc4386835" +babel-preset-es2015@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-preset-es2015/-/babel-preset-es2015-6.24.1.tgz#d44050d6bc2c9feea702aaf38d727a0210538939" dependencies: babel-plugin-check-es2015-constants "^6.22.0" babel-plugin-transform-es2015-arrow-functions "^6.22.0" babel-plugin-transform-es2015-block-scoped-functions "^6.22.0" - babel-plugin-transform-es2015-block-scoping "^6.22.0" - babel-plugin-transform-es2015-classes "^6.22.0" - babel-plugin-transform-es2015-computed-properties "^6.22.0" + babel-plugin-transform-es2015-block-scoping "^6.24.1" + babel-plugin-transform-es2015-classes "^6.24.1" + babel-plugin-transform-es2015-computed-properties "^6.24.1" babel-plugin-transform-es2015-destructuring "^6.22.0" - babel-plugin-transform-es2015-duplicate-keys "^6.22.0" + babel-plugin-transform-es2015-duplicate-keys "^6.24.1" babel-plugin-transform-es2015-for-of "^6.22.0" - babel-plugin-transform-es2015-function-name "^6.22.0" + babel-plugin-transform-es2015-function-name "^6.24.1" babel-plugin-transform-es2015-literals "^6.22.0" - babel-plugin-transform-es2015-modules-amd "^6.22.0" - babel-plugin-transform-es2015-modules-commonjs "^6.22.0" - babel-plugin-transform-es2015-modules-systemjs "^6.22.0" - babel-plugin-transform-es2015-modules-umd "^6.22.0" - babel-plugin-transform-es2015-object-super "^6.22.0" - babel-plugin-transform-es2015-parameters "^6.22.0" - babel-plugin-transform-es2015-shorthand-properties "^6.22.0" + babel-plugin-transform-es2015-modules-amd "^6.24.1" + babel-plugin-transform-es2015-modules-commonjs "^6.24.1" + babel-plugin-transform-es2015-modules-systemjs "^6.24.1" + babel-plugin-transform-es2015-modules-umd "^6.24.1" + babel-plugin-transform-es2015-object-super "^6.24.1" + babel-plugin-transform-es2015-parameters "^6.24.1" + babel-plugin-transform-es2015-shorthand-properties "^6.24.1" babel-plugin-transform-es2015-spread "^6.22.0" - babel-plugin-transform-es2015-sticky-regex "^6.22.0" + babel-plugin-transform-es2015-sticky-regex "^6.24.1" babel-plugin-transform-es2015-template-literals "^6.22.0" babel-plugin-transform-es2015-typeof-symbol "^6.22.0" - babel-plugin-transform-es2015-unicode-regex "^6.22.0" - babel-plugin-transform-regenerator "^6.22.0" + babel-plugin-transform-es2015-unicode-regex "^6.24.1" + babel-plugin-transform-regenerator "^6.24.1" -babel-preset-jest@^17.0.2: - version "17.0.2" - resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-17.0.2.tgz#141e935debe164aaa0364c220d31ccb2176493b2" +babel-preset-jest@^22.2.0: + version "22.2.0" + resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-22.2.0.tgz#f77b43f06ef4d8547214b2e206cc76a25c3ba0e2" dependencies: - babel-plugin-jest-hoist "^17.0.2" + babel-plugin-jest-hoist "^22.2.0" + babel-plugin-syntax-object-rest-spread "^6.13.0" babel-register@^6.22.0: version "6.22.0" @@ -612,6 +698,18 @@ babel-register@^6.22.0: mkdirp "^0.5.1" source-map-support "^0.4.2" +babel-register@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-register/-/babel-register-6.26.0.tgz#6ed021173e2fcb486d7acb45c6009a856f647071" + dependencies: + babel-core "^6.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-runtime@^6.18.0, babel-runtime@^6.22.0: version "6.22.0" resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.22.0.tgz#1cf8b4ac67c77a4ddb0db2ae1f74de52ac4ca611" @@ -619,6 +717,13 @@ babel-runtime@^6.18.0, babel-runtime@^6.22.0: core-js "^2.4.0" regenerator-runtime "^0.10.0" +babel-runtime@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe" + dependencies: + core-js "^2.4.0" + regenerator-runtime "^0.11.0" + babel-template@^6.16.0, babel-template@^6.22.0: version "6.22.0" resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.22.0.tgz#403d110905a4626b317a2a1fcb8f3b73204b2edb" @@ -629,6 +734,16 @@ babel-template@^6.16.0, babel-template@^6.22.0: babylon "^6.11.0" lodash "^4.2.0" +babel-template@^6.24.1, babel-template@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.26.0.tgz#de03e2d16396b069f46dd9fff8521fb1a0e35e02" + dependencies: + babel-runtime "^6.26.0" + babel-traverse "^6.26.0" + babel-types "^6.26.0" + babylon "^6.18.0" + lodash "^4.17.4" + babel-traverse@^6.18.0, babel-traverse@^6.22.0, babel-traverse@^6.22.1: version "6.22.1" resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.22.1.tgz#3b95cd6b7427d6f1f757704908f2fc9748a5f59f" @@ -643,6 +758,20 @@ babel-traverse@^6.18.0, babel-traverse@^6.22.0, babel-traverse@^6.22.1: invariant "^2.2.0" lodash "^4.2.0" +babel-traverse@^6.24.1, babel-traverse@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.26.0.tgz#46a9cbd7edcc62c8e5c064e2d2d8d0f4035766ee" + dependencies: + babel-code-frame "^6.26.0" + babel-messages "^6.23.0" + babel-runtime "^6.26.0" + babel-types "^6.26.0" + babylon "^6.18.0" + debug "^2.6.8" + globals "^9.18.0" + invariant "^2.2.2" + lodash "^4.17.4" + babel-types@^6.18.0, babel-types@^6.19.0, babel-types@^6.22.0: version "6.22.0" resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.22.0.tgz#2a447e8d0ea25d2512409e4175479fd78cc8b1db" @@ -652,14 +781,31 @@ babel-types@^6.18.0, babel-types@^6.19.0, babel-types@^6.22.0: lodash "^4.2.0" to-fast-properties "^1.0.1" -babylon@^6.11.0, babylon@^6.13.0, babylon@^6.15.0: +babel-types@^6.24.1, babel-types@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.26.0.tgz#a3b073f94ab49eb6fa55cd65227a334380632497" + dependencies: + babel-runtime "^6.26.0" + esutils "^2.0.2" + lodash "^4.17.4" + to-fast-properties "^1.0.3" + +babylon@^6.11.0, babylon@^6.15.0: version "6.15.0" resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.15.0.tgz#ba65cfa1a80e1759b0e89fb562e27dccae70348e" +babylon@^6.18.0: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3" + balanced-match@^0.4.1: version "0.4.2" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-0.4.2.tgz#cb3f3e3c732dc0f01ee70b403f302e61d7709838" +balanced-match@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" + bcrypt-pbkdf@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.0.tgz#3ca76b85241c7170bf7d9703e7b9aa74630040d4" @@ -682,6 +828,18 @@ boom@2.x.x: dependencies: hoek "2.x.x" +boom@4.x.x: + version "4.3.1" + resolved "https://registry.yarnpkg.com/boom/-/boom-4.3.1.tgz#4f8a3005cb4a7e3889f749030fd25b96e01d2e31" + dependencies: + hoek "4.x.x" + +boom@5.x.x: + version "5.2.0" + resolved "https://registry.yarnpkg.com/boom/-/boom-5.2.0.tgz#5dd9da6ee3a5f302077436290cb717d3f4a54e02" + dependencies: + hoek "4.x.x" + brace-expansion@^1.0.0: version "1.1.6" resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.6.tgz#7197d7eaa9b87e648390ea61fc66c84427420df9" @@ -689,6 +847,13 @@ brace-expansion@^1.0.0: balanced-match "^0.4.1" concat-map "0.0.1" +brace-expansion@^1.1.7: + version "1.1.10" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.10.tgz#5205cdf64c9798c180dc74b7bfc670c3974e6300" + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + braces@^1.8.2: version "1.8.5" resolved "https://registry.yarnpkg.com/braces/-/braces-1.8.5.tgz#ba77962e12dff969d6b76711e914b737857bf6a7" @@ -697,15 +862,19 @@ braces@^1.8.2: preserve "^0.2.0" repeat-element "^1.1.2" +browser-process-hrtime@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-0.1.2.tgz#425d68a58d3447f02a04aa894187fce8af8b7b8e" + browser-resolve@^1.11.2: version "1.11.2" resolved "https://registry.yarnpkg.com/browser-resolve/-/browser-resolve-1.11.2.tgz#8ff09b0a2c421718a1051c260b32e48f442938ce" dependencies: resolve "1.1.7" -bser@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/bser/-/bser-1.0.2.tgz#381116970b2a6deea5646dd15dd7278444b56169" +bser@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/bser/-/bser-2.0.0.tgz#9ac78d3ed5d915804fd87acb158bc797147a1719" dependencies: node-int64 "^0.4.0" @@ -735,21 +904,18 @@ camelcase@^1.0.2: version "1.2.1" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-1.2.1.tgz#9bb5304d2e0b56698b2c758b08a3eaa9daa58a39" -camelcase@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-3.0.0.tgz#32fc4b9fcdaf845fcdf7e73bb97cac2261f0ab0a" - -cardinal@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/cardinal/-/cardinal-1.0.0.tgz#50e21c1b0aa37729f9377def196b5a9cec932ee9" - dependencies: - ansicolors "~0.2.1" - redeyed "~1.0.0" +camelcase@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" caseless@~0.11.0: version "0.11.0" resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.11.0.tgz#715b96ea9841593cc33067923f5ec60ebda4f7d7" +caseless@~0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" + center-align@^0.1.1: version "0.1.3" resolved "https://registry.yarnpkg.com/center-align/-/center-align-0.1.3.tgz#aa0d32629b6ee972200411cbd4461c907bc2b7ad" @@ -767,7 +933,7 @@ chalk@^1.0.0, chalk@^1.1.0, chalk@^1.1.1, chalk@^1.1.3: strip-ansi "^3.0.0" supports-color "^2.0.0" -chalk@^2.0.1, chalk@^2.1.0: +chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0: version "2.3.0" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.3.0.tgz#b5ea48efc9c1793dccc9b4767c93914d3f2d52ba" dependencies: @@ -775,6 +941,10 @@ chalk@^2.0.1, chalk@^2.1.0: escape-string-regexp "^1.0.5" supports-color "^4.0.0" +chardet@^0.4.0: + version "0.4.2" + resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.4.2.tgz#b5473b33dc97c424e5d98dc87d55d4d8a29c8bf2" + chokidar@^1.6.1: version "1.6.1" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-1.6.1.tgz#2f4447ab5e96e50fb3d789fd90d4c72e0e4c70c2" @@ -798,22 +968,22 @@ circular-json@^0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/circular-json/-/circular-json-0.3.1.tgz#be8b36aefccde8b3ca7aa2d6afc07a37242c0d2d" -cli-cursor@^1.0.1, cli-cursor@^1.0.2: +cli-cursor@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-1.0.2.tgz#64da3f7d56a54412e59794bd62dc35295e8f2987" dependencies: restore-cursor "^1.0.1" +cli-cursor@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" + dependencies: + restore-cursor "^2.0.0" + cli-spinners@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-0.1.2.tgz#bb764d88e185fb9e1e6a2a1f19772318f605e31c" -cli-table@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/cli-table/-/cli-table-0.3.1.tgz#f53b05266a8b1a0b934b3d0821e6e2dc5914ae23" - dependencies: - colors "1.0.3" - cli-truncate@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-0.2.1.tgz#9f15cfbb0705005369216c626ac7d05ab90dd574" @@ -821,13 +991,6 @@ cli-truncate@^0.2.1: slice-ansi "0.0.4" string-width "^1.0.1" -cli-usage@^0.1.1: - version "0.1.4" - resolved "https://registry.yarnpkg.com/cli-usage/-/cli-usage-0.1.4.tgz#7c01e0dc706c234b39c933838c8e20b2175776e2" - dependencies: - marked "^0.3.6" - marked-terminal "^1.6.2" - cli-width@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.1.0.tgz#b234ca209b29ef66fc518d9b98d5847b00edf00a" @@ -840,12 +1003,12 @@ cliui@^2.1.0: right-align "^0.1.1" wordwrap "0.0.2" -cliui@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d" +cliui@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-4.0.0.tgz#743d4650e05f36d1ed2575b59638d87322bfbbcc" dependencies: - string-width "^1.0.1" - strip-ansi "^3.0.1" + string-width "^2.1.1" + strip-ansi "^4.0.0" wrap-ansi "^2.0.0" co@^4.6.0: @@ -866,10 +1029,6 @@ color-name@^1.1.1: version "1.1.3" resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" -colors@1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/colors/-/colors-1.0.3.tgz#0433f44d809680fdeb60ed260f1b0c262e82a40b" - combined-stream@^1.0.5, combined-stream@~1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.5.tgz#938370a57b4a51dea2c77c15d5c5fdf895164009" @@ -880,7 +1039,7 @@ commander@^2.11.0: version "2.13.0" resolved "https://registry.yarnpkg.com/commander/-/commander-2.13.0.tgz#6964bca67685df7c1f1430c584f07d7597885b9c" -commander@^2.8.1, commander@^2.9.0: +commander@^2.9.0: version "2.9.0" resolved "https://registry.yarnpkg.com/commander/-/commander-2.9.0.tgz#9c99094176e12240cb22d6c5146098400fe0f7d4" dependencies: @@ -890,7 +1049,7 @@ concat-map@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" -concat-stream@^1.4.6: +concat-stream@^1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.0.tgz#0aac662fd52be78964d5532f694784e70110acf7" dependencies: @@ -906,14 +1065,18 @@ contains-path@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/contains-path/-/contains-path-0.1.0.tgz#fe8cf184ff6670b6baef01a9d4861a5cbec4120a" -content-type-parser@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/content-type-parser/-/content-type-parser-1.0.1.tgz#c3e56988c53c65127fb46d4032a3a900246fdc94" +content-type-parser@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/content-type-parser/-/content-type-parser-1.0.2.tgz#caabe80623e63638b2502fd4c7f12ff4ce2352e7" convert-source-map@^1.1.0: version "1.3.0" resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.3.0.tgz#e9f3e9c6e2728efc2676696a70eb382f73106a67" +convert-source-map@^1.4.0, convert-source-map@^1.5.0: + version "1.5.1" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.5.1.tgz#b8278097b9bc229365de5c62cf5fcaed8b5599e5" + core-js@^1.0.0: version "1.2.7" resolved "https://registry.yarnpkg.com/core-js/-/core-js-1.2.7.tgz#652294c14651db28fa93bd2d5ff2983a4f08c636" @@ -922,6 +1085,10 @@ core-js@^2.4.0: version "2.4.1" resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.4.1.tgz#4de911e667b0eae9124e34254b53aea6fc618d3e" +core-js@^2.5.0: + version "2.5.3" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.5.3.tgz#8acc38345824f16d8365b7c9b4259168e8ed603e" + core-util-is@~1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" @@ -935,7 +1102,7 @@ cosmiconfig@^4.0.0: parse-json "^4.0.0" require-from-string "^2.0.1" -cross-spawn@^5.0.1: +cross-spawn@^5.0.1, cross-spawn@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" dependencies: @@ -949,26 +1116,26 @@ cryptiles@2.x.x: dependencies: boom "2.x.x" +cryptiles@3.x.x: + version "3.1.2" + resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-3.1.2.tgz#a89fbb220f5ce25ec56e8c4aa8a4fd7b5b0d29fe" + dependencies: + boom "5.x.x" + css-color-keywords@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/css-color-keywords/-/css-color-keywords-1.0.0.tgz#fea2616dc676b2962686b3af8dbdbe180b244e05" -cssom@0.3.x, "cssom@>= 0.3.0 < 0.4.0": +cssom@0.3.x, "cssom@>= 0.3.2 < 0.4.0": version "0.3.2" resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.2.tgz#b8036170c79f07a90ff2f16e22284027a243848b" -"cssstyle@>= 0.2.36 < 0.3.0": +"cssstyle@>= 0.2.37 < 0.3.0": version "0.2.37" resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-0.2.37.tgz#541097234cb2513c83ceed3acddc27ff27987d54" dependencies: cssom "0.3.x" -d@^0.1.1, d@~0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/d/-/d-0.1.1.tgz#da184c535d18d8ee7ba2aa229b914009fae11309" - dependencies: - es5-ext "~0.10.2" - dashdash@^1.12.0: version "1.14.1" resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" @@ -979,24 +1146,30 @@ date-fns@^1.27.2: version "1.29.0" resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-1.29.0.tgz#12e609cdcb935127311d04d33334e2960a2a54e6" -debug@2.2.0, debug@~2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.2.0.tgz#f87057e995b1a1f6ae6a4960664137bc56f039da" - dependencies: - ms "0.7.1" - debug@^2.1.1, debug@^2.2.0: version "2.6.0" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.0.tgz#bc596bcabe7617f11d9fa15361eded5608b8499b" dependencies: ms "0.7.2" +debug@^2.6.8, debug@^2.6.9: + version "2.6.9" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + dependencies: + ms "2.0.0" + debug@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" dependencies: ms "2.0.0" +debug@~2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.2.0.tgz#f87057e995b1a1f6ae6a4960664137bc56f039da" + dependencies: + ms "0.7.1" + decamelize@^1.0.0, decamelize@^1.1.1: version "1.2.0" resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" @@ -1019,6 +1192,13 @@ default-require-extensions@^1.0.0: dependencies: strip-bom "^2.0.0" +define-properties@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.2.tgz#83a73f2fea569898fb737193c8f873caf6d45c94" + dependencies: + foreach "^2.0.5" + object-keys "^1.0.8" + del@^2.0.2: version "2.2.2" resolved "https://registry.yarnpkg.com/del/-/del-2.2.2.tgz#c12c981d067846c84bcaf862cff930d907ffd1a8" @@ -1045,17 +1225,37 @@ detect-indent@^4.0.0: dependencies: repeating "^2.0.0" -diff@^3.0.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/diff/-/diff-3.2.0.tgz#c9ce393a4b7cbd0b058a725c93df299027868ff9" +detect-libc@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" -doctrine@1.5.0, doctrine@^1.2.2: +detect-newline@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-2.1.0.tgz#f41f1c10be4b00e87b5f13da680759f2c5bfd3e2" + +diff@^3.2.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/diff/-/diff-3.4.0.tgz#b1d85507daf3964828de54b37d0d73ba67dda56c" + +doctrine@1.5.0: version "1.5.0" resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-1.5.0.tgz#379dce730f6166f76cefa4e6707a159b02c5a6fa" dependencies: esutils "^2.0.2" isarray "^1.0.0" +doctrine@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" + dependencies: + esutils "^2.0.2" + +domexception@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/domexception/-/domexception-1.0.1.tgz#937442644ca6a31261ef36e3ec677fe805582c90" + dependencies: + webidl-conversions "^4.0.2" + ecc-jsbn@~0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz#0fc73a9ed5f0d53c38193398523ef7e543777505" @@ -1072,12 +1272,6 @@ encoding@^0.1.11: dependencies: iconv-lite "~0.4.13" -"errno@>=0.1.1 <0.2.0-0": - version "0.1.4" - resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.4.tgz#b896e23a9e5e8ba33871fc996abd3635fc9a1c7d" - dependencies: - prr "~0.0.0" - error-ex@^1.2.0: version "1.3.0" resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.0.tgz#e67b43f3e82c96ea3a584ffee0b9fc3325d802d9" @@ -1090,85 +1284,44 @@ error-ex@^1.3.1: dependencies: is-arrayish "^0.2.1" -es5-ext@^0.10.7, es5-ext@^0.10.8, es5-ext@~0.10.11, es5-ext@~0.10.2, es5-ext@~0.10.7: - version "0.10.12" - resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.12.tgz#aa84641d4db76b62abba5e45fd805ecbab140047" - dependencies: - es6-iterator "2" - es6-symbol "~3.1" - -es6-iterator@2: - version "2.0.0" - resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.0.tgz#bd968567d61635e33c0b80727613c9cb4b096bac" - dependencies: - d "^0.1.1" - es5-ext "^0.10.7" - es6-symbol "3" - -es6-map@^0.1.3: - version "0.1.4" - resolved "https://registry.yarnpkg.com/es6-map/-/es6-map-0.1.4.tgz#a34b147be224773a4d7da8072794cefa3632b897" - dependencies: - d "~0.1.1" - es5-ext "~0.10.11" - es6-iterator "2" - es6-set "~0.1.3" - es6-symbol "~3.1.0" - event-emitter "~0.3.4" - -es6-set@~0.1.3: - version "0.1.4" - resolved "https://registry.yarnpkg.com/es6-set/-/es6-set-0.1.4.tgz#9516b6761c2964b92ff479456233a247dc707ce8" - dependencies: - d "~0.1.1" - es5-ext "~0.10.11" - es6-iterator "2" - es6-symbol "3" - event-emitter "~0.3.4" - -es6-symbol@3, es6-symbol@~3.1, es6-symbol@~3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.0.tgz#94481c655e7a7cad82eba832d97d5433496d7ffa" +es-abstract@^1.5.1: + version "1.10.0" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.10.0.tgz#1ecb36c197842a00d8ee4c2dfd8646bb97d60864" dependencies: - d "~0.1.1" - es5-ext "~0.10.11" + es-to-primitive "^1.1.1" + function-bind "^1.1.1" + has "^1.0.1" + is-callable "^1.1.3" + is-regex "^1.0.4" -es6-weak-map@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/es6-weak-map/-/es6-weak-map-2.0.1.tgz#0d2bbd8827eb5fb4ba8f97fbfea50d43db21ea81" +es-to-primitive@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.1.1.tgz#45355248a88979034b6792e19bb81f2b7975dd0d" dependencies: - d "^0.1.1" - es5-ext "^0.10.8" - es6-iterator "2" - es6-symbol "3" + is-callable "^1.1.1" + is-date-object "^1.0.1" + is-symbol "^1.0.1" escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" -escodegen@1.8.x, escodegen@^1.6.1: - version "1.8.1" - resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.8.1.tgz#5a5b53af4693110bebb0867aa3430dd3b70a1018" +escodegen@^1.9.0: + version "1.9.0" + resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.9.0.tgz#9811a2f265dc1cd3894420ee3717064b632b8852" dependencies: - esprima "^2.7.1" - estraverse "^1.9.1" + esprima "^3.1.3" + estraverse "^4.2.0" esutils "^2.0.2" optionator "^0.8.1" optionalDependencies: - source-map "~0.2.0" + source-map "~0.5.6" -escope@^3.6.0: - version "3.6.0" - resolved "https://registry.yarnpkg.com/escope/-/escope-3.6.0.tgz#e01975e812781a163a6dadfdd80398dc64c889c3" +eslint-config-airbnb-base@^12.1.0: + version "12.1.0" + resolved "https://registry.yarnpkg.com/eslint-config-airbnb-base/-/eslint-config-airbnb-base-12.1.0.tgz#386441e54a12ccd957b0a92564a4bafebd747944" dependencies: - es6-map "^0.1.3" - es6-weak-map "^2.0.1" - esrecurse "^4.1.0" - estraverse "^4.1.1" - -eslint-config-airbnb-base@^10.0.1: - version "10.0.1" - resolved "https://registry.yarnpkg.com/eslint-config-airbnb-base/-/eslint-config-airbnb-base-10.0.1.tgz#f17d4e52992c1d45d1b7713efbcd5ecd0e7e0506" + eslint-restricted-globals "^0.1.1" eslint-config-prettier@^2.9.0: version "2.9.0" @@ -1176,35 +1329,34 @@ eslint-config-prettier@^2.9.0: dependencies: get-stdin "^5.0.1" -eslint-import-resolver-node@^0.2.0: - version "0.2.3" - resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.2.3.tgz#5add8106e8c928db2cba232bcd9efa846e3da16c" +eslint-import-resolver-node@^0.3.1: + version "0.3.2" + resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.2.tgz#58f15fb839b8d0576ca980413476aab2472db66a" dependencies: - debug "^2.2.0" - object-assign "^4.0.1" - resolve "^1.1.6" + debug "^2.6.9" + resolve "^1.5.0" -eslint-module-utils@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.0.0.tgz#a6f8c21d901358759cdc35dbac1982ae1ee58bce" +eslint-module-utils@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.1.1.tgz#abaec824177613b8a95b299639e1b6facf473449" dependencies: - debug "2.2.0" + debug "^2.6.8" pkg-dir "^1.0.0" -eslint-plugin-import@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.2.0.tgz#72ba306fad305d67c4816348a4699a4229ac8b4e" +eslint-plugin-import@^2.8.0: + version "2.8.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.8.0.tgz#fa1b6ef31fcb3c501c09859c1b86f1fc5b986894" dependencies: builtin-modules "^1.1.1" contains-path "^0.1.0" - debug "^2.2.0" + debug "^2.6.8" doctrine "1.5.0" - eslint-import-resolver-node "^0.2.0" - eslint-module-utils "^2.0.0" + eslint-import-resolver-node "^0.3.1" + eslint-module-utils "^2.1.1" has "^1.0.1" lodash.cond "^4.3.0" minimatch "^3.0.3" - pkg-up "^1.0.0" + read-pkg-up "^2.0.0" eslint-plugin-prettier@^2.6.0: version "2.6.0" @@ -1213,63 +1365,87 @@ eslint-plugin-prettier@^2.6.0: fast-diff "^1.1.1" jest-docblock "^21.0.0" -eslint@^3.9.1: - version "3.14.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-3.14.0.tgz#2c617e5f782fda5cbee5bc8be7ef5053af8e63a3" +eslint-restricted-globals@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/eslint-restricted-globals/-/eslint-restricted-globals-0.1.1.tgz#35f0d5cbc64c2e3ed62e93b4b1a7af05ba7ed4d7" + +eslint-scope@^3.7.1: + version "3.7.1" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-3.7.1.tgz#3d63c3edfda02e06e01a452ad88caacc7cdcb6e8" dependencies: - babel-code-frame "^6.16.0" - chalk "^1.1.3" - concat-stream "^1.4.6" - debug "^2.1.1" - doctrine "^1.2.2" - escope "^3.6.0" - espree "^3.3.1" - estraverse "^4.2.0" + esrecurse "^4.1.0" + estraverse "^4.1.1" + +eslint-visitor-keys@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz#3f3180fb2e291017716acb4c9d6d5b5c34a6a81d" + +eslint@^4.17.0: + version "4.17.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-4.17.0.tgz#dc24bb51ede48df629be7031c71d9dc0ee4f3ddf" + dependencies: + ajv "^5.3.0" + babel-code-frame "^6.22.0" + chalk "^2.1.0" + concat-stream "^1.6.0" + 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.2" + esquery "^1.0.0" esutils "^2.0.2" file-entry-cache "^2.0.0" - glob "^7.0.3" - globals "^9.14.0" - ignore "^3.2.0" + functional-red-black-tree "^1.0.1" + glob "^7.1.2" + globals "^11.0.1" + ignore "^3.3.3" imurmurhash "^0.1.4" - inquirer "^0.12.0" - is-my-json-valid "^2.10.0" + inquirer "^3.0.6" is-resolvable "^1.0.0" - js-yaml "^3.5.1" - json-stable-stringify "^1.0.0" + js-yaml "^3.9.1" + json-stable-stringify-without-jsonify "^1.0.1" levn "^0.3.0" - lodash "^4.0.0" - mkdirp "^0.5.0" + lodash "^4.17.4" + minimatch "^3.0.2" + mkdirp "^0.5.1" 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" + path-is-inside "^1.0.2" + pluralize "^7.0.0" + progress "^2.0.0" + require-uncached "^1.0.3" + semver "^5.3.0" + strip-ansi "^4.0.0" strip-json-comments "~2.0.1" - table "^3.7.8" + table "^4.0.1" text-table "~0.2.0" - user-home "^2.0.0" -espree@^3.3.1: - version "3.3.2" - resolved "https://registry.yarnpkg.com/espree/-/espree-3.3.2.tgz#dbf3fadeb4ecb4d4778303e50103b3d36c88b89c" +espree@^3.5.2: + version "3.5.3" + resolved "https://registry.yarnpkg.com/espree/-/espree-3.5.3.tgz#931e0af64e7fbbed26b050a29daad1fc64799fa6" dependencies: - acorn "^4.0.1" + acorn "^5.4.0" acorn-jsx "^3.0.0" -esprima@2.7.x, esprima@^2.6.0, esprima@^2.7.1: +esprima@^2.6.0: version "2.7.3" resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581" +esprima@^3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633" + esprima@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.0.tgz#4499eddcd1110e0b218bacf2fa7f7f59f55ca804" -esprima@~3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.0.0.tgz#53cf247acda77313e551c3aa2e73342d3fb4f7d9" +esquery@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.0.0.tgz#cfba8b57d7fba93f17298a8a006a04cda13d80fa" + dependencies: + estraverse "^4.0.0" esrecurse@^4.1.0: version "4.1.0" @@ -1278,11 +1454,7 @@ esrecurse@^4.1.0: estraverse "~4.1.0" object-assign "^4.0.1" -estraverse@^1.9.1: - version "1.9.3" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-1.9.3.tgz#af67f2dc922582415950926091a4005d29c9bb44" - -estraverse@^4.1.1, estraverse@^4.2.0: +estraverse@^4.0.0, estraverse@^4.1.1, estraverse@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13" @@ -1294,19 +1466,24 @@ esutils@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" -event-emitter@~0.3.4: - version "0.3.4" - resolved "https://registry.yarnpkg.com/event-emitter/-/event-emitter-0.3.4.tgz#8d63ddfb4cfe1fae3b32ca265c4c720222080bb5" - dependencies: - d "~0.1.1" - es5-ext "~0.10.7" - exec-sh@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.2.0.tgz#14f75de3f20d286ef933099b2ce50a90359cef10" dependencies: merge "^1.1.3" +execa@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-0.7.0.tgz#944becd34cc41ee32a63a9faf27ad5a65fc59777" + dependencies: + cross-spawn "^5.0.1" + get-stream "^3.0.0" + is-stream "^1.1.0" + npm-run-path "^2.0.0" + p-finally "^1.0.0" + signal-exit "^3.0.0" + strip-eof "^1.0.0" + execa@^0.8.0: version "0.8.0" resolved "https://registry.yarnpkg.com/execa/-/execa-0.8.0.tgz#d8d76bbc1b55217ed190fd6dd49d3c774ecfc8da" @@ -1323,6 +1500,10 @@ exit-hook@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/exit-hook/-/exit-hook-1.1.1.tgz#f05ca233b48c05d54fff07765df8507e95c02ff8" +exit@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" + expand-brackets@^0.1.4: version "0.1.5" resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-0.1.5.tgz#df07284e342a807cd733ac5af72411e581d1177b" @@ -1335,10 +1516,33 @@ expand-range@^1.8.1: dependencies: fill-range "^2.1.0" +expect@^22.2.2: + version "22.2.2" + resolved "https://registry.yarnpkg.com/expect/-/expect-22.2.2.tgz#6cb6ae2eeb651a4187b9096de70333a018fab63f" + dependencies: + ansi-styles "^3.2.0" + jest-diff "^22.1.0" + jest-get-type "^22.1.0" + jest-matcher-utils "^22.2.0" + jest-message-util "^22.2.0" + jest-regex-util "^22.1.0" + extend@~3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.0.tgz#5a474353b9f3353ddd8176dfd37b91c83a46f1d4" +extend@~3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.1.tgz#a755ea7bc1adfcc5a31ce7e762dbaadc5e636444" + +external-editor@^2.0.4: + version "2.1.0" + resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-2.1.0.tgz#3d026a21b7f95b5726387d4200ac160d372c3b48" + dependencies: + chardet "^0.4.0" + iconv-lite "^0.4.17" + tmp "^0.0.33" + extglob@^0.3.1: version "0.3.2" resolved "https://registry.yarnpkg.com/extglob/-/extglob-0.3.2.tgz#2e18ff3d2f49ab2765cec9023f011daa8d8349a1" @@ -1349,19 +1553,27 @@ extsprintf@1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.0.2.tgz#e1080e0658e300b06294990cc70e1502235fd550" +fast-deep-equal@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-1.0.0.tgz#96256a3bc975595eb36d82e9929d060d893439ff" + fast-diff@^1.1.1: version "1.1.2" resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.1.2.tgz#4b62c42b8e03de3f848460b639079920695d0154" +fast-json-stable-stringify@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2" + fast-levenshtein@~2.0.4: version "2.0.6" resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" -fb-watchman@^1.8.0, fb-watchman@^1.9.0: - version "1.9.0" - resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-1.9.0.tgz#6f268f1f347a6b3c875d1e89da7e1ed79adfc0ec" +fb-watchman@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.0.tgz#54e9abf7dfa2f26cd9b1636c588c1afc05de5d58" dependencies: - bser "^1.0.2" + bser "^2.0.0" fbjs@^0.8.5: version "0.8.8" @@ -1375,13 +1587,19 @@ fbjs@^0.8.5: setimmediate "^1.0.5" ua-parser-js "^0.7.9" -figures@^1.3.5, figures@^1.7.0: +figures@^1.7.0: version "1.7.0" resolved "https://registry.yarnpkg.com/figures/-/figures-1.7.0.tgz#cbe1e3affcf1cd44b80cadfed28dc793a9701d2e" dependencies: escape-string-regexp "^1.0.5" object-assign "^4.1.0" +figures@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962" + dependencies: + escape-string-regexp "^1.0.5" + file-entry-cache@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-2.0.0.tgz#c392990c3e684783d838b8c84a45d8a048458361" @@ -1414,13 +1632,19 @@ find-parent-dir@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/find-parent-dir/-/find-parent-dir-0.3.0.tgz#33c44b429ab2b2f0646299c5f9f718f376ff8d54" -find-up@^1.0.0, find-up@^1.1.2: +find-up@^1.0.0: version "1.1.2" resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" dependencies: path-exists "^2.0.0" pinkie-promise "^2.0.0" +find-up@^2.0.0, find-up@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" + dependencies: + locate-path "^2.0.0" + flat-cache@^1.2.1: version "1.2.2" resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-1.2.2.tgz#fa86714e72c21db88601761ecf2f555d1abc6b96" @@ -1440,6 +1664,10 @@ for-own@^0.1.4: dependencies: for-in "^0.1.5" +foreach@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/foreach/-/foreach-2.0.5.tgz#0bee005018aeb260d0a3af3ae658dd0136ec1b99" + forever-agent@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" @@ -1452,6 +1680,14 @@ form-data@~2.1.1: combined-stream "^1.0.5" mime-types "^2.1.12" +form-data@~2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.1.tgz#6fb94fbd71885306d73d15cc497fe4cc4ecd44bf" + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.5" + mime-types "^2.1.12" + fs-readdir-recursive@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs-readdir-recursive/-/fs-readdir-recursive-1.0.0.tgz#8cd1745c8b4f8a29c8caec392476921ba195f560" @@ -1467,7 +1703,14 @@ fsevents@^1.0.0: nan "^2.3.0" node-pre-gyp "^0.6.29" -fstream-ignore@~1.0.5: +fsevents@^1.1.1: + version "1.1.3" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.1.3.tgz#11f82318f5fe7bb2cd22965a108e9306208216d8" + dependencies: + nan "^2.3.0" + node-pre-gyp "^0.6.39" + +fstream-ignore@^1.0.5, fstream-ignore@~1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/fstream-ignore/-/fstream-ignore-1.0.5.tgz#9c31dae34767018fe1d249b24dada67d092da105" dependencies: @@ -1484,10 +1727,27 @@ fstream@^1.0.0, fstream@^1.0.2, fstream@~1.0.10: mkdirp ">=0.5 0" rimraf "2" +fstream@^1.0.10: + version "1.0.11" + resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.11.tgz#5c1fb1f117477114f0632a0eb4b71b3cb0fd3171" + dependencies: + graceful-fs "^4.1.2" + inherits "~2.0.0" + mkdirp ">=0.5 0" + rimraf "2" + function-bind@^1.0.2: version "1.1.0" resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.0.tgz#16176714c801798e4e8f2cf7f7529467bb4a5771" +function-bind@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + +functional-red-black-tree@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" + gauge@~2.7.1: version "2.7.2" resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.2.tgz#15cecc31b02d05345a5d6b0e171cdb3ad2307774" @@ -1502,6 +1762,19 @@ gauge@~2.7.1: supports-color "^0.2.0" wide-align "^1.1.0" +gauge@~2.7.3: + version "2.7.4" + resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" + dependencies: + 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" + generate-function@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/generate-function/-/generate-function-2.0.0.tgz#6858fe7c0969b7d4e9093337647ac79f60dfbe74" @@ -1547,31 +1820,40 @@ glob-parent@^2.0.0: dependencies: is-glob "^2.0.0" -glob@^5.0.15: - version "5.0.15" - resolved "https://registry.yarnpkg.com/glob/-/glob-5.0.15.tgz#1bc936b9e02f4a603fcc222ecf7633d30b8b93b1" +glob@^7.0.3, glob@^7.0.5: + version "7.1.1" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.1.tgz#805211df04faaf1c63a3600306cdf5ade50b2ec8" dependencies: + fs.realpath "^1.0.0" inflight "^1.0.4" inherits "2" - minimatch "2 || 3" + minimatch "^3.0.2" once "^1.3.0" path-is-absolute "^1.0.0" -glob@^7.0.0, glob@^7.0.3, glob@^7.0.5: - version "7.1.1" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.1.tgz#805211df04faaf1c63a3600306cdf5ade50b2ec8" +glob@^7.1.1, glob@^7.1.2: + version "7.1.2" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15" dependencies: fs.realpath "^1.0.0" inflight "^1.0.4" inherits "2" - minimatch "^3.0.2" + minimatch "^3.0.4" once "^1.3.0" path-is-absolute "^1.0.0" -globals@^9.0.0, globals@^9.14.0: +globals@^11.0.1: + version "11.3.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-11.3.0.tgz#e04fdb7b9796d8adac9c8f64c14837b2313378b0" + +globals@^9.0.0: version "9.14.0" resolved "https://registry.yarnpkg.com/globals/-/globals-9.14.0.tgz#8859936af0038741263053b39d0e76ca241e4034" +globals@^9.18.0: + version "9.18.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a" + globby@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/globby/-/globby-5.0.0.tgz#ebd84667ca0dbb330b99bcfc68eac2bc54370e0d" @@ -1583,7 +1865,7 @@ globby@^5.0.0: pify "^2.0.0" pinkie-promise "^2.0.0" -graceful-fs@^4.1.2, graceful-fs@^4.1.4, graceful-fs@^4.1.6: +graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.4: version "4.1.11" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658" @@ -1591,11 +1873,11 @@ graceful-fs@^4.1.2, graceful-fs@^4.1.4, graceful-fs@^4.1.6: version "1.0.1" resolved "https://registry.yarnpkg.com/graceful-readlink/-/graceful-readlink-1.0.1.tgz#4cafad76bc62f02fa039b2f94e9a3dd3a391a725" -growly@^1.2.0: +growly@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081" -handlebars@^4.0.1, handlebars@^4.0.3: +handlebars@^4.0.3: version "4.0.6" resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.0.6.tgz#2ce4484850537f9c97a8026d5399b935c4ed4ed7" dependencies: @@ -1605,6 +1887,14 @@ handlebars@^4.0.1, handlebars@^4.0.3: optionalDependencies: uglify-js "^2.6" +har-schema@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-1.0.5.tgz#d263135f43307c02c602afc8fe95970c0151369e" + +har-schema@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" + har-validator@~2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-2.0.6.tgz#cdcbc08188265ad119b6a5a7c8ab70eecfb5d27d" @@ -1614,6 +1904,20 @@ har-validator@~2.0.6: is-my-json-valid "^2.12.4" pinkie-promise "^2.0.0" +har-validator@~4.2.1: + version "4.2.1" + resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-4.2.1.tgz#33481d0f1bbff600dd203d75812a6a5fba002e2a" + dependencies: + ajv "^4.9.1" + har-schema "^1.0.5" + +har-validator@~5.0.3: + version "5.0.3" + resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.0.3.tgz#ba402c266194f15956ef15e0fcf242993f6a7dfd" + dependencies: + ajv "^5.1.0" + har-schema "^2.0.0" + has-ansi@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" @@ -1638,7 +1942,7 @@ has@^1.0.1: dependencies: function-bind "^1.0.2" -hawk@~3.1.3: +hawk@3.1.3, hawk@~3.1.3: version "3.1.3" resolved "https://registry.yarnpkg.com/hawk/-/hawk-3.1.3.tgz#078444bd7c1640b0fe540d2c9b73d59678e8e1c4" dependencies: @@ -1647,10 +1951,23 @@ hawk@~3.1.3: hoek "2.x.x" sntp "1.x.x" +hawk@~6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/hawk/-/hawk-6.0.2.tgz#af4d914eb065f9b5ce4d9d11c1cb2126eecc3038" + dependencies: + boom "4.x.x" + cryptiles "3.x.x" + hoek "4.x.x" + sntp "2.x.x" + hoek@2.x.x: version "2.16.3" resolved "https://registry.yarnpkg.com/hoek/-/hoek-2.16.3.tgz#20bb7403d3cea398e91dc4710a8ff1b8274a25ed" +hoek@4.x.x: + version "4.2.0" + resolved "https://registry.yarnpkg.com/hoek/-/hoek-4.2.0.tgz#72d9d0754f7fe25ca2d01ad8f8f9a9449a89526d" + home-or-tmp@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/home-or-tmp/-/home-or-tmp-2.0.0.tgz#e36c3f2d2cae7d746a857e38d18d5f32a7882db8" @@ -1662,9 +1979,9 @@ hosted-git-info@^2.1.4: version "2.1.5" resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.1.5.tgz#0ba81d90da2e25ab34a332e6ec77936e1598118b" -html-encoding-sniffer@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-1.0.1.tgz#79bf7a785ea495fe66165e734153f363ff5437da" +html-encoding-sniffer@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz#e70d84b94da53aa375e11fe3a351be6642ca46f8" dependencies: whatwg-encoding "^1.0.1" @@ -1676,17 +1993,36 @@ http-signature@~1.1.0: jsprim "^1.2.2" sshpk "^1.7.0" +http-signature@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" + dependencies: + assert-plus "^1.0.0" + jsprim "^1.2.2" + sshpk "^1.7.0" + iconv-lite@0.4.13: version "0.4.13" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.13.tgz#1f88aba4ab0b1508e8312acc39345f36e992e2f2" -iconv-lite@^0.4.13, iconv-lite@~0.4.13: +iconv-lite@0.4.19, iconv-lite@^0.4.17: + version "0.4.19" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.19.tgz#f7468f60135f5e5dad3399c0a81be9a1603a082b" + +iconv-lite@~0.4.13: version "0.4.15" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.15.tgz#fe265a218ac6a57cfe854927e9d04c19825eddeb" -ignore@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.2.0.tgz#8d88f03c3002a0ac52114db25d2c673b0bf1e435" +ignore@^3.3.3: + version "3.3.7" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.7.tgz#612289bfb3c220e186a58118618d5be8c1bab021" + +import-local@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/import-local/-/import-local-1.0.0.tgz#5e4ffdc03f4fe6c009c6729beb29631c2f8227bc" + dependencies: + pkg-dir "^2.0.0" + resolve-cwd "^2.0.0" imurmurhash@^0.1.4: version "0.1.4" @@ -1709,7 +2045,7 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.0, inherits@~2.0.1: +inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.0, inherits@~2.0.1, inherits@~2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" @@ -1717,29 +2053,26 @@ ini@~1.3.0: version "1.3.4" resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.4.tgz#0537cb79daf59b59a1a517dff706c86ec039162e" -inquirer@^0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-0.12.0.tgz#1ef2bfd63504df0bc75785fff8c2c41df12f077e" +inquirer@^3.0.6: + version "3.3.0" + resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-3.3.0.tgz#9dd2f2ad765dcab1ff0443b491442a20ba227dc9" dependencies: - ansi-escapes "^1.1.0" - ansi-regex "^2.0.0" - chalk "^1.0.0" - cli-cursor "^1.0.1" + ansi-escapes "^3.0.0" + chalk "^2.0.0" + cli-cursor "^2.1.0" cli-width "^2.0.0" - figures "^1.3.5" + external-editor "^2.0.4" + figures "^2.0.0" 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" + mute-stream "0.0.7" + run-async "^2.2.0" + rx-lite "^4.0.8" + rx-lite-aggregates "^4.0.8" + string-width "^2.1.0" + strip-ansi "^4.0.0" through "^2.3.6" -interpret@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.0.1.tgz#d579fb7f693b858004947af39fa0db49f795602c" - -invariant@^2.2.0: +invariant@^2.2.0, invariant@^2.2.2: version "2.2.2" resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.2.tgz#9e1f56ac0acdb6bf303306f338be3b204ae60360" dependencies: @@ -1769,12 +2102,20 @@ is-builtin-module@^1.0.0: dependencies: builtin-modules "^1.0.0" -is-ci@^1.0.9: - version "1.0.10" - resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-1.0.10.tgz#f739336b2632365061a9d48270cd56ae3369318e" +is-callable@^1.1.1, is-callable@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.3.tgz#86eb75392805ddc33af71c92a0eedf74ee7604b2" + +is-ci@^1.0.10: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-1.1.0.tgz#247e4162e7860cebbdaf30b774d6b0ac7dcfe7a5" dependencies: ci-info "^1.0.0" +is-date-object@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.1.tgz#9aa20eb6aeebbff77fbd33e74ca01b33581d3a16" + is-directory@^0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/is-directory/-/is-directory-0.3.1.tgz#61339b6f2475fc772fd9c9d83f5c8575dc154ae1" @@ -1817,6 +2158,10 @@ is-fullwidth-code-point@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" +is-generator-fn@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-1.0.0.tgz#969d49e1bb3329f6bb7f09089be26578b2ddd46a" + is-glob@^2.0.0, is-glob@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863" @@ -1829,7 +2174,7 @@ is-glob@^4.0.0: dependencies: is-extglob "^2.1.1" -is-my-json-valid@^2.10.0, is-my-json-valid@^2.12.4: +is-my-json-valid@^2.12.4: version "2.15.0" resolved "https://registry.yarnpkg.com/is-my-json-valid/-/is-my-json-valid-2.15.0.tgz#936edda3ca3c211fd98f3b2d3e08da43f7b2915b" dependencies: @@ -1886,6 +2231,12 @@ is-property@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/is-property/-/is-property-1.0.2.tgz#57fe1c4e48474edd65b09911f26b1cd4095dda84" +is-regex@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.4.tgz#5517489b547091b0930e095654ced25ee97e9491" + dependencies: + has "^1.0.1" + is-regexp@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-regexp/-/is-regexp-1.0.0.tgz#fd2d883545c46bac5a633e7b9a09e87fa2cb5069" @@ -1900,6 +2251,10 @@ is-stream@^1.0.1, is-stream@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" +is-symbol@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.1.tgz#3cc59f00025194b6ab2e38dbae6689256b660572" + is-typedarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" @@ -1912,10 +2267,6 @@ isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" -isexe@^1.1.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/isexe/-/isexe-1.1.2.tgz#36f3e22e60750920f5e7241a476a8c6a42275ad0" - isexe@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" @@ -1937,270 +2288,304 @@ isstream@~0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" -istanbul-api@^1.0.0-aplha.10: - version "1.1.1" - resolved "https://registry.yarnpkg.com/istanbul-api/-/istanbul-api-1.1.1.tgz#d36e2f1560d1a43ce304c4ff7338182de61c8f73" +istanbul-api@^1.1.14: + version "1.2.1" + resolved "https://registry.yarnpkg.com/istanbul-api/-/istanbul-api-1.2.1.tgz#0c60a0515eb11c7d65c6b50bba2c6e999acd8620" dependencies: async "^2.1.4" fileset "^2.0.2" - istanbul-lib-coverage "^1.0.0" - istanbul-lib-hook "^1.0.0" - istanbul-lib-instrument "^1.3.0" - istanbul-lib-report "^1.0.0-alpha.3" - istanbul-lib-source-maps "^1.1.0" - istanbul-reports "^1.0.0" + istanbul-lib-coverage "^1.1.1" + istanbul-lib-hook "^1.1.0" + istanbul-lib-instrument "^1.9.1" + istanbul-lib-report "^1.1.2" + istanbul-lib-source-maps "^1.2.2" + istanbul-reports "^1.1.3" js-yaml "^3.7.0" mkdirp "^0.5.1" once "^1.4.0" -istanbul-lib-coverage@^1.0.0, istanbul-lib-coverage@^1.0.0-alpha, istanbul-lib-coverage@^1.0.0-alpha.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-1.0.1.tgz#f263efb519c051c5f1f3343034fc40e7b43ff212" +istanbul-lib-coverage@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-1.1.1.tgz#73bfb998885299415c93d38a3e9adf784a77a9da" -istanbul-lib-hook@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/istanbul-lib-hook/-/istanbul-lib-hook-1.0.0.tgz#fc5367ee27f59268e8f060b0c7aaf051d9c425c5" +istanbul-lib-hook@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/istanbul-lib-hook/-/istanbul-lib-hook-1.1.0.tgz#8538d970372cb3716d53e55523dd54b557a8d89b" dependencies: append-transform "^0.4.0" -istanbul-lib-instrument@^1.1.1, istanbul-lib-instrument@^1.1.4, istanbul-lib-instrument@^1.3.0: - version "1.4.2" - resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-1.4.2.tgz#0e2fdfac93c1dabf2e31578637dc78a19089f43e" +istanbul-lib-instrument@^1.7.5, istanbul-lib-instrument@^1.8.0, istanbul-lib-instrument@^1.9.1: + version "1.9.1" + resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-1.9.1.tgz#250b30b3531e5d3251299fdd64b0b2c9db6b558e" dependencies: babel-generator "^6.18.0" babel-template "^6.16.0" babel-traverse "^6.18.0" babel-types "^6.18.0" - babylon "^6.13.0" - istanbul-lib-coverage "^1.0.0" + babylon "^6.18.0" + istanbul-lib-coverage "^1.1.1" semver "^5.3.0" -istanbul-lib-report@^1.0.0-alpha.3: - version "1.0.0-alpha.3" - resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-1.0.0-alpha.3.tgz#32d5f6ec7f33ca3a602209e278b2e6ff143498af" +istanbul-lib-report@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-1.1.2.tgz#922be27c13b9511b979bd1587359f69798c1d425" dependencies: - async "^1.4.2" - istanbul-lib-coverage "^1.0.0-alpha" + istanbul-lib-coverage "^1.1.1" mkdirp "^0.5.1" path-parse "^1.0.5" - rimraf "^2.4.3" supports-color "^3.1.2" -istanbul-lib-source-maps@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.1.0.tgz#9d429218f35b823560ea300a96ff0c3bbdab785f" +istanbul-lib-source-maps@^1.2.1, istanbul-lib-source-maps@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.2.tgz#750578602435f28a0c04ee6d7d9e0f2960e62c1c" dependencies: - istanbul-lib-coverage "^1.0.0-alpha.0" + debug "^3.1.0" + istanbul-lib-coverage "^1.1.1" mkdirp "^0.5.1" - rimraf "^2.4.4" + rimraf "^2.6.1" source-map "^0.5.3" -istanbul-reports@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-1.0.0.tgz#24b4eb2b1d29d50f103b369bd422f6e640aa0777" +istanbul-reports@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-1.1.3.tgz#3b9e1e8defb6d18b1d425da8e8b32c5a163f2d10" dependencies: handlebars "^4.0.3" -istanbul@^0.4.5: - version "0.4.5" - resolved "https://registry.yarnpkg.com/istanbul/-/istanbul-0.4.5.tgz#65c7d73d4c4da84d4f3ac310b918fb0b8033733b" - dependencies: - abbrev "1.0.x" - async "1.x" - escodegen "1.8.x" - esprima "2.7.x" - glob "^5.0.15" - handlebars "^4.0.1" - js-yaml "3.x" - mkdirp "0.5.x" - nopt "3.x" - once "1.x" - resolve "1.1.x" - supports-color "^3.1.0" - which "^1.1.1" - wordwrap "^1.0.0" - -jest-changed-files@^17.0.2: - version "17.0.2" - resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-17.0.2.tgz#f5657758736996f590a51b87e5c9369d904ba7b7" - -jest-cli@^17.0.3: - version "17.0.3" - resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-17.0.3.tgz#700b8c02a9ea0ec9eab0cd5a9fd42d8a858ce146" - dependencies: - ansi-escapes "^1.4.0" - callsites "^2.0.0" - chalk "^1.1.1" - graceful-fs "^4.1.6" - is-ci "^1.0.9" - istanbul-api "^1.0.0-aplha.10" - istanbul-lib-coverage "^1.0.0" - istanbul-lib-instrument "^1.1.1" - jest-changed-files "^17.0.2" - jest-config "^17.0.3" - jest-environment-jsdom "^17.0.2" - jest-file-exists "^17.0.0" - jest-haste-map "^17.0.3" - jest-jasmine2 "^17.0.3" - jest-mock "^17.0.2" - jest-resolve "^17.0.3" - jest-resolve-dependencies "^17.0.3" - jest-runtime "^17.0.3" - jest-snapshot "^17.0.3" - jest-util "^17.0.2" - json-stable-stringify "^1.0.0" - node-notifier "^4.6.1" - sane "~1.4.1" - strip-ansi "^3.0.1" - throat "^3.0.0" - which "^1.1.1" - worker-farm "^1.3.1" - yargs "^6.3.0" +jest-changed-files@^22.2.0: + version "22.2.0" + resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-22.2.0.tgz#517610c4a8ca0925bdc88b0ca53bd678aa8d019e" + dependencies: + throat "^4.0.0" -jest-config@^17.0.3: - version "17.0.3" - resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-17.0.3.tgz#b6ed75d90d090b731fd894231904cadb7d5a5df2" +jest-cli@^22.2.2: + version "22.2.2" + resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-22.2.2.tgz#4431a93a29549da5dcb6d4a41dd03503c9198cd6" dependencies: - chalk "^1.1.1" - istanbul "^0.4.5" - jest-environment-jsdom "^17.0.2" - jest-environment-node "^17.0.2" - jest-jasmine2 "^17.0.3" - jest-mock "^17.0.2" - jest-resolve "^17.0.3" - jest-util "^17.0.2" - json-stable-stringify "^1.0.0" - -jest-diff@^17.0.3: - version "17.0.3" - resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-17.0.3.tgz#8fb31efab3b314d7b61b7b66b0bdea617ef1c02f" + ansi-escapes "^3.0.0" + chalk "^2.0.1" + exit "^0.1.2" + glob "^7.1.2" + graceful-fs "^4.1.11" + import-local "^1.0.0" + is-ci "^1.0.10" + istanbul-api "^1.1.14" + istanbul-lib-coverage "^1.1.1" + istanbul-lib-instrument "^1.8.0" + istanbul-lib-source-maps "^1.2.1" + jest-changed-files "^22.2.0" + jest-config "^22.2.2" + jest-environment-jsdom "^22.2.2" + jest-get-type "^22.1.0" + jest-haste-map "^22.2.2" + jest-message-util "^22.2.0" + jest-regex-util "^22.1.0" + jest-resolve-dependencies "^22.1.0" + jest-runner "^22.2.2" + jest-runtime "^22.2.2" + jest-snapshot "^22.2.0" + jest-util "^22.2.2" + jest-worker "^22.2.2" + micromatch "^2.3.11" + node-notifier "^5.2.1" + realpath-native "^1.0.0" + rimraf "^2.5.4" + slash "^1.0.0" + string-length "^2.0.0" + strip-ansi "^4.0.0" + which "^1.2.12" + yargs "^10.0.3" + +jest-config@^22.2.2: + version "22.2.2" + resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-22.2.2.tgz#6b8ed615bc51239847d15460086f174dad4a7015" dependencies: - chalk "^1.1.3" - diff "^3.0.0" - jest-matcher-utils "^17.0.3" - pretty-format "~4.2.1" + chalk "^2.0.1" + glob "^7.1.1" + jest-environment-jsdom "^22.2.2" + jest-environment-node "^22.2.2" + jest-get-type "^22.1.0" + jest-jasmine2 "^22.2.2" + jest-regex-util "^22.1.0" + jest-resolve "^22.2.2" + jest-util "^22.2.2" + jest-validate "^22.2.2" + pretty-format "^22.1.0" + +jest-diff@^22.1.0: + version "22.1.0" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-22.1.0.tgz#0fad9d96c87b453896bf939df3dc8aac6919ac38" + dependencies: + chalk "^2.0.1" + diff "^3.2.0" + jest-get-type "^22.1.0" + pretty-format "^22.1.0" jest-docblock@^21.0.0: version "21.2.0" resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-21.2.0.tgz#51529c3b30d5fd159da60c27ceedc195faf8d414" -jest-environment-jsdom@^17.0.2: - version "17.0.2" - resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-17.0.2.tgz#a3098dc29806d40802c52b62b848ab6aa00fdba0" +jest-docblock@^22.2.2: + version "22.2.2" + resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-22.2.2.tgz#617f13edb16ec64202002b3c336cd14ae36c0631" dependencies: - jest-mock "^17.0.2" - jest-util "^17.0.2" - jsdom "^9.8.1" + detect-newline "^2.1.0" -jest-environment-node@^17.0.2: - version "17.0.2" - resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-17.0.2.tgz#aff6133f4ca2faddcc5b0ce7d25cec83e16d8463" +jest-environment-jsdom@^22.2.2: + version "22.2.2" + resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-22.2.2.tgz#3513ccdccc2bc41daf9cdee199b7069b0d9feebc" dependencies: - jest-mock "^17.0.2" - jest-util "^17.0.2" + jest-mock "^22.2.0" + jest-util "^22.2.2" + jsdom "^11.5.1" -jest-file-exists@^17.0.0: - version "17.0.0" - resolved "https://registry.yarnpkg.com/jest-file-exists/-/jest-file-exists-17.0.0.tgz#7f63eb73a1c43a13f461be261768b45af2cdd169" +jest-environment-node@^22.2.2: + version "22.2.2" + resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-22.2.2.tgz#570896eef2dd0f939c71bd5712ef4321958c1270" + dependencies: + jest-mock "^22.2.0" + jest-util "^22.2.2" jest-get-type@^21.2.0: version "21.2.0" resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-21.2.0.tgz#f6376ab9db4b60d81e39f30749c6c466f40d4a23" -jest-haste-map@^17.0.3: - version "17.0.3" - resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-17.0.3.tgz#5232783e70577217b6b17d2a1c1766637a1d2fbd" +jest-get-type@^22.1.0: + version "22.1.0" + resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-22.1.0.tgz#4e90af298ed6181edc85d2da500dbd2753e0d5a9" + +jest-haste-map@^22.2.2: + version "22.2.2" + resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-22.2.2.tgz#9d3d5a14bd5e05ab9176979f2a5fbb4ddc80eb20" + dependencies: + fb-watchman "^2.0.0" + graceful-fs "^4.1.11" + jest-docblock "^22.2.2" + jest-worker "^22.2.2" + micromatch "^2.3.11" + sane "^2.0.0" + +jest-jasmine2@^22.2.2: + version "22.2.2" + resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-22.2.2.tgz#9065255c8f635ae9dfa33fc66068f59adf53c9aa" dependencies: - fb-watchman "^1.9.0" - graceful-fs "^4.1.6" - multimatch "^2.1.0" - sane "~1.4.1" - worker-farm "^1.3.1" + callsites "^2.0.0" + chalk "^2.0.1" + co "^4.6.0" + expect "^22.2.2" + graceful-fs "^4.1.11" + is-generator-fn "^1.0.0" + jest-diff "^22.1.0" + jest-matcher-utils "^22.2.0" + jest-message-util "^22.2.0" + jest-snapshot "^22.2.0" + source-map-support "^0.5.0" -jest-jasmine2@^17.0.3: - version "17.0.3" - resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-17.0.3.tgz#d4336b89f3ad288269a1c8e2bfc180dcf89c6ad1" +jest-leak-detector@^22.1.0: + version "22.1.0" + resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-22.1.0.tgz#08376644cee07103da069baac19adb0299b772c2" dependencies: - graceful-fs "^4.1.6" - jest-matchers "^17.0.3" - jest-snapshot "^17.0.3" - jest-util "^17.0.2" + pretty-format "^22.1.0" -jest-matcher-utils@^17.0.3: - version "17.0.3" - resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-17.0.3.tgz#f108e49b956e152c6626dcc0aba864f59ab7b0d3" +jest-matcher-utils@^22.2.0: + version "22.2.0" + resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-22.2.0.tgz#5390f823c18c748543d463825aa8e4df0db253ca" dependencies: - chalk "^1.1.3" - pretty-format "~4.2.1" + chalk "^2.0.1" + jest-get-type "^22.1.0" + pretty-format "^22.1.0" -jest-matchers@^17.0.3: - version "17.0.3" - resolved "https://registry.yarnpkg.com/jest-matchers/-/jest-matchers-17.0.3.tgz#88b95348c919343db86d08f12354a8650ae7eddf" +jest-message-util@^22.2.0: + version "22.2.0" + resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-22.2.0.tgz#84a6bb34186d8b9af7e0732fabbef63f7355f7b2" dependencies: - jest-diff "^17.0.3" - jest-matcher-utils "^17.0.3" - jest-util "^17.0.2" + "@babel/code-frame" "^7.0.0-beta.35" + chalk "^2.0.1" + micromatch "^2.3.11" + slash "^1.0.0" + stack-utils "^1.0.1" -jest-mock@^17.0.2: - version "17.0.2" - resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-17.0.2.tgz#3dfe9221afd9aa61b3d9992840813a358bb2f429" +jest-mock@^22.2.0: + version "22.2.0" + resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-22.2.0.tgz#444b3f9488a7473adae09bc8a77294afded397a7" -jest-resolve-dependencies@^17.0.3: - version "17.0.3" - resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-17.0.3.tgz#bbd37f4643704b97a980927212f3ab12b06e8894" +jest-regex-util@^22.1.0: + version "22.1.0" + resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-22.1.0.tgz#5daf2fe270074b6da63e5d85f1c9acc866768f53" + +jest-resolve-dependencies@^22.1.0: + version "22.1.0" + resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-22.1.0.tgz#340e4139fb13315cd43abc054e6c06136be51e31" dependencies: - jest-file-exists "^17.0.0" - jest-resolve "^17.0.3" + jest-regex-util "^22.1.0" -jest-resolve@^17.0.3: - version "17.0.3" - resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-17.0.3.tgz#7692a79de2831874375e9d664bc782c29e4da262" +jest-resolve@^22.2.2: + version "22.2.2" + resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-22.2.2.tgz#6f49d91e3680c86a4d5e5f72ccdab3996d1cbc19" dependencies: browser-resolve "^1.11.2" - jest-file-exists "^17.0.0" - jest-haste-map "^17.0.3" - resolve "^1.1.6" + chalk "^2.0.1" -jest-runtime@^17.0.3: - version "17.0.3" - resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-17.0.3.tgz#eff4055fe8c3e17c95ed1aaaf5f719c420b86b1f" +jest-runner@^22.2.2: + version "22.2.2" + resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-22.2.2.tgz#17fff27a61b63b58cf104c9cdcc0fdfccd3878ce" + dependencies: + exit "^0.1.2" + jest-config "^22.2.2" + jest-docblock "^22.2.2" + jest-haste-map "^22.2.2" + jest-jasmine2 "^22.2.2" + jest-leak-detector "^22.1.0" + jest-message-util "^22.2.0" + jest-runtime "^22.2.2" + jest-util "^22.2.2" + jest-worker "^22.2.2" + throat "^4.0.0" + +jest-runtime@^22.2.2: + version "22.2.2" + resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-22.2.2.tgz#256d0efb65deae1c23b819d88cec5ab43d7a4ed6" dependencies: babel-core "^6.0.0" - babel-jest "^17.0.2" - babel-plugin-istanbul "^2.0.0" - chalk "^1.1.3" - graceful-fs "^4.1.6" - jest-config "^17.0.3" - jest-file-exists "^17.0.0" - jest-haste-map "^17.0.3" - jest-mock "^17.0.2" - jest-resolve "^17.0.3" - jest-snapshot "^17.0.3" - jest-util "^17.0.2" - json-stable-stringify "^1.0.0" - multimatch "^2.1.0" - yargs "^6.3.0" - -jest-snapshot@^17.0.3: - version "17.0.3" - resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-17.0.3.tgz#c8199db4ccbd5515cfecc8e800ab076bdda7abc0" - dependencies: - jest-diff "^17.0.3" - jest-file-exists "^17.0.0" - jest-matcher-utils "^17.0.3" - jest-util "^17.0.2" + babel-jest "^22.2.2" + babel-plugin-istanbul "^4.1.5" + chalk "^2.0.1" + convert-source-map "^1.4.0" + exit "^0.1.2" + graceful-fs "^4.1.11" + jest-config "^22.2.2" + jest-haste-map "^22.2.2" + jest-regex-util "^22.1.0" + jest-resolve "^22.2.2" + jest-util "^22.2.2" + json-stable-stringify "^1.0.1" + micromatch "^2.3.11" + realpath-native "^1.0.0" + slash "^1.0.0" + strip-bom "3.0.0" + write-file-atomic "^2.1.0" + yargs "^10.0.3" + +jest-snapshot@^22.2.0: + version "22.2.0" + resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-22.2.0.tgz#0c0ba152d296ef70fa198cc84977a2cc269ee4cf" + dependencies: + chalk "^2.0.1" + jest-diff "^22.1.0" + jest-matcher-utils "^22.2.0" + mkdirp "^0.5.1" natural-compare "^1.4.0" - pretty-format "~4.2.1" + pretty-format "^22.1.0" -jest-util@^17.0.2: - version "17.0.2" - resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-17.0.2.tgz#9fd9da8091e9904fb976da7e4d8912ca26968638" +jest-util@^22.2.2: + version "22.2.2" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-22.2.2.tgz#335484b6aeae0c5a1ae498401630324977fe3465" dependencies: - chalk "^1.1.1" - diff "^3.0.0" - graceful-fs "^4.1.6" - jest-file-exists "^17.0.0" - jest-mock "^17.0.2" + callsites "^2.0.0" + chalk "^2.0.1" + graceful-fs "^4.1.11" + is-ci "^1.0.10" + jest-message-util "^22.2.0" + jest-validate "^22.2.2" mkdirp "^0.5.1" jest-validate@^21.1.0: @@ -2212,11 +2597,27 @@ jest-validate@^21.1.0: leven "^2.1.0" pretty-format "^21.2.1" -jest@^17.0.0: - version "17.0.3" - resolved "https://registry.yarnpkg.com/jest/-/jest-17.0.3.tgz#89c43b30b0aaad42462e9ea701352dacbad4a354" +jest-validate@^22.2.2: + version "22.2.2" + resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-22.2.2.tgz#9cdce422c93cc28395e907ac6bbc929158d9a6ba" dependencies: - jest-cli "^17.0.3" + chalk "^2.0.1" + jest-get-type "^22.1.0" + leven "^2.1.0" + pretty-format "^22.1.0" + +jest-worker@^22.2.2: + version "22.2.2" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-22.2.2.tgz#c1f5dc39976884b81f68ec50cb8532b2cbab3390" + dependencies: + merge-stream "^1.0.1" + +jest@^22.2.2: + version "22.2.2" + resolved "https://registry.yarnpkg.com/jest/-/jest-22.2.2.tgz#26aca0f5e4eaa76d52f2792b14033a3d1e7be2bd" + dependencies: + import-local "^1.0.0" + jest-cli "^22.2.2" jodid25519@^1.0.0: version "1.0.2" @@ -2228,14 +2629,18 @@ js-tokens@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.0.tgz#a2f2a969caae142fb3cd56228358c89366957bd1" -js-yaml@3.x, js-yaml@^3.5.1, js-yaml@^3.7.0: +js-tokens@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" + +js-yaml@^3.7.0: version "3.7.0" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.7.0.tgz#5c967ddd837a9bfdca5f2de84253abe8a1c03b80" dependencies: argparse "^1.0.7" esprima "^2.6.0" -js-yaml@^3.9.0: +js-yaml@^3.9.0, js-yaml@^3.9.1: version "3.10.0" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.10.0.tgz#2e78441646bd4682e963f22b6e92823c309c62dc" dependencies: @@ -2246,30 +2651,36 @@ jsbn@~0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.0.tgz#650987da0dd74f4ebf5a11377a2aa2d273e97dfd" -jsdom@^9.8.1: - version "9.9.1" - resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-9.9.1.tgz#84f3972ad394ab963233af8725211bce4d01bfd5" +jsdom@^11.5.1: + version "11.6.2" + resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-11.6.2.tgz#25d1ef332d48adf77fc5221fe2619967923f16bb" dependencies: - abab "^1.0.0" - acorn "^2.4.0" - acorn-globals "^1.0.4" + abab "^1.0.4" + acorn "^5.3.0" + acorn-globals "^4.1.0" array-equal "^1.0.0" - content-type-parser "^1.0.1" - cssom ">= 0.3.0 < 0.4.0" - cssstyle ">= 0.2.36 < 0.3.0" - escodegen "^1.6.1" - html-encoding-sniffer "^1.0.1" - iconv-lite "^0.4.13" - nwmatcher ">= 1.3.9 < 2.0.0" - parse5 "^1.5.1" - request "^2.55.0" - sax "^1.1.4" - symbol-tree ">= 3.1.0 < 4.0.0" - tough-cookie "^2.3.1" - webidl-conversions "^3.0.1" - whatwg-encoding "^1.0.1" - whatwg-url "^4.1.0" - xml-name-validator ">= 2.0.1 < 3.0.0" + browser-process-hrtime "^0.1.2" + content-type-parser "^1.0.2" + cssom ">= 0.3.2 < 0.4.0" + cssstyle ">= 0.2.37 < 0.3.0" + domexception "^1.0.0" + escodegen "^1.9.0" + html-encoding-sniffer "^1.0.2" + left-pad "^1.2.0" + nwmatcher "^1.4.3" + parse5 "4.0.0" + pn "^1.1.0" + request "^2.83.0" + request-promise-native "^1.0.5" + sax "^1.2.4" + symbol-tree "^3.2.2" + tough-cookie "^2.3.3" + w3c-hr-time "^1.0.1" + webidl-conversions "^4.0.2" + whatwg-encoding "^1.0.3" + whatwg-url "^6.4.0" + ws "^4.0.0" + xml-name-validator "^3.0.0" jsesc@^1.3.0: version "1.3.0" @@ -2283,11 +2694,19 @@ json-parse-better-errors@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.1.tgz#50183cd1b2d25275de069e9e71b467ac9eab973a" +json-schema-traverse@^0.3.0: + version "0.3.1" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz#349a6d44c53a51de89b40805c5d5e59b417d3340" + json-schema@0.2.3: version "0.2.3" resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" -json-stable-stringify@^1.0.0, json-stable-stringify@^1.0.1: +json-stable-stringify-without-jsonify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" + +json-stable-stringify@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af" dependencies: @@ -2297,7 +2716,7 @@ json-stringify-safe@~5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" -json5@^0.5.0: +json5@^0.5.0, json5@^0.5.1: version "0.5.1" resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821" @@ -2333,6 +2752,10 @@ lcid@^1.0.0: dependencies: invert-kv "^1.0.0" +left-pad@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/left-pad/-/left-pad-1.2.0.tgz#d30a73c6b8201d8f7d8e7956ba9616087a68e0ee" + leven@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/leven/-/leven-2.1.0.tgz#c2e7a9f772094dee9d34202ae8acce4687875580" @@ -2427,87 +2850,38 @@ load-json-file@^1.0.0: pinkie-promise "^2.0.0" strip-bom "^2.0.0" -lodash._arraycopy@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/lodash._arraycopy/-/lodash._arraycopy-3.0.0.tgz#76e7b7c1f1fb92547374878a562ed06a3e50f6e1" - -lodash._arrayeach@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/lodash._arrayeach/-/lodash._arrayeach-3.0.0.tgz#bab156b2a90d3f1bbd5c653403349e5e5933ef9e" - -lodash._baseassign@^3.0.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz#8c38a099500f215ad09e59f1722fd0c52bfe0a4e" - dependencies: - lodash._basecopy "^3.0.0" - lodash.keys "^3.0.0" - -lodash._baseclone@^3.0.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/lodash._baseclone/-/lodash._baseclone-3.3.0.tgz#303519bf6393fe7e42f34d8b630ef7794e3542b7" +load-json-file@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-2.0.0.tgz#7947e42149af80d696cbf797bcaabcfe1fe29ca8" dependencies: - lodash._arraycopy "^3.0.0" - lodash._arrayeach "^3.0.0" - lodash._baseassign "^3.0.0" - lodash._basefor "^3.0.0" - lodash.isarray "^3.0.0" - lodash.keys "^3.0.0" - -lodash._basecopy@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz#8da0e6a876cf344c0ad8a54882111dd3c5c7ca36" - -lodash._basefor@^3.0.0: - version "3.0.3" - resolved "https://registry.yarnpkg.com/lodash._basefor/-/lodash._basefor-3.0.3.tgz#7550b4e9218ef09fad24343b612021c79b4c20c2" - -lodash._bindcallback@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/lodash._bindcallback/-/lodash._bindcallback-3.0.1.tgz#e531c27644cf8b57a99e17ed95b35c748789392e" - -lodash._getnative@^3.0.0: - version "3.9.1" - resolved "https://registry.yarnpkg.com/lodash._getnative/-/lodash._getnative-3.9.1.tgz#570bc7dede46d61cdcde687d65d3eecbaa3aaff5" - -lodash.assign@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/lodash.assign/-/lodash.assign-4.2.0.tgz#0d99f3ccd7a6d261d19bdaeb9245005d285808e7" + graceful-fs "^4.1.2" + parse-json "^2.2.0" + pify "^2.0.0" + strip-bom "^3.0.0" -lodash.clonedeep@^3.0.0: - version "3.0.2" - resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-3.0.2.tgz#a0a1e40d82a5ea89ff5b147b8444ed63d92827db" +locate-path@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" dependencies: - lodash._baseclone "^3.0.0" - lodash._bindcallback "^3.0.0" + p-locate "^2.0.0" + path-exists "^3.0.0" lodash.cond@^4.3.0: version "4.5.2" resolved "https://registry.yarnpkg.com/lodash.cond/-/lodash.cond-4.5.2.tgz#f471a1da486be60f6ab955d17115523dd1d255d5" -lodash.isarguments@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz#2f573d85c6a24289ff00663b491c1d338ff3458a" - -lodash.isarray@^3.0.0: - version "3.0.4" - resolved "https://registry.yarnpkg.com/lodash.isarray/-/lodash.isarray-3.0.4.tgz#79e4eb88c36a8122af86f844aa9bcd851b5fbb55" +lodash.sortby@^4.7.0: + version "4.7.0" + resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" -lodash.keys@^3.0.0: - version "3.1.2" - resolved "https://registry.yarnpkg.com/lodash.keys/-/lodash.keys-3.1.2.tgz#4dbc0472b156be50a0b286855d1bd0b0c656098a" - dependencies: - lodash._getnative "^3.0.0" - lodash.isarguments "^3.0.0" - lodash.isarray "^3.0.0" +lodash@^4.13.1, lodash@^4.17.4: + version "4.17.5" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.5.tgz#99a92d65c0272debe8c96b6057bc8fbfa3bed511" -lodash@^4.0.0, lodash@^4.14.0, lodash@^4.2.0, lodash@^4.3.0: +lodash@^4.14.0, lodash@^4.2.0, lodash@^4.3.0: version "4.17.4" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae" -lodash@^4.17.4: - version "4.17.5" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.5.tgz#99a92d65c0272debe8c96b6057bc8fbfa3bed511" - log-symbols@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-1.0.2.tgz#376ff7b58ea3086a0f09facc74617eca501e1a18" @@ -2550,19 +2924,17 @@ makeerror@1.0.x: dependencies: tmpl "1.0.x" -marked-terminal@^1.6.2: - version "1.7.0" - resolved "https://registry.yarnpkg.com/marked-terminal/-/marked-terminal-1.7.0.tgz#c8c460881c772c7604b64367007ee5f77f125904" +mem@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/mem/-/mem-1.1.0.tgz#5edd52b485ca1d900fe64895505399a0dfa45f76" dependencies: - cardinal "^1.0.0" - chalk "^1.1.3" - cli-table "^0.3.1" - lodash.assign "^4.2.0" - node-emoji "^1.4.1" + mimic-fn "^1.0.0" -marked@^0.3.6: - version "0.3.6" - resolved "https://registry.yarnpkg.com/marked/-/marked-0.3.6.tgz#b2c6c618fccece4ef86c4fc6cb8a7cbf5aeda8d7" +merge-stream@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-1.0.1.tgz#4041202d508a342ba00174008df0c251b8c135e1" + dependencies: + readable-stream "^2.0.1" merge@^1.1.3: version "1.2.0" @@ -2590,18 +2962,38 @@ mime-db@~1.26.0: version "1.26.0" resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.26.0.tgz#eaffcd0e4fc6935cf8134da246e2e6c35305adff" +mime-db@~1.30.0: + version "1.30.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.30.0.tgz#74c643da2dd9d6a45399963465b26d5ca7d71f01" + mime-types@^2.1.12, mime-types@~2.1.7: version "2.1.14" resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.14.tgz#f7ef7d97583fcaf3b7d282b6f8b5679dab1e94ee" dependencies: mime-db "~1.26.0" -"minimatch@2 || 3", minimatch@^3.0.0, minimatch@^3.0.2, minimatch@^3.0.3: +mime-types@~2.1.17: + version "2.1.17" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.17.tgz#09d7a393f03e995a79f8af857b70a9e0ab16557a" + dependencies: + mime-db "~1.30.0" + +mimic-fn@^1.0.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" + +minimatch@^3.0.0, minimatch@^3.0.2, minimatch@^3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.3.tgz#2a4e4090b96b2db06a9d7df01055a62a77c9b774" dependencies: brace-expansion "^1.0.0" +minimatch@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" + dependencies: + brace-expansion "^1.1.7" + minimist@0.0.8, minimist@~0.0.1: version "0.0.8" resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" @@ -2610,7 +3002,7 @@ minimist@^1.1.1, minimist@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" -mkdirp@0.5.x, "mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.1: +"mkdirp@>=0.5 0", mkdirp@^0.5.1, mkdirp@~0.5.1: version "0.5.1" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" dependencies: @@ -2628,18 +3020,9 @@ ms@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" -multimatch@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/multimatch/-/multimatch-2.1.0.tgz#9c7906a22fb4c02919e2f5f75161b4cdbd4b2a2b" - dependencies: - array-differ "^1.0.0" - array-union "^1.0.1" - arrify "^1.0.0" - minimatch "^3.0.0" - -mute-stream@0.0.5: - version "0.0.5" - resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.5.tgz#8fbfabb0a98a253d3184331f9e8deb7372fac6c0" +mute-stream@0.0.7: + version "0.0.7" + resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" nan@^2.3.0: version "2.5.1" @@ -2649,12 +3032,6 @@ natural-compare@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" -node-emoji@^1.4.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/node-emoji/-/node-emoji-1.5.1.tgz#fd918e412769bf8c448051238233840b2aff16a1" - dependencies: - string.prototype.codepointat "^0.2.0" - node-fetch@^1.0.1: version "1.6.3" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-1.6.3.tgz#dc234edd6489982d58e8f0db4f695029abcd8c04" @@ -2666,17 +3043,14 @@ node-int64@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" -node-notifier@^4.6.1: - version "4.6.1" - resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-4.6.1.tgz#056d14244f3dcc1ceadfe68af9cff0c5473a33f3" +node-notifier@^5.2.1: + version "5.2.1" + resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-5.2.1.tgz#fa313dd08f5517db0e2502e5758d664ac69f9dea" dependencies: - cli-usage "^0.1.1" - growly "^1.2.0" - lodash.clonedeep "^3.0.0" - minimist "^1.1.1" - semver "^5.1.0" - shellwords "^0.1.0" - which "^1.0.5" + growly "^1.3.0" + semver "^5.4.1" + shellwords "^0.1.1" + which "^1.3.0" node-pre-gyp@^0.6.29: version "0.6.32" @@ -2692,7 +3066,30 @@ node-pre-gyp@^0.6.29: tar "~2.2.1" tar-pack "~3.3.0" -nopt@3.x, nopt@~3.0.6: +node-pre-gyp@^0.6.39: + version "0.6.39" + resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.6.39.tgz#c00e96860b23c0e1420ac7befc5044e1d78d8649" + dependencies: + 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@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d" + dependencies: + abbrev "1" + osenv "^0.1.4" + +nopt@~3.0.6: version "3.0.6" resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9" dependencies: @@ -2740,15 +3137,24 @@ npmlog@^4.0.1: gauge "~2.7.1" set-blocking "~2.0.0" +npmlog@^4.0.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" + dependencies: + 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@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" -"nwmatcher@>= 1.3.9 < 2.0.0": - version "1.3.9" - resolved "https://registry.yarnpkg.com/nwmatcher/-/nwmatcher-1.3.9.tgz#8bab486ff7fa3dfd086656bbe8b17116d3692d2a" +nwmatcher@^1.4.3: + version "1.4.3" + resolved "https://registry.yarnpkg.com/nwmatcher/-/nwmatcher-1.4.3.tgz#64348e3b3d80f035b40ac11563d278f8b72db89c" -oauth-sign@~0.8.1: +oauth-sign@~0.8.1, oauth-sign@~0.8.2: version "0.8.2" resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43" @@ -2756,6 +3162,17 @@ object-assign@^4.0.1, object-assign@^4.1.0: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" +object-keys@^1.0.8: + version "1.0.11" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.0.11.tgz#c54601778ad560f1142ce0e01bcca8b56d13426d" + +object.getownpropertydescriptors@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz#8758c846f5b407adab0f236e0986f14b051caa16" + dependencies: + define-properties "^1.1.2" + es-abstract "^1.5.1" + object.omit@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/object.omit/-/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa" @@ -2763,7 +3180,7 @@ object.omit@^2.0.0: for-own "^0.1.4" is-extendable "^0.1.1" -once@1.x, once@^1.3.0, once@^1.4.0: +once@^1.3.0, once@^1.3.3, once@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" dependencies: @@ -2779,6 +3196,12 @@ onetime@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/onetime/-/onetime-1.1.0.tgz#a1f7838f8314c516f05ecefcbc4ccfe04b4ed789" +onetime@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4" + dependencies: + mimic-fn "^1.0.0" + optimist@^0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686" @@ -2810,17 +3233,26 @@ os-homedir@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" -os-locale@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-1.4.0.tgz#20f9f17ae29ed345e8bde583b13d2009803c14d9" +os-locale@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-2.1.0.tgz#42bc2900a6b5b8bd17376c8e882b65afccf24bf2" dependencies: + execa "^0.7.0" lcid "^1.0.0" + mem "^1.1.0" -os-tmpdir@^1.0.1: +os-tmpdir@^1.0.0, os-tmpdir@^1.0.1, os-tmpdir@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" -output-file-sync@^1.1.0: +osenv@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.4.tgz#42fe6d5953df06c8064be6f176c3d05aaaa34644" + dependencies: + os-homedir "^1.0.0" + os-tmpdir "^1.0.0" + +output-file-sync@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/output-file-sync/-/output-file-sync-1.1.2.tgz#d0a33eefe61a205facb90092e826598d5245ce76" dependencies: @@ -2832,10 +3264,26 @@ p-finally@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" +p-limit@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.2.0.tgz#0e92b6bedcb59f022c13d0f1949dc82d15909f1c" + dependencies: + p-try "^1.0.0" + +p-locate@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" + dependencies: + p-limit "^1.1.0" + p-map@^1.1.1: version "1.2.0" resolved "https://registry.yarnpkg.com/p-map/-/p-map-1.2.0.tgz#e4e94f311eabbc8633a1e79908165fca26241b6b" +p-try@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" + parse-glob@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/parse-glob/-/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c" @@ -2858,9 +3306,9 @@ parse-json@^4.0.0: error-ex "^1.3.1" json-parse-better-errors "^1.0.1" -parse5@^1.5.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/parse5/-/parse5-1.5.1.tgz#9b7f3b0de32be78dc2401b17573ccaf0f6f59d94" +parse5@4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-4.0.0.tgz#6d78656e3da8d78b4ec0b906f7c08ef1dfe3f608" path-exists@^2.0.0: version "2.1.0" @@ -2868,7 +3316,11 @@ path-exists@^2.0.0: dependencies: pinkie-promise "^2.0.0" -path-is-absolute@^1.0.0: +path-exists@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" + +path-is-absolute@^1.0.0, path-is-absolute@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" @@ -2892,6 +3344,20 @@ path-type@^1.0.0: pify "^2.0.0" pinkie-promise "^2.0.0" +path-type@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-2.0.0.tgz#f012ccb8415b7096fc2daa1054c3d72389594c73" + dependencies: + pify "^2.0.0" + +performance-now@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-0.2.0.tgz#33ef30c5c77d4ea21c5a53869d91b56d8f2555e5" + +performance-now@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" + pify@^2.0.0: version "2.3.0" resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" @@ -2916,15 +3382,19 @@ pkg-dir@^1.0.0: dependencies: find-up "^1.0.0" -pkg-up@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/pkg-up/-/pkg-up-1.0.0.tgz#3e08fb461525c4421624a33b9f7e6d0af5b05a26" +pkg-dir@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-2.0.0.tgz#f6d5d1109e19d63edf428e0bd57e12777615334b" dependencies: - find-up "^1.0.0" + find-up "^2.1.0" -pluralize@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-1.2.1.tgz#d1a21483fd22bb41e58a12fa3421823140897c45" +pluralize@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-7.0.0.tgz#298b89df8b93b0221dbf421ad2b1b1ea23fc6777" + +pn@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/pn/-/pn-1.1.0.tgz#e2f4cef0e219f463c179ab37463e4e1ecdccbafb" postcss-value-parser@^3.3.0: version "3.3.0" @@ -2949,21 +3419,28 @@ pretty-format@^21.2.1: ansi-regex "^3.0.0" ansi-styles "^3.2.0" -pretty-format@~4.2.1: - version "4.2.3" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-4.2.3.tgz#8894c2ac81419cf801629d8f66320a25380d8b05" +pretty-format@^22.1.0: + version "22.1.0" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-22.1.0.tgz#2277605b40ed4529ae4db51ff62f4be817647914" + dependencies: + ansi-regex "^3.0.0" + ansi-styles "^3.2.0" private@^0.1.6: version "0.1.6" resolved "https://registry.yarnpkg.com/private/-/private-0.1.6.tgz#55c6a976d0f9bafb9924851350fe47b9b5fbb7c1" +private@^0.1.7: + version "0.1.8" + resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff" + process-nextick-args@~1.0.6: version "1.0.7" resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3" -progress@^1.1.8: - version "1.1.8" - resolved "https://registry.yarnpkg.com/progress/-/progress-1.1.8.tgz#e260c78f6161cdd9b0e56cc3e0a85de17c7a57be" +progress@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.0.tgz#8a1be366bf8fc23db2bd23f10c6fe920b4389d1f" promise@^7.1.1: version "7.1.1" @@ -2971,10 +3448,6 @@ promise@^7.1.1: dependencies: asap "~2.0.3" -prr@~0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/prr/-/prr-0.0.0.tgz#1a84b85908325501411853d0081ee3fa86e2926a" - pseudomap@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" @@ -2983,10 +3456,22 @@ punycode@^1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" +punycode@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.0.tgz#5f863edc89b96db09074bad7947bf09056ca4e7d" + qs@~6.3.0: version "6.3.0" resolved "https://registry.yarnpkg.com/qs/-/qs-6.3.0.tgz#f403b264f23bc01228c74131b407f18d5ea5d442" +qs@~6.4.0: + version "6.4.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.4.0.tgz#13e26d28ad6b0ffaa91312cd3bf708ed351e7233" + +qs@~6.5.1: + version "6.5.1" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.1.tgz#349cdf6eef89ec45c12d7d5eb3fc0c870343a6d8" + randomatic@^1.1.3: version "1.1.6" resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-1.1.6.tgz#110dcabff397e9dcff7c0789ccc0a49adf1ec5bb" @@ -2994,6 +3479,15 @@ randomatic@^1.1.3: is-number "^2.0.2" kind-of "^3.0.2" +rc@^1.1.7: + version "1.2.5" + resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.5.tgz#275cd687f6e3b36cc756baa26dfee80a790301fd" + dependencies: + deep-extend "~0.4.0" + ini "~1.3.0" + minimist "^1.2.0" + strip-json-comments "~2.0.1" + rc@~1.1.6: version "1.1.6" resolved "https://registry.yarnpkg.com/rc/-/rc-1.1.6.tgz#43651b76b6ae53b5c802f1151fa3fc3b059969c9" @@ -3010,6 +3504,13 @@ read-pkg-up@^1.0.1: find-up "^1.0.0" read-pkg "^1.0.0" +read-pkg-up@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-2.0.0.tgz#6b72a8048984e0c41e79510fd5e9fa99b3b549be" + dependencies: + find-up "^2.0.0" + read-pkg "^2.0.0" + read-pkg@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28" @@ -3018,6 +3519,14 @@ read-pkg@^1.0.0: normalize-package-data "^2.3.2" path-type "^1.0.0" +read-pkg@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-2.0.0.tgz#8ef1c0623c6a6db0dc6713c4bfac46332b2368f8" + dependencies: + load-json-file "^2.0.0" + normalize-package-data "^2.3.2" + path-type "^2.0.0" + "readable-stream@^2.0.0 || ^1.1.13", readable-stream@^2.0.2, readable-stream@^2.2.2: version "2.2.2" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.2.2.tgz#a9e6fec3c7dda85f8bb1b3ba7028604556fc825e" @@ -3030,6 +3539,18 @@ read-pkg@^1.0.0: string_decoder "~0.10.x" util-deprecate "~1.0.1" +readable-stream@^2.0.1, readable-stream@^2.1.4: + version "2.3.3" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.3.tgz#368f2512d79f9d46fdfc71349ae7878bbc1eb95c" + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.3" + isarray "~1.0.0" + process-nextick-args "~1.0.6" + safe-buffer "~5.1.1" + string_decoder "~1.0.3" + util-deprecate "~1.0.1" + readable-stream@~2.1.4: version "2.1.5" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.1.5.tgz#66fa8b720e1438b364681f2ad1a63c618448c9d0" @@ -3051,25 +3572,11 @@ readdirp@^2.0.0: readable-stream "^2.0.2" set-immediate-shim "^1.0.1" -readline2@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/readline2/-/readline2-1.0.1.tgz#41059608ffc154757b715d9989d199ffbf372e35" - dependencies: - code-point-at "^1.0.0" - is-fullwidth-code-point "^1.0.0" - mute-stream "0.0.5" - -rechoir@^0.6.2: - version "0.6.2" - resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384" - dependencies: - resolve "^1.1.6" - -redeyed@~1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/redeyed/-/redeyed-1.0.1.tgz#e96c193b40c0816b00aec842698e61185e55498a" +realpath-native@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/realpath-native/-/realpath-native-1.0.0.tgz#7885721a83b43bd5327609f0ddecb2482305fdf0" dependencies: - esprima "~3.0.0" + util.promisify "^1.0.0" regenerate@^1.2.1: version "1.3.2" @@ -3079,9 +3586,17 @@ regenerator-runtime@^0.10.0: version "0.10.1" resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.10.1.tgz#257f41961ce44558b18f7814af48c17559f9faeb" -regenerator-transform@0.9.8: - version "0.9.8" - resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.9.8.tgz#0f88bb2bc03932ddb7b6b7312e68078f01026d6c" +regenerator-runtime@^0.10.5: + version "0.10.5" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz#336c3efc1220adcedda2c9fab67b5a7955a33658" + +regenerator-runtime@^0.11.0: + version "0.11.1" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9" + +regenerator-transform@^0.10.0: + version "0.10.1" + resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.10.1.tgz#1e4996837231da8b7f3cf4114d71b5691a0680dd" dependencies: babel-runtime "^6.18.0" babel-types "^6.19.0" @@ -3126,7 +3641,48 @@ repeating@^2.0.0: dependencies: is-finite "^1.0.0" -request@^2.55.0, request@^2.79.0: +request-promise-core@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/request-promise-core/-/request-promise-core-1.1.1.tgz#3eee00b2c5aa83239cfb04c5700da36f81cd08b6" + dependencies: + lodash "^4.13.1" + +request-promise-native@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/request-promise-native/-/request-promise-native-1.0.5.tgz#5281770f68e0c9719e5163fd3fab482215f4fda5" + dependencies: + request-promise-core "1.1.1" + stealthy-require "^1.1.0" + tough-cookie ">=2.3.3" + +request@2.81.0: + version "2.81.0" + resolved "https://registry.yarnpkg.com/request/-/request-2.81.0.tgz#c6928946a0e06c5f8d6f8a9333469ffda46298a0" + dependencies: + 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" + +request@^2.79.0: version "2.79.0" resolved "https://registry.yarnpkg.com/request/-/request-2.79.0.tgz#4dfe5bf6be8b8cdc37fcf93e04b65577722710de" dependencies: @@ -3151,6 +3707,33 @@ request@^2.55.0, request@^2.79.0: tunnel-agent "~0.4.1" uuid "^3.0.0" +request@^2.83.0: + version "2.83.0" + resolved "https://registry.yarnpkg.com/request/-/request-2.83.0.tgz#ca0b65da02ed62935887808e6f510381034e3356" + dependencies: + 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@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" @@ -3163,24 +3746,36 @@ require-main-filename@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1" -require-uncached@^1.0.2: +require-uncached@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/require-uncached/-/require-uncached-1.0.3.tgz#4e0d56d6c9662fd31e43011c4b95aa49955421d3" dependencies: caller-path "^0.1.0" resolve-from "^1.0.0" +resolve-cwd@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-2.0.0.tgz#00a9f7387556e27038eae232caa372a6a59b665a" + dependencies: + resolve-from "^3.0.0" + resolve-from@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-1.0.1.tgz#26cbfe935d1aeeeabb29bc3fe5aeb01e93d44226" -resolve@1.1.7, resolve@1.1.x: +resolve-from@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" + +resolve@1.1.7: version "1.1.7" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" -resolve@^1.1.6: - version "1.2.0" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.2.0.tgz#9589c3f2f6149d1417a40becc1663db6ec6bc26c" +resolve@^1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.5.0.tgz#1f09acce796c9a762579f31b2c1cc4c3cddf9f36" + dependencies: + path-parse "^1.0.5" restore-cursor@^1.0.1: version "1.0.1" @@ -3189,27 +3784,46 @@ restore-cursor@^1.0.1: exit-hook "^1.0.0" onetime "^1.0.0" +restore-cursor@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" + dependencies: + onetime "^2.0.0" + signal-exit "^3.0.2" + right-align@^0.1.1: version "0.1.3" resolved "https://registry.yarnpkg.com/right-align/-/right-align-0.1.3.tgz#61339b722fe6a3515689210d24e14c96148613ef" dependencies: align-text "^0.1.1" -rimraf@2, rimraf@^2.2.8, rimraf@^2.4.3, rimraf@^2.4.4, rimraf@~2.5.1, rimraf@~2.5.4: +rimraf@2, rimraf@^2.2.8, rimraf@~2.5.1, rimraf@~2.5.4: version "2.5.4" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.5.4.tgz#96800093cbf1a0c86bd95b4625467535c29dfa04" dependencies: glob "^7.0.5" -run-async@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/run-async/-/run-async-0.1.0.tgz#c8ad4a5e110661e402a7d21b530e009f25f8e389" +rimraf@^2.5.1, rimraf@^2.5.4, rimraf@^2.6.1: + version "2.6.2" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.2.tgz#2ed8150d24a16ea8651e6d6ef0f47c4158ce7a36" dependencies: - once "^1.3.0" + glob "^7.0.5" -rx-lite@^3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/rx-lite/-/rx-lite-3.1.2.tgz#19ce502ca572665f3b647b10939f97fd1615f102" +run-async@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.3.0.tgz#0371ab4ae0bdd720d4166d7dfda64ff7a445a6c0" + dependencies: + is-promise "^2.1.0" + +rx-lite-aggregates@^4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz#753b87a89a11c95467c4ac1626c4efc4e05c67be" + dependencies: + rx-lite "*" + +rx-lite@*, rx-lite@^4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/rx-lite/-/rx-lite-4.0.8.tgz#0b1e11af8bc44836f04a6407e92da42467b79444" rxjs@^5.4.2: version "5.5.6" @@ -3217,25 +3831,36 @@ rxjs@^5.4.2: dependencies: symbol-observable "1.0.1" -sane@~1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/sane/-/sane-1.4.1.tgz#88f763d74040f5f0c256b6163db399bf110ac715" +safe-buffer@^5.0.1, safe-buffer@^5.1.1, safe-buffer@~5.1.0, safe-buffer@~5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853" + +sane@^2.0.0: + version "2.4.1" + resolved "https://registry.yarnpkg.com/sane/-/sane-2.4.1.tgz#29f991208cf28636720efdc584293e7fd66663a5" dependencies: + anymatch "^1.3.0" exec-sh "^0.2.0" - fb-watchman "^1.8.0" + fb-watchman "^2.0.0" minimatch "^3.0.2" minimist "^1.1.1" walker "~1.0.5" - watch "~0.10.0" + watch "~0.18.0" + optionalDependencies: + fsevents "^1.1.1" -sax@^1.1.4: - version "1.2.1" - resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.1.tgz#7b8e656190b228e81a66aea748480d828cd2d37a" +sax@^1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" -"semver@2 || 3 || 4 || 5", semver@^5.1.0, semver@^5.3.0, semver@~5.3.0: +"semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@~5.3.0: version "5.3.0" resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f" +semver@^5.4.1: + version "5.5.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.5.0.tgz#dc4bbc7a6ca9d916dee5d43516f0092b58f7b8ab" + set-blocking@^2.0.0, set-blocking@~2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" @@ -3258,19 +3883,11 @@ shebang-regex@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" -shelljs@^0.7.5: - version "0.7.6" - resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.7.6.tgz#379cccfb56b91c8601e4793356eb5382924de9ad" - dependencies: - glob "^7.0.0" - interpret "^1.0.0" - rechoir "^0.6.2" - -shellwords@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.0.tgz#66afd47b6a12932d9071cbfd98a52e785cd0ba14" +shellwords@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.1.tgz#d6b9181c1a48d397324c84871efbcfc73fc0654b" -signal-exit@^3.0.0: +signal-exit@^3.0.0, signal-exit@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" @@ -3282,18 +3899,42 @@ slice-ansi@0.0.4: version "0.0.4" resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-0.0.4.tgz#edbf8903f66f7ce2f8eafd6ceed65e264c831b35" +slice-ansi@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-1.0.0.tgz#044f1a49d8842ff307aad6b505ed178bd950134d" + dependencies: + is-fullwidth-code-point "^2.0.0" + sntp@1.x.x: version "1.0.9" resolved "https://registry.yarnpkg.com/sntp/-/sntp-1.0.9.tgz#6541184cc90aeea6c6e7b35e2659082443c66198" dependencies: hoek "2.x.x" +sntp@2.x.x: + version "2.1.0" + resolved "https://registry.yarnpkg.com/sntp/-/sntp-2.1.0.tgz#2c6cec14fedc2222739caf9b5c3d85d1cc5a2cc8" + dependencies: + hoek "4.x.x" + +source-map-support@^0.4.15: + version "0.4.18" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.18.tgz#0286a6de8be42641338594e97ccea75f0a2c585f" + dependencies: + source-map "^0.5.6" + source-map-support@^0.4.2: version "0.4.10" resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.10.tgz#d7b19038040a14c0837a18e630a196453952b378" dependencies: source-map "^0.5.3" +source-map-support@^0.5.0: + version "0.5.3" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.3.tgz#2b3d5fff298cfa4d1afd7d4352d569e9a0158e76" + dependencies: + source-map "^0.6.0" + source-map@^0.4.4: version "0.4.4" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.4.4.tgz#eba4f5da9c0dc999de68032d8b4f76173652036b" @@ -3304,11 +3945,13 @@ source-map@^0.5.0, source-map@^0.5.3, source-map@~0.5.1: version "0.5.6" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.6.tgz#75ce38f52bf0733c5a7f0c118d81334a2bb5f412" -source-map@~0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.2.0.tgz#dab73fbcfc2ba819b4de03bd6f6eaa48164b3f9d" - dependencies: - amdefine ">=0.0.4" +source-map@^0.5.6, source-map@^0.5.7, source-map@~0.5.6: + version "0.5.7" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" + +source-map@^0.6.0: + version "0.6.1" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" spdx-correct@~1.0.0: version "1.0.2" @@ -3343,17 +3986,32 @@ sshpk@^1.7.0: jsbn "~0.1.0" tweetnacl "~0.14.0" +stack-utils@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-1.0.1.tgz#d4f33ab54e8e38778b0ca5cfd3b3afb12db68620" + staged-git-files@0.0.4: version "0.0.4" resolved "https://registry.yarnpkg.com/staged-git-files/-/staged-git-files-0.0.4.tgz#d797e1b551ca7a639dec0237dc6eb4bb9be17d35" +stealthy-require@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/stealthy-require/-/stealthy-require-1.1.1.tgz#35b09875b4ff49f26a777e509b3090a3226bf24b" + stream-to-observable@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/stream-to-observable/-/stream-to-observable-0.2.0.tgz#59d6ea393d87c2c0ddac10aa0d561bc6ba6f0e10" dependencies: any-observable "^0.2.0" -string-width@^1.0.1, string-width@^1.0.2: +string-length@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/string-length/-/string-length-2.0.0.tgz#d40dbb686a3ace960c1cffca562bf2c45f8363ed" + dependencies: + astral-regex "^1.0.0" + strip-ansi "^4.0.0" + +string-width@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" dependencies: @@ -3368,14 +4026,23 @@ string-width@^2.0.0: is-fullwidth-code-point "^2.0.0" strip-ansi "^3.0.0" -string.prototype.codepointat@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/string.prototype.codepointat/-/string.prototype.codepointat-0.2.0.tgz#6b26e9bd3afcaa7be3b4269b526de1b82000ac78" +string-width@^2.1.0, string-width@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" + dependencies: + is-fullwidth-code-point "^2.0.0" + strip-ansi "^4.0.0" string_decoder@~0.10.x: version "0.10.31" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" +string_decoder@~1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.0.3.tgz#0fc67d7c141825de94282dd536bec6b9bce860ab" + dependencies: + safe-buffer "~5.1.0" + stringify-object@^3.2.0: version "3.2.1" resolved "https://registry.yarnpkg.com/stringify-object/-/stringify-object-3.2.1.tgz#2720c2eff940854c819f6ee252aaeb581f30624d" @@ -3384,7 +4051,7 @@ stringify-object@^3.2.0: is-obj "^1.0.1" is-regexp "^1.0.0" -stringstream@~0.0.4: +stringstream@~0.0.4, stringstream@~0.0.5: version "0.0.5" resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.5.tgz#4e484cd4de5a0bbbee18e46307710a8a81621878" @@ -3394,16 +4061,22 @@ strip-ansi@^3.0.0, strip-ansi@^3.0.1: dependencies: ansi-regex "^2.0.0" +strip-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" + dependencies: + ansi-regex "^3.0.0" + +strip-bom@3.0.0, strip-bom@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" + strip-bom@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e" dependencies: is-utf8 "^0.2.0" -strip-bom@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" - strip-eof@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" @@ -3424,7 +4097,7 @@ supports-color@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" -supports-color@^3.1.0, supports-color@^3.1.2: +supports-color@^3.1.2: version "3.2.3" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.2.3.tgz#65ac0504b3954171d8a64946b2ae3cbb8a5f54f6" dependencies: @@ -3444,20 +4117,33 @@ symbol-observable@^0.2.2: version "0.2.4" resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-0.2.4.tgz#95a83db26186d6af7e7a18dbd9760a2f86d08f40" -"symbol-tree@>= 3.1.0 < 4.0.0": - version "3.2.1" - resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.1.tgz#8549dd1d01fa9f893c18cc9ab0b106b4d9b168cb" +symbol-tree@^3.2.2: + version "3.2.2" + resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.2.tgz#ae27db38f660a7ae2e1c3b7d1bc290819b8519e6" -table@^3.7.8: - version "3.8.3" - resolved "https://registry.yarnpkg.com/table/-/table-3.8.3.tgz#2bbc542f0fda9861a755d3947fefd8b3f513855f" +table@^4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/table/-/table-4.0.2.tgz#a33447375391e766ad34d3486e6e2aedc84d2e36" dependencies: - ajv "^4.7.0" - ajv-keywords "^1.0.0" - chalk "^1.1.1" - lodash "^4.0.0" - slice-ansi "0.0.4" - string-width "^2.0.0" + ajv "^5.2.3" + ajv-keywords "^2.1.0" + chalk "^2.1.0" + lodash "^4.17.4" + slice-ansi "1.0.0" + string-width "^2.1.1" + +tar-pack@^3.4.0: + version "3.4.1" + resolved "https://registry.yarnpkg.com/tar-pack/-/tar-pack-3.4.1.tgz#e1dbc03a9b9d3ba07e896ad027317eb679a10a1f" + dependencies: + 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" tar-pack@~3.3.0: version "3.3.0" @@ -3472,7 +4158,7 @@ tar-pack@~3.3.0: tar "~2.2.1" uid-number "~0.0.6" -tar@~2.2.1: +tar@^2.2.1, tar@~2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/tar/-/tar-2.2.1.tgz#8e4d2a256c0e2185c6b18ad694aec968b83cb1d1" dependencies: @@ -3480,9 +4166,9 @@ tar@~2.2.1: fstream "^1.0.2" inherits "2" -test-exclude@^2.1.1: - version "2.1.3" - resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-2.1.3.tgz#a8d8968e1da83266f9864f2852c55e220f06434a" +test-exclude@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-4.1.1.tgz#4d84964b0966b0087ecc334a2ce002d3d9341e26" dependencies: arrify "^1.0.1" micromatch "^2.3.11" @@ -3494,14 +4180,20 @@ text-table@~0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" -throat@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/throat/-/throat-3.0.0.tgz#e7c64c867cbb3845f10877642f7b60055b8ec0d6" +throat@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/throat/-/throat-4.1.0.tgz#89037cbc92c56ab18926e6ba4cbb200e15672a6a" through@^2.3.6: version "2.3.8" resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" +tmp@^0.0.33: + version "0.0.33" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" + dependencies: + os-tmpdir "~1.0.2" + tmpl@1.0.x: version "1.0.4" resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.4.tgz#23640dd7b42d00433911140820e5cf440e521dd1" @@ -3510,20 +4202,42 @@ to-fast-properties@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.2.tgz#f3f5c0c3ba7299a7ef99427e44633257ade43320" -tough-cookie@^2.3.1, tough-cookie@~2.3.0: +to-fast-properties@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.3.tgz#b83571fa4d8c25b82e231b06e3a3055de4ca1a47" + +tough-cookie@>=2.3.3, tough-cookie@^2.3.3, tough-cookie@~2.3.3: + version "2.3.3" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.3.tgz#0b618a5565b6dea90bf3425d04d55edc475a7561" + dependencies: + punycode "^1.4.1" + +tough-cookie@~2.3.0: version "2.3.2" resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.2.tgz#f081f76e4c85720e6c37a5faced737150d84072a" dependencies: punycode "^1.4.1" -tr46@~0.0.3: - version "0.0.3" - resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" +tr46@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-1.0.1.tgz#a8b13fd6bfd2489519674ccde55ba3693b706d09" + dependencies: + punycode "^2.1.0" + +trim-right@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" tryit@^1.0.1: version "1.0.3" resolved "https://registry.yarnpkg.com/tryit/-/tryit-1.0.3.tgz#393be730a9446fd1ead6da59a014308f36c289cb" +tunnel-agent@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" + dependencies: + safe-buffer "^5.0.1" + tunnel-agent@~0.4.1: version "0.4.3" resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.4.3.tgz#6373db76909fe570e08d73583365ed828a74eeeb" @@ -3559,31 +4273,40 @@ uglify-to-browserify@~1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz#6e0924d6bda6b5afe349e39a6d632850a0f882b7" -uid-number@~0.0.6: +uid-number@^0.0.6, uid-number@~0.0.6: version "0.0.6" resolved "https://registry.yarnpkg.com/uid-number/-/uid-number-0.0.6.tgz#0ea10e8035e8eb5b8e4449f06da1c730663baa81" +ultron@~1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/ultron/-/ultron-1.1.1.tgz#9fe1536a10a664a65266a1e3ccf85fd36302bc9c" + user-home@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/user-home/-/user-home-1.1.1.tgz#2b5be23a32b63a7c9deb8d0f28d485724a3df190" -user-home@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/user-home/-/user-home-2.0.0.tgz#9c70bfd8169bc1dcbf48604e0f04b8b49cde9e9f" - dependencies: - os-homedir "^1.0.0" - util-deprecate@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" +util.promisify@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.0.0.tgz#440f7165a459c9a16dc145eb8e72f35687097030" + dependencies: + define-properties "^1.1.2" + object.getownpropertydescriptors "^2.0.3" + uuid@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.0.1.tgz#6544bba2dfda8c1cf17e629a3a305e2bb1fee6c1" -v8flags@^2.0.10: - version "2.0.11" - resolved "https://registry.yarnpkg.com/v8flags/-/v8flags-2.0.11.tgz#bca8f30f0d6d60612cc2c00641e6962d42ae6881" +uuid@^3.1.0: + version "3.2.1" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.2.1.tgz#12c528bb9d58d0b9265d9a2f6f0fe8be17ff1f14" + +v8flags@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/v8flags/-/v8flags-2.1.1.tgz#aab1a1fa30d45f88dd321148875ac02c0b55e5b4" dependencies: user-home "^1.1.1" @@ -3600,19 +4323,28 @@ verror@1.3.6: dependencies: extsprintf "1.0.2" +w3c-hr-time@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.1.tgz#82ac2bff63d950ea9e3189a58a65625fedf19045" + dependencies: + browser-process-hrtime "^0.1.2" + walker@~1.0.5: version "1.0.7" resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.7.tgz#2f7f9b8fd10d677262b18a884e28d19618e028fb" dependencies: makeerror "1.0.x" -watch@~0.10.0: - version "0.10.0" - resolved "https://registry.yarnpkg.com/watch/-/watch-0.10.0.tgz#77798b2da0f9910d595f1ace5b0c2258521f21dc" +watch@~0.18.0: + version "0.18.0" + resolved "https://registry.yarnpkg.com/watch/-/watch-0.18.0.tgz#28095476c6df7c90c963138990c0a5423eb4b986" + dependencies: + exec-sh "^0.2.0" + minimist "^1.2.0" -webidl-conversions@^3.0.0, webidl-conversions@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" +webidl-conversions@^4.0.1, webidl-conversions@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad" whatwg-encoding@^1.0.1: version "1.0.1" @@ -3620,28 +4352,29 @@ whatwg-encoding@^1.0.1: dependencies: iconv-lite "0.4.13" +whatwg-encoding@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.3.tgz#57c235bc8657e914d24e1a397d3c82daee0a6ba3" + dependencies: + iconv-lite "0.4.19" + whatwg-fetch@>=0.10.0: version "2.0.2" resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-2.0.2.tgz#fe294d1d89e36c5be8b3195057f2e4bc74fc980e" -whatwg-url@^4.1.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-4.3.0.tgz#92aaee21f4f2a642074357d70ef8500a7cbb171a" +whatwg-url@^6.4.0: + version "6.4.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-6.4.0.tgz#08fdf2b9e872783a7a1f6216260a1d66cc722e08" dependencies: - tr46 "~0.0.3" - webidl-conversions "^3.0.0" + lodash.sortby "^4.7.0" + tr46 "^1.0.0" + webidl-conversions "^4.0.1" -which-module@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/which-module/-/which-module-1.0.0.tgz#bba63ca861948994ff307736089e3b96026c2a4f" - -which@^1.0.5, which@^1.1.1: - version "1.2.12" - resolved "https://registry.yarnpkg.com/which/-/which-1.2.12.tgz#de67b5e450269f194909ef23ece4ebe416fa1192" - dependencies: - isexe "^1.1.1" +which-module@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" -which@^1.2.10, which@^1.2.9: +which@^1.2.10, which@^1.2.12, which@^1.2.9, which@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/which/-/which-1.3.0.tgz#ff04bdfc010ee547d780bec38e1ac1c2777d253a" dependencies: @@ -3661,20 +4394,13 @@ wordwrap@0.0.2: version "0.0.2" resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.2.tgz#b79669bb42ecb409f83d583cad52ca17eaa1643f" -wordwrap@^1.0.0, wordwrap@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" - wordwrap@~0.0.2: version "0.0.3" resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107" -worker-farm@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.3.1.tgz#4333112bb49b17aa050b87895ca6b2cacf40e5ff" - dependencies: - errno ">=0.1.1 <0.2.0-0" - xtend ">=4.0.0 <4.1.0-0" +wordwrap@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" wrap-ansi@^2.0.0: version "2.1.0" @@ -3687,17 +4413,33 @@ wrappy@1: version "1.0.2" resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" +write-file-atomic@^2.1.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.3.0.tgz#1ff61575c2e2a4e8e510d6fa4e243cce183999ab" + dependencies: + graceful-fs "^4.1.11" + imurmurhash "^0.1.4" + signal-exit "^3.0.2" + write@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/write/-/write-0.2.1.tgz#5fc03828e264cea3fe91455476f7a3c566cb0757" dependencies: mkdirp "^0.5.1" -"xml-name-validator@>= 2.0.1 < 3.0.0": - version "2.0.1" - resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-2.0.1.tgz#4d8b8f1eccd3419aa362061becef515e1e559635" +ws@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/ws/-/ws-4.0.0.tgz#bfe1da4c08eeb9780b986e0e4d10eccd7345999f" + dependencies: + async-limiter "~1.0.0" + safe-buffer "~5.1.0" + ultron "~1.1.0" -"xtend@>=4.0.0 <4.1.0-0", xtend@^4.0.0: +xml-name-validator@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a" + +xtend@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af" @@ -3709,29 +4451,28 @@ yallist@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" -yargs-parser@^4.2.0: - version "4.2.1" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-4.2.1.tgz#29cceac0dc4f03c6c87b4a9f217dd18c9f74871c" +yargs-parser@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-8.1.0.tgz#f1376a33b6629a5d063782944da732631e966950" dependencies: - camelcase "^3.0.0" + camelcase "^4.1.0" -yargs@^6.3.0: - version "6.6.0" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-6.6.0.tgz#782ec21ef403345f830a808ca3d513af56065208" +yargs@^10.0.3: + version "10.1.2" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-10.1.2.tgz#454d074c2b16a51a43e2fb7807e4f9de69ccb5c5" dependencies: - camelcase "^3.0.0" - cliui "^3.2.0" + cliui "^4.0.0" decamelize "^1.1.1" + find-up "^2.1.0" get-caller-file "^1.0.1" - os-locale "^1.4.0" - read-pkg-up "^1.0.1" + os-locale "^2.0.0" 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" + string-width "^2.0.0" + which-module "^2.0.0" y18n "^3.2.1" - yargs-parser "^4.2.0" + yargs-parser "^8.1.0" yargs@~3.10.0: version "3.10.0" From abebccd2dad1332664a9fb6478f59f610e0190ee Mon Sep 17 00:00:00 2001 From: Jacob Parker Date: Fri, 9 Feb 2018 21:36:58 +0000 Subject: [PATCH 24/83] Revert change enforcing color to be defined for text/box shadows --- src/index.test.js | 26 +++++++++++--------------- src/transforms/__tests__/textShadow.js | 12 ++++++++---- src/transforms/util.js | 8 ++++---- 3 files changed, 23 insertions(+), 23 deletions(-) diff --git a/src/index.test.js b/src/index.test.js index 40e7043..dadcdf5 100644 --- a/src/index.test.js +++ b/src/index.test.js @@ -489,6 +489,14 @@ it('transforms box-shadow without blur-radius', () => shadowOpacity: 1, })) +it('transforms box-shadow without color', () => + runTest([['box-shadow', '10px 20px']], { + shadowOffset: { width: 10, height: 20 }, + shadowRadius: 0, + shadowColor: 'black', + shadowOpacity: 1, + })) + it('transforms box-shadow with rgb color', () => runTest([['box-shadow', '10px 20px rgb(100, 100, 100)']], { shadowOffset: { width: 10, height: 20 }, @@ -524,24 +532,12 @@ it('transforms box-shadow with hsla color', () => it('transforms box-shadow and throws if multiple colors are used', () => { expect(() => transformCss([['box-shadow', '0 0 0 red yellow green blue']]) - ).toThrow( - 'Failed to parse declaration "boxShadow: 0 0 0 red yellow green blue"' - ) + ).toThrow() }) it('transforms box-shadow enforces offset to be present', () => { - expect(() => transformCss([['box-shadow', 'red']])).toThrow( - 'Failed to parse declaration "boxShadow: red"' - ) -}) - -it('transforms box-shadow and enforces offset-x and offset-y', () => { - expect(() => transformCss([['box-shadow', 'black']])).toThrow() - expect(() => transformCss([['box-shadow', '10px black']])).toThrow() -}) - -it('transforms box-shadow and enforces color', () => { - expect(() => transformCss([['text-decoration', '10px 20px 30px']])).toThrow() + expect(() => transformCss([['box-shadow', 'red']])).toThrow() + expect(() => transformCss([['box-shadow', '10px red']])).toThrow() }) it('transforms text-decoration into text-decoration- properties', () => diff --git a/src/transforms/__tests__/textShadow.js b/src/transforms/__tests__/textShadow.js index 2505de0..6d9236c 100644 --- a/src/transforms/__tests__/textShadow.js +++ b/src/transforms/__tests__/textShadow.js @@ -16,6 +16,14 @@ it('textShadow omitting blur', () => { }) }) +it('textShadow omitting color', () => { + expect(transformCss([['text-shadow', '10px 20px black']])).toEqual({ + textShadowOffset: { width: 10, height: 20 }, + textShadowRadius: 0, + textShadowColor: 'black', + }) +}) + it('textShadow omitting blur, offset-y', () => { expect(transformCss([['text-shadow', '10px 20px red']])).toEqual({ textShadowOffset: { width: 10, height: 20 }, @@ -28,7 +36,3 @@ it('textShadow enforces offset-x and offset-y', () => { expect(() => transformCss([['text-shadow', 'red']])).toThrow() expect(() => transformCss([['text-shadow', '10px red']])).toThrow() }) - -it('textShadow enforces color', () => { - expect(() => transformCss([['text-shadow', '10px 20px']])).toThrow() -}) diff --git a/src/transforms/util.js b/src/transforms/util.js index c745a43..7e05e1d 100644 --- a/src/transforms/util.js +++ b/src/transforms/util.js @@ -80,7 +80,7 @@ module.exports.shadowOffsetFactory = () => tokenStream => { module.exports.parseShadow = tokenStream => { let offsetX let offsetY - let radius = 0 + let radius let color if (tokenStream.matches(NONE)) { @@ -116,11 +116,11 @@ module.exports.parseShadow = tokenStream => { didParseFirst = true } - if (offsetX === undefined || color === undefined) tokenStream.throw() + if (offsetX === undefined) tokenStream.throw() return { offset: { width: offsetX, height: offsetY }, - radius, - color, + radius: radius !== undefined ? radius : 0, + color: color !== undefined ? color : 'black', } } From e424f89b2fa8a877fca27c4e5631f1ecd9048471 Mon Sep 17 00:00:00 2001 From: Jacob Parker Date: Fri, 9 Feb 2018 21:47:14 +0000 Subject: [PATCH 25/83] Implement case-insensitivity for text decoration --- src/index.test.js | 14 ++++++++++++++ src/tokenTypes.js | 2 +- src/transforms/textDecoration.js | 4 ++-- src/transforms/textDecorationLine.js | 2 +- 4 files changed, 18 insertions(+), 4 deletions(-) diff --git a/src/index.test.js b/src/index.test.js index 13232f4..035d5b6 100644 --- a/src/index.test.js +++ b/src/index.test.js @@ -620,6 +620,20 @@ it('transforms text-decoration with none as part of multiple terms', () => textDecorationColor: 'yellow', })) +it('transforms text-decoration with none in capitals', () => + runTest([['text-decoration', 'yellow NONE']], { + textDecorationLine: 'none', + textDecorationStyle: 'solid', + textDecorationColor: 'yellow', + })) + +it('transforms text-decoration with style in capitals', () => + runTest([['text-decoration', 'yellow UNDERLINE LINE-THROUGH']], { + textDecorationLine: 'underline line-through', + textDecorationStyle: 'solid', + textDecorationColor: 'yellow', + })) + it('does not transform text-decoration if multiple colors are used', () => { expect(() => transformCss([['text-decoration', 'underline red yellow']]) diff --git a/src/tokenTypes.js b/src/tokenTypes.js index acef3d0..5865d1d 100644 --- a/src/tokenTypes.js +++ b/src/tokenTypes.js @@ -67,5 +67,5 @@ module.exports.tokens = { IDENT: regExpToken(identRe), STRING: matchString, COLOR: matchColor, - LINE: regExpToken(/^(none|underline|line-through)$/), + LINE: regExpToken(/^(none|underline|line-through)$/i), } diff --git a/src/transforms/textDecoration.js b/src/transforms/textDecoration.js index 5d81216..6e2dedf 100644 --- a/src/transforms/textDecoration.js +++ b/src/transforms/textDecoration.js @@ -18,7 +18,7 @@ module.exports = tokenStream => { if (didParseFirst) tokenStream.expect(SPACE) if (line === undefined && tokenStream.matches(LINE)) { - const lines = [tokenStream.lastValue] + const lines = [tokenStream.lastValue.toLowerCase()] tokenStream.saveRewindPoint() if ( @@ -26,7 +26,7 @@ module.exports = tokenStream => { tokenStream.matches(SPACE) && tokenStream.matches(LINE) ) { - lines.push(tokenStream.lastValue) + lines.push(tokenStream.lastValue.toLowerCase()) // Underline comes before line-through lines.sort().reverse() } else { diff --git a/src/transforms/textDecorationLine.js b/src/transforms/textDecorationLine.js index 6f51338..0d326ba 100644 --- a/src/transforms/textDecorationLine.js +++ b/src/transforms/textDecorationLine.js @@ -9,7 +9,7 @@ module.exports = tokenStream => { while (tokenStream.hasTokens()) { if (didParseFirst) tokenStream.expect(SPACE) - lines.push(tokenStream.expect(LINE)) + lines.push(tokenStream.expect(LINE).toLowerCase()) didParseFirst = true } From 5c3c5fa9dabe01392c4b8207d0a842f9eb5fba96 Mon Sep 17 00:00:00 2001 From: Jacob Parker Date: Fri, 9 Feb 2018 22:23:18 +0000 Subject: [PATCH 26/83] Fix border-radius shorthand, split tests up into smaller files --- src/__tests__/border.js | 65 ++ src/__tests__/borderColor.js | 10 + src/__tests__/boxModel.js | 103 +++ src/__tests__/boxShadow.js | 83 +++ src/__tests__/flex.js | 102 +++ src/__tests__/flexFlow.js | 22 + src/__tests__/font.js | 122 ++++ src/__tests__/fontFamily.js | 43 ++ src/__tests__/fontVariant.js | 7 + src/__tests__/fontWeight.js | 8 + src/__tests__/index.js | 162 +++++ src/__tests__/shadowOffsets.js | 13 + src/__tests__/textDecoration.js | 103 +++ src/__tests__/textDecorationLine.js | 23 + src/{transforms => }/__tests__/textShadow.js | 2 +- src/__tests__/transform.js | 55 ++ src/index.test.js | 650 ------------------- src/transforms/index.js | 2 +- 18 files changed, 923 insertions(+), 652 deletions(-) create mode 100644 src/__tests__/border.js create mode 100644 src/__tests__/borderColor.js create mode 100644 src/__tests__/boxModel.js create mode 100644 src/__tests__/boxShadow.js create mode 100644 src/__tests__/flex.js create mode 100644 src/__tests__/flexFlow.js create mode 100644 src/__tests__/font.js create mode 100644 src/__tests__/fontFamily.js create mode 100644 src/__tests__/fontVariant.js create mode 100644 src/__tests__/fontWeight.js create mode 100644 src/__tests__/index.js create mode 100644 src/__tests__/shadowOffsets.js create mode 100644 src/__tests__/textDecoration.js create mode 100644 src/__tests__/textDecorationLine.js rename src/{transforms => }/__tests__/textShadow.js (97%) create mode 100644 src/__tests__/transform.js delete mode 100644 src/index.test.js diff --git a/src/__tests__/border.js b/src/__tests__/border.js new file mode 100644 index 0000000..369a112 --- /dev/null +++ b/src/__tests__/border.js @@ -0,0 +1,65 @@ +import transformCss from '..' + +it('transforms border shorthand', () => { + expect(transformCss([['border', '2px dashed #f00']])).toEqual({ + borderWidth: 2, + borderColor: '#f00', + borderStyle: 'dashed', + }) +}) + +it('transforms border shorthand in other order', () => { + expect(transformCss([['border', '#f00 2px dashed']])).toEqual({ + borderWidth: 2, + borderColor: '#f00', + borderStyle: 'dashed', + }) +}) + +it('transforms border shorthand missing color', () => { + expect(transformCss([['border', '2px dashed']])).toEqual({ + borderWidth: 2, + borderColor: 'black', + borderStyle: 'dashed', + }) +}) + +it('transforms border shorthand missing style', () => { + expect(transformCss([['border', '2px #f00']])).toEqual({ + borderWidth: 2, + borderColor: '#f00', + borderStyle: 'solid', + }) +}) + +it('transforms border shorthand missing width', () => { + expect(transformCss([['border', '#f00 dashed']])).toEqual({ + borderWidth: 1, + borderColor: '#f00', + borderStyle: 'dashed', + }) +}) + +it('transforms border shorthand missing color & width', () => { + expect(transformCss([['border', 'dashed']])).toEqual({ + borderWidth: 1, + borderColor: 'black', + borderStyle: 'dashed', + }) +}) + +it('transforms border shorthand missing style & width', () => { + expect(transformCss([['border', '#f00']])).toEqual({ + borderWidth: 1, + borderColor: '#f00', + borderStyle: 'solid', + }) +}) + +it('transforms border shorthand missing color & style', () => { + expect(transformCss([['border', '2px']])).toEqual({ + borderWidth: 2, + borderColor: 'black', + borderStyle: 'solid', + }) +}) diff --git a/src/__tests__/borderColor.js b/src/__tests__/borderColor.js new file mode 100644 index 0000000..66f3532 --- /dev/null +++ b/src/__tests__/borderColor.js @@ -0,0 +1,10 @@ +import transformCss from '..' + +it('transforms border color with multiple values', () => { + expect(transformCss([['border-color', 'red yellow green blue']])).toEqual({ + borderTopColor: 'red', + borderRightColor: 'yellow', + borderBottomColor: 'green', + borderLeftColor: 'blue', + }) +}) diff --git a/src/__tests__/boxModel.js b/src/__tests__/boxModel.js new file mode 100644 index 0000000..10b9f2c --- /dev/null +++ b/src/__tests__/boxModel.js @@ -0,0 +1,103 @@ +import transformCss from '..' + +it('transforms margin, padding with 1 value', () => { + expect(transformCss([['margin', '1px']])).toEqual({ + marginTop: 1, + marginRight: 1, + marginBottom: 1, + marginLeft: 1, + }) + expect(transformCss([['padding', '1px']])).toEqual({ + paddingTop: 1, + paddingRight: 1, + paddingBottom: 1, + paddingLeft: 1, + }) +}) + +it('transforms margin, padding with 2 values', () => { + expect(transformCss([['margin', '1px 2px']])).toEqual({ + marginTop: 1, + marginRight: 2, + marginBottom: 1, + marginLeft: 2, + }) + expect(transformCss([['padding', '1px 2px']])).toEqual({ + paddingTop: 1, + paddingRight: 2, + paddingBottom: 1, + paddingLeft: 2, + }) +}) + +it('transforms margin, padding with 3 values', () => { + expect(transformCss([['margin', '1px 2px 3px']])).toEqual({ + marginTop: 1, + marginRight: 2, + marginBottom: 3, + marginLeft: 2, + }) + expect(transformCss([['padding', '1px 2px 3px']])).toEqual({ + paddingTop: 1, + paddingRight: 2, + paddingBottom: 3, + paddingLeft: 2, + }) +}) + +it('transforms margin, padding with 4 values', () => { + expect(transformCss([['margin', '1px 2px 3px 4px']])).toEqual({ + marginTop: 1, + marginRight: 2, + marginBottom: 3, + marginLeft: 4, + }) + expect(transformCss([['padding', '1px 2px 3px 4px']])).toEqual({ + paddingTop: 1, + paddingRight: 2, + paddingBottom: 3, + paddingLeft: 4, + }) +}) + +it('transforms margin, allowing unitless zero, percentages', () => { + expect(transformCss([['margin', '0 0% 10% 100%']])).toEqual({ + marginTop: 0, + marginRight: '0%', + marginBottom: '10%', + marginLeft: '100%', + }) + expect(transformCss([['padding', '0 0% 10% 100%']])).toEqual({ + paddingTop: 0, + paddingRight: '0%', + paddingBottom: '10%', + paddingLeft: '100%', + }) +}) + +it('transforms shorthand and overrides previous values', () => { + expect(transformCss([['margin-top', '2px'], ['margin', '1px']])).toEqual({ + marginTop: 1, + marginRight: 1, + marginBottom: 1, + marginLeft: 1, + }) +}) + +it('transforms border width', () => { + expect(transformCss([['border-width', '1px 2px 3px 4px']])).toEqual({ + borderTopWidth: 1, + borderRightWidth: 2, + borderBottomWidth: 3, + borderLeftWidth: 4, + }) +}) + +it('transforms border radius', () => { + expect(transformCss([['border-radius', '1px 2px 3px 4px']])).toEqual({ + borderTopLeftRadius: 1, + borderTopRightRadius: 2, + borderBottomRightRadius: 3, + borderBottomLeftRadius: 4, + }) +}) diff --git a/src/__tests__/boxShadow.js b/src/__tests__/boxShadow.js new file mode 100644 index 0000000..2ef215f --- /dev/null +++ b/src/__tests__/boxShadow.js @@ -0,0 +1,83 @@ +import transformCss from '..' + +it('transforms box-shadow into shadow- properties', () => { + expect(transformCss([['box-shadow', '10px 20px 30px red']])).toEqual({ + shadowOffset: { width: 10, height: 20 }, + shadowRadius: 30, + shadowColor: 'red', + shadowOpacity: 1, + }) +}) + +it('transforms box-shadow without blur-radius', () => { + expect(transformCss([['box-shadow', '10px 20px red']])).toEqual({ + shadowOffset: { width: 10, height: 20 }, + shadowRadius: 0, + shadowColor: 'red', + shadowOpacity: 1, + }) +}) + +it('transforms box-shadow without color', () => { + expect(transformCss([['box-shadow', '10px 20px']])).toEqual({ + shadowOffset: { width: 10, height: 20 }, + shadowRadius: 0, + shadowColor: 'black', + shadowOpacity: 1, + }) +}) + +it('transforms box-shadow with rgb color', () => { + expect( + transformCss([['box-shadow', '10px 20px rgb(100, 100, 100)']]) + ).toEqual({ + shadowOffset: { width: 10, height: 20 }, + shadowRadius: 0, + shadowColor: 'rgb(100, 100, 100)', + shadowOpacity: 1, + }) +}) + +it('transforms box-shadow with rgba color', () => { + expect( + transformCss([['box-shadow', '10px 20px rgba(100, 100, 100, 0.5)']]) + ).toEqual({ + shadowOffset: { width: 10, height: 20 }, + shadowRadius: 0, + shadowColor: 'rgba(100, 100, 100, 0.5)', + shadowOpacity: 1, + }) +}) + +it('transforms box-shadow with hsl color', () => { + expect( + transformCss([['box-shadow', '10px 20px hsl(120, 100%, 50%)']]) + ).toEqual({ + shadowOffset: { width: 10, height: 20 }, + shadowRadius: 0, + shadowColor: 'hsl(120, 100%, 50%)', + shadowOpacity: 1, + }) +}) + +it('transforms box-shadow with hsla color', () => { + expect( + transformCss([['box-shadow', '10px 20px hsla(120, 100%, 50%, 0.7)']]) + ).toEqual({ + shadowOffset: { width: 10, height: 20 }, + shadowRadius: 0, + shadowColor: 'hsla(120, 100%, 50%, 0.7)', + shadowOpacity: 1, + }) +}) + +it('transforms box-shadow and throws if multiple colors are used', () => { + expect(() => + transformCss([['box-shadow', '0 0 0 red yellow green blue']]) + ).toThrow() +}) + +it('transforms box-shadow enforces offset to be present', () => { + expect(() => transformCss([['box-shadow', 'red']])).toThrow() + expect(() => transformCss([['box-shadow', '10px red']])).toThrow() +}) diff --git a/src/__tests__/flex.js b/src/__tests__/flex.js new file mode 100644 index 0000000..aa12943 --- /dev/null +++ b/src/__tests__/flex.js @@ -0,0 +1,102 @@ +import transformCss from '..' + +it('transforms flex shorthand with 3 values', () => { + expect(transformCss([['flex', '1 2 3px']])).toEqual({ + flexGrow: 1, + flexShrink: 2, + flexBasis: 3, + }) +}) + +it('transforms flex shorthand with 3 values in reverse order', () => { + expect(transformCss([['flex', '3px 1 2']])).toEqual({ + flexGrow: 1, + flexShrink: 2, + flexBasis: 3, + }) +}) + +it('transforms flex shorthand with 2 values of flex-grow and flex-shrink', () => { + expect(transformCss([['flex', '1 2']])).toEqual({ + flexGrow: 1, + flexShrink: 2, + flexBasis: 0, + }) +}) + +it('transforms flex shorthand with 2 values of flex-grow and flex-basis', () => { + expect(transformCss([['flex', '2 2px']])).toEqual({ + flexGrow: 2, + flexShrink: 1, + flexBasis: 2, + }) +}) + +it('transforms flex shorthand with 2 values of flex-grow and flex-basis (reversed)', () => { + expect(transformCss([['flex', '2px 2']])).toEqual({ + flexGrow: 2, + flexShrink: 1, + flexBasis: 2, + }) +}) + +it('transforms flex shorthand with 1 value of flex-grow', () => { + expect(transformCss([['flex', '2']])).toEqual({ + flexGrow: 2, + flexShrink: 1, + flexBasis: 0, + }) +}) + +it('transforms flex shorthand with 1 value of flex-basis', () => { + expect(transformCss([['flex', '10px']])).toEqual({ + flexGrow: 1, + flexShrink: 1, + flexBasis: 10, + }) +}) + +/* +A unitless zero that is not already preceded by two flex factors must be interpreted as a flex +factor. To avoid misinterpretation or invalid declarations, authors must specify a zero +<‘flex-basis’> component with a unit or precede it by two flex factors. +*/ +it('transforms flex shorthand with flex-grow/shrink taking priority over basis', () => { + expect(transformCss([['flex', '0 1 0']])).toEqual({ + flexGrow: 0, + flexShrink: 1, + flexBasis: 0, + }) +}) + +it('transforms flex shorthand with flex-basis set to auto', () => { + expect(transformCss([['flex', '0 1 auto']])).toEqual({ + flexGrow: 0, + flexShrink: 1, + }) +}) + +it('transforms flex shorthand with flex-basis set to auto appearing first', () => { + expect(transformCss([['flex', 'auto 0 1']])).toEqual({ + flexGrow: 0, + flexShrink: 1, + }) +}) + +it('transforms flex auto keyword', () => { + expect(transformCss([['flex', 'auto']])).toEqual({ + flexGrow: 1, + flexShrink: 1, + }) +}) + +it('transforms flex none keyword', () => { + expect(transformCss([['flex', 'none']])).toEqual({ + flexGrow: 0, + flexShrink: 0, + }) +}) + +it('does not transform invalid flex', () => { + expect(() => transformCss([['flex', '1 2px 3']])).toThrow() +}) diff --git a/src/__tests__/flexFlow.js b/src/__tests__/flexFlow.js new file mode 100644 index 0000000..647f20a --- /dev/null +++ b/src/__tests__/flexFlow.js @@ -0,0 +1,22 @@ +import transformCss from '..' + +it('transforms flexFlow shorthand with two values', () => { + expect(transformCss([['flex-flow', 'column wrap']])).toEqual({ + flexDirection: 'column', + flexWrap: 'wrap', + }) +}) + +it('transforms flexFlow shorthand missing flexDirection', () => { + expect(transformCss([['flex-flow', 'wrap']])).toEqual({ + flexDirection: 'row', + flexWrap: 'wrap', + }) +}) + +it('transforms flexFlow shorthand missing flexWrap', () => { + expect(transformCss([['flex-flow', 'column']])).toEqual({ + flexDirection: 'column', + flexWrap: 'nowrap', + }) +}) diff --git a/src/__tests__/font.js b/src/__tests__/font.js new file mode 100644 index 0000000..c68d690 --- /dev/null +++ b/src/__tests__/font.js @@ -0,0 +1,122 @@ +import transformCss from '..' + +it('transforms font', () => { + expect( + transformCss([['font', 'bold italic small-caps 16px/18px "Helvetica"']]) + ).toEqual({ + fontFamily: 'Helvetica', + fontSize: 16, + fontWeight: 'bold', + fontStyle: 'italic', + fontVariant: ['small-caps'], + lineHeight: 18, + }) +}) + +it('transforms font missing font-variant', () => { + expect(transformCss([['font', 'bold italic 16px/18px "Helvetica"']])).toEqual( + { + fontFamily: 'Helvetica', + fontSize: 16, + fontWeight: 'bold', + fontStyle: 'italic', + fontVariant: [], + lineHeight: 18, + } + ) +}) + +it('transforms font missing font-style', () => { + expect( + transformCss([['font', 'bold small-caps 16px/18px "Helvetica"']]) + ).toEqual({ + fontFamily: 'Helvetica', + fontSize: 16, + fontWeight: 'bold', + fontStyle: 'normal', + fontVariant: ['small-caps'], + lineHeight: 18, + }) +}) + +it('transforms font missing font-weight', () => { + expect( + transformCss([['font', 'italic small-caps 16px/18px "Helvetica"']]) + ).toEqual({ + fontFamily: 'Helvetica', + fontSize: 16, + fontWeight: 'normal', + fontStyle: 'italic', + fontVariant: ['small-caps'], + lineHeight: 18, + }) +}) + +it('transforms font with font-weight normal', () => { + expect(transformCss([['font', 'normal 16px/18px "Helvetica"']])).toEqual({ + fontFamily: 'Helvetica', + fontSize: 16, + fontWeight: 'normal', + fontStyle: 'normal', + fontVariant: [], + lineHeight: 18, + }) +}) + +it('transforms font with font-weight and font-style normal', () => { + expect( + transformCss([['font', 'normal normal 16px/18px "Helvetica"']]) + ).toEqual({ + fontFamily: 'Helvetica', + fontSize: 16, + fontWeight: 'normal', + fontStyle: 'normal', + fontVariant: [], + lineHeight: 18, + }) +}) + +it('transforms font with no font-weight, font-style, and font-variant', () => { + expect(transformCss([['font', '16px/18px "Helvetica"']])).toEqual({ + fontFamily: 'Helvetica', + fontSize: 16, + fontWeight: 'normal', + fontStyle: 'normal', + fontVariant: [], + lineHeight: 18, + }) +}) + +it('omits line height if not specified', () => { + expect(transformCss([['font', '16px "Helvetica"']])).toEqual({ + fontFamily: 'Helvetica', + fontSize: 16, + fontWeight: 'normal', + fontStyle: 'normal', + fontVariant: [], + }) +}) + +it('allows line height as multiple', () => { + expect(transformCss([['font', '16px/1.5 "Helvetica"']])).toEqual({ + fontFamily: 'Helvetica', + fontSize: 16, + fontWeight: 'normal', + fontStyle: 'normal', + fontVariant: [], + lineHeight: 24, + }) +}) + +it('transforms font without quotes', () => { + expect( + transformCss([['font', 'bold italic small-caps 16px/18px Helvetica Neue']]) + ).toEqual({ + fontFamily: 'Helvetica Neue', + fontSize: 16, + fontWeight: 'bold', + fontStyle: 'italic', + fontVariant: ['small-caps'], + lineHeight: 18, + }) +}) diff --git a/src/__tests__/fontFamily.js b/src/__tests__/fontFamily.js new file mode 100644 index 0000000..f684c0c --- /dev/null +++ b/src/__tests__/fontFamily.js @@ -0,0 +1,43 @@ +import transformCss from '..' + +it('transforms font-family with double quotes', () => { + expect(transformCss([['font-family', '"Helvetica Neue"']])).toEqual({ + fontFamily: 'Helvetica Neue', + }) +}) + +it('transforms font-family with single quotes', () => { + expect(transformCss([['font-family', "'Helvetica Neue'"]])).toEqual({ + fontFamily: 'Helvetica Neue', + }) +}) + +it('transforms font-family without quotes', () => { + expect(transformCss([['font-family', 'Helvetica Neue']])).toEqual({ + fontFamily: 'Helvetica Neue', + }) +}) + +it('transforms font-family with quotes with otherwise invalid values', () => { + expect(transformCss([['font-family', '"Goudy Bookletter 1911"']])).toEqual({ + fontFamily: 'Goudy Bookletter 1911', + }) +}) + +it('transforms font-family with quotes with escaped values', () => { + expect(transformCss([['font-family', '"test\\A test"']])).toEqual({ + fontFamily: 'test\ntest', + }) +}) + +it('transforms font-family with quotes with escaped quote', () => { + expect(transformCss([['font-family', '"test\\"test"']])).toEqual({ + fontFamily: 'test"test', + }) +}) + +it('does not transform invalid unquoted font-family', () => { + expect(() => + transformCss([['font-family', 'Goudy Bookletter 1911']]) + ).toThrow() +}) diff --git a/src/__tests__/fontVariant.js b/src/__tests__/fontVariant.js new file mode 100644 index 0000000..21f4cb7 --- /dev/null +++ b/src/__tests__/fontVariant.js @@ -0,0 +1,7 @@ +import transformCss from '..' + +it('transforms font variant as an array', () => { + expect(transformCss([['font-variant', 'tabular-nums']])).toEqual({ + fontVariant: ['tabular-nums'], + }) +}) diff --git a/src/__tests__/fontWeight.js b/src/__tests__/fontWeight.js new file mode 100644 index 0000000..6a9d7e7 --- /dev/null +++ b/src/__tests__/fontWeight.js @@ -0,0 +1,8 @@ +import transformCss from '..' + +it('transforms font weights as strings', () => { + expect(transformCss([['font-weight', '400']])).toEqual({ fontWeight: '400' }) + expect(transformCss([['font-weight', 'bold']])).toEqual({ + fontWeight: 'bold', + }) +}) diff --git a/src/__tests__/index.js b/src/__tests__/index.js new file mode 100644 index 0000000..75bc10f --- /dev/null +++ b/src/__tests__/index.js @@ -0,0 +1,162 @@ +import transformCss, { getStylesForProperty } from '..' + +it('transforms numbers', () => { + expect( + transformCss([['top', '0'], ['left', '0'], ['right', '0'], ['bottom', '0']]) + ).toEqual({ + top: 0, + left: 0, + right: 0, + bottom: 0, + }) +}) + +it('allows pixels in unspecialized transform', () => { + expect(transformCss([['top', '0px']])).toEqual({ top: 0 }) +}) + +it('allows boolean values', () => { + expect( + transformCss([ + ['boolTrue1', 'true'], + ['boolTrue2', 'TRUE'], + ['boolFalse1', 'false'], + ['boolFalse2', 'FALSE'], + ]) + ).toEqual({ + boolTrue1: true, + boolTrue2: true, + boolFalse1: false, + boolFalse2: false, + }) +}) + +it('allows null values', () => { + expect(transformCss([['null1', 'null'], ['null2', 'NULL']])).toEqual({ + null1: null, + null2: null, + }) +}) + +it('allows undefined values', () => { + expect( + transformCss([['undefined1', 'undefined'], ['undefined2', 'UNDEFINED']]) + ).toEqual({ + undefined1: undefined, + undefined2: undefined, + }) +}) + +it('allows percent in unspecialized transform', () => { + expect(transformCss([['top', '0%']])).toEqual({ top: '0%' }) +}) + +it('allows decimal values', () => { + expect(getStylesForProperty('margin', '0.5px').marginTop).toBe(0.5) + expect(getStylesForProperty('margin', '1.5px').marginTop).toBe(1.5) + expect(getStylesForProperty('margin', '10.5px').marginTop).toBe(10.5) + expect(getStylesForProperty('margin', '100.5px').marginTop).toBe(100.5) + expect(getStylesForProperty('margin', '-0.5px').marginTop).toBe(-0.5) + expect(getStylesForProperty('margin', '-1.5px').marginTop).toBe(-1.5) + expect(getStylesForProperty('margin', '-10.5px').marginTop).toBe(-10.5) + expect(getStylesForProperty('margin', '-100.5px').marginTop).toBe(-100.5) + expect(getStylesForProperty('margin', '.5px').marginTop).toBe(0.5) + expect(getStylesForProperty('margin', '-.5px').marginTop).toBe(-0.5) +}) + +it('allows decimal values in transformed values', () => { + expect(transformCss([['border-radius', '1.5px']])).toEqual({ + borderTopLeftRadius: 1.5, + borderTopRightRadius: 1.5, + borderBottomRightRadius: 1.5, + borderBottomLeftRadius: 1.5, + }) +}) + +it('allows negative values in transformed values', () => { + expect(transformCss([['border-radius', '-1.5px']])).toEqual({ + borderTopLeftRadius: -1.5, + borderTopRightRadius: -1.5, + borderBottomRightRadius: -1.5, + borderBottomLeftRadius: -1.5, + }) +}) + +it('allows percent values in transformed values', () => { + expect(transformCss([['margin', '10%']])).toEqual({ + marginTop: '10%', + marginRight: '10%', + marginBottom: '10%', + marginLeft: '10%', + }) +}) + +it('allows color values in transformed border-color values', () => { + expect(transformCss([['border-color', 'red']])).toEqual({ + borderTopColor: 'red', + borderRightColor: 'red', + borderBottomColor: 'red', + borderLeftColor: 'red', + }) +}) + +it('allows omitting units for 0', () => { + expect(transformCss([['margin', '10px 0']])).toEqual({ + marginTop: 10, + marginRight: 0, + marginBottom: 10, + marginLeft: 0, + }) +}) + +it('transforms strings', () => { + expect(transformCss([['color', 'red']])).toEqual({ color: 'red' }) +}) + +it('transforms hex colors', () => { + expect(transformCss([['color', '#f00']])).toEqual({ color: '#f00' }) +}) + +it('transforms rgb colors', () => { + expect(transformCss([['color', 'rgb(255, 0, 0)']])).toEqual({ + color: 'rgb(255, 0, 0)', + }) +}) + +it('converts to camel-case', () => { + expect(transformCss([['background-color', 'red']])).toEqual({ + backgroundColor: 'red', + }) +}) + +it('transforms background to backgroundColor', () => { + expect(transformCss([['background', '#f00']])).toEqual({ + backgroundColor: '#f00', + }) +}) + +it('transforms background to backgroundColor with rgb', () => { + expect(transformCss([['background', 'rgb(255, 0, 0)']])).toEqual({ + backgroundColor: 'rgb(255, 0, 0)', + }) +}) + +it('transforms background to backgroundColor with named colour', () => { + expect(transformCss([['background', 'red']])).toEqual({ + backgroundColor: 'red', + }) +}) + +it('allows blacklisting shorthands', () => { + const actualStyles = transformCss( + [['border-radius', '50px']], + ['borderRadius'] + ) + expect(actualStyles).toEqual({ borderRadius: 50 }) +}) + +it('throws useful errors', () => { + expect(() => transformCss([['margin', '10']])).toThrow( + 'Failed to parse declaration "margin: 10"' + ) +}) diff --git a/src/__tests__/shadowOffsets.js b/src/__tests__/shadowOffsets.js new file mode 100644 index 0000000..e314e48 --- /dev/null +++ b/src/__tests__/shadowOffsets.js @@ -0,0 +1,13 @@ +import transformCss from '..' + +it('transforms shadow offsets', () => { + expect(transformCss([['shadow-offset', '10px 5px']])).toEqual({ + shadowOffset: { width: 10, height: 5 }, + }) +}) + +it('transforms text shadow offsets', () => { + expect(transformCss([['text-shadow-offset', '10px 5px']])).toEqual({ + textShadowOffset: { width: 10, height: 5 }, + }) +}) diff --git a/src/__tests__/textDecoration.js b/src/__tests__/textDecoration.js new file mode 100644 index 0000000..4e5a338 --- /dev/null +++ b/src/__tests__/textDecoration.js @@ -0,0 +1,103 @@ +import transformCss from '..' + +it('transforms text-decoration into text-decoration- properties', () => { + expect(transformCss([['text-decoration', 'underline dotted red']])).toEqual({ + textDecorationLine: 'underline', + textDecorationStyle: 'dotted', + textDecorationColor: 'red', + }) +}) + +it('transforms text-decoration without color', () => { + expect(transformCss([['text-decoration', 'underline dotted']])).toEqual({ + textDecorationLine: 'underline', + textDecorationStyle: 'dotted', + textDecorationColor: 'black', + }) +}) + +it('transforms text-decoration without style', () => { + expect(transformCss([['text-decoration', 'underline red']])).toEqual({ + textDecorationLine: 'underline', + textDecorationStyle: 'solid', + textDecorationColor: 'red', + }) +}) + +it('transforms text-decoration without style and color', () => { + expect(transformCss([['text-decoration', 'underline']])).toEqual({ + textDecorationLine: 'underline', + textDecorationStyle: 'solid', + textDecorationColor: 'black', + }) +}) + +it('transforms text-decoration with two line properties', () => { + expect( + transformCss([['text-decoration', 'underline line-through dashed red']]) + ).toEqual({ + textDecorationLine: 'underline line-through', + textDecorationStyle: 'dashed', + textDecorationColor: 'red', + }) +}) + +it('transforms text-decoration in different order', () => { + expect( + transformCss([['text-decoration', 'dashed red underline line-through']]) + ).toEqual({ + textDecorationLine: 'underline line-through', + textDecorationStyle: 'dashed', + textDecorationColor: 'red', + }) +}) + +it('transforms text-decoration with ine in different order', () => { + expect(transformCss([['text-decoration', 'line-through underline']])).toEqual( + { + textDecorationLine: 'underline line-through', + textDecorationStyle: 'solid', + textDecorationColor: 'black', + } + ) +}) + +it('transforms text-decoration with none', () => { + expect(transformCss([['text-decoration', 'none']])).toEqual({ + textDecorationLine: 'none', + textDecorationStyle: 'solid', + textDecorationColor: 'black', + }) +}) + +it('transforms text-decoration with none as part of multiple terms', () => { + expect(transformCss([['text-decoration', 'yellow none']])).toEqual({ + textDecorationLine: 'none', + textDecorationStyle: 'solid', + textDecorationColor: 'yellow', + }) +}) + +it('transforms text-decoration with none in capitals', () => { + expect(transformCss([['text-decoration', 'yellow NONE']])).toEqual({ + textDecorationLine: 'none', + textDecorationStyle: 'solid', + textDecorationColor: 'yellow', + }) +}) + +it('transforms text-decoration with style in capitals', () => { + expect( + transformCss([['text-decoration', 'yellow UNDERLINE LINE-THROUGH']]) + ).toEqual({ + textDecorationLine: 'underline line-through', + textDecorationStyle: 'solid', + textDecorationColor: 'yellow', + }) +}) + +it('does not transform text-decoration if multiple colors are used', () => { + expect(() => + transformCss([['text-decoration', 'underline red yellow']]) + ).toThrow() +}) diff --git a/src/__tests__/textDecorationLine.js b/src/__tests__/textDecorationLine.js new file mode 100644 index 0000000..4afdd4b --- /dev/null +++ b/src/__tests__/textDecorationLine.js @@ -0,0 +1,23 @@ +import transformCss from '..' + +it('transforms text-decoration-line with underline line-through', () => { + expect( + transformCss([['text-decoration-line', 'underline line-through']]) + ).toEqual({ + textDecorationLine: 'underline line-through', + }) +}) + +it('transforms text-decoration-line with line-through underline', () => { + expect( + transformCss([['text-decoration-line', 'line-through underline']]) + ).toEqual({ + textDecorationLine: 'underline line-through', + }) +}) + +it('transforms text-decoration-line with none', () => { + expect(transformCss([['text-decoration-line', 'none']])).toEqual({ + textDecorationLine: 'none', + }) +}) diff --git a/src/transforms/__tests__/textShadow.js b/src/__tests__/textShadow.js similarity index 97% rename from src/transforms/__tests__/textShadow.js rename to src/__tests__/textShadow.js index 6d9236c..eccd963 100644 --- a/src/transforms/__tests__/textShadow.js +++ b/src/__tests__/textShadow.js @@ -1,4 +1,4 @@ -import transformCss from '../..' +import transformCss from '..' it('textShadow with all values', () => { expect(transformCss([['text-shadow', '10px 20px 30px red']])).toEqual({ diff --git a/src/__tests__/transform.js b/src/__tests__/transform.js new file mode 100644 index 0000000..71b8a79 --- /dev/null +++ b/src/__tests__/transform.js @@ -0,0 +1,55 @@ +import transformCss from '..' + +it('transforms a single transform value with number', () => { + expect(transformCss([['transform', 'scaleX(5)']])).toEqual({ + transform: [{ scaleX: 5 }], + }) +}) + +it('transforms a single transform value with string', () => { + expect(transformCss([['transform', 'rotate(5deg)']])).toEqual({ + transform: [{ rotate: '5deg' }], + }) +}) + +it('transforms multiple transform values', () => { + expect(transformCss([['transform', 'scaleX(5) skewX(1deg)']])).toEqual({ + transform: [{ skewX: '1deg' }, { scaleX: 5 }], + }) +}) + +it('transforms scale(number, number) to scaleX and scaleY', () => { + expect(transformCss([['transform', 'scale(2, 3)']])).toEqual({ + transform: [{ scaleY: 3 }, { scaleX: 2 }], + }) +}) + +it('transforms scale(number) to scale', () => { + expect(transformCss([['transform', 'scale(5)']])).toEqual({ + transform: [{ scale: 5 }], + }) +}) + +it('transforms translate(length, length) to translateX and translateY', () => { + expect(transformCss([['transform', 'translate(2px, 3px)']])).toEqual({ + transform: [{ translateY: 3 }, { translateX: 2 }], + }) +}) + +it('transforms translate(length) to translateX and translateY', () => { + expect(transformCss([['transform', 'translate(5px)']])).toEqual({ + transform: [{ translateY: 0 }, { translateX: 5 }], + }) +}) + +it('transforms skew(angle, angle) to skewX and skewY', () => { + expect(transformCss([['transform', 'skew(2deg, 3deg)']])).toEqual({ + transform: [{ skewY: '3deg' }, { skewX: '2deg' }], + }) +}) + +it('transforms skew(angle) to skewX and skewY', () => { + expect(transformCss([['transform', 'skew(5deg)']])).toEqual({ + transform: [{ skewY: '0deg' }, { skewX: '5deg' }], + }) +}) diff --git a/src/index.test.js b/src/index.test.js deleted file mode 100644 index 9d6303a..0000000 --- a/src/index.test.js +++ /dev/null @@ -1,650 +0,0 @@ -/* global it, expect */ -import transformCss, { getStylesForProperty } from '.' - -const runTest = (inputCss, expectedStyles) => { - const actualStyles = transformCss(inputCss) - expect(actualStyles).toEqual(expectedStyles) -} - -it('transforms numbers', () => - runTest([['top', '0'], ['left', '0'], ['right', '0'], ['bottom', '0']], { - top: 0, - left: 0, - right: 0, - bottom: 0, - })) - -it('allows pixels in unspecialized transform', () => - runTest([['top', '0px']], { top: 0 })) - -it('allows boolean values', () => - runTest( - [ - ['boolTrue1', 'true'], - ['boolTrue2', 'TRUE'], - ['boolFalse1', 'false'], - ['boolFalse2', 'FALSE'], - ], - { - boolTrue1: true, - boolTrue2: true, - boolFalse1: false, - boolFalse2: false, - } - )) - -it('allows null values', () => - runTest([['null1', 'null'], ['null2', 'NULL']], { - null1: null, - null2: null, - })) - -it('allows undefined values', () => - runTest([['undefined1', 'undefined'], ['undefined2', 'UNDEFINED']], { - undefined1: undefined, - undefined2: undefined, - })) - -it('allows percent in unspecialized transform', () => - runTest([['top', '0%']], { top: '0%' })) - -it('allows decimal values', () => { - expect(getStylesForProperty('margin', '0.5px').marginTop).toBe(0.5) - expect(getStylesForProperty('margin', '1.5px').marginTop).toBe(1.5) - expect(getStylesForProperty('margin', '10.5px').marginTop).toBe(10.5) - expect(getStylesForProperty('margin', '100.5px').marginTop).toBe(100.5) - expect(getStylesForProperty('margin', '-0.5px').marginTop).toBe(-0.5) - expect(getStylesForProperty('margin', '-1.5px').marginTop).toBe(-1.5) - expect(getStylesForProperty('margin', '-10.5px').marginTop).toBe(-10.5) - expect(getStylesForProperty('margin', '-100.5px').marginTop).toBe(-100.5) - expect(getStylesForProperty('margin', '.5px').marginTop).toBe(0.5) - expect(getStylesForProperty('margin', '-.5px').marginTop).toBe(-0.5) -}) - -it('allows decimal values in transformed values', () => - runTest([['border-radius', '1.5px']], { - borderTopLeftRadius: 1.5, - borderTopRightRadius: 1.5, - borderBottomRightRadius: 1.5, - borderBottomLeftRadius: 1.5, - })) - -it('allows negative values in transformed values', () => - runTest([['border-radius', '-1.5px']], { - borderTopLeftRadius: -1.5, - borderTopRightRadius: -1.5, - borderBottomRightRadius: -1.5, - borderBottomLeftRadius: -1.5, - })) - -it('allows percent values in transformed values', () => - runTest([['margin', '10%']], { - marginTop: '10%', - marginRight: '10%', - marginBottom: '10%', - marginLeft: '10%', - })) - -it('allows color values in transformed border-color values', () => - runTest([['border-color', 'red']], { - borderTopColor: 'red', - borderRightColor: 'red', - borderBottomColor: 'red', - borderLeftColor: 'red', - })) - -it('allows omitting units for 0', () => - runTest([['margin', '10px 0']], { - marginTop: 10, - marginRight: 0, - marginBottom: 10, - marginLeft: 0, - })) - -it('transforms strings', () => runTest([['color', 'red']], { color: 'red' })) - -it('transforms hex colors', () => - runTest([['color', '#f00']], { color: '#f00' })) - -it('transforms rgb colors', () => - runTest([['color', 'rgb(255, 0, 0)']], { color: 'rgb(255, 0, 0)' })) - -it('converts to camel-case', () => - runTest([['background-color', 'red']], { backgroundColor: 'red' })) - -it('transforms background to backgroundColor', () => - runTest([['background', '#f00']], { backgroundColor: '#f00' })) - -it('transforms background to backgroundColor with rgb', () => - runTest([['background', 'rgb(255, 0, 0)']], { - backgroundColor: 'rgb(255, 0, 0)', - })) - -it('transforms background to backgroundColor with named colour', () => - runTest([['background', 'red']], { backgroundColor: 'red' })) - -it('transforms font weights as strings', () => - runTest([['font-weight', ' 400']], { fontWeight: '400' })) - -it('transforms font variant as an array', () => - runTest([['font-variant', 'tabular-nums']], { - fontVariant: ['tabular-nums'], - })) - -it('transforms shadow offsets', () => - runTest([['shadow-offset', '10px 5px']], { - shadowOffset: { width: 10, height: 5 }, - })) - -it('transforms text shadow offsets', () => - runTest([['text-shadow-offset', '10px 5px']], { - textShadowOffset: { width: 10, height: 5 }, - })) - -it('transforms a single transform value with number', () => - runTest([['transform', 'scaleX(5)']], { transform: [{ scaleX: 5 }] })) - -it('transforms a single transform value with string', () => - runTest([['transform', 'rotate(5deg)']], { - transform: [{ rotate: '5deg' }], - })) - -it('transforms multiple transform values', () => - runTest([['transform', 'scaleX(5) skewX(1deg)']], { - transform: [{ skewX: '1deg' }, { scaleX: 5 }], - })) - -it('transforms scale(number, number) to scaleX and scaleY', () => - runTest([['transform', 'scale(2, 3)']], { - transform: [{ scaleY: 3 }, { scaleX: 2 }], - })) - -it('transforms scale(number) to scale', () => - runTest([['transform', 'scale(5)']], { transform: [{ scale: 5 }] })) - -it('transforms translate(length, length) to translateX and translateY', () => - runTest([['transform', 'translate(2px, 3px)']], { - transform: [{ translateY: 3 }, { translateX: 2 }], - })) - -it('transforms translate(length) to translateX and translateY', () => - runTest([['transform', 'translate(5px)']], { - transform: [{ translateY: 0 }, { translateX: 5 }], - })) - -it('transforms skew(angle, angle) to skewX and skewY', () => - runTest([['transform', 'skew(2deg, 3deg)']], { - transform: [{ skewY: '3deg' }, { skewX: '2deg' }], - })) - -it('transforms skew(angle) to skewX and skewY', () => - runTest([['transform', 'skew(5deg)']], { - transform: [{ skewY: '0deg' }, { skewX: '5deg' }], - })) - -it('transforms border shorthand', () => - runTest([['border', '2px dashed #f00']], { - borderWidth: 2, - borderColor: '#f00', - borderStyle: 'dashed', - })) - -it('transforms border shorthand in other order', () => - runTest([['border', '#f00 2px dashed']], { - borderWidth: 2, - borderColor: '#f00', - borderStyle: 'dashed', - })) - -it('transforms border shorthand missing color', () => - runTest([['border', '2px dashed']], { - borderWidth: 2, - borderColor: 'black', - borderStyle: 'dashed', - })) - -it('transforms border shorthand missing style', () => - runTest([['border', '2px #f00']], { - borderWidth: 2, - borderColor: '#f00', - borderStyle: 'solid', - })) - -it('transforms border shorthand missing width', () => - runTest([['border', '#f00 dashed']], { - borderWidth: 1, - borderColor: '#f00', - borderStyle: 'dashed', - })) - -it('transforms border shorthand missing color & width', () => - runTest([['border', 'dashed']], { - borderWidth: 1, - borderColor: 'black', - borderStyle: 'dashed', - })) - -it('transforms border shorthand missing style & width', () => - runTest([['border', '#f00']], { - borderWidth: 1, - borderColor: '#f00', - borderStyle: 'solid', - })) - -it('transforms border shorthand missing color & style', () => - runTest([['border', '2px']], { - borderWidth: 2, - borderColor: 'black', - borderStyle: 'solid', - })) - -it('transforms margin shorthands using 4 values', () => - runTest([['margin', '10px 20px 30px 40px']], { - marginTop: 10, - marginRight: 20, - marginBottom: 30, - marginLeft: 40, - })) - -it('transforms margin shorthands using 3 values', () => - runTest([['margin', '10px 20px 30px']], { - marginTop: 10, - marginRight: 20, - marginBottom: 30, - marginLeft: 20, - })) - -it('transforms margin shorthands using 2 values', () => - runTest([['margin', '10px 20px']], { - marginTop: 10, - marginRight: 20, - marginBottom: 10, - marginLeft: 20, - })) - -it('transforms margin shorthands using 1 value', () => - runTest([['margin', '10px']], { - marginTop: 10, - marginRight: 10, - marginBottom: 10, - marginLeft: 10, - })) - -it('shorthand with 1 value should override previous values', () => - runTest([['margin-top', '2px'], ['margin', '1px']], { - marginTop: 1, - marginRight: 1, - marginBottom: 1, - marginLeft: 1, - })) - -it('transforms flex shorthand with 3 values', () => - runTest([['flex', '1 2 3px']], { flexGrow: 1, flexShrink: 2, flexBasis: 3 })) - -it('transforms flex shorthand with 3 values in reverse order', () => - runTest([['flex', '3px 1 2']], { flexGrow: 1, flexShrink: 2, flexBasis: 3 })) - -it('transforms flex shorthand with 2 values of flex-grow and flex-shrink', () => - runTest([['flex', '1 2']], { flexGrow: 1, flexShrink: 2, flexBasis: 0 })) - -it('transforms flex shorthand with 2 values of flex-grow and flex-basis', () => - runTest([['flex', '2 2px']], { flexGrow: 2, flexShrink: 1, flexBasis: 2 })) - -it('transforms flex shorthand with 2 values of flex-grow and flex-basis (reversed)', () => - runTest([['flex', '2px 2']], { flexGrow: 2, flexShrink: 1, flexBasis: 2 })) - -it('transforms flex shorthand with 1 value of flex-grow', () => - runTest([['flex', '2']], { flexGrow: 2, flexShrink: 1, flexBasis: 0 })) - -it('transforms flex shorthand with 1 value of flex-basis', () => - runTest([['flex', '10px']], { flexGrow: 1, flexShrink: 1, flexBasis: 10 })) - -/* -A unitless zero that is not already preceded by two flex factors must be interpreted as a flex -factor. To avoid misinterpretation or invalid declarations, authors must specify a zero -<‘flex-basis’> component with a unit or precede it by two flex factors. -*/ -it('transforms flex shorthand with flex-grow/shrink taking priority over basis', () => - runTest([['flex', '0 1 0']], { flexGrow: 0, flexShrink: 1, flexBasis: 0 })) - -it('transforms flex shorthand with flex-basis set to auto', () => - runTest([['flex', '0 1 auto']], { flexGrow: 0, flexShrink: 1 })) - -it('transforms flex shorthand with flex-basis set to auto appearing first', () => - runTest([['flex', 'auto 0 1']], { flexGrow: 0, flexShrink: 1 })) - -it('transforms flex auto keyword', () => - runTest([['flex', 'auto']], { flexGrow: 1, flexShrink: 1 })) - -it('transforms flex none keyword', () => - runTest([['flex', 'none']], { flexGrow: 0, flexShrink: 0 })) - -it('transforms flexFlow shorthand with two values', () => - runTest([['flex-flow', 'column wrap']], { - flexDirection: 'column', - flexWrap: 'wrap', - })) - -it('transforms flexFlow shorthand missing flexDirection', () => - runTest([['flex-flow', 'wrap']], { flexDirection: 'row', flexWrap: 'wrap' })) - -it('transforms flexFlow shorthand missing flexWrap', () => - runTest([['flex-flow', 'column']], { - flexDirection: 'column', - flexWrap: 'nowrap', - })) - -it('transforms font', () => - runTest([['font', 'bold italic small-caps 16px/18px "Helvetica"']], { - fontFamily: 'Helvetica', - fontSize: 16, - fontWeight: 'bold', - fontStyle: 'italic', - fontVariant: ['small-caps'], - lineHeight: 18, - })) - -it('transforms font missing font-variant', () => - runTest([['font', 'bold italic 16px/18px "Helvetica"']], { - fontFamily: 'Helvetica', - fontSize: 16, - fontWeight: 'bold', - fontStyle: 'italic', - fontVariant: [], - lineHeight: 18, - })) - -it('transforms font missing font-style', () => - runTest([['font', 'bold small-caps 16px/18px "Helvetica"']], { - fontFamily: 'Helvetica', - fontSize: 16, - fontWeight: 'bold', - fontStyle: 'normal', - fontVariant: ['small-caps'], - lineHeight: 18, - })) - -it('transforms font missing font-weight', () => - runTest([['font', 'italic small-caps 16px/18px "Helvetica"']], { - fontFamily: 'Helvetica', - fontSize: 16, - fontWeight: 'normal', - fontStyle: 'italic', - fontVariant: ['small-caps'], - lineHeight: 18, - })) - -it('transforms font with font-weight normal', () => - runTest([['font', 'normal 16px/18px "Helvetica"']], { - fontFamily: 'Helvetica', - fontSize: 16, - fontWeight: 'normal', - fontStyle: 'normal', - fontVariant: [], - lineHeight: 18, - })) - -it('transforms font with font-weight and font-style normal', () => - runTest([['font', 'normal normal 16px/18px "Helvetica"']], { - fontFamily: 'Helvetica', - fontSize: 16, - fontWeight: 'normal', - fontStyle: 'normal', - fontVariant: [], - lineHeight: 18, - })) - -it('transforms font with no font-weight, font-style, and font-variant', () => - runTest([['font', '16px/18px "Helvetica"']], { - fontFamily: 'Helvetica', - fontSize: 16, - fontWeight: 'normal', - fontStyle: 'normal', - fontVariant: [], - lineHeight: 18, - })) - -it('omits line height if not specified', () => - runTest([['font', '16px "Helvetica"']], { - fontFamily: 'Helvetica', - fontSize: 16, - fontWeight: 'normal', - fontStyle: 'normal', - fontVariant: [], - })) - -it('allows line height as multiple', () => - runTest([['font', '16px/1.5 "Helvetica"']], { - fontFamily: 'Helvetica', - fontSize: 16, - fontWeight: 'normal', - fontStyle: 'normal', - fontVariant: [], - lineHeight: 24, - })) - -it('transforms font without quotes', () => - runTest([['font', 'bold italic small-caps 16px/18px Helvetica Neue']], { - fontFamily: 'Helvetica Neue', - fontSize: 16, - fontWeight: 'bold', - fontStyle: 'italic', - fontVariant: ['small-caps'], - lineHeight: 18, - })) - -it('transforms font-family with double quotes', () => - runTest([['font-family', '"Helvetica Neue"']], { - fontFamily: 'Helvetica Neue', - })) - -it('transforms font-family with single quotes', () => - runTest([['font-family', "'Helvetica Neue'"]], { - fontFamily: 'Helvetica Neue', - })) - -it('transforms font-family without quotes', () => - runTest([['font-family', 'Helvetica Neue']], { - fontFamily: 'Helvetica Neue', - })) - -it('transforms font-family with quotes with otherwise invalid values', () => - runTest([['font-family', '"Goudy Bookletter 1911"']], { - fontFamily: 'Goudy Bookletter 1911', - })) - -it('transforms font-family with quotes with escaped values', () => - runTest([['font-family', '"test\\A test"']], { - fontFamily: 'test\ntest', - })) - -it('transforms font-family with quotes with escaped quote', () => - runTest([['font-family', '"test\\"test"']], { - fontFamily: 'test"test', - })) - -it('does not transform invalid unquoted font-family', () => { - expect(() => - transformCss([['font-family', 'Goudy Bookletter 1911']]) - ).toThrow() -}) - -it('does not transform invalid flex', () => { - expect(() => transformCss([['flex', '1 2px 3']])).toThrow() -}) - -it('transforms box-shadow into shadow- properties', () => - runTest([['box-shadow', '10px 20px 30px red']], { - shadowOffset: { width: 10, height: 20 }, - shadowRadius: 30, - shadowColor: 'red', - shadowOpacity: 1, - })) - -it('transforms box-shadow without blur-radius', () => - runTest([['box-shadow', '10px 20px red']], { - shadowOffset: { width: 10, height: 20 }, - shadowRadius: 0, - shadowColor: 'red', - shadowOpacity: 1, - })) - -it('transforms box-shadow without color', () => - runTest([['box-shadow', '10px 20px']], { - shadowOffset: { width: 10, height: 20 }, - shadowRadius: 0, - shadowColor: 'black', - shadowOpacity: 1, - })) - -it('transforms box-shadow with rgb color', () => - runTest([['box-shadow', '10px 20px rgb(100, 100, 100)']], { - shadowOffset: { width: 10, height: 20 }, - shadowRadius: 0, - shadowColor: 'rgb(100, 100, 100)', - shadowOpacity: 1, - })) - -it('transforms box-shadow with rgba color', () => - runTest([['box-shadow', '10px 20px rgba(100, 100, 100, 0.5)']], { - shadowOffset: { width: 10, height: 20 }, - shadowRadius: 0, - shadowColor: 'rgba(100, 100, 100, 0.5)', - shadowOpacity: 1, - })) - -it('transforms box-shadow with hsl color', () => - runTest([['box-shadow', '10px 20px hsl(120, 100%, 50%)']], { - shadowOffset: { width: 10, height: 20 }, - shadowRadius: 0, - shadowColor: 'hsl(120, 100%, 50%)', - shadowOpacity: 1, - })) - -it('transforms box-shadow with hsla color', () => - runTest([['box-shadow', '10px 20px hsla(120, 100%, 50%, 0.7)']], { - shadowOffset: { width: 10, height: 20 }, - shadowRadius: 0, - shadowColor: 'hsla(120, 100%, 50%, 0.7)', - shadowOpacity: 1, - })) - -it('transforms box-shadow and throws if multiple colors are used', () => { - expect(() => - transformCss([['box-shadow', '0 0 0 red yellow green blue']]) - ).toThrow() -}) - -it('transforms box-shadow enforces offset to be present', () => { - expect(() => transformCss([['box-shadow', 'red']])).toThrow() - expect(() => transformCss([['box-shadow', '10px red']])).toThrow() -}) - -it('transforms text-decoration into text-decoration- properties', () => - runTest([['text-decoration', 'underline dotted red']], { - textDecorationLine: 'underline', - textDecorationStyle: 'dotted', - textDecorationColor: 'red', - })) - -it('transforms text-decoration without color', () => - runTest([['text-decoration', 'underline dotted']], { - textDecorationLine: 'underline', - textDecorationStyle: 'dotted', - textDecorationColor: 'black', - })) - -it('transforms text-decoration without style', () => - runTest([['text-decoration', 'underline red']], { - textDecorationLine: 'underline', - textDecorationStyle: 'solid', - textDecorationColor: 'red', - })) - -it('transforms text-decoration without style and color', () => - runTest([['text-decoration', 'underline']], { - textDecorationLine: 'underline', - textDecorationStyle: 'solid', - textDecorationColor: 'black', - })) - -it('transforms text-decoration with two line properties', () => - runTest([['text-decoration', 'underline line-through dashed red']], { - textDecorationLine: 'underline line-through', - textDecorationStyle: 'dashed', - textDecorationColor: 'red', - })) - -it('transforms text-decoration in different order', () => - runTest([['text-decoration', 'dashed red underline line-through']], { - textDecorationLine: 'underline line-through', - textDecorationStyle: 'dashed', - textDecorationColor: 'red', - })) - -it('transforms text-decoration with ine in different order', () => - runTest([['text-decoration', 'line-through underline']], { - textDecorationLine: 'underline line-through', - textDecorationStyle: 'solid', - textDecorationColor: 'black', - })) - -it('transforms text-decoration with none', () => - runTest([['text-decoration', 'none']], { - textDecorationLine: 'none', - textDecorationStyle: 'solid', - textDecorationColor: 'black', - })) - -it('transforms text-decoration with none as part of multiple terms', () => - runTest([['text-decoration', 'yellow none']], { - textDecorationLine: 'none', - textDecorationStyle: 'solid', - textDecorationColor: 'yellow', - })) - -it('transforms text-decoration with none in capitals', () => - runTest([['text-decoration', 'yellow NONE']], { - textDecorationLine: 'none', - textDecorationStyle: 'solid', - textDecorationColor: 'yellow', - })) - -it('transforms text-decoration with style in capitals', () => - runTest([['text-decoration', 'yellow UNDERLINE LINE-THROUGH']], { - textDecorationLine: 'underline line-through', - textDecorationStyle: 'solid', - textDecorationColor: 'yellow', - })) - -it('does not transform text-decoration if multiple colors are used', () => { - expect(() => - transformCss([['text-decoration', 'underline red yellow']]) - ).toThrow() -}) - -it('transforms text-decoration-line with underline line-through', () => - runTest([['text-decoration-line', 'underline line-through']], { - textDecorationLine: 'underline line-through', - })) - -it('transforms text-decoration-line with line-through underline', () => - runTest([['text-decoration-line', 'line-through underline']], { - textDecorationLine: 'underline line-through', - })) - -it('transforms text-decoration-line with none', () => - runTest([['text-decoration-line', 'none']], { - textDecorationLine: 'none', - })) - -it('allows blacklisting shorthands', () => { - const actualStyles = transformCss([['border-radius', '50']], ['borderRadius']) - expect(actualStyles).toEqual({ borderRadius: 50 }) -}) - -it('throws useful errors', () => { - expect(() => transformCss([['margin', '10']])).toThrow( - 'Failed to parse declaration "margin: 10"' - ) -}) diff --git a/src/transforms/index.js b/src/transforms/index.js index 1cd4c8f..575856e 100644 --- a/src/transforms/index.js +++ b/src/transforms/index.js @@ -38,7 +38,7 @@ const borderColor = directionFactory({ suffix: 'Color', }) const borderRadius = directionFactory({ - directions: ['TopRight', 'BottomRight', 'BottomLeft', 'TopLeft'], + directions: ['TopLeft', 'TopRight', 'BottomRight', 'BottomLeft'], prefix: 'border', suffix: 'Radius', }) From 346cd3bd917ef642ed8d132d559e4b16342b29b7 Mon Sep 17 00:00:00 2001 From: Jacob Parker Date: Fri, 9 Feb 2018 22:24:34 +0000 Subject: [PATCH 27/83] Remove duplicate test, fix duplicate test --- src/transforms/__tests__/textShadow.js | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/src/transforms/__tests__/textShadow.js b/src/transforms/__tests__/textShadow.js index 6d9236c..90637b2 100644 --- a/src/transforms/__tests__/textShadow.js +++ b/src/transforms/__tests__/textShadow.js @@ -17,21 +17,13 @@ it('textShadow omitting blur', () => { }) it('textShadow omitting color', () => { - expect(transformCss([['text-shadow', '10px 20px black']])).toEqual({ + expect(transformCss([['text-shadow', '10px 20px']])).toEqual({ textShadowOffset: { width: 10, height: 20 }, textShadowRadius: 0, textShadowColor: 'black', }) }) -it('textShadow omitting blur, offset-y', () => { - expect(transformCss([['text-shadow', '10px 20px red']])).toEqual({ - textShadowOffset: { width: 10, height: 20 }, - textShadowRadius: 0, - textShadowColor: 'red', - }) -}) - it('textShadow enforces offset-x and offset-y', () => { expect(() => transformCss([['text-shadow', 'red']])).toThrow() expect(() => transformCss([['text-shadow', '10px red']])).toThrow() From f93964da8711527f294dbadf903bbca8c5063ebc Mon Sep 17 00:00:00 2001 From: Jacob Parker Date: Sat, 10 Feb 2018 12:10:22 +0000 Subject: [PATCH 28/83] Convert to ES6 import/export syntax --- src/TokenStream.js | 2 +- src/index.js | 8 ++++---- src/tokenTypes.js | 10 ++++------ src/transforms/boxShadow.js | 4 ++-- src/transforms/flex.js | 4 ++-- src/transforms/font.js | 6 +++--- src/transforms/fontFamily.js | 4 ++-- src/transforms/index.js | 26 +++++++++++--------------- src/transforms/textDecoration.js | 2 +- src/transforms/textDecorationLine.js | 4 ++-- src/transforms/textShadow.js | 4 ++-- src/transforms/transform.js | 4 ++-- src/transforms/util.js | 10 +++++----- 13 files changed, 41 insertions(+), 47 deletions(-) diff --git a/src/TokenStream.js b/src/TokenStream.js index 4dd8a48..721eb87 100644 --- a/src/TokenStream.js +++ b/src/TokenStream.js @@ -1,6 +1,6 @@ const SYMBOL_MATCH = 'SYMBOL_MATCH' -module.exports = class TokenStream { +export default class TokenStream { constructor(nodes, parent) { this.index = 0 this.nodes = nodes diff --git a/src/index.js b/src/index.js index 5ade741..f7777aa 100644 --- a/src/index.js +++ b/src/index.js @@ -1,8 +1,8 @@ /* eslint-disable no-param-reassign */ -const parse = require('postcss-value-parser') -const camelizeStyleName = require('fbjs/lib/camelizeStyleName') -const transforms = require('./transforms') -const TokenStream = require('./TokenStream') +import parse from 'postcss-value-parser' +import camelizeStyleName from 'fbjs/lib/camelizeStyleName' +import transforms from './transforms' +import TokenStream from './TokenStream' // Note if this is wrong, you'll need to change tokenTypes.js too const numberOrLengthRe = /^([+-]?(?:\d*\.)?\d+(?:[Ee][+-]?\d+)?)(?:px)?$/i diff --git a/src/tokenTypes.js b/src/tokenTypes.js index 5865d1d..01bcebc 100644 --- a/src/tokenTypes.js +++ b/src/tokenTypes.js @@ -1,5 +1,5 @@ -const { stringify } = require('postcss-value-parser') -const cssColorKeywords = require('css-color-keywords') +import { stringify } from 'postcss-value-parser' +import cssColorKeywords from 'css-color-keywords' const matchString = node => { if (node.type !== 'string') return null @@ -40,7 +40,7 @@ const noopToken = predicate => node => (predicate(node) ? '' : null) const valueForTypeToken = type => node => node.type === type ? node.value : null -const regExpToken = (regExp, transform = String) => node => { +export const regExpToken = (regExp, transform = String) => node => { if (node.type !== 'word') return null const match = node.value.match(regExp) @@ -51,9 +51,7 @@ const regExpToken = (regExp, transform = String) => node => { return value } -module.exports.regExpToken = regExpToken - -module.exports.tokens = { +export const tokens = { SPACE: noopToken(node => node.type === 'space'), SLASH: noopToken(node => node.type === 'div' && node.value === '/'), COMMA: noopToken(node => node.type === 'div' && node.value === ','), diff --git a/src/transforms/boxShadow.js b/src/transforms/boxShadow.js index 24bae34..f100a3f 100644 --- a/src/transforms/boxShadow.js +++ b/src/transforms/boxShadow.js @@ -1,6 +1,6 @@ -const { parseShadow } = require('./util') +import { parseShadow } from './util' -module.exports = tokenStream => { +export default tokenStream => { const { offset, radius, color } = parseShadow(tokenStream) return { $merge: { diff --git a/src/transforms/flex.js b/src/transforms/flex.js index 44314b3..7aaad9c 100644 --- a/src/transforms/flex.js +++ b/src/transforms/flex.js @@ -1,4 +1,4 @@ -const { tokens } = require('../tokenTypes') +import { tokens } from '../tokenTypes' const { NONE, AUTO, NUMBER, LENGTH, SPACE } = tokens @@ -8,7 +8,7 @@ const defaultFlexBasis = 0 const FLEX_BASIS_AUTO = {} // Used for reference equality -module.exports = tokenStream => { +export default tokenStream => { let flexGrow let flexShrink let flexBasis diff --git a/src/transforms/font.js b/src/transforms/font.js index 2d44b23..270e762 100644 --- a/src/transforms/font.js +++ b/src/transforms/font.js @@ -1,5 +1,5 @@ -const parseFontFamily = require('./fontFamily') -const { regExpToken, tokens } = require('../tokenTypes') +import parseFontFamily from './fontFamily' +import { regExpToken, tokens } from '../tokenTypes' const { SPACE, LENGTH, NUMBER, SLASH } = tokens const NORMAL = regExpToken(/^(normal)$/) @@ -11,7 +11,7 @@ const defaultFontStyle = 'normal' const defaultFontWeight = 'normal' const defaultFontVariant = [] -module.exports = tokenStream => { +export default tokenStream => { let fontStyle let fontWeight let fontVariant diff --git a/src/transforms/fontFamily.js b/src/transforms/fontFamily.js index f363b38..240f271 100644 --- a/src/transforms/fontFamily.js +++ b/src/transforms/fontFamily.js @@ -1,8 +1,8 @@ -const { tokens } = require('../tokenTypes') +import { tokens } from '../tokenTypes' const { SPACE, IDENT, STRING } = tokens -module.exports = tokenStream => { +export default tokenStream => { let fontFamily if (tokenStream.matches(STRING)) { diff --git a/src/transforms/index.js b/src/transforms/index.js index 575856e..d0b060b 100644 --- a/src/transforms/index.js +++ b/src/transforms/index.js @@ -1,17 +1,13 @@ -const { regExpToken, tokens } = require('../tokenTypes') -const boxShadow = require('./boxShadow') -const flex = require('./flex') -const font = require('./font') -const fontFamily = require('./fontFamily') -const textShadow = require('./textShadow') -const textDecoration = require('./textDecoration') -const textDecorationLine = require('./textDecorationLine') -const transform = require('./transform') -const { - directionFactory, - anyOrderFactory, - shadowOffsetFactory, -} = require('./util') +import { regExpToken, tokens } from '../tokenTypes' +import boxShadow from './boxShadow' +import flex from './flex' +import font from './font' +import fontFamily from './fontFamily' +import textShadow from './textShadow' +import textDecoration from './textDecoration' +import textDecorationLine from './textDecorationLine' +import transform from './transform' +import { directionFactory, anyOrderFactory, shadowOffsetFactory } from './util' const { IDENT, WORD, COLOR } = tokens @@ -60,7 +56,7 @@ const fontWeight = tokenStream => tokenStream.expect(WORD) // Also match numbers const shadowOffset = shadowOffsetFactory() const textShadowOffset = shadowOffsetFactory() -module.exports = { +export default { background, border, borderColor, diff --git a/src/transforms/textDecoration.js b/src/transforms/textDecoration.js index 6e2dedf..d287d93 100644 --- a/src/transforms/textDecoration.js +++ b/src/transforms/textDecoration.js @@ -8,7 +8,7 @@ const defaultTextDecorationLine = 'none' const defaultTextDecorationStyle = 'solid' const defaultTextDecorationColor = 'black' -module.exports = tokenStream => { +export default tokenStream => { let line let style let color diff --git a/src/transforms/textDecorationLine.js b/src/transforms/textDecorationLine.js index 0d326ba..1260175 100644 --- a/src/transforms/textDecorationLine.js +++ b/src/transforms/textDecorationLine.js @@ -1,8 +1,8 @@ -const { tokens } = require('../tokenTypes') +import { tokens } from '../tokenTypes' const { SPACE, LINE } = tokens -module.exports = tokenStream => { +export default tokenStream => { const lines = [] let didParseFirst = false diff --git a/src/transforms/textShadow.js b/src/transforms/textShadow.js index 3a87fdd..5a1fc50 100644 --- a/src/transforms/textShadow.js +++ b/src/transforms/textShadow.js @@ -1,6 +1,6 @@ -const { parseShadow } = require('./util') +import { parseShadow } from './util' -module.exports = tokenStream => { +export default tokenStream => { const { offset, radius, color } = parseShadow(tokenStream) return { $merge: { diff --git a/src/transforms/transform.js b/src/transforms/transform.js index ecbb710..0d1d061 100644 --- a/src/transforms/transform.js +++ b/src/transforms/transform.js @@ -1,4 +1,4 @@ -const { tokens } = require('../tokenTypes') +import { tokens } from '../tokenTypes' const { SPACE, COMMA, LENGTH, NUMBER, ANGLE } = tokens @@ -54,7 +54,7 @@ const partTransforms = { skew: xyAngle('skew', '0deg'), } -module.exports = tokenStream => { +export default tokenStream => { let transforms = [] let didParseFirst = false diff --git a/src/transforms/util.js b/src/transforms/util.js index 7e05e1d..67c6d39 100644 --- a/src/transforms/util.js +++ b/src/transforms/util.js @@ -1,8 +1,8 @@ -const { tokens } = require('../tokenTypes') +import { tokens } from '../tokenTypes' const { LENGTH, PERCENT, COLOR, SPACE, NONE } = tokens -module.exports.directionFactory = ({ +export const directionFactory = ({ types = [LENGTH, PERCENT], directions = ['Top', 'Right', 'Bottom', 'Left'], prefix = '', @@ -34,7 +34,7 @@ module.exports.directionFactory = ({ return { $merge: output } } -module.exports.anyOrderFactory = (properties, delim = SPACE) => tokenStream => { +export const anyOrderFactory = (properties, delim = SPACE) => tokenStream => { const propertyNames = Object.keys(properties) const values = propertyNames.reduce((accum, propertyName) => { accum[propertyName] === undefined // eslint-disable-line @@ -70,14 +70,14 @@ module.exports.anyOrderFactory = (properties, delim = SPACE) => tokenStream => { return { $merge: values } } -module.exports.shadowOffsetFactory = () => tokenStream => { +export const shadowOffsetFactory = () => tokenStream => { const width = tokenStream.expect(LENGTH) const height = tokenStream.matches(SPACE) ? tokenStream.expect(LENGTH) : width tokenStream.expectEmpty() return { width, height } } -module.exports.parseShadow = tokenStream => { +export const parseShadow = tokenStream => { let offsetX let offsetY let radius From cb673a98317c0b7393cc61606c70967e3f06d141 Mon Sep 17 00:00:00 2001 From: Jacob Parker Date: Sat, 10 Feb 2018 12:18:17 +0000 Subject: [PATCH 29/83] Bundle with rollup --- .gitignore | 2 +- package.json | 9 +++++---- src/index.js | 2 +- yarn.lock | 4 ++++ 4 files changed, 11 insertions(+), 6 deletions(-) diff --git a/.gitignore b/.gitignore index 8225baa..b8df26b 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,2 @@ /node_modules -/dist +/index.js diff --git a/package.json b/package.json index d861704..bdf3a29 100644 --- a/package.json +++ b/package.json @@ -2,9 +2,9 @@ "name": "css-to-react-native", "version": "2.1.1", "description": "Convert CSS text to a React Native stylesheet object", - "main": "dist/index.js", + "main": "index.js", "scripts": { - "build": "babel src --ignore test.js --out-dir dist", + "build": "rollup ./src/index.js -o index.js --f cjs && babel index.js -o index.js", "test": "jest", "test:watch": "jest --watch", "lint": "eslint src", @@ -13,7 +13,7 @@ "lint-staged": "lint-staged" }, "files": [ - "dist", + "index.js", "src" ], "repository": { @@ -43,7 +43,8 @@ "eslint-plugin-prettier": "^2.6.0", "jest": "^22.2.2", "lint-staged": "^6.1.0", - "prettier": "^1.10.2" + "prettier": "^1.10.2", + "rollup": "^0.55.5" }, "dependencies": { "css-color-keywords": "^1.0.0", diff --git a/src/index.js b/src/index.js index f7777aa..2b678f6 100644 --- a/src/index.js +++ b/src/index.js @@ -1,7 +1,7 @@ /* eslint-disable no-param-reassign */ import parse from 'postcss-value-parser' import camelizeStyleName from 'fbjs/lib/camelizeStyleName' -import transforms from './transforms' +import transforms from './transforms/index' import TokenStream from './TokenStream' // Note if this is wrong, you'll need to change tokenTypes.js too diff --git a/yarn.lock b/yarn.lock index 6fbd000..a1bf3cf 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3809,6 +3809,10 @@ rimraf@^2.5.1, rimraf@^2.5.4, rimraf@^2.6.1: dependencies: glob "^7.0.5" +rollup@^0.55.5: + version "0.55.5" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-0.55.5.tgz#2f88c300f7cf24b5ec2dca8a6aba73b04e087e93" + run-async@^2.2.0: version "2.3.0" resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.3.0.tgz#0371ab4ae0bdd720d4166d7dfda64ff7a445a6c0" From c1e896669810a152d83eb05a42f34ae469ecf63c Mon Sep 17 00:00:00 2001 From: krister Date: Sun, 18 Feb 2018 01:42:12 +0200 Subject: [PATCH 30/83] Support using "auto" when using margin shorthand --- src/__tests__/boxModel.js | 33 +++++++++++++++++++++++++++++++++ src/transforms/index.js | 7 +++++-- 2 files changed, 38 insertions(+), 2 deletions(-) diff --git a/src/__tests__/boxModel.js b/src/__tests__/boxModel.js index 10b9f2c..6f403bb 100644 --- a/src/__tests__/boxModel.js +++ b/src/__tests__/boxModel.js @@ -84,6 +84,39 @@ it('transforms shorthand and overrides previous values', () => { }) }) +it('transforms margin shorthand with auto', () => { + expect(transformCss([['margin', 'auto']])).toEqual({ + marginTop: 'auto', + marginRight: 'auto', + marginBottom: 'auto', + marginLeft: 'auto', + }) + expect(transformCss([['margin', '0 auto']])).toEqual({ + marginTop: 0, + marginRight: 'auto', + marginBottom: 0, + marginLeft: 'auto', + }) + expect(transformCss([['margin', 'auto 0']])).toEqual({ + marginTop: 'auto', + marginRight: 0, + marginBottom: 'auto', + marginLeft: 0, + }) + expect(transformCss([['margin', '2px 3px auto']])).toEqual({ + marginTop: 2, + marginRight: 3, + marginBottom: 'auto', + marginLeft: 3, + }) + expect(transformCss([['margin', '10px auto 4px']])).toEqual({ + marginTop: 10, + marginRight: 'auto', + marginBottom: 4, + marginLeft: 'auto', + }) +}) + it('transforms border width', () => { expect(transformCss([['border-width', '1px 2px 3px 4px']])).toEqual({ borderTopWidth: 1, diff --git a/src/transforms/index.js b/src/transforms/index.js index d0b060b..d138d3b 100644 --- a/src/transforms/index.js +++ b/src/transforms/index.js @@ -9,7 +9,7 @@ import textDecorationLine from './textDecorationLine' import transform from './transform' import { directionFactory, anyOrderFactory, shadowOffsetFactory } from './util' -const { IDENT, WORD, COLOR } = tokens +const { IDENT, WORD, COLOR, LENGTH, PERCENT, AUTO } = tokens const background = tokenStream => ({ $merge: { backgroundColor: tokenStream.expect(COLOR) }, @@ -39,7 +39,10 @@ const borderRadius = directionFactory({ suffix: 'Radius', }) const borderWidth = directionFactory({ prefix: 'border', suffix: 'Width' }) -const margin = directionFactory({ prefix: 'margin' }) +const margin = directionFactory({ + types: [LENGTH, PERCENT, AUTO], + prefix: 'margin', +}) const padding = directionFactory({ prefix: 'padding' }) const flexFlow = anyOrderFactory({ flexWrap: { From b4150483d12c83bd5146ee90cba6e0caf5db2c04 Mon Sep 17 00:00:00 2001 From: Jacob Parker Date: Sun, 18 Feb 2018 12:40:37 +0000 Subject: [PATCH 31/83] Prepare for new version --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index bdf3a29..86000be 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "css-to-react-native", - "version": "2.1.1", + "version": "2.1.2", "description": "Convert CSS text to a React Native stylesheet object", "main": "index.js", "scripts": { From ce64163e704db30e7c45088c3a76542f891f2e61 Mon Sep 17 00:00:00 2001 From: krister Date: Tue, 1 May 2018 15:21:12 +0300 Subject: [PATCH 32/83] Allow unsupported length units to be used --- src/__tests__/units.js | 132 ++++++++++++++++++++++++++++++++++++++++ src/tokenTypes.js | 2 + src/transforms/font.js | 6 +- src/transforms/index.js | 22 ++++--- src/transforms/util.js | 20 ++++-- 5 files changed, 166 insertions(+), 16 deletions(-) create mode 100644 src/__tests__/units.js diff --git a/src/__tests__/units.js b/src/__tests__/units.js new file mode 100644 index 0000000..d1a13f8 --- /dev/null +++ b/src/__tests__/units.js @@ -0,0 +1,132 @@ +import transformCss from '..' + +// List of units from: +// https://developer.mozilla.org/en-US/docs/Web/CSS/length +const lengthUnits = [ + 'ch', + 'em', + 'ex', + 'rem', + 'vh', + 'vw', + 'vmin', + 'vmax', + 'cm', + 'mm', + 'in', + 'pc', + 'pt', +] + +lengthUnits.forEach(unit => { + const value = `2${unit}` + + it('allows CSS length units in transformed values', () => { + expect(transformCss([['margin', value]])).toEqual({ + marginTop: value, + marginRight: value, + marginBottom: value, + marginLeft: value, + }) + expect(transformCss([['padding', value]])).toEqual({ + paddingTop: value, + paddingRight: value, + paddingBottom: value, + paddingLeft: value, + }) + }) + + it('allows CSS length units with 0 and unit', () => { + expect(transformCss([['padding', `0${unit}`]])).toEqual({ + paddingTop: `0${unit}`, + paddingRight: `0${unit}`, + paddingBottom: `0${unit}`, + paddingLeft: `0${unit}`, + }) + }) + + it('allows mixed units in transformed values', () => { + expect(transformCss([['margin', `10px ${value}`]])).toEqual({ + marginTop: 10, + marginRight: value, + marginBottom: 10, + marginLeft: value, + }) + }) + + it('allows units to be used with border shorthand property', () => { + expect(transformCss([['border', `#f00 ${value} dashed`]])).toEqual({ + borderWidth: value, + borderColor: '#f00', + borderStyle: 'dashed', + }) + + expect(transformCss([['border', value]])).toEqual({ + borderWidth: value, + borderColor: 'black', + borderStyle: 'solid', + }) + }) + + it('allows units to be used with border-width', () => { + expect(transformCss([['border-width', `1px 2px ${value} 4px`]])).toEqual({ + borderTopWidth: 1, + borderRightWidth: 2, + borderBottomWidth: value, + borderLeftWidth: 4, + }) + }) + + it('allows units to be used with border-radius', () => { + expect(transformCss([['border-radius', `1px ${value} 3px 4px`]])).toEqual({ + borderTopLeftRadius: 1, + borderTopRightRadius: value, + borderBottomRightRadius: 3, + borderBottomLeftRadius: 4, + }) + }) + + it('allows units to be used with font-size', () => { + expect(transformCss([['font-size', value]])).toEqual({ + fontSize: value, + }) + }) + + it('allows units to be used with font shorthand property', () => { + expect( + transformCss([['font', `bold italic ${value}/${value} "Helvetica"`]]) + ).toEqual({ + fontFamily: 'Helvetica', + fontSize: value, + fontWeight: 'bold', + fontStyle: 'italic', + fontVariant: [], + lineHeight: value, + }) + }) + + it('allows untis to be used with text-shadow ', () => { + expect(transformCss([['text-shadow', `10px ${value} red`]])).toEqual({ + textShadowOffset: { width: 10, height: value }, + textShadowRadius: 0, + textShadowColor: 'red', + }) + }) + + it('allows untis to be used with box-shadow', () => { + expect( + transformCss([['box-shadow', `10px ${value} ${value} red`]]) + ).toEqual({ + shadowOffset: { width: 10, height: value }, + shadowRadius: value, + shadowColor: 'red', + shadowOpacity: 1, + }) + }) +}) + +it('throws for unit that is not supported', () => { + expect(() => transformCss([['margin', '10ic']])).toThrow( + 'Failed to parse declaration "margin: 10ic"' + ) +}) diff --git a/src/tokenTypes.js b/src/tokenTypes.js index 01bcebc..adf1c87 100644 --- a/src/tokenTypes.js +++ b/src/tokenTypes.js @@ -32,6 +32,7 @@ const identRe = /(^-?[_a-z][_a-z0-9-]*$)/i const numberRe = /^([+-]?(?:\d*\.)?\d+(?:[Ee][+-]?\d+)?)$/ // Note lengthRe is sneaky: you can omit units for 0 const lengthRe = /^(0$|(?:[+-]?(?:\d*\.)?\d+(?:[Ee][+-]?\d+)?)(?=px$))/ +const unsupportedUnitRe = /^([+-]?(?:\d*\.)?\d+(?:[Ee][+-]?\d+)?(ch|em|ex|rem|vh|vw|vmin|vmax|cm|mm|in|pc|pt))$/ const angleRe = /^([+-]?(?:\d*\.)?\d+(?:[Ee][+-]?\d+)?(?:deg|rad))$/ const percentRe = /^([+-]?(?:\d*\.)?\d+(?:[Ee][+-]?\d+)?%)$/ @@ -60,6 +61,7 @@ export const tokens = { AUTO: regExpToken(autoRe), NUMBER: regExpToken(numberRe, Number), LENGTH: regExpToken(lengthRe, Number), + UNSUPPORTED_LENGTH_UNIT: regExpToken(unsupportedUnitRe), ANGLE: regExpToken(angleRe), PERCENT: regExpToken(percentRe), IDENT: regExpToken(identRe), diff --git a/src/transforms/font.js b/src/transforms/font.js index 270e762..92b2229 100644 --- a/src/transforms/font.js +++ b/src/transforms/font.js @@ -1,7 +1,7 @@ import parseFontFamily from './fontFamily' import { regExpToken, tokens } from '../tokenTypes' -const { SPACE, LENGTH, NUMBER, SLASH } = tokens +const { SPACE, LENGTH, UNSUPPORTED_LENGTH_UNIT, NUMBER, SLASH } = tokens const NORMAL = regExpToken(/^(normal)$/) const STYLE = regExpToken(/^(italic)$/) const WEIGHT = regExpToken(/^([1-9]00|bold)$/) @@ -37,13 +37,13 @@ export default tokenStream => { numStyleWeightVariantMatched += 1 } - const fontSize = tokenStream.expect(LENGTH) + const fontSize = tokenStream.expect(LENGTH, UNSUPPORTED_LENGTH_UNIT) if (tokenStream.matches(SLASH)) { if (tokenStream.matches(NUMBER)) { lineHeight = fontSize * tokenStream.lastValue } else { - lineHeight = tokenStream.expect(LENGTH) + lineHeight = tokenStream.expect(LENGTH, UNSUPPORTED_LENGTH_UNIT) } } diff --git a/src/transforms/index.js b/src/transforms/index.js index d138d3b..0431b2f 100644 --- a/src/transforms/index.js +++ b/src/transforms/index.js @@ -9,22 +9,30 @@ import textDecorationLine from './textDecorationLine' import transform from './transform' import { directionFactory, anyOrderFactory, shadowOffsetFactory } from './util' -const { IDENT, WORD, COLOR, LENGTH, PERCENT, AUTO } = tokens +const { + IDENT, + WORD, + COLOR, + LENGTH, + UNSUPPORTED_LENGTH_UNIT, + PERCENT, + AUTO, +} = tokens const background = tokenStream => ({ $merge: { backgroundColor: tokenStream.expect(COLOR) }, }) const border = anyOrderFactory({ borderWidth: { - token: tokens.LENGTH, + tokens: [LENGTH, UNSUPPORTED_LENGTH_UNIT], default: 1, }, borderColor: { - token: COLOR, + tokens: [COLOR], default: 'black', }, borderStyle: { - token: regExpToken(/^(solid|dashed|dotted)$/), + tokens: [regExpToken(/^(solid|dashed|dotted)$/)], default: 'solid', }, }) @@ -40,17 +48,17 @@ const borderRadius = directionFactory({ }) const borderWidth = directionFactory({ prefix: 'border', suffix: 'Width' }) const margin = directionFactory({ - types: [LENGTH, PERCENT, AUTO], + types: [LENGTH, UNSUPPORTED_LENGTH_UNIT, PERCENT, AUTO], prefix: 'margin', }) const padding = directionFactory({ prefix: 'padding' }) const flexFlow = anyOrderFactory({ flexWrap: { - token: regExpToken(/(nowrap|wrap|wrap-reverse)/), + tokens: [regExpToken(/(nowrap|wrap|wrap-reverse)/)], default: 'nowrap', }, flexDirection: { - token: regExpToken(/(row|row-reverse|column|column-reverse)/), + tokens: [regExpToken(/(row|row-reverse|column|column-reverse)/)], default: 'row', }, }) diff --git a/src/transforms/util.js b/src/transforms/util.js index 67c6d39..a3a8214 100644 --- a/src/transforms/util.js +++ b/src/transforms/util.js @@ -1,9 +1,9 @@ import { tokens } from '../tokenTypes' -const { LENGTH, PERCENT, COLOR, SPACE, NONE } = tokens +const { LENGTH, UNSUPPORTED_LENGTH_UNIT, PERCENT, COLOR, SPACE, NONE } = tokens export const directionFactory = ({ - types = [LENGTH, PERCENT], + types = [LENGTH, UNSUPPORTED_LENGTH_UNIT, PERCENT], directions = ['Top', 'Right', 'Bottom', 'Left'], prefix = '', suffix = '', @@ -48,7 +48,9 @@ export const anyOrderFactory = (properties, delim = SPACE) => tokenStream => { const matchedPropertyName = propertyNames.find( propertyName => values[propertyName] === undefined && - tokenStream.matches(properties[propertyName].token) + properties[propertyName].tokens.some(token => + tokenStream.matches(token) + ) ) if (!matchedPropertyName) { @@ -96,13 +98,19 @@ export const parseShadow = tokenStream => { while (tokenStream.hasTokens()) { if (didParseFirst) tokenStream.expect(SPACE) - if (offsetX === undefined && tokenStream.matches(LENGTH)) { + if ( + offsetX === undefined && + tokenStream.matches(LENGTH, UNSUPPORTED_LENGTH_UNIT) + ) { offsetX = tokenStream.lastValue tokenStream.expect(SPACE) - offsetY = tokenStream.expect(LENGTH) + offsetY = tokenStream.expect(LENGTH, UNSUPPORTED_LENGTH_UNIT) tokenStream.saveRewindPoint() - if (tokenStream.matches(SPACE) && tokenStream.matches(LENGTH)) { + if ( + tokenStream.matches(SPACE) && + tokenStream.matches(LENGTH, UNSUPPORTED_LENGTH_UNIT) + ) { radius = tokenStream.lastValue } else { tokenStream.rewind() From 74ed49dbd70fb02d1237c3ecddec8cdf1c764756 Mon Sep 17 00:00:00 2001 From: Jacob Parker Date: Wed, 9 May 2018 10:23:42 +0100 Subject: [PATCH 33/83] v2.2.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 86000be..cd55dfa 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "css-to-react-native", - "version": "2.1.2", + "version": "2.2.0", "description": "Convert CSS text to a React Native stylesheet object", "main": "index.js", "scripts": { From a3556fb621404e7ac041bae71c915ca51c16fbc1 Mon Sep 17 00:00:00 2001 From: krister Date: Mon, 18 Jun 2018 14:59:00 +0300 Subject: [PATCH 34/83] Allow CSS custom properties to be used without converting to camel case --- src/__tests__/index.js | 4 ++++ src/index.js | 8 +++++++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/src/__tests__/index.js b/src/__tests__/index.js index 75bc10f..1f32b83 100644 --- a/src/__tests__/index.js +++ b/src/__tests__/index.js @@ -47,6 +47,10 @@ it('allows undefined values', () => { }) }) +it('allows CSS custom properties to pass through', () => { + expect(transformCss([['--my-prop', '0%']])).toEqual({ '--my-prop': '0%' }) +}) + it('allows percent in unspecialized transform', () => { expect(transformCss([['top', '0%']])).toEqual({ top: '0%' }) }) diff --git a/src/index.js b/src/index.js index 2b678f6..0f1ad9c 100644 --- a/src/index.js +++ b/src/index.js @@ -59,7 +59,13 @@ export const getStylesForProperty = (propName, inputValue, allowShorthand) => { : { [propName]: propValue } } -export const getPropertyName = camelizeStyleName +export const getPropertyName = propName => { + const isCustomProp = /^--\w+/.test(propName) + if (isCustomProp) { + return propName + } + return camelizeStyleName(propName) +} export default (rules, shorthandBlacklist = []) => rules.reduce((accum, rule) => { From 1fafdf101a0fb85939be15b6daeb2ff5fa108ac3 Mon Sep 17 00:00:00 2001 From: krister Date: Fri, 22 Jun 2018 16:56:17 +0300 Subject: [PATCH 35/83] v2.2.1 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index cd55dfa..96d1f4a 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "css-to-react-native", - "version": "2.2.0", + "version": "2.2.1", "description": "Convert CSS text to a React Native stylesheet object", "main": "index.js", "scripts": { From 557509fc4ef01b9746262926d59a4ff339f81dcb Mon Sep 17 00:00:00 2001 From: krister Date: Wed, 26 Sep 2018 21:40:43 +0300 Subject: [PATCH 36/83] Fix transparent not working as a color value for shorthands --- src/__tests__/colors.js | 31 +++++++++++++++++++++++++++++++ src/__tests__/index.js | 10 ---------- src/tokenTypes.js | 4 +++- 3 files changed, 34 insertions(+), 11 deletions(-) create mode 100644 src/__tests__/colors.js diff --git a/src/__tests__/colors.js b/src/__tests__/colors.js new file mode 100644 index 0000000..9a0fe62 --- /dev/null +++ b/src/__tests__/colors.js @@ -0,0 +1,31 @@ +import transformCss from '..' + +it('transforms hex colors', () => { + expect(transformCss([['color', '#f00']])).toEqual({ color: '#f00' }) +}) + +it('transforms rgb colors', () => { + expect(transformCss([['color', 'rgb(255, 0, 0)']])).toEqual({ + color: 'rgb(255, 0, 0)', + }) +}) + +it('transforms transparent color', () => { + expect(transformCss([['color', 'transparent']])).toEqual({ + color: 'transparent', + }) +}) + +it('transforms border shorthand with transparent color', () => { + expect(transformCss([['border', '2px dashed transparent']])).toEqual({ + borderColor: 'transparent', + borderStyle: 'dashed', + borderWidth: 2, + }) +}) + +it('transforms background shorthand with transparent color', () => { + expect(transformCss([['background', 'transparent']])).toEqual({ + backgroundColor: 'transparent', + }) +}) diff --git a/src/__tests__/index.js b/src/__tests__/index.js index 1f32b83..c89a0af 100644 --- a/src/__tests__/index.js +++ b/src/__tests__/index.js @@ -117,16 +117,6 @@ it('transforms strings', () => { expect(transformCss([['color', 'red']])).toEqual({ color: 'red' }) }) -it('transforms hex colors', () => { - expect(transformCss([['color', '#f00']])).toEqual({ color: '#f00' }) -}) - -it('transforms rgb colors', () => { - expect(transformCss([['color', 'rgb(255, 0, 0)']])).toEqual({ - color: 'rgb(255, 0, 0)', - }) -}) - it('converts to camel-case', () => { expect(transformCss([['background-color', 'red']])).toEqual({ backgroundColor: 'red', diff --git a/src/tokenTypes.js b/src/tokenTypes.js index adf1c87..30e8850 100644 --- a/src/tokenTypes.js +++ b/src/tokenTypes.js @@ -16,7 +16,9 @@ const cssFunctionNameRe = /^(rgba?|hsla?|hwb|lab|lch|gray|color)$/ const matchColor = node => { if ( node.type === 'word' && - (hexColorRe.test(node.value) || node.value in cssColorKeywords) + (hexColorRe.test(node.value) || + node.value in cssColorKeywords || + node.value === 'transparent') ) { return node.value } else if (node.type === 'function' && cssFunctionNameRe.test(node.value)) { From f98181bcdde20094dd203631f2a4d2dfc3eeb190 Mon Sep 17 00:00:00 2001 From: krister Date: Thu, 27 Sep 2018 00:28:22 +0300 Subject: [PATCH 37/83] v2.2.2 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 96d1f4a..789e08d 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "css-to-react-native", - "version": "2.2.1", + "version": "2.2.2", "description": "Convert CSS text to a React Native stylesheet object", "main": "index.js", "scripts": { From 4e9cfecce5cf4edac0e1b8ef27681719f57ea56b Mon Sep 17 00:00:00 2001 From: Jacob Parker Date: Thu, 18 Oct 2018 15:59:00 +0100 Subject: [PATCH 38/83] Set flex-basis to `auto` --- src/transforms/flex.js | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/src/transforms/flex.js b/src/transforms/flex.js index 7aaad9c..b54c06f 100644 --- a/src/transforms/flex.js +++ b/src/transforms/flex.js @@ -6,8 +6,6 @@ const defaultFlexGrow = 1 const defaultFlexShrink = 1 const defaultFlexBasis = 0 -const FLEX_BASIS_AUTO = {} // Used for reference equality - export default tokenStream => { let flexGrow let flexShrink @@ -15,12 +13,12 @@ export default tokenStream => { if (tokenStream.matches(NONE)) { tokenStream.expectEmpty() - return { $merge: { flexGrow: 0, flexShrink: 0 } } + return { $merge: { flexGrow: 0, flexShrink: 0, flexBasis: 'auto' } } } tokenStream.saveRewindPoint() if (tokenStream.matches(AUTO) && !tokenStream.hasTokens()) { - return { $merge: { flexGrow: 1, flexShrink: 1 } } + return { $merge: { flexGrow: 1, flexShrink: 1, flexBasis: 'auto' } } } tokenStream.rewind() @@ -40,7 +38,7 @@ export default tokenStream => { } else if (flexBasis === undefined && tokenStream.matches(LENGTH)) { flexBasis = tokenStream.lastValue } else if (flexBasis === undefined && tokenStream.matches(AUTO)) { - flexBasis = FLEX_BASIS_AUTO + flexBasis = 'auto' } else { tokenStream.throw() } @@ -54,7 +52,5 @@ export default tokenStream => { if (flexShrink === undefined) flexShrink = defaultFlexShrink if (flexBasis === undefined) flexBasis = defaultFlexBasis - return flexBasis !== FLEX_BASIS_AUTO - ? { $merge: { flexGrow, flexShrink, flexBasis } } - : { $merge: { flexGrow, flexShrink } } + return { $merge: { flexGrow, flexShrink, flexBasis } } } From f48a256d7440123dab1677659b2cc80c487735bf Mon Sep 17 00:00:00 2001 From: Jacob Parker Date: Thu, 18 Oct 2018 16:12:27 +0100 Subject: [PATCH 39/83] Update tests --- src/__tests__/flex.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/__tests__/flex.js b/src/__tests__/flex.js index aa12943..571f3a9 100644 --- a/src/__tests__/flex.js +++ b/src/__tests__/flex.js @@ -73,6 +73,7 @@ it('transforms flex shorthand with flex-basis set to auto', () => { expect(transformCss([['flex', '0 1 auto']])).toEqual({ flexGrow: 0, flexShrink: 1, + flexBasis: 'auto', }) }) @@ -80,6 +81,7 @@ it('transforms flex shorthand with flex-basis set to auto appearing first', () = expect(transformCss([['flex', 'auto 0 1']])).toEqual({ flexGrow: 0, flexShrink: 1, + flexBasis: 'auto', }) }) @@ -87,6 +89,7 @@ it('transforms flex auto keyword', () => { expect(transformCss([['flex', 'auto']])).toEqual({ flexGrow: 1, flexShrink: 1, + flexBasis: 'auto', }) }) @@ -94,6 +97,7 @@ it('transforms flex none keyword', () => { expect(transformCss([['flex', 'none']])).toEqual({ flexGrow: 0, flexShrink: 0, + flexBasis: 'auto', }) }) From f45b72c4f16d7dceb039e6236612059de11b29f9 Mon Sep 17 00:00:00 2001 From: Dimitri Kopriwa Date: Fri, 30 Nov 2018 07:54:35 +0700 Subject: [PATCH 40/83] fix(camelize): fix issues #95 --- package.json | 5 ++++- src/index.js | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 789e08d..f09005b 100644 --- a/package.json +++ b/package.json @@ -33,6 +33,9 @@ "url": "https://github.com/styled-components/css-to-react-native/issues" }, "homepage": "https://github.com/styled-components/css-to-react-native#readme", + "jest": { + "testURL": "http://localhost" + }, "devDependencies": { "babel-cli": "^6.26.0", "babel-preset-es2015": "^6.24.1", @@ -47,8 +50,8 @@ "rollup": "^0.55.5" }, "dependencies": { + "camelize": "^1.0.0", "css-color-keywords": "^1.0.0", - "fbjs": "^0.8.5", "postcss-value-parser": "^3.3.0" }, "lint-staged": { diff --git a/src/index.js b/src/index.js index 0f1ad9c..75a1486 100644 --- a/src/index.js +++ b/src/index.js @@ -1,6 +1,6 @@ /* eslint-disable no-param-reassign */ import parse from 'postcss-value-parser' -import camelizeStyleName from 'fbjs/lib/camelizeStyleName' +import camelizeStyleName from 'camelize' import transforms from './transforms/index' import TokenStream from './TokenStream' From c62fdfbcadf347d27c3087070e83a81f77cb8582 Mon Sep 17 00:00:00 2001 From: Dimitri Kopriwa Date: Fri, 30 Nov 2018 07:55:47 +0700 Subject: [PATCH 41/83] build(lockfile): remove lockfile (they should be use userland), and added rules not to use package-lock.json in .npmrc --- .gitignore | 1 + .npmrc | 1 + 2 files changed, 2 insertions(+) create mode 100644 .npmrc diff --git a/.gitignore b/.gitignore index b8df26b..b6cb757 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ /node_modules /index.js +/package-lock.json diff --git a/.npmrc b/.npmrc new file mode 100644 index 0000000..43c97e7 --- /dev/null +++ b/.npmrc @@ -0,0 +1 @@ +package-lock=false From 5bb1433c8484cd5cff0c2fd6e3b0811c78dc0658 Mon Sep 17 00:00:00 2001 From: Dimitri Kopriwa Date: Fri, 30 Nov 2018 15:11:41 +0700 Subject: [PATCH 42/83] ci(lock): update yarn.lock --- yarn.lock | 69 +++++-------------------------------------------------- 1 file changed, 6 insertions(+), 63 deletions(-) diff --git a/yarn.lock b/yarn.lock index a1bf3cf..710ec9a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -166,10 +166,6 @@ arrify@^1.0.0, arrify@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" -asap@~2.0.3: - version "2.0.5" - resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.5.tgz#522765b50c3510490e52d7dcfe085ef9ba96958f" - asn1@~0.2.3: version "0.2.3" resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.3.tgz#dac8787713c9966849fc8180777ebe9c1ddf3b86" @@ -908,6 +904,11 @@ camelcase@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" +camelize@^1.0.0: + version "1.0.0" + resolved "https://npm.kopaxgroup.com/camelize/-/camelize-1.0.0.tgz#164a5483e630fa4321e5af07020e531831b2609b" + integrity sha1-FkpUg+Yw+kMh5a8HAg5TGDGyYJs= + caseless@~0.11.0: version "0.11.0" resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.11.0.tgz#715b96ea9841593cc33067923f5ec60ebda4f7d7" @@ -1077,10 +1078,6 @@ convert-source-map@^1.4.0, convert-source-map@^1.5.0: version "1.5.1" resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.5.1.tgz#b8278097b9bc229365de5c62cf5fcaed8b5599e5" -core-js@^1.0.0: - version "1.2.7" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-1.2.7.tgz#652294c14651db28fa93bd2d5ff2983a4f08c636" - core-js@^2.4.0: version "2.4.1" resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.4.1.tgz#4de911e667b0eae9124e34254b53aea6fc618d3e" @@ -1266,12 +1263,6 @@ elegant-spinner@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/elegant-spinner/-/elegant-spinner-1.0.1.tgz#db043521c95d7e303fd8f345bedc3349cfb0729e" -encoding@^0.1.11: - version "0.1.12" - resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.12.tgz#538b66f3ee62cd1ab51ec323829d1f9480c74beb" - dependencies: - iconv-lite "~0.4.13" - error-ex@^1.2.0: version "1.3.0" resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.0.tgz#e67b43f3e82c96ea3a584ffee0b9fc3325d802d9" @@ -1575,18 +1566,6 @@ fb-watchman@^2.0.0: dependencies: bser "^2.0.0" -fbjs@^0.8.5: - version "0.8.8" - resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.8.8.tgz#02f1b6e0ea0d46c24e0b51a2d24df069563a5ad6" - dependencies: - core-js "^1.0.0" - isomorphic-fetch "^2.1.1" - loose-envify "^1.0.0" - object-assign "^4.1.0" - promise "^7.1.1" - setimmediate "^1.0.5" - ua-parser-js "^0.7.9" - figures@^1.7.0: version "1.7.0" resolved "https://registry.yarnpkg.com/figures/-/figures-1.7.0.tgz#cbe1e3affcf1cd44b80cadfed28dc793a9701d2e" @@ -2009,10 +1988,6 @@ iconv-lite@0.4.19, iconv-lite@^0.4.17: version "0.4.19" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.19.tgz#f7468f60135f5e5dad3399c0a81be9a1603a082b" -iconv-lite@~0.4.13: - version "0.4.15" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.15.tgz#fe265a218ac6a57cfe854927e9d04c19825eddeb" - ignore@^3.3.3: version "3.3.7" resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.7.tgz#612289bfb3c220e186a58118618d5be8c1bab021" @@ -2247,7 +2222,7 @@ is-resolvable@^1.0.0: dependencies: tryit "^1.0.1" -is-stream@^1.0.1, is-stream@^1.1.0: +is-stream@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" @@ -2277,13 +2252,6 @@ isobject@^2.0.0: dependencies: isarray "1.0.0" -isomorphic-fetch@^2.1.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz#611ae1acf14f5e81f729507472819fe9733558a9" - dependencies: - node-fetch "^1.0.1" - whatwg-fetch ">=0.10.0" - isstream@~0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" @@ -3032,13 +3000,6 @@ natural-compare@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" -node-fetch@^1.0.1: - version "1.6.3" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-1.6.3.tgz#dc234edd6489982d58e8f0db4f695029abcd8c04" - dependencies: - encoding "^0.1.11" - is-stream "^1.0.1" - node-int64@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" @@ -3442,12 +3403,6 @@ progress@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.0.tgz#8a1be366bf8fc23db2bd23f10c6fe920b4389d1f" -promise@^7.1.1: - version "7.1.1" - resolved "https://registry.yarnpkg.com/promise/-/promise-7.1.1.tgz#489654c692616b8aa55b0724fa809bb7db49c5bf" - dependencies: - asap "~2.0.3" - pseudomap@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" @@ -3873,10 +3828,6 @@ set-immediate-shim@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz#4b2b1b27eb808a9f8dcc481a58e5e56f599f3f61" -setimmediate@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" - shebang-command@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" @@ -4260,10 +4211,6 @@ typedarray@^0.0.6: version "0.0.6" resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" -ua-parser-js@^0.7.9: - version "0.7.12" - resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.12.tgz#04c81a99bdd5dc52263ea29d24c6bf8d4818a4bb" - uglify-js@^2.6: version "2.7.5" resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.7.5.tgz#4612c0c7baaee2ba7c487de4904ae122079f2ca8" @@ -4362,10 +4309,6 @@ whatwg-encoding@^1.0.3: dependencies: iconv-lite "0.4.19" -whatwg-fetch@>=0.10.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-2.0.2.tgz#fe294d1d89e36c5be8b3195057f2e4bc74fc980e" - whatwg-url@^6.4.0: version "6.4.0" resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-6.4.0.tgz#08fdf2b9e872783a7a1f6216260a1d66cc722e08" From 0a6f83e1e72949c94c45c8fbdf4b5a1fc37c198d Mon Sep 17 00:00:00 2001 From: Jacob Parker Date: Thu, 7 Feb 2019 14:57:50 +0000 Subject: [PATCH 43/83] v2.3.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index f09005b..2be60fe 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "css-to-react-native", - "version": "2.2.2", + "version": "2.3.0", "description": "Convert CSS text to a React Native stylesheet object", "main": "index.js", "scripts": { From 1bc3e7f205e8f33532931f6f725a6f0501eb5c45 Mon Sep 17 00:00:00 2001 From: taoqf Date: Tue, 26 Mar 2019 16:23:13 +0800 Subject: [PATCH 44/83] add types --- index.d.ts | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 index.d.ts diff --git a/index.d.ts b/index.d.ts new file mode 100644 index 0000000..a714e9e --- /dev/null +++ b/index.d.ts @@ -0,0 +1,8 @@ +export interface Style { + [key: string]: string; +} + +export function getPropertyName(name: string): string; +export function getStylesForProperty(name: string, value: string): Style; + +export default function transform(css: Array<[string, string]>, output?: string[], getStylesForProperty?: boolean): Style; From 9a4618af7fd7d0c46768d53b858700f1124a6296 Mon Sep 17 00:00:00 2001 From: Jacob Parker Date: Tue, 9 Apr 2019 16:24:10 +0800 Subject: [PATCH 45/83] Update index.d.ts Co-Authored-By: taoqf --- index.d.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/index.d.ts b/index.d.ts index a714e9e..ebad116 100644 --- a/index.d.ts +++ b/index.d.ts @@ -5,4 +5,4 @@ export interface Style { export function getPropertyName(name: string): string; export function getStylesForProperty(name: string, value: string): Style; -export default function transform(css: Array<[string, string]>, output?: string[], getStylesForProperty?: boolean): Style; +export default function transform(css: Array<[string, string]>, shorthandBlacklist?: string[]): Style; From 92f7a31f07c42b08555e4e6ec3a6c697d2077439 Mon Sep 17 00:00:00 2001 From: taoqf Date: Tue, 9 Apr 2019 16:27:46 +0800 Subject: [PATCH 46/83] add argument --- index.d.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/index.d.ts b/index.d.ts index ebad116..e6bee0f 100644 --- a/index.d.ts +++ b/index.d.ts @@ -3,6 +3,6 @@ export interface Style { } export function getPropertyName(name: string): string; -export function getStylesForProperty(name: string, value: string): Style; +export function getStylesForProperty(name: string, value: string, allowShorthand?: boolean): Style; export default function transform(css: Array<[string, string]>, shorthandBlacklist?: string[]): Style; From 0b8f75f319f8fbb30d72de4ba8b80e69f5f402af Mon Sep 17 00:00:00 2001 From: taoqf Date: Mon, 22 Apr 2019 10:56:08 +0800 Subject: [PATCH 47/83] fix: types --- index.d.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/index.d.ts b/index.d.ts index e6bee0f..5eef97a 100644 --- a/index.d.ts +++ b/index.d.ts @@ -1,5 +1,5 @@ export interface Style { - [key: string]: string; + [key: string]: string | number | Style; } export function getPropertyName(name: string): string; From aea83e00446de3e73b69ab5bd5156d4b933ff105 Mon Sep 17 00:00:00 2001 From: Jacob Parker Date: Mon, 6 May 2019 11:50:55 +0100 Subject: [PATCH 48/83] v2.3.1 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 2be60fe..4cdd6c7 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "css-to-react-native", - "version": "2.3.0", + "version": "2.3.1", "description": "Convert CSS text to a React Native stylesheet object", "main": "index.js", "scripts": { From fdddfcdf4a535f25df401d660a39ca5f4d68c10f Mon Sep 17 00:00:00 2001 From: Jacob Parker Date: Mon, 6 May 2019 11:51:28 +0100 Subject: [PATCH 49/83] Fix border: none (#103) --- src/__tests__/border.js | 8 +++++ src/index.js | 8 ++--- src/transforms/border.js | 48 ++++++++++++++++++++++++++++ src/transforms/boxShadow.js | 10 +++--- src/transforms/flex.js | 6 ++-- src/transforms/flexFlow.js | 39 ++++++++++++++++++++++ src/transforms/font.js | 4 +-- src/transforms/fontFamily.js | 2 +- src/transforms/index.js | 46 ++++++++++---------------- src/transforms/textDecoration.js | 3 +- src/transforms/textDecorationLine.js | 2 +- src/transforms/textShadow.js | 8 ++--- src/transforms/transform.js | 2 +- src/transforms/util.js | 44 ++----------------------- 14 files changed, 132 insertions(+), 98 deletions(-) create mode 100644 src/transforms/border.js create mode 100644 src/transforms/flexFlow.js diff --git a/src/__tests__/border.js b/src/__tests__/border.js index 369a112..b15241c 100644 --- a/src/__tests__/border.js +++ b/src/__tests__/border.js @@ -1,5 +1,13 @@ import transformCss from '..' +it('transforms border none', () => { + expect(transformCss([['border', 'none']])).toEqual({ + borderWidth: 0, + borderColor: 'black', + borderStyle: 'solid', + }) +}) + it('transforms border shorthand', () => { expect(transformCss([['border', '2px dashed #f00']])).toEqual({ borderWidth: 2, diff --git a/src/index.js b/src/index.js index 75a1486..a6fbe41 100644 --- a/src/index.js +++ b/src/index.js @@ -50,13 +50,11 @@ const transformShorthandValue = export const getStylesForProperty = (propName, inputValue, allowShorthand) => { const isRawValue = allowShorthand === false || !(propName in transforms) - const propValue = isRawValue - ? transformRawValue(inputValue) + const propValues = isRawValue + ? { [propName]: transformRawValue(inputValue) } : transformShorthandValue(propName, inputValue.trim()) - return propValue && propValue.$merge - ? propValue.$merge - : { [propName]: propValue } + return propValues } export const getPropertyName = propName => { diff --git a/src/transforms/border.js b/src/transforms/border.js new file mode 100644 index 0000000..e7a348e --- /dev/null +++ b/src/transforms/border.js @@ -0,0 +1,48 @@ +import { regExpToken, tokens } from '../tokenTypes' + +const { NONE, COLOR, LENGTH, UNSUPPORTED_LENGTH_UNIT, SPACE } = tokens + +const BORDER_STYLE = regExpToken(/^(solid|dashed|dotted)$/) + +const defaultBorderWidth = 1 +const defaultBorderColor = 'black' +const defaultBorderStyle = 'solid' + +export default tokenStream => { + let borderWidth + let borderColor + let borderStyle + + if (tokenStream.matches(NONE)) { + tokenStream.expectEmpty() + return { borderWidth: 0, borderColor: 'black', borderStyle: 'solid' } + } + + let partsParsed = 0 + while (partsParsed < 3 && tokenStream.hasTokens()) { + if (partsParsed !== 0) tokenStream.expect(SPACE) + + if ( + (borderWidth === undefined && tokenStream.matches(LENGTH)) || + tokenStream.matches(UNSUPPORTED_LENGTH_UNIT) + ) { + borderWidth = tokenStream.lastValue + } else if (borderColor === undefined && tokenStream.matches(COLOR)) { + borderColor = tokenStream.lastValue + } else if (borderStyle === undefined && tokenStream.matches(BORDER_STYLE)) { + borderStyle = tokenStream.lastValue + } else { + tokenStream.throw() + } + + partsParsed += 1 + } + + tokenStream.expectEmpty() + + if (borderWidth === undefined) borderWidth = defaultBorderWidth + if (borderColor === undefined) borderColor = defaultBorderColor + if (borderStyle === undefined) borderStyle = defaultBorderStyle + + return { borderWidth, borderColor, borderStyle } +} diff --git a/src/transforms/boxShadow.js b/src/transforms/boxShadow.js index f100a3f..b581658 100644 --- a/src/transforms/boxShadow.js +++ b/src/transforms/boxShadow.js @@ -3,11 +3,9 @@ import { parseShadow } from './util' export default tokenStream => { const { offset, radius, color } = parseShadow(tokenStream) return { - $merge: { - shadowOffset: offset, - shadowRadius: radius, - shadowColor: color, - shadowOpacity: 1, - }, + shadowOffset: offset, + shadowRadius: radius, + shadowColor: color, + shadowOpacity: 1, } } diff --git a/src/transforms/flex.js b/src/transforms/flex.js index b54c06f..df5c5fd 100644 --- a/src/transforms/flex.js +++ b/src/transforms/flex.js @@ -13,12 +13,12 @@ export default tokenStream => { if (tokenStream.matches(NONE)) { tokenStream.expectEmpty() - return { $merge: { flexGrow: 0, flexShrink: 0, flexBasis: 'auto' } } + return { flexGrow: 0, flexShrink: 0, flexBasis: 'auto' } } tokenStream.saveRewindPoint() if (tokenStream.matches(AUTO) && !tokenStream.hasTokens()) { - return { $merge: { flexGrow: 1, flexShrink: 1, flexBasis: 'auto' } } + return { flexGrow: 1, flexShrink: 1, flexBasis: 'auto' } } tokenStream.rewind() @@ -52,5 +52,5 @@ export default tokenStream => { if (flexShrink === undefined) flexShrink = defaultFlexShrink if (flexBasis === undefined) flexBasis = defaultFlexBasis - return { $merge: { flexGrow, flexShrink, flexBasis } } + return { flexGrow, flexShrink, flexBasis } } diff --git a/src/transforms/flexFlow.js b/src/transforms/flexFlow.js new file mode 100644 index 0000000..fccb2c1 --- /dev/null +++ b/src/transforms/flexFlow.js @@ -0,0 +1,39 @@ +import { regExpToken, tokens } from '../tokenTypes' + +const { SPACE } = tokens + +const FLEX_WRAP = regExpToken(/(nowrap|wrap|wrap-reverse)/) +const FLEX_DIRECTION = regExpToken(/(row|row-reverse|column|column-reverse)/) + +const defaultFlexWrap = 'nowrap' +const defaultFlexDirection = 'row' + +export default tokenStream => { + let flexWrap + let flexDirection + + let partsParsed = 0 + while (partsParsed < 2 && tokenStream.hasTokens()) { + if (partsParsed !== 0) tokenStream.expect(SPACE) + + if (flexWrap === undefined && tokenStream.matches(FLEX_WRAP)) { + flexWrap = tokenStream.lastValue + } else if ( + flexDirection === undefined && + tokenStream.matches(FLEX_DIRECTION) + ) { + flexDirection = tokenStream.lastValue + } else { + tokenStream.throw() + } + + partsParsed += 1 + } + + tokenStream.expectEmpty() + + if (flexWrap === undefined) flexWrap = defaultFlexWrap + if (flexDirection === undefined) flexDirection = defaultFlexDirection + + return { flexWrap, flexDirection } +} diff --git a/src/transforms/font.js b/src/transforms/font.js index 92b2229..9ce7d0e 100644 --- a/src/transforms/font.js +++ b/src/transforms/font.js @@ -49,7 +49,7 @@ export default tokenStream => { tokenStream.expect(SPACE) - const fontFamily = parseFontFamily(tokenStream) + const { fontFamily } = parseFontFamily(tokenStream) if (fontStyle === undefined) fontStyle = defaultFontStyle if (fontWeight === undefined) fontWeight = defaultFontWeight @@ -58,5 +58,5 @@ export default tokenStream => { const out = { fontStyle, fontWeight, fontVariant, fontSize, fontFamily } if (lineHeight !== undefined) out.lineHeight = lineHeight - return { $merge: out } + return out } diff --git a/src/transforms/fontFamily.js b/src/transforms/fontFamily.js index 240f271..53b5bac 100644 --- a/src/transforms/fontFamily.js +++ b/src/transforms/fontFamily.js @@ -18,5 +18,5 @@ export default tokenStream => { tokenStream.expectEmpty() - return fontFamily + return { fontFamily } } diff --git a/src/transforms/index.js b/src/transforms/index.js index 0431b2f..1185858 100644 --- a/src/transforms/index.js +++ b/src/transforms/index.js @@ -1,13 +1,15 @@ -import { regExpToken, tokens } from '../tokenTypes' +import { tokens } from '../tokenTypes' +import border from './border' import boxShadow from './boxShadow' import flex from './flex' +import flexFlow from './flexFlow' import font from './font' import fontFamily from './fontFamily' import textShadow from './textShadow' import textDecoration from './textDecoration' import textDecorationLine from './textDecorationLine' import transform from './transform' -import { directionFactory, anyOrderFactory, shadowOffsetFactory } from './util' +import { directionFactory, parseShadowOffset } from './util' const { IDENT, @@ -20,21 +22,7 @@ const { } = tokens const background = tokenStream => ({ - $merge: { backgroundColor: tokenStream.expect(COLOR) }, -}) -const border = anyOrderFactory({ - borderWidth: { - tokens: [LENGTH, UNSUPPORTED_LENGTH_UNIT], - default: 1, - }, - borderColor: { - tokens: [COLOR], - default: 'black', - }, - borderStyle: { - tokens: [regExpToken(/^(solid|dashed|dotted)$/)], - default: 'solid', - }, + backgroundColor: tokenStream.expect(COLOR), }) const borderColor = directionFactory({ types: [WORD], @@ -52,20 +40,18 @@ const margin = directionFactory({ prefix: 'margin', }) const padding = directionFactory({ prefix: 'padding' }) -const flexFlow = anyOrderFactory({ - flexWrap: { - tokens: [regExpToken(/(nowrap|wrap|wrap-reverse)/)], - default: 'nowrap', - }, - flexDirection: { - tokens: [regExpToken(/(row|row-reverse|column|column-reverse)/)], - default: 'row', - }, +const fontVariant = tokenStream => ({ + fontVariant: [tokenStream.expect(IDENT)], +}) +const fontWeight = tokenStream => ({ + fontWeight: tokenStream.expect(WORD), // Also match numbers as strings +}) +const shadowOffset = tokenStream => ({ + shadowOffset: parseShadowOffset(tokenStream), +}) +const textShadowOffset = tokenStream => ({ + textShadowOffset: parseShadowOffset(tokenStream), }) -const fontVariant = tokenStream => [tokenStream.expect(IDENT)] -const fontWeight = tokenStream => tokenStream.expect(WORD) // Also match numbers as strings -const shadowOffset = shadowOffsetFactory() -const textShadowOffset = shadowOffsetFactory() export default { background, diff --git a/src/transforms/textDecoration.js b/src/transforms/textDecoration.js index d287d93..17303d5 100644 --- a/src/transforms/textDecoration.js +++ b/src/transforms/textDecoration.js @@ -45,12 +45,11 @@ export default tokenStream => { didParseFirst = true } - const $merge = { + return { textDecorationLine: line !== undefined ? line : defaultTextDecorationLine, textDecorationColor: color !== undefined ? color : defaultTextDecorationColor, textDecorationStyle: style !== undefined ? style : defaultTextDecorationStyle, } - return { $merge } } diff --git a/src/transforms/textDecorationLine.js b/src/transforms/textDecorationLine.js index 1260175..a629869 100644 --- a/src/transforms/textDecorationLine.js +++ b/src/transforms/textDecorationLine.js @@ -16,5 +16,5 @@ export default tokenStream => { lines.sort().reverse() - return lines.join(' ') + return { textDecorationLine: lines.join(' ') } } diff --git a/src/transforms/textShadow.js b/src/transforms/textShadow.js index 5a1fc50..46f00fd 100644 --- a/src/transforms/textShadow.js +++ b/src/transforms/textShadow.js @@ -3,10 +3,8 @@ import { parseShadow } from './util' export default tokenStream => { const { offset, radius, color } = parseShadow(tokenStream) return { - $merge: { - textShadowOffset: offset, - textShadowRadius: radius, - textShadowColor: color, - }, + textShadowOffset: offset, + textShadowRadius: radius, + textShadowColor: color, } } diff --git a/src/transforms/transform.js b/src/transforms/transform.js index 0d1d061..269cb0e 100644 --- a/src/transforms/transform.js +++ b/src/transforms/transform.js @@ -72,5 +72,5 @@ export default tokenStream => { didParseFirst = true } - return transforms + return { transform: transforms } } diff --git a/src/transforms/util.js b/src/transforms/util.js index a3a8214..b7b616f 100644 --- a/src/transforms/util.js +++ b/src/transforms/util.js @@ -24,55 +24,15 @@ export const directionFactory = ({ const keyFor = n => `${prefix}${directions[n]}${suffix}` - const output = { + return { [keyFor(0)]: top, [keyFor(1)]: right, [keyFor(2)]: bottom, [keyFor(3)]: left, } - - return { $merge: output } -} - -export const anyOrderFactory = (properties, delim = SPACE) => tokenStream => { - const propertyNames = Object.keys(properties) - const values = propertyNames.reduce((accum, propertyName) => { - accum[propertyName] === undefined // eslint-disable-line - return accum - }, {}) - - let numParsed = 0 - while (numParsed < propertyNames.length && tokenStream.hasTokens()) { - if (numParsed) tokenStream.expect(delim) - - const matchedPropertyName = propertyNames.find( - propertyName => - values[propertyName] === undefined && - properties[propertyName].tokens.some(token => - tokenStream.matches(token) - ) - ) - - if (!matchedPropertyName) { - tokenStream.throw() - } else { - values[matchedPropertyName] = tokenStream.lastValue - } - - numParsed += 1 - } - - tokenStream.expectEmpty() - - propertyNames.forEach(propertyName => { - if (values[propertyName] === undefined) - values[propertyName] = properties[propertyName].default - }) - - return { $merge: values } } -export const shadowOffsetFactory = () => tokenStream => { +export const parseShadowOffset = tokenStream => { const width = tokenStream.expect(LENGTH) const height = tokenStream.matches(SPACE) ? tokenStream.expect(LENGTH) : width tokenStream.expectEmpty() From 640f58f0029a1c1fd9705896b0ff813a6d936b45 Mon Sep 17 00:00:00 2001 From: Jacob Parker Date: Fri, 7 Jun 2019 09:06:58 +0100 Subject: [PATCH 50/83] Update README.md --- README.md | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 32de7df..2096b4c 100644 --- a/README.md +++ b/README.md @@ -71,7 +71,7 @@ There is also support for the `box-shadow` shorthand, and this converts into `sh # API -The API is mostly for implementors. However, the main API may be useful for non-implementors. The main API is, +The API is mostly for implementors. However, the main API may be useful for non-implementors. The main API is an array of `[property, value]` tuples. ```js import transform from 'css-to-react-native'; @@ -84,7 +84,11 @@ transform([ ]); // => { fontFamily: 'Helvetica', ... } ``` -For implementors, there is also, +We don't provide a way to get these style tuples in this library, so you'll need to do that yourself. I expect most people will use postCSS or another CSS parser. You should try avoid getting these with `string.split`, as that has a lot of edge cases (colons and semi-colons apearing in comments etc.) + +For implementors, there is also a few extra APIs available. + +These are for specific use-cases, and most people should just be using the API above. ```js import { getPropertyName, getStylesForProperty } from 'css-to-react-native'; From dfa99e584176a4a3ce73a1c7624673d18efab1f8 Mon Sep 17 00:00:00 2001 From: Jacob Parker Date: Fri, 7 Jun 2019 09:44:32 +0100 Subject: [PATCH 51/83] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 2096b4c..78850ab 100644 --- a/README.md +++ b/README.md @@ -108,6 +108,6 @@ This can also be done by passing a third argument, `false` to `getStylesForPrope ## License -Licensed under the MIT License, Copyright © 2016 Jacob Parker and Maximilian Stoiber. +Licensed under the MIT License, Copyright © 2019 Krister Kari, Jacob Parker, and Maximilian Stoiber. See [LICENSE.md](./LICENSE.md) for more information. From 983f85ea2f7c747c4f7e87f8706556a4e15037b4 Mon Sep 17 00:00:00 2001 From: krister Date: Wed, 14 Aug 2019 11:10:00 +0300 Subject: [PATCH 52/83] Fix border-color only accepting named colors --- src/__tests__/borderColor.js | 27 +++++++++++++++++++++++++++ src/transforms/index.js | 4 ++-- 2 files changed, 29 insertions(+), 2 deletions(-) diff --git a/src/__tests__/borderColor.js b/src/__tests__/borderColor.js index 66f3532..e6bd8e0 100644 --- a/src/__tests__/borderColor.js +++ b/src/__tests__/borderColor.js @@ -8,3 +8,30 @@ it('transforms border color with multiple values', () => { borderLeftColor: 'blue', }) }) + +it('transforms border color with hex color', () => { + expect(transformCss([['border-color', '#f00']])).toEqual({ + borderBottomColor: '#f00', + borderLeftColor: '#f00', + borderRightColor: '#f00', + borderTopColor: '#f00', + }) +}) + +it('transforms border color with rgb color', () => { + expect(transformCss([['border-color', 'rgb(255, 0, 0)']])).toEqual({ + borderBottomColor: 'rgb(255, 0, 0)', + borderLeftColor: 'rgb(255, 0, 0)', + borderRightColor: 'rgb(255, 0, 0)', + borderTopColor: 'rgb(255, 0, 0)', + }) +}) + +it('transforms border color with rgba color', () => { + expect(transformCss([['border-color', 'rgba(255, 0, 0, 0.1)']])).toEqual({ + borderBottomColor: 'rgba(255, 0, 0, 0.1)', + borderLeftColor: 'rgba(255, 0, 0, 0.1)', + borderRightColor: 'rgba(255, 0, 0, 0.1)', + borderTopColor: 'rgba(255, 0, 0, 0.1)', + }) +}) diff --git a/src/transforms/index.js b/src/transforms/index.js index 1185858..21cb3b1 100644 --- a/src/transforms/index.js +++ b/src/transforms/index.js @@ -5,9 +5,9 @@ import flex from './flex' import flexFlow from './flexFlow' import font from './font' import fontFamily from './fontFamily' -import textShadow from './textShadow' import textDecoration from './textDecoration' import textDecorationLine from './textDecorationLine' +import textShadow from './textShadow' import transform from './transform' import { directionFactory, parseShadowOffset } from './util' @@ -25,7 +25,7 @@ const background = tokenStream => ({ backgroundColor: tokenStream.expect(COLOR), }) const borderColor = directionFactory({ - types: [WORD], + types: [WORD, COLOR], prefix: 'border', suffix: 'Color', }) From 3a3a596b4d60abcb76242a45f12cd8d846ff16db Mon Sep 17 00:00:00 2001 From: Krister Kari Date: Wed, 14 Aug 2019 12:31:20 +0300 Subject: [PATCH 53/83] Update src/transforms/index.js Co-Authored-By: Jacob Parker --- src/transforms/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/transforms/index.js b/src/transforms/index.js index 21cb3b1..333728b 100644 --- a/src/transforms/index.js +++ b/src/transforms/index.js @@ -25,7 +25,7 @@ const background = tokenStream => ({ backgroundColor: tokenStream.expect(COLOR), }) const borderColor = directionFactory({ - types: [WORD, COLOR], + types: [COLOR], prefix: 'border', suffix: 'Color', }) From 43e402934a6a5c06bf0b24253ba485f840909353 Mon Sep 17 00:00:00 2001 From: krister Date: Sun, 25 Aug 2019 20:12:19 +0300 Subject: [PATCH 54/83] Update .travis.yml - Use newer Ubuntu distro - Add new Node versions - Remove setting to cache bundler --- .travis.yml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index b95ea8d..0a152e7 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,8 +1,10 @@ language: node_js -dist: trusty +dist: xenial node_js: - 6 - 8 + - 10 + - 12 script: - node --version - yarn --version @@ -13,6 +15,5 @@ notifications: on_failure: change cache: yarn: true - bundler: true directories: - node_modules From 19f24e37ada9f4e3d6df7db283b7d40656defe86 Mon Sep 17 00:00:00 2001 From: krister Date: Sun, 25 Aug 2019 20:27:20 +0300 Subject: [PATCH 55/83] try updating Yarn to latest version before install --- .travis.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.travis.yml b/.travis.yml index 0a152e7..e9b9481 100644 --- a/.travis.yml +++ b/.travis.yml @@ -10,6 +10,8 @@ script: - yarn --version - yarn run test - yarn run lint +before_install: + - npm install -g yarn notifications: email: on_failure: change From b0fc52f7b1d730dd11cc5100d74635d4981e72b9 Mon Sep 17 00:00:00 2001 From: krister Date: Sun, 25 Aug 2019 20:38:47 +0300 Subject: [PATCH 56/83] Fix registry url for camelize package --- yarn.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/yarn.lock b/yarn.lock index 710ec9a..fe37ae5 100644 --- a/yarn.lock +++ b/yarn.lock @@ -906,7 +906,7 @@ camelcase@^4.1.0: camelize@^1.0.0: version "1.0.0" - resolved "https://npm.kopaxgroup.com/camelize/-/camelize-1.0.0.tgz#164a5483e630fa4321e5af07020e531831b2609b" + resolved "https://registry.yarnpkg.com/camelize/-/camelize-1.0.0.tgz#164a5483e630fa4321e5af07020e531831b2609b" integrity sha1-FkpUg+Yw+kMh5a8HAg5TGDGyYJs= caseless@~0.11.0: From 0dd5081dbdef8d63bf8aab29e329773dc3636194 Mon Sep 17 00:00:00 2001 From: krister Date: Sun, 25 Aug 2019 22:09:20 +0300 Subject: [PATCH 57/83] v2.3.2 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 4cdd6c7..6ccf8d3 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "css-to-react-native", - "version": "2.3.1", + "version": "2.3.2", "description": "Convert CSS text to a React Native stylesheet object", "main": "index.js", "scripts": { From 646c3fd6b23c8c9a054c8b977250be74cb076273 Mon Sep 17 00:00:00 2001 From: Jacob Parker Date: Mon, 30 Sep 2019 20:30:11 +0100 Subject: [PATCH 58/83] Housekeeping --- .babelrc | 2 +- .gitignore | 1 - .npmrc | 1 - index.d.ts | 17 +- package.json | 14 +- src/__tests__/border.js | 12 + src/__tests__/flex.js | 16 + src/__tests__/index.js | 33 +- src/__tests__/placeContent.js | 19 + src/devPropertiesWithoutUnitsRegExp.js | 19 + src/index.js | 38 +- src/transforms/border.js | 4 +- src/transforms/flex.js | 15 +- src/transforms/index.js | 2 + src/transforms/placeContent.js | 26 + yarn.lock | 5922 ++++++++++++++---------- 16 files changed, 3615 insertions(+), 2526 deletions(-) delete mode 100644 .npmrc create mode 100644 src/__tests__/placeContent.js create mode 100644 src/devPropertiesWithoutUnitsRegExp.js create mode 100644 src/transforms/placeContent.js diff --git a/.babelrc b/.babelrc index 9d8d516..b7191e7 100644 --- a/.babelrc +++ b/.babelrc @@ -1 +1 @@ -{ "presets": ["es2015"] } +{ "presets": ["@babel/preset-env"] } diff --git a/.gitignore b/.gitignore index b6cb757..b8df26b 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,2 @@ /node_modules /index.js -/package-lock.json diff --git a/.npmrc b/.npmrc deleted file mode 100644 index 43c97e7..0000000 --- a/.npmrc +++ /dev/null @@ -1 +0,0 @@ -package-lock=false diff --git a/index.d.ts b/index.d.ts index 5eef97a..bb60c2b 100644 --- a/index.d.ts +++ b/index.d.ts @@ -1,8 +1,17 @@ +export type StyleTuple = [string, string] + export interface Style { - [key: string]: string | number | Style; + [key: string]: string | number | Style } -export function getPropertyName(name: string): string; -export function getStylesForProperty(name: string, value: string, allowShorthand?: boolean): Style; +export function getPropertyName(name: string): string +export function getStylesForProperty( + name: string, + value: string, + allowShorthand?: boolean +): Style -export default function transform(css: Array<[string, string]>, shorthandBlacklist?: string[]): Style; +export default function transform( + styleTuples: StyleTuple[], + shorthandBlacklist?: string[] +): Style diff --git a/package.json b/package.json index 6ccf8d3..c398ab6 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "css-to-react-native", - "version": "2.3.2", + "version": "3.0.0", "description": "Convert CSS text to a React Native stylesheet object", "main": "index.js", "scripts": { @@ -37,22 +37,22 @@ "testURL": "http://localhost" }, "devDependencies": { - "babel-cli": "^6.26.0", - "babel-preset-es2015": "^6.24.1", + "@babel/cli": "^6.26.0", + "@babel/preset-env": "^6.24.1", "eslint": "^4.17.0", "eslint-config-airbnb-base": "^12.1.0", "eslint-config-prettier": "^2.9.0", "eslint-plugin-import": "^2.8.0", "eslint-plugin-prettier": "^2.6.0", - "jest": "^22.2.2", + "jest": "^24.9.0", "lint-staged": "^6.1.0", - "prettier": "^1.10.2", - "rollup": "^0.55.5" + "prettier": "^1.18.2", + "rollup": "^1.22.0" }, "dependencies": { "camelize": "^1.0.0", "css-color-keywords": "^1.0.0", - "postcss-value-parser": "^3.3.0" + "postcss-value-parser": "^4.0.2" }, "lint-staged": { "*.js": [ diff --git a/src/__tests__/border.js b/src/__tests__/border.js index b15241c..31c9a08 100644 --- a/src/__tests__/border.js +++ b/src/__tests__/border.js @@ -71,3 +71,15 @@ it('transforms border shorthand missing color & style', () => { borderStyle: 'solid', }) }) + +it('transforms border for unsupported units', () => { + expect(transformCss([['border', '3em solid black']])).toEqual({ + borderWidth: '3em', + borderColor: 'black', + borderStyle: 'solid', + }) +}) + +it('does not transform border with percentage width', () => { + expect(() => transformCss([['border', '3% solid black']])).toThrow() +}) diff --git a/src/__tests__/flex.js b/src/__tests__/flex.js index 571f3a9..2e1d594 100644 --- a/src/__tests__/flex.js +++ b/src/__tests__/flex.js @@ -77,6 +77,22 @@ it('transforms flex shorthand with flex-basis set to auto', () => { }) }) +it('transforms flex shorthand with flex-basis set to percent', () => { + expect(transformCss([['flex', '1 2 30%']])).toEqual({ + flexGrow: 1, + flexShrink: 2, + flexBasis: '30%', + }) +}) + +it('transforms flex shorthand with flex-basis set to unsupported unit', () => { + expect(transformCss([['flex', '1 2 30em']])).toEqual({ + flexGrow: 1, + flexShrink: 2, + flexBasis: '30em', + }) +}) + it('transforms flex shorthand with flex-basis set to auto appearing first', () => { expect(transformCss([['flex', 'auto 0 1']])).toEqual({ flexGrow: 0, diff --git a/src/__tests__/index.js b/src/__tests__/index.js index c89a0af..1529753 100644 --- a/src/__tests__/index.js +++ b/src/__tests__/index.js @@ -1,14 +1,31 @@ import transformCss, { getStylesForProperty } from '..' it('transforms numbers', () => { - expect( - transformCss([['top', '0'], ['left', '0'], ['right', '0'], ['bottom', '0']]) - ).toEqual({ - top: 0, - left: 0, - right: 0, - bottom: 0, - }) + expect(transformCss([['zIndex', '0']])).toEqual({ zIndex: 0 }) +}) + +it('warns if missing units on unspecialized transform', () => { + const consoleSpy = jest + .spyOn(global.console, 'warn') + .mockImplementation(() => { + // Silence the warning from the test output + }) + + transformCss([['top', '1']]) + expect(consoleSpy).toHaveBeenCalledWith( + 'Expected style "top: 1" to contain units' + ) + + consoleSpy.mockRestore() +}) + +it('does not warn for unitless 0 length on unspecialized transform', () => { + const consoleSpy = jest.spyOn(global.console, 'warn') + + transformCss([['top', '0']]) + expect(consoleSpy).not.toHaveBeenCalled() + + consoleSpy.mockRestore() }) it('allows pixels in unspecialized transform', () => { diff --git a/src/__tests__/placeContent.js b/src/__tests__/placeContent.js new file mode 100644 index 0000000..1901d3a --- /dev/null +++ b/src/__tests__/placeContent.js @@ -0,0 +1,19 @@ +import transformCss from '..' + +it('transforms place content', () => { + expect(transformCss([['place-content', 'center center']])).toEqual({ + alignContent: 'center', + justifyContent: 'center', + }) +}) + +it('transforms place content with one value', () => { + expect(transformCss([['place-content', 'center']])).toEqual({ + alignContent: 'center', + justifyContent: 'stretch', + }) +}) + +it('does not allow justify content without align content', () => { + expect(() => transformCss([['place-content', 'space-everly']])).toThrow() +}) diff --git a/src/devPropertiesWithoutUnitsRegExp.js b/src/devPropertiesWithoutUnitsRegExp.js new file mode 100644 index 0000000..aab05c7 --- /dev/null +++ b/src/devPropertiesWithoutUnitsRegExp.js @@ -0,0 +1,19 @@ +let propertiesWitouthUnits +if (process.env.NODE_ENV !== 'production') { + propertiesWitouthUnits = [ + 'aspectRatio', + 'elevation', + 'flexGrow', + 'flexShrink', + 'opacity', + 'shadowOpacity', + 'zIndex', + ] +} + +const devPropertiesWithUnitsRegExp = + propertiesWitouthUnits != null + ? new RegExp(propertiesWitouthUnits.join('|')) + : null + +export default devPropertiesWithUnitsRegExp diff --git a/src/index.js b/src/index.js index a6fbe41..817c857 100644 --- a/src/index.js +++ b/src/index.js @@ -2,6 +2,7 @@ import parse from 'postcss-value-parser' import camelizeStyleName from 'camelize' import transforms from './transforms/index' +import devPropertiesWithoutUnitsRegExp from './devPropertiesWithoutUnitsRegExp' import TokenStream from './TokenStream' // Note if this is wrong, you'll need to change tokenTypes.js too @@ -9,28 +10,37 @@ const numberOrLengthRe = /^([+-]?(?:\d*\.)?\d+(?:[Ee][+-]?\d+)?)(?:px)?$/i const boolRe = /^true|false$/i const nullRe = /^null$/i const undefinedRe = /^undefined$/i +const numberOnlyRe = /^[1-9.-][\d.Ee+-]*$/ // Undocumented export -export const transformRawValue = input => { - const value = input.trim() +export const transformRawValue = (propName, value) => { + if (process.env.NODE_ENV !== 'production') { + if ( + !devPropertiesWithoutUnitsRegExp.test(propName) && + numberOnlyRe.test(value) + ) { + // eslint-disable-next-line no-console + console.warn(`Expected style "${propName}: ${value}" to contain units`) + } + } const numberMatch = value.match(numberOrLengthRe) if (numberMatch !== null) return Number(numberMatch[1]) - const boolMatch = input.match(boolRe) + const boolMatch = value.match(boolRe) if (boolMatch !== null) return boolMatch[0].toLowerCase() === 'true' - const nullMatch = input.match(nullRe) + const nullMatch = value.match(nullRe) if (nullMatch !== null) return null - const undefinedMatch = input.match(undefinedRe) + const undefinedMatch = value.match(undefinedRe) if (undefinedMatch !== null) return undefined return value } -const baseTransformShorthandValue = (propName, inputValue) => { - const ast = parse(inputValue.trim()) +const baseTransformShorthandValue = (propName, value) => { + const ast = parse(value) const tokenStream = new TokenStream(ast.nodes) return transforms[propName](tokenStream) } @@ -38,21 +48,21 @@ const baseTransformShorthandValue = (propName, inputValue) => { const transformShorthandValue = process.env.NODE_ENV === 'production' ? baseTransformShorthandValue - : (propName, inputValue) => { + : (propName, value) => { try { - return baseTransformShorthandValue(propName, inputValue) + return baseTransformShorthandValue(propName, value) } catch (e) { - throw new Error( - `Failed to parse declaration "${propName}: ${inputValue}"` - ) + throw new Error(`Failed to parse declaration "${propName}: ${value}"`) } } export const getStylesForProperty = (propName, inputValue, allowShorthand) => { const isRawValue = allowShorthand === false || !(propName in transforms) + const value = inputValue.trim() + const propValues = isRawValue - ? { [propName]: transformRawValue(inputValue) } - : transformShorthandValue(propName, inputValue.trim()) + ? { [propName]: transformRawValue(propName, value) } + : transformShorthandValue(propName, value) return propValues } diff --git a/src/transforms/border.js b/src/transforms/border.js index e7a348e..b3685c9 100644 --- a/src/transforms/border.js +++ b/src/transforms/border.js @@ -23,8 +23,8 @@ export default tokenStream => { if (partsParsed !== 0) tokenStream.expect(SPACE) if ( - (borderWidth === undefined && tokenStream.matches(LENGTH)) || - tokenStream.matches(UNSUPPORTED_LENGTH_UNIT) + borderWidth === undefined && + tokenStream.matches(LENGTH, UNSUPPORTED_LENGTH_UNIT) ) { borderWidth = tokenStream.lastValue } else if (borderColor === undefined && tokenStream.matches(COLOR)) { diff --git a/src/transforms/flex.js b/src/transforms/flex.js index df5c5fd..3d5965d 100644 --- a/src/transforms/flex.js +++ b/src/transforms/flex.js @@ -1,6 +1,14 @@ import { tokens } from '../tokenTypes' -const { NONE, AUTO, NUMBER, LENGTH, SPACE } = tokens +const { + NONE, + AUTO, + NUMBER, + LENGTH, + UNSUPPORTED_LENGTH_UNIT, + PERCENT, + SPACE, +} = tokens const defaultFlexGrow = 1 const defaultFlexShrink = 1 @@ -35,7 +43,10 @@ export default tokenStream => { } else { tokenStream.rewind() } - } else if (flexBasis === undefined && tokenStream.matches(LENGTH)) { + } else if ( + flexBasis === undefined && + tokenStream.matches(LENGTH, UNSUPPORTED_LENGTH_UNIT, PERCENT) + ) { flexBasis = tokenStream.lastValue } else if (flexBasis === undefined && tokenStream.matches(AUTO)) { flexBasis = 'auto' diff --git a/src/transforms/index.js b/src/transforms/index.js index 333728b..6076ae5 100644 --- a/src/transforms/index.js +++ b/src/transforms/index.js @@ -5,6 +5,7 @@ import flex from './flex' import flexFlow from './flexFlow' import font from './font' import fontFamily from './fontFamily' +import placeContent from './placeContent' import textDecoration from './textDecoration' import textDecorationLine from './textDecorationLine' import textShadow from './textShadow' @@ -68,6 +69,7 @@ export default { fontWeight, margin, padding, + placeContent, shadowOffset, textShadow, textShadowOffset, diff --git a/src/transforms/placeContent.js b/src/transforms/placeContent.js new file mode 100644 index 0000000..a4c4693 --- /dev/null +++ b/src/transforms/placeContent.js @@ -0,0 +1,26 @@ +import { regExpToken, tokens } from '../tokenTypes' + +const { SPACE } = tokens + +const ALIGN_CONTENT = regExpToken( + /(flex-(?:start|end)|center|stretch|space-(?:between|around))/ +) +const JUSTIFY_CONTENT = regExpToken( + /(flex-(?:start|end)|center|space-(?:between|around|evenly))/ +) + +export default tokenStream => { + const alignContent = tokenStream.expect(ALIGN_CONTENT) + + let justifyContent + if (tokenStream.hasTokens()) { + tokenStream.expect(SPACE) + justifyContent = tokenStream.expect(JUSTIFY_CONTENT) + } else { + justifyContent = 'stretch' + } + + tokenStream.expectEmpty() + + return { alignContent, justifyContent } +} diff --git a/yarn.lock b/yarn.lock index fe37ae5..792a81c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,931 +2,1333 @@ # yarn lockfile v1 -"@babel/code-frame@^7.0.0-beta.35": - version "7.0.0-beta.39" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.0.0-beta.39.tgz#91c90bb65207fc5a55128cb54956ded39e850457" +"@babel/cli@^6.26.0": + version "7.6.2" + resolved "https://registry.yarnpkg.com/@babel/cli/-/cli-7.6.2.tgz#4ce8b5b4b2e4b4c1b7bd841cec62085e2dfc4465" + integrity sha512-JDZ+T/br9pPfT2lmAMJypJDTTTHM9ePD/ED10TRjRzJVdEVy+JB3iRlhzYmTt5YkNgHvxWGlUVnLtdv6ruiDrQ== dependencies: - chalk "^2.0.0" - esutils "^2.0.2" - js-tokens "^3.0.0" - -abab@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/abab/-/abab-1.0.4.tgz#5faad9c2c07f60dd76770f71cf025b62a63cfd4e" - -abbrev@1: - version "1.0.9" - resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.0.9.tgz#91b4792588a7738c25f35dd6f63752a2f8776135" + commander "^2.8.1" + convert-source-map "^1.1.0" + fs-readdir-recursive "^1.1.0" + glob "^7.0.0" + lodash "^4.17.13" + mkdirp "^0.5.1" + output-file-sync "^2.0.0" + slash "^2.0.0" + source-map "^0.5.0" + optionalDependencies: + chokidar "^2.1.8" + +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.5.5": + version "7.5.5" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.5.5.tgz#bc0782f6d69f7b7d49531219699b988f669a8f9d" + integrity sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw== + dependencies: + "@babel/highlight" "^7.0.0" + +"@babel/core@^7.1.0": + version "7.6.2" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.6.2.tgz#069a776e8d5e9eefff76236bc8845566bd31dd91" + integrity sha512-l8zto/fuoZIbncm+01p8zPSDZu/VuuJhAfA7d/AbzM09WR7iVhavvfNDYCNpo1VvLk6E6xgAoP9P+/EMJHuRkQ== + dependencies: + "@babel/code-frame" "^7.5.5" + "@babel/generator" "^7.6.2" + "@babel/helpers" "^7.6.2" + "@babel/parser" "^7.6.2" + "@babel/template" "^7.6.0" + "@babel/traverse" "^7.6.2" + "@babel/types" "^7.6.0" + convert-source-map "^1.1.0" + debug "^4.1.0" + json5 "^2.1.0" + lodash "^4.17.13" + resolve "^1.3.2" + semver "^5.4.1" + source-map "^0.5.0" -acorn-globals@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-4.1.0.tgz#ab716025dbe17c54d3ef81d32ece2b2d99fe2538" +"@babel/generator@^7.4.0", "@babel/generator@^7.6.2": + version "7.6.2" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.6.2.tgz#dac8a3c2df118334c2a29ff3446da1636a8f8c03" + integrity sha512-j8iHaIW4gGPnViaIHI7e9t/Hl8qLjERI6DcV9kEpAIDJsAOrcnXqRS7t+QbhL76pwbtqP+QCQLL0z1CyVmtjjQ== dependencies: - acorn "^5.0.0" + "@babel/types" "^7.6.0" + jsesc "^2.5.1" + lodash "^4.17.13" + source-map "^0.5.0" -acorn-jsx@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-3.0.1.tgz#afdf9488fb1ecefc8348f6fb22f464e32a58b36b" +"@babel/helper-annotate-as-pure@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.0.0.tgz#323d39dd0b50e10c7c06ca7d7638e6864d8c5c32" + integrity sha512-3UYcJUj9kvSLbLbUIfQTqzcy5VX7GRZ/CCDrnOaZorFFM01aXp1+GJwuFGV4NDDoAS+mOUyHcO6UD/RfqOks3Q== dependencies: - acorn "^3.0.4" - -acorn@^3.0.4: - version "3.3.0" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-3.3.0.tgz#45e37fb39e8da3f25baee3ff5369e2bb5f22017a" - -acorn@^5.0.0, acorn@^5.3.0, acorn@^5.4.0: - version "5.4.1" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.4.1.tgz#fdc58d9d17f4a4e98d102ded826a9b9759125102" + "@babel/types" "^7.0.0" -ajv-keywords@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-2.1.1.tgz#617997fc5f60576894c435f940d819e135b80762" - -ajv@^4.9.1: - version "4.11.8" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-4.11.8.tgz#82ffb02b29e662ae53bdc20af15947706739c536" +"@babel/helper-builder-binary-assignment-operator-visitor@^7.1.0": + version "7.1.0" + resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.1.0.tgz#6b69628dfe4087798e0c4ed98e3d4a6b2fbd2f5f" + integrity sha512-qNSR4jrmJ8M1VMM9tibvyRAHXQs2PmaksQF7c1CGJNipfe3D8p+wgNwgso/P2A2r2mdgBWAXljNWR0QRZAMW8w== dependencies: - co "^4.6.0" - json-stable-stringify "^1.0.1" + "@babel/helper-explode-assignable-expression" "^7.1.0" + "@babel/types" "^7.0.0" -ajv@^5.1.0, ajv@^5.2.3, ajv@^5.3.0: - version "5.5.2" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.5.2.tgz#73b5eeca3fab653e3d3f9422b341ad42205dc965" +"@babel/helper-call-delegate@^7.4.4": + version "7.4.4" + resolved "https://registry.yarnpkg.com/@babel/helper-call-delegate/-/helper-call-delegate-7.4.4.tgz#87c1f8ca19ad552a736a7a27b1c1fcf8b1ff1f43" + integrity sha512-l79boDFJ8S1c5hvQvG+rc+wHw6IuH7YldmRKsYtpbawsxURu/paVy57FZMomGK22/JckepaikOkY0MoAmdyOlQ== dependencies: - co "^4.6.0" - fast-deep-equal "^1.0.0" - fast-json-stable-stringify "^2.0.0" - json-schema-traverse "^0.3.0" + "@babel/helper-hoist-variables" "^7.4.4" + "@babel/traverse" "^7.4.4" + "@babel/types" "^7.4.4" -align-text@^0.1.1, align-text@^0.1.3: - version "0.1.4" - resolved "https://registry.yarnpkg.com/align-text/-/align-text-0.1.4.tgz#0cd90a561093f35d0a99256c22b7069433fad117" +"@babel/helper-define-map@^7.5.5": + version "7.5.5" + resolved "https://registry.yarnpkg.com/@babel/helper-define-map/-/helper-define-map-7.5.5.tgz#3dec32c2046f37e09b28c93eb0b103fd2a25d369" + integrity sha512-fTfxx7i0B5NJqvUOBBGREnrqbTxRh7zinBANpZXAVDlsZxYdclDp467G1sQ8VZYMnAURY3RpBUAgOYT9GfzHBg== dependencies: - kind-of "^3.0.2" - longest "^1.0.1" - repeat-string "^1.5.2" + "@babel/helper-function-name" "^7.1.0" + "@babel/types" "^7.5.5" + lodash "^4.17.13" -amdefine@>=0.0.4: - version "1.0.1" - resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" +"@babel/helper-explode-assignable-expression@^7.1.0": + version "7.1.0" + resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.1.0.tgz#537fa13f6f1674df745b0c00ec8fe4e99681c8f6" + integrity sha512-NRQpfHrJ1msCHtKjbzs9YcMmJZOg6mQMmGRB+hbamEdG5PNpaSm95275VD92DvJKuyl0s2sFiDmMZ+EnnvufqA== + dependencies: + "@babel/traverse" "^7.1.0" + "@babel/types" "^7.0.0" -ansi-escapes@^1.0.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-1.4.0.tgz#d3a8a83b319aa67793662b13e761c7911422306e" +"@babel/helper-function-name@^7.1.0": + version "7.1.0" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.1.0.tgz#a0ceb01685f73355d4360c1247f582bfafc8ff53" + integrity sha512-A95XEoCpb3TO+KZzJ4S/5uW5fNe26DjBGqf1o9ucyLyCmi1dXq/B3c8iaWTfBk3VvetUxl16e8tIrd5teOCfGw== + dependencies: + "@babel/helper-get-function-arity" "^7.0.0" + "@babel/template" "^7.1.0" + "@babel/types" "^7.0.0" -ansi-escapes@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.0.0.tgz#ec3e8b4e9f8064fc02c3ac9b65f1c275bda8ef92" +"@babel/helper-get-function-arity@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0.tgz#83572d4320e2a4657263734113c42868b64e49c3" + integrity sha512-r2DbJeg4svYvt3HOS74U4eWKsUAMRH01Z1ds1zx8KNTPtpTL5JAsdFv8BNyOpVqdFhHkkRDIg5B4AsxmkjAlmQ== + dependencies: + "@babel/types" "^7.0.0" -ansi-regex@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" +"@babel/helper-hoist-variables@^7.4.4": + version "7.4.4" + resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.4.4.tgz#0298b5f25c8c09c53102d52ac4a98f773eb2850a" + integrity sha512-VYk2/H/BnYbZDDg39hr3t2kKyifAm1W6zHRfhx8jGjIHpQEBv9dry7oQ2f3+J703TLu69nYdxsovl0XYfcnK4w== + dependencies: + "@babel/types" "^7.4.4" -ansi-regex@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" +"@babel/helper-member-expression-to-functions@^7.5.5": + version "7.5.5" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.5.5.tgz#1fb5b8ec4453a93c439ee9fe3aeea4a84b76b590" + integrity sha512-5qZ3D1uMclSNqYcXqiHoA0meVdv+xUEex9em2fqMnrk/scphGlGgg66zjMrPJESPwrFJ6sbfFQYUSa0Mz7FabA== + dependencies: + "@babel/types" "^7.5.5" -ansi-styles@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" +"@babel/helper-module-imports@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.0.0.tgz#96081b7111e486da4d2cd971ad1a4fe216cc2e3d" + integrity sha512-aP/hlLq01DWNEiDg4Jn23i+CXxW/owM4WpDLFUbpjxe4NS3BhLVZQ5i7E0ZrxuQ/vwekIeciyamgB1UIYxxM6A== + dependencies: + "@babel/types" "^7.0.0" -ansi-styles@^3.1.0, ansi-styles@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.0.tgz#c159b8d5be0f9e5a6f346dab94f16ce022161b88" +"@babel/helper-module-transforms@^7.1.0", "@babel/helper-module-transforms@^7.4.4": + version "7.5.5" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.5.5.tgz#f84ff8a09038dcbca1fd4355661a500937165b4a" + integrity sha512-jBeCvETKuJqeiaCdyaheF40aXnnU1+wkSiUs/IQg3tB85up1LyL8x77ClY8qJpuRJUcXQo+ZtdNESmZl4j56Pw== dependencies: - color-convert "^1.9.0" + "@babel/helper-module-imports" "^7.0.0" + "@babel/helper-simple-access" "^7.1.0" + "@babel/helper-split-export-declaration" "^7.4.4" + "@babel/template" "^7.4.4" + "@babel/types" "^7.5.5" + lodash "^4.17.13" -any-observable@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/any-observable/-/any-observable-0.2.0.tgz#c67870058003579009083f54ac0abafb5c33d242" +"@babel/helper-optimise-call-expression@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.0.0.tgz#a2920c5702b073c15de51106200aa8cad20497d5" + integrity sha512-u8nd9NQePYNQV8iPWu/pLLYBqZBa4ZaY1YWRFMuxrid94wKI1QNt67NEZ7GAe5Kc/0LLScbim05xZFWkAdrj9g== + dependencies: + "@babel/types" "^7.0.0" -anymatch@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-1.3.0.tgz#a3e52fa39168c825ff57b0248126ce5a8ff95507" +"@babel/helper-plugin-utils@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.0.0.tgz#bbb3fbee98661c569034237cc03967ba99b4f250" + integrity sha512-CYAOUCARwExnEixLdB6sDm2dIJ/YgEAKDM1MOeMeZu9Ld/bDgVo8aiWrXwcY7OBh+1Ea2uUcVRcxKk0GJvW7QA== + +"@babel/helper-regex@^7.0.0", "@babel/helper-regex@^7.4.4": + version "7.5.5" + resolved "https://registry.yarnpkg.com/@babel/helper-regex/-/helper-regex-7.5.5.tgz#0aa6824f7100a2e0e89c1527c23936c152cab351" + integrity sha512-CkCYQLkfkiugbRDO8eZn6lRuR8kzZoGXCg3149iTk5se7g6qykSpy3+hELSwquhu+TgHn8nkLiBwHvNX8Hofcw== + dependencies: + lodash "^4.17.13" + +"@babel/helper-remap-async-to-generator@^7.1.0": + version "7.1.0" + resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.1.0.tgz#361d80821b6f38da75bd3f0785ece20a88c5fe7f" + integrity sha512-3fOK0L+Fdlg8S5al8u/hWE6vhufGSn0bN09xm2LXMy//REAF8kDCrYoOBKYmA8m5Nom+sV9LyLCwrFynA8/slg== + dependencies: + "@babel/helper-annotate-as-pure" "^7.0.0" + "@babel/helper-wrap-function" "^7.1.0" + "@babel/template" "^7.1.0" + "@babel/traverse" "^7.1.0" + "@babel/types" "^7.0.0" + +"@babel/helper-replace-supers@^7.5.5": + version "7.5.5" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.5.5.tgz#f84ce43df031222d2bad068d2626cb5799c34bc2" + integrity sha512-XvRFWrNnlsow2u7jXDuH4jDDctkxbS7gXssrP4q2nUD606ukXHRvydj346wmNg+zAgpFx4MWf4+usfC93bElJg== + dependencies: + "@babel/helper-member-expression-to-functions" "^7.5.5" + "@babel/helper-optimise-call-expression" "^7.0.0" + "@babel/traverse" "^7.5.5" + "@babel/types" "^7.5.5" + +"@babel/helper-simple-access@^7.1.0": + version "7.1.0" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.1.0.tgz#65eeb954c8c245beaa4e859da6188f39d71e585c" + integrity sha512-Vk+78hNjRbsiu49zAPALxTb+JUQCz1aolpd8osOF16BGnLtseD21nbHgLPGUwrXEurZgiCOUmvs3ExTu4F5x6w== + dependencies: + "@babel/template" "^7.1.0" + "@babel/types" "^7.0.0" + +"@babel/helper-split-export-declaration@^7.4.4": + version "7.4.4" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.4.4.tgz#ff94894a340be78f53f06af038b205c49d993677" + integrity sha512-Ro/XkzLf3JFITkW6b+hNxzZ1n5OQ80NvIUdmHspih1XAhtN3vPTuUFT4eQnela+2MaZ5ulH+iyP513KJrxbN7Q== + dependencies: + "@babel/types" "^7.4.4" + +"@babel/helper-wrap-function@^7.1.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.2.0.tgz#c4e0012445769e2815b55296ead43a958549f6fa" + integrity sha512-o9fP1BZLLSrYlxYEYyl2aS+Flun5gtjTIG8iln+XuEzQTs0PLagAGSXUcqruJwD5fM48jzIEggCKpIfWTcR7pQ== + dependencies: + "@babel/helper-function-name" "^7.1.0" + "@babel/template" "^7.1.0" + "@babel/traverse" "^7.1.0" + "@babel/types" "^7.2.0" + +"@babel/helpers@^7.6.2": + version "7.6.2" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.6.2.tgz#681ffe489ea4dcc55f23ce469e58e59c1c045153" + integrity sha512-3/bAUL8zZxYs1cdX2ilEE0WobqbCmKWr/889lf2SS0PpDcpEIY8pb1CCyz0pEcX3pEb+MCbks1jIokz2xLtGTA== + dependencies: + "@babel/template" "^7.6.0" + "@babel/traverse" "^7.6.2" + "@babel/types" "^7.6.0" + +"@babel/highlight@^7.0.0": + version "7.5.0" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.5.0.tgz#56d11312bd9248fa619591d02472be6e8cb32540" + integrity sha512-7dV4eu9gBxoM0dAnj/BCFDW9LFU0zvTrkq0ugM7pnHEgguOEeOz1so2ZghEdzviYzQEED0r4EAgpsBChKy1TRQ== dependencies: - arrify "^1.0.0" - micromatch "^2.1.5" + chalk "^2.0.0" + esutils "^2.0.2" + js-tokens "^4.0.0" -app-root-path@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/app-root-path/-/app-root-path-2.0.1.tgz#cd62dcf8e4fd5a417efc664d2e5b10653c651b46" +"@babel/parser@^7.1.0", "@babel/parser@^7.4.3", "@babel/parser@^7.6.0", "@babel/parser@^7.6.2": + version "7.6.2" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.6.2.tgz#205e9c95e16ba3b8b96090677a67c9d6075b70a1" + integrity sha512-mdFqWrSPCmikBoaBYMuBulzTIKuXVPtEISFbRRVNwMWpCms/hmE2kRq0bblUHaNRKrjRlmVbx1sDHmjmRgD2Xg== -append-transform@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/append-transform/-/append-transform-0.4.0.tgz#d76ebf8ca94d276e247a36bad44a4b74ab611991" +"@babel/plugin-proposal-async-generator-functions@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.2.0.tgz#b289b306669dce4ad20b0252889a15768c9d417e" + integrity sha512-+Dfo/SCQqrwx48ptLVGLdE39YtWRuKc/Y9I5Fy0P1DDBB9lsAHpjcEJQt+4IifuSOSTLBKJObJqMvaO1pIE8LQ== dependencies: - default-require-extensions "^1.0.0" + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-remap-async-to-generator" "^7.1.0" + "@babel/plugin-syntax-async-generators" "^7.2.0" -aproba@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.0.4.tgz#2713680775e7614c8ba186c065d4e2e52d1072c0" +"@babel/plugin-proposal-dynamic-import@^7.5.0": + version "7.5.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.5.0.tgz#e532202db4838723691b10a67b8ce509e397c506" + integrity sha512-x/iMjggsKTFHYC6g11PL7Qy58IK8H5zqfm9e6hu4z1iH2IRyAp9u9dL80zA6R76yFovETFLKz2VJIC2iIPBuFw== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-syntax-dynamic-import" "^7.2.0" -are-we-there-yet@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.2.tgz#80e470e95a084794fe1899262c5667c6e88de1b3" +"@babel/plugin-proposal-json-strings@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.2.0.tgz#568ecc446c6148ae6b267f02551130891e29f317" + integrity sha512-MAFV1CA/YVmYwZG0fBQyXhmj0BHCB5egZHCKWIFVv/XCxAeVGIHfos3SwDck4LvCllENIAg7xMKOG5kH0dzyUg== dependencies: - delegates "^1.0.0" - readable-stream "^2.0.0 || ^1.1.13" + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-syntax-json-strings" "^7.2.0" -argparse@^1.0.7: - version "1.0.9" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.9.tgz#73d83bc263f86e97f8cc4f6bae1b0e90a7d22c86" +"@babel/plugin-proposal-object-rest-spread@^7.6.2": + version "7.6.2" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.6.2.tgz#8ffccc8f3a6545e9f78988b6bf4fe881b88e8096" + integrity sha512-LDBXlmADCsMZV1Y9OQwMc0MyGZ8Ta/zlD9N67BfQT8uYwkRswiu2hU6nJKrjrt/58aH/vqfQlR/9yId/7A2gWw== dependencies: - sprintf-js "~1.0.2" + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-syntax-object-rest-spread" "^7.2.0" + +"@babel/plugin-proposal-optional-catch-binding@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.2.0.tgz#135d81edb68a081e55e56ec48541ece8065c38f5" + integrity sha512-mgYj3jCcxug6KUcX4OBoOJz3CMrwRfQELPQ5560F70YQUBZB7uac9fqaWamKR1iWUzGiK2t0ygzjTScZnVz75g== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-syntax-optional-catch-binding" "^7.2.0" + +"@babel/plugin-proposal-unicode-property-regex@^7.6.2": + version "7.6.2" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.6.2.tgz#05413762894f41bfe42b9a5e80919bd575dcc802" + integrity sha512-NxHETdmpeSCtiatMRYWVJo7266rrvAC3DTeG5exQBIH/fMIUK7ejDNznBbn3HQl/o9peymRRg7Yqkx6PdUXmMw== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-regex" "^7.4.4" + regexpu-core "^4.6.0" -arr-diff@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-2.0.0.tgz#8f3b827f955a8bd669697e4a4256ac3ceae356cf" +"@babel/plugin-syntax-async-generators@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.2.0.tgz#69e1f0db34c6f5a0cf7e2b3323bf159a76c8cb7f" + integrity sha512-1ZrIRBv2t0GSlcwVoQ6VgSLpLgiN/FVQUzt9znxo7v2Ov4jJrs8RY8tv0wvDmFN3qIdMKWrmMMW6yZ0G19MfGg== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-syntax-dynamic-import@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.2.0.tgz#69c159ffaf4998122161ad8ebc5e6d1f55df8612" + integrity sha512-mVxuJ0YroI/h/tbFTPGZR8cv6ai+STMKNBq0f8hFxsxWjl94qqhsb+wXbpNMDPU3cfR1TIsVFzU3nXyZMqyK4w== dependencies: - arr-flatten "^1.0.1" + "@babel/helper-plugin-utils" "^7.0.0" -arr-flatten@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.0.1.tgz#e5ffe54d45e19f32f216e91eb99c8ce892bb604b" +"@babel/plugin-syntax-json-strings@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.2.0.tgz#72bd13f6ffe1d25938129d2a186b11fd62951470" + integrity sha512-5UGYnMSLRE1dqqZwug+1LISpA403HzlSfsg6P9VXU6TBjcSHeNlw4DxDx7LgpF+iKZoOG/+uzqoRHTdcUpiZNg== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" -array-equal@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/array-equal/-/array-equal-1.0.0.tgz#8c2a5ef2472fd9ea742b04c77a75093ba2757c93" +"@babel/plugin-syntax-object-rest-spread@^7.0.0", "@babel/plugin-syntax-object-rest-spread@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.2.0.tgz#3b7a3e733510c57e820b9142a6579ac8b0dfad2e" + integrity sha512-t0JKGgqk2We+9may3t0xDdmneaXmyxq0xieYcKHxIsrJO64n1OiMWNUtc5gQK1PA0NpdCRrtZp4z+IUaKugrSA== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" -array-union@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" +"@babel/plugin-syntax-optional-catch-binding@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.2.0.tgz#a94013d6eda8908dfe6a477e7f9eda85656ecf5c" + integrity sha512-bDe4xKNhb0LI7IvZHiA13kff0KEfaGX/Hv4lMA9+7TEc63hMNvfKo6ZFpXhKuEp+II/q35Gc4NoMeDZyaUbj9w== dependencies: - array-uniq "^1.0.1" + "@babel/helper-plugin-utils" "^7.0.0" -array-uniq@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" +"@babel/plugin-transform-arrow-functions@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.2.0.tgz#9aeafbe4d6ffc6563bf8f8372091628f00779550" + integrity sha512-ER77Cax1+8/8jCB9fo4Ud161OZzWN5qawi4GusDuRLcDbDG+bIGYY20zb2dfAFdTRGzrfq2xZPvF0R64EHnimg== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" -array-unique@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53" +"@babel/plugin-transform-async-to-generator@^7.5.0": + version "7.5.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.5.0.tgz#89a3848a0166623b5bc481164b5936ab947e887e" + integrity sha512-mqvkzwIGkq0bEF1zLRRiTdjfomZJDV33AH3oQzHVGkI2VzEmXLpKKOBvEVaFZBJdN0XTyH38s9j/Kiqr68dggg== + dependencies: + "@babel/helper-module-imports" "^7.0.0" + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-remap-async-to-generator" "^7.1.0" -arrify@^1.0.0, arrify@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" +"@babel/plugin-transform-block-scoped-functions@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.2.0.tgz#5d3cc11e8d5ddd752aa64c9148d0db6cb79fd190" + integrity sha512-ntQPR6q1/NKuphly49+QiQiTN0O63uOwjdD6dhIjSWBI5xlrbUFh720TIpzBhpnrLfv2tNH/BXvLIab1+BAI0w== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" -asn1@~0.2.3: - version "0.2.3" - resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.3.tgz#dac8787713c9966849fc8180777ebe9c1ddf3b86" +"@babel/plugin-transform-block-scoping@^7.6.2": + version "7.6.2" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.6.2.tgz#96c33ab97a9ae500cc6f5b19e04a7e6553360a79" + integrity sha512-zZT8ivau9LOQQaOGC7bQLQOT4XPkPXgN2ERfUgk1X8ql+mVkLc4E8eKk+FO3o0154kxzqenWCorfmEXpEZcrSQ== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + lodash "^4.17.13" -assert-plus@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-0.2.0.tgz#d74e1b87e7affc0db8aadb7021f3fe48101ab234" +"@babel/plugin-transform-classes@^7.5.5": + version "7.5.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.5.5.tgz#d094299d9bd680a14a2a0edae38305ad60fb4de9" + integrity sha512-U2htCNK/6e9K7jGyJ++1p5XRU+LJjrwtoiVn9SzRlDT2KubcZ11OOwy3s24TjHxPgxNwonCYP7U2K51uVYCMDg== + dependencies: + "@babel/helper-annotate-as-pure" "^7.0.0" + "@babel/helper-define-map" "^7.5.5" + "@babel/helper-function-name" "^7.1.0" + "@babel/helper-optimise-call-expression" "^7.0.0" + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-replace-supers" "^7.5.5" + "@babel/helper-split-export-declaration" "^7.4.4" + globals "^11.1.0" -assert-plus@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" +"@babel/plugin-transform-computed-properties@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.2.0.tgz#83a7df6a658865b1c8f641d510c6f3af220216da" + integrity sha512-kP/drqTxY6Xt3NNpKiMomfgkNn4o7+vKxK2DDKcBG9sHj51vHqMBGy8wbDS/J4lMxnqs153/T3+DmCEAkC5cpA== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" -astral-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" +"@babel/plugin-transform-destructuring@^7.6.0": + version "7.6.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.6.0.tgz#44bbe08b57f4480094d57d9ffbcd96d309075ba6" + integrity sha512-2bGIS5P1v4+sWTCnKNDZDxbGvEqi0ijeqM/YqHtVGrvG2y0ySgnEEhXErvE9dA0bnIzY9bIzdFK0jFA46ASIIQ== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" -async-each@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.1.tgz#19d386a1d9edc6e7c1c85d388aedbcc56d33602d" +"@babel/plugin-transform-dotall-regex@^7.6.2": + version "7.6.2" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.6.2.tgz#44abb948b88f0199a627024e1508acaf8dc9b2f9" + integrity sha512-KGKT9aqKV+9YMZSkowzYoYEiHqgaDhGmPNZlZxX6UeHC4z30nC1J9IrZuGqbYFB1jaIGdv91ujpze0exiVK8bA== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-regex" "^7.4.4" + regexpu-core "^4.6.0" -async-limiter@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.0.tgz#78faed8c3d074ab81f22b4e985d79e8738f720f8" +"@babel/plugin-transform-duplicate-keys@^7.5.0": + version "7.5.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.5.0.tgz#c5dbf5106bf84cdf691222c0974c12b1df931853" + integrity sha512-igcziksHizyQPlX9gfSjHkE2wmoCH3evvD2qR5w29/Dk0SMKE/eOI7f1HhBdNhR/zxJDqrgpoDTq5YSLH/XMsQ== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" -async@^1.4.0: - version "1.5.2" - resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" +"@babel/plugin-transform-exponentiation-operator@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.2.0.tgz#a63868289e5b4007f7054d46491af51435766008" + integrity sha512-umh4hR6N7mu4Elq9GG8TOu9M0bakvlsREEC+ialrQN6ABS4oDQ69qJv1VtR3uxlKMCQMCvzk7vr17RHKcjx68A== + dependencies: + "@babel/helper-builder-binary-assignment-operator-visitor" "^7.1.0" + "@babel/helper-plugin-utils" "^7.0.0" -async@^2.1.4: - version "2.1.4" - resolved "https://registry.yarnpkg.com/async/-/async-2.1.4.tgz#2d2160c7788032e4dd6cbe2502f1f9a2c8f6cde4" +"@babel/plugin-transform-for-of@^7.4.4": + version "7.4.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.4.4.tgz#0267fc735e24c808ba173866c6c4d1440fc3c556" + integrity sha512-9T/5Dlr14Z9TIEXLXkt8T1DU7F24cbhwhMNUziN3hB1AXoZcdzPcTiKGRn/6iOymDqtTKWnr/BtRKN9JwbKtdQ== dependencies: - lodash "^4.14.0" + "@babel/helper-plugin-utils" "^7.0.0" -async@~0.2.6: - version "0.2.10" - resolved "https://registry.yarnpkg.com/async/-/async-0.2.10.tgz#b6bbe0b0674b9d719708ca38de8c237cb526c3d1" +"@babel/plugin-transform-function-name@^7.4.4": + version "7.4.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.4.4.tgz#e1436116abb0610c2259094848754ac5230922ad" + integrity sha512-iU9pv7U+2jC9ANQkKeNF6DrPy4GBa4NWQtl6dHB4Pb3izX2JOEvDTFarlNsBj/63ZEzNNIAMs3Qw4fNCcSOXJA== + dependencies: + "@babel/helper-function-name" "^7.1.0" + "@babel/helper-plugin-utils" "^7.0.0" -asynckit@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" +"@babel/plugin-transform-literals@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.2.0.tgz#690353e81f9267dad4fd8cfd77eafa86aba53ea1" + integrity sha512-2ThDhm4lI4oV7fVQ6pNNK+sx+c/GM5/SaML0w/r4ZB7sAneD/piDJtwdKlNckXeyGK7wlwg2E2w33C/Hh+VFCg== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" -aws-sign2@~0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.6.0.tgz#14342dd38dbcc94d0e5b87d763cd63612c0e794f" +"@babel/plugin-transform-member-expression-literals@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.2.0.tgz#fa10aa5c58a2cb6afcf2c9ffa8cb4d8b3d489a2d" + integrity sha512-HiU3zKkSU6scTidmnFJ0bMX8hz5ixC93b4MHMiYebmk2lUVNGOboPsqQvx5LzooihijUoLR/v7Nc1rbBtnc7FA== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" -aws-sign2@~0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" +"@babel/plugin-transform-modules-amd@^7.5.0": + version "7.5.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.5.0.tgz#ef00435d46da0a5961aa728a1d2ecff063e4fb91" + integrity sha512-n20UsQMKnWrltocZZm24cRURxQnWIvsABPJlw/fvoy9c6AgHZzoelAIzajDHAQrDpuKFFPPcFGd7ChsYuIUMpg== + dependencies: + "@babel/helper-module-transforms" "^7.1.0" + "@babel/helper-plugin-utils" "^7.0.0" + babel-plugin-dynamic-import-node "^2.3.0" -aws4@^1.2.1: - version "1.5.0" - resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.5.0.tgz#0a29ffb79c31c9e712eeb087e8e7a64b4a56d755" +"@babel/plugin-transform-modules-commonjs@^7.6.0": + version "7.6.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.6.0.tgz#39dfe957de4420445f1fcf88b68a2e4aa4515486" + integrity sha512-Ma93Ix95PNSEngqomy5LSBMAQvYKVe3dy+JlVJSHEXZR5ASL9lQBedMiCyVtmTLraIDVRE3ZjTZvmXXD2Ozw3g== + dependencies: + "@babel/helper-module-transforms" "^7.4.4" + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-simple-access" "^7.1.0" + babel-plugin-dynamic-import-node "^2.3.0" -aws4@^1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.6.0.tgz#83ef5ca860b2b32e4a0deedee8c771b9db57471e" +"@babel/plugin-transform-modules-systemjs@^7.5.0": + version "7.5.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.5.0.tgz#e75266a13ef94202db2a0620977756f51d52d249" + integrity sha512-Q2m56tyoQWmuNGxEtUyeEkm6qJYFqs4c+XyXH5RAuYxObRNz9Zgj/1g2GMnjYp2EUyEy7YTrxliGCXzecl/vJg== + dependencies: + "@babel/helper-hoist-variables" "^7.4.4" + "@babel/helper-plugin-utils" "^7.0.0" + babel-plugin-dynamic-import-node "^2.3.0" -babel-cli@^6.26.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-cli/-/babel-cli-6.26.0.tgz#502ab54874d7db88ad00b887a06383ce03d002f1" +"@babel/plugin-transform-modules-umd@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.2.0.tgz#7678ce75169f0877b8eb2235538c074268dd01ae" + integrity sha512-BV3bw6MyUH1iIsGhXlOK6sXhmSarZjtJ/vMiD9dNmpY8QXFFQTj+6v92pcfy1iqa8DeAfJFwoxcrS/TUZda6sw== dependencies: - babel-core "^6.26.0" - babel-polyfill "^6.26.0" - babel-register "^6.26.0" - babel-runtime "^6.26.0" - 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" - optionalDependencies: - chokidar "^1.6.1" + "@babel/helper-module-transforms" "^7.1.0" + "@babel/helper-plugin-utils" "^7.0.0" -babel-code-frame@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.22.0.tgz#027620bee567a88c32561574e7fd0801d33118e4" +"@babel/plugin-transform-named-capturing-groups-regex@^7.6.2": + version "7.6.2" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.6.2.tgz#c1ca0bb84b94f385ca302c3932e870b0fb0e522b" + integrity sha512-xBdB+XOs+lgbZc2/4F5BVDVcDNS4tcSKQc96KmlqLEAwz6tpYPEvPdmDfvVG0Ssn8lAhronaRs6Z6KSexIpK5g== dependencies: - chalk "^1.1.0" - esutils "^2.0.2" - js-tokens "^3.0.0" + regexpu-core "^4.6.0" -babel-code-frame@^6.26.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b" +"@babel/plugin-transform-new-target@^7.4.4": + version "7.4.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.4.4.tgz#18d120438b0cc9ee95a47f2c72bc9768fbed60a5" + integrity sha512-r1z3T2DNGQwwe2vPGZMBNjioT2scgWzK9BCnDEh+46z8EEwXBq24uRzd65I7pjtugzPSj921aM15RpESgzsSuA== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-object-super@^7.5.5": + version "7.5.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.5.5.tgz#c70021df834073c65eb613b8679cc4a381d1a9f9" + integrity sha512-un1zJQAhSosGFBduPgN/YFNvWVpRuHKU7IHBglLoLZsGmruJPOo6pbInneflUdmq7YvSVqhpPs5zdBvLnteltQ== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-replace-supers" "^7.5.5" + +"@babel/plugin-transform-parameters@^7.4.4": + version "7.4.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.4.4.tgz#7556cf03f318bd2719fe4c922d2d808be5571e16" + integrity sha512-oMh5DUO1V63nZcu/ZVLQFqiihBGo4OpxJxR1otF50GMeCLiRx5nUdtokd+u9SuVJrvvuIh9OosRFPP4pIPnwmw== + dependencies: + "@babel/helper-call-delegate" "^7.4.4" + "@babel/helper-get-function-arity" "^7.0.0" + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-property-literals@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.2.0.tgz#03e33f653f5b25c4eb572c98b9485055b389e905" + integrity sha512-9q7Dbk4RhgcLp8ebduOpCbtjh7C0itoLYHXd9ueASKAG/is5PQtMR5VJGka9NKqGhYEGn5ITahd4h9QeBMylWQ== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-regenerator@^7.4.5": + version "7.4.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.4.5.tgz#629dc82512c55cee01341fb27bdfcb210354680f" + integrity sha512-gBKRh5qAaCWntnd09S8QC7r3auLCqq5DI6O0DlfoyDjslSBVqBibrMdsqO+Uhmx3+BlOmE/Kw1HFxmGbv0N9dA== + dependencies: + regenerator-transform "^0.14.0" + +"@babel/plugin-transform-reserved-words@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.2.0.tgz#4792af87c998a49367597d07fedf02636d2e1634" + integrity sha512-fz43fqW8E1tAB3DKF19/vxbpib1fuyCwSPE418ge5ZxILnBhWyhtPgz8eh1RCGGJlwvksHkyxMxh0eenFi+kFw== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-shorthand-properties@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.2.0.tgz#6333aee2f8d6ee7e28615457298934a3b46198f0" + integrity sha512-QP4eUM83ha9zmYtpbnyjTLAGKQritA5XW/iG9cjtuOI8s1RuL/3V6a3DeSHfKutJQ+ayUfeZJPcnCYEQzaPQqg== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-spread@^7.6.2": + version "7.6.2" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.6.2.tgz#fc77cf798b24b10c46e1b51b1b88c2bf661bb8dd" + integrity sha512-DpSvPFryKdK1x+EDJYCy28nmAaIMdxmhot62jAXF/o99iA33Zj2Lmcp3vDmz+MUh0LNYVPvfj5iC3feb3/+PFg== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-sticky-regex@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.2.0.tgz#a1e454b5995560a9c1e0d537dfc15061fd2687e1" + integrity sha512-KKYCoGaRAf+ckH8gEL3JHUaFVyNHKe3ASNsZ+AlktgHevvxGigoIttrEJb8iKN03Q7Eazlv1s6cx2B2cQ3Jabw== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-regex" "^7.0.0" + +"@babel/plugin-transform-template-literals@^7.4.4": + version "7.4.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.4.4.tgz#9d28fea7bbce637fb7612a0750989d8321d4bcb0" + integrity sha512-mQrEC4TWkhLN0z8ygIvEL9ZEToPhG5K7KDW3pzGqOfIGZ28Jb0POUkeWcoz8HnHvhFy6dwAT1j8OzqN8s804+g== + dependencies: + "@babel/helper-annotate-as-pure" "^7.0.0" + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-typeof-symbol@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.2.0.tgz#117d2bcec2fbf64b4b59d1f9819894682d29f2b2" + integrity sha512-2LNhETWYxiYysBtrBTqL8+La0jIoQQnIScUJc74OYvUGRmkskNY4EzLCnjHBzdmb38wqtTaixpo1NctEcvMDZw== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-unicode-regex@^7.6.2": + version "7.6.2" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.6.2.tgz#b692aad888a7e8d8b1b214be6b9dc03d5031f698" + integrity sha512-orZI6cWlR3nk2YmYdb0gImrgCUwb5cBUwjf6Ks6dvNVvXERkwtJWOQaEOjPiu0Gu1Tq6Yq/hruCZZOOi9F34Dw== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-regex" "^7.4.4" + regexpu-core "^4.6.0" + +"@babel/preset-env@^6.24.1": + version "7.6.2" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.6.2.tgz#abbb3ed785c7fe4220d4c82a53621d71fc0c75d3" + integrity sha512-Ru7+mfzy9M1/YTEtlDS8CD45jd22ngb9tXnn64DvQK3ooyqSw9K4K9DUWmYknTTVk4TqygL9dqCrZgm1HMea/Q== + dependencies: + "@babel/helper-module-imports" "^7.0.0" + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-proposal-async-generator-functions" "^7.2.0" + "@babel/plugin-proposal-dynamic-import" "^7.5.0" + "@babel/plugin-proposal-json-strings" "^7.2.0" + "@babel/plugin-proposal-object-rest-spread" "^7.6.2" + "@babel/plugin-proposal-optional-catch-binding" "^7.2.0" + "@babel/plugin-proposal-unicode-property-regex" "^7.6.2" + "@babel/plugin-syntax-async-generators" "^7.2.0" + "@babel/plugin-syntax-dynamic-import" "^7.2.0" + "@babel/plugin-syntax-json-strings" "^7.2.0" + "@babel/plugin-syntax-object-rest-spread" "^7.2.0" + "@babel/plugin-syntax-optional-catch-binding" "^7.2.0" + "@babel/plugin-transform-arrow-functions" "^7.2.0" + "@babel/plugin-transform-async-to-generator" "^7.5.0" + "@babel/plugin-transform-block-scoped-functions" "^7.2.0" + "@babel/plugin-transform-block-scoping" "^7.6.2" + "@babel/plugin-transform-classes" "^7.5.5" + "@babel/plugin-transform-computed-properties" "^7.2.0" + "@babel/plugin-transform-destructuring" "^7.6.0" + "@babel/plugin-transform-dotall-regex" "^7.6.2" + "@babel/plugin-transform-duplicate-keys" "^7.5.0" + "@babel/plugin-transform-exponentiation-operator" "^7.2.0" + "@babel/plugin-transform-for-of" "^7.4.4" + "@babel/plugin-transform-function-name" "^7.4.4" + "@babel/plugin-transform-literals" "^7.2.0" + "@babel/plugin-transform-member-expression-literals" "^7.2.0" + "@babel/plugin-transform-modules-amd" "^7.5.0" + "@babel/plugin-transform-modules-commonjs" "^7.6.0" + "@babel/plugin-transform-modules-systemjs" "^7.5.0" + "@babel/plugin-transform-modules-umd" "^7.2.0" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.6.2" + "@babel/plugin-transform-new-target" "^7.4.4" + "@babel/plugin-transform-object-super" "^7.5.5" + "@babel/plugin-transform-parameters" "^7.4.4" + "@babel/plugin-transform-property-literals" "^7.2.0" + "@babel/plugin-transform-regenerator" "^7.4.5" + "@babel/plugin-transform-reserved-words" "^7.2.0" + "@babel/plugin-transform-shorthand-properties" "^7.2.0" + "@babel/plugin-transform-spread" "^7.6.2" + "@babel/plugin-transform-sticky-regex" "^7.2.0" + "@babel/plugin-transform-template-literals" "^7.4.4" + "@babel/plugin-transform-typeof-symbol" "^7.2.0" + "@babel/plugin-transform-unicode-regex" "^7.6.2" + "@babel/types" "^7.6.0" + browserslist "^4.6.0" + core-js-compat "^3.1.1" + invariant "^2.2.2" + js-levenshtein "^1.1.3" + semver "^5.5.0" + +"@babel/template@^7.1.0", "@babel/template@^7.4.0", "@babel/template@^7.4.4", "@babel/template@^7.6.0": + version "7.6.0" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.6.0.tgz#7f0159c7f5012230dad64cca42ec9bdb5c9536e6" + integrity sha512-5AEH2EXD8euCk446b7edmgFdub/qfH1SN6Nii3+fyXP807QRx9Q73A2N5hNwRRslC2H9sNzaFhsPubkS4L8oNQ== + dependencies: + "@babel/code-frame" "^7.0.0" + "@babel/parser" "^7.6.0" + "@babel/types" "^7.6.0" + +"@babel/traverse@^7.1.0", "@babel/traverse@^7.4.3", "@babel/traverse@^7.4.4", "@babel/traverse@^7.5.5", "@babel/traverse@^7.6.2": + version "7.6.2" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.6.2.tgz#b0e2bfd401d339ce0e6c05690206d1e11502ce2c" + integrity sha512-8fRE76xNwNttVEF2TwxJDGBLWthUkHWSldmfuBzVRmEDWOtu4XdINTgN7TDWzuLg4bbeIMLvfMFD9we5YcWkRQ== + dependencies: + "@babel/code-frame" "^7.5.5" + "@babel/generator" "^7.6.2" + "@babel/helper-function-name" "^7.1.0" + "@babel/helper-split-export-declaration" "^7.4.4" + "@babel/parser" "^7.6.2" + "@babel/types" "^7.6.0" + debug "^4.1.0" + globals "^11.1.0" + lodash "^4.17.13" + +"@babel/types@^7.0.0", "@babel/types@^7.2.0", "@babel/types@^7.3.0", "@babel/types@^7.4.0", "@babel/types@^7.4.4", "@babel/types@^7.5.5", "@babel/types@^7.6.0": + version "7.6.1" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.6.1.tgz#53abf3308add3ac2a2884d539151c57c4b3ac648" + integrity sha512-X7gdiuaCmA0uRjCmRtYJNAVCc/q+5xSgsfKJHqMN4iNLILX39677fJE1O40arPMh0TTtS9ItH67yre6c7k6t0g== dependencies: - chalk "^1.1.3" esutils "^2.0.2" - js-tokens "^3.0.2" + lodash "^4.17.13" + to-fast-properties "^2.0.0" -babel-core@^6.0.0, babel-core@^6.22.0: - version "6.22.1" - resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.22.1.tgz#9c5fd658ba1772d28d721f6d25d968fc7ae21648" +"@cnakazawa/watch@^1.0.3": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@cnakazawa/watch/-/watch-1.0.3.tgz#099139eaec7ebf07a27c1786a3ff64f39464d2ef" + integrity sha512-r5160ogAvGyHsal38Kux7YYtodEKOj89RGb28ht1jh3SJb08VwRwAKKJL0bGb04Zd/3r9FL3BFIc3bBidYffCA== dependencies: - babel-code-frame "^6.22.0" - babel-generator "^6.22.0" - babel-helpers "^6.22.0" - babel-messages "^6.22.0" - babel-register "^6.22.0" - babel-runtime "^6.22.0" - babel-template "^6.22.0" - babel-traverse "^6.22.1" - babel-types "^6.22.0" - babylon "^6.11.0" - convert-source-map "^1.1.0" - debug "^2.1.1" - json5 "^0.5.0" - lodash "^4.2.0" - minimatch "^3.0.2" - path-is-absolute "^1.0.0" - private "^0.1.6" - slash "^1.0.0" - source-map "^0.5.0" - -babel-core@^6.26.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.26.0.tgz#af32f78b31a6fcef119c87b0fd8d9753f03a0bb8" - dependencies: - babel-code-frame "^6.26.0" - babel-generator "^6.26.0" - babel-helpers "^6.24.1" - babel-messages "^6.23.0" - babel-register "^6.26.0" - babel-runtime "^6.26.0" - babel-template "^6.26.0" - babel-traverse "^6.26.0" - babel-types "^6.26.0" - babylon "^6.18.0" - convert-source-map "^1.5.0" - debug "^2.6.8" - json5 "^0.5.1" - lodash "^4.17.4" - minimatch "^3.0.4" - path-is-absolute "^1.0.1" - private "^0.1.7" - slash "^1.0.0" - source-map "^0.5.6" + exec-sh "^0.3.2" + minimist "^1.2.0" -babel-generator@^6.18.0, babel-generator@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.22.0.tgz#d642bf4961911a8adc7c692b0c9297f325cda805" +"@jest/console@^24.7.1", "@jest/console@^24.9.0": + version "24.9.0" + resolved "https://registry.yarnpkg.com/@jest/console/-/console-24.9.0.tgz#79b1bc06fb74a8cfb01cbdedf945584b1b9707f0" + integrity sha512-Zuj6b8TnKXi3q4ymac8EQfc3ea/uhLeCGThFqXeC8H9/raaH8ARPUTdId+XyGd03Z4In0/VjD2OYFcBF09fNLQ== dependencies: - babel-messages "^6.22.0" - babel-runtime "^6.22.0" - babel-types "^6.22.0" - detect-indent "^4.0.0" - jsesc "^1.3.0" - lodash "^4.2.0" - source-map "^0.5.0" + "@jest/source-map" "^24.9.0" + chalk "^2.0.1" + slash "^2.0.0" + +"@jest/core@^24.9.0": + version "24.9.0" + resolved "https://registry.yarnpkg.com/@jest/core/-/core-24.9.0.tgz#2ceccd0b93181f9c4850e74f2a9ad43d351369c4" + integrity sha512-Fogg3s4wlAr1VX7q+rhV9RVnUv5tD7VuWfYy1+whMiWUrvl7U3QJSJyWcDio9Lq2prqYsZaeTv2Rz24pWGkJ2A== + dependencies: + "@jest/console" "^24.7.1" + "@jest/reporters" "^24.9.0" + "@jest/test-result" "^24.9.0" + "@jest/transform" "^24.9.0" + "@jest/types" "^24.9.0" + ansi-escapes "^3.0.0" + chalk "^2.0.1" + exit "^0.1.2" + graceful-fs "^4.1.15" + jest-changed-files "^24.9.0" + jest-config "^24.9.0" + jest-haste-map "^24.9.0" + jest-message-util "^24.9.0" + jest-regex-util "^24.3.0" + jest-resolve "^24.9.0" + jest-resolve-dependencies "^24.9.0" + jest-runner "^24.9.0" + jest-runtime "^24.9.0" + jest-snapshot "^24.9.0" + jest-util "^24.9.0" + jest-validate "^24.9.0" + jest-watcher "^24.9.0" + micromatch "^3.1.10" + p-each-series "^1.0.0" + realpath-native "^1.1.0" + rimraf "^2.5.4" + slash "^2.0.0" + strip-ansi "^5.0.0" + +"@jest/environment@^24.9.0": + version "24.9.0" + resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-24.9.0.tgz#21e3afa2d65c0586cbd6cbefe208bafade44ab18" + integrity sha512-5A1QluTPhvdIPFYnO3sZC3smkNeXPVELz7ikPbhUj0bQjB07EoE9qtLrem14ZUYWdVayYbsjVwIiL4WBIMV4aQ== + dependencies: + "@jest/fake-timers" "^24.9.0" + "@jest/transform" "^24.9.0" + "@jest/types" "^24.9.0" + jest-mock "^24.9.0" + +"@jest/fake-timers@^24.9.0": + version "24.9.0" + resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-24.9.0.tgz#ba3e6bf0eecd09a636049896434d306636540c93" + integrity sha512-eWQcNa2YSwzXWIMC5KufBh3oWRIijrQFROsIqt6v/NS9Io/gknw1jsAC9c+ih/RQX4A3O7SeWAhQeN0goKhT9A== + dependencies: + "@jest/types" "^24.9.0" + jest-message-util "^24.9.0" + jest-mock "^24.9.0" + +"@jest/reporters@^24.9.0": + version "24.9.0" + resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-24.9.0.tgz#86660eff8e2b9661d042a8e98a028b8d631a5b43" + integrity sha512-mu4X0yjaHrffOsWmVLzitKmmmWSQ3GGuefgNscUSWNiUNcEOSEQk9k3pERKEQVBb0Cnn88+UESIsZEMH3o88Gw== + dependencies: + "@jest/environment" "^24.9.0" + "@jest/test-result" "^24.9.0" + "@jest/transform" "^24.9.0" + "@jest/types" "^24.9.0" + chalk "^2.0.1" + exit "^0.1.2" + glob "^7.1.2" + istanbul-lib-coverage "^2.0.2" + istanbul-lib-instrument "^3.0.1" + istanbul-lib-report "^2.0.4" + istanbul-lib-source-maps "^3.0.1" + istanbul-reports "^2.2.6" + jest-haste-map "^24.9.0" + jest-resolve "^24.9.0" + jest-runtime "^24.9.0" + jest-util "^24.9.0" + jest-worker "^24.6.0" + node-notifier "^5.4.2" + slash "^2.0.0" + source-map "^0.6.0" + string-length "^2.0.0" -babel-generator@^6.26.0: - version "6.26.1" - resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.26.1.tgz#1844408d3b8f0d35a404ea7ac180f087a601bd90" +"@jest/source-map@^24.3.0", "@jest/source-map@^24.9.0": + version "24.9.0" + resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-24.9.0.tgz#0e263a94430be4b41da683ccc1e6bffe2a191714" + integrity sha512-/Xw7xGlsZb4MJzNDgB7PW5crou5JqWiBQaz6xyPd3ArOg2nfn/PunV8+olXbbEZzNl591o5rWKE9BRDaFAuIBg== dependencies: - 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" + callsites "^3.0.0" + graceful-fs "^4.1.15" + source-map "^0.6.0" -babel-helper-call-delegate@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz#ece6aacddc76e41c3461f88bfc575bd0daa2df8d" - dependencies: - babel-helper-hoist-variables "^6.24.1" - babel-runtime "^6.22.0" - babel-traverse "^6.24.1" - babel-types "^6.24.1" +"@jest/test-result@^24.9.0": + version "24.9.0" + resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-24.9.0.tgz#11796e8aa9dbf88ea025757b3152595ad06ba0ca" + integrity sha512-XEFrHbBonBJ8dGp2JmF8kP/nQI/ImPpygKHwQ/SY+es59Z3L5PI4Qb9TQQMAEeYsThG1xF0k6tmG0tIKATNiiA== + dependencies: + "@jest/console" "^24.9.0" + "@jest/types" "^24.9.0" + "@types/istanbul-lib-coverage" "^2.0.0" + +"@jest/test-sequencer@^24.9.0": + version "24.9.0" + resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-24.9.0.tgz#f8f334f35b625a4f2f355f2fe7e6036dad2e6b31" + integrity sha512-6qqsU4o0kW1dvA95qfNog8v8gkRN9ph6Lz7r96IvZpHdNipP2cBcb07J1Z45mz/VIS01OHJ3pY8T5fUY38tg4A== + dependencies: + "@jest/test-result" "^24.9.0" + jest-haste-map "^24.9.0" + jest-runner "^24.9.0" + jest-runtime "^24.9.0" + +"@jest/transform@^24.9.0": + version "24.9.0" + resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-24.9.0.tgz#4ae2768b296553fadab09e9ec119543c90b16c56" + integrity sha512-TcQUmyNRxV94S0QpMOnZl0++6RMiqpbH/ZMccFB/amku6Uwvyb1cjYX7xkp5nGNkbX4QPH/FcB6q1HBTHynLmQ== + dependencies: + "@babel/core" "^7.1.0" + "@jest/types" "^24.9.0" + babel-plugin-istanbul "^5.1.0" + chalk "^2.0.1" + convert-source-map "^1.4.0" + fast-json-stable-stringify "^2.0.0" + graceful-fs "^4.1.15" + jest-haste-map "^24.9.0" + jest-regex-util "^24.9.0" + jest-util "^24.9.0" + micromatch "^3.1.10" + pirates "^4.0.1" + realpath-native "^1.1.0" + slash "^2.0.0" + source-map "^0.6.1" + write-file-atomic "2.4.1" + +"@jest/types@^24.9.0": + version "24.9.0" + resolved "https://registry.yarnpkg.com/@jest/types/-/types-24.9.0.tgz#63cb26cb7500d069e5a389441a7c6ab5e909fc59" + integrity sha512-XKK7ze1apu5JWQ5eZjHITP66AX+QsLlbaJRBGYr8pNzwcAE2JVkwnf0yqjHTsDRcjR0mujy/NmZMXw5kl+kGBw== + dependencies: + "@types/istanbul-lib-coverage" "^2.0.0" + "@types/istanbul-reports" "^1.1.1" + "@types/yargs" "^13.0.0" + +"@types/babel__core@^7.1.0": + version "7.1.3" + resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.3.tgz#e441ea7df63cd080dfcd02ab199e6d16a735fc30" + integrity sha512-8fBo0UR2CcwWxeX7WIIgJ7lXjasFxoYgRnFHUj+hRvKkpiBJbxhdAPTCY6/ZKM0uxANFVzt4yObSLuTiTnazDA== + dependencies: + "@babel/parser" "^7.1.0" + "@babel/types" "^7.0.0" + "@types/babel__generator" "*" + "@types/babel__template" "*" + "@types/babel__traverse" "*" + +"@types/babel__generator@*": + version "7.6.0" + resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.0.tgz#f1ec1c104d1bb463556ecb724018ab788d0c172a" + integrity sha512-c1mZUu4up5cp9KROs/QAw0gTeHrw/x7m52LcnvMxxOZ03DmLwPV0MlGmlgzV3cnSdjhJOZsj7E7FHeioai+egw== + dependencies: + "@babel/types" "^7.0.0" + +"@types/babel__template@*": + version "7.0.2" + resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.0.2.tgz#4ff63d6b52eddac1de7b975a5223ed32ecea9307" + integrity sha512-/K6zCpeW7Imzgab2bLkLEbz0+1JlFSrUMdw7KoIIu+IUdu51GWaBZpd3y1VXGVXzynvGa4DaIaxNZHiON3GXUg== + dependencies: + "@babel/parser" "^7.1.0" + "@babel/types" "^7.0.0" + +"@types/babel__traverse@*", "@types/babel__traverse@^7.0.6": + version "7.0.7" + resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.0.7.tgz#2496e9ff56196cc1429c72034e07eab6121b6f3f" + integrity sha512-CeBpmX1J8kWLcDEnI3Cl2Eo6RfbGvzUctA+CjZUhOKDFbLfcr7fc4usEqLNWetrlJd7RhAkyYe2czXop4fICpw== + dependencies: + "@babel/types" "^7.3.0" + +"@types/estree@*": + version "0.0.39" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.39.tgz#e177e699ee1b8c22d23174caaa7422644389509f" + integrity sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw== + +"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.1.tgz#42995b446db9a48a11a07ec083499a860e9138ff" + integrity sha512-hRJD2ahnnpLgsj6KWMYSrmXkM3rm2Dl1qkx6IOFD5FnuNPXJIG5L0dhgKXCYTRMGzU4n0wImQ/xfmRc4POUFlg== -babel-helper-define-map@^6.24.1: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-helper-define-map/-/babel-helper-define-map-6.26.0.tgz#a5f56dab41a25f97ecb498c7ebaca9819f95be5f" +"@types/istanbul-lib-report@*": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-1.1.1.tgz#e5471e7fa33c61358dd38426189c037a58433b8c" + integrity sha512-3BUTyMzbZa2DtDI2BkERNC6jJw2Mr2Y0oGI7mRxYNBPxppbtEK1F66u3bKwU2g+wxwWI7PAoRpJnOY1grJqzHg== dependencies: - babel-helper-function-name "^6.24.1" - babel-runtime "^6.26.0" - babel-types "^6.26.0" - lodash "^4.17.4" + "@types/istanbul-lib-coverage" "*" -babel-helper-function-name@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz#d3475b8c03ed98242a25b48351ab18399d3580a9" +"@types/istanbul-reports@^1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-1.1.1.tgz#7a8cbf6a406f36c8add871625b278eaf0b0d255a" + integrity sha512-UpYjBi8xefVChsCoBpKShdxTllC9pwISirfoZsUa2AAdQg/Jd2KQGtSbw+ya7GPo7x/wAPlH6JBhKhAsXUEZNA== dependencies: - 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" + "@types/istanbul-lib-coverage" "*" + "@types/istanbul-lib-report" "*" -babel-helper-get-function-arity@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz#8f7782aa93407c41d3aa50908f89b031b1b6853d" - dependencies: - babel-runtime "^6.22.0" - babel-types "^6.24.1" +"@types/node@*": + version "12.7.8" + resolved "https://registry.yarnpkg.com/@types/node/-/node-12.7.8.tgz#cb1bf6800238898bc2ff6ffa5702c3cadd350708" + integrity sha512-FMdVn84tJJdV+xe+53sYiZS4R5yn1mAIxfj+DVoNiQjTYz1+OYmjwEZr1ev9nU0axXwda0QDbYl06QHanRVH3A== -babel-helper-hoist-variables@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz#1ecb27689c9d25513eadbc9914a73f5408be7a76" - dependencies: - babel-runtime "^6.22.0" - babel-types "^6.24.1" +"@types/stack-utils@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-1.0.1.tgz#0a851d3bd96498fa25c33ab7278ed3bd65f06c3e" + integrity sha512-l42BggppR6zLmpfU6fq9HEa2oGPEI8yrSPL3GITjfRInppYFahObbIQOQK3UGxEnyQpltZLaPe75046NOZQikw== -babel-helper-optimise-call-expression@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz#f7a13427ba9f73f8f4fa993c54a97882d1244257" - dependencies: - babel-runtime "^6.22.0" - babel-types "^6.24.1" +"@types/yargs-parser@*": + version "13.1.0" + resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-13.1.0.tgz#c563aa192f39350a1d18da36c5a8da382bbd8228" + integrity sha512-gCubfBUZ6KxzoibJ+SCUc/57Ms1jz5NjHe4+dI2krNmU5zCPAphyLJYyTOg06ueIyfj+SaCUqmzun7ImlxDcKg== -babel-helper-regex@^6.24.1: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-helper-regex/-/babel-helper-regex-6.26.0.tgz#325c59f902f82f24b74faceed0363954f6495e72" +"@types/yargs@^13.0.0": + version "13.0.3" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-13.0.3.tgz#76482af3981d4412d65371a318f992d33464a380" + integrity sha512-K8/LfZq2duW33XW/tFwEAfnZlqIfVsoyRB3kfXdPXYhl0nfM8mmh7GS0jg7WrX2Dgq/0Ha/pR1PaR+BvmWwjiQ== dependencies: - babel-runtime "^6.26.0" - babel-types "^6.26.0" - lodash "^4.17.4" + "@types/yargs-parser" "*" -babel-helper-replace-supers@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz#bf6dbfe43938d17369a213ca8a8bf74b6a90ab1a" - dependencies: - babel-helper-optimise-call-expression "^6.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" +abab@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.2.tgz#a2fba1b122c69a85caa02d10f9270c7219709a9d" + integrity sha512-2scffjvioEmNz0OyDSLGWDfKCVwaKc6l9Pm9kOIREU13ClXZvHpg/nRL5xyjSSSLhOnXqft2HpsAzNEEA8cFFg== -babel-helpers@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-helpers/-/babel-helpers-6.22.0.tgz#d275f55f2252b8101bff07bc0c556deda657392c" - dependencies: - babel-runtime "^6.22.0" - babel-template "^6.22.0" +abbrev@1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" + integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== -babel-helpers@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-helpers/-/babel-helpers-6.24.1.tgz#3471de9caec388e5c850e597e58a26ddf37602b2" +acorn-globals@^4.1.0: + version "4.3.4" + resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-4.3.4.tgz#9fa1926addc11c97308c4e66d7add0d40c3272e7" + integrity sha512-clfQEh21R+D0leSbUdWf3OcfqyaCSAQ8Ryq00bofSekfr9W8u1jyYZo6ir0xu9Gtcf7BjcHJpnbZH7JOCpP60A== dependencies: - babel-runtime "^6.22.0" - babel-template "^6.24.1" + acorn "^6.0.1" + acorn-walk "^6.0.1" -babel-jest@^22.2.2: - version "22.2.2" - resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-22.2.2.tgz#eda38dca284e32cc5257f96a9b51351975de4e04" +acorn-jsx@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-3.0.1.tgz#afdf9488fb1ecefc8348f6fb22f464e32a58b36b" + integrity sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s= dependencies: - babel-plugin-istanbul "^4.1.5" - babel-preset-jest "^22.2.0" + acorn "^3.0.4" -babel-messages@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-messages/-/babel-messages-6.22.0.tgz#36066a214f1217e4ed4164867669ecb39e3ea575" - dependencies: - babel-runtime "^6.22.0" +acorn-walk@^6.0.1: + version "6.2.0" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-6.2.0.tgz#123cb8f3b84c2171f1f7fb252615b1c78a6b1a8c" + integrity sha512-7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA== -babel-messages@^6.23.0: - version "6.23.0" - resolved "https://registry.yarnpkg.com/babel-messages/-/babel-messages-6.23.0.tgz#f3cdf4703858035b2a2951c6ec5edf6c62f2630e" - dependencies: - babel-runtime "^6.22.0" +acorn@^3.0.4: + version "3.3.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-3.3.0.tgz#45e37fb39e8da3f25baee3ff5369e2bb5f22017a" + integrity sha1-ReN/s56No/JbruP/U2niu18iAXo= -babel-plugin-check-es2015-constants@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz#35157b101426fd2ffd3da3f75c7d1e91835bbf8a" - dependencies: - babel-runtime "^6.22.0" +acorn@^5.5.0, acorn@^5.5.3: + version "5.7.3" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.7.3.tgz#67aa231bf8812974b85235a96771eb6bd07ea279" + integrity sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw== -babel-plugin-istanbul@^4.1.5: - version "4.1.5" - resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-4.1.5.tgz#6760cdd977f411d3e175bb064f2bc327d99b2b6e" - dependencies: - find-up "^2.1.0" - istanbul-lib-instrument "^1.7.5" - test-exclude "^4.1.1" +acorn@^6.0.1: + version "6.3.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.3.0.tgz#0087509119ffa4fc0a0041d1e93a417e68cb856e" + integrity sha512-/czfa8BwS88b9gWQVhc8eknunSA2DoJpJyTQkhheIf5E48u1N0R4q/YxxsAeqRrmK9TQ/uYfgLDfZo91UlANIA== -babel-plugin-jest-hoist@^22.2.0: - version "22.2.0" - resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-22.2.0.tgz#bd34f39d652406669713b8c89e23ef25c890b993" +acorn@^7.1.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.1.0.tgz#949d36f2c292535da602283586c2477c57eb2d6c" + integrity sha512-kL5CuoXA/dgxlBbVrflsflzQ3PAas7RYZB52NOm/6839iVYJgKMJ3cQJD+t2i5+qFa8h3MDpEOJiS64E8JLnSQ== -babel-plugin-syntax-object-rest-spread@^6.13.0: - version "6.13.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz#fd6536f2bce13836ffa3a5458c4903a597bb3bf5" +ajv-keywords@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-2.1.1.tgz#617997fc5f60576894c435f940d819e135b80762" + integrity sha1-YXmX/F9gV2iUxDX5QNgZ4TW4B2I= -babel-plugin-transform-es2015-arrow-functions@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz#452692cb711d5f79dc7f85e440ce41b9f244d221" +ajv@^5.2.3, ajv@^5.3.0: + version "5.5.2" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.5.2.tgz#73b5eeca3fab653e3d3f9422b341ad42205dc965" + integrity sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU= dependencies: - babel-runtime "^6.22.0" + co "^4.6.0" + fast-deep-equal "^1.0.0" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.3.0" -babel-plugin-transform-es2015-block-scoped-functions@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz#bbc51b49f964d70cb8d8e0b94e820246ce3a6141" +ajv@^6.5.5: + version "6.10.2" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.10.2.tgz#d3cea04d6b017b2894ad69040fec8b623eb4bd52" + integrity sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw== dependencies: - babel-runtime "^6.22.0" + fast-deep-equal "^2.0.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" -babel-plugin-transform-es2015-block-scoping@^6.24.1: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz#d70f5299c1308d05c12f463813b0a09e73b1895f" - dependencies: - babel-runtime "^6.26.0" - babel-template "^6.26.0" - babel-traverse "^6.26.0" - babel-types "^6.26.0" - lodash "^4.17.4" +ansi-escapes@^1.0.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-1.4.0.tgz#d3a8a83b319aa67793662b13e761c7911422306e" + integrity sha1-06ioOzGapneTZisT52HHkRQiMG4= -babel-plugin-transform-es2015-classes@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz#5a4c58a50c9c9461e564b4b2a3bfabc97a2584db" - dependencies: - babel-helper-define-map "^6.24.1" - babel-helper-function-name "^6.24.1" - babel-helper-optimise-call-expression "^6.24.1" - babel-helper-replace-supers "^6.24.1" - babel-messages "^6.23.0" - babel-runtime "^6.22.0" - babel-template "^6.24.1" - babel-traverse "^6.24.1" - babel-types "^6.24.1" +ansi-escapes@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b" + integrity sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ== -babel-plugin-transform-es2015-computed-properties@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz#6fe2a8d16895d5634f4cd999b6d3480a308159b3" - dependencies: - babel-runtime "^6.22.0" - babel-template "^6.24.1" +ansi-regex@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" + integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= -babel-plugin-transform-es2015-destructuring@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.22.0.tgz#8e0af2f885a0b2cf999d47c4c1dd23ce88cfa4c6" - dependencies: - babel-runtime "^6.22.0" +ansi-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" + integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= -babel-plugin-transform-es2015-duplicate-keys@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz#73eb3d310ca969e3ef9ec91c53741a6f1576423e" - dependencies: - babel-runtime "^6.22.0" - babel-types "^6.24.1" +ansi-regex@^4.0.0, ansi-regex@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" + integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== -babel-plugin-transform-es2015-for-of@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.22.0.tgz#180467ad63aeea592a1caeee4bf1c8b3e2616265" - dependencies: - babel-runtime "^6.22.0" +ansi-styles@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" + integrity sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4= -babel-plugin-transform-es2015-function-name@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz#834c89853bc36b1af0f3a4c5dbaa94fd8eacaa8b" +ansi-styles@^3.2.0, ansi-styles@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== dependencies: - babel-helper-function-name "^6.24.1" - babel-runtime "^6.22.0" - babel-types "^6.24.1" + color-convert "^1.9.0" -babel-plugin-transform-es2015-literals@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz#4f54a02d6cd66cf915280019a31d31925377ca2e" - dependencies: - babel-runtime "^6.22.0" +any-observable@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/any-observable/-/any-observable-0.2.0.tgz#c67870058003579009083f54ac0abafb5c33d242" + integrity sha1-xnhwBYADV5AJCD9UrAq6+1wz0kI= -babel-plugin-transform-es2015-modules-amd@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz#3b3e54017239842d6d19c3011c4bd2f00a00d154" +anymatch@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" + integrity sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw== dependencies: - babel-plugin-transform-es2015-modules-commonjs "^6.24.1" - babel-runtime "^6.22.0" - babel-template "^6.24.1" + micromatch "^3.1.4" + normalize-path "^2.1.1" -babel-plugin-transform-es2015-modules-commonjs@^6.24.1: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.0.tgz#0d8394029b7dc6abe1a97ef181e00758dd2e5d8a" - dependencies: - babel-plugin-transform-strict-mode "^6.24.1" - babel-runtime "^6.26.0" - babel-template "^6.26.0" - babel-types "^6.26.0" +app-root-path@^2.0.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/app-root-path/-/app-root-path-2.2.1.tgz#d0df4a682ee408273583d43f6f79e9892624bc9a" + integrity sha512-91IFKeKk7FjfmezPKkwtaRvSpnUc4gDwPAjA1YZ9Gn0q0PPeW+vbeUsZuyDwjI7+QTHhcLen2v25fi/AmhvbJA== -babel-plugin-transform-es2015-modules-systemjs@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz#ff89a142b9119a906195f5f106ecf305d9407d23" - dependencies: - babel-helper-hoist-variables "^6.24.1" - babel-runtime "^6.22.0" - babel-template "^6.24.1" +aproba@^1.0.3: + version "1.2.0" + resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" + integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== -babel-plugin-transform-es2015-modules-umd@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz#ac997e6285cd18ed6176adb607d602344ad38468" +are-we-there-yet@~1.1.2: + version "1.1.5" + resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz#4b35c2944f062a8bfcda66410760350fe9ddfc21" + integrity sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w== dependencies: - babel-plugin-transform-es2015-modules-amd "^6.24.1" - babel-runtime "^6.22.0" - babel-template "^6.24.1" + delegates "^1.0.0" + readable-stream "^2.0.6" -babel-plugin-transform-es2015-object-super@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz#24cef69ae21cb83a7f8603dad021f572eb278f8d" +argparse@^1.0.7: + version "1.0.10" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" + integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== dependencies: - babel-helper-replace-supers "^6.24.1" - babel-runtime "^6.22.0" + sprintf-js "~1.0.2" -babel-plugin-transform-es2015-parameters@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz#57ac351ab49caf14a97cd13b09f66fdf0a625f2b" - dependencies: - babel-helper-call-delegate "^6.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" +arr-diff@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" + integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA= -babel-plugin-transform-es2015-shorthand-properties@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz#24f875d6721c87661bbd99a4622e51f14de38aa0" - dependencies: - babel-runtime "^6.22.0" - babel-types "^6.24.1" +arr-flatten@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" + integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg== + +arr-union@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" + integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ= + +array-equal@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/array-equal/-/array-equal-1.0.0.tgz#8c2a5ef2472fd9ea742b04c77a75093ba2757c93" + integrity sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM= -babel-plugin-transform-es2015-spread@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz#d6d68a99f89aedc4536c81a542e8dd9f1746f8d1" +array-includes@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.0.3.tgz#184b48f62d92d7452bb31b323165c7f8bd02266d" + integrity sha1-GEtI9i2S10UrsxsyMWXH+L0CJm0= dependencies: - babel-runtime "^6.22.0" + define-properties "^1.1.2" + es-abstract "^1.7.0" -babel-plugin-transform-es2015-sticky-regex@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz#00c1cdb1aca71112cdf0cf6126c2ed6b457ccdbc" - dependencies: - babel-helper-regex "^6.24.1" - babel-runtime "^6.22.0" - babel-types "^6.24.1" +array-unique@^0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" + integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= -babel-plugin-transform-es2015-template-literals@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz#a84b3450f7e9f8f1f6839d6d687da84bb1236d8d" +asn1@~0.2.3: + version "0.2.4" + resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136" + integrity sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg== dependencies: - babel-runtime "^6.22.0" + safer-buffer "~2.1.0" -babel-plugin-transform-es2015-typeof-symbol@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.22.0.tgz#87faf2336d3b6a97f68c4d906b0cd0edeae676e1" - dependencies: - babel-runtime "^6.22.0" +assert-plus@1.0.0, assert-plus@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" + integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU= -babel-plugin-transform-es2015-unicode-regex@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz#d38b12f42ea7323f729387f18a7c5ae1faeb35e9" - dependencies: - babel-helper-regex "^6.24.1" - babel-runtime "^6.22.0" - regexpu-core "^2.0.0" +assign-symbols@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" + integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c= -babel-plugin-transform-regenerator@^6.24.1: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz#e0703696fbde27f0a3efcacf8b4dca2f7b3a8f2f" - dependencies: - regenerator-transform "^0.10.0" +astral-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" + integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg== -babel-plugin-transform-strict-mode@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz#d5faf7aa578a65bbe591cf5edae04a0c67020758" - dependencies: - babel-runtime "^6.22.0" - babel-types "^6.24.1" +async-each@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.3.tgz#b727dbf87d7651602f06f4d4ac387f47d91b0cbf" + integrity sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ== -babel-polyfill@^6.26.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-polyfill/-/babel-polyfill-6.26.0.tgz#379937abc67d7895970adc621f284cd966cf2153" - dependencies: - babel-runtime "^6.26.0" - core-js "^2.5.0" - regenerator-runtime "^0.10.5" - -babel-preset-es2015@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-preset-es2015/-/babel-preset-es2015-6.24.1.tgz#d44050d6bc2c9feea702aaf38d727a0210538939" - dependencies: - babel-plugin-check-es2015-constants "^6.22.0" - babel-plugin-transform-es2015-arrow-functions "^6.22.0" - babel-plugin-transform-es2015-block-scoped-functions "^6.22.0" - babel-plugin-transform-es2015-block-scoping "^6.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@^22.2.0: - version "22.2.0" - resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-22.2.0.tgz#f77b43f06ef4d8547214b2e206cc76a25c3ba0e2" - dependencies: - babel-plugin-jest-hoist "^22.2.0" - babel-plugin-syntax-object-rest-spread "^6.13.0" - -babel-register@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-register/-/babel-register-6.22.0.tgz#a61dd83975f9ca4a9e7d6eff3059494cd5ea4c63" - dependencies: - babel-core "^6.22.0" - babel-runtime "^6.22.0" - core-js "^2.4.0" - home-or-tmp "^2.0.0" - lodash "^4.2.0" - mkdirp "^0.5.1" - source-map-support "^0.4.2" +async-limiter@~1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd" + integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ== -babel-register@^6.26.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-register/-/babel-register-6.26.0.tgz#6ed021173e2fcb486d7acb45c6009a856f647071" - dependencies: - babel-core "^6.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" +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= -babel-runtime@^6.18.0, babel-runtime@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.22.0.tgz#1cf8b4ac67c77a4ddb0db2ae1f74de52ac4ca611" - dependencies: - core-js "^2.4.0" - regenerator-runtime "^0.10.0" +atob@^2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" + integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== -babel-runtime@^6.26.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe" - dependencies: - core-js "^2.4.0" - regenerator-runtime "^0.11.0" +aws-sign2@~0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" + integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg= -babel-template@^6.16.0, babel-template@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.22.0.tgz#403d110905a4626b317a2a1fcb8f3b73204b2edb" - dependencies: - babel-runtime "^6.22.0" - babel-traverse "^6.22.0" - babel-types "^6.22.0" - babylon "^6.11.0" - lodash "^4.2.0" +aws4@^1.8.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.8.0.tgz#f0e003d9ca9e7f59c7a508945d7b2ef9a04a542f" + integrity sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ== -babel-template@^6.24.1, babel-template@^6.26.0: +babel-code-frame@^6.22.0: version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.26.0.tgz#de03e2d16396b069f46dd9fff8521fb1a0e35e02" + resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b" + integrity sha1-Y/1D99weO7fONZR9uP42mj9Yx0s= dependencies: - babel-runtime "^6.26.0" - babel-traverse "^6.26.0" - babel-types "^6.26.0" - babylon "^6.18.0" - lodash "^4.17.4" + chalk "^1.1.3" + esutils "^2.0.2" + js-tokens "^3.0.2" -babel-traverse@^6.18.0, babel-traverse@^6.22.0, babel-traverse@^6.22.1: - version "6.22.1" - resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.22.1.tgz#3b95cd6b7427d6f1f757704908f2fc9748a5f59f" +babel-jest@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-24.9.0.tgz#3fc327cb8467b89d14d7bc70e315104a783ccd54" + integrity sha512-ntuddfyiN+EhMw58PTNL1ph4C9rECiQXjI4nMMBKBaNjXvqLdkXpPRcMSr4iyBrJg/+wz9brFUD6RhOAT6r4Iw== dependencies: - babel-code-frame "^6.22.0" - babel-messages "^6.22.0" - babel-runtime "^6.22.0" - babel-types "^6.22.0" - babylon "^6.15.0" - debug "^2.2.0" - globals "^9.0.0" - invariant "^2.2.0" - lodash "^4.2.0" + "@jest/transform" "^24.9.0" + "@jest/types" "^24.9.0" + "@types/babel__core" "^7.1.0" + babel-plugin-istanbul "^5.1.0" + babel-preset-jest "^24.9.0" + chalk "^2.4.2" + slash "^2.0.0" -babel-traverse@^6.24.1, babel-traverse@^6.26.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.26.0.tgz#46a9cbd7edcc62c8e5c064e2d2d8d0f4035766ee" +babel-plugin-dynamic-import-node@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.0.tgz#f00f507bdaa3c3e3ff6e7e5e98d90a7acab96f7f" + integrity sha512-o6qFkpeQEBxcqt0XYlWzAVxNCSCZdUgcR8IRlhD/8DylxjjO4foPcvTW0GGKa/cVt3rvxZ7o5ippJ+/0nvLhlQ== dependencies: - babel-code-frame "^6.26.0" - babel-messages "^6.23.0" - babel-runtime "^6.26.0" - babel-types "^6.26.0" - babylon "^6.18.0" - debug "^2.6.8" - globals "^9.18.0" - invariant "^2.2.2" - lodash "^4.17.4" + object.assign "^4.1.0" -babel-types@^6.18.0, babel-types@^6.19.0, babel-types@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.22.0.tgz#2a447e8d0ea25d2512409e4175479fd78cc8b1db" +babel-plugin-istanbul@^5.1.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-5.2.0.tgz#df4ade83d897a92df069c4d9a25cf2671293c854" + integrity sha512-5LphC0USA8t4i1zCtjbbNb6jJj/9+X6P37Qfirc/70EQ34xKlMW+a1RHGwxGI+SwWpNwZ27HqvzAobeqaXwiZw== dependencies: - babel-runtime "^6.22.0" - esutils "^2.0.2" - lodash "^4.2.0" - to-fast-properties "^1.0.1" + "@babel/helper-plugin-utils" "^7.0.0" + find-up "^3.0.0" + istanbul-lib-instrument "^3.3.0" + test-exclude "^5.2.3" -babel-types@^6.24.1, babel-types@^6.26.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.26.0.tgz#a3b073f94ab49eb6fa55cd65227a334380632497" +babel-plugin-jest-hoist@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-24.9.0.tgz#4f837091eb407e01447c8843cbec546d0002d756" + integrity sha512-2EMA2P8Vp7lG0RAzr4HXqtYwacfMErOuv1U3wrvxHX6rD1sV6xS3WXG3r8TRQ2r6w8OhvSdWt+z41hQNwNm3Xw== dependencies: - babel-runtime "^6.26.0" - esutils "^2.0.2" - lodash "^4.17.4" - to-fast-properties "^1.0.3" + "@types/babel__traverse" "^7.0.6" -babylon@^6.11.0, babylon@^6.15.0: - version "6.15.0" - resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.15.0.tgz#ba65cfa1a80e1759b0e89fb562e27dccae70348e" - -babylon@^6.18.0: - version "6.18.0" - resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3" - -balanced-match@^0.4.1: - version "0.4.2" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-0.4.2.tgz#cb3f3e3c732dc0f01ee70b403f302e61d7709838" +babel-preset-jest@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-24.9.0.tgz#192b521e2217fb1d1f67cf73f70c336650ad3cdc" + integrity sha512-izTUuhE4TMfTRPF92fFwD2QfdXaZW08qvWTFCI51V8rW5x00UuPgc3ajRoWofXOuxjfcOM5zzSYsQS3H8KGCAg== + dependencies: + "@babel/plugin-syntax-object-rest-spread" "^7.0.0" + babel-plugin-jest-hoist "^24.9.0" balanced-match@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" + integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= + +base@^0.11.1: + version "0.11.2" + resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" + integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg== + dependencies: + 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" bcrypt-pbkdf@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.0.tgz#3ca76b85241c7170bf7d9703e7b9aa74630040d4" + version "1.0.2" + resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" + integrity sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4= dependencies: tweetnacl "^0.14.3" binary-extensions@^1.0.0: - version "1.8.0" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.8.0.tgz#48ec8d16df4377eae5fa5884682480af4d95c774" - -block-stream@*: - version "0.0.9" - resolved "https://registry.yarnpkg.com/block-stream/-/block-stream-0.0.9.tgz#13ebfe778a03205cfe03751481ebb4b3300c126a" - dependencies: - inherits "~2.0.0" - -boom@2.x.x: - version "2.10.1" - resolved "https://registry.yarnpkg.com/boom/-/boom-2.10.1.tgz#39c8918ceff5799f83f9492a848f625add0c766f" - dependencies: - hoek "2.x.x" - -boom@4.x.x: - version "4.3.1" - resolved "https://registry.yarnpkg.com/boom/-/boom-4.3.1.tgz#4f8a3005cb4a7e3889f749030fd25b96e01d2e31" - dependencies: - hoek "4.x.x" - -boom@5.x.x: - version "5.2.0" - resolved "https://registry.yarnpkg.com/boom/-/boom-5.2.0.tgz#5dd9da6ee3a5f302077436290cb717d3f4a54e02" - dependencies: - hoek "4.x.x" - -brace-expansion@^1.0.0: - version "1.1.6" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.6.tgz#7197d7eaa9b87e648390ea61fc66c84427420df9" - dependencies: - balanced-match "^0.4.1" - concat-map "0.0.1" + version "1.13.1" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.13.1.tgz#598afe54755b2868a5330d2aff9d4ebb53209b65" + integrity sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw== brace-expansion@^1.1.7: - version "1.1.10" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.10.tgz#5205cdf64c9798c180dc74b7bfc670c3974e6300" + version "1.1.11" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== dependencies: balanced-match "^1.0.0" concat-map "0.0.1" -braces@^1.8.2: - version "1.8.5" - resolved "https://registry.yarnpkg.com/braces/-/braces-1.8.5.tgz#ba77962e12dff969d6b76711e914b737857bf6a7" - dependencies: - expand-range "^1.8.1" - preserve "^0.2.0" +braces@^2.3.1, braces@^2.3.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" + integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w== + dependencies: + arr-flatten "^1.1.0" + array-unique "^0.3.2" + extend-shallow "^2.0.1" + fill-range "^4.0.0" + isobject "^3.0.1" repeat-element "^1.1.2" + snapdragon "^0.8.1" + snapdragon-node "^2.0.1" + split-string "^3.0.2" + to-regex "^3.0.1" browser-process-hrtime@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-0.1.2.tgz#425d68a58d3447f02a04aa894187fce8af8b7b8e" + version "0.1.3" + resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-0.1.3.tgz#616f00faef1df7ec1b5bf9cfe2bdc3170f26c7b4" + integrity sha512-bRFnI4NnjO6cnyLmOV/7PVoDEMJChlcfN0z4s1YMBY989/SvlfMI1lgCnkFUs53e9gQF+w7qu7XdllSTiSl8Aw== -browser-resolve@^1.11.2: - version "1.11.2" - resolved "https://registry.yarnpkg.com/browser-resolve/-/browser-resolve-1.11.2.tgz#8ff09b0a2c421718a1051c260b32e48f442938ce" +browser-resolve@^1.11.3: + version "1.11.3" + resolved "https://registry.yarnpkg.com/browser-resolve/-/browser-resolve-1.11.3.tgz#9b7cbb3d0f510e4cb86bdbd796124d28b5890af6" + integrity sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ== dependencies: resolve "1.1.7" +browserslist@^4.6.0, browserslist@^4.6.6: + version "4.7.0" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.7.0.tgz#9ee89225ffc07db03409f2fee524dc8227458a17" + integrity sha512-9rGNDtnj+HaahxiVV38Gn8n8Lr8REKsel68v1sPFfIGEK6uSXTY3h9acgiT1dZVtOOUtifo/Dn8daDQ5dUgVsA== + dependencies: + caniuse-lite "^1.0.30000989" + electron-to-chromium "^1.3.247" + node-releases "^1.1.29" + bser@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/bser/-/bser-2.0.0.tgz#9ac78d3ed5d915804fd87acb158bc797147a1719" + version "2.1.0" + resolved "https://registry.yarnpkg.com/bser/-/bser-2.1.0.tgz#65fc784bf7f87c009b973c12db6546902fa9c7b5" + integrity sha512-8zsjWrQkkBoLK6uxASk1nJ2SKv97ltiGDo6A3wA0/yRPz+CwmEyDo0hUrhIuukG2JHpAl3bvFIixw2/3Hi0DOg== dependencies: node-int64 "^0.4.0" -buffer-shims@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/buffer-shims/-/buffer-shims-1.0.0.tgz#9978ce317388c649ad8793028c3477ef044a8b51" - -builtin-modules@^1.0.0, builtin-modules@^1.1.1: +buffer-from@^1.0.0: version "1.1.1" - resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" + integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== + +cache-base@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" + integrity sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ== + dependencies: + 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" caller-path@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-0.1.0.tgz#94085ef63581ecd3daa92444a8fe94e82577751f" + integrity sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8= dependencies: callsites "^0.2.0" callsites@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/callsites/-/callsites-0.2.0.tgz#afab96262910a7f33c19a5775825c69f34e350ca" + integrity sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo= -callsites@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50" - -camelcase@^1.0.2: - version "1.2.1" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-1.2.1.tgz#9bb5304d2e0b56698b2c758b08a3eaa9daa58a39" +callsites@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" + integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== -camelcase@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" +camelcase@^5.0.0, camelcase@^5.3.1: + version "5.3.1" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" + integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== camelize@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/camelize/-/camelize-1.0.0.tgz#164a5483e630fa4321e5af07020e531831b2609b" integrity sha1-FkpUg+Yw+kMh5a8HAg5TGDGyYJs= -caseless@~0.11.0: - version "0.11.0" - resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.11.0.tgz#715b96ea9841593cc33067923f5ec60ebda4f7d7" +caniuse-lite@^1.0.30000989: + version "1.0.30000997" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000997.tgz#ba44a606804f8680894b7042612c2c7f65685b7e" + integrity sha512-BQLFPIdj2ntgBNWp9Q64LGUIEmvhKkzzHhUHR3CD5A9Lb7ZKF20/+sgadhFap69lk5XmK1fTUleDclaRFvgVUA== + +capture-exit@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/capture-exit/-/capture-exit-2.0.0.tgz#fb953bfaebeb781f62898239dabb426d08a509a4" + integrity sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g== + dependencies: + rsvp "^4.8.4" caseless@~0.12.0: version "0.12.0" resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" + integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= -center-align@^0.1.1: - version "0.1.3" - resolved "https://registry.yarnpkg.com/center-align/-/center-align-0.1.3.tgz#aa0d32629b6ee972200411cbd4461c907bc2b7ad" - dependencies: - align-text "^0.1.3" - lazy-cache "^1.0.3" - -chalk@^1.0.0, chalk@^1.1.0, chalk@^1.1.1, chalk@^1.1.3: +chalk@^1.0.0, chalk@^1.1.1, chalk@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" + integrity sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg= dependencies: ansi-styles "^2.2.1" escape-string-regexp "^1.0.2" @@ -934,126 +1336,163 @@ chalk@^1.0.0, chalk@^1.1.0, chalk@^1.1.1, chalk@^1.1.3: strip-ansi "^3.0.0" supports-color "^2.0.0" -chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.3.0.tgz#b5ea48efc9c1793dccc9b4767c93914d3f2d52ba" +chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.4.2: + version "2.4.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== dependencies: - ansi-styles "^3.1.0" + ansi-styles "^3.2.1" escape-string-regexp "^1.0.5" - supports-color "^4.0.0" + supports-color "^5.3.0" chardet@^0.4.0: version "0.4.2" resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.4.2.tgz#b5473b33dc97c424e5d98dc87d55d4d8a29c8bf2" + integrity sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I= -chokidar@^1.6.1: - version "1.6.1" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-1.6.1.tgz#2f4447ab5e96e50fb3d789fd90d4c72e0e4c70c2" +chokidar@^2.1.8: + version "2.1.8" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.8.tgz#804b3a7b6a99358c3c5c61e71d8728f041cff917" + integrity sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg== dependencies: - anymatch "^1.3.0" - async-each "^1.0.0" - glob-parent "^2.0.0" - inherits "^2.0.1" + anymatch "^2.0.0" + async-each "^1.0.1" + braces "^2.3.2" + glob-parent "^3.1.0" + inherits "^2.0.3" is-binary-path "^1.0.0" - is-glob "^2.0.0" + is-glob "^4.0.0" + normalize-path "^3.0.0" path-is-absolute "^1.0.0" - readdirp "^2.0.0" + readdirp "^2.2.1" + upath "^1.1.1" optionalDependencies: - fsevents "^1.0.0" + fsevents "^1.2.7" -ci-info@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-1.0.0.tgz#dc5285f2b4e251821683681c381c3388f46ec534" +chownr@^1.1.1: + version "1.1.3" + resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.3.tgz#42d837d5239688d55f303003a508230fa6727142" + integrity sha512-i70fVHhmV3DtTl6nqvZOnIjbY0Pe4kAUjwHj8z0zAdgBtYrJyYwLKCCuRBQ5ppkyL0AkN7HKRnETdmdp1zqNXw== + +ci-info@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" + integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== circular-json@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/circular-json/-/circular-json-0.3.1.tgz#be8b36aefccde8b3ca7aa2d6afc07a37242c0d2d" + version "0.3.3" + resolved "https://registry.yarnpkg.com/circular-json/-/circular-json-0.3.3.tgz#815c99ea84f6809529d2f45791bdf82711352d66" + integrity sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A== + +class-utils@^0.3.5: + version "0.3.6" + resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" + integrity sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg== + dependencies: + arr-union "^3.1.0" + define-property "^0.2.5" + isobject "^3.0.0" + static-extend "^0.1.1" cli-cursor@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-1.0.2.tgz#64da3f7d56a54412e59794bd62dc35295e8f2987" + integrity sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc= dependencies: restore-cursor "^1.0.1" cli-cursor@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" + integrity sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU= dependencies: restore-cursor "^2.0.0" cli-spinners@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-0.1.2.tgz#bb764d88e185fb9e1e6a2a1f19772318f605e31c" + integrity sha1-u3ZNiOGF+54eaiofGXcjGPYF4xw= cli-truncate@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-0.2.1.tgz#9f15cfbb0705005369216c626ac7d05ab90dd574" + integrity sha1-nxXPuwcFAFNpIWxiasfQWrkN1XQ= dependencies: slice-ansi "0.0.4" string-width "^1.0.1" cli-width@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.1.0.tgz#b234ca209b29ef66fc518d9b98d5847b00edf00a" - -cliui@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-2.1.0.tgz#4b475760ff80264c762c3a1719032e91c7fea0d1" - dependencies: - center-align "^0.1.1" - right-align "^0.1.1" - wordwrap "0.0.2" + version "2.2.0" + resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639" + integrity sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk= -cliui@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-4.0.0.tgz#743d4650e05f36d1ed2575b59638d87322bfbbcc" +cliui@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5" + integrity sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA== dependencies: - string-width "^2.1.1" - strip-ansi "^4.0.0" - wrap-ansi "^2.0.0" + string-width "^3.1.0" + strip-ansi "^5.2.0" + wrap-ansi "^5.1.0" co@^4.6.0: version "4.6.0" resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" + integrity sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ= code-point-at@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" + integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c= + +collection-visit@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" + integrity sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA= + dependencies: + map-visit "^1.0.0" + object-visit "^1.0.0" color-convert@^1.9.0: - version "1.9.1" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.1.tgz#c1261107aeb2f294ebffec9ed9ecad529a6097ed" + version "1.9.3" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== dependencies: - color-name "^1.1.1" + color-name "1.1.3" -color-name@^1.1.1: +color-name@1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= -combined-stream@^1.0.5, combined-stream@~1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.5.tgz#938370a57b4a51dea2c77c15d5c5fdf895164009" +combined-stream@^1.0.6, combined-stream@~1.0.6: + version "1.0.8" + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" + integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== dependencies: delayed-stream "~1.0.0" -commander@^2.11.0: - version "2.13.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.13.0.tgz#6964bca67685df7c1f1430c584f07d7597885b9c" +commander@^2.11.0, commander@^2.8.1, commander@^2.9.0, commander@~2.20.0: + version "2.20.1" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.1.tgz#3863ce3ca92d0831dcf2a102f5fb4b5926afd0f9" + integrity sha512-cCuLsMhJeWQ/ZpsFTbE765kvVfoeSddc4nU3up4fV+fDBcfUXnbITJ+JzhkdjzOqhURjZgujxaioam4RM9yGUg== -commander@^2.9.0: - version "2.9.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.9.0.tgz#9c99094176e12240cb22d6c5146098400fe0f7d4" - dependencies: - graceful-readlink ">= 1.0.0" +component-emitter@^1.2.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" + integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg== concat-map@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= concat-stream@^1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.0.tgz#0aac662fd52be78964d5532f694784e70110acf7" + version "1.6.2" + resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" + integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== dependencies: + buffer-from "^1.0.0" inherits "^2.0.3" readable-stream "^2.2.2" typedarray "^0.0.6" @@ -1061,38 +1500,42 @@ concat-stream@^1.6.0: console-control-strings@^1.0.0, console-control-strings@~1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" + integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4= contains-path@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/contains-path/-/contains-path-0.1.0.tgz#fe8cf184ff6670b6baef01a9d4861a5cbec4120a" + integrity sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo= -content-type-parser@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/content-type-parser/-/content-type-parser-1.0.2.tgz#caabe80623e63638b2502fd4c7f12ff4ce2352e7" - -convert-source-map@^1.1.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.3.0.tgz#e9f3e9c6e2728efc2676696a70eb382f73106a67" - -convert-source-map@^1.4.0, convert-source-map@^1.5.0: - version "1.5.1" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.5.1.tgz#b8278097b9bc229365de5c62cf5fcaed8b5599e5" +convert-source-map@^1.1.0, convert-source-map@^1.4.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.6.0.tgz#51b537a8c43e0f04dec1993bffcdd504e758ac20" + integrity sha512-eFu7XigvxdZ1ETfbgPBohgyQ/Z++C0eEhTor0qRwBw9unw+L0/6V8wkSuGgzdThkiS5lSpdptOQPD8Ak40a+7A== + dependencies: + safe-buffer "~5.1.1" -core-js@^2.4.0: - version "2.4.1" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.4.1.tgz#4de911e667b0eae9124e34254b53aea6fc618d3e" +copy-descriptor@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" + integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= -core-js@^2.5.0: - version "2.5.3" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.5.3.tgz#8acc38345824f16d8365b7c9b4259168e8ed603e" +core-js-compat@^3.1.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.2.1.tgz#0cbdbc2e386e8e00d3b85dc81c848effec5b8150" + integrity sha512-MwPZle5CF9dEaMYdDeWm73ao/IflDH+FjeJCWEADcEgFSE9TLimFKwJsfmkwzI8eC0Aj0mgvMDjeQjrElkz4/A== + dependencies: + browserslist "^4.6.6" + semver "^6.3.0" -core-util-is@~1.0.0: +core-util-is@1.0.2, core-util-is@~1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" + integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= cosmiconfig@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-4.0.0.tgz#760391549580bbd2df1e562bc177b13c290972dc" + integrity sha512-6e5vDdrXZD+t5v0L8CrurPeybg4Fmf+FCSYxXKYVAqLUtyCSbuyqE059d0kDthTNRzKVjL7QMgNpEUlsoYH3iQ== dependencies: is-directory "^0.3.1" js-yaml "^3.9.0" @@ -1102,141 +1545,165 @@ cosmiconfig@^4.0.0: cross-spawn@^5.0.1, cross-spawn@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" + integrity sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk= dependencies: lru-cache "^4.0.1" shebang-command "^1.2.0" which "^1.2.9" -cryptiles@2.x.x: - version "2.0.5" - resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-2.0.5.tgz#3bdfecdc608147c1c67202fa291e7dca59eaa3b8" - dependencies: - boom "2.x.x" - -cryptiles@3.x.x: - version "3.1.2" - resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-3.1.2.tgz#a89fbb220f5ce25ec56e8c4aa8a4fd7b5b0d29fe" +cross-spawn@^6.0.0: + version "6.0.5" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" + integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== dependencies: - boom "5.x.x" + nice-try "^1.0.4" + path-key "^2.0.1" + semver "^5.5.0" + shebang-command "^1.2.0" + which "^1.2.9" css-color-keywords@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/css-color-keywords/-/css-color-keywords-1.0.0.tgz#fea2616dc676b2962686b3af8dbdbe180b244e05" + integrity sha1-/qJhbcZ2spYmhrOvjb2+GAskTgU= cssom@0.3.x, "cssom@>= 0.3.2 < 0.4.0": - version "0.3.2" - resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.2.tgz#b8036170c79f07a90ff2f16e22284027a243848b" + version "0.3.8" + resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.8.tgz#9f1276f5b2b463f2114d3f2c75250af8c1a36f4a" + integrity sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg== -"cssstyle@>= 0.2.37 < 0.3.0": - version "0.2.37" - resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-0.2.37.tgz#541097234cb2513c83ceed3acddc27ff27987d54" +cssstyle@^1.0.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-1.4.0.tgz#9d31328229d3c565c61e586b02041a28fccdccf1" + integrity sha512-GBrLZYZ4X4x6/QEoBnIrqb8B/f5l4+8me2dkom/j1Gtbxy0kBv6OGzKuAsGM75bkGwGAFkt56Iwg28S3XTZgSA== dependencies: cssom "0.3.x" dashdash@^1.12.0: version "1.14.1" resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" + integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA= dependencies: assert-plus "^1.0.0" -date-fns@^1.27.2: - version "1.29.0" - resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-1.29.0.tgz#12e609cdcb935127311d04d33334e2960a2a54e6" - -debug@^2.1.1, debug@^2.2.0: - version "2.6.0" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.0.tgz#bc596bcabe7617f11d9fa15361eded5608b8499b" +data-urls@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-1.1.0.tgz#15ee0582baa5e22bb59c77140da8f9c76963bbfe" + integrity sha512-YTWYI9se1P55u58gL5GkQHW4P6VJBJ5iBT+B5a7i2Tjadhv52paJG0qHX4A0OR6/t52odI64KP2YvFpkDOi3eQ== dependencies: - ms "0.7.2" + abab "^2.0.0" + whatwg-mimetype "^2.2.0" + whatwg-url "^7.0.0" + +date-fns@^1.27.2: + version "1.30.1" + resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-1.30.1.tgz#2e71bf0b119153dbb4cc4e88d9ea5acfb50dc05c" + integrity sha512-hBSVCvSmWC+QypYObzwGOd9wqdDpOt+0wl0KbU+R+uuZBS1jN8VsD1ss3irQDknRj5NvxiTF6oj/nDRnN/UQNw== -debug@^2.6.8, debug@^2.6.9: +debug@^2.2.0, debug@^2.3.3, debug@^2.6.8, debug@^2.6.9: version "2.6.9" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== dependencies: ms "2.0.0" -debug@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" +debug@^3.1.0, debug@^3.2.6: + version "3.2.6" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" + integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ== dependencies: - ms "2.0.0" + ms "^2.1.1" -debug@~2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.2.0.tgz#f87057e995b1a1f6ae6a4960664137bc56f039da" +debug@^4.1.0, debug@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" + integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw== dependencies: - ms "0.7.1" + ms "^2.1.1" -decamelize@^1.0.0, decamelize@^1.1.1: +decamelize@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" + integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= + +decode-uri-component@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" + integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= dedent@^0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c" + integrity sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw= -deep-extend@~0.4.0: - version "0.4.1" - resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.4.1.tgz#efe4113d08085f4e6f9687759810f807469e2253" +deep-extend@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" + integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== deep-is@~0.1.3: version "0.1.3" resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" + integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= -default-require-extensions@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/default-require-extensions/-/default-require-extensions-1.0.0.tgz#f37ea15d3e13ffd9b437d33e1a75b5fb97874cb8" +define-properties@^1.1.2, define-properties@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" + integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== dependencies: - strip-bom "^2.0.0" + object-keys "^1.0.12" -define-properties@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.2.tgz#83a73f2fea569898fb737193c8f873caf6d45c94" +define-property@^0.2.5: + version "0.2.5" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" + integrity sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY= dependencies: - foreach "^2.0.5" - object-keys "^1.0.8" + is-descriptor "^0.1.0" -del@^2.0.2: - version "2.2.2" - resolved "https://registry.yarnpkg.com/del/-/del-2.2.2.tgz#c12c981d067846c84bcaf862cff930d907ffd1a8" +define-property@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" + integrity sha1-dp66rz9KY6rTr56NMEybvnm/sOY= dependencies: - 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" + is-descriptor "^1.0.0" + +define-property@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d" + integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ== + dependencies: + is-descriptor "^1.0.2" + isobject "^3.0.1" delayed-stream@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= delegates@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" - -detect-indent@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-4.0.0.tgz#f76d064352cdf43a1cb6ce619c4ee3a9475de208" - dependencies: - repeating "^2.0.0" + integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o= detect-libc@^1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" + integrity sha1-+hN8S9aY7fVc1c0CrFWfkaTEups= detect-newline@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-2.1.0.tgz#f41f1c10be4b00e87b5f13da680759f2c5bfd3e2" + integrity sha1-9B8cEL5LAOh7XxPaaAdZ8sW/0+I= -diff@^3.2.0: - version "3.4.0" - resolved "https://registry.yarnpkg.com/diff/-/diff-3.4.0.tgz#b1d85507daf3964828de54b37d0d73ba67dda56c" +diff-sequences@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-24.9.0.tgz#5715d6244e2aa65f48bba0bc972db0b0b11e95b5" + integrity sha512-Dj6Wk3tWyTE+Fo1rW8v0Xhwk80um6yFYKbuAxc9c3EZxIHFDYwbi34Uk42u1CdnIiVorvt4RmlSDjIPyzGC2ew== doctrine@1.5.0: version "1.5.0" resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-1.5.0.tgz#379dce730f6166f76cefa4e6707a159b02c5a6fa" + integrity sha1-N53Ocw9hZvds76TmcHoVmwLFpvo= dependencies: esutils "^2.0.2" isarray "^1.0.0" @@ -1244,114 +1711,147 @@ doctrine@1.5.0: doctrine@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" + integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw== dependencies: esutils "^2.0.2" -domexception@^1.0.0: +domexception@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/domexception/-/domexception-1.0.1.tgz#937442644ca6a31261ef36e3ec677fe805582c90" + integrity sha512-raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug== dependencies: webidl-conversions "^4.0.2" ecc-jsbn@~0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz#0fc73a9ed5f0d53c38193398523ef7e543777505" + version "0.1.2" + resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" + integrity sha1-OoOpBOVDUyh4dMVkt1SThoSamMk= dependencies: jsbn "~0.1.0" + safer-buffer "^2.1.0" + +electron-to-chromium@^1.3.247: + version "1.3.269" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.269.tgz#3e00cc9266a0123fc2e7b4f290899e257200e6e3" + integrity sha512-t2ZTfo07HxkxTOUbIwMmqHBSnJsC9heqJUm7LwQu2iSk0wNhG4H5cMREtb8XxeCrQABDZ6IqQKY3yZq+NfAqwg== elegant-spinner@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/elegant-spinner/-/elegant-spinner-1.0.1.tgz#db043521c95d7e303fd8f345bedc3349cfb0729e" + integrity sha1-2wQ1IcldfjA/2PNFvtwzSc+wcp4= -error-ex@^1.2.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.0.tgz#e67b43f3e82c96ea3a584ffee0b9fc3325d802d9" +emoji-regex@^7.0.1: + version "7.0.3" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" + integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== + +end-of-stream@^1.1.0: + version "1.4.4" + resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" + integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== dependencies: - is-arrayish "^0.2.1" + once "^1.4.0" -error-ex@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.1.tgz#f855a86ce61adc4e8621c3cda21e7a7612c3a8dc" +error-ex@^1.2.0, error-ex@^1.3.1: + version "1.3.2" + resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" + integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== dependencies: is-arrayish "^0.2.1" -es-abstract@^1.5.1: - version "1.10.0" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.10.0.tgz#1ecb36c197842a00d8ee4c2dfd8646bb97d60864" +es-abstract@^1.12.0, es-abstract@^1.5.1, es-abstract@^1.7.0: + version "1.14.2" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.14.2.tgz#7ce108fad83068c8783c3cdf62e504e084d8c497" + integrity sha512-DgoQmbpFNOofkjJtKwr87Ma5EW4Dc8fWhD0R+ndq7Oc456ivUfGOOP6oAZTTKl5/CcNMP+EN+e3/iUzgE0veZg== dependencies: - es-to-primitive "^1.1.1" + es-to-primitive "^1.2.0" function-bind "^1.1.1" - has "^1.0.1" - is-callable "^1.1.3" + has "^1.0.3" + has-symbols "^1.0.0" + is-callable "^1.1.4" is-regex "^1.0.4" + object-inspect "^1.6.0" + object-keys "^1.1.1" + string.prototype.trimleft "^2.0.0" + string.prototype.trimright "^2.0.0" -es-to-primitive@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.1.1.tgz#45355248a88979034b6792e19bb81f2b7975dd0d" +es-to-primitive@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.0.tgz#edf72478033456e8dda8ef09e00ad9650707f377" + integrity sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg== dependencies: - is-callable "^1.1.1" + is-callable "^1.1.4" is-date-object "^1.0.1" - is-symbol "^1.0.1" + is-symbol "^1.0.2" escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= -escodegen@^1.9.0: - version "1.9.0" - resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.9.0.tgz#9811a2f265dc1cd3894420ee3717064b632b8852" +escodegen@^1.9.1: + version "1.12.0" + resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.12.0.tgz#f763daf840af172bb3a2b6dd7219c0e17f7ff541" + integrity sha512-TuA+EhsanGcme5T3R0L80u4t8CpbXQjegRmf7+FPTJrtCTErXFeelblRgHQa1FofEzqYYJmJ/OqjTwREp9qgmg== dependencies: esprima "^3.1.3" estraverse "^4.2.0" esutils "^2.0.2" optionator "^0.8.1" optionalDependencies: - source-map "~0.5.6" + source-map "~0.6.1" eslint-config-airbnb-base@^12.1.0: version "12.1.0" resolved "https://registry.yarnpkg.com/eslint-config-airbnb-base/-/eslint-config-airbnb-base-12.1.0.tgz#386441e54a12ccd957b0a92564a4bafebd747944" + integrity sha512-/vjm0Px5ZCpmJqnjIzcFb9TKZrKWz0gnuG/7Gfkt0Db1ELJR51xkZth+t14rYdqWgX836XbuxtArbIHlVhbLBA== dependencies: eslint-restricted-globals "^0.1.1" eslint-config-prettier@^2.9.0: - version "2.9.0" - resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-2.9.0.tgz#5ecd65174d486c22dff389fe036febf502d468a3" + version "2.10.0" + resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-2.10.0.tgz#ec07bc1d01f87d09f61d3840d112dc8a9791e30b" + integrity sha512-Mhl90VLucfBuhmcWBgbUNtgBiK955iCDK1+aHAz7QfDQF6wuzWZ6JjihZ3ejJoGlJWIuko7xLqNm8BA5uenKhA== dependencies: get-stdin "^5.0.1" -eslint-import-resolver-node@^0.3.1: +eslint-import-resolver-node@^0.3.2: version "0.3.2" resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.2.tgz#58f15fb839b8d0576ca980413476aab2472db66a" + integrity sha512-sfmTqJfPSizWu4aymbPr4Iidp5yKm8yDkHp+Ir3YiTHiiDfxh69mOUsmiqW6RZ9zRXFaF64GtYmN7e+8GHBv6Q== dependencies: debug "^2.6.9" resolve "^1.5.0" -eslint-module-utils@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.1.1.tgz#abaec824177613b8a95b299639e1b6facf473449" +eslint-module-utils@^2.4.0: + version "2.4.1" + resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.4.1.tgz#7b4675875bf96b0dbf1b21977456e5bb1f5e018c" + integrity sha512-H6DOj+ejw7Tesdgbfs4jeS4YMFrT8uI8xwd1gtQqXssaR0EQ26L+2O/w6wkYFy2MymON0fTwHmXBvvfLNZVZEw== dependencies: debug "^2.6.8" - pkg-dir "^1.0.0" + pkg-dir "^2.0.0" eslint-plugin-import@^2.8.0: - version "2.8.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.8.0.tgz#fa1b6ef31fcb3c501c09859c1b86f1fc5b986894" + version "2.18.2" + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.18.2.tgz#02f1180b90b077b33d447a17a2326ceb400aceb6" + integrity sha512-5ohpsHAiUBRNaBWAF08izwUGlbrJoJJ+W9/TBwsGoR1MnlgfwMIKrFeSjWbt6moabiXW9xNvtFz+97KHRfI4HQ== dependencies: - builtin-modules "^1.1.1" + array-includes "^3.0.3" contains-path "^0.1.0" - debug "^2.6.8" + 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.cond "^4.3.0" - minimatch "^3.0.3" + eslint-import-resolver-node "^0.3.2" + eslint-module-utils "^2.4.0" + has "^1.0.3" + minimatch "^3.0.4" + object.values "^1.1.0" read-pkg-up "^2.0.0" + resolve "^1.11.0" eslint-plugin-prettier@^2.6.0: - version "2.6.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-2.6.0.tgz#33e4e228bdb06142d03c560ce04ec23f6c767dd7" + version "2.7.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-2.7.0.tgz#b4312dcf2c1d965379d7f9d5b5f8aaadc6a45904" + integrity sha512-CStQYJgALoQBw3FsBzH0VOVDRnJ/ZimUlpLm226U8qgqYJfPOY/CPK6wyRInMxh73HSKg5wyRwdS4BVYYHwokA== dependencies: fast-diff "^1.1.1" jest-docblock "^21.0.0" @@ -1359,21 +1859,25 @@ eslint-plugin-prettier@^2.6.0: eslint-restricted-globals@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/eslint-restricted-globals/-/eslint-restricted-globals-0.1.1.tgz#35f0d5cbc64c2e3ed62e93b4b1a7af05ba7ed4d7" + integrity sha1-NfDVy8ZMLj7WLpO0saevBbp+1Nc= eslint-scope@^3.7.1: - version "3.7.1" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-3.7.1.tgz#3d63c3edfda02e06e01a452ad88caacc7cdcb6e8" + version "3.7.3" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-3.7.3.tgz#bb507200d3d17f60247636160b4826284b108535" + integrity sha512-W+B0SvF4gamyCTmUc+uITPY0989iXVfKvhwtmJocTaYoc/3khEHmEmvfY/Gn9HA9VV75jrQECsHizkNw1b68FA== dependencies: esrecurse "^4.1.0" estraverse "^4.1.1" eslint-visitor-keys@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz#3f3180fb2e291017716acb4c9d6d5b5c34a6a81d" + version "1.1.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz#e2a82cea84ff246ad6fb57f9bde5b46621459ec2" + integrity sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A== eslint@^4.17.0: - version "4.17.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-4.17.0.tgz#dc24bb51ede48df629be7031c71d9dc0ee4f3ddf" + version "4.19.1" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-4.19.1.tgz#32d1d653e1d90408854bfb296f076ec7e186a300" + integrity sha512-bT3/1x1EbZB7phzYu7vCr1v3ONuzDtX8WjuM9c0iYxe+cq+pwcKEoQjl7zd3RpC6YOLgnSy3cTN58M2jcoPDIQ== dependencies: ajv "^5.3.0" babel-code-frame "^6.22.0" @@ -1384,7 +1888,7 @@ eslint@^4.17.0: doctrine "^2.1.0" eslint-scope "^3.7.1" eslint-visitor-keys "^1.0.0" - espree "^3.5.2" + espree "^3.5.4" esquery "^1.0.0" esutils "^2.0.2" file-entry-cache "^2.0.0" @@ -1406,66 +1910,65 @@ eslint@^4.17.0: path-is-inside "^1.0.2" pluralize "^7.0.0" progress "^2.0.0" + regexpp "^1.0.1" require-uncached "^1.0.3" semver "^5.3.0" strip-ansi "^4.0.0" strip-json-comments "~2.0.1" - table "^4.0.1" + table "4.0.2" text-table "~0.2.0" -espree@^3.5.2: - version "3.5.3" - resolved "https://registry.yarnpkg.com/espree/-/espree-3.5.3.tgz#931e0af64e7fbbed26b050a29daad1fc64799fa6" +espree@^3.5.4: + version "3.5.4" + resolved "https://registry.yarnpkg.com/espree/-/espree-3.5.4.tgz#b0f447187c8a8bed944b815a660bddf5deb5d1a7" + integrity sha512-yAcIQxtmMiB/jL32dzEp2enBeidsB7xWPLNiw3IIkpVds1P+h7qF9YwJq1yUNzp2OKXgAprs4F61ih66UsoD1A== dependencies: - acorn "^5.4.0" + acorn "^5.5.0" acorn-jsx "^3.0.0" -esprima@^2.6.0: - version "2.7.3" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581" - esprima@^3.1.3: version "3.1.3" resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633" + integrity sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM= esprima@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.0.tgz#4499eddcd1110e0b218bacf2fa7f7f59f55ca804" + version "4.0.1" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" + integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== esquery@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.0.0.tgz#cfba8b57d7fba93f17298a8a006a04cda13d80fa" + version "1.0.1" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.0.1.tgz#406c51658b1f5991a5f9b62b1dc25b00e3e5c708" + integrity sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA== dependencies: estraverse "^4.0.0" esrecurse@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.1.0.tgz#4713b6536adf7f2ac4f327d559e7756bff648220" + version "4.2.1" + resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.2.1.tgz#007a3b9fdbc2b3bb87e4879ea19c92fdbd3942cf" + integrity sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ== dependencies: - estraverse "~4.1.0" - object-assign "^4.0.1" - -estraverse@^4.0.0, estraverse@^4.1.1, estraverse@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13" + estraverse "^4.1.0" -estraverse@~4.1.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.1.1.tgz#f6caca728933a850ef90661d0e17982ba47111a2" +estraverse@^4.0.0, estraverse@^4.1.0, estraverse@^4.1.1, estraverse@^4.2.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" + integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== esutils@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" + version "2.0.3" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" + integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== -exec-sh@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.2.0.tgz#14f75de3f20d286ef933099b2ce50a90359cef10" - dependencies: - merge "^1.1.3" +exec-sh@^0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.3.2.tgz#6738de2eb7c8e671d0366aea0b0db8c6f7d7391b" + integrity sha512-9sLAvzhI5nc8TpuQUh4ahMdCrWT00wPWz7j47/emR5+2qEfoZP5zzUXvx+vdx+H6ohhnsYC31iX04QLYJK8zTg== -execa@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-0.7.0.tgz#944becd34cc41ee32a63a9faf27ad5a65fc59777" +execa@^0.8.0: + version "0.8.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-0.8.0.tgz#d8d76bbc1b55217ed190fd6dd49d3c774ecfc8da" + integrity sha1-2NdrvBtVIX7RkP1t1J08d07PyNo= dependencies: cross-spawn "^5.0.1" get-stream "^3.0.0" @@ -1475,12 +1978,13 @@ execa@^0.7.0: signal-exit "^3.0.0" strip-eof "^1.0.0" -execa@^0.8.0: - version "0.8.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-0.8.0.tgz#d8d76bbc1b55217ed190fd6dd49d3c774ecfc8da" +execa@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" + integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA== dependencies: - cross-spawn "^5.0.1" - get-stream "^3.0.0" + cross-spawn "^6.0.0" + get-stream "^4.0.0" is-stream "^1.1.0" npm-run-path "^2.0.0" p-finally "^1.0.0" @@ -1490,85 +1994,127 @@ execa@^0.8.0: exit-hook@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/exit-hook/-/exit-hook-1.1.1.tgz#f05ca233b48c05d54fff07765df8507e95c02ff8" + integrity sha1-8FyiM7SMBdVP/wd2XfhQfpXAL/g= exit@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" + integrity sha1-BjJjj42HfMghB9MKD/8aF8uhzQw= -expand-brackets@^0.1.4: - version "0.1.5" - resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-0.1.5.tgz#df07284e342a807cd733ac5af72411e581d1177b" - dependencies: - is-posix-bracket "^0.1.0" +expand-brackets@^2.1.4: + version "2.1.4" + resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" + integrity sha1-t3c14xXOMPa27/D4OwQVGiJEliI= + dependencies: + 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" + +expect@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/expect/-/expect-24.9.0.tgz#b75165b4817074fa4a157794f46fe9f1ba15b6ca" + integrity sha512-wvVAx8XIol3Z5m9zvZXiyZOQ+sRJqNTIm6sGjdWlaZIeupQGO3WbYI+15D/AmEwZywL6wtJkbAbJtzkOfBuR0Q== + dependencies: + "@jest/types" "^24.9.0" + ansi-styles "^3.2.0" + jest-get-type "^24.9.0" + jest-matcher-utils "^24.9.0" + jest-message-util "^24.9.0" + jest-regex-util "^24.9.0" -expand-range@^1.8.1: - version "1.8.2" - resolved "https://registry.yarnpkg.com/expand-range/-/expand-range-1.8.2.tgz#a299effd335fe2721ebae8e257ec79644fc85337" +extend-shallow@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" + integrity sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8= dependencies: - fill-range "^2.1.0" + is-extendable "^0.1.0" -expect@^22.2.2: - version "22.2.2" - resolved "https://registry.yarnpkg.com/expect/-/expect-22.2.2.tgz#6cb6ae2eeb651a4187b9096de70333a018fab63f" +extend-shallow@^3.0.0, extend-shallow@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" + integrity sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg= dependencies: - ansi-styles "^3.2.0" - jest-diff "^22.1.0" - jest-get-type "^22.1.0" - jest-matcher-utils "^22.2.0" - jest-message-util "^22.2.0" - jest-regex-util "^22.1.0" - -extend@~3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.0.tgz#5a474353b9f3353ddd8176dfd37b91c83a46f1d4" + assign-symbols "^1.0.0" + is-extendable "^1.0.1" -extend@~3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.1.tgz#a755ea7bc1adfcc5a31ce7e762dbaadc5e636444" +extend@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" + integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== external-editor@^2.0.4: - version "2.1.0" - resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-2.1.0.tgz#3d026a21b7f95b5726387d4200ac160d372c3b48" + version "2.2.0" + resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-2.2.0.tgz#045511cfd8d133f3846673d1047c154e214ad3d5" + integrity sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A== dependencies: chardet "^0.4.0" iconv-lite "^0.4.17" tmp "^0.0.33" -extglob@^0.3.1: - version "0.3.2" - resolved "https://registry.yarnpkg.com/extglob/-/extglob-0.3.2.tgz#2e18ff3d2f49ab2765cec9023f011daa8d8349a1" - dependencies: - is-extglob "^1.0.0" +extglob@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" + integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw== + dependencies: + 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" + +extsprintf@1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" + integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU= -extsprintf@1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.0.2.tgz#e1080e0658e300b06294990cc70e1502235fd550" +extsprintf@^1.2.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" + integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8= fast-deep-equal@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-1.0.0.tgz#96256a3bc975595eb36d82e9929d060d893439ff" + version "1.1.0" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz#c053477817c86b51daa853c81e059b733d023614" + integrity sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ= + +fast-deep-equal@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz#7b05218ddf9667bf7f370bf7fdb2cb15fdd0aa49" + integrity sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk= fast-diff@^1.1.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.1.2.tgz#4b62c42b8e03de3f848460b639079920695d0154" + version "1.2.0" + resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.2.0.tgz#73ee11982d86caaf7959828d519cfe927fac5f03" + integrity sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w== fast-json-stable-stringify@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2" + integrity sha1-1RQsDK7msRifh9OnYREGT4bIu/I= fast-levenshtein@~2.0.4: version "2.0.6" resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= fb-watchman@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.0.tgz#54e9abf7dfa2f26cd9b1636c588c1afc05de5d58" + integrity sha1-VOmr99+i8mzZsWNsWIwa/AXeXVg= dependencies: bser "^2.0.0" figures@^1.7.0: version "1.7.0" resolved "https://registry.yarnpkg.com/figures/-/figures-1.7.0.tgz#cbe1e3affcf1cd44b80cadfed28dc793a9701d2e" + integrity sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4= dependencies: escape-string-regexp "^1.0.5" object-assign "^4.1.0" @@ -1576,174 +2122,122 @@ figures@^1.7.0: figures@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962" + integrity sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI= dependencies: escape-string-regexp "^1.0.5" file-entry-cache@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-2.0.0.tgz#c392990c3e684783d838b8c84a45d8a048458361" + integrity sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E= dependencies: flat-cache "^1.2.1" object-assign "^4.0.1" -filename-regex@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.0.tgz#996e3e80479b98b9897f15a8a58b3d084e926775" - -fileset@^2.0.2: - version "2.0.3" - resolved "https://registry.yarnpkg.com/fileset/-/fileset-2.0.3.tgz#8e7548a96d3cc2327ee5e674168723a333bba2a0" - dependencies: - glob "^7.0.3" - minimatch "^3.0.3" - -fill-range@^2.1.0: - version "2.2.3" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-2.2.3.tgz#50b77dfd7e469bc7492470963699fe7a8485a723" - dependencies: - is-number "^2.1.0" - isobject "^2.0.0" - randomatic "^1.1.3" - repeat-element "^1.1.2" - repeat-string "^1.5.2" +fill-range@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" + integrity sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc= + dependencies: + extend-shallow "^2.0.1" + is-number "^3.0.0" + repeat-string "^1.6.1" + to-regex-range "^2.1.0" find-parent-dir@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/find-parent-dir/-/find-parent-dir-0.3.0.tgz#33c44b429ab2b2f0646299c5f9f718f376ff8d54" - -find-up@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" - dependencies: - path-exists "^2.0.0" - pinkie-promise "^2.0.0" + integrity sha1-M8RLQpqysvBkYpnF+fcY83b/jVQ= find-up@^2.0.0, find-up@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" + integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c= dependencies: locate-path "^2.0.0" +find-up@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" + integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== + dependencies: + locate-path "^3.0.0" + flat-cache@^1.2.1: - version "1.2.2" - resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-1.2.2.tgz#fa86714e72c21db88601761ecf2f555d1abc6b96" + version "1.3.4" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-1.3.4.tgz#2c2ef77525cc2929007dfffa1dd314aa9c9dee6f" + integrity sha512-VwyB3Lkgacfik2vhqR4uv2rvebqmDvFu4jlN/C1RzWoJEo8I7z4Q404oiqYCkq41mni8EzQnm95emU9seckwtg== dependencies: circular-json "^0.3.1" - del "^2.0.2" graceful-fs "^4.1.2" + rimraf "~2.6.2" write "^0.2.1" -for-in@^0.1.5: - version "0.1.6" - resolved "https://registry.yarnpkg.com/for-in/-/for-in-0.1.6.tgz#c9f96e89bfad18a545af5ec3ed352a1d9e5b4dc8" - -for-own@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/for-own/-/for-own-0.1.4.tgz#0149b41a39088c7515f51ebe1c1386d45f935072" - dependencies: - for-in "^0.1.5" - -foreach@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/foreach/-/foreach-2.0.5.tgz#0bee005018aeb260d0a3af3ae658dd0136ec1b99" +for-in@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" + integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA= forever-agent@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" + integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE= -form-data@~2.1.1: - version "2.1.2" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.1.2.tgz#89c3534008b97eada4cbb157d58f6f5df025eae4" +form-data@~2.3.2: + version "2.3.3" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" + integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ== dependencies: asynckit "^0.4.0" - combined-stream "^1.0.5" + combined-stream "^1.0.6" mime-types "^2.1.12" -form-data@~2.3.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.1.tgz#6fb94fbd71885306d73d15cc497fe4cc4ecd44bf" +fragment-cache@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" + integrity sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk= dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.5" - mime-types "^2.1.12" + map-cache "^0.2.2" -fs-readdir-recursive@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs-readdir-recursive/-/fs-readdir-recursive-1.0.0.tgz#8cd1745c8b4f8a29c8caec392476921ba195f560" +fs-minipass@^1.2.5: + version "1.2.7" + resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.7.tgz#ccff8570841e7fe4265693da88936c55aed7f7c7" + integrity sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA== + dependencies: + minipass "^2.6.0" + +fs-readdir-recursive@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz#e32fc030a2ccee44a6b5371308da54be0b397d27" + integrity sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA== fs.realpath@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= -fsevents@^1.0.0: - version "1.0.17" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.0.17.tgz#8537f3f12272678765b4fd6528c0f1f66f8f4558" - dependencies: - nan "^2.3.0" - node-pre-gyp "^0.6.29" - -fsevents@^1.1.1: - version "1.1.3" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.1.3.tgz#11f82318f5fe7bb2cd22965a108e9306208216d8" - dependencies: - nan "^2.3.0" - node-pre-gyp "^0.6.39" - -fstream-ignore@^1.0.5, fstream-ignore@~1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/fstream-ignore/-/fstream-ignore-1.0.5.tgz#9c31dae34767018fe1d249b24dada67d092da105" - dependencies: - fstream "^1.0.0" - inherits "2" - minimatch "^3.0.0" - -fstream@^1.0.0, fstream@^1.0.2, fstream@~1.0.10: - version "1.0.10" - resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.10.tgz#604e8a92fe26ffd9f6fae30399d4984e1ab22822" - dependencies: - graceful-fs "^4.1.2" - inherits "~2.0.0" - mkdirp ">=0.5 0" - rimraf "2" - -fstream@^1.0.10: - version "1.0.11" - resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.11.tgz#5c1fb1f117477114f0632a0eb4b71b3cb0fd3171" +fsevents@^1.2.7: + version "1.2.9" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.9.tgz#3f5ed66583ccd6f400b5a00db6f7e861363e388f" + integrity sha512-oeyj2H3EjjonWcFjD5NvZNE9Rqe4UW+nQBU2HNeKw0koVLEFIhtyETyAakeAM3de7Z/SW5kcA+fZUait9EApnw== dependencies: - graceful-fs "^4.1.2" - inherits "~2.0.0" - mkdirp ">=0.5 0" - rimraf "2" - -function-bind@^1.0.2: - version "1.1.0" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.0.tgz#16176714c801798e4e8f2cf7f7529467bb4a5771" + nan "^2.12.1" + node-pre-gyp "^0.12.0" function-bind@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== functional-red-black-tree@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" - -gauge@~2.7.1: - version "2.7.2" - resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.2.tgz#15cecc31b02d05345a5d6b0e171cdb3ad2307774" - dependencies: - 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" - supports-color "^0.2.0" - wide-align "^1.1.0" + integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= gauge@~2.7.3: version "2.7.4" resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" + integrity sha1-LANAXHU4w51+s3sxcCLjJfsBi/c= dependencies: aproba "^1.0.3" console-control-strings "^1.0.0" @@ -1754,65 +2248,57 @@ gauge@~2.7.3: strip-ansi "^3.0.1" wide-align "^1.1.0" -generate-function@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/generate-function/-/generate-function-2.0.0.tgz#6858fe7c0969b7d4e9093337647ac79f60dfbe74" - -generate-object-property@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/generate-object-property/-/generate-object-property-1.2.0.tgz#9c0e1c40308ce804f4783618b937fa88f99d50d0" - dependencies: - is-property "^1.0.0" - -get-caller-file@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.2.tgz#f702e63127e7e231c160a80c1554acb70d5047e5" +get-caller-file@^2.0.1: + version "2.0.5" + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" + integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== -get-own-enumerable-property-symbols@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-2.0.1.tgz#5c4ad87f2834c4b9b4e84549dc1e0650fb38c24b" +get-own-enumerable-property-symbols@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.0.tgz#b877b49a5c16aefac3655f2ed2ea5b684df8d203" + integrity sha512-CIJYJC4GGF06TakLg8z4GQKvDsx9EMspVxOYih7LerEL/WosUnFIww45CGfxfeKHqlg3twgUrYRT1O3WQqjGCg== get-stdin@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-5.0.1.tgz#122e161591e21ff4c52530305693f20e6393a398" + integrity sha1-Ei4WFZHiH/TFJTAwVpPyDmOTo5g= get-stream@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" + integrity sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ= -getpass@^0.1.1: - version "0.1.6" - resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.6.tgz#283ffd9fc1256840875311c1b60e8c40187110e6" +get-stream@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" + integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== dependencies: - assert-plus "^1.0.0" + pump "^3.0.0" -glob-base@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/glob-base/-/glob-base-0.3.0.tgz#dbb164f6221b1c0b1ccf82aea328b497df0ea3c4" - dependencies: - glob-parent "^2.0.0" - is-glob "^2.0.0" +get-value@^2.0.3, get-value@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" + integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg= -glob-parent@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-2.0.0.tgz#81383d72db054fcccf5336daa902f182f6edbb28" +getpass@^0.1.1: + version "0.1.7" + resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" + integrity sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo= dependencies: - is-glob "^2.0.0" + assert-plus "^1.0.0" -glob@^7.0.3, glob@^7.0.5: - version "7.1.1" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.1.tgz#805211df04faaf1c63a3600306cdf5ade50b2ec8" +glob-parent@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae" + integrity sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4= dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.0.2" - once "^1.3.0" - path-is-absolute "^1.0.0" + is-glob "^3.1.0" + path-dirname "^1.0.0" -glob@^7.1.1, glob@^7.1.2: - version "7.1.2" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15" +glob@^7.0.0, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3: + version "7.1.4" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.4.tgz#aa608a2f6c577ad357e1ae5a5c26d9a8d1969255" + integrity sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A== dependencies: fs.realpath "^1.0.0" inflight "^1.0.4" @@ -1821,216 +2307,192 @@ glob@^7.1.1, glob@^7.1.2: once "^1.3.0" path-is-absolute "^1.0.0" -globals@^11.0.1: - version "11.3.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-11.3.0.tgz#e04fdb7b9796d8adac9c8f64c14837b2313378b0" - -globals@^9.0.0: - version "9.14.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-9.14.0.tgz#8859936af0038741263053b39d0e76ca241e4034" - -globals@^9.18.0: - version "9.18.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a" +globals@^11.0.1, globals@^11.1.0: + version "11.12.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" + integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== -globby@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/globby/-/globby-5.0.0.tgz#ebd84667ca0dbb330b99bcfc68eac2bc54370e0d" - dependencies: - 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" - -graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.4: - version "4.1.11" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658" - -"graceful-readlink@>= 1.0.0": - version "1.0.1" - resolved "https://registry.yarnpkg.com/graceful-readlink/-/graceful-readlink-1.0.1.tgz#4cafad76bc62f02fa039b2f94e9a3dd3a391a725" +graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2: + version "4.2.2" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.2.tgz#6f0952605d0140c1cfdb138ed005775b92d67b02" + integrity sha512-IItsdsea19BoLC7ELy13q1iJFNmd7ofZH5+X/pJr90/nRoPEX0DJo1dHDbgtYWOhJhcCgMDTOw84RZ72q6lB+Q== growly@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081" + integrity sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE= -handlebars@^4.0.3: - version "4.0.6" - resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.0.6.tgz#2ce4484850537f9c97a8026d5399b935c4ed4ed7" +handlebars@^4.1.2: + version "4.4.0" + resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.4.0.tgz#22e1a897c5d83023d39801f35f6b65cf97ed8b25" + integrity sha512-xkRtOt3/3DzTKMOt3xahj2M/EqNhY988T+imYSlMgs5fVhLN2fmKVVj0LtEGmb+3UUYV5Qmm1052Mm3dIQxOvw== dependencies: - async "^1.4.0" + neo-async "^2.6.0" optimist "^0.6.1" - source-map "^0.4.4" + source-map "^0.6.1" optionalDependencies: - uglify-js "^2.6" - -har-schema@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-1.0.5.tgz#d263135f43307c02c602afc8fe95970c0151369e" + uglify-js "^3.1.4" har-schema@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" + integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI= -har-validator@~2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-2.0.6.tgz#cdcbc08188265ad119b6a5a7c8ab70eecfb5d27d" - dependencies: - chalk "^1.1.1" - commander "^2.9.0" - is-my-json-valid "^2.12.4" - pinkie-promise "^2.0.0" - -har-validator@~4.2.1: - version "4.2.1" - resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-4.2.1.tgz#33481d0f1bbff600dd203d75812a6a5fba002e2a" - dependencies: - ajv "^4.9.1" - har-schema "^1.0.5" - -har-validator@~5.0.3: - version "5.0.3" - resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.0.3.tgz#ba402c266194f15956ef15e0fcf242993f6a7dfd" +har-validator@~5.1.0: + version "5.1.3" + resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.3.tgz#1ef89ebd3e4996557675eed9893110dc350fa080" + integrity sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g== dependencies: - ajv "^5.1.0" + ajv "^6.5.5" har-schema "^2.0.0" has-ansi@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" + integrity sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE= dependencies: ansi-regex "^2.0.0" -has-flag@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa" +has-flag@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= -has-flag@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-2.0.0.tgz#e8207af1cc7b30d446cc70b734b5e8be18f88d51" +has-symbols@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.0.tgz#ba1a8f1af2a0fc39650f5c850367704122063b44" + integrity sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q= has-unicode@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" + integrity sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk= -has@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/has/-/has-1.0.1.tgz#8461733f538b0837c9361e39a9ab9e9704dc2f28" - dependencies: - function-bind "^1.0.2" - -hawk@3.1.3, hawk@~3.1.3: - version "3.1.3" - resolved "https://registry.yarnpkg.com/hawk/-/hawk-3.1.3.tgz#078444bd7c1640b0fe540d2c9b73d59678e8e1c4" +has-value@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" + integrity sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8= dependencies: - boom "2.x.x" - cryptiles "2.x.x" - hoek "2.x.x" - sntp "1.x.x" + get-value "^2.0.3" + has-values "^0.1.4" + isobject "^2.0.0" -hawk@~6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/hawk/-/hawk-6.0.2.tgz#af4d914eb065f9b5ce4d9d11c1cb2126eecc3038" +has-value@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" + integrity sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc= dependencies: - boom "4.x.x" - cryptiles "3.x.x" - hoek "4.x.x" - sntp "2.x.x" + get-value "^2.0.6" + has-values "^1.0.0" + isobject "^3.0.0" -hoek@2.x.x: - version "2.16.3" - resolved "https://registry.yarnpkg.com/hoek/-/hoek-2.16.3.tgz#20bb7403d3cea398e91dc4710a8ff1b8274a25ed" +has-values@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" + integrity sha1-bWHeldkd/Km5oCCJrThL/49it3E= -hoek@4.x.x: - version "4.2.0" - resolved "https://registry.yarnpkg.com/hoek/-/hoek-4.2.0.tgz#72d9d0754f7fe25ca2d01ad8f8f9a9449a89526d" +has-values@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" + integrity sha1-lbC2P+whRmGab+V/51Yo1aOe/k8= + dependencies: + is-number "^3.0.0" + kind-of "^4.0.0" -home-or-tmp@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/home-or-tmp/-/home-or-tmp-2.0.0.tgz#e36c3f2d2cae7d746a857e38d18d5f32a7882db8" +has@^1.0.1, has@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" + integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== dependencies: - os-homedir "^1.0.0" - os-tmpdir "^1.0.1" + function-bind "^1.1.1" hosted-git-info@^2.1.4: - version "2.1.5" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.1.5.tgz#0ba81d90da2e25ab34a332e6ec77936e1598118b" + version "2.8.4" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.4.tgz#44119abaf4bc64692a16ace34700fed9c03e2546" + integrity sha512-pzXIvANXEFrc5oFFXRMkbLPQ2rXRoDERwDLyrcUxGhaZhgP54BBSl9Oheh7Vv0T090cszWBxPjkQQ5Sq1PbBRQ== html-encoding-sniffer@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz#e70d84b94da53aa375e11fe3a351be6642ca46f8" + integrity sha512-71lZziiDnsuabfdYiUeWdCVyKuqwWi23L8YeIgV9jSSZHCtb6wB1BKWooH7L3tn4/FuZJMVWyNaIDr4RGmaSYw== dependencies: whatwg-encoding "^1.0.1" -http-signature@~1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.1.1.tgz#df72e267066cd0ac67fb76adf8e134a8fbcf91bf" - dependencies: - assert-plus "^0.2.0" - jsprim "^1.2.2" - sshpk "^1.7.0" - http-signature@~1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" + integrity sha1-muzZJRFHcvPZW2WmCruPfBj7rOE= dependencies: assert-plus "^1.0.0" jsprim "^1.2.2" sshpk "^1.7.0" -iconv-lite@0.4.13: - version "0.4.13" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.13.tgz#1f88aba4ab0b1508e8312acc39345f36e992e2f2" +iconv-lite@0.4.24, iconv-lite@^0.4.17, iconv-lite@^0.4.4: + version "0.4.24" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" + integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== + dependencies: + safer-buffer ">= 2.1.2 < 3" -iconv-lite@0.4.19, iconv-lite@^0.4.17: - version "0.4.19" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.19.tgz#f7468f60135f5e5dad3399c0a81be9a1603a082b" +ignore-walk@^3.0.1: + version "3.0.2" + resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.2.tgz#99d83a246c196ea5c93ef9315ad7b0819c35069b" + integrity sha512-EXyErtpHbn75ZTsOADsfx6J/FPo6/5cjev46PXrcTpd8z3BoRkXgYu9/JVqrI7tusjmwCZutGeRJeU0Wo1e4Cw== + dependencies: + minimatch "^3.0.4" ignore@^3.3.3: - version "3.3.7" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.7.tgz#612289bfb3c220e186a58118618d5be8c1bab021" + version "3.3.10" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.10.tgz#0a97fb876986e8081c631160f8f9f389157f0043" + integrity sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug== -import-local@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/import-local/-/import-local-1.0.0.tgz#5e4ffdc03f4fe6c009c6729beb29631c2f8227bc" +import-local@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/import-local/-/import-local-2.0.0.tgz#55070be38a5993cf18ef6db7e961f5bee5c5a09d" + integrity sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ== dependencies: - pkg-dir "^2.0.0" + pkg-dir "^3.0.0" resolve-cwd "^2.0.0" imurmurhash@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= indent-string@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-2.1.0.tgz#8e2d48348742121b4a8218b7a137e9a52049dc80" + integrity sha1-ji1INIdCEhtKghi3oTfppSBJ3IA= dependencies: repeating "^2.0.0" indent-string@^3.0.0: version "3.2.0" resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-3.2.0.tgz#4a5fd6d27cc332f37e5419a504dbb837105c9289" + integrity sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok= inflight@^1.0.4: version "1.0.6" resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= dependencies: once "^1.3.0" wrappy "1" -inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.0, inherits@~2.0.1, inherits@~2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" +inherits@2, inherits@^2.0.3, inherits@~2.0.3: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== ini@~1.3.0: - version "1.3.4" - resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.4.tgz#0537cb79daf59b59a1a517dff706c86ec039162e" + version "1.3.5" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" + integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw== inquirer@^3.0.6: version "3.3.0" resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-3.3.0.tgz#9dd2f2ad765dcab1ff0443b491442a20ba227dc9" + integrity sha512-h+xtnyk4EwKvFWHrUYsWErEVR+igKtLdchu+o0Z1RL7VU/jVMFbYir2bp6bAj8efFNxWqHX0dIss6fJQ+/+qeQ== dependencies: ansi-escapes "^3.0.0" chalk "^2.0.0" @@ -2047,697 +2509,852 @@ inquirer@^3.0.6: strip-ansi "^4.0.0" through "^2.3.6" -invariant@^2.2.0, invariant@^2.2.2: - version "2.2.2" - resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.2.tgz#9e1f56ac0acdb6bf303306f338be3b204ae60360" +invariant@^2.2.2, invariant@^2.2.4: + version "2.2.4" + resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" + integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA== dependencies: loose-envify "^1.0.0" -invert-kv@^1.0.0: +is-accessor-descriptor@^0.1.6: + version "0.1.6" + resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" + integrity sha1-qeEss66Nh2cn7u84Q/igiXtcmNY= + dependencies: + kind-of "^3.0.2" + +is-accessor-descriptor@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6" + resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656" + integrity sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ== + dependencies: + kind-of "^6.0.0" is-arrayish@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= is-binary-path@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" + integrity sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg= dependencies: binary-extensions "^1.0.0" -is-buffer@^1.0.2: +is-buffer@^1.1.5: + version "1.1.6" + resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" + integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== + +is-callable@^1.1.4: version "1.1.4" - resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.4.tgz#cfc86ccd5dc5a52fa80489111c6920c457e2d98b" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.4.tgz#1e1adf219e1eeb684d691f9d6a05ff0d30a24d75" + integrity sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA== -is-builtin-module@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-builtin-module/-/is-builtin-module-1.0.0.tgz#540572d34f7ac3119f8f76c30cbc1b1e037affbe" +is-ci@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c" + integrity sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w== dependencies: - builtin-modules "^1.0.0" + ci-info "^2.0.0" -is-callable@^1.1.1, is-callable@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.3.tgz#86eb75392805ddc33af71c92a0eedf74ee7604b2" +is-data-descriptor@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" + integrity sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y= + dependencies: + kind-of "^3.0.2" -is-ci@^1.0.10: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-1.1.0.tgz#247e4162e7860cebbdaf30b774d6b0ac7dcfe7a5" +is-data-descriptor@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7" + integrity sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ== dependencies: - ci-info "^1.0.0" + kind-of "^6.0.0" is-date-object@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.1.tgz#9aa20eb6aeebbff77fbd33e74ca01b33581d3a16" + integrity sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY= -is-directory@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/is-directory/-/is-directory-0.3.1.tgz#61339b6f2475fc772fd9c9d83f5c8575dc154ae1" +is-descriptor@^0.1.0: + version "0.1.6" + resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" + integrity sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg== + dependencies: + is-accessor-descriptor "^0.1.6" + is-data-descriptor "^0.1.4" + kind-of "^5.0.0" -is-dotfile@^1.0.0: +is-descriptor@^1.0.0, is-descriptor@^1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.2.tgz#2c132383f39199f8edc268ca01b9b007d205cc4d" - -is-equal-shallow@^0.1.3: - version "0.1.3" - resolved "https://registry.yarnpkg.com/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz#2238098fc221de0bcfa5d9eac4c45d638aa1c534" + resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec" + integrity sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg== dependencies: - is-primitive "^2.0.0" + is-accessor-descriptor "^1.0.0" + is-data-descriptor "^1.0.0" + kind-of "^6.0.2" + +is-directory@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/is-directory/-/is-directory-0.3.1.tgz#61339b6f2475fc772fd9c9d83f5c8575dc154ae1" + integrity sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE= -is-extendable@^0.1.1: +is-extendable@^0.1.0, is-extendable@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" + integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik= -is-extglob@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0" +is-extendable@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" + integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA== + dependencies: + is-plain-object "^2.0.4" -is-extglob@^2.1.1: +is-extglob@^2.1.0, is-extglob@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= is-finite@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.0.2.tgz#cc6677695602be550ef11e8b4aa6305342b6d0aa" + integrity sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko= dependencies: number-is-nan "^1.0.0" is-fullwidth-code-point@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" + integrity sha1-754xOG8DGn8NZDr4L95QxFfvAMs= dependencies: number-is-nan "^1.0.0" is-fullwidth-code-point@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" + integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= -is-generator-fn@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-1.0.0.tgz#969d49e1bb3329f6bb7f09089be26578b2ddd46a" +is-generator-fn@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118" + integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ== -is-glob@^2.0.0, is-glob@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863" +is-glob@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a" + integrity sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo= dependencies: - is-extglob "^1.0.0" + is-extglob "^2.1.0" is-glob@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.0.tgz#9521c76845cc2610a85203ddf080a958c2ffabc0" + version "4.0.1" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" + integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== dependencies: is-extglob "^2.1.1" -is-my-json-valid@^2.12.4: - version "2.15.0" - resolved "https://registry.yarnpkg.com/is-my-json-valid/-/is-my-json-valid-2.15.0.tgz#936edda3ca3c211fd98f3b2d3e08da43f7b2915b" - dependencies: - generate-function "^2.0.0" - generate-object-property "^1.1.0" - jsonpointer "^4.0.0" - xtend "^4.0.0" - -is-number@^2.0.2, is-number@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f" +is-number@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" + integrity sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU= dependencies: kind-of "^3.0.2" is-obj@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" + integrity sha1-PkcprB9f3gJc19g6iW2rn09n2w8= is-observable@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/is-observable/-/is-observable-0.2.0.tgz#b361311d83c6e5d726cabf5e250b0237106f5ae2" + integrity sha1-s2ExHYPG5dcmyr9eJQsCNxBvWuI= dependencies: symbol-observable "^0.2.2" -is-path-cwd@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-1.0.0.tgz#d225ec23132e89edd38fda767472e62e65f1106d" - -is-path-in-cwd@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-1.0.0.tgz#6477582b8214d602346094567003be8a9eac04dc" - dependencies: - is-path-inside "^1.0.0" +is-plain-obj@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" + integrity sha1-caUMhCnfync8kqOQpKA7OfzVHT4= -is-path-inside@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-1.0.0.tgz#fc06e5a1683fbda13de667aff717bbc10a48f37f" +is-plain-object@^2.0.3, is-plain-object@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" + integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== dependencies: - path-is-inside "^1.0.1" - -is-posix-bracket@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz#3334dc79774368e92f016e6fbc0a88f5cd6e6bc4" - -is-primitive@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-primitive/-/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575" + isobject "^3.0.1" is-promise@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa" - -is-property@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-property/-/is-property-1.0.2.tgz#57fe1c4e48474edd65b09911f26b1cd4095dda84" + integrity sha1-eaKp7OfwlugPNtKy87wWwf9L8/o= is-regex@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.4.tgz#5517489b547091b0930e095654ced25ee97e9491" + integrity sha1-VRdIm1RwkbCTDglWVM7SXul+lJE= dependencies: has "^1.0.1" is-regexp@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-regexp/-/is-regexp-1.0.0.tgz#fd2d883545c46bac5a633e7b9a09e87fa2cb5069" + integrity sha1-/S2INUXEa6xaYz57mgnof6LLUGk= is-resolvable@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.0.0.tgz#8df57c61ea2e3c501408d100fb013cf8d6e0cc62" - dependencies: - tryit "^1.0.1" + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.1.0.tgz#fb18f87ce1feb925169c9a407c19318a3206ed88" + integrity sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg== is-stream@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" + integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= -is-symbol@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.1.tgz#3cc59f00025194b6ab2e38dbae6689256b660572" +is-symbol@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.2.tgz#a055f6ae57192caee329e7a860118b497a950f38" + integrity sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw== + dependencies: + has-symbols "^1.0.0" is-typedarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" + integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= -is-utf8@^0.2.0: - version "0.2.1" - resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" +is-windows@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" + integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== + +is-wsl@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d" + integrity sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0= isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= isexe@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= isobject@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" + integrity sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk= dependencies: isarray "1.0.0" +isobject@^3.0.0, isobject@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" + integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= + isstream@~0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" + integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo= -istanbul-api@^1.1.14: - version "1.2.1" - resolved "https://registry.yarnpkg.com/istanbul-api/-/istanbul-api-1.2.1.tgz#0c60a0515eb11c7d65c6b50bba2c6e999acd8620" - dependencies: - async "^2.1.4" - fileset "^2.0.2" - istanbul-lib-coverage "^1.1.1" - istanbul-lib-hook "^1.1.0" - istanbul-lib-instrument "^1.9.1" - istanbul-lib-report "^1.1.2" - istanbul-lib-source-maps "^1.2.2" - istanbul-reports "^1.1.3" - js-yaml "^3.7.0" - mkdirp "^0.5.1" - once "^1.4.0" - -istanbul-lib-coverage@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-1.1.1.tgz#73bfb998885299415c93d38a3e9adf784a77a9da" - -istanbul-lib-hook@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/istanbul-lib-hook/-/istanbul-lib-hook-1.1.0.tgz#8538d970372cb3716d53e55523dd54b557a8d89b" - dependencies: - append-transform "^0.4.0" - -istanbul-lib-instrument@^1.7.5, istanbul-lib-instrument@^1.8.0, istanbul-lib-instrument@^1.9.1: - version "1.9.1" - resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-1.9.1.tgz#250b30b3531e5d3251299fdd64b0b2c9db6b558e" - dependencies: - 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.1.1" - semver "^5.3.0" - -istanbul-lib-report@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-1.1.2.tgz#922be27c13b9511b979bd1587359f69798c1d425" - dependencies: - istanbul-lib-coverage "^1.1.1" - mkdirp "^0.5.1" - path-parse "^1.0.5" - supports-color "^3.1.2" +istanbul-lib-coverage@^2.0.2, istanbul-lib-coverage@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.5.tgz#675f0ab69503fad4b1d849f736baaca803344f49" + integrity sha512-8aXznuEPCJvGnMSRft4udDRDtb1V3pkQkMMI5LI+6HuQz5oQ4J2UFn1H82raA3qJtyOLkkwVqICBQkjnGtn5mA== -istanbul-lib-source-maps@^1.2.1, istanbul-lib-source-maps@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.2.tgz#750578602435f28a0c04ee6d7d9e0f2960e62c1c" +istanbul-lib-instrument@^3.0.1, istanbul-lib-instrument@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-3.3.0.tgz#a5f63d91f0bbc0c3e479ef4c5de027335ec6d630" + integrity sha512-5nnIN4vo5xQZHdXno/YDXJ0G+I3dAm4XgzfSVTPLQpj/zAV2dV6Juy0yaf10/zrJOJeHoN3fraFe+XRq2bFVZA== + dependencies: + "@babel/generator" "^7.4.0" + "@babel/parser" "^7.4.3" + "@babel/template" "^7.4.0" + "@babel/traverse" "^7.4.3" + "@babel/types" "^7.4.0" + istanbul-lib-coverage "^2.0.5" + semver "^6.0.0" + +istanbul-lib-report@^2.0.4: + version "2.0.8" + resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-2.0.8.tgz#5a8113cd746d43c4889eba36ab10e7d50c9b4f33" + integrity sha512-fHBeG573EIihhAblwgxrSenp0Dby6tJMFR/HvlerBsrCTD5bkUuoNtn3gVh29ZCS824cGGBPn7Sg7cNk+2xUsQ== + dependencies: + istanbul-lib-coverage "^2.0.5" + make-dir "^2.1.0" + supports-color "^6.1.0" + +istanbul-lib-source-maps@^3.0.1: + version "3.0.6" + resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-3.0.6.tgz#284997c48211752ec486253da97e3879defba8c8" + integrity sha512-R47KzMtDJH6X4/YW9XTx+jrLnZnscW4VpNN+1PViSYTejLVPWv7oov+Duf8YQSPyVRUvueQqz1TcsC6mooZTXw== dependencies: - debug "^3.1.0" - istanbul-lib-coverage "^1.1.1" - mkdirp "^0.5.1" - rimraf "^2.6.1" - source-map "^0.5.3" + debug "^4.1.1" + istanbul-lib-coverage "^2.0.5" + make-dir "^2.1.0" + rimraf "^2.6.3" + source-map "^0.6.1" -istanbul-reports@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-1.1.3.tgz#3b9e1e8defb6d18b1d425da8e8b32c5a163f2d10" +istanbul-reports@^2.2.6: + version "2.2.6" + resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-2.2.6.tgz#7b4f2660d82b29303a8fe6091f8ca4bf058da1af" + integrity sha512-SKi4rnMyLBKe0Jy2uUdx28h8oG7ph2PPuQPvIAh31d+Ci+lSiEu4C+h3oBPuJ9+mPKhOyW0M8gY4U5NM1WLeXA== dependencies: - handlebars "^4.0.3" + handlebars "^4.1.2" -jest-changed-files@^22.2.0: - version "22.2.0" - resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-22.2.0.tgz#517610c4a8ca0925bdc88b0ca53bd678aa8d019e" +jest-changed-files@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-24.9.0.tgz#08d8c15eb79a7fa3fc98269bc14b451ee82f8039" + integrity sha512-6aTWpe2mHF0DhL28WjdkO8LyGjs3zItPET4bMSeXU6T3ub4FPMw+mcOcbdGXQOAfmLcxofD23/5Bl9Z4AkFwqg== dependencies: + "@jest/types" "^24.9.0" + execa "^1.0.0" throat "^4.0.0" -jest-cli@^22.2.2: - version "22.2.2" - resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-22.2.2.tgz#4431a93a29549da5dcb6d4a41dd03503c9198cd6" +jest-cli@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-24.9.0.tgz#ad2de62d07472d419c6abc301fc432b98b10d2af" + integrity sha512-+VLRKyitT3BWoMeSUIHRxV/2g8y9gw91Jh5z2UmXZzkZKpbC08CSehVxgHUwTpy+HwGcns/tqafQDJW7imYvGg== dependencies: - ansi-escapes "^3.0.0" + "@jest/core" "^24.9.0" + "@jest/test-result" "^24.9.0" + "@jest/types" "^24.9.0" chalk "^2.0.1" exit "^0.1.2" - glob "^7.1.2" - graceful-fs "^4.1.11" - import-local "^1.0.0" - is-ci "^1.0.10" - istanbul-api "^1.1.14" - istanbul-lib-coverage "^1.1.1" - istanbul-lib-instrument "^1.8.0" - istanbul-lib-source-maps "^1.2.1" - jest-changed-files "^22.2.0" - jest-config "^22.2.2" - jest-environment-jsdom "^22.2.2" - jest-get-type "^22.1.0" - jest-haste-map "^22.2.2" - jest-message-util "^22.2.0" - jest-regex-util "^22.1.0" - jest-resolve-dependencies "^22.1.0" - jest-runner "^22.2.2" - jest-runtime "^22.2.2" - jest-snapshot "^22.2.0" - jest-util "^22.2.2" - jest-worker "^22.2.2" - micromatch "^2.3.11" - node-notifier "^5.2.1" - realpath-native "^1.0.0" - rimraf "^2.5.4" - slash "^1.0.0" - string-length "^2.0.0" - strip-ansi "^4.0.0" - which "^1.2.12" - yargs "^10.0.3" - -jest-config@^22.2.2: - version "22.2.2" - resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-22.2.2.tgz#6b8ed615bc51239847d15460086f174dad4a7015" - dependencies: + import-local "^2.0.0" + is-ci "^2.0.0" + jest-config "^24.9.0" + jest-util "^24.9.0" + jest-validate "^24.9.0" + prompts "^2.0.1" + realpath-native "^1.1.0" + yargs "^13.3.0" + +jest-config@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-24.9.0.tgz#fb1bbc60c73a46af03590719efa4825e6e4dd1b5" + integrity sha512-RATtQJtVYQrp7fvWg6f5y3pEFj9I+H8sWw4aKxnDZ96mob5i5SD6ZEGWgMLXQ4LE8UurrjbdlLWdUeo+28QpfQ== + dependencies: + "@babel/core" "^7.1.0" + "@jest/test-sequencer" "^24.9.0" + "@jest/types" "^24.9.0" + babel-jest "^24.9.0" chalk "^2.0.1" glob "^7.1.1" - jest-environment-jsdom "^22.2.2" - jest-environment-node "^22.2.2" - jest-get-type "^22.1.0" - jest-jasmine2 "^22.2.2" - jest-regex-util "^22.1.0" - jest-resolve "^22.2.2" - jest-util "^22.2.2" - jest-validate "^22.2.2" - pretty-format "^22.1.0" - -jest-diff@^22.1.0: - version "22.1.0" - resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-22.1.0.tgz#0fad9d96c87b453896bf939df3dc8aac6919ac38" + jest-environment-jsdom "^24.9.0" + jest-environment-node "^24.9.0" + jest-get-type "^24.9.0" + jest-jasmine2 "^24.9.0" + jest-regex-util "^24.3.0" + jest-resolve "^24.9.0" + jest-util "^24.9.0" + jest-validate "^24.9.0" + micromatch "^3.1.10" + pretty-format "^24.9.0" + realpath-native "^1.1.0" + +jest-diff@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-24.9.0.tgz#931b7d0d5778a1baf7452cb816e325e3724055da" + integrity sha512-qMfrTs8AdJE2iqrTp0hzh7kTd2PQWrsFyj9tORoKmu32xjPjeE4NyjVRDz8ybYwqS2ik8N4hsIpiVTyFeo2lBQ== dependencies: chalk "^2.0.1" - diff "^3.2.0" - jest-get-type "^22.1.0" - pretty-format "^22.1.0" + diff-sequences "^24.9.0" + jest-get-type "^24.9.0" + pretty-format "^24.9.0" jest-docblock@^21.0.0: version "21.2.0" resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-21.2.0.tgz#51529c3b30d5fd159da60c27ceedc195faf8d414" + integrity sha512-5IZ7sY9dBAYSV+YjQ0Ovb540Ku7AO9Z5o2Cg789xj167iQuZ2cG+z0f3Uct6WeYLbU6aQiM2pCs7sZ+4dotydw== -jest-docblock@^22.2.2: - version "22.2.2" - resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-22.2.2.tgz#617f13edb16ec64202002b3c336cd14ae36c0631" +jest-docblock@^24.3.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-24.9.0.tgz#7970201802ba560e1c4092cc25cbedf5af5a8ce2" + integrity sha512-F1DjdpDMJMA1cN6He0FNYNZlo3yYmOtRUnktrT9Q37njYzC5WEaDdmbynIgy0L/IvXvvgsG8OsqhLPXTpfmZAA== dependencies: detect-newline "^2.1.0" -jest-environment-jsdom@^22.2.2: - version "22.2.2" - resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-22.2.2.tgz#3513ccdccc2bc41daf9cdee199b7069b0d9feebc" +jest-each@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-24.9.0.tgz#eb2da602e2a610898dbc5f1f6df3ba86b55f8b05" + integrity sha512-ONi0R4BvW45cw8s2Lrx8YgbeXL1oCQ/wIDwmsM3CqM/nlblNCPmnC3IPQlMbRFZu3wKdQ2U8BqM6lh3LJ5Bsog== dependencies: - jest-mock "^22.2.0" - jest-util "^22.2.2" + "@jest/types" "^24.9.0" + chalk "^2.0.1" + jest-get-type "^24.9.0" + jest-util "^24.9.0" + pretty-format "^24.9.0" + +jest-environment-jsdom@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-24.9.0.tgz#4b0806c7fc94f95edb369a69cc2778eec2b7375b" + integrity sha512-Zv9FV9NBRzLuALXjvRijO2351DRQeLYXtpD4xNvfoVFw21IOKNhZAEUKcbiEtjTkm2GsJ3boMVgkaR7rN8qetA== + dependencies: + "@jest/environment" "^24.9.0" + "@jest/fake-timers" "^24.9.0" + "@jest/types" "^24.9.0" + jest-mock "^24.9.0" + jest-util "^24.9.0" jsdom "^11.5.1" -jest-environment-node@^22.2.2: - version "22.2.2" - resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-22.2.2.tgz#570896eef2dd0f939c71bd5712ef4321958c1270" +jest-environment-node@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-24.9.0.tgz#333d2d2796f9687f2aeebf0742b519f33c1cbfd3" + integrity sha512-6d4V2f4nxzIzwendo27Tr0aFm+IXWa0XEUnaH6nU0FMaozxovt+sfRvh4J47wL1OvF83I3SSTu0XK+i4Bqe7uA== dependencies: - jest-mock "^22.2.0" - jest-util "^22.2.2" + "@jest/environment" "^24.9.0" + "@jest/fake-timers" "^24.9.0" + "@jest/types" "^24.9.0" + jest-mock "^24.9.0" + jest-util "^24.9.0" jest-get-type@^21.2.0: version "21.2.0" resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-21.2.0.tgz#f6376ab9db4b60d81e39f30749c6c466f40d4a23" + integrity sha512-y2fFw3C+D0yjNSDp7ab1kcd6NUYfy3waPTlD8yWkAtiocJdBRQqNoRqVfMNxgj+IjT0V5cBIHJO0z9vuSSZ43Q== -jest-get-type@^22.1.0: - version "22.1.0" - resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-22.1.0.tgz#4e90af298ed6181edc85d2da500dbd2753e0d5a9" +jest-get-type@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-24.9.0.tgz#1684a0c8a50f2e4901b6644ae861f579eed2ef0e" + integrity sha512-lUseMzAley4LhIcpSP9Jf+fTrQ4a1yHQwLNeeVa2cEmbCGeoZAtYPOIv8JaxLD/sUpKxetKGP+gsHl8f8TSj8Q== -jest-haste-map@^22.2.2: - version "22.2.2" - resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-22.2.2.tgz#9d3d5a14bd5e05ab9176979f2a5fbb4ddc80eb20" +jest-haste-map@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-24.9.0.tgz#b38a5d64274934e21fa417ae9a9fbeb77ceaac7d" + integrity sha512-kfVFmsuWui2Sj1Rp1AJ4D9HqJwE4uwTlS/vO+eRUaMmd54BFpli2XhMQnPC2k4cHFVbB2Q2C+jtI1AGLgEnCjQ== dependencies: + "@jest/types" "^24.9.0" + anymatch "^2.0.0" fb-watchman "^2.0.0" - graceful-fs "^4.1.11" - jest-docblock "^22.2.2" - jest-worker "^22.2.2" - micromatch "^2.3.11" - sane "^2.0.0" + graceful-fs "^4.1.15" + invariant "^2.2.4" + jest-serializer "^24.9.0" + jest-util "^24.9.0" + jest-worker "^24.9.0" + micromatch "^3.1.10" + sane "^4.0.3" + walker "^1.0.7" + optionalDependencies: + fsevents "^1.2.7" -jest-jasmine2@^22.2.2: - version "22.2.2" - resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-22.2.2.tgz#9065255c8f635ae9dfa33fc66068f59adf53c9aa" +jest-jasmine2@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-24.9.0.tgz#1f7b1bd3242c1774e62acabb3646d96afc3be6a0" + integrity sha512-Cq7vkAgaYKp+PsX+2/JbTarrk0DmNhsEtqBXNwUHkdlbrTBLtMJINADf2mf5FkowNsq8evbPc07/qFO0AdKTzw== dependencies: - callsites "^2.0.0" + "@babel/traverse" "^7.1.0" + "@jest/environment" "^24.9.0" + "@jest/test-result" "^24.9.0" + "@jest/types" "^24.9.0" chalk "^2.0.1" co "^4.6.0" - expect "^22.2.2" - graceful-fs "^4.1.11" - is-generator-fn "^1.0.0" - jest-diff "^22.1.0" - jest-matcher-utils "^22.2.0" - jest-message-util "^22.2.0" - jest-snapshot "^22.2.0" - source-map-support "^0.5.0" + expect "^24.9.0" + is-generator-fn "^2.0.0" + jest-each "^24.9.0" + jest-matcher-utils "^24.9.0" + jest-message-util "^24.9.0" + jest-runtime "^24.9.0" + jest-snapshot "^24.9.0" + jest-util "^24.9.0" + pretty-format "^24.9.0" + throat "^4.0.0" -jest-leak-detector@^22.1.0: - version "22.1.0" - resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-22.1.0.tgz#08376644cee07103da069baac19adb0299b772c2" +jest-leak-detector@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-24.9.0.tgz#b665dea7c77100c5c4f7dfcb153b65cf07dcf96a" + integrity sha512-tYkFIDsiKTGwb2FG1w8hX9V0aUb2ot8zY/2nFg087dUageonw1zrLMP4W6zsRO59dPkTSKie+D4rhMuP9nRmrA== dependencies: - pretty-format "^22.1.0" + jest-get-type "^24.9.0" + pretty-format "^24.9.0" -jest-matcher-utils@^22.2.0: - version "22.2.0" - resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-22.2.0.tgz#5390f823c18c748543d463825aa8e4df0db253ca" +jest-matcher-utils@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-24.9.0.tgz#f5b3661d5e628dffe6dd65251dfdae0e87c3a073" + integrity sha512-OZz2IXsu6eaiMAwe67c1T+5tUAtQyQx27/EMEkbFAGiw52tB9em+uGbzpcgYVpA8wl0hlxKPZxrly4CXU/GjHA== dependencies: chalk "^2.0.1" - jest-get-type "^22.1.0" - pretty-format "^22.1.0" - -jest-message-util@^22.2.0: - version "22.2.0" - resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-22.2.0.tgz#84a6bb34186d8b9af7e0732fabbef63f7355f7b2" - dependencies: - "@babel/code-frame" "^7.0.0-beta.35" + jest-diff "^24.9.0" + jest-get-type "^24.9.0" + pretty-format "^24.9.0" + +jest-message-util@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-24.9.0.tgz#527f54a1e380f5e202a8d1149b0ec872f43119e3" + integrity sha512-oCj8FiZ3U0hTP4aSui87P4L4jC37BtQwUMqk+zk/b11FR19BJDeZsZAvIHutWnmtw7r85UmR3CEWZ0HWU2mAlw== + dependencies: + "@babel/code-frame" "^7.0.0" + "@jest/test-result" "^24.9.0" + "@jest/types" "^24.9.0" + "@types/stack-utils" "^1.0.1" chalk "^2.0.1" - micromatch "^2.3.11" - slash "^1.0.0" + micromatch "^3.1.10" + slash "^2.0.0" stack-utils "^1.0.1" -jest-mock@^22.2.0: - version "22.2.0" - resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-22.2.0.tgz#444b3f9488a7473adae09bc8a77294afded397a7" - -jest-regex-util@^22.1.0: - version "22.1.0" - resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-22.1.0.tgz#5daf2fe270074b6da63e5d85f1c9acc866768f53" - -jest-resolve-dependencies@^22.1.0: - version "22.1.0" - resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-22.1.0.tgz#340e4139fb13315cd43abc054e6c06136be51e31" +jest-mock@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-24.9.0.tgz#c22835541ee379b908673ad51087a2185c13f1c6" + integrity sha512-3BEYN5WbSq9wd+SyLDES7AHnjH9A/ROBwmz7l2y+ol+NtSFO8DYiEBzoO1CeFc9a8DYy10EO4dDFVv/wN3zl1w== dependencies: - jest-regex-util "^22.1.0" + "@jest/types" "^24.9.0" -jest-resolve@^22.2.2: - version "22.2.2" - resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-22.2.2.tgz#6f49d91e3680c86a4d5e5f72ccdab3996d1cbc19" - dependencies: - browser-resolve "^1.11.2" +jest-pnp-resolver@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.1.tgz#ecdae604c077a7fbc70defb6d517c3c1c898923a" + integrity sha512-pgFw2tm54fzgYvc/OHrnysABEObZCUNFnhjoRjaVOCN8NYc032/gVjPaHD4Aq6ApkSieWtfKAFQtmDKAmhupnQ== + +jest-regex-util@^24.3.0, jest-regex-util@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-24.9.0.tgz#c13fb3380bde22bf6575432c493ea8fe37965636" + integrity sha512-05Cmb6CuxaA+Ys6fjr3PhvV3bGQmO+2p2La4hFbU+W5uOc479f7FdLXUWXw4pYMAhhSZIuKHwSXSu6CsSBAXQA== + +jest-resolve-dependencies@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-24.9.0.tgz#ad055198959c4cfba8a4f066c673a3f0786507ab" + integrity sha512-Fm7b6AlWnYhT0BXy4hXpactHIqER7erNgIsIozDXWl5dVm+k8XdGVe1oTg1JyaFnOxarMEbax3wyRJqGP2Pq+g== + dependencies: + "@jest/types" "^24.9.0" + jest-regex-util "^24.3.0" + jest-snapshot "^24.9.0" + +jest-resolve@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-24.9.0.tgz#dff04c7687af34c4dd7e524892d9cf77e5d17321" + integrity sha512-TaLeLVL1l08YFZAt3zaPtjiVvyy4oSA6CRe+0AFPPVX3Q/VI0giIWWoAvoS5L96vj9Dqxj4fB5p2qrHCmTU/MQ== + dependencies: + "@jest/types" "^24.9.0" + browser-resolve "^1.11.3" chalk "^2.0.1" - -jest-runner@^22.2.2: - version "22.2.2" - resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-22.2.2.tgz#17fff27a61b63b58cf104c9cdcc0fdfccd3878ce" - dependencies: + jest-pnp-resolver "^1.2.1" + realpath-native "^1.1.0" + +jest-runner@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-24.9.0.tgz#574fafdbd54455c2b34b4bdf4365a23857fcdf42" + integrity sha512-KksJQyI3/0mhcfspnxxEOBueGrd5E4vV7ADQLT9ESaCzz02WnbdbKWIf5Mkaucoaj7obQckYPVX6JJhgUcoWWg== + dependencies: + "@jest/console" "^24.7.1" + "@jest/environment" "^24.9.0" + "@jest/test-result" "^24.9.0" + "@jest/types" "^24.9.0" + chalk "^2.4.2" exit "^0.1.2" - jest-config "^22.2.2" - jest-docblock "^22.2.2" - jest-haste-map "^22.2.2" - jest-jasmine2 "^22.2.2" - jest-leak-detector "^22.1.0" - jest-message-util "^22.2.0" - jest-runtime "^22.2.2" - jest-util "^22.2.2" - jest-worker "^22.2.2" + graceful-fs "^4.1.15" + jest-config "^24.9.0" + jest-docblock "^24.3.0" + jest-haste-map "^24.9.0" + jest-jasmine2 "^24.9.0" + jest-leak-detector "^24.9.0" + jest-message-util "^24.9.0" + jest-resolve "^24.9.0" + jest-runtime "^24.9.0" + jest-util "^24.9.0" + jest-worker "^24.6.0" + source-map-support "^0.5.6" throat "^4.0.0" -jest-runtime@^22.2.2: - version "22.2.2" - resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-22.2.2.tgz#256d0efb65deae1c23b819d88cec5ab43d7a4ed6" - dependencies: - babel-core "^6.0.0" - babel-jest "^22.2.2" - babel-plugin-istanbul "^4.1.5" +jest-runtime@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-24.9.0.tgz#9f14583af6a4f7314a6a9d9f0226e1a781c8e4ac" + integrity sha512-8oNqgnmF3v2J6PVRM2Jfuj8oX3syKmaynlDMMKQ4iyzbQzIG6th5ub/lM2bCMTmoTKM3ykcUYI2Pw9xwNtjMnw== + dependencies: + "@jest/console" "^24.7.1" + "@jest/environment" "^24.9.0" + "@jest/source-map" "^24.3.0" + "@jest/transform" "^24.9.0" + "@jest/types" "^24.9.0" + "@types/yargs" "^13.0.0" chalk "^2.0.1" - convert-source-map "^1.4.0" exit "^0.1.2" - graceful-fs "^4.1.11" - jest-config "^22.2.2" - jest-haste-map "^22.2.2" - jest-regex-util "^22.1.0" - jest-resolve "^22.2.2" - jest-util "^22.2.2" - json-stable-stringify "^1.0.1" - micromatch "^2.3.11" - realpath-native "^1.0.0" - slash "^1.0.0" - strip-bom "3.0.0" - write-file-atomic "^2.1.0" - yargs "^10.0.3" - -jest-snapshot@^22.2.0: - version "22.2.0" - resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-22.2.0.tgz#0c0ba152d296ef70fa198cc84977a2cc269ee4cf" + glob "^7.1.3" + graceful-fs "^4.1.15" + jest-config "^24.9.0" + jest-haste-map "^24.9.0" + jest-message-util "^24.9.0" + jest-mock "^24.9.0" + jest-regex-util "^24.3.0" + jest-resolve "^24.9.0" + jest-snapshot "^24.9.0" + jest-util "^24.9.0" + jest-validate "^24.9.0" + realpath-native "^1.1.0" + slash "^2.0.0" + strip-bom "^3.0.0" + yargs "^13.3.0" + +jest-serializer@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-24.9.0.tgz#e6d7d7ef96d31e8b9079a714754c5d5c58288e73" + integrity sha512-DxYipDr8OvfrKH3Kel6NdED3OXxjvxXZ1uIY2I9OFbGg+vUkkg7AGvi65qbhbWNPvDckXmzMPbK3u3HaDO49bQ== + +jest-snapshot@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-24.9.0.tgz#ec8e9ca4f2ec0c5c87ae8f925cf97497b0e951ba" + integrity sha512-uI/rszGSs73xCM0l+up7O7a40o90cnrk429LOiK3aeTvfC0HHmldbd81/B7Ix81KSFe1lwkbl7GnBGG4UfuDew== dependencies: + "@babel/types" "^7.0.0" + "@jest/types" "^24.9.0" chalk "^2.0.1" - jest-diff "^22.1.0" - jest-matcher-utils "^22.2.0" + expect "^24.9.0" + jest-diff "^24.9.0" + jest-get-type "^24.9.0" + jest-matcher-utils "^24.9.0" + jest-message-util "^24.9.0" + jest-resolve "^24.9.0" mkdirp "^0.5.1" natural-compare "^1.4.0" - pretty-format "^22.1.0" - -jest-util@^22.2.2: - version "22.2.2" - resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-22.2.2.tgz#335484b6aeae0c5a1ae498401630324977fe3465" - dependencies: - callsites "^2.0.0" + pretty-format "^24.9.0" + semver "^6.2.0" + +jest-util@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-24.9.0.tgz#7396814e48536d2e85a37de3e4c431d7cb140162" + integrity sha512-x+cZU8VRmOJxbA1K5oDBdxQmdq0OIdADarLxk0Mq+3XS4jgvhG/oKGWcIDCtPG0HgjxOYvF+ilPJQsAyXfbNOg== + dependencies: + "@jest/console" "^24.9.0" + "@jest/fake-timers" "^24.9.0" + "@jest/source-map" "^24.9.0" + "@jest/test-result" "^24.9.0" + "@jest/types" "^24.9.0" + callsites "^3.0.0" chalk "^2.0.1" - graceful-fs "^4.1.11" - is-ci "^1.0.10" - jest-message-util "^22.2.0" - jest-validate "^22.2.2" + graceful-fs "^4.1.15" + is-ci "^2.0.0" mkdirp "^0.5.1" + slash "^2.0.0" + source-map "^0.6.0" jest-validate@^21.1.0: version "21.2.1" resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-21.2.1.tgz#cc0cbca653cd54937ba4f2a111796774530dd3c7" + integrity sha512-k4HLI1rZQjlU+EC682RlQ6oZvLrE5SCh3brseQc24vbZTxzT/k/3urar5QMCVgjadmSO7lECeGdc6YxnM3yEGg== dependencies: chalk "^2.0.1" jest-get-type "^21.2.0" leven "^2.1.0" pretty-format "^21.2.1" -jest-validate@^22.2.2: - version "22.2.2" - resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-22.2.2.tgz#9cdce422c93cc28395e907ac6bbc929158d9a6ba" +jest-validate@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-24.9.0.tgz#0775c55360d173cd854e40180756d4ff52def8ab" + integrity sha512-HPIt6C5ACwiqSiwi+OfSSHbK8sG7akG8eATl+IPKaeIjtPOeBUd/g3J7DghugzxrGjI93qS/+RPKe1H6PqvhRQ== dependencies: + "@jest/types" "^24.9.0" + camelcase "^5.3.1" chalk "^2.0.1" - jest-get-type "^22.1.0" - leven "^2.1.0" - pretty-format "^22.1.0" + jest-get-type "^24.9.0" + leven "^3.1.0" + pretty-format "^24.9.0" + +jest-watcher@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-24.9.0.tgz#4b56e5d1ceff005f5b88e528dc9afc8dd4ed2b3b" + integrity sha512-+/fLOfKPXXYJDYlks62/4R4GoT+GU1tYZed99JSCOsmzkkF7727RqKrjNAxtfO4YpGv11wybgRvCjR73lK2GZw== + dependencies: + "@jest/test-result" "^24.9.0" + "@jest/types" "^24.9.0" + "@types/yargs" "^13.0.0" + ansi-escapes "^3.0.0" + chalk "^2.0.1" + jest-util "^24.9.0" + string-length "^2.0.0" -jest-worker@^22.2.2: - version "22.2.2" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-22.2.2.tgz#c1f5dc39976884b81f68ec50cb8532b2cbab3390" +jest-worker@^24.6.0, jest-worker@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-24.9.0.tgz#5dbfdb5b2d322e98567898238a9697bcce67b3e5" + integrity sha512-51PE4haMSXcHohnSMdM42anbvZANYTqMrr52tVKPqqsPJMzoP6FYYDVqahX/HrAoKEKz3uUPzSvKs9A3qR4iVw== dependencies: - merge-stream "^1.0.1" + merge-stream "^2.0.0" + supports-color "^6.1.0" -jest@^22.2.2: - version "22.2.2" - resolved "https://registry.yarnpkg.com/jest/-/jest-22.2.2.tgz#26aca0f5e4eaa76d52f2792b14033a3d1e7be2bd" +jest@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/jest/-/jest-24.9.0.tgz#987d290c05a08b52c56188c1002e368edb007171" + integrity sha512-YvkBL1Zm7d2B1+h5fHEOdyjCG+sGMz4f8D86/0HiqJ6MB4MnDc8FgP5vdWsGnemOQro7lnYo8UakZ3+5A0jxGw== dependencies: - import-local "^1.0.0" - jest-cli "^22.2.2" + import-local "^2.0.0" + jest-cli "^24.9.0" -jodid25519@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/jodid25519/-/jodid25519-1.0.2.tgz#06d4912255093419477d425633606e0e90782967" - dependencies: - jsbn "~0.1.0" +js-levenshtein@^1.1.3: + version "1.1.6" + resolved "https://registry.yarnpkg.com/js-levenshtein/-/js-levenshtein-1.1.6.tgz#c6cee58eb3550372df8deb85fad5ce66ce01d59d" + integrity sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g== -js-tokens@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.0.tgz#a2f2a969caae142fb3cd56228358c89366957bd1" +"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== js-tokens@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" - -js-yaml@^3.7.0: - version "3.7.0" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.7.0.tgz#5c967ddd837a9bfdca5f2de84253abe8a1c03b80" - dependencies: - argparse "^1.0.7" - esprima "^2.6.0" + integrity sha1-mGbfOVECEw449/mWvOtlRDIJwls= js-yaml@^3.9.0, js-yaml@^3.9.1: - version "3.10.0" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.10.0.tgz#2e78441646bd4682e963f22b6e92823c309c62dc" + version "3.13.1" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847" + integrity sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw== dependencies: argparse "^1.0.7" esprima "^4.0.0" jsbn@~0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.0.tgz#650987da0dd74f4ebf5a11377a2aa2d273e97dfd" + version "0.1.1" + resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" + integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM= jsdom@^11.5.1: - version "11.6.2" - resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-11.6.2.tgz#25d1ef332d48adf77fc5221fe2619967923f16bb" + version "11.12.0" + resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-11.12.0.tgz#1a80d40ddd378a1de59656e9e6dc5a3ba8657bc8" + integrity sha512-y8Px43oyiBM13Zc1z780FrfNLJCXTL40EWlty/LXUtcjykRBNgLlCjWXpfSPBl2iv+N7koQN+dvqszHZgT/Fjw== dependencies: - abab "^1.0.4" - acorn "^5.3.0" + abab "^2.0.0" + acorn "^5.5.3" acorn-globals "^4.1.0" array-equal "^1.0.0" - browser-process-hrtime "^0.1.2" - content-type-parser "^1.0.2" cssom ">= 0.3.2 < 0.4.0" - cssstyle ">= 0.2.37 < 0.3.0" - domexception "^1.0.0" - escodegen "^1.9.0" + cssstyle "^1.0.0" + data-urls "^1.0.0" + domexception "^1.0.1" + escodegen "^1.9.1" html-encoding-sniffer "^1.0.2" - left-pad "^1.2.0" - nwmatcher "^1.4.3" + left-pad "^1.3.0" + nwsapi "^2.0.7" parse5 "4.0.0" pn "^1.1.0" - request "^2.83.0" + request "^2.87.0" request-promise-native "^1.0.5" sax "^1.2.4" symbol-tree "^3.2.2" - tough-cookie "^2.3.3" + tough-cookie "^2.3.4" w3c-hr-time "^1.0.1" webidl-conversions "^4.0.2" whatwg-encoding "^1.0.3" - whatwg-url "^6.4.0" - ws "^4.0.0" + whatwg-mimetype "^2.1.0" + whatwg-url "^6.4.1" + ws "^5.2.0" xml-name-validator "^3.0.0" -jsesc@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-1.3.0.tgz#46c3fec8c1892b12b0833db9bc7622176dbab34b" +jsesc@^2.5.1: + version "2.5.2" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" + integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== jsesc@~0.5.0: version "0.5.0" resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" + integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0= json-parse-better-errors@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.1.tgz#50183cd1b2d25275de069e9e71b467ac9eab973a" + version "1.0.2" + resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" + integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== json-schema-traverse@^0.3.0: version "0.3.1" resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz#349a6d44c53a51de89b40805c5d5e59b417d3340" + integrity sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A= + +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== json-schema@0.2.3: version "0.2.3" resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" + integrity sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM= json-stable-stringify-without-jsonify@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" - -json-stable-stringify@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af" - dependencies: - jsonify "~0.0.0" + integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= json-stringify-safe@~5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" + integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= -json5@^0.5.0, json5@^0.5.1: - version "0.5.1" - resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821" - -jsonify@~0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" - -jsonpointer@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/jsonpointer/-/jsonpointer-4.0.1.tgz#4fd92cb34e0e9db3c89c8622ecf51f9b978c6cb9" +json5@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/json5/-/json5-2.1.0.tgz#e7a0c62c48285c628d20a10b85c89bb807c32850" + integrity sha512-8Mh9h6xViijj36g7Dxi+Y4S6hNGV96vcJZr/SrlHh1LR/pEn/8j/+qIBbs44YKl69Lrfctp4QD+AdWLTMqEZAQ== + dependencies: + minimist "^1.2.0" jsprim@^1.2.2: - version "1.3.1" - resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.3.1.tgz#2a7256f70412a29ee3670aaca625994c4dcff252" + version "1.4.1" + resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" + integrity sha1-MT5mvB5cwG5Di8G3SZwuXFastqI= dependencies: - extsprintf "1.0.2" + assert-plus "1.0.0" + extsprintf "1.3.0" json-schema "0.2.3" - verror "1.3.6" + verror "1.10.0" -kind-of@^3.0.2: - version "3.1.0" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.1.0.tgz#475d698a5e49ff5e53d14e3e732429dc8bf4cf47" +kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: + version "3.2.2" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" + integrity sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ= dependencies: - is-buffer "^1.0.2" + is-buffer "^1.1.5" -lazy-cache@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-1.0.4.tgz#a1d78fc3a50474cb80845d3b3b6e1da49a446e8e" - -lcid@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835" +kind-of@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" + integrity sha1-IIE989cSkosgc3hpGkUGb65y3Vc= dependencies: - invert-kv "^1.0.0" + is-buffer "^1.1.5" -left-pad@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/left-pad/-/left-pad-1.2.0.tgz#d30a73c6b8201d8f7d8e7956ba9616087a68e0ee" +kind-of@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" + integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw== + +kind-of@^6.0.0, kind-of@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.2.tgz#01146b36a6218e64e58f3a8d66de5d7fc6f6d051" + integrity sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA== + +kleur@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" + integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== + +left-pad@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/left-pad/-/left-pad-1.3.0.tgz#5b8a3a7765dfe001261dde915589e782f8c94d1e" + integrity sha512-XI5MPzVNApjAyhQzphX8BkmKsKUxD4LdyK24iZeQGinBN9yTQT3bFlCBy/aVx2HrNcqQGsdot8ghrjyrvMCoEA== leven@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/leven/-/leven-2.1.0.tgz#c2e7a9f772094dee9d34202ae8acce4687875580" + integrity sha1-wuep93IJTe6dNCAq6KzORoeHVYA= + +leven@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" + integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== levn@^0.3.0, levn@~0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" + integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4= dependencies: prelude-ls "~1.1.2" type-check "~0.3.2" lint-staged@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-6.1.0.tgz#28f600c10a6cbd249ceb003118a1552e53544a93" + version "6.1.1" + resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-6.1.1.tgz#cd08c4d9b8ccc2d37198d1c47ce77d22be6cf324" + integrity sha512-M/7bwLdXbeG7ZNLcasGeLMBDg60/w6obj3KOtINwJyxAxb53XGY0yH5FSZlWklEzuVbTtqtIfAajh6jYIN90AA== dependencies: app-root-path "^2.0.0" chalk "^2.1.0" @@ -2757,16 +3374,18 @@ lint-staged@^6.1.0: p-map "^1.1.1" path-is-inside "^1.0.2" pify "^3.0.0" - staged-git-files "0.0.4" + staged-git-files "1.0.0" stringify-object "^3.2.0" listr-silent-renderer@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/listr-silent-renderer/-/listr-silent-renderer-1.1.1.tgz#924b5a3757153770bf1a8e3fbf74b8bbf3f9242e" + integrity sha1-kktaN1cVN3C/Go4/v3S4u/P5JC4= listr-update-renderer@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/listr-update-renderer/-/listr-update-renderer-0.4.0.tgz#344d980da2ca2e8b145ba305908f32ae3f4cc8a7" + integrity sha1-NE2YDaLKLosUW6MFkI8yrj9MyKc= dependencies: chalk "^1.1.3" cli-truncate "^0.2.1" @@ -2780,6 +3399,7 @@ listr-update-renderer@^0.4.0: listr-verbose-renderer@^0.4.0: version "0.4.1" resolved "https://registry.yarnpkg.com/listr-verbose-renderer/-/listr-verbose-renderer-0.4.1.tgz#8206f4cf6d52ddc5827e5fd14989e0e965933a35" + integrity sha1-ggb0z21S3cWCfl/RSYng6WWTOjU= dependencies: chalk "^1.1.3" cli-cursor "^1.0.2" @@ -2789,6 +3409,7 @@ listr-verbose-renderer@^0.4.0: listr@^0.13.0: version "0.13.0" resolved "https://registry.yarnpkg.com/listr/-/listr-0.13.0.tgz#20bb0ba30bae660ee84cc0503df4be3d5623887d" + integrity sha1-ILsLowuuZg7oTMBQPfS+PVYjiH0= dependencies: chalk "^1.1.3" cli-truncate "^0.2.1" @@ -2808,299 +3429,392 @@ listr@^0.13.0: stream-to-observable "^0.2.0" strip-ansi "^3.0.1" -load-json-file@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0" - dependencies: - graceful-fs "^4.1.2" - parse-json "^2.2.0" - pify "^2.0.0" - pinkie-promise "^2.0.0" - strip-bom "^2.0.0" - load-json-file@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-2.0.0.tgz#7947e42149af80d696cbf797bcaabcfe1fe29ca8" + integrity sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg= dependencies: graceful-fs "^4.1.2" parse-json "^2.2.0" pify "^2.0.0" strip-bom "^3.0.0" +load-json-file@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-4.0.0.tgz#2f5f45ab91e33216234fd53adab668eb4ec0993b" + integrity sha1-L19Fq5HjMhYjT9U62rZo607AmTs= + dependencies: + graceful-fs "^4.1.2" + parse-json "^4.0.0" + pify "^3.0.0" + strip-bom "^3.0.0" + locate-path@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" + integrity sha1-K1aLJl7slExtnA3pw9u7ygNUzY4= dependencies: p-locate "^2.0.0" path-exists "^3.0.0" -lodash.cond@^4.3.0: - version "4.5.2" - resolved "https://registry.yarnpkg.com/lodash.cond/-/lodash.cond-4.5.2.tgz#f471a1da486be60f6ab955d17115523dd1d255d5" +locate-path@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" + integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== + dependencies: + p-locate "^3.0.0" + path-exists "^3.0.0" lodash.sortby@^4.7.0: version "4.7.0" resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" + integrity sha1-7dFMgk4sycHgsKG0K7UhBRakJDg= -lodash@^4.13.1, lodash@^4.17.4: - version "4.17.5" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.5.tgz#99a92d65c0272debe8c96b6057bc8fbfa3bed511" - -lodash@^4.14.0, lodash@^4.2.0, lodash@^4.3.0: - version "4.17.4" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae" +lodash@^4.17.11, lodash@^4.17.13, lodash@^4.17.4, lodash@^4.3.0: + version "4.17.15" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548" + integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A== log-symbols@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-1.0.2.tgz#376ff7b58ea3086a0f09facc74617eca501e1a18" + integrity sha1-N2/3tY6jCGoPCfrMdGF+ylAeGhg= dependencies: chalk "^1.0.0" log-symbols@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-2.2.0.tgz#5740e1c5d6f0dfda4ad9323b5332107ef6b4c40a" + integrity sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg== dependencies: chalk "^2.0.1" log-update@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/log-update/-/log-update-1.0.2.tgz#19929f64c4093d2d2e7075a1dad8af59c296b8d1" + integrity sha1-GZKfZMQJPS0ucHWh2tivWcKWuNE= dependencies: ansi-escapes "^1.0.0" cli-cursor "^1.0.2" -longest@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/longest/-/longest-1.0.1.tgz#30a0b2da38f73770e8294a0d22e6625ed77d0097" - loose-envify@^1.0.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.3.1.tgz#d1a8ad33fa9ce0e713d65fdd0ac8b748d478c848" + version "1.4.0" + resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" + integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== dependencies: - js-tokens "^3.0.0" + js-tokens "^3.0.0 || ^4.0.0" lru-cache@^4.0.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.1.tgz#622e32e82488b49279114a4f9ecf45e7cd6bba55" + version "4.1.5" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd" + integrity sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g== dependencies: pseudomap "^1.0.2" yallist "^2.1.2" +make-dir@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5" + integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA== + dependencies: + pify "^4.0.1" + semver "^5.6.0" + makeerror@1.0.x: version "1.0.11" resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.11.tgz#e01a5c9109f2af79660e4e8b9587790184f5a96c" + integrity sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw= dependencies: tmpl "1.0.x" -mem@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/mem/-/mem-1.1.0.tgz#5edd52b485ca1d900fe64895505399a0dfa45f76" - dependencies: - mimic-fn "^1.0.0" - -merge-stream@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-1.0.1.tgz#4041202d508a342ba00174008df0c251b8c135e1" - dependencies: - readable-stream "^2.0.1" - -merge@^1.1.3: - version "1.2.0" - resolved "https://registry.yarnpkg.com/merge/-/merge-1.2.0.tgz#7531e39d4949c281a66b8c5a6e0265e8b05894da" - -micromatch@^2.1.5, micromatch@^2.3.11: - version "2.3.11" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565" - dependencies: - 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" - -mime-db@~1.26.0: - version "1.26.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.26.0.tgz#eaffcd0e4fc6935cf8134da246e2e6c35305adff" - -mime-db@~1.30.0: - version "1.30.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.30.0.tgz#74c643da2dd9d6a45399963465b26d5ca7d71f01" +map-cache@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" + integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8= -mime-types@^2.1.12, mime-types@~2.1.7: - version "2.1.14" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.14.tgz#f7ef7d97583fcaf3b7d282b6f8b5679dab1e94ee" +map-visit@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" + integrity sha1-7Nyo8TFE5mDxtb1B8S80edmN+48= dependencies: - mime-db "~1.26.0" + object-visit "^1.0.0" -mime-types@~2.1.17: - version "2.1.17" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.17.tgz#09d7a393f03e995a79f8af857b70a9e0ab16557a" - dependencies: - mime-db "~1.30.0" +merge-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" + integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== + +micromatch@^3.1.10, micromatch@^3.1.4: + version "3.1.10" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" + integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg== + dependencies: + 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.2" + +mime-db@1.40.0: + version "1.40.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.40.0.tgz#a65057e998db090f732a68f6c276d387d4126c32" + integrity sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA== + +mime-types@^2.1.12, mime-types@~2.1.19: + version "2.1.24" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.24.tgz#b6f8d0b3e951efb77dedeca194cff6d16f676f81" + integrity sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ== + dependencies: + mime-db "1.40.0" mimic-fn@^1.0.0: version "1.2.0" resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" + integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ== -minimatch@^3.0.0, minimatch@^3.0.2, minimatch@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.3.tgz#2a4e4090b96b2db06a9d7df01055a62a77c9b774" - dependencies: - brace-expansion "^1.0.0" - -minimatch@^3.0.4: +minimatch@^3.0.0, minimatch@^3.0.2, minimatch@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" + integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== dependencies: brace-expansion "^1.1.7" -minimist@0.0.8, minimist@~0.0.1: +minimist@0.0.8: version "0.0.8" resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" + integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0= minimist@^1.1.1, minimist@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" + integrity sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ= + +minimist@~0.0.1: + version "0.0.10" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf" + integrity sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8= + +minipass@^2.6.0, minipass@^2.8.6: + version "2.8.6" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.8.6.tgz#620d889ace26356391d010ecb9458749df9b6db5" + integrity sha512-lFG7d6g3+/UaFDCOtqPiKAC9zngWWsQZl1g5q6gaONqrjq61SX2xFqXMleQiFVyDpYwa018E9hmlAFY22PCb+A== + dependencies: + safe-buffer "^5.1.2" + yallist "^3.0.0" + +minipass@^2.9.0: + version "2.9.0" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.9.0.tgz#e713762e7d3e32fed803115cf93e04bca9fcc9a6" + integrity sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg== + dependencies: + safe-buffer "^5.1.2" + yallist "^3.0.0" + +minizlib@^1.2.1: + version "1.3.2" + resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.3.2.tgz#5d24764998f98112586f7e566bd4c0999769dad4" + integrity sha512-lsNFqSHdJ21EwKzCp12HHJGxSMtHkCW1EMA9cceG3MkMNARjuWotZnMe3NKNshAvFXpm4loZqmYsCmRwhS2JMw== + dependencies: + minipass "^2.9.0" + +mixin-deep@^1.2.0: + version "1.3.2" + resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566" + integrity sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA== + dependencies: + for-in "^1.0.2" + is-extendable "^1.0.1" -"mkdirp@>=0.5 0", mkdirp@^0.5.1, mkdirp@~0.5.1: +mkdirp@^0.5.0, mkdirp@^0.5.1: version "0.5.1" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" + integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM= dependencies: minimist "0.0.8" -ms@0.7.1: - version "0.7.1" - resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.1.tgz#9cd13c03adbff25b65effde7ce864ee952017098" - -ms@0.7.2: - version "0.7.2" - resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.2.tgz#ae25cf2512b3885a1d95d7f037868d8431124765" - ms@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= + +ms@^2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== mute-stream@0.0.7: version "0.0.7" resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" - -nan@^2.3.0: - version "2.5.1" - resolved "https://registry.yarnpkg.com/nan/-/nan-2.5.1.tgz#d5b01691253326a97a2bbee9e61c55d8d60351e2" + integrity sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s= + +nan@^2.12.1: + version "2.14.0" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.0.tgz#7818f722027b2459a86f0295d434d1fc2336c52c" + integrity sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg== + +nanomatch@^1.2.9: + version "1.2.13" + resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" + integrity sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA== + dependencies: + 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-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" natural-compare@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" + integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= + +needle@^2.2.1: + version "2.4.0" + resolved "https://registry.yarnpkg.com/needle/-/needle-2.4.0.tgz#6833e74975c444642590e15a750288c5f939b57c" + integrity sha512-4Hnwzr3mi5L97hMYeNl8wRW/Onhy4nUKR/lVemJ8gJedxxUyBLm9kkrDColJvoSfwi0jCNhD+xCdOtiGDQiRZg== + dependencies: + debug "^3.2.6" + iconv-lite "^0.4.4" + sax "^1.2.4" + +neo-async@^2.6.0: + version "2.6.1" + resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.1.tgz#ac27ada66167fa8849a6addd837f6b189ad2081c" + integrity sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw== + +nice-try@^1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" + integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== node-int64@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" + integrity sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs= + +node-modules-regexp@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz#8d9dbe28964a4ac5712e9131642107c71e90ec40" + integrity sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA= -node-notifier@^5.2.1: - version "5.2.1" - resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-5.2.1.tgz#fa313dd08f5517db0e2502e5758d664ac69f9dea" +node-notifier@^5.4.2: + version "5.4.3" + resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-5.4.3.tgz#cb72daf94c93904098e28b9c590fd866e464bd50" + integrity sha512-M4UBGcs4jeOK9CjTsYwkvH6/MzuUmGCyTW+kCY7uO+1ZVr0+FHGdPdIf5CCLqAaxnRrWidyoQlNkMIIVwbKB8Q== dependencies: growly "^1.3.0" - semver "^5.4.1" + is-wsl "^1.1.0" + semver "^5.5.0" shellwords "^0.1.1" which "^1.3.0" -node-pre-gyp@^0.6.29: - version "0.6.32" - resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.6.32.tgz#fc452b376e7319b3d255f5f34853ef6fd8fe1fd5" - dependencies: - mkdirp "~0.5.1" - nopt "~3.0.6" - npmlog "^4.0.1" - rc "~1.1.6" - request "^2.79.0" - rimraf "~2.5.4" - semver "~5.3.0" - tar "~2.2.1" - tar-pack "~3.3.0" - -node-pre-gyp@^0.6.39: - version "0.6.39" - resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.6.39.tgz#c00e96860b23c0e1420ac7befc5044e1d78d8649" +node-pre-gyp@^0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.12.0.tgz#39ba4bb1439da030295f899e3b520b7785766149" + integrity sha512-4KghwV8vH5k+g2ylT+sLTjy5wmUOb9vPhnM8NHvRf9dHmnW/CndrFXy2aRPaPST6dugXSdHXfeaHQm77PIz/1A== dependencies: detect-libc "^1.0.2" - hawk "3.1.3" mkdirp "^0.5.1" + needle "^2.2.1" nopt "^4.0.1" + npm-packlist "^1.1.6" npmlog "^4.0.2" - rc "^1.1.7" - request "2.81.0" + rc "^1.2.7" rimraf "^2.6.1" semver "^5.3.0" - tar "^2.2.1" - tar-pack "^3.4.0" + tar "^4" + +node-releases@^1.1.29: + version "1.1.33" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.33.tgz#349f10291234624574f44cf32b7de259bf028303" + integrity sha512-I0V30bWQEoHb+10W8oedVoUrdjW5wIkYm0w7vvcrPO95pZY738m1k77GF5sO0vKg5eXYg9oGtrMAETbgZGm11A== + dependencies: + semver "^5.3.0" nopt@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d" + integrity sha1-0NRoWv1UFRk8jHUFYC0NF81kR00= dependencies: abbrev "1" osenv "^0.1.4" -nopt@~3.0.6: - version "3.0.6" - resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9" - dependencies: - abbrev "1" - normalize-package-data@^2.3.2: - version "2.3.5" - resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.3.5.tgz#8d924f142960e1777e7ffe170543631cc7cb02df" + version "2.5.0" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" + integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== dependencies: hosted-git-info "^2.1.4" - is-builtin-module "^1.0.0" + resolve "^1.10.0" semver "2 || 3 || 4 || 5" validate-npm-package-license "^3.0.1" -normalize-path@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.0.1.tgz#47886ac1662760d4261b7d979d241709d3ce3f7a" +normalize-path@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" + integrity sha1-GrKLVW4Zg2Oowab35vogE3/mrtk= + dependencies: + remove-trailing-separator "^1.0.1" + +normalize-path@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + +npm-bundled@^1.0.1: + version "1.0.6" + resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.0.6.tgz#e7ba9aadcef962bb61248f91721cd932b3fe6bdd" + integrity sha512-8/JCaftHwbd//k6y2rEWp6k1wxVfpFzB6t1p825+cUb7Ym2XQfhwIC5KwhrvzZRJu+LtDE585zVaS32+CGtf0g== + +npm-packlist@^1.1.6: + version "1.4.4" + resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.4.4.tgz#866224233850ac534b63d1a6e76050092b5d2f44" + integrity sha512-zTLo8UcVYtDU3gdeaFu2Xu0n0EvelfHDGuqtNIn5RO7yQj4H1TqNdBc/yZjxnWA0PVB8D3Woyp0i5B43JwQ6Vw== + dependencies: + ignore-walk "^3.0.1" + npm-bundled "^1.0.1" npm-path@^2.0.2: version "2.0.4" resolved "https://registry.yarnpkg.com/npm-path/-/npm-path-2.0.4.tgz#c641347a5ff9d6a09e4d9bce5580c4f505278e64" + integrity sha512-IFsj0R9C7ZdR5cP+ET342q77uSRdtWOlWpih5eC+lu29tIDbNEgDbzgVJ5UFvYHWhxDZ5TFkJafFioO0pPQjCw== dependencies: which "^1.2.10" npm-run-path@^2.0.0: version "2.0.2" resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" + integrity sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8= dependencies: path-key "^2.0.0" npm-which@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/npm-which/-/npm-which-3.0.1.tgz#9225f26ec3a285c209cae67c3b11a6b4ab7140aa" + integrity sha1-kiXybsOihcIJyuZ8OxGmtKtxQKo= dependencies: commander "^2.9.0" npm-path "^2.0.2" which "^1.2.10" -npmlog@^4.0.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.0.2.tgz#d03950e0e78ce1527ba26d2a7592e9348ac3e75f" - dependencies: - are-we-there-yet "~1.1.2" - console-control-strings "~1.1.0" - gauge "~2.7.1" - set-blocking "~2.0.0" - npmlog@^4.0.2: version "4.1.2" resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" + integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg== dependencies: are-we-there-yet "~1.1.2" console-control-strings "~1.1.0" @@ -3110,62 +3824,107 @@ npmlog@^4.0.2: number-is-nan@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" + integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0= -nwmatcher@^1.4.3: - version "1.4.3" - resolved "https://registry.yarnpkg.com/nwmatcher/-/nwmatcher-1.4.3.tgz#64348e3b3d80f035b40ac11563d278f8b72db89c" +nwsapi@^2.0.7: + version "2.1.4" + resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.1.4.tgz#e006a878db23636f8e8a67d33ca0e4edf61a842f" + integrity sha512-iGfd9Y6SFdTNldEy2L0GUhcarIutFmk+MPWIn9dmj8NMIup03G08uUF2KGbbmv/Ux4RT0VZJoP/sVbWA6d/VIw== -oauth-sign@~0.8.1, oauth-sign@~0.8.2: - version "0.8.2" - resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43" +oauth-sign@~0.9.0: + version "0.9.0" + resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" + integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== object-assign@^4.0.1, object-assign@^4.1.0: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= -object-keys@^1.0.8: - version "1.0.11" - resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.0.11.tgz#c54601778ad560f1142ce0e01bcca8b56d13426d" +object-copy@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" + integrity sha1-fn2Fi3gb18mRpBupde04EnVOmYw= + dependencies: + copy-descriptor "^0.1.0" + define-property "^0.2.5" + kind-of "^3.0.3" + +object-inspect@^1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.6.0.tgz#c70b6cbf72f274aab4c34c0c82f5167bf82cf15b" + integrity sha512-GJzfBZ6DgDAmnuaM3104jR4s1Myxr3Y3zfIyN4z3UdqN69oSRacNK8UhnobDdC+7J2AHCjGwxQubNJfE70SXXQ== + +object-keys@^1.0.11, object-keys@^1.0.12, object-keys@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" + integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== + +object-visit@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" + integrity sha1-95xEk68MU3e1n+OdOV5BBC3QRbs= + dependencies: + isobject "^3.0.0" + +object.assign@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.0.tgz#968bf1100d7956bb3ca086f006f846b3bc4008da" + integrity sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w== + dependencies: + define-properties "^1.1.2" + function-bind "^1.1.1" + has-symbols "^1.0.0" + object-keys "^1.0.11" object.getownpropertydescriptors@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz#8758c846f5b407adab0f236e0986f14b051caa16" + integrity sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY= dependencies: define-properties "^1.1.2" es-abstract "^1.5.1" -object.omit@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/object.omit/-/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa" +object.pick@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" + integrity sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c= dependencies: - for-own "^0.1.4" - is-extendable "^0.1.1" + isobject "^3.0.1" -once@^1.3.0, once@^1.3.3, once@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" +object.values@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.0.tgz#bf6810ef5da3e5325790eaaa2be213ea84624da9" + integrity sha512-8mf0nKLAoFX6VlNVdhGj31SVYpaNFtUnuoOXWyFEstsWRgU837AK+JYM0iAxwkSzGRbwn8cbFmgbyxj1j4VbXg== dependencies: - wrappy "1" + define-properties "^1.1.3" + es-abstract "^1.12.0" + function-bind "^1.1.1" + has "^1.0.3" -once@~1.3.3: - version "1.3.3" - resolved "https://registry.yarnpkg.com/once/-/once-1.3.3.tgz#b2e261557ce4c314ec8304f3fa82663e4297ca20" +once@^1.3.0, once@^1.3.1, once@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= dependencies: wrappy "1" onetime@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/onetime/-/onetime-1.1.0.tgz#a1f7838f8314c516f05ecefcbc4ccfe04b4ed789" + integrity sha1-ofeDj4MUxRbwXs78vEzP4EtO14k= onetime@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4" + integrity sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ= dependencies: mimic-fn "^1.0.0" optimist@^0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686" + integrity sha1-2j6nRob6IaGaERwybpDrFaAZZoY= dependencies: minimist "~0.0.1" wordwrap "~0.0.2" @@ -3173,6 +3932,7 @@ optimist@^0.6.1: optionator@^0.8.1, optionator@^0.8.2: version "0.8.2" resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64" + integrity sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q= dependencies: deep-is "~0.1.3" fast-levenshtein "~2.0.4" @@ -3184,6 +3944,7 @@ optionator@^0.8.1, optionator@^0.8.2: ora@^0.2.3: version "0.2.3" resolved "https://registry.yarnpkg.com/ora/-/ora-0.2.3.tgz#37527d220adcd53c39b73571d754156d5db657a4" + integrity sha1-N1J9Igrc1Tw5tzVx11QVbV22V6Q= dependencies: chalk "^1.1.1" cli-cursor "^1.0.2" @@ -3193,76 +3954,101 @@ ora@^0.2.3: os-homedir@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" + integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M= -os-locale@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-2.1.0.tgz#42bc2900a6b5b8bd17376c8e882b65afccf24bf2" - dependencies: - execa "^0.7.0" - lcid "^1.0.0" - mem "^1.1.0" - -os-tmpdir@^1.0.0, os-tmpdir@^1.0.1, os-tmpdir@~1.0.2: +os-tmpdir@^1.0.0, os-tmpdir@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" + integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= osenv@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.4.tgz#42fe6d5953df06c8064be6f176c3d05aaaa34644" + version "0.1.5" + resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410" + integrity sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g== dependencies: os-homedir "^1.0.0" os-tmpdir "^1.0.0" -output-file-sync@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/output-file-sync/-/output-file-sync-1.1.2.tgz#d0a33eefe61a205facb90092e826598d5245ce76" +output-file-sync@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/output-file-sync/-/output-file-sync-2.0.1.tgz#f53118282f5f553c2799541792b723a4c71430c0" + integrity sha512-mDho4qm7WgIXIGf4eYU1RHN2UU5tPfVYVSRwDJw0uTmj35DQUt/eNp19N7v6T3SrR0ESTEf2up2CGO73qI35zQ== dependencies: - graceful-fs "^4.1.4" + graceful-fs "^4.1.11" + is-plain-obj "^1.1.0" mkdirp "^0.5.1" - object-assign "^4.1.0" + +p-each-series@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-each-series/-/p-each-series-1.0.0.tgz#930f3d12dd1f50e7434457a22cd6f04ac6ad7f71" + integrity sha1-kw89Et0fUOdDRFeiLNbwSsatf3E= + dependencies: + p-reduce "^1.0.0" p-finally@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" + integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= p-limit@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.2.0.tgz#0e92b6bedcb59f022c13d0f1949dc82d15909f1c" + version "1.3.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" + integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q== dependencies: p-try "^1.0.0" +p-limit@^2.0.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.2.1.tgz#aa07a788cc3151c939b5131f63570f0dd2009537" + integrity sha512-85Tk+90UCVWvbDavCLKPOLC9vvY8OwEX/RtKF+/1OADJMVlFfEHOiMTPVyxg7mk/dKa+ipdHm0OUkTvCpMTuwg== + dependencies: + p-try "^2.0.0" + p-locate@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" + integrity sha1-IKAQOyIqcMj9OcwuWAaA893l7EM= dependencies: p-limit "^1.1.0" +p-locate@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" + integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== + dependencies: + p-limit "^2.0.0" + p-map@^1.1.1: version "1.2.0" resolved "https://registry.yarnpkg.com/p-map/-/p-map-1.2.0.tgz#e4e94f311eabbc8633a1e79908165fca26241b6b" + integrity sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA== + +p-reduce@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-reduce/-/p-reduce-1.0.0.tgz#18c2b0dd936a4690a529f8231f58a0fdb6a47dfa" + integrity sha1-GMKw3ZNqRpClKfgjH1ig/bakffo= p-try@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" + integrity sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M= -parse-glob@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/parse-glob/-/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c" - dependencies: - glob-base "^0.3.0" - is-dotfile "^1.0.0" - is-extglob "^1.0.0" - is-glob "^2.0.0" +p-try@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" + integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== parse-json@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" + integrity sha1-9ID0BDTvgHQfhGkJn43qGPVaTck= dependencies: error-ex "^1.2.0" parse-json@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" + integrity sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA= dependencies: error-ex "^1.3.1" json-parse-better-errors "^1.0.1" @@ -3270,440 +4056,419 @@ parse-json@^4.0.0: parse5@4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/parse5/-/parse5-4.0.0.tgz#6d78656e3da8d78b4ec0b906f7c08ef1dfe3f608" + integrity sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA== -path-exists@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b" - dependencies: - pinkie-promise "^2.0.0" +pascalcase@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" + integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ= + +path-dirname@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0" + integrity sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA= path-exists@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" + integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= -path-is-absolute@^1.0.0, path-is-absolute@^1.0.1: +path-is-absolute@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= -path-is-inside@^1.0.1, path-is-inside@^1.0.2: +path-is-inside@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" + integrity sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM= -path-key@^2.0.0: +path-key@^2.0.0, path-key@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" + integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= -path-parse@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.5.tgz#3c1adf871ea9cd6c9431b6ea2bd74a0ff055c4c1" - -path-type@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441" - dependencies: - graceful-fs "^4.1.2" - pify "^2.0.0" - pinkie-promise "^2.0.0" +path-parse@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" + integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== path-type@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/path-type/-/path-type-2.0.0.tgz#f012ccb8415b7096fc2daa1054c3d72389594c73" + integrity sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM= dependencies: pify "^2.0.0" -performance-now@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-0.2.0.tgz#33ef30c5c77d4ea21c5a53869d91b56d8f2555e5" +path-type@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f" + integrity sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg== + dependencies: + pify "^3.0.0" performance-now@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" + integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= pify@^2.0.0: version "2.3.0" resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" + integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= pify@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" + integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY= -pinkie-promise@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" - dependencies: - pinkie "^2.0.0" - -pinkie@^2.0.0: - version "2.0.4" - resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" +pify@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" + integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== -pkg-dir@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-1.0.0.tgz#7a4b508a8d5bb2d629d447056ff4e9c9314cf3d4" +pirates@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.1.tgz#643a92caf894566f91b2b986d2c66950a8e2fb87" + integrity sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA== dependencies: - find-up "^1.0.0" + node-modules-regexp "^1.0.0" pkg-dir@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-2.0.0.tgz#f6d5d1109e19d63edf428e0bd57e12777615334b" + integrity sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s= dependencies: find-up "^2.1.0" +pkg-dir@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-3.0.0.tgz#2749020f239ed990881b1f71210d51eb6523bea3" + integrity sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw== + dependencies: + find-up "^3.0.0" + pluralize@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-7.0.0.tgz#298b89df8b93b0221dbf421ad2b1b1ea23fc6777" + integrity sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow== pn@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/pn/-/pn-1.1.0.tgz#e2f4cef0e219f463c179ab37463e4e1ecdccbafb" + integrity sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA== -postcss-value-parser@^3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-3.3.0.tgz#87f38f9f18f774a4ab4c8a232f5c5ce8872a9d15" +posix-character-classes@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" + integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= + +postcss-value-parser@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.0.2.tgz#482282c09a42706d1fc9a069b73f44ec08391dc9" + integrity sha512-LmeoohTpp/K4UiyQCwuGWlONxXamGzCMtFxLq4W1nZVGIQLYvMCJx3yAF9qyyuFpflABI9yVdtJAqbihOsCsJQ== prelude-ls@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" + integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= -preserve@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b" - -prettier@^1.10.2: - version "1.10.2" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.10.2.tgz#1af8356d1842276a99a5b5529c82dd9e9ad3cc93" +prettier@^1.18.2: + version "1.18.2" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.18.2.tgz#6823e7c5900017b4bd3acf46fe9ac4b4d7bda9ea" + integrity sha512-OeHeMc0JhFE9idD4ZdtNibzY0+TPHSpSSb9h8FqtP+YnoZZ1sl8Vc9b1sasjfymH3SonAF4QcA2+mzHPhMvIiw== pretty-format@^21.2.1: version "21.2.1" resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-21.2.1.tgz#ae5407f3cf21066cd011aa1ba5fce7b6a2eddb36" + integrity sha512-ZdWPGYAnYfcVP8yKA3zFjCn8s4/17TeYH28MXuC8vTp0o21eXjbFGcOAXZEaDaOFJjc3h2qa7HQNHNshhvoh2A== dependencies: ansi-regex "^3.0.0" ansi-styles "^3.2.0" -pretty-format@^22.1.0: - version "22.1.0" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-22.1.0.tgz#2277605b40ed4529ae4db51ff62f4be817647914" +pretty-format@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-24.9.0.tgz#12fac31b37019a4eea3c11aa9a959eb7628aa7c9" + integrity sha512-00ZMZUiHaJrNfk33guavqgvfJS30sLYf0f8+Srklv0AMPodGGHcoHgksZ3OThYnIvOd+8yMCn0YiEOogjlgsnA== dependencies: - ansi-regex "^3.0.0" + "@jest/types" "^24.9.0" + ansi-regex "^4.0.0" ansi-styles "^3.2.0" + react-is "^16.8.4" private@^0.1.6: - version "0.1.6" - resolved "https://registry.yarnpkg.com/private/-/private-0.1.6.tgz#55c6a976d0f9bafb9924851350fe47b9b5fbb7c1" - -private@^0.1.7: version "0.1.8" resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff" + integrity sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg== -process-nextick-args@~1.0.6: - version "1.0.7" - resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3" +process-nextick-args@~2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" + integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== progress@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.0.tgz#8a1be366bf8fc23db2bd23f10c6fe920b4389d1f" + version "2.0.3" + resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" + integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== + +prompts@^2.0.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.2.1.tgz#f901dd2a2dfee080359c0e20059b24188d75ad35" + integrity sha512-VObPvJiWPhpZI6C5m60XOzTfnYg/xc/an+r9VYymj9WJW3B/DIH+REzjpAACPf8brwPeP+7vz3bIim3S+AaMjw== + dependencies: + kleur "^3.0.3" + sisteransi "^1.0.3" pseudomap@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" + integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM= + +psl@^1.1.24, psl@^1.1.28: + version "1.4.0" + resolved "https://registry.yarnpkg.com/psl/-/psl-1.4.0.tgz#5dd26156cdb69fa1fdb8ab1991667d3f80ced7c2" + integrity sha512-HZzqCGPecFLyoRj5HLfuDSKYTJkAfB5thKBIkRHtGjWwY7p1dAyveIbXIq4tO0KYfDF2tHqPUgY9SDnGm00uFw== + +pump@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" + integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" punycode@^1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" + integrity sha1-wNWmOycYgArY4esPpSachN1BhF4= -punycode@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.0.tgz#5f863edc89b96db09074bad7947bf09056ca4e7d" - -qs@~6.3.0: - version "6.3.0" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.3.0.tgz#f403b264f23bc01228c74131b407f18d5ea5d442" - -qs@~6.4.0: - version "6.4.0" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.4.0.tgz#13e26d28ad6b0ffaa91312cd3bf708ed351e7233" - -qs@~6.5.1: - version "6.5.1" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.1.tgz#349cdf6eef89ec45c12d7d5eb3fc0c870343a6d8" +punycode@^2.1.0, punycode@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" + integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== -randomatic@^1.1.3: - version "1.1.6" - resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-1.1.6.tgz#110dcabff397e9dcff7c0789ccc0a49adf1ec5bb" - dependencies: - is-number "^2.0.2" - kind-of "^3.0.2" +qs@~6.5.2: + version "6.5.2" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" + integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA== -rc@^1.1.7: - version "1.2.5" - resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.5.tgz#275cd687f6e3b36cc756baa26dfee80a790301fd" +rc@^1.2.7: + version "1.2.8" + resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" + integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== dependencies: - deep-extend "~0.4.0" + deep-extend "^0.6.0" ini "~1.3.0" minimist "^1.2.0" strip-json-comments "~2.0.1" -rc@~1.1.6: - version "1.1.6" - resolved "https://registry.yarnpkg.com/rc/-/rc-1.1.6.tgz#43651b76b6ae53b5c802f1151fa3fc3b059969c9" - dependencies: - deep-extend "~0.4.0" - ini "~1.3.0" - minimist "^1.2.0" - strip-json-comments "~1.0.4" - -read-pkg-up@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02" - dependencies: - find-up "^1.0.0" - read-pkg "^1.0.0" +react-is@^16.8.4: + version "16.10.1" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.10.1.tgz#0612786bf19df406502d935494f0450b40b8294f" + integrity sha512-BXUMf9sIOPXXZWqr7+c5SeOKJykyVr2u0UDzEf4LNGc6taGkQe1A9DFD07umCIXz45RLr9oAAwZbAJ0Pkknfaw== read-pkg-up@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-2.0.0.tgz#6b72a8048984e0c41e79510fd5e9fa99b3b549be" + integrity sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4= dependencies: find-up "^2.0.0" read-pkg "^2.0.0" -read-pkg@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28" +read-pkg-up@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-4.0.0.tgz#1b221c6088ba7799601c808f91161c66e58f8978" + integrity sha512-6etQSH7nJGsK0RbG/2TeDzZFa8shjQ1um+SwQQ5cwKy0dhSXdOncEhb1CPpvQG4h7FyOV6EB6YlV0yJvZQNAkA== dependencies: - load-json-file "^1.0.0" - normalize-package-data "^2.3.2" - path-type "^1.0.0" + find-up "^3.0.0" + read-pkg "^3.0.0" read-pkg@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-2.0.0.tgz#8ef1c0623c6a6db0dc6713c4bfac46332b2368f8" + integrity sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg= dependencies: load-json-file "^2.0.0" normalize-package-data "^2.3.2" path-type "^2.0.0" -"readable-stream@^2.0.0 || ^1.1.13", readable-stream@^2.0.2, readable-stream@^2.2.2: - version "2.2.2" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.2.2.tgz#a9e6fec3c7dda85f8bb1b3ba7028604556fc825e" +read-pkg@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-3.0.0.tgz#9cbc686978fee65d16c00e2b19c237fcf6e38389" + integrity sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k= dependencies: - 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 "~0.10.x" - util-deprecate "~1.0.1" + load-json-file "^4.0.0" + normalize-package-data "^2.3.2" + path-type "^3.0.0" -readable-stream@^2.0.1, readable-stream@^2.1.4: - version "2.3.3" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.3.tgz#368f2512d79f9d46fdfc71349ae7878bbc1eb95c" +readable-stream@^2.0.2, readable-stream@^2.0.6, readable-stream@^2.2.2: + version "2.3.6" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf" + integrity sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw== dependencies: core-util-is "~1.0.0" inherits "~2.0.3" isarray "~1.0.0" - process-nextick-args "~1.0.6" + process-nextick-args "~2.0.0" safe-buffer "~5.1.1" - string_decoder "~1.0.3" - util-deprecate "~1.0.1" - -readable-stream@~2.1.4: - version "2.1.5" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.1.5.tgz#66fa8b720e1438b364681f2ad1a63c618448c9d0" - dependencies: - 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 "~0.10.x" + string_decoder "~1.1.1" util-deprecate "~1.0.1" -readdirp@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.1.0.tgz#4ed0ad060df3073300c48440373f72d1cc642d78" +readdirp@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.2.1.tgz#0e87622a3325aa33e892285caf8b4e846529a525" + integrity sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ== dependencies: - graceful-fs "^4.1.2" - minimatch "^3.0.2" + graceful-fs "^4.1.11" + micromatch "^3.1.10" readable-stream "^2.0.2" - set-immediate-shim "^1.0.1" -realpath-native@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/realpath-native/-/realpath-native-1.0.0.tgz#7885721a83b43bd5327609f0ddecb2482305fdf0" +realpath-native@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/realpath-native/-/realpath-native-1.1.0.tgz#2003294fea23fb0672f2476ebe22fcf498a2d65c" + integrity sha512-wlgPA6cCIIg9gKz0fgAPjnzh4yR/LnXovwuo9hvyGvx3h8nX4+/iLZplfUWasXpqD8BdnGnP5njOFjkUwPzvjA== dependencies: util.promisify "^1.0.0" -regenerate@^1.2.1: - version "1.3.2" - resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.3.2.tgz#d1941c67bad437e1be76433add5b385f95b19260" - -regenerator-runtime@^0.10.0: - version "0.10.1" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.10.1.tgz#257f41961ce44558b18f7814af48c17559f9faeb" - -regenerator-runtime@^0.10.5: - version "0.10.5" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz#336c3efc1220adcedda2c9fab67b5a7955a33658" +regenerate-unicode-properties@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-8.1.0.tgz#ef51e0f0ea4ad424b77bf7cb41f3e015c70a3f0e" + integrity sha512-LGZzkgtLY79GeXLm8Dp0BVLdQlWICzBnJz/ipWUgo59qBaZ+BHtq51P2q1uVZlppMuUAT37SDk39qUbjTWB7bA== + dependencies: + regenerate "^1.4.0" -regenerator-runtime@^0.11.0: - version "0.11.1" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9" +regenerate@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.0.tgz#4a856ec4b56e4077c557589cae85e7a4c8869a11" + integrity sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg== -regenerator-transform@^0.10.0: - version "0.10.1" - resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.10.1.tgz#1e4996837231da8b7f3cf4114d71b5691a0680dd" +regenerator-transform@^0.14.0: + version "0.14.1" + resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.14.1.tgz#3b2fce4e1ab7732c08f665dfdb314749c7ddd2fb" + integrity sha512-flVuee02C3FKRISbxhXl9mGzdbWUVHubl1SMaknjxkFB1/iqpJhArQUvRxOOPEc/9tAiX0BaQ28FJH10E4isSQ== dependencies: - babel-runtime "^6.18.0" - babel-types "^6.19.0" private "^0.1.6" -regex-cache@^0.4.2: - version "0.4.3" - resolved "https://registry.yarnpkg.com/regex-cache/-/regex-cache-0.4.3.tgz#9b1a6c35d4d0dfcef5711ae651e8e9d3d7114145" +regex-not@^1.0.0, regex-not@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" + integrity sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A== dependencies: - is-equal-shallow "^0.1.3" - is-primitive "^2.0.0" + extend-shallow "^3.0.2" + safe-regex "^1.1.0" -regexpu-core@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-2.0.0.tgz#49d038837b8dcf8bfa5b9a42139938e6ea2ae240" +regexpp@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-1.1.0.tgz#0e3516dd0b7904f413d2d4193dce4618c3a689ab" + integrity sha512-LOPw8FpgdQF9etWMaAfG/WRthIdXJGYp4mJ2Jgn/2lpkbod9jPn0t9UqN7AxBOKNfzRbYyVfgc7Vk4t/MpnXgw== + +regexpu-core@^4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.6.0.tgz#2037c18b327cfce8a6fea2a4ec441f2432afb8b6" + integrity sha512-YlVaefl8P5BnFYOITTNzDvan1ulLOiXJzCNZxduTIosN17b87h3bvG9yHMoHaRuo88H4mQ06Aodj5VtYGGGiTg== dependencies: - regenerate "^1.2.1" - regjsgen "^0.2.0" - regjsparser "^0.1.4" + regenerate "^1.4.0" + regenerate-unicode-properties "^8.1.0" + regjsgen "^0.5.0" + regjsparser "^0.6.0" + unicode-match-property-ecmascript "^1.0.4" + unicode-match-property-value-ecmascript "^1.1.0" -regjsgen@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.2.0.tgz#6c016adeac554f75823fe37ac05b92d5a4edb1f7" +regjsgen@^0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.5.0.tgz#a7634dc08f89209c2049adda3525711fb97265dd" + integrity sha512-RnIrLhrXCX5ow/E5/Mh2O4e/oa1/jW0eaBKTSy3LaCj+M3Bqvm97GWDp2yUtzIs4LEn65zR2yiYGFqb2ApnzDA== -regjsparser@^0.1.4: - version "0.1.5" - resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.1.5.tgz#7ee8f84dc6fa792d3fd0ae228d24bd949ead205c" +regjsparser@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.6.0.tgz#f1e6ae8b7da2bae96c99399b868cd6c933a2ba9c" + integrity sha512-RQ7YyokLiQBomUJuUG8iGVvkgOLxwyZM8k6d3q5SAXpg4r5TZJZigKFvC6PpD+qQ98bCDC5YelPeA3EucDoNeQ== dependencies: jsesc "~0.5.0" +remove-trailing-separator@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" + integrity sha1-wkvOKig62tW8P1jg1IJJuSN52O8= + repeat-element@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.2.tgz#ef089a178d1483baae4d93eb98b4f9e4e11d990a" + version "1.1.3" + resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce" + integrity sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g== -repeat-string@^1.5.2: +repeat-string@^1.6.1: version "1.6.1" resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" + integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc= repeating@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda" + integrity sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo= dependencies: is-finite "^1.0.0" -request-promise-core@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/request-promise-core/-/request-promise-core-1.1.1.tgz#3eee00b2c5aa83239cfb04c5700da36f81cd08b6" +request-promise-core@1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/request-promise-core/-/request-promise-core-1.1.2.tgz#339f6aababcafdb31c799ff158700336301d3346" + integrity sha512-UHYyq1MO8GsefGEt7EprS8UrXsm1TxEvFUX1IMTuSLU2Rh7fTIdFtl8xD7JiEYiWU2dl+NYAjCTksTehQUxPag== dependencies: - lodash "^4.13.1" + lodash "^4.17.11" request-promise-native@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/request-promise-native/-/request-promise-native-1.0.5.tgz#5281770f68e0c9719e5163fd3fab482215f4fda5" - dependencies: - request-promise-core "1.1.1" - stealthy-require "^1.1.0" - tough-cookie ">=2.3.3" - -request@2.81.0: - version "2.81.0" - resolved "https://registry.yarnpkg.com/request/-/request-2.81.0.tgz#c6928946a0e06c5f8d6f8a9333469ffda46298a0" + version "1.0.7" + resolved "https://registry.yarnpkg.com/request-promise-native/-/request-promise-native-1.0.7.tgz#a49868a624bdea5069f1251d0a836e0d89aa2c59" + integrity sha512-rIMnbBdgNViL37nZ1b3L/VfPOpSi0TqVDQPAvO6U14lMzOLrt5nilxCQqtDKhZeDiW0/hkCXGoQjhgJd/tCh6w== dependencies: - 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" + request-promise-core "1.1.2" + stealthy-require "^1.1.1" + tough-cookie "^2.3.3" -request@^2.79.0: - version "2.79.0" - resolved "https://registry.yarnpkg.com/request/-/request-2.79.0.tgz#4dfe5bf6be8b8cdc37fcf93e04b65577722710de" - dependencies: - aws-sign2 "~0.6.0" - aws4 "^1.2.1" - caseless "~0.11.0" - combined-stream "~1.0.5" - extend "~3.0.0" - forever-agent "~0.6.1" - form-data "~2.1.1" - har-validator "~2.0.6" - 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" - qs "~6.3.0" - stringstream "~0.0.4" - tough-cookie "~2.3.0" - tunnel-agent "~0.4.1" - uuid "^3.0.0" - -request@^2.83.0: - version "2.83.0" - resolved "https://registry.yarnpkg.com/request/-/request-2.83.0.tgz#ca0b65da02ed62935887808e6f510381034e3356" +request@^2.87.0: + version "2.88.0" + resolved "https://registry.yarnpkg.com/request/-/request-2.88.0.tgz#9c2fca4f7d35b592efe57c7f0a55e81052124fef" + integrity sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg== dependencies: aws-sign2 "~0.7.0" - aws4 "^1.6.0" + aws4 "^1.8.0" caseless "~0.12.0" - combined-stream "~1.0.5" - extend "~3.0.1" + combined-stream "~1.0.6" + extend "~3.0.2" forever-agent "~0.6.1" - form-data "~2.3.1" - har-validator "~5.0.3" - hawk "~6.0.2" + form-data "~2.3.2" + har-validator "~5.1.0" 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" + mime-types "~2.1.19" + oauth-sign "~0.9.0" performance-now "^2.1.0" - qs "~6.5.1" - safe-buffer "^5.1.1" - stringstream "~0.0.5" - tough-cookie "~2.3.3" + qs "~6.5.2" + safe-buffer "^5.1.2" + tough-cookie "~2.4.3" tunnel-agent "^0.6.0" - uuid "^3.1.0" + uuid "^3.3.2" require-directory@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= require-from-string@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.1.tgz#c545233e9d7da6616e9d59adfb39fc9f588676ff" + version "2.0.2" + resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" + integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== -require-main-filename@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1" +require-main-filename@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" + integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== require-uncached@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/require-uncached/-/require-uncached-1.0.3.tgz#4e0d56d6c9662fd31e43011c4b95aa49955421d3" + integrity sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM= dependencies: caller-path "^0.1.0" resolve-from "^1.0.0" @@ -3711,30 +4476,41 @@ require-uncached@^1.0.3: resolve-cwd@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-2.0.0.tgz#00a9f7387556e27038eae232caa372a6a59b665a" + integrity sha1-AKn3OHVW4nA46uIyyqNypqWbZlo= dependencies: resolve-from "^3.0.0" resolve-from@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-1.0.1.tgz#26cbfe935d1aeeeabb29bc3fe5aeb01e93d44226" + integrity sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY= resolve-from@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" + integrity sha1-six699nWiBvItuZTM17rywoYh0g= + +resolve-url@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" + integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= resolve@1.1.7: version "1.1.7" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" + integrity sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs= -resolve@^1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.5.0.tgz#1f09acce796c9a762579f31b2c1cc4c3cddf9f36" +resolve@^1.10.0, resolve@^1.11.0, resolve@^1.3.2, resolve@^1.5.0: + version "1.12.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.12.0.tgz#3fc644a35c84a48554609ff26ec52b66fa577df6" + integrity sha512-B/dOmuoAik5bKcD6s6nXDCjzUKnaDvdkRyAk6rsmsKLipWj4797iothd7jmmUhWTfinVMU+wc56rYKsit2Qy4w== dependencies: - path-parse "^1.0.5" + path-parse "^1.0.6" restore-cursor@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-1.0.1.tgz#34661f46886327fed2991479152252df92daa541" + integrity sha1-NGYfRohjJ/7SmRR5FSJS35LapUE= dependencies: exit-hook "^1.0.0" onetime "^1.0.0" @@ -3742,226 +4518,332 @@ restore-cursor@^1.0.1: restore-cursor@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" + integrity sha1-n37ih/gv0ybU/RYpI9YhKe7g368= dependencies: onetime "^2.0.0" signal-exit "^3.0.2" -right-align@^0.1.1: - version "0.1.3" - resolved "https://registry.yarnpkg.com/right-align/-/right-align-0.1.3.tgz#61339b722fe6a3515689210d24e14c96148613ef" +ret@~0.1.10: + version "0.1.15" + resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" + integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== + +rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.3: + version "2.7.1" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" + integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== dependencies: - align-text "^0.1.1" + glob "^7.1.3" -rimraf@2, rimraf@^2.2.8, rimraf@~2.5.1, rimraf@~2.5.4: - version "2.5.4" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.5.4.tgz#96800093cbf1a0c86bd95b4625467535c29dfa04" +rimraf@~2.6.2: + version "2.6.3" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" + integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA== dependencies: - glob "^7.0.5" + glob "^7.1.3" -rimraf@^2.5.1, rimraf@^2.5.4, rimraf@^2.6.1: - version "2.6.2" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.2.tgz#2ed8150d24a16ea8651e6d6ef0f47c4158ce7a36" +rollup@^1.22.0: + version "1.22.0" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-1.22.0.tgz#a5b2672c0eebe9f2b6454220f785dbc09b64b4bc" + integrity sha512-x4l4ZrV/Mr/x/jvFTmwROdEAhbZjx16yDRTVSKWh/i4oJDuW2dVEbECT853mybYCz7BAitU8ElGlhx7dNjw3qQ== dependencies: - glob "^7.0.5" + "@types/estree" "*" + "@types/node" "*" + acorn "^7.1.0" -rollup@^0.55.5: - version "0.55.5" - resolved "https://registry.yarnpkg.com/rollup/-/rollup-0.55.5.tgz#2f88c300f7cf24b5ec2dca8a6aba73b04e087e93" +rsvp@^4.8.4: + version "4.8.5" + resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-4.8.5.tgz#c8f155311d167f68f21e168df71ec5b083113734" + integrity sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA== run-async@^2.2.0: version "2.3.0" resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.3.0.tgz#0371ab4ae0bdd720d4166d7dfda64ff7a445a6c0" + integrity sha1-A3GrSuC91yDUFm19/aZP96RFpsA= dependencies: is-promise "^2.1.0" rx-lite-aggregates@^4.0.8: version "4.0.8" resolved "https://registry.yarnpkg.com/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz#753b87a89a11c95467c4ac1626c4efc4e05c67be" + integrity sha1-dTuHqJoRyVRnxKwWJsTvxOBcZ74= dependencies: rx-lite "*" rx-lite@*, rx-lite@^4.0.8: version "4.0.8" resolved "https://registry.yarnpkg.com/rx-lite/-/rx-lite-4.0.8.tgz#0b1e11af8bc44836f04a6407e92da42467b79444" + integrity sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ= rxjs@^5.4.2: - version "5.5.6" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-5.5.6.tgz#e31fb96d6fd2ff1fd84bcea8ae9c02d007179c02" + version "5.5.12" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-5.5.12.tgz#6fa61b8a77c3d793dbaf270bee2f43f652d741cc" + integrity sha512-xx2itnL5sBbqeeiVgNPVuQQ1nC8Jp2WfNJhXWHmElW9YmrpS9UVnNzhP3EH3HFqexO5Tlp8GhYY+WEcqcVMvGw== dependencies: symbol-observable "1.0.1" -safe-buffer@^5.0.1, safe-buffer@^5.1.1, safe-buffer@~5.1.0, safe-buffer@~5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853" +safe-buffer@^5.0.1, safe-buffer@^5.1.2: + version "5.2.0" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.0.tgz#b74daec49b1148f88c64b68d49b1e815c1f2f519" + integrity sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg== -sane@^2.0.0: - version "2.4.1" - resolved "https://registry.yarnpkg.com/sane/-/sane-2.4.1.tgz#29f991208cf28636720efdc584293e7fd66663a5" +safe-buffer@~5.1.0, safe-buffer@~5.1.1: + version "5.1.2" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + +safe-regex@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" + integrity sha1-QKNmnzsHfR6UPURinhV91IAjvy4= dependencies: - anymatch "^1.3.0" - exec-sh "^0.2.0" + ret "~0.1.10" + +"safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: + version "2.1.2" + resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== + +sane@^4.0.3: + version "4.1.0" + resolved "https://registry.yarnpkg.com/sane/-/sane-4.1.0.tgz#ed881fd922733a6c461bc189dc2b6c006f3ffded" + integrity sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA== + dependencies: + "@cnakazawa/watch" "^1.0.3" + anymatch "^2.0.0" + capture-exit "^2.0.0" + exec-sh "^0.3.2" + execa "^1.0.0" fb-watchman "^2.0.0" - minimatch "^3.0.2" + micromatch "^3.1.4" minimist "^1.1.1" walker "~1.0.5" - watch "~0.18.0" - optionalDependencies: - fsevents "^1.1.1" sax@^1.2.4: version "1.2.4" resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" + integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== -"semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@~5.3.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f" +"semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@^5.4.1, semver@^5.5.0, semver@^5.6.0: + version "5.7.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" + integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== -semver@^5.4.1: - version "5.5.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.5.0.tgz#dc4bbc7a6ca9d916dee5d43516f0092b58f7b8ab" +semver@^6.0.0, semver@^6.2.0, semver@^6.3.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" + integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== set-blocking@^2.0.0, set-blocking@~2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" + integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= -set-immediate-shim@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz#4b2b1b27eb808a9f8dcc481a58e5e56f599f3f61" +set-value@^2.0.0, set-value@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b" + integrity sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw== + dependencies: + extend-shallow "^2.0.1" + is-extendable "^0.1.1" + is-plain-object "^2.0.3" + split-string "^3.0.1" shebang-command@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" + integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo= dependencies: shebang-regex "^1.0.0" shebang-regex@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" + integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= shellwords@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.1.tgz#d6b9181c1a48d397324c84871efbcfc73fc0654b" + integrity sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww== signal-exit@^3.0.0, signal-exit@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" + integrity sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0= -slash@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55" +sisteransi@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.3.tgz#98168d62b79e3a5e758e27ae63c4a053d748f4eb" + integrity sha512-SbEG75TzH8G7eVXFSN5f9EExILKfly7SUvVY5DhhYLvfhKqhDFY0OzevWa/zwak0RLRfWS5AvfMWpd9gJvr5Yg== + +slash@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-2.0.0.tgz#de552851a1759df3a8f206535442f5ec4ddeab44" + integrity sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A== slice-ansi@0.0.4: version "0.0.4" resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-0.0.4.tgz#edbf8903f66f7ce2f8eafd6ceed65e264c831b35" + integrity sha1-7b+JA/ZvfOL46v1s7tZeJkyDGzU= slice-ansi@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-1.0.0.tgz#044f1a49d8842ff307aad6b505ed178bd950134d" + integrity sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg== dependencies: is-fullwidth-code-point "^2.0.0" -sntp@1.x.x: - version "1.0.9" - resolved "https://registry.yarnpkg.com/sntp/-/sntp-1.0.9.tgz#6541184cc90aeea6c6e7b35e2659082443c66198" +snapdragon-node@^2.0.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" + integrity sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw== dependencies: - hoek "2.x.x" + define-property "^1.0.0" + isobject "^3.0.0" + snapdragon-util "^3.0.1" -sntp@2.x.x: - version "2.1.0" - resolved "https://registry.yarnpkg.com/sntp/-/sntp-2.1.0.tgz#2c6cec14fedc2222739caf9b5c3d85d1cc5a2cc8" +snapdragon-util@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2" + integrity sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ== dependencies: - hoek "4.x.x" + kind-of "^3.2.0" -source-map-support@^0.4.15: - version "0.4.18" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.18.tgz#0286a6de8be42641338594e97ccea75f0a2c585f" +snapdragon@^0.8.1: + version "0.8.2" + resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d" + integrity sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg== dependencies: + 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-support@^0.4.2: - version "0.4.10" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.10.tgz#d7b19038040a14c0837a18e630a196453952b378" - dependencies: - source-map "^0.5.3" - -source-map-support@^0.5.0: - version "0.5.3" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.3.tgz#2b3d5fff298cfa4d1afd7d4352d569e9a0158e76" - dependencies: + source-map-resolve "^0.5.0" + use "^3.1.0" + +source-map-resolve@^0.5.0: + version "0.5.2" + resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.2.tgz#72e2cc34095543e43b2c62b2c4c10d4a9054f259" + integrity sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA== + dependencies: + atob "^2.1.1" + decode-uri-component "^0.2.0" + resolve-url "^0.2.1" + source-map-url "^0.4.0" + urix "^0.1.0" + +source-map-support@^0.5.6: + version "0.5.13" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.13.tgz#31b24a9c2e73c2de85066c0feb7d44767ed52932" + integrity sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w== + dependencies: + buffer-from "^1.0.0" source-map "^0.6.0" -source-map@^0.4.4: - version "0.4.4" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.4.4.tgz#eba4f5da9c0dc999de68032d8b4f76173652036b" - dependencies: - amdefine ">=0.0.4" - -source-map@^0.5.0, source-map@^0.5.3, source-map@~0.5.1: - version "0.5.6" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.6.tgz#75ce38f52bf0733c5a7f0c118d81334a2bb5f412" +source-map-url@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" + integrity sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM= -source-map@^0.5.6, source-map@^0.5.7, source-map@~0.5.6: +source-map@^0.5.0, source-map@^0.5.6: version "0.5.7" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" + integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= -source-map@^0.6.0: +source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== -spdx-correct@~1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-1.0.2.tgz#4b3073d933ff51f3912f03ac5519498a4150db40" +spdx-correct@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.0.tgz#fb83e504445268f154b074e218c87c003cd31df4" + integrity sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q== dependencies: - spdx-license-ids "^1.0.2" + spdx-expression-parse "^3.0.0" + spdx-license-ids "^3.0.0" -spdx-expression-parse@~1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz#9bdf2f20e1f40ed447fbe273266191fced51626c" +spdx-exceptions@^2.1.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz#2ea450aee74f2a89bfb94519c07fcd6f41322977" + integrity sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA== + +spdx-expression-parse@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz#99e119b7a5da00e05491c9fa338b7904823b41d0" + integrity sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg== + dependencies: + spdx-exceptions "^2.1.0" + spdx-license-ids "^3.0.0" + +spdx-license-ids@^3.0.0: + version "3.0.5" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz#3694b5804567a458d3c8045842a6358632f62654" + integrity sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q== -spdx-license-ids@^1.0.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz#c9df7a3424594ade6bd11900d596696dc06bac57" +split-string@^3.0.1, split-string@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" + integrity sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw== + dependencies: + extend-shallow "^3.0.0" sprintf-js@~1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" + integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= sshpk@^1.7.0: - version "1.10.2" - resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.10.2.tgz#d5a804ce22695515638e798dbe23273de070a5fa" + version "1.16.1" + resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.16.1.tgz#fb661c0bef29b39db40769ee39fa70093d6f6877" + integrity sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg== dependencies: asn1 "~0.2.3" assert-plus "^1.0.0" - dashdash "^1.12.0" - getpass "^0.1.1" - optionalDependencies: bcrypt-pbkdf "^1.0.0" + dashdash "^1.12.0" ecc-jsbn "~0.1.1" - jodid25519 "^1.0.0" + getpass "^0.1.1" jsbn "~0.1.0" + safer-buffer "^2.0.2" tweetnacl "~0.14.0" stack-utils@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-1.0.1.tgz#d4f33ab54e8e38778b0ca5cfd3b3afb12db68620" + version "1.0.2" + resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-1.0.2.tgz#33eba3897788558bebfc2db059dc158ec36cebb8" + integrity sha512-MTX+MeG5U994cazkjd/9KNAapsHnibjMLnfXodlkXw76JEea0UiNzrqidzo1emMwk7w5Qhc9jd4Bn9TBb1MFwA== -staged-git-files@0.0.4: - version "0.0.4" - resolved "https://registry.yarnpkg.com/staged-git-files/-/staged-git-files-0.0.4.tgz#d797e1b551ca7a639dec0237dc6eb4bb9be17d35" +staged-git-files@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/staged-git-files/-/staged-git-files-1.0.0.tgz#cdb847837c1fcc52c08a872d4883cc0877668a80" + integrity sha1-zbhHg3wfzFLAioctSIPMCHdmioA= + +static-extend@^0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" + integrity sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY= + dependencies: + define-property "^0.2.5" + object-copy "^0.1.0" -stealthy-require@^1.1.0: +stealthy-require@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/stealthy-require/-/stealthy-require-1.1.1.tgz#35b09875b4ff49f26a777e509b3090a3226bf24b" + integrity sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks= stream-to-observable@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/stream-to-observable/-/stream-to-observable-0.2.0.tgz#59d6ea393d87c2c0ddac10aa0d561bc6ba6f0e10" + integrity sha1-WdbqOT2HwsDdrBCqDVYbxrpvDhA= dependencies: any-observable "^0.2.0" string-length@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/string-length/-/string-length-2.0.0.tgz#d40dbb686a3ace960c1cffca562bf2c45f8363ed" + integrity sha1-1A27aGo6zpYMHP/KVivyxF+DY+0= dependencies: astral-regex "^1.0.0" strip-ansi "^4.0.0" @@ -3969,116 +4851,135 @@ string-length@^2.0.0: string-width@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" + integrity sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M= dependencies: code-point-at "^1.0.0" is-fullwidth-code-point "^1.0.0" strip-ansi "^3.0.0" -string-width@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.0.0.tgz#635c5436cc72a6e0c387ceca278d4e2eec52687e" - dependencies: - is-fullwidth-code-point "^2.0.0" - strip-ansi "^3.0.0" - -string-width@^2.1.0, string-width@^2.1.1: +"string-width@^1.0.2 || 2", string-width@^2.1.0, string-width@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" + integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== dependencies: is-fullwidth-code-point "^2.0.0" strip-ansi "^4.0.0" -string_decoder@~0.10.x: - version "0.10.31" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" +string-width@^3.0.0, string-width@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" + integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== + dependencies: + emoji-regex "^7.0.1" + is-fullwidth-code-point "^2.0.0" + strip-ansi "^5.1.0" -string_decoder@~1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.0.3.tgz#0fc67d7c141825de94282dd536bec6b9bce860ab" +string.prototype.trimleft@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/string.prototype.trimleft/-/string.prototype.trimleft-2.1.0.tgz#6cc47f0d7eb8d62b0f3701611715a3954591d634" + integrity sha512-FJ6b7EgdKxxbDxc79cOlok6Afd++TTs5szo+zJTUyow3ycrRfJVE2pq3vcN53XexvKZu/DJMDfeI/qMiZTrjTw== + dependencies: + define-properties "^1.1.3" + function-bind "^1.1.1" + +string.prototype.trimright@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/string.prototype.trimright/-/string.prototype.trimright-2.1.0.tgz#669d164be9df9b6f7559fa8e89945b168a5a6c58" + integrity sha512-fXZTSV55dNBwv16uw+hh5jkghxSnc5oHq+5K/gXgizHwAvMetdAJlHqqoFC1FSDVPYWLkAKl2cxpUT41sV7nSg== + dependencies: + define-properties "^1.1.3" + function-bind "^1.1.1" + +string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" + integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== dependencies: safe-buffer "~5.1.0" stringify-object@^3.2.0: - version "3.2.1" - resolved "https://registry.yarnpkg.com/stringify-object/-/stringify-object-3.2.1.tgz#2720c2eff940854c819f6ee252aaeb581f30624d" + version "3.3.0" + resolved "https://registry.yarnpkg.com/stringify-object/-/stringify-object-3.3.0.tgz#703065aefca19300d3ce88af4f5b3956d7556629" + integrity sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw== dependencies: - get-own-enumerable-property-symbols "^2.0.1" + get-own-enumerable-property-symbols "^3.0.0" is-obj "^1.0.1" is-regexp "^1.0.0" -stringstream@~0.0.4, stringstream@~0.0.5: - version "0.0.5" - resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.5.tgz#4e484cd4de5a0bbbee18e46307710a8a81621878" - strip-ansi@^3.0.0, strip-ansi@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" + integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8= dependencies: ansi-regex "^2.0.0" strip-ansi@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" + integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8= dependencies: ansi-regex "^3.0.0" -strip-bom@3.0.0, strip-bom@^3.0.0: +strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" + integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== + dependencies: + ansi-regex "^4.1.0" + +strip-bom@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" - -strip-bom@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e" - dependencies: - is-utf8 "^0.2.0" + integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM= strip-eof@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" - -strip-json-comments@~1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-1.0.4.tgz#1e15fbcac97d3ee99bf2d73b4c656b082bbafb91" + integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8= strip-json-comments@~2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" - -supports-color@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-0.2.0.tgz#d92de2694eb3f67323973d7ae3d8b55b4c22190a" + integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= supports-color@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" + integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc= -supports-color@^3.1.2: - version "3.2.3" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.2.3.tgz#65ac0504b3954171d8a64946b2ae3cbb8a5f54f6" +supports-color@^5.3.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== dependencies: - has-flag "^1.0.0" + has-flag "^3.0.0" -supports-color@^4.0.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-4.5.0.tgz#be7a0de484dec5c5cddf8b3d59125044912f635b" +supports-color@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.1.0.tgz#0764abc69c63d5ac842dd4867e8d025e880df8f3" + integrity sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ== dependencies: - has-flag "^2.0.0" + has-flag "^3.0.0" symbol-observable@1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.0.1.tgz#8340fc4702c3122df5d22288f88283f513d3fdd4" + integrity sha1-g0D8RwLDEi310iKI+IKD9RPT/dQ= symbol-observable@^0.2.2: version "0.2.4" resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-0.2.4.tgz#95a83db26186d6af7e7a18dbd9760a2f86d08f40" + integrity sha1-lag9smGG1q9+ehjb2XYKL4bQj0A= symbol-tree@^3.2.2: - version "3.2.2" - resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.2.tgz#ae27db38f660a7ae2e1c3b7d1bc290819b8519e6" + version "3.2.4" + resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" + integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== -table@^4.0.1: +table@4.0.2: version "4.0.2" resolved "https://registry.yarnpkg.com/table/-/table-4.0.2.tgz#a33447375391e766ad34d3486e6e2aedc84d2e36" + integrity sha512-UUkEAPdSGxtRpiV9ozJ5cMTtYiqz7Ni1OGqLXRCynrvzdtR1p+cfOWe2RJLwvUG8hNanaSRjecIqwOjqeatDsA== dependencies: ajv "^5.2.3" ajv-keywords "^2.1.0" @@ -4087,282 +4988,335 @@ table@^4.0.1: slice-ansi "1.0.0" string-width "^2.1.1" -tar-pack@^3.4.0: - version "3.4.1" - resolved "https://registry.yarnpkg.com/tar-pack/-/tar-pack-3.4.1.tgz#e1dbc03a9b9d3ba07e896ad027317eb679a10a1f" - dependencies: - 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" - -tar-pack@~3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/tar-pack/-/tar-pack-3.3.0.tgz#30931816418f55afc4d21775afdd6720cee45dae" - dependencies: - 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" - -tar@^2.2.1, tar@~2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/tar/-/tar-2.2.1.tgz#8e4d2a256c0e2185c6b18ad694aec968b83cb1d1" - dependencies: - block-stream "*" - fstream "^1.0.2" - inherits "2" - -test-exclude@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-4.1.1.tgz#4d84964b0966b0087ecc334a2ce002d3d9341e26" - dependencies: - arrify "^1.0.1" - micromatch "^2.3.11" - object-assign "^4.1.0" - read-pkg-up "^1.0.1" - require-main-filename "^1.0.1" +tar@^4: + version "4.4.13" + resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.13.tgz#43b364bc52888d555298637b10d60790254ab525" + integrity sha512-w2VwSrBoHa5BsSyH+KxEqeQBAllHhccyMFVHtGtdMpF4W7IRWfZjFiQceJPChOeTsSDVUpER2T8FA93pr0L+QA== + dependencies: + chownr "^1.1.1" + fs-minipass "^1.2.5" + minipass "^2.8.6" + minizlib "^1.2.1" + mkdirp "^0.5.0" + safe-buffer "^5.1.2" + yallist "^3.0.3" + +test-exclude@^5.2.3: + version "5.2.3" + resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-5.2.3.tgz#c3d3e1e311eb7ee405e092dac10aefd09091eac0" + integrity sha512-M+oxtseCFO3EDtAaGH7iiej3CBkzXqFMbzqYAACdzKui4eZA+pq3tZEwChvOdNfa7xxy8BfbmgJSIr43cC/+2g== + dependencies: + glob "^7.1.3" + minimatch "^3.0.4" + read-pkg-up "^4.0.0" + require-main-filename "^2.0.0" text-table@~0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" + integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= throat@^4.0.0: version "4.1.0" resolved "https://registry.yarnpkg.com/throat/-/throat-4.1.0.tgz#89037cbc92c56ab18926e6ba4cbb200e15672a6a" + integrity sha1-iQN8vJLFarGJJua6TLsgDhVnKmo= through@^2.3.6: version "2.3.8" resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" + integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= tmp@^0.0.33: version "0.0.33" resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" + integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== dependencies: os-tmpdir "~1.0.2" tmpl@1.0.x: version "1.0.4" resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.4.tgz#23640dd7b42d00433911140820e5cf440e521dd1" + integrity sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE= -to-fast-properties@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.2.tgz#f3f5c0c3ba7299a7ef99427e44633257ade43320" +to-fast-properties@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" + integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= -to-fast-properties@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.3.tgz#b83571fa4d8c25b82e231b06e3a3055de4ca1a47" +to-object-path@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" + integrity sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68= + dependencies: + kind-of "^3.0.2" -tough-cookie@>=2.3.3, tough-cookie@^2.3.3, tough-cookie@~2.3.3: - version "2.3.3" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.3.tgz#0b618a5565b6dea90bf3425d04d55edc475a7561" +to-regex-range@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" + integrity sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg= dependencies: - punycode "^1.4.1" + is-number "^3.0.0" + repeat-string "^1.6.1" -tough-cookie@~2.3.0: - version "2.3.2" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.2.tgz#f081f76e4c85720e6c37a5faced737150d84072a" +to-regex@^3.0.1, to-regex@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" + integrity sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw== + dependencies: + define-property "^2.0.2" + extend-shallow "^3.0.2" + regex-not "^1.0.2" + safe-regex "^1.1.0" + +tough-cookie@^2.3.3, tough-cookie@^2.3.4: + version "2.5.0" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" + integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g== dependencies: + psl "^1.1.28" + punycode "^2.1.1" + +tough-cookie@~2.4.3: + version "2.4.3" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.4.3.tgz#53f36da3f47783b0925afa06ff9f3b165280f781" + integrity sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ== + dependencies: + psl "^1.1.24" punycode "^1.4.1" -tr46@^1.0.0: +tr46@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/tr46/-/tr46-1.0.1.tgz#a8b13fd6bfd2489519674ccde55ba3693b706d09" + integrity sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk= dependencies: punycode "^2.1.0" -trim-right@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" - -tryit@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/tryit/-/tryit-1.0.3.tgz#393be730a9446fd1ead6da59a014308f36c289cb" - tunnel-agent@^0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" + integrity sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0= dependencies: safe-buffer "^5.0.1" -tunnel-agent@~0.4.1: - version "0.4.3" - resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.4.3.tgz#6373db76909fe570e08d73583365ed828a74eeeb" - tweetnacl@^0.14.3, tweetnacl@~0.14.0: version "0.14.5" resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" + integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= type-check@~0.3.2: version "0.3.2" resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" + integrity sha1-WITKtRLPHTVeP7eE8wgEsrUg23I= dependencies: prelude-ls "~1.1.2" typedarray@^0.0.6: version "0.0.6" resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" + integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= -uglify-js@^2.6: - version "2.7.5" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.7.5.tgz#4612c0c7baaee2ba7c487de4904ae122079f2ca8" +uglify-js@^3.1.4: + version "3.6.0" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.6.0.tgz#704681345c53a8b2079fb6cec294b05ead242ff5" + integrity sha512-W+jrUHJr3DXKhrsS7NUVxn3zqMOFn0hL/Ei6v0anCIMoKC93TjcflTagwIHLW7SfMFfiQuktQyFVCFHGUE0+yg== dependencies: - async "~0.2.6" - source-map "~0.5.1" - uglify-to-browserify "~1.0.0" - yargs "~3.10.0" + commander "~2.20.0" + source-map "~0.6.1" -uglify-to-browserify@~1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz#6e0924d6bda6b5afe349e39a6d632850a0f882b7" +unicode-canonical-property-names-ecmascript@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz#2619800c4c825800efdd8343af7dd9933cbe2818" + integrity sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ== -uid-number@^0.0.6, uid-number@~0.0.6: - version "0.0.6" - resolved "https://registry.yarnpkg.com/uid-number/-/uid-number-0.0.6.tgz#0ea10e8035e8eb5b8e4449f06da1c730663baa81" +unicode-match-property-ecmascript@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz#8ed2a32569961bce9227d09cd3ffbb8fed5f020c" + integrity sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg== + dependencies: + unicode-canonical-property-names-ecmascript "^1.0.4" + unicode-property-aliases-ecmascript "^1.0.4" -ultron@~1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/ultron/-/ultron-1.1.1.tgz#9fe1536a10a664a65266a1e3ccf85fd36302bc9c" +unicode-match-property-value-ecmascript@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.1.0.tgz#5b4b426e08d13a80365e0d657ac7a6c1ec46a277" + integrity sha512-hDTHvaBk3RmFzvSl0UVrUmC3PuW9wKVnpoUDYH0JDkSIovzw+J5viQmeYHxVSBptubnr7PbH2e0fnpDRQnQl5g== -user-home@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/user-home/-/user-home-1.1.1.tgz#2b5be23a32b63a7c9deb8d0f28d485724a3df190" +unicode-property-aliases-ecmascript@^1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.0.5.tgz#a9cc6cc7ce63a0a3023fc99e341b94431d405a57" + integrity sha512-L5RAqCfXqAwR3RriF8pM0lU0w4Ryf/GgzONwi6KnL1taJQa7x1TCxdJnILX59WIGOwR57IVxn7Nej0fz1Ny6fw== + +union-value@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847" + integrity sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg== + dependencies: + arr-union "^3.1.0" + get-value "^2.0.6" + is-extendable "^0.1.1" + set-value "^2.0.1" + +unset-value@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" + integrity sha1-g3aHP30jNRef+x5vw6jtDfyKtVk= + dependencies: + has-value "^0.3.1" + isobject "^3.0.0" + +upath@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894" + integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg== + +uri-js@^4.2.2: + version "4.2.2" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0" + integrity sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ== + dependencies: + punycode "^2.1.0" + +urix@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" + integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI= + +use@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" + integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== util-deprecate@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= util.promisify@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.0.0.tgz#440f7165a459c9a16dc145eb8e72f35687097030" + integrity sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA== dependencies: define-properties "^1.1.2" object.getownpropertydescriptors "^2.0.3" -uuid@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.0.1.tgz#6544bba2dfda8c1cf17e629a3a305e2bb1fee6c1" - -uuid@^3.1.0: - version "3.2.1" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.2.1.tgz#12c528bb9d58d0b9265d9a2f6f0fe8be17ff1f14" - -v8flags@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/v8flags/-/v8flags-2.1.1.tgz#aab1a1fa30d45f88dd321148875ac02c0b55e5b4" - dependencies: - user-home "^1.1.1" +uuid@^3.3.2: + version "3.3.3" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.3.tgz#4568f0216e78760ee1dbf3a4d2cf53e224112866" + integrity sha512-pW0No1RGHgzlpHJO1nsVrHKpOEIxkGg1xB+v0ZmdNH5OAeAwzAVrCnI2/6Mtx+Uys6iaylxa+D3g4j63IKKjSQ== validate-npm-package-license@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz#2804babe712ad3379459acfbe24746ab2c303fbc" + version "3.0.4" + resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" + integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== dependencies: - spdx-correct "~1.0.0" - spdx-expression-parse "~1.0.0" + spdx-correct "^3.0.0" + spdx-expression-parse "^3.0.0" -verror@1.3.6: - version "1.3.6" - resolved "https://registry.yarnpkg.com/verror/-/verror-1.3.6.tgz#cff5df12946d297d2baaefaa2689e25be01c005c" +verror@1.10.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" + integrity sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA= dependencies: - extsprintf "1.0.2" + assert-plus "^1.0.0" + core-util-is "1.0.2" + extsprintf "^1.2.0" w3c-hr-time@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.1.tgz#82ac2bff63d950ea9e3189a58a65625fedf19045" + integrity sha1-gqwr/2PZUOqeMYmlimViX+3xkEU= dependencies: browser-process-hrtime "^0.1.2" -walker@~1.0.5: +walker@^1.0.7, walker@~1.0.5: version "1.0.7" resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.7.tgz#2f7f9b8fd10d677262b18a884e28d19618e028fb" + integrity sha1-L3+bj9ENZ3JisYqITijRlhjgKPs= dependencies: makeerror "1.0.x" -watch@~0.18.0: - version "0.18.0" - resolved "https://registry.yarnpkg.com/watch/-/watch-0.18.0.tgz#28095476c6df7c90c963138990c0a5423eb4b986" - dependencies: - exec-sh "^0.2.0" - minimist "^1.2.0" - -webidl-conversions@^4.0.1, webidl-conversions@^4.0.2: +webidl-conversions@^4.0.2: version "4.0.2" resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad" + integrity sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg== -whatwg-encoding@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.1.tgz#3c6c451a198ee7aec55b1ec61d0920c67801a5f4" +whatwg-encoding@^1.0.1, whatwg-encoding@^1.0.3: + version "1.0.5" + resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz#5abacf777c32166a51d085d6b4f3e7d27113ddb0" + integrity sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw== dependencies: - iconv-lite "0.4.13" + iconv-lite "0.4.24" -whatwg-encoding@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.3.tgz#57c235bc8657e914d24e1a397d3c82daee0a6ba3" +whatwg-mimetype@^2.1.0, whatwg-mimetype@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf" + integrity sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g== + +whatwg-url@^6.4.1: + version "6.5.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-6.5.0.tgz#f2df02bff176fd65070df74ad5ccbb5a199965a8" + integrity sha512-rhRZRqx/TLJQWUpQ6bmrt2UV4f0HCQ463yQuONJqC6fO2VoEb1pTYddbe59SkYq87aoM5A3bdhMZiUiVws+fzQ== dependencies: - iconv-lite "0.4.19" + lodash.sortby "^4.7.0" + tr46 "^1.0.1" + webidl-conversions "^4.0.2" -whatwg-url@^6.4.0: - version "6.4.0" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-6.4.0.tgz#08fdf2b9e872783a7a1f6216260a1d66cc722e08" +whatwg-url@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-7.0.0.tgz#fde926fa54a599f3adf82dff25a9f7be02dc6edd" + integrity sha512-37GeVSIJ3kn1JgKyjiYNmSLP1yzbpb29jdmwBSgkD9h40/hyrR/OifpVUndji3tmwGgD8qpw7iQu3RSbCrBpsQ== dependencies: lodash.sortby "^4.7.0" - tr46 "^1.0.0" - webidl-conversions "^4.0.1" + tr46 "^1.0.1" + webidl-conversions "^4.0.2" which-module@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" + integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= -which@^1.2.10, which@^1.2.12, which@^1.2.9, which@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/which/-/which-1.3.0.tgz#ff04bdfc010ee547d780bec38e1ac1c2777d253a" +which@^1.2.10, which@^1.2.9, which@^1.3.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" + integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== dependencies: isexe "^2.0.0" wide-align@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.0.tgz#40edde802a71fea1f070da3e62dcda2e7add96ad" + version "1.1.3" + resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457" + integrity sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA== dependencies: - string-width "^1.0.1" - -window-size@0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.0.tgz#5438cd2ea93b202efa3a19fe8887aee7c94f9c9d" - -wordwrap@0.0.2: - version "0.0.2" - resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.2.tgz#b79669bb42ecb409f83d583cad52ca17eaa1643f" + string-width "^1.0.2 || 2" wordwrap@~0.0.2: version "0.0.3" resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107" + integrity sha1-o9XabNXAvAAI03I0u68b7WMFkQc= wordwrap@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" + integrity sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus= -wrap-ansi@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85" +wrap-ansi@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-5.1.0.tgz#1fd1f67235d5b6d0fee781056001bfb694c03b09" + integrity sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q== dependencies: - string-width "^1.0.1" - strip-ansi "^3.0.1" + ansi-styles "^3.2.0" + string-width "^3.0.0" + strip-ansi "^5.0.0" wrappy@1: version "1.0.2" resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= -write-file-atomic@^2.1.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.3.0.tgz#1ff61575c2e2a4e8e510d6fa4e243cce183999ab" +write-file-atomic@2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.4.1.tgz#d0b05463c188ae804396fd5ab2a370062af87529" + integrity sha512-TGHFeZEZMnv+gBFRfjAcxL5bPHrsGKtnb4qsFAws7/vlh+QfwAaySIw4AXP9ZskTTh5GWu3FLuJhsWVdiJPGvg== dependencies: graceful-fs "^4.1.11" imurmurhash "^0.1.4" @@ -4371,61 +5325,57 @@ write-file-atomic@^2.1.0: write@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/write/-/write-0.2.1.tgz#5fc03828e264cea3fe91455476f7a3c566cb0757" + integrity sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c= dependencies: mkdirp "^0.5.1" -ws@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/ws/-/ws-4.0.0.tgz#bfe1da4c08eeb9780b986e0e4d10eccd7345999f" +ws@^5.2.0: + version "5.2.2" + resolved "https://registry.yarnpkg.com/ws/-/ws-5.2.2.tgz#dffef14866b8e8dc9133582514d1befaf96e980f" + integrity sha512-jaHFD6PFv6UgoIVda6qZllptQsMlDEJkTQcybzzXDYM1XO9Y8em691FGMPmM46WGyLU4z9KMgQN+qrux/nhlHA== dependencies: async-limiter "~1.0.0" - safe-buffer "~5.1.0" - ultron "~1.1.0" xml-name-validator@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a" + integrity sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw== -xtend@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af" - -y18n@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41" +y18n@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b" + integrity sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w== yallist@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" + integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI= -yargs-parser@^8.1.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-8.1.0.tgz#f1376a33b6629a5d063782944da732631e966950" +yallist@^3.0.0, yallist@^3.0.3: + version "3.1.0" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.0.tgz#906cc2100972dc2625ae78f566a2577230a1d6f7" + integrity sha512-6gpP93MR+VOOehKbCPchro3wFZNSNmek8A2kbkOAZLIZAYx1KP/zAqwO0sOHi3xJEb+UBz8NaYt/17UNit1Q9w== + +yargs-parser@^13.1.1: + version "13.1.1" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.1.tgz#d26058532aa06d365fe091f6a1fc06b2f7e5eca0" + integrity sha512-oVAVsHz6uFrg3XQheFII8ESO2ssAf9luWuAd6Wexsu4F3OtIW0o8IribPXYrD4WC24LWtPrJlGy87y5udK+dxQ== dependencies: - camelcase "^4.1.0" + camelcase "^5.0.0" + decamelize "^1.2.0" -yargs@^10.0.3: - version "10.1.2" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-10.1.2.tgz#454d074c2b16a51a43e2fb7807e4f9de69ccb5c5" +yargs@^13.3.0: + version "13.3.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.3.0.tgz#4c657a55e07e5f2cf947f8a366567c04a0dedc83" + integrity sha512-2eehun/8ALW8TLoIl7MVaRUrg+yCnenu8B4kBlRxj3GJGDKU1Og7sMXPNm1BYyM1DOJmTZ4YeN/Nwxv+8XJsUA== dependencies: - cliui "^4.0.0" - decamelize "^1.1.1" - find-up "^2.1.0" - get-caller-file "^1.0.1" - os-locale "^2.0.0" + cliui "^5.0.0" + find-up "^3.0.0" + get-caller-file "^2.0.1" require-directory "^2.1.1" - require-main-filename "^1.0.1" + require-main-filename "^2.0.0" set-blocking "^2.0.0" - string-width "^2.0.0" + string-width "^3.0.0" which-module "^2.0.0" - y18n "^3.2.1" - yargs-parser "^8.1.0" - -yargs@~3.10.0: - version "3.10.0" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-3.10.0.tgz#f7ee7bd857dd7c1d2d38c0e74efbd681d1431fd1" - dependencies: - camelcase "^1.0.2" - cliui "^2.1.0" - decamelize "^1.0.0" - window-size "0.1.0" + y18n "^4.0.0" + yargs-parser "^13.1.1" From c83d029fc5973b8e3b372ebe438ad68e4f596fea Mon Sep 17 00:00:00 2001 From: Jacob Parker Date: Mon, 30 Sep 2019 20:50:18 +0100 Subject: [PATCH 59/83] fix package json --- package.json | 4 ++-- yarn.lock | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package.json b/package.json index c398ab6..72af934 100644 --- a/package.json +++ b/package.json @@ -37,8 +37,8 @@ "testURL": "http://localhost" }, "devDependencies": { - "@babel/cli": "^6.26.0", - "@babel/preset-env": "^6.24.1", + "@babel/cli": "^7.6.2", + "@babel/preset-env": "^7.6.2", "eslint": "^4.17.0", "eslint-config-airbnb-base": "^12.1.0", "eslint-config-prettier": "^2.9.0", diff --git a/yarn.lock b/yarn.lock index 792a81c..a671395 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,7 +2,7 @@ # yarn lockfile v1 -"@babel/cli@^6.26.0": +"@babel/cli@^7.6.2": version "7.6.2" resolved "https://registry.yarnpkg.com/@babel/cli/-/cli-7.6.2.tgz#4ce8b5b4b2e4b4c1b7bd841cec62085e2dfc4465" integrity sha512-JDZ+T/br9pPfT2lmAMJypJDTTTHM9ePD/ED10TRjRzJVdEVy+JB3iRlhzYmTt5YkNgHvxWGlUVnLtdv6ruiDrQ== @@ -565,7 +565,7 @@ "@babel/helper-regex" "^7.4.4" regexpu-core "^4.6.0" -"@babel/preset-env@^6.24.1": +"@babel/preset-env@^7.6.2": version "7.6.2" resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.6.2.tgz#abbb3ed785c7fe4220d4c82a53621d71fc0c75d3" integrity sha512-Ru7+mfzy9M1/YTEtlDS8CD45jd22ngb9tXnn64DvQK3ooyqSw9K4K9DUWmYknTTVk4TqygL9dqCrZgm1HMea/Q== From 4a4b642b6b6673b9aedaa839296f73aa4da92817 Mon Sep 17 00:00:00 2001 From: Jacob Parker Date: Mon, 30 Sep 2019 20:57:33 +0100 Subject: [PATCH 60/83] fix typo --- src/devPropertiesWithoutUnitsRegExp.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/devPropertiesWithoutUnitsRegExp.js b/src/devPropertiesWithoutUnitsRegExp.js index aab05c7..9a65cd2 100644 --- a/src/devPropertiesWithoutUnitsRegExp.js +++ b/src/devPropertiesWithoutUnitsRegExp.js @@ -1,6 +1,6 @@ -let propertiesWitouthUnits +let propertiesWithoutUnits if (process.env.NODE_ENV !== 'production') { - propertiesWitouthUnits = [ + propertiesWithoutUnits = [ 'aspectRatio', 'elevation', 'flexGrow', @@ -12,8 +12,8 @@ if (process.env.NODE_ENV !== 'production') { } const devPropertiesWithUnitsRegExp = - propertiesWitouthUnits != null - ? new RegExp(propertiesWitouthUnits.join('|')) + propertiesWithoutUnits != null + ? new RegExp(propertiesWithoutUnits.join('|')) : null export default devPropertiesWithUnitsRegExp From 2567fde4f1360c7b4f0668de65271878c641d915 Mon Sep 17 00:00:00 2001 From: Jacob Parker Date: Mon, 30 Sep 2019 21:02:02 +0100 Subject: [PATCH 61/83] update regexp --- src/index.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/index.js b/src/index.js index 817c857..92dd845 100644 --- a/src/index.js +++ b/src/index.js @@ -6,11 +6,11 @@ import devPropertiesWithoutUnitsRegExp from './devPropertiesWithoutUnitsRegExp' import TokenStream from './TokenStream' // Note if this is wrong, you'll need to change tokenTypes.js too -const numberOrLengthRe = /^([+-]?(?:\d*\.)?\d+(?:[Ee][+-]?\d+)?)(?:px)?$/i +const numberOrLengthRe = /^([+-]?(?:\d*\.)?\d+(?:[Ee][+-]?\d+)?)(?:px)?$/ +const numberOnlyRe = /^[+-]?(?:\d*\.\d*|[1-9]\d*)(?:[Ee][+-]?\d+)?$/ const boolRe = /^true|false$/i const nullRe = /^null$/i const undefinedRe = /^undefined$/i -const numberOnlyRe = /^[1-9.-][\d.Ee+-]*$/ // Undocumented export export const transformRawValue = (propName, value) => { From f48d8669c99fcdc2b9f4e2b794e2fd749951335e Mon Sep 17 00:00:00 2001 From: Jacob Parker Date: Mon, 30 Sep 2019 21:10:25 +0100 Subject: [PATCH 62/83] Warn on extraeous units --- src/__tests__/index.js | 26 +++++++++++++++++++++++++- src/index.js | 11 +++++++---- 2 files changed, 32 insertions(+), 5 deletions(-) diff --git a/src/__tests__/index.js b/src/__tests__/index.js index 1529753..f85f416 100644 --- a/src/__tests__/index.js +++ b/src/__tests__/index.js @@ -1,7 +1,7 @@ import transformCss, { getStylesForProperty } from '..' it('transforms numbers', () => { - expect(transformCss([['zIndex', '0']])).toEqual({ zIndex: 0 }) + expect(transformCss([['z-index', '0']])).toEqual({ zIndex: 0 }) }) it('warns if missing units on unspecialized transform', () => { @@ -28,6 +28,30 @@ it('does not warn for unitless 0 length on unspecialized transform', () => { consoleSpy.mockRestore() }) +it('warns if adding etraneous units on unspecialized transform', () => { + const consoleSpy = jest + .spyOn(global.console, 'warn') + .mockImplementation(() => { + // Silence the warning from the test output + }) + + transformCss([['opacity', '1px']]) + expect(consoleSpy).toHaveBeenCalledWith( + 'Expected style "opacity: 1px" to be unitless' + ) + + consoleSpy.mockRestore() +}) + +it('does not warn for unitless 0 length on unitless transform', () => { + const consoleSpy = jest.spyOn(global.console, 'warn') + + transformCss([['opacity', '0']]) + expect(consoleSpy).not.toHaveBeenCalled() + + consoleSpy.mockRestore() +}) + it('allows pixels in unspecialized transform', () => { expect(transformCss([['top', '0px']])).toEqual({ top: 0 }) }) diff --git a/src/index.js b/src/index.js index 92dd845..ad2b472 100644 --- a/src/index.js +++ b/src/index.js @@ -15,13 +15,16 @@ const undefinedRe = /^undefined$/i // Undocumented export export const transformRawValue = (propName, value) => { if (process.env.NODE_ENV !== 'production') { - if ( - !devPropertiesWithoutUnitsRegExp.test(propName) && - numberOnlyRe.test(value) - ) { + const needsUnit = !devPropertiesWithoutUnitsRegExp.test(propName) + const isNumberWithoutUnit = numberOnlyRe.test(value) + if (needsUnit && isNumberWithoutUnit) { // eslint-disable-next-line no-console console.warn(`Expected style "${propName}: ${value}" to contain units`) } + if (!needsUnit && value !== '0' && !isNumberWithoutUnit) { + // eslint-disable-next-line no-console + console.warn(`Expected style "${propName}: ${value}" to be unitless`) + } } const numberMatch = value.match(numberOrLengthRe) From 143ced0143975bd5983c379e1255366e06ab7882 Mon Sep 17 00:00:00 2001 From: Jacob Parker Date: Mon, 30 Sep 2019 21:11:43 +0100 Subject: [PATCH 63/83] fix regexp --- src/index.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/index.js b/src/index.js index ad2b472..0afce0a 100644 --- a/src/index.js +++ b/src/index.js @@ -6,8 +6,8 @@ import devPropertiesWithoutUnitsRegExp from './devPropertiesWithoutUnitsRegExp' import TokenStream from './TokenStream' // Note if this is wrong, you'll need to change tokenTypes.js too -const numberOrLengthRe = /^([+-]?(?:\d*\.)?\d+(?:[Ee][+-]?\d+)?)(?:px)?$/ -const numberOnlyRe = /^[+-]?(?:\d*\.\d*|[1-9]\d*)(?:[Ee][+-]?\d+)?$/ +const numberOrLengthRe = /^([+-]?(?:\d*\.)?\d+(?:e[+-]?\d+)?)(?:px)?$/i +const numberOnlyRe = /^[+-]?(?:\d*\.\d*|[1-9]\d*)(?:e[+-]?\d+)?$/i const boolRe = /^true|false$/i const nullRe = /^null$/i const undefinedRe = /^undefined$/i From 12cff4d1c987db279c0c4aab4acc6d88c19096a0 Mon Sep 17 00:00:00 2001 From: Jacob Parker Date: Mon, 30 Sep 2019 21:15:24 +0100 Subject: [PATCH 64/83] fix uppercase units --- src/__tests__/index.js | 7 +++++++ src/tokenTypes.js | 10 +++++----- src/transforms/transform.js | 2 +- 3 files changed, 13 insertions(+), 6 deletions(-) diff --git a/src/__tests__/index.js b/src/__tests__/index.js index f85f416..dfb9d9e 100644 --- a/src/__tests__/index.js +++ b/src/__tests__/index.js @@ -127,6 +127,13 @@ it('allows negative values in transformed values', () => { }) }) +it('allows uppercase units', () => { + expect(transformCss([['top', '0PX']])).toEqual({ top: 0 }) + expect(transformCss([['transform', 'rotate(30DEG)']])).toEqual({ + transform: [{ rotate: '30deg' }], + }) +}) + it('allows percent values in transformed values', () => { expect(transformCss([['margin', '10%']])).toEqual({ marginTop: '10%', diff --git a/src/tokenTypes.js b/src/tokenTypes.js index 30e8850..8c06315 100644 --- a/src/tokenTypes.js +++ b/src/tokenTypes.js @@ -31,12 +31,12 @@ const noneRe = /^(none)$/i const autoRe = /^(auto)$/i const identRe = /(^-?[_a-z][_a-z0-9-]*$)/i // Note if these are wrong, you'll need to change index.js too -const numberRe = /^([+-]?(?:\d*\.)?\d+(?:[Ee][+-]?\d+)?)$/ +const numberRe = /^([+-]?(?:\d*\.)?\d+(?:e[+-]?\d+)?)$/i // Note lengthRe is sneaky: you can omit units for 0 -const lengthRe = /^(0$|(?:[+-]?(?:\d*\.)?\d+(?:[Ee][+-]?\d+)?)(?=px$))/ -const unsupportedUnitRe = /^([+-]?(?:\d*\.)?\d+(?:[Ee][+-]?\d+)?(ch|em|ex|rem|vh|vw|vmin|vmax|cm|mm|in|pc|pt))$/ -const angleRe = /^([+-]?(?:\d*\.)?\d+(?:[Ee][+-]?\d+)?(?:deg|rad))$/ -const percentRe = /^([+-]?(?:\d*\.)?\d+(?:[Ee][+-]?\d+)?%)$/ +const lengthRe = /^(0$|(?:[+-]?(?:\d*\.)?\d+(?:e[+-]?\d+)?)(?=px$))/i +const unsupportedUnitRe = /^([+-]?(?:\d*\.)?\d+(?:e[+-]?\d+)?(ch|em|ex|rem|vh|vw|vmin|vmax|cm|mm|in|pc|pt))$/i +const angleRe = /^([+-]?(?:\d*\.)?\d+(?:e[+-]?\d+)?(?:deg|rad))$/i +const percentRe = /^([+-]?(?:\d*\.)?\d+(?:e[+-]?\d+)?%)$/i const noopToken = predicate => node => (predicate(node) ? '' : null) diff --git a/src/transforms/transform.js b/src/transforms/transform.js index 269cb0e..947f315 100644 --- a/src/transforms/transform.js +++ b/src/transforms/transform.js @@ -5,7 +5,7 @@ const { SPACE, COMMA, LENGTH, NUMBER, ANGLE } = tokens const oneOfType = tokenType => functionStream => { const value = functionStream.expect(tokenType) functionStream.expectEmpty() - return value + return typeof value === 'string' ? value.toLowerCase() : value } const singleNumber = oneOfType(NUMBER) From 66d05291e5a2cd1f31f6501e299386de3cb20db0 Mon Sep 17 00:00:00 2001 From: Jacob Parker Date: Mon, 30 Sep 2019 21:20:28 +0100 Subject: [PATCH 65/83] optimize build output --- src/tokenTypes.js | 36 +++++++++++++++------------- src/transforms/border.js | 11 ++++++--- src/transforms/flex.js | 6 ++--- src/transforms/flexFlow.js | 4 +--- src/transforms/font.js | 10 ++++++-- src/transforms/fontFamily.js | 4 +--- src/transforms/index.js | 20 +++++++--------- src/transforms/placeContent.js | 4 +--- src/transforms/textDecoration.js | 4 +--- src/transforms/textDecorationLine.js | 4 +--- src/transforms/transform.js | 4 +--- src/transforms/util.js | 11 ++++++--- 12 files changed, 60 insertions(+), 58 deletions(-) diff --git a/src/tokenTypes.js b/src/tokenTypes.js index 8c06315..1d9ebe8 100644 --- a/src/tokenTypes.js +++ b/src/tokenTypes.js @@ -54,20 +54,22 @@ export const regExpToken = (regExp, transform = String) => node => { return value } -export const tokens = { - SPACE: noopToken(node => node.type === 'space'), - SLASH: noopToken(node => node.type === 'div' && node.value === '/'), - COMMA: noopToken(node => node.type === 'div' && node.value === ','), - WORD: valueForTypeToken('word'), - NONE: regExpToken(noneRe), - AUTO: regExpToken(autoRe), - NUMBER: regExpToken(numberRe, Number), - LENGTH: regExpToken(lengthRe, Number), - UNSUPPORTED_LENGTH_UNIT: regExpToken(unsupportedUnitRe), - ANGLE: regExpToken(angleRe), - PERCENT: regExpToken(percentRe), - IDENT: regExpToken(identRe), - STRING: matchString, - COLOR: matchColor, - LINE: regExpToken(/^(none|underline|line-through)$/i), -} +export const SPACE = noopToken(node => node.type === 'space') +export const SLASH = noopToken( + node => node.type === 'div' && node.value === '/' +) +export const COMMA = noopToken( + node => node.type === 'div' && node.value === ',' +) +export const WORD = valueForTypeToken('word') +export const NONE = regExpToken(noneRe) +export const AUTO = regExpToken(autoRe) +export const NUMBER = regExpToken(numberRe, Number) +export const LENGTH = regExpToken(lengthRe, Number) +export const UNSUPPORTED_LENGTH_UNIT = regExpToken(unsupportedUnitRe) +export const ANGLE = regExpToken(angleRe) +export const PERCENT = regExpToken(percentRe) +export const IDENT = regExpToken(identRe) +export const STRING = matchString +export const COLOR = matchColor +export const LINE = regExpToken(/^(none|underline|line-through)$/i) diff --git a/src/transforms/border.js b/src/transforms/border.js index b3685c9..d4c77b4 100644 --- a/src/transforms/border.js +++ b/src/transforms/border.js @@ -1,6 +1,11 @@ -import { regExpToken, tokens } from '../tokenTypes' - -const { NONE, COLOR, LENGTH, UNSUPPORTED_LENGTH_UNIT, SPACE } = tokens +import { + regExpToken, + NONE, + COLOR, + LENGTH, + UNSUPPORTED_LENGTH_UNIT, + SPACE, +} from '../tokenTypes' const BORDER_STYLE = regExpToken(/^(solid|dashed|dotted)$/) diff --git a/src/transforms/flex.js b/src/transforms/flex.js index 3d5965d..cf9bdbf 100644 --- a/src/transforms/flex.js +++ b/src/transforms/flex.js @@ -1,6 +1,4 @@ -import { tokens } from '../tokenTypes' - -const { +import { NONE, AUTO, NUMBER, @@ -8,7 +6,7 @@ const { UNSUPPORTED_LENGTH_UNIT, PERCENT, SPACE, -} = tokens +} from '../tokenTypes' const defaultFlexGrow = 1 const defaultFlexShrink = 1 diff --git a/src/transforms/flexFlow.js b/src/transforms/flexFlow.js index fccb2c1..0c41cf8 100644 --- a/src/transforms/flexFlow.js +++ b/src/transforms/flexFlow.js @@ -1,6 +1,4 @@ -import { regExpToken, tokens } from '../tokenTypes' - -const { SPACE } = tokens +import { regExpToken, SPACE } from '../tokenTypes' const FLEX_WRAP = regExpToken(/(nowrap|wrap|wrap-reverse)/) const FLEX_DIRECTION = regExpToken(/(row|row-reverse|column|column-reverse)/) diff --git a/src/transforms/font.js b/src/transforms/font.js index 9ce7d0e..c03e96e 100644 --- a/src/transforms/font.js +++ b/src/transforms/font.js @@ -1,7 +1,13 @@ import parseFontFamily from './fontFamily' -import { regExpToken, tokens } from '../tokenTypes' +import { + regExpToken, + SPACE, + LENGTH, + UNSUPPORTED_LENGTH_UNIT, + NUMBER, + SLASH, +} from '../tokenTypes' -const { SPACE, LENGTH, UNSUPPORTED_LENGTH_UNIT, NUMBER, SLASH } = tokens const NORMAL = regExpToken(/^(normal)$/) const STYLE = regExpToken(/^(italic)$/) const WEIGHT = regExpToken(/^([1-9]00|bold)$/) diff --git a/src/transforms/fontFamily.js b/src/transforms/fontFamily.js index 53b5bac..63a38d1 100644 --- a/src/transforms/fontFamily.js +++ b/src/transforms/fontFamily.js @@ -1,6 +1,4 @@ -import { tokens } from '../tokenTypes' - -const { SPACE, IDENT, STRING } = tokens +import { SPACE, IDENT, STRING } from '../tokenTypes' export default tokenStream => { let fontFamily diff --git a/src/transforms/index.js b/src/transforms/index.js index 6076ae5..66320ae 100644 --- a/src/transforms/index.js +++ b/src/transforms/index.js @@ -1,4 +1,12 @@ -import { tokens } from '../tokenTypes' +import { + IDENT, + WORD, + COLOR, + LENGTH, + UNSUPPORTED_LENGTH_UNIT, + PERCENT, + AUTO, +} from '../tokenTypes' import border from './border' import boxShadow from './boxShadow' import flex from './flex' @@ -12,16 +20,6 @@ import textShadow from './textShadow' import transform from './transform' import { directionFactory, parseShadowOffset } from './util' -const { - IDENT, - WORD, - COLOR, - LENGTH, - UNSUPPORTED_LENGTH_UNIT, - PERCENT, - AUTO, -} = tokens - const background = tokenStream => ({ backgroundColor: tokenStream.expect(COLOR), }) diff --git a/src/transforms/placeContent.js b/src/transforms/placeContent.js index a4c4693..6799da6 100644 --- a/src/transforms/placeContent.js +++ b/src/transforms/placeContent.js @@ -1,6 +1,4 @@ -import { regExpToken, tokens } from '../tokenTypes' - -const { SPACE } = tokens +import { regExpToken, SPACE } from '../tokenTypes' const ALIGN_CONTENT = regExpToken( /(flex-(?:start|end)|center|stretch|space-(?:between|around))/ diff --git a/src/transforms/textDecoration.js b/src/transforms/textDecoration.js index 17303d5..a91891b 100644 --- a/src/transforms/textDecoration.js +++ b/src/transforms/textDecoration.js @@ -1,6 +1,4 @@ -import { regExpToken, tokens } from '../tokenTypes' - -const { SPACE, LINE, COLOR } = tokens +import { regExpToken, SPACE, LINE, COLOR } from '../tokenTypes' const STYLE = regExpToken(/^(solid|double|dotted|dashed)$/) diff --git a/src/transforms/textDecorationLine.js b/src/transforms/textDecorationLine.js index a629869..0729a3e 100644 --- a/src/transforms/textDecorationLine.js +++ b/src/transforms/textDecorationLine.js @@ -1,6 +1,4 @@ -import { tokens } from '../tokenTypes' - -const { SPACE, LINE } = tokens +import { SPACE, LINE } from '../tokenTypes' export default tokenStream => { const lines = [] diff --git a/src/transforms/transform.js b/src/transforms/transform.js index 947f315..ded599f 100644 --- a/src/transforms/transform.js +++ b/src/transforms/transform.js @@ -1,6 +1,4 @@ -import { tokens } from '../tokenTypes' - -const { SPACE, COMMA, LENGTH, NUMBER, ANGLE } = tokens +import { SPACE, COMMA, LENGTH, NUMBER, ANGLE } from '../tokenTypes' const oneOfType = tokenType => functionStream => { const value = functionStream.expect(tokenType) diff --git a/src/transforms/util.js b/src/transforms/util.js index b7b616f..b195567 100644 --- a/src/transforms/util.js +++ b/src/transforms/util.js @@ -1,6 +1,11 @@ -import { tokens } from '../tokenTypes' - -const { LENGTH, UNSUPPORTED_LENGTH_UNIT, PERCENT, COLOR, SPACE, NONE } = tokens +import { + LENGTH, + UNSUPPORTED_LENGTH_UNIT, + PERCENT, + COLOR, + SPACE, + NONE, +} from '../tokenTypes' export const directionFactory = ({ types = [LENGTH, UNSUPPORTED_LENGTH_UNIT, PERCENT], From 4ae860f58ba7891e5682630d73894dda4874d217 Mon Sep 17 00:00:00 2001 From: Jacob Parker Date: Mon, 30 Sep 2019 21:20:58 +0100 Subject: [PATCH 66/83] fix test --- src/__tests__/placeContent.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/__tests__/placeContent.js b/src/__tests__/placeContent.js index 1901d3a..4589313 100644 --- a/src/__tests__/placeContent.js +++ b/src/__tests__/placeContent.js @@ -15,5 +15,5 @@ it('transforms place content with one value', () => { }) it('does not allow justify content without align content', () => { - expect(() => transformCss([['place-content', 'space-everly']])).toThrow() + expect(() => transformCss([['place-content', 'space-evenly']])).toThrow() }) From 1f6c2d6c2d53407e53d8c2f8ee1b3a482ee98078 Mon Sep 17 00:00:00 2001 From: Jacob Parker Date: Mon, 30 Sep 2019 21:23:58 +0100 Subject: [PATCH 67/83] better handling of uppercase angle untis --- src/tokenTypes.js | 2 +- src/transforms/transform.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/tokenTypes.js b/src/tokenTypes.js index 1d9ebe8..497001d 100644 --- a/src/tokenTypes.js +++ b/src/tokenTypes.js @@ -67,7 +67,7 @@ export const AUTO = regExpToken(autoRe) export const NUMBER = regExpToken(numberRe, Number) export const LENGTH = regExpToken(lengthRe, Number) export const UNSUPPORTED_LENGTH_UNIT = regExpToken(unsupportedUnitRe) -export const ANGLE = regExpToken(angleRe) +export const ANGLE = regExpToken(angleRe, angle => angle.toLowerCase()) export const PERCENT = regExpToken(percentRe) export const IDENT = regExpToken(identRe) export const STRING = matchString diff --git a/src/transforms/transform.js b/src/transforms/transform.js index ded599f..b3c7bc3 100644 --- a/src/transforms/transform.js +++ b/src/transforms/transform.js @@ -3,7 +3,7 @@ import { SPACE, COMMA, LENGTH, NUMBER, ANGLE } from '../tokenTypes' const oneOfType = tokenType => functionStream => { const value = functionStream.expect(tokenType) functionStream.expectEmpty() - return typeof value === 'string' ? value.toLowerCase() : value + return value } const singleNumber = oneOfType(NUMBER) From 88a72030cfb7923a4a89e8b52ef898022f8269f3 Mon Sep 17 00:00:00 2001 From: Jacob Parker Date: Mon, 30 Sep 2019 21:30:34 +0100 Subject: [PATCH 68/83] optimize build --- src/transforms/util.js | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/transforms/util.js b/src/transforms/util.js index b195567..b25d325 100644 --- a/src/transforms/util.js +++ b/src/transforms/util.js @@ -7,6 +7,10 @@ import { NONE, } from '../tokenTypes' +// This is the only (current) file where it would make sense to spread an array +// as function call arguments. We use .apply instead to reduce filesize +/* eslint-disable prefer-spread */ + export const directionFactory = ({ types = [LENGTH, UNSUPPORTED_LENGTH_UNIT, PERCENT], directions = ['Top', 'Right', 'Bottom', 'Left'], @@ -16,11 +20,11 @@ export const directionFactory = ({ const values = [] // borderWidth doesn't currently allow a percent value, but may do in the future - values.push(tokenStream.expect(...types)) + values.push(tokenStream.expect.apply(tokenStream, types)) while (values.length < 4 && tokenStream.hasTokens()) { tokenStream.expect(SPACE) - values.push(tokenStream.expect(...types)) + values.push(tokenStream.expect.apply(tokenStream, types)) } tokenStream.expectEmpty() From 31839b8eaa2e5f7c0e4b44f680ea8cfd6dc3b92f Mon Sep 17 00:00:00 2001 From: Jacob Parker Date: Mon, 30 Sep 2019 21:33:51 +0100 Subject: [PATCH 69/83] optimize build --- .babelrc | 2 +- src/transforms/util.js | 8 ++------ 2 files changed, 3 insertions(+), 7 deletions(-) diff --git a/.babelrc b/.babelrc index b7191e7..efedf0c 100644 --- a/.babelrc +++ b/.babelrc @@ -1 +1 @@ -{ "presets": ["@babel/preset-env"] } +{ "presets": [["@babel/preset-env", { "loose": true }]] } diff --git a/src/transforms/util.js b/src/transforms/util.js index b25d325..b195567 100644 --- a/src/transforms/util.js +++ b/src/transforms/util.js @@ -7,10 +7,6 @@ import { NONE, } from '../tokenTypes' -// This is the only (current) file where it would make sense to spread an array -// as function call arguments. We use .apply instead to reduce filesize -/* eslint-disable prefer-spread */ - export const directionFactory = ({ types = [LENGTH, UNSUPPORTED_LENGTH_UNIT, PERCENT], directions = ['Top', 'Right', 'Bottom', 'Left'], @@ -20,11 +16,11 @@ export const directionFactory = ({ const values = [] // borderWidth doesn't currently allow a percent value, but may do in the future - values.push(tokenStream.expect.apply(tokenStream, types)) + values.push(tokenStream.expect(...types)) while (values.length < 4 && tokenStream.hasTokens()) { tokenStream.expect(SPACE) - values.push(tokenStream.expect.apply(tokenStream, types)) + values.push(tokenStream.expect(...types)) } tokenStream.expectEmpty() From 734136a443c6e7f245162d05e9af49b98e9c95cd Mon Sep 17 00:00:00 2001 From: Jacob Parker Date: Thu, 3 Oct 2019 21:13:40 +0100 Subject: [PATCH 70/83] Remove unitless line height --- src/__tests__/font.js | 13 ++++--------- src/transforms/font.js | 7 +------ 2 files changed, 5 insertions(+), 15 deletions(-) diff --git a/src/__tests__/font.js b/src/__tests__/font.js index c68d690..916de19 100644 --- a/src/__tests__/font.js +++ b/src/__tests__/font.js @@ -97,15 +97,10 @@ it('omits line height if not specified', () => { }) }) -it('allows line height as multiple', () => { - expect(transformCss([['font', '16px/1.5 "Helvetica"']])).toEqual({ - fontFamily: 'Helvetica', - fontSize: 16, - fontWeight: 'normal', - fontStyle: 'normal', - fontVariant: [], - lineHeight: 24, - }) +it('does not allow line height as multiple', () => { + expect(() => { + transformCss([['font', '16px/1.5 "Helvetica"']]) + }).toThrow() }) it('transforms font without quotes', () => { diff --git a/src/transforms/font.js b/src/transforms/font.js index c03e96e..ae5e5dd 100644 --- a/src/transforms/font.js +++ b/src/transforms/font.js @@ -4,7 +4,6 @@ import { SPACE, LENGTH, UNSUPPORTED_LENGTH_UNIT, - NUMBER, SLASH, } from '../tokenTypes' @@ -46,11 +45,7 @@ export default tokenStream => { const fontSize = tokenStream.expect(LENGTH, UNSUPPORTED_LENGTH_UNIT) if (tokenStream.matches(SLASH)) { - if (tokenStream.matches(NUMBER)) { - lineHeight = fontSize * tokenStream.lastValue - } else { - lineHeight = tokenStream.expect(LENGTH, UNSUPPORTED_LENGTH_UNIT) - } + lineHeight = tokenStream.expect(LENGTH, UNSUPPORTED_LENGTH_UNIT) } tokenStream.expect(SPACE) From e81a3889c3c2bfe1297b61f4d4edf8377fc9925b Mon Sep 17 00:00:00 2001 From: Jacob Parker Date: Sat, 16 Nov 2019 17:31:44 +0000 Subject: [PATCH 71/83] Add aspect ratio support --- src/__tests__/aspectRatio.js | 23 +++++++++++++++++++++++ src/transforms/aspectRatio.js | 12 ++++++++++++ src/transforms/index.js | 2 ++ 3 files changed, 37 insertions(+) create mode 100644 src/__tests__/aspectRatio.js create mode 100644 src/transforms/aspectRatio.js diff --git a/src/__tests__/aspectRatio.js b/src/__tests__/aspectRatio.js new file mode 100644 index 0000000..eebd699 --- /dev/null +++ b/src/__tests__/aspectRatio.js @@ -0,0 +1,23 @@ +import transformCss from '..' + +it('handles regular aspect ratio values', () => { + expect(transformCss([['aspect-ratio', '1.5']])).toEqual({ + aspectRatio: 1.5, + }) +}) + +it('handles CSS-style aspect ratios', () => { + expect(transformCss([['aspect-ratio', '3 / 2']])).toEqual({ + aspectRatio: 1.5, + }) +}) + +it('handles CSS-style aspect ratios without spaces', () => { + expect(transformCss([['aspect-ratio', '3/2']])).toEqual({ + aspectRatio: 1.5, + }) +}) + +it('throws when omitting second value after slash', () => { + expect(() => transformCss([['aspect-ratio', '3/']])).toThrow() +}) diff --git a/src/transforms/aspectRatio.js b/src/transforms/aspectRatio.js new file mode 100644 index 0000000..67156e5 --- /dev/null +++ b/src/transforms/aspectRatio.js @@ -0,0 +1,12 @@ +import { NUMBER, SLASH } from '../tokenTypes' + +export default tokenStream => { + let aspectRatio = tokenStream.expect(NUMBER) + + if (tokenStream.hasTokens()) { + tokenStream.expect(SLASH) + aspectRatio /= tokenStream.expect(NUMBER) + } + + return { aspectRatio } +} diff --git a/src/transforms/index.js b/src/transforms/index.js index 66320ae..26765dd 100644 --- a/src/transforms/index.js +++ b/src/transforms/index.js @@ -7,6 +7,7 @@ import { PERCENT, AUTO, } from '../tokenTypes' +import aspectRatio from './aspectRatio' import border from './border' import boxShadow from './boxShadow' import flex from './flex' @@ -53,6 +54,7 @@ const textShadowOffset = tokenStream => ({ }) export default { + aspectRatio, background, border, borderColor, From 81795411ea7971d54739a5d11be86fe0a76adfb3 Mon Sep 17 00:00:00 2001 From: Rares Crisan Date: Thu, 12 Dec 2019 13:47:42 -0500 Subject: [PATCH 72/83] Add types to package.json --- package.json | 1 + 1 file changed, 1 insertion(+) diff --git a/package.json b/package.json index 72af934..7a51177 100644 --- a/package.json +++ b/package.json @@ -3,6 +3,7 @@ "version": "3.0.0", "description": "Convert CSS text to a React Native stylesheet object", "main": "index.js", + "types": "index.d.ts", "scripts": { "build": "rollup ./src/index.js -o index.js --f cjs && babel index.js -o index.js", "test": "jest", From 1918af8d12fba0ec87d0649014455112907d758b Mon Sep 17 00:00:00 2001 From: Jacob Parker Date: Thu, 20 Feb 2020 14:30:47 +0000 Subject: [PATCH 73/83] Update README.md --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 78850ab..5b60544 100644 --- a/README.md +++ b/README.md @@ -2,6 +2,8 @@ Converts CSS text to a React Native stylesheet object. +[Try it here](https://csstox.surge.sh) + ```css font-size: 18px; line-height: 24px; From ff892f69ce67b0209371f066570983b514df63d6 Mon Sep 17 00:00:00 2001 From: James George Date: Fri, 1 May 2020 23:18:33 +0530 Subject: [PATCH 74/83] fix: update incorrect result --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 5b60544..083dfc5 100644 --- a/README.md +++ b/README.md @@ -34,7 +34,7 @@ transform: translate(10px, 5px) scale(5); fontVariant: ['small-caps'], // Fixes backwards transform order transform: [ - { translateY: 10 }, + { translateY: 5 }, { translateX: 10 }, { scale: 5 }, ] From cf4bbcc312f95cc2a202e847e1ddd9d9f0ab6c3e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 17 Jul 2020 11:12:48 +0000 Subject: [PATCH 75/83] Bump lodash from 4.17.15 to 4.17.19 Bumps [lodash](https://github.com/lodash/lodash) from 4.17.15 to 4.17.19. - [Release notes](https://github.com/lodash/lodash/releases) - [Commits](https://github.com/lodash/lodash/compare/4.17.15...4.17.19) Signed-off-by: dependabot[bot] --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index a671395..47044f6 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3471,9 +3471,9 @@ lodash.sortby@^4.7.0: integrity sha1-7dFMgk4sycHgsKG0K7UhBRakJDg= lodash@^4.17.11, lodash@^4.17.13, lodash@^4.17.4, lodash@^4.3.0: - version "4.17.15" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548" - integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A== + version "4.17.19" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.19.tgz#e48ddedbe30b3321783c5b4301fbd353bc1e4a4b" + integrity sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ== log-symbols@^1.0.2: version "1.0.2" From 7897218ff4edd0b4630fef7a2bfde479b5633d23 Mon Sep 17 00:00:00 2001 From: Marcel Reis Date: Tue, 11 Oct 2022 00:55:57 +0200 Subject: [PATCH 76/83] chore(Readme.md): minor typo correction --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 083dfc5..5ad9890 100644 --- a/README.md +++ b/README.md @@ -86,7 +86,7 @@ transform([ ]); // => { fontFamily: 'Helvetica', ... } ``` -We don't provide a way to get these style tuples in this library, so you'll need to do that yourself. I expect most people will use postCSS or another CSS parser. You should try avoid getting these with `string.split`, as that has a lot of edge cases (colons and semi-colons apearing in comments etc.) +We don't provide a way to get these style tuples in this library, so you'll need to do that yourself. I expect most people will use postCSS or another CSS parser. You should try avoid getting these with `string.split`, as that has a lot of edge cases (colons and semi-colons appearing in comments etc.) For implementors, there is also a few extra APIs available. From 22d3223e1b1dad521048983680af2980912fc7bf Mon Sep 17 00:00:00 2001 From: Finn Pauls Date: Fri, 6 Jan 2023 15:02:47 +0100 Subject: [PATCH 77/83] Allow multiple font variant values to be used, fixes #175 --- src/__tests__/fontVariant.js | 8 ++++++++ src/transforms/fontVariant.js | 14 ++++++++++++++ src/transforms/index.js | 12 +++++------- 3 files changed, 27 insertions(+), 7 deletions(-) create mode 100644 src/transforms/fontVariant.js diff --git a/src/__tests__/fontVariant.js b/src/__tests__/fontVariant.js index 21f4cb7..7749dfa 100644 --- a/src/__tests__/fontVariant.js +++ b/src/__tests__/fontVariant.js @@ -5,3 +5,11 @@ it('transforms font variant as an array', () => { fontVariant: ['tabular-nums'], }) }) + +it('transforms multiple font variant as an array', () => { + expect( + transformCss([['font-variant', 'tabular-nums oldstyle-nums']]) + ).toEqual({ + fontVariant: ['tabular-nums', 'oldstyle-nums'], + }) +}) diff --git a/src/transforms/fontVariant.js b/src/transforms/fontVariant.js new file mode 100644 index 0000000..244db42 --- /dev/null +++ b/src/transforms/fontVariant.js @@ -0,0 +1,14 @@ +import { SPACE, IDENT } from '../tokenTypes' + +export default tokenStream => { + const values = [tokenStream.expect(IDENT)] + + while (tokenStream.hasTokens()) { + tokenStream.expect(SPACE) + values.push(tokenStream.expect(IDENT)) + } + + return { + fontVariant: values, + } +} diff --git a/src/transforms/index.js b/src/transforms/index.js index 66320ae..4849064 100644 --- a/src/transforms/index.js +++ b/src/transforms/index.js @@ -1,11 +1,10 @@ import { - IDENT, - WORD, + AUTO, COLOR, LENGTH, - UNSUPPORTED_LENGTH_UNIT, PERCENT, - AUTO, + UNSUPPORTED_LENGTH_UNIT, + WORD, } from '../tokenTypes' import border from './border' import boxShadow from './boxShadow' @@ -13,6 +12,7 @@ import flex from './flex' import flexFlow from './flexFlow' import font from './font' import fontFamily from './fontFamily' +import fontVariant from './fontVariant' import placeContent from './placeContent' import textDecoration from './textDecoration' import textDecorationLine from './textDecorationLine' @@ -39,9 +39,7 @@ const margin = directionFactory({ prefix: 'margin', }) const padding = directionFactory({ prefix: 'padding' }) -const fontVariant = tokenStream => ({ - fontVariant: [tokenStream.expect(IDENT)], -}) + const fontWeight = tokenStream => ({ fontWeight: tokenStream.expect(WORD), // Also match numbers as strings }) From a75e537200c72982b6f5bb9541875e762edf3608 Mon Sep 17 00:00:00 2001 From: Jacob Parker Date: Thu, 12 Jan 2023 09:54:12 +0000 Subject: [PATCH 78/83] Bump version --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 7a51177..45f4361 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "css-to-react-native", - "version": "3.0.0", + "version": "3.1.0", "description": "Convert CSS text to a React Native stylesheet object", "main": "index.js", "types": "index.d.ts", From 62ecdc7f85cfbbf2aac5de253b062fbe81fd7594 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 12 Jan 2023 11:17:40 +0000 Subject: [PATCH 79/83] Bump ws from 5.2.2 to 5.2.3 Bumps [ws](https://github.com/websockets/ws) from 5.2.2 to 5.2.3. - [Release notes](https://github.com/websockets/ws/releases) - [Commits](https://github.com/websockets/ws/compare/5.2.2...5.2.3) --- updated-dependencies: - dependency-name: ws dependency-type: indirect ... Signed-off-by: dependabot[bot] --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 47044f6..e2b1ca9 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5330,9 +5330,9 @@ write@^0.2.1: mkdirp "^0.5.1" ws@^5.2.0: - version "5.2.2" - resolved "https://registry.yarnpkg.com/ws/-/ws-5.2.2.tgz#dffef14866b8e8dc9133582514d1befaf96e980f" - integrity sha512-jaHFD6PFv6UgoIVda6qZllptQsMlDEJkTQcybzzXDYM1XO9Y8em691FGMPmM46WGyLU4z9KMgQN+qrux/nhlHA== + version "5.2.3" + resolved "https://registry.yarnpkg.com/ws/-/ws-5.2.3.tgz#05541053414921bc29c63bee14b8b0dd50b07b3d" + integrity sha512-jZArVERrMsKUatIdnLzqvcfydI85dvd/Fp1u/VOpfdDWQ4c9qWXe+VIeAbQ5FrDwciAkr+lzofXLz3Kuf26AOA== dependencies: async-limiter "~1.0.0" From f36c4ef4d0d1de555dcc6cdb1fb551be73632aab Mon Sep 17 00:00:00 2001 From: Jacob Parker Date: Tue, 14 Feb 2023 11:44:45 +0000 Subject: [PATCH 80/83] Update package.json Fixes #151 --- package.json | 1 + 1 file changed, 1 insertion(+) diff --git a/package.json b/package.json index 45f4361..b4074fc 100644 --- a/package.json +++ b/package.json @@ -15,6 +15,7 @@ }, "files": [ "index.js", + "index.d.ts", "src" ], "repository": { From 9b0612094f4af293183824801524ea5400322067 Mon Sep 17 00:00:00 2001 From: Jacob Parker Date: Tue, 14 Feb 2023 22:20:24 +0000 Subject: [PATCH 81/83] Bump version --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index b4074fc..d26e37c 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "css-to-react-native", - "version": "3.1.0", + "version": "3.2.0", "description": "Convert CSS text to a React Native stylesheet object", "main": "index.js", "types": "index.d.ts", From de56f5953719df6e36f70b827f51216d574e7ef2 Mon Sep 17 00:00:00 2001 From: Krister Kari Date: Sun, 25 Aug 2024 10:03:43 +0300 Subject: [PATCH 82/83] translate: support percentage values --- src/__tests__/transform.js | 14 ++++++++++++++ src/transforms/transform.js | 30 +++++++++++++++--------------- 2 files changed, 29 insertions(+), 15 deletions(-) diff --git a/src/__tests__/transform.js b/src/__tests__/transform.js index 71b8a79..6930546 100644 --- a/src/__tests__/transform.js +++ b/src/__tests__/transform.js @@ -12,6 +12,20 @@ it('transforms a single transform value with string', () => { }) }) +it('transforms a single transform value with percentage', () => { + expect(transformCss([['transform', 'translate(100%, 100%)']])).toEqual({ + transform: [{ translateY: '100%' }, { translateX: '100%' }], + }) +}) + +it('transforms multiple transform values with percentage', () => { + expect( + transformCss([['transform', 'translateY(100%) translateX(100%)']]) + ).toEqual({ + transform: [{ translateX: '100%' }, { translateY: '100%' }], + }) +}) + it('transforms multiple transform values', () => { expect(transformCss([['transform', 'scaleX(5) skewX(1deg)']])).toEqual({ transform: [{ skewX: '1deg' }, { scaleX: 5 }], diff --git a/src/transforms/transform.js b/src/transforms/transform.js index b3c7bc3..c39719b 100644 --- a/src/transforms/transform.js +++ b/src/transforms/transform.js @@ -1,24 +1,24 @@ -import { SPACE, COMMA, LENGTH, NUMBER, ANGLE } from '../tokenTypes' +import { SPACE, COMMA, LENGTH, NUMBER, ANGLE, PERCENT } from '../tokenTypes' -const oneOfType = tokenType => functionStream => { - const value = functionStream.expect(tokenType) +const oneOfTypes = tokenTypes => functionStream => { + const value = functionStream.expect(...tokenTypes) functionStream.expectEmpty() return value } -const singleNumber = oneOfType(NUMBER) -const singleLength = oneOfType(LENGTH) -const singleAngle = oneOfType(ANGLE) -const xyTransformFactory = tokenType => ( +const singleNumber = oneOfTypes([NUMBER]) +const singleLengthOrPercent = oneOfTypes([LENGTH, PERCENT]) +const singleAngle = oneOfTypes([ANGLE]) +const xyTransformFactory = tokenTypes => ( key, valueIfOmitted ) => functionStream => { - const x = functionStream.expect(tokenType) + const x = functionStream.expect(...tokenTypes) let y if (functionStream.hasTokens()) { functionStream.expect(COMMA) - y = functionStream.expect(tokenType) + y = functionStream.expect(...tokenTypes) } else if (valueIfOmitted !== undefined) { y = valueIfOmitted } else { @@ -31,18 +31,18 @@ const xyTransformFactory = tokenType => ( return [{ [`${key}Y`]: y }, { [`${key}X`]: x }] } -const xyNumber = xyTransformFactory(NUMBER) -const xyLength = xyTransformFactory(LENGTH) -const xyAngle = xyTransformFactory(ANGLE) +const xyNumber = xyTransformFactory([NUMBER]) +const xyLengthOrPercent = xyTransformFactory([LENGTH, PERCENT]) +const xyAngle = xyTransformFactory([ANGLE]) const partTransforms = { perspective: singleNumber, scale: xyNumber('scale'), scaleX: singleNumber, scaleY: singleNumber, - translate: xyLength('translate', 0), - translateX: singleLength, - translateY: singleLength, + translate: xyLengthOrPercent('translate', 0), + translateX: singleLengthOrPercent, + translateY: singleLengthOrPercent, rotate: singleAngle, rotateX: singleAngle, rotateY: singleAngle, From 24109805ff1a5462f7425528c3c08262564b7265 Mon Sep 17 00:00:00 2001 From: lynn Date: Fri, 16 May 2025 22:06:03 +0800 Subject: [PATCH 83/83] feat: support more degree --- src/tokenTypes.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/tokenTypes.js b/src/tokenTypes.js index 497001d..33e5b89 100644 --- a/src/tokenTypes.js +++ b/src/tokenTypes.js @@ -35,7 +35,7 @@ const numberRe = /^([+-]?(?:\d*\.)?\d+(?:e[+-]?\d+)?)$/i // Note lengthRe is sneaky: you can omit units for 0 const lengthRe = /^(0$|(?:[+-]?(?:\d*\.)?\d+(?:e[+-]?\d+)?)(?=px$))/i const unsupportedUnitRe = /^([+-]?(?:\d*\.)?\d+(?:e[+-]?\d+)?(ch|em|ex|rem|vh|vw|vmin|vmax|cm|mm|in|pc|pt))$/i -const angleRe = /^([+-]?(?:\d*\.)?\d+(?:e[+-]?\d+)?(?:deg|rad))$/i +const angleRe = /^([+-]?(?:\d*\.)?\d+(?:e[+-]?\d+)?(?:deg|rad|grad|turn))$/i const percentRe = /^([+-]?(?:\d*\.)?\d+(?:e[+-]?\d+)?%)$/i const noopToken = predicate => node => (predicate(node) ? '' : null)