├── .gitignore ├── Gruntfile.js ├── LICENSE ├── README.md ├── bower.json ├── dist ├── unsplash-source.js └── unsplash-source.min.js ├── package-lock.json ├── package.json ├── src ├── banner.js ├── core.js └── polyfills.js └── tests └── urls.js /.gitignore: -------------------------------------------------------------------------------- 1 | /node_modules -------------------------------------------------------------------------------- /Gruntfile.js: -------------------------------------------------------------------------------- 1 | /* 2 | # Gruntfile 3 | =========== 4 | 5 | All up in your code building your javascripts and stuff. 6 | 7 | Packages used: 8 | 9 | - JSHint 10 | - Karma 11 | - Concat 12 | - Uglify 13 | 14 | */ 15 | 16 | var paths; 17 | 18 | paths = { 19 | src: function (subpath) { 20 | return "./src/" + subpath; 21 | }, 22 | dist: function (subpath) { 23 | return "./dist/" + subpath; 24 | }, 25 | tests: function (subpath) { 26 | return "./tests/" + subpath; 27 | } 28 | }; 29 | 30 | module.exports = function (grunt) { 31 | 32 | grunt.initConfig({ 33 | pkg: grunt.file.readJSON("package.json"), 34 | 35 | /* 36 | ## JS Hint 37 | https://github.com/gruntjs/grunt-contrib-jshint 38 | */ 39 | "jshint": { 40 | files: [ 41 | "Gruntfile.js", 42 | paths.src("core.js"), 43 | paths.tests("urls.js"), 44 | ], 45 | options: { 46 | globals: { 47 | console: true, 48 | module: true, 49 | } 50 | } 51 | }, 52 | 53 | /* 54 | ## Karma 55 | https://github.com/karma-runner/grunt-karma 56 | */ 57 | karma: { 58 | unit: { 59 | options: { 60 | files: [ 61 | paths.src("polyfills.js"), 62 | paths.src("core.js"), 63 | paths.tests("**/*.js"), 64 | ], 65 | singleRun: true, 66 | frameworks: ["jasmine"], 67 | browsers: ["PhantomJS"], 68 | } 69 | } 70 | }, 71 | 72 | /* 73 | ## Concat 74 | https://github.com/gruntjs/grunt-contrib-concat 75 | */ 76 | concat: { 77 | options: { 78 | stripBanners: false, 79 | banner: "/*! https://unsplash.com <%= pkg.name %> - v<%= pkg.version %> - " + 80 | "<%= grunt.template.today('yyyy-mm-dd') %> " + "\n\n" 81 | }, 82 | js: { 83 | src: [ 84 | paths.src("banner.js"), 85 | paths.src("polyfills.js"), 86 | paths.src("core.js"), 87 | ], 88 | dest: paths.dist("unsplash-source.js"), 89 | }, 90 | }, 91 | 92 | /* 93 | ## Uglify 94 | https://github.com/gruntjs/grunt-contrib-uglify 95 | */ 96 | uglify: { 97 | options: { 98 | stripBanners: true, 99 | banner: "/*! https://unsplash.com <%= pkg.name %> - v<%= pkg.version %> - " + 100 | "<%= grunt.template.today('yyyy-mm-dd') %> " + "*/\n\n" 101 | }, 102 | 103 | js: { 104 | files: [{ 105 | src: paths.dist("unsplash-source.js"), 106 | dest: paths.dist("unsplash-source.min.js") 107 | }], 108 | }, 109 | }, 110 | 111 | }); 112 | 113 | // Load development plugins 114 | grunt.loadNpmTasks("grunt-notify"); 115 | grunt.loadNpmTasks("grunt-contrib-jshint"); 116 | grunt.loadNpmTasks("grunt-contrib-concat"); 117 | grunt.loadNpmTasks("grunt-contrib-uglify"); 118 | grunt.loadNpmTasks('grunt-karma'); 119 | 120 | grunt.registerTask("build", ["concat", "uglify"]); 121 | grunt.registerTask("test", ["jshint", "karma"]); 122 | }; 123 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2015 Crew Labs Inc. 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. -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Unsplash Source JS 2 | 3 | A javascript wrapper for the [Unsplash Source API](https://source.unsplash.com/). Get random Unsplash photos by keyword, location, category, user, or ID. 4 | 5 | [ ![Codeship Status for CrewLabs/unsplash-source-js](https://codeship.com/projects/668ef1e0-6255-0133-355b-1af77e49650b/status?branch=master)](https://codeship.com/projects/112623) 6 | 7 | ## Usage 8 | 9 | Include `unsplash-source.js` or `unsplash-source.min.js` in your page: 10 | 11 | ```html 12 | 13 | ``` 14 | 15 | Then create the photo you want using any of the chainable methods below, calling `fetch` as the last step to return the photo's URL. 16 | 17 | Method | Arguments | Example | Description 18 | -------|-----------|---------|------------ 19 | `find`|`"publicId"`|`photo.find("oMpAz-DN-9I")`|Finds a photo by its ID 20 | `width`|`width`|`photo.width(2000)`|Sets the width in pixels 21 | `height`|`height`|`photo.height(2000)`|Sets the height in pixels 22 | `size`|`width, height`|`photo.size(1080,800)`|Shorthand for setting the width and height in pixels 23 | `randomize`|`null || "daily" || "weekly"`|`photo.randomize("weekly")`|Sets the randomization interval 24 | `fromUser`|`"username"`|`photo.fromUser("erondu")`|Limits to a specific photographer 25 | `fromCategory`|`"category"`|`photo.fromCategory("nature")`|Limits to a specific category 26 | `of`|`"keyword" || [arrayOfKeywords]`|`photo.of("dog")`|Limits to tags or locations matching the keywords 27 | `all`||`photo.all()`|Searches for all photos, instead of just featured photos 28 | `fetch`||`photo.fetch()`|Returns the configured URL. 29 | 30 | By default, the photos are [filtered to featured photos](https://unsplash.com/documentation#get-a-random-photo). To remove this filter, call `all`. We recommend using `all` when limiting photos to a specific keyword (using `of`) or limiting photos to specific photographers (using `fromUser`) to maximize the possiblity of a matching photo. 31 | 32 | Resize operations (`width`, `height`, `size`) maintain the aspect ratio of the original photo by cropping if necessary. 33 | 34 | *Note*: Not all methods are compatible with each other. For example, trying to randomize a specific photo doesn't make sense. The wrapper will ignore incompatible methods and only construct URLs compatible with the Unsplash Source API. 35 | 36 | ## Examples 37 | 38 | Get a random photo (the Unsplash Source API defaults to a width of 1080px): 39 | 40 | ```js 41 | var photo = new UnsplashPhoto(); 42 | 43 | photo.fetch(); // => "https://source.unsplash.com/random" 44 | ``` 45 | 46 | Get a random featured photo that rotates weekly, cropped to `800px` x `600px`: 47 | 48 | ```js 49 | var photo = new UnsplashPhoto(); 50 | 51 | photo.randomize("weekly") 52 | .size(800, 600) 53 | .fetch(); // => "https://source.unsplash.com/800x600/weekly" 54 | ``` 55 | 56 | Get a random photo from photographer [Jared Erondu](https://unsplash.com/erondu) cropped to `2048px` x `1200px`, that changes once a day: 57 | 58 | ```js 59 | var photo = new UnsplashPhoto(); 60 | 61 | photo.all() 62 | .fromUser("erondu") 63 | .width(2048) 64 | .height(1200) 65 | .randomize("daily") 66 | .fetch(); // => "https://source.unsplash.com/user/erondu/2048x1200/daily" 67 | ``` 68 | 69 | Get a random nature photo of trees and water from the 'all' feed, cropped to `1000px` x `1200px`: 70 | 71 | ```js 72 | var photo = new UnsplashPhoto(); 73 | 74 | photo.all() 75 | .fromCategory("nature") 76 | .of(["trees", "water"]) 77 | .size(1000, 1200) 78 | .fetch(); // => "https://source.unsplash.com/category/nature/1000x1200?trees,water" 79 | ``` 80 | 81 | Get a specific photo (the photo ID matches the photo ID from unsplash.com): 82 | 83 | ```js 84 | photo = new UnsplashPhoto(); 85 | 86 | photo.find("oMpAz-DN-9I") 87 | .fetch(); // => "https://source.unsplash.com/oMpAz-DN-9I" 88 | ``` 89 | 90 | ## Development 91 | 92 | To contribute, make sure [Node](https://nodejs.org/en/) and [NPM](https://www.npmjs.com/) are installed. Then: 93 | 94 | ```sh 95 | git clone .. 96 | 97 | npm install 98 | grunt test // => should all pass 99 | 100 | // make your changes to the `/src` folder 101 | // add tests to `/tests` 102 | 103 | grunt test // => should all pass 104 | 105 | grunt build // => creates a bundled version of the script 106 | 107 | git commit .. 108 | ``` 109 | -------------------------------------------------------------------------------- /bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "unsplash-source-js", 3 | "version": "1.0.0", 4 | "homepage": "https://source.unsplash.com/", 5 | "authors": [ 6 | "Unsplash " 7 | ], 8 | "description": "A javascript wrapper for Unsplash Source photos", 9 | "main": "dist/unsplash-source.js", 10 | "keywords": [ 11 | "unsplash", 12 | "source", 13 | "photos", 14 | "api", 15 | "wrapper", 16 | "embed" 17 | ], 18 | "license": "MIT", 19 | "ignore": [ 20 | "**/.*", 21 | "node_modules", 22 | "bower_components", 23 | "test", 24 | "tests" 25 | ] 26 | } 27 | -------------------------------------------------------------------------------- /dist/unsplash-source.js: -------------------------------------------------------------------------------- 1 | /*! https://unsplash.com unsplash-source-js - v1.0.0 - 2017-10-02 2 | 3 | $$\ $$\ $$\ $$\ 4 | $$ | $$ | $$ | $$ | 5 | $$ | $$ |$$$$$$$\ $$$$$$$\ $$$$$$\ $$ | $$$$$$\ $$$$$$$\ $$$$$$$\ 6 | $$ | $$ |$$ __$$\ $$ _____|$$ __$$\ $$ | \____$$\ $$ _____|$$ __$$\ 7 | $$ | $$ |$$ | $$ |\$$$$$$\ $$ / $$ |$$ | $$$$$$$ |\$$$$$$\ $$ | $$ | 8 | $$ | $$ |$$ | $$ | \____$$\ $$ | $$ |$$ |$$ __$$ | \____$$\ $$ | $$ | 9 | \$$$$$$ |$$ | $$ |$$$$$$$ |$$$$$$$ |$$ |\$$$$$$$ |$$$$$$$ |$$ | $$ | 10 | \______/ \__| \__|\_______/ $$ ____/ \__| \_______|\_______/ \__| \__| 11 | $$ | 12 | $$ | 13 | \__| 14 | */ 15 | 16 | if (!Array.isArray) { 17 | Array.isArray = function(arg) { 18 | return Object.prototype.toString.call(arg) === '[object Array]'; 19 | }; 20 | } 21 | 22 | if (!String.prototype.trim) { 23 | String.prototype.trim = function () { 24 | return this.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, ''); 25 | }; 26 | } 27 | 28 | if (!Array.prototype.forEach) { 29 | 30 | Array.prototype.forEach = function(callback, thisArg) { 31 | 32 | var T, k; 33 | 34 | if (this == null) { 35 | throw new TypeError(' this is null or not defined'); 36 | } 37 | 38 | // 1. Let O be the result of calling ToObject passing the |this| value as the argument. 39 | var O = Object(this); 40 | 41 | // 2. Let lenValue be the result of calling the Get internal method of O with the argument "length". 42 | // 3. Let len be ToUint32(lenValue). 43 | var len = O.length >>> 0; 44 | 45 | // 4. If IsCallable(callback) is false, throw a TypeError exception. 46 | // See: http://es5.github.com/#x9.11 47 | if (typeof callback !== "function") { 48 | throw new TypeError(callback + ' is not a function'); 49 | } 50 | 51 | // 5. If thisArg was supplied, let T be thisArg; else let T be undefined. 52 | if (arguments.length > 1) { 53 | T = thisArg; 54 | } 55 | 56 | // 6. Let k be 0 57 | k = 0; 58 | 59 | // 7. Repeat, while k < len 60 | while (k < len) { 61 | 62 | var kValue; 63 | 64 | // a. Let Pk be ToString(k). 65 | // This is implicit for LHS operands of the in operator 66 | // b. Let kPresent be the result of calling the HasProperty internal method of O with argument Pk. 67 | // This step can be combined with c 68 | // c. If kPresent is true, then 69 | if (k in O) { 70 | 71 | // i. Let kValue be the result of calling the Get internal method of O with argument Pk. 72 | kValue = O[k]; 73 | 74 | // ii. Call the Call internal method of callback with T as the this value and 75 | // argument list containing kValue, k, and O. 76 | callback.call(T, kValue, k, O); 77 | } 78 | // d. Increase k by 1. 79 | k++; 80 | } 81 | // 8. return undefined 82 | }; 83 | } 84 | 85 | (function (root, undefined) { 86 | "use strict"; 87 | 88 | var UnsplashPhoto = function () { 89 | this.version = "1.0.0"; 90 | this.url = "https://source.unsplash.com"; 91 | this.dimensions = {}; 92 | this.scope = "featured"; 93 | this.randomizationInterval = "perRequest"; 94 | 95 | return this; 96 | }; 97 | 98 | /** 99 | * Finds a photo by its specific public ID 100 | * @param {Int} id 101 | * @return {UnsplashPhoto} 102 | */ 103 | UnsplashPhoto.prototype.find = function (id) { 104 | this.id = id; 105 | 106 | return this; 107 | }; 108 | 109 | /** 110 | * Sets the width of the photo 111 | * 112 | * Note: crops if necessary to maintain the aspect ratio 113 | * 114 | * @param {Int} width 115 | * @return {UnsplashPhoto} 116 | */ 117 | UnsplashPhoto.prototype.width = function (width) { 118 | this.dimensions.width = width; 119 | 120 | return this; 121 | }; 122 | 123 | /** 124 | * Sets the height of the photo 125 | * 126 | * Note: crops if necessary to maintain the aspect ratio 127 | * 128 | * @param {Int} height 129 | * @return {UnsplashPhoto} 130 | */ 131 | UnsplashPhoto.prototype.height = function (height) { 132 | this.dimensions.height = height; 133 | 134 | return this; 135 | }; 136 | 137 | /** 138 | * Shorthand for setting the photo dimensions 139 | * 140 | * Note: crops if necessary to maintain the aspect ratio 141 | * 142 | * @param {Int} width 143 | * @param {Int} height (optional) 144 | * @return {UnsplashPhoto} 145 | */ 146 | UnsplashPhoto.prototype.size = function (width, height) { 147 | this.dimensions = { 148 | width: width, 149 | height: height || width 150 | }; 151 | 152 | return this; 153 | }; 154 | 155 | /** 156 | * Sets the randomization interval 157 | * 158 | * Note: only accepts three possible values (null, daily, or weekly) 159 | * @param {String} interval 160 | * @return {UnsplashPhoto} 161 | */ 162 | UnsplashPhoto.prototype.randomize = function (interval) { 163 | if (interval == "daily" || interval == "weekly") { 164 | this.randomizationInterval = interval; 165 | } else { 166 | this.randomizationInterval = "perRequest"; 167 | } 168 | 169 | return this; 170 | }; 171 | 172 | /** 173 | * Sets the scope to `all` (instead of `featured`) 174 | * @return {UnsplashPhoto} 175 | */ 176 | UnsplashPhoto.prototype.all = function () { 177 | this.scope = "all"; 178 | 179 | return this; 180 | }; 181 | 182 | /** 183 | * Limits the photo to having tags or locations matching the keywords 184 | * @param {[Array || String]} keywords 185 | * @return {UnsplashPhoto} 186 | */ 187 | UnsplashPhoto.prototype.of = function (keywords) { 188 | var sanitizedKeywords = []; 189 | 190 | // Handle a string of comma-separated keywords 191 | if (!Array.isArray(keywords)) { 192 | keywords = keywords.split(","); 193 | } 194 | 195 | // Remove any leading or trailing whitespace from each keyword 196 | keywords.forEach(function (keyword) { 197 | sanitizedKeywords.push(keyword.trim()); 198 | }); 199 | 200 | this.keywords = sanitizedKeywords.join(","); 201 | this.keywords = encodeURI(this.keywords); 202 | 203 | return this; 204 | }; 205 | 206 | /** 207 | * Limits the photos to a specific photographer 208 | * @param {String} username 209 | * @return {UnsplashPhoto} 210 | */ 211 | UnsplashPhoto.prototype.fromUser = function (username) { 212 | this.username = username; 213 | 214 | return this; 215 | }; 216 | 217 | /** 218 | * Limits the photos to a specific category 219 | * @param {String} category 220 | * @return {UnsplashPhoto} 221 | */ 222 | UnsplashPhoto.prototype.fromCategory = function (category) { 223 | this.category = category; 224 | 225 | return this; 226 | }; 227 | 228 | /** 229 | * Limits photos to a specific collection 230 | * @param {String} collectionId 231 | * @return {UnsplashPhoto} 232 | */ 233 | UnsplashPhoto.prototype.fromCollection = function (collectionId) { 234 | this.collection = collectionId; 235 | 236 | return this; 237 | }; 238 | 239 | /** 240 | * Returns true if the photo has dimensions set 241 | * @return {Boolean} 242 | */ 243 | UnsplashPhoto.prototype._hasDimensions = function () { 244 | return !!this.dimensions.width && !!this.dimensions.height; 245 | }; 246 | 247 | /** 248 | * Appends the photo dimensions to the URL 249 | * @return {String} the photo URL 250 | */ 251 | UnsplashPhoto.prototype._appendDimensions = function () { 252 | if (this._hasDimensions()) { 253 | this.url += "/" + this.dimensions.width + "x" + this.dimensions.height; 254 | } 255 | 256 | return this.url; 257 | }; 258 | 259 | /** 260 | * Appends the scope to the URL 261 | * @return {String} the photo URL 262 | */ 263 | UnsplashPhoto.prototype._appendScope = function () { 264 | if (this.scope == "all") { 265 | this.url += "/all"; 266 | } 267 | 268 | return this.url; 269 | }; 270 | 271 | /** 272 | * Appends the keywords to the URL 273 | * @return {String} the photo URL 274 | */ 275 | UnsplashPhoto.prototype._appendKeywords = function () { 276 | if (this.keywords) { 277 | this.url += "?" + this.keywords; 278 | } 279 | 280 | return this.url; 281 | }; 282 | 283 | /** 284 | * Appends the randomization interval to the URL 285 | * @param {Boolean} includeRandomPath include the `/random` path in the URL 286 | * @return {String} the photo URL 287 | */ 288 | UnsplashPhoto.prototype._appendRandomization = function (includeRandomPath) { 289 | if (includeRandomPath && this.randomizationInterval == "perRequest") { 290 | this.url += "/random"; 291 | } else if (this.randomizationInterval == "daily") { 292 | this.url += "/daily"; 293 | } else if (this.randomizationInterval == "weekly") { 294 | this.url += "/weekly"; 295 | } 296 | 297 | return this.url; 298 | }; 299 | 300 | /** 301 | * Creates the URL based on the previous actions 302 | * @return {String} the photo URL 303 | */ 304 | UnsplashPhoto.prototype.fetch = function () { 305 | if (!!this.id) { 306 | this.url += "/" + this.id; 307 | this._appendDimensions(); 308 | return this.url; 309 | 310 | } else if (!!this.username) { 311 | this.url += "/user/" + this.username; 312 | this._appendScope(); 313 | this._appendDimensions(); 314 | this._appendRandomization(false); 315 | this._appendKeywords(); 316 | return this.url; 317 | 318 | } else if (!!this.category) { 319 | this.url += "/category/" + this.category; 320 | this._appendScope(); 321 | this._appendDimensions(); 322 | this._appendRandomization(false); 323 | this._appendKeywords(); 324 | return this.url; 325 | 326 | } else if (!!this.collection) { 327 | this.url += "/collection/" + this.category; 328 | this._appendScope(); 329 | this._appendDimensions(); 330 | this._appendRandomization(false); 331 | this._appendKeywords(); 332 | return this.url; 333 | 334 | } else { 335 | this._appendScope(); 336 | this._appendDimensions(); 337 | this._appendRandomization(true); 338 | this._appendKeywords(); 339 | return this.url; 340 | 341 | } 342 | }; 343 | 344 | root.UnsplashPhoto = UnsplashPhoto; 345 | 346 | })(this); 347 | -------------------------------------------------------------------------------- /dist/unsplash-source.min.js: -------------------------------------------------------------------------------- 1 | /*! https://unsplash.com unsplash-source-js - v1.0.0 - 2017-10-02 */ 2 | 3 | Array.isArray||(Array.isArray=function(a){return"[object Array]"===Object.prototype.toString.call(a)}),String.prototype.trim||(String.prototype.trim=function(){return this.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,"")}),Array.prototype.forEach||(Array.prototype.forEach=function(a,b){var c,d;if(null==this)throw new TypeError(" this is null or not defined");var e=Object(this),f=e.length>>>0;if("function"!=typeof a)throw new TypeError(a+" is not a function");for(arguments.length>1&&(c=b),d=0;f>d;){var g;d in e&&(g=e[d],a.call(c,g,d,e)),d++}}),function(a,b){"use strict";var c=function(){return this.version="1.0.0",this.url="https://source.unsplash.com",this.dimensions={},this.scope="featured",this.randomizationInterval="perRequest",this};c.prototype.find=function(a){return this.id=a,this},c.prototype.width=function(a){return this.dimensions.width=a,this},c.prototype.height=function(a){return this.dimensions.height=a,this},c.prototype.size=function(a,b){return this.dimensions={width:a,height:b||a},this},c.prototype.randomize=function(a){return"daily"==a||"weekly"==a?this.randomizationInterval=a:this.randomizationInterval="perRequest",this},c.prototype.all=function(){return this.scope="all",this},c.prototype.of=function(a){var b=[];return Array.isArray(a)||(a=a.split(",")),a.forEach(function(a){b.push(a.trim())}),this.keywords=b.join(","),this.keywords=encodeURI(this.keywords),this},c.prototype.fromUser=function(a){return this.username=a,this},c.prototype.fromCategory=function(a){return this.category=a,this},c.prototype.fromCollection=function(a){return this.collection=a,this},c.prototype._hasDimensions=function(){return!!this.dimensions.width&&!!this.dimensions.height},c.prototype._appendDimensions=function(){return this._hasDimensions()&&(this.url+="/"+this.dimensions.width+"x"+this.dimensions.height),this.url},c.prototype._appendScope=function(){return"all"==this.scope&&(this.url+="/all"),this.url},c.prototype._appendKeywords=function(){return this.keywords&&(this.url+="?"+this.keywords),this.url},c.prototype._appendRandomization=function(a){return a&&"perRequest"==this.randomizationInterval?this.url+="/random":"daily"==this.randomizationInterval?this.url+="/daily":"weekly"==this.randomizationInterval&&(this.url+="/weekly"),this.url},c.prototype.fetch=function(){return this.id?(this.url+="/"+this.id,this._appendDimensions(),this.url):this.username?(this.url+="/user/"+this.username,this._appendScope(),this._appendDimensions(),this._appendRandomization(!1),this._appendKeywords(),this.url):this.category?(this.url+="/category/"+this.category,this._appendScope(),this._appendDimensions(),this._appendRandomization(!1),this._appendKeywords(),this.url):this.collection?(this.url+="/collection/"+this.category,this._appendScope(),this._appendDimensions(),this._appendRandomization(!1),this._appendKeywords(),this.url):(this._appendScope(),this._appendDimensions(),this._appendRandomization(!0),this._appendKeywords(),this.url)},a.UnsplashPhoto=c}(this); -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "unsplash-source-js", 3 | "version": "1.0.0", 4 | "lockfileVersion": 1, 5 | "requires": true, 6 | "dependencies": { 7 | "abbrev": { 8 | "version": "1.1.1", 9 | "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", 10 | "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", 11 | "dev": true 12 | }, 13 | "accepts": { 14 | "version": "1.3.3", 15 | "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.3.tgz", 16 | "integrity": "sha1-w8p0NJOGSMPg2cHjKN1otiLChMo=", 17 | "dev": true, 18 | "requires": { 19 | "mime-types": "2.1.17", 20 | "negotiator": "0.6.1" 21 | } 22 | }, 23 | "after": { 24 | "version": "0.8.2", 25 | "resolved": "https://registry.npmjs.org/after/-/after-0.8.2.tgz", 26 | "integrity": "sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8=", 27 | "dev": true 28 | }, 29 | "amdefine": { 30 | "version": "1.0.1", 31 | "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", 32 | "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=", 33 | "dev": true 34 | }, 35 | "ansi-regex": { 36 | "version": "0.2.1", 37 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-0.2.1.tgz", 38 | "integrity": "sha1-DY6UaWej2BQ/k+JOKYUl/BsiNfk=", 39 | "dev": true 40 | }, 41 | "ansi-styles": { 42 | "version": "1.1.0", 43 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-1.1.0.tgz", 44 | "integrity": "sha1-6uy/Zs1waIJ2Cy9GkVgrj1XXp94=", 45 | "dev": true 46 | }, 47 | "anymatch": { 48 | "version": "1.3.2", 49 | "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.2.tgz", 50 | "integrity": "sha512-0XNayC8lTHQ2OI8aljNCN3sSx6hsr/1+rlcDAotXJR7C1oZZHCNsfpbKwMjRA3Uqb5tF1Rae2oloTr4xpq+WjA==", 51 | "dev": true, 52 | "requires": { 53 | "micromatch": "2.3.11", 54 | "normalize-path": "2.1.1" 55 | } 56 | }, 57 | "argparse": { 58 | "version": "0.1.16", 59 | "resolved": "https://registry.npmjs.org/argparse/-/argparse-0.1.16.tgz", 60 | "integrity": "sha1-z9AeD7uj1srtBJ+9dY1A9lGW9Xw=", 61 | "dev": true, 62 | "requires": { 63 | "underscore": "1.7.0", 64 | "underscore.string": "2.4.0" 65 | }, 66 | "dependencies": { 67 | "underscore.string": { 68 | "version": "2.4.0", 69 | "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-2.4.0.tgz", 70 | "integrity": "sha1-jN2PusTi0uoefi6Al8QvRCKA+Fs=", 71 | "dev": true 72 | } 73 | } 74 | }, 75 | "arr-diff": { 76 | "version": "2.0.0", 77 | "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", 78 | "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", 79 | "dev": true, 80 | "requires": { 81 | "arr-flatten": "1.1.0" 82 | } 83 | }, 84 | "arr-flatten": { 85 | "version": "1.1.0", 86 | "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", 87 | "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", 88 | "dev": true 89 | }, 90 | "array-find-index": { 91 | "version": "1.0.2", 92 | "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", 93 | "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=", 94 | "dev": true 95 | }, 96 | "array-slice": { 97 | "version": "0.2.3", 98 | "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-0.2.3.tgz", 99 | "integrity": "sha1-3Tz7gO15c6dRF82sabC5nshhhvU=", 100 | "dev": true 101 | }, 102 | "array-unique": { 103 | "version": "0.2.1", 104 | "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", 105 | "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", 106 | "dev": true 107 | }, 108 | "arraybuffer.slice": { 109 | "version": "0.0.6", 110 | "resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.6.tgz", 111 | "integrity": "sha1-8zshWfBTKj8xB6JywMz70a0peco=", 112 | "dev": true 113 | }, 114 | "asn1": { 115 | "version": "0.2.3", 116 | "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz", 117 | "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=", 118 | "dev": true 119 | }, 120 | "assert-plus": { 121 | "version": "0.2.0", 122 | "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz", 123 | "integrity": "sha1-104bh+ev/A24qttwIfP+SBAasjQ=", 124 | "dev": true 125 | }, 126 | "async": { 127 | "version": "0.1.22", 128 | "resolved": "https://registry.npmjs.org/async/-/async-0.1.22.tgz", 129 | "integrity": "sha1-D8GqoIig4+8Ovi2IMbqw3PiEUGE=", 130 | "dev": true 131 | }, 132 | "async-each": { 133 | "version": "1.0.1", 134 | "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz", 135 | "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0=", 136 | "dev": true 137 | }, 138 | "aws-sign2": { 139 | "version": "0.6.0", 140 | "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz", 141 | "integrity": "sha1-FDQt0428yU0OW4fXY81jYSwOeU8=", 142 | "dev": true 143 | }, 144 | "backo2": { 145 | "version": "1.0.2", 146 | "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz", 147 | "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc=", 148 | "dev": true 149 | }, 150 | "balanced-match": { 151 | "version": "1.0.0", 152 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", 153 | "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", 154 | "dev": true 155 | }, 156 | "base64-arraybuffer": { 157 | "version": "0.1.5", 158 | "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz", 159 | "integrity": "sha1-c5JncZI7Whl0etZmqlzUv5xunOg=", 160 | "dev": true 161 | }, 162 | "base64id": { 163 | "version": "1.0.0", 164 | "resolved": "https://registry.npmjs.org/base64id/-/base64id-1.0.0.tgz", 165 | "integrity": "sha1-R2iMuZu2gE8OBtPnY7HDLlfY5rY=", 166 | "dev": true 167 | }, 168 | "batch": { 169 | "version": "0.5.3", 170 | "resolved": "https://registry.npmjs.org/batch/-/batch-0.5.3.tgz", 171 | "integrity": "sha1-PzQU84AyF0O/wQQvmoP/HVgk1GQ=", 172 | "dev": true 173 | }, 174 | "bcrypt-pbkdf": { 175 | "version": "1.0.1", 176 | "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz", 177 | "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=", 178 | "dev": true, 179 | "optional": true, 180 | "requires": { 181 | "tweetnacl": "0.14.5" 182 | } 183 | }, 184 | "better-assert": { 185 | "version": "1.0.2", 186 | "resolved": "https://registry.npmjs.org/better-assert/-/better-assert-1.0.2.tgz", 187 | "integrity": "sha1-QIZrnhueC1W0gYlDEeaPr/rrxSI=", 188 | "dev": true, 189 | "requires": { 190 | "callsite": "1.0.0" 191 | } 192 | }, 193 | "binary-extensions": { 194 | "version": "1.10.0", 195 | "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.10.0.tgz", 196 | "integrity": "sha1-muuabF6IY4qtFx4Wf1kAq+JINdA=", 197 | "dev": true 198 | }, 199 | "bl": { 200 | "version": "1.0.3", 201 | "resolved": "https://registry.npmjs.org/bl/-/bl-1.0.3.tgz", 202 | "integrity": "sha1-/FQhoo/UImA2w7OJGmaiW8ZNIm4=", 203 | "dev": true, 204 | "requires": { 205 | "readable-stream": "2.0.6" 206 | }, 207 | "dependencies": { 208 | "isarray": { 209 | "version": "1.0.0", 210 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", 211 | "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", 212 | "dev": true 213 | }, 214 | "readable-stream": { 215 | "version": "2.0.6", 216 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz", 217 | "integrity": "sha1-j5A0HmilPMySh4jaz80Rs265t44=", 218 | "dev": true, 219 | "requires": { 220 | "core-util-is": "1.0.2", 221 | "inherits": "2.0.3", 222 | "isarray": "1.0.0", 223 | "process-nextick-args": "1.0.7", 224 | "string_decoder": "0.10.31", 225 | "util-deprecate": "1.0.2" 226 | } 227 | } 228 | } 229 | }, 230 | "blob": { 231 | "version": "0.0.4", 232 | "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.4.tgz", 233 | "integrity": "sha1-vPEwUspURj8w+fx+lbmkdjCpSSE=", 234 | "dev": true 235 | }, 236 | "bluebird": { 237 | "version": "2.11.0", 238 | "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-2.11.0.tgz", 239 | "integrity": "sha1-U0uQM8AiyVecVro7Plpcqvu2UOE=", 240 | "dev": true 241 | }, 242 | "body-parser": { 243 | "version": "1.18.2", 244 | "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.2.tgz", 245 | "integrity": "sha1-h2eKGdhLR9hZuDGZvVm84iKxBFQ=", 246 | "dev": true, 247 | "requires": { 248 | "bytes": "3.0.0", 249 | "content-type": "1.0.4", 250 | "debug": "2.6.9", 251 | "depd": "1.1.1", 252 | "http-errors": "1.6.2", 253 | "iconv-lite": "0.4.19", 254 | "on-finished": "2.3.0", 255 | "qs": "6.5.1", 256 | "raw-body": "2.3.2", 257 | "type-is": "1.6.15" 258 | }, 259 | "dependencies": { 260 | "iconv-lite": { 261 | "version": "0.4.19", 262 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz", 263 | "integrity": "sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ==", 264 | "dev": true 265 | } 266 | } 267 | }, 268 | "boom": { 269 | "version": "2.10.1", 270 | "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz", 271 | "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=", 272 | "dev": true, 273 | "requires": { 274 | "hoek": "2.16.3" 275 | } 276 | }, 277 | "brace-expansion": { 278 | "version": "1.1.8", 279 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz", 280 | "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=", 281 | "dev": true, 282 | "requires": { 283 | "balanced-match": "1.0.0", 284 | "concat-map": "0.0.1" 285 | } 286 | }, 287 | "braces": { 288 | "version": "1.8.5", 289 | "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", 290 | "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", 291 | "dev": true, 292 | "requires": { 293 | "expand-range": "1.8.2", 294 | "preserve": "0.2.0", 295 | "repeat-element": "1.1.2" 296 | } 297 | }, 298 | "browserify-zlib": { 299 | "version": "0.1.4", 300 | "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.1.4.tgz", 301 | "integrity": "sha1-uzX4pRn2AOD6a4SFJByXnQFB+y0=", 302 | "dev": true, 303 | "requires": { 304 | "pako": "0.2.9" 305 | } 306 | }, 307 | "builtin-modules": { 308 | "version": "1.1.1", 309 | "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", 310 | "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", 311 | "dev": true 312 | }, 313 | "bytes": { 314 | "version": "3.0.0", 315 | "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", 316 | "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=", 317 | "dev": true 318 | }, 319 | "callsite": { 320 | "version": "1.0.0", 321 | "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz", 322 | "integrity": "sha1-KAOY5dZkvXQDi28JBRU+borxvCA=", 323 | "dev": true 324 | }, 325 | "camelcase": { 326 | "version": "2.1.1", 327 | "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", 328 | "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=", 329 | "dev": true 330 | }, 331 | "camelcase-keys": { 332 | "version": "2.1.0", 333 | "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", 334 | "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=", 335 | "dev": true, 336 | "requires": { 337 | "camelcase": "2.1.1", 338 | "map-obj": "1.0.1" 339 | } 340 | }, 341 | "caseless": { 342 | "version": "0.11.0", 343 | "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.11.0.tgz", 344 | "integrity": "sha1-cVuW6phBWTzDMGeSP17GDr2k99c=", 345 | "dev": true 346 | }, 347 | "chalk": { 348 | "version": "0.5.1", 349 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-0.5.1.tgz", 350 | "integrity": "sha1-Zjs6ZItotV0EaQ1JFnqoN4WPIXQ=", 351 | "dev": true, 352 | "requires": { 353 | "ansi-styles": "1.1.0", 354 | "escape-string-regexp": "1.0.5", 355 | "has-ansi": "0.1.0", 356 | "strip-ansi": "0.3.0", 357 | "supports-color": "0.2.0" 358 | } 359 | }, 360 | "chokidar": { 361 | "version": "1.7.0", 362 | "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-1.7.0.tgz", 363 | "integrity": "sha1-eY5ol3gVHIB2tLNg5e3SjNortGg=", 364 | "dev": true, 365 | "requires": { 366 | "anymatch": "1.3.2", 367 | "async-each": "1.0.1", 368 | "glob-parent": "2.0.0", 369 | "inherits": "2.0.3", 370 | "is-binary-path": "1.0.1", 371 | "is-glob": "2.0.1", 372 | "path-is-absolute": "1.0.1", 373 | "readdirp": "2.1.0" 374 | } 375 | }, 376 | "cli": { 377 | "version": "0.6.6", 378 | "resolved": "https://registry.npmjs.org/cli/-/cli-0.6.6.tgz", 379 | "integrity": "sha1-Aq1Eo4Cr8nraxebwzdewQ9dMU+M=", 380 | "dev": true, 381 | "requires": { 382 | "exit": "0.1.2", 383 | "glob": "3.2.11" 384 | }, 385 | "dependencies": { 386 | "glob": { 387 | "version": "3.2.11", 388 | "resolved": "https://registry.npmjs.org/glob/-/glob-3.2.11.tgz", 389 | "integrity": "sha1-Spc/Y1uRkPcV0QmH1cAP0oFevj0=", 390 | "dev": true, 391 | "requires": { 392 | "inherits": "2.0.3", 393 | "minimatch": "0.3.0" 394 | } 395 | }, 396 | "minimatch": { 397 | "version": "0.3.0", 398 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.3.0.tgz", 399 | "integrity": "sha1-J12O2qxPG7MyZHIInnlJyDlGmd0=", 400 | "dev": true, 401 | "requires": { 402 | "lru-cache": "2.7.3", 403 | "sigmund": "1.0.1" 404 | } 405 | } 406 | } 407 | }, 408 | "coffee-script": { 409 | "version": "1.3.3", 410 | "resolved": "https://registry.npmjs.org/coffee-script/-/coffee-script-1.3.3.tgz", 411 | "integrity": "sha1-FQ1rTLUiiUNp7+1qIQHCC8f0pPQ=", 412 | "dev": true 413 | }, 414 | "colors": { 415 | "version": "0.6.2", 416 | "resolved": "https://registry.npmjs.org/colors/-/colors-0.6.2.tgz", 417 | "integrity": "sha1-JCP+ZnisDF2uiFLl0OW+CMmXq8w=", 418 | "dev": true 419 | }, 420 | "combined-stream": { 421 | "version": "1.0.5", 422 | "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz", 423 | "integrity": "sha1-k4NwpXtKUd6ix3wV1cX9+JUWQAk=", 424 | "dev": true, 425 | "requires": { 426 | "delayed-stream": "1.0.0" 427 | } 428 | }, 429 | "commander": { 430 | "version": "2.11.0", 431 | "resolved": "https://registry.npmjs.org/commander/-/commander-2.11.0.tgz", 432 | "integrity": "sha512-b0553uYA5YAEGgyYIGYROzKQ7X5RAqedkfjiZxwi0kL1g3bOaBNNZfYkzt/CL0umgD5wc9Jec2FbB98CjkMRvQ==", 433 | "dev": true 434 | }, 435 | "component-bind": { 436 | "version": "1.0.0", 437 | "resolved": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz", 438 | "integrity": "sha1-AMYIq33Nk4l8AAllGx06jh5zu9E=", 439 | "dev": true 440 | }, 441 | "component-emitter": { 442 | "version": "1.1.2", 443 | "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.1.2.tgz", 444 | "integrity": "sha1-KWWU8nU9qmOZbSrwjRWpURbJrsM=", 445 | "dev": true 446 | }, 447 | "component-inherit": { 448 | "version": "0.0.3", 449 | "resolved": "https://registry.npmjs.org/component-inherit/-/component-inherit-0.0.3.tgz", 450 | "integrity": "sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM=", 451 | "dev": true 452 | }, 453 | "concat-map": { 454 | "version": "0.0.1", 455 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 456 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", 457 | "dev": true 458 | }, 459 | "concat-stream": { 460 | "version": "1.6.0", 461 | "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.0.tgz", 462 | "integrity": "sha1-CqxmL9Ur54lk1VMvaUeE5wEQrPc=", 463 | "dev": true, 464 | "requires": { 465 | "inherits": "2.0.3", 466 | "readable-stream": "2.3.3", 467 | "typedarray": "0.0.6" 468 | }, 469 | "dependencies": { 470 | "isarray": { 471 | "version": "1.0.0", 472 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", 473 | "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", 474 | "dev": true 475 | }, 476 | "readable-stream": { 477 | "version": "2.3.3", 478 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", 479 | "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==", 480 | "dev": true, 481 | "requires": { 482 | "core-util-is": "1.0.2", 483 | "inherits": "2.0.3", 484 | "isarray": "1.0.0", 485 | "process-nextick-args": "1.0.7", 486 | "safe-buffer": "5.1.1", 487 | "string_decoder": "1.0.3", 488 | "util-deprecate": "1.0.2" 489 | } 490 | }, 491 | "string_decoder": { 492 | "version": "1.0.3", 493 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", 494 | "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", 495 | "dev": true, 496 | "requires": { 497 | "safe-buffer": "5.1.1" 498 | } 499 | } 500 | } 501 | }, 502 | "connect": { 503 | "version": "3.6.5", 504 | "resolved": "https://registry.npmjs.org/connect/-/connect-3.6.5.tgz", 505 | "integrity": "sha1-+43ee6B2OHfQ7J352sC0tA5yx9o=", 506 | "dev": true, 507 | "requires": { 508 | "debug": "2.6.9", 509 | "finalhandler": "1.0.6", 510 | "parseurl": "1.3.2", 511 | "utils-merge": "1.0.1" 512 | } 513 | }, 514 | "console-browserify": { 515 | "version": "1.1.0", 516 | "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz", 517 | "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=", 518 | "dev": true, 519 | "requires": { 520 | "date-now": "0.1.4" 521 | } 522 | }, 523 | "content-type": { 524 | "version": "1.0.4", 525 | "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", 526 | "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", 527 | "dev": true 528 | }, 529 | "cookie": { 530 | "version": "0.3.1", 531 | "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", 532 | "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=", 533 | "dev": true 534 | }, 535 | "core-js": { 536 | "version": "2.5.1", 537 | "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.1.tgz", 538 | "integrity": "sha1-rmh03GaTd4m4B1T/VCjfZoGcpQs=", 539 | "dev": true 540 | }, 541 | "core-util-is": { 542 | "version": "1.0.2", 543 | "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", 544 | "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", 545 | "dev": true 546 | }, 547 | "cryptiles": { 548 | "version": "2.0.5", 549 | "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz", 550 | "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=", 551 | "dev": true, 552 | "requires": { 553 | "boom": "2.10.1" 554 | } 555 | }, 556 | "currently-unhandled": { 557 | "version": "0.4.1", 558 | "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", 559 | "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=", 560 | "dev": true, 561 | "requires": { 562 | "array-find-index": "1.0.2" 563 | } 564 | }, 565 | "custom-event": { 566 | "version": "1.0.1", 567 | "resolved": "https://registry.npmjs.org/custom-event/-/custom-event-1.0.1.tgz", 568 | "integrity": "sha1-XQKkaFCt8bSjF5RqOSj8y1v9BCU=", 569 | "dev": true 570 | }, 571 | "dashdash": { 572 | "version": "1.14.1", 573 | "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", 574 | "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", 575 | "dev": true, 576 | "requires": { 577 | "assert-plus": "1.0.0" 578 | }, 579 | "dependencies": { 580 | "assert-plus": { 581 | "version": "1.0.0", 582 | "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", 583 | "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", 584 | "dev": true 585 | } 586 | } 587 | }, 588 | "date-now": { 589 | "version": "0.1.4", 590 | "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz", 591 | "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=", 592 | "dev": true 593 | }, 594 | "dateformat": { 595 | "version": "1.0.2-1.2.3", 596 | "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-1.0.2-1.2.3.tgz", 597 | "integrity": "sha1-sCIMAt6YYXQztyhRz0fePfLNvuk=", 598 | "dev": true 599 | }, 600 | "debug": { 601 | "version": "2.6.9", 602 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 603 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 604 | "dev": true, 605 | "requires": { 606 | "ms": "2.0.0" 607 | } 608 | }, 609 | "decamelize": { 610 | "version": "1.2.0", 611 | "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", 612 | "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", 613 | "dev": true 614 | }, 615 | "delayed-stream": { 616 | "version": "1.0.0", 617 | "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", 618 | "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", 619 | "dev": true 620 | }, 621 | "depd": { 622 | "version": "1.1.1", 623 | "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.1.tgz", 624 | "integrity": "sha1-V4O04cRZ8G+lyif5kfPQbnoxA1k=", 625 | "dev": true 626 | }, 627 | "di": { 628 | "version": "0.0.1", 629 | "resolved": "https://registry.npmjs.org/di/-/di-0.0.1.tgz", 630 | "integrity": "sha1-gGZJMmzqp8qjMG112YXqJ0i6kTw=", 631 | "dev": true 632 | }, 633 | "dom-serialize": { 634 | "version": "2.2.1", 635 | "resolved": "https://registry.npmjs.org/dom-serialize/-/dom-serialize-2.2.1.tgz", 636 | "integrity": "sha1-ViromZ9Evl6jB29UGdzVnrQ6yVs=", 637 | "dev": true, 638 | "requires": { 639 | "custom-event": "1.0.1", 640 | "ent": "2.2.0", 641 | "extend": "3.0.1", 642 | "void-elements": "2.0.1" 643 | } 644 | }, 645 | "dom-serializer": { 646 | "version": "0.1.0", 647 | "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.0.tgz", 648 | "integrity": "sha1-BzxpdUbOB4DOI75KKOKT5AvDDII=", 649 | "dev": true, 650 | "requires": { 651 | "domelementtype": "1.1.3", 652 | "entities": "1.1.1" 653 | }, 654 | "dependencies": { 655 | "domelementtype": { 656 | "version": "1.1.3", 657 | "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.1.3.tgz", 658 | "integrity": "sha1-vSh3PiZCiBrsUVRJJCmcXNgiGFs=", 659 | "dev": true 660 | }, 661 | "entities": { 662 | "version": "1.1.1", 663 | "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.1.tgz", 664 | "integrity": "sha1-blwtClYhtdra7O+AuQ7ftc13cvA=", 665 | "dev": true 666 | } 667 | } 668 | }, 669 | "domelementtype": { 670 | "version": "1.3.0", 671 | "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.0.tgz", 672 | "integrity": "sha1-sXrtguirWeUt2cGbF1bg/BhyBMI=", 673 | "dev": true 674 | }, 675 | "domhandler": { 676 | "version": "2.3.0", 677 | "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.3.0.tgz", 678 | "integrity": "sha1-LeWaCCLVAn+r/28DLCsloqir5zg=", 679 | "dev": true, 680 | "requires": { 681 | "domelementtype": "1.3.0" 682 | } 683 | }, 684 | "domutils": { 685 | "version": "1.5.1", 686 | "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", 687 | "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", 688 | "dev": true, 689 | "requires": { 690 | "dom-serializer": "0.1.0", 691 | "domelementtype": "1.3.0" 692 | } 693 | }, 694 | "ecc-jsbn": { 695 | "version": "0.1.1", 696 | "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz", 697 | "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=", 698 | "dev": true, 699 | "optional": true, 700 | "requires": { 701 | "jsbn": "0.1.1" 702 | } 703 | }, 704 | "ee-first": { 705 | "version": "1.1.1", 706 | "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", 707 | "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", 708 | "dev": true 709 | }, 710 | "encodeurl": { 711 | "version": "1.0.1", 712 | "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.1.tgz", 713 | "integrity": "sha1-eePVhlU0aQn+bw9Fpd5oEDspTSA=", 714 | "dev": true 715 | }, 716 | "engine.io": { 717 | "version": "1.8.4", 718 | "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-1.8.4.tgz", 719 | "integrity": "sha1-d7zhK4Dl1gQpM3/sOw2vaR68kAM=", 720 | "dev": true, 721 | "requires": { 722 | "accepts": "1.3.3", 723 | "base64id": "1.0.0", 724 | "cookie": "0.3.1", 725 | "debug": "2.3.3", 726 | "engine.io-parser": "1.3.2", 727 | "ws": "1.1.4" 728 | }, 729 | "dependencies": { 730 | "debug": { 731 | "version": "2.3.3", 732 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", 733 | "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", 734 | "dev": true, 735 | "requires": { 736 | "ms": "0.7.2" 737 | } 738 | }, 739 | "ms": { 740 | "version": "0.7.2", 741 | "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", 742 | "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=", 743 | "dev": true 744 | } 745 | } 746 | }, 747 | "engine.io-client": { 748 | "version": "1.8.4", 749 | "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-1.8.4.tgz", 750 | "integrity": "sha1-n+hd7iWFPKa6viW9KtaHEIY+kcI=", 751 | "dev": true, 752 | "requires": { 753 | "component-emitter": "1.2.1", 754 | "component-inherit": "0.0.3", 755 | "debug": "2.3.3", 756 | "engine.io-parser": "1.3.2", 757 | "has-cors": "1.1.0", 758 | "indexof": "0.0.1", 759 | "parsejson": "0.0.3", 760 | "parseqs": "0.0.5", 761 | "parseuri": "0.0.5", 762 | "ws": "1.1.2", 763 | "xmlhttprequest-ssl": "1.5.3", 764 | "yeast": "0.1.2" 765 | }, 766 | "dependencies": { 767 | "component-emitter": { 768 | "version": "1.2.1", 769 | "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", 770 | "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", 771 | "dev": true 772 | }, 773 | "debug": { 774 | "version": "2.3.3", 775 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", 776 | "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", 777 | "dev": true, 778 | "requires": { 779 | "ms": "0.7.2" 780 | } 781 | }, 782 | "ms": { 783 | "version": "0.7.2", 784 | "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", 785 | "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=", 786 | "dev": true 787 | }, 788 | "ws": { 789 | "version": "1.1.2", 790 | "resolved": "https://registry.npmjs.org/ws/-/ws-1.1.2.tgz", 791 | "integrity": "sha1-iiRPoFJAHgjJiGz0SoUYnh/UBn8=", 792 | "dev": true, 793 | "requires": { 794 | "options": "0.0.6", 795 | "ultron": "1.0.2" 796 | } 797 | } 798 | } 799 | }, 800 | "engine.io-parser": { 801 | "version": "1.3.2", 802 | "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-1.3.2.tgz", 803 | "integrity": "sha1-k3sHnwAH0Ik+xW1GyyILjLQ1Igo=", 804 | "dev": true, 805 | "requires": { 806 | "after": "0.8.2", 807 | "arraybuffer.slice": "0.0.6", 808 | "base64-arraybuffer": "0.1.5", 809 | "blob": "0.0.4", 810 | "has-binary": "0.1.7", 811 | "wtf-8": "1.0.0" 812 | } 813 | }, 814 | "ent": { 815 | "version": "2.2.0", 816 | "resolved": "https://registry.npmjs.org/ent/-/ent-2.2.0.tgz", 817 | "integrity": "sha1-6WQhkyWiHQX0RGai9obtbOX13R0=", 818 | "dev": true 819 | }, 820 | "entities": { 821 | "version": "1.0.0", 822 | "resolved": "https://registry.npmjs.org/entities/-/entities-1.0.0.tgz", 823 | "integrity": "sha1-sph6o4ITR/zeZCsk/fyeT7cSvyY=", 824 | "dev": true 825 | }, 826 | "error-ex": { 827 | "version": "1.3.1", 828 | "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.1.tgz", 829 | "integrity": "sha1-+FWobOYa3E6GIcPNoh56dhLDqNw=", 830 | "dev": true, 831 | "requires": { 832 | "is-arrayish": "0.2.1" 833 | } 834 | }, 835 | "escape-html": { 836 | "version": "1.0.3", 837 | "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", 838 | "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", 839 | "dev": true 840 | }, 841 | "escape-string-regexp": { 842 | "version": "1.0.5", 843 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", 844 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", 845 | "dev": true 846 | }, 847 | "esprima": { 848 | "version": "1.0.4", 849 | "resolved": "https://registry.npmjs.org/esprima/-/esprima-1.0.4.tgz", 850 | "integrity": "sha1-n1V+CPw7TSbs6d00+Pv0drYlha0=", 851 | "dev": true 852 | }, 853 | "eventemitter2": { 854 | "version": "0.4.14", 855 | "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-0.4.14.tgz", 856 | "integrity": "sha1-j2G3XN4BKy6esoTUVFWDtWQ7Yas=", 857 | "dev": true 858 | }, 859 | "eventemitter3": { 860 | "version": "1.2.0", 861 | "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-1.2.0.tgz", 862 | "integrity": "sha1-HIaZHYFq0eUEdQ5zh0Ik7PO+xQg=", 863 | "dev": true 864 | }, 865 | "exit": { 866 | "version": "0.1.2", 867 | "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", 868 | "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", 869 | "dev": true 870 | }, 871 | "expand-braces": { 872 | "version": "0.1.2", 873 | "resolved": "https://registry.npmjs.org/expand-braces/-/expand-braces-0.1.2.tgz", 874 | "integrity": "sha1-SIsdHSRRyz06axks/AMPRMWFX+o=", 875 | "dev": true, 876 | "requires": { 877 | "array-slice": "0.2.3", 878 | "array-unique": "0.2.1", 879 | "braces": "0.1.5" 880 | }, 881 | "dependencies": { 882 | "braces": { 883 | "version": "0.1.5", 884 | "resolved": "https://registry.npmjs.org/braces/-/braces-0.1.5.tgz", 885 | "integrity": "sha1-wIVxEIUpHYt1/ddOqw+FlygHEeY=", 886 | "dev": true, 887 | "requires": { 888 | "expand-range": "0.1.1" 889 | } 890 | }, 891 | "expand-range": { 892 | "version": "0.1.1", 893 | "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-0.1.1.tgz", 894 | "integrity": "sha1-TLjtoJk8pW+k9B/ELzy7TMrf8EQ=", 895 | "dev": true, 896 | "requires": { 897 | "is-number": "0.1.1", 898 | "repeat-string": "0.2.2" 899 | } 900 | }, 901 | "is-number": { 902 | "version": "0.1.1", 903 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-0.1.1.tgz", 904 | "integrity": "sha1-aaevEWlj1HIG7JvZtIoUIW8eOAY=", 905 | "dev": true 906 | }, 907 | "repeat-string": { 908 | "version": "0.2.2", 909 | "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-0.2.2.tgz", 910 | "integrity": "sha1-x6jTI2BoNiBZp+RlH8aITosftK4=", 911 | "dev": true 912 | } 913 | } 914 | }, 915 | "expand-brackets": { 916 | "version": "0.1.5", 917 | "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", 918 | "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", 919 | "dev": true, 920 | "requires": { 921 | "is-posix-bracket": "0.1.1" 922 | } 923 | }, 924 | "expand-range": { 925 | "version": "1.8.2", 926 | "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz", 927 | "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=", 928 | "dev": true, 929 | "requires": { 930 | "fill-range": "2.2.3" 931 | } 932 | }, 933 | "extend": { 934 | "version": "3.0.1", 935 | "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", 936 | "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=", 937 | "dev": true 938 | }, 939 | "extglob": { 940 | "version": "0.3.2", 941 | "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", 942 | "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", 943 | "dev": true, 944 | "requires": { 945 | "is-extglob": "1.0.0" 946 | } 947 | }, 948 | "extract-zip": { 949 | "version": "1.5.0", 950 | "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.5.0.tgz", 951 | "integrity": "sha1-ksz22B73Cp+kwXRxFMzvbYaIpsQ=", 952 | "dev": true, 953 | "requires": { 954 | "concat-stream": "1.5.0", 955 | "debug": "0.7.4", 956 | "mkdirp": "0.5.0", 957 | "yauzl": "2.4.1" 958 | }, 959 | "dependencies": { 960 | "concat-stream": { 961 | "version": "1.5.0", 962 | "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.5.0.tgz", 963 | "integrity": "sha1-U/fUPFHF5D+ByP3QMyHGMb5o1hE=", 964 | "dev": true, 965 | "requires": { 966 | "inherits": "2.0.3", 967 | "readable-stream": "2.0.6", 968 | "typedarray": "0.0.6" 969 | } 970 | }, 971 | "debug": { 972 | "version": "0.7.4", 973 | "resolved": "https://registry.npmjs.org/debug/-/debug-0.7.4.tgz", 974 | "integrity": "sha1-BuHqgILCyxTjmAbiLi9vdX+Srzk=", 975 | "dev": true 976 | }, 977 | "isarray": { 978 | "version": "1.0.0", 979 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", 980 | "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", 981 | "dev": true 982 | }, 983 | "readable-stream": { 984 | "version": "2.0.6", 985 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz", 986 | "integrity": "sha1-j5A0HmilPMySh4jaz80Rs265t44=", 987 | "dev": true, 988 | "requires": { 989 | "core-util-is": "1.0.2", 990 | "inherits": "2.0.3", 991 | "isarray": "1.0.0", 992 | "process-nextick-args": "1.0.7", 993 | "string_decoder": "0.10.31", 994 | "util-deprecate": "1.0.2" 995 | } 996 | } 997 | } 998 | }, 999 | "extsprintf": { 1000 | "version": "1.3.0", 1001 | "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", 1002 | "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", 1003 | "dev": true 1004 | }, 1005 | "fd-slicer": { 1006 | "version": "1.0.1", 1007 | "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.0.1.tgz", 1008 | "integrity": "sha1-i1vL2ewyfFBBv5qwI/1nUPEXfmU=", 1009 | "dev": true, 1010 | "requires": { 1011 | "pend": "1.2.0" 1012 | } 1013 | }, 1014 | "figures": { 1015 | "version": "1.7.0", 1016 | "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", 1017 | "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=", 1018 | "dev": true, 1019 | "requires": { 1020 | "escape-string-regexp": "1.0.5", 1021 | "object-assign": "4.1.1" 1022 | } 1023 | }, 1024 | "filename-regex": { 1025 | "version": "2.0.1", 1026 | "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz", 1027 | "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=", 1028 | "dev": true 1029 | }, 1030 | "fill-range": { 1031 | "version": "2.2.3", 1032 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.3.tgz", 1033 | "integrity": "sha1-ULd9/X5Gm8dJJHCWNpn+eoSFpyM=", 1034 | "dev": true, 1035 | "requires": { 1036 | "is-number": "2.1.0", 1037 | "isobject": "2.1.0", 1038 | "randomatic": "1.1.7", 1039 | "repeat-element": "1.1.2", 1040 | "repeat-string": "1.6.1" 1041 | } 1042 | }, 1043 | "finalhandler": { 1044 | "version": "1.0.6", 1045 | "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.0.6.tgz", 1046 | "integrity": "sha1-AHrqM9Gk0+QgF/YkhIrVjSEvgU8=", 1047 | "dev": true, 1048 | "requires": { 1049 | "debug": "2.6.9", 1050 | "encodeurl": "1.0.1", 1051 | "escape-html": "1.0.3", 1052 | "on-finished": "2.3.0", 1053 | "parseurl": "1.3.2", 1054 | "statuses": "1.3.1", 1055 | "unpipe": "1.0.0" 1056 | } 1057 | }, 1058 | "find-up": { 1059 | "version": "1.1.2", 1060 | "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", 1061 | "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", 1062 | "dev": true, 1063 | "requires": { 1064 | "path-exists": "2.1.0", 1065 | "pinkie-promise": "2.0.1" 1066 | } 1067 | }, 1068 | "findup-sync": { 1069 | "version": "0.1.3", 1070 | "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-0.1.3.tgz", 1071 | "integrity": "sha1-fz56l7gjksZTvwZYm9hRkOk8NoM=", 1072 | "dev": true, 1073 | "requires": { 1074 | "glob": "3.2.11", 1075 | "lodash": "2.4.2" 1076 | }, 1077 | "dependencies": { 1078 | "glob": { 1079 | "version": "3.2.11", 1080 | "resolved": "https://registry.npmjs.org/glob/-/glob-3.2.11.tgz", 1081 | "integrity": "sha1-Spc/Y1uRkPcV0QmH1cAP0oFevj0=", 1082 | "dev": true, 1083 | "requires": { 1084 | "inherits": "2.0.3", 1085 | "minimatch": "0.3.0" 1086 | } 1087 | }, 1088 | "lodash": { 1089 | "version": "2.4.2", 1090 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-2.4.2.tgz", 1091 | "integrity": "sha1-+t2DS5aDBz2hebPq5tnA0VBT9z4=", 1092 | "dev": true 1093 | }, 1094 | "minimatch": { 1095 | "version": "0.3.0", 1096 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.3.0.tgz", 1097 | "integrity": "sha1-J12O2qxPG7MyZHIInnlJyDlGmd0=", 1098 | "dev": true, 1099 | "requires": { 1100 | "lru-cache": "2.7.3", 1101 | "sigmund": "1.0.1" 1102 | } 1103 | } 1104 | } 1105 | }, 1106 | "for-in": { 1107 | "version": "1.0.2", 1108 | "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", 1109 | "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", 1110 | "dev": true 1111 | }, 1112 | "for-own": { 1113 | "version": "0.1.5", 1114 | "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", 1115 | "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", 1116 | "dev": true, 1117 | "requires": { 1118 | "for-in": "1.0.2" 1119 | } 1120 | }, 1121 | "forever-agent": { 1122 | "version": "0.6.1", 1123 | "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", 1124 | "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", 1125 | "dev": true 1126 | }, 1127 | "form-data": { 1128 | "version": "1.0.1", 1129 | "resolved": "https://registry.npmjs.org/form-data/-/form-data-1.0.1.tgz", 1130 | "integrity": "sha1-rjFduaSQf6BlUCMEpm13M0de43w=", 1131 | "dev": true, 1132 | "requires": { 1133 | "async": "2.5.0", 1134 | "combined-stream": "1.0.5", 1135 | "mime-types": "2.1.17" 1136 | }, 1137 | "dependencies": { 1138 | "async": { 1139 | "version": "2.5.0", 1140 | "resolved": "https://registry.npmjs.org/async/-/async-2.5.0.tgz", 1141 | "integrity": "sha512-e+lJAJeNWuPCNyxZKOBdaJGyLGHugXVQtrAwtuAe2vhxTYxFTKE73p8JuTmdH0qdQZtDvI4dhJwjZc5zsfIsYw==", 1142 | "dev": true, 1143 | "requires": { 1144 | "lodash": "4.17.4" 1145 | } 1146 | }, 1147 | "lodash": { 1148 | "version": "4.17.4", 1149 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", 1150 | "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=", 1151 | "dev": true 1152 | } 1153 | } 1154 | }, 1155 | "fs-extra": { 1156 | "version": "0.26.7", 1157 | "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.26.7.tgz", 1158 | "integrity": "sha1-muH92UiXeY7at20JGM9C0MMYT6k=", 1159 | "dev": true, 1160 | "requires": { 1161 | "graceful-fs": "4.1.11", 1162 | "jsonfile": "2.4.0", 1163 | "klaw": "1.3.1", 1164 | "path-is-absolute": "1.0.1", 1165 | "rimraf": "2.2.8" 1166 | }, 1167 | "dependencies": { 1168 | "graceful-fs": { 1169 | "version": "4.1.11", 1170 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", 1171 | "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", 1172 | "dev": true 1173 | } 1174 | } 1175 | }, 1176 | "fs.realpath": { 1177 | "version": "1.0.0", 1178 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 1179 | "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", 1180 | "dev": true 1181 | }, 1182 | "generate-function": { 1183 | "version": "2.0.0", 1184 | "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.0.0.tgz", 1185 | "integrity": "sha1-aFj+fAlpt9TpCTM3ZHrHn2DfvnQ=", 1186 | "dev": true 1187 | }, 1188 | "generate-object-property": { 1189 | "version": "1.2.0", 1190 | "resolved": "https://registry.npmjs.org/generate-object-property/-/generate-object-property-1.2.0.tgz", 1191 | "integrity": "sha1-nA4cQDCM6AT0eDYYuTf6iPmdUNA=", 1192 | "dev": true, 1193 | "requires": { 1194 | "is-property": "1.0.2" 1195 | } 1196 | }, 1197 | "get-stdin": { 1198 | "version": "4.0.1", 1199 | "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", 1200 | "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=", 1201 | "dev": true 1202 | }, 1203 | "getobject": { 1204 | "version": "0.1.0", 1205 | "resolved": "https://registry.npmjs.org/getobject/-/getobject-0.1.0.tgz", 1206 | "integrity": "sha1-BHpEl4n6Fg0Bj1SG7ZEyC27HiFw=", 1207 | "dev": true 1208 | }, 1209 | "getpass": { 1210 | "version": "0.1.7", 1211 | "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", 1212 | "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", 1213 | "dev": true, 1214 | "requires": { 1215 | "assert-plus": "1.0.0" 1216 | }, 1217 | "dependencies": { 1218 | "assert-plus": { 1219 | "version": "1.0.0", 1220 | "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", 1221 | "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", 1222 | "dev": true 1223 | } 1224 | } 1225 | }, 1226 | "glob": { 1227 | "version": "3.1.21", 1228 | "resolved": "https://registry.npmjs.org/glob/-/glob-3.1.21.tgz", 1229 | "integrity": "sha1-0p4KBV3qUTj00H7UDomC6DwgZs0=", 1230 | "dev": true, 1231 | "requires": { 1232 | "graceful-fs": "1.2.3", 1233 | "inherits": "1.0.2", 1234 | "minimatch": "0.2.14" 1235 | }, 1236 | "dependencies": { 1237 | "inherits": { 1238 | "version": "1.0.2", 1239 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-1.0.2.tgz", 1240 | "integrity": "sha1-ykMJ2t7mtUzAuNJH6NfHoJdb3Js=", 1241 | "dev": true 1242 | } 1243 | } 1244 | }, 1245 | "glob-base": { 1246 | "version": "0.3.0", 1247 | "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", 1248 | "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", 1249 | "dev": true, 1250 | "requires": { 1251 | "glob-parent": "2.0.0", 1252 | "is-glob": "2.0.1" 1253 | } 1254 | }, 1255 | "glob-parent": { 1256 | "version": "2.0.0", 1257 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", 1258 | "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", 1259 | "dev": true, 1260 | "requires": { 1261 | "is-glob": "2.0.1" 1262 | } 1263 | }, 1264 | "graceful-fs": { 1265 | "version": "1.2.3", 1266 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-1.2.3.tgz", 1267 | "integrity": "sha1-FaSAaldUfLLS2/J/QuiajDRRs2Q=", 1268 | "dev": true 1269 | }, 1270 | "grunt": { 1271 | "version": "0.4.5", 1272 | "resolved": "https://registry.npmjs.org/grunt/-/grunt-0.4.5.tgz", 1273 | "integrity": "sha1-VpN81RlDJK3/bSB2MYMqnWuk5/A=", 1274 | "dev": true, 1275 | "requires": { 1276 | "async": "0.1.22", 1277 | "coffee-script": "1.3.3", 1278 | "colors": "0.6.2", 1279 | "dateformat": "1.0.2-1.2.3", 1280 | "eventemitter2": "0.4.14", 1281 | "exit": "0.1.2", 1282 | "findup-sync": "0.1.3", 1283 | "getobject": "0.1.0", 1284 | "glob": "3.1.21", 1285 | "grunt-legacy-log": "0.1.3", 1286 | "grunt-legacy-util": "0.2.0", 1287 | "hooker": "0.2.3", 1288 | "iconv-lite": "0.2.11", 1289 | "js-yaml": "2.0.5", 1290 | "lodash": "0.9.2", 1291 | "minimatch": "0.2.14", 1292 | "nopt": "1.0.10", 1293 | "rimraf": "2.2.8", 1294 | "underscore.string": "2.2.1", 1295 | "which": "1.0.9" 1296 | } 1297 | }, 1298 | "grunt-contrib-concat": { 1299 | "version": "0.5.1", 1300 | "resolved": "https://registry.npmjs.org/grunt-contrib-concat/-/grunt-contrib-concat-0.5.1.tgz", 1301 | "integrity": "sha1-lTxu/f39LBB6uchQd/LUsk0xzUk=", 1302 | "dev": true, 1303 | "requires": { 1304 | "chalk": "0.5.1", 1305 | "source-map": "0.3.0" 1306 | } 1307 | }, 1308 | "grunt-contrib-jshint": { 1309 | "version": "0.10.0", 1310 | "resolved": "https://registry.npmjs.org/grunt-contrib-jshint/-/grunt-contrib-jshint-0.10.0.tgz", 1311 | "integrity": "sha1-V+vMyofo8yevZkXYo8WG1IReTYE=", 1312 | "dev": true, 1313 | "requires": { 1314 | "hooker": "0.2.3", 1315 | "jshint": "2.5.11" 1316 | } 1317 | }, 1318 | "grunt-contrib-uglify": { 1319 | "version": "0.10.1", 1320 | "resolved": "https://registry.npmjs.org/grunt-contrib-uglify/-/grunt-contrib-uglify-0.10.1.tgz", 1321 | "integrity": "sha1-GRSYJd0ta9faPopQLkAySkOOLD4=", 1322 | "dev": true, 1323 | "requires": { 1324 | "chalk": "1.0.0", 1325 | "lodash": "3.2.0", 1326 | "maxmin": "1.0.1", 1327 | "uglify-js": "2.5.0", 1328 | "uri-path": "1.0.0" 1329 | }, 1330 | "dependencies": { 1331 | "ansi-regex": { 1332 | "version": "1.1.1", 1333 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-1.1.1.tgz", 1334 | "integrity": "sha1-QchHGUZGN15qGl0Qw8oFTvn8mA0=", 1335 | "dev": true 1336 | }, 1337 | "ansi-styles": { 1338 | "version": "2.2.1", 1339 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", 1340 | "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", 1341 | "dev": true 1342 | }, 1343 | "chalk": { 1344 | "version": "1.0.0", 1345 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.0.0.tgz", 1346 | "integrity": "sha1-s89O0P9Tl8mcdbj2edsvUoMfltw=", 1347 | "dev": true, 1348 | "requires": { 1349 | "ansi-styles": "2.2.1", 1350 | "escape-string-regexp": "1.0.5", 1351 | "has-ansi": "1.0.3", 1352 | "strip-ansi": "2.0.1", 1353 | "supports-color": "1.3.1" 1354 | } 1355 | }, 1356 | "has-ansi": { 1357 | "version": "1.0.3", 1358 | "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-1.0.3.tgz", 1359 | "integrity": "sha1-wLWxYV2eOCsP9nFp2We0JeSMpTg=", 1360 | "dev": true, 1361 | "requires": { 1362 | "ansi-regex": "1.1.1", 1363 | "get-stdin": "4.0.1" 1364 | } 1365 | }, 1366 | "lodash": { 1367 | "version": "3.2.0", 1368 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.2.0.tgz", 1369 | "integrity": "sha1-S/UKMkP5rrC6xBpV09WZBnWkYvs=", 1370 | "dev": true 1371 | }, 1372 | "strip-ansi": { 1373 | "version": "2.0.1", 1374 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-2.0.1.tgz", 1375 | "integrity": "sha1-32LBqpTtLxFOHQ8h/R1QSCt5pg4=", 1376 | "dev": true, 1377 | "requires": { 1378 | "ansi-regex": "1.1.1" 1379 | } 1380 | }, 1381 | "supports-color": { 1382 | "version": "1.3.1", 1383 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-1.3.1.tgz", 1384 | "integrity": "sha1-FXWN8J2P87SswwdTn6vicJXhBC0=", 1385 | "dev": true 1386 | } 1387 | } 1388 | }, 1389 | "grunt-karma": { 1390 | "version": "0.12.2", 1391 | "resolved": "https://registry.npmjs.org/grunt-karma/-/grunt-karma-0.12.2.tgz", 1392 | "integrity": "sha1-1SZ2q5R3nksgBStfNRnrMmU9xWY=", 1393 | "dev": true, 1394 | "requires": { 1395 | "lodash": "3.10.1" 1396 | }, 1397 | "dependencies": { 1398 | "lodash": { 1399 | "version": "3.10.1", 1400 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", 1401 | "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=", 1402 | "dev": true 1403 | } 1404 | } 1405 | }, 1406 | "grunt-legacy-log": { 1407 | "version": "0.1.3", 1408 | "resolved": "https://registry.npmjs.org/grunt-legacy-log/-/grunt-legacy-log-0.1.3.tgz", 1409 | "integrity": "sha1-7ClCboAwIa9ZAp+H0vnNczWgVTE=", 1410 | "dev": true, 1411 | "requires": { 1412 | "colors": "0.6.2", 1413 | "grunt-legacy-log-utils": "0.1.1", 1414 | "hooker": "0.2.3", 1415 | "lodash": "2.4.2", 1416 | "underscore.string": "2.3.3" 1417 | }, 1418 | "dependencies": { 1419 | "lodash": { 1420 | "version": "2.4.2", 1421 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-2.4.2.tgz", 1422 | "integrity": "sha1-+t2DS5aDBz2hebPq5tnA0VBT9z4=", 1423 | "dev": true 1424 | }, 1425 | "underscore.string": { 1426 | "version": "2.3.3", 1427 | "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-2.3.3.tgz", 1428 | "integrity": "sha1-ccCL9rQosRM/N+ePo6Icgvcymw0=", 1429 | "dev": true 1430 | } 1431 | } 1432 | }, 1433 | "grunt-legacy-log-utils": { 1434 | "version": "0.1.1", 1435 | "resolved": "https://registry.npmjs.org/grunt-legacy-log-utils/-/grunt-legacy-log-utils-0.1.1.tgz", 1436 | "integrity": "sha1-wHBrndkGThFvNvI/5OawSGcsD34=", 1437 | "dev": true, 1438 | "requires": { 1439 | "colors": "0.6.2", 1440 | "lodash": "2.4.2", 1441 | "underscore.string": "2.3.3" 1442 | }, 1443 | "dependencies": { 1444 | "lodash": { 1445 | "version": "2.4.2", 1446 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-2.4.2.tgz", 1447 | "integrity": "sha1-+t2DS5aDBz2hebPq5tnA0VBT9z4=", 1448 | "dev": true 1449 | }, 1450 | "underscore.string": { 1451 | "version": "2.3.3", 1452 | "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-2.3.3.tgz", 1453 | "integrity": "sha1-ccCL9rQosRM/N+ePo6Icgvcymw0=", 1454 | "dev": true 1455 | } 1456 | } 1457 | }, 1458 | "grunt-legacy-util": { 1459 | "version": "0.2.0", 1460 | "resolved": "https://registry.npmjs.org/grunt-legacy-util/-/grunt-legacy-util-0.2.0.tgz", 1461 | "integrity": "sha1-kzJIhNv343qf98Am3/RR2UqeVUs=", 1462 | "dev": true, 1463 | "requires": { 1464 | "async": "0.1.22", 1465 | "exit": "0.1.2", 1466 | "getobject": "0.1.0", 1467 | "hooker": "0.2.3", 1468 | "lodash": "0.9.2", 1469 | "underscore.string": "2.2.1", 1470 | "which": "1.0.9" 1471 | } 1472 | }, 1473 | "grunt-notify": { 1474 | "version": "0.3.1", 1475 | "resolved": "https://registry.npmjs.org/grunt-notify/-/grunt-notify-0.3.1.tgz", 1476 | "integrity": "sha1-XOQlllYibRvjsqpz/lSJ1vSMWrY=", 1477 | "dev": true, 1478 | "requires": { 1479 | "semver": "3.0.1", 1480 | "stack-parser": "0.0.1", 1481 | "which": "1.0.9" 1482 | }, 1483 | "dependencies": { 1484 | "semver": { 1485 | "version": "3.0.1", 1486 | "resolved": "https://registry.npmjs.org/semver/-/semver-3.0.1.tgz", 1487 | "integrity": "sha1-cgrAElFaJS+R+w3S6ZpWpw1s8Hg=", 1488 | "dev": true 1489 | } 1490 | } 1491 | }, 1492 | "gzip-size": { 1493 | "version": "1.0.0", 1494 | "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-1.0.0.tgz", 1495 | "integrity": "sha1-Zs+LEBBHInuVus5uodoMF37Vwi8=", 1496 | "dev": true, 1497 | "requires": { 1498 | "browserify-zlib": "0.1.4", 1499 | "concat-stream": "1.6.0" 1500 | } 1501 | }, 1502 | "har-validator": { 1503 | "version": "2.0.6", 1504 | "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-2.0.6.tgz", 1505 | "integrity": "sha1-zcvAgYgmWtEZtqWnyKtw7s+10n0=", 1506 | "dev": true, 1507 | "requires": { 1508 | "chalk": "1.1.3", 1509 | "commander": "2.11.0", 1510 | "is-my-json-valid": "2.16.1", 1511 | "pinkie-promise": "2.0.1" 1512 | }, 1513 | "dependencies": { 1514 | "ansi-regex": { 1515 | "version": "2.1.1", 1516 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", 1517 | "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", 1518 | "dev": true 1519 | }, 1520 | "ansi-styles": { 1521 | "version": "2.2.1", 1522 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", 1523 | "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", 1524 | "dev": true 1525 | }, 1526 | "chalk": { 1527 | "version": "1.1.3", 1528 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", 1529 | "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", 1530 | "dev": true, 1531 | "requires": { 1532 | "ansi-styles": "2.2.1", 1533 | "escape-string-regexp": "1.0.5", 1534 | "has-ansi": "2.0.0", 1535 | "strip-ansi": "3.0.1", 1536 | "supports-color": "2.0.0" 1537 | } 1538 | }, 1539 | "has-ansi": { 1540 | "version": "2.0.0", 1541 | "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", 1542 | "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", 1543 | "dev": true, 1544 | "requires": { 1545 | "ansi-regex": "2.1.1" 1546 | } 1547 | }, 1548 | "strip-ansi": { 1549 | "version": "3.0.1", 1550 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", 1551 | "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", 1552 | "dev": true, 1553 | "requires": { 1554 | "ansi-regex": "2.1.1" 1555 | } 1556 | }, 1557 | "supports-color": { 1558 | "version": "2.0.0", 1559 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", 1560 | "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", 1561 | "dev": true 1562 | } 1563 | } 1564 | }, 1565 | "has-ansi": { 1566 | "version": "0.1.0", 1567 | "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-0.1.0.tgz", 1568 | "integrity": "sha1-hPJlqujA5qiKEtcCKJS3VoiUxi4=", 1569 | "dev": true, 1570 | "requires": { 1571 | "ansi-regex": "0.2.1" 1572 | } 1573 | }, 1574 | "has-binary": { 1575 | "version": "0.1.7", 1576 | "resolved": "https://registry.npmjs.org/has-binary/-/has-binary-0.1.7.tgz", 1577 | "integrity": "sha1-aOYesWIQyVRaClzOBqhzkS/h5ow=", 1578 | "dev": true, 1579 | "requires": { 1580 | "isarray": "0.0.1" 1581 | } 1582 | }, 1583 | "has-cors": { 1584 | "version": "1.1.0", 1585 | "resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz", 1586 | "integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=", 1587 | "dev": true 1588 | }, 1589 | "hasha": { 1590 | "version": "2.2.0", 1591 | "resolved": "https://registry.npmjs.org/hasha/-/hasha-2.2.0.tgz", 1592 | "integrity": "sha1-eNfL/B5tZjA/55g3NlmEUXsvbuE=", 1593 | "dev": true, 1594 | "requires": { 1595 | "is-stream": "1.1.0", 1596 | "pinkie-promise": "2.0.1" 1597 | } 1598 | }, 1599 | "hawk": { 1600 | "version": "3.1.3", 1601 | "resolved": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz", 1602 | "integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=", 1603 | "dev": true, 1604 | "requires": { 1605 | "boom": "2.10.1", 1606 | "cryptiles": "2.0.5", 1607 | "hoek": "2.16.3", 1608 | "sntp": "1.0.9" 1609 | } 1610 | }, 1611 | "hoek": { 1612 | "version": "2.16.3", 1613 | "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", 1614 | "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=", 1615 | "dev": true 1616 | }, 1617 | "hooker": { 1618 | "version": "0.2.3", 1619 | "resolved": "https://registry.npmjs.org/hooker/-/hooker-0.2.3.tgz", 1620 | "integrity": "sha1-uDT3I8xKJCqmWWNFnfbZhMXT2Vk=", 1621 | "dev": true 1622 | }, 1623 | "hosted-git-info": { 1624 | "version": "2.5.0", 1625 | "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.5.0.tgz", 1626 | "integrity": "sha512-pNgbURSuab90KbTqvRPsseaTxOJCZBD0a7t+haSN33piP9cCM4l0CqdzAif2hUqm716UovKB2ROmiabGAKVXyg==", 1627 | "dev": true 1628 | }, 1629 | "htmlparser2": { 1630 | "version": "3.8.3", 1631 | "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.8.3.tgz", 1632 | "integrity": "sha1-mWwosZFRaovoZQGn15dX5ccMEGg=", 1633 | "dev": true, 1634 | "requires": { 1635 | "domelementtype": "1.3.0", 1636 | "domhandler": "2.3.0", 1637 | "domutils": "1.5.1", 1638 | "entities": "1.0.0", 1639 | "readable-stream": "1.1.14" 1640 | } 1641 | }, 1642 | "http-errors": { 1643 | "version": "1.6.2", 1644 | "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.2.tgz", 1645 | "integrity": "sha1-CgAsyFcHGSp+eUbO7cERVfYOxzY=", 1646 | "dev": true, 1647 | "requires": { 1648 | "depd": "1.1.1", 1649 | "inherits": "2.0.3", 1650 | "setprototypeof": "1.0.3", 1651 | "statuses": "1.3.1" 1652 | } 1653 | }, 1654 | "http-proxy": { 1655 | "version": "1.16.2", 1656 | "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.16.2.tgz", 1657 | "integrity": "sha1-Bt/ykpUr9k2+hHH6nfcwZtTzd0I=", 1658 | "dev": true, 1659 | "requires": { 1660 | "eventemitter3": "1.2.0", 1661 | "requires-port": "1.0.0" 1662 | } 1663 | }, 1664 | "http-signature": { 1665 | "version": "1.1.1", 1666 | "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz", 1667 | "integrity": "sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=", 1668 | "dev": true, 1669 | "requires": { 1670 | "assert-plus": "0.2.0", 1671 | "jsprim": "1.4.1", 1672 | "sshpk": "1.13.1" 1673 | } 1674 | }, 1675 | "iconv-lite": { 1676 | "version": "0.2.11", 1677 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.2.11.tgz", 1678 | "integrity": "sha1-HOYKOleGSiktEyH/RgnKS7llrcg=", 1679 | "dev": true 1680 | }, 1681 | "indent-string": { 1682 | "version": "2.1.0", 1683 | "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", 1684 | "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", 1685 | "dev": true, 1686 | "requires": { 1687 | "repeating": "2.0.1" 1688 | } 1689 | }, 1690 | "indexof": { 1691 | "version": "0.0.1", 1692 | "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", 1693 | "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=", 1694 | "dev": true 1695 | }, 1696 | "inflight": { 1697 | "version": "1.0.6", 1698 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 1699 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", 1700 | "dev": true, 1701 | "requires": { 1702 | "once": "1.4.0", 1703 | "wrappy": "1.0.2" 1704 | } 1705 | }, 1706 | "inherits": { 1707 | "version": "2.0.3", 1708 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", 1709 | "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", 1710 | "dev": true 1711 | }, 1712 | "is-arrayish": { 1713 | "version": "0.2.1", 1714 | "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", 1715 | "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", 1716 | "dev": true 1717 | }, 1718 | "is-binary-path": { 1719 | "version": "1.0.1", 1720 | "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", 1721 | "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", 1722 | "dev": true, 1723 | "requires": { 1724 | "binary-extensions": "1.10.0" 1725 | } 1726 | }, 1727 | "is-buffer": { 1728 | "version": "1.1.5", 1729 | "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.5.tgz", 1730 | "integrity": "sha1-Hzsm72E7IUuIy8ojzGwB2Hlh7sw=", 1731 | "dev": true 1732 | }, 1733 | "is-builtin-module": { 1734 | "version": "1.0.0", 1735 | "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", 1736 | "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", 1737 | "dev": true, 1738 | "requires": { 1739 | "builtin-modules": "1.1.1" 1740 | } 1741 | }, 1742 | "is-dotfile": { 1743 | "version": "1.0.3", 1744 | "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz", 1745 | "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=", 1746 | "dev": true 1747 | }, 1748 | "is-equal-shallow": { 1749 | "version": "0.1.3", 1750 | "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz", 1751 | "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=", 1752 | "dev": true, 1753 | "requires": { 1754 | "is-primitive": "2.0.0" 1755 | } 1756 | }, 1757 | "is-extendable": { 1758 | "version": "0.1.1", 1759 | "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", 1760 | "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", 1761 | "dev": true 1762 | }, 1763 | "is-extglob": { 1764 | "version": "1.0.0", 1765 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", 1766 | "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", 1767 | "dev": true 1768 | }, 1769 | "is-finite": { 1770 | "version": "1.0.2", 1771 | "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", 1772 | "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", 1773 | "dev": true, 1774 | "requires": { 1775 | "number-is-nan": "1.0.1" 1776 | } 1777 | }, 1778 | "is-glob": { 1779 | "version": "2.0.1", 1780 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", 1781 | "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", 1782 | "dev": true, 1783 | "requires": { 1784 | "is-extglob": "1.0.0" 1785 | } 1786 | }, 1787 | "is-my-json-valid": { 1788 | "version": "2.16.1", 1789 | "resolved": "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.16.1.tgz", 1790 | "integrity": "sha512-ochPsqWS1WXj8ZnMIV0vnNXooaMhp7cyL4FMSIPKTtnV0Ha/T19G2b9kkhcNsabV9bxYkze7/aLZJb/bYuFduQ==", 1791 | "dev": true, 1792 | "requires": { 1793 | "generate-function": "2.0.0", 1794 | "generate-object-property": "1.2.0", 1795 | "jsonpointer": "4.0.1", 1796 | "xtend": "4.0.1" 1797 | } 1798 | }, 1799 | "is-number": { 1800 | "version": "2.1.0", 1801 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", 1802 | "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", 1803 | "dev": true, 1804 | "requires": { 1805 | "kind-of": "3.2.2" 1806 | } 1807 | }, 1808 | "is-posix-bracket": { 1809 | "version": "0.1.1", 1810 | "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz", 1811 | "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=", 1812 | "dev": true 1813 | }, 1814 | "is-primitive": { 1815 | "version": "2.0.0", 1816 | "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz", 1817 | "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=", 1818 | "dev": true 1819 | }, 1820 | "is-property": { 1821 | "version": "1.0.2", 1822 | "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz", 1823 | "integrity": "sha1-V/4cTkhHTt1lsJkR8msc1Ald2oQ=", 1824 | "dev": true 1825 | }, 1826 | "is-stream": { 1827 | "version": "1.1.0", 1828 | "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", 1829 | "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", 1830 | "dev": true 1831 | }, 1832 | "is-typedarray": { 1833 | "version": "1.0.0", 1834 | "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", 1835 | "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", 1836 | "dev": true 1837 | }, 1838 | "is-utf8": { 1839 | "version": "0.2.1", 1840 | "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", 1841 | "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", 1842 | "dev": true 1843 | }, 1844 | "isarray": { 1845 | "version": "0.0.1", 1846 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", 1847 | "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", 1848 | "dev": true 1849 | }, 1850 | "isbinaryfile": { 1851 | "version": "3.0.2", 1852 | "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-3.0.2.tgz", 1853 | "integrity": "sha1-Sj6XTsDLqQBNP8bN5yCeppNopiE=", 1854 | "dev": true 1855 | }, 1856 | "isexe": { 1857 | "version": "2.0.0", 1858 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", 1859 | "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", 1860 | "dev": true 1861 | }, 1862 | "isobject": { 1863 | "version": "2.1.0", 1864 | "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", 1865 | "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", 1866 | "dev": true, 1867 | "requires": { 1868 | "isarray": "1.0.0" 1869 | }, 1870 | "dependencies": { 1871 | "isarray": { 1872 | "version": "1.0.0", 1873 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", 1874 | "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", 1875 | "dev": true 1876 | } 1877 | } 1878 | }, 1879 | "isstream": { 1880 | "version": "0.1.2", 1881 | "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", 1882 | "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", 1883 | "dev": true 1884 | }, 1885 | "jasmine-core": { 1886 | "version": "2.8.0", 1887 | "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-2.8.0.tgz", 1888 | "integrity": "sha1-vMl5rh+f0FcB5F5S5l06XWPxok4=", 1889 | "dev": true 1890 | }, 1891 | "js-yaml": { 1892 | "version": "2.0.5", 1893 | "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-2.0.5.tgz", 1894 | "integrity": "sha1-olrmUJmZ6X3yeMZxnaEb0Gh3Q6g=", 1895 | "dev": true, 1896 | "requires": { 1897 | "argparse": "0.1.16", 1898 | "esprima": "1.0.4" 1899 | } 1900 | }, 1901 | "jsbn": { 1902 | "version": "0.1.1", 1903 | "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", 1904 | "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", 1905 | "dev": true, 1906 | "optional": true 1907 | }, 1908 | "jshint": { 1909 | "version": "2.5.11", 1910 | "resolved": "https://registry.npmjs.org/jshint/-/jshint-2.5.11.tgz", 1911 | "integrity": "sha1-4tlYWLuxqngwAQii6BCZ+wlWIuA=", 1912 | "dev": true, 1913 | "requires": { 1914 | "cli": "0.6.6", 1915 | "console-browserify": "1.1.0", 1916 | "exit": "0.1.2", 1917 | "htmlparser2": "3.8.3", 1918 | "minimatch": "1.0.0", 1919 | "shelljs": "0.3.0", 1920 | "strip-json-comments": "1.0.4", 1921 | "underscore": "1.6.0" 1922 | }, 1923 | "dependencies": { 1924 | "minimatch": { 1925 | "version": "1.0.0", 1926 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-1.0.0.tgz", 1927 | "integrity": "sha1-4N0hILSeG3JM6NcUxSCCKpQ4V20=", 1928 | "dev": true, 1929 | "requires": { 1930 | "lru-cache": "2.7.3", 1931 | "sigmund": "1.0.1" 1932 | } 1933 | }, 1934 | "underscore": { 1935 | "version": "1.6.0", 1936 | "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.6.0.tgz", 1937 | "integrity": "sha1-izixDKze9jM3uLJOT/htRa6lKag=", 1938 | "dev": true 1939 | } 1940 | } 1941 | }, 1942 | "json-schema": { 1943 | "version": "0.2.3", 1944 | "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", 1945 | "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", 1946 | "dev": true 1947 | }, 1948 | "json-stringify-safe": { 1949 | "version": "5.0.1", 1950 | "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", 1951 | "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", 1952 | "dev": true 1953 | }, 1954 | "json3": { 1955 | "version": "3.3.2", 1956 | "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.2.tgz", 1957 | "integrity": "sha1-PAQ0dD35Pi9cQq7nsZvLSDV19OE=", 1958 | "dev": true 1959 | }, 1960 | "jsonfile": { 1961 | "version": "2.4.0", 1962 | "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", 1963 | "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=", 1964 | "dev": true, 1965 | "requires": { 1966 | "graceful-fs": "4.1.11" 1967 | }, 1968 | "dependencies": { 1969 | "graceful-fs": { 1970 | "version": "4.1.11", 1971 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", 1972 | "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", 1973 | "dev": true, 1974 | "optional": true 1975 | } 1976 | } 1977 | }, 1978 | "jsonpointer": { 1979 | "version": "4.0.1", 1980 | "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-4.0.1.tgz", 1981 | "integrity": "sha1-T9kss04OnbPInIYi7PUfm5eMbLk=", 1982 | "dev": true 1983 | }, 1984 | "jsprim": { 1985 | "version": "1.4.1", 1986 | "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", 1987 | "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", 1988 | "dev": true, 1989 | "requires": { 1990 | "assert-plus": "1.0.0", 1991 | "extsprintf": "1.3.0", 1992 | "json-schema": "0.2.3", 1993 | "verror": "1.10.0" 1994 | }, 1995 | "dependencies": { 1996 | "assert-plus": { 1997 | "version": "1.0.0", 1998 | "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", 1999 | "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", 2000 | "dev": true 2001 | } 2002 | } 2003 | }, 2004 | "karma": { 2005 | "version": "0.13.22", 2006 | "resolved": "https://registry.npmjs.org/karma/-/karma-0.13.22.tgz", 2007 | "integrity": "sha1-B3ULG9Bj1+fnuRvNLmNU2PKqh0Q=", 2008 | "dev": true, 2009 | "requires": { 2010 | "batch": "0.5.3", 2011 | "bluebird": "2.11.0", 2012 | "body-parser": "1.18.2", 2013 | "chokidar": "1.7.0", 2014 | "colors": "1.1.2", 2015 | "connect": "3.6.5", 2016 | "core-js": "2.5.1", 2017 | "di": "0.0.1", 2018 | "dom-serialize": "2.2.1", 2019 | "expand-braces": "0.1.2", 2020 | "glob": "7.1.2", 2021 | "graceful-fs": "4.1.11", 2022 | "http-proxy": "1.16.2", 2023 | "isbinaryfile": "3.0.2", 2024 | "lodash": "3.10.1", 2025 | "log4js": "0.6.38", 2026 | "mime": "1.4.1", 2027 | "minimatch": "3.0.4", 2028 | "optimist": "0.6.1", 2029 | "rimraf": "2.6.2", 2030 | "socket.io": "1.7.4", 2031 | "source-map": "0.5.7", 2032 | "useragent": "2.2.1" 2033 | }, 2034 | "dependencies": { 2035 | "colors": { 2036 | "version": "1.1.2", 2037 | "resolved": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz", 2038 | "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=", 2039 | "dev": true 2040 | }, 2041 | "glob": { 2042 | "version": "7.1.2", 2043 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", 2044 | "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", 2045 | "dev": true, 2046 | "requires": { 2047 | "fs.realpath": "1.0.0", 2048 | "inflight": "1.0.6", 2049 | "inherits": "2.0.3", 2050 | "minimatch": "3.0.4", 2051 | "once": "1.4.0", 2052 | "path-is-absolute": "1.0.1" 2053 | } 2054 | }, 2055 | "graceful-fs": { 2056 | "version": "4.1.11", 2057 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", 2058 | "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", 2059 | "dev": true 2060 | }, 2061 | "lodash": { 2062 | "version": "3.10.1", 2063 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", 2064 | "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=", 2065 | "dev": true 2066 | }, 2067 | "minimatch": { 2068 | "version": "3.0.4", 2069 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", 2070 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", 2071 | "dev": true, 2072 | "requires": { 2073 | "brace-expansion": "1.1.8" 2074 | } 2075 | }, 2076 | "rimraf": { 2077 | "version": "2.6.2", 2078 | "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", 2079 | "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", 2080 | "dev": true, 2081 | "requires": { 2082 | "glob": "7.1.2" 2083 | } 2084 | }, 2085 | "source-map": { 2086 | "version": "0.5.7", 2087 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", 2088 | "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", 2089 | "dev": true 2090 | } 2091 | } 2092 | }, 2093 | "karma-jasmine": { 2094 | "version": "0.3.8", 2095 | "resolved": "https://registry.npmjs.org/karma-jasmine/-/karma-jasmine-0.3.8.tgz", 2096 | "integrity": "sha1-W2RXeRrZuJqhc/B54+vhuMgFI2w=", 2097 | "dev": true 2098 | }, 2099 | "karma-phantomjs-launcher": { 2100 | "version": "0.2.3", 2101 | "resolved": "https://registry.npmjs.org/karma-phantomjs-launcher/-/karma-phantomjs-launcher-0.2.3.tgz", 2102 | "integrity": "sha1-d/aCQ/rXhSxbMhvPnWkfEiPMCAk=", 2103 | "dev": true, 2104 | "requires": { 2105 | "lodash": "3.10.1" 2106 | }, 2107 | "dependencies": { 2108 | "lodash": { 2109 | "version": "3.10.1", 2110 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", 2111 | "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=", 2112 | "dev": true 2113 | } 2114 | } 2115 | }, 2116 | "kew": { 2117 | "version": "0.7.0", 2118 | "resolved": "https://registry.npmjs.org/kew/-/kew-0.7.0.tgz", 2119 | "integrity": "sha1-edk9LTM2PW/dKXCzNdkUGtWR15s=", 2120 | "dev": true 2121 | }, 2122 | "kind-of": { 2123 | "version": "3.2.2", 2124 | "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", 2125 | "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", 2126 | "dev": true, 2127 | "requires": { 2128 | "is-buffer": "1.1.5" 2129 | } 2130 | }, 2131 | "klaw": { 2132 | "version": "1.3.1", 2133 | "resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz", 2134 | "integrity": "sha1-QIhDO0azsbolnXh4XY6W9zugJDk=", 2135 | "dev": true, 2136 | "requires": { 2137 | "graceful-fs": "4.1.11" 2138 | }, 2139 | "dependencies": { 2140 | "graceful-fs": { 2141 | "version": "4.1.11", 2142 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", 2143 | "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", 2144 | "dev": true, 2145 | "optional": true 2146 | } 2147 | } 2148 | }, 2149 | "load-json-file": { 2150 | "version": "1.1.0", 2151 | "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", 2152 | "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", 2153 | "dev": true, 2154 | "requires": { 2155 | "graceful-fs": "4.1.11", 2156 | "parse-json": "2.2.0", 2157 | "pify": "2.3.0", 2158 | "pinkie-promise": "2.0.1", 2159 | "strip-bom": "2.0.0" 2160 | }, 2161 | "dependencies": { 2162 | "graceful-fs": { 2163 | "version": "4.1.11", 2164 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", 2165 | "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", 2166 | "dev": true 2167 | } 2168 | } 2169 | }, 2170 | "lodash": { 2171 | "version": "0.9.2", 2172 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-0.9.2.tgz", 2173 | "integrity": "sha1-jzSZxSRdNG1oLlsNO0B2fgnxqSw=", 2174 | "dev": true 2175 | }, 2176 | "log4js": { 2177 | "version": "0.6.38", 2178 | "resolved": "https://registry.npmjs.org/log4js/-/log4js-0.6.38.tgz", 2179 | "integrity": "sha1-LElBFmldb7JUgJQ9P8hy5mKlIv0=", 2180 | "dev": true, 2181 | "requires": { 2182 | "readable-stream": "1.0.34", 2183 | "semver": "4.3.6" 2184 | }, 2185 | "dependencies": { 2186 | "readable-stream": { 2187 | "version": "1.0.34", 2188 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", 2189 | "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", 2190 | "dev": true, 2191 | "requires": { 2192 | "core-util-is": "1.0.2", 2193 | "inherits": "2.0.3", 2194 | "isarray": "0.0.1", 2195 | "string_decoder": "0.10.31" 2196 | } 2197 | }, 2198 | "semver": { 2199 | "version": "4.3.6", 2200 | "resolved": "https://registry.npmjs.org/semver/-/semver-4.3.6.tgz", 2201 | "integrity": "sha1-MAvG4OhjdPe6YQaLWx7NV/xlMto=", 2202 | "dev": true 2203 | } 2204 | } 2205 | }, 2206 | "loud-rejection": { 2207 | "version": "1.6.0", 2208 | "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", 2209 | "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=", 2210 | "dev": true, 2211 | "requires": { 2212 | "currently-unhandled": "0.4.1", 2213 | "signal-exit": "3.0.2" 2214 | } 2215 | }, 2216 | "lru-cache": { 2217 | "version": "2.7.3", 2218 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.7.3.tgz", 2219 | "integrity": "sha1-bUUk6LlV+V1PW1iFHOId1y+06VI=", 2220 | "dev": true 2221 | }, 2222 | "map-obj": { 2223 | "version": "1.0.1", 2224 | "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", 2225 | "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", 2226 | "dev": true 2227 | }, 2228 | "maxmin": { 2229 | "version": "1.0.1", 2230 | "resolved": "https://registry.npmjs.org/maxmin/-/maxmin-1.0.1.tgz", 2231 | "integrity": "sha1-tmx6C58e9it1MIn39ddknlQFKwY=", 2232 | "dev": true, 2233 | "requires": { 2234 | "chalk": "1.1.3", 2235 | "figures": "1.7.0", 2236 | "gzip-size": "1.0.0", 2237 | "pretty-bytes": "1.0.4" 2238 | }, 2239 | "dependencies": { 2240 | "ansi-regex": { 2241 | "version": "2.1.1", 2242 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", 2243 | "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", 2244 | "dev": true 2245 | }, 2246 | "ansi-styles": { 2247 | "version": "2.2.1", 2248 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", 2249 | "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", 2250 | "dev": true 2251 | }, 2252 | "chalk": { 2253 | "version": "1.1.3", 2254 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", 2255 | "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", 2256 | "dev": true, 2257 | "requires": { 2258 | "ansi-styles": "2.2.1", 2259 | "escape-string-regexp": "1.0.5", 2260 | "has-ansi": "2.0.0", 2261 | "strip-ansi": "3.0.1", 2262 | "supports-color": "2.0.0" 2263 | } 2264 | }, 2265 | "has-ansi": { 2266 | "version": "2.0.0", 2267 | "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", 2268 | "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", 2269 | "dev": true, 2270 | "requires": { 2271 | "ansi-regex": "2.1.1" 2272 | } 2273 | }, 2274 | "strip-ansi": { 2275 | "version": "3.0.1", 2276 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", 2277 | "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", 2278 | "dev": true, 2279 | "requires": { 2280 | "ansi-regex": "2.1.1" 2281 | } 2282 | }, 2283 | "supports-color": { 2284 | "version": "2.0.0", 2285 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", 2286 | "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", 2287 | "dev": true 2288 | } 2289 | } 2290 | }, 2291 | "media-typer": { 2292 | "version": "0.3.0", 2293 | "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", 2294 | "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", 2295 | "dev": true 2296 | }, 2297 | "meow": { 2298 | "version": "3.7.0", 2299 | "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", 2300 | "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", 2301 | "dev": true, 2302 | "requires": { 2303 | "camelcase-keys": "2.1.0", 2304 | "decamelize": "1.2.0", 2305 | "loud-rejection": "1.6.0", 2306 | "map-obj": "1.0.1", 2307 | "minimist": "1.2.0", 2308 | "normalize-package-data": "2.4.0", 2309 | "object-assign": "4.1.1", 2310 | "read-pkg-up": "1.0.1", 2311 | "redent": "1.0.0", 2312 | "trim-newlines": "1.0.0" 2313 | } 2314 | }, 2315 | "micromatch": { 2316 | "version": "2.3.11", 2317 | "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", 2318 | "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", 2319 | "dev": true, 2320 | "requires": { 2321 | "arr-diff": "2.0.0", 2322 | "array-unique": "0.2.1", 2323 | "braces": "1.8.5", 2324 | "expand-brackets": "0.1.5", 2325 | "extglob": "0.3.2", 2326 | "filename-regex": "2.0.1", 2327 | "is-extglob": "1.0.0", 2328 | "is-glob": "2.0.1", 2329 | "kind-of": "3.2.2", 2330 | "normalize-path": "2.1.1", 2331 | "object.omit": "2.0.1", 2332 | "parse-glob": "3.0.4", 2333 | "regex-cache": "0.4.4" 2334 | } 2335 | }, 2336 | "mime": { 2337 | "version": "1.4.1", 2338 | "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", 2339 | "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==", 2340 | "dev": true 2341 | }, 2342 | "mime-db": { 2343 | "version": "1.30.0", 2344 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.30.0.tgz", 2345 | "integrity": "sha1-dMZD2i3Z1qRTmZY0ZbJtXKfXHwE=", 2346 | "dev": true 2347 | }, 2348 | "mime-types": { 2349 | "version": "2.1.17", 2350 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.17.tgz", 2351 | "integrity": "sha1-Cdejk/A+mVp5+K+Fe3Cp4KsWVXo=", 2352 | "dev": true, 2353 | "requires": { 2354 | "mime-db": "1.30.0" 2355 | } 2356 | }, 2357 | "minimatch": { 2358 | "version": "0.2.14", 2359 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.2.14.tgz", 2360 | "integrity": "sha1-x054BXT2PG+aCQ6Q775u9TpqdWo=", 2361 | "dev": true, 2362 | "requires": { 2363 | "lru-cache": "2.7.3", 2364 | "sigmund": "1.0.1" 2365 | } 2366 | }, 2367 | "minimist": { 2368 | "version": "1.2.0", 2369 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", 2370 | "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", 2371 | "dev": true 2372 | }, 2373 | "mkdirp": { 2374 | "version": "0.5.0", 2375 | "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.0.tgz", 2376 | "integrity": "sha1-HXMHam35hs2TROFecfzAWkyavxI=", 2377 | "dev": true, 2378 | "requires": { 2379 | "minimist": "0.0.8" 2380 | }, 2381 | "dependencies": { 2382 | "minimist": { 2383 | "version": "0.0.8", 2384 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", 2385 | "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", 2386 | "dev": true 2387 | } 2388 | } 2389 | }, 2390 | "ms": { 2391 | "version": "2.0.0", 2392 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 2393 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", 2394 | "dev": true 2395 | }, 2396 | "negotiator": { 2397 | "version": "0.6.1", 2398 | "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", 2399 | "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=", 2400 | "dev": true 2401 | }, 2402 | "node-uuid": { 2403 | "version": "1.4.8", 2404 | "resolved": "https://registry.npmjs.org/node-uuid/-/node-uuid-1.4.8.tgz", 2405 | "integrity": "sha1-sEDrCSOWivq/jTL7HxfxFn/auQc=", 2406 | "dev": true 2407 | }, 2408 | "nopt": { 2409 | "version": "1.0.10", 2410 | "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", 2411 | "integrity": "sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=", 2412 | "dev": true, 2413 | "requires": { 2414 | "abbrev": "1.1.1" 2415 | } 2416 | }, 2417 | "normalize-package-data": { 2418 | "version": "2.4.0", 2419 | "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz", 2420 | "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==", 2421 | "dev": true, 2422 | "requires": { 2423 | "hosted-git-info": "2.5.0", 2424 | "is-builtin-module": "1.0.0", 2425 | "semver": "5.4.1", 2426 | "validate-npm-package-license": "3.0.1" 2427 | } 2428 | }, 2429 | "normalize-path": { 2430 | "version": "2.1.1", 2431 | "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", 2432 | "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", 2433 | "dev": true, 2434 | "requires": { 2435 | "remove-trailing-separator": "1.1.0" 2436 | } 2437 | }, 2438 | "number-is-nan": { 2439 | "version": "1.0.1", 2440 | "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", 2441 | "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", 2442 | "dev": true 2443 | }, 2444 | "oauth-sign": { 2445 | "version": "0.8.2", 2446 | "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", 2447 | "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=", 2448 | "dev": true 2449 | }, 2450 | "object-assign": { 2451 | "version": "4.1.1", 2452 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", 2453 | "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", 2454 | "dev": true 2455 | }, 2456 | "object-component": { 2457 | "version": "0.0.3", 2458 | "resolved": "https://registry.npmjs.org/object-component/-/object-component-0.0.3.tgz", 2459 | "integrity": "sha1-8MaapQ78lbhmwYb0AKM3acsvEpE=", 2460 | "dev": true 2461 | }, 2462 | "object.omit": { 2463 | "version": "2.0.1", 2464 | "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", 2465 | "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=", 2466 | "dev": true, 2467 | "requires": { 2468 | "for-own": "0.1.5", 2469 | "is-extendable": "0.1.1" 2470 | } 2471 | }, 2472 | "on-finished": { 2473 | "version": "2.3.0", 2474 | "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", 2475 | "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", 2476 | "dev": true, 2477 | "requires": { 2478 | "ee-first": "1.1.1" 2479 | } 2480 | }, 2481 | "once": { 2482 | "version": "1.4.0", 2483 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 2484 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", 2485 | "dev": true, 2486 | "requires": { 2487 | "wrappy": "1.0.2" 2488 | } 2489 | }, 2490 | "optimist": { 2491 | "version": "0.6.1", 2492 | "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", 2493 | "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", 2494 | "dev": true, 2495 | "requires": { 2496 | "minimist": "0.0.10", 2497 | "wordwrap": "0.0.2" 2498 | }, 2499 | "dependencies": { 2500 | "minimist": { 2501 | "version": "0.0.10", 2502 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz", 2503 | "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=", 2504 | "dev": true 2505 | } 2506 | } 2507 | }, 2508 | "options": { 2509 | "version": "0.0.6", 2510 | "resolved": "https://registry.npmjs.org/options/-/options-0.0.6.tgz", 2511 | "integrity": "sha1-7CLTEoBrtT5zF3Pnza788cZDEo8=", 2512 | "dev": true 2513 | }, 2514 | "os-tmpdir": { 2515 | "version": "1.0.2", 2516 | "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", 2517 | "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", 2518 | "dev": true 2519 | }, 2520 | "pako": { 2521 | "version": "0.2.9", 2522 | "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz", 2523 | "integrity": "sha1-8/dSL073gjSNqBYbrZ7P1Rv4OnU=", 2524 | "dev": true 2525 | }, 2526 | "parse-glob": { 2527 | "version": "3.0.4", 2528 | "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", 2529 | "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=", 2530 | "dev": true, 2531 | "requires": { 2532 | "glob-base": "0.3.0", 2533 | "is-dotfile": "1.0.3", 2534 | "is-extglob": "1.0.0", 2535 | "is-glob": "2.0.1" 2536 | } 2537 | }, 2538 | "parse-json": { 2539 | "version": "2.2.0", 2540 | "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", 2541 | "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", 2542 | "dev": true, 2543 | "requires": { 2544 | "error-ex": "1.3.1" 2545 | } 2546 | }, 2547 | "parsejson": { 2548 | "version": "0.0.3", 2549 | "resolved": "https://registry.npmjs.org/parsejson/-/parsejson-0.0.3.tgz", 2550 | "integrity": "sha1-q343WfIJ7OmUN5c/fQ8fZK4OZKs=", 2551 | "dev": true, 2552 | "requires": { 2553 | "better-assert": "1.0.2" 2554 | } 2555 | }, 2556 | "parseqs": { 2557 | "version": "0.0.5", 2558 | "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.5.tgz", 2559 | "integrity": "sha1-1SCKNzjkZ2bikbouoXNoSSGouJ0=", 2560 | "dev": true, 2561 | "requires": { 2562 | "better-assert": "1.0.2" 2563 | } 2564 | }, 2565 | "parseuri": { 2566 | "version": "0.0.5", 2567 | "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.5.tgz", 2568 | "integrity": "sha1-gCBKUNTbt3m/3G6+J3jZDkvOMgo=", 2569 | "dev": true, 2570 | "requires": { 2571 | "better-assert": "1.0.2" 2572 | } 2573 | }, 2574 | "parseurl": { 2575 | "version": "1.3.2", 2576 | "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz", 2577 | "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=", 2578 | "dev": true 2579 | }, 2580 | "path-exists": { 2581 | "version": "2.1.0", 2582 | "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", 2583 | "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", 2584 | "dev": true, 2585 | "requires": { 2586 | "pinkie-promise": "2.0.1" 2587 | } 2588 | }, 2589 | "path-is-absolute": { 2590 | "version": "1.0.1", 2591 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 2592 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", 2593 | "dev": true 2594 | }, 2595 | "path-type": { 2596 | "version": "1.1.0", 2597 | "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", 2598 | "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", 2599 | "dev": true, 2600 | "requires": { 2601 | "graceful-fs": "4.1.11", 2602 | "pify": "2.3.0", 2603 | "pinkie-promise": "2.0.1" 2604 | }, 2605 | "dependencies": { 2606 | "graceful-fs": { 2607 | "version": "4.1.11", 2608 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", 2609 | "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", 2610 | "dev": true 2611 | } 2612 | } 2613 | }, 2614 | "pend": { 2615 | "version": "1.2.0", 2616 | "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", 2617 | "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=", 2618 | "dev": true 2619 | }, 2620 | "phantomjs": { 2621 | "version": "1.9.20", 2622 | "resolved": "https://registry.npmjs.org/phantomjs/-/phantomjs-1.9.20.tgz", 2623 | "integrity": "sha1-RCSsog4U0lXAsIia9va4lz2hDg0=", 2624 | "dev": true, 2625 | "requires": { 2626 | "extract-zip": "1.5.0", 2627 | "fs-extra": "0.26.7", 2628 | "hasha": "2.2.0", 2629 | "kew": "0.7.0", 2630 | "progress": "1.1.8", 2631 | "request": "2.67.0", 2632 | "request-progress": "2.0.1", 2633 | "which": "1.2.14" 2634 | }, 2635 | "dependencies": { 2636 | "which": { 2637 | "version": "1.2.14", 2638 | "resolved": "https://registry.npmjs.org/which/-/which-1.2.14.tgz", 2639 | "integrity": "sha1-mofEN48D6CfOyvGs31bHNsAcFOU=", 2640 | "dev": true, 2641 | "requires": { 2642 | "isexe": "2.0.0" 2643 | } 2644 | } 2645 | } 2646 | }, 2647 | "pify": { 2648 | "version": "2.3.0", 2649 | "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", 2650 | "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", 2651 | "dev": true 2652 | }, 2653 | "pinkie": { 2654 | "version": "2.0.4", 2655 | "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", 2656 | "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", 2657 | "dev": true 2658 | }, 2659 | "pinkie-promise": { 2660 | "version": "2.0.1", 2661 | "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", 2662 | "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", 2663 | "dev": true, 2664 | "requires": { 2665 | "pinkie": "2.0.4" 2666 | } 2667 | }, 2668 | "preserve": { 2669 | "version": "0.2.0", 2670 | "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz", 2671 | "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=", 2672 | "dev": true 2673 | }, 2674 | "pretty-bytes": { 2675 | "version": "1.0.4", 2676 | "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-1.0.4.tgz", 2677 | "integrity": "sha1-CiLoIQYJrTVUL4yNXSFZr/B1HIQ=", 2678 | "dev": true, 2679 | "requires": { 2680 | "get-stdin": "4.0.1", 2681 | "meow": "3.7.0" 2682 | } 2683 | }, 2684 | "process-nextick-args": { 2685 | "version": "1.0.7", 2686 | "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", 2687 | "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=", 2688 | "dev": true 2689 | }, 2690 | "progress": { 2691 | "version": "1.1.8", 2692 | "resolved": "https://registry.npmjs.org/progress/-/progress-1.1.8.tgz", 2693 | "integrity": "sha1-4mDHj2Fhzdmw5WzD4Khd4Xx6V74=", 2694 | "dev": true 2695 | }, 2696 | "qs": { 2697 | "version": "6.5.1", 2698 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz", 2699 | "integrity": "sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A==", 2700 | "dev": true 2701 | }, 2702 | "randomatic": { 2703 | "version": "1.1.7", 2704 | "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-1.1.7.tgz", 2705 | "integrity": "sha512-D5JUjPyJbaJDkuAazpVnSfVkLlpeO3wDlPROTMLGKG1zMFNFRgrciKo1ltz/AzNTkqE0HzDx655QOL51N06how==", 2706 | "dev": true, 2707 | "requires": { 2708 | "is-number": "3.0.0", 2709 | "kind-of": "4.0.0" 2710 | }, 2711 | "dependencies": { 2712 | "is-number": { 2713 | "version": "3.0.0", 2714 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", 2715 | "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", 2716 | "dev": true, 2717 | "requires": { 2718 | "kind-of": "3.2.2" 2719 | }, 2720 | "dependencies": { 2721 | "kind-of": { 2722 | "version": "3.2.2", 2723 | "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", 2724 | "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", 2725 | "dev": true, 2726 | "requires": { 2727 | "is-buffer": "1.1.5" 2728 | } 2729 | } 2730 | } 2731 | }, 2732 | "kind-of": { 2733 | "version": "4.0.0", 2734 | "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", 2735 | "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", 2736 | "dev": true, 2737 | "requires": { 2738 | "is-buffer": "1.1.5" 2739 | } 2740 | } 2741 | } 2742 | }, 2743 | "raw-body": { 2744 | "version": "2.3.2", 2745 | "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.2.tgz", 2746 | "integrity": "sha1-vNYMd9Prk83gBQKVw/N5OJvIj4k=", 2747 | "dev": true, 2748 | "requires": { 2749 | "bytes": "3.0.0", 2750 | "http-errors": "1.6.2", 2751 | "iconv-lite": "0.4.19", 2752 | "unpipe": "1.0.0" 2753 | }, 2754 | "dependencies": { 2755 | "iconv-lite": { 2756 | "version": "0.4.19", 2757 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz", 2758 | "integrity": "sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ==", 2759 | "dev": true 2760 | } 2761 | } 2762 | }, 2763 | "read-pkg": { 2764 | "version": "1.1.0", 2765 | "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", 2766 | "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", 2767 | "dev": true, 2768 | "requires": { 2769 | "load-json-file": "1.1.0", 2770 | "normalize-package-data": "2.4.0", 2771 | "path-type": "1.1.0" 2772 | } 2773 | }, 2774 | "read-pkg-up": { 2775 | "version": "1.0.1", 2776 | "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", 2777 | "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", 2778 | "dev": true, 2779 | "requires": { 2780 | "find-up": "1.1.2", 2781 | "read-pkg": "1.1.0" 2782 | } 2783 | }, 2784 | "readable-stream": { 2785 | "version": "1.1.14", 2786 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", 2787 | "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", 2788 | "dev": true, 2789 | "requires": { 2790 | "core-util-is": "1.0.2", 2791 | "inherits": "2.0.3", 2792 | "isarray": "0.0.1", 2793 | "string_decoder": "0.10.31" 2794 | } 2795 | }, 2796 | "readdirp": { 2797 | "version": "2.1.0", 2798 | "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.1.0.tgz", 2799 | "integrity": "sha1-TtCtBg3zBzMAxIRANz9y0cxkLXg=", 2800 | "dev": true, 2801 | "requires": { 2802 | "graceful-fs": "4.1.11", 2803 | "minimatch": "3.0.4", 2804 | "readable-stream": "2.3.3", 2805 | "set-immediate-shim": "1.0.1" 2806 | }, 2807 | "dependencies": { 2808 | "graceful-fs": { 2809 | "version": "4.1.11", 2810 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", 2811 | "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", 2812 | "dev": true 2813 | }, 2814 | "isarray": { 2815 | "version": "1.0.0", 2816 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", 2817 | "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", 2818 | "dev": true 2819 | }, 2820 | "minimatch": { 2821 | "version": "3.0.4", 2822 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", 2823 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", 2824 | "dev": true, 2825 | "requires": { 2826 | "brace-expansion": "1.1.8" 2827 | } 2828 | }, 2829 | "readable-stream": { 2830 | "version": "2.3.3", 2831 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", 2832 | "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==", 2833 | "dev": true, 2834 | "requires": { 2835 | "core-util-is": "1.0.2", 2836 | "inherits": "2.0.3", 2837 | "isarray": "1.0.0", 2838 | "process-nextick-args": "1.0.7", 2839 | "safe-buffer": "5.1.1", 2840 | "string_decoder": "1.0.3", 2841 | "util-deprecate": "1.0.2" 2842 | } 2843 | }, 2844 | "string_decoder": { 2845 | "version": "1.0.3", 2846 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", 2847 | "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", 2848 | "dev": true, 2849 | "requires": { 2850 | "safe-buffer": "5.1.1" 2851 | } 2852 | } 2853 | } 2854 | }, 2855 | "redent": { 2856 | "version": "1.0.0", 2857 | "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", 2858 | "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=", 2859 | "dev": true, 2860 | "requires": { 2861 | "indent-string": "2.1.0", 2862 | "strip-indent": "1.0.1" 2863 | } 2864 | }, 2865 | "regex-cache": { 2866 | "version": "0.4.4", 2867 | "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz", 2868 | "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==", 2869 | "dev": true, 2870 | "requires": { 2871 | "is-equal-shallow": "0.1.3" 2872 | } 2873 | }, 2874 | "remove-trailing-separator": { 2875 | "version": "1.1.0", 2876 | "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", 2877 | "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", 2878 | "dev": true 2879 | }, 2880 | "repeat-element": { 2881 | "version": "1.1.2", 2882 | "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz", 2883 | "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=", 2884 | "dev": true 2885 | }, 2886 | "repeat-string": { 2887 | "version": "1.6.1", 2888 | "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", 2889 | "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", 2890 | "dev": true 2891 | }, 2892 | "repeating": { 2893 | "version": "2.0.1", 2894 | "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", 2895 | "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", 2896 | "dev": true, 2897 | "requires": { 2898 | "is-finite": "1.0.2" 2899 | } 2900 | }, 2901 | "request": { 2902 | "version": "2.67.0", 2903 | "resolved": "https://registry.npmjs.org/request/-/request-2.67.0.tgz", 2904 | "integrity": "sha1-ivdHgOK/EeoK6aqWXBHxGv0nJ0I=", 2905 | "dev": true, 2906 | "requires": { 2907 | "aws-sign2": "0.6.0", 2908 | "bl": "1.0.3", 2909 | "caseless": "0.11.0", 2910 | "combined-stream": "1.0.5", 2911 | "extend": "3.0.1", 2912 | "forever-agent": "0.6.1", 2913 | "form-data": "1.0.1", 2914 | "har-validator": "2.0.6", 2915 | "hawk": "3.1.3", 2916 | "http-signature": "1.1.1", 2917 | "is-typedarray": "1.0.0", 2918 | "isstream": "0.1.2", 2919 | "json-stringify-safe": "5.0.1", 2920 | "mime-types": "2.1.17", 2921 | "node-uuid": "1.4.8", 2922 | "oauth-sign": "0.8.2", 2923 | "qs": "5.2.1", 2924 | "stringstream": "0.0.5", 2925 | "tough-cookie": "2.2.2", 2926 | "tunnel-agent": "0.4.3" 2927 | }, 2928 | "dependencies": { 2929 | "qs": { 2930 | "version": "5.2.1", 2931 | "resolved": "https://registry.npmjs.org/qs/-/qs-5.2.1.tgz", 2932 | "integrity": "sha1-gB/uAw4LlFDWOFrcSKTMVbRK7fw=", 2933 | "dev": true 2934 | } 2935 | } 2936 | }, 2937 | "request-progress": { 2938 | "version": "2.0.1", 2939 | "resolved": "https://registry.npmjs.org/request-progress/-/request-progress-2.0.1.tgz", 2940 | "integrity": "sha1-XTa7V5YcZzqlt4jbyBQf3yO0Tgg=", 2941 | "dev": true, 2942 | "requires": { 2943 | "throttleit": "1.0.0" 2944 | } 2945 | }, 2946 | "requires-port": { 2947 | "version": "1.0.0", 2948 | "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", 2949 | "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", 2950 | "dev": true 2951 | }, 2952 | "rimraf": { 2953 | "version": "2.2.8", 2954 | "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.2.8.tgz", 2955 | "integrity": "sha1-5Dm+Kq7jJzIZUnMPmaiSnk/FBYI=", 2956 | "dev": true 2957 | }, 2958 | "safe-buffer": { 2959 | "version": "5.1.1", 2960 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", 2961 | "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==", 2962 | "dev": true 2963 | }, 2964 | "semver": { 2965 | "version": "5.4.1", 2966 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.4.1.tgz", 2967 | "integrity": "sha512-WfG/X9+oATh81XtllIo/I8gOiY9EXRdv1cQdyykeXK17YcUW3EXUAi2To4pcH6nZtJPr7ZOpM5OMyWJZm+8Rsg==", 2968 | "dev": true 2969 | }, 2970 | "set-immediate-shim": { 2971 | "version": "1.0.1", 2972 | "resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz", 2973 | "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=", 2974 | "dev": true 2975 | }, 2976 | "setprototypeof": { 2977 | "version": "1.0.3", 2978 | "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.3.tgz", 2979 | "integrity": "sha1-ZlZ+NwQ+608E2RvWWMDL77VbjgQ=", 2980 | "dev": true 2981 | }, 2982 | "shelljs": { 2983 | "version": "0.3.0", 2984 | "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.3.0.tgz", 2985 | "integrity": "sha1-NZbmMHp4FUT1kfN9phg2DzHbV7E=", 2986 | "dev": true 2987 | }, 2988 | "sigmund": { 2989 | "version": "1.0.1", 2990 | "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz", 2991 | "integrity": "sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA=", 2992 | "dev": true 2993 | }, 2994 | "signal-exit": { 2995 | "version": "3.0.2", 2996 | "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", 2997 | "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", 2998 | "dev": true 2999 | }, 3000 | "sntp": { 3001 | "version": "1.0.9", 3002 | "resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz", 3003 | "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=", 3004 | "dev": true, 3005 | "requires": { 3006 | "hoek": "2.16.3" 3007 | } 3008 | }, 3009 | "socket.io": { 3010 | "version": "1.7.4", 3011 | "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-1.7.4.tgz", 3012 | "integrity": "sha1-L37O3DORvy1cc+KR/iM+bjTU3QA=", 3013 | "dev": true, 3014 | "requires": { 3015 | "debug": "2.3.3", 3016 | "engine.io": "1.8.4", 3017 | "has-binary": "0.1.7", 3018 | "object-assign": "4.1.0", 3019 | "socket.io-adapter": "0.5.0", 3020 | "socket.io-client": "1.7.4", 3021 | "socket.io-parser": "2.3.1" 3022 | }, 3023 | "dependencies": { 3024 | "debug": { 3025 | "version": "2.3.3", 3026 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", 3027 | "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", 3028 | "dev": true, 3029 | "requires": { 3030 | "ms": "0.7.2" 3031 | } 3032 | }, 3033 | "ms": { 3034 | "version": "0.7.2", 3035 | "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", 3036 | "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=", 3037 | "dev": true 3038 | }, 3039 | "object-assign": { 3040 | "version": "4.1.0", 3041 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.0.tgz", 3042 | "integrity": "sha1-ejs9DpgGPUP0wD8uiubNUahog6A=", 3043 | "dev": true 3044 | } 3045 | } 3046 | }, 3047 | "socket.io-adapter": { 3048 | "version": "0.5.0", 3049 | "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-0.5.0.tgz", 3050 | "integrity": "sha1-y21LuL7IHhB4uZZ3+c7QBGBmu4s=", 3051 | "dev": true, 3052 | "requires": { 3053 | "debug": "2.3.3", 3054 | "socket.io-parser": "2.3.1" 3055 | }, 3056 | "dependencies": { 3057 | "debug": { 3058 | "version": "2.3.3", 3059 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", 3060 | "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", 3061 | "dev": true, 3062 | "requires": { 3063 | "ms": "0.7.2" 3064 | } 3065 | }, 3066 | "ms": { 3067 | "version": "0.7.2", 3068 | "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", 3069 | "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=", 3070 | "dev": true 3071 | } 3072 | } 3073 | }, 3074 | "socket.io-client": { 3075 | "version": "1.7.4", 3076 | "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-1.7.4.tgz", 3077 | "integrity": "sha1-7J+CA1btme9tNX8HVtZIcXvdQoE=", 3078 | "dev": true, 3079 | "requires": { 3080 | "backo2": "1.0.2", 3081 | "component-bind": "1.0.0", 3082 | "component-emitter": "1.2.1", 3083 | "debug": "2.3.3", 3084 | "engine.io-client": "1.8.4", 3085 | "has-binary": "0.1.7", 3086 | "indexof": "0.0.1", 3087 | "object-component": "0.0.3", 3088 | "parseuri": "0.0.5", 3089 | "socket.io-parser": "2.3.1", 3090 | "to-array": "0.1.4" 3091 | }, 3092 | "dependencies": { 3093 | "component-emitter": { 3094 | "version": "1.2.1", 3095 | "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", 3096 | "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", 3097 | "dev": true 3098 | }, 3099 | "debug": { 3100 | "version": "2.3.3", 3101 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", 3102 | "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", 3103 | "dev": true, 3104 | "requires": { 3105 | "ms": "0.7.2" 3106 | } 3107 | }, 3108 | "ms": { 3109 | "version": "0.7.2", 3110 | "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", 3111 | "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=", 3112 | "dev": true 3113 | } 3114 | } 3115 | }, 3116 | "socket.io-parser": { 3117 | "version": "2.3.1", 3118 | "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-2.3.1.tgz", 3119 | "integrity": "sha1-3VMgJRA85Clpcya+/WQAX8/ltKA=", 3120 | "dev": true, 3121 | "requires": { 3122 | "component-emitter": "1.1.2", 3123 | "debug": "2.2.0", 3124 | "isarray": "0.0.1", 3125 | "json3": "3.3.2" 3126 | }, 3127 | "dependencies": { 3128 | "debug": { 3129 | "version": "2.2.0", 3130 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", 3131 | "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=", 3132 | "dev": true, 3133 | "requires": { 3134 | "ms": "0.7.1" 3135 | } 3136 | }, 3137 | "ms": { 3138 | "version": "0.7.1", 3139 | "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", 3140 | "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=", 3141 | "dev": true 3142 | } 3143 | } 3144 | }, 3145 | "source-map": { 3146 | "version": "0.3.0", 3147 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.3.0.tgz", 3148 | "integrity": "sha1-hYb7mloAXltQHiHNGLbyG0V60fk=", 3149 | "dev": true, 3150 | "requires": { 3151 | "amdefine": "1.0.1" 3152 | } 3153 | }, 3154 | "spdx-correct": { 3155 | "version": "1.0.2", 3156 | "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-1.0.2.tgz", 3157 | "integrity": "sha1-SzBz2TP/UfORLwOsVRlJikFQ20A=", 3158 | "dev": true, 3159 | "requires": { 3160 | "spdx-license-ids": "1.2.2" 3161 | } 3162 | }, 3163 | "spdx-expression-parse": { 3164 | "version": "1.0.4", 3165 | "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz", 3166 | "integrity": "sha1-m98vIOH0DtRH++JzJmGR/O1RYmw=", 3167 | "dev": true 3168 | }, 3169 | "spdx-license-ids": { 3170 | "version": "1.2.2", 3171 | "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz", 3172 | "integrity": "sha1-yd96NCRZSt5r0RkA1ZZpbcBrrFc=", 3173 | "dev": true 3174 | }, 3175 | "sshpk": { 3176 | "version": "1.13.1", 3177 | "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.13.1.tgz", 3178 | "integrity": "sha1-US322mKHFEMW3EwY/hzx2UBzm+M=", 3179 | "dev": true, 3180 | "requires": { 3181 | "asn1": "0.2.3", 3182 | "assert-plus": "1.0.0", 3183 | "bcrypt-pbkdf": "1.0.1", 3184 | "dashdash": "1.14.1", 3185 | "ecc-jsbn": "0.1.1", 3186 | "getpass": "0.1.7", 3187 | "jsbn": "0.1.1", 3188 | "tweetnacl": "0.14.5" 3189 | }, 3190 | "dependencies": { 3191 | "assert-plus": { 3192 | "version": "1.0.0", 3193 | "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", 3194 | "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", 3195 | "dev": true 3196 | } 3197 | } 3198 | }, 3199 | "stack-parser": { 3200 | "version": "0.0.1", 3201 | "resolved": "https://registry.npmjs.org/stack-parser/-/stack-parser-0.0.1.tgz", 3202 | "integrity": "sha1-fTtjoXiH6eLCv1Xb0zGP40o50ec=", 3203 | "dev": true 3204 | }, 3205 | "statuses": { 3206 | "version": "1.3.1", 3207 | "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz", 3208 | "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=", 3209 | "dev": true 3210 | }, 3211 | "string_decoder": { 3212 | "version": "0.10.31", 3213 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", 3214 | "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", 3215 | "dev": true 3216 | }, 3217 | "stringstream": { 3218 | "version": "0.0.5", 3219 | "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz", 3220 | "integrity": "sha1-TkhM1N5aC7vuGORjB3EKioFiGHg=", 3221 | "dev": true 3222 | }, 3223 | "strip-ansi": { 3224 | "version": "0.3.0", 3225 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-0.3.0.tgz", 3226 | "integrity": "sha1-JfSOoiynkYfzF0pNuHWTR7sSYiA=", 3227 | "dev": true, 3228 | "requires": { 3229 | "ansi-regex": "0.2.1" 3230 | } 3231 | }, 3232 | "strip-bom": { 3233 | "version": "2.0.0", 3234 | "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", 3235 | "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", 3236 | "dev": true, 3237 | "requires": { 3238 | "is-utf8": "0.2.1" 3239 | } 3240 | }, 3241 | "strip-indent": { 3242 | "version": "1.0.1", 3243 | "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", 3244 | "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=", 3245 | "dev": true, 3246 | "requires": { 3247 | "get-stdin": "4.0.1" 3248 | } 3249 | }, 3250 | "strip-json-comments": { 3251 | "version": "1.0.4", 3252 | "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-1.0.4.tgz", 3253 | "integrity": "sha1-HhX7ysl9Pumb8tc7TGVrCCu6+5E=", 3254 | "dev": true 3255 | }, 3256 | "supports-color": { 3257 | "version": "0.2.0", 3258 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-0.2.0.tgz", 3259 | "integrity": "sha1-2S3iaU6z9nMjlz1649i1W0wiGQo=", 3260 | "dev": true 3261 | }, 3262 | "throttleit": { 3263 | "version": "1.0.0", 3264 | "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-1.0.0.tgz", 3265 | "integrity": "sha1-nnhYNtr0Z0MUWlmEtiaNgoUorGw=", 3266 | "dev": true 3267 | }, 3268 | "tmp": { 3269 | "version": "0.0.33", 3270 | "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", 3271 | "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", 3272 | "dev": true, 3273 | "requires": { 3274 | "os-tmpdir": "1.0.2" 3275 | } 3276 | }, 3277 | "to-array": { 3278 | "version": "0.1.4", 3279 | "resolved": "https://registry.npmjs.org/to-array/-/to-array-0.1.4.tgz", 3280 | "integrity": "sha1-F+bBH3PdTz10zaek/zI46a2b+JA=", 3281 | "dev": true 3282 | }, 3283 | "tough-cookie": { 3284 | "version": "2.2.2", 3285 | "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.2.2.tgz", 3286 | "integrity": "sha1-yDoYMPTl7wuT7yo0iOck+N4Basc=", 3287 | "dev": true 3288 | }, 3289 | "trim-newlines": { 3290 | "version": "1.0.0", 3291 | "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", 3292 | "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=", 3293 | "dev": true 3294 | }, 3295 | "tunnel-agent": { 3296 | "version": "0.4.3", 3297 | "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.4.3.tgz", 3298 | "integrity": "sha1-Y3PbdpCf5XDgjXNYM2Xtgop07us=", 3299 | "dev": true 3300 | }, 3301 | "tweetnacl": { 3302 | "version": "0.14.5", 3303 | "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", 3304 | "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", 3305 | "dev": true, 3306 | "optional": true 3307 | }, 3308 | "type-is": { 3309 | "version": "1.6.15", 3310 | "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.15.tgz", 3311 | "integrity": "sha1-yrEPtJCeRByChC6v4a1kbIGARBA=", 3312 | "dev": true, 3313 | "requires": { 3314 | "media-typer": "0.3.0", 3315 | "mime-types": "2.1.17" 3316 | } 3317 | }, 3318 | "typedarray": { 3319 | "version": "0.0.6", 3320 | "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", 3321 | "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", 3322 | "dev": true 3323 | }, 3324 | "uglify-js": { 3325 | "version": "2.5.0", 3326 | "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.5.0.tgz", 3327 | "integrity": "sha1-SrXWWkcw7Lek+2LT9JniBU2Y+6E=", 3328 | "dev": true, 3329 | "requires": { 3330 | "async": "0.2.10", 3331 | "source-map": "0.5.7", 3332 | "uglify-to-browserify": "1.0.2", 3333 | "yargs": "3.5.4" 3334 | }, 3335 | "dependencies": { 3336 | "async": { 3337 | "version": "0.2.10", 3338 | "resolved": "https://registry.npmjs.org/async/-/async-0.2.10.tgz", 3339 | "integrity": "sha1-trvgsGdLnXGXCMo43owjfLUmw9E=", 3340 | "dev": true 3341 | }, 3342 | "source-map": { 3343 | "version": "0.5.7", 3344 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", 3345 | "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", 3346 | "dev": true 3347 | } 3348 | } 3349 | }, 3350 | "uglify-to-browserify": { 3351 | "version": "1.0.2", 3352 | "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz", 3353 | "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=", 3354 | "dev": true 3355 | }, 3356 | "ultron": { 3357 | "version": "1.0.2", 3358 | "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.0.2.tgz", 3359 | "integrity": "sha1-rOEWq1V80Zc4ak6I9GhTeMiy5Po=", 3360 | "dev": true 3361 | }, 3362 | "underscore": { 3363 | "version": "1.7.0", 3364 | "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.7.0.tgz", 3365 | "integrity": "sha1-a7rwh3UA02vjTsqlhODbn+8DUgk=", 3366 | "dev": true 3367 | }, 3368 | "underscore.string": { 3369 | "version": "2.2.1", 3370 | "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-2.2.1.tgz", 3371 | "integrity": "sha1-18D6KvXVoaZ/QlPa7pgTLnM/Dxk=", 3372 | "dev": true 3373 | }, 3374 | "unpipe": { 3375 | "version": "1.0.0", 3376 | "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", 3377 | "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", 3378 | "dev": true 3379 | }, 3380 | "uri-path": { 3381 | "version": "1.0.0", 3382 | "resolved": "https://registry.npmjs.org/uri-path/-/uri-path-1.0.0.tgz", 3383 | "integrity": "sha1-l0fwGDWJM8Md4PzP2C0TjmcmLjI=", 3384 | "dev": true 3385 | }, 3386 | "useragent": { 3387 | "version": "2.2.1", 3388 | "resolved": "https://registry.npmjs.org/useragent/-/useragent-2.2.1.tgz", 3389 | "integrity": "sha1-z1k+9PLRdYdei7ZY6pLhik/QbY4=", 3390 | "dev": true, 3391 | "requires": { 3392 | "lru-cache": "2.2.4", 3393 | "tmp": "0.0.33" 3394 | }, 3395 | "dependencies": { 3396 | "lru-cache": { 3397 | "version": "2.2.4", 3398 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.2.4.tgz", 3399 | "integrity": "sha1-bGWGGb7PFAMdDQtZSxYELOTcBj0=", 3400 | "dev": true 3401 | } 3402 | } 3403 | }, 3404 | "util-deprecate": { 3405 | "version": "1.0.2", 3406 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", 3407 | "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", 3408 | "dev": true 3409 | }, 3410 | "utils-merge": { 3411 | "version": "1.0.1", 3412 | "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", 3413 | "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", 3414 | "dev": true 3415 | }, 3416 | "validate-npm-package-license": { 3417 | "version": "3.0.1", 3418 | "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz", 3419 | "integrity": "sha1-KAS6vnEq0zeUWaz74kdGqywwP7w=", 3420 | "dev": true, 3421 | "requires": { 3422 | "spdx-correct": "1.0.2", 3423 | "spdx-expression-parse": "1.0.4" 3424 | } 3425 | }, 3426 | "verror": { 3427 | "version": "1.10.0", 3428 | "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", 3429 | "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", 3430 | "dev": true, 3431 | "requires": { 3432 | "assert-plus": "1.0.0", 3433 | "core-util-is": "1.0.2", 3434 | "extsprintf": "1.3.0" 3435 | }, 3436 | "dependencies": { 3437 | "assert-plus": { 3438 | "version": "1.0.0", 3439 | "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", 3440 | "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", 3441 | "dev": true 3442 | } 3443 | } 3444 | }, 3445 | "void-elements": { 3446 | "version": "2.0.1", 3447 | "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz", 3448 | "integrity": "sha1-wGavtYK7HLQSjWDqkjkulNXp2+w=", 3449 | "dev": true 3450 | }, 3451 | "which": { 3452 | "version": "1.0.9", 3453 | "resolved": "https://registry.npmjs.org/which/-/which-1.0.9.tgz", 3454 | "integrity": "sha1-RgwdoPgQED0DIam2M6+eV15kSG8=", 3455 | "dev": true 3456 | }, 3457 | "window-size": { 3458 | "version": "0.1.0", 3459 | "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz", 3460 | "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=", 3461 | "dev": true 3462 | }, 3463 | "wordwrap": { 3464 | "version": "0.0.2", 3465 | "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", 3466 | "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=", 3467 | "dev": true 3468 | }, 3469 | "wrappy": { 3470 | "version": "1.0.2", 3471 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 3472 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", 3473 | "dev": true 3474 | }, 3475 | "ws": { 3476 | "version": "1.1.4", 3477 | "resolved": "https://registry.npmjs.org/ws/-/ws-1.1.4.tgz", 3478 | "integrity": "sha1-V/QNA2gy5fUFVmKjl8Tedu1mv2E=", 3479 | "dev": true, 3480 | "requires": { 3481 | "options": "0.0.6", 3482 | "ultron": "1.0.2" 3483 | } 3484 | }, 3485 | "wtf-8": { 3486 | "version": "1.0.0", 3487 | "resolved": "https://registry.npmjs.org/wtf-8/-/wtf-8-1.0.0.tgz", 3488 | "integrity": "sha1-OS2LotDxw00e4tYw8V0O+2jhBIo=", 3489 | "dev": true 3490 | }, 3491 | "xmlhttprequest-ssl": { 3492 | "version": "1.5.3", 3493 | "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.3.tgz", 3494 | "integrity": "sha1-GFqIjATspGw+QHDZn3tJ3jUomS0=", 3495 | "dev": true 3496 | }, 3497 | "xtend": { 3498 | "version": "4.0.1", 3499 | "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", 3500 | "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=", 3501 | "dev": true 3502 | }, 3503 | "yargs": { 3504 | "version": "3.5.4", 3505 | "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.5.4.tgz", 3506 | "integrity": "sha1-2K/49mXpTDS9JZvevRv68N3TU2E=", 3507 | "dev": true, 3508 | "requires": { 3509 | "camelcase": "1.2.1", 3510 | "decamelize": "1.2.0", 3511 | "window-size": "0.1.0", 3512 | "wordwrap": "0.0.2" 3513 | }, 3514 | "dependencies": { 3515 | "camelcase": { 3516 | "version": "1.2.1", 3517 | "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", 3518 | "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=", 3519 | "dev": true 3520 | } 3521 | } 3522 | }, 3523 | "yauzl": { 3524 | "version": "2.4.1", 3525 | "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.4.1.tgz", 3526 | "integrity": "sha1-lSj0QtqxsihOWLQ3m7GU4i4MQAU=", 3527 | "dev": true, 3528 | "requires": { 3529 | "fd-slicer": "1.0.1" 3530 | } 3531 | }, 3532 | "yeast": { 3533 | "version": "0.1.2", 3534 | "resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz", 3535 | "integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk=", 3536 | "dev": true 3537 | } 3538 | } 3539 | } 3540 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "unsplash-source-js", 3 | "version": "1.0.0", 4 | "description": "A javascript wrapper for Unsplash Source photos", 5 | "repository": { 6 | "type": "git", 7 | "url": "git@github.com:CrewLabs/unsplash-source-js.git" 8 | }, 9 | "main": "dist/unsplash-source.js", 10 | "scripts": { 11 | "test": "grunt test" 12 | }, 13 | "keywords": [ 14 | "unsplash", 15 | "source", 16 | "photos", 17 | "api", 18 | "wrapper", 19 | "embed" 20 | ], 21 | "author": "Unsplash", 22 | "license": "MIT", 23 | "devDependencies": { 24 | "grunt": "^0.4.5", 25 | "grunt-contrib-concat": "^0.5.1", 26 | "grunt-contrib-jshint": "~0.10.0", 27 | "grunt-contrib-uglify": "^0.10.0", 28 | "grunt-karma": "^0.12.1", 29 | "grunt-notify": "^0.3.1", 30 | "jasmine-core": "^2.3.4", 31 | "karma": "^0.13.14", 32 | "karma-jasmine": "^0.3.6", 33 | "karma-phantomjs-launcher": "^0.2.1", 34 | "phantomjs": "^1.9.18" 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /src/banner.js: -------------------------------------------------------------------------------- 1 | $$\ $$\ $$\ $$\ 2 | $$ | $$ | $$ | $$ | 3 | $$ | $$ |$$$$$$$\ $$$$$$$\ $$$$$$\ $$ | $$$$$$\ $$$$$$$\ $$$$$$$\ 4 | $$ | $$ |$$ __$$\ $$ _____|$$ __$$\ $$ | \____$$\ $$ _____|$$ __$$\ 5 | $$ | $$ |$$ | $$ |\$$$$$$\ $$ / $$ |$$ | $$$$$$$ |\$$$$$$\ $$ | $$ | 6 | $$ | $$ |$$ | $$ | \____$$\ $$ | $$ |$$ |$$ __$$ | \____$$\ $$ | $$ | 7 | \$$$$$$ |$$ | $$ |$$$$$$$ |$$$$$$$ |$$ |\$$$$$$$ |$$$$$$$ |$$ | $$ | 8 | \______/ \__| \__|\_______/ $$ ____/ \__| \_______|\_______/ \__| \__| 9 | $$ | 10 | $$ | 11 | \__| 12 | */ 13 | -------------------------------------------------------------------------------- /src/core.js: -------------------------------------------------------------------------------- 1 | (function (root, undefined) { 2 | "use strict"; 3 | 4 | var UnsplashPhoto = function () { 5 | this.version = "1.0.0"; 6 | this.url = "https://source.unsplash.com"; 7 | this.dimensions = {}; 8 | this.scope = "featured"; 9 | this.randomizationInterval = "perRequest"; 10 | 11 | return this; 12 | }; 13 | 14 | /** 15 | * Finds a photo by its specific public ID 16 | * @param {Int} id 17 | * @return {UnsplashPhoto} 18 | */ 19 | UnsplashPhoto.prototype.find = function (id) { 20 | this.id = id; 21 | 22 | return this; 23 | }; 24 | 25 | /** 26 | * Sets the width of the photo 27 | * 28 | * Note: crops if necessary to maintain the aspect ratio 29 | * 30 | * @param {Int} width 31 | * @return {UnsplashPhoto} 32 | */ 33 | UnsplashPhoto.prototype.width = function (width) { 34 | this.dimensions.width = width; 35 | 36 | return this; 37 | }; 38 | 39 | /** 40 | * Sets the height of the photo 41 | * 42 | * Note: crops if necessary to maintain the aspect ratio 43 | * 44 | * @param {Int} height 45 | * @return {UnsplashPhoto} 46 | */ 47 | UnsplashPhoto.prototype.height = function (height) { 48 | this.dimensions.height = height; 49 | 50 | return this; 51 | }; 52 | 53 | /** 54 | * Shorthand for setting the photo dimensions 55 | * 56 | * Note: crops if necessary to maintain the aspect ratio 57 | * 58 | * @param {Int} width 59 | * @param {Int} height (optional) 60 | * @return {UnsplashPhoto} 61 | */ 62 | UnsplashPhoto.prototype.size = function (width, height) { 63 | this.dimensions = { 64 | width: width, 65 | height: height || width 66 | }; 67 | 68 | return this; 69 | }; 70 | 71 | /** 72 | * Sets the randomization interval 73 | * 74 | * Note: only accepts three possible values (null, daily, or weekly) 75 | * @param {String} interval 76 | * @return {UnsplashPhoto} 77 | */ 78 | UnsplashPhoto.prototype.randomize = function (interval) { 79 | if (interval == "daily" || interval == "weekly") { 80 | this.randomizationInterval = interval; 81 | } else { 82 | this.randomizationInterval = "perRequest"; 83 | } 84 | 85 | return this; 86 | }; 87 | 88 | /** 89 | * Sets the scope to `all` (instead of `featured`) 90 | * @return {UnsplashPhoto} 91 | */ 92 | UnsplashPhoto.prototype.all = function () { 93 | this.scope = "all"; 94 | 95 | return this; 96 | }; 97 | 98 | /** 99 | * Limits the photo to having tags or locations matching the keywords 100 | * @param {[Array || String]} keywords 101 | * @return {UnsplashPhoto} 102 | */ 103 | UnsplashPhoto.prototype.of = function (keywords) { 104 | var sanitizedKeywords = []; 105 | 106 | // Handle a string of comma-separated keywords 107 | if (!Array.isArray(keywords)) { 108 | keywords = keywords.split(","); 109 | } 110 | 111 | // Remove any leading or trailing whitespace from each keyword 112 | keywords.forEach(function (keyword) { 113 | sanitizedKeywords.push(keyword.trim()); 114 | }); 115 | 116 | this.keywords = sanitizedKeywords.join(","); 117 | this.keywords = encodeURI(this.keywords); 118 | 119 | return this; 120 | }; 121 | 122 | /** 123 | * Limits the photos to a specific photographer 124 | * @param {String} username 125 | * @return {UnsplashPhoto} 126 | */ 127 | UnsplashPhoto.prototype.fromUser = function (username) { 128 | this.username = username; 129 | 130 | return this; 131 | }; 132 | 133 | /** 134 | * Limits the photos to a specific category 135 | * @param {String} category 136 | * @return {UnsplashPhoto} 137 | */ 138 | UnsplashPhoto.prototype.fromCategory = function (category) { 139 | this.category = category; 140 | 141 | return this; 142 | }; 143 | 144 | /** 145 | * Limits photos to a specific collection 146 | * @param {String} collectionId 147 | * @return {UnsplashPhoto} 148 | */ 149 | UnsplashPhoto.prototype.fromCollection = function (collectionId) { 150 | this.collection = collectionId; 151 | 152 | return this; 153 | }; 154 | 155 | /** 156 | * Returns true if the photo has dimensions set 157 | * @return {Boolean} 158 | */ 159 | UnsplashPhoto.prototype._hasDimensions = function () { 160 | return !!this.dimensions.width && !!this.dimensions.height; 161 | }; 162 | 163 | /** 164 | * Appends the photo dimensions to the URL 165 | * @return {String} the photo URL 166 | */ 167 | UnsplashPhoto.prototype._appendDimensions = function () { 168 | if (this._hasDimensions()) { 169 | this.url += "/" + this.dimensions.width + "x" + this.dimensions.height; 170 | } 171 | 172 | return this.url; 173 | }; 174 | 175 | /** 176 | * Appends the scope to the URL 177 | * @return {String} the photo URL 178 | */ 179 | UnsplashPhoto.prototype._appendScope = function () { 180 | if (this.scope == "all") { 181 | this.url += "/all"; 182 | } 183 | 184 | return this.url; 185 | }; 186 | 187 | /** 188 | * Appends the keywords to the URL 189 | * @return {String} the photo URL 190 | */ 191 | UnsplashPhoto.prototype._appendKeywords = function () { 192 | if (this.keywords) { 193 | this.url += "?" + this.keywords; 194 | } 195 | 196 | return this.url; 197 | }; 198 | 199 | /** 200 | * Appends the randomization interval to the URL 201 | * @param {Boolean} includeRandomPath include the `/random` path in the URL 202 | * @return {String} the photo URL 203 | */ 204 | UnsplashPhoto.prototype._appendRandomization = function (includeRandomPath) { 205 | if (includeRandomPath && this.randomizationInterval == "perRequest") { 206 | this.url += "/random"; 207 | } else if (this.randomizationInterval == "daily") { 208 | this.url += "/daily"; 209 | } else if (this.randomizationInterval == "weekly") { 210 | this.url += "/weekly"; 211 | } 212 | 213 | return this.url; 214 | }; 215 | 216 | /** 217 | * Creates the URL based on the previous actions 218 | * @return {String} the photo URL 219 | */ 220 | UnsplashPhoto.prototype.fetch = function () { 221 | if (!!this.id) { 222 | this.url += "/" + this.id; 223 | this._appendDimensions(); 224 | return this.url; 225 | 226 | } else if (!!this.username) { 227 | this.url += "/user/" + this.username; 228 | this._appendScope(); 229 | this._appendDimensions(); 230 | this._appendRandomization(false); 231 | this._appendKeywords(); 232 | return this.url; 233 | 234 | } else if (!!this.category) { 235 | this.url += "/category/" + this.category; 236 | this._appendScope(); 237 | this._appendDimensions(); 238 | this._appendRandomization(false); 239 | this._appendKeywords(); 240 | return this.url; 241 | 242 | } else if (!!this.collection) { 243 | this.url += "/collection/" + this.collection; 244 | this._appendScope(); 245 | this._appendDimensions(); 246 | this._appendRandomization(false); 247 | this._appendKeywords(); 248 | return this.url; 249 | 250 | } else { 251 | this._appendScope(); 252 | this._appendDimensions(); 253 | this._appendRandomization(true); 254 | this._appendKeywords(); 255 | return this.url; 256 | 257 | } 258 | }; 259 | 260 | root.UnsplashPhoto = UnsplashPhoto; 261 | 262 | })(this); 263 | -------------------------------------------------------------------------------- /src/polyfills.js: -------------------------------------------------------------------------------- 1 | if (!Array.isArray) { 2 | Array.isArray = function(arg) { 3 | return Object.prototype.toString.call(arg) === '[object Array]'; 4 | }; 5 | } 6 | 7 | if (!String.prototype.trim) { 8 | String.prototype.trim = function () { 9 | return this.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, ''); 10 | }; 11 | } 12 | 13 | if (!Array.prototype.forEach) { 14 | 15 | Array.prototype.forEach = function(callback, thisArg) { 16 | 17 | var T, k; 18 | 19 | if (this == null) { 20 | throw new TypeError(' this is null or not defined'); 21 | } 22 | 23 | // 1. Let O be the result of calling ToObject passing the |this| value as the argument. 24 | var O = Object(this); 25 | 26 | // 2. Let lenValue be the result of calling the Get internal method of O with the argument "length". 27 | // 3. Let len be ToUint32(lenValue). 28 | var len = O.length >>> 0; 29 | 30 | // 4. If IsCallable(callback) is false, throw a TypeError exception. 31 | // See: http://es5.github.com/#x9.11 32 | if (typeof callback !== "function") { 33 | throw new TypeError(callback + ' is not a function'); 34 | } 35 | 36 | // 5. If thisArg was supplied, let T be thisArg; else let T be undefined. 37 | if (arguments.length > 1) { 38 | T = thisArg; 39 | } 40 | 41 | // 6. Let k be 0 42 | k = 0; 43 | 44 | // 7. Repeat, while k < len 45 | while (k < len) { 46 | 47 | var kValue; 48 | 49 | // a. Let Pk be ToString(k). 50 | // This is implicit for LHS operands of the in operator 51 | // b. Let kPresent be the result of calling the HasProperty internal method of O with argument Pk. 52 | // This step can be combined with c 53 | // c. If kPresent is true, then 54 | if (k in O) { 55 | 56 | // i. Let kValue be the result of calling the Get internal method of O with argument Pk. 57 | kValue = O[k]; 58 | 59 | // ii. Call the Call internal method of callback with T as the this value and 60 | // argument list containing kValue, k, and O. 61 | callback.call(T, kValue, k, O); 62 | } 63 | // d. Increase k by 1. 64 | k++; 65 | } 66 | // 8. return undefined 67 | }; 68 | } 69 | -------------------------------------------------------------------------------- /tests/urls.js: -------------------------------------------------------------------------------- 1 | describe("UnsplashPhoto", function () { 2 | 3 | it("exists", function () { 4 | expect(UnsplashPhoto).toBeDefined(); 5 | }); 6 | 7 | describe("#find", function () { 8 | it("sets the ID", function () { 9 | var photo = new UnsplashPhoto(); 10 | 11 | photo.find("uniqueString"); 12 | 13 | expect(photo.id).toEqual("uniqueString"); 14 | }); 15 | }); 16 | 17 | describe("#width", function () { 18 | it("sets the width", function () { 19 | var photo = new UnsplashPhoto(); 20 | 21 | photo.width(200); 22 | 23 | expect(photo.dimensions.width).toEqual(200); 24 | }); 25 | }); 26 | 27 | describe("#height", function () { 28 | it("sets the height", function () { 29 | var photo = new UnsplashPhoto(); 30 | 31 | photo.height(200); 32 | 33 | expect(photo.dimensions.height).toEqual(200); 34 | }); 35 | }); 36 | 37 | describe("#size", function () { 38 | it("sets both dimensions", function () { 39 | var photo = new UnsplashPhoto(); 40 | 41 | photo.size(200); 42 | 43 | expect(photo.dimensions.width).toEqual(200); 44 | expect(photo.dimensions.height).toEqual(200); 45 | }); 46 | 47 | it("sets the width and height", function () { 48 | var photo = new UnsplashPhoto(); 49 | 50 | photo.size(200, 100); 51 | 52 | expect(photo.dimensions.width).toEqual(200); 53 | expect(photo.dimensions.height).toEqual(100); 54 | }); 55 | }); 56 | 57 | describe("#all", function () { 58 | it("sets the scope to all", function () { 59 | var photo = new UnsplashPhoto(); 60 | 61 | photo.all(); 62 | 63 | expect(photo.scope).toEqual("all"); 64 | }); 65 | }); 66 | 67 | describe("#of", function () { 68 | it("sets the keywords from an array", function () { 69 | var photo = new UnsplashPhoto(); 70 | 71 | photo.of(["dog", "cat"]); 72 | 73 | expect(photo.keywords).toEqual("dog,cat"); 74 | }); 75 | 76 | it("sets the keywords from a comma-separated list", function () { 77 | var photo = new UnsplashPhoto(); 78 | 79 | photo.of("dog, cat"); 80 | 81 | expect(photo.keywords).toEqual("dog,cat"); 82 | }); 83 | }); 84 | 85 | describe("#randomize", function () { 86 | it("defaults to having a per request interval", function () { 87 | var photo = new UnsplashPhoto(); 88 | 89 | photo.randomize(); 90 | 91 | expect(photo.randomizationInterval).toEqual("perRequest"); 92 | }); 93 | 94 | it("sets the interval to weekly", function () { 95 | var photo = new UnsplashPhoto(); 96 | 97 | photo.randomize("weekly"); 98 | 99 | expect(photo.randomizationInterval).toEqual("weekly"); 100 | }); 101 | 102 | it("sets the interval to daily", function () { 103 | var photo = new UnsplashPhoto(); 104 | 105 | photo.randomize("daily"); 106 | 107 | expect(photo.randomizationInterval).toEqual("daily"); 108 | }); 109 | 110 | it("sets the interval to per request if it is unsupported", function () { 111 | var photo = new UnsplashPhoto(); 112 | 113 | photo.randomize("yearly"); 114 | 115 | expect(photo.randomizationInterval).toEqual("perRequest"); 116 | }); 117 | }); 118 | 119 | describe("#_hasDimensions", function () { 120 | it("returns true when dimensions are set", function () { 121 | var photo = new UnsplashPhoto(); 122 | 123 | photo.width(200); 124 | photo.height(200); 125 | 126 | expect(photo._hasDimensions()).toBe(true); 127 | }); 128 | }); 129 | 130 | describe("#_appendDimensions", function () { 131 | it("adds the dimensions to the URL", function () { 132 | var photo = new UnsplashPhoto(); 133 | 134 | photo.width(100); 135 | photo.height(200); 136 | 137 | expect(photo._appendDimensions()).toEqual("https://source.unsplash.com/100x200"); 138 | }); 139 | 140 | it("doesn't add the dimensions to the URL if they aren't set", function () { 141 | var photo = new UnsplashPhoto(); 142 | 143 | expect(photo._appendDimensions()).toEqual("https://source.unsplash.com"); 144 | }); 145 | }); 146 | 147 | describe("#_appendScope", function () { 148 | it("adds the scope to the URL", function () { 149 | var photo = new UnsplashPhoto(); 150 | 151 | photo.all(); 152 | 153 | expect(photo._appendScope()).toEqual("https://source.unsplash.com/all"); 154 | }); 155 | }); 156 | 157 | describe("#_appendRandomization", function () { 158 | it("defaults to appending nothing", function () { 159 | var photo = new UnsplashPhoto(); 160 | 161 | expect(photo._appendRandomization()).toEqual("https://source.unsplash.com"); 162 | }); 163 | 164 | it("appends /random if needed for bare URLs", function () { 165 | var photo = new UnsplashPhoto(); 166 | 167 | expect(photo._appendRandomization(true)).toEqual("https://source.unsplash.com/random"); 168 | }); 169 | 170 | it("appends /weekly", function () { 171 | var photo = new UnsplashPhoto(); 172 | 173 | photo.randomize("weekly"); 174 | 175 | expect(photo._appendRandomization()).toEqual("https://source.unsplash.com/weekly"); 176 | }); 177 | 178 | it("appends /daily", function () { 179 | var photo = new UnsplashPhoto(); 180 | 181 | photo.randomize("daily"); 182 | 183 | expect(photo._appendRandomization()).toEqual("https://source.unsplash.com/daily"); 184 | }); 185 | }); 186 | 187 | describe("#_appendKeywords", function () { 188 | it("adds keywords", function () { 189 | var photo = new UnsplashPhoto(); 190 | 191 | photo.of("dog"); 192 | 193 | expect(photo._appendKeywords()).toEqual("https://source.unsplash.com?dog"); 194 | }); 195 | 196 | it("doesn't add keywords if they aren't set", function () { 197 | var photo = new UnsplashPhoto(); 198 | 199 | expect(photo._appendKeywords()).toEqual("https://source.unsplash.com"); 200 | }); 201 | }); 202 | 203 | describe("#fetch", function () { 204 | 205 | describe("returns a specific photo", function () { 206 | var photo; 207 | 208 | beforeEach(function () { 209 | photo = new UnsplashPhoto(); 210 | photo.find("6hxvm0NzYP8"); 211 | }); 212 | 213 | it("", function () { 214 | expect(photo.fetch()).toEqual("https://source.unsplash.com/6hxvm0NzYP8"); 215 | }); 216 | 217 | it("with dimensions", function () { 218 | photo.size(200, 100); 219 | 220 | expect(photo.fetch()).toEqual("https://source.unsplash.com/6hxvm0NzYP8/200x100"); 221 | }); 222 | }); 223 | 224 | describe("returns a random photo from a user", function () { 225 | var photo; 226 | 227 | beforeEach(function () { 228 | photo = new UnsplashPhoto(); 229 | photo.fromUser("crew"); 230 | }); 231 | 232 | it("", function () { 233 | expect(photo.fetch()).toEqual("https://source.unsplash.com/user/crew"); 234 | }); 235 | 236 | it("with dimensions", function () { 237 | photo.size(200, 100); 238 | 239 | expect(photo.fetch()).toEqual("https://source.unsplash.com/user/crew/200x100"); 240 | }); 241 | 242 | it("with interval", function () { 243 | photo.randomize("weekly"); 244 | 245 | expect(photo.fetch()).toEqual("https://source.unsplash.com/user/crew/weekly"); 246 | }); 247 | 248 | it("with keywords", function () { 249 | photo.of("dog"); 250 | 251 | expect(photo.fetch()).toEqual("https://source.unsplash.com/user/crew?dog"); 252 | }); 253 | 254 | 255 | it("with scope", function () { 256 | photo.all(); 257 | 258 | expect(photo.fetch()).toEqual("https://source.unsplash.com/user/crew/all"); 259 | }); 260 | }); 261 | 262 | describe("returns a random photo from a category", function () { 263 | var photo; 264 | 265 | beforeEach(function () { 266 | photo = new UnsplashPhoto(); 267 | photo.fromCategory("buildings"); 268 | }); 269 | 270 | it("", function () { 271 | expect(photo.fetch()).toEqual("https://source.unsplash.com/category/buildings"); 272 | }); 273 | 274 | it("with dimensions", function () { 275 | photo.size(200, 100); 276 | 277 | expect(photo.fetch()).toEqual("https://source.unsplash.com/category/buildings/200x100"); 278 | }); 279 | 280 | it("with interval", function () { 281 | photo.randomize("daily"); 282 | 283 | expect(photo.fetch()).toEqual("https://source.unsplash.com/category/buildings/daily"); 284 | }); 285 | 286 | it("with keywords", function () { 287 | photo.of("dog"); 288 | 289 | expect(photo.fetch()).toEqual("https://source.unsplash.com/category/buildings?dog"); 290 | }); 291 | 292 | it("with scope", function () { 293 | photo.all(); 294 | 295 | expect(photo.fetch()).toEqual("https://source.unsplash.com/category/buildings/all"); 296 | }); 297 | }); 298 | 299 | describe("returns a random photo from a collection", function () { 300 | var photo; 301 | 302 | beforeEach(function () { 303 | photo = new UnsplashPhoto(); 304 | photo.fromCollection("397770"); 305 | }); 306 | 307 | it("", function () { 308 | expect(photo.fetch()).toEqual("https://source.unsplash.com/collection/397770"); 309 | }); 310 | 311 | it("with dimensions", function () { 312 | photo.size(200, 100); 313 | 314 | expect(photo.fetch()).toEqual("https://source.unsplash.com/collection/397770/200x100"); 315 | }); 316 | 317 | it("with interval", function () { 318 | photo.randomize("daily"); 319 | 320 | expect(photo.fetch()).toEqual("https://source.unsplash.com/collection/397770/daily"); 321 | }); 322 | 323 | it("with keywords", function () { 324 | photo.of("dog"); 325 | 326 | expect(photo.fetch()).toEqual("https://source.unsplash.com/collection/397770?dog"); 327 | }); 328 | 329 | it("with scope", function () { 330 | photo.all(); 331 | 332 | expect(photo.fetch()).toEqual("https://source.unsplash.com/collection/397770/all"); 333 | }); 334 | }); 335 | 336 | describe("returns a random photo", function () { 337 | var photo; 338 | 339 | beforeEach(function () { 340 | photo = new UnsplashPhoto(); 341 | }); 342 | 343 | it("", function () { 344 | expect(photo.fetch()).toEqual("https://source.unsplash.com/random"); 345 | }); 346 | 347 | it("with dimensions", function () { 348 | photo.size(200,100); 349 | 350 | expect(photo.fetch()).toEqual("https://source.unsplash.com/200x100/random"); 351 | }); 352 | 353 | it("with interval", function () { 354 | photo.randomize(); 355 | 356 | expect(photo.fetch()).toEqual("https://source.unsplash.com/random"); 357 | }); 358 | 359 | it("with keywords", function () { 360 | photo.of("dog"); 361 | 362 | expect(photo.fetch()).toEqual("https://source.unsplash.com/random?dog"); 363 | }); 364 | 365 | it("with scope", function () { 366 | photo.all(); 367 | 368 | expect(photo.fetch()).toEqual("https://source.unsplash.com/all/random"); 369 | }); 370 | }); 371 | }); 372 | }); 373 | --------------------------------------------------------------------------------