├── .npmignore ├── install-ios.sh ├── src ├── android │ ├── build.gradle │ ├── ConnectionEventsHandler.java │ ├── PlayerEventsHandler.java │ ├── Emitter.java │ └── CordovaSpotify.java └── ios │ ├── AudioStreamingPlaybackDelegate.h │ ├── AudioStreamingDelegate.h │ ├── CordovaSpotifyEventEmitter.h │ ├── CordovaSpotifyEventEmitter.m │ ├── CordovaSpotify.h │ ├── AudioStreamingPlaybackDelegate.m │ ├── AudioStreamingDelegate.m │ └── CordovaSpotify.m ├── install-android.sh ├── .travis.yml ├── www ├── package.json ├── tsconfig.json ├── webpack.config.js ├── lib │ └── exec-promise.ts ├── cordova-spotify.ts └── yarn.lock ├── package.json ├── LICENSE.md ├── .gitignore ├── README.md └── plugin.xml /.npmignore: -------------------------------------------------------------------------------- 1 | www/build/docs 2 | www/node_modules -------------------------------------------------------------------------------- /install-ios.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | INSTALL_PATH="plugins/cordova-spotify/src/ios/spotify-sdk" 4 | DOWNLOAD_PATH="https://github.com/spotify/ios-streaming-sdk/archive/beta-27.tar.gz" 5 | 6 | if [ ! -d $INSTALL_PATH ]; then 7 | mkdir -p $INSTALL_PATH 8 | curl -LsS $DOWNLOAD_PATH | tar -xz -C $INSTALL_PATH --strip 1 9 | fi 10 | -------------------------------------------------------------------------------- /src/android/build.gradle: -------------------------------------------------------------------------------- 1 | repositories { 2 | jcenter() 3 | flatDir { 4 | dirs 'libs', 'src/main/libs' 5 | } 6 | } 7 | 8 | dependencies { 9 | compile(name:'spotify-sdk', ext:'aar') 10 | } 11 | 12 | android { 13 | packagingOptions { 14 | exclude 'META-INF/NOTICE' 15 | exclude 'META-INF/LICENSE' 16 | } 17 | } -------------------------------------------------------------------------------- /src/ios/AudioStreamingPlaybackDelegate.h: -------------------------------------------------------------------------------- 1 | #ifndef AudioStreamingPlaybackDelegate_h 2 | #define AudioStreamingPlaybackDelegate_h 3 | 4 | #import 5 | #import "CordovaSpotifyEventEmitter.h" 6 | 7 | @interface AudioStreamingPlaybackDelegate : CordovaSpotifyEventEmitter 8 | @end 9 | 10 | #endif -------------------------------------------------------------------------------- /install-android.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | SDK_INSTALL_PATH="plugins/cordova-spotify/src/android/spotify-sdk" 4 | SDK_DOWNLOAD_PATH="https://github.com/spotify/android-streaming-sdk/archive/24-noconnect-2.20b.tar.gz" 5 | 6 | if [ ! -d "$SDK_INSTALL_PATH" ]; then 7 | mkdir -p "$SDK_INSTALL_PATH" 8 | curl -LsS $SDK_DOWNLOAD_PATH | tar -xz -C "$SDK_INSTALL_PATH" --strip 1 9 | else 10 | echo "Skipping streaming SDK download since it's alredy there." 11 | fi 12 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: node_js 2 | cache: yarn 3 | node_js: node 4 | 5 | before_install: cd www 6 | install: yarn 7 | script: yarn run build 8 | before_deploy: cd .. 9 | 10 | deploy: 11 | - provider: pages 12 | skip_cleanup: true 13 | github_token: $GITHUB_TOKEN 14 | local_dir: www/build/docs 15 | on: 16 | branch: master 17 | - provider: npm 18 | email: $NPM_DPL_EMAIL 19 | api_key: $NPM_DPL_TOKEN 20 | skip_cleanup: true 21 | on: 22 | tags: true -------------------------------------------------------------------------------- /www/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "dependencies": { 3 | "async": "^2.5.0", 4 | "eventemitter3": "^2.0.3" 5 | }, 6 | "devDependencies": { 7 | "@types/cordova": "^0.0.34", 8 | "@types/node": "^8.0.46", 9 | "@types/webpack": "^3.0.13", 10 | "awesome-typescript-loader": "^3.2.3", 11 | "typedoc": "^0.9.0", 12 | "typedoc-webpack-plugin": "^1.1.4", 13 | "typescript": "^2.5.3", 14 | "webpack": "^3.8.1" 15 | }, 16 | "scripts": { 17 | "build": "./node_modules/.bin/webpack -p" 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/ios/AudioStreamingDelegate.h: -------------------------------------------------------------------------------- 1 | #ifndef AudioStreamingDelegate_h 2 | #define AudioStreamingDelegate_h 3 | 4 | #import 5 | #import 6 | #import "CordovaSpotifyEventEmitter.h" 7 | 8 | @interface AudioStreamingDelegate : CordovaSpotifyEventEmitter 9 | @property (nonatomic, copy) void (^loginCallback)(NSError*); 10 | @property (nonatomic, copy) void (^logoutCallback)(void); 11 | 12 | - (void) handleLoginWithCallback: (void (^)(NSError*))callback; 13 | - (void) handleLogoutWithCallback: (void (^)(void))callback; 14 | @end 15 | 16 | #endif 17 | -------------------------------------------------------------------------------- /www/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "outDir": "build", 4 | "module": "es2015", 5 | "target": "es5", 6 | "lib": ["es5", "es2015.promise", "dom"], 7 | "sourceMap": true, 8 | "declaration": true, 9 | "moduleResolution": "node", 10 | "forceConsistentCasingInFileNames": true, 11 | "noImplicitThis": true, 12 | "strictNullChecks": true, 13 | "suppressImplicitAnyIndexErrors": true, 14 | "noUnusedLocals": false, 15 | "experimentalDecorators": true 16 | }, 17 | "exclude": [ 18 | "node_modules", 19 | "build", 20 | "scripts", 21 | "acceptance-tests", 22 | "webpack", 23 | "jest", 24 | "src/setupTests.ts" 25 | ], 26 | "types": [ 27 | "typePatches" 28 | ] 29 | } 30 | -------------------------------------------------------------------------------- /src/ios/CordovaSpotifyEventEmitter.h: -------------------------------------------------------------------------------- 1 | #ifndef CordovaSpotifyEventEmitter_h 2 | #define CordovaSpotifyEventEmitter_h 3 | 4 | #import 5 | 6 | NSString* getErrorFromMatrix(NSDictionary *matrix, NSNumber *code); 7 | 8 | @interface CordovaSpotifyEventEmitter : NSObject 9 | @property (nonatomic, weak) id commandDelegate; 10 | @property (nonatomic) NSString *eventCallbackId; 11 | @property (nonatomic) NSDictionary *codeMatrix; 12 | 13 | + (instancetype)eventEmitterWithCommandDelegate: (id ) commandDelegate; 14 | - (instancetype)initWithCommandDelegate: (id ) commandDelegate; 15 | -(void) setCallbackId:(NSString *) callbackId; 16 | -(void) emit:(NSString *)eventName withData:(NSArray *) data; 17 | @end 18 | 19 | #endif -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "cordova-spotify", 3 | "version": "0.5.0", 4 | "description": "Spotify SDK bindings for Cordova Applications", 5 | "repository": { 6 | "type": "git", 7 | "url": "git+https://github.com/Festify/cordova-spotify.git" 8 | }, 9 | "engines": { 10 | "cordovaDependencies": { 11 | "0.2.2": { 12 | "cordova": "^6.0.0 - 7.0.0" 13 | } 14 | } 15 | }, 16 | "keywords": [ 17 | "ecosystem:cordova", 18 | "cordova-android", 19 | "cordova-ios", 20 | "spotify", 21 | "sdk" 22 | ], 23 | "author": "Festify Dev Team ", 24 | "contributors": [ 25 | "Moritz Gunz ", 26 | "Leo Bernard ", 27 | "Marcus Weiner " 28 | ], 29 | "license": "MIT", 30 | "bugs": { 31 | "url": "https://github.com/Festify/cordova-spotify/issues", 32 | "email": "mail+cordova-spotify@festify.rocks" 33 | }, 34 | "homepage": "https://github.com/Festify/cordova-spotify#readme" 35 | } 36 | -------------------------------------------------------------------------------- /www/webpack.config.js: -------------------------------------------------------------------------------- 1 | const TypeDocPlugin = require('typedoc-webpack-plugin'); 2 | const path = require('path'); 3 | 4 | module.exports = { 5 | entry: './cordova-spotify.ts', 6 | module: { 7 | rules: [{ 8 | test: /(\.ts)/, 9 | exclude: /node_modules/, 10 | use: 'awesome-typescript-loader' 11 | }] 12 | }, 13 | resolve: { 14 | extensions: ['.js', '.ts'] 15 | }, 16 | devtool: 'source-map', 17 | externals: [ 18 | "cordova", 19 | "cordova/exec" 20 | ], 21 | output: { 22 | path: path.resolve(__dirname, 'build'), 23 | filename: 'cordova-spotify.min.js', 24 | library: 'spotify', 25 | libraryTarget: 'commonjs' 26 | }, 27 | plugins: [ 28 | new TypeDocPlugin({ 29 | excludeExternals: true, 30 | excludePrivate: true, 31 | ignoreCompilerErrors: true, 32 | name: "Cordova Spotify Plugin", 33 | mode: 'file', 34 | readme: 'none', 35 | target: 'ES6' 36 | }, './cordova-spotify.ts') 37 | ] 38 | }; -------------------------------------------------------------------------------- /LICENSE.md: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2017 Festify 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /www/lib/exec-promise.ts: -------------------------------------------------------------------------------- 1 | import queue from 'async/queue'; 2 | 3 | const _exec = cordova.exec; 4 | const q = queue(({ methodName, args }, cb) => { 5 | // Delay the resolution and rejection callbacks because 6 | // the Spotify SDKs do not like being reinvoked from inside 7 | // of an event handler function. 8 | _exec( 9 | val => setTimeout(() => cb(null, val)), 10 | err => setTimeout(() => cb(err)), 11 | 'SpotifyConnector', 12 | methodName, 13 | args || [] 14 | ) 15 | }); 16 | 17 | /** 18 | * Cordova's exec with Promise and error handling support. 19 | * 20 | * @param methodName the native method to execute 21 | * @param args method arguments 22 | * @hidden 23 | */ 24 | export default function(methodName: string, args: any[] = []): Promise { 25 | if (!methodName) { 26 | throw new Error("Missing method or class name argument (1st)."); 27 | } 28 | 29 | return new Promise((res, rej) => q.push( 30 | { methodName, args }, 31 | (err, val) => err ? rej(err) : res(val) 32 | )) 33 | .catch(err => { 34 | if (err) { 35 | const e = new Error(err.msg); 36 | e.name = err.type; 37 | return Promise.reject(e); 38 | } 39 | return Promise.reject(err); 40 | }); 41 | } 42 | -------------------------------------------------------------------------------- /src/ios/CordovaSpotifyEventEmitter.m: -------------------------------------------------------------------------------- 1 | #ifndef CordovaSpotifyEventEmitter_m 2 | #define CordovaSpotifyEventEmitter_m 3 | #import "CordovaSpotifyEventEmitter.h" 4 | 5 | NSString* getErrorFromMatrix(NSDictionary *matrix, NSNumber *code) { 6 | NSString *errorString = [matrix objectForKey: code]; 7 | 8 | if(!errorString) { 9 | return @"Unknown"; 10 | } 11 | return errorString; 12 | } 13 | 14 | @implementation CordovaSpotifyEventEmitter 15 | 16 | + (instancetype)eventEmitterWithCommandDelegate:(id )commandDelegate { 17 | return [[self alloc] initWithCommandDelegate: commandDelegate]; 18 | } 19 | 20 | - (instancetype)initWithCommandDelegate:(id )commandDelegate { 21 | self.commandDelegate = commandDelegate; 22 | 23 | return self; 24 | } 25 | 26 | - (void)setCallbackId:(NSString *) callbackId { 27 | self.eventCallbackId = callbackId; 28 | } 29 | 30 | - (void)emit:(NSString *)eventName withData:(NSArray *) data { 31 | if (self.eventCallbackId == nil) { 32 | return; 33 | } 34 | 35 | NSDictionary *params = @{ 36 | @"name": eventName, 37 | @"args": data 38 | }; 39 | 40 | CDVPluginResult *result = [CDVPluginResult resultWithStatus: CDVCommandStatus_OK 41 | messageAsDictionary: params]; 42 | [result setKeepCallbackAsBool:YES]; 43 | 44 | [self.commandDelegate sendPluginResult: result 45 | callbackId: self.eventCallbackId]; 46 | } 47 | 48 | @end 49 | 50 | #endif 51 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Created by .ignore support plugin (hsz.mobi) 2 | ### JetBrains template 3 | # Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio and Webstorm 4 | # Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839 5 | 6 | # User-specific stuff: 7 | .idea/ 8 | 9 | ## File-based project format: 10 | *.iws 11 | 12 | ## Plugin-specific files: 13 | 14 | # IntelliJ 15 | /out/ 16 | 17 | # mpeltonen/sbt-idea plugin 18 | .idea_modules/ 19 | 20 | # JIRA plugin 21 | atlassian-ide-plugin.xml 22 | 23 | # Crashlytics plugin (for Android Studio and IntelliJ) 24 | com_crashlytics_export_strings.xml 25 | crashlytics.properties 26 | crashlytics-build.properties 27 | fabric.properties 28 | ### Node template 29 | # Logs 30 | logs 31 | *.log 32 | npm-debug.log* 33 | 34 | # Runtime data 35 | pids 36 | *.pid 37 | *.seed 38 | *.pid.lock 39 | 40 | # Directory for instrumented libs generated by jscoverage/JSCover 41 | lib-cov 42 | 43 | # Coverage directory used by tools like istanbul 44 | coverage 45 | 46 | # nyc test coverage 47 | .nyc_output 48 | 49 | # Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) 50 | .grunt 51 | 52 | # node-waf configuration 53 | .lock-wscript 54 | 55 | # Compiled binary addons (http://nodejs.org/api/addons.html) 56 | build/Release 57 | 58 | # Dependency directories 59 | node_modules 60 | jspm_packages 61 | package-lock.json 62 | 63 | # Optional npm cache directory 64 | .npm 65 | 66 | # Optional eslint cache 67 | .eslintcache 68 | 69 | # Optional REPL history 70 | .node_repl_history 71 | 72 | # Output of 'npm pack' 73 | *.tgz 74 | 75 | # Yarn Integrity file 76 | .yarn-integrity 77 | 78 | # SpotifySDK 79 | src/ios/spotify-sdk/ 80 | src/android/spotify-auth/ 81 | src/android/spotify-sdk/ 82 | 83 | # Serverless 84 | .serverless/ 85 | 86 | # env config 87 | .env 88 | 89 | # Android 90 | .gradle/ 91 | 92 | # Webpack 93 | www/build/ -------------------------------------------------------------------------------- /src/android/ConnectionEventsHandler.java: -------------------------------------------------------------------------------- 1 | package rocks.festify; 2 | 3 | import java.util.ArrayList; 4 | 5 | import android.util.Log; 6 | 7 | import com.spotify.sdk.android.player.ConnectionStateCallback; 8 | import com.spotify.sdk.android.player.Error; 9 | import com.spotify.sdk.android.player.Player; 10 | 11 | import rocks.festify.Emitter; 12 | 13 | class ConnectionEventsHandler extends Emitter 14 | implements ConnectionStateCallback { 15 | private static final String TAG = "ConnectionEventsHandler"; 16 | 17 | private Player.OperationCallback loginCallback = null; 18 | private Runnable logoutCallback = null; 19 | 20 | @Override 21 | public void onConnectionMessage(String message) { 22 | this.emit("connectionmessage", message); 23 | } 24 | 25 | @Override 26 | public void onLoggedIn() { 27 | if (this.loginCallback != null) { 28 | this.loginCallback.onSuccess(); 29 | this.loginCallback = null; 30 | } 31 | 32 | this.emit("loggedin"); 33 | } 34 | 35 | public void onLoggedIn(Player.OperationCallback runnable) { 36 | this.loginCallback = runnable; 37 | } 38 | 39 | @Override 40 | public void onLoggedOut() { 41 | if (this.logoutCallback != null) { 42 | this.logoutCallback.run(); 43 | this.logoutCallback = null; 44 | } 45 | 46 | this.emit("loggedout"); 47 | } 48 | 49 | public void onLoggedOut(Runnable runnable) { 50 | this.logoutCallback = runnable; 51 | } 52 | 53 | @Override 54 | public void onLoginFailed(Error error) { 55 | if (this.loginCallback != null) { 56 | this.loginCallback.onError(error); 57 | this.loginCallback = null; 58 | } 59 | 60 | this.emit("loginfailed", error); 61 | } 62 | 63 | @Override 64 | public void onTemporaryError() { 65 | this.emit("temporaryerror"); 66 | } 67 | } -------------------------------------------------------------------------------- /src/android/PlayerEventsHandler.java: -------------------------------------------------------------------------------- 1 | package rocks.festify; 2 | 3 | import android.util.Log; 4 | 5 | import com.spotify.sdk.android.player.Error; 6 | import com.spotify.sdk.android.player.PlayerEvent; 7 | import com.spotify.sdk.android.player.SpotifyPlayer; 8 | 9 | import rocks.festify.Emitter; 10 | 11 | class PlayerEventsHandler extends Emitter 12 | implements SpotifyPlayer.NotificationCallback { 13 | private static final String TAG = "PlayerEventsHandler"; 14 | 15 | @Override 16 | public void onPlaybackEvent(PlayerEvent playerEvent) { 17 | // Strip off enum prefix for platform consistency 18 | String eventName; 19 | switch (playerEvent) { 20 | case UNKNOWN: 21 | eventName = "Unknown"; 22 | break; 23 | case kSpPlaybackEventAudioFlush: 24 | eventName = "AudioFlush"; 25 | break; 26 | default: 27 | // Strip off kSpPlaybackNotify 28 | eventName = playerEvent.toString().substring(17); 29 | break; 30 | } 31 | 32 | this.emit("playbackevent", eventName); 33 | } 34 | 35 | @Override 36 | public void onPlaybackError(Error error) { 37 | String errorName; 38 | switch (error) { 39 | case kSpErrorOk: 40 | return; 41 | case UNKNOWN: 42 | errorName = "Unknown"; 43 | break; 44 | case kSpAlreadyPrefetching: 45 | case kSpPrefetchDownloadFailed: 46 | case kSpStorageReadError: 47 | case kSpStorageWriteError: 48 | // Strip off kSp 49 | errorName = error.toString().substring(3); 50 | break; 51 | default: 52 | // Strip off kSpError 53 | errorName = error.toString().substring(8); 54 | break; 55 | } 56 | 57 | this.emit("playbackerror", errorName); 58 | } 59 | } -------------------------------------------------------------------------------- /src/ios/CordovaSpotify.h: -------------------------------------------------------------------------------- 1 | #ifndef CordovaSpotify_h 2 | #define CordovaSpotify_h 3 | 4 | #import 5 | #import 6 | #import 7 | #import 8 | 9 | #import "AudioStreamingDelegate.h" 10 | #import "AudioStreamingPlaybackDelegate.h" 11 | 12 | @interface CordovaSpotify : CDVPlugin 13 | @property (nonatomic) NSString *currentClientId; 14 | @property (nonatomic) NSString *currentToken; 15 | @property (nonatomic) AudioStreamingDelegate *audioStreamingDelegate; 16 | @property (nonatomic) AudioStreamingPlaybackDelegate *audioStreamingPlaybackDelegate; 17 | @property (nonatomic, strong) SPTAudioStreamingController* player; 18 | @property (nonatomic, strong) SPTDiskCache* cache; 19 | 20 | - (void) pluginInitialize; 21 | 22 | - (void) play:(CDVInvokedUrlCommand*)command; 23 | - (void) pause:(CDVInvokedUrlCommand*)command; 24 | - (void) resume:(CDVInvokedUrlCommand*)command; 25 | - (void) registerEventsListener:(CDVInvokedUrlCommand*)command; 26 | 27 | - (void) doPlay:(NSString*)trackUri 28 | fromPos:(NSInteger)positionMs 29 | withCommand:(CDVInvokedUrlCommand*)command; 30 | - (void) initAndPlay:(NSString*)clientId 31 | withToken:(NSString*)accessToken 32 | withUri:(NSString*)trackUri 33 | fromPos:(NSInteger)positionMs 34 | withCommand:(CDVInvokedUrlCommand*)command; 35 | - (void) loginAndPlay:(NSString*)accessToken 36 | withUri:(NSString*)trackUri 37 | fromPos:(NSInteger)positionMs 38 | withCommand:(CDVInvokedUrlCommand*)command; 39 | - (void) logout:(void (^)(void))callback; 40 | - (void) sendResultForCommand:(CDVInvokedUrlCommand*)cmd 41 | withErrorType:(NSString*)err 42 | andDescr:(NSString*)errDescription 43 | andSuccess:(NSString*)success; 44 | @end 45 | 46 | #endif 47 | -------------------------------------------------------------------------------- /src/android/Emitter.java: -------------------------------------------------------------------------------- 1 | package rocks.festify; 2 | 3 | import android.util.Log; 4 | 5 | import org.apache.cordova.CallbackContext; 6 | import org.apache.cordova.PluginResult; 7 | import org.apache.cordova.PluginResult.Status; 8 | 9 | import org.json.JSONArray; 10 | import org.json.JSONException; 11 | import org.json.JSONObject; 12 | 13 | public abstract class Emitter { 14 | private static final String TAG = "Emitter"; 15 | 16 | private CallbackContext ctx = null; 17 | 18 | public Emitter() { } 19 | 20 | public void setCallback(final CallbackContext ctx) { 21 | this.ctx = ctx; 22 | } 23 | 24 | protected void emit(final String eventName) { 25 | this.emit(eventName, new JSONArray()); 26 | } 27 | 28 | protected void emit(final String eventName, final Object data) { 29 | String str = (data != null) ? data.toString() : ""; 30 | this.emit(eventName, new JSONArray().put(str)); 31 | } 32 | 33 | protected void emit(final String eventName, final JSONArray data) { 34 | if (eventName == null || eventName.length() < 1) { 35 | throw new IllegalArgumentException("eventName is null or empty!"); 36 | } 37 | 38 | final CallbackContext ctx = this.ctx; 39 | if (ctx == null) { 40 | Log.d( 41 | TAG, 42 | "Emit '" + eventName + "' triggered, but CallbackContext was null." 43 | ); 44 | return; 45 | } 46 | 47 | try { 48 | final JSONObject arg = new JSONObject() 49 | .put("name", eventName) 50 | .put("args", data); 51 | final PluginResult res = new PluginResult(PluginResult.Status.OK, arg); 52 | res.setKeepCallback(true); 53 | 54 | this.ctx.sendPluginResult(res); 55 | } catch (JSONException ex) { 56 | Log.e( 57 | TAG, 58 | "An error occured while encoding the JSON for raising event '" + eventName + "'.", 59 | ex 60 | ); 61 | } 62 | } 63 | } -------------------------------------------------------------------------------- /src/ios/AudioStreamingPlaybackDelegate.m: -------------------------------------------------------------------------------- 1 | #import "AudioStreamingPlaybackDelegate.h" 2 | 3 | 4 | @implementation AudioStreamingPlaybackDelegate 5 | 6 | - (instancetype)initWithCommandDelegate:(id )commandDelegate { 7 | self = [super initWithCommandDelegate: commandDelegate]; 8 | 9 | if(self) { 10 | self.codeMatrix = @{ 11 | [NSNumber numberWithInteger:SPPlaybackNotifyPlay]: @"Play", 12 | [NSNumber numberWithInteger:SPPlaybackNotifyPause]: @"Pause", 13 | [NSNumber numberWithInteger:SPPlaybackNotifyTrackChanged]: @"TrackChanged", 14 | [NSNumber numberWithInteger:SPPlaybackNotifyNext]: @"Next", 15 | [NSNumber numberWithInteger:SPPlaybackNotifyPrev]: @"Prev", 16 | [NSNumber numberWithInteger:SPPlaybackNotifyShuffleOn]: @"ShuffleOn", 17 | [NSNumber numberWithInteger:SPPlaybackNotifyShuffleOff]: @"ShuffleOff", 18 | [NSNumber numberWithInteger:SPPlaybackNotifyRepeatOn]: @"RepeatOn", 19 | [NSNumber numberWithInteger:SPPlaybackNotifyRepeatOff]: @"RepeatOff", 20 | [NSNumber numberWithInteger:SPPlaybackNotifyBecameActive]: @"BecameActive", 21 | [NSNumber numberWithInteger:SPPlaybackNotifyBecameInactive]: @"BecameInactive", 22 | [NSNumber numberWithInteger:SPPlaybackNotifyLostPermission]: @"LostPermission", 23 | [NSNumber numberWithInteger:SPPlaybackEventAudioFlush]: @"AudioFlush", 24 | [NSNumber numberWithInteger:SPPlaybackNotifyAudioDeliveryDone]: @"AudioDeliveryDone", 25 | [NSNumber numberWithInteger:SPPlaybackNotifyContextChanged]: @"ContextChanged", 26 | [NSNumber numberWithInteger:SPPlaybackNotifyTrackDelivered]: @"TrackDelivered", 27 | [NSNumber numberWithInteger:SPPlaybackNotifyMetadataChanged]: @"MetadataChanged", 28 | }; 29 | } 30 | 31 | return self; 32 | } 33 | 34 | - (void)audioStreaming:(SPTAudioStreamingController *)audioStreaming didReceivePlaybackEvent:(SpPlaybackEvent)event { 35 | [self emit:@"playbackevent" withData:@[getErrorFromMatrix(self.codeMatrix, [NSNumber numberWithInteger: event])]]; 36 | } 37 | 38 | @end -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Cordova Spotify SDK Plugin 2 | 3 | [![Greenkeeper badge](https://badges.greenkeeper.io/Festify/cordova-spotify.svg)](https://greenkeeper.io/) [![Travis](https://img.shields.io/travis/Festify/cordova-spotify.svg)](https://travis-ci.org/Festify/cordova-spotify) 4 | 5 | An [Apache Cordova](https://cordova.apache.org/) plugin providing access to the Spotify SDK for iOS and Android. 6 | 7 | [API documentation](https://festify.github.io/cordova-spotify/) 8 | 9 | ## Features 10 | 11 | This plugin provides a very simple and atomic layer over playback functionality of the Spotify SDK. It allows you to play Spotify tracks via their URI. Metadata and authentication functionality has deliberately been left out in favor of the [Web API](https://developer.spotify.com/web-api/) and our Spotify OAuth 2 plugin [cordova-spotify-oauth](https://github.com/Festify/cordova-spotify-oauth). 12 | 13 | ## Installation 14 | 15 | ```bash 16 | cordova plugin add cordova-spotify 17 | ``` 18 | 19 | Note: Make sure your installation path doesn't contain any spaces. 20 | 21 | ## Examples 22 | 23 | The plugin is very simple to use. All methods can be called at any time and there is no initialization step. The plugin performs all necessary state changes automatically. All methods documented in the API documentation are exported under the global `cordova.plugins.spotify`-object. 24 | 25 | ### Play some good music 26 | ```js 27 | cordova.plugins.spotify.play("spotify:track:0It6VJoMAare1zdV2wxqZq", { 28 | clientId: "" 30 | }) 31 | .then(() => console.log("Music is playing 🎶")); 32 | ``` 33 | 34 | ### React to user pressing pause button 35 | ```js 36 | cordova.plugins.spotify.pause() 37 |  .then(() => console.log("Music is paused ⏸")); 38 | ``` 39 | 40 | ### Display current playing position 41 | ```js 42 | cordova.plugins.spotify.getPosition() 43 |  .then(pos => console.log(`We're currently ${pos}ms into the track.`)) 44 | .catch(() => console.log("Whoops, no track is playing right now.")); 45 | ``` 46 | 47 | ### React to events from native SKDs 48 | ```js 49 | cordova.plugins.spotify.getEventEmitter() 50 | .then(emitter => emitter.on('playbackevent', eventName => { 51 | switch (eventName) { 52 | case 'PlaybackNotifyPlay': 53 | console.log("Playback was started"); 54 | break; 55 | case 'PlaybackNotifyPause': 56 | console.log("Playback was paused"); 57 | break; 58 | default: 59 | console.log("Some other event was raised:", eventName); 60 | break; 61 | } 62 | })) 63 | ``` 64 | 65 | ## Contributing 66 | 67 | Pull requests are very welcome! Please use the [gitmoji](https://gitmoji.carloscuesta.me/) style for commit messages. 68 | -------------------------------------------------------------------------------- /plugin.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | cordova-spotify 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 29 | 30 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | audio 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | -------------------------------------------------------------------------------- /src/ios/AudioStreamingDelegate.m: -------------------------------------------------------------------------------- 1 | #import "AudioStreamingDelegate.h" 2 | 3 | @implementation AudioStreamingDelegate 4 | 5 | - (instancetype)initWithCommandDelegate: (id ) commandDelegate { 6 | self = [super initWithCommandDelegate: commandDelegate]; 7 | 8 | if(self) { 9 | self.codeMatrix = @{ 10 | [NSNumber numberWithInteger: SPTErrorCodeNoError]: @"NoError", 11 | [NSNumber numberWithInteger: SPTErrorCodeFailed]: @"Failed", 12 | [NSNumber numberWithInteger: SPTErrorCodeInitFailed]: @"InitFailed", 13 | [NSNumber numberWithInteger: SPTErrorCodeWrongAPIVersion]: @"WrongAPIVersion", 14 | [NSNumber numberWithInteger: SPTErrorCodeNullArgument]: @"NullArgument", 15 | [NSNumber numberWithInteger: SPTErrorCodeInvalidArgument]: @"InvalidArgument", 16 | [NSNumber numberWithInteger: SPTErrorCodeUninitialized]: @"Uninitialized", 17 | [NSNumber numberWithInteger: SPTErrorCodeAlreadyInitialized]: @"AlreadyInitialized", 18 | [NSNumber numberWithInteger: SPTErrorCodeBadCredentials]: @"BadCredentials", 19 | [NSNumber numberWithInteger: SPTErrorCodeNeedsPremium]: @"NeedsPremium", 20 | [NSNumber numberWithInteger: SPTErrorCodeTravelRestriction]: @"TravelRestriction", 21 | [NSNumber numberWithInteger: SPTErrorCodeApplicationBanned]: @"ApplicationBanned", 22 | [NSNumber numberWithInteger: SPTErrorCodeGeneralLoginError]: @"GeneralLoginError", 23 | [NSNumber numberWithInteger: SPTErrorCodeUnsupported]: @"Unsupported", 24 | [NSNumber numberWithInteger: SPTErrorCodeNotActiveDevice]: @"NotActiveDevice", 25 | [NSNumber numberWithInteger: SPTErrorCodeGeneralPlaybackError]: @"GeneralPlaybackError", 26 | [NSNumber numberWithInteger: SPTErrorCodePlaybackRateLimited]: @"PlaybackRateLimited", 27 | }; 28 | } 29 | 30 | return self; 31 | } 32 | 33 | - (void)audioStreamingDidDisconnect:(SPTAudioStreamingController *)audioStreaming { 34 | [self emit:@"networkdisconnect" withData:@[]]; 35 | } 36 | 37 | - (void)audioStreamingDidLogout:(SPTAudioStreamingController *)audioStreaming { 38 | if (self.logoutCallback) { 39 | self.logoutCallback(); 40 | self.logoutCallback = nil; 41 | } 42 | 43 | [self emit:@"loggedout" withData:@[]]; 44 | } 45 | 46 | - (void)audioStreamingDidLogin:(SPTAudioStreamingController *)audioStreaming { 47 | if (self.loginCallback) { 48 | self.loginCallback(nil); 49 | self.loginCallback = nil; 50 | } 51 | 52 | [self emit:@"loggedin" withData:@[]]; 53 | } 54 | 55 | - (void)audioStreaming:(SPTAudioStreamingController *)audioStreaming didReceiveMessage:(NSString *)message { 56 | [self emit:@"connectionmessage" withData:@[message]]; 57 | } 58 | 59 | - (void)audioStreaming:(SPTAudioStreamingController *)audioStreaming didReceiveError:(NSError *)error { 60 | if (self.loginCallback) { 61 | self.loginCallback(error); 62 | self.loginCallback = nil; 63 | 64 | return; 65 | } 66 | 67 | [self emit:@"playbackerror" withData:@[getErrorFromMatrix(self.codeMatrix, [NSNumber numberWithInteger: [error code]])]]; 68 | } 69 | 70 | - (void) handleLoginWithCallback:(void (^)(NSError* err))callback { 71 | self.loginCallback = callback; 72 | } 73 | 74 | - (void) handleLogoutWithCallback:(void (^)(void))callback { 75 | self.logoutCallback = callback; 76 | } 77 | 78 | @end 79 | -------------------------------------------------------------------------------- /www/cordova-spotify.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * @copyright Festify Dev Team, 2017 3 | * @author Festify Dev Team 4 | * @licence MIT 5 | */ 6 | 7 | import exec from './lib/exec-promise'; 8 | import { EventEmitter as Emitter } from 'eventemitter3'; 9 | 10 | /** @hidden */ 11 | let emitter: Emitter | null; 12 | /** @hidden */ 13 | let emitterRegistered = false; 14 | 15 | /** 16 | * Authorization data for the Spotify API. 17 | * 18 | * @see [cordova-spotify-oauth]{@link https://github.com/Festify/cordova-spotify-oauth} 19 | */ 20 | export interface AuthorizationData { 21 | /** The client ID for which the token is valid. */ 22 | clientId: string; 23 | 24 | /** 25 | * The valid access token with `streaming` scope. 26 | * 27 | * You can use the [cordova-spotify-oauth]{@link https://github.com/Festify/cordova-spotify-oauth} 28 | * plugin for authentication. 29 | */ 30 | token: string; 31 | } 32 | 33 | /** 34 | * Plays a track by its URI. 35 | * 36 | * When `positionMs` is < 0, this function immediately throws an error 37 | * instead of returning a rejected promise. 38 | * 39 | * `auth` may change freely during runtime. The plugin will handle the 40 | * required login / logout processes automatically when a new track is played. 41 | * 42 | * @param {string} trackUri The URI of the track to play. 43 | * @param {AuthorizationData} auth Valid authorization data. 44 | * @param {number} positionMs The position (in millseconds) to start playing from. Must be >= 0. 45 | * @returns {Promise} A promise that resolves when the track starts playing. 46 | * @async 47 | */ 48 | export function play(trackUri: string, auth: AuthorizationData, positionMs?: number): Promise { 49 | if (!trackUri) { 50 | throw new ReferenceError("trackUri parameter is null"); 51 | } 52 | if (!auth) { 53 | throw new ReferenceError("auth parameter is null"); 54 | } 55 | if (!auth.token) { 56 | throw new ReferenceError("token parameter is null"); 57 | } 58 | if (!auth.clientId) { 59 | throw new ReferenceError("clientId parameter is null"); 60 | } 61 | if (positionMs !== undefined && positionMs < 0) { 62 | throw new RangeError("positionMs parameter is < 0"); 63 | } 64 | 65 | return exec('play', [trackUri, auth.token, auth.clientId, positionMs || 0]); 66 | } 67 | 68 | /** 69 | * Obtains the playback position in milliseconds. 70 | * 71 | * If no track is currently loaded / playing, the function returns 0. 72 | * 73 | * @returns {Promise} A promise with the playback position. 74 | * @async 75 | */ 76 | export function getPosition(): Promise { 77 | return exec('getPosition'); 78 | } 79 | 80 | /** 81 | * Pauses playback. 82 | * 83 | * If no track is currently loaded / playing, this function does nothing. 84 | * 85 | * @returns {Promise} A promise that resolves when the playback has been paused. 86 | * @async 87 | */ 88 | export function pause(): Promise { 89 | return exec('pause'); 90 | } 91 | 92 | /** 93 | * Resumes playback. 94 | * 95 | * If no track is currently loaded / playing, this function returns 96 | * a rejected Promise with an error of type `not_playing`. 97 | * 98 | * @returns {Promise} A promise that resolves when the playback has been resumed. 99 | * @async 100 | */ 101 | export function resume(): Promise { 102 | return exec('resume'); 103 | } 104 | 105 | /** 106 | * Seeks to the given position in the current track. 107 | * 108 | * If no track is currently loaded / playing, this function returns 109 | * a rejected Promise with an error of type `not_playing`. 110 | * 111 | * When `positionMs` is < 0, this function immediately throws an error 112 | * instead of returning a rejected promise. 113 | * 114 | * @param {number} positionMs The position (in millseconds) to seek to. Must be >= 0. 115 | * @returns {Promise} A promise that resolves when the seek has been done. 116 | * @async 117 | */ 118 | export function seekTo(positionMs: number): Promise { 119 | if (positionMs < 0) { 120 | throw new RangeError("positionMs parameter is < 0"); 121 | } 122 | 123 | return exec('seekTo', [positionMs]); 124 | } 125 | 126 | /** 127 | * Obtains an event emitter that relays the events fired by the native SDKs. 128 | * 129 | * The emitter will be created once and then returned on subsequent invocations. 130 | * The emitter implementation comes from [eventemitter3]{@link https://github.com/primus/eventemitter3}. 131 | * 132 | * The emitted events are the following: 133 | * - connectionmessage 134 | * - loggedin 135 | * - loggedout 136 | * - loginfailed 137 | * - playbackerror 138 | * - playbackevent 139 | * - temporaryerror 140 | * 141 | * In the case of `loginfailed`, `playbackevent` and `playbackerror`, the event contains 142 | * a payload that describes what happened exactly. The payload is simply the name 143 | * of the discriminant of the enum in the native SDK without the prefix (usually 144 | * `kSp` or `kSpError`). See the offical documentation [here]{@link https://spotify.github.io/android-sdk/player/com/spotify/sdk/android/player/Error.html} 145 | * and [here]{@link https://spotify.github.io/android-sdk/player/com/spotify/sdk/android/player/PlayerEvent.html} 146 | * for all variants. 147 | * 148 | * @returns {Promise} A promise that resolves to the emitter. 149 | * @async 150 | */ 151 | export function getEventEmitter(): Promise { 152 | if (emitter) { 153 | return Promise.resolve(emitter); 154 | } 155 | 156 | emitter = new Emitter(); 157 | 158 | return new Promise((res, rej) => { 159 | // Delay callbacks from native code because the Spotify SDKs 160 | // cannot cope with synchronous invocation from inside of an event 161 | // handler function. 162 | const resolve = v => setTimeout(() => res(v)); 163 | const reject = e => setTimeout(() => rej(e)); 164 | 165 | cordova.exec(event => { 166 | // First callback invocation confirms the emitter's registration 167 | // with the native code. The subsequent ones are actual events. 168 | if (!emitterRegistered) { 169 | emitterRegistered = true; 170 | resolve(emitter); 171 | } else { 172 | setTimeout(() => emitter!.emit(event.name, ...(event.args || []))); 173 | } 174 | }, err => { 175 | // Make sure we can try again 176 | if (!emitterRegistered) { 177 | emitter = null; 178 | } 179 | reject(err); 180 | }, 'SpotifyConnector', 'registerEventsListener', []); 181 | }); 182 | } -------------------------------------------------------------------------------- /src/ios/CordovaSpotify.m: -------------------------------------------------------------------------------- 1 | #import "CordovaSpotify.h" 2 | #import 3 | 4 | @implementation CordovaSpotify 5 | 6 | - (void)pluginInitialize { 7 | // Tell iOS to play audio even in background and when the ringer is silent 8 | [[AVAudioSession sharedInstance] setCategory: AVAudioSessionCategoryPlayback error: nil]; 9 | 10 | // Initialize delegates for event handling 11 | __weak id _commandDelegate = self.commandDelegate; 12 | self.audioStreamingDelegate = [AudioStreamingDelegate eventEmitterWithCommandDelegate: _commandDelegate]; 13 | self.audioStreamingPlaybackDelegate = [AudioStreamingPlaybackDelegate eventEmitterWithCommandDelegate: _commandDelegate]; 14 | 15 | // 512 MB disk caching 16 | self.cache = [[SPTDiskCache alloc] initWithCapacity: 1024 * 1024 * 512]; 17 | } 18 | 19 | - (void) loginAndPlay:(NSString*)accessToken 20 | withUri:(NSString*)trackUri 21 | fromPos:(NSInteger)positionMs 22 | withCommand:(CDVInvokedUrlCommand*)command { 23 | __weak CordovaSpotify* _self = self; 24 | [self.audioStreamingDelegate handleLoginWithCallback: ^(NSError* err) { 25 | if (err) { 26 | _self.currentToken = nil; 27 | 28 | [_self sendResultForCommand: command 29 | withErrorType: @"login_failed" 30 | andDescr: err.localizedDescription 31 | andSuccess: nil]; 32 | return; 33 | } 34 | 35 | _self.currentToken = accessToken; 36 | [_self doPlay: trackUri 37 | fromPos: positionMs 38 | withCommand: command]; 39 | }]; 40 | 41 | [self.player loginWithAccessToken: accessToken]; 42 | } 43 | 44 | - (void) initAndPlay:(NSString*)clientId 45 | withToken:(NSString*)accessToken 46 | withUri:(NSString*)trackUri 47 | fromPos:(NSInteger)positionMs 48 | withCommand:(CDVInvokedUrlCommand*)command { 49 | NSError* startError = nil; 50 | BOOL success = [[SPTAudioStreamingController sharedInstance] 51 | startWithClientId: clientId 52 | error: &startError]; 53 | if (!success) { 54 | self.currentClientId = nil; 55 | self.player.delegate = nil; 56 | self.player.diskCache = nil; 57 | self.player.playbackDelegate = nil; 58 | self.player = nil; 59 | 60 | if (startError) { 61 | [self sendResultForCommand: command 62 | withErrorType: @"player_init_failed" 63 | andDescr: startError.localizedDescription 64 | andSuccess: nil]; 65 | } else { 66 | [self sendResultForCommand: command 67 | withErrorType: @"player_init_failed" 68 | andDescr: @"Player could not be started" 69 | andSuccess: nil]; 70 | } 71 | return; 72 | } 73 | 74 | self.currentClientId = clientId; 75 | self.player = [SPTAudioStreamingController sharedInstance]; 76 | self.player.delegate = self.audioStreamingDelegate; 77 | self.player.diskCache = self.cache; 78 | self.player.playbackDelegate = self.audioStreamingPlaybackDelegate; 79 | 80 | [self loginAndPlay: accessToken 81 | withUri: trackUri 82 | fromPos: positionMs 83 | withCommand: command]; 84 | } 85 | 86 | - (void) doPlay:(NSString*)trackUri 87 | fromPos:(NSInteger)positionMs 88 | withCommand:(CDVInvokedUrlCommand*)command { 89 | // Take over audio session 90 | NSError *activationError = nil; 91 | BOOL success = [[AVAudioSession sharedInstance] setActive: YES error: &activationError]; 92 | if (!success) { 93 | if (activationError) { 94 | [self sendResultForCommand: command 95 | withErrorType: @"playback_failed" 96 | andDescr: activationError.localizedDescription 97 | andSuccess: nil]; 98 | } else { 99 | [self sendResultForCommand: command 100 | withErrorType: @"playback_failed" 101 | andDescr: @"Audio session could not be started" 102 | andSuccess: nil]; 103 | } 104 | return; 105 | } 106 | 107 | __weak CordovaSpotify* _self = self; 108 | SPTErrorableOperationCallback cb = ^(NSError* err) { 109 | if (err) { 110 | [_self sendResultForCommand: command 111 | withErrorType: @"playback_failed" 112 | andDescr: err.localizedDescription 113 | andSuccess: nil]; 114 | } else { 115 | [_self sendResultForCommand: command 116 | withErrorType: nil 117 | andDescr: nil 118 | andSuccess: nil]; 119 | } 120 | }; 121 | 122 | [self.player playSpotifyURI: trackUri 123 | startingWithIndex: 0 124 | startingWithPosition: positionMs / 1000.0 125 | callback: cb]; 126 | } 127 | 128 | - (void) logout:(void (^)(void))callback { 129 | if ([self.player loggedIn]) { 130 | [self.audioStreamingDelegate handleLogoutWithCallback: callback]; 131 | [self.player logout]; 132 | } else { 133 | callback(); 134 | } 135 | } 136 | 137 | - (void) sendResultForCommand:(CDVInvokedUrlCommand*)cmd 138 | withErrorType:(NSString*)err 139 | andDescr:(NSString*)errDescription 140 | andSuccess:(NSString*)success { 141 | CDVPluginResult *result; 142 | 143 | if (err == nil) { 144 | result = [CDVPluginResult 145 | resultWithStatus: CDVCommandStatus_OK 146 | messageAsString: success]; 147 | } else { 148 | result = [CDVPluginResult 149 | resultWithStatus: CDVCommandStatus_ERROR 150 | messageAsDictionary: @{ 151 | @"type": err, 152 | @"msg": errDescription 153 | }]; 154 | } 155 | 156 | [self.commandDelegate sendPluginResult: result callbackId: cmd.callbackId]; 157 | } 158 | 159 | /* 160 | * API FUNCTIONS 161 | */ 162 | 163 | - (void) getPosition:(CDVInvokedUrlCommand*)command { 164 | double durationMs = 0.0; 165 | SPTAudioStreamingController* player = self.player; 166 | 167 | if (player) { 168 | durationMs = [[player playbackState] position] * 1000.0; 169 | } 170 | 171 | CDVPluginResult *result = [CDVPluginResult 172 | resultWithStatus: CDVCommandStatus_OK 173 | messageAsDouble: durationMs]; 174 | 175 | [self.commandDelegate sendPluginResult: result callbackId: command.callbackId]; 176 | } 177 | 178 | - (void) play:(CDVInvokedUrlCommand*)command { 179 | __weak CordovaSpotify* _self = self; 180 | 181 | NSString* trackUri = [command.arguments objectAtIndex: 0]; 182 | NSString* accessToken = [command.arguments objectAtIndex: 1]; 183 | NSString* clientId = [command.arguments objectAtIndex: 2]; 184 | NSInteger from = [[command.arguments objectAtIndex: 3] intValue]; 185 | 186 | if (!self.player) { 187 | [self initAndPlay: clientId 188 | withToken: accessToken 189 | withUri: trackUri 190 | fromPos: from 191 | withCommand: command]; 192 | } else if (![clientId isEqualToString: self.currentClientId]) { 193 | [self logout: ^() { 194 | [_self initAndPlay: clientId 195 | withToken: accessToken 196 | withUri: trackUri 197 | fromPos: from 198 | withCommand: command]; 199 | }]; 200 | } else if (![accessToken isEqualToString: self.currentToken]) { 201 | [self logout: ^() { 202 | [_self loginAndPlay: accessToken 203 | withUri: trackUri 204 | fromPos: from 205 | withCommand: command]; 206 | }]; 207 | } else { 208 | [self doPlay: trackUri fromPos: from withCommand: command]; 209 | } 210 | } 211 | 212 | - (void) pause:(CDVInvokedUrlCommand*)command { 213 | SPTAudioStreamingController* player = self.player; 214 | if (!player) { 215 | [self sendResultForCommand: command 216 | withErrorType: nil 217 | andDescr: nil 218 | andSuccess: nil]; 219 | return; 220 | } 221 | 222 | __weak CordovaSpotify* _self = self; 223 | [player setIsPlaying: NO callback: ^(NSError* err) { 224 | if (!err) { 225 | [_self sendResultForCommand: command 226 | withErrorType: nil 227 | andDescr: nil 228 | andSuccess: nil]; 229 | } else { 230 | [_self sendResultForCommand: command 231 | withErrorType: @"pause_failed" 232 | andDescr: err.localizedDescription 233 | andSuccess: nil]; 234 | } 235 | }]; 236 | } 237 | 238 | - (void) resume:(CDVInvokedUrlCommand*)command { 239 | SPTAudioStreamingController* player = self.player; 240 | if (!player) { 241 | [self sendResultForCommand: command 242 | withErrorType: @"not_playing" 243 | andDescr: @"The Spotify SDK currently does not play music. Play a track to resume it." 244 | andSuccess: nil]; 245 | return; 246 | } 247 | 248 | __weak CordovaSpotify* _self = self; 249 | [player setIsPlaying: YES callback: ^(NSError* err) { 250 | if (!err) { 251 | [_self sendResultForCommand: command 252 | withErrorType: nil 253 | andDescr: nil 254 | andSuccess: nil]; 255 | } else { 256 | [_self sendResultForCommand: command 257 | withErrorType: @"resume_failed" 258 | andDescr: err.localizedDescription 259 | andSuccess: nil]; 260 | } 261 | }]; 262 | } 263 | 264 | - (void) registerEventsListener:(CDVInvokedUrlCommand*)command { 265 | [self.audioStreamingDelegate setCallbackId: command.callbackId]; 266 | [self.audioStreamingPlaybackDelegate setCallbackId: command.callbackId]; 267 | 268 | CDVPluginResult *result = [CDVPluginResult 269 | resultWithStatus: CDVCommandStatus_OK 270 | messageAsString: nil]; 271 | [result setKeepCallbackAsBool: YES]; 272 | 273 | [self.commandDelegate sendPluginResult: result callbackId: command.callbackId]; 274 | } 275 | 276 | - (void) seekTo:(CDVInvokedUrlCommand*)command { 277 | SPTAudioStreamingController* player = self.player; 278 | if (!player || ![[player playbackState] isPlaying]) { 279 | [self sendResultForCommand: command 280 | withErrorType: @"not_playing" 281 | andDescr: @"The Spotify SDK currently does not play music. Play a track to seek." 282 | andSuccess: nil]; 283 | return; 284 | } 285 | 286 | __weak CordovaSpotify* _self = self; 287 | NSInteger position = [[command.arguments objectAtIndex: 0] intValue]; 288 | 289 | [player seekTo: position / 1000.0 callback: ^(NSError *err) { 290 | if (!err) { 291 | [_self sendResultForCommand: command 292 | withErrorType: nil 293 | andDescr: nil 294 | andSuccess: nil]; 295 | } else { 296 | [_self sendResultForCommand: command 297 | withErrorType: @"seek_failed" 298 | andDescr: err.localizedDescription 299 | andSuccess: nil]; 300 | } 301 | }]; 302 | } 303 | @end 304 | -------------------------------------------------------------------------------- /src/android/CordovaSpotify.java: -------------------------------------------------------------------------------- 1 | package rocks.festify; 2 | 3 | import android.util.Log; 4 | 5 | import org.apache.cordova.CordovaPlugin; 6 | import org.apache.cordova.CallbackContext; 7 | import org.apache.cordova.PluginResult; 8 | 9 | import org.json.JSONArray; 10 | import org.json.JSONException; 11 | import org.json.JSONObject; 12 | 13 | import java.util.HashMap; 14 | import java.util.Date; 15 | import java.util.Objects; 16 | import java.util.concurrent.TimeUnit; 17 | import java.text.SimpleDateFormat; 18 | 19 | import android.app.Activity; 20 | import android.content.Intent; 21 | 22 | import com.spotify.sdk.android.player.Config; 23 | import com.spotify.sdk.android.player.ConnectionStateCallback; 24 | import com.spotify.sdk.android.player.Error; 25 | import com.spotify.sdk.android.player.Player; 26 | import com.spotify.sdk.android.player.PlaybackState; 27 | import com.spotify.sdk.android.player.Spotify; 28 | import com.spotify.sdk.android.player.SpotifyPlayer; 29 | 30 | import rocks.festify.ConnectionEventsHandler; 31 | import rocks.festify.PlayerEventsHandler; 32 | 33 | public class CordovaSpotify extends CordovaPlugin { 34 | private static final int LOGIN_REQUEST_CODE = 8139; 35 | private static final String TAG = "CDVSpotify"; 36 | 37 | private String currentAccessToken = null; 38 | private String currentClientId = null; 39 | private SpotifyPlayer player = null; 40 | 41 | private ConnectionEventsHandler connectionEventsHandler = new ConnectionEventsHandler(); 42 | private PlayerEventsHandler playerEventsHandler = new PlayerEventsHandler(); 43 | 44 | @Override 45 | public boolean execute(String action, JSONArray args, CallbackContext callbackContext) 46 | throws JSONException { 47 | if ("getPosition".equals(action)) { 48 | this.getPosition(callbackContext); 49 | return true; 50 | } else if ("play".equals(action)) { 51 | String trackUri = args.getString(0); 52 | String accessToken = args.getString(1); 53 | String clientId = args.getString(2); 54 | int fromPosition = args.getInt(3); 55 | this.play(callbackContext, clientId, accessToken, trackUri, fromPosition); 56 | return true; 57 | } else if ("pause".equals(action)) { 58 | this.pause(callbackContext); 59 | return true; 60 | } else if ("registerEventsListener".equals(action)) { 61 | this.registerEventsListener(callbackContext); 62 | return true; 63 | } else if ("resume".equals(action)) { 64 | this.resume(callbackContext); 65 | return true; 66 | } else if ("seekTo".equals(action)) { 67 | int position = args.getInt(0); 68 | this.seekTo(callbackContext, position); 69 | return true; 70 | } else { 71 | return false; 72 | } 73 | } 74 | 75 | /* 76 | * API Functions 77 | */ 78 | 79 | private void getPosition(final CallbackContext callbackContext) { 80 | SpotifyPlayer player = this.player; 81 | PluginResult res = null; 82 | if (player != null) { 83 | PlaybackState state = player.getPlaybackState(); 84 | 85 | if (state == null) { 86 | String msg = "Received null from SpotifyPlayer.getPlaybackState()!"; 87 | Log.e(TAG, msg); 88 | 89 | JSONObject descr = this.makeError("unknown", msg); 90 | callbackContext.error(descr); 91 | return; 92 | } 93 | 94 | res = new PluginResult(PluginResult.Status.OK, (float)state.positionMs); 95 | } else { 96 | res = new PluginResult(PluginResult.Status.OK, 0.0f); 97 | } 98 | 99 | callbackContext.sendPluginResult(res); 100 | } 101 | 102 | private void play( 103 | final CallbackContext callbackContext, 104 | final String clientId, 105 | final String accessToken, 106 | final String trackUri, 107 | final int fromPosition 108 | ) { 109 | SpotifyPlayer player = this.player; 110 | 111 | if (player == null) { 112 | this.initAndPlay( 113 | callbackContext, 114 | clientId, 115 | accessToken, 116 | trackUri, 117 | fromPosition 118 | ); 119 | } else if (!Objects.equals(clientId, this.currentClientId)) { 120 | this.logout(new Runnable() { 121 | @Override 122 | public void run() { 123 | CordovaSpotify.this.initAndPlay( 124 | callbackContext, 125 | clientId, 126 | accessToken, 127 | trackUri, 128 | fromPosition 129 | ); 130 | } 131 | }); 132 | } else if (!Objects.equals(accessToken, this.currentAccessToken)) { 133 | this.logout(new Runnable() { 134 | @Override 135 | public void run() { 136 | CordovaSpotify.this.loginAndPlay( 137 | callbackContext, 138 | accessToken, 139 | trackUri, 140 | fromPosition 141 | ); 142 | } 143 | }); 144 | } else { 145 | this.doPlay(callbackContext, trackUri, fromPosition); 146 | } 147 | } 148 | 149 | private void pause(final CallbackContext callbackContext) { 150 | SpotifyPlayer player = this.player; 151 | if (player == null) { 152 | callbackContext.success(); 153 | return; 154 | } 155 | 156 | PlaybackState state = player.getPlaybackState(); 157 | if (!state.isPlaying) { 158 | callbackContext.success(); 159 | return; 160 | } 161 | 162 | player.pause(new Player.OperationCallback() { 163 | @Override 164 | public void onSuccess() { 165 | callbackContext.success(); 166 | } 167 | 168 | @Override 169 | public void onError(Error error) { 170 | Log.e(TAG, "Pause failure: " + error.toString()); 171 | 172 | JSONObject descr = CordovaSpotify.this.makeError( 173 | "pause_failed", 174 | error.toString() 175 | ); 176 | callbackContext.error(descr); 177 | } 178 | }); 179 | } 180 | 181 | private void registerEventsListener(final CallbackContext callbackContext) { 182 | this.connectionEventsHandler.setCallback(callbackContext); 183 | this.playerEventsHandler.setCallback(callbackContext); 184 | 185 | final PluginResult res = new PluginResult(PluginResult.Status.OK); 186 | res.setKeepCallback(true); 187 | callbackContext.sendPluginResult(res); 188 | } 189 | 190 | private void resume(final CallbackContext callbackContext) { 191 | SpotifyPlayer player = this.player; 192 | if (player == null) { 193 | JSONObject descr = CordovaSpotify.this.makeError( 194 | "not_playing", 195 | "The Spotify SDK currently does not play music. Play a track to resume it." 196 | ); 197 | callbackContext.error(descr); 198 | return; 199 | } 200 | 201 | // resume 202 | player.resume(new Player.OperationCallback() { 203 | @Override 204 | public void onSuccess() { 205 | callbackContext.success(); 206 | } 207 | 208 | @Override 209 | public void onError(Error error) { 210 | Log.e(TAG, "Resume failure: " + error.toString()); 211 | 212 | JSONObject descr = CordovaSpotify.this.makeError( 213 | "resume_failed", 214 | error.toString() 215 | ); 216 | callbackContext.error(descr); 217 | } 218 | }); 219 | } 220 | 221 | private void seekTo(final CallbackContext callbackContext, int pos) { 222 | SpotifyPlayer player = this.player; 223 | if (player == null) { 224 | JSONObject descr = CordovaSpotify.this.makeError( 225 | "not_playing", 226 | "The Spotify SDK currently does not play music. Play a track to seek." 227 | ); 228 | callbackContext.error(descr); 229 | return; 230 | } 231 | 232 | player.seekToPosition(new Player.OperationCallback() { 233 | @Override 234 | public void onSuccess() { 235 | callbackContext.success(); 236 | } 237 | 238 | @Override 239 | public void onError(Error error) { 240 | Log.e(TAG, "Seek failure: " + error.toString()); 241 | 242 | JSONObject descr = CordovaSpotify.this.makeError( 243 | "seek_failed", 244 | error.toString() 245 | ); 246 | callbackContext.error(descr); 247 | } 248 | }, pos); 249 | } 250 | 251 | /* 252 | * LIFECYCLE CALLBACKS 253 | */ 254 | 255 | @Override 256 | public void onDestroy() { 257 | SpotifyPlayer player = this.player; 258 | this.player = null; 259 | if (player != null) { 260 | try { 261 | Spotify.awaitDestroyPlayer(this.cordova.getActivity(), 5, TimeUnit.SECONDS); 262 | } catch (InterruptedException e) { 263 | Log.wtf(TAG, "Interrupted while destroying Spotify player.", e); 264 | } 265 | } 266 | } 267 | 268 | /* 269 | * PRIVATES 270 | */ 271 | 272 | private void logout(final Runnable callback) { 273 | final SpotifyPlayer player = this.player; 274 | if (player == null) { 275 | callback.run(); 276 | return; 277 | } 278 | 279 | Runnable cb = new Runnable() { 280 | @Override 281 | public void run() { 282 | player.removeConnectionStateCallback(CordovaSpotify.this.connectionEventsHandler); 283 | player.removeNotificationCallback(CordovaSpotify.this.playerEventsHandler); 284 | 285 | callback.run(); 286 | } 287 | }; 288 | 289 | if (player.isLoggedIn()) { 290 | this.connectionEventsHandler.onLoggedOut(cb); 291 | player.logout(); 292 | } else { 293 | cb.run(); 294 | } 295 | } 296 | 297 | private void initAndPlay( 298 | final CallbackContext callbackContext, 299 | final String clientId, 300 | final String accessToken, 301 | final String trackUri, 302 | final int fromPosition 303 | ) { 304 | Config playerConfig = new Config( 305 | this.cordova.getActivity().getApplicationContext(), 306 | null, 307 | clientId 308 | ); 309 | 310 | Spotify.getPlayer(playerConfig, this.cordova.getActivity(), new SpotifyPlayer.InitializationObserver() { 311 | @Override 312 | public void onInitialized(SpotifyPlayer spotifyPlayer) { 313 | CordovaSpotify.this.currentClientId = clientId; 314 | CordovaSpotify.this.player = spotifyPlayer; 315 | 316 | CordovaSpotify.this.loginAndPlay(callbackContext, accessToken, trackUri, fromPosition); 317 | } 318 | 319 | @Override 320 | public void onError(Throwable throwable) { 321 | Log.e(TAG, "Player init failure.", throwable); 322 | 323 | CordovaSpotify.this.currentClientId = null; 324 | JSONObject descr = CordovaSpotify.this.makeError( 325 | "player_init_failed", 326 | throwable.getMessage() 327 | ); 328 | callbackContext.error(descr); 329 | } 330 | }); 331 | } 332 | 333 | private void loginAndPlay( 334 | final CallbackContext callbackContext, 335 | final String accessToken, 336 | final String trackUri, 337 | final int fromPosition 338 | ) { 339 | final SpotifyPlayer player = this.player; 340 | if (player == null) { 341 | Log.wtf(TAG, "SpotifyPlayer instance was null in loginAndPlay."); 342 | 343 | JSONObject descr = this.makeError( 344 | "unknown", 345 | "Received null as SpotifyPlayer in login method." 346 | ); 347 | callbackContext.error(descr); 348 | return; 349 | } 350 | 351 | player.addConnectionStateCallback(this.connectionEventsHandler); 352 | player.addNotificationCallback(this.playerEventsHandler); 353 | 354 | this.connectionEventsHandler.onLoggedIn(new Player.OperationCallback() { 355 | @Override 356 | public void onSuccess() { 357 | CordovaSpotify.this.currentAccessToken = accessToken; 358 | 359 | CordovaSpotify.this.doPlay( 360 | callbackContext, 361 | trackUri, 362 | fromPosition 363 | ); 364 | } 365 | 366 | @Override 367 | public void onError(Error error) { 368 | Log.e(TAG, "Login failure: " + error.toString()); 369 | 370 | CordovaSpotify.this.currentAccessToken = null; 371 | JSONObject descr = CordovaSpotify.this.makeError( 372 | "login_failed", 373 | error.toString() 374 | ); 375 | callbackContext.error(descr); 376 | } 377 | }); 378 | 379 | player.login(accessToken); 380 | } 381 | 382 | private void doPlay( 383 | final CallbackContext callbackContext, 384 | final String trackUri, 385 | final int fromPosition) { 386 | final SpotifyPlayer player = this.player; 387 | if (player == null) { 388 | Log.wtf(TAG, "SpotifyPlayer instance was null in doPlay."); 389 | 390 | JSONObject descr = this.makeError( 391 | "unknown", 392 | "Received null as SpotifyPlayer in play method." 393 | ); 394 | callbackContext.error(descr); 395 | return; 396 | } 397 | 398 | player.playUri(new Player.OperationCallback() { 399 | @Override 400 | public void onSuccess() { 401 | callbackContext.success(); 402 | } 403 | 404 | @Override 405 | public void onError(Error error) { 406 | Log.e(TAG, "Playback failure: " + error.toString()); 407 | 408 | JSONObject descr = CordovaSpotify.this.makeError( 409 | "playback_failed", 410 | error.toString() 411 | ); 412 | callbackContext.error(descr); 413 | } 414 | }, trackUri, 0, fromPosition); 415 | } 416 | 417 | private JSONObject makeError(String type, String msg) { 418 | try { 419 | final JSONObject obj = new JSONObject(); 420 | obj.put("type", type); 421 | obj.put("msg", msg); 422 | return obj; 423 | } catch (JSONException e) { 424 | Log.wtf(TAG, "Got a JSONException during error creation.", e); 425 | return null; 426 | } 427 | } 428 | } -------------------------------------------------------------------------------- /www/yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "@types/cordova@^0.0.34": 6 | version "0.0.34" 7 | resolved "https://registry.yarnpkg.com/@types/cordova/-/cordova-0.0.34.tgz#ea7addf74ecec3d7629827a0c39e2c9addc73d04" 8 | 9 | "@types/fs-extra@4.0.0": 10 | version "4.0.0" 11 | resolved "https://registry.yarnpkg.com/@types/fs-extra/-/fs-extra-4.0.0.tgz#1dd742ad5c9bce308f7a52d02ebc01421bc9102f" 12 | dependencies: 13 | "@types/node" "*" 14 | 15 | "@types/handlebars@4.0.31": 16 | version "4.0.31" 17 | resolved "https://registry.yarnpkg.com/@types/handlebars/-/handlebars-4.0.31.tgz#a7fba66fafe42713aee88eeca8db91192efe6e72" 18 | 19 | "@types/highlight.js@9.1.8": 20 | version "9.1.8" 21 | resolved "https://registry.yarnpkg.com/@types/highlight.js/-/highlight.js-9.1.8.tgz#d227f18bcb8f3f187e16965f2444859a04689758" 22 | 23 | "@types/lodash@4.14.74": 24 | version "4.14.74" 25 | resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.74.tgz#ac3bd8db988e7f7038e5d22bd76a7ba13f876168" 26 | 27 | "@types/marked@0.3.0": 28 | version "0.3.0" 29 | resolved "https://registry.yarnpkg.com/@types/marked/-/marked-0.3.0.tgz#583c223dd33385a1dda01aaf77b0cd0411c4b524" 30 | 31 | "@types/minimatch@2.0.29": 32 | version "2.0.29" 33 | resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-2.0.29.tgz#5002e14f75e2d71e564281df0431c8c1b4a2a36a" 34 | 35 | "@types/node@*", "@types/node@^8.0.46": 36 | version "8.0.46" 37 | resolved "https://registry.yarnpkg.com/@types/node/-/node-8.0.46.tgz#6e1766b2d0ed06631d5b5f87bb8e72c8dbb6888e" 38 | 39 | "@types/shelljs@0.7.0": 40 | version "0.7.0" 41 | resolved "https://registry.yarnpkg.com/@types/shelljs/-/shelljs-0.7.0.tgz#229c157c6bc1e67d6b990e6c5e18dbd2ff58cff0" 42 | dependencies: 43 | "@types/node" "*" 44 | 45 | "@types/source-map@*": 46 | version "0.5.1" 47 | resolved "https://registry.yarnpkg.com/@types/source-map/-/source-map-0.5.1.tgz#7e74db5d06ab373a712356eebfaea2fad0ea2367" 48 | 49 | "@types/tapable@*": 50 | version "0.2.4" 51 | resolved "https://registry.yarnpkg.com/@types/tapable/-/tapable-0.2.4.tgz#8181a228da46185439300e600c5ae3b3b3982585" 52 | 53 | "@types/uglify-js@*": 54 | version "2.6.29" 55 | resolved "https://registry.yarnpkg.com/@types/uglify-js/-/uglify-js-2.6.29.tgz#521347f69e20201d218f5991ae66e10878afcf1a" 56 | dependencies: 57 | "@types/source-map" "*" 58 | 59 | "@types/webpack@^3.0.13": 60 | version "3.0.13" 61 | resolved "https://registry.yarnpkg.com/@types/webpack/-/webpack-3.0.13.tgz#5a49ae51e784e73bc46830a6a20656e85b8af0e6" 62 | dependencies: 63 | "@types/node" "*" 64 | "@types/tapable" "*" 65 | "@types/uglify-js" "*" 66 | 67 | abbrev@1: 68 | version "1.1.1" 69 | resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" 70 | 71 | acorn-dynamic-import@^2.0.0: 72 | version "2.0.2" 73 | resolved "https://registry.yarnpkg.com/acorn-dynamic-import/-/acorn-dynamic-import-2.0.2.tgz#c752bd210bef679501b6c6cb7fc84f8f47158cc4" 74 | dependencies: 75 | acorn "^4.0.3" 76 | 77 | acorn@^4.0.3: 78 | version "4.0.13" 79 | resolved "https://registry.yarnpkg.com/acorn/-/acorn-4.0.13.tgz#105495ae5361d697bd195c825192e1ad7f253787" 80 | 81 | acorn@^5.0.0: 82 | version "5.1.2" 83 | resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.1.2.tgz#911cb53e036807cf0fa778dc5d370fbd864246d7" 84 | 85 | ajv-keywords@^2.0.0: 86 | version "2.1.0" 87 | resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-2.1.0.tgz#a296e17f7bfae7c1ce4f7e0de53d29cb32162df0" 88 | 89 | ajv@^4.9.1: 90 | version "4.11.8" 91 | resolved "https://registry.yarnpkg.com/ajv/-/ajv-4.11.8.tgz#82ffb02b29e662ae53bdc20af15947706739c536" 92 | dependencies: 93 | co "^4.6.0" 94 | json-stable-stringify "^1.0.1" 95 | 96 | ajv@^5.1.5: 97 | version "5.2.5" 98 | resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.2.5.tgz#b637234d3e2675eb5f79fc652242a853a48cb49f" 99 | dependencies: 100 | co "^4.6.0" 101 | fast-deep-equal "^1.0.0" 102 | json-schema-traverse "^0.3.0" 103 | json-stable-stringify "^1.0.1" 104 | 105 | align-text@^0.1.1, align-text@^0.1.3: 106 | version "0.1.4" 107 | resolved "https://registry.yarnpkg.com/align-text/-/align-text-0.1.4.tgz#0cd90a561093f35d0a99256c22b7069433fad117" 108 | dependencies: 109 | kind-of "^3.0.2" 110 | longest "^1.0.1" 111 | repeat-string "^1.5.2" 112 | 113 | amdefine@>=0.0.4: 114 | version "1.0.1" 115 | resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" 116 | 117 | ansi-regex@^2.0.0: 118 | version "2.1.1" 119 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" 120 | 121 | ansi-regex@^3.0.0: 122 | version "3.0.0" 123 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" 124 | 125 | anymatch@^1.3.0: 126 | version "1.3.2" 127 | resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-1.3.2.tgz#553dcb8f91e3c889845dfdba34c77721b90b9d7a" 128 | dependencies: 129 | micromatch "^2.1.5" 130 | normalize-path "^2.0.0" 131 | 132 | aproba@^1.0.3: 133 | version "1.2.0" 134 | resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" 135 | 136 | are-we-there-yet@~1.1.2: 137 | version "1.1.4" 138 | resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.4.tgz#bb5dca382bb94f05e15194373d16fd3ba1ca110d" 139 | dependencies: 140 | delegates "^1.0.0" 141 | readable-stream "^2.0.6" 142 | 143 | arr-diff@^2.0.0: 144 | version "2.0.0" 145 | resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-2.0.0.tgz#8f3b827f955a8bd669697e4a4256ac3ceae356cf" 146 | dependencies: 147 | arr-flatten "^1.0.1" 148 | 149 | arr-diff@^4.0.0: 150 | version "4.0.0" 151 | resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" 152 | 153 | arr-flatten@^1.0.1, arr-flatten@^1.1.0: 154 | version "1.1.0" 155 | resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" 156 | 157 | arr-union@^3.1.0: 158 | version "3.1.0" 159 | resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" 160 | 161 | array-unique@^0.2.1: 162 | version "0.2.1" 163 | resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53" 164 | 165 | array-unique@^0.3.2: 166 | version "0.3.2" 167 | resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" 168 | 169 | asn1.js@^4.0.0: 170 | version "4.9.1" 171 | resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-4.9.1.tgz#48ba240b45a9280e94748990ba597d216617fd40" 172 | dependencies: 173 | bn.js "^4.0.0" 174 | inherits "^2.0.1" 175 | minimalistic-assert "^1.0.0" 176 | 177 | asn1@~0.2.3: 178 | version "0.2.3" 179 | resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.3.tgz#dac8787713c9966849fc8180777ebe9c1ddf3b86" 180 | 181 | assert-plus@1.0.0, assert-plus@^1.0.0: 182 | version "1.0.0" 183 | resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" 184 | 185 | assert-plus@^0.2.0: 186 | version "0.2.0" 187 | resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-0.2.0.tgz#d74e1b87e7affc0db8aadb7021f3fe48101ab234" 188 | 189 | assert@^1.1.1: 190 | version "1.4.1" 191 | resolved "https://registry.yarnpkg.com/assert/-/assert-1.4.1.tgz#99912d591836b5a6f5b345c0f07eefc08fc65d91" 192 | dependencies: 193 | util "0.10.3" 194 | 195 | async-each@^1.0.0: 196 | version "1.0.1" 197 | resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.1.tgz#19d386a1d9edc6e7c1c85d388aedbcc56d33602d" 198 | 199 | async@^1.4.0: 200 | version "1.5.2" 201 | resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" 202 | 203 | async@^2.1.2, async@^2.5.0: 204 | version "2.5.0" 205 | resolved "https://registry.yarnpkg.com/async/-/async-2.5.0.tgz#843190fd6b7357a0b9e1c956edddd5ec8462b54d" 206 | dependencies: 207 | lodash "^4.14.0" 208 | 209 | asynckit@^0.4.0: 210 | version "0.4.0" 211 | resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" 212 | 213 | atob@^2.0.0: 214 | version "2.0.3" 215 | resolved "https://registry.yarnpkg.com/atob/-/atob-2.0.3.tgz#19c7a760473774468f20b2d2d03372ad7d4cbf5d" 216 | 217 | awesome-typescript-loader@^3.2.3: 218 | version "3.2.3" 219 | resolved "https://registry.yarnpkg.com/awesome-typescript-loader/-/awesome-typescript-loader-3.2.3.tgz#aa2119b7c808a031e2b28945b031450a8975367f" 220 | dependencies: 221 | colors "^1.1.2" 222 | enhanced-resolve "3.3.0" 223 | loader-utils "^1.1.0" 224 | lodash "^4.17.4" 225 | micromatch "^3.0.3" 226 | mkdirp "^0.5.1" 227 | object-assign "^4.1.1" 228 | source-map-support "^0.4.15" 229 | 230 | aws-sign2@~0.6.0: 231 | version "0.6.0" 232 | resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.6.0.tgz#14342dd38dbcc94d0e5b87d763cd63612c0e794f" 233 | 234 | aws4@^1.2.1: 235 | version "1.6.0" 236 | resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.6.0.tgz#83ef5ca860b2b32e4a0deedee8c771b9db57471e" 237 | 238 | balanced-match@^1.0.0: 239 | version "1.0.0" 240 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" 241 | 242 | base64-js@^1.0.2: 243 | version "1.2.1" 244 | resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.2.1.tgz#a91947da1f4a516ea38e5b4ec0ec3773675e0886" 245 | 246 | base@^0.11.1: 247 | version "0.11.2" 248 | resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" 249 | dependencies: 250 | cache-base "^1.0.1" 251 | class-utils "^0.3.5" 252 | component-emitter "^1.2.1" 253 | define-property "^1.0.0" 254 | isobject "^3.0.1" 255 | mixin-deep "^1.2.0" 256 | pascalcase "^0.1.1" 257 | 258 | bcrypt-pbkdf@^1.0.0: 259 | version "1.0.1" 260 | resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz#63bc5dcb61331b92bc05fd528953c33462a06f8d" 261 | dependencies: 262 | tweetnacl "^0.14.3" 263 | 264 | big.js@^3.1.3: 265 | version "3.2.0" 266 | resolved "https://registry.yarnpkg.com/big.js/-/big.js-3.2.0.tgz#a5fc298b81b9e0dca2e458824784b65c52ba588e" 267 | 268 | binary-extensions@^1.0.0: 269 | version "1.10.0" 270 | resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.10.0.tgz#9aeb9a6c5e88638aad171e167f5900abe24835d0" 271 | 272 | block-stream@*: 273 | version "0.0.9" 274 | resolved "https://registry.yarnpkg.com/block-stream/-/block-stream-0.0.9.tgz#13ebfe778a03205cfe03751481ebb4b3300c126a" 275 | dependencies: 276 | inherits "~2.0.0" 277 | 278 | bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.4.0: 279 | version "4.11.8" 280 | resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.8.tgz#2cde09eb5ee341f484746bb0309b3253b1b1442f" 281 | 282 | boom@2.x.x: 283 | version "2.10.1" 284 | resolved "https://registry.yarnpkg.com/boom/-/boom-2.10.1.tgz#39c8918ceff5799f83f9492a848f625add0c766f" 285 | dependencies: 286 | hoek "2.x.x" 287 | 288 | brace-expansion@^1.1.7: 289 | version "1.1.8" 290 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.8.tgz#c07b211c7c952ec1f8efd51a77ef0d1d3990a292" 291 | dependencies: 292 | balanced-match "^1.0.0" 293 | concat-map "0.0.1" 294 | 295 | braces@^1.8.2: 296 | version "1.8.5" 297 | resolved "https://registry.yarnpkg.com/braces/-/braces-1.8.5.tgz#ba77962e12dff969d6b76711e914b737857bf6a7" 298 | dependencies: 299 | expand-range "^1.8.1" 300 | preserve "^0.2.0" 301 | repeat-element "^1.1.2" 302 | 303 | braces@^2.3.0: 304 | version "2.3.0" 305 | resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.0.tgz#a46941cb5fb492156b3d6a656e06c35364e3e66e" 306 | dependencies: 307 | arr-flatten "^1.1.0" 308 | array-unique "^0.3.2" 309 | define-property "^1.0.0" 310 | extend-shallow "^2.0.1" 311 | fill-range "^4.0.0" 312 | isobject "^3.0.1" 313 | repeat-element "^1.1.2" 314 | snapdragon "^0.8.1" 315 | snapdragon-node "^2.0.1" 316 | split-string "^3.0.2" 317 | to-regex "^3.0.1" 318 | 319 | brorand@^1.0.1: 320 | version "1.1.0" 321 | resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" 322 | 323 | browserify-aes@^1.0.0, browserify-aes@^1.0.4: 324 | version "1.1.1" 325 | resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.1.1.tgz#38b7ab55edb806ff2dcda1a7f1620773a477c49f" 326 | dependencies: 327 | buffer-xor "^1.0.3" 328 | cipher-base "^1.0.0" 329 | create-hash "^1.1.0" 330 | evp_bytestokey "^1.0.3" 331 | inherits "^2.0.1" 332 | safe-buffer "^5.0.1" 333 | 334 | browserify-cipher@^1.0.0: 335 | version "1.0.0" 336 | resolved "https://registry.yarnpkg.com/browserify-cipher/-/browserify-cipher-1.0.0.tgz#9988244874bf5ed4e28da95666dcd66ac8fc363a" 337 | dependencies: 338 | browserify-aes "^1.0.4" 339 | browserify-des "^1.0.0" 340 | evp_bytestokey "^1.0.0" 341 | 342 | browserify-des@^1.0.0: 343 | version "1.0.0" 344 | resolved "https://registry.yarnpkg.com/browserify-des/-/browserify-des-1.0.0.tgz#daa277717470922ed2fe18594118a175439721dd" 345 | dependencies: 346 | cipher-base "^1.0.1" 347 | des.js "^1.0.0" 348 | inherits "^2.0.1" 349 | 350 | browserify-rsa@^4.0.0: 351 | version "4.0.1" 352 | resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.0.1.tgz#21e0abfaf6f2029cf2fafb133567a701d4135524" 353 | dependencies: 354 | bn.js "^4.1.0" 355 | randombytes "^2.0.1" 356 | 357 | browserify-sign@^4.0.0: 358 | version "4.0.4" 359 | resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.0.4.tgz#aa4eb68e5d7b658baa6bf6a57e630cbd7a93d298" 360 | dependencies: 361 | bn.js "^4.1.1" 362 | browserify-rsa "^4.0.0" 363 | create-hash "^1.1.0" 364 | create-hmac "^1.1.2" 365 | elliptic "^6.0.0" 366 | inherits "^2.0.1" 367 | parse-asn1 "^5.0.0" 368 | 369 | browserify-zlib@^0.1.4: 370 | version "0.1.4" 371 | resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.1.4.tgz#bb35f8a519f600e0fa6b8485241c979d0141fb2d" 372 | dependencies: 373 | pako "~0.2.0" 374 | 375 | buffer-xor@^1.0.3: 376 | version "1.0.3" 377 | resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" 378 | 379 | buffer@^4.3.0: 380 | version "4.9.1" 381 | resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.1.tgz#6d1bb601b07a4efced97094132093027c95bc298" 382 | dependencies: 383 | base64-js "^1.0.2" 384 | ieee754 "^1.1.4" 385 | isarray "^1.0.0" 386 | 387 | builtin-modules@^1.0.0: 388 | version "1.1.1" 389 | resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" 390 | 391 | builtin-status-codes@^3.0.0: 392 | version "3.0.0" 393 | resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8" 394 | 395 | cache-base@^1.0.1: 396 | version "1.0.1" 397 | resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" 398 | dependencies: 399 | collection-visit "^1.0.0" 400 | component-emitter "^1.2.1" 401 | get-value "^2.0.6" 402 | has-value "^1.0.0" 403 | isobject "^3.0.1" 404 | set-value "^2.0.0" 405 | to-object-path "^0.3.0" 406 | union-value "^1.0.0" 407 | unset-value "^1.0.0" 408 | 409 | camelcase@^1.0.2: 410 | version "1.2.1" 411 | resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-1.2.1.tgz#9bb5304d2e0b56698b2c758b08a3eaa9daa58a39" 412 | 413 | camelcase@^4.1.0: 414 | version "4.1.0" 415 | resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" 416 | 417 | caseless@~0.12.0: 418 | version "0.12.0" 419 | resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" 420 | 421 | center-align@^0.1.1: 422 | version "0.1.3" 423 | resolved "https://registry.yarnpkg.com/center-align/-/center-align-0.1.3.tgz#aa0d32629b6ee972200411cbd4461c907bc2b7ad" 424 | dependencies: 425 | align-text "^0.1.3" 426 | lazy-cache "^1.0.3" 427 | 428 | chokidar@^1.7.0: 429 | version "1.7.0" 430 | resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-1.7.0.tgz#798e689778151c8076b4b360e5edd28cda2bb468" 431 | dependencies: 432 | anymatch "^1.3.0" 433 | async-each "^1.0.0" 434 | glob-parent "^2.0.0" 435 | inherits "^2.0.1" 436 | is-binary-path "^1.0.0" 437 | is-glob "^2.0.0" 438 | path-is-absolute "^1.0.0" 439 | readdirp "^2.0.0" 440 | optionalDependencies: 441 | fsevents "^1.0.0" 442 | 443 | cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: 444 | version "1.0.4" 445 | resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de" 446 | dependencies: 447 | inherits "^2.0.1" 448 | safe-buffer "^5.0.1" 449 | 450 | class-utils@^0.3.5: 451 | version "0.3.5" 452 | resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.5.tgz#17e793103750f9627b2176ea34cfd1b565903c80" 453 | dependencies: 454 | arr-union "^3.1.0" 455 | define-property "^0.2.5" 456 | isobject "^3.0.0" 457 | lazy-cache "^2.0.2" 458 | static-extend "^0.1.1" 459 | 460 | cliui@^2.1.0: 461 | version "2.1.0" 462 | resolved "https://registry.yarnpkg.com/cliui/-/cliui-2.1.0.tgz#4b475760ff80264c762c3a1719032e91c7fea0d1" 463 | dependencies: 464 | center-align "^0.1.1" 465 | right-align "^0.1.1" 466 | wordwrap "0.0.2" 467 | 468 | cliui@^3.2.0: 469 | version "3.2.0" 470 | resolved "https://registry.yarnpkg.com/cliui/-/cliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d" 471 | dependencies: 472 | string-width "^1.0.1" 473 | strip-ansi "^3.0.1" 474 | wrap-ansi "^2.0.0" 475 | 476 | co@^4.6.0: 477 | version "4.6.0" 478 | resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" 479 | 480 | code-point-at@^1.0.0: 481 | version "1.1.0" 482 | resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" 483 | 484 | collection-visit@^1.0.0: 485 | version "1.0.0" 486 | resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" 487 | dependencies: 488 | map-visit "^1.0.0" 489 | object-visit "^1.0.0" 490 | 491 | colors@^1.1.2: 492 | version "1.1.2" 493 | resolved "https://registry.yarnpkg.com/colors/-/colors-1.1.2.tgz#168a4701756b6a7f51a12ce0c97bfa28c084ed63" 494 | 495 | combined-stream@^1.0.5, combined-stream@~1.0.5: 496 | version "1.0.5" 497 | resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.5.tgz#938370a57b4a51dea2c77c15d5c5fdf895164009" 498 | dependencies: 499 | delayed-stream "~1.0.0" 500 | 501 | component-emitter@^1.2.1: 502 | version "1.2.1" 503 | resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.2.1.tgz#137918d6d78283f7df7a6b7c5a63e140e69425e6" 504 | 505 | concat-map@0.0.1: 506 | version "0.0.1" 507 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" 508 | 509 | console-browserify@^1.1.0: 510 | version "1.1.0" 511 | resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.1.0.tgz#f0241c45730a9fc6323b206dbf38edc741d0bb10" 512 | dependencies: 513 | date-now "^0.1.4" 514 | 515 | console-control-strings@^1.0.0, console-control-strings@~1.1.0: 516 | version "1.1.0" 517 | resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" 518 | 519 | constants-browserify@^1.0.0: 520 | version "1.0.0" 521 | resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75" 522 | 523 | copy-descriptor@^0.1.0: 524 | version "0.1.1" 525 | resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" 526 | 527 | core-util-is@1.0.2, core-util-is@~1.0.0: 528 | version "1.0.2" 529 | resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" 530 | 531 | create-ecdh@^4.0.0: 532 | version "4.0.0" 533 | resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.0.tgz#888c723596cdf7612f6498233eebd7a35301737d" 534 | dependencies: 535 | bn.js "^4.1.0" 536 | elliptic "^6.0.0" 537 | 538 | create-hash@^1.1.0, create-hash@^1.1.2: 539 | version "1.1.3" 540 | resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.1.3.tgz#606042ac8b9262750f483caddab0f5819172d8fd" 541 | dependencies: 542 | cipher-base "^1.0.1" 543 | inherits "^2.0.1" 544 | ripemd160 "^2.0.0" 545 | sha.js "^2.4.0" 546 | 547 | create-hmac@^1.1.0, create-hmac@^1.1.2, create-hmac@^1.1.4: 548 | version "1.1.6" 549 | resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.6.tgz#acb9e221a4e17bdb076e90657c42b93e3726cf06" 550 | dependencies: 551 | cipher-base "^1.0.3" 552 | create-hash "^1.1.0" 553 | inherits "^2.0.1" 554 | ripemd160 "^2.0.0" 555 | safe-buffer "^5.0.1" 556 | sha.js "^2.4.8" 557 | 558 | cross-spawn@^5.0.1: 559 | version "5.1.0" 560 | resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" 561 | dependencies: 562 | lru-cache "^4.0.1" 563 | shebang-command "^1.2.0" 564 | which "^1.2.9" 565 | 566 | cryptiles@2.x.x: 567 | version "2.0.5" 568 | resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-2.0.5.tgz#3bdfecdc608147c1c67202fa291e7dca59eaa3b8" 569 | dependencies: 570 | boom "2.x.x" 571 | 572 | crypto-browserify@^3.11.0: 573 | version "3.11.1" 574 | resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.11.1.tgz#948945efc6757a400d6e5e5af47194d10064279f" 575 | dependencies: 576 | browserify-cipher "^1.0.0" 577 | browserify-sign "^4.0.0" 578 | create-ecdh "^4.0.0" 579 | create-hash "^1.1.0" 580 | create-hmac "^1.1.0" 581 | diffie-hellman "^5.0.0" 582 | inherits "^2.0.1" 583 | pbkdf2 "^3.0.3" 584 | public-encrypt "^4.0.0" 585 | randombytes "^2.0.0" 586 | 587 | d@1: 588 | version "1.0.0" 589 | resolved "https://registry.yarnpkg.com/d/-/d-1.0.0.tgz#754bb5bfe55451da69a58b94d45f4c5b0462d58f" 590 | dependencies: 591 | es5-ext "^0.10.9" 592 | 593 | dashdash@^1.12.0: 594 | version "1.14.1" 595 | resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" 596 | dependencies: 597 | assert-plus "^1.0.0" 598 | 599 | date-now@^0.1.4: 600 | version "0.1.4" 601 | resolved "https://registry.yarnpkg.com/date-now/-/date-now-0.1.4.tgz#eaf439fd4d4848ad74e5cc7dbef200672b9e345b" 602 | 603 | debug@^2.2.0, debug@^2.3.3: 604 | version "2.6.9" 605 | resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" 606 | dependencies: 607 | ms "2.0.0" 608 | 609 | decamelize@^1.0.0, decamelize@^1.1.1: 610 | version "1.2.0" 611 | resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" 612 | 613 | decode-uri-component@^0.2.0: 614 | version "0.2.0" 615 | resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" 616 | 617 | deep-extend@~0.4.0: 618 | version "0.4.2" 619 | resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.4.2.tgz#48b699c27e334bf89f10892be432f6e4c7d34a7f" 620 | 621 | define-property@^0.2.5: 622 | version "0.2.5" 623 | resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" 624 | dependencies: 625 | is-descriptor "^0.1.0" 626 | 627 | define-property@^1.0.0: 628 | version "1.0.0" 629 | resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" 630 | dependencies: 631 | is-descriptor "^1.0.0" 632 | 633 | delayed-stream@~1.0.0: 634 | version "1.0.0" 635 | resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" 636 | 637 | delegates@^1.0.0: 638 | version "1.0.0" 639 | resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" 640 | 641 | des.js@^1.0.0: 642 | version "1.0.0" 643 | resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.0.tgz#c074d2e2aa6a8a9a07dbd61f9a15c2cd83ec8ecc" 644 | dependencies: 645 | inherits "^2.0.1" 646 | minimalistic-assert "^1.0.0" 647 | 648 | diffie-hellman@^5.0.0: 649 | version "5.0.2" 650 | resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.2.tgz#b5835739270cfe26acf632099fded2a07f209e5e" 651 | dependencies: 652 | bn.js "^4.1.0" 653 | miller-rabin "^4.0.0" 654 | randombytes "^2.0.0" 655 | 656 | domain-browser@^1.1.1: 657 | version "1.1.7" 658 | resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.1.7.tgz#867aa4b093faa05f1de08c06f4d7b21fdf8698bc" 659 | 660 | ecc-jsbn@~0.1.1: 661 | version "0.1.1" 662 | resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz#0fc73a9ed5f0d53c38193398523ef7e543777505" 663 | dependencies: 664 | jsbn "~0.1.0" 665 | 666 | elliptic@^6.0.0: 667 | version "6.4.0" 668 | resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.4.0.tgz#cac9af8762c85836187003c8dfe193e5e2eae5df" 669 | dependencies: 670 | bn.js "^4.4.0" 671 | brorand "^1.0.1" 672 | hash.js "^1.0.0" 673 | hmac-drbg "^1.0.0" 674 | inherits "^2.0.1" 675 | minimalistic-assert "^1.0.0" 676 | minimalistic-crypto-utils "^1.0.0" 677 | 678 | emojis-list@^2.0.0: 679 | version "2.1.0" 680 | resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389" 681 | 682 | enhanced-resolve@3.3.0: 683 | version "3.3.0" 684 | resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-3.3.0.tgz#950964ecc7f0332a42321b673b38dc8ff15535b3" 685 | dependencies: 686 | graceful-fs "^4.1.2" 687 | memory-fs "^0.4.0" 688 | object-assign "^4.0.1" 689 | tapable "^0.2.5" 690 | 691 | enhanced-resolve@^3.4.0: 692 | version "3.4.1" 693 | resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-3.4.1.tgz#0421e339fd71419b3da13d129b3979040230476e" 694 | dependencies: 695 | graceful-fs "^4.1.2" 696 | memory-fs "^0.4.0" 697 | object-assign "^4.0.1" 698 | tapable "^0.2.7" 699 | 700 | errno@^0.1.3: 701 | version "0.1.4" 702 | resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.4.tgz#b896e23a9e5e8ba33871fc996abd3635fc9a1c7d" 703 | dependencies: 704 | prr "~0.0.0" 705 | 706 | error-ex@^1.2.0: 707 | version "1.3.1" 708 | resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.1.tgz#f855a86ce61adc4e8621c3cda21e7a7612c3a8dc" 709 | dependencies: 710 | is-arrayish "^0.2.1" 711 | 712 | es5-ext@^0.10.14, es5-ext@^0.10.35, es5-ext@^0.10.9, es5-ext@~0.10.14: 713 | version "0.10.35" 714 | resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.35.tgz#18ee858ce6a3c45c7d79e91c15fcca9ec568494f" 715 | dependencies: 716 | es6-iterator "~2.0.1" 717 | es6-symbol "~3.1.1" 718 | 719 | es6-iterator@^2.0.1, es6-iterator@~2.0.1: 720 | version "2.0.3" 721 | resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.3.tgz#a7de889141a05a94b0854403b2d0a0fbfa98f3b7" 722 | dependencies: 723 | d "1" 724 | es5-ext "^0.10.35" 725 | es6-symbol "^3.1.1" 726 | 727 | es6-map@^0.1.3: 728 | version "0.1.5" 729 | resolved "https://registry.yarnpkg.com/es6-map/-/es6-map-0.1.5.tgz#9136e0503dcc06a301690f0bb14ff4e364e949f0" 730 | dependencies: 731 | d "1" 732 | es5-ext "~0.10.14" 733 | es6-iterator "~2.0.1" 734 | es6-set "~0.1.5" 735 | es6-symbol "~3.1.1" 736 | event-emitter "~0.3.5" 737 | 738 | es6-set@~0.1.5: 739 | version "0.1.5" 740 | resolved "https://registry.yarnpkg.com/es6-set/-/es6-set-0.1.5.tgz#d2b3ec5d4d800ced818db538d28974db0a73ccb1" 741 | dependencies: 742 | d "1" 743 | es5-ext "~0.10.14" 744 | es6-iterator "~2.0.1" 745 | es6-symbol "3.1.1" 746 | event-emitter "~0.3.5" 747 | 748 | es6-symbol@3.1.1, es6-symbol@^3.1.1, es6-symbol@~3.1.1: 749 | version "3.1.1" 750 | resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.1.tgz#bf00ef4fdab6ba1b46ecb7b629b4c7ed5715cc77" 751 | dependencies: 752 | d "1" 753 | es5-ext "~0.10.14" 754 | 755 | es6-weak-map@^2.0.1: 756 | version "2.0.2" 757 | resolved "https://registry.yarnpkg.com/es6-weak-map/-/es6-weak-map-2.0.2.tgz#5e3ab32251ffd1538a1f8e5ffa1357772f92d96f" 758 | dependencies: 759 | d "1" 760 | es5-ext "^0.10.14" 761 | es6-iterator "^2.0.1" 762 | es6-symbol "^3.1.1" 763 | 764 | escope@^3.6.0: 765 | version "3.6.0" 766 | resolved "https://registry.yarnpkg.com/escope/-/escope-3.6.0.tgz#e01975e812781a163a6dadfdd80398dc64c889c3" 767 | dependencies: 768 | es6-map "^0.1.3" 769 | es6-weak-map "^2.0.1" 770 | esrecurse "^4.1.0" 771 | estraverse "^4.1.1" 772 | 773 | esrecurse@^4.1.0: 774 | version "4.2.0" 775 | resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.2.0.tgz#fa9568d98d3823f9a41d91e902dcab9ea6e5b163" 776 | dependencies: 777 | estraverse "^4.1.0" 778 | object-assign "^4.0.1" 779 | 780 | estraverse@^4.1.0, estraverse@^4.1.1: 781 | version "4.2.0" 782 | resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13" 783 | 784 | event-emitter@~0.3.5: 785 | version "0.3.5" 786 | resolved "https://registry.yarnpkg.com/event-emitter/-/event-emitter-0.3.5.tgz#df8c69eef1647923c7157b9ce83840610b02cc39" 787 | dependencies: 788 | d "1" 789 | es5-ext "~0.10.14" 790 | 791 | eventemitter3@^2.0.3: 792 | version "2.0.3" 793 | resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-2.0.3.tgz#b5e1079b59fb5e1ba2771c0a993be060a58c99ba" 794 | 795 | events@^1.0.0: 796 | version "1.1.1" 797 | resolved "https://registry.yarnpkg.com/events/-/events-1.1.1.tgz#9ebdb7635ad099c70dcc4c2a1f5004288e8bd924" 798 | 799 | evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: 800 | version "1.0.3" 801 | resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02" 802 | dependencies: 803 | md5.js "^1.3.4" 804 | safe-buffer "^5.1.1" 805 | 806 | execa@^0.7.0: 807 | version "0.7.0" 808 | resolved "https://registry.yarnpkg.com/execa/-/execa-0.7.0.tgz#944becd34cc41ee32a63a9faf27ad5a65fc59777" 809 | dependencies: 810 | cross-spawn "^5.0.1" 811 | get-stream "^3.0.0" 812 | is-stream "^1.1.0" 813 | npm-run-path "^2.0.0" 814 | p-finally "^1.0.0" 815 | signal-exit "^3.0.0" 816 | strip-eof "^1.0.0" 817 | 818 | expand-brackets@^0.1.4: 819 | version "0.1.5" 820 | resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-0.1.5.tgz#df07284e342a807cd733ac5af72411e581d1177b" 821 | dependencies: 822 | is-posix-bracket "^0.1.0" 823 | 824 | expand-brackets@^2.1.4: 825 | version "2.1.4" 826 | resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" 827 | dependencies: 828 | debug "^2.3.3" 829 | define-property "^0.2.5" 830 | extend-shallow "^2.0.1" 831 | posix-character-classes "^0.1.0" 832 | regex-not "^1.0.0" 833 | snapdragon "^0.8.1" 834 | to-regex "^3.0.1" 835 | 836 | expand-range@^1.8.1: 837 | version "1.8.2" 838 | resolved "https://registry.yarnpkg.com/expand-range/-/expand-range-1.8.2.tgz#a299effd335fe2721ebae8e257ec79644fc85337" 839 | dependencies: 840 | fill-range "^2.1.0" 841 | 842 | extend-shallow@^2.0.1: 843 | version "2.0.1" 844 | resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" 845 | dependencies: 846 | is-extendable "^0.1.0" 847 | 848 | extend@~3.0.0: 849 | version "3.0.1" 850 | resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.1.tgz#a755ea7bc1adfcc5a31ce7e762dbaadc5e636444" 851 | 852 | extglob@^0.3.1: 853 | version "0.3.2" 854 | resolved "https://registry.yarnpkg.com/extglob/-/extglob-0.3.2.tgz#2e18ff3d2f49ab2765cec9023f011daa8d8349a1" 855 | dependencies: 856 | is-extglob "^1.0.0" 857 | 858 | extglob@^2.0.2: 859 | version "2.0.2" 860 | resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.2.tgz#3290f46208db1b2e8eb8be0c94ed9e6ad80edbe2" 861 | dependencies: 862 | array-unique "^0.3.2" 863 | define-property "^1.0.0" 864 | expand-brackets "^2.1.4" 865 | extend-shallow "^2.0.1" 866 | fragment-cache "^0.2.1" 867 | regex-not "^1.0.0" 868 | snapdragon "^0.8.1" 869 | to-regex "^3.0.1" 870 | 871 | extsprintf@1.3.0, extsprintf@^1.2.0: 872 | version "1.3.0" 873 | resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" 874 | 875 | fast-deep-equal@^1.0.0: 876 | version "1.0.0" 877 | resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-1.0.0.tgz#96256a3bc975595eb36d82e9929d060d893439ff" 878 | 879 | filename-regex@^2.0.0: 880 | version "2.0.1" 881 | resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.1.tgz#c1c4b9bee3e09725ddb106b75c1e301fe2f18b26" 882 | 883 | fill-range@^2.1.0: 884 | version "2.2.3" 885 | resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-2.2.3.tgz#50b77dfd7e469bc7492470963699fe7a8485a723" 886 | dependencies: 887 | is-number "^2.1.0" 888 | isobject "^2.0.0" 889 | randomatic "^1.1.3" 890 | repeat-element "^1.1.2" 891 | repeat-string "^1.5.2" 892 | 893 | fill-range@^4.0.0: 894 | version "4.0.0" 895 | resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" 896 | dependencies: 897 | extend-shallow "^2.0.1" 898 | is-number "^3.0.0" 899 | repeat-string "^1.6.1" 900 | to-regex-range "^2.1.0" 901 | 902 | find-up@^2.0.0: 903 | version "2.1.0" 904 | resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" 905 | dependencies: 906 | locate-path "^2.0.0" 907 | 908 | for-in@^1.0.1, for-in@^1.0.2: 909 | version "1.0.2" 910 | resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" 911 | 912 | for-own@^0.1.4: 913 | version "0.1.5" 914 | resolved "https://registry.yarnpkg.com/for-own/-/for-own-0.1.5.tgz#5265c681a4f294dabbf17c9509b6763aa84510ce" 915 | dependencies: 916 | for-in "^1.0.1" 917 | 918 | forever-agent@~0.6.1: 919 | version "0.6.1" 920 | resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" 921 | 922 | form-data@~2.1.1: 923 | version "2.1.4" 924 | resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.1.4.tgz#33c183acf193276ecaa98143a69e94bfee1750d1" 925 | dependencies: 926 | asynckit "^0.4.0" 927 | combined-stream "^1.0.5" 928 | mime-types "^2.1.12" 929 | 930 | fragment-cache@^0.2.1: 931 | version "0.2.1" 932 | resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" 933 | dependencies: 934 | map-cache "^0.2.2" 935 | 936 | fs-extra@^4.0.0: 937 | version "4.0.2" 938 | resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-4.0.2.tgz#f91704c53d1b461f893452b0c307d9997647ab6b" 939 | dependencies: 940 | graceful-fs "^4.1.2" 941 | jsonfile "^4.0.0" 942 | universalify "^0.1.0" 943 | 944 | fs.realpath@^1.0.0: 945 | version "1.0.0" 946 | resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" 947 | 948 | fsevents@^1.0.0: 949 | version "1.1.2" 950 | resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.1.2.tgz#3282b713fb3ad80ede0e9fcf4611b5aa6fc033f4" 951 | dependencies: 952 | nan "^2.3.0" 953 | node-pre-gyp "^0.6.36" 954 | 955 | fstream-ignore@^1.0.5: 956 | version "1.0.5" 957 | resolved "https://registry.yarnpkg.com/fstream-ignore/-/fstream-ignore-1.0.5.tgz#9c31dae34767018fe1d249b24dada67d092da105" 958 | dependencies: 959 | fstream "^1.0.0" 960 | inherits "2" 961 | minimatch "^3.0.0" 962 | 963 | fstream@^1.0.0, fstream@^1.0.10, fstream@^1.0.2: 964 | version "1.0.11" 965 | resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.11.tgz#5c1fb1f117477114f0632a0eb4b71b3cb0fd3171" 966 | dependencies: 967 | graceful-fs "^4.1.2" 968 | inherits "~2.0.0" 969 | mkdirp ">=0.5 0" 970 | rimraf "2" 971 | 972 | gauge@~2.7.3: 973 | version "2.7.4" 974 | resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" 975 | dependencies: 976 | aproba "^1.0.3" 977 | console-control-strings "^1.0.0" 978 | has-unicode "^2.0.0" 979 | object-assign "^4.1.0" 980 | signal-exit "^3.0.0" 981 | string-width "^1.0.1" 982 | strip-ansi "^3.0.1" 983 | wide-align "^1.1.0" 984 | 985 | get-caller-file@^1.0.1: 986 | version "1.0.2" 987 | resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.2.tgz#f702e63127e7e231c160a80c1554acb70d5047e5" 988 | 989 | get-stream@^3.0.0: 990 | version "3.0.0" 991 | resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" 992 | 993 | get-value@^2.0.3, get-value@^2.0.6: 994 | version "2.0.6" 995 | resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" 996 | 997 | getpass@^0.1.1: 998 | version "0.1.7" 999 | resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" 1000 | dependencies: 1001 | assert-plus "^1.0.0" 1002 | 1003 | glob-base@^0.3.0: 1004 | version "0.3.0" 1005 | resolved "https://registry.yarnpkg.com/glob-base/-/glob-base-0.3.0.tgz#dbb164f6221b1c0b1ccf82aea328b497df0ea3c4" 1006 | dependencies: 1007 | glob-parent "^2.0.0" 1008 | is-glob "^2.0.0" 1009 | 1010 | glob-parent@^2.0.0: 1011 | version "2.0.0" 1012 | resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-2.0.0.tgz#81383d72db054fcccf5336daa902f182f6edbb28" 1013 | dependencies: 1014 | is-glob "^2.0.0" 1015 | 1016 | glob@^7.0.0, glob@^7.0.5: 1017 | version "7.1.2" 1018 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15" 1019 | dependencies: 1020 | fs.realpath "^1.0.0" 1021 | inflight "^1.0.4" 1022 | inherits "2" 1023 | minimatch "^3.0.4" 1024 | once "^1.3.0" 1025 | path-is-absolute "^1.0.0" 1026 | 1027 | graceful-fs@^4.1.2, graceful-fs@^4.1.6: 1028 | version "4.1.11" 1029 | resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658" 1030 | 1031 | handlebars@^4.0.6: 1032 | version "4.0.11" 1033 | resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.0.11.tgz#630a35dfe0294bc281edae6ffc5d329fc7982dcc" 1034 | dependencies: 1035 | async "^1.4.0" 1036 | optimist "^0.6.1" 1037 | source-map "^0.4.4" 1038 | optionalDependencies: 1039 | uglify-js "^2.6" 1040 | 1041 | har-schema@^1.0.5: 1042 | version "1.0.5" 1043 | resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-1.0.5.tgz#d263135f43307c02c602afc8fe95970c0151369e" 1044 | 1045 | har-validator@~4.2.1: 1046 | version "4.2.1" 1047 | resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-4.2.1.tgz#33481d0f1bbff600dd203d75812a6a5fba002e2a" 1048 | dependencies: 1049 | ajv "^4.9.1" 1050 | har-schema "^1.0.5" 1051 | 1052 | has-flag@^2.0.0: 1053 | version "2.0.0" 1054 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-2.0.0.tgz#e8207af1cc7b30d446cc70b734b5e8be18f88d51" 1055 | 1056 | has-unicode@^2.0.0: 1057 | version "2.0.1" 1058 | resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" 1059 | 1060 | has-value@^0.3.1: 1061 | version "0.3.1" 1062 | resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" 1063 | dependencies: 1064 | get-value "^2.0.3" 1065 | has-values "^0.1.4" 1066 | isobject "^2.0.0" 1067 | 1068 | has-value@^1.0.0: 1069 | version "1.0.0" 1070 | resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" 1071 | dependencies: 1072 | get-value "^2.0.6" 1073 | has-values "^1.0.0" 1074 | isobject "^3.0.0" 1075 | 1076 | has-values@^0.1.4: 1077 | version "0.1.4" 1078 | resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" 1079 | 1080 | has-values@^1.0.0: 1081 | version "1.0.0" 1082 | resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" 1083 | dependencies: 1084 | is-number "^3.0.0" 1085 | kind-of "^4.0.0" 1086 | 1087 | hash-base@^2.0.0: 1088 | version "2.0.2" 1089 | resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-2.0.2.tgz#66ea1d856db4e8a5470cadf6fce23ae5244ef2e1" 1090 | dependencies: 1091 | inherits "^2.0.1" 1092 | 1093 | hash-base@^3.0.0: 1094 | version "3.0.4" 1095 | resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.0.4.tgz#5fc8686847ecd73499403319a6b0a3f3f6ae4918" 1096 | dependencies: 1097 | inherits "^2.0.1" 1098 | safe-buffer "^5.0.1" 1099 | 1100 | hash.js@^1.0.0, hash.js@^1.0.3: 1101 | version "1.1.3" 1102 | resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.3.tgz#340dedbe6290187151c1ea1d777a3448935df846" 1103 | dependencies: 1104 | inherits "^2.0.3" 1105 | minimalistic-assert "^1.0.0" 1106 | 1107 | hawk@3.1.3, hawk@~3.1.3: 1108 | version "3.1.3" 1109 | resolved "https://registry.yarnpkg.com/hawk/-/hawk-3.1.3.tgz#078444bd7c1640b0fe540d2c9b73d59678e8e1c4" 1110 | dependencies: 1111 | boom "2.x.x" 1112 | cryptiles "2.x.x" 1113 | hoek "2.x.x" 1114 | sntp "1.x.x" 1115 | 1116 | highlight.js@^9.0.0: 1117 | version "9.12.0" 1118 | resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-9.12.0.tgz#e6d9dbe57cbefe60751f02af336195870c90c01e" 1119 | 1120 | hmac-drbg@^1.0.0: 1121 | version "1.0.1" 1122 | resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" 1123 | dependencies: 1124 | hash.js "^1.0.3" 1125 | minimalistic-assert "^1.0.0" 1126 | minimalistic-crypto-utils "^1.0.1" 1127 | 1128 | hoek@2.x.x: 1129 | version "2.16.3" 1130 | resolved "https://registry.yarnpkg.com/hoek/-/hoek-2.16.3.tgz#20bb7403d3cea398e91dc4710a8ff1b8274a25ed" 1131 | 1132 | hosted-git-info@^2.1.4: 1133 | version "2.5.0" 1134 | resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.5.0.tgz#6d60e34b3abbc8313062c3b798ef8d901a07af3c" 1135 | 1136 | http-signature@~1.1.0: 1137 | version "1.1.1" 1138 | resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.1.1.tgz#df72e267066cd0ac67fb76adf8e134a8fbcf91bf" 1139 | dependencies: 1140 | assert-plus "^0.2.0" 1141 | jsprim "^1.2.2" 1142 | sshpk "^1.7.0" 1143 | 1144 | https-browserify@0.0.1: 1145 | version "0.0.1" 1146 | resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-0.0.1.tgz#3f91365cabe60b77ed0ebba24b454e3e09d95a82" 1147 | 1148 | ieee754@^1.1.4: 1149 | version "1.1.8" 1150 | resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.8.tgz#be33d40ac10ef1926701f6f08a2d86fbfd1ad3e4" 1151 | 1152 | indexof@0.0.1: 1153 | version "0.0.1" 1154 | resolved "https://registry.yarnpkg.com/indexof/-/indexof-0.0.1.tgz#82dc336d232b9062179d05ab3293a66059fd435d" 1155 | 1156 | inflight@^1.0.4: 1157 | version "1.0.6" 1158 | resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" 1159 | dependencies: 1160 | once "^1.3.0" 1161 | wrappy "1" 1162 | 1163 | inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.0, inherits@~2.0.1, inherits@~2.0.3: 1164 | version "2.0.3" 1165 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" 1166 | 1167 | inherits@2.0.1: 1168 | version "2.0.1" 1169 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1" 1170 | 1171 | ini@~1.3.0: 1172 | version "1.3.4" 1173 | resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.4.tgz#0537cb79daf59b59a1a517dff706c86ec039162e" 1174 | 1175 | interpret@^1.0.0: 1176 | version "1.0.4" 1177 | resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.0.4.tgz#820cdd588b868ffb191a809506d6c9c8f212b1b0" 1178 | 1179 | invert-kv@^1.0.0: 1180 | version "1.0.0" 1181 | resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6" 1182 | 1183 | is-accessor-descriptor@^0.1.6: 1184 | version "0.1.6" 1185 | resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" 1186 | dependencies: 1187 | kind-of "^3.0.2" 1188 | 1189 | is-arrayish@^0.2.1: 1190 | version "0.2.1" 1191 | resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" 1192 | 1193 | is-binary-path@^1.0.0: 1194 | version "1.0.1" 1195 | resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" 1196 | dependencies: 1197 | binary-extensions "^1.0.0" 1198 | 1199 | is-buffer@^1.1.5: 1200 | version "1.1.5" 1201 | resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.5.tgz#1f3b26ef613b214b88cbca23cc6c01d87961eecc" 1202 | 1203 | is-builtin-module@^1.0.0: 1204 | version "1.0.0" 1205 | resolved "https://registry.yarnpkg.com/is-builtin-module/-/is-builtin-module-1.0.0.tgz#540572d34f7ac3119f8f76c30cbc1b1e037affbe" 1206 | dependencies: 1207 | builtin-modules "^1.0.0" 1208 | 1209 | is-data-descriptor@^0.1.4: 1210 | version "0.1.4" 1211 | resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" 1212 | dependencies: 1213 | kind-of "^3.0.2" 1214 | 1215 | is-descriptor@^0.1.0: 1216 | version "0.1.6" 1217 | resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" 1218 | dependencies: 1219 | is-accessor-descriptor "^0.1.6" 1220 | is-data-descriptor "^0.1.4" 1221 | kind-of "^5.0.0" 1222 | 1223 | is-descriptor@^1.0.0: 1224 | version "1.0.1" 1225 | resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.1.tgz#2c6023599bde2de9d5d2c8b9a9d94082036b6ef2" 1226 | dependencies: 1227 | is-accessor-descriptor "^0.1.6" 1228 | is-data-descriptor "^0.1.4" 1229 | kind-of "^5.0.0" 1230 | 1231 | is-dotfile@^1.0.0: 1232 | version "1.0.3" 1233 | resolved "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.3.tgz#a6a2f32ffd2dfb04f5ca25ecd0f6b83cf798a1e1" 1234 | 1235 | is-equal-shallow@^0.1.3: 1236 | version "0.1.3" 1237 | resolved "https://registry.yarnpkg.com/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz#2238098fc221de0bcfa5d9eac4c45d638aa1c534" 1238 | dependencies: 1239 | is-primitive "^2.0.0" 1240 | 1241 | is-extendable@^0.1.0, is-extendable@^0.1.1: 1242 | version "0.1.1" 1243 | resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" 1244 | 1245 | is-extglob@^1.0.0: 1246 | version "1.0.0" 1247 | resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0" 1248 | 1249 | is-fullwidth-code-point@^1.0.0: 1250 | version "1.0.0" 1251 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" 1252 | dependencies: 1253 | number-is-nan "^1.0.0" 1254 | 1255 | is-fullwidth-code-point@^2.0.0: 1256 | version "2.0.0" 1257 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" 1258 | 1259 | is-glob@^2.0.0, is-glob@^2.0.1: 1260 | version "2.0.1" 1261 | resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863" 1262 | dependencies: 1263 | is-extglob "^1.0.0" 1264 | 1265 | is-number@^2.1.0: 1266 | version "2.1.0" 1267 | resolved "https://registry.yarnpkg.com/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f" 1268 | dependencies: 1269 | kind-of "^3.0.2" 1270 | 1271 | is-number@^3.0.0: 1272 | version "3.0.0" 1273 | resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" 1274 | dependencies: 1275 | kind-of "^3.0.2" 1276 | 1277 | is-odd@^1.0.0: 1278 | version "1.0.0" 1279 | resolved "https://registry.yarnpkg.com/is-odd/-/is-odd-1.0.0.tgz#3b8a932eb028b3775c39bb09e91767accdb69088" 1280 | dependencies: 1281 | is-number "^3.0.0" 1282 | 1283 | is-plain-object@^2.0.1, is-plain-object@^2.0.3: 1284 | version "2.0.4" 1285 | resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" 1286 | dependencies: 1287 | isobject "^3.0.1" 1288 | 1289 | is-posix-bracket@^0.1.0: 1290 | version "0.1.1" 1291 | resolved "https://registry.yarnpkg.com/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz#3334dc79774368e92f016e6fbc0a88f5cd6e6bc4" 1292 | 1293 | is-primitive@^2.0.0: 1294 | version "2.0.0" 1295 | resolved "https://registry.yarnpkg.com/is-primitive/-/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575" 1296 | 1297 | is-stream@^1.1.0: 1298 | version "1.1.0" 1299 | resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" 1300 | 1301 | is-typedarray@~1.0.0: 1302 | version "1.0.0" 1303 | resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" 1304 | 1305 | isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: 1306 | version "1.0.0" 1307 | resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" 1308 | 1309 | isexe@^2.0.0: 1310 | version "2.0.0" 1311 | resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" 1312 | 1313 | isobject@^2.0.0: 1314 | version "2.1.0" 1315 | resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" 1316 | dependencies: 1317 | isarray "1.0.0" 1318 | 1319 | isobject@^3.0.0, isobject@^3.0.1: 1320 | version "3.0.1" 1321 | resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" 1322 | 1323 | isstream@~0.1.2: 1324 | version "0.1.2" 1325 | resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" 1326 | 1327 | jsbn@~0.1.0: 1328 | version "0.1.1" 1329 | resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" 1330 | 1331 | json-loader@^0.5.4: 1332 | version "0.5.7" 1333 | resolved "https://registry.yarnpkg.com/json-loader/-/json-loader-0.5.7.tgz#dca14a70235ff82f0ac9a3abeb60d337a365185d" 1334 | 1335 | json-schema-traverse@^0.3.0: 1336 | version "0.3.1" 1337 | resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz#349a6d44c53a51de89b40805c5d5e59b417d3340" 1338 | 1339 | json-schema@0.2.3: 1340 | version "0.2.3" 1341 | resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" 1342 | 1343 | json-stable-stringify@^1.0.1: 1344 | version "1.0.1" 1345 | resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af" 1346 | dependencies: 1347 | jsonify "~0.0.0" 1348 | 1349 | json-stringify-safe@~5.0.1: 1350 | version "5.0.1" 1351 | resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" 1352 | 1353 | json5@^0.5.0, json5@^0.5.1: 1354 | version "0.5.1" 1355 | resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821" 1356 | 1357 | jsonfile@^4.0.0: 1358 | version "4.0.0" 1359 | resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" 1360 | optionalDependencies: 1361 | graceful-fs "^4.1.6" 1362 | 1363 | jsonify@~0.0.0: 1364 | version "0.0.0" 1365 | resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" 1366 | 1367 | jsprim@^1.2.2: 1368 | version "1.4.1" 1369 | resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" 1370 | dependencies: 1371 | assert-plus "1.0.0" 1372 | extsprintf "1.3.0" 1373 | json-schema "0.2.3" 1374 | verror "1.10.0" 1375 | 1376 | kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: 1377 | version "3.2.2" 1378 | resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" 1379 | dependencies: 1380 | is-buffer "^1.1.5" 1381 | 1382 | kind-of@^4.0.0: 1383 | version "4.0.0" 1384 | resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" 1385 | dependencies: 1386 | is-buffer "^1.1.5" 1387 | 1388 | kind-of@^5.0.0, kind-of@^5.0.2: 1389 | version "5.1.0" 1390 | resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" 1391 | 1392 | kind-of@^6.0.0: 1393 | version "6.0.0" 1394 | resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.0.tgz#3606e9e2fa960e7ddaa8898c03804e47e5d66644" 1395 | 1396 | lazy-cache@^1.0.3: 1397 | version "1.0.4" 1398 | resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-1.0.4.tgz#a1d78fc3a50474cb80845d3b3b6e1da49a446e8e" 1399 | 1400 | lazy-cache@^2.0.2: 1401 | version "2.0.2" 1402 | resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-2.0.2.tgz#b9190a4f913354694840859f8a8f7084d8822264" 1403 | dependencies: 1404 | set-getter "^0.1.0" 1405 | 1406 | lcid@^1.0.0: 1407 | version "1.0.0" 1408 | resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835" 1409 | dependencies: 1410 | invert-kv "^1.0.0" 1411 | 1412 | load-json-file@^2.0.0: 1413 | version "2.0.0" 1414 | resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-2.0.0.tgz#7947e42149af80d696cbf797bcaabcfe1fe29ca8" 1415 | dependencies: 1416 | graceful-fs "^4.1.2" 1417 | parse-json "^2.2.0" 1418 | pify "^2.0.0" 1419 | strip-bom "^3.0.0" 1420 | 1421 | loader-runner@^2.3.0: 1422 | version "2.3.0" 1423 | resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.3.0.tgz#f482aea82d543e07921700d5a46ef26fdac6b8a2" 1424 | 1425 | loader-utils@^1.1.0: 1426 | version "1.1.0" 1427 | resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.1.0.tgz#c98aef488bcceda2ffb5e2de646d6a754429f5cd" 1428 | dependencies: 1429 | big.js "^3.1.3" 1430 | emojis-list "^2.0.0" 1431 | json5 "^0.5.0" 1432 | 1433 | locate-path@^2.0.0: 1434 | version "2.0.0" 1435 | resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" 1436 | dependencies: 1437 | p-locate "^2.0.0" 1438 | path-exists "^3.0.0" 1439 | 1440 | lodash.clone@^4.5.0: 1441 | version "4.5.0" 1442 | resolved "https://registry.yarnpkg.com/lodash.clone/-/lodash.clone-4.5.0.tgz#195870450f5a13192478df4bc3d23d2dea1907b6" 1443 | 1444 | lodash.merge@^4.6.0: 1445 | version "4.6.0" 1446 | resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.0.tgz#69884ba144ac33fe699737a6086deffadd0f89c5" 1447 | 1448 | lodash@^4.13.1, lodash@^4.14.0, lodash@^4.17.4: 1449 | version "4.17.4" 1450 | resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae" 1451 | 1452 | longest@^1.0.1: 1453 | version "1.0.1" 1454 | resolved "https://registry.yarnpkg.com/longest/-/longest-1.0.1.tgz#30a0b2da38f73770e8294a0d22e6625ed77d0097" 1455 | 1456 | lru-cache@^4.0.1: 1457 | version "4.1.1" 1458 | resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.1.tgz#622e32e82488b49279114a4f9ecf45e7cd6bba55" 1459 | dependencies: 1460 | pseudomap "^1.0.2" 1461 | yallist "^2.1.2" 1462 | 1463 | map-cache@^0.2.2: 1464 | version "0.2.2" 1465 | resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" 1466 | 1467 | map-visit@^1.0.0: 1468 | version "1.0.0" 1469 | resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" 1470 | dependencies: 1471 | object-visit "^1.0.0" 1472 | 1473 | marked@^0.3.5: 1474 | version "0.3.6" 1475 | resolved "https://registry.yarnpkg.com/marked/-/marked-0.3.6.tgz#b2c6c618fccece4ef86c4fc6cb8a7cbf5aeda8d7" 1476 | 1477 | md5.js@^1.3.4: 1478 | version "1.3.4" 1479 | resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.4.tgz#e9bdbde94a20a5ac18b04340fc5764d5b09d901d" 1480 | dependencies: 1481 | hash-base "^3.0.0" 1482 | inherits "^2.0.1" 1483 | 1484 | mem@^1.1.0: 1485 | version "1.1.0" 1486 | resolved "https://registry.yarnpkg.com/mem/-/mem-1.1.0.tgz#5edd52b485ca1d900fe64895505399a0dfa45f76" 1487 | dependencies: 1488 | mimic-fn "^1.0.0" 1489 | 1490 | memory-fs@^0.4.0, memory-fs@~0.4.1: 1491 | version "0.4.1" 1492 | resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.4.1.tgz#3a9a20b8462523e447cfbc7e8bb80ed667bfc552" 1493 | dependencies: 1494 | errno "^0.1.3" 1495 | readable-stream "^2.0.1" 1496 | 1497 | micromatch@^2.1.5: 1498 | version "2.3.11" 1499 | resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565" 1500 | dependencies: 1501 | arr-diff "^2.0.0" 1502 | array-unique "^0.2.1" 1503 | braces "^1.8.2" 1504 | expand-brackets "^0.1.4" 1505 | extglob "^0.3.1" 1506 | filename-regex "^2.0.0" 1507 | is-extglob "^1.0.0" 1508 | is-glob "^2.0.1" 1509 | kind-of "^3.0.2" 1510 | normalize-path "^2.0.1" 1511 | object.omit "^2.0.0" 1512 | parse-glob "^3.0.4" 1513 | regex-cache "^0.4.2" 1514 | 1515 | micromatch@^3.0.3: 1516 | version "3.1.3" 1517 | resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.3.tgz#ae1ee52aff9c990a83ff8fb69891aeba2847c85f" 1518 | dependencies: 1519 | arr-diff "^4.0.0" 1520 | array-unique "^0.3.2" 1521 | braces "^2.3.0" 1522 | define-property "^1.0.0" 1523 | extend-shallow "^2.0.1" 1524 | extglob "^2.0.2" 1525 | fragment-cache "^0.2.1" 1526 | kind-of "^6.0.0" 1527 | nanomatch "^1.2.5" 1528 | object.pick "^1.3.0" 1529 | regex-not "^1.0.0" 1530 | snapdragon "^0.8.1" 1531 | to-regex "^3.0.1" 1532 | 1533 | miller-rabin@^4.0.0: 1534 | version "4.0.1" 1535 | resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d" 1536 | dependencies: 1537 | bn.js "^4.0.0" 1538 | brorand "^1.0.1" 1539 | 1540 | mime-db@~1.30.0: 1541 | version "1.30.0" 1542 | resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.30.0.tgz#74c643da2dd9d6a45399963465b26d5ca7d71f01" 1543 | 1544 | mime-types@^2.1.12, mime-types@~2.1.7: 1545 | version "2.1.17" 1546 | resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.17.tgz#09d7a393f03e995a79f8af857b70a9e0ab16557a" 1547 | dependencies: 1548 | mime-db "~1.30.0" 1549 | 1550 | mimic-fn@^1.0.0: 1551 | version "1.1.0" 1552 | resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.1.0.tgz#e667783d92e89dbd342818b5230b9d62a672ad18" 1553 | 1554 | minimalistic-assert@^1.0.0: 1555 | version "1.0.0" 1556 | resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.0.tgz#702be2dda6b37f4836bcb3f5db56641b64a1d3d3" 1557 | 1558 | minimalistic-crypto-utils@^1.0.0, minimalistic-crypto-utils@^1.0.1: 1559 | version "1.0.1" 1560 | resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" 1561 | 1562 | minimatch@^3.0.0, minimatch@^3.0.2, minimatch@^3.0.4: 1563 | version "3.0.4" 1564 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" 1565 | dependencies: 1566 | brace-expansion "^1.1.7" 1567 | 1568 | minimist@0.0.8: 1569 | version "0.0.8" 1570 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" 1571 | 1572 | minimist@^1.2.0: 1573 | version "1.2.0" 1574 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" 1575 | 1576 | minimist@~0.0.1: 1577 | version "0.0.10" 1578 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf" 1579 | 1580 | mixin-deep@^1.2.0: 1581 | version "1.2.0" 1582 | resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.2.0.tgz#d02b8c6f8b6d4b8f5982d3fd009c4919851c3fe2" 1583 | dependencies: 1584 | for-in "^1.0.2" 1585 | is-extendable "^0.1.1" 1586 | 1587 | "mkdirp@>=0.5 0", mkdirp@^0.5.1, mkdirp@~0.5.0: 1588 | version "0.5.1" 1589 | resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" 1590 | dependencies: 1591 | minimist "0.0.8" 1592 | 1593 | ms@2.0.0: 1594 | version "2.0.0" 1595 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" 1596 | 1597 | nan@^2.3.0: 1598 | version "2.7.0" 1599 | resolved "https://registry.yarnpkg.com/nan/-/nan-2.7.0.tgz#d95bf721ec877e08db276ed3fc6eb78f9083ad46" 1600 | 1601 | nanomatch@^1.2.5: 1602 | version "1.2.5" 1603 | resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.5.tgz#5c9ab02475c76676275731b0bf0a7395c624a9c4" 1604 | dependencies: 1605 | arr-diff "^4.0.0" 1606 | array-unique "^0.3.2" 1607 | define-property "^1.0.0" 1608 | extend-shallow "^2.0.1" 1609 | fragment-cache "^0.2.1" 1610 | is-odd "^1.0.0" 1611 | kind-of "^5.0.2" 1612 | object.pick "^1.3.0" 1613 | regex-not "^1.0.0" 1614 | snapdragon "^0.8.1" 1615 | to-regex "^3.0.1" 1616 | 1617 | node-libs-browser@^2.0.0: 1618 | version "2.0.0" 1619 | resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.0.0.tgz#a3a59ec97024985b46e958379646f96c4b616646" 1620 | dependencies: 1621 | assert "^1.1.1" 1622 | browserify-zlib "^0.1.4" 1623 | buffer "^4.3.0" 1624 | console-browserify "^1.1.0" 1625 | constants-browserify "^1.0.0" 1626 | crypto-browserify "^3.11.0" 1627 | domain-browser "^1.1.1" 1628 | events "^1.0.0" 1629 | https-browserify "0.0.1" 1630 | os-browserify "^0.2.0" 1631 | path-browserify "0.0.0" 1632 | process "^0.11.0" 1633 | punycode "^1.2.4" 1634 | querystring-es3 "^0.2.0" 1635 | readable-stream "^2.0.5" 1636 | stream-browserify "^2.0.1" 1637 | stream-http "^2.3.1" 1638 | string_decoder "^0.10.25" 1639 | timers-browserify "^2.0.2" 1640 | tty-browserify "0.0.0" 1641 | url "^0.11.0" 1642 | util "^0.10.3" 1643 | vm-browserify "0.0.4" 1644 | 1645 | node-pre-gyp@^0.6.36: 1646 | version "0.6.38" 1647 | resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.6.38.tgz#e92a20f83416415bb4086f6d1fb78b3da73d113d" 1648 | dependencies: 1649 | hawk "3.1.3" 1650 | mkdirp "^0.5.1" 1651 | nopt "^4.0.1" 1652 | npmlog "^4.0.2" 1653 | rc "^1.1.7" 1654 | request "2.81.0" 1655 | rimraf "^2.6.1" 1656 | semver "^5.3.0" 1657 | tar "^2.2.1" 1658 | tar-pack "^3.4.0" 1659 | 1660 | nopt@^4.0.1: 1661 | version "4.0.1" 1662 | resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d" 1663 | dependencies: 1664 | abbrev "1" 1665 | osenv "^0.1.4" 1666 | 1667 | normalize-package-data@^2.3.2: 1668 | version "2.4.0" 1669 | resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.4.0.tgz#12f95a307d58352075a04907b84ac8be98ac012f" 1670 | dependencies: 1671 | hosted-git-info "^2.1.4" 1672 | is-builtin-module "^1.0.0" 1673 | semver "2 || 3 || 4 || 5" 1674 | validate-npm-package-license "^3.0.1" 1675 | 1676 | normalize-path@^2.0.0, normalize-path@^2.0.1: 1677 | version "2.1.1" 1678 | resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" 1679 | dependencies: 1680 | remove-trailing-separator "^1.0.1" 1681 | 1682 | npm-run-path@^2.0.0: 1683 | version "2.0.2" 1684 | resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" 1685 | dependencies: 1686 | path-key "^2.0.0" 1687 | 1688 | npmlog@^4.0.2: 1689 | version "4.1.2" 1690 | resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" 1691 | dependencies: 1692 | are-we-there-yet "~1.1.2" 1693 | console-control-strings "~1.1.0" 1694 | gauge "~2.7.3" 1695 | set-blocking "~2.0.0" 1696 | 1697 | number-is-nan@^1.0.0: 1698 | version "1.0.1" 1699 | resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" 1700 | 1701 | oauth-sign@~0.8.1: 1702 | version "0.8.2" 1703 | resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43" 1704 | 1705 | object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: 1706 | version "4.1.1" 1707 | resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" 1708 | 1709 | object-copy@^0.1.0: 1710 | version "0.1.0" 1711 | resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" 1712 | dependencies: 1713 | copy-descriptor "^0.1.0" 1714 | define-property "^0.2.5" 1715 | kind-of "^3.0.3" 1716 | 1717 | object-visit@^1.0.0: 1718 | version "1.0.1" 1719 | resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" 1720 | dependencies: 1721 | isobject "^3.0.0" 1722 | 1723 | object.omit@^2.0.0: 1724 | version "2.0.1" 1725 | resolved "https://registry.yarnpkg.com/object.omit/-/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa" 1726 | dependencies: 1727 | for-own "^0.1.4" 1728 | is-extendable "^0.1.1" 1729 | 1730 | object.pick@^1.3.0: 1731 | version "1.3.0" 1732 | resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" 1733 | dependencies: 1734 | isobject "^3.0.1" 1735 | 1736 | once@^1.3.0, once@^1.3.3: 1737 | version "1.4.0" 1738 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" 1739 | dependencies: 1740 | wrappy "1" 1741 | 1742 | optimist@^0.6.1: 1743 | version "0.6.1" 1744 | resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686" 1745 | dependencies: 1746 | minimist "~0.0.1" 1747 | wordwrap "~0.0.2" 1748 | 1749 | os-browserify@^0.2.0: 1750 | version "0.2.1" 1751 | resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.2.1.tgz#63fc4ccee5d2d7763d26bbf8601078e6c2e0044f" 1752 | 1753 | os-homedir@^1.0.0: 1754 | version "1.0.2" 1755 | resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" 1756 | 1757 | os-locale@^2.0.0: 1758 | version "2.1.0" 1759 | resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-2.1.0.tgz#42bc2900a6b5b8bd17376c8e882b65afccf24bf2" 1760 | dependencies: 1761 | execa "^0.7.0" 1762 | lcid "^1.0.0" 1763 | mem "^1.1.0" 1764 | 1765 | os-tmpdir@^1.0.0: 1766 | version "1.0.2" 1767 | resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" 1768 | 1769 | osenv@^0.1.4: 1770 | version "0.1.4" 1771 | resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.4.tgz#42fe6d5953df06c8064be6f176c3d05aaaa34644" 1772 | dependencies: 1773 | os-homedir "^1.0.0" 1774 | os-tmpdir "^1.0.0" 1775 | 1776 | p-finally@^1.0.0: 1777 | version "1.0.0" 1778 | resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" 1779 | 1780 | p-limit@^1.1.0: 1781 | version "1.1.0" 1782 | resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.1.0.tgz#b07ff2d9a5d88bec806035895a2bab66a27988bc" 1783 | 1784 | p-locate@^2.0.0: 1785 | version "2.0.0" 1786 | resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" 1787 | dependencies: 1788 | p-limit "^1.1.0" 1789 | 1790 | pako@~0.2.0: 1791 | version "0.2.9" 1792 | resolved "https://registry.yarnpkg.com/pako/-/pako-0.2.9.tgz#f3f7522f4ef782348da8161bad9ecfd51bf83a75" 1793 | 1794 | parse-asn1@^5.0.0: 1795 | version "5.1.0" 1796 | resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.0.tgz#37c4f9b7ed3ab65c74817b5f2480937fbf97c712" 1797 | dependencies: 1798 | asn1.js "^4.0.0" 1799 | browserify-aes "^1.0.0" 1800 | create-hash "^1.1.0" 1801 | evp_bytestokey "^1.0.0" 1802 | pbkdf2 "^3.0.3" 1803 | 1804 | parse-glob@^3.0.4: 1805 | version "3.0.4" 1806 | resolved "https://registry.yarnpkg.com/parse-glob/-/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c" 1807 | dependencies: 1808 | glob-base "^0.3.0" 1809 | is-dotfile "^1.0.0" 1810 | is-extglob "^1.0.0" 1811 | is-glob "^2.0.0" 1812 | 1813 | parse-json@^2.2.0: 1814 | version "2.2.0" 1815 | resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" 1816 | dependencies: 1817 | error-ex "^1.2.0" 1818 | 1819 | pascalcase@^0.1.1: 1820 | version "0.1.1" 1821 | resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" 1822 | 1823 | path-browserify@0.0.0: 1824 | version "0.0.0" 1825 | resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.0.tgz#a0b870729aae214005b7d5032ec2cbbb0fb4451a" 1826 | 1827 | path-exists@^3.0.0: 1828 | version "3.0.0" 1829 | resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" 1830 | 1831 | path-is-absolute@^1.0.0: 1832 | version "1.0.1" 1833 | resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" 1834 | 1835 | path-key@^2.0.0: 1836 | version "2.0.1" 1837 | resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" 1838 | 1839 | path-parse@^1.0.5: 1840 | version "1.0.5" 1841 | resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.5.tgz#3c1adf871ea9cd6c9431b6ea2bd74a0ff055c4c1" 1842 | 1843 | path-type@^2.0.0: 1844 | version "2.0.0" 1845 | resolved "https://registry.yarnpkg.com/path-type/-/path-type-2.0.0.tgz#f012ccb8415b7096fc2daa1054c3d72389594c73" 1846 | dependencies: 1847 | pify "^2.0.0" 1848 | 1849 | pbkdf2@^3.0.3: 1850 | version "3.0.14" 1851 | resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.0.14.tgz#a35e13c64799b06ce15320f459c230e68e73bade" 1852 | dependencies: 1853 | create-hash "^1.1.2" 1854 | create-hmac "^1.1.4" 1855 | ripemd160 "^2.0.1" 1856 | safe-buffer "^5.0.1" 1857 | sha.js "^2.4.8" 1858 | 1859 | performance-now@^0.2.0: 1860 | version "0.2.0" 1861 | resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-0.2.0.tgz#33ef30c5c77d4ea21c5a53869d91b56d8f2555e5" 1862 | 1863 | pify@^2.0.0: 1864 | version "2.3.0" 1865 | resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" 1866 | 1867 | posix-character-classes@^0.1.0: 1868 | version "0.1.1" 1869 | resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" 1870 | 1871 | preserve@^0.2.0: 1872 | version "0.2.0" 1873 | resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b" 1874 | 1875 | process-nextick-args@~1.0.6: 1876 | version "1.0.7" 1877 | resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3" 1878 | 1879 | process@^0.11.0: 1880 | version "0.11.10" 1881 | resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" 1882 | 1883 | progress@^2.0.0: 1884 | version "2.0.0" 1885 | resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.0.tgz#8a1be366bf8fc23db2bd23f10c6fe920b4389d1f" 1886 | 1887 | prr@~0.0.0: 1888 | version "0.0.0" 1889 | resolved "https://registry.yarnpkg.com/prr/-/prr-0.0.0.tgz#1a84b85908325501411853d0081ee3fa86e2926a" 1890 | 1891 | pseudomap@^1.0.2: 1892 | version "1.0.2" 1893 | resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" 1894 | 1895 | public-encrypt@^4.0.0: 1896 | version "4.0.0" 1897 | resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.0.tgz#39f699f3a46560dd5ebacbca693caf7c65c18cc6" 1898 | dependencies: 1899 | bn.js "^4.1.0" 1900 | browserify-rsa "^4.0.0" 1901 | create-hash "^1.1.0" 1902 | parse-asn1 "^5.0.0" 1903 | randombytes "^2.0.1" 1904 | 1905 | punycode@1.3.2: 1906 | version "1.3.2" 1907 | resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" 1908 | 1909 | punycode@^1.2.4, punycode@^1.4.1: 1910 | version "1.4.1" 1911 | resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" 1912 | 1913 | qs@~6.4.0: 1914 | version "6.4.0" 1915 | resolved "https://registry.yarnpkg.com/qs/-/qs-6.4.0.tgz#13e26d28ad6b0ffaa91312cd3bf708ed351e7233" 1916 | 1917 | querystring-es3@^0.2.0: 1918 | version "0.2.1" 1919 | resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73" 1920 | 1921 | querystring@0.2.0: 1922 | version "0.2.0" 1923 | resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" 1924 | 1925 | randomatic@^1.1.3: 1926 | version "1.1.7" 1927 | resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-1.1.7.tgz#c7abe9cc8b87c0baa876b19fde83fd464797e38c" 1928 | dependencies: 1929 | is-number "^3.0.0" 1930 | kind-of "^4.0.0" 1931 | 1932 | randombytes@^2.0.0, randombytes@^2.0.1: 1933 | version "2.0.5" 1934 | resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.0.5.tgz#dc009a246b8d09a177b4b7a0ae77bc570f4b1b79" 1935 | dependencies: 1936 | safe-buffer "^5.1.0" 1937 | 1938 | rc@^1.1.7: 1939 | version "1.2.2" 1940 | resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.2.tgz#d8ce9cb57e8d64d9c7badd9876c7c34cbe3c7077" 1941 | dependencies: 1942 | deep-extend "~0.4.0" 1943 | ini "~1.3.0" 1944 | minimist "^1.2.0" 1945 | strip-json-comments "~2.0.1" 1946 | 1947 | read-pkg-up@^2.0.0: 1948 | version "2.0.0" 1949 | resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-2.0.0.tgz#6b72a8048984e0c41e79510fd5e9fa99b3b549be" 1950 | dependencies: 1951 | find-up "^2.0.0" 1952 | read-pkg "^2.0.0" 1953 | 1954 | read-pkg@^2.0.0: 1955 | version "2.0.0" 1956 | resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-2.0.0.tgz#8ef1c0623c6a6db0dc6713c4bfac46332b2368f8" 1957 | dependencies: 1958 | load-json-file "^2.0.0" 1959 | normalize-package-data "^2.3.2" 1960 | path-type "^2.0.0" 1961 | 1962 | readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.5, readable-stream@^2.0.6, readable-stream@^2.1.4, readable-stream@^2.2.6: 1963 | version "2.3.3" 1964 | resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.3.tgz#368f2512d79f9d46fdfc71349ae7878bbc1eb95c" 1965 | dependencies: 1966 | core-util-is "~1.0.0" 1967 | inherits "~2.0.3" 1968 | isarray "~1.0.0" 1969 | process-nextick-args "~1.0.6" 1970 | safe-buffer "~5.1.1" 1971 | string_decoder "~1.0.3" 1972 | util-deprecate "~1.0.1" 1973 | 1974 | readdirp@^2.0.0: 1975 | version "2.1.0" 1976 | resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.1.0.tgz#4ed0ad060df3073300c48440373f72d1cc642d78" 1977 | dependencies: 1978 | graceful-fs "^4.1.2" 1979 | minimatch "^3.0.2" 1980 | readable-stream "^2.0.2" 1981 | set-immediate-shim "^1.0.1" 1982 | 1983 | rechoir@^0.6.2: 1984 | version "0.6.2" 1985 | resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384" 1986 | dependencies: 1987 | resolve "^1.1.6" 1988 | 1989 | regex-cache@^0.4.2: 1990 | version "0.4.4" 1991 | resolved "https://registry.yarnpkg.com/regex-cache/-/regex-cache-0.4.4.tgz#75bdc58a2a1496cec48a12835bc54c8d562336dd" 1992 | dependencies: 1993 | is-equal-shallow "^0.1.3" 1994 | 1995 | regex-not@^1.0.0: 1996 | version "1.0.0" 1997 | resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.0.tgz#42f83e39771622df826b02af176525d6a5f157f9" 1998 | dependencies: 1999 | extend-shallow "^2.0.1" 2000 | 2001 | remove-trailing-separator@^1.0.1: 2002 | version "1.1.0" 2003 | resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" 2004 | 2005 | repeat-element@^1.1.2: 2006 | version "1.1.2" 2007 | resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.2.tgz#ef089a178d1483baae4d93eb98b4f9e4e11d990a" 2008 | 2009 | repeat-string@^1.5.2, repeat-string@^1.6.1: 2010 | version "1.6.1" 2011 | resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" 2012 | 2013 | request@2.81.0: 2014 | version "2.81.0" 2015 | resolved "https://registry.yarnpkg.com/request/-/request-2.81.0.tgz#c6928946a0e06c5f8d6f8a9333469ffda46298a0" 2016 | dependencies: 2017 | aws-sign2 "~0.6.0" 2018 | aws4 "^1.2.1" 2019 | caseless "~0.12.0" 2020 | combined-stream "~1.0.5" 2021 | extend "~3.0.0" 2022 | forever-agent "~0.6.1" 2023 | form-data "~2.1.1" 2024 | har-validator "~4.2.1" 2025 | hawk "~3.1.3" 2026 | http-signature "~1.1.0" 2027 | is-typedarray "~1.0.0" 2028 | isstream "~0.1.2" 2029 | json-stringify-safe "~5.0.1" 2030 | mime-types "~2.1.7" 2031 | oauth-sign "~0.8.1" 2032 | performance-now "^0.2.0" 2033 | qs "~6.4.0" 2034 | safe-buffer "^5.0.1" 2035 | stringstream "~0.0.4" 2036 | tough-cookie "~2.3.0" 2037 | tunnel-agent "^0.6.0" 2038 | uuid "^3.0.0" 2039 | 2040 | require-directory@^2.1.1: 2041 | version "2.1.1" 2042 | resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" 2043 | 2044 | require-main-filename@^1.0.1: 2045 | version "1.0.1" 2046 | resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1" 2047 | 2048 | resolve-url@^0.2.1: 2049 | version "0.2.1" 2050 | resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" 2051 | 2052 | resolve@^1.1.6: 2053 | version "1.4.0" 2054 | resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.4.0.tgz#a75be01c53da25d934a98ebd0e4c4a7312f92a86" 2055 | dependencies: 2056 | path-parse "^1.0.5" 2057 | 2058 | right-align@^0.1.1: 2059 | version "0.1.3" 2060 | resolved "https://registry.yarnpkg.com/right-align/-/right-align-0.1.3.tgz#61339b722fe6a3515689210d24e14c96148613ef" 2061 | dependencies: 2062 | align-text "^0.1.1" 2063 | 2064 | rimraf@2, rimraf@^2.5.1, rimraf@^2.6.1: 2065 | version "2.6.2" 2066 | resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.2.tgz#2ed8150d24a16ea8651e6d6ef0f47c4158ce7a36" 2067 | dependencies: 2068 | glob "^7.0.5" 2069 | 2070 | ripemd160@^2.0.0, ripemd160@^2.0.1: 2071 | version "2.0.1" 2072 | resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.1.tgz#0f4584295c53a3628af7e6d79aca21ce57d1c6e7" 2073 | dependencies: 2074 | hash-base "^2.0.0" 2075 | inherits "^2.0.1" 2076 | 2077 | safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@~5.1.0, safe-buffer@~5.1.1: 2078 | version "5.1.1" 2079 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853" 2080 | 2081 | "semver@2 || 3 || 4 || 5", semver@^5.3.0: 2082 | version "5.4.1" 2083 | resolved "https://registry.yarnpkg.com/semver/-/semver-5.4.1.tgz#e059c09d8571f0540823733433505d3a2f00b18e" 2084 | 2085 | set-blocking@^2.0.0, set-blocking@~2.0.0: 2086 | version "2.0.0" 2087 | resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" 2088 | 2089 | set-getter@^0.1.0: 2090 | version "0.1.0" 2091 | resolved "https://registry.yarnpkg.com/set-getter/-/set-getter-0.1.0.tgz#d769c182c9d5a51f409145f2fba82e5e86e80376" 2092 | dependencies: 2093 | to-object-path "^0.3.0" 2094 | 2095 | set-immediate-shim@^1.0.1: 2096 | version "1.0.1" 2097 | resolved "https://registry.yarnpkg.com/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz#4b2b1b27eb808a9f8dcc481a58e5e56f599f3f61" 2098 | 2099 | set-value@^0.4.3: 2100 | version "0.4.3" 2101 | resolved "https://registry.yarnpkg.com/set-value/-/set-value-0.4.3.tgz#7db08f9d3d22dc7f78e53af3c3bf4666ecdfccf1" 2102 | dependencies: 2103 | extend-shallow "^2.0.1" 2104 | is-extendable "^0.1.1" 2105 | is-plain-object "^2.0.1" 2106 | to-object-path "^0.3.0" 2107 | 2108 | set-value@^2.0.0: 2109 | version "2.0.0" 2110 | resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.0.tgz#71ae4a88f0feefbbf52d1ea604f3fb315ebb6274" 2111 | dependencies: 2112 | extend-shallow "^2.0.1" 2113 | is-extendable "^0.1.1" 2114 | is-plain-object "^2.0.3" 2115 | split-string "^3.0.1" 2116 | 2117 | setimmediate@^1.0.4: 2118 | version "1.0.5" 2119 | resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" 2120 | 2121 | sha.js@^2.4.0, sha.js@^2.4.8: 2122 | version "2.4.9" 2123 | resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.9.tgz#98f64880474b74f4a38b8da9d3c0f2d104633e7d" 2124 | dependencies: 2125 | inherits "^2.0.1" 2126 | safe-buffer "^5.0.1" 2127 | 2128 | shebang-command@^1.2.0: 2129 | version "1.2.0" 2130 | resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" 2131 | dependencies: 2132 | shebang-regex "^1.0.0" 2133 | 2134 | shebang-regex@^1.0.0: 2135 | version "1.0.0" 2136 | resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" 2137 | 2138 | shelljs@^0.7.0: 2139 | version "0.7.8" 2140 | resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.7.8.tgz#decbcf874b0d1e5fb72e14b164a9683048e9acb3" 2141 | dependencies: 2142 | glob "^7.0.0" 2143 | interpret "^1.0.0" 2144 | rechoir "^0.6.2" 2145 | 2146 | signal-exit@^3.0.0: 2147 | version "3.0.2" 2148 | resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" 2149 | 2150 | snapdragon-node@^2.0.1: 2151 | version "2.1.1" 2152 | resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" 2153 | dependencies: 2154 | define-property "^1.0.0" 2155 | isobject "^3.0.0" 2156 | snapdragon-util "^3.0.1" 2157 | 2158 | snapdragon-util@^3.0.1: 2159 | version "3.0.1" 2160 | resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2" 2161 | dependencies: 2162 | kind-of "^3.2.0" 2163 | 2164 | snapdragon@^0.8.1: 2165 | version "0.8.1" 2166 | resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.1.tgz#e12b5487faded3e3dea0ac91e9400bf75b401370" 2167 | dependencies: 2168 | base "^0.11.1" 2169 | debug "^2.2.0" 2170 | define-property "^0.2.5" 2171 | extend-shallow "^2.0.1" 2172 | map-cache "^0.2.2" 2173 | source-map "^0.5.6" 2174 | source-map-resolve "^0.5.0" 2175 | use "^2.0.0" 2176 | 2177 | sntp@1.x.x: 2178 | version "1.0.9" 2179 | resolved "https://registry.yarnpkg.com/sntp/-/sntp-1.0.9.tgz#6541184cc90aeea6c6e7b35e2659082443c66198" 2180 | dependencies: 2181 | hoek "2.x.x" 2182 | 2183 | source-list-map@^2.0.0: 2184 | version "2.0.0" 2185 | resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.0.tgz#aaa47403f7b245a92fbc97ea08f250d6087ed085" 2186 | 2187 | source-map-resolve@^0.5.0: 2188 | version "0.5.1" 2189 | resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.1.tgz#7ad0f593f2281598e854df80f19aae4b92d7a11a" 2190 | dependencies: 2191 | atob "^2.0.0" 2192 | decode-uri-component "^0.2.0" 2193 | resolve-url "^0.2.1" 2194 | source-map-url "^0.4.0" 2195 | urix "^0.1.0" 2196 | 2197 | source-map-support@^0.4.15: 2198 | version "0.4.18" 2199 | resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.18.tgz#0286a6de8be42641338594e97ccea75f0a2c585f" 2200 | dependencies: 2201 | source-map "^0.5.6" 2202 | 2203 | source-map-url@^0.4.0: 2204 | version "0.4.0" 2205 | resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" 2206 | 2207 | source-map@^0.4.4: 2208 | version "0.4.4" 2209 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.4.4.tgz#eba4f5da9c0dc999de68032d8b4f76173652036b" 2210 | dependencies: 2211 | amdefine ">=0.0.4" 2212 | 2213 | source-map@^0.5.3, source-map@^0.5.6, source-map@~0.5.1, source-map@~0.5.3: 2214 | version "0.5.7" 2215 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" 2216 | 2217 | spdx-correct@~1.0.0: 2218 | version "1.0.2" 2219 | resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-1.0.2.tgz#4b3073d933ff51f3912f03ac5519498a4150db40" 2220 | dependencies: 2221 | spdx-license-ids "^1.0.2" 2222 | 2223 | spdx-expression-parse@~1.0.0: 2224 | version "1.0.4" 2225 | resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz#9bdf2f20e1f40ed447fbe273266191fced51626c" 2226 | 2227 | spdx-license-ids@^1.0.2: 2228 | version "1.2.2" 2229 | resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz#c9df7a3424594ade6bd11900d596696dc06bac57" 2230 | 2231 | split-string@^3.0.1, split-string@^3.0.2: 2232 | version "3.0.2" 2233 | resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.0.2.tgz#6129bc92731716e5aa1fb73c333078f0b7c114c8" 2234 | dependencies: 2235 | extend-shallow "^2.0.1" 2236 | 2237 | sshpk@^1.7.0: 2238 | version "1.13.1" 2239 | resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.13.1.tgz#512df6da6287144316dc4c18fe1cf1d940739be3" 2240 | dependencies: 2241 | asn1 "~0.2.3" 2242 | assert-plus "^1.0.0" 2243 | dashdash "^1.12.0" 2244 | getpass "^0.1.1" 2245 | optionalDependencies: 2246 | bcrypt-pbkdf "^1.0.0" 2247 | ecc-jsbn "~0.1.1" 2248 | jsbn "~0.1.0" 2249 | tweetnacl "~0.14.0" 2250 | 2251 | static-extend@^0.1.1: 2252 | version "0.1.2" 2253 | resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" 2254 | dependencies: 2255 | define-property "^0.2.5" 2256 | object-copy "^0.1.0" 2257 | 2258 | stream-browserify@^2.0.1: 2259 | version "2.0.1" 2260 | resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.1.tgz#66266ee5f9bdb9940a4e4514cafb43bb71e5c9db" 2261 | dependencies: 2262 | inherits "~2.0.1" 2263 | readable-stream "^2.0.2" 2264 | 2265 | stream-http@^2.3.1: 2266 | version "2.7.2" 2267 | resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.7.2.tgz#40a050ec8dc3b53b33d9909415c02c0bf1abfbad" 2268 | dependencies: 2269 | builtin-status-codes "^3.0.0" 2270 | inherits "^2.0.1" 2271 | readable-stream "^2.2.6" 2272 | to-arraybuffer "^1.0.0" 2273 | xtend "^4.0.0" 2274 | 2275 | string-width@^1.0.1, string-width@^1.0.2: 2276 | version "1.0.2" 2277 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" 2278 | dependencies: 2279 | code-point-at "^1.0.0" 2280 | is-fullwidth-code-point "^1.0.0" 2281 | strip-ansi "^3.0.0" 2282 | 2283 | string-width@^2.0.0: 2284 | version "2.1.1" 2285 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" 2286 | dependencies: 2287 | is-fullwidth-code-point "^2.0.0" 2288 | strip-ansi "^4.0.0" 2289 | 2290 | string_decoder@^0.10.25: 2291 | version "0.10.31" 2292 | resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" 2293 | 2294 | string_decoder@~1.0.3: 2295 | version "1.0.3" 2296 | resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.0.3.tgz#0fc67d7c141825de94282dd536bec6b9bce860ab" 2297 | dependencies: 2298 | safe-buffer "~5.1.0" 2299 | 2300 | stringstream@~0.0.4: 2301 | version "0.0.5" 2302 | resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.5.tgz#4e484cd4de5a0bbbee18e46307710a8a81621878" 2303 | 2304 | strip-ansi@^3.0.0, strip-ansi@^3.0.1: 2305 | version "3.0.1" 2306 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" 2307 | dependencies: 2308 | ansi-regex "^2.0.0" 2309 | 2310 | strip-ansi@^4.0.0: 2311 | version "4.0.0" 2312 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" 2313 | dependencies: 2314 | ansi-regex "^3.0.0" 2315 | 2316 | strip-bom@^3.0.0: 2317 | version "3.0.0" 2318 | resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" 2319 | 2320 | strip-eof@^1.0.0: 2321 | version "1.0.0" 2322 | resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" 2323 | 2324 | strip-json-comments@~2.0.1: 2325 | version "2.0.1" 2326 | resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" 2327 | 2328 | supports-color@^4.2.1: 2329 | version "4.5.0" 2330 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-4.5.0.tgz#be7a0de484dec5c5cddf8b3d59125044912f635b" 2331 | dependencies: 2332 | has-flag "^2.0.0" 2333 | 2334 | tapable@^0.2.5, tapable@^0.2.7: 2335 | version "0.2.8" 2336 | resolved "https://registry.yarnpkg.com/tapable/-/tapable-0.2.8.tgz#99372a5c999bf2df160afc0d74bed4f47948cd22" 2337 | 2338 | tar-pack@^3.4.0: 2339 | version "3.4.0" 2340 | resolved "https://registry.yarnpkg.com/tar-pack/-/tar-pack-3.4.0.tgz#23be2d7f671a8339376cbdb0b8fe3fdebf317984" 2341 | dependencies: 2342 | debug "^2.2.0" 2343 | fstream "^1.0.10" 2344 | fstream-ignore "^1.0.5" 2345 | once "^1.3.3" 2346 | readable-stream "^2.1.4" 2347 | rimraf "^2.5.1" 2348 | tar "^2.2.1" 2349 | uid-number "^0.0.6" 2350 | 2351 | tar@^2.2.1: 2352 | version "2.2.1" 2353 | resolved "https://registry.yarnpkg.com/tar/-/tar-2.2.1.tgz#8e4d2a256c0e2185c6b18ad694aec968b83cb1d1" 2354 | dependencies: 2355 | block-stream "*" 2356 | fstream "^1.0.2" 2357 | inherits "2" 2358 | 2359 | timers-browserify@^2.0.2: 2360 | version "2.0.4" 2361 | resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.4.tgz#96ca53f4b794a5e7c0e1bd7cc88a372298fa01e6" 2362 | dependencies: 2363 | setimmediate "^1.0.4" 2364 | 2365 | to-arraybuffer@^1.0.0: 2366 | version "1.0.1" 2367 | resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43" 2368 | 2369 | to-object-path@^0.3.0: 2370 | version "0.3.0" 2371 | resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" 2372 | dependencies: 2373 | kind-of "^3.0.2" 2374 | 2375 | to-regex-range@^2.1.0: 2376 | version "2.1.1" 2377 | resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" 2378 | dependencies: 2379 | is-number "^3.0.0" 2380 | repeat-string "^1.6.1" 2381 | 2382 | to-regex@^3.0.1: 2383 | version "3.0.1" 2384 | resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.1.tgz#15358bee4a2c83bd76377ba1dc049d0f18837aae" 2385 | dependencies: 2386 | define-property "^0.2.5" 2387 | extend-shallow "^2.0.1" 2388 | regex-not "^1.0.0" 2389 | 2390 | tough-cookie@~2.3.0: 2391 | version "2.3.3" 2392 | resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.3.tgz#0b618a5565b6dea90bf3425d04d55edc475a7561" 2393 | dependencies: 2394 | punycode "^1.4.1" 2395 | 2396 | tty-browserify@0.0.0: 2397 | version "0.0.0" 2398 | resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6" 2399 | 2400 | tunnel-agent@^0.6.0: 2401 | version "0.6.0" 2402 | resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" 2403 | dependencies: 2404 | safe-buffer "^5.0.1" 2405 | 2406 | tweetnacl@^0.14.3, tweetnacl@~0.14.0: 2407 | version "0.14.5" 2408 | resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" 2409 | 2410 | typedoc-default-themes@^0.5.0: 2411 | version "0.5.0" 2412 | resolved "https://registry.yarnpkg.com/typedoc-default-themes/-/typedoc-default-themes-0.5.0.tgz#6dc2433e78ed8bea8e887a3acde2f31785bd6227" 2413 | 2414 | typedoc-webpack-plugin@^1.1.4: 2415 | version "1.1.4" 2416 | resolved "https://registry.yarnpkg.com/typedoc-webpack-plugin/-/typedoc-webpack-plugin-1.1.4.tgz#5d3bfc6d824a52f40109ee89d2bfbca5f1ac30a1" 2417 | dependencies: 2418 | lodash.clone "^4.5.0" 2419 | lodash.merge "^4.6.0" 2420 | 2421 | typedoc@^0.9.0: 2422 | version "0.9.0" 2423 | resolved "https://registry.yarnpkg.com/typedoc/-/typedoc-0.9.0.tgz#159bff7c7784ce5b91d86f3e4cc8928e62040957" 2424 | dependencies: 2425 | "@types/fs-extra" "4.0.0" 2426 | "@types/handlebars" "4.0.31" 2427 | "@types/highlight.js" "9.1.8" 2428 | "@types/lodash" "4.14.74" 2429 | "@types/marked" "0.3.0" 2430 | "@types/minimatch" "2.0.29" 2431 | "@types/shelljs" "0.7.0" 2432 | fs-extra "^4.0.0" 2433 | handlebars "^4.0.6" 2434 | highlight.js "^9.0.0" 2435 | lodash "^4.13.1" 2436 | marked "^0.3.5" 2437 | minimatch "^3.0.0" 2438 | progress "^2.0.0" 2439 | shelljs "^0.7.0" 2440 | typedoc-default-themes "^0.5.0" 2441 | typescript "2.4.1" 2442 | 2443 | typescript@2.4.1: 2444 | version "2.4.1" 2445 | resolved "https://registry.yarnpkg.com/typescript/-/typescript-2.4.1.tgz#c3ccb16ddaa0b2314de031e7e6fee89e5ba346bc" 2446 | 2447 | typescript@^2.5.3: 2448 | version "2.5.3" 2449 | resolved "https://registry.yarnpkg.com/typescript/-/typescript-2.5.3.tgz#df3dcdc38f3beb800d4bc322646b04a3f6ca7f0d" 2450 | 2451 | uglify-js@^2.6, uglify-js@^2.8.29: 2452 | version "2.8.29" 2453 | resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.8.29.tgz#29c5733148057bb4e1f75df35b7a9cb72e6a59dd" 2454 | dependencies: 2455 | source-map "~0.5.1" 2456 | yargs "~3.10.0" 2457 | optionalDependencies: 2458 | uglify-to-browserify "~1.0.0" 2459 | 2460 | uglify-to-browserify@~1.0.0: 2461 | version "1.0.2" 2462 | resolved "https://registry.yarnpkg.com/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz#6e0924d6bda6b5afe349e39a6d632850a0f882b7" 2463 | 2464 | uglifyjs-webpack-plugin@^0.4.6: 2465 | version "0.4.6" 2466 | resolved "https://registry.yarnpkg.com/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-0.4.6.tgz#b951f4abb6bd617e66f63eb891498e391763e309" 2467 | dependencies: 2468 | source-map "^0.5.6" 2469 | uglify-js "^2.8.29" 2470 | webpack-sources "^1.0.1" 2471 | 2472 | uid-number@^0.0.6: 2473 | version "0.0.6" 2474 | resolved "https://registry.yarnpkg.com/uid-number/-/uid-number-0.0.6.tgz#0ea10e8035e8eb5b8e4449f06da1c730663baa81" 2475 | 2476 | union-value@^1.0.0: 2477 | version "1.0.0" 2478 | resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.0.tgz#5c71c34cb5bad5dcebe3ea0cd08207ba5aa1aea4" 2479 | dependencies: 2480 | arr-union "^3.1.0" 2481 | get-value "^2.0.6" 2482 | is-extendable "^0.1.1" 2483 | set-value "^0.4.3" 2484 | 2485 | universalify@^0.1.0: 2486 | version "0.1.1" 2487 | resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.1.tgz#fa71badd4437af4c148841e3b3b165f9e9e590b7" 2488 | 2489 | unset-value@^1.0.0: 2490 | version "1.0.0" 2491 | resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" 2492 | dependencies: 2493 | has-value "^0.3.1" 2494 | isobject "^3.0.0" 2495 | 2496 | urix@^0.1.0: 2497 | version "0.1.0" 2498 | resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" 2499 | 2500 | url@^0.11.0: 2501 | version "0.11.0" 2502 | resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1" 2503 | dependencies: 2504 | punycode "1.3.2" 2505 | querystring "0.2.0" 2506 | 2507 | use@^2.0.0: 2508 | version "2.0.2" 2509 | resolved "https://registry.yarnpkg.com/use/-/use-2.0.2.tgz#ae28a0d72f93bf22422a18a2e379993112dec8e8" 2510 | dependencies: 2511 | define-property "^0.2.5" 2512 | isobject "^3.0.0" 2513 | lazy-cache "^2.0.2" 2514 | 2515 | util-deprecate@~1.0.1: 2516 | version "1.0.2" 2517 | resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" 2518 | 2519 | util@0.10.3, util@^0.10.3: 2520 | version "0.10.3" 2521 | resolved "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9" 2522 | dependencies: 2523 | inherits "2.0.1" 2524 | 2525 | uuid@^3.0.0: 2526 | version "3.1.0" 2527 | resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.1.0.tgz#3dd3d3e790abc24d7b0d3a034ffababe28ebbc04" 2528 | 2529 | validate-npm-package-license@^3.0.1: 2530 | version "3.0.1" 2531 | resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz#2804babe712ad3379459acfbe24746ab2c303fbc" 2532 | dependencies: 2533 | spdx-correct "~1.0.0" 2534 | spdx-expression-parse "~1.0.0" 2535 | 2536 | verror@1.10.0: 2537 | version "1.10.0" 2538 | resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" 2539 | dependencies: 2540 | assert-plus "^1.0.0" 2541 | core-util-is "1.0.2" 2542 | extsprintf "^1.2.0" 2543 | 2544 | vm-browserify@0.0.4: 2545 | version "0.0.4" 2546 | resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-0.0.4.tgz#5d7ea45bbef9e4a6ff65f95438e0a87c357d5a73" 2547 | dependencies: 2548 | indexof "0.0.1" 2549 | 2550 | watchpack@^1.4.0: 2551 | version "1.4.0" 2552 | resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.4.0.tgz#4a1472bcbb952bd0a9bb4036801f954dfb39faac" 2553 | dependencies: 2554 | async "^2.1.2" 2555 | chokidar "^1.7.0" 2556 | graceful-fs "^4.1.2" 2557 | 2558 | webpack-sources@^1.0.1: 2559 | version "1.0.1" 2560 | resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.0.1.tgz#c7356436a4d13123be2e2426a05d1dad9cbe65cf" 2561 | dependencies: 2562 | source-list-map "^2.0.0" 2563 | source-map "~0.5.3" 2564 | 2565 | webpack@^3.8.1: 2566 | version "3.8.1" 2567 | resolved "https://registry.yarnpkg.com/webpack/-/webpack-3.8.1.tgz#b16968a81100abe61608b0153c9159ef8bb2bd83" 2568 | dependencies: 2569 | acorn "^5.0.0" 2570 | acorn-dynamic-import "^2.0.0" 2571 | ajv "^5.1.5" 2572 | ajv-keywords "^2.0.0" 2573 | async "^2.1.2" 2574 | enhanced-resolve "^3.4.0" 2575 | escope "^3.6.0" 2576 | interpret "^1.0.0" 2577 | json-loader "^0.5.4" 2578 | json5 "^0.5.1" 2579 | loader-runner "^2.3.0" 2580 | loader-utils "^1.1.0" 2581 | memory-fs "~0.4.1" 2582 | mkdirp "~0.5.0" 2583 | node-libs-browser "^2.0.0" 2584 | source-map "^0.5.3" 2585 | supports-color "^4.2.1" 2586 | tapable "^0.2.7" 2587 | uglifyjs-webpack-plugin "^0.4.6" 2588 | watchpack "^1.4.0" 2589 | webpack-sources "^1.0.1" 2590 | yargs "^8.0.2" 2591 | 2592 | which-module@^2.0.0: 2593 | version "2.0.0" 2594 | resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" 2595 | 2596 | which@^1.2.9: 2597 | version "1.3.0" 2598 | resolved "https://registry.yarnpkg.com/which/-/which-1.3.0.tgz#ff04bdfc010ee547d780bec38e1ac1c2777d253a" 2599 | dependencies: 2600 | isexe "^2.0.0" 2601 | 2602 | wide-align@^1.1.0: 2603 | version "1.1.2" 2604 | resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.2.tgz#571e0f1b0604636ebc0dfc21b0339bbe31341710" 2605 | dependencies: 2606 | string-width "^1.0.2" 2607 | 2608 | window-size@0.1.0: 2609 | version "0.1.0" 2610 | resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.0.tgz#5438cd2ea93b202efa3a19fe8887aee7c94f9c9d" 2611 | 2612 | wordwrap@0.0.2: 2613 | version "0.0.2" 2614 | resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.2.tgz#b79669bb42ecb409f83d583cad52ca17eaa1643f" 2615 | 2616 | wordwrap@~0.0.2: 2617 | version "0.0.3" 2618 | resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107" 2619 | 2620 | wrap-ansi@^2.0.0: 2621 | version "2.1.0" 2622 | resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85" 2623 | dependencies: 2624 | string-width "^1.0.1" 2625 | strip-ansi "^3.0.1" 2626 | 2627 | wrappy@1: 2628 | version "1.0.2" 2629 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" 2630 | 2631 | xtend@^4.0.0: 2632 | version "4.0.1" 2633 | resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af" 2634 | 2635 | y18n@^3.2.1: 2636 | version "3.2.1" 2637 | resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41" 2638 | 2639 | yallist@^2.1.2: 2640 | version "2.1.2" 2641 | resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" 2642 | 2643 | yargs-parser@^7.0.0: 2644 | version "7.0.0" 2645 | resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-7.0.0.tgz#8d0ac42f16ea55debd332caf4c4038b3e3f5dfd9" 2646 | dependencies: 2647 | camelcase "^4.1.0" 2648 | 2649 | yargs@^8.0.2: 2650 | version "8.0.2" 2651 | resolved "https://registry.yarnpkg.com/yargs/-/yargs-8.0.2.tgz#6299a9055b1cefc969ff7e79c1d918dceb22c360" 2652 | dependencies: 2653 | camelcase "^4.1.0" 2654 | cliui "^3.2.0" 2655 | decamelize "^1.1.1" 2656 | get-caller-file "^1.0.1" 2657 | os-locale "^2.0.0" 2658 | read-pkg-up "^2.0.0" 2659 | require-directory "^2.1.1" 2660 | require-main-filename "^1.0.1" 2661 | set-blocking "^2.0.0" 2662 | string-width "^2.0.0" 2663 | which-module "^2.0.0" 2664 | y18n "^3.2.1" 2665 | yargs-parser "^7.0.0" 2666 | 2667 | yargs@~3.10.0: 2668 | version "3.10.0" 2669 | resolved "https://registry.yarnpkg.com/yargs/-/yargs-3.10.0.tgz#f7ee7bd857dd7c1d2d38c0e74efbd681d1431fd1" 2670 | dependencies: 2671 | camelcase "^1.0.2" 2672 | cliui "^2.1.0" 2673 | decamelize "^1.0.0" 2674 | window-size "0.1.0" 2675 | --------------------------------------------------------------------------------