├── .codeclimate.yml ├── .editorconfig ├── .gitignore ├── .travis.yml ├── LICENSE ├── README.md ├── bower.json ├── dist ├── BsLoadingOverlayDirective.d.ts ├── BsLoadingOverlayDirective.spec.d.ts ├── BsLoadingOverlayInstance.d.ts ├── BsLoadingOverlayModule.d.ts ├── BsLoadingOverlayService.d.ts ├── BsLoadingOverlayService.spec.d.ts ├── IBsLoadingOverlayHandler.d.ts ├── IBsLoadingOverlayOptions.d.ts └── angular-loading-overlay.js ├── karma.conf.js ├── package.json ├── source ├── BsLoadingOverlayDirective.spec.ts ├── BsLoadingOverlayDirective.ts ├── BsLoadingOverlayInstance.ts ├── BsLoadingOverlayModule.ts ├── BsLoadingOverlayService.spec.ts ├── BsLoadingOverlayService.ts ├── IBsLoadingOverlayHandler.ts └── IBsLoadingOverlayOptions.ts ├── tsconfig.json ├── tslint.json ├── webpack.config.js └── yarn.lock /.codeclimate.yml: -------------------------------------------------------------------------------- 1 | languages: 2 | JavaScript: true 3 | exclude_paths: 4 | - "source/*.spec.js" 5 | -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | [**.{js,ts}] 2 | charset = utf-8 3 | end_of_line = lf 4 | insert_final_newline = true 5 | indent_style = space 6 | indent_size = 4 7 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | 5 | # Runtime data 6 | pids 7 | *.pid 8 | *.seed 9 | 10 | # Directory for instrumented libs generated by jscoverage/JSCover 11 | lib-cov 12 | 13 | # Coverage directory used by tools like istanbul 14 | coverage 15 | 16 | # Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) 17 | .grunt 18 | 19 | # Compiled binary addons (http://nodejs.org/api/addons.html) 20 | build/Release 21 | 22 | # Dependency directory 23 | # Commenting this out is preferred by some people, see 24 | # https://www.npmjs.org/doc/misc/npm-faq.html#should-i-check-my-node_modules-folder-into-git- 25 | node_modules 26 | 27 | # Users Environment Variables 28 | .lock-wscript 29 | .idea 30 | typings 31 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: node_js 2 | node_js: 3 | - "7.2.0" 4 | 5 | before_script: 6 | - export DISPLAY=:99.0 7 | - sh -e /etc/init.d/xvfb start 8 | 9 | install: 10 | - npm install -g yarn 11 | - yarn 12 | 13 | addons: 14 | code_climate: 15 | repo_token: 4391dac465d1650d4aa8517b1162b0b2e7db2e03faaffa73650dba2560d4c52f 16 | 17 | sudo: false 18 | 19 | after_script: 20 | - codeclimate-test-reporter < coverage/lcov.info 21 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2016, Oleksandr Beshchuk 2 | 3 | Licensed under the Apache License, Version 2.0 (the "License"); 4 | you may not use this file except in compliance with the License. 5 | You may obtain a copy of the License at 6 | 7 | http://www.apache.org/licenses/LICENSE-2.0 8 | 9 | Unless required by applicable law or agreed to in writing, software 10 | distributed under the License is distributed on an "AS IS" BASIS, 11 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | See the License for the specific language governing permissions and 13 | limitations under the License. 14 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Angular loading overlay 2 | 3 | [![Build Status](https://travis-ci.org/bsalex/angular-loading-overlay.svg?branch=master)](https://travis-ci.org/bsalex/angular-loading-overlay) 4 | [![Code Climate](https://codeclimate.com/github/bsalex/angular-loading-overlay/badges/gpa.svg)](https://codeclimate.com/github/bsalex/angular-loading-overlay) 5 | [![Package Quality](http://npm.packagequality.com/badge/angular-loading-overlay.png)](http://packagequality.com/#?package=angular-loading-overlay) 6 | [![Codacy Badge](https://api.codacy.com/project/badge/Grade/8310c436284d4919876a1f8e7ac6e0c0)](https://www.codacy.com/app/bs-alex-mail/angular-loading-overlay?utm_source=github.com&utm_medium=referral&utm_content=bsalex/angular-loading-overlay&utm_campaign=Badge_Grade) 7 | [![Join the chat at https://gitter.im/bsalex/angular-loading-overlay](https://badges.gitter.im/bsalex/angular-loading-overlay.svg)](https://gitter.im/bsalex/angular-loading-overlay?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) 8 | 9 | The module provides your app with organized and flexible way to show overlays (like "**Loading...**"). 10 | 11 | It supports multiple independent named overlays on one page. 12 | 13 | It also allows you to create **preconfigured handlers** and wrap **promises** to show and hide overlays on promise work started and finished. 14 | 15 | The module has integration with **[Spin.js](http://spin.js.org/)** via [angular-loading-overlay-spinjs](https://github.com/bsalex/angular-loading-overlay-spinjs). 16 | See Docs & Examples for more information. 17 | 18 | The module provides integration with angular **$http service** via [angular-loading-overlay-http-interceptor](https://github.com/bsalex/angular-loading-overlay-http-interceptor). 19 | The integration includes requests matchers which adds more flexibility. 20 | See Docs & Examples for more information. 21 | 22 | Should you have any questions, feel free to contact me on Gitter [![Join the chat at https://gitter.im/bsalex/angular-loading-overlay](https://badges.gitter.im/bsalex/angular-loading-overlay.svg)](https://gitter.im/bsalex/angular-loading-overlay?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) 23 | 24 | ## Docs & Examples 25 | 26 | ## Installation 27 | ```` 28 | bower install --save angular-loading-overlay 29 | ```` 30 | or 31 | ```` 32 | npm install --save angular-loading-overlay 33 | ```` 34 | 35 | ## Usage 36 | 37 | ### In javascript 38 | ````javascript 39 | angular.module("your nodule name", [ 40 | "bsLoadingOverlay" 41 | ]); 42 | 43 | 44 | angular.module("your nodule name") 45 | .controller(function ($timeout, bsLoadingOverlayService) { 46 | bsLoadingOverlayService.start(); 47 | 48 | $timeout(bsLoadingOverlayService.stop, 5000); 49 | }); 50 | ```` 51 | ### In html 52 | ````html 53 |
54 | loaded data usage here 55 |
56 | ```` 57 | ## License 58 | 59 | Copyright (c) 2016 Oleksandr Beshchuk <[bs.alex.mail@gmail.com](mailto:bs.alex.mail@gmail.com)> 60 | Licensed under the [Apache License](http://www.apache.org/licenses/LICENSE-2.0). 61 | 62 | ## Contributing 63 | 64 | 1. Fork the repo 65 | 1. `npm install` 66 | 1. `npm run prepare-development` 67 | 1. `npm run test:watch` 68 | 1. Make your changes, add your tests 69 | 1. `npm run build` 70 | 1. Stage source and dist folders 71 | 1. Commit, push, PR. 72 | -------------------------------------------------------------------------------- /bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "angular-loading-overlay", 3 | "homepage": "https://github.com/bsalex/angular-loading-overlay", 4 | "authors": [ 5 | "Oleksandr Beshchuk " 6 | ], 7 | "description": "Module that provides ability to manipulate overlays on async operations.", 8 | "main": "dist/angular-loading-overlay.js", 9 | "keywords": [ 10 | "angular", 11 | "loading", 12 | "overlay" 13 | ], 14 | "license": "Apache-2.0", 15 | "ignore": [ 16 | "**/.*", 17 | "node_modules", 18 | "bower_components", 19 | "test", 20 | "tests" 21 | ] 22 | } 23 | -------------------------------------------------------------------------------- /dist/BsLoadingOverlayDirective.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | /// 3 | import * as angular from 'angular'; 4 | import { BsLoadingOverlayService } from './BsLoadingOverlayService'; 5 | export default class BsLoadingOverlayDirective implements angular.IDirective { 6 | private $compile; 7 | private $rootScope; 8 | private $templateRequest; 9 | private $q; 10 | private $timeout; 11 | private bsLoadingOverlayService; 12 | constructor($compile: angular.ICompileService, $rootScope: angular.IRootScopeService, $templateRequest: angular.ITemplateRequestService, $q: angular.IQService, $timeout: angular.ITimeoutService, bsLoadingOverlayService: BsLoadingOverlayService); 13 | private updateOverlayElement(overlayInstance); 14 | restrict: string; 15 | link: angular.IDirectiveLinkFn; 16 | } 17 | export declare const BsLoadingOverlayDirectiveFactory: angular.IDirectiveFactory; 18 | -------------------------------------------------------------------------------- /dist/BsLoadingOverlayDirective.spec.d.ts: -------------------------------------------------------------------------------- 1 | import 'angular-mocks'; 2 | import 'jasmine'; 3 | -------------------------------------------------------------------------------- /dist/BsLoadingOverlayInstance.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | import * as angular from 'angular'; 3 | export default class BsLoadingOverlayInstance { 4 | referenceId: string; 5 | delay: number; 6 | activeClass: string; 7 | $element: angular.IAugmentedJQuery; 8 | overlayElement: angular.IAugmentedJQuery; 9 | private $timeout; 10 | private $q; 11 | private delayPromise; 12 | constructor(referenceId: string, delay: number, activeClass: string, $element: angular.IAugmentedJQuery, overlayElement: angular.IAugmentedJQuery, $timeout: any, $q: any); 13 | private isAdded(); 14 | add(): void; 15 | remove(): void; 16 | } 17 | -------------------------------------------------------------------------------- /dist/BsLoadingOverlayModule.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | import * as angular from 'angular'; 3 | declare var _default: angular.IModule; 4 | export default _default; 5 | -------------------------------------------------------------------------------- /dist/BsLoadingOverlayService.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | import * as angular from 'angular'; 3 | import IBsLoadingOverlayOptions from './IBsLoadingOverlayOptions'; 4 | import IBsLoadingOverlayHandler from './IBsLoadingOverlayHandler'; 5 | export declare class BsLoadingOverlayService { 6 | private $rootScope; 7 | private $q; 8 | constructor($rootScope: angular.IRootScopeService, $q: angular.IQService); 9 | globalConfig: IBsLoadingOverlayOptions; 10 | activeOverlays: { 11 | [key: string]: boolean; 12 | }; 13 | start(options?: IBsLoadingOverlayOptions): void; 14 | wrap(options: IBsLoadingOverlayOptions, promiseFunction: angular.IPromise | (() => (angular.IPromise | {}))): angular.IPromise; 15 | createHandler: (options: IBsLoadingOverlayOptions) => IBsLoadingOverlayHandler; 16 | notifyOverlays(referenceId: string): void; 17 | stop(options?: IBsLoadingOverlayOptions): void; 18 | isActive: (referenceId?: string) => boolean; 19 | setGlobalConfig: (options: IBsLoadingOverlayOptions) => any; 20 | getGlobalConfig: () => IBsLoadingOverlayOptions; 21 | } 22 | declare const bsLoadingOverlayServiceFactory: ($rootScope: angular.IRootScopeService, $q: angular.IQService) => BsLoadingOverlayService; 23 | export default bsLoadingOverlayServiceFactory; 24 | -------------------------------------------------------------------------------- /dist/BsLoadingOverlayService.spec.d.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bsalex/angular-loading-overlay/dfe78fdcec4b5bde3ab0890e35113233d63ec274/dist/BsLoadingOverlayService.spec.d.ts -------------------------------------------------------------------------------- /dist/IBsLoadingOverlayHandler.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | import * as angular from 'angular'; 3 | interface IBsLoadingOverlayHandler { 4 | start: () => void; 5 | stop: () => void; 6 | wrap: (promiseFunction: angular.IPromise | (() => (angular.IPromise | {}))) => angular.IPromise; 7 | } 8 | export default IBsLoadingOverlayHandler; 9 | -------------------------------------------------------------------------------- /dist/IBsLoadingOverlayOptions.d.ts: -------------------------------------------------------------------------------- 1 | interface IBsLoadingOverlayOptions { 2 | referenceId?: string; 3 | templateUrl?: string; 4 | templateOptions?: any; 5 | activeClass?: string; 6 | delay?: number; 7 | } 8 | export default IBsLoadingOverlayOptions; 9 | -------------------------------------------------------------------------------- /dist/angular-loading-overlay.js: -------------------------------------------------------------------------------- 1 | /******/ (function(modules) { // webpackBootstrap 2 | /******/ // The module cache 3 | /******/ var installedModules = {}; 4 | 5 | /******/ // The require function 6 | /******/ function __webpack_require__(moduleId) { 7 | 8 | /******/ // Check if module is in cache 9 | /******/ if(installedModules[moduleId]) 10 | /******/ return installedModules[moduleId].exports; 11 | 12 | /******/ // Create a new module (and put it into the cache) 13 | /******/ var module = installedModules[moduleId] = { 14 | /******/ exports: {}, 15 | /******/ id: moduleId, 16 | /******/ loaded: false 17 | /******/ }; 18 | 19 | /******/ // Execute the module function 20 | /******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); 21 | 22 | /******/ // Flag the module as loaded 23 | /******/ module.loaded = true; 24 | 25 | /******/ // Return the exports of the module 26 | /******/ return module.exports; 27 | /******/ } 28 | 29 | 30 | /******/ // expose the modules object (__webpack_modules__) 31 | /******/ __webpack_require__.m = modules; 32 | 33 | /******/ // expose the module cache 34 | /******/ __webpack_require__.c = installedModules; 35 | 36 | /******/ // __webpack_public_path__ 37 | /******/ __webpack_require__.p = "./dist/"; 38 | 39 | /******/ // Load entry module and return exports 40 | /******/ return __webpack_require__(0); 41 | /******/ }) 42 | /************************************************************************/ 43 | /******/ ([ 44 | /* 0 */ 45 | /***/ function(module, exports, __webpack_require__) { 46 | 47 | "use strict"; 48 | var angular = __webpack_require__(1); 49 | var BsLoadingOverlayDirective_1 = __webpack_require__(2); 50 | var BsLoadingOverlayService_1 = __webpack_require__(4); 51 | Object.defineProperty(exports, "__esModule", { value: true }); 52 | exports.default = angular.module('bsLoadingOverlay', []) 53 | .directive('bsLoadingOverlay', BsLoadingOverlayDirective_1.BsLoadingOverlayDirectiveFactory) 54 | .factory('bsLoadingOverlayService', BsLoadingOverlayService_1.default); 55 | 56 | 57 | /***/ }, 58 | /* 1 */ 59 | /***/ function(module, exports) { 60 | 61 | module.exports = angular; 62 | 63 | /***/ }, 64 | /* 2 */ 65 | /***/ function(module, exports, __webpack_require__) { 66 | 67 | "use strict"; 68 | var BsLoadingOverlayInstance_1 = __webpack_require__(3); 69 | var BsLoadingOverlayDirective = (function () { 70 | function BsLoadingOverlayDirective($compile, $rootScope, $templateRequest, $q, $timeout, bsLoadingOverlayService) { 71 | var _this = this; 72 | this.$compile = $compile; 73 | this.$rootScope = $rootScope; 74 | this.$templateRequest = $templateRequest; 75 | this.$q = $q; 76 | this.$timeout = $timeout; 77 | this.bsLoadingOverlayService = bsLoadingOverlayService; 78 | this.restrict = 'EA'; 79 | this.link = function (scope, $element, $attributes) { 80 | var templatePromise; 81 | var overlayElementScope; 82 | var globalConfig = _this.bsLoadingOverlayService.getGlobalConfig(); 83 | var templateUrl = $attributes.bsLoadingOverlayTemplateUrl || globalConfig.templateUrl; 84 | var templateOptions = scope.$eval($attributes.bsLoadingOverlayTemplateOptions) || globalConfig.templateOptions; 85 | var overlayElement = null; 86 | if (templateUrl) { 87 | templatePromise = _this.$templateRequest(templateUrl); 88 | } 89 | else { 90 | templatePromise = _this.$q.reject(); 91 | } 92 | templatePromise.then(function (loadedTemplate) { 93 | overlayElementScope = scope.$new(); 94 | overlayElementScope.bsLoadingOverlayTemplateOptions = templateOptions; 95 | overlayElement = _this.$compile(loadedTemplate)(overlayElementScope); 96 | overlayElement.data('isAttached', false); 97 | }).finally(function () { 98 | var overlayInstance = new BsLoadingOverlayInstance_1.default($attributes.bsLoadingOverlayReferenceId || ($attributes.bsLoadingOverlay === '' ? undefined : $attributes.bsLoadingOverlay), +$attributes.bsLoadingOverlayDelay || globalConfig.delay, $attributes.bsLoadingOverlayActiveClass || globalConfig.activeClass, $element, overlayElement, _this.$timeout, _this.$q); 99 | var unsubscribe = _this.$rootScope.$on('bsLoadingOverlayUpdateEvent', function (event, options) { 100 | if (options.referenceId === overlayInstance.referenceId) { 101 | _this.updateOverlayElement(overlayInstance); 102 | } 103 | }); 104 | $element.on('$destroy', function () { 105 | overlayElementScope.$destroy(); 106 | unsubscribe(); 107 | }); 108 | _this.updateOverlayElement(overlayInstance); 109 | }); 110 | }; 111 | } 112 | BsLoadingOverlayDirective.prototype.updateOverlayElement = function (overlayInstance) { 113 | if (this.bsLoadingOverlayService.isActive(overlayInstance.referenceId)) { 114 | overlayInstance.add(); 115 | } 116 | else { 117 | overlayInstance.remove(); 118 | } 119 | }; 120 | ; 121 | return BsLoadingOverlayDirective; 122 | }()); 123 | Object.defineProperty(exports, "__esModule", { value: true }); 124 | exports.default = BsLoadingOverlayDirective; 125 | exports.BsLoadingOverlayDirectiveFactory = function ($compile, $rootScope, $templateRequest, $q, $timeout, bsLoadingOverlayService) { return (new BsLoadingOverlayDirective($compile, $rootScope, $templateRequest, $q, $timeout, bsLoadingOverlayService)); }; 126 | exports.BsLoadingOverlayDirectiveFactory.$inject = [ 127 | '$compile', 128 | '$rootScope', 129 | '$templateRequest', 130 | '$q', 131 | '$timeout', 132 | 'bsLoadingOverlayService' 133 | ]; 134 | 135 | 136 | /***/ }, 137 | /* 3 */ 138 | /***/ function(module, exports, __webpack_require__) { 139 | 140 | "use strict"; 141 | var angular = __webpack_require__(1); 142 | var BsLoadingOverlayInstance = (function () { 143 | function BsLoadingOverlayInstance(referenceId, delay, activeClass, $element, overlayElement, $timeout, $q) { 144 | this.referenceId = referenceId; 145 | this.delay = delay; 146 | this.activeClass = activeClass; 147 | this.$element = $element; 148 | this.overlayElement = overlayElement; 149 | this.$timeout = $timeout; 150 | this.$q = $q; 151 | } 152 | BsLoadingOverlayInstance.prototype.isAdded = function () { 153 | return !!this.delayPromise; 154 | }; 155 | BsLoadingOverlayInstance.prototype.add = function () { 156 | if (this.delay) { 157 | if (this.delayPromise) { 158 | this.$timeout.cancel(this.delayPromise); 159 | } 160 | this.delayPromise = this.$timeout(angular.noop, this.delay); 161 | } 162 | else { 163 | this.delayPromise = this.$q.when(); 164 | } 165 | if (this.overlayElement && !this.overlayElement.data('isAttached')) { 166 | this.$element.append(this.overlayElement); 167 | this.overlayElement.data('isAttached', true); 168 | } 169 | this.$element.addClass(this.activeClass); 170 | }; 171 | ; 172 | BsLoadingOverlayInstance.prototype.remove = function () { 173 | var _this = this; 174 | if (this.isAdded()) { 175 | this.delayPromise.then(function () { 176 | if (_this.overlayElement && _this.overlayElement.data('isAttached')) { 177 | _this.overlayElement.data('isAttached', false); 178 | _this.overlayElement.detach(); 179 | } 180 | _this.$element.removeClass(_this.activeClass); 181 | _this.delayPromise = undefined; 182 | }); 183 | } 184 | }; 185 | ; 186 | return BsLoadingOverlayInstance; 187 | }()); 188 | Object.defineProperty(exports, "__esModule", { value: true }); 189 | exports.default = BsLoadingOverlayInstance; 190 | 191 | 192 | /***/ }, 193 | /* 4 */ 194 | /***/ function(module, exports, __webpack_require__) { 195 | 196 | "use strict"; 197 | var angular = __webpack_require__(1); 198 | var BsLoadingOverlayService = (function () { 199 | function BsLoadingOverlayService($rootScope, $q) { 200 | var _this = this; 201 | this.$rootScope = $rootScope; 202 | this.$q = $q; 203 | this.globalConfig = {}; 204 | this.activeOverlays = {}; 205 | this.createHandler = function (options) { return ({ 206 | start: _this.start.bind(_this, options), 207 | stop: _this.stop.bind(_this, options), 208 | wrap: _this.wrap.bind(_this, options) 209 | }); }; 210 | this.isActive = function (referenceId) { 211 | if (referenceId === void 0) { referenceId = undefined; } 212 | return _this.activeOverlays[referenceId]; 213 | }; 214 | this.setGlobalConfig = function (options) { return angular.extend(_this.globalConfig, options); }; 215 | this.getGlobalConfig = function () { return _this.globalConfig; }; 216 | } 217 | BsLoadingOverlayService.prototype.start = function (options) { 218 | if (options === void 0) { options = {}; } 219 | this.activeOverlays[options.referenceId] = true; 220 | this.notifyOverlays(options.referenceId); 221 | }; 222 | BsLoadingOverlayService.prototype.wrap = function (options, promiseFunction) { 223 | var promise; 224 | if (typeof promiseFunction === 'function') { 225 | promise = promiseFunction; 226 | } 227 | else { 228 | promise = function () { return promiseFunction; }; 229 | } 230 | return this.$q.when(this.start(options)) 231 | .then(promise) 232 | .finally(this.stop.bind(this, options)); 233 | }; 234 | BsLoadingOverlayService.prototype.notifyOverlays = function (referenceId) { 235 | this.$rootScope.$emit('bsLoadingOverlayUpdateEvent', { 236 | referenceId: referenceId 237 | }); 238 | }; 239 | BsLoadingOverlayService.prototype.stop = function (options) { 240 | if (options === void 0) { options = {}; } 241 | delete this.activeOverlays[options.referenceId]; 242 | this.notifyOverlays(options.referenceId); 243 | }; 244 | return BsLoadingOverlayService; 245 | }()); 246 | exports.BsLoadingOverlayService = BsLoadingOverlayService; 247 | var bsLoadingOverlayServiceFactory = function ($rootScope, $q) { return new BsLoadingOverlayService($rootScope, $q); }; 248 | bsLoadingOverlayServiceFactory.$inject = ['$rootScope', '$q']; 249 | Object.defineProperty(exports, "__esModule", { value: true }); 250 | exports.default = bsLoadingOverlayServiceFactory; 251 | 252 | 253 | /***/ } 254 | /******/ ]); -------------------------------------------------------------------------------- /karma.conf.js: -------------------------------------------------------------------------------- 1 | // Karma configuration 2 | // Generated on Tue Sep 22 2015 23:49:19 GMT+0300 (EEST) 3 | var path = require('path'); 4 | module.exports = function(config) { 5 | config.set({ 6 | 7 | // base path that will be used to resolve all patterns (eg. files, exclude) 8 | basePath: '', 9 | 10 | // frameworks to use 11 | // available frameworks: https://npmjs.org/browse/keyword/karma-adapter 12 | frameworks: ['jasmine', 'sinon'], 13 | 14 | // list of files / patterns to load in the browser 15 | files: [ 16 | 'node_modules/ng-describe/dist/ng-describe.js', 17 | 'source/**/*spec.ts' 18 | ], 19 | 20 | // list of files to exclude 21 | exclude: [], 22 | 23 | // preprocess matching files before serving them to the browser 24 | // available preprocessors: https://npmjs.org/browse/keyword/karma-preprocessor 25 | preprocessors: { 26 | 'source/**/*spec.ts': ['webpack', 'sourcemap'] 27 | }, 28 | 29 | // test results reporter to use 30 | // possible values: 'dots', 'progress' 31 | // available reporters: https://npmjs.org/browse/keyword/karma-reporter 32 | reporters: ['progress', 'coverage'], 33 | 34 | // web server port 35 | port: 9876, 36 | 37 | // enable / disable colors in the output (reporters and logs) 38 | colors: true, 39 | 40 | // level of logging 41 | // possible values: config.LOG_DISABLE || config.LOG_ERROR || config.LOG_WARN || config.LOG_INFO || config.LOG_DEBUG 42 | logLevel: config.LOG_INFO, 43 | 44 | // enable / disable watching file and executing tests whenever any file changes 45 | autoWatch: true, 46 | 47 | // start these browsers 48 | // available browser launchers: https://npmjs.org/browse/keyword/karma-launcher 49 | browsers: ['PhantomJS'], 50 | 51 | webpack: { 52 | cache: true, 53 | devtool: 'inline-source-map', 54 | stats: { 55 | colors: true, 56 | reasons: true 57 | }, 58 | module: { 59 | preLoaders: [{ 60 | test: /\.ts$/, 61 | exclude: /node_modules/, 62 | loader: 'tslint-loader' 63 | }], 64 | loaders: [{ 65 | test: /\.ts$/, 66 | loader: 'ts-loader', 67 | exclude: /node_modules/ 68 | }, { 69 | test: /\.json$/, 70 | loader: 'json-loader' 71 | }] 72 | }, 73 | resolve: { 74 | extensions: ['', '.ts', '.js'] 75 | }, 76 | node: { 77 | fs: 'empty' 78 | } 79 | }, 80 | 81 | webpackMiddleware: { 82 | noInfo: true, 83 | stats: { 84 | colors: true 85 | } 86 | }, 87 | 88 | coverageReporter: { 89 | reporters: [{ 90 | type: 'lcovonly', 91 | subdir: '.', 92 | file: 'lcov.info' 93 | }], 94 | dir: 'coverage/' 95 | } 96 | }); 97 | }; 98 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "angular-loading-overlay", 3 | "version": "1.1.1", 4 | "description": "Service and directive to manipulate overlays on async operations.", 5 | "repository": { 6 | "type": "git", 7 | "url": "https://github.com/bsalex/angular-loading-overlay.git" 8 | }, 9 | "scripts": { 10 | "test:watch": "karma start", 11 | "test": "karma start --single-run", 12 | "prepush": "npm test && npm run build && git add -u && git diff-index --quiet HEAD || git commit -q -m 'Build'", 13 | "watch": "webpack-dev-server --host 0.0.0.0", 14 | "build": "webpack && mv source/*.d.ts dist", 15 | "lint": "tslint ./source/*.ts" 16 | }, 17 | "author": "Oleksandr Beshchuk ", 18 | "license": "Apache-2.0", 19 | "main": "./dist/angular-loading-overlay.js", 20 | "devDependencies": { 21 | "@types/angular": "^1.5.20", 22 | "@types/angular-mocks": "^0.0.0", 23 | "@types/jasmine": "^2.5.38", 24 | "@types/jquery": "^2.0.34", 25 | "@types/sinon": "^1.16.32", 26 | "angular": "^1.5.9", 27 | "angular-mocks": "^1.5.9", 28 | "bower": "^1.8.0", 29 | "husky": "^0.11.9", 30 | "jasmine": "^2.5.2", 31 | "jasmine-core": "^2.5.2", 32 | "json-loader": "^0.5.4", 33 | "karma": "^1.3.0", 34 | "karma-coverage": "^1.1.1", 35 | "karma-firefox-launcher": "^1.0.0", 36 | "karma-growler-reporter": "0.0.1", 37 | "karma-jasmine": "^1.0.2", 38 | "karma-phantomjs-launcher": "https://github.com/karma-runner/karma-phantomjs-launcher.git", 39 | "karma-sinon": "^1.0.5", 40 | "karma-sourcemap-loader": "^0.3.7", 41 | "karma-webpack": "^1.8.0", 42 | "ng-describe": "^1.8.0", 43 | "phantomjs-prebuilt": "^2.1.13", 44 | "sinon": "next", 45 | "ts-loader": "^1.2.2", 46 | "tslint": "^4.0.2", 47 | "tslint-loader": "^3.2.1", 48 | "typescript": "^2.1.0", 49 | "typings": "^2.0.0", 50 | "webpack": "^1.13.3", 51 | "webpack-dev-server": "^1.16.2" 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /source/BsLoadingOverlayDirective.spec.ts: -------------------------------------------------------------------------------- 1 | import * as angular from 'angular'; 2 | import * as sinon from 'sinon'; 3 | import 'angular-mocks'; 4 | import 'jasmine'; 5 | 6 | import BsLoadingOverlayModule from './BsLoadingOverlayModule'; 7 | import IBsLoadingOverlayOptions from './IBsLoadingOverlayOptions'; 8 | 9 | interface BsLoadingOverlayScope extends angular.IScope { 10 | model: any; 11 | } 12 | 13 | interface IRootScopeServiceWithExposedListeners extends angular.IRootScopeService { 14 | $$listeners: any; 15 | } 16 | 17 | describe('bsLoadingOverlay directive', () => { 18 | let bsLoadingOverlayService: any, 19 | bsLoadingOverlayServiceMock: sinon.SinonMock, 20 | $compile: angular.ICompileService, 21 | scope: BsLoadingOverlayScope, 22 | $rootScope: IRootScopeServiceWithExposedListeners, 23 | referenceId: string, 24 | template: string, 25 | $templateCache: angular.ITemplateCacheService, 26 | $timeout: sinon.SinonSpy & angular.ITimeoutService, 27 | defaultConfig: IBsLoadingOverlayOptions = {}; 28 | 29 | const getCompiledElement = (template: string, scope: angular.IScope) => { 30 | let element: angular.IAugmentedJQuery; 31 | 32 | scope.$apply(() => { 33 | element = $compile(template)(scope); 34 | }); 35 | 36 | return element; 37 | }; 38 | 39 | beforeEach(() => { 40 | angular.mock.module(BsLoadingOverlayModule.name); 41 | angular.mock.module(($provide: angular.auto.IProvideService) => { 42 | $provide.value('bsLoadingOverlayService', bsLoadingOverlayService); 43 | $provide.decorator('$timeout', ($delegate: any) => sinon.spy($delegate)); 44 | }); 45 | 46 | template = '
'; 47 | 48 | referenceId = 'referenceId'; 49 | 50 | defaultConfig = { 51 | templateUrl: 'default-template-url.html', 52 | activeClass: 'bs-loading-overlay--active' 53 | }; 54 | 55 | bsLoadingOverlayService = { 56 | isActive: angular.noop, 57 | getGlobalConfig: angular.noop 58 | }; 59 | 60 | bsLoadingOverlayServiceMock = sinon.mock(bsLoadingOverlayService); 61 | bsLoadingOverlayServiceMock.expects('getGlobalConfig').atLeast(1).returns(defaultConfig); 62 | 63 | angular.mock.inject(( 64 | _$compile_: angular.ICompileService, 65 | _$rootScope_: IRootScopeServiceWithExposedListeners, 66 | _$q_: angular.IQService, 67 | _$document_: angular.IDocumentService, 68 | _$templateCache_: angular.ITemplateCacheService, 69 | _$timeout_: sinon.SinonSpy & angular.ITimeoutService 70 | ) => { 71 | $compile = _$compile_; 72 | scope = _$rootScope_.$new(); 73 | scope.model = {}; 74 | $rootScope = _$rootScope_; 75 | $templateCache = _$templateCache_; 76 | $timeout = _$timeout_; 77 | }); 78 | 79 | $templateCache.put('default-template-url.html', '
'); 80 | }); 81 | 82 | 83 | it('should compile', () => { 84 | const element = getCompiledElement(template, scope); 85 | 86 | expect(element[0]).toBeDefined(); 87 | bsLoadingOverlayServiceMock.verify(); 88 | }); 89 | 90 | it('should add overlay when reference is active', () => { 91 | bsLoadingOverlayServiceMock.expects('isActive').once().withArgs(referenceId).returns(true); 92 | 93 | const element = getCompiledElement(template, scope); 94 | 95 | expect(element[0].querySelector('.bs-loading-overlay')).not.toBeNull(); 96 | bsLoadingOverlayServiceMock.verify(); 97 | }); 98 | 99 | describe('with options', () => { 100 | it('should pass provided template options to the template', () => { 101 | bsLoadingOverlayServiceMock.expects('isActive').once().withArgs(referenceId).returns(true); 102 | template = '
'; 103 | $templateCache.put( 104 | 'default-template-url.html', 105 | '
{{bsLoadingOverlayTemplateOptions.option}}
' 106 | ); 107 | 108 | const element = getCompiledElement(template, scope); 109 | 110 | expect(element[0].querySelector('.bs-loading-overlay').textContent).toBe('optionValue'); 111 | bsLoadingOverlayServiceMock.verify(); 112 | }); 113 | 114 | it('should pass provided different template options for different overlays in the same scope', () => { 115 | bsLoadingOverlayServiceMock.expects('isActive').once().withArgs(referenceId).returns(true); 116 | bsLoadingOverlayServiceMock.expects('isActive').once().withArgs('anotherReferenceId').returns(true); 117 | 118 | template = ` 119 |
120 |
121 |
122 |
`; 123 | 124 | $templateCache.put( 125 | 'default-template-url.html', 126 | '
{{bsLoadingOverlayTemplateOptions.option}}
' 127 | ); 128 | 129 | const element = getCompiledElement(template, scope); 130 | const overlayElements = element[0].querySelectorAll('.bs-loading-overlay'); 131 | 132 | expect(overlayElements[0].textContent).toBe('optionValue'); 133 | expect(overlayElements[1].textContent).toBe('anotherOptionValue'); 134 | 135 | bsLoadingOverlayServiceMock.verify(); 136 | }); 137 | }); 138 | 139 | it('should not add overlay when reference is not active', () => { 140 | bsLoadingOverlayServiceMock.expects('isActive').once().withArgs(referenceId).returns(false); 141 | 142 | const element = getCompiledElement(template, scope); 143 | 144 | expect(element[0].querySelector('.bs-loading-overlay')).toBeNull(); 145 | bsLoadingOverlayServiceMock.verify(); 146 | }); 147 | 148 | describe('with reference set by directive name attribute', () => { 149 | beforeEach(() => { 150 | template = '
'; 151 | }); 152 | 153 | it('should not add overlay when reference is not active', () => { 154 | bsLoadingOverlayServiceMock.expects('isActive').once().withArgs(referenceId).returns(false); 155 | 156 | const element = getCompiledElement(template, scope); 157 | 158 | expect(element[0].querySelector('.bs-loading-overlay')).toBeNull(); 159 | bsLoadingOverlayServiceMock.verify(); 160 | }); 161 | 162 | it('should add overlay when reference is active', () => { 163 | bsLoadingOverlayServiceMock.expects('isActive').once().withArgs(referenceId).returns(true); 164 | 165 | const element = getCompiledElement(template, scope); 166 | 167 | expect(element[0].querySelector('.bs-loading-overlay')).not.toBeNull(); 168 | bsLoadingOverlayServiceMock.verify(); 169 | }); 170 | }); 171 | 172 | it('should not add overlay when reference templateUrl is undefined in global config and not set in directive', () => { 173 | bsLoadingOverlayServiceMock.expects('isActive').once().withArgs(referenceId).returns(true); 174 | defaultConfig.templateUrl = undefined; 175 | 176 | const element = getCompiledElement(template, scope); 177 | 178 | expect(element[0].querySelector('.bs-loading-overlay')).toBeNull(); 179 | bsLoadingOverlayServiceMock.verify(); 180 | }); 181 | 182 | it('should reuse the same element on start stop and start again', () => { 183 | bsLoadingOverlayServiceMock.expects('isActive').once().withArgs(referenceId).returns(true); 184 | bsLoadingOverlayServiceMock.expects('isActive').once().withArgs(referenceId).returns(false); 185 | bsLoadingOverlayServiceMock.expects('isActive').once().withArgs(referenceId).returns(true); 186 | 187 | const element = getCompiledElement(template, scope); 188 | 189 | element[0].querySelector('.bs-loading-overlay').id = 'test id'; 190 | 191 | $rootScope.$emit('bsLoadingOverlayUpdateEvent', { 192 | referenceId 193 | }); 194 | 195 | $rootScope.$emit('bsLoadingOverlayUpdateEvent', { 196 | referenceId 197 | }); 198 | 199 | expect(element[0].querySelector('.bs-loading-overlay').id).toEqual('test id'); 200 | bsLoadingOverlayServiceMock.verify(); 201 | }); 202 | 203 | it('should add overlay element using provided templateUrl when reference is active', () => { 204 | $templateCache.put('some-template.html', '
'); 205 | template = '
'; 206 | 207 | bsLoadingOverlayServiceMock.expects('isActive').once().withArgs(referenceId).returns(true); 208 | 209 | const element = getCompiledElement(template, scope); 210 | 211 | expect(element[0].querySelector('.from-template-url')).not.toBeNull(); 212 | bsLoadingOverlayServiceMock.verify(); 213 | }); 214 | 215 | describe('with global config', () => { 216 | const globalConfig: IBsLoadingOverlayOptions = { 217 | templateUrl: 'global-template-url.html', 218 | activeClass: 'globalActiveClass' 219 | }; 220 | 221 | beforeEach(() => { 222 | bsLoadingOverlayServiceMock.restore(); 223 | bsLoadingOverlayServiceMock = sinon.mock(bsLoadingOverlayService); 224 | bsLoadingOverlayServiceMock.expects('getGlobalConfig').once().returns(globalConfig); 225 | 226 | bsLoadingOverlayServiceMock.expects('isActive').once().withArgs(referenceId).returns(true); 227 | 228 | $templateCache.put('global-template-url.html', '
'); 229 | }); 230 | 231 | it('should use templateUrl from global config if it is not provided directly into directive', () => { 232 | const element = getCompiledElement(template, scope); 233 | 234 | expect(element[0].querySelector('.from-global-template-url')).not.toBeNull(); 235 | }); 236 | 237 | it('should use active class from global config if it is not provided directly into directive', () => { 238 | const element = getCompiledElement(template, scope); 239 | 240 | expect(element.hasClass('globalActiveClass')).toBeTruthy(); 241 | }); 242 | 243 | it('should use delay from global config if it is not provided directly into directive', () => { 244 | globalConfig.delay = 1000; 245 | bsLoadingOverlayServiceMock.expects('isActive').once().withArgs(referenceId).returns(false); 246 | 247 | const element = getCompiledElement(template, scope); 248 | scope.$apply(() => { 249 | $rootScope.$emit('bsLoadingOverlayUpdateEvent', { 250 | referenceId 251 | }); 252 | }); 253 | 254 | expect(element[0].querySelector('.from-global-template-url')).not.toBeNull(); 255 | $timeout.flush(); 256 | expect(element[0].querySelector('.from-global-template-url')).toBeNull(); 257 | }); 258 | 259 | it('should pass provided template options from global config if it is not provided directly into directive', () => { 260 | globalConfig.templateOptions = {option: 'optionValue'}; 261 | $templateCache.put( 262 | 'global-template-url.html', 263 | '
{{bsLoadingOverlayTemplateOptions.option}}
' 264 | ); 265 | 266 | const element = getCompiledElement(template, scope); 267 | 268 | expect(element[0].querySelector('.from-global-template-url').textContent).toBe('optionValue'); 269 | bsLoadingOverlayServiceMock.verify(); 270 | }); 271 | }); 272 | 273 | describe('with delay', () => { 274 | it('should call timeout with correct args if delay is set', () => { 275 | template = '
'; 276 | bsLoadingOverlayServiceMock.expects('isActive').once().withArgs(referenceId).returns(true); 277 | bsLoadingOverlayServiceMock.expects('isActive').once().withArgs(referenceId).returns(false); 278 | 279 | const element = getCompiledElement(template, scope); 280 | 281 | $rootScope.$emit('bsLoadingOverlayUpdateEvent', { 282 | referenceId 283 | }); 284 | 285 | expect($timeout.withArgs(angular.noop, 5000).calledOnce).toBeTruthy(); 286 | bsLoadingOverlayServiceMock.verify(); 287 | }); 288 | 289 | it('should not remove overlay element until timer is triggered', () => { 290 | template = '
'; 291 | bsLoadingOverlayServiceMock.expects('isActive').once().withArgs(referenceId).returns(true); 292 | bsLoadingOverlayServiceMock.expects('isActive').once().withArgs(referenceId).returns(false); 293 | 294 | const element = getCompiledElement(template, scope); 295 | 296 | $rootScope.$emit('bsLoadingOverlayUpdateEvent', { 297 | referenceId 298 | }); 299 | 300 | expect(element[0].querySelector('.bs-loading-overlay')).not.toBeNull(); 301 | bsLoadingOverlayServiceMock.verify(); 302 | }); 303 | 304 | it('should remove overlay element when timer is triggered', () => { 305 | template = '
'; 306 | bsLoadingOverlayServiceMock.expects('isActive').once().withArgs(referenceId).returns(true); 307 | bsLoadingOverlayServiceMock.expects('isActive').once().withArgs(referenceId).returns(false); 308 | 309 | const element = getCompiledElement(template, scope); 310 | 311 | $rootScope.$emit('bsLoadingOverlayUpdateEvent', { 312 | referenceId 313 | }); 314 | 315 | $timeout.flush(); 316 | 317 | expect(element[0].querySelector('.bs-loading-overlay')).toBeNull(); 318 | bsLoadingOverlayServiceMock.verify(); 319 | }); 320 | 321 | it('should not remove overlay element when timer is triggered, but overlay became active again', () => { 322 | template = '
'; 323 | bsLoadingOverlayServiceMock.expects('isActive').once().withArgs(referenceId).returns(true); 324 | bsLoadingOverlayServiceMock.expects('isActive').once().withArgs(referenceId).returns(false); 325 | bsLoadingOverlayServiceMock.expects('isActive').once().withArgs(referenceId).returns(true); 326 | 327 | const element = getCompiledElement(template, scope); 328 | 329 | $rootScope.$emit('bsLoadingOverlayUpdateEvent', { 330 | referenceId 331 | }); 332 | 333 | $rootScope.$emit('bsLoadingOverlayUpdateEvent', { 334 | referenceId 335 | }); 336 | 337 | $timeout.flush(); 338 | 339 | expect(element[0].querySelector('.bs-loading-overlay')).not.toBeNull(); 340 | bsLoadingOverlayServiceMock.verify(); 341 | }); 342 | 343 | it('should not remove overlay element until timeout triggered on second stop', () => { 344 | template = '
'; 345 | bsLoadingOverlayServiceMock.expects('isActive').once().withArgs(referenceId).returns(true); 346 | bsLoadingOverlayServiceMock.expects('isActive').once().withArgs(referenceId).returns(false); 347 | bsLoadingOverlayServiceMock.expects('isActive').once().withArgs(referenceId).returns(true); 348 | bsLoadingOverlayServiceMock.expects('isActive').once().withArgs(referenceId).returns(false); 349 | 350 | const element = getCompiledElement(template, scope); 351 | 352 | $rootScope.$emit('bsLoadingOverlayUpdateEvent', { 353 | referenceId 354 | }); 355 | 356 | $timeout.flush(); 357 | 358 | $rootScope.$emit('bsLoadingOverlayUpdateEvent', { 359 | referenceId 360 | }); 361 | 362 | $rootScope.$emit('bsLoadingOverlayUpdateEvent', { 363 | referenceId 364 | }); 365 | 366 | expect(element[0].querySelector('.bs-loading-overlay')).not.toBeNull(); 367 | bsLoadingOverlayServiceMock.verify(); 368 | }); 369 | 370 | it('should remove overlay element when timeout triggered on second stop', () => { 371 | template = '
'; 372 | bsLoadingOverlayServiceMock.expects('isActive').once().withArgs(referenceId).returns(true); 373 | bsLoadingOverlayServiceMock.expects('isActive').once().withArgs(referenceId).returns(false); 374 | bsLoadingOverlayServiceMock.expects('isActive').once().withArgs(referenceId).returns(true); 375 | bsLoadingOverlayServiceMock.expects('isActive').once().withArgs(referenceId).returns(false); 376 | 377 | const element = getCompiledElement(template, scope); 378 | 379 | $rootScope.$emit('bsLoadingOverlayUpdateEvent', { 380 | referenceId 381 | }); 382 | 383 | $timeout.flush(); 384 | 385 | $rootScope.$emit('bsLoadingOverlayUpdateEvent', { 386 | referenceId 387 | }); 388 | 389 | $rootScope.$emit('bsLoadingOverlayUpdateEvent', { 390 | referenceId 391 | }); 392 | 393 | $timeout.flush(); 394 | 395 | expect(element[0].querySelector('.bs-loading-overlay')).toBeNull(); 396 | bsLoadingOverlayServiceMock.verify(); 397 | }); 398 | 399 | it('should not call timeout if delay is not set', () => { 400 | template = '
'; 401 | bsLoadingOverlayServiceMock.expects('isActive').once().withArgs(referenceId).returns(true); 402 | bsLoadingOverlayServiceMock.expects('isActive').once().withArgs(referenceId).returns(false); 403 | 404 | const element = getCompiledElement(template, scope); 405 | 406 | $rootScope.$emit('bsLoadingOverlayUpdateEvent', { 407 | referenceId 408 | }); 409 | 410 | expect($timeout.called).toBeFalsy(); 411 | bsLoadingOverlayServiceMock.verify(); 412 | }); 413 | }); 414 | 415 | describe('with two loader overlays', () => { 416 | it('should be able to render two loaders with different templates and references', () => { 417 | $templateCache.put('some-template.html', '
'); 418 | $templateCache.put('some-another-template.html', '
'); 419 | template = '
'; 420 | const anotherTemplate = '
'; 421 | 422 | bsLoadingOverlayServiceMock.expects('isActive').once().withArgs(referenceId).returns(true); 423 | bsLoadingOverlayServiceMock.expects('isActive').once().withArgs('anotherreferenceId').returns(true); 424 | 425 | const element = getCompiledElement(template, scope); 426 | const anotherElement = getCompiledElement(anotherTemplate, scope); 427 | 428 | expect(element[0].querySelector('.from-template-url')).not.toBeNull(); 429 | expect(anotherElement[0].querySelector('.from-another-template-url')).not.toBeNull(); 430 | bsLoadingOverlayServiceMock.verify(); 431 | }); 432 | 433 | it('should be able to render and show two loaders with same referenceId and template', () => { 434 | $templateCache.put('some-template.html', '
'); 435 | template = '
'; 436 | 437 | bsLoadingOverlayServiceMock.expects('isActive').twice().withArgs(referenceId).returns(true); 438 | 439 | const element = getCompiledElement(template, scope); 440 | const anotherElement = getCompiledElement(template, scope); 441 | 442 | expect(element[0].querySelector('.from-template-url')).not.toBeNull(); 443 | expect(anotherElement[0].querySelector('.from-template-url')).not.toBeNull(); 444 | bsLoadingOverlayServiceMock.verify(); 445 | }); 446 | 447 | it('should be able to render two loaders with same referenceId but different templates', () => { 448 | $templateCache.put('some-template.html', '
'); 449 | $templateCache.put('some-another-template.html', '
'); 450 | template = '
'; 451 | const anotherTemplate = '
'; 452 | 453 | bsLoadingOverlayServiceMock.expects('isActive').twice().withArgs(referenceId).returns(true); 454 | 455 | const element = getCompiledElement(template, scope); 456 | const anotherElement = getCompiledElement(anotherTemplate, scope); 457 | 458 | expect(element[0].querySelector('.from-template-url')).not.toBeNull(); 459 | expect(anotherElement[0].querySelector('.from-another-template-url')).not.toBeNull(); 460 | bsLoadingOverlayServiceMock.verify(); 461 | }); 462 | 463 | it('should be able to render two loaders with different referenceId but same templates', () => { 464 | $templateCache.put('some-template.html', '
'); 465 | template = '
'; 466 | const anotherTemplate = '
'; 467 | 468 | bsLoadingOverlayServiceMock.expects('isActive').once().withArgs(referenceId).returns(true); 469 | bsLoadingOverlayServiceMock.expects('isActive').once().withArgs('anotherreferenceId').returns(true); 470 | 471 | const element = getCompiledElement(template, scope); 472 | const anotherElement = getCompiledElement(anotherTemplate, scope); 473 | 474 | expect(element[0].querySelector('.from-template-url')).not.toBeNull(); 475 | expect(anotherElement[0].querySelector('.from-template-url')).not.toBeNull(); 476 | bsLoadingOverlayServiceMock.verify(); 477 | }); 478 | 479 | it('should be able to render two loaders with different referenceId and templates then hide and show first', () => { 480 | $templateCache.put('some-template.html', '
'); 481 | $templateCache.put('some-another-template.html', '
'); 482 | template = '
'; 483 | const anotherTemplate = '
'; 484 | 485 | bsLoadingOverlayServiceMock.expects('isActive').once().withArgs(referenceId).returns(true); 486 | bsLoadingOverlayServiceMock.expects('isActive').once().withArgs(referenceId).returns(false); 487 | bsLoadingOverlayServiceMock.expects('isActive').once().withArgs(referenceId).returns(true); 488 | bsLoadingOverlayServiceMock.expects('isActive').once().withArgs('anotherreferenceId').returns(true); 489 | 490 | const element = getCompiledElement(template, scope); 491 | const anotherElement = getCompiledElement(anotherTemplate, scope); 492 | 493 | $rootScope.$emit('bsLoadingOverlayUpdateEvent', { 494 | referenceId 495 | }); 496 | 497 | scope.$apply(); 498 | 499 | $rootScope.$emit('bsLoadingOverlayUpdateEvent', { 500 | referenceId 501 | }); 502 | 503 | scope.$apply(); 504 | 505 | expect(element[0].querySelector('.from-template-url')).not.toBeNull(); 506 | expect(anotherElement[0].querySelector('.from-another-template-url')).not.toBeNull(); 507 | bsLoadingOverlayServiceMock.verify(); 508 | }); 509 | }); 510 | 511 | it('should remove overlay with provided templateUrl class if reference became inactive and update event emitted', () => { 512 | $templateCache.put('some-template.html', '
'); 513 | template = '
'; 514 | 515 | bsLoadingOverlayServiceMock.expects('isActive') 516 | .twice() 517 | .withArgs(referenceId) 518 | .onFirstCall() 519 | .returns(true) 520 | .onSecondCall() 521 | .returns(false); 522 | 523 | const element = getCompiledElement(template, scope); 524 | 525 | scope.$apply(() => { 526 | $rootScope.$emit('bsLoadingOverlayUpdateEvent', { 527 | referenceId 528 | }); 529 | }); 530 | 531 | expect(element[0].querySelector('.from-template-url')).toBeNull(); 532 | }); 533 | 534 | it('should add overlay class when reference is active', () => { 535 | bsLoadingOverlayServiceMock.expects('isActive').once().withArgs(referenceId).returns(true); 536 | 537 | const element = getCompiledElement(template, scope); 538 | 539 | expect(element.hasClass('bs-loading-overlay--active')).toBeTruthy(); 540 | }); 541 | 542 | it('should add overlay class when reference is active event if templateUrl is false', () => { 543 | defaultConfig.templateUrl = undefined; 544 | bsLoadingOverlayServiceMock.expects('isActive').once().withArgs(referenceId).returns(true); 545 | 546 | const element = getCompiledElement(template, scope); 547 | 548 | expect(element.hasClass('bs-loading-overlay--active')).toBeTruthy(); 549 | }); 550 | 551 | it('should not add overlay class when it is false in global config and not provided to directive', () => { 552 | defaultConfig.activeClass = undefined; 553 | bsLoadingOverlayServiceMock.expects('isActive').once().withArgs(referenceId).returns(true); 554 | 555 | const element = getCompiledElement(template, scope); 556 | 557 | expect(element.hasClass('bs-loading-overlay--active')).toBeFalsy(); 558 | }); 559 | 560 | it('should remove overlay class if reference became inactive and update event emitted', () => { 561 | bsLoadingOverlayServiceMock.expects('isActive') 562 | .twice() 563 | .withArgs(referenceId) 564 | .onFirstCall() 565 | .returns(true) 566 | .onSecondCall() 567 | .returns(false); 568 | 569 | const element = getCompiledElement(template, scope); 570 | 571 | scope.$apply(() => { 572 | $rootScope.$emit('bsLoadingOverlayUpdateEvent', { 573 | referenceId 574 | }); 575 | }); 576 | 577 | expect(element.hasClass('bs-loading-overlay--active')).toBeFalsy(); 578 | }); 579 | 580 | it('should remove overlay class if reference became inactive and update event emitted and templateUrl is false', () => { 581 | defaultConfig.templateUrl = undefined; 582 | bsLoadingOverlayServiceMock.expects('isActive') 583 | .twice() 584 | .withArgs(referenceId) 585 | .onFirstCall() 586 | .returns(true) 587 | .onSecondCall() 588 | .returns(false); 589 | 590 | const element = getCompiledElement(template, scope); 591 | 592 | scope.$apply(() => { 593 | $rootScope.$emit('bsLoadingOverlayUpdateEvent', { 594 | referenceId 595 | }); 596 | }); 597 | 598 | expect(element.hasClass('bs-loading-overlay--active')).toBeFalsy(); 599 | }); 600 | 601 | describe('with custom class', () => { 602 | beforeEach(() => { 603 | template = '
'; 604 | }); 605 | 606 | it('should add overlay custom class when reference is active', () => { 607 | bsLoadingOverlayServiceMock.expects('isActive').once().withArgs(referenceId).returns(true); 608 | 609 | const element = getCompiledElement(template, scope); 610 | 611 | expect(element.hasClass('some-active-class')).toBeTruthy(); 612 | }); 613 | 614 | it('should remove overlay custom class if reference became inactive and update event emitted', () => { 615 | bsLoadingOverlayServiceMock.expects('isActive') 616 | .twice() 617 | .withArgs(referenceId) 618 | .onFirstCall() 619 | .returns(true) 620 | .onSecondCall() 621 | .returns(false); 622 | 623 | const element = getCompiledElement(template, scope); 624 | 625 | scope.$apply(() => { 626 | $rootScope.$emit('bsLoadingOverlayUpdateEvent', { 627 | referenceId 628 | }); 629 | }); 630 | 631 | expect(element.hasClass('some-active-class')).toBeFalsy(); 632 | }); 633 | }); 634 | 635 | it('should remove overlay if reference became inactive and update event emitted', () => { 636 | bsLoadingOverlayServiceMock.expects('isActive') 637 | .twice() 638 | .withArgs(referenceId) 639 | .onFirstCall() 640 | .returns(true) 641 | .onSecondCall() 642 | .returns(false); 643 | 644 | const element = getCompiledElement(template, scope); 645 | scope.$apply(() => { 646 | $rootScope.$emit('bsLoadingOverlayUpdateEvent', { 647 | referenceId 648 | }); 649 | }); 650 | 651 | expect(element[0].querySelector('.bs-loading-overlay')).toBeNull(); 652 | }); 653 | 654 | it('should not remove overlay if reference became inactive and update event is not emitted', () => { 655 | bsLoadingOverlayServiceMock.expects('isActive') 656 | .twice() 657 | .withArgs(referenceId) 658 | .onFirstCall() 659 | .returns(true); 660 | 661 | const element = getCompiledElement(template, scope); 662 | 663 | expect(element[0].querySelector('.bs-loading-overlay')).not.toBeNull(); 664 | }); 665 | 666 | it('should add overlay when rootScope event triggered and reference become active', () => { 667 | bsLoadingOverlayServiceMock.expects('isActive').once().withArgs(referenceId).returns(false); 668 | 669 | const element = getCompiledElement(template, scope); 670 | 671 | bsLoadingOverlayServiceMock.expects('isActive').once().withArgs(referenceId).returns(true); 672 | $rootScope.$emit('bsLoadingOverlayUpdateEvent', { 673 | referenceId 674 | }); 675 | 676 | expect(element[0].querySelector('.bs-loading-overlay')).not.toBeNull(); 677 | bsLoadingOverlayServiceMock.verify(); 678 | }); 679 | 680 | it('should not add overlay when reference become active but rootScope event is not triggered', () => { 681 | const element = getCompiledElement(template, scope); 682 | 683 | bsLoadingOverlayServiceMock.expects('isActive').once().withArgs(referenceId).returns(true); 684 | 685 | expect(element[0].querySelector('.bs-loading-overlay')).toBeNull(); 686 | }); 687 | 688 | it('should remove rootScope listener on overlay element removed', () => { 689 | const element = getCompiledElement(template, scope); 690 | 691 | scope.$apply(() => { 692 | element.remove(); 693 | }); 694 | 695 | expect($rootScope.$$listeners.bsLoadingOverlayUpdateEvent[0]).toBeNull(); 696 | }); 697 | 698 | it('should not add overlay when rootScope event triggered for another reference', () => { 699 | bsLoadingOverlayServiceMock.expects('isActive').once().withArgs(referenceId).returns(false); 700 | 701 | const element = getCompiledElement(template, scope); 702 | 703 | $rootScope.$emit('bsLoadingOverlayUpdateEvent', { 704 | referenceId: 'another' 705 | }); 706 | 707 | expect(element[0].querySelector('.bs-loading-overlay')).toBeNull(); 708 | bsLoadingOverlayServiceMock.verify(); 709 | }); 710 | 711 | it('should add overlay when it was configured without referenceId and rootScope event triggered with referenceId undefined', () => { 712 | template = '
'; 713 | bsLoadingOverlayServiceMock.expects('isActive').once().withArgs(undefined).returns(false); 714 | 715 | const element = getCompiledElement(template, scope); 716 | 717 | bsLoadingOverlayServiceMock.expects('isActive').once().withArgs(undefined).returns(true); 718 | $rootScope.$emit('bsLoadingOverlayUpdateEvent', { 719 | referenceId: undefined 720 | }); 721 | 722 | expect(element[0].querySelector('.bs-loading-overlay')).not.toBeNull(); 723 | bsLoadingOverlayServiceMock.verify(); 724 | }); 725 | }); 726 | -------------------------------------------------------------------------------- /source/BsLoadingOverlayDirective.ts: -------------------------------------------------------------------------------- 1 | import * as angular from 'angular'; 2 | import IBsLoadingOverlayOptions from './IBsLoadingOverlayOptions'; 3 | import BsLoadingOverlayInstance from './BsLoadingOverlayInstance'; 4 | import {BsLoadingOverlayService} from './BsLoadingOverlayService'; 5 | 6 | interface BsLoadingOverlayDirectiveAttributes extends angular.IAttributes { 7 | bsLoadingOverlayReferenceId: string; 8 | bsLoadingOverlay: string; 9 | bsLoadingOverlayDelay: number; 10 | bsLoadingOverlayActiveClass: string; 11 | bsLoadingOverlayTemplateUrl: string; 12 | bsLoadingOverlayTemplateOptions: any; 13 | } 14 | 15 | interface BsLoadingOverlayDirectiveScope extends angular.IScope { 16 | bsLoadingOverlayTemplateOptions: any; 17 | } 18 | 19 | export default class BsLoadingOverlayDirective implements angular.IDirective { 20 | constructor( 21 | private $compile: angular.ICompileService, 22 | private $rootScope: angular.IRootScopeService, 23 | private $templateRequest: angular.ITemplateRequestService, 24 | private $q: angular.IQService, 25 | private $timeout: angular.ITimeoutService, 26 | private bsLoadingOverlayService: BsLoadingOverlayService 27 | ) {} 28 | 29 | private updateOverlayElement(overlayInstance: BsLoadingOverlayInstance) { 30 | if (this.bsLoadingOverlayService.isActive(overlayInstance.referenceId)) { 31 | overlayInstance.add(); 32 | } else { 33 | overlayInstance.remove(); 34 | } 35 | }; 36 | 37 | restrict = 'EA'; 38 | link: angular.IDirectiveLinkFn = (scope: BsLoadingOverlayDirectiveScope, $element: angular.IAugmentedJQuery, $attributes: BsLoadingOverlayDirectiveAttributes) => { 39 | let templatePromise: angular.IPromise; 40 | let overlayElementScope: BsLoadingOverlayDirectiveScope; 41 | const globalConfig = this.bsLoadingOverlayService.getGlobalConfig(); 42 | const templateUrl = $attributes.bsLoadingOverlayTemplateUrl || globalConfig.templateUrl; 43 | const templateOptions = scope.$eval($attributes.bsLoadingOverlayTemplateOptions) || globalConfig.templateOptions; 44 | 45 | let overlayElement = null; 46 | 47 | if (templateUrl) { 48 | templatePromise = this.$templateRequest(templateUrl); 49 | } else { 50 | templatePromise = this.$q.reject(); 51 | } 52 | 53 | templatePromise.then((loadedTemplate: string) => { 54 | overlayElementScope = scope.$new(); 55 | overlayElementScope.bsLoadingOverlayTemplateOptions = templateOptions; 56 | overlayElement = this.$compile(loadedTemplate)(overlayElementScope); 57 | overlayElement.data('isAttached', false); 58 | }).finally(() => { 59 | const overlayInstance = new BsLoadingOverlayInstance( 60 | $attributes.bsLoadingOverlayReferenceId || ($attributes.bsLoadingOverlay === '' ? undefined : $attributes.bsLoadingOverlay), 61 | +$attributes.bsLoadingOverlayDelay || globalConfig.delay, 62 | $attributes.bsLoadingOverlayActiveClass || globalConfig.activeClass, 63 | $element, 64 | overlayElement, 65 | this.$timeout, 66 | this.$q 67 | ); 68 | 69 | const unsubscribe = this.$rootScope.$on( 70 | 'bsLoadingOverlayUpdateEvent', 71 | (event: angular.IAngularEvent, options: IBsLoadingOverlayOptions) => { 72 | if (options.referenceId === overlayInstance.referenceId) { 73 | this.updateOverlayElement(overlayInstance); 74 | } 75 | } 76 | ); 77 | 78 | $element.on('$destroy', () => { 79 | overlayElementScope.$destroy(); 80 | unsubscribe(); 81 | }); 82 | this.updateOverlayElement(overlayInstance); 83 | }); 84 | } 85 | } 86 | 87 | export const BsLoadingOverlayDirectiveFactory: angular.IDirectiveFactory = ( 88 | $compile: angular.ICompileService, 89 | $rootScope: angular.IRootScopeService, 90 | $templateRequest: angular.ITemplateRequestService, 91 | $q: angular.IQService, 92 | $timeout: angular.ITimeoutService, 93 | bsLoadingOverlayService: BsLoadingOverlayService 94 | ) => ( 95 | new BsLoadingOverlayDirective( 96 | $compile, 97 | $rootScope, 98 | $templateRequest, 99 | $q, 100 | $timeout, 101 | bsLoadingOverlayService 102 | ) 103 | ); 104 | 105 | BsLoadingOverlayDirectiveFactory.$inject = [ 106 | '$compile', 107 | '$rootScope', 108 | '$templateRequest', 109 | '$q', 110 | '$timeout', 111 | 'bsLoadingOverlayService' 112 | ]; 113 | -------------------------------------------------------------------------------- /source/BsLoadingOverlayInstance.ts: -------------------------------------------------------------------------------- 1 | import * as angular from 'angular'; 2 | export default class BsLoadingOverlayInstance { 3 | private delayPromise: angular.IPromise; 4 | 5 | constructor( 6 | public referenceId: string, 7 | public delay: number, 8 | public activeClass: string, 9 | public $element: angular.IAugmentedJQuery, 10 | public overlayElement: angular.IAugmentedJQuery, 11 | private $timeout, 12 | private $q 13 | ) {} 14 | 15 | private isAdded() { 16 | return !!this.delayPromise; 17 | } 18 | 19 | public add() { 20 | if (this.delay) { 21 | if (this.delayPromise) { 22 | this.$timeout.cancel(this.delayPromise); 23 | } 24 | this.delayPromise = this.$timeout(angular.noop, this.delay); 25 | } else { 26 | this.delayPromise = this.$q.when(); 27 | } 28 | 29 | if (this.overlayElement && !this.overlayElement.data('isAttached')) { 30 | this.$element.append(this.overlayElement); 31 | this.overlayElement.data('isAttached', true); 32 | } 33 | 34 | this.$element.addClass(this.activeClass); 35 | }; 36 | 37 | public remove() { 38 | if (this.isAdded()) { 39 | this.delayPromise.then(() => { 40 | if (this.overlayElement && this.overlayElement.data('isAttached')) { 41 | this.overlayElement.data('isAttached', false); 42 | this.overlayElement.detach(); 43 | } 44 | 45 | this.$element.removeClass(this.activeClass); 46 | this.delayPromise = undefined; 47 | }); 48 | } 49 | }; 50 | } 51 | -------------------------------------------------------------------------------- /source/BsLoadingOverlayModule.ts: -------------------------------------------------------------------------------- 1 | import * as angular from 'angular'; 2 | import {BsLoadingOverlayDirectiveFactory} from './BsLoadingOverlayDirective'; 3 | import BsLoadingOverlayService from './BsLoadingOverlayService'; 4 | 5 | export default angular.module('bsLoadingOverlay', []) 6 | .directive('bsLoadingOverlay', BsLoadingOverlayDirectiveFactory) 7 | .factory('bsLoadingOverlayService', BsLoadingOverlayService); 8 | -------------------------------------------------------------------------------- /source/BsLoadingOverlayService.spec.ts: -------------------------------------------------------------------------------- 1 | import * as angular from 'angular'; 2 | import * as sinon from 'sinon'; 3 | 4 | import BsLoadingOverlayModule from './BsLoadingOverlayModule'; 5 | import {BsLoadingOverlayService} from './BsLoadingOverlayService'; 6 | 7 | declare const ngDescribe: (testDescriptions: any) => void; 8 | 9 | ngDescribe({ 10 | name: 'bsLoadingOverlayService interface', 11 | modules: BsLoadingOverlayModule.name, 12 | inject: ['$rootScope', 'bsLoadingOverlayService', '$q'], 13 | tests: function(dependencies: { 14 | bsLoadingOverlayService: BsLoadingOverlayService, 15 | $rootScope: angular.IRootScopeService, 16 | $q: angular.IQService 17 | }) { 18 | it('should exist', () => { 19 | expect(dependencies.bsLoadingOverlayService).toBeDefined(); 20 | }); 21 | 22 | describe('handlers', () => { 23 | let overlayHandler, 24 | referenceId; 25 | 26 | beforeEach(() => { 27 | referenceId = 'referenceId'; 28 | overlayHandler = dependencies.bsLoadingOverlayService.createHandler({ 29 | referenceId 30 | }); 31 | }); 32 | 33 | it('should emit rootScope event on start with referenceId in options', (done) => { 34 | dependencies.$rootScope.$on('bsLoadingOverlayUpdateEvent', (event, options) => { 35 | expect(options.referenceId).toEqual(referenceId); 36 | done(); 37 | }); 38 | 39 | overlayHandler.start(); 40 | }); 41 | 42 | it('should emit rootScope event on stop with referenceId in options', (done) => { 43 | dependencies.$rootScope.$on('bsLoadingOverlayUpdateEvent', (event, options) => { 44 | expect(options.referenceId).toEqual(referenceId); 45 | done(); 46 | }); 47 | 48 | overlayHandler.stop(); 49 | }); 50 | }); 51 | 52 | describe('wrapper', () => { 53 | let overlayHandler, 54 | referenceId, 55 | func1, 56 | func2, 57 | func1Spy, 58 | func2Spy, 59 | startSpy, 60 | stopSpy, 61 | t; 62 | 63 | beforeEach(() => { 64 | referenceId = 'referenceId'; 65 | 66 | func1 = () => { 67 | return dependencies.$q.when(1); 68 | }; 69 | 70 | func2 = () => { 71 | return dependencies.$q.when(2); 72 | }; 73 | t = { 74 | func1: func1, 75 | func2: func2 76 | }; 77 | func1Spy = sinon.spy(t, 'func1'); 78 | func2Spy = sinon.spy(t, 'func2'); 79 | startSpy = sinon.spy(dependencies.bsLoadingOverlayService, 'start'); 80 | stopSpy = sinon.spy(dependencies.bsLoadingOverlayService, 'stop'); 81 | }); 82 | 83 | it('should wrap provided function returning promise in start and stop functions', () => { 84 | dependencies.$rootScope.$apply(() => { 85 | dependencies.bsLoadingOverlayService.wrap({ 86 | referenceId 87 | }, () => { 88 | return t.func1().then(t.func2); 89 | }); 90 | }); 91 | 92 | expect(startSpy.calledBefore(func1Spy)).toBeTruthy(); 93 | expect(func1Spy.calledBefore(func2Spy)).toBeTruthy(); 94 | expect(func2Spy.calledBefore(stopSpy)).toBeTruthy(); 95 | expect(stopSpy.called).toBeTruthy(); 96 | }); 97 | 98 | it('should wrap provided promise in start and stop functions', () => { 99 | dependencies.$rootScope.$apply(() => { 100 | dependencies.bsLoadingOverlayService.wrap({ 101 | referenceId 102 | }, t.func1().then(t.func2)); 103 | }); 104 | 105 | expect(startSpy.calledBefore(stopSpy)).toBeTruthy(); 106 | expect(func1Spy.calledBefore(func2Spy)).toBeTruthy(); 107 | expect(func2Spy.calledBefore(stopSpy)).toBeTruthy(); 108 | expect(stopSpy.called).toBeTruthy(); 109 | }); 110 | 111 | it('should hide overlay if provided promise failed', () => { 112 | dependencies.$rootScope.$apply(() => { 113 | dependencies.bsLoadingOverlayService.wrap({ 114 | referenceId 115 | }, () => { 116 | return dependencies.$q.reject(); 117 | }); 118 | }); 119 | 120 | expect(stopSpy.called).toBeTruthy(); 121 | }); 122 | }); 123 | 124 | describe('global config', () => { 125 | it('should be able to set and get global config', () => { 126 | const config = { 127 | option1: 1, 128 | option2: 2 129 | }; 130 | 131 | dependencies.bsLoadingOverlayService.setGlobalConfig(config); 132 | 133 | expect(dependencies.bsLoadingOverlayService.getGlobalConfig()).toEqual(config); 134 | }); 135 | 136 | it('should return global empty object as global config by default', () => { 137 | expect(dependencies.bsLoadingOverlayService.getGlobalConfig()).toEqual({}); 138 | }); 139 | 140 | it('should extend global config', () => { 141 | const config = { 142 | option1: 1, 143 | option2: 2 144 | }; 145 | 146 | const extendedConfig = { 147 | option1: 1, 148 | option2: 2, 149 | templateUrl: 'templateUrl' 150 | }; 151 | 152 | dependencies.bsLoadingOverlayService.setGlobalConfig(config); 153 | dependencies.bsLoadingOverlayService.setGlobalConfig({ 154 | templateUrl: 'templateUrl' 155 | }); 156 | 157 | expect(dependencies.bsLoadingOverlayService.getGlobalConfig()).toEqual(extendedConfig); 158 | }); 159 | }); 160 | 161 | describe('handler wrapper', () => { 162 | let overlayHandler, 163 | referenceId, 164 | func1, 165 | func2, 166 | func1Spy, 167 | func2Spy, 168 | startSpy, 169 | stopSpy, 170 | t, 171 | handler; 172 | 173 | beforeEach(() => { 174 | referenceId = 'referenceId'; 175 | 176 | func1 = () => { 177 | return dependencies.$q.when(1); 178 | }; 179 | 180 | func2 = () => { 181 | return dependencies.$q.when(2); 182 | }; 183 | t = { 184 | func1: func1, 185 | func2: func2 186 | }; 187 | func1Spy = sinon.spy(t, 'func1'); 188 | func2Spy = sinon.spy(t, 'func2'); 189 | handler = dependencies.bsLoadingOverlayService.createHandler({ 190 | referenceId 191 | }); 192 | 193 | startSpy = sinon.spy(dependencies.bsLoadingOverlayService, 'start'); 194 | stopSpy = sinon.spy(dependencies.bsLoadingOverlayService, 'stop'); 195 | }); 196 | 197 | it('should wrap provided function returning promise in start and stop functions', () => { 198 | dependencies.$rootScope.$apply(() => { 199 | handler.wrap(() => { 200 | return t.func1().then(t.func2); 201 | }); 202 | }); 203 | 204 | expect(startSpy.calledBefore(func1Spy)).toBeTruthy(); 205 | expect(func1Spy.calledBefore(func2Spy)).toBeTruthy(); 206 | expect(func2Spy.calledBefore(stopSpy)).toBeTruthy(); 207 | expect(stopSpy.called).toBeTruthy(); 208 | }); 209 | 210 | it('should wrap provided promise in start and stop functions', () => { 211 | dependencies.$rootScope.$apply(() => { 212 | handler.wrap(t.func1().then(t.func2), { 213 | referenceId 214 | }); 215 | }); 216 | 217 | expect(startSpy.calledBefore(stopSpy)).toBeTruthy(); 218 | expect(func1Spy.calledBefore(func2Spy)).toBeTruthy(); 219 | expect(func2Spy.calledBefore(stopSpy)).toBeTruthy(); 220 | expect(stopSpy.called).toBeTruthy(); 221 | }); 222 | 223 | it('should hide overlay if provided promise failed', () => { 224 | dependencies.$rootScope.$apply(() => { 225 | handler.wrap(() => { 226 | return dependencies.$q.reject(); 227 | }); 228 | }); 229 | 230 | expect(stopSpy.called).toBeTruthy(); 231 | }); 232 | }); 233 | 234 | describe('without referenceId', () => { 235 | it('should emit rootScope event on start', (done) => { 236 | dependencies.$rootScope.$on('bsLoadingOverlayUpdateEvent', () => { 237 | done(); 238 | }); 239 | 240 | dependencies.bsLoadingOverlayService.start(); 241 | }); 242 | 243 | it('should indicate that loadingOverlay is active after start', () => { 244 | dependencies.bsLoadingOverlayService.start(); 245 | 246 | expect(dependencies.bsLoadingOverlayService.isActive()).toBeTruthy(); 247 | }); 248 | 249 | it('should indicate that loadingOverlay is not active by default', () => { 250 | expect(dependencies.bsLoadingOverlayService.isActive()).toBeFalsy(); 251 | }); 252 | 253 | it('should indicate that loadingOverlay is not active after stop', () => { 254 | dependencies.bsLoadingOverlayService.start(); 255 | dependencies.bsLoadingOverlayService.stop(); 256 | 257 | expect(dependencies.bsLoadingOverlayService.isActive()).toBeFalsy(); 258 | }); 259 | 260 | it('should emit rootScope event on stop', (done) => { 261 | dependencies.$rootScope.$on('bsLoadingOverlayUpdateEvent', () => { 262 | done(); 263 | }); 264 | 265 | dependencies.bsLoadingOverlayService.stop(); 266 | }); 267 | }); 268 | 269 | describe('with referenceId', () => { 270 | let referenceId; 271 | beforeEach(() => { 272 | referenceId = 'referenceId'; 273 | }); 274 | 275 | it('should emit rootScope event on start', (done) => { 276 | dependencies.$rootScope.$on('bsLoadingOverlayUpdateEvent', () => { 277 | done(); 278 | }); 279 | 280 | dependencies.bsLoadingOverlayService.start({ 281 | referenceId 282 | }); 283 | }); 284 | 285 | it('should emit rootScope event on stop', (done) => { 286 | dependencies.$rootScope.$on('bsLoadingOverlayUpdateEvent', () => { 287 | done(); 288 | }); 289 | 290 | dependencies.bsLoadingOverlayService.stop({ 291 | referenceId 292 | }); 293 | }); 294 | 295 | it('should emit rootScope event on start with referenceId in options', (done) => { 296 | dependencies.$rootScope.$on('bsLoadingOverlayUpdateEvent', (event, options) => { 297 | expect(options.referenceId).toEqual(referenceId); 298 | done(); 299 | }); 300 | 301 | dependencies.bsLoadingOverlayService.start({ 302 | referenceId 303 | }); 304 | }); 305 | 306 | it('should emit rootScope event on stop with referenceId in options', (done) => { 307 | dependencies.$rootScope.$on('bsLoadingOverlayUpdateEvent', (event, options) => { 308 | expect(options.referenceId).toEqual(referenceId); 309 | done(); 310 | }); 311 | 312 | dependencies.bsLoadingOverlayService.stop({ 313 | referenceId 314 | }); 315 | }); 316 | 317 | it('should not make other references active on start', () => { 318 | dependencies.bsLoadingOverlayService.start({ 319 | referenceId 320 | }); 321 | 322 | expect(dependencies.bsLoadingOverlayService.isActive('otherReference')).toBeFalsy(); 323 | }); 324 | 325 | it('should not be marked as active on other reference start', () => { 326 | dependencies.bsLoadingOverlayService.start({ 327 | referenceId: 'otherReference' 328 | }); 329 | 330 | expect(dependencies.bsLoadingOverlayService.isActive(referenceId)).toBeFalsy(); 331 | }); 332 | 333 | it('should not stop other references on stop', () => { 334 | dependencies.bsLoadingOverlayService.start({ 335 | referenceId 336 | }); 337 | 338 | dependencies.bsLoadingOverlayService.start({ 339 | referenceId: 'otherReference' 340 | }); 341 | 342 | dependencies.bsLoadingOverlayService.stop({ 343 | referenceId 344 | }); 345 | 346 | expect(dependencies.bsLoadingOverlayService.isActive('otherReference')).toBeTruthy(); 347 | }); 348 | 349 | it('should indicate that loadingOverlay is active after start', () => { 350 | dependencies.bsLoadingOverlayService.start({ 351 | referenceId 352 | }); 353 | 354 | expect(dependencies.bsLoadingOverlayService.isActive(referenceId)).toBeTruthy(); 355 | }); 356 | 357 | it('should indicate that loadingOverlay is not active by default', () => { 358 | expect(dependencies.bsLoadingOverlayService.isActive(referenceId)).toBeFalsy(); 359 | }); 360 | 361 | it('should indicate that loadingOverlay is not active after stop', () => { 362 | dependencies.bsLoadingOverlayService.start({ 363 | referenceId 364 | }); 365 | dependencies.bsLoadingOverlayService.stop({ 366 | referenceId 367 | }); 368 | 369 | expect(dependencies.bsLoadingOverlayService.isActive(referenceId)).toBeFalsy(); 370 | }); 371 | }); 372 | 373 | } 374 | }); 375 | -------------------------------------------------------------------------------- /source/BsLoadingOverlayService.ts: -------------------------------------------------------------------------------- 1 | import * as angular from 'angular'; 2 | import IBsLoadingOverlayOptions from './IBsLoadingOverlayOptions'; 3 | import IBsLoadingOverlayHandler from './IBsLoadingOverlayHandler'; 4 | 5 | export class BsLoadingOverlayService { 6 | constructor( 7 | private $rootScope: angular.IRootScopeService, 8 | private $q: angular.IQService 9 | ) { } 10 | 11 | globalConfig: IBsLoadingOverlayOptions = {}; 12 | activeOverlays: { [key: string]: boolean } = {}; 13 | 14 | start(options: IBsLoadingOverlayOptions = {}) { 15 | this.activeOverlays[options.referenceId] = true; 16 | this.notifyOverlays(options.referenceId); 17 | } 18 | 19 | wrap(options: IBsLoadingOverlayOptions, promiseFunction: angular.IPromise | (() => (angular.IPromise | {}))): angular.IPromise { 20 | let promise: () => (angular.IPromise | {}); 21 | 22 | if (typeof promiseFunction === 'function') { 23 | promise = <() => angular.IPromise>promiseFunction; 24 | } else { 25 | promise = () => promiseFunction; 26 | } 27 | 28 | return this.$q.when(this.start(options)) 29 | .then(promise) 30 | .finally(this.stop.bind(this, options)); 31 | } 32 | 33 | createHandler = (options: IBsLoadingOverlayOptions): IBsLoadingOverlayHandler => ({ 34 | start: this.start.bind(this, options), 35 | stop: this.stop.bind(this, options), 36 | wrap: this.wrap.bind(this, options) 37 | }) 38 | 39 | notifyOverlays(referenceId: string) { 40 | this.$rootScope.$emit('bsLoadingOverlayUpdateEvent', { 41 | referenceId: referenceId 42 | }); 43 | } 44 | 45 | stop(options: IBsLoadingOverlayOptions = {}) { 46 | delete this.activeOverlays[options.referenceId]; 47 | this.notifyOverlays(options.referenceId); 48 | } 49 | 50 | isActive = (referenceId: string = undefined) => this.activeOverlays[referenceId]; 51 | setGlobalConfig = (options: IBsLoadingOverlayOptions) => angular.extend(this.globalConfig, options); 52 | getGlobalConfig = () => this.globalConfig; 53 | } 54 | 55 | const bsLoadingOverlayServiceFactory = ($rootScope: angular.IRootScopeService, $q: angular.IQService) => new BsLoadingOverlayService($rootScope, $q); 56 | bsLoadingOverlayServiceFactory.$inject = ['$rootScope', '$q']; 57 | 58 | export default bsLoadingOverlayServiceFactory; 59 | -------------------------------------------------------------------------------- /source/IBsLoadingOverlayHandler.ts: -------------------------------------------------------------------------------- 1 | import * as angular from 'angular'; 2 | interface IBsLoadingOverlayHandler { 3 | start: () => void; 4 | stop: () => void; 5 | wrap: (promiseFunction: angular.IPromise | (() => (angular.IPromise | {}))) => angular.IPromise; 6 | } 7 | 8 | export default IBsLoadingOverlayHandler; 9 | -------------------------------------------------------------------------------- /source/IBsLoadingOverlayOptions.ts: -------------------------------------------------------------------------------- 1 | interface IBsLoadingOverlayOptions { 2 | referenceId?: string; 3 | templateUrl?: string; 4 | templateOptions?: any; 5 | activeClass?: string; 6 | delay?: number; 7 | } 8 | 9 | export default IBsLoadingOverlayOptions; 10 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "es5", 4 | "sourceMap": true, 5 | "declaration": true 6 | }, 7 | "compileOnSave": false, 8 | "filesGlob": [ 9 | "typings/index.d.ts", 10 | "source/**/*.ts" 11 | ], 12 | "exclude": [ 13 | "node_modules" 14 | ], 15 | "atom": { 16 | "rewriteTsconfig": true 17 | }, 18 | "files": [ 19 | "source/BsLoadingOverlayDirective.spec.ts", 20 | "source/BsLoadingOverlayDirective.ts", 21 | "source/BsLoadingOverlayInstance.ts", 22 | "source/BsLoadingOverlayModule.ts", 23 | "source/BsLoadingOverlayService.spec.ts", 24 | "source/BsLoadingOverlayService.ts", 25 | "source/IBsLoadingOverlayHandler.ts", 26 | "source/IBsLoadingOverlayOptions.ts" 27 | ] 28 | } 29 | -------------------------------------------------------------------------------- /tslint.json: -------------------------------------------------------------------------------- 1 | { 2 | "rules": { 3 | "class-name": true, 4 | "comment-format": [ 5 | true, 6 | "check-space" 7 | ], 8 | "indent": [ 9 | true, 10 | "spaces" 11 | ], 12 | "no-duplicate-variable": true, 13 | "no-eval": true, 14 | "no-internal-module": true, 15 | "no-trailing-whitespace": true, 16 | "no-var-keyword": true, 17 | "curly": true, 18 | "no-console": true, 19 | "no-debugger": true, 20 | "no-duplicate-variable": true, 21 | "no-require-imports": true, 22 | "one-line": [ 23 | true, 24 | "check-open-brace", 25 | "check-whitespace" 26 | ], 27 | "quotemark": [ 28 | true, 29 | "single" 30 | ], 31 | "semicolon": [ 32 | true, 33 | "always" 34 | ], 35 | "triple-equals": [ 36 | true, 37 | "allow-null-check" 38 | ], 39 | "typedef-whitespace": [ 40 | true, 41 | { 42 | "call-signature": "nospace", 43 | "index-signature": "nospace", 44 | "parameter": "nospace", 45 | "property-declaration": "nospace", 46 | "variable-declaration": "nospace" 47 | } 48 | ], 49 | "variable-name": [ 50 | true, 51 | "ban-keywords" 52 | ], 53 | "whitespace": [ 54 | true, 55 | "check-branch", 56 | "check-decl", 57 | "check-operator", 58 | "check-separator", 59 | "check-type" 60 | ] 61 | } 62 | } 63 | -------------------------------------------------------------------------------- /webpack.config.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Webpack development server configuration 3 | * 4 | * This file is set up for serving the webpack-dev-server, which will watch for changes and recompile as required if 5 | * the subfolder /webpack-dev-server/ is visited. Visiting the root will not automatically reload. 6 | */ 7 | 8 | 'use strict'; 9 | var webpack = require('webpack'); 10 | var path = require('path'); 11 | var fs = require('fs'); 12 | 13 | module.exports = { 14 | 15 | output: { 16 | filename: './dist/angular-loading-overlay.js', 17 | publicPath: './dist/' 18 | }, 19 | 20 | devServer: { 21 | hot: true, 22 | port: 8000, 23 | publicPath: '/assets/', 24 | contentBase: './source/' 25 | }, 26 | 27 | entry: './source/BsLoadingOverlayModule.ts', 28 | stats: { 29 | colors: true, 30 | reasons: true 31 | }, 32 | externals: { 33 | "angular": "angular" 34 | }, 35 | resolve: { 36 | extensions: ['', '.ts', '.js'] 37 | }, 38 | module: { 39 | preLoaders: [{ 40 | test: /\.ts$/, 41 | exclude: /node_modules/, 42 | loader: 'tslint-loader' 43 | }], 44 | loaders: [{ 45 | test: /\.ts$/, 46 | exclude: /node_modules/, 47 | loader: 'ts-loader' 48 | }] 49 | } 50 | }; 51 | -------------------------------------------------------------------------------- /yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "@types/angular-mocks@^0.0.0": 6 | version "0.0.0" 7 | resolved "https://registry.yarnpkg.com/@types/angular-mocks/-/angular-mocks-0.0.0.tgz#2ebd4ccc55276267abb6abc81a889f5f4433d1f6" 8 | dependencies: 9 | "@types/angular" "*" 10 | 11 | "@types/angular@*", "@types/angular@^1.5.20": 12 | version "1.5.20" 13 | resolved "https://registry.yarnpkg.com/@types/angular/-/angular-1.5.20.tgz#e1b38a93ab238d68b03e2ff69f0e193212d103d8" 14 | dependencies: 15 | "@types/jquery" "*" 16 | 17 | "@types/jasmine@^2.5.38": 18 | version "2.5.38" 19 | resolved "https://registry.yarnpkg.com/@types/jasmine/-/jasmine-2.5.38.tgz#a4379124c4921d4e21de54ec74669c9e9b356717" 20 | 21 | "@types/jquery@*", "@types/jquery@^2.0.34": 22 | version "2.0.34" 23 | resolved "https://registry.yarnpkg.com/@types/jquery/-/jquery-2.0.34.tgz#27615b369f30e572336126514e74672dda6e3d04" 24 | 25 | "@types/sinon@^1.16.32": 26 | version "1.16.32" 27 | resolved "https://registry.yarnpkg.com/@types/sinon/-/sinon-1.16.32.tgz#b3246844902d7cb33f376b369b176a65a144af7e" 28 | 29 | Base64@~0.2.0: 30 | version "0.2.1" 31 | resolved "https://registry.yarnpkg.com/Base64/-/Base64-0.2.1.tgz#ba3a4230708e186705065e66babdd4c35cf60028" 32 | 33 | abbrev@1, abbrev@1.0.x: 34 | version "1.0.9" 35 | resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.0.9.tgz#91b4792588a7738c25f35dd6f63752a2f8776135" 36 | 37 | accepts@1.1.4: 38 | version "1.1.4" 39 | resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.1.4.tgz#d71c96f7d41d0feda2c38cd14e8a27c04158df4a" 40 | dependencies: 41 | mime-types "~2.0.4" 42 | negotiator "0.4.9" 43 | 44 | accepts@~1.3.3: 45 | version "1.3.3" 46 | resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.3.tgz#c3ca7434938648c3e0d9c1e328dd68b622c284ca" 47 | dependencies: 48 | mime-types "~2.1.11" 49 | negotiator "0.6.1" 50 | 51 | acorn@^3.0.0: 52 | version "3.3.0" 53 | resolved "https://registry.yarnpkg.com/acorn/-/acorn-3.3.0.tgz#45e37fb39e8da3f25baee3ff5369e2bb5f22017a" 54 | 55 | after@0.8.1: 56 | version "0.8.1" 57 | resolved "https://registry.yarnpkg.com/after/-/after-0.8.1.tgz#ab5d4fb883f596816d3515f8f791c0af486dd627" 58 | 59 | agent-base@2: 60 | version "2.0.1" 61 | resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-2.0.1.tgz#bd8f9e86a8eb221fffa07bd14befd55df142815e" 62 | dependencies: 63 | extend "~3.0.0" 64 | semver "~5.0.1" 65 | 66 | align-text@^0.1.1, align-text@^0.1.3: 67 | version "0.1.4" 68 | resolved "https://registry.yarnpkg.com/align-text/-/align-text-0.1.4.tgz#0cd90a561093f35d0a99256c22b7069433fad117" 69 | dependencies: 70 | kind-of "^3.0.2" 71 | longest "^1.0.1" 72 | repeat-string "^1.5.2" 73 | 74 | amdefine@>=0.0.4: 75 | version "1.0.1" 76 | resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" 77 | 78 | angular-mocks@^1.5.9: 79 | version "1.5.9" 80 | resolved "https://registry.yarnpkg.com/angular-mocks/-/angular-mocks-1.5.9.tgz#5d6d6b37873d6c59e32e195f5de161f4a3f2f7e8" 81 | 82 | angular@^1.5.9: 83 | version "1.5.9" 84 | resolved "https://registry.yarnpkg.com/angular/-/angular-1.5.9.tgz#b7aeff42dad87881e06be16b6690fe766d868b51" 85 | 86 | ansi-align@^1.1.0: 87 | version "1.1.0" 88 | resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-1.1.0.tgz#2f0c1658829739add5ebb15e6b0c6e3423f016ba" 89 | dependencies: 90 | string-width "^1.0.1" 91 | 92 | ansi-escapes@^1.0.0: 93 | version "1.4.0" 94 | resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-1.4.0.tgz#d3a8a83b319aa67793662b13e761c7911422306e" 95 | 96 | ansi-regex@^2.0.0: 97 | version "2.0.0" 98 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.0.0.tgz#c5061b6e0ef8a81775e50f5d66151bf6bf371107" 99 | 100 | ansi-styles@^2.2.1: 101 | version "2.2.1" 102 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" 103 | 104 | any-promise@^1.0.0, any-promise@^1.1.0, any-promise@^1.3.0: 105 | version "1.3.0" 106 | resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f" 107 | 108 | anymatch@^1.3.0: 109 | version "1.3.0" 110 | resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-1.3.0.tgz#a3e52fa39168c825ff57b0248126ce5a8ff95507" 111 | dependencies: 112 | arrify "^1.0.0" 113 | micromatch "^2.1.5" 114 | 115 | aproba@^1.0.3: 116 | version "1.0.4" 117 | resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.0.4.tgz#2713680775e7614c8ba186c065d4e2e52d1072c0" 118 | 119 | archy@^1.0.0: 120 | version "1.0.0" 121 | resolved "https://registry.yarnpkg.com/archy/-/archy-1.0.0.tgz#f9c8c13757cc1dd7bc379ac77b2c62a5c2868c40" 122 | 123 | are-we-there-yet@~1.1.2: 124 | version "1.1.2" 125 | resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.2.tgz#80e470e95a084794fe1899262c5667c6e88de1b3" 126 | dependencies: 127 | delegates "^1.0.0" 128 | readable-stream "^2.0.0 || ^1.1.13" 129 | 130 | argparse@^1.0.7: 131 | version "1.0.9" 132 | resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.9.tgz#73d83bc263f86e97f8cc4f6bae1b0e90a7d22c86" 133 | dependencies: 134 | sprintf-js "~1.0.2" 135 | 136 | arr-diff@^2.0.0: 137 | version "2.0.0" 138 | resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-2.0.0.tgz#8f3b827f955a8bd669697e4a4256ac3ceae356cf" 139 | dependencies: 140 | arr-flatten "^1.0.1" 141 | 142 | arr-flatten@^1.0.1: 143 | version "1.0.1" 144 | resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.0.1.tgz#e5ffe54d45e19f32f216e91eb99c8ce892bb604b" 145 | 146 | array-find-index@^1.0.1: 147 | version "1.0.2" 148 | resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1" 149 | 150 | array-flatten@1.1.1: 151 | version "1.1.1" 152 | resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" 153 | 154 | array-slice@^0.2.3: 155 | version "0.2.3" 156 | resolved "https://registry.yarnpkg.com/array-slice/-/array-slice-0.2.3.tgz#dd3cfb80ed7973a75117cdac69b0b99ec86186f5" 157 | 158 | array-uniq@^1.0.2: 159 | version "1.0.3" 160 | resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" 161 | 162 | array-unique@^0.2.1: 163 | version "0.2.1" 164 | resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53" 165 | 166 | arraybuffer.slice@0.0.6: 167 | version "0.0.6" 168 | resolved "https://registry.yarnpkg.com/arraybuffer.slice/-/arraybuffer.slice-0.0.6.tgz#f33b2159f0532a3f3107a272c0ccfbd1ad2979ca" 169 | 170 | arrify@^1.0.0: 171 | version "1.0.1" 172 | resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" 173 | 174 | asn1@~0.2.3: 175 | version "0.2.3" 176 | resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.3.tgz#dac8787713c9966849fc8180777ebe9c1ddf3b86" 177 | 178 | assert-plus@^0.2.0: 179 | version "0.2.0" 180 | resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-0.2.0.tgz#d74e1b87e7affc0db8aadb7021f3fe48101ab234" 181 | 182 | assert-plus@^1.0.0: 183 | version "1.0.0" 184 | resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" 185 | 186 | assert@^1.1.1: 187 | version "1.4.1" 188 | resolved "https://registry.yarnpkg.com/assert/-/assert-1.4.1.tgz#99912d591836b5a6f5b345c0f07eefc08fc65d91" 189 | dependencies: 190 | util "0.10.3" 191 | 192 | async-each@^1.0.0: 193 | version "1.0.1" 194 | resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.1.tgz#19d386a1d9edc6e7c1c85d388aedbcc56d33602d" 195 | 196 | async@1.x, async@^1.3.0, async@^1.4.0: 197 | version "1.5.2" 198 | resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" 199 | 200 | async@^0.9.0, async@~0.9.0: 201 | version "0.9.2" 202 | resolved "https://registry.yarnpkg.com/async/-/async-0.9.2.tgz#aea74d5e61c1f899613bf64bda66d4c78f2fd17d" 203 | 204 | async@^2.0.1: 205 | version "2.1.4" 206 | resolved "https://registry.yarnpkg.com/async/-/async-2.1.4.tgz#2d2160c7788032e4dd6cbe2502f1f9a2c8f6cde4" 207 | dependencies: 208 | lodash "^4.14.0" 209 | 210 | async@~0.2.6: 211 | version "0.2.10" 212 | resolved "https://registry.yarnpkg.com/async/-/async-0.2.10.tgz#b6bbe0b0674b9d719708ca38de8c237cb526c3d1" 213 | 214 | asynckit@^0.4.0: 215 | version "0.4.0" 216 | resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" 217 | 218 | aws-sign2@~0.6.0: 219 | version "0.6.0" 220 | resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.6.0.tgz#14342dd38dbcc94d0e5b87d763cd63612c0e794f" 221 | 222 | aws4@^1.2.1: 223 | version "1.5.0" 224 | resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.5.0.tgz#0a29ffb79c31c9e712eeb087e8e7a64b4a56d755" 225 | 226 | backo2@1.0.2: 227 | version "1.0.2" 228 | resolved "https://registry.yarnpkg.com/backo2/-/backo2-1.0.2.tgz#31ab1ac8b129363463e35b3ebb69f4dfcfba7947" 229 | 230 | balanced-match@^0.4.1: 231 | version "0.4.2" 232 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-0.4.2.tgz#cb3f3e3c732dc0f01ee70b403f302e61d7709838" 233 | 234 | base64-arraybuffer@0.1.2: 235 | version "0.1.2" 236 | resolved "https://registry.yarnpkg.com/base64-arraybuffer/-/base64-arraybuffer-0.1.2.tgz#474df4a9f2da24e05df3158c3b1db3c3cd46a154" 237 | 238 | base64-js@^1.0.2: 239 | version "1.2.0" 240 | resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.2.0.tgz#a39992d723584811982be5e290bb6a53d86700f1" 241 | 242 | base64id@0.1.0: 243 | version "0.1.0" 244 | resolved "https://registry.yarnpkg.com/base64id/-/base64id-0.1.0.tgz#02ce0fdeee0cef4f40080e1e73e834f0b1bfce3f" 245 | 246 | batch@0.5.3: 247 | version "0.5.3" 248 | resolved "https://registry.yarnpkg.com/batch/-/batch-0.5.3.tgz#3f3414f380321743bfc1042f9a83ff1d5824d464" 249 | 250 | bcrypt-pbkdf@^1.0.0: 251 | version "1.0.0" 252 | resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.0.tgz#3ca76b85241c7170bf7d9703e7b9aa74630040d4" 253 | dependencies: 254 | tweetnacl "^0.14.3" 255 | 256 | benchmark@1.0.0: 257 | version "1.0.0" 258 | resolved "https://registry.yarnpkg.com/benchmark/-/benchmark-1.0.0.tgz#2f1e2fa4c359f11122aa183082218e957e390c73" 259 | 260 | better-assert@~1.0.0: 261 | version "1.0.2" 262 | resolved "https://registry.yarnpkg.com/better-assert/-/better-assert-1.0.2.tgz#40866b9e1b9e0b55b481894311e68faffaebc522" 263 | dependencies: 264 | callsite "1.0.0" 265 | 266 | big.js@^3.1.3: 267 | version "3.1.3" 268 | resolved "https://registry.yarnpkg.com/big.js/-/big.js-3.1.3.tgz#4cada2193652eb3ca9ec8e55c9015669c9806978" 269 | 270 | binary-extensions@^1.0.0: 271 | version "1.7.0" 272 | resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.7.0.tgz#6c1610db163abfb34edfe42fa423343a1e01185d" 273 | 274 | bl@~1.1.2: 275 | version "1.1.2" 276 | resolved "https://registry.yarnpkg.com/bl/-/bl-1.1.2.tgz#fdca871a99713aa00d19e3bbba41c44787a65398" 277 | dependencies: 278 | readable-stream "~2.0.5" 279 | 280 | blob@0.0.4: 281 | version "0.0.4" 282 | resolved "https://registry.yarnpkg.com/blob/-/blob-0.0.4.tgz#bcf13052ca54463f30f9fc7e95b9a47630a94921" 283 | 284 | block-stream@*: 285 | version "0.0.9" 286 | resolved "https://registry.yarnpkg.com/block-stream/-/block-stream-0.0.9.tgz#13ebfe778a03205cfe03751481ebb4b3300c126a" 287 | dependencies: 288 | inherits "~2.0.0" 289 | 290 | bluebird@^3.1.1, bluebird@^3.3.0: 291 | version "3.4.6" 292 | resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.4.6.tgz#01da8d821d87813d158967e743d5fe6c62cf8c0f" 293 | 294 | body-parser@^1.12.4: 295 | version "1.15.2" 296 | resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.15.2.tgz#d7578cf4f1d11d5f6ea804cef35dc7a7ff6dae67" 297 | dependencies: 298 | bytes "2.4.0" 299 | content-type "~1.0.2" 300 | debug "~2.2.0" 301 | depd "~1.1.0" 302 | http-errors "~1.5.0" 303 | iconv-lite "0.4.13" 304 | on-finished "~2.3.0" 305 | qs "6.2.0" 306 | raw-body "~2.1.7" 307 | type-is "~1.6.13" 308 | 309 | boom@2.x.x: 310 | version "2.10.1" 311 | resolved "https://registry.yarnpkg.com/boom/-/boom-2.10.1.tgz#39c8918ceff5799f83f9492a848f625add0c766f" 312 | dependencies: 313 | hoek "2.x.x" 314 | 315 | bower@^1.8.0: 316 | version "1.8.0" 317 | resolved "https://registry.yarnpkg.com/bower/-/bower-1.8.0.tgz#55dbebef0ad9155382d9e9d3e497c1372345b44a" 318 | 319 | boxen@^0.6.0: 320 | version "0.6.0" 321 | resolved "https://registry.yarnpkg.com/boxen/-/boxen-0.6.0.tgz#8364d4248ac34ff0ef1b2f2bf49a6c60ce0d81b6" 322 | dependencies: 323 | ansi-align "^1.1.0" 324 | camelcase "^2.1.0" 325 | chalk "^1.1.1" 326 | cli-boxes "^1.0.0" 327 | filled-array "^1.0.0" 328 | object-assign "^4.0.1" 329 | repeating "^2.0.0" 330 | string-width "^1.0.1" 331 | widest-line "^1.0.0" 332 | 333 | brace-expansion@^1.0.0: 334 | version "1.1.6" 335 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.6.tgz#7197d7eaa9b87e648390ea61fc66c84427420df9" 336 | dependencies: 337 | balanced-match "^0.4.1" 338 | concat-map "0.0.1" 339 | 340 | braces@^0.1.2: 341 | version "0.1.5" 342 | resolved "https://registry.yarnpkg.com/braces/-/braces-0.1.5.tgz#c085711085291d8b75fdd74eab0f8597280711e6" 343 | dependencies: 344 | expand-range "^0.1.0" 345 | 346 | braces@^1.8.2: 347 | version "1.8.5" 348 | resolved "https://registry.yarnpkg.com/braces/-/braces-1.8.5.tgz#ba77962e12dff969d6b76711e914b737857bf6a7" 349 | dependencies: 350 | expand-range "^1.8.1" 351 | preserve "^0.2.0" 352 | repeat-element "^1.1.2" 353 | 354 | browserify-zlib@~0.1.4: 355 | version "0.1.4" 356 | resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.1.4.tgz#bb35f8a519f600e0fa6b8485241c979d0141fb2d" 357 | dependencies: 358 | pako "~0.2.0" 359 | 360 | buffer-shims@^1.0.0: 361 | version "1.0.0" 362 | resolved "https://registry.yarnpkg.com/buffer-shims/-/buffer-shims-1.0.0.tgz#9978ce317388c649ad8793028c3477ef044a8b51" 363 | 364 | buffer@^4.9.0: 365 | version "4.9.1" 366 | resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.1.tgz#6d1bb601b07a4efced97094132093027c95bc298" 367 | dependencies: 368 | base64-js "^1.0.2" 369 | ieee754 "^1.1.4" 370 | isarray "^1.0.0" 371 | 372 | builtin-modules@^1.0.0: 373 | version "1.1.1" 374 | resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" 375 | 376 | bytes@2.3.0: 377 | version "2.3.0" 378 | resolved "https://registry.yarnpkg.com/bytes/-/bytes-2.3.0.tgz#d5b680a165b6201739acb611542aabc2d8ceb070" 379 | 380 | bytes@2.4.0: 381 | version "2.4.0" 382 | resolved "https://registry.yarnpkg.com/bytes/-/bytes-2.4.0.tgz#7d97196f9d5baf7f6935e25985549edd2a6c2339" 383 | 384 | callsite@1.0.0: 385 | version "1.0.0" 386 | resolved "https://registry.yarnpkg.com/callsite/-/callsite-1.0.0.tgz#280398e5d664bd74038b6f0905153e6e8af1bc20" 387 | 388 | camelcase-keys@^2.0.0: 389 | version "2.1.0" 390 | resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-2.1.0.tgz#308beeaffdf28119051efa1d932213c91b8f92e7" 391 | dependencies: 392 | camelcase "^2.0.0" 393 | map-obj "^1.0.0" 394 | 395 | camelcase@^1.0.2: 396 | version "1.2.1" 397 | resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-1.2.1.tgz#9bb5304d2e0b56698b2c758b08a3eaa9daa58a39" 398 | 399 | camelcase@^2.0.0, camelcase@^2.1.0: 400 | version "2.1.1" 401 | resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f" 402 | 403 | capture-stack-trace@^1.0.0: 404 | version "1.0.0" 405 | resolved "https://registry.yarnpkg.com/capture-stack-trace/-/capture-stack-trace-1.0.0.tgz#4a6fa07399c26bba47f0b2496b4d0fb408c5550d" 406 | 407 | caseless@~0.11.0: 408 | version "0.11.0" 409 | resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.11.0.tgz#715b96ea9841593cc33067923f5ec60ebda4f7d7" 410 | 411 | center-align@^0.1.1: 412 | version "0.1.3" 413 | resolved "https://registry.yarnpkg.com/center-align/-/center-align-0.1.3.tgz#aa0d32629b6ee972200411cbd4461c907bc2b7ad" 414 | dependencies: 415 | align-text "^0.1.3" 416 | lazy-cache "^1.0.3" 417 | 418 | chalk@^1.0.0, chalk@^1.1.1: 419 | version "1.1.3" 420 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" 421 | dependencies: 422 | ansi-styles "^2.2.1" 423 | escape-string-regexp "^1.0.2" 424 | has-ansi "^2.0.0" 425 | strip-ansi "^3.0.0" 426 | supports-color "^2.0.0" 427 | 428 | check-more-types@2.10.0: 429 | version "2.10.0" 430 | resolved "https://registry.yarnpkg.com/check-more-types/-/check-more-types-2.10.0.tgz#7cf576c20cb8b38d0e7db2981f8bba44f8cd17d3" 431 | 432 | chokidar@^1.0.0, chokidar@^1.4.1: 433 | version "1.6.1" 434 | resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-1.6.1.tgz#2f4447ab5e96e50fb3d789fd90d4c72e0e4c70c2" 435 | dependencies: 436 | anymatch "^1.3.0" 437 | async-each "^1.0.0" 438 | glob-parent "^2.0.0" 439 | inherits "^2.0.1" 440 | is-binary-path "^1.0.0" 441 | is-glob "^2.0.0" 442 | path-is-absolute "^1.0.0" 443 | readdirp "^2.0.0" 444 | optionalDependencies: 445 | fsevents "^1.0.0" 446 | 447 | ci-info@^1.0.0: 448 | version "1.0.0" 449 | resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-1.0.0.tgz#dc5285f2b4e251821683681c381c3388f46ec534" 450 | 451 | cli-boxes@^1.0.0: 452 | version "1.0.0" 453 | resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-1.0.0.tgz#4fa917c3e59c94a004cd61f8ee509da651687143" 454 | 455 | cli-cursor@^1.0.2: 456 | version "1.0.2" 457 | resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-1.0.2.tgz#64da3f7d56a54412e59794bd62dc35295e8f2987" 458 | dependencies: 459 | restore-cursor "^1.0.1" 460 | 461 | cli-truncate@^0.2.1: 462 | version "0.2.1" 463 | resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-0.2.1.tgz#9f15cfbb0705005369216c626ac7d05ab90dd574" 464 | dependencies: 465 | slice-ansi "0.0.4" 466 | string-width "^1.0.1" 467 | 468 | cliui@^2.1.0: 469 | version "2.1.0" 470 | resolved "https://registry.yarnpkg.com/cliui/-/cliui-2.1.0.tgz#4b475760ff80264c762c3a1719032e91c7fea0d1" 471 | dependencies: 472 | center-align "^0.1.1" 473 | right-align "^0.1.1" 474 | wordwrap "0.0.2" 475 | 476 | clone@^1.0.2: 477 | version "1.0.2" 478 | resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.2.tgz#260b7a99ebb1edfe247538175f783243cb19d149" 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 | colors@^1.0.3, colors@^1.1.0, colors@^1.1.2: 485 | version "1.1.2" 486 | resolved "https://registry.yarnpkg.com/colors/-/colors-1.1.2.tgz#168a4701756b6a7f51a12ce0c97bfa28c084ed63" 487 | 488 | columnify@^1.5.2: 489 | version "1.5.4" 490 | resolved "https://registry.yarnpkg.com/columnify/-/columnify-1.5.4.tgz#4737ddf1c7b69a8a7c340570782e947eec8e78bb" 491 | dependencies: 492 | strip-ansi "^3.0.0" 493 | wcwidth "^1.0.0" 494 | 495 | combine-lists@^1.0.0: 496 | version "1.0.1" 497 | resolved "https://registry.yarnpkg.com/combine-lists/-/combine-lists-1.0.1.tgz#458c07e09e0d900fc28b70a3fec2dacd1d2cb7f6" 498 | dependencies: 499 | lodash "^4.5.0" 500 | 501 | combined-stream@^1.0.5, combined-stream@~1.0.5: 502 | version "1.0.5" 503 | resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.5.tgz#938370a57b4a51dea2c77c15d5c5fdf895164009" 504 | dependencies: 505 | delayed-stream "~1.0.0" 506 | 507 | commander@^2.9.0: 508 | version "2.9.0" 509 | resolved "https://registry.yarnpkg.com/commander/-/commander-2.9.0.tgz#9c99094176e12240cb22d6c5146098400fe0f7d4" 510 | dependencies: 511 | graceful-readlink ">= 1.0.0" 512 | 513 | component-bind@1.0.0: 514 | version "1.0.0" 515 | resolved "https://registry.yarnpkg.com/component-bind/-/component-bind-1.0.0.tgz#00c608ab7dcd93897c0009651b1d3a8e1e73bbd1" 516 | 517 | component-emitter@1.1.2: 518 | version "1.1.2" 519 | resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.1.2.tgz#296594f2753daa63996d2af08d15a95116c9aec3" 520 | 521 | component-emitter@1.2.0: 522 | version "1.2.0" 523 | resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.2.0.tgz#ccd113a86388d06482d03de3fc7df98526ba8efe" 524 | 525 | component-inherit@0.0.3: 526 | version "0.0.3" 527 | resolved "https://registry.yarnpkg.com/component-inherit/-/component-inherit-0.0.3.tgz#645fc4adf58b72b649d5cae65135619db26ff143" 528 | 529 | compressible@~2.0.8: 530 | version "2.0.9" 531 | resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.9.tgz#6daab4e2b599c2770dd9e21e7a891b1c5a755425" 532 | dependencies: 533 | mime-db ">= 1.24.0 < 2" 534 | 535 | compression@^1.5.2: 536 | version "1.6.2" 537 | resolved "https://registry.yarnpkg.com/compression/-/compression-1.6.2.tgz#cceb121ecc9d09c52d7ad0c3350ea93ddd402bc3" 538 | dependencies: 539 | accepts "~1.3.3" 540 | bytes "2.3.0" 541 | compressible "~2.0.8" 542 | debug "~2.2.0" 543 | on-headers "~1.0.1" 544 | vary "~1.1.0" 545 | 546 | concat-map@0.0.1: 547 | version "0.0.1" 548 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" 549 | 550 | concat-stream@1.5.0, concat-stream@^1.4.7: 551 | version "1.5.0" 552 | resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.5.0.tgz#53f7d43c51c5e43f81c8fdd03321c631be68d611" 553 | dependencies: 554 | inherits "~2.0.1" 555 | readable-stream "~2.0.0" 556 | typedarray "~0.0.5" 557 | 558 | configstore@^2.0.0: 559 | version "2.1.0" 560 | resolved "https://registry.yarnpkg.com/configstore/-/configstore-2.1.0.tgz#737a3a7036e9886102aa6099e47bb33ab1aba1a1" 561 | dependencies: 562 | dot-prop "^3.0.0" 563 | graceful-fs "^4.1.2" 564 | mkdirp "^0.5.0" 565 | object-assign "^4.0.1" 566 | os-tmpdir "^1.0.0" 567 | osenv "^0.1.0" 568 | uuid "^2.0.1" 569 | write-file-atomic "^1.1.2" 570 | xdg-basedir "^2.0.0" 571 | 572 | connect-history-api-fallback@^1.3.0: 573 | version "1.3.0" 574 | resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-1.3.0.tgz#e51d17f8f0ef0db90a64fdb47de3051556e9f169" 575 | 576 | connect@^3.3.5: 577 | version "3.5.0" 578 | resolved "https://registry.yarnpkg.com/connect/-/connect-3.5.0.tgz#b357525a0b4c1f50599cd983e1d9efeea9677198" 579 | dependencies: 580 | debug "~2.2.0" 581 | finalhandler "0.5.0" 582 | parseurl "~1.3.1" 583 | utils-merge "1.0.0" 584 | 585 | console-browserify@^1.1.0: 586 | version "1.1.0" 587 | resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.1.0.tgz#f0241c45730a9fc6323b206dbf38edc741d0bb10" 588 | dependencies: 589 | date-now "^0.1.4" 590 | 591 | console-control-strings@^1.0.0, console-control-strings@~1.1.0: 592 | version "1.1.0" 593 | resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" 594 | 595 | constants-browserify@0.0.1: 596 | version "0.0.1" 597 | resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-0.0.1.tgz#92577db527ba6c4cf0a4568d84bc031f441e21f2" 598 | 599 | content-disposition@0.5.1: 600 | version "0.5.1" 601 | resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.1.tgz#87476c6a67c8daa87e32e87616df883ba7fb071b" 602 | 603 | content-type@~1.0.2: 604 | version "1.0.2" 605 | resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.2.tgz#b7d113aee7a8dd27bd21133c4dc2529df1721eed" 606 | 607 | cookie-signature@1.0.6: 608 | version "1.0.6" 609 | resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" 610 | 611 | cookie@0.3.1: 612 | version "0.3.1" 613 | resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.3.1.tgz#e7e0a1f9ef43b4c8ba925c5c5a96e806d16873bb" 614 | 615 | core-js@^2.2.0: 616 | version "2.4.1" 617 | resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.4.1.tgz#4de911e667b0eae9124e34254b53aea6fc618d3e" 618 | 619 | core-util-is@~1.0.0: 620 | version "1.0.2" 621 | resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" 622 | 623 | create-error-class@^3.0.1: 624 | version "3.0.2" 625 | resolved "https://registry.yarnpkg.com/create-error-class/-/create-error-class-3.0.2.tgz#06be7abef947a3f14a30fd610671d401bca8b7b6" 626 | dependencies: 627 | capture-stack-trace "^1.0.0" 628 | 629 | cryptiles@2.x.x: 630 | version "2.0.5" 631 | resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-2.0.5.tgz#3bdfecdc608147c1c67202fa291e7dca59eaa3b8" 632 | dependencies: 633 | boom "2.x.x" 634 | 635 | crypto-browserify@~3.2.6: 636 | version "3.2.8" 637 | resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.2.8.tgz#b9b11dbe6d9651dd882a01e6cc467df718ecf189" 638 | dependencies: 639 | pbkdf2-compat "2.0.1" 640 | ripemd160 "0.2.0" 641 | sha.js "2.2.6" 642 | 643 | currently-unhandled@^0.4.1: 644 | version "0.4.1" 645 | resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea" 646 | dependencies: 647 | array-find-index "^1.0.1" 648 | 649 | custom-event@~1.0.0: 650 | version "1.0.1" 651 | resolved "https://registry.yarnpkg.com/custom-event/-/custom-event-1.0.1.tgz#5d02a46850adf1b4a317946a3928fccb5bfd0425" 652 | 653 | dashdash@^1.12.0: 654 | version "1.14.1" 655 | resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" 656 | dependencies: 657 | assert-plus "^1.0.0" 658 | 659 | date-now@^0.1.4: 660 | version "0.1.4" 661 | resolved "https://registry.yarnpkg.com/date-now/-/date-now-0.1.4.tgz#eaf439fd4d4848ad74e5cc7dbef200672b9e345b" 662 | 663 | dateformat@^1.0.6: 664 | version "1.0.12" 665 | resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-1.0.12.tgz#9f124b67594c937ff706932e4a642cca8dbbfee9" 666 | dependencies: 667 | get-stdin "^4.0.1" 668 | meow "^3.3.0" 669 | 670 | debug@0.7.4: 671 | version "0.7.4" 672 | resolved "https://registry.yarnpkg.com/debug/-/debug-0.7.4.tgz#06e1ea8082c2cb14e39806e22e2f6f757f92af39" 673 | 674 | debug@2, debug@2.2.0, debug@^2.2.0, debug@~2.2.0: 675 | version "2.2.0" 676 | resolved "https://registry.yarnpkg.com/debug/-/debug-2.2.0.tgz#f87057e995b1a1f6ae6a4960664137bc56f039da" 677 | dependencies: 678 | ms "0.7.1" 679 | 680 | decamelize@^1.0.0, decamelize@^1.1.2: 681 | version "1.2.0" 682 | resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" 683 | 684 | deep-extend@~0.4.0: 685 | version "0.4.1" 686 | resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.4.1.tgz#efe4113d08085f4e6f9687759810f807469e2253" 687 | 688 | deep-is@~0.1.3: 689 | version "0.1.3" 690 | resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" 691 | 692 | defaults@^1.0.3: 693 | version "1.0.3" 694 | resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.3.tgz#c656051e9817d9ff08ed881477f3fe4019f3ef7d" 695 | dependencies: 696 | clone "^1.0.2" 697 | 698 | delayed-stream@~1.0.0: 699 | version "1.0.0" 700 | resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" 701 | 702 | delegates@^1.0.0: 703 | version "1.0.0" 704 | resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" 705 | 706 | depd@~1.1.0: 707 | version "1.1.0" 708 | resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.0.tgz#e1bd82c6aab6ced965b97b88b17ed3e528ca18c3" 709 | 710 | destroy@~1.0.4: 711 | version "1.0.4" 712 | resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" 713 | 714 | detect-indent@^5.0.0: 715 | version "5.0.0" 716 | resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-5.0.0.tgz#3871cc0a6a002e8c3e5b3cf7f336264675f06b9d" 717 | 718 | di@^0.0.1: 719 | version "0.0.1" 720 | resolved "https://registry.yarnpkg.com/di/-/di-0.0.1.tgz#806649326ceaa7caa3306d75d985ea2748ba913c" 721 | 722 | diff@^3.0.1: 723 | version "3.1.0" 724 | resolved "https://registry.yarnpkg.com/diff/-/diff-3.1.0.tgz#9406c73a401e6c2b3ba901c5e2c44eb6a60c5385" 725 | 726 | dom-serialize@^2.2.0: 727 | version "2.2.1" 728 | resolved "https://registry.yarnpkg.com/dom-serialize/-/dom-serialize-2.2.1.tgz#562ae8999f44be5ea3076f5419dcd59eb43ac95b" 729 | dependencies: 730 | custom-event "~1.0.0" 731 | ent "~2.2.0" 732 | extend "^3.0.0" 733 | void-elements "^2.0.0" 734 | 735 | domain-browser@^1.1.1: 736 | version "1.1.7" 737 | resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.1.7.tgz#867aa4b093faa05f1de08c06f4d7b21fdf8698bc" 738 | 739 | dot-prop@^3.0.0: 740 | version "3.0.0" 741 | resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-3.0.0.tgz#1b708af094a49c9a0e7dbcad790aba539dac1177" 742 | dependencies: 743 | is-obj "^1.0.0" 744 | 745 | duplexer2@^0.1.4: 746 | version "0.1.4" 747 | resolved "https://registry.yarnpkg.com/duplexer2/-/duplexer2-0.1.4.tgz#8b12dab878c0d69e3e7891051662a32fc6bddcc1" 748 | dependencies: 749 | readable-stream "^2.0.2" 750 | 751 | ecc-jsbn@~0.1.1: 752 | version "0.1.1" 753 | resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz#0fc73a9ed5f0d53c38193398523ef7e543777505" 754 | dependencies: 755 | jsbn "~0.1.0" 756 | 757 | ee-first@1.1.1: 758 | version "1.1.1" 759 | resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" 760 | 761 | elegant-spinner@^1.0.1: 762 | version "1.0.1" 763 | resolved "https://registry.yarnpkg.com/elegant-spinner/-/elegant-spinner-1.0.1.tgz#db043521c95d7e303fd8f345bedc3349cfb0729e" 764 | 765 | emojis-list@^2.0.0: 766 | version "2.1.0" 767 | resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389" 768 | 769 | encodeurl@~1.0.1: 770 | version "1.0.1" 771 | resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.1.tgz#79e3d58655346909fe6f0f45a5de68103b294d20" 772 | 773 | engine.io-client@1.6.9: 774 | version "1.6.9" 775 | resolved "https://registry.yarnpkg.com/engine.io-client/-/engine.io-client-1.6.9.tgz#1d6ad48048a5083c95096943b29d36efdb212401" 776 | dependencies: 777 | component-emitter "1.1.2" 778 | component-inherit "0.0.3" 779 | debug "2.2.0" 780 | engine.io-parser "1.2.4" 781 | has-cors "1.1.0" 782 | indexof "0.0.1" 783 | parsejson "0.0.1" 784 | parseqs "0.0.2" 785 | parseuri "0.0.4" 786 | ws "1.0.1" 787 | xmlhttprequest-ssl "1.5.1" 788 | yeast "0.1.2" 789 | 790 | engine.io-parser@1.2.4: 791 | version "1.2.4" 792 | resolved "https://registry.yarnpkg.com/engine.io-parser/-/engine.io-parser-1.2.4.tgz#e0897b0bf14e792d4cd2a5950553919c56948c42" 793 | dependencies: 794 | after "0.8.1" 795 | arraybuffer.slice "0.0.6" 796 | base64-arraybuffer "0.1.2" 797 | blob "0.0.4" 798 | has-binary "0.1.6" 799 | utf8 "2.1.0" 800 | 801 | engine.io@1.6.10: 802 | version "1.6.10" 803 | resolved "https://registry.yarnpkg.com/engine.io/-/engine.io-1.6.10.tgz#f87d84e1bd21d1a2ec7f8deef0c62054acdfb27a" 804 | dependencies: 805 | accepts "1.1.4" 806 | base64id "0.1.0" 807 | debug "2.2.0" 808 | engine.io-parser "1.2.4" 809 | ws "1.0.1" 810 | 811 | enhanced-resolve@^0.9.0, enhanced-resolve@~0.9.0: 812 | version "0.9.1" 813 | resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-0.9.1.tgz#4d6e689b3725f86090927ccc86cd9f1635b89e2e" 814 | dependencies: 815 | graceful-fs "^4.1.2" 816 | memory-fs "^0.2.0" 817 | tapable "^0.1.8" 818 | 819 | ent@~2.2.0: 820 | version "2.2.0" 821 | resolved "https://registry.yarnpkg.com/ent/-/ent-2.2.0.tgz#e964219325a21d05f44466a2f686ed6ce5f5dd1d" 822 | 823 | errno@^0.1.3: 824 | version "0.1.4" 825 | resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.4.tgz#b896e23a9e5e8ba33871fc996abd3635fc9a1c7d" 826 | dependencies: 827 | prr "~0.0.0" 828 | 829 | error-ex@^1.2.0: 830 | version "1.3.0" 831 | resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.0.tgz#e67b43f3e82c96ea3a584ffee0b9fc3325d802d9" 832 | dependencies: 833 | is-arrayish "^0.2.1" 834 | 835 | es6-promise@~4.0.3: 836 | version "4.0.5" 837 | resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.0.5.tgz#7882f30adde5b240ccfa7f7d78c548330951ae42" 838 | 839 | escape-html@~1.0.3: 840 | version "1.0.3" 841 | resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" 842 | 843 | escape-string-regexp@^1.0.2: 844 | version "1.0.5" 845 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" 846 | 847 | escodegen@1.8.x: 848 | version "1.8.1" 849 | resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.8.1.tgz#5a5b53af4693110bebb0867aa3430dd3b70a1018" 850 | dependencies: 851 | esprima "^2.7.1" 852 | estraverse "^1.9.1" 853 | esutils "^2.0.2" 854 | optionator "^0.8.1" 855 | optionalDependencies: 856 | source-map "~0.2.0" 857 | 858 | esprima@2.7.x, esprima@^2.6.0, esprima@^2.7.1: 859 | version "2.7.3" 860 | resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581" 861 | 862 | estraverse@^1.9.1: 863 | version "1.9.3" 864 | resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-1.9.3.tgz#af67f2dc922582415950926091a4005d29c9bb44" 865 | 866 | esutils@^2.0.2: 867 | version "2.0.2" 868 | resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" 869 | 870 | etag@~1.7.0: 871 | version "1.7.0" 872 | resolved "https://registry.yarnpkg.com/etag/-/etag-1.7.0.tgz#03d30b5f67dd6e632d2945d30d6652731a34d5d8" 873 | 874 | eventemitter3@1.x.x: 875 | version "1.2.0" 876 | resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-1.2.0.tgz#1c86991d816ad1e504750e73874224ecf3bec508" 877 | 878 | events@^1.0.0: 879 | version "1.1.1" 880 | resolved "https://registry.yarnpkg.com/events/-/events-1.1.1.tgz#9ebdb7635ad099c70dcc4c2a1f5004288e8bd924" 881 | 882 | eventsource@~0.1.6: 883 | version "0.1.6" 884 | resolved "https://registry.yarnpkg.com/eventsource/-/eventsource-0.1.6.tgz#0acede849ed7dd1ccc32c811bb11b944d4f29232" 885 | dependencies: 886 | original ">=0.0.5" 887 | 888 | exit-hook@^1.0.0: 889 | version "1.1.1" 890 | resolved "https://registry.yarnpkg.com/exit-hook/-/exit-hook-1.1.1.tgz#f05ca233b48c05d54fff07765df8507e95c02ff8" 891 | 892 | exit@^0.1.2: 893 | version "0.1.2" 894 | resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" 895 | 896 | expand-braces@^0.1.1: 897 | version "0.1.2" 898 | resolved "https://registry.yarnpkg.com/expand-braces/-/expand-braces-0.1.2.tgz#488b1d1d2451cb3d3a6b192cfc030f44c5855fea" 899 | dependencies: 900 | array-slice "^0.2.3" 901 | array-unique "^0.2.1" 902 | braces "^0.1.2" 903 | 904 | expand-brackets@^0.1.4: 905 | version "0.1.5" 906 | resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-0.1.5.tgz#df07284e342a807cd733ac5af72411e581d1177b" 907 | dependencies: 908 | is-posix-bracket "^0.1.0" 909 | 910 | expand-range@^0.1.0: 911 | version "0.1.1" 912 | resolved "https://registry.yarnpkg.com/expand-range/-/expand-range-0.1.1.tgz#4cb8eda0993ca56fa4f41fc42f3cbb4ccadff044" 913 | dependencies: 914 | is-number "^0.1.1" 915 | repeat-string "^0.2.2" 916 | 917 | expand-range@^1.8.1: 918 | version "1.8.2" 919 | resolved "https://registry.yarnpkg.com/expand-range/-/expand-range-1.8.2.tgz#a299effd335fe2721ebae8e257ec79644fc85337" 920 | dependencies: 921 | fill-range "^2.1.0" 922 | 923 | express@^4.13.3: 924 | version "4.14.0" 925 | resolved "https://registry.yarnpkg.com/express/-/express-4.14.0.tgz#c1ee3f42cdc891fb3dc650a8922d51ec847d0d66" 926 | dependencies: 927 | accepts "~1.3.3" 928 | array-flatten "1.1.1" 929 | content-disposition "0.5.1" 930 | content-type "~1.0.2" 931 | cookie "0.3.1" 932 | cookie-signature "1.0.6" 933 | debug "~2.2.0" 934 | depd "~1.1.0" 935 | encodeurl "~1.0.1" 936 | escape-html "~1.0.3" 937 | etag "~1.7.0" 938 | finalhandler "0.5.0" 939 | fresh "0.3.0" 940 | merge-descriptors "1.0.1" 941 | methods "~1.1.2" 942 | on-finished "~2.3.0" 943 | parseurl "~1.3.1" 944 | path-to-regexp "0.1.7" 945 | proxy-addr "~1.1.2" 946 | qs "6.2.0" 947 | range-parser "~1.2.0" 948 | send "0.14.1" 949 | serve-static "~1.11.1" 950 | type-is "~1.6.13" 951 | utils-merge "1.0.0" 952 | vary "~1.1.0" 953 | 954 | extend@3, extend@^3.0.0, extend@~3.0.0: 955 | version "3.0.0" 956 | resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.0.tgz#5a474353b9f3353ddd8176dfd37b91c83a46f1d4" 957 | 958 | extglob@^0.3.1: 959 | version "0.3.2" 960 | resolved "https://registry.yarnpkg.com/extglob/-/extglob-0.3.2.tgz#2e18ff3d2f49ab2765cec9023f011daa8d8349a1" 961 | dependencies: 962 | is-extglob "^1.0.0" 963 | 964 | extract-zip@~1.5.0: 965 | version "1.5.0" 966 | resolved "https://registry.yarnpkg.com/extract-zip/-/extract-zip-1.5.0.tgz#92ccf6d81ef70a9fa4c1747114ccef6d8688a6c4" 967 | dependencies: 968 | concat-stream "1.5.0" 969 | debug "0.7.4" 970 | mkdirp "0.5.0" 971 | yauzl "2.4.1" 972 | 973 | extsprintf@1.0.2: 974 | version "1.0.2" 975 | resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.0.2.tgz#e1080e0658e300b06294990cc70e1502235fd550" 976 | 977 | fast-levenshtein@~2.0.4: 978 | version "2.0.5" 979 | resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.5.tgz#bd33145744519ab1c36c3ee9f31f08e9079b67f2" 980 | 981 | faye-websocket@^0.10.0: 982 | version "0.10.0" 983 | resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.10.0.tgz#4e492f8d04dfb6f89003507f6edbf2d501e7c6f4" 984 | dependencies: 985 | websocket-driver ">=0.5.1" 986 | 987 | faye-websocket@~0.11.0: 988 | version "0.11.0" 989 | resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.11.0.tgz#d9ccf0e789e7db725d74bc4877d23aa42972ac50" 990 | dependencies: 991 | websocket-driver ">=0.5.1" 992 | 993 | fd-slicer@~1.0.1: 994 | version "1.0.1" 995 | resolved "https://registry.yarnpkg.com/fd-slicer/-/fd-slicer-1.0.1.tgz#8b5bcbd9ec327c5041bf9ab023fd6750f1177e65" 996 | dependencies: 997 | pend "~1.2.0" 998 | 999 | filename-regex@^2.0.0: 1000 | version "2.0.0" 1001 | resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.0.tgz#996e3e80479b98b9897f15a8a58b3d084e926775" 1002 | 1003 | fill-range@^2.1.0: 1004 | version "2.2.3" 1005 | resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-2.2.3.tgz#50b77dfd7e469bc7492470963699fe7a8485a723" 1006 | dependencies: 1007 | is-number "^2.1.0" 1008 | isobject "^2.0.0" 1009 | randomatic "^1.1.3" 1010 | repeat-element "^1.1.2" 1011 | repeat-string "^1.5.2" 1012 | 1013 | filled-array@^1.0.0: 1014 | version "1.1.0" 1015 | resolved "https://registry.yarnpkg.com/filled-array/-/filled-array-1.1.0.tgz#c3c4f6c663b923459a9aa29912d2d031f1507f84" 1016 | 1017 | finalhandler@0.5.0: 1018 | version "0.5.0" 1019 | resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-0.5.0.tgz#e9508abece9b6dba871a6942a1d7911b91911ac7" 1020 | dependencies: 1021 | debug "~2.2.0" 1022 | escape-html "~1.0.3" 1023 | on-finished "~2.3.0" 1024 | statuses "~1.3.0" 1025 | unpipe "~1.0.0" 1026 | 1027 | find-up@^1.0.0: 1028 | version "1.1.2" 1029 | resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" 1030 | dependencies: 1031 | path-exists "^2.0.0" 1032 | pinkie-promise "^2.0.0" 1033 | 1034 | findup-sync@~0.3.0: 1035 | version "0.3.0" 1036 | resolved "https://registry.yarnpkg.com/findup-sync/-/findup-sync-0.3.0.tgz#37930aa5d816b777c03445e1966cc6790a4c0b16" 1037 | dependencies: 1038 | glob "~5.0.0" 1039 | 1040 | for-in@^0.1.5: 1041 | version "0.1.6" 1042 | resolved "https://registry.yarnpkg.com/for-in/-/for-in-0.1.6.tgz#c9f96e89bfad18a545af5ec3ed352a1d9e5b4dc8" 1043 | 1044 | for-own@^0.1.4: 1045 | version "0.1.4" 1046 | resolved "https://registry.yarnpkg.com/for-own/-/for-own-0.1.4.tgz#0149b41a39088c7515f51ebe1c1386d45f935072" 1047 | dependencies: 1048 | for-in "^0.1.5" 1049 | 1050 | forever-agent@~0.6.1: 1051 | version "0.6.1" 1052 | resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" 1053 | 1054 | form-data@^2.0.0, form-data@~2.1.1: 1055 | version "2.1.2" 1056 | resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.1.2.tgz#89c3534008b97eada4cbb157d58f6f5df025eae4" 1057 | dependencies: 1058 | asynckit "^0.4.0" 1059 | combined-stream "^1.0.5" 1060 | mime-types "^2.1.12" 1061 | 1062 | form-data@~1.0.0-rc4: 1063 | version "1.0.1" 1064 | resolved "https://registry.yarnpkg.com/form-data/-/form-data-1.0.1.tgz#ae315db9a4907fa065502304a66d7733475ee37c" 1065 | dependencies: 1066 | async "^2.0.1" 1067 | combined-stream "^1.0.5" 1068 | mime-types "^2.1.11" 1069 | 1070 | formatio@1.1.1: 1071 | version "1.1.1" 1072 | resolved "https://registry.yarnpkg.com/formatio/-/formatio-1.1.1.tgz#5ed3ccd636551097383465d996199100e86161e9" 1073 | dependencies: 1074 | samsam "~1.1" 1075 | 1076 | forwarded@~0.1.0: 1077 | version "0.1.0" 1078 | resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.0.tgz#19ef9874c4ae1c297bcf078fde63a09b66a84363" 1079 | 1080 | fresh@0.3.0: 1081 | version "0.3.0" 1082 | resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.3.0.tgz#651f838e22424e7566de161d8358caa199f83d4f" 1083 | 1084 | fs-extra@~0.30.0: 1085 | version "0.30.0" 1086 | resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-0.30.0.tgz#f233ffcc08d4da7d432daa449776989db1df93f0" 1087 | dependencies: 1088 | graceful-fs "^4.1.2" 1089 | jsonfile "^2.1.0" 1090 | klaw "^1.0.0" 1091 | path-is-absolute "^1.0.0" 1092 | rimraf "^2.2.8" 1093 | 1094 | fs.realpath@^1.0.0: 1095 | version "1.0.0" 1096 | resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" 1097 | 1098 | fsevents@^1.0.0: 1099 | version "1.0.15" 1100 | resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.0.15.tgz#fa63f590f3c2ad91275e4972a6cea545fb0aae44" 1101 | dependencies: 1102 | nan "^2.3.0" 1103 | node-pre-gyp "^0.6.29" 1104 | 1105 | fstream-ignore@~1.0.5: 1106 | version "1.0.5" 1107 | resolved "https://registry.yarnpkg.com/fstream-ignore/-/fstream-ignore-1.0.5.tgz#9c31dae34767018fe1d249b24dada67d092da105" 1108 | dependencies: 1109 | fstream "^1.0.0" 1110 | inherits "2" 1111 | minimatch "^3.0.0" 1112 | 1113 | fstream@^1.0.0, fstream@^1.0.2, fstream@~1.0.10: 1114 | version "1.0.10" 1115 | resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.10.tgz#604e8a92fe26ffd9f6fae30399d4984e1ab22822" 1116 | dependencies: 1117 | graceful-fs "^4.1.2" 1118 | inherits "~2.0.0" 1119 | mkdirp ">=0.5 0" 1120 | rimraf "2" 1121 | 1122 | function-bind@^1.0.2: 1123 | version "1.1.0" 1124 | resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.0.tgz#16176714c801798e4e8f2cf7f7529467bb4a5771" 1125 | 1126 | gauge@~2.7.1: 1127 | version "2.7.1" 1128 | resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.1.tgz#388473894fe8be5e13ffcdb8b93e4ed0616428c7" 1129 | dependencies: 1130 | aproba "^1.0.3" 1131 | console-control-strings "^1.0.0" 1132 | has-color "^0.1.7" 1133 | has-unicode "^2.0.0" 1134 | object-assign "^4.1.0" 1135 | signal-exit "^3.0.0" 1136 | string-width "^1.0.1" 1137 | strip-ansi "^3.0.1" 1138 | wide-align "^1.1.0" 1139 | 1140 | generate-function@^2.0.0: 1141 | version "2.0.0" 1142 | resolved "https://registry.yarnpkg.com/generate-function/-/generate-function-2.0.0.tgz#6858fe7c0969b7d4e9093337647ac79f60dfbe74" 1143 | 1144 | generate-object-property@^1.1.0: 1145 | version "1.2.0" 1146 | resolved "https://registry.yarnpkg.com/generate-object-property/-/generate-object-property-1.2.0.tgz#9c0e1c40308ce804f4783618b937fa88f99d50d0" 1147 | dependencies: 1148 | is-property "^1.0.0" 1149 | 1150 | get-stdin@^4.0.1: 1151 | version "4.0.1" 1152 | resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe" 1153 | 1154 | getpass@^0.1.1: 1155 | version "0.1.6" 1156 | resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.6.tgz#283ffd9fc1256840875311c1b60e8c40187110e6" 1157 | dependencies: 1158 | assert-plus "^1.0.0" 1159 | 1160 | glob-base@^0.3.0: 1161 | version "0.3.0" 1162 | resolved "https://registry.yarnpkg.com/glob-base/-/glob-base-0.3.0.tgz#dbb164f6221b1c0b1ccf82aea328b497df0ea3c4" 1163 | dependencies: 1164 | glob-parent "^2.0.0" 1165 | is-glob "^2.0.0" 1166 | 1167 | glob-parent@^2.0.0: 1168 | version "2.0.0" 1169 | resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-2.0.0.tgz#81383d72db054fcccf5336daa902f182f6edbb28" 1170 | dependencies: 1171 | is-glob "^2.0.0" 1172 | 1173 | glob@^5.0.15, glob@~5.0.0: 1174 | version "5.0.15" 1175 | resolved "https://registry.yarnpkg.com/glob/-/glob-5.0.15.tgz#1bc936b9e02f4a603fcc222ecf7633d30b8b93b1" 1176 | dependencies: 1177 | inflight "^1.0.4" 1178 | inherits "2" 1179 | minimatch "2 || 3" 1180 | once "^1.3.0" 1181 | path-is-absolute "^1.0.0" 1182 | 1183 | glob@^7.0.3, glob@^7.0.5, glob@^7.0.6, glob@^7.1.1: 1184 | version "7.1.1" 1185 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.1.tgz#805211df04faaf1c63a3600306cdf5ade50b2ec8" 1186 | dependencies: 1187 | fs.realpath "^1.0.0" 1188 | inflight "^1.0.4" 1189 | inherits "2" 1190 | minimatch "^3.0.2" 1191 | once "^1.3.0" 1192 | path-is-absolute "^1.0.0" 1193 | 1194 | got@^5.0.0: 1195 | version "5.7.1" 1196 | resolved "https://registry.yarnpkg.com/got/-/got-5.7.1.tgz#5f81635a61e4a6589f180569ea4e381680a51f35" 1197 | dependencies: 1198 | create-error-class "^3.0.1" 1199 | duplexer2 "^0.1.4" 1200 | is-redirect "^1.0.0" 1201 | is-retry-allowed "^1.0.0" 1202 | is-stream "^1.0.0" 1203 | lowercase-keys "^1.0.0" 1204 | node-status-codes "^1.0.0" 1205 | object-assign "^4.0.1" 1206 | parse-json "^2.1.0" 1207 | pinkie-promise "^2.0.0" 1208 | read-all-stream "^3.0.0" 1209 | readable-stream "^2.0.5" 1210 | timed-out "^3.0.0" 1211 | unzip-response "^1.0.2" 1212 | url-parse-lax "^1.0.0" 1213 | 1214 | graceful-fs@^4.1.2, graceful-fs@^4.1.4, graceful-fs@^4.1.6, graceful-fs@^4.1.9: 1215 | version "4.1.11" 1216 | resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658" 1217 | 1218 | "graceful-readlink@>= 1.0.0": 1219 | version "1.0.1" 1220 | resolved "https://registry.yarnpkg.com/graceful-readlink/-/graceful-readlink-1.0.1.tgz#4cafad76bc62f02fa039b2f94e9a3dd3a391a725" 1221 | 1222 | growl@~1.7.0: 1223 | version "1.7.0" 1224 | resolved "https://registry.yarnpkg.com/growl/-/growl-1.7.0.tgz#de2d66136d002e112ba70f3f10c31cf7c350b2da" 1225 | 1226 | handlebars@^4.0.1: 1227 | version "4.0.6" 1228 | resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.0.6.tgz#2ce4484850537f9c97a8026d5399b935c4ed4ed7" 1229 | dependencies: 1230 | async "^1.4.0" 1231 | optimist "^0.6.1" 1232 | source-map "^0.4.4" 1233 | optionalDependencies: 1234 | uglify-js "^2.6" 1235 | 1236 | har-validator@~2.0.6: 1237 | version "2.0.6" 1238 | resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-2.0.6.tgz#cdcbc08188265ad119b6a5a7c8ab70eecfb5d27d" 1239 | dependencies: 1240 | chalk "^1.1.1" 1241 | commander "^2.9.0" 1242 | is-my-json-valid "^2.12.4" 1243 | pinkie-promise "^2.0.0" 1244 | 1245 | has-ansi@^2.0.0: 1246 | version "2.0.0" 1247 | resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" 1248 | dependencies: 1249 | ansi-regex "^2.0.0" 1250 | 1251 | has-binary@0.1.6: 1252 | version "0.1.6" 1253 | resolved "https://registry.yarnpkg.com/has-binary/-/has-binary-0.1.6.tgz#25326f39cfa4f616ad8787894e3af2cfbc7b6e10" 1254 | dependencies: 1255 | isarray "0.0.1" 1256 | 1257 | has-binary@0.1.7: 1258 | version "0.1.7" 1259 | resolved "https://registry.yarnpkg.com/has-binary/-/has-binary-0.1.7.tgz#68e61eb16210c9545a0a5cce06a873912fe1e68c" 1260 | dependencies: 1261 | isarray "0.0.1" 1262 | 1263 | has-color@^0.1.7: 1264 | version "0.1.7" 1265 | resolved "https://registry.yarnpkg.com/has-color/-/has-color-0.1.7.tgz#67144a5260c34fc3cca677d041daf52fe7b78b2f" 1266 | 1267 | has-cors@1.1.0: 1268 | version "1.1.0" 1269 | resolved "https://registry.yarnpkg.com/has-cors/-/has-cors-1.1.0.tgz#5e474793f7ea9843d1bb99c23eef49ff126fff39" 1270 | 1271 | has-flag@^1.0.0: 1272 | version "1.0.0" 1273 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa" 1274 | 1275 | has-unicode@^2.0.0, has-unicode@^2.0.1: 1276 | version "2.0.1" 1277 | resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" 1278 | 1279 | has@^1.0.1: 1280 | version "1.0.1" 1281 | resolved "https://registry.yarnpkg.com/has/-/has-1.0.1.tgz#8461733f538b0837c9361e39a9ab9e9704dc2f28" 1282 | dependencies: 1283 | function-bind "^1.0.2" 1284 | 1285 | hasha@~2.2.0: 1286 | version "2.2.0" 1287 | resolved "https://registry.yarnpkg.com/hasha/-/hasha-2.2.0.tgz#78d7cbfc1e6d66303fe79837365984517b2f6ee1" 1288 | dependencies: 1289 | is-stream "^1.0.1" 1290 | pinkie-promise "^2.0.0" 1291 | 1292 | hawk@~3.1.3: 1293 | version "3.1.3" 1294 | resolved "https://registry.yarnpkg.com/hawk/-/hawk-3.1.3.tgz#078444bd7c1640b0fe540d2c9b73d59678e8e1c4" 1295 | dependencies: 1296 | boom "2.x.x" 1297 | cryptiles "2.x.x" 1298 | hoek "2.x.x" 1299 | sntp "1.x.x" 1300 | 1301 | hoek@2.x.x: 1302 | version "2.16.3" 1303 | resolved "https://registry.yarnpkg.com/hoek/-/hoek-2.16.3.tgz#20bb7403d3cea398e91dc4710a8ff1b8274a25ed" 1304 | 1305 | hosted-git-info@^2.1.4: 1306 | version "2.1.5" 1307 | resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.1.5.tgz#0ba81d90da2e25ab34a332e6ec77936e1598118b" 1308 | 1309 | http-browserify@^1.3.2: 1310 | version "1.7.0" 1311 | resolved "https://registry.yarnpkg.com/http-browserify/-/http-browserify-1.7.0.tgz#33795ade72df88acfbfd36773cefeda764735b20" 1312 | dependencies: 1313 | Base64 "~0.2.0" 1314 | inherits "~2.0.1" 1315 | 1316 | http-errors@~1.5.0: 1317 | version "1.5.1" 1318 | resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.5.1.tgz#788c0d2c1de2c81b9e6e8c01843b6b97eb920750" 1319 | dependencies: 1320 | inherits "2.0.3" 1321 | setprototypeof "1.0.2" 1322 | statuses ">= 1.3.1 < 2" 1323 | 1324 | http-proxy-agent@^1.0.0: 1325 | version "1.0.0" 1326 | resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-1.0.0.tgz#cc1ce38e453bf984a0f7702d2dd59c73d081284a" 1327 | dependencies: 1328 | agent-base "2" 1329 | debug "2" 1330 | extend "3" 1331 | 1332 | http-proxy-middleware@~0.17.1: 1333 | version "0.17.2" 1334 | resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-0.17.2.tgz#572d517a6d2fb1063a469de294eed96066352007" 1335 | dependencies: 1336 | http-proxy "^1.15.1" 1337 | is-glob "^3.0.0" 1338 | lodash "^4.16.2" 1339 | micromatch "^2.3.11" 1340 | 1341 | http-proxy@^1.13.0, http-proxy@^1.15.1: 1342 | version "1.15.2" 1343 | resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.15.2.tgz#642fdcaffe52d3448d2bda3b0079e9409064da31" 1344 | dependencies: 1345 | eventemitter3 "1.x.x" 1346 | requires-port "1.x.x" 1347 | 1348 | http-signature@~1.1.0: 1349 | version "1.1.1" 1350 | resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.1.1.tgz#df72e267066cd0ac67fb76adf8e134a8fbcf91bf" 1351 | dependencies: 1352 | assert-plus "^0.2.0" 1353 | jsprim "^1.2.2" 1354 | sshpk "^1.7.0" 1355 | 1356 | https-browserify@0.0.0: 1357 | version "0.0.0" 1358 | resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-0.0.0.tgz#b3ffdfe734b2a3d4a9efd58e8654c91fce86eafd" 1359 | 1360 | https-proxy-agent@^1.0.0: 1361 | version "1.0.0" 1362 | resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-1.0.0.tgz#35f7da6c48ce4ddbfa264891ac593ee5ff8671e6" 1363 | dependencies: 1364 | agent-base "2" 1365 | debug "2" 1366 | extend "3" 1367 | 1368 | husky@^0.11.9: 1369 | version "0.11.9" 1370 | resolved "https://registry.yarnpkg.com/husky/-/husky-0.11.9.tgz#28cd1dc16bffdca1d4d93592814e5f3c327b38ee" 1371 | dependencies: 1372 | is-ci "^1.0.9" 1373 | normalize-path "^1.0.0" 1374 | 1375 | iconv-lite@0.4.13: 1376 | version "0.4.13" 1377 | resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.13.tgz#1f88aba4ab0b1508e8312acc39345f36e992e2f2" 1378 | 1379 | ieee754@^1.1.4: 1380 | version "1.1.8" 1381 | resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.8.tgz#be33d40ac10ef1926701f6f08a2d86fbfd1ad3e4" 1382 | 1383 | imurmurhash@^0.1.4: 1384 | version "0.1.4" 1385 | resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" 1386 | 1387 | indent-string@^2.1.0: 1388 | version "2.1.0" 1389 | resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-2.1.0.tgz#8e2d48348742121b4a8218b7a137e9a52049dc80" 1390 | dependencies: 1391 | repeating "^2.0.0" 1392 | 1393 | indexof@0.0.1: 1394 | version "0.0.1" 1395 | resolved "https://registry.yarnpkg.com/indexof/-/indexof-0.0.1.tgz#82dc336d232b9062179d05ab3293a66059fd435d" 1396 | 1397 | inflight@^1.0.4: 1398 | version "1.0.6" 1399 | resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" 1400 | dependencies: 1401 | once "^1.3.0" 1402 | wrappy "1" 1403 | 1404 | inherits@2, inherits@2.0.3, inherits@^2.0.1, inherits@~2.0.0, inherits@~2.0.1: 1405 | version "2.0.3" 1406 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" 1407 | 1408 | inherits@2.0.1: 1409 | version "2.0.1" 1410 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1" 1411 | 1412 | ini@~1.3.0: 1413 | version "1.3.4" 1414 | resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.4.tgz#0537cb79daf59b59a1a517dff706c86ec039162e" 1415 | 1416 | interpret@^0.6.4: 1417 | version "0.6.6" 1418 | resolved "https://registry.yarnpkg.com/interpret/-/interpret-0.6.6.tgz#fecd7a18e7ce5ca6abfb953e1f86213a49f1625b" 1419 | 1420 | invariant@^2.2.0: 1421 | version "2.2.2" 1422 | resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.2.tgz#9e1f56ac0acdb6bf303306f338be3b204ae60360" 1423 | dependencies: 1424 | loose-envify "^1.0.0" 1425 | 1426 | ipaddr.js@1.1.1: 1427 | version "1.1.1" 1428 | resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.1.1.tgz#c791d95f52b29c1247d5df80ada39b8a73647230" 1429 | 1430 | is-absolute@^0.2.3: 1431 | version "0.2.6" 1432 | resolved "https://registry.yarnpkg.com/is-absolute/-/is-absolute-0.2.6.tgz#20de69f3db942ef2d87b9c2da36f172235b1b5eb" 1433 | dependencies: 1434 | is-relative "^0.2.1" 1435 | is-windows "^0.2.0" 1436 | 1437 | is-arrayish@^0.2.1: 1438 | version "0.2.1" 1439 | resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" 1440 | 1441 | is-binary-path@^1.0.0: 1442 | version "1.0.1" 1443 | resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" 1444 | dependencies: 1445 | binary-extensions "^1.0.0" 1446 | 1447 | is-buffer@^1.0.2: 1448 | version "1.1.4" 1449 | resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.4.tgz#cfc86ccd5dc5a52fa80489111c6920c457e2d98b" 1450 | 1451 | is-builtin-module@^1.0.0: 1452 | version "1.0.0" 1453 | resolved "https://registry.yarnpkg.com/is-builtin-module/-/is-builtin-module-1.0.0.tgz#540572d34f7ac3119f8f76c30cbc1b1e037affbe" 1454 | dependencies: 1455 | builtin-modules "^1.0.0" 1456 | 1457 | is-ci@^1.0.9: 1458 | version "1.0.10" 1459 | resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-1.0.10.tgz#f739336b2632365061a9d48270cd56ae3369318e" 1460 | dependencies: 1461 | ci-info "^1.0.0" 1462 | 1463 | is-dotfile@^1.0.0: 1464 | version "1.0.2" 1465 | resolved "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.2.tgz#2c132383f39199f8edc268ca01b9b007d205cc4d" 1466 | 1467 | is-equal-shallow@^0.1.3: 1468 | version "0.1.3" 1469 | resolved "https://registry.yarnpkg.com/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz#2238098fc221de0bcfa5d9eac4c45d638aa1c534" 1470 | dependencies: 1471 | is-primitive "^2.0.0" 1472 | 1473 | is-extendable@^0.1.1: 1474 | version "0.1.1" 1475 | resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" 1476 | 1477 | is-extglob@^1.0.0: 1478 | version "1.0.0" 1479 | resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0" 1480 | 1481 | is-extglob@^2.1.0: 1482 | version "2.1.0" 1483 | resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.0.tgz#33411a482b046bf95e6b0cb27ee2711af4cf15ad" 1484 | 1485 | is-finite@^1.0.0: 1486 | version "1.0.2" 1487 | resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.0.2.tgz#cc6677695602be550ef11e8b4aa6305342b6d0aa" 1488 | dependencies: 1489 | number-is-nan "^1.0.0" 1490 | 1491 | is-fullwidth-code-point@^1.0.0: 1492 | version "1.0.0" 1493 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" 1494 | dependencies: 1495 | number-is-nan "^1.0.0" 1496 | 1497 | is-glob@^2.0.0, is-glob@^2.0.1: 1498 | version "2.0.1" 1499 | resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863" 1500 | dependencies: 1501 | is-extglob "^1.0.0" 1502 | 1503 | is-glob@^3.0.0: 1504 | version "3.1.0" 1505 | resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a" 1506 | dependencies: 1507 | is-extglob "^2.1.0" 1508 | 1509 | is-my-json-valid@^2.12.4: 1510 | version "2.15.0" 1511 | resolved "https://registry.yarnpkg.com/is-my-json-valid/-/is-my-json-valid-2.15.0.tgz#936edda3ca3c211fd98f3b2d3e08da43f7b2915b" 1512 | dependencies: 1513 | generate-function "^2.0.0" 1514 | generate-object-property "^1.1.0" 1515 | jsonpointer "^4.0.0" 1516 | xtend "^4.0.0" 1517 | 1518 | is-npm@^1.0.0: 1519 | version "1.0.0" 1520 | resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-1.0.0.tgz#f2fb63a65e4905b406c86072765a1a4dc793b9f4" 1521 | 1522 | is-number@^0.1.1: 1523 | version "0.1.1" 1524 | resolved "https://registry.yarnpkg.com/is-number/-/is-number-0.1.1.tgz#69a7af116963d47206ec9bd9b48a14216f1e3806" 1525 | 1526 | is-number@^2.0.2, is-number@^2.1.0: 1527 | version "2.1.0" 1528 | resolved "https://registry.yarnpkg.com/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f" 1529 | dependencies: 1530 | kind-of "^3.0.2" 1531 | 1532 | is-obj@^1.0.0: 1533 | version "1.0.1" 1534 | resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" 1535 | 1536 | is-plain-obj@^1.0.0: 1537 | version "1.1.0" 1538 | resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" 1539 | 1540 | is-posix-bracket@^0.1.0: 1541 | version "0.1.1" 1542 | resolved "https://registry.yarnpkg.com/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz#3334dc79774368e92f016e6fbc0a88f5cd6e6bc4" 1543 | 1544 | is-primitive@^2.0.0: 1545 | version "2.0.0" 1546 | resolved "https://registry.yarnpkg.com/is-primitive/-/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575" 1547 | 1548 | is-property@^1.0.0: 1549 | version "1.0.2" 1550 | resolved "https://registry.yarnpkg.com/is-property/-/is-property-1.0.2.tgz#57fe1c4e48474edd65b09911f26b1cd4095dda84" 1551 | 1552 | is-redirect@^1.0.0: 1553 | version "1.0.0" 1554 | resolved "https://registry.yarnpkg.com/is-redirect/-/is-redirect-1.0.0.tgz#1d03dded53bd8db0f30c26e4f95d36fc7c87dc24" 1555 | 1556 | is-relative@^0.2.1: 1557 | version "0.2.1" 1558 | resolved "https://registry.yarnpkg.com/is-relative/-/is-relative-0.2.1.tgz#d27f4c7d516d175fb610db84bbeef23c3bc97aa5" 1559 | dependencies: 1560 | is-unc-path "^0.1.1" 1561 | 1562 | is-retry-allowed@^1.0.0: 1563 | version "1.1.0" 1564 | resolved "https://registry.yarnpkg.com/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz#11a060568b67339444033d0125a61a20d564fb34" 1565 | 1566 | is-stream@^1.0.0, is-stream@^1.0.1: 1567 | version "1.1.0" 1568 | resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" 1569 | 1570 | is-typedarray@~1.0.0: 1571 | version "1.0.0" 1572 | resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" 1573 | 1574 | is-unc-path@^0.1.1: 1575 | version "0.1.1" 1576 | resolved "https://registry.yarnpkg.com/is-unc-path/-/is-unc-path-0.1.1.tgz#ab2533d77ad733561124c3dc0f5cd8b90054c86b" 1577 | dependencies: 1578 | unc-path-regex "^0.1.0" 1579 | 1580 | is-utf8@^0.2.0: 1581 | version "0.2.1" 1582 | resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" 1583 | 1584 | is-windows@^0.2.0: 1585 | version "0.2.0" 1586 | resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-0.2.0.tgz#de1aa6d63ea29dd248737b69f1ff8b8002d2108c" 1587 | 1588 | isarray@0.0.1: 1589 | version "0.0.1" 1590 | resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" 1591 | 1592 | isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: 1593 | version "1.0.0" 1594 | resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" 1595 | 1596 | isbinaryfile@^3.0.0: 1597 | version "3.0.1" 1598 | resolved "https://registry.yarnpkg.com/isbinaryfile/-/isbinaryfile-3.0.1.tgz#6e99573675372e841a0520c036b41513d783e79e" 1599 | 1600 | isexe@^1.1.1: 1601 | version "1.1.2" 1602 | resolved "https://registry.yarnpkg.com/isexe/-/isexe-1.1.2.tgz#36f3e22e60750920f5e7241a476a8c6a42275ad0" 1603 | 1604 | isobject@^2.0.0, isobject@^2.1.0: 1605 | version "2.1.0" 1606 | resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" 1607 | dependencies: 1608 | isarray "1.0.0" 1609 | 1610 | isstream@~0.1.2: 1611 | version "0.1.2" 1612 | resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" 1613 | 1614 | istanbul@^0.4.0: 1615 | version "0.4.5" 1616 | resolved "https://registry.yarnpkg.com/istanbul/-/istanbul-0.4.5.tgz#65c7d73d4c4da84d4f3ac310b918fb0b8033733b" 1617 | dependencies: 1618 | abbrev "1.0.x" 1619 | async "1.x" 1620 | escodegen "1.8.x" 1621 | esprima "2.7.x" 1622 | glob "^5.0.15" 1623 | handlebars "^4.0.1" 1624 | js-yaml "3.x" 1625 | mkdirp "0.5.x" 1626 | nopt "3.x" 1627 | once "1.x" 1628 | resolve "1.1.x" 1629 | supports-color "^3.1.0" 1630 | which "^1.1.1" 1631 | wordwrap "^1.0.0" 1632 | 1633 | jasmine-core@^2.5.2, jasmine-core@~2.5.2: 1634 | version "2.5.2" 1635 | resolved "https://registry.yarnpkg.com/jasmine-core/-/jasmine-core-2.5.2.tgz#6f61bd79061e27f43e6f9355e44b3c6cab6ff297" 1636 | 1637 | jasmine@^2.5.2: 1638 | version "2.5.2" 1639 | resolved "https://registry.yarnpkg.com/jasmine/-/jasmine-2.5.2.tgz#6283cef7085c095cc25d651e954df004f7e3e421" 1640 | dependencies: 1641 | exit "^0.1.2" 1642 | glob "^7.0.6" 1643 | jasmine-core "~2.5.2" 1644 | 1645 | jodid25519@^1.0.0: 1646 | version "1.0.2" 1647 | resolved "https://registry.yarnpkg.com/jodid25519/-/jodid25519-1.0.2.tgz#06d4912255093419477d425633606e0e90782967" 1648 | dependencies: 1649 | jsbn "~0.1.0" 1650 | 1651 | js-tokens@^2.0.0: 1652 | version "2.0.0" 1653 | resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-2.0.0.tgz#79903f5563ee778cc1162e6dcf1a0027c97f9cb5" 1654 | 1655 | js-yaml@3.x: 1656 | version "3.7.0" 1657 | resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.7.0.tgz#5c967ddd837a9bfdca5f2de84253abe8a1c03b80" 1658 | dependencies: 1659 | argparse "^1.0.7" 1660 | esprima "^2.6.0" 1661 | 1662 | jsbn@~0.1.0: 1663 | version "0.1.0" 1664 | resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.0.tgz#650987da0dd74f4ebf5a11377a2aa2d273e97dfd" 1665 | 1666 | json-loader@^0.5.4: 1667 | version "0.5.4" 1668 | resolved "https://registry.yarnpkg.com/json-loader/-/json-loader-0.5.4.tgz#8baa1365a632f58a3c46d20175fc6002c96e37de" 1669 | 1670 | json-schema@0.2.3: 1671 | version "0.2.3" 1672 | resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" 1673 | 1674 | json-stringify-safe@~5.0.1: 1675 | version "5.0.1" 1676 | resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" 1677 | 1678 | json3@3.2.6: 1679 | version "3.2.6" 1680 | resolved "https://registry.yarnpkg.com/json3/-/json3-3.2.6.tgz#f6efc93c06a04de9aec53053df2559bb19e2038b" 1681 | 1682 | json3@3.3.2, json3@^3.3.2: 1683 | version "3.3.2" 1684 | resolved "https://registry.yarnpkg.com/json3/-/json3-3.3.2.tgz#3c0434743df93e2f5c42aee7b19bcb483575f4e1" 1685 | 1686 | json5@^0.5.0: 1687 | version "0.5.1" 1688 | resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821" 1689 | 1690 | jsonfile@^2.1.0: 1691 | version "2.4.0" 1692 | resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-2.4.0.tgz#3736a2b428b87bbda0cc83b53fa3d633a35c2ae8" 1693 | optionalDependencies: 1694 | graceful-fs "^4.1.6" 1695 | 1696 | jsonpointer@^4.0.0: 1697 | version "4.0.0" 1698 | resolved "https://registry.yarnpkg.com/jsonpointer/-/jsonpointer-4.0.0.tgz#6661e161d2fc445f19f98430231343722e1fcbd5" 1699 | 1700 | jspm-config@^0.3.0: 1701 | version "0.3.2" 1702 | resolved "https://registry.yarnpkg.com/jspm-config/-/jspm-config-0.3.2.tgz#57683d6472d1cb96b92ad66153f9c56fd92f77ec" 1703 | dependencies: 1704 | any-promise "^1.3.0" 1705 | graceful-fs "^4.1.4" 1706 | make-error-cause "^1.2.1" 1707 | object.pick "^1.1.2" 1708 | parse-json "^2.2.0" 1709 | strip-bom "^2.0.0" 1710 | thenify "^3.2.0" 1711 | throat "^3.0.0" 1712 | xtend "^4.0.1" 1713 | 1714 | jsprim@^1.2.2: 1715 | version "1.3.1" 1716 | resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.3.1.tgz#2a7256f70412a29ee3670aaca625994c4dcff252" 1717 | dependencies: 1718 | extsprintf "1.0.2" 1719 | json-schema "0.2.3" 1720 | verror "1.3.6" 1721 | 1722 | karma-coverage@^1.1.1: 1723 | version "1.1.1" 1724 | resolved "https://registry.yarnpkg.com/karma-coverage/-/karma-coverage-1.1.1.tgz#5aff8b39cf6994dc22de4c84362c76001b637cf6" 1725 | dependencies: 1726 | dateformat "^1.0.6" 1727 | istanbul "^0.4.0" 1728 | lodash "^3.8.0" 1729 | minimatch "^3.0.0" 1730 | source-map "^0.5.1" 1731 | 1732 | karma-firefox-launcher@^1.0.0: 1733 | version "1.0.0" 1734 | resolved "https://registry.yarnpkg.com/karma-firefox-launcher/-/karma-firefox-launcher-1.0.0.tgz#e08af3ce42e39860c2952ea7b7eaa64d63508bdc" 1735 | 1736 | karma-growler-reporter@0.0.1: 1737 | version "0.0.1" 1738 | resolved "https://registry.yarnpkg.com/karma-growler-reporter/-/karma-growler-reporter-0.0.1.tgz#81721037ff5f6df12f889c02fd8ac4fe01c7aef9" 1739 | dependencies: 1740 | growl "~1.7.0" 1741 | 1742 | karma-jasmine@^1.0.2: 1743 | version "1.0.2" 1744 | resolved "https://registry.yarnpkg.com/karma-jasmine/-/karma-jasmine-1.0.2.tgz#c0b3ab327bf207db60e17fa27db37cfdef5d8e6c" 1745 | 1746 | "karma-phantomjs-launcher@https://github.com/karma-runner/karma-phantomjs-launcher.git": 1747 | version "1.0.2" 1748 | resolved "https://github.com/karma-runner/karma-phantomjs-launcher.git#fe013cd653abee6d3416c20b83e82e0b8790052c" 1749 | dependencies: 1750 | lodash "^4.0.1" 1751 | phantomjs-prebuilt "^2.1.7" 1752 | 1753 | karma-sinon@^1.0.5: 1754 | version "1.0.5" 1755 | resolved "https://registry.yarnpkg.com/karma-sinon/-/karma-sinon-1.0.5.tgz#4e3443f2830fdecff624d3747163f1217daa2a9a" 1756 | 1757 | karma-sourcemap-loader@^0.3.7: 1758 | version "0.3.7" 1759 | resolved "https://registry.yarnpkg.com/karma-sourcemap-loader/-/karma-sourcemap-loader-0.3.7.tgz#91322c77f8f13d46fed062b042e1009d4c4505d8" 1760 | dependencies: 1761 | graceful-fs "^4.1.2" 1762 | 1763 | karma-webpack@^1.8.0: 1764 | version "1.8.0" 1765 | resolved "https://registry.yarnpkg.com/karma-webpack/-/karma-webpack-1.8.0.tgz#340c7999eb3745b47becab47d0d304dac2c55257" 1766 | dependencies: 1767 | async "~0.9.0" 1768 | loader-utils "^0.2.5" 1769 | lodash "^3.8.0" 1770 | source-map "^0.1.41" 1771 | webpack-dev-middleware "^1.0.11" 1772 | 1773 | karma@^1.3.0: 1774 | version "1.3.0" 1775 | resolved "https://registry.yarnpkg.com/karma/-/karma-1.3.0.tgz#b2b94e8f499fadd0069d54f9aef4a4d48ec5cc1f" 1776 | dependencies: 1777 | bluebird "^3.3.0" 1778 | body-parser "^1.12.4" 1779 | chokidar "^1.4.1" 1780 | colors "^1.1.0" 1781 | combine-lists "^1.0.0" 1782 | connect "^3.3.5" 1783 | core-js "^2.2.0" 1784 | di "^0.0.1" 1785 | dom-serialize "^2.2.0" 1786 | expand-braces "^0.1.1" 1787 | glob "^7.0.3" 1788 | graceful-fs "^4.1.2" 1789 | http-proxy "^1.13.0" 1790 | isbinaryfile "^3.0.0" 1791 | lodash "^3.8.0" 1792 | log4js "^0.6.31" 1793 | mime "^1.3.4" 1794 | minimatch "^3.0.0" 1795 | optimist "^0.6.1" 1796 | qjobs "^1.1.4" 1797 | range-parser "^1.2.0" 1798 | rimraf "^2.3.3" 1799 | socket.io "1.4.7" 1800 | source-map "^0.5.3" 1801 | tmp "0.0.28" 1802 | useragent "^2.1.9" 1803 | 1804 | kew@~0.7.0: 1805 | version "0.7.0" 1806 | resolved "https://registry.yarnpkg.com/kew/-/kew-0.7.0.tgz#79d93d2d33363d6fdd2970b335d9141ad591d79b" 1807 | 1808 | kind-of@^3.0.2: 1809 | version "3.0.4" 1810 | resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.0.4.tgz#7b8ecf18a4e17f8269d73b501c9f232c96887a74" 1811 | dependencies: 1812 | is-buffer "^1.0.2" 1813 | 1814 | klaw@^1.0.0: 1815 | version "1.3.1" 1816 | resolved "https://registry.yarnpkg.com/klaw/-/klaw-1.3.1.tgz#4088433b46b3b1ba259d78785d8e96f73ba02439" 1817 | optionalDependencies: 1818 | graceful-fs "^4.1.9" 1819 | 1820 | latest-version@^2.0.0: 1821 | version "2.0.0" 1822 | resolved "https://registry.yarnpkg.com/latest-version/-/latest-version-2.0.0.tgz#56f8d6139620847b8017f8f1f4d78e211324168b" 1823 | dependencies: 1824 | package-json "^2.0.0" 1825 | 1826 | lazy-ass@1.3.0: 1827 | version "1.3.0" 1828 | resolved "https://registry.yarnpkg.com/lazy-ass/-/lazy-ass-1.3.0.tgz#7d0d14eef3ec9702c6f30c60ea81f1a8d3f900fb" 1829 | 1830 | lazy-cache@^1.0.3: 1831 | version "1.0.4" 1832 | resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-1.0.4.tgz#a1d78fc3a50474cb80845d3b3b6e1da49a446e8e" 1833 | 1834 | lazy-req@^1.1.0: 1835 | version "1.1.0" 1836 | resolved "https://registry.yarnpkg.com/lazy-req/-/lazy-req-1.1.0.tgz#bdaebead30f8d824039ce0ce149d4daa07ba1fac" 1837 | 1838 | levn@~0.3.0: 1839 | version "0.3.0" 1840 | resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" 1841 | dependencies: 1842 | prelude-ls "~1.1.2" 1843 | type-check "~0.3.2" 1844 | 1845 | listify@^1.0.0: 1846 | version "1.0.0" 1847 | resolved "https://registry.yarnpkg.com/listify/-/listify-1.0.0.tgz#03ca7ba2d150d4267773f74e57558d1053d2bee3" 1848 | 1849 | load-json-file@^1.0.0: 1850 | version "1.1.0" 1851 | resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0" 1852 | dependencies: 1853 | graceful-fs "^4.1.2" 1854 | parse-json "^2.2.0" 1855 | pify "^2.0.0" 1856 | pinkie-promise "^2.0.0" 1857 | strip-bom "^2.0.0" 1858 | 1859 | loader-utils@^0.2.11, loader-utils@^0.2.5, loader-utils@^0.2.6, loader-utils@^0.2.7: 1860 | version "0.2.16" 1861 | resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-0.2.16.tgz#f08632066ed8282835dff88dfb52704765adee6d" 1862 | dependencies: 1863 | big.js "^3.1.3" 1864 | emojis-list "^2.0.0" 1865 | json5 "^0.5.0" 1866 | object-assign "^4.0.1" 1867 | 1868 | lockfile@^1.0.1: 1869 | version "1.0.2" 1870 | resolved "https://registry.yarnpkg.com/lockfile/-/lockfile-1.0.2.tgz#97e1990174f696cbe0a3acd58a43b84aa30c7c83" 1871 | 1872 | lodash@^3.8.0: 1873 | version "3.10.1" 1874 | resolved "https://registry.yarnpkg.com/lodash/-/lodash-3.10.1.tgz#5bf45e8e49ba4189e17d482789dfd15bd140b7b6" 1875 | 1876 | lodash@^4.0.1, lodash@^4.14.0, lodash@^4.16.2, lodash@^4.5.0: 1877 | version "4.17.2" 1878 | resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.2.tgz#34a3055babe04ce42467b607d700072c7ff6bf42" 1879 | 1880 | log-update@^1.0.2: 1881 | version "1.0.2" 1882 | resolved "https://registry.yarnpkg.com/log-update/-/log-update-1.0.2.tgz#19929f64c4093d2d2e7075a1dad8af59c296b8d1" 1883 | dependencies: 1884 | ansi-escapes "^1.0.0" 1885 | cli-cursor "^1.0.2" 1886 | 1887 | log4js@^0.6.31: 1888 | version "0.6.38" 1889 | resolved "https://registry.yarnpkg.com/log4js/-/log4js-0.6.38.tgz#2c494116695d6fb25480943d3fc872e662a522fd" 1890 | dependencies: 1891 | readable-stream "~1.0.2" 1892 | semver "~4.3.3" 1893 | 1894 | lolex@^1.4.0: 1895 | version "1.5.2" 1896 | resolved "https://registry.yarnpkg.com/lolex/-/lolex-1.5.2.tgz#94a4ce41c61185a05e98b8660dc509423ac1c416" 1897 | 1898 | longest@^1.0.1: 1899 | version "1.0.1" 1900 | resolved "https://registry.yarnpkg.com/longest/-/longest-1.0.1.tgz#30a0b2da38f73770e8294a0d22e6625ed77d0097" 1901 | 1902 | loose-envify@^1.0.0: 1903 | version "1.3.0" 1904 | resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.3.0.tgz#6b26248c42f6d4fa4b0d8542f78edfcde35642a8" 1905 | dependencies: 1906 | js-tokens "^2.0.0" 1907 | 1908 | loud-rejection@^1.0.0: 1909 | version "1.6.0" 1910 | resolved "https://registry.yarnpkg.com/loud-rejection/-/loud-rejection-1.6.0.tgz#5b46f80147edee578870f086d04821cf998e551f" 1911 | dependencies: 1912 | currently-unhandled "^0.4.1" 1913 | signal-exit "^3.0.0" 1914 | 1915 | lowercase-keys@^1.0.0: 1916 | version "1.0.0" 1917 | resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.0.tgz#4e3366b39e7f5457e35f1324bdf6f88d0bfc7306" 1918 | 1919 | lru-cache@2.2.x: 1920 | version "2.2.4" 1921 | resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-2.2.4.tgz#6c658619becf14031d0d0b594b16042ce4dc063d" 1922 | 1923 | make-error-cause@^1.2.1: 1924 | version "1.2.2" 1925 | resolved "https://registry.yarnpkg.com/make-error-cause/-/make-error-cause-1.2.2.tgz#df0388fcd0b37816dff0a5fb8108939777dcbc9d" 1926 | dependencies: 1927 | make-error "^1.2.0" 1928 | 1929 | make-error@^1.2.0: 1930 | version "1.2.1" 1931 | resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.2.1.tgz#9a6dfb4844423b9f145806728d05c6e935670e75" 1932 | 1933 | map-obj@^1.0.0, map-obj@^1.0.1: 1934 | version "1.0.1" 1935 | resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d" 1936 | 1937 | media-typer@0.3.0: 1938 | version "0.3.0" 1939 | resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" 1940 | 1941 | memory-fs@^0.2.0: 1942 | version "0.2.0" 1943 | resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.2.0.tgz#f2bb25368bc121e391c2520de92969caee0a0290" 1944 | 1945 | memory-fs@~0.3.0: 1946 | version "0.3.0" 1947 | resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.3.0.tgz#7bcc6b629e3a43e871d7e29aca6ae8a7f15cbb20" 1948 | dependencies: 1949 | errno "^0.1.3" 1950 | readable-stream "^2.0.1" 1951 | 1952 | meow@^3.3.0: 1953 | version "3.7.0" 1954 | resolved "https://registry.yarnpkg.com/meow/-/meow-3.7.0.tgz#72cb668b425228290abbfa856892587308a801fb" 1955 | dependencies: 1956 | camelcase-keys "^2.0.0" 1957 | decamelize "^1.1.2" 1958 | loud-rejection "^1.0.0" 1959 | map-obj "^1.0.1" 1960 | minimist "^1.1.3" 1961 | normalize-package-data "^2.3.4" 1962 | object-assign "^4.0.1" 1963 | read-pkg-up "^1.0.1" 1964 | redent "^1.0.0" 1965 | trim-newlines "^1.0.0" 1966 | 1967 | merge-descriptors@1.0.1: 1968 | version "1.0.1" 1969 | resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" 1970 | 1971 | methods@~1.1.2: 1972 | version "1.1.2" 1973 | resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" 1974 | 1975 | micromatch@^2.1.5, micromatch@^2.3.11: 1976 | version "2.3.11" 1977 | resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565" 1978 | dependencies: 1979 | arr-diff "^2.0.0" 1980 | array-unique "^0.2.1" 1981 | braces "^1.8.2" 1982 | expand-brackets "^0.1.4" 1983 | extglob "^0.3.1" 1984 | filename-regex "^2.0.0" 1985 | is-extglob "^1.0.0" 1986 | is-glob "^2.0.1" 1987 | kind-of "^3.0.2" 1988 | normalize-path "^2.0.1" 1989 | object.omit "^2.0.0" 1990 | parse-glob "^3.0.4" 1991 | regex-cache "^0.4.2" 1992 | 1993 | "mime-db@>= 1.24.0 < 2", mime-db@~1.25.0: 1994 | version "1.25.0" 1995 | resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.25.0.tgz#c18dbd7c73a5dbf6f44a024dc0d165a1e7b1c392" 1996 | 1997 | mime-db@~1.12.0: 1998 | version "1.12.0" 1999 | resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.12.0.tgz#3d0c63180f458eb10d325aaa37d7c58ae312e9d7" 2000 | 2001 | mime-types@^2.1.11, mime-types@^2.1.12, mime-types@~2.1.11, mime-types@~2.1.13, mime-types@~2.1.7: 2002 | version "2.1.13" 2003 | resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.13.tgz#e07aaa9c6c6b9a7ca3012c69003ad25a39e92a88" 2004 | dependencies: 2005 | mime-db "~1.25.0" 2006 | 2007 | mime-types@~2.0.4: 2008 | version "2.0.14" 2009 | resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.0.14.tgz#310e159db23e077f8bb22b748dabfa4957140aa6" 2010 | dependencies: 2011 | mime-db "~1.12.0" 2012 | 2013 | mime@1.3.4, mime@^1.3.4: 2014 | version "1.3.4" 2015 | resolved "https://registry.yarnpkg.com/mime/-/mime-1.3.4.tgz#115f9e3b6b3daf2959983cb38f149a2d40eb5d53" 2016 | 2017 | "minimatch@2 || 3", minimatch@^3.0.0, minimatch@^3.0.2: 2018 | version "3.0.3" 2019 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.3.tgz#2a4e4090b96b2db06a9d7df01055a62a77c9b774" 2020 | dependencies: 2021 | brace-expansion "^1.0.0" 2022 | 2023 | minimist@0.0.8, minimist@~0.0.1: 2024 | version "0.0.8" 2025 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" 2026 | 2027 | minimist@^1.1.3, minimist@^1.2.0: 2028 | version "1.2.0" 2029 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" 2030 | 2031 | mkdirp@0.5.0: 2032 | version "0.5.0" 2033 | resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.0.tgz#1d73076a6df986cd9344e15e71fcc05a4c9abf12" 2034 | dependencies: 2035 | minimist "0.0.8" 2036 | 2037 | mkdirp@0.5.x, "mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.0, mkdirp@~0.5.1: 2038 | version "0.5.1" 2039 | resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" 2040 | dependencies: 2041 | minimist "0.0.8" 2042 | 2043 | ms@0.7.1: 2044 | version "0.7.1" 2045 | resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.1.tgz#9cd13c03adbff25b65effde7ce864ee952017098" 2046 | 2047 | nan@^2.3.0: 2048 | version "2.4.0" 2049 | resolved "https://registry.yarnpkg.com/nan/-/nan-2.4.0.tgz#fb3c59d45fe4effe215f0b890f8adf6eb32d2232" 2050 | 2051 | negotiator@0.4.9: 2052 | version "0.4.9" 2053 | resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.4.9.tgz#92e46b6db53c7e421ed64a2bc94f08be7630df3f" 2054 | 2055 | negotiator@0.6.1: 2056 | version "0.6.1" 2057 | resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.1.tgz#2b327184e8992101177b28563fb5e7102acd0ca9" 2058 | 2059 | ng-describe@^1.8.0: 2060 | version "1.8.0" 2061 | resolved "https://registry.yarnpkg.com/ng-describe/-/ng-describe-1.8.0.tgz#d1e68bf967a9a62f2a855694ec8bd6f16feb7707" 2062 | dependencies: 2063 | check-more-types "2.10.0" 2064 | lazy-ass "1.3.0" 2065 | 2066 | node-libs-browser@^0.6.0: 2067 | version "0.6.0" 2068 | resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-0.6.0.tgz#244806d44d319e048bc8607b5cc4eaf9a29d2e3c" 2069 | dependencies: 2070 | assert "^1.1.1" 2071 | browserify-zlib "~0.1.4" 2072 | buffer "^4.9.0" 2073 | console-browserify "^1.1.0" 2074 | constants-browserify "0.0.1" 2075 | crypto-browserify "~3.2.6" 2076 | domain-browser "^1.1.1" 2077 | events "^1.0.0" 2078 | http-browserify "^1.3.2" 2079 | https-browserify "0.0.0" 2080 | os-browserify "~0.1.2" 2081 | path-browserify "0.0.0" 2082 | process "^0.11.0" 2083 | punycode "^1.2.4" 2084 | querystring-es3 "~0.2.0" 2085 | readable-stream "^1.1.13" 2086 | stream-browserify "^1.0.0" 2087 | string_decoder "~0.10.25" 2088 | timers-browserify "^1.0.1" 2089 | tty-browserify "0.0.0" 2090 | url "~0.10.1" 2091 | util "~0.10.3" 2092 | vm-browserify "0.0.4" 2093 | 2094 | node-pre-gyp@^0.6.29: 2095 | version "0.6.32" 2096 | resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.6.32.tgz#fc452b376e7319b3d255f5f34853ef6fd8fe1fd5" 2097 | dependencies: 2098 | mkdirp "~0.5.1" 2099 | nopt "~3.0.6" 2100 | npmlog "^4.0.1" 2101 | rc "~1.1.6" 2102 | request "^2.79.0" 2103 | rimraf "~2.5.4" 2104 | semver "~5.3.0" 2105 | tar "~2.2.1" 2106 | tar-pack "~3.3.0" 2107 | 2108 | node-status-codes@^1.0.0: 2109 | version "1.0.0" 2110 | resolved "https://registry.yarnpkg.com/node-status-codes/-/node-status-codes-1.0.0.tgz#5ae5541d024645d32a58fcddc9ceecea7ae3ac2f" 2111 | 2112 | node-uuid@~1.4.7: 2113 | version "1.4.7" 2114 | resolved "https://registry.yarnpkg.com/node-uuid/-/node-uuid-1.4.7.tgz#6da5a17668c4b3dd59623bda11cf7fa4c1f60a6f" 2115 | 2116 | nopt@3.x, nopt@~3.0.6: 2117 | version "3.0.6" 2118 | resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9" 2119 | dependencies: 2120 | abbrev "1" 2121 | 2122 | nopt@~1.0.10: 2123 | version "1.0.10" 2124 | resolved "https://registry.yarnpkg.com/nopt/-/nopt-1.0.10.tgz#6ddd21bd2a31417b92727dd585f8a6f37608ebee" 2125 | dependencies: 2126 | abbrev "1" 2127 | 2128 | normalize-package-data@^2.3.2, normalize-package-data@^2.3.4: 2129 | version "2.3.5" 2130 | resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.3.5.tgz#8d924f142960e1777e7ffe170543631cc7cb02df" 2131 | dependencies: 2132 | hosted-git-info "^2.1.4" 2133 | is-builtin-module "^1.0.0" 2134 | semver "2 || 3 || 4 || 5" 2135 | validate-npm-package-license "^3.0.1" 2136 | 2137 | normalize-path@^1.0.0: 2138 | version "1.0.0" 2139 | resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-1.0.0.tgz#32d0e472f91ff345701c15a8311018d3b0a90379" 2140 | 2141 | normalize-path@^2.0.1: 2142 | version "2.0.1" 2143 | resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.0.1.tgz#47886ac1662760d4261b7d979d241709d3ce3f7a" 2144 | 2145 | npmlog@^4.0.1: 2146 | version "4.0.1" 2147 | resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.0.1.tgz#d14f503b4cd79710375553004ba96e6662fbc0b8" 2148 | dependencies: 2149 | are-we-there-yet "~1.1.2" 2150 | console-control-strings "~1.1.0" 2151 | gauge "~2.7.1" 2152 | set-blocking "~2.0.0" 2153 | 2154 | number-is-nan@^1.0.0: 2155 | version "1.0.1" 2156 | resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" 2157 | 2158 | oauth-sign@~0.8.1: 2159 | version "0.8.2" 2160 | resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43" 2161 | 2162 | object-assign@^4.0.1, object-assign@^4.1.0: 2163 | version "4.1.0" 2164 | resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.0.tgz#7a3b3d0e98063d43f4c03f2e8ae6cd51a86883a0" 2165 | 2166 | object-component@0.0.3: 2167 | version "0.0.3" 2168 | resolved "https://registry.yarnpkg.com/object-component/-/object-component-0.0.3.tgz#f0c69aa50efc95b866c186f400a33769cb2f1291" 2169 | 2170 | object.omit@^2.0.0: 2171 | version "2.0.1" 2172 | resolved "https://registry.yarnpkg.com/object.omit/-/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa" 2173 | dependencies: 2174 | for-own "^0.1.4" 2175 | is-extendable "^0.1.1" 2176 | 2177 | object.pick@^1.1.1, object.pick@^1.1.2: 2178 | version "1.2.0" 2179 | resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.2.0.tgz#b5392bee9782da6d9fb7d6afaf539779f1234c2b" 2180 | dependencies: 2181 | isobject "^2.1.0" 2182 | 2183 | on-finished@~2.3.0: 2184 | version "2.3.0" 2185 | resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" 2186 | dependencies: 2187 | ee-first "1.1.1" 2188 | 2189 | on-headers@~1.0.1: 2190 | version "1.0.1" 2191 | resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.1.tgz#928f5d0f470d49342651ea6794b0857c100693f7" 2192 | 2193 | once@1.x, once@^1.3.0: 2194 | version "1.4.0" 2195 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" 2196 | dependencies: 2197 | wrappy "1" 2198 | 2199 | once@~1.3.3: 2200 | version "1.3.3" 2201 | resolved "https://registry.yarnpkg.com/once/-/once-1.3.3.tgz#b2e261557ce4c314ec8304f3fa82663e4297ca20" 2202 | dependencies: 2203 | wrappy "1" 2204 | 2205 | onetime@^1.0.0: 2206 | version "1.1.0" 2207 | resolved "https://registry.yarnpkg.com/onetime/-/onetime-1.1.0.tgz#a1f7838f8314c516f05ecefcbc4ccfe04b4ed789" 2208 | 2209 | open@0.0.5: 2210 | version "0.0.5" 2211 | resolved "https://registry.yarnpkg.com/open/-/open-0.0.5.tgz#42c3e18ec95466b6bf0dc42f3a2945c3f0cad8fc" 2212 | 2213 | optimist@^0.6.1, optimist@~0.6.0, optimist@~0.6.1: 2214 | version "0.6.1" 2215 | resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686" 2216 | dependencies: 2217 | minimist "~0.0.1" 2218 | wordwrap "~0.0.2" 2219 | 2220 | optionator@^0.8.1: 2221 | version "0.8.2" 2222 | resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64" 2223 | dependencies: 2224 | deep-is "~0.1.3" 2225 | fast-levenshtein "~2.0.4" 2226 | levn "~0.3.0" 2227 | prelude-ls "~1.1.2" 2228 | type-check "~0.3.2" 2229 | wordwrap "~1.0.0" 2230 | 2231 | options@>=0.0.5: 2232 | version "0.0.6" 2233 | resolved "https://registry.yarnpkg.com/options/-/options-0.0.6.tgz#ec22d312806bb53e731773e7cdaefcf1c643128f" 2234 | 2235 | original@>=0.0.5: 2236 | version "1.0.0" 2237 | resolved "https://registry.yarnpkg.com/original/-/original-1.0.0.tgz#9147f93fa1696d04be61e01bd50baeaca656bd3b" 2238 | dependencies: 2239 | url-parse "1.0.x" 2240 | 2241 | os-browserify@~0.1.2: 2242 | version "0.1.2" 2243 | resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.1.2.tgz#49ca0293e0b19590a5f5de10c7f265a617d8fe54" 2244 | 2245 | os-homedir@^1.0.0: 2246 | version "1.0.2" 2247 | resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" 2248 | 2249 | os-tmpdir@^1.0.0, os-tmpdir@~1.0.1: 2250 | version "1.0.2" 2251 | resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" 2252 | 2253 | osenv@^0.1.0: 2254 | version "0.1.3" 2255 | resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.3.tgz#83cf05c6d6458fc4d5ac6362ea325d92f2754217" 2256 | dependencies: 2257 | os-homedir "^1.0.0" 2258 | os-tmpdir "^1.0.0" 2259 | 2260 | package-json@^2.0.0: 2261 | version "2.4.0" 2262 | resolved "https://registry.yarnpkg.com/package-json/-/package-json-2.4.0.tgz#0d15bd67d1cbbddbb2ca222ff2edb86bcb31a8bb" 2263 | dependencies: 2264 | got "^5.0.0" 2265 | registry-auth-token "^3.0.1" 2266 | registry-url "^3.0.3" 2267 | semver "^5.1.0" 2268 | 2269 | pako@~0.2.0: 2270 | version "0.2.9" 2271 | resolved "https://registry.yarnpkg.com/pako/-/pako-0.2.9.tgz#f3f7522f4ef782348da8161bad9ecfd51bf83a75" 2272 | 2273 | parse-glob@^3.0.4: 2274 | version "3.0.4" 2275 | resolved "https://registry.yarnpkg.com/parse-glob/-/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c" 2276 | dependencies: 2277 | glob-base "^0.3.0" 2278 | is-dotfile "^1.0.0" 2279 | is-extglob "^1.0.0" 2280 | is-glob "^2.0.0" 2281 | 2282 | parse-json@^2.1.0, parse-json@^2.2.0: 2283 | version "2.2.0" 2284 | resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" 2285 | dependencies: 2286 | error-ex "^1.2.0" 2287 | 2288 | parsejson@0.0.1: 2289 | version "0.0.1" 2290 | resolved "https://registry.yarnpkg.com/parsejson/-/parsejson-0.0.1.tgz#9b10c6c0d825ab589e685153826de0a3ba278bcc" 2291 | dependencies: 2292 | better-assert "~1.0.0" 2293 | 2294 | parseqs@0.0.2: 2295 | version "0.0.2" 2296 | resolved "https://registry.yarnpkg.com/parseqs/-/parseqs-0.0.2.tgz#9dfe70b2cddac388bde4f35b1f240fa58adbe6c7" 2297 | dependencies: 2298 | better-assert "~1.0.0" 2299 | 2300 | parseuri@0.0.4: 2301 | version "0.0.4" 2302 | resolved "https://registry.yarnpkg.com/parseuri/-/parseuri-0.0.4.tgz#806582a39887e1ea18dd5e2fe0e01902268e9350" 2303 | dependencies: 2304 | better-assert "~1.0.0" 2305 | 2306 | parseurl@~1.3.1: 2307 | version "1.3.1" 2308 | resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.1.tgz#c8ab8c9223ba34888aa64a297b28853bec18da56" 2309 | 2310 | path-browserify@0.0.0: 2311 | version "0.0.0" 2312 | resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.0.tgz#a0b870729aae214005b7d5032ec2cbbb0fb4451a" 2313 | 2314 | path-exists@^2.0.0: 2315 | version "2.1.0" 2316 | resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b" 2317 | dependencies: 2318 | pinkie-promise "^2.0.0" 2319 | 2320 | path-is-absolute@^1.0.0: 2321 | version "1.0.1" 2322 | resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" 2323 | 2324 | path-to-regexp@0.1.7: 2325 | version "0.1.7" 2326 | resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" 2327 | 2328 | path-type@^1.0.0: 2329 | version "1.1.0" 2330 | resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441" 2331 | dependencies: 2332 | graceful-fs "^4.1.2" 2333 | pify "^2.0.0" 2334 | pinkie-promise "^2.0.0" 2335 | 2336 | pbkdf2-compat@2.0.1: 2337 | version "2.0.1" 2338 | resolved "https://registry.yarnpkg.com/pbkdf2-compat/-/pbkdf2-compat-2.0.1.tgz#b6e0c8fa99494d94e0511575802a59a5c142f288" 2339 | 2340 | pend@~1.2.0: 2341 | version "1.2.0" 2342 | resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50" 2343 | 2344 | phantomjs-prebuilt@^2.1.13, phantomjs-prebuilt@^2.1.7: 2345 | version "2.1.13" 2346 | resolved "https://registry.yarnpkg.com/phantomjs-prebuilt/-/phantomjs-prebuilt-2.1.13.tgz#66556ad9e965d893ca5a7dc9e763df7e8697f76d" 2347 | dependencies: 2348 | es6-promise "~4.0.3" 2349 | extract-zip "~1.5.0" 2350 | fs-extra "~0.30.0" 2351 | hasha "~2.2.0" 2352 | kew "~0.7.0" 2353 | progress "~1.1.8" 2354 | request "~2.74.0" 2355 | request-progress "~2.0.1" 2356 | which "~1.2.10" 2357 | 2358 | pify@^2.0.0: 2359 | version "2.3.0" 2360 | resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" 2361 | 2362 | pinkie-promise@^2.0.0: 2363 | version "2.0.1" 2364 | resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" 2365 | dependencies: 2366 | pinkie "^2.0.0" 2367 | 2368 | pinkie@^2.0.0: 2369 | version "2.0.4" 2370 | resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" 2371 | 2372 | popsicle-proxy-agent@^3.0.0: 2373 | version "3.0.0" 2374 | resolved "https://registry.yarnpkg.com/popsicle-proxy-agent/-/popsicle-proxy-agent-3.0.0.tgz#b9133c55d945759ab7ee61b7711364620d3aeadc" 2375 | dependencies: 2376 | http-proxy-agent "^1.0.0" 2377 | https-proxy-agent "^1.0.0" 2378 | 2379 | popsicle-retry@^3.2.0: 2380 | version "3.2.1" 2381 | resolved "https://registry.yarnpkg.com/popsicle-retry/-/popsicle-retry-3.2.1.tgz#e06e866533b42a7a123eb330cbe63a7cebcba10c" 2382 | dependencies: 2383 | any-promise "^1.1.0" 2384 | xtend "^4.0.1" 2385 | 2386 | popsicle-rewrite@^1.0.0: 2387 | version "1.0.0" 2388 | resolved "https://registry.yarnpkg.com/popsicle-rewrite/-/popsicle-rewrite-1.0.0.tgz#1dd4e8ea9c3182351fb820f87934d992f7fb9007" 2389 | 2390 | popsicle-status@^2.0.0: 2391 | version "2.0.0" 2392 | resolved "https://registry.yarnpkg.com/popsicle-status/-/popsicle-status-2.0.0.tgz#54e12722376efba0a353abdf53cbf1ce0e852efa" 2393 | 2394 | popsicle@^8.0.2: 2395 | version "8.2.0" 2396 | resolved "https://registry.yarnpkg.com/popsicle/-/popsicle-8.2.0.tgz#ff4401005cab43a9418a91410611c00197712d21" 2397 | dependencies: 2398 | any-promise "^1.3.0" 2399 | arrify "^1.0.0" 2400 | concat-stream "^1.4.7" 2401 | form-data "^2.0.0" 2402 | make-error-cause "^1.2.1" 2403 | throwback "^1.1.0" 2404 | tough-cookie "^2.0.0" 2405 | xtend "^4.0.0" 2406 | 2407 | prelude-ls@~1.1.2: 2408 | version "1.1.2" 2409 | resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" 2410 | 2411 | prepend-http@^1.0.1: 2412 | version "1.0.4" 2413 | resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc" 2414 | 2415 | preserve@^0.2.0: 2416 | version "0.2.0" 2417 | resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b" 2418 | 2419 | process-nextick-args@~1.0.6: 2420 | version "1.0.7" 2421 | resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3" 2422 | 2423 | process@^0.11.0, process@~0.11.0: 2424 | version "0.11.9" 2425 | resolved "https://registry.yarnpkg.com/process/-/process-0.11.9.tgz#7bd5ad21aa6253e7da8682264f1e11d11c0318c1" 2426 | 2427 | progress@~1.1.8: 2428 | version "1.1.8" 2429 | resolved "https://registry.yarnpkg.com/progress/-/progress-1.1.8.tgz#e260c78f6161cdd9b0e56cc3e0a85de17c7a57be" 2430 | 2431 | promise-finally@^2.0.1, promise-finally@^2.2.1: 2432 | version "2.2.1" 2433 | resolved "https://registry.yarnpkg.com/promise-finally/-/promise-finally-2.2.1.tgz#22616c4ba902916e988bd46c54d7caa08910cd77" 2434 | dependencies: 2435 | any-promise "^1.3.0" 2436 | 2437 | proxy-addr@~1.1.2: 2438 | version "1.1.2" 2439 | resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-1.1.2.tgz#b4cc5f22610d9535824c123aef9d3cf73c40ba37" 2440 | dependencies: 2441 | forwarded "~0.1.0" 2442 | ipaddr.js "1.1.1" 2443 | 2444 | prr@~0.0.0: 2445 | version "0.0.0" 2446 | resolved "https://registry.yarnpkg.com/prr/-/prr-0.0.0.tgz#1a84b85908325501411853d0081ee3fa86e2926a" 2447 | 2448 | punycode@1.3.2: 2449 | version "1.3.2" 2450 | resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" 2451 | 2452 | punycode@^1.2.4, punycode@^1.4.1: 2453 | version "1.4.1" 2454 | resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" 2455 | 2456 | qjobs@^1.1.4: 2457 | version "1.1.5" 2458 | resolved "https://registry.yarnpkg.com/qjobs/-/qjobs-1.1.5.tgz#659de9f2cf8dcc27a1481276f205377272382e73" 2459 | 2460 | qs@6.2.0, qs@~6.2.0: 2461 | version "6.2.0" 2462 | resolved "https://registry.yarnpkg.com/qs/-/qs-6.2.0.tgz#3b7848c03c2dece69a9522b0fae8c4126d745f3b" 2463 | 2464 | qs@~6.3.0: 2465 | version "6.3.0" 2466 | resolved "https://registry.yarnpkg.com/qs/-/qs-6.3.0.tgz#f403b264f23bc01228c74131b407f18d5ea5d442" 2467 | 2468 | querystring-es3@~0.2.0: 2469 | version "0.2.1" 2470 | resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73" 2471 | 2472 | querystring@0.2.0: 2473 | version "0.2.0" 2474 | resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" 2475 | 2476 | querystringify@0.0.x: 2477 | version "0.0.4" 2478 | resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-0.0.4.tgz#0cf7f84f9463ff0ae51c4c4b142d95be37724d9c" 2479 | 2480 | randomatic@^1.1.3: 2481 | version "1.1.6" 2482 | resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-1.1.6.tgz#110dcabff397e9dcff7c0789ccc0a49adf1ec5bb" 2483 | dependencies: 2484 | is-number "^2.0.2" 2485 | kind-of "^3.0.2" 2486 | 2487 | range-parser@^1.0.3, range-parser@^1.2.0, range-parser@~1.2.0: 2488 | version "1.2.0" 2489 | resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.0.tgz#f49be6b487894ddc40dcc94a322f611092e00d5e" 2490 | 2491 | raw-body@~2.1.7: 2492 | version "2.1.7" 2493 | resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.1.7.tgz#adfeace2e4fb3098058014d08c072dcc59758774" 2494 | dependencies: 2495 | bytes "2.4.0" 2496 | iconv-lite "0.4.13" 2497 | unpipe "1.0.0" 2498 | 2499 | rc@^1.0.1, rc@^1.1.5, rc@^1.1.6, rc@~1.1.6: 2500 | version "1.1.6" 2501 | resolved "https://registry.yarnpkg.com/rc/-/rc-1.1.6.tgz#43651b76b6ae53b5c802f1151fa3fc3b059969c9" 2502 | dependencies: 2503 | deep-extend "~0.4.0" 2504 | ini "~1.3.0" 2505 | minimist "^1.2.0" 2506 | strip-json-comments "~1.0.4" 2507 | 2508 | read-all-stream@^3.0.0: 2509 | version "3.1.0" 2510 | resolved "https://registry.yarnpkg.com/read-all-stream/-/read-all-stream-3.1.0.tgz#35c3e177f2078ef789ee4bfafa4373074eaef4fa" 2511 | dependencies: 2512 | pinkie-promise "^2.0.0" 2513 | readable-stream "^2.0.0" 2514 | 2515 | read-pkg-up@^1.0.1: 2516 | version "1.0.1" 2517 | resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02" 2518 | dependencies: 2519 | find-up "^1.0.0" 2520 | read-pkg "^1.0.0" 2521 | 2522 | read-pkg@^1.0.0: 2523 | version "1.1.0" 2524 | resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28" 2525 | dependencies: 2526 | load-json-file "^1.0.0" 2527 | normalize-package-data "^2.3.2" 2528 | path-type "^1.0.0" 2529 | 2530 | readable-stream@^1.0.27-1, readable-stream@^1.1.13: 2531 | version "1.1.14" 2532 | resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9" 2533 | dependencies: 2534 | core-util-is "~1.0.0" 2535 | inherits "~2.0.1" 2536 | isarray "0.0.1" 2537 | string_decoder "~0.10.x" 2538 | 2539 | readable-stream@^2.0.0, "readable-stream@^2.0.0 || ^1.1.13", readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.5: 2540 | version "2.2.2" 2541 | resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.2.2.tgz#a9e6fec3c7dda85f8bb1b3ba7028604556fc825e" 2542 | dependencies: 2543 | buffer-shims "^1.0.0" 2544 | core-util-is "~1.0.0" 2545 | inherits "~2.0.1" 2546 | isarray "~1.0.0" 2547 | process-nextick-args "~1.0.6" 2548 | string_decoder "~0.10.x" 2549 | util-deprecate "~1.0.1" 2550 | 2551 | readable-stream@~1.0.2: 2552 | version "1.0.34" 2553 | resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.0.34.tgz#125820e34bc842d2f2aaafafe4c2916ee32c157c" 2554 | dependencies: 2555 | core-util-is "~1.0.0" 2556 | inherits "~2.0.1" 2557 | isarray "0.0.1" 2558 | string_decoder "~0.10.x" 2559 | 2560 | readable-stream@~2.0.0, readable-stream@~2.0.5: 2561 | version "2.0.6" 2562 | resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.0.6.tgz#8f90341e68a53ccc928788dacfcd11b36eb9b78e" 2563 | dependencies: 2564 | core-util-is "~1.0.0" 2565 | inherits "~2.0.1" 2566 | isarray "~1.0.0" 2567 | process-nextick-args "~1.0.6" 2568 | string_decoder "~0.10.x" 2569 | util-deprecate "~1.0.1" 2570 | 2571 | readable-stream@~2.1.4: 2572 | version "2.1.5" 2573 | resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.1.5.tgz#66fa8b720e1438b364681f2ad1a63c618448c9d0" 2574 | dependencies: 2575 | buffer-shims "^1.0.0" 2576 | core-util-is "~1.0.0" 2577 | inherits "~2.0.1" 2578 | isarray "~1.0.0" 2579 | process-nextick-args "~1.0.6" 2580 | string_decoder "~0.10.x" 2581 | util-deprecate "~1.0.1" 2582 | 2583 | readdirp@^2.0.0: 2584 | version "2.1.0" 2585 | resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.1.0.tgz#4ed0ad060df3073300c48440373f72d1cc642d78" 2586 | dependencies: 2587 | graceful-fs "^4.1.2" 2588 | minimatch "^3.0.2" 2589 | readable-stream "^2.0.2" 2590 | set-immediate-shim "^1.0.1" 2591 | 2592 | redent@^1.0.0: 2593 | version "1.0.0" 2594 | resolved "https://registry.yarnpkg.com/redent/-/redent-1.0.0.tgz#cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde" 2595 | dependencies: 2596 | indent-string "^2.1.0" 2597 | strip-indent "^1.0.1" 2598 | 2599 | regex-cache@^0.4.2: 2600 | version "0.4.3" 2601 | resolved "https://registry.yarnpkg.com/regex-cache/-/regex-cache-0.4.3.tgz#9b1a6c35d4d0dfcef5711ae651e8e9d3d7114145" 2602 | dependencies: 2603 | is-equal-shallow "^0.1.3" 2604 | is-primitive "^2.0.0" 2605 | 2606 | registry-auth-token@^3.0.1: 2607 | version "3.1.0" 2608 | resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-3.1.0.tgz#997c08256e0c7999837b90e944db39d8a790276b" 2609 | dependencies: 2610 | rc "^1.1.6" 2611 | 2612 | registry-url@^3.0.3: 2613 | version "3.1.0" 2614 | resolved "https://registry.yarnpkg.com/registry-url/-/registry-url-3.1.0.tgz#3d4ef870f73dde1d77f0cf9a381432444e174942" 2615 | dependencies: 2616 | rc "^1.0.1" 2617 | 2618 | repeat-element@^1.1.2: 2619 | version "1.1.2" 2620 | resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.2.tgz#ef089a178d1483baae4d93eb98b4f9e4e11d990a" 2621 | 2622 | repeat-string@^0.2.2: 2623 | version "0.2.2" 2624 | resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-0.2.2.tgz#c7a8d3236068362059a7e4651fc6884e8b1fb4ae" 2625 | 2626 | repeat-string@^1.5.2: 2627 | version "1.6.1" 2628 | resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" 2629 | 2630 | repeating@^2.0.0: 2631 | version "2.0.1" 2632 | resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda" 2633 | dependencies: 2634 | is-finite "^1.0.0" 2635 | 2636 | request-progress@~2.0.1: 2637 | version "2.0.1" 2638 | resolved "https://registry.yarnpkg.com/request-progress/-/request-progress-2.0.1.tgz#5d36bb57961c673aa5b788dbc8141fdf23b44e08" 2639 | dependencies: 2640 | throttleit "^1.0.0" 2641 | 2642 | request@^2.79.0: 2643 | version "2.79.0" 2644 | resolved "https://registry.yarnpkg.com/request/-/request-2.79.0.tgz#4dfe5bf6be8b8cdc37fcf93e04b65577722710de" 2645 | dependencies: 2646 | aws-sign2 "~0.6.0" 2647 | aws4 "^1.2.1" 2648 | caseless "~0.11.0" 2649 | combined-stream "~1.0.5" 2650 | extend "~3.0.0" 2651 | forever-agent "~0.6.1" 2652 | form-data "~2.1.1" 2653 | har-validator "~2.0.6" 2654 | hawk "~3.1.3" 2655 | http-signature "~1.1.0" 2656 | is-typedarray "~1.0.0" 2657 | isstream "~0.1.2" 2658 | json-stringify-safe "~5.0.1" 2659 | mime-types "~2.1.7" 2660 | oauth-sign "~0.8.1" 2661 | qs "~6.3.0" 2662 | stringstream "~0.0.4" 2663 | tough-cookie "~2.3.0" 2664 | tunnel-agent "~0.4.1" 2665 | uuid "^3.0.0" 2666 | 2667 | request@~2.74.0: 2668 | version "2.74.0" 2669 | resolved "https://registry.yarnpkg.com/request/-/request-2.74.0.tgz#7693ca768bbb0ea5c8ce08c084a45efa05b892ab" 2670 | dependencies: 2671 | aws-sign2 "~0.6.0" 2672 | aws4 "^1.2.1" 2673 | bl "~1.1.2" 2674 | caseless "~0.11.0" 2675 | combined-stream "~1.0.5" 2676 | extend "~3.0.0" 2677 | forever-agent "~0.6.1" 2678 | form-data "~1.0.0-rc4" 2679 | har-validator "~2.0.6" 2680 | hawk "~3.1.3" 2681 | http-signature "~1.1.0" 2682 | is-typedarray "~1.0.0" 2683 | isstream "~0.1.2" 2684 | json-stringify-safe "~5.0.1" 2685 | mime-types "~2.1.7" 2686 | node-uuid "~1.4.7" 2687 | oauth-sign "~0.8.1" 2688 | qs "~6.2.0" 2689 | stringstream "~0.0.4" 2690 | tough-cookie "~2.3.0" 2691 | tunnel-agent "~0.4.1" 2692 | 2693 | requires-port@1.0.x, requires-port@1.x.x: 2694 | version "1.0.0" 2695 | resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" 2696 | 2697 | resolve@1.1.x, resolve@^1.1.7: 2698 | version "1.1.7" 2699 | resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" 2700 | 2701 | restore-cursor@^1.0.1: 2702 | version "1.0.1" 2703 | resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-1.0.1.tgz#34661f46886327fed2991479152252df92daa541" 2704 | dependencies: 2705 | exit-hook "^1.0.0" 2706 | onetime "^1.0.0" 2707 | 2708 | right-align@^0.1.1: 2709 | version "0.1.3" 2710 | resolved "https://registry.yarnpkg.com/right-align/-/right-align-0.1.3.tgz#61339b722fe6a3515689210d24e14c96148613ef" 2711 | dependencies: 2712 | align-text "^0.1.1" 2713 | 2714 | rimraf@2, rimraf@^2.2.8, rimraf@^2.3.3, rimraf@^2.4.4, rimraf@~2.5.1, rimraf@~2.5.4: 2715 | version "2.5.4" 2716 | resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.5.4.tgz#96800093cbf1a0c86bd95b4625467535c29dfa04" 2717 | dependencies: 2718 | glob "^7.0.5" 2719 | 2720 | ripemd160@0.2.0: 2721 | version "0.2.0" 2722 | resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-0.2.0.tgz#2bf198bde167cacfa51c0a928e84b68bbe171fce" 2723 | 2724 | samsam@^1.1.3: 2725 | version "1.2.1" 2726 | resolved "https://registry.yarnpkg.com/samsam/-/samsam-1.2.1.tgz#edd39093a3184370cb859243b2bdf255e7d8ea67" 2727 | 2728 | samsam@~1.1: 2729 | version "1.1.2" 2730 | resolved "https://registry.yarnpkg.com/samsam/-/samsam-1.1.2.tgz#bec11fdc83a9fda063401210e40176c3024d1567" 2731 | 2732 | semver-diff@^2.0.0: 2733 | version "2.1.0" 2734 | resolved "https://registry.yarnpkg.com/semver-diff/-/semver-diff-2.1.0.tgz#4bbb8437c8d37e4b0cf1a68fd726ec6d645d6d36" 2735 | dependencies: 2736 | semver "^5.0.3" 2737 | 2738 | "semver@2 || 3 || 4 || 5", semver@^5.0.1, semver@^5.0.3, semver@^5.1.0, semver@~5.3.0: 2739 | version "5.3.0" 2740 | resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f" 2741 | 2742 | semver@~4.3.3: 2743 | version "4.3.6" 2744 | resolved "https://registry.yarnpkg.com/semver/-/semver-4.3.6.tgz#300bc6e0e86374f7ba61068b5b1ecd57fc6532da" 2745 | 2746 | semver@~5.0.1: 2747 | version "5.0.3" 2748 | resolved "https://registry.yarnpkg.com/semver/-/semver-5.0.3.tgz#77466de589cd5d3c95f138aa78bc569a3cb5d27a" 2749 | 2750 | send@0.14.1: 2751 | version "0.14.1" 2752 | resolved "https://registry.yarnpkg.com/send/-/send-0.14.1.tgz#a954984325392f51532a7760760e459598c89f7a" 2753 | dependencies: 2754 | debug "~2.2.0" 2755 | depd "~1.1.0" 2756 | destroy "~1.0.4" 2757 | encodeurl "~1.0.1" 2758 | escape-html "~1.0.3" 2759 | etag "~1.7.0" 2760 | fresh "0.3.0" 2761 | http-errors "~1.5.0" 2762 | mime "1.3.4" 2763 | ms "0.7.1" 2764 | on-finished "~2.3.0" 2765 | range-parser "~1.2.0" 2766 | statuses "~1.3.0" 2767 | 2768 | serve-index@^1.7.2: 2769 | version "1.8.0" 2770 | resolved "https://registry.yarnpkg.com/serve-index/-/serve-index-1.8.0.tgz#7c5d96c13fb131101f93c1c5774f8516a1e78d3b" 2771 | dependencies: 2772 | accepts "~1.3.3" 2773 | batch "0.5.3" 2774 | debug "~2.2.0" 2775 | escape-html "~1.0.3" 2776 | http-errors "~1.5.0" 2777 | mime-types "~2.1.11" 2778 | parseurl "~1.3.1" 2779 | 2780 | serve-static@~1.11.1: 2781 | version "1.11.1" 2782 | resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.11.1.tgz#d6cce7693505f733c759de57befc1af76c0f0805" 2783 | dependencies: 2784 | encodeurl "~1.0.1" 2785 | escape-html "~1.0.3" 2786 | parseurl "~1.3.1" 2787 | send "0.14.1" 2788 | 2789 | set-blocking@~2.0.0: 2790 | version "2.0.0" 2791 | resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" 2792 | 2793 | set-immediate-shim@^1.0.1: 2794 | version "1.0.1" 2795 | resolved "https://registry.yarnpkg.com/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz#4b2b1b27eb808a9f8dcc481a58e5e56f599f3f61" 2796 | 2797 | setprototypeof@1.0.2: 2798 | version "1.0.2" 2799 | resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.0.2.tgz#81a552141ec104b88e89ce383103ad5c66564d08" 2800 | 2801 | sha.js@2.2.6: 2802 | version "2.2.6" 2803 | resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.2.6.tgz#17ddeddc5f722fb66501658895461977867315ba" 2804 | 2805 | signal-exit@^3.0.0: 2806 | version "3.0.1" 2807 | resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.1.tgz#5a4c884992b63a7acd9badb7894c3ee9cfccad81" 2808 | 2809 | sinon@next: 2810 | version "2.0.0-pre.4" 2811 | resolved "https://registry.yarnpkg.com/sinon/-/sinon-2.0.0-pre.4.tgz#f29fbcca8d2fa73b633a3b0c0e4e3c78f2360c2c" 2812 | dependencies: 2813 | formatio "1.1.1" 2814 | lolex "^1.4.0" 2815 | samsam "^1.1.3" 2816 | text-encoding "0.5.2" 2817 | 2818 | slice-ansi@0.0.4: 2819 | version "0.0.4" 2820 | resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-0.0.4.tgz#edbf8903f66f7ce2f8eafd6ceed65e264c831b35" 2821 | 2822 | slide@^1.1.5: 2823 | version "1.1.6" 2824 | resolved "https://registry.yarnpkg.com/slide/-/slide-1.1.6.tgz#56eb027d65b4d2dce6cb2e2d32c4d4afc9e1d707" 2825 | 2826 | sntp@1.x.x: 2827 | version "1.0.9" 2828 | resolved "https://registry.yarnpkg.com/sntp/-/sntp-1.0.9.tgz#6541184cc90aeea6c6e7b35e2659082443c66198" 2829 | dependencies: 2830 | hoek "2.x.x" 2831 | 2832 | socket.io-adapter@0.4.0: 2833 | version "0.4.0" 2834 | resolved "https://registry.yarnpkg.com/socket.io-adapter/-/socket.io-adapter-0.4.0.tgz#fb9f82ab1aa65290bf72c3657955b930a991a24f" 2835 | dependencies: 2836 | debug "2.2.0" 2837 | socket.io-parser "2.2.2" 2838 | 2839 | socket.io-client@1.4.6: 2840 | version "1.4.6" 2841 | resolved "https://registry.yarnpkg.com/socket.io-client/-/socket.io-client-1.4.6.tgz#49b0ba537efd15b8297c84016e642e1c7c752c3d" 2842 | dependencies: 2843 | backo2 "1.0.2" 2844 | component-bind "1.0.0" 2845 | component-emitter "1.2.0" 2846 | debug "2.2.0" 2847 | engine.io-client "1.6.9" 2848 | has-binary "0.1.7" 2849 | indexof "0.0.1" 2850 | object-component "0.0.3" 2851 | parseuri "0.0.4" 2852 | socket.io-parser "2.2.6" 2853 | to-array "0.1.4" 2854 | 2855 | socket.io-parser@2.2.2: 2856 | version "2.2.2" 2857 | resolved "https://registry.yarnpkg.com/socket.io-parser/-/socket.io-parser-2.2.2.tgz#3d7af6b64497e956b7d9fe775f999716027f9417" 2858 | dependencies: 2859 | benchmark "1.0.0" 2860 | component-emitter "1.1.2" 2861 | debug "0.7.4" 2862 | isarray "0.0.1" 2863 | json3 "3.2.6" 2864 | 2865 | socket.io-parser@2.2.6: 2866 | version "2.2.6" 2867 | resolved "https://registry.yarnpkg.com/socket.io-parser/-/socket.io-parser-2.2.6.tgz#38dfd61df50dcf8ab1d9e2091322bf902ba28b99" 2868 | dependencies: 2869 | benchmark "1.0.0" 2870 | component-emitter "1.1.2" 2871 | debug "2.2.0" 2872 | isarray "0.0.1" 2873 | json3 "3.3.2" 2874 | 2875 | socket.io@1.4.7: 2876 | version "1.4.7" 2877 | resolved "https://registry.yarnpkg.com/socket.io/-/socket.io-1.4.7.tgz#92b7f7cb88c5797d4daee279fe8075dbe6d3fa1c" 2878 | dependencies: 2879 | debug "2.2.0" 2880 | engine.io "1.6.10" 2881 | has-binary "0.1.7" 2882 | socket.io-adapter "0.4.0" 2883 | socket.io-client "1.4.6" 2884 | socket.io-parser "2.2.6" 2885 | 2886 | sockjs-client@^1.0.3: 2887 | version "1.1.1" 2888 | resolved "https://registry.yarnpkg.com/sockjs-client/-/sockjs-client-1.1.1.tgz#284843e9a9784d7c474b1571b3240fca9dda4bb0" 2889 | dependencies: 2890 | debug "^2.2.0" 2891 | eventsource "~0.1.6" 2892 | faye-websocket "~0.11.0" 2893 | inherits "^2.0.1" 2894 | json3 "^3.3.2" 2895 | url-parse "^1.1.1" 2896 | 2897 | sockjs@^0.3.15: 2898 | version "0.3.18" 2899 | resolved "https://registry.yarnpkg.com/sockjs/-/sockjs-0.3.18.tgz#d9b289316ca7df77595ef299e075f0f937eb4207" 2900 | dependencies: 2901 | faye-websocket "^0.10.0" 2902 | uuid "^2.0.2" 2903 | 2904 | sort-keys@^1.0.0: 2905 | version "1.1.2" 2906 | resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-1.1.2.tgz#441b6d4d346798f1b4e49e8920adfba0e543f9ad" 2907 | dependencies: 2908 | is-plain-obj "^1.0.0" 2909 | 2910 | source-list-map@~0.1.0: 2911 | version "0.1.6" 2912 | resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-0.1.6.tgz#e1e6f94f0b40c4d28dcf8f5b8766e0e45636877f" 2913 | 2914 | source-map@^0.1.41: 2915 | version "0.1.43" 2916 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.1.43.tgz#c24bc146ca517c1471f5dacbe2571b2b7f9e3346" 2917 | dependencies: 2918 | amdefine ">=0.0.4" 2919 | 2920 | source-map@^0.4.4, source-map@~0.4.1: 2921 | version "0.4.4" 2922 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.4.4.tgz#eba4f5da9c0dc999de68032d8b4f76173652036b" 2923 | dependencies: 2924 | amdefine ">=0.0.4" 2925 | 2926 | source-map@^0.5.1, source-map@^0.5.3, source-map@~0.5.1: 2927 | version "0.5.6" 2928 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.6.tgz#75ce38f52bf0733c5a7f0c118d81334a2bb5f412" 2929 | 2930 | source-map@~0.2.0: 2931 | version "0.2.0" 2932 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.2.0.tgz#dab73fbcfc2ba819b4de03bd6f6eaa48164b3f9d" 2933 | dependencies: 2934 | amdefine ">=0.0.4" 2935 | 2936 | spdx-correct@~1.0.0: 2937 | version "1.0.2" 2938 | resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-1.0.2.tgz#4b3073d933ff51f3912f03ac5519498a4150db40" 2939 | dependencies: 2940 | spdx-license-ids "^1.0.2" 2941 | 2942 | spdx-expression-parse@~1.0.0: 2943 | version "1.0.4" 2944 | resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz#9bdf2f20e1f40ed447fbe273266191fced51626c" 2945 | 2946 | spdx-license-ids@^1.0.2: 2947 | version "1.2.2" 2948 | resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz#c9df7a3424594ade6bd11900d596696dc06bac57" 2949 | 2950 | sprintf-js@^1.0.3, sprintf-js@~1.0.2: 2951 | version "1.0.3" 2952 | resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" 2953 | 2954 | sshpk@^1.7.0: 2955 | version "1.10.1" 2956 | resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.10.1.tgz#30e1a5d329244974a1af61511339d595af6638b0" 2957 | dependencies: 2958 | asn1 "~0.2.3" 2959 | assert-plus "^1.0.0" 2960 | dashdash "^1.12.0" 2961 | getpass "^0.1.1" 2962 | optionalDependencies: 2963 | bcrypt-pbkdf "^1.0.0" 2964 | ecc-jsbn "~0.1.1" 2965 | jodid25519 "^1.0.0" 2966 | jsbn "~0.1.0" 2967 | tweetnacl "~0.14.0" 2968 | 2969 | "statuses@>= 1.3.1 < 2", statuses@~1.3.0: 2970 | version "1.3.1" 2971 | resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.3.1.tgz#faf51b9eb74aaef3b3acf4ad5f61abf24cb7b93e" 2972 | 2973 | stream-browserify@^1.0.0: 2974 | version "1.0.0" 2975 | resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-1.0.0.tgz#bf9b4abfb42b274d751479e44e0ff2656b6f1193" 2976 | dependencies: 2977 | inherits "~2.0.1" 2978 | readable-stream "^1.0.27-1" 2979 | 2980 | stream-cache@~0.0.1: 2981 | version "0.0.2" 2982 | resolved "https://registry.yarnpkg.com/stream-cache/-/stream-cache-0.0.2.tgz#1ac5ad6832428ca55667dbdee395dad4e6db118f" 2983 | 2984 | string-template@^1.0.0: 2985 | version "1.0.0" 2986 | resolved "https://registry.yarnpkg.com/string-template/-/string-template-1.0.0.tgz#9e9f2233dc00f218718ec379a28a5673ecca8b96" 2987 | 2988 | string-width@^1.0.1: 2989 | version "1.0.2" 2990 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" 2991 | dependencies: 2992 | code-point-at "^1.0.0" 2993 | is-fullwidth-code-point "^1.0.0" 2994 | strip-ansi "^3.0.0" 2995 | 2996 | string_decoder@~0.10.25, string_decoder@~0.10.x: 2997 | version "0.10.31" 2998 | resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" 2999 | 3000 | stringstream@~0.0.4: 3001 | version "0.0.5" 3002 | resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.5.tgz#4e484cd4de5a0bbbee18e46307710a8a81621878" 3003 | 3004 | strip-ansi@^3.0.0, strip-ansi@^3.0.1: 3005 | version "3.0.1" 3006 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" 3007 | dependencies: 3008 | ansi-regex "^2.0.0" 3009 | 3010 | strip-bom@^2.0.0: 3011 | version "2.0.0" 3012 | resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e" 3013 | dependencies: 3014 | is-utf8 "^0.2.0" 3015 | 3016 | strip-bom@^3.0.0: 3017 | version "3.0.0" 3018 | resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" 3019 | 3020 | strip-indent@^1.0.1: 3021 | version "1.0.1" 3022 | resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-1.0.1.tgz#0c7962a6adefa7bbd4ac366460a638552ae1a0a2" 3023 | dependencies: 3024 | get-stdin "^4.0.1" 3025 | 3026 | strip-json-comments@~1.0.4: 3027 | version "1.0.4" 3028 | resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-1.0.4.tgz#1e15fbcac97d3ee99bf2d73b4c656b082bbafb91" 3029 | 3030 | supports-color@^2.0.0: 3031 | version "2.0.0" 3032 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" 3033 | 3034 | supports-color@^3.1.0, supports-color@^3.1.1: 3035 | version "3.1.2" 3036 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.1.2.tgz#72a262894d9d408b956ca05ff37b2ed8a6e2a2d5" 3037 | dependencies: 3038 | has-flag "^1.0.0" 3039 | 3040 | tapable@^0.1.8, tapable@~0.1.8: 3041 | version "0.1.10" 3042 | resolved "https://registry.yarnpkg.com/tapable/-/tapable-0.1.10.tgz#29c35707c2b70e50d07482b5d202e8ed446dafd4" 3043 | 3044 | tar-pack@~3.3.0: 3045 | version "3.3.0" 3046 | resolved "https://registry.yarnpkg.com/tar-pack/-/tar-pack-3.3.0.tgz#30931816418f55afc4d21775afdd6720cee45dae" 3047 | dependencies: 3048 | debug "~2.2.0" 3049 | fstream "~1.0.10" 3050 | fstream-ignore "~1.0.5" 3051 | once "~1.3.3" 3052 | readable-stream "~2.1.4" 3053 | rimraf "~2.5.1" 3054 | tar "~2.2.1" 3055 | uid-number "~0.0.6" 3056 | 3057 | tar@~2.2.1: 3058 | version "2.2.1" 3059 | resolved "https://registry.yarnpkg.com/tar/-/tar-2.2.1.tgz#8e4d2a256c0e2185c6b18ad694aec968b83cb1d1" 3060 | dependencies: 3061 | block-stream "*" 3062 | fstream "^1.0.2" 3063 | inherits "2" 3064 | 3065 | text-encoding@0.5.2: 3066 | version "0.5.2" 3067 | resolved "https://registry.yarnpkg.com/text-encoding/-/text-encoding-0.5.2.tgz#85b4660819f088777609465551690fea137d824a" 3068 | 3069 | thenify@^3.1.0, thenify@^3.2.0: 3070 | version "3.2.1" 3071 | resolved "https://registry.yarnpkg.com/thenify/-/thenify-3.2.1.tgz#251fd1c80aff6e5cf57cb179ab1fcb724269bd11" 3072 | dependencies: 3073 | any-promise "^1.0.0" 3074 | 3075 | throat@^3.0.0: 3076 | version "3.0.0" 3077 | resolved "https://registry.yarnpkg.com/throat/-/throat-3.0.0.tgz#e7c64c867cbb3845f10877642f7b60055b8ec0d6" 3078 | 3079 | throttleit@^1.0.0: 3080 | version "1.0.0" 3081 | resolved "https://registry.yarnpkg.com/throttleit/-/throttleit-1.0.0.tgz#9e785836daf46743145a5984b6268d828528ac6c" 3082 | 3083 | throwback@^1.1.0: 3084 | version "1.1.1" 3085 | resolved "https://registry.yarnpkg.com/throwback/-/throwback-1.1.1.tgz#f007e7c17604a6d16d7a07c41aa0e8fedc6184a4" 3086 | dependencies: 3087 | any-promise "^1.3.0" 3088 | 3089 | timed-out@^3.0.0: 3090 | version "3.0.0" 3091 | resolved "https://registry.yarnpkg.com/timed-out/-/timed-out-3.0.0.tgz#ff88de96030ce960eabd42487db61d3add229273" 3092 | 3093 | timers-browserify@^1.0.1: 3094 | version "1.4.2" 3095 | resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-1.4.2.tgz#c9c58b575be8407375cb5e2462dacee74359f41d" 3096 | dependencies: 3097 | process "~0.11.0" 3098 | 3099 | tmp@0.0.28: 3100 | version "0.0.28" 3101 | resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.28.tgz#172735b7f614ea7af39664fa84cf0de4e515d120" 3102 | dependencies: 3103 | os-tmpdir "~1.0.1" 3104 | 3105 | to-array@0.1.4: 3106 | version "0.1.4" 3107 | resolved "https://registry.yarnpkg.com/to-array/-/to-array-0.1.4.tgz#17e6c11f73dd4f3d74cda7a4ff3238e9ad9bf890" 3108 | 3109 | touch@^1.0.0: 3110 | version "1.0.0" 3111 | resolved "https://registry.yarnpkg.com/touch/-/touch-1.0.0.tgz#449cbe2dbae5a8c8038e30d71fa0ff464947c4de" 3112 | dependencies: 3113 | nopt "~1.0.10" 3114 | 3115 | tough-cookie@^2.0.0, tough-cookie@~2.3.0: 3116 | version "2.3.2" 3117 | resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.2.tgz#f081f76e4c85720e6c37a5faced737150d84072a" 3118 | dependencies: 3119 | punycode "^1.4.1" 3120 | 3121 | trim-newlines@^1.0.0: 3122 | version "1.0.0" 3123 | resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613" 3124 | 3125 | ts-loader@^1.2.2: 3126 | version "1.2.2" 3127 | resolved "https://registry.yarnpkg.com/ts-loader/-/ts-loader-1.2.2.tgz#b4445a621e688e25db8c75afe6b7ccb635014e5c" 3128 | dependencies: 3129 | arrify "^1.0.0" 3130 | colors "^1.0.3" 3131 | enhanced-resolve "^0.9.0" 3132 | loader-utils "^0.2.6" 3133 | object-assign "^4.1.0" 3134 | semver "^5.0.1" 3135 | 3136 | tslint-loader@^3.2.1: 3137 | version "3.2.1" 3138 | resolved "https://registry.yarnpkg.com/tslint-loader/-/tslint-loader-3.2.1.tgz#68f39ad778f2c38521a76f16b1980757225d5e69" 3139 | dependencies: 3140 | loader-utils "^0.2.7" 3141 | mkdirp "^0.5.1" 3142 | object-assign "^4.0.1" 3143 | rimraf "^2.4.4" 3144 | 3145 | tslint@^4.0.2: 3146 | version "4.0.2" 3147 | resolved "https://registry.yarnpkg.com/tslint/-/tslint-4.0.2.tgz#d43f24c0c1f826de7f3a097bb7808a8b4325feac" 3148 | dependencies: 3149 | colors "^1.1.2" 3150 | diff "^3.0.1" 3151 | findup-sync "~0.3.0" 3152 | glob "^7.1.1" 3153 | optimist "~0.6.0" 3154 | resolve "^1.1.7" 3155 | underscore.string "^3.3.4" 3156 | update-notifier "^1.0.2" 3157 | 3158 | tty-browserify@0.0.0: 3159 | version "0.0.0" 3160 | resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6" 3161 | 3162 | tunnel-agent@~0.4.1: 3163 | version "0.4.3" 3164 | resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.4.3.tgz#6373db76909fe570e08d73583365ed828a74eeeb" 3165 | 3166 | tweetnacl@^0.14.3, tweetnacl@~0.14.0: 3167 | version "0.14.3" 3168 | resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.3.tgz#3da382f670f25ded78d7b3d1792119bca0b7132d" 3169 | 3170 | type-check@~0.3.2: 3171 | version "0.3.2" 3172 | resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" 3173 | dependencies: 3174 | prelude-ls "~1.1.2" 3175 | 3176 | type-is@~1.6.13: 3177 | version "1.6.14" 3178 | resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.14.tgz#e219639c17ded1ca0789092dd54a03826b817cb2" 3179 | dependencies: 3180 | media-typer "0.3.0" 3181 | mime-types "~2.1.13" 3182 | 3183 | typedarray@~0.0.5: 3184 | version "0.0.6" 3185 | resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" 3186 | 3187 | typescript@^2.0.3, typescript@^2.1.0: 3188 | version "2.1.1" 3189 | resolved "https://registry.yarnpkg.com/typescript/-/typescript-2.1.1.tgz#41c2b64472f529331b2055c0424862b44ce58d42" 3190 | 3191 | typings-core@^2.0.0: 3192 | version "2.0.0" 3193 | resolved "https://registry.yarnpkg.com/typings-core/-/typings-core-2.0.0.tgz#1c785fec32eedeaabb1d89bb38cad01fb8e1f5b5" 3194 | dependencies: 3195 | any-promise "^1.3.0" 3196 | array-uniq "^1.0.2" 3197 | configstore "^2.0.0" 3198 | debug "^2.2.0" 3199 | detect-indent "^5.0.0" 3200 | graceful-fs "^4.1.2" 3201 | has "^1.0.1" 3202 | invariant "^2.2.0" 3203 | is-absolute "^0.2.3" 3204 | jspm-config "^0.3.0" 3205 | listify "^1.0.0" 3206 | lockfile "^1.0.1" 3207 | make-error-cause "^1.2.1" 3208 | mkdirp "^0.5.1" 3209 | object.pick "^1.1.1" 3210 | parse-json "^2.2.0" 3211 | popsicle "^8.0.2" 3212 | popsicle-proxy-agent "^3.0.0" 3213 | popsicle-retry "^3.2.0" 3214 | popsicle-rewrite "^1.0.0" 3215 | popsicle-status "^2.0.0" 3216 | promise-finally "^2.0.1" 3217 | rc "^1.1.5" 3218 | rimraf "^2.4.4" 3219 | sort-keys "^1.0.0" 3220 | string-template "^1.0.0" 3221 | strip-bom "^3.0.0" 3222 | thenify "^3.1.0" 3223 | throat "^3.0.0" 3224 | touch "^1.0.0" 3225 | typescript "^2.0.3" 3226 | xtend "^4.0.0" 3227 | zip-object "^0.1.0" 3228 | 3229 | typings@^2.0.0: 3230 | version "2.0.0" 3231 | resolved "https://registry.yarnpkg.com/typings/-/typings-2.0.0.tgz#d1d6fa14d3679a1d4dafd70093dbaa56f500be4b" 3232 | dependencies: 3233 | any-promise "^1.3.0" 3234 | archy "^1.0.0" 3235 | bluebird "^3.1.1" 3236 | chalk "^1.0.0" 3237 | cli-truncate "^0.2.1" 3238 | columnify "^1.5.2" 3239 | elegant-spinner "^1.0.1" 3240 | has-unicode "^2.0.1" 3241 | listify "^1.0.0" 3242 | log-update "^1.0.2" 3243 | minimist "^1.2.0" 3244 | promise-finally "^2.2.1" 3245 | typings-core "^2.0.0" 3246 | update-notifier "^1.0.0" 3247 | wordwrap "^1.0.0" 3248 | xtend "^4.0.1" 3249 | 3250 | uglify-js@^2.6, uglify-js@~2.7.3: 3251 | version "2.7.5" 3252 | resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.7.5.tgz#4612c0c7baaee2ba7c487de4904ae122079f2ca8" 3253 | dependencies: 3254 | async "~0.2.6" 3255 | source-map "~0.5.1" 3256 | uglify-to-browserify "~1.0.0" 3257 | yargs "~3.10.0" 3258 | 3259 | uglify-to-browserify@~1.0.0: 3260 | version "1.0.2" 3261 | resolved "https://registry.yarnpkg.com/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz#6e0924d6bda6b5afe349e39a6d632850a0f882b7" 3262 | 3263 | uid-number@~0.0.6: 3264 | version "0.0.6" 3265 | resolved "https://registry.yarnpkg.com/uid-number/-/uid-number-0.0.6.tgz#0ea10e8035e8eb5b8e4449f06da1c730663baa81" 3266 | 3267 | ultron@1.0.x: 3268 | version "1.0.2" 3269 | resolved "https://registry.yarnpkg.com/ultron/-/ultron-1.0.2.tgz#ace116ab557cd197386a4e88f4685378c8b2e4fa" 3270 | 3271 | unc-path-regex@^0.1.0: 3272 | version "0.1.2" 3273 | resolved "https://registry.yarnpkg.com/unc-path-regex/-/unc-path-regex-0.1.2.tgz#e73dd3d7b0d7c5ed86fbac6b0ae7d8c6a69d50fa" 3274 | 3275 | underscore.string@^3.3.4: 3276 | version "3.3.4" 3277 | resolved "https://registry.yarnpkg.com/underscore.string/-/underscore.string-3.3.4.tgz#2c2a3f9f83e64762fdc45e6ceac65142864213db" 3278 | dependencies: 3279 | sprintf-js "^1.0.3" 3280 | util-deprecate "^1.0.2" 3281 | 3282 | unpipe@1.0.0, unpipe@~1.0.0: 3283 | version "1.0.0" 3284 | resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" 3285 | 3286 | unzip-response@^1.0.2: 3287 | version "1.0.2" 3288 | resolved "https://registry.yarnpkg.com/unzip-response/-/unzip-response-1.0.2.tgz#b984f0877fc0a89c2c773cc1ef7b5b232b5b06fe" 3289 | 3290 | update-notifier@^1.0.0, update-notifier@^1.0.2: 3291 | version "1.0.2" 3292 | resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-1.0.2.tgz#27c90519196dc15015be02a34ea52986feab8877" 3293 | dependencies: 3294 | boxen "^0.6.0" 3295 | chalk "^1.0.0" 3296 | configstore "^2.0.0" 3297 | is-npm "^1.0.0" 3298 | latest-version "^2.0.0" 3299 | lazy-req "^1.1.0" 3300 | semver-diff "^2.0.0" 3301 | xdg-basedir "^2.0.0" 3302 | 3303 | url-parse-lax@^1.0.0: 3304 | version "1.0.0" 3305 | resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-1.0.0.tgz#7af8f303645e9bd79a272e7a14ac68bc0609da73" 3306 | dependencies: 3307 | prepend-http "^1.0.1" 3308 | 3309 | url-parse@1.0.x: 3310 | version "1.0.5" 3311 | resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.0.5.tgz#0854860422afdcfefeb6c965c662d4800169927b" 3312 | dependencies: 3313 | querystringify "0.0.x" 3314 | requires-port "1.0.x" 3315 | 3316 | url-parse@^1.1.1: 3317 | version "1.1.7" 3318 | resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.1.7.tgz#025cff999653a459ab34232147d89514cc87d74a" 3319 | dependencies: 3320 | querystringify "0.0.x" 3321 | requires-port "1.0.x" 3322 | 3323 | url@~0.10.1: 3324 | version "0.10.3" 3325 | resolved "https://registry.yarnpkg.com/url/-/url-0.10.3.tgz#021e4d9c7705f21bbf37d03ceb58767402774c64" 3326 | dependencies: 3327 | punycode "1.3.2" 3328 | querystring "0.2.0" 3329 | 3330 | useragent@^2.1.9: 3331 | version "2.1.9" 3332 | resolved "https://registry.yarnpkg.com/useragent/-/useragent-2.1.9.tgz#4dba2bc4dad1875777ab15de3ff8098b475000b7" 3333 | dependencies: 3334 | lru-cache "2.2.x" 3335 | 3336 | utf8@2.1.0: 3337 | version "2.1.0" 3338 | resolved "https://registry.yarnpkg.com/utf8/-/utf8-2.1.0.tgz#0cfec5c8052d44a23e3aaa908104e8075f95dfd5" 3339 | 3340 | util-deprecate@^1.0.2, util-deprecate@~1.0.1: 3341 | version "1.0.2" 3342 | resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" 3343 | 3344 | util@0.10.3, util@~0.10.3: 3345 | version "0.10.3" 3346 | resolved "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9" 3347 | dependencies: 3348 | inherits "2.0.1" 3349 | 3350 | utils-merge@1.0.0: 3351 | version "1.0.0" 3352 | resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.0.tgz#0294fb922bb9375153541c4f7096231f287c8af8" 3353 | 3354 | uuid@^2.0.1, uuid@^2.0.2: 3355 | version "2.0.3" 3356 | resolved "https://registry.yarnpkg.com/uuid/-/uuid-2.0.3.tgz#67e2e863797215530dff318e5bf9dcebfd47b21a" 3357 | 3358 | uuid@^3.0.0: 3359 | version "3.0.1" 3360 | resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.0.1.tgz#6544bba2dfda8c1cf17e629a3a305e2bb1fee6c1" 3361 | 3362 | validate-npm-package-license@^3.0.1: 3363 | version "3.0.1" 3364 | resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz#2804babe712ad3379459acfbe24746ab2c303fbc" 3365 | dependencies: 3366 | spdx-correct "~1.0.0" 3367 | spdx-expression-parse "~1.0.0" 3368 | 3369 | vary@~1.1.0: 3370 | version "1.1.0" 3371 | resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.0.tgz#e1e5affbbd16ae768dd2674394b9ad3022653140" 3372 | 3373 | verror@1.3.6: 3374 | version "1.3.6" 3375 | resolved "https://registry.yarnpkg.com/verror/-/verror-1.3.6.tgz#cff5df12946d297d2baaefaa2689e25be01c005c" 3376 | dependencies: 3377 | extsprintf "1.0.2" 3378 | 3379 | vm-browserify@0.0.4: 3380 | version "0.0.4" 3381 | resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-0.0.4.tgz#5d7ea45bbef9e4a6ff65f95438e0a87c357d5a73" 3382 | dependencies: 3383 | indexof "0.0.1" 3384 | 3385 | void-elements@^2.0.0: 3386 | version "2.0.1" 3387 | resolved "https://registry.yarnpkg.com/void-elements/-/void-elements-2.0.1.tgz#c066afb582bb1cb4128d60ea92392e94d5e9dbec" 3388 | 3389 | watchpack@^0.2.1: 3390 | version "0.2.9" 3391 | resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-0.2.9.tgz#62eaa4ab5e5ba35fdfc018275626e3c0f5e3fb0b" 3392 | dependencies: 3393 | async "^0.9.0" 3394 | chokidar "^1.0.0" 3395 | graceful-fs "^4.1.2" 3396 | 3397 | wcwidth@^1.0.0: 3398 | version "1.0.1" 3399 | resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8" 3400 | dependencies: 3401 | defaults "^1.0.3" 3402 | 3403 | webpack-core@~0.6.0: 3404 | version "0.6.8" 3405 | resolved "https://registry.yarnpkg.com/webpack-core/-/webpack-core-0.6.8.tgz#edf9135de00a6a3c26dd0f14b208af0aa4af8d0a" 3406 | dependencies: 3407 | source-list-map "~0.1.0" 3408 | source-map "~0.4.1" 3409 | 3410 | webpack-dev-middleware@^1.0.11, webpack-dev-middleware@^1.4.0: 3411 | version "1.8.4" 3412 | resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-1.8.4.tgz#e8765c9122887ce9e3abd4cc9c3eb31b61e0948d" 3413 | dependencies: 3414 | memory-fs "~0.3.0" 3415 | mime "^1.3.4" 3416 | path-is-absolute "^1.0.0" 3417 | range-parser "^1.0.3" 3418 | 3419 | webpack-dev-server@^1.16.2: 3420 | version "1.16.2" 3421 | resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-1.16.2.tgz#8bebc2c4ce1c45a15c72dd769d9ba08db306a793" 3422 | dependencies: 3423 | compression "^1.5.2" 3424 | connect-history-api-fallback "^1.3.0" 3425 | express "^4.13.3" 3426 | http-proxy-middleware "~0.17.1" 3427 | open "0.0.5" 3428 | optimist "~0.6.1" 3429 | serve-index "^1.7.2" 3430 | sockjs "^0.3.15" 3431 | sockjs-client "^1.0.3" 3432 | stream-cache "~0.0.1" 3433 | strip-ansi "^3.0.0" 3434 | supports-color "^3.1.1" 3435 | webpack-dev-middleware "^1.4.0" 3436 | 3437 | webpack@^1.13.3: 3438 | version "1.13.3" 3439 | resolved "https://registry.yarnpkg.com/webpack/-/webpack-1.13.3.tgz#e79c46fe5a37c5ca70084ba0894c595cdcb42815" 3440 | dependencies: 3441 | acorn "^3.0.0" 3442 | async "^1.3.0" 3443 | clone "^1.0.2" 3444 | enhanced-resolve "~0.9.0" 3445 | interpret "^0.6.4" 3446 | loader-utils "^0.2.11" 3447 | memory-fs "~0.3.0" 3448 | mkdirp "~0.5.0" 3449 | node-libs-browser "^0.6.0" 3450 | optimist "~0.6.0" 3451 | supports-color "^3.1.0" 3452 | tapable "~0.1.8" 3453 | uglify-js "~2.7.3" 3454 | watchpack "^0.2.1" 3455 | webpack-core "~0.6.0" 3456 | 3457 | websocket-driver@>=0.5.1: 3458 | version "0.6.5" 3459 | resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.6.5.tgz#5cb2556ceb85f4373c6d8238aa691c8454e13a36" 3460 | dependencies: 3461 | websocket-extensions ">=0.1.1" 3462 | 3463 | websocket-extensions@>=0.1.1: 3464 | version "0.1.1" 3465 | resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.1.tgz#76899499c184b6ef754377c2dbb0cd6cb55d29e7" 3466 | 3467 | which@^1.1.1, which@~1.2.10: 3468 | version "1.2.12" 3469 | resolved "https://registry.yarnpkg.com/which/-/which-1.2.12.tgz#de67b5e450269f194909ef23ece4ebe416fa1192" 3470 | dependencies: 3471 | isexe "^1.1.1" 3472 | 3473 | wide-align@^1.1.0: 3474 | version "1.1.0" 3475 | resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.0.tgz#40edde802a71fea1f070da3e62dcda2e7add96ad" 3476 | dependencies: 3477 | string-width "^1.0.1" 3478 | 3479 | widest-line@^1.0.0: 3480 | version "1.0.0" 3481 | resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-1.0.0.tgz#0c09c85c2a94683d0d7eaf8ee097d564bf0e105c" 3482 | dependencies: 3483 | string-width "^1.0.1" 3484 | 3485 | window-size@0.1.0: 3486 | version "0.1.0" 3487 | resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.0.tgz#5438cd2ea93b202efa3a19fe8887aee7c94f9c9d" 3488 | 3489 | wordwrap@0.0.2: 3490 | version "0.0.2" 3491 | resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.2.tgz#b79669bb42ecb409f83d583cad52ca17eaa1643f" 3492 | 3493 | wordwrap@^1.0.0, wordwrap@~1.0.0: 3494 | version "1.0.0" 3495 | resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" 3496 | 3497 | wordwrap@~0.0.2: 3498 | version "0.0.3" 3499 | resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107" 3500 | 3501 | wrappy@1: 3502 | version "1.0.2" 3503 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" 3504 | 3505 | write-file-atomic@^1.1.2: 3506 | version "1.2.0" 3507 | resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-1.2.0.tgz#14c66d4e4cb3ca0565c28cf3b7a6f3e4d5938fab" 3508 | dependencies: 3509 | graceful-fs "^4.1.2" 3510 | imurmurhash "^0.1.4" 3511 | slide "^1.1.5" 3512 | 3513 | ws@1.0.1: 3514 | version "1.0.1" 3515 | resolved "https://registry.yarnpkg.com/ws/-/ws-1.0.1.tgz#7d0b2a2e58cddd819039c29c9de65045e1b310e9" 3516 | dependencies: 3517 | options ">=0.0.5" 3518 | ultron "1.0.x" 3519 | 3520 | xdg-basedir@^2.0.0: 3521 | version "2.0.0" 3522 | resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-2.0.0.tgz#edbc903cc385fc04523d966a335504b5504d1bd2" 3523 | dependencies: 3524 | os-homedir "^1.0.0" 3525 | 3526 | xmlhttprequest-ssl@1.5.1: 3527 | version "1.5.1" 3528 | resolved "https://registry.yarnpkg.com/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.1.tgz#3b7741fea4a86675976e908d296d4445961faa67" 3529 | 3530 | xtend@^4.0.0, xtend@^4.0.1: 3531 | version "4.0.1" 3532 | resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af" 3533 | 3534 | yargs@~3.10.0: 3535 | version "3.10.0" 3536 | resolved "https://registry.yarnpkg.com/yargs/-/yargs-3.10.0.tgz#f7ee7bd857dd7c1d2d38c0e74efbd681d1431fd1" 3537 | dependencies: 3538 | camelcase "^1.0.2" 3539 | cliui "^2.1.0" 3540 | decamelize "^1.0.0" 3541 | window-size "0.1.0" 3542 | 3543 | yauzl@2.4.1: 3544 | version "2.4.1" 3545 | resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.4.1.tgz#9528f442dab1b2284e58b4379bb194e22e0c4005" 3546 | dependencies: 3547 | fd-slicer "~1.0.1" 3548 | 3549 | yeast@0.1.2: 3550 | version "0.1.2" 3551 | resolved "https://registry.yarnpkg.com/yeast/-/yeast-0.1.2.tgz#008e06d8094320c372dbc2f8ed76a0ca6c8ac419" 3552 | 3553 | zip-object@^0.1.0: 3554 | version "0.1.0" 3555 | resolved "https://registry.yarnpkg.com/zip-object/-/zip-object-0.1.0.tgz#c1a0da04c88c837756e248680a03ff902ec3f53a" 3556 | --------------------------------------------------------------------------------