├── .gitignore ├── LICENSE ├── README.md ├── dist ├── src │ └── ng-auto-save.js └── typings │ └── ng-auto-save.d.ts ├── gulpfile.js ├── package.json ├── src └── ng-auto-save.ts ├── tsconfig.json ├── tslint.json ├── typings ├── angularjs │ ├── angular-animate.d.ts │ ├── angular-cookies.d.ts │ ├── angular-mocks.d.ts │ ├── angular-resource.d.ts │ ├── angular-route.d.ts │ ├── angular-sanitize.d.ts │ └── angular.d.ts └── jquery │ └── jquery.d.ts └── yarn.lock /.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | 6 | # Runtime data 7 | pids 8 | *.pid 9 | *.seed 10 | 11 | # Directory for instrumented libs generated by jscoverage/JSCover 12 | lib-cov 13 | 14 | # Coverage directory used by tools like istanbul 15 | coverage 16 | 17 | # Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) 18 | .grunt 19 | 20 | # node-waf configuration 21 | .lock-wscript 22 | 23 | # Compiled binary addons (http://nodejs.org/api/addons.html) 24 | build/Release 25 | 26 | # Dependency directory 27 | node_modules 28 | 29 | # Optional npm cache directory 30 | .npm 31 | 32 | # Optional REPL history 33 | .node_repl_history 34 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2016 Dmitry A. Efimenko 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ng-auto-save 2 | ==================== 3 | 4 | Set of angularjs directives to save inputs' values as user types 5 | 6 | Installation: 7 | ------------- 8 | via NPM: `npm install ng-auto-save` 9 | 10 | *Reference module in your app* 11 | ```javascript 12 | angular.module('app', ['ng-auto-save']); 13 | ``` 14 | 15 | Demo: 16 | ------------- 17 | [Plunker Live Demo](https://plnkr.co/edit/XrDKGgWtUjgR2XEG28Wx?p=preview) - Exchange with the database is imitated. 18 | 19 | Example: 20 | ------------- 21 | All you have to do in the controller is to provide a function to save record. This must return a promise and it takes three arguments: 22 | * **`field`** - corresponds to the column in the table in database that will be updated 23 | * **`val`** - new value to save 24 | * **`key`** - the constraint that usually goes in the `where` clause of the sql update statement 25 | 26 | **index.js - inside Controller:** 27 | ```javascript 28 | $scope.updateField = function (field, val, key) { 29 | return $http.post('/api/article/update', { id: key, field: field, val: val }) 30 | .success(function () { 31 | articleRef[field] = $scope.article[field]; 32 | }) 33 | .error(function(error) { 34 | console.log(error); 35 | }); 36 | }; 37 | ``` 38 | 39 | **index.html:** 40 | Example uses [angular-material](https://material.angularjs.org/#/), [ng-messages](https://docs.angularjs.org/api/ngMessages/directive/ngMessages), [font-awesome](http://fortawesome.github.io/Font-Awesome/) 41 | ```html 42 |
43 | 44 |
45 | 46 | 47 | 48 | 49 | 50 | 51 |
52 | 53 |
54 | Name is required 55 |
56 |
57 |
58 | ``` 59 | **Explanation of directives used:** 60 | * **`auto-save="updateField"`** - must be applied to the `
`. It takes the name of the function used to save record. 61 | * **`auto-save-key="article.id"`** - `article.id` here is the primary key in the table Articles. If it is undefined, the `auto-save` function will not execute (thus making it easy to customize insert functionality). 62 | * **`auto-save-debounce="1000"`** - specify how long to wait for input before saving 63 | * **`auto-save-field="name"`** - must be applied to an input with attribute `ng-model`. The "name" here is the name of the column in the table to be updated. 64 | * **`auto-saving="name"`** - apply this directive to an element that you want to show up when saving is in progress. The value of the attribute must be set to the value of 'auto-save-field' applied to the corresponding input 65 | * **`auto-saved="name"`** - apply this directive to an element that you want to show up when saving is in complete successfully. The value of the attribute must be set to the value of 'auto-save-field' applied to the corresponding input 66 | 67 | **Server side implementation** 68 | Example for [NodeJs](http://nodejs.org/) as a web server using [express.js](http://expressjs.com/) and [PostgreSql](http://www.postgresql.org/) as a database. 69 | 70 | Set Route: 71 | ```javascript 72 | router.post('/api/article/update', routes.api.articleUpdateField); 73 | ``` 74 | Implementation for route: 75 | ```javascript 76 | var query = require('pg-query'); 77 | var squel = require("squel"); 78 | squel.useFlavour('postgres'); 79 | var sqlOptions = { autoQuoteAliasNames: false }; 80 | query.connectionParameters = 'postgres://postgres:mypassword@localhost:5432/Articles'; // example connection 81 | 82 | exports.articleUpdateField = function (req, res) { 83 | var id = parseInt(req.body.id); 84 | 85 | if (id) { 86 | var sql = squel.update() 87 | .table('tblArticles') 88 | .set(req.body.field, req.body.val) 89 | .where('id = ?', id) 90 | .toParam(); 91 | 92 | query(sql.text, sql.values, function(err, rows, result) { 93 | if (err) { 94 | console.log(err); 95 | res.status(500).end(); 96 | } else { 97 | res.end(); 98 | } 99 | }); 100 | } else { 101 | res.status(500).end(); 102 | } 103 | }; 104 | ``` 105 | 106 | Credits 107 | ------------- 108 | Inspired by an article written by Adam Albrecht: "[How to Auto-Save your model in Angular.js using $watch and a Debounce function.](http://adamalbrecht.com/2013/10/30/auto-save-your-model-in-angular-js-with-watch-and-debounce/)" 109 | -------------------------------------------------------------------------------- /dist/src/ng-auto-save.js: -------------------------------------------------------------------------------- 1 | var autoSaveModule = angular.module('ng-auto-save', []); 2 | function autoSaveDirective() { 3 | return { 4 | restrict: 'A', 5 | controller: AutoSaveController, 6 | scope: false 7 | }; 8 | } 9 | var AutoSaveController = (function () { 10 | function AutoSaveController($scope, $element, $attrs) { 11 | var _this = this; 12 | this.$scope = $scope; 13 | this.$attrs = $attrs; 14 | this.savingEls = []; 15 | this.savedEls = []; 16 | this.key = undefined; 17 | if ($element[0].tagName.toLowerCase() !== 'form') { 18 | throw Error('directive auto-save must be applied on tag '); 19 | } 20 | if (!$attrs.autoSave) { 21 | throw Error('attribute auto-save of such directive must have a value - the name of the saving function'); 22 | } 23 | this.autoSaveFnName = this.$attrs.autoSave; 24 | this.key = $scope.$eval($attrs.autoSaveKey); 25 | this.debounce = $attrs.autoSaveDebounce; 26 | this.getAutoSaveFunction(); 27 | if (!this.key) { 28 | $scope.$watch($attrs.autoSaveKey, function (newVal, oldVal) { 29 | if (newVal) { 30 | _this.key = $scope.$eval($attrs.autoSaveKey); 31 | _this.keyReady(); 32 | } 33 | }); 34 | } 35 | else { 36 | this.keyReady(); 37 | } 38 | } 39 | AutoSaveController.prototype.registerSavingEl = function (col, el) { 40 | this.savingEls.push({ col: col, key: this.key, el: el }); 41 | }; 42 | AutoSaveController.prototype.registerSavedEl = function (col, el) { 43 | this.savedEls.push({ col: col, key: this.key, el: el }); 44 | }; 45 | AutoSaveController.prototype.changeSavingVisibility = function (col, shouldShow) { 46 | this.changeVisibility(this.savingEls, col, shouldShow); 47 | }; 48 | AutoSaveController.prototype.changeSavedVisibility = function (col, shouldShow) { 49 | this.changeVisibility(this.savedEls, col, shouldShow); 50 | }; 51 | AutoSaveController.prototype.changeVisibility = function (elArr, col, shouldShow) { 52 | for (var j = 0, jl = elArr.length; j < jl; j++) { 53 | if (elArr[j].col === col && elArr[j].key === this.key) { 54 | if (shouldShow) { 55 | elArr[j].el.removeClass('ng-hide'); 56 | } 57 | else { 58 | elArr[j].el.addClass('ng-hide'); 59 | } 60 | break; 61 | } 62 | } 63 | }; 64 | AutoSaveController.prototype.getAutoSaveFunction = function () { 65 | var parts = this.$attrs.autoSave.split('.'); 66 | var bindingContext = this.$scope; 67 | this.autoSaveFn = this.$scope[parts[0]]; 68 | if (parts.length > 1) { 69 | for (var i = 1, l = parts.length; i < l; i++) { 70 | this.autoSaveFn = this.autoSaveFn[parts[i]]; 71 | bindingContext = bindingContext[parts[i - 1]]; 72 | } 73 | } 74 | if (this.autoSaveFn) { 75 | this.autoSaveFn = this.autoSaveFn.bind(bindingContext); 76 | } 77 | else { 78 | console.error('could not find auto-saving function', this.$attrs.autoSave, 'on the scope'); 79 | } 80 | }; 81 | AutoSaveController.prototype.keyReady = function () { 82 | this.$scope.$broadcast('ngAutoSave.keyReady'); 83 | }; 84 | AutoSaveController.$inject = ['$scope', '$element', '$attrs']; 85 | return AutoSaveController; 86 | }()); 87 | autoSaveFieldDirective.$inject = ['$timeout']; 88 | function autoSaveFieldDirective($timeout) { 89 | return { 90 | restrict: 'A', 91 | require: ['^autoSave', '^form', 'ngModel'], 92 | link: function ($scope, $elem, $attrs, $ctrls) { 93 | var autoSaveCtrl = $ctrls[0]; 94 | var form = $ctrls[1]; 95 | var lastValidVal = undefined; 96 | var ngModel = $attrs.ngModel; 97 | var field = $attrs.autoSaveField; 98 | var timeout = null; 99 | var debounce = autoSaveCtrl.debounce; 100 | var key = undefined; 101 | var queue = []; 102 | if (autoSaveCtrl.key === undefined) { 103 | $scope.$on('ngAutoSave.keyReady', function () { 104 | init(); 105 | }); 106 | } 107 | else { 108 | init(); 109 | } 110 | function init() { 111 | key = autoSaveCtrl.key; 112 | $scope.$watch(ngModel, function (newVal, oldVal) { 113 | if (newVal !== oldVal && (lastValidVal || newVal !== lastValidVal)) { 114 | if (form.$valid) { 115 | lastValidVal = newVal; 116 | } 117 | debounceSave(field, newVal); 118 | } 119 | }); 120 | if (!$scope.autoSaving) { 121 | $scope.autoSaving = {}; 122 | } 123 | if (!$scope.autoSaving[field]) { 124 | $scope.autoSaving[field] = {}; 125 | } 126 | if (!$scope.autoSaving[field][key]) { 127 | $scope.autoSaving[field][key] = false; 128 | } 129 | if (!$scope.autoSaved) { 130 | $scope.autoSaved = {}; 131 | } 132 | if (!$scope.autoSaved[field]) { 133 | $scope.autoSaved[field] = {}; 134 | } 135 | if (!$scope.autoSaved[field][key]) { 136 | $scope.autoSaved[field][key] = false; 137 | } 138 | } 139 | function debounceSave(col, value) { 140 | if (debounce) { 141 | if (timeout) { 142 | $timeout.cancel(timeout); 143 | } 144 | timeout = $timeout(function () { 145 | queue.push({ col: col, value: value }); 146 | runQueue(); 147 | }, debounce); 148 | } 149 | else { 150 | queue.push({ col: col, value: value }); 151 | runQueue(); 152 | } 153 | } 154 | function runQueue() { 155 | var isSaving = getSaving(); 156 | if (!isSaving) { 157 | var args = queue.shift(); 158 | if (args) { 159 | save(args.col, args.value, runQueue); 160 | } 161 | } 162 | } 163 | function getSaving() { 164 | return $scope.autoSaving[field][key]; 165 | } 166 | function setSaving(val) { 167 | $scope.autoSaving[field][key] = val; 168 | } 169 | function setSaved(val) { 170 | $scope.autoSaved[field][key] = val; 171 | } 172 | function save(col, value, cb) { 173 | if (form.$valid) { 174 | setSaving(true); 175 | autoSaveCtrl.changeSavingVisibility(col, true); 176 | autoSaveCtrl.changeSavedVisibility(col, false); 177 | try { 178 | autoSaveCtrl.autoSaveFn(col, value, key).then(function () { 179 | autoSaveCtrl.changeSavingVisibility(col, false); 180 | autoSaveCtrl.changeSavedVisibility(col, true); 181 | setSaving(false); 182 | setSaved(true); 183 | $timeout(function () { 184 | setSaved(false); 185 | }, 3000); 186 | cb(); 187 | }, function (error) { 188 | console.log(error); 189 | autoSaveCtrl.changeSavingVisibility(col, false); 190 | setSaving(false); 191 | cb(); 192 | }); 193 | } 194 | catch (e) { 195 | console.log('error in auto-save. col:', col, '; value:', value, '; key:', key); 196 | console.log(e.stack); 197 | } 198 | } 199 | else { 200 | autoSaveCtrl.changeSavedVisibility(col, false); 201 | cb(); 202 | } 203 | } 204 | } 205 | }; 206 | } 207 | function autoSavingDirective() { 208 | return { 209 | restrict: 'A', 210 | require: '^autoSave', 211 | link: function ($scope, $elem, $attrs, autoSaveCtrl) { 212 | $elem.addClass('ng-hide'); 213 | $scope.$on('ngAutoSave.keyReady', function () { 214 | autoSaveCtrl.registerSavingEl($attrs.autoSaving, $elem); 215 | }); 216 | } 217 | }; 218 | } 219 | function autoSavedDirective() { 220 | return { 221 | restrict: 'A', 222 | require: '^autoSave', 223 | link: function ($scope, $elem, $attrs, autoSaveCtrl) { 224 | $elem.addClass('ng-hide'); 225 | $scope.$on('ngAutoSave.keyReady', function () { 226 | autoSaveCtrl.registerSavedEl($attrs.autoSaved, $elem); 227 | }); 228 | } 229 | }; 230 | } 231 | autoSaveModule.directive('autoSave', autoSaveDirective); 232 | autoSaveModule.directive('autoSaveField', autoSaveFieldDirective); 233 | autoSaveModule.directive('autoSaving', autoSavingDirective); 234 | autoSaveModule.directive('autoSaved', autoSavedDirective); 235 | -------------------------------------------------------------------------------- /dist/typings/ng-auto-save.d.ts: -------------------------------------------------------------------------------- 1 | declare var autoSaveModule: ng.IModule; 2 | declare function autoSaveDirective(): angular.IDirective; 3 | declare class AutoSaveController { 4 | private $scope; 5 | private $attrs; 6 | private savingEls; 7 | private savedEls; 8 | key: string; 9 | autoSaveFnName: string; 10 | autoSaveFn: (col: string, value: any, key: any) => ng.IPromise; 11 | debounce: number; 12 | static $inject: string[]; 13 | constructor($scope: any, $element: any, $attrs: any); 14 | registerSavingEl(col: any, el: any): void; 15 | registerSavedEl(col: any, el: any): void; 16 | changeSavingVisibility(col: any, shouldShow: any): void; 17 | changeSavedVisibility(col: any, shouldShow: any): void; 18 | private changeVisibility(elArr, col, shouldShow); 19 | private getAutoSaveFunction(); 20 | private keyReady(); 21 | } 22 | declare function autoSaveFieldDirective($timeout: any): angular.IDirective; 23 | declare function autoSavingDirective(): angular.IDirective; 24 | declare function autoSavedDirective(): angular.IDirective; 25 | -------------------------------------------------------------------------------- /gulpfile.js: -------------------------------------------------------------------------------- 1 | var gulp = require('gulp'); 2 | var path = require('path'); 3 | var del = require('del'); 4 | var colors = require('colors'); 5 | var $ = require('gulp-load-plugins')(); 6 | 7 | gulp.task('clean', function (cb) { 8 | del(['dist/']).then(path => { cb(); }); 9 | }); 10 | 11 | gulp.task('compile', () => { 12 | var tsProject = $.typescript.createProject('./tsconfig.json', { 13 | removeComments: true, 14 | noExternalResolve: false 15 | }); 16 | 17 | var tsResult = gulp.src(['./src/**/*.ts', './typings/**/*.ts']) 18 | .pipe($.typescript(tsProject)); 19 | 20 | tsResult.dts 21 | .pipe(gulp.dest('./dist/typings')); 22 | 23 | return tsResult.js 24 | .pipe(gulp.dest('./dist/src')); 25 | }); 26 | 27 | gulp.task('ts-lint', function () { 28 | return gulp.src('./src/**/*.ts') 29 | .pipe($.tslint()) 30 | .pipe($.tslint.report('full', {emitError: false})); 31 | }); 32 | 33 | gulp.task('watch', () => { 34 | gulp.watch('./src/**/*.ts').on('change', tsLintFile); 35 | gulp.watch('./src/**/*.ts').on('change', compileFile); 36 | }); 37 | 38 | gulp.task('build', gulp.series('clean', 'compile')); 39 | 40 | gulp.task('default', gulp.series('build', 'ts-lint')); 41 | 42 | function tsLintFile(file) { 43 | console.log(colors.yellow('[gulp watch - tsLint]' + ' ' + colors.cyan(file))); 44 | gulp.src(file) 45 | .pipe($.tslint()) 46 | .pipe($.tslint.report('full', {emitError: false})); 47 | } 48 | 49 | function compileFile(file) { 50 | console.log(colors.yellow('[gulp watch - compileFile]' + ' ' + colors.cyan(file) )); 51 | var tsProject = $.typescript.createProject('./tsconfig.json', { 52 | removeComments: true, 53 | noExternalResolve: false, 54 | rootDir: '.' 55 | }); 56 | 57 | var tsResult = gulp.src([file, './typings/**/*.ts']) 58 | .pipe($.typescript(tsProject)); 59 | 60 | return tsResult.js 61 | .pipe(gulp.dest('./dist')); 62 | } 63 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "ng-auto-save", 3 | "version": "1.1.0", 4 | "description": "Set of angularjs directives to save inputs' values as user types", 5 | "main": "dist/src/ng-auto-save.js", 6 | "typings": "dist/typings/ng-auto-save.d.ts", 7 | "dependencies": { 8 | }, 9 | "devDependencies": { 10 | "del": "~2.2.0", 11 | "colors": "~1.1.2", 12 | "gulp": "gulpjs/gulp#4.0", 13 | "gulp-load-plugins": "~1.2.4", 14 | "gulp-tslint": "~5.0.0", 15 | "gulp-typescript": "2.13.6", 16 | "typescript": "~1.8.10" 17 | }, 18 | "repository": { 19 | "type": "git", 20 | "url": "git+https://github.com/DmitryEfimenko/ng-auto-save.git" 21 | }, 22 | "keywords": [ 23 | "angularjs", 24 | "javascript" 25 | ], 26 | "author": { 27 | "name": "Dmitry Efimenko", 28 | "email": "dmitrief@gmail.com" 29 | }, 30 | "license": "MIT", 31 | "typescript": { 32 | "definition": "index.d.ts" 33 | }, 34 | "bugs": { 35 | "url": "https://github.com/DmitryEfimenko/ng-auto-save/issues" 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /src/ng-auto-save.ts: -------------------------------------------------------------------------------- 1 | var autoSaveModule = angular.module('ng-auto-save', []); 2 | 3 | function autoSaveDirective(): angular.IDirective { 4 | return { 5 | restrict: 'A', 6 | controller: AutoSaveController, 7 | scope: false 8 | }; 9 | } 10 | 11 | class AutoSaveController { 12 | private savingEls = []; 13 | private savedEls = []; 14 | key: string = undefined; 15 | autoSaveFnName: string; 16 | autoSaveFn: (col: string, value: any, key: any) => ng.IPromise; 17 | debounce: number; 18 | 19 | static $inject = ['$scope', '$element', '$attrs']; 20 | constructor(private $scope, $element, private $attrs) { 21 | if ($element[0].tagName.toLowerCase() !== 'form') { throw Error('directive auto-save must be applied on tag '); } 22 | if (!$attrs.autoSave) { throw Error('attribute auto-save of such directive must have a value - the name of the saving function'); } 23 | 24 | this.autoSaveFnName = this.$attrs.autoSave; 25 | this.key = $scope.$eval($attrs.autoSaveKey); 26 | this.debounce = $attrs.autoSaveDebounce; 27 | this.getAutoSaveFunction(); 28 | 29 | if (!this.key) { 30 | $scope.$watch($attrs.autoSaveKey, (newVal, oldVal) => { 31 | if (newVal) { 32 | this.key = $scope.$eval($attrs.autoSaveKey); 33 | this.keyReady(); 34 | } 35 | }); 36 | } else { 37 | this.keyReady(); 38 | } 39 | } 40 | 41 | registerSavingEl(col, el) { 42 | this.savingEls.push({ col: col, key: this.key, el: el }); 43 | } 44 | 45 | registerSavedEl(col, el) { 46 | this.savedEls.push({ col: col, key: this.key, el: el }); 47 | } 48 | 49 | changeSavingVisibility(col, shouldShow) { 50 | this.changeVisibility(this.savingEls, col, shouldShow); 51 | } 52 | 53 | changeSavedVisibility(col, shouldShow) { 54 | this.changeVisibility(this.savedEls, col, shouldShow); 55 | } 56 | 57 | private changeVisibility(elArr, col, shouldShow) { 58 | for (var j = 0, jl = elArr.length; j < jl; j++) { 59 | if (elArr[j].col === col && elArr[j].key === this.key) { 60 | if (shouldShow) { 61 | elArr[j].el.removeClass('ng-hide'); 62 | } else { 63 | elArr[j].el.addClass('ng-hide'); 64 | } 65 | break; 66 | } 67 | } 68 | } 69 | 70 | private getAutoSaveFunction() { 71 | var parts = this.$attrs.autoSave.split('.'); 72 | var bindingContext = this.$scope; 73 | this.autoSaveFn = this.$scope[parts[0]]; 74 | if (parts.length > 1) { 75 | for (var i = 1, l = parts.length; i < l; i++) { 76 | this.autoSaveFn = this.autoSaveFn[parts[i]]; 77 | bindingContext = bindingContext[parts[i - 1]]; 78 | } 79 | } 80 | if (this.autoSaveFn) { 81 | this.autoSaveFn = this.autoSaveFn.bind(bindingContext); 82 | } else { 83 | console.error('could not find auto-saving function', this.$attrs.autoSave, 'on the scope'); 84 | } 85 | } 86 | 87 | private keyReady() { 88 | this.$scope.$broadcast('ngAutoSave.keyReady'); 89 | } 90 | } 91 | 92 | autoSaveFieldDirective.$inject = ['$timeout']; 93 | function autoSaveFieldDirective($timeout): angular.IDirective { 94 | return { 95 | restrict: 'A', 96 | require: ['^autoSave', '^form', 'ngModel'], 97 | link: function ($scope, $elem, $attrs: any, $ctrls) { 98 | var autoSaveCtrl: AutoSaveController = $ctrls[0]; 99 | var form = $ctrls[1]; 100 | var lastValidVal = undefined; 101 | var ngModel = $attrs.ngModel; 102 | var field = $attrs.autoSaveField; 103 | var timeout = null; 104 | var debounce = autoSaveCtrl.debounce; 105 | var key = undefined; 106 | var queue = []; 107 | 108 | if (autoSaveCtrl.key === undefined) { 109 | $scope.$on('ngAutoSave.keyReady', () => { 110 | init(); 111 | }); 112 | } else { 113 | init(); 114 | } 115 | 116 | function init() { 117 | key = autoSaveCtrl.key; 118 | $scope.$watch(ngModel, function (newVal, oldVal) { 119 | //console.log(ngModel, ': newVal', newVal, '; oldVal', oldVal); 120 | if (newVal !== oldVal && (lastValidVal || newVal !== lastValidVal)) { 121 | if (form.$valid) { lastValidVal = newVal; } 122 | debounceSave(field, newVal); 123 | } 124 | }); 125 | 126 | if (!$scope.autoSaving) { $scope.autoSaving = {}; } 127 | if (!$scope.autoSaving[field]) { $scope.autoSaving[field] = {}; } 128 | if (!$scope.autoSaving[field][key]) { $scope.autoSaving[field][key] = false; } 129 | 130 | if (!$scope.autoSaved) { $scope.autoSaved = {}; } 131 | if (!$scope.autoSaved[field]) { $scope.autoSaved[field] = {}; } 132 | if (!$scope.autoSaved[field][key]) { $scope.autoSaved[field][key] = false; } 133 | } 134 | 135 | function debounceSave(col, value) { 136 | if (debounce) { 137 | if (timeout) { 138 | $timeout.cancel(timeout); 139 | } 140 | timeout = $timeout(function () { 141 | queue.push({ col: col, value: value }); 142 | runQueue(); 143 | }, debounce); 144 | } else { 145 | queue.push({ col: col, value: value }); 146 | runQueue(); 147 | } 148 | } 149 | 150 | function runQueue() { 151 | var isSaving = getSaving(); 152 | if (!isSaving) { 153 | var args = queue.shift(); 154 | if (args) { save(args.col, args.value, runQueue); } 155 | } 156 | } 157 | 158 | function getSaving() { 159 | return $scope.autoSaving[field][key]; 160 | } 161 | 162 | function setSaving(val) { 163 | $scope.autoSaving[field][key] = val; 164 | } 165 | 166 | function setSaved(val) { 167 | $scope.autoSaved[field][key] = val; 168 | } 169 | 170 | function save(col, value, cb) { 171 | if (form.$valid) { 172 | setSaving(true); 173 | autoSaveCtrl.changeSavingVisibility(col, true); 174 | autoSaveCtrl.changeSavedVisibility(col, false); 175 | try { 176 | autoSaveCtrl.autoSaveFn(col, value, key).then( 177 | function () { 178 | autoSaveCtrl.changeSavingVisibility(col, false); 179 | autoSaveCtrl.changeSavedVisibility(col, true); 180 | setSaving(false); 181 | setSaved(true); 182 | $timeout(function () { 183 | setSaved(false); 184 | }, 3000); 185 | cb(); 186 | }, 187 | function (error) { 188 | console.log(error); 189 | autoSaveCtrl.changeSavingVisibility(col, false); 190 | setSaving(false); 191 | cb(); 192 | } 193 | ); 194 | } catch (e) { 195 | console.log('error in auto-save. col:', col, '; value:', value, '; key:', key); 196 | console.log(e.stack); 197 | } 198 | } else { 199 | autoSaveCtrl.changeSavedVisibility(col, false); 200 | cb(); 201 | } 202 | } 203 | 204 | } 205 | }; 206 | } 207 | 208 | function autoSavingDirective(): angular.IDirective { 209 | return { 210 | restrict: 'A', 211 | require: '^autoSave', 212 | link: function ($scope, $elem, $attrs: any, autoSaveCtrl: AutoSaveController) { 213 | $elem.addClass('ng-hide'); 214 | $scope.$on('ngAutoSave.keyReady', () => { 215 | autoSaveCtrl.registerSavingEl($attrs.autoSaving, $elem); 216 | }); 217 | } 218 | }; 219 | } 220 | 221 | function autoSavedDirective(): angular.IDirective { 222 | return { 223 | restrict: 'A', 224 | require: '^autoSave', 225 | link: function ($scope, $elem, $attrs: any, autoSaveCtrl: AutoSaveController) { 226 | $elem.addClass('ng-hide'); 227 | $scope.$on('ngAutoSave.keyReady', () => { 228 | autoSaveCtrl.registerSavedEl($attrs.autoSaved, $elem); 229 | }); 230 | } 231 | }; 232 | } 233 | 234 | autoSaveModule.directive('autoSave', autoSaveDirective); 235 | autoSaveModule.directive('autoSaveField', autoSaveFieldDirective); 236 | autoSaveModule.directive('autoSaving', autoSavingDirective); 237 | autoSaveModule.directive('autoSaved', autoSavedDirective); 238 | 239 | //export default autoSaveModule; 240 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "declaration": true, 4 | "module": "commonjs", 5 | "target": "es5", 6 | "sourceMap": true, 7 | "outDir": "dist" 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /tslint.json: -------------------------------------------------------------------------------- 1 | { 2 | "rules": { 3 | "class-name": true, 4 | "curly": true, 5 | "eofline": true, 6 | "forin": true, 7 | "indent": false, 8 | "label-position": true, 9 | "label-undefined": true, 10 | "max-line-length": [true, 140], 11 | "no-arg": true, 12 | "no-bitwise": true, 13 | "no-console": [true, 14 | "debug", 15 | "info", 16 | "time", 17 | "timeEnd", 18 | "trace" 19 | ], 20 | "no-construct": true, 21 | "no-debugger": true, 22 | "no-duplicate-key": true, 23 | "no-duplicate-variable": true, 24 | "no-empty": true, 25 | "no-eval": true, 26 | "no-string-literal": false, 27 | "no-switch-case-fall-through": true, 28 | "no-trailing-whitespace": true, 29 | "no-unused-expression": true, 30 | "no-unused-variable": false, 31 | "no-unreachable": true, 32 | "no-use-before-declare": true, 33 | "one-line": [true, 34 | "check-open-brace", 35 | "check-catch", 36 | "check-else", 37 | "check-whitespace" 38 | ], 39 | "quotemark": [true, "single"], 40 | "radix": true, 41 | "semicolon": true, 42 | "trailing-comma": false, 43 | "triple-equals": [true, "allow-null-check"], 44 | "variable-name": false, 45 | "whitespace": [true, 46 | "check-branch", 47 | "check-decl", 48 | "check-operator", 49 | "check-separator", 50 | "check-type" 51 | ] 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /typings/angularjs/angular-animate.d.ts: -------------------------------------------------------------------------------- 1 | // Type definitions for Angular JS 1.3 (ngAnimate module) 2 | // Project: http://angularjs.org 3 | // Definitions by: Michel Salib , Adi Dahiya , Raphael Schweizer , Cody Schaaf 4 | // Definitions: https://github.com/borisyankov/DefinitelyTyped 5 | 6 | /// 7 | 8 | declare module "angular-animate" { 9 | var _: string; 10 | export = _; 11 | } 12 | 13 | /** 14 | * ngAnimate module (angular-animate.js) 15 | */ 16 | declare module angular.animate { 17 | interface IAnimateFactory extends Function { 18 | enter?: (element: ng.IAugmentedJQuery, doneFn: Function) => IAnimateCssRunner|void; 19 | leave?: (element: ng.IAugmentedJQuery, doneFn: Function) => IAnimateCssRunner|void; 20 | addClass?: (element: ng.IAugmentedJQuery, className: string, doneFn: Function) => IAnimateCssRunner|void; 21 | removeClass?: (element: ng.IAugmentedJQuery, className: string, doneFn: Function) => IAnimateCssRunner|void; 22 | setClass?: (element: ng.IAugmentedJQuery, className: string, doneFn: Function) => IAnimateCssRunner|void; 23 | } 24 | 25 | /** 26 | * AnimateService 27 | * see http://docs.angularjs.org/api/ngAnimate/service/$animate 28 | */ 29 | interface IAnimateService { 30 | /** 31 | * Globally enables / disables animations. 32 | * 33 | * @param element If provided then the element will be used to represent the enable/disable operation. 34 | * @param value If provided then set the animation on or off. 35 | * @returns current animation state 36 | */ 37 | enabled(element?: JQuery, value?: boolean): boolean; 38 | 39 | /** 40 | * Performs an inline animation on the element. 41 | * 42 | * @param element the element that will be the focus of the animation 43 | * @param from a collection of CSS styles that will be applied to the element at the start of the animation 44 | * @param to a collection of CSS styles that the element will animate towards 45 | * @param className an optional CSS class that will be added to the element for the duration of the animation (the default class is 'ng-inline-animate') 46 | * @param options an optional collection of styles that will be picked up by the CSS transition/animation 47 | * @returns the animation callback promise 48 | */ 49 | animate(element: JQuery, from: any, to: any, className?: string, options?: IAnimationOptions): IPromise; 50 | 51 | /** 52 | * Appends the element to the parentElement element that resides in the document and then runs the enter animation. 53 | * 54 | * @param element the element that will be the focus of the enter animation 55 | * @param parentElement the parent element of the element that will be the focus of the enter animation 56 | * @param afterElement the sibling element (which is the previous element) of the element that will be the focus of the enter animation 57 | * @param options an optional collection of styles that will be picked up by the CSS transition/animation 58 | * @returns the animation callback promise 59 | */ 60 | enter(element: JQuery, parentElement: JQuery, afterElement?: JQuery, options?: IAnimationOptions): IPromise; 61 | 62 | /** 63 | * Runs the leave animation operation and, upon completion, removes the element from the DOM. 64 | * 65 | * @param element the element that will be the focus of the leave animation 66 | * @param options an optional collection of styles that will be picked up by the CSS transition/animation 67 | * @returns the animation callback promise 68 | */ 69 | leave(element: JQuery, options?: IAnimationOptions): IPromise; 70 | 71 | /** 72 | * Fires the move DOM operation. Just before the animation starts, the animate service will either append 73 | * it into the parentElement container or add the element directly after the afterElement element if present. 74 | * Then the move animation will be run. 75 | * 76 | * @param element the element that will be the focus of the move animation 77 | * @param parentElement the parent element of the element that will be the focus of the move animation 78 | * @param afterElement the sibling element (which is the previous element) of the element that will be the focus of the move animation 79 | * @returns the animation callback promise 80 | */ 81 | move(element: JQuery, parentElement: JQuery, afterElement?: JQuery): IPromise; 82 | 83 | /** 84 | * Triggers a custom animation event based off the className variable and then attaches the className 85 | * value to the element as a CSS class. 86 | * 87 | * @param element the element that will be animated 88 | * @param className the CSS class that will be added to the element and then animated 89 | * @param options an optional collection of styles that will be picked up by the CSS transition/animation 90 | * @returns the animation callback promise 91 | */ 92 | addClass(element: JQuery, className: string, options?: IAnimationOptions): IPromise; 93 | 94 | /** 95 | * Triggers a custom animation event based off the className variable and then removes the CSS class 96 | * provided by the className value from the element. 97 | * 98 | * @param element the element that will be animated 99 | * @param className the CSS class that will be animated and then removed from the element 100 | * @param options an optional collection of styles that will be picked up by the CSS transition/animation 101 | * @returns the animation callback promise 102 | */ 103 | removeClass(element: JQuery, className: string, options?: IAnimationOptions): IPromise; 104 | 105 | /** 106 | * Adds and/or removes the given CSS classes to and from the element. Once complete, the done() callback 107 | * will be fired (if provided). 108 | * 109 | * @param element the element which will have its CSS classes changed removed from it 110 | * @param add the CSS classes which will be added to the element 111 | * @param remove the CSS class which will be removed from the element CSS classes have been set on the element 112 | * @param options an optional collection of styles that will be picked up by the CSS transition/animation 113 | * @returns the animation callback promise 114 | */ 115 | setClass(element: JQuery, add: string, remove: string, options?: IAnimationOptions): IPromise; 116 | 117 | /** 118 | * Cancels the provided animation. 119 | */ 120 | cancel(animationPromise: IPromise): void; 121 | } 122 | 123 | /** 124 | * AnimateProvider 125 | * see http://docs.angularjs.org/api/ngAnimate/provider/$animateProvider 126 | */ 127 | interface IAnimateProvider { 128 | /** 129 | * Registers a new injectable animation factory function. 130 | * 131 | * @param name The name of the animation. 132 | * @param factory The factory function that will be executed to return the animation object. 133 | */ 134 | register(name: string, factory: () => IAnimateCallbackObject): void; 135 | 136 | /** 137 | * Gets and/or sets the CSS class expression that is checked when performing an animation. 138 | * 139 | * @param expression The className expression which will be checked against all animations. 140 | * @returns The current CSS className expression value. If null then there is no expression value. 141 | */ 142 | classNameFilter(expression?: RegExp): RegExp; 143 | } 144 | 145 | /** 146 | * Angular Animation Options 147 | * see https://docs.angularjs.org/api/ngAnimate/#applying-directive-specific-styles-to-an-animation 148 | */ 149 | interface IAnimationOptions { 150 | /** 151 | * The ending CSS styles (a key/value object) that will be applied across the animation via a CSS transition. 152 | */ 153 | to?: Object; 154 | 155 | /** 156 | * The starting CSS styles (a key/value object) that will be applied at the start of the animation. 157 | */ 158 | from?: Object; 159 | 160 | /** 161 | * The DOM event (e.g. enter, leave, move). When used, a generated CSS class of ng-EVENT and 162 | * ng-EVENT-active will be applied to the element during the animation. Multiple events can be provided when 163 | * spaces are used as a separator. (Note that this will not perform any DOM operation.) 164 | */ 165 | event?: string; 166 | 167 | /** 168 | * The CSS easing value that will be applied to the transition or keyframe animation (or both). 169 | */ 170 | easing?: string; 171 | 172 | /** 173 | * The raw CSS transition style that will be used (e.g. 1s linear all). 174 | */ 175 | transition?: string; 176 | 177 | /** 178 | * The raw CSS keyframe animation style that will be used (e.g. 1s my_animation linear). 179 | */ 180 | keyframe?: string; 181 | 182 | /** 183 | * A space separated list of CSS classes that will be added to the element and spread across the animation. 184 | */ 185 | addClass?: string; 186 | 187 | /** 188 | * A space separated list of CSS classes that will be removed from the element and spread across 189 | * the animation. 190 | */ 191 | removeClass?: string; 192 | 193 | /** 194 | * A number value representing the total duration of the transition and/or keyframe (note that a value 195 | * of 1 is 1000ms). If a value of 0 is provided then the animation will be skipped entirely. 196 | */ 197 | duration?: number; 198 | 199 | /** 200 | * A number value representing the total delay of the transition and/or keyframe (note that a value of 201 | * 1 is 1000ms). If a value of true is used then whatever delay value is detected from the CSS classes will be 202 | * mirrored on the elements styles (e.g. by setting delay true then the style value of the element will be 203 | * transition-delay: DETECTED_VALUE). Using true is useful when you want the CSS classes and inline styles to 204 | * all share the same CSS delay value. 205 | */ 206 | delay?: number; 207 | 208 | /** 209 | * A numeric time value representing the delay between successively animated elements (Click here to 210 | * learn how CSS-based staggering works in ngAnimate.) 211 | */ 212 | stagger?: number; 213 | 214 | /** 215 | * The numeric index representing the stagger item (e.g. a value of 5 is equal to the sixth item 216 | * in the stagger; therefore when a stagger option value of 0.1 is used then there will be a stagger delay of 600ms) 217 | * applyClassesEarly - Whether or not the classes being added or removed will be used when detecting the animation. 218 | * This is set by $animate when enter/leave/move animations are fired to ensure that the CSS classes are resolved in time. 219 | * (Note that this will prevent any transitions from occuring on the classes being added and removed.) 220 | */ 221 | staggerIndex?: number; 222 | } 223 | 224 | interface IAnimateCssRunner { 225 | /** 226 | * Starts the animation 227 | * 228 | * @returns The animation runner with a done function for supplying a callback. 229 | */ 230 | start(): IAnimateCssRunnerStart; 231 | 232 | /** 233 | * Ends (aborts) the animation 234 | */ 235 | end(): void; 236 | } 237 | 238 | interface IAnimateCssRunnerStart extends IPromise { 239 | /** 240 | * Allows you to add done callbacks to the running animation 241 | * 242 | * @param callbackFn: the callback function to be run 243 | */ 244 | done(callbackFn: (animationFinished: boolean) => void): void; 245 | } 246 | 247 | /** 248 | * AnimateCssService 249 | * see http://docs.angularjs.org/api/ngAnimate/service/$animateCss 250 | */ 251 | interface IAnimateCssService { 252 | (element: JQuery, animateCssOptions: IAnimationOptions): IAnimateCssRunner; 253 | } 254 | 255 | } 256 | 257 | declare module angular { 258 | interface IModule { 259 | animate(cssSelector: string, animateFactory: angular.animate.IAnimateFactory): IModule; 260 | } 261 | } 262 | -------------------------------------------------------------------------------- /typings/angularjs/angular-cookies.d.ts: -------------------------------------------------------------------------------- 1 | // Type definitions for Angular JS 1.4 (ngCookies module) 2 | // Project: http://angularjs.org 3 | // Definitions by: Diego Vilar , Anthony Ciccarello 4 | // Definitions: https://github.com/borisyankov/DefinitelyTyped 5 | 6 | 7 | /// 8 | 9 | declare module "angular-cookies" { 10 | var _: string; 11 | export = _; 12 | } 13 | 14 | /** 15 | * ngCookies module (angular-cookies.js) 16 | */ 17 | declare module angular.cookies { 18 | 19 | /** 20 | * Cookies options 21 | * see https://docs.angularjs.org/api/ngCookies/provider/$cookiesProvider#defaults 22 | */ 23 | interface ICookiesOptions { 24 | /** 25 | * The cookie will be available only for this path and its sub-paths. 26 | * By default, this would be the URL that appears in your base tag. 27 | */ 28 | path?: string; 29 | /** 30 | * The cookie will be available only for this domain and its sub-domains. 31 | * For obvious security reasons the user agent will not accept the cookie if the 32 | * current domain is not a sub domain or equals to the requested domain. 33 | */ 34 | domain?: string; 35 | /** 36 | * String of the form "Wdy, DD Mon YYYY HH:MM:SS GMT" or a Date object 37 | * indicating the exact date/time this cookie will expire. 38 | */ 39 | expires?: string|Date; 40 | /** 41 | * The cookie will be available only in secured connection. 42 | */ 43 | secure?: boolean; 44 | } 45 | 46 | /** 47 | * CookieService 48 | * see http://docs.angularjs.org/api/ngCookies.$cookies 49 | */ 50 | interface ICookiesService { 51 | [index: string]: any; 52 | } 53 | 54 | /** 55 | * CookieStoreService 56 | * see http://docs.angularjs.org/api/ngCookies.$cookieStore 57 | */ 58 | interface ICookiesService { 59 | get(key: string): string; 60 | getObject(key: string): any; 61 | getObject(key: string): T; 62 | getAll(): any; 63 | put(key: string, value: string, options?: ICookiesOptions): void; 64 | putObject(key: string, value: any, options?: ICookiesOptions): void; 65 | remove(key: string, options?: ICookiesOptions): void; 66 | } 67 | 68 | /** 69 | * CookieStoreService DEPRECATED 70 | * see https://code.angularjs.org/1.2.26/docs/api/ngCookies/service/$cookieStore 71 | */ 72 | interface ICookieStoreService { 73 | /** 74 | * Returns the value of given cookie key 75 | * @param key Id to use for lookup 76 | */ 77 | get(key: string): any; 78 | /** 79 | * Sets a value for given cookie key 80 | * @param key Id for the value 81 | * @param value Value to be stored 82 | */ 83 | put(key: string, value: any): void; 84 | /** 85 | * Remove given cookie 86 | * @param key Id of the key-value pair to delete 87 | */ 88 | remove(key: string): void; 89 | } 90 | 91 | } 92 | -------------------------------------------------------------------------------- /typings/angularjs/angular-mocks.d.ts: -------------------------------------------------------------------------------- 1 | // Type definitions for Angular JS 1.3 (ngMock, ngMockE2E module) 2 | // Project: http://angularjs.org 3 | // Definitions by: Diego Vilar , Tony Curtis 4 | // Definitions: https://github.com/borisyankov/DefinitelyTyped 5 | 6 | /// 7 | 8 | declare module "angular-mocks/ngMock" { 9 | var _: string; 10 | export = _; 11 | } 12 | 13 | declare module "angular-mocks/ngMockE2E" { 14 | var _: string; 15 | export = _; 16 | } 17 | 18 | declare module "angular-mocks/ngAnimateMock" { 19 | var _: string; 20 | export = _; 21 | } 22 | 23 | /////////////////////////////////////////////////////////////////////////////// 24 | // ngMock module (angular-mocks.js) 25 | /////////////////////////////////////////////////////////////////////////////// 26 | declare module angular { 27 | 28 | /////////////////////////////////////////////////////////////////////////// 29 | // AngularStatic 30 | // We reopen it to add the MockStatic definition 31 | /////////////////////////////////////////////////////////////////////////// 32 | interface IAngularStatic { 33 | mock: IMockStatic; 34 | } 35 | 36 | // see https://docs.angularjs.org/api/ngMock/function/angular.mock.inject 37 | interface IInjectStatic { 38 | (...fns: Function[]): any; 39 | (...inlineAnnotatedConstructor: any[]): any; // this overload is undocumented, but works 40 | strictDi(val?: boolean): void; 41 | } 42 | 43 | interface IMockStatic { 44 | // see https://docs.angularjs.org/api/ngMock/function/angular.mock.dump 45 | dump(obj: any): string; 46 | 47 | inject: IInjectStatic 48 | 49 | // see https://docs.angularjs.org/api/ngMock/function/angular.mock.module 50 | module(...modules: any[]): any; 51 | 52 | // see https://docs.angularjs.org/api/ngMock/type/angular.mock.TzDate 53 | TzDate(offset: number, timestamp: number): Date; 54 | TzDate(offset: number, timestamp: string): Date; 55 | } 56 | 57 | /////////////////////////////////////////////////////////////////////////// 58 | // ExceptionHandlerService 59 | // see https://docs.angularjs.org/api/ngMock/service/$exceptionHandler 60 | // see https://docs.angularjs.org/api/ngMock/provider/$exceptionHandlerProvider 61 | /////////////////////////////////////////////////////////////////////////// 62 | interface IExceptionHandlerProvider extends IServiceProvider { 63 | mode(mode: string): void; 64 | } 65 | 66 | /////////////////////////////////////////////////////////////////////////// 67 | // TimeoutService 68 | // see https://docs.angularjs.org/api/ngMock/service/$timeout 69 | // Augments the original service 70 | /////////////////////////////////////////////////////////////////////////// 71 | interface ITimeoutService { 72 | flush(delay?: number): void; 73 | flushNext(expectedDelay?: number): void; 74 | verifyNoPendingTasks(): void; 75 | } 76 | 77 | /////////////////////////////////////////////////////////////////////////// 78 | // IntervalService 79 | // see https://docs.angularjs.org/api/ngMock/service/$interval 80 | // Augments the original service 81 | /////////////////////////////////////////////////////////////////////////// 82 | interface IIntervalService { 83 | flush(millis?: number): number; 84 | } 85 | 86 | /////////////////////////////////////////////////////////////////////////// 87 | // LogService 88 | // see https://docs.angularjs.org/api/ngMock/service/$log 89 | // Augments the original service 90 | /////////////////////////////////////////////////////////////////////////// 91 | interface ILogService { 92 | assertEmpty(): void; 93 | reset(): void; 94 | } 95 | 96 | interface ILogCall { 97 | logs: string[]; 98 | } 99 | 100 | /////////////////////////////////////////////////////////////////////////// 101 | // HttpBackendService 102 | // see https://docs.angularjs.org/api/ngMock/service/$httpBackend 103 | /////////////////////////////////////////////////////////////////////////// 104 | interface IHttpBackendService { 105 | /** 106 | * Flushes all pending requests using the trained responses. 107 | * @param count Number of responses to flush (in the order they arrived). If undefined, all pending requests will be flushed. 108 | */ 109 | flush(count?: number): void; 110 | 111 | /** 112 | * Resets all request expectations, but preserves all backend definitions. 113 | */ 114 | resetExpectations(): void; 115 | 116 | /** 117 | * Verifies that all of the requests defined via the expect api were made. If any of the requests were not made, verifyNoOutstandingExpectation throws an exception. 118 | */ 119 | verifyNoOutstandingExpectation(): void; 120 | 121 | /** 122 | * Verifies that there are no outstanding requests that need to be flushed. 123 | */ 124 | verifyNoOutstandingRequest(): void; 125 | 126 | /** 127 | * Creates a new request expectation. 128 | * Throws a preformatted error if expectation(s) don't match supplied string, regular expression, object, or if function returns false. 129 | * Returns an object with respond method that controls how a matched request is handled. 130 | * @param method HTTP method. 131 | * @param url HTTP url string, regular expression or function that receives a url and returns true if the url matches the current expctation. 132 | * @param data HTTP request body string, json object, regular expression or function that receives the data and returns true if the data matches the current expectation. 133 | * @param headers HTTP headers object or function that receives the headers and returns true if the headers match the current expectation. 134 | */ 135 | expect(method: string, url: string | RegExp | ((url: string) => boolean), data?: string | RegExp | Object | ((data: string) => boolean), headers?: Object | ((object: Object) => boolean)) :mock.IRequestHandler; 136 | 137 | /** 138 | * Creates a new request expectation for DELETE requests. 139 | * Throws a preformatted error if expectation(s) don't match supplied string, regular expression, object, or if function returns false. 140 | * Returns an object with respond method that controls how a matched request is handled. 141 | * @param url HTTP url string, regular expression or function that receives a url and returns true if the url is as expected. 142 | * @param headers HTTP headers object to be compared with the HTTP headers in the request. 143 | */ 144 | expectDELETE(url: string | RegExp | ((url: string) => boolean), headers?: Object): mock.IRequestHandler; 145 | 146 | /** 147 | * Creates a new request expectation for GET requests. 148 | * Throws a preformatted error if expectation(s) don't match supplied string, regular expression, object, or if function returns false. 149 | * Returns an object with respond method that controls how a matched request is handled. 150 | * @param url HTTP url string, regular expression or function that receives a url and returns true if the url matches the current expctation. 151 | * @param headers HTTP headers object to be compared with the HTTP headers in the request. 152 | */ 153 | expectGET(url: string | RegExp | ((url: string) => boolean), headers?: Object): mock.IRequestHandler; 154 | 155 | /** 156 | * Creates a new request expectation for HEAD requests. 157 | * Throws a preformatted error if expectation(s) don't match supplied string, regular expression, object, or if function returns false. 158 | * Returns an object with respond method that controls how a matched request is handled. 159 | * @param url HTTP url string, regular expression or function that receives a url and returns true if the url matches the current expctation. 160 | * @param headers HTTP headers object to be compared with the HTTP headers in the request. 161 | */ 162 | expectHEAD(url: string | RegExp | ((url: string) => boolean), headers?: Object): mock.IRequestHandler; 163 | 164 | /** 165 | * Creates a new request expectation for JSONP requests. 166 | * Throws a preformatted error if expectation(s) don't match supplied string, regular expression, or if function returns false. 167 | * Returns an object with respond method that controls how a matched request is handled. 168 | * @param url HTTP url string, regular expression or function that receives a url and returns true if the url matches the current expctation. 169 | */ 170 | expectJSONP(url: string | RegExp | ((url: string) => boolean)): mock.IRequestHandler; 171 | 172 | /** 173 | * Creates a new request expectation for PATCH requests. 174 | * Throws a preformatted error if expectation(s) don't match supplied string, regular expression, object, or if function returns false. 175 | * Returns an object with respond method that controls how a matched request is handled. 176 | * @param url HTTP url string, regular expression or function that receives a url and returns true if the url matches the current expctation. 177 | * @param data HTTP request body string, json object, regular expression or function that receives the data and returns true if the data matches the current expectation. 178 | * @param headers HTTP headers object or function that receives the headers and returns true if the headers match the current expectation. 179 | */ 180 | expectPATCH(url: string | RegExp | ((url: string) => boolean), data?: string | RegExp | Object | ((data: string) => boolean), headers?: Object): mock.IRequestHandler; 181 | 182 | /** 183 | * Creates a new request expectation for POST requests. 184 | * Throws a preformatted error if expectation(s) don't match supplied string, regular expression, object, or if function returns false. 185 | * Returns an object with respond method that controls how a matched request is handled. 186 | * @param url HTTP url string, regular expression or function that receives a url and returns true if the url matches the current expctation. 187 | * @param data HTTP request body string, json object, regular expression or function that receives the data and returns true if the data matches the current expectation. 188 | * @param headers HTTP headers object or function that receives the headers and returns true if the headers match the current expectation. 189 | */ 190 | expectPOST(url: string | RegExp | ((url: string) => boolean), data?: string | RegExp | Object | ((data: string) => boolean), headers?: Object): mock.IRequestHandler; 191 | 192 | /** 193 | * Creates a new request expectation for PUT requests. 194 | * Throws a preformatted error if expectation(s) don't match supplied string, regular expression, object, or if function returns false. 195 | * Returns an object with respond method that controls how a matched request is handled. 196 | * @param url HTTP url string, regular expression or function that receives a url and returns true if the url matches the current expctation. 197 | * @param data HTTP request body string, json object, regular expression or function that receives the data and returns true if the data matches the current expectation. 198 | * @param headers HTTP headers object or function that receives the headers and returns true if the headers match the current expectation. 199 | */ 200 | expectPUT(url: string | RegExp | ((url: string) => boolean), data?: string | RegExp | Object | ((data: string) => boolean), headers?: Object): mock.IRequestHandler; 201 | 202 | /** 203 | * Creates a new backend definition. 204 | * Returns an object with respond method that controls how a matched request is handled. 205 | * @param method HTTP method. 206 | * @param url HTTP url string, regular expression or function that receives a url and returns true if the url matches the current expctation. 207 | * @param data HTTP request body string, json object, regular expression or function that receives the data and returns true if the data matches the current expectation. 208 | * @param headers HTTP headers object or function that receives the headers and returns true if the headers match the current expectation. 209 | */ 210 | when(method: string, url: string | RegExp | ((url: string) => boolean), data?: string | RegExp | Object | ((data: string) => boolean), headers?: Object | ((object: Object) => boolean)): mock.IRequestHandler; 211 | 212 | /** 213 | * Creates a new backend definition for DELETE requests. 214 | * Returns an object with respond method that controls how a matched request is handled. 215 | * @param url HTTP url string, regular expression or function that receives a url and returns true if the url matches the current expctation. 216 | * @param headers HTTP headers object or function that receives the headers and returns true if the headers match the current expectation. 217 | */ 218 | whenDELETE(url: string | RegExp | ((url: string) => boolean), headers?: Object | ((object: Object) => boolean)): mock.IRequestHandler; 219 | 220 | /** 221 | * Creates a new backend definition for GET requests. 222 | * Returns an object with respond method that controls how a matched request is handled. 223 | * @param url HTTP url string, regular expression or function that receives a url and returns true if the url matches the current expctation. 224 | * @param headers HTTP headers object or function that receives the headers and returns true if the headers match the current expectation. 225 | */ 226 | whenGET(url: string | RegExp | ((url: string) => boolean), headers?: Object | ((object: Object) => boolean)): mock.IRequestHandler; 227 | 228 | /** 229 | * Creates a new backend definition for HEAD requests. 230 | * Returns an object with respond method that controls how a matched request is handled. 231 | * @param url HTTP url string, regular expression or function that receives a url and returns true if the url matches the current expctation. 232 | * @param headers HTTP headers object or function that receives the headers and returns true if the headers match the current expectation. 233 | */ 234 | whenHEAD(url: string | RegExp | ((url: string) => boolean), headers?: Object | ((object: Object) => boolean)): mock.IRequestHandler; 235 | 236 | /** 237 | * Creates a new backend definition for JSONP requests. 238 | * Returns an object with respond method that controls how a matched request is handled. 239 | * @param url HTTP url string, regular expression or function that receives a url and returns true if the url matches the current expctation. 240 | * @param headers HTTP headers object or function that receives the headers and returns true if the headers match the current expectation. 241 | */ 242 | whenJSONP(url: string | RegExp | ((url: string) => boolean)): mock.IRequestHandler; 243 | 244 | /** 245 | * Creates a new backend definition for PATCH requests. 246 | * Returns an object with respond method that controls how a matched request is handled. 247 | * @param url HTTP url string, regular expression or function that receives a url and returns true if the url matches the current expctation. 248 | * @param data HTTP request body string, json object, regular expression or function that receives the data and returns true if the data matches the current expectation. 249 | * @param headers HTTP headers object or function that receives the headers and returns true if the headers match the current expectation. 250 | */ 251 | whenPATCH(url: string | RegExp | ((url: string) => boolean), data?: string | RegExp | Object | ((data: string) => boolean), headers?: Object | ((object: Object) => boolean)): mock.IRequestHandler; 252 | 253 | /** 254 | * Creates a new backend definition for POST requests. 255 | * Returns an object with respond method that controls how a matched request is handled. 256 | * @param url HTTP url string, regular expression or function that receives a url and returns true if the url matches the current expctation. 257 | * @param data HTTP request body string, json object, regular expression or function that receives the data and returns true if the data matches the current expectation. 258 | * @param headers HTTP headers object or function that receives the headers and returns true if the headers match the current expectation. 259 | */ 260 | whenPOST(url: string | RegExp | ((url: string) => boolean), data?: string | RegExp | Object | ((data: string) => boolean), headers?: Object | ((object: Object) => boolean)): mock.IRequestHandler; 261 | 262 | /** 263 | * Creates a new backend definition for PUT requests. 264 | * Returns an object with respond method that controls how a matched request is handled. 265 | * @param url HTTP url string, regular expression or function that receives a url and returns true if the url matches the current expctation. 266 | * @param data HTTP request body string, json object, regular expression or function that receives the data and returns true if the data matches the current expectation. 267 | * @param headers HTTP headers object or function that receives the headers and returns true if the headers match the current expectation. 268 | */ 269 | whenPUT(url: string | RegExp | ((url: string) => boolean), data?: string | RegExp | Object | ((data: string) => boolean), headers?: Object | ((object: Object) => boolean)): mock.IRequestHandler; 270 | } 271 | 272 | export module mock { 273 | // returned interface by the the mocked HttpBackendService expect/when methods 274 | interface IRequestHandler { 275 | 276 | /** 277 | * Controls the response for a matched request using a function to construct the response. 278 | * Returns the RequestHandler object for possible overrides. 279 | * @param func Function that receives the request HTTP method, url, data, and headers and returns an array containing response status (number), data, headers, and status text. 280 | */ 281 | respond(func: ((method: string, url: string, data: string | Object, headers: Object) => [number, string | Object, Object, string])): IRequestHandler; 282 | 283 | /** 284 | * Controls the response for a matched request using supplied static data to construct the response. 285 | * Returns the RequestHandler object for possible overrides. 286 | * @param status HTTP status code to add to the response. 287 | * @param data Data to add to the response. 288 | * @param headers Headers object to add to the response. 289 | * @param responseText Response text to add to the response. 290 | */ 291 | respond(status: number, data: string | Object, headers?: Object, responseText?: string): IRequestHandler; 292 | 293 | /** 294 | * Controls the response for a matched request using the HTTP status code 200 and supplied static data to construct the response. 295 | * Returns the RequestHandler object for possible overrides. 296 | * @param data Data to add to the response. 297 | * @param headers Headers object to add to the response. 298 | * @param responseText Response text to add to the response. 299 | */ 300 | respond(data: string | Object, headers?: Object, responseText?: string): IRequestHandler; 301 | 302 | // Available when ngMockE2E is loaded 303 | /** 304 | * Any request matching a backend definition or expectation with passThrough handler will be passed through to the real backend (an XHR request will be made to the server.) 305 | */ 306 | passThrough(): IRequestHandler; 307 | } 308 | 309 | } 310 | 311 | } 312 | 313 | /////////////////////////////////////////////////////////////////////////////// 314 | // functions attached to global object (window) 315 | /////////////////////////////////////////////////////////////////////////////// 316 | //Use `angular.mock.module` instead of `module`, as `module` conflicts with commonjs. 317 | //declare var module: (...modules: any[]) => any; 318 | declare var inject: angular.IInjectStatic; 319 | -------------------------------------------------------------------------------- /typings/angularjs/angular-resource.d.ts: -------------------------------------------------------------------------------- 1 | // Type definitions for Angular JS 1.3 (ngResource module) 2 | // Project: http://angularjs.org 3 | // Definitions by: Diego Vilar , Michael Jess 4 | // Definitions: https://github.com/daptiv/DefinitelyTyped 5 | 6 | /// 7 | 8 | declare module 'angular-resource' { 9 | var _: string; 10 | export = _; 11 | } 12 | 13 | /////////////////////////////////////////////////////////////////////////////// 14 | // ngResource module (angular-resource.js) 15 | /////////////////////////////////////////////////////////////////////////////// 16 | declare module angular.resource { 17 | 18 | /** 19 | * Currently supported options for the $resource factory options argument. 20 | */ 21 | interface IResourceOptions { 22 | /** 23 | * If true then the trailing slashes from any calculated URL will be stripped (defaults to true) 24 | */ 25 | stripTrailingSlashes?: boolean; 26 | } 27 | 28 | 29 | /////////////////////////////////////////////////////////////////////////// 30 | // ResourceService 31 | // see http://docs.angularjs.org/api/ngResource.$resource 32 | // Most part of the following definitions were achieved by analyzing the 33 | // actual implementation, since the documentation doesn't seem to cover 34 | // that deeply. 35 | /////////////////////////////////////////////////////////////////////////// 36 | interface IResourceService { 37 | (url: string, paramDefaults?: any, 38 | /** example: {update: { method: 'PUT' }, delete: deleteDescriptor } 39 | where deleteDescriptor : IActionDescriptor */ 40 | actions?: any, options?: IResourceOptions): IResourceClass>; 41 | (url: string, paramDefaults?: any, 42 | /** example: {update: { method: 'PUT' }, delete: deleteDescriptor } 43 | where deleteDescriptor : IActionDescriptor */ 44 | actions?: any, options?: IResourceOptions): U; 45 | (url: string, paramDefaults?: any, 46 | /** example: {update: { method: 'PUT' }, delete: deleteDescriptor } 47 | where deleteDescriptor : IActionDescriptor */ 48 | actions?: any, options?: IResourceOptions): IResourceClass; 49 | } 50 | 51 | // Just a reference to facilitate describing new actions 52 | interface IActionDescriptor { 53 | method: string; 54 | params?: any; 55 | url?: string; 56 | isArray?: boolean; 57 | transformRequest?: angular.IHttpRequestTransformer | angular.IHttpRequestTransformer[]; 58 | transformResponse?: angular.IHttpResponseTransformer | angular.IHttpResponseTransformer[]; 59 | headers?: any; 60 | cache?: boolean | angular.ICacheObject; 61 | timeout?: number | angular.IPromise; 62 | withCredentials?: boolean; 63 | responseType?: string; 64 | interceptor?: any; 65 | } 66 | 67 | // Baseclass for everyresource with default actions. 68 | // If you define your new actions for the resource, you will need 69 | // to extend this interface and typecast the ResourceClass to it. 70 | // 71 | // In case of passing the first argument as anything but a function, 72 | // it's gonna be considered data if the action method is POST, PUT or 73 | // PATCH (in other words, methods with body). Otherwise, it's going 74 | // to be considered as parameters to the request. 75 | // https://github.com/angular/angular.js/blob/v1.2.0/src/ngResource/resource.js#L461-L465 76 | // 77 | // Only those methods with an HTTP body do have 'data' as first parameter: 78 | // https://github.com/angular/angular.js/blob/v1.2.0/src/ngResource/resource.js#L463 79 | // More specifically, those methods are POST, PUT and PATCH: 80 | // https://github.com/angular/angular.js/blob/v1.2.0/src/ngResource/resource.js#L432 81 | // 82 | // Also, static calls always return the IResource (or IResourceArray) retrieved 83 | // https://github.com/angular/angular.js/blob/v1.2.0/src/ngResource/resource.js#L538-L549 84 | interface IResourceClass { 85 | new(dataOrParams? : any) : T; 86 | get(): T; 87 | get(params: Object): T; 88 | get(success: Function, error?: Function): T; 89 | get(params: Object, success: Function, error?: Function): T; 90 | get(params: Object, data: Object, success?: Function, error?: Function): T; 91 | 92 | query(): IResourceArray; 93 | query(params: Object): IResourceArray; 94 | query(success: Function, error?: Function): IResourceArray; 95 | query(params: Object, success: Function, error?: Function): IResourceArray; 96 | query(params: Object, data: Object, success?: Function, error?: Function): IResourceArray; 97 | 98 | save(): T; 99 | save(data: Object): T; 100 | save(success: Function, error?: Function): T; 101 | save(data: Object, success: Function, error?: Function): T; 102 | save(params: Object, data: Object, success?: Function, error?: Function): T; 103 | 104 | remove(): T; 105 | remove(params: Object): T; 106 | remove(success: Function, error?: Function): T; 107 | remove(params: Object, success: Function, error?: Function): T; 108 | remove(params: Object, data: Object, success?: Function, error?: Function): T; 109 | 110 | delete(): T; 111 | delete(params: Object): T; 112 | delete(success: Function, error?: Function): T; 113 | delete(params: Object, success: Function, error?: Function): T; 114 | delete(params: Object, data: Object, success?: Function, error?: Function): T; 115 | } 116 | 117 | // Instance calls always return the the promise of the request which retrieved the object 118 | // https://github.com/angular/angular.js/blob/v1.2.0/src/ngResource/resource.js#L538-L546 119 | interface IResource { 120 | $get(): angular.IPromise; 121 | $get(params?: Object, success?: Function, error?: Function): angular.IPromise; 122 | $get(success: Function, error?: Function): angular.IPromise; 123 | 124 | $query(): angular.IPromise>; 125 | $query(params?: Object, success?: Function, error?: Function): angular.IPromise>; 126 | $query(success: Function, error?: Function): angular.IPromise>; 127 | 128 | $save(): angular.IPromise; 129 | $save(params?: Object, success?: Function, error?: Function): angular.IPromise; 130 | $save(success: Function, error?: Function): angular.IPromise; 131 | 132 | $remove(): angular.IPromise; 133 | $remove(params?: Object, success?: Function, error?: Function): angular.IPromise; 134 | $remove(success: Function, error?: Function): angular.IPromise; 135 | 136 | $delete(): angular.IPromise; 137 | $delete(params?: Object, success?: Function, error?: Function): angular.IPromise; 138 | $delete(success: Function, error?: Function): angular.IPromise; 139 | 140 | /** the promise of the original server interaction that created this instance. **/ 141 | $promise : angular.IPromise; 142 | $resolved : boolean; 143 | toJSON: () => { 144 | [index: string]: any; 145 | } 146 | } 147 | 148 | /** 149 | * Really just a regular Array object with $promise and $resolve attached to it 150 | */ 151 | interface IResourceArray extends Array> { 152 | /** the promise of the original server interaction that created this collection. **/ 153 | $promise : angular.IPromise>; 154 | $resolved : boolean; 155 | } 156 | 157 | /** when creating a resource factory via IModule.factory */ 158 | interface IResourceServiceFactoryFunction { 159 | ($resource: angular.resource.IResourceService): IResourceClass; 160 | >($resource: angular.resource.IResourceService): U; 161 | } 162 | 163 | // IResourceServiceProvider used to configure global settings 164 | interface IResourceServiceProvider extends angular.IServiceProvider { 165 | 166 | defaults: IResourceOptions; 167 | } 168 | 169 | } 170 | 171 | /** extensions to base ng based on using angular-resource */ 172 | declare module angular { 173 | 174 | interface IModule { 175 | /** creating a resource service factory */ 176 | factory(name: string, resourceServiceFactoryFunction: angular.resource.IResourceServiceFactoryFunction): IModule; 177 | } 178 | } 179 | 180 | interface Array 181 | { 182 | /** the promise of the original server interaction that created this collection. **/ 183 | $promise : angular.IPromise>; 184 | $resolved : boolean; 185 | } 186 | -------------------------------------------------------------------------------- /typings/angularjs/angular-route.d.ts: -------------------------------------------------------------------------------- 1 | // Type definitions for Angular JS 1.3 (ngRoute module) 2 | // Project: http://angularjs.org 3 | // Definitions by: Jonathan Park 4 | // Definitions: https://github.com/borisyankov/DefinitelyTyped 5 | 6 | /// 7 | 8 | declare module "angular-route" { 9 | var _: string; 10 | export = _; 11 | } 12 | 13 | /////////////////////////////////////////////////////////////////////////////// 14 | // ngRoute module (angular-route.js) 15 | /////////////////////////////////////////////////////////////////////////////// 16 | declare module angular.route { 17 | 18 | /////////////////////////////////////////////////////////////////////////// 19 | // RouteParamsService 20 | // see http://docs.angularjs.org/api/ngRoute.$routeParams 21 | /////////////////////////////////////////////////////////////////////////// 22 | interface IRouteParamsService { 23 | [key: string]: any; 24 | } 25 | 26 | /////////////////////////////////////////////////////////////////////////// 27 | // RouteService 28 | // see http://docs.angularjs.org/api/ngRoute.$route 29 | // see http://docs.angularjs.org/api/ngRoute.$routeProvider 30 | /////////////////////////////////////////////////////////////////////////// 31 | interface IRouteService { 32 | reload(): void; 33 | routes: any; 34 | 35 | // May not always be available. For instance, current will not be available 36 | // to a controller that was not initialized as a result of a route maching. 37 | current?: ICurrentRoute; 38 | 39 | /** 40 | * Causes $route service to update the current URL, replacing current route parameters with those specified in newParams. 41 | * Provided property names that match the route's path segment definitions will be interpolated into the 42 | * location's path, while remaining properties will be treated as query params. 43 | * 44 | * @param newParams Object. mapping of URL parameter names to values 45 | */ 46 | updateParams(newParams:{[key:string]:string}): void; 47 | 48 | } 49 | 50 | 51 | /** 52 | * see http://docs.angularjs.org/api/ngRoute/provider/$routeProvider#when for API documentation 53 | */ 54 | interface IRoute { 55 | /** 56 | * {(string|function()=} 57 | * Controller fn that should be associated with newly created scope or the name of a registered controller if passed as a string. 58 | */ 59 | controller?: string|Function; 60 | /** 61 | * A controller alias name. If present the controller will be published to scope under the controllerAs name. 62 | */ 63 | controllerAs?: string; 64 | /** 65 | * Undocumented? 66 | */ 67 | name?: string; 68 | /** 69 | * {string=|function()=} 70 | * Html template as a string or a function that returns an html template as a string which should be used by ngView or ngInclude directives. This property takes precedence over templateUrl. 71 | * 72 | * If template is a function, it will be called with the following parameters: 73 | * 74 | * {Array.} - route parameters extracted from the current $location.path() by applying the current route 75 | */ 76 | template?: string|{($routeParams?: angular.route.IRouteParamsService) : string;} 77 | /** 78 | * {string=|function()=} 79 | * Path or function that returns a path to an html template that should be used by ngView. 80 | * 81 | * If templateUrl is a function, it will be called with the following parameters: 82 | * 83 | * {Array.} - route parameters extracted from the current $location.path() by applying the current route 84 | */ 85 | templateUrl?: string|{ ($routeParams?: angular.route.IRouteParamsService): string; } 86 | /** 87 | * {Object.=} - An optional map of dependencies which should be injected into the controller. If any of these dependencies are promises, the router will wait for them all to be resolved or one to be rejected before the controller is instantiated. If all the promises are resolved successfully, the values of the resolved promises are injected and $routeChangeSuccess event is fired. If any of the promises are rejected the $routeChangeError event is fired. The map object is: 88 | * 89 | * - key - {string}: a name of a dependency to be injected into the controller. 90 | * - factory - {string|function}: If string then it is an alias for a service. Otherwise if function, then it is injected and the return value is treated as the dependency. If the result is a promise, it is resolved before its value is injected into the controller. Be aware that ngRoute.$routeParams will still refer to the previous route within these resolve functions. Use $route.current.params to access the new route parameters, instead. 91 | */ 92 | resolve?: {[key: string]: any}; 93 | /** 94 | * {(string|function())=} 95 | * Value to update $location path with and trigger route redirection. 96 | * 97 | * If redirectTo is a function, it will be called with the following parameters: 98 | * 99 | * - {Object.} - route parameters extracted from the current $location.path() by applying the current route templateUrl. 100 | * - {string} - current $location.path() 101 | * - {Object} - current $location.search() 102 | * - The custom redirectTo function is expected to return a string which will be used to update $location.path() and $location.search(). 103 | */ 104 | redirectTo?: string|{($routeParams?: angular.route.IRouteParamsService, $locationPath?: string, $locationSearch?: any) : string}; 105 | /** 106 | * Reload route when only $location.search() or $location.hash() changes. 107 | * 108 | * This option defaults to true. If the option is set to false and url in the browser changes, then $routeUpdate event is broadcasted on the root scope. 109 | */ 110 | reloadOnSearch?: boolean; 111 | /** 112 | * Match routes without being case sensitive 113 | * 114 | * This option defaults to false. If the option is set to true, then the particular route can be matched without being case sensitive 115 | */ 116 | caseInsensitiveMatch?: boolean; 117 | } 118 | 119 | // see http://docs.angularjs.org/api/ng.$route#current 120 | interface ICurrentRoute extends IRoute { 121 | locals: { 122 | [index: string]: any; 123 | $scope: IScope; 124 | $template: string; 125 | }; 126 | 127 | params: any; 128 | } 129 | 130 | interface IRouteProvider extends IServiceProvider { 131 | /** 132 | * Match routes without being case sensitive 133 | * 134 | * This option defaults to false. If the option is set to true, then the particular route can be matched without being case sensitive 135 | */ 136 | caseInsensitiveMatch?: boolean; 137 | /** 138 | * Sets route definition that will be used on route change when no other route definition is matched. 139 | * 140 | * @params Mapping information to be assigned to $route.current. 141 | */ 142 | otherwise(params: IRoute): IRouteProvider; 143 | /** 144 | * Adds a new route definition to the $route service. 145 | * 146 | * @param path Route path (matched against $location.path). If $location.path contains redundant trailing slash or is missing one, the route will still match and the $location.path will be updated to add or drop the trailing slash to exactly match the route definition. 147 | * 148 | * - path can contain named groups starting with a colon: e.g. :name. All characters up to the next slash are matched and stored in $routeParams under the given name when the route matches. 149 | * - path can contain named groups starting with a colon and ending with a star: e.g.:name*. All characters are eagerly stored in $routeParams under the given name when the route matches. 150 | * - path can contain optional named groups with a question mark: e.g.:name?. 151 | * 152 | * For example, routes like /color/:color/largecode/:largecode*\/edit will match /color/brown/largecode/code/with/slashes/edit and extract: color: brown and largecode: code/with/slashes. 153 | * 154 | * @param route Mapping information to be assigned to $route.current on route match. 155 | */ 156 | when(path: string, route: IRoute): IRouteProvider; 157 | } 158 | } 159 | -------------------------------------------------------------------------------- /typings/angularjs/angular-sanitize.d.ts: -------------------------------------------------------------------------------- 1 | // Type definitions for Angular JS 1.3 (ngSanitize module) 2 | // Project: http://angularjs.org 3 | // Definitions by: Diego Vilar 4 | // Definitions: https://github.com/borisyankov/DefinitelyTyped 5 | 6 | 7 | /// 8 | 9 | declare module "angular-sanitize" { 10 | var _: string; 11 | export = _; 12 | } 13 | 14 | /////////////////////////////////////////////////////////////////////////////// 15 | // ngSanitize module (angular-sanitize.js) 16 | /////////////////////////////////////////////////////////////////////////////// 17 | declare module angular.sanitize { 18 | 19 | /////////////////////////////////////////////////////////////////////////// 20 | // SanitizeService 21 | // see http://docs.angularjs.org/api/ngSanitize.$sanitize 22 | /////////////////////////////////////////////////////////////////////////// 23 | interface ISanitizeService { 24 | (html: string): string; 25 | } 26 | 27 | /////////////////////////////////////////////////////////////////////////// 28 | // Filters included with the ngSanitize 29 | // see https://github.com/angular/angular.js/tree/v1.2.0/src/ngSanitize/filter 30 | /////////////////////////////////////////////////////////////////////////// 31 | export module filter { 32 | 33 | // Finds links in text input and turns them into html links. 34 | // Supports http/https/ftp/mailto and plain email address links. 35 | // see http://code.angularjs.org/1.2.0/docs/api/ngSanitize.filter:linky 36 | interface ILinky { 37 | (text: string, target?: string): string; 38 | } 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | abbrev@1: 6 | version "1.1.0" 7 | resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.0.tgz#d0554c2256636e2f56e7c2e5ad183f859428d81f" 8 | 9 | ajv@^4.9.1: 10 | version "4.11.8" 11 | resolved "https://registry.yarnpkg.com/ajv/-/ajv-4.11.8.tgz#82ffb02b29e662ae53bdc20af15947706739c536" 12 | dependencies: 13 | co "^4.6.0" 14 | json-stable-stringify "^1.0.1" 15 | 16 | ansi-regex@^2.0.0: 17 | version "2.1.1" 18 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" 19 | 20 | ansi-styles@^2.2.1: 21 | version "2.2.1" 22 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" 23 | 24 | anymatch@^1.3.0: 25 | version "1.3.2" 26 | resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-1.3.2.tgz#553dcb8f91e3c889845dfdba34c77721b90b9d7a" 27 | dependencies: 28 | micromatch "^2.1.5" 29 | normalize-path "^2.0.0" 30 | 31 | aproba@^1.0.3: 32 | version "1.1.2" 33 | resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.1.2.tgz#45c6629094de4e96f693ef7eab74ae079c240fc1" 34 | 35 | archy@^1.0.0: 36 | version "1.0.0" 37 | resolved "https://registry.yarnpkg.com/archy/-/archy-1.0.0.tgz#f9c8c13757cc1dd7bc379ac77b2c62a5c2868c40" 38 | 39 | are-we-there-yet@~1.1.2: 40 | version "1.1.4" 41 | resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.4.tgz#bb5dca382bb94f05e15194373d16fd3ba1ca110d" 42 | dependencies: 43 | delegates "^1.0.0" 44 | readable-stream "^2.0.6" 45 | 46 | arr-diff@^2.0.0: 47 | version "2.0.0" 48 | resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-2.0.0.tgz#8f3b827f955a8bd669697e4a4256ac3ceae356cf" 49 | dependencies: 50 | arr-flatten "^1.0.1" 51 | 52 | arr-filter@^1.1.1: 53 | version "1.1.2" 54 | resolved "https://registry.yarnpkg.com/arr-filter/-/arr-filter-1.1.2.tgz#43fdddd091e8ef11aa4c45d9cdc18e2dff1711ee" 55 | dependencies: 56 | make-iterator "^1.0.0" 57 | 58 | arr-flatten@^1.0.1: 59 | version "1.1.0" 60 | resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" 61 | 62 | arr-map@^2.0.0: 63 | version "2.0.2" 64 | resolved "https://registry.yarnpkg.com/arr-map/-/arr-map-2.0.2.tgz#3a77345ffc1cf35e2a91825601f9e58f2e24cac4" 65 | dependencies: 66 | make-iterator "^1.0.0" 67 | 68 | array-differ@^1.0.0: 69 | version "1.0.0" 70 | resolved "https://registry.yarnpkg.com/array-differ/-/array-differ-1.0.0.tgz#eff52e3758249d33be402b8bb8e564bb2b5d4031" 71 | 72 | array-each@^0.1.0: 73 | version "0.1.1" 74 | resolved "https://registry.yarnpkg.com/array-each/-/array-each-0.1.1.tgz#c5d52ba8225f36d728178ba7aec413acfaddd0f9" 75 | 76 | array-each@^1.0.0, array-each@^1.0.1: 77 | version "1.0.1" 78 | resolved "https://registry.yarnpkg.com/array-each/-/array-each-1.0.1.tgz#a794af0c05ab1752846ee753a1f211a05ba0c44f" 79 | 80 | array-initial@^1.0.0: 81 | version "1.0.0" 82 | resolved "https://registry.yarnpkg.com/array-initial/-/array-initial-1.0.0.tgz#09b13c58d56a050342e777ab6ffce595b108dad9" 83 | dependencies: 84 | array-slice "^0.2.2" 85 | is-number "^0.1.1" 86 | 87 | array-last@^1.1.1: 88 | version "1.1.1" 89 | resolved "https://registry.yarnpkg.com/array-last/-/array-last-1.1.1.tgz#f4658f988d921326b58ad0113cf76d337c7b20aa" 90 | dependencies: 91 | is-number "^0.1.1" 92 | 93 | array-slice@^0.2.2, array-slice@^0.2.3: 94 | version "0.2.3" 95 | resolved "https://registry.yarnpkg.com/array-slice/-/array-slice-0.2.3.tgz#dd3cfb80ed7973a75117cdac69b0b99ec86186f5" 96 | 97 | array-slice@^1.0.0: 98 | version "1.0.0" 99 | resolved "https://registry.yarnpkg.com/array-slice/-/array-slice-1.0.0.tgz#e73034f00dcc1f40876008fd20feae77bd4b7c2f" 100 | 101 | array-union@^1.0.1: 102 | version "1.0.2" 103 | resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" 104 | dependencies: 105 | array-uniq "^1.0.1" 106 | 107 | array-uniq@^1.0.1, array-uniq@^1.0.2: 108 | version "1.0.3" 109 | resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" 110 | 111 | array-unique@^0.2.1: 112 | version "0.2.1" 113 | resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53" 114 | 115 | arrify@^1.0.0: 116 | version "1.0.1" 117 | resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" 118 | 119 | asn1@~0.2.3: 120 | version "0.2.3" 121 | resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.3.tgz#dac8787713c9966849fc8180777ebe9c1ddf3b86" 122 | 123 | assert-plus@1.0.0, assert-plus@^1.0.0: 124 | version "1.0.0" 125 | resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" 126 | 127 | assert-plus@^0.2.0: 128 | version "0.2.0" 129 | resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-0.2.0.tgz#d74e1b87e7affc0db8aadb7021f3fe48101ab234" 130 | 131 | async-done@^1.2.0, async-done@^1.2.2: 132 | version "1.2.2" 133 | resolved "https://registry.yarnpkg.com/async-done/-/async-done-1.2.2.tgz#ba4280da55a16e15f4bb8bf3a844a91878740e31" 134 | dependencies: 135 | end-of-stream "^1.1.0" 136 | next-tick "^1.0.0" 137 | once "^1.3.2" 138 | stream-exhaust "^1.0.1" 139 | 140 | async-each@^1.0.0: 141 | version "1.0.1" 142 | resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.1.tgz#19d386a1d9edc6e7c1c85d388aedbcc56d33602d" 143 | 144 | async-settle@^1.0.0: 145 | version "1.0.0" 146 | resolved "https://registry.yarnpkg.com/async-settle/-/async-settle-1.0.0.tgz#1d0a914bb02575bec8a8f3a74e5080f72b2c0c6b" 147 | dependencies: 148 | async-done "^1.2.2" 149 | 150 | asynckit@^0.4.0: 151 | version "0.4.0" 152 | resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" 153 | 154 | aws-sign2@~0.6.0: 155 | version "0.6.0" 156 | resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.6.0.tgz#14342dd38dbcc94d0e5b87d763cd63612c0e794f" 157 | 158 | aws4@^1.2.1: 159 | version "1.6.0" 160 | resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.6.0.tgz#83ef5ca860b2b32e4a0deedee8c771b9db57471e" 161 | 162 | bach@^1.0.0: 163 | version "1.1.0" 164 | resolved "https://registry.yarnpkg.com/bach/-/bach-1.1.0.tgz#cfe542db925cb37051fc490ad102c73bcb258a84" 165 | dependencies: 166 | arr-filter "^1.1.1" 167 | arr-flatten "^1.0.1" 168 | arr-map "^2.0.0" 169 | array-each "^1.0.0" 170 | array-initial "^1.0.0" 171 | array-last "^1.1.1" 172 | async-done "^1.2.2" 173 | async-settle "^1.0.0" 174 | now-and-later "^1.0.0" 175 | 176 | balanced-match@^1.0.0: 177 | version "1.0.0" 178 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" 179 | 180 | bcrypt-pbkdf@^1.0.0: 181 | version "1.0.1" 182 | resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz#63bc5dcb61331b92bc05fd528953c33462a06f8d" 183 | dependencies: 184 | tweetnacl "^0.14.3" 185 | 186 | beeper@^1.0.0: 187 | version "1.1.1" 188 | resolved "https://registry.yarnpkg.com/beeper/-/beeper-1.1.1.tgz#e6d5ea8c5dad001304a70b22638447f69cb2f809" 189 | 190 | binary-extensions@^1.0.0: 191 | version "1.9.0" 192 | resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.9.0.tgz#66506c16ce6f4d6928a5b3cd6a33ca41e941e37b" 193 | 194 | block-stream@*: 195 | version "0.0.9" 196 | resolved "https://registry.yarnpkg.com/block-stream/-/block-stream-0.0.9.tgz#13ebfe778a03205cfe03751481ebb4b3300c126a" 197 | dependencies: 198 | inherits "~2.0.0" 199 | 200 | boom@2.x.x: 201 | version "2.10.1" 202 | resolved "https://registry.yarnpkg.com/boom/-/boom-2.10.1.tgz#39c8918ceff5799f83f9492a848f625add0c766f" 203 | dependencies: 204 | hoek "2.x.x" 205 | 206 | brace-expansion@^1.1.7: 207 | version "1.1.8" 208 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.8.tgz#c07b211c7c952ec1f8efd51a77ef0d1d3990a292" 209 | dependencies: 210 | balanced-match "^1.0.0" 211 | concat-map "0.0.1" 212 | 213 | braces@^1.8.2: 214 | version "1.8.5" 215 | resolved "https://registry.yarnpkg.com/braces/-/braces-1.8.5.tgz#ba77962e12dff969d6b76711e914b737857bf6a7" 216 | dependencies: 217 | expand-range "^1.8.1" 218 | preserve "^0.2.0" 219 | repeat-element "^1.1.2" 220 | 221 | camelcase@^2.0.1: 222 | version "2.1.1" 223 | resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f" 224 | 225 | caseless@~0.12.0: 226 | version "0.12.0" 227 | resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" 228 | 229 | chalk@^1.0.0, chalk@^1.1.0, chalk@^1.1.1: 230 | version "1.1.3" 231 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" 232 | dependencies: 233 | ansi-styles "^2.2.1" 234 | escape-string-regexp "^1.0.2" 235 | has-ansi "^2.0.0" 236 | strip-ansi "^3.0.0" 237 | supports-color "^2.0.0" 238 | 239 | chokidar@^1.4.3: 240 | version "1.7.0" 241 | resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-1.7.0.tgz#798e689778151c8076b4b360e5edd28cda2bb468" 242 | dependencies: 243 | anymatch "^1.3.0" 244 | async-each "^1.0.0" 245 | glob-parent "^2.0.0" 246 | inherits "^2.0.1" 247 | is-binary-path "^1.0.0" 248 | is-glob "^2.0.0" 249 | path-is-absolute "^1.0.0" 250 | readdirp "^2.0.0" 251 | optionalDependencies: 252 | fsevents "^1.0.0" 253 | 254 | cliui@^3.0.3: 255 | version "3.2.0" 256 | resolved "https://registry.yarnpkg.com/cliui/-/cliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d" 257 | dependencies: 258 | string-width "^1.0.1" 259 | strip-ansi "^3.0.1" 260 | wrap-ansi "^2.0.0" 261 | 262 | clone-stats@^0.0.1: 263 | version "0.0.1" 264 | resolved "https://registry.yarnpkg.com/clone-stats/-/clone-stats-0.0.1.tgz#b88f94a82cf38b8791d58046ea4029ad88ca99d1" 265 | 266 | clone@^1.0.0: 267 | version "1.0.2" 268 | resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.2.tgz#260b7a99ebb1edfe247538175f783243cb19d149" 269 | 270 | co@^4.6.0: 271 | version "4.6.0" 272 | resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" 273 | 274 | code-point-at@^1.0.0: 275 | version "1.1.0" 276 | resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" 277 | 278 | collection-map@^0.1.0: 279 | version "0.1.0" 280 | resolved "https://registry.yarnpkg.com/collection-map/-/collection-map-0.1.0.tgz#4cff91d25108d79f4edeecce6ecee3e488f267c2" 281 | dependencies: 282 | arr-map "^2.0.0" 283 | get-values "^0.1.0" 284 | is-plain-object "^2.0.1" 285 | make-iterator "^0.1.1" 286 | 287 | colors@~1.1.2: 288 | version "1.1.2" 289 | resolved "https://registry.yarnpkg.com/colors/-/colors-1.1.2.tgz#168a4701756b6a7f51a12ce0c97bfa28c084ed63" 290 | 291 | combined-stream@^1.0.5, combined-stream@~1.0.5: 292 | version "1.0.5" 293 | resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.5.tgz#938370a57b4a51dea2c77c15d5c5fdf895164009" 294 | dependencies: 295 | delayed-stream "~1.0.0" 296 | 297 | concat-map@0.0.1: 298 | version "0.0.1" 299 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" 300 | 301 | console-control-strings@^1.0.0, console-control-strings@~1.1.0: 302 | version "1.1.0" 303 | resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" 304 | 305 | convert-source-map@^1.1.1: 306 | version "1.5.0" 307 | resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.5.0.tgz#9acd70851c6d5dfdd93d9282e5edf94a03ff46b5" 308 | 309 | copy-props@^1.4.1: 310 | version "1.6.0" 311 | resolved "https://registry.yarnpkg.com/copy-props/-/copy-props-1.6.0.tgz#f0324bbee99771101e7b3ada112f313c393db8ed" 312 | dependencies: 313 | each-props "^1.2.1" 314 | is-plain-object "^2.0.1" 315 | 316 | core-util-is@~1.0.0: 317 | version "1.0.2" 318 | resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" 319 | 320 | cryptiles@2.x.x: 321 | version "2.0.5" 322 | resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-2.0.5.tgz#3bdfecdc608147c1c67202fa291e7dca59eaa3b8" 323 | dependencies: 324 | boom "2.x.x" 325 | 326 | d@1: 327 | version "1.0.0" 328 | resolved "https://registry.yarnpkg.com/d/-/d-1.0.0.tgz#754bb5bfe55451da69a58b94d45f4c5b0462d58f" 329 | dependencies: 330 | es5-ext "^0.10.9" 331 | 332 | dashdash@^1.12.0: 333 | version "1.14.1" 334 | resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" 335 | dependencies: 336 | assert-plus "^1.0.0" 337 | 338 | dateformat@^2.0.0: 339 | version "2.0.0" 340 | resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-2.0.0.tgz#2743e3abb5c3fc2462e527dca445e04e9f4dee17" 341 | 342 | debug@^2.2.0: 343 | version "2.6.8" 344 | resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.8.tgz#e731531ca2ede27d188222427da17821d68ff4fc" 345 | dependencies: 346 | ms "2.0.0" 347 | 348 | decamelize@^1.1.1: 349 | version "1.2.0" 350 | resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" 351 | 352 | deep-extend@~0.4.0: 353 | version "0.4.2" 354 | resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.4.2.tgz#48b699c27e334bf89f10892be432f6e4c7d34a7f" 355 | 356 | default-resolution@^2.0.0: 357 | version "2.0.0" 358 | resolved "https://registry.yarnpkg.com/default-resolution/-/default-resolution-2.0.0.tgz#bcb82baa72ad79b426a76732f1a81ad6df26d684" 359 | 360 | del@~2.2.0: 361 | version "2.2.2" 362 | resolved "https://registry.yarnpkg.com/del/-/del-2.2.2.tgz#c12c981d067846c84bcaf862cff930d907ffd1a8" 363 | dependencies: 364 | globby "^5.0.0" 365 | is-path-cwd "^1.0.0" 366 | is-path-in-cwd "^1.0.0" 367 | object-assign "^4.0.1" 368 | pify "^2.0.0" 369 | pinkie-promise "^2.0.0" 370 | rimraf "^2.2.8" 371 | 372 | delayed-stream@~1.0.0: 373 | version "1.0.0" 374 | resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" 375 | 376 | delegates@^1.0.0: 377 | version "1.0.0" 378 | resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" 379 | 380 | detect-file@^0.1.0: 381 | version "0.1.0" 382 | resolved "https://registry.yarnpkg.com/detect-file/-/detect-file-0.1.0.tgz#4935dedfd9488648e006b0129566e9386711ea63" 383 | dependencies: 384 | fs-exists-sync "^0.1.0" 385 | 386 | duplexer2@0.0.2: 387 | version "0.0.2" 388 | resolved "https://registry.yarnpkg.com/duplexer2/-/duplexer2-0.0.2.tgz#c614dcf67e2fb14995a91711e5a617e8a60a31db" 389 | dependencies: 390 | readable-stream "~1.1.9" 391 | 392 | duplexify@^3.2.0: 393 | version "3.5.0" 394 | resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.5.0.tgz#1aa773002e1578457e9d9d4a50b0ccaaebcbd604" 395 | dependencies: 396 | end-of-stream "1.0.0" 397 | inherits "^2.0.1" 398 | readable-stream "^2.0.0" 399 | stream-shift "^1.0.0" 400 | 401 | each-props@^1.2.1: 402 | version "1.3.0" 403 | resolved "https://registry.yarnpkg.com/each-props/-/each-props-1.3.0.tgz#7ed8031c927688aedb4a896eb91485b4487b90ea" 404 | dependencies: 405 | is-plain-object "^2.0.1" 406 | object-assign "^4.1.1" 407 | 408 | ecc-jsbn@~0.1.1: 409 | version "0.1.1" 410 | resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz#0fc73a9ed5f0d53c38193398523ef7e543777505" 411 | dependencies: 412 | jsbn "~0.1.0" 413 | 414 | end-of-stream@1.0.0: 415 | version "1.0.0" 416 | resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.0.0.tgz#d4596e702734a93e40e9af864319eabd99ff2f0e" 417 | dependencies: 418 | once "~1.3.0" 419 | 420 | end-of-stream@^1.1.0: 421 | version "1.4.0" 422 | resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.0.tgz#7a90d833efda6cfa6eac0f4949dbb0fad3a63206" 423 | dependencies: 424 | once "^1.4.0" 425 | 426 | es5-ext@^0.10.14, es5-ext@^0.10.9, es5-ext@~0.10.14: 427 | version "0.10.24" 428 | resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.24.tgz#a55877c9924bc0c8d9bd3c2cbe17495ac1709b14" 429 | dependencies: 430 | es6-iterator "2" 431 | es6-symbol "~3.1" 432 | 433 | es6-iterator@2, es6-iterator@^2.0.1: 434 | version "2.0.1" 435 | resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.1.tgz#8e319c9f0453bf575d374940a655920e59ca5512" 436 | dependencies: 437 | d "1" 438 | es5-ext "^0.10.14" 439 | es6-symbol "^3.1" 440 | 441 | es6-symbol@^3.1, es6-symbol@^3.1.1, es6-symbol@~3.1: 442 | version "3.1.1" 443 | resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.1.tgz#bf00ef4fdab6ba1b46ecb7b629b4c7ed5715cc77" 444 | dependencies: 445 | d "1" 446 | es5-ext "~0.10.14" 447 | 448 | es6-weak-map@^2.0.1: 449 | version "2.0.2" 450 | resolved "https://registry.yarnpkg.com/es6-weak-map/-/es6-weak-map-2.0.2.tgz#5e3ab32251ffd1538a1f8e5ffa1357772f92d96f" 451 | dependencies: 452 | d "1" 453 | es5-ext "^0.10.14" 454 | es6-iterator "^2.0.1" 455 | es6-symbol "^3.1.1" 456 | 457 | escape-string-regexp@^1.0.2: 458 | version "1.0.5" 459 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" 460 | 461 | expand-brackets@^0.1.4: 462 | version "0.1.5" 463 | resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-0.1.5.tgz#df07284e342a807cd733ac5af72411e581d1177b" 464 | dependencies: 465 | is-posix-bracket "^0.1.0" 466 | 467 | expand-range@^1.8.1: 468 | version "1.8.2" 469 | resolved "https://registry.yarnpkg.com/expand-range/-/expand-range-1.8.2.tgz#a299effd335fe2721ebae8e257ec79644fc85337" 470 | dependencies: 471 | fill-range "^2.1.0" 472 | 473 | expand-tilde@^1.2.2: 474 | version "1.2.2" 475 | resolved "https://registry.yarnpkg.com/expand-tilde/-/expand-tilde-1.2.2.tgz#0b81eba897e5a3d31d1c3d102f8f01441e559449" 476 | dependencies: 477 | os-homedir "^1.0.1" 478 | 479 | expand-tilde@^2.0.2: 480 | version "2.0.2" 481 | resolved "https://registry.yarnpkg.com/expand-tilde/-/expand-tilde-2.0.2.tgz#97e801aa052df02454de46b02bf621642cdc8502" 482 | dependencies: 483 | homedir-polyfill "^1.0.1" 484 | 485 | extend-shallow@^2.0.1: 486 | version "2.0.1" 487 | resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" 488 | dependencies: 489 | is-extendable "^0.1.0" 490 | 491 | extend@^3.0.0, extend@~3.0.0: 492 | version "3.0.1" 493 | resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.1.tgz#a755ea7bc1adfcc5a31ce7e762dbaadc5e636444" 494 | 495 | extglob@^0.3.1: 496 | version "0.3.2" 497 | resolved "https://registry.yarnpkg.com/extglob/-/extglob-0.3.2.tgz#2e18ff3d2f49ab2765cec9023f011daa8d8349a1" 498 | dependencies: 499 | is-extglob "^1.0.0" 500 | 501 | extsprintf@1.0.2: 502 | version "1.0.2" 503 | resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.0.2.tgz#e1080e0658e300b06294990cc70e1502235fd550" 504 | 505 | fancy-log@^1.1.0, fancy-log@^1.2.0: 506 | version "1.3.0" 507 | resolved "https://registry.yarnpkg.com/fancy-log/-/fancy-log-1.3.0.tgz#45be17d02bb9917d60ccffd4995c999e6c8c9948" 508 | dependencies: 509 | chalk "^1.1.1" 510 | time-stamp "^1.0.0" 511 | 512 | filename-regex@^2.0.0: 513 | version "2.0.1" 514 | resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.1.tgz#c1c4b9bee3e09725ddb106b75c1e301fe2f18b26" 515 | 516 | fill-range@^2.1.0: 517 | version "2.2.3" 518 | resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-2.2.3.tgz#50b77dfd7e469bc7492470963699fe7a8485a723" 519 | dependencies: 520 | is-number "^2.1.0" 521 | isobject "^2.0.0" 522 | randomatic "^1.1.3" 523 | repeat-element "^1.1.2" 524 | repeat-string "^1.5.2" 525 | 526 | findup-sync@^0.4.0, findup-sync@^0.4.2: 527 | version "0.4.3" 528 | resolved "https://registry.yarnpkg.com/findup-sync/-/findup-sync-0.4.3.tgz#40043929e7bc60adf0b7f4827c4c6e75a0deca12" 529 | dependencies: 530 | detect-file "^0.1.0" 531 | is-glob "^2.0.1" 532 | micromatch "^2.3.7" 533 | resolve-dir "^0.1.0" 534 | 535 | findup-sync@~0.3.0: 536 | version "0.3.0" 537 | resolved "https://registry.yarnpkg.com/findup-sync/-/findup-sync-0.3.0.tgz#37930aa5d816b777c03445e1966cc6790a4c0b16" 538 | dependencies: 539 | glob "~5.0.0" 540 | 541 | fined@^1.0.1: 542 | version "1.1.0" 543 | resolved "https://registry.yarnpkg.com/fined/-/fined-1.1.0.tgz#b37dc844b76a2f5e7081e884f7c0ae344f153476" 544 | dependencies: 545 | expand-tilde "^2.0.2" 546 | is-plain-object "^2.0.3" 547 | object.defaults "^1.1.0" 548 | object.pick "^1.2.0" 549 | parse-filepath "^1.0.1" 550 | 551 | first-chunk-stream@^1.0.0: 552 | version "1.0.0" 553 | resolved "https://registry.yarnpkg.com/first-chunk-stream/-/first-chunk-stream-1.0.0.tgz#59bfb50cd905f60d7c394cd3d9acaab4e6ad934e" 554 | 555 | flagged-respawn@^0.3.2: 556 | version "0.3.2" 557 | resolved "https://registry.yarnpkg.com/flagged-respawn/-/flagged-respawn-0.3.2.tgz#ff191eddcd7088a675b2610fffc976be9b8074b5" 558 | 559 | for-in@^1.0.1: 560 | version "1.0.2" 561 | resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" 562 | 563 | for-own@^0.1.1, for-own@^0.1.3, for-own@^0.1.4: 564 | version "0.1.5" 565 | resolved "https://registry.yarnpkg.com/for-own/-/for-own-0.1.5.tgz#5265c681a4f294dabbf17c9509b6763aa84510ce" 566 | dependencies: 567 | for-in "^1.0.1" 568 | 569 | for-own@^1.0.0: 570 | version "1.0.0" 571 | resolved "https://registry.yarnpkg.com/for-own/-/for-own-1.0.0.tgz#c63332f415cedc4b04dbfe70cf836494c53cb44b" 572 | dependencies: 573 | for-in "^1.0.1" 574 | 575 | forever-agent@~0.6.1: 576 | version "0.6.1" 577 | resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" 578 | 579 | form-data@~2.1.1: 580 | version "2.1.4" 581 | resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.1.4.tgz#33c183acf193276ecaa98143a69e94bfee1750d1" 582 | dependencies: 583 | asynckit "^0.4.0" 584 | combined-stream "^1.0.5" 585 | mime-types "^2.1.12" 586 | 587 | fs-exists-sync@^0.1.0: 588 | version "0.1.0" 589 | resolved "https://registry.yarnpkg.com/fs-exists-sync/-/fs-exists-sync-0.1.0.tgz#982d6893af918e72d08dec9e8673ff2b5a8d6add" 590 | 591 | fs.realpath@^1.0.0: 592 | version "1.0.0" 593 | resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" 594 | 595 | fsevents@^1.0.0: 596 | version "1.1.2" 597 | resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.1.2.tgz#3282b713fb3ad80ede0e9fcf4611b5aa6fc033f4" 598 | dependencies: 599 | nan "^2.3.0" 600 | node-pre-gyp "^0.6.36" 601 | 602 | fstream-ignore@^1.0.5: 603 | version "1.0.5" 604 | resolved "https://registry.yarnpkg.com/fstream-ignore/-/fstream-ignore-1.0.5.tgz#9c31dae34767018fe1d249b24dada67d092da105" 605 | dependencies: 606 | fstream "^1.0.0" 607 | inherits "2" 608 | minimatch "^3.0.0" 609 | 610 | fstream@^1.0.0, fstream@^1.0.10, fstream@^1.0.2: 611 | version "1.0.11" 612 | resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.11.tgz#5c1fb1f117477114f0632a0eb4b71b3cb0fd3171" 613 | dependencies: 614 | graceful-fs "^4.1.2" 615 | inherits "~2.0.0" 616 | mkdirp ">=0.5 0" 617 | rimraf "2" 618 | 619 | gauge@~2.7.3: 620 | version "2.7.4" 621 | resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" 622 | dependencies: 623 | aproba "^1.0.3" 624 | console-control-strings "^1.0.0" 625 | has-unicode "^2.0.0" 626 | object-assign "^4.1.0" 627 | signal-exit "^3.0.0" 628 | string-width "^1.0.1" 629 | strip-ansi "^3.0.1" 630 | wide-align "^1.1.0" 631 | 632 | get-values@^0.1.0: 633 | version "0.1.0" 634 | resolved "https://registry.yarnpkg.com/get-values/-/get-values-0.1.0.tgz#3ac035b65a44923d35db2fc2b7ba2322b6c3f29e" 635 | dependencies: 636 | for-own "^0.1.3" 637 | 638 | getpass@^0.1.1: 639 | version "0.1.7" 640 | resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" 641 | dependencies: 642 | assert-plus "^1.0.0" 643 | 644 | glob-base@^0.3.0: 645 | version "0.3.0" 646 | resolved "https://registry.yarnpkg.com/glob-base/-/glob-base-0.3.0.tgz#dbb164f6221b1c0b1ccf82aea328b497df0ea3c4" 647 | dependencies: 648 | glob-parent "^2.0.0" 649 | is-glob "^2.0.0" 650 | 651 | glob-parent@^2.0.0: 652 | version "2.0.0" 653 | resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-2.0.0.tgz#81383d72db054fcccf5336daa902f182f6edbb28" 654 | dependencies: 655 | is-glob "^2.0.0" 656 | 657 | glob-parent@^3.0.0: 658 | version "3.1.0" 659 | resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae" 660 | dependencies: 661 | is-glob "^3.1.0" 662 | path-dirname "^1.0.0" 663 | 664 | glob-stream@^5.3.2: 665 | version "5.3.5" 666 | resolved "https://registry.yarnpkg.com/glob-stream/-/glob-stream-5.3.5.tgz#a55665a9a8ccdc41915a87c701e32d4e016fad22" 667 | dependencies: 668 | extend "^3.0.0" 669 | glob "^5.0.3" 670 | glob-parent "^3.0.0" 671 | micromatch "^2.3.7" 672 | ordered-read-streams "^0.3.0" 673 | through2 "^0.6.0" 674 | to-absolute-glob "^0.1.1" 675 | unique-stream "^2.0.2" 676 | 677 | glob-watcher@^3.0.0: 678 | version "3.2.0" 679 | resolved "https://registry.yarnpkg.com/glob-watcher/-/glob-watcher-3.2.0.tgz#ffc1a2d3d07783b672f5e21799a4d0b3fed92daf" 680 | dependencies: 681 | async-done "^1.2.0" 682 | chokidar "^1.4.3" 683 | lodash.debounce "^4.0.6" 684 | object.defaults "^1.0.0" 685 | 686 | glob@^5.0.3, glob@~5.0.0: 687 | version "5.0.15" 688 | resolved "https://registry.yarnpkg.com/glob/-/glob-5.0.15.tgz#1bc936b9e02f4a603fcc222ecf7633d30b8b93b1" 689 | dependencies: 690 | inflight "^1.0.4" 691 | inherits "2" 692 | minimatch "2 || 3" 693 | once "^1.3.0" 694 | path-is-absolute "^1.0.0" 695 | 696 | glob@^7.0.3, glob@^7.0.5: 697 | version "7.1.2" 698 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15" 699 | dependencies: 700 | fs.realpath "^1.0.0" 701 | inflight "^1.0.4" 702 | inherits "2" 703 | minimatch "^3.0.4" 704 | once "^1.3.0" 705 | path-is-absolute "^1.0.0" 706 | 707 | global-modules@^0.2.3: 708 | version "0.2.3" 709 | resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-0.2.3.tgz#ea5a3bed42c6d6ce995a4f8a1269b5dae223828d" 710 | dependencies: 711 | global-prefix "^0.1.4" 712 | is-windows "^0.2.0" 713 | 714 | global-prefix@^0.1.4: 715 | version "0.1.5" 716 | resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-0.1.5.tgz#8d3bc6b8da3ca8112a160d8d496ff0462bfef78f" 717 | dependencies: 718 | homedir-polyfill "^1.0.0" 719 | ini "^1.3.4" 720 | is-windows "^0.2.0" 721 | which "^1.2.12" 722 | 723 | globby@^5.0.0: 724 | version "5.0.0" 725 | resolved "https://registry.yarnpkg.com/globby/-/globby-5.0.0.tgz#ebd84667ca0dbb330b99bcfc68eac2bc54370e0d" 726 | dependencies: 727 | array-union "^1.0.1" 728 | arrify "^1.0.0" 729 | glob "^7.0.3" 730 | object-assign "^4.0.1" 731 | pify "^2.0.0" 732 | pinkie-promise "^2.0.0" 733 | 734 | glogg@^1.0.0: 735 | version "1.0.0" 736 | resolved "https://registry.yarnpkg.com/glogg/-/glogg-1.0.0.tgz#7fe0f199f57ac906cf512feead8f90ee4a284fc5" 737 | dependencies: 738 | sparkles "^1.0.0" 739 | 740 | graceful-fs@^4.0.0, graceful-fs@^4.1.2: 741 | version "4.1.11" 742 | resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658" 743 | 744 | gulp-cli@^1.0.0: 745 | version "1.3.0" 746 | resolved "https://registry.yarnpkg.com/gulp-cli/-/gulp-cli-1.3.0.tgz#a6bfbb8be35341be290ae45cd3e401071216edd4" 747 | dependencies: 748 | archy "^1.0.0" 749 | chalk "^1.1.0" 750 | copy-props "^1.4.1" 751 | fancy-log "^1.1.0" 752 | gulplog "^1.0.0" 753 | interpret "^1.0.0" 754 | liftoff "^2.3.0" 755 | lodash.isfunction "^3.0.8" 756 | lodash.isplainobject "^4.0.4" 757 | lodash.sortby "^4.5.0" 758 | matchdep "^1.0.0" 759 | mute-stdout "^1.0.0" 760 | pretty-hrtime "^1.0.0" 761 | semver-greatest-satisfied-range "^1.0.0" 762 | tildify "^1.0.0" 763 | v8flags "^2.0.9" 764 | wreck "^6.3.0" 765 | yargs "^3.28.0" 766 | 767 | gulp-load-plugins@~1.2.4: 768 | version "1.2.4" 769 | resolved "https://registry.yarnpkg.com/gulp-load-plugins/-/gulp-load-plugins-1.2.4.tgz#69df7921d705bc1f2c34528aa1bdc4999bfdd808" 770 | dependencies: 771 | array-unique "^0.2.1" 772 | fancy-log "^1.2.0" 773 | findup-sync "^0.4.0" 774 | gulplog "^1.0.0" 775 | has-gulplog "^0.1.0" 776 | micromatch "^2.3.8" 777 | resolve "^1.1.7" 778 | 779 | gulp-sourcemaps@1.6.0: 780 | version "1.6.0" 781 | resolved "https://registry.yarnpkg.com/gulp-sourcemaps/-/gulp-sourcemaps-1.6.0.tgz#b86ff349d801ceb56e1d9e7dc7bbcb4b7dee600c" 782 | dependencies: 783 | convert-source-map "^1.1.1" 784 | graceful-fs "^4.1.2" 785 | strip-bom "^2.0.0" 786 | through2 "^2.0.0" 787 | vinyl "^1.0.0" 788 | 789 | gulp-tslint@~5.0.0: 790 | version "5.0.0" 791 | resolved "https://registry.yarnpkg.com/gulp-tslint/-/gulp-tslint-5.0.0.tgz#b2e94c625379fcb5b017cdec39f9b06bad19e81e" 792 | dependencies: 793 | gulp-util "~3.0.7" 794 | map-stream "~0.1.0" 795 | through "~2.3.8" 796 | 797 | gulp-typescript@2.13.6: 798 | version "2.13.6" 799 | resolved "https://registry.yarnpkg.com/gulp-typescript/-/gulp-typescript-2.13.6.tgz#af935b834e3c24d531a953597f5be57286361586" 800 | dependencies: 801 | gulp-util "~3.0.7" 802 | source-map "~0.5.3" 803 | through2 "~2.0.1" 804 | typescript "1.8.10" 805 | vinyl-fs "~2.4.3" 806 | 807 | gulp-util@~3.0.7: 808 | version "3.0.8" 809 | resolved "https://registry.yarnpkg.com/gulp-util/-/gulp-util-3.0.8.tgz#0054e1e744502e27c04c187c3ecc505dd54bbb4f" 810 | dependencies: 811 | array-differ "^1.0.0" 812 | array-uniq "^1.0.2" 813 | beeper "^1.0.0" 814 | chalk "^1.0.0" 815 | dateformat "^2.0.0" 816 | fancy-log "^1.1.0" 817 | gulplog "^1.0.0" 818 | has-gulplog "^0.1.0" 819 | lodash._reescape "^3.0.0" 820 | lodash._reevaluate "^3.0.0" 821 | lodash._reinterpolate "^3.0.0" 822 | lodash.template "^3.0.0" 823 | minimist "^1.1.0" 824 | multipipe "^0.1.2" 825 | object-assign "^3.0.0" 826 | replace-ext "0.0.1" 827 | through2 "^2.0.0" 828 | vinyl "^0.5.0" 829 | 830 | gulp@gulpjs/gulp#4.0: 831 | version "4.0.0-alpha.2" 832 | resolved "https://codeload.github.com/gulpjs/gulp/tar.gz/6d71a658c61edb3090221579d8f97dbe086ba2ed" 833 | dependencies: 834 | glob-watcher "^3.0.0" 835 | gulp-cli "^1.0.0" 836 | undertaker "^1.0.0" 837 | vinyl-fs "^2.0.0" 838 | 839 | gulplog@^1.0.0: 840 | version "1.0.0" 841 | resolved "https://registry.yarnpkg.com/gulplog/-/gulplog-1.0.0.tgz#e28c4d45d05ecbbed818363ce8f9c5926229ffe5" 842 | dependencies: 843 | glogg "^1.0.0" 844 | 845 | har-schema@^1.0.5: 846 | version "1.0.5" 847 | resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-1.0.5.tgz#d263135f43307c02c602afc8fe95970c0151369e" 848 | 849 | har-validator@~4.2.1: 850 | version "4.2.1" 851 | resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-4.2.1.tgz#33481d0f1bbff600dd203d75812a6a5fba002e2a" 852 | dependencies: 853 | ajv "^4.9.1" 854 | har-schema "^1.0.5" 855 | 856 | has-ansi@^2.0.0: 857 | version "2.0.0" 858 | resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" 859 | dependencies: 860 | ansi-regex "^2.0.0" 861 | 862 | has-gulplog@^0.1.0: 863 | version "0.1.0" 864 | resolved "https://registry.yarnpkg.com/has-gulplog/-/has-gulplog-0.1.0.tgz#6414c82913697da51590397dafb12f22967811ce" 865 | dependencies: 866 | sparkles "^1.0.0" 867 | 868 | has-unicode@^2.0.0: 869 | version "2.0.1" 870 | resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" 871 | 872 | hawk@~3.1.3: 873 | version "3.1.3" 874 | resolved "https://registry.yarnpkg.com/hawk/-/hawk-3.1.3.tgz#078444bd7c1640b0fe540d2c9b73d59678e8e1c4" 875 | dependencies: 876 | boom "2.x.x" 877 | cryptiles "2.x.x" 878 | hoek "2.x.x" 879 | sntp "1.x.x" 880 | 881 | hoek@2.x.x: 882 | version "2.16.3" 883 | resolved "https://registry.yarnpkg.com/hoek/-/hoek-2.16.3.tgz#20bb7403d3cea398e91dc4710a8ff1b8274a25ed" 884 | 885 | homedir-polyfill@^1.0.0, homedir-polyfill@^1.0.1: 886 | version "1.0.1" 887 | resolved "https://registry.yarnpkg.com/homedir-polyfill/-/homedir-polyfill-1.0.1.tgz#4c2bbc8a758998feebf5ed68580f76d46768b4bc" 888 | dependencies: 889 | parse-passwd "^1.0.0" 890 | 891 | http-signature@~1.1.0: 892 | version "1.1.1" 893 | resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.1.1.tgz#df72e267066cd0ac67fb76adf8e134a8fbcf91bf" 894 | dependencies: 895 | assert-plus "^0.2.0" 896 | jsprim "^1.2.2" 897 | sshpk "^1.7.0" 898 | 899 | inflight@^1.0.4: 900 | version "1.0.6" 901 | resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" 902 | dependencies: 903 | once "^1.3.0" 904 | wrappy "1" 905 | 906 | inherits@2, inherits@^2.0.1, inherits@~2.0.0, inherits@~2.0.1, inherits@~2.0.3: 907 | version "2.0.3" 908 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" 909 | 910 | ini@^1.3.4, ini@~1.3.0: 911 | version "1.3.4" 912 | resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.4.tgz#0537cb79daf59b59a1a517dff706c86ec039162e" 913 | 914 | interpret@^1.0.0: 915 | version "1.0.3" 916 | resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.0.3.tgz#cbc35c62eeee73f19ab7b10a801511401afc0f90" 917 | 918 | invert-kv@^1.0.0: 919 | version "1.0.0" 920 | resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6" 921 | 922 | is-absolute@^0.2.3: 923 | version "0.2.6" 924 | resolved "https://registry.yarnpkg.com/is-absolute/-/is-absolute-0.2.6.tgz#20de69f3db942ef2d87b9c2da36f172235b1b5eb" 925 | dependencies: 926 | is-relative "^0.2.1" 927 | is-windows "^0.2.0" 928 | 929 | is-binary-path@^1.0.0: 930 | version "1.0.1" 931 | resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" 932 | dependencies: 933 | binary-extensions "^1.0.0" 934 | 935 | is-buffer@^1.1.5: 936 | version "1.1.5" 937 | resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.5.tgz#1f3b26ef613b214b88cbca23cc6c01d87961eecc" 938 | 939 | is-dotfile@^1.0.0: 940 | version "1.0.3" 941 | resolved "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.3.tgz#a6a2f32ffd2dfb04f5ca25ecd0f6b83cf798a1e1" 942 | 943 | is-equal-shallow@^0.1.3: 944 | version "0.1.3" 945 | resolved "https://registry.yarnpkg.com/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz#2238098fc221de0bcfa5d9eac4c45d638aa1c534" 946 | dependencies: 947 | is-primitive "^2.0.0" 948 | 949 | is-extendable@^0.1.0, is-extendable@^0.1.1: 950 | version "0.1.1" 951 | resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" 952 | 953 | is-extglob@^1.0.0: 954 | version "1.0.0" 955 | resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0" 956 | 957 | is-extglob@^2.1.0: 958 | version "2.1.1" 959 | resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" 960 | 961 | is-fullwidth-code-point@^1.0.0: 962 | version "1.0.0" 963 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" 964 | dependencies: 965 | number-is-nan "^1.0.0" 966 | 967 | is-glob@^2.0.0, is-glob@^2.0.1: 968 | version "2.0.1" 969 | resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863" 970 | dependencies: 971 | is-extglob "^1.0.0" 972 | 973 | is-glob@^3.1.0: 974 | version "3.1.0" 975 | resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a" 976 | dependencies: 977 | is-extglob "^2.1.0" 978 | 979 | is-number@^0.1.1: 980 | version "0.1.1" 981 | resolved "https://registry.yarnpkg.com/is-number/-/is-number-0.1.1.tgz#69a7af116963d47206ec9bd9b48a14216f1e3806" 982 | 983 | is-number@^2.1.0: 984 | version "2.1.0" 985 | resolved "https://registry.yarnpkg.com/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f" 986 | dependencies: 987 | kind-of "^3.0.2" 988 | 989 | is-number@^3.0.0: 990 | version "3.0.0" 991 | resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" 992 | dependencies: 993 | kind-of "^3.0.2" 994 | 995 | is-path-cwd@^1.0.0: 996 | version "1.0.0" 997 | resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-1.0.0.tgz#d225ec23132e89edd38fda767472e62e65f1106d" 998 | 999 | is-path-in-cwd@^1.0.0: 1000 | version "1.0.0" 1001 | resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-1.0.0.tgz#6477582b8214d602346094567003be8a9eac04dc" 1002 | dependencies: 1003 | is-path-inside "^1.0.0" 1004 | 1005 | is-path-inside@^1.0.0: 1006 | version "1.0.0" 1007 | resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-1.0.0.tgz#fc06e5a1683fbda13de667aff717bbc10a48f37f" 1008 | dependencies: 1009 | path-is-inside "^1.0.1" 1010 | 1011 | is-plain-object@^2.0.1, is-plain-object@^2.0.3: 1012 | version "2.0.4" 1013 | resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" 1014 | dependencies: 1015 | isobject "^3.0.1" 1016 | 1017 | is-posix-bracket@^0.1.0: 1018 | version "0.1.1" 1019 | resolved "https://registry.yarnpkg.com/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz#3334dc79774368e92f016e6fbc0a88f5cd6e6bc4" 1020 | 1021 | is-primitive@^2.0.0: 1022 | version "2.0.0" 1023 | resolved "https://registry.yarnpkg.com/is-primitive/-/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575" 1024 | 1025 | is-relative@^0.2.1: 1026 | version "0.2.1" 1027 | resolved "https://registry.yarnpkg.com/is-relative/-/is-relative-0.2.1.tgz#d27f4c7d516d175fb610db84bbeef23c3bc97aa5" 1028 | dependencies: 1029 | is-unc-path "^0.1.1" 1030 | 1031 | is-stream@^1.0.1: 1032 | version "1.1.0" 1033 | resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" 1034 | 1035 | is-typedarray@~1.0.0: 1036 | version "1.0.0" 1037 | resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" 1038 | 1039 | is-unc-path@^0.1.1: 1040 | version "0.1.2" 1041 | resolved "https://registry.yarnpkg.com/is-unc-path/-/is-unc-path-0.1.2.tgz#6ab053a72573c10250ff416a3814c35178af39b9" 1042 | dependencies: 1043 | unc-path-regex "^0.1.0" 1044 | 1045 | is-utf8@^0.2.0: 1046 | version "0.2.1" 1047 | resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" 1048 | 1049 | is-valid-glob@^0.3.0: 1050 | version "0.3.0" 1051 | resolved "https://registry.yarnpkg.com/is-valid-glob/-/is-valid-glob-0.3.0.tgz#d4b55c69f51886f9b65c70d6c2622d37e29f48fe" 1052 | 1053 | is-windows@^0.2.0: 1054 | version "0.2.0" 1055 | resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-0.2.0.tgz#de1aa6d63ea29dd248737b69f1ff8b8002d2108c" 1056 | 1057 | isarray@0.0.1: 1058 | version "0.0.1" 1059 | resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" 1060 | 1061 | isarray@1.0.0, isarray@~1.0.0: 1062 | version "1.0.0" 1063 | resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" 1064 | 1065 | isexe@^2.0.0: 1066 | version "2.0.0" 1067 | resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" 1068 | 1069 | isobject@^1.0.0: 1070 | version "1.0.2" 1071 | resolved "https://registry.yarnpkg.com/isobject/-/isobject-1.0.2.tgz#f0f9b8ce92dd540fa0740882e3835a2e022ec78a" 1072 | 1073 | isobject@^2.0.0, isobject@^2.1.0: 1074 | version "2.1.0" 1075 | resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" 1076 | dependencies: 1077 | isarray "1.0.0" 1078 | 1079 | isobject@^3.0.0, isobject@^3.0.1: 1080 | version "3.0.1" 1081 | resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" 1082 | 1083 | isstream@~0.1.2: 1084 | version "0.1.2" 1085 | resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" 1086 | 1087 | jsbn@~0.1.0: 1088 | version "0.1.1" 1089 | resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" 1090 | 1091 | json-schema@0.2.3: 1092 | version "0.2.3" 1093 | resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" 1094 | 1095 | json-stable-stringify@^1.0.0, json-stable-stringify@^1.0.1: 1096 | version "1.0.1" 1097 | resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af" 1098 | dependencies: 1099 | jsonify "~0.0.0" 1100 | 1101 | json-stringify-safe@~5.0.1: 1102 | version "5.0.1" 1103 | resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" 1104 | 1105 | jsonify@~0.0.0: 1106 | version "0.0.0" 1107 | resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" 1108 | 1109 | jsprim@^1.2.2: 1110 | version "1.4.0" 1111 | resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.0.tgz#a3b87e40298d8c380552d8cc7628a0bb95a22918" 1112 | dependencies: 1113 | assert-plus "1.0.0" 1114 | extsprintf "1.0.2" 1115 | json-schema "0.2.3" 1116 | verror "1.3.6" 1117 | 1118 | kind-of@^3.0.2, kind-of@^3.1.0: 1119 | version "3.2.2" 1120 | resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" 1121 | dependencies: 1122 | is-buffer "^1.1.5" 1123 | 1124 | kind-of@^4.0.0: 1125 | version "4.0.0" 1126 | resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" 1127 | dependencies: 1128 | is-buffer "^1.1.5" 1129 | 1130 | last-run@^1.1.0: 1131 | version "1.1.1" 1132 | resolved "https://registry.yarnpkg.com/last-run/-/last-run-1.1.1.tgz#45b96942c17b1c79c772198259ba943bebf8ca5b" 1133 | dependencies: 1134 | default-resolution "^2.0.0" 1135 | es6-weak-map "^2.0.1" 1136 | 1137 | lazystream@^1.0.0: 1138 | version "1.0.0" 1139 | resolved "https://registry.yarnpkg.com/lazystream/-/lazystream-1.0.0.tgz#f6995fe0f820392f61396be89462407bb77168e4" 1140 | dependencies: 1141 | readable-stream "^2.0.5" 1142 | 1143 | lcid@^1.0.0: 1144 | version "1.0.0" 1145 | resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835" 1146 | dependencies: 1147 | invert-kv "^1.0.0" 1148 | 1149 | liftoff@^2.3.0: 1150 | version "2.3.0" 1151 | resolved "https://registry.yarnpkg.com/liftoff/-/liftoff-2.3.0.tgz#a98f2ff67183d8ba7cfaca10548bd7ff0550b385" 1152 | dependencies: 1153 | extend "^3.0.0" 1154 | findup-sync "^0.4.2" 1155 | fined "^1.0.1" 1156 | flagged-respawn "^0.3.2" 1157 | lodash.isplainobject "^4.0.4" 1158 | lodash.isstring "^4.0.1" 1159 | lodash.mapvalues "^4.4.0" 1160 | rechoir "^0.6.2" 1161 | resolve "^1.1.7" 1162 | 1163 | lodash._basecopy@^3.0.0: 1164 | version "3.0.1" 1165 | resolved "https://registry.yarnpkg.com/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz#8da0e6a876cf344c0ad8a54882111dd3c5c7ca36" 1166 | 1167 | lodash._basetostring@^3.0.0: 1168 | version "3.0.1" 1169 | resolved "https://registry.yarnpkg.com/lodash._basetostring/-/lodash._basetostring-3.0.1.tgz#d1861d877f824a52f669832dcaf3ee15566a07d5" 1170 | 1171 | lodash._basevalues@^3.0.0: 1172 | version "3.0.0" 1173 | resolved "https://registry.yarnpkg.com/lodash._basevalues/-/lodash._basevalues-3.0.0.tgz#5b775762802bde3d3297503e26300820fdf661b7" 1174 | 1175 | lodash._getnative@^3.0.0: 1176 | version "3.9.1" 1177 | resolved "https://registry.yarnpkg.com/lodash._getnative/-/lodash._getnative-3.9.1.tgz#570bc7dede46d61cdcde687d65d3eecbaa3aaff5" 1178 | 1179 | lodash._isiterateecall@^3.0.0: 1180 | version "3.0.9" 1181 | resolved "https://registry.yarnpkg.com/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz#5203ad7ba425fae842460e696db9cf3e6aac057c" 1182 | 1183 | lodash._reescape@^3.0.0: 1184 | version "3.0.0" 1185 | resolved "https://registry.yarnpkg.com/lodash._reescape/-/lodash._reescape-3.0.0.tgz#2b1d6f5dfe07c8a355753e5f27fac7f1cde1616a" 1186 | 1187 | lodash._reevaluate@^3.0.0: 1188 | version "3.0.0" 1189 | resolved "https://registry.yarnpkg.com/lodash._reevaluate/-/lodash._reevaluate-3.0.0.tgz#58bc74c40664953ae0b124d806996daca431e2ed" 1190 | 1191 | lodash._reinterpolate@^3.0.0: 1192 | version "3.0.0" 1193 | resolved "https://registry.yarnpkg.com/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz#0ccf2d89166af03b3663c796538b75ac6e114d9d" 1194 | 1195 | lodash._root@^3.0.0: 1196 | version "3.0.1" 1197 | resolved "https://registry.yarnpkg.com/lodash._root/-/lodash._root-3.0.1.tgz#fba1c4524c19ee9a5f8136b4609f017cf4ded692" 1198 | 1199 | lodash.debounce@^4.0.6: 1200 | version "4.0.8" 1201 | resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" 1202 | 1203 | lodash.escape@^3.0.0: 1204 | version "3.2.0" 1205 | resolved "https://registry.yarnpkg.com/lodash.escape/-/lodash.escape-3.2.0.tgz#995ee0dc18c1b48cc92effae71a10aab5b487698" 1206 | dependencies: 1207 | lodash._root "^3.0.0" 1208 | 1209 | lodash.isarguments@^3.0.0: 1210 | version "3.1.0" 1211 | resolved "https://registry.yarnpkg.com/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz#2f573d85c6a24289ff00663b491c1d338ff3458a" 1212 | 1213 | lodash.isarray@^3.0.0: 1214 | version "3.0.4" 1215 | resolved "https://registry.yarnpkg.com/lodash.isarray/-/lodash.isarray-3.0.4.tgz#79e4eb88c36a8122af86f844aa9bcd851b5fbb55" 1216 | 1217 | lodash.isequal@^4.0.0: 1218 | version "4.5.0" 1219 | resolved "https://registry.yarnpkg.com/lodash.isequal/-/lodash.isequal-4.5.0.tgz#415c4478f2bcc30120c22ce10ed3226f7d3e18e0" 1220 | 1221 | lodash.isfunction@^3.0.8: 1222 | version "3.0.8" 1223 | resolved "https://registry.yarnpkg.com/lodash.isfunction/-/lodash.isfunction-3.0.8.tgz#4db709fc81bc4a8fd7127a458a5346c5cdce2c6b" 1224 | 1225 | lodash.isplainobject@^4.0.4: 1226 | version "4.0.6" 1227 | resolved "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb" 1228 | 1229 | lodash.isstring@^4.0.1: 1230 | version "4.0.1" 1231 | resolved "https://registry.yarnpkg.com/lodash.isstring/-/lodash.isstring-4.0.1.tgz#d527dfb5456eca7cc9bb95d5daeaf88ba54a5451" 1232 | 1233 | lodash.keys@^3.0.0: 1234 | version "3.1.2" 1235 | resolved "https://registry.yarnpkg.com/lodash.keys/-/lodash.keys-3.1.2.tgz#4dbc0472b156be50a0b286855d1bd0b0c656098a" 1236 | dependencies: 1237 | lodash._getnative "^3.0.0" 1238 | lodash.isarguments "^3.0.0" 1239 | lodash.isarray "^3.0.0" 1240 | 1241 | lodash.mapvalues@^4.4.0: 1242 | version "4.6.0" 1243 | resolved "https://registry.yarnpkg.com/lodash.mapvalues/-/lodash.mapvalues-4.6.0.tgz#1bafa5005de9dd6f4f26668c30ca37230cc9689c" 1244 | 1245 | lodash.restparam@^3.0.0: 1246 | version "3.6.1" 1247 | resolved "https://registry.yarnpkg.com/lodash.restparam/-/lodash.restparam-3.6.1.tgz#936a4e309ef330a7645ed4145986c85ae5b20805" 1248 | 1249 | lodash.sortby@^4.5.0: 1250 | version "4.7.0" 1251 | resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" 1252 | 1253 | lodash.template@^3.0.0: 1254 | version "3.6.2" 1255 | resolved "https://registry.yarnpkg.com/lodash.template/-/lodash.template-3.6.2.tgz#f8cdecc6169a255be9098ae8b0c53d378931d14f" 1256 | dependencies: 1257 | lodash._basecopy "^3.0.0" 1258 | lodash._basetostring "^3.0.0" 1259 | lodash._basevalues "^3.0.0" 1260 | lodash._isiterateecall "^3.0.0" 1261 | lodash._reinterpolate "^3.0.0" 1262 | lodash.escape "^3.0.0" 1263 | lodash.keys "^3.0.0" 1264 | lodash.restparam "^3.0.0" 1265 | lodash.templatesettings "^3.0.0" 1266 | 1267 | lodash.templatesettings@^3.0.0: 1268 | version "3.1.1" 1269 | resolved "https://registry.yarnpkg.com/lodash.templatesettings/-/lodash.templatesettings-3.1.1.tgz#fb307844753b66b9f1afa54e262c745307dba8e5" 1270 | dependencies: 1271 | lodash._reinterpolate "^3.0.0" 1272 | lodash.escape "^3.0.0" 1273 | 1274 | make-iterator@^0.1.1: 1275 | version "0.1.1" 1276 | resolved "https://registry.yarnpkg.com/make-iterator/-/make-iterator-0.1.1.tgz#873d27b8198a465a81483b6f5d16da4e863ecf5b" 1277 | dependencies: 1278 | for-own "^0.1.1" 1279 | 1280 | make-iterator@^1.0.0: 1281 | version "1.0.0" 1282 | resolved "https://registry.yarnpkg.com/make-iterator/-/make-iterator-1.0.0.tgz#57bef5dc85d23923ba23767324d8e8f8f3d9694b" 1283 | dependencies: 1284 | kind-of "^3.1.0" 1285 | 1286 | map-cache@^0.2.0: 1287 | version "0.2.2" 1288 | resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" 1289 | 1290 | map-stream@~0.1.0: 1291 | version "0.1.0" 1292 | resolved "https://registry.yarnpkg.com/map-stream/-/map-stream-0.1.0.tgz#e56aa94c4c8055a16404a0674b78f215f7c8e194" 1293 | 1294 | matchdep@^1.0.0: 1295 | version "1.0.1" 1296 | resolved "https://registry.yarnpkg.com/matchdep/-/matchdep-1.0.1.tgz#a57a33804491fbae208aba8f68380437abc2dca5" 1297 | dependencies: 1298 | findup-sync "~0.3.0" 1299 | micromatch "^2.3.7" 1300 | resolve "~1.1.6" 1301 | stack-trace "0.0.9" 1302 | 1303 | merge-stream@^1.0.0: 1304 | version "1.0.1" 1305 | resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-1.0.1.tgz#4041202d508a342ba00174008df0c251b8c135e1" 1306 | dependencies: 1307 | readable-stream "^2.0.1" 1308 | 1309 | micromatch@^2.1.5, micromatch@^2.3.7, micromatch@^2.3.8: 1310 | version "2.3.11" 1311 | resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565" 1312 | dependencies: 1313 | arr-diff "^2.0.0" 1314 | array-unique "^0.2.1" 1315 | braces "^1.8.2" 1316 | expand-brackets "^0.1.4" 1317 | extglob "^0.3.1" 1318 | filename-regex "^2.0.0" 1319 | is-extglob "^1.0.0" 1320 | is-glob "^2.0.1" 1321 | kind-of "^3.0.2" 1322 | normalize-path "^2.0.1" 1323 | object.omit "^2.0.0" 1324 | parse-glob "^3.0.4" 1325 | regex-cache "^0.4.2" 1326 | 1327 | mime-db@~1.29.0: 1328 | version "1.29.0" 1329 | resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.29.0.tgz#48d26d235589651704ac5916ca06001914266878" 1330 | 1331 | mime-types@^2.1.12, mime-types@~2.1.7: 1332 | version "2.1.16" 1333 | resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.16.tgz#2b858a52e5ecd516db897ac2be87487830698e23" 1334 | dependencies: 1335 | mime-db "~1.29.0" 1336 | 1337 | "minimatch@2 || 3", minimatch@^3.0.0, minimatch@^3.0.2, minimatch@^3.0.4: 1338 | version "3.0.4" 1339 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" 1340 | dependencies: 1341 | brace-expansion "^1.1.7" 1342 | 1343 | minimist@0.0.8: 1344 | version "0.0.8" 1345 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" 1346 | 1347 | minimist@^1.1.0, minimist@^1.2.0: 1348 | version "1.2.0" 1349 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" 1350 | 1351 | "mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1: 1352 | version "0.5.1" 1353 | resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" 1354 | dependencies: 1355 | minimist "0.0.8" 1356 | 1357 | ms@2.0.0: 1358 | version "2.0.0" 1359 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" 1360 | 1361 | multipipe@^0.1.2: 1362 | version "0.1.2" 1363 | resolved "https://registry.yarnpkg.com/multipipe/-/multipipe-0.1.2.tgz#2a8f2ddf70eed564dff2d57f1e1a137d9f05078b" 1364 | dependencies: 1365 | duplexer2 "0.0.2" 1366 | 1367 | mute-stdout@^1.0.0: 1368 | version "1.0.0" 1369 | resolved "https://registry.yarnpkg.com/mute-stdout/-/mute-stdout-1.0.0.tgz#5b32ea07eb43c9ded6130434cf926f46b2a7fd4d" 1370 | 1371 | nan@^2.3.0: 1372 | version "2.6.2" 1373 | resolved "https://registry.yarnpkg.com/nan/-/nan-2.6.2.tgz#e4ff34e6c95fdfb5aecc08de6596f43605a7db45" 1374 | 1375 | next-tick@^1.0.0: 1376 | version "1.0.0" 1377 | resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.0.0.tgz#ca86d1fe8828169b0120208e3dc8424b9db8342c" 1378 | 1379 | node-pre-gyp@^0.6.36: 1380 | version "0.6.36" 1381 | resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.6.36.tgz#db604112cb74e0d477554e9b505b17abddfab786" 1382 | dependencies: 1383 | mkdirp "^0.5.1" 1384 | nopt "^4.0.1" 1385 | npmlog "^4.0.2" 1386 | rc "^1.1.7" 1387 | request "^2.81.0" 1388 | rimraf "^2.6.1" 1389 | semver "^5.3.0" 1390 | tar "^2.2.1" 1391 | tar-pack "^3.4.0" 1392 | 1393 | nopt@^4.0.1: 1394 | version "4.0.1" 1395 | resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d" 1396 | dependencies: 1397 | abbrev "1" 1398 | osenv "^0.1.4" 1399 | 1400 | normalize-path@^2.0.0, normalize-path@^2.0.1: 1401 | version "2.1.1" 1402 | resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" 1403 | dependencies: 1404 | remove-trailing-separator "^1.0.1" 1405 | 1406 | now-and-later@^1.0.0: 1407 | version "1.0.0" 1408 | resolved "https://registry.yarnpkg.com/now-and-later/-/now-and-later-1.0.0.tgz#23e798ccaaf0e8acbef0687f82086274746e0893" 1409 | dependencies: 1410 | once "^1.3.2" 1411 | 1412 | npmlog@^4.0.2: 1413 | version "4.1.2" 1414 | resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" 1415 | dependencies: 1416 | are-we-there-yet "~1.1.2" 1417 | console-control-strings "~1.1.0" 1418 | gauge "~2.7.3" 1419 | set-blocking "~2.0.0" 1420 | 1421 | number-is-nan@^1.0.0: 1422 | version "1.0.1" 1423 | resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" 1424 | 1425 | oauth-sign@~0.8.1: 1426 | version "0.8.2" 1427 | resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43" 1428 | 1429 | object-assign@^3.0.0: 1430 | version "3.0.0" 1431 | resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-3.0.0.tgz#9bedd5ca0897949bca47e7ff408062d549f587f2" 1432 | 1433 | object-assign@^4.0.0, object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: 1434 | version "4.1.1" 1435 | resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" 1436 | 1437 | object.defaults@^0.3.0: 1438 | version "0.3.0" 1439 | resolved "https://registry.yarnpkg.com/object.defaults/-/object.defaults-0.3.0.tgz#b1eb9cbc78c4c7bd56cac6cae3dead5a7113882a" 1440 | dependencies: 1441 | array-each "^0.1.0" 1442 | array-slice "^0.2.3" 1443 | for-own "^0.1.3" 1444 | isobject "^1.0.0" 1445 | 1446 | object.defaults@^1.0.0, object.defaults@^1.1.0: 1447 | version "1.1.0" 1448 | resolved "https://registry.yarnpkg.com/object.defaults/-/object.defaults-1.1.0.tgz#3a7f868334b407dea06da16d88d5cd29e435fecf" 1449 | dependencies: 1450 | array-each "^1.0.1" 1451 | array-slice "^1.0.0" 1452 | for-own "^1.0.0" 1453 | isobject "^3.0.0" 1454 | 1455 | object.omit@^2.0.0: 1456 | version "2.0.1" 1457 | resolved "https://registry.yarnpkg.com/object.omit/-/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa" 1458 | dependencies: 1459 | for-own "^0.1.4" 1460 | is-extendable "^0.1.1" 1461 | 1462 | object.pick@^1.2.0: 1463 | version "1.2.0" 1464 | resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.2.0.tgz#b5392bee9782da6d9fb7d6afaf539779f1234c2b" 1465 | dependencies: 1466 | isobject "^2.1.0" 1467 | 1468 | object.reduce@^0.1.7: 1469 | version "0.1.7" 1470 | resolved "https://registry.yarnpkg.com/object.reduce/-/object.reduce-0.1.7.tgz#d180e84f72d218348af45352b55165246b95046d" 1471 | dependencies: 1472 | for-own "^0.1.3" 1473 | 1474 | once@^1.3.0, once@^1.3.2, once@^1.3.3, once@^1.4.0: 1475 | version "1.4.0" 1476 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" 1477 | dependencies: 1478 | wrappy "1" 1479 | 1480 | once@~1.3.0: 1481 | version "1.3.3" 1482 | resolved "https://registry.yarnpkg.com/once/-/once-1.3.3.tgz#b2e261557ce4c314ec8304f3fa82663e4297ca20" 1483 | dependencies: 1484 | wrappy "1" 1485 | 1486 | ordered-read-streams@^0.3.0: 1487 | version "0.3.0" 1488 | resolved "https://registry.yarnpkg.com/ordered-read-streams/-/ordered-read-streams-0.3.0.tgz#7137e69b3298bb342247a1bbee3881c80e2fd78b" 1489 | dependencies: 1490 | is-stream "^1.0.1" 1491 | readable-stream "^2.0.1" 1492 | 1493 | os-homedir@^1.0.0, os-homedir@^1.0.1: 1494 | version "1.0.2" 1495 | resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" 1496 | 1497 | os-locale@^1.4.0: 1498 | version "1.4.0" 1499 | resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-1.4.0.tgz#20f9f17ae29ed345e8bde583b13d2009803c14d9" 1500 | dependencies: 1501 | lcid "^1.0.0" 1502 | 1503 | os-tmpdir@^1.0.0: 1504 | version "1.0.2" 1505 | resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" 1506 | 1507 | osenv@^0.1.4: 1508 | version "0.1.4" 1509 | resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.4.tgz#42fe6d5953df06c8064be6f176c3d05aaaa34644" 1510 | dependencies: 1511 | os-homedir "^1.0.0" 1512 | os-tmpdir "^1.0.0" 1513 | 1514 | parse-filepath@^1.0.1: 1515 | version "1.0.1" 1516 | resolved "https://registry.yarnpkg.com/parse-filepath/-/parse-filepath-1.0.1.tgz#159d6155d43904d16c10ef698911da1e91969b73" 1517 | dependencies: 1518 | is-absolute "^0.2.3" 1519 | map-cache "^0.2.0" 1520 | path-root "^0.1.1" 1521 | 1522 | parse-glob@^3.0.4: 1523 | version "3.0.4" 1524 | resolved "https://registry.yarnpkg.com/parse-glob/-/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c" 1525 | dependencies: 1526 | glob-base "^0.3.0" 1527 | is-dotfile "^1.0.0" 1528 | is-extglob "^1.0.0" 1529 | is-glob "^2.0.0" 1530 | 1531 | parse-passwd@^1.0.0: 1532 | version "1.0.0" 1533 | resolved "https://registry.yarnpkg.com/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6" 1534 | 1535 | path-dirname@^1.0.0: 1536 | version "1.0.2" 1537 | resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0" 1538 | 1539 | path-is-absolute@^1.0.0: 1540 | version "1.0.1" 1541 | resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" 1542 | 1543 | path-is-inside@^1.0.1: 1544 | version "1.0.2" 1545 | resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" 1546 | 1547 | path-parse@^1.0.5: 1548 | version "1.0.5" 1549 | resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.5.tgz#3c1adf871ea9cd6c9431b6ea2bd74a0ff055c4c1" 1550 | 1551 | path-root-regex@^0.1.0: 1552 | version "0.1.2" 1553 | resolved "https://registry.yarnpkg.com/path-root-regex/-/path-root-regex-0.1.2.tgz#bfccdc8df5b12dc52c8b43ec38d18d72c04ba96d" 1554 | 1555 | path-root@^0.1.1: 1556 | version "0.1.1" 1557 | resolved "https://registry.yarnpkg.com/path-root/-/path-root-0.1.1.tgz#9a4a6814cac1c0cd73360a95f32083c8ea4745b7" 1558 | dependencies: 1559 | path-root-regex "^0.1.0" 1560 | 1561 | performance-now@^0.2.0: 1562 | version "0.2.0" 1563 | resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-0.2.0.tgz#33ef30c5c77d4ea21c5a53869d91b56d8f2555e5" 1564 | 1565 | pify@^2.0.0: 1566 | version "2.3.0" 1567 | resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" 1568 | 1569 | pinkie-promise@^2.0.0: 1570 | version "2.0.1" 1571 | resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" 1572 | dependencies: 1573 | pinkie "^2.0.0" 1574 | 1575 | pinkie@^2.0.0: 1576 | version "2.0.4" 1577 | resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" 1578 | 1579 | preserve@^0.2.0: 1580 | version "0.2.0" 1581 | resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b" 1582 | 1583 | pretty-hrtime@^1.0.0: 1584 | version "1.0.3" 1585 | resolved "https://registry.yarnpkg.com/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz#b7e3ea42435a4c9b2759d99e0f201eb195802ee1" 1586 | 1587 | process-nextick-args@~1.0.6: 1588 | version "1.0.7" 1589 | resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3" 1590 | 1591 | punycode@^1.4.1: 1592 | version "1.4.1" 1593 | resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" 1594 | 1595 | qs@~6.4.0: 1596 | version "6.4.0" 1597 | resolved "https://registry.yarnpkg.com/qs/-/qs-6.4.0.tgz#13e26d28ad6b0ffaa91312cd3bf708ed351e7233" 1598 | 1599 | randomatic@^1.1.3: 1600 | version "1.1.7" 1601 | resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-1.1.7.tgz#c7abe9cc8b87c0baa876b19fde83fd464797e38c" 1602 | dependencies: 1603 | is-number "^3.0.0" 1604 | kind-of "^4.0.0" 1605 | 1606 | rc@^1.1.7: 1607 | version "1.2.1" 1608 | resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.1.tgz#2e03e8e42ee450b8cb3dce65be1bf8974e1dfd95" 1609 | dependencies: 1610 | deep-extend "~0.4.0" 1611 | ini "~1.3.0" 1612 | minimist "^1.2.0" 1613 | strip-json-comments "~2.0.1" 1614 | 1615 | "readable-stream@>=1.0.33-1 <1.1.0-0": 1616 | version "1.0.34" 1617 | resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.0.34.tgz#125820e34bc842d2f2aaafafe4c2916ee32c157c" 1618 | dependencies: 1619 | core-util-is "~1.0.0" 1620 | inherits "~2.0.1" 1621 | isarray "0.0.1" 1622 | string_decoder "~0.10.x" 1623 | 1624 | readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.4, readable-stream@^2.0.5, readable-stream@^2.0.6, readable-stream@^2.1.4, readable-stream@^2.1.5: 1625 | version "2.3.3" 1626 | resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.3.tgz#368f2512d79f9d46fdfc71349ae7878bbc1eb95c" 1627 | dependencies: 1628 | core-util-is "~1.0.0" 1629 | inherits "~2.0.3" 1630 | isarray "~1.0.0" 1631 | process-nextick-args "~1.0.6" 1632 | safe-buffer "~5.1.1" 1633 | string_decoder "~1.0.3" 1634 | util-deprecate "~1.0.1" 1635 | 1636 | readable-stream@~1.1.9: 1637 | version "1.1.14" 1638 | resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9" 1639 | dependencies: 1640 | core-util-is "~1.0.0" 1641 | inherits "~2.0.1" 1642 | isarray "0.0.1" 1643 | string_decoder "~0.10.x" 1644 | 1645 | readdirp@^2.0.0: 1646 | version "2.1.0" 1647 | resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.1.0.tgz#4ed0ad060df3073300c48440373f72d1cc642d78" 1648 | dependencies: 1649 | graceful-fs "^4.1.2" 1650 | minimatch "^3.0.2" 1651 | readable-stream "^2.0.2" 1652 | set-immediate-shim "^1.0.1" 1653 | 1654 | rechoir@^0.6.2: 1655 | version "0.6.2" 1656 | resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384" 1657 | dependencies: 1658 | resolve "^1.1.6" 1659 | 1660 | regex-cache@^0.4.2: 1661 | version "0.4.3" 1662 | resolved "https://registry.yarnpkg.com/regex-cache/-/regex-cache-0.4.3.tgz#9b1a6c35d4d0dfcef5711ae651e8e9d3d7114145" 1663 | dependencies: 1664 | is-equal-shallow "^0.1.3" 1665 | is-primitive "^2.0.0" 1666 | 1667 | remove-trailing-separator@^1.0.1: 1668 | version "1.0.2" 1669 | resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.0.2.tgz#69b062d978727ad14dc6b56ba4ab772fd8d70511" 1670 | 1671 | repeat-element@^1.1.2: 1672 | version "1.1.2" 1673 | resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.2.tgz#ef089a178d1483baae4d93eb98b4f9e4e11d990a" 1674 | 1675 | repeat-string@^1.5.2: 1676 | version "1.6.1" 1677 | resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" 1678 | 1679 | replace-ext@0.0.1: 1680 | version "0.0.1" 1681 | resolved "https://registry.yarnpkg.com/replace-ext/-/replace-ext-0.0.1.tgz#29bbd92078a739f0bcce2b4ee41e837953522924" 1682 | 1683 | request@^2.81.0: 1684 | version "2.81.0" 1685 | resolved "https://registry.yarnpkg.com/request/-/request-2.81.0.tgz#c6928946a0e06c5f8d6f8a9333469ffda46298a0" 1686 | dependencies: 1687 | aws-sign2 "~0.6.0" 1688 | aws4 "^1.2.1" 1689 | caseless "~0.12.0" 1690 | combined-stream "~1.0.5" 1691 | extend "~3.0.0" 1692 | forever-agent "~0.6.1" 1693 | form-data "~2.1.1" 1694 | har-validator "~4.2.1" 1695 | hawk "~3.1.3" 1696 | http-signature "~1.1.0" 1697 | is-typedarray "~1.0.0" 1698 | isstream "~0.1.2" 1699 | json-stringify-safe "~5.0.1" 1700 | mime-types "~2.1.7" 1701 | oauth-sign "~0.8.1" 1702 | performance-now "^0.2.0" 1703 | qs "~6.4.0" 1704 | safe-buffer "^5.0.1" 1705 | stringstream "~0.0.4" 1706 | tough-cookie "~2.3.0" 1707 | tunnel-agent "^0.6.0" 1708 | uuid "^3.0.0" 1709 | 1710 | resolve-dir@^0.1.0: 1711 | version "0.1.1" 1712 | resolved "https://registry.yarnpkg.com/resolve-dir/-/resolve-dir-0.1.1.tgz#b219259a5602fac5c5c496ad894a6e8cc430261e" 1713 | dependencies: 1714 | expand-tilde "^1.2.2" 1715 | global-modules "^0.2.3" 1716 | 1717 | resolve@^1.1.6, resolve@^1.1.7: 1718 | version "1.4.0" 1719 | resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.4.0.tgz#a75be01c53da25d934a98ebd0e4c4a7312f92a86" 1720 | dependencies: 1721 | path-parse "^1.0.5" 1722 | 1723 | resolve@~1.1.6: 1724 | version "1.1.7" 1725 | resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" 1726 | 1727 | rimraf@2, rimraf@^2.2.8, rimraf@^2.5.1, rimraf@^2.6.1: 1728 | version "2.6.1" 1729 | resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.1.tgz#c2338ec643df7a1b7fe5c54fa86f57428a55f33d" 1730 | dependencies: 1731 | glob "^7.0.5" 1732 | 1733 | safe-buffer@^5.0.1, safe-buffer@~5.1.0, safe-buffer@~5.1.1: 1734 | version "5.1.1" 1735 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853" 1736 | 1737 | semver-greatest-satisfied-range@^1.0.0: 1738 | version "1.0.0" 1739 | resolved "https://registry.yarnpkg.com/semver-greatest-satisfied-range/-/semver-greatest-satisfied-range-1.0.0.tgz#4fb441e2a8d26c40b598327557318de272a558a0" 1740 | dependencies: 1741 | semver "^4.2.0" 1742 | semver-regex "^1.0.0" 1743 | 1744 | semver-regex@^1.0.0: 1745 | version "1.0.0" 1746 | resolved "https://registry.yarnpkg.com/semver-regex/-/semver-regex-1.0.0.tgz#92a4969065f9c70c694753d55248fc68f8f652c9" 1747 | 1748 | semver@^4.2.0: 1749 | version "4.3.6" 1750 | resolved "https://registry.yarnpkg.com/semver/-/semver-4.3.6.tgz#300bc6e0e86374f7ba61068b5b1ecd57fc6532da" 1751 | 1752 | semver@^5.3.0: 1753 | version "5.4.1" 1754 | resolved "https://registry.yarnpkg.com/semver/-/semver-5.4.1.tgz#e059c09d8571f0540823733433505d3a2f00b18e" 1755 | 1756 | set-blocking@~2.0.0: 1757 | version "2.0.0" 1758 | resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" 1759 | 1760 | set-immediate-shim@^1.0.1: 1761 | version "1.0.1" 1762 | resolved "https://registry.yarnpkg.com/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz#4b2b1b27eb808a9f8dcc481a58e5e56f599f3f61" 1763 | 1764 | signal-exit@^3.0.0: 1765 | version "3.0.2" 1766 | resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" 1767 | 1768 | sntp@1.x.x: 1769 | version "1.0.9" 1770 | resolved "https://registry.yarnpkg.com/sntp/-/sntp-1.0.9.tgz#6541184cc90aeea6c6e7b35e2659082443c66198" 1771 | dependencies: 1772 | hoek "2.x.x" 1773 | 1774 | source-map@~0.5.3: 1775 | version "0.5.6" 1776 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.6.tgz#75ce38f52bf0733c5a7f0c118d81334a2bb5f412" 1777 | 1778 | sparkles@^1.0.0: 1779 | version "1.0.0" 1780 | resolved "https://registry.yarnpkg.com/sparkles/-/sparkles-1.0.0.tgz#1acbbfb592436d10bbe8f785b7cc6f82815012c3" 1781 | 1782 | sshpk@^1.7.0: 1783 | version "1.13.1" 1784 | resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.13.1.tgz#512df6da6287144316dc4c18fe1cf1d940739be3" 1785 | dependencies: 1786 | asn1 "~0.2.3" 1787 | assert-plus "^1.0.0" 1788 | dashdash "^1.12.0" 1789 | getpass "^0.1.1" 1790 | optionalDependencies: 1791 | bcrypt-pbkdf "^1.0.0" 1792 | ecc-jsbn "~0.1.1" 1793 | jsbn "~0.1.0" 1794 | tweetnacl "~0.14.0" 1795 | 1796 | stack-trace@0.0.9: 1797 | version "0.0.9" 1798 | resolved "https://registry.yarnpkg.com/stack-trace/-/stack-trace-0.0.9.tgz#a8f6eaeca90674c333e7c43953f275b451510695" 1799 | 1800 | stream-exhaust@^1.0.1: 1801 | version "1.0.1" 1802 | resolved "https://registry.yarnpkg.com/stream-exhaust/-/stream-exhaust-1.0.1.tgz#c0c4455e54ce5a179ca8736e73334b4e7fd67553" 1803 | 1804 | stream-shift@^1.0.0: 1805 | version "1.0.0" 1806 | resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.0.tgz#d5c752825e5367e786f78e18e445ea223a155952" 1807 | 1808 | string-width@^1.0.1, string-width@^1.0.2: 1809 | version "1.0.2" 1810 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" 1811 | dependencies: 1812 | code-point-at "^1.0.0" 1813 | is-fullwidth-code-point "^1.0.0" 1814 | strip-ansi "^3.0.0" 1815 | 1816 | string_decoder@~0.10.x: 1817 | version "0.10.31" 1818 | resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" 1819 | 1820 | string_decoder@~1.0.3: 1821 | version "1.0.3" 1822 | resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.0.3.tgz#0fc67d7c141825de94282dd536bec6b9bce860ab" 1823 | dependencies: 1824 | safe-buffer "~5.1.0" 1825 | 1826 | stringstream@~0.0.4: 1827 | version "0.0.5" 1828 | resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.5.tgz#4e484cd4de5a0bbbee18e46307710a8a81621878" 1829 | 1830 | strip-ansi@^3.0.0, strip-ansi@^3.0.1: 1831 | version "3.0.1" 1832 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" 1833 | dependencies: 1834 | ansi-regex "^2.0.0" 1835 | 1836 | strip-bom-stream@^1.0.0: 1837 | version "1.0.0" 1838 | resolved "https://registry.yarnpkg.com/strip-bom-stream/-/strip-bom-stream-1.0.0.tgz#e7144398577d51a6bed0fa1994fa05f43fd988ee" 1839 | dependencies: 1840 | first-chunk-stream "^1.0.0" 1841 | strip-bom "^2.0.0" 1842 | 1843 | strip-bom@^2.0.0: 1844 | version "2.0.0" 1845 | resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e" 1846 | dependencies: 1847 | is-utf8 "^0.2.0" 1848 | 1849 | strip-json-comments@~2.0.1: 1850 | version "2.0.1" 1851 | resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" 1852 | 1853 | supports-color@^2.0.0: 1854 | version "2.0.0" 1855 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" 1856 | 1857 | tar-pack@^3.4.0: 1858 | version "3.4.0" 1859 | resolved "https://registry.yarnpkg.com/tar-pack/-/tar-pack-3.4.0.tgz#23be2d7f671a8339376cbdb0b8fe3fdebf317984" 1860 | dependencies: 1861 | debug "^2.2.0" 1862 | fstream "^1.0.10" 1863 | fstream-ignore "^1.0.5" 1864 | once "^1.3.3" 1865 | readable-stream "^2.1.4" 1866 | rimraf "^2.5.1" 1867 | tar "^2.2.1" 1868 | uid-number "^0.0.6" 1869 | 1870 | tar@^2.2.1: 1871 | version "2.2.1" 1872 | resolved "https://registry.yarnpkg.com/tar/-/tar-2.2.1.tgz#8e4d2a256c0e2185c6b18ad694aec968b83cb1d1" 1873 | dependencies: 1874 | block-stream "*" 1875 | fstream "^1.0.2" 1876 | inherits "2" 1877 | 1878 | through2-filter@^2.0.0: 1879 | version "2.0.0" 1880 | resolved "https://registry.yarnpkg.com/through2-filter/-/through2-filter-2.0.0.tgz#60bc55a0dacb76085db1f9dae99ab43f83d622ec" 1881 | dependencies: 1882 | through2 "~2.0.0" 1883 | xtend "~4.0.0" 1884 | 1885 | through2@^0.6.0: 1886 | version "0.6.5" 1887 | resolved "https://registry.yarnpkg.com/through2/-/through2-0.6.5.tgz#41ab9c67b29d57209071410e1d7a7a968cd3ad48" 1888 | dependencies: 1889 | readable-stream ">=1.0.33-1 <1.1.0-0" 1890 | xtend ">=4.0.0 <4.1.0-0" 1891 | 1892 | through2@^2.0.0, through2@~2.0.0, through2@~2.0.1: 1893 | version "2.0.3" 1894 | resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.3.tgz#0004569b37c7c74ba39c43f3ced78d1ad94140be" 1895 | dependencies: 1896 | readable-stream "^2.1.5" 1897 | xtend "~4.0.1" 1898 | 1899 | through@~2.3.8: 1900 | version "2.3.8" 1901 | resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" 1902 | 1903 | tildify@^1.0.0: 1904 | version "1.2.0" 1905 | resolved "https://registry.yarnpkg.com/tildify/-/tildify-1.2.0.tgz#dcec03f55dca9b7aa3e5b04f21817eb56e63588a" 1906 | dependencies: 1907 | os-homedir "^1.0.0" 1908 | 1909 | time-stamp@^1.0.0: 1910 | version "1.1.0" 1911 | resolved "https://registry.yarnpkg.com/time-stamp/-/time-stamp-1.1.0.tgz#764a5a11af50561921b133f3b44e618687e0f5c3" 1912 | 1913 | to-absolute-glob@^0.1.1: 1914 | version "0.1.1" 1915 | resolved "https://registry.yarnpkg.com/to-absolute-glob/-/to-absolute-glob-0.1.1.tgz#1cdfa472a9ef50c239ee66999b662ca0eb39937f" 1916 | dependencies: 1917 | extend-shallow "^2.0.1" 1918 | 1919 | tough-cookie@~2.3.0: 1920 | version "2.3.2" 1921 | resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.2.tgz#f081f76e4c85720e6c37a5faced737150d84072a" 1922 | dependencies: 1923 | punycode "^1.4.1" 1924 | 1925 | tunnel-agent@^0.6.0: 1926 | version "0.6.0" 1927 | resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" 1928 | dependencies: 1929 | safe-buffer "^5.0.1" 1930 | 1931 | tweetnacl@^0.14.3, tweetnacl@~0.14.0: 1932 | version "0.14.5" 1933 | resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" 1934 | 1935 | typescript@1.8.10, typescript@~1.8.10: 1936 | version "1.8.10" 1937 | resolved "https://registry.yarnpkg.com/typescript/-/typescript-1.8.10.tgz#b475d6e0dff0bf50f296e5ca6ef9fbb5c7320f1e" 1938 | 1939 | uid-number@^0.0.6: 1940 | version "0.0.6" 1941 | resolved "https://registry.yarnpkg.com/uid-number/-/uid-number-0.0.6.tgz#0ea10e8035e8eb5b8e4449f06da1c730663baa81" 1942 | 1943 | unc-path-regex@^0.1.0: 1944 | version "0.1.2" 1945 | resolved "https://registry.yarnpkg.com/unc-path-regex/-/unc-path-regex-0.1.2.tgz#e73dd3d7b0d7c5ed86fbac6b0ae7d8c6a69d50fa" 1946 | 1947 | undertaker-registry@^1.0.0: 1948 | version "1.0.0" 1949 | resolved "https://registry.yarnpkg.com/undertaker-registry/-/undertaker-registry-1.0.0.tgz#2da716c765999d8c94b9f9ed2c006df4923b052b" 1950 | 1951 | undertaker@^1.0.0: 1952 | version "1.1.0" 1953 | resolved "https://registry.yarnpkg.com/undertaker/-/undertaker-1.1.0.tgz#0ba00e6fb6a8afe1e928631565aaf6dba6111aeb" 1954 | dependencies: 1955 | arr-flatten "^1.0.1" 1956 | arr-map "^2.0.0" 1957 | bach "^1.0.0" 1958 | collection-map "^0.1.0" 1959 | es6-weak-map "^2.0.1" 1960 | last-run "^1.1.0" 1961 | object.defaults "^0.3.0" 1962 | object.reduce "^0.1.7" 1963 | undertaker-registry "^1.0.0" 1964 | 1965 | unique-stream@^2.0.2: 1966 | version "2.2.1" 1967 | resolved "https://registry.yarnpkg.com/unique-stream/-/unique-stream-2.2.1.tgz#5aa003cfbe94c5ff866c4e7d668bb1c4dbadb369" 1968 | dependencies: 1969 | json-stable-stringify "^1.0.0" 1970 | through2-filter "^2.0.0" 1971 | 1972 | user-home@^1.1.1: 1973 | version "1.1.1" 1974 | resolved "https://registry.yarnpkg.com/user-home/-/user-home-1.1.1.tgz#2b5be23a32b63a7c9deb8d0f28d485724a3df190" 1975 | 1976 | util-deprecate@~1.0.1: 1977 | version "1.0.2" 1978 | resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" 1979 | 1980 | uuid@^3.0.0: 1981 | version "3.1.0" 1982 | resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.1.0.tgz#3dd3d3e790abc24d7b0d3a034ffababe28ebbc04" 1983 | 1984 | v8flags@^2.0.9: 1985 | version "2.1.1" 1986 | resolved "https://registry.yarnpkg.com/v8flags/-/v8flags-2.1.1.tgz#aab1a1fa30d45f88dd321148875ac02c0b55e5b4" 1987 | dependencies: 1988 | user-home "^1.1.1" 1989 | 1990 | vali-date@^1.0.0: 1991 | version "1.0.0" 1992 | resolved "https://registry.yarnpkg.com/vali-date/-/vali-date-1.0.0.tgz#1b904a59609fb328ef078138420934f6b86709a6" 1993 | 1994 | verror@1.3.6: 1995 | version "1.3.6" 1996 | resolved "https://registry.yarnpkg.com/verror/-/verror-1.3.6.tgz#cff5df12946d297d2baaefaa2689e25be01c005c" 1997 | dependencies: 1998 | extsprintf "1.0.2" 1999 | 2000 | vinyl-fs@^2.0.0, vinyl-fs@~2.4.3: 2001 | version "2.4.4" 2002 | resolved "https://registry.yarnpkg.com/vinyl-fs/-/vinyl-fs-2.4.4.tgz#be6ff3270cb55dfd7d3063640de81f25d7532239" 2003 | dependencies: 2004 | duplexify "^3.2.0" 2005 | glob-stream "^5.3.2" 2006 | graceful-fs "^4.0.0" 2007 | gulp-sourcemaps "1.6.0" 2008 | is-valid-glob "^0.3.0" 2009 | lazystream "^1.0.0" 2010 | lodash.isequal "^4.0.0" 2011 | merge-stream "^1.0.0" 2012 | mkdirp "^0.5.0" 2013 | object-assign "^4.0.0" 2014 | readable-stream "^2.0.4" 2015 | strip-bom "^2.0.0" 2016 | strip-bom-stream "^1.0.0" 2017 | through2 "^2.0.0" 2018 | through2-filter "^2.0.0" 2019 | vali-date "^1.0.0" 2020 | vinyl "^1.0.0" 2021 | 2022 | vinyl@^0.5.0: 2023 | version "0.5.3" 2024 | resolved "https://registry.yarnpkg.com/vinyl/-/vinyl-0.5.3.tgz#b0455b38fc5e0cf30d4325132e461970c2091cde" 2025 | dependencies: 2026 | clone "^1.0.0" 2027 | clone-stats "^0.0.1" 2028 | replace-ext "0.0.1" 2029 | 2030 | vinyl@^1.0.0: 2031 | version "1.2.0" 2032 | resolved "https://registry.yarnpkg.com/vinyl/-/vinyl-1.2.0.tgz#5c88036cf565e5df05558bfc911f8656df218884" 2033 | dependencies: 2034 | clone "^1.0.0" 2035 | clone-stats "^0.0.1" 2036 | replace-ext "0.0.1" 2037 | 2038 | which@^1.2.12: 2039 | version "1.2.14" 2040 | resolved "https://registry.yarnpkg.com/which/-/which-1.2.14.tgz#9a87c4378f03e827cecaf1acdf56c736c01c14e5" 2041 | dependencies: 2042 | isexe "^2.0.0" 2043 | 2044 | wide-align@^1.1.0: 2045 | version "1.1.2" 2046 | resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.2.tgz#571e0f1b0604636ebc0dfc21b0339bbe31341710" 2047 | dependencies: 2048 | string-width "^1.0.2" 2049 | 2050 | window-size@^0.1.4: 2051 | version "0.1.4" 2052 | resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.4.tgz#f8e1aa1ee5a53ec5bf151ffa09742a6ad7697876" 2053 | 2054 | wrap-ansi@^2.0.0: 2055 | version "2.1.0" 2056 | resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85" 2057 | dependencies: 2058 | string-width "^1.0.1" 2059 | strip-ansi "^3.0.1" 2060 | 2061 | wrappy@1: 2062 | version "1.0.2" 2063 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" 2064 | 2065 | wreck@^6.3.0: 2066 | version "6.3.0" 2067 | resolved "https://registry.yarnpkg.com/wreck/-/wreck-6.3.0.tgz#a1369769f07bbb62d6a378336a7871fc773c740b" 2068 | dependencies: 2069 | boom "2.x.x" 2070 | hoek "2.x.x" 2071 | 2072 | "xtend@>=4.0.0 <4.1.0-0", xtend@~4.0.0, xtend@~4.0.1: 2073 | version "4.0.1" 2074 | resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af" 2075 | 2076 | y18n@^3.2.0: 2077 | version "3.2.1" 2078 | resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41" 2079 | 2080 | yargs@^3.28.0: 2081 | version "3.32.0" 2082 | resolved "https://registry.yarnpkg.com/yargs/-/yargs-3.32.0.tgz#03088e9ebf9e756b69751611d2a5ef591482c995" 2083 | dependencies: 2084 | camelcase "^2.0.1" 2085 | cliui "^3.0.3" 2086 | decamelize "^1.1.1" 2087 | os-locale "^1.4.0" 2088 | string-width "^1.0.1" 2089 | window-size "^0.1.4" 2090 | y18n "^3.2.0" 2091 | --------------------------------------------------------------------------------