├── .gitignore ├── README.md └── src ├── README.md ├── SUMMARY.md ├── _layouts └── website │ ├── header.html │ ├── page.html │ └── summary.html ├── book.json ├── images ├── cover.png ├── logo-pazams.png ├── science_art.png └── thumb.png ├── package-lock.json ├── package.json ├── pages ├── concurrency-parallelism │ └── README.md ├── error-handling │ └── README.md ├── flow-control-statements │ └── README.md ├── functions │ └── README.md ├── internals │ └── README.md ├── keywords-syntax-comparison │ └── README.md ├── license │ └── README.md ├── modules-packages │ └── README.md └── types │ └── README.md └── styles └── website.css /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | _book 3 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Go for Javascript Developers 2 | 3 | ![book cover](/src/images/cover.png) 4 | 5 | ## Read online 6 | 7 | This is the source code for "Go for Javascript Developers". 8 | 9 | The book can be found at [http://www.pazams.com/Go-for-Javascript-Developers/](http://www.pazams.com/Go-for-Javascript-Developers/). 10 | 11 | Chinese translated version can be found at https://github.com/chenjinya/go-for-javascript-developers . 12 | 13 | 14 | ## License 15 | 16 | Copyright Maor Zamski & Daniel Singer. 17 | 18 | "Go for Javascript Developers" is released under the [Creative Commons Attribution-ShareAlike 4.0 International License.](http://creativecommons.org/licenses/by-sa/4.0/). 19 | 20 | Cover design by [Stefano Tirloni](https://www.stedesign.com/). 21 | -------------------------------------------------------------------------------- /src/README.md: -------------------------------------------------------------------------------- 1 | ![book cover](/images/cover.png) 2 | 3 | # Introduction 4 | 5 | Often, a developer will use more than one programming language at a certain timeframe. Switching back and forth between languages can come with some overhead. These context switches can also result in bugs. For instance, if you switch back and forth between Python and Javascript, there's a likelihood you'll mistake evaluation of an empty array between truthy and falsey. Similarly, if you switch back and forth between Go and Javascript, there's a likelihood you'll mistake `switch` statements default behavior of break/fallthrough. Outlining the differences between languages can help mitigate these potential issues, and make it easier to transition back and forth. 6 | 7 | This document compares between two programming languages, Golang (or "Go") and ECMAScript (or "Javascript" / "JS"). The merits of this pairing is the popularity of these languages. That's it. They are not similar, in fact, they are quite different. Javascript is an event driven, dynamically typed and interpreted language, while Go is a statically typed and compiled language. 8 | 9 | If you're reading this there's a high chance you already know your Javascript and are just starting with Go. If so, make sure you first complete [A tour of go](https://tour.golang.org) and [Effective go](https://golang.org/doc/effective_go.html). 10 | 11 | ## Which language should I use? 12 | 13 | You should always pick the right tool for the right job. Unfortunately, there will never be a simple formula that will instruct you which programming language you should choose to complete a given task. 14 | 15 | ![science is more art than science](/images/science_art.png) 16 | 17 | Aside of technical considerations, other considerations, such as community adoption are also important. It was [reported](http://highscalability.com/blog/2014/2/26/the-whatsapp-architecture-facebook-bought-for-19-billion.html) that Facebook moved away from the Erlang language because it was hard to find qualified programmers. 18 | 19 | Having said that, it is worthy to note that Javascript excels in I/O intense applications, and less so in CPU intense applications. 20 | 21 | ## Semantics 22 | Each subchapter/subject is denoted with (D),(S) or (B) to indicate how it compares across both languages with 'mostly **D**ifferent', 'mostly **S**imilar' or 'mostly **B**oth'. 23 | 24 | This document uses ECMAScript 2015 (ES6). 25 | Also, some subjects will note the run-time environment "NodeJS". 26 | 27 | ## Contributions 28 | This book is friendly to suggestions, corrections and contributions. 29 | For these matters, please visit the source code for this book at [https://github.com/pazams/go-for-javascript-developers](https://github.com/pazams/go-for-javascript-developers) and open an issue or a pull-request. 30 | -------------------------------------------------------------------------------- /src/SUMMARY.md: -------------------------------------------------------------------------------- 1 | # Summary 2 | 3 | - [Internals](pages/internals/README.md) 4 | - [(S) Heap/Stack Memory Allocation](pages/internals/README.md#s-heapstack-memory-allocation) 5 | - [(S) Garbage Collection](pages/internals/README.md#s-garbage-collection) 6 | - [(D) Compilation](pages/internals/README.md#d-compilation) 7 | - [Concurrency & Parallelism](pages/concurrency-parallelism/README.md) 8 | - [(D) Overview](pages/concurrency-parallelism/README.md#d-overview) 9 | - [(D) Async vs Sync APIs](pages/concurrency-parallelism/README.md#d-async-vs-sync-apis) 10 | - [(D) Sequential and Concurrent Patterns](pages/concurrency-parallelism/README.md#d-sequential-and-concurrent-patterns) 11 | - [Modules / Packages](pages/modules-packages/README.md) 12 | - [Spec & Practice](pages/modules-packages/README.md#spec--practice) 13 | - [Management](pages/modules-packages/README.md#management) 14 | - [Error Handling](pages/error-handling/README.md) 15 | - [(B) Flow control and values](pages/error-handling/README.md#b-flow-control-and-values) 16 | - [(D) Usage](pages/error-handling/README.md#d-usage) 17 | - [(S) Loss of stack trace](pages/error-handling/README.md#s-loss-of-stack-trace) 18 | - [(D) The future](pages/error-handling/README.md#d-the-future) 19 | - [Keywords & Syntax Comparison](pages/keywords-syntax-comparison/README.md) 20 | - [(D) `this` keyword](pages/keywords-syntax-comparison/README.md#d-this-keyword) 21 | - [(D) `new` keyword](pages/keywords-syntax-comparison/README.md#d-new-keyword) 22 | - [(D) bind / method values](pages/keywords-syntax-comparison/README.md#d-bind--method-values) 23 | - [(S) setTimeout / timer](pages/keywords-syntax-comparison/README.md#s-settimeout--timer) 24 | - [(D) setInterval / ticker](pages/keywords-syntax-comparison/README.md#d-setinterval--ticker) 25 | - [(D) String literals](pages/keywords-syntax-comparison/README.md#d-string-literals) 26 | - [(S) Comments](pages/keywords-syntax-comparison/README.md#s-comments) 27 | - [Types](pages/types/README.md) 28 | - [(D) Values, Pointers, References](pages/types/README.md#d-values-pointers-references) 29 | - [(D) Arrays / Slices](pages/types/README.md#d-arrays--slices) 30 | - [(D) Dictionaries](pages/types/README.md#d-dictionaries) 31 | - [(D) Sets](pages/types/README.md#d-sets) 32 | - [Flow control statements](pages/flow-control-statements/README.md) 33 | - [(B) Loops and iteration](pages/flow-control-statements/README.md#b-loops-and-iteration) 34 | - [(B) If/Else](pages/flow-control-statements/README.md#b-ifelse) 35 | - [(D) Switch](pages/flow-control-statements/README.md#d-switch) 36 | - [Functions](pages/functions/README.md) 37 | - [(S) first-class functions](pages/functions/README.md#s-first-class-functions) 38 | - [(D) Multiple returns](pages/functions/README.md#d-multiple-returns) 39 | - [(S) IIFE](pages/functions/README.md#s-iife) 40 | - [(S) Closures](pages/functions/README.md#s-closures) 41 | - [License](pages/license/README.md) 42 | -------------------------------------------------------------------------------- /src/_layouts/website/header.html: -------------------------------------------------------------------------------- 1 | {% block book_header %} 2 | 21 | {% endblock %} 22 | -------------------------------------------------------------------------------- /src/_layouts/website/page.html: -------------------------------------------------------------------------------- 1 | {% extends template.self %} 2 | 3 | {% block head %} 4 | {{ super() }} 5 | 6 | 14 | 15 | {% endblock %} 16 | -------------------------------------------------------------------------------- /src/_layouts/website/summary.html: -------------------------------------------------------------------------------- 1 | {% macro articles(_articles) %} 2 | {% for article in _articles %} 3 |
  • 4 | {% if article.path and getPageByPath(article.path) %} 5 | 6 | {% elif article.url %} 7 | 8 | {% else %} 9 | 10 | {% endif %} 11 | {% if article.level != "0" and config.pluginsConfig['theme-default'].showLevel %} 12 | {{ article.level }}. 13 | {% endif %} 14 | {{ article.title }} 15 | {% if article.path or article.url %} 16 | 17 | {% else %} 18 | 19 | {% endif %} 20 | 21 | {% if article.articles.length > 0 %} 22 | 25 | {% endif %} 26 |
  • 27 | {% endfor %} 28 | {% endmacro %} 29 | 30 | 55 | -------------------------------------------------------------------------------- /src/book.json: -------------------------------------------------------------------------------- 1 | { 2 | "plugins": ["-sharing"] 3 | } 4 | -------------------------------------------------------------------------------- /src/images/cover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pazams/go-for-javascript-developers/97605d6428e44a2a34d125404771ed2cc51a129f/src/images/cover.png -------------------------------------------------------------------------------- /src/images/logo-pazams.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pazams/go-for-javascript-developers/97605d6428e44a2a34d125404771ed2cc51a129f/src/images/logo-pazams.png -------------------------------------------------------------------------------- /src/images/science_art.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pazams/go-for-javascript-developers/97605d6428e44a2a34d125404771ed2cc51a129f/src/images/science_art.png -------------------------------------------------------------------------------- /src/images/thumb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pazams/go-for-javascript-developers/97605d6428e44a2a34d125404771ed2cc51a129f/src/images/thumb.png -------------------------------------------------------------------------------- /src/package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "internal", 3 | "version": "1.0.0", 4 | "lockfileVersion": 1, 5 | "requires": true, 6 | "dependencies": { 7 | "bash-color": { 8 | "version": "0.0.4", 9 | "resolved": "https://registry.npmjs.org/bash-color/-/bash-color-0.0.4.tgz", 10 | "integrity": "sha1-6b6M4zVAytpIgXaMWb1jhlc26RM=" 11 | }, 12 | "commander": { 13 | "version": "2.11.0", 14 | "resolved": "https://registry.npmjs.org/commander/-/commander-2.11.0.tgz", 15 | "integrity": "sha512-b0553uYA5YAEGgyYIGYROzKQ7X5RAqedkfjiZxwi0kL1g3bOaBNNZfYkzt/CL0umgD5wc9Jec2FbB98CjkMRvQ==" 16 | }, 17 | "fs-extra": { 18 | "version": "3.0.1", 19 | "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-3.0.1.tgz", 20 | "integrity": "sha1-N5TzeMWLNC6n27sjCVEJxLO2IpE=", 21 | "requires": { 22 | "graceful-fs": "4.2.2", 23 | "jsonfile": "3.0.1", 24 | "universalify": "0.1.2" 25 | } 26 | }, 27 | "gitbook-cli": { 28 | "version": "2.3.2", 29 | "resolved": "https://registry.npmjs.org/gitbook-cli/-/gitbook-cli-2.3.2.tgz", 30 | "integrity": "sha512-eyGtkY7jKHhmgpfuvgAP5fZcUob/FBz4Ld0aLRdEmiTrS1RklimN9epzPp75dd4MWpGhYvSbiwxnpyLiv1wh6A==", 31 | "requires": { 32 | "bash-color": "0.0.4", 33 | "commander": "2.11.0", 34 | "fs-extra": "3.0.1", 35 | "lodash": "4.17.4", 36 | "npm": "5.1.0", 37 | "npmi": "1.0.1", 38 | "optimist": "0.6.1", 39 | "q": "1.5.0", 40 | "semver": "5.3.0", 41 | "tmp": "0.0.31", 42 | "user-home": "2.0.0" 43 | }, 44 | "dependencies": { 45 | "lodash": { 46 | "version": "4.17.4", 47 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", 48 | "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=" 49 | }, 50 | "tmp": { 51 | "version": "0.0.31", 52 | "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.31.tgz", 53 | "integrity": "sha1-jzirlDjhcxXl29izZX6L+yd65Kc=", 54 | "requires": { 55 | "os-tmpdir": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz" 56 | } 57 | } 58 | } 59 | }, 60 | "gitbook-plugin-scripts": { 61 | "version": "https://registry.npmjs.org/gitbook-plugin-scripts/-/gitbook-plugin-scripts-1.0.2.tgz", 62 | "integrity": "sha1-rc8X9R+ZjFsvajs4hrdNEOKwBKw=", 63 | "requires": { 64 | "lodash": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz", 65 | "tmp": "https://registry.npmjs.org/tmp/-/tmp-0.0.28.tgz" 66 | } 67 | }, 68 | "graceful-fs": { 69 | "version": "4.2.2", 70 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.2.tgz", 71 | "integrity": "sha512-IItsdsea19BoLC7ELy13q1iJFNmd7ofZH5+X/pJr90/nRoPEX0DJo1dHDbgtYWOhJhcCgMDTOw84RZ72q6lB+Q==" 72 | }, 73 | "jsonfile": { 74 | "version": "3.0.1", 75 | "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-3.0.1.tgz", 76 | "integrity": "sha1-pezG9l9T9mLEQVx2daAzHQmS7GY=", 77 | "requires": { 78 | "graceful-fs": "4.2.2" 79 | } 80 | }, 81 | "lodash": { 82 | "version": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz", 83 | "integrity": "sha1-G3eTz3JZ6jj7NmHU04syYK+K5Oc=" 84 | }, 85 | "minimist": { 86 | "version": "0.0.10", 87 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz", 88 | "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=" 89 | }, 90 | "npm": { 91 | "version": "5.1.0", 92 | "resolved": "https://registry.npmjs.org/npm/-/npm-5.1.0.tgz", 93 | "integrity": "sha512-pt5ClxEmY/dLpb60SmGQQBKi3nB6Ljx1FXmpoCUdAULlGqGVn2uCyXxPCWFbcuHGthT7qGiaGa1wOfs/UjGYMw==", 94 | "requires": { 95 | "JSONStream": "1.3.1", 96 | "abbrev": "1.1.0", 97 | "ansi-regex": "3.0.0", 98 | "ansicolors": "0.3.2", 99 | "ansistyles": "0.1.3", 100 | "aproba": "1.1.2", 101 | "archy": "1.0.0", 102 | "bluebird": "3.5.0", 103 | "cacache": "9.2.9", 104 | "call-limit": "1.1.0", 105 | "chownr": "1.0.1", 106 | "cmd-shim": "2.0.2", 107 | "columnify": "1.5.4", 108 | "config-chain": "1.1.11", 109 | "debuglog": "1.0.1", 110 | "detect-indent": "5.0.0", 111 | "dezalgo": "1.0.3", 112 | "editor": "1.0.0", 113 | "fs-vacuum": "1.2.10", 114 | "fs-write-stream-atomic": "1.0.10", 115 | "fstream": "1.0.11", 116 | "fstream-npm": "1.2.1", 117 | "glob": "7.1.2", 118 | "graceful-fs": "4.1.11", 119 | "has-unicode": "2.0.1", 120 | "hosted-git-info": "2.5.0", 121 | "iferr": "0.1.5", 122 | "imurmurhash": "0.1.4", 123 | "inflight": "1.0.6", 124 | "inherits": "2.0.3", 125 | "ini": "1.3.4", 126 | "init-package-json": "1.10.1", 127 | "lazy-property": "1.0.0", 128 | "lockfile": "1.0.3", 129 | "lodash._baseindexof": "3.1.0", 130 | "lodash._baseuniq": "4.6.0", 131 | "lodash._bindcallback": "3.0.1", 132 | "lodash._cacheindexof": "3.0.2", 133 | "lodash._createcache": "3.1.2", 134 | "lodash._getnative": "3.9.1", 135 | "lodash.clonedeep": "4.5.0", 136 | "lodash.restparam": "3.6.1", 137 | "lodash.union": "4.6.0", 138 | "lodash.uniq": "4.5.0", 139 | "lodash.without": "4.4.0", 140 | "lru-cache": "4.1.1", 141 | "mississippi": "1.3.0", 142 | "mkdirp": "0.5.1", 143 | "move-concurrently": "1.0.1", 144 | "node-gyp": "3.6.2", 145 | "nopt": "4.0.1", 146 | "normalize-package-data": "2.4.0", 147 | "npm-cache-filename": "1.0.2", 148 | "npm-install-checks": "3.0.0", 149 | "npm-package-arg": "5.1.2", 150 | "npm-registry-client": "8.4.0", 151 | "npm-user-validate": "1.0.0", 152 | "npmlog": "4.1.2", 153 | "once": "1.4.0", 154 | "opener": "1.4.3", 155 | "osenv": "0.1.4", 156 | "pacote": "2.7.38", 157 | "path-is-inside": "1.0.2", 158 | "promise-inflight": "1.0.1", 159 | "read": "1.0.7", 160 | "read-cmd-shim": "1.0.1", 161 | "read-installed": "4.0.3", 162 | "read-package-json": "2.0.9", 163 | "read-package-tree": "5.1.6", 164 | "readable-stream": "2.3.2", 165 | "readdir-scoped-modules": "1.0.2", 166 | "request": "2.81.0", 167 | "retry": "0.10.1", 168 | "rimraf": "2.6.1", 169 | "safe-buffer": "5.1.1", 170 | "semver": "5.3.0", 171 | "sha": "2.0.1", 172 | "slide": "1.1.6", 173 | "sorted-object": "2.0.1", 174 | "sorted-union-stream": "2.1.3", 175 | "ssri": "4.1.6", 176 | "strip-ansi": "4.0.0", 177 | "tar": "2.2.1", 178 | "text-table": "0.2.0", 179 | "uid-number": "0.0.6", 180 | "umask": "1.1.0", 181 | "unique-filename": "1.1.0", 182 | "unpipe": "1.0.0", 183 | "update-notifier": "2.2.0", 184 | "uuid": "3.1.0", 185 | "validate-npm-package-license": "3.0.1", 186 | "validate-npm-package-name": "3.0.0", 187 | "which": "1.2.14", 188 | "worker-farm": "1.3.1", 189 | "wrappy": "1.0.2", 190 | "write-file-atomic": "2.1.0" 191 | }, 192 | "dependencies": { 193 | "JSONStream": { 194 | "version": "1.3.1", 195 | "bundled": true, 196 | "requires": { 197 | "jsonparse": "1.3.1", 198 | "through": "2.3.8" 199 | }, 200 | "dependencies": { 201 | "jsonparse": { 202 | "version": "1.3.1", 203 | "bundled": true 204 | }, 205 | "through": { 206 | "version": "2.3.8", 207 | "bundled": true 208 | } 209 | } 210 | }, 211 | "abbrev": { 212 | "version": "1.1.0", 213 | "bundled": true 214 | }, 215 | "ansi-regex": { 216 | "version": "3.0.0", 217 | "bundled": true 218 | }, 219 | "ansicolors": { 220 | "version": "0.3.2", 221 | "bundled": true 222 | }, 223 | "ansistyles": { 224 | "version": "0.1.3", 225 | "bundled": true 226 | }, 227 | "aproba": { 228 | "version": "1.1.2", 229 | "bundled": true 230 | }, 231 | "archy": { 232 | "version": "1.0.0", 233 | "bundled": true 234 | }, 235 | "bluebird": { 236 | "version": "3.5.0", 237 | "bundled": true 238 | }, 239 | "cacache": { 240 | "version": "9.2.9", 241 | "bundled": true, 242 | "requires": { 243 | "bluebird": "3.5.0", 244 | "chownr": "1.0.1", 245 | "glob": "7.1.2", 246 | "graceful-fs": "4.1.11", 247 | "lru-cache": "4.1.1", 248 | "mississippi": "1.3.0", 249 | "mkdirp": "0.5.1", 250 | "move-concurrently": "1.0.1", 251 | "promise-inflight": "1.0.1", 252 | "rimraf": "2.6.1", 253 | "ssri": "4.1.6", 254 | "unique-filename": "1.1.0", 255 | "y18n": "3.2.1" 256 | }, 257 | "dependencies": { 258 | "lru-cache": { 259 | "version": "4.1.1", 260 | "bundled": true, 261 | "requires": { 262 | "pseudomap": "1.0.2", 263 | "yallist": "2.1.2" 264 | }, 265 | "dependencies": { 266 | "pseudomap": { 267 | "version": "1.0.2", 268 | "bundled": true 269 | }, 270 | "yallist": { 271 | "version": "2.1.2", 272 | "bundled": true 273 | } 274 | } 275 | }, 276 | "y18n": { 277 | "version": "3.2.1", 278 | "bundled": true 279 | } 280 | } 281 | }, 282 | "call-limit": { 283 | "version": "1.1.0", 284 | "bundled": true 285 | }, 286 | "chownr": { 287 | "version": "1.0.1", 288 | "bundled": true 289 | }, 290 | "cmd-shim": { 291 | "version": "2.0.2", 292 | "bundled": true, 293 | "requires": { 294 | "graceful-fs": "4.1.11", 295 | "mkdirp": "0.5.1" 296 | } 297 | }, 298 | "columnify": { 299 | "version": "1.5.4", 300 | "bundled": true, 301 | "requires": { 302 | "strip-ansi": "3.0.1", 303 | "wcwidth": "1.0.1" 304 | }, 305 | "dependencies": { 306 | "strip-ansi": { 307 | "version": "3.0.1", 308 | "bundled": true, 309 | "requires": { 310 | "ansi-regex": "2.1.1" 311 | }, 312 | "dependencies": { 313 | "ansi-regex": { 314 | "version": "2.1.1", 315 | "bundled": true 316 | } 317 | } 318 | }, 319 | "wcwidth": { 320 | "version": "1.0.1", 321 | "bundled": true, 322 | "requires": { 323 | "defaults": "1.0.3" 324 | }, 325 | "dependencies": { 326 | "defaults": { 327 | "version": "1.0.3", 328 | "bundled": true, 329 | "requires": { 330 | "clone": "1.0.2" 331 | }, 332 | "dependencies": { 333 | "clone": { 334 | "version": "1.0.2", 335 | "bundled": true 336 | } 337 | } 338 | } 339 | } 340 | } 341 | } 342 | }, 343 | "config-chain": { 344 | "version": "1.1.11", 345 | "bundled": true, 346 | "requires": { 347 | "ini": "1.3.4", 348 | "proto-list": "1.2.4" 349 | }, 350 | "dependencies": { 351 | "proto-list": { 352 | "version": "1.2.4", 353 | "bundled": true 354 | } 355 | } 356 | }, 357 | "debuglog": { 358 | "version": "1.0.1", 359 | "bundled": true 360 | }, 361 | "detect-indent": { 362 | "version": "5.0.0", 363 | "bundled": true 364 | }, 365 | "dezalgo": { 366 | "version": "1.0.3", 367 | "bundled": true, 368 | "requires": { 369 | "asap": "2.0.5", 370 | "wrappy": "1.0.2" 371 | }, 372 | "dependencies": { 373 | "asap": { 374 | "version": "2.0.5", 375 | "bundled": true 376 | } 377 | } 378 | }, 379 | "editor": { 380 | "version": "1.0.0", 381 | "bundled": true 382 | }, 383 | "fs-vacuum": { 384 | "version": "1.2.10", 385 | "bundled": true, 386 | "requires": { 387 | "graceful-fs": "4.1.11", 388 | "path-is-inside": "1.0.2", 389 | "rimraf": "2.6.1" 390 | } 391 | }, 392 | "fs-write-stream-atomic": { 393 | "version": "1.0.10", 394 | "bundled": true, 395 | "requires": { 396 | "graceful-fs": "4.1.11", 397 | "iferr": "0.1.5", 398 | "imurmurhash": "0.1.4", 399 | "readable-stream": "2.3.2" 400 | } 401 | }, 402 | "fstream": { 403 | "version": "1.0.11", 404 | "bundled": true, 405 | "requires": { 406 | "graceful-fs": "4.1.11", 407 | "inherits": "2.0.3", 408 | "mkdirp": "0.5.1", 409 | "rimraf": "2.6.1" 410 | } 411 | }, 412 | "fstream-npm": { 413 | "version": "1.2.1", 414 | "bundled": true, 415 | "requires": { 416 | "fstream-ignore": "1.0.5", 417 | "inherits": "2.0.3" 418 | }, 419 | "dependencies": { 420 | "fstream-ignore": { 421 | "version": "1.0.5", 422 | "bundled": true, 423 | "requires": { 424 | "fstream": "1.0.11", 425 | "inherits": "2.0.3", 426 | "minimatch": "3.0.4" 427 | }, 428 | "dependencies": { 429 | "minimatch": { 430 | "version": "3.0.4", 431 | "bundled": true, 432 | "requires": { 433 | "brace-expansion": "1.1.8" 434 | }, 435 | "dependencies": { 436 | "brace-expansion": { 437 | "version": "1.1.8", 438 | "bundled": true, 439 | "requires": { 440 | "balanced-match": "1.0.0", 441 | "concat-map": "0.0.1" 442 | }, 443 | "dependencies": { 444 | "balanced-match": { 445 | "version": "1.0.0", 446 | "bundled": true 447 | }, 448 | "concat-map": { 449 | "version": "0.0.1", 450 | "bundled": true 451 | } 452 | } 453 | } 454 | } 455 | } 456 | } 457 | } 458 | } 459 | }, 460 | "glob": { 461 | "version": "7.1.2", 462 | "bundled": true, 463 | "requires": { 464 | "fs.realpath": "1.0.0", 465 | "inflight": "1.0.6", 466 | "inherits": "2.0.3", 467 | "minimatch": "3.0.4", 468 | "once": "1.4.0", 469 | "path-is-absolute": "1.0.1" 470 | }, 471 | "dependencies": { 472 | "fs.realpath": { 473 | "version": "1.0.0", 474 | "bundled": true 475 | }, 476 | "minimatch": { 477 | "version": "3.0.4", 478 | "bundled": true, 479 | "requires": { 480 | "brace-expansion": "1.1.8" 481 | }, 482 | "dependencies": { 483 | "brace-expansion": { 484 | "version": "1.1.8", 485 | "bundled": true, 486 | "requires": { 487 | "balanced-match": "1.0.0", 488 | "concat-map": "0.0.1" 489 | }, 490 | "dependencies": { 491 | "balanced-match": { 492 | "version": "1.0.0", 493 | "bundled": true 494 | }, 495 | "concat-map": { 496 | "version": "0.0.1", 497 | "bundled": true 498 | } 499 | } 500 | } 501 | } 502 | }, 503 | "path-is-absolute": { 504 | "version": "1.0.1", 505 | "bundled": true 506 | } 507 | } 508 | }, 509 | "graceful-fs": { 510 | "version": "4.1.11", 511 | "bundled": true 512 | }, 513 | "has-unicode": { 514 | "version": "2.0.1", 515 | "bundled": true 516 | }, 517 | "hosted-git-info": { 518 | "version": "2.5.0", 519 | "bundled": true 520 | }, 521 | "iferr": { 522 | "version": "0.1.5", 523 | "bundled": true 524 | }, 525 | "imurmurhash": { 526 | "version": "0.1.4", 527 | "bundled": true 528 | }, 529 | "inflight": { 530 | "version": "1.0.6", 531 | "bundled": true, 532 | "requires": { 533 | "once": "1.4.0", 534 | "wrappy": "1.0.2" 535 | } 536 | }, 537 | "inherits": { 538 | "version": "2.0.3", 539 | "bundled": true 540 | }, 541 | "ini": { 542 | "version": "1.3.4", 543 | "bundled": true 544 | }, 545 | "init-package-json": { 546 | "version": "1.10.1", 547 | "bundled": true, 548 | "requires": { 549 | "glob": "7.1.2", 550 | "npm-package-arg": "5.1.2", 551 | "promzard": "0.3.0", 552 | "read": "1.0.7", 553 | "read-package-json": "2.0.9", 554 | "semver": "5.3.0", 555 | "validate-npm-package-license": "3.0.1", 556 | "validate-npm-package-name": "3.0.0" 557 | }, 558 | "dependencies": { 559 | "promzard": { 560 | "version": "0.3.0", 561 | "bundled": true, 562 | "requires": { 563 | "read": "1.0.7" 564 | } 565 | } 566 | } 567 | }, 568 | "lazy-property": { 569 | "version": "1.0.0", 570 | "bundled": true 571 | }, 572 | "lockfile": { 573 | "version": "1.0.3", 574 | "bundled": true 575 | }, 576 | "lodash._baseindexof": { 577 | "version": "3.1.0", 578 | "bundled": true 579 | }, 580 | "lodash._baseuniq": { 581 | "version": "4.6.0", 582 | "bundled": true, 583 | "requires": { 584 | "lodash._createset": "4.0.3", 585 | "lodash._root": "3.0.1" 586 | }, 587 | "dependencies": { 588 | "lodash._createset": { 589 | "version": "4.0.3", 590 | "bundled": true 591 | }, 592 | "lodash._root": { 593 | "version": "3.0.1", 594 | "bundled": true 595 | } 596 | } 597 | }, 598 | "lodash._bindcallback": { 599 | "version": "3.0.1", 600 | "bundled": true 601 | }, 602 | "lodash._cacheindexof": { 603 | "version": "3.0.2", 604 | "bundled": true 605 | }, 606 | "lodash._createcache": { 607 | "version": "3.1.2", 608 | "bundled": true, 609 | "requires": { 610 | "lodash._getnative": "3.9.1" 611 | } 612 | }, 613 | "lodash._getnative": { 614 | "version": "3.9.1", 615 | "bundled": true 616 | }, 617 | "lodash.clonedeep": { 618 | "version": "4.5.0", 619 | "bundled": true 620 | }, 621 | "lodash.restparam": { 622 | "version": "3.6.1", 623 | "bundled": true 624 | }, 625 | "lodash.union": { 626 | "version": "4.6.0", 627 | "bundled": true 628 | }, 629 | "lodash.uniq": { 630 | "version": "4.5.0", 631 | "bundled": true 632 | }, 633 | "lodash.without": { 634 | "version": "4.4.0", 635 | "bundled": true 636 | }, 637 | "lru-cache": { 638 | "version": "4.1.1", 639 | "bundled": true, 640 | "requires": { 641 | "pseudomap": "1.0.2", 642 | "yallist": "2.1.2" 643 | }, 644 | "dependencies": { 645 | "pseudomap": { 646 | "version": "1.0.2", 647 | "bundled": true 648 | }, 649 | "yallist": { 650 | "version": "2.1.2", 651 | "bundled": true 652 | } 653 | } 654 | }, 655 | "mississippi": { 656 | "version": "1.3.0", 657 | "bundled": true, 658 | "requires": { 659 | "concat-stream": "1.6.0", 660 | "duplexify": "3.5.0", 661 | "end-of-stream": "1.4.0", 662 | "flush-write-stream": "1.0.2", 663 | "from2": "2.3.0", 664 | "parallel-transform": "1.1.0", 665 | "pump": "1.0.2", 666 | "pumpify": "1.3.5", 667 | "stream-each": "1.2.0", 668 | "through2": "2.0.3" 669 | }, 670 | "dependencies": { 671 | "concat-stream": { 672 | "version": "1.6.0", 673 | "bundled": true, 674 | "requires": { 675 | "inherits": "2.0.3", 676 | "readable-stream": "2.3.2", 677 | "typedarray": "0.0.6" 678 | }, 679 | "dependencies": { 680 | "typedarray": { 681 | "version": "0.0.6", 682 | "bundled": true 683 | } 684 | } 685 | }, 686 | "duplexify": { 687 | "version": "3.5.0", 688 | "bundled": true, 689 | "requires": { 690 | "end-of-stream": "1.0.0", 691 | "inherits": "2.0.3", 692 | "readable-stream": "2.3.2", 693 | "stream-shift": "1.0.0" 694 | }, 695 | "dependencies": { 696 | "end-of-stream": { 697 | "version": "1.0.0", 698 | "bundled": true, 699 | "requires": { 700 | "once": "1.3.3" 701 | }, 702 | "dependencies": { 703 | "once": { 704 | "version": "1.3.3", 705 | "bundled": true, 706 | "requires": { 707 | "wrappy": "1.0.2" 708 | } 709 | } 710 | } 711 | }, 712 | "stream-shift": { 713 | "version": "1.0.0", 714 | "bundled": true 715 | } 716 | } 717 | }, 718 | "end-of-stream": { 719 | "version": "1.4.0", 720 | "bundled": true, 721 | "requires": { 722 | "once": "1.4.0" 723 | } 724 | }, 725 | "flush-write-stream": { 726 | "version": "1.0.2", 727 | "bundled": true, 728 | "requires": { 729 | "inherits": "2.0.3", 730 | "readable-stream": "2.3.2" 731 | } 732 | }, 733 | "from2": { 734 | "version": "2.3.0", 735 | "bundled": true, 736 | "requires": { 737 | "inherits": "2.0.3", 738 | "readable-stream": "2.3.2" 739 | } 740 | }, 741 | "parallel-transform": { 742 | "version": "1.1.0", 743 | "bundled": true, 744 | "requires": { 745 | "cyclist": "0.2.2", 746 | "inherits": "2.0.3", 747 | "readable-stream": "2.3.2" 748 | }, 749 | "dependencies": { 750 | "cyclist": { 751 | "version": "0.2.2", 752 | "bundled": true 753 | } 754 | } 755 | }, 756 | "pump": { 757 | "version": "1.0.2", 758 | "bundled": true, 759 | "requires": { 760 | "end-of-stream": "1.4.0", 761 | "once": "1.4.0" 762 | } 763 | }, 764 | "pumpify": { 765 | "version": "1.3.5", 766 | "bundled": true, 767 | "requires": { 768 | "duplexify": "3.5.0", 769 | "inherits": "2.0.3", 770 | "pump": "1.0.2" 771 | } 772 | }, 773 | "stream-each": { 774 | "version": "1.2.0", 775 | "bundled": true, 776 | "requires": { 777 | "end-of-stream": "1.4.0", 778 | "stream-shift": "1.0.0" 779 | }, 780 | "dependencies": { 781 | "stream-shift": { 782 | "version": "1.0.0", 783 | "bundled": true 784 | } 785 | } 786 | }, 787 | "through2": { 788 | "version": "2.0.3", 789 | "bundled": true, 790 | "requires": { 791 | "readable-stream": "2.3.2", 792 | "xtend": "4.0.1" 793 | }, 794 | "dependencies": { 795 | "xtend": { 796 | "version": "4.0.1", 797 | "bundled": true 798 | } 799 | } 800 | } 801 | } 802 | }, 803 | "mkdirp": { 804 | "version": "0.5.1", 805 | "bundled": true, 806 | "requires": { 807 | "minimist": "0.0.8" 808 | }, 809 | "dependencies": { 810 | "minimist": { 811 | "version": "0.0.8", 812 | "bundled": true 813 | } 814 | } 815 | }, 816 | "move-concurrently": { 817 | "version": "1.0.1", 818 | "bundled": true, 819 | "requires": { 820 | "aproba": "1.1.2", 821 | "copy-concurrently": "1.0.3", 822 | "fs-write-stream-atomic": "1.0.10", 823 | "mkdirp": "0.5.1", 824 | "rimraf": "2.6.1", 825 | "run-queue": "1.0.3" 826 | }, 827 | "dependencies": { 828 | "copy-concurrently": { 829 | "version": "1.0.3", 830 | "bundled": true, 831 | "requires": { 832 | "aproba": "1.1.2", 833 | "fs-write-stream-atomic": "1.0.10", 834 | "iferr": "0.1.5", 835 | "mkdirp": "0.5.1", 836 | "rimraf": "2.6.1", 837 | "run-queue": "1.0.3" 838 | } 839 | }, 840 | "run-queue": { 841 | "version": "1.0.3", 842 | "bundled": true, 843 | "requires": { 844 | "aproba": "1.1.2" 845 | } 846 | } 847 | } 848 | }, 849 | "node-gyp": { 850 | "version": "3.6.2", 851 | "bundled": true, 852 | "requires": { 853 | "fstream": "1.0.11", 854 | "glob": "7.1.2", 855 | "graceful-fs": "4.1.11", 856 | "minimatch": "3.0.4", 857 | "mkdirp": "0.5.1", 858 | "nopt": "3.0.6", 859 | "npmlog": "4.1.2", 860 | "osenv": "0.1.4", 861 | "request": "2.81.0", 862 | "rimraf": "2.6.1", 863 | "semver": "5.3.0", 864 | "tar": "2.2.1", 865 | "which": "1.2.14" 866 | }, 867 | "dependencies": { 868 | "minimatch": { 869 | "version": "3.0.4", 870 | "bundled": true, 871 | "requires": { 872 | "brace-expansion": "1.1.8" 873 | }, 874 | "dependencies": { 875 | "brace-expansion": { 876 | "version": "1.1.8", 877 | "bundled": true, 878 | "requires": { 879 | "balanced-match": "1.0.0", 880 | "concat-map": "0.0.1" 881 | }, 882 | "dependencies": { 883 | "balanced-match": { 884 | "version": "1.0.0", 885 | "bundled": true 886 | }, 887 | "concat-map": { 888 | "version": "0.0.1", 889 | "bundled": true 890 | } 891 | } 892 | } 893 | } 894 | }, 895 | "nopt": { 896 | "version": "3.0.6", 897 | "bundled": true, 898 | "requires": { 899 | "abbrev": "1.1.0" 900 | } 901 | } 902 | } 903 | }, 904 | "nopt": { 905 | "version": "4.0.1", 906 | "bundled": true, 907 | "requires": { 908 | "abbrev": "1.1.0", 909 | "osenv": "0.1.4" 910 | } 911 | }, 912 | "normalize-package-data": { 913 | "version": "2.4.0", 914 | "bundled": true, 915 | "requires": { 916 | "hosted-git-info": "2.5.0", 917 | "is-builtin-module": "1.0.0", 918 | "semver": "5.3.0", 919 | "validate-npm-package-license": "3.0.1" 920 | }, 921 | "dependencies": { 922 | "is-builtin-module": { 923 | "version": "1.0.0", 924 | "bundled": true, 925 | "requires": { 926 | "builtin-modules": "1.1.1" 927 | }, 928 | "dependencies": { 929 | "builtin-modules": { 930 | "version": "1.1.1", 931 | "bundled": true 932 | } 933 | } 934 | } 935 | } 936 | }, 937 | "npm-cache-filename": { 938 | "version": "1.0.2", 939 | "bundled": true 940 | }, 941 | "npm-install-checks": { 942 | "version": "3.0.0", 943 | "bundled": true, 944 | "requires": { 945 | "semver": "5.3.0" 946 | } 947 | }, 948 | "npm-package-arg": { 949 | "version": "5.1.2", 950 | "bundled": true, 951 | "requires": { 952 | "hosted-git-info": "2.5.0", 953 | "osenv": "0.1.4", 954 | "semver": "5.3.0", 955 | "validate-npm-package-name": "3.0.0" 956 | } 957 | }, 958 | "npm-registry-client": { 959 | "version": "8.4.0", 960 | "bundled": true, 961 | "requires": { 962 | "concat-stream": "1.6.0", 963 | "graceful-fs": "4.1.11", 964 | "normalize-package-data": "2.4.0", 965 | "npm-package-arg": "5.1.2", 966 | "npmlog": "4.1.2", 967 | "once": "1.4.0", 968 | "request": "2.81.0", 969 | "retry": "0.10.1", 970 | "semver": "5.3.0", 971 | "slide": "1.1.6", 972 | "ssri": "4.1.6" 973 | }, 974 | "dependencies": { 975 | "concat-stream": { 976 | "version": "1.6.0", 977 | "bundled": true, 978 | "requires": { 979 | "inherits": "2.0.3", 980 | "readable-stream": "2.3.2", 981 | "typedarray": "0.0.6" 982 | }, 983 | "dependencies": { 984 | "typedarray": { 985 | "version": "0.0.6", 986 | "bundled": true 987 | } 988 | } 989 | } 990 | } 991 | }, 992 | "npm-user-validate": { 993 | "version": "1.0.0", 994 | "bundled": true 995 | }, 996 | "npmlog": { 997 | "version": "4.1.2", 998 | "bundled": true, 999 | "requires": { 1000 | "are-we-there-yet": "1.1.4", 1001 | "console-control-strings": "1.1.0", 1002 | "gauge": "2.7.4", 1003 | "set-blocking": "2.0.0" 1004 | }, 1005 | "dependencies": { 1006 | "are-we-there-yet": { 1007 | "version": "1.1.4", 1008 | "bundled": true, 1009 | "requires": { 1010 | "delegates": "1.0.0", 1011 | "readable-stream": "2.3.2" 1012 | }, 1013 | "dependencies": { 1014 | "delegates": { 1015 | "version": "1.0.0", 1016 | "bundled": true 1017 | } 1018 | } 1019 | }, 1020 | "console-control-strings": { 1021 | "version": "1.1.0", 1022 | "bundled": true 1023 | }, 1024 | "gauge": { 1025 | "version": "2.7.4", 1026 | "bundled": true, 1027 | "requires": { 1028 | "aproba": "1.1.2", 1029 | "console-control-strings": "1.1.0", 1030 | "has-unicode": "2.0.1", 1031 | "object-assign": "4.1.1", 1032 | "signal-exit": "3.0.2", 1033 | "string-width": "1.0.2", 1034 | "strip-ansi": "3.0.1", 1035 | "wide-align": "1.1.2" 1036 | }, 1037 | "dependencies": { 1038 | "object-assign": { 1039 | "version": "4.1.1", 1040 | "bundled": true 1041 | }, 1042 | "signal-exit": { 1043 | "version": "3.0.2", 1044 | "bundled": true 1045 | }, 1046 | "string-width": { 1047 | "version": "1.0.2", 1048 | "bundled": true, 1049 | "requires": { 1050 | "code-point-at": "1.1.0", 1051 | "is-fullwidth-code-point": "1.0.0", 1052 | "strip-ansi": "3.0.1" 1053 | }, 1054 | "dependencies": { 1055 | "code-point-at": { 1056 | "version": "1.1.0", 1057 | "bundled": true 1058 | }, 1059 | "is-fullwidth-code-point": { 1060 | "version": "1.0.0", 1061 | "bundled": true, 1062 | "requires": { 1063 | "number-is-nan": "1.0.1" 1064 | }, 1065 | "dependencies": { 1066 | "number-is-nan": { 1067 | "version": "1.0.1", 1068 | "bundled": true 1069 | } 1070 | } 1071 | } 1072 | } 1073 | }, 1074 | "strip-ansi": { 1075 | "version": "3.0.1", 1076 | "bundled": true, 1077 | "requires": { 1078 | "ansi-regex": "2.1.1" 1079 | }, 1080 | "dependencies": { 1081 | "ansi-regex": { 1082 | "version": "2.1.1", 1083 | "bundled": true 1084 | } 1085 | } 1086 | }, 1087 | "wide-align": { 1088 | "version": "1.1.2", 1089 | "bundled": true, 1090 | "requires": { 1091 | "string-width": "1.0.2" 1092 | } 1093 | } 1094 | } 1095 | }, 1096 | "set-blocking": { 1097 | "version": "2.0.0", 1098 | "bundled": true 1099 | } 1100 | } 1101 | }, 1102 | "once": { 1103 | "version": "1.4.0", 1104 | "bundled": true, 1105 | "requires": { 1106 | "wrappy": "1.0.2" 1107 | } 1108 | }, 1109 | "opener": { 1110 | "version": "1.4.3", 1111 | "bundled": true 1112 | }, 1113 | "osenv": { 1114 | "version": "0.1.4", 1115 | "bundled": true, 1116 | "requires": { 1117 | "os-homedir": "1.0.2", 1118 | "os-tmpdir": "1.0.2" 1119 | }, 1120 | "dependencies": { 1121 | "os-homedir": { 1122 | "version": "1.0.2", 1123 | "bundled": true 1124 | }, 1125 | "os-tmpdir": { 1126 | "version": "1.0.2", 1127 | "bundled": true 1128 | } 1129 | } 1130 | }, 1131 | "pacote": { 1132 | "version": "2.7.38", 1133 | "bundled": true, 1134 | "requires": { 1135 | "bluebird": "3.5.0", 1136 | "cacache": "9.2.9", 1137 | "glob": "7.1.2", 1138 | "lru-cache": "4.1.1", 1139 | "make-fetch-happen": "2.4.13", 1140 | "minimatch": "3.0.4", 1141 | "mississippi": "1.3.0", 1142 | "normalize-package-data": "2.4.0", 1143 | "npm-package-arg": "5.1.2", 1144 | "npm-pick-manifest": "1.0.4", 1145 | "osenv": "0.1.4", 1146 | "promise-inflight": "1.0.1", 1147 | "promise-retry": "1.1.1", 1148 | "protoduck": "4.0.0", 1149 | "safe-buffer": "5.1.1", 1150 | "semver": "5.3.0", 1151 | "ssri": "4.1.6", 1152 | "tar-fs": "1.15.3", 1153 | "tar-stream": "1.5.4", 1154 | "unique-filename": "1.1.0", 1155 | "which": "1.2.14" 1156 | }, 1157 | "dependencies": { 1158 | "make-fetch-happen": { 1159 | "version": "2.4.13", 1160 | "bundled": true, 1161 | "requires": { 1162 | "agentkeepalive": "3.3.0", 1163 | "cacache": "9.2.9", 1164 | "http-cache-semantics": "3.7.3", 1165 | "http-proxy-agent": "2.0.0", 1166 | "https-proxy-agent": "2.0.0", 1167 | "lru-cache": "4.1.1", 1168 | "mississippi": "1.3.0", 1169 | "node-fetch-npm": "2.0.1", 1170 | "promise-retry": "1.1.1", 1171 | "socks-proxy-agent": "3.0.0", 1172 | "ssri": "4.1.6" 1173 | }, 1174 | "dependencies": { 1175 | "agentkeepalive": { 1176 | "version": "3.3.0", 1177 | "bundled": true, 1178 | "requires": { 1179 | "humanize-ms": "1.2.1" 1180 | }, 1181 | "dependencies": { 1182 | "humanize-ms": { 1183 | "version": "1.2.1", 1184 | "bundled": true, 1185 | "requires": { 1186 | "ms": "2.0.0" 1187 | }, 1188 | "dependencies": { 1189 | "ms": { 1190 | "version": "2.0.0", 1191 | "bundled": true 1192 | } 1193 | } 1194 | } 1195 | } 1196 | }, 1197 | "http-cache-semantics": { 1198 | "version": "3.7.3", 1199 | "bundled": true 1200 | }, 1201 | "http-proxy-agent": { 1202 | "version": "2.0.0", 1203 | "bundled": true, 1204 | "requires": { 1205 | "agent-base": "4.1.0", 1206 | "debug": "2.6.8" 1207 | }, 1208 | "dependencies": { 1209 | "agent-base": { 1210 | "version": "4.1.0", 1211 | "bundled": true, 1212 | "requires": { 1213 | "es6-promisify": "5.0.0" 1214 | }, 1215 | "dependencies": { 1216 | "es6-promisify": { 1217 | "version": "5.0.0", 1218 | "bundled": true, 1219 | "requires": { 1220 | "es6-promise": "4.1.1" 1221 | }, 1222 | "dependencies": { 1223 | "es6-promise": { 1224 | "version": "4.1.1", 1225 | "bundled": true 1226 | } 1227 | } 1228 | } 1229 | } 1230 | }, 1231 | "debug": { 1232 | "version": "2.6.8", 1233 | "bundled": true, 1234 | "requires": { 1235 | "ms": "2.0.0" 1236 | }, 1237 | "dependencies": { 1238 | "ms": { 1239 | "version": "2.0.0", 1240 | "bundled": true 1241 | } 1242 | } 1243 | } 1244 | } 1245 | }, 1246 | "https-proxy-agent": { 1247 | "version": "2.0.0", 1248 | "bundled": true, 1249 | "requires": { 1250 | "agent-base": "4.1.0", 1251 | "debug": "2.6.8" 1252 | }, 1253 | "dependencies": { 1254 | "agent-base": { 1255 | "version": "4.1.0", 1256 | "bundled": true, 1257 | "requires": { 1258 | "es6-promisify": "5.0.0" 1259 | }, 1260 | "dependencies": { 1261 | "es6-promisify": { 1262 | "version": "5.0.0", 1263 | "bundled": true, 1264 | "requires": { 1265 | "es6-promise": "4.1.1" 1266 | }, 1267 | "dependencies": { 1268 | "es6-promise": { 1269 | "version": "4.1.1", 1270 | "bundled": true 1271 | } 1272 | } 1273 | } 1274 | } 1275 | }, 1276 | "debug": { 1277 | "version": "2.6.8", 1278 | "bundled": true, 1279 | "requires": { 1280 | "ms": "2.0.0" 1281 | }, 1282 | "dependencies": { 1283 | "ms": { 1284 | "version": "2.0.0", 1285 | "bundled": true 1286 | } 1287 | } 1288 | } 1289 | } 1290 | }, 1291 | "node-fetch-npm": { 1292 | "version": "2.0.1", 1293 | "bundled": true, 1294 | "requires": { 1295 | "encoding": "0.1.12", 1296 | "json-parse-helpfulerror": "1.0.3", 1297 | "safe-buffer": "5.1.1" 1298 | }, 1299 | "dependencies": { 1300 | "encoding": { 1301 | "version": "0.1.12", 1302 | "bundled": true, 1303 | "requires": { 1304 | "iconv-lite": "0.4.18" 1305 | }, 1306 | "dependencies": { 1307 | "iconv-lite": { 1308 | "version": "0.4.18", 1309 | "bundled": true 1310 | } 1311 | } 1312 | }, 1313 | "json-parse-helpfulerror": { 1314 | "version": "1.0.3", 1315 | "bundled": true, 1316 | "requires": { 1317 | "jju": "1.3.0" 1318 | }, 1319 | "dependencies": { 1320 | "jju": { 1321 | "version": "1.3.0", 1322 | "bundled": true 1323 | } 1324 | } 1325 | } 1326 | } 1327 | }, 1328 | "socks-proxy-agent": { 1329 | "version": "3.0.0", 1330 | "bundled": true, 1331 | "requires": { 1332 | "agent-base": "4.1.0", 1333 | "socks": "1.1.10" 1334 | }, 1335 | "dependencies": { 1336 | "agent-base": { 1337 | "version": "4.1.0", 1338 | "bundled": true, 1339 | "requires": { 1340 | "es6-promisify": "5.0.0" 1341 | }, 1342 | "dependencies": { 1343 | "es6-promisify": { 1344 | "version": "5.0.0", 1345 | "bundled": true, 1346 | "requires": { 1347 | "es6-promise": "4.1.1" 1348 | }, 1349 | "dependencies": { 1350 | "es6-promise": { 1351 | "version": "4.1.1", 1352 | "bundled": true 1353 | } 1354 | } 1355 | } 1356 | } 1357 | }, 1358 | "socks": { 1359 | "version": "1.1.10", 1360 | "bundled": true, 1361 | "requires": { 1362 | "ip": "1.1.5", 1363 | "smart-buffer": "1.1.15" 1364 | }, 1365 | "dependencies": { 1366 | "ip": { 1367 | "version": "1.1.5", 1368 | "bundled": true 1369 | }, 1370 | "smart-buffer": { 1371 | "version": "1.1.15", 1372 | "bundled": true 1373 | } 1374 | } 1375 | } 1376 | } 1377 | } 1378 | } 1379 | }, 1380 | "minimatch": { 1381 | "version": "3.0.4", 1382 | "bundled": true, 1383 | "requires": { 1384 | "brace-expansion": "1.1.8" 1385 | }, 1386 | "dependencies": { 1387 | "brace-expansion": { 1388 | "version": "1.1.8", 1389 | "bundled": true, 1390 | "requires": { 1391 | "balanced-match": "1.0.0", 1392 | "concat-map": "0.0.1" 1393 | }, 1394 | "dependencies": { 1395 | "balanced-match": { 1396 | "version": "1.0.0", 1397 | "bundled": true 1398 | }, 1399 | "concat-map": { 1400 | "version": "0.0.1", 1401 | "bundled": true 1402 | } 1403 | } 1404 | } 1405 | } 1406 | }, 1407 | "npm-pick-manifest": { 1408 | "version": "1.0.4", 1409 | "bundled": true, 1410 | "requires": { 1411 | "npm-package-arg": "5.1.2", 1412 | "semver": "5.3.0" 1413 | } 1414 | }, 1415 | "promise-retry": { 1416 | "version": "1.1.1", 1417 | "bundled": true, 1418 | "requires": { 1419 | "err-code": "1.1.2", 1420 | "retry": "0.10.1" 1421 | }, 1422 | "dependencies": { 1423 | "err-code": { 1424 | "version": "1.1.2", 1425 | "bundled": true 1426 | } 1427 | } 1428 | }, 1429 | "protoduck": { 1430 | "version": "4.0.0", 1431 | "bundled": true, 1432 | "requires": { 1433 | "genfun": "4.0.1" 1434 | }, 1435 | "dependencies": { 1436 | "genfun": { 1437 | "version": "4.0.1", 1438 | "bundled": true 1439 | } 1440 | } 1441 | }, 1442 | "tar-fs": { 1443 | "version": "1.15.3", 1444 | "bundled": true, 1445 | "requires": { 1446 | "chownr": "1.0.1", 1447 | "mkdirp": "0.5.1", 1448 | "pump": "1.0.2", 1449 | "tar-stream": "1.5.4" 1450 | }, 1451 | "dependencies": { 1452 | "pump": { 1453 | "version": "1.0.2", 1454 | "bundled": true, 1455 | "requires": { 1456 | "end-of-stream": "1.4.0", 1457 | "once": "1.4.0" 1458 | }, 1459 | "dependencies": { 1460 | "end-of-stream": { 1461 | "version": "1.4.0", 1462 | "bundled": true, 1463 | "requires": { 1464 | "once": "1.4.0" 1465 | } 1466 | } 1467 | } 1468 | } 1469 | } 1470 | }, 1471 | "tar-stream": { 1472 | "version": "1.5.4", 1473 | "bundled": true, 1474 | "requires": { 1475 | "bl": "1.2.1", 1476 | "end-of-stream": "1.4.0", 1477 | "readable-stream": "2.3.2", 1478 | "xtend": "4.0.1" 1479 | }, 1480 | "dependencies": { 1481 | "bl": { 1482 | "version": "1.2.1", 1483 | "bundled": true, 1484 | "requires": { 1485 | "readable-stream": "2.3.2" 1486 | } 1487 | }, 1488 | "end-of-stream": { 1489 | "version": "1.4.0", 1490 | "bundled": true, 1491 | "requires": { 1492 | "once": "1.4.0" 1493 | } 1494 | }, 1495 | "xtend": { 1496 | "version": "4.0.1", 1497 | "bundled": true 1498 | } 1499 | } 1500 | } 1501 | } 1502 | }, 1503 | "path-is-inside": { 1504 | "version": "1.0.2", 1505 | "bundled": true 1506 | }, 1507 | "promise-inflight": { 1508 | "version": "1.0.1", 1509 | "bundled": true 1510 | }, 1511 | "read": { 1512 | "version": "1.0.7", 1513 | "bundled": true, 1514 | "requires": { 1515 | "mute-stream": "0.0.7" 1516 | }, 1517 | "dependencies": { 1518 | "mute-stream": { 1519 | "version": "0.0.7", 1520 | "bundled": true 1521 | } 1522 | } 1523 | }, 1524 | "read-cmd-shim": { 1525 | "version": "1.0.1", 1526 | "bundled": true, 1527 | "requires": { 1528 | "graceful-fs": "4.1.11" 1529 | } 1530 | }, 1531 | "read-installed": { 1532 | "version": "4.0.3", 1533 | "bundled": true, 1534 | "requires": { 1535 | "debuglog": "1.0.1", 1536 | "graceful-fs": "4.1.11", 1537 | "read-package-json": "2.0.9", 1538 | "readdir-scoped-modules": "1.0.2", 1539 | "semver": "5.3.0", 1540 | "slide": "1.1.6", 1541 | "util-extend": "1.0.3" 1542 | }, 1543 | "dependencies": { 1544 | "util-extend": { 1545 | "version": "1.0.3", 1546 | "bundled": true 1547 | } 1548 | } 1549 | }, 1550 | "read-package-json": { 1551 | "version": "2.0.9", 1552 | "bundled": true, 1553 | "requires": { 1554 | "glob": "7.1.2", 1555 | "graceful-fs": "4.1.11", 1556 | "json-parse-helpfulerror": "1.0.3", 1557 | "normalize-package-data": "2.4.0" 1558 | }, 1559 | "dependencies": { 1560 | "json-parse-helpfulerror": { 1561 | "version": "1.0.3", 1562 | "bundled": true, 1563 | "requires": { 1564 | "jju": "1.3.0" 1565 | }, 1566 | "dependencies": { 1567 | "jju": { 1568 | "version": "1.3.0", 1569 | "bundled": true 1570 | } 1571 | } 1572 | } 1573 | } 1574 | }, 1575 | "read-package-tree": { 1576 | "version": "5.1.6", 1577 | "bundled": true, 1578 | "requires": { 1579 | "debuglog": "1.0.1", 1580 | "dezalgo": "1.0.3", 1581 | "once": "1.4.0", 1582 | "read-package-json": "2.0.9", 1583 | "readdir-scoped-modules": "1.0.2" 1584 | } 1585 | }, 1586 | "readable-stream": { 1587 | "version": "2.3.2", 1588 | "bundled": true, 1589 | "requires": { 1590 | "core-util-is": "1.0.2", 1591 | "inherits": "2.0.3", 1592 | "isarray": "1.0.0", 1593 | "process-nextick-args": "1.0.7", 1594 | "safe-buffer": "5.1.1", 1595 | "string_decoder": "1.0.3", 1596 | "util-deprecate": "1.0.2" 1597 | }, 1598 | "dependencies": { 1599 | "core-util-is": { 1600 | "version": "1.0.2", 1601 | "bundled": true 1602 | }, 1603 | "isarray": { 1604 | "version": "1.0.0", 1605 | "bundled": true 1606 | }, 1607 | "process-nextick-args": { 1608 | "version": "1.0.7", 1609 | "bundled": true 1610 | }, 1611 | "string_decoder": { 1612 | "version": "1.0.3", 1613 | "bundled": true, 1614 | "requires": { 1615 | "safe-buffer": "5.1.1" 1616 | } 1617 | }, 1618 | "util-deprecate": { 1619 | "version": "1.0.2", 1620 | "bundled": true 1621 | } 1622 | } 1623 | }, 1624 | "readdir-scoped-modules": { 1625 | "version": "1.0.2", 1626 | "bundled": true, 1627 | "requires": { 1628 | "debuglog": "1.0.1", 1629 | "dezalgo": "1.0.3", 1630 | "graceful-fs": "4.1.11", 1631 | "once": "1.4.0" 1632 | } 1633 | }, 1634 | "request": { 1635 | "version": "2.81.0", 1636 | "bundled": true, 1637 | "requires": { 1638 | "aws-sign2": "0.6.0", 1639 | "aws4": "1.6.0", 1640 | "caseless": "0.12.0", 1641 | "combined-stream": "1.0.5", 1642 | "extend": "3.0.1", 1643 | "forever-agent": "0.6.1", 1644 | "form-data": "2.1.4", 1645 | "har-validator": "4.2.1", 1646 | "hawk": "3.1.3", 1647 | "http-signature": "1.1.1", 1648 | "is-typedarray": "1.0.0", 1649 | "isstream": "0.1.2", 1650 | "json-stringify-safe": "5.0.1", 1651 | "mime-types": "2.1.15", 1652 | "oauth-sign": "0.8.2", 1653 | "performance-now": "0.2.0", 1654 | "qs": "6.4.0", 1655 | "safe-buffer": "5.1.1", 1656 | "stringstream": "0.0.5", 1657 | "tough-cookie": "2.3.2", 1658 | "tunnel-agent": "0.6.0", 1659 | "uuid": "3.1.0" 1660 | }, 1661 | "dependencies": { 1662 | "aws-sign2": { 1663 | "version": "0.6.0", 1664 | "bundled": true 1665 | }, 1666 | "aws4": { 1667 | "version": "1.6.0", 1668 | "bundled": true 1669 | }, 1670 | "caseless": { 1671 | "version": "0.12.0", 1672 | "bundled": true 1673 | }, 1674 | "combined-stream": { 1675 | "version": "1.0.5", 1676 | "bundled": true, 1677 | "requires": { 1678 | "delayed-stream": "1.0.0" 1679 | }, 1680 | "dependencies": { 1681 | "delayed-stream": { 1682 | "version": "1.0.0", 1683 | "bundled": true 1684 | } 1685 | } 1686 | }, 1687 | "extend": { 1688 | "version": "3.0.1", 1689 | "bundled": true 1690 | }, 1691 | "forever-agent": { 1692 | "version": "0.6.1", 1693 | "bundled": true 1694 | }, 1695 | "form-data": { 1696 | "version": "2.1.4", 1697 | "bundled": true, 1698 | "requires": { 1699 | "asynckit": "0.4.0", 1700 | "combined-stream": "1.0.5", 1701 | "mime-types": "2.1.15" 1702 | }, 1703 | "dependencies": { 1704 | "asynckit": { 1705 | "version": "0.4.0", 1706 | "bundled": true 1707 | } 1708 | } 1709 | }, 1710 | "har-validator": { 1711 | "version": "4.2.1", 1712 | "bundled": true, 1713 | "requires": { 1714 | "ajv": "4.11.8", 1715 | "har-schema": "1.0.5" 1716 | }, 1717 | "dependencies": { 1718 | "ajv": { 1719 | "version": "4.11.8", 1720 | "bundled": true, 1721 | "requires": { 1722 | "co": "4.6.0", 1723 | "json-stable-stringify": "1.0.1" 1724 | }, 1725 | "dependencies": { 1726 | "co": { 1727 | "version": "4.6.0", 1728 | "bundled": true 1729 | }, 1730 | "json-stable-stringify": { 1731 | "version": "1.0.1", 1732 | "bundled": true, 1733 | "requires": { 1734 | "jsonify": "0.0.0" 1735 | }, 1736 | "dependencies": { 1737 | "jsonify": { 1738 | "version": "0.0.0", 1739 | "bundled": true 1740 | } 1741 | } 1742 | } 1743 | } 1744 | }, 1745 | "har-schema": { 1746 | "version": "1.0.5", 1747 | "bundled": true 1748 | } 1749 | } 1750 | }, 1751 | "hawk": { 1752 | "version": "3.1.3", 1753 | "bundled": true, 1754 | "requires": { 1755 | "boom": "2.10.1", 1756 | "cryptiles": "2.0.5", 1757 | "hoek": "2.16.3", 1758 | "sntp": "1.0.9" 1759 | }, 1760 | "dependencies": { 1761 | "boom": { 1762 | "version": "2.10.1", 1763 | "bundled": true, 1764 | "requires": { 1765 | "hoek": "2.16.3" 1766 | } 1767 | }, 1768 | "cryptiles": { 1769 | "version": "2.0.5", 1770 | "bundled": true, 1771 | "requires": { 1772 | "boom": "2.10.1" 1773 | } 1774 | }, 1775 | "hoek": { 1776 | "version": "2.16.3", 1777 | "bundled": true 1778 | }, 1779 | "sntp": { 1780 | "version": "1.0.9", 1781 | "bundled": true, 1782 | "requires": { 1783 | "hoek": "2.16.3" 1784 | } 1785 | } 1786 | } 1787 | }, 1788 | "http-signature": { 1789 | "version": "1.1.1", 1790 | "bundled": true, 1791 | "requires": { 1792 | "assert-plus": "0.2.0", 1793 | "jsprim": "1.4.0", 1794 | "sshpk": "1.13.1" 1795 | }, 1796 | "dependencies": { 1797 | "assert-plus": { 1798 | "version": "0.2.0", 1799 | "bundled": true 1800 | }, 1801 | "jsprim": { 1802 | "version": "1.4.0", 1803 | "bundled": true, 1804 | "requires": { 1805 | "assert-plus": "1.0.0", 1806 | "extsprintf": "1.0.2", 1807 | "json-schema": "0.2.3", 1808 | "verror": "1.3.6" 1809 | }, 1810 | "dependencies": { 1811 | "assert-plus": { 1812 | "version": "1.0.0", 1813 | "bundled": true 1814 | }, 1815 | "extsprintf": { 1816 | "version": "1.0.2", 1817 | "bundled": true 1818 | }, 1819 | "json-schema": { 1820 | "version": "0.2.3", 1821 | "bundled": true 1822 | }, 1823 | "verror": { 1824 | "version": "1.3.6", 1825 | "bundled": true, 1826 | "requires": { 1827 | "extsprintf": "1.0.2" 1828 | } 1829 | } 1830 | } 1831 | }, 1832 | "sshpk": { 1833 | "version": "1.13.1", 1834 | "bundled": true, 1835 | "requires": { 1836 | "asn1": "0.2.3", 1837 | "assert-plus": "1.0.0", 1838 | "bcrypt-pbkdf": "1.0.1", 1839 | "dashdash": "1.14.1", 1840 | "ecc-jsbn": "0.1.1", 1841 | "getpass": "0.1.7", 1842 | "jsbn": "0.1.1", 1843 | "tweetnacl": "0.14.5" 1844 | }, 1845 | "dependencies": { 1846 | "asn1": { 1847 | "version": "0.2.3", 1848 | "bundled": true 1849 | }, 1850 | "assert-plus": { 1851 | "version": "1.0.0", 1852 | "bundled": true 1853 | }, 1854 | "bcrypt-pbkdf": { 1855 | "version": "1.0.1", 1856 | "bundled": true, 1857 | "optional": true, 1858 | "requires": { 1859 | "tweetnacl": "0.14.5" 1860 | } 1861 | }, 1862 | "dashdash": { 1863 | "version": "1.14.1", 1864 | "bundled": true, 1865 | "requires": { 1866 | "assert-plus": "1.0.0" 1867 | } 1868 | }, 1869 | "ecc-jsbn": { 1870 | "version": "0.1.1", 1871 | "bundled": true, 1872 | "optional": true, 1873 | "requires": { 1874 | "jsbn": "0.1.1" 1875 | } 1876 | }, 1877 | "getpass": { 1878 | "version": "0.1.7", 1879 | "bundled": true, 1880 | "requires": { 1881 | "assert-plus": "1.0.0" 1882 | } 1883 | }, 1884 | "jsbn": { 1885 | "version": "0.1.1", 1886 | "bundled": true, 1887 | "optional": true 1888 | }, 1889 | "tweetnacl": { 1890 | "version": "0.14.5", 1891 | "bundled": true, 1892 | "optional": true 1893 | } 1894 | } 1895 | } 1896 | } 1897 | }, 1898 | "is-typedarray": { 1899 | "version": "1.0.0", 1900 | "bundled": true 1901 | }, 1902 | "isstream": { 1903 | "version": "0.1.2", 1904 | "bundled": true 1905 | }, 1906 | "json-stringify-safe": { 1907 | "version": "5.0.1", 1908 | "bundled": true 1909 | }, 1910 | "mime-types": { 1911 | "version": "2.1.15", 1912 | "bundled": true, 1913 | "requires": { 1914 | "mime-db": "1.27.0" 1915 | }, 1916 | "dependencies": { 1917 | "mime-db": { 1918 | "version": "1.27.0", 1919 | "bundled": true 1920 | } 1921 | } 1922 | }, 1923 | "oauth-sign": { 1924 | "version": "0.8.2", 1925 | "bundled": true 1926 | }, 1927 | "performance-now": { 1928 | "version": "0.2.0", 1929 | "bundled": true 1930 | }, 1931 | "qs": { 1932 | "version": "6.4.0", 1933 | "bundled": true 1934 | }, 1935 | "stringstream": { 1936 | "version": "0.0.5", 1937 | "bundled": true 1938 | }, 1939 | "tough-cookie": { 1940 | "version": "2.3.2", 1941 | "bundled": true, 1942 | "requires": { 1943 | "punycode": "1.4.1" 1944 | }, 1945 | "dependencies": { 1946 | "punycode": { 1947 | "version": "1.4.1", 1948 | "bundled": true 1949 | } 1950 | } 1951 | }, 1952 | "tunnel-agent": { 1953 | "version": "0.6.0", 1954 | "bundled": true, 1955 | "requires": { 1956 | "safe-buffer": "5.1.1" 1957 | } 1958 | } 1959 | } 1960 | }, 1961 | "retry": { 1962 | "version": "0.10.1", 1963 | "bundled": true 1964 | }, 1965 | "rimraf": { 1966 | "version": "2.6.1", 1967 | "bundled": true, 1968 | "requires": { 1969 | "glob": "7.1.2" 1970 | } 1971 | }, 1972 | "safe-buffer": { 1973 | "version": "5.1.1", 1974 | "bundled": true 1975 | }, 1976 | "semver": { 1977 | "version": "5.3.0", 1978 | "bundled": true 1979 | }, 1980 | "sha": { 1981 | "version": "2.0.1", 1982 | "bundled": true, 1983 | "requires": { 1984 | "graceful-fs": "4.1.11", 1985 | "readable-stream": "2.3.2" 1986 | } 1987 | }, 1988 | "slide": { 1989 | "version": "1.1.6", 1990 | "bundled": true 1991 | }, 1992 | "sorted-object": { 1993 | "version": "2.0.1", 1994 | "bundled": true 1995 | }, 1996 | "sorted-union-stream": { 1997 | "version": "2.1.3", 1998 | "bundled": true, 1999 | "requires": { 2000 | "from2": "1.3.0", 2001 | "stream-iterate": "1.2.0" 2002 | }, 2003 | "dependencies": { 2004 | "from2": { 2005 | "version": "1.3.0", 2006 | "bundled": true, 2007 | "requires": { 2008 | "inherits": "2.0.3", 2009 | "readable-stream": "1.1.14" 2010 | }, 2011 | "dependencies": { 2012 | "readable-stream": { 2013 | "version": "1.1.14", 2014 | "bundled": true, 2015 | "requires": { 2016 | "core-util-is": "1.0.2", 2017 | "inherits": "2.0.3", 2018 | "isarray": "0.0.1", 2019 | "string_decoder": "0.10.31" 2020 | }, 2021 | "dependencies": { 2022 | "core-util-is": { 2023 | "version": "1.0.2", 2024 | "bundled": true 2025 | }, 2026 | "isarray": { 2027 | "version": "0.0.1", 2028 | "bundled": true 2029 | }, 2030 | "string_decoder": { 2031 | "version": "0.10.31", 2032 | "bundled": true 2033 | } 2034 | } 2035 | } 2036 | } 2037 | }, 2038 | "stream-iterate": { 2039 | "version": "1.2.0", 2040 | "bundled": true, 2041 | "requires": { 2042 | "readable-stream": "2.3.2", 2043 | "stream-shift": "1.0.0" 2044 | }, 2045 | "dependencies": { 2046 | "stream-shift": { 2047 | "version": "1.0.0", 2048 | "bundled": true 2049 | } 2050 | } 2051 | } 2052 | } 2053 | }, 2054 | "ssri": { 2055 | "version": "4.1.6", 2056 | "bundled": true, 2057 | "requires": { 2058 | "safe-buffer": "5.1.1" 2059 | } 2060 | }, 2061 | "strip-ansi": { 2062 | "version": "4.0.0", 2063 | "bundled": true, 2064 | "requires": { 2065 | "ansi-regex": "3.0.0" 2066 | }, 2067 | "dependencies": { 2068 | "ansi-regex": { 2069 | "version": "3.0.0", 2070 | "bundled": true 2071 | } 2072 | } 2073 | }, 2074 | "tar": { 2075 | "version": "2.2.1", 2076 | "bundled": true, 2077 | "requires": { 2078 | "block-stream": "0.0.9", 2079 | "fstream": "1.0.11", 2080 | "inherits": "2.0.3" 2081 | }, 2082 | "dependencies": { 2083 | "block-stream": { 2084 | "version": "0.0.9", 2085 | "bundled": true, 2086 | "requires": { 2087 | "inherits": "2.0.3" 2088 | } 2089 | } 2090 | } 2091 | }, 2092 | "text-table": { 2093 | "version": "0.2.0", 2094 | "bundled": true 2095 | }, 2096 | "uid-number": { 2097 | "version": "0.0.6", 2098 | "bundled": true 2099 | }, 2100 | "umask": { 2101 | "version": "1.1.0", 2102 | "bundled": true 2103 | }, 2104 | "unique-filename": { 2105 | "version": "1.1.0", 2106 | "bundled": true, 2107 | "requires": { 2108 | "unique-slug": "2.0.0" 2109 | }, 2110 | "dependencies": { 2111 | "unique-slug": { 2112 | "version": "2.0.0", 2113 | "bundled": true, 2114 | "requires": { 2115 | "imurmurhash": "0.1.4" 2116 | } 2117 | } 2118 | } 2119 | }, 2120 | "unpipe": { 2121 | "version": "1.0.0", 2122 | "bundled": true 2123 | }, 2124 | "update-notifier": { 2125 | "version": "2.2.0", 2126 | "bundled": true, 2127 | "requires": { 2128 | "boxen": "1.1.0", 2129 | "chalk": "1.1.3", 2130 | "configstore": "3.1.0", 2131 | "import-lazy": "2.1.0", 2132 | "is-npm": "1.0.0", 2133 | "latest-version": "3.1.0", 2134 | "semver-diff": "2.1.0", 2135 | "xdg-basedir": "3.0.0" 2136 | }, 2137 | "dependencies": { 2138 | "boxen": { 2139 | "version": "1.1.0", 2140 | "bundled": true, 2141 | "requires": { 2142 | "ansi-align": "2.0.0", 2143 | "camelcase": "4.1.0", 2144 | "chalk": "1.1.3", 2145 | "cli-boxes": "1.0.0", 2146 | "string-width": "2.1.0", 2147 | "term-size": "0.1.1", 2148 | "widest-line": "1.0.0" 2149 | }, 2150 | "dependencies": { 2151 | "ansi-align": { 2152 | "version": "2.0.0", 2153 | "bundled": true, 2154 | "requires": { 2155 | "string-width": "2.1.0" 2156 | } 2157 | }, 2158 | "camelcase": { 2159 | "version": "4.1.0", 2160 | "bundled": true 2161 | }, 2162 | "cli-boxes": { 2163 | "version": "1.0.0", 2164 | "bundled": true 2165 | }, 2166 | "string-width": { 2167 | "version": "2.1.0", 2168 | "bundled": true, 2169 | "requires": { 2170 | "is-fullwidth-code-point": "2.0.0", 2171 | "strip-ansi": "4.0.0" 2172 | }, 2173 | "dependencies": { 2174 | "is-fullwidth-code-point": { 2175 | "version": "2.0.0", 2176 | "bundled": true 2177 | }, 2178 | "strip-ansi": { 2179 | "version": "4.0.0", 2180 | "bundled": true, 2181 | "requires": { 2182 | "ansi-regex": "3.0.0" 2183 | } 2184 | } 2185 | } 2186 | }, 2187 | "term-size": { 2188 | "version": "0.1.1", 2189 | "bundled": true, 2190 | "requires": { 2191 | "execa": "0.4.0" 2192 | }, 2193 | "dependencies": { 2194 | "execa": { 2195 | "version": "0.4.0", 2196 | "bundled": true, 2197 | "requires": { 2198 | "cross-spawn-async": "2.2.5", 2199 | "is-stream": "1.1.0", 2200 | "npm-run-path": "1.0.0", 2201 | "object-assign": "4.1.1", 2202 | "path-key": "1.0.0", 2203 | "strip-eof": "1.0.0" 2204 | }, 2205 | "dependencies": { 2206 | "cross-spawn-async": { 2207 | "version": "2.2.5", 2208 | "bundled": true, 2209 | "requires": { 2210 | "lru-cache": "4.1.1", 2211 | "which": "1.2.14" 2212 | } 2213 | }, 2214 | "is-stream": { 2215 | "version": "1.1.0", 2216 | "bundled": true 2217 | }, 2218 | "npm-run-path": { 2219 | "version": "1.0.0", 2220 | "bundled": true, 2221 | "requires": { 2222 | "path-key": "1.0.0" 2223 | } 2224 | }, 2225 | "object-assign": { 2226 | "version": "4.1.1", 2227 | "bundled": true 2228 | }, 2229 | "path-key": { 2230 | "version": "1.0.0", 2231 | "bundled": true 2232 | }, 2233 | "strip-eof": { 2234 | "version": "1.0.0", 2235 | "bundled": true 2236 | } 2237 | } 2238 | } 2239 | } 2240 | }, 2241 | "widest-line": { 2242 | "version": "1.0.0", 2243 | "bundled": true, 2244 | "requires": { 2245 | "string-width": "1.0.2" 2246 | }, 2247 | "dependencies": { 2248 | "string-width": { 2249 | "version": "1.0.2", 2250 | "bundled": true, 2251 | "requires": { 2252 | "code-point-at": "1.1.0", 2253 | "is-fullwidth-code-point": "1.0.0", 2254 | "strip-ansi": "3.0.1" 2255 | }, 2256 | "dependencies": { 2257 | "code-point-at": { 2258 | "version": "1.1.0", 2259 | "bundled": true 2260 | }, 2261 | "is-fullwidth-code-point": { 2262 | "version": "1.0.0", 2263 | "bundled": true, 2264 | "requires": { 2265 | "number-is-nan": "1.0.1" 2266 | }, 2267 | "dependencies": { 2268 | "number-is-nan": { 2269 | "version": "1.0.1", 2270 | "bundled": true 2271 | } 2272 | } 2273 | }, 2274 | "strip-ansi": { 2275 | "version": "3.0.1", 2276 | "bundled": true, 2277 | "requires": { 2278 | "ansi-regex": "2.1.1" 2279 | }, 2280 | "dependencies": { 2281 | "ansi-regex": { 2282 | "version": "2.1.1", 2283 | "bundled": true 2284 | } 2285 | } 2286 | } 2287 | } 2288 | } 2289 | } 2290 | } 2291 | } 2292 | }, 2293 | "chalk": { 2294 | "version": "1.1.3", 2295 | "bundled": true, 2296 | "requires": { 2297 | "ansi-styles": "2.2.1", 2298 | "escape-string-regexp": "1.0.5", 2299 | "has-ansi": "2.0.0", 2300 | "strip-ansi": "3.0.1", 2301 | "supports-color": "2.0.0" 2302 | }, 2303 | "dependencies": { 2304 | "ansi-styles": { 2305 | "version": "2.2.1", 2306 | "bundled": true 2307 | }, 2308 | "escape-string-regexp": { 2309 | "version": "1.0.5", 2310 | "bundled": true 2311 | }, 2312 | "has-ansi": { 2313 | "version": "2.0.0", 2314 | "bundled": true, 2315 | "requires": { 2316 | "ansi-regex": "2.1.1" 2317 | }, 2318 | "dependencies": { 2319 | "ansi-regex": { 2320 | "version": "2.1.1", 2321 | "bundled": true 2322 | } 2323 | } 2324 | }, 2325 | "strip-ansi": { 2326 | "version": "3.0.1", 2327 | "bundled": true, 2328 | "requires": { 2329 | "ansi-regex": "2.1.1" 2330 | }, 2331 | "dependencies": { 2332 | "ansi-regex": { 2333 | "version": "2.1.1", 2334 | "bundled": true 2335 | } 2336 | } 2337 | }, 2338 | "supports-color": { 2339 | "version": "2.0.0", 2340 | "bundled": true 2341 | } 2342 | } 2343 | }, 2344 | "configstore": { 2345 | "version": "3.1.0", 2346 | "bundled": true, 2347 | "requires": { 2348 | "dot-prop": "4.1.1", 2349 | "graceful-fs": "4.1.11", 2350 | "make-dir": "1.0.0", 2351 | "unique-string": "1.0.0", 2352 | "write-file-atomic": "2.1.0", 2353 | "xdg-basedir": "3.0.0" 2354 | }, 2355 | "dependencies": { 2356 | "dot-prop": { 2357 | "version": "4.1.1", 2358 | "bundled": true, 2359 | "requires": { 2360 | "is-obj": "1.0.1" 2361 | }, 2362 | "dependencies": { 2363 | "is-obj": { 2364 | "version": "1.0.1", 2365 | "bundled": true 2366 | } 2367 | } 2368 | }, 2369 | "make-dir": { 2370 | "version": "1.0.0", 2371 | "bundled": true, 2372 | "requires": { 2373 | "pify": "2.3.0" 2374 | }, 2375 | "dependencies": { 2376 | "pify": { 2377 | "version": "2.3.0", 2378 | "bundled": true 2379 | } 2380 | } 2381 | }, 2382 | "unique-string": { 2383 | "version": "1.0.0", 2384 | "bundled": true, 2385 | "requires": { 2386 | "crypto-random-string": "1.0.0" 2387 | }, 2388 | "dependencies": { 2389 | "crypto-random-string": { 2390 | "version": "1.0.0", 2391 | "bundled": true 2392 | } 2393 | } 2394 | } 2395 | } 2396 | }, 2397 | "import-lazy": { 2398 | "version": "2.1.0", 2399 | "bundled": true 2400 | }, 2401 | "is-npm": { 2402 | "version": "1.0.0", 2403 | "bundled": true 2404 | }, 2405 | "latest-version": { 2406 | "version": "3.1.0", 2407 | "bundled": true, 2408 | "requires": { 2409 | "package-json": "4.0.1" 2410 | }, 2411 | "dependencies": { 2412 | "package-json": { 2413 | "version": "4.0.1", 2414 | "bundled": true, 2415 | "requires": { 2416 | "got": "6.7.1", 2417 | "registry-auth-token": "3.3.1", 2418 | "registry-url": "3.1.0", 2419 | "semver": "5.3.0" 2420 | }, 2421 | "dependencies": { 2422 | "got": { 2423 | "version": "6.7.1", 2424 | "bundled": true, 2425 | "requires": { 2426 | "create-error-class": "3.0.2", 2427 | "duplexer3": "0.1.4", 2428 | "get-stream": "3.0.0", 2429 | "is-redirect": "1.0.0", 2430 | "is-retry-allowed": "1.1.0", 2431 | "is-stream": "1.1.0", 2432 | "lowercase-keys": "1.0.0", 2433 | "safe-buffer": "5.1.1", 2434 | "timed-out": "4.0.1", 2435 | "unzip-response": "2.0.1", 2436 | "url-parse-lax": "1.0.0" 2437 | }, 2438 | "dependencies": { 2439 | "create-error-class": { 2440 | "version": "3.0.2", 2441 | "bundled": true, 2442 | "requires": { 2443 | "capture-stack-trace": "1.0.0" 2444 | }, 2445 | "dependencies": { 2446 | "capture-stack-trace": { 2447 | "version": "1.0.0", 2448 | "bundled": true 2449 | } 2450 | } 2451 | }, 2452 | "duplexer3": { 2453 | "version": "0.1.4", 2454 | "bundled": true 2455 | }, 2456 | "get-stream": { 2457 | "version": "3.0.0", 2458 | "bundled": true 2459 | }, 2460 | "is-redirect": { 2461 | "version": "1.0.0", 2462 | "bundled": true 2463 | }, 2464 | "is-retry-allowed": { 2465 | "version": "1.1.0", 2466 | "bundled": true 2467 | }, 2468 | "is-stream": { 2469 | "version": "1.1.0", 2470 | "bundled": true 2471 | }, 2472 | "lowercase-keys": { 2473 | "version": "1.0.0", 2474 | "bundled": true 2475 | }, 2476 | "timed-out": { 2477 | "version": "4.0.1", 2478 | "bundled": true 2479 | }, 2480 | "unzip-response": { 2481 | "version": "2.0.1", 2482 | "bundled": true 2483 | }, 2484 | "url-parse-lax": { 2485 | "version": "1.0.0", 2486 | "bundled": true, 2487 | "requires": { 2488 | "prepend-http": "1.0.4" 2489 | }, 2490 | "dependencies": { 2491 | "prepend-http": { 2492 | "version": "1.0.4", 2493 | "bundled": true 2494 | } 2495 | } 2496 | } 2497 | } 2498 | }, 2499 | "registry-auth-token": { 2500 | "version": "3.3.1", 2501 | "bundled": true, 2502 | "requires": { 2503 | "rc": "1.2.1", 2504 | "safe-buffer": "5.1.1" 2505 | }, 2506 | "dependencies": { 2507 | "rc": { 2508 | "version": "1.2.1", 2509 | "bundled": true, 2510 | "requires": { 2511 | "deep-extend": "0.4.2", 2512 | "ini": "1.3.4", 2513 | "minimist": "1.2.0", 2514 | "strip-json-comments": "2.0.1" 2515 | }, 2516 | "dependencies": { 2517 | "deep-extend": { 2518 | "version": "0.4.2", 2519 | "bundled": true 2520 | }, 2521 | "minimist": { 2522 | "version": "1.2.0", 2523 | "bundled": true 2524 | }, 2525 | "strip-json-comments": { 2526 | "version": "2.0.1", 2527 | "bundled": true 2528 | } 2529 | } 2530 | } 2531 | } 2532 | }, 2533 | "registry-url": { 2534 | "version": "3.1.0", 2535 | "bundled": true, 2536 | "requires": { 2537 | "rc": "1.2.1" 2538 | }, 2539 | "dependencies": { 2540 | "rc": { 2541 | "version": "1.2.1", 2542 | "bundled": true, 2543 | "requires": { 2544 | "deep-extend": "0.4.2", 2545 | "ini": "1.3.4", 2546 | "minimist": "1.2.0", 2547 | "strip-json-comments": "2.0.1" 2548 | }, 2549 | "dependencies": { 2550 | "deep-extend": { 2551 | "version": "0.4.2", 2552 | "bundled": true 2553 | }, 2554 | "minimist": { 2555 | "version": "1.2.0", 2556 | "bundled": true 2557 | }, 2558 | "strip-json-comments": { 2559 | "version": "2.0.1", 2560 | "bundled": true 2561 | } 2562 | } 2563 | } 2564 | } 2565 | } 2566 | } 2567 | } 2568 | } 2569 | }, 2570 | "semver-diff": { 2571 | "version": "2.1.0", 2572 | "bundled": true, 2573 | "requires": { 2574 | "semver": "5.3.0" 2575 | } 2576 | }, 2577 | "xdg-basedir": { 2578 | "version": "3.0.0", 2579 | "bundled": true 2580 | } 2581 | } 2582 | }, 2583 | "uuid": { 2584 | "version": "3.1.0", 2585 | "bundled": true 2586 | }, 2587 | "validate-npm-package-license": { 2588 | "version": "3.0.1", 2589 | "bundled": true, 2590 | "requires": { 2591 | "spdx-correct": "1.0.2", 2592 | "spdx-expression-parse": "1.0.4" 2593 | }, 2594 | "dependencies": { 2595 | "spdx-correct": { 2596 | "version": "1.0.2", 2597 | "bundled": true, 2598 | "requires": { 2599 | "spdx-license-ids": "1.2.2" 2600 | }, 2601 | "dependencies": { 2602 | "spdx-license-ids": { 2603 | "version": "1.2.2", 2604 | "bundled": true 2605 | } 2606 | } 2607 | }, 2608 | "spdx-expression-parse": { 2609 | "version": "1.0.4", 2610 | "bundled": true 2611 | } 2612 | } 2613 | }, 2614 | "validate-npm-package-name": { 2615 | "version": "3.0.0", 2616 | "bundled": true, 2617 | "requires": { 2618 | "builtins": "1.0.3" 2619 | }, 2620 | "dependencies": { 2621 | "builtins": { 2622 | "version": "1.0.3", 2623 | "bundled": true 2624 | } 2625 | } 2626 | }, 2627 | "which": { 2628 | "version": "1.2.14", 2629 | "bundled": true, 2630 | "requires": { 2631 | "isexe": "2.0.0" 2632 | }, 2633 | "dependencies": { 2634 | "isexe": { 2635 | "version": "2.0.0", 2636 | "bundled": true 2637 | } 2638 | } 2639 | }, 2640 | "worker-farm": { 2641 | "version": "1.3.1", 2642 | "bundled": true, 2643 | "requires": { 2644 | "errno": "0.1.4", 2645 | "xtend": "4.0.1" 2646 | }, 2647 | "dependencies": { 2648 | "errno": { 2649 | "version": "0.1.4", 2650 | "bundled": true, 2651 | "requires": { 2652 | "prr": "0.0.0" 2653 | }, 2654 | "dependencies": { 2655 | "prr": { 2656 | "version": "0.0.0", 2657 | "bundled": true 2658 | } 2659 | } 2660 | }, 2661 | "xtend": { 2662 | "version": "4.0.1", 2663 | "bundled": true 2664 | } 2665 | } 2666 | }, 2667 | "wrappy": { 2668 | "version": "1.0.2", 2669 | "bundled": true 2670 | }, 2671 | "write-file-atomic": { 2672 | "version": "2.1.0", 2673 | "bundled": true, 2674 | "requires": { 2675 | "graceful-fs": "4.1.11", 2676 | "imurmurhash": "0.1.4", 2677 | "slide": "1.1.6" 2678 | } 2679 | } 2680 | } 2681 | }, 2682 | "npmi": { 2683 | "version": "1.0.1", 2684 | "resolved": "https://registry.npmjs.org/npmi/-/npmi-1.0.1.tgz", 2685 | "integrity": "sha1-FddpJzVHVF5oCdzwzhiu1IsCkOI=", 2686 | "requires": { 2687 | "npm": "2.15.12", 2688 | "semver": "4.3.6" 2689 | }, 2690 | "dependencies": { 2691 | "npm": { 2692 | "version": "2.15.12", 2693 | "resolved": "https://registry.npmjs.org/npm/-/npm-2.15.12.tgz", 2694 | "integrity": "sha1-33w+1aJ3w/nUtdgZsFMR0QogCuY=", 2695 | "requires": { 2696 | "abbrev": "1.0.9", 2697 | "ansi": "0.3.1", 2698 | "ansi-regex": "2.0.0", 2699 | "ansicolors": "0.3.2", 2700 | "ansistyles": "0.1.3", 2701 | "archy": "1.0.0", 2702 | "async-some": "1.0.2", 2703 | "block-stream": "0.0.9", 2704 | "char-spinner": "1.0.1", 2705 | "chmodr": "1.0.2", 2706 | "chownr": "1.0.1", 2707 | "cmd-shim": "2.0.2", 2708 | "columnify": "1.5.4", 2709 | "config-chain": "1.1.10", 2710 | "dezalgo": "1.0.3", 2711 | "editor": "1.0.0", 2712 | "fs-vacuum": "1.2.9", 2713 | "fs-write-stream-atomic": "1.0.8", 2714 | "fstream": "1.0.10", 2715 | "fstream-npm": "1.1.1", 2716 | "github-url-from-git": "1.4.0", 2717 | "github-url-from-username-repo": "1.0.2", 2718 | "glob": "7.0.6", 2719 | "graceful-fs": "4.1.6", 2720 | "hosted-git-info": "2.1.5", 2721 | "imurmurhash": "0.1.4", 2722 | "inflight": "1.0.5", 2723 | "inherits": "2.0.3", 2724 | "ini": "1.3.4", 2725 | "init-package-json": "1.9.4", 2726 | "lockfile": "1.0.1", 2727 | "lru-cache": "4.0.1", 2728 | "minimatch": "3.0.3", 2729 | "mkdirp": "0.5.1", 2730 | "node-gyp": "3.6.0", 2731 | "nopt": "3.0.6", 2732 | "normalize-git-url": "3.0.2", 2733 | "normalize-package-data": "2.3.5", 2734 | "npm-cache-filename": "1.0.2", 2735 | "npm-install-checks": "1.0.7", 2736 | "npm-package-arg": "4.1.0", 2737 | "npm-registry-client": "7.2.1", 2738 | "npm-user-validate": "0.1.5", 2739 | "npmlog": "2.0.4", 2740 | "once": "1.4.0", 2741 | "opener": "1.4.1", 2742 | "osenv": "0.1.3", 2743 | "path-is-inside": "1.0.1", 2744 | "read": "1.0.7", 2745 | "read-installed": "4.0.3", 2746 | "read-package-json": "2.0.4", 2747 | "readable-stream": "2.1.5", 2748 | "realize-package-specifier": "3.0.1", 2749 | "request": "2.74.0", 2750 | "retry": "0.10.0", 2751 | "rimraf": "2.5.4", 2752 | "semver": "5.1.0", 2753 | "sha": "2.0.1", 2754 | "slide": "1.1.6", 2755 | "sorted-object": "2.0.0", 2756 | "spdx-license-ids": "1.2.2", 2757 | "strip-ansi": "3.0.1", 2758 | "tar": "2.2.1", 2759 | "text-table": "0.2.0", 2760 | "uid-number": "0.0.6", 2761 | "umask": "1.1.0", 2762 | "validate-npm-package-license": "3.0.1", 2763 | "validate-npm-package-name": "2.2.2", 2764 | "which": "1.2.11", 2765 | "wrappy": "1.0.2", 2766 | "write-file-atomic": "1.1.4" 2767 | }, 2768 | "dependencies": { 2769 | "abbrev": { 2770 | "version": "1.0.9", 2771 | "bundled": true 2772 | }, 2773 | "ansi": { 2774 | "version": "0.3.1", 2775 | "bundled": true 2776 | }, 2777 | "ansi-regex": { 2778 | "version": "2.0.0", 2779 | "bundled": true 2780 | }, 2781 | "ansicolors": { 2782 | "version": "0.3.2", 2783 | "bundled": true 2784 | }, 2785 | "ansistyles": { 2786 | "version": "0.1.3", 2787 | "bundled": true 2788 | }, 2789 | "archy": { 2790 | "version": "1.0.0", 2791 | "bundled": true 2792 | }, 2793 | "async-some": { 2794 | "version": "1.0.2", 2795 | "bundled": true, 2796 | "requires": { 2797 | "dezalgo": "1.0.3" 2798 | } 2799 | }, 2800 | "block-stream": { 2801 | "version": "0.0.9", 2802 | "bundled": true, 2803 | "requires": { 2804 | "inherits": "2.0.3" 2805 | } 2806 | }, 2807 | "char-spinner": { 2808 | "version": "1.0.1", 2809 | "bundled": true 2810 | }, 2811 | "chmodr": { 2812 | "version": "1.0.2", 2813 | "bundled": true 2814 | }, 2815 | "chownr": { 2816 | "version": "1.0.1", 2817 | "bundled": true 2818 | }, 2819 | "cmd-shim": { 2820 | "version": "2.0.2", 2821 | "bundled": true, 2822 | "requires": { 2823 | "graceful-fs": "4.1.6", 2824 | "mkdirp": "0.5.1" 2825 | } 2826 | }, 2827 | "columnify": { 2828 | "version": "1.5.4", 2829 | "bundled": true, 2830 | "requires": { 2831 | "strip-ansi": "3.0.1", 2832 | "wcwidth": "1.0.0" 2833 | }, 2834 | "dependencies": { 2835 | "wcwidth": { 2836 | "version": "1.0.0", 2837 | "bundled": true, 2838 | "requires": { 2839 | "defaults": "1.0.3" 2840 | }, 2841 | "dependencies": { 2842 | "defaults": { 2843 | "version": "1.0.3", 2844 | "bundled": true, 2845 | "requires": { 2846 | "clone": "1.0.2" 2847 | }, 2848 | "dependencies": { 2849 | "clone": { 2850 | "version": "1.0.2", 2851 | "bundled": true 2852 | } 2853 | } 2854 | } 2855 | } 2856 | } 2857 | } 2858 | }, 2859 | "config-chain": { 2860 | "version": "1.1.10", 2861 | "bundled": true, 2862 | "requires": { 2863 | "ini": "1.3.4", 2864 | "proto-list": "1.2.4" 2865 | }, 2866 | "dependencies": { 2867 | "proto-list": { 2868 | "version": "1.2.4", 2869 | "bundled": true 2870 | } 2871 | } 2872 | }, 2873 | "dezalgo": { 2874 | "version": "1.0.3", 2875 | "bundled": true, 2876 | "requires": { 2877 | "asap": "2.0.3", 2878 | "wrappy": "1.0.2" 2879 | }, 2880 | "dependencies": { 2881 | "asap": { 2882 | "version": "2.0.3", 2883 | "bundled": true 2884 | } 2885 | } 2886 | }, 2887 | "editor": { 2888 | "version": "1.0.0", 2889 | "bundled": true 2890 | }, 2891 | "fs-vacuum": { 2892 | "version": "1.2.9", 2893 | "bundled": true, 2894 | "requires": { 2895 | "graceful-fs": "4.1.6", 2896 | "path-is-inside": "1.0.1", 2897 | "rimraf": "2.5.4" 2898 | } 2899 | }, 2900 | "fs-write-stream-atomic": { 2901 | "version": "1.0.8", 2902 | "bundled": true, 2903 | "requires": { 2904 | "graceful-fs": "4.1.6", 2905 | "iferr": "0.1.5", 2906 | "imurmurhash": "0.1.4", 2907 | "readable-stream": "2.1.5" 2908 | }, 2909 | "dependencies": { 2910 | "iferr": { 2911 | "version": "0.1.5", 2912 | "bundled": true 2913 | } 2914 | } 2915 | }, 2916 | "fstream": { 2917 | "version": "1.0.10", 2918 | "bundled": true, 2919 | "requires": { 2920 | "graceful-fs": "4.1.6", 2921 | "inherits": "2.0.3", 2922 | "mkdirp": "0.5.1", 2923 | "rimraf": "2.5.4" 2924 | } 2925 | }, 2926 | "fstream-npm": { 2927 | "version": "1.1.1", 2928 | "bundled": true, 2929 | "requires": { 2930 | "fstream-ignore": "1.0.5", 2931 | "inherits": "2.0.3" 2932 | }, 2933 | "dependencies": { 2934 | "fstream-ignore": { 2935 | "version": "1.0.5", 2936 | "bundled": true, 2937 | "requires": { 2938 | "fstream": "1.0.10", 2939 | "inherits": "2.0.3", 2940 | "minimatch": "3.0.3" 2941 | } 2942 | } 2943 | } 2944 | }, 2945 | "github-url-from-git": { 2946 | "version": "1.4.0", 2947 | "bundled": true 2948 | }, 2949 | "github-url-from-username-repo": { 2950 | "version": "1.0.2", 2951 | "bundled": true 2952 | }, 2953 | "glob": { 2954 | "version": "7.0.6", 2955 | "bundled": true, 2956 | "requires": { 2957 | "fs.realpath": "1.0.0", 2958 | "inflight": "1.0.5", 2959 | "inherits": "2.0.3", 2960 | "minimatch": "3.0.3", 2961 | "once": "1.4.0", 2962 | "path-is-absolute": "1.0.0" 2963 | }, 2964 | "dependencies": { 2965 | "fs.realpath": { 2966 | "version": "1.0.0", 2967 | "bundled": true 2968 | }, 2969 | "path-is-absolute": { 2970 | "version": "1.0.0", 2971 | "bundled": true 2972 | } 2973 | } 2974 | }, 2975 | "graceful-fs": { 2976 | "version": "4.1.6", 2977 | "bundled": true 2978 | }, 2979 | "hosted-git-info": { 2980 | "version": "2.1.5", 2981 | "bundled": true 2982 | }, 2983 | "imurmurhash": { 2984 | "version": "0.1.4", 2985 | "bundled": true 2986 | }, 2987 | "inflight": { 2988 | "version": "1.0.5", 2989 | "bundled": true, 2990 | "requires": { 2991 | "once": "1.4.0", 2992 | "wrappy": "1.0.2" 2993 | } 2994 | }, 2995 | "inherits": { 2996 | "version": "2.0.3", 2997 | "bundled": true 2998 | }, 2999 | "ini": { 3000 | "version": "1.3.4", 3001 | "bundled": true 3002 | }, 3003 | "init-package-json": { 3004 | "version": "1.9.4", 3005 | "bundled": true, 3006 | "requires": { 3007 | "glob": "6.0.4", 3008 | "npm-package-arg": "4.1.0", 3009 | "promzard": "0.3.0", 3010 | "read": "1.0.7", 3011 | "read-package-json": "2.0.4", 3012 | "semver": "5.1.0", 3013 | "validate-npm-package-license": "3.0.1", 3014 | "validate-npm-package-name": "2.2.2" 3015 | }, 3016 | "dependencies": { 3017 | "glob": { 3018 | "version": "6.0.4", 3019 | "bundled": true, 3020 | "requires": { 3021 | "inflight": "1.0.5", 3022 | "inherits": "2.0.3", 3023 | "minimatch": "3.0.3", 3024 | "once": "1.4.0", 3025 | "path-is-absolute": "1.0.0" 3026 | }, 3027 | "dependencies": { 3028 | "path-is-absolute": { 3029 | "version": "1.0.0", 3030 | "bundled": true 3031 | } 3032 | } 3033 | }, 3034 | "promzard": { 3035 | "version": "0.3.0", 3036 | "bundled": true, 3037 | "requires": { 3038 | "read": "1.0.7" 3039 | } 3040 | } 3041 | } 3042 | }, 3043 | "lockfile": { 3044 | "version": "1.0.1", 3045 | "bundled": true 3046 | }, 3047 | "lru-cache": { 3048 | "version": "4.0.1", 3049 | "bundled": true, 3050 | "requires": { 3051 | "pseudomap": "1.0.2", 3052 | "yallist": "2.0.0" 3053 | }, 3054 | "dependencies": { 3055 | "pseudomap": { 3056 | "version": "1.0.2", 3057 | "bundled": true 3058 | }, 3059 | "yallist": { 3060 | "version": "2.0.0", 3061 | "bundled": true 3062 | } 3063 | } 3064 | }, 3065 | "minimatch": { 3066 | "version": "3.0.3", 3067 | "bundled": true, 3068 | "requires": { 3069 | "brace-expansion": "1.1.6" 3070 | }, 3071 | "dependencies": { 3072 | "brace-expansion": { 3073 | "version": "1.1.6", 3074 | "bundled": true, 3075 | "requires": { 3076 | "balanced-match": "0.4.2", 3077 | "concat-map": "0.0.1" 3078 | }, 3079 | "dependencies": { 3080 | "balanced-match": { 3081 | "version": "0.4.2", 3082 | "bundled": true 3083 | }, 3084 | "concat-map": { 3085 | "version": "0.0.1", 3086 | "bundled": true 3087 | } 3088 | } 3089 | } 3090 | } 3091 | }, 3092 | "mkdirp": { 3093 | "version": "0.5.1", 3094 | "bundled": true, 3095 | "requires": { 3096 | "minimist": "0.0.8" 3097 | }, 3098 | "dependencies": { 3099 | "minimist": { 3100 | "version": "0.0.8", 3101 | "bundled": true 3102 | } 3103 | } 3104 | }, 3105 | "node-gyp": { 3106 | "version": "3.6.0", 3107 | "bundled": true, 3108 | "requires": { 3109 | "fstream": "1.0.10", 3110 | "glob": "7.0.6", 3111 | "graceful-fs": "4.1.6", 3112 | "minimatch": "3.0.3", 3113 | "mkdirp": "0.5.1", 3114 | "nopt": "3.0.6", 3115 | "npmlog": "2.0.4", 3116 | "osenv": "0.1.3", 3117 | "request": "2.74.0", 3118 | "rimraf": "2.5.4", 3119 | "semver": "5.3.0", 3120 | "tar": "2.2.1", 3121 | "which": "1.2.11" 3122 | }, 3123 | "dependencies": { 3124 | "semver": { 3125 | "version": "5.3.0", 3126 | "bundled": true 3127 | } 3128 | } 3129 | }, 3130 | "nopt": { 3131 | "version": "3.0.6", 3132 | "bundled": true, 3133 | "requires": { 3134 | "abbrev": "1.0.9" 3135 | } 3136 | }, 3137 | "normalize-git-url": { 3138 | "version": "3.0.2", 3139 | "bundled": true 3140 | }, 3141 | "normalize-package-data": { 3142 | "version": "2.3.5", 3143 | "bundled": true, 3144 | "requires": { 3145 | "hosted-git-info": "2.1.5", 3146 | "is-builtin-module": "1.0.0", 3147 | "semver": "5.1.0", 3148 | "validate-npm-package-license": "3.0.1" 3149 | }, 3150 | "dependencies": { 3151 | "is-builtin-module": { 3152 | "version": "1.0.0", 3153 | "bundled": true, 3154 | "requires": { 3155 | "builtin-modules": "1.1.0" 3156 | }, 3157 | "dependencies": { 3158 | "builtin-modules": { 3159 | "version": "1.1.0", 3160 | "bundled": true 3161 | } 3162 | } 3163 | } 3164 | } 3165 | }, 3166 | "npm-cache-filename": { 3167 | "version": "1.0.2", 3168 | "bundled": true 3169 | }, 3170 | "npm-install-checks": { 3171 | "version": "1.0.7", 3172 | "bundled": true, 3173 | "requires": { 3174 | "npmlog": "2.0.4", 3175 | "semver": "5.1.0" 3176 | } 3177 | }, 3178 | "npm-package-arg": { 3179 | "version": "4.1.0", 3180 | "bundled": true, 3181 | "requires": { 3182 | "hosted-git-info": "2.1.5", 3183 | "semver": "5.1.0" 3184 | } 3185 | }, 3186 | "npm-registry-client": { 3187 | "version": "7.2.1", 3188 | "bundled": true, 3189 | "requires": { 3190 | "concat-stream": "1.5.2", 3191 | "graceful-fs": "4.1.6", 3192 | "normalize-package-data": "2.3.5", 3193 | "npm-package-arg": "4.1.0", 3194 | "npmlog": "2.0.4", 3195 | "once": "1.4.0", 3196 | "request": "2.74.0", 3197 | "retry": "0.10.0", 3198 | "semver": "5.1.0", 3199 | "slide": "1.1.6" 3200 | }, 3201 | "dependencies": { 3202 | "concat-stream": { 3203 | "version": "1.5.2", 3204 | "bundled": true, 3205 | "requires": { 3206 | "inherits": "2.0.3", 3207 | "readable-stream": "2.0.6", 3208 | "typedarray": "0.0.6" 3209 | }, 3210 | "dependencies": { 3211 | "readable-stream": { 3212 | "version": "2.0.6", 3213 | "bundled": true, 3214 | "requires": { 3215 | "core-util-is": "1.0.2", 3216 | "inherits": "2.0.3", 3217 | "isarray": "1.0.0", 3218 | "process-nextick-args": "1.0.7", 3219 | "string_decoder": "0.10.31", 3220 | "util-deprecate": "1.0.2" 3221 | }, 3222 | "dependencies": { 3223 | "core-util-is": { 3224 | "version": "1.0.2", 3225 | "bundled": true 3226 | }, 3227 | "isarray": { 3228 | "version": "1.0.0", 3229 | "bundled": true 3230 | }, 3231 | "process-nextick-args": { 3232 | "version": "1.0.7", 3233 | "bundled": true 3234 | }, 3235 | "string_decoder": { 3236 | "version": "0.10.31", 3237 | "bundled": true 3238 | }, 3239 | "util-deprecate": { 3240 | "version": "1.0.2", 3241 | "bundled": true 3242 | } 3243 | } 3244 | }, 3245 | "typedarray": { 3246 | "version": "0.0.6", 3247 | "bundled": true 3248 | } 3249 | } 3250 | }, 3251 | "retry": { 3252 | "version": "0.10.0", 3253 | "bundled": true 3254 | } 3255 | } 3256 | }, 3257 | "npm-user-validate": { 3258 | "version": "0.1.5", 3259 | "bundled": true 3260 | }, 3261 | "npmlog": { 3262 | "version": "2.0.4", 3263 | "bundled": true, 3264 | "requires": { 3265 | "ansi": "0.3.1", 3266 | "are-we-there-yet": "1.1.2", 3267 | "gauge": "1.2.7" 3268 | }, 3269 | "dependencies": { 3270 | "are-we-there-yet": { 3271 | "version": "1.1.2", 3272 | "bundled": true, 3273 | "requires": { 3274 | "delegates": "1.0.0", 3275 | "readable-stream": "2.1.5" 3276 | }, 3277 | "dependencies": { 3278 | "delegates": { 3279 | "version": "1.0.0", 3280 | "bundled": true 3281 | } 3282 | } 3283 | }, 3284 | "gauge": { 3285 | "version": "1.2.7", 3286 | "bundled": true, 3287 | "requires": { 3288 | "ansi": "0.3.1", 3289 | "has-unicode": "2.0.0", 3290 | "lodash.pad": "4.4.0", 3291 | "lodash.padend": "4.5.0", 3292 | "lodash.padstart": "4.5.0" 3293 | }, 3294 | "dependencies": { 3295 | "has-unicode": { 3296 | "version": "2.0.0", 3297 | "bundled": true 3298 | }, 3299 | "lodash._baseslice": { 3300 | "version": "4.0.0", 3301 | "bundled": true 3302 | }, 3303 | "lodash._basetostring": { 3304 | "version": "4.12.0", 3305 | "bundled": true 3306 | }, 3307 | "lodash.pad": { 3308 | "version": "4.4.0", 3309 | "bundled": true, 3310 | "requires": { 3311 | "lodash._baseslice": "4.0.0", 3312 | "lodash._basetostring": "4.12.0", 3313 | "lodash.tostring": "4.1.4" 3314 | } 3315 | }, 3316 | "lodash.padend": { 3317 | "version": "4.5.0", 3318 | "bundled": true, 3319 | "requires": { 3320 | "lodash._baseslice": "4.0.0", 3321 | "lodash._basetostring": "4.12.0", 3322 | "lodash.tostring": "4.1.4" 3323 | } 3324 | }, 3325 | "lodash.padstart": { 3326 | "version": "4.5.0", 3327 | "bundled": true, 3328 | "requires": { 3329 | "lodash._baseslice": "4.0.0", 3330 | "lodash._basetostring": "4.12.0", 3331 | "lodash.tostring": "4.1.4" 3332 | } 3333 | }, 3334 | "lodash.tostring": { 3335 | "version": "4.1.4", 3336 | "bundled": true 3337 | } 3338 | } 3339 | } 3340 | } 3341 | }, 3342 | "once": { 3343 | "version": "1.4.0", 3344 | "bundled": true, 3345 | "requires": { 3346 | "wrappy": "1.0.2" 3347 | } 3348 | }, 3349 | "opener": { 3350 | "version": "1.4.1", 3351 | "bundled": true 3352 | }, 3353 | "osenv": { 3354 | "version": "0.1.3", 3355 | "bundled": true, 3356 | "requires": { 3357 | "os-homedir": "1.0.0", 3358 | "os-tmpdir": "1.0.1" 3359 | }, 3360 | "dependencies": { 3361 | "os-homedir": { 3362 | "version": "1.0.0", 3363 | "bundled": true 3364 | }, 3365 | "os-tmpdir": { 3366 | "version": "1.0.1", 3367 | "bundled": true 3368 | } 3369 | } 3370 | }, 3371 | "path-is-inside": { 3372 | "version": "1.0.1", 3373 | "bundled": true 3374 | }, 3375 | "read": { 3376 | "version": "1.0.7", 3377 | "bundled": true, 3378 | "requires": { 3379 | "mute-stream": "0.0.5" 3380 | }, 3381 | "dependencies": { 3382 | "mute-stream": { 3383 | "version": "0.0.5", 3384 | "bundled": true 3385 | } 3386 | } 3387 | }, 3388 | "read-installed": { 3389 | "version": "4.0.3", 3390 | "bundled": true, 3391 | "requires": { 3392 | "debuglog": "1.0.1", 3393 | "graceful-fs": "4.1.6", 3394 | "read-package-json": "2.0.4", 3395 | "readdir-scoped-modules": "1.0.2", 3396 | "semver": "5.1.0", 3397 | "slide": "1.1.6", 3398 | "util-extend": "1.0.1" 3399 | }, 3400 | "dependencies": { 3401 | "debuglog": { 3402 | "version": "1.0.1", 3403 | "bundled": true 3404 | }, 3405 | "readdir-scoped-modules": { 3406 | "version": "1.0.2", 3407 | "bundled": true, 3408 | "requires": { 3409 | "debuglog": "1.0.1", 3410 | "dezalgo": "1.0.3", 3411 | "graceful-fs": "4.1.6", 3412 | "once": "1.4.0" 3413 | } 3414 | }, 3415 | "util-extend": { 3416 | "version": "1.0.1", 3417 | "bundled": true 3418 | } 3419 | } 3420 | }, 3421 | "read-package-json": { 3422 | "version": "2.0.4", 3423 | "bundled": true, 3424 | "requires": { 3425 | "glob": "6.0.4", 3426 | "graceful-fs": "4.1.6", 3427 | "json-parse-helpfulerror": "1.0.3", 3428 | "normalize-package-data": "2.3.5" 3429 | }, 3430 | "dependencies": { 3431 | "glob": { 3432 | "version": "6.0.4", 3433 | "bundled": true, 3434 | "requires": { 3435 | "inflight": "1.0.5", 3436 | "inherits": "2.0.3", 3437 | "minimatch": "3.0.3", 3438 | "once": "1.4.0", 3439 | "path-is-absolute": "1.0.0" 3440 | }, 3441 | "dependencies": { 3442 | "path-is-absolute": { 3443 | "version": "1.0.0", 3444 | "bundled": true 3445 | } 3446 | } 3447 | }, 3448 | "json-parse-helpfulerror": { 3449 | "version": "1.0.3", 3450 | "bundled": true, 3451 | "requires": { 3452 | "jju": "1.3.0" 3453 | }, 3454 | "dependencies": { 3455 | "jju": { 3456 | "version": "1.3.0", 3457 | "bundled": true 3458 | } 3459 | } 3460 | } 3461 | } 3462 | }, 3463 | "readable-stream": { 3464 | "version": "2.1.5", 3465 | "bundled": true, 3466 | "requires": { 3467 | "buffer-shims": "1.0.0", 3468 | "core-util-is": "1.0.2", 3469 | "inherits": "2.0.3", 3470 | "isarray": "1.0.0", 3471 | "process-nextick-args": "1.0.7", 3472 | "string_decoder": "0.10.31", 3473 | "util-deprecate": "1.0.2" 3474 | }, 3475 | "dependencies": { 3476 | "buffer-shims": { 3477 | "version": "1.0.0", 3478 | "bundled": true 3479 | }, 3480 | "core-util-is": { 3481 | "version": "1.0.2", 3482 | "bundled": true 3483 | }, 3484 | "isarray": { 3485 | "version": "1.0.0", 3486 | "bundled": true 3487 | }, 3488 | "process-nextick-args": { 3489 | "version": "1.0.7", 3490 | "bundled": true 3491 | }, 3492 | "string_decoder": { 3493 | "version": "0.10.31", 3494 | "bundled": true 3495 | }, 3496 | "util-deprecate": { 3497 | "version": "1.0.2", 3498 | "bundled": true 3499 | } 3500 | } 3501 | }, 3502 | "realize-package-specifier": { 3503 | "version": "3.0.1", 3504 | "bundled": true, 3505 | "requires": { 3506 | "dezalgo": "1.0.3", 3507 | "npm-package-arg": "4.1.0" 3508 | } 3509 | }, 3510 | "request": { 3511 | "version": "2.74.0", 3512 | "bundled": true, 3513 | "requires": { 3514 | "aws-sign2": "0.6.0", 3515 | "aws4": "1.4.1", 3516 | "bl": "1.1.2", 3517 | "caseless": "0.11.0", 3518 | "combined-stream": "1.0.5", 3519 | "extend": "3.0.0", 3520 | "forever-agent": "0.6.1", 3521 | "form-data": "1.0.0-rc4", 3522 | "har-validator": "2.0.6", 3523 | "hawk": "3.1.3", 3524 | "http-signature": "1.1.1", 3525 | "is-typedarray": "1.0.0", 3526 | "isstream": "0.1.2", 3527 | "json-stringify-safe": "5.0.1", 3528 | "mime-types": "2.1.11", 3529 | "node-uuid": "1.4.7", 3530 | "oauth-sign": "0.8.2", 3531 | "qs": "6.2.1", 3532 | "stringstream": "0.0.5", 3533 | "tough-cookie": "2.3.1", 3534 | "tunnel-agent": "0.4.3" 3535 | }, 3536 | "dependencies": { 3537 | "aws-sign2": { 3538 | "version": "0.6.0", 3539 | "bundled": true 3540 | }, 3541 | "aws4": { 3542 | "version": "1.4.1", 3543 | "bundled": true 3544 | }, 3545 | "bl": { 3546 | "version": "1.1.2", 3547 | "bundled": true, 3548 | "requires": { 3549 | "readable-stream": "2.0.6" 3550 | }, 3551 | "dependencies": { 3552 | "readable-stream": { 3553 | "version": "2.0.6", 3554 | "bundled": true, 3555 | "requires": { 3556 | "core-util-is": "1.0.2", 3557 | "inherits": "2.0.3", 3558 | "isarray": "1.0.0", 3559 | "process-nextick-args": "1.0.7", 3560 | "string_decoder": "0.10.31", 3561 | "util-deprecate": "1.0.2" 3562 | }, 3563 | "dependencies": { 3564 | "core-util-is": { 3565 | "version": "1.0.2", 3566 | "bundled": true 3567 | }, 3568 | "isarray": { 3569 | "version": "1.0.0", 3570 | "bundled": true 3571 | }, 3572 | "process-nextick-args": { 3573 | "version": "1.0.7", 3574 | "bundled": true 3575 | }, 3576 | "string_decoder": { 3577 | "version": "0.10.31", 3578 | "bundled": true 3579 | }, 3580 | "util-deprecate": { 3581 | "version": "1.0.2", 3582 | "bundled": true 3583 | } 3584 | } 3585 | } 3586 | } 3587 | }, 3588 | "caseless": { 3589 | "version": "0.11.0", 3590 | "bundled": true 3591 | }, 3592 | "combined-stream": { 3593 | "version": "1.0.5", 3594 | "bundled": true, 3595 | "requires": { 3596 | "delayed-stream": "1.0.0" 3597 | }, 3598 | "dependencies": { 3599 | "delayed-stream": { 3600 | "version": "1.0.0", 3601 | "bundled": true 3602 | } 3603 | } 3604 | }, 3605 | "extend": { 3606 | "version": "3.0.0", 3607 | "bundled": true 3608 | }, 3609 | "forever-agent": { 3610 | "version": "0.6.1", 3611 | "bundled": true 3612 | }, 3613 | "form-data": { 3614 | "version": "1.0.0-rc4", 3615 | "bundled": true, 3616 | "requires": { 3617 | "async": "1.5.2", 3618 | "combined-stream": "1.0.5", 3619 | "mime-types": "2.1.11" 3620 | }, 3621 | "dependencies": { 3622 | "async": { 3623 | "version": "1.5.2", 3624 | "bundled": true 3625 | } 3626 | } 3627 | }, 3628 | "har-validator": { 3629 | "version": "2.0.6", 3630 | "bundled": true, 3631 | "requires": { 3632 | "chalk": "1.1.3", 3633 | "commander": "2.9.0", 3634 | "is-my-json-valid": "2.13.1", 3635 | "pinkie-promise": "2.0.1" 3636 | }, 3637 | "dependencies": { 3638 | "chalk": { 3639 | "version": "1.1.3", 3640 | "bundled": true, 3641 | "requires": { 3642 | "ansi-styles": "2.2.1", 3643 | "escape-string-regexp": "1.0.5", 3644 | "has-ansi": "2.0.0", 3645 | "strip-ansi": "3.0.1", 3646 | "supports-color": "2.0.0" 3647 | }, 3648 | "dependencies": { 3649 | "ansi-styles": { 3650 | "version": "2.2.1", 3651 | "bundled": true 3652 | }, 3653 | "escape-string-regexp": { 3654 | "version": "1.0.5", 3655 | "bundled": true 3656 | }, 3657 | "has-ansi": { 3658 | "version": "2.0.0", 3659 | "bundled": true, 3660 | "requires": { 3661 | "ansi-regex": "2.0.0" 3662 | } 3663 | }, 3664 | "supports-color": { 3665 | "version": "2.0.0", 3666 | "bundled": true 3667 | } 3668 | } 3669 | }, 3670 | "commander": { 3671 | "version": "2.9.0", 3672 | "bundled": true, 3673 | "requires": { 3674 | "graceful-readlink": "1.0.1" 3675 | }, 3676 | "dependencies": { 3677 | "graceful-readlink": { 3678 | "version": "1.0.1", 3679 | "bundled": true 3680 | } 3681 | } 3682 | }, 3683 | "is-my-json-valid": { 3684 | "version": "2.13.1", 3685 | "bundled": true, 3686 | "requires": { 3687 | "generate-function": "2.0.0", 3688 | "generate-object-property": "1.2.0", 3689 | "jsonpointer": "2.0.0", 3690 | "xtend": "4.0.1" 3691 | }, 3692 | "dependencies": { 3693 | "generate-function": { 3694 | "version": "2.0.0", 3695 | "bundled": true 3696 | }, 3697 | "generate-object-property": { 3698 | "version": "1.2.0", 3699 | "bundled": true, 3700 | "requires": { 3701 | "is-property": "1.0.2" 3702 | }, 3703 | "dependencies": { 3704 | "is-property": { 3705 | "version": "1.0.2", 3706 | "bundled": true 3707 | } 3708 | } 3709 | }, 3710 | "jsonpointer": { 3711 | "version": "2.0.0", 3712 | "bundled": true 3713 | }, 3714 | "xtend": { 3715 | "version": "4.0.1", 3716 | "bundled": true 3717 | } 3718 | } 3719 | }, 3720 | "pinkie-promise": { 3721 | "version": "2.0.1", 3722 | "bundled": true, 3723 | "requires": { 3724 | "pinkie": "2.0.4" 3725 | }, 3726 | "dependencies": { 3727 | "pinkie": { 3728 | "version": "2.0.4", 3729 | "bundled": true 3730 | } 3731 | } 3732 | } 3733 | } 3734 | }, 3735 | "hawk": { 3736 | "version": "3.1.3", 3737 | "bundled": true, 3738 | "requires": { 3739 | "boom": "2.10.1", 3740 | "cryptiles": "2.0.5", 3741 | "hoek": "2.16.3", 3742 | "sntp": "1.0.9" 3743 | }, 3744 | "dependencies": { 3745 | "boom": { 3746 | "version": "2.10.1", 3747 | "bundled": true, 3748 | "requires": { 3749 | "hoek": "2.16.3" 3750 | } 3751 | }, 3752 | "cryptiles": { 3753 | "version": "2.0.5", 3754 | "bundled": true, 3755 | "requires": { 3756 | "boom": "2.10.1" 3757 | } 3758 | }, 3759 | "hoek": { 3760 | "version": "2.16.3", 3761 | "bundled": true 3762 | }, 3763 | "sntp": { 3764 | "version": "1.0.9", 3765 | "bundled": true, 3766 | "requires": { 3767 | "hoek": "2.16.3" 3768 | } 3769 | } 3770 | } 3771 | }, 3772 | "http-signature": { 3773 | "version": "1.1.1", 3774 | "bundled": true, 3775 | "requires": { 3776 | "assert-plus": "0.2.0", 3777 | "jsprim": "1.3.0", 3778 | "sshpk": "1.9.2" 3779 | }, 3780 | "dependencies": { 3781 | "assert-plus": { 3782 | "version": "0.2.0", 3783 | "bundled": true 3784 | }, 3785 | "jsprim": { 3786 | "version": "1.3.0", 3787 | "bundled": true, 3788 | "requires": { 3789 | "extsprintf": "1.0.2", 3790 | "json-schema": "0.2.2", 3791 | "verror": "1.3.6" 3792 | }, 3793 | "dependencies": { 3794 | "extsprintf": { 3795 | "version": "1.0.2", 3796 | "bundled": true 3797 | }, 3798 | "json-schema": { 3799 | "version": "0.2.2", 3800 | "bundled": true 3801 | }, 3802 | "verror": { 3803 | "version": "1.3.6", 3804 | "bundled": true, 3805 | "requires": { 3806 | "extsprintf": "1.0.2" 3807 | } 3808 | } 3809 | } 3810 | }, 3811 | "sshpk": { 3812 | "version": "1.9.2", 3813 | "bundled": true, 3814 | "requires": { 3815 | "asn1": "0.2.3", 3816 | "assert-plus": "1.0.0", 3817 | "dashdash": "1.14.0", 3818 | "ecc-jsbn": "0.1.1", 3819 | "getpass": "0.1.6", 3820 | "jodid25519": "1.0.2", 3821 | "jsbn": "0.1.0", 3822 | "tweetnacl": "0.13.3" 3823 | }, 3824 | "dependencies": { 3825 | "asn1": { 3826 | "version": "0.2.3", 3827 | "bundled": true 3828 | }, 3829 | "assert-plus": { 3830 | "version": "1.0.0", 3831 | "bundled": true 3832 | }, 3833 | "dashdash": { 3834 | "version": "1.14.0", 3835 | "bundled": true, 3836 | "requires": { 3837 | "assert-plus": "1.0.0" 3838 | } 3839 | }, 3840 | "ecc-jsbn": { 3841 | "version": "0.1.1", 3842 | "bundled": true, 3843 | "optional": true, 3844 | "requires": { 3845 | "jsbn": "0.1.0" 3846 | } 3847 | }, 3848 | "getpass": { 3849 | "version": "0.1.6", 3850 | "bundled": true, 3851 | "requires": { 3852 | "assert-plus": "1.0.0" 3853 | } 3854 | }, 3855 | "jodid25519": { 3856 | "version": "1.0.2", 3857 | "bundled": true, 3858 | "optional": true, 3859 | "requires": { 3860 | "jsbn": "0.1.0" 3861 | } 3862 | }, 3863 | "jsbn": { 3864 | "version": "0.1.0", 3865 | "bundled": true, 3866 | "optional": true 3867 | }, 3868 | "tweetnacl": { 3869 | "version": "0.13.3", 3870 | "bundled": true, 3871 | "optional": true 3872 | } 3873 | } 3874 | } 3875 | } 3876 | }, 3877 | "is-typedarray": { 3878 | "version": "1.0.0", 3879 | "bundled": true 3880 | }, 3881 | "isstream": { 3882 | "version": "0.1.2", 3883 | "bundled": true 3884 | }, 3885 | "json-stringify-safe": { 3886 | "version": "5.0.1", 3887 | "bundled": true 3888 | }, 3889 | "mime-types": { 3890 | "version": "2.1.11", 3891 | "bundled": true, 3892 | "requires": { 3893 | "mime-db": "1.23.0" 3894 | }, 3895 | "dependencies": { 3896 | "mime-db": { 3897 | "version": "1.23.0", 3898 | "bundled": true 3899 | } 3900 | } 3901 | }, 3902 | "node-uuid": { 3903 | "version": "1.4.7", 3904 | "bundled": true 3905 | }, 3906 | "oauth-sign": { 3907 | "version": "0.8.2", 3908 | "bundled": true 3909 | }, 3910 | "qs": { 3911 | "version": "6.2.1", 3912 | "bundled": true 3913 | }, 3914 | "stringstream": { 3915 | "version": "0.0.5", 3916 | "bundled": true 3917 | }, 3918 | "tough-cookie": { 3919 | "version": "2.3.1", 3920 | "bundled": true 3921 | }, 3922 | "tunnel-agent": { 3923 | "version": "0.4.3", 3924 | "bundled": true 3925 | } 3926 | } 3927 | }, 3928 | "retry": { 3929 | "version": "0.10.0", 3930 | "bundled": true 3931 | }, 3932 | "rimraf": { 3933 | "version": "2.5.4", 3934 | "bundled": true, 3935 | "requires": { 3936 | "glob": "7.0.6" 3937 | } 3938 | }, 3939 | "semver": { 3940 | "version": "5.1.0", 3941 | "bundled": true 3942 | }, 3943 | "sha": { 3944 | "version": "2.0.1", 3945 | "bundled": true, 3946 | "requires": { 3947 | "graceful-fs": "4.1.6", 3948 | "readable-stream": "2.0.2" 3949 | }, 3950 | "dependencies": { 3951 | "readable-stream": { 3952 | "version": "2.0.2", 3953 | "bundled": true, 3954 | "requires": { 3955 | "core-util-is": "1.0.1", 3956 | "inherits": "2.0.3", 3957 | "isarray": "0.0.1", 3958 | "process-nextick-args": "1.0.3", 3959 | "string_decoder": "0.10.31", 3960 | "util-deprecate": "1.0.1" 3961 | }, 3962 | "dependencies": { 3963 | "core-util-is": { 3964 | "version": "1.0.1", 3965 | "bundled": true 3966 | }, 3967 | "isarray": { 3968 | "version": "0.0.1", 3969 | "bundled": true 3970 | }, 3971 | "process-nextick-args": { 3972 | "version": "1.0.3", 3973 | "bundled": true 3974 | }, 3975 | "string_decoder": { 3976 | "version": "0.10.31", 3977 | "bundled": true 3978 | }, 3979 | "util-deprecate": { 3980 | "version": "1.0.1", 3981 | "bundled": true 3982 | } 3983 | } 3984 | } 3985 | } 3986 | }, 3987 | "slide": { 3988 | "version": "1.1.6", 3989 | "bundled": true 3990 | }, 3991 | "sorted-object": { 3992 | "version": "2.0.0", 3993 | "bundled": true 3994 | }, 3995 | "spdx-license-ids": { 3996 | "version": "1.2.2", 3997 | "bundled": true 3998 | }, 3999 | "strip-ansi": { 4000 | "version": "3.0.1", 4001 | "bundled": true, 4002 | "requires": { 4003 | "ansi-regex": "2.0.0" 4004 | } 4005 | }, 4006 | "tar": { 4007 | "version": "2.2.1", 4008 | "bundled": true, 4009 | "requires": { 4010 | "block-stream": "0.0.9", 4011 | "fstream": "1.0.10", 4012 | "inherits": "2.0.3" 4013 | } 4014 | }, 4015 | "text-table": { 4016 | "version": "0.2.0", 4017 | "bundled": true 4018 | }, 4019 | "uid-number": { 4020 | "version": "0.0.6", 4021 | "bundled": true 4022 | }, 4023 | "umask": { 4024 | "version": "1.1.0", 4025 | "bundled": true 4026 | }, 4027 | "validate-npm-package-license": { 4028 | "version": "3.0.1", 4029 | "bundled": true, 4030 | "requires": { 4031 | "spdx-correct": "1.0.2", 4032 | "spdx-expression-parse": "1.0.2" 4033 | }, 4034 | "dependencies": { 4035 | "spdx-correct": { 4036 | "version": "1.0.2", 4037 | "bundled": true, 4038 | "requires": { 4039 | "spdx-license-ids": "1.2.2" 4040 | } 4041 | }, 4042 | "spdx-expression-parse": { 4043 | "version": "1.0.2", 4044 | "bundled": true, 4045 | "requires": { 4046 | "spdx-exceptions": "1.0.4", 4047 | "spdx-license-ids": "1.2.2" 4048 | }, 4049 | "dependencies": { 4050 | "spdx-exceptions": { 4051 | "version": "1.0.4", 4052 | "bundled": true 4053 | } 4054 | } 4055 | } 4056 | } 4057 | }, 4058 | "validate-npm-package-name": { 4059 | "version": "2.2.2", 4060 | "bundled": true, 4061 | "requires": { 4062 | "builtins": "0.0.7" 4063 | }, 4064 | "dependencies": { 4065 | "builtins": { 4066 | "version": "0.0.7", 4067 | "bundled": true 4068 | } 4069 | } 4070 | }, 4071 | "which": { 4072 | "version": "1.2.11", 4073 | "bundled": true, 4074 | "requires": { 4075 | "isexe": "1.1.2" 4076 | }, 4077 | "dependencies": { 4078 | "isexe": { 4079 | "version": "1.1.2", 4080 | "bundled": true 4081 | } 4082 | } 4083 | }, 4084 | "wrappy": { 4085 | "version": "1.0.2", 4086 | "bundled": true 4087 | }, 4088 | "write-file-atomic": { 4089 | "version": "1.1.4", 4090 | "bundled": true, 4091 | "requires": { 4092 | "graceful-fs": "4.1.6", 4093 | "imurmurhash": "0.1.4", 4094 | "slide": "1.1.6" 4095 | } 4096 | } 4097 | } 4098 | }, 4099 | "semver": { 4100 | "version": "4.3.6", 4101 | "resolved": "https://registry.npmjs.org/semver/-/semver-4.3.6.tgz", 4102 | "integrity": "sha1-MAvG4OhjdPe6YQaLWx7NV/xlMto=" 4103 | } 4104 | } 4105 | }, 4106 | "optimist": { 4107 | "version": "0.6.1", 4108 | "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", 4109 | "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", 4110 | "requires": { 4111 | "minimist": "0.0.10", 4112 | "wordwrap": "0.0.3" 4113 | } 4114 | }, 4115 | "os-homedir": { 4116 | "version": "1.0.2", 4117 | "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", 4118 | "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=" 4119 | }, 4120 | "os-tmpdir": { 4121 | "version": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", 4122 | "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" 4123 | }, 4124 | "q": { 4125 | "version": "1.5.0", 4126 | "resolved": "https://registry.npmjs.org/q/-/q-1.5.0.tgz", 4127 | "integrity": "sha1-3QG6ydBtMObyGa7LglPunr3DCPE=" 4128 | }, 4129 | "semver": { 4130 | "version": "5.3.0", 4131 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz", 4132 | "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=" 4133 | }, 4134 | "tmp": { 4135 | "version": "https://registry.npmjs.org/tmp/-/tmp-0.0.28.tgz", 4136 | "integrity": "sha1-Fyc1t/YU6nrzlmT6hM8N5OUV0SA=", 4137 | "requires": { 4138 | "os-tmpdir": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz" 4139 | } 4140 | }, 4141 | "universalify": { 4142 | "version": "0.1.2", 4143 | "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", 4144 | "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==" 4145 | }, 4146 | "user-home": { 4147 | "version": "2.0.0", 4148 | "resolved": "https://registry.npmjs.org/user-home/-/user-home-2.0.0.tgz", 4149 | "integrity": "sha1-nHC/2Babwdy/SGBODwS4tJzenp8=", 4150 | "requires": { 4151 | "os-homedir": "1.0.2" 4152 | } 4153 | }, 4154 | "wordwrap": { 4155 | "version": "0.0.3", 4156 | "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", 4157 | "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=" 4158 | } 4159 | } 4160 | } 4161 | -------------------------------------------------------------------------------- /src/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "internal", 3 | "version": "1.0.0", 4 | "description": "", 5 | "dependencies": { 6 | "gitbook-cli": "^2.3.2", 7 | "gitbook-plugin-scripts": "^1.0.2" 8 | }, 9 | "devDependencies": {}, 10 | "scripts": { 11 | "build": "gitbook build", 12 | "serve": "gitbook serve" 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /src/pages/concurrency-parallelism/README.md: -------------------------------------------------------------------------------- 1 | # Concurrency & Parallelism 2 | 3 | ## (D) Overview 4 | 5 | **JS** 6 | 7 | The best way to describe Parallelism in Javascript is with this [quote](http://debuggable.com/posts/understanding-node-js:4bd98440-45e4-4a9a-8ef7-0f7ecbdd56cb) by Felix Geisendörfer: 8 | > Well, in node everything runs in parallel, except your code. 9 | 10 | So while your Javascript runtime may use multiple threads for IO, your own code is getting run just by one. That's just how the *evented* model works. 11 | Different Javascript runtimes offer some options for concurrency or parallelism: NodeJS offers [clustering](https://nodejs.org/docs/latest/api/cluster.html), and Browsers offer [web workers](https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API/Using_web_workers). 12 | 13 | **Go** 14 | 15 | On the other hand, Go is all about a concurrency which enables parallelism. It offers Goroutines which enables functions to run concurrently, and channels to communicate between them. While Go standard library has the "sync" package for synchronization primitives, it [encourages](https://blog.golang.org/share-memory-by-communicating) more the use of Goroutines and channels, summarized as: 16 | 17 | > Do not communicate by sharing memory; instead, share memory by communicating 18 | 19 | More on this subject: 20 | - [Go Concurrency Patterns](https://talks.golang.org/2012/concurrency.slide#1) 21 | - [Advanced Go Concurrency Patterns](https://talks.golang.org/2013/advconc.slide#1) 22 | 23 | 24 | ## (D) Async vs Sync APIs 25 | **JS** 26 | 27 | JS promotes writing async APIs, since sync APIs always block the caller, e.g: 28 | ```Javascript 29 | const fs = require('fs'); 30 | 31 | // The caller to this function will be blocked while the file is being read. 32 | function fetchA() { 33 | return fs.readFileSync('a.txt'); 34 | } 35 | ``` 36 | In the example above, the async `fs.readFile()` would be a better choice in most scenarios, making `fetchA()` async and unblocking its caller. 37 | 38 | **Go** 39 | 40 | On the other hand, Go promotes the sync APIs (see “Avoid concurrency in your API” in https://talks.golang.org/2013/bestpractices.slide#26) 41 | The reasoning behind this is that it is completely up to the caller's choice to be blocked or not by a sync API. Consider the following type definition and sync `fetchA` function: 42 | ```Go 43 | type fetchResult struct { 44 | Message string 45 | Error error 46 | } 47 | 48 | func fetchA() fetchResult { 49 | time.Sleep(time.Second * 4) 50 | return fetchResult{"A data", nil} 51 | } 52 | ``` 53 | If the caller wants to be blocked, then he can just call the function 54 | ```Go 55 | a := fetchA() 56 | ``` 57 | If the caller does not want to be blocked, then he could call the function inside a goroutine: 58 | ```Go 59 | aChan := make(chan fetchResult, 0) 60 | go func(c chan fetchResult) { 61 | c <- fetchA() 62 | }(aChan) 63 | 64 | // Do other things, and then read from channel 65 | a := <-aChan 66 | ``` 67 | 68 | ## (D) Sequential and Concurrent Patterns 69 | 70 | **JS** 71 | 72 | Even without parallelism, we can structure Javascript code in both sequential and concurrent flows. 73 | For the following exmaples, let’s assume `fetchA()`, `fetchB()` and `fetchC()` are all async functions returning a promise. 74 | 75 | **Sequential** 76 | 77 | ```Javascript 78 | function fetchSequential() { 79 | fetchA().then(a => { 80 | console.log(a); 81 | return fetchB(); 82 | }).then(b => { 83 | console.log(b); 84 | return fetchC(); 85 | }).then(c => { 86 | console.log(c); 87 | }) 88 | } 89 | ``` 90 | 91 | or 92 | 93 | ```Javascript 94 | async function fetchSequential() { 95 | const a = await fetchA(); 96 | console.log(a); 97 | const b = await fetchB(); 98 | console.log(b); 99 | const c = await fetchC(); 100 | console.log(c); 101 | } 102 | ``` 103 | 104 | **Concurrent** 105 | 106 | ```Javascript 107 | function fetchConcurrent() { 108 | Promise.all([fetchA(), fetchB(), fetchC()]).then(values => { 109 | console.log(values); 110 | } 111 | } 112 | ``` 113 | 114 | or 115 | 116 | ```Javascript 117 | async function fetchConcurrent() { 118 | const values = await Promise.all([fetchA(), fetchB(), fetchC()]) 119 | console.log(values); 120 | } 121 | ``` 122 | 123 | **Go** 124 | 125 | For the following examples, assume `fetchB()` and `fetchC()` are defined as a sync function similarly to `fetchA` in the previous section (The full example is available at https://play.golang.org/p/2BVwtos4-j) 126 | 127 | **Sequential** 128 | 129 | ```Go 130 | func fetchSequential() { 131 | a := fetchA() 132 | fmt.Println(a) 133 | b := fetchB() 134 | fmt.Println(b) 135 | c := fetchC() 136 | fmt.Println(c) 137 | } 138 | ``` 139 | **Concurrent** 140 | 141 | ```Go 142 | func fetchConcurrent() { 143 | aChan := make(chan fetchResult, 0) 144 | go func(c chan fetchResult) { 145 | c <- fetchA() 146 | }(aChan) 147 | bChan := make(chan fetchResult, 0) 148 | go func(c chan fetchResult) { 149 | c <- fetchB() 150 | }(bChan) 151 | cChan := make(chan fetchResult, 0) 152 | go func(c chan fetchResult) { 153 | c <- fetchC() 154 | }(cChan) 155 | 156 | // order doesn't really matter! 157 | a := <-aChan 158 | b := <-bChan 159 | c := <-cChan 160 | fmt.Println(a) 161 | fmt.Println(b) 162 | fmt.Println(c) 163 | } 164 | ``` 165 | 166 | or 167 | 168 | ```Go 169 | 170 | func fetchConcurrent() { 171 | aChan := make(chan fetchResult, 0) 172 | bChan := make(chan fetchResult, 0) 173 | cChan := make(chan fetchResult, 0) 174 | 175 | go func(c chan fetchResult) { 176 | c <- fetchA() 177 | }(aChan) 178 | go func(c chan fetchResult) { 179 | c <- fetchB() 180 | }(bChan) 181 | go func(c chan fetchResult) { 182 | c <- fetchC() 183 | }(cChan) 184 | 185 | for i := 0; i < 3; i++ { 186 | select { 187 | case a := <-aChan: 188 | fmt.Println(a) 189 | case b := <-bChan: 190 | fmt.Println(b) 191 | case c := <-cChan: 192 | fmt.Println(c) 193 | 194 | } 195 | } 196 | } 197 | 198 | ``` 199 | -------------------------------------------------------------------------------- /src/pages/error-handling/README.md: -------------------------------------------------------------------------------- 1 | # Error Handling 2 | ## (B) Flow control and values 3 | 4 | Both languages pass errors as regular values. Also, both languages leverage flow control constructs: Javascript uses `throw` `catch` `finally` block, and Go uses [`panic` `recover` `defer` ](https://blog.golang.org/defer-panic-and-recover) 5 | 6 | ## (D) Usage 7 | Despite the similarity claimed above, the languages differ on how and when errors are handled: 8 | 9 | **JS** 10 | 11 | In JS, the way to propagate an error is determined by the synchronous or asynchronous nature of the function. 12 | If a function is synchronous, then it should use `throw` when an error occurs, and the caller should use `try/catch` blocks. 13 | 14 | Otherwise, an asynchronous function should propagate the error by passing it as a first value to a callback function, or it should return a rejected promise. 15 | 16 | Note the `async/await` mechanism, which is in draft, will consolidate both worlds by having asynchronous errors being handled inside `try/catch` blocks. 17 | 18 | **Go** 19 | 20 | In Go on the other hand, the way to propagate an error is determined by the degree of severity with context of the whole application. 21 | 22 | For example, for a web-server application, if errors occur in a request handling code path, they should not crash the entire server. Therefore, these errors should be returned as a last argument to the caller. 23 | 24 | On the other hand, if an error occurs during the application init, it can be argued that there's no reason to continue, and therefore `panic` would make sense. 25 | 26 | ## (S) Loss of stack trace 27 | While passing errors as values, one drawback is the loss of stack trace. Both languages suffer from this. Some runtimes and libraries try to help. Some libraries: 28 | - JS: [longjohn](https://github.com/mattinsler/longjohn) 29 | - Go: [errgo](https://github.com/juju/errgo) 30 | 31 | ## (D) The future 32 | 33 | Go error handling is the topic of a heated debate. Criticisers of the Go language point to the frequent error "nil handling" code. It is common to see this kind of code block throughout Go code: 34 | ```Go 35 | if err != nil { 36 | return nil, err 37 | } 38 | ``` 39 | Some went as far as creating memes suggesting the above code block should be made into a keyboard button because it is typed so much. 40 | 41 | Criticism came also from Go users. This 2018 Some [user-servy](https://blog.golang.org/survey2018-results) shows that 5% of responders marked error-handling in "What is the biggest challenge you personally face using Go today?". 42 | 43 | The go team has responded, and in [Go 2.0](https://blog.golang.org/go2-next-steps) has error-handling improvement as one of its goals. The path for error-handling improvement proved to be rough. The `try` proposal was rejected following a public discussion that showed a lot of the community wasn't happy with the proposed addition to the language. For more details about the saga, see this [summary](https://www.infoq.com/news/2019/07/go-try-proposal-rejected/). 44 | 45 | We will need to wait for the future to see what it holds for Go error-handling. 46 | -------------------------------------------------------------------------------- /src/pages/flow-control-statements/README.md: -------------------------------------------------------------------------------- 1 | # Flow control statements 2 | ## (B) Loops and iteration 3 | ### For 4 | **JS** 5 | ```Javascript 6 | for(let i=0;i<10;i++){ 7 | console.log(i); 8 | } 9 | ``` 10 | 11 | **Go** 12 | ```Go 13 | for i := 0; i < 10; i++ { 14 | fmt.Println(i) 15 | } 16 | ``` 17 | 18 | ### While 19 | In Go, the `for`'s init and post statement are optional, effectively making it also a "while" statement: 20 | 21 | **JS** 22 | ```Javascript 23 | var i=0; 24 | while(i<10){ 25 | console.log(i); 26 | i++; 27 | } 28 | ``` 29 | 30 | **Go** 31 | ```Go 32 | i := 0 33 | for i < 10 { 34 | fmt.Println(i) 35 | i++ 36 | } 37 | ``` 38 | ### Iterating over an Array/Slice 39 | 40 | **JS** 41 | ```Javascript 42 | ['Rick','Morty','Beth','Summer','Jerry'].forEach(function(value,index){ 43 | console.log(value + ' at index ' + index); 44 | }); 45 | ``` 46 | 47 | **Go** 48 | ```Go 49 | for i, v := range []string{"Rick", "Morty", "Beth", "Summer", "Jerry"} { 50 | fmt.Printf("%v at index %d", v, i) 51 | } 52 | ``` 53 | 54 | 55 | ## (B) If/Else 56 | Go's `if` can contain an init statement, with variables declared scoped only to the `if` and `else` blocks. 57 | 58 | **Go** 59 | ```Go 60 | if value := getSomeValue(); value < limit { 61 | return value 62 | } else { 63 | return value / 2 64 | } 65 | ``` 66 | 67 | ## (D) Switch 68 | The switch statement was one of the motivation for writing this document. 69 | 70 | Go defaults to break, and `fallthrough` needed for otherwise. 71 | 72 | Javascript defaults to fallthrough, and `break` needed for otherwise. 73 | 74 | **JS** 75 | ```Javascript 76 | switch (favorite) { 77 | case "yellow": 78 | console.log("yellow"); 79 | break; 80 | case "red": 81 | console.log("red"); 82 | case "purple": 83 | console.log("(and) purple"); 84 | default: 85 | console.log("white"); 86 | } 87 | 88 | ``` 89 | 90 | **Go** 91 | ```Go 92 | switch favorite { 93 | case "yellow": 94 | fmt.Println("yellow") 95 | case "red": 96 | fmt.Println("red") 97 | fallthrough 98 | case "purple": 99 | fmt.Println("(and) purple") 100 | default: 101 | fmt.Println("white") 102 | } 103 | ``` 104 | -------------------------------------------------------------------------------- /src/pages/functions/README.md: -------------------------------------------------------------------------------- 1 | # Functions 2 | ## (S) first-class functions 3 | Both languages treat functions as first-class citizens. Both allow functions to be passed as arguments, to be a returned value, to be nested, and have closures. 4 | 5 | Function nesting in Javascript can be done both with named and anonymous functions, while in Go this can only be done with anonymous functions. 6 | 7 | ## (D) Multiple returns 8 | Go functions can return multiple values 9 | 10 | **Go** 11 | ```Go 12 | func hello() (string, string) { 13 | return "hello", "world" 14 | } 15 | 16 | func main() { 17 | a, b := hello() 18 | fmt.Println(a, b) 19 | } 20 | ``` 21 | Javascript cannot, however by using destructuring assignment syntax, we can get a similar behavior 22 | 23 | **JS** 24 | ```Javascript 25 | function hello() { 26 | return ["hello", "world"]; 27 | } 28 | 29 | var [a, b] = hello(); 30 | console.log(a,b); 31 | ``` 32 | 33 | ## (S) IIFE 34 | 35 | **JS** 36 | ```Javascript 37 | (function () { 38 | console.log('hello'); 39 | }()); 40 | ``` 41 | 42 | **Go** 43 | ```Go 44 | func main() { 45 | func() { 46 | fmt.Println("Hello") 47 | }() 48 | } 49 | ``` 50 | 51 | ## (S) Closures 52 | Both languages have closures. Both require caution when [creating closures inside loops](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Closures#Creating_closures_in_loops_A_common_mistake). Here are examples in both languages that demonstrate a similar technique to bypass the closure/loop trap: 53 | 54 | **JS (with bug)** 55 | ```Javascript 56 | var i = 0; 57 | for (; i < 10 ; i++) { 58 | setTimeout((function() {console.log(i);}),0); 59 | } 60 | ``` 61 | 62 | **JS (solved)** (note that using `for(let i=0; …` instead of `var` is a more practical solution) 63 | ```Javascript 64 | var i = 0; 65 | for (; i < 10 ; i++) { 66 | (function (i) { 67 | setTimeout((function() {console.log(i);}),0); 68 | }(i)); 69 | } 70 | ``` 71 | 72 | **Go (with bug)** 73 | ```Go 74 | var wg sync.WaitGroup 75 | wg.Add(10) 76 | for i := 0; i < 10; i++ { 77 | go func() { 78 | defer wg.Done() 79 | fmt.Println(i) 80 | }() 81 | } 82 | wg.Wait() 83 | ``` 84 | 85 | **Go (solved)** 86 | ```Go 87 | var wg sync.WaitGroup 88 | wg.Add(10) 89 | for i := 0; i < 10; i++ { 90 | go func(i int) { 91 | defer wg.Done() 92 | fmt.Println(i) 93 | }(i) 94 | } 95 | wg.Wait() 96 | ``` 97 | -------------------------------------------------------------------------------- /src/pages/internals/README.md: -------------------------------------------------------------------------------- 1 | # Internals 2 | ## (S) Heap/Stack Memory Allocation 3 | Concepts such "Heap" and "Stack" are abstracted away in both languages. You do not needed to worry about it. Even though GO has pointers, it uses [escape analysis](http://blog.rocana.com/golang-escape-analysis) in compile-time to figure out the memory allocation. 4 | ## (S) Garbage Collection 5 | Garbage collection is implemented in both languages. 6 | ## (D) Compilation 7 | Go is compiled. Javascript is not, though some Javascript runtimes use JIT compilation. From the developer experience perspective, the biggest effect of compiled languages is compile-time safety. You get compile-time safety with Go, while in Javascript you can use external code linters to ease the missing of this feature. 8 | -------------------------------------------------------------------------------- /src/pages/keywords-syntax-comparison/README.md: -------------------------------------------------------------------------------- 1 | # Keywords & Syntax Comparison 2 | 3 | ## (D) `this` keyword 4 | **JS** 5 | 6 | Inside an object method, `this` refers to the object (with some exceptions). 7 | 8 | **Go** 9 | 10 | In Go, the closest analogy would be receivers inside method functions. 11 | You *may* use `this` as a receiver: 12 | ```Go 13 | type Bar struct { 14 | foo string 15 | } 16 | 17 | func (this *Bar) Foo() string { 18 | return this.foo 19 | } 20 | ``` 21 | It is more idiomatic to use short variables as receivers. In the example above `b` would have been a better fit over `this`. 22 | 23 | ## (D) `new` keyword 24 | **JS** 25 | 26 | `new Foo()` instantiates an object from `Foo`, a constructor function or a class. 27 | 28 | **Go** 29 | 30 | `new(T)` allocates zeroed storage for a new item of type `T` and returns a pointer, `*T`. This is different than Javascript and most other languages where `new` will **initialize** the object, while in Golang it only **zeros** it. 31 | 32 | It is worthy to mention that it is [idiomatic](https://blog.golang.org/package-names) to name methods with a "New" prefix to denote it returns a pointer to the type following in the method name. e.g: 33 | ```Go 34 | timer := time.NewTimer(d) // timer is a *time.Timer 35 | ``` 36 | 37 | ## (D) bind / method values 38 | 39 | **JS** 40 | ```Javascript 41 | var f = bar.foo.bind(bar2); // when calling f(), "this" will refer to bar2 42 | ``` 43 | 44 | **Go** 45 | ```Go 46 | f := bar.foo // f(), is same as bar.foo() 47 | ``` 48 | 49 | ## (S) setTimeout / timer 50 | 51 | **JS** 52 | ```Javascript 53 | setTimeout(somefunction, 3*1000) 54 | ``` 55 | 56 | **Go** 57 | ```Go 58 | time.AfterFunc(3*time.Second, somefunction) 59 | ``` 60 | 61 | ## (D) setInterval / ticker 62 | 63 | **JS** 64 | ```Javascript 65 | setInterval(somefunction, 3*1000) 66 | ``` 67 | 68 | **Go** 69 | ```Go 70 | ticker := time.NewTicker(3 * time.Second) 71 | go func() { 72 | for t := range ticker.C { 73 | somefunction() 74 | } 75 | }() 76 | ``` 77 | 78 | ## (D) String literals 79 | **JS** 80 | 81 | Strings are initialized with single quotes (`'hello'`) or double quotes (`"hello"`), yet most coding styles prefer the single quotes variation. Raw string literals use backticks (``` `hello` ```). 82 | 83 | **Go** 84 | 85 | Strings are initialized with double quotes (`"hello"`) or raw string literals with backticks (``` `hello` ```) 86 | 87 | ## (S) Comments 88 | Both languages use the same `/* block comments */` and `// line comments`. 89 | -------------------------------------------------------------------------------- /src/pages/license/README.md: -------------------------------------------------------------------------------- 1 | # License 2 | 3 | Copyright Maor Zamski & Daniel Singer 4 | 5 | "Go for Javascript Developers" is released under the [Creative Commons Attribution-ShareAlike 4.0 International License.](http://creativecommons.org/licenses/by-sa/4.0/). 6 | 7 | The "gopher" used at the cover was [created](https://github.com/golang-samples/gopher-vector) by [Takuya Ueda](https://twitter.com/tenntenn). It is licensed under the [Creative Commons 3.0 Attributions license](https://creativecommons.org/licenses/by/3.0/deed). 8 | -------------------------------------------------------------------------------- /src/pages/modules-packages/README.md: -------------------------------------------------------------------------------- 1 | # Modules / Packages 2 | ## Spec & Practice 3 | **JS** 4 | 5 | As of es6, the Javascript spec includes a module system, however the external specs of AMD and CommonJS are also popular since the language began to address this issue rather late. 6 | 7 | Before es6 modules, the spec only supported the *script* mode, of which every file shares the same top-level global scope. This means that there was no official "file scope" for scripts. In practice, file-module scope was common since it was either introduced by code (`window.moduleA = …`), an external tool (requireJS), or by a runtime that baked-in a module system (NodeJS). 8 | 9 | Therefore, it is safe to say that Javascript programs are commonly structured with a 1-to-1 relationship between files and modules with local scope. 10 | 11 | **Go** 12 | 13 | Go's import statement and package support were part of the spec from the beginning. In Go there is no file scope, only package scope. As of Go 1.6 (or 1.5 + flag), there's better support for encapsulating dependent packages inside a project with the [vendor folder](https://blog.gopheracademy.com/advent-2015/vendor-folder/). However, it doesn't attempt to solve everything: 14 | > … this does not attempt to solve the problem of vendoring resulting in multiple copies of a package being linked into a single binary. Sometimes having multiple copies of a library is not a problem; sometimes it is. At least for now, it doesn’t seem that the go command should be in charge of policing or solving that problem. 15 | 16 | If choosing to use go modules, as introduced in Go 1.11, then it will make the vendor folder redundant by default (downloaded modules source code is stored at `$GOPATH/pkg/mod`). In exchange for the vendor folder, are `go.mod` and `go.sum` which together provide a 100% reproducible and secure builds (provided the means to fetch external modules). There's an [option](https://github.com/golang/go/wiki/Modules#how-do-i-use-vendoring-with-modules-is-vendoring-going-away) to keep using the vendor folder with modules. 17 | 18 | **The differences** 19 | 20 | A Javascript module can be any valid Javascript type. By exporting an object, it can *package* multiple functionalities. By exporting a function it can surface a single functionality. On the other hand, a Go package, is as its a name- just a package. So while a Javascript module can be directly invoked if it is a function type, this is not a possibility with a Go package. 21 | 22 | Another difference is the consumption of other internal components within your project. In Javascript, since each file is (usually) a module, then each of the files that were decoupled from the current file must be imported. On the other hand, in Go, all files within the same package can have access to each other since there is no file scope. 23 | 24 | ## Management 25 | 26 | For Javascript development, NPM is the defacto dependency manager for NodeJS, and may also be used for client-side projects. Bower is also a popular for client-side projects. 27 | 28 | Go 1.11 introduced [go mod](https://github.com/golang/go/wiki/Modules), the official dependency manager. 29 | As this was a late addition to the ecosystem, other community driven solutions are still in-use in some projects. Here is a partial list of these community solutions: 30 | - https://github.com/Masterminds/glide 31 | - https://github.com/tools/godep 32 | - https://github.com/kardianos/govendor 33 | - https://github.com/mattn/gom 34 | - https://github.com/golang/dep 35 | -------------------------------------------------------------------------------- /src/pages/types/README.md: -------------------------------------------------------------------------------- 1 | # Types 2 | ## (D) Values, Pointers, References 3 | 4 | In Javascript there are value types and reference types. Primitives such as `string` and `number` are value types. Objects, including arrays and functions, are reference types. 5 | 6 | In Go, there are value types, reference types, and pointers. References types are slices, maps, and channels. All the rest are value types, but have the ability "*to be referenced*" with pointers. 7 | The most practical difference to remember between references and pointers, is that while you can use both to mutate the underlaying value (when it is mutable), with pointers you can also reassign it. 8 | 9 | **JS** 10 | ```Javascript 11 | var a = { 12 | message: 'hello' 13 | } 14 | 15 | var b = a; 16 | 17 | // mutate 18 | b.message = 'goodbye'; 19 | console.log(a.message === b.message); // prints 'true' 20 | 21 | // reassign 22 | b = { 23 | message: 'galaxy' 24 | } 25 | console.log(a.message === b.message); // prints 'false' 26 | ``` 27 | 28 | **Go** 29 | ```Go 30 | a := struct { 31 | message string 32 | }{"hello"} 33 | 34 | b := &a 35 | 36 | // mutate 37 | // note b.message is short for (*b).message 38 | b.message = "goodbye" 39 | fmt.Println(a.message == b.message) // prints "true" 40 | 41 | // reassign 42 | *b = struct { 43 | message string 44 | }{"galaxy"} 45 | fmt.Println(a.message == b.message) // prints "true" 46 | ``` 47 | 48 | ## (D) Arrays / Slices 49 | **JS** 50 | 51 | A Javascript `Array` is a dynamically sized list that may contain multiple types of elements. 52 | ```Javascript 53 | const foo = ['Rick','Morty']; 54 | 55 | // Adds to the end of the array. 56 | foo.push('Beth'); 57 | 58 | // Removes from the end of the array. 59 | element = foo.pop() 60 | ``` 61 | 62 | Javascript also has a handful of "Typed Arrays", e.g. `Uint8Array` is a type that holds 8-bit unsigned integers. These arrays are not of the same type as `Array`. They support different methods, and commonly used when working with binary data. 63 | 64 | **Go** 65 | 66 | Go has both slice and array types. Javascript's array is actually more similar to Go's slice than to Go's array, simply because Go's slice is a dynamically sized list, while Go's array size is static. Slice and arrays are always defined over a specific element type. Assigning an array to a new variable does copy the internal data (not a deep copy).Assigning a slice to a new variable does NOT copy the internal data of array, as the slice doesn't contain the internal data in the first place. 67 | 68 | Every slice is backed by an array. The backing array may be an array that is defined in the code, or otherwise created transparently by the program. 69 | ```Go 70 | a := [3]int{1, 2, 3} 71 | 72 | // 1. Create a slice by slicing an array 73 | s1 := a[:] 74 | 75 | // 2. Create a slice with slice literal 76 | s2 := []int{1, 2, 3} 77 | 78 | // 3.1 Create a zeroed slice with make() 79 | s3_1 := make([]int, 3) 80 | 81 | // 3.2 Same as previous line, except an addition of a cap param. 82 | // The cap gives a slice a defined capacity with it's backing array. 83 | // If the following slice will grow by 2 more elements, another array allocation will NOT be performed. 84 | s3_2 := make([]int, 3, 5) 85 | 86 | // 4. Create an "empty" slice by variable decleration 87 | var s4 []int 88 | ``` 89 | 90 | Arrays are more limited. They have a known size at compile-time and it cannot change at run-time. 91 | ```Go 92 | // 1. Create an array with array literal 93 | a1 := [3]int{1, 2, 3} 94 | 95 | // 2. Create an zeroed array by variable decleration 96 | var a2 [3]int 97 | ``` 98 | 99 | Slicing creates a new slice from an existing array or slice. It uses the `[low:high]` syntax, where `low` is the inclusive lower bound, and `high` is the exclusive higher bound. Omitting `low` defaults to 0. Omitting `high` defaults to array/slice length. 100 | ```Go 101 | foo := []string{"Rick", "Morty"} 102 | 103 | // Adds to the end of the array. 104 | foo = append(foo, "Beth") 105 | fmt.Println(foo) 106 | 107 | // Removes from the end of the array. 108 | n := len(foo) - 1 // index of last element 109 | element := foo[n] // optionally also grab the last elemen 110 | foo = foo[:n] // remove the last element 111 | ``` 112 | 113 | Note: a slice that is first slice from an array references the same memory. However, the slice might later reference a different array that the program creates to accommodate a growth in the slice. This example illustrates this: 114 | ```Go 115 | fmt.Println("Hello, playground") 116 | foo := [3]string{"a","b","c"} 117 | 118 | bar := foo[:] 119 | bar[0] = "changed" 120 | fmt.Println(foo, bar) // A change in bar is reflected in foo because bar is backed by foo 121 | 122 | bar = append(bar, "d") 123 | bar[0] = "changed again" 124 | fmt.Println(foo, bar) // A change in bar is no longer reflected in foo because the `append` caused bar to backed by a different array 125 | ``` 126 | 127 | ## (D) Dictionaries 128 | **JS** 129 | 130 | Javascript has 3 types that are used for dictionaries: `Object`, `Map`, `WeakMap`. Even though `Map` and `WeakMap` are dedicated types for dictionaries, `Object` is still often chosen for dictionaries because historically `Object` was the only option before `Map` and `WeakMap` were added to the language. `Object` keys are limited to just String or Symbol types while `Map` and `WeakMap` support any type for keys. 131 | 132 | There are a few other differences between these types, for instance the keys in `Map` are ordered while keys added to `Object` are not. 133 | 134 | **Go** 135 | 136 | Go has a simple `Map` type. `Map` types are reference types, like slices. Assigning a map to a new variable does NOT copy the internal data. 137 | 138 | Initialise a map: 139 | ```Go 140 | // Initialise empty map with make. 141 | m1 := make(map[string]int) 142 | 143 | // Initialise with struct literals. 144 | m2 := map[string]int{ 145 | "foo": 42, 146 | "bar": 99, 147 | } 148 | ``` 149 | 150 | Element access: 151 | ```Go 152 | v := m["key"] // If the requested key doesn't exist, we get the value type's zero value. 153 | v, ok := m["key"] // Behaves the same as the previous line, but addtionaly the ok bool value can be used to test existence. 154 | ``` 155 | 156 | Iteration: 157 | ```Go 158 | // The iteration order is not specified and is not guaranteed to be the same from one iteration to the next. 159 | for key, value := range m { 160 | } 161 | ``` 162 | 163 | ## (D) Sets 164 | **JS** 165 | 166 | Javascript has 3 types that are used for sets: `Object`, `Set`, `WeakSet`. Similarly to the dictionaries case, `Object` is still often chosen for "set" functionality for historical reasons. `Object` keys are limited to just String or Symbol types while `Set` and `WeakSet` support any type for keys. When using `Object`, the values in the key-value pairs are redundant. 167 | 168 | **Go** 169 | 170 | Go does not have a type for set. It can be though easily accomplished with a `Map`. [Golang's blog](https://blog.golang.org/go-maps-in-action) suggests the convenient use of `bool` as a value type, i.e. `map[T]bool`. However, if memory usage of the redundant values is of concern, then `map[T]struct{}` is a good alternative, as an empty struct allocates 0 memory (note `interface{}` does allocate memory; see this StackOverflow [answer](https://stackoverflow.com/a/22770744) for more details). 171 | -------------------------------------------------------------------------------- /src/styles/website.css: -------------------------------------------------------------------------------- 1 | .logo-pazams { 2 | display: inline-block; 3 | width: 35px; 4 | height: 35px; 5 | background: url(/images/logo-pazams.png) center; 6 | margin: 7px auto 0; 7 | background-size: 80%; 8 | background-repeat: no-repeat; 9 | opacity: 0.6; 10 | } 11 | 12 | a:hover .logo-pazams { 13 | opacity: 1; 14 | } 15 | --------------------------------------------------------------------------------