diff --git a/.npmignore b/.npmignore index 38f33843..4f4a63e3 100644 --- a/.npmignore +++ b/.npmignore @@ -64,3 +64,6 @@ yarn.lock tests lib/.watchmanconfig buddybuild_postclone.sh +bin/test.js +.github +example diff --git a/README.md b/README.md index 24751e1c..2e4d5b03 100644 --- a/README.md +++ b/README.md @@ -3,13 +3,16 @@ [![npm version](https://img.shields.io/npm/v/react-native-firebase.svg?style=flat-square)](https://www.npmjs.com/package/react-native-firebase) [![NPM downloads](https://img.shields.io/npm/dm/react-native-firebase.svg?style=flat-square)](https://www.npmjs.com/package/react-native-firebase) [![Package Quality](http://npm.packagequality.com/shield/react-native-firebase.svg?style=flat-square)](http://packagequality.com/#?package=react-native-firebase) -[![License](https://img.shields.io/npm/l/react-native-firebase.svg?style=flat-square)](/LICENSE) [![Chat](https://img.shields.io/badge/chat-on%20discord-7289da.svg?style=flat-square)](https://discord.gg/t6bdqMs) [![Donate](https://img.shields.io/badge/Donate-Patreon-green.svg?style=flat-square)](https://www.patreon.com/invertase) **RNFirebase** makes using [Firebase](http://firebase.com) with React Native simple. + +
> [Current Docs](http://invertase.link/docs) | [@next Docs](http://invertase.link/v3) | [iOS Install Guide](http://invertase.link/ios) | [Android Install Guide](http://invertase.link/android) | [FAQs](http://invertase.io/react-native-firebase/#/faqs) | [Feature Requests](http://invertase.link/requests) diff --git a/android/src/main/java/io/invertase/firebase/analytics/RNFirebaseAnalyticsPackage.java b/android/src/main/java/io/invertase/firebase/analytics/RNFirebaseAnalyticsPackage.java index c1526610..15fe7c9e 100644 --- a/android/src/main/java/io/invertase/firebase/analytics/RNFirebaseAnalyticsPackage.java +++ b/android/src/main/java/io/invertase/firebase/analytics/RNFirebaseAnalyticsPackage.java @@ -1,5 +1,7 @@ package io.invertase.firebase.analytics; +import android.support.annotation.RequiresPermission; + import com.facebook.react.ReactPackage; import com.facebook.react.bridge.JavaScriptModule; import com.facebook.react.bridge.NativeModule; @@ -13,6 +15,9 @@ import java.util.List; @SuppressWarnings("unused") public class RNFirebaseAnalyticsPackage implements ReactPackage { + @RequiresPermission( + allOf = {"android.permission.INTERNET", "android.permission.ACCESS_NETWORK_STATE", "android.permission.WAKE_LOCK"} + ) public RNFirebaseAnalyticsPackage() { } diff --git a/android/src/main/java/io/invertase/firebase/auth/RNFirebaseAuth.java b/android/src/main/java/io/invertase/firebase/auth/RNFirebaseAuth.java index 8c0a39ee..a6c3d31c 100644 --- a/android/src/main/java/io/invertase/firebase/auth/RNFirebaseAuth.java +++ b/android/src/main/java/io/invertase/firebase/auth/RNFirebaseAuth.java @@ -1,5 +1,7 @@ package io.invertase.firebase.auth; +import android.app.Activity; +import android.os.Parcel; import android.util.Log; import android.net.Uri; import android.support.annotation.NonNull; @@ -721,6 +723,101 @@ class RNFirebaseAuth extends ReactContextBaseJavaModule { }); } + /** + * verifyPhoneNumber + * + * @param appName + * @param phoneNumber + * @param timeout + */ + @ReactMethod + public void verifyPhoneNumber(final String appName, final String phoneNumber, final String requestKey, final int timeout) { + FirebaseApp firebaseApp = FirebaseApp.getInstance(appName); + final FirebaseAuth firebaseAuth = FirebaseAuth.getInstance(firebaseApp); + final Activity activity = mReactContext.getCurrentActivity(); + + Log.d(TAG, "verifyPhoneNumber:" + phoneNumber); + + PhoneAuthProvider.OnVerificationStateChangedCallbacks callbacks = new PhoneAuthProvider.OnVerificationStateChangedCallbacks() { + + @Override + public void onVerificationCompleted(final PhoneAuthCredential phoneAuthCredential) { + Log.d(TAG, "verifyPhoneNumber:verification:onVerificationCompleted"); + WritableMap state = Arguments.createMap(); + + Parcel parcel = Parcel.obtain(); + phoneAuthCredential.writeToParcel(parcel, 0); + + // verificationId + parcel.setDataPosition(16); + String verificationId = parcel.readString(); + + // sms Code + parcel.setDataPosition(parcel.dataPosition() + 8); + String code = parcel.readString(); + + state.putString("code", code); + state.putString("verificationId", verificationId); + parcel.recycle(); + sendPhoneStateEvent(appName, requestKey, "onVerificationComplete", state); + } + + @Override + public void onVerificationFailed(FirebaseException e) { + // This callback is invoked in an invalid request for verification is made, + // e.g. phone number format is incorrect, or the SMS quota for the project + // has been exceeded + Log.d(TAG, "verifyPhoneNumber:verification:onVerificationFailed"); + WritableMap state = Arguments.createMap(); + state.putMap("error", getJSError(e)); + sendPhoneStateEvent(appName, requestKey, "onVerificationFailed", state); + } + + @Override + public void onCodeSent(String verificationId, PhoneAuthProvider.ForceResendingToken forceResendingToken) { + Log.d(TAG, "verifyPhoneNumber:verification:onCodeSent"); + WritableMap state = Arguments.createMap(); + state.putString("verificationId", verificationId); + + // todo forceResendingToken - it's actually just an empty class ... no actual token >.> + // Parcel parcel = Parcel.obtain(); + // forceResendingToken.writeToParcel(parcel, 0); + // + // // verificationId + // parcel.setDataPosition(0); + // int int1 = parcel.readInt(); + // String token = parcel.readString(); + // + // state.putString("refreshToken", token); + // parcel.recycle(); + + state.putString("verificationId", verificationId); + sendPhoneStateEvent(appName, requestKey, "onCodeSent", state); + } + + @Override + public void onCodeAutoRetrievalTimeOut(String verificationId) { + super.onCodeAutoRetrievalTimeOut(verificationId); + Log.d(TAG, "verifyPhoneNumber:verification:onCodeAutoRetrievalTimeOut"); + WritableMap state = Arguments.createMap(); + state.putString("verificationId", verificationId); + sendPhoneStateEvent(appName, requestKey, "onCodeAutoRetrievalTimeout", state); + } + }; + + if (activity != null) { + PhoneAuthProvider.getInstance(firebaseAuth) + .verifyPhoneNumber( + phoneNumber, + timeout, + TimeUnit.SECONDS, + activity, + callbacks + //, PhoneAuthProvider.ForceResendingToken.zzboe() // TODO FORCE RESENDING + ); + } + } + /** * confirmPasswordReset * @@ -1270,4 +1367,19 @@ class RNFirebaseAuth extends ReactContextBaseJavaModule { return userMap; } + + /** + * @param appName + * @param requestKey + * @param type + * @param state + */ + private void sendPhoneStateEvent(String appName, String requestKey, String type, WritableMap state) { + WritableMap eventMap = Arguments.createMap(); + eventMap.putString("appName", appName); + eventMap.putString("requestKey", requestKey); + eventMap.putString("type", type); + eventMap.putMap("state", state); + Utils.sendEvent(mReactContext, "phone_auth_state_changed", eventMap); + } } diff --git a/android/src/main/java/io/invertase/firebase/messaging/RNFirebaseMessaging.java b/android/src/main/java/io/invertase/firebase/messaging/RNFirebaseMessaging.java index 261a4dee..87fa616e 100644 --- a/android/src/main/java/io/invertase/firebase/messaging/RNFirebaseMessaging.java +++ b/android/src/main/java/io/invertase/firebase/messaging/RNFirebaseMessaging.java @@ -27,6 +27,7 @@ import com.google.firebase.messaging.RemoteMessage.Notification; import io.invertase.firebase.Utils; +import java.io.IOException; import java.util.ArrayList; import java.util.Map; import java.util.Set; @@ -72,6 +73,18 @@ public class RNFirebaseMessaging extends ReactContextBaseJavaModule implements L promise.resolve(FirebaseInstanceId.getInstance().getToken()); } + @ReactMethod + public void deleteInstanceId(Promise promise){ + try { + Log.d(TAG, "Deleting instance id"); + FirebaseInstanceId.getInstance().deleteInstanceId(); + promise.resolve(null); + } catch (IOException e) { + Log.e(TAG, e.getMessage()); + promise.reject(null, e.getMessage()); + } + } + @ReactMethod public void createLocalNotification(ReadableMap details) { Bundle bundle = Arguments.toBundle(details); diff --git a/android/src/main/java/io/invertase/firebase/storage/RNFirebaseStoragePackage.java b/android/src/main/java/io/invertase/firebase/storage/RNFirebaseStoragePackage.java index b2668c6f..114a1218 100644 --- a/android/src/main/java/io/invertase/firebase/storage/RNFirebaseStoragePackage.java +++ b/android/src/main/java/io/invertase/firebase/storage/RNFirebaseStoragePackage.java @@ -1,5 +1,7 @@ package io.invertase.firebase.storage; +import android.support.annotation.RequiresPermission; + import com.facebook.react.ReactPackage; import com.facebook.react.bridge.JavaScriptModule; import com.facebook.react.bridge.NativeModule; @@ -13,6 +15,9 @@ import java.util.List; @SuppressWarnings("unused") public class RNFirebaseStoragePackage implements ReactPackage { + @RequiresPermission( + allOf = {"android.permission.INTERNET", "android.permission.ACCESS_NETWORK_STATE", "android.permission.READ_EXTERNAL_STORAGE", "android.permission.WRITE_EXTERNAL_STORAGE"} + ) public RNFirebaseStoragePackage() { } @@ -35,7 +40,7 @@ public class RNFirebaseStoragePackage implements ReactPackage { * listed here. Also listing a native module here doesn't imply that the JS implementation of it * will be automatically included in the JS bundle. */ - // TODO: Removed in 0.47.0. Here for backwards compatability + // TODO: Removed in 0.47.0. Here for backwards compatibility public List> createJSModules() { return Collections.emptyList(); } diff --git a/bin/test.js b/bin/test.js new file mode 100644 index 00000000..a0152020 --- /dev/null +++ b/bin/test.js @@ -0,0 +1,52 @@ +const shell = require('shelljs'); + +const WATCH_SRC = require('path').resolve('./lib'); +const WATCH_OUT = require('path').resolve('./tests/firebase'); + +/* + "tests-watch-init": "wml add $(node --eval \"console.log(require('path').resolve('./lib'));\") $(node --eval \"console.log(require('path').resolve('./tests/firebase'));\")", + "tests-watch-start": "watchman watch $(node --eval \"console.log(require('path').resolve('./lib'));\") && wml start", + "tests-watch-stop": "watchman watch-del $(node --eval \"console.log(require('path').resolve('./lib'));\") && wml stop" + */ + +if (process.argv.includes('watch')) { + if (!shell.which('wml')) { + shell.echo(''); + shell.echo('---------------------------------------------------'); + shell.echo(' Missing required npm global from library wix/wml. '); + shell.echo('---------------------------------------------------'); + shell.echo(''); + shell.exit(1); + } + + if (!shell.which('watchman')) { + shell.echo(''); + shell.echo('---------------------------------------------------'); + shell.echo(' Missing required executable: watchman '); + shell.echo('---------------------------------------------------'); + shell.echo(''); + shell.exit(1); + } + + if (process.argv.includes('init')) { + console.log(`wml add ${WATCH_SRC} ${WATCH_OUT}`); + if (shell.exec(`wml add ${WATCH_SRC} ${WATCH_OUT}`).code !== 0) { + shell.echo('Error setting up watched location via WML.'); + shell.exit(1); + } + } + + if (process.argv.includes('start')) { + console.log(`watchman watch ${WATCH_SRC} && wml start`); + const watcher = shell.exec(`watchman watch ${WATCH_SRC} && wml start`, { async: true }); + watcher.stdout.on('data', console.log); + watcher.stderr.on('data', console.error); + } + + if (process.argv.includes('stop')) { + console.log(`watchman watch-del ${WATCH_SRC} && wml stop && wml rm all`); + const watcher = shell.exec(`watchman watch-del ${WATCH_SRC} && wml stop && wml rm all`, { async: true }); + watcher.stdout.on('data', console.log); + watcher.stderr.on('data', console.error); + } +} diff --git a/docs/modules/cloud-messaging.md b/docs/modules/cloud-messaging.md index fd5f489f..5ff4fa97 100644 --- a/docs/modules/cloud-messaging.md +++ b/docs/modules/cloud-messaging.md @@ -53,6 +53,20 @@ firebase.messaging().getToken() }); ``` +### deleteInstanceId(): `Promise` + +Reset Instance ID and revokes all tokens. + +```javascript +firebase.messaging().deleteInstanceId() + .then(() => { + console.log('Deleted instance id successfully'); + }) + .catch((error: any) => { + console.log(`Cannot delete instance id: ${error.message}`); + }); +``` + ### onTokenRefresh(listener: `Function`) On the event a devices FCM token is refreshed by Google, the new token is returned in a callback listener. diff --git a/index.d.ts b/index.d.ts index e2f0c29f..9f50442f 100644 --- a/index.d.ts +++ b/index.d.ts @@ -8,7 +8,7 @@ declare module "react-native-firebase" { export default class FireBase { constructor(config?: RNFirebase.configurationOptions) - log: any + log: any; analytics(): RNFirebase.Analytics; @@ -22,7 +22,7 @@ declare module "react-native-firebase" { ServerValue: { TIMESTAMP: number } - } + }; /**RNFirebase mimics the Web Firebase SDK Storage, * whilst providing some iOS and Android specific functionality. @@ -608,6 +608,10 @@ declare module "react-native-firebase" { * This token can be used in the Firebase console to send messages to directly. */ getToken(forceRefresh?: Boolean): Promise + /** + * Reset Instance ID and revokes all tokens. + */ + deleteInstanceId(): Promise /** * On the event a devices FCM token is refreshed by Google, * the new token is returned in a callback listener. diff --git a/ios/RNFirebase/RNFirebase.m b/ios/RNFirebase/RNFirebase.m index 1bbe5f89..d6eff6ae 100644 --- a/ios/RNFirebase/RNFirebase.m +++ b/ios/RNFirebase/RNFirebase.m @@ -79,7 +79,7 @@ RCT_EXPORT_METHOD(deleteApp: /** * React native constant exports - exports native firebase apps mainly - * @return + * @return NSDictionary */ - (NSDictionary *)constantsToExport { NSMutableDictionary *constants = [NSMutableDictionary new]; diff --git a/ios/RNFirebase/RNFirebaseEvents.h b/ios/RNFirebase/RNFirebaseEvents.h index ffb3d369..7cccf762 100644 --- a/ios/RNFirebase/RNFirebaseEvents.h +++ b/ios/RNFirebase/RNFirebaseEvents.h @@ -5,6 +5,7 @@ static NSString *const AUTH_CHANGED_EVENT = @"auth_state_changed"; static NSString *const AUTH_ID_TOKEN_CHANGED_EVENT = @"auth_id_token_changed"; +static NSString *const PHONE_AUTH_STATE_CHANGED_EVENT = @"phone_auth_state_changed"; // Database static NSString *const DATABASE_SYNC_EVENT = @"database_sync_event"; diff --git a/ios/RNFirebase/crash/RNFirebaseCrash.m b/ios/RNFirebase/crash/RNFirebaseCrash.m index c34b2eab..1ff364f0 100644 --- a/ios/RNFirebase/crash/RNFirebaseCrash.m +++ b/ios/RNFirebase/crash/RNFirebaseCrash.m @@ -7,15 +7,15 @@ RCT_EXPORT_MODULE(); RCT_EXPORT_METHOD(log:(NSString *)message) { - FIRCrashLog(message); + FIRCrashLog(@"%@", message); } RCT_EXPORT_METHOD(logcat:(nonnull NSNumber *) level tag:(NSString *) tag message:(NSString *) message) { - FIRCrashLog(message); + FIRCrashLog(@"%@", message); } RCT_EXPORT_METHOD(report:(NSString *) message) { - FIRCrashLog(message); + FIRCrashLog(@"%@", message); assert(NO); } diff --git a/ios/RNFirebase/messaging/RNFirebaseMessaging.m b/ios/RNFirebase/messaging/RNFirebaseMessaging.m index 7415df99..b262d724 100644 --- a/ios/RNFirebase/messaging/RNFirebaseMessaging.m +++ b/ios/RNFirebase/messaging/RNFirebaseMessaging.m @@ -4,6 +4,7 @@ #if __has_include() #import "RNFirebaseEvents.h" #import +#import #import #import @@ -257,6 +258,16 @@ RCT_EXPORT_METHOD(getToken:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseR resolve([FIRMessaging messaging].FCMToken); } +RCT_EXPORT_METHOD(deleteInstanceId:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject) { + [[FIRInstanceID instanceID] deleteIDWithHandler:^(NSError * _Nullable error) { + if (!error) { + resolve(nil); + } else { + reject(@"instance_id_error", @"Failed to delete instance id", error); + } + }]; +} + RCT_EXPORT_METHOD(requestPermissions:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject) { if (RCTRunningInAppExtension()) { return; diff --git a/ios/RNFirebase/storage/RNFirebaseStorage.m b/ios/RNFirebase/storage/RNFirebaseStorage.m index 42f6a626..8bd00f60 100644 --- a/ios/RNFirebase/storage/RNFirebaseStorage.m +++ b/ios/RNFirebase/storage/RNFirebaseStorage.m @@ -221,8 +221,22 @@ RCT_EXPORT_METHOD(putFile:(NSString *) appName options.networkAccessAllowed = true; [[PHImageManager defaultManager] requestImageDataForAsset:asset options:options resultHandler:^(NSData *imageData, NSString *dataUTI, UIImageOrientation orientation, NSDictionary *info) { if (info[PHImageErrorKey] == nil) { - firmetadata.contentType = [self utiToMimeType:dataUTI]; - [self uploadData:appName data:imageData firmetadata:firmetadata path:path resolver:resolve rejecter:reject]; + if (UTTypeConformsTo((__bridge CFStringRef)dataUTI, kUTTypeJPEG)) { + firmetadata.contentType = [self utiToMimeType:dataUTI]; + [self uploadData:appName data:imageData firmetadata:firmetadata path:path resolver:resolve rejecter:reject]; + } else { + // if the image UTI is not JPEG then convert to JPEG, e.g. HEI + CGImageSourceRef source = CGImageSourceCreateWithData((__bridge CFDataRef)imageData, NULL); + NSDictionary *imageInfo = (__bridge NSDictionary*)CGImageSourceCopyPropertiesAtIndex(source, 0, NULL); + NSDictionary *imageMetadata = [imageInfo copy]; + NSMutableData *imageDataJPEG = [NSMutableData data]; + CGImageDestinationRef destination = CGImageDestinationCreateWithData((__bridge CFMutableDataRef)imageDataJPEG, kUTTypeJPEG, 1, NULL); + CGImageDestinationAddImageFromSource(destination, source, 0, (__bridge CFDictionaryRef)imageMetadata); + CGImageDestinationFinalize(destination); + // Manually set mimetype to JPEG + firmetadata.contentType = @"image/jpeg"; + [self uploadData:appName data:[NSData dataWithData:imageDataJPEG] firmetadata:firmetadata path:path resolver:resolve rejecter:reject]; + } } else { reject(@"storage/request-image-data-failed", @"Could not obtain image data for the specified file.", nil); } diff --git a/lib/modules/auth/PhoneAuthListener.js b/lib/modules/auth/PhoneAuthListener.js index aa6037cf..942780be 100644 --- a/lib/modules/auth/PhoneAuthListener.js +++ b/lib/modules/auth/PhoneAuthListener.js @@ -1,6 +1,6 @@ // @flow import INTERNALS from './../../internals'; -import { generatePushID, isFunction, isAndroid, isIOS, isString } from './../../utils'; +import { generatePushID, isFunction, isAndroid, isIOS, isString, nativeToJSError } from './../../utils'; type PhoneAuthSnapshot = { state: 'sent' | 'timeout' | 'verified' | 'error', @@ -17,15 +17,16 @@ type PhoneAuthError = { }; export default class PhoneAuthListener { + _auth: Object; - _reject: Function | null; - _resolve: Function | null; - _promise: Promise | null; - _credential: Object | null; _timeout: number; - _phoneAuthRequestKey: string; _publicEvents: Object; _internalEvents: Object; + _reject: Function | null; + _resolve: Function | null; + _credential: Object | null; + _promise: Promise<*> | null; + _phoneAuthRequestKey: string; /** * @@ -33,14 +34,14 @@ export default class PhoneAuthListener { * @param phoneNumber * @param timeout */ - constructor(auth: Object, phoneNumber: string, timeout): PhoneAuthListener { + constructor(auth: Object, phoneNumber: string, timeout?: number) { this._auth = auth; this._reject = null; this._resolve = null; this._promise = null; this._credential = null; - this._timeout = timeout || 20000; // 20 secs + this._timeout = timeout || 20; // 20 secs this._phoneAuthRequestKey = generatePushID(); // internal events @@ -65,11 +66,20 @@ export default class PhoneAuthListener { this._subscribeToEvents(); // start verification flow natively - this._auth._native.verifyPhoneNumber( - phoneNumber, - this._phoneAuthRequestKey, - this._timeout, - ); + if (isAndroid) { + this._auth._native.verifyPhoneNumber( + phoneNumber, + this._phoneAuthRequestKey, + this._timeout, + ); + } + + if (isIOS) { + this._auth._native.verifyPhoneNumber( + phoneNumber, + this._phoneAuthRequestKey, + ); + } } /** @@ -110,8 +120,6 @@ export default class PhoneAuthListener { */ _emitToErrorCb(snapshot) { const error = snapshot.error; - error.verificationId = snapshot.verificationId; - if (this._reject) this._reject(error); this._auth.emit(this._publicEvents.error, error); } @@ -174,12 +182,12 @@ export default class PhoneAuthListener { /** * Internal code sent event handler - * @param verificationId * @private + * @param credential */ - _codeSentHandler(verificationId) { + _codeSentHandler(credential) { const snapshot: PhoneAuthSnapshot = { - verificationId, + verificationId: credential.verificationId, code: null, error: null, state: 'sent', @@ -199,12 +207,12 @@ export default class PhoneAuthListener { /** * Internal code auto retrieve timeout event handler - * @param verificationId * @private + * @param credential */ - _codeAutoRetrievalTimeoutHandler(verificationId) { + _codeAutoRetrievalTimeoutHandler(credential) { const snapshot: PhoneAuthSnapshot = { - verificationId, + verificationId: credential.verificationId, code: null, error: null, state: 'timeout', @@ -234,17 +242,19 @@ export default class PhoneAuthListener { /** * Internal verification failed event handler - * @param errObject + * @param state * @private */ - _verificationFailedHandler(errObject) { + _verificationFailedHandler(state) { const snapshot: PhoneAuthSnapshot = { - verificationId: errObject.verificationId, + verificationId: state.verificationId, code: null, error: null, state: 'error', }; + const { code, message, nativeErrorMessage } = state.error; + snapshot.error = nativeToJSError(code, message, { nativeErrorMessage }); this._emitToObservers(snapshot); this._emitToErrorCb(snapshot); @@ -256,7 +266,7 @@ export default class PhoneAuthListener { -- PUBLIC API --------------*/ - on(event: string, observer: () => PhoneAuthSnapshot, errorCb?: () => PhoneAuthError, successCb?: () => PhoneAuthSnapshot) { + on(event: string, observer: () => PhoneAuthSnapshot, errorCb?: () => PhoneAuthError, successCb?: () => PhoneAuthSnapshot): this { if (!isString(event)) { throw new Error(INTERNALS.STRINGS.ERROR_MISSING_ARG_NAMED('event', 'string', 'on')); } @@ -286,17 +296,19 @@ export default class PhoneAuthListener { * Promise .then proxy * @param fn */ - then(fn) { + then(fn: () => PhoneAuthSnapshot) { this._promiseDeferred(); - return this._promise.then.bind(this._promise)(fn); + if (this._promise) return this._promise.then.bind(this._promise)(fn); + return undefined; // will never get here - just to keep flow happy } /** * Promise .catch proxy * @param fn */ - catch(fn) { + catch(fn: () => Error) { this._promiseDeferred(); - return this._promise.catch.bind(this._promise)(fn); + if (this._promise) return this._promise.catch.bind(this._promise)(fn); + return undefined; // will never get here - just to keep flow happy } } diff --git a/lib/modules/auth/index.js b/lib/modules/auth/index.js index 0fd1007a..675d0f07 100644 --- a/lib/modules/auth/index.js +++ b/lib/modules/auth/index.js @@ -19,6 +19,8 @@ export default class Auth extends ModuleBase { static _NATIVE_MODULE = 'RNFirebaseAuth'; _user: User | null; + _native: Object; + _getAppEventName: Function; _authResult: AuthResultType | null; authenticated: boolean; @@ -35,6 +37,13 @@ export default class Auth extends ModuleBase { this._onAuthStateChanged.bind(this), ); + this.addListener( + // sub to internal native event - this fans out to + // public events based on event.type + this._getAppEventName('phone_auth_state_changed'), + this._onPhoneAuthStateChanged.bind(this), + ); + this.addListener( // sub to internal native event - this fans out to // public event name: onIdTokenChanged @@ -46,6 +55,16 @@ export default class Auth extends ModuleBase { this._native.addIdTokenListener(); } + /** + * Route a phone state change event to the correct listeners + * @param event + * @private + */ + _onPhoneAuthStateChanged(event: Object) { + const eventKey = `phone:auth:${event.requestKey}:${event.type}`; + this.emit(eventKey, event.state); + } + /** * Internal auth changed listener * @param auth @@ -100,7 +119,7 @@ export default class Auth extends ModuleBase { * Intercept all user actions and send their results to * auth state change before resolving * @param promise - * @returns {Promise.|*} + * @returns {Promise.<*>} * @private */ _interceptUserValue(promise) { @@ -234,7 +253,7 @@ export default class Auth extends ModuleBase { * @param newPassword * @return {Promise.} */ - confirmPasswordReset(code: string, newPassword: string): Promise { + confirmPasswordReset(code: string, newPassword: string): Promise { return this._native.confirmPasswordReset(code, newPassword); } @@ -245,7 +264,7 @@ export default class Auth extends ModuleBase { * @param code * @return {Promise.} */ - applyActionCode(code: string): Promise { + applyActionCode(code: string): Promise { return this._native.applyActionCode(code); } @@ -254,9 +273,9 @@ export default class Auth extends ModuleBase { * * @link https://firebase.google.com/docs/reference/js/firebase.auth.Auth#checkActionCode * @param code - * @return {Promise.|Promise} + * @return {Promise.|Promise} */ - checkActionCode(code: string): Promise { + checkActionCode(code: string): Promise { return this._native.checkActionCode(code); } diff --git a/lib/modules/messaging/index.js b/lib/modules/messaging/index.js index 64307d9e..b085428e 100644 --- a/lib/modules/messaging/index.js +++ b/lib/modules/messaging/index.js @@ -1,4 +1,4 @@ -import { Platform } from 'react-native'; +import { Platform, NativeModules } from 'react-native'; import ModuleBase from './../../utils/ModuleBase'; import RemoteMessage from './RemoteMessage'; @@ -25,6 +25,8 @@ const WILL_PRESENT_RESULT = { None: 'UNNotificationPresentationOptionNone', }; +const FirebaseMessaging = NativeModules.FirebaseMessaging; + /** * IOS only finish function * @param data @@ -109,6 +111,14 @@ export default class Messaging extends ModuleBase { return this._native.getToken(); } + /** + * Reset Instance ID and revokes all tokens. + * @returns {*|Promise.<*>} + */ + deleteInstanceId() { + return this._native.deleteInstanceId(); + } + /** * Create and display a local notification * @param notification diff --git a/lib/modules/perf/index.js b/lib/modules/perf/index.js index 48f8c619..3d25ecfb 100644 --- a/lib/modules/perf/index.js +++ b/lib/modules/perf/index.js @@ -6,6 +6,8 @@ export default class PerformanceMonitoring extends ModuleBase { static _NAMESPACE = 'perf'; static _NATIVE_MODULE = 'RNFirebasePerformance'; + _native: Object; + constructor(firebaseApp: Object, options: Object = {}) { super(firebaseApp, options); } @@ -26,8 +28,4 @@ export default class PerformanceMonitoring extends ModuleBase { newTrace(trace: string): void { return new Trace(this, trace); } - - get namespace(): string { - return 'firebase:perf'; - } } diff --git a/lib/utils/ModuleBase.js b/lib/utils/ModuleBase.js index e8c63ef4..628ea417 100644 --- a/lib/utils/ModuleBase.js +++ b/lib/utils/ModuleBase.js @@ -2,10 +2,12 @@ * @flow */ import { NativeModules } from 'react-native'; + import Log from '../utils/log'; -import { nativeWithApp } from './../utils'; import INTERNALS from './../internals'; import FirebaseCore from './../firebase'; +import FirebaseApp from '../firebase-app'; +import { nativeWithApp } from './../utils'; const logs = {}; @@ -24,6 +26,7 @@ const NATIVE_MODULE_EVENTS = { ], Auth: [ 'auth_state_changed', + 'phone_auth_state_changed', ], Database: [ 'database_transaction_event', @@ -42,14 +45,23 @@ const DEFAULTS = { }; export default class ModuleBase { + _native: Object; + _module: string; + _options: Object; + _appName: string; + _namespace: string; + _firebaseApp: Object; + _eventEmitter: Object; + static _NAMESPACE: string; + static _NATIVE_MODULE: string; + /** * * @param firebaseApp * @param options - * @param moduleName * @param withEventEmitter */ - constructor(firebaseApp, options, withEventEmitter = false) { + constructor(firebaseApp: Object, options: Object, withEventEmitter: boolean = false) { this._module = this.constructor._NATIVE_MODULE.replace('RNFirebase', ''); this._firebaseApp = firebaseApp; this._appName = firebaseApp._name; @@ -113,7 +125,7 @@ export default class ModuleBase { * Returns the FirebaseApp instance for current module * @return {*} */ - get app() { + get app(): FirebaseApp { return this._firebaseApp; } @@ -128,27 +140,27 @@ export default class ModuleBase { * Proxy functions to shared event emitter instance * https://github.com/facebook/react-native/blob/master/Libraries/EventEmitter/EventEmitter.js */ - get sharedEventEmitter() { + get sharedEventEmitter(): Object { return INTERNALS.SharedEventEmitter; } - get addListener() { + get addListener(): Function { return INTERNALS.SharedEventEmitter.addListener.bind(INTERNALS.SharedEventEmitter); } - get once() { + get once(): Function { return INTERNALS.SharedEventEmitter.once.bind(INTERNALS.SharedEventEmitter); } - get on() { + get on(): Function { return INTERNALS.SharedEventEmitter.addListener.bind(INTERNALS.SharedEventEmitter); } - get emit() { + get emit(): Function { return INTERNALS.SharedEventEmitter.emit.bind(INTERNALS.SharedEventEmitter); } - get listeners() { + get listeners(): Function { return INTERNALS.SharedEventEmitter.listeners.bind(INTERNALS.SharedEventEmitter); } @@ -157,11 +169,11 @@ export default class ModuleBase { return subscriptions && subscriptions.length; } - get removeListener() { + get removeListener(): Function { return INTERNALS.SharedEventEmitter.removeListener.bind(INTERNALS.SharedEventEmitter); } - get removeAllListeners() { + get removeAllListeners(): Function { return INTERNALS.SharedEventEmitter.removeAllListeners.bind(INTERNALS.SharedEventEmitter); } } diff --git a/lib/utils/index.js b/lib/utils/index.js index c347dd33..891eb804 100644 --- a/lib/utils/index.js +++ b/lib/utils/index.js @@ -7,7 +7,8 @@ import { Platform } from 'react-native'; const PUSH_CHARS = '-0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz'; const AUTO_ID_CHARS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'; const hasOwnProperty = Object.hasOwnProperty; -const DEFAULT_CHUNK_SIZE = 50; + +// const DEFAULT_CHUNK_SIZE = 50; // Source: https://cloud.google.com/bigquery/docs/reference/standard-sql/lexical const REGEXP_FIELD_NAME = new RegExp( @@ -92,7 +93,7 @@ export function isFunction(item?: any): boolean { * @param value * @return {boolean} */ -export function isString(value): Boolean { +export function isString(value: any): boolean { return typeof value === 'string'; } @@ -148,63 +149,63 @@ export function noop(): void { } -/** - * Delays chunks based on sizes per event loop. - * @param collection - * @param chunkSize - * @param operation - * @param callback - * @private - */ -function _delayChunk(collection: Array<*>, - chunkSize: number, - operation: Function, - callback: Function): void { - const length = collection.length; - const iterations = Math.ceil(length / chunkSize); - - // noinspection ES6ConvertVarToLetConst - let thisIteration = 0; - - setImmediate(function next() { - const start = thisIteration * chunkSize; - const _end = start + chunkSize; - const end = _end >= length ? length : _end; - const result = operation(collection.slice(start, end), start, end); - - if (thisIteration++ > iterations) { - callback(null, result); - } else { - setImmediate(next); - } - }); -} - -/** - * Async each with optional chunk size limit - * @param array - * @param chunkSize - * @param iterator - * @param cb - */ -export function each(array: Array<*>, - chunkSize: number | Function, - iterator: Function, - cb?: Function): void { - if (typeof chunkSize === 'function') { - cb = iterator; - iterator = chunkSize; - chunkSize = DEFAULT_CHUNK_SIZE; - } - - if (cb) { - _delayChunk(array, chunkSize, (slice, start) => { - for (let ii = 0, jj = slice.length; ii < jj; ii += 1) { - iterator(slice[ii], start + ii); - } - }, cb); - } -} +// /** +// * Delays chunks based on sizes per event loop. +// * @param collection +// * @param chunkSize +// * @param operation +// * @param callback +// * @private +// */ +// function _delayChunk(collection: Array<*>, +// chunkSize: number, +// operation: Function, +// callback: Function): void { +// const length = collection.length; +// const iterations = Math.ceil(length / chunkSize); +// +// // noinspection ES6ConvertVarToLetConst +// let thisIteration = 0; +// +// setImmediate(function next() { +// const start = thisIteration * chunkSize; +// const _end = start + chunkSize; +// const end = _end >= length ? length : _end; +// const result = operation(collection.slice(start, end), start, end); +// +// if (thisIteration++ > iterations) { +// callback(null, result); +// } else { +// setImmediate(next); +// } +// }); +// } +// +// /** +// * Async each with optional chunk size limit +// * @param array +// * @param chunkSize +// * @param iterator +// * @param cb +// */ +// export function each(array: Array<*>, +// chunkSize: number | Function, +// iterator: Function, +// cb?: Function): void { +// if (typeof chunkSize === 'function') { +// cb = iterator; +// iterator = chunkSize; +// chunkSize = DEFAULT_CHUNK_SIZE; +// } +// +// if (cb) { +// _delayChunk(array, chunkSize, (slice, start) => { +// for (let ii = 0, jj = slice.length; ii < jj; ii += 1) { +// iterator(slice[ii], start + ii); +// } +// }, cb); +// } +// } /** * Returns a string typeof that's valid for Firebase usage @@ -217,41 +218,41 @@ export function typeOf(value: any): string { return typeof value; } -/** - * Async map with optional chunk size limit - * @param array - * @param chunkSize - * @param iterator - * @param cb - * @returns {*} - */ -export function map(array: Array<*>, - chunkSize: number | Function, - iterator: Function, - cb?: Function): void { - if (typeof chunkSize === 'function') { - cb = iterator; - iterator = chunkSize; - chunkSize = DEFAULT_CHUNK_SIZE; - } +// /** +// * Async map with optional chunk size limit +// * @param array +// * @param chunkSize +// * @param iterator +// * @param cb +// * @returns {*} +// */ +// export function map(array: Array<*>, +// chunkSize: number | Function, +// iterator: Function, +// cb?: Function): void { +// if (typeof chunkSize === 'function') { +// cb = iterator; +// iterator = chunkSize; +// chunkSize = DEFAULT_CHUNK_SIZE; +// } +// +// const result = []; +// _delayChunk(array, chunkSize, (slice, start) => { +// for (let ii = 0, jj = slice.length; ii < jj; ii += 1) { +// result.push(iterator(slice[ii], start + ii, array)); +// } +// return result; +// }, () => cb && cb(result)); +// } - const result = []; - _delayChunk(array, chunkSize, (slice, start) => { - for (let ii = 0, jj = slice.length; ii < jj; ii += 1) { - result.push(iterator(slice[ii], start + ii, array)); - } - return result; - }, () => cb && cb(result)); -} - -/** - * - * @param string - * @return {string} - */ -export function capitalizeFirstLetter(string: String) { - return `${string.charAt(0).toUpperCase()}${string.slice(1)}`; -} +// /** +// * +// * @param string +// * @return {string} +// */ +// export function capitalizeFirstLetter(string: String) { +// return `${string.charAt(0).toUpperCase()}${string.slice(1)}`; +// } // timestamp of last push, used to prevent local collisions if you push twice in one ms. let lastPushTime = 0; @@ -315,7 +316,7 @@ export function generatePushID(serverTimeOffset?: number = 0): string { * @returns {Error} */ export function nativeToJSError(code: string, message: string, additionalProps?: Object = {}) { - const error = new Error(message); + const error: Object = new Error(message); error.code = code; Object.assign(error, additionalProps); // exclude this function from the stack @@ -329,7 +330,7 @@ export function nativeToJSError(code: string, message: string, additionalProps?: * @param appName * @param NativeModule */ -export function nativeWithApp(appName, NativeModule) { +export function nativeWithApp(appName: string, NativeModule: Object) { const native = {}; const methods = Object.keys(NativeModule); @@ -348,7 +349,7 @@ export function nativeWithApp(appName, NativeModule) { * @param object * @return {string} */ -export function objectToUniqueId(object: Object): String { +export function objectToUniqueId(object: Object): string { if (!isObject(object) || object === null) return JSON.stringify(object); const keys = Object.keys(object).sort(); @@ -374,7 +375,7 @@ export function objectToUniqueId(object: Object): String { * @param optionalCallback * @return {Promise} */ -export function promiseOrCallback(promise: Promise, optionalCallback?: Function) { +export function promiseOrCallback(promise: Promise<*>, optionalCallback?: Function) { if (!isFunction(optionalCallback)) return promise; return promise.then((result) => { diff --git a/package.json b/package.json index 123305c0..9aa3bf7b 100644 --- a/package.json +++ b/package.json @@ -11,12 +11,12 @@ "build": "./node_modules/.bin/babel --source-maps=true --out-dir=dist .", "publish_pages": "gh-pages -d public/", "docs-serve-local": "docsify serve docs", + "test-cli": "node ./bin/test.js", "tests-packager": "cd tests && npm run start", "tests-npm-install": "cd tests && npm install", "tests-pod-install": "cd tests && npm run ios:pod:install", - "tests-watch-init": "wml add $(node --eval \"console.log(require('path').resolve('./lib'));\") $(node --eval \"console.log(require('path').resolve('./tests/firebase'));\")", - "tests-watch-start": "watchman watch $(node --eval \"console.log(require('path').resolve('./lib'));\") && wml start", - "tests-watch-stop": "watchman watch-del $(node --eval \"console.log(require('path').resolve('./lib'));\") && wml stop" + "tests-watch-start": "npm run test-cli watch init start", + "tests-watch-stop": "npm run test-cli watch stop" }, "repository": { "type": "git", @@ -74,6 +74,7 @@ "react": "^15.3.0", "react-dom": "^15.3.0", "react-native": "^0.44.0", + "shelljs": "^0.7.8", "wml": "0.0.82" }, "dependencies": { diff --git a/tests/.babelrc b/tests/.babelrc index d6ff3f1b..0c5dcafa 100644 --- a/tests/.babelrc +++ b/tests/.babelrc @@ -1,5 +1,16 @@ { "presets": [ "react-native" - ] + ], + "env": { + "development": { + "plugins": [ + ["istanbul", { + "include": [ + "**/firebase/**.js" + ] + }] + ] + } + } } diff --git a/tests/android/app/src/main/java/com/reactnativefirebasedemo/MainActivity.java b/tests/android/app/src/main/java/com/reactnativefirebasedemo/MainActivity.java index fe7c5a28..a5fd993c 100644 --- a/tests/android/app/src/main/java/com/reactnativefirebasedemo/MainActivity.java +++ b/tests/android/app/src/main/java/com/reactnativefirebasedemo/MainActivity.java @@ -1,15 +1,80 @@ package com.reactnativefirebasedemo; +import android.content.Intent; +import android.content.pm.PackageManager; +import android.net.Uri; +import android.os.Build; +import android.os.Bundle; +import android.provider.Settings; + import com.facebook.react.ReactActivity; public class MainActivity extends ReactActivity { - /** - * Returns the name of the main component registered from JavaScript. - * This is used to schedule rendering of the component. - */ - @Override - protected String getMainComponentName() { - return "ReactNativeFirebaseDemo"; + public static final int PERMISSION_REQ_CODE = 1234; + public static final int OVERLAY_PERMISSION_REQ_CODE = 1235; + + String[] perms = { + "android.permission.READ_EXTERNAL_STORAGE", + "android.permission.WRITE_EXTERNAL_STORAGE" + }; + + /** + * Returns the name of the main component registered from JavaScript. + * This is used to schedule rendering of the component. + */ + @Override + protected String getMainComponentName() { + return "ReactNativeFirebaseDemo"; + } + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + checkWindowPerms(); + } + + public void checkWindowPerms() { + // Checking if device version > 22 and we need to use new permission model + if (Build.VERSION.SDK_INT > Build.VERSION_CODES.LOLLIPOP_MR1) { + // Checking if we can draw window overlay + if (!Settings.canDrawOverlays(this)) { + // Requesting permission for window overlay(needed for all react-native apps) + Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION, + Uri.parse("package:" + getPackageName())); + startActivityForResult(intent, OVERLAY_PERMISSION_REQ_CODE); + } + for (String perm : perms) { + // Checking each permission and if denied then requesting permissions + if (checkSelfPermission(perm) == PackageManager.PERMISSION_DENIED) { + requestPermissions(perms, PERMISSION_REQ_CODE); + break; + } + } } + } + + // Window overlay permission intent result + @Override + public void onActivityResult(int requestCode, int resultCode, Intent data) { + super.onActivityResult(requestCode, resultCode, data); + if (requestCode == OVERLAY_PERMISSION_REQ_CODE) { + checkWindowPerms(); + } + } + + // Permission results + @Override + public void onRequestPermissionsResult(int permsRequestCode, String[] permissions, int[] grantResults) { + switch (permsRequestCode) { + case PERMISSION_REQ_CODE: + // example how to get result of permissions requests (there can be more then one permission dialog) + // boolean readAccepted = grantResults[0]==PackageManager.PERMISSION_GRANTED; + // boolean writeAccepted = grantResults[1]==PackageManager.PERMISSION_GRANTED; + // checking permissions to prevent situation when user denied some permission + checkWindowPerms(); + break; + + } + } } diff --git a/tests/package-lock.json b/tests/package-lock.json index 65026453..53bfae97 100644 --- a/tests/package-lock.json +++ b/tests/package-lock.json @@ -5,15 +5,15 @@ "requires": true, "dependencies": { "abab": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/abab/-/abab-1.0.3.tgz", - "integrity": "sha1-uB3l9ydOxOdW15fNg08wNkJyTl0=", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/abab/-/abab-1.0.4.tgz", + "integrity": "sha1-X6rZwsB/YN12dw9xzwJbYqY8/U4=", "dev": true }, "abbrev": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.0.tgz", - "integrity": "sha1-0FVMIlZjbi9W58LlrRg/hZQo2B8=" + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" }, "absolute-path": { "version": "0.0.0", @@ -30,9 +30,9 @@ } }, "acorn": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.1.1.tgz", - "integrity": "sha512-vOk6uEMctu0vQrvuSqFdJyqj1Q0S5VTDL79qtjo+DhRr+1mmaD+tluFSCZqhvi/JUhXSzoZN2BhtstaPEeE8cw==", + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.1.2.tgz", + "integrity": "sha512-o96FZLJBPY1lvTuJylGA9Bk3t/GKPPJG8H0ydQQl01crzwJgspa4AEIq/pVTXigmK0PHVQhiAtn8WMBLL9D2WA==", "dev": true }, "acorn-globals": { @@ -70,11 +70,13 @@ } }, "ajv": { - "version": "4.11.8", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz", - "integrity": "sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY=", + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.2.3.tgz", + "integrity": "sha1-wG9Zh3jETGsWGrr+NGa4GtGBTtI=", "requires": { "co": "4.6.0", + "fast-deep-equal": "1.0.0", + "json-schema-traverse": "0.3.1", "json-stable-stringify": "1.0.1" } }, @@ -111,9 +113,9 @@ "integrity": "sha1-DELU+xcWDVqa8eSEus4cZpIsGyE=" }, "ansi-escapes": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-1.4.0.tgz", - "integrity": "sha1-06ioOzGapneTZisT52HHkRQiMG4=" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.0.0.tgz", + "integrity": "sha512-O/klc27mWNUigtv0F8NJWbLF00OcegQalkqKURWdosW08YZKi4m6CnSUSvIZG1otNJbTWhN01Hhz389DW7mvDQ==" }, "ansi-regex": { "version": "2.1.1", @@ -235,7 +237,7 @@ "dev": true, "requires": { "define-properties": "1.1.2", - "es-abstract": "1.8.0" + "es-abstract": "1.9.0" } }, "arrify": { @@ -260,9 +262,9 @@ "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=" }, "assert-plus": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz", - "integrity": "sha1-104bh+ev/A24qttwIfP+SBAasjQ=" + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" }, "ast-types-flow": { "version": "0.0.7", @@ -291,9 +293,9 @@ "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" }, "aws-sign2": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz", - "integrity": "sha1-FDQt0428yU0OW4fXY81jYSwOeU8=" + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" }, "aws4": { "version": "1.6.0", @@ -329,7 +331,7 @@ "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", "dev": true, "requires": { - "core-js": "2.5.0", + "core-js": "2.5.1", "regenerator-runtime": "0.11.0" } } @@ -361,7 +363,7 @@ "babel-types": "6.26.0", "babylon": "6.18.0", "convert-source-map": "1.5.0", - "debug": "2.6.8", + "debug": "2.6.9", "json5": "0.5.1", "lodash": "4.17.4", "minimatch": "3.0.4", @@ -376,7 +378,7 @@ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", "requires": { - "core-js": "2.5.0", + "core-js": "2.5.1", "regenerator-runtime": "0.11.0" } } @@ -414,7 +416,7 @@ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", "requires": { - "core-js": "2.5.0", + "core-js": "2.5.1", "regenerator-runtime": "0.11.0" } } @@ -435,7 +437,7 @@ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", "requires": { - "core-js": "2.5.0", + "core-js": "2.5.1", "regenerator-runtime": "0.11.0" } } @@ -457,7 +459,7 @@ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", "requires": { - "core-js": "2.5.0", + "core-js": "2.5.1", "regenerator-runtime": "0.11.0" } } @@ -479,7 +481,7 @@ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", "requires": { - "core-js": "2.5.0", + "core-js": "2.5.1", "regenerator-runtime": "0.11.0" } } @@ -502,7 +504,7 @@ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", "requires": { - "core-js": "2.5.0", + "core-js": "2.5.1", "regenerator-runtime": "0.11.0" } } @@ -522,7 +524,7 @@ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", "requires": { - "core-js": "2.5.0", + "core-js": "2.5.1", "regenerator-runtime": "0.11.0" } } @@ -542,7 +544,7 @@ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", "requires": { - "core-js": "2.5.0", + "core-js": "2.5.1", "regenerator-runtime": "0.11.0" } } @@ -562,7 +564,7 @@ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", "requires": { - "core-js": "2.5.0", + "core-js": "2.5.1", "regenerator-runtime": "0.11.0" } } @@ -583,7 +585,7 @@ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", "requires": { - "core-js": "2.5.0", + "core-js": "2.5.1", "regenerator-runtime": "0.11.0" } } @@ -606,7 +608,7 @@ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", "requires": { - "core-js": "2.5.0", + "core-js": "2.5.1", "regenerator-runtime": "0.11.0" } } @@ -630,7 +632,7 @@ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", "requires": { - "core-js": "2.5.0", + "core-js": "2.5.1", "regenerator-runtime": "0.11.0" } } @@ -650,7 +652,7 @@ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", "requires": { - "core-js": "2.5.0", + "core-js": "2.5.1", "regenerator-runtime": "0.11.0" } } @@ -663,7 +665,7 @@ "dev": true, "requires": { "babel-core": "6.26.0", - "babel-plugin-istanbul": "4.1.4", + "babel-plugin-istanbul": "4.1.5", "babel-preset-jest": "19.0.0" } }, @@ -680,7 +682,7 @@ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", "requires": { - "core-js": "2.5.0", + "core-js": "2.5.1", "regenerator-runtime": "0.11.0" } } @@ -699,7 +701,7 @@ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", "requires": { - "core-js": "2.5.0", + "core-js": "2.5.1", "regenerator-runtime": "0.11.0" } } @@ -718,7 +720,7 @@ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", "requires": { - "core-js": "2.5.0", + "core-js": "2.5.1", "regenerator-runtime": "0.11.0" } } @@ -737,13 +739,13 @@ } }, "babel-plugin-istanbul": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-4.1.4.tgz", - "integrity": "sha1-GN3oS/POMp/d8/QQP66SFFbY5Yc=", + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-4.1.5.tgz", + "integrity": "sha1-Z2DN2Xf0EdPhdbsGTyvDJ9mbK24=", "dev": true, "requires": { "find-up": "2.1.0", - "istanbul-lib-instrument": "1.7.5", + "istanbul-lib-instrument": "1.8.0", "test-exclude": "4.1.1" }, "dependencies": { @@ -817,7 +819,7 @@ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", "requires": { - "core-js": "2.5.0", + "core-js": "2.5.1", "regenerator-runtime": "0.11.0" } } @@ -839,12 +841,21 @@ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", "requires": { - "core-js": "2.5.0", + "core-js": "2.5.1", "regenerator-runtime": "0.11.0" } } } }, + "babel-plugin-transform-define": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-define/-/babel-plugin-transform-define-1.3.0.tgz", + "integrity": "sha1-lMX5RZyBDHOMx8UMvUSjGCnW8xk=", + "requires": { + "lodash": "4.17.4", + "traverse": "0.6.6" + } + }, "babel-plugin-transform-es2015-arrow-functions": { "version": "6.22.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz", @@ -858,7 +869,7 @@ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", "requires": { - "core-js": "2.5.0", + "core-js": "2.5.1", "regenerator-runtime": "0.11.0" } } @@ -877,7 +888,7 @@ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", "requires": { - "core-js": "2.5.0", + "core-js": "2.5.1", "regenerator-runtime": "0.11.0" } } @@ -900,7 +911,7 @@ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", "requires": { - "core-js": "2.5.0", + "core-js": "2.5.1", "regenerator-runtime": "0.11.0" } } @@ -927,7 +938,7 @@ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", "requires": { - "core-js": "2.5.0", + "core-js": "2.5.1", "regenerator-runtime": "0.11.0" } } @@ -947,7 +958,7 @@ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", "requires": { - "core-js": "2.5.0", + "core-js": "2.5.1", "regenerator-runtime": "0.11.0" } } @@ -966,7 +977,7 @@ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", "requires": { - "core-js": "2.5.0", + "core-js": "2.5.1", "regenerator-runtime": "0.11.0" } } @@ -986,7 +997,7 @@ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", "requires": { - "core-js": "2.5.0", + "core-js": "2.5.1", "regenerator-runtime": "0.11.0" } } @@ -1005,7 +1016,7 @@ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", "requires": { - "core-js": "2.5.0", + "core-js": "2.5.1", "regenerator-runtime": "0.11.0" } } @@ -1026,7 +1037,7 @@ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", "requires": { - "core-js": "2.5.0", + "core-js": "2.5.1", "regenerator-runtime": "0.11.0" } } @@ -1045,7 +1056,7 @@ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", "requires": { - "core-js": "2.5.0", + "core-js": "2.5.1", "regenerator-runtime": "0.11.0" } } @@ -1076,7 +1087,7 @@ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", "requires": { - "core-js": "2.5.0", + "core-js": "2.5.1", "regenerator-runtime": "0.11.0" } } @@ -1100,7 +1111,7 @@ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", "requires": { - "core-js": "2.5.0", + "core-js": "2.5.1", "regenerator-runtime": "0.11.0" } } @@ -1120,7 +1131,7 @@ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", "requires": { - "core-js": "2.5.0", + "core-js": "2.5.1", "regenerator-runtime": "0.11.0" } } @@ -1139,7 +1150,7 @@ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", "requires": { - "core-js": "2.5.0", + "core-js": "2.5.1", "regenerator-runtime": "0.11.0" } } @@ -1160,7 +1171,7 @@ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", "requires": { - "core-js": "2.5.0", + "core-js": "2.5.1", "regenerator-runtime": "0.11.0" } } @@ -1179,7 +1190,7 @@ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", "requires": { - "core-js": "2.5.0", + "core-js": "2.5.1", "regenerator-runtime": "0.11.0" } } @@ -1198,7 +1209,7 @@ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", "requires": { - "core-js": "2.5.0", + "core-js": "2.5.1", "regenerator-runtime": "0.11.0" } } @@ -1219,7 +1230,7 @@ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", "requires": { - "core-js": "2.5.0", + "core-js": "2.5.1", "regenerator-runtime": "0.11.0" } } @@ -1238,7 +1249,7 @@ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", "requires": { - "core-js": "2.5.0", + "core-js": "2.5.1", "regenerator-runtime": "0.11.0" } } @@ -1257,7 +1268,7 @@ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", "requires": { - "core-js": "2.5.0", + "core-js": "2.5.1", "regenerator-runtime": "0.11.0" } } @@ -1277,7 +1288,7 @@ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", "requires": { - "core-js": "2.5.0", + "core-js": "2.5.1", "regenerator-runtime": "0.11.0" } } @@ -1296,7 +1307,7 @@ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", "requires": { - "core-js": "2.5.0", + "core-js": "2.5.1", "regenerator-runtime": "0.11.0" } } @@ -1316,7 +1327,7 @@ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", "requires": { - "core-js": "2.5.0", + "core-js": "2.5.1", "regenerator-runtime": "0.11.0" } } @@ -1335,7 +1346,7 @@ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", "requires": { - "core-js": "2.5.0", + "core-js": "2.5.1", "regenerator-runtime": "0.11.0" } } @@ -1356,7 +1367,7 @@ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", "requires": { - "core-js": "2.5.0", + "core-js": "2.5.1", "regenerator-runtime": "0.11.0" } } @@ -1376,7 +1387,7 @@ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", "requires": { - "core-js": "2.5.0", + "core-js": "2.5.1", "regenerator-runtime": "0.11.0" } } @@ -1412,7 +1423,7 @@ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", "requires": { - "core-js": "2.5.0", + "core-js": "2.5.1", "regenerator-runtime": "0.11.0" } } @@ -1424,7 +1435,7 @@ "integrity": "sha1-N5k3q8Z9eJWXCtxiHyhM2WbPIVM=", "requires": { "babel-runtime": "6.26.0", - "core-js": "2.5.0", + "core-js": "2.5.1", "regenerator-runtime": "0.10.5" }, "dependencies": { @@ -1433,7 +1444,7 @@ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", "requires": { - "core-js": "2.5.0", + "core-js": "2.5.1", "regenerator-runtime": "0.11.0" }, "dependencies": { @@ -1566,7 +1577,7 @@ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", "requires": { - "core-js": "2.5.0", + "core-js": "2.5.1", "regenerator-runtime": "0.11.0" } } @@ -1625,11 +1636,11 @@ "requires": { "babel-core": "6.26.0", "babel-runtime": "6.26.0", - "core-js": "2.5.0", + "core-js": "2.5.1", "home-or-tmp": "2.0.0", "lodash": "4.17.4", "mkdirp": "0.5.1", - "source-map-support": "0.4.16" + "source-map-support": "0.4.18" }, "dependencies": { "babel-runtime": { @@ -1637,7 +1648,7 @@ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", "requires": { - "core-js": "2.5.0", + "core-js": "2.5.1", "regenerator-runtime": "0.11.0" } } @@ -1675,7 +1686,7 @@ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", "requires": { - "core-js": "2.5.0", + "core-js": "2.5.1", "regenerator-runtime": "0.11.0" } } @@ -1691,7 +1702,7 @@ "babel-runtime": "6.26.0", "babel-types": "6.26.0", "babylon": "6.18.0", - "debug": "2.6.8", + "debug": "2.6.9", "globals": "9.18.0", "invariant": "2.2.2", "lodash": "4.17.4" @@ -1702,7 +1713,7 @@ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", "requires": { - "core-js": "2.5.0", + "core-js": "2.5.1", "regenerator-runtime": "0.11.0" } } @@ -1724,7 +1735,7 @@ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", "requires": { - "core-js": "2.5.0", + "core-js": "2.5.1", "regenerator-runtime": "0.11.0" } } @@ -1780,9 +1791,9 @@ "integrity": "sha1-5tXqjF2tABMEpwsiY4RH9pyy+Ak=" }, "big-integer": { - "version": "1.6.24", - "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.24.tgz", - "integrity": "sha1-HthNAYrDwccrMH5/fZQAjo7iAxE=" + "version": "1.6.25", + "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.25.tgz", + "integrity": "sha1-HeRan1dUKsIBIcaC+NZCIgo06CM=" }, "binary-extensions": { "version": "1.10.0", @@ -1802,7 +1813,7 @@ "integrity": "sha1-wIzzMMM1jhUQFqBXRvE/ApyX+pc=", "requires": { "bytes": "2.1.0", - "content-type": "1.0.2", + "content-type": "1.0.4", "debug": "2.2.0", "depd": "1.0.1", "http-errors": "1.3.1", @@ -1834,11 +1845,11 @@ } }, "boom": { - "version": "2.10.1", - "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz", - "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/boom/-/boom-4.3.1.tgz", + "integrity": "sha1-T4owBctKfjiJ90kDD9JbluAdLjE=", "requires": { - "hoek": "2.16.3" + "hoek": "4.2.0" } }, "bows": { @@ -1862,7 +1873,7 @@ "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.1.1.tgz", "integrity": "sha1-1g1dzCDLptx+HymbNdPh+V2vuuY=", "requires": { - "big-integer": "1.6.24" + "big-integer": "1.6.25" } }, "brace-expansion": { @@ -1914,6 +1925,30 @@ "node-int64": "0.4.0" } }, + "build": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/build/-/build-0.1.4.tgz", + "integrity": "sha1-cH/gJv/O3crL/c3zVur9pk8VEEY=", + "requires": { + "cssmin": "0.3.2", + "jsmin": "1.0.1", + "jxLoader": "0.1.1", + "moo-server": "1.3.0", + "promised-io": "0.3.5", + "timespan": "2.3.0", + "uglify-js": "1.3.5", + "walker": "1.0.7", + "winston": "2.4.0", + "wrench": "1.3.9" + }, + "dependencies": { + "uglify-js": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-1.3.5.tgz", + "integrity": "sha1-S1v/+Rhu/7qoiOTJ6UvZ/EyUkp0=" + } + } + }, "builtin-modules": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", @@ -1989,9 +2024,9 @@ } }, "ci-info": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.0.0.tgz", - "integrity": "sha1-3FKF8rTiUYIWg2gcOBwziPRuxTQ=", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.1.1.tgz", + "integrity": "sha512-vHDDF/bP9RYpTWtUhpJRhCFdvvp3iDWvEbuDbWgvjUrNGV1MXJrE0MPcwGtEled04m61iwdBLUIHZtDgzWS4ZQ==", "dev": true }, "circular-json": { @@ -2006,11 +2041,11 @@ "integrity": "sha1-ZqDmQBGBbjcZaCj9yMjBRzEshjQ=" }, "cli-cursor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-1.0.2.tgz", - "integrity": "sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc=", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", + "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", "requires": { - "restore-cursor": "1.0.1" + "restore-cursor": "2.0.0" } }, "cli-width": { @@ -2059,7 +2094,6 @@ "version": "1.9.0", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.0.tgz", "integrity": "sha1-Gsz5fdc5uYO/mU1W/sj5WFNkG3o=", - "dev": true, "requires": { "color-name": "1.1.3" } @@ -2067,8 +2101,7 @@ "color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" }, "colors": { "version": "1.1.2", @@ -2094,7 +2127,7 @@ "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.11.tgz", "integrity": "sha1-FnGKdd4oPtjmBAQWJaIGRYZ5fYo=", "requires": { - "mime-db": "1.29.0" + "mime-db": "1.30.0" } }, "compression": { @@ -2159,7 +2192,7 @@ "bytes": "2.1.0", "compression": "1.5.2", "connect-timeout": "1.6.2", - "content-type": "1.0.2", + "content-type": "1.0.4", "cookie": "0.1.3", "cookie-parser": "1.3.5", "cookie-signature": "1.0.6", @@ -2171,11 +2204,11 @@ "finalhandler": "0.4.0", "fresh": "0.3.0", "http-errors": "1.3.1", - "method-override": "2.3.9", + "method-override": "2.3.10", "morgan": "1.6.1", "multiparty": "3.3.2", "on-headers": "1.0.1", - "parseurl": "1.3.1", + "parseurl": "1.3.2", "pause": "0.1.0", "qs": "4.0.0", "response-time": "2.3.2", @@ -2235,9 +2268,9 @@ "dev": true }, "content-type": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.2.tgz", - "integrity": "sha1-t9ETrueo3Se9IRM8TcJSnfFyHu0=" + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" }, "content-type-parser": { "version": "1.0.1", @@ -2270,9 +2303,9 @@ "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" }, "core-js": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.0.tgz", - "integrity": "sha1-VpwFCRi+ZIazg3VSAorgRmtxcIY=" + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.1.tgz", + "integrity": "sha1-rmh03GaTd4m4B1T/VCjfZoGcpQs=" }, "core-util-is": { "version": "1.0.2", @@ -2284,6 +2317,16 @@ "resolved": "https://registry.npmjs.org/crc/-/crc-3.3.0.tgz", "integrity": "sha1-+mIuG8OIvyVzCQgta2UgDOZwkLo=" }, + "create-react-class": { + "version": "15.6.2", + "resolved": "https://registry.npmjs.org/create-react-class/-/create-react-class-15.6.2.tgz", + "integrity": "sha1-zx7RXxKq1/FO9fLf4F5sQvke8Co=", + "requires": { + "fbjs": "0.8.16", + "loose-envify": "1.3.1", + "object-assign": "4.1.1" + } + }, "cross-spawn": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-3.0.1.tgz", @@ -2305,11 +2348,21 @@ } }, "cryptiles": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz", - "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-3.1.2.tgz", + "integrity": "sha1-qJ+7Ig9c4l7FboxKqKT9e1sNKf4=", "requires": { - "boom": "2.10.1" + "boom": "5.2.0" + }, + "dependencies": { + "boom": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/boom/-/boom-5.2.0.tgz", + "integrity": "sha512-Z5BTk6ZRe4tXXQlkqftmsAUANpXmuwlsF5Oov8ThoMbQRzdGTA1ngYRW160GexgOgjsFOKJz0LYhoNi+2AMBUw==", + "requires": { + "hoek": "4.2.0" + } + } } }, "csrf": { @@ -2322,6 +2375,11 @@ "uid-safe": "2.1.4" } }, + "cssmin": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/cssmin/-/cssmin-0.3.2.tgz", + "integrity": "sha1-3c5MVHtRCuDVlKjx+/iq+OLFwA0=" + }, "cssom": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.2.tgz", @@ -2365,6 +2423,11 @@ } } }, + "cycle": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/cycle/-/cycle-1.0.3.tgz", + "integrity": "sha1-IegLK+hYD5i0aPN5QwZisEbDStI=" + }, "d": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/d/-/d-1.0.0.tgz", @@ -2386,24 +2449,17 @@ "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", "requires": { "assert-plus": "1.0.0" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" - } } }, "dateformat": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-2.0.0.tgz", - "integrity": "sha1-J0Pjq7XD/CRi5SfcpEXgTp9N7hc=" + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-2.2.0.tgz", + "integrity": "sha1-QGXiATz5+5Ft39gu+1Bq1MZ2kGI=" }, "debug": { - "version": "2.6.8", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz", - "integrity": "sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw=", + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "requires": { "ms": "2.0.0" } @@ -2460,7 +2516,7 @@ "object-assign": "4.1.1", "pify": "2.3.0", "pinkie-promise": "2.0.1", - "rimraf": "2.6.1" + "rimraf": "2.6.2" } }, "delayed-stream": { @@ -2497,9 +2553,9 @@ } }, "diff": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-3.3.0.tgz", - "integrity": "sha512-w0XZubFWn0Adlsapj9EAWX0FqWdO4tz8kc3RiYdWLh4k/V8PTb6i0SMgXt0vRM3zyKnT8tKO7mUlieRQHIjMNg==" + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/diff/-/diff-3.3.1.tgz", + "integrity": "sha512-MKPHZDMB0o6yHyDryUOScqZibp914ksXwAMYMTHj6KO8UeKsRYNJD3oNCKjTqZon+V488P7N/HzXF8t7ZR95ww==" }, "doctrine": { "version": "2.0.0", @@ -2584,7 +2640,24 @@ "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.12.tgz", "integrity": "sha1-U4tm8+5izRq1HsMjgp0flIDHS+s=", "requires": { - "iconv-lite": "0.4.18" + "iconv-lite": "0.4.19" + } + }, + "envinfo": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-3.4.1.tgz", + "integrity": "sha1-jIDp8u7CzU4q2yxdASfOB6Kqoq4=", + "requires": { + "minimist": "1.2.0", + "os-name": "2.0.1", + "which": "1.3.0" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" + } } }, "errno": { @@ -2617,16 +2690,16 @@ "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.4.tgz", "integrity": "sha1-hiRnWMfdbSGmR0/whKR0DsBesh8=", "requires": { - "mime-types": "2.1.16", + "mime-types": "2.1.17", "negotiator": "0.6.1" } }, "mime-types": { - "version": "2.1.16", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.16.tgz", - "integrity": "sha1-K4WKUuXs1RbbiXrCvodIeDBpjiM=", + "version": "2.1.17", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.17.tgz", + "integrity": "sha1-Cdejk/A+mVp5+K+Fe3Cp4KsWVXo=", "requires": { - "mime-db": "1.29.0" + "mime-db": "1.30.0" } }, "negotiator": { @@ -2637,13 +2710,13 @@ } }, "es-abstract": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.8.0.tgz", - "integrity": "sha512-Cf9/h5MrXtExM20gSS55YFrGKCyPrRBjIVBtVyy8vmlsDfe0NPKMWj65tPLgzyfPuapWxh5whpXCtW4+AW5mRg==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.9.0.tgz", + "integrity": "sha512-kk3IJoKo7A3pWJc0OV8yZ/VEX2oSUytfekrJiqoxBlKJMFAJVJVpGdHClCCTdv+Fn2zHfpDHHIelMFhZVfef3Q==", "dev": true, "requires": { "es-to-primitive": "1.1.1", - "function-bind": "1.1.0", + "function-bind": "1.1.1", "has": "1.0.1", "is-callable": "1.1.3", "is-regex": "1.0.4" @@ -2741,39 +2814,23 @@ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" }, "escodegen": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.8.1.tgz", - "integrity": "sha1-WltTr0aTEQvrsIZ6o0MN07cKEBg=", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.9.0.tgz", + "integrity": "sha512-v0MYvNQ32bzwoG2OSFzWAkuahDQHK92JBN0pTAALJ4RIxEZe766QJPDR8Hqy7XNUy5K3fnVL76OqYAdc4TZEIw==", "dev": true, "requires": { - "esprima": "2.7.3", - "estraverse": "1.9.3", + "esprima": "3.1.3", + "estraverse": "4.2.0", "esutils": "2.0.2", "optionator": "0.8.2", - "source-map": "0.2.0" + "source-map": "0.5.7" }, "dependencies": { "esprima": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", - "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=", + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz", + "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=", "dev": true - }, - "estraverse": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-1.9.3.tgz", - "integrity": "sha1-r2fy3JIlgkFZUJJgkaQAXSnJu0Q=", - "dev": true - }, - "source-map": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.2.0.tgz", - "integrity": "sha1-2rc/vPwrqBm03gO9b26qSBZLP50=", - "dev": true, - "optional": true, - "requires": { - "amdefine": "1.0.1" - } } } }, @@ -2798,22 +2855,22 @@ "babel-code-frame": "6.26.0", "chalk": "1.1.3", "concat-stream": "1.6.0", - "debug": "2.6.8", + "debug": "2.6.9", "doctrine": "2.0.0", "escope": "3.6.0", - "espree": "3.5.0", + "espree": "3.5.1", "esquery": "1.0.0", "estraverse": "4.2.0", "esutils": "2.0.2", "file-entry-cache": "2.0.0", "glob": "7.1.2", "globals": "9.18.0", - "ignore": "3.3.3", + "ignore": "3.3.5", "imurmurhash": "0.1.4", "inquirer": "0.12.0", "is-my-json-valid": "2.16.1", "is-resolvable": "1.0.0", - "js-yaml": "3.9.1", + "js-yaml": "3.10.0", "json-stable-stringify": "1.0.1", "levn": "0.3.0", "lodash": "4.17.4", @@ -2832,6 +2889,113 @@ "user-home": "2.0.0" }, "dependencies": { + "ansi-escapes": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-1.4.0.tgz", + "integrity": "sha1-06ioOzGapneTZisT52HHkRQiMG4=", + "dev": true + }, + "cli-cursor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-1.0.2.tgz", + "integrity": "sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc=", + "dev": true, + "requires": { + "restore-cursor": "1.0.1" + } + }, + "figures": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", + "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=", + "dev": true, + "requires": { + "escape-string-regexp": "1.0.5", + "object-assign": "4.1.1" + } + }, + "inquirer": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-0.12.0.tgz", + "integrity": "sha1-HvK/1jUE3wvHV4X/+MLEHfEvB34=", + "dev": true, + "requires": { + "ansi-escapes": "1.4.0", + "ansi-regex": "2.1.1", + "chalk": "1.1.3", + "cli-cursor": "1.0.2", + "cli-width": "2.2.0", + "figures": "1.7.0", + "lodash": "4.17.4", + "readline2": "1.0.1", + "run-async": "0.1.0", + "rx-lite": "3.1.2", + "string-width": "1.0.2", + "strip-ansi": "3.0.1", + "through": "2.3.8" + } + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dev": true, + "requires": { + "number-is-nan": "1.0.1" + } + }, + "js-yaml": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.10.0.tgz", + "integrity": "sha512-O2v52ffjLa9VeM43J4XocZE//WT9N0IiwDa3KSHH7Tu8CtH+1qM8SIZvnsTh6v+4yFy5KUY3BHUVwjpfAWsjIA==", + "dev": true, + "requires": { + "argparse": "1.0.9", + "esprima": "4.0.0" + } + }, + "onetime": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz", + "integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=", + "dev": true + }, + "restore-cursor": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-1.0.1.tgz", + "integrity": "sha1-NGYfRohjJ/7SmRR5FSJS35LapUE=", + "dev": true, + "requires": { + "exit-hook": "1.1.1", + "onetime": "1.1.0" + } + }, + "run-async": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-0.1.0.tgz", + "integrity": "sha1-yK1KXhEGYeQCp9IbUw4AnyX444k=", + "dev": true, + "requires": { + "once": "1.4.0" + } + }, + "rx-lite": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-3.1.2.tgz", + "integrity": "sha1-Gc5QLKVyZl87ZHsQk5+X/RYV8QI=", + "dev": true + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "requires": { + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" + } + }, "strip-bom": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", @@ -2873,7 +3037,7 @@ "integrity": "sha512-yUtXS15gIcij68NmXmP9Ni77AQuCN0itXbCc/jWd8C6/yKZaSNXicpC8cgvjnxVdmfsosIXrjpzFq7GcDryb6A==", "dev": true, "requires": { - "debug": "2.6.8", + "debug": "2.6.9", "resolve": "1.4.0" } }, @@ -2883,14 +3047,14 @@ "integrity": "sha512-jDI/X5l/6D1rRD/3T43q8Qgbls2nq5km5KSqiwlyUbGo5+04fXhMKdCPhjwbqAa6HXWaMxj8Q4hQDIh7IadJQw==", "dev": true, "requires": { - "debug": "2.6.8", + "debug": "2.6.9", "pkg-dir": "1.0.0" } }, "eslint-plugin-flowtype": { - "version": "2.35.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-flowtype/-/eslint-plugin-flowtype-2.35.0.tgz", - "integrity": "sha512-zjXGjOsHds8b84C0Ad3VViKh+sUA9PeXKHwPRlSLwwSX0v1iUJf/6IX7wxc+w2T2tnDH8PT6B/YgtcEuNI3ssA==", + "version": "2.37.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-flowtype/-/eslint-plugin-flowtype-2.37.0.tgz", + "integrity": "sha512-S/CzpUkeFzCkuUhTb2YeZqOLlLIysGixZPcWBN8CeIcxC9S3/Av5fsiohAD8uSoeDNSdF9mVsCsCRdP+Yxs1AA==", "dev": true, "requires": { "lodash": "4.17.4" @@ -2904,7 +3068,7 @@ "requires": { "builtin-modules": "1.1.1", "contains-path": "0.1.0", - "debug": "2.6.8", + "debug": "2.6.9", "doctrine": "1.5.0", "eslint-import-resolver-node": "0.3.1", "eslint-module-utils": "2.1.1", @@ -3029,12 +3193,12 @@ "dev": true }, "espree": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-3.5.0.tgz", - "integrity": "sha1-mDWGJb3QVYYeon4oZ+pyn69GPY0=", + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-3.5.1.tgz", + "integrity": "sha1-DJiLirRttTEAoZVK5LqZXd0n2H4=", "dev": true, "requires": { - "acorn": "5.1.1", + "acorn": "5.1.2", "acorn-jsx": "3.0.1" } }, @@ -3095,9 +3259,9 @@ "integrity": "sha1-qG5e5r2qFgVEddp5fM3fDFVphJE=" }, "exec-sh": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.2.0.tgz", - "integrity": "sha1-FPdd4/INKG75MwmbLOUKkDWc7xA=", + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.2.1.tgz", + "integrity": "sha512-aLt95pexaugVtQerpmE51+4QfWrNc304uez7jvj6fWnN8GeEHpttB8F36n8N7uVhUMbH/1enbxQ9HImZ4w/9qg==", "requires": { "merge": "1.2.0" } @@ -3140,7 +3304,8 @@ "exit-hook": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/exit-hook/-/exit-hook-1.1.1.tgz", - "integrity": "sha1-8FyiM7SMBdVP/wd2XfhQfpXAL/g=" + "integrity": "sha1-8FyiM7SMBdVP/wd2XfhQfpXAL/g=", + "dev": true }, "expand-brackets": { "version": "0.1.5", @@ -3169,7 +3334,7 @@ "debug": "2.2.0", "depd": "1.0.1", "on-headers": "1.0.1", - "parseurl": "1.3.1", + "parseurl": "1.3.2", "uid-safe": "2.0.0", "utils-merge": "1.0.0" }, @@ -3202,6 +3367,16 @@ "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=" }, + "external-editor": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-2.0.5.tgz", + "integrity": "sha512-Msjo64WT5W+NhOpQXh0nOHm+n0RfU1QUwDnKYvJ8dEJ8zlwLrqXNTv5mSUTJpepf41PDJGyhueTw2vNZW+Fr/w==", + "requires": { + "iconv-lite": "0.4.19", + "jschardet": "1.5.1", + "tmp": "0.0.33" + } + }, "extglob": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", @@ -3215,6 +3390,11 @@ "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" }, + "eyes": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/eyes/-/eyes-0.1.8.tgz", + "integrity": "sha1-Ys8SAjTGg3hdkCNIqADvPgzCC8A=" + }, "fancy-log": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/fancy-log/-/fancy-log-1.3.0.tgz", @@ -3224,6 +3404,11 @@ "time-stamp": "1.1.0" } }, + "fast-deep-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.0.0.tgz", + "integrity": "sha1-liVqO8l1WV6zbYLpkp0GDYk0Of8=" + }, "fast-levenshtein": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", @@ -3249,9 +3434,9 @@ } }, "fbjs": { - "version": "0.8.14", - "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-0.8.14.tgz", - "integrity": "sha1-0dviviVMNakeCfMfnNUKQLKg7Rw=", + "version": "0.8.16", + "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-0.8.16.tgz", + "integrity": "sha1-XmdDL1UNxBtXK/VYR7ispk5TN9s=", "requires": { "core-js": "1.2.7", "isomorphic-fetch": "2.2.1", @@ -3323,12 +3508,11 @@ } }, "figures": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", - "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", + "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", "requires": { - "escape-string-regexp": "1.0.5", - "object-assign": "4.1.1" + "escape-string-regexp": "1.0.5" } }, "file-entry-cache": { @@ -3337,7 +3521,7 @@ "integrity": "sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=", "dev": true, "requires": { - "flat-cache": "1.2.2", + "flat-cache": "1.3.0", "object-assign": "4.1.1" } }, @@ -3565,9 +3749,9 @@ } }, "flat-cache": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.2.2.tgz", - "integrity": "sha1-+oZxTnLCHbiGAXYezy9VXRq8a5Y=", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.3.0.tgz", + "integrity": "sha1-0wMLMrOBVPTjt+nHCfSQ9++XxIE=", "dev": true, "requires": { "circular-json": "0.3.3", @@ -3607,15 +3791,15 @@ "requires": { "asynckit": "0.4.0", "combined-stream": "1.0.5", - "mime-types": "2.1.16" + "mime-types": "2.1.17" }, "dependencies": { "mime-types": { - "version": "2.1.16", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.16.tgz", - "integrity": "sha1-K4WKUuXs1RbbiXrCvodIeDBpjiM=", + "version": "2.1.17", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.17.tgz", + "integrity": "sha1-Cdejk/A+mVp5+K+Fe3Cp4KsWVXo=", "requires": { - "mime-db": "1.29.0" + "mime-db": "1.30.0" } } } @@ -3658,23 +3842,20 @@ "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", + "nan": "2.7.0", "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", @@ -3683,19 +3864,16 @@ }, "ansi-regex": { "version": "2.1.1", - "bundled": true, - "dev": true + "bundled": 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", @@ -3705,42 +3883,35 @@ "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 + "bundled": true }, "bcrypt-pbkdf": { "version": "1.0.1", "bundled": true, - "dev": true, "optional": true, "requires": { "tweetnacl": "0.14.5" @@ -3749,7 +3920,6 @@ "block-stream": { "version": "0.0.9", "bundled": true, - "dev": true, "requires": { "inherits": "2.0.3" } @@ -3757,7 +3927,6 @@ "boom": { "version": "2.10.1", "bundled": true, - "dev": true, "requires": { "hoek": "2.16.3" } @@ -3765,7 +3934,6 @@ "brace-expansion": { "version": "1.1.7", "bundled": true, - "dev": true, "requires": { "balanced-match": "0.4.2", "concat-map": "0.0.1" @@ -3773,53 +3941,44 @@ }, "buffer-shims": { "version": "1.0.0", - "bundled": true, - "dev": true + "bundled": 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 + "bundled": 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 + "bundled": true }, "console-control-strings": { "version": "1.1.0", - "bundled": true, - "dev": true + "bundled": true }, "core-util-is": { "version": "1.0.2", - "bundled": true, - "dev": true + "bundled": true }, "cryptiles": { "version": "2.0.5", "bundled": true, - "dev": true, "optional": true, "requires": { "boom": "2.10.1" @@ -3828,7 +3987,6 @@ "dashdash": { "version": "1.14.1", "bundled": true, - "dev": true, "optional": true, "requires": { "assert-plus": "1.0.0" @@ -3837,7 +3995,6 @@ "assert-plus": { "version": "1.0.0", "bundled": true, - "dev": true, "optional": true } } @@ -3845,7 +4002,6 @@ "debug": { "version": "2.6.8", "bundled": true, - "dev": true, "optional": true, "requires": { "ms": "2.0.0" @@ -3854,24 +4010,20 @@ "deep-extend": { "version": "0.4.2", "bundled": true, - "dev": true, "optional": true }, "delayed-stream": { "version": "1.0.0", - "bundled": true, - "dev": true + "bundled": 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" @@ -3880,24 +4032,20 @@ "extend": { "version": "3.0.1", "bundled": true, - "dev": true, "optional": true }, "extsprintf": { "version": "1.0.2", - "bundled": true, - "dev": true + "bundled": 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", @@ -3907,13 +4055,11 @@ }, "fs.realpath": { "version": "1.0.0", - "bundled": true, - "dev": true + "bundled": true }, "fstream": { "version": "1.0.11", "bundled": true, - "dev": true, "requires": { "graceful-fs": "4.1.11", "inherits": "2.0.3", @@ -3924,7 +4070,6 @@ "fstream-ignore": { "version": "1.0.5", "bundled": true, - "dev": true, "optional": true, "requires": { "fstream": "1.0.11", @@ -3935,7 +4080,6 @@ "gauge": { "version": "2.7.4", "bundled": true, - "dev": true, "optional": true, "requires": { "aproba": "1.1.1", @@ -3951,7 +4095,6 @@ "getpass": { "version": "0.1.7", "bundled": true, - "dev": true, "optional": true, "requires": { "assert-plus": "1.0.0" @@ -3960,7 +4103,6 @@ "assert-plus": { "version": "1.0.0", "bundled": true, - "dev": true, "optional": true } } @@ -3968,7 +4110,6 @@ "glob": { "version": "7.1.2", "bundled": true, - "dev": true, "requires": { "fs.realpath": "1.0.0", "inflight": "1.0.6", @@ -3980,19 +4121,16 @@ }, "graceful-fs": { "version": "4.1.11", - "bundled": true, - "dev": true + "bundled": 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", @@ -4002,13 +4140,11 @@ "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", @@ -4019,13 +4155,11 @@ }, "hoek": { "version": "2.16.3", - "bundled": true, - "dev": true + "bundled": true }, "http-signature": { "version": "1.1.1", "bundled": true, - "dev": true, "optional": true, "requires": { "assert-plus": "0.2.0", @@ -4036,7 +4170,6 @@ "inflight": { "version": "1.0.6", "bundled": true, - "dev": true, "requires": { "once": "1.4.0", "wrappy": "1.0.2" @@ -4044,19 +4177,16 @@ }, "inherits": { "version": "2.0.3", - "bundled": true, - "dev": true + "bundled": 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" } @@ -4064,24 +4194,20 @@ "is-typedarray": { "version": "1.0.0", "bundled": true, - "dev": true, "optional": true }, "isarray": { "version": "1.0.0", - "bundled": true, - "dev": true + "bundled": 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" @@ -4090,19 +4216,16 @@ "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" @@ -4111,19 +4234,16 @@ "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", @@ -4135,20 +4255,17 @@ "assert-plus": { "version": "1.0.0", "bundled": true, - "dev": true, "optional": true } } }, "mime-db": { "version": "1.27.0", - "bundled": true, - "dev": true + "bundled": true }, "mime-types": { "version": "2.1.15", "bundled": true, - "dev": true, "requires": { "mime-db": "1.27.0" } @@ -4156,20 +4273,17 @@ "minimatch": { "version": "3.0.4", "bundled": true, - "dev": true, "requires": { "brace-expansion": "1.1.7" } }, "minimist": { "version": "0.0.8", - "bundled": true, - "dev": true + "bundled": true }, "mkdirp": { "version": "0.5.1", "bundled": true, - "dev": true, "requires": { "minimist": "0.0.8" } @@ -4177,13 +4291,11 @@ "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", @@ -4200,7 +4312,6 @@ "nopt": { "version": "4.0.1", "bundled": true, - "dev": true, "optional": true, "requires": { "abbrev": "1.1.0", @@ -4210,7 +4321,6 @@ "npmlog": { "version": "4.1.0", "bundled": true, - "dev": true, "optional": true, "requires": { "are-we-there-yet": "1.1.4", @@ -4221,25 +4331,21 @@ }, "number-is-nan": { "version": "1.0.1", - "bundled": true, - "dev": true + "bundled": 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" } @@ -4247,19 +4353,16 @@ "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", @@ -4268,36 +4371,30 @@ }, "path-is-absolute": { "version": "1.0.1", - "bundled": true, - "dev": true + "bundled": true }, "performance-now": { "version": "0.2.0", "bundled": true, - "dev": true, "optional": true }, "process-nextick-args": { "version": "1.0.7", - "bundled": true, - "dev": true + "bundled": 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", @@ -4309,7 +4406,6 @@ "minimist": { "version": "1.2.0", "bundled": true, - "dev": true, "optional": true } } @@ -4317,7 +4413,6 @@ "readable-stream": { "version": "2.2.9", "bundled": true, - "dev": true, "requires": { "buffer-shims": "1.0.0", "core-util-is": "1.0.2", @@ -4331,7 +4426,6 @@ "request": { "version": "2.81.0", "bundled": true, - "dev": true, "optional": true, "requires": { "aws-sign2": "0.6.0", @@ -4361,38 +4455,32 @@ "rimraf": { "version": "2.6.1", "bundled": true, - "dev": true, "requires": { "glob": "7.1.2" } }, "safe-buffer": { "version": "5.0.1", - "bundled": true, - "dev": true + "bundled": 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" @@ -4401,7 +4489,6 @@ "sshpk": { "version": "1.13.0", "bundled": true, - "dev": true, "optional": true, "requires": { "asn1": "0.2.3", @@ -4418,7 +4505,6 @@ "assert-plus": { "version": "1.0.0", "bundled": true, - "dev": true, "optional": true } } @@ -4426,7 +4512,6 @@ "string_decoder": { "version": "1.0.1", "bundled": true, - "dev": true, "requires": { "safe-buffer": "5.0.1" } @@ -4434,7 +4519,6 @@ "string-width": { "version": "1.0.2", "bundled": true, - "dev": true, "requires": { "code-point-at": "1.1.0", "is-fullwidth-code-point": "1.0.0", @@ -4444,13 +4528,11 @@ "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" } @@ -4458,13 +4540,11 @@ "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", @@ -4474,7 +4554,6 @@ "tar-pack": { "version": "3.4.0", "bundled": true, - "dev": true, "optional": true, "requires": { "debug": "2.6.8", @@ -4490,7 +4569,6 @@ "tough-cookie": { "version": "2.3.2", "bundled": true, - "dev": true, "optional": true, "requires": { "punycode": "1.4.1" @@ -4499,7 +4577,6 @@ "tunnel-agent": { "version": "0.6.0", "bundled": true, - "dev": true, "optional": true, "requires": { "safe-buffer": "5.0.1" @@ -4508,30 +4585,25 @@ "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 + "bundled": 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" @@ -4540,7 +4612,6 @@ "wide-align": { "version": "1.1.2", "bundled": true, - "dev": true, "optional": true, "requires": { "string-width": "1.0.2" @@ -4548,15 +4619,14 @@ }, "wrappy": { "version": "1.0.2", - "bundled": true, - "dev": true + "bundled": true } } }, "function-bind": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.0.tgz", - "integrity": "sha1-FhdnFMgBeY5Ojyz391KUZ7tKV3E=", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", "dev": true }, "gauge": { @@ -4602,13 +4672,6 @@ "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", "requires": { "assert-plus": "1.0.0" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" - } } }, "glob": { @@ -4697,7 +4760,7 @@ "array-uniq": "1.0.3", "beeper": "1.1.1", "chalk": "1.1.3", - "dateformat": "2.0.0", + "dateformat": "2.2.0", "fancy-log": "1.3.0", "gulplog": "1.0.0", "has-gulplog": "0.1.0", @@ -4763,17 +4826,17 @@ } }, "har-schema": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-1.0.5.tgz", - "integrity": "sha1-0mMTX0MwfALGAq/I/pWXDAFRNp4=" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" }, "har-validator": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-4.2.1.tgz", - "integrity": "sha1-M0gdDxu/9gDdID11gSpqX7oALio=", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.0.3.tgz", + "integrity": "sha1-ukAsJmGU8VlW7xXg/PJCmT9qff0=", "requires": { - "ajv": "4.11.8", - "har-schema": "1.0.5" + "ajv": "5.2.3", + "har-schema": "2.0.0" } }, "has": { @@ -4782,7 +4845,7 @@ "integrity": "sha1-hGFzP1OLCDfJNh45qauelwTcLyg=", "dev": true, "requires": { - "function-bind": "1.1.0" + "function-bind": "1.1.1" } }, "has-ansi": { @@ -4794,10 +4857,9 @@ } }, "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", - "dev": true + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", + "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=" }, "has-gulplog": { "version": "0.1.0", @@ -4813,25 +4875,25 @@ "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=" }, "hawk": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz", - "integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/hawk/-/hawk-6.0.2.tgz", + "integrity": "sha512-miowhl2+U7Qle4vdLqDdPt9m09K6yZhkLDTWGoUiUzrQCn+mHHSmfJgAyGaLRZbPmTqfFFjRV1QWCW0VWUJBbQ==", "requires": { - "boom": "2.10.1", - "cryptiles": "2.0.5", - "hoek": "2.16.3", - "sntp": "1.0.9" + "boom": "4.3.1", + "cryptiles": "3.1.2", + "hoek": "4.2.0", + "sntp": "2.0.2" } }, "hoek": { - "version": "2.16.3", - "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", - "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=" + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/hoek/-/hoek-4.2.0.tgz", + "integrity": "sha512-v0XCLxICi9nPfYrS9RL8HbYnXi9obYAeLbSP00BmnZwCK9+Ih9WOjoZ8YoHCoav2csqn4FOz4Orldsy2dmDwmQ==" }, "hoist-non-react-statics": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-1.2.0.tgz", - "integrity": "sha1-qkSM8JhtVcxAdzsXF0t90GbLfPs=" + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-2.3.1.tgz", + "integrity": "sha1-ND24TGAYxlB3iJgkATWhQg7iLOA=" }, "home-or-tmp": { "version": "2.0.0", @@ -4866,35 +4928,30 @@ } }, "http-signature": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz", - "integrity": "sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", "requires": { - "assert-plus": "0.2.0", + "assert-plus": "1.0.0", "jsprim": "1.4.1", "sshpk": "1.13.1" } }, "iconv-lite": { - "version": "0.4.18", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.18.tgz", - "integrity": "sha512-sr1ZQph3UwHTR0XftSbK85OvBbxe/abLGzEnPENCQwmHf7sck8Oyu4ob3LgBxWWxRoM+QszeUyl7jbqapu2TqA==" + "version": "0.4.19", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz", + "integrity": "sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ==" }, "ignore": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.3.tgz", - "integrity": "sha1-QyNS5XrM2HqzEQ6C0/6g5HgSFW0=", + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.5.tgz", + "integrity": "sha512-JLH93mL8amZQhh/p6mfQgVBH3M6epNq3DfsXsTSuSrInVjwyYlFE1nv2AgfRCC8PoOhM0jwQ5v8s9LgbK7yGDw==", "dev": true }, "image-size": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.3.5.tgz", - "integrity": "sha1-gyQOqy+1sAsEqrjHSwRx6cunrYw=" - }, - "immutable": { - "version": "3.7.6", - "resolved": "https://registry.npmjs.org/immutable/-/immutable-3.7.6.tgz", - "integrity": "sha1-E7TTyxK++hVIKib+Gy665kAHHks=" + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.6.1.tgz", + "integrity": "sha512-lHMlI2MykfeHAQdtydQh4fTcBQVf4zLTA91w1euBe9rbmAfJ/iyzMh8H3KD9u1RldlHaMS3tmMV5TEe9BkmW9g==" }, "imurmurhash": { "version": "0.1.4", @@ -4921,29 +4978,71 @@ "integrity": "sha1-BTfLedr1m1mhpRff9wbIbsA5Fi4=" }, "inquirer": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-0.12.0.tgz", - "integrity": "sha1-HvK/1jUE3wvHV4X/+MLEHfEvB34=", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-3.3.0.tgz", + "integrity": "sha512-h+xtnyk4EwKvFWHrUYsWErEVR+igKtLdchu+o0Z1RL7VU/jVMFbYir2bp6bAj8efFNxWqHX0dIss6fJQ+/+qeQ==", "requires": { - "ansi-escapes": "1.4.0", - "ansi-regex": "2.1.1", - "chalk": "1.1.3", - "cli-cursor": "1.0.2", + "ansi-escapes": "3.0.0", + "chalk": "2.1.0", + "cli-cursor": "2.1.0", "cli-width": "2.2.0", - "figures": "1.7.0", + "external-editor": "2.0.5", + "figures": "2.0.0", "lodash": "4.17.4", - "readline2": "1.0.1", - "run-async": "0.1.0", - "rx-lite": "3.1.2", - "string-width": "1.0.2", - "strip-ansi": "3.0.1", + "mute-stream": "0.0.7", + "run-async": "2.3.0", + "rx-lite": "4.0.8", + "rx-lite-aggregates": "4.0.8", + "string-width": "2.1.1", + "strip-ansi": "4.0.0", "through": "2.3.8" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" + }, + "ansi-styles": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", + "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", + "requires": { + "color-convert": "1.9.0" + } + }, + "chalk": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.1.0.tgz", + "integrity": "sha512-LUHGS/dge4ujbXMJrnihYMcL4AoOweGnw9Tp3kQuqy1Kx5c1qKjqvMJZ6nVJPMWJtKCTN72ZogH3oeSO9g9rXQ==", + "requires": { + "ansi-styles": "3.2.0", + "escape-string-regexp": "1.0.5", + "supports-color": "4.4.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "requires": { + "ansi-regex": "3.0.0" + } + }, + "supports-color": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.4.0.tgz", + "integrity": "sha512-rKC3+DyXWgK0ZLKwmRsrkyHVZAjNkfzeehuFWdGGcqGDTZFH73+RH6S/RDAAxl9GusSjZSUWYLmT9N5pzXFOXQ==", + "requires": { + "has-flag": "2.0.0" + } + } } }, "interpret": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.0.3.tgz", - "integrity": "sha1-y8NcYu7uc/Gat7EKgBURQBr8D5A=", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.0.4.tgz", + "integrity": "sha1-ggzdWIuGj/sZGoCVBtbJyPISsbA=", "dev": true }, "invariant": { @@ -4999,7 +5098,7 @@ "integrity": "sha1-9zkzayYyNlBhqdSCcM1WrjNpMY4=", "dev": true, "requires": { - "ci-info": "1.0.0" + "ci-info": "1.1.1" } }, "is-date-object": { @@ -5040,12 +5139,9 @@ } }, "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "requires": { - "number-is-nan": "1.0.1" - } + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" }, "is-glob": { "version": "2.0.1", @@ -5109,6 +5205,11 @@ "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz", "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=" }, + "is-promise": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", + "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=" + }, "is-property": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz", @@ -5159,11 +5260,6 @@ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" }, - "isemail": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/isemail/-/isemail-1.2.0.tgz", - "integrity": "sha1-vgPfjMPineTSxd9lASY/H6RZXpo=" - }, "isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", @@ -5182,7 +5278,7 @@ "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz", "integrity": "sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk=", "requires": { - "node-fetch": "1.7.2", + "node-fetch": "1.7.3", "whatwg-fetch": "2.0.3" } }, @@ -5192,22 +5288,34 @@ "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" }, "istanbul-api": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/istanbul-api/-/istanbul-api-1.1.13.tgz", - "integrity": "sha1-cZf2RBNgDr3+xjR6LcPU4D+X7Vo=", + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/istanbul-api/-/istanbul-api-1.1.14.tgz", + "integrity": "sha1-JbxXAffGgMD//5E95G42GaOm5oA=", "dev": true, "requires": { "async": "2.5.0", "fileset": "2.0.3", "istanbul-lib-coverage": "1.1.1", "istanbul-lib-hook": "1.0.7", - "istanbul-lib-instrument": "1.7.5", + "istanbul-lib-instrument": "1.8.0", "istanbul-lib-report": "1.1.1", "istanbul-lib-source-maps": "1.2.1", "istanbul-reports": "1.1.2", - "js-yaml": "3.9.1", + "js-yaml": "3.10.0", "mkdirp": "0.5.1", "once": "1.4.0" + }, + "dependencies": { + "js-yaml": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.10.0.tgz", + "integrity": "sha512-O2v52ffjLa9VeM43J4XocZE//WT9N0IiwDa3KSHH7Tu8CtH+1qM8SIZvnsTh6v+4yFy5KUY3BHUVwjpfAWsjIA==", + "dev": true, + "requires": { + "argparse": "1.0.9", + "esprima": "4.0.0" + } + } } }, "istanbul-lib-coverage": { @@ -5226,9 +5334,9 @@ } }, "istanbul-lib-instrument": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-1.7.5.tgz", - "integrity": "sha1-rbWW+PDLi5XnOSBjUaOKWGryGx4=", + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-1.8.0.tgz", + "integrity": "sha1-ZvbJQhzJ7EcE928tsIS6kHiitTI=", "dev": true, "requires": { "babel-generator": "6.26.0", @@ -5252,6 +5360,12 @@ "supports-color": "3.2.3" }, "dependencies": { + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, "supports-color": { "version": "3.2.3", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", @@ -5269,10 +5383,10 @@ "integrity": "sha512-mukVvSXCn9JQvdJl8wP/iPhqig0MRtuWuD4ZNKo6vB2Ik//AmhAKe3QnPN02dmkRe3lTudFk3rzoHhwU4hb94w==", "dev": true, "requires": { - "debug": "2.6.8", + "debug": "2.6.9", "istanbul-lib-coverage": "1.1.1", "mkdirp": "0.5.1", - "rimraf": "2.6.1", + "rimraf": "2.6.2", "source-map": "0.5.7" } }, @@ -5294,6 +5408,12 @@ "jest-cli": "19.0.2" }, "dependencies": { + "ansi-escapes": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-1.4.0.tgz", + "integrity": "sha1-06ioOzGapneTZisT52HHkRQiMG4=", + "dev": true + }, "bser": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/bser/-/bser-1.0.2.tgz", @@ -5320,9 +5440,9 @@ "chalk": "1.1.3", "graceful-fs": "4.1.11", "is-ci": "1.0.10", - "istanbul-api": "1.1.13", + "istanbul-api": "1.1.14", "istanbul-lib-coverage": "1.1.1", - "istanbul-lib-instrument": "1.7.5", + "istanbul-lib-instrument": "1.8.0", "jest-changed-files": "19.0.2", "jest-config": "19.0.4", "jest-environment-jsdom": "19.0.2", @@ -5370,7 +5490,7 @@ "dev": true, "requires": { "anymatch": "1.3.2", - "exec-sh": "0.2.0", + "exec-sh": "0.2.1", "fb-watchman": "1.9.2", "minimatch": "3.0.4", "minimist": "1.2.0", @@ -5388,6 +5508,18 @@ } } } + }, + "throat": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/throat/-/throat-3.2.0.tgz", + "integrity": "sha512-/EY8VpvlqJ+sFtLPeOgc8Pl7kQVOWv0woD87KTXVHPIAE842FGT+rokxIhe8xIUP1cfgrkt0as0vDLjDiMtr8w==", + "dev": true + }, + "watch": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/watch/-/watch-0.10.0.tgz", + "integrity": "sha1-d3mLLaD5kQ1ZXxrOWwwiWFIfIdw=", + "dev": true } } }, @@ -5440,7 +5572,7 @@ "dev": true, "requires": { "chalk": "1.1.3", - "diff": "3.3.0", + "diff": "3.3.1", "jest-matcher-utils": "19.0.0", "pretty-format": "19.0.0" }, @@ -5466,9 +5598,9 @@ } }, "jest-docblock": { - "version": "20.0.3", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-20.0.3.tgz", - "integrity": "sha1-F76phDQswz2DxQ++FUXqDvqkRxI=" + "version": "20.1.0-delta.4", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-20.1.0-delta.4.tgz", + "integrity": "sha512-apbBKyQ8ET8XQbOnsjIYTvmo2+FRZIsxUkfy75IbG+SH9ILQLjEfPXq3B/iMRCGoTAeI8lwxUQoLKGbw0mrTCQ==" }, "jest-environment-jsdom": { "version": "19.0.2", @@ -5498,53 +5630,36 @@ "dev": true }, "jest-haste-map": { - "version": "20.0.4", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-20.0.4.tgz", - "integrity": "sha1-ZT61XIic48Ah97lGk/IKQVm63wM=", + "version": "20.1.0-delta.4", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-20.1.0-delta.4.tgz", + "integrity": "sha512-L95f3nYoxUSzqzJdOq39ggklspwkqOq/FkzvH0SYhXdpv0c0kW8DXLovxfZy5FnK4rUyeVMBI9aNQ+TvZHKT3Q==", "requires": { "fb-watchman": "2.0.0", "graceful-fs": "4.1.11", - "jest-docblock": "20.0.3", + "jest-docblock": "20.1.0-delta.4", "micromatch": "2.3.11", - "sane": "1.6.0", + "sane": "2.2.0", "worker-farm": "1.5.0" }, "dependencies": { - "bser": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bser/-/bser-1.0.2.tgz", - "integrity": "sha1-OBEWlwsqbe6lZG3RXdcnhES1YWk=", - "requires": { - "node-int64": "0.4.0" - } - }, "minimist": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" }, "sane": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/sane/-/sane-1.6.0.tgz", - "integrity": "sha1-lhDEUjB6E10pwf3+JUcDQYDEZ3U=", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/sane/-/sane-2.2.0.tgz", + "integrity": "sha512-OSJxhHO0CgPUw3lUm3GhfREAfza45smvEI9ozuFrxKG10GHVo0ryW9FK5VYlLvxj0SV7HVKHW0voYJIRu27GWg==", "requires": { "anymatch": "1.3.2", - "exec-sh": "0.2.0", - "fb-watchman": "1.9.2", + "exec-sh": "0.2.1", + "fb-watchman": "2.0.0", + "fsevents": "1.1.2", "minimatch": "3.0.4", "minimist": "1.2.0", "walker": "1.0.7", - "watch": "0.10.0" - }, - "dependencies": { - "fb-watchman": { - "version": "1.9.2", - "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-1.9.2.tgz", - "integrity": "sha1-okz0eCf4LTj7Waaa1wt247auc4M=", - "requires": { - "bser": "1.0.2" - } - } + "watch": "0.18.0" } } } @@ -5672,7 +5787,7 @@ "dev": true, "requires": { "anymatch": "1.3.2", - "exec-sh": "0.2.0", + "exec-sh": "0.2.1", "fb-watchman": "1.9.2", "minimatch": "3.0.4", "minimist": "1.2.0", @@ -5690,6 +5805,12 @@ } } } + }, + "watch": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/watch/-/watch-0.10.0.tgz", + "integrity": "sha1-d3mLLaD5kQ1ZXxrOWwwiWFIfIdw=", + "dev": true } } }, @@ -5710,7 +5831,7 @@ "requires": { "babel-core": "6.26.0", "babel-jest": "19.0.0", - "babel-plugin-istanbul": "4.1.4", + "babel-plugin-istanbul": "4.1.5", "chalk": "1.1.3", "graceful-fs": "4.1.11", "jest-config": "19.0.4", @@ -5760,7 +5881,7 @@ "dev": true, "requires": { "anymatch": "1.3.2", - "exec-sh": "0.2.0", + "exec-sh": "0.2.1", "fb-watchman": "1.9.2", "minimatch": "3.0.4", "minimist": "1.2.0", @@ -5784,6 +5905,12 @@ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", "dev": true + }, + "watch": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/watch/-/watch-0.10.0.tgz", + "integrity": "sha1-d3mLLaD5kQ1ZXxrOWwwiWFIfIdw=", + "dev": true } } }, @@ -5870,21 +5997,10 @@ } } }, - "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" - } - }, "js-beautify": { - "version": "1.6.14", - "resolved": "https://registry.npmjs.org/js-beautify/-/js-beautify-1.6.14.tgz", - "integrity": "sha1-07j3Mi0CuSd9WL0jgmTDJ+WARM0=", + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/js-beautify/-/js-beautify-1.7.3.tgz", + "integrity": "sha512-mT9skIu0OWfBQPXOGJ4CgpPBgo3tj9gxi7weQdeaxxmpKIADK2g0xS0qCtQml7Ny3Ick5Cno093LKGZTzDd2UQ==", "requires": { "config-chain": "1.1.11", "editorconfig": "0.13.3", @@ -5898,14 +6014,9 @@ "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=" }, "js-yaml": { - "version": "3.9.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.9.1.tgz", - "integrity": "sha512-CbcG379L1e+mWBnLvHWWeLs8GyV/EMw862uLI3c+GxVyDHWZcjZinwuBd3iW2pgxgIlksW/1vNJa4to+RvDOww==", - "dev": true, - "requires": { - "argparse": "1.0.9", - "esprima": "4.0.0" - } + "version": "0.3.7", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-0.3.7.tgz", + "integrity": "sha1-1znY7oZGHlSzVNan19HyrZoWf2I=" }, "jsbn": { "version": "0.1.1", @@ -5913,27 +6024,32 @@ "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", "optional": true }, + "jschardet": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/jschardet/-/jschardet-1.5.1.tgz", + "integrity": "sha512-vE2hT1D0HLZCLLclfBSfkfTTedhVj0fubHpJBHKwwUWX0nSbhPAfk+SG9rTX95BYNmau8rGFfCeaT6T5OW1C2A==" + }, "jsdom": { "version": "9.12.0", "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-9.12.0.tgz", "integrity": "sha1-6MVG//ywbADUgzyoRBD+1/igl9Q=", "dev": true, "requires": { - "abab": "1.0.3", + "abab": "1.0.4", "acorn": "4.0.13", "acorn-globals": "3.1.0", "array-equal": "1.0.0", "content-type-parser": "1.0.1", "cssom": "0.3.2", "cssstyle": "0.2.37", - "escodegen": "1.8.1", + "escodegen": "1.9.0", "html-encoding-sniffer": "1.0.1", - "nwmatcher": "1.4.1", + "nwmatcher": "1.4.2", "parse5": "1.5.1", - "request": "2.81.0", + "request": "2.83.0", "sax": "1.2.4", "symbol-tree": "3.2.2", - "tough-cookie": "2.3.2", + "tough-cookie": "2.3.3", "webidl-conversions": "4.0.2", "whatwg-encoding": "1.0.1", "whatwg-url": "4.8.0", @@ -5959,11 +6075,21 @@ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz", "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=" }, + "jsmin": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/jsmin/-/jsmin-1.0.1.tgz", + "integrity": "sha1-570NzWSWw79IYyNb9GGj2YqjuYw=" + }, "json-schema": { "version": "0.2.3", "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" }, + "json-schema-traverse": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", + "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=" + }, "json-stable-stringify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", @@ -6010,13 +6136,6 @@ "extsprintf": "1.3.0", "json-schema": "0.2.3", "verror": "1.10.0" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" - } } }, "jsx-ast-utils": { @@ -6030,6 +6149,17 @@ "resolved": "https://registry.npmjs.org/just-extend/-/just-extend-1.1.22.tgz", "integrity": "sha1-MzCvdWyralQnAMZLLk5KoGLVL/8=" }, + "jxLoader": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jxLoader/-/jxLoader-0.1.1.tgz", + "integrity": "sha1-ATTqUUTlM7WU/B/yX/GU4jXFPs0=", + "requires": { + "js-yaml": "0.3.7", + "moo-server": "1.3.0", + "promised-io": "0.3.5", + "walker": "1.0.7" + } + }, "kind-of": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", @@ -6177,6 +6307,11 @@ "lodash._root": "3.0.1" } }, + "lodash.get": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", + "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=" + }, "lodash.groupby": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/lodash.groupby/-/lodash.groupby-4.6.0.tgz", @@ -6278,6 +6413,11 @@ "pseudomap": "1.0.2" } }, + "macos-release": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/macos-release/-/macos-release-1.1.0.tgz", + "integrity": "sha512-mmLbumEYMi5nXReB9js3WGsB8UE6cDBWyIO62Z4DNx6GbRhDxHNjA1MlzSpJ2S2KM1wyiPRA0d19uHWYYvMHjA==" + }, "makeerror": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.11.tgz", @@ -6304,21 +6444,29 @@ "resolved": "https://registry.npmjs.org/merge/-/merge-1.2.0.tgz", "integrity": "sha1-dTHjnUlJwoGma4xabgJl6LBYlNo=" }, - "method-override": { - "version": "2.3.9", - "resolved": "https://registry.npmjs.org/method-override/-/method-override-2.3.9.tgz", - "integrity": "sha1-vRUfLONM8Bp2ykAKuVwBKxAtj3E=", + "merge-stream": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-1.0.1.tgz", + "integrity": "sha1-QEEgLVCKNCugAXQAjfDCUbjBNeE=", "requires": { - "debug": "2.6.8", + "readable-stream": "2.3.3" + } + }, + "method-override": { + "version": "2.3.10", + "resolved": "https://registry.npmjs.org/method-override/-/method-override-2.3.10.tgz", + "integrity": "sha1-49r41d7hDdLc59SuiNYrvud0drQ=", + "requires": { + "debug": "2.6.9", "methods": "1.1.2", - "parseurl": "1.3.1", - "vary": "1.1.1" + "parseurl": "1.3.2", + "vary": "1.1.2" }, "dependencies": { "vary": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.1.tgz", - "integrity": "sha1-Z1Neu2lMHVIldFeYRmUyP1h+jTc=" + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" } } }, @@ -6327,6 +6475,150 @@ "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" }, + "metro-bundler": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/metro-bundler/-/metro-bundler-0.11.0.tgz", + "integrity": "sha512-z1b2HtOa1uJVrp5KOx9bvoYRPD8Gn5x+gyFTIGSev7hbDzyAmUoooFUf8yLAfyIVIb4TZGB+tjkn+Skmn41aNQ==", + "requires": { + "absolute-path": "0.0.0", + "async": "2.5.0", + "babel-core": "6.26.0", + "babel-generator": "6.26.0", + "babel-plugin-external-helpers": "6.22.0", + "babel-preset-es2015-node": "6.1.1", + "babel-preset-fbjs": "2.1.4", + "babel-preset-react-native": "2.1.0", + "babel-register": "6.26.0", + "babylon": "6.18.0", + "chalk": "1.1.3", + "concat-stream": "1.6.0", + "core-js": "2.5.1", + "debug": "2.6.9", + "denodeify": "1.2.1", + "fbjs": "0.8.12", + "graceful-fs": "4.1.11", + "image-size": "0.6.1", + "jest-docblock": "20.1.0-chi.1", + "jest-haste-map": "20.1.0-chi.1", + "json-stable-stringify": "1.0.1", + "json5": "0.4.0", + "left-pad": "1.1.3", + "lodash": "4.17.4", + "merge-stream": "1.0.1", + "mime-types": "2.1.11", + "mkdirp": "0.5.1", + "request": "2.83.0", + "rimraf": "2.6.2", + "source-map": "0.5.7", + "temp": "0.8.3", + "throat": "4.1.0", + "uglify-js": "2.7.5", + "write-file-atomic": "1.3.4", + "xpipe": "1.0.5" + }, + "dependencies": { + "babel-preset-react-native": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/babel-preset-react-native/-/babel-preset-react-native-2.1.0.tgz", + "integrity": "sha1-kBPr2C2hyIECv1iIEP9Z4gnKK4o=", + "requires": { + "babel-plugin-check-es2015-constants": "6.22.0", + "babel-plugin-react-transform": "2.0.2", + "babel-plugin-syntax-async-functions": "6.13.0", + "babel-plugin-syntax-class-properties": "6.13.0", + "babel-plugin-syntax-flow": "6.18.0", + "babel-plugin-syntax-jsx": "6.18.0", + "babel-plugin-syntax-trailing-function-commas": "6.22.0", + "babel-plugin-transform-class-properties": "6.24.1", + "babel-plugin-transform-es2015-arrow-functions": "6.22.0", + "babel-plugin-transform-es2015-block-scoping": "6.26.0", + "babel-plugin-transform-es2015-classes": "6.24.1", + "babel-plugin-transform-es2015-computed-properties": "6.24.1", + "babel-plugin-transform-es2015-destructuring": "6.23.0", + "babel-plugin-transform-es2015-for-of": "6.23.0", + "babel-plugin-transform-es2015-function-name": "6.24.1", + "babel-plugin-transform-es2015-literals": "6.22.0", + "babel-plugin-transform-es2015-modules-commonjs": "6.7.7", + "babel-plugin-transform-es2015-parameters": "6.24.1", + "babel-plugin-transform-es2015-shorthand-properties": "6.24.1", + "babel-plugin-transform-es2015-spread": "6.22.0", + "babel-plugin-transform-es2015-template-literals": "6.22.0", + "babel-plugin-transform-flow-strip-types": "6.22.0", + "babel-plugin-transform-object-assign": "6.22.0", + "babel-plugin-transform-object-rest-spread": "6.26.0", + "babel-plugin-transform-react-display-name": "6.25.0", + "babel-plugin-transform-react-jsx": "6.24.1", + "babel-plugin-transform-react-jsx-source": "6.22.0", + "babel-plugin-transform-regenerator": "6.6.5", + "react-transform-hmr": "1.0.4" + } + }, + "fbjs": { + "version": "0.8.12", + "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-0.8.12.tgz", + "integrity": "sha1-ELXZL3bUVXX9Y6IX1OoCvqL47QQ=", + "requires": { + "core-js": "1.2.7", + "isomorphic-fetch": "2.2.1", + "loose-envify": "1.3.1", + "object-assign": "4.1.1", + "promise": "7.3.1", + "setimmediate": "1.0.5", + "ua-parser-js": "0.7.14" + }, + "dependencies": { + "core-js": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-1.2.7.tgz", + "integrity": "sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY=" + } + } + }, + "jest-docblock": { + "version": "20.1.0-chi.1", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-20.1.0-chi.1.tgz", + "integrity": "sha512-zX64LtNgTgphO06akqDxKQhVET3uwjZTRalqG2jJoWyEdSUYGp8yjjqicJ7rRu5ZbwnuaB8yqqP9Exu59oDNaA==" + }, + "jest-haste-map": { + "version": "20.1.0-chi.1", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-20.1.0-chi.1.tgz", + "integrity": "sha512-G5Bjy3NoSBOR4T5FGqu6VlUJk7BnGUfRXkPcU26HTE06j5T0HEnVoScUsP1+XHSSw0XKq84N2LquppHbg3buxg==", + "requires": { + "fb-watchman": "2.0.0", + "graceful-fs": "4.1.11", + "jest-docblock": "20.1.0-chi.1", + "micromatch": "2.3.11", + "sane": "2.2.0", + "worker-farm": "1.5.0" + } + }, + "json5": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/json5/-/json5-0.4.0.tgz", + "integrity": "sha1-BUNS5MTIDIbAkjh31EneF2pzLI0=" + }, + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" + }, + "sane": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/sane/-/sane-2.2.0.tgz", + "integrity": "sha512-OSJxhHO0CgPUw3lUm3GhfREAfza45smvEI9ozuFrxKG10GHVo0ryW9FK5VYlLvxj0SV7HVKHW0voYJIRu27GWg==", + "requires": { + "anymatch": "1.3.2", + "exec-sh": "0.2.1", + "fb-watchman": "2.0.0", + "fsevents": "1.1.2", + "minimatch": "3.0.4", + "minimist": "1.2.0", + "walker": "1.0.7", + "watch": "0.18.0" + } + } + } + }, "micromatch": { "version": "2.3.11", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", @@ -6344,18 +6636,18 @@ "normalize-path": "2.1.1", "object.omit": "2.0.1", "parse-glob": "3.0.4", - "regex-cache": "0.4.3" + "regex-cache": "0.4.4" } }, "mime": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.3.6.tgz", - "integrity": "sha1-WR2E02U6awtKO5343lqoEI5y5eA=" + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", + "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==" }, "mime-db": { - "version": "1.29.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.29.0.tgz", - "integrity": "sha1-SNJtI1WJZRcErFkWygYAGRQmaHg=" + "version": "1.30.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.30.0.tgz", + "integrity": "sha1-dMZD2i3Z1qRTmZY0ZbJtXKfXHwE=" }, "mime-types": { "version": "2.1.11", @@ -6414,10 +6706,10 @@ "require-relative": "0.8.7" } }, - "moment": { - "version": "2.18.1", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.18.1.tgz", - "integrity": "sha1-w2GT3Tzhwu7SrbfIAtu8d6gbHA8=" + "moo-server": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/moo-server/-/moo-server-1.3.0.tgz", + "integrity": "sha1-XceVaVZaENbv7VQ5SR5p0jkuWPE=" }, "morgan": { "version": "1.6.1", @@ -6492,15 +6784,14 @@ } }, "mute-stream": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.5.tgz", - "integrity": "sha1-j7+rsKmKJT0xhDMfno3rc3L6xsA=" + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", + "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=" }, "nan": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.6.2.tgz", - "integrity": "sha1-5P805slf37WuzAjeZZb0NgWn20U=", - "dev": true, + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.7.0.tgz", + "integrity": "sha1-2Vv3IeyHfgjbJ27T/G63j5CDrUY=", "optional": true }, "native-promise-only": { @@ -6520,14 +6811,15 @@ "integrity": "sha1-Jp1cR2gQ7JLtvntsLygxY4T5p+g=" }, "nise": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/nise/-/nise-1.0.1.tgz", - "integrity": "sha1-DakrEKhU6XwPSW9sKEWjASgLPu8=", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/nise/-/nise-1.1.0.tgz", + "integrity": "sha512-lIFidCxB0mJGyq1i33tLRNojtMoYX95EAI7WQEU+/ees0w6hvXZQHZ7WD130Tjeh5+YJAUVLfQ3k/s9EA8jj+w==", "requires": { "formatio": "1.2.0", "just-extend": "1.1.22", "lolex": "1.6.0", - "path-to-regexp": "1.7.0" + "path-to-regexp": "1.7.0", + "text-encoding": "0.6.4" }, "dependencies": { "lolex": { @@ -6538,9 +6830,9 @@ } }, "node-fetch": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.2.tgz", - "integrity": "sha512-xZZUq2yDhKMIn/UgG5q//IZSNLJIwW2QxS14CNH5spuiXkITM2pUitjdq58yLSaU7m4M0wBNaM2Gh/ggY4YJig==", + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz", + "integrity": "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==", "requires": { "encoding": "0.1.12", "is-stream": "1.1.0" @@ -6573,7 +6865,7 @@ "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", "requires": { - "abbrev": "1.1.0" + "abbrev": "1.1.1" } }, "normalize-package-data": { @@ -6619,9 +6911,9 @@ "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" }, "nwmatcher": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/nwmatcher/-/nwmatcher-1.4.1.tgz", - "integrity": "sha1-eumwew6oBNt+JfBctf5Al9TklJ8=", + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/nwmatcher/-/nwmatcher-1.4.2.tgz", + "integrity": "sha512-QMkCGQFYp5p+zwU3INntLmz1HMfSx9dMVJMYKmE1yuSf/22Wjo6VPFa405mCLUuQn9lbQvH2DZN9lt10ZNvtAg==", "dev": true }, "oauth-sign": { @@ -6647,7 +6939,7 @@ "dev": true, "requires": { "define-properties": "1.1.2", - "function-bind": "1.1.0", + "function-bind": "1.1.1", "object-keys": "1.0.11" } }, @@ -6682,9 +6974,12 @@ } }, "onetime": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz", - "integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=" + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", + "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", + "requires": { + "mimic-fn": "1.1.0" + } }, "opn": { "version": "3.0.3", @@ -6742,6 +7037,15 @@ "lcid": "1.0.0" } }, + "os-name": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/os-name/-/os-name-2.0.1.tgz", + "integrity": "sha1-uaOGNhwXrjohc27wWZQFyajF3F4=", + "requires": { + "macos-release": "1.1.0", + "win-release": "1.1.1" + } + }, "os-tmpdir": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", @@ -6802,9 +7106,9 @@ "dev": true }, "parseurl": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.1.tgz", - "integrity": "sha1-yKuMkiO6NIiKpkopeyiFO+wY2lY=" + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz", + "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=" }, "path-exists": { "version": "2.1.0", @@ -6872,9 +7176,9 @@ "integrity": "sha1-z4uvrm7d/0tafvsYUmnqr0YQ3b0=" }, "performance-now": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-0.2.0.tgz", - "integrity": "sha1-M+8wxcd9TqIcWlOGnZG1bY8lVeU=" + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" }, "pify": { "version": "2.3.0", @@ -6972,13 +7276,19 @@ "asap": "2.0.6" } }, + "promised-io": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/promised-io/-/promised-io-0.3.5.tgz", + "integrity": "sha1-StIXuzZYvKrplGsXqGaOzYUeE1Y=" + }, "prop-types": { - "version": "15.5.10", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.5.10.tgz", - "integrity": "sha1-J5ffwxJhguOpXj37suiT3ddFYVQ=", + "version": "15.6.0", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.6.0.tgz", + "integrity": "sha1-zq8IMCL8RrSjX2nhPvda7Q1jmFY=", "requires": { - "fbjs": "0.8.14", - "loose-envify": "1.3.1" + "fbjs": "0.8.16", + "loose-envify": "1.3.1", + "object-assign": "4.1.1" } }, "proto-list": { @@ -7076,13 +7386,15 @@ } }, "react": { - "version": "16.0.0-alpha.6", - "resolved": "https://registry.npmjs.org/react/-/react-16.0.0-alpha.6.tgz", - "integrity": "sha1-LMsa+0QlzMEveKEjpmby5MFBrbk=", + "version": "16.0.0-alpha.12", + "resolved": "https://registry.npmjs.org/react/-/react-16.0.0-alpha.12.tgz", + "integrity": "sha1-jFlIUoFIXfMZtvd2gtjdBiHAgZQ=", "requires": { - "fbjs": "0.8.14", + "create-react-class": "15.6.2", + "fbjs": "0.8.16", "loose-envify": "1.3.1", - "object-assign": "4.1.1" + "object-assign": "4.1.1", + "prop-types": "15.6.0" } }, "react-clone-referenced-element": { @@ -7096,9 +7408,9 @@ "integrity": "sha1-vNMUeAJ7ZLMznxCJIatSC0MT3Cw=" }, "react-devtools-core": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/react-devtools-core/-/react-devtools-core-2.5.0.tgz", - "integrity": "sha512-sLlDHiY+DoOnzEXdLwSGxob3MtiIwM54s6FBbVAc/iOorNd8Nv1aVUTsZpTnJXDYa8p5VPNdCR4ATQ0HcIBh+Q==", + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/react-devtools-core/-/react-devtools-core-2.5.2.tgz", + "integrity": "sha1-+XvsWvrl2TGNFneAZeDCFMTVcUw=", "requires": { "shell-quote": "1.6.1", "ws": "2.3.1" @@ -7121,9 +7433,9 @@ } }, "react-native": { - "version": "0.44.3", - "resolved": "https://registry.npmjs.org/react-native/-/react-native-0.44.3.tgz", - "integrity": "sha1-BFUOHN/GGacS8/WWnWjNfC3EwHM=", + "version": "0.48.4", + "resolved": "https://registry.npmjs.org/react-native/-/react-native-0.48.4.tgz", + "integrity": "sha1-8wXp/vBppbP2pyUN3VD2A88wqy0=", "requires": { "absolute-path": "0.0.0", "art": "0.10.1", @@ -7133,12 +7445,13 @@ "babel-plugin-external-helpers": "6.22.0", "babel-plugin-syntax-trailing-function-commas": "6.22.0", "babel-plugin-transform-async-to-generator": "6.16.0", + "babel-plugin-transform-class-properties": "6.24.1", "babel-plugin-transform-flow-strip-types": "6.22.0", "babel-plugin-transform-object-rest-spread": "6.26.0", "babel-polyfill": "6.26.0", "babel-preset-es2015-node": "6.1.1", "babel-preset-fbjs": "2.1.4", - "babel-preset-react-native": "1.9.2", + "babel-preset-react-native": "2.1.0", "babel-register": "6.26.0", "babel-runtime": "6.26.0", "babel-traverse": "6.26.0", @@ -7150,68 +7463,69 @@ "commander": "2.11.0", "concat-stream": "1.6.0", "connect": "2.30.2", - "core-js": "2.5.0", - "debug": "2.6.8", + "core-js": "2.5.1", + "create-react-class": "15.6.2", + "debug": "2.6.9", "denodeify": "1.2.1", + "envinfo": "3.4.1", + "errno": "0.1.4", "event-target-shim": "1.1.1", - "fbjs": "0.8.14", + "fbjs": "0.8.12", "fbjs-scripts": "0.7.1", "form-data": "2.3.1", "fs-extra": "1.0.0", "glob": "7.1.2", "graceful-fs": "4.1.11", - "image-size": "0.3.5", - "immutable": "3.7.6", - "imurmurhash": "0.1.4", - "inquirer": "0.12.0", - "jest-haste-map": "20.0.4", - "joi": "6.10.1", + "inquirer": "3.3.0", + "jest-haste-map": "20.1.0-delta.4", "json-stable-stringify": "1.0.1", "json5": "0.4.0", "left-pad": "1.1.3", "lodash": "4.17.4", - "mime": "1.3.6", + "merge-stream": "1.0.1", + "metro-bundler": "0.11.0", + "mime": "1.4.1", "mime-types": "2.1.11", "minimist": "1.2.0", "mkdirp": "0.5.1", - "node-fetch": "1.7.2", + "node-fetch": "1.7.3", "npmlog": "2.0.4", "opn": "3.0.3", "optimist": "0.6.1", "plist": "1.2.0", "pretty-format": "4.3.1", "promise": "7.3.1", + "prop-types": "15.6.0", "react-clone-referenced-element": "1.0.1", - "react-devtools-core": "2.5.0", + "react-devtools-core": "2.5.2", "react-timer-mixin": "0.13.3", "react-transform-hmr": "1.0.4", "rebound": "0.0.13", "regenerator-runtime": "0.9.6", - "request": "2.81.0", - "rimraf": "2.6.1", + "request": "2.83.0", + "rimraf": "2.6.2", "sane": "1.4.1", "semver": "5.4.1", "shell-quote": "1.6.1", "source-map": "0.5.7", "stacktrace-parser": "0.1.4", "temp": "0.8.3", - "throat": "3.2.0", - "uglify-js": "2.7.5", + "throat": "4.1.0", "whatwg-fetch": "1.1.1", "wordwrap": "1.0.0", - "worker-farm": "1.5.0", "write-file-atomic": "1.3.4", "ws": "1.1.4", "xcode": "0.9.3", "xmldoc": "0.4.0", "xpipe": "1.0.5", + "xtend": "4.0.1", "yargs": "6.6.0" }, "dependencies": { "babel-preset-react-native": { - "version": "1.9.2", - "resolved": "https://registry.npmjs.org/babel-preset-react-native/-/babel-preset-react-native-1.9.2.tgz", - "integrity": "sha1-sird0uNV/zs5Zxt5voB+Ut+hRfI=", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/babel-preset-react-native/-/babel-preset-react-native-2.1.0.tgz", + "integrity": "sha1-kBPr2C2hyIECv1iIEP9Z4gnKK4o=", "requires": { "babel-plugin-check-es2015-constants": "6.22.0", "babel-plugin-react-transform": "2.0.2", @@ -7249,7 +7563,7 @@ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", "requires": { - "core-js": "2.5.0", + "core-js": "2.5.1", "regenerator-runtime": "0.11.0" }, "dependencies": { @@ -7260,6 +7574,27 @@ } } }, + "fbjs": { + "version": "0.8.12", + "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-0.8.12.tgz", + "integrity": "sha1-ELXZL3bUVXX9Y6IX1OoCvqL47QQ=", + "requires": { + "core-js": "1.2.7", + "isomorphic-fetch": "2.2.1", + "loose-envify": "1.3.1", + "object-assign": "4.1.1", + "promise": "7.3.1", + "setimmediate": "1.0.5", + "ua-parser-js": "0.7.14" + }, + "dependencies": { + "core-js": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-1.2.7.tgz", + "integrity": "sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY=" + } + } + }, "json5": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/json5/-/json5-0.4.0.tgz", @@ -7309,28 +7644,23 @@ "integrity": "sha1-hTCp0GlmE60lvF1Cg/HjxUHsK8Q=" }, "react-native-tab-view": { - "version": "0.0.65", - "resolved": "https://registry.npmjs.org/react-native-tab-view/-/react-native-tab-view-0.0.65.tgz", - "integrity": "sha1-toXqMIH/fJZIbNmXNhAmxAcwLFk=", + "version": "0.0.69", + "resolved": "https://registry.npmjs.org/react-native-tab-view/-/react-native-tab-view-0.0.69.tgz", + "integrity": "sha512-0K1wr40cDN90vZWZl3BfwYnUDb2mfRqFHIqkIsJCOlgu6t3vU9/I/afu/whpB3chKgumB925g5qBeC/OdGAODA==", "requires": { - "prop-types": "15.5.10" + "prop-types": "15.6.0" } }, "react-native-vector-icons": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/react-native-vector-icons/-/react-native-vector-icons-4.3.0.tgz", - "integrity": "sha512-K6AMkvkvCnYS64ZeUVa/ONSP7Iz8IbQWrG5UjlfP7uya12vR8aLUwm+MI/suIIKUhRFjvmIPskmc/i15pCTkiw==", + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/react-native-vector-icons/-/react-native-vector-icons-4.4.0.tgz", + "integrity": "sha512-mh4iDaUn8SPXDwN8lARabYpFWCbVv1PYo3WOnW6Z0LZBS/mhv6v7lMwcizM3RAo9PdZhcklZQCNWB0HdH4APRg==", "requires": { "lodash": "4.17.4", - "prop-types": "15.5.10", + "prop-types": "15.6.0", "yargs": "8.0.2" }, "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" - }, "camelcase": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", @@ -7366,6 +7696,14 @@ "locate-path": "2.0.0" } }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "requires": { + "number-is-nan": "1.0.1" + } + }, "load-json-file": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", @@ -7414,30 +7752,6 @@ "read-pkg": "2.0.0" } }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "requires": { - "is-fullwidth-code-point": "2.0.0", - "strip-ansi": "4.0.0" - }, - "dependencies": { - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "requires": { - "ansi-regex": "3.0.0" - } - } - } - }, "strip-bom": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", @@ -7479,17 +7793,17 @@ } }, "react-navigation": { - "version": "1.0.0-beta.11", - "resolved": "https://registry.npmjs.org/react-navigation/-/react-navigation-1.0.0-beta.11.tgz", - "integrity": "sha1-QnHtsjzbzG64hgL3/eCnfw73oWA=", + "version": "1.0.0-beta.13", + "resolved": "https://registry.npmjs.org/react-navigation/-/react-navigation-1.0.0-beta.13.tgz", + "integrity": "sha512-MY3aJBsBZw8+7dpZnNmp0scRy2z0TtYYVET6bZzxf4t30MIqsqSwY2hadsNrZiVR6UZw2o+sVhG9r0QarPD6bQ==", "requires": { + "babel-plugin-transform-define": "1.3.0", "clamp": "1.0.1", - "fbjs": "0.8.14", - "hoist-non-react-statics": "1.2.0", + "hoist-non-react-statics": "2.3.1", "path-to-regexp": "1.7.0", - "prop-types": "15.5.10", + "prop-types": "15.6.0", "react-native-drawer-layout-polyfill": "1.3.2", - "react-native-tab-view": "0.0.65" + "react-native-tab-view": "0.0.69" } }, "react-proxy": { @@ -7506,28 +7820,20 @@ "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-5.0.6.tgz", "integrity": "sha512-8taaaGu+J7PMJQDJrk/xiWEYQmdo3mkXw6wPr3K3LxvXis3Fymiq7c13S+Tpls/AyNUAsoONkU81AP0RA6y6Vw==", "requires": { - "hoist-non-react-statics": "2.3.0", + "hoist-non-react-statics": "2.3.1", "invariant": "2.2.2", "lodash": "4.17.4", "lodash-es": "4.17.4", "loose-envify": "1.3.1", - "prop-types": "15.5.10" - }, - "dependencies": { - "hoist-non-react-statics": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-2.3.0.tgz", - "integrity": "sha1-7eFjGML/H5/joCU5a6Bv1MRGCLs=" - } + "prop-types": "15.6.0" } }, "react-test-renderer": { - "version": "15.4.2", - "resolved": "https://registry.npmjs.org/react-test-renderer/-/react-test-renderer-15.4.2.tgz", - "integrity": "sha1-J+Hf9dJtDoMPmWFMSHYivIMUFvM=", - "dev": true, + "version": "16.0.0-alpha.12", + "resolved": "https://registry.npmjs.org/react-test-renderer/-/react-test-renderer-16.0.0-alpha.12.tgz", + "integrity": "sha1-nkzF2M6L/KcneDQN4+FFS51sDMU=", "requires": { - "fbjs": "0.8.14", + "fbjs": "0.8.16", "object-assign": "4.1.1" } }, @@ -7595,10 +7901,28 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/readline2/-/readline2-1.0.1.tgz", "integrity": "sha1-QQWWCP/BVHV7cV2ZidGZ/783LjU=", + "dev": true, "requires": { "code-point-at": "1.1.0", "is-fullwidth-code-point": "1.0.0", "mute-stream": "0.0.5" + }, + "dependencies": { + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dev": true, + "requires": { + "number-is-nan": "1.0.1" + } + }, + "mute-stream": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.5.tgz", + "integrity": "sha1-j7+rsKmKJT0xhDMfno3rc3L6xsA=", + "dev": true + } } }, "rebound": { @@ -7645,9 +7969,9 @@ } }, "redux-persist": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/redux-persist/-/redux-persist-4.9.1.tgz", - "integrity": "sha512-XoOmfPyo9GEU/WLH9FgB47dNIN9l5ArjHes4o7vUWx9nxZoPxnVodhuHdyc4Ot+fMkdj3L2LTqSHhwrkr0QFUg==", + "version": "4.10.1", + "resolved": "https://registry.npmjs.org/redux-persist/-/redux-persist-4.10.1.tgz", + "integrity": "sha512-ZUjCuSxdrTrxbYBio4CBv3ODYKsjSfR27RweDIia9335YEu7WptWpe+DmiqDRqt3QsV1hMRjpSoPiNwKiJ+D6w==", "requires": { "json-stringify-safe": "5.0.1", "lodash": "4.17.4", @@ -7660,9 +7984,9 @@ "integrity": "sha1-5hWhbha0ehmlFXZhM9Hj6Zt4UuU=" }, "regenerate": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.3.2.tgz", - "integrity": "sha1-0ZQcZ7rUN+G+dkM63Vs4X5WxkmA=" + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.3.3.tgz", + "integrity": "sha512-jVpo1GadrDAK59t/0jRx5VxYWQEDkkEKi6+HjE3joFVLfDOh9Xrdh0dF1eSq+BI/SwvTQ44gSscJ8N5zYL61sg==" }, "regenerator-runtime": { "version": "0.11.0", @@ -7670,12 +7994,11 @@ "integrity": "sha512-/aA0kLeRb5N9K0d4fw7ooEbI+xDe+DKD499EQqygGqeS8N3xto15p09uY2xj7ixP81sNPXvRLnAQIqdVStgb1A==" }, "regex-cache": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.3.tgz", - "integrity": "sha1-mxpsNdTQ3871cRrmUejp09cRQUU=", + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz", + "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==", "requires": { - "is-equal-shallow": "0.1.3", - "is-primitive": "2.0.0" + "is-equal-shallow": "0.1.3" } }, "regexpu-core": { @@ -7683,7 +8006,7 @@ "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-2.0.0.tgz", "integrity": "sha1-SdA4g3uNz4v6W5pCE5k45uoq4kA=", "requires": { - "regenerate": "1.3.2", + "regenerate": "1.3.3", "regjsgen": "0.2.0", "regjsparser": "0.1.5" } @@ -7737,58 +8060,46 @@ "integrity": "sha1-KbvZIHinOfC8zitO5B6DeVNSKSQ=" }, "request": { - "version": "2.81.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.81.0.tgz", - "integrity": "sha1-xpKJRqDgbF+Nb4qTM0af/aRimKA=", + "version": "2.83.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.83.0.tgz", + "integrity": "sha512-lR3gD69osqm6EYLk9wB/G1W/laGWjzH90t1vEa2xuxHD5KUrSzp9pUSfTm+YC5Nxt2T8nMPEvKlhbQayU7bgFw==", "requires": { - "aws-sign2": "0.6.0", + "aws-sign2": "0.7.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", + "form-data": "2.3.1", + "har-validator": "5.0.3", + "hawk": "6.0.2", + "http-signature": "1.2.0", "is-typedarray": "1.0.0", "isstream": "0.1.2", "json-stringify-safe": "5.0.1", - "mime-types": "2.1.11", + "mime-types": "2.1.17", "oauth-sign": "0.8.2", - "performance-now": "0.2.0", - "qs": "6.4.0", + "performance-now": "2.1.0", + "qs": "6.5.1", "safe-buffer": "5.1.1", "stringstream": "0.0.5", - "tough-cookie": "2.3.2", + "tough-cookie": "2.3.3", "tunnel-agent": "0.6.0", "uuid": "3.1.0" }, "dependencies": { - "form-data": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.1.4.tgz", - "integrity": "sha1-M8GDrPGTJ27KqYFDpp6Uv+4XUNE=", + "mime-types": { + "version": "2.1.17", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.17.tgz", + "integrity": "sha1-Cdejk/A+mVp5+K+Fe3Cp4KsWVXo=", "requires": { - "asynckit": "0.4.0", - "combined-stream": "1.0.5", - "mime-types": "2.1.16" - }, - "dependencies": { - "mime-types": { - "version": "2.1.16", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.16.tgz", - "integrity": "sha1-K4WKUuXs1RbbiXrCvodIeDBpjiM=", - "requires": { - "mime-db": "1.29.0" - } - } + "mime-db": "1.30.0" } }, "qs": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.4.0.tgz", - "integrity": "sha1-E+JtKK1rD/qpExLNO/cI7TUecjM=" + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz", + "integrity": "sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A==" } } }, @@ -7849,12 +8160,12 @@ } }, "restore-cursor": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-1.0.1.tgz", - "integrity": "sha1-NGYfRohjJ/7SmRR5FSJS35LapUE=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", + "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", "requires": { - "exit-hook": "1.1.1", - "onetime": "1.1.0" + "onetime": "2.0.1", + "signal-exit": "3.0.2" } }, "right-align": { @@ -7866,9 +8177,9 @@ } }, "rimraf": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.1.tgz", - "integrity": "sha1-wjOOxkPfeht/5cVPqG9XQopV8z0=", + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", + "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", "requires": { "glob": "7.1.2" } @@ -7879,17 +8190,25 @@ "integrity": "sha1-8z/pz7Urv9UgqhgyO8ZdsRCht2w=" }, "run-async": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-0.1.0.tgz", - "integrity": "sha1-yK1KXhEGYeQCp9IbUw4AnyX444k=", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz", + "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=", "requires": { - "once": "1.4.0" + "is-promise": "2.1.0" } }, "rx-lite": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-3.1.2.tgz", - "integrity": "sha1-Gc5QLKVyZl87ZHsQk5+X/RYV8QI=" + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-4.0.8.tgz", + "integrity": "sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ=" + }, + "rx-lite-aggregates": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz", + "integrity": "sha1-dTuHqJoRyVRnxKwWJsTvxOBcZ74=", + "requires": { + "rx-lite": "4.0.8" + } }, "safe-buffer": { "version": "5.1.1", @@ -7906,7 +8225,7 @@ "resolved": "https://registry.npmjs.org/sane/-/sane-1.4.1.tgz", "integrity": "sha1-iPdj10BA9fDCVrYWPbOZvxEKxxU=", "requires": { - "exec-sh": "0.2.0", + "exec-sh": "0.2.1", "fb-watchman": "1.9.2", "minimatch": "3.0.4", "minimist": "1.2.0", @@ -7934,6 +8253,11 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" + }, + "watch": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/watch/-/watch-0.10.0.tgz", + "integrity": "sha1-d3mLLaD5kQ1ZXxrOWwwiWFIfIdw=" } } }, @@ -8004,7 +8328,7 @@ "etag": "1.7.0", "fresh": "0.3.0", "ms": "0.7.2", - "parseurl": "1.3.1" + "parseurl": "1.3.2" }, "dependencies": { "ms": { @@ -8025,7 +8349,7 @@ "escape-html": "1.0.3", "http-errors": "1.3.1", "mime-types": "2.1.11", - "parseurl": "1.3.1" + "parseurl": "1.3.2" }, "dependencies": { "debug": { @@ -8049,7 +8373,7 @@ "integrity": "sha1-zlpuzTEB/tXsCYJ9rCKpwpv7BTU=", "requires": { "escape-html": "1.0.3", - "parseurl": "1.3.1", + "parseurl": "1.3.2", "send": "0.13.2" } }, @@ -8101,7 +8425,7 @@ "dev": true, "requires": { "glob": "7.1.2", - "interpret": "1.0.3", + "interpret": "1.0.4", "rechoir": "0.6.2" } }, @@ -8207,15 +8531,17 @@ } }, "sinon": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/sinon/-/sinon-3.2.1.tgz", - "integrity": "sha512-KY3OLOWpek/I4NGAMHetuutVgS2aRgMR5g5/1LSYvPJ3qo2BopIvk3esFztPxF40RWf/NNNJzdFPriSkXUVK3A==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/sinon/-/sinon-3.3.0.tgz", + "integrity": "sha512-/flfGfIxIRXSvZBHJzIf3iAyGYkmMQq6SQjA0cx9SOuVuq+4ZPPO4LJtH1Ce0Lznax1KSG1U6Dad85wIcSW19w==", "requires": { - "diff": "3.3.0", + "build": "0.1.4", + "diff": "3.3.1", "formatio": "1.2.0", + "lodash.get": "4.4.2", "lolex": "2.1.2", "native-promise-only": "0.8.1", - "nise": "1.0.1", + "nise": "1.1.0", "path-to-regexp": "1.7.0", "samsam": "1.2.1", "text-encoding": "0.6.4", @@ -8239,11 +8565,11 @@ "integrity": "sha1-VusCfWW00tzmyy4tMsTUr8nh1wc=" }, "sntp": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz", - "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/sntp/-/sntp-2.0.2.tgz", + "integrity": "sha1-UGQRDwr4X3z9t9a2ekACjOUrSys=", "requires": { - "hoek": "2.16.3" + "hoek": "4.2.0" } }, "source-map": { @@ -8252,9 +8578,9 @@ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" }, "source-map-support": { - "version": "0.4.16", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.16.tgz", - "integrity": "sha512-A6vlydY7H/ljr4L2UOhDSajQdZQ6dMD7cLH0pzwcmwLyc9u8PNI4WGtnfDDzX7uzGL6c/T+ORL97Zlh+S4iOrg==", + "version": "0.4.18", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz", + "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==", "requires": { "source-map": "0.5.7" } @@ -8301,15 +8627,13 @@ "getpass": "0.1.7", "jsbn": "0.1.1", "tweetnacl": "0.14.5" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" - } } }, + "stack-trace": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", + "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=" + }, "stacktrace-parser": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/stacktrace-parser/-/stacktrace-parser-0.1.4.tgz", @@ -8374,13 +8698,27 @@ } }, "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" + "is-fullwidth-code-point": "2.0.0", + "strip-ansi": "4.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "requires": { + "ansi-regex": "3.0.0" + } + } } }, "stringstream": { @@ -8445,35 +8783,14 @@ "string-width": "2.1.1" }, "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "ajv": { + "version": "4.11.8", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz", + "integrity": "sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY=", "dev": true, "requires": { - "is-fullwidth-code-point": "2.0.0", - "strip-ansi": "4.0.0" - } - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "3.0.0" + "co": "4.6.0", + "json-stable-stringify": "1.0.1" } } } @@ -8519,9 +8836,9 @@ "dev": true }, "throat": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/throat/-/throat-3.2.0.tgz", - "integrity": "sha512-/EY8VpvlqJ+sFtLPeOgc8Pl7kQVOWv0woD87KTXVHPIAE842FGT+rokxIhe8xIUP1cfgrkt0as0vDLjDiMtr8w==" + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/throat/-/throat-4.1.0.tgz", + "integrity": "sha1-iQN8vJLFarGJJua6TLsgDhVnKmo=" }, "through": { "version": "2.3.8", @@ -8542,6 +8859,19 @@ "resolved": "https://registry.npmjs.org/time-stamp/-/time-stamp-1.1.0.tgz", "integrity": "sha1-dkpaEa9QVhkhsTPztE5hhofg9cM=" }, + "timespan": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/timespan/-/timespan-2.3.0.tgz", + "integrity": "sha1-SQLOBAvRPYRcj1myfp1ZutbzmSk=" + }, + "tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "requires": { + "os-tmpdir": "1.0.2" + } + }, "tmpl": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.4.tgz", @@ -8552,18 +8882,10 @@ "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=" }, - "topo": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/topo/-/topo-1.1.0.tgz", - "integrity": "sha1-6ddRYV0buH3IZdsYL6HKCl71NtU=", - "requires": { - "hoek": "2.16.3" - } - }, "tough-cookie": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.2.tgz", - "integrity": "sha1-8IH3bkyFcg5sN6X6ztc3FQ2EByo=", + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.3.tgz", + "integrity": "sha1-C2GKVWW23qkL80JdBNVe3EdadWE=", "requires": { "punycode": "1.4.1" } @@ -8574,6 +8896,11 @@ "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=", "dev": true }, + "traverse": { + "version": "0.6.6", + "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.6.6.tgz", + "integrity": "sha1-y99WD9e5r2MlAv7UD5GMFX6pcTc=" + }, "trim-right": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", @@ -8624,15 +8951,15 @@ "integrity": "sha1-yrEPtJCeRByChC6v4a1kbIGARBA=", "requires": { "media-typer": "0.3.0", - "mime-types": "2.1.16" + "mime-types": "2.1.17" }, "dependencies": { "mime-types": { - "version": "2.1.16", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.16.tgz", - "integrity": "sha1-K4WKUuXs1RbbiXrCvodIeDBpjiM=", + "version": "2.1.17", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.17.tgz", + "integrity": "sha1-Cdejk/A+mVp5+K+Fe3Cp4KsWVXo=", "requires": { - "mime-db": "1.29.0" + "mime-db": "1.30.0" } } } @@ -8751,13 +9078,6 @@ "assert-plus": "1.0.0", "core-util-is": "1.0.2", "extsprintf": "1.3.0" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" - } } }, "vhost": { @@ -8784,9 +9104,20 @@ } }, "watch": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/watch/-/watch-0.10.0.tgz", - "integrity": "sha1-d3mLLaD5kQ1ZXxrOWwwiWFIfIdw=" + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/watch/-/watch-0.18.0.tgz", + "integrity": "sha1-KAlUdsbffJDJYxOJkMClQj60uYY=", + "requires": { + "exec-sh": "0.2.1", + "minimist": "1.2.0" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" + } + } }, "webidl-conversions": { "version": "4.0.2", @@ -8847,11 +9178,44 @@ "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=" }, + "win-release": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/win-release/-/win-release-1.1.1.tgz", + "integrity": "sha1-X6VeAr58qTTt/BJmVjLoSbcuUgk=", + "requires": { + "semver": "5.4.1" + } + }, "window-size": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz", "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=" }, + "winston": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/winston/-/winston-2.4.0.tgz", + "integrity": "sha1-gIBQuT1SZh7Z+2wms/DIJnCLCu4=", + "requires": { + "async": "1.0.0", + "colors": "1.0.3", + "cycle": "1.0.3", + "eyes": "0.1.8", + "isstream": "0.1.2", + "stack-trace": "0.0.10" + }, + "dependencies": { + "async": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/async/-/async-1.0.0.tgz", + "integrity": "sha1-+PwEyjoTeErenhZBr5hXjPvWR6k=" + }, + "colors": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz", + "integrity": "sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs=" + } + } + }, "wordwrap": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", @@ -8873,6 +9237,26 @@ "requires": { "string-width": "1.0.2", "strip-ansi": "3.0.1" + }, + "dependencies": { + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "requires": { + "number-is-nan": "1.0.1" + } + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "requires": { + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" + } + } } }, "wrappy": { @@ -8880,6 +9264,11 @@ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" }, + "wrench": { + "version": "1.3.9", + "resolved": "https://registry.npmjs.org/wrench/-/wrench-1.3.9.tgz", + "integrity": "sha1-bxPsNRRTF+spLKX2UxORskQRFBE=" + }, "write": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/write/-/write-0.2.1.tgz", @@ -9020,6 +9409,24 @@ "strip-ansi": "3.0.1", "wrap-ansi": "2.1.0" } + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "requires": { + "number-is-nan": "1.0.1" + } + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "requires": { + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" + } } } }, diff --git a/tests/package.json b/tests/package.json index b44fe516..2c968847 100644 --- a/tests/package.json +++ b/tests/package.json @@ -32,8 +32,9 @@ "js-beautify": "^1.6.11", "lodash.groupby": "^4.6.0", "lodash.some": "^4.6.0", - "react": "16.0.0-alpha.6", - "react-native": "^0.44.0", + "react": "16.0.0-alpha.12", + "react-native": "^0.48.4", + "react-test-renderer": "16.0.0-alpha.12", "react-native-simple-toast": "0.0.5", "react-native-vector-icons": "^4.0.0", "react-navigation": "^1.0.0-beta.9", @@ -51,6 +52,7 @@ "babel-eslint": "^7.1.1", "babel-jest": "19.0.0", "babel-plugin-flow-react-proptypes": "^0.21.0", + "babel-plugin-istanbul": "^4.1.5", "babel-preset-react-native": "1.9.1", "colors": "^1.1.2", "eslint": "^3.16.1", @@ -60,7 +62,6 @@ "eslint-plugin-jsx-a11y": "^4.0.0", "eslint-plugin-react": "^6.10.0", "jest": "19.0.2", - "react-test-renderer": "~15.4.1", "redux-immutable-state-invariant": "^1.2.4" }, "jest": { diff --git a/tests/src/phone-auth.js b/tests/src/phone-auth.js new file mode 100644 index 00000000..ff970ea9 --- /dev/null +++ b/tests/src/phone-auth.js @@ -0,0 +1,249 @@ +import React, { Component } from 'react'; +import { View, Button, Text, TextInput, Image, ActivityIndicator, Platform } from 'react-native'; +import fb from './firebase'; + +const firebase = fb.native; + +const imageUrl = 'https://www.shareicon.net/data/512x512/2016/07/19/798524_sms_512x512.png'; + +export default class PhoneAuth extends Component { + static getDefaultState() { + return { + message: '', + error: '', + codeInput: '', + phoneNumber: '+44', + auto: Platform.OS === 'android', + autoVerifyCountDown: 0, + sent: false, + started: false, + user: null, + }; + } + + constructor(props) { + super(props); + this.timeout = 20; + this._autoVerifyInterval = null; + this.state = PhoneAuth.getDefaultState(); + } + + _tick() { + this.setState({ + autoVerifyCountDown: this.state.autoVerifyCountDown - 1, + }); + } + + /** + * Called when confirm code is pressed - we should have the code and verificationId now in state. + */ + afterVerify = () => { + const { codeInput, verificationId } = this.state; + const credential = firebase.auth.PhoneAuthProvider.credential(verificationId, codeInput); + + // TODO do something with credential for example: + firebase.auth() + .signInWithCredential(credential) + .then((user) => { + console.log('PHONE AUTH USER ->>>>>', user.toJSON()); + this.setState({ user: user.toJSON() }); + }).catch(console.error); + }; + + signIn = () => { + const { phoneNumber } = this.state; + this.setState({ message: 'Sending code ...', error: '', started: true, autoVerifyCountDown: this.timeout }, () => { + firebase.auth() + .verifyPhoneNumber(phoneNumber) + .on('state_changed', (phoneAuthSnapshot) => { + console.log(phoneAuthSnapshot); + switch (phoneAuthSnapshot.state) { + case firebase.auth.PhoneAuthState.CODE_SENT: // or 'sent' + // update state with code sent and if android start a interval timer + // for auto verify - to provide visual feedback + this.setState({ + sent: true, + message: 'Code Sent!', + verificationId: phoneAuthSnapshot.verificationId, + autoVerifyCountDown: this.timeout, + }, () => { + if (this.state.auto) { + this._autoVerifyInterval = setInterval(this._tick.bind(this), 1000); + } + }); + break; + case firebase.auth.PhoneAuthState.ERROR: // or 'error' + // restart the phone flow again on error + clearInterval(this._autoVerifyInterval); + this.setState({ + ...PhoneAuth.getDefaultState(), + error: phoneAuthSnapshot.error.message, + }); + break; + + // --------------------- + // ANDROID ONLY EVENTS + // --------------------- + case firebase.auth.PhoneAuthState.AUTO_VERIFY_TIMEOUT: // or 'timeout' + clearInterval(this._autoVerifyInterval); + this.setState({ + sent: true, + auto: false, + verificationId: phoneAuthSnapshot.verificationId, + }); + break; + case firebase.auth.PhoneAuthState.AUTO_VERIFIED: // or 'verified' + clearInterval(this._autoVerifyInterval); + this.setState({ + sent: true, + codeInput: phoneAuthSnapshot.code, + verificationId: phoneAuthSnapshot.verificationId, + }); + break; + default: + // will never get here - just for linting + } + }); + }); + }; + + renderInputPhoneNumber() { + const { phoneNumber } = this.state; + return ( + + Enter phone number: + this.setState({ phoneNumber: value })} + placeholder={'Phone number ... '} + value={phoneNumber} + /> +