diff --git a/.editorconfig b/.editorconfig index 5d12634..2076b8d 100755 --- a/.editorconfig +++ b/.editorconfig @@ -1,7 +1,11 @@ # editorconfig.org root = true -[*] +[Makefile] +indent_style = tab +indent_size = 2 + +[*.ts, *.tsx] indent_style = space indent_size = 2 end_of_line = lf diff --git a/.gitignore b/.gitignore index 6605dab..92fa58f 100644 --- a/.gitignore +++ b/.gitignore @@ -50,4 +50,5 @@ project/plugins/project/ .lib/ # End of https://www.gitignore.io/api/sbt -examples +/examples +/docs/**/example.js diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..0fb15c9 --- /dev/null +++ b/Makefile @@ -0,0 +1,41 @@ +docs = ./docs/**/* +browserify = ./node_modules/.bin/browserify +watchify = ./node_modules/.bin/watchify +uglify = ./node_modules/.bin/uglifyjs + +lib/%.js: src/%.ts + tsc + +all: docs/src/main/tut/examples/example.js browser + +test: lib/**/*.js test/**/*.js + yarn test + +docs/src/main/tut/examples/example.js: docs/src/main/tut/examples/example.tsx + $(browserify) -p [tsify -p tsconfig.examples.json] docs/src/main/tut/examples/example.tsx -o docs/src/main/tut/examples/example.js + +watch/example: docs/src/main/tut/examples/example.tsx + $(watchify) -p [tsify -p tsconfig.examples.json] -t envify docs/src/main/tut/examples/example.tsx -dv -o docs/src/main/tut/examples/example.js + +browser: dist/xreact.min.js dist/xreact-most.min.js dist/xreact-rx.min.js + +dist/xreact.js: lib/index.js + env NODE_ENV=production $(browserify) -t browserify-shim -t envify -x ./lib/xs lib/index.js -s xreact -o $@ + +dist/xreact-most.js: lib/xs/most.js + env NODE_ENV=production $(browserify) -t browserify-shim -t envify -r ./lib/xs lib/xs/most.js -o $@ + +dist/xreact-rx.js: lib/xs/rx.js + env NODE_ENV=production $(browserify) -t browserify-shim -t envify -r ./lib/xs lib/xs/rx.js -o $@ + +dist/%.min.js: dist/%.js + env NODE_ENV=production $(uglify) $(basename $(basename $@)).js -o $@ + +docs: $(docs) + sbt makeMicrosite + +docs/publish: $(docs) + sbt "project docs" publishMicrosite + +clean: + rm -rf lib docs/src/main/tut/examples/example.js dist/* diff --git a/circle.yml b/circle.yml index 6d8a8e5..a4c596d 100644 --- a/circle.yml +++ b/circle.yml @@ -14,8 +14,8 @@ dependencies: - ~/.cache/yarn test: override: - - yarn build - - yarn test + - make test + - make all post: - bash <(curl -s https://codecov.io/bash) deployment: diff --git a/docs/src/main/tut/Examples.md b/docs/src/main/tut/Examples.md index 2ee2fa6..335a616 100644 --- a/docs/src/main/tut/Examples.md +++ b/docs/src/main/tut/Examples.md @@ -6,6 +6,7 @@ position: 4 --- # Counter + ## BMI Calculator diff --git a/docs/src/main/tut/examples/example.tsx b/docs/src/main/tut/examples/example.tsx new file mode 100644 index 0000000..f5df606 --- /dev/null +++ b/docs/src/main/tut/examples/example.tsx @@ -0,0 +1,157 @@ +import * as React from 'react'; +import { render } from 'react-dom'; +import '../../../../../src/xs/rx' +import { pure, lift2, X, xinput, fromEvent, traverse, fold } from '../../../../../src' +function xmount(component, dom) { render(React.createFactory(X)({}, component), dom) } + +let mult = (x:number,y: number) => x * y +let Xeg1 = lift2(mult)(pure(6), pure(5)) + +let ViewEg1 = props =>

{props.product}

+ +let Eg1 = Xeg1.map(a=>({product: a})).apply(ViewEg1) + +xmount(, document.getElementById('eg1') ) + +function strToInt(x) {return ~~x} + +let Xeg2 = lift2(mult)( + fromEvent('change', 'n1', '5').map(strToInt), + fromEvent('change', 'n2', '6').map(strToInt) +) + +let ViewEg2 = props =>
+

+

+

{props.product}

+
+ +let Eg2 = Xeg2.map(a=>({product: a})).apply(ViewEg2) + +xmount(, document.getElementById('eg2') ) + +let Xeg3 = fromEvent('change', 'firstName', 'Jichao') + .concat(pure(' ')) + .concat(fromEvent('change', 'lastName', 'Ouyang')) + +let ViewEg3 = props =>
+

+

+

{props.semigroup}

+
+ +let Eg3 = Xeg3.map(a=>({semigroup: a})).apply(ViewEg3) + +xmount(, document.getElementById('eg3') ) + +function sum(list){ + return list.reduce((acc,x)=> acc+x, 0) +} +let list = ['1', '2', '3', '4', '5', '6', '7'] +let Xeg4 = traverse( + (defaultVal, index)=>(fromEvent('change', 'traverse'+index, defaultVal)), + list +).map(xs=>xs.map(strToInt)) + .map(sum) + +let ViewEg4 = props =>
+{list.map((item, index) => (

+ +

)) +} +

{props.sum}

+
+ +let Eg4 = Xeg4.map(a=>({sum: a})).apply(ViewEg4) + +xmount(, document.getElementById('eg4') ) + +function bmiCalc(weight, height) { + return { + weight: weight, + height: height, + result:fetch(`https://gist.github.com.ru/jcouyang/edc3d175769e893b39e6c5be12a8526f?height=${height}&weight=${weight}`) + .then(resp => resp.json()) + .then(json => json.result) + } +} + +let Xeg5 = lift2(bmiCalc)( + fromEvent('change', 'weight', '70'), + fromEvent('change', 'height', '175') +) + + let ViewEg5 = props => ( +
+ + +

HEALTH: {props.health}

+

BMI: {props.bmi}

+
+ ) + + let Eg5 = Xeg5.apply(ViewEg5) + +xmount(, document.getElementById('eg5') ) + +let Xeg6 = fold( + (acc:number,i: number) => acc+i, + 0, + fromEvent('click', 'increment').map(x=>1) +) + +let ViewEg6 = props =>

+ {props.count} + props.actions.fromEvent(e)} /> +

+ +let Eg6 = Xeg6.map(a=>({count: a})).apply(ViewEg6) + +xmount(, document.getElementById('eg6') ) + +let Xeg7 = fold( + (acc:number,i: number) => acc+i, + 0, + fromEvent('click', 'increment').map(x=>1) + .merge( + fromEvent('click', 'decrement').map(x=>-1) + ) +) + +let ViewEg7 = props =>

+ props.actions.fromEvent(e)} /> + {props.count} + props.actions.fromEvent(e)} /> +

+ +let Eg7 = Xeg7.map(a=>({count: a})).apply(ViewEg7) + +xmount(, document.getElementById('eg7') ) + +const actions = ['-1', '+1', 'reset'] +let Xeg8 = fold( + (acc, i) => { + switch(i) { + case '-1': return acc-1 + case '+1': return acc+1 + case 'reset': return 0 + default: acc + } + }, + 0, + actions.map((action)=>fromEvent('click', action)) + .reduce((acc,a)=>acc.merge(a))) + +let ViewEg8 = props =>

+ {props.count} + {actions.map(action=> + props.actions.fromEvent(e)} />)} +

+ +let Eg8 = Xeg8.map(a=>({count: a})).apply(ViewEg8) + +xmount(, document.getElementById('eg8') ) diff --git a/docs/src/main/tut/examples/index.html b/docs/src/main/tut/examples/index.html new file mode 100644 index 0000000..68c5c80 --- /dev/null +++ b/docs/src/main/tut/examples/index.html @@ -0,0 +1,515 @@ + + + + + + + +Examples of xReact Fantasy + + + + + + + +
+

Examples of xReact Fantasy

+ + +
+

Example 0: How to use xReact Fantasy

+
+
+
import * as React from 'react';
+import { render } from 'react-dom';
+import '../../../../../src/xs/rx'
+import { pure, lift2, X, xinput, fromEvent, traverse, fold } from '../../../../../src'
+function xmount(component, dom) { render(React.createFactory(X)({}, component), dom) }
+
+
+
+
+ +
+

Example 1: Two number multiply

+
+

+A multiply function can be simply lifted to be a function that works with xReact FantasyX +

+
+
let mult = (x:number,y: number) => x * y
+let Xeg1 = lift2(mult)(pure(6), pure(5))
+
+
+ +

+A very basic Stateless Component to display it. +

+
+
let ViewEg1 = props => <p className="result">{props.product}</p>
+
+
+ +
+
let Eg1 = Xeg1.map(a=>({product: a})).apply(ViewEg1)
+
+
+ +
+
xmount(<Eg1/>, document.getElementById('eg1') )
+
+
+ +

+
+
+ + +
+

Example 2: Two Inputs

+
+
+
function strToInt(x) {return ~~x}
+
+let Xeg2 = lift2(mult)(
+  fromEvent('change', 'n1', '5').map(strToInt),
+  fromEvent('change', 'n2', '6').map(strToInt)
+)
+
+let ViewEg2 = props => <section>
+  <p><input type="number" name="n1" onChange={props.actions.fromEvent} defaultValue="5"/></p>
+  <p><input type="number" name="n2" onChange={props.actions.fromEvent} defaultValue="6"/></p>
+  <p><span className="result">{props.product}</span></p>
+</section>
+
+let Eg2 = Xeg2.map(a=>({product: a})).apply(ViewEg2)
+
+
+ +

+
+
+ +
+

Example 3: Semigroup

+
+
+
let Xeg3 = fromEvent('change', 'firstName', 'Jichao')
+    .concat(pure(' '))
+    .concat(fromEvent('change', 'lastName', 'Ouyang'))
+
+let ViewEg3 = props => <section>
+  <p><input type="text" name="firstName" onChange={props.actions.fromEvent} defaultValue="Jichao" /></p>
+  <p><input type="text" name="lastName" onChange={props.actions.fromEvent} defaultValue="Ouyang"/></p>
+  <p><span className="result">{props.semigroup}</span></p>
+</section>
+
+let Eg3 = Xeg3.map(a=>({semigroup: a})).apply(ViewEg3)
+
+
+ +

+
+
+ +
+

Example 4: Traverse

+
+
+
function sum(list){
+  return list.reduce((acc,x)=> acc+x, 0)
+}
+let list = ['1', '2', '3', '4', '5', '6', '7']
+let Xeg4 = traverse(
+  (defaultVal, index)=>(fromEvent('change', 'traverse'+index, defaultVal)),
+  list
+).map(xs=>xs.map(strToInt))
+    .map(sum)
+
+let ViewEg4 = props => <section>
+{list.map((item, index) => (<p>
+<input key={index} type="number" name={"traverse" + index} onChange={props.actions.fromEvent} defaultValue={item} />
+</p>))
+}
+  <p><span className="result">{props.sum}</span></p>
+</section>
+
+let Eg4 = Xeg4.map(a=>({sum: a})).apply(ViewEg4)
+
+
+ +

+
+
+ + +
+

Example 5: Asynchronous

+
+
+
function bmiCalc(weight, height) {
+  return {
+    weight: weight,
+    height: height,
+    result:fetch(`https://gist.github.com.ru/jcouyang/edc3d175769e893b39e6c5be12a8526f?height=${height}&weight=${weight}`)
+      .then(resp => resp.json())
+      .then(json => json.result)
+  }
+}
+
+let Xeg5 = lift2(bmiCalc)(
+  fromEvent('change', 'weight', '70'),
+  fromEvent('change', 'height', '175')
+)
+
+ let ViewEg5 = props => (
+   <div>
+     <label>Height: {props.height} cm
+       <input type="range" name="height" onChange={props.actions.fromEvent} min="150" max="200" defaultValue={props.height} />
+     </label>
+     <label>Weight: {props.weight} kg
+       <input type="range" name="weight" onChange={props.actions.fromEvent} min="40" max="100" defaultValue={props.weight} />
+     </label>
+     <p>HEALTH: <span>{props.health}</span></p>
+     <p>BMI: <span className="result">{props.bmi}</span></p>
+   </div>
+ )
+
+ let Eg5 = Xeg5.apply(ViewEg5)
+
+
+ +

+
+
+ +
+

Example 6: Fold

+
+
+
let Xeg6 = fold(
+  (acc:number,i: number) => acc+i,
+  0,
+  fromEvent('click', 'increment').map(x=>1)
+)
+
+let ViewEg6 = props => <p>
+  <span className="result">{props.count}</span>
+  <input type="button" name="increment" value="+1" onClick={e=>props.actions.fromEvent(e)} />
+</p>
+
+let Eg6 = Xeg6.map(a=>({count: a})).apply(ViewEg6)
+
+
+ +

+
+
+ + + +
+

Example 7: Merge

+
+
+
let Xeg7 = fold(
+  (acc:number,i: number) => acc+i,
+  0,
+  fromEvent('click', 'increment').map(x=>1)
+    .merge(
+      fromEvent('click', 'decrement').map(x=>-1)
+    )
+)
+
+let ViewEg7 = props => <p>
+    <input type="button" name="decrement" value="-" onClick={e=>props.actions.fromEvent(e)} />
+    <span className="result">{props.count}</span>
+    <input type="button" name="increment" value="+" onClick={e=>props.actions.fromEvent(e)} />
+</p>
+
+let Eg7 = Xeg7.map(a=>({count: a})).apply(ViewEg7)
+
+
+ +

+
+
+ + +
+

Example 8: Fold multiple buttons

+
+
+
const actions = ['-1', '+1', 'reset']
+let Xeg8 = fold(
+  (acc, i) => {
+    switch(i) {
+    case '-1': return acc-1
+    case '+1': return acc+1
+    case 'reset': return 0
+    default: acc
+    }
+  },
+  0,
+  actions.map((action)=>fromEvent('click', action))
+    .reduce((acc,a)=>acc.merge(a)))
+
+let ViewEg8 = props => <p>
+  <span className="result">{props.count}</span>
+  {actions.map(action=>
+    <input type="button" name={action} value={action} onClick={e=>props.actions.fromEvent(e)} />)}
+</p>
+
+let Eg8 = Xeg8.map(a=>({count: a})).apply(ViewEg8)
+
+xmount(<Eg8/>, document.getElementById('eg8') )
+
+
+ +

+ + + + +
+
+
+
+

Date: 2017-09-09 Sat 00:00

+

Author: 欧阳继超

+

Created: 2017-09-24 Sun 10:46

+

+
+ + diff --git a/docs/src/main/tut/examples/index.md b/docs/src/main/tut/examples/index.md new file mode 100644 index 0000000..4d6dfc9 --- /dev/null +++ b/docs/src/main/tut/examples/index.md @@ -0,0 +1,196 @@ +--- +layout: docs +title: Examples +section: en +position: 6 +--- + +- [import xreact](#org202661d) +- [Example 1: Two number multiply](#orgd564fbd) +- [Example 2: Two Inputs](#org5677d81) +- [Example 3: Semigroup](#org863e564) +- [Example 4: Traverse](#orgfd54baa) +- [Example 5: Asynchronous](#orgd82b260) +- [Example 6: Fold](#org7a7a3b6) +- [Example 7: Merge](#orga97410a) +- [Example 8: Fold multiple buttons](#orgdd7473f) +- [Example 13: Adding items to a list](#orgb3b8b4e) + + + + + +# import xreact + +```tsx +import {pure, lift2, X, xinput, fromEvent, traverse, fold} from '../src' +import * as React from 'react'; +import { render } from 'react-dom'; +import * as RX from '../src/xs/rx' +function xmount(component, dom) {render(React.createFactory(X)({ x: RX }, component), dom)} +``` + + + + +# Example 1: Two number multiply + +```tsx +let Xeg1 = lift2((x:number,y: number) => x * y)(pure(6), pure(5)) +let ViewEg1 = props =>

{props.product}

+let Eg1 = Xeg1.map(a=>({product: a})).apply(ViewEg1) +``` + +

+ + + + +# Example 2: Two Inputs + +```tsx +let Xeg2 = lift2((x:number,y: number) => x * y)(fromEvent('change', 'n1', '5').map(x=>~~x), fromEvent('change', 'n2', '6').map(x=>~~x)) +let ViewEg2 = props =>
+

+

+

{props.product}

+
+let Eg2 = Xeg2.map(a=>({product: a})).apply(ViewEg2) +``` + +

+ + + + +# Example 3: Semigroup + +```tsx +let Xeg3 = fromEvent('change', 'string1', 'Jichao') +.concat(pure(' ')) +.concat(fromEvent('change', 'string2', 'Ouyang')) + +let ViewEg3 = props =>
+

+

+

{props.semigroup}

+
+ +let Eg3 = Xeg3.map(a=>({semigroup: a})).apply(ViewEg3) +``` + +

+ + + + +# Example 4: Traverse + +```tsx +function sum(list){ + return list.reduce((acc,x)=> acc+x, 0) +} +let list = ['1', '2', '3', '4', '5', '6', '7'] +let Xeg4 = traverse( + (defaultVal, index)=>(fromEvent('change', 'traverse'+index, defaultVal)), + list) + .map(xs=>xs.map(x=>~~x)) + .map(sum) + +let ViewEg4 = props =>
+{list.map((item, index) => (

+ +

)) +} +

{props.sum}

+
+ +let Eg4 = Xeg4.map(a=>({sum: a})).apply(ViewEg4) +``` + +

+ + + + +# Example 5: Asynchronous + +```tsx +function bmiCalc(weight, height) { + return { + result:fetch(`https://gist.github.com.ru/jcouyang/edc3d175769e893b39e6c5be12a8526f?height=${height}&weight=${weight}`) + .then(resp => resp.json()) + .then(resp => resp.result) + } +} + +let Xeg5 = lift2(bmiCalc)(fromEvent('change', 'weight', '70'), fromEvent('change', 'height', '175')) + +let ViewEg5 = props => ( +
+ + +

HEALTH: {props.health}

+

BMI: {props.bmi}

+
+) + +let Eg5 = Xeg5.apply(ViewEg5) +``` + +

+ + + + +# Example 6: Fold + +```tsx +let Xeg6 = fold((acc:number,i: number) => acc+i, 0, fromEvent('click', 'increment').map(x=>1)) +let ViewEg6 = props =>

+ {props.count} + props.actions.fromEvent(e)} /> +

+let Eg6 = Xeg6.map(a=>({count: a})).apply(ViewEg6) +``` + +

+ + + + +# Example 7: Merge + +```tsx +let Xeg7 = fold( +(acc:number,i: number) => acc+i, 0, +fromEvent('click', 'increment').map(x=>1).merge( +fromEvent('click', 'decrement').map(x=>-1))) + +let ViewEg7 = props =>

+ props.actions.fromEvent(e)} /> + {props.count} + props.actions.fromEvent(e)} /> +

