├── .editorconfig ├── .gitignore ├── .npmignore ├── LICENSE.txt ├── README.md ├── package.json ├── src ├── RxFirebase.ts ├── auth │ ├── auth.ts │ └── index.ts ├── database │ ├── database.ts │ ├── index.ts │ └── ref.ts ├── index.ts └── storage │ ├── index.ts │ └── storage.ts ├── tools ├── add-license-to-file.js ├── make-closure-core.js ├── make-packages.js └── make-umd-bundle.js ├── tsconfig.cjs.json ├── tsconfig.es6.json ├── tsconfig.umd.json ├── tslint.json └── yarn.lock /.editorconfig: -------------------------------------------------------------------------------- 1 | # http://editorconfig.org 2 | root = true 3 | 4 | [*] 5 | indent_style = space 6 | indent_size = 2 7 | charset = utf-8 8 | trim_trailing_whitespace = true 9 | insert_final_newline = true 10 | 11 | [*.md] 12 | trim_trailing_whitespace = false 13 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | ### IDE ### 2 | .idea/ 3 | .vscode/ 4 | *.sublime-project 5 | *.sublime-workspace 6 | .settings 7 | 8 | 9 | ### Build files ### 10 | dist/ 11 | 12 | 13 | ### Node ### 14 | # Logs 15 | logs/ 16 | *.log* 17 | 18 | # Runtime data 19 | pids/ 20 | *.pid 21 | *.seed 22 | *.pid.lock 23 | 24 | # Dependency directories 25 | node_modules/ 26 | typings/ 27 | 28 | # Optional npm cache directory 29 | .npm 30 | 31 | # Yarn Integrity file 32 | .yarn-integrity 33 | 34 | 35 | ### Other ### 36 | .DS_Store 37 | -------------------------------------------------------------------------------- /.npmignore: -------------------------------------------------------------------------------- 1 | *.spec.* 2 | yarn.lock 3 | -------------------------------------------------------------------------------- /LICENSE.txt: -------------------------------------------------------------------------------- 1 | Copyright 2016 Josep Sayol 2 | 3 | Licensed under the Apache License, Version 2.0 (the "License"); 4 | you may not use this file except in compliance with the License. 5 | You may obtain a copy of the License at 6 | 7 | http://www.apache.org/licenses/LICENSE-2.0 8 | 9 | Unless required by applicable law or agreed to in writing, software 10 | distributed under the License is distributed on an "AS IS" BASIS, 11 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | See the License for the specific language governing permissions and 13 | limitations under the License. 14 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # RxFirebase 2 | [![npm version](https://badge.fury.io/js/rxfirebase.svg)](https://www.npmjs.com/package/rxfirebase) 3 | 4 | [Apache 2.0 License](LICENSE.txt) 5 | 6 | RxJS wrapper with extra goodies for the Firebase JavaScript SDK. 7 | 8 | ## Installation 9 | 10 | Via npm 11 | ``` 12 | npm install rxjs firebase rxfirebase --save 13 | ``` 14 | 15 | Via yarn 16 | ``` 17 | yarn add rxjs firebase rxfirebase 18 | ``` 19 | 20 | ## Usage 21 | 22 | ### ES6 and TypeScript 23 | ```ts 24 | import { RxFirebase } from 'rxfirebase'; 25 | 26 | const firebaseConfig = { 27 | apiKey: "...", 28 | authDomain: "...", 29 | databaseURL: "...", 30 | messagingSenderId: "...", 31 | storageBucket: "...", 32 | }; 33 | 34 | RxFirebase.initializeApp(firebaseConfig); 35 | 36 | const items$ = RxFirebase.database.ref('/items').onChildAdded(); 37 | 38 | items$.subscribe(snapshot => { 39 | console.log(`Child added with key ${snapshot.key} and value ${snapshot.val()}`); 40 | }); 41 | 42 | const secretItems$ = RxFirebase.database.ref('/super/secret/items') 43 | .afterSignIn() 44 | .untilSignOut() 45 | .getValue() 46 | .onChildRemoved(); 47 | 48 | secretItems$.subscribe(item => { 49 | // Using getValue() emits the value itself instead of the snapshot. 50 | // It's equivalent to calling snapshot.val() 51 | console.log(`Child removed with value ${item}`); 52 | }); 53 | 54 | const userPostsOnSignIn$ = RxFirebase.auth.onSignIn$.switchMap(auth => 55 | RxFirebase.database.ref(`/userPosts/${auth.uid}`) 56 | .asList() 57 | .untilSignOut() 58 | .once('value') 59 | ); 60 | 61 | userPostsOnSignIn$.subscribe(posts => { 62 | console.log(`This user has ${posts.length} posts.`); 63 | if (posts.length > 0) { 64 | // Using asList() emits the data as an Array with the key for each item stored as item.$key 65 | // If the value is an Object then "item" is the value itself, otherwise 66 | // it is stored in item.$value (for strings, numbers, and booleans) 67 | const post = posts[0]; 68 | console.log(`The title for the first post, with key ${post.$key}, is "${post.title}"`); 69 | } 70 | }); 71 | 72 | RxFirebase.auth.isSignedIn$.subscribe(isSignedIn => { 73 | console.log(`The user is ${isSignedIn ? '' : 'NOT '}signed in.`); 74 | }); 75 | 76 | setTimeout(() => { 77 | console.log('Signing in...'); 78 | RxFirebase.auth.signInAnonymously(); 79 | }, 2000); 80 | 81 | setTimeout(() => { 82 | console.log('Signing out...'); 83 | RxFirebase.auth.signOut(); 84 | }, 10000); 85 | ``` 86 | 87 | ### UMD (CommonJS, AMD) 88 | 89 | Coming soon 90 | 91 | 92 | ## TO-DO 93 | - [ ] **Add tests** 94 | - [x] Auth support 95 | - [x] Database support 96 | - [ ] Storage support 97 | - [ ] Messaging support 98 | - [ ] Fix building of UMD module (CommonJS, AMD) 99 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@jsayol/rxfirebase", 3 | "version": "0.0.1-alpha.2", 4 | "description": "RxJS wrapper with extra goodies for the Firebase JavaScript SDK", 5 | "author": "Josep Sayol", 6 | "license": "Apache-2.0", 7 | "repository": { 8 | "type": "git", 9 | "url": "git@github.com:jsayol/rxfirebase.git" 10 | }, 11 | "bugs": { 12 | "url": "https://github.com/jsayol/rxfirebase/issues" 13 | }, 14 | "homepage": "https://github.com/jsayol/rxfirebase#readme", 15 | "keywords": [ 16 | "rxjs", 17 | "firebase", 18 | "observable", 19 | "reactive" 20 | ], 21 | "files": [ 22 | "build" 23 | ], 24 | "main": "dist/cjs/RxFirebase.js", 25 | "typings": "dist/cjs/RxFirebase.d.ts", 26 | "scripts": { 27 | "build_all": "npm-run-all lint_src build_cjs build_global generate_packages", 28 | "build_cjs": "npm-run-all clean_dist_cjs copy_src_cjs compile_dist_cjs", 29 | "build_es6": "npm-run-all clean_dist_es6 copy_src_es6 compile_module_es6", 30 | "build_global": "npm-run-all clean_dist_global build_es6 && mkdirp ./dist/global && npm-run-all make_umd_bundle make_closure_core", 31 | "clean_dist_cjs": "shx rm -rf ./dist/cjs", 32 | "clean_dist_es6": "shx rm -rf ./dist/es6", 33 | "clean_dist_global": "shx rm -rf ./dist/global", 34 | "copy_src_cjs": "mkdirp ./dist/cjs/src && shx cp -r ./src/* ./dist/cjs/src", 35 | "copy_src_es6": "mkdirp ./dist/es6/src && shx cp -r ./src/* ./dist/es6/src", 36 | "compile_dist_cjs": "tsc -p ./tsconfig.cjs.json", 37 | "compile_module_es6": "tsc -p ./tsconfig.es6.json", 38 | "make_umd_bundle": "node ./tools/make-umd-bundle.js", 39 | "make_closure_core": "node ./tools/make-closure-core.js", 40 | "generate_packages": "node ./tools/make-packages.js", 41 | "lint_src": "tslint --force --format verbose \"src/**/*.ts\"" 42 | }, 43 | "dependencies": { 44 | "firebase": "^3.6.4", 45 | "rxjs": "^5.0.0" 46 | }, 47 | "devDependencies": { 48 | "@types/node": "6.0.52", 49 | "google-closure-compiler-js": "^20161201.0.0", 50 | "minimist": "^1.2.0", 51 | "mkdirp": "^0.5.1", 52 | "npm-run-all": "^3.1.2", 53 | "rollup": "^0.37.0", 54 | "rollup-plugin-commonjs": "^6.0.0", 55 | "rollup-plugin-node-resolve": "^2.0.0", 56 | "shx": "^0.2.1", 57 | "ts-node": "^1.2.2", 58 | "tslib": "^1.2.0", 59 | "tslint": "4.1.1", 60 | "typescript": "2.1.4" 61 | }, 62 | "engines": { 63 | "node": ">=4.3.2" 64 | } 65 | } 66 | -------------------------------------------------------------------------------- /src/RxFirebase.ts: -------------------------------------------------------------------------------- 1 | import * as firebase from 'firebase'; 2 | 3 | import { RxFirebaseAuth, RxFirebaseUser } from './auth'; 4 | 5 | import { 6 | RxFirebaseDatabase, 7 | RxFirebaseDatabaseRef, 8 | RxFirebaseDatabaseRefOnDisconnect, 9 | RxFirebaseDataSnapshot, 10 | } from './database'; 11 | 12 | import { RxFirebaseStorage } from './storage'; 13 | 14 | export class RxFirebase { 15 | private static internalDefault: RxFirebase; 16 | 17 | public readonly app: firebase.app.App; 18 | public readonly auth: RxFirebaseAuth; 19 | public readonly database: RxFirebaseDatabase; 20 | public readonly storage: RxFirebaseStorage; 21 | 22 | constructor(options: Object, name?: string) { 23 | this.app = firebase.initializeApp(options, name); 24 | this.auth = new RxFirebaseAuth(this.app); 25 | this.database = new RxFirebaseDatabase(this); 26 | this.storage = new RxFirebaseStorage(this.app); 27 | } 28 | 29 | public static get auth(): RxFirebaseAuth { 30 | RxFirebase.ensureDefaultInitialized(); 31 | return RxFirebase.internalDefault.auth; 32 | } 33 | 34 | public static get database(): RxFirebaseDatabase { 35 | RxFirebase.ensureDefaultInitialized(); 36 | return RxFirebase.internalDefault.database; 37 | } 38 | 39 | public static get storage(): RxFirebaseStorage { 40 | RxFirebase.ensureDefaultInitialized(); 41 | return RxFirebase.internalDefault.storage; 42 | } 43 | 44 | public static get name(): string { 45 | RxFirebase.ensureDefaultInitialized(); 46 | return RxFirebase.internalDefault.app.name; 47 | } 48 | 49 | public static get options(): Object { 50 | RxFirebase.ensureDefaultInitialized(); 51 | return RxFirebase.internalDefault.app.options; 52 | } 53 | 54 | public static initializeApp(options: Object, name?: string): RxFirebase { 55 | if ((name === undefined) || (name === '[DEFAULT]')) { 56 | RxFirebase.internalDefault = new RxFirebase(options); 57 | return RxFirebase.internalDefault; 58 | } else { 59 | return new RxFirebase(options, name); 60 | } 61 | } 62 | 63 | private static ensureDefaultInitialized() { 64 | if (!RxFirebase.internalDefault) { 65 | throw new Error("RxFirebase hasn't been initialized yet. Call RxFirebase.initializeApp()"); 66 | } 67 | } 68 | 69 | public get name(): string { 70 | return this.app.name; 71 | } 72 | 73 | public get options(): Object { 74 | return this.app.options; 75 | } 76 | } 77 | 78 | export { 79 | firebase, 80 | RxFirebaseAuth, 81 | RxFirebaseDatabase, 82 | RxFirebaseDatabaseRef, 83 | RxFirebaseDatabaseRefOnDisconnect, 84 | RxFirebaseDataSnapshot, 85 | RxFirebaseStorage, 86 | RxFirebaseUser 87 | }; 88 | -------------------------------------------------------------------------------- /src/auth/auth.ts: -------------------------------------------------------------------------------- 1 | import * as firebase from 'firebase'; 2 | 3 | import { Observable, Scheduler, Subscriber } from 'rxjs'; 4 | 5 | export interface RxFirebaseUser extends firebase.User { 6 | } 7 | 8 | export class RxFirebaseAuth { 9 | public readonly onAuthStateChanged$: Observable; 10 | public readonly onSignIn$: Observable; 11 | public readonly onSignOut$: Observable; 12 | public readonly isSignedIn$: Observable; 13 | 14 | private readonly sdk: firebase.auth.Auth; 15 | private readonly initiallySingedOut$: Observable; 16 | private onAuthStateChanged$complete: () => any; 17 | private currentAuth: RxFirebaseUser; 18 | 19 | constructor(public readonly app: firebase.app.App) { 20 | this.sdk = firebase.auth(this.app); 21 | 22 | this.onAuthStateChanged$ = new Observable((subscriber: Subscriber) => { 23 | this.onAuthStateChanged$complete = this.sdk.onAuthStateChanged((auth: RxFirebaseUser) => subscriber.next(auth)); 24 | }) 25 | .share() 26 | .observeOn(Scheduler.asap); 27 | 28 | this.onSignIn$ = this.onAuthStateChanged$ 29 | .filter((auth: RxFirebaseUser) => !!auth) 30 | .do((auth: RxFirebaseUser) => this.currentAuth = auth) 31 | .share() 32 | .observeOn(Scheduler.asap); 33 | 34 | const [signOut$, initiallySingedOut$]: Array> = this.onAuthStateChanged$ 35 | .partition((auth: RxFirebaseUser) => !auth && !!this.currentAuth); 36 | 37 | this.onSignOut$ = signOut$ 38 | .map((auth: RxFirebaseUser) => { 39 | const currentAuth = this.currentAuth; 40 | this.currentAuth = auth; 41 | return currentAuth; 42 | }) 43 | .share() 44 | .observeOn(Scheduler.asap); 45 | 46 | this.initiallySingedOut$ = initiallySingedOut$ 47 | .do((auth: RxFirebaseUser) => this.currentAuth = auth); 48 | 49 | this.isSignedIn$ = this.initiallySingedOut$ 50 | .merge(this.onSignIn$) 51 | .merge(this.onSignOut$) 52 | .map(() => !!this.currentAuth) 53 | .publishBehavior(void 0) 54 | .refCount() 55 | .filter((isSignedIn: boolean) => isSignedIn !== undefined) 56 | .distinctUntilChanged(); 57 | } 58 | 59 | public get currentUser(): RxFirebaseUser { 60 | return this.currentAuth; 61 | } 62 | 63 | public createCustomToken(uid: string, developerClaims?: Object|null): string { 64 | return this.sdk.createCustomToken(uid, developerClaims); 65 | } 66 | 67 | public applyActionCode(code: string): Promise { 68 | return > this.sdk.applyActionCode(code); 69 | } 70 | 71 | public checkActionCode(code: string): Promise { 72 | return > this.sdk.checkActionCode(code); 73 | } 74 | 75 | public confirmPasswordReset(code: string, newPassword: string): Promise { 76 | return > this.sdk.confirmPasswordReset(code, newPassword); 77 | } 78 | 79 | public createUserWithEmailAndPassword(email: string, password: string): Promise { 80 | return > this.sdk.createUserWithEmailAndPassword(email, password); 81 | } 82 | 83 | public fetchProvidersForEmail(email: string): Promise { 84 | return > this.sdk.fetchProvidersForEmail(email); 85 | } 86 | 87 | public getRedirectResult(): Promise { 88 | return > this.sdk.getRedirectResult(); 89 | } 90 | 91 | public sendPasswordResetEmail(email: string): Promise { 92 | return > this.sdk.sendPasswordResetEmail(email); 93 | } 94 | 95 | public signInAnonymously(): Promise { 96 | return > this.sdk.signInAnonymously(); 97 | } 98 | 99 | public signInWithCredential(credential: firebase.auth.AuthCredential): Promise { 100 | return > this.sdk.signInWithCredential(credential); 101 | } 102 | 103 | public signInWithCustomToken(token: string): Promise { 104 | return > this.sdk.signInWithCustomToken(token); 105 | } 106 | 107 | public signInWithEmailAndPassword(email: string, password: string): Promise { 108 | return > this.sdk.signInWithEmailAndPassword(email, password); 109 | } 110 | 111 | public signInWithPopup(provider: firebase.auth.AuthProvider): Promise { 112 | return > this.sdk.signInWithPopup(provider); 113 | } 114 | 115 | public signInWithRedirect(provider: firebase.auth.AuthProvider): Promise { 116 | return > this.sdk.signInWithRedirect(provider); 117 | } 118 | 119 | public signOut(): Promise { 120 | return > this.sdk.signOut(); 121 | } 122 | 123 | public verifyIdToken(idToken: string): Promise { 124 | return > this.sdk.verifyIdToken(idToken); 125 | } 126 | 127 | public verifyPasswordResetCode(code: string): Promise { 128 | return > this.sdk.verifyPasswordResetCode(code); 129 | } 130 | 131 | } 132 | -------------------------------------------------------------------------------- /src/auth/index.ts: -------------------------------------------------------------------------------- 1 | export * from './auth'; 2 | -------------------------------------------------------------------------------- /src/database/database.ts: -------------------------------------------------------------------------------- 1 | import * as firebase from 'firebase'; 2 | import { RxFirebase } from '../RxFirebase'; 3 | import { RxFirebaseDatabaseRef } from './ref'; 4 | 5 | export class RxFirebaseDatabase { 6 | public static ServerValue = firebase.database.ServerValue; 7 | 8 | public readonly sdk: firebase.database.Database; 9 | 10 | constructor(public readonly rxfb: RxFirebase) { 11 | this.sdk = firebase.database(this.rxfb.app); 12 | } 13 | 14 | public static enableLogging(enabled?: boolean, persistent?: boolean): void { 15 | firebase.database.enableLogging(enabled, persistent); 16 | } 17 | 18 | public ref(path?: string): RxFirebaseDatabaseRef { 19 | return new RxFirebaseDatabaseRef(this, {path}); 20 | } 21 | 22 | public refFromURL(url: string): RxFirebaseDatabaseRef { 23 | return new RxFirebaseDatabaseRef(this, {url}); 24 | } 25 | 26 | public goOffline(): void { 27 | this.sdk.goOffline(); 28 | } 29 | 30 | public goOnline(): void { 31 | this.sdk.goOnline(); 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /src/database/index.ts: -------------------------------------------------------------------------------- 1 | export * from './database'; 2 | export * from './ref'; 3 | -------------------------------------------------------------------------------- /src/database/ref.ts: -------------------------------------------------------------------------------- 1 | import * as firebase from 'firebase'; 2 | import { Observable, Subscriber } from 'rxjs'; 3 | import { RxFirebase } from '../RxFirebase'; 4 | import { RxFirebaseDatabase } from './database'; 5 | 6 | export class RxFirebaseDatabaseRef { 7 | protected ref: firebase.database.Reference; 8 | private filters: {[filter: string]: boolean} = {'_getSnapshot': true}; 9 | private callback: (snapshot: RxFirebaseDataSnapshot|null, prevChildKey?: string) => any; 10 | 11 | constructor(public readonly db: RxFirebaseDatabase, 12 | from: {path?: string, url?: string, ref?: firebase.database.Reference}) { 13 | 14 | if (from.url) { 15 | this.ref = this.db.sdk.refFromURL(from.url); 16 | } else if (from.path) { 17 | this.ref = this.db.sdk.ref(from.path); 18 | } else if (from.ref) { 19 | this.ref = from.ref; 20 | } else { 21 | throw new Error('RxFirebaseDatabaseRef: no reference specified'); 22 | } 23 | } 24 | 25 | private static applyFilter(observable: Observable, filter: string): Observable { 26 | if (filter === 'untilSignIn') { 27 | return observable.takeUntil(RxFirebase.auth.onSignIn$); 28 | } 29 | 30 | if (filter === 'untilSignOut') { 31 | return observable.takeUntil(RxFirebase.auth.onSignOut$); 32 | } 33 | 34 | if (filter === 'afterSignIn') { 35 | return RxFirebase.auth.isSignedIn$ 36 | .switchMap((isSignedIn: boolean) => isSignedIn 37 | ? observable 38 | : RxFirebase.auth.onSignIn$.take(1).switchMap(() => observable) 39 | ); 40 | } 41 | 42 | if (filter === 'afterSignOut') { 43 | return RxFirebase.auth.onSignOut$.take(1).switchMap(() => observable); 44 | } 45 | 46 | if (filter === '_getSnapshot') { 47 | return observable.map(({snapshot}: { 48 | snapshot: RxFirebaseDataSnapshot, 49 | prevChildKey?: string 50 | }): RxFirebaseDataSnapshot => snapshot); 51 | } 52 | 53 | if (filter === 'getValue') { 54 | return observable.map((snapshot: RxFirebaseDataSnapshot): Object => snapshot.val()); 55 | } 56 | 57 | if (filter === 'asList') { 58 | return observable.map((value: Object) => { 59 | const array = []; 60 | for (let key in value) { 61 | if (value.hasOwnProperty(key)) { 62 | let element = value[key]; 63 | 64 | if (typeof element !== 'object') { 65 | element = {$value: element}; 66 | } 67 | 68 | element.$key = key; 69 | array.push(element); 70 | } 71 | } 72 | 73 | return array; 74 | }); 75 | } 76 | 77 | return observable; 78 | } 79 | 80 | public child(path: string): RxFirebaseDatabaseRef { 81 | this.ref = this.ref.child(path); 82 | return this; 83 | } 84 | 85 | public get parent(): RxFirebaseDatabaseRef { 86 | this.ref = this.ref.parent; 87 | return this; 88 | } 89 | 90 | public get root(): RxFirebaseDatabaseRef { 91 | this.ref = this.ref.root; 92 | return this; 93 | } 94 | 95 | public get key(): string|null { 96 | return this.ref.key; 97 | } 98 | 99 | public untilSignIn(): RxFirebaseDatabaseRef { 100 | this.filters['untilSignIn'] = true; 101 | return this; 102 | } 103 | 104 | public untilSignOut(): RxFirebaseDatabaseRef { 105 | this.filters['untilSignOut'] = true; 106 | return this; 107 | } 108 | 109 | public afterSignIn(): RxFirebaseDatabaseRef { 110 | this.filters['afterSignIn'] = true; 111 | return this; 112 | } 113 | 114 | public afterSignOut(): RxFirebaseDatabaseRef { 115 | this.filters['afterSignOut'] = true; 116 | return this; 117 | } 118 | 119 | public getValue(): RxFirebaseDatabaseRef { 120 | this.filters['getValue'] = true; 121 | return this; 122 | } 123 | 124 | public withPrevChildKey() { 125 | this.filters['_getSnapshot'] = false; 126 | this.filters['withPrevChildKey'] = true; 127 | return this; 128 | } 129 | 130 | public asList(): RxFirebaseDatabaseRef { 131 | this.filters['getValue'] = true; 132 | this.filters['asList'] = true; 133 | return this; 134 | } 135 | 136 | public onValue(): Observable { 137 | return this.on('value'); 138 | } 139 | 140 | public onChildAdded(): Observable { 141 | return this.on('child_added'); 142 | } 143 | 144 | public onChildRemoved(): Observable { 145 | return this.on('child_removed'); 146 | } 147 | 148 | public onChildChanged(): Observable { 149 | return this.on('child_changed'); 150 | } 151 | 152 | public onChildMoved(): Observable { 153 | return this.on('child_moved'); 154 | } 155 | 156 | public onceValue(): Observable { 157 | return this.once('value'); 158 | } 159 | 160 | public onceChildAdded(): Observable { 161 | return this.once('child_added'); 162 | } 163 | 164 | public onceChildRemoved(): Observable { 165 | return this.once('child_removed'); 166 | } 167 | 168 | public onceChildChanged(): Observable { 169 | return this.once('child_changed'); 170 | } 171 | 172 | public onceChildMoved(): Observable { 173 | return this.once('child_moved'); 174 | } 175 | 176 | public startAt(value: number|string|boolean|null, key?: string): RxFirebaseDatabaseRef { 177 | this.ref = this.ref.startAt(value, key); 178 | return this; 179 | } 180 | 181 | public endAt(value: number|string|boolean|null, key?: string): RxFirebaseDatabaseRef { 182 | this.ref = this.ref.endAt(value, key); 183 | return this; 184 | } 185 | 186 | public equalTo(value: number|string|boolean|null, key?: string): RxFirebaseDatabaseRef { 187 | this.ref = this.ref.equalTo(value, key); 188 | return this; 189 | } 190 | 191 | public isEqual(other: RxFirebaseDatabaseRef|null): boolean { 192 | return this.ref.isEqual(other && other.ref); 193 | } 194 | 195 | public limitToFirst(limit: number): RxFirebaseDatabaseRef { 196 | this.ref = this.ref.limitToFirst(limit); 197 | return this; 198 | } 199 | 200 | public limitToLast(limit: number): RxFirebaseDatabaseRef { 201 | this.ref = this.ref.limitToLast(limit); 202 | return this; 203 | } 204 | 205 | public orderByChild(path: string): RxFirebaseDatabaseRef { 206 | this.ref = this.ref.orderByChild(path); 207 | return this; 208 | } 209 | 210 | public orderByKey(): RxFirebaseDatabaseRef { 211 | this.ref = this.ref.orderByKey(); 212 | return this; 213 | } 214 | 215 | public orderByPriority(): RxFirebaseDatabaseRef { 216 | this.ref = this.ref.orderByPriority(); 217 | return this; 218 | } 219 | 220 | public orderByValue(): RxFirebaseDatabaseRef { 221 | this.ref = this.ref.orderByValue(); 222 | return this; 223 | } 224 | 225 | public toString(): string { 226 | return this.ref.toString(); 227 | } 228 | 229 | public on(eventType: string): Observable { 230 | let observable = new Observable((subscriber: Subscriber): Function => { 231 | this.callback = (snapshot: RxFirebaseDataSnapshot, prevChildKey?: string): any => { 232 | subscriber.next({snapshot, prevChildKey}); 233 | }; 234 | 235 | this.ref.on( 236 | eventType, 237 | this.callback, 238 | (err: Error) => subscriber.error(err) 239 | ); 240 | 241 | return () => this.ref.off(eventType, this.callback); 242 | }); 243 | 244 | return this.applyFilters(observable); 245 | } 246 | 247 | public once(eventType: string): Observable { 248 | let observable = new Observable((subscriber: Subscriber): Function => { 249 | this.callback = (snapshot: RxFirebaseDataSnapshot, prevChildKey?: string) => { 250 | subscriber.next({snapshot, prevChildKey}); 251 | subscriber.complete(); 252 | }; 253 | 254 | this.ref.once( 255 | eventType, 256 | this.callback, 257 | (err: Error) => subscriber.error(err) 258 | ); 259 | 260 | return () => this.ref.off(eventType, this.callback); 261 | }); 262 | 263 | return this.applyFilters(observable); 264 | } 265 | 266 | public onDisconnect(): RxFirebaseDatabaseRefOnDisconnect { 267 | return this.ref.onDisconnect(); 268 | } 269 | 270 | public push(value?: any, onComplete?: (err: Error|null) => any): RxFirebaseDatabaseRef { 271 | return new RxFirebaseDatabaseRef(this.db, {ref: this.ref.push(value, onComplete)}); 272 | } 273 | 274 | public remove(onComplete?: (err: Error|null) => any): Promise { 275 | return > this.ref.remove(onComplete); 276 | } 277 | 278 | public set(value: any, onComplete?: (err: Error|null) => any): Promise { 279 | return > this.ref.set(value, onComplete); 280 | } 281 | 282 | public setPriority(priority: string|number|null, onComplete: (err: Error|null) => any): Promise { 283 | return > this.ref.setPriority(priority, onComplete); 284 | } 285 | 286 | public setWithPriority(newVal: any, 287 | newPriority: string|number|null, 288 | onComplete?: (err: Error|null) => any): Promise { 289 | return > this.ref.setWithPriority(newVal, newPriority, onComplete); 290 | } 291 | 292 | public transaction(transactionUpdate: (a: any) => any, 293 | onComplete?: (err: Error|null, 294 | committed: boolean, 295 | snapshot: RxFirebaseDataSnapshot|null) => any, 296 | applyLocally?: boolean): Promise { 297 | return > this.ref.transaction(transactionUpdate, onComplete, applyLocally); 298 | } 299 | 300 | public update(values: Object, onComplete?: (err: Error|null) => any): Promise { 301 | return > this.ref.update(values, onComplete); 302 | } 303 | 304 | private applyFilters(observable: Observable): Observable { 305 | if (this.filters['withPrevChildKey'] && this.filters['getValue']) { 306 | throw new Error('RxFirebaseDatabaseRef: withPrevChildKey() cannot be used in conjunction with getValue() or asList()'); 307 | } 308 | 309 | for (let filter in this.filters) { 310 | observable = RxFirebaseDatabaseRef.applyFilter(observable, filter); 311 | } 312 | 313 | return observable; 314 | } 315 | 316 | } 317 | 318 | export interface RxFirebaseDataSnapshot extends firebase.database.DataSnapshot { 319 | } 320 | 321 | export interface RxFirebaseDatabaseRefOnDisconnect extends firebase.database.OnDisconnect { 322 | } 323 | -------------------------------------------------------------------------------- /src/index.ts: -------------------------------------------------------------------------------- 1 | export * from './RxFirebase'; 2 | import { RxFirebase } from './RxFirebase'; 3 | export default RxFirebase; 4 | -------------------------------------------------------------------------------- /src/storage/index.ts: -------------------------------------------------------------------------------- 1 | export * from './storage'; 2 | -------------------------------------------------------------------------------- /src/storage/storage.ts: -------------------------------------------------------------------------------- 1 | import * as firebase from 'firebase'; 2 | 3 | export class RxFirebaseStorage { 4 | public get sdk(): firebase.storage.Storage { 5 | if (!this._sdk) { 6 | throw new Error('Firebase Storage is not yet available in NodeJS, only in the browser'); 7 | } 8 | 9 | return this._sdk; 10 | } 11 | 12 | private readonly _sdk: firebase.storage.Storage; 13 | 14 | constructor(app: firebase.app.App) { 15 | // Firebase Storage is not yet available in NodeJS, only in the browser 16 | if (firebase.storage) { 17 | this._sdk = firebase.storage && firebase.storage(app); 18 | } 19 | 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /tools/add-license-to-file.js: -------------------------------------------------------------------------------- 1 | const fs = require('fs'); 2 | 3 | function addLicenseToFile (license, destination) { 4 | if (!license) { 5 | throw new Error('license path is required as 1st argument'); 6 | } 7 | 8 | addLicenseTextToFile(fs.readFileSync(license).toString(), destination); 9 | } 10 | 11 | function addLicenseTextToFile(licenseText, destination) { 12 | if (!destination) { 13 | throw new Error('destination file path is required as 2nd argument'); 14 | } 15 | 16 | fs.writeFileSync(destination, `/** 17 | @license 18 | ${licenseText} 19 | **/ 20 | ${fs.readFileSync(destination).toString()} 21 | `); 22 | } 23 | 24 | module.exports = { 25 | addLicenseToFile: addLicenseToFile, 26 | addLicenseTextToFile: addLicenseTextToFile 27 | }; 28 | -------------------------------------------------------------------------------- /tools/make-closure-core.js: -------------------------------------------------------------------------------- 1 | const compiler = require('google-closure-compiler-js').compile; 2 | const fs = require('fs'); 3 | 4 | const source = fs.readFileSync('dist/global/RxFirebase.js', 'utf8'); 5 | 6 | const compilerFlags = { 7 | jsCode: [{src: source}], 8 | languageIn: 'ES5', 9 | createSourceMap: true, 10 | }; 11 | 12 | const output = compiler(compilerFlags); 13 | 14 | fs.writeFileSync('dist/global/RxFirebase.min.js', output.compiledCode, 'utf8'); 15 | fs.writeFileSync('dist/global/RxFirebase.min.js.map', output.sourceMap, 'utf8'); 16 | -------------------------------------------------------------------------------- /tools/make-packages.js: -------------------------------------------------------------------------------- 1 | const pkg = require('../package.json'); 2 | const fs = require('fs'); 3 | const mkdirp = require('mkdirp'); 4 | const licenseTool = require('./add-license-to-file'); 5 | 6 | // License info for minified files 7 | const licenseUrl = 'https://github.com/jsayol/rxfirebase/blob/master/LICENSE.txt'; 8 | const license = 'Apache License 2.0 ' + licenseUrl; 9 | 10 | delete pkg.files; 11 | delete pkg.scripts; 12 | delete pkg.devDependencies; 13 | 14 | const cjsPkg = Object.assign(pkg, { 15 | name: 'rxfirebase', 16 | main: 'RxFirebase.js', 17 | typings: 'RxFirebase.d.ts' 18 | }); 19 | 20 | // Change rxjs to be a peerDependency 21 | cjsPkg.peerDependencies = Object.assign({}, cjsPkg.peerDependencies, {rxjs: cjsPkg.dependencies['rxjs']}); 22 | delete cjsPkg.dependencies['rxjs']; 23 | 24 | mkdirp.sync('dist/cjs'); 25 | mkdirp.sync('dist/bundles'); 26 | 27 | // Package-related files 28 | fs.writeFileSync('dist/cjs/package.json', JSON.stringify(cjsPkg, null, 2)); 29 | fs.writeFileSync('dist/cjs/LICENSE.txt', fs.readFileSync('./LICENSE.txt').toString()); 30 | fs.writeFileSync('dist/cjs/README.md', fs.readFileSync('./README.md').toString()); 31 | 32 | // Bundles 33 | fs.writeFileSync('dist/bundles/RxFirebase.js', fs.readFileSync('dist/global/RxFirebase.js').toString()); 34 | fs.writeFileSync('dist/bundles/RxFirebase.js.map', fs.readFileSync('dist/global/RxFirebase.js.map').toString()); 35 | fs.writeFileSync('dist/bundles/RxFirebase.min.js', fs.readFileSync('dist/global/RxFirebase.min.js').toString()); 36 | fs.writeFileSync('dist/bundles/RxFirebase.min.js.map', fs.readFileSync('dist/global/RxFirebase.min.js.map').toString()); 37 | 38 | // Add licenses to tops of bundles 39 | licenseTool.addLicenseToFile('LICENSE.txt', 'dist/bundles/RxFirebase.js'); 40 | licenseTool.addLicenseTextToFile(license, 'dist/bundles/RxFirebase.min.js'); 41 | -------------------------------------------------------------------------------- /tools/make-umd-bundle.js: -------------------------------------------------------------------------------- 1 | const rollup = require('rollup'); 2 | const fs = require('fs'); 3 | // const path = require('path'); 4 | const nodeResolve =require('rollup-plugin-node-resolve'); 5 | const commonjs = require('rollup-plugin-commonjs'); 6 | 7 | rollup.rollup({ 8 | entry: 'dist/es6/index.js', 9 | plugins: [ 10 | commonjs(), 11 | nodeResolve({ jsnext: true, main: true, browser: true }) 12 | ] 13 | }).then(function (bundle) { 14 | const result = bundle.generate({ 15 | format: 'umd', 16 | moduleName: 'RxFirebase', 17 | sourceMap: true 18 | }); 19 | // const tslib = fs.readFileSync(path.join(process.cwd() + '/node_modules/tslib/tslib.js'), 'utf8'); 20 | 21 | // fs.writeFileSync('dist/global/RxFirebase.js', tslib.toString() + result.code); 22 | fs.writeFileSync('dist/global/RxFirebase.js', result.code); 23 | fs.writeFileSync('dist/global/RxFirebase.js.map', result.map); 24 | }); 25 | -------------------------------------------------------------------------------- /tsconfig.cjs.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "declaration": true, 4 | "module": "commonjs", 5 | "target": "es5", 6 | "moduleResolution": "node", 7 | "noImplicitAny": true, 8 | "outDir": "./dist/cjs", 9 | "preserveConstEnums": true, 10 | "removeComments": true, 11 | "sourceMap": true, 12 | "diagnostics": true, 13 | "noImplicitReturns": true, 14 | "noImplicitThis": true, 15 | "noUnusedLocals": true, 16 | "noUnusedParameters": true, 17 | "suppressImplicitAnyIndexErrors": true, 18 | "lib": [ 19 | "es5", 20 | "es2015.iterable", 21 | "es2015.collection", 22 | "es2015.promise", 23 | "dom" 24 | ] 25 | }, 26 | "files": [ 27 | "./dist/cjs/src/index.ts" 28 | ], 29 | "exclude": [ 30 | "node_modules", 31 | "**/*-spec.ts" 32 | ] 33 | } 34 | -------------------------------------------------------------------------------- /tsconfig.es6.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "declaration": true, 4 | "module": "es2015", 5 | "target": "es5", 6 | "moduleResolution": "node", 7 | "noImplicitAny": true, 8 | "outDir": "./dist/es6", 9 | "preserveConstEnums": true, 10 | "removeComments": true, 11 | "sourceMap": true, 12 | "diagnostics": true, 13 | "noImplicitReturns": true, 14 | "noImplicitThis": true, 15 | "noUnusedLocals": true, 16 | "noUnusedParameters": true, 17 | "suppressImplicitAnyIndexErrors": true, 18 | "lib": [ 19 | "es5", 20 | "es2015.iterable", 21 | "es2015.collection", 22 | "es2015.promise", 23 | "dom" 24 | ] 25 | }, 26 | "files": [ 27 | "./dist/es6/src/index.ts" 28 | ], 29 | "exclude": [ 30 | "node_modules", 31 | "**/*-spec.ts" 32 | ] 33 | } 34 | -------------------------------------------------------------------------------- /tsconfig.umd.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "declaration": true, 4 | "module": "umd", 5 | "target": "es5", 6 | "moduleResolution": "node", 7 | "noImplicitAny": true, 8 | "outDir": "./dist/umd", 9 | "preserveConstEnums": true, 10 | "removeComments": true, 11 | "sourceMap": true, 12 | "diagnostics": true, 13 | "noImplicitReturns": true, 14 | "noImplicitThis": true, 15 | "noUnusedLocals": true, 16 | "noUnusedParameters": true, 17 | "suppressImplicitAnyIndexErrors": true, 18 | "lib": [ 19 | "es5", 20 | "es2015.iterable", 21 | "es2015.collection", 22 | "es2015.promise", 23 | "dom" 24 | ] 25 | }, 26 | "files": [ 27 | "./src/index.ts" 28 | ], 29 | "exclude": [ 30 | "node_modules", 31 | "**/*-spec.ts" 32 | ] 33 | } 34 | -------------------------------------------------------------------------------- /tslint.json: -------------------------------------------------------------------------------- 1 | { 2 | "rules": { 3 | "member-access": [ 4 | true, 5 | "check-accessor" 6 | ], 7 | "member-ordering": [ 8 | true, 9 | { 10 | "order": [ 11 | "public-static-field", 12 | "protected-static-field", 13 | "private-static-field", 14 | "public-instance-field", 15 | "protected-instance-field", 16 | "private-instance-field", 17 | "constructor", 18 | "public-static-method", 19 | "protected-static-method", 20 | "private-static-method", 21 | "public-instance-method", 22 | "protected-instance-method", 23 | "private-instance-method" 24 | ] 25 | } 26 | ], 27 | "curly": true, 28 | "eofline": false, 29 | "align": [ 30 | true, 31 | "parameters" 32 | ], 33 | "class-name": true, 34 | "indent": [ 35 | true, 36 | "spaces" 37 | ], 38 | "max-line-length": [ 39 | true, 40 | 150 41 | ], 42 | "no-consecutive-blank-lines": true, 43 | "no-trailing-whitespace": true, 44 | "no-duplicate-variable": true, 45 | "no-var-keyword": true, 46 | "no-empty": true, 47 | "no-unused-expression": true, 48 | "no-use-before-declare": true, 49 | "no-var-requires": true, 50 | "no-require-imports": true, 51 | "one-line": [ 52 | true, 53 | "check-else", 54 | "check-whitespace", 55 | "check-open-brace" 56 | ], 57 | "quotemark": [ 58 | true, 59 | "single", 60 | "avoid-escape" 61 | ], 62 | "semicolon": true, 63 | "typedef-whitespace": [ 64 | true, 65 | { 66 | "call-signature": "nospace", 67 | "index-signature": "nospace", 68 | "parameter": "nospace", 69 | "property-declaration": "nospace", 70 | "variable-declaration": "nospace" 71 | } 72 | ], 73 | "whitespace": [ 74 | true, 75 | "check-branch", 76 | "check-decl", 77 | "check-operator", 78 | "check-separator", 79 | "check-type" 80 | ] 81 | } 82 | } 83 | -------------------------------------------------------------------------------- /yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "@types/chai@3.4.30": 6 | version "3.4.30" 7 | resolved "https://registry.yarnpkg.com/@types/chai/-/chai-3.4.30.tgz#d1e90d48d5d844fe2f56f0caf7f5aaebd2e29187" 8 | 9 | "@types/mocha@2.2.33": 10 | version "2.2.33" 11 | resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-2.2.33.tgz#d79a0061ec270379f4d9e225f4096fb436669def" 12 | 13 | "@types/node@6.0.52": 14 | version "6.0.52" 15 | resolved "https://registry.yarnpkg.com/@types/node/-/node-6.0.52.tgz#1ac3a99b42320f9e463482f25af4c2359473aaa6" 16 | 17 | acorn@^4.0.1: 18 | version "4.0.3" 19 | resolved "https://registry.yarnpkg.com/acorn/-/acorn-4.0.3.tgz#1a3e850b428e73ba6b09d1cc527f5aaad4d03ef1" 20 | 21 | amdefine@>=0.0.4: 22 | version "1.0.1" 23 | resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" 24 | 25 | ansi-align@^1.1.0: 26 | version "1.1.0" 27 | resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-1.1.0.tgz#2f0c1658829739add5ebb15e6b0c6e3423f016ba" 28 | dependencies: 29 | string-width "^1.0.1" 30 | 31 | ansi-regex@^2.0.0: 32 | version "2.0.0" 33 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.0.0.tgz#c5061b6e0ef8a81775e50f5d66151bf6bf371107" 34 | 35 | ansi-styles@^2.2.1: 36 | version "2.2.1" 37 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" 38 | 39 | any-promise@^1.3.0: 40 | version "1.3.0" 41 | resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f" 42 | 43 | array-differ@^1.0.0: 44 | version "1.0.0" 45 | resolved "https://registry.yarnpkg.com/array-differ/-/array-differ-1.0.0.tgz#eff52e3758249d33be402b8bb8e564bb2b5d4031" 46 | 47 | array-filter@~0.0.0: 48 | version "0.0.1" 49 | resolved "https://registry.yarnpkg.com/array-filter/-/array-filter-0.0.1.tgz#7da8cf2e26628ed732803581fd21f67cacd2eeec" 50 | 51 | array-find-index@^1.0.1: 52 | version "1.0.2" 53 | resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1" 54 | 55 | array-map@~0.0.0: 56 | version "0.0.0" 57 | resolved "https://registry.yarnpkg.com/array-map/-/array-map-0.0.0.tgz#88a2bab73d1cf7bcd5c1b118a003f66f665fa662" 58 | 59 | array-reduce@~0.0.0: 60 | version "0.0.0" 61 | resolved "https://registry.yarnpkg.com/array-reduce/-/array-reduce-0.0.0.tgz#173899d3ffd1c7d9383e4479525dbe278cab5f2b" 62 | 63 | array-uniq@^1.0.2: 64 | version "1.0.3" 65 | resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" 66 | 67 | arrify@^1.0.0: 68 | version "1.0.1" 69 | resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" 70 | 71 | assertion-error@^1.0.1: 72 | version "1.0.2" 73 | resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-1.0.2.tgz#13ca515d86206da0bac66e834dd397d87581094c" 74 | 75 | babel-code-frame@^6.20.0: 76 | version "6.20.0" 77 | resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.20.0.tgz#b968f839090f9a8bc6d41938fb96cb84f7387b26" 78 | dependencies: 79 | chalk "^1.1.0" 80 | esutils "^2.0.2" 81 | js-tokens "^2.0.0" 82 | 83 | balanced-match@^0.4.1: 84 | version "0.4.2" 85 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-0.4.2.tgz#cb3f3e3c732dc0f01ee70b403f302e61d7709838" 86 | 87 | base64url@2.0.0, base64url@^2.0.0: 88 | version "2.0.0" 89 | resolved "https://registry.yarnpkg.com/base64url/-/base64url-2.0.0.tgz#eac16e03ea1438eff9423d69baa36262ed1f70bb" 90 | 91 | beeper@^1.0.0: 92 | version "1.1.1" 93 | resolved "https://registry.yarnpkg.com/beeper/-/beeper-1.1.1.tgz#e6d5ea8c5dad001304a70b22638447f69cb2f809" 94 | 95 | boxen@^0.6.0: 96 | version "0.6.0" 97 | resolved "https://registry.yarnpkg.com/boxen/-/boxen-0.6.0.tgz#8364d4248ac34ff0ef1b2f2bf49a6c60ce0d81b6" 98 | dependencies: 99 | ansi-align "^1.1.0" 100 | camelcase "^2.1.0" 101 | chalk "^1.1.1" 102 | cli-boxes "^1.0.0" 103 | filled-array "^1.0.0" 104 | object-assign "^4.0.1" 105 | repeating "^2.0.0" 106 | string-width "^1.0.1" 107 | widest-line "^1.0.0" 108 | 109 | brace-expansion@^1.0.0: 110 | version "1.1.6" 111 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.6.tgz#7197d7eaa9b87e648390ea61fc66c84427420df9" 112 | dependencies: 113 | balanced-match "^0.4.1" 114 | concat-map "0.0.1" 115 | 116 | browser-resolve@^1.11.0: 117 | version "1.11.2" 118 | resolved "https://registry.yarnpkg.com/browser-resolve/-/browser-resolve-1.11.2.tgz#8ff09b0a2c421718a1051c260b32e48f442938ce" 119 | dependencies: 120 | resolve "1.1.7" 121 | 122 | browser-stdout@1.3.0: 123 | version "1.3.0" 124 | resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.0.tgz#f351d32969d32fa5d7a5567154263d928ae3bd1f" 125 | 126 | buffer-equal-constant-time@1.0.1: 127 | version "1.0.1" 128 | resolved "https://registry.yarnpkg.com/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz#f8e71132f7ffe6e01a5c9697a4c6f3e48d5cc819" 129 | 130 | buffer-shims@^1.0.0: 131 | version "1.0.0" 132 | resolved "https://registry.yarnpkg.com/buffer-shims/-/buffer-shims-1.0.0.tgz#9978ce317388c649ad8793028c3477ef044a8b51" 133 | 134 | builtin-modules@^1.0.0, builtin-modules@^1.1.0: 135 | version "1.1.1" 136 | resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" 137 | 138 | camelcase-keys@^2.0.0: 139 | version "2.1.0" 140 | resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-2.1.0.tgz#308beeaffdf28119051efa1d932213c91b8f92e7" 141 | dependencies: 142 | camelcase "^2.0.0" 143 | map-obj "^1.0.0" 144 | 145 | camelcase@^2.0.0, camelcase@^2.1.0: 146 | version "2.1.1" 147 | resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f" 148 | 149 | capture-stack-trace@^1.0.0: 150 | version "1.0.0" 151 | resolved "https://registry.yarnpkg.com/capture-stack-trace/-/capture-stack-trace-1.0.0.tgz#4a6fa07399c26bba47f0b2496b4d0fb408c5550d" 152 | 153 | chai@^3.5.0: 154 | version "3.5.0" 155 | resolved "https://registry.yarnpkg.com/chai/-/chai-3.5.0.tgz#4d02637b067fe958bdbfdd3a40ec56fef7373247" 156 | dependencies: 157 | assertion-error "^1.0.1" 158 | deep-eql "^0.1.3" 159 | type-detect "^1.0.0" 160 | 161 | chalk@^1.0.0, chalk@^1.1.0, chalk@^1.1.1, chalk@^1.1.3: 162 | version "1.1.3" 163 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" 164 | dependencies: 165 | ansi-styles "^2.2.1" 166 | escape-string-regexp "^1.0.2" 167 | has-ansi "^2.0.0" 168 | strip-ansi "^3.0.0" 169 | supports-color "^2.0.0" 170 | 171 | cli-boxes@^1.0.0: 172 | version "1.0.0" 173 | resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-1.0.0.tgz#4fa917c3e59c94a004cd61f8ee509da651687143" 174 | 175 | clone-stats@^0.0.1: 176 | version "0.0.1" 177 | resolved "https://registry.yarnpkg.com/clone-stats/-/clone-stats-0.0.1.tgz#b88f94a82cf38b8791d58046ea4029ad88ca99d1" 178 | 179 | clone@^1.0.0: 180 | version "1.0.2" 181 | resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.2.tgz#260b7a99ebb1edfe247538175f783243cb19d149" 182 | 183 | code-point-at@^1.0.0: 184 | version "1.1.0" 185 | resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" 186 | 187 | colors@^1.1.2: 188 | version "1.1.2" 189 | resolved "https://registry.yarnpkg.com/colors/-/colors-1.1.2.tgz#168a4701756b6a7f51a12ce0c97bfa28c084ed63" 190 | 191 | commander@2.9.0: 192 | version "2.9.0" 193 | resolved "https://registry.yarnpkg.com/commander/-/commander-2.9.0.tgz#9c99094176e12240cb22d6c5146098400fe0f7d4" 194 | dependencies: 195 | graceful-readlink ">= 1.0.0" 196 | 197 | concat-map@0.0.1: 198 | version "0.0.1" 199 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" 200 | 201 | configstore@^2.0.0: 202 | version "2.1.0" 203 | resolved "https://registry.yarnpkg.com/configstore/-/configstore-2.1.0.tgz#737a3a7036e9886102aa6099e47bb33ab1aba1a1" 204 | dependencies: 205 | dot-prop "^3.0.0" 206 | graceful-fs "^4.1.2" 207 | mkdirp "^0.5.0" 208 | object-assign "^4.0.1" 209 | os-tmpdir "^1.0.0" 210 | osenv "^0.1.0" 211 | uuid "^2.0.1" 212 | write-file-atomic "^1.1.2" 213 | xdg-basedir "^2.0.0" 214 | 215 | core-util-is@~1.0.0: 216 | version "1.0.2" 217 | resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" 218 | 219 | create-error-class@^3.0.1: 220 | version "3.0.2" 221 | resolved "https://registry.yarnpkg.com/create-error-class/-/create-error-class-3.0.2.tgz#06be7abef947a3f14a30fd610671d401bca8b7b6" 222 | dependencies: 223 | capture-stack-trace "^1.0.0" 224 | 225 | cross-spawn@^4.0.0: 226 | version "4.0.2" 227 | resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-4.0.2.tgz#7b9247621c23adfdd3856004a823cbe397424d41" 228 | dependencies: 229 | lru-cache "^4.0.1" 230 | which "^1.2.9" 231 | 232 | currently-unhandled@^0.4.1: 233 | version "0.4.1" 234 | resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea" 235 | dependencies: 236 | array-find-index "^1.0.1" 237 | 238 | dateformat@^1.0.11: 239 | version "1.0.12" 240 | resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-1.0.12.tgz#9f124b67594c937ff706932e4a642cca8dbbfee9" 241 | dependencies: 242 | get-stdin "^4.0.1" 243 | meow "^3.3.0" 244 | 245 | debug@2.2.0: 246 | version "2.2.0" 247 | resolved "https://registry.yarnpkg.com/debug/-/debug-2.2.0.tgz#f87057e995b1a1f6ae6a4960664137bc56f039da" 248 | dependencies: 249 | ms "0.7.1" 250 | 251 | decamelize@^1.1.2: 252 | version "1.2.0" 253 | resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" 254 | 255 | deep-eql@^0.1.3: 256 | version "0.1.3" 257 | resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-0.1.3.tgz#ef558acab8de25206cd713906d74e56930eb69f2" 258 | dependencies: 259 | type-detect "0.1.1" 260 | 261 | deep-extend@~0.4.0: 262 | version "0.4.1" 263 | resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.4.1.tgz#efe4113d08085f4e6f9687759810f807469e2253" 264 | 265 | define-properties@^1.1.2: 266 | version "1.1.2" 267 | resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.2.tgz#83a73f2fea569898fb737193c8f873caf6d45c94" 268 | dependencies: 269 | foreach "^2.0.5" 270 | object-keys "^1.0.8" 271 | 272 | diff@1.4.0: 273 | version "1.4.0" 274 | resolved "https://registry.yarnpkg.com/diff/-/diff-1.4.0.tgz#7f28d2eb9ee7b15a97efd89ce63dcfdaa3ccbabf" 275 | 276 | diff@^3.0.1, diff@^3.1.0: 277 | version "3.1.0" 278 | resolved "https://registry.yarnpkg.com/diff/-/diff-3.1.0.tgz#9406c73a401e6c2b3ba901c5e2c44eb6a60c5385" 279 | 280 | dom-storage@2.0.2: 281 | version "2.0.2" 282 | resolved "https://registry.yarnpkg.com/dom-storage/-/dom-storage-2.0.2.tgz#ed17cbf68abd10e0aef8182713e297c5e4b500b0" 283 | 284 | dot-prop@^3.0.0: 285 | version "3.0.0" 286 | resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-3.0.0.tgz#1b708af094a49c9a0e7dbcad790aba539dac1177" 287 | dependencies: 288 | is-obj "^1.0.0" 289 | 290 | duplexer2@0.0.2: 291 | version "0.0.2" 292 | resolved "https://registry.yarnpkg.com/duplexer2/-/duplexer2-0.0.2.tgz#c614dcf67e2fb14995a91711e5a617e8a60a31db" 293 | dependencies: 294 | readable-stream "~1.1.9" 295 | 296 | duplexer2@^0.1.4: 297 | version "0.1.4" 298 | resolved "https://registry.yarnpkg.com/duplexer2/-/duplexer2-0.1.4.tgz#8b12dab878c0d69e3e7891051662a32fc6bddcc1" 299 | dependencies: 300 | readable-stream "^2.0.2" 301 | 302 | duplexer@~0.1.1: 303 | version "0.1.1" 304 | resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.1.tgz#ace6ff808c1ce66b57d1ebf97977acb02334cfc1" 305 | 306 | ecdsa-sig-formatter@1.0.9: 307 | version "1.0.9" 308 | resolved "https://registry.yarnpkg.com/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.9.tgz#4bc926274ec3b5abb5016e7e1d60921ac262b2a1" 309 | dependencies: 310 | base64url "^2.0.0" 311 | safe-buffer "^5.0.1" 312 | 313 | error-ex@^1.2.0: 314 | version "1.3.0" 315 | resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.0.tgz#e67b43f3e82c96ea3a584ffee0b9fc3325d802d9" 316 | dependencies: 317 | is-arrayish "^0.2.1" 318 | 319 | es-abstract@^1.4.3: 320 | version "1.6.1" 321 | resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.6.1.tgz#bb8a2064120abcf928a086ea3d9043114285ec99" 322 | dependencies: 323 | es-to-primitive "^1.1.1" 324 | function-bind "^1.1.0" 325 | is-callable "^1.1.3" 326 | is-regex "^1.0.3" 327 | 328 | es-to-primitive@^1.1.1: 329 | version "1.1.1" 330 | resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.1.1.tgz#45355248a88979034b6792e19bb81f2b7975dd0d" 331 | dependencies: 332 | is-callable "^1.1.1" 333 | is-date-object "^1.0.1" 334 | is-symbol "^1.0.1" 335 | 336 | es6-object-assign@^1.0.3: 337 | version "1.0.3" 338 | resolved "https://registry.yarnpkg.com/es6-object-assign/-/es6-object-assign-1.0.3.tgz#40a192e0fda5ee44ee8cf6f5b5d9b47cd0f69b14" 339 | 340 | escape-string-regexp@1.0.5, escape-string-regexp@^1.0.2: 341 | version "1.0.5" 342 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" 343 | 344 | estree-walker@^0.2.1: 345 | version "0.2.1" 346 | resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-0.2.1.tgz#bdafe8095383d8414d5dc2ecf4c9173b6db9412e" 347 | 348 | estree-walker@^0.3.0: 349 | version "0.3.0" 350 | resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-0.3.0.tgz#f67ca8f57b9ed66d886af816c099c779b315d4db" 351 | 352 | esutils@^2.0.2: 353 | version "2.0.2" 354 | resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" 355 | 356 | event-stream@~3.3.0: 357 | version "3.3.4" 358 | resolved "https://registry.yarnpkg.com/event-stream/-/event-stream-3.3.4.tgz#4ab4c9a0f5a54db9338b4c34d86bfce8f4b35571" 359 | dependencies: 360 | duplexer "~0.1.1" 361 | from "~0" 362 | map-stream "~0.1.0" 363 | pause-stream "0.0.11" 364 | split "0.3" 365 | stream-combiner "~0.0.4" 366 | through "~2.3.1" 367 | 368 | fancy-log@^1.1.0: 369 | version "1.2.0" 370 | resolved "https://registry.yarnpkg.com/fancy-log/-/fancy-log-1.2.0.tgz#d5a51b53e9ab22ca07d558f2b67ae55fdb5fcbd8" 371 | dependencies: 372 | chalk "^1.1.1" 373 | time-stamp "^1.0.0" 374 | 375 | faye-websocket@0.9.3: 376 | version "0.9.3" 377 | resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.9.3.tgz#482a505b0df0ae626b969866d3bd740cdb962e83" 378 | dependencies: 379 | websocket-driver ">=0.5.1" 380 | 381 | filled-array@^1.0.0: 382 | version "1.1.0" 383 | resolved "https://registry.yarnpkg.com/filled-array/-/filled-array-1.1.0.tgz#c3c4f6c663b923459a9aa29912d2d031f1507f84" 384 | 385 | find-up@^1.0.0: 386 | version "1.1.2" 387 | resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" 388 | dependencies: 389 | path-exists "^2.0.0" 390 | pinkie-promise "^2.0.0" 391 | 392 | findup-sync@~0.3.0: 393 | version "0.3.0" 394 | resolved "https://registry.yarnpkg.com/findup-sync/-/findup-sync-0.3.0.tgz#37930aa5d816b777c03445e1966cc6790a4c0b16" 395 | dependencies: 396 | glob "~5.0.0" 397 | 398 | firebase@3.6.4: 399 | version "3.6.4" 400 | resolved "https://registry.yarnpkg.com/firebase/-/firebase-3.6.4.tgz#5c5b91d20f439b6f0a7aebe1b27c2db1a463e308" 401 | dependencies: 402 | dom-storage "2.0.2" 403 | faye-websocket "0.9.3" 404 | jsonwebtoken "7.1.9" 405 | rsvp "3.2.1" 406 | xmlhttprequest "1.8.0" 407 | 408 | foreach@^2.0.5: 409 | version "2.0.5" 410 | resolved "https://registry.yarnpkg.com/foreach/-/foreach-2.0.5.tgz#0bee005018aeb260d0a3af3ae658dd0136ec1b99" 411 | 412 | from@~0: 413 | version "0.1.3" 414 | resolved "https://registry.yarnpkg.com/from/-/from-0.1.3.tgz#ef63ac2062ac32acf7862e0d40b44b896f22f3bc" 415 | 416 | fs.realpath@^1.0.0: 417 | version "1.0.0" 418 | resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" 419 | 420 | function-bind@^1.0.2, function-bind@^1.1.0: 421 | version "1.1.0" 422 | resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.0.tgz#16176714c801798e4e8f2cf7f7529467bb4a5771" 423 | 424 | get-stdin@^4.0.1: 425 | version "4.0.1" 426 | resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe" 427 | 428 | glob@7.0.5: 429 | version "7.0.5" 430 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.0.5.tgz#b4202a69099bbb4d292a7c1b95b6682b67ebdc95" 431 | dependencies: 432 | fs.realpath "^1.0.0" 433 | inflight "^1.0.4" 434 | inherits "2" 435 | minimatch "^3.0.2" 436 | once "^1.3.0" 437 | path-is-absolute "^1.0.0" 438 | 439 | glob@^7.0.0, glob@^7.1.1: 440 | version "7.1.1" 441 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.1.tgz#805211df04faaf1c63a3600306cdf5ade50b2ec8" 442 | dependencies: 443 | fs.realpath "^1.0.0" 444 | inflight "^1.0.4" 445 | inherits "2" 446 | minimatch "^3.0.2" 447 | once "^1.3.0" 448 | path-is-absolute "^1.0.0" 449 | 450 | glob@~5.0.0: 451 | version "5.0.15" 452 | resolved "https://registry.yarnpkg.com/glob/-/glob-5.0.15.tgz#1bc936b9e02f4a603fcc222ecf7633d30b8b93b1" 453 | dependencies: 454 | inflight "^1.0.4" 455 | inherits "2" 456 | minimatch "2 || 3" 457 | once "^1.3.0" 458 | path-is-absolute "^1.0.0" 459 | 460 | glogg@^1.0.0: 461 | version "1.0.0" 462 | resolved "https://registry.yarnpkg.com/glogg/-/glogg-1.0.0.tgz#7fe0f199f57ac906cf512feead8f90ee4a284fc5" 463 | dependencies: 464 | sparkles "^1.0.0" 465 | 466 | google-closure-compiler-js@^20161201.0.0: 467 | version "20161201.0.0" 468 | resolved "https://registry.yarnpkg.com/google-closure-compiler-js/-/google-closure-compiler-js-20161201.0.0.tgz#777d789fb8aa170d9b0269a41206d9810845556d" 469 | dependencies: 470 | gulp-util "^3.0.7" 471 | webpack-core "^0.6.8" 472 | 473 | got@^5.0.0: 474 | version "5.7.1" 475 | resolved "https://registry.yarnpkg.com/got/-/got-5.7.1.tgz#5f81635a61e4a6589f180569ea4e381680a51f35" 476 | dependencies: 477 | create-error-class "^3.0.1" 478 | duplexer2 "^0.1.4" 479 | is-redirect "^1.0.0" 480 | is-retry-allowed "^1.0.0" 481 | is-stream "^1.0.0" 482 | lowercase-keys "^1.0.0" 483 | node-status-codes "^1.0.0" 484 | object-assign "^4.0.1" 485 | parse-json "^2.1.0" 486 | pinkie-promise "^2.0.0" 487 | read-all-stream "^3.0.0" 488 | readable-stream "^2.0.5" 489 | timed-out "^3.0.0" 490 | unzip-response "^1.0.2" 491 | url-parse-lax "^1.0.0" 492 | 493 | graceful-fs@^4.1.2: 494 | version "4.1.11" 495 | resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658" 496 | 497 | "graceful-readlink@>= 1.0.0": 498 | version "1.0.1" 499 | resolved "https://registry.yarnpkg.com/graceful-readlink/-/graceful-readlink-1.0.1.tgz#4cafad76bc62f02fa039b2f94e9a3dd3a391a725" 500 | 501 | growl@1.9.2: 502 | version "1.9.2" 503 | resolved "https://registry.yarnpkg.com/growl/-/growl-1.9.2.tgz#0ea7743715db8d8de2c5ede1775e1b45ac85c02f" 504 | 505 | gulp-util@^3.0.7: 506 | version "3.0.7" 507 | resolved "https://registry.yarnpkg.com/gulp-util/-/gulp-util-3.0.7.tgz#78925c4b8f8b49005ac01a011c557e6218941cbb" 508 | dependencies: 509 | array-differ "^1.0.0" 510 | array-uniq "^1.0.2" 511 | beeper "^1.0.0" 512 | chalk "^1.0.0" 513 | dateformat "^1.0.11" 514 | fancy-log "^1.1.0" 515 | gulplog "^1.0.0" 516 | has-gulplog "^0.1.0" 517 | lodash._reescape "^3.0.0" 518 | lodash._reevaluate "^3.0.0" 519 | lodash._reinterpolate "^3.0.0" 520 | lodash.template "^3.0.0" 521 | minimist "^1.1.0" 522 | multipipe "^0.1.2" 523 | object-assign "^3.0.0" 524 | replace-ext "0.0.1" 525 | through2 "^2.0.0" 526 | vinyl "^0.5.0" 527 | 528 | gulplog@^1.0.0: 529 | version "1.0.0" 530 | resolved "https://registry.yarnpkg.com/gulplog/-/gulplog-1.0.0.tgz#e28c4d45d05ecbbed818363ce8f9c5926229ffe5" 531 | dependencies: 532 | glogg "^1.0.0" 533 | 534 | has-ansi@^2.0.0: 535 | version "2.0.0" 536 | resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" 537 | dependencies: 538 | ansi-regex "^2.0.0" 539 | 540 | has-flag@^1.0.0: 541 | version "1.0.0" 542 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa" 543 | 544 | has-gulplog@^0.1.0: 545 | version "0.1.0" 546 | resolved "https://registry.yarnpkg.com/has-gulplog/-/has-gulplog-0.1.0.tgz#6414c82913697da51590397dafb12f22967811ce" 547 | dependencies: 548 | sparkles "^1.0.0" 549 | 550 | hoek@2.x.x: 551 | version "2.16.3" 552 | resolved "https://registry.yarnpkg.com/hoek/-/hoek-2.16.3.tgz#20bb7403d3cea398e91dc4710a8ff1b8274a25ed" 553 | 554 | hosted-git-info@^2.1.4: 555 | version "2.1.5" 556 | resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.1.5.tgz#0ba81d90da2e25ab34a332e6ec77936e1598118b" 557 | 558 | imurmurhash@^0.1.4: 559 | version "0.1.4" 560 | resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" 561 | 562 | indent-string@^2.1.0: 563 | version "2.1.0" 564 | resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-2.1.0.tgz#8e2d48348742121b4a8218b7a137e9a52049dc80" 565 | dependencies: 566 | repeating "^2.0.0" 567 | 568 | inflight@^1.0.4: 569 | version "1.0.6" 570 | resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" 571 | dependencies: 572 | once "^1.3.0" 573 | wrappy "1" 574 | 575 | inherits@2, inherits@~2.0.1: 576 | version "2.0.3" 577 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" 578 | 579 | ini@~1.3.0: 580 | version "1.3.4" 581 | resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.4.tgz#0537cb79daf59b59a1a517dff706c86ec039162e" 582 | 583 | interpret@^1.0.0: 584 | version "1.0.1" 585 | resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.0.1.tgz#d579fb7f693b858004947af39fa0db49f795602c" 586 | 587 | is-arrayish@^0.2.1: 588 | version "0.2.1" 589 | resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" 590 | 591 | is-builtin-module@^1.0.0: 592 | version "1.0.0" 593 | resolved "https://registry.yarnpkg.com/is-builtin-module/-/is-builtin-module-1.0.0.tgz#540572d34f7ac3119f8f76c30cbc1b1e037affbe" 594 | dependencies: 595 | builtin-modules "^1.0.0" 596 | 597 | is-callable@^1.1.1, is-callable@^1.1.3: 598 | version "1.1.3" 599 | resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.3.tgz#86eb75392805ddc33af71c92a0eedf74ee7604b2" 600 | 601 | is-date-object@^1.0.1: 602 | version "1.0.1" 603 | resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.1.tgz#9aa20eb6aeebbff77fbd33e74ca01b33581d3a16" 604 | 605 | is-finite@^1.0.0: 606 | version "1.0.2" 607 | resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.0.2.tgz#cc6677695602be550ef11e8b4aa6305342b6d0aa" 608 | dependencies: 609 | number-is-nan "^1.0.0" 610 | 611 | is-fullwidth-code-point@^1.0.0: 612 | version "1.0.0" 613 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" 614 | dependencies: 615 | number-is-nan "^1.0.0" 616 | 617 | is-npm@^1.0.0: 618 | version "1.0.0" 619 | resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-1.0.0.tgz#f2fb63a65e4905b406c86072765a1a4dc793b9f4" 620 | 621 | is-obj@^1.0.0: 622 | version "1.0.1" 623 | resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" 624 | 625 | is-redirect@^1.0.0: 626 | version "1.0.0" 627 | resolved "https://registry.yarnpkg.com/is-redirect/-/is-redirect-1.0.0.tgz#1d03dded53bd8db0f30c26e4f95d36fc7c87dc24" 628 | 629 | is-regex@^1.0.3: 630 | version "1.0.3" 631 | resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.3.tgz#0d55182bddf9f2fde278220aec3a75642c908637" 632 | 633 | is-retry-allowed@^1.0.0: 634 | version "1.1.0" 635 | resolved "https://registry.yarnpkg.com/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz#11a060568b67339444033d0125a61a20d564fb34" 636 | 637 | is-stream@^1.0.0: 638 | version "1.1.0" 639 | resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" 640 | 641 | is-symbol@^1.0.1: 642 | version "1.0.1" 643 | resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.1.tgz#3cc59f00025194b6ab2e38dbae6689256b660572" 644 | 645 | is-utf8@^0.2.0: 646 | version "0.2.1" 647 | resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" 648 | 649 | isarray@0.0.1: 650 | version "0.0.1" 651 | resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" 652 | 653 | isarray@~1.0.0: 654 | version "1.0.0" 655 | resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" 656 | 657 | isemail@1.x.x: 658 | version "1.2.0" 659 | resolved "https://registry.yarnpkg.com/isemail/-/isemail-1.2.0.tgz#be03df8cc3e29de4d2c5df6501263f1fa4595e9a" 660 | 661 | isexe@^1.1.1: 662 | version "1.1.2" 663 | resolved "https://registry.yarnpkg.com/isexe/-/isexe-1.1.2.tgz#36f3e22e60750920f5e7241a476a8c6a42275ad0" 664 | 665 | joi@^6.10.1: 666 | version "6.10.1" 667 | resolved "https://registry.yarnpkg.com/joi/-/joi-6.10.1.tgz#4d50c318079122000fe5f16af1ff8e1917b77e06" 668 | dependencies: 669 | hoek "2.x.x" 670 | isemail "1.x.x" 671 | moment "2.x.x" 672 | topo "1.x.x" 673 | 674 | js-tokens@^2.0.0: 675 | version "2.0.0" 676 | resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-2.0.0.tgz#79903f5563ee778cc1162e6dcf1a0027c97f9cb5" 677 | 678 | json3@3.3.2: 679 | version "3.3.2" 680 | resolved "https://registry.yarnpkg.com/json3/-/json3-3.3.2.tgz#3c0434743df93e2f5c42aee7b19bcb483575f4e1" 681 | 682 | jsonify@~0.0.0: 683 | version "0.0.0" 684 | resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" 685 | 686 | jsonwebtoken@7.1.9: 687 | version "7.1.9" 688 | resolved "https://registry.yarnpkg.com/jsonwebtoken/-/jsonwebtoken-7.1.9.tgz#847804e5258bec5a9499a8dc4a5e7a3bae08d58a" 689 | dependencies: 690 | joi "^6.10.1" 691 | jws "^3.1.3" 692 | lodash.once "^4.0.0" 693 | ms "^0.7.1" 694 | xtend "^4.0.1" 695 | 696 | jwa@^1.1.4: 697 | version "1.1.5" 698 | resolved "https://registry.yarnpkg.com/jwa/-/jwa-1.1.5.tgz#a0552ce0220742cd52e153774a32905c30e756e5" 699 | dependencies: 700 | base64url "2.0.0" 701 | buffer-equal-constant-time "1.0.1" 702 | ecdsa-sig-formatter "1.0.9" 703 | safe-buffer "^5.0.1" 704 | 705 | jws@^3.1.3: 706 | version "3.1.4" 707 | resolved "https://registry.yarnpkg.com/jws/-/jws-3.1.4.tgz#f9e8b9338e8a847277d6444b1464f61880e050a2" 708 | dependencies: 709 | base64url "^2.0.0" 710 | jwa "^1.1.4" 711 | safe-buffer "^5.0.1" 712 | 713 | latest-version@^2.0.0: 714 | version "2.0.0" 715 | resolved "https://registry.yarnpkg.com/latest-version/-/latest-version-2.0.0.tgz#56f8d6139620847b8017f8f1f4d78e211324168b" 716 | dependencies: 717 | package-json "^2.0.0" 718 | 719 | lazy-req@^1.1.0: 720 | version "1.1.0" 721 | resolved "https://registry.yarnpkg.com/lazy-req/-/lazy-req-1.1.0.tgz#bdaebead30f8d824039ce0ce149d4daa07ba1fac" 722 | 723 | load-json-file@^1.0.0: 724 | version "1.1.0" 725 | resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0" 726 | dependencies: 727 | graceful-fs "^4.1.2" 728 | parse-json "^2.2.0" 729 | pify "^2.0.0" 730 | pinkie-promise "^2.0.0" 731 | strip-bom "^2.0.0" 732 | 733 | lodash._baseassign@^3.0.0: 734 | version "3.2.0" 735 | resolved "https://registry.yarnpkg.com/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz#8c38a099500f215ad09e59f1722fd0c52bfe0a4e" 736 | dependencies: 737 | lodash._basecopy "^3.0.0" 738 | lodash.keys "^3.0.0" 739 | 740 | lodash._basecopy@^3.0.0: 741 | version "3.0.1" 742 | resolved "https://registry.yarnpkg.com/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz#8da0e6a876cf344c0ad8a54882111dd3c5c7ca36" 743 | 744 | lodash._basecreate@^3.0.0: 745 | version "3.0.3" 746 | resolved "https://registry.yarnpkg.com/lodash._basecreate/-/lodash._basecreate-3.0.3.tgz#1bc661614daa7fc311b7d03bf16806a0213cf821" 747 | 748 | lodash._basetostring@^3.0.0: 749 | version "3.0.1" 750 | resolved "https://registry.yarnpkg.com/lodash._basetostring/-/lodash._basetostring-3.0.1.tgz#d1861d877f824a52f669832dcaf3ee15566a07d5" 751 | 752 | lodash._basevalues@^3.0.0: 753 | version "3.0.0" 754 | resolved "https://registry.yarnpkg.com/lodash._basevalues/-/lodash._basevalues-3.0.0.tgz#5b775762802bde3d3297503e26300820fdf661b7" 755 | 756 | lodash._getnative@^3.0.0: 757 | version "3.9.1" 758 | resolved "https://registry.yarnpkg.com/lodash._getnative/-/lodash._getnative-3.9.1.tgz#570bc7dede46d61cdcde687d65d3eecbaa3aaff5" 759 | 760 | lodash._isiterateecall@^3.0.0: 761 | version "3.0.9" 762 | resolved "https://registry.yarnpkg.com/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz#5203ad7ba425fae842460e696db9cf3e6aac057c" 763 | 764 | lodash._reescape@^3.0.0: 765 | version "3.0.0" 766 | resolved "https://registry.yarnpkg.com/lodash._reescape/-/lodash._reescape-3.0.0.tgz#2b1d6f5dfe07c8a355753e5f27fac7f1cde1616a" 767 | 768 | lodash._reevaluate@^3.0.0: 769 | version "3.0.0" 770 | resolved "https://registry.yarnpkg.com/lodash._reevaluate/-/lodash._reevaluate-3.0.0.tgz#58bc74c40664953ae0b124d806996daca431e2ed" 771 | 772 | lodash._reinterpolate@^3.0.0: 773 | version "3.0.0" 774 | resolved "https://registry.yarnpkg.com/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz#0ccf2d89166af03b3663c796538b75ac6e114d9d" 775 | 776 | lodash._root@^3.0.0: 777 | version "3.0.1" 778 | resolved "https://registry.yarnpkg.com/lodash._root/-/lodash._root-3.0.1.tgz#fba1c4524c19ee9a5f8136b4609f017cf4ded692" 779 | 780 | lodash.create@3.1.1: 781 | version "3.1.1" 782 | resolved "https://registry.yarnpkg.com/lodash.create/-/lodash.create-3.1.1.tgz#d7f2849f0dbda7e04682bb8cd72ab022461debe7" 783 | dependencies: 784 | lodash._baseassign "^3.0.0" 785 | lodash._basecreate "^3.0.0" 786 | lodash._isiterateecall "^3.0.0" 787 | 788 | lodash.escape@^3.0.0: 789 | version "3.2.0" 790 | resolved "https://registry.yarnpkg.com/lodash.escape/-/lodash.escape-3.2.0.tgz#995ee0dc18c1b48cc92effae71a10aab5b487698" 791 | dependencies: 792 | lodash._root "^3.0.0" 793 | 794 | lodash.isarguments@^3.0.0: 795 | version "3.1.0" 796 | resolved "https://registry.yarnpkg.com/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz#2f573d85c6a24289ff00663b491c1d338ff3458a" 797 | 798 | lodash.isarray@^3.0.0: 799 | version "3.0.4" 800 | resolved "https://registry.yarnpkg.com/lodash.isarray/-/lodash.isarray-3.0.4.tgz#79e4eb88c36a8122af86f844aa9bcd851b5fbb55" 801 | 802 | lodash.keys@^3.0.0: 803 | version "3.1.2" 804 | resolved "https://registry.yarnpkg.com/lodash.keys/-/lodash.keys-3.1.2.tgz#4dbc0472b156be50a0b286855d1bd0b0c656098a" 805 | dependencies: 806 | lodash._getnative "^3.0.0" 807 | lodash.isarguments "^3.0.0" 808 | lodash.isarray "^3.0.0" 809 | 810 | lodash.once@^4.0.0: 811 | version "4.1.1" 812 | resolved "https://registry.yarnpkg.com/lodash.once/-/lodash.once-4.1.1.tgz#0dd3971213c7c56df880977d504c88fb471a97ac" 813 | 814 | lodash.restparam@^3.0.0: 815 | version "3.6.1" 816 | resolved "https://registry.yarnpkg.com/lodash.restparam/-/lodash.restparam-3.6.1.tgz#936a4e309ef330a7645ed4145986c85ae5b20805" 817 | 818 | lodash.template@^3.0.0: 819 | version "3.6.2" 820 | resolved "https://registry.yarnpkg.com/lodash.template/-/lodash.template-3.6.2.tgz#f8cdecc6169a255be9098ae8b0c53d378931d14f" 821 | dependencies: 822 | lodash._basecopy "^3.0.0" 823 | lodash._basetostring "^3.0.0" 824 | lodash._basevalues "^3.0.0" 825 | lodash._isiterateecall "^3.0.0" 826 | lodash._reinterpolate "^3.0.0" 827 | lodash.escape "^3.0.0" 828 | lodash.keys "^3.0.0" 829 | lodash.restparam "^3.0.0" 830 | lodash.templatesettings "^3.0.0" 831 | 832 | lodash.templatesettings@^3.0.0: 833 | version "3.1.1" 834 | resolved "https://registry.yarnpkg.com/lodash.templatesettings/-/lodash.templatesettings-3.1.1.tgz#fb307844753b66b9f1afa54e262c745307dba8e5" 835 | dependencies: 836 | lodash._reinterpolate "^3.0.0" 837 | lodash.escape "^3.0.0" 838 | 839 | loud-rejection@^1.0.0: 840 | version "1.6.0" 841 | resolved "https://registry.yarnpkg.com/loud-rejection/-/loud-rejection-1.6.0.tgz#5b46f80147edee578870f086d04821cf998e551f" 842 | dependencies: 843 | currently-unhandled "^0.4.1" 844 | signal-exit "^3.0.0" 845 | 846 | lowercase-keys@^1.0.0: 847 | version "1.0.0" 848 | resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.0.tgz#4e3366b39e7f5457e35f1324bdf6f88d0bfc7306" 849 | 850 | lru-cache@^4.0.1: 851 | version "4.0.2" 852 | resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.0.2.tgz#1d17679c069cda5d040991a09dbc2c0db377e55e" 853 | dependencies: 854 | pseudomap "^1.0.1" 855 | yallist "^2.0.0" 856 | 857 | magic-string@^0.19.0: 858 | version "0.19.0" 859 | resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.19.0.tgz#198948217254e3e0b93080e01146b7c73b2a06b2" 860 | dependencies: 861 | vlq "^0.2.1" 862 | 863 | make-error@^1.1.1: 864 | version "1.2.1" 865 | resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.2.1.tgz#9a6dfb4844423b9f145806728d05c6e935670e75" 866 | 867 | map-obj@^1.0.0, map-obj@^1.0.1: 868 | version "1.0.1" 869 | resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d" 870 | 871 | map-stream@~0.1.0: 872 | version "0.1.0" 873 | resolved "https://registry.yarnpkg.com/map-stream/-/map-stream-0.1.0.tgz#e56aa94c4c8055a16404a0674b78f215f7c8e194" 874 | 875 | meow@^3.3.0: 876 | version "3.7.0" 877 | resolved "https://registry.yarnpkg.com/meow/-/meow-3.7.0.tgz#72cb668b425228290abbfa856892587308a801fb" 878 | dependencies: 879 | camelcase-keys "^2.0.0" 880 | decamelize "^1.1.2" 881 | loud-rejection "^1.0.0" 882 | map-obj "^1.0.1" 883 | minimist "^1.1.3" 884 | normalize-package-data "^2.3.4" 885 | object-assign "^4.0.1" 886 | read-pkg-up "^1.0.1" 887 | redent "^1.0.0" 888 | trim-newlines "^1.0.0" 889 | 890 | "minimatch@2 || 3", minimatch@^3.0.2: 891 | version "3.0.3" 892 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.3.tgz#2a4e4090b96b2db06a9d7df01055a62a77c9b774" 893 | dependencies: 894 | brace-expansion "^1.0.0" 895 | 896 | minimist@0.0.8, minimist@~0.0.1: 897 | version "0.0.8" 898 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" 899 | 900 | minimist@^1.1.0, minimist@^1.1.3, minimist@^1.2.0: 901 | version "1.2.0" 902 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" 903 | 904 | mkdirp@0.5.1, mkdirp@^0.5.0, mkdirp@^0.5.1: 905 | version "0.5.1" 906 | resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" 907 | dependencies: 908 | minimist "0.0.8" 909 | 910 | mocha@^3.0.1: 911 | version "3.2.0" 912 | resolved "https://registry.yarnpkg.com/mocha/-/mocha-3.2.0.tgz#7dc4f45e5088075171a68896814e6ae9eb7a85e3" 913 | dependencies: 914 | browser-stdout "1.3.0" 915 | commander "2.9.0" 916 | debug "2.2.0" 917 | diff "1.4.0" 918 | escape-string-regexp "1.0.5" 919 | glob "7.0.5" 920 | growl "1.9.2" 921 | json3 "3.3.2" 922 | lodash.create "3.1.1" 923 | mkdirp "0.5.1" 924 | supports-color "3.1.2" 925 | 926 | moment@2.x.x: 927 | version "2.17.1" 928 | resolved "https://registry.yarnpkg.com/moment/-/moment-2.17.1.tgz#fed9506063f36b10f066c8b59a144d7faebe1d82" 929 | 930 | ms@0.7.1: 931 | version "0.7.1" 932 | resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.1.tgz#9cd13c03adbff25b65effde7ce864ee952017098" 933 | 934 | ms@^0.7.1: 935 | version "0.7.2" 936 | resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.2.tgz#ae25cf2512b3885a1d95d7f037868d8431124765" 937 | 938 | multipipe@^0.1.2: 939 | version "0.1.2" 940 | resolved "https://registry.yarnpkg.com/multipipe/-/multipipe-0.1.2.tgz#2a8f2ddf70eed564dff2d57f1e1a137d9f05078b" 941 | dependencies: 942 | duplexer2 "0.0.2" 943 | 944 | node-status-codes@^1.0.0: 945 | version "1.0.0" 946 | resolved "https://registry.yarnpkg.com/node-status-codes/-/node-status-codes-1.0.0.tgz#5ae5541d024645d32a58fcddc9ceecea7ae3ac2f" 947 | 948 | normalize-package-data@^2.3.2, normalize-package-data@^2.3.4: 949 | version "2.3.5" 950 | resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.3.5.tgz#8d924f142960e1777e7ffe170543631cc7cb02df" 951 | dependencies: 952 | hosted-git-info "^2.1.4" 953 | is-builtin-module "^1.0.0" 954 | semver "2 || 3 || 4 || 5" 955 | validate-npm-package-license "^3.0.1" 956 | 957 | npm-run-all@^3.1.2: 958 | version "3.1.2" 959 | resolved "https://registry.yarnpkg.com/npm-run-all/-/npm-run-all-3.1.2.tgz#c7e3faf4aa0a59bf0dcfc12601166151692171cf" 960 | dependencies: 961 | chalk "^1.1.3" 962 | cross-spawn "^4.0.0" 963 | minimatch "^3.0.2" 964 | object-assign "^4.0.1" 965 | pinkie-promise "^2.0.1" 966 | ps-tree "^1.0.1" 967 | read-pkg "^1.1.0" 968 | read-pkg-up "^1.0.1" 969 | shell-quote "^1.6.1" 970 | string.prototype.padend "^3.0.0" 971 | 972 | number-is-nan@^1.0.0: 973 | version "1.0.1" 974 | resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" 975 | 976 | object-assign@^3.0.0: 977 | version "3.0.0" 978 | resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-3.0.0.tgz#9bedd5ca0897949bca47e7ff408062d549f587f2" 979 | 980 | object-assign@^4.0.1: 981 | version "4.1.0" 982 | resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.0.tgz#7a3b3d0e98063d43f4c03f2e8ae6cd51a86883a0" 983 | 984 | object-keys@^1.0.8: 985 | version "1.0.11" 986 | resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.0.11.tgz#c54601778ad560f1142ce0e01bcca8b56d13426d" 987 | 988 | once@^1.3.0: 989 | version "1.4.0" 990 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" 991 | dependencies: 992 | wrappy "1" 993 | 994 | optimist@~0.6.0: 995 | version "0.6.1" 996 | resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686" 997 | dependencies: 998 | minimist "~0.0.1" 999 | wordwrap "~0.0.2" 1000 | 1001 | os-homedir@^1.0.0: 1002 | version "1.0.2" 1003 | resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" 1004 | 1005 | os-tmpdir@^1.0.0: 1006 | version "1.0.2" 1007 | resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" 1008 | 1009 | osenv@^0.1.0: 1010 | version "0.1.4" 1011 | resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.4.tgz#42fe6d5953df06c8064be6f176c3d05aaaa34644" 1012 | dependencies: 1013 | os-homedir "^1.0.0" 1014 | os-tmpdir "^1.0.0" 1015 | 1016 | package-json@^2.0.0: 1017 | version "2.4.0" 1018 | resolved "https://registry.yarnpkg.com/package-json/-/package-json-2.4.0.tgz#0d15bd67d1cbbddbb2ca222ff2edb86bcb31a8bb" 1019 | dependencies: 1020 | got "^5.0.0" 1021 | registry-auth-token "^3.0.1" 1022 | registry-url "^3.0.3" 1023 | semver "^5.1.0" 1024 | 1025 | parse-json@^2.1.0, parse-json@^2.2.0: 1026 | version "2.2.0" 1027 | resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" 1028 | dependencies: 1029 | error-ex "^1.2.0" 1030 | 1031 | path-exists@^2.0.0: 1032 | version "2.1.0" 1033 | resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b" 1034 | dependencies: 1035 | pinkie-promise "^2.0.0" 1036 | 1037 | path-is-absolute@^1.0.0: 1038 | version "1.0.1" 1039 | resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" 1040 | 1041 | path-type@^1.0.0: 1042 | version "1.1.0" 1043 | resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441" 1044 | dependencies: 1045 | graceful-fs "^4.1.2" 1046 | pify "^2.0.0" 1047 | pinkie-promise "^2.0.0" 1048 | 1049 | pause-stream@0.0.11: 1050 | version "0.0.11" 1051 | resolved "https://registry.yarnpkg.com/pause-stream/-/pause-stream-0.0.11.tgz#fe5a34b0cbce12b5aa6a2b403ee2e73b602f1445" 1052 | dependencies: 1053 | through "~2.3" 1054 | 1055 | pify@^2.0.0: 1056 | version "2.3.0" 1057 | resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" 1058 | 1059 | pinkie-promise@^2.0.0, pinkie-promise@^2.0.1: 1060 | version "2.0.1" 1061 | resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" 1062 | dependencies: 1063 | pinkie "^2.0.0" 1064 | 1065 | pinkie@^2.0.0, pinkie@^2.0.4: 1066 | version "2.0.4" 1067 | resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" 1068 | 1069 | prepend-http@^1.0.1: 1070 | version "1.0.4" 1071 | resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc" 1072 | 1073 | process-nextick-args@~1.0.6: 1074 | version "1.0.7" 1075 | resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3" 1076 | 1077 | ps-tree@^1.0.1: 1078 | version "1.1.0" 1079 | resolved "https://registry.yarnpkg.com/ps-tree/-/ps-tree-1.1.0.tgz#b421b24140d6203f1ed3c76996b4427b08e8c014" 1080 | dependencies: 1081 | event-stream "~3.3.0" 1082 | 1083 | pseudomap@^1.0.1: 1084 | version "1.0.2" 1085 | resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" 1086 | 1087 | rc@^1.0.1, rc@^1.1.6: 1088 | version "1.1.6" 1089 | resolved "https://registry.yarnpkg.com/rc/-/rc-1.1.6.tgz#43651b76b6ae53b5c802f1151fa3fc3b059969c9" 1090 | dependencies: 1091 | deep-extend "~0.4.0" 1092 | ini "~1.3.0" 1093 | minimist "^1.2.0" 1094 | strip-json-comments "~1.0.4" 1095 | 1096 | read-all-stream@^3.0.0: 1097 | version "3.1.0" 1098 | resolved "https://registry.yarnpkg.com/read-all-stream/-/read-all-stream-3.1.0.tgz#35c3e177f2078ef789ee4bfafa4373074eaef4fa" 1099 | dependencies: 1100 | pinkie-promise "^2.0.0" 1101 | readable-stream "^2.0.0" 1102 | 1103 | read-pkg-up@^1.0.1: 1104 | version "1.0.1" 1105 | resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02" 1106 | dependencies: 1107 | find-up "^1.0.0" 1108 | read-pkg "^1.0.0" 1109 | 1110 | read-pkg@^1.0.0, read-pkg@^1.1.0: 1111 | version "1.1.0" 1112 | resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28" 1113 | dependencies: 1114 | load-json-file "^1.0.0" 1115 | normalize-package-data "^2.3.2" 1116 | path-type "^1.0.0" 1117 | 1118 | readable-stream@^2.0.0, readable-stream@^2.0.2, readable-stream@^2.0.5, readable-stream@^2.1.5: 1119 | version "2.2.2" 1120 | resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.2.2.tgz#a9e6fec3c7dda85f8bb1b3ba7028604556fc825e" 1121 | dependencies: 1122 | buffer-shims "^1.0.0" 1123 | core-util-is "~1.0.0" 1124 | inherits "~2.0.1" 1125 | isarray "~1.0.0" 1126 | process-nextick-args "~1.0.6" 1127 | string_decoder "~0.10.x" 1128 | util-deprecate "~1.0.1" 1129 | 1130 | readable-stream@~1.1.9: 1131 | version "1.1.14" 1132 | resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9" 1133 | dependencies: 1134 | core-util-is "~1.0.0" 1135 | inherits "~2.0.1" 1136 | isarray "0.0.1" 1137 | string_decoder "~0.10.x" 1138 | 1139 | rechoir@^0.6.2: 1140 | version "0.6.2" 1141 | resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384" 1142 | dependencies: 1143 | resolve "^1.1.6" 1144 | 1145 | redent@^1.0.0: 1146 | version "1.0.0" 1147 | resolved "https://registry.yarnpkg.com/redent/-/redent-1.0.0.tgz#cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde" 1148 | dependencies: 1149 | indent-string "^2.1.0" 1150 | strip-indent "^1.0.1" 1151 | 1152 | registry-auth-token@^3.0.1: 1153 | version "3.1.0" 1154 | resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-3.1.0.tgz#997c08256e0c7999837b90e944db39d8a790276b" 1155 | dependencies: 1156 | rc "^1.1.6" 1157 | 1158 | registry-url@^3.0.3: 1159 | version "3.1.0" 1160 | resolved "https://registry.yarnpkg.com/registry-url/-/registry-url-3.1.0.tgz#3d4ef870f73dde1d77f0cf9a381432444e174942" 1161 | dependencies: 1162 | rc "^1.0.1" 1163 | 1164 | repeating@^2.0.0: 1165 | version "2.0.1" 1166 | resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda" 1167 | dependencies: 1168 | is-finite "^1.0.0" 1169 | 1170 | replace-ext@0.0.1: 1171 | version "0.0.1" 1172 | resolved "https://registry.yarnpkg.com/replace-ext/-/replace-ext-0.0.1.tgz#29bbd92078a739f0bcce2b4ee41e837953522924" 1173 | 1174 | resolve@1.1.7: 1175 | version "1.1.7" 1176 | resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" 1177 | 1178 | resolve@^1.1.6, resolve@^1.1.7: 1179 | version "1.2.0" 1180 | resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.2.0.tgz#9589c3f2f6149d1417a40becc1663db6ec6bc26c" 1181 | 1182 | rollup-plugin-commonjs@^6.0.0: 1183 | version "6.0.0" 1184 | resolved "https://registry.yarnpkg.com/rollup-plugin-commonjs/-/rollup-plugin-commonjs-6.0.0.tgz#af61d38ec6bc81c6a2c3b5199f520eed9a2368db" 1185 | dependencies: 1186 | acorn "^4.0.1" 1187 | estree-walker "^0.3.0" 1188 | magic-string "^0.19.0" 1189 | resolve "^1.1.7" 1190 | rollup-pluginutils "^1.5.1" 1191 | 1192 | rollup-plugin-node-resolve@^2.0.0: 1193 | version "2.0.0" 1194 | resolved "https://registry.yarnpkg.com/rollup-plugin-node-resolve/-/rollup-plugin-node-resolve-2.0.0.tgz#07e0ae94ac002a3ea36e8f33ca121d9f836b1309" 1195 | dependencies: 1196 | browser-resolve "^1.11.0" 1197 | builtin-modules "^1.1.0" 1198 | resolve "^1.1.6" 1199 | 1200 | rollup-pluginutils@^1.5.1: 1201 | version "1.5.2" 1202 | resolved "https://registry.yarnpkg.com/rollup-pluginutils/-/rollup-pluginutils-1.5.2.tgz#1e156e778f94b7255bfa1b3d0178be8f5c552408" 1203 | dependencies: 1204 | estree-walker "^0.2.1" 1205 | minimatch "^3.0.2" 1206 | 1207 | rollup@^0.37.0: 1208 | version "0.37.0" 1209 | resolved "https://registry.yarnpkg.com/rollup/-/rollup-0.37.0.tgz#759a51708ac08b027597babff171a026cf712d8d" 1210 | dependencies: 1211 | source-map-support "^0.4.0" 1212 | 1213 | rsvp@3.2.1: 1214 | version "3.2.1" 1215 | resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-3.2.1.tgz#07cb4a5df25add9e826ebc67dcc9fd89db27d84a" 1216 | 1217 | rxjs@^5.0.1: 1218 | version "5.0.1" 1219 | resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-5.0.1.tgz#3a69bdf9f0ca0a986303370d4708f72bdfac8356" 1220 | dependencies: 1221 | symbol-observable "^1.0.1" 1222 | 1223 | safe-buffer@^5.0.1: 1224 | version "5.0.1" 1225 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.0.1.tgz#d263ca54696cd8a306b5ca6551e92de57918fbe7" 1226 | 1227 | semver-diff@^2.0.0: 1228 | version "2.1.0" 1229 | resolved "https://registry.yarnpkg.com/semver-diff/-/semver-diff-2.1.0.tgz#4bbb8437c8d37e4b0cf1a68fd726ec6d645d6d36" 1230 | dependencies: 1231 | semver "^5.0.3" 1232 | 1233 | "semver@2 || 3 || 4 || 5", semver@^5.0.3, semver@^5.1.0: 1234 | version "5.3.0" 1235 | resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f" 1236 | 1237 | shell-quote@^1.6.1: 1238 | version "1.6.1" 1239 | resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.6.1.tgz#f4781949cce402697127430ea3b3c5476f481767" 1240 | dependencies: 1241 | array-filter "~0.0.0" 1242 | array-map "~0.0.0" 1243 | array-reduce "~0.0.0" 1244 | jsonify "~0.0.0" 1245 | 1246 | shelljs@^0.7.3: 1247 | version "0.7.5" 1248 | resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.7.5.tgz#2eef7a50a21e1ccf37da00df767ec69e30ad0675" 1249 | dependencies: 1250 | glob "^7.0.0" 1251 | interpret "^1.0.0" 1252 | rechoir "^0.6.2" 1253 | 1254 | shx@^0.2.1: 1255 | version "0.2.1" 1256 | resolved "https://registry.yarnpkg.com/shx/-/shx-0.2.1.tgz#d5f8c536e77e6b6ec83bd66f746ab300f1775ecf" 1257 | dependencies: 1258 | es6-object-assign "^1.0.3" 1259 | minimist "^1.2.0" 1260 | shelljs "^0.7.3" 1261 | 1262 | signal-exit@^3.0.0: 1263 | version "3.0.2" 1264 | resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" 1265 | 1266 | slide@^1.1.5: 1267 | version "1.1.6" 1268 | resolved "https://registry.yarnpkg.com/slide/-/slide-1.1.6.tgz#56eb027d65b4d2dce6cb2e2d32c4d4afc9e1d707" 1269 | 1270 | source-list-map@~0.1.7: 1271 | version "0.1.7" 1272 | resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-0.1.7.tgz#d4b5ce2a46535c72c7e8527c71a77d250618172e" 1273 | 1274 | source-map-support@^0.4.0: 1275 | version "0.4.6" 1276 | resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.6.tgz#32552aa64b458392a85eab3b0b5ee61527167aeb" 1277 | dependencies: 1278 | source-map "^0.5.3" 1279 | 1280 | source-map@^0.5.3: 1281 | version "0.5.6" 1282 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.6.tgz#75ce38f52bf0733c5a7f0c118d81334a2bb5f412" 1283 | 1284 | source-map@~0.4.1: 1285 | version "0.4.4" 1286 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.4.4.tgz#eba4f5da9c0dc999de68032d8b4f76173652036b" 1287 | dependencies: 1288 | amdefine ">=0.0.4" 1289 | 1290 | sparkles@^1.0.0: 1291 | version "1.0.0" 1292 | resolved "https://registry.yarnpkg.com/sparkles/-/sparkles-1.0.0.tgz#1acbbfb592436d10bbe8f785b7cc6f82815012c3" 1293 | 1294 | spdx-correct@~1.0.0: 1295 | version "1.0.2" 1296 | resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-1.0.2.tgz#4b3073d933ff51f3912f03ac5519498a4150db40" 1297 | dependencies: 1298 | spdx-license-ids "^1.0.2" 1299 | 1300 | spdx-expression-parse@~1.0.0: 1301 | version "1.0.4" 1302 | resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz#9bdf2f20e1f40ed447fbe273266191fced51626c" 1303 | 1304 | spdx-license-ids@^1.0.2: 1305 | version "1.2.2" 1306 | resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz#c9df7a3424594ade6bd11900d596696dc06bac57" 1307 | 1308 | split@0.3: 1309 | version "0.3.3" 1310 | resolved "https://registry.yarnpkg.com/split/-/split-0.3.3.tgz#cd0eea5e63a211dfff7eb0f091c4133e2d0dd28f" 1311 | dependencies: 1312 | through "2" 1313 | 1314 | sprintf-js@^1.0.3: 1315 | version "1.0.3" 1316 | resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" 1317 | 1318 | stream-combiner@~0.0.4: 1319 | version "0.0.4" 1320 | resolved "https://registry.yarnpkg.com/stream-combiner/-/stream-combiner-0.0.4.tgz#4d5e433c185261dde623ca3f44c586bcf5c4ad14" 1321 | dependencies: 1322 | duplexer "~0.1.1" 1323 | 1324 | string-width@^1.0.1: 1325 | version "1.0.2" 1326 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" 1327 | dependencies: 1328 | code-point-at "^1.0.0" 1329 | is-fullwidth-code-point "^1.0.0" 1330 | strip-ansi "^3.0.0" 1331 | 1332 | string.prototype.padend@^3.0.0: 1333 | version "3.0.0" 1334 | resolved "https://registry.yarnpkg.com/string.prototype.padend/-/string.prototype.padend-3.0.0.tgz#f3aaef7c1719f170c5eab1c32bf780d96e21f2f0" 1335 | dependencies: 1336 | define-properties "^1.1.2" 1337 | es-abstract "^1.4.3" 1338 | function-bind "^1.0.2" 1339 | 1340 | string_decoder@~0.10.x: 1341 | version "0.10.31" 1342 | resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" 1343 | 1344 | strip-ansi@^3.0.0: 1345 | version "3.0.1" 1346 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" 1347 | dependencies: 1348 | ansi-regex "^2.0.0" 1349 | 1350 | strip-bom@^2.0.0: 1351 | version "2.0.0" 1352 | resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e" 1353 | dependencies: 1354 | is-utf8 "^0.2.0" 1355 | 1356 | strip-indent@^1.0.1: 1357 | version "1.0.1" 1358 | resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-1.0.1.tgz#0c7962a6adefa7bbd4ac366460a638552ae1a0a2" 1359 | dependencies: 1360 | get-stdin "^4.0.1" 1361 | 1362 | strip-json-comments@^2.0.0: 1363 | version "2.0.1" 1364 | resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" 1365 | 1366 | strip-json-comments@~1.0.4: 1367 | version "1.0.4" 1368 | resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-1.0.4.tgz#1e15fbcac97d3ee99bf2d73b4c656b082bbafb91" 1369 | 1370 | supports-color@3.1.2: 1371 | version "3.1.2" 1372 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.1.2.tgz#72a262894d9d408b956ca05ff37b2ed8a6e2a2d5" 1373 | dependencies: 1374 | has-flag "^1.0.0" 1375 | 1376 | supports-color@^2.0.0: 1377 | version "2.0.0" 1378 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" 1379 | 1380 | symbol-observable@^1.0.1: 1381 | version "1.0.4" 1382 | resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.0.4.tgz#29bf615d4aa7121bdd898b22d4b3f9bc4e2aa03d" 1383 | 1384 | through2@^2.0.0: 1385 | version "2.0.3" 1386 | resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.3.tgz#0004569b37c7c74ba39c43f3ced78d1ad94140be" 1387 | dependencies: 1388 | readable-stream "^2.1.5" 1389 | xtend "~4.0.1" 1390 | 1391 | through@2, through@~2.3, through@~2.3.1: 1392 | version "2.3.8" 1393 | resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" 1394 | 1395 | time-stamp@^1.0.0: 1396 | version "1.0.1" 1397 | resolved "https://registry.yarnpkg.com/time-stamp/-/time-stamp-1.0.1.tgz#9f4bd23559c9365966f3302dbba2b07c6b99b151" 1398 | 1399 | timed-out@^3.0.0: 1400 | version "3.1.0" 1401 | resolved "https://registry.yarnpkg.com/timed-out/-/timed-out-3.1.0.tgz#43b98b14bb712c9161c28f4dc1f3068d67a04ec2" 1402 | 1403 | topo@1.x.x: 1404 | version "1.1.0" 1405 | resolved "https://registry.yarnpkg.com/topo/-/topo-1.1.0.tgz#e9d751615d1bb87dc865db182fa1ca0a5ef536d5" 1406 | dependencies: 1407 | hoek "2.x.x" 1408 | 1409 | trim-newlines@^1.0.0: 1410 | version "1.0.0" 1411 | resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613" 1412 | 1413 | ts-node@^1.2.2: 1414 | version "1.7.2" 1415 | resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-1.7.2.tgz#d67bbc5c48fde16c244debbfe81b020587369a02" 1416 | dependencies: 1417 | arrify "^1.0.0" 1418 | chalk "^1.1.1" 1419 | diff "^3.1.0" 1420 | make-error "^1.1.1" 1421 | minimist "^1.2.0" 1422 | mkdirp "^0.5.1" 1423 | pinkie "^2.0.4" 1424 | source-map-support "^0.4.0" 1425 | tsconfig "^5.0.2" 1426 | v8flags "^2.0.11" 1427 | xtend "^4.0.0" 1428 | yn "^1.2.0" 1429 | 1430 | tsconfig@^5.0.2: 1431 | version "5.0.3" 1432 | resolved "https://registry.yarnpkg.com/tsconfig/-/tsconfig-5.0.3.tgz#5f4278e701800967a8fc383fd19648878f2a6e3a" 1433 | dependencies: 1434 | any-promise "^1.3.0" 1435 | parse-json "^2.2.0" 1436 | strip-bom "^2.0.0" 1437 | strip-json-comments "^2.0.0" 1438 | 1439 | tslib@^1.2.0: 1440 | version "1.2.0" 1441 | resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.2.0.tgz#074fb171034594bdba4c4dbb197c26e4a0b88383" 1442 | 1443 | tslint@4.1.1: 1444 | version "4.1.1" 1445 | resolved "https://registry.yarnpkg.com/tslint/-/tslint-4.1.1.tgz#ae15c9478d92eb2f01d5102c69c493ec02d7e7e4" 1446 | dependencies: 1447 | babel-code-frame "^6.20.0" 1448 | colors "^1.1.2" 1449 | diff "^3.0.1" 1450 | findup-sync "~0.3.0" 1451 | glob "^7.1.1" 1452 | optimist "~0.6.0" 1453 | resolve "^1.1.7" 1454 | underscore.string "^3.3.4" 1455 | update-notifier "^1.0.2" 1456 | 1457 | type-detect@0.1.1: 1458 | version "0.1.1" 1459 | resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-0.1.1.tgz#0ba5ec2a885640e470ea4e8505971900dac58822" 1460 | 1461 | type-detect@^1.0.0: 1462 | version "1.0.0" 1463 | resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-1.0.0.tgz#762217cc06db258ec48908a1298e8b95121e8ea2" 1464 | 1465 | typescript@2.1.4: 1466 | version "2.1.4" 1467 | resolved "https://registry.yarnpkg.com/typescript/-/typescript-2.1.4.tgz#b53b69fb841126acb1dd4b397d21daba87572251" 1468 | 1469 | underscore.string@^3.3.4: 1470 | version "3.3.4" 1471 | resolved "https://registry.yarnpkg.com/underscore.string/-/underscore.string-3.3.4.tgz#2c2a3f9f83e64762fdc45e6ceac65142864213db" 1472 | dependencies: 1473 | sprintf-js "^1.0.3" 1474 | util-deprecate "^1.0.2" 1475 | 1476 | unzip-response@^1.0.2: 1477 | version "1.0.2" 1478 | resolved "https://registry.yarnpkg.com/unzip-response/-/unzip-response-1.0.2.tgz#b984f0877fc0a89c2c773cc1ef7b5b232b5b06fe" 1479 | 1480 | update-notifier@^1.0.2: 1481 | version "1.0.3" 1482 | resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-1.0.3.tgz#8f92c515482bd6831b7c93013e70f87552c7cf5a" 1483 | dependencies: 1484 | boxen "^0.6.0" 1485 | chalk "^1.0.0" 1486 | configstore "^2.0.0" 1487 | is-npm "^1.0.0" 1488 | latest-version "^2.0.0" 1489 | lazy-req "^1.1.0" 1490 | semver-diff "^2.0.0" 1491 | xdg-basedir "^2.0.0" 1492 | 1493 | url-parse-lax@^1.0.0: 1494 | version "1.0.0" 1495 | resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-1.0.0.tgz#7af8f303645e9bd79a272e7a14ac68bc0609da73" 1496 | dependencies: 1497 | prepend-http "^1.0.1" 1498 | 1499 | user-home@^1.1.1: 1500 | version "1.1.1" 1501 | resolved "https://registry.yarnpkg.com/user-home/-/user-home-1.1.1.tgz#2b5be23a32b63a7c9deb8d0f28d485724a3df190" 1502 | 1503 | util-deprecate@^1.0.2, util-deprecate@~1.0.1: 1504 | version "1.0.2" 1505 | resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" 1506 | 1507 | uuid@^2.0.1: 1508 | version "2.0.3" 1509 | resolved "https://registry.yarnpkg.com/uuid/-/uuid-2.0.3.tgz#67e2e863797215530dff318e5bf9dcebfd47b21a" 1510 | 1511 | v8flags@^2.0.11: 1512 | version "2.0.11" 1513 | resolved "https://registry.yarnpkg.com/v8flags/-/v8flags-2.0.11.tgz#bca8f30f0d6d60612cc2c00641e6962d42ae6881" 1514 | dependencies: 1515 | user-home "^1.1.1" 1516 | 1517 | validate-npm-package-license@^3.0.1: 1518 | version "3.0.1" 1519 | resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz#2804babe712ad3379459acfbe24746ab2c303fbc" 1520 | dependencies: 1521 | spdx-correct "~1.0.0" 1522 | spdx-expression-parse "~1.0.0" 1523 | 1524 | vinyl@^0.5.0: 1525 | version "0.5.3" 1526 | resolved "https://registry.yarnpkg.com/vinyl/-/vinyl-0.5.3.tgz#b0455b38fc5e0cf30d4325132e461970c2091cde" 1527 | dependencies: 1528 | clone "^1.0.0" 1529 | clone-stats "^0.0.1" 1530 | replace-ext "0.0.1" 1531 | 1532 | vlq@^0.2.1: 1533 | version "0.2.1" 1534 | resolved "https://registry.yarnpkg.com/vlq/-/vlq-0.2.1.tgz#14439d711891e682535467f8587c5630e4222a6c" 1535 | 1536 | webpack-core@^0.6.8: 1537 | version "0.6.9" 1538 | resolved "https://registry.yarnpkg.com/webpack-core/-/webpack-core-0.6.9.tgz#fc571588c8558da77be9efb6debdc5a3b172bdc2" 1539 | dependencies: 1540 | source-list-map "~0.1.7" 1541 | source-map "~0.4.1" 1542 | 1543 | websocket-driver@>=0.5.1: 1544 | version "0.6.5" 1545 | resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.6.5.tgz#5cb2556ceb85f4373c6d8238aa691c8454e13a36" 1546 | dependencies: 1547 | websocket-extensions ">=0.1.1" 1548 | 1549 | websocket-extensions@>=0.1.1: 1550 | version "0.1.1" 1551 | resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.1.tgz#76899499c184b6ef754377c2dbb0cd6cb55d29e7" 1552 | 1553 | which@^1.2.9: 1554 | version "1.2.12" 1555 | resolved "https://registry.yarnpkg.com/which/-/which-1.2.12.tgz#de67b5e450269f194909ef23ece4ebe416fa1192" 1556 | dependencies: 1557 | isexe "^1.1.1" 1558 | 1559 | widest-line@^1.0.0: 1560 | version "1.0.0" 1561 | resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-1.0.0.tgz#0c09c85c2a94683d0d7eaf8ee097d564bf0e105c" 1562 | dependencies: 1563 | string-width "^1.0.1" 1564 | 1565 | wordwrap@~0.0.2: 1566 | version "0.0.3" 1567 | resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107" 1568 | 1569 | wrappy@1: 1570 | version "1.0.2" 1571 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" 1572 | 1573 | write-file-atomic@^1.1.2: 1574 | version "1.2.0" 1575 | resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-1.2.0.tgz#14c66d4e4cb3ca0565c28cf3b7a6f3e4d5938fab" 1576 | dependencies: 1577 | graceful-fs "^4.1.2" 1578 | imurmurhash "^0.1.4" 1579 | slide "^1.1.5" 1580 | 1581 | xdg-basedir@^2.0.0: 1582 | version "2.0.0" 1583 | resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-2.0.0.tgz#edbc903cc385fc04523d966a335504b5504d1bd2" 1584 | dependencies: 1585 | os-homedir "^1.0.0" 1586 | 1587 | xmlhttprequest@1.8.0: 1588 | version "1.8.0" 1589 | resolved "https://registry.yarnpkg.com/xmlhttprequest/-/xmlhttprequest-1.8.0.tgz#67fe075c5c24fef39f9d65f5f7b7fe75171968fc" 1590 | 1591 | xtend@^4.0.0, xtend@^4.0.1, xtend@~4.0.1: 1592 | version "4.0.1" 1593 | resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af" 1594 | 1595 | yallist@^2.0.0: 1596 | version "2.0.0" 1597 | resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.0.0.tgz#306c543835f09ee1a4cb23b7bce9ab341c91cdd4" 1598 | 1599 | yn@^1.2.0: 1600 | version "1.2.0" 1601 | resolved "https://registry.yarnpkg.com/yn/-/yn-1.2.0.tgz#d237a4c533f279b2b89d3acac2db4b8c795e4a63" 1602 | --------------------------------------------------------------------------------