├── .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 | 
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 | 
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 | 
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 |
23 | {{ articles(article.articles, file, config) }}
24 |
25 | {% endif %}
26 |
27 | {% endfor %}
28 | {% endmacro %}
29 |
30 |
31 | {% set _divider = false %}
32 | {% if config.links.sidebar %}
33 | {% for linkTitle, link in config.links.sidebar %}
34 | {% set _divider = true %}
35 | -
36 | {{ linkTitle }}
37 |
38 | {% endfor %}
39 | {% endif %}
40 |
41 | {% if _divider %}
42 |
43 | {% endif %}
44 |
45 | {% for part in summary.parts %}
46 | {% if part.title %}
47 |
48 | {% elif not loop.first %}
49 |
50 | {% endif %}
51 | {{ articles(part.articles, file, config) }}
52 | {% endfor %}
53 |
54 |
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 |
--------------------------------------------------------------------------------