+let Eg7 = Xeg7.map(a=>({count: a})).apply(ViewEg7) +``` + +

+ + + + +# Example 8: Fold multiple buttons + +

+ + + + + + +# Example 13: Adding items to a list diff --git a/docs/src/main/tut/examples/index.org b/docs/src/main/tut/examples/index.org new file mode 100644 index 0000000..b353414 --- /dev/null +++ b/docs/src/main/tut/examples/index.org @@ -0,0 +1,244 @@ +#+TITLE: Examples of xReact Fantasy +#+Date: <2017-09-09 Sat> +#+AUTHOR: 欧阳继超 +#+HTML_HEAD: +#+OPTIONS: exports:source tangle:yes eval:no-export num:0 + +* Example 0: How to use xReact Fantasy + +#+BEGIN_SRC js :tangle example.tsx + +import * as React from 'react'; +import { render } from 'react-dom'; +import '../../../../../src/xs/rx' +import { pure, lift2, X, xinput, fromEvent, traverse, fold } from '../../../../../src' +function xmount(component, dom) { render(React.createFactory(X)({}, component), dom) } +#+END_SRC + +* Example 1: Two number multiply +A multiply function can be simply lifted to be a function that works with xReact FantasyX +#+BEGIN_SRC js :tangle example.tsx +let mult = (x:number,y: number) => x * y +let Xeg1 = lift2(mult)(pure(6), pure(5)) +#+END_SRC + +A very basic Stateless Component to display it. +#+BEGIN_SRC js :tangle example.tsx +let ViewEg1 = props =>

{props.product}

+#+END_SRC + +#+BEGIN_SRC js :tangle example.tsx +let Eg1 = Xeg1.map(a=>({product: a})).apply(ViewEg1) +#+END_SRC + +#+BEGIN_SRC js :tangle example.tsx +xmount(, document.getElementById('eg1') ) +#+END_SRC + +#+HTML:

+ + +* Example 2: Two Inputs +#+BEGIN_SRC js :tangle example.tsx + function strToInt(x) {return ~~x} + + let Xeg2 = lift2(mult)( + fromEvent('change', 'n1', '5').map(strToInt), + fromEvent('change', 'n2', '6').map(strToInt) + ) + + let ViewEg2 = props =>
+

+

+

{props.product}

+
+ + let Eg2 = Xeg2.map(a=>({product: a})).apply(ViewEg2) +#+END_SRC + +#+BEGIN_SRC js :tangle example.tsx :exports none +xmount(, document.getElementById('eg2') ) +#+END_SRC + +#+HTML:

+ +* Example 3: Semigroup +#+BEGIN_SRC js :tangle example.tsx + let Xeg3 = fromEvent('change', 'firstName', 'Jichao') + .concat(pure(' ')) + .concat(fromEvent('change', 'lastName', 'Ouyang')) + + let ViewEg3 = props =>
+

+

+

{props.semigroup}

+
+ + let Eg3 = Xeg3.map(a=>({semigroup: a})).apply(ViewEg3) +#+END_SRC + +#+BEGIN_SRC js :tangle example.tsx :exports none +xmount(, document.getElementById('eg3') ) +#+END_SRC + +#+HTML:

+ +* Example 4: Traverse + + + +#+BEGIN_SRC js :tangle example.tsx + function sum(list){ + return list.reduce((acc,x)=> acc+x, 0) + } + let list = ['1', '2', '3', '4', '5', '6', '7'] + let Xeg4 = traverse( + (defaultVal, index)=>(fromEvent('change', 'traverse'+index, defaultVal)), + list + ).map(xs=>xs.map(strToInt)) + .map(sum) + + let ViewEg4 = props =>
+ {list.map((item, index) => (

+ +

)) + } +

{props.sum}

+
+ + let Eg4 = Xeg4.map(a=>({sum: a})).apply(ViewEg4) +#+END_SRC + +#+BEGIN_SRC js :tangle example.tsx :exports none + xmount(, document.getElementById('eg4') ) +#+END_SRC + +#+HTML:

+ + +* Example 5: Asynchronous + +#+BEGIN_SRC js :tangle example.tsx + function bmiCalc(weight, height) { + return { + weight: weight, + height: height, + result:fetch(`https://gist.github.com.ru/jcouyang/edc3d175769e893b39e6c5be12a8526f?height=${height}&weight=${weight}`) + .then(resp => resp.json()) + .then(json => json.result) + } + } + + let Xeg5 = lift2(bmiCalc)( + fromEvent('change', 'weight', '70'), + fromEvent('change', 'height', '175') + ) + + let ViewEg5 = props => ( +
+ + +

HEALTH: {props.health}

+

BMI: {props.bmi}

+
+ ) + + let Eg5 = Xeg5.apply(ViewEg5) +#+END_SRC + +#+BEGIN_SRC js :tangle example.tsx :exports none + xmount(, document.getElementById('eg5') ) +#+END_SRC + +#+HTML:

+ +* Example 6: Fold + +#+BEGIN_SRC js :tangle example.tsx + let Xeg6 = fold( + (acc:number,i: number) => acc+i, + 0, + fromEvent('click', 'increment').map(x=>1) + ) + + let ViewEg6 = props =>

+ {props.count} + props.actions.fromEvent(e)} /> +

+ + let Eg6 = Xeg6.map(a=>({count: a})).apply(ViewEg6) +#+END_SRC + +#+BEGIN_SRC js :tangle example.tsx :exports none +xmount(, document.getElementById('eg6') ) +#+END_SRC + +#+HTML:

+ + + +* Example 7: Merge +#+BEGIN_SRC js :tangle example.tsx + let Xeg7 = fold( + (acc:number,i: number) => acc+i, + 0, + fromEvent('click', 'increment').map(x=>1) + .merge( + fromEvent('click', 'decrement').map(x=>-1) + ) + ) + + let ViewEg7 = props =>

+ props.actions.fromEvent(e)} /> + {props.count} + props.actions.fromEvent(e)} /> +

+ + let Eg7 = Xeg7.map(a=>({count: a})).apply(ViewEg7) +#+END_SRC + +#+BEGIN_SRC js :tangle example.tsx :exports none +xmount(, document.getElementById('eg7') ) +#+END_SRC + +#+HTML:

+ + +* Example 8: Fold multiple buttons + + +#+BEGIN_SRC js :tangle example.tsx + const actions = ['-1', '+1', 'reset'] + let Xeg8 = fold( + (acc, i) => { + switch(i) { + case '-1': return acc-1 + case '+1': return acc+1 + case 'reset': return 0 + default: acc + } + }, + 0, + actions.map((action)=>fromEvent('click', action)) + .reduce((acc,a)=>acc.merge(a))) + + let ViewEg8 = props =>

+ {props.count} + {actions.map(action=> + props.actions.fromEvent(e)} />)} +

+ + let Eg8 = Xeg8.map(a=>({count: a})).apply(ViewEg8) + + xmount(, document.getElementById('eg8') ) +#+END_SRC + +#+HTML:

+ +#+HTML: + +#+HTML: diff --git a/package.json b/package.json index 465eadc..a3af03f 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "xreact", - "version": "2.6.3", + "version": "3.0.0", "description": "Functional Reactive State Container for React", "repository": { "type": "git", @@ -10,14 +10,20 @@ "typings": "lib/index.d.ts", "files": [ "src", - "lib" + "lib", + "dist" ], "scripts": { - "build": "tsc", - "test": "jest", + "build": "make all", + "test": "jest && mocha test/test.js", "prepublish": "npm run build", "testWDebugger": "node --harmony $(which bugger) ./node_modules/jest-cli/bin/jest.js --runInBand" }, + "browserify-shim": { + "react": "global:React", + "@reactivex/rxjs": "global:Rx", + "most": "global:most" + }, "dependencies": { "prop-types": "^15.5.8" }, @@ -32,23 +38,36 @@ "@types/jest": "^20.0.2", "@types/node": "^8.0.0", "@types/react": "^16.0.5", + "browserify": "^14.4.0", + "browserify-shim": "^3.8.14", + "chai": "^4.1.2", "create-react-class": "^15.6.0", + "envify": "^4.1.0", "enzyme": "^2.8.2", "jest": "^20.0.0", "lodash": "^4.0.0", + "mocha": "^3.5.3", "most": "^1.2.2", "most-subject": "^5.3.0", + "nightmare": "^2.10.0", "react": "^15.6.1", "react-dom": "^15.5.4", "react-test-renderer": "^15.5.4", "redux": "^3.0.4", "ts-jest": "^20.0.2", - "typescript": "^2.5.2" + "tsify": "^3.0.3", + "typescript": "^2.5.2", + "uglify-js": "^3.1.1", + "watchify": "^3.9.0" }, "jest": { "transform": { "^.+\\.(tsx|ts)$": "/node_modules/ts-jest/preprocessor.js" }, + "collectCoverageFrom": [ + "src/x.ts", + "src/xclass.ts" + ], "moduleFileExtensions": [ "ts", "tsx", diff --git a/src/__tests__/fantasy-test.tsx b/src/__tests__/fantasy-test.tsx deleted file mode 100644 index 1dde736..0000000 --- a/src/__tests__/fantasy-test.tsx +++ /dev/null @@ -1,321 +0,0 @@ -import * as React from 'react'; -import { mount } from 'enzyme'; -import '@reactivex/rxjs' -import { Plan, X, fromPlan, map, lift2, lift, lift3, lift4, lift5, concat } from '..' -import * as rx from '../xs/rx' -import { Observable } from '@reactivex/rxjs' -import '@reactivex/rxjs/dist/cjs/add/observable/combineLatest' -import '@reactivex/rxjs/dist/cjs/add/operator/filter' -import * as createClass from 'create-react-class' -import { rx as Xtest } from '../xtests' -import * as _ from 'lodash/fp' -import { xinput } from '../forms' - -const compose = (f, g) => x => f(g(x)); - -const CounterView: React.SFC = props => ( -
- {props.count} -
-) - -CounterView.defaultProps = { count: 0, count1: 1, count2: 0 } - -interface Intent { - type: string - value?: any -} -interface CountProps { - count: number - count1: number - count2: number -} - -let mountx = compose(mount, y => React.createFactory(X)({ x: rx }, y)) - -const fantasyX = fromPlan((intent$) => { - return { - update$: intent$.map((intent) => { - switch (intent.type) { - case 'inc': - return state => ({ count: state.count + 1 }) - case 'dec': - return state => ({ count: state.count - 1 }) - default: - return state => state - } - }), - actions: { - inc: () => ({ type: 'inc' }), - dec: () => ({ type: 'dec' }), - } - } -}) - -describe('actions', () => { - let Counter, counterWrapper, counter, t, counterView, actions - describe('basic', () => { - beforeEach(() => { - Counter = fantasyX.apply(CounterView) - counterWrapper = mountx() - counter = counterWrapper.find(Counter).getNode() - counterView = counterWrapper.find(CounterView) - actions = counterView.prop('actions') - t = new Xtest(); - }) - it('add intent to intent$ and go through sink$', () => { - return t - .do([ - actions.inc, - actions.inc, - actions.inc, - ]) - .collect(counter) - .then(x => expect(x.count).toBe(3)) - }) - }) - describe('map', () => { - beforeEach(() => { - Counter = fantasyX.map(a => ( - { count1: (a.count1 || 1) * 2 } - )).concat(fantasyX.map(a => ( - { count2: (a.count2 || 0) + 2 } - ))).apply(CounterView) - - counterWrapper = mountx() - counter = counterWrapper.find(Counter).getNode() - counterView = counterWrapper.find(CounterView) - actions = counterView.prop('actions') - t = new Xtest(); - }) - it('inc will + 1 then * 2', () => { - return t - .do([ - actions.inc, - actions.inc, - actions.inc, - ]) - .collect(counter) - .then(x => { - /* -(count+1) (count1*2)-(count+1) (count1*2)-(count+1) (count1*2)-> */ - /* -(count+1) (count2+2)-(count+1) (count2+2)-(count+1) (count2+2)-> */ - expect(x).toEqual({ "count": 6, "count1": 8, "count2": 6 }) - }) - }) - }) - - describe('bimap', () => { - beforeEach(() => { - Counter = fantasyX.bimap( - () => ({ - double: () => ({ type: 'double' }), - inc: () => ({ type: 'inc' }) - }), - a => ( - { count: (a.count || 0) * 2 } - )) - .apply(CounterView) - - counterWrapper = mountx() - counter = counterWrapper.find(Counter).getNode() - counterView = counterWrapper.find(CounterView) - actions = counterView.prop('actions') - t = new Xtest(); - }) - it('inc will + 1 then * 2, otherwise * 2', () => { - return t - .do([ - actions.inc, // (0 + 1) * 2 = 2 - actions.double, // 2 * 2 = 4 - actions.inc, // (4 + 1) * 2 = 10 - ]) - .collect(counter) - .then(x => expect(x.count).toBe(10)) - }) - }) - - describe('lift', () => { - beforeEach(() => { - Counter = lift(a => ( - { count: (a.count || 0) * 2 } - ))(fantasyX).apply(CounterView) - - counterWrapper = mountx() - counter = counterWrapper.find(Counter).getNode() - counterView = counterWrapper.find(CounterView) - actions = counterView.prop('actions') - t = new Xtest(); - }) - it('inc will + 1 then * 2', () => { - return t - .do([ - actions.inc, - actions.inc, - actions.inc, - ]) - .collect(counter) - .then(x => expect(x.count).toBe(14)) - }) - }) - describe('concat', () => { - let fantasyXB; - beforeEach(() => { - fantasyXB = fromPlan((intent$) => { - return { - update$: intent$.map((intent) => { - switch (intent.type) { - case 'double': - return state => ({ count: state.count * 2 }) - case 'half': - return state => ({ count: state.count / 2 }) - default: - return state => state - } - }), - actions: { - double: () => ({ type: 'double' }), - half: () => ({ type: 'half' }), - } - } - }) - Counter = concat(fantasyX, fantasyXB).apply(CounterView) - - counterWrapper = mountx() - counter = counterWrapper.find(Counter).getNode() - counterView = counterWrapper.find(CounterView) - actions = counterView.prop('actions') - t = new Xtest(); - }) - it('should able to inc,dec,half and double', () => { - return t - .do([ - actions.inc, - actions.inc, - actions.double, - actions.dec, - actions.double, - actions.inc, - actions.half - ]) - .collect(counter) - .then(x => expect(x.count).toBe(3.5)) - }) - }) - describe('combine', () => { - let input1 - beforeEach(() => { - let fantasyX1 = xinput('value0') - - let fantasyX2 = xinput('value1') - - let View: React.SFC = props => ( -
- {props.sum} -
- ) - - View.defaultProps = { sum: 0, value0: 0, value1: 0 } - - interface ViewProps { - sum: number, - value0: number, - value1: number - } - - Counter = lift2( - (s1, s2) => ({ sum: (s1.value0 || 0) + (s2.value1 || 0) }) - )(fantasyX1, fantasyX2).apply(View) - - counterWrapper = mountx() - counter = counterWrapper.find(Counter).getNode() - counterView = counterWrapper.find(View) - input1 = counterView.find('#input1') - actions = counterView.prop('actions') - t = new Xtest(); - }) - it('inc will + 2', () => { - return t - .do([ - () => actions.fromEvent({ type: 'change', target: { name: 'value0', value: 3 } }), - () => actions.fromEvent({ type: 'change', target: { name: 'value1', value: 10 } }) - - ]) - .collect(counter) - .then(x => expect(x.sum).toBe(13)) - }) - }) -}) - -describe('liftN', () => { - let Fa, stub, CounterView: React.SFC - - beforeEach(() => { - let fan = [1, 2, 3, 4, 5]; - Fa = fan.map(i => fromPlan(intent$ => { - return { - update$: Observable.of(state => ({ count: i })), - actions: { - ['action' + i]: () => ({ type: 'action' + i }) - } - } - })) - stub = jest.fn() - CounterView = props => { - stub(props) - return (
) - } - - CounterView.defaultProps = { count: 0 } - }) - - describe('#lift3', () => { - beforeEach(() => { - let Counter = lift3((s1, s2, s3) => { - return { count: ((s1.count || 0) + (s2.count || 0) + (s3.count || 0)) } - })(Fa[0], Fa[1], Fa[2]).apply(CounterView) - mountx() - }) - - it('should sum all 3 FantasyX', () => { - expect(stub.mock.calls[1][0].count).toEqual(6) - }) - }) - - describe('#lift4', () => { - beforeEach(() => { - let Counter = lift4((s1, s2, s3, s4) => { - return { - count: ((s1.count || 0) + - (s2.count || 0) + - (s3.count || 0)) + - (s4.count || 0) - } - })(Fa[0], Fa[1], Fa[2], Fa[3]).apply(CounterView) - mountx() - }) - - it('should sum all 3 FantasyX', () => { - expect(stub.mock.calls[1][0].count).toEqual(10) - }) - }) - - describe('#lift5', () => { - beforeEach(() => { - let Counter = lift5((s1, s2, s3, s4, s5) => { - return { - count: ((s1.count || 0) + - (s2.count || 0) + - (s3.count || 0) + - (s4.count || 0) + - (s5.count || 0) - ) - } - })(Fa[0], Fa[1], Fa[2], Fa[3], Fa[4]).apply(CounterView) - mountx() - }) - - it('should sum all 3 FantasyX', () => { - expect(stub.mock.calls[1][0].count).toEqual(15) - }) - }) -}) diff --git a/src/fantasy/fantasyx.ts b/src/fantasy/fantasyx.ts index 2d7fef2..03a7390 100644 --- a/src/fantasy/fantasyx.ts +++ b/src/fantasy/fantasyx.ts @@ -1,60 +1,211 @@ -import { HKTS } from '../xs' -import { PlanX } from './planx' +import { Stream, streamOps } from '../xs' import { PlanS } from './interfaces' import { x } from '../x' -import { Actions, XcomponentClass } from '../interfaces' -export class FantasyX { - plan: PlanX - constructor(plan: PlanS) { - this.plan = new PlanX(plan) +import { State } from './state' +import { Actions, Plan, XcomponentClass, Update } from '../interfaces' + +interface Semigroup { + concat: (a: A) => A +} +function isSemigroup(a: any): a is Semigroup { + return a && typeof a.concat == 'function' +} + +export class FantasyX { + plan: PlanS + constructor(plan: PlanS) { + this.plan = plan } apply(WrappedComponent) { - return x(this.plan.toPlan())(WrappedComponent) + return x(this.patch().runS())(WrappedComponent) + } + + runS(): Plan { + return intent$ => { + let machine = this.plan(intent$) + let update$ = streamOps.map, Update>( + s => s.runS.bind(s), + machine.update$ + ) + return { update$, actions: machine.actions } + } + } + + map(f: (a: A) => B): FantasyX { + return new FantasyX(intent$ => { + let machine = this.plan(intent$) + let update$ = streamOps.map, State>( + state => state.map(f), + machine.update$ + ) + return { update$, actions: machine.actions } + }) } - map(f: (s: Partial) => Partial): FantasyX { - return new FantasyX(this.plan.map(f).apply) + + fold(f: (acc: B, i: A) => B, base: B): FantasyX { + return new FantasyX(intent$ => { + let machine = this.plan(intent$) + let update$ = streamOps.merge( + streamOps.just(State.pure(base)), + streamOps.scan, State>((accS, curS) => { + return accS.chain(acc => + curS.chain(cur => + State.pure(f(acc, cur)) + ) + ) + }, State.pure(base), machine.update$ + ) + ) + return { update$, actions: machine.actions } + }) + } + + combine( + f: (a: A, b: B) => C, + fB: FantasyX + ): FantasyX { + return new FantasyX(intent$ => { + let machineB = fB.plan(intent$), + machineA = this.plan(intent$) + let update$ = streamOps.combine, State, State>( + (S1, S2) => + S1.chain(s1 => + S2.chain(s2 => + State.pure(f(s1, s2)) + ) + ) + , machineA.update$, machineB.update$ + ) + let actions = Object.assign({}, machineA.actions, machineB.actions) + return { update$, actions } + }) + } + + patch(f: (a: A) => Partial = _ => _): FantasyX { + return new FantasyX(intent$ => { + let machine = this.plan(intent$) + let update$ = streamOps.map, State>( + state => state.patch(f), + machine.update$ + ) + return { update$, actions: machine.actions } + }) } - combine( - f: (s1: Partial, s2: Partial) => Partial, - fb: FantasyX - ): FantasyX { - return new FantasyX(this.plan.combine(f, fb.plan).apply) + bimap( + fa: (b?: Actions) => Actions, fb: (a: A) => B + ): FantasyX { + return new FantasyX(intent$ => { + let machine = this.plan(intent$) + let update$ = streamOps.map, State>( + state => state.map(fb), + machine.update$ + ) + return { update$, actions: fa(machine.actions) } + }) } - combine3( - f: (s1: Partial, s2: Partial, s3: Partial) => Partial, - fb: FantasyX, - fc: FantasyX - ): FantasyX { - return new FantasyX(this.plan.combine3(f, fb.plan, fc.plan).apply) + combine3( + f: (a: A, b: B, c: C) => D, + planB: FantasyX, + planC: FantasyX + ): FantasyX { + return new FantasyX(intent$ => { + let machineB = planB.plan(intent$), + machineA = this.plan(intent$), + machineC = planC.plan(intent$); + let update$ = streamOps.combine, State, State, State>( + (S1, S2, S3) => + S1.chain(s1 => + S2.chain(s2 => + S3.chain(s3 => + State.pure(f(s1, s2, s3))))) + , machineA.update$, machineB.update$, machineC.update$ + ) + let actions = Object.assign({}, machineA.actions, machineB.actions, machineC.actions) + return { update$, actions } + }) } - combine4( - f: (s1: Partial, s2: Partial, s3: Partial, s4: Partial) => Partial, - fb: FantasyX, - fc: FantasyX, - fd: FantasyX - ): FantasyX { - return new FantasyX(this.plan.combine4(f, fb.plan, fc.plan, fd.plan).apply) + combine4( + f: (a: A, b: B, c: C, d: D) => F, + planB: FantasyX, + planC: FantasyX, + planD: FantasyX + ): FantasyX { + return new FantasyX(intent$ => { + let machineB = planB.plan(intent$), + machineA = this.plan(intent$), + machineC = planC.plan(intent$), + machineD = planD.plan(intent$) + ; + let update$ = streamOps.combine, State, State, State, State>( + (S1, S2, S3, S4) => + S1.chain(s1 => + S2.chain(s2 => + S3.chain(s3 => + S4.chain(s4 => + State.pure(f(s1, s2, s3, s4)))))) + , machineA.update$, machineB.update$, machineC.update$, machineD.update$ + ) + let actions = Object.assign({}, machineA.actions, machineB.actions, machineC.actions, machineD.actions) + return { update$, actions } + }) } - combine5( - f: (s1: Partial, s2: Partial, s3: Partial, s4: Partial, s5: Partial) => Partial, - fb: FantasyX, - fc: FantasyX, - fd: FantasyX, - fe: FantasyX - ): FantasyX { - return new FantasyX(this.plan.combine5(f, fb.plan, fc.plan, fd.plan, fe.plan).apply) + combine5( + f: (a: A, b: B, c: C, d: D, e: F) => G, + planB: FantasyX, + planC: FantasyX, + planD: FantasyX, + planE: FantasyX + ): FantasyX { + return new FantasyX(intent$ => { + let machineB = planB.plan(intent$), + machineA = this.plan(intent$), + machineC = planC.plan(intent$), + machineD = planD.plan(intent$), + machineE = planE.plan(intent$) + ; + let update$ = streamOps.combine, State, State, State, State, State>( + (S1, S2, S3, S4, S5) => + S1.chain(s1 => + S2.chain(s2 => + S3.chain(s3 => + S4.chain(s4 => + S5.chain(s5 => + State.pure(f(s1, s2, s3, s4, s5))))))) + , machineA.update$, machineB.update$, machineC.update$, machineD.update$, machineE.update$ + ) + let actions = Object.assign({}, machineA.actions, machineB.actions, machineC.actions, machineD.actions, machineE.actions) + return { update$, actions } + }) } - concat(fb: FantasyX): FantasyX { - return new FantasyX(this.plan.concat(fb.plan).apply) + + concat( + fa: FantasyX + ): FantasyX { + return this.combine((a, b) => { + if (isSemigroup(a) && isSemigroup(b)) + return a.concat(b) + else + return b + }, fa) } - bimap( - fa: (b?: Actions) => Actions, fb: (a: Partial) => Partial - ): FantasyX { - return new FantasyX(this.plan.bimap(fa, fb).apply) + + merge( + fa: FantasyX + ): FantasyX { + return new FantasyX(intent$ => { + let machineA = this.plan(intent$) + let machineB = fa.plan(intent$) + let update$ = streamOps.merge>( + machineA.update$, + machineB.update$ + ) + return { update$, actions: Object.assign({}, machineA.actions, machineB.actions) } + }) } + } diff --git a/src/fantasy/index.ts b/src/fantasy/index.ts index 10ec7ec..f57c3ad 100644 --- a/src/fantasy/index.ts +++ b/src/fantasy/index.ts @@ -1,95 +1,124 @@ -import { HKTS, streamOps, HKT } from '../xs' +import { Stream, streamOps, M_ } from '../xs' import { FantasyX } from './fantasyx' import { Plan, Update } from '../interfaces' import { StateP, Partial } from './interfaces' import { State } from './state' -export function fromPlan(plan: Plan): FantasyX { - return new FantasyX(intent$ => { +export function fromPlan(plan: Plan): FantasyX { + return new FantasyX(intent$ => { let { update$, actions } = plan(intent$) return { actions, - update$: streamOps.map>, StateP>( - f => State.patch(f), update$ + update$: streamOps.map, State>( + f => State.modify(f), update$ ) } }) } -export function pure(s: S) { - return new FantasyX(intent$ => { +export function fromEvent(type: string, name: string, defaultVal?: string): FantasyX { + return new FantasyX(intent$ => { return { - update$: streamOps.map>(() => State.pure(s), intent$ as HKT[E]) + update$: streamOps.merge>( + typeof defaultVal != 'undefined' ? streamOps.just>(State.pure(defaultVal)) : streamOps.empty>(), + streamOps.map>( + e => State.pure((e.target as HTMLFormElement).value), + streamOps.filter(i => { + let target = i.target as HTMLFormElement + return target.tagName == 'INPUT' && target.name == name + }, (intent$ as M_[E]))) + ) + } + }) +} + +export function pure(a: A) { + return new FantasyX(intent$ => { + return { + update$: streamOps.just>(State.pure(a)) + } + }) +} + +export function empty() { + return new FantasyX(intent$ => { + return { + update$: streamOps.empty>() } }) } -export function map( - f: (s: Partial) => Partial, fa: FantasyX -): FantasyX { +export function map( + f: (s: A) => B, fa: FantasyX +): FantasyX { return fa.map(f) } -export function lift( - f: (s: Partial) => Partial -): (fa: FantasyX) => FantasyX { + +export function traverse( + f: (a: A, index?: number) => FantasyX, xs: A[] +): FantasyX { + return xs.reduce((acc, i, index) => acc.concat(f(i, index).map(x => [x])), pure([])) +} + +export function fold( + f: (acc: B, i: A) => B, base: B, fa: FantasyX +): FantasyX { + return fa.fold(f, base) +} + +export function lift( + f: (s: A) => B +): (fa: FantasyX) => FantasyX { return fa => fa.map(f) } -export function lift2( - f: (s1: Partial, s2: Partial) => Partial -): (fa1: FantasyX, fa2: FantasyX) => FantasyX { +export function lift2( + f: (a: A, b: B) => C +): (fa1: FantasyX, fa2: FantasyX) => FantasyX { return (fa1, fa2) => fa1.combine(f, fa2) } -export function lift3( - f: ( - s1: Partial, - s2: Partial, - s3: Partial - ) => Partial -): (fa1: FantasyX, fa2: FantasyX, fa3: FantasyX) => FantasyX { +export function lift3( + f: (a: A, b: B, c: C) => D +): (fa1: FantasyX, fa2: FantasyX, fa3: FantasyX) => FantasyX { return (fa1, fa2, fa3) => fa1.combine3(f, fa2, fa3) } -export function lift4( - f: ( - s1: Partial, - s2: Partial, - s3: Partial, - s4: Partial - ) => Partial -): ( - fa1: FantasyX, - fa2: FantasyX, - fa3: FantasyX, - fa4: FantasyX - ) => FantasyX { +export function lift4( + f: (a: A, b: B, c: C, d: D) => F +): (fa1: FantasyX, fa2: FantasyX, fa3: FantasyX, fa4: FantasyX) => FantasyX { return (fa1, fa2, fa3, fa4) => fa1.combine4(f, fa2, fa3, fa4) } - -export function lift5( +export function lift5( f: ( - s1: Partial, - s2: Partial, - s3: Partial, - s4: Partial, - s5: Partial - ) => Partial + s1: A, + s2: B, + s3: C, + s4: D, + s5: F + ) => G ): ( - fa1: FantasyX, - fa2: FantasyX, - fa3: FantasyX, - fa4: FantasyX, - fa5: FantasyX - ) => FantasyX { + fa1: FantasyX, + fa2: FantasyX, + fa3: FantasyX, + fa4: FantasyX, + fa5: FantasyX + ) => FantasyX { return (fa1, fa2, fa3, fa4, fa5) => fa1.combine5(f, fa2, fa3, fa4, fa5) } -export function concat( - fa: FantasyX, - fb: FantasyX -): FantasyX { +export function concat( + fa: FantasyX, + fb: FantasyX +): FantasyX { return fa.concat(fb) } + +export function merge( + fa: FantasyX, + fb: FantasyX +): FantasyX { + return fa.merge(fb) +} diff --git a/src/fantasy/interfaces.ts b/src/fantasy/interfaces.ts index 9c67283..12b8943 100644 --- a/src/fantasy/interfaces.ts +++ b/src/fantasy/interfaces.ts @@ -1,6 +1,6 @@ import { Actions } from '../interfaces' import { State } from './state' -import { Subject, HKTS, HKT } from '../xs' +import { Subject, Stream, M_ } from '../xs' export type Partial = { [P in keyof T]?: T[P]; } @@ -12,9 +12,9 @@ export interface pair { export type StateP = State> -export interface Machine { +export interface Machine { actions?: Actions - update$: HKT>[E] + update$: M_>[E] } -export type PlanS = (i: Subject) => Machine +export type PlanS = (i: Subject) => Machine diff --git a/src/fantasy/planx.ts b/src/fantasy/planx.ts deleted file mode 100644 index 4c3f7c9..0000000 --- a/src/fantasy/planx.ts +++ /dev/null @@ -1,171 +0,0 @@ -import { HKTS, streamOps } from '../xs' -import { State } from './state' -import { StateP, PlanS } from './interfaces' -import { Actions, Plan, Update } from '../interfaces' - -// function chainAll(chainables, f, paras) { -// if (chainables.length == 1) { -// return chainables[0].chain(s => { -// return State.pure(f.apply(null, paras)) -// }) -// } else { -// let [head, ...tail] = chainables -// return head.chain(s => { -// return chainAll(tail, f, paras.concat(s)) -// }) -// } -// } - -export class PlanX { - apply: PlanS - constructor(plan: PlanS) { - this.apply = plan - } - - combine( - f: (a: Partial, b: Partial) => Partial, - planB: PlanX - ): PlanX { - return new PlanX(intent$ => { - let machineB = planB.apply(intent$), - machineA = this.apply(intent$) - let update$ = streamOps.combine, StateP, StateP>( - (S1, S2) => - S1.chain(s1 => - S2.chain(s2 => - State.patch(() => f(s1, s2)) - ) - ) - , machineA.update$, machineB.update$ - ) - let actions = Object.assign({}, machineA.actions, machineB.actions) - return { update$, actions } - }) - } - - combine3( - f: (a: Partial, b: Partial, c: Partial) => Partial, - planB: PlanX, - planC: PlanX - ): PlanX { - return new PlanX(intent$ => { - let machineB = planB.apply(intent$), - machineA = this.apply(intent$), - machineC = planC.apply(intent$); - let update$ = streamOps.combine, StateP, StateP, StateP>( - (S1, S2, S3) => - S1.chain(s1 => - S2.chain(s2 => - S3.chain(s3 => - State.patch(() => f(s1, s2, s3))))) - , machineA.update$, machineB.update$, machineC.update$ - ) - let actions = Object.assign({}, machineA.actions, machineB.actions, machineC.actions) - return { update$, actions } - }) - } - - combine4( - f: (a: Partial, b: Partial, c: Partial, d: Partial) => Partial, - planB: PlanX, - planC: PlanX, - planD: PlanX - ): PlanX { - return new PlanX(intent$ => { - let machineB = planB.apply(intent$), - machineA = this.apply(intent$), - machineC = planC.apply(intent$), - machineD = planD.apply(intent$) - ; - let update$ = streamOps.combine, StateP, StateP, StateP, StateP>( - (S1, S2, S3, S4) => - S1.chain(s1 => - S2.chain(s2 => - S3.chain(s3 => - S4.chain(s4 => - State.patch(() => f(s1, s2, s3, s4)))))) - , machineA.update$, machineB.update$, machineC.update$, machineD.update$ - ) - let actions = Object.assign({}, machineA.actions, machineB.actions, machineC.actions, machineD.actions) - return { update$, actions } - }) - } - - combine5( - f: (a: Partial, b: Partial, c: Partial, d: Partial, e: Partial) => Partial, - planB: PlanX, - planC: PlanX, - planD: PlanX, - planE: PlanX - ): PlanX { - return new PlanX(intent$ => { - let machineB = planB.apply(intent$), - machineA = this.apply(intent$), - machineC = planC.apply(intent$), - machineD = planD.apply(intent$), - machineE = planE.apply(intent$) - ; - let update$ = streamOps.combine, StateP, StateP, StateP, StateP, StateP>( - (S1, S2, S3, S4, S5) => - S1.chain(s1 => - S2.chain(s2 => - S3.chain(s3 => - S4.chain(s4 => - S5.chain(s5 => - State.patch(() => f(s1, s2, s3, s4, s5))))))) - , machineA.update$, machineB.update$, machineC.update$, machineD.update$, machineE.update$ - ) - let actions = Object.assign({}, machineA.actions, machineB.actions, machineC.actions, machineD.actions, machineE.actions) - return { update$, actions } - }) - } - - concat( - fa: PlanX - ): PlanX { - return new PlanX(intent$ => { - let machineA = this.apply(intent$) - let machineB = fa.apply(intent$) - let update$ = streamOps.merge>( - machineA.update$, - machineB.update$ - ) - return { update$, actions: Object.assign({}, machineA.actions, machineB.actions) } - }) - } - - map(f: (a: Partial) => Partial): PlanX { - return new PlanX(intent$ => { - let machine = this.apply(intent$) - let update$ = streamOps.map, StateP>( - state => state.chain(() => State.patch(f)), - machine.update$ - ) - return { update$, actions: machine.actions } - }) - } - - bimap( - fa: (b?: Actions) => Actions, fb: (a: Partial) => Partial - ): PlanX { - return new PlanX(intent$ => { - let machine = this.apply(intent$) - let update$ = streamOps.map, StateP>( - state => state.chain(() => State.patch(fb)), - machine.update$ - ) - return { update$, actions: fa(machine.actions) } - }) - } - - toPlan(): Plan { - return intent$ => { - let machine = this.apply(intent$) - let update$ = streamOps.map, Update>( - s => s.runS.bind(s), - machine.update$ - ) - return { update$, actions: machine.actions } - } - } -} diff --git a/src/fantasy/state.ts b/src/fantasy/state.ts index 76fd087..9894163 100644 --- a/src/fantasy/state.ts +++ b/src/fantasy/state.ts @@ -4,8 +4,8 @@ export class State { constructor(runState: (s: S) => pair) { this.runState = runState } - static pure(a: A) { - return new State((s: any) => ({ s: s, a: a })) + static pure(a: A) { + return new State((s: S) => ({ s: s, a: a })) } chain(f: (a: A) => State): State { @@ -23,6 +23,13 @@ export class State { return this.runState(state).s } + map(f: (a: A) => B): State { + return new State((state: S) => { + let { a, s } = this.runState(state) + return { a: f(a), s: s } + }) + } + static get(): State { return new State((s: S) => ({ s: s, a: s })) } @@ -31,15 +38,15 @@ export class State { return new State((_: S) => ({ a: undefined, s: s })) } - static modify(f: (s: S) => S): State { - return new State((s: S) => ({ a: undefined, s: f(s) })) + static modify(f: (s: S) => Partial): State { + return new State((s: S) => ({ a: undefined, s: Object.assign({}, s, f(s)) })) } - static patch(f: (s: S) => Partial): State> { - return new State((s: S) => { - let p = f(s) + patch(f: (a: A, s?: S) => Partial): State { + return new State((state: S) => { + let { a, s } = this.runState(state) return { - a: p, s: Object.assign({}, s, p) + a: undefined, s: Object.assign({}, s, f(a, s)) } }) } diff --git a/src/forms/index.ts b/src/forms/index.ts index 639f534..1b8d66c 100644 --- a/src/forms/index.ts +++ b/src/forms/index.ts @@ -1,4 +1,4 @@ -import { HKTS, streamOps, HKT } from '../xs' +import { Stream, streamOps, M_ } from '../xs' import { Update, fromPlan } from '..' import { FantasyX } from '../fantasy/fantasyx' import { Partial } from '../fantasy/interfaces' @@ -8,7 +8,7 @@ export type AnyProps = { } export function xinput< - E extends HKTS, + E extends Stream, I extends Event, S extends AnyProps>(name: keyof S) { return fromPlan(intent$ => { @@ -24,12 +24,8 @@ export function xinput< e => (e.target as HTMLFormElement).value, streamOps.filter(i => { let target = i.target as HTMLFormElement - if (['submit', 'search', 'button', 'search', 'reset'].indexOf(target.type) >= 0) { - return i.type == 'click' && (target as HTMLFormElement).name == name - } else { - return i.type == 'change' && (target as HTMLFormElement).name == name - } - }, (intent$ as HKT[E]))) + return target.tagName == 'INPUT' && target.name == name + }, (intent$ as M_[E]))) ) } }) diff --git a/src/index.ts b/src/index.ts index 6f2c528..2f74f2d 100644 --- a/src/index.ts +++ b/src/index.ts @@ -3,3 +3,4 @@ export * from './interfaces' export * from './xclass' export * from './fantasy' export * from './forms' +export * from './xs' diff --git a/src/interfaces.ts b/src/interfaces.ts index c29402a..1dadc67 100644 --- a/src/interfaces.ts +++ b/src/interfaces.ts @@ -1,5 +1,5 @@ import * as React from 'react' -import { XStream, HKTS, HKT, Subject, Subscription } from './xs' +import { XStream, Stream, M_, Subject, Subscription } from './xs' export const XREACT_ENGINE = '@reactive-react/xreact.engine'; @@ -7,7 +7,7 @@ export interface Actions { [propName: string]: (...v: any[]) => T } -export interface Plan { +export interface Plan { (intent: Subject, props?: {}): Machine } @@ -16,9 +16,9 @@ export interface Update { (current?: S): Partial } -export interface Machine { +export interface Machine { actions?: Actions, - update$: HKT>[E] + update$: M_>[E] } export interface Xprops { @@ -27,21 +27,21 @@ export interface Xprops { [propName: string]: any; } -export class Xcomponent extends React.PureComponent, S> { +export class Xcomponent extends React.PureComponent, S> { machine: Machine subscription: Subscription context: ContextEngine } -export interface XcomponentClass { +export interface XcomponentClass { contextTypes?: ContextEngine defaultProps?: any new (props?: Xprops, context?: ContextEngine): Xcomponent; } -export interface History { +export interface History { path: Subject number> - history: HKT[E] + history: M_[E] } export interface Stamp { @@ -49,14 +49,11 @@ export interface Stamp { time: number } -export interface Engine { +export interface Engine { intent$: Subject history$: Subject } -export interface XProps { - x: XStream -} -export interface ContextEngine { +export interface ContextEngine { [name: string]: Engine } diff --git a/src/x.ts b/src/x.ts index 5d44d4d..4f6a804 100644 --- a/src/x.ts +++ b/src/x.ts @@ -1,15 +1,15 @@ import * as React from 'react'; import { extendXComponentClass, genXComponentClass, CONTEXT_TYPE } from './xclass' -import { streamOps, HKTS, Subject } from './xs' -import { Plan, Xcomponent, XcomponentClass, Engine, XProps, ContextEngine, XREACT_ENGINE } from './interfaces' +import { streamOps, Stream, Subject } from './xs' +import { Plan, Xcomponent, XcomponentClass, Engine, ContextEngine, XREACT_ENGINE } from './interfaces' export { XREACT_ENGINE } -export function isXcomponentClass(ComponentClass: XcomponentClass | React.ComponentClass | React.SFC): ComponentClass is XcomponentClass { +export function isXcomponentClass(ComponentClass: XcomponentClass | React.ComponentClass | React.SFC): ComponentClass is XcomponentClass { return (>ComponentClass).contextTypes == CONTEXT_TYPE; } -export type XOrReactComponent = XcomponentClass | React.ComponentClass | React.SFC +export type XOrReactComponent = XcomponentClass | React.ComponentClass | React.SFC -export function x(main: Plan, opts = {}): (WrappedComponent: XOrReactComponent) => XcomponentClass { +export function x(main: Plan, opts = {}): (WrappedComponent: XOrReactComponent) => XcomponentClass { return function(WrappedComponent: XOrReactComponent) { if (isXcomponentClass(WrappedComponent)) { return extendXComponentClass(WrappedComponent, main) @@ -19,10 +19,9 @@ export function x(main: Plan, opts = {}): (Wrappe }; } -export class X extends React.PureComponent, {}> { +export class X extends React.PureComponent<{}, {}> { static childContextTypes = CONTEXT_TYPE getChildContext(): ContextEngine { - let XClass = this.props.x return { [XREACT_ENGINE]: { intent$: streamOps.subject() as Subject, diff --git a/src/xclass.ts b/src/xclass.ts index 88555b9..c214be8 100644 --- a/src/xclass.ts +++ b/src/xclass.ts @@ -2,7 +2,7 @@ import * as React from 'react'; import { createElement as h } from 'react' import { PropTypes } from 'prop-types'; import { Plan, Xcomponent, XcomponentClass, ContextEngine, XREACT_ENGINE, Update } from './interfaces' -import { streamOps, HKTS, HKT } from './xs' +import { streamOps, Stream, M_ } from './xs' export const CONTEXT_TYPE = { [XREACT_ENGINE]: PropTypes.shape({ intent$: PropTypes.object, @@ -13,7 +13,7 @@ function isSFC(Component: React.ComponentClass | React.SFC): Component return (typeof Component == 'function') } -export function extendXComponentClass(WrappedComponent: XcomponentClass, main: Plan): XcomponentClass { +export function extendXComponentClass(WrappedComponent: XcomponentClass, main: Plan): XcomponentClass { return class XNode extends WrappedComponent { static contextTypes = CONTEXT_TYPE static displayName = `X(${getDisplayName(WrappedComponent)})` @@ -28,7 +28,7 @@ export function extendXComponentClass(WrappedComponent: Xc } } } -export function genXComponentClass(WrappedComponent: React.SFC | React.ComponentClass, main: Plan, opts?): XcomponentClass { +export function genXComponentClass(WrappedComponent: React.SFC | React.ComponentClass, main: Plan, opts?): XcomponentClass { return class XLeaf extends Xcomponent { static contextTypes: ContextEngine = CONTEXT_TYPE static displayName = `X(${getDisplayName(WrappedComponent)})` diff --git a/src/xs/index.ts b/src/xs/index.ts index 88f1f08..a636a8f 100644 --- a/src/xs/index.ts +++ b/src/xs/index.ts @@ -1,7 +1,6 @@ -export interface HKT { } -export type HKTS = keyof HKT -export namespace HKTOPS { -} +export interface M_ { } +export type Stream = keyof M_ + export interface FantasySubject { next(a: A): void complete(a?: A): void @@ -10,59 +9,64 @@ export interface Subscription { unsubscribe(): void; } -export type Subject = HKT[F] & FantasySubject +export type Subject = M_[F] & FantasySubject -export interface XStream { +export interface XStream { readonly URI: F } -export class StreamOps { } -export interface StreamOps { - empty(): HKT[F] - just(a: A): HKT[F] +export class StreamOps { } +export interface StreamOps { + empty(): M_[F] + just(a: A): M_[F] merge( - a: HKT[F], - b: HKT[F] - ): HKT[F] - map(f: (a: A) => B, fa: HKT[F]): HKT[F] - filter(f: (a: A) => boolean, fa: HKT[F]): HKT[F] + a: M_[F], + b: M_[F] + ): M_[F] + scan( + f: (acc: B, cur: A) => B, + base: B, + fa: M_[F] + ) + map(f: (a: A) => B, fa: M_[F]): M_[F] + filter(f: (a: A) => boolean, fa: M_[F]): M_[F] subject(): Subject combine( f: (a: A, b: B) => C, - fa: HKT[F], - fb: HKT[F] - ): HKT[F] + fa: M_[F], + fb: M_[F] + ): M_[F] combine( f: (a: A, b: B, c: C) => D, - fa: HKT[F], - fb: HKT[F], - fc: HKT[F] - ): HKT[F] + fa: M_[F], + fb: M_[F], + fc: M_[F] + ): M_[F] combine( f: (a: A, b: B, c: C, d: D) => E, - fa: HKT[F], - fb: HKT[F], - fc: HKT[F], - fd: HKT[F] - ): HKT[F] + fa: M_[F], + fb: M_[F], + fc: M_[F], + fd: M_[F] + ): M_[F] combine( f: (a: A, b: B, c: C, d: D, e: E) => G, - fa: HKT[F], - fb: HKT[F], - fc: HKT[F], - fd: HKT[F], - fe: HKT[F] - ): HKT[F] + fa: M_[F], + fb: M_[F], + fc: M_[F], + fd: M_[F], + fe: M_[F] + ): M_[F] combine( f: (a: A, b: B, c: C, d: D, e: E, g: G) => H, - fa: HKT[F], - fb: HKT[F], - fc: HKT[F], - fd: HKT[F], - fe: HKT[F], - fg: HKT[F] - ): HKT[F] - subscribe(fa: HKT[F], next: (v: A) => void, complete?: () => void) + fa: M_[F], + fb: M_[F], + fc: M_[F], + fd: M_[F], + fe: M_[F], + fg: M_[F] + ): M_[F] + subscribe(fa: M_[F], next: (v: A) => void, complete?: () => void) } -export const streamOps: StreamOps = new StreamOps +export const streamOps: StreamOps = new StreamOps diff --git a/src/xs/most.ts b/src/xs/most.ts index 0c8db0d..d007010 100644 --- a/src/xs/most.ts +++ b/src/xs/most.ts @@ -1,32 +1,36 @@ -import { Stream, empty, just, combineArray } from 'most' +import { Stream as MostStream, empty, just, combineArray } from 'most' import { sync, SyncSubject, Subject } from 'most-subject' -import { Subscription, StreamOps } from './index' +import { Subscription, StreamOps } from '.' -declare module './index' { - interface HKT { - Stream: Stream +declare module '.' { + interface M_ { + 'most': MostStream } } StreamOps.prototype.empty = empty StreamOps.prototype.just = just + +StreamOps.prototype.scan = function(f, base, fa) { + return fa.scan(f, base) +} StreamOps.prototype.merge = function(a, b) { return a.merge(b) } -StreamOps.prototype.filter = function (f: (a: A) => boolean, fa: Stream): Stream { +StreamOps.prototype.filter = function (f: (a: A) => boolean, fa: MostStream): MostStream { return fa.filter(f) } StreamOps.prototype.combine = function(f, ...v) { return combineArray(f, v) } -StreamOps.prototype.map = function (f: (a: A) => B, fa: Stream): Stream { +StreamOps.prototype.map = function (f: (a: A) => B, fa: MostStream): MostStream { return fa.map(f) } StreamOps.prototype.subject = function () { return sync() } -StreamOps.prototype.subscribe = function (fa: Stream, next: (v: A) => void, complete: () => void) { +StreamOps.prototype.subscribe = function (fa: MostStream, next: (v: A) => void, complete: () => void) { return fa.recoverWith(x => { console.error(x) return fa diff --git a/src/xs/rx.ts b/src/xs/rx.ts index 5506a87..0806494 100644 --- a/src/xs/rx.ts +++ b/src/xs/rx.ts @@ -1,45 +1,52 @@ -import { Observable } from '@reactivex/rxjs/dist/cjs/Observable' +import { Observable as RxStream } from '@reactivex/rxjs/dist/cjs/Observable' import { Subject } from '@reactivex/rxjs/dist/cjs/Subject' import { Subscription, StreamOps } from './index' import '@reactivex/rxjs/dist/cjs/add/operator/map' import '@reactivex/rxjs/dist/cjs/add/operator/merge' +import '@reactivex/rxjs/dist/cjs/add/operator/scan' import '@reactivex/rxjs/dist/cjs/add/operator/catch' import '@reactivex/rxjs/dist/cjs/add/operator/filter' import '@reactivex/rxjs/dist/cjs/add/observable/empty' +import '@reactivex/rxjs/dist/cjs/add/observable/of' + import '@reactivex/rxjs/dist/cjs/add/observable/combineLatest' declare module './index' { - interface HKT { - Observable: Observable + interface M_ { + '@reactivex/rxjs': RxStream } } -StreamOps.prototype.empty = Observable.empty +export const URI = '@reactivex/rxjs' +export type URI = typeof URI + +StreamOps.prototype.empty = RxStream.empty -StreamOps.prototype.just = Observable.of +StreamOps.prototype.just = RxStream.of +StreamOps.prototype.scan = function(f, base, fa) { + return fa.scan(f, base) +} StreamOps.prototype.combine = function(f, ...v) { - return Observable.combineLatest(v, f) + return RxStream.combineLatest(v, f) } -StreamOps.prototype.filter = function (f: (a: A) => boolean, fa: Observable): Observable { +StreamOps.prototype.filter = function (f: (a: A) => boolean, fa: RxStream): RxStream { return fa.filter(f) } -StreamOps.prototype.map = function (f: (a: A) => B, fa: Observable): Observable { +StreamOps.prototype.map = function (f: (a: A) => B, fa: RxStream): RxStream { return fa.map(f) } StreamOps.prototype.subject = function () { return new Subject() } -StreamOps.prototype.subscribe = function (fa: Observable, next: (v: A) => void, complete?: () => void) { +StreamOps.prototype.subscribe = function (fa: RxStream, next: (v: A) => void, complete?: () => void) { return fa.catch(x => { console.error(x) return fa }).subscribe(next, x => console.error(x), complete) as Subscription } -StreamOps.prototype.merge = function (a: Observable, b: Observable): Observable { +StreamOps.prototype.merge = function (a: RxStream, b: RxStream): RxStream { return a.merge(b) } -export const URI = 'Observable' -export type URI = typeof URI diff --git a/test/test.js b/test/test.js new file mode 100644 index 0000000..39ad33a --- /dev/null +++ b/test/test.js @@ -0,0 +1,128 @@ +const Nightmare = require('nightmare') +const {expect} = require('chai') + +const nightmare = Nightmare({ show: false }); + +describe('Load Example Page', function() { + this.timeout('30s') + let page, test + before(()=>{ + page = nightmare.goto(`file:///${__dirname}/../docs/src/main/tut/examples/index.html`) + }) + after(()=>{ + return page.end() + }) + + describe('#Example 1', () => { + it('display 30', () => { + return page + .wait('#eg1 .result') + .evaluate(() => document.querySelector('#eg1 .result').textContent) + .then(x=>expect(x).to.equal('30')) + }) + }) + + describe('#Example 2', () => { + it('default 30', () => { + return page + .wait('#eg2 .result') + .evaluate(() => document.querySelector('#eg2 .result').textContent) + .then(x=>expect(x).to.equal('30')) + }) + it('Two number multiply', () => { + return page + .insert('input[name="n1"]', '8') + .insert('input[name="n2"]', '9') + .wait('#eg2 .result') + .evaluate(() => document.querySelector('#eg2 .result').textContent) + .then(x=>expect(x).to.equal('4002')) + }) + }) + + describe('#Example 3', () => { + it('default', () => { + return page + .wait('#eg3 .result') + .evaluate(() => document.querySelector('#eg3 .result').textContent) + .then(x=>expect(x).to.equal('Jichao Ouyang')) + }) + it('reactive concatable', () => { + return page + .insert('input[name="firstName"]', 'Hehe') + .insert('input[name="lastName"]', 'Da') + .wait('#eg3 .result') + .evaluate(() => document.querySelector('#eg3 .result').textContent) + .then(x=>expect(x).to.equal('JichaoHehe OuyangDa')) + }) + }) + + + describe('#Example 4', () => { + it('default', () => { + return page + .wait('#eg4 .result') + .evaluate(() => document.querySelector('#eg4 .result').textContent) + .then(x=>expect(x).to.equal('28')) + }) + it('Traverse', () => { + return page + .insert('input[name="traverse3"]', '1') + .insert('input[name="traverse5"]', '2') + .wait('#eg4 .result') + .evaluate(() => document.querySelector('#eg4 .result').textContent) + .then(x=>expect(x).to.equal('121')) + }) + }) + + describe('#Example 5', () => { + it('default', () => { + return page + .wait(() => document.querySelector('#eg5 .result').textContent == '22.86') + .evaluate(() => document.querySelector('#eg5 .result').textContent) + .then(x=>expect(x).to.equal('22.86')) + }) + }) + + describe('#Example 6', () => { + it('increase 3 by click 3 times', () => { + return page + .click('#eg6 input[name="increment"]') + .click('#eg6 input[name="increment"]') + .click('#eg6 input[name="increment"]') + .evaluate(() => document.querySelector('#eg6 .result').textContent) + .then(x=>expect(x).to.equal('3')) + }) + }) + + describe('#Example 7', () => { + it('increase 3 and decrease 4', () => { + return page + .click('#eg7 input[name="increment"]') + .click('#eg7 input[name="increment"]') + .click('#eg7 input[name="increment"]') + .click('#eg7 input[name="decrement"]') + .click('#eg7 input[name="decrement"]') + .click('#eg7 input[name="decrement"]') + .click('#eg7 input[name="decrement"]') + .evaluate(() => document.querySelector('#eg7 .result').textContent) + .then(x=>expect(x).to.equal('-1')) + }) + }) + + describe('#Example 8', () => { + it('increase 3 and decrease 4', () => { + return page + .click('#eg8 input[name="+1"]') + .click('#eg8 input[name="reset"]') + .click('#eg8 input[name="+1"]') + .click('#eg8 input[name="+1"]') + .click('#eg8 input[name="+1"]') + .click('#eg8 input[name="-1"]') + .click('#eg8 input[name="-1"]') + .click('#eg8 input[name="-1"]') + .click('#eg8 input[name="-1"]') + .evaluate(() => document.querySelector('#eg8 .result').textContent) + .then(x=>expect(x).to.equal('-1')) + }) + }) +}) diff --git a/tsconfig.common.json b/tsconfig.common.json new file mode 100644 index 0000000..2f6d9d3 --- /dev/null +++ b/tsconfig.common.json @@ -0,0 +1,53 @@ +{ + "compilerOptions": { + "pretty": true, + "module": "commonjs", /* Specify module code generation: 'commonjs', 'amd', 'system', 'umd' or 'es2015'. */ + "lib": ["dom", "es2015"], /* Specify library files to be included in the compilation: */ + // "allowJs": true, /* Allow javascript files to be compiled. */ + // "checkJs": true, /* Report errors in .js files. */ + "jsx": "react", /* Specify JSX code generation: 'preserve', 'react-native', or 'react'. */ + "declaration": true, /* Generates corresponding '.d.ts' file. */ + // "sourceMap": true, /* Generates corresponding '.map' file. */ + // "outFile": "./", /* Concatenate and emit output to single file. */ + // "outDir": "./", /* Redirect output structure to the directory. */ + // "rootDir": "./", /* Specify the root directory of input files. Use to control the output directory structure with --outDir. */ + // "removeComments": true, /* Do not emit comments to output. */ + // "noEmit": true, /* Do not emit outputs. */ + // "importHelpers": true, /* Import emit helpers from 'tslib'. */ + // "downlevelIteration": true, /* Provide full support for iterables in 'for-of', spread, and destructuring when targeting 'ES5' or 'ES3'. */ + // "isolatedModules": true, /* Transpile each file as a separate module (similar to 'ts.transpileModule'). */ + + /* Strict Type-Checking Options */ + "strict": false, /* Enable all strict type-checking options. */ + "noImplicitAny": false, /* Raise error on expressions and declarations with an implied 'any' type. */ + // "strictNullChecks": true, /* Enable strict null checks. */ + // "noImplicitThis": true, /* Raise error on 'this' expressions with an implied 'any' type. */ + // "alwaysStrict": true, /* Parse in strict mode and emit "use strict" for each source file. */ + + /* Additional Checks */ + // "noUnusedLocals": true, /* Report errors on unused locals. */ + // "noUnusedParameters": true, /* Report errors on unused parameters. */ + // "noImplicitReturns": true, /* Report error when not all code paths in function return a value. */ + // "noFallthroughCasesInSwitch": true, /* Report errors for fallthrough cases in switch statement. */ + + /* Module Resolution Options */ + // "moduleResolution": "node", /* Specify module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6). */ + // "baseUrl": "./", /* Base directory to resolve non-absolute module names. */ + // "paths": {}, /* A series of entries which re-map imports to lookup locations relative to the 'baseUrl'. */ + // "rootDirs": [], /* List of root folders whose combined content represents the structure of the project at runtime. */ + // "typeRoots": ["./node_modules/@types"], /* List of folders to include type definitions from. */ + "types": ["node"], /* Type declaration files to be included in compilation. */ + // "allowSyntheticDefaultImports": true, /* Allow default imports from modules with no default export. This does not affect code emit, just typechecking. */ + + /* Source Map Options */ + // "sourceRoot": "./", /* Specify the location where debugger should locate TypeScript files instead of source locations. */ + // "mapRoot": "./", /* Specify the location where debugger should locate map files instead of generated locations. */ + // "inlineSourceMap": true, /* Emit a single file with source maps instead of having a separate file. */ + // "inlineSources": true, /* Emit the source alongside the sourcemaps within a single file; requires '--inlineSourceMap' or '--sourceMap' to be set. */ + + /* Experimental Options */ + // "experimentalDecorators": true, /* Enables experimental support for ES7 decorators. */ + // "emitDecoratorMetadata": true, /* Enables experimental support for emitting type metadata for decorators. */ + "target": "es5" + } +} diff --git a/tsconfig.examples.json b/tsconfig.examples.json new file mode 100644 index 0000000..08ea2d1 --- /dev/null +++ b/tsconfig.examples.json @@ -0,0 +1,8 @@ +{ + "extends": "./tsconfig.common.json", + "include": [ + "docs/src/main/tut/examples/*.tsx" + ], + "compilerOptions": { + } +} diff --git a/tsconfig.json b/tsconfig.json index 2c1689d..fa7ff01 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,19 +1,14 @@ { + "extends": "./tsconfig.common.json", "include": [ "src/**/*.ts", "src/**/*.tsx" ], + "exclude": [ + "src/__tests__/**/*" + ], "compilerOptions": { - "module": "commonjs", - "lib": ["es2015","dom"], - "target": "es5", "outDir": "lib", - "strict": true, - "jsx": "react", - "declarationDir": "lib", - "declaration": true, - "noImplicitAny": false, - "sourceMap": false, - "pretty": true + "declarationDir": "lib" } } diff --git a/yarn.lock b/yarn.lock index 25f3a62..dc1a6f0 100644 --- a/yarn.lock +++ b/yarn.lock @@ -26,20 +26,47 @@ version "8.0.5" resolved "https://registry.yarnpkg.com/@types/node/-/node-8.0.5.tgz#71ac2a2c33a4231dd2427f1b5a5b66ad2b185b5f" +"@types/node@^8.0.24": + version "8.0.28" + resolved "https://registry.yarnpkg.com/@types/node/-/node-8.0.28.tgz#86206716f8d9251cf41692e384264cbd7058ad60" + "@types/react@^16.0.5": version "16.0.5" resolved "https://registry.yarnpkg.com/@types/react/-/react-16.0.5.tgz#d713cf67cc211dea20463d2a0b66005c22070c4b" +JSONStream@^1.0.3: + version "1.3.1" + resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-1.3.1.tgz#707f761e01dae9e16f1bcf93703b78c70966579a" + dependencies: + jsonparse "^1.2.0" + through ">=2.2.7 <3" + abab@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/abab/-/abab-1.0.3.tgz#b81de5f7274ec4e756d797cd834f303642724e5d" +abbrev@1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.0.tgz#d0554c2256636e2f56e7c2e5ad183f859428d81f" + +accessory@~1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/accessory/-/accessory-1.1.0.tgz#7833e9839a32ded76d26021f36a41707a520f593" + dependencies: + ap "~0.2.0" + balanced-match "~0.2.0" + dot-parts "~1.0.0" + acorn-globals@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-3.1.0.tgz#fd8270f71fbb4996b004fa880ee5d46573a731bf" dependencies: acorn "^4.0.4" +acorn@^4.0.3: + version "4.0.13" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-4.0.13.tgz#105495ae5361d697bd195c825192e1ad7f253787" + acorn@^4.0.4: version "4.0.11" resolved "https://registry.yarnpkg.com/acorn/-/acorn-4.0.11.tgz#edcda3bd937e7556410d42ed5860f67399c794c0" @@ -81,6 +108,10 @@ ansi-styles@^3.0.0: dependencies: color-convert "^1.0.0" +any-promise@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f" + anymatch@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-1.3.0.tgz#a3e52fa39168c825ff57b0248126ce5a8ff95507" @@ -88,12 +119,27 @@ anymatch@^1.3.0: arrify "^1.0.0" micromatch "^2.1.5" +ap@~0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/ap/-/ap-0.2.0.tgz#ae0942600b29912f0d2b14ec60c45e8f330b6110" + append-transform@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/append-transform/-/append-transform-0.4.0.tgz#d76ebf8ca94d276e247a36bad44a4b74ab611991" dependencies: default-require-extensions "^1.0.0" +aproba@^1.0.3: + version "1.1.2" + resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.1.2.tgz#45c6629094de4e96f693ef7eab74ae079c240fc1" + +are-we-there-yet@~1.1.2: + version "1.1.4" + resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.4.tgz#bb5dca382bb94f05e15194373d16fd3ba1ca110d" + dependencies: + delegates "^1.0.0" + readable-stream "^2.0.6" + argparse@^1.0.7: version "1.0.9" resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.9.tgz#73d83bc263f86e97f8cc4f6bae1b0e90a7d22c86" @@ -114,6 +160,22 @@ array-equal@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/array-equal/-/array-equal-1.0.0.tgz#8c2a5ef2472fd9ea742b04c77a75093ba2757c93" +array-filter@~0.0.0: + version "0.0.1" + resolved "https://registry.yarnpkg.com/array-filter/-/array-filter-0.0.1.tgz#7da8cf2e26628ed732803581fd21f67cacd2eeec" + +array-find-index@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1" + +array-map@~0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/array-map/-/array-map-0.0.0.tgz#88a2bab73d1cf7bcd5c1b118a003f66f665fa662" + +array-reduce@~0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/array-reduce/-/array-reduce-0.0.0.tgz#173899d3ffd1c7d9383e4479525dbe278cab5f2b" + array-unique@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53" @@ -126,6 +188,14 @@ asap@~2.0.3: version "2.0.5" resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.5.tgz#522765b50c3510490e52d7dcfe085ef9ba96958f" +asn1.js@^4.0.0: + version "4.9.1" + resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-4.9.1.tgz#48ba240b45a9280e94748990ba597d216617fd40" + dependencies: + bn.js "^4.0.0" + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + asn1@~0.2.3: version "0.2.3" resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.3.tgz#dac8787713c9966849fc8180777ebe9c1ddf3b86" @@ -138,6 +208,26 @@ assert-plus@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-0.2.0.tgz#d74e1b87e7affc0db8aadb7021f3fe48101ab234" +assert@^1.4.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/assert/-/assert-1.4.1.tgz#99912d591836b5a6f5b345c0f07eefc08fc65d91" + dependencies: + util "0.10.3" + +assertion-error@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-1.0.2.tgz#13ca515d86206da0bac66e834dd397d87581094c" + +astw@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/astw/-/astw-2.2.0.tgz#7bd41784d32493987aeb239b6b4e1c57a873b917" + dependencies: + acorn "^4.0.3" + +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.4.0: version "1.5.2" resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" @@ -320,12 +410,34 @@ 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@~0.2.0: + version "0.2.1" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-0.2.1.tgz#7bc658b4bed61eee424ad74f75f5c3e2c4df3cc7" + +base64-js@^1.0.2: + version "1.2.1" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.2.1.tgz#a91947da1f4a516ea38e5b4ec0ec3773675e0886" + bcrypt-pbkdf@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz#63bc5dcb61331b92bc05fd528953c33462a06f8d" dependencies: tweetnacl "^0.14.3" +binary-extensions@^1.0.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.10.0.tgz#9aeb9a6c5e88638aad171e167f5900abe24835d0" + +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" + +bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.4.0: + version "4.11.8" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.8.tgz#2cde09eb5ee341f484746bb0309b3253b1b1442f" + boolbase@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" @@ -351,12 +463,144 @@ braces@^1.8.2: preserve "^0.2.0" repeat-element "^1.1.2" -browser-resolve@^1.11.2: +brorand@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" + +browser-pack@^6.0.1: + version "6.0.2" + resolved "https://registry.yarnpkg.com/browser-pack/-/browser-pack-6.0.2.tgz#f86cd6cef4f5300c8e63e07a4d512f65fbff4531" + dependencies: + JSONStream "^1.0.3" + combine-source-map "~0.7.1" + defined "^1.0.0" + through2 "^2.0.0" + umd "^3.0.0" + +browser-resolve@^1.11.0, browser-resolve@^1.11.2, browser-resolve@^1.7.0: version "1.11.2" resolved "https://registry.yarnpkg.com/browser-resolve/-/browser-resolve-1.11.2.tgz#8ff09b0a2c421718a1051c260b32e48f442938ce" dependencies: resolve "1.1.7" +browser-stdout@1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.0.tgz#f351d32969d32fa5d7a5567154263d928ae3bd1f" + +browserify-aes@^1.0.0, browserify-aes@^1.0.4: + version "1.0.8" + resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.0.8.tgz#c8fa3b1b7585bb7ba77c5560b60996ddec6d5309" + dependencies: + buffer-xor "^1.0.3" + cipher-base "^1.0.0" + create-hash "^1.1.0" + evp_bytestokey "^1.0.3" + inherits "^2.0.1" + safe-buffer "^5.0.1" + +browserify-cipher@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/browserify-cipher/-/browserify-cipher-1.0.0.tgz#9988244874bf5ed4e28da95666dcd66ac8fc363a" + dependencies: + browserify-aes "^1.0.4" + browserify-des "^1.0.0" + evp_bytestokey "^1.0.0" + +browserify-des@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/browserify-des/-/browserify-des-1.0.0.tgz#daa277717470922ed2fe18594118a175439721dd" + dependencies: + cipher-base "^1.0.1" + des.js "^1.0.0" + inherits "^2.0.1" + +browserify-rsa@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.0.1.tgz#21e0abfaf6f2029cf2fafb133567a701d4135524" + dependencies: + bn.js "^4.1.0" + randombytes "^2.0.1" + +browserify-shim@^3.8.14: + version "3.8.14" + resolved "https://registry.yarnpkg.com/browserify-shim/-/browserify-shim-3.8.14.tgz#bf1057026932d3253c75ef7dd714f3b877edec6b" + dependencies: + exposify "~0.5.0" + mothership "~0.2.0" + rename-function-calls "~0.1.0" + resolve "~0.6.1" + through "~2.3.4" + +browserify-sign@^4.0.0: + version "4.0.4" + resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.0.4.tgz#aa4eb68e5d7b658baa6bf6a57e630cbd7a93d298" + dependencies: + bn.js "^4.1.1" + browserify-rsa "^4.0.0" + create-hash "^1.1.0" + create-hmac "^1.1.2" + elliptic "^6.0.0" + inherits "^2.0.1" + parse-asn1 "^5.0.0" + +browserify-zlib@~0.1.2: + version "0.1.4" + resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.1.4.tgz#bb35f8a519f600e0fa6b8485241c979d0141fb2d" + dependencies: + pako "~0.2.0" + +browserify@^14.0.0, browserify@^14.4.0: + version "14.4.0" + resolved "https://registry.yarnpkg.com/browserify/-/browserify-14.4.0.tgz#089a3463af58d0e48d8cd4070b3f74654d5abca9" + dependencies: + JSONStream "^1.0.3" + assert "^1.4.0" + browser-pack "^6.0.1" + browser-resolve "^1.11.0" + browserify-zlib "~0.1.2" + buffer "^5.0.2" + cached-path-relative "^1.0.0" + concat-stream "~1.5.1" + console-browserify "^1.1.0" + constants-browserify "~1.0.0" + crypto-browserify "^3.0.0" + defined "^1.0.0" + deps-sort "^2.0.0" + domain-browser "~1.1.0" + duplexer2 "~0.1.2" + events "~1.1.0" + glob "^7.1.0" + has "^1.0.0" + htmlescape "^1.1.0" + https-browserify "^1.0.0" + inherits "~2.0.1" + insert-module-globals "^7.0.0" + labeled-stream-splicer "^2.0.0" + module-deps "^4.0.8" + os-browserify "~0.1.1" + parents "^1.0.1" + path-browserify "~0.0.0" + process "~0.11.0" + punycode "^1.3.2" + querystring-es3 "~0.2.0" + read-only-stream "^2.0.0" + readable-stream "^2.0.2" + resolve "^1.1.4" + shasum "^1.0.0" + shell-quote "^1.6.1" + stream-browserify "^2.0.0" + stream-http "^2.0.0" + string_decoder "~1.0.0" + subarg "^1.0.0" + syntax-error "^1.1.1" + through2 "^2.0.0" + timers-browserify "^1.0.1" + tty-browserify "~0.0.0" + url "~0.11.0" + util "~0.10.1" + vm-browserify "~0.0.1" + xtend "^4.0.0" + bser@1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/bser/-/bser-1.0.2.tgz#381116970b2a6deea5646dd15dd7278444b56169" @@ -373,18 +617,48 @@ buffer-shims@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/buffer-shims/-/buffer-shims-1.0.0.tgz#9978ce317388c649ad8793028c3477ef044a8b51" +buffer-xor@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" + +buffer@^5.0.2: + version "5.0.7" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.0.7.tgz#570a290b625cf2603290c1149223d27ccf04db97" + dependencies: + base64-js "^1.0.2" + ieee754 "^1.1.4" + builtin-modules@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" +builtin-status-codes@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8" + +cached-path-relative@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/cached-path-relative/-/cached-path-relative-1.0.1.tgz#d09c4b52800aa4c078e2dd81a869aac90d2e54e7" + callsites@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50" +camelcase-keys@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-2.1.0.tgz#308beeaffdf28119051efa1d932213c91b8f92e7" + dependencies: + camelcase "^2.0.0" + map-obj "^1.0.0" + camelcase@^1.0.2: version "1.2.1" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-1.2.1.tgz#9bb5304d2e0b56698b2c758b08a3eaa9daa58a39" +camelcase@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f" + camelcase@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-3.0.0.tgz#32fc4b9fcdaf845fcdf7e73bb97cac2261f0ab0a" @@ -404,6 +678,17 @@ center-align@^0.1.1: align-text "^0.1.3" lazy-cache "^1.0.3" +chai@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/chai/-/chai-4.1.2.tgz#0f64584ba642f0f2ace2806279f4f06ca23ad73c" + dependencies: + assertion-error "^1.0.1" + check-error "^1.0.1" + deep-eql "^3.0.0" + get-func-name "^2.0.0" + pathval "^1.0.0" + type-detect "^4.0.0" + chalk@^1.1.0, chalk@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" @@ -414,6 +699,10 @@ chalk@^1.1.0, chalk@^1.1.3: strip-ansi "^3.0.0" supports-color "^2.0.0" +check-error@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/check-error/-/check-error-1.0.2.tgz#574d312edd88bb5dd8912e9286dd6c0aed4aac82" + cheerio@^0.22.0: version "0.22.0" resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-0.22.0.tgz#a9baa860a3f9b595a6b81b1a86873121ed3a269e" @@ -435,10 +724,32 @@ cheerio@^0.22.0: lodash.reject "^4.4.0" lodash.some "^4.4.0" +chokidar@^1.0.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-1.7.0.tgz#798e689778151c8076b4b360e5edd28cda2bb468" + dependencies: + anymatch "^1.3.0" + async-each "^1.0.0" + glob-parent "^2.0.0" + inherits "^2.0.1" + is-binary-path "^1.0.0" + is-glob "^2.0.0" + path-is-absolute "^1.0.0" + readdirp "^2.0.0" + optionalDependencies: + fsevents "^1.0.0" + ci-info@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-1.0.0.tgz#dc5285f2b4e251821683681c381c3388f46ec534" +cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de" + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + cliui@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/cliui/-/cliui-2.1.0.tgz#4b475760ff80264c762c3a1719032e91c7fea0d1" @@ -455,6 +766,10 @@ cliui@^3.2.0: strip-ansi "^3.0.1" wrap-ansi "^2.0.0" +clone@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.2.tgz#260b7a99ebb1edfe247538175f783243cb19d149" + co@^4.6.0: version "4.6.0" resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" @@ -473,16 +788,71 @@ color-name@^1.1.1: version "1.1.2" resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.2.tgz#5c8ab72b64bd2215d617ae9559ebb148475cf98d" +combine-source-map@~0.7.1: + version "0.7.2" + resolved "https://registry.yarnpkg.com/combine-source-map/-/combine-source-map-0.7.2.tgz#0870312856b307a87cc4ac486f3a9a62aeccc09e" + dependencies: + convert-source-map "~1.1.0" + inline-source-map "~0.6.0" + lodash.memoize "~3.0.3" + source-map "~0.5.3" + 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" dependencies: delayed-stream "~1.0.0" +commander@1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/commander/-/commander-1.0.4.tgz#5edeb1aee23c4fb541a6b70d692abef19669a2d3" + dependencies: + keypress "0.1.x" + +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" + +commander@~2.11.0: + version "2.11.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.11.0.tgz#157152fd1e7a6c8d98a5b715cf376df928004563" + 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.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.0.tgz#0aac662fd52be78964d5532f694784e70110acf7" + dependencies: + inherits "^2.0.3" + readable-stream "^2.2.2" + typedarray "^0.0.6" + +concat-stream@~1.5.0, concat-stream@~1.5.1: + version "1.5.2" + resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.5.2.tgz#708978624d856af41a5a741defdd261da752c266" + dependencies: + inherits "~2.0.1" + readable-stream "~2.0.0" + typedarray "~0.0.5" + +console-browserify@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.1.0.tgz#f0241c45730a9fc6323b206dbf38edc741d0bb10" + dependencies: + date-now "^0.1.4" + +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" + +constants-browserify@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75" + 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" @@ -491,6 +861,10 @@ convert-source-map@^1.1.0, convert-source-map@^1.4.0: version "1.5.0" resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.5.0.tgz#9acd70851c6d5dfdd93d9282e5edf94a03ff46b5" +convert-source-map@~1.1.0: + version "1.1.3" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.1.3.tgz#4829c877e9fe49b3161f3bf3673888e204699860" + core-js@^1.0.0: version "1.2.7" resolved "https://registry.yarnpkg.com/core-js/-/core-js-1.2.7.tgz#652294c14651db28fa93bd2d5ff2983a4f08c636" @@ -503,6 +877,33 @@ 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" +create-ecdh@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.0.tgz#888c723596cdf7612f6498233eebd7a35301737d" + dependencies: + bn.js "^4.1.0" + elliptic "^6.0.0" + +create-hash@^1.1.0, create-hash@^1.1.2: + version "1.1.3" + resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.1.3.tgz#606042ac8b9262750f483caddab0f5819172d8fd" + dependencies: + cipher-base "^1.0.1" + inherits "^2.0.1" + ripemd160 "^2.0.0" + sha.js "^2.4.0" + +create-hmac@^1.1.0, create-hmac@^1.1.2, create-hmac@^1.1.4: + version "1.1.6" + resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.6.tgz#acb9e221a4e17bdb076e90657c42b93e3726cf06" + dependencies: + cipher-base "^1.0.3" + create-hash "^1.1.0" + inherits "^2.0.1" + ripemd160 "^2.0.0" + safe-buffer "^5.0.1" + sha.js "^2.4.8" + create-react-class@^15.6.0: version "15.6.0" resolved "https://registry.yarnpkg.com/create-react-class/-/create-react-class-15.6.0.tgz#ab448497c26566e1e29413e883207d57cfe7bed4" @@ -524,6 +925,21 @@ cryptiles@2.x.x: dependencies: boom "2.x.x" +crypto-browserify@^3.0.0: + version "3.11.1" + resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.11.1.tgz#948945efc6757a400d6e5e5af47194d10064279f" + dependencies: + browserify-cipher "^1.0.0" + browserify-sign "^4.0.0" + create-ecdh "^4.0.0" + create-hash "^1.1.0" + create-hmac "^1.1.0" + diffie-hellman "^5.0.0" + inherits "^2.0.1" + pbkdf2 "^3.0.3" + public-encrypt "^4.0.0" + randombytes "^2.0.0" + css-select@~1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/css-select/-/css-select-1.2.0.tgz#2b3a110539c5355f1cd8d314623e870b121ec858" @@ -547,22 +963,64 @@ cssom@0.3.x, "cssom@>= 0.3.2 < 0.4.0": dependencies: cssom "0.3.x" +currently-unhandled@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea" + dependencies: + array-find-index "^1.0.1" + dashdash@^1.12.0: version "1.14.1" resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" dependencies: assert-plus "^1.0.0" +date-now@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/date-now/-/date-now-0.1.4.tgz#eaf439fd4d4848ad74e5cc7dbef200672b9e345b" + +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.6.8, debug@^2.1.3: + version "2.6.8" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.8.tgz#e731531ca2ede27d188222427da17821d68ff4fc" + dependencies: + ms "2.0.0" + debug@^2.1.1, debug@^2.2.0, debug@^2.6.3: version "2.6.6" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.6.tgz#a9fa6fbe9ca43cf1e79f73b75c0189cbb7d6db5a" dependencies: ms "0.7.3" -decamelize@^1.0.0, decamelize@^1.1.1: +decamelize@^1.0.0, decamelize@^1.1.1, decamelize@^1.1.2: version "1.2.0" resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" +deep-defaults@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/deep-defaults/-/deep-defaults-1.0.4.tgz#1a9762e2b6c8d6a4e9931b8ee7ff8cdcee1d1750" + dependencies: + lodash "3.0.x" + +deep-eql@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-3.0.1.tgz#dfc9404400ad1c8fe023e7da1df1c147c4b444df" + dependencies: + type-detect "^4.0.0" + +deep-equal@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.0.1.tgz#f5d260292b660e084eff4cdbc9f08ad3247448b5" + +deep-extend@~0.4.0: + version "0.4.2" + resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.4.2.tgz#48b699c27e334bf89f10892be432f6e4c7d34a7f" + deep-is@~0.1.3: version "0.1.3" resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" @@ -573,6 +1031,12 @@ default-require-extensions@^1.0.0: dependencies: strip-bom "^2.0.0" +defaults@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.3.tgz#c656051e9817d9ff08ed881477f3fe4019f3ef7d" + dependencies: + clone "^1.0.2" + define-properties@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.2.tgz#83a73f2fea569898fb737193c8f873caf6d45c94" @@ -580,20 +1044,66 @@ define-properties@^1.1.2: foreach "^2.0.5" object-keys "^1.0.8" +defined@^1.0.0, defined@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/defined/-/defined-1.0.0.tgz#c98d9bcef75674188e110969151199e39b1fa693" + delayed-stream@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" +delegates@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" + +deps-sort@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/deps-sort/-/deps-sort-2.0.0.tgz#091724902e84658260eb910748cccd1af6e21fb5" + dependencies: + JSONStream "^1.0.3" + shasum "^1.0.0" + subarg "^1.0.0" + through2 "^2.0.0" + +des.js@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.0.tgz#c074d2e2aa6a8a9a07dbd61f9a15c2cd83ec8ecc" + dependencies: + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + 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" -diff@^3.2.0: +detective@^4.0.0, detective@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/detective/-/detective-4.5.0.tgz#6e5a8c6b26e6c7a254b1c6b6d7490d98ec91edd1" + dependencies: + acorn "^4.0.3" + defined "^1.0.0" + +detective@~3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/detective/-/detective-3.1.0.tgz#77782444ab752b88ca1be2e9d0a0395f1da25eed" + dependencies: + escodegen "~1.1.0" + esprima-fb "3001.1.0-dev-harmony-fb" + +diff@3.2.0, diff@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/diff/-/diff-3.2.0.tgz#c9ce393a4b7cbd0b058a725c93df299027868ff9" +diffie-hellman@^5.0.0: + version "5.0.2" + resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.2.tgz#b5835739270cfe26acf632099fded2a07f209e5e" + dependencies: + bn.js "^4.1.0" + miller-rabin "^4.0.0" + randombytes "^2.0.0" + dom-serializer@0, dom-serializer@~0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.1.0.tgz#073c697546ce0780ce23be4a28e293e40bc30c82" @@ -601,6 +1111,10 @@ dom-serializer@0, dom-serializer@~0.1.0: domelementtype "~1.1.1" entities "~1.1.1" +domain-browser@~1.1.0: + version "1.1.7" + resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.1.7.tgz#867aa4b093faa05f1de08c06f4d7b21fdf8698bc" + domelementtype@1, domelementtype@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.0.tgz#b17aed82e8ab59e52dd9c19b1756e0fc187204c2" @@ -622,22 +1136,79 @@ domutils@1.5.1, domutils@^1.5.1: dom-serializer "0" domelementtype "1" +dot-parts@~1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/dot-parts/-/dot-parts-1.0.1.tgz#884bd7bcfc3082ffad2fe5db53e494d8f3e0743f" + +duplexer2@^0.1.2, duplexer2@~0.1.0, duplexer2@~0.1.2: + version "0.1.4" + resolved "https://registry.yarnpkg.com/duplexer2/-/duplexer2-0.1.4.tgz#8b12dab878c0d69e3e7891051662a32fc6bddcc1" + dependencies: + readable-stream "^2.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" dependencies: jsbn "~0.1.0" +electron-download@^3.0.1: + version "3.3.0" + resolved "https://registry.yarnpkg.com/electron-download/-/electron-download-3.3.0.tgz#2cfd54d6966c019c4d49ad65fbe65cc9cdef68c8" + dependencies: + debug "^2.2.0" + fs-extra "^0.30.0" + home-path "^1.0.1" + minimist "^1.2.0" + nugget "^2.0.0" + path-exists "^2.1.0" + rc "^1.1.2" + semver "^5.3.0" + sumchecker "^1.2.0" + +electron@^1.4.4: + version "1.8.0" + resolved "https://registry.yarnpkg.com/electron/-/electron-1.8.0.tgz#896f429b1e664f496f62b9cc7ee6a67a71375f31" + dependencies: + "@types/node" "^8.0.24" + electron-download "^3.0.1" + extract-zip "^1.0.3" + +elliptic@^6.0.0: + version "6.4.0" + resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.4.0.tgz#cac9af8762c85836187003c8dfe193e5e2eae5df" + dependencies: + bn.js "^4.4.0" + brorand "^1.0.1" + hash.js "^1.0.0" + hmac-drbg "^1.0.0" + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + minimalistic-crypto-utils "^1.0.0" + 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" +enqueue@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/enqueue/-/enqueue-1.0.2.tgz#9014e9bce570ee93ca96e6c8e63ad54c192b6bc8" + dependencies: + sliced "0.0.5" + entities@^1.1.1, entities@~1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.1.tgz#6e5c2d0a5621b5dadaecef80b90edfb5cd7772f0" +envify@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/envify/-/envify-4.1.0.tgz#f39ad3db9d6801b4e6b478b61028d3f0b6819f7e" + dependencies: + esprima "^4.0.0" + through "~2.3.4" + enzyme@^2.8.2: version "2.8.2" resolved "https://registry.yarnpkg.com/enzyme/-/enzyme-2.8.2.tgz#6c8bcb05012abc4aa4bc3213fb23780b9b5b1714" @@ -665,6 +1236,16 @@ error-ex@^1.2.0: dependencies: is-arrayish "^0.2.1" +es-abstract@^1.5.0: + version "1.8.2" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.8.2.tgz#25103263dc4decbda60e0c737ca32313518027ee" + dependencies: + 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" + es-abstract@^1.6.1: version "1.7.0" resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.7.0.tgz#dfade774e01bfcd97f96180298c449c8623fb94c" @@ -682,7 +1263,11 @@ es-to-primitive@^1.1.1: is-date-object "^1.0.1" is-symbol "^1.0.1" -escape-string-regexp@^1.0.2: +es6-promise@^4.0.5: + version "4.1.1" + resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.1.1.tgz#8811e90915d9a0dba36274f0b242dbda78f9c92a" + +escape-string-regexp@1.0.5, escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.3: version "1.0.5" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" @@ -697,6 +1282,20 @@ escodegen@^1.6.1: optionalDependencies: source-map "~0.2.0" +escodegen@~1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.1.0.tgz#c663923f6e20aad48d0c0fa49f31c6d4f49360cf" + dependencies: + esprima "~1.0.4" + estraverse "~1.5.0" + esutils "~1.0.0" + optionalDependencies: + source-map "~0.1.30" + +esprima-fb@3001.1.0-dev-harmony-fb: + version "3001.1.0-dev-harmony-fb" + resolved "https://registry.yarnpkg.com/esprima-fb/-/esprima-fb-3001.0001.0000-dev-harmony-fb.tgz#b77d37abcd38ea0b77426bb8bc2922ce6b426411" + esprima@^2.7.1: version "2.7.3" resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581" @@ -705,14 +1304,41 @@ esprima@^3.1.1: version "3.1.3" resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633" +esprima@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.0.tgz#4499eddcd1110e0b218bacf2fa7f7f59f55ca804" + +esprima@~1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-1.0.4.tgz#9f557e08fc3b4d26ece9dd34f8fbf476b62585ad" + estraverse@^1.9.1: version "1.9.3" resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-1.9.3.tgz#af67f2dc922582415950926091a4005d29c9bb44" +estraverse@~1.5.0: + version "1.5.1" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-1.5.1.tgz#867a3e8e58a9f84618afb6c2ddbcd916b7cbaf71" + esutils@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" +esutils@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-1.0.0.tgz#8151d358e20c8acc7fb745e7472c0025fe496570" + +events@~1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/events/-/events-1.1.1.tgz#9ebdb7635ad099c70dcc4c2a1f5004288e8bd924" + +evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02" + dependencies: + md5.js "^1.3.4" + safe-buffer "^5.1.1" + exec-sh@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.2.0.tgz#14f75de3f20d286ef933099b2ce50a90359cef10" @@ -743,6 +1369,16 @@ expand-range@^1.8.1: dependencies: fill-range "^2.1.0" +exposify@~0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/exposify/-/exposify-0.5.0.tgz#f92d0094c265b3f553e1fa456a03a1883d1059cc" + dependencies: + globo "~1.1.0" + map-obj "~1.0.1" + replace-requires "~1.0.3" + through2 "~0.4.0" + transformify "~0.1.1" + extend@~3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.1.tgz#a755ea7bc1adfcc5a31ce7e762dbaadc5e636444" @@ -753,6 +1389,15 @@ extglob@^0.3.1: dependencies: is-extglob "^1.0.0" +extract-zip@^1.0.3: + version "1.6.5" + resolved "https://registry.yarnpkg.com/extract-zip/-/extract-zip-1.6.5.tgz#99a06735b6ea20ea9b705d779acffcc87cff0440" + dependencies: + concat-stream "1.6.0" + debug "2.2.0" + mkdirp "0.5.0" + yauzl "2.4.1" + extsprintf@1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.0.2.tgz#e1080e0658e300b06294990cc70e1502235fd550" @@ -785,6 +1430,12 @@ fbjs@^0.8.9: setimmediate "^1.0.5" ua-parser-js "^0.7.9" +fd-slicer@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/fd-slicer/-/fd-slicer-1.0.1.tgz#8b5bcbd9ec327c5041bf9ab023fd6750f1177e65" + dependencies: + pend "~1.2.0" + filename-regex@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.1.tgz#c1c4b9bee3e09725ddb106b75c1e301fe2f18b26" @@ -806,6 +1457,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: version "1.1.2" resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" @@ -819,6 +1474,12 @@ find-up@^2.0.0, find-up@^2.1.0: dependencies: locate-path "^2.0.0" +for-each@~0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.2.tgz#2c40450b9348e97f281322593ba96704b9abd4d4" + dependencies: + is-function "~1.0.0" + for-in@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" @@ -845,6 +1506,16 @@ form-data@~2.1.1: combined-stream "^1.0.5" mime-types "^2.1.12" +fs-extra@^0.30.0: + version "0.30.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-0.30.0.tgz#f233ffcc08d4da7d432daa449776989db1df93f0" + dependencies: + graceful-fs "^4.1.2" + jsonfile "^2.1.0" + klaw "^1.0.0" + path-is-absolute "^1.0.0" + rimraf "^2.2.8" + fs-extra@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-3.0.1.tgz#3794f378c58b342ea7dbbb23095109c4b3b62291" @@ -857,10 +1528,42 @@ fs.realpath@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" +fsevents@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.1.2.tgz#3282b713fb3ad80ede0e9fcf4611b5aa6fc033f4" + dependencies: + nan "^2.3.0" + node-pre-gyp "^0.6.36" + +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.10, fstream@^1.0.2: + 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, function-bind@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.0.tgz#16176714c801798e4e8f2cf7f7529467bb4a5771" +function-bind@^1.1.1, function-bind@~1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + +function-source@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/function-source/-/function-source-0.1.0.tgz#d9104bf3e46788b55468c02bf1b2fabcf8fc19af" + function.prototype.name@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.0.0.tgz#5f523ca64e491a5f95aba80cc1e391080a14482e" @@ -869,10 +1572,31 @@ function.prototype.name@^1.0.0: function-bind "^1.1.0" is-callable "^1.1.2" +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" + 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-func-name@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/get-func-name/-/get-func-name-2.0.0.tgz#ead774abee72e20409433a066366023dd6887a41" + +get-stdin@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe" + get-stream@^2.2.0: version "2.3.1" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-2.3.1.tgz#5f38f93f346009666ee0150a054167f91bdd95de" @@ -906,7 +1630,7 @@ glob-parent@^2.0.0: dependencies: is-glob "^2.0.0" -glob@^7.0.3, glob@^7.0.5, glob@^7.1.1: +glob@7.1.1, glob@^7.0.3, glob@^7.0.5, glob@^7.1.1: version "7.1.1" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.1.tgz#805211df04faaf1c63a3600306cdf5ade50b2ec8" dependencies: @@ -917,14 +1641,41 @@ glob@^7.0.3, glob@^7.0.5, glob@^7.1.1: once "^1.3.0" path-is-absolute "^1.0.0" +glob@^7.1.0, 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.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + globals@^9.0.0: version "9.17.0" resolved "https://registry.yarnpkg.com/globals/-/globals-9.17.0.tgz#0c0ca696d9b9bb694d2e5470bd37777caad50286" -graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.6: +globo@~1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/globo/-/globo-1.1.0.tgz#0d26098955dea422eb2001b104898b0a101caaf3" + dependencies: + accessory "~1.1.0" + is-defined "~1.0.0" + ternary "~1.0.0" + +graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.1.9: 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" + +growl@1.9.2: + version "1.9.2" + resolved "https://registry.yarnpkg.com/growl/-/growl-1.9.2.tgz#0ea7743715db8d8de2c5ede1775e1b45ac85c02f" + growly@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081" @@ -960,12 +1711,42 @@ has-flag@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa" -has@^1.0.1: +has-require@~1.2.1: + version "1.2.2" + resolved "https://registry.yarnpkg.com/has-require/-/has-require-1.2.2.tgz#921675ab130dbd9768fc8da8f1a8e242dfa41774" + dependencies: + escape-string-regexp "^1.0.3" + +has-unicode@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" + +has@^1.0.0, has@^1.0.1, 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" +hash-base@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-2.0.2.tgz#66ea1d856db4e8a5470cadf6fce23ae5244ef2e1" + dependencies: + inherits "^2.0.1" + +hash-base@^3.0.0: + version "3.0.4" + resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.0.4.tgz#5fc8686847ecd73499403319a6b0a3f3f6ae4918" + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + +hash.js@^1.0.0, hash.js@^1.0.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.3.tgz#340dedbe6290187151c1ea1d777a3448935df846" + dependencies: + inherits "^2.0.3" + minimalistic-assert "^1.0.0" + hawk@~3.1.3: version "3.1.3" resolved "https://registry.yarnpkg.com/hawk/-/hawk-3.1.3.tgz#078444bd7c1640b0fe540d2c9b73d59678e8e1c4" @@ -975,6 +1756,18 @@ hawk@~3.1.3: hoek "2.x.x" sntp "1.x.x" +he@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/he/-/he-1.1.1.tgz#93410fd21b009735151f8868c2f271f3427e23fd" + +hmac-drbg@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" + dependencies: + hash.js "^1.0.3" + minimalistic-assert "^1.0.0" + minimalistic-crypto-utils "^1.0.1" + hoek@2.x.x: version "2.16.3" resolved "https://registry.yarnpkg.com/hoek/-/hoek-2.16.3.tgz#20bb7403d3cea398e91dc4710a8ff1b8274a25ed" @@ -986,6 +1779,10 @@ home-or-tmp@^2.0.0: os-homedir "^1.0.0" os-tmpdir "^1.0.1" +home-path@^1.0.1: + version "1.0.5" + resolved "https://registry.yarnpkg.com/home-path/-/home-path-1.0.5.tgz#788b29815b12d53bacf575648476e6f9041d133f" + hosted-git-info@^2.1.4: version "2.4.2" resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.4.2.tgz#0076b9f46a270506ddbaaea56496897460612a67" @@ -996,6 +1793,10 @@ html-encoding-sniffer@^1.0.1: dependencies: whatwg-encoding "^1.0.1" +htmlescape@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/htmlescape/-/htmlescape-1.1.1.tgz#3a03edc2214bca3b66424a3e7959349509cb0351" + htmlparser2@^3.9.1: version "3.9.2" resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.9.2.tgz#1bdf87acca0f3f9e53fa4fcceb0f4b4cbb00b338" @@ -1015,6 +1816,10 @@ http-signature@~1.1.0: jsprim "^1.2.2" sshpk "^1.7.0" +https-browserify@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73" + iconv-lite@0.4.13: version "0.4.13" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.13.tgz#1f88aba4ab0b1508e8312acc39345f36e992e2f2" @@ -1023,6 +1828,20 @@ iconv-lite@~0.4.13: version "0.4.17" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.17.tgz#4fdaa3b38acbc2c031b045d0edcdfe1ecab18c8d" +ieee754@^1.1.4: + version "1.1.8" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.8.tgz#be33d40ac10ef1926701f6f08a2d86fbfd1ad3e4" + +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" + +indexof@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/indexof/-/indexof-0.0.1.tgz#82dc336d232b9062179d05ab3293a66059fd435d" + inflight@^1.0.4: version "1.0.6" resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" @@ -1030,10 +1849,37 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@2, inherits@^2.0.1, 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" +inherits@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1" + +ini@~1.3.0: + version "1.3.4" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.4.tgz#0537cb79daf59b59a1a517dff706c86ec039162e" + +inline-source-map@~0.6.0: + version "0.6.2" + resolved "https://registry.yarnpkg.com/inline-source-map/-/inline-source-map-0.6.2.tgz#f9393471c18a79d1724f863fa38b586370ade2a5" + dependencies: + source-map "~0.5.3" + +insert-module-globals@^7.0.0: + version "7.0.1" + resolved "https://registry.yarnpkg.com/insert-module-globals/-/insert-module-globals-7.0.1.tgz#c03bf4e01cb086d5b5e5ace8ad0afe7889d638c3" + dependencies: + JSONStream "^1.0.3" + combine-source-map "~0.7.1" + concat-stream "~1.5.1" + is-buffer "^1.1.0" + lexical-scope "^1.2.0" + process "~0.11.0" + through2 "^2.0.0" + xtend "^4.0.0" + invariant@^2.2.0: version "2.2.2" resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.2.tgz#9e1f56ac0acdb6bf303306f338be3b204ae60360" @@ -1048,7 +1894,13 @@ is-arrayish@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" -is-buffer@^1.1.5: +is-binary-path@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" + dependencies: + binary-extensions "^1.0.0" + +is-buffer@^1.1.0, is-buffer@^1.1.5: version "1.1.5" resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.5.tgz#1f3b26ef613b214b88cbca23cc6c01d87961eecc" @@ -1072,6 +1924,10 @@ 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-defined@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-defined/-/is-defined-1.0.0.tgz#1f07ca67d571f594c4b14415a45f7bef88f92bf5" + is-dotfile@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.2.tgz#2c132383f39199f8edc268ca01b9b007d205cc4d" @@ -1106,6 +1962,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-function@~1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-function/-/is-function-1.0.1.tgz#12cfb98b65b57dd3d193a3121f5f6e2f437602b5" + 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" @@ -1126,7 +1986,7 @@ is-primitive@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/is-primitive/-/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575" -is-regex@^1.0.3: +is-regex@^1.0.3, is-regex@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.4.tgz#5517489b547091b0930e095654ced25ee97e9491" dependencies: @@ -1152,6 +2012,10 @@ is-utf8@^0.2.0: version "0.2.1" resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" +isarray@0.0.1, isarray@~0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" + isarray@1.0.0, isarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" @@ -1495,6 +2359,10 @@ jsdom@^9.12.0: whatwg-url "^4.3.0" xml-name-validator "^2.0.1" +jsesc@^0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" + jsesc@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-1.3.0.tgz#46c3fec8c1892b12b0833db9bc7622176dbab34b" @@ -1509,14 +2377,30 @@ json-stable-stringify@^1.0.1: dependencies: jsonify "~0.0.0" +json-stable-stringify@~0.0.0: + version "0.0.1" + resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-0.0.1.tgz#611c23e814db375527df851193db59dd2af27f45" + dependencies: + jsonify "~0.0.0" + 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" +json3@3.3.2: + version "3.3.2" + resolved "https://registry.yarnpkg.com/json3/-/json3-3.3.2.tgz#3c0434743df93e2f5c42aee7b19bcb483575f4e1" + json5@^0.5.0: version "0.5.1" resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821" +jsonfile@^2.1.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-2.4.0.tgz#3736a2b428b87bbda0cc83b53fa3d633a35c2ae8" + optionalDependencies: + graceful-fs "^4.1.6" + jsonfile@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-3.0.0.tgz#92e7c7444e5ffd5fa32e6a9ae8b85034df8347d0" @@ -1527,6 +2411,10 @@ jsonify@~0.0.0: version "0.0.0" resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" +jsonparse@^1.2.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" + jsprim@^1.2.2: version "1.4.0" resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.0.tgz#a3b87e40298d8c380552d8cc7628a0bb95a22918" @@ -1536,12 +2424,30 @@ jsprim@^1.2.2: json-schema "0.2.3" verror "1.3.6" +keypress@0.1.x: + version "0.1.0" + resolved "https://registry.yarnpkg.com/keypress/-/keypress-0.1.0.tgz#4a3188d4291b66b4f65edb99f806aa9ae293592a" + kind-of@^3.0.2: version "3.2.0" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.0.tgz#b58abe4d5c044ad33726a8c1525b48cf891bff07" dependencies: is-buffer "^1.1.5" +klaw@^1.0.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/klaw/-/klaw-1.3.1.tgz#4088433b46b3b1ba259d78785d8e96f73ba02439" + optionalDependencies: + graceful-fs "^4.1.9" + +labeled-stream-splicer@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/labeled-stream-splicer/-/labeled-stream-splicer-2.0.0.tgz#a52e1d138024c00b86b1c0c91f677918b8ae0a59" + dependencies: + inherits "^2.0.1" + isarray "~0.0.1" + stream-splicer "^2.0.0" + lazy-cache@^1.0.3: version "1.0.4" resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-1.0.4.tgz#a1d78fc3a50474cb80845d3b3b6e1da49a446e8e" @@ -1563,6 +2469,12 @@ levn@~0.3.0: prelude-ls "~1.1.2" type-check "~0.3.2" +lexical-scope@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/lexical-scope/-/lexical-scope-1.2.0.tgz#fcea5edc704a4b3a8796cdca419c3a0afaf22df4" + dependencies: + astw "^2.0.0" + 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" @@ -1593,6 +2505,29 @@ lodash-es@^4.2.1: version "4.17.4" resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.4.tgz#dcc1d7552e150a0640073ba9cb31d70f032950e7" +lodash._baseassign@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz#8c38a099500f215ad09e59f1722fd0c52bfe0a4e" + dependencies: + lodash._basecopy "^3.0.0" + lodash.keys "^3.0.0" + +lodash._basecopy@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz#8da0e6a876cf344c0ad8a54882111dd3c5c7ca36" + +lodash._basecreate@^3.0.0: + version "3.0.3" + resolved "https://registry.yarnpkg.com/lodash._basecreate/-/lodash._basecreate-3.0.3.tgz#1bc661614daa7fc311b7d03bf16806a0213cf821" + +lodash._getnative@^3.0.0: + version "3.9.1" + resolved "https://registry.yarnpkg.com/lodash._getnative/-/lodash._getnative-3.9.1.tgz#570bc7dede46d61cdcde687d65d3eecbaa3aaff5" + +lodash._isiterateecall@^3.0.0: + version "3.0.9" + resolved "https://registry.yarnpkg.com/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz#5203ad7ba425fae842460e696db9cf3e6aac057c" + lodash.assignin@^4.0.9: version "4.2.0" resolved "https://registry.yarnpkg.com/lodash.assignin/-/lodash.assignin-4.2.0.tgz#ba8df5fb841eb0a3e8044232b0e263a8dc6a28a2" @@ -1601,6 +2536,14 @@ lodash.bind@^4.1.4: version "4.2.1" resolved "https://registry.yarnpkg.com/lodash.bind/-/lodash.bind-4.2.1.tgz#7ae3017e939622ac31b7d7d7dcb1b34db1690d35" +lodash.create@3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/lodash.create/-/lodash.create-3.1.1.tgz#d7f2849f0dbda7e04682bb8cd72ab022461debe7" + dependencies: + lodash._baseassign "^3.0.0" + lodash._basecreate "^3.0.0" + lodash._isiterateecall "^3.0.0" + lodash.defaults@^4.0.1: version "4.2.0" resolved "https://registry.yarnpkg.com/lodash.defaults/-/lodash.defaults-4.2.0.tgz#d09178716ffea4dde9e5fb7b37f6f0802274580c" @@ -1617,10 +2560,30 @@ lodash.foreach@^4.3.0: version "4.5.0" resolved "https://registry.yarnpkg.com/lodash.foreach/-/lodash.foreach-4.5.0.tgz#1a6a35eace401280c7f06dddec35165ab27e3e53" +lodash.isarguments@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz#2f573d85c6a24289ff00663b491c1d338ff3458a" + +lodash.isarray@^3.0.0: + version "3.0.4" + resolved "https://registry.yarnpkg.com/lodash.isarray/-/lodash.isarray-3.0.4.tgz#79e4eb88c36a8122af86f844aa9bcd851b5fbb55" + +lodash.keys@^3.0.0: + version "3.1.2" + resolved "https://registry.yarnpkg.com/lodash.keys/-/lodash.keys-3.1.2.tgz#4dbc0472b156be50a0b286855d1bd0b0c656098a" + dependencies: + lodash._getnative "^3.0.0" + lodash.isarguments "^3.0.0" + lodash.isarray "^3.0.0" + lodash.map@^4.4.0: version "4.6.0" resolved "https://registry.yarnpkg.com/lodash.map/-/lodash.map-4.6.0.tgz#771ec7839e3473d9c4cde28b19394c3562f4f6d3" +lodash.memoize@~3.0.3: + version "3.0.4" + resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-3.0.4.tgz#2dcbd2c287cbc0a55cc42328bd0c736150d53e3f" + lodash.merge@^4.4.0: version "4.6.0" resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.0.tgz#69884ba144ac33fe699737a6086deffadd0f89c5" @@ -1641,6 +2604,10 @@ lodash.some@^4.4.0: version "4.6.0" resolved "https://registry.yarnpkg.com/lodash.some/-/lodash.some-4.6.0.tgz#1bb9f314ef6b8baded13b549169b2a945eb68e4d" +lodash@3.0.x: + version "3.0.1" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-3.0.1.tgz#14d49028a38bc740241d11e2ecd57ec06d73c19a" + lodash@^4.0.0, lodash@^4.14.0, lodash@^4.17.2, lodash@^4.2.0, lodash@^4.2.1: version "4.17.4" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae" @@ -1655,6 +2622,13 @@ loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.3.1: dependencies: js-tokens "^3.0.0" +loud-rejection@^1.0.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/loud-rejection/-/loud-rejection-1.6.0.tgz#5b46f80147edee578870f086d04821cf998e551f" + dependencies: + currently-unhandled "^0.4.1" + signal-exit "^3.0.0" + lru-cache@^4.0.1: version "4.0.2" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.0.2.tgz#1d17679c069cda5d040991a09dbc2c0db377e55e" @@ -1668,12 +2642,38 @@ makeerror@1.0.x: dependencies: tmpl "1.0.x" +map-obj@^1.0.0, map-obj@^1.0.1, map-obj@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d" + +md5.js@^1.3.4: + version "1.3.4" + resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.4.tgz#e9bdbde94a20a5ac18b04340fc5764d5b09d901d" + dependencies: + hash-base "^3.0.0" + inherits "^2.0.1" + 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" +meow@^3.1.0: + version "3.7.0" + resolved "https://registry.yarnpkg.com/meow/-/meow-3.7.0.tgz#72cb668b425228290abbfa856892587308a801fb" + dependencies: + camelcase-keys "^2.0.0" + decamelize "^1.1.2" + loud-rejection "^1.0.0" + map-obj "^1.0.1" + minimist "^1.1.3" + normalize-package-data "^2.3.4" + object-assign "^4.0.1" + read-pkg-up "^1.0.1" + redent "^1.0.0" + trim-newlines "^1.0.0" + merge@^1.1.3: version "1.2.0" resolved "https://registry.yarnpkg.com/merge/-/merge-1.2.0.tgz#7531e39d4949c281a66b8c5a6e0265e8b05894da" @@ -1696,6 +2696,13 @@ micromatch@^2.1.5, micromatch@^2.3.11: parse-glob "^3.0.4" regex-cache "^0.4.2" +miller-rabin@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.0.tgz#4a62fb1d42933c05583982f4c716f6fb9e6c6d3d" + dependencies: + bn.js "^4.0.0" + brorand "^1.0.1" + mime-db@~1.27.0: version "1.27.0" resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.27.0.tgz#820f572296bbd20ec25ed55e5b5de869e5436eb1" @@ -1710,7 +2717,15 @@ mimic-fn@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.1.0.tgz#e667783d92e89dbd342818b5230b9d62a672ad18" -minimatch@^3.0.2, minimatch@^3.0.3: +minimalistic-assert@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.0.tgz#702be2dda6b37f4836bcb3f5db56641b64a1d3d3" + +minimalistic-crypto-utils@^1.0.0, minimalistic-crypto-utils@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" + +minimatch@^3.0.0, minimatch@^3.0.2, minimatch@^3.0.3, minimatch@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" dependencies: @@ -1724,16 +2739,65 @@ minimist@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.1.0.tgz#99df657a52574c21c9057497df742790b2b4c0de" -minimist@^1.1.1: +minimist@^1.1.0, minimist@^1.1.1, minimist@^1.1.3, minimist@^1.2.0, minimist@~1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" -mkdirp@^0.5.1: +minstache@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/minstache/-/minstache-1.2.0.tgz#ff1cc403ac2844f68dbf18c662129be7eb0efc41" + dependencies: + commander "1.0.4" + +mkdirp@0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.0.tgz#1d73076a6df986cd9344e15e71fcc05a4c9abf12" + dependencies: + minimist "0.0.8" + +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" dependencies: minimist "0.0.8" +mocha@^3.5.3: + version "3.5.3" + resolved "https://registry.yarnpkg.com/mocha/-/mocha-3.5.3.tgz#1e0480fe36d2da5858d1eb6acc38418b26eaa20d" + dependencies: + browser-stdout "1.3.0" + commander "2.9.0" + debug "2.6.8" + diff "3.2.0" + escape-string-regexp "1.0.5" + glob "7.1.1" + growl "1.9.2" + he "1.1.1" + json3 "3.3.2" + lodash.create "3.1.1" + mkdirp "0.5.1" + supports-color "3.1.2" + +module-deps@^4.0.8: + version "4.1.1" + resolved "https://registry.yarnpkg.com/module-deps/-/module-deps-4.1.1.tgz#23215833f1da13fd606ccb8087b44852dcb821fd" + dependencies: + JSONStream "^1.0.3" + browser-resolve "^1.7.0" + cached-path-relative "^1.0.0" + concat-stream "~1.5.0" + defined "^1.0.0" + detective "^4.0.0" + duplexer2 "^0.1.2" + inherits "^2.0.1" + parents "^1.0.0" + readable-stream "^2.0.2" + resolve "^1.1.3" + stream-combiner2 "^1.1.1" + subarg "^1.0.0" + through2 "^2.0.0" + xtend "^4.0.0" + most-subject@^5.3.0: version "5.3.0" resolved "https://registry.yarnpkg.com/most-subject/-/most-subject-5.3.0.tgz#3a6e3efd436fa93bd8b33c2a239c9088230a6102" @@ -1750,14 +2814,50 @@ most@^1.1.0, most@^1.2.2: "@most/prelude" "^1.4.0" symbol-observable "^1.0.2" +mothership@~0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/mothership/-/mothership-0.2.0.tgz#93d48a2fbc3e50e2a5fc8ed586f5bc44c65f9a99" + dependencies: + find-parent-dir "~0.3.0" + +ms@0.7.1: + version "0.7.1" + resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.1.tgz#9cd13c03adbff25b65effde7ce864ee952017098" + ms@0.7.3: version "0.7.3" resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.3.tgz#708155a5e44e33f5fd0fc53e81d0d40a91be1fff" +ms@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + +nan@^2.3.0: + version "2.7.0" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.7.0.tgz#d95bf721ec877e08db276ed3fc6eb78f9083ad46" + natural-compare@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" +nightmare@^2.10.0: + version "2.10.0" + resolved "https://registry.yarnpkg.com/nightmare/-/nightmare-2.10.0.tgz#e9c5d590bb296f59685fd48218c2fbac44767b21" + dependencies: + debug "^2.2.0" + deep-defaults "^1.0.3" + defaults "^1.0.2" + electron "^1.4.4" + enqueue "^1.0.2" + function-source "^0.1.0" + jsesc "^0.5.0" + minstache "^1.2.0" + mkdirp "^0.5.1" + once "^1.3.3" + rimraf "^2.4.3" + sliced "1.0.1" + split2 "^2.0.1" + node-fetch@^1.0.1: version "1.6.3" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-1.6.3.tgz#dc234edd6489982d58e8f0db4f695029abcd8c04" @@ -1778,6 +2878,28 @@ node-notifier@^5.0.2: shellwords "^0.1.0" which "^1.2.12" +node-pre-gyp@^0.6.36: + version "0.6.37" + resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.6.37.tgz#3c872b236b2e266e4140578fe1ee88f693323a05" + dependencies: + 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" + tape "^4.6.3" + 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" + normalize-package-data@^2.3.2: version "2.3.8" resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.3.8.tgz#d819eda2a9dedbd1ffa563ea4071d936782295bb" @@ -1787,6 +2909,15 @@ normalize-package-data@^2.3.2: semver "2 || 3 || 4 || 5" validate-npm-package-license "^3.0.1" +normalize-package-data@^2.3.4: + version "2.4.0" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.4.0.tgz#12f95a307d58352075a04907b84ac8be98ac012f" + dependencies: + hosted-git-info "^2.1.4" + is-builtin-module "^1.0.0" + semver "2 || 3 || 4 || 5" + validate-npm-package-license "^3.0.1" + normalize-path@^2.0.1: version "2.1.1" resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" @@ -1799,12 +2930,33 @@ npm-run-path@^2.0.0: dependencies: path-key "^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" + nth-check@~1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.1.tgz#9929acdf628fc2c41098deab82ac580cf149aae4" dependencies: boolbase "~1.0.0" +nugget@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/nugget/-/nugget-2.0.1.tgz#201095a487e1ad36081b3432fa3cada4f8d071b0" + dependencies: + debug "^2.1.3" + minimist "^1.1.0" + pretty-bytes "^1.0.2" + progress-stream "^1.1.0" + request "^2.45.0" + single-line-log "^1.1.2" + throttleit "0.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" @@ -1821,6 +2973,10 @@ object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" +object-inspect@~1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.3.0.tgz#5b1eb8e6742e2ee83342a637034d844928ba2f6d" + object-is@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.0.1.tgz#0aa60ec9989a0b3ed795cf4d06f62cf1ad6539b6" @@ -1829,6 +2985,10 @@ object-keys@^1.0.10, object-keys@^1.0.8: version "1.0.11" resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.0.11.tgz#c54601778ad560f1142ce0e01bcca8b56d13426d" +object-keys@~0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-0.4.0.tgz#28a6aae7428dd2c3a92f3d95f21335dd204e0336" + object.assign@^4.0.4: version "4.0.4" resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.0.4.tgz#b1c9cc044ef1b9fe63606fc141abbb32e14730cc" @@ -1862,7 +3022,7 @@ object.values@^1.0.3: function-bind "^1.1.0" has "^1.0.1" -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: @@ -1886,6 +3046,10 @@ optionator@^0.8.1: type-check "~0.3.2" wordwrap "~1.0.0" +os-browserify@~0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.1.2.tgz#49ca0293e0b19590a5f5de10c7f265a617d8fe54" + os-homedir@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" @@ -1904,10 +3068,23 @@ os-locale@^2.0.0: lcid "^1.0.0" mem "^1.1.0" -os-tmpdir@^1.0.1: +os-tmpdir@^1.0.0, os-tmpdir@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" +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" + +outpipe@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/outpipe/-/outpipe-1.1.1.tgz#50cf8616365e87e031e29a5ec9339a3da4725fa2" + dependencies: + shell-quote "^1.4.2" + p-finally@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" @@ -1926,6 +3103,26 @@ p-map@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/p-map/-/p-map-1.1.1.tgz#05f5e4ae97a068371bc2a5cc86bfbdbc19c4ae7a" +pako@~0.2.0: + version "0.2.9" + resolved "https://registry.yarnpkg.com/pako/-/pako-0.2.9.tgz#f3f7522f4ef782348da8161bad9ecfd51bf83a75" + +parents@^1.0.0, parents@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/parents/-/parents-1.0.1.tgz#fedd4d2bf193a77745fe71e371d73c3307d9c751" + dependencies: + path-platform "~0.11.15" + +parse-asn1@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.0.tgz#37c4f9b7ed3ab65c74817b5f2480937fbf97c712" + dependencies: + asn1.js "^4.0.0" + browserify-aes "^1.0.0" + create-hash "^1.1.0" + evp_bytestokey "^1.0.0" + pbkdf2 "^3.0.3" + parse-glob@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/parse-glob/-/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c" @@ -1945,7 +3142,15 @@ parse5@^1.5.1: version "1.5.1" resolved "https://registry.yarnpkg.com/parse5/-/parse5-1.5.1.tgz#9b7f3b0de32be78dc2401b17573ccaf0f6f59d94" -path-exists@^2.0.0: +patch-text@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/patch-text/-/patch-text-1.0.2.tgz#4bf36e65e51733d6e98f0cf62e09034daa0348ac" + +path-browserify@~0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.0.tgz#a0b870729aae214005b7d5032ec2cbbb0fb4451a" + +path-exists@^2.0.0, path-exists@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b" dependencies: @@ -1967,6 +3172,10 @@ path-parse@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.5.tgz#3c1adf871ea9cd6c9431b6ea2bd74a0ff055c4c1" +path-platform@~0.11.15: + version "0.11.15" + resolved "https://registry.yarnpkg.com/path-platform/-/path-platform-0.11.15.tgz#e864217f74c36850f0852b78dc7bf7d4a5721bf2" + path-type@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441" @@ -1981,6 +3190,24 @@ path-type@^2.0.0: dependencies: pify "^2.0.0" +pathval@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/pathval/-/pathval-1.1.0.tgz#b942e6d4bde653005ef6b71361def8727d0645e0" + +pbkdf2@^3.0.3: + version "3.0.14" + resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.0.14.tgz#a35e13c64799b06ce15320f459c230e68e73bade" + dependencies: + create-hash "^1.1.2" + create-hmac "^1.1.4" + ripemd160 "^2.0.1" + safe-buffer "^5.0.1" + sha.js "^2.4.8" + +pend@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50" + performance-now@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-0.2.0.tgz#33ef30c5c77d4ea21c5a53869d91b56d8f2555e5" @@ -2013,6 +3240,13 @@ preserve@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b" +pretty-bytes@^1.0.2: + version "1.0.4" + resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-1.0.4.tgz#0a22e8210609ad35542f8c8d5d2159aff0751c84" + dependencies: + get-stdin "^4.0.1" + meow "^3.1.0" + pretty-format@^20.0.0: version "20.0.0" resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-20.0.0.tgz#bd100f330e707e4f49fef3f234d6e915242a6e7e" @@ -2027,6 +3261,17 @@ 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@~0.11.0: + version "0.11.10" + resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" + +progress-stream@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/progress-stream/-/progress-stream-1.2.0.tgz#2cd3cfea33ba3a89c9c121ec3347abe9ab125f77" + dependencies: + speedometer "~0.1.2" + through2 "~0.2.3" + promise@^7.1.1: version "7.1.1" resolved "https://registry.yarnpkg.com/promise/-/promise-7.1.1.tgz#489654c692616b8aa55b0724fa809bb7db49c5bf" @@ -2055,7 +3300,21 @@ pseudomap@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" -punycode@^1.4.1: +public-encrypt@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.0.tgz#39f699f3a46560dd5ebacbca693caf7c65c18cc6" + dependencies: + bn.js "^4.1.0" + browserify-rsa "^4.0.0" + create-hash "^1.1.0" + parse-asn1 "^5.0.0" + randombytes "^2.0.1" + +punycode@1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" + +punycode@^1.3.2, punycode@^1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" @@ -2063,6 +3322,14 @@ qs@~6.4.0: version "6.4.0" resolved "https://registry.yarnpkg.com/qs/-/qs-6.4.0.tgz#13e26d28ad6b0ffaa91312cd3bf708ed351e7233" +querystring-es3@~0.2.0: + version "0.2.1" + resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73" + +querystring@0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" + randomatic@^1.1.3: version "1.1.6" resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-1.1.6.tgz#110dcabff397e9dcff7c0789ccc0a49adf1ec5bb" @@ -2070,6 +3337,21 @@ randomatic@^1.1.3: is-number "^2.0.2" kind-of "^3.0.2" +randombytes@^2.0.0, randombytes@^2.0.1: + version "2.0.5" + resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.0.5.tgz#dc009a246b8d09a177b4b7a0ae77bc570f4b1b79" + dependencies: + safe-buffer "^5.1.0" + +rc@^1.1.2, rc@^1.1.7: + version "1.2.1" + resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.1.tgz#2e03e8e42ee450b8cb3dce65be1bf8974e1dfd95" + dependencies: + deep-extend "~0.4.0" + ini "~1.3.0" + minimist "^1.2.0" + strip-json-comments "~2.0.1" + react-dom@^15.5.4: version "15.5.4" resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-15.5.4.tgz#ba0c28786fd52ed7e4f2135fe0288d462aef93da" @@ -2096,6 +3378,12 @@ react@^15.6.1: object-assign "^4.1.0" prop-types "^15.5.10" +read-only-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/read-only-stream/-/read-only-stream-2.0.0.tgz#2724fd6a8113d73764ac288d4386270c1dbf17f0" + dependencies: + readable-stream "^2.0.2" + 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" @@ -2138,6 +3426,63 @@ readable-stream@^2.0.2: string_decoder "~1.0.0" util-deprecate "~1.0.1" +readable-stream@^2.0.6, readable-stream@^2.1.4, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.2.6: + 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@~1.0.17: + version "1.0.34" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.0.34.tgz#125820e34bc842d2f2aaafafe4c2916ee32c157c" + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.1" + isarray "0.0.1" + string_decoder "~0.10.x" + +readable-stream@~1.1.9: + version "1.1.14" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9" + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.1" + isarray "0.0.1" + string_decoder "~0.10.x" + +readable-stream@~2.0.0: + version "2.0.6" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.0.6.tgz#8f90341e68a53ccc928788dacfcd11b36eb9b78e" + dependencies: + 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" + +readdirp@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.1.0.tgz#4ed0ad060df3073300c48440373f72d1cc642d78" + dependencies: + graceful-fs "^4.1.2" + minimatch "^3.0.2" + readable-stream "^2.0.2" + set-immediate-shim "^1.0.1" + +redent@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/redent/-/redent-1.0.0.tgz#cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde" + dependencies: + indent-string "^2.1.0" + strip-indent "^1.0.1" + redux@^3.0.4: version "3.6.0" resolved "https://registry.yarnpkg.com/redux/-/redux-3.6.0.tgz#887c2b3d0b9bd86eca2be70571c27654c19e188d" @@ -2162,6 +3507,12 @@ remove-trailing-separator@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.0.1.tgz#615ebb96af559552d4bf4057c8436d486ab63cc4" +rename-function-calls@~0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/rename-function-calls/-/rename-function-calls-0.1.1.tgz#7f83369c007a3007f6abe3033ccf81686a108e01" + dependencies: + detective "~3.1.0" + repeat-element@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.2.tgz#ef089a178d1483baae4d93eb98b4f9e4e11d990a" @@ -2176,7 +3527,16 @@ repeating@^2.0.0: dependencies: is-finite "^1.0.0" -request@^2.79.0: +replace-requires@~1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/replace-requires/-/replace-requires-1.0.4.tgz#014b7330b6b9e2557b71043b66fb02660c3bf667" + dependencies: + detective "^4.5.0" + has-require "~1.2.1" + patch-text "~1.0.2" + xtend "~4.0.0" + +request@^2.45.0, request@^2.79.0, request@^2.81.0: version "2.81.0" resolved "https://registry.yarnpkg.com/request/-/request-2.81.0.tgz#c6928946a0e06c5f8d6f8a9333469ffda46298a0" dependencies: @@ -2215,28 +3575,61 @@ resolve@1.1.7: version "1.1.7" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" +resolve@^1.1.3, resolve@^1.1.4, resolve@~1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.4.0.tgz#a75be01c53da25d934a98ebd0e4c4a7312f92a86" + dependencies: + path-parse "^1.0.5" + resolve@^1.3.2: version "1.3.3" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.3.3.tgz#655907c3469a8680dc2de3a275a8fdd69691f0e5" dependencies: path-parse "^1.0.5" +resolve@~0.6.1: + version "0.6.3" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-0.6.3.tgz#dd957982e7e736debdf53b58a4dd91754575dd46" + +resumer@~0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/resumer/-/resumer-0.0.0.tgz#f1e8f461e4064ba39e82af3cdc2a8c893d076759" + dependencies: + through "~2.3.4" + 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.5.1: + version "2.6.2" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.2.tgz#2ed8150d24a16ea8651e6d6ef0f47c4158ce7a36" + dependencies: + glob "^7.0.5" + rimraf@^2.6.1: version "2.6.1" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.1.tgz#c2338ec643df7a1b7fe5c54fa86f57428a55f33d" dependencies: glob "^7.0.5" +ripemd160@^2.0.0, ripemd160@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.1.tgz#0f4584295c53a3628af7e6d79aca21ce57d1c6e7" + dependencies: + hash-base "^2.0.0" + inherits "^2.0.1" + safe-buffer@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.0.1.tgz#d263ca54696cd8a306b5ca6551e92de57918fbe7" +safe-buffer@^5.1.0, 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@~1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/sane/-/sane-1.6.0.tgz#9610c452307a135d29c1fdfe2547034180c46775" @@ -2257,14 +3650,44 @@ sax@^1.2.1: version "5.3.0" resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f" -set-blocking@^2.0.0: +semver@^5.1.0: + version "5.4.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.4.1.tgz#e059c09d8571f0540823733433505d3a2f00b18e" + +set-blocking@^2.0.0, set-blocking@~2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" +set-immediate-shim@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz#4b2b1b27eb808a9f8dcc481a58e5e56f599f3f61" + setimmediate@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" +sha.js@^2.4.0, sha.js@^2.4.8, sha.js@~2.4.4: + version "2.4.8" + resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.8.tgz#37068c2c476b6baf402d14a49c67f597921f634f" + dependencies: + inherits "^2.0.1" + +shasum@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/shasum/-/shasum-1.0.2.tgz#e7012310d8f417f4deb5712150e5678b87ae565f" + dependencies: + json-stable-stringify "~0.0.0" + sha.js "~2.4.4" + +shell-quote@^1.4.2, shell-quote@^1.6.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.6.1.tgz#f4781949cce402697127430ea3b3c5476f481767" + dependencies: + array-filter "~0.0.0" + array-map "~0.0.0" + array-reduce "~0.0.0" + jsonify "~0.0.0" + shellwords@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.0.tgz#66afd47b6a12932d9071cbfd98a52e785cd0ba14" @@ -2273,10 +3696,24 @@ signal-exit@^3.0.0: version "3.0.2" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" +single-line-log@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/single-line-log/-/single-line-log-1.1.2.tgz#c2f83f273a3e1a16edb0995661da0ed5ef033364" + dependencies: + string-width "^1.0.1" + slash@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55" +sliced@0.0.5: + version "0.0.5" + resolved "https://registry.yarnpkg.com/sliced/-/sliced-0.0.5.tgz#5edc044ca4eb6f7816d50ba2fc63e25d8fe4707f" + +sliced@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/sliced/-/sliced-1.0.1.tgz#0b3a662b5d04c3177b1926bea82b03f837a2ef41" + sntp@1.x.x: version "1.0.9" resolved "https://registry.yarnpkg.com/sntp/-/sntp-1.0.9.tgz#6541184cc90aeea6c6e7b35e2659082443c66198" @@ -2299,12 +3736,22 @@ source-map@^0.5.0, source-map@^0.5.3, source-map@^0.5.6, 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.1.30: + version "0.1.43" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.1.43.tgz#c24bc146ca517c1471f5dacbe2571b2b7f9e3346" + dependencies: + amdefine ">=0.0.4" + 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.3: + version "0.5.7" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" + spdx-correct@~1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-1.0.2.tgz#4b3073d933ff51f3912f03ac5519498a4150db40" @@ -2319,6 +3766,16 @@ 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" +speedometer@~0.1.2: + version "0.1.4" + resolved "https://registry.yarnpkg.com/speedometer/-/speedometer-0.1.4.tgz#9876dbd2a169d3115402d48e6ea6329c8816a50d" + +split2@^2.0.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/split2/-/split2-2.1.1.tgz#7a1f551e176a90ecd3345f7246a0cfe175ef4fd0" + dependencies: + through2 "^2.0.2" + sprintf-js@~1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" @@ -2338,6 +3795,37 @@ sshpk@^1.7.0: jsbn "~0.1.0" tweetnacl "~0.14.0" +stream-browserify@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.1.tgz#66266ee5f9bdb9940a4e4514cafb43bb71e5c9db" + dependencies: + inherits "~2.0.1" + readable-stream "^2.0.2" + +stream-combiner2@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/stream-combiner2/-/stream-combiner2-1.1.1.tgz#fb4d8a1420ea362764e21ad4780397bebcb41cbe" + dependencies: + duplexer2 "~0.1.0" + readable-stream "^2.0.2" + +stream-http@^2.0.0: + version "2.7.2" + resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.7.2.tgz#40a050ec8dc3b53b33d9909415c02c0bf1abfbad" + dependencies: + builtin-status-codes "^3.0.0" + inherits "^2.0.1" + readable-stream "^2.2.6" + to-arraybuffer "^1.0.0" + xtend "^4.0.0" + +stream-splicer@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/stream-splicer/-/stream-splicer-2.0.0.tgz#1b63be438a133e4b671cc1935197600175910d83" + dependencies: + inherits "^2.0.1" + readable-stream "^2.0.2" + string-length@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/string-length/-/string-length-1.0.1.tgz#56970fb1c38558e9e70b728bf3de269ac45adfac" @@ -2359,12 +3847,30 @@ string-width@^2.0.0: is-fullwidth-code-point "^2.0.0" strip-ansi "^3.0.0" +string.prototype.trim@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.1.2.tgz#d04de2c89e137f4d7d206f086b5ed2fae6be8cea" + dependencies: + define-properties "^1.1.2" + es-abstract "^1.5.0" + function-bind "^1.0.2" + +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.0: version "1.0.1" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.0.1.tgz#62e200f039955a6810d8df0a33ffc0f013662d98" dependencies: safe-buffer "^5.0.1" +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" + stringstream@~0.0.4: version "0.0.5" resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.5.tgz#4e484cd4de5a0bbbee18e46307710a8a81621878" @@ -2389,10 +3895,35 @@ 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@^2.0.0: +strip-indent@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-1.0.1.tgz#0c7962a6adefa7bbd4ac366460a638552ae1a0a2" + dependencies: + get-stdin "^4.0.1" + +strip-json-comments@^2.0.0, 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" +subarg@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/subarg/-/subarg-1.0.0.tgz#f62cf17581e996b48fc965699f54c06ae268b8d2" + dependencies: + minimist "^1.1.0" + +sumchecker@^1.2.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/sumchecker/-/sumchecker-1.3.1.tgz#79bb3b4456dd04f18ebdbc0d703a1d1daec5105d" + dependencies: + debug "^2.2.0" + es6-promise "^4.0.5" + +supports-color@3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.1.2.tgz#72a262894d9d408b956ca05ff37b2ed8a6e2a2d5" + dependencies: + has-flag "^1.0.0" + supports-color@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" @@ -2411,6 +3942,55 @@ symbol-tree@^3.2.1: version "3.2.2" resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.2.tgz#ae27db38f660a7ae2e1c3b7d1bc290819b8519e6" +syntax-error@^1.1.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/syntax-error/-/syntax-error-1.3.0.tgz#1ed9266c4d40be75dc55bf9bb1cb77062bb96ca1" + dependencies: + acorn "^4.0.3" + +tape@^4.6.3: + version "4.8.0" + resolved "https://registry.yarnpkg.com/tape/-/tape-4.8.0.tgz#f6a9fec41cc50a1de50fa33603ab580991f6068e" + dependencies: + deep-equal "~1.0.1" + defined "~1.0.0" + for-each "~0.3.2" + function-bind "~1.1.0" + glob "~7.1.2" + has "~1.0.1" + inherits "~2.0.3" + minimist "~1.2.0" + object-inspect "~1.3.0" + resolve "~1.4.0" + resumer "~0.0.0" + string.prototype.trim "~1.1.2" + through "~2.3.8" + +tar-pack@^3.4.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/tar-pack/-/tar-pack-3.4.0.tgz#23be2d7f671a8339376cbdb0b8fe3fdebf317984" + 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: + 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" + +ternary@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/ternary/-/ternary-1.0.0.tgz#45702725608c9499d46a9610e9b0e49ff26f789e" + test-exclude@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-4.1.0.tgz#04ca70b7390dd38c98d4a003a173806ca7991c91" @@ -2425,10 +4005,49 @@ throat@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/throat/-/throat-3.0.0.tgz#e7c64c867cbb3845f10877642f7b60055b8ec0d6" +throttleit@0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/throttleit/-/throttleit-0.0.2.tgz#cfedf88e60c00dd9697b61fdd2a8343a9b680eaf" + +through2@^2.0.0, through2@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.3.tgz#0004569b37c7c74ba39c43f3ced78d1ad94140be" + dependencies: + readable-stream "^2.1.5" + xtend "~4.0.1" + +through2@~0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/through2/-/through2-0.2.3.tgz#eb3284da4ea311b6cc8ace3653748a52abf25a3f" + dependencies: + readable-stream "~1.1.9" + xtend "~2.1.1" + +through2@~0.4.0: + version "0.4.2" + resolved "https://registry.yarnpkg.com/through2/-/through2-0.4.2.tgz#dbf5866031151ec8352bb6c4db64a2292a840b9b" + dependencies: + readable-stream "~1.0.17" + xtend "~2.1.1" + +"through@>=2.2.7 <3", through@~2.3.4, through@~2.3.8: + version "2.3.8" + resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" + +timers-browserify@^1.0.1: + version "1.4.2" + resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-1.4.2.tgz#c9c58b575be8407375cb5e2462dacee74359f41d" + dependencies: + process "~0.11.0" + tmpl@1.0.x: version "1.0.4" resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.4.tgz#23640dd7b42d00433911140820e5cf440e521dd1" +to-arraybuffer@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43" + to-fast-properties@^1.0.1: version "1.0.3" resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.3.tgz#b83571fa4d8c25b82e231b06e3a3055de4ca1a47" @@ -2443,6 +4062,16 @@ tr46@~0.0.3: version "0.0.3" resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" +transformify@~0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/transformify/-/transformify-0.1.2.tgz#9a4f42a154433dd727b80575428a3c9e5489ebf1" + dependencies: + readable-stream "~1.1.9" + +trim-newlines@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613" + trim-right@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" @@ -2462,6 +4091,15 @@ ts-jest@^20.0.2: tsconfig "^6.0.0" yargs "^8.0.1" +tsconfig@^5.0.3: + version "5.0.3" + resolved "https://registry.yarnpkg.com/tsconfig/-/tsconfig-5.0.3.tgz#5f4278e701800967a8fc383fd19648878f2a6e3a" + dependencies: + any-promise "^1.3.0" + parse-json "^2.2.0" + strip-bom "^2.0.0" + strip-json-comments "^2.0.0" + tsconfig@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/tsconfig/-/tsconfig-6.0.0.tgz#6b0e8376003d7af1864f8df8f89dd0059ffcd032" @@ -2469,6 +4107,21 @@ tsconfig@^6.0.0: strip-bom "^3.0.0" strip-json-comments "^2.0.0" +tsify@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/tsify/-/tsify-3.0.3.tgz#a032e1a6a71c2621c3f25c0415459d53b70b9ec0" + dependencies: + convert-source-map "^1.1.0" + fs.realpath "^1.0.0" + object-assign "^4.1.0" + semver "^5.1.0" + through2 "^2.0.0" + tsconfig "^5.0.3" + +tty-browserify@~0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6" + tunnel-agent@^0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" @@ -2485,6 +4138,14 @@ type-check@~0.3.2: dependencies: prelude-ls "~1.1.2" +type-detect@^4.0.0: + version "4.0.3" + resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.3.tgz#0e3f2670b44099b0b46c284d136a7ef49c74c2ea" + +typedarray@^0.0.6, typedarray@~0.0.5: + version "0.0.6" + resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" + typescript@^2.5.2: version "2.5.2" resolved "https://registry.yarnpkg.com/typescript/-/typescript-2.5.2.tgz#038a95f7d9bbb420b1bf35ba31d4c5c1dd3ffe34" @@ -2502,18 +4163,46 @@ uglify-js@^2.6: optionalDependencies: uglify-to-browserify "~1.0.0" +uglify-js@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.1.1.tgz#e7144307281a1bc38a9a20715090b546c9f44791" + dependencies: + commander "~2.11.0" + source-map "~0.5.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" +uid-number@^0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/uid-number/-/uid-number-0.0.6.tgz#0ea10e8035e8eb5b8e4449f06da1c730663baa81" + +umd@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/umd/-/umd-3.0.1.tgz#8ae556e11011f63c2596708a8837259f01b3d60e" + universalify@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.0.tgz#9eb1c4651debcc670cc94f1a75762332bb967778" +url@~0.11.0: + version "0.11.0" + resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1" + dependencies: + punycode "1.3.2" + querystring "0.2.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@0.10.3, util@~0.10.1: + version "0.10.3" + resolved "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9" + dependencies: + inherits "2.0.1" + uuid@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/uuid/-/uuid-2.0.3.tgz#67e2e863797215530dff318e5bf9dcebfd47b21a" @@ -2535,6 +4224,12 @@ verror@1.3.6: dependencies: extsprintf "1.0.2" +vm-browserify@~0.0.1: + version "0.0.4" + resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-0.0.4.tgz#5d7ea45bbef9e4a6ff65f95438e0a87c357d5a73" + dependencies: + indexof "0.0.1" + walker@~1.0.5: version "1.0.7" resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.7.tgz#2f7f9b8fd10d677262b18a884e28d19618e028fb" @@ -2545,6 +4240,18 @@ watch@~0.10.0: version "0.10.0" resolved "https://registry.yarnpkg.com/watch/-/watch-0.10.0.tgz#77798b2da0f9910d595f1ace5b0c2258521f21dc" +watchify@^3.9.0: + version "3.9.0" + resolved "https://registry.yarnpkg.com/watchify/-/watchify-3.9.0.tgz#f075fd2e8a86acde84cedba6e5c2a0bedd523d9e" + dependencies: + anymatch "^1.3.0" + browserify "^14.0.0" + chokidar "^1.0.0" + defined "^1.0.0" + outpipe "^1.1.0" + through2 "^2.0.0" + xtend "^4.0.0" + webidl-conversions@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" @@ -2584,6 +4291,12 @@ which@^1.2.12, which@^1.2.9: dependencies: isexe "^2.0.0" +wide-align@^1.1.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.2.tgz#571e0f1b0604636ebc0dfc21b0339bbe31341710" + dependencies: + string-width "^1.0.2" + window-size@0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.0.tgz#5438cd2ea93b202efa3a19fe8887aee7c94f9c9d" @@ -2622,10 +4335,16 @@ xml-name-validator@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-2.0.1.tgz#4d8b8f1eccd3419aa362061becef515e1e559635" -"xtend@>=4.0.0 <4.1.0-0": +"xtend@>=4.0.0 <4.1.0-0", xtend@^4.0.0, xtend@~4.0.0, xtend@~4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af" +xtend@~2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/xtend/-/xtend-2.1.2.tgz#6efecc2a4dad8e6962c4901b337ce7ba87b5d28b" + dependencies: + object-keys "~0.4.0" + y18n@^3.2.1: version "3.2.1" resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41" @@ -2696,3 +4415,9 @@ yargs@~3.10.0: cliui "^2.1.0" decamelize "^1.0.0" window-size "0.1.0" + +yauzl@2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.4.1.tgz#9528f442dab1b2284e58b4379bb194e22e0c4005" + dependencies: + fd-slicer "~1.0.1"