├── .gitignore ├── .learn ├── CONTRIBUTING.md ├── LICENSE.md ├── README.md ├── arrays.js ├── package-lock.json ├── package.json └── test └── arrays-test.js /.gitignore: -------------------------------------------------------------------------------- 1 | 2 | # Created by https://www.gitignore.io/api/node 3 | 4 | ### Node ### 5 | # Logs 6 | logs 7 | *.log 8 | npm-debug.log* 9 | 10 | # Runtime data 11 | pids 12 | *.pid 13 | *.seed 14 | 15 | # Directory for instrumented libs generated by jscoverage/JSCover 16 | lib-cov 17 | 18 | # Coverage directory used by tools like istanbul 19 | coverage 20 | 21 | # nyc test coverage 22 | .nyc_output 23 | 24 | # Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) 25 | .grunt 26 | 27 | # node-waf configuration 28 | .lock-wscript 29 | 30 | # Compiled binary addons (http://nodejs.org/api/addons.html) 31 | build/Release 32 | 33 | # Dependency directories 34 | node_modules 35 | jspm_packages 36 | 37 | # Optional npm cache directory 38 | .npm 39 | 40 | # Optional REPL history 41 | .node_repl_history 42 | 43 | .results.json 44 | -------------------------------------------------------------------------------- /.learn: -------------------------------------------------------------------------------- 1 | tags: 2 | - arrays 3 | - iteration 4 | - readme 5 | languages: 6 | - javascript 7 | resources: 2 -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | # Contributing to Learn.co Curriculum 2 | 3 | We're really exited that you're about to contribute to the [open curriculum](https://learn.co/content-license) on [Learn.co](https://learn.co). If this is your first time contributing, please continue reading to learn how to make the most meaningful and useful impact possible. 4 | 5 | ## Raising an Issue to Encourage a Contribution 6 | 7 | If you notice a problem with the curriculum that you believe needs improvement 8 | but you're unable to make the change yourself, you should raise a Github issue 9 | containing a clear description of the problem. Include relevant snippets of 10 | the content and/or screenshots if applicable. Curriculum owners regularly review 11 | issue lists and your issue will be prioritized and addressed as appropriate. 12 | 13 | ## Submitting a Pull Request to Suggest an Improvement 14 | 15 | If you see an opportunity for improvement and can make the change yourself go 16 | ahead and use a typical git workflow to make it happen: 17 | 18 | * Fork this curriculum repository 19 | * Make the change on your fork, with descriptive commits in the standard format 20 | * Open a Pull Request against this repo 21 | 22 | A curriculum owner will review your change and approve or comment on it in due 23 | course. 24 | 25 | # Why Contribute? 26 | 27 | Curriculum on Learn is publicly and freely available under Learn's 28 | [Educational Content License](https://learn.co/content-license). By 29 | embracing an open-source contribution model, our goal is for the curriculum 30 | on Learn to become, in time, the best educational content the world has 31 | ever seen. 32 | 33 | We need help from the community of Learners to maintain and improve the 34 | educational content. Everything from fixing typos, to correcting 35 | out-dated information, to improving exposition, to adding better examples, 36 | to fixing tests—all contributions to making the curriculum more effective are 37 | welcome. -------------------------------------------------------------------------------- /LICENSE.md: -------------------------------------------------------------------------------- 1 | #Learn.co Educational Content License 2 | 3 | Copyright (c) 2015 Flatiron School, Inc 4 | 5 | The Flatiron School, Inc. owns this Educational Content. However, the Flatiron School supports the development and availability of educational materials in the public domain. Therefore, the Flatiron School grants Users of the Flatiron Educational Content set forth in this repository certain rights to reuse, build upon and share such Educational Content subject to the terms of the Educational Content License set forth [here](http://learn.co/content-license) (http://learn.co/content-license). You must read carefully the terms and conditions contained in the Educational Content License as such terms govern access to and use of the Educational Content. 6 | 7 | Flatiron School is willing to allow you access to and use of the Educational Content only on the condition that you accept all of the terms and conditions contained in the Educational Content License set forth [here](http://learn.co/content-license) (http://learn.co/content-license). By accessing and/or using the Educational Content, you are agreeing to all of the terms and conditions contained in the Educational Content License. If you do not agree to any or all of the terms of the Educational Content License, you are prohibited from accessing, reviewing or using in any way the Educational Content. -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # JavaScript Arrays 2 | 3 | ## Objectives 4 | 5 | - Explain what an array is and why we use it 6 | - Create an array 7 | - Add an element to an array 8 | - Access an element in an array 9 | - Delete an element from an array 10 | 11 | ## Instructions 12 | 13 | You'll be coding along in `arrays.js`. There are tests to run to make sure you're on the right track. 14 | 15 | ## Introduction 16 | 17 | Let's say that we have a list of ingredients for a kickin' grilled cheese (code along in console): 18 | 19 | ``` javascript 20 | var ingredient1 = "bread" 21 | var ingredient2 = "mild cheese" 22 | var ingredient3 = "sharp cheese" 23 | var ingredient4 = "butter" 24 | var ingredient5 = "tomato" 25 | var ingredient6 = "garlic" 26 | ``` 27 | 28 | But now what if we want to make a tomato sauce? Well, we already have garlic and tomato — but we have no idea what recipe they belong to. Pretty soon, we'll have a hard time keeping our ingredients safe, and we'd end up with bread in our tomato sauce. 29 | 30 | ![noooooooo](http://i.giphy.com/fIyBQtxwwZYhq.gif) 31 | 32 | This is an admittedly contrived example, but it goes to show that we can't just put everything in a variable and hope to remember what order things should go in. It also shows that sometimes it would be helpful to be able to group like items together. 33 | 34 | In JavaScript, we can group like items in an object (well, everything in JavaScript is an object — but more on that some other time) called an _array_. An array is an ordered list of items (called "elements" of the array) separated by commas. 35 | 36 | Arrays look like this: `[1, 2, 3]`. 37 | 38 | Or like this: 39 | 40 | ``` javascript 41 | var grilledCheeseIngredients = [ 42 | 'bread', 43 | 'mild cheese', 44 | 'sharp cheese', 45 | 'butter', 46 | 'tomato', 47 | 'garlic' 48 | ] 49 | 50 | var tomatoSauceIngredients = [ 51 | 'tomato', 52 | 'garlic', 53 | 'olive oil', 54 | 'basil', 55 | 'oregano' 56 | ] 57 | ``` 58 | 59 | ## Creation 60 | 61 | JavaScript arrays can contain all types of values and they can be of mixed types. You can create arrays in two different ways, the most common of which is to list values in a pair of square brackets. These are called **array literals**. 62 | 63 | ```javascript 64 | var myArray = [element0, element1, ..., elementN]; 65 | ``` 66 | 67 | Examples: 68 | 69 | ```javascript 70 | var primeNumbers = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37]; 71 | 72 | var tvShows = ["game of thrones", "true detective", "the good wife", "empire"]; 73 | 74 | var weirdGreeting = [ "he", 110, "w", 0, "r", 1, "d" ]; 75 | 76 | var empty = []; 77 | ``` 78 | 79 | The Array constructor is another approach to making a new array. 80 | 81 | ```javascript 82 | var evenNumbers = new Array(); 83 | ``` 84 | 85 | Arrays are _ordered_, meaning that the elements in them will always appear in the same order. The array `[1, 1, 2]`, is different from the array `[1, 2, 1]`. 86 | 87 | **TODO**: In `arrays.js`, define a variable called `chocolateBars`. Its value should be an array of the strings `snickers`, `hundred grand`, `kitkat`, and `skittles`. 88 | 89 | ## Adding an Element 90 | 91 | JavaScript allows us to `push` elements onto the end of an array: 92 | 93 | ```javascript 94 | var superheroines = ["catwoman", "she-hulk", "mystique"]; 95 | 96 | superheroines.push("wonder woman"); 97 | // superheroines is now ["catwoman", "she-hulk", "mystique", "wonder woman"] 98 | ``` 99 | 100 | We can also `unshift` elements onto the beginning of an array: 101 | 102 | ``` javascript 103 | var cities = ["New York", "San Francisco"] 104 | 105 | cities.unshift("Philadelphia") 106 | 107 | // cities is now ["Philadelphia", "New York", "San Francisco"] 108 | ``` 109 | 110 | These actions _change_ the underlying array — in other words, they **mutate** its value. 111 | 112 | Most modern browsers (Chrome, FireFox, and Safari) support what is called the **spread operator** — it's three dots in a row: `...`. When used with an array, it _spreads out_ the array's contents. 113 | 114 | We can use the spread operator to create a new array in place, rather than modifying the original one. Let's try it! 115 | 116 | ``` javascript 117 | var cities = ["New York", "San Francisco"] 118 | 119 | ["Philadelphia", ...cities] // ["Philadelphia", "New York", "San Francisco"] 120 | 121 | cities // ["New York", "San Francisco"] 122 | ``` 123 | 124 | Whoa! Did you see that? Our cities array was untouched when we used the spread operator: `...cities`. We can do the same at the beginning of the array: 125 | 126 | ``` javascript 127 | var cities = ["New York", "San Francisco"] 128 | 129 | [...cities, "Philadelphia"] // ["New York", "San Francisco", "Philadelphia"] 130 | ``` 131 | 132 | To preserve the new array, we need to assign it to a variable: 133 | 134 | ``` javascript 135 | var cities = ["New York", "San Francisco"] 136 | 137 | // we can assign it to the existing `cities` variable 138 | cities = ["Philadelphia", ...cities] 139 | 140 | // but if we have a const 141 | const cats = ["Milo", "Garfield"] 142 | 143 | // we need a new variable: 144 | const moreCats = ["Felix", ...cats] 145 | ``` 146 | 147 | While we _can_ add elements to an array directly at specific indexes 148 | 149 | ``` javascript 150 | var myArray = [1, 2, 3] 151 | 152 | myArray[5] = 5 153 | 154 | myArray // [1, 2, 3, undefined, undefined, 5] 155 | ``` 156 | 157 | it's best not to. We should treat arrays as ordered lists of information that can be **any length**, so updating a specific index should feel like a weird thing to do. Moreover, adding elements directly inserts `undefined` (as demonstrated above) if we also need to increase the array's length, which can lead to unexpected behavior. 158 | 159 | **TODO**: In `arrays.js`, define two functions, `addElementToBeginningOfArray` and `destructivelyAddElementToBeginningOfArray`. Both functions take two parameters, an array and an element to add to the beginning of the array, and both functions should add the element to the beginning of the array and then return the whole array. The destructive function, `destructivelyAddElementToBeginningOfArray`, should alter the original array that's passed in; `addElementToBeginningOfArray`, on the other hand, should return a new array **and not modify the original**. 160 | 161 | **TODO**: Define two more functions, `addElementToEndOfArray` and `destructivelyAddElementToEndOfArray`. These functions also take two arguments, an array and an element to add to the end of the array. `addElementToEndOfArray` **should not** alter the original array; `destructivelyAddElementToEndOfArray` **should** alter the original array. 162 | 163 | ## Accessing an Element 164 | 165 | You can get elements out of arrays if you know their index. Array elements' indexes start at 0 and increment by 1, so the first element's index is `0`, the second element's index is `1`, the third element's is `2`, etc. 166 | 167 | ```javascript 168 | var entrepreneurs = ["Oprah Winfrey", "Laurene Powell Jobs", "Arianna Huffington"]; 169 | 170 | // the line below will print the string "Oprah Winfrey" 171 | console.log(entrepreneurs[0]); 172 | 173 | // the code below will print the string "Arianna Huffington is the co-founder and editress-in-chief of The Huffington Post" 174 | var bio = " is the co-founder and editress-in-chief of The Huffington Post"; 175 | console.log(entrepreneurs[2] + bio); 176 | 177 | // the line below will return undefined 178 | entrepreneurs[9]; 179 | ``` 180 | 181 | **TODO**: Define a function in `arrays.js` called `accessElementInArray`. The function should accept an array and an index and return the element at that index. 182 | 183 | ## Removing an Element 184 | 185 | ### From the Beginning of an Array 186 | 187 | To remove an element from the beginning of an array, we can use the `shift` method: 188 | 189 | ``` javascript 190 | const days = ["Monday", "Tuesday", "Wednesday"] 191 | 192 | days.shift() // returns the removed element, in this case "Monday" 193 | 194 | days // ["Tuesday", "Wednesday"] 195 | ``` 196 | 197 | As with `unshift`, this method is _destructive_; it **mutates** the underlying array. 198 | 199 | **TODO**: Define a function in `arrays.js` called `destructivelyRemoveElementFromBeginningOfArray` that takes an array as its only argument and removes the first element. Your function should then return the entire array, and it **should** mutate the array. 200 | 201 | Because we tend to want to avoid destruction, there is also a way to remove the first element from an array without changing the underlying array: we can use the `slice` method. 202 | 203 | [`slice`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/slice) does just what its name implies: it takes a slice from its array. The first argument specifies where the slice starts, and the second argument specifies where it ends. If there is no second argument, the slice goes from the first argument (the start) to the end of the array. This means removing the first element is as simple as `slice(1)`. 204 | 205 | ``` javascript 206 | var cats = ["Milo", "Garfield", "Otis"] 207 | 208 | cats.slice(1) // ["Garfield", "Otis"] 209 | 210 | cats // ["Milo", "Garfield", "Otis"] 211 | ``` 212 | 213 | As with other non-destructive methods, we need to assign the results to a new variable to save our changes: 214 | 215 | ``` javascript 216 | var cats = ["Milo", "Garfield", "Otis"] 217 | 218 | cats = cats.slice(1) // ["Garfield", "Otis"] 219 | 220 | cats // ["Garfield", "Otis"] 221 | ``` 222 | 223 | `slice` is also handy if we know we want the last `n` elements of an array: pass it a negative index. 224 | 225 | ``` javascript 226 | var cats = ["Milo", "Garfield", "Otis"] 227 | 228 | // get the last 2 cats 229 | cats.slice(-2) // ["Garfield", "Otis"] 230 | 231 | // get the last 1 cat 232 | cats.slice(-1) // ["Otis"] 233 | ``` 234 | 235 | **TODO**: Define a function in `arrays.js` called `removeElementFromBeginningOfArray`. It takes an `array` as its only argument. The function should remove the first element in the array. This function should return the _entire_ array in the same line, and it **should not** mutate the original array. 236 | 237 | ### From the End of an Array 238 | 239 | To remove an element from the end of an array, we can use the `pop` method: 240 | 241 | ``` javascript 242 | var iceCreams = ["chocolate", "vanilla", "raspberry"] 243 | 244 | iceCreams.pop() // returns the removed element, in this case "raspberry" 245 | 246 | iceCreams // ["chocolate", "vanilla"] 247 | ``` 248 | 249 | As with `push`, this method is _destructive_; it **mutates** the underlying array. 250 | 251 | **TODO**: Define a function in `arrays.js` called `destructivelyRemoveElementFromEndOfArray` that takes an array as its only argument and removes the last element. Your function should return the entire array, and it **should** mutate the array. 252 | 253 | We can use `slice` to perform the above action without changing the underlying array. It takes a bit more work than removing the first element, since we want the slice from index `0` (remember, the first element is at index `0`!) to the end. Hmmmm — what property do arrays have that can help us? `length`! 254 | 255 | ``` javascript 256 | var iceCreams = ["chocolate", "vanilla", "raspberry"] 257 | 258 | iceCreams.slice(0, iceCreams.length - 1) // ["chocolate", "vanilla"] 259 | 260 | iceCreams // ["chocolate", "vanilla", "raspberry"] 261 | ``` 262 | 263 | **TODO**: Define a function in `arrays.js` called `removeElementFromEndOfArray` that takes an array as its only argument and removes the last element. Your function should return the array without the last element, and it **should not** mutate the original array. 264 | 265 | ### From the Middle of an Array 266 | 267 | Removing an element from the middle of an array in JavaScript is a bit trickier than removing an element from the beginning or end. We have the `splice` method, which takes an index in the array as its first argument, the number of elements to remove as its second argument, and any number of elements to add as any arguments after the second. All arguments are optional, but with no arguments, `splice()` returns an empty array and does nothing to the target array. 268 | 269 | It might be helpful to refer to [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/splice) to check out their examples, in addition to our examples here. 270 | 271 | ``` javascript 272 | let items = [1, 2, 3, 4] 273 | 274 | // this will remove everything after index 1 (inclusive) 275 | // it returns the removed items: [2, 3, 4] 276 | items.splice(1) 277 | 278 | items // [1] 279 | 280 | items = [1, 2, 3, 4] 281 | 282 | // "at index 1, remove 1 item" 283 | // it returns the removed item(s): [2] 284 | items.splice(1, 1) 285 | 286 | items // [1, 3, 4] 287 | 288 | items = [1, 2, 3, 4] 289 | 290 | // "at index 1, remove 1 item and add 6 and add 7" 291 | // it returns the removed items: [2] 292 | // and adds the items to add starting at the removal index 293 | items.splice(1, 1, 6, 7) 294 | 295 | items // [1, 6, 7, 3, 4] 296 | ``` 297 | 298 | As we noted above, adding elements at specific indexes in the middle of an array _feels_ weird — it's intentionally difficult to do, as doing so with objects (where we have keys instead of sequential indexes) is much more natural. 299 | 300 | **BONUS** 301 | 302 | We can use `slice`, combined with the spread operator, to make removing from the middle of an array much easier. 303 | 304 | ``` javascript 305 | var items = [1, 2, 3, 4, 5] 306 | 307 | // let's remove the third element 308 | 309 | // a slice from the start up to but not including index 2 (the third element) 310 | // and a slice from index 3 to the end 311 | [...items.slice(0, 2), ...items.slice(3)] // [1, 2, 4, 5] 312 | ``` 313 | 314 | Play around with this a bit until it makes sense. It's the trickiest thing that you've encountered so far, so don't sweat it if it takes a little bit to sink in! 315 | 316 | ## Array Wackiness 317 | 318 | ### Array indexes aren't exactly what they seem to be 319 | 320 | If you had to guess, would you say that array indexes are *numbers* or *strings*? Think about it for a second, then read on. 321 | 322 | Array indexes are actually _strings_, even though we commonly refer to them as numbers. But you don't have to take my word for it: try typing `Object.keys([1, 2, ,3])` in your console and see what comes back. 323 | 324 | Ultimately, this means array indexes are strings that can be accessed by array-style notation using brackets, and the numbers will be *coerced* into strings when they're needed under the hood. In a console, try accessing an index using a string to see for yourself: 325 | 326 | ```javascript 327 | var arr = ["under", "the", "hood"]; 328 | 329 | arr[0]; // "under" 330 | arr['0']; // "under" 331 | arr[02]; // 02 the number *is* 2, so you get "hood" 332 | arr['02']: // '02' the string is *not* 2, so you get undefined 333 | ``` 334 | 335 | This little tidbit might come in handy if you ever try to assign a value to an array index by using a string unintentionally. Like, say, by getting your array positions from a zero-filled formatted list of numbers which you store as strings, then using those strings to access array elements. 336 | 337 | Or by indexing an array with a variable whose contents don't in any way represent a number--like typing `myArray['bonobo monkey'] = 27`. 338 | 339 | You'll get no complaints, because rather than adding an index to the array, you're adding a *property*. Speaking of which... 340 | 341 | ### We can add properties to arrays 342 | 343 | In JavaScript, everything is ultimately an object. We'll explore more about what that means when we cover objects, but for now, know that this means that we can add _properties_ to just about anything, including arrays. 344 | 345 | A property is a named piece of information. They're _kind of_ like variables (don't go too far with that analogy) but we can only get that information with reference to the property owner. 346 | 347 | What makes arrays special, then? Arrays keep track of how many elements they have in them via the `length` property: `[1, 2, 3].length // 3`. `length` doesn't work like other keys/indexes in objects/arrays — it updates automatically, and if we change it, we change the whole array. 348 | 349 | ``` javascript 350 | var myArray = [1, 2, 3] 351 | 352 | myArray.length // 3 353 | 354 | myArray.length = 1 355 | 356 | myArray // [1] (!!!) 357 | ``` 358 | 359 | It's important to remember that arrays in JavaScript are kind of wonky. You can assign properties to them: 360 | 361 | ```js 362 | var array = [1, 2, 3]; 363 | 364 | array.myProperty = "I'm a property!"; 365 | ``` 366 | 367 | Which can lead to weird behavior: 368 | 369 | ```js 370 | array; 371 | // [1, 2, 3]; 372 | 373 | // Where did our property go? 374 | array.myProperty; 375 | // "I'm a property!"; 376 | 377 | array.length; 378 | // 3 - Would you have expected 3 or 4? 379 | ``` 380 | 381 | We don't tend to do these kinds of things on purpose, but it's important to be aware that they can happen so that you have a good sense of where to look if/when strange bugs start to appear. 382 | 383 | ## Resources 384 | 385 | * [MDN - Arrays](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array) 386 | * [Codecademy - Arrays](http://www.codecademy.com/glossary/javascript) 387 | -------------------------------------------------------------------------------- /arrays.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/learn-co-students/javascript-arrays-js-intro-000/f7352d788b77ae1036d65777d3b2397d62354127/arrays.js -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "javascript-arrays", 3 | "version": "0.1.0", 4 | "lockfileVersion": 1, 5 | "requires": true, 6 | "dependencies": { 7 | "abab": { 8 | "version": "1.0.4", 9 | "resolved": "https://registry.npmjs.org/abab/-/abab-1.0.4.tgz", 10 | "integrity": "sha1-X6rZwsB/YN12dw9xzwJbYqY8/U4=", 11 | "dev": true 12 | }, 13 | "acorn": { 14 | "version": "4.0.13", 15 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-4.0.13.tgz", 16 | "integrity": "sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c=", 17 | "dev": true 18 | }, 19 | "acorn-globals": { 20 | "version": "3.1.0", 21 | "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-3.1.0.tgz", 22 | "integrity": "sha1-/YJw9x+7SZawBPqIDuXUZXOnMb8=", 23 | "dev": true, 24 | "requires": { 25 | "acorn": "^4.0.4" 26 | } 27 | }, 28 | "ajv": { 29 | "version": "5.5.2", 30 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", 31 | "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", 32 | "dev": true, 33 | "requires": { 34 | "co": "^4.6.0", 35 | "fast-deep-equal": "^1.0.0", 36 | "fast-json-stable-stringify": "^2.0.0", 37 | "json-schema-traverse": "^0.3.0" 38 | } 39 | }, 40 | "ansi-colors": { 41 | "version": "3.2.3", 42 | "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.3.tgz", 43 | "integrity": "sha512-LEHHyuhlPY3TmuUYMh2oz89lTShfvgbmzaBcxve9t/9Wuy7Dwf4yoAKcND7KFT1HAQfqZ12qtc+DUrBMeKF9nw==", 44 | "dev": true 45 | }, 46 | "ansi-regex": { 47 | "version": "3.0.0", 48 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", 49 | "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", 50 | "dev": true 51 | }, 52 | "ansi-styles": { 53 | "version": "3.2.1", 54 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", 55 | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", 56 | "dev": true, 57 | "requires": { 58 | "color-convert": "^1.9.0" 59 | } 60 | }, 61 | "anymatch": { 62 | "version": "3.1.1", 63 | "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", 64 | "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", 65 | "dev": true, 66 | "requires": { 67 | "normalize-path": "^3.0.0", 68 | "picomatch": "^2.0.4" 69 | } 70 | }, 71 | "argparse": { 72 | "version": "1.0.10", 73 | "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", 74 | "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", 75 | "dev": true, 76 | "requires": { 77 | "sprintf-js": "~1.0.2" 78 | } 79 | }, 80 | "array-equal": { 81 | "version": "1.0.0", 82 | "resolved": "https://registry.npmjs.org/array-equal/-/array-equal-1.0.0.tgz", 83 | "integrity": "sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM=", 84 | "dev": true 85 | }, 86 | "asn1": { 87 | "version": "0.2.3", 88 | "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz", 89 | "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=", 90 | "dev": true 91 | }, 92 | "assert-plus": { 93 | "version": "1.0.0", 94 | "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", 95 | "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", 96 | "dev": true 97 | }, 98 | "assertion-error": { 99 | "version": "1.1.0", 100 | "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", 101 | "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", 102 | "dev": true 103 | }, 104 | "asynckit": { 105 | "version": "0.4.0", 106 | "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", 107 | "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", 108 | "dev": true 109 | }, 110 | "aws-sign2": { 111 | "version": "0.7.0", 112 | "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", 113 | "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", 114 | "dev": true 115 | }, 116 | "aws4": { 117 | "version": "1.7.0", 118 | "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.7.0.tgz", 119 | "integrity": "sha512-32NDda82rhwD9/JBCCkB+MRYDp0oSvlo2IL6rQWA10PQi7tDUM3eqMSltXmY+Oyl/7N3P3qNtAlv7X0d9bI28w==", 120 | "dev": true 121 | }, 122 | "balanced-match": { 123 | "version": "1.0.0", 124 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", 125 | "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", 126 | "dev": true 127 | }, 128 | "bcrypt-pbkdf": { 129 | "version": "1.0.1", 130 | "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz", 131 | "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=", 132 | "dev": true, 133 | "optional": true, 134 | "requires": { 135 | "tweetnacl": "^0.14.3" 136 | } 137 | }, 138 | "binary-extensions": { 139 | "version": "2.0.0", 140 | "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.0.0.tgz", 141 | "integrity": "sha512-Phlt0plgpIIBOGTT/ehfFnbNlfsDEiqmzE2KRXoX1bLIlir4X/MR+zSyBEkL05ffWgnRSf/DXv+WrUAVr93/ow==", 142 | "dev": true 143 | }, 144 | "brace-expansion": { 145 | "version": "1.1.11", 146 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 147 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 148 | "dev": true, 149 | "requires": { 150 | "balanced-match": "^1.0.0", 151 | "concat-map": "0.0.1" 152 | } 153 | }, 154 | "braces": { 155 | "version": "3.0.2", 156 | "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", 157 | "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", 158 | "dev": true, 159 | "requires": { 160 | "fill-range": "^7.0.1" 161 | } 162 | }, 163 | "browser-stdout": { 164 | "version": "1.3.1", 165 | "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", 166 | "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", 167 | "dev": true 168 | }, 169 | "camelcase": { 170 | "version": "5.3.1", 171 | "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", 172 | "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", 173 | "dev": true 174 | }, 175 | "caseless": { 176 | "version": "0.12.0", 177 | "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", 178 | "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", 179 | "dev": true 180 | }, 181 | "chai": { 182 | "version": "3.5.0", 183 | "resolved": "https://registry.npmjs.org/chai/-/chai-3.5.0.tgz", 184 | "integrity": "sha1-TQJjewZ/6Vi9v906QOxW/vc3Mkc=", 185 | "dev": true, 186 | "requires": { 187 | "assertion-error": "^1.0.1", 188 | "deep-eql": "^0.1.3", 189 | "type-detect": "^1.0.0" 190 | } 191 | }, 192 | "chalk": { 193 | "version": "2.4.2", 194 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", 195 | "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", 196 | "dev": true, 197 | "requires": { 198 | "ansi-styles": "^3.2.1", 199 | "escape-string-regexp": "^1.0.5", 200 | "supports-color": "^5.3.0" 201 | }, 202 | "dependencies": { 203 | "supports-color": { 204 | "version": "5.5.0", 205 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", 206 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", 207 | "dev": true, 208 | "requires": { 209 | "has-flag": "^3.0.0" 210 | } 211 | } 212 | } 213 | }, 214 | "chokidar": { 215 | "version": "3.3.0", 216 | "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.3.0.tgz", 217 | "integrity": "sha512-dGmKLDdT3Gdl7fBUe8XK+gAtGmzy5Fn0XkkWQuYxGIgWVPPse2CxFA5mtrlD0TOHaHjEUqkWNyP1XdHoJES/4A==", 218 | "dev": true, 219 | "requires": { 220 | "anymatch": "~3.1.1", 221 | "braces": "~3.0.2", 222 | "fsevents": "~2.1.1", 223 | "glob-parent": "~5.1.0", 224 | "is-binary-path": "~2.1.0", 225 | "is-glob": "~4.0.1", 226 | "normalize-path": "~3.0.0", 227 | "readdirp": "~3.2.0" 228 | } 229 | }, 230 | "cliui": { 231 | "version": "5.0.0", 232 | "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", 233 | "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", 234 | "dev": true, 235 | "requires": { 236 | "string-width": "^3.1.0", 237 | "strip-ansi": "^5.2.0", 238 | "wrap-ansi": "^5.1.0" 239 | }, 240 | "dependencies": { 241 | "ansi-regex": { 242 | "version": "4.1.0", 243 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", 244 | "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", 245 | "dev": true 246 | }, 247 | "string-width": { 248 | "version": "3.1.0", 249 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", 250 | "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", 251 | "dev": true, 252 | "requires": { 253 | "emoji-regex": "^7.0.1", 254 | "is-fullwidth-code-point": "^2.0.0", 255 | "strip-ansi": "^5.1.0" 256 | } 257 | }, 258 | "strip-ansi": { 259 | "version": "5.2.0", 260 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", 261 | "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", 262 | "dev": true, 263 | "requires": { 264 | "ansi-regex": "^4.1.0" 265 | } 266 | } 267 | } 268 | }, 269 | "co": { 270 | "version": "4.6.0", 271 | "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", 272 | "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", 273 | "dev": true 274 | }, 275 | "color-convert": { 276 | "version": "1.9.3", 277 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", 278 | "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", 279 | "dev": true, 280 | "requires": { 281 | "color-name": "1.1.3" 282 | } 283 | }, 284 | "color-name": { 285 | "version": "1.1.3", 286 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", 287 | "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", 288 | "dev": true 289 | }, 290 | "combined-stream": { 291 | "version": "1.0.6", 292 | "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz", 293 | "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=", 294 | "dev": true, 295 | "requires": { 296 | "delayed-stream": "~1.0.0" 297 | } 298 | }, 299 | "concat-map": { 300 | "version": "0.0.1", 301 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 302 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", 303 | "dev": true 304 | }, 305 | "content-type-parser": { 306 | "version": "1.0.2", 307 | "resolved": "https://registry.npmjs.org/content-type-parser/-/content-type-parser-1.0.2.tgz", 308 | "integrity": "sha512-lM4l4CnMEwOLHAHr/P6MEZwZFPJFtAAKgL6pogbXmVZggIqXhdB6RbBtPOTsw2FcXwYhehRGERJmRrjOiIB8pQ==", 309 | "dev": true 310 | }, 311 | "core-util-is": { 312 | "version": "1.0.2", 313 | "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", 314 | "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", 315 | "dev": true 316 | }, 317 | "cssom": { 318 | "version": "0.3.2", 319 | "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.2.tgz", 320 | "integrity": "sha1-uANhcMefB6kP8vFuIihAJ6JDhIs=", 321 | "dev": true 322 | }, 323 | "cssstyle": { 324 | "version": "0.2.37", 325 | "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-0.2.37.tgz", 326 | "integrity": "sha1-VBCXI0yyUTyDzu06zdwn/yeYfVQ=", 327 | "dev": true, 328 | "requires": { 329 | "cssom": "0.3.x" 330 | } 331 | }, 332 | "dashdash": { 333 | "version": "1.14.1", 334 | "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", 335 | "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", 336 | "dev": true, 337 | "requires": { 338 | "assert-plus": "^1.0.0" 339 | } 340 | }, 341 | "debug": { 342 | "version": "3.2.6", 343 | "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", 344 | "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", 345 | "dev": true, 346 | "requires": { 347 | "ms": "^2.1.1" 348 | } 349 | }, 350 | "decamelize": { 351 | "version": "1.2.0", 352 | "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", 353 | "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", 354 | "dev": true 355 | }, 356 | "deep-eql": { 357 | "version": "0.1.3", 358 | "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-0.1.3.tgz", 359 | "integrity": "sha1-71WKyrjeJSBs1xOQbXTlaTDrafI=", 360 | "dev": true, 361 | "requires": { 362 | "type-detect": "0.1.1" 363 | }, 364 | "dependencies": { 365 | "type-detect": { 366 | "version": "0.1.1", 367 | "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-0.1.1.tgz", 368 | "integrity": "sha1-C6XsKohWQORw6k6FBZcZANrFiCI=", 369 | "dev": true 370 | } 371 | } 372 | }, 373 | "deep-is": { 374 | "version": "0.1.3", 375 | "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", 376 | "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", 377 | "dev": true 378 | }, 379 | "define-properties": { 380 | "version": "1.1.3", 381 | "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", 382 | "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", 383 | "dev": true, 384 | "requires": { 385 | "object-keys": "^1.0.12" 386 | } 387 | }, 388 | "delayed-stream": { 389 | "version": "1.0.0", 390 | "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", 391 | "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", 392 | "dev": true 393 | }, 394 | "diff": { 395 | "version": "3.5.0", 396 | "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", 397 | "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", 398 | "dev": true 399 | }, 400 | "ecc-jsbn": { 401 | "version": "0.1.1", 402 | "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz", 403 | "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=", 404 | "dev": true, 405 | "optional": true, 406 | "requires": { 407 | "jsbn": "~0.1.0" 408 | } 409 | }, 410 | "emoji-regex": { 411 | "version": "7.0.3", 412 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", 413 | "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", 414 | "dev": true 415 | }, 416 | "es-abstract": { 417 | "version": "1.17.4", 418 | "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.4.tgz", 419 | "integrity": "sha512-Ae3um/gb8F0mui/jPL+QiqmglkUsaQf7FwBEHYIFkztkneosu9imhqHpBzQ3h1vit8t5iQ74t6PEVvphBZiuiQ==", 420 | "dev": true, 421 | "requires": { 422 | "es-to-primitive": "^1.2.1", 423 | "function-bind": "^1.1.1", 424 | "has": "^1.0.3", 425 | "has-symbols": "^1.0.1", 426 | "is-callable": "^1.1.5", 427 | "is-regex": "^1.0.5", 428 | "object-inspect": "^1.7.0", 429 | "object-keys": "^1.1.1", 430 | "object.assign": "^4.1.0", 431 | "string.prototype.trimleft": "^2.1.1", 432 | "string.prototype.trimright": "^2.1.1" 433 | } 434 | }, 435 | "es-to-primitive": { 436 | "version": "1.2.1", 437 | "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", 438 | "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", 439 | "dev": true, 440 | "requires": { 441 | "is-callable": "^1.1.4", 442 | "is-date-object": "^1.0.1", 443 | "is-symbol": "^1.0.2" 444 | } 445 | }, 446 | "escape-string-regexp": { 447 | "version": "1.0.5", 448 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", 449 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", 450 | "dev": true 451 | }, 452 | "escodegen": { 453 | "version": "1.10.0", 454 | "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.10.0.tgz", 455 | "integrity": "sha512-fjUOf8johsv23WuIKdNQU4P9t9jhQ4Qzx6pC2uW890OloK3Zs1ZAoCNpg/2larNF501jLl3UNy0kIRcF6VI22g==", 456 | "dev": true, 457 | "requires": { 458 | "esprima": "^3.1.3", 459 | "estraverse": "^4.2.0", 460 | "esutils": "^2.0.2", 461 | "optionator": "^0.8.1", 462 | "source-map": "~0.6.1" 463 | } 464 | }, 465 | "esprima": { 466 | "version": "3.1.3", 467 | "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz", 468 | "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=", 469 | "dev": true 470 | }, 471 | "estraverse": { 472 | "version": "4.2.0", 473 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", 474 | "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=", 475 | "dev": true 476 | }, 477 | "esutils": { 478 | "version": "2.0.2", 479 | "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", 480 | "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", 481 | "dev": true 482 | }, 483 | "extend": { 484 | "version": "3.0.2", 485 | "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", 486 | "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", 487 | "dev": true 488 | }, 489 | "extsprintf": { 490 | "version": "1.3.0", 491 | "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", 492 | "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", 493 | "dev": true 494 | }, 495 | "fast-deep-equal": { 496 | "version": "1.1.0", 497 | "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", 498 | "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=", 499 | "dev": true 500 | }, 501 | "fast-json-stable-stringify": { 502 | "version": "2.0.0", 503 | "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", 504 | "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=", 505 | "dev": true 506 | }, 507 | "fast-levenshtein": { 508 | "version": "2.0.6", 509 | "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", 510 | "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", 511 | "dev": true 512 | }, 513 | "fill-range": { 514 | "version": "7.0.1", 515 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", 516 | "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", 517 | "dev": true, 518 | "requires": { 519 | "to-regex-range": "^5.0.1" 520 | } 521 | }, 522 | "find-up": { 523 | "version": "3.0.0", 524 | "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", 525 | "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", 526 | "dev": true, 527 | "requires": { 528 | "locate-path": "^3.0.0" 529 | } 530 | }, 531 | "flat": { 532 | "version": "4.1.0", 533 | "resolved": "https://registry.npmjs.org/flat/-/flat-4.1.0.tgz", 534 | "integrity": "sha512-Px/TiLIznH7gEDlPXcUD4KnBusa6kR6ayRUVcnEAbreRIuhkqow/mun59BuRXwoYk7ZQOLW1ZM05ilIvK38hFw==", 535 | "dev": true, 536 | "requires": { 537 | "is-buffer": "~2.0.3" 538 | } 539 | }, 540 | "forever-agent": { 541 | "version": "0.6.1", 542 | "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", 543 | "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", 544 | "dev": true 545 | }, 546 | "form-data": { 547 | "version": "2.3.2", 548 | "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.2.tgz", 549 | "integrity": "sha1-SXBJi+YEwgwAXU9cI67NIda0kJk=", 550 | "dev": true, 551 | "requires": { 552 | "asynckit": "^0.4.0", 553 | "combined-stream": "1.0.6", 554 | "mime-types": "^2.1.12" 555 | } 556 | }, 557 | "fs.realpath": { 558 | "version": "1.0.0", 559 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 560 | "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", 561 | "dev": true 562 | }, 563 | "fsevents": { 564 | "version": "2.1.2", 565 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.2.tgz", 566 | "integrity": "sha512-R4wDiBwZ0KzpgOWetKDug1FZcYhqYnUYKtfZYt4mD5SBz76q0KR4Q9o7GIPamsVPGmW3EYPPJ0dOOjvx32ldZA==", 567 | "dev": true, 568 | "optional": true 569 | }, 570 | "function-bind": { 571 | "version": "1.1.1", 572 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", 573 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", 574 | "dev": true 575 | }, 576 | "get-caller-file": { 577 | "version": "2.0.5", 578 | "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", 579 | "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", 580 | "dev": true 581 | }, 582 | "getpass": { 583 | "version": "0.1.7", 584 | "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", 585 | "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", 586 | "dev": true, 587 | "requires": { 588 | "assert-plus": "^1.0.0" 589 | } 590 | }, 591 | "glob": { 592 | "version": "7.1.3", 593 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", 594 | "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", 595 | "dev": true, 596 | "requires": { 597 | "fs.realpath": "^1.0.0", 598 | "inflight": "^1.0.4", 599 | "inherits": "2", 600 | "minimatch": "^3.0.4", 601 | "once": "^1.3.0", 602 | "path-is-absolute": "^1.0.0" 603 | } 604 | }, 605 | "glob-parent": { 606 | "version": "5.1.0", 607 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.0.tgz", 608 | "integrity": "sha512-qjtRgnIVmOfnKUE3NJAQEdk+lKrxfw8t5ke7SXtfMTHcjsBfOfWXCQfdb30zfDoZQ2IRSIiidmjtbHZPZ++Ihw==", 609 | "dev": true, 610 | "requires": { 611 | "is-glob": "^4.0.1" 612 | } 613 | }, 614 | "growl": { 615 | "version": "1.10.5", 616 | "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", 617 | "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", 618 | "dev": true 619 | }, 620 | "har-schema": { 621 | "version": "2.0.0", 622 | "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", 623 | "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", 624 | "dev": true 625 | }, 626 | "har-validator": { 627 | "version": "5.0.3", 628 | "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.0.3.tgz", 629 | "integrity": "sha1-ukAsJmGU8VlW7xXg/PJCmT9qff0=", 630 | "dev": true, 631 | "requires": { 632 | "ajv": "^5.1.0", 633 | "har-schema": "^2.0.0" 634 | } 635 | }, 636 | "has": { 637 | "version": "1.0.3", 638 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", 639 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", 640 | "dev": true, 641 | "requires": { 642 | "function-bind": "^1.1.1" 643 | } 644 | }, 645 | "has-flag": { 646 | "version": "3.0.0", 647 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", 648 | "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", 649 | "dev": true 650 | }, 651 | "has-symbols": { 652 | "version": "1.0.1", 653 | "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", 654 | "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", 655 | "dev": true 656 | }, 657 | "he": { 658 | "version": "1.2.0", 659 | "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", 660 | "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", 661 | "dev": true 662 | }, 663 | "html-encoding-sniffer": { 664 | "version": "1.0.2", 665 | "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz", 666 | "integrity": "sha512-71lZziiDnsuabfdYiUeWdCVyKuqwWi23L8YeIgV9jSSZHCtb6wB1BKWooH7L3tn4/FuZJMVWyNaIDr4RGmaSYw==", 667 | "dev": true, 668 | "requires": { 669 | "whatwg-encoding": "^1.0.1" 670 | } 671 | }, 672 | "http-signature": { 673 | "version": "1.2.0", 674 | "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", 675 | "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", 676 | "dev": true, 677 | "requires": { 678 | "assert-plus": "^1.0.0", 679 | "jsprim": "^1.2.2", 680 | "sshpk": "^1.7.0" 681 | } 682 | }, 683 | "iconv-lite": { 684 | "version": "0.4.19", 685 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz", 686 | "integrity": "sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ==", 687 | "dev": true 688 | }, 689 | "inflight": { 690 | "version": "1.0.6", 691 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 692 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", 693 | "dev": true, 694 | "requires": { 695 | "once": "^1.3.0", 696 | "wrappy": "1" 697 | } 698 | }, 699 | "inherits": { 700 | "version": "2.0.4", 701 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 702 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", 703 | "dev": true 704 | }, 705 | "is-binary-path": { 706 | "version": "2.1.0", 707 | "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", 708 | "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", 709 | "dev": true, 710 | "requires": { 711 | "binary-extensions": "^2.0.0" 712 | } 713 | }, 714 | "is-buffer": { 715 | "version": "2.0.4", 716 | "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.4.tgz", 717 | "integrity": "sha512-Kq1rokWXOPXWuaMAqZiJW4XxsmD9zGx9q4aePabbn3qCRGedtH7Cm+zV8WETitMfu1wdh+Rvd6w5egwSngUX2A==", 718 | "dev": true 719 | }, 720 | "is-callable": { 721 | "version": "1.1.5", 722 | "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.5.tgz", 723 | "integrity": "sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q==", 724 | "dev": true 725 | }, 726 | "is-date-object": { 727 | "version": "1.0.2", 728 | "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz", 729 | "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==", 730 | "dev": true 731 | }, 732 | "is-extglob": { 733 | "version": "2.1.1", 734 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", 735 | "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", 736 | "dev": true 737 | }, 738 | "is-fullwidth-code-point": { 739 | "version": "2.0.0", 740 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", 741 | "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", 742 | "dev": true 743 | }, 744 | "is-glob": { 745 | "version": "4.0.1", 746 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", 747 | "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", 748 | "dev": true, 749 | "requires": { 750 | "is-extglob": "^2.1.1" 751 | } 752 | }, 753 | "is-number": { 754 | "version": "7.0.0", 755 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", 756 | "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", 757 | "dev": true 758 | }, 759 | "is-regex": { 760 | "version": "1.0.5", 761 | "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.5.tgz", 762 | "integrity": "sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ==", 763 | "dev": true, 764 | "requires": { 765 | "has": "^1.0.3" 766 | } 767 | }, 768 | "is-string": { 769 | "version": "1.0.5", 770 | "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.5.tgz", 771 | "integrity": "sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ==", 772 | "dev": true 773 | }, 774 | "is-symbol": { 775 | "version": "1.0.3", 776 | "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", 777 | "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", 778 | "dev": true, 779 | "requires": { 780 | "has-symbols": "^1.0.1" 781 | } 782 | }, 783 | "is-typedarray": { 784 | "version": "1.0.0", 785 | "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", 786 | "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", 787 | "dev": true 788 | }, 789 | "isexe": { 790 | "version": "2.0.0", 791 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", 792 | "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", 793 | "dev": true 794 | }, 795 | "isstream": { 796 | "version": "0.1.2", 797 | "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", 798 | "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", 799 | "dev": true 800 | }, 801 | "js-yaml": { 802 | "version": "3.13.1", 803 | "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", 804 | "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", 805 | "dev": true, 806 | "requires": { 807 | "argparse": "^1.0.7", 808 | "esprima": "^4.0.0" 809 | }, 810 | "dependencies": { 811 | "esprima": { 812 | "version": "4.0.1", 813 | "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", 814 | "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", 815 | "dev": true 816 | } 817 | } 818 | }, 819 | "jsbn": { 820 | "version": "0.1.1", 821 | "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", 822 | "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", 823 | "dev": true, 824 | "optional": true 825 | }, 826 | "jsdom": { 827 | "version": "9.12.0", 828 | "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-9.12.0.tgz", 829 | "integrity": "sha1-6MVG//ywbADUgzyoRBD+1/igl9Q=", 830 | "dev": true, 831 | "requires": { 832 | "abab": "^1.0.3", 833 | "acorn": "^4.0.4", 834 | "acorn-globals": "^3.1.0", 835 | "array-equal": "^1.0.0", 836 | "content-type-parser": "^1.0.1", 837 | "cssom": ">= 0.3.2 < 0.4.0", 838 | "cssstyle": ">= 0.2.37 < 0.3.0", 839 | "escodegen": "^1.6.1", 840 | "html-encoding-sniffer": "^1.0.1", 841 | "nwmatcher": ">= 1.3.9 < 2.0.0", 842 | "parse5": "^1.5.1", 843 | "request": "^2.79.0", 844 | "sax": "^1.2.1", 845 | "symbol-tree": "^3.2.1", 846 | "tough-cookie": "^2.3.2", 847 | "webidl-conversions": "^4.0.0", 848 | "whatwg-encoding": "^1.0.1", 849 | "whatwg-url": "^4.3.0", 850 | "xml-name-validator": "^2.0.1" 851 | } 852 | }, 853 | "json-schema": { 854 | "version": "0.2.3", 855 | "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", 856 | "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", 857 | "dev": true 858 | }, 859 | "json-schema-traverse": { 860 | "version": "0.3.1", 861 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", 862 | "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=", 863 | "dev": true 864 | }, 865 | "json-stringify-safe": { 866 | "version": "5.0.1", 867 | "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", 868 | "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", 869 | "dev": true 870 | }, 871 | "jsprim": { 872 | "version": "1.4.1", 873 | "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", 874 | "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", 875 | "dev": true, 876 | "requires": { 877 | "assert-plus": "1.0.0", 878 | "extsprintf": "1.3.0", 879 | "json-schema": "0.2.3", 880 | "verror": "1.10.0" 881 | } 882 | }, 883 | "levn": { 884 | "version": "0.3.0", 885 | "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", 886 | "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", 887 | "dev": true, 888 | "requires": { 889 | "prelude-ls": "~1.1.2", 890 | "type-check": "~0.3.2" 891 | } 892 | }, 893 | "locate-path": { 894 | "version": "3.0.0", 895 | "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", 896 | "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", 897 | "dev": true, 898 | "requires": { 899 | "p-locate": "^3.0.0", 900 | "path-exists": "^3.0.0" 901 | } 902 | }, 903 | "lodash": { 904 | "version": "4.17.19", 905 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.19.tgz", 906 | "integrity": "sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ==", 907 | "dev": true 908 | }, 909 | "lodash.once": { 910 | "version": "4.1.1", 911 | "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", 912 | "integrity": "sha1-DdOXEhPHxW34gJd9UEyI+0cal6w=", 913 | "dev": true 914 | }, 915 | "log-symbols": { 916 | "version": "2.2.0", 917 | "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", 918 | "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", 919 | "dev": true, 920 | "requires": { 921 | "chalk": "^2.0.1" 922 | } 923 | }, 924 | "mime-db": { 925 | "version": "1.33.0", 926 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz", 927 | "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==", 928 | "dev": true 929 | }, 930 | "mime-types": { 931 | "version": "2.1.18", 932 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz", 933 | "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==", 934 | "dev": true, 935 | "requires": { 936 | "mime-db": "~1.33.0" 937 | } 938 | }, 939 | "minimatch": { 940 | "version": "3.0.4", 941 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", 942 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", 943 | "dev": true, 944 | "requires": { 945 | "brace-expansion": "^1.1.7" 946 | } 947 | }, 948 | "minimist": { 949 | "version": "0.0.8", 950 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", 951 | "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", 952 | "dev": true 953 | }, 954 | "mkdirp": { 955 | "version": "0.5.1", 956 | "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", 957 | "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", 958 | "dev": true, 959 | "requires": { 960 | "minimist": "0.0.8" 961 | } 962 | }, 963 | "mocha": { 964 | "version": "7.0.1", 965 | "resolved": "https://registry.npmjs.org/mocha/-/mocha-7.0.1.tgz", 966 | "integrity": "sha512-9eWmWTdHLXh72rGrdZjNbG3aa1/3NRPpul1z0D979QpEnFdCG0Q5tv834N+94QEN2cysfV72YocQ3fn87s70fg==", 967 | "dev": true, 968 | "requires": { 969 | "ansi-colors": "3.2.3", 970 | "browser-stdout": "1.3.1", 971 | "chokidar": "3.3.0", 972 | "debug": "3.2.6", 973 | "diff": "3.5.0", 974 | "escape-string-regexp": "1.0.5", 975 | "find-up": "3.0.0", 976 | "glob": "7.1.3", 977 | "growl": "1.10.5", 978 | "he": "1.2.0", 979 | "js-yaml": "3.13.1", 980 | "log-symbols": "2.2.0", 981 | "minimatch": "3.0.4", 982 | "mkdirp": "0.5.1", 983 | "ms": "2.1.1", 984 | "node-environment-flags": "1.0.6", 985 | "object.assign": "4.1.0", 986 | "strip-json-comments": "2.0.1", 987 | "supports-color": "6.0.0", 988 | "which": "1.3.1", 989 | "wide-align": "1.1.3", 990 | "yargs": "13.3.0", 991 | "yargs-parser": "13.1.1", 992 | "yargs-unparser": "1.6.0" 993 | } 994 | }, 995 | "mocha-jsdom": { 996 | "version": "1.1.0", 997 | "resolved": "https://registry.npmjs.org/mocha-jsdom/-/mocha-jsdom-1.1.0.tgz", 998 | "integrity": "sha1-4VdvvQYBzInTWKIToOVYXRt8egE=", 999 | "dev": true 1000 | }, 1001 | "mocha-multi": { 1002 | "version": "1.1.3", 1003 | "resolved": "https://registry.npmjs.org/mocha-multi/-/mocha-multi-1.1.3.tgz", 1004 | "integrity": "sha512-bgjcxvfsMhNaRuXWiudidT8EREN6DRvHdzXqFLOdsLU9+oFTi4qiychVEQ3+TtwL9PwIqaiIastIF/tnVM7NYg==", 1005 | "dev": true, 1006 | "requires": { 1007 | "debug": "^4.1.1", 1008 | "is-string": "^1.0.4", 1009 | "lodash.once": "^4.1.1", 1010 | "mkdirp": "^0.5.1", 1011 | "object-assign": "^4.1.1" 1012 | }, 1013 | "dependencies": { 1014 | "debug": { 1015 | "version": "4.1.1", 1016 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", 1017 | "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", 1018 | "dev": true, 1019 | "requires": { 1020 | "ms": "^2.1.1" 1021 | } 1022 | }, 1023 | "ms": { 1024 | "version": "2.1.2", 1025 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 1026 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", 1027 | "dev": true 1028 | } 1029 | } 1030 | }, 1031 | "ms": { 1032 | "version": "2.1.1", 1033 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", 1034 | "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", 1035 | "dev": true 1036 | }, 1037 | "node-environment-flags": { 1038 | "version": "1.0.6", 1039 | "resolved": "https://registry.npmjs.org/node-environment-flags/-/node-environment-flags-1.0.6.tgz", 1040 | "integrity": "sha512-5Evy2epuL+6TM0lCQGpFIj6KwiEsGh1SrHUhTbNX+sLbBtjidPZFAnVK9y5yU1+h//RitLbRHTIMyxQPtxMdHw==", 1041 | "dev": true, 1042 | "requires": { 1043 | "object.getownpropertydescriptors": "^2.0.3", 1044 | "semver": "^5.7.0" 1045 | } 1046 | }, 1047 | "normalize-path": { 1048 | "version": "3.0.0", 1049 | "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", 1050 | "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", 1051 | "dev": true 1052 | }, 1053 | "nwmatcher": { 1054 | "version": "1.4.4", 1055 | "resolved": "https://registry.npmjs.org/nwmatcher/-/nwmatcher-1.4.4.tgz", 1056 | "integrity": "sha512-3iuY4N5dhgMpCUrOVnuAdGrgxVqV2cJpM+XNccjR2DKOB1RUP0aA+wGXEiNziG/UKboFyGBIoKOaNlJxx8bciQ==", 1057 | "dev": true 1058 | }, 1059 | "oauth-sign": { 1060 | "version": "0.8.2", 1061 | "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", 1062 | "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=", 1063 | "dev": true 1064 | }, 1065 | "object-assign": { 1066 | "version": "4.1.1", 1067 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", 1068 | "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", 1069 | "dev": true 1070 | }, 1071 | "object-inspect": { 1072 | "version": "1.7.0", 1073 | "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.7.0.tgz", 1074 | "integrity": "sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw==", 1075 | "dev": true 1076 | }, 1077 | "object-keys": { 1078 | "version": "1.1.1", 1079 | "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", 1080 | "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", 1081 | "dev": true 1082 | }, 1083 | "object.assign": { 1084 | "version": "4.1.0", 1085 | "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", 1086 | "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", 1087 | "dev": true, 1088 | "requires": { 1089 | "define-properties": "^1.1.2", 1090 | "function-bind": "^1.1.1", 1091 | "has-symbols": "^1.0.0", 1092 | "object-keys": "^1.0.11" 1093 | } 1094 | }, 1095 | "object.getownpropertydescriptors": { 1096 | "version": "2.1.0", 1097 | "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.0.tgz", 1098 | "integrity": "sha512-Z53Oah9A3TdLoblT7VKJaTDdXdT+lQO+cNpKVnya5JDe9uLvzu1YyY1yFDFrcxrlRgWrEFH0jJtD/IbuwjcEVg==", 1099 | "dev": true, 1100 | "requires": { 1101 | "define-properties": "^1.1.3", 1102 | "es-abstract": "^1.17.0-next.1" 1103 | } 1104 | }, 1105 | "once": { 1106 | "version": "1.4.0", 1107 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 1108 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", 1109 | "dev": true, 1110 | "requires": { 1111 | "wrappy": "1" 1112 | } 1113 | }, 1114 | "optionator": { 1115 | "version": "0.8.2", 1116 | "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", 1117 | "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", 1118 | "dev": true, 1119 | "requires": { 1120 | "deep-is": "~0.1.3", 1121 | "fast-levenshtein": "~2.0.4", 1122 | "levn": "~0.3.0", 1123 | "prelude-ls": "~1.1.2", 1124 | "type-check": "~0.3.2", 1125 | "wordwrap": "~1.0.0" 1126 | } 1127 | }, 1128 | "p-limit": { 1129 | "version": "2.2.2", 1130 | "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.2.tgz", 1131 | "integrity": "sha512-WGR+xHecKTr7EbUEhyLSh5Dube9JtdiG78ufaeLxTgpudf/20KqyMioIUZJAezlTIi6evxuoUs9YXc11cU+yzQ==", 1132 | "dev": true, 1133 | "requires": { 1134 | "p-try": "^2.0.0" 1135 | } 1136 | }, 1137 | "p-locate": { 1138 | "version": "3.0.0", 1139 | "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", 1140 | "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", 1141 | "dev": true, 1142 | "requires": { 1143 | "p-limit": "^2.0.0" 1144 | } 1145 | }, 1146 | "p-try": { 1147 | "version": "2.2.0", 1148 | "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", 1149 | "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", 1150 | "dev": true 1151 | }, 1152 | "parse5": { 1153 | "version": "1.5.1", 1154 | "resolved": "https://registry.npmjs.org/parse5/-/parse5-1.5.1.tgz", 1155 | "integrity": "sha1-m387DeMr543CQBsXVzzK8Pb1nZQ=", 1156 | "dev": true 1157 | }, 1158 | "path-exists": { 1159 | "version": "3.0.0", 1160 | "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", 1161 | "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", 1162 | "dev": true 1163 | }, 1164 | "path-is-absolute": { 1165 | "version": "1.0.1", 1166 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 1167 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", 1168 | "dev": true 1169 | }, 1170 | "performance-now": { 1171 | "version": "2.1.0", 1172 | "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", 1173 | "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", 1174 | "dev": true 1175 | }, 1176 | "picomatch": { 1177 | "version": "2.2.1", 1178 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.1.tgz", 1179 | "integrity": "sha512-ISBaA8xQNmwELC7eOjqFKMESB2VIqt4PPDD0nsS95b/9dZXvVKOlz9keMSnoGGKcOHXfTvDD6WMaRoSc9UuhRA==", 1180 | "dev": true 1181 | }, 1182 | "prelude-ls": { 1183 | "version": "1.1.2", 1184 | "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", 1185 | "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", 1186 | "dev": true 1187 | }, 1188 | "psl": { 1189 | "version": "1.1.28", 1190 | "resolved": "https://registry.npmjs.org/psl/-/psl-1.1.28.tgz", 1191 | "integrity": "sha512-+AqO1Ae+N/4r7Rvchrdm432afjT9hqJRyBN3DQv9At0tPz4hIFSGKbq64fN9dVoCow4oggIIax5/iONx0r9hZw==", 1192 | "dev": true 1193 | }, 1194 | "punycode": { 1195 | "version": "1.4.1", 1196 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", 1197 | "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", 1198 | "dev": true 1199 | }, 1200 | "qs": { 1201 | "version": "6.5.2", 1202 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", 1203 | "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", 1204 | "dev": true 1205 | }, 1206 | "readdirp": { 1207 | "version": "3.2.0", 1208 | "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.2.0.tgz", 1209 | "integrity": "sha512-crk4Qu3pmXwgxdSgGhgA/eXiJAPQiX4GMOZZMXnqKxHX7TaoL+3gQVo/WeuAiogr07DpnfjIMpXXa+PAIvwPGQ==", 1210 | "dev": true, 1211 | "requires": { 1212 | "picomatch": "^2.0.4" 1213 | } 1214 | }, 1215 | "request": { 1216 | "version": "2.87.0", 1217 | "resolved": "https://registry.npmjs.org/request/-/request-2.87.0.tgz", 1218 | "integrity": "sha512-fcogkm7Az5bsS6Sl0sibkbhcKsnyon/jV1kF3ajGmF0c8HrttdKTPRT9hieOaQHA5HEq6r8OyWOo/o781C1tNw==", 1219 | "dev": true, 1220 | "requires": { 1221 | "aws-sign2": "~0.7.0", 1222 | "aws4": "^1.6.0", 1223 | "caseless": "~0.12.0", 1224 | "combined-stream": "~1.0.5", 1225 | "extend": "~3.0.1", 1226 | "forever-agent": "~0.6.1", 1227 | "form-data": "~2.3.1", 1228 | "har-validator": "~5.0.3", 1229 | "http-signature": "~1.2.0", 1230 | "is-typedarray": "~1.0.0", 1231 | "isstream": "~0.1.2", 1232 | "json-stringify-safe": "~5.0.1", 1233 | "mime-types": "~2.1.17", 1234 | "oauth-sign": "~0.8.2", 1235 | "performance-now": "^2.1.0", 1236 | "qs": "~6.5.1", 1237 | "safe-buffer": "^5.1.1", 1238 | "tough-cookie": "~2.3.3", 1239 | "tunnel-agent": "^0.6.0", 1240 | "uuid": "^3.1.0" 1241 | }, 1242 | "dependencies": { 1243 | "tough-cookie": { 1244 | "version": "2.3.4", 1245 | "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.4.tgz", 1246 | "integrity": "sha512-TZ6TTfI5NtZnuyy/Kecv+CnoROnyXn2DN97LontgQpCwsX2XyLYCC0ENhYkehSOwAp8rTQKc/NUIF7BkQ5rKLA==", 1247 | "dev": true, 1248 | "requires": { 1249 | "punycode": "^1.4.1" 1250 | } 1251 | } 1252 | } 1253 | }, 1254 | "require-directory": { 1255 | "version": "2.1.1", 1256 | "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", 1257 | "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", 1258 | "dev": true 1259 | }, 1260 | "require-main-filename": { 1261 | "version": "2.0.0", 1262 | "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", 1263 | "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", 1264 | "dev": true 1265 | }, 1266 | "safe-buffer": { 1267 | "version": "5.1.2", 1268 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", 1269 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", 1270 | "dev": true 1271 | }, 1272 | "safer-buffer": { 1273 | "version": "2.1.2", 1274 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", 1275 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", 1276 | "dev": true 1277 | }, 1278 | "sax": { 1279 | "version": "1.2.4", 1280 | "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", 1281 | "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", 1282 | "dev": true 1283 | }, 1284 | "semver": { 1285 | "version": "5.7.1", 1286 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", 1287 | "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", 1288 | "dev": true 1289 | }, 1290 | "set-blocking": { 1291 | "version": "2.0.0", 1292 | "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", 1293 | "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", 1294 | "dev": true 1295 | }, 1296 | "source-map": { 1297 | "version": "0.6.1", 1298 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", 1299 | "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", 1300 | "dev": true, 1301 | "optional": true 1302 | }, 1303 | "sprintf-js": { 1304 | "version": "1.0.3", 1305 | "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", 1306 | "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", 1307 | "dev": true 1308 | }, 1309 | "sshpk": { 1310 | "version": "1.14.2", 1311 | "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.14.2.tgz", 1312 | "integrity": "sha1-xvxhZIo9nE52T9P8306hBeSSupg=", 1313 | "dev": true, 1314 | "requires": { 1315 | "asn1": "~0.2.3", 1316 | "assert-plus": "^1.0.0", 1317 | "bcrypt-pbkdf": "^1.0.0", 1318 | "dashdash": "^1.12.0", 1319 | "ecc-jsbn": "~0.1.1", 1320 | "getpass": "^0.1.1", 1321 | "jsbn": "~0.1.0", 1322 | "safer-buffer": "^2.0.2", 1323 | "tweetnacl": "~0.14.0" 1324 | } 1325 | }, 1326 | "string-width": { 1327 | "version": "2.1.1", 1328 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", 1329 | "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", 1330 | "dev": true, 1331 | "requires": { 1332 | "is-fullwidth-code-point": "^2.0.0", 1333 | "strip-ansi": "^4.0.0" 1334 | } 1335 | }, 1336 | "string.prototype.trimleft": { 1337 | "version": "2.1.1", 1338 | "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.1.tgz", 1339 | "integrity": "sha512-iu2AGd3PuP5Rp7x2kEZCrB2Nf41ehzh+goo8TV7z8/XDBbsvc6HQIlUl9RjkZ4oyrW1XM5UwlGl1oVEaDjg6Ag==", 1340 | "dev": true, 1341 | "requires": { 1342 | "define-properties": "^1.1.3", 1343 | "function-bind": "^1.1.1" 1344 | } 1345 | }, 1346 | "string.prototype.trimright": { 1347 | "version": "2.1.1", 1348 | "resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.1.tgz", 1349 | "integrity": "sha512-qFvWL3/+QIgZXVmJBfpHmxLB7xsUXz6HsUmP8+5dRaC3Q7oKUv9Vo6aMCRZC1smrtyECFsIT30PqBJ1gTjAs+g==", 1350 | "dev": true, 1351 | "requires": { 1352 | "define-properties": "^1.1.3", 1353 | "function-bind": "^1.1.1" 1354 | } 1355 | }, 1356 | "strip-ansi": { 1357 | "version": "4.0.0", 1358 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", 1359 | "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", 1360 | "dev": true, 1361 | "requires": { 1362 | "ansi-regex": "^3.0.0" 1363 | } 1364 | }, 1365 | "strip-json-comments": { 1366 | "version": "2.0.1", 1367 | "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", 1368 | "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", 1369 | "dev": true 1370 | }, 1371 | "supports-color": { 1372 | "version": "6.0.0", 1373 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.0.0.tgz", 1374 | "integrity": "sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg==", 1375 | "dev": true, 1376 | "requires": { 1377 | "has-flag": "^3.0.0" 1378 | } 1379 | }, 1380 | "symbol-tree": { 1381 | "version": "3.2.2", 1382 | "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.2.tgz", 1383 | "integrity": "sha1-rifbOPZgp64uHDt9G8KQgZuFGeY=", 1384 | "dev": true 1385 | }, 1386 | "to-regex-range": { 1387 | "version": "5.0.1", 1388 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", 1389 | "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", 1390 | "dev": true, 1391 | "requires": { 1392 | "is-number": "^7.0.0" 1393 | } 1394 | }, 1395 | "tough-cookie": { 1396 | "version": "2.4.2", 1397 | "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.2.tgz", 1398 | "integrity": "sha512-vahm+X8lSV/KjXziec8x5Vp0OTC9mq8EVCOApIsRAooeuMPSO8aT7PFACYkaL0yZ/3hVqw+8DzhCJwl8H2Ad6w==", 1399 | "dev": true, 1400 | "requires": { 1401 | "psl": "^1.1.24", 1402 | "punycode": "^1.4.1" 1403 | } 1404 | }, 1405 | "tr46": { 1406 | "version": "0.0.3", 1407 | "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", 1408 | "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=", 1409 | "dev": true 1410 | }, 1411 | "tunnel-agent": { 1412 | "version": "0.6.0", 1413 | "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", 1414 | "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", 1415 | "dev": true, 1416 | "requires": { 1417 | "safe-buffer": "^5.0.1" 1418 | } 1419 | }, 1420 | "tweetnacl": { 1421 | "version": "0.14.5", 1422 | "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", 1423 | "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", 1424 | "dev": true, 1425 | "optional": true 1426 | }, 1427 | "type-check": { 1428 | "version": "0.3.2", 1429 | "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", 1430 | "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", 1431 | "dev": true, 1432 | "requires": { 1433 | "prelude-ls": "~1.1.2" 1434 | } 1435 | }, 1436 | "type-detect": { 1437 | "version": "1.0.0", 1438 | "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-1.0.0.tgz", 1439 | "integrity": "sha1-diIXzAbbJY7EiQihKY6LlRIejqI=", 1440 | "dev": true 1441 | }, 1442 | "uuid": { 1443 | "version": "3.2.1", 1444 | "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.2.1.tgz", 1445 | "integrity": "sha512-jZnMwlb9Iku/O3smGWvZhauCf6cvvpKi4BKRiliS3cxnI+Gz9j5MEpTz2UFuXiKPJocb7gnsLHwiS05ige5BEA==", 1446 | "dev": true 1447 | }, 1448 | "verror": { 1449 | "version": "1.10.0", 1450 | "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", 1451 | "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", 1452 | "dev": true, 1453 | "requires": { 1454 | "assert-plus": "^1.0.0", 1455 | "core-util-is": "1.0.2", 1456 | "extsprintf": "^1.2.0" 1457 | } 1458 | }, 1459 | "webidl-conversions": { 1460 | "version": "4.0.2", 1461 | "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", 1462 | "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", 1463 | "dev": true 1464 | }, 1465 | "whatwg-encoding": { 1466 | "version": "1.0.3", 1467 | "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.3.tgz", 1468 | "integrity": "sha512-jLBwwKUhi8WtBfsMQlL4bUUcT8sMkAtQinscJAe/M4KHCkHuUJAF6vuB0tueNIw4c8ziO6AkRmgY+jL3a0iiPw==", 1469 | "dev": true, 1470 | "requires": { 1471 | "iconv-lite": "0.4.19" 1472 | } 1473 | }, 1474 | "whatwg-url": { 1475 | "version": "4.8.0", 1476 | "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-4.8.0.tgz", 1477 | "integrity": "sha1-0pgaqRSMHgCkHFphMRZqtGg7vMA=", 1478 | "dev": true, 1479 | "requires": { 1480 | "tr46": "~0.0.3", 1481 | "webidl-conversions": "^3.0.0" 1482 | }, 1483 | "dependencies": { 1484 | "webidl-conversions": { 1485 | "version": "3.0.1", 1486 | "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", 1487 | "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=", 1488 | "dev": true 1489 | } 1490 | } 1491 | }, 1492 | "which": { 1493 | "version": "1.3.1", 1494 | "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", 1495 | "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", 1496 | "dev": true, 1497 | "requires": { 1498 | "isexe": "^2.0.0" 1499 | } 1500 | }, 1501 | "which-module": { 1502 | "version": "2.0.0", 1503 | "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", 1504 | "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", 1505 | "dev": true 1506 | }, 1507 | "wide-align": { 1508 | "version": "1.1.3", 1509 | "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", 1510 | "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", 1511 | "dev": true, 1512 | "requires": { 1513 | "string-width": "^1.0.2 || 2" 1514 | } 1515 | }, 1516 | "wordwrap": { 1517 | "version": "1.0.0", 1518 | "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", 1519 | "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", 1520 | "dev": true 1521 | }, 1522 | "wrap-ansi": { 1523 | "version": "5.1.0", 1524 | "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", 1525 | "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", 1526 | "dev": true, 1527 | "requires": { 1528 | "ansi-styles": "^3.2.0", 1529 | "string-width": "^3.0.0", 1530 | "strip-ansi": "^5.0.0" 1531 | }, 1532 | "dependencies": { 1533 | "ansi-regex": { 1534 | "version": "4.1.0", 1535 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", 1536 | "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", 1537 | "dev": true 1538 | }, 1539 | "string-width": { 1540 | "version": "3.1.0", 1541 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", 1542 | "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", 1543 | "dev": true, 1544 | "requires": { 1545 | "emoji-regex": "^7.0.1", 1546 | "is-fullwidth-code-point": "^2.0.0", 1547 | "strip-ansi": "^5.1.0" 1548 | } 1549 | }, 1550 | "strip-ansi": { 1551 | "version": "5.2.0", 1552 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", 1553 | "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", 1554 | "dev": true, 1555 | "requires": { 1556 | "ansi-regex": "^4.1.0" 1557 | } 1558 | } 1559 | } 1560 | }, 1561 | "wrappy": { 1562 | "version": "1.0.2", 1563 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 1564 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", 1565 | "dev": true 1566 | }, 1567 | "xml-name-validator": { 1568 | "version": "2.0.1", 1569 | "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-2.0.1.tgz", 1570 | "integrity": "sha1-TYuPHszTQZqjYgYb7O9RXh5VljU=", 1571 | "dev": true 1572 | }, 1573 | "y18n": { 1574 | "version": "4.0.0", 1575 | "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", 1576 | "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", 1577 | "dev": true 1578 | }, 1579 | "yargs": { 1580 | "version": "13.3.0", 1581 | "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.0.tgz", 1582 | "integrity": "sha512-2eehun/8ALW8TLoIl7MVaRUrg+yCnenu8B4kBlRxj3GJGDKU1Og7sMXPNm1BYyM1DOJmTZ4YeN/Nwxv+8XJsUA==", 1583 | "dev": true, 1584 | "requires": { 1585 | "cliui": "^5.0.0", 1586 | "find-up": "^3.0.0", 1587 | "get-caller-file": "^2.0.1", 1588 | "require-directory": "^2.1.1", 1589 | "require-main-filename": "^2.0.0", 1590 | "set-blocking": "^2.0.0", 1591 | "string-width": "^3.0.0", 1592 | "which-module": "^2.0.0", 1593 | "y18n": "^4.0.0", 1594 | "yargs-parser": "^13.1.1" 1595 | }, 1596 | "dependencies": { 1597 | "ansi-regex": { 1598 | "version": "4.1.0", 1599 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", 1600 | "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", 1601 | "dev": true 1602 | }, 1603 | "string-width": { 1604 | "version": "3.1.0", 1605 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", 1606 | "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", 1607 | "dev": true, 1608 | "requires": { 1609 | "emoji-regex": "^7.0.1", 1610 | "is-fullwidth-code-point": "^2.0.0", 1611 | "strip-ansi": "^5.1.0" 1612 | } 1613 | }, 1614 | "strip-ansi": { 1615 | "version": "5.2.0", 1616 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", 1617 | "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", 1618 | "dev": true, 1619 | "requires": { 1620 | "ansi-regex": "^4.1.0" 1621 | } 1622 | } 1623 | } 1624 | }, 1625 | "yargs-parser": { 1626 | "version": "13.1.1", 1627 | "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.1.tgz", 1628 | "integrity": "sha512-oVAVsHz6uFrg3XQheFII8ESO2ssAf9luWuAd6Wexsu4F3OtIW0o8IribPXYrD4WC24LWtPrJlGy87y5udK+dxQ==", 1629 | "dev": true, 1630 | "requires": { 1631 | "camelcase": "^5.0.0", 1632 | "decamelize": "^1.2.0" 1633 | } 1634 | }, 1635 | "yargs-unparser": { 1636 | "version": "1.6.0", 1637 | "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-1.6.0.tgz", 1638 | "integrity": "sha512-W9tKgmSn0DpSatfri0nx52Joq5hVXgeLiqR/5G0sZNDoLZFOr/xjBUDcShCOGNsBnEMNo1KAMBkTej1Hm62HTw==", 1639 | "dev": true, 1640 | "requires": { 1641 | "flat": "^4.1.0", 1642 | "lodash": "^4.17.15", 1643 | "yargs": "^13.3.0" 1644 | } 1645 | } 1646 | } 1647 | } 1648 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "javascript-arrays", 3 | "version": "0.1.0", 4 | "description": "Introduction to arrays in JavaScript in Learn", 5 | "main": "array.js", 6 | "directories": { 7 | "test": "test" 8 | }, 9 | "scripts": { 10 | "test": "mocha -R mocha-multi --reporter-options spec=-,json=.results.json" 11 | }, 12 | "repository": { 13 | "type": "git", 14 | "url": "git+https://github.com/learn-co-curriculum/javascript-arrays.git" 15 | }, 16 | "keywords": [ 17 | "learn", 18 | "flatiron", 19 | "javascript", 20 | "arrays" 21 | ], 22 | "license": "SEE LICENSE IN LICENSE.md", 23 | "bugs": { 24 | "url": "https://github.com/learn-co-curriculum/javascript-arrays/issues" 25 | }, 26 | "homepage": "https://github.com/learn-co-curriculum/javascript-arrays#readme", 27 | "devDependencies": { 28 | "chai": "^3.5.0", 29 | "jsdom": "^9.0.0", 30 | "mocha": "^7.0.1", 31 | "mocha-jsdom": "~1.1.0", 32 | "mocha-multi": "^1.1.3" 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /test/arrays-test.js: -------------------------------------------------------------------------------- 1 | /*global describe, it */ 2 | 3 | const expect = require('chai').expect 4 | const fs = require('fs') 5 | const jsdom = require('mocha-jsdom') 6 | const path = require('path') 7 | 8 | describe('arrays', () => { 9 | jsdom({ 10 | src: fs.readFileSync(path.resolve(__dirname, '..', 'arrays.js'), 'utf-8') 11 | }) 12 | 13 | describe('chocolateBars', () => { 14 | it('is an array containing "snickers", "hundred grand", "kitkat", and "skittles"', () => { 15 | expect(chocolateBars).to.eql['snickers', 'hundred grand', 'kitkat', 'skittles'] 16 | }) 17 | }) 18 | 19 | describe('addElementToBeginningOfArray(array, element)', () => { 20 | it('adds an element to the beginning of an array', () => { 21 | expect(addElementToBeginningOfArray([1], 'foo')).to.eql(['foo', 1]) 22 | }) 23 | 24 | it('does not alter the original array', () => { 25 | const array = [1] 26 | 27 | addElementToBeginningOfArray(array, 'foo') 28 | 29 | expect(array).to.eql([1]) 30 | }) 31 | }) 32 | 33 | describe('destructivelyAddElementToBeginningOfArray(array, element)', () => { 34 | it('adds an element to the beginning of an array', () => { 35 | expect(destructivelyAddElementToBeginningOfArray([1], 'foo')).to.eql(['foo', 1]) 36 | }) 37 | 38 | it('alters the original array', () => { 39 | const array = [1] 40 | 41 | destructivelyAddElementToBeginningOfArray(array, 'foo') 42 | 43 | expect(array).to.eql(['foo', 1]) 44 | }) 45 | }) 46 | 47 | describe('addElementToEndOfArray(array, element)', () => { 48 | it('adds an element to the end of an array', () => { 49 | expect(addElementToEndOfArray([1], 'foo')).to.eql([1, 'foo']) 50 | }) 51 | 52 | it('does not alter the original array', () => { 53 | const array = [1] 54 | 55 | addElementToEndOfArray(array, 'foo') 56 | 57 | expect(array).to.eql([1]) 58 | }) 59 | }) 60 | 61 | describe('destructivelyAddElementToEndOfArray(array, element)', () => { 62 | it('adds an element to the end of an array', () => { 63 | expect(destructivelyAddElementToEndOfArray([1], 'foo')).to.eql([1, 'foo']) 64 | }) 65 | 66 | it('alters the original array', () => { 67 | const array = [1] 68 | 69 | destructivelyAddElementToEndOfArray(array, 'foo') 70 | 71 | expect(array).to.eql([1, 'foo']) 72 | }) 73 | }) 74 | 75 | describe('accessElementInArray(array, index)', () => { 76 | it('accesses the element in array at the given index', () => { 77 | expect(accessElementInArray([1, 2, 3], 2)).to.equal(3) 78 | }) 79 | }) 80 | 81 | describe('destructivelyRemoveElementFromBeginningOfArray(array)', ()=>{ 82 | it('returns the array with the first element removed', () => { 83 | expect(destructivelyRemoveElementFromBeginningOfArray([1, 2, 3])).to.eql([2, 3]) 84 | }) 85 | 86 | it('alters the original array', ()=>{ 87 | const array = [1, 2, 3]; 88 | destructivelyRemoveElementFromBeginningOfArray(array); 89 | expect(array).to.eql([2, 3]); 90 | }) 91 | }) 92 | 93 | describe('removeElementFromBeginningOfArray(array)', () => { 94 | it('removes the first element from the array', () => { 95 | expect(removeElementFromBeginningOfArray([1, 2, 3])).to.eql([2, 3]) 96 | }) 97 | 98 | it('does not alter the original array', () => { 99 | const array = [1, 2, 3]; 100 | 101 | removeElementFromBeginningOfArray(array); 102 | 103 | expect(array).to.eql([1, 2, 3]); 104 | }) 105 | }) 106 | 107 | describe('destructivelyRemoveElementFromEndOfArray(array)', () => { 108 | it('returns the array with the last element removed', () => { 109 | expect(destructivelyRemoveElementFromEndOfArray([1, 2, 3])).to.eql([1, 2]) 110 | }) 111 | 112 | it('alters the original array', ()=>{ 113 | const array = [1, 2, 3]; 114 | destructivelyRemoveElementFromEndOfArray(array); 115 | expect(array).to.eql([1, 2]); 116 | }) 117 | }) 118 | 119 | describe('removeElementFromEndOfArray(array)', () => { 120 | it('removes the last element from the array', () => { 121 | expect(removeElementFromEndOfArray([1, 2, 3])).to.eql([1, 2]) 122 | }) 123 | 124 | it('does not alter the original array', () => { 125 | const array = [1, 2, 3]; 126 | removeElementFromEndOfArray(array); 127 | expect(array).to.eql([1, 2, 3]); 128 | }) 129 | }) 130 | }) --------------------------------------------------------------------------------