From 54054aaa55f6dc3a08b91b824e54c4bdc4a65cbc Mon Sep 17 00:00:00 2001 From: David East Date: Fri, 28 Jul 2017 13:32:10 -0600 Subject: [PATCH 01/14] fix(modules): WIP repacking of modules --- package.json | 1 + src/angularfire2_worker_app.ts | 9 ---- src/angularfire2_worker_render.ts | 17 ------- src/app/index.ts | 1 - src/app/package.json | 1 - src/auth.ts | 2 - src/auth/auth.module.ts | 3 +- src/auth/auth.spec.ts | 2 +- src/auth/auth.ts | 2 +- src/auth/index.ts | 2 + src/auth/tsconfig-build.json | 30 ++++++++++++ src/auth/tsconfig-esm.json | 7 +++ src/{ => core}/angularfire2.spec.ts | 2 +- src/{ => core}/angularfire2.ts | 15 ++++-- src/{app => core}/firebase.app.module.ts | 2 +- src/core/index.ts | 1 + src/core/package.json | 29 +++++++++++ src/core/tsconfig-build.json | 30 ++++++++++++ src/core/tsconfig-esm.json | 7 +++ src/database.ts | 7 --- src/database/database.module.ts | 2 +- src/database/database.ts | 2 +- src/database/index.ts | 7 +++ src/database/tsconfig-build.json | 0 src/index.ts | 1 - src/interfaces.ts | 11 +---- src/test-root.ts | 2 +- tools/build.js | 61 ++++++++++++++++++++++++ 28 files changed, 195 insertions(+), 61 deletions(-) delete mode 100644 src/angularfire2_worker_app.ts delete mode 100644 src/angularfire2_worker_render.ts delete mode 100644 src/app/index.ts delete mode 100644 src/app/package.json delete mode 100644 src/auth.ts create mode 100644 src/auth/index.ts create mode 100644 src/auth/tsconfig-build.json create mode 100644 src/auth/tsconfig-esm.json rename src/{ => core}/angularfire2.spec.ts (98%) rename src/{ => core}/angularfire2.ts (73%) rename src/{app => core}/firebase.app.module.ts (94%) create mode 100644 src/core/index.ts create mode 100644 src/core/package.json create mode 100644 src/core/tsconfig-build.json create mode 100644 src/core/tsconfig-esm.json delete mode 100644 src/database.ts create mode 100644 src/database/index.ts create mode 100644 src/database/tsconfig-build.json delete mode 100644 src/index.ts create mode 100644 tools/build.js diff --git a/package.json b/package.json index b4e71885c..d039cd69a 100644 --- a/package.json +++ b/package.json @@ -52,6 +52,7 @@ "conventional-changelog-cli": "^1.2.0", "es6-module-loader": "^0.17.10", "es6-shim": "^0.35.0", + "fs-extra": "^4.0.0", "gulp": "^3.9.0", "gulp-jasmine": "^2.2.1", "gulp-typescript": "^2.10.0", diff --git a/src/angularfire2_worker_app.ts b/src/angularfire2_worker_app.ts deleted file mode 100644 index fa17337de..000000000 --- a/src/angularfire2_worker_app.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { provide } from '@angular/core'; -import { COMMON_PROVIDERS } from './angularfire2'; -import { AuthBackend } from './auth/index'; -import { WebWorkerFirebaseAuth } from './providers/web_workers/worker/auth'; - -export const WORKER_APP_FIREBASE_PROVIDERS: any[] = [ - COMMON_PROVIDERS, - provide(AuthBackend, {useClass: WebWorkerFirebaseAuth}) -]; diff --git a/src/angularfire2_worker_render.ts b/src/angularfire2_worker_render.ts deleted file mode 100644 index d1c0fa7f2..000000000 --- a/src/angularfire2_worker_render.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { provide } from '@angular/core'; -import { COMMON_PROVIDERS } from './angularfire2'; -import { FirebaseSdkAuthBackend } from './auth/index'; -import { WebWorkerFirebaseAuth } from './providers/web_workers/worker/auth'; -import { FirebaseApp } from './tokens'; -import { MessageBasedFirebaseAuth } from './providers/web_workers/ui/auth'; - -export const WORKER_RENDER_FIREBASE_PROVIDERS: any[] = [ - COMMON_PROVIDERS, - provide(FirebaseSdkAuthBackend, { - useFactory: (app) => new FirebaseSdkAuthBackend(app, true), - deps: [FirebaseApp] - }), - MessageBasedFirebaseAuth -]; - -export {MessageBasedFirebaseAuth} from './providers/web_workers/ui/auth'; diff --git a/src/app/index.ts b/src/app/index.ts deleted file mode 100644 index c71ec6173..000000000 --- a/src/app/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './firebase.app.module'; \ No newline at end of file diff --git a/src/app/package.json b/src/app/package.json deleted file mode 100644 index 65be0782f..000000000 --- a/src/app/package.json +++ /dev/null @@ -1 +0,0 @@ -{ "main": "../bundles/angularfire2.umd.js" } \ No newline at end of file diff --git a/src/auth.ts b/src/auth.ts deleted file mode 100644 index 6980c3154..000000000 --- a/src/auth.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from './auth/auth'; -export * from './auth/auth.module'; diff --git a/src/auth/auth.module.ts b/src/auth/auth.module.ts index d104f53dd..32cb1a6d4 100644 --- a/src/auth/auth.module.ts +++ b/src/auth/auth.module.ts @@ -1,8 +1,7 @@ import { NgModule, NgZone } from '@angular/core'; import * as firebase from 'firebase/app'; import 'firebase/auth'; -import { FirebaseApp } from '../app/index'; -import { AngularFireModule } from '../angularfire2'; +import { FirebaseApp, AngularFireModule } from '../core'; import { AngularFireAuth } from './auth'; export function _getAngularFireAuth(app: FirebaseApp) { diff --git a/src/auth/auth.spec.ts b/src/auth/auth.spec.ts index 9e98e40de..caf3dd9b2 100644 --- a/src/auth/auth.spec.ts +++ b/src/auth/auth.spec.ts @@ -7,7 +7,7 @@ import { TestBed, inject } from '@angular/core/testing'; import { _do } from 'rxjs/operator/do'; import { take } from 'rxjs/operator/take'; import { skip } from 'rxjs/operator/skip'; -import { FirebaseApp, FirebaseAppConfig, AngularFireModule } from '../angularfire2'; +import { FirebaseApp, FirebaseAppConfig, AngularFireModule } from '../core'; import { AngularFireAuth } from './auth'; import { AngularFireAuthModule } from './auth.module'; import { COMMON_CONFIG } from '../test-config'; diff --git a/src/auth/auth.ts b/src/auth/auth.ts index 23d3888fd..57e4b18a0 100644 --- a/src/auth/auth.ts +++ b/src/auth/auth.ts @@ -6,7 +6,7 @@ import { Auth } from '../interfaces'; import { Observable } from 'rxjs/Observable'; import { Observer } from 'rxjs/Observer'; import { observeOn } from 'rxjs/operator/observeOn'; -import { FirebaseApp } from '../app/index'; +import { FirebaseApp } from '../core'; @Injectable() export class AngularFireAuth { diff --git a/src/auth/index.ts b/src/auth/index.ts new file mode 100644 index 000000000..f570236a4 --- /dev/null +++ b/src/auth/index.ts @@ -0,0 +1,2 @@ +export * from './auth'; +export * from './auth.module'; diff --git a/src/auth/tsconfig-build.json b/src/auth/tsconfig-build.json new file mode 100644 index 000000000..0b44358a0 --- /dev/null +++ b/src/auth/tsconfig-build.json @@ -0,0 +1,30 @@ +{ + "compilerOptions": { + "experimentalDecorators": true, + "emitDecoratorMetadata": true, + "module": "es2015", + "target": "es2015", + "noImplicitAny": false, + "outDir": "../../dist/packages/auth", + "rootDir": ".", + "sourceMap": true, + "inlineSources": true, + "declaration": true, + "removeComments": true, + "strictNullChecks": true, + "lib": [ + "es2015", + "dom" + ], + "skipLibCheck": true, + "moduleResolution": "node" + }, + "files": [ + "index.ts", + "../../node_modules/zone.js/dist/zone.js.d.ts" + ], + "angularCompilerOptions": { + "skipTemplateCodegen": true, + "strictMetadataEmit": true + } +} diff --git a/src/auth/tsconfig-esm.json b/src/auth/tsconfig-esm.json new file mode 100644 index 000000000..bec875a77 --- /dev/null +++ b/src/auth/tsconfig-esm.json @@ -0,0 +1,7 @@ +{ + "extends": "tsconfig-build.json", + "compilerOptions": { + "target": "es5", + "outDir": "../../dist/packages-dist/auth" + } +} diff --git a/src/angularfire2.spec.ts b/src/core/angularfire2.spec.ts similarity index 98% rename from src/angularfire2.spec.ts rename to src/core/angularfire2.spec.ts index e9a29f8ac..9992bcf7d 100644 --- a/src/angularfire2.spec.ts +++ b/src/core/angularfire2.spec.ts @@ -3,7 +3,7 @@ import { TestBed, inject, withModule, async } from '@angular/core/testing'; import { ReflectiveInjector, Provider, PlatformRef, NgModule, Compiler, ApplicationRef, CompilerFactory } from '@angular/core'; import { FirebaseApp, FirebaseAppConfig, AngularFireModule } from './angularfire2'; import { Subscription } from 'rxjs/Subscription'; -import { COMMON_CONFIG } from './test-config'; +import { COMMON_CONFIG } from '../test-config'; import { BrowserModule } from '@angular/platform-browser'; describe('angularfire', () => { diff --git a/src/angularfire2.ts b/src/core/angularfire2.ts similarity index 73% rename from src/angularfire2.ts rename to src/core/angularfire2.ts index 2930e86c2..078de834f 100644 --- a/src/angularfire2.ts +++ b/src/core/angularfire2.ts @@ -1,9 +1,16 @@ import * as firebase from 'firebase/app'; -import * as utils from './utils'; -import { FirebaseAppConfigToken, FirebaseApp, _firebaseAppFactory } from './app/index'; -import { FirebaseListFactoryOpts, FirebaseObjectFactoryOpts, FirebaseAppConfig } from './interfaces'; +import { FirebaseAppConfigToken, FirebaseApp, _firebaseAppFactory } from './firebase.app.module'; import { Injectable, InjectionToken, OpaqueToken, NgModule } from '@angular/core'; +export interface FirebaseAppConfig { + apiKey?: string; + authDomain?: string; + databaseURL?: string; + storageBucket?: string; + messagingSenderId?: string; + projectId?: string; +} + const FirebaseAppName = new InjectionToken('FirebaseAppName'); export const FirebaseAppProvider = { @@ -27,4 +34,4 @@ export class AngularFireModule { } } -export { FirebaseApp, FirebaseAppName, FirebaseAppConfigToken, FirebaseAppConfig }; +export { FirebaseApp, FirebaseAppName, FirebaseAppConfigToken }; diff --git a/src/app/firebase.app.module.ts b/src/core/firebase.app.module.ts similarity index 94% rename from src/app/firebase.app.module.ts rename to src/core/firebase.app.module.ts index 6a356e21e..c2173d224 100644 --- a/src/app/firebase.app.module.ts +++ b/src/core/firebase.app.module.ts @@ -1,5 +1,5 @@ import { InjectionToken, } from '@angular/core'; -import { FirebaseAppConfig } from '../interfaces'; +import { FirebaseAppConfig } from './'; import * as firebase from 'firebase/app'; export const FirebaseAppConfigToken = new InjectionToken('FirebaseAppConfigToken'); diff --git a/src/core/index.ts b/src/core/index.ts new file mode 100644 index 000000000..672f3659c --- /dev/null +++ b/src/core/index.ts @@ -0,0 +1 @@ +export * from './angularfire2'; \ No newline at end of file diff --git a/src/core/package.json b/src/core/package.json new file mode 100644 index 000000000..1cbcf03fc --- /dev/null +++ b/src/core/package.json @@ -0,0 +1,29 @@ +{ + "name": "angularfire2", + "version": "4.0.0-rc.1", + "description": "The core module", + "main": "../../bundles/core.umd.js", + "module": "index.es5.js", + "es2015": "index.js", + "keywords": [ + "angular", + "firebase", + "rxjs" + ], + "repository": { + "type": "git", + "url": "git+https://github.com/angular/angularfire2.git" + }, + "author": "angular,firebase", + "license": "MIT", + "peerDependencies": { + "@angular/common": "^4.0.0", + "@angular/core": "^4.0.0", + "@angular/platform-browser": "^4.0.0", + "@angular/platform-browser-dynamic": "^4.0.0", + "firebase": "^4.0.0", + "rxjs": "^5.0.1", + "zone.js": "^0.8.0" + }, + "typings": "index.d.ts" +} diff --git a/src/core/tsconfig-build.json b/src/core/tsconfig-build.json new file mode 100644 index 000000000..8c77a5c48 --- /dev/null +++ b/src/core/tsconfig-build.json @@ -0,0 +1,30 @@ +{ + "compilerOptions": { + "experimentalDecorators": true, + "emitDecoratorMetadata": true, + "module": "es2015", + "target": "es2015", + "noImplicitAny": false, + "outDir": "../../dist/packages/core", + "rootDir": ".", + "sourceMap": true, + "inlineSources": true, + "declaration": true, + "removeComments": true, + "strictNullChecks": true, + "lib": [ + "es2015", + "dom" + ], + "skipLibCheck": true, + "moduleResolution": "node" + }, + "files": [ + "index.ts", + "../../node_modules/zone.js/dist/zone.js.d.ts" + ], + "angularCompilerOptions": { + "skipTemplateCodegen": true, + "strictMetadataEmit": true + } +} diff --git a/src/core/tsconfig-esm.json b/src/core/tsconfig-esm.json new file mode 100644 index 000000000..e5c74eb63 --- /dev/null +++ b/src/core/tsconfig-esm.json @@ -0,0 +1,7 @@ +{ + "extends": "tsconfig-build.json", + "compilerOptions": { + "target": "es5", + "outDir": "../../dist/packages-dist/core" + } +} diff --git a/src/database.ts b/src/database.ts deleted file mode 100644 index 9d20c9fa4..000000000 --- a/src/database.ts +++ /dev/null @@ -1,7 +0,0 @@ -export * from './database/database'; -export * from './database/firebase_list_factory'; -export * from './database/firebase_list_observable'; -export * from './database/firebase_object_factory'; -export * from './database/firebase_object_observable'; -export * from './database/query_observable'; -export * from './database/database.module'; diff --git a/src/database/database.module.ts b/src/database/database.module.ts index 181b1df99..0f7312e9d 100644 --- a/src/database/database.module.ts +++ b/src/database/database.module.ts @@ -1,7 +1,7 @@ import { NgModule } from '@angular/core'; import * as firebase from 'firebase/app'; import 'firebase/database'; -import { AngularFireModule, FirebaseApp } from '../angularfire2'; +import { AngularFireModule, FirebaseApp } from '../core'; import { AngularFireDatabase } from './database'; export function _getAngularFireDatabase(app: FirebaseApp) { diff --git a/src/database/database.ts b/src/database/database.ts index fecf6234c..f3a3339b5 100644 --- a/src/database/database.ts +++ b/src/database/database.ts @@ -1,7 +1,7 @@ import * as firebase from 'firebase/app'; import 'firebase/database'; import { Inject, Injectable } from '@angular/core'; -import { FirebaseAppConfigToken, FirebaseAppConfig, FirebaseApp } from '../angularfire2'; +import { FirebaseAppConfigToken, FirebaseAppConfig, FirebaseApp } from '../core'; import { FirebaseListFactory } from './firebase_list_factory'; import { FirebaseListObservable } from './firebase_list_observable'; import { FirebaseListFactoryOpts, FirebaseObjectFactoryOpts, PathReference } from '../interfaces'; diff --git a/src/database/index.ts b/src/database/index.ts new file mode 100644 index 000000000..c1e95b11e --- /dev/null +++ b/src/database/index.ts @@ -0,0 +1,7 @@ +export * from './database'; +export * from './firebase_list_factory'; +export * from './firebase_list_observable'; +export * from './firebase_object_factory'; +export * from './firebase_object_observable'; +export * from './query_observable'; +export * from './database.module'; diff --git a/src/database/tsconfig-build.json b/src/database/tsconfig-build.json new file mode 100644 index 000000000..e69de29bb diff --git a/src/index.ts b/src/index.ts deleted file mode 100644 index d0e702904..000000000 --- a/src/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './angularfire2'; diff --git a/src/interfaces.ts b/src/interfaces.ts index 436b3e078..b831d0eec 100644 --- a/src/interfaces.ts +++ b/src/interfaces.ts @@ -1,15 +1,6 @@ import * as firebase from 'firebase/app'; import { Observable } from 'rxjs/Observable'; -export interface FirebaseAppConfig { - apiKey?: string; - authDomain?: string; - databaseURL?: string; - storageBucket?: string; - messagingSenderId?: string; - projectId?: string; -} - export interface FirebaseOperationCases { stringCase: () => firebase.Promise; firebaseCase?: () => firebase.Promise; @@ -95,4 +86,4 @@ export type DatabaseReference = firebase.database.Reference; export type DatabaseQuery = firebase.database.Query; export type QueryReference = DatabaseReference | DatabaseQuery; export type PathReference = QueryReference | string; -export type Auth = firebase.auth.Auth; \ No newline at end of file +export type Auth = firebase.auth.Auth; diff --git a/src/test-root.ts b/src/test-root.ts index 1f2053f93..52c100918 100644 --- a/src/test-root.ts +++ b/src/test-root.ts @@ -1,4 +1,4 @@ -import './angularfire2.spec'; +import './core/angularfire2.spec'; import './database/firebase_list_factory.spec'; import './database/firebase_object_factory.spec'; import './database/firebase_list_observable.spec'; diff --git a/tools/build.js b/tools/build.js new file mode 100644 index 000000000..23de1a1f9 --- /dev/null +++ b/tools/build.js @@ -0,0 +1,61 @@ +// TS -> ES2015 -> ES5 -> UMD + +// tsc -> tsc -p -> rollup + +const { rollup } = require('rollup'); +const { spawn } = require('child_process'); +const { Observable } = require('rxjs'); +const { copy } = require('fs-extra'); + +function spawnObservable(command, args) { + return Observable.create(observer => { + const cmd = spawn(command, args); + observer.next(''); + cmd.stdout.on('data', (data) => { observer.next(data.toString('utf8')); }); + cmd.stderr.on('data', (data) => { observer.error(data.toString('utf8')); }); + cmd.on('close', (data) => { observer.complete(); }); + }); +} + +function createUmd(module) { + return rollup({ + entry: `${process.cwd()}/dist/packages/${module}/index.js` + }) + .then(bundle => { + const result = bundle.generate({ + format: 'umd', + moduleName: 'angularfire2' + }); + return bundle.write({ + format: 'umd', + dest: `${process.cwd()}/dist/bundles/${module}.umd.js`, + moduleName: 'angularfire2' + }); + }); +} + +function getSrcPackageFile(module) { + return `${process.cwd()}/src/${module}/package.json`; +} + +function getDestPackageFile(module) { + return `${process.cwd()}/dist/packages/${module}/package.json`; +} + +function buildModule(name) { + const module$ = spawnObservable('node_modules/.bin/tsc', [`-p`, `${process.cwd()}/src/${name}/tsconfig-build.json`]); + // Run tsc -> copy files -> run rollup + return module$ + .mergeMap(() => { + return Observable.from(copy(getSrcPackageFile(name), getDestPackageFile(name))) + }) + .mergeMap(() => { + return Observable.from(createUmd(name)) + }); +} + +buildModule('core').subscribe( + data => { console.log(data) }, + err => { console.log(err) }, + () => { console.log('complete') } +); From 0d277872a6705eebb71bccdf17ffdccc9c544829 Mon Sep 17 00:00:00 2001 From: David East Date: Fri, 28 Jul 2017 16:35:50 -0600 Subject: [PATCH 02/14] fix(modules): core module build --- src/core/package.json | 6 +-- src/core/tsconfig-build.json | 4 +- src/core/tsconfig-esm.json | 5 ++- tools/build.js | 71 +++++++++++++++++++++++------------- 4 files changed, 53 insertions(+), 33 deletions(-) diff --git a/src/core/package.json b/src/core/package.json index 1cbcf03fc..af5391b8c 100644 --- a/src/core/package.json +++ b/src/core/package.json @@ -2,9 +2,9 @@ "name": "angularfire2", "version": "4.0.0-rc.1", "description": "The core module", - "main": "../../bundles/core.umd.js", - "module": "index.es5.js", - "es2015": "index.js", + "main": "./bundles/core.umd.js", + "module": "index.js", + "es2015": "es2015/index.js", "keywords": [ "angular", "firebase", diff --git a/src/core/tsconfig-build.json b/src/core/tsconfig-build.json index 8c77a5c48..7d9850cf6 100644 --- a/src/core/tsconfig-build.json +++ b/src/core/tsconfig-build.json @@ -5,11 +5,11 @@ "module": "es2015", "target": "es2015", "noImplicitAny": false, - "outDir": "../../dist/packages/core", + "outDir": "../../dist/packages-dist/es2015", "rootDir": ".", "sourceMap": true, "inlineSources": true, - "declaration": true, + "declaration": false, "removeComments": true, "strictNullChecks": true, "lib": [ diff --git a/src/core/tsconfig-esm.json b/src/core/tsconfig-esm.json index e5c74eb63..202067782 100644 --- a/src/core/tsconfig-esm.json +++ b/src/core/tsconfig-esm.json @@ -1,7 +1,8 @@ { - "extends": "tsconfig-build.json", + "extends": "./tsconfig-build.json", "compilerOptions": { "target": "es5", - "outDir": "../../dist/packages-dist/core" + "outDir": "../../dist/packages-dist", + "declaration": true } } diff --git a/tools/build.js b/tools/build.js index 23de1a1f9..610a1119b 100644 --- a/tools/build.js +++ b/tools/build.js @@ -1,57 +1,76 @@ -// TS -> ES2015 -> ES5 -> UMD - -// tsc -> tsc -p -> rollup - const { rollup } = require('rollup'); const { spawn } = require('child_process'); const { Observable } = require('rxjs'); -const { copy } = require('fs-extra'); +const { copy, rename, readdirSync } = require('fs-extra'); function spawnObservable(command, args) { return Observable.create(observer => { const cmd = spawn(command, args); - observer.next(''); + observer.next(''); // hack to kick things off, not every command will have a stdout cmd.stdout.on('data', (data) => { observer.next(data.toString('utf8')); }); cmd.stderr.on('data', (data) => { observer.error(data.toString('utf8')); }); cmd.on('close', (data) => { observer.complete(); }); }); } -function createUmd(module) { - return rollup({ - entry: `${process.cwd()}/dist/packages/${module}/index.js` - }) +function createUmd(name) { + // core module is angularfire2 the rest are angularfire2.feature + const moduleName = name === 'core' ? 'angularfire2' : `angularfire2.${name}`; + // core is at the root and the rest are in their own folders + const entry = name === 'core' ? `${process.cwd()}/dist/packages-dist/index.js` : + `${process.cwd()}/dist/packages-dist/${name}/index.js`; + return rollup({ entry }) .then(bundle => { const result = bundle.generate({ format: 'umd', - moduleName: 'angularfire2' + moduleName }); return bundle.write({ format: 'umd', - dest: `${process.cwd()}/dist/bundles/${module}.umd.js`, - moduleName: 'angularfire2' + dest: `${process.cwd()}/dist/bundles/${name}.umd.js`, + moduleName }); }); } -function getSrcPackageFile(module) { - return `${process.cwd()}/src/${module}/package.json`; +function getSrcPackageFile(moduleName) { + const PATHS = { + core: `${process.cwd()}/src/core/package.json`, + auth: `${process.cwd()}/src/auth/package.json`, + database: `${process.cwd()}/src/database/package.json` + }; + return PATHS[moduleName]; +} + +function getDestPackageFile(moduleName) { + const PATHS = { + core: `${process.cwd()}/dist/packages-dist/package.json`, + auth: `${process.cwd()}/dist/packages-dist/auth/package.json`, + database: `${process.cwd()}/dist/packages-dist/database/package.json` + }; + return PATHS[moduleName]; } -function getDestPackageFile(module) { - return `${process.cwd()}/dist/packages/${module}/package.json`; +function copyPackage(moduleName) { + return copy(getSrcPackageFile(moduleName), getDestPackageFile(moduleName)); } +// constants for running typescript commands +const TSC = 'node_modules/.bin/tsc'; +const NGC = 'node_modules/.bin/ngc'; +const TSC_ARGS = (name, config = 'build') => [`-p`, `${process.cwd()}/src/${name}/tsconfig-${config}.json`]; + function buildModule(name) { - const module$ = spawnObservable('node_modules/.bin/tsc', [`-p`, `${process.cwd()}/src/${name}/tsconfig-build.json`]); - // Run tsc -> copy files -> run rollup - return module$ - .mergeMap(() => { - return Observable.from(copy(getSrcPackageFile(name), getDestPackageFile(name))) - }) - .mergeMap(() => { - return Observable.from(createUmd(name)) - }); + // Run tsc on module (TS -> ES2015) + return spawnObservable(TSC, TSC_ARGS(name)) + // Copy package.json to dist/pacakges/modulename/package.json + // Run tsc but for ES5 target and ES2015 imports, exports to dist/packages-dist + // (this is for rollup) + .concatMap(() => spawnObservable(TSC, TSC_ARGS(name, 'esm'))) + .concatMap(() => Observable.from(copyPackage(name))) + .debounceTime(2000) + // Use rollup to build UMD bundle to dist/bundles` + .concatMap(() => Observable.from(createUmd(name))); } buildModule('core').subscribe( From a431037a93022c4cc84c200501d39ee155f17973 Mon Sep 17 00:00:00 2001 From: David East Date: Fri, 28 Jul 2017 17:12:53 -0600 Subject: [PATCH 03/14] chore(build): sequential build steps --- src/core/tsconfig-build.json | 3 ++- tools/build.js | 15 ++++++--------- 2 files changed, 8 insertions(+), 10 deletions(-) diff --git a/src/core/tsconfig-build.json b/src/core/tsconfig-build.json index 7d9850cf6..027e59fb6 100644 --- a/src/core/tsconfig-build.json +++ b/src/core/tsconfig-build.json @@ -25,6 +25,7 @@ ], "angularCompilerOptions": { "skipTemplateCodegen": true, - "strictMetadataEmit": true + "strictMetadataEmit": true, + "enableSummariesForJit": false } } diff --git a/tools/build.js b/tools/build.js index 610a1119b..0da86e717 100644 --- a/tools/build.js +++ b/tools/build.js @@ -62,15 +62,12 @@ const TSC_ARGS = (name, config = 'build') => [`-p`, `${process.cwd()}/src/${name function buildModule(name) { // Run tsc on module (TS -> ES2015) - return spawnObservable(TSC, TSC_ARGS(name)) - // Copy package.json to dist/pacakges/modulename/package.json - // Run tsc but for ES5 target and ES2015 imports, exports to dist/packages-dist - // (this is for rollup) - .concatMap(() => spawnObservable(TSC, TSC_ARGS(name, 'esm'))) - .concatMap(() => Observable.from(copyPackage(name))) - .debounceTime(2000) - // Use rollup to build UMD bundle to dist/bundles` - .concatMap(() => Observable.from(createUmd(name))); + const es2015$ = spawnObservable(TSC, TSC_ARGS(name)); + const esm$ = spawnObservable(TSC, TSC_ARGS(name, 'esm')); + return Observable + .forkJoin(es2015$, esm$) + .mergeMap(() => Observable.from(createUmd(name))) + .mergeMap(() => Observable.from(copyPackage(name))); } buildModule('core').subscribe( From 0413d9a295a73837318354e44e5ed2fbd985b22d Mon Sep 17 00:00:00 2001 From: David East Date: Sat, 29 Jul 2017 06:25:29 -0600 Subject: [PATCH 04/14] chore(build): authentication build --- .gitignore | 4 +- src/auth/auth.module.ts | 2 +- src/auth/auth.ts | 10 ++--- src/auth/package.json | 31 +++++++++++++++- src/auth/tsconfig-build.json | 14 +++++-- src/auth/tsconfig-esm.json | 5 ++- src/core/angularfire2.ts | 16 ++++++++ src/core/package.json | 16 ++++---- src/interfaces.ts | 1 - src/utils.ts | 12 ------ tools/build.js | 71 +++++++++++++++++++++++++++--------- 11 files changed, 130 insertions(+), 52 deletions(-) diff --git a/.gitignore b/.gitignore index 9298d341a..2053b5cf4 100644 --- a/.gitignore +++ b/.gitignore @@ -6,4 +6,6 @@ typings/ npm-debug.log .idea/ .vscode/settings.json -angularfire2-*.tgz \ No newline at end of file +angularfire2-*.tgz +*.ngfactory.ts +*.ngsummary.json diff --git a/src/auth/auth.module.ts b/src/auth/auth.module.ts index 32cb1a6d4..bce0dfd00 100644 --- a/src/auth/auth.module.ts +++ b/src/auth/auth.module.ts @@ -1,7 +1,7 @@ import { NgModule, NgZone } from '@angular/core'; import * as firebase from 'firebase/app'; import 'firebase/auth'; -import { FirebaseApp, AngularFireModule } from '../core'; +import { FirebaseApp, AngularFireModule } from 'angularfire2'; import { AngularFireAuth } from './auth'; export function _getAngularFireAuth(app: FirebaseApp) { diff --git a/src/auth/auth.ts b/src/auth/auth.ts index 57e4b18a0..c0e5267bd 100644 --- a/src/auth/auth.ts +++ b/src/auth/auth.ts @@ -1,12 +1,12 @@ import * as firebase from 'firebase/app'; -import * as utils from '../utils'; import 'firebase/auth'; import { Injectable, NgZone } from '@angular/core'; -import { Auth } from '../interfaces'; import { Observable } from 'rxjs/Observable'; import { Observer } from 'rxjs/Observer'; import { observeOn } from 'rxjs/operator/observeOn'; -import { FirebaseApp } from '../core'; +import { FirebaseApp, ZoneScheduler } from 'angularfire2'; + +export type Auth = firebase.auth.Auth; @Injectable() export class AngularFireAuth { @@ -47,7 +47,7 @@ export function FirebaseAuthStateObservable(app: FirebaseApp): Observable observer.complete() ); }); - return observeOn.call(authState, new utils.ZoneScheduler(Zone.current)); + return observeOn.call(authState, new ZoneScheduler(Zone.current)); } /** @@ -63,5 +63,5 @@ export function FirebaseIdTokenObservable(app: FirebaseApp): Observable observer.complete() ) }); - return observeOn.call(idToken, new utils.ZoneScheduler(Zone.current)); + return observeOn.call(idToken, new ZoneScheduler(Zone.current)); } diff --git a/src/auth/package.json b/src/auth/package.json index 65be0782f..481fa17a0 100644 --- a/src/auth/package.json +++ b/src/auth/package.json @@ -1 +1,30 @@ -{ "main": "../bundles/angularfire2.umd.js" } \ No newline at end of file +{ + "name": "angularfire2/auth", + "version": "ANGULARFIRE2_VERSION", + "description": "The auth module", + "main": "../bundles/auth.umd.js", + "module": "index.js", + "es2015": "./es2015/index.js", + "keywords": [ + "angular", + "firebase", + "rxjs" + ], + "repository": { + "type": "git", + "url": "git+https://github.com/angular/angularfire2.git" + }, + "author": "angular,firebase", + "license": "MIT", + "peerDependencies": { + "angularfire2": "ANGULARFIRE2_VERSION", + "@angular/common": "ANGULAR_VERSION", + "@angular/core": "ANGULAR_VERSION", + "@angular/platform-browser": "ANGULAR_VERSION", + "@angular/platform-browser-dynamic": "ANGULAR_VERSION", + "firebase": "FIREBASE_VERSION", + "rxjs": "RXJS_VERSION", + "zone.js": "ZONEJS_VERSION" + }, + "typings": "index.d.ts" +} diff --git a/src/auth/tsconfig-build.json b/src/auth/tsconfig-build.json index 0b44358a0..9cb5eb95a 100644 --- a/src/auth/tsconfig-build.json +++ b/src/auth/tsconfig-build.json @@ -1,15 +1,16 @@ { "compilerOptions": { + "baseUrl": ".", "experimentalDecorators": true, "emitDecoratorMetadata": true, "module": "es2015", "target": "es2015", "noImplicitAny": false, - "outDir": "../../dist/packages/auth", + "outDir": "../../dist/packages-dist/auth/es2015", "rootDir": ".", "sourceMap": true, "inlineSources": true, - "declaration": true, + "declaration": false, "removeComments": true, "strictNullChecks": true, "lib": [ @@ -17,7 +18,10 @@ "dom" ], "skipLibCheck": true, - "moduleResolution": "node" + "moduleResolution": "node", + "paths": { + "angularfire2": ["../../dist/packages-dist"] + } }, "files": [ "index.ts", @@ -25,6 +29,8 @@ ], "angularCompilerOptions": { "skipTemplateCodegen": true, - "strictMetadataEmit": true + "strictMetadataEmit": true, + "enableSummariesForJit": false } } + diff --git a/src/auth/tsconfig-esm.json b/src/auth/tsconfig-esm.json index bec875a77..369c314ab 100644 --- a/src/auth/tsconfig-esm.json +++ b/src/auth/tsconfig-esm.json @@ -1,7 +1,8 @@ { - "extends": "tsconfig-build.json", + "extends": "./tsconfig-build.json", "compilerOptions": { "target": "es5", - "outDir": "../../dist/packages-dist/auth" + "outDir": "../../dist/packages-dist/auth", + "declaration": true } } diff --git a/src/core/angularfire2.ts b/src/core/angularfire2.ts index 078de834f..07a99288a 100644 --- a/src/core/angularfire2.ts +++ b/src/core/angularfire2.ts @@ -34,4 +34,20 @@ export class AngularFireModule { } } +import { Subscription } from 'rxjs/Subscription'; +import { Scheduler } from 'rxjs/Scheduler'; +import { queue } from 'rxjs/scheduler/queue'; + +/** + * TODO: remove this scheduler once Rx has a more robust story for working + * with zones. + */ +export class ZoneScheduler { + constructor(public zone: Zone) {} + + schedule(...args): Subscription { + return this.zone.run(() => queue.schedule.apply(queue, args)); + } +} + export { FirebaseApp, FirebaseAppName, FirebaseAppConfigToken }; diff --git a/src/core/package.json b/src/core/package.json index af5391b8c..68835c85b 100644 --- a/src/core/package.json +++ b/src/core/package.json @@ -1,6 +1,6 @@ { "name": "angularfire2", - "version": "4.0.0-rc.1", + "version": "ANGULARFIRE2_VERSION", "description": "The core module", "main": "./bundles/core.umd.js", "module": "index.js", @@ -17,13 +17,13 @@ "author": "angular,firebase", "license": "MIT", "peerDependencies": { - "@angular/common": "^4.0.0", - "@angular/core": "^4.0.0", - "@angular/platform-browser": "^4.0.0", - "@angular/platform-browser-dynamic": "^4.0.0", - "firebase": "^4.0.0", - "rxjs": "^5.0.1", - "zone.js": "^0.8.0" + "@angular/common": "ANGULAR_VERSION", + "@angular/core": "ANGULAR_VERSION", + "@angular/platform-browser": "ANGULAR_VERSION", + "@angular/platform-browser-dynamic": "ANGULAR_VERSION", + "firebase": "FIREBASE_VERSION", + "rxjs": "RXJS_VERSION", + "zone.js": "ZONEJS_VERSION" }, "typings": "index.d.ts" } diff --git a/src/interfaces.ts b/src/interfaces.ts index b831d0eec..c0a58beb4 100644 --- a/src/interfaces.ts +++ b/src/interfaces.ts @@ -86,4 +86,3 @@ export type DatabaseReference = firebase.database.Reference; export type DatabaseQuery = firebase.database.Query; export type QueryReference = DatabaseReference | DatabaseQuery; export type PathReference = QueryReference | string; -export type Auth = firebase.auth.Auth; diff --git a/src/utils.ts b/src/utils.ts index 26814e407..f472c195b 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -122,15 +122,3 @@ export function getRef(app: FirebaseApp, pathRef: PathReference): DatabaseRefere } return app.database().ref(path); } - -/** - * TODO: remove this scheduler once Rx has a more robust story for working - * with zones. - */ -export class ZoneScheduler { - constructor(public zone: Zone) {} - - schedule(...args): Subscription { - return this.zone.run(() => queue.schedule.apply(queue, args)); - } -} diff --git a/tools/build.js b/tools/build.js index 0da86e717..d0c60c11a 100644 --- a/tools/build.js +++ b/tools/build.js @@ -1,8 +1,39 @@ const { rollup } = require('rollup'); const { spawn } = require('child_process'); const { Observable } = require('rxjs'); -const { copy, rename, readdirSync } = require('fs-extra'); +const { copy } = require('fs-extra'); +// Rollup globals +const GLOBALS = { + 'rxjs/Observable': 'Rx', + 'rxjs/Subject': 'Rx', + 'rxjs/Observer': 'Rx', + 'rxjs/Subscription': 'Rx', + 'rxjs/observable/merge': 'Rx.Observable', + 'rxjs/operator/share': 'Rx.Observable.prototype', + 'rxjs/operator/observeOn': 'Rx.Observable.prototype', + 'rxjs/operator': 'Rx.Observable.prototype', + '@angular/core': 'ng.core', + '@angular/compiler': 'ng.compiler', + '@angular/platform-browser': 'ng.platformBrowser', + 'firebase/auth': 'firebase', + 'firebase/app': 'firebase', + 'firebase/database': 'firebase', + 'rxjs/scheduler/queue': 'Rx.Scheduler', + '@angular/core/testing': 'ng.core.testing', + 'angularfire2': 'angularfire2' +}; + +// constants for running typescript commands +const TSC = 'node_modules/.bin/tsc'; +const NGC = 'node_modules/.bin/ngc'; +const TSC_ARGS = (name, config = 'build') => [`-p`, `${process.cwd()}/src/${name}/tsconfig-${config}.json`]; + +/** + * Create an Observable of a spawned child process. + * @param {string} command + * @param {string[]} args + */ function spawnObservable(command, args) { return Observable.create(observer => { const cmd = spawn(command, args); @@ -13,7 +44,7 @@ function spawnObservable(command, args) { }); } -function createUmd(name) { +function createUmd(name, globals) { // core module is angularfire2 the rest are angularfire2.feature const moduleName = name === 'core' ? 'angularfire2' : `angularfire2.${name}`; // core is at the root and the rest are in their own folders @@ -23,11 +54,15 @@ function createUmd(name) { .then(bundle => { const result = bundle.generate({ format: 'umd', + external: Object.keys(globals), + globals, moduleName }); return bundle.write({ format: 'umd', - dest: `${process.cwd()}/dist/bundles/${name}.umd.js`, + dest: `${process.cwd()}/dist/packages-dist/bundles/${name}.umd.js`, + external: Object.keys(globals), + globals, moduleName }); }); @@ -55,23 +90,25 @@ function copyPackage(moduleName) { return copy(getSrcPackageFile(moduleName), getDestPackageFile(moduleName)); } -// constants for running typescript commands -const TSC = 'node_modules/.bin/tsc'; -const NGC = 'node_modules/.bin/ngc'; -const TSC_ARGS = (name, config = 'build') => [`-p`, `${process.cwd()}/src/${name}/tsconfig-${config}.json`]; - -function buildModule(name) { - // Run tsc on module (TS -> ES2015) - const es2015$ = spawnObservable(TSC, TSC_ARGS(name)); - const esm$ = spawnObservable(TSC, TSC_ARGS(name, 'esm')); +function buildModule(name, globals) { + const es2015$ = spawnObservable(NGC, TSC_ARGS(name)); + const esm$ = spawnObservable(NGC, TSC_ARGS(name, 'esm')); return Observable .forkJoin(es2015$, esm$) - .mergeMap(() => Observable.from(createUmd(name))) - .mergeMap(() => Observable.from(copyPackage(name))); + .switchMap(() => Observable.from(createUmd(name, globals))) + .switchMap(() => Observable.from(copyPackage(name))); +} + +function buildLibrary(globals) { + const core$ = buildModule('core', globals); + const auth$ = buildModule('auth', globals); + return Observable + .forkJoin(core$) + .switchMapTo(auth$); } -buildModule('core').subscribe( - data => { console.log(data) }, - err => { console.log(err) }, +const $lib = buildLibrary(GLOBALS).subscribe( + data => { console.log('data', data) }, + err => { console.log('err', err) }, () => { console.log('complete') } ); From b682fd9b1b1b2b5bdd3b548dba50d35c3ea3d905 Mon Sep 17 00:00:00 2001 From: David East Date: Sat, 29 Jul 2017 06:43:50 -0600 Subject: [PATCH 05/14] chore(build): database build --- src/auth/auth.spec.ts | 4 +-- src/{ => auth}/test-config.ts | 0 src/core/angularfire2.spec.ts | 2 +- src/core/test-config.ts | 7 ++++ src/database/database.module.ts | 2 +- src/database/database.ts | 6 ++-- src/database/firebase_list_factory.spec.ts | 8 ++--- src/database/firebase_list_factory.ts | 9 ++--- src/database/firebase_list_observable.spec.ts | 6 ++-- src/database/firebase_list_observable.ts | 4 +-- src/database/firebase_object_factory.spec.ts | 4 +-- src/database/firebase_object_factory.ts | 7 ++-- .../firebase_object_observable.spec.ts | 4 +-- src/{ => database}/interfaces.ts | 0 src/database/package.json | 31 +++++++++++++++- src/database/query_observable.spec.ts | 2 +- src/database/query_observable.ts | 4 +-- src/database/test-config.ts | 7 ++++ src/database/tsconfig-build.json | 36 +++++++++++++++++++ src/database/tsconfig-esm.json | 8 +++++ src/{ => database}/utils.ts | 2 +- src/test-root.ts | 1 - tools/build.js | 10 +++++- 23 files changed, 130 insertions(+), 34 deletions(-) rename src/{ => auth}/test-config.ts (100%) create mode 100644 src/core/test-config.ts rename src/{ => database}/interfaces.ts (100%) create mode 100644 src/database/test-config.ts create mode 100644 src/database/tsconfig-esm.json rename src/{ => database}/utils.ts (98%) diff --git a/src/auth/auth.spec.ts b/src/auth/auth.spec.ts index caf3dd9b2..ab0fe3129 100644 --- a/src/auth/auth.spec.ts +++ b/src/auth/auth.spec.ts @@ -7,10 +7,10 @@ import { TestBed, inject } from '@angular/core/testing'; import { _do } from 'rxjs/operator/do'; import { take } from 'rxjs/operator/take'; import { skip } from 'rxjs/operator/skip'; -import { FirebaseApp, FirebaseAppConfig, AngularFireModule } from '../core'; +import { FirebaseApp, FirebaseAppConfig, AngularFireModule } from 'angularfire2'; import { AngularFireAuth } from './auth'; import { AngularFireAuthModule } from './auth.module'; -import { COMMON_CONFIG } from '../test-config'; +import { COMMON_CONFIG } from './test-config'; function authTake(auth: Observable, count: number): Observable { return take.call(auth, 1); diff --git a/src/test-config.ts b/src/auth/test-config.ts similarity index 100% rename from src/test-config.ts rename to src/auth/test-config.ts diff --git a/src/core/angularfire2.spec.ts b/src/core/angularfire2.spec.ts index 9992bcf7d..e9a29f8ac 100644 --- a/src/core/angularfire2.spec.ts +++ b/src/core/angularfire2.spec.ts @@ -3,7 +3,7 @@ import { TestBed, inject, withModule, async } from '@angular/core/testing'; import { ReflectiveInjector, Provider, PlatformRef, NgModule, Compiler, ApplicationRef, CompilerFactory } from '@angular/core'; import { FirebaseApp, FirebaseAppConfig, AngularFireModule } from './angularfire2'; import { Subscription } from 'rxjs/Subscription'; -import { COMMON_CONFIG } from '../test-config'; +import { COMMON_CONFIG } from './test-config'; import { BrowserModule } from '@angular/platform-browser'; describe('angularfire', () => { diff --git a/src/core/test-config.ts b/src/core/test-config.ts new file mode 100644 index 000000000..4b69c98dd --- /dev/null +++ b/src/core/test-config.ts @@ -0,0 +1,7 @@ + +export const COMMON_CONFIG = { + apiKey: "AIzaSyBVSy3YpkVGiKXbbxeK0qBnu3-MNZ9UIjA", + authDomain: "angularfire2-test.firebaseapp.com", + databaseURL: "https://angularfire2-test.firebaseio.com", + storageBucket: "angularfire2-test.appspot.com", +}; diff --git a/src/database/database.module.ts b/src/database/database.module.ts index 0f7312e9d..67e6a95e8 100644 --- a/src/database/database.module.ts +++ b/src/database/database.module.ts @@ -1,7 +1,7 @@ import { NgModule } from '@angular/core'; import * as firebase from 'firebase/app'; import 'firebase/database'; -import { AngularFireModule, FirebaseApp } from '../core'; +import { AngularFireModule, FirebaseApp } from 'angularfire2'; import { AngularFireDatabase } from './database'; export function _getAngularFireDatabase(app: FirebaseApp) { diff --git a/src/database/database.ts b/src/database/database.ts index f3a3339b5..118e0d9fd 100644 --- a/src/database/database.ts +++ b/src/database/database.ts @@ -1,13 +1,13 @@ import * as firebase from 'firebase/app'; import 'firebase/database'; import { Inject, Injectable } from '@angular/core'; -import { FirebaseAppConfigToken, FirebaseAppConfig, FirebaseApp } from '../core'; +import { FirebaseAppConfigToken, FirebaseAppConfig, FirebaseApp } from 'angularfire2'; import { FirebaseListFactory } from './firebase_list_factory'; import { FirebaseListObservable } from './firebase_list_observable'; -import { FirebaseListFactoryOpts, FirebaseObjectFactoryOpts, PathReference } from '../interfaces'; +import { FirebaseListFactoryOpts, FirebaseObjectFactoryOpts, PathReference } from './interfaces'; import { FirebaseObjectFactory } from './firebase_object_factory'; import { FirebaseObjectObservable } from './firebase_object_observable'; -import * as utils from '../utils'; +import * as utils from './utils'; @Injectable() export class AngularFireDatabase { diff --git a/src/database/firebase_list_factory.spec.ts b/src/database/firebase_list_factory.spec.ts index 7fb4302c9..6484df5f6 100644 --- a/src/database/firebase_list_factory.spec.ts +++ b/src/database/firebase_list_factory.spec.ts @@ -4,12 +4,12 @@ import { AngularFireDatabaseModule } from './database.module'; import { FirebaseListObservable } from './firebase_list_observable'; import { FirebaseListFactory, onChildAdded, onChildChanged, onChildRemoved, onChildUpdated } from './firebase_list_factory'; import { FirebaseObjectFactory } from './firebase_object_factory'; -import { FirebaseApp, FirebaseAppConfig, AngularFireModule} from '../angularfire2'; +import { FirebaseApp, FirebaseAppConfig, AngularFireModule} from 'angularfire2'; import { TestBed, inject } from '@angular/core/testing'; -import * as utils from '../utils'; -import { Query, AFUnwrappedDataSnapshot } from '../interfaces'; +import * as utils from './utils'; +import { Query, AFUnwrappedDataSnapshot } from './interfaces'; import { Subscription, Observable, Subject } from 'rxjs'; -import { COMMON_CONFIG } from '../test-config'; +import { COMMON_CONFIG } from './test-config'; import { _do } from 'rxjs/operator/do'; import { map } from 'rxjs/operator/map'; import { skip } from 'rxjs/operator/skip'; diff --git a/src/database/firebase_list_factory.ts b/src/database/firebase_list_factory.ts index c13cf85bf..f01a2512d 100644 --- a/src/database/firebase_list_factory.ts +++ b/src/database/firebase_list_factory.ts @@ -1,12 +1,13 @@ import * as firebase from 'firebase/app'; -import * as utils from '../utils'; +import { ZoneScheduler } from 'angularfire2'; +import * as utils from './utils'; import 'firebase/database'; -import { AFUnwrappedDataSnapshot } from '../interfaces'; +import { AFUnwrappedDataSnapshot } from './interfaces'; import { FirebaseListObservable } from './firebase_list_observable'; import { Observer } from 'rxjs/Observer'; import { observeOn } from 'rxjs/operator/observeOn'; import { observeQuery } from './query_observable'; -import { Query, FirebaseListFactoryOpts, DatabaseReference, DatabaseQuery, DatabaseSnapshot } from '../interfaces'; +import { Query, FirebaseListFactoryOpts, DatabaseReference, DatabaseQuery, DatabaseSnapshot } from './interfaces'; import { switchMap } from 'rxjs/operator/switchMap'; import { map } from 'rxjs/operator/map'; @@ -186,7 +187,7 @@ function firebaseListObservable(ref: firebase.database.Reference | DatabaseQuery }); // TODO: should be in the subscription zone instead - return observeOn.call(listObs, new utils.ZoneScheduler(Zone.current)); + return observeOn.call(listObs, new ZoneScheduler(Zone.current)); } export function onChildAdded(arr:any[], child:any, toKey:(element:any)=>string, prevKey:string): any[] { diff --git a/src/database/firebase_list_observable.spec.ts b/src/database/firebase_list_observable.spec.ts index 9071c4542..cbb1a6028 100644 --- a/src/database/firebase_list_observable.spec.ts +++ b/src/database/firebase_list_observable.spec.ts @@ -5,10 +5,10 @@ import { FirebaseObjectFactory } from './firebase_object_factory'; import { Observer } from 'rxjs/Observer'; import { map } from 'rxjs/operator/map'; import * as firebase from 'firebase/app'; -import { unwrapMapFn } from '../utils'; -import { FirebaseApp, FirebaseAppConfig, AngularFireModule} from '../angularfire2'; +import { unwrapMapFn } from './utils'; +import { FirebaseApp, FirebaseAppConfig, AngularFireModule} from 'angularfire2'; import { TestBed, inject } from '@angular/core/testing'; -import { COMMON_CONFIG } from '../test-config'; +import { COMMON_CONFIG } from './test-config'; describe('FirebaseListObservable', () => { let O: FirebaseListObservable; diff --git a/src/database/firebase_list_observable.ts b/src/database/firebase_list_observable.ts index e67b33afd..f9d46a395 100644 --- a/src/database/firebase_list_observable.ts +++ b/src/database/firebase_list_observable.ts @@ -4,8 +4,8 @@ import { Subscriber } from 'rxjs/Subscriber'; import { Subscription } from 'rxjs/Subscription'; import * as firebase from 'firebase/app'; import 'firebase/database'; -import * as utils from '../utils'; -import { AFUnwrappedDataSnapshot, FirebaseOperationCases, QueryReference, DatabaseSnapshot, DatabaseReference } from '../interfaces'; +import * as utils from './utils'; +import { AFUnwrappedDataSnapshot, FirebaseOperationCases, QueryReference, DatabaseSnapshot, DatabaseReference } from './interfaces'; export type FirebaseOperation = string | firebase.database.Reference | firebase.database.DataSnapshot | AFUnwrappedDataSnapshot; diff --git a/src/database/firebase_object_factory.spec.ts b/src/database/firebase_object_factory.spec.ts index d03a90e0f..bd44c58dd 100644 --- a/src/database/firebase_object_factory.spec.ts +++ b/src/database/firebase_object_factory.spec.ts @@ -5,8 +5,8 @@ import { AngularFireDatabaseModule } from './database.module'; import { FirebaseObjectObservable } from './firebase_object_observable'; import { FirebaseObjectFactory } from './firebase_object_factory'; import { TestBed, inject } from '@angular/core/testing'; -import { FirebaseApp, FirebaseAppConfig, AngularFireModule } from '../angularfire2'; -import { COMMON_CONFIG } from '../test-config'; +import { FirebaseApp, FirebaseAppConfig, AngularFireModule } from 'angularfire2'; +import { COMMON_CONFIG } from './test-config'; describe('FirebaseObjectFactory', () => { let i = 0; diff --git a/src/database/firebase_object_factory.ts b/src/database/firebase_object_factory.ts index fb716c061..f967ed386 100644 --- a/src/database/firebase_object_factory.ts +++ b/src/database/firebase_object_factory.ts @@ -1,10 +1,11 @@ import { FirebaseObjectObservable } from './firebase_object_observable'; +import { ZoneScheduler } from 'angularfire2'; import { Observer } from 'rxjs/Observer'; import { observeOn } from 'rxjs/operator/observeOn'; import * as firebase from 'firebase/app'; import 'firebase/database'; -import * as utils from '../utils'; -import { FirebaseObjectFactoryOpts, DatabaseReference } from '../interfaces'; +import * as utils from './utils'; +import { FirebaseObjectFactoryOpts, DatabaseReference } from './interfaces'; export function FirebaseObjectFactory ( ref: DatabaseReference, @@ -21,5 +22,5 @@ export function FirebaseObjectFactory ( }, ref); // TODO: should be in the subscription zone instead - return observeOn.call(objectObservable, new utils.ZoneScheduler(Zone.current)); + return observeOn.call(objectObservable, new ZoneScheduler(Zone.current)); } diff --git a/src/database/firebase_object_observable.spec.ts b/src/database/firebase_object_observable.spec.ts index b0e3d53b7..adb0edd0e 100644 --- a/src/database/firebase_object_observable.spec.ts +++ b/src/database/firebase_object_observable.spec.ts @@ -1,6 +1,6 @@ import { TestBed, inject } from '@angular/core/testing'; -import { FirebaseApp, FirebaseAppConfig, AngularFireModule } from '../angularfire2'; -import { COMMON_CONFIG } from '../test-config'; +import { FirebaseApp, FirebaseAppConfig, AngularFireModule } from 'angularfire2'; +import { COMMON_CONFIG } from './test-config'; import { AngularFireDatabase } from './database'; import { AngularFireDatabaseModule } from './database.module'; import { FirebaseObjectObservable } from './firebase_object_observable'; diff --git a/src/interfaces.ts b/src/database/interfaces.ts similarity index 100% rename from src/interfaces.ts rename to src/database/interfaces.ts diff --git a/src/database/package.json b/src/database/package.json index 65be0782f..a78e9212f 100644 --- a/src/database/package.json +++ b/src/database/package.json @@ -1 +1,30 @@ -{ "main": "../bundles/angularfire2.umd.js" } \ No newline at end of file +{ + "name": "angularfire2/database", + "version": "ANGULARFIRE2_VERSION", + "description": "The database module", + "main": "../bundles/database.umd.js", + "module": "index.js", + "es2015": "./es2015/index.js", + "keywords": [ + "angular", + "firebase", + "rxjs" + ], + "repository": { + "type": "git", + "url": "git+https://github.com/angular/angularfire2.git" + }, + "author": "angular,firebase", + "license": "MIT", + "peerDependencies": { + "angularfire2": "ANGULARFIRE2_VERSION", + "@angular/common": "ANGULAR_VERSION", + "@angular/core": "ANGULAR_VERSION", + "@angular/platform-browser": "ANGULAR_VERSION", + "@angular/platform-browser-dynamic": "ANGULAR_VERSION", + "firebase": "FIREBASE_VERSION", + "rxjs": "RXJS_VERSION", + "zone.js": "ZONEJS_VERSION" + }, + "typings": "index.d.ts" +} diff --git a/src/database/query_observable.spec.ts b/src/database/query_observable.spec.ts index f7a931983..d753906f9 100644 --- a/src/database/query_observable.spec.ts +++ b/src/database/query_observable.spec.ts @@ -1,7 +1,7 @@ import { Observable } from 'rxjs/Observable'; import { Observer } from 'rxjs/Observer'; import { Subject } from 'rxjs/Subject'; -import { Query, ScalarQuery } from '../interfaces'; +import { Query, ScalarQuery } from './interfaces'; import { getOrderObservables, observeQuery } from './query_observable'; function scalarQueryTest(query: ScalarQuery, done: any) { diff --git a/src/database/query_observable.ts b/src/database/query_observable.ts index 8c980f714..82dfc7ef9 100644 --- a/src/database/query_observable.ts +++ b/src/database/query_observable.ts @@ -6,8 +6,8 @@ import { combineLatest } from 'rxjs/operator/combineLatest'; import { merge } from 'rxjs/operator/merge'; import { map } from 'rxjs/operator/map'; import { auditTime } from 'rxjs/operator/auditTime'; -import { Query, ScalarQuery, OrderByOptions, OrderBySelection, LimitToOptions, LimitToSelection, Primitive } from '../interfaces'; -import { hasKey, isNil } from '../utils'; +import { Query, ScalarQuery, OrderByOptions, OrderBySelection, LimitToOptions, LimitToSelection, Primitive } from './interfaces'; +import { hasKey, isNil } from './utils'; export function observeQuery(query: Query, audit: boolean = true): Observable { if (isNil(query)) { diff --git a/src/database/test-config.ts b/src/database/test-config.ts new file mode 100644 index 000000000..4b69c98dd --- /dev/null +++ b/src/database/test-config.ts @@ -0,0 +1,7 @@ + +export const COMMON_CONFIG = { + apiKey: "AIzaSyBVSy3YpkVGiKXbbxeK0qBnu3-MNZ9UIjA", + authDomain: "angularfire2-test.firebaseapp.com", + databaseURL: "https://angularfire2-test.firebaseio.com", + storageBucket: "angularfire2-test.appspot.com", +}; diff --git a/src/database/tsconfig-build.json b/src/database/tsconfig-build.json index e69de29bb..7fd4add09 100644 --- a/src/database/tsconfig-build.json +++ b/src/database/tsconfig-build.json @@ -0,0 +1,36 @@ +{ + "compilerOptions": { + "baseUrl": ".", + "experimentalDecorators": true, + "emitDecoratorMetadata": true, + "module": "es2015", + "target": "es2015", + "noImplicitAny": false, + "outDir": "../../dist/packages-dist/database/es2015", + "rootDir": ".", + "sourceMap": true, + "inlineSources": true, + "declaration": false, + "removeComments": true, + "strictNullChecks": true, + "lib": [ + "es2015", + "dom" + ], + "skipLibCheck": true, + "moduleResolution": "node", + "paths": { + "angularfire2": ["../../dist/packages-dist"] + } + }, + "files": [ + "index.ts", + "../../node_modules/zone.js/dist/zone.js.d.ts" + ], + "angularCompilerOptions": { + "skipTemplateCodegen": true, + "strictMetadataEmit": true, + "enableSummariesForJit": false + } +} + diff --git a/src/database/tsconfig-esm.json b/src/database/tsconfig-esm.json new file mode 100644 index 000000000..f9beb9474 --- /dev/null +++ b/src/database/tsconfig-esm.json @@ -0,0 +1,8 @@ +{ + "extends": "./tsconfig-build.json", + "compilerOptions": { + "target": "es5", + "outDir": "../../dist/packages-dist/database", + "declaration": true + } +} diff --git a/src/utils.ts b/src/database/utils.ts similarity index 98% rename from src/utils.ts rename to src/database/utils.ts index f472c195b..03c998eed 100644 --- a/src/utils.ts +++ b/src/database/utils.ts @@ -3,7 +3,7 @@ import { Subscription } from 'rxjs/Subscription'; import { Scheduler } from 'rxjs/Scheduler'; import { queue } from 'rxjs/scheduler/queue'; import { AFUnwrappedDataSnapshot, PathReference, DatabaseReference } from './interfaces'; -import { FirebaseApp } from './app/index'; +import { FirebaseApp } from 'angularfire2'; const REGEX_ABSOLUTE_URL = /^[a-z]+:\/\/.*/; diff --git a/src/test-root.ts b/src/test-root.ts index 52c100918..3b46da561 100644 --- a/src/test-root.ts +++ b/src/test-root.ts @@ -5,4 +5,3 @@ import './database/firebase_list_observable.spec'; import './database/firebase_object_observable.spec'; import './database/query_observable.spec'; import './auth/auth.spec'; - diff --git a/tools/build.js b/tools/build.js index d0c60c11a..1e03f744c 100644 --- a/tools/build.js +++ b/tools/build.js @@ -12,6 +12,12 @@ const GLOBALS = { 'rxjs/observable/merge': 'Rx.Observable', 'rxjs/operator/share': 'Rx.Observable.prototype', 'rxjs/operator/observeOn': 'Rx.Observable.prototype', + 'rxjs/observable/of': 'Rx.Observable.prototype', + 'rxjs/operator/combineLatest': 'Rx.Observable.prototype', + 'rxjs/operator/merge': 'Rx.Observable.prototype', + 'rxjs/operator/map': 'Rx.Observable.prototype', + 'rxjs/operator/auditTime': 'Rx.Observable.prototype', + 'rxjs/operator/switchMap': 'Rx.Observable.prototype', 'rxjs/operator': 'Rx.Observable.prototype', '@angular/core': 'ng.core', '@angular/compiler': 'ng.compiler', @@ -102,9 +108,11 @@ function buildModule(name, globals) { function buildLibrary(globals) { const core$ = buildModule('core', globals); const auth$ = buildModule('auth', globals); + const db$ = buildModule('database', globals); return Observable .forkJoin(core$) - .switchMapTo(auth$); + .switchMapTo(auth$) + .switchMapTo(db$); } const $lib = buildLibrary(GLOBALS).subscribe( From e2be8501b1f09c2d84a38e2f60905b1015a6164d Mon Sep 17 00:00:00 2001 From: David East Date: Sat, 29 Jul 2017 07:09:46 -0600 Subject: [PATCH 06/14] chore(build): measure UMD bundle sizes --- package.json | 2 ++ tools/build.js | 23 +++++++++++++++++++++-- 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index d039cd69a..fdd0d4599 100644 --- a/package.json +++ b/package.json @@ -56,6 +56,7 @@ "gulp": "^3.9.0", "gulp-jasmine": "^2.2.1", "gulp-typescript": "^2.10.0", + "gzip-size": "^3.0.0", "http-server": "^0.8.5", "jasmine": "^2.4.1", "jasmine-core": "^2.4.1", @@ -68,6 +69,7 @@ "karma-systemjs": "^0.10.0", "ncp": "^2.0.0", "parse5": "^1.3.2", + "pretty-size": "^2.0.0", "protractor": "3.0.0", "reflect-metadata": "0.1.2", "rimraf": "^2.5.4", diff --git a/tools/build.js b/tools/build.js index 1e03f744c..e0e2d04ad 100644 --- a/tools/build.js +++ b/tools/build.js @@ -1,7 +1,9 @@ const { rollup } = require('rollup'); const { spawn } = require('child_process'); const { Observable } = require('rxjs'); -const { copy } = require('fs-extra'); +const { copy, readFileSync } = require('fs-extra'); +const { prettySize } = require('pretty-size'); +const gzipSize = require('gzip-size'); // Rollup globals const GLOBALS = { @@ -96,6 +98,13 @@ function copyPackage(moduleName) { return copy(getSrcPackageFile(moduleName), getDestPackageFile(moduleName)); } +function measure(module, gzip = true) { + const path = `${process.cwd()}/dist/packages-dist/bundles/${module}.umd.js`; + const file = readFileSync(path); + const bytes = gzipSize.sync(file); + return prettySize(bytes, gzip); +} + function buildModule(name, globals) { const es2015$ = spawnObservable(NGC, TSC_ARGS(name)); const esm$ = spawnObservable(NGC, TSC_ARGS(name, 'esm')); @@ -112,7 +121,17 @@ function buildLibrary(globals) { return Observable .forkJoin(core$) .switchMapTo(auth$) - .switchMapTo(db$); + .switchMapTo(db$) + .do(() => { + const core = measure('core'); + const auth = measure('auth'); + const db = measure('database'); + console.log(` + core.umd.js - ${core} + auth.umd.js - ${auth} + database.umd.js - ${db} + `); + }); } const $lib = buildLibrary(GLOBALS).subscribe( From ef5abdf83354596e8d7e051594ebbd36e2cb47f4 Mon Sep 17 00:00:00 2001 From: David East Date: Sat, 29 Jul 2017 09:54:51 -0600 Subject: [PATCH 07/14] chore(build): add version dependencies at build time --- src/auth/package.json | 2 +- src/core/angularfire2.ts | 9 +++--- src/core/package.json | 2 +- src/database/package.json | 2 +- tools/build.js | 64 +++++++++++++++++++++++++++++++++------ 5 files changed, 62 insertions(+), 17 deletions(-) diff --git a/src/auth/package.json b/src/auth/package.json index 481fa17a0..04d4b61be 100644 --- a/src/auth/package.json +++ b/src/auth/package.json @@ -1,6 +1,6 @@ { "name": "angularfire2/auth", - "version": "ANGULARFIRE2_VERSION", + "version": "4.0.0-rc.1", "description": "The auth module", "main": "../bundles/auth.umd.js", "module": "index.js", diff --git a/src/core/angularfire2.ts b/src/core/angularfire2.ts index 07a99288a..1aae60c9f 100644 --- a/src/core/angularfire2.ts +++ b/src/core/angularfire2.ts @@ -1,6 +1,9 @@ import * as firebase from 'firebase/app'; import { FirebaseAppConfigToken, FirebaseApp, _firebaseAppFactory } from './firebase.app.module'; import { Injectable, InjectionToken, OpaqueToken, NgModule } from '@angular/core'; +import { Subscription } from 'rxjs/Subscription'; +import { Scheduler } from 'rxjs/Scheduler'; +import { queue } from 'rxjs/scheduler/queue'; export interface FirebaseAppConfig { apiKey?: string; @@ -34,16 +37,12 @@ export class AngularFireModule { } } -import { Subscription } from 'rxjs/Subscription'; -import { Scheduler } from 'rxjs/Scheduler'; -import { queue } from 'rxjs/scheduler/queue'; - /** * TODO: remove this scheduler once Rx has a more robust story for working * with zones. */ export class ZoneScheduler { - constructor(public zone: Zone) {} + constructor(public zone: any) {} schedule(...args): Subscription { return this.zone.run(() => queue.schedule.apply(queue, args)); diff --git a/src/core/package.json b/src/core/package.json index 68835c85b..1cf534b7f 100644 --- a/src/core/package.json +++ b/src/core/package.json @@ -1,6 +1,6 @@ { "name": "angularfire2", - "version": "ANGULARFIRE2_VERSION", + "version": "4.0.0-rc.2", "description": "The core module", "main": "./bundles/core.umd.js", "module": "index.js", diff --git a/src/database/package.json b/src/database/package.json index a78e9212f..bc3661f22 100644 --- a/src/database/package.json +++ b/src/database/package.json @@ -1,6 +1,6 @@ { "name": "angularfire2/database", - "version": "ANGULARFIRE2_VERSION", + "version": "4.0.0-rc.1", "description": "The database module", "main": "../bundles/database.umd.js", "module": "index.js", diff --git a/tools/build.js b/tools/build.js index e0e2d04ad..e9892c1b9 100644 --- a/tools/build.js +++ b/tools/build.js @@ -1,7 +1,7 @@ const { rollup } = require('rollup'); const { spawn } = require('child_process'); const { Observable } = require('rxjs'); -const { copy, readFileSync } = require('fs-extra'); +const { copy, readFileSync, writeFile } = require('fs-extra'); const { prettySize } = require('pretty-size'); const gzipSize = require('gzip-size'); @@ -32,7 +32,16 @@ const GLOBALS = { 'angularfire2': 'angularfire2' }; -// constants for running typescript commands +// Map of dependency versions across all packages +const VERSIONS = { + ANGULAR_VERSION: '^4.0.0', + FIREBASE_VERSION: '^4.0.0', + RXJS_VERSION: '^5.0.1', + ZONEJS_VERSION: '^0.8.0', + ANGULARFIRE2_VERSION: '4.0.0-rc.2' +}; + +// Constants for running typescript commands const TSC = 'node_modules/.bin/tsc'; const NGC = 'node_modules/.bin/ngc'; const TSC_ARGS = (name, config = 'build') => [`-p`, `${process.cwd()}/src/${name}/tsconfig-${config}.json`]; @@ -52,6 +61,11 @@ function spawnObservable(command, args) { }); } +/** + * Create a UMD bundle given a module name + * @param {string} name + * @param {Object} globals + */ function createUmd(name, globals) { // core module is angularfire2 the rest are angularfire2.feature const moduleName = name === 'core' ? 'angularfire2' : `angularfire2.${name}`; @@ -76,6 +90,10 @@ function createUmd(name, globals) { }); } +/** + * Get the file path of the src package.json for a module + * @param {string} moduleName + */ function getSrcPackageFile(moduleName) { const PATHS = { core: `${process.cwd()}/src/core/package.json`, @@ -85,6 +103,10 @@ function getSrcPackageFile(moduleName) { return PATHS[moduleName]; } +/** + * Get the file path of the dist package.json for a module + * @param {string} moduleName + */ function getDestPackageFile(moduleName) { const PATHS = { core: `${process.cwd()}/dist/packages-dist/package.json`, @@ -94,6 +116,33 @@ function getDestPackageFile(moduleName) { return PATHS[moduleName]; } +/** + * Create an observable of package.json dependency version replacements. + * This keeps the dependency versions across each package in sync. + * @param {string} name + * @param {Object} versions + */ +function replaceVersionsObservable(name, versions) { + return Observable.create((observer) => { + const package = getSrcPackageFile(name); + let pkg = readFileSync(package, 'utf8'); + const regexs = Object.keys(versions).map(key => + ({ expr: new RegExp(key, 'g'), key, val: versions[key] })); + regexs.forEach(reg => { + pkg = pkg.replace(reg.expr, reg.val); + }); + const outPath = getDestPackageFile(name); + writeFile(outPath, pkg, err => { + if(err) { + observer.error(err); + } else { + observer.next(pkg); + observer.complete(); + } + }); + }); +} + function copyPackage(moduleName) { return copy(getSrcPackageFile(moduleName), getDestPackageFile(moduleName)); } @@ -111,7 +160,7 @@ function buildModule(name, globals) { return Observable .forkJoin(es2015$, esm$) .switchMap(() => Observable.from(createUmd(name, globals))) - .switchMap(() => Observable.from(copyPackage(name))); + .switchMap(() => replaceVersionsObservable(name, VERSIONS)); } function buildLibrary(globals) { @@ -123,13 +172,10 @@ function buildLibrary(globals) { .switchMapTo(auth$) .switchMapTo(db$) .do(() => { - const core = measure('core'); - const auth = measure('auth'); - const db = measure('database'); console.log(` - core.umd.js - ${core} - auth.umd.js - ${auth} - database.umd.js - ${db} + core.umd.js - ${measure('core')} + auth.umd.js - ${measure('auth')} + database.umd.js - ${measure('database')} `); }); } From 405a45b2908da53f6a3fed8b46cb1a5b311126f2 Mon Sep 17 00:00:00 2001 From: David East Date: Mon, 31 Jul 2017 06:25:44 -0600 Subject: [PATCH 08/14] chore(build): fix tests with new build --- .npmignore | 1 - karma.conf.js | 3 +- package.json | 7 +- rollup.test.config.js | 2 +- src/auth/index.spec.ts | 1 + src/auth/tsconfig-build.json | 1 + src/auth/tsconfig-test.json | 12 +++ src/core/angularfire2.spec.ts | 2 +- src/core/index.spec.ts | 1 + src/core/tsconfig-test.json | 12 +++ src/database/firebase_list_factory.spec.ts | 2 +- src/database/index.spec.ts | 5 ++ src/database/tsconfig-build.json | 1 + src/database/tsconfig-test.json | 12 +++ src/root.spec.js | 8 ++ src/test-root.ts | 7 -- src/tsconfig.json | 9 ++ tools/build.js | 97 ++++++++++++++++------ tools/run-typings-test.js | 2 +- tsconfig.json | 32 ------- 20 files changed, 142 insertions(+), 75 deletions(-) create mode 100644 src/auth/index.spec.ts create mode 100644 src/auth/tsconfig-test.json create mode 100644 src/core/index.spec.ts create mode 100644 src/core/tsconfig-test.json create mode 100644 src/database/index.spec.ts create mode 100644 src/database/tsconfig-test.json create mode 100644 src/root.spec.js delete mode 100644 src/test-root.ts create mode 100644 src/tsconfig.json delete mode 100644 tsconfig.json diff --git a/.npmignore b/.npmignore index 77923cf1e..344a9003a 100644 --- a/.npmignore +++ b/.npmignore @@ -1,2 +1 @@ *.spec.* - diff --git a/karma.conf.js b/karma.conf.js index c75d7f6ea..584a29961 100644 --- a/karma.conf.js +++ b/karma.conf.js @@ -26,7 +26,8 @@ module.exports = function(config) { 'karma-test-shim.js', 'node_modules/firebase/firebase.js', - 'dist/bundles/test-root.umd.{js,map}', + 'dist/packages-dist/bundles/core.umd.{js,map}', + 'dist/packages-dist/bundles/test.umd.{js,map}', ], port: 9876, diff --git a/package.json b/package.json index fdd0d4599..d827e68c7 100644 --- a/package.json +++ b/package.json @@ -1,17 +1,17 @@ { "name": "angularfire2", - "version": "4.0.0-rc.1", + "version": "4.0.0-rc.2", "description": "", "main": "bundles/angularfire2.umd.js", "module": "index.js", "scripts": { - "test": "npm run build && karma start --single-run", + "test": "karma start --single-run", "test:watch": "concurrently \"npm run build:watch\" \"npm run delayed_karma\"", "test:debug": "npm run build && karma start", "delayed_karma": "sleep 10 && karma start", "delayed_rollup": "sleep 5 && rollup --watch -c rollup.test.config.js", "build:watch": "rm -rf dist && concurrently \"tsc -w\" \"npm run delayed_rollup\"", - "build": "rm -rf dist && tsc && rollup -c rollup.test.config.js", + "build": "rm -rf dist && node tools/build.js", "build_npm": "rm -rf dist && ngc -p tsconfig.publish.es6.json && rollup -c rollup.publish.config.js && npm run postbuild_npm", "build_e2e": "rm -rf dist-test && npm run build && tsc -p test/ && cp test/e2e/firebase_object/index.html dist-test/e2e/firebase_object/ && cp test/e2e/firebase_list/index.html dist-test/e2e/firebase_list/ && cp test/e2e/auth/index.html dist-test/e2e/auth/", "postbuild_npm": "cp package.json README.md .npmignore dist/ && npm run rewrite_npm_package", @@ -74,6 +74,7 @@ "reflect-metadata": "0.1.2", "rimraf": "^2.5.4", "rollup": "^0.35.11", + "rollup-plugin-node-resolve": "^3.0.0", "rollup-watch": "^2.5.0", "systemjs": "^0.19.16", "systemjs-builder": "^0.15.7", diff --git a/rollup.test.config.js b/rollup.test.config.js index e18879d15..e118bb8db 100644 --- a/rollup.test.config.js +++ b/rollup.test.config.js @@ -4,6 +4,6 @@ export default { entry: 'dist/test-root.js', dest: 'dist/bundles/test-root.umd.js', format: 'umd', - moduleName: 'angularFire2.test', + moduleName: 'angularfire2.test', globals } diff --git a/src/auth/index.spec.ts b/src/auth/index.spec.ts new file mode 100644 index 000000000..92b102d9e --- /dev/null +++ b/src/auth/index.spec.ts @@ -0,0 +1 @@ +import './auth.spec'; diff --git a/src/auth/tsconfig-build.json b/src/auth/tsconfig-build.json index 9cb5eb95a..572d1ec4e 100644 --- a/src/auth/tsconfig-build.json +++ b/src/auth/tsconfig-build.json @@ -25,6 +25,7 @@ }, "files": [ "index.ts", + "index.spec.ts", "../../node_modules/zone.js/dist/zone.js.d.ts" ], "angularCompilerOptions": { diff --git a/src/auth/tsconfig-test.json b/src/auth/tsconfig-test.json new file mode 100644 index 000000000..f87fa0d1d --- /dev/null +++ b/src/auth/tsconfig-test.json @@ -0,0 +1,12 @@ +{ + "extends": "./tsconfig-build.json", + "compilerOptions": { + "baseUrl": ".", + "paths": { + "angularfire2": ["../../dist/packages-dist"] + } + }, + "files": [ + "index.spec.ts" + ] +} diff --git a/src/core/angularfire2.spec.ts b/src/core/angularfire2.spec.ts index e9a29f8ac..53a170189 100644 --- a/src/core/angularfire2.spec.ts +++ b/src/core/angularfire2.spec.ts @@ -1,7 +1,7 @@ import * as firebase from 'firebase/app'; import { TestBed, inject, withModule, async } from '@angular/core/testing'; import { ReflectiveInjector, Provider, PlatformRef, NgModule, Compiler, ApplicationRef, CompilerFactory } from '@angular/core'; -import { FirebaseApp, FirebaseAppConfig, AngularFireModule } from './angularfire2'; +import { FirebaseApp, FirebaseAppConfig, AngularFireModule } from 'angularfire2'; import { Subscription } from 'rxjs/Subscription'; import { COMMON_CONFIG } from './test-config'; import { BrowserModule } from '@angular/platform-browser'; diff --git a/src/core/index.spec.ts b/src/core/index.spec.ts new file mode 100644 index 000000000..81c9d05c6 --- /dev/null +++ b/src/core/index.spec.ts @@ -0,0 +1 @@ +import './angularfire2.spec'; diff --git a/src/core/tsconfig-test.json b/src/core/tsconfig-test.json new file mode 100644 index 000000000..f3dd34066 --- /dev/null +++ b/src/core/tsconfig-test.json @@ -0,0 +1,12 @@ +{ + "extends": "./tsconfig-esm.json", + "compilerOptions": { + "baseUrl": ".", + "paths": { + "angularfire2": ["../../dist/packages-dist"] + } + }, + "files": [ + "index.spec.ts" + ] +} diff --git a/src/database/firebase_list_factory.spec.ts b/src/database/firebase_list_factory.spec.ts index 6484df5f6..7d8fe2057 100644 --- a/src/database/firebase_list_factory.spec.ts +++ b/src/database/firebase_list_factory.spec.ts @@ -578,8 +578,8 @@ describe('FirebaseListFactory', () => { it('should call off on all events when disposed', (done: any) => { const questionRef = app.database().ref().child('questions'); - let firebaseSpy = spyOn(questionRef, 'off').and.callThrough(); subscription = FirebaseListFactory(questionRef).subscribe(_ => { + let firebaseSpy = spyOn(questionRef, 'off').and.callThrough(); expect(firebaseSpy).not.toHaveBeenCalled(); subscription.unsubscribe(); expect(firebaseSpy).toHaveBeenCalled(); diff --git a/src/database/index.spec.ts b/src/database/index.spec.ts new file mode 100644 index 000000000..0a80ca796 --- /dev/null +++ b/src/database/index.spec.ts @@ -0,0 +1,5 @@ +import './firebase_list_factory.spec'; +import './firebase_object_factory.spec'; +import './firebase_list_observable.spec'; +import './firebase_object_observable.spec'; +import './query_observable.spec'; diff --git a/src/database/tsconfig-build.json b/src/database/tsconfig-build.json index 7fd4add09..8ddda20d8 100644 --- a/src/database/tsconfig-build.json +++ b/src/database/tsconfig-build.json @@ -25,6 +25,7 @@ }, "files": [ "index.ts", + "index.spec.ts", "../../node_modules/zone.js/dist/zone.js.d.ts" ], "angularCompilerOptions": { diff --git a/src/database/tsconfig-test.json b/src/database/tsconfig-test.json new file mode 100644 index 000000000..f87fa0d1d --- /dev/null +++ b/src/database/tsconfig-test.json @@ -0,0 +1,12 @@ +{ + "extends": "./tsconfig-build.json", + "compilerOptions": { + "baseUrl": ".", + "paths": { + "angularfire2": ["../../dist/packages-dist"] + } + }, + "files": [ + "index.spec.ts" + ] +} diff --git a/src/root.spec.js b/src/root.spec.js new file mode 100644 index 000000000..8bf903796 --- /dev/null +++ b/src/root.spec.js @@ -0,0 +1,8 @@ +// These paths are written to use the dist build +export * from './packages-dist/angularfire2.spec'; +export * from './packages-dist/database/firebase_list_factory.spec'; +export * from './packages-dist/database/firebase_object_factory.spec'; +export * from './packages-dist/database/firebase_list_observable.spec'; +export * from './packages-dist/database/firebase_object_observable.spec'; +export * from './packages-dist/database/query_observable.spec'; +export * from './packages-dist/auth/auth.spec'; diff --git a/src/test-root.ts b/src/test-root.ts deleted file mode 100644 index 3b46da561..000000000 --- a/src/test-root.ts +++ /dev/null @@ -1,7 +0,0 @@ -import './core/angularfire2.spec'; -import './database/firebase_list_factory.spec'; -import './database/firebase_object_factory.spec'; -import './database/firebase_list_observable.spec'; -import './database/firebase_object_observable.spec'; -import './database/query_observable.spec'; -import './auth/auth.spec'; diff --git a/src/tsconfig.json b/src/tsconfig.json new file mode 100644 index 000000000..b0b13f96f --- /dev/null +++ b/src/tsconfig.json @@ -0,0 +1,9 @@ +{ + "compilerOptions": { + "paths": { + "angularfire2": ["./core"], + "angularfire2/auth": ["./auth"], + "angularfire2/database": ["./database"] + } + } +} diff --git a/tools/build.js b/tools/build.js index e9892c1b9..35e8aabf3 100644 --- a/tools/build.js +++ b/tools/build.js @@ -4,9 +4,11 @@ const { Observable } = require('rxjs'); const { copy, readFileSync, writeFile } = require('fs-extra'); const { prettySize } = require('pretty-size'); const gzipSize = require('gzip-size'); +const resolve = require('rollup-plugin-node-resolve'); // Rollup globals const GLOBALS = { + 'rxjs': 'Rx', 'rxjs/Observable': 'Rx', 'rxjs/Subject': 'Rx', 'rxjs/Observer': 'Rx', @@ -18,8 +20,14 @@ const GLOBALS = { 'rxjs/operator/combineLatest': 'Rx.Observable.prototype', 'rxjs/operator/merge': 'Rx.Observable.prototype', 'rxjs/operator/map': 'Rx.Observable.prototype', + 'rxjs/observable/of': 'Rx.Observable', 'rxjs/operator/auditTime': 'Rx.Observable.prototype', 'rxjs/operator/switchMap': 'Rx.Observable.prototype', + 'rxjs/operator/do': 'Rx.Observable.prototype', + 'rxjs/operator/skip': 'Rx.Observable.prototype', + 'rxjs/operator/take': 'Rx.Observable.prototype', + 'rxjs/operator/toArray': 'Rx.Observable.prototype', + 'rxjs/operator/toPromise': 'Rx.Observable.prototype', 'rxjs/operator': 'Rx.Observable.prototype', '@angular/core': 'ng.core', '@angular/compiler': 'ng.compiler', @@ -29,7 +37,9 @@ const GLOBALS = { 'firebase/database': 'firebase', 'rxjs/scheduler/queue': 'Rx.Scheduler', '@angular/core/testing': 'ng.core.testing', - 'angularfire2': 'angularfire2' + 'angularfire2': 'angularfire2', + 'angularfire2/auth': 'angularfire2.auth', + 'angularfire2/database': 'angularfire2.database' }; // Map of dependency versions across all packages @@ -45,6 +55,7 @@ const VERSIONS = { const TSC = 'node_modules/.bin/tsc'; const NGC = 'node_modules/.bin/ngc'; const TSC_ARGS = (name, config = 'build') => [`-p`, `${process.cwd()}/src/${name}/tsconfig-${config}.json`]; +const TSC_TEST_ARGS = [`-p`, `${process.cwd()}/src/tsconfig-test.json`]; /** * Create an Observable of a spawned child process. @@ -61,33 +72,53 @@ function spawnObservable(command, args) { }); } +function generateBundle(entry, { dest, globals, moduleName }) { + return rollup({ entry }).then(bundle => { + return bundle.write({ + format: 'umd', + external: Object.keys(globals), + plugins: [resolve()], + dest, + globals, + moduleName, + }); + }); +} + /** - * Create a UMD bundle given a module name + * Create a UMD bundle given a module name. * @param {string} name * @param {Object} globals */ function createUmd(name, globals) { // core module is angularfire2 the rest are angularfire2.feature - const moduleName = name === 'core' ? 'angularfire2' : `angularfire2.${name}`; - // core is at the root and the rest are in their own folders - const entry = name === 'core' ? `${process.cwd()}/dist/packages-dist/index.js` : - `${process.cwd()}/dist/packages-dist/${name}/index.js`; - return rollup({ entry }) - .then(bundle => { - const result = bundle.generate({ - format: 'umd', - external: Object.keys(globals), - globals, - moduleName - }); - return bundle.write({ - format: 'umd', - dest: `${process.cwd()}/dist/packages-dist/bundles/${name}.umd.js`, - external: Object.keys(globals), - globals, - moduleName - }); - }); + const MODULE_NAMES = { + core: 'angularfire2', + auth: 'angularfire2.auth', + database: 'angularfire2.database', + }; + const ENTRIES = { + core: `${process.cwd()}/dist/packages-dist/index.js`, + auth: `${process.cwd()}/dist/packages-dist/auth/index.js`, + database: `${process.cwd()}/dist/packages-dist/database/index.js`, + }; + const moduleName = MODULE_NAMES[name]; + const entry = ENTRIES[name]; + return generateBundle(entry, { + dest: `${process.cwd()}/dist/packages-dist/bundles/${name}.umd.js`, + globals, + moduleName + }); +} + +function createTestUmd(globals) { + const entry = `${process.cwd()}/dist/root.spec.js`; + const moduleName = 'angularfire2.test'; + return generateBundle(entry, { + dest: `${process.cwd()}/dist/packages-dist/bundles/test.umd.js`, + globals, + moduleName + }); } /** @@ -133,7 +164,7 @@ function replaceVersionsObservable(name, versions) { }); const outPath = getDestPackageFile(name); writeFile(outPath, pkg, err => { - if(err) { + if (err) { observer.error(err); } else { observer.next(pkg); @@ -147,6 +178,10 @@ function copyPackage(moduleName) { return copy(getSrcPackageFile(moduleName), getDestPackageFile(moduleName)); } +function copyRootTest() { + return copy(`${process.cwd()}/src/root.spec.js`, `${process.cwd()}/dist/root.spec.js`); +} + function measure(module, gzip = true) { const path = `${process.cwd()}/dist/packages-dist/bundles/${module}.umd.js`; const file = readFileSync(path); @@ -157,18 +192,19 @@ function measure(module, gzip = true) { function buildModule(name, globals) { const es2015$ = spawnObservable(NGC, TSC_ARGS(name)); const esm$ = spawnObservable(NGC, TSC_ARGS(name, 'esm')); + const test$ = spawnObservable(TSC, TSC_ARGS(name, 'test')); return Observable - .forkJoin(es2015$, esm$) + .forkJoin(es2015$, esm$, test$) .switchMap(() => Observable.from(createUmd(name, globals))) .switchMap(() => replaceVersionsObservable(name, VERSIONS)); } -function buildLibrary(globals) { +function buildModules(globals) { const core$ = buildModule('core', globals); const auth$ = buildModule('auth', globals); const db$ = buildModule('database', globals); return Observable - .forkJoin(core$) + .forkJoin(core$, Observable.from(copyRootTest())) .switchMapTo(auth$) .switchMapTo(db$) .do(() => { @@ -180,7 +216,14 @@ function buildLibrary(globals) { }); } -const $lib = buildLibrary(GLOBALS).subscribe( +function buildLibrary(globals) { + const modules$ = buildModules(globals); + return Observable + .forkJoin(modules$) + .switchMap(() => Observable.from(createTestUmd(globals))); +} + +buildLibrary(GLOBALS).subscribe( data => { console.log('data', data) }, err => { console.log('err', err) }, () => { console.log('complete') } diff --git a/tools/run-typings-test.js b/tools/run-typings-test.js index c6084676b..694bd6f6d 100644 --- a/tools/run-typings-test.js +++ b/tools/run-typings-test.js @@ -28,7 +28,7 @@ ncp(pathToTestSrcFolder, pathToTestFolder, () => { const samplePackage = require(`${pathToTestFolder}/package.sample.json`); fs.writeFileSync(`${pathToTestFolder}/package.json`, JSON.stringify(samplePackage, null, 2) - .replace('{{ANGULARFIRE_VERSION}}', path.resolve(__dirname, '../dist')) + .replace('{{ANGULARFIRE_VERSION}}', path.resolve(__dirname, '../dist/packages-dist')) .replace('{{FIREBASE_VERSION}}', rootPackage.dependencies.firebase) .replace('{{RXJS_VERSION}}', rootPackage.dependencies.rxjs) .replace('{{ZONE_VERSION}}', rootPackage.devDependencies['zone.js']) diff --git a/tsconfig.json b/tsconfig.json deleted file mode 100644 index 04ad77390..000000000 --- a/tsconfig.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "compilerOptions": { - "experimentalDecorators": true, - "emitDecoratorMetadata": true, - "module": "es2015", - "target": "es5", - "noImplicitAny": false, - "outDir": "dist", - "rootDir": "src", - "sourceMap": true, - "inlineSources": true, - "declaration": true, - "removeComments": true, - "strictNullChecks": true, - "lib": [ - "es2015", - "dom" - ], - "skipLibCheck": true, - "moduleResolution": "node" - }, - "files": [ - "src/test-root.ts", - "src/auth.ts", - "src/database.ts", - "node_modules/zone.js/dist/zone.js.d.ts" - ], - "angularCompilerOptions": { - "skipTemplateCodegen": true, - "strictMetadataEmit": true - } -} From 8c4fa2e7a29777fe7a3306a44489303dacbfd3fa Mon Sep 17 00:00:00 2001 From: David East Date: Mon, 31 Jul 2017 14:28:45 -0600 Subject: [PATCH 09/14] chore(build): clean up old files --- pack.sh | 2 - package-lock.json | 7140 ----------------- protractor.conf.js | 35 - rollup-globals.js | 12 - rollup.publish.config.js | 9 - rollup.test.config.js | 9 - src/auth/tsconfig-build.json | 1 - src/auth/tsconfig-test.json | 2 +- src/database/tsconfig-build.json | 1 - src/database/tsconfig-test.json | 2 +- src/tsconfig.json | 8 +- test/e2e/auth/firebase_auth_example.spec.ts | 14 - test/e2e/auth/firebase_auth_example.ts | 164 - test/e2e/auth/index.html | 14 - .../firebase_list_example.spec.js | 21 - .../firebase_list_example.spec.ts | 13 - .../firebase_list/firebase_list_example.ts | 49 - test/e2e/firebase_list/index.html | 14 - .../firebase_object_example.spec.js | 20 - .../firebase_object_example.spec.ts | 12 - .../firebase_object_example.ts | 51 - test/e2e/firebase_object/index.html | 14 - test/e2e/shared.ts | 5 - test/e2e/system.config.ts | 45 - test/tsconfig.json | 14 - test/typings.d.ts | 2 - tools/rewrite-published-package.js | 24 - tsconfig.publish.es6.json | 32 - 28 files changed, 9 insertions(+), 7720 deletions(-) delete mode 100755 pack.sh delete mode 100644 package-lock.json delete mode 100644 protractor.conf.js delete mode 100644 rollup-globals.js delete mode 100644 rollup.publish.config.js delete mode 100644 rollup.test.config.js delete mode 100644 test/e2e/auth/firebase_auth_example.spec.ts delete mode 100644 test/e2e/auth/firebase_auth_example.ts delete mode 100644 test/e2e/auth/index.html delete mode 100644 test/e2e/firebase_list/firebase_list_example.spec.js delete mode 100644 test/e2e/firebase_list/firebase_list_example.spec.ts delete mode 100644 test/e2e/firebase_list/firebase_list_example.ts delete mode 100644 test/e2e/firebase_list/index.html delete mode 100644 test/e2e/firebase_object/firebase_object_example.spec.js delete mode 100644 test/e2e/firebase_object/firebase_object_example.spec.ts delete mode 100644 test/e2e/firebase_object/firebase_object_example.ts delete mode 100644 test/e2e/firebase_object/index.html delete mode 100644 test/e2e/shared.ts delete mode 100644 test/e2e/system.config.ts delete mode 100644 test/tsconfig.json delete mode 100644 test/typings.d.ts delete mode 100644 tools/rewrite-published-package.js delete mode 100644 tsconfig.publish.es6.json diff --git a/pack.sh b/pack.sh deleted file mode 100755 index 63d689c57..000000000 --- a/pack.sh +++ /dev/null @@ -1,2 +0,0 @@ -# Creates a local build of AngularFire2 -npm run build_npm && npm pack dist \ No newline at end of file diff --git a/package-lock.json b/package-lock.json deleted file mode 100644 index 3b44bb2fe..000000000 --- a/package-lock.json +++ /dev/null @@ -1,7140 +0,0 @@ -{ - "name": "angularfire2", - "version": "4.0.0-rc.1", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "@angular/common": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/@angular/common/-/common-4.3.1.tgz", - "integrity": "sha1-Jg9IenzcoybENr0+qVFceX3i/3I=", - "requires": { - "tslib": "1.7.1" - } - }, - "@angular/compiler": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-4.3.1.tgz", - "integrity": "sha1-OiTUns8BrCtuB/Y+N4uP+OJX/gk=", - "requires": { - "tslib": "1.7.1" - } - }, - "@angular/compiler-cli": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-4.3.1.tgz", - "integrity": "sha1-ALQa+2+utK71YbhCeASsiICv9jw=", - "dev": true, - "requires": { - "@angular/tsc-wrapped": "4.3.1", - "minimist": "1.2.0", - "reflect-metadata": "0.1.2" - } - }, - "@angular/core": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/@angular/core/-/core-4.3.1.tgz", - "integrity": "sha1-qdCn1kS5YmBnQmm2iaBP7qYyqNM=", - "requires": { - "tslib": "1.7.1" - } - }, - "@angular/platform-browser": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-4.3.1.tgz", - "integrity": "sha1-23J7Bu7WS9pd7+xxgV2yak2i9pA=", - "requires": { - "tslib": "1.7.1" - } - }, - "@angular/platform-browser-dynamic": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-4.3.1.tgz", - "integrity": "sha1-hANNpgqC7zbn7/2ns63m5kWzMLM=", - "requires": { - "tslib": "1.7.1" - } - }, - "@angular/platform-server": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/@angular/platform-server/-/platform-server-4.3.1.tgz", - "integrity": "sha1-O5FfxAE8apR6jBR7TbAnmwJZNus=", - "dev": true, - "requires": { - "parse5": "3.0.2", - "tslib": "1.7.1", - "xhr2": "0.1.4" - }, - "dependencies": { - "parse5": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-3.0.2.tgz", - "integrity": "sha1-Be/1fw70V3+xRKefi5qWemzERRA=", - "dev": true, - "requires": { - "@types/node": "6.0.84" - } - } - } - }, - "@angular/tsc-wrapped": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/@angular/tsc-wrapped/-/tsc-wrapped-4.3.1.tgz", - "integrity": "sha1-9mFqTSo7vsHN7WZP0fUm7c6Z70E=", - "dev": true, - "requires": { - "tsickle": "0.21.6" - } - }, - "@types/form-data": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/@types/form-data/-/form-data-0.0.33.tgz", - "integrity": "sha1-yayFsqX9GENbjIXZ7LUObWyJP/g=", - "dev": true, - "requires": { - "@types/node": "6.0.84" - } - }, - "@types/jasmine": { - "version": "2.5.53", - "resolved": "https://registry.npmjs.org/@types/jasmine/-/jasmine-2.5.53.tgz", - "integrity": "sha512-2YNL0jXYuN7w07mb1sMZQ6T6zOvGi83v8UbjhBZ8mhvI1VkQ2STU9XOrTFyvWswMyh5rW1evS+e7qltYJvTqPA==", - "dev": true - }, - "@types/node": { - "version": "6.0.84", - "resolved": "https://registry.npmjs.org/@types/node/-/node-6.0.84.tgz", - "integrity": "sha512-1SvEazClhUBRNroJM3oB3xf3u2r6xGmHDGbdigqNPHvNKLl8/BtATgO9eC04ZLuovpSh0B20BF1QJxdi+qmTlg==", - "dev": true - }, - "@types/request": { - "version": "0.0.30", - "resolved": "https://registry.npmjs.org/@types/request/-/request-0.0.30.tgz", - "integrity": "sha1-GCCIQaDPZTjv9eMGv6kuhsjIrK4=", - "dev": true, - "requires": { - "@types/form-data": "0.0.33", - "@types/node": "6.0.84" - } - }, - "accepts": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.3.tgz", - "integrity": "sha1-w8p0NJOGSMPg2cHjKN1otiLChMo=", - "dev": true, - "requires": { - "mime-types": "2.1.15", - "negotiator": "0.6.1" - } - }, - "add-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/add-stream/-/add-stream-1.0.0.tgz", - "integrity": "sha1-anmQQ3ynNtXhKI25K9MmbV9csqo=", - "dev": true - }, - "adm-zip": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.4.tgz", - "integrity": "sha1-ph7VrmkFw66lizplfSUDMJEFJzY=", - "dev": true - }, - "after": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/after/-/after-0.8.2.tgz", - "integrity": "sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8=", - "dev": true - }, - "agent-base": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-2.1.1.tgz", - "integrity": "sha1-1t4Q1a9hMtW9aSQn1G/FOFOQlMc=", - "dev": true, - "requires": { - "extend": "3.0.1", - "semver": "5.0.3" - }, - "dependencies": { - "semver": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.0.3.tgz", - "integrity": "sha1-d0Zt5YnNXTyV8TiqeLxWmjy10no=", - "dev": true - } - } - }, - "align-text": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", - "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=", - "dev": true, - "requires": { - "kind-of": "3.2.2", - "longest": "1.0.1", - "repeat-string": "1.6.1" - } - }, - "amdefine": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", - "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=", - "dev": true - }, - "ansi-regex": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-0.2.1.tgz", - "integrity": "sha1-DY6UaWej2BQ/k+JOKYUl/BsiNfk=", - "dev": true - }, - "ansi-styles": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-1.1.0.tgz", - "integrity": "sha1-6uy/Zs1waIJ2Cy9GkVgrj1XXp94=", - "dev": true - }, - "anymatch": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.0.tgz", - "integrity": "sha1-o+Uvo5FoyCX/V7AkgSbOWo/5VQc=", - "dev": true, - "requires": { - "arrify": "1.0.1", - "micromatch": "2.3.11" - } - }, - "archy": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", - "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=", - "dev": true - }, - "arr-diff": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", - "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", - "dev": true, - "requires": { - "arr-flatten": "1.1.0" - } - }, - "arr-flatten": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", - "dev": true - }, - "array-differ": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-1.0.0.tgz", - "integrity": "sha1-7/UuN1gknTO+QCuLuOVkuytdQDE=", - "dev": true - }, - "array-each": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/array-each/-/array-each-1.0.1.tgz", - "integrity": "sha1-p5SvDAWrF1KEbudTofIRoFugxE8=", - "dev": true - }, - "array-find-index": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", - "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=", - "dev": true - }, - "array-ify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-ify/-/array-ify-1.0.0.tgz", - "integrity": "sha1-nlKHYrSpBmrRY6aWKjZEGOlibs4=", - "dev": true - }, - "array-slice": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-1.0.0.tgz", - "integrity": "sha1-5zA08A3MH0CHYAj9IP6ud71LfC8=", - "dev": true - }, - "array-uniq": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", - "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", - "dev": true - }, - "array-unique": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", - "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", - "dev": true - }, - "arraybuffer.slice": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.6.tgz", - "integrity": "sha1-8zshWfBTKj8xB6JywMz70a0peco=", - "dev": true - }, - "arrify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", - "dev": true - }, - "asn1": { - "version": "0.1.11", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.1.11.tgz", - "integrity": "sha1-VZvhg3bQik7E2+gId9J4GGObLfc=", - "dev": true - }, - "assert-plus": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.1.5.tgz", - "integrity": "sha1-7nQAlBMALYTOxyGcasgRgS5yMWA=", - "dev": true - }, - "async": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", - "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", - "dev": true - }, - "async-each": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz", - "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0=", - "dev": true - }, - "aws-sign2": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.5.0.tgz", - "integrity": "sha1-xXED96F/wDfwLXwuZLYC6iI/fWM=", - "dev": true - }, - "babel-code-frame": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.22.0.tgz", - "integrity": "sha1-AnYgvuVnqIwyVhV05/0IAdMxGOQ=", - "dev": true, - "requires": { - "chalk": "1.1.3", - "esutils": "2.0.2", - "js-tokens": "3.0.2" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - }, - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" - } - }, - "has-ansi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", - "dev": true, - "requires": { - "ansi-regex": "2.1.1" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "2.1.1" - } - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } - } - }, - "babel-core": { - "version": "6.25.0", - "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-6.25.0.tgz", - "integrity": "sha1-fdQrBGPHQunVKW3rPsZ6kyLa1yk=", - "dev": true, - "requires": { - "babel-code-frame": "6.22.0", - "babel-generator": "6.25.0", - "babel-helpers": "6.24.1", - "babel-messages": "6.23.0", - "babel-register": "6.24.1", - "babel-runtime": "6.23.0", - "babel-template": "6.25.0", - "babel-traverse": "6.25.0", - "babel-types": "6.25.0", - "babylon": "6.17.4", - "convert-source-map": "1.5.0", - "debug": "2.6.7", - "json5": "0.5.1", - "lodash": "4.17.4", - "minimatch": "3.0.4", - "path-is-absolute": "1.0.1", - "private": "0.1.7", - "slash": "1.0.0", - "source-map": "0.5.6" - }, - "dependencies": { - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "requires": { - "brace-expansion": "1.1.8" - } - } - } - }, - "babel-generator": { - "version": "6.25.0", - "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.25.0.tgz", - "integrity": "sha1-M6GvcNXyiQrrRlpKd5PB32qeqfw=", - "dev": true, - "requires": { - "babel-messages": "6.23.0", - "babel-runtime": "6.23.0", - "babel-types": "6.25.0", - "detect-indent": "4.0.0", - "jsesc": "1.3.0", - "lodash": "4.17.4", - "source-map": "0.5.6", - "trim-right": "1.0.1" - } - }, - "babel-helper-hoist-variables": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz", - "integrity": "sha1-HssnaJydJVE+rbyZFKc/VAi+enY=", - "dev": true, - "requires": { - "babel-runtime": "6.23.0", - "babel-types": "6.25.0" - } - }, - "babel-helpers": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helpers/-/babel-helpers-6.24.1.tgz", - "integrity": "sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI=", - "dev": true, - "requires": { - "babel-runtime": "6.23.0", - "babel-template": "6.25.0" - } - }, - "babel-messages": { - "version": "6.23.0", - "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz", - "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=", - "dev": true, - "requires": { - "babel-runtime": "6.23.0" - } - }, - "babel-plugin-transform-cjs-system-wrapper": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-cjs-system-wrapper/-/babel-plugin-transform-cjs-system-wrapper-0.3.0.tgz", - "integrity": "sha1-9XWfKb7NNW+qt69SyZzejnutCyE=", - "dev": true, - "requires": { - "babel-template": "6.25.0" - } - }, - "babel-plugin-transform-es2015-modules-systemjs": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz", - "integrity": "sha1-/4mhQrkRmpBhlfXxBuzzBdlAfSM=", - "dev": true, - "requires": { - "babel-helper-hoist-variables": "6.24.1", - "babel-runtime": "6.23.0", - "babel-template": "6.25.0" - } - }, - "babel-plugin-transform-global-system-wrapper": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-global-system-wrapper/-/babel-plugin-transform-global-system-wrapper-0.0.1.tgz", - "integrity": "sha1-r7RpzsDgRom5/n6LH9KA/JSm2PI=", - "dev": true, - "requires": { - "babel-template": "6.25.0" - } - }, - "babel-plugin-transform-system-register": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-system-register/-/babel-plugin-transform-system-register-0.0.1.tgz", - "integrity": "sha1-nf9AOQwnY6xRjwsq18XqT2WlviU=", - "dev": true - }, - "babel-register": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-register/-/babel-register-6.24.1.tgz", - "integrity": "sha1-fhDhOi9xBlvfrVoXh7pFvKbe118=", - "dev": true, - "requires": { - "babel-core": "6.25.0", - "babel-runtime": "6.23.0", - "core-js": "2.4.1", - "home-or-tmp": "2.0.0", - "lodash": "4.17.4", - "mkdirp": "0.5.1", - "source-map-support": "0.4.15" - } - }, - "babel-runtime": { - "version": "6.23.0", - "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.23.0.tgz", - "integrity": "sha1-CpSJ8UTecO+zzkMArM2zKeL8VDs=", - "dev": true, - "requires": { - "core-js": "2.4.1", - "regenerator-runtime": "0.10.5" - } - }, - "babel-template": { - "version": "6.25.0", - "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.25.0.tgz", - "integrity": "sha1-ZlJBFmt8KqTGGdceGSlpVSsQwHE=", - "dev": true, - "requires": { - "babel-runtime": "6.23.0", - "babel-traverse": "6.25.0", - "babel-types": "6.25.0", - "babylon": "6.17.4", - "lodash": "4.17.4" - } - }, - "babel-traverse": { - "version": "6.25.0", - "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.25.0.tgz", - "integrity": "sha1-IldJfi/NGbie3BPEyROB+VEklvE=", - "dev": true, - "requires": { - "babel-code-frame": "6.22.0", - "babel-messages": "6.23.0", - "babel-runtime": "6.23.0", - "babel-types": "6.25.0", - "babylon": "6.17.4", - "debug": "2.6.7", - "globals": "9.18.0", - "invariant": "2.2.2", - "lodash": "4.17.4" - } - }, - "babel-types": { - "version": "6.25.0", - "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.25.0.tgz", - "integrity": "sha1-cK+ySNVmDl0Y+BHZHIMDtUE0oY4=", - "dev": true, - "requires": { - "babel-runtime": "6.23.0", - "esutils": "2.0.2", - "lodash": "4.17.4", - "to-fast-properties": "1.0.3" - } - }, - "babylon": { - "version": "6.17.4", - "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.17.4.tgz", - "integrity": "sha512-kChlV+0SXkjE0vUn9OZ7pBMWRFd8uq3mZe8x1K6jhuNcAFAtEnjchFAqB+dYEXKyd+JpT6eppRR78QAr5gTsUw==", - "dev": true - }, - "backo2": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz", - "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc=", - "dev": true - }, - "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", - "dev": true - }, - "base64-arraybuffer": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz", - "integrity": "sha1-c5JncZI7Whl0etZmqlzUv5xunOg=", - "dev": true - }, - "base64id": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/base64id/-/base64id-1.0.0.tgz", - "integrity": "sha1-R2iMuZu2gE8OBtPnY7HDLlfY5rY=", - "dev": true - }, - "batch": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/batch/-/batch-0.5.3.tgz", - "integrity": "sha1-PzQU84AyF0O/wQQvmoP/HVgk1GQ=", - "dev": true - }, - "beeper": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/beeper/-/beeper-1.1.1.tgz", - "integrity": "sha1-5tXqjF2tABMEpwsiY4RH9pyy+Ak=", - "dev": true - }, - "better-assert": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/better-assert/-/better-assert-1.0.2.tgz", - "integrity": "sha1-QIZrnhueC1W0gYlDEeaPr/rrxSI=", - "dev": true, - "requires": { - "callsite": "1.0.0" - } - }, - "binary-extensions": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.8.0.tgz", - "integrity": "sha1-SOyNFt9Dd+rl+liEaCSAr02Vx3Q=", - "dev": true - }, - "bindings": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.2.1.tgz", - "integrity": "sha1-FK1hE4EtLTfXLme0ystLtyZQXxE=", - "dev": true, - "optional": true - }, - "bl": { - "version": "0.9.5", - "resolved": "https://registry.npmjs.org/bl/-/bl-0.9.5.tgz", - "integrity": "sha1-wGt5evCF6gC8Unr8jvzxHeIjIFQ=", - "dev": true, - "requires": { - "readable-stream": "1.0.34" - }, - "dependencies": { - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true - }, - "readable-stream": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", - "dev": true, - "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "0.0.1", - "string_decoder": "0.10.31" - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", - "dev": true - } - } - }, - "blob": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.4.tgz", - "integrity": "sha1-vPEwUspURj8w+fx+lbmkdjCpSSE=", - "dev": true - }, - "bluebird": { - "version": "2.9.6", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-2.9.6.tgz", - "integrity": "sha1-H8OmsWhSZ9wSG17ImzLOBp2Bq30=", - "dev": true - }, - "body-parser": { - "version": "1.17.2", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.17.2.tgz", - "integrity": "sha1-+IkqvI+eYn1Crtr7yma/WrmRBO4=", - "dev": true, - "requires": { - "bytes": "2.4.0", - "content-type": "1.0.2", - "debug": "2.6.7", - "depd": "1.1.0", - "http-errors": "1.6.1", - "iconv-lite": "0.4.15", - "on-finished": "2.3.0", - "qs": "6.4.0", - "raw-body": "2.2.0", - "type-is": "1.6.15" - }, - "dependencies": { - "qs": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.4.0.tgz", - "integrity": "sha1-E+JtKK1rD/qpExLNO/cI7TUecjM=", - "dev": true - } - } - }, - "boom": { - "version": "2.10.1", - "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz", - "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=", - "dev": true, - "requires": { - "hoek": "2.16.3" - } - }, - "brace-expansion": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz", - "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=", - "dev": true, - "requires": { - "balanced-match": "1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", - "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", - "dev": true, - "requires": { - "expand-range": "1.8.2", - "preserve": "0.2.0", - "repeat-element": "1.1.2" - } - }, - "bufferutil": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-1.2.1.tgz", - "integrity": "sha1-N75dNuHgZJIiHmjUdLGsWOUQy9c=", - "dev": true, - "optional": true, - "requires": { - "bindings": "1.2.1", - "nan": "2.6.2" - } - }, - "builtin-modules": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", - "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", - "dev": true - }, - "bytes": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-2.4.0.tgz", - "integrity": "sha1-fZcZb51br39pNeJZhVSe3SpsIzk=", - "dev": true - }, - "callsite": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz", - "integrity": "sha1-KAOY5dZkvXQDi28JBRU+borxvCA=", - "dev": true - }, - "camelcase": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", - "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=", - "dev": true - }, - "camelcase-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", - "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=", - "dev": true, - "requires": { - "camelcase": "2.1.1", - "map-obj": "1.0.1" - } - }, - "caseless": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.10.0.tgz", - "integrity": "sha1-7WsnGa3NH9GPWNwIHA8aW0OWOQk=", - "dev": true - }, - "center-align": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz", - "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=", - "dev": true, - "requires": { - "align-text": "0.1.4", - "lazy-cache": "1.0.4" - } - }, - "chalk": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-0.5.1.tgz", - "integrity": "sha1-Zjs6ZItotV0EaQ1JFnqoN4WPIXQ=", - "dev": true, - "requires": { - "ansi-styles": "1.1.0", - "escape-string-regexp": "1.0.5", - "has-ansi": "0.1.0", - "strip-ansi": "0.3.0", - "supports-color": "0.2.0" - } - }, - "chokidar": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-1.7.0.tgz", - "integrity": "sha1-eY5ol3gVHIB2tLNg5e3SjNortGg=", - "dev": true, - "requires": { - "anymatch": "1.3.0", - "async-each": "1.0.1", - "fsevents": "1.1.2", - "glob-parent": "2.0.0", - "inherits": "2.0.3", - "is-binary-path": "1.0.1", - "is-glob": "2.0.1", - "path-is-absolute": "1.0.1", - "readdirp": "2.1.0" - } - }, - "cliui": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", - "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", - "dev": true, - "requires": { - "center-align": "0.1.3", - "right-align": "0.1.3", - "wordwrap": "0.0.2" - }, - "dependencies": { - "wordwrap": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", - "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=", - "dev": true - } - } - }, - "clone": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.2.tgz", - "integrity": "sha1-Jgt6meux7f4kdTgXX3gyQ8sZ0Uk=", - "dev": true - }, - "clone-stats": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-0.0.1.tgz", - "integrity": "sha1-uI+UqCzzi4eR1YBG6kAprYjKmdE=", - "dev": true - }, - "colors": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz", - "integrity": "sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs=", - "dev": true - }, - "combined-stream": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz", - "integrity": "sha1-k4NwpXtKUd6ix3wV1cX9+JUWQAk=", - "dev": true, - "requires": { - "delayed-stream": "1.0.0" - } - }, - "commander": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.6.0.tgz", - "integrity": "sha1-nfflL7Kgyw+4kFjugMMQQiXzfh0=", - "dev": true - }, - "compare-func": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/compare-func/-/compare-func-1.3.2.tgz", - "integrity": "sha1-md0LpFfh+bxyKxLAjsM+6rMfpkg=", - "dev": true, - "requires": { - "array-ify": "1.0.0", - "dot-prop": "3.0.0" - } - }, - "component-bind": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz", - "integrity": "sha1-AMYIq33Nk4l8AAllGx06jh5zu9E=", - "dev": true - }, - "component-emitter": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.1.2.tgz", - "integrity": "sha1-KWWU8nU9qmOZbSrwjRWpURbJrsM=", - "dev": true - }, - "component-inherit": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/component-inherit/-/component-inherit-0.0.3.tgz", - "integrity": "sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM=", - "dev": true - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true - }, - "concurrently": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-2.2.0.tgz", - "integrity": "sha1-utJI4LsSn7FiF2iQOmMR1F1WiVo=", - "dev": true, - "requires": { - "bluebird": "2.9.6", - "chalk": "0.5.1", - "commander": "2.6.0", - "cross-spawn": "0.2.9", - "lodash": "4.17.4", - "moment": "2.18.1", - "rx": "2.3.24" - } - }, - "connect": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/connect/-/connect-3.6.2.tgz", - "integrity": "sha1-aU6NIGgb/kkCgsiriGvpjwn0L+c=", - "dev": true, - "requires": { - "debug": "2.6.7", - "finalhandler": "1.0.3", - "parseurl": "1.3.1", - "utils-merge": "1.0.0" - } - }, - "content-type": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.2.tgz", - "integrity": "sha1-t9ETrueo3Se9IRM8TcJSnfFyHu0=", - "dev": true - }, - "conventional-changelog": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/conventional-changelog/-/conventional-changelog-1.1.4.tgz", - "integrity": "sha1-EIvHUMKjF+IA4vm0E8qqH4x++js=", - "dev": true, - "requires": { - "conventional-changelog-angular": "1.4.0", - "conventional-changelog-atom": "0.1.1", - "conventional-changelog-codemirror": "0.1.0", - "conventional-changelog-core": "1.9.0", - "conventional-changelog-ember": "0.2.6", - "conventional-changelog-eslint": "0.1.0", - "conventional-changelog-express": "0.1.0", - "conventional-changelog-jquery": "0.1.0", - "conventional-changelog-jscs": "0.1.0", - "conventional-changelog-jshint": "0.1.0" - } - }, - "conventional-changelog-angular": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-1.4.0.tgz", - "integrity": "sha512-ukKX22lJl9ewogze1hKbBuff/dGMG2uyGpOhhw0ehhlv6GtdeCxj51YfGOZ5qC89WwsHT7SDXFzBKidwH3pwmQ==", - "dev": true, - "requires": { - "compare-func": "1.3.2", - "github-url-from-git": "1.5.0", - "q": "1.5.0", - "read-pkg-up": "2.0.0" - } - }, - "conventional-changelog-atom": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/conventional-changelog-atom/-/conventional-changelog-atom-0.1.1.tgz", - "integrity": "sha512-6Nlu/+MiD4gi7k3Z+N1vMJWpaPSdvFPWzPGnH4OXewHAxiAl0L/TT9CGgA01fosPxmYr4hMNtD7kyN0tkg8vIA==", - "dev": true, - "requires": { - "q": "1.5.0" - } - }, - "conventional-changelog-cli": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/conventional-changelog-cli/-/conventional-changelog-cli-1.3.2.tgz", - "integrity": "sha512-Z89mXKV0IIB0q8tNvIIZtNNrun3MUuQC0YJPzsF2t5UyaqmqnOpLNLHX28+Pwi+aHI2LQjEar1OmEoZgYP+6Kw==", - "dev": true, - "requires": { - "add-stream": "1.0.0", - "conventional-changelog": "1.1.4", - "lodash": "4.17.4", - "meow": "3.7.0", - "tempfile": "1.1.1" - } - }, - "conventional-changelog-codemirror": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/conventional-changelog-codemirror/-/conventional-changelog-codemirror-0.1.0.tgz", - "integrity": "sha1-dXelkdv5tTjnoVCn7mL2WihyszQ=", - "dev": true, - "requires": { - "q": "1.5.0" - } - }, - "conventional-changelog-core": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/conventional-changelog-core/-/conventional-changelog-core-1.9.0.tgz", - "integrity": "sha1-3l37wJGEdlZQjUo4njXJobxJ5/Q=", - "dev": true, - "requires": { - "conventional-changelog-writer": "1.4.1", - "conventional-commits-parser": "1.3.0", - "dateformat": "1.0.12", - "get-pkg-repo": "1.4.0", - "git-raw-commits": "1.2.0", - "git-remote-origin-url": "2.0.0", - "git-semver-tags": "1.2.1", - "lodash": "4.17.4", - "normalize-package-data": "2.4.0", - "q": "1.5.0", - "read-pkg": "1.1.0", - "read-pkg-up": "1.0.1", - "through2": "2.0.3" - }, - "dependencies": { - "find-up": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", - "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", - "dev": true, - "requires": { - "path-exists": "2.1.0", - "pinkie-promise": "2.0.1" - } - }, - "load-json-file": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", - "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", - "dev": true, - "requires": { - "graceful-fs": "4.1.11", - "parse-json": "2.2.0", - "pify": "2.3.0", - "pinkie-promise": "2.0.1", - "strip-bom": "2.0.0" - } - }, - "path-exists": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", - "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", - "dev": true, - "requires": { - "pinkie-promise": "2.0.1" - } - }, - "path-type": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", - "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", - "dev": true, - "requires": { - "graceful-fs": "4.1.11", - "pify": "2.3.0", - "pinkie-promise": "2.0.1" - } - }, - "read-pkg": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", - "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", - "dev": true, - "requires": { - "load-json-file": "1.1.0", - "normalize-package-data": "2.4.0", - "path-type": "1.1.0" - } - }, - "read-pkg-up": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", - "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", - "dev": true, - "requires": { - "find-up": "1.1.2", - "read-pkg": "1.1.0" - } - }, - "strip-bom": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", - "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", - "dev": true, - "requires": { - "is-utf8": "0.2.1" - } - } - } - }, - "conventional-changelog-ember": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/conventional-changelog-ember/-/conventional-changelog-ember-0.2.6.tgz", - "integrity": "sha1-i3NVQZ9RJ0k8TFYkc6svx5LxwrY=", - "dev": true, - "requires": { - "q": "1.5.0" - } - }, - "conventional-changelog-eslint": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/conventional-changelog-eslint/-/conventional-changelog-eslint-0.1.0.tgz", - "integrity": "sha1-pSQR6ZngUBzlALhWsKZD0DMJB+I=", - "dev": true, - "requires": { - "q": "1.5.0" - } - }, - "conventional-changelog-express": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/conventional-changelog-express/-/conventional-changelog-express-0.1.0.tgz", - "integrity": "sha1-VcbIQcgRliA2wDe9vZZKVK4xD84=", - "dev": true, - "requires": { - "q": "1.5.0" - } - }, - "conventional-changelog-jquery": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/conventional-changelog-jquery/-/conventional-changelog-jquery-0.1.0.tgz", - "integrity": "sha1-Agg5cWLjhGmG5xJztsecW1+A9RA=", - "dev": true, - "requires": { - "q": "1.5.0" - } - }, - "conventional-changelog-jscs": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/conventional-changelog-jscs/-/conventional-changelog-jscs-0.1.0.tgz", - "integrity": "sha1-BHnrRDzH1yxYvwvPDvHURKkvDlw=", - "dev": true, - "requires": { - "q": "1.5.0" - } - }, - "conventional-changelog-jshint": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/conventional-changelog-jshint/-/conventional-changelog-jshint-0.1.0.tgz", - "integrity": "sha1-AMq46aMxdIer2UxNhGcTQpGNKgc=", - "dev": true, - "requires": { - "compare-func": "1.3.2", - "q": "1.5.0" - } - }, - "conventional-changelog-writer": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/conventional-changelog-writer/-/conventional-changelog-writer-1.4.1.tgz", - "integrity": "sha1-P0y00APrtWmJ0w00WJO1KkNjnI4=", - "dev": true, - "requires": { - "compare-func": "1.3.2", - "conventional-commits-filter": "1.0.0", - "dateformat": "1.0.12", - "handlebars": "4.0.10", - "json-stringify-safe": "5.0.1", - "lodash": "4.17.4", - "meow": "3.7.0", - "semver": "5.3.0", - "split": "1.0.0", - "through2": "2.0.3" - } - }, - "conventional-commits-filter": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/conventional-commits-filter/-/conventional-commits-filter-1.0.0.tgz", - "integrity": "sha1-b8KmWTcrw/IznPn//34bA0S5MDk=", - "dev": true, - "requires": { - "is-subset": "0.1.1", - "modify-values": "1.0.0" - } - }, - "conventional-commits-parser": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-1.3.0.tgz", - "integrity": "sha1-4ye1MZThp61dxjR57pCZpSsCSGU=", - "dev": true, - "requires": { - "is-text-path": "1.0.1", - "JSONStream": "1.3.1", - "lodash": "4.17.4", - "meow": "3.7.0", - "split2": "2.1.1", - "through2": "2.0.3", - "trim-off-newlines": "1.0.1" - } - }, - "convert-source-map": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.5.0.tgz", - "integrity": "sha1-ms1whRxtXf3ZPZKC5e35SgP/RrU=", - "dev": true - }, - "cookie": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", - "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=", - "dev": true - }, - "core-js": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.4.1.tgz", - "integrity": "sha1-TekR5mew6ukSTjQlS1OupvxhjT4=", - "dev": true - }, - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", - "dev": true - }, - "corser": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/corser/-/corser-2.0.1.tgz", - "integrity": "sha1-jtolLsqrWEDc2XXOuQ2TcMgZ/4c=", - "dev": true - }, - "cross-spawn": { - "version": "0.2.9", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-0.2.9.tgz", - "integrity": "sha1-vWf5bAfvtjA7f+lMHpefiEeOCjk=", - "dev": true, - "requires": { - "lru-cache": "2.7.3" - } - }, - "cryptiles": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz", - "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=", - "dev": true, - "requires": { - "boom": "2.10.1" - } - }, - "ctype": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/ctype/-/ctype-0.5.3.tgz", - "integrity": "sha1-gsGMJGH3QRTvFsE1IkrQuRRMoS8=", - "dev": true - }, - "currently-unhandled": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", - "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=", - "dev": true, - "requires": { - "array-find-index": "1.0.2" - } - }, - "custom-event": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/custom-event/-/custom-event-1.0.1.tgz", - "integrity": "sha1-XQKkaFCt8bSjF5RqOSj8y1v9BCU=", - "dev": true - }, - "d": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.0.tgz", - "integrity": "sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=", - "dev": true, - "requires": { - "es5-ext": "0.10.24" - } - }, - "dargs": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/dargs/-/dargs-4.1.0.tgz", - "integrity": "sha1-A6nbtLXC8Tm/FK5T8LiipqhvThc=", - "dev": true, - "requires": { - "number-is-nan": "1.0.1" - } - }, - "data-uri-to-buffer": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-0.0.4.tgz", - "integrity": "sha1-RuE6udqOMJdFyNAc5UchPr2y/j8=", - "dev": true - }, - "dateformat": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-1.0.12.tgz", - "integrity": "sha1-nxJLZ1lMk3/3BpMuSmQsyo27/uk=", - "dev": true, - "requires": { - "get-stdin": "4.0.1", - "meow": "3.7.0" - } - }, - "debug": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.7.tgz", - "integrity": "sha1-krrR9tBbu2u6Isyoi80OyJTChh4=", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", - "dev": true - }, - "defaults": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", - "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", - "dev": true, - "requires": { - "clone": "1.0.2" - } - }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", - "dev": true - }, - "depd": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.0.tgz", - "integrity": "sha1-4b2Cxqq2ztlluXuIsX7T5SjKGMM=", - "dev": true - }, - "deprecated": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/deprecated/-/deprecated-0.0.1.tgz", - "integrity": "sha1-+cmvVGSvoeepcUWKi97yqpTVuxk=", - "dev": true - }, - "detect-file": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-0.1.0.tgz", - "integrity": "sha1-STXe39lIhkjgBrASlWbpOGcR6mM=", - "dev": true, - "requires": { - "fs-exists-sync": "0.1.0" - } - }, - "detect-indent": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz", - "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=", - "dev": true, - "requires": { - "repeating": "2.0.1" - } - }, - "di": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/di/-/di-0.0.1.tgz", - "integrity": "sha1-gGZJMmzqp8qjMG112YXqJ0i6kTw=", - "dev": true - }, - "dom-serialize": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/dom-serialize/-/dom-serialize-2.2.1.tgz", - "integrity": "sha1-ViromZ9Evl6jB29UGdzVnrQ6yVs=", - "dev": true, - "requires": { - "custom-event": "1.0.1", - "ent": "2.2.0", - "extend": "3.0.1", - "void-elements": "2.0.1" - } - }, - "dot-prop": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-3.0.0.tgz", - "integrity": "sha1-G3CK8JSknJoOfbyteQq6U52sEXc=", - "dev": true, - "requires": { - "is-obj": "1.0.1" - } - }, - "duplexer2": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.0.2.tgz", - "integrity": "sha1-xhTc9n4vsUmVqRcR5aYX6KYKMds=", - "dev": true, - "requires": { - "readable-stream": "1.1.14" - }, - "dependencies": { - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true - }, - "readable-stream": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", - "dev": true, - "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "0.0.1", - "string_decoder": "0.10.31" - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", - "dev": true - } - } - }, - "duplexify": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.5.0.tgz", - "integrity": "sha1-GqdzAC4VeEV+nZ1KULDMquvL1gQ=", - "dev": true, - "requires": { - "end-of-stream": "1.0.0", - "inherits": "2.0.3", - "readable-stream": "2.3.3", - "stream-shift": "1.0.0" - }, - "dependencies": { - "end-of-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.0.0.tgz", - "integrity": "sha1-1FlucCc0qT5A6a+GQxnqvZn/Lw4=", - "dev": true, - "requires": { - "once": "1.3.3" - } - } - } - }, - "ecstatic": { - "version": "0.7.6", - "resolved": "https://registry.npmjs.org/ecstatic/-/ecstatic-0.7.6.tgz", - "integrity": "sha1-y6KqvqRrjNl/AWCFlxO3DSjmoCI=", - "dev": true, - "requires": { - "he": "0.5.0", - "mime": "1.3.6", - "minimist": "1.2.0", - "url-join": "0.0.1" - } - }, - "ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", - "dev": true - }, - "encodeurl": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.1.tgz", - "integrity": "sha1-eePVhlU0aQn+bw9Fpd5oEDspTSA=", - "dev": true - }, - "end-of-stream": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-0.1.5.tgz", - "integrity": "sha1-jhdyBsPICDfYVjLouTWd/osvbq8=", - "dev": true, - "requires": { - "once": "1.3.3" - } - }, - "engine.io": { - "version": "1.8.4", - "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-1.8.4.tgz", - "integrity": "sha1-d7zhK4Dl1gQpM3/sOw2vaR68kAM=", - "dev": true, - "requires": { - "accepts": "1.3.3", - "base64id": "1.0.0", - "cookie": "0.3.1", - "debug": "2.3.3", - "engine.io-parser": "1.3.2", - "ws": "1.1.4" - }, - "dependencies": { - "debug": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", - "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", - "dev": true, - "requires": { - "ms": "0.7.2" - } - }, - "ms": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", - "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=", - "dev": true - } - } - }, - "engine.io-client": { - "version": "1.8.4", - "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-1.8.4.tgz", - "integrity": "sha1-n+hd7iWFPKa6viW9KtaHEIY+kcI=", - "dev": true, - "requires": { - "component-emitter": "1.2.1", - "component-inherit": "0.0.3", - "debug": "2.3.3", - "engine.io-parser": "1.3.2", - "has-cors": "1.1.0", - "indexof": "0.0.1", - "parsejson": "0.0.3", - "parseqs": "0.0.5", - "parseuri": "0.0.5", - "ws": "1.1.2", - "xmlhttprequest-ssl": "1.5.3", - "yeast": "0.1.2" - }, - "dependencies": { - "component-emitter": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", - "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", - "dev": true - }, - "debug": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", - "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", - "dev": true, - "requires": { - "ms": "0.7.2" - } - }, - "ms": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", - "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=", - "dev": true - }, - "ws": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/ws/-/ws-1.1.2.tgz", - "integrity": "sha1-iiRPoFJAHgjJiGz0SoUYnh/UBn8=", - "dev": true, - "requires": { - "options": "0.0.6", - "ultron": "1.0.2" - } - } - } - }, - "engine.io-parser": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-1.3.2.tgz", - "integrity": "sha1-k3sHnwAH0Ik+xW1GyyILjLQ1Igo=", - "dev": true, - "requires": { - "after": "0.8.2", - "arraybuffer.slice": "0.0.6", - "base64-arraybuffer": "0.1.5", - "blob": "0.0.4", - "has-binary": "0.1.7", - "wtf-8": "1.0.0" - } - }, - "ent": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/ent/-/ent-2.2.0.tgz", - "integrity": "sha1-6WQhkyWiHQX0RGai9obtbOX13R0=", - "dev": true - }, - "error-ex": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.1.tgz", - "integrity": "sha1-+FWobOYa3E6GIcPNoh56dhLDqNw=", - "dev": true, - "requires": { - "is-arrayish": "0.2.1" - } - }, - "es5-ext": { - "version": "0.10.24", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.24.tgz", - "integrity": "sha1-pVh3yZJLwMjZvTwsvhdJWsFwmxQ=", - "dev": true, - "requires": { - "es6-iterator": "2.0.1", - "es6-symbol": "3.1.1" - } - }, - "es6-iterator": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.1.tgz", - "integrity": "sha1-jjGcnwRTv1ddN0lAplWSDlnKVRI=", - "dev": true, - "requires": { - "d": "1.0.0", - "es5-ext": "0.10.24", - "es6-symbol": "3.1.1" - } - }, - "es6-module-loader": { - "version": "0.17.11", - "resolved": "https://registry.npmjs.org/es6-module-loader/-/es6-module-loader-0.17.11.tgz", - "integrity": "sha1-CU8ELjtNMIa8/Rc4Cv+r38mfNdc=", - "dev": true, - "requires": { - "when": "3.7.8" - } - }, - "es6-shim": { - "version": "0.35.3", - "resolved": "https://registry.npmjs.org/es6-shim/-/es6-shim-0.35.3.tgz", - "integrity": "sha1-m/tzY/7//4emzbbNk+QF7DxLbyY=", - "dev": true - }, - "es6-symbol": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz", - "integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=", - "dev": true, - "requires": { - "d": "1.0.0", - "es5-ext": "0.10.24" - } - }, - "es6-template-strings": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/es6-template-strings/-/es6-template-strings-2.0.1.tgz", - "integrity": "sha1-sWbGpiVi9Hi7d3X2ypYQOlmbSyw=", - "dev": true, - "requires": { - "es5-ext": "0.10.24", - "esniff": "1.1.0" - } - }, - "escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", - "dev": true - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true - }, - "esniff": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/esniff/-/esniff-1.1.0.tgz", - "integrity": "sha1-xmhJIp+RRk3t4uDUAgHtar9l8qw=", - "dev": true, - "requires": { - "d": "1.0.0", - "es5-ext": "0.10.24" - } - }, - "esutils": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", - "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", - "dev": true - }, - "eventemitter3": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-1.2.0.tgz", - "integrity": "sha1-HIaZHYFq0eUEdQ5zh0Ik7PO+xQg=", - "dev": true - }, - "exit": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", - "dev": true - }, - "expand-braces": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/expand-braces/-/expand-braces-0.1.2.tgz", - "integrity": "sha1-SIsdHSRRyz06axks/AMPRMWFX+o=", - "dev": true, - "requires": { - "array-slice": "0.2.3", - "array-unique": "0.2.1", - "braces": "0.1.5" - }, - "dependencies": { - "array-slice": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-0.2.3.tgz", - "integrity": "sha1-3Tz7gO15c6dRF82sabC5nshhhvU=", - "dev": true - }, - "braces": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/braces/-/braces-0.1.5.tgz", - "integrity": "sha1-wIVxEIUpHYt1/ddOqw+FlygHEeY=", - "dev": true, - "requires": { - "expand-range": "0.1.1" - } - }, - "expand-range": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-0.1.1.tgz", - "integrity": "sha1-TLjtoJk8pW+k9B/ELzy7TMrf8EQ=", - "dev": true, - "requires": { - "is-number": "0.1.1", - "repeat-string": "0.2.2" - } - }, - "is-number": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-0.1.1.tgz", - "integrity": "sha1-aaevEWlj1HIG7JvZtIoUIW8eOAY=", - "dev": true - }, - "repeat-string": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-0.2.2.tgz", - "integrity": "sha1-x6jTI2BoNiBZp+RlH8aITosftK4=", - "dev": true - } - } - }, - "expand-brackets": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", - "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", - "dev": true, - "requires": { - "is-posix-bracket": "0.1.1" - } - }, - "expand-range": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz", - "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=", - "dev": true, - "requires": { - "fill-range": "2.2.3" - } - }, - "expand-tilde": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-1.2.2.tgz", - "integrity": "sha1-C4HrqJflo9MdHD0QL48BRB5VlEk=", - "dev": true, - "requires": { - "os-homedir": "1.0.2" - } - }, - "extend": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", - "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=", - "dev": true - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "0.1.1" - } - }, - "extglob": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", - "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", - "dev": true, - "requires": { - "is-extglob": "1.0.0" - } - }, - "fancy-log": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/fancy-log/-/fancy-log-1.3.0.tgz", - "integrity": "sha1-Rb4X0Cu5kX1gzP/UmVyZnmyMmUg=", - "dev": true, - "requires": { - "chalk": "1.1.3", - "time-stamp": "1.1.0" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - }, - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" - } - }, - "has-ansi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", - "dev": true, - "requires": { - "ansi-regex": "2.1.1" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "2.1.1" - } - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } - } - }, - "filename-regex": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz", - "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=", - "dev": true - }, - "fill-range": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.3.tgz", - "integrity": "sha1-ULd9/X5Gm8dJJHCWNpn+eoSFpyM=", - "dev": true, - "requires": { - "is-number": "2.1.0", - "isobject": "2.1.0", - "randomatic": "1.1.7", - "repeat-element": "1.1.2", - "repeat-string": "1.6.1" - } - }, - "finalhandler": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.0.3.tgz", - "integrity": "sha1-70fneVDpmXgOhgIqVg4yF+DQzIk=", - "dev": true, - "requires": { - "debug": "2.6.7", - "encodeurl": "1.0.1", - "escape-html": "1.0.3", - "on-finished": "2.3.0", - "parseurl": "1.3.1", - "statuses": "1.3.1", - "unpipe": "1.0.0" - } - }, - "find-index": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/find-index/-/find-index-0.1.1.tgz", - "integrity": "sha1-Z101iyyjiS15Whq0cjL4tuLg3eQ=", - "dev": true - }, - "find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", - "dev": true, - "requires": { - "locate-path": "2.0.0" - } - }, - "findup-sync": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-0.4.3.tgz", - "integrity": "sha1-QAQ5Kee8YK3wt/SCfExudaDeyhI=", - "dev": true, - "requires": { - "detect-file": "0.1.0", - "is-glob": "2.0.1", - "micromatch": "2.3.11", - "resolve-dir": "0.1.1" - } - }, - "fined": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fined/-/fined-1.1.0.tgz", - "integrity": "sha1-s33IRLdqL15wgeiE98CuNE8VNHY=", - "dev": true, - "requires": { - "expand-tilde": "2.0.2", - "is-plain-object": "2.0.4", - "object.defaults": "1.1.0", - "object.pick": "1.2.0", - "parse-filepath": "1.0.1" - }, - "dependencies": { - "expand-tilde": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", - "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=", - "dev": true, - "requires": { - "homedir-polyfill": "1.0.1" - } - } - } - }, - "firebase": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/firebase/-/firebase-4.1.3.tgz", - "integrity": "sha1-5dcyc2bIVNwSRhYzuov+6i9cc1g=", - "requires": { - "dom-storage": "2.0.2", - "faye-websocket": "0.9.3", - "jsonwebtoken": "7.4.1", - "promise-polyfill": "6.0.2", - "xmlhttprequest": "1.8.0" - }, - "dependencies": { - "base64url": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/base64url/-/base64url-2.0.0.tgz", - "integrity": "sha1-6sFuA+oUOO/5Qj1puqNiYu0fcLs=" - }, - "buffer-equal-constant-time": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", - "integrity": "sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk=" - }, - "dom-storage": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/dom-storage/-/dom-storage-2.0.2.tgz", - "integrity": "sha1-7RfL9oq9EOCu+BgnE+KXxeS1ALA=" - }, - "ecdsa-sig-formatter": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.9.tgz", - "integrity": "sha1-S8kmJ07Dtau1AW5+HWCSGsJisqE=", - "requires": { - "base64url": "2.0.0", - "safe-buffer": "5.1.0" - } - }, - "faye-websocket": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.9.3.tgz", - "integrity": "sha1-SCpQWw3wrmJrlphm0710DNuWLoM=", - "requires": { - "websocket-driver": "0.6.5" - } - }, - "hoek": { - "version": "2.16.3", - "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", - "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=" - }, - "isemail": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/isemail/-/isemail-1.2.0.tgz", - "integrity": "sha1-vgPfjMPineTSxd9lASY/H6RZXpo=" - }, - "joi": { - "version": "6.10.1", - "resolved": "https://registry.npmjs.org/joi/-/joi-6.10.1.tgz", - "integrity": "sha1-TVDDGAeRIgAP5fFq8f+OGRe3fgY=", - "requires": { - "hoek": "2.16.3", - "isemail": "1.2.0", - "moment": "2.18.1", - "topo": "1.1.0" - } - }, - "jsonwebtoken": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-7.4.1.tgz", - "integrity": "sha1-fKMk9SFfi+A5zTWmxFu4y3SkSPs=", - "requires": { - "joi": "6.10.1", - "jws": "3.1.4", - "lodash.once": "4.1.1", - "ms": "2.0.0", - "xtend": "4.0.1" - } - }, - "jwa": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.1.5.tgz", - "integrity": "sha1-oFUs4CIHQs1S4VN3SjKQXDDnVuU=", - "requires": { - "base64url": "2.0.0", - "buffer-equal-constant-time": "1.0.1", - "ecdsa-sig-formatter": "1.0.9", - "safe-buffer": "5.1.0" - } - }, - "jws": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/jws/-/jws-3.1.4.tgz", - "integrity": "sha1-+ei5M46KhHJ31kRLFGT2GIDgUKI=", - "requires": { - "base64url": "2.0.0", - "jwa": "1.1.5", - "safe-buffer": "5.1.0" - } - }, - "lodash.once": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", - "integrity": "sha1-DdOXEhPHxW34gJd9UEyI+0cal6w=" - }, - "moment": { - "version": "2.18.1", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.18.1.tgz", - "integrity": "sha1-w2GT3Tzhwu7SrbfIAtu8d6gbHA8=" - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "promise-polyfill": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/promise-polyfill/-/promise-polyfill-6.0.2.tgz", - "integrity": "sha1-2chtPcTcLfkBboiUbe/Wm0m0EWI=" - }, - "safe-buffer": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.0.tgz", - "integrity": "sha512-aSLEDudu6OoRr/2rU609gRmnYboRLxgDG1z9o2Q0os7236FwvcqIOO8r8U5JUEwivZOhDaKlFO4SbPTJYyBEyQ==" - }, - "topo": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/topo/-/topo-1.1.0.tgz", - "integrity": "sha1-6ddRYV0buH3IZdsYL6HKCl71NtU=", - "requires": { - "hoek": "2.16.3" - } - }, - "websocket-driver": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.6.5.tgz", - "integrity": "sha1-XLJVbOuF9Dc8bYI4qmkchFThOjY=", - "requires": { - "websocket-extensions": "0.1.1" - } - }, - "websocket-extensions": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.1.tgz", - "integrity": "sha1-domUmcGEtu91Q3fC27DNbLVdKec=" - }, - "xmlhttprequest": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/xmlhttprequest/-/xmlhttprequest-1.8.0.tgz", - "integrity": "sha1-Z/4HXFwk/vOfnWX197f+dRcZaPw=" - }, - "xtend": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", - "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=" - } - } - }, - "first-chunk-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/first-chunk-stream/-/first-chunk-stream-1.0.0.tgz", - "integrity": "sha1-Wb+1DNkF9g18OUzT2ayqtOatk04=", - "dev": true - }, - "flagged-respawn": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/flagged-respawn/-/flagged-respawn-0.3.2.tgz", - "integrity": "sha1-/xke3c1wiKZ1smEP/8l2vpuAdLU=", - "dev": true - }, - "for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", - "dev": true - }, - "for-own": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", - "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", - "dev": true, - "requires": { - "for-in": "1.0.2" - } - }, - "forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", - "dev": true - }, - "form-data": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-0.2.0.tgz", - "integrity": "sha1-Jvi8JtpkQOKZy9z7aQNcT3em5GY=", - "dev": true, - "requires": { - "async": "0.9.2", - "combined-stream": "0.0.7", - "mime-types": "2.0.14" - }, - "dependencies": { - "async": { - "version": "0.9.2", - "resolved": "https://registry.npmjs.org/async/-/async-0.9.2.tgz", - "integrity": "sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0=", - "dev": true - }, - "combined-stream": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-0.0.7.tgz", - "integrity": "sha1-ATfmV7qlp1QcV6w3rF/AfXO03B8=", - "dev": true, - "requires": { - "delayed-stream": "0.0.5" - } - }, - "delayed-stream": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-0.0.5.tgz", - "integrity": "sha1-1LH0OpPoKW3+AmlPRoC8N6MTxz8=", - "dev": true - }, - "mime-db": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.12.0.tgz", - "integrity": "sha1-PQxjGA9FjrENMlqqN9fFiuMS6dc=", - "dev": true - }, - "mime-types": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.0.14.tgz", - "integrity": "sha1-MQ4VnbI+B3+Lsit0jav6SVcUCqY=", - "dev": true, - "requires": { - "mime-db": "1.12.0" - } - } - } - }, - "fs-access": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/fs-access/-/fs-access-1.0.1.tgz", - "integrity": "sha1-1qh/JiJxzv6+wwxVNAf7mV2od3o=", - "dev": true, - "requires": { - "null-check": "1.0.0" - } - }, - "fs-exists-sync": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/fs-exists-sync/-/fs-exists-sync-0.1.0.tgz", - "integrity": "sha1-mC1ok6+RjnLQjeyehnP/K1qNat0=", - "dev": true - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true - }, - "fsevents": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.1.2.tgz", - "integrity": "sha512-Sn44E5wQW4bTHXvQmvSHwqbuiXtduD6Rrjm2ZtUEGbyrig+nUH3t/QD4M4/ZXViY556TBpRgZkHLDx3JxPwxiw==", - "dev": true, - "optional": true, - "requires": { - "nan": "2.6.2", - "node-pre-gyp": "0.6.36" - }, - "dependencies": { - "abbrev": { - "version": "1.1.0", - "bundled": true, - "dev": true, - "optional": true - }, - "ajv": { - "version": "4.11.8", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "co": "4.6.0", - "json-stable-stringify": "1.0.1" - } - }, - "ansi-regex": { - "version": "2.1.1", - "bundled": true, - "dev": true - }, - "aproba": { - "version": "1.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "are-we-there-yet": { - "version": "1.1.4", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "delegates": "1.0.0", - "readable-stream": "2.2.9" - } - }, - "asn1": { - "version": "0.2.3", - "bundled": true, - "dev": true, - "optional": true - }, - "assert-plus": { - "version": "0.2.0", - "bundled": true, - "dev": true, - "optional": true - }, - "asynckit": { - "version": "0.4.0", - "bundled": true, - "dev": true, - "optional": true - }, - "aws-sign2": { - "version": "0.6.0", - "bundled": true, - "dev": true, - "optional": true - }, - "aws4": { - "version": "1.6.0", - "bundled": true, - "dev": true, - "optional": true - }, - "balanced-match": { - "version": "0.4.2", - "bundled": true, - "dev": true - }, - "bcrypt-pbkdf": { - "version": "1.0.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "tweetnacl": "0.14.5" - } - }, - "block-stream": { - "version": "0.0.9", - "bundled": true, - "dev": true, - "requires": { - "inherits": "2.0.3" - } - }, - "boom": { - "version": "2.10.1", - "bundled": true, - "dev": true, - "requires": { - "hoek": "2.16.3" - } - }, - "brace-expansion": { - "version": "1.1.7", - "bundled": true, - "dev": true, - "requires": { - "balanced-match": "0.4.2", - "concat-map": "0.0.1" - } - }, - "buffer-shims": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "caseless": { - "version": "0.12.0", - "bundled": true, - "dev": true, - "optional": true - }, - "co": { - "version": "4.6.0", - "bundled": true, - "dev": true, - "optional": true - }, - "code-point-at": { - "version": "1.1.0", - "bundled": true, - "dev": true - }, - "combined-stream": { - "version": "1.0.5", - "bundled": true, - "dev": true, - "requires": { - "delayed-stream": "1.0.0" - } - }, - "concat-map": { - "version": "0.0.1", - "bundled": true, - "dev": true - }, - "console-control-strings": { - "version": "1.1.0", - "bundled": true, - "dev": true - }, - "core-util-is": { - "version": "1.0.2", - "bundled": true, - "dev": true - }, - "cryptiles": { - "version": "2.0.5", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "boom": "2.10.1" - } - }, - "dashdash": { - "version": "1.14.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "assert-plus": "1.0.0" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - } - } - }, - "debug": { - "version": "2.6.8", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "ms": "2.0.0" - } - }, - "deep-extend": { - "version": "0.4.2", - "bundled": true, - "dev": true, - "optional": true - }, - "delayed-stream": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "delegates": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "ecc-jsbn": { - "version": "0.1.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "jsbn": "0.1.1" - } - }, - "extend": { - "version": "3.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "extsprintf": { - "version": "1.0.2", - "bundled": true, - "dev": true - }, - "forever-agent": { - "version": "0.6.1", - "bundled": true, - "dev": true, - "optional": true - }, - "form-data": { - "version": "2.1.4", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "asynckit": "0.4.0", - "combined-stream": "1.0.5", - "mime-types": "2.1.15" - } - }, - "fs.realpath": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "fstream": { - "version": "1.0.11", - "bundled": true, - "dev": true, - "requires": { - "graceful-fs": "4.1.11", - "inherits": "2.0.3", - "mkdirp": "0.5.1", - "rimraf": "2.6.1" - } - }, - "fstream-ignore": { - "version": "1.0.5", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "fstream": "1.0.11", - "inherits": "2.0.3", - "minimatch": "3.0.4" - } - }, - "gauge": { - "version": "2.7.4", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "aproba": "1.1.1", - "console-control-strings": "1.1.0", - "has-unicode": "2.0.1", - "object-assign": "4.1.1", - "signal-exit": "3.0.2", - "string-width": "1.0.2", - "strip-ansi": "3.0.1", - "wide-align": "1.1.2" - } - }, - "getpass": { - "version": "0.1.7", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "assert-plus": "1.0.0" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - } - } - }, - "glob": { - "version": "7.1.2", - "bundled": true, - "dev": true, - "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" - } - }, - "graceful-fs": { - "version": "4.1.11", - "bundled": true, - "dev": true - }, - "har-schema": { - "version": "1.0.5", - "bundled": true, - "dev": true, - "optional": true - }, - "har-validator": { - "version": "4.2.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "ajv": "4.11.8", - "har-schema": "1.0.5" - } - }, - "has-unicode": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "hawk": { - "version": "3.1.3", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "boom": "2.10.1", - "cryptiles": "2.0.5", - "hoek": "2.16.3", - "sntp": "1.0.9" - } - }, - "hoek": { - "version": "2.16.3", - "bundled": true, - "dev": true - }, - "http-signature": { - "version": "1.1.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "assert-plus": "0.2.0", - "jsprim": "1.4.0", - "sshpk": "1.13.0" - } - }, - "inflight": { - "version": "1.0.6", - "bundled": true, - "dev": true, - "requires": { - "once": "1.4.0", - "wrappy": "1.0.2" - } - }, - "inherits": { - "version": "2.0.3", - "bundled": true, - "dev": true - }, - "ini": { - "version": "1.3.4", - "bundled": true, - "dev": true, - "optional": true - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "requires": { - "number-is-nan": "1.0.1" - } - }, - "is-typedarray": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "isarray": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "isstream": { - "version": "0.1.2", - "bundled": true, - "dev": true, - "optional": true - }, - "jodid25519": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "jsbn": "0.1.1" - } - }, - "jsbn": { - "version": "0.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "json-schema": { - "version": "0.2.3", - "bundled": true, - "dev": true, - "optional": true - }, - "json-stable-stringify": { - "version": "1.0.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "jsonify": "0.0.0" - } - }, - "json-stringify-safe": { - "version": "5.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "jsonify": { - "version": "0.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "jsprim": { - "version": "1.4.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.0.2", - "json-schema": "0.2.3", - "verror": "1.3.6" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - } - } - }, - "mime-db": { - "version": "1.27.0", - "bundled": true, - "dev": true - }, - "mime-types": { - "version": "2.1.15", - "bundled": true, - "dev": true, - "requires": { - "mime-db": "1.27.0" - } - }, - "minimatch": { - "version": "3.0.4", - "bundled": true, - "dev": true, - "requires": { - "brace-expansion": "1.1.7" - } - }, - "minimist": { - "version": "0.0.8", - "bundled": true, - "dev": true - }, - "mkdirp": { - "version": "0.5.1", - "bundled": true, - "dev": true, - "requires": { - "minimist": "0.0.8" - } - }, - "ms": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "node-pre-gyp": { - "version": "0.6.36", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "mkdirp": "0.5.1", - "nopt": "4.0.1", - "npmlog": "4.1.0", - "rc": "1.2.1", - "request": "2.81.0", - "rimraf": "2.6.1", - "semver": "5.3.0", - "tar": "2.2.1", - "tar-pack": "3.4.0" - } - }, - "nopt": { - "version": "4.0.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "abbrev": "1.1.0", - "osenv": "0.1.4" - } - }, - "npmlog": { - "version": "4.1.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "are-we-there-yet": "1.1.4", - "console-control-strings": "1.1.0", - "gauge": "2.7.4", - "set-blocking": "2.0.0" - } - }, - "number-is-nan": { - "version": "1.0.1", - "bundled": true, - "dev": true - }, - "oauth-sign": { - "version": "0.8.2", - "bundled": true, - "dev": true, - "optional": true - }, - "object-assign": { - "version": "4.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "once": { - "version": "1.4.0", - "bundled": true, - "dev": true, - "requires": { - "wrappy": "1.0.2" - } - }, - "os-homedir": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "os-tmpdir": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "osenv": { - "version": "0.1.4", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "os-homedir": "1.0.2", - "os-tmpdir": "1.0.2" - } - }, - "path-is-absolute": { - "version": "1.0.1", - "bundled": true, - "dev": true - }, - "performance-now": { - "version": "0.2.0", - "bundled": true, - "dev": true, - "optional": true - }, - "process-nextick-args": { - "version": "1.0.7", - "bundled": true, - "dev": true - }, - "punycode": { - "version": "1.4.1", - "bundled": true, - "dev": true, - "optional": true - }, - "qs": { - "version": "6.4.0", - "bundled": true, - "dev": true, - "optional": true - }, - "rc": { - "version": "1.2.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "deep-extend": "0.4.2", - "ini": "1.3.4", - "minimist": "1.2.0", - "strip-json-comments": "2.0.1" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "bundled": true, - "dev": true, - "optional": true - } - } - }, - "readable-stream": { - "version": "2.2.9", - "bundled": true, - "dev": true, - "requires": { - "buffer-shims": "1.0.0", - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "1.0.7", - "string_decoder": "1.0.1", - "util-deprecate": "1.0.2" - } - }, - "request": { - "version": "2.81.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "aws-sign2": "0.6.0", - "aws4": "1.6.0", - "caseless": "0.12.0", - "combined-stream": "1.0.5", - "extend": "3.0.1", - "forever-agent": "0.6.1", - "form-data": "2.1.4", - "har-validator": "4.2.1", - "hawk": "3.1.3", - "http-signature": "1.1.1", - "is-typedarray": "1.0.0", - "isstream": "0.1.2", - "json-stringify-safe": "5.0.1", - "mime-types": "2.1.15", - "oauth-sign": "0.8.2", - "performance-now": "0.2.0", - "qs": "6.4.0", - "safe-buffer": "5.0.1", - "stringstream": "0.0.5", - "tough-cookie": "2.3.2", - "tunnel-agent": "0.6.0", - "uuid": "3.0.1" - } - }, - "rimraf": { - "version": "2.6.1", - "bundled": true, - "dev": true, - "requires": { - "glob": "7.1.2" - } - }, - "safe-buffer": { - "version": "5.0.1", - "bundled": true, - "dev": true - }, - "semver": { - "version": "5.3.0", - "bundled": true, - "dev": true, - "optional": true - }, - "set-blocking": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "signal-exit": { - "version": "3.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "sntp": { - "version": "1.0.9", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "hoek": "2.16.3" - } - }, - "sshpk": { - "version": "1.13.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "asn1": "0.2.3", - "assert-plus": "1.0.0", - "bcrypt-pbkdf": "1.0.1", - "dashdash": "1.14.1", - "ecc-jsbn": "0.1.1", - "getpass": "0.1.7", - "jodid25519": "1.0.2", - "jsbn": "0.1.1", - "tweetnacl": "0.14.5" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - } - } - }, - "string_decoder": { - "version": "1.0.1", - "bundled": true, - "dev": true, - "requires": { - "safe-buffer": "5.0.1" - } - }, - "string-width": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" - } - }, - "stringstream": { - "version": "0.0.5", - "bundled": true, - "dev": true, - "optional": true - }, - "strip-ansi": { - "version": "3.0.1", - "bundled": true, - "dev": true, - "requires": { - "ansi-regex": "2.1.1" - } - }, - "strip-json-comments": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "tar": { - "version": "2.2.1", - "bundled": true, - "dev": true, - "requires": { - "block-stream": "0.0.9", - "fstream": "1.0.11", - "inherits": "2.0.3" - } - }, - "tar-pack": { - "version": "3.4.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "debug": "2.6.8", - "fstream": "1.0.11", - "fstream-ignore": "1.0.5", - "once": "1.4.0", - "readable-stream": "2.2.9", - "rimraf": "2.6.1", - "tar": "2.2.1", - "uid-number": "0.0.6" - } - }, - "tough-cookie": { - "version": "2.3.2", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "punycode": "1.4.1" - } - }, - "tunnel-agent": { - "version": "0.6.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "safe-buffer": "5.0.1" - } - }, - "tweetnacl": { - "version": "0.14.5", - "bundled": true, - "dev": true, - "optional": true - }, - "uid-number": { - "version": "0.0.6", - "bundled": true, - "dev": true, - "optional": true - }, - "util-deprecate": { - "version": "1.0.2", - "bundled": true, - "dev": true - }, - "uuid": { - "version": "3.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "verror": { - "version": "1.3.6", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "extsprintf": "1.0.2" - } - }, - "wide-align": { - "version": "1.1.2", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "string-width": "1.0.2" - } - }, - "wrappy": { - "version": "1.0.2", - "bundled": true, - "dev": true - } - } - }, - "gaze": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/gaze/-/gaze-0.5.2.tgz", - "integrity": "sha1-QLcJU30k0dRXZ9takIaJ3+aaxE8=", - "dev": true, - "requires": { - "globule": "0.1.0" - } - }, - "generate-function": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.0.0.tgz", - "integrity": "sha1-aFj+fAlpt9TpCTM3ZHrHn2DfvnQ=", - "dev": true - }, - "generate-object-property": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/generate-object-property/-/generate-object-property-1.2.0.tgz", - "integrity": "sha1-nA4cQDCM6AT0eDYYuTf6iPmdUNA=", - "dev": true, - "requires": { - "is-property": "1.0.2" - } - }, - "get-pkg-repo": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/get-pkg-repo/-/get-pkg-repo-1.4.0.tgz", - "integrity": "sha1-xztInAbYDMVTbCyFP54FIyBWly0=", - "dev": true, - "requires": { - "hosted-git-info": "2.5.0", - "meow": "3.7.0", - "normalize-package-data": "2.4.0", - "parse-github-repo-url": "1.4.0", - "through2": "2.0.3" - } - }, - "get-stdin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", - "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=", - "dev": true - }, - "git-raw-commits": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-1.2.0.tgz", - "integrity": "sha1-DzqL/ZmuDy2LkiTViJKXXppS0Dw=", - "dev": true, - "requires": { - "dargs": "4.1.0", - "lodash.template": "4.4.0", - "meow": "3.7.0", - "split2": "2.1.1", - "through2": "2.0.3" - } - }, - "git-remote-origin-url": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/git-remote-origin-url/-/git-remote-origin-url-2.0.0.tgz", - "integrity": "sha1-UoJlna4hBxRaERJhEq0yFuxfpl8=", - "dev": true, - "requires": { - "gitconfiglocal": "1.0.0", - "pify": "2.3.0" - } - }, - "git-semver-tags": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/git-semver-tags/-/git-semver-tags-1.2.1.tgz", - "integrity": "sha512-fFyxtzTHCTQKwB4clA2AInVrlflBbVbbJD4NWwmxKXHUgsU/K9kmHNlkPLqFiuy9xu9q3lNopghR4VXeQwZbTQ==", - "dev": true, - "requires": { - "meow": "3.7.0", - "semver": "5.3.0" - } - }, - "gitconfiglocal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/gitconfiglocal/-/gitconfiglocal-1.0.0.tgz", - "integrity": "sha1-QdBF84UaXqiPA/JMocYXgRRGS5s=", - "dev": true, - "requires": { - "ini": "1.3.4" - } - }, - "github-url-from-git": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/github-url-from-git/-/github-url-from-git-1.5.0.tgz", - "integrity": "sha1-+YX+3MCpqledyI16/waNVcxiUaA=", - "dev": true - }, - "glob": { - "version": "4.5.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-4.5.3.tgz", - "integrity": "sha1-xstz0yJsHv7wTePFbQEvAzd+4V8=", - "dev": true, - "requires": { - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "2.0.10", - "once": "1.3.3" - } - }, - "glob-base": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", - "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", - "dev": true, - "requires": { - "glob-parent": "2.0.0", - "is-glob": "2.0.1" - } - }, - "glob-parent": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", - "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", - "dev": true, - "requires": { - "is-glob": "2.0.1" - } - }, - "glob-stream": { - "version": "3.1.18", - "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-3.1.18.tgz", - "integrity": "sha1-kXCl8St5Awb9/lmPMT+PeVT9FDs=", - "dev": true, - "requires": { - "glob": "4.5.3", - "glob2base": "0.0.12", - "minimatch": "2.0.10", - "ordered-read-streams": "0.1.0", - "through2": "0.6.5", - "unique-stream": "1.0.0" - }, - "dependencies": { - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true - }, - "readable-stream": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", - "dev": true, - "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "0.0.1", - "string_decoder": "0.10.31" - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", - "dev": true - }, - "through2": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", - "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=", - "dev": true, - "requires": { - "readable-stream": "1.0.34", - "xtend": "4.0.1" - } - } - } - }, - "glob-watcher": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/glob-watcher/-/glob-watcher-0.0.6.tgz", - "integrity": "sha1-uVtKjfdLOcgymLDAXJeLTZo7cQs=", - "dev": true, - "requires": { - "gaze": "0.5.2" - } - }, - "glob2base": { - "version": "0.0.12", - "resolved": "https://registry.npmjs.org/glob2base/-/glob2base-0.0.12.tgz", - "integrity": "sha1-nUGbPijxLoOjYhZKJ3BVkiycDVY=", - "dev": true, - "requires": { - "find-index": "0.1.1" - } - }, - "global-modules": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-0.2.3.tgz", - "integrity": "sha1-6lo77ULG1s6ZWk+KEmm12uIjgo0=", - "dev": true, - "requires": { - "global-prefix": "0.1.5", - "is-windows": "0.2.0" - } - }, - "global-prefix": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-0.1.5.tgz", - "integrity": "sha1-jTvGuNo8qBEqFg2NSW/wRiv+948=", - "dev": true, - "requires": { - "homedir-polyfill": "1.0.1", - "ini": "1.3.4", - "is-windows": "0.2.0", - "which": "1.2.14" - } - }, - "globals": { - "version": "9.18.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", - "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==", - "dev": true - }, - "globule": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/globule/-/globule-0.1.0.tgz", - "integrity": "sha1-2cjt3h2nnRJaFRt5UzuXhnY0auU=", - "dev": true, - "requires": { - "glob": "3.1.21", - "lodash": "1.0.2", - "minimatch": "0.2.14" - }, - "dependencies": { - "glob": { - "version": "3.1.21", - "resolved": "https://registry.npmjs.org/glob/-/glob-3.1.21.tgz", - "integrity": "sha1-0p4KBV3qUTj00H7UDomC6DwgZs0=", - "dev": true, - "requires": { - "graceful-fs": "1.2.3", - "inherits": "1.0.2", - "minimatch": "0.2.14" - } - }, - "graceful-fs": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-1.2.3.tgz", - "integrity": "sha1-FaSAaldUfLLS2/J/QuiajDRRs2Q=", - "dev": true - }, - "inherits": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-1.0.2.tgz", - "integrity": "sha1-ykMJ2t7mtUzAuNJH6NfHoJdb3Js=", - "dev": true - }, - "lodash": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-1.0.2.tgz", - "integrity": "sha1-j1dWDIO1n8JwvT1WG2kAQ0MOJVE=", - "dev": true - }, - "minimatch": { - "version": "0.2.14", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.2.14.tgz", - "integrity": "sha1-x054BXT2PG+aCQ6Q775u9TpqdWo=", - "dev": true, - "requires": { - "lru-cache": "2.7.3", - "sigmund": "1.0.1" - } - } - } - }, - "glogg": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/glogg/-/glogg-1.0.0.tgz", - "integrity": "sha1-f+DxmfV6yQbPUS/urY+Q7kooT8U=", - "dev": true, - "requires": { - "sparkles": "1.0.0" - } - }, - "graceful-fs": { - "version": "4.1.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", - "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", - "dev": true - }, - "graceful-readlink": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz", - "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=", - "dev": true - }, - "gulp": { - "version": "3.9.1", - "resolved": "https://registry.npmjs.org/gulp/-/gulp-3.9.1.tgz", - "integrity": "sha1-VxzkWSjdQK9lFPxAEYZgFsE4RbQ=", - "dev": true, - "requires": { - "archy": "1.0.0", - "chalk": "1.1.3", - "deprecated": "0.0.1", - "gulp-util": "3.0.8", - "interpret": "1.0.3", - "liftoff": "2.3.0", - "minimist": "1.2.0", - "orchestrator": "0.3.8", - "pretty-hrtime": "1.0.3", - "semver": "4.3.6", - "tildify": "1.2.0", - "v8flags": "2.1.1", - "vinyl-fs": "0.3.14" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - }, - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" - } - }, - "has-ansi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", - "dev": true, - "requires": { - "ansi-regex": "2.1.1" - } - }, - "semver": { - "version": "4.3.6", - "resolved": "https://registry.npmjs.org/semver/-/semver-4.3.6.tgz", - "integrity": "sha1-MAvG4OhjdPe6YQaLWx7NV/xlMto=", - "dev": true - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "2.1.1" - } - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } - } - }, - "gulp-jasmine": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/gulp-jasmine/-/gulp-jasmine-2.4.2.tgz", - "integrity": "sha1-Wn9H4nNww2GawKKkQr45lnFAnbM=", - "dev": true, - "requires": { - "arrify": "1.0.1", - "gulp-util": "3.0.8", - "jasmine": "2.6.0", - "jasmine-terminal-reporter": "1.0.3", - "through2": "2.0.3" - } - }, - "gulp-sourcemaps": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/gulp-sourcemaps/-/gulp-sourcemaps-1.6.0.tgz", - "integrity": "sha1-uG/zSdgBzrVuHZ59x7vLS33uYAw=", - "dev": true, - "requires": { - "convert-source-map": "1.5.0", - "graceful-fs": "4.1.11", - "strip-bom": "2.0.0", - "through2": "2.0.3", - "vinyl": "1.2.0" - }, - "dependencies": { - "strip-bom": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", - "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", - "dev": true, - "requires": { - "is-utf8": "0.2.1" - } - }, - "vinyl": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-1.2.0.tgz", - "integrity": "sha1-XIgDbPVl5d8FVYv8kR+GVt8hiIQ=", - "dev": true, - "requires": { - "clone": "1.0.2", - "clone-stats": "0.0.1", - "replace-ext": "0.0.1" - } - } - } - }, - "gulp-typescript": { - "version": "2.14.1", - "resolved": "https://registry.npmjs.org/gulp-typescript/-/gulp-typescript-2.14.1.tgz", - "integrity": "sha1-vADt8u5x8JvaU/0dC4c7VxNx1N4=", - "dev": true, - "requires": { - "gulp-util": "3.0.8", - "source-map": "0.5.6", - "through2": "2.0.3", - "typescript": "1.8.10", - "vinyl-fs": "2.4.4" - }, - "dependencies": { - "glob": { - "version": "5.0.15", - "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", - "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", - "dev": true, - "requires": { - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "2.0.10", - "once": "1.3.3", - "path-is-absolute": "1.0.1" - } - }, - "glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", - "dev": true, - "requires": { - "is-glob": "3.1.0", - "path-dirname": "1.0.2" - } - }, - "glob-stream": { - "version": "5.3.5", - "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-5.3.5.tgz", - "integrity": "sha1-pVZlqajM3EGRWofHAeMtTgFvrSI=", - "dev": true, - "requires": { - "extend": "3.0.1", - "glob": "5.0.15", - "glob-parent": "3.1.0", - "micromatch": "2.3.11", - "ordered-read-streams": "0.3.0", - "through2": "0.6.5", - "to-absolute-glob": "0.1.1", - "unique-stream": "2.2.1" - }, - "dependencies": { - "readable-stream": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", - "dev": true, - "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "0.0.1", - "string_decoder": "0.10.31" - } - }, - "through2": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", - "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=", - "dev": true, - "requires": { - "readable-stream": "1.0.34", - "xtend": "4.0.1" - } - } - } - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true - }, - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "dev": true, - "requires": { - "is-extglob": "2.1.1" - } - }, - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true - }, - "ordered-read-streams": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-0.3.0.tgz", - "integrity": "sha1-cTfmmzKYuzQiR6G77jiByA4v14s=", - "dev": true, - "requires": { - "is-stream": "1.1.0", - "readable-stream": "2.3.3" - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", - "dev": true - }, - "strip-bom": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", - "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", - "dev": true, - "requires": { - "is-utf8": "0.2.1" - } - }, - "typescript": { - "version": "1.8.10", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-1.8.10.tgz", - "integrity": "sha1-tHXW4N/wv1DyluXKbvn7tccyDx4=", - "dev": true - }, - "unique-stream": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/unique-stream/-/unique-stream-2.2.1.tgz", - "integrity": "sha1-WqADz76Uxf+GbE59ZouxxNuts2k=", - "dev": true, - "requires": { - "json-stable-stringify": "1.0.1", - "through2-filter": "2.0.0" - } - }, - "vinyl": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-1.2.0.tgz", - "integrity": "sha1-XIgDbPVl5d8FVYv8kR+GVt8hiIQ=", - "dev": true, - "requires": { - "clone": "1.0.2", - "clone-stats": "0.0.1", - "replace-ext": "0.0.1" - } - }, - "vinyl-fs": { - "version": "2.4.4", - "resolved": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-2.4.4.tgz", - "integrity": "sha1-vm/zJwy1Xf19MGNkDegfJddTIjk=", - "dev": true, - "requires": { - "duplexify": "3.5.0", - "glob-stream": "5.3.5", - "graceful-fs": "4.1.11", - "gulp-sourcemaps": "1.6.0", - "is-valid-glob": "0.3.0", - "lazystream": "1.0.0", - "lodash.isequal": "4.5.0", - "merge-stream": "1.0.1", - "mkdirp": "0.5.1", - "object-assign": "4.1.1", - "readable-stream": "2.3.3", - "strip-bom": "2.0.0", - "strip-bom-stream": "1.0.0", - "through2": "2.0.3", - "through2-filter": "2.0.0", - "vali-date": "1.0.0", - "vinyl": "1.2.0" - } - } - } - }, - "gulp-util": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/gulp-util/-/gulp-util-3.0.8.tgz", - "integrity": "sha1-AFTh50RQLifATBh8PsxQXdVLu08=", - "dev": true, - "requires": { - "array-differ": "1.0.0", - "array-uniq": "1.0.3", - "beeper": "1.1.1", - "chalk": "1.1.3", - "dateformat": "2.0.0", - "fancy-log": "1.3.0", - "gulplog": "1.0.0", - "has-gulplog": "0.1.0", - "lodash._reescape": "3.0.0", - "lodash._reevaluate": "3.0.0", - "lodash._reinterpolate": "3.0.0", - "lodash.template": "3.6.2", - "minimist": "1.2.0", - "multipipe": "0.1.2", - "object-assign": "3.0.0", - "replace-ext": "0.0.1", - "through2": "2.0.3", - "vinyl": "0.5.3" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - }, - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" - } - }, - "dateformat": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-2.0.0.tgz", - "integrity": "sha1-J0Pjq7XD/CRi5SfcpEXgTp9N7hc=", - "dev": true - }, - "has-ansi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", - "dev": true, - "requires": { - "ansi-regex": "2.1.1" - } - }, - "lodash.template": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-3.6.2.tgz", - "integrity": "sha1-+M3sxhaaJVvpCYrosMU9N4kx0U8=", - "dev": true, - "requires": { - "lodash._basecopy": "3.0.1", - "lodash._basetostring": "3.0.1", - "lodash._basevalues": "3.0.0", - "lodash._isiterateecall": "3.0.9", - "lodash._reinterpolate": "3.0.0", - "lodash.escape": "3.2.0", - "lodash.keys": "3.1.2", - "lodash.restparam": "3.6.1", - "lodash.templatesettings": "3.1.1" - } - }, - "lodash.templatesettings": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-3.1.1.tgz", - "integrity": "sha1-+zB4RHU7Zrnxr6VOJix0UwfbqOU=", - "dev": true, - "requires": { - "lodash._reinterpolate": "3.0.0", - "lodash.escape": "3.2.0" - } - }, - "object-assign": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-3.0.0.tgz", - "integrity": "sha1-m+3VygiXlJvKR+f/QIBi1Un1h/I=", - "dev": true - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "2.1.1" - } - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } - } - }, - "gulplog": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/gulplog/-/gulplog-1.0.0.tgz", - "integrity": "sha1-4oxNRdBey77YGDY86PnFkmIp/+U=", - "dev": true, - "requires": { - "glogg": "1.0.0" - } - }, - "handlebars": { - "version": "4.0.10", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.0.10.tgz", - "integrity": "sha1-PTDHGLCaPZbyPqTMH0A8TTup/08=", - "dev": true, - "requires": { - "async": "1.5.2", - "optimist": "0.6.1", - "source-map": "0.4.4", - "uglify-js": "2.8.29" - }, - "dependencies": { - "source-map": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", - "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", - "dev": true, - "requires": { - "amdefine": "1.0.1" - } - } - } - }, - "har-validator": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-1.8.0.tgz", - "integrity": "sha1-2DhCsOtMQ1lgrrEIoGejqpTA7rI=", - "dev": true, - "requires": { - "bluebird": "2.11.0", - "chalk": "1.1.3", - "commander": "2.11.0", - "is-my-json-valid": "2.16.0" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - }, - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "bluebird": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-2.11.0.tgz", - "integrity": "sha1-U0uQM8AiyVecVro7Plpcqvu2UOE=", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" - } - }, - "commander": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.11.0.tgz", - "integrity": "sha512-b0553uYA5YAEGgyYIGYROzKQ7X5RAqedkfjiZxwi0kL1g3bOaBNNZfYkzt/CL0umgD5wc9Jec2FbB98CjkMRvQ==", - "dev": true - }, - "has-ansi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", - "dev": true, - "requires": { - "ansi-regex": "2.1.1" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "2.1.1" - } - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } - } - }, - "has-ansi": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-0.1.0.tgz", - "integrity": "sha1-hPJlqujA5qiKEtcCKJS3VoiUxi4=", - "dev": true, - "requires": { - "ansi-regex": "0.2.1" - } - }, - "has-binary": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/has-binary/-/has-binary-0.1.7.tgz", - "integrity": "sha1-aOYesWIQyVRaClzOBqhzkS/h5ow=", - "dev": true, - "requires": { - "isarray": "0.0.1" - }, - "dependencies": { - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true - } - } - }, - "has-cors": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz", - "integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=", - "dev": true - }, - "has-gulplog": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/has-gulplog/-/has-gulplog-0.1.0.tgz", - "integrity": "sha1-ZBTIKRNpfaUVkDl9r7EvIpZ4Ec4=", - "dev": true, - "requires": { - "sparkles": "1.0.0" - } - }, - "hawk": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/hawk/-/hawk-2.3.1.tgz", - "integrity": "sha1-HnMc45RH+h0PbXB/e87r7A/R7B8=", - "dev": true, - "requires": { - "boom": "2.10.1", - "cryptiles": "2.0.5", - "hoek": "2.16.3", - "sntp": "1.0.9" - } - }, - "he": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/he/-/he-0.5.0.tgz", - "integrity": "sha1-LAX/rvkLaOhg8/0rVO9YCYknfuI=", - "dev": true - }, - "hoek": { - "version": "2.16.3", - "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", - "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=", - "dev": true - }, - "home-or-tmp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/home-or-tmp/-/home-or-tmp-2.0.0.tgz", - "integrity": "sha1-42w/LSyufXRqhX440Y1fMqeILbg=", - "dev": true, - "requires": { - "os-homedir": "1.0.2", - "os-tmpdir": "1.0.2" - } - }, - "homedir-polyfill": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.1.tgz", - "integrity": "sha1-TCu8inWJmP7r9e1oWA921GdotLw=", - "dev": true, - "requires": { - "parse-passwd": "1.0.0" - } - }, - "hosted-git-info": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.5.0.tgz", - "integrity": "sha512-pNgbURSuab90KbTqvRPsseaTxOJCZBD0a7t+haSN33piP9cCM4l0CqdzAif2hUqm716UovKB2ROmiabGAKVXyg==", - "dev": true - }, - "http-errors": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.1.tgz", - "integrity": "sha1-X4uO2YrKVFZWv1cplzh/kEpyIlc=", - "dev": true, - "requires": { - "depd": "1.1.0", - "inherits": "2.0.3", - "setprototypeof": "1.0.3", - "statuses": "1.3.1" - } - }, - "http-proxy": { - "version": "1.16.2", - "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.16.2.tgz", - "integrity": "sha1-Bt/ykpUr9k2+hHH6nfcwZtTzd0I=", - "dev": true, - "requires": { - "eventemitter3": "1.2.0", - "requires-port": "1.0.0" - } - }, - "http-server": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/http-server/-/http-server-0.8.5.tgz", - "integrity": "sha1-u/J8nwlJnlGh/h+Xmm85pFoE8vs=", - "dev": true, - "requires": { - "colors": "1.0.3", - "corser": "2.0.1", - "ecstatic": "0.7.6", - "http-proxy": "1.16.2", - "opener": "1.4.3", - "optimist": "0.6.1", - "portfinder": "0.4.0", - "union": "0.4.6" - } - }, - "http-signature": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-0.11.0.tgz", - "integrity": "sha1-F5bPZ6ABrVzWhJ3KCZFIXwkIn+Y=", - "dev": true, - "requires": { - "asn1": "0.1.11", - "assert-plus": "0.1.5", - "ctype": "0.5.3" - } - }, - "https-proxy-agent": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-1.0.0.tgz", - "integrity": "sha1-NffabEjOTdv6JkiRrFk+5f+GceY=", - "dev": true, - "requires": { - "agent-base": "2.1.1", - "debug": "2.6.7", - "extend": "3.0.1" - } - }, - "iconv-lite": { - "version": "0.4.15", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.15.tgz", - "integrity": "sha1-/iZaIYrGpXz+hUkn6dBMGYJe3es=", - "dev": true - }, - "indent-string": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", - "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", - "dev": true, - "requires": { - "repeating": "2.0.1" - } - }, - "indexof": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", - "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=", - "dev": true - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, - "requires": { - "once": "1.3.3", - "wrappy": "1.0.2" - } - }, - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true - }, - "ini": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.4.tgz", - "integrity": "sha1-BTfLedr1m1mhpRff9wbIbsA5Fi4=", - "dev": true - }, - "interpret": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.0.3.tgz", - "integrity": "sha1-y8NcYu7uc/Gat7EKgBURQBr8D5A=", - "dev": true - }, - "invariant": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.2.tgz", - "integrity": "sha1-nh9WrArNtr8wMwbzOL47IErmA2A=", - "dev": true, - "requires": { - "loose-envify": "1.3.1" - } - }, - "is-absolute": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-0.2.6.tgz", - "integrity": "sha1-IN5p89uULvLYe5wto28XIjWxtes=", - "dev": true, - "requires": { - "is-relative": "0.2.1", - "is-windows": "0.2.0" - } - }, - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", - "dev": true - }, - "is-binary-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", - "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", - "dev": true, - "requires": { - "binary-extensions": "1.8.0" - } - }, - "is-buffer": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.5.tgz", - "integrity": "sha1-Hzsm72E7IUuIy8ojzGwB2Hlh7sw=", - "dev": true - }, - "is-builtin-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", - "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", - "dev": true, - "requires": { - "builtin-modules": "1.1.1" - } - }, - "is-dotfile": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz", - "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=", - "dev": true - }, - "is-equal-shallow": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz", - "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=", - "dev": true, - "requires": { - "is-primitive": "2.0.0" - } - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true - }, - "is-extglob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", - "dev": true - }, - "is-finite": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", - "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", - "dev": true, - "requires": { - "number-is-nan": "1.0.1" - } - }, - "is-glob": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", - "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", - "dev": true, - "requires": { - "is-extglob": "1.0.0" - } - }, - "is-my-json-valid": { - "version": "2.16.0", - "resolved": "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.16.0.tgz", - "integrity": "sha1-8Hndm/2uZe4gOKrorLyGqxCeNpM=", - "dev": true, - "requires": { - "generate-function": "2.0.0", - "generate-object-property": "1.2.0", - "jsonpointer": "4.0.1", - "xtend": "4.0.1" - } - }, - "is-number": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", - "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", - "dev": true, - "requires": { - "kind-of": "3.2.2" - } - }, - "is-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", - "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", - "dev": true - }, - "is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "requires": { - "isobject": "3.0.1" - }, - "dependencies": { - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - } - } - }, - "is-posix-bracket": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz", - "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=", - "dev": true - }, - "is-primitive": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz", - "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=", - "dev": true - }, - "is-property": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz", - "integrity": "sha1-V/4cTkhHTt1lsJkR8msc1Ald2oQ=", - "dev": true - }, - "is-relative": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-0.2.1.tgz", - "integrity": "sha1-0n9MfVFtF1+2ENuEu+7yPDvJeqU=", - "dev": true, - "requires": { - "is-unc-path": "0.1.2" - } - }, - "is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", - "dev": true - }, - "is-subset": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-subset/-/is-subset-0.1.1.tgz", - "integrity": "sha1-ilkRfZMt4d4A8kX83TnOQ/HpOaY=", - "dev": true - }, - "is-text-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-text-path/-/is-text-path-1.0.1.tgz", - "integrity": "sha1-Thqg+1G/vLPpJogAE5cgLBd1tm4=", - "dev": true, - "requires": { - "text-extensions": "1.5.0" - } - }, - "is-unc-path": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-0.1.2.tgz", - "integrity": "sha1-arBTpyVzwQJQ/0FqOBTDUXivObk=", - "dev": true, - "requires": { - "unc-path-regex": "0.1.2" - } - }, - "is-utf8": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", - "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", - "dev": true - }, - "is-valid-glob": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/is-valid-glob/-/is-valid-glob-0.3.0.tgz", - "integrity": "sha1-1LVcafUYhvm2XHDWwmItN+KfSP4=", - "dev": true - }, - "is-windows": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-0.2.0.tgz", - "integrity": "sha1-3hqm1j6indJIc3tp8f+LgALSEIw=", - "dev": true - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "isbinaryfile": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-3.0.2.tgz", - "integrity": "sha1-Sj6XTsDLqQBNP8bN5yCeppNopiE=", - "dev": true - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true - }, - "isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "dev": true, - "requires": { - "isarray": "1.0.0" - } - }, - "isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", - "dev": true - }, - "jasmine": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/jasmine/-/jasmine-2.6.0.tgz", - "integrity": "sha1-ayLnCIPo5YnUVjRhU7TSBt2+IX8=", - "dev": true, - "requires": { - "exit": "0.1.2", - "glob": "7.1.2", - "jasmine-core": "2.6.4" - }, - "dependencies": { - "glob": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", - "dev": true, - "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.3.3", - "path-is-absolute": "1.0.1" - } - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "requires": { - "brace-expansion": "1.1.8" - } - } - } - }, - "jasmine-core": { - "version": "2.6.4", - "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-2.6.4.tgz", - "integrity": "sha1-3skmzQqfoof7bbXHVfpIfnTOysU=", - "dev": true - }, - "jasmine-terminal-reporter": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/jasmine-terminal-reporter/-/jasmine-terminal-reporter-1.0.3.tgz", - "integrity": "sha1-iW8eyP30v2rs3UHFA+2nNH9hUms=", - "dev": true, - "requires": { - "indent-string": "2.1.0", - "pluralize": "1.2.1" - } - }, - "jasminewd2": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/jasminewd2/-/jasminewd2-0.0.6.tgz", - "integrity": "sha1-JZFX8G0tFJ++y5YwLICqMio3ciI=", - "dev": true - }, - "js-tokens": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", - "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=", - "dev": true - }, - "jsesc": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz", - "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=", - "dev": true - }, - "json": { - "version": "9.0.6", - "resolved": "https://registry.npmjs.org/json/-/json-9.0.6.tgz", - "integrity": "sha1-eXLCpaSKQmeNsnMMfCxO5uTiRYU=", - "dev": true - }, - "json-stable-stringify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", - "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", - "dev": true, - "requires": { - "jsonify": "0.0.0" - } - }, - "json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", - "dev": true - }, - "json3": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.2.tgz", - "integrity": "sha1-PAQ0dD35Pi9cQq7nsZvLSDV19OE=", - "dev": true - }, - "json5": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", - "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", - "dev": true - }, - "jsonify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", - "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=", - "dev": true - }, - "jsonparse": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", - "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=", - "dev": true - }, - "jsonpointer": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-4.0.1.tgz", - "integrity": "sha1-T9kss04OnbPInIYi7PUfm5eMbLk=", - "dev": true - }, - "JSONStream": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.1.tgz", - "integrity": "sha1-cH92HgHa6eFvG8+TcDt4xwlmV5o=", - "dev": true, - "requires": { - "jsonparse": "1.3.1", - "through": "2.3.8" - } - }, - "karma": { - "version": "0.13.22", - "resolved": "https://registry.npmjs.org/karma/-/karma-0.13.22.tgz", - "integrity": "sha1-B3ULG9Bj1+fnuRvNLmNU2PKqh0Q=", - "dev": true, - "requires": { - "batch": "0.5.3", - "bluebird": "2.11.0", - "body-parser": "1.17.2", - "chokidar": "1.7.0", - "colors": "1.1.2", - "connect": "3.6.2", - "core-js": "2.4.1", - "di": "0.0.1", - "dom-serialize": "2.2.1", - "expand-braces": "0.1.2", - "glob": "7.1.2", - "graceful-fs": "4.1.11", - "http-proxy": "1.16.2", - "isbinaryfile": "3.0.2", - "lodash": "3.10.1", - "log4js": "0.6.38", - "mime": "1.3.6", - "minimatch": "3.0.4", - "optimist": "0.6.1", - "rimraf": "2.6.1", - "socket.io": "1.7.4", - "source-map": "0.5.6", - "useragent": "2.2.1" - }, - "dependencies": { - "bluebird": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-2.11.0.tgz", - "integrity": "sha1-U0uQM8AiyVecVro7Plpcqvu2UOE=", - "dev": true - }, - "colors": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz", - "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=", - "dev": true - }, - "glob": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", - "dev": true, - "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.3.3", - "path-is-absolute": "1.0.1" - } - }, - "lodash": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", - "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=", - "dev": true - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "requires": { - "brace-expansion": "1.1.8" - } - } - } - }, - "karma-chrome-launcher": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/karma-chrome-launcher/-/karma-chrome-launcher-0.2.3.tgz", - "integrity": "sha1-TG1wDRY6nTTGGO/YeRi+SeekqMk=", - "dev": true, - "requires": { - "fs-access": "1.0.1", - "which": "1.2.14" - } - }, - "karma-firefox-launcher": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/karma-firefox-launcher/-/karma-firefox-launcher-0.1.7.tgz", - "integrity": "sha1-wF3YZTNpHmLzGVJZUJjovTV9OfM=", - "dev": true - }, - "karma-jasmine": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/karma-jasmine/-/karma-jasmine-0.3.8.tgz", - "integrity": "sha1-W2RXeRrZuJqhc/B54+vhuMgFI2w=", - "dev": true - }, - "karma-mocha-reporter": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/karma-mocha-reporter/-/karma-mocha-reporter-2.2.3.tgz", - "integrity": "sha1-BP3aRaHZaXpzhxx0ciI8WBcBqyA=", - "dev": true, - "requires": { - "chalk": "1.1.3" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - }, - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" - } - }, - "has-ansi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", - "dev": true, - "requires": { - "ansi-regex": "2.1.1" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "2.1.1" - } - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } - } - }, - "karma-systemjs": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/karma-systemjs/-/karma-systemjs-0.10.0.tgz", - "integrity": "sha1-G3Qb76ZmghD2iUXOE0zYo5T2IsE=", - "dev": true, - "requires": { - "lodash": "3.10.1", - "minimatch": "3.0.4" - }, - "dependencies": { - "lodash": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", - "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=", - "dev": true - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "requires": { - "brace-expansion": "1.1.8" - } - } - } - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "1.1.5" - } - }, - "lazy-cache": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", - "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=", - "dev": true - }, - "lazystream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.0.tgz", - "integrity": "sha1-9plf4PggOS9hOWvolGJAe7dxaOQ=", - "dev": true, - "requires": { - "readable-stream": "2.3.3" - } - }, - "liftoff": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/liftoff/-/liftoff-2.3.0.tgz", - "integrity": "sha1-qY8v9nGD2Lp8+soQVIvX/wVQs4U=", - "dev": true, - "requires": { - "extend": "3.0.1", - "findup-sync": "0.4.3", - "fined": "1.1.0", - "flagged-respawn": "0.3.2", - "lodash.isplainobject": "4.0.6", - "lodash.isstring": "4.0.1", - "lodash.mapvalues": "4.6.0", - "rechoir": "0.6.2", - "resolve": "1.3.3" - } - }, - "load-json-file": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", - "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", - "dev": true, - "requires": { - "graceful-fs": "4.1.11", - "parse-json": "2.2.0", - "pify": "2.3.0", - "strip-bom": "3.0.0" - } - }, - "locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", - "dev": true, - "requires": { - "p-locate": "2.0.0", - "path-exists": "3.0.0" - } - }, - "lodash": { - "version": "4.17.4", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", - "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=", - "dev": true - }, - "lodash._basecopy": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz", - "integrity": "sha1-jaDmqHbPNEwK2KVIghEd08XHyjY=", - "dev": true - }, - "lodash._basetostring": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/lodash._basetostring/-/lodash._basetostring-3.0.1.tgz", - "integrity": "sha1-0YYdh3+CSlL2aYMtyvPuFVZqB9U=", - "dev": true - }, - "lodash._basevalues": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lodash._basevalues/-/lodash._basevalues-3.0.0.tgz", - "integrity": "sha1-W3dXYoAr3j0yl1A+JjAIIP32Ybc=", - "dev": true - }, - "lodash._getnative": { - "version": "3.9.1", - "resolved": "https://registry.npmjs.org/lodash._getnative/-/lodash._getnative-3.9.1.tgz", - "integrity": "sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U=", - "dev": true - }, - "lodash._isiterateecall": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz", - "integrity": "sha1-UgOte6Ql+uhCRg5pbbnPPmqsBXw=", - "dev": true - }, - "lodash._reescape": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lodash._reescape/-/lodash._reescape-3.0.0.tgz", - "integrity": "sha1-Kx1vXf4HyKNVdT5fJ/rH8c3hYWo=", - "dev": true - }, - "lodash._reevaluate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lodash._reevaluate/-/lodash._reevaluate-3.0.0.tgz", - "integrity": "sha1-WLx0xAZklTrgsSTYBpltrKQx4u0=", - "dev": true - }, - "lodash._reinterpolate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz", - "integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=", - "dev": true - }, - "lodash._root": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/lodash._root/-/lodash._root-3.0.1.tgz", - "integrity": "sha1-+6HEUkwZ7ppfgTa0YJ8BfPTe1pI=", - "dev": true - }, - "lodash.escape": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/lodash.escape/-/lodash.escape-3.2.0.tgz", - "integrity": "sha1-mV7g3BjBtIzJLv+ucaEKq1tIdpg=", - "dev": true, - "requires": { - "lodash._root": "3.0.1" - } - }, - "lodash.isarguments": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz", - "integrity": "sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo=", - "dev": true - }, - "lodash.isarray": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-3.0.4.tgz", - "integrity": "sha1-eeTriMNqgSKvhvhEqpvNhRtfu1U=", - "dev": true - }, - "lodash.isequal": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", - "integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA=", - "dev": true - }, - "lodash.isplainobject": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", - "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=", - "dev": true - }, - "lodash.isstring": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", - "integrity": "sha1-1SfftUVuynzJu5XV2ur4i6VKVFE=", - "dev": true - }, - "lodash.keys": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz", - "integrity": "sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo=", - "dev": true, - "requires": { - "lodash._getnative": "3.9.1", - "lodash.isarguments": "3.1.0", - "lodash.isarray": "3.0.4" - } - }, - "lodash.mapvalues": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.mapvalues/-/lodash.mapvalues-4.6.0.tgz", - "integrity": "sha1-G6+lAF3p3W9PJmaMMMo3IwzJaJw=", - "dev": true - }, - "lodash.restparam": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/lodash.restparam/-/lodash.restparam-3.6.1.tgz", - "integrity": "sha1-k2pOMJ7zMKdkXtQUWYbIWuWyCAU=", - "dev": true - }, - "lodash.template": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-4.4.0.tgz", - "integrity": "sha1-5zoDhcg1VZF0bgILmWecaQ5o+6A=", - "dev": true, - "requires": { - "lodash._reinterpolate": "3.0.0", - "lodash.templatesettings": "4.1.0" - } - }, - "lodash.templatesettings": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-4.1.0.tgz", - "integrity": "sha1-K01OlbpEDZFf8IvImeRVNmZxMxY=", - "dev": true, - "requires": { - "lodash._reinterpolate": "3.0.0" - } - }, - "log4js": { - "version": "0.6.38", - "resolved": "https://registry.npmjs.org/log4js/-/log4js-0.6.38.tgz", - "integrity": "sha1-LElBFmldb7JUgJQ9P8hy5mKlIv0=", - "dev": true, - "requires": { - "readable-stream": "1.0.34", - "semver": "4.3.6" - }, - "dependencies": { - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true - }, - "readable-stream": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", - "dev": true, - "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "0.0.1", - "string_decoder": "0.10.31" - } - }, - "semver": { - "version": "4.3.6", - "resolved": "https://registry.npmjs.org/semver/-/semver-4.3.6.tgz", - "integrity": "sha1-MAvG4OhjdPe6YQaLWx7NV/xlMto=", - "dev": true - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", - "dev": true - } - } - }, - "longest": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", - "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=", - "dev": true - }, - "loose-envify": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz", - "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=", - "dev": true, - "requires": { - "js-tokens": "3.0.2" - } - }, - "loud-rejection": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", - "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=", - "dev": true, - "requires": { - "currently-unhandled": "0.4.1", - "signal-exit": "3.0.2" - } - }, - "lru-cache": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.7.3.tgz", - "integrity": "sha1-bUUk6LlV+V1PW1iFHOId1y+06VI=", - "dev": true - }, - "map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", - "dev": true - }, - "map-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", - "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", - "dev": true - }, - "media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", - "dev": true - }, - "meow": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", - "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", - "dev": true, - "requires": { - "camelcase-keys": "2.1.0", - "decamelize": "1.2.0", - "loud-rejection": "1.6.0", - "map-obj": "1.0.1", - "minimist": "1.2.0", - "normalize-package-data": "2.4.0", - "object-assign": "4.1.1", - "read-pkg-up": "1.0.1", - "redent": "1.0.0", - "trim-newlines": "1.0.0" - }, - "dependencies": { - "find-up": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", - "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", - "dev": true, - "requires": { - "path-exists": "2.1.0", - "pinkie-promise": "2.0.1" - } - }, - "load-json-file": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", - "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", - "dev": true, - "requires": { - "graceful-fs": "4.1.11", - "parse-json": "2.2.0", - "pify": "2.3.0", - "pinkie-promise": "2.0.1", - "strip-bom": "2.0.0" - } - }, - "path-exists": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", - "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", - "dev": true, - "requires": { - "pinkie-promise": "2.0.1" - } - }, - "path-type": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", - "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", - "dev": true, - "requires": { - "graceful-fs": "4.1.11", - "pify": "2.3.0", - "pinkie-promise": "2.0.1" - } - }, - "read-pkg": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", - "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", - "dev": true, - "requires": { - "load-json-file": "1.1.0", - "normalize-package-data": "2.4.0", - "path-type": "1.1.0" - } - }, - "read-pkg-up": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", - "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", - "dev": true, - "requires": { - "find-up": "1.1.2", - "read-pkg": "1.1.0" - } - }, - "strip-bom": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", - "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", - "dev": true, - "requires": { - "is-utf8": "0.2.1" - } - } - } - }, - "merge-stream": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-1.0.1.tgz", - "integrity": "sha1-QEEgLVCKNCugAXQAjfDCUbjBNeE=", - "dev": true, - "requires": { - "readable-stream": "2.3.3" - } - }, - "micromatch": { - "version": "2.3.11", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", - "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", - "dev": true, - "requires": { - "arr-diff": "2.0.0", - "array-unique": "0.2.1", - "braces": "1.8.5", - "expand-brackets": "0.1.5", - "extglob": "0.3.2", - "filename-regex": "2.0.1", - "is-extglob": "1.0.0", - "is-glob": "2.0.1", - "kind-of": "3.2.2", - "normalize-path": "2.1.1", - "object.omit": "2.0.1", - "parse-glob": "3.0.4", - "regex-cache": "0.4.3" - } - }, - "mime": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.3.6.tgz", - "integrity": "sha1-WR2E02U6awtKO5343lqoEI5y5eA=", - "dev": true - }, - "mime-db": { - "version": "1.27.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.27.0.tgz", - "integrity": "sha1-gg9XIpa70g7CXtVeW13oaeVDbrE=", - "dev": true - }, - "mime-types": { - "version": "2.1.15", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.15.tgz", - "integrity": "sha1-pOv1BkCUVpI3uM9wBGd20J/JKu0=", - "dev": true, - "requires": { - "mime-db": "1.27.0" - } - }, - "minimatch": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-2.0.10.tgz", - "integrity": "sha1-jQh8OcazjAAbl/ynzm0OHoCvusc=", - "dev": true, - "requires": { - "brace-expansion": "1.1.8" - } - }, - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true - }, - "mkdirp": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", - "dev": true, - "requires": { - "minimist": "0.0.8" - }, - "dependencies": { - "minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", - "dev": true - } - } - }, - "modify-values": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/modify-values/-/modify-values-1.0.0.tgz", - "integrity": "sha1-4rbN65zhn5kxelNyLz2/XfXqqrI=", - "dev": true - }, - "moment": { - "version": "2.18.1", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.18.1.tgz", - "integrity": "sha1-w2GT3Tzhwu7SrbfIAtu8d6gbHA8=", - "dev": true - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "multipipe": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/multipipe/-/multipipe-0.1.2.tgz", - "integrity": "sha1-Ko8t33Du1WTf8tV/HhoTfZ8FB4s=", - "dev": true, - "requires": { - "duplexer2": "0.0.2" - } - }, - "nan": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.6.2.tgz", - "integrity": "sha1-5P805slf37WuzAjeZZb0NgWn20U=", - "dev": true, - "optional": true - }, - "natives": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/natives/-/natives-1.1.0.tgz", - "integrity": "sha1-6f+EFBimsux6SV6TmYT3jxY+bjE=", - "dev": true - }, - "ncp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ncp/-/ncp-2.0.0.tgz", - "integrity": "sha1-GVoh1sRuNh0vsSgbo4uR6d9727M=", - "dev": true - }, - "negotiator": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", - "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=", - "dev": true - }, - "node-uuid": { - "version": "1.4.8", - "resolved": "https://registry.npmjs.org/node-uuid/-/node-uuid-1.4.8.tgz", - "integrity": "sha1-sEDrCSOWivq/jTL7HxfxFn/auQc=", - "dev": true - }, - "normalize-package-data": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz", - "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==", - "dev": true, - "requires": { - "hosted-git-info": "2.5.0", - "is-builtin-module": "1.0.0", - "semver": "5.3.0", - "validate-npm-package-license": "3.0.1" - } - }, - "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "dev": true, - "requires": { - "remove-trailing-separator": "1.0.2" - } - }, - "null-check": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/null-check/-/null-check-1.0.0.tgz", - "integrity": "sha1-l33/1xdgErnsMNKjnbXPcqBDnt0=", - "dev": true - }, - "number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", - "dev": true - }, - "oauth-sign": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", - "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=", - "dev": true - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", - "dev": true - }, - "object-component": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/object-component/-/object-component-0.0.3.tgz", - "integrity": "sha1-8MaapQ78lbhmwYb0AKM3acsvEpE=", - "dev": true - }, - "object.defaults": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/object.defaults/-/object.defaults-1.1.0.tgz", - "integrity": "sha1-On+GgzS0B96gbaFtiNXNKeQ1/s8=", - "dev": true, - "requires": { - "array-each": "1.0.1", - "array-slice": "1.0.0", - "for-own": "1.0.0", - "isobject": "3.0.1" - }, - "dependencies": { - "for-own": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz", - "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=", - "dev": true, - "requires": { - "for-in": "1.0.2" - } - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - } - } - }, - "object.omit": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", - "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=", - "dev": true, - "requires": { - "for-own": "0.1.5", - "is-extendable": "0.1.1" - } - }, - "object.pick": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.2.0.tgz", - "integrity": "sha1-tTkr7peC2m2ft9avr1OXefEjTCs=", - "dev": true, - "requires": { - "isobject": "2.1.0" - } - }, - "on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", - "dev": true, - "requires": { - "ee-first": "1.1.1" - } - }, - "once": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/once/-/once-1.3.3.tgz", - "integrity": "sha1-suJhVXzkwxTsgwTz+oJmPkKXyiA=", - "dev": true, - "requires": { - "wrappy": "1.0.2" - } - }, - "opener": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/opener/-/opener-1.4.3.tgz", - "integrity": "sha1-XG2ixdflgx6P+jlklQ+NZnSskLg=", - "dev": true - }, - "optimist": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", - "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", - "dev": true, - "requires": { - "minimist": "0.0.10", - "wordwrap": "0.0.3" - }, - "dependencies": { - "minimist": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz", - "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=", - "dev": true - } - } - }, - "options": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/options/-/options-0.0.6.tgz", - "integrity": "sha1-7CLTEoBrtT5zF3Pnza788cZDEo8=", - "dev": true - }, - "orchestrator": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/orchestrator/-/orchestrator-0.3.8.tgz", - "integrity": "sha1-FOfp4nZPcxX7rBhOUGx6pt+UrX4=", - "dev": true, - "requires": { - "end-of-stream": "0.1.5", - "sequencify": "0.0.7", - "stream-consume": "0.1.0" - } - }, - "ordered-read-streams": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-0.1.0.tgz", - "integrity": "sha1-/VZamvjrRHO6abbtijQ1LLVS8SY=", - "dev": true - }, - "os-homedir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", - "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", - "dev": true - }, - "os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", - "dev": true - }, - "p-limit": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.1.0.tgz", - "integrity": "sha1-sH/y2aXYi+yAYDWJWiurZqJ5iLw=", - "dev": true - }, - "p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", - "dev": true, - "requires": { - "p-limit": "1.1.0" - } - }, - "parse-filepath": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.1.tgz", - "integrity": "sha1-FZ1hVdQ5BNFsEO9piRHaHpGWm3M=", - "dev": true, - "requires": { - "is-absolute": "0.2.6", - "map-cache": "0.2.2", - "path-root": "0.1.1" - } - }, - "parse-github-repo-url": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/parse-github-repo-url/-/parse-github-repo-url-1.4.0.tgz", - "integrity": "sha1-KGxT4smWLgZBZJ7jrJUI/KTdlZw=", - "dev": true - }, - "parse-glob": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", - "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=", - "dev": true, - "requires": { - "glob-base": "0.3.0", - "is-dotfile": "1.0.3", - "is-extglob": "1.0.0", - "is-glob": "2.0.1" - } - }, - "parse-json": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", - "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", - "dev": true, - "requires": { - "error-ex": "1.3.1" - } - }, - "parse-passwd": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", - "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=", - "dev": true - }, - "parse5": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-1.5.1.tgz", - "integrity": "sha1-m387DeMr543CQBsXVzzK8Pb1nZQ=", - "dev": true - }, - "parsejson": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/parsejson/-/parsejson-0.0.3.tgz", - "integrity": "sha1-q343WfIJ7OmUN5c/fQ8fZK4OZKs=", - "dev": true, - "requires": { - "better-assert": "1.0.2" - } - }, - "parseqs": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.5.tgz", - "integrity": "sha1-1SCKNzjkZ2bikbouoXNoSSGouJ0=", - "dev": true, - "requires": { - "better-assert": "1.0.2" - } - }, - "parseuri": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.5.tgz", - "integrity": "sha1-gCBKUNTbt3m/3G6+J3jZDkvOMgo=", - "dev": true, - "requires": { - "better-assert": "1.0.2" - } - }, - "parseurl": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.1.tgz", - "integrity": "sha1-yKuMkiO6NIiKpkopeyiFO+wY2lY=", - "dev": true - }, - "path-dirname": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", - "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", - "dev": true - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true - }, - "path-parse": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.5.tgz", - "integrity": "sha1-PBrfhx6pzWyUMbbqK9dKD/BVxME=", - "dev": true - }, - "path-root": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/path-root/-/path-root-0.1.1.tgz", - "integrity": "sha1-mkpoFMrBwM1zNgqV8yCDyOpHRbc=", - "dev": true, - "requires": { - "path-root-regex": "0.1.2" - } - }, - "path-root-regex": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/path-root-regex/-/path-root-regex-0.1.2.tgz", - "integrity": "sha1-v8zcjfWxLcUsi0PsONGNcsBLqW0=", - "dev": true - }, - "path-type": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", - "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", - "dev": true, - "requires": { - "pify": "2.3.0" - } - }, - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - }, - "pinkie": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", - "dev": true - }, - "pinkie-promise": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", - "dev": true, - "requires": { - "pinkie": "2.0.4" - } - }, - "pluralize": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-1.2.1.tgz", - "integrity": "sha1-0aIUg/0iu0HlihL6NCGCMUCJfEU=", - "dev": true - }, - "portfinder": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-0.4.0.tgz", - "integrity": "sha1-o/+t/6/k+5jgYBqF7aJ8J86Eyh4=", - "dev": true, - "requires": { - "async": "0.9.0", - "mkdirp": "0.5.1" - }, - "dependencies": { - "async": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/async/-/async-0.9.0.tgz", - "integrity": "sha1-rDYTsdqb7RtHUQu0ZRuJMeRxRsc=", - "dev": true - } - } - }, - "preserve": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz", - "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=", - "dev": true - }, - "pretty-hrtime": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz", - "integrity": "sha1-t+PqQkNaTJsnWdmeDyAesZWALuE=", - "dev": true - }, - "private": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/private/-/private-0.1.7.tgz", - "integrity": "sha1-aM5eih7woju1cMwoU3tTMqumPvE=", - "dev": true - }, - "process-nextick-args": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", - "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=", - "dev": true - }, - "protractor": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/protractor/-/protractor-3.0.0.tgz", - "integrity": "sha1-rHZ3h3D2Kbqyr6VqaqycWcptJZ0=", - "dev": true, - "requires": { - "adm-zip": "0.4.4", - "glob": "3.2.11", - "jasmine": "2.3.2", - "jasminewd2": "0.0.6", - "lodash": "2.4.2", - "optimist": "0.6.1", - "q": "1.0.0", - "request": "2.57.0", - "saucelabs": "1.0.1", - "selenium-webdriver": "2.48.2", - "source-map-support": "0.3.3" - }, - "dependencies": { - "glob": { - "version": "3.2.11", - "resolved": "https://registry.npmjs.org/glob/-/glob-3.2.11.tgz", - "integrity": "sha1-Spc/Y1uRkPcV0QmH1cAP0oFevj0=", - "dev": true, - "requires": { - "inherits": "2.0.3", - "minimatch": "0.3.0" - } - }, - "jasmine": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/jasmine/-/jasmine-2.3.2.tgz", - "integrity": "sha1-/r8OS0r/9jwtCSEfB32guFn18ZE=", - "dev": true, - "requires": { - "exit": "0.1.2", - "glob": "3.2.11", - "jasmine-core": "2.3.4" - } - }, - "jasmine-core": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-2.3.4.tgz", - "integrity": "sha1-rXcmYrMtFsVk7iXIY+2uHWWgOPI=", - "dev": true - }, - "lodash": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-2.4.2.tgz", - "integrity": "sha1-+t2DS5aDBz2hebPq5tnA0VBT9z4=", - "dev": true - }, - "minimatch": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.3.0.tgz", - "integrity": "sha1-J12O2qxPG7MyZHIInnlJyDlGmd0=", - "dev": true, - "requires": { - "lru-cache": "2.7.3", - "sigmund": "1.0.1" - } - }, - "q": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/q/-/q-1.0.0.tgz", - "integrity": "sha1-3B+SxFh75U94U7Kdwo5tJDqISY0=", - "dev": true - }, - "source-map": { - "version": "0.1.32", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.32.tgz", - "integrity": "sha1-yLbBZ3l7pHQKjqMyUhYv8IWRsmY=", - "dev": true, - "requires": { - "amdefine": "1.0.1" - } - }, - "source-map-support": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.3.3.tgz", - "integrity": "sha1-NJAJd9W6PwfHdX7nLnO7GptTdU8=", - "dev": true, - "requires": { - "source-map": "0.1.32" - } - } - } - }, - "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", - "dev": true - }, - "q": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/q/-/q-1.5.0.tgz", - "integrity": "sha1-3QG6ydBtMObyGa7LglPunr3DCPE=", - "dev": true - }, - "qs": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-2.3.3.tgz", - "integrity": "sha1-6eha2+ddoLvkyOBHaghikPhjtAQ=", - "dev": true - }, - "randomatic": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-1.1.7.tgz", - "integrity": "sha512-D5JUjPyJbaJDkuAazpVnSfVkLlpeO3wDlPROTMLGKG1zMFNFRgrciKo1ltz/AzNTkqE0HzDx655QOL51N06how==", - "dev": true, - "requires": { - "is-number": "3.0.0", - "kind-of": "4.0.0" - }, - "dependencies": { - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "3.2.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "1.1.5" - } - } - } - }, - "kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", - "dev": true, - "requires": { - "is-buffer": "1.1.5" - } - } - } - }, - "raw-body": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.2.0.tgz", - "integrity": "sha1-mUl2z2pQlqQRYoQEkvC9xdbn+5Y=", - "dev": true, - "requires": { - "bytes": "2.4.0", - "iconv-lite": "0.4.15", - "unpipe": "1.0.0" - } - }, - "read-pkg": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", - "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", - "dev": true, - "requires": { - "load-json-file": "2.0.0", - "normalize-package-data": "2.4.0", - "path-type": "2.0.0" - } - }, - "read-pkg-up": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", - "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", - "dev": true, - "requires": { - "find-up": "2.1.0", - "read-pkg": "2.0.0" - } - }, - "readable-stream": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", - "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==", - "dev": true, - "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "1.0.7", - "safe-buffer": "5.1.1", - "string_decoder": "1.0.3", - "util-deprecate": "1.0.2" - } - }, - "readdirp": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.1.0.tgz", - "integrity": "sha1-TtCtBg3zBzMAxIRANz9y0cxkLXg=", - "dev": true, - "requires": { - "graceful-fs": "4.1.11", - "minimatch": "3.0.4", - "readable-stream": "2.3.3", - "set-immediate-shim": "1.0.1" - }, - "dependencies": { - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "requires": { - "brace-expansion": "1.1.8" - } - } - } - }, - "rechoir": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", - "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", - "dev": true, - "requires": { - "resolve": "1.3.3" - } - }, - "redent": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", - "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=", - "dev": true, - "requires": { - "indent-string": "2.1.0", - "strip-indent": "1.0.1" - } - }, - "reflect-metadata": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.2.tgz", - "integrity": "sha1-6iPlgj3IMPKSgivT2puJ/Ve/+wM=", - "dev": true - }, - "regenerator-runtime": { - "version": "0.10.5", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz", - "integrity": "sha1-M2w+/BIgrc7dosn6tntaeVWjNlg=", - "dev": true - }, - "regex-cache": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.3.tgz", - "integrity": "sha1-mxpsNdTQ3871cRrmUejp09cRQUU=", - "dev": true, - "requires": { - "is-equal-shallow": "0.1.3", - "is-primitive": "2.0.0" - } - }, - "remove-trailing-separator": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.0.2.tgz", - "integrity": "sha1-abBi2XhyetFNxrVrpKt3L9jXBRE=", - "dev": true - }, - "repeat-element": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz", - "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=", - "dev": true - }, - "repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", - "dev": true - }, - "repeating": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", - "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", - "dev": true, - "requires": { - "is-finite": "1.0.2" - } - }, - "replace-ext": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-0.0.1.tgz", - "integrity": "sha1-KbvZIHinOfC8zitO5B6DeVNSKSQ=", - "dev": true - }, - "request": { - "version": "2.57.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.57.0.tgz", - "integrity": "sha1-1EUQWkLQCbnXJCiWM7RJptcj2Yk=", - "dev": true, - "requires": { - "aws-sign2": "0.5.0", - "bl": "0.9.5", - "caseless": "0.10.0", - "combined-stream": "1.0.5", - "forever-agent": "0.6.1", - "form-data": "0.2.0", - "har-validator": "1.8.0", - "hawk": "2.3.1", - "http-signature": "0.11.0", - "isstream": "0.1.2", - "json-stringify-safe": "5.0.1", - "mime-types": "2.0.14", - "node-uuid": "1.4.8", - "oauth-sign": "0.8.2", - "qs": "3.1.0", - "stringstream": "0.0.5", - "tough-cookie": "2.3.2", - "tunnel-agent": "0.4.3" - }, - "dependencies": { - "mime-db": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.12.0.tgz", - "integrity": "sha1-PQxjGA9FjrENMlqqN9fFiuMS6dc=", - "dev": true - }, - "mime-types": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.0.14.tgz", - "integrity": "sha1-MQ4VnbI+B3+Lsit0jav6SVcUCqY=", - "dev": true, - "requires": { - "mime-db": "1.12.0" - } - }, - "qs": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-3.1.0.tgz", - "integrity": "sha1-0OmudFIzoS3EP7TzBVu6RGJhFTw=", - "dev": true - } - } - }, - "requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", - "dev": true - }, - "resolve": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.3.3.tgz", - "integrity": "sha1-ZVkHw0aahoDcLeOidaj91paR8OU=", - "dev": true, - "requires": { - "path-parse": "1.0.5" - } - }, - "resolve-dir": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-0.1.1.tgz", - "integrity": "sha1-shklmlYC+sXFxJatiUpujMQwJh4=", - "dev": true, - "requires": { - "expand-tilde": "1.2.2", - "global-modules": "0.2.3" - } - }, - "right-align": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", - "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=", - "dev": true, - "requires": { - "align-text": "0.1.4" - } - }, - "rimraf": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.1.tgz", - "integrity": "sha1-wjOOxkPfeht/5cVPqG9XQopV8z0=", - "dev": true, - "requires": { - "glob": "7.1.2" - }, - "dependencies": { - "glob": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", - "dev": true, - "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.3.3", - "path-is-absolute": "1.0.1" - } - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "requires": { - "brace-expansion": "1.1.8" - } - } - } - }, - "rollup": { - "version": "0.35.15", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-0.35.15.tgz", - "integrity": "sha1-8d+XIF6nx855r78RPHsaYeyDAP0=", - "dev": true, - "requires": { - "source-map-support": "0.4.15" - } - }, - "rollup-watch": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/rollup-watch/-/rollup-watch-2.5.0.tgz", - "integrity": "sha1-hS1mDd7MUWlokKqMIule1FWMxfc=", - "dev": true, - "requires": { - "semver": "5.3.0" - } - }, - "rsvp": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-3.6.2.tgz", - "integrity": "sha512-OfWGQTb9vnwRjwtA2QwpG2ICclHC3pgXZO5xt8H2EfgDquO0qVdSb5T88L4qJVAEugbS56pAuV4XZM58UX8ulw==", - "dev": true - }, - "rx": { - "version": "2.3.24", - "resolved": "https://registry.npmjs.org/rx/-/rx-2.3.24.tgz", - "integrity": "sha1-FPlQpCF9fjXapxu8vljv9o6ksrc=", - "dev": true - }, - "rxjs": { - "version": "5.4.2", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-5.4.2.tgz", - "integrity": "sha1-KjI2/L8D31e64G/Wly/ZnlwI/Pc=", - "requires": { - "symbol-observable": "1.0.4" - } - }, - "safe-buffer": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", - "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==", - "dev": true - }, - "saucelabs": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/saucelabs/-/saucelabs-1.0.1.tgz", - "integrity": "sha1-tQoQDZxaQUB0izUzWm5dcAF9rfk=", - "dev": true, - "requires": { - "https-proxy-agent": "1.0.0" - } - }, - "sax": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/sax/-/sax-0.6.1.tgz", - "integrity": "sha1-VjsZx8HeiS4Jv8Ty/DDjwn8JUrk=", - "dev": true - }, - "selenium-webdriver": { - "version": "2.48.2", - "resolved": "https://registry.npmjs.org/selenium-webdriver/-/selenium-webdriver-2.48.2.tgz", - "integrity": "sha1-smpGMUMNCp82KE7gz+CWdujzSMo=", - "dev": true, - "requires": { - "adm-zip": "0.4.4", - "rimraf": "2.6.1", - "tmp": "0.0.24", - "ws": "0.8.1", - "xml2js": "0.4.4" - }, - "dependencies": { - "tmp": { - "version": "0.0.24", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.24.tgz", - "integrity": "sha1-1qXhmNFKmDXMby18PZ4wJCjIzxI=", - "dev": true - }, - "ws": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-0.8.1.tgz", - "integrity": "sha1-a2UnO5kZPF8Gekz1gJWY93fjt1k=", - "dev": true, - "requires": { - "bufferutil": "1.2.1", - "options": "0.0.6", - "ultron": "1.0.2", - "utf-8-validate": "1.2.2" - } - } - } - }, - "semver": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz", - "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=", - "dev": true - }, - "sequencify": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/sequencify/-/sequencify-0.0.7.tgz", - "integrity": "sha1-kM/xnQLgcCf9dn9erT57ldHnOAw=", - "dev": true - }, - "set-immediate-shim": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz", - "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=", - "dev": true - }, - "setprototypeof": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.3.tgz", - "integrity": "sha1-ZlZ+NwQ+608E2RvWWMDL77VbjgQ=", - "dev": true - }, - "sigmund": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz", - "integrity": "sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA=", - "dev": true - }, - "signal-exit": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", - "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", - "dev": true - }, - "slash": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", - "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=", - "dev": true - }, - "sntp": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz", - "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=", - "dev": true, - "requires": { - "hoek": "2.16.3" - } - }, - "socket.io": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-1.7.4.tgz", - "integrity": "sha1-L37O3DORvy1cc+KR/iM+bjTU3QA=", - "dev": true, - "requires": { - "debug": "2.3.3", - "engine.io": "1.8.4", - "has-binary": "0.1.7", - "object-assign": "4.1.0", - "socket.io-adapter": "0.5.0", - "socket.io-client": "1.7.4", - "socket.io-parser": "2.3.1" - }, - "dependencies": { - "debug": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", - "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", - "dev": true, - "requires": { - "ms": "0.7.2" - } - }, - "ms": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", - "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=", - "dev": true - }, - "object-assign": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.0.tgz", - "integrity": "sha1-ejs9DpgGPUP0wD8uiubNUahog6A=", - "dev": true - } - } - }, - "socket.io-adapter": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-0.5.0.tgz", - "integrity": "sha1-y21LuL7IHhB4uZZ3+c7QBGBmu4s=", - "dev": true, - "requires": { - "debug": "2.3.3", - "socket.io-parser": "2.3.1" - }, - "dependencies": { - "debug": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", - "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", - "dev": true, - "requires": { - "ms": "0.7.2" - } - }, - "ms": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", - "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=", - "dev": true - } - } - }, - "socket.io-client": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-1.7.4.tgz", - "integrity": "sha1-7J+CA1btme9tNX8HVtZIcXvdQoE=", - "dev": true, - "requires": { - "backo2": "1.0.2", - "component-bind": "1.0.0", - "component-emitter": "1.2.1", - "debug": "2.3.3", - "engine.io-client": "1.8.4", - "has-binary": "0.1.7", - "indexof": "0.0.1", - "object-component": "0.0.3", - "parseuri": "0.0.5", - "socket.io-parser": "2.3.1", - "to-array": "0.1.4" - }, - "dependencies": { - "component-emitter": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", - "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", - "dev": true - }, - "debug": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", - "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", - "dev": true, - "requires": { - "ms": "0.7.2" - } - }, - "ms": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", - "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=", - "dev": true - } - } - }, - "socket.io-parser": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-2.3.1.tgz", - "integrity": "sha1-3VMgJRA85Clpcya+/WQAX8/ltKA=", - "dev": true, - "requires": { - "component-emitter": "1.1.2", - "debug": "2.2.0", - "isarray": "0.0.1", - "json3": "3.3.2" - }, - "dependencies": { - "debug": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", - "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=", - "dev": true, - "requires": { - "ms": "0.7.1" - } - }, - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true - }, - "ms": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", - "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=", - "dev": true - } - } - }, - "source-map": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz", - "integrity": "sha1-dc449SvwczxafwwRjYEzSiu19BI=", - "dev": true - }, - "source-map-support": { - "version": "0.4.15", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.15.tgz", - "integrity": "sha1-AyAt9lwG0r2MfsI2KhkwVv7407E=", - "dev": true, - "requires": { - "source-map": "0.5.6" - } - }, - "sparkles": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/sparkles/-/sparkles-1.0.0.tgz", - "integrity": "sha1-Gsu/tZJDbRC76PeFt8xvgoFQEsM=", - "dev": true - }, - "spdx-correct": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-1.0.2.tgz", - "integrity": "sha1-SzBz2TP/UfORLwOsVRlJikFQ20A=", - "dev": true, - "requires": { - "spdx-license-ids": "1.2.2" - } - }, - "spdx-expression-parse": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz", - "integrity": "sha1-m98vIOH0DtRH++JzJmGR/O1RYmw=", - "dev": true - }, - "spdx-license-ids": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz", - "integrity": "sha1-yd96NCRZSt5r0RkA1ZZpbcBrrFc=", - "dev": true - }, - "split": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/split/-/split-1.0.0.tgz", - "integrity": "sha1-xDlc5oOrzSVLwo/h2rtuXCfc/64=", - "dev": true, - "requires": { - "through": "2.3.8" - } - }, - "split2": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/split2/-/split2-2.1.1.tgz", - "integrity": "sha1-eh9VHhdqkOzTNF9yRqDP4XXvT9A=", - "dev": true, - "requires": { - "through2": "2.0.3" - } - }, - "statuses": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz", - "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=", - "dev": true - }, - "stream-consume": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/stream-consume/-/stream-consume-0.1.0.tgz", - "integrity": "sha1-pB6tGm1ggc63n2WwYZAbbY89HQ8=", - "dev": true - }, - "stream-shift": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.0.tgz", - "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=", - "dev": true - }, - "string_decoder": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", - "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", - "dev": true, - "requires": { - "safe-buffer": "5.1.1" - } - }, - "stringstream": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz", - "integrity": "sha1-TkhM1N5aC7vuGORjB3EKioFiGHg=", - "dev": true - }, - "strip-ansi": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-0.3.0.tgz", - "integrity": "sha1-JfSOoiynkYfzF0pNuHWTR7sSYiA=", - "dev": true, - "requires": { - "ansi-regex": "0.2.1" - } - }, - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", - "dev": true - }, - "strip-bom-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-bom-stream/-/strip-bom-stream-1.0.0.tgz", - "integrity": "sha1-5xRDmFd9Uaa+0PoZlPoF9D/ZiO4=", - "dev": true, - "requires": { - "first-chunk-stream": "1.0.0", - "strip-bom": "2.0.0" - }, - "dependencies": { - "strip-bom": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", - "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", - "dev": true, - "requires": { - "is-utf8": "0.2.1" - } - } - } - }, - "strip-indent": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", - "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=", - "dev": true, - "requires": { - "get-stdin": "4.0.1" - } - }, - "supports-color": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-0.2.0.tgz", - "integrity": "sha1-2S3iaU6z9nMjlz1649i1W0wiGQo=", - "dev": true - }, - "symbol-observable": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.0.4.tgz", - "integrity": "sha1-Kb9hXUqnEhvdiYsi1LP5vE4qoD0=" - }, - "systemjs": { - "version": "0.19.47", - "resolved": "https://registry.npmjs.org/systemjs/-/systemjs-0.19.47.tgz", - "integrity": "sha1-yMk5NxgPP1SBx2nNJyB2P7SjHG8=", - "dev": true, - "requires": { - "when": "3.7.8" - } - }, - "systemjs-builder": { - "version": "0.15.36", - "resolved": "https://registry.npmjs.org/systemjs-builder/-/systemjs-builder-0.15.36.tgz", - "integrity": "sha1-MLAjctQifPN4gPWA/mfLTtt/FCA=", - "dev": true, - "requires": { - "babel-core": "6.25.0", - "babel-plugin-transform-cjs-system-wrapper": "0.3.0", - "babel-plugin-transform-es2015-modules-systemjs": "6.24.1", - "babel-plugin-transform-global-system-wrapper": "0.0.1", - "babel-plugin-transform-system-register": "0.0.1", - "bluebird": "3.5.0", - "data-uri-to-buffer": "0.0.4", - "es6-template-strings": "2.0.1", - "glob": "7.1.2", - "mkdirp": "0.5.1", - "rollup": "0.36.4", - "source-map": "0.5.6", - "systemjs": "0.19.47", - "traceur": "0.0.105", - "uglify-js": "2.7.5" - }, - "dependencies": { - "async": { - "version": "0.2.10", - "resolved": "https://registry.npmjs.org/async/-/async-0.2.10.tgz", - "integrity": "sha1-trvgsGdLnXGXCMo43owjfLUmw9E=", - "dev": true - }, - "bluebird": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.0.tgz", - "integrity": "sha1-eRQg1/VR7qKJdFOop3ZT+WYG1nw=", - "dev": true - }, - "commander": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz", - "integrity": "sha1-nJkJQXbhIkDLItbFFGCYQA/g99Q=", - "dev": true, - "requires": { - "graceful-readlink": "1.0.1" - } - }, - "glob": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", - "dev": true, - "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.3.3", - "path-is-absolute": "1.0.1" - } - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "requires": { - "brace-expansion": "1.1.8" - } - }, - "rollup": { - "version": "0.36.4", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-0.36.4.tgz", - "integrity": "sha1-oiRJTFOGwdc9OPe7hvafXrARo9I=", - "dev": true, - "requires": { - "source-map-support": "0.4.15" - } - }, - "semver": { - "version": "4.3.6", - "resolved": "https://registry.npmjs.org/semver/-/semver-4.3.6.tgz", - "integrity": "sha1-MAvG4OhjdPe6YQaLWx7NV/xlMto=", - "dev": true - }, - "traceur": { - "version": "0.0.105", - "resolved": "https://registry.npmjs.org/traceur/-/traceur-0.0.105.tgz", - "integrity": "sha1-XPne6D1rd4YcPWxE1ThZrterBHk=", - "dev": true, - "requires": { - "commander": "2.9.0", - "glob": "5.0.15", - "rsvp": "3.6.2", - "semver": "4.3.6", - "source-map-support": "0.2.10" - }, - "dependencies": { - "glob": { - "version": "5.0.15", - "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", - "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", - "dev": true, - "requires": { - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.3.3", - "path-is-absolute": "1.0.1" - } - }, - "source-map": { - "version": "0.1.32", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.32.tgz", - "integrity": "sha1-yLbBZ3l7pHQKjqMyUhYv8IWRsmY=", - "dev": true, - "requires": { - "amdefine": "1.0.1" - } - }, - "source-map-support": { - "version": "0.2.10", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.2.10.tgz", - "integrity": "sha1-6lo5AKHByyUJagrozFwrSxDe09w=", - "dev": true, - "requires": { - "source-map": "0.1.32" - } - } - } - }, - "uglify-js": { - "version": "2.7.5", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.7.5.tgz", - "integrity": "sha1-RhLAx7qu4rp8SH3kkErhIgefLKg=", - "dev": true, - "requires": { - "async": "0.2.10", - "source-map": "0.5.6", - "uglify-to-browserify": "1.0.2", - "yargs": "3.10.0" - } - } - } - }, - "tempfile": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/tempfile/-/tempfile-1.1.1.tgz", - "integrity": "sha1-W8xOrsxKsscH2LwR2ZzMmiyyh/I=", - "dev": true, - "requires": { - "os-tmpdir": "1.0.2", - "uuid": "2.0.3" - } - }, - "text-extensions": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/text-extensions/-/text-extensions-1.5.0.tgz", - "integrity": "sha1-0cstFLXQvEW/3Kigikc/aMfrDLw=", - "dev": true - }, - "through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", - "dev": true - }, - "through2": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", - "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", - "dev": true, - "requires": { - "readable-stream": "2.3.3", - "xtend": "4.0.1" - } - }, - "through2-filter": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/through2-filter/-/through2-filter-2.0.0.tgz", - "integrity": "sha1-YLxVoNrLdghdsfna6Zq0P4PWIuw=", - "dev": true, - "requires": { - "through2": "2.0.3", - "xtend": "4.0.1" - } - }, - "tildify": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/tildify/-/tildify-1.2.0.tgz", - "integrity": "sha1-3OwD9V3Km3qj5bBPIYF+tW5jWIo=", - "dev": true, - "requires": { - "os-homedir": "1.0.2" - } - }, - "time-stamp": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/time-stamp/-/time-stamp-1.1.0.tgz", - "integrity": "sha1-dkpaEa9QVhkhsTPztE5hhofg9cM=", - "dev": true - }, - "tmp": { - "version": "0.0.31", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.31.tgz", - "integrity": "sha1-jzirlDjhcxXl29izZX6L+yd65Kc=", - "dev": true, - "requires": { - "os-tmpdir": "1.0.2" - } - }, - "to-absolute-glob": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/to-absolute-glob/-/to-absolute-glob-0.1.1.tgz", - "integrity": "sha1-HN+kcqnvUMI57maZm2YsoOs5k38=", - "dev": true, - "requires": { - "extend-shallow": "2.0.1" - } - }, - "to-array": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/to-array/-/to-array-0.1.4.tgz", - "integrity": "sha1-F+bBH3PdTz10zaek/zI46a2b+JA=", - "dev": true - }, - "to-fast-properties": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", - "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=", - "dev": true - }, - "tough-cookie": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.2.tgz", - "integrity": "sha1-8IH3bkyFcg5sN6X6ztc3FQ2EByo=", - "dev": true, - "requires": { - "punycode": "1.4.1" - } - }, - "traceur": { - "version": "0.0.96", - "resolved": "https://registry.npmjs.org/traceur/-/traceur-0.0.96.tgz", - "integrity": "sha1-X3CbiW47F/4DJlA6Z/NKtLrMq90=", - "dev": true, - "requires": { - "commander": "2.6.0", - "glob": "4.3.5", - "rsvp": "3.6.2", - "semver": "2.3.2", - "source-map-support": "0.2.10" - }, - "dependencies": { - "glob": { - "version": "4.3.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-4.3.5.tgz", - "integrity": "sha1-gPuwjKVA8jiszl0R0em8QedRc9M=", - "dev": true, - "requires": { - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "2.0.10", - "once": "1.3.3" - } - }, - "semver": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-2.3.2.tgz", - "integrity": "sha1-uYSPJdbPNjMwc+ye+IVtQvEjPlI=", - "dev": true - }, - "source-map": { - "version": "0.1.32", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.32.tgz", - "integrity": "sha1-yLbBZ3l7pHQKjqMyUhYv8IWRsmY=", - "dev": true, - "requires": { - "amdefine": "1.0.1" - } - }, - "source-map-support": { - "version": "0.2.10", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.2.10.tgz", - "integrity": "sha1-6lo5AKHByyUJagrozFwrSxDe09w=", - "dev": true, - "requires": { - "source-map": "0.1.32" - } - } - } - }, - "trim-newlines": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", - "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=", - "dev": true - }, - "trim-off-newlines": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/trim-off-newlines/-/trim-off-newlines-1.0.1.tgz", - "integrity": "sha1-n5up2e+odkw4dpi8v+sshI8RrbM=", - "dev": true - }, - "trim-right": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", - "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=", - "dev": true - }, - "tsickle": { - "version": "0.21.6", - "resolved": "https://registry.npmjs.org/tsickle/-/tsickle-0.21.6.tgz", - "integrity": "sha1-U7Abl5xcE/2xOvs/uVgXflmRWI0=", - "dev": true, - "requires": { - "minimist": "1.2.0", - "mkdirp": "0.5.1", - "source-map": "0.5.6", - "source-map-support": "0.4.15" - } - }, - "tslib": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.7.1.tgz", - "integrity": "sha1-vIAEFkaRkjp5/oN4u+s9ogF1OOw=" - }, - "tunnel-agent": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.4.3.tgz", - "integrity": "sha1-Y3PbdpCf5XDgjXNYM2Xtgop07us=", - "dev": true - }, - "type-is": { - "version": "1.6.15", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.15.tgz", - "integrity": "sha1-yrEPtJCeRByChC6v4a1kbIGARBA=", - "dev": true, - "requires": { - "media-typer": "0.3.0", - "mime-types": "2.1.15" - } - }, - "typescript": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-2.4.2.tgz", - "integrity": "sha1-+DlfhdRZJ2BnyYiqQYN6j4KHCEQ=", - "dev": true - }, - "uglify-js": { - "version": "2.8.29", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz", - "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=", - "dev": true, - "optional": true, - "requires": { - "source-map": "0.5.6", - "uglify-to-browserify": "1.0.2", - "yargs": "3.10.0" - } - }, - "uglify-to-browserify": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz", - "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=", - "dev": true - }, - "ultron": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.0.2.tgz", - "integrity": "sha1-rOEWq1V80Zc4ak6I9GhTeMiy5Po=", - "dev": true - }, - "unc-path-regex": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz", - "integrity": "sha1-5z3T17DXxe2G+6xrCufYxqadUPo=", - "dev": true - }, - "union": { - "version": "0.4.6", - "resolved": "https://registry.npmjs.org/union/-/union-0.4.6.tgz", - "integrity": "sha1-GY+9rrolTniLDvy2MLwR8kopWeA=", - "dev": true, - "requires": { - "qs": "2.3.3" - } - }, - "unique-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unique-stream/-/unique-stream-1.0.0.tgz", - "integrity": "sha1-1ZpKdUJ0R9mqbJHnAmP40mpLEEs=", - "dev": true - }, - "unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", - "dev": true - }, - "url-join": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/url-join/-/url-join-0.0.1.tgz", - "integrity": "sha1-HbSK1CLTQCRpqH99l73r/k+x48g=", - "dev": true - }, - "user-home": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/user-home/-/user-home-1.1.1.tgz", - "integrity": "sha1-K1viOjK2Onyd640PKNSFcko98ZA=", - "dev": true - }, - "useragent": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/useragent/-/useragent-2.2.1.tgz", - "integrity": "sha1-z1k+9PLRdYdei7ZY6pLhik/QbY4=", - "dev": true, - "requires": { - "lru-cache": "2.2.4", - "tmp": "0.0.31" - }, - "dependencies": { - "lru-cache": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.2.4.tgz", - "integrity": "sha1-bGWGGb7PFAMdDQtZSxYELOTcBj0=", - "dev": true - } - } - }, - "utf-8-validate": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-1.2.2.tgz", - "integrity": "sha1-i7hxpHQeCFxwSHynrNvX1tNgKes=", - "dev": true, - "optional": true, - "requires": { - "bindings": "1.2.1", - "nan": "2.4.0" - }, - "dependencies": { - "nan": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.4.0.tgz", - "integrity": "sha1-+zxZ1F/k7/4hXwuJD4rfbrMtIjI=", - "dev": true, - "optional": true - } - } - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "dev": true - }, - "utils-merge": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.0.tgz", - "integrity": "sha1-ApT7kiu5N1FTVBxPcJYjHyh8ivg=", - "dev": true - }, - "uuid": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-2.0.3.tgz", - "integrity": "sha1-Z+LoY3lyFVMN/zGOW/nc6/1Hsho=", - "dev": true - }, - "v8flags": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-2.1.1.tgz", - "integrity": "sha1-qrGh+jDUX4jdMhFIh1rALAtV5bQ=", - "dev": true, - "requires": { - "user-home": "1.1.1" - } - }, - "vali-date": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/vali-date/-/vali-date-1.0.0.tgz", - "integrity": "sha1-G5BKWWCfsyjvB4E4Qgk09rhnCaY=", - "dev": true - }, - "validate-npm-package-license": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz", - "integrity": "sha1-KAS6vnEq0zeUWaz74kdGqywwP7w=", - "dev": true, - "requires": { - "spdx-correct": "1.0.2", - "spdx-expression-parse": "1.0.4" - } - }, - "vinyl": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.5.3.tgz", - "integrity": "sha1-sEVbOPxeDPMNQyUTLkYZcMIJHN4=", - "dev": true, - "requires": { - "clone": "1.0.2", - "clone-stats": "0.0.1", - "replace-ext": "0.0.1" - } - }, - "vinyl-fs": { - "version": "0.3.14", - "resolved": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-0.3.14.tgz", - "integrity": "sha1-mmhRzhysHBzqX+hsCTHWIMLPqeY=", - "dev": true, - "requires": { - "defaults": "1.0.3", - "glob-stream": "3.1.18", - "glob-watcher": "0.0.6", - "graceful-fs": "3.0.11", - "mkdirp": "0.5.1", - "strip-bom": "1.0.0", - "through2": "0.6.5", - "vinyl": "0.4.6" - }, - "dependencies": { - "clone": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/clone/-/clone-0.2.0.tgz", - "integrity": "sha1-xhJqkK1Pctv1rNskPMN3JP6T/B8=", - "dev": true - }, - "graceful-fs": { - "version": "3.0.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-3.0.11.tgz", - "integrity": "sha1-dhPHeKGv6mLyXGMKCG1/Osu92Bg=", - "dev": true, - "requires": { - "natives": "1.1.0" - } - }, - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true - }, - "readable-stream": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", - "dev": true, - "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "0.0.1", - "string_decoder": "0.10.31" - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", - "dev": true - }, - "strip-bom": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-1.0.0.tgz", - "integrity": "sha1-hbiGLzhEtabV7IRnqTWYFzo295Q=", - "dev": true, - "requires": { - "first-chunk-stream": "1.0.0", - "is-utf8": "0.2.1" - } - }, - "through2": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", - "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=", - "dev": true, - "requires": { - "readable-stream": "1.0.34", - "xtend": "4.0.1" - } - }, - "vinyl": { - "version": "0.4.6", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.4.6.tgz", - "integrity": "sha1-LzVsh6VQolVGHza76ypbqL94SEc=", - "dev": true, - "requires": { - "clone": "0.2.0", - "clone-stats": "0.0.1" - } - } - } - }, - "void-elements": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz", - "integrity": "sha1-wGavtYK7HLQSjWDqkjkulNXp2+w=", - "dev": true - }, - "when": { - "version": "3.7.8", - "resolved": "https://registry.npmjs.org/when/-/when-3.7.8.tgz", - "integrity": "sha1-xxMLan6gRpPoQs3J56Hyqjmjn4I=", - "dev": true - }, - "which": { - "version": "1.2.14", - "resolved": "https://registry.npmjs.org/which/-/which-1.2.14.tgz", - "integrity": "sha1-mofEN48D6CfOyvGs31bHNsAcFOU=", - "dev": true, - "requires": { - "isexe": "2.0.0" - } - }, - "window-size": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz", - "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=", - "dev": true - }, - "wordwrap": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", - "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=", - "dev": true - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true - }, - "ws": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/ws/-/ws-1.1.4.tgz", - "integrity": "sha1-V/QNA2gy5fUFVmKjl8Tedu1mv2E=", - "dev": true, - "requires": { - "options": "0.0.6", - "ultron": "1.0.2" - } - }, - "wtf-8": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/wtf-8/-/wtf-8-1.0.0.tgz", - "integrity": "sha1-OS2LotDxw00e4tYw8V0O+2jhBIo=", - "dev": true - }, - "xhr2": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/xhr2/-/xhr2-0.1.4.tgz", - "integrity": "sha1-f4dliEdxbbUCYyOBL4GMras4el8=", - "dev": true - }, - "xml2js": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.4.tgz", - "integrity": "sha1-MREBAAMAiuGSQOuhdJe1fHKcVV0=", - "dev": true, - "requires": { - "sax": "0.6.1", - "xmlbuilder": "9.0.1" - } - }, - "xmlbuilder": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.1.tgz", - "integrity": "sha1-kc1wiXdVNj66V8Et3uq0o0GmH2U=", - "dev": true - }, - "xmlhttprequest-ssl": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.3.tgz", - "integrity": "sha1-GFqIjATspGw+QHDZn3tJ3jUomS0=", - "dev": true - }, - "xtend": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", - "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=", - "dev": true - }, - "yargs": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", - "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", - "dev": true, - "requires": { - "camelcase": "1.2.1", - "cliui": "2.1.0", - "decamelize": "1.2.0", - "window-size": "0.1.0" - }, - "dependencies": { - "camelcase": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", - "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=", - "dev": true - } - } - }, - "yeast": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz", - "integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk=", - "dev": true - }, - "zone.js": { - "version": "0.8.14", - "resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.8.14.tgz", - "integrity": "sha1-DE2ySxeCMidMy0P3jJnbfzZCts8=", - "dev": true - } - } -} diff --git a/protractor.conf.js b/protractor.conf.js deleted file mode 100644 index 992fb8e75..000000000 --- a/protractor.conf.js +++ /dev/null @@ -1,35 +0,0 @@ -var httpServer = require('http-server'); -// An example configuration file. -exports.config = { - baseUrl: 'http://localhost:8080/dist-test/e2e/', - - directConnect: true, - // seleniumAddress: 'http://localhost:4444/wd/hub', - seleniumServerJar: 'node_modules/protractor/selenium/selenium-server-standalone-2.48.2.jar', - // Capabilities to be passed to the webdriver instance. - capabilities: { - 'browserName': 'chrome' - }, - - // Framework to use. Jasmine is recommended. - framework: 'jasmine', - - // Spec patterns are relative to the current working directly when - // protractor is called. - specs: ['dist-test/**/*.spec.js'], - allScriptsTimeout: 110000, - - onPrepare: function() { - browser.ignoreSynchronization = true; - }, - beforeLaunch: function () { - httpServer.createServer({ - showDir: false - }).listen('8080', 'localhost'); - }, - // Options to be passed to Jasmine. - jasmineNodeOpts: { - defaultTimeoutInterval: 30000 - }, - useAllAngular2AppRoots: true -}; diff --git a/rollup-globals.js b/rollup-globals.js deleted file mode 100644 index 942a16bb2..000000000 --- a/rollup-globals.js +++ /dev/null @@ -1,12 +0,0 @@ -export default (mod) => { - if (mod === 'rxjs') return 'Rx'; - if (mod.indexOf('rxjs/operator') === 0) return `Rx.Observable.prototype`; - if (mod.indexOf('rxjs/observable') === 0) return `Rx.Observable`; - if (mod === 'rxjs/scheduler/queue') return 'Rx.Scheduler'; - if (mod.indexOf('rxjs/') === 0) return 'Rx'; - - if (mod === 'firebase') return 'firebase'; - if (mod === '@angular/core') return 'ng.core'; - if (mod === '@angular/platform-browser') return 'ng.platformBrowser'; - if (mod === '@angular/core/testing') return 'ng.core.testing'; -} diff --git a/rollup.publish.config.js b/rollup.publish.config.js deleted file mode 100644 index 85850991a..000000000 --- a/rollup.publish.config.js +++ /dev/null @@ -1,9 +0,0 @@ -import globals from './rollup-globals'; - -export default { - entry: 'dist/index.js', - dest: 'dist/bundles/angularfire2.umd.js', - format: 'umd', - moduleName: 'angularfire2', - globals -} diff --git a/rollup.test.config.js b/rollup.test.config.js deleted file mode 100644 index e118bb8db..000000000 --- a/rollup.test.config.js +++ /dev/null @@ -1,9 +0,0 @@ -import globals from './rollup-globals'; - -export default { - entry: 'dist/test-root.js', - dest: 'dist/bundles/test-root.umd.js', - format: 'umd', - moduleName: 'angularfire2.test', - globals -} diff --git a/src/auth/tsconfig-build.json b/src/auth/tsconfig-build.json index 572d1ec4e..9cb5eb95a 100644 --- a/src/auth/tsconfig-build.json +++ b/src/auth/tsconfig-build.json @@ -25,7 +25,6 @@ }, "files": [ "index.ts", - "index.spec.ts", "../../node_modules/zone.js/dist/zone.js.d.ts" ], "angularCompilerOptions": { diff --git a/src/auth/tsconfig-test.json b/src/auth/tsconfig-test.json index f87fa0d1d..f3dd34066 100644 --- a/src/auth/tsconfig-test.json +++ b/src/auth/tsconfig-test.json @@ -1,5 +1,5 @@ { - "extends": "./tsconfig-build.json", + "extends": "./tsconfig-esm.json", "compilerOptions": { "baseUrl": ".", "paths": { diff --git a/src/database/tsconfig-build.json b/src/database/tsconfig-build.json index 8ddda20d8..7fd4add09 100644 --- a/src/database/tsconfig-build.json +++ b/src/database/tsconfig-build.json @@ -25,7 +25,6 @@ }, "files": [ "index.ts", - "index.spec.ts", "../../node_modules/zone.js/dist/zone.js.d.ts" ], "angularCompilerOptions": { diff --git a/src/database/tsconfig-test.json b/src/database/tsconfig-test.json index f87fa0d1d..f3dd34066 100644 --- a/src/database/tsconfig-test.json +++ b/src/database/tsconfig-test.json @@ -1,5 +1,5 @@ { - "extends": "./tsconfig-build.json", + "extends": "./tsconfig-esm.json", "compilerOptions": { "baseUrl": ".", "paths": { diff --git a/src/tsconfig.json b/src/tsconfig.json index b0b13f96f..4cfc5ad70 100644 --- a/src/tsconfig.json +++ b/src/tsconfig.json @@ -5,5 +5,11 @@ "angularfire2/auth": ["./auth"], "angularfire2/database": ["./database"] } - } + }, + "files": [ + "../../node_modules/zone.js/dist/zone.js.d.ts", + "core/index.ts", + "auth/index.ts", + "database/index.ts" + ] } diff --git a/test/e2e/auth/firebase_auth_example.spec.ts b/test/e2e/auth/firebase_auth_example.spec.ts deleted file mode 100644 index 697515112..000000000 --- a/test/e2e/auth/firebase_auth_example.spec.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { waitForElement } from '../shared'; - -describe('FirebaseList', () => { - it('should login anonymously', () => { - browser.get('auth/index.html'); - waitForElement('#is-anonymous'); - var isAnonymous = $('#is-anonymous'); - expect(isAnonymous.getText()).toBe(''); - var login = $('#login-anonymous'); - login.click(); - browser.sleep(1000); - expect(isAnonymous.getText()).toBe('true'); - }); -}); diff --git a/test/e2e/auth/firebase_auth_example.ts b/test/e2e/auth/firebase_auth_example.ts deleted file mode 100644 index eda3e7782..000000000 --- a/test/e2e/auth/firebase_auth_example.ts +++ /dev/null @@ -1,164 +0,0 @@ -import {Component, enableProdMode, Inject, provide} from '@angular/core'; -import {bootstrap} from '@angular/platform-browser-dynamic'; -import { - AuthMethods, - AuthProviders, - AngularFire, - FIREBASE_PROVIDERS, - FirebaseListObservable, - FirebaseAuthState, - FirebaseApp -} from '../../../dist/angularfire2'; - -declare var Zone: any; - -enableProdMode(); - -// TODO fix imports and tsconfig -// import { COMMON_CONFIG } from 'angularfire2/test-config'; - -import 'rxjs/add/operator/do'; - -const COMMON_CONFIG = { - apiKey: "AIzaSyBVSy3YpkVGiKXbbxeK0qBnu3-MNZ9UIjA", - authDomain: "angularfire2-test.firebaseapp.com", - databaseURL: "https://angularfire2-test.firebaseio.com", - storageBucket: "angularfire2-test.appspot.com" -}; - -@Component({ - template: ` - -

-
-

Anonymous Login

- - -

- Is Anonymous? - - {{ user?.anonymous }} - -

-
-
-

OAuth Login

- - -

OAuth Provider

- - -

- - -

- -

- -

-
- -
-

Create User

- - - -
- -
-

Email and Password Login

- - - -
- -
-

Custom Token Login

- - -
- -
- -
-

Provider Data

- {{ user?.providerData && user.providerData[0] | json }} - Not Logged In -
- -
-

User

- (Empty object is equivalent to null). - {{ user || {} | json }} -
- `, - selector: 'app' -}) -class App { - user: FirebaseAuthState; - questions: FirebaseListObservable; - constructor(public af: AngularFire) { - af.auth - .do(v => console.log('onAuth', v)) - .map(u => { - return Object.assign({}, u, { - auth: null // makes easier to convert to json - }) - }) - .subscribe(user => { - console.log('zone', Zone.current.name); - this.user = user - }); - } - - signInAnonymously() { - this.af.auth.login({ - method: AuthMethods.Anonymous - }) - .then((user) => console.log(`Anonymous Login Success:`, user)) - .catch(e => console.error(`Anonymous Login Failure:`, e)); - } - - signInWithOAuth(redirect: boolean, provider: string) { - this.af.auth.login({ - method: redirect ? AuthMethods.Redirect : AuthMethods.Popup, - provider: (AuthProviders)[provider] - }) - .then((user) => console.log(`${provider} Login Success:`, user)) - .catch(e => console.error(`${provider} Login Failure:`, e)); - } - - createUser(email: string, password: string) { - this.af.auth.createUser({ email, password }) - .then((user) => console.log(`Create User Success:`, user)) - .catch(e => console.error(`Create User Failure:`, e)); - } - - loginUser(email: string, password: string) { - this.af.auth.login({ email, password }, { - method: AuthMethods.Password, - provider: AuthProviders.Password - }) - .then((user) => console.log(`Password Login Success:`, user)) - .catch(e => console.error(`Password Login Failure:`, e)); - } - - signInWithCustomToken(token: string) { - // TODO: this.af.auth.login({ token }); - } -} - -bootstrap(App, [ - FIREBASE_PROVIDERS, - defaultFirebase(COMMON_CONFIG)]).then(() => { - console.log('bootstrap success'); - }, (e:any) => { - console.error('bootstrap failed', e); - }); diff --git a/test/e2e/auth/index.html b/test/e2e/auth/index.html deleted file mode 100644 index 01929560e..000000000 --- a/test/e2e/auth/index.html +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - - - - \ No newline at end of file diff --git a/test/e2e/firebase_list/firebase_list_example.spec.js b/test/e2e/firebase_list/firebase_list_example.spec.js deleted file mode 100644 index 71937c595..000000000 --- a/test/e2e/firebase_list/firebase_list_example.spec.js +++ /dev/null @@ -1,21 +0,0 @@ -/* global protractor */ -/* global $ */ -/* global element */ -/* global browser */ -function waitForElement(selector) { - var EC = (protractor).ExpectedConditions; - // Waits for the element with id 'abc' to be present on the dom. - browser.wait(EC.presenceOf($(selector)), 20000); -} - -describe('FirebaseList', () => { - it('should render', () => { - browser.get('firebase_list/index.html'); - waitForElement('app'); - var app = $('app'); - browser.sleep(500); - expect(app.getText()).toBe(`Hello -why? -how?`); - }); -}); \ No newline at end of file diff --git a/test/e2e/firebase_list/firebase_list_example.spec.ts b/test/e2e/firebase_list/firebase_list_example.spec.ts deleted file mode 100644 index 82e348584..000000000 --- a/test/e2e/firebase_list/firebase_list_example.spec.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { waitForElement } from '../shared'; - -describe('FirebaseList', () => { - it('should render', () => { - browser.get('firebase_list/index.html'); - waitForElement('app'); - var app = $('app'); - browser.sleep(500); - expect(app.getText()).toBe(`Hello -why? -how?`); - }); -}); \ No newline at end of file diff --git a/test/e2e/firebase_list/firebase_list_example.ts b/test/e2e/firebase_list/firebase_list_example.ts deleted file mode 100644 index d299de6ea..000000000 --- a/test/e2e/firebase_list/firebase_list_example.ts +++ /dev/null @@ -1,49 +0,0 @@ -import {Component, enableProdMode, Inject, provide} from '@angular/core'; -import {bootstrap} from '@angular/platform-browser-dynamic'; -import { - defaultFirebase, - AngularFire, - FIREBASE_PROVIDERS, - FirebaseListObservable, - FirebaseApp -} from '../../../dist/angularfire2'; - -enableProdMode(); - -// TODO fix imports and tsconfig -// import { COMMON_CONFIG } from '../../../src/test-config'; - -const COMMON_CONFIG = { - apiKey: "AIzaSyBVSy3YpkVGiKXbbxeK0qBnu3-MNZ9UIjA", - authDomain: "angularfire2-test.firebaseapp.com", - databaseURL: "https://angularfire2-test.firebaseio.com", - storageBucket: "angularfire2-test.appspot.com", -}; - -@Component({ - template: ` -

Hello

-
- {{question.question}} -
- `, - selector: 'app' -}) -class App { - questions:FirebaseListObservable; - constructor(public af:AngularFire, @Inject(FirebaseApp) app: firebase.app.App) { - var ref = app.database().ref(); - ref.remove(); - this.questions = af.database.list('/questions'); - this.questions.push({question: 'why?'}); - this.questions.push({question: 'how?'}); - } -} - -bootstrap(App, [ - FIREBASE_PROVIDERS, - defaultFirebase(COMMON_CONFIG)]).then(() => { - console.log('bootstrap success'); - }, (e:any) => { - console.error('bootstrap failed', e); - }); diff --git a/test/e2e/firebase_list/index.html b/test/e2e/firebase_list/index.html deleted file mode 100644 index d574734a4..000000000 --- a/test/e2e/firebase_list/index.html +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - - - - \ No newline at end of file diff --git a/test/e2e/firebase_object/firebase_object_example.spec.js b/test/e2e/firebase_object/firebase_object_example.spec.js deleted file mode 100644 index 4f060af91..000000000 --- a/test/e2e/firebase_object/firebase_object_example.spec.js +++ /dev/null @@ -1,20 +0,0 @@ -/* global protractor */ -/* global $ */ -/* global element */ -/* global browser */ -function waitForElement(selector) { - var EC = (protractor).ExpectedConditions; - // Waits for the element with id 'abc' to be present on the dom. - browser.wait(EC.presenceOf($(selector)), 20000); -} - -describe('FirebaseObject', () => { - it('should render', () => { - browser.get('firebase_object/index.html'); - waitForElement('app'); - var app = $('app'); - browser.sleep(500); - expect(app.getText()).toBe(`Question -how to firebase?`); - }); -}); \ No newline at end of file diff --git a/test/e2e/firebase_object/firebase_object_example.spec.ts b/test/e2e/firebase_object/firebase_object_example.spec.ts deleted file mode 100644 index 28a01f5e8..000000000 --- a/test/e2e/firebase_object/firebase_object_example.spec.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { waitForElement } from '../shared'; - -describe('FirebaseObject', () => { - it('should render', () => { - browser.get('firebase_object/index.html'); - waitForElement('app'); - var app = $('app'); - browser.sleep(500); - expect(app.getText()).toBe(`Question -how to firebase?`); - }); -}); \ No newline at end of file diff --git a/test/e2e/firebase_object/firebase_object_example.ts b/test/e2e/firebase_object/firebase_object_example.ts deleted file mode 100644 index 69c3d9652..000000000 --- a/test/e2e/firebase_object/firebase_object_example.ts +++ /dev/null @@ -1,51 +0,0 @@ -import {Component, enableProdMode, Inject, provide} from '@angular/core'; -import {bootstrap} from '@angular/platform-browser-dynamic'; -import { - defaultFirebase, - AngularFire, - FIREBASE_PROVIDERS, - FirebaseObjectObservable, - FirebaseApp -} from '../../../dist/angularfire2'; - -// TODO fix imports and tsconfig -// import { COMMON_CONFIG } from '../../../src/test-config'; - -const COMMON_CONFIG = { - apiKey: "AIzaSyBVSy3YpkVGiKXbbxeK0qBnu3-MNZ9UIjA", - authDomain: "angularfire2-test.firebaseapp.com", - databaseURL: "https://angularfire2-test.firebaseio.com", - storageBucket: "angularfire2-test.appspot.com", -}; - - -enableProdMode(); - -@Component({ - template: ` -

- Question -

- {{ (question | async).title }} - `, - selector: 'app' -}) -class App { - question:FirebaseObjectObservable; - constructor(public af:AngularFire, @Inject(FirebaseApp) app: firebase.app.App) { - var ref = app.database().ref(); - ref.remove(); - this.question = af.database.object('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/questions/1'); - ref.child('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/questions/1').set({title: 'how to firebase?'}); - } -} - -bootstrap(App, [ - defaultFirebase(COMMON_CONFIG), - FIREBASE_PROVIDERS -]) - .then(() => { - console.log('bootstrap success'); - }, (e:any) => { - console.error('bootstrap failed', e); - }); diff --git a/test/e2e/firebase_object/index.html b/test/e2e/firebase_object/index.html deleted file mode 100644 index 98542d1b0..000000000 --- a/test/e2e/firebase_object/index.html +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - - - - \ No newline at end of file diff --git a/test/e2e/shared.ts b/test/e2e/shared.ts deleted file mode 100644 index 24e3bf06a..000000000 --- a/test/e2e/shared.ts +++ /dev/null @@ -1,5 +0,0 @@ -export function waitForElement(selector: string) { - var EC = (protractor).ExpectedConditions; - // Waits for the element with id 'abc' to be present on the dom. - browser.wait(EC.presenceOf($(selector)), 20000); -} \ No newline at end of file diff --git a/test/e2e/system.config.ts b/test/e2e/system.config.ts deleted file mode 100644 index cb8ae128e..000000000 --- a/test/e2e/system.config.ts +++ /dev/null @@ -1,45 +0,0 @@ -declare var System: any; - -System.config({ - defaultExtension: 'js', - map: { - 'firebase': '/node_modules/firebase/firebase.js', - 'angularfire2': '/dist', - 'typescript': '/node_modules/typescript/lib/typescript.js', - '@angular': '/node_modules/@angular', - 'rxjs': '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/node_modules/rxjs', - 'test': '/dist-test/' - }, - packages: { - 'test': { - defaultExtension: 'js' - }, - 'rxjs': { - defaultExtension: 'js', - }, - '@angular/core': { - main: 'index.js', - defaultExtension: 'js' - }, - '@angular/common': { - main: 'index.js', - defaultExtension: 'js' - }, - '@angular/compiler': { - main: 'index.js', - defaultExtension: 'js' - }, - '@angular/platform-browser': { - main: 'index.js', - defaultExtension: 'js' - }, - '@angular/platform-browser-dynamic': { - main: 'index.js', - defaultExtension: 'js' - }, - 'angularfire2': { - main: 'angularfire2.js', - defaultExtension: 'js' - } - } -}); diff --git a/test/tsconfig.json b/test/tsconfig.json deleted file mode 100644 index d7011d1f3..000000000 --- a/test/tsconfig.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "compilerOptions": { - "experimentalDecorators": true, - "emitDecoratorMetadata": true, - "module": "commonjs", - "target": "es5", - "noImplicitAny": true, - "sourceMap": true, - "declaration": true, - "removeComments": true, - "rootDir": ".", - "outDir": "../dist-test" - } -} diff --git a/test/typings.d.ts b/test/typings.d.ts deleted file mode 100644 index b1db1096c..000000000 --- a/test/typings.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -/// -/// diff --git a/tools/rewrite-published-package.js b/tools/rewrite-published-package.js deleted file mode 100644 index 428269314..000000000 --- a/tools/rewrite-published-package.js +++ /dev/null @@ -1,24 +0,0 @@ -/** - * Rewrite the package.json that gets published to npm. - * * Change main to point to angularfire.js instead of dist/angularfire.js - * * Change angular2 to be a peer dependency - */ -var fs = require('fs'); -var srcPackage = require('../package.json'); - -delete srcPackage.scripts; - -var peerDependencies = Object.assign({}, srcPackage.dependencies); - -delete srcPackage.dependencies; - -var outPackage = Object.assign({}, srcPackage, { peerDependencies }); - -fs.writeFileSync('./dist/package.json', JSON.stringify(outPackage, null, 2)); - -// It's also necessary to copy any deep-path package.json files. -// See https://github.com/angular/angularfire2/issues/880 - -['app', 'auth', 'database'].forEach(dir => { - fs.writeFileSync(`./dist/${dir}/package.json`, fs.readFileSync(`./src/${dir}/package.json`)); -}); diff --git a/tsconfig.publish.es6.json b/tsconfig.publish.es6.json deleted file mode 100644 index 229595f67..000000000 --- a/tsconfig.publish.es6.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "compilerOptions": { - "experimentalDecorators": true, - "emitDecoratorMetadata": true, - "module": "es2015", - "target": "es5", - "noImplicitAny": false, - "outDir": "dist", - "rootDir": "src", - "sourceMap": true, - "inlineSources": true, - "declaration": true, - "removeComments": true, - "strictNullChecks": true, - "lib": [ - "es2015", - "dom" - ], - "skipLibCheck": true, - "moduleResolution": "node" - }, - "files": [ - "src/index.ts", - "src/auth.ts", - "src/database.ts", - "node_modules/zone.js/dist/zone.js.d.ts" - ], - "angularCompilerOptions": { - "skipTemplateCodegen": true, - "strictMetadataEmit": true - } -} From f6fe07449208efcd1c8e103a39d4216b4346ff2d Mon Sep 17 00:00:00 2001 From: David East Date: Mon, 31 Jul 2017 16:20:56 -0600 Subject: [PATCH 10/14] chore(build): Use modules in test files --- .travis.yml | 4 -- karma.conf.js | 2 + package.json | 6 +-- src/auth/auth.spec.ts | 3 +- src/auth/package.json | 2 +- src/auth/tsconfig-build.json | 5 +- src/core/angularfire2.ts | 4 +- src/core/package.json | 2 +- src/core/tsconfig-build.json | 5 +- src/database/firebase_list_factory.spec.ts | 51 +++++++++---------- src/database/firebase_list_observable.spec.ts | 8 ++- src/database/firebase_object_factory.spec.ts | 9 ++-- .../firebase_object_observable.spec.ts | 4 +- src/database/package.json | 2 +- src/database/query_observable.spec.ts | 2 +- src/database/tsconfig-build.json | 5 +- src/tsconfig.json | 25 ++++++--- src/types.d.ts | 1 + .../{tsconfig.json => tsconfig-test.json} | 0 tools/build.js | 22 +++++--- 20 files changed, 81 insertions(+), 81 deletions(-) create mode 100644 src/types.d.ts rename test/typings-test/{tsconfig.json => tsconfig-test.json} (100%) diff --git a/.travis.yml b/.travis.yml index 94c99cadb..35e9425fe 100644 --- a/.travis.yml +++ b/.travis.yml @@ -27,12 +27,8 @@ before_script: script: - npm run build - ./node_modules/.bin/karma start --single-run --browsers Firefox --reporters mocha - # Make sure the build that ships to npm builds without errors - - npm run build_npm # Run integration test to make sure our typings are correct for user-land. - node tools/run-typings-test.js - # Can't run until https://github.com/angular/protractor/issues/2784 is resolved - #- ./node_modules/.bin/protractor protractor.conf.js --browser firefox notifications: webhooks: diff --git a/karma.conf.js b/karma.conf.js index 584a29961..96743a6db 100644 --- a/karma.conf.js +++ b/karma.conf.js @@ -27,6 +27,8 @@ module.exports = function(config) { 'karma-test-shim.js', 'node_modules/firebase/firebase.js', 'dist/packages-dist/bundles/core.umd.{js,map}', + 'dist/packages-dist/bundles/auth.umd.{js,map}', + 'dist/packages-dist/bundles/database.umd.{js,map}', 'dist/packages-dist/bundles/test.umd.{js,map}', ], diff --git a/package.json b/package.json index d827e68c7..4343b269c 100644 --- a/package.json +++ b/package.json @@ -41,7 +41,8 @@ "@angular/platform-browser": "^4.0.0", "@angular/platform-browser-dynamic": "^4.0.0", "firebase": "^4.0.0", - "rxjs": "^5.0.1" + "rxjs": "^5.0.1", + "zone.js": "^0.8.0" }, "devDependencies": { "@angular/compiler-cli": "^4.0.0", @@ -79,8 +80,7 @@ "systemjs": "^0.19.16", "systemjs-builder": "^0.15.7", "traceur": "0.0.96", - "typescript": "^2.3.2", - "zone.js": "^0.8.0" + "typescript": "^2.3.4" }, "typings": "index.d.ts" } diff --git a/src/auth/auth.spec.ts b/src/auth/auth.spec.ts index ab0fe3129..ce3a81ece 100644 --- a/src/auth/auth.spec.ts +++ b/src/auth/auth.spec.ts @@ -8,8 +8,7 @@ import { _do } from 'rxjs/operator/do'; import { take } from 'rxjs/operator/take'; import { skip } from 'rxjs/operator/skip'; import { FirebaseApp, FirebaseAppConfig, AngularFireModule } from 'angularfire2'; -import { AngularFireAuth } from './auth'; -import { AngularFireAuthModule } from './auth.module'; +import { AngularFireAuth, AngularFireAuthModule } from 'angularfire2/auth'; import { COMMON_CONFIG } from './test-config'; function authTake(auth: Observable, count: number): Observable { diff --git a/src/auth/package.json b/src/auth/package.json index 04d4b61be..481fa17a0 100644 --- a/src/auth/package.json +++ b/src/auth/package.json @@ -1,6 +1,6 @@ { "name": "angularfire2/auth", - "version": "4.0.0-rc.1", + "version": "ANGULARFIRE2_VERSION", "description": "The auth module", "main": "../bundles/auth.umd.js", "module": "index.js", diff --git a/src/auth/tsconfig-build.json b/src/auth/tsconfig-build.json index 9cb5eb95a..4b49e152b 100644 --- a/src/auth/tsconfig-build.json +++ b/src/auth/tsconfig-build.json @@ -13,10 +13,7 @@ "declaration": false, "removeComments": true, "strictNullChecks": true, - "lib": [ - "es2015", - "dom" - ], + "lib": ["es2015", "dom", "es2015.promise", "es2015.collection", "es2015.iterable"], "skipLibCheck": true, "moduleResolution": "node", "paths": { diff --git a/src/core/angularfire2.ts b/src/core/angularfire2.ts index 1aae60c9f..32ec834a4 100644 --- a/src/core/angularfire2.ts +++ b/src/core/angularfire2.ts @@ -42,9 +42,9 @@ export class AngularFireModule { * with zones. */ export class ZoneScheduler { - constructor(public zone: any) {} + constructor(public zone: Zone) {} - schedule(...args): Subscription { + schedule(...args: any[]): Subscription { return this.zone.run(() => queue.schedule.apply(queue, args)); } } diff --git a/src/core/package.json b/src/core/package.json index 1cf534b7f..68835c85b 100644 --- a/src/core/package.json +++ b/src/core/package.json @@ -1,6 +1,6 @@ { "name": "angularfire2", - "version": "4.0.0-rc.2", + "version": "ANGULARFIRE2_VERSION", "description": "The core module", "main": "./bundles/core.umd.js", "module": "index.js", diff --git a/src/core/tsconfig-build.json b/src/core/tsconfig-build.json index 027e59fb6..16c848a78 100644 --- a/src/core/tsconfig-build.json +++ b/src/core/tsconfig-build.json @@ -12,10 +12,7 @@ "declaration": false, "removeComments": true, "strictNullChecks": true, - "lib": [ - "es2015", - "dom" - ], + "lib": ["es2015", "dom", "es2015.promise", "es2015.collection", "es2015.iterable"], "skipLibCheck": true, "moduleResolution": "node" }, diff --git a/src/database/firebase_list_factory.spec.ts b/src/database/firebase_list_factory.spec.ts index 7d8fe2057..7349b481b 100644 --- a/src/database/firebase_list_factory.spec.ts +++ b/src/database/firebase_list_factory.spec.ts @@ -1,10 +1,9 @@ import * as firebase from 'firebase/app'; -import { AngularFireDatabase } from './database'; -import { AngularFireDatabaseModule } from './database.module'; -import { FirebaseListObservable } from './firebase_list_observable'; -import { FirebaseListFactory, onChildAdded, onChildChanged, onChildRemoved, onChildUpdated } from './firebase_list_factory'; -import { FirebaseObjectFactory } from './firebase_object_factory'; import { FirebaseApp, FirebaseAppConfig, AngularFireModule} from 'angularfire2'; +import { AngularFireDatabase, AngularFireDatabaseModule, FirebaseListObservable, + FirebaseListFactory, onChildAdded, onChildChanged, onChildRemoved, onChildUpdated, + FirebaseObjectFactory +} from 'angularfire2/database'; import { TestBed, inject } from '@angular/core/testing'; import * as utils from './utils'; import { Query, AFUnwrappedDataSnapshot } from './interfaces'; @@ -22,7 +21,7 @@ const questionsPath = 'questions'; function queryTest(observable: Observable, subject: Subject, done: any) { let nexted = false; skipAndTake(observable, 2) - .subscribe(val => { + .subscribe((val: any) => { if (!nexted) { subject.next('2'); } @@ -364,7 +363,7 @@ describe('FirebaseListFactory', () => { describe('methods', () => { - let toKey; + let toKey: any; let val1: any; let val2: any; let val3: any; @@ -375,7 +374,7 @@ describe('FirebaseListFactory', () => { let subscription: Subscription; beforeEach((done: any) => { - toKey = (val) => val.key; + toKey = (val: any) => val.key; val1 = { key: 'key1' }; val2 = { key: 'key2' }; val3 = { key: 'key3' }; @@ -419,9 +418,9 @@ describe('FirebaseListFactory', () => { let calls: string[] = []; questions.$ref.ref.once('child_added', (snap) => calls.push('child_added:' + snap.val().number)); skipAndTake(questions).subscribe( - (list) => { + (list: any) => { expect(calls).toEqual(['child_added:2', 'pushed']); - expect(list.map(i => i.number)).toEqual([1, 2]); + expect(list.map((i: any) => i.number)).toEqual([1, 2]); done(); }, done.fail @@ -481,10 +480,10 @@ describe('FirebaseListFactory', () => { it('should re-emit identical instances of unchanged children', (done: any) => { - let prev; + let prev: any; take.call(questions, 2).subscribe( - (list) => { + (list: any) => { if (prev) { expect(list[0]).toBe(prev[0]); done(); @@ -501,10 +500,10 @@ describe('FirebaseListFactory', () => { it('should re-emit identical instances of unchanged children as snapshots', (done: any) => { - let prev; + let prev: any; take.call(questionsSnapshotted, 2).subscribe( - (list) => { + (list: any) => { if (prev) { expect(list[0]).toBe(prev[0]); done(); @@ -536,7 +535,7 @@ describe('FirebaseListFactory', () => { }); take.call(query, 1).subscribe( - (list) => { + (list: any) => { expect(list.length).toEqual(1); expect(list[0].$key).toEqual("val1"); done(); @@ -565,7 +564,7 @@ describe('FirebaseListFactory', () => { }); take.call(query, 1).subscribe( - (list) => { + (list: any) => { expect(list.length).toEqual(1); expect(list[0].$key).toEqual("val1"); done(); @@ -685,7 +684,7 @@ describe('FirebaseListFactory', () => { // Creating a new observable so that the current zone is captured. subscription = FirebaseListFactory(app.database().ref(`questions`)) .filter(d => d - .map(v => v.$value) + .map((v: any) => v.$value) .indexOf('in-the-zone') > -1) .subscribe(data => { expect(Zone.current.name).toBe('newZone'); @@ -763,8 +762,8 @@ describe('FirebaseListFactory', () => { let promise2 = toPromise.call(take.call(query2, 1)); Promise.all([promise1, promise2]).then(([list1, list2]) => { - expect(list1.map(i => i.$key)).toEqual(['val1', 'val2', 'val3']); - expect(list2.map(i => i.$key)).toEqual(['val2', 'val3']); + expect(list1.map((i: any) => i.$key)).toEqual(['val1', 'val2', 'val3']); + expect(list2.map((i: any) => i.$key)).toEqual(['val2', 'val3']); done(); }); }) @@ -801,8 +800,8 @@ describe('FirebaseListFactory', () => { let promise2 = toPromise.call(take.call(query2, 1)); Promise.all([promise1, promise2]).then(([list1, list2]) => { - expect(list1.map(i => i.$key)).toEqual(['val1', 'val2', 'val3']); - expect(list2.map(i => i.$key)).toEqual(['val2']); + expect(list1.map((i: any) => i.$key)).toEqual(['val1', 'val2', 'val3']); + expect(list2.map((i: any) => i.$key)).toEqual(['val2']); done(); }); }) @@ -839,8 +838,8 @@ describe('FirebaseListFactory', () => { let promise2 = toPromise.call(take.call(query2, 1)); Promise.all([promise1, promise2]).then(([list1, list2]) => { - expect(list1.map(i => i.$key)).toEqual(['val1', 'val2', 'val3']); - expect(list2.map(i => i.$key)).toEqual(['val1', 'val2']); + expect(list1.map((i: any) => i.$key)).toEqual(['val1', 'val2', 'val3']); + expect(list2.map((i: any) => i.$key)).toEqual(['val1', 'val2']); done(); }); }) @@ -867,7 +866,7 @@ describe('FirebaseListFactory', () => { } }); - query = map.call(query, (list, index) => { + query = map.call(query, (list: any, index: any) => { switch (index) { case 0: subject.next(true); @@ -886,8 +885,8 @@ describe('FirebaseListFactory', () => { query = take.call(query, 3); query = toArray.call(query); - toPromise.call(query).then((emits) => { - expect(emits.map(e => e.map(i => i.$key))).toEqual([ + toPromise.call(query).then((emits: any) => { + expect(emits.map((e: any) => e.map((i: any) => i.$key))).toEqual([ ['key1'], ['key2'], ['key2', 'key4'] diff --git a/src/database/firebase_list_observable.spec.ts b/src/database/firebase_list_observable.spec.ts index cbb1a6028..c5f1557d6 100644 --- a/src/database/firebase_list_observable.spec.ts +++ b/src/database/firebase_list_observable.spec.ts @@ -1,12 +1,10 @@ -import { AngularFireDatabase } from './database'; -import { AngularFireDatabaseModule } from './database.module'; -import { FirebaseListObservable } from './firebase_list_observable'; -import { FirebaseObjectFactory } from './firebase_object_factory'; +import { FirebaseApp, FirebaseAppConfig, AngularFireModule} from 'angularfire2'; +import { AngularFireDatabase, AngularFireDatabaseModule, FirebaseListObservable, FirebaseObjectFactory } from 'angularfire2/database'; import { Observer } from 'rxjs/Observer'; import { map } from 'rxjs/operator/map'; import * as firebase from 'firebase/app'; import { unwrapMapFn } from './utils'; -import { FirebaseApp, FirebaseAppConfig, AngularFireModule} from 'angularfire2'; + import { TestBed, inject } from '@angular/core/testing'; import { COMMON_CONFIG } from './test-config'; diff --git a/src/database/firebase_object_factory.spec.ts b/src/database/firebase_object_factory.spec.ts index bd44c58dd..fa477bd6b 100644 --- a/src/database/firebase_object_factory.spec.ts +++ b/src/database/firebase_object_factory.spec.ts @@ -1,11 +1,8 @@ import * as firebase from 'firebase/app'; import { Subscription } from 'rxjs'; -import { AngularFireDatabase } from './database'; -import { AngularFireDatabaseModule } from './database.module'; -import { FirebaseObjectObservable } from './firebase_object_observable'; -import { FirebaseObjectFactory } from './firebase_object_factory'; -import { TestBed, inject } from '@angular/core/testing'; import { FirebaseApp, FirebaseAppConfig, AngularFireModule } from 'angularfire2'; +import { AngularFireDatabase, AngularFireDatabaseModule, FirebaseObjectObservable, FirebaseObjectFactory } from 'angularfire2/database'; +import { TestBed, inject } from '@angular/core/testing'; import { COMMON_CONFIG } from './test-config'; describe('FirebaseObjectFactory', () => { @@ -16,7 +13,7 @@ describe('FirebaseObjectFactory', () => { let nextSpy: jasmine.Spy; let app: firebase.app.App; let db: AngularFireDatabase; - + beforeEach(() => { TestBed.configureTestingModule({ imports: [ diff --git a/src/database/firebase_object_observable.spec.ts b/src/database/firebase_object_observable.spec.ts index adb0edd0e..a53471cce 100644 --- a/src/database/firebase_object_observable.spec.ts +++ b/src/database/firebase_object_observable.spec.ts @@ -1,9 +1,7 @@ import { TestBed, inject } from '@angular/core/testing'; import { FirebaseApp, FirebaseAppConfig, AngularFireModule } from 'angularfire2'; import { COMMON_CONFIG } from './test-config'; -import { AngularFireDatabase } from './database'; -import { AngularFireDatabaseModule } from './database.module'; -import { FirebaseObjectObservable } from './firebase_object_observable'; +import { AngularFireDatabase, AngularFireDatabaseModule, FirebaseObjectObservable } from 'angularfire2/database'; import { Observer } from 'rxjs/Observer'; import { map } from 'rxjs/operator/map'; import * as firebase from 'firebase/app'; diff --git a/src/database/package.json b/src/database/package.json index bc3661f22..a78e9212f 100644 --- a/src/database/package.json +++ b/src/database/package.json @@ -1,6 +1,6 @@ { "name": "angularfire2/database", - "version": "4.0.0-rc.1", + "version": "ANGULARFIRE2_VERSION", "description": "The database module", "main": "../bundles/database.umd.js", "module": "index.js", diff --git a/src/database/query_observable.spec.ts b/src/database/query_observable.spec.ts index d753906f9..ffc8ad5bf 100644 --- a/src/database/query_observable.spec.ts +++ b/src/database/query_observable.spec.ts @@ -2,7 +2,7 @@ import { Observable } from 'rxjs/Observable'; import { Observer } from 'rxjs/Observer'; import { Subject } from 'rxjs/Subject'; import { Query, ScalarQuery } from './interfaces'; -import { getOrderObservables, observeQuery } from './query_observable'; +import { getOrderObservables, observeQuery } from 'angularfire2/database'; function scalarQueryTest(query: ScalarQuery, done: any) { const queryObservable = observeQuery(query); diff --git a/src/database/tsconfig-build.json b/src/database/tsconfig-build.json index 7fd4add09..878236200 100644 --- a/src/database/tsconfig-build.json +++ b/src/database/tsconfig-build.json @@ -13,10 +13,7 @@ "declaration": false, "removeComments": true, "strictNullChecks": true, - "lib": [ - "es2015", - "dom" - ], + "lib": ["es2015", "dom", "es2015.promise", "es2015.collection", "es2015.iterable"], "skipLibCheck": true, "moduleResolution": "node", "paths": { diff --git a/src/tsconfig.json b/src/tsconfig.json index 4cfc5ad70..674b3df60 100644 --- a/src/tsconfig.json +++ b/src/tsconfig.json @@ -1,15 +1,24 @@ { "compilerOptions": { + "baseUrl": ".", + "declaration": true, + "experimentalDecorators": true, + "emitDecoratorMetadata": true, + "module": "commonjs", + "moduleResolution": "node", + "strictNullChecks": true, + "noImplicitAny": false, + "noFallthroughCasesInSwitch": true, "paths": { "angularfire2": ["./core"], "angularfire2/auth": ["./auth"], "angularfire2/database": ["./database"] - } - }, - "files": [ - "../../node_modules/zone.js/dist/zone.js.d.ts", - "core/index.ts", - "auth/index.ts", - "database/index.ts" - ] + }, + "rootDir": ".", + "inlineSourceMap": true, + "lib": ["es5", "dom", "es2015.promise", "es2015.collection", "es2015.iterable"], + "skipDefaultLibCheck": true, + "skipLibCheck": true, + "target": "es2015" + } } diff --git a/src/types.d.ts b/src/types.d.ts new file mode 100644 index 000000000..cb5d0978f --- /dev/null +++ b/src/types.d.ts @@ -0,0 +1 @@ +/// \ No newline at end of file diff --git a/test/typings-test/tsconfig.json b/test/typings-test/tsconfig-test.json similarity index 100% rename from test/typings-test/tsconfig.json rename to test/typings-test/tsconfig-test.json diff --git a/tools/build.js b/tools/build.js index 35e8aabf3..89ad70dda 100644 --- a/tools/build.js +++ b/tools/build.js @@ -5,6 +5,7 @@ const { copy, readFileSync, writeFile } = require('fs-extra'); const { prettySize } = require('pretty-size'); const gzipSize = require('gzip-size'); const resolve = require('rollup-plugin-node-resolve'); +const pkg = require(`${process.cwd()}/package.json`); // Rollup globals const GLOBALS = { @@ -44,11 +45,11 @@ const GLOBALS = { // Map of dependency versions across all packages const VERSIONS = { - ANGULAR_VERSION: '^4.0.0', - FIREBASE_VERSION: '^4.0.0', - RXJS_VERSION: '^5.0.1', - ZONEJS_VERSION: '^0.8.0', - ANGULARFIRE2_VERSION: '4.0.0-rc.2' + ANGULAR_VERSION: pkg.dependencies['@angular/core'], + FIREBASE_VERSION: pkg.dependencies['firebase'], + RXJS_VERSION: pkg.dependencies['rxjs'], + ZONEJS_VERSION: pkg.dependencies['zone.js'], + ANGULARFIRE2_VERSION: pkg.version }; // Constants for running typescript commands @@ -182,6 +183,10 @@ function copyRootTest() { return copy(`${process.cwd()}/src/root.spec.js`, `${process.cwd()}/dist/root.spec.js`); } +function copyNpmIgnore() { + return copy(`${process.cwd()}/.npmignore`, `${process.cwd()}/dist/packages-dist/.npmignore`); +} + function measure(module, gzip = true) { const path = `${process.cwd()}/dist/packages-dist/bundles/${module}.umd.js`; const file = readFileSync(path); @@ -199,6 +204,10 @@ function buildModule(name, globals) { .switchMap(() => replaceVersionsObservable(name, VERSIONS)); } +/** + * Create an observable of module build status. This method builds + * @param {Object} globals + */ function buildModules(globals) { const core$ = buildModule('core', globals); const auth$ = buildModule('auth', globals); @@ -220,7 +229,8 @@ function buildLibrary(globals) { const modules$ = buildModules(globals); return Observable .forkJoin(modules$) - .switchMap(() => Observable.from(createTestUmd(globals))); + .switchMap(() => Observable.from(createTestUmd(globals))) + .switchMap(() => Observable.from(copyNpmIgnore())); } buildLibrary(GLOBALS).subscribe( From 0e9b945524b41f7f1f92d358256cb5a9614134df Mon Sep 17 00:00:00 2001 From: David East Date: Tue, 1 Aug 2017 05:53:15 -0600 Subject: [PATCH 11/14] fix(auth): Auth typings hack --- src/auth/auth.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/auth/auth.ts b/src/auth/auth.ts index c0e5267bd..46147dba6 100644 --- a/src/auth/auth.ts +++ b/src/auth/auth.ts @@ -42,9 +42,9 @@ export class AngularFireAuth { export function FirebaseAuthStateObservable(app: FirebaseApp): Observable { const authState = Observable.create((observer: Observer) => { app.auth().onAuthStateChanged( - (user?: firebase.User) => observer.next(user!), + (user: firebase.User) => observer.next(user!), (error: firebase.auth.Error) => observer.error(error), - () => observer.complete() + () => { observer.complete(); return undefined; } ); }); return observeOn.call(authState, new ZoneScheduler(Zone.current)); @@ -58,9 +58,9 @@ export function FirebaseAuthStateObservable(app: FirebaseApp): Observable { const idToken = Observable.create((observer: Observer) => { app.auth().onIdTokenChanged( - (user?: firebase.User) => observer.next(user!), + (user: firebase.User) => observer.next(user!), (error: firebase.auth.Error) => observer.error(error), - () => observer.complete() + () => { observer.complete(); return undefined; } ) }); return observeOn.call(idToken, new ZoneScheduler(Zone.current)); From 1c5b9498174c041e835e4085781597afbb0d23c2 Mon Sep 17 00:00:00 2001 From: David East Date: Tue, 1 Aug 2017 05:59:41 -0600 Subject: [PATCH 12/14] fix(test): fix typings test --- tools/run-typings-test.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tools/run-typings-test.js b/tools/run-typings-test.js index 694bd6f6d..ae1f4b432 100644 --- a/tools/run-typings-test.js +++ b/tools/run-typings-test.js @@ -31,14 +31,14 @@ ncp(pathToTestSrcFolder, pathToTestFolder, () => { .replace('{{ANGULARFIRE_VERSION}}', path.resolve(__dirname, '../dist/packages-dist')) .replace('{{FIREBASE_VERSION}}', rootPackage.dependencies.firebase) .replace('{{RXJS_VERSION}}', rootPackage.dependencies.rxjs) - .replace('{{ZONE_VERSION}}', rootPackage.devDependencies['zone.js']) + .replace('{{ZONE_VERSION}}', rootPackage.dependencies['zone.js']) .replace('{{TYPESCRIPT_VERSION}}', rootPackage.devDependencies.typescript) .replace(/\{\{ANGULAR_VERSION\}\}/g, rootPackage.dependencies['@angular/core'])); spawnIt('npm', ['install']) .then(_ => spawnIt(`${pathToTestFolder}/node_modules/.bin/tsc`, ['--version'])) .then(_ => new Promise((res, rej) => { - child_process.exec(`${pathToTestFolder}/node_modules/.bin/tsc --diagnostics -p ${pathToTestFolder}/tsconfig.json`, (err, stdout, stderr) => { + child_process.exec(`${pathToTestFolder}/node_modules/.bin/tsc --diagnostics -p ${pathToTestFolder}/tsconfig-test.json`, (err, stdout, stderr) => { console.log(stdout); if (err) { rej(1); From 8131152a093307f8985873ee4288f7183fed8d45 Mon Sep 17 00:00:00 2001 From: David East Date: Thu, 3 Aug 2017 16:05:25 -0600 Subject: [PATCH 13/14] chore(build): ngc options for flatModuleId/flatModuleOut --- src/auth/index.ts | 3 +-- src/auth/public_api.ts | 2 ++ src/auth/tsconfig-esm.json | 13 ++++++++++++- src/core/index.ts | 2 +- src/core/public_api.ts | 1 + src/core/tsconfig-build.json | 6 ++++-- src/core/tsconfig-esm.json | 13 ++++++++++++- src/database/index.ts | 8 +------- src/database/public_api.ts | 7 +++++++ src/database/tsconfig-esm.json | 13 ++++++++++++- 10 files changed, 53 insertions(+), 15 deletions(-) create mode 100644 src/auth/public_api.ts create mode 100644 src/core/public_api.ts create mode 100644 src/database/public_api.ts diff --git a/src/auth/index.ts b/src/auth/index.ts index f570236a4..4aaf8f92e 100644 --- a/src/auth/index.ts +++ b/src/auth/index.ts @@ -1,2 +1 @@ -export * from './auth'; -export * from './auth.module'; +export * from './public_api'; diff --git a/src/auth/public_api.ts b/src/auth/public_api.ts new file mode 100644 index 000000000..f570236a4 --- /dev/null +++ b/src/auth/public_api.ts @@ -0,0 +1,2 @@ +export * from './auth'; +export * from './auth.module'; diff --git a/src/auth/tsconfig-esm.json b/src/auth/tsconfig-esm.json index 369c314ab..ac4bbeb96 100644 --- a/src/auth/tsconfig-esm.json +++ b/src/auth/tsconfig-esm.json @@ -4,5 +4,16 @@ "target": "es5", "outDir": "../../dist/packages-dist/auth", "declaration": true - } + }, + "files": [ + "public_api.ts", + "../../node_modules/zone.js/dist/zone.js.d.ts" + ], + "angularCompilerOptions": { + "skipTemplateCodegen": true, + "strictMetadataEmit": true, + "enableSummariesForJit": false, + "flatModuleOutFile": "index.js", + "flatModuleId": "angularfire2/auth" + } } diff --git a/src/core/index.ts b/src/core/index.ts index 672f3659c..4a2496079 100644 --- a/src/core/index.ts +++ b/src/core/index.ts @@ -1 +1 @@ -export * from './angularfire2'; \ No newline at end of file +export * from './index.api'; diff --git a/src/core/public_api.ts b/src/core/public_api.ts new file mode 100644 index 000000000..672f3659c --- /dev/null +++ b/src/core/public_api.ts @@ -0,0 +1 @@ +export * from './angularfire2'; \ No newline at end of file diff --git a/src/core/tsconfig-build.json b/src/core/tsconfig-build.json index 16c848a78..c925ea949 100644 --- a/src/core/tsconfig-build.json +++ b/src/core/tsconfig-build.json @@ -17,12 +17,14 @@ "moduleResolution": "node" }, "files": [ - "index.ts", + "public_api.ts", "../../node_modules/zone.js/dist/zone.js.d.ts" ], "angularCompilerOptions": { "skipTemplateCodegen": true, "strictMetadataEmit": true, - "enableSummariesForJit": false + "enableSummariesForJit": true, + "flatModuleOutFile": "index.js", + "flatModuleId": "angularfire2" } } diff --git a/src/core/tsconfig-esm.json b/src/core/tsconfig-esm.json index 202067782..f67abce8a 100644 --- a/src/core/tsconfig-esm.json +++ b/src/core/tsconfig-esm.json @@ -4,5 +4,16 @@ "target": "es5", "outDir": "../../dist/packages-dist", "declaration": true - } + }, + "files": [ + "public_api.ts", + "../../node_modules/zone.js/dist/zone.js.d.ts" + ], + "angularCompilerOptions": { + "skipTemplateCodegen": true, + "strictMetadataEmit": true, + "enableSummariesForJit": false, + "flatModuleOutFile": "index.js", + "flatModuleId": "angularfire2" + } } diff --git a/src/database/index.ts b/src/database/index.ts index c1e95b11e..4aaf8f92e 100644 --- a/src/database/index.ts +++ b/src/database/index.ts @@ -1,7 +1 @@ -export * from './database'; -export * from './firebase_list_factory'; -export * from './firebase_list_observable'; -export * from './firebase_object_factory'; -export * from './firebase_object_observable'; -export * from './query_observable'; -export * from './database.module'; +export * from './public_api'; diff --git a/src/database/public_api.ts b/src/database/public_api.ts new file mode 100644 index 000000000..c1e95b11e --- /dev/null +++ b/src/database/public_api.ts @@ -0,0 +1,7 @@ +export * from './database'; +export * from './firebase_list_factory'; +export * from './firebase_list_observable'; +export * from './firebase_object_factory'; +export * from './firebase_object_observable'; +export * from './query_observable'; +export * from './database.module'; diff --git a/src/database/tsconfig-esm.json b/src/database/tsconfig-esm.json index f9beb9474..2a3460f2f 100644 --- a/src/database/tsconfig-esm.json +++ b/src/database/tsconfig-esm.json @@ -4,5 +4,16 @@ "target": "es5", "outDir": "../../dist/packages-dist/database", "declaration": true - } + }, + "files": [ + "public_api.ts", + "../../node_modules/zone.js/dist/zone.js.d.ts" + ], + "angularCompilerOptions": { + "skipTemplateCodegen": true, + "strictMetadataEmit": true, + "enableSummariesForJit": false, + "flatModuleOutFile": "index.js", + "flatModuleId": "angularfire2/database" + } } From 1502f1ad8f30681840c99c9bb9b49d15a0571089 Mon Sep 17 00:00:00 2001 From: David East Date: Fri, 4 Aug 2017 06:09:25 -0600 Subject: [PATCH 14/14] chore(build): fix zone.js typings error --- .npmignore | 1 + src/core/angularfire2.ts | 1 + src/core/index.ts | 2 +- 3 files changed, 3 insertions(+), 1 deletion(-) diff --git a/.npmignore b/.npmignore index 344a9003a..9d6b0f78e 100644 --- a/.npmignore +++ b/.npmignore @@ -1 +1,2 @@ *.spec.* +bundles/test.umd.js diff --git a/src/core/angularfire2.ts b/src/core/angularfire2.ts index 32ec834a4..6dc5dd69a 100644 --- a/src/core/angularfire2.ts +++ b/src/core/angularfire2.ts @@ -4,6 +4,7 @@ import { Injectable, InjectionToken, OpaqueToken, NgModule } from '@angular/core import { Subscription } from 'rxjs/Subscription'; import { Scheduler } from 'rxjs/Scheduler'; import { queue } from 'rxjs/scheduler/queue'; +import 'zone.js'; export interface FirebaseAppConfig { apiKey?: string; diff --git a/src/core/index.ts b/src/core/index.ts index 4a2496079..4aaf8f92e 100644 --- a/src/core/index.ts +++ b/src/core/index.ts @@ -1 +1 @@ -export * from './index.api'; +export * from './public_api';