├── .editorconfig ├── .gitignore ├── .npmignore ├── CONTRIBUTING.md ├── LICENSE ├── README.md ├── circle.yml ├── index.ts ├── karma.conf.js ├── package.json ├── rollup.config.js ├── spec ├── edge.spec.ts ├── fixtures │ ├── counter.ts │ ├── edge_todos.ts │ └── todos.ts ├── helpers │ ├── marble-testing.ts │ └── test-helper.ts ├── integration.spec.ts ├── ngc │ ├── main.ts │ └── tsconfig.ngc.json ├── state.spec.ts └── store.spec.ts ├── src ├── dispatcher.ts ├── ng2.ts ├── reducer.ts ├── state.ts ├── store.ts └── utils.ts ├── tests.bundle.ts ├── tsconfig.dist.json ├── tsconfig.json ├── tslint.json └── yarn.lock /.editorconfig: -------------------------------------------------------------------------------- 1 | # http://editorconfig.org 2 | 3 | root = true 4 | 5 | [*] 6 | charset = utf-8 7 | indent_style = space 8 | indent_size = 2 9 | end_of_line = lf 10 | insert_final_newline = true 11 | trim_trailing_whitespace = true 12 | 13 | [*.md] 14 | insert_final_newline = false 15 | trim_trailing_whitespace = false -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | 5 | # Runtime data 6 | pids 7 | *.pid 8 | *.seed 9 | .DS_Store 10 | 11 | # Directory for instrumented libs generated by jscoverage/JSCover 12 | lib-cov 13 | 14 | # Coverage directory used by tools like istanbul 15 | coverage 16 | 17 | # Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) 18 | .grunt 19 | 20 | # node-waf configuration 21 | .lock-wscript 22 | 23 | # Compiled binary addons (http://nodejs.org/api/addons.html) 24 | build/Release 25 | 26 | # Dependency directory 27 | # https://www.npmjs.org/doc/misc/npm-faq.html#should-i-check-my-node_modules-folder-into-git 28 | node_modules 29 | tmp 30 | typings 31 | dist 32 | *.tgz 33 | .idea 34 | spec/ngc/ngfactory/ 35 | spec/ngc/output/ 36 | release -------------------------------------------------------------------------------- /.npmignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | 5 | # Runtime data 6 | pids 7 | *.pid 8 | *.seed 9 | 10 | # Directory for instrumented libs generated by jscoverage/JSCover 11 | lib-cov 12 | 13 | # Coverage directory used by tools like istanbul 14 | coverage 15 | 16 | # Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) 17 | .grunt 18 | 19 | # node-waf configuration 20 | .lock-wscript 21 | 22 | # Compiled binary addons (http://nodejs.org/api/addons.html) 23 | build/Release 24 | 25 | # Dependency directory 26 | # https://www.npmjs.org/doc/misc/npm-faq.html#should-i-check-my-node_modules-folder-into-git 27 | node_modules 28 | tmp 29 | typings 30 | -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | ## Developing 2 | 3 | ### Setup 4 | 5 | ``` 6 | npm install 7 | npm run typings 8 | ``` 9 | 10 | ### Testing 11 | 12 | ``` 13 | npm test 14 | ``` 15 | 16 | ## Submitting Pull Requests 17 | 18 | **Please follow these basic steps to simplify pull request reviews - if you don't you'll probably just be asked to anyway.** 19 | 20 | * Please rebase your branch against the current master 21 | * Run ```npm install``` to make sure your development dependencies are up-to-date 22 | * Please ensure the test suite passes before submitting a PR 23 | * If you've added new functionality, **please** include tests which validate its behaviour 24 | * Make reference to possible [issues](https://github.com/ngrx/store/issues) on PR comment 25 | 26 | ## Submitting bug reports 27 | 28 | * Please detail the affected browser(s) and operating system(s) 29 | * Please be sure to state which version of node **and** npm you're using 30 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2015 ngrx 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 | 23 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | --- 2 | # This repository is for version 2.x of @ngrx/store. 3 | # [Click here for the latest version (4.x)](https://github.com/ngrx/platform) 4 | --- 5 | 6 | ## @ngrx/store 7 | RxJS powered state management for Angular applications, inspired by Redux 8 | 9 | [![Join the chat at https://gitter.im/ngrx/store](https://badges.gitter.im/ngrx/store.svg)](https://gitter.im/ngrx/store?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) 10 | [![CircleCI Status for ngrx/store](https://circleci.com/gh/ngrx/store.svg?style=shield&circle-token=aea1fc73de3419cd926fc95e627e036113646fd8 11 | )](https://circleci.com/gh/ngrx/store) 12 | [![npm version](https://badge.fury.io/js/%40ngrx%2Fstore.svg)](https://www.npmjs.com/package/@ngrx/store) 13 | 14 | @ngrx/store is a controlled state container designed to help write performant, consistent applications 15 | on top of Angular. Core tenets: 16 | - State is a single immutable data structure 17 | - Actions describe state changes 18 | - Pure functions called reducers take the previous state and the next action to compute the new state 19 | - State accessed with the `Store`, an observable of state and an observer of actions 20 | 21 | These core principles enable building components that can use the `OnPush` change detection strategy 22 | giving you [intelligent, performant change detection](http://blog.thoughtram.io/angular/2016/02/22/angular-2-change-detection-explained.html#smarter-change-detection) 23 | throughout your application. 24 | 25 | 26 | ### Installation 27 | Install @ngrx/core and @ngrx/store from npm: 28 | ```bash 29 | npm install @ngrx/core @ngrx/store@2.2.3 --save 30 | ``` 31 | 32 | Optional packages: 33 | - [@ngrx/store-devtools](https://github.com/ngrx/store-devtools) instruments your store letting you use a 34 | [powerful time-travelling debugger](https://chrome.google.com/webstore/detail/redux-devtools/lmhkpmbekcpmknklioeibfkpmmfibljd?hl=en). 35 | - [@ngrx/router-store](https://github.com/ngrx/router-store) keeps the state of @angular/router in your store 36 | - [@ngrx/effects](https://github.com/ngrx/effects) isolates side effects from your UI by expressing side effects as sources of actions 37 | 38 | 39 | ### Examples 40 | - [Official @ngrx/example-app](https://github.com/ngrx/example-app) is an officially maintained example application showcasing best practices 41 | for @ngrx projects, including @ngrx/store and @ngrx/effects 42 | - [angular-webpack2-starter](https://github.com/qdouble/angular-webpack2-starter) is a complete Webpack 2 starter with built-in support for @ngrx. 43 | Includes Ahead-of-Time (AOT) compilation, hot module reloading (HMR), devtools, and server-side rendering. 44 | 45 | 46 | ### Introduction 47 | - [Reactive Angular 2 with ngrx (video)](https://youtu.be/mhA7zZ23Odw) 48 | - [Comprehensive Introduction to @ngrx/store](https://gist.github.com/btroncone/a6e4347326749f938510) 49 | - [@ngrx/store in 10 minutes (video)](https://egghead.io/lessons/angular-2-ngrx-store-in-10-minutes) 50 | - [Build Redux Style Applications with Angular2, RxJS, and ngrx/store (video)](https://egghead.io/courses/building-a-time-machine-with-angular-2-and-rxjs) 51 | 52 | 53 | ### Setup 54 | Create a reducer function for each data type you have in your application. The combination of these reducers will 55 | make up your application state: 56 | 57 | ```ts 58 | // counter.ts 59 | import { ActionReducer, Action } from '@ngrx/store'; 60 | 61 | export const INCREMENT = 'INCREMENT'; 62 | export const DECREMENT = 'DECREMENT'; 63 | export const RESET = 'RESET'; 64 | 65 | export function counterReducer(state: number = 0, action: Action) { 66 | switch (action.type) { 67 | case INCREMENT: 68 | return state + 1; 69 | 70 | case DECREMENT: 71 | return state - 1; 72 | 73 | case RESET: 74 | return 0; 75 | 76 | default: 77 | return state; 78 | } 79 | } 80 | ``` 81 | 82 | In your app's main module, import those reducers and use the `StoreModule.provideStore(reducers)` 83 | function to provide them to Angular's injector: 84 | 85 | ```ts 86 | import { NgModule } from '@angular/core' 87 | import { StoreModule } from '@ngrx/store'; 88 | import { counterReducer } from './counter'; 89 | 90 | @NgModule({ 91 | imports: [ 92 | BrowserModule, 93 | StoreModule.provideStore({ counter: counterReducer }) 94 | ] 95 | }) 96 | export class AppModule {} 97 | ``` 98 | 99 | 100 | You can then inject the `Store` service into your components and services. Use `store.select` to 101 | _select_ slice(s) of state: 102 | 103 | ```ts 104 | import { Store } from '@ngrx/store'; 105 | import { INCREMENT, DECREMENT, RESET } from './counter'; 106 | 107 | interface AppState { 108 | counter: number; 109 | } 110 | 111 | @Component({ 112 | selector: 'my-app', 113 | template: ` 114 | 115 |
Current Count: {{ counter | async }}
116 | 117 | 118 | 119 | ` 120 | }) 121 | class MyAppComponent { 122 | counter: Observable; 123 | 124 | constructor(private store: Store){ 125 | this.counter = store.select('counter'); 126 | } 127 | 128 | increment(){ 129 | this.store.dispatch({ type: INCREMENT }); 130 | } 131 | 132 | decrement(){ 133 | this.store.dispatch({ type: DECREMENT }); 134 | } 135 | 136 | reset(){ 137 | this.store.dispatch({ type: RESET }); 138 | } 139 | } 140 | ``` 141 | 142 | 143 | ## Contributing 144 | Please read [contributing guidelines here](https://github.com/ngrx/store/blob/master/CONTRIBUTING.md). 145 | -------------------------------------------------------------------------------- /circle.yml: -------------------------------------------------------------------------------- 1 | machine: 2 | node: 3 | version: 6.1.0 4 | 5 | dependencies: 6 | pre: 7 | - npm install -g npm 8 | -------------------------------------------------------------------------------- /index.ts: -------------------------------------------------------------------------------- 1 | export * from './src/dispatcher'; 2 | export * from './src/ng2'; 3 | export * from './src/reducer'; 4 | export * from './src/state'; 5 | export * from './src/store'; 6 | export * from './src/utils'; 7 | -------------------------------------------------------------------------------- /karma.conf.js: -------------------------------------------------------------------------------- 1 | var path = require('path'); 2 | var webpack = require('webpack'); 3 | 4 | module.exports = function(karma) { 5 | 'use strict'; 6 | 7 | karma.set({ 8 | basePath: __dirname, 9 | 10 | frameworks: ['jasmine'], 11 | 12 | files: [ 13 | { pattern: 'tests.bundle.ts', watched: false } 14 | ], 15 | 16 | exclude: [], 17 | 18 | preprocessors: { 19 | 'tests.bundle.ts': ['coverage', 'webpack', 'sourcemap'] 20 | }, 21 | 22 | reporters: ['mocha', 'coverage'], 23 | 24 | coverageReporter: { 25 | dir: 'coverage/', 26 | reporters: [ 27 | { type: 'text-summary' }, 28 | { type: 'json' }, 29 | { type: 'html' } 30 | ] 31 | }, 32 | 33 | mime: { 34 | 'text/x-typescript': ['ts', 'tsx'] 35 | }, 36 | 37 | browsers: ['Chrome'], 38 | 39 | port: 9018, 40 | runnerPort: 9101, 41 | colors: true, 42 | logLevel: karma.LOG_INFO, 43 | autoWatch: true, 44 | singleRun: false, 45 | webpackServer: { noInfo: true }, 46 | webpack: { 47 | devtool: 'inline-source-map', 48 | resolve: { 49 | extensions: ['.ts', '.js'] 50 | }, 51 | module: { 52 | loaders: [ 53 | { 54 | enforce: 'pre', 55 | test: /\.ts$/, 56 | loader: 'tslint-loader', 57 | exclude: [ 58 | /node_modules/ 59 | ] 60 | }, 61 | { 62 | test: /\.ts?$/, 63 | exclude: /(node_modules)/, 64 | loader: 'awesome-typescript-loader' 65 | }, 66 | { 67 | enforce: 'post', 68 | test: /\.(js|ts)$/, loader: 'istanbul-instrumenter-loader', 69 | include: path.resolve(__dirname, 'src'), 70 | exclude: [ 71 | /\.(e2e|spec|bundle)\.ts$/, 72 | /node_modules/ 73 | ] 74 | } 75 | ] 76 | }, 77 | plugins: [ 78 | new webpack.LoaderOptionsPlugin({ 79 | options: { 80 | tslint: { 81 | emitErrors: false, 82 | failOnHint: false, 83 | resourcePath: 'src' 84 | } 85 | } 86 | }), 87 | new webpack.ContextReplacementPlugin( 88 | // The (\\|\/) piece accounts for path separators in *nix and Windows 89 | /angular(\\|\/)core(\\|\/)(esm(\\|\/)src|src)(\\|\/)linker/, 90 | path.resolve('src'), 91 | {} 92 | ) 93 | ] 94 | } 95 | }); 96 | }; 97 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@ngrx/store", 3 | "version": "2.2.3", 4 | "description": "RxJS powered Redux for Angular2 apps", 5 | "main": "./bundles/store.umd.js", 6 | "module": "./index.js", 7 | "scripts": { 8 | "karma": "karma start --single-run", 9 | "test:unit": "npm run karma", 10 | "test:ngc": "ngc -p ./spec/ngc/tsconfig.ngc.json", 11 | "test": "npm run test:unit && npm run test:ngc", 12 | "clean:pre": "rimraf release", 13 | "clean:post": "rimraf \"src/**/*.ngfactory.ts\"", 14 | "copy": "cpy LICENSE package.json README.md release", 15 | "build:js": "ngc -p tsconfig.dist.json", 16 | "build:umd": "rollup -c rollup.config.js", 17 | "build:uglify": "uglifyjs -c --screw-ie8 --comments -o ./release/bundles/store.min.umd.js ./release/bundles/store.umd.js", 18 | "prebuild": "npm run test && npm run clean:pre", 19 | "postbuild": "npm run clean:post && npm run copy", 20 | "build": "npm run build:js && npm run build:umd && npm run build:uglify" 21 | }, 22 | "repository": { 23 | "type": "git", 24 | "url": "git+https://github.com/ngrx/store.git" 25 | }, 26 | "keywords": [ 27 | "RxJS", 28 | "Angular2", 29 | "Redux" 30 | ], 31 | "author": "Rob Wormald ", 32 | "license": "MIT", 33 | "bugs": { 34 | "url": "https://github.com/ngrx/store/issues" 35 | }, 36 | "homepage": "https://github.com/ngrx/store#readme", 37 | "peerDependencies": { 38 | "@angular/core": "^2.0.0 || ^4.0.0", 39 | "rxjs": "^5.4.0", 40 | "@ngrx/core": "^1.1.0" 41 | }, 42 | "devDependencies": { 43 | "@angular/common": "^2.0.0", 44 | "@angular/compiler": "^2.0.0", 45 | "@angular/compiler-cli": "^2.0.0", 46 | "@angular/core": "^2.0.0", 47 | "@angular/platform-browser": "^2.0.0", 48 | "@angular/platform-browser-dynamic": "^2.0.0", 49 | "@angular/platform-server": "^2.0.0", 50 | "@ngrx/core": "^1.2.0", 51 | "@types/jasmine": "^2.2.33", 52 | "@types/node": "^6.0.38", 53 | "awesome-typescript-loader": "^3.0.0", 54 | "core-js": "^2.4.1", 55 | "cpy-cli": "^1.0.1", 56 | "istanbul-instrumenter-loader": "^0.2.0", 57 | "jasmine": "^2.5.0", 58 | "karma": "^1.2.0", 59 | "karma-chrome-launcher": "^2.0.0", 60 | "karma-coverage": "^1.1.1", 61 | "karma-jasmine": "^1.0.2", 62 | "karma-mocha-reporter": "^2.1.0", 63 | "karma-sourcemap-loader": "^0.3.7", 64 | "karma-webpack": "^2.0.0", 65 | "rimraf": "^2.5.4", 66 | "rollup": "^0.34.13", 67 | "rxjs": "^5.4.0", 68 | "ts-loader": "^0.8.2", 69 | "tslint": "^3.15.1", 70 | "tslint-loader": "^2.1.5", 71 | "typescript": "^2.4.1", 72 | "uglifyjs": "^2.4.10", 73 | "webpack": "^2.1.0-beta.21", 74 | "zone.js": "^0.7.2" 75 | } 76 | } 77 | -------------------------------------------------------------------------------- /rollup.config.js: -------------------------------------------------------------------------------- 1 | export default { 2 | entry: './release/index.js', 3 | dest: './release/bundles/store.umd.js', 4 | format: 'umd', 5 | moduleName: 'ngrx.store', 6 | globals: { 7 | '@angular/core': 'ng.core', 8 | '@ngrx/core': 'ngrx.core', 9 | 'rxjs/Observable': 'Rx', 10 | 'rxjs/BehaviorSubject': 'Rx', 11 | 'rxjs/Subscriber': 'Rx', 12 | 'rxjs/scheduler/queue': 'Rx.Scheduler', 13 | 'rxjs/operator/observeOn': 'Rx.Observable.prototype', 14 | 'rxjs/operator/scan': 'Rx.Observable.prototype', 15 | 'rxjs/operator/withLatestFrom': 'Rx.Observable' 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /spec/edge.spec.ts: -------------------------------------------------------------------------------- 1 | import {ReflectiveInjector} from '@angular/core'; 2 | import {Observable} from 'rxjs/Observable'; 3 | import {todos, todoCount} from './fixtures/edge_todos'; 4 | 5 | import {Store, StoreModule, Dispatcher, State, Action, combineReducers} from '../'; 6 | 7 | 8 | interface TestAppSchema { 9 | counter1: number; 10 | counter2: number; 11 | counter3: number; 12 | } 13 | 14 | interface Todo { } 15 | 16 | interface TodoAppSchema { 17 | visibilityFilter: string; 18 | todos: Todo[]; 19 | } 20 | 21 | 22 | 23 | describe('ngRx Store', () => { 24 | 25 | describe('basic store actions', function() { 26 | 27 | let injector: ReflectiveInjector; 28 | let store: Store; 29 | let dispatcher: Dispatcher; 30 | 31 | beforeEach(() => { 32 | 33 | injector = ReflectiveInjector.resolveAndCreate([ 34 | StoreModule.provideStore({ todos, todoCount }).providers 35 | ]); 36 | 37 | store = injector.get(Store); 38 | dispatcher = injector.get(Dispatcher); 39 | }); 40 | 41 | it('should provide an Observable Store', () => { 42 | expect(store).toBeDefined(); 43 | }); 44 | 45 | it('should handle re-entrancy', (done) => { 46 | 47 | let todosNextCount = 0; 48 | let todosCountNextCount = 0; 49 | 50 | store.select('todos').subscribe((todos: any[]) => { 51 | todosNextCount++ 52 | store.dispatch({ type: 'SET_COUNT', payload: todos.length }) 53 | }); 54 | 55 | store.select('todoCount').subscribe(count => { 56 | todosCountNextCount++; 57 | }); 58 | 59 | store.dispatch({ type: 'ADD_TODO', payload: { name: 'test' } }); 60 | expect(todosNextCount).toBe(2); 61 | expect(todosCountNextCount).toBe(2); 62 | 63 | setTimeout(() => { 64 | expect(todosNextCount).toBe(2); 65 | expect(todosCountNextCount).toBe(2); 66 | done(); 67 | }, 10); 68 | 69 | }); 70 | }); 71 | }); 72 | -------------------------------------------------------------------------------- /spec/fixtures/counter.ts: -------------------------------------------------------------------------------- 1 | export const INCREMENT = 'INCREMENT'; 2 | export const DECREMENT = 'DECREMENT'; 3 | export const RESET = 'RESET'; 4 | 5 | export function counterReducer(state = 0, action){ 6 | switch (action.type) { 7 | case INCREMENT: 8 | return state + 1; 9 | case DECREMENT: 10 | return state - 1; 11 | case RESET: 12 | return 0; 13 | default: 14 | return state; 15 | } 16 | }; 17 | -------------------------------------------------------------------------------- /spec/fixtures/edge_todos.ts: -------------------------------------------------------------------------------- 1 | const todo = (state, action) => { 2 | switch (action.type) { 3 | case 'ADD_TODO': 4 | return { 5 | id: action.payload.id, 6 | text: action.payload.text, 7 | completed: false 8 | } 9 | case 'TOGGLE_TODO': 10 | if (state.id !== action.id) { 11 | return state 12 | } 13 | 14 | return Object.assign({}, state, { 15 | completed: !state.completed 16 | }) 17 | 18 | default: 19 | return state 20 | } 21 | } 22 | 23 | export const todos = (state = [], action) => { 24 | switch (action.type) { 25 | case 'ADD_TODO': 26 | return [ 27 | ...state, 28 | todo(undefined, action) 29 | ] 30 | case 'TOGGLE_TODO': 31 | return state.map(t => 32 | todo(t, action) 33 | ) 34 | default: 35 | return state 36 | } 37 | } 38 | 39 | export const todoCount = (state = 0, action) => { 40 | switch(action.type){ 41 | case 'SET_COUNT': 42 | return action.payload; 43 | default: 44 | return state; 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /spec/fixtures/todos.ts: -------------------------------------------------------------------------------- 1 | export const ADD_TODO = 'ADD_TODO'; 2 | export const COMPLETE_TODO = 'COMPLETE_TODO'; 3 | export const SET_VISIBILITY_FILTER = 'SET_VISIBILITY_FILTER'; 4 | export const COMPLETE_ALL_TODOS = 'COMPLETE_ALL_TODOS'; 5 | 6 | let _id = 0; 7 | 8 | export const VisibilityFilters = { 9 | SHOW_ALL: 'SHOW_ALL', 10 | SHOW_COMPLETED: 'SHOW_COMPLETED', 11 | SHOW_ACTIVE: 'SHOW_ACTIVE' 12 | }; 13 | 14 | export function visibilityFilter(state = VisibilityFilters.SHOW_ALL, {type, payload}) { 15 | switch (type) { 16 | case SET_VISIBILITY_FILTER: 17 | return payload; 18 | default: 19 | return state; 20 | } 21 | }; 22 | 23 | export function todos(state = [], {type, payload}) { 24 | switch (type) { 25 | case ADD_TODO: 26 | return [ 27 | ...state, 28 | { 29 | id: ++_id, 30 | text: payload.text, 31 | completed: false 32 | } 33 | ]; 34 | case COMPLETE_ALL_TODOS: 35 | return state.map(todo => Object.assign({}, todo, {completed: true})); 36 | case COMPLETE_TODO: 37 | return state.map(todo => { 38 | return todo.id === payload.id ? Object.assign({}, todo, {completed: true}) : todo; 39 | }); 40 | default: 41 | return state; 42 | } 43 | }; 44 | -------------------------------------------------------------------------------- /spec/helpers/marble-testing.ts: -------------------------------------------------------------------------------- 1 | declare var global; 2 | 3 | function hot(...args: any[]) { 4 | if (!global.rxTestScheduler) { 5 | throw 'tried to use hot() in async test'; 6 | } 7 | return global.rxTestScheduler.createHotObservable.apply(global.rxTestScheduler, arguments); 8 | } 9 | 10 | function cold() { 11 | if (!global.rxTestScheduler) { 12 | throw 'tried to use cold() in async test'; 13 | } 14 | return global.rxTestScheduler.createColdObservable.apply(global.rxTestScheduler, arguments); 15 | } 16 | 17 | function expectObservable(...args: any[]) { 18 | if (!global.rxTestScheduler) { 19 | throw 'tried to use expectObservable() in async test'; 20 | } 21 | return global.rxTestScheduler.expectObservable.apply(global.rxTestScheduler, arguments); 22 | } 23 | 24 | function expectSubscriptions(...args: any[]) { 25 | if (!global.rxTestScheduler) { 26 | throw 'tried to use expectSubscriptions() in async test'; 27 | } 28 | return global.rxTestScheduler.expectSubscriptions.apply(global.rxTestScheduler, arguments); 29 | } 30 | 31 | function assertDeepEqual(actual, expected) { 32 | ( expect(actual)).toDeepEqual(expected); 33 | } 34 | 35 | export { 36 | hot, 37 | cold, 38 | expectObservable, 39 | expectSubscriptions, 40 | assertDeepEqual 41 | }; -------------------------------------------------------------------------------- /spec/helpers/test-helper.ts: -------------------------------------------------------------------------------- 1 | declare var global, require, Symbol; 2 | 3 | jasmine.DEFAULT_TIMEOUT_INTERVAL = 5000; 4 | 5 | const _ = require('lodash'); 6 | const root = require('rxjs/util/root').root; 7 | import {TestScheduler} from 'rxjs/testing/TestScheduler'; 8 | 9 | import * as marbleHelpers from './marble-testing'; 10 | 11 | global.rxTestScheduler = null; 12 | global.cold = marbleHelpers.cold; 13 | global.hot = marbleHelpers.hot; 14 | global.expectObservable = marbleHelpers.expectObservable; 15 | global.expectSubscriptions = marbleHelpers.expectSubscriptions; 16 | 17 | const assertDeepEqual = marbleHelpers.assertDeepEqual; 18 | 19 | const glit = global.it; 20 | 21 | global.it = function(description, cb, timeout) { 22 | if (cb.length === 0) { 23 | glit(description, function() { 24 | global.rxTestScheduler = new TestScheduler(assertDeepEqual); 25 | cb(); 26 | global.rxTestScheduler.flush(); 27 | }); 28 | } else { 29 | glit.apply(this, arguments); 30 | } 31 | }; 32 | 33 | global.it.asDiagram = function() { 34 | return global.it; 35 | }; 36 | 37 | const glfit = global.fit; 38 | 39 | global.fit = function(description, cb, timeout) { 40 | if (cb.length === 0) { 41 | glfit(description, function() { 42 | global.rxTestScheduler = new TestScheduler(assertDeepEqual); 43 | cb(); 44 | global.rxTestScheduler.flush(); 45 | }); 46 | } else { 47 | glfit.apply(this, arguments); 48 | } 49 | }; 50 | 51 | function stringify(x) { 52 | return JSON.stringify(x, function(key, value) { 53 | if (Array.isArray(value)) { 54 | return '[' + value 55 | .map(function(i) { 56 | return '\n\t' + stringify(i); 57 | }) + '\n]'; 58 | } 59 | return value; 60 | }) 61 | .replace(/\\"/g, '"') 62 | .replace(/\\t/g, '\t') 63 | .replace(/\\n/g, '\n'); 64 | } 65 | 66 | beforeEach(function() { 67 | jasmine.addMatchers({ 68 | toDeepEqual: function(util, customEqualityTesters) { 69 | return { 70 | compare: function(actual, expected) { 71 | let result: any = { pass: _.isEqual(actual, expected) }; 72 | 73 | if (!result.pass && Array.isArray(actual) && Array.isArray(expected)) { 74 | result.message = 'Expected \n'; 75 | actual.forEach(function(x) { 76 | result.message += stringify(x) + '\n'; 77 | }); 78 | result.message += '\nto deep equal \n'; 79 | expected.forEach(function(x) { 80 | result.message += stringify(x) + '\n'; 81 | }); 82 | } 83 | 84 | return result; 85 | } 86 | }; 87 | } 88 | }); 89 | }); 90 | 91 | afterEach(function() { 92 | global.rxTestScheduler = null; 93 | }); 94 | 95 | (function() { 96 | Object.defineProperty(Error.prototype, 'toJSON', { 97 | value: function() { 98 | let alt = {}; 99 | 100 | Object.getOwnPropertyNames(this).forEach(function(key) { 101 | if (key !== 'stack') { 102 | alt[key] = this[key]; 103 | } 104 | }, this); 105 | return alt; 106 | }, 107 | configurable: true 108 | }); 109 | 110 | global.__root__ = root; 111 | })(); 112 | 113 | global.lowerCaseO = function lowerCaseO() { 114 | const values = [].slice.apply(arguments); 115 | 116 | const o = { 117 | subscribe: function(observer) { 118 | values.forEach(function(v) { 119 | observer.next(v); 120 | }); 121 | observer.complete(); 122 | } 123 | }; 124 | 125 | o[(Symbol).observable] = function() { 126 | return this; 127 | }; 128 | 129 | return o; 130 | }; 131 | -------------------------------------------------------------------------------- /spec/integration.spec.ts: -------------------------------------------------------------------------------- 1 | import {Observable} from 'rxjs/Observable'; 2 | import {ReflectiveInjector} from '@angular/core'; 3 | import 'rxjs/add/observable/combineLatest'; 4 | 5 | import {Store, StoreModule, Action, combineReducers, INITIAL_REDUCER, INITIAL_STATE} from '../'; 6 | import {counterReducer, INCREMENT, DECREMENT, RESET} from './fixtures/counter'; 7 | import {todos, visibilityFilter, VisibilityFilters, SET_VISIBILITY_FILTER, ADD_TODO, COMPLETE_TODO, COMPLETE_ALL_TODOS} from './fixtures/todos'; 8 | 9 | interface Todo { 10 | id: number; 11 | text: string; 12 | completed: boolean; 13 | } 14 | 15 | interface TodoAppSchema { 16 | visibilityFilter: string; 17 | todos: Todo[]; 18 | } 19 | 20 | describe('ngRx Integration spec', () => { 21 | 22 | describe('todo integration spec', function() { 23 | 24 | let injector: ReflectiveInjector; 25 | let store: Store; 26 | let currentState: TodoAppSchema; 27 | 28 | const rootReducer = combineReducers({ todos, visibilityFilter }); 29 | const initialValue = { todos: [], visibilityFilter: VisibilityFilters.SHOW_ALL }; 30 | 31 | injector = ReflectiveInjector.resolveAndCreate([ 32 | StoreModule.provideStore(rootReducer, initialValue).providers 33 | ]); 34 | 35 | store = injector.get(Store); 36 | 37 | store.subscribe(state => { 38 | currentState = state; 39 | }); 40 | 41 | it('should successfully instantiate', () => { 42 | expect(store).toBeDefined(); 43 | }); 44 | 45 | it('should combine reducers automatically if a key/value map is provided', () => { 46 | const reducers = { test: function(){} }; 47 | spyOn(reducers, 'test'); 48 | const action = { type: 'Test Action' }; 49 | const reducer = ReflectiveInjector.resolveAndCreate([ StoreModule.provideStore(reducers).providers ]).get(INITIAL_REDUCER); 50 | 51 | expect(reducer).toBeDefined(); 52 | expect(typeof reducer === 'function').toBe(true); 53 | 54 | reducer(undefined, action); 55 | 56 | expect(reducers.test).toHaveBeenCalledWith(undefined, action); 57 | }); 58 | 59 | it('should probe the reducer to resolve the initial state if no initial state is provided', () => { 60 | const reducer = () => 2; 61 | const initialState = ReflectiveInjector.resolveAndCreate([ StoreModule.provideStore(reducer).providers ]).get(INITIAL_STATE); 62 | 63 | expect(initialState).toBe(2); 64 | }); 65 | 66 | it('should use a provided initial state', () => { 67 | const reducer = () => 2; 68 | const initialState = ReflectiveInjector.resolveAndCreate([ StoreModule.provideStore(reducer, 3).providers ]).get(INITIAL_STATE); 69 | 70 | expect(initialState).toBe(3); 71 | }); 72 | 73 | it('should start with no todos and showing all filter', () => { 74 | expect(currentState.todos.length).toEqual(0); 75 | expect(currentState.visibilityFilter).toEqual(VisibilityFilters.SHOW_ALL); 76 | }); 77 | 78 | it('should add a todo', () => { 79 | store.dispatch({ type: ADD_TODO, payload: { text: 'first todo' } }); 80 | expect(currentState.todos.length).toEqual(1); 81 | 82 | expect(currentState.todos[0].text).toEqual('first todo'); 83 | expect(currentState.todos[0].completed).toEqual(false); 84 | expect(currentState.todos[0].id).toEqual(1); 85 | }); 86 | 87 | it('should add another todo', () => { 88 | store.dispatch({ type: ADD_TODO, payload: { text: 'second todo' } }); 89 | expect(currentState.todos.length).toEqual(2); 90 | 91 | expect(currentState.todos[1].text).toEqual('second todo'); 92 | expect(currentState.todos[1].completed).toEqual(false); 93 | expect(currentState.todos[1].id).toEqual(2); 94 | }); 95 | 96 | it('should complete the first todo', () => { 97 | store.dispatch({ type: COMPLETE_TODO, payload: { id: 1 } }); 98 | expect(currentState.todos.length).toEqual(2); 99 | 100 | expect(currentState.todos[0].text).toEqual('first todo'); 101 | expect(currentState.todos[0].completed).toEqual(true); 102 | expect(currentState.todos[0].id).toEqual(1); 103 | }); 104 | 105 | it('should use visibilityFilter to filter todos', () => { 106 | 107 | const filterVisibleTodos = (visibilityFilter, todos) => { 108 | let predicate; 109 | if (visibilityFilter === VisibilityFilters.SHOW_ALL) { 110 | predicate = () => true; 111 | } 112 | else if (visibilityFilter === VisibilityFilters.SHOW_ACTIVE) { 113 | predicate = (todo) => !todo.completed; 114 | } 115 | else { 116 | predicate = (todo) => todo.completed; 117 | } 118 | return todos.filter(predicate); 119 | }; 120 | 121 | let currentlyVisibleTodos; 122 | 123 | Observable.combineLatest(store.select('visibilityFilter'), store.select('todos'), filterVisibleTodos) 124 | .subscribe(visibleTodos => { 125 | currentlyVisibleTodos = visibleTodos; 126 | }); 127 | 128 | expect(currentlyVisibleTodos.length).toBe(2); 129 | 130 | store.dispatch({ type: SET_VISIBILITY_FILTER, payload: VisibilityFilters.SHOW_ACTIVE }); 131 | 132 | expect(currentlyVisibleTodos.length).toBe(1); 133 | expect(currentlyVisibleTodos[0].completed).toBe(false); 134 | 135 | store.dispatch({ type: SET_VISIBILITY_FILTER, payload: VisibilityFilters.SHOW_COMPLETED }); 136 | 137 | expect(currentlyVisibleTodos.length).toBe(1); 138 | expect(currentlyVisibleTodos[0].completed).toBe(true); 139 | 140 | store.dispatch({ type: COMPLETE_ALL_TODOS }); 141 | 142 | expect(currentlyVisibleTodos.length).toBe(2); 143 | expect(currentlyVisibleTodos[0].completed).toBe(true); 144 | expect(currentlyVisibleTodos[1].completed).toBe(true); 145 | 146 | store.dispatch({ type: SET_VISIBILITY_FILTER, payload: VisibilityFilters.SHOW_ACTIVE }); 147 | 148 | expect(currentlyVisibleTodos.length).toBe(0); 149 | 150 | }); 151 | }); 152 | }); 153 | -------------------------------------------------------------------------------- /spec/ngc/main.ts: -------------------------------------------------------------------------------- 1 | import { NgModule, Component } from '@angular/core'; 2 | import { platformDynamicServer } from '@angular/platform-server'; 3 | import { BrowserModule } from '@angular/platform-browser'; 4 | import { Store, StoreModule } from '../../'; 5 | import { counterReducer, INCREMENT, DECREMENT } from '../fixtures/counter'; 6 | import { Observable } from 'rxjs/Observable'; 7 | 8 | export interface AppState { 9 | count: number; 10 | } 11 | 12 | export const storeConfig = {count: counterReducer}; 13 | export const initialState = { count : 0 }; 14 | 15 | @Component({ 16 | selector: 'ngc-spec-component', 17 | template: ` 18 | 19 | Count : {{ count | async }} 20 | 21 | ` 22 | }) 23 | export class NgcSpecComponent { 24 | count: Observable; 25 | constructor(public store:Store){ 26 | this.count = store.select(state => state.count); 27 | } 28 | increment(){ 29 | this.store.dispatch({ type: INCREMENT }); 30 | } 31 | decrement(){ 32 | this.store.dispatch({ type: DECREMENT }); 33 | } 34 | } 35 | 36 | @NgModule({ 37 | imports: [ 38 | BrowserModule, 39 | StoreModule.provideStore(storeConfig, initialState) 40 | ], 41 | declarations: [NgcSpecComponent], 42 | bootstrap: [NgcSpecComponent] 43 | }) 44 | export class NgcSpecModule {} 45 | -------------------------------------------------------------------------------- /spec/ngc/tsconfig.ngc.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "ES5", 4 | "emitDecoratorMetadata": true, 5 | "experimentalDecorators": true, 6 | "module": "commonjs", 7 | "moduleResolution": "node", 8 | "outDir": "./output", 9 | "lib": ["es2015", "dom"] 10 | }, 11 | "files": [ 12 | "main.ts" 13 | ], 14 | "angularCompilerOptions": { 15 | "genDir": "ngfactory" 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /spec/state.spec.ts: -------------------------------------------------------------------------------- 1 | import {Observable} from 'rxjs/Observable'; 2 | import {Subject} from 'rxjs/Subject'; 3 | import {ReflectiveInjector} from '@angular/core'; 4 | 5 | import {Dispatcher, State, Reducer, Action, provideStore, StoreModule} from '../'; 6 | 7 | 8 | describe('ngRx State', () => { 9 | const Reducer = { reduce: t => t }; 10 | const initialState = 123; 11 | let injector: ReflectiveInjector; 12 | let state: State; 13 | let dispatcher: Dispatcher; 14 | 15 | beforeEach(() => { 16 | spyOn(Reducer, 'reduce').and.callThrough(); 17 | 18 | injector = ReflectiveInjector.resolveAndCreate([ 19 | StoreModule.provideStore(Reducer.reduce, initialState).providers 20 | ]); 21 | 22 | state = injector.get(State); 23 | dispatcher = injector.get(Dispatcher); 24 | }); 25 | 26 | it('should call the reducer to scan over the dispatcher', function() { 27 | 28 | state.subscribe(); 29 | 30 | expect(Reducer.reduce).toHaveBeenCalledWith(initialState, { type: Dispatcher.INIT }); 31 | 32 | }); 33 | 34 | }); 35 | -------------------------------------------------------------------------------- /spec/store.spec.ts: -------------------------------------------------------------------------------- 1 | import 'rxjs/add/operator/take'; 2 | import {Observable} from 'rxjs/Observable'; 3 | import {ReflectiveInjector} from '@angular/core'; 4 | import { hot, expectObservable } from './helpers/marble-testing'; 5 | 6 | import {Store, Dispatcher, State, Action, combineReducers, StoreModule} from '../'; 7 | import {counterReducer, INCREMENT, DECREMENT, RESET} from './fixtures/counter'; 8 | 9 | interface TestAppSchema { 10 | counter1: number; 11 | counter2: number; 12 | counter3: number; 13 | } 14 | 15 | interface Todo { } 16 | 17 | interface TodoAppSchema { 18 | visibilityFilter: string; 19 | todos: Todo[]; 20 | } 21 | 22 | 23 | 24 | describe('ngRx Store', () => { 25 | 26 | describe('basic store actions', function() { 27 | 28 | let injector: ReflectiveInjector; 29 | let store: Store; 30 | let dispatcher: Dispatcher; 31 | 32 | beforeEach(() => { 33 | const rootReducer = combineReducers({ 34 | counter1: counterReducer, 35 | counter2: counterReducer, 36 | counter3: counterReducer 37 | }); 38 | 39 | const initialValue = { counter1: 0, counter2: 1 }; 40 | 41 | injector = ReflectiveInjector.resolveAndCreate([ 42 | StoreModule.provideStore(rootReducer, initialValue).providers 43 | ]); 44 | 45 | store = injector.get(Store); 46 | dispatcher = injector.get(Dispatcher); 47 | }); 48 | 49 | it('should provide an Observable Store', () => { 50 | expect(store).toBeDefined(); 51 | }); 52 | 53 | const actionSequence = '--a--b--c--d--e'; 54 | const actionValues = { 55 | a: { type: INCREMENT }, 56 | b: { type: INCREMENT }, 57 | c: { type: DECREMENT }, 58 | d: { type: RESET }, 59 | e: { type: INCREMENT } 60 | }; 61 | 62 | it('should let you select state with a key name or selector function', function() { 63 | 64 | const counterSteps = hot(actionSequence, actionValues); 65 | 66 | counterSteps.subscribe((action) => store.dispatch(action)); 67 | 68 | const counterStateWithString = store.select('counter1'); 69 | const counterStateWithFunc = store.select(s => s.counter1); 70 | 71 | const stateSequence = 'i-v--w--x--y--z'; 72 | const counter1Values = { i: 0, v: 1, w: 2, x: 1, y: 0, z: 1 }; 73 | 74 | expectObservable(counterStateWithString).toBe(stateSequence, counter1Values); 75 | expectObservable(counterStateWithFunc).toBe(stateSequence, counter1Values); 76 | 77 | }); 78 | 79 | it('should correctly lift itself', function() { 80 | 81 | const result = store.select('t'); 82 | 83 | expect(result instanceof Store).toBe(true); 84 | 85 | }); 86 | 87 | it('should appropriately handle initial state', (done) => { 88 | 89 | store.take(1).subscribe({ 90 | next(val) { 91 | expect(val).toEqual({ counter1: 0, counter2: 1, counter3: 0 }); 92 | }, 93 | error: done, 94 | complete: done 95 | }); 96 | 97 | }); 98 | 99 | it('should increment and decrement counter1', function() { 100 | 101 | const counterSteps = hot(actionSequence, actionValues); 102 | 103 | counterSteps.subscribe((action) => store.dispatch(action)); 104 | 105 | const counterState = store.select('counter1'); 106 | 107 | const stateSequence = 'i-v--w--x--y--z'; 108 | const counter1Values = { i: 0, v: 1, w: 2, x: 1, y: 0, z: 1 }; 109 | 110 | expectObservable(counterState).toBe(stateSequence, counter1Values); 111 | 112 | }); 113 | 114 | it('should increment and decrement counter1 using the dispatcher', function() { 115 | 116 | const counterSteps = hot(actionSequence, actionValues); 117 | 118 | counterSteps.subscribe((action) => dispatcher.dispatch(action)); 119 | 120 | const counterState = store.select('counter1'); 121 | 122 | const stateSequence = 'i-v--w--x--y--z'; 123 | const counter1Values = { i: 0, v: 1, w: 2, x: 1, y: 0, z: 1 }; 124 | 125 | expectObservable(counterState).toBe(stateSequence, counter1Values); 126 | 127 | }); 128 | 129 | 130 | it('should increment and decrement counter2 separately', function() { 131 | 132 | const counterSteps = hot(actionSequence, actionValues); 133 | 134 | counterSteps.subscribe((action) => store.dispatch(action)); 135 | 136 | const counter1State = store.select('counter1'); 137 | const counter2State = store.select('counter2'); 138 | 139 | const stateSequence = 'i-v--w--x--y--z'; 140 | const counter1Values = { i: 0, v: 1, w: 2, x: 1, y: 0, z: 1 }; 141 | const counter2Values = { i: 1, v: 2, w: 3, x: 2, y: 0, z: 1 }; 142 | 143 | expectObservable(counter1State).toBe(stateSequence, counter1Values); 144 | expectObservable(counter2State).toBe(stateSequence, counter2Values); 145 | 146 | }); 147 | 148 | it('should allow you to add a reducer later', function() { 149 | 150 | let currentState; 151 | 152 | store.subscribe(state => { 153 | currentState = state; 154 | }); 155 | 156 | expect(currentState).toEqual({counter1: 0, counter2: 1, counter3: 0}); 157 | store.dispatch({type: INCREMENT}); 158 | expect(currentState).toEqual({counter1: 1, counter2: 2, counter3: 1}); 159 | 160 | store.replaceReducer(combineReducers({ counter1: counterReducer, dynamicCounter: counterReducer})); 161 | 162 | expect(currentState).toEqual({ counter1: 1, dynamicCounter: 0 }); 163 | 164 | store.dispatch({type: INCREMENT}); 165 | 166 | expect(currentState).toEqual({ counter1: 2, dynamicCounter: 1 }); 167 | 168 | }); 169 | 170 | it('should implement the observer interface forwarding actions and errors to the dispatcher', function() { 171 | 172 | spyOn(dispatcher, 'next'); 173 | spyOn(dispatcher, 'error'); 174 | 175 | store.next(1); 176 | store.error(2); 177 | 178 | expect(dispatcher.next).toHaveBeenCalledWith(1); 179 | expect(dispatcher.error).toHaveBeenCalledWith(2); 180 | 181 | }); 182 | 183 | it('should not be completable', function() { 184 | 185 | const storeSubscription = store.subscribe(); 186 | const dispatcherSubscription = dispatcher.subscribe(); 187 | 188 | store.complete(); 189 | dispatcher.complete(); 190 | 191 | expect(storeSubscription.closed).toBe(false); 192 | expect(dispatcherSubscription.closed).toBe(false); 193 | }); 194 | }); 195 | }); 196 | -------------------------------------------------------------------------------- /src/dispatcher.ts: -------------------------------------------------------------------------------- 1 | import { BehaviorSubject } from 'rxjs/BehaviorSubject'; 2 | 3 | export interface Action { 4 | type: string; 5 | payload?: any; 6 | } 7 | 8 | export class Dispatcher extends BehaviorSubject { 9 | static INIT = '@ngrx/store/init'; 10 | 11 | constructor() { 12 | super({ type: Dispatcher.INIT }); 13 | } 14 | 15 | dispatch(action: Action): void { 16 | this.next(action); 17 | } 18 | 19 | complete() { 20 | // noop 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /src/ng2.ts: -------------------------------------------------------------------------------- 1 | import { OpaqueToken, NgModule, ModuleWithProviders } from '@angular/core'; 2 | 3 | import { Reducer } from './reducer'; 4 | import { Dispatcher } from './dispatcher'; 5 | import { Store } from './store'; 6 | import { State } from './state'; 7 | import { combineReducers } from './utils'; 8 | 9 | export const INITIAL_REDUCER = new OpaqueToken('Token ngrx/store/reducer'); 10 | export const INITIAL_STATE = new OpaqueToken('Token ngrx/store/initial-state'); 11 | 12 | export const _INITIAL_REDUCER = new OpaqueToken('Token _ngrx/store/reducer'); 13 | export const _INITIAL_STATE = new OpaqueToken('Token _ngrx/store/initial-state'); 14 | 15 | export function _initialReducerFactory(reducer) { 16 | if (typeof reducer === 'function') { 17 | return reducer; 18 | } 19 | return combineReducers(reducer); 20 | } 21 | 22 | export function _initialStateFactory(initialState, reducer) { 23 | if (!initialState) { 24 | return reducer(undefined, { type: Dispatcher.INIT }); 25 | } 26 | return initialState; 27 | } 28 | 29 | export function _storeFactory(dispatcher, reducer, state$) { 30 | return new Store(dispatcher, reducer, state$); 31 | } 32 | 33 | export function _stateFactory(initialState: any, dispatcher: Dispatcher, reducer: Reducer) { 34 | return new State(initialState, dispatcher, reducer); 35 | } 36 | 37 | export function _reducerFactory(dispatcher, reducer) { 38 | return new Reducer(dispatcher, reducer); 39 | }; 40 | 41 | /** 42 | * @deprecated, use StoreModule.provideStore instead! 43 | */ 44 | export function provideStore(_reducer: any, _initialState?: any): any[] { 45 | return [ 46 | Dispatcher, 47 | { provide: Store, useFactory: _storeFactory, deps: [Dispatcher, Reducer, State] }, 48 | { provide: Reducer, useFactory: _reducerFactory, deps: [Dispatcher, INITIAL_REDUCER] }, 49 | { provide: State, useFactory: _stateFactory, deps: [INITIAL_STATE, Dispatcher, Reducer] }, 50 | { provide: INITIAL_REDUCER, useFactory: _initialReducerFactory, deps: [_INITIAL_REDUCER] }, 51 | { provide: INITIAL_STATE, useFactory: _initialStateFactory, deps: [_INITIAL_STATE, INITIAL_REDUCER] }, 52 | { provide: _INITIAL_STATE, useValue: _initialState }, 53 | { provide: _INITIAL_REDUCER, useValue: _reducer } 54 | ]; 55 | } 56 | 57 | 58 | @NgModule({}) 59 | export class StoreModule { 60 | static provideStore(_reducer: any, _initialState?: any): ModuleWithProviders { 61 | return { 62 | ngModule: StoreModule, 63 | providers: provideStore(_reducer, _initialState) 64 | }; 65 | } 66 | } 67 | -------------------------------------------------------------------------------- /src/reducer.ts: -------------------------------------------------------------------------------- 1 | import { BehaviorSubject } from 'rxjs/BehaviorSubject'; 2 | 3 | import { Dispatcher, Action } from './dispatcher'; 4 | 5 | export interface ActionReducer { 6 | (state: T, action: Action): T; 7 | } 8 | 9 | export class Reducer extends BehaviorSubject> { 10 | static REPLACE = '@ngrx/store/replace-reducer'; 11 | 12 | constructor(private _dispatcher: Dispatcher, initialReducer: ActionReducer) { 13 | super(initialReducer); 14 | } 15 | 16 | replaceReducer(reducer: ActionReducer) { 17 | this.next(reducer); 18 | } 19 | 20 | next(reducer: ActionReducer) { 21 | super.next(reducer); 22 | this._dispatcher.dispatch({ type: Reducer.REPLACE }); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /src/state.ts: -------------------------------------------------------------------------------- 1 | import { withLatestFrom } from 'rxjs/operator/withLatestFrom'; 2 | import { scan } from 'rxjs/operator/scan'; 3 | import { observeOn } from 'rxjs/operator/observeOn'; 4 | import { queue } from 'rxjs/scheduler/queue'; 5 | import { BehaviorSubject } from 'rxjs/BehaviorSubject'; 6 | 7 | import { Dispatcher } from './dispatcher'; 8 | import { Reducer } from './reducer'; 9 | 10 | export class State extends BehaviorSubject { 11 | constructor(_initialState: T, action$: Dispatcher, reducer$: Reducer) { 12 | super(_initialState); 13 | 14 | const actionInQueue$ = observeOn.call(action$, queue); 15 | const actionAndReducer$ = withLatestFrom.call(actionInQueue$, reducer$); 16 | const state$ = scan.call(actionAndReducer$, (state, [ action, reducer ]) => { 17 | return reducer(state, action); 18 | }, _initialState); 19 | 20 | state$.subscribe(value => this.next(value)); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /src/store.ts: -------------------------------------------------------------------------------- 1 | import { select, SelectSignature } from '@ngrx/core'; 2 | import { Observer } from 'rxjs/Observer'; 3 | import { Observable } from 'rxjs/Observable'; 4 | import { Subscriber } from 'rxjs/Subscriber'; 5 | import { Operator } from 'rxjs/Operator'; 6 | 7 | import { Action } from './dispatcher'; 8 | import { State } from './state'; 9 | import { ActionReducer } from './reducer'; 10 | 11 | 12 | export class Store extends Observable implements Observer { 13 | constructor( 14 | private _dispatcher: Observer, 15 | private _reducer: Observer>, 16 | state$: Observable 17 | ) { 18 | super(); 19 | 20 | this.source = state$; 21 | } 22 | 23 | select: SelectSignature = select.bind(this); 24 | 25 | lift(operator: Operator): Store { 26 | const store = new Store(this._dispatcher, this._reducer, this); 27 | store.operator = operator; 28 | return store; 29 | } 30 | 31 | replaceReducer(reducer: ActionReducer) { 32 | this._reducer.next(reducer); 33 | } 34 | 35 | dispatch(action: Action) { 36 | this._dispatcher.next(action); 37 | } 38 | 39 | next(action: Action) { 40 | this._dispatcher.next(action); 41 | } 42 | 43 | error(err: any) { 44 | this._dispatcher.error(err); 45 | } 46 | 47 | complete() { 48 | // noop 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /src/utils.ts: -------------------------------------------------------------------------------- 1 | import {ActionReducer} from './reducer'; 2 | 3 | export function combineReducers(reducers: any): ActionReducer { 4 | const reducerKeys = Object.keys(reducers); 5 | const finalReducers = {}; 6 | 7 | for (let i = 0; i < reducerKeys.length; i++) { 8 | const key = reducerKeys[i]; 9 | if (typeof reducers[key] === 'function') { 10 | finalReducers[key] = reducers[key]; 11 | } 12 | } 13 | 14 | const finalReducerKeys = Object.keys(finalReducers); 15 | 16 | return function combination(state = {}, action) { 17 | let hasChanged = false; 18 | const nextState = {}; 19 | for (let i = 0; i < finalReducerKeys.length; i++) { 20 | const key = finalReducerKeys[i]; 21 | const reducer = finalReducers[key]; 22 | const previousStateForKey = state[key]; 23 | const nextStateForKey = reducer(previousStateForKey, action); 24 | 25 | nextState[key] = nextStateForKey; 26 | hasChanged = hasChanged || nextStateForKey !== previousStateForKey; 27 | } 28 | return hasChanged ? nextState : state; 29 | }; 30 | } 31 | -------------------------------------------------------------------------------- /tests.bundle.ts: -------------------------------------------------------------------------------- 1 | import 'core-js'; 2 | import 'core-js/es7/reflect'; 3 | import 'zone.js/dist/zone'; 4 | import 'zone.js/dist/long-stack-trace-zone'; 5 | import 'zone.js/dist/async-test'; 6 | import 'zone.js/dist/fake-async-test'; 7 | import 'zone.js/dist/sync-test'; 8 | import 'zone.js/dist/proxy'; 9 | import 'zone.js/dist/jasmine-patch'; 10 | import './spec/helpers/test-helper'; 11 | 12 | // Unfortunately there's no typing for the `__karma__` variable. Just declare it as any. 13 | declare var __karma__: any; 14 | declare var System: any; 15 | 16 | // Prevent Karma from running prematurely. 17 | __karma__.loaded = function () {}; 18 | 19 | 20 | Promise.all([ 21 | System.import('@angular/core/testing'), 22 | System.import('@angular/platform-browser-dynamic/testing') 23 | ]) 24 | // First, initialize the Angular testing environment. 25 | .then(([testing, testingBrowser]: any) => { 26 | testing.getTestBed().initTestEnvironment( 27 | testingBrowser.BrowserDynamicTestingModule, 28 | testingBrowser.platformBrowserDynamicTesting() 29 | ); 30 | }) 31 | // Then we find all the tests. 32 | .then((): any => (require).context('./spec', true, /\.spec\.ts/)) 33 | // And load the modules. 34 | .then((context: any) => context.keys().map(context)) 35 | // Finally, start Karma to run the tests. 36 | .then(__karma__.start, __karma__.error); 37 | -------------------------------------------------------------------------------- /tsconfig.dist.json: -------------------------------------------------------------------------------- 1 | 2 | { 3 | "compilerOptions": { 4 | "baseUrl": ".", 5 | "declaration": true, 6 | "stripInternal": true, 7 | "emitDecoratorMetadata": true, 8 | "experimentalDecorators": true, 9 | "module": "es2015", 10 | "moduleResolution": "node", 11 | "noEmitOnError": false, 12 | "outDir": "./release", 13 | "rootDir": ".", 14 | "sourceMap": true, 15 | "inlineSources": true, 16 | "lib": ["es2015", "dom"], 17 | "target": "es5", 18 | "skipLibCheck": true 19 | }, 20 | "files": [ 21 | "index.ts" 22 | ], 23 | "angularCompilerOptions": { 24 | "strictMetadataEmit": true 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "baseUrl": ".", 4 | "declaration": true, 5 | "stripInternal": true, 6 | "emitDecoratorMetadata": true, 7 | "experimentalDecorators": true, 8 | "module": "commonjs", 9 | "moduleResolution": "node", 10 | "noEmitOnError": false, 11 | "outDir": "./release", 12 | "rootDir": ".", 13 | "lib": ["es2015", "dom"], 14 | "target": "es5", 15 | "skipLibCheck": true, 16 | "types": [ 17 | "node", 18 | "jasmine" 19 | ] 20 | }, 21 | "exclude": [ 22 | "node_modules" 23 | ], 24 | "angularCompilerOptions": { 25 | "strictMetadataEmit": true 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /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 | "no-duplicate-variable": true, 13 | "no-eval": true, 14 | "no-internal-module": true, 15 | "no-trailing-whitespace": true, 16 | "no-var-keyword": true, 17 | "one-line": [ 18 | true, 19 | "check-open-brace", 20 | "check-whitespace" 21 | ], 22 | "quotemark": [ 23 | true, 24 | "single" 25 | ], 26 | "semicolon": true, 27 | "triple-equals": [ 28 | true, 29 | "allow-null-check" 30 | ], 31 | "typedef-whitespace": [ 32 | true, 33 | { 34 | "call-signature": "nospace", 35 | "index-signature": "nospace", 36 | "parameter": "nospace", 37 | "property-declaration": "nospace", 38 | "variable-declaration": "nospace" 39 | } 40 | ], 41 | "variable-name": [ 42 | true, 43 | "ban-keywords", 44 | "allow-leading-underscore" 45 | ], 46 | "whitespace": [ 47 | true, 48 | "check-branch", 49 | "check-decl", 50 | "check-operator", 51 | "check-separator", 52 | "check-type" 53 | ] 54 | } 55 | } 56 | -------------------------------------------------------------------------------- /yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "@angular/common@^2.0.0": 6 | version "2.4.10" 7 | resolved "https://registry.yarnpkg.com/@angular/common/-/common-2.4.10.tgz#a3a682d2228fa30ec23dd0eb57c8e887fba26997" 8 | 9 | "@angular/compiler-cli@^2.0.0": 10 | version "2.4.10" 11 | resolved "https://registry.yarnpkg.com/@angular/compiler-cli/-/compiler-cli-2.4.10.tgz#c21143bfaab45231c8d2eaa82456bed3d39f91a3" 12 | dependencies: 13 | "@angular/tsc-wrapped" "0.5.2" 14 | minimist "^1.2.0" 15 | reflect-metadata "^0.1.2" 16 | 17 | "@angular/compiler@^2.0.0": 18 | version "2.4.10" 19 | resolved "https://registry.yarnpkg.com/@angular/compiler/-/compiler-2.4.10.tgz#f51fd34820b2a02c7cb61fbcf49873c58056fb0c" 20 | 21 | "@angular/core@^2.0.0": 22 | version "2.4.10" 23 | resolved "https://registry.yarnpkg.com/@angular/core/-/core-2.4.10.tgz#0b8320a65065965d998645b1f5cd3cf769b441ea" 24 | 25 | "@angular/platform-browser-dynamic@^2.0.0": 26 | version "2.4.10" 27 | resolved "https://registry.yarnpkg.com/@angular/platform-browser-dynamic/-/platform-browser-dynamic-2.4.10.tgz#8df25dec2b06adc690cc9bc26448deccaebcd8ec" 28 | 29 | "@angular/platform-browser@^2.0.0": 30 | version "2.4.10" 31 | resolved "https://registry.yarnpkg.com/@angular/platform-browser/-/platform-browser-2.4.10.tgz#cbf25608148fb4ffef96cc5005ba5d7b3e093906" 32 | 33 | "@angular/platform-server@^2.0.0": 34 | version "2.4.10" 35 | resolved "https://registry.yarnpkg.com/@angular/platform-server/-/platform-server-2.4.10.tgz#ede03075081f807ed83dd8ec92f2924858fb3455" 36 | dependencies: 37 | parse5 "^2.2.1" 38 | 39 | "@angular/tsc-wrapped@0.5.2": 40 | version "0.5.2" 41 | resolved "https://registry.yarnpkg.com/@angular/tsc-wrapped/-/tsc-wrapped-0.5.2.tgz#2eddf472c467fcb334ea94deddaaa71990c5a482" 42 | dependencies: 43 | tsickle "^0.2" 44 | 45 | "@ngrx/core@^1.2.0": 46 | version "1.2.0" 47 | resolved "https://registry.yarnpkg.com/@ngrx/core/-/core-1.2.0.tgz#882b46abafa2e0e6d887cb71a1b2c2fa3e6d0dc6" 48 | 49 | "@types/jasmine@^2.2.33": 50 | version "2.5.47" 51 | resolved "https://registry.yarnpkg.com/@types/jasmine/-/jasmine-2.5.47.tgz#bbba9bcf0e95e7890c6f4a47394e8bacaa960eb6" 52 | 53 | "@types/node@^6.0.38": 54 | version "6.0.70" 55 | resolved "https://registry.yarnpkg.com/@types/node/-/node-6.0.70.tgz#f6e04b859205ee3611849921f09819701dbfa5e8" 56 | 57 | abbrev@1, abbrev@1.0.x: 58 | version "1.0.9" 59 | resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.0.9.tgz#91b4792588a7738c25f35dd6f63752a2f8776135" 60 | 61 | accepts@1.3.3: 62 | version "1.3.3" 63 | resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.3.tgz#c3ca7434938648c3e0d9c1e328dd68b622c284ca" 64 | dependencies: 65 | mime-types "~2.1.11" 66 | negotiator "0.6.1" 67 | 68 | acorn-dynamic-import@^2.0.0: 69 | version "2.0.2" 70 | resolved "https://registry.yarnpkg.com/acorn-dynamic-import/-/acorn-dynamic-import-2.0.2.tgz#c752bd210bef679501b6c6cb7fc84f8f47158cc4" 71 | dependencies: 72 | acorn "^4.0.3" 73 | 74 | acorn@^4.0.3: 75 | version "4.0.11" 76 | resolved "https://registry.yarnpkg.com/acorn/-/acorn-4.0.11.tgz#edcda3bd937e7556410d42ed5860f67399c794c0" 77 | 78 | acorn@^5.0.0: 79 | version "5.0.3" 80 | resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.0.3.tgz#c460df08491463f028ccb82eab3730bf01087b3d" 81 | 82 | after@0.8.2: 83 | version "0.8.2" 84 | resolved "https://registry.yarnpkg.com/after/-/after-0.8.2.tgz#fedb394f9f0e02aa9768e702bda23b505fae7e1f" 85 | 86 | ajv-keywords@^1.1.1: 87 | version "1.5.1" 88 | resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-1.5.1.tgz#314dd0a4b3368fad3dfcdc54ede6171b886daf3c" 89 | 90 | ajv@^4.7.0, ajv@^4.9.1: 91 | version "4.11.7" 92 | resolved "https://registry.yarnpkg.com/ajv/-/ajv-4.11.7.tgz#8655a5d86d0824985cc471a1d913fb6729a0ec48" 93 | dependencies: 94 | co "^4.6.0" 95 | json-stable-stringify "^1.0.1" 96 | 97 | align-text@^0.1.1, align-text@^0.1.3: 98 | version "0.1.4" 99 | resolved "https://registry.yarnpkg.com/align-text/-/align-text-0.1.4.tgz#0cd90a561093f35d0a99256c22b7069433fad117" 100 | dependencies: 101 | kind-of "^3.0.2" 102 | longest "^1.0.1" 103 | repeat-string "^1.5.2" 104 | 105 | amdefine@>=0.0.4: 106 | version "1.0.1" 107 | resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" 108 | 109 | ansi-regex@^2.0.0: 110 | version "2.1.1" 111 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" 112 | 113 | ansi-styles@^2.2.1: 114 | version "2.2.1" 115 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" 116 | 117 | anymatch@^1.3.0: 118 | version "1.3.0" 119 | resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-1.3.0.tgz#a3e52fa39168c825ff57b0248126ce5a8ff95507" 120 | dependencies: 121 | arrify "^1.0.0" 122 | micromatch "^2.1.5" 123 | 124 | aproba@^1.0.3: 125 | version "1.1.1" 126 | resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.1.1.tgz#95d3600f07710aa0e9298c726ad5ecf2eacbabab" 127 | 128 | are-we-there-yet@~1.1.2: 129 | version "1.1.2" 130 | resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.2.tgz#80e470e95a084794fe1899262c5667c6e88de1b3" 131 | dependencies: 132 | delegates "^1.0.0" 133 | readable-stream "^2.0.0 || ^1.1.13" 134 | 135 | argparse@^1.0.7: 136 | version "1.0.9" 137 | resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.9.tgz#73d83bc263f86e97f8cc4f6bae1b0e90a7d22c86" 138 | dependencies: 139 | sprintf-js "~1.0.2" 140 | 141 | arr-diff@^2.0.0: 142 | version "2.0.0" 143 | resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-2.0.0.tgz#8f3b827f955a8bd669697e4a4256ac3ceae356cf" 144 | dependencies: 145 | arr-flatten "^1.0.1" 146 | 147 | arr-flatten@^1.0.1: 148 | version "1.0.3" 149 | resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.0.3.tgz#a274ed85ac08849b6bd7847c4580745dc51adfb1" 150 | 151 | array-find-index@^1.0.1: 152 | version "1.0.2" 153 | resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1" 154 | 155 | array-slice@^0.2.3: 156 | version "0.2.3" 157 | resolved "https://registry.yarnpkg.com/array-slice/-/array-slice-0.2.3.tgz#dd3cfb80ed7973a75117cdac69b0b99ec86186f5" 158 | 159 | array-union@^1.0.1: 160 | version "1.0.2" 161 | resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" 162 | dependencies: 163 | array-uniq "^1.0.1" 164 | 165 | array-uniq@^1.0.1: 166 | version "1.0.3" 167 | resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" 168 | 169 | array-unique@^0.2.1: 170 | version "0.2.1" 171 | resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53" 172 | 173 | arraybuffer.slice@0.0.6: 174 | version "0.0.6" 175 | resolved "https://registry.yarnpkg.com/arraybuffer.slice/-/arraybuffer.slice-0.0.6.tgz#f33b2159f0532a3f3107a272c0ccfbd1ad2979ca" 176 | 177 | arrify@^1.0.0: 178 | version "1.0.1" 179 | resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" 180 | 181 | asn1.js@^4.0.0: 182 | version "4.9.1" 183 | resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-4.9.1.tgz#48ba240b45a9280e94748990ba597d216617fd40" 184 | dependencies: 185 | bn.js "^4.0.0" 186 | inherits "^2.0.1" 187 | minimalistic-assert "^1.0.0" 188 | 189 | asn1@~0.2.3: 190 | version "0.2.3" 191 | resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.3.tgz#dac8787713c9966849fc8180777ebe9c1ddf3b86" 192 | 193 | assert-plus@1.0.0, assert-plus@^1.0.0: 194 | version "1.0.0" 195 | resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" 196 | 197 | assert-plus@^0.2.0: 198 | version "0.2.0" 199 | resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-0.2.0.tgz#d74e1b87e7affc0db8aadb7021f3fe48101ab234" 200 | 201 | assert@^1.1.1: 202 | version "1.4.1" 203 | resolved "https://registry.yarnpkg.com/assert/-/assert-1.4.1.tgz#99912d591836b5a6f5b345c0f07eefc08fc65d91" 204 | dependencies: 205 | util "0.10.3" 206 | 207 | async-each@^1.0.0: 208 | version "1.0.1" 209 | resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.1.tgz#19d386a1d9edc6e7c1c85d388aedbcc56d33602d" 210 | 211 | async@1.x, async@^1.4.0: 212 | version "1.5.2" 213 | resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" 214 | 215 | async@^2.1.2: 216 | version "2.3.0" 217 | resolved "https://registry.yarnpkg.com/async/-/async-2.3.0.tgz#1013d1051047dd320fe24e494d5c66ecaf6147d9" 218 | dependencies: 219 | lodash "^4.14.0" 220 | 221 | async@~0.2.6: 222 | version "0.2.10" 223 | resolved "https://registry.yarnpkg.com/async/-/async-0.2.10.tgz#b6bbe0b0674b9d719708ca38de8c237cb526c3d1" 224 | 225 | async@~0.9.0: 226 | version "0.9.2" 227 | resolved "https://registry.yarnpkg.com/async/-/async-0.9.2.tgz#aea74d5e61c1f899613bf64bda66d4c78f2fd17d" 228 | 229 | asynckit@^0.4.0: 230 | version "0.4.0" 231 | resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" 232 | 233 | awesome-typescript-loader@^3.0.0: 234 | version "3.1.2" 235 | resolved "https://registry.yarnpkg.com/awesome-typescript-loader/-/awesome-typescript-loader-3.1.2.tgz#3df192b91a6285f795ca65e63aad114fbb44f710" 236 | dependencies: 237 | colors "^1.1.2" 238 | enhanced-resolve "^3.1.0" 239 | loader-utils "^1.0.2" 240 | lodash "^4.17.4" 241 | mkdirp "^0.5.1" 242 | object-assign "^4.1.1" 243 | source-map-support "^0.4.11" 244 | 245 | aws-sign2@~0.6.0: 246 | version "0.6.0" 247 | resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.6.0.tgz#14342dd38dbcc94d0e5b87d763cd63612c0e794f" 248 | 249 | aws4@^1.2.1: 250 | version "1.6.0" 251 | resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.6.0.tgz#83ef5ca860b2b32e4a0deedee8c771b9db57471e" 252 | 253 | backo2@1.0.2: 254 | version "1.0.2" 255 | resolved "https://registry.yarnpkg.com/backo2/-/backo2-1.0.2.tgz#31ab1ac8b129363463e35b3ebb69f4dfcfba7947" 256 | 257 | balanced-match@^0.4.1: 258 | version "0.4.2" 259 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-0.4.2.tgz#cb3f3e3c732dc0f01ee70b403f302e61d7709838" 260 | 261 | base64-arraybuffer@0.1.5: 262 | version "0.1.5" 263 | resolved "https://registry.yarnpkg.com/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz#73926771923b5a19747ad666aa5cd4bf9c6e9ce8" 264 | 265 | base64-js@^1.0.2: 266 | version "1.2.0" 267 | resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.2.0.tgz#a39992d723584811982be5e290bb6a53d86700f1" 268 | 269 | base64id@1.0.0: 270 | version "1.0.0" 271 | resolved "https://registry.yarnpkg.com/base64id/-/base64id-1.0.0.tgz#47688cb99bb6804f0e06d3e763b1c32e57d8e6b6" 272 | 273 | bcrypt-pbkdf@^1.0.0: 274 | version "1.0.1" 275 | resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz#63bc5dcb61331b92bc05fd528953c33462a06f8d" 276 | dependencies: 277 | tweetnacl "^0.14.3" 278 | 279 | better-assert@~1.0.0: 280 | version "1.0.2" 281 | resolved "https://registry.yarnpkg.com/better-assert/-/better-assert-1.0.2.tgz#40866b9e1b9e0b55b481894311e68faffaebc522" 282 | dependencies: 283 | callsite "1.0.0" 284 | 285 | big.js@^3.1.3: 286 | version "3.1.3" 287 | resolved "https://registry.yarnpkg.com/big.js/-/big.js-3.1.3.tgz#4cada2193652eb3ca9ec8e55c9015669c9806978" 288 | 289 | binary-extensions@^1.0.0: 290 | version "1.8.0" 291 | resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.8.0.tgz#48ec8d16df4377eae5fa5884682480af4d95c774" 292 | 293 | blob@0.0.4: 294 | version "0.0.4" 295 | resolved "https://registry.yarnpkg.com/blob/-/blob-0.0.4.tgz#bcf13052ca54463f30f9fc7e95b9a47630a94921" 296 | 297 | block-stream@*: 298 | version "0.0.9" 299 | resolved "https://registry.yarnpkg.com/block-stream/-/block-stream-0.0.9.tgz#13ebfe778a03205cfe03751481ebb4b3300c126a" 300 | dependencies: 301 | inherits "~2.0.0" 302 | 303 | bluebird@^3.3.0: 304 | version "3.5.0" 305 | resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.0.tgz#791420d7f551eea2897453a8a77653f96606d67c" 306 | 307 | bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.4.0: 308 | version "4.11.6" 309 | resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.6.tgz#53344adb14617a13f6e8dd2ce28905d1c0ba3215" 310 | 311 | body-parser@^1.16.1: 312 | version "1.17.1" 313 | resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.17.1.tgz#75b3bc98ddd6e7e0d8ffe750dfaca5c66993fa47" 314 | dependencies: 315 | bytes "2.4.0" 316 | content-type "~1.0.2" 317 | debug "2.6.1" 318 | depd "~1.1.0" 319 | http-errors "~1.6.1" 320 | iconv-lite "0.4.15" 321 | on-finished "~2.3.0" 322 | qs "6.4.0" 323 | raw-body "~2.2.0" 324 | type-is "~1.6.14" 325 | 326 | boom@2.x.x: 327 | version "2.10.1" 328 | resolved "https://registry.yarnpkg.com/boom/-/boom-2.10.1.tgz#39c8918ceff5799f83f9492a848f625add0c766f" 329 | dependencies: 330 | hoek "2.x.x" 331 | 332 | brace-expansion@^1.0.0: 333 | version "1.1.7" 334 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.7.tgz#3effc3c50e000531fb720eaff80f0ae8ef23cf59" 335 | dependencies: 336 | balanced-match "^0.4.1" 337 | concat-map "0.0.1" 338 | 339 | braces@^0.1.2: 340 | version "0.1.5" 341 | resolved "https://registry.yarnpkg.com/braces/-/braces-0.1.5.tgz#c085711085291d8b75fdd74eab0f8597280711e6" 342 | dependencies: 343 | expand-range "^0.1.0" 344 | 345 | braces@^1.8.2: 346 | version "1.8.5" 347 | resolved "https://registry.yarnpkg.com/braces/-/braces-1.8.5.tgz#ba77962e12dff969d6b76711e914b737857bf6a7" 348 | dependencies: 349 | expand-range "^1.8.1" 350 | preserve "^0.2.0" 351 | repeat-element "^1.1.2" 352 | 353 | brorand@^1.0.1: 354 | version "1.1.0" 355 | resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" 356 | 357 | browserify-aes@^1.0.0, browserify-aes@^1.0.4: 358 | version "1.0.6" 359 | resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.0.6.tgz#5e7725dbdef1fd5930d4ebab48567ce451c48a0a" 360 | dependencies: 361 | buffer-xor "^1.0.2" 362 | cipher-base "^1.0.0" 363 | create-hash "^1.1.0" 364 | evp_bytestokey "^1.0.0" 365 | inherits "^2.0.1" 366 | 367 | browserify-cipher@^1.0.0: 368 | version "1.0.0" 369 | resolved "https://registry.yarnpkg.com/browserify-cipher/-/browserify-cipher-1.0.0.tgz#9988244874bf5ed4e28da95666dcd66ac8fc363a" 370 | dependencies: 371 | browserify-aes "^1.0.4" 372 | browserify-des "^1.0.0" 373 | evp_bytestokey "^1.0.0" 374 | 375 | browserify-des@^1.0.0: 376 | version "1.0.0" 377 | resolved "https://registry.yarnpkg.com/browserify-des/-/browserify-des-1.0.0.tgz#daa277717470922ed2fe18594118a175439721dd" 378 | dependencies: 379 | cipher-base "^1.0.1" 380 | des.js "^1.0.0" 381 | inherits "^2.0.1" 382 | 383 | browserify-rsa@^4.0.0: 384 | version "4.0.1" 385 | resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.0.1.tgz#21e0abfaf6f2029cf2fafb133567a701d4135524" 386 | dependencies: 387 | bn.js "^4.1.0" 388 | randombytes "^2.0.1" 389 | 390 | browserify-sign@^4.0.0: 391 | version "4.0.4" 392 | resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.0.4.tgz#aa4eb68e5d7b658baa6bf6a57e630cbd7a93d298" 393 | dependencies: 394 | bn.js "^4.1.1" 395 | browserify-rsa "^4.0.0" 396 | create-hash "^1.1.0" 397 | create-hmac "^1.1.2" 398 | elliptic "^6.0.0" 399 | inherits "^2.0.1" 400 | parse-asn1 "^5.0.0" 401 | 402 | browserify-zlib@^0.1.4: 403 | version "0.1.4" 404 | resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.1.4.tgz#bb35f8a519f600e0fa6b8485241c979d0141fb2d" 405 | dependencies: 406 | pako "~0.2.0" 407 | 408 | buffer-shims@~1.0.0: 409 | version "1.0.0" 410 | resolved "https://registry.yarnpkg.com/buffer-shims/-/buffer-shims-1.0.0.tgz#9978ce317388c649ad8793028c3477ef044a8b51" 411 | 412 | buffer-xor@^1.0.2: 413 | version "1.0.3" 414 | resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" 415 | 416 | buffer@^4.3.0: 417 | version "4.9.1" 418 | resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.1.tgz#6d1bb601b07a4efced97094132093027c95bc298" 419 | dependencies: 420 | base64-js "^1.0.2" 421 | ieee754 "^1.1.4" 422 | isarray "^1.0.0" 423 | 424 | builtin-modules@^1.0.0: 425 | version "1.1.1" 426 | resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" 427 | 428 | builtin-status-codes@^3.0.0: 429 | version "3.0.0" 430 | resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8" 431 | 432 | bytes@2.4.0: 433 | version "2.4.0" 434 | resolved "https://registry.yarnpkg.com/bytes/-/bytes-2.4.0.tgz#7d97196f9d5baf7f6935e25985549edd2a6c2339" 435 | 436 | callsite@1.0.0: 437 | version "1.0.0" 438 | resolved "https://registry.yarnpkg.com/callsite/-/callsite-1.0.0.tgz#280398e5d664bd74038b6f0905153e6e8af1bc20" 439 | 440 | camelcase-keys@^2.0.0: 441 | version "2.1.0" 442 | resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-2.1.0.tgz#308beeaffdf28119051efa1d932213c91b8f92e7" 443 | dependencies: 444 | camelcase "^2.0.0" 445 | map-obj "^1.0.0" 446 | 447 | camelcase@^1.0.2: 448 | version "1.2.1" 449 | resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-1.2.1.tgz#9bb5304d2e0b56698b2c758b08a3eaa9daa58a39" 450 | 451 | camelcase@^2.0.0: 452 | version "2.1.1" 453 | resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f" 454 | 455 | camelcase@^3.0.0: 456 | version "3.0.0" 457 | resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-3.0.0.tgz#32fc4b9fcdaf845fcdf7e73bb97cac2261f0ab0a" 458 | 459 | caseless@~0.12.0: 460 | version "0.12.0" 461 | resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" 462 | 463 | center-align@^0.1.1: 464 | version "0.1.3" 465 | resolved "https://registry.yarnpkg.com/center-align/-/center-align-0.1.3.tgz#aa0d32629b6ee972200411cbd4461c907bc2b7ad" 466 | dependencies: 467 | align-text "^0.1.3" 468 | lazy-cache "^1.0.3" 469 | 470 | chalk@1.1.3: 471 | version "1.1.3" 472 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" 473 | dependencies: 474 | ansi-styles "^2.2.1" 475 | escape-string-regexp "^1.0.2" 476 | has-ansi "^2.0.0" 477 | strip-ansi "^3.0.0" 478 | supports-color "^2.0.0" 479 | 480 | chokidar@^1.4.1, chokidar@^1.4.3: 481 | version "1.6.1" 482 | resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-1.6.1.tgz#2f4447ab5e96e50fb3d789fd90d4c72e0e4c70c2" 483 | dependencies: 484 | anymatch "^1.3.0" 485 | async-each "^1.0.0" 486 | glob-parent "^2.0.0" 487 | inherits "^2.0.1" 488 | is-binary-path "^1.0.0" 489 | is-glob "^2.0.0" 490 | path-is-absolute "^1.0.0" 491 | readdirp "^2.0.0" 492 | optionalDependencies: 493 | fsevents "^1.0.0" 494 | 495 | cipher-base@^1.0.0, cipher-base@^1.0.1: 496 | version "1.0.3" 497 | resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.3.tgz#eeabf194419ce900da3018c207d212f2a6df0a07" 498 | dependencies: 499 | inherits "^2.0.1" 500 | 501 | cliui@^2.1.0: 502 | version "2.1.0" 503 | resolved "https://registry.yarnpkg.com/cliui/-/cliui-2.1.0.tgz#4b475760ff80264c762c3a1719032e91c7fea0d1" 504 | dependencies: 505 | center-align "^0.1.1" 506 | right-align "^0.1.1" 507 | wordwrap "0.0.2" 508 | 509 | cliui@^3.2.0: 510 | version "3.2.0" 511 | resolved "https://registry.yarnpkg.com/cliui/-/cliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d" 512 | dependencies: 513 | string-width "^1.0.1" 514 | strip-ansi "^3.0.1" 515 | wrap-ansi "^2.0.0" 516 | 517 | co@^4.6.0: 518 | version "4.6.0" 519 | resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" 520 | 521 | code-point-at@^1.0.0: 522 | version "1.1.0" 523 | resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" 524 | 525 | colors@^1.0.3, colors@^1.1.0, colors@^1.1.2: 526 | version "1.1.2" 527 | resolved "https://registry.yarnpkg.com/colors/-/colors-1.1.2.tgz#168a4701756b6a7f51a12ce0c97bfa28c084ed63" 528 | 529 | combine-lists@^1.0.0: 530 | version "1.0.1" 531 | resolved "https://registry.yarnpkg.com/combine-lists/-/combine-lists-1.0.1.tgz#458c07e09e0d900fc28b70a3fec2dacd1d2cb7f6" 532 | dependencies: 533 | lodash "^4.5.0" 534 | 535 | combined-stream@^1.0.5, combined-stream@~1.0.5: 536 | version "1.0.5" 537 | resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.5.tgz#938370a57b4a51dea2c77c15d5c5fdf895164009" 538 | dependencies: 539 | delayed-stream "~1.0.0" 540 | 541 | component-bind@1.0.0: 542 | version "1.0.0" 543 | resolved "https://registry.yarnpkg.com/component-bind/-/component-bind-1.0.0.tgz#00c608ab7dcd93897c0009651b1d3a8e1e73bbd1" 544 | 545 | component-emitter@1.1.2: 546 | version "1.1.2" 547 | resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.1.2.tgz#296594f2753daa63996d2af08d15a95116c9aec3" 548 | 549 | component-emitter@1.2.1: 550 | version "1.2.1" 551 | resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.2.1.tgz#137918d6d78283f7df7a6b7c5a63e140e69425e6" 552 | 553 | component-inherit@0.0.3: 554 | version "0.0.3" 555 | resolved "https://registry.yarnpkg.com/component-inherit/-/component-inherit-0.0.3.tgz#645fc4adf58b72b649d5cae65135619db26ff143" 556 | 557 | concat-map@0.0.1: 558 | version "0.0.1" 559 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" 560 | 561 | connect@^3.6.0: 562 | version "3.6.0" 563 | resolved "https://registry.yarnpkg.com/connect/-/connect-3.6.0.tgz#f09a4f7dcd17324b663b725c815bdb1c4158a46e" 564 | dependencies: 565 | debug "2.6.1" 566 | finalhandler "1.0.0" 567 | parseurl "~1.3.1" 568 | utils-merge "1.0.0" 569 | 570 | console-browserify@^1.1.0: 571 | version "1.1.0" 572 | resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.1.0.tgz#f0241c45730a9fc6323b206dbf38edc741d0bb10" 573 | dependencies: 574 | date-now "^0.1.4" 575 | 576 | console-control-strings@^1.0.0, console-control-strings@~1.1.0: 577 | version "1.1.0" 578 | resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" 579 | 580 | constants-browserify@^1.0.0: 581 | version "1.0.0" 582 | resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75" 583 | 584 | content-type@~1.0.2: 585 | version "1.0.2" 586 | resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.2.tgz#b7d113aee7a8dd27bd21133c4dc2529df1721eed" 587 | 588 | cookie@0.3.1: 589 | version "0.3.1" 590 | resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.3.1.tgz#e7e0a1f9ef43b4c8ba925c5c5a96e806d16873bb" 591 | 592 | core-js@^2.2.0, core-js@^2.4.1: 593 | version "2.4.1" 594 | resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.4.1.tgz#4de911e667b0eae9124e34254b53aea6fc618d3e" 595 | 596 | core-util-is@~1.0.0: 597 | version "1.0.2" 598 | resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" 599 | 600 | cp-file@^3.1.0: 601 | version "3.2.0" 602 | resolved "https://registry.yarnpkg.com/cp-file/-/cp-file-3.2.0.tgz#6f83616254624f0ad58aa4aa8d076f026be7e188" 603 | dependencies: 604 | graceful-fs "^4.1.2" 605 | mkdirp "^0.5.0" 606 | nested-error-stacks "^1.0.1" 607 | object-assign "^4.0.1" 608 | pify "^2.3.0" 609 | pinkie-promise "^2.0.0" 610 | readable-stream "^2.1.4" 611 | 612 | cpy-cli@^1.0.1: 613 | version "1.0.1" 614 | resolved "https://registry.yarnpkg.com/cpy-cli/-/cpy-cli-1.0.1.tgz#67fb5a4a2dec28ca8abff375de4b9e71f6a7561c" 615 | dependencies: 616 | cpy "^4.0.0" 617 | meow "^3.6.0" 618 | 619 | cpy@^4.0.0: 620 | version "4.0.1" 621 | resolved "https://registry.yarnpkg.com/cpy/-/cpy-4.0.1.tgz#b67267eba2f3960ba06a5a61ac94033422833424" 622 | dependencies: 623 | cp-file "^3.1.0" 624 | globby "^4.0.0" 625 | meow "^3.6.0" 626 | nested-error-stacks "^1.0.0" 627 | object-assign "^4.0.1" 628 | pinkie-promise "^2.0.0" 629 | 630 | create-ecdh@^4.0.0: 631 | version "4.0.0" 632 | resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.0.tgz#888c723596cdf7612f6498233eebd7a35301737d" 633 | dependencies: 634 | bn.js "^4.1.0" 635 | elliptic "^6.0.0" 636 | 637 | create-hash@^1.1.0, create-hash@^1.1.1: 638 | version "1.1.2" 639 | resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.1.2.tgz#51210062d7bb7479f6c65bb41a92208b1d61abad" 640 | dependencies: 641 | cipher-base "^1.0.1" 642 | inherits "^2.0.1" 643 | ripemd160 "^1.0.0" 644 | sha.js "^2.3.6" 645 | 646 | create-hmac@^1.1.0, create-hmac@^1.1.2: 647 | version "1.1.4" 648 | resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.4.tgz#d3fb4ba253eb8b3f56e39ea2fbcb8af747bd3170" 649 | dependencies: 650 | create-hash "^1.1.0" 651 | inherits "^2.0.1" 652 | 653 | cryptiles@2.x.x: 654 | version "2.0.5" 655 | resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-2.0.5.tgz#3bdfecdc608147c1c67202fa291e7dca59eaa3b8" 656 | dependencies: 657 | boom "2.x.x" 658 | 659 | crypto-browserify@^3.11.0: 660 | version "3.11.0" 661 | resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.11.0.tgz#3652a0906ab9b2a7e0c3ce66a408e957a2485522" 662 | dependencies: 663 | browserify-cipher "^1.0.0" 664 | browserify-sign "^4.0.0" 665 | create-ecdh "^4.0.0" 666 | create-hash "^1.1.0" 667 | create-hmac "^1.1.0" 668 | diffie-hellman "^5.0.0" 669 | inherits "^2.0.1" 670 | pbkdf2 "^3.0.3" 671 | public-encrypt "^4.0.0" 672 | randombytes "^2.0.0" 673 | 674 | currently-unhandled@^0.4.1: 675 | version "0.4.1" 676 | resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea" 677 | dependencies: 678 | array-find-index "^1.0.1" 679 | 680 | custom-event@~1.0.0: 681 | version "1.0.1" 682 | resolved "https://registry.yarnpkg.com/custom-event/-/custom-event-1.0.1.tgz#5d02a46850adf1b4a317946a3928fccb5bfd0425" 683 | 684 | dashdash@^1.12.0: 685 | version "1.14.1" 686 | resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" 687 | dependencies: 688 | assert-plus "^1.0.0" 689 | 690 | date-now@^0.1.4: 691 | version "0.1.4" 692 | resolved "https://registry.yarnpkg.com/date-now/-/date-now-0.1.4.tgz#eaf439fd4d4848ad74e5cc7dbef200672b9e345b" 693 | 694 | dateformat@^1.0.6: 695 | version "1.0.12" 696 | resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-1.0.12.tgz#9f124b67594c937ff706932e4a642cca8dbbfee9" 697 | dependencies: 698 | get-stdin "^4.0.1" 699 | meow "^3.3.0" 700 | 701 | debug@2.2.0: 702 | version "2.2.0" 703 | resolved "https://registry.yarnpkg.com/debug/-/debug-2.2.0.tgz#f87057e995b1a1f6ae6a4960664137bc56f039da" 704 | dependencies: 705 | ms "0.7.1" 706 | 707 | debug@2.3.3: 708 | version "2.3.3" 709 | resolved "https://registry.yarnpkg.com/debug/-/debug-2.3.3.tgz#40c453e67e6e13c901ddec317af8986cda9eff8c" 710 | dependencies: 711 | ms "0.7.2" 712 | 713 | debug@2.6.1, debug@^2.2.0: 714 | version "2.6.1" 715 | resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.1.tgz#79855090ba2c4e3115cc7d8769491d58f0491351" 716 | dependencies: 717 | ms "0.7.2" 718 | 719 | decamelize@^1.0.0, decamelize@^1.1.1, decamelize@^1.1.2: 720 | version "1.2.0" 721 | resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" 722 | 723 | deep-extend@~0.4.0: 724 | version "0.4.1" 725 | resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.4.1.tgz#efe4113d08085f4e6f9687759810f807469e2253" 726 | 727 | deep-is@~0.1.3: 728 | version "0.1.3" 729 | resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" 730 | 731 | delayed-stream@~1.0.0: 732 | version "1.0.0" 733 | resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" 734 | 735 | delegates@^1.0.0: 736 | version "1.0.0" 737 | resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" 738 | 739 | depd@1.1.0, depd@~1.1.0: 740 | version "1.1.0" 741 | resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.0.tgz#e1bd82c6aab6ced965b97b88b17ed3e528ca18c3" 742 | 743 | des.js@^1.0.0: 744 | version "1.0.0" 745 | resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.0.tgz#c074d2e2aa6a8a9a07dbd61f9a15c2cd83ec8ecc" 746 | dependencies: 747 | inherits "^2.0.1" 748 | minimalistic-assert "^1.0.0" 749 | 750 | di@^0.0.1: 751 | version "0.0.1" 752 | resolved "https://registry.yarnpkg.com/di/-/di-0.0.1.tgz#806649326ceaa7caa3306d75d985ea2748ba913c" 753 | 754 | diff@^2.2.1: 755 | version "2.2.3" 756 | resolved "https://registry.yarnpkg.com/diff/-/diff-2.2.3.tgz#60eafd0d28ee906e4e8ff0a52c1229521033bf99" 757 | 758 | diffie-hellman@^5.0.0: 759 | version "5.0.2" 760 | resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.2.tgz#b5835739270cfe26acf632099fded2a07f209e5e" 761 | dependencies: 762 | bn.js "^4.1.0" 763 | miller-rabin "^4.0.0" 764 | randombytes "^2.0.0" 765 | 766 | dom-serialize@^2.2.0: 767 | version "2.2.1" 768 | resolved "https://registry.yarnpkg.com/dom-serialize/-/dom-serialize-2.2.1.tgz#562ae8999f44be5ea3076f5419dcd59eb43ac95b" 769 | dependencies: 770 | custom-event "~1.0.0" 771 | ent "~2.2.0" 772 | extend "^3.0.0" 773 | void-elements "^2.0.0" 774 | 775 | domain-browser@^1.1.1: 776 | version "1.1.7" 777 | resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.1.7.tgz#867aa4b093faa05f1de08c06f4d7b21fdf8698bc" 778 | 779 | ecc-jsbn@~0.1.1: 780 | version "0.1.1" 781 | resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz#0fc73a9ed5f0d53c38193398523ef7e543777505" 782 | dependencies: 783 | jsbn "~0.1.0" 784 | 785 | ee-first@1.1.1: 786 | version "1.1.1" 787 | resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" 788 | 789 | elliptic@^6.0.0: 790 | version "6.4.0" 791 | resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.4.0.tgz#cac9af8762c85836187003c8dfe193e5e2eae5df" 792 | dependencies: 793 | bn.js "^4.4.0" 794 | brorand "^1.0.1" 795 | hash.js "^1.0.0" 796 | hmac-drbg "^1.0.0" 797 | inherits "^2.0.1" 798 | minimalistic-assert "^1.0.0" 799 | minimalistic-crypto-utils "^1.0.0" 800 | 801 | emojis-list@^2.0.0: 802 | version "2.1.0" 803 | resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389" 804 | 805 | encodeurl@~1.0.1: 806 | version "1.0.1" 807 | resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.1.tgz#79e3d58655346909fe6f0f45a5de68103b294d20" 808 | 809 | engine.io-client@1.8.3: 810 | version "1.8.3" 811 | resolved "https://registry.yarnpkg.com/engine.io-client/-/engine.io-client-1.8.3.tgz#1798ed93451246453d4c6f635d7a201fe940d5ab" 812 | dependencies: 813 | component-emitter "1.2.1" 814 | component-inherit "0.0.3" 815 | debug "2.3.3" 816 | engine.io-parser "1.3.2" 817 | has-cors "1.1.0" 818 | indexof "0.0.1" 819 | parsejson "0.0.3" 820 | parseqs "0.0.5" 821 | parseuri "0.0.5" 822 | ws "1.1.2" 823 | xmlhttprequest-ssl "1.5.3" 824 | yeast "0.1.2" 825 | 826 | engine.io-parser@1.3.2: 827 | version "1.3.2" 828 | resolved "https://registry.yarnpkg.com/engine.io-parser/-/engine.io-parser-1.3.2.tgz#937b079f0007d0893ec56d46cb220b8cb435220a" 829 | dependencies: 830 | after "0.8.2" 831 | arraybuffer.slice "0.0.6" 832 | base64-arraybuffer "0.1.5" 833 | blob "0.0.4" 834 | has-binary "0.1.7" 835 | wtf-8 "1.0.0" 836 | 837 | engine.io@1.8.3: 838 | version "1.8.3" 839 | resolved "https://registry.yarnpkg.com/engine.io/-/engine.io-1.8.3.tgz#8de7f97895d20d39b85f88eeee777b2bd42b13d4" 840 | dependencies: 841 | accepts "1.3.3" 842 | base64id "1.0.0" 843 | cookie "0.3.1" 844 | debug "2.3.3" 845 | engine.io-parser "1.3.2" 846 | ws "1.1.2" 847 | 848 | enhanced-resolve@^0.9.0: 849 | version "0.9.1" 850 | resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-0.9.1.tgz#4d6e689b3725f86090927ccc86cd9f1635b89e2e" 851 | dependencies: 852 | graceful-fs "^4.1.2" 853 | memory-fs "^0.2.0" 854 | tapable "^0.1.8" 855 | 856 | enhanced-resolve@^3.0.0, enhanced-resolve@^3.1.0: 857 | version "3.1.0" 858 | resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-3.1.0.tgz#9f4b626f577245edcf4b2ad83d86e17f4f421dec" 859 | dependencies: 860 | graceful-fs "^4.1.2" 861 | memory-fs "^0.4.0" 862 | object-assign "^4.0.1" 863 | tapable "^0.2.5" 864 | 865 | ent@~2.2.0: 866 | version "2.2.0" 867 | resolved "https://registry.yarnpkg.com/ent/-/ent-2.2.0.tgz#e964219325a21d05f44466a2f686ed6ce5f5dd1d" 868 | 869 | errno@^0.1.3: 870 | version "0.1.4" 871 | resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.4.tgz#b896e23a9e5e8ba33871fc996abd3635fc9a1c7d" 872 | dependencies: 873 | prr "~0.0.0" 874 | 875 | error-ex@^1.2.0: 876 | version "1.3.1" 877 | resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.1.tgz#f855a86ce61adc4e8621c3cda21e7a7612c3a8dc" 878 | dependencies: 879 | is-arrayish "^0.2.1" 880 | 881 | escape-html@~1.0.3: 882 | version "1.0.3" 883 | resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" 884 | 885 | escape-string-regexp@^1.0.2: 886 | version "1.0.5" 887 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" 888 | 889 | escodegen@1.8.x: 890 | version "1.8.1" 891 | resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.8.1.tgz#5a5b53af4693110bebb0867aa3430dd3b70a1018" 892 | dependencies: 893 | esprima "^2.7.1" 894 | estraverse "^1.9.1" 895 | esutils "^2.0.2" 896 | optionator "^0.8.1" 897 | optionalDependencies: 898 | source-map "~0.2.0" 899 | 900 | esprima@2.7.x, esprima@^2.7.1: 901 | version "2.7.3" 902 | resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581" 903 | 904 | esprima@^3.1.1: 905 | version "3.1.3" 906 | resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633" 907 | 908 | estraverse@^1.9.1: 909 | version "1.9.3" 910 | resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-1.9.3.tgz#af67f2dc922582415950926091a4005d29c9bb44" 911 | 912 | esutils@^2.0.2: 913 | version "2.0.2" 914 | resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" 915 | 916 | eventemitter3@1.x.x: 917 | version "1.2.0" 918 | resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-1.2.0.tgz#1c86991d816ad1e504750e73874224ecf3bec508" 919 | 920 | events@^1.0.0: 921 | version "1.1.1" 922 | resolved "https://registry.yarnpkg.com/events/-/events-1.1.1.tgz#9ebdb7635ad099c70dcc4c2a1f5004288e8bd924" 923 | 924 | evp_bytestokey@^1.0.0: 925 | version "1.0.0" 926 | resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.0.tgz#497b66ad9fef65cd7c08a6180824ba1476b66e53" 927 | dependencies: 928 | create-hash "^1.1.1" 929 | 930 | exit@^0.1.2: 931 | version "0.1.2" 932 | resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" 933 | 934 | expand-braces@^0.1.1: 935 | version "0.1.2" 936 | resolved "https://registry.yarnpkg.com/expand-braces/-/expand-braces-0.1.2.tgz#488b1d1d2451cb3d3a6b192cfc030f44c5855fea" 937 | dependencies: 938 | array-slice "^0.2.3" 939 | array-unique "^0.2.1" 940 | braces "^0.1.2" 941 | 942 | expand-brackets@^0.1.4: 943 | version "0.1.5" 944 | resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-0.1.5.tgz#df07284e342a807cd733ac5af72411e581d1177b" 945 | dependencies: 946 | is-posix-bracket "^0.1.0" 947 | 948 | expand-range@^0.1.0: 949 | version "0.1.1" 950 | resolved "https://registry.yarnpkg.com/expand-range/-/expand-range-0.1.1.tgz#4cb8eda0993ca56fa4f41fc42f3cbb4ccadff044" 951 | dependencies: 952 | is-number "^0.1.1" 953 | repeat-string "^0.2.2" 954 | 955 | expand-range@^1.8.1: 956 | version "1.8.2" 957 | resolved "https://registry.yarnpkg.com/expand-range/-/expand-range-1.8.2.tgz#a299effd335fe2721ebae8e257ec79644fc85337" 958 | dependencies: 959 | fill-range "^2.1.0" 960 | 961 | extend@^3.0.0, extend@~3.0.0: 962 | version "3.0.0" 963 | resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.0.tgz#5a474353b9f3353ddd8176dfd37b91c83a46f1d4" 964 | 965 | extglob@^0.3.1: 966 | version "0.3.2" 967 | resolved "https://registry.yarnpkg.com/extglob/-/extglob-0.3.2.tgz#2e18ff3d2f49ab2765cec9023f011daa8d8349a1" 968 | dependencies: 969 | is-extglob "^1.0.0" 970 | 971 | extsprintf@1.0.2: 972 | version "1.0.2" 973 | resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.0.2.tgz#e1080e0658e300b06294990cc70e1502235fd550" 974 | 975 | fast-levenshtein@~2.0.4: 976 | version "2.0.6" 977 | resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" 978 | 979 | filename-regex@^2.0.0: 980 | version "2.0.0" 981 | resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.0.tgz#996e3e80479b98b9897f15a8a58b3d084e926775" 982 | 983 | fill-range@^2.1.0: 984 | version "2.2.3" 985 | resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-2.2.3.tgz#50b77dfd7e469bc7492470963699fe7a8485a723" 986 | dependencies: 987 | is-number "^2.1.0" 988 | isobject "^2.0.0" 989 | randomatic "^1.1.3" 990 | repeat-element "^1.1.2" 991 | repeat-string "^1.5.2" 992 | 993 | finalhandler@1.0.0: 994 | version "1.0.0" 995 | resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.0.0.tgz#b5691c2c0912092f18ac23e9416bde5cd7dc6755" 996 | dependencies: 997 | debug "2.6.1" 998 | encodeurl "~1.0.1" 999 | escape-html "~1.0.3" 1000 | on-finished "~2.3.0" 1001 | parseurl "~1.3.1" 1002 | statuses "~1.3.1" 1003 | unpipe "~1.0.0" 1004 | 1005 | find-up@^1.0.0: 1006 | version "1.1.2" 1007 | resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" 1008 | dependencies: 1009 | path-exists "^2.0.0" 1010 | pinkie-promise "^2.0.0" 1011 | 1012 | findup-sync@~0.3.0: 1013 | version "0.3.0" 1014 | resolved "https://registry.yarnpkg.com/findup-sync/-/findup-sync-0.3.0.tgz#37930aa5d816b777c03445e1966cc6790a4c0b16" 1015 | dependencies: 1016 | glob "~5.0.0" 1017 | 1018 | for-in@^1.0.1: 1019 | version "1.0.2" 1020 | resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" 1021 | 1022 | for-own@^0.1.4: 1023 | version "0.1.5" 1024 | resolved "https://registry.yarnpkg.com/for-own/-/for-own-0.1.5.tgz#5265c681a4f294dabbf17c9509b6763aa84510ce" 1025 | dependencies: 1026 | for-in "^1.0.1" 1027 | 1028 | forever-agent@~0.6.1: 1029 | version "0.6.1" 1030 | resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" 1031 | 1032 | form-data@~2.1.1: 1033 | version "2.1.4" 1034 | resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.1.4.tgz#33c183acf193276ecaa98143a69e94bfee1750d1" 1035 | dependencies: 1036 | asynckit "^0.4.0" 1037 | combined-stream "^1.0.5" 1038 | mime-types "^2.1.12" 1039 | 1040 | fs-access@^1.0.0: 1041 | version "1.0.1" 1042 | resolved "https://registry.yarnpkg.com/fs-access/-/fs-access-1.0.1.tgz#d6a87f262271cefebec30c553407fb995da8777a" 1043 | dependencies: 1044 | null-check "^1.0.0" 1045 | 1046 | fs.realpath@^1.0.0: 1047 | version "1.0.0" 1048 | resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" 1049 | 1050 | fsevents@^1.0.0: 1051 | version "1.1.1" 1052 | resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.1.1.tgz#f19fd28f43eeaf761680e519a203c4d0b3d31aff" 1053 | dependencies: 1054 | nan "^2.3.0" 1055 | node-pre-gyp "^0.6.29" 1056 | 1057 | fstream-ignore@^1.0.5: 1058 | version "1.0.5" 1059 | resolved "https://registry.yarnpkg.com/fstream-ignore/-/fstream-ignore-1.0.5.tgz#9c31dae34767018fe1d249b24dada67d092da105" 1060 | dependencies: 1061 | fstream "^1.0.0" 1062 | inherits "2" 1063 | minimatch "^3.0.0" 1064 | 1065 | fstream@^1.0.0, fstream@^1.0.10, fstream@^1.0.2: 1066 | version "1.0.11" 1067 | resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.11.tgz#5c1fb1f117477114f0632a0eb4b71b3cb0fd3171" 1068 | dependencies: 1069 | graceful-fs "^4.1.2" 1070 | inherits "~2.0.0" 1071 | mkdirp ">=0.5 0" 1072 | rimraf "2" 1073 | 1074 | gauge@~2.7.1: 1075 | version "2.7.3" 1076 | resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.3.tgz#1c23855f962f17b3ad3d0dc7443f304542edfe09" 1077 | dependencies: 1078 | aproba "^1.0.3" 1079 | console-control-strings "^1.0.0" 1080 | has-unicode "^2.0.0" 1081 | object-assign "^4.1.0" 1082 | signal-exit "^3.0.0" 1083 | string-width "^1.0.1" 1084 | strip-ansi "^3.0.1" 1085 | wide-align "^1.1.0" 1086 | 1087 | get-caller-file@^1.0.1: 1088 | version "1.0.2" 1089 | resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.2.tgz#f702e63127e7e231c160a80c1554acb70d5047e5" 1090 | 1091 | get-stdin@^4.0.1: 1092 | version "4.0.1" 1093 | resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe" 1094 | 1095 | getpass@^0.1.1: 1096 | version "0.1.6" 1097 | resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.6.tgz#283ffd9fc1256840875311c1b60e8c40187110e6" 1098 | dependencies: 1099 | assert-plus "^1.0.0" 1100 | 1101 | glob-base@^0.3.0: 1102 | version "0.3.0" 1103 | resolved "https://registry.yarnpkg.com/glob-base/-/glob-base-0.3.0.tgz#dbb164f6221b1c0b1ccf82aea328b497df0ea3c4" 1104 | dependencies: 1105 | glob-parent "^2.0.0" 1106 | is-glob "^2.0.0" 1107 | 1108 | glob-parent@^2.0.0: 1109 | version "2.0.0" 1110 | resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-2.0.0.tgz#81383d72db054fcccf5336daa902f182f6edbb28" 1111 | dependencies: 1112 | is-glob "^2.0.0" 1113 | 1114 | glob@^5.0.15, glob@~5.0.0: 1115 | version "5.0.15" 1116 | resolved "https://registry.yarnpkg.com/glob/-/glob-5.0.15.tgz#1bc936b9e02f4a603fcc222ecf7633d30b8b93b1" 1117 | dependencies: 1118 | inflight "^1.0.4" 1119 | inherits "2" 1120 | minimatch "2 || 3" 1121 | once "^1.3.0" 1122 | path-is-absolute "^1.0.0" 1123 | 1124 | glob@^6.0.1: 1125 | version "6.0.4" 1126 | resolved "https://registry.yarnpkg.com/glob/-/glob-6.0.4.tgz#0f08860f6a155127b2fadd4f9ce24b1aab6e4d22" 1127 | dependencies: 1128 | inflight "^1.0.4" 1129 | inherits "2" 1130 | minimatch "2 || 3" 1131 | once "^1.3.0" 1132 | path-is-absolute "^1.0.0" 1133 | 1134 | glob@^7.0.3, glob@^7.0.5, glob@^7.0.6, glob@^7.1.1: 1135 | version "7.1.1" 1136 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.1.tgz#805211df04faaf1c63a3600306cdf5ade50b2ec8" 1137 | dependencies: 1138 | fs.realpath "^1.0.0" 1139 | inflight "^1.0.4" 1140 | inherits "2" 1141 | minimatch "^3.0.2" 1142 | once "^1.3.0" 1143 | path-is-absolute "^1.0.0" 1144 | 1145 | globby@^4.0.0: 1146 | version "4.1.0" 1147 | resolved "https://registry.yarnpkg.com/globby/-/globby-4.1.0.tgz#080f54549ec1b82a6c60e631fc82e1211dbe95f8" 1148 | dependencies: 1149 | array-union "^1.0.1" 1150 | arrify "^1.0.0" 1151 | glob "^6.0.1" 1152 | object-assign "^4.0.1" 1153 | pify "^2.0.0" 1154 | pinkie-promise "^2.0.0" 1155 | 1156 | graceful-fs@^4.1.2: 1157 | version "4.1.11" 1158 | resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658" 1159 | 1160 | handlebars@^4.0.1: 1161 | version "4.0.6" 1162 | resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.0.6.tgz#2ce4484850537f9c97a8026d5399b935c4ed4ed7" 1163 | dependencies: 1164 | async "^1.4.0" 1165 | optimist "^0.6.1" 1166 | source-map "^0.4.4" 1167 | optionalDependencies: 1168 | uglify-js "^2.6" 1169 | 1170 | har-schema@^1.0.5: 1171 | version "1.0.5" 1172 | resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-1.0.5.tgz#d263135f43307c02c602afc8fe95970c0151369e" 1173 | 1174 | har-validator@~4.2.1: 1175 | version "4.2.1" 1176 | resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-4.2.1.tgz#33481d0f1bbff600dd203d75812a6a5fba002e2a" 1177 | dependencies: 1178 | ajv "^4.9.1" 1179 | har-schema "^1.0.5" 1180 | 1181 | has-ansi@^2.0.0: 1182 | version "2.0.0" 1183 | resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" 1184 | dependencies: 1185 | ansi-regex "^2.0.0" 1186 | 1187 | has-binary@0.1.7: 1188 | version "0.1.7" 1189 | resolved "https://registry.yarnpkg.com/has-binary/-/has-binary-0.1.7.tgz#68e61eb16210c9545a0a5cce06a873912fe1e68c" 1190 | dependencies: 1191 | isarray "0.0.1" 1192 | 1193 | has-cors@1.1.0: 1194 | version "1.1.0" 1195 | resolved "https://registry.yarnpkg.com/has-cors/-/has-cors-1.1.0.tgz#5e474793f7ea9843d1bb99c23eef49ff126fff39" 1196 | 1197 | has-flag@^1.0.0: 1198 | version "1.0.0" 1199 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa" 1200 | 1201 | has-unicode@^2.0.0: 1202 | version "2.0.1" 1203 | resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" 1204 | 1205 | hash.js@^1.0.0, hash.js@^1.0.3: 1206 | version "1.0.3" 1207 | resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.0.3.tgz#1332ff00156c0a0ffdd8236013d07b77a0451573" 1208 | dependencies: 1209 | inherits "^2.0.1" 1210 | 1211 | hawk@~3.1.3: 1212 | version "3.1.3" 1213 | resolved "https://registry.yarnpkg.com/hawk/-/hawk-3.1.3.tgz#078444bd7c1640b0fe540d2c9b73d59678e8e1c4" 1214 | dependencies: 1215 | boom "2.x.x" 1216 | cryptiles "2.x.x" 1217 | hoek "2.x.x" 1218 | sntp "1.x.x" 1219 | 1220 | hmac-drbg@^1.0.0: 1221 | version "1.0.1" 1222 | resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" 1223 | dependencies: 1224 | hash.js "^1.0.3" 1225 | minimalistic-assert "^1.0.0" 1226 | minimalistic-crypto-utils "^1.0.1" 1227 | 1228 | hoek@2.x.x: 1229 | version "2.16.3" 1230 | resolved "https://registry.yarnpkg.com/hoek/-/hoek-2.16.3.tgz#20bb7403d3cea398e91dc4710a8ff1b8274a25ed" 1231 | 1232 | hosted-git-info@^2.1.4: 1233 | version "2.4.2" 1234 | resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.4.2.tgz#0076b9f46a270506ddbaaea56496897460612a67" 1235 | 1236 | http-errors@~1.6.1: 1237 | version "1.6.1" 1238 | resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.1.tgz#5f8b8ed98aca545656bf572997387f904a722257" 1239 | dependencies: 1240 | depd "1.1.0" 1241 | inherits "2.0.3" 1242 | setprototypeof "1.0.3" 1243 | statuses ">= 1.3.1 < 2" 1244 | 1245 | http-proxy@^1.13.0: 1246 | version "1.16.2" 1247 | resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.16.2.tgz#06dff292952bf64dbe8471fa9df73066d4f37742" 1248 | dependencies: 1249 | eventemitter3 "1.x.x" 1250 | requires-port "1.x.x" 1251 | 1252 | http-signature@~1.1.0: 1253 | version "1.1.1" 1254 | resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.1.1.tgz#df72e267066cd0ac67fb76adf8e134a8fbcf91bf" 1255 | dependencies: 1256 | assert-plus "^0.2.0" 1257 | jsprim "^1.2.2" 1258 | sshpk "^1.7.0" 1259 | 1260 | https-browserify@0.0.1: 1261 | version "0.0.1" 1262 | resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-0.0.1.tgz#3f91365cabe60b77ed0ebba24b454e3e09d95a82" 1263 | 1264 | iconv-lite@0.4.15: 1265 | version "0.4.15" 1266 | resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.15.tgz#fe265a218ac6a57cfe854927e9d04c19825eddeb" 1267 | 1268 | ieee754@^1.1.4: 1269 | version "1.1.8" 1270 | resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.8.tgz#be33d40ac10ef1926701f6f08a2d86fbfd1ad3e4" 1271 | 1272 | indent-string@^2.1.0: 1273 | version "2.1.0" 1274 | resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-2.1.0.tgz#8e2d48348742121b4a8218b7a137e9a52049dc80" 1275 | dependencies: 1276 | repeating "^2.0.0" 1277 | 1278 | indexof@0.0.1: 1279 | version "0.0.1" 1280 | resolved "https://registry.yarnpkg.com/indexof/-/indexof-0.0.1.tgz#82dc336d232b9062179d05ab3293a66059fd435d" 1281 | 1282 | inflight@^1.0.4: 1283 | version "1.0.6" 1284 | resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" 1285 | dependencies: 1286 | once "^1.3.0" 1287 | wrappy "1" 1288 | 1289 | inherits@2, inherits@2.0.3, inherits@^2.0.1, inherits@~2.0.0, inherits@~2.0.1: 1290 | version "2.0.3" 1291 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" 1292 | 1293 | inherits@2.0.1: 1294 | version "2.0.1" 1295 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1" 1296 | 1297 | ini@~1.3.0: 1298 | version "1.3.4" 1299 | resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.4.tgz#0537cb79daf59b59a1a517dff706c86ec039162e" 1300 | 1301 | interpret@^1.0.0: 1302 | version "1.0.3" 1303 | resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.0.3.tgz#cbc35c62eeee73f19ab7b10a801511401afc0f90" 1304 | 1305 | invert-kv@^1.0.0: 1306 | version "1.0.0" 1307 | resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6" 1308 | 1309 | is-arrayish@^0.2.1: 1310 | version "0.2.1" 1311 | resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" 1312 | 1313 | is-binary-path@^1.0.0: 1314 | version "1.0.1" 1315 | resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" 1316 | dependencies: 1317 | binary-extensions "^1.0.0" 1318 | 1319 | is-buffer@^1.0.2: 1320 | version "1.1.5" 1321 | resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.5.tgz#1f3b26ef613b214b88cbca23cc6c01d87961eecc" 1322 | 1323 | is-builtin-module@^1.0.0: 1324 | version "1.0.0" 1325 | resolved "https://registry.yarnpkg.com/is-builtin-module/-/is-builtin-module-1.0.0.tgz#540572d34f7ac3119f8f76c30cbc1b1e037affbe" 1326 | dependencies: 1327 | builtin-modules "^1.0.0" 1328 | 1329 | is-dotfile@^1.0.0: 1330 | version "1.0.2" 1331 | resolved "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.2.tgz#2c132383f39199f8edc268ca01b9b007d205cc4d" 1332 | 1333 | is-equal-shallow@^0.1.3: 1334 | version "0.1.3" 1335 | resolved "https://registry.yarnpkg.com/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz#2238098fc221de0bcfa5d9eac4c45d638aa1c534" 1336 | dependencies: 1337 | is-primitive "^2.0.0" 1338 | 1339 | is-extendable@^0.1.1: 1340 | version "0.1.1" 1341 | resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" 1342 | 1343 | is-extglob@^1.0.0: 1344 | version "1.0.0" 1345 | resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0" 1346 | 1347 | is-finite@^1.0.0: 1348 | version "1.0.2" 1349 | resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.0.2.tgz#cc6677695602be550ef11e8b4aa6305342b6d0aa" 1350 | dependencies: 1351 | number-is-nan "^1.0.0" 1352 | 1353 | is-fullwidth-code-point@^1.0.0: 1354 | version "1.0.0" 1355 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" 1356 | dependencies: 1357 | number-is-nan "^1.0.0" 1358 | 1359 | is-glob@^2.0.0, is-glob@^2.0.1: 1360 | version "2.0.1" 1361 | resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863" 1362 | dependencies: 1363 | is-extglob "^1.0.0" 1364 | 1365 | is-number@^0.1.1: 1366 | version "0.1.1" 1367 | resolved "https://registry.yarnpkg.com/is-number/-/is-number-0.1.1.tgz#69a7af116963d47206ec9bd9b48a14216f1e3806" 1368 | 1369 | is-number@^2.0.2, is-number@^2.1.0: 1370 | version "2.1.0" 1371 | resolved "https://registry.yarnpkg.com/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f" 1372 | dependencies: 1373 | kind-of "^3.0.2" 1374 | 1375 | is-posix-bracket@^0.1.0: 1376 | version "0.1.1" 1377 | resolved "https://registry.yarnpkg.com/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz#3334dc79774368e92f016e6fbc0a88f5cd6e6bc4" 1378 | 1379 | is-primitive@^2.0.0: 1380 | version "2.0.0" 1381 | resolved "https://registry.yarnpkg.com/is-primitive/-/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575" 1382 | 1383 | is-typedarray@~1.0.0: 1384 | version "1.0.0" 1385 | resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" 1386 | 1387 | is-utf8@^0.2.0: 1388 | version "0.2.1" 1389 | resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" 1390 | 1391 | isarray@0.0.1: 1392 | version "0.0.1" 1393 | resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" 1394 | 1395 | isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: 1396 | version "1.0.0" 1397 | resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" 1398 | 1399 | isbinaryfile@^3.0.0: 1400 | version "3.0.2" 1401 | resolved "https://registry.yarnpkg.com/isbinaryfile/-/isbinaryfile-3.0.2.tgz#4a3e974ec0cba9004d3fc6cde7209ea69368a621" 1402 | 1403 | isexe@^2.0.0: 1404 | version "2.0.0" 1405 | resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" 1406 | 1407 | isobject@^2.0.0: 1408 | version "2.1.0" 1409 | resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" 1410 | dependencies: 1411 | isarray "1.0.0" 1412 | 1413 | isstream@~0.1.2: 1414 | version "0.1.2" 1415 | resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" 1416 | 1417 | istanbul-instrumenter-loader@^0.2.0: 1418 | version "0.2.0" 1419 | resolved "https://registry.yarnpkg.com/istanbul-instrumenter-loader/-/istanbul-instrumenter-loader-0.2.0.tgz#643e4e5e4e8f9466863a29a977d283ab372c019c" 1420 | dependencies: 1421 | istanbul "0.x.x" 1422 | loader-utils "0.x.x" 1423 | object-assign "4.x.x" 1424 | 1425 | istanbul@0.x.x, istanbul@^0.4.0: 1426 | version "0.4.5" 1427 | resolved "https://registry.yarnpkg.com/istanbul/-/istanbul-0.4.5.tgz#65c7d73d4c4da84d4f3ac310b918fb0b8033733b" 1428 | dependencies: 1429 | abbrev "1.0.x" 1430 | async "1.x" 1431 | escodegen "1.8.x" 1432 | esprima "2.7.x" 1433 | glob "^5.0.15" 1434 | handlebars "^4.0.1" 1435 | js-yaml "3.x" 1436 | mkdirp "0.5.x" 1437 | nopt "3.x" 1438 | once "1.x" 1439 | resolve "1.1.x" 1440 | supports-color "^3.1.0" 1441 | which "^1.1.1" 1442 | wordwrap "^1.0.0" 1443 | 1444 | jasmine-core@~2.5.2: 1445 | version "2.5.2" 1446 | resolved "https://registry.yarnpkg.com/jasmine-core/-/jasmine-core-2.5.2.tgz#6f61bd79061e27f43e6f9355e44b3c6cab6ff297" 1447 | 1448 | jasmine@^2.5.0: 1449 | version "2.5.3" 1450 | resolved "https://registry.yarnpkg.com/jasmine/-/jasmine-2.5.3.tgz#5441f254e1fc2269deb1dfd93e0e57d565ff4d22" 1451 | dependencies: 1452 | exit "^0.1.2" 1453 | glob "^7.0.6" 1454 | jasmine-core "~2.5.2" 1455 | 1456 | jodid25519@^1.0.0: 1457 | version "1.0.2" 1458 | resolved "https://registry.yarnpkg.com/jodid25519/-/jodid25519-1.0.2.tgz#06d4912255093419477d425633606e0e90782967" 1459 | dependencies: 1460 | jsbn "~0.1.0" 1461 | 1462 | js-yaml@3.x: 1463 | version "3.8.3" 1464 | resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.8.3.tgz#33a05ec481c850c8875929166fe1beb61c728766" 1465 | dependencies: 1466 | argparse "^1.0.7" 1467 | esprima "^3.1.1" 1468 | 1469 | jsbn@~0.1.0: 1470 | version "0.1.1" 1471 | resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" 1472 | 1473 | json-loader@^0.5.4: 1474 | version "0.5.4" 1475 | resolved "https://registry.yarnpkg.com/json-loader/-/json-loader-0.5.4.tgz#8baa1365a632f58a3c46d20175fc6002c96e37de" 1476 | 1477 | json-schema@0.2.3: 1478 | version "0.2.3" 1479 | resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" 1480 | 1481 | json-stable-stringify@^1.0.1: 1482 | version "1.0.1" 1483 | resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af" 1484 | dependencies: 1485 | jsonify "~0.0.0" 1486 | 1487 | json-stringify-safe@~5.0.1: 1488 | version "5.0.1" 1489 | resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" 1490 | 1491 | json3@3.3.2: 1492 | version "3.3.2" 1493 | resolved "https://registry.yarnpkg.com/json3/-/json3-3.3.2.tgz#3c0434743df93e2f5c42aee7b19bcb483575f4e1" 1494 | 1495 | json5@^0.5.0, json5@^0.5.1: 1496 | version "0.5.1" 1497 | resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821" 1498 | 1499 | jsonify@~0.0.0: 1500 | version "0.0.0" 1501 | resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" 1502 | 1503 | jsprim@^1.2.2: 1504 | version "1.4.0" 1505 | resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.0.tgz#a3b87e40298d8c380552d8cc7628a0bb95a22918" 1506 | dependencies: 1507 | assert-plus "1.0.0" 1508 | extsprintf "1.0.2" 1509 | json-schema "0.2.3" 1510 | verror "1.3.6" 1511 | 1512 | karma-chrome-launcher@^2.0.0: 1513 | version "2.0.0" 1514 | resolved "https://registry.yarnpkg.com/karma-chrome-launcher/-/karma-chrome-launcher-2.0.0.tgz#c2790c5a32b15577d0fff5a4d5a2703b3b439c25" 1515 | dependencies: 1516 | fs-access "^1.0.0" 1517 | which "^1.2.1" 1518 | 1519 | karma-coverage@^1.1.1: 1520 | version "1.1.1" 1521 | resolved "https://registry.yarnpkg.com/karma-coverage/-/karma-coverage-1.1.1.tgz#5aff8b39cf6994dc22de4c84362c76001b637cf6" 1522 | dependencies: 1523 | dateformat "^1.0.6" 1524 | istanbul "^0.4.0" 1525 | lodash "^3.8.0" 1526 | minimatch "^3.0.0" 1527 | source-map "^0.5.1" 1528 | 1529 | karma-jasmine@^1.0.2: 1530 | version "1.1.0" 1531 | resolved "https://registry.yarnpkg.com/karma-jasmine/-/karma-jasmine-1.1.0.tgz#22e4c06bf9a182e5294d1f705e3733811b810acf" 1532 | 1533 | karma-mocha-reporter@^2.1.0: 1534 | version "2.2.3" 1535 | resolved "https://registry.yarnpkg.com/karma-mocha-reporter/-/karma-mocha-reporter-2.2.3.tgz#04fdda45a1d9697a73871c7472223c581701ab20" 1536 | dependencies: 1537 | chalk "1.1.3" 1538 | 1539 | karma-sourcemap-loader@^0.3.7: 1540 | version "0.3.7" 1541 | resolved "https://registry.yarnpkg.com/karma-sourcemap-loader/-/karma-sourcemap-loader-0.3.7.tgz#91322c77f8f13d46fed062b042e1009d4c4505d8" 1542 | dependencies: 1543 | graceful-fs "^4.1.2" 1544 | 1545 | karma-webpack@^2.0.0: 1546 | version "2.0.3" 1547 | resolved "https://registry.yarnpkg.com/karma-webpack/-/karma-webpack-2.0.3.tgz#39cebf5ca2580139b27f9ae69b78816b9c82fae6" 1548 | dependencies: 1549 | async "~0.9.0" 1550 | loader-utils "^0.2.5" 1551 | lodash "^3.8.0" 1552 | source-map "^0.1.41" 1553 | webpack-dev-middleware "^1.0.11" 1554 | 1555 | karma@^1.2.0: 1556 | version "1.6.0" 1557 | resolved "https://registry.yarnpkg.com/karma/-/karma-1.6.0.tgz#0e871d4527d5eac56c41d181f03c5c0a7e6dbf3e" 1558 | dependencies: 1559 | bluebird "^3.3.0" 1560 | body-parser "^1.16.1" 1561 | chokidar "^1.4.1" 1562 | colors "^1.1.0" 1563 | combine-lists "^1.0.0" 1564 | connect "^3.6.0" 1565 | core-js "^2.2.0" 1566 | di "^0.0.1" 1567 | dom-serialize "^2.2.0" 1568 | expand-braces "^0.1.1" 1569 | glob "^7.1.1" 1570 | graceful-fs "^4.1.2" 1571 | http-proxy "^1.13.0" 1572 | isbinaryfile "^3.0.0" 1573 | lodash "^3.8.0" 1574 | log4js "^0.6.31" 1575 | mime "^1.3.4" 1576 | minimatch "^3.0.2" 1577 | optimist "^0.6.1" 1578 | qjobs "^1.1.4" 1579 | range-parser "^1.2.0" 1580 | rimraf "^2.6.0" 1581 | safe-buffer "^5.0.1" 1582 | socket.io "1.7.3" 1583 | source-map "^0.5.3" 1584 | tmp "0.0.31" 1585 | useragent "^2.1.12" 1586 | 1587 | kind-of@^3.0.2: 1588 | version "3.1.0" 1589 | resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.1.0.tgz#475d698a5e49ff5e53d14e3e732429dc8bf4cf47" 1590 | dependencies: 1591 | is-buffer "^1.0.2" 1592 | 1593 | lazy-cache@^1.0.3: 1594 | version "1.0.4" 1595 | resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-1.0.4.tgz#a1d78fc3a50474cb80845d3b3b6e1da49a446e8e" 1596 | 1597 | lcid@^1.0.0: 1598 | version "1.0.0" 1599 | resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835" 1600 | dependencies: 1601 | invert-kv "^1.0.0" 1602 | 1603 | levn@~0.3.0: 1604 | version "0.3.0" 1605 | resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" 1606 | dependencies: 1607 | prelude-ls "~1.1.2" 1608 | type-check "~0.3.2" 1609 | 1610 | load-json-file@^1.0.0: 1611 | version "1.1.0" 1612 | resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0" 1613 | dependencies: 1614 | graceful-fs "^4.1.2" 1615 | parse-json "^2.2.0" 1616 | pify "^2.0.0" 1617 | pinkie-promise "^2.0.0" 1618 | strip-bom "^2.0.0" 1619 | 1620 | loader-runner@^2.3.0: 1621 | version "2.3.0" 1622 | resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.3.0.tgz#f482aea82d543e07921700d5a46ef26fdac6b8a2" 1623 | 1624 | loader-utils@0.x.x, loader-utils@^0.2.16, loader-utils@^0.2.5, loader-utils@^0.2.6, loader-utils@^0.2.7: 1625 | version "0.2.17" 1626 | resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-0.2.17.tgz#f86e6374d43205a6e6c60e9196f17c0299bfb348" 1627 | dependencies: 1628 | big.js "^3.1.3" 1629 | emojis-list "^2.0.0" 1630 | json5 "^0.5.0" 1631 | object-assign "^4.0.1" 1632 | 1633 | loader-utils@^1.0.2: 1634 | version "1.1.0" 1635 | resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.1.0.tgz#c98aef488bcceda2ffb5e2de646d6a754429f5cd" 1636 | dependencies: 1637 | big.js "^3.1.3" 1638 | emojis-list "^2.0.0" 1639 | json5 "^0.5.0" 1640 | 1641 | lodash@^3.8.0: 1642 | version "3.10.1" 1643 | resolved "https://registry.yarnpkg.com/lodash/-/lodash-3.10.1.tgz#5bf45e8e49ba4189e17d482789dfd15bd140b7b6" 1644 | 1645 | lodash@^4.14.0, lodash@^4.17.4, lodash@^4.5.0: 1646 | version "4.17.4" 1647 | resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae" 1648 | 1649 | log4js@^0.6.31: 1650 | version "0.6.38" 1651 | resolved "https://registry.yarnpkg.com/log4js/-/log4js-0.6.38.tgz#2c494116695d6fb25480943d3fc872e662a522fd" 1652 | dependencies: 1653 | readable-stream "~1.0.2" 1654 | semver "~4.3.3" 1655 | 1656 | longest@^1.0.1: 1657 | version "1.0.1" 1658 | resolved "https://registry.yarnpkg.com/longest/-/longest-1.0.1.tgz#30a0b2da38f73770e8294a0d22e6625ed77d0097" 1659 | 1660 | loud-rejection@^1.0.0: 1661 | version "1.6.0" 1662 | resolved "https://registry.yarnpkg.com/loud-rejection/-/loud-rejection-1.6.0.tgz#5b46f80147edee578870f086d04821cf998e551f" 1663 | dependencies: 1664 | currently-unhandled "^0.4.1" 1665 | signal-exit "^3.0.0" 1666 | 1667 | lru-cache@2.2.x: 1668 | version "2.2.4" 1669 | resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-2.2.4.tgz#6c658619becf14031d0d0b594b16042ce4dc063d" 1670 | 1671 | map-obj@^1.0.0, map-obj@^1.0.1: 1672 | version "1.0.1" 1673 | resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d" 1674 | 1675 | media-typer@0.3.0: 1676 | version "0.3.0" 1677 | resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" 1678 | 1679 | memory-fs@^0.2.0: 1680 | version "0.2.0" 1681 | resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.2.0.tgz#f2bb25368bc121e391c2520de92969caee0a0290" 1682 | 1683 | memory-fs@^0.4.0, memory-fs@~0.4.1: 1684 | version "0.4.1" 1685 | resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.4.1.tgz#3a9a20b8462523e447cfbc7e8bb80ed667bfc552" 1686 | dependencies: 1687 | errno "^0.1.3" 1688 | readable-stream "^2.0.1" 1689 | 1690 | meow@^3.3.0, meow@^3.6.0: 1691 | version "3.7.0" 1692 | resolved "https://registry.yarnpkg.com/meow/-/meow-3.7.0.tgz#72cb668b425228290abbfa856892587308a801fb" 1693 | dependencies: 1694 | camelcase-keys "^2.0.0" 1695 | decamelize "^1.1.2" 1696 | loud-rejection "^1.0.0" 1697 | map-obj "^1.0.1" 1698 | minimist "^1.1.3" 1699 | normalize-package-data "^2.3.4" 1700 | object-assign "^4.0.1" 1701 | read-pkg-up "^1.0.1" 1702 | redent "^1.0.0" 1703 | trim-newlines "^1.0.0" 1704 | 1705 | micromatch@^2.1.5: 1706 | version "2.3.11" 1707 | resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565" 1708 | dependencies: 1709 | arr-diff "^2.0.0" 1710 | array-unique "^0.2.1" 1711 | braces "^1.8.2" 1712 | expand-brackets "^0.1.4" 1713 | extglob "^0.3.1" 1714 | filename-regex "^2.0.0" 1715 | is-extglob "^1.0.0" 1716 | is-glob "^2.0.1" 1717 | kind-of "^3.0.2" 1718 | normalize-path "^2.0.1" 1719 | object.omit "^2.0.0" 1720 | parse-glob "^3.0.4" 1721 | regex-cache "^0.4.2" 1722 | 1723 | miller-rabin@^4.0.0: 1724 | version "4.0.0" 1725 | resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.0.tgz#4a62fb1d42933c05583982f4c716f6fb9e6c6d3d" 1726 | dependencies: 1727 | bn.js "^4.0.0" 1728 | brorand "^1.0.1" 1729 | 1730 | mime-db@~1.27.0: 1731 | version "1.27.0" 1732 | resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.27.0.tgz#820f572296bbd20ec25ed55e5b5de869e5436eb1" 1733 | 1734 | mime-types@^2.1.12, mime-types@~2.1.11, mime-types@~2.1.15, mime-types@~2.1.7: 1735 | version "2.1.15" 1736 | resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.15.tgz#a4ebf5064094569237b8cf70046776d09fc92aed" 1737 | dependencies: 1738 | mime-db "~1.27.0" 1739 | 1740 | mime@^1.3.4: 1741 | version "1.3.4" 1742 | resolved "https://registry.yarnpkg.com/mime/-/mime-1.3.4.tgz#115f9e3b6b3daf2959983cb38f149a2d40eb5d53" 1743 | 1744 | minimalistic-assert@^1.0.0: 1745 | version "1.0.0" 1746 | resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.0.tgz#702be2dda6b37f4836bcb3f5db56641b64a1d3d3" 1747 | 1748 | minimalistic-crypto-utils@^1.0.0, minimalistic-crypto-utils@^1.0.1: 1749 | version "1.0.1" 1750 | resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" 1751 | 1752 | "minimatch@2 || 3", minimatch@^3.0.0, minimatch@^3.0.2: 1753 | version "3.0.3" 1754 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.3.tgz#2a4e4090b96b2db06a9d7df01055a62a77c9b774" 1755 | dependencies: 1756 | brace-expansion "^1.0.0" 1757 | 1758 | minimist@0.0.8, minimist@~0.0.1: 1759 | version "0.0.8" 1760 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" 1761 | 1762 | minimist@^1.1.3, minimist@^1.2.0: 1763 | version "1.2.0" 1764 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" 1765 | 1766 | mkdirp@0.5.x, "mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.0: 1767 | version "0.5.1" 1768 | resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" 1769 | dependencies: 1770 | minimist "0.0.8" 1771 | 1772 | ms@0.7.1: 1773 | version "0.7.1" 1774 | resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.1.tgz#9cd13c03adbff25b65effde7ce864ee952017098" 1775 | 1776 | ms@0.7.2: 1777 | version "0.7.2" 1778 | resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.2.tgz#ae25cf2512b3885a1d95d7f037868d8431124765" 1779 | 1780 | nan@^2.3.0: 1781 | version "2.6.2" 1782 | resolved "https://registry.yarnpkg.com/nan/-/nan-2.6.2.tgz#e4ff34e6c95fdfb5aecc08de6596f43605a7db45" 1783 | 1784 | negotiator@0.6.1: 1785 | version "0.6.1" 1786 | resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.1.tgz#2b327184e8992101177b28563fb5e7102acd0ca9" 1787 | 1788 | nested-error-stacks@^1.0.0, nested-error-stacks@^1.0.1: 1789 | version "1.0.2" 1790 | resolved "https://registry.yarnpkg.com/nested-error-stacks/-/nested-error-stacks-1.0.2.tgz#19f619591519f096769a5ba9a86e6eeec823c3cf" 1791 | dependencies: 1792 | inherits "~2.0.1" 1793 | 1794 | node-libs-browser@^2.0.0: 1795 | version "2.0.0" 1796 | resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.0.0.tgz#a3a59ec97024985b46e958379646f96c4b616646" 1797 | dependencies: 1798 | assert "^1.1.1" 1799 | browserify-zlib "^0.1.4" 1800 | buffer "^4.3.0" 1801 | console-browserify "^1.1.0" 1802 | constants-browserify "^1.0.0" 1803 | crypto-browserify "^3.11.0" 1804 | domain-browser "^1.1.1" 1805 | events "^1.0.0" 1806 | https-browserify "0.0.1" 1807 | os-browserify "^0.2.0" 1808 | path-browserify "0.0.0" 1809 | process "^0.11.0" 1810 | punycode "^1.2.4" 1811 | querystring-es3 "^0.2.0" 1812 | readable-stream "^2.0.5" 1813 | stream-browserify "^2.0.1" 1814 | stream-http "^2.3.1" 1815 | string_decoder "^0.10.25" 1816 | timers-browserify "^2.0.2" 1817 | tty-browserify "0.0.0" 1818 | url "^0.11.0" 1819 | util "^0.10.3" 1820 | vm-browserify "0.0.4" 1821 | 1822 | node-pre-gyp@^0.6.29: 1823 | version "0.6.34" 1824 | resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.6.34.tgz#94ad1c798a11d7fc67381b50d47f8cc18d9799f7" 1825 | dependencies: 1826 | mkdirp "^0.5.1" 1827 | nopt "^4.0.1" 1828 | npmlog "^4.0.2" 1829 | rc "^1.1.7" 1830 | request "^2.81.0" 1831 | rimraf "^2.6.1" 1832 | semver "^5.3.0" 1833 | tar "^2.2.1" 1834 | tar-pack "^3.4.0" 1835 | 1836 | nopt@3.x: 1837 | version "3.0.6" 1838 | resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9" 1839 | dependencies: 1840 | abbrev "1" 1841 | 1842 | nopt@^4.0.1: 1843 | version "4.0.1" 1844 | resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d" 1845 | dependencies: 1846 | abbrev "1" 1847 | osenv "^0.1.4" 1848 | 1849 | normalize-package-data@^2.3.2, normalize-package-data@^2.3.4: 1850 | version "2.3.6" 1851 | resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.3.6.tgz#498fa420c96401f787402ba21e600def9f981fff" 1852 | dependencies: 1853 | hosted-git-info "^2.1.4" 1854 | is-builtin-module "^1.0.0" 1855 | semver "2 || 3 || 4 || 5" 1856 | validate-npm-package-license "^3.0.1" 1857 | 1858 | normalize-path@^2.0.1: 1859 | version "2.1.1" 1860 | resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" 1861 | dependencies: 1862 | remove-trailing-separator "^1.0.1" 1863 | 1864 | npmlog@^4.0.2: 1865 | version "4.0.2" 1866 | resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.0.2.tgz#d03950e0e78ce1527ba26d2a7592e9348ac3e75f" 1867 | dependencies: 1868 | are-we-there-yet "~1.1.2" 1869 | console-control-strings "~1.1.0" 1870 | gauge "~2.7.1" 1871 | set-blocking "~2.0.0" 1872 | 1873 | null-check@^1.0.0: 1874 | version "1.0.0" 1875 | resolved "https://registry.yarnpkg.com/null-check/-/null-check-1.0.0.tgz#977dffd7176012b9ec30d2a39db5cf72a0439edd" 1876 | 1877 | number-is-nan@^1.0.0: 1878 | version "1.0.1" 1879 | resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" 1880 | 1881 | oauth-sign@~0.8.1: 1882 | version "0.8.2" 1883 | resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43" 1884 | 1885 | object-assign@4.1.0: 1886 | version "4.1.0" 1887 | resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.0.tgz#7a3b3d0e98063d43f4c03f2e8ae6cd51a86883a0" 1888 | 1889 | object-assign@4.x.x, object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: 1890 | version "4.1.1" 1891 | resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" 1892 | 1893 | object-assign@^2.0.0: 1894 | version "2.1.1" 1895 | resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-2.1.1.tgz#43c36e5d569ff8e4816c4efa8be02d26967c18aa" 1896 | 1897 | object-component@0.0.3: 1898 | version "0.0.3" 1899 | resolved "https://registry.yarnpkg.com/object-component/-/object-component-0.0.3.tgz#f0c69aa50efc95b866c186f400a33769cb2f1291" 1900 | 1901 | object.omit@^2.0.0: 1902 | version "2.0.1" 1903 | resolved "https://registry.yarnpkg.com/object.omit/-/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa" 1904 | dependencies: 1905 | for-own "^0.1.4" 1906 | is-extendable "^0.1.1" 1907 | 1908 | on-finished@~2.3.0: 1909 | version "2.3.0" 1910 | resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" 1911 | dependencies: 1912 | ee-first "1.1.1" 1913 | 1914 | once@1.x, once@^1.3.0, once@^1.3.3: 1915 | version "1.4.0" 1916 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" 1917 | dependencies: 1918 | wrappy "1" 1919 | 1920 | optimist@^0.6.1, optimist@~0.6.0: 1921 | version "0.6.1" 1922 | resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686" 1923 | dependencies: 1924 | minimist "~0.0.1" 1925 | wordwrap "~0.0.2" 1926 | 1927 | optionator@^0.8.1: 1928 | version "0.8.2" 1929 | resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64" 1930 | dependencies: 1931 | deep-is "~0.1.3" 1932 | fast-levenshtein "~2.0.4" 1933 | levn "~0.3.0" 1934 | prelude-ls "~1.1.2" 1935 | type-check "~0.3.2" 1936 | wordwrap "~1.0.0" 1937 | 1938 | options@>=0.0.5: 1939 | version "0.0.6" 1940 | resolved "https://registry.yarnpkg.com/options/-/options-0.0.6.tgz#ec22d312806bb53e731773e7cdaefcf1c643128f" 1941 | 1942 | os-browserify@^0.2.0: 1943 | version "0.2.1" 1944 | resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.2.1.tgz#63fc4ccee5d2d7763d26bbf8601078e6c2e0044f" 1945 | 1946 | os-homedir@^1.0.0: 1947 | version "1.0.2" 1948 | resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" 1949 | 1950 | os-locale@^1.4.0: 1951 | version "1.4.0" 1952 | resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-1.4.0.tgz#20f9f17ae29ed345e8bde583b13d2009803c14d9" 1953 | dependencies: 1954 | lcid "^1.0.0" 1955 | 1956 | os-tmpdir@^1.0.0, os-tmpdir@~1.0.1: 1957 | version "1.0.2" 1958 | resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" 1959 | 1960 | osenv@^0.1.4: 1961 | version "0.1.4" 1962 | resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.4.tgz#42fe6d5953df06c8064be6f176c3d05aaaa34644" 1963 | dependencies: 1964 | os-homedir "^1.0.0" 1965 | os-tmpdir "^1.0.0" 1966 | 1967 | pako@~0.2.0: 1968 | version "0.2.9" 1969 | resolved "https://registry.yarnpkg.com/pako/-/pako-0.2.9.tgz#f3f7522f4ef782348da8161bad9ecfd51bf83a75" 1970 | 1971 | parse-asn1@^5.0.0: 1972 | version "5.1.0" 1973 | resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.0.tgz#37c4f9b7ed3ab65c74817b5f2480937fbf97c712" 1974 | dependencies: 1975 | asn1.js "^4.0.0" 1976 | browserify-aes "^1.0.0" 1977 | create-hash "^1.1.0" 1978 | evp_bytestokey "^1.0.0" 1979 | pbkdf2 "^3.0.3" 1980 | 1981 | parse-glob@^3.0.4: 1982 | version "3.0.4" 1983 | resolved "https://registry.yarnpkg.com/parse-glob/-/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c" 1984 | dependencies: 1985 | glob-base "^0.3.0" 1986 | is-dotfile "^1.0.0" 1987 | is-extglob "^1.0.0" 1988 | is-glob "^2.0.0" 1989 | 1990 | parse-json@^2.2.0: 1991 | version "2.2.0" 1992 | resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" 1993 | dependencies: 1994 | error-ex "^1.2.0" 1995 | 1996 | parse5@^2.2.1: 1997 | version "2.2.3" 1998 | resolved "https://registry.yarnpkg.com/parse5/-/parse5-2.2.3.tgz#0c4fc41c1000c5e6b93d48b03f8083837834e9f6" 1999 | 2000 | parsejson@0.0.3: 2001 | version "0.0.3" 2002 | resolved "https://registry.yarnpkg.com/parsejson/-/parsejson-0.0.3.tgz#ab7e3759f209ece99437973f7d0f1f64ae0e64ab" 2003 | dependencies: 2004 | better-assert "~1.0.0" 2005 | 2006 | parseqs@0.0.5: 2007 | version "0.0.5" 2008 | resolved "https://registry.yarnpkg.com/parseqs/-/parseqs-0.0.5.tgz#d5208a3738e46766e291ba2ea173684921a8b89d" 2009 | dependencies: 2010 | better-assert "~1.0.0" 2011 | 2012 | parseuri@0.0.5: 2013 | version "0.0.5" 2014 | resolved "https://registry.yarnpkg.com/parseuri/-/parseuri-0.0.5.tgz#80204a50d4dbb779bfdc6ebe2778d90e4bce320a" 2015 | dependencies: 2016 | better-assert "~1.0.0" 2017 | 2018 | parseurl@~1.3.1: 2019 | version "1.3.1" 2020 | resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.1.tgz#c8ab8c9223ba34888aa64a297b28853bec18da56" 2021 | 2022 | path-browserify@0.0.0: 2023 | version "0.0.0" 2024 | resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.0.tgz#a0b870729aae214005b7d5032ec2cbbb0fb4451a" 2025 | 2026 | path-exists@^2.0.0: 2027 | version "2.1.0" 2028 | resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b" 2029 | dependencies: 2030 | pinkie-promise "^2.0.0" 2031 | 2032 | path-is-absolute@^1.0.0: 2033 | version "1.0.1" 2034 | resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" 2035 | 2036 | path-parse@^1.0.5: 2037 | version "1.0.5" 2038 | resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.5.tgz#3c1adf871ea9cd6c9431b6ea2bd74a0ff055c4c1" 2039 | 2040 | path-type@^1.0.0: 2041 | version "1.1.0" 2042 | resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441" 2043 | dependencies: 2044 | graceful-fs "^4.1.2" 2045 | pify "^2.0.0" 2046 | pinkie-promise "^2.0.0" 2047 | 2048 | pbkdf2@^3.0.3: 2049 | version "3.0.9" 2050 | resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.0.9.tgz#f2c4b25a600058b3c3773c086c37dbbee1ffe693" 2051 | dependencies: 2052 | create-hmac "^1.1.2" 2053 | 2054 | performance-now@^0.2.0: 2055 | version "0.2.0" 2056 | resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-0.2.0.tgz#33ef30c5c77d4ea21c5a53869d91b56d8f2555e5" 2057 | 2058 | pify@^2.0.0, pify@^2.3.0: 2059 | version "2.3.0" 2060 | resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" 2061 | 2062 | pinkie-promise@^2.0.0: 2063 | version "2.0.1" 2064 | resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" 2065 | dependencies: 2066 | pinkie "^2.0.0" 2067 | 2068 | pinkie@^2.0.0: 2069 | version "2.0.4" 2070 | resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" 2071 | 2072 | prelude-ls@~1.1.2: 2073 | version "1.1.2" 2074 | resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" 2075 | 2076 | preserve@^0.2.0: 2077 | version "0.2.0" 2078 | resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b" 2079 | 2080 | process-nextick-args@~1.0.6: 2081 | version "1.0.7" 2082 | resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3" 2083 | 2084 | process@^0.11.0: 2085 | version "0.11.9" 2086 | resolved "https://registry.yarnpkg.com/process/-/process-0.11.9.tgz#7bd5ad21aa6253e7da8682264f1e11d11c0318c1" 2087 | 2088 | prr@~0.0.0: 2089 | version "0.0.0" 2090 | resolved "https://registry.yarnpkg.com/prr/-/prr-0.0.0.tgz#1a84b85908325501411853d0081ee3fa86e2926a" 2091 | 2092 | public-encrypt@^4.0.0: 2093 | version "4.0.0" 2094 | resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.0.tgz#39f699f3a46560dd5ebacbca693caf7c65c18cc6" 2095 | dependencies: 2096 | bn.js "^4.1.0" 2097 | browserify-rsa "^4.0.0" 2098 | create-hash "^1.1.0" 2099 | parse-asn1 "^5.0.0" 2100 | randombytes "^2.0.1" 2101 | 2102 | punycode@1.3.2: 2103 | version "1.3.2" 2104 | resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" 2105 | 2106 | punycode@^1.2.4, punycode@^1.4.1: 2107 | version "1.4.1" 2108 | resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" 2109 | 2110 | qjobs@^1.1.4: 2111 | version "1.1.5" 2112 | resolved "https://registry.yarnpkg.com/qjobs/-/qjobs-1.1.5.tgz#659de9f2cf8dcc27a1481276f205377272382e73" 2113 | 2114 | qs@6.4.0, qs@~6.4.0: 2115 | version "6.4.0" 2116 | resolved "https://registry.yarnpkg.com/qs/-/qs-6.4.0.tgz#13e26d28ad6b0ffaa91312cd3bf708ed351e7233" 2117 | 2118 | querystring-es3@^0.2.0: 2119 | version "0.2.1" 2120 | resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73" 2121 | 2122 | querystring@0.2.0: 2123 | version "0.2.0" 2124 | resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" 2125 | 2126 | randomatic@^1.1.3: 2127 | version "1.1.6" 2128 | resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-1.1.6.tgz#110dcabff397e9dcff7c0789ccc0a49adf1ec5bb" 2129 | dependencies: 2130 | is-number "^2.0.2" 2131 | kind-of "^3.0.2" 2132 | 2133 | randombytes@^2.0.0, randombytes@^2.0.1: 2134 | version "2.0.3" 2135 | resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.0.3.tgz#674c99760901c3c4112771a31e521dc349cc09ec" 2136 | 2137 | range-parser@^1.0.3, range-parser@^1.2.0: 2138 | version "1.2.0" 2139 | resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.0.tgz#f49be6b487894ddc40dcc94a322f611092e00d5e" 2140 | 2141 | raw-body@~2.2.0: 2142 | version "2.2.0" 2143 | resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.2.0.tgz#994976cf6a5096a41162840492f0bdc5d6e7fb96" 2144 | dependencies: 2145 | bytes "2.4.0" 2146 | iconv-lite "0.4.15" 2147 | unpipe "1.0.0" 2148 | 2149 | rc@^1.1.7: 2150 | version "1.2.1" 2151 | resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.1.tgz#2e03e8e42ee450b8cb3dce65be1bf8974e1dfd95" 2152 | dependencies: 2153 | deep-extend "~0.4.0" 2154 | ini "~1.3.0" 2155 | minimist "^1.2.0" 2156 | strip-json-comments "~2.0.1" 2157 | 2158 | read-pkg-up@^1.0.1: 2159 | version "1.0.1" 2160 | resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02" 2161 | dependencies: 2162 | find-up "^1.0.0" 2163 | read-pkg "^1.0.0" 2164 | 2165 | read-pkg@^1.0.0: 2166 | version "1.1.0" 2167 | resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28" 2168 | dependencies: 2169 | load-json-file "^1.0.0" 2170 | normalize-package-data "^2.3.2" 2171 | path-type "^1.0.0" 2172 | 2173 | "readable-stream@^2.0.0 || ^1.1.13", readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.5, readable-stream@^2.1.4, readable-stream@^2.2.6: 2174 | version "2.2.9" 2175 | resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.2.9.tgz#cf78ec6f4a6d1eb43d26488cac97f042e74b7fc8" 2176 | dependencies: 2177 | buffer-shims "~1.0.0" 2178 | core-util-is "~1.0.0" 2179 | inherits "~2.0.1" 2180 | isarray "~1.0.0" 2181 | process-nextick-args "~1.0.6" 2182 | string_decoder "~1.0.0" 2183 | util-deprecate "~1.0.1" 2184 | 2185 | readable-stream@~1.0.2: 2186 | version "1.0.34" 2187 | resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.0.34.tgz#125820e34bc842d2f2aaafafe4c2916ee32c157c" 2188 | dependencies: 2189 | core-util-is "~1.0.0" 2190 | inherits "~2.0.1" 2191 | isarray "0.0.1" 2192 | string_decoder "~0.10.x" 2193 | 2194 | readdirp@^2.0.0: 2195 | version "2.1.0" 2196 | resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.1.0.tgz#4ed0ad060df3073300c48440373f72d1cc642d78" 2197 | dependencies: 2198 | graceful-fs "^4.1.2" 2199 | minimatch "^3.0.2" 2200 | readable-stream "^2.0.2" 2201 | set-immediate-shim "^1.0.1" 2202 | 2203 | redent@^1.0.0: 2204 | version "1.0.0" 2205 | resolved "https://registry.yarnpkg.com/redent/-/redent-1.0.0.tgz#cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde" 2206 | dependencies: 2207 | indent-string "^2.1.0" 2208 | strip-indent "^1.0.1" 2209 | 2210 | reflect-metadata@^0.1.2: 2211 | version "0.1.10" 2212 | resolved "https://registry.yarnpkg.com/reflect-metadata/-/reflect-metadata-0.1.10.tgz#b4f83704416acad89988c9b15635d47e03b9344a" 2213 | 2214 | regex-cache@^0.4.2: 2215 | version "0.4.3" 2216 | resolved "https://registry.yarnpkg.com/regex-cache/-/regex-cache-0.4.3.tgz#9b1a6c35d4d0dfcef5711ae651e8e9d3d7114145" 2217 | dependencies: 2218 | is-equal-shallow "^0.1.3" 2219 | is-primitive "^2.0.0" 2220 | 2221 | remove-trailing-separator@^1.0.1: 2222 | version "1.0.1" 2223 | resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.0.1.tgz#615ebb96af559552d4bf4057c8436d486ab63cc4" 2224 | 2225 | repeat-element@^1.1.2: 2226 | version "1.1.2" 2227 | resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.2.tgz#ef089a178d1483baae4d93eb98b4f9e4e11d990a" 2228 | 2229 | repeat-string@^0.2.2: 2230 | version "0.2.2" 2231 | resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-0.2.2.tgz#c7a8d3236068362059a7e4651fc6884e8b1fb4ae" 2232 | 2233 | repeat-string@^1.5.2: 2234 | version "1.6.1" 2235 | resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" 2236 | 2237 | repeating@^2.0.0: 2238 | version "2.0.1" 2239 | resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda" 2240 | dependencies: 2241 | is-finite "^1.0.0" 2242 | 2243 | request@^2.81.0: 2244 | version "2.81.0" 2245 | resolved "https://registry.yarnpkg.com/request/-/request-2.81.0.tgz#c6928946a0e06c5f8d6f8a9333469ffda46298a0" 2246 | dependencies: 2247 | aws-sign2 "~0.6.0" 2248 | aws4 "^1.2.1" 2249 | caseless "~0.12.0" 2250 | combined-stream "~1.0.5" 2251 | extend "~3.0.0" 2252 | forever-agent "~0.6.1" 2253 | form-data "~2.1.1" 2254 | har-validator "~4.2.1" 2255 | hawk "~3.1.3" 2256 | http-signature "~1.1.0" 2257 | is-typedarray "~1.0.0" 2258 | isstream "~0.1.2" 2259 | json-stringify-safe "~5.0.1" 2260 | mime-types "~2.1.7" 2261 | oauth-sign "~0.8.1" 2262 | performance-now "^0.2.0" 2263 | qs "~6.4.0" 2264 | safe-buffer "^5.0.1" 2265 | stringstream "~0.0.4" 2266 | tough-cookie "~2.3.0" 2267 | tunnel-agent "^0.6.0" 2268 | uuid "^3.0.0" 2269 | 2270 | require-directory@^2.1.1: 2271 | version "2.1.1" 2272 | resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" 2273 | 2274 | require-main-filename@^1.0.1: 2275 | version "1.0.1" 2276 | resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1" 2277 | 2278 | requires-port@1.x.x: 2279 | version "1.0.0" 2280 | resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" 2281 | 2282 | resolve@1.1.x: 2283 | version "1.1.7" 2284 | resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" 2285 | 2286 | resolve@^1.1.7: 2287 | version "1.3.2" 2288 | resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.3.2.tgz#1f0442c9e0cbb8136e87b9305f932f46c7f28235" 2289 | dependencies: 2290 | path-parse "^1.0.5" 2291 | 2292 | right-align@^0.1.1: 2293 | version "0.1.3" 2294 | resolved "https://registry.yarnpkg.com/right-align/-/right-align-0.1.3.tgz#61339b722fe6a3515689210d24e14c96148613ef" 2295 | dependencies: 2296 | align-text "^0.1.1" 2297 | 2298 | rimraf@2, rimraf@^2.4.4, rimraf@^2.5.1, rimraf@^2.5.4, rimraf@^2.6.0, rimraf@^2.6.1: 2299 | version "2.6.1" 2300 | resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.1.tgz#c2338ec643df7a1b7fe5c54fa86f57428a55f33d" 2301 | dependencies: 2302 | glob "^7.0.5" 2303 | 2304 | ripemd160@^1.0.0: 2305 | version "1.0.1" 2306 | resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-1.0.1.tgz#93a4bbd4942bc574b69a8fa57c71de10ecca7d6e" 2307 | 2308 | rollup@^0.34.13: 2309 | version "0.34.13" 2310 | resolved "https://registry.yarnpkg.com/rollup/-/rollup-0.34.13.tgz#a211cdde31f96cb39e7cb4e35becb15ddc3efa19" 2311 | dependencies: 2312 | source-map-support "^0.4.0" 2313 | 2314 | rxjs@^5.4.0: 2315 | version "5.4.2" 2316 | resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-5.4.2.tgz#2a3236fcbf03df57bae06fd6972fd99e5c08fcf7" 2317 | dependencies: 2318 | symbol-observable "^1.0.1" 2319 | 2320 | safe-buffer@^5.0.1: 2321 | version "5.0.1" 2322 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.0.1.tgz#d263ca54696cd8a306b5ca6551e92de57918fbe7" 2323 | 2324 | "semver@2 || 3 || 4 || 5", semver@^5.0.1, semver@^5.3.0: 2325 | version "5.3.0" 2326 | resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f" 2327 | 2328 | semver@~4.3.3: 2329 | version "4.3.6" 2330 | resolved "https://registry.yarnpkg.com/semver/-/semver-4.3.6.tgz#300bc6e0e86374f7ba61068b5b1ecd57fc6532da" 2331 | 2332 | set-blocking@^2.0.0, set-blocking@~2.0.0: 2333 | version "2.0.0" 2334 | resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" 2335 | 2336 | set-immediate-shim@^1.0.1: 2337 | version "1.0.1" 2338 | resolved "https://registry.yarnpkg.com/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz#4b2b1b27eb808a9f8dcc481a58e5e56f599f3f61" 2339 | 2340 | setimmediate@^1.0.4: 2341 | version "1.0.5" 2342 | resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" 2343 | 2344 | setprototypeof@1.0.3: 2345 | version "1.0.3" 2346 | resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.0.3.tgz#66567e37043eeb4f04d91bd658c0cbefb55b8e04" 2347 | 2348 | sha.js@^2.3.6: 2349 | version "2.4.8" 2350 | resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.8.tgz#37068c2c476b6baf402d14a49c67f597921f634f" 2351 | dependencies: 2352 | inherits "^2.0.1" 2353 | 2354 | signal-exit@^3.0.0: 2355 | version "3.0.2" 2356 | resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" 2357 | 2358 | sntp@1.x.x: 2359 | version "1.0.9" 2360 | resolved "https://registry.yarnpkg.com/sntp/-/sntp-1.0.9.tgz#6541184cc90aeea6c6e7b35e2659082443c66198" 2361 | dependencies: 2362 | hoek "2.x.x" 2363 | 2364 | socket.io-adapter@0.5.0: 2365 | version "0.5.0" 2366 | resolved "https://registry.yarnpkg.com/socket.io-adapter/-/socket.io-adapter-0.5.0.tgz#cb6d4bb8bec81e1078b99677f9ced0046066bb8b" 2367 | dependencies: 2368 | debug "2.3.3" 2369 | socket.io-parser "2.3.1" 2370 | 2371 | socket.io-client@1.7.3: 2372 | version "1.7.3" 2373 | resolved "https://registry.yarnpkg.com/socket.io-client/-/socket.io-client-1.7.3.tgz#b30e86aa10d5ef3546601c09cde4765e381da377" 2374 | dependencies: 2375 | backo2 "1.0.2" 2376 | component-bind "1.0.0" 2377 | component-emitter "1.2.1" 2378 | debug "2.3.3" 2379 | engine.io-client "1.8.3" 2380 | has-binary "0.1.7" 2381 | indexof "0.0.1" 2382 | object-component "0.0.3" 2383 | parseuri "0.0.5" 2384 | socket.io-parser "2.3.1" 2385 | to-array "0.1.4" 2386 | 2387 | socket.io-parser@2.3.1: 2388 | version "2.3.1" 2389 | resolved "https://registry.yarnpkg.com/socket.io-parser/-/socket.io-parser-2.3.1.tgz#dd532025103ce429697326befd64005fcfe5b4a0" 2390 | dependencies: 2391 | component-emitter "1.1.2" 2392 | debug "2.2.0" 2393 | isarray "0.0.1" 2394 | json3 "3.3.2" 2395 | 2396 | socket.io@1.7.3: 2397 | version "1.7.3" 2398 | resolved "https://registry.yarnpkg.com/socket.io/-/socket.io-1.7.3.tgz#b8af9caba00949e568e369f1327ea9be9ea2461b" 2399 | dependencies: 2400 | debug "2.3.3" 2401 | engine.io "1.8.3" 2402 | has-binary "0.1.7" 2403 | object-assign "4.1.0" 2404 | socket.io-adapter "0.5.0" 2405 | socket.io-client "1.7.3" 2406 | socket.io-parser "2.3.1" 2407 | 2408 | source-list-map@^1.1.1: 2409 | version "1.1.1" 2410 | resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-1.1.1.tgz#1a33ac210ca144d1e561f906ebccab5669ff4cb4" 2411 | 2412 | source-map-support@^0.4.0, source-map-support@^0.4.11, source-map-support@^0.4.2: 2413 | version "0.4.14" 2414 | resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.14.tgz#9d4463772598b86271b4f523f6c1f4e02a7d6aef" 2415 | dependencies: 2416 | source-map "^0.5.6" 2417 | 2418 | source-map@0.1.34: 2419 | version "0.1.34" 2420 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.1.34.tgz#a7cfe89aec7b1682c3b198d0acfb47d7d090566b" 2421 | dependencies: 2422 | amdefine ">=0.0.4" 2423 | 2424 | source-map@^0.1.41: 2425 | version "0.1.43" 2426 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.1.43.tgz#c24bc146ca517c1471f5dacbe2571b2b7f9e3346" 2427 | dependencies: 2428 | amdefine ">=0.0.4" 2429 | 2430 | source-map@^0.4.4: 2431 | version "0.4.4" 2432 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.4.4.tgz#eba4f5da9c0dc999de68032d8b4f76173652036b" 2433 | dependencies: 2434 | amdefine ">=0.0.4" 2435 | 2436 | source-map@^0.5.1, source-map@^0.5.3, source-map@^0.5.6, source-map@~0.5.1, source-map@~0.5.3: 2437 | version "0.5.6" 2438 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.6.tgz#75ce38f52bf0733c5a7f0c118d81334a2bb5f412" 2439 | 2440 | source-map@~0.2.0: 2441 | version "0.2.0" 2442 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.2.0.tgz#dab73fbcfc2ba819b4de03bd6f6eaa48164b3f9d" 2443 | dependencies: 2444 | amdefine ">=0.0.4" 2445 | 2446 | spdx-correct@~1.0.0: 2447 | version "1.0.2" 2448 | resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-1.0.2.tgz#4b3073d933ff51f3912f03ac5519498a4150db40" 2449 | dependencies: 2450 | spdx-license-ids "^1.0.2" 2451 | 2452 | spdx-expression-parse@~1.0.0: 2453 | version "1.0.4" 2454 | resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz#9bdf2f20e1f40ed447fbe273266191fced51626c" 2455 | 2456 | spdx-license-ids@^1.0.2: 2457 | version "1.2.2" 2458 | resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz#c9df7a3424594ade6bd11900d596696dc06bac57" 2459 | 2460 | sprintf-js@^1.0.3, sprintf-js@~1.0.2: 2461 | version "1.0.3" 2462 | resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" 2463 | 2464 | sshpk@^1.7.0: 2465 | version "1.13.0" 2466 | resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.13.0.tgz#ff2a3e4fd04497555fed97b39a0fd82fafb3a33c" 2467 | dependencies: 2468 | asn1 "~0.2.3" 2469 | assert-plus "^1.0.0" 2470 | dashdash "^1.12.0" 2471 | getpass "^0.1.1" 2472 | optionalDependencies: 2473 | bcrypt-pbkdf "^1.0.0" 2474 | ecc-jsbn "~0.1.1" 2475 | jodid25519 "^1.0.0" 2476 | jsbn "~0.1.0" 2477 | tweetnacl "~0.14.0" 2478 | 2479 | "statuses@>= 1.3.1 < 2", statuses@~1.3.1: 2480 | version "1.3.1" 2481 | resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.3.1.tgz#faf51b9eb74aaef3b3acf4ad5f61abf24cb7b93e" 2482 | 2483 | stream-browserify@^2.0.1: 2484 | version "2.0.1" 2485 | resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.1.tgz#66266ee5f9bdb9940a4e4514cafb43bb71e5c9db" 2486 | dependencies: 2487 | inherits "~2.0.1" 2488 | readable-stream "^2.0.2" 2489 | 2490 | stream-http@^2.3.1: 2491 | version "2.7.0" 2492 | resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.7.0.tgz#cec1f4e3b494bc4a81b451808970f8b20b4ed5f6" 2493 | dependencies: 2494 | builtin-status-codes "^3.0.0" 2495 | inherits "^2.0.1" 2496 | readable-stream "^2.2.6" 2497 | to-arraybuffer "^1.0.0" 2498 | xtend "^4.0.0" 2499 | 2500 | string-width@^1.0.1, string-width@^1.0.2: 2501 | version "1.0.2" 2502 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" 2503 | dependencies: 2504 | code-point-at "^1.0.0" 2505 | is-fullwidth-code-point "^1.0.0" 2506 | strip-ansi "^3.0.0" 2507 | 2508 | string_decoder@^0.10.25, string_decoder@~0.10.x: 2509 | version "0.10.31" 2510 | resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" 2511 | 2512 | string_decoder@~1.0.0: 2513 | version "1.0.0" 2514 | resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.0.0.tgz#f06f41157b664d86069f84bdbdc9b0d8ab281667" 2515 | dependencies: 2516 | buffer-shims "~1.0.0" 2517 | 2518 | stringstream@~0.0.4: 2519 | version "0.0.5" 2520 | resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.5.tgz#4e484cd4de5a0bbbee18e46307710a8a81621878" 2521 | 2522 | strip-ansi@^3.0.0, strip-ansi@^3.0.1: 2523 | version "3.0.1" 2524 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" 2525 | dependencies: 2526 | ansi-regex "^2.0.0" 2527 | 2528 | strip-bom@^2.0.0: 2529 | version "2.0.0" 2530 | resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e" 2531 | dependencies: 2532 | is-utf8 "^0.2.0" 2533 | 2534 | strip-indent@^1.0.1: 2535 | version "1.0.1" 2536 | resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-1.0.1.tgz#0c7962a6adefa7bbd4ac366460a638552ae1a0a2" 2537 | dependencies: 2538 | get-stdin "^4.0.1" 2539 | 2540 | strip-json-comments@^1.0.2: 2541 | version "1.0.4" 2542 | resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-1.0.4.tgz#1e15fbcac97d3ee99bf2d73b4c656b082bbafb91" 2543 | 2544 | strip-json-comments@~2.0.1: 2545 | version "2.0.1" 2546 | resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" 2547 | 2548 | supports-color@^2.0.0: 2549 | version "2.0.0" 2550 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" 2551 | 2552 | supports-color@^3.1.0: 2553 | version "3.2.3" 2554 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.2.3.tgz#65ac0504b3954171d8a64946b2ae3cbb8a5f54f6" 2555 | dependencies: 2556 | has-flag "^1.0.0" 2557 | 2558 | symbol-observable@^1.0.1: 2559 | version "1.0.4" 2560 | resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.0.4.tgz#29bf615d4aa7121bdd898b22d4b3f9bc4e2aa03d" 2561 | 2562 | tapable@^0.1.8: 2563 | version "0.1.10" 2564 | resolved "https://registry.yarnpkg.com/tapable/-/tapable-0.1.10.tgz#29c35707c2b70e50d07482b5d202e8ed446dafd4" 2565 | 2566 | tapable@^0.2.5, tapable@~0.2.5: 2567 | version "0.2.6" 2568 | resolved "https://registry.yarnpkg.com/tapable/-/tapable-0.2.6.tgz#206be8e188860b514425375e6f1ae89bfb01fd8d" 2569 | 2570 | tar-pack@^3.4.0: 2571 | version "3.4.0" 2572 | resolved "https://registry.yarnpkg.com/tar-pack/-/tar-pack-3.4.0.tgz#23be2d7f671a8339376cbdb0b8fe3fdebf317984" 2573 | dependencies: 2574 | debug "^2.2.0" 2575 | fstream "^1.0.10" 2576 | fstream-ignore "^1.0.5" 2577 | once "^1.3.3" 2578 | readable-stream "^2.1.4" 2579 | rimraf "^2.5.1" 2580 | tar "^2.2.1" 2581 | uid-number "^0.0.6" 2582 | 2583 | tar@^2.2.1: 2584 | version "2.2.1" 2585 | resolved "https://registry.yarnpkg.com/tar/-/tar-2.2.1.tgz#8e4d2a256c0e2185c6b18ad694aec968b83cb1d1" 2586 | dependencies: 2587 | block-stream "*" 2588 | fstream "^1.0.2" 2589 | inherits "2" 2590 | 2591 | timers-browserify@^2.0.2: 2592 | version "2.0.2" 2593 | resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.2.tgz#ab4883cf597dcd50af211349a00fbca56ac86b86" 2594 | dependencies: 2595 | setimmediate "^1.0.4" 2596 | 2597 | tmp@0.0.31, tmp@0.0.x: 2598 | version "0.0.31" 2599 | resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.31.tgz#8f38ab9438e17315e5dbd8b3657e8bfb277ae4a7" 2600 | dependencies: 2601 | os-tmpdir "~1.0.1" 2602 | 2603 | to-array@0.1.4: 2604 | version "0.1.4" 2605 | resolved "https://registry.yarnpkg.com/to-array/-/to-array-0.1.4.tgz#17e6c11f73dd4f3d74cda7a4ff3238e9ad9bf890" 2606 | 2607 | to-arraybuffer@^1.0.0: 2608 | version "1.0.1" 2609 | resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43" 2610 | 2611 | tough-cookie@~2.3.0: 2612 | version "2.3.2" 2613 | resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.2.tgz#f081f76e4c85720e6c37a5faced737150d84072a" 2614 | dependencies: 2615 | punycode "^1.4.1" 2616 | 2617 | trim-newlines@^1.0.0: 2618 | version "1.0.0" 2619 | resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613" 2620 | 2621 | ts-loader@^0.8.2: 2622 | version "0.8.2" 2623 | resolved "https://registry.yarnpkg.com/ts-loader/-/ts-loader-0.8.2.tgz#7331296d13d5b3105cd905cebca39143eed2b255" 2624 | dependencies: 2625 | arrify "^1.0.0" 2626 | colors "^1.0.3" 2627 | enhanced-resolve "^0.9.0" 2628 | loader-utils "^0.2.6" 2629 | object-assign "^2.0.0" 2630 | semver "^5.0.1" 2631 | 2632 | tsickle@^0.2: 2633 | version "0.2.6" 2634 | resolved "https://registry.yarnpkg.com/tsickle/-/tsickle-0.2.6.tgz#ad4abf92e74ebdf3fb5aa187ca85b02066fe1a1b" 2635 | dependencies: 2636 | minimist "^1.2.0" 2637 | mkdirp "^0.5.1" 2638 | source-map "^0.5.6" 2639 | source-map-support "^0.4.2" 2640 | 2641 | tslint-loader@^2.1.5: 2642 | version "2.1.5" 2643 | resolved "https://registry.yarnpkg.com/tslint-loader/-/tslint-loader-2.1.5.tgz#77abdfd9bf13d7133a6efa4447a1690783c4bb49" 2644 | dependencies: 2645 | loader-utils "^0.2.7" 2646 | mkdirp "^0.5.1" 2647 | object-assign "^4.0.1" 2648 | rimraf "^2.4.4" 2649 | strip-json-comments "^1.0.2" 2650 | 2651 | tslint@^3.15.1: 2652 | version "3.15.1" 2653 | resolved "https://registry.yarnpkg.com/tslint/-/tslint-3.15.1.tgz#da165ca93d8fdc2c086b51165ee1bacb48c98ea5" 2654 | dependencies: 2655 | colors "^1.1.2" 2656 | diff "^2.2.1" 2657 | findup-sync "~0.3.0" 2658 | glob "^7.0.3" 2659 | optimist "~0.6.0" 2660 | resolve "^1.1.7" 2661 | underscore.string "^3.3.4" 2662 | 2663 | tty-browserify@0.0.0: 2664 | version "0.0.0" 2665 | resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6" 2666 | 2667 | tunnel-agent@^0.6.0: 2668 | version "0.6.0" 2669 | resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" 2670 | dependencies: 2671 | safe-buffer "^5.0.1" 2672 | 2673 | tweetnacl@^0.14.3, tweetnacl@~0.14.0: 2674 | version "0.14.5" 2675 | resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" 2676 | 2677 | type-check@~0.3.2: 2678 | version "0.3.2" 2679 | resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" 2680 | dependencies: 2681 | prelude-ls "~1.1.2" 2682 | 2683 | type-is@~1.6.14: 2684 | version "1.6.15" 2685 | resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.15.tgz#cab10fb4909e441c82842eafe1ad646c81804410" 2686 | dependencies: 2687 | media-typer "0.3.0" 2688 | mime-types "~2.1.15" 2689 | 2690 | typescript@^2.4.1: 2691 | version "2.4.1" 2692 | resolved "https://registry.yarnpkg.com/typescript/-/typescript-2.4.1.tgz#c3ccb16ddaa0b2314de031e7e6fee89e5ba346bc" 2693 | 2694 | uglify-js@^2.6, uglify-js@^2.8.5: 2695 | version "2.8.22" 2696 | resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.8.22.tgz#d54934778a8da14903fa29a326fb24c0ab51a1a0" 2697 | dependencies: 2698 | source-map "~0.5.1" 2699 | yargs "~3.10.0" 2700 | optionalDependencies: 2701 | uglify-to-browserify "~1.0.0" 2702 | 2703 | uglify-to-browserify@~1.0.0: 2704 | version "1.0.2" 2705 | resolved "https://registry.yarnpkg.com/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz#6e0924d6bda6b5afe349e39a6d632850a0f882b7" 2706 | 2707 | uglifyjs@^2.4.10: 2708 | version "2.4.10" 2709 | resolved "https://registry.yarnpkg.com/uglifyjs/-/uglifyjs-2.4.10.tgz#632927319fa6a3da3fc91f9773ac27bfe6c3ee92" 2710 | dependencies: 2711 | async "~0.2.6" 2712 | source-map "0.1.34" 2713 | uglify-to-browserify "~1.0.0" 2714 | yargs "~1.3.3" 2715 | 2716 | uid-number@^0.0.6: 2717 | version "0.0.6" 2718 | resolved "https://registry.yarnpkg.com/uid-number/-/uid-number-0.0.6.tgz#0ea10e8035e8eb5b8e4449f06da1c730663baa81" 2719 | 2720 | ultron@1.0.x: 2721 | version "1.0.2" 2722 | resolved "https://registry.yarnpkg.com/ultron/-/ultron-1.0.2.tgz#ace116ab557cd197386a4e88f4685378c8b2e4fa" 2723 | 2724 | underscore.string@^3.3.4: 2725 | version "3.3.4" 2726 | resolved "https://registry.yarnpkg.com/underscore.string/-/underscore.string-3.3.4.tgz#2c2a3f9f83e64762fdc45e6ceac65142864213db" 2727 | dependencies: 2728 | sprintf-js "^1.0.3" 2729 | util-deprecate "^1.0.2" 2730 | 2731 | unpipe@1.0.0, unpipe@~1.0.0: 2732 | version "1.0.0" 2733 | resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" 2734 | 2735 | url@^0.11.0: 2736 | version "0.11.0" 2737 | resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1" 2738 | dependencies: 2739 | punycode "1.3.2" 2740 | querystring "0.2.0" 2741 | 2742 | useragent@^2.1.12: 2743 | version "2.1.13" 2744 | resolved "https://registry.yarnpkg.com/useragent/-/useragent-2.1.13.tgz#bba43e8aa24d5ceb83c2937473e102e21df74c10" 2745 | dependencies: 2746 | lru-cache "2.2.x" 2747 | tmp "0.0.x" 2748 | 2749 | util-deprecate@^1.0.2, util-deprecate@~1.0.1: 2750 | version "1.0.2" 2751 | resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" 2752 | 2753 | util@0.10.3, util@^0.10.3: 2754 | version "0.10.3" 2755 | resolved "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9" 2756 | dependencies: 2757 | inherits "2.0.1" 2758 | 2759 | utils-merge@1.0.0: 2760 | version "1.0.0" 2761 | resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.0.tgz#0294fb922bb9375153541c4f7096231f287c8af8" 2762 | 2763 | uuid@^3.0.0: 2764 | version "3.0.1" 2765 | resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.0.1.tgz#6544bba2dfda8c1cf17e629a3a305e2bb1fee6c1" 2766 | 2767 | validate-npm-package-license@^3.0.1: 2768 | version "3.0.1" 2769 | resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz#2804babe712ad3379459acfbe24746ab2c303fbc" 2770 | dependencies: 2771 | spdx-correct "~1.0.0" 2772 | spdx-expression-parse "~1.0.0" 2773 | 2774 | verror@1.3.6: 2775 | version "1.3.6" 2776 | resolved "https://registry.yarnpkg.com/verror/-/verror-1.3.6.tgz#cff5df12946d297d2baaefaa2689e25be01c005c" 2777 | dependencies: 2778 | extsprintf "1.0.2" 2779 | 2780 | vm-browserify@0.0.4: 2781 | version "0.0.4" 2782 | resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-0.0.4.tgz#5d7ea45bbef9e4a6ff65f95438e0a87c357d5a73" 2783 | dependencies: 2784 | indexof "0.0.1" 2785 | 2786 | void-elements@^2.0.0: 2787 | version "2.0.1" 2788 | resolved "https://registry.yarnpkg.com/void-elements/-/void-elements-2.0.1.tgz#c066afb582bb1cb4128d60ea92392e94d5e9dbec" 2789 | 2790 | watchpack@^1.3.1: 2791 | version "1.3.1" 2792 | resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.3.1.tgz#7d8693907b28ce6013e7f3610aa2a1acf07dad87" 2793 | dependencies: 2794 | async "^2.1.2" 2795 | chokidar "^1.4.3" 2796 | graceful-fs "^4.1.2" 2797 | 2798 | webpack-dev-middleware@^1.0.11: 2799 | version "1.10.1" 2800 | resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-1.10.1.tgz#c6b4cf428139cf1aefbe06a0c00fdb4f8da2f893" 2801 | dependencies: 2802 | memory-fs "~0.4.1" 2803 | mime "^1.3.4" 2804 | path-is-absolute "^1.0.0" 2805 | range-parser "^1.0.3" 2806 | 2807 | webpack-sources@^0.2.3: 2808 | version "0.2.3" 2809 | resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-0.2.3.tgz#17c62bfaf13c707f9d02c479e0dcdde8380697fb" 2810 | dependencies: 2811 | source-list-map "^1.1.1" 2812 | source-map "~0.5.3" 2813 | 2814 | webpack@^2.1.0-beta.21: 2815 | version "2.4.1" 2816 | resolved "https://registry.yarnpkg.com/webpack/-/webpack-2.4.1.tgz#15a91dbe34966d8a4b99c7d656efd92a2e5a6f6a" 2817 | dependencies: 2818 | acorn "^5.0.0" 2819 | acorn-dynamic-import "^2.0.0" 2820 | ajv "^4.7.0" 2821 | ajv-keywords "^1.1.1" 2822 | async "^2.1.2" 2823 | enhanced-resolve "^3.0.0" 2824 | interpret "^1.0.0" 2825 | json-loader "^0.5.4" 2826 | json5 "^0.5.1" 2827 | loader-runner "^2.3.0" 2828 | loader-utils "^0.2.16" 2829 | memory-fs "~0.4.1" 2830 | mkdirp "~0.5.0" 2831 | node-libs-browser "^2.0.0" 2832 | source-map "^0.5.3" 2833 | supports-color "^3.1.0" 2834 | tapable "~0.2.5" 2835 | uglify-js "^2.8.5" 2836 | watchpack "^1.3.1" 2837 | webpack-sources "^0.2.3" 2838 | yargs "^6.0.0" 2839 | 2840 | which-module@^1.0.0: 2841 | version "1.0.0" 2842 | resolved "https://registry.yarnpkg.com/which-module/-/which-module-1.0.0.tgz#bba63ca861948994ff307736089e3b96026c2a4f" 2843 | 2844 | which@^1.1.1, which@^1.2.1: 2845 | version "1.2.14" 2846 | resolved "https://registry.yarnpkg.com/which/-/which-1.2.14.tgz#9a87c4378f03e827cecaf1acdf56c736c01c14e5" 2847 | dependencies: 2848 | isexe "^2.0.0" 2849 | 2850 | wide-align@^1.1.0: 2851 | version "1.1.0" 2852 | resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.0.tgz#40edde802a71fea1f070da3e62dcda2e7add96ad" 2853 | dependencies: 2854 | string-width "^1.0.1" 2855 | 2856 | window-size@0.1.0: 2857 | version "0.1.0" 2858 | resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.0.tgz#5438cd2ea93b202efa3a19fe8887aee7c94f9c9d" 2859 | 2860 | wordwrap@0.0.2: 2861 | version "0.0.2" 2862 | resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.2.tgz#b79669bb42ecb409f83d583cad52ca17eaa1643f" 2863 | 2864 | wordwrap@^1.0.0, wordwrap@~1.0.0: 2865 | version "1.0.0" 2866 | resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" 2867 | 2868 | wordwrap@~0.0.2: 2869 | version "0.0.3" 2870 | resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107" 2871 | 2872 | wrap-ansi@^2.0.0: 2873 | version "2.1.0" 2874 | resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85" 2875 | dependencies: 2876 | string-width "^1.0.1" 2877 | strip-ansi "^3.0.1" 2878 | 2879 | wrappy@1: 2880 | version "1.0.2" 2881 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" 2882 | 2883 | ws@1.1.2: 2884 | version "1.1.2" 2885 | resolved "https://registry.yarnpkg.com/ws/-/ws-1.1.2.tgz#8a244fa052401e08c9886cf44a85189e1fd4067f" 2886 | dependencies: 2887 | options ">=0.0.5" 2888 | ultron "1.0.x" 2889 | 2890 | wtf-8@1.0.0: 2891 | version "1.0.0" 2892 | resolved "https://registry.yarnpkg.com/wtf-8/-/wtf-8-1.0.0.tgz#392d8ba2d0f1c34d1ee2d630f15d0efb68e1048a" 2893 | 2894 | xmlhttprequest-ssl@1.5.3: 2895 | version "1.5.3" 2896 | resolved "https://registry.yarnpkg.com/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.3.tgz#185a888c04eca46c3e4070d99f7b49de3528992d" 2897 | 2898 | xtend@^4.0.0: 2899 | version "4.0.1" 2900 | resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af" 2901 | 2902 | y18n@^3.2.1: 2903 | version "3.2.1" 2904 | resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41" 2905 | 2906 | yargs-parser@^4.2.0: 2907 | version "4.2.1" 2908 | resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-4.2.1.tgz#29cceac0dc4f03c6c87b4a9f217dd18c9f74871c" 2909 | dependencies: 2910 | camelcase "^3.0.0" 2911 | 2912 | yargs@^6.0.0: 2913 | version "6.6.0" 2914 | resolved "https://registry.yarnpkg.com/yargs/-/yargs-6.6.0.tgz#782ec21ef403345f830a808ca3d513af56065208" 2915 | dependencies: 2916 | camelcase "^3.0.0" 2917 | cliui "^3.2.0" 2918 | decamelize "^1.1.1" 2919 | get-caller-file "^1.0.1" 2920 | os-locale "^1.4.0" 2921 | read-pkg-up "^1.0.1" 2922 | require-directory "^2.1.1" 2923 | require-main-filename "^1.0.1" 2924 | set-blocking "^2.0.0" 2925 | string-width "^1.0.2" 2926 | which-module "^1.0.0" 2927 | y18n "^3.2.1" 2928 | yargs-parser "^4.2.0" 2929 | 2930 | yargs@~1.3.3: 2931 | version "1.3.3" 2932 | resolved "https://registry.yarnpkg.com/yargs/-/yargs-1.3.3.tgz#054de8b61f22eefdb7207059eaef9d6b83fb931a" 2933 | 2934 | yargs@~3.10.0: 2935 | version "3.10.0" 2936 | resolved "https://registry.yarnpkg.com/yargs/-/yargs-3.10.0.tgz#f7ee7bd857dd7c1d2d38c0e74efbd681d1431fd1" 2937 | dependencies: 2938 | camelcase "^1.0.2" 2939 | cliui "^2.1.0" 2940 | decamelize "^1.0.0" 2941 | window-size "0.1.0" 2942 | 2943 | yeast@0.1.2: 2944 | version "0.1.2" 2945 | resolved "https://registry.yarnpkg.com/yeast/-/yeast-0.1.2.tgz#008e06d8094320c372dbc2f8ed76a0ca6c8ac419" 2946 | 2947 | zone.js@^0.7.2: 2948 | version "0.7.8" 2949 | resolved "https://registry.yarnpkg.com/zone.js/-/zone.js-0.7.8.tgz#4f3fe8834d44597f2639053a0fa438df34fffded" 2950 | --------------------------------------------------------------------------------