├── .babelrc ├── .gitignore ├── .travis.yml ├── LICENSE.md ├── README.md ├── package.json ├── src └── index.ts ├── tests └── index.ts ├── tsconfig.json ├── tsconfig.tests.json ├── tslint.json └── yarn.lock /.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "presets": ["es2015"] 3 | } 4 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # IntelliJ IDEA 2 | .idea 3 | *.iml 4 | 5 | # NPM 6 | node_modules 7 | npm-*.log 8 | 9 | # OS X 10 | .DS_Store 11 | 12 | # build 13 | lib -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: node_js 2 | 3 | node_js: 4 | - "6" 5 | 6 | script: 7 | - npm run lint 8 | - npm test 9 | - npm run build 10 | -------------------------------------------------------------------------------- /LICENSE.md: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2016 Daniel Lytkin 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # [TypeScript FSA](https://github.com/aikoven/typescript-fsa) utilities for redux-saga [![npm version][npm-image]][npm-url] [![Build Status][travis-image]][travis-url] 2 | 3 | ## Installation 4 | 5 | ``` 6 | npm install --save typescript-fsa-redux-saga 7 | ``` 8 | 9 | ## API 10 | 11 | ### `bindAsyncAction(actionCreators: AsyncActionCreators, options?: BindAsyncActionOptions): HigherOrderSaga` 12 | 13 | Creates higher-order-saga that wraps target saga with async actions. 14 | Resulting saga dispatches `started` action once started and `done`/`failed` 15 | upon finish. 16 | 17 | #### Options 18 | 19 | * `skipStartedAction`: Set to `true` if you want to use `started` action as a 20 | trigger instead of an event. This is useful when using 21 | `takeLatest`/`takeEvery` and you want to avoid having to manually dispatch an 22 | extra trigger action. This way, you only have to manually dispatch an 23 | `started` action, and saga will dispatch `done`/`failed` upon finish. 24 | 25 | 26 | **Example:** 27 | 28 | ```ts 29 | // actions.ts 30 | import actionCreatorFactory from 'typescript-fsa'; 31 | 32 | const actionCreator = actionCreatorFactory(); 33 | 34 | // specify parameters and result shapes as generic type arguments 35 | export const doSomething = 36 | actionCreator.async<{foo: string}, // parameter type 37 | {bar: number} // result type 38 | >('DO_SOMETHING'); 39 | 40 | // saga.ts 41 | import {SagaIterator} from 'redux-saga'; 42 | import {call} from 'redux-saga/effects'; 43 | import {doSomething} from './actions'; 44 | 45 | const doSomethingWorker = bindAsyncAction(doSomething)( 46 | function* (params): SagaIterator { 47 | // `params` type is `{foo: string}` 48 | const bar = yield call(fetchSomething, params.foo); 49 | return {bar}; 50 | }, 51 | ); 52 | 53 | function* mySaga(): SagaIterator { 54 | yield call(doSomethingWorker, {foo: 'lol'}); 55 | } 56 | ``` 57 | 58 | [npm-image]: https://badge.fury.io/js/typescript-fsa-redux-saga.svg 59 | [npm-url]: https://badge.fury.io/js/typescript-fsa-redux-saga 60 | [travis-image]: https://travis-ci.org/aikoven/typescript-fsa-redux-saga.svg?branch=master 61 | [travis-url]: https://travis-ci.org/aikoven/typescript-fsa-redux-saga 62 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "typescript-fsa-redux-saga", 3 | "version": "2.0.0", 4 | "description": "TypeScript FSA utilities for redux-saga", 5 | "keywords": [ 6 | "redux-saga", 7 | "typescript", 8 | "action", 9 | "action creator" 10 | ], 11 | "main": "lib/index.js", 12 | "typings": "lib/index.d.ts", 13 | "files": [ 14 | "src", 15 | "lib" 16 | ], 17 | "repository": "aikoven/typescript-fsa-redux-saga", 18 | "scripts": { 19 | "clean": "rimraf lib", 20 | "lint": "tslint -c tslint.json src/**/*.ts tests/**/*.ts", 21 | "test": "ts-node -P tsconfig.tests.json node_modules/.bin/tape tests/*.ts", 22 | "build": "tsc", 23 | "prepublish": "npm run clean && npm run lint && npm run test && npm run build" 24 | }, 25 | "author": "Daniel Lytkin ", 26 | "license": "MIT", 27 | "devDependencies": { 28 | "@types/tape": "^4.2.28", 29 | "redux": "^4.0.1", 30 | "rimraf": "^2.5.4", 31 | "tape": "^4.6.2", 32 | "ts-node": "^3.3.0", 33 | "tslint": "^4.1.0", 34 | "typescript": "^3.2.2" 35 | }, 36 | "dependencies": { 37 | "redux-saga": "^1.0.0", 38 | "tslib": "^1.7.1", 39 | "typescript-fsa": "^3.0.0" 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /src/index.ts: -------------------------------------------------------------------------------- 1 | import {AsyncActionCreators} from 'typescript-fsa'; 2 | import {SagaIterator} from 'redux-saga'; 3 | import {put, call, cancelled} from 'redux-saga/effects'; 4 | 5 | export interface BindAsyncActionOptions { 6 | skipStartedAction?: boolean; 7 | } 8 | 9 | export function bindAsyncAction( 10 | actionCreators: AsyncActionCreators, 11 | options?: BindAsyncActionOptions, 12 | ): { 13 | ( 14 | worker: (params: void, ...args: Args) => Promise | SagaIterator, 15 | ): (params: void, ...args: Args) => SagaIterator; 16 | (worker: () => Promise | SagaIterator): () => SagaIterator; 17 | }; 18 | export function bindAsyncAction( 19 | actionCreators: AsyncActionCreators, 20 | options?: BindAsyncActionOptions, 21 | ): { 22 | ( 23 | worker: (params: P, ...args: Args) => Promise | SagaIterator, 24 | ): (params: P, ...args: Args) => SagaIterator; 25 | }; 26 | 27 | export function bindAsyncAction( 28 | actionCreator: AsyncActionCreators, 29 | options: BindAsyncActionOptions = {}, 30 | ) { 31 | return ( 32 | worker: (params: any, ...args: any[]) => Promise | SagaIterator, 33 | ) => { 34 | function* boundAsyncActionSaga(params: any, ...args: any[]): SagaIterator { 35 | if (!options.skipStartedAction) { 36 | yield put(actionCreator.started(params)); 37 | } 38 | 39 | try { 40 | const result = yield (call as any)(worker, params, ...args); 41 | yield put(actionCreator.done({params, result})); 42 | return result; 43 | } catch (error) { 44 | yield put(actionCreator.failed({params, error})); 45 | throw error; 46 | } finally { 47 | if (yield cancelled()) { 48 | yield put(actionCreator.failed({params, error: 'cancelled'})); 49 | } 50 | } 51 | } 52 | 53 | const capName = 54 | worker.name.charAt(0).toUpperCase() + worker.name.substring(1); 55 | 56 | return setFunctionName( 57 | boundAsyncActionSaga, 58 | `bound${capName}(${actionCreator.type})`, 59 | ); 60 | }; 61 | } 62 | 63 | /** 64 | * Set function name. 65 | * 66 | * Note that this won't have effect on built-in Chrome stack traces, although 67 | * useful for stack traces generated by `redux-saga`. 68 | */ 69 | function setFunctionName(func: F, name: string): F { 70 | try { 71 | Object.defineProperty(func, 'name', { 72 | value: name, 73 | configurable: true, 74 | }); 75 | } catch (e) { 76 | // ignore 77 | } 78 | 79 | return func; 80 | } 81 | -------------------------------------------------------------------------------- /tests/index.ts: -------------------------------------------------------------------------------- 1 | import test = require('tape'); 2 | import {Test} from 'tape'; 3 | import actionCreatorFactory, {isType} from 'typescript-fsa'; 4 | import {Action, createStore, applyMiddleware} from 'redux'; 5 | import sagaMiddlewareFactory from 'redux-saga'; 6 | import {call, race, take} from 'redux-saga/effects'; 7 | import deferred from '@redux-saga/deferred'; 8 | 9 | import {bindAsyncAction, BindAsyncActionOptions} from '../src/index'; 10 | 11 | type Params = {foo: string}; 12 | type Result = {args: any[]}; 13 | type State = { 14 | started?: Params; 15 | done?: { 16 | params: Params; 17 | result: Result; 18 | }; 19 | failed?: { 20 | params: Params; 21 | error: any; 22 | }; 23 | }; 24 | 25 | function createAll(options?: BindAsyncActionOptions) { 26 | const actionCreator = actionCreatorFactory(); 27 | 28 | const asyncActions = actionCreator.async('ASYNC'); 29 | 30 | const dfd = deferred(); 31 | 32 | const asyncWorker = bindAsyncAction(asyncActions, options)( 33 | (params: Params, ...args: any[]) => dfd.promise.then(() => ({args})), 34 | ); 35 | 36 | const reducer = (state: State = {}, action: Action): State => { 37 | if (isType(action, asyncActions.started)) 38 | return { 39 | ...state, 40 | started: action.payload, 41 | }; 42 | 43 | if (isType(action, asyncActions.done)) 44 | return { 45 | ...state, 46 | done: action.payload, 47 | }; 48 | 49 | if (isType(action, asyncActions.failed)) 50 | return { 51 | ...state, 52 | failed: action.payload, 53 | }; 54 | 55 | return state; 56 | }; 57 | 58 | const sagaMiddleware = sagaMiddlewareFactory(); 59 | 60 | const store = createStore(reducer, applyMiddleware(sagaMiddleware)); 61 | 62 | const output: { 63 | result?: Result; 64 | cancelled?: boolean; 65 | error?: any; 66 | } = {}; 67 | 68 | sagaMiddleware.run(function* rootSaga() { 69 | try { 70 | const {worker} = yield race({ 71 | worker: call(asyncWorker, {foo: 'bar'}, 1, 2, 3), 72 | cancel: take('CANCEL'), 73 | }); 74 | 75 | if (worker) { 76 | output.result = worker; 77 | } else { 78 | output.cancelled = true; 79 | } 80 | } catch (e) { 81 | output.error = e; 82 | } 83 | }); 84 | 85 | return {store, dfd, output}; 86 | } 87 | 88 | function async(fn: (assert: Test) => Promise) { 89 | return (assert: Test) => { 90 | fn(assert).then(() => assert.end(), error => assert.fail(error)); 91 | }; 92 | } 93 | 94 | function delay(ms: number) { 95 | return new Promise(resolve => { 96 | setTimeout(resolve, ms); 97 | }); 98 | } 99 | 100 | test('bindAsyncAction', ({test}: Test) => { 101 | test('resolve', async(async assert => { 102 | const {store, dfd, output} = createAll(); 103 | 104 | await delay(50); 105 | 106 | assert.deepEqual(store.getState(), { 107 | started: {foo: 'bar'}, 108 | }); 109 | assert.deepEqual(output, {}); 110 | 111 | dfd.resolve({}); 112 | 113 | await delay(50); 114 | 115 | assert.deepEqual(store.getState(), { 116 | started: {foo: 'bar'}, 117 | done: { 118 | params: {foo: 'bar'}, 119 | result: {args: [1, 2, 3]}, 120 | }, 121 | }); 122 | assert.deepEqual(output, { 123 | result: {args: [1, 2, 3]}, 124 | }); 125 | })); 126 | 127 | test('reject', async(async assert => { 128 | const {store, dfd, output} = createAll(); 129 | 130 | await delay(50); 131 | 132 | assert.deepEqual(store.getState(), { 133 | started: {foo: 'bar'}, 134 | }); 135 | assert.deepEqual(output, {}); 136 | 137 | dfd.reject({message: 'Error'}); 138 | 139 | await delay(50); 140 | 141 | assert.deepEqual(store.getState(), { 142 | started: {foo: 'bar'}, 143 | failed: { 144 | params: {foo: 'bar'}, 145 | error: {message: 'Error'}, 146 | }, 147 | }); 148 | assert.deepEqual(output, { 149 | error: {message: 'Error'}, 150 | }); 151 | })); 152 | 153 | test('cancel', async(async assert => { 154 | const {store, dfd, output} = createAll(); 155 | 156 | await delay(50); 157 | 158 | assert.deepEqual(store.getState(), { 159 | started: {foo: 'bar'}, 160 | }); 161 | assert.deepEqual(output, {}); 162 | 163 | store.dispatch({type: 'CANCEL'}); 164 | 165 | await delay(50); 166 | 167 | assert.deepEqual(store.getState(), { 168 | started: {foo: 'bar'}, 169 | failed: { 170 | params: {foo: 'bar'}, 171 | error: 'cancelled', 172 | }, 173 | }); 174 | assert.deepEqual(output, { 175 | cancelled: true, 176 | }); 177 | })); 178 | 179 | test('skipStartedAction', async(async assert => { 180 | const {store, dfd, output} = createAll({skipStartedAction: true}); 181 | 182 | await delay(50); 183 | 184 | assert.deepEqual(store.getState(), {}); 185 | assert.deepEqual(output, {}); 186 | 187 | dfd.resolve({}); 188 | 189 | await delay(50); 190 | 191 | assert.deepEqual(store.getState(), { 192 | done: { 193 | params: {foo: 'bar'}, 194 | result: {args: [1, 2, 3]}, 195 | }, 196 | }); 197 | assert.deepEqual(output, { 198 | result: {args: [1, 2, 3]}, 199 | }); 200 | })); 201 | }); 202 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "es3", 4 | "module": "commonjs", 5 | "lib": ["es2015"], 6 | "moduleResolution": "node", 7 | "importHelpers": true, 8 | "declaration": true, 9 | "declarationDir": "lib", 10 | "outDir": "lib", 11 | "sourceMap": true, 12 | "noImplicitReturns": true, 13 | "noImplicitAny": true, 14 | "strictNullChecks": true 15 | }, 16 | "files": [ 17 | "src/index.ts" 18 | ] 19 | } 20 | -------------------------------------------------------------------------------- /tsconfig.tests.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "ES6", 4 | "lib": ["es2015"], 5 | "moduleResolution": "node", 6 | "strictNullChecks": true, 7 | "noImplicitAny": true, 8 | "noImplicitReturns": true 9 | }, 10 | "include": [ 11 | "tests/*.ts" 12 | ] 13 | } 14 | -------------------------------------------------------------------------------- /tslint.json: -------------------------------------------------------------------------------- 1 | { 2 | "rules": { 3 | "class-name": true, 4 | "comment-format": [ 5 | true, 6 | "check-space" 7 | ], 8 | "indent": [ 9 | true, 10 | "spaces" 11 | ], 12 | "max-line-length": [ 13 | true, 14 | 80 15 | ], 16 | "no-duplicate-variable": true, 17 | "no-empty": false, 18 | "no-eval": true, 19 | "no-internal-module": true, 20 | "no-trailing-whitespace": false, 21 | "no-unused-expression": true, 22 | "no-use-before-declare": true, 23 | "no-var-keyword": true, 24 | "one-line": [ 25 | true, 26 | "check-catch", 27 | "check-else", 28 | "check-open-brace", 29 | "check-whitespace" 30 | ], 31 | "quotemark": false, 32 | "semicolon": true, 33 | "trailing-comma": [ 34 | true, { 35 | "multiline": "always" 36 | } 37 | ], 38 | "triple-equals": [ 39 | true, 40 | "allow-null-check" 41 | ], 42 | "typedef-whitespace": [ 43 | true, 44 | { 45 | "call-signature": "nospace", 46 | "index-signature": "nospace", 47 | "parameter": "nospace", 48 | "property-declaration": "nospace", 49 | "variable-declaration": "nospace" 50 | } 51 | ], 52 | "variable-name": [ 53 | true, 54 | "ban-keywords" 55 | ], 56 | "whitespace": [ 57 | true, 58 | "check-branch", 59 | "check-decl", 60 | "check-operator", 61 | "check-separator", 62 | "check-type" 63 | ] 64 | } 65 | } 66 | -------------------------------------------------------------------------------- /yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "@babel/runtime@^7.0.0": 6 | version "7.2.0" 7 | resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.2.0.tgz#b03e42eeddf5898e00646e4c840fa07ba8dcad7f" 8 | dependencies: 9 | regenerator-runtime "^0.12.0" 10 | 11 | "@redux-saga/core@^1.0.0": 12 | version "1.0.0" 13 | resolved "https://registry.yarnpkg.com/@redux-saga/core/-/core-1.0.0.tgz#bbcbbc7f48eaaf13ccc42e005b6e33513ca3eac1" 14 | integrity sha512-QTMgdRMhTxqxxdu0g523tBgV3HcZSxxZl8goKEx8mEGeJe+FoCu/iJixRYP+KLCHtsE3MTNsErJScgX4kCiDyQ== 15 | dependencies: 16 | "@babel/runtime" "^7.0.0" 17 | "@redux-saga/deferred" "^1.0.0" 18 | "@redux-saga/delay-p" "^1.0.0" 19 | "@redux-saga/is" "^1.0.0" 20 | "@redux-saga/symbols" "^1.0.0" 21 | "@redux-saga/types" "^1.0.0" 22 | redux ">=0.10 <5" 23 | typescript-tuple "^2.1.0" 24 | 25 | "@redux-saga/deferred@^1.0.0": 26 | version "1.0.0" 27 | resolved "https://registry.yarnpkg.com/@redux-saga/deferred/-/deferred-1.0.0.tgz#faab86924114d411cc37be5c13dad7d9fe6ebced" 28 | integrity sha512-3MsdWnBEwzqZQ76TXd44TZ+nPdvm6kIB4/1tAI/CSljs0fIxSK/dsCFE+S/YifUx5Alsp/hmDixLDAsatiJI5Q== 29 | 30 | "@redux-saga/delay-p@^1.0.0": 31 | version "1.0.0" 32 | resolved "https://registry.yarnpkg.com/@redux-saga/delay-p/-/delay-p-1.0.0.tgz#eefe4213080d517cc2a5429146ba3f44ece3de26" 33 | integrity sha512-A/O+Olwi/qsLKqorb1AUxjlLsExjt3YM+e742d6p1blA0/fcyDpLhnejpSbcnka85dwzudQ6zV6krRq1WBswWQ== 34 | dependencies: 35 | "@redux-saga/symbols" "^1.0.0" 36 | 37 | "@redux-saga/is@^1.0.0": 38 | version "1.0.0" 39 | resolved "https://registry.yarnpkg.com/@redux-saga/is/-/is-1.0.0.tgz#b9059508e7704d0469a10913c6816cac70f7278f" 40 | integrity sha512-UEjdbvoJ10W8Es+8OZfzoeu0BedbjTnEkvcbqqOfMPbbRNXMe83S0cVS4Rz5ne8VagzlAY38r1cPe4h12EQDjA== 41 | dependencies: 42 | "@redux-saga/symbols" "^1.0.0" 43 | "@redux-saga/types" "^1.0.0" 44 | 45 | "@redux-saga/symbols@^1.0.0": 46 | version "1.0.0" 47 | resolved "https://registry.yarnpkg.com/@redux-saga/symbols/-/symbols-1.0.0.tgz#264748aff73feb5ea2627b2a1c5ef15f6a0fac5e" 48 | integrity sha512-FXFonwg/UIXm1KDViIqDlE7Ywu/ai6XoC6rwyYI20kwMmqQZ2JPkchYiMt5IS0OaXvyroBZ5Ar4pu4mc3Y7/iw== 49 | 50 | "@redux-saga/types@^1.0.0": 51 | version "1.0.0" 52 | resolved "https://registry.yarnpkg.com/@redux-saga/types/-/types-1.0.0.tgz#9342b7eb52ed3c903e122841407d4984b7338339" 53 | integrity sha512-9I7ejD0kASU3H8gD6Wv8Y3F9VabNdvjE8apkGfSphCAjt46snJKjt79CnHdxo1xkTE0qMEZzmYmZ8hnIYDydhw== 54 | 55 | "@types/node@*": 56 | version "7.0.5" 57 | resolved "https://registry.yarnpkg.com/@types/node/-/node-7.0.5.tgz#96a0f0a618b7b606f1ec547403c00650210bfbb7" 58 | 59 | "@types/tape@^4.2.28": 60 | version "4.2.29" 61 | resolved "https://registry.yarnpkg.com/@types/tape/-/tape-4.2.29.tgz#14cf2eb49bf852407eaaefdc53773eb90b32cf56" 62 | dependencies: 63 | "@types/node" "*" 64 | 65 | ansi-align@^1.1.0: 66 | version "1.1.0" 67 | resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-1.1.0.tgz#2f0c1658829739add5ebb15e6b0c6e3423f016ba" 68 | dependencies: 69 | string-width "^1.0.1" 70 | 71 | ansi-regex@^2.0.0: 72 | version "2.1.1" 73 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" 74 | 75 | ansi-styles@^2.2.1: 76 | version "2.2.1" 77 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" 78 | 79 | ansi-styles@^3.1.0: 80 | version "3.2.0" 81 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.0.tgz#c159b8d5be0f9e5a6f346dab94f16ce022161b88" 82 | dependencies: 83 | color-convert "^1.9.0" 84 | 85 | arrify@^1.0.0: 86 | version "1.0.1" 87 | resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" 88 | 89 | babel-code-frame@^6.20.0: 90 | version "6.22.0" 91 | resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.22.0.tgz#027620bee567a88c32561574e7fd0801d33118e4" 92 | dependencies: 93 | chalk "^1.1.0" 94 | esutils "^2.0.2" 95 | js-tokens "^3.0.0" 96 | 97 | balanced-match@^0.4.1: 98 | version "0.4.2" 99 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-0.4.2.tgz#cb3f3e3c732dc0f01ee70b403f302e61d7709838" 100 | 101 | boxen@^1.0.0: 102 | version "1.0.0" 103 | resolved "https://registry.yarnpkg.com/boxen/-/boxen-1.0.0.tgz#b2694baf1f605f708ff0177c12193b22f29aaaab" 104 | dependencies: 105 | ansi-align "^1.1.0" 106 | camelcase "^4.0.0" 107 | chalk "^1.1.1" 108 | cli-boxes "^1.0.0" 109 | string-width "^2.0.0" 110 | term-size "^0.1.0" 111 | widest-line "^1.0.0" 112 | 113 | brace-expansion@^1.0.0: 114 | version "1.1.6" 115 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.6.tgz#7197d7eaa9b87e648390ea61fc66c84427420df9" 116 | dependencies: 117 | balanced-match "^0.4.1" 118 | concat-map "0.0.1" 119 | 120 | camelcase@^4.0.0: 121 | version "4.0.0" 122 | resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.0.0.tgz#8b0f90d44be5e281b903b9887349b92595ef07f2" 123 | 124 | capture-stack-trace@^1.0.0: 125 | version "1.0.0" 126 | resolved "https://registry.yarnpkg.com/capture-stack-trace/-/capture-stack-trace-1.0.0.tgz#4a6fa07399c26bba47f0b2496b4d0fb408c5550d" 127 | 128 | chalk@^1.0.0, chalk@^1.1.0, chalk@^1.1.1: 129 | version "1.1.3" 130 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" 131 | dependencies: 132 | ansi-styles "^2.2.1" 133 | escape-string-regexp "^1.0.2" 134 | has-ansi "^2.0.0" 135 | strip-ansi "^3.0.0" 136 | supports-color "^2.0.0" 137 | 138 | chalk@^2.0.0: 139 | version "2.1.0" 140 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.1.0.tgz#ac5becf14fa21b99c6c92ca7a7d7cfd5b17e743e" 141 | dependencies: 142 | ansi-styles "^3.1.0" 143 | escape-string-regexp "^1.0.5" 144 | supports-color "^4.0.0" 145 | 146 | cli-boxes@^1.0.0: 147 | version "1.0.0" 148 | resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-1.0.0.tgz#4fa917c3e59c94a004cd61f8ee509da651687143" 149 | 150 | code-point-at@^1.0.0: 151 | version "1.1.0" 152 | resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" 153 | 154 | color-convert@^1.9.0: 155 | version "1.9.0" 156 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.0.tgz#1accf97dd739b983bf994d56fec8f95853641b7a" 157 | dependencies: 158 | color-name "^1.1.1" 159 | 160 | color-name@^1.1.1: 161 | version "1.1.3" 162 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" 163 | 164 | colors@^1.1.2: 165 | version "1.1.2" 166 | resolved "https://registry.yarnpkg.com/colors/-/colors-1.1.2.tgz#168a4701756b6a7f51a12ce0c97bfa28c084ed63" 167 | 168 | concat-map@0.0.1: 169 | version "0.0.1" 170 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" 171 | 172 | configstore@^3.0.0: 173 | version "3.0.0" 174 | resolved "https://registry.yarnpkg.com/configstore/-/configstore-3.0.0.tgz#e1b8669c1803ccc50b545e92f8e6e79aa80e0196" 175 | dependencies: 176 | dot-prop "^4.1.0" 177 | graceful-fs "^4.1.2" 178 | mkdirp "^0.5.0" 179 | unique-string "^1.0.0" 180 | write-file-atomic "^1.1.2" 181 | xdg-basedir "^3.0.0" 182 | 183 | create-error-class@^3.0.0: 184 | version "3.0.2" 185 | resolved "https://registry.yarnpkg.com/create-error-class/-/create-error-class-3.0.2.tgz#06be7abef947a3f14a30fd610671d401bca8b7b6" 186 | dependencies: 187 | capture-stack-trace "^1.0.0" 188 | 189 | cross-spawn-async@^2.1.1: 190 | version "2.2.5" 191 | resolved "https://registry.yarnpkg.com/cross-spawn-async/-/cross-spawn-async-2.2.5.tgz#845ff0c0834a3ded9d160daca6d390906bb288cc" 192 | dependencies: 193 | lru-cache "^4.0.0" 194 | which "^1.2.8" 195 | 196 | crypto-random-string@^1.0.0: 197 | version "1.0.0" 198 | resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-1.0.0.tgz#a230f64f568310e1498009940790ec99545bca7e" 199 | 200 | deep-equal@~1.0.1: 201 | version "1.0.1" 202 | resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.0.1.tgz#f5d260292b660e084eff4cdbc9f08ad3247448b5" 203 | 204 | deep-extend@~0.4.0: 205 | version "0.4.1" 206 | resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.4.1.tgz#efe4113d08085f4e6f9687759810f807469e2253" 207 | 208 | define-properties@^1.1.2: 209 | version "1.1.2" 210 | resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.2.tgz#83a73f2fea569898fb737193c8f873caf6d45c94" 211 | dependencies: 212 | foreach "^2.0.5" 213 | object-keys "^1.0.8" 214 | 215 | defined@~1.0.0: 216 | version "1.0.0" 217 | resolved "https://registry.yarnpkg.com/defined/-/defined-1.0.0.tgz#c98d9bcef75674188e110969151199e39b1fa693" 218 | 219 | diff@^3.0.1, diff@^3.1.0: 220 | version "3.2.0" 221 | resolved "https://registry.yarnpkg.com/diff/-/diff-3.2.0.tgz#c9ce393a4b7cbd0b058a725c93df299027868ff9" 222 | 223 | dot-prop@^4.1.0: 224 | version "4.1.1" 225 | resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-4.1.1.tgz#a8493f0b7b5eeec82525b5c7587fa7de7ca859c1" 226 | dependencies: 227 | is-obj "^1.0.0" 228 | 229 | duplexer3@^0.1.4: 230 | version "0.1.4" 231 | resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2" 232 | 233 | es-abstract@^1.5.0: 234 | version "1.7.0" 235 | resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.7.0.tgz#dfade774e01bfcd97f96180298c449c8623fb94c" 236 | dependencies: 237 | es-to-primitive "^1.1.1" 238 | function-bind "^1.1.0" 239 | is-callable "^1.1.3" 240 | is-regex "^1.0.3" 241 | 242 | es-to-primitive@^1.1.1: 243 | version "1.1.1" 244 | resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.1.1.tgz#45355248a88979034b6792e19bb81f2b7975dd0d" 245 | dependencies: 246 | is-callable "^1.1.1" 247 | is-date-object "^1.0.1" 248 | is-symbol "^1.0.1" 249 | 250 | escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: 251 | version "1.0.5" 252 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" 253 | 254 | esutils@^2.0.2: 255 | version "2.0.2" 256 | resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" 257 | 258 | execa@^0.4.0: 259 | version "0.4.0" 260 | resolved "https://registry.yarnpkg.com/execa/-/execa-0.4.0.tgz#4eb6467a36a095fabb2970ff9d5e3fb7bce6ebc3" 261 | dependencies: 262 | cross-spawn-async "^2.1.1" 263 | is-stream "^1.1.0" 264 | npm-run-path "^1.0.0" 265 | object-assign "^4.0.1" 266 | path-key "^1.0.0" 267 | strip-eof "^1.0.0" 268 | 269 | findup-sync@~0.3.0: 270 | version "0.3.0" 271 | resolved "https://registry.yarnpkg.com/findup-sync/-/findup-sync-0.3.0.tgz#37930aa5d816b777c03445e1966cc6790a4c0b16" 272 | dependencies: 273 | glob "~5.0.0" 274 | 275 | for-each@~0.3.2: 276 | version "0.3.2" 277 | resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.2.tgz#2c40450b9348e97f281322593ba96704b9abd4d4" 278 | dependencies: 279 | is-function "~1.0.0" 280 | 281 | foreach@^2.0.5: 282 | version "2.0.5" 283 | resolved "https://registry.yarnpkg.com/foreach/-/foreach-2.0.5.tgz#0bee005018aeb260d0a3af3ae658dd0136ec1b99" 284 | 285 | fs.realpath@^1.0.0: 286 | version "1.0.0" 287 | resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" 288 | 289 | function-bind@^1.0.2, function-bind@^1.1.0, function-bind@~1.1.0: 290 | version "1.1.0" 291 | resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.0.tgz#16176714c801798e4e8f2cf7f7529467bb4a5771" 292 | 293 | get-stream@^3.0.0: 294 | version "3.0.0" 295 | resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" 296 | 297 | glob@^7.0.5, glob@^7.1.1, glob@~7.1.1: 298 | version "7.1.1" 299 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.1.tgz#805211df04faaf1c63a3600306cdf5ade50b2ec8" 300 | dependencies: 301 | fs.realpath "^1.0.0" 302 | inflight "^1.0.4" 303 | inherits "2" 304 | minimatch "^3.0.2" 305 | once "^1.3.0" 306 | path-is-absolute "^1.0.0" 307 | 308 | glob@~5.0.0: 309 | version "5.0.15" 310 | resolved "https://registry.yarnpkg.com/glob/-/glob-5.0.15.tgz#1bc936b9e02f4a603fcc222ecf7633d30b8b93b1" 311 | dependencies: 312 | inflight "^1.0.4" 313 | inherits "2" 314 | minimatch "2 || 3" 315 | once "^1.3.0" 316 | path-is-absolute "^1.0.0" 317 | 318 | got@^6.7.1: 319 | version "6.7.1" 320 | resolved "https://registry.yarnpkg.com/got/-/got-6.7.1.tgz#240cd05785a9a18e561dc1b44b41c763ef1e8db0" 321 | dependencies: 322 | create-error-class "^3.0.0" 323 | duplexer3 "^0.1.4" 324 | get-stream "^3.0.0" 325 | is-redirect "^1.0.0" 326 | is-retry-allowed "^1.0.0" 327 | is-stream "^1.0.0" 328 | lowercase-keys "^1.0.0" 329 | safe-buffer "^5.0.1" 330 | timed-out "^4.0.0" 331 | unzip-response "^2.0.1" 332 | url-parse-lax "^1.0.0" 333 | 334 | graceful-fs@^4.1.11, graceful-fs@^4.1.2: 335 | version "4.1.11" 336 | resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658" 337 | 338 | has-ansi@^2.0.0: 339 | version "2.0.0" 340 | resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" 341 | dependencies: 342 | ansi-regex "^2.0.0" 343 | 344 | has-flag@^2.0.0: 345 | version "2.0.0" 346 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-2.0.0.tgz#e8207af1cc7b30d446cc70b734b5e8be18f88d51" 347 | 348 | has@^1.0.1, has@~1.0.1: 349 | version "1.0.1" 350 | resolved "https://registry.yarnpkg.com/has/-/has-1.0.1.tgz#8461733f538b0837c9361e39a9ab9e9704dc2f28" 351 | dependencies: 352 | function-bind "^1.0.2" 353 | 354 | imurmurhash@^0.1.4: 355 | version "0.1.4" 356 | resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" 357 | 358 | inflight@^1.0.4: 359 | version "1.0.6" 360 | resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" 361 | dependencies: 362 | once "^1.3.0" 363 | wrappy "1" 364 | 365 | inherits@2, inherits@~2.0.3: 366 | version "2.0.3" 367 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" 368 | 369 | ini@~1.3.0: 370 | version "1.3.4" 371 | resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.4.tgz#0537cb79daf59b59a1a517dff706c86ec039162e" 372 | 373 | is-callable@^1.1.1, is-callable@^1.1.3: 374 | version "1.1.3" 375 | resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.3.tgz#86eb75392805ddc33af71c92a0eedf74ee7604b2" 376 | 377 | is-date-object@^1.0.1: 378 | version "1.0.1" 379 | resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.1.tgz#9aa20eb6aeebbff77fbd33e74ca01b33581d3a16" 380 | 381 | is-fullwidth-code-point@^1.0.0: 382 | version "1.0.0" 383 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" 384 | dependencies: 385 | number-is-nan "^1.0.0" 386 | 387 | is-fullwidth-code-point@^2.0.0: 388 | version "2.0.0" 389 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" 390 | 391 | is-function@~1.0.0: 392 | version "1.0.1" 393 | resolved "https://registry.yarnpkg.com/is-function/-/is-function-1.0.1.tgz#12cfb98b65b57dd3d193a3121f5f6e2f437602b5" 394 | 395 | is-npm@^1.0.0: 396 | version "1.0.0" 397 | resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-1.0.0.tgz#f2fb63a65e4905b406c86072765a1a4dc793b9f4" 398 | 399 | is-obj@^1.0.0: 400 | version "1.0.1" 401 | resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" 402 | 403 | is-redirect@^1.0.0: 404 | version "1.0.0" 405 | resolved "https://registry.yarnpkg.com/is-redirect/-/is-redirect-1.0.0.tgz#1d03dded53bd8db0f30c26e4f95d36fc7c87dc24" 406 | 407 | is-regex@^1.0.3: 408 | version "1.0.4" 409 | resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.4.tgz#5517489b547091b0930e095654ced25ee97e9491" 410 | dependencies: 411 | has "^1.0.1" 412 | 413 | is-retry-allowed@^1.0.0: 414 | version "1.1.0" 415 | resolved "https://registry.yarnpkg.com/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz#11a060568b67339444033d0125a61a20d564fb34" 416 | 417 | is-stream@^1.0.0, is-stream@^1.1.0: 418 | version "1.1.0" 419 | resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" 420 | 421 | is-symbol@^1.0.1: 422 | version "1.0.1" 423 | resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.1.tgz#3cc59f00025194b6ab2e38dbae6689256b660572" 424 | 425 | isexe@^1.1.1: 426 | version "1.1.2" 427 | resolved "https://registry.yarnpkg.com/isexe/-/isexe-1.1.2.tgz#36f3e22e60750920f5e7241a476a8c6a42275ad0" 428 | 429 | js-tokens@^3.0.0: 430 | version "3.0.1" 431 | resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.1.tgz#08e9f132484a2c45a30907e9dc4d5567b7f114d7" 432 | 433 | "js-tokens@^3.0.0 || ^4.0.0": 434 | version "4.0.0" 435 | resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" 436 | 437 | latest-version@^3.0.0: 438 | version "3.0.0" 439 | resolved "https://registry.yarnpkg.com/latest-version/-/latest-version-3.0.0.tgz#3104f008c0c391084107f85a344bc61e38970649" 440 | dependencies: 441 | package-json "^3.0.0" 442 | 443 | lazy-req@^2.0.0: 444 | version "2.0.0" 445 | resolved "https://registry.yarnpkg.com/lazy-req/-/lazy-req-2.0.0.tgz#c9450a363ecdda2e6f0c70132ad4f37f8f06f2b4" 446 | 447 | loose-envify@^1.4.0: 448 | version "1.4.0" 449 | resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" 450 | dependencies: 451 | js-tokens "^3.0.0 || ^4.0.0" 452 | 453 | lowercase-keys@^1.0.0: 454 | version "1.0.0" 455 | resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.0.tgz#4e3366b39e7f5457e35f1324bdf6f88d0bfc7306" 456 | 457 | lru-cache@^4.0.0: 458 | version "4.0.2" 459 | resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.0.2.tgz#1d17679c069cda5d040991a09dbc2c0db377e55e" 460 | dependencies: 461 | pseudomap "^1.0.1" 462 | yallist "^2.0.0" 463 | 464 | make-error@^1.1.1: 465 | version "1.2.2" 466 | resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.2.2.tgz#e4e270e474f642cca20fa126fe441163957832ef" 467 | 468 | "minimatch@2 || 3", minimatch@^3.0.2: 469 | version "3.0.3" 470 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.3.tgz#2a4e4090b96b2db06a9d7df01055a62a77c9b774" 471 | dependencies: 472 | brace-expansion "^1.0.0" 473 | 474 | minimist@0.0.8, minimist@~0.0.1: 475 | version "0.0.8" 476 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" 477 | 478 | minimist@^1.2.0, minimist@~1.2.0: 479 | version "1.2.0" 480 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" 481 | 482 | mkdirp@^0.5.0, mkdirp@^0.5.1: 483 | version "0.5.1" 484 | resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" 485 | dependencies: 486 | minimist "0.0.8" 487 | 488 | npm-run-path@^1.0.0: 489 | version "1.0.0" 490 | resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-1.0.0.tgz#f5c32bf595fe81ae927daec52e82f8b000ac3c8f" 491 | dependencies: 492 | path-key "^1.0.0" 493 | 494 | number-is-nan@^1.0.0: 495 | version "1.0.1" 496 | resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" 497 | 498 | object-assign@^4.0.1: 499 | version "4.1.1" 500 | resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" 501 | 502 | object-inspect@~1.2.1: 503 | version "1.2.1" 504 | resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.2.1.tgz#3b62226eb8f6d441751c7d8f22a20ff80ac9dc3f" 505 | 506 | object-keys@^1.0.8: 507 | version "1.0.11" 508 | resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.0.11.tgz#c54601778ad560f1142ce0e01bcca8b56d13426d" 509 | 510 | once@^1.3.0: 511 | version "1.4.0" 512 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" 513 | dependencies: 514 | wrappy "1" 515 | 516 | optimist@~0.6.0: 517 | version "0.6.1" 518 | resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686" 519 | dependencies: 520 | minimist "~0.0.1" 521 | wordwrap "~0.0.2" 522 | 523 | package-json@^3.0.0: 524 | version "3.1.0" 525 | resolved "https://registry.yarnpkg.com/package-json/-/package-json-3.1.0.tgz#ce281900fe8052150cc6709c6c006c18fdb2f379" 526 | dependencies: 527 | got "^6.7.1" 528 | registry-auth-token "^3.0.1" 529 | registry-url "^3.0.3" 530 | semver "^5.1.0" 531 | 532 | path-is-absolute@^1.0.0: 533 | version "1.0.1" 534 | resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" 535 | 536 | path-key@^1.0.0: 537 | version "1.0.0" 538 | resolved "https://registry.yarnpkg.com/path-key/-/path-key-1.0.0.tgz#5d53d578019646c0d68800db4e146e6bdc2ac7af" 539 | 540 | path-parse@^1.0.5: 541 | version "1.0.5" 542 | resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.5.tgz#3c1adf871ea9cd6c9431b6ea2bd74a0ff055c4c1" 543 | 544 | prepend-http@^1.0.1: 545 | version "1.0.4" 546 | resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc" 547 | 548 | pseudomap@^1.0.1: 549 | version "1.0.2" 550 | resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" 551 | 552 | rc@^1.0.1, rc@^1.1.6: 553 | version "1.1.7" 554 | resolved "https://registry.yarnpkg.com/rc/-/rc-1.1.7.tgz#c5ea564bb07aff9fd3a5b32e906c1d3a65940fea" 555 | dependencies: 556 | deep-extend "~0.4.0" 557 | ini "~1.3.0" 558 | minimist "^1.2.0" 559 | strip-json-comments "~2.0.1" 560 | 561 | redux-saga@^1.0.0: 562 | version "1.0.0" 563 | resolved "https://registry.yarnpkg.com/redux-saga/-/redux-saga-1.0.0.tgz#acb8b3ed9180fecbe75f342011d75af3ac11045b" 564 | integrity sha512-GvJWs/SzMvEQgeaw6sRMXnS2FghlvEGsHiEtTLpJqc/FHF3I5EE/B+Hq5lyHZ8LSoT2r/X/46uWvkdCnK9WgHA== 565 | dependencies: 566 | "@redux-saga/core" "^1.0.0" 567 | 568 | "redux@>=0.10 <5", redux@^4.0.1: 569 | version "4.0.1" 570 | resolved "https://registry.yarnpkg.com/redux/-/redux-4.0.1.tgz#436cae6cc40fbe4727689d7c8fae44808f1bfef5" 571 | dependencies: 572 | loose-envify "^1.4.0" 573 | symbol-observable "^1.2.0" 574 | 575 | regenerator-runtime@^0.12.0: 576 | version "0.12.1" 577 | resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.12.1.tgz#fa1a71544764c036f8c49b13a08b2594c9f8a0de" 578 | 579 | registry-auth-token@^3.0.1: 580 | version "3.1.0" 581 | resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-3.1.0.tgz#997c08256e0c7999837b90e944db39d8a790276b" 582 | dependencies: 583 | rc "^1.1.6" 584 | 585 | registry-url@^3.0.3: 586 | version "3.1.0" 587 | resolved "https://registry.yarnpkg.com/registry-url/-/registry-url-3.1.0.tgz#3d4ef870f73dde1d77f0cf9a381432444e174942" 588 | dependencies: 589 | rc "^1.0.1" 590 | 591 | resolve@^1.1.7: 592 | version "1.3.2" 593 | resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.3.2.tgz#1f0442c9e0cbb8136e87b9305f932f46c7f28235" 594 | dependencies: 595 | path-parse "^1.0.5" 596 | 597 | resolve@~1.1.7: 598 | version "1.1.7" 599 | resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" 600 | 601 | resumer@~0.0.0: 602 | version "0.0.0" 603 | resolved "https://registry.yarnpkg.com/resumer/-/resumer-0.0.0.tgz#f1e8f461e4064ba39e82af3cdc2a8c893d076759" 604 | dependencies: 605 | through "~2.3.4" 606 | 607 | rimraf@^2.5.4: 608 | version "2.6.1" 609 | resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.1.tgz#c2338ec643df7a1b7fe5c54fa86f57428a55f33d" 610 | dependencies: 611 | glob "^7.0.5" 612 | 613 | safe-buffer@^5.0.1: 614 | version "5.0.1" 615 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.0.1.tgz#d263ca54696cd8a306b5ca6551e92de57918fbe7" 616 | 617 | semver-diff@^2.0.0: 618 | version "2.1.0" 619 | resolved "https://registry.yarnpkg.com/semver-diff/-/semver-diff-2.1.0.tgz#4bbb8437c8d37e4b0cf1a68fd726ec6d645d6d36" 620 | dependencies: 621 | semver "^5.0.3" 622 | 623 | semver@^5.0.3, semver@^5.1.0: 624 | version "5.3.0" 625 | resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f" 626 | 627 | slide@^1.1.5: 628 | version "1.1.6" 629 | resolved "https://registry.yarnpkg.com/slide/-/slide-1.1.6.tgz#56eb027d65b4d2dce6cb2e2d32c4d4afc9e1d707" 630 | 631 | source-map-support@^0.4.0: 632 | version "0.4.11" 633 | resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.11.tgz#647f939978b38535909530885303daf23279f322" 634 | dependencies: 635 | source-map "^0.5.3" 636 | 637 | source-map@^0.5.3: 638 | version "0.5.6" 639 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.6.tgz#75ce38f52bf0733c5a7f0c118d81334a2bb5f412" 640 | 641 | string-width@^1.0.1: 642 | version "1.0.2" 643 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" 644 | dependencies: 645 | code-point-at "^1.0.0" 646 | is-fullwidth-code-point "^1.0.0" 647 | strip-ansi "^3.0.0" 648 | 649 | string-width@^2.0.0: 650 | version "2.0.0" 651 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.0.0.tgz#635c5436cc72a6e0c387ceca278d4e2eec52687e" 652 | dependencies: 653 | is-fullwidth-code-point "^2.0.0" 654 | strip-ansi "^3.0.0" 655 | 656 | string.prototype.trim@~1.1.2: 657 | version "1.1.2" 658 | resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.1.2.tgz#d04de2c89e137f4d7d206f086b5ed2fae6be8cea" 659 | dependencies: 660 | define-properties "^1.1.2" 661 | es-abstract "^1.5.0" 662 | function-bind "^1.0.2" 663 | 664 | strip-ansi@^3.0.0: 665 | version "3.0.1" 666 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" 667 | dependencies: 668 | ansi-regex "^2.0.0" 669 | 670 | strip-bom@^3.0.0: 671 | version "3.0.0" 672 | resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" 673 | 674 | strip-eof@^1.0.0: 675 | version "1.0.0" 676 | resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" 677 | 678 | strip-json-comments@^2.0.0, strip-json-comments@~2.0.1: 679 | version "2.0.1" 680 | resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" 681 | 682 | supports-color@^2.0.0: 683 | version "2.0.0" 684 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" 685 | 686 | supports-color@^4.0.0: 687 | version "4.4.0" 688 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-4.4.0.tgz#883f7ddabc165142b2a61427f3352ded195d1a3e" 689 | dependencies: 690 | has-flag "^2.0.0" 691 | 692 | symbol-observable@^1.2.0: 693 | version "1.2.0" 694 | resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804" 695 | 696 | tape@^4.6.2: 697 | version "4.6.3" 698 | resolved "https://registry.yarnpkg.com/tape/-/tape-4.6.3.tgz#637e77581e9ab2ce17577e9bd4ce4f575806d8b6" 699 | dependencies: 700 | deep-equal "~1.0.1" 701 | defined "~1.0.0" 702 | for-each "~0.3.2" 703 | function-bind "~1.1.0" 704 | glob "~7.1.1" 705 | has "~1.0.1" 706 | inherits "~2.0.3" 707 | minimist "~1.2.0" 708 | object-inspect "~1.2.1" 709 | resolve "~1.1.7" 710 | resumer "~0.0.0" 711 | string.prototype.trim "~1.1.2" 712 | through "~2.3.8" 713 | 714 | term-size@^0.1.0: 715 | version "0.1.1" 716 | resolved "https://registry.yarnpkg.com/term-size/-/term-size-0.1.1.tgz#87360b96396cab5760963714cda0d0cbeecad9ca" 717 | dependencies: 718 | execa "^0.4.0" 719 | 720 | through@~2.3.4, through@~2.3.8: 721 | version "2.3.8" 722 | resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" 723 | 724 | timed-out@^4.0.0: 725 | version "4.0.1" 726 | resolved "https://registry.yarnpkg.com/timed-out/-/timed-out-4.0.1.tgz#f32eacac5a175bea25d7fab565ab3ed8741ef56f" 727 | 728 | ts-node@^3.3.0: 729 | version "3.3.0" 730 | resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-3.3.0.tgz#c13c6a3024e30be1180dd53038fc209289d4bf69" 731 | dependencies: 732 | arrify "^1.0.0" 733 | chalk "^2.0.0" 734 | diff "^3.1.0" 735 | make-error "^1.1.1" 736 | minimist "^1.2.0" 737 | mkdirp "^0.5.1" 738 | source-map-support "^0.4.0" 739 | tsconfig "^6.0.0" 740 | v8flags "^3.0.0" 741 | yn "^2.0.0" 742 | 743 | tsconfig@^6.0.0: 744 | version "6.0.0" 745 | resolved "https://registry.yarnpkg.com/tsconfig/-/tsconfig-6.0.0.tgz#6b0e8376003d7af1864f8df8f89dd0059ffcd032" 746 | dependencies: 747 | strip-bom "^3.0.0" 748 | strip-json-comments "^2.0.0" 749 | 750 | tslib@^1.7.1: 751 | version "1.7.1" 752 | resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.7.1.tgz#bc8004164691923a79fe8378bbeb3da2017538ec" 753 | 754 | tslint@^4.1.0: 755 | version "4.5.1" 756 | resolved "https://registry.yarnpkg.com/tslint/-/tslint-4.5.1.tgz#05356871bef23a434906734006fc188336ba824b" 757 | dependencies: 758 | babel-code-frame "^6.20.0" 759 | colors "^1.1.2" 760 | diff "^3.0.1" 761 | findup-sync "~0.3.0" 762 | glob "^7.1.1" 763 | optimist "~0.6.0" 764 | resolve "^1.1.7" 765 | tsutils "^1.1.0" 766 | update-notifier "^2.0.0" 767 | 768 | tsutils@^1.1.0: 769 | version "1.1.0" 770 | resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-1.1.0.tgz#94e0c267624eeb1b63561ba8ec0bcff71b4e2872" 771 | 772 | typescript-compare@^0.0.2: 773 | version "0.0.2" 774 | resolved "https://registry.yarnpkg.com/typescript-compare/-/typescript-compare-0.0.2.tgz#7ee40a400a406c2ea0a7e551efd3309021d5f425" 775 | dependencies: 776 | typescript-logic "^0.0.0" 777 | 778 | typescript-fsa@^3.0.0: 779 | version "3.0.0" 780 | resolved "https://registry.yarnpkg.com/typescript-fsa/-/typescript-fsa-3.0.0.tgz#3ad1cb915a67338e013fc21f67c9b3e0e110c912" 781 | integrity sha512-xiXAib35i0QHl/+wMobzPibjAH5TJLDj+qGq5jwVLG9qR4FUswZURBw2qihBm0m06tHoyb3FzpnJs1GRhRwVag== 782 | 783 | typescript-logic@^0.0.0: 784 | version "0.0.0" 785 | resolved "https://registry.yarnpkg.com/typescript-logic/-/typescript-logic-0.0.0.tgz#66ebd82a2548f2b444a43667bec120b496890196" 786 | 787 | typescript-tuple@^2.1.0: 788 | version "2.1.0" 789 | resolved "https://registry.yarnpkg.com/typescript-tuple/-/typescript-tuple-2.1.0.tgz#22f0c5c605ecb659e8af310152e4f5abf1f80bd5" 790 | dependencies: 791 | typescript-compare "^0.0.2" 792 | 793 | typescript@^3.2.2: 794 | version "3.2.2" 795 | resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.2.2.tgz#fe8101c46aa123f8353523ebdcf5730c2ae493e5" 796 | 797 | unique-string@^1.0.0: 798 | version "1.0.0" 799 | resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-1.0.0.tgz#9e1057cca851abb93398f8b33ae187b99caec11a" 800 | dependencies: 801 | crypto-random-string "^1.0.0" 802 | 803 | unzip-response@^2.0.1: 804 | version "2.0.1" 805 | resolved "https://registry.yarnpkg.com/unzip-response/-/unzip-response-2.0.1.tgz#d2f0f737d16b0615e72a6935ed04214572d56f97" 806 | 807 | update-notifier@^2.0.0: 808 | version "2.1.0" 809 | resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-2.1.0.tgz#ec0c1e53536b76647a24b77cb83966d9315123d9" 810 | dependencies: 811 | boxen "^1.0.0" 812 | chalk "^1.0.0" 813 | configstore "^3.0.0" 814 | is-npm "^1.0.0" 815 | latest-version "^3.0.0" 816 | lazy-req "^2.0.0" 817 | semver-diff "^2.0.0" 818 | xdg-basedir "^3.0.0" 819 | 820 | url-parse-lax@^1.0.0: 821 | version "1.0.0" 822 | resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-1.0.0.tgz#7af8f303645e9bd79a272e7a14ac68bc0609da73" 823 | dependencies: 824 | prepend-http "^1.0.1" 825 | 826 | user-home@^1.1.1: 827 | version "1.1.1" 828 | resolved "https://registry.yarnpkg.com/user-home/-/user-home-1.1.1.tgz#2b5be23a32b63a7c9deb8d0f28d485724a3df190" 829 | 830 | v8flags@^3.0.0: 831 | version "3.0.0" 832 | resolved "https://registry.yarnpkg.com/v8flags/-/v8flags-3.0.0.tgz#4be9604488e0c4123645def705b1848d16b8e01f" 833 | dependencies: 834 | user-home "^1.1.1" 835 | 836 | which@^1.2.8: 837 | version "1.2.12" 838 | resolved "https://registry.yarnpkg.com/which/-/which-1.2.12.tgz#de67b5e450269f194909ef23ece4ebe416fa1192" 839 | dependencies: 840 | isexe "^1.1.1" 841 | 842 | widest-line@^1.0.0: 843 | version "1.0.0" 844 | resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-1.0.0.tgz#0c09c85c2a94683d0d7eaf8ee097d564bf0e105c" 845 | dependencies: 846 | string-width "^1.0.1" 847 | 848 | wordwrap@~0.0.2: 849 | version "0.0.3" 850 | resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107" 851 | 852 | wrappy@1: 853 | version "1.0.2" 854 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" 855 | 856 | write-file-atomic@^1.1.2: 857 | version "1.3.1" 858 | resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-1.3.1.tgz#7d45ba32316328dd1ec7d90f60ebc0d845bb759a" 859 | dependencies: 860 | graceful-fs "^4.1.11" 861 | imurmurhash "^0.1.4" 862 | slide "^1.1.5" 863 | 864 | xdg-basedir@^3.0.0: 865 | version "3.0.0" 866 | resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-3.0.0.tgz#496b2cc109eca8dbacfe2dc72b603c17c5870ad4" 867 | 868 | yallist@^2.0.0: 869 | version "2.0.0" 870 | resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.0.0.tgz#306c543835f09ee1a4cb23b7bce9ab341c91cdd4" 871 | 872 | yn@^2.0.0: 873 | version "2.0.0" 874 | resolved "https://registry.yarnpkg.com/yn/-/yn-2.0.0.tgz#e5adabc8acf408f6385fc76495684c88e6af689a" 875 | --------------------------------------------------------------------------------