├── .gitignore
├── README.md
├── mentor-notes
├── NOTES.md
├── node-code-along-walkthrough.md
├── step-1.5
│ ├── package.json
│ ├── public
│ │ ├── index.html
│ │ ├── index.js
│ │ ├── main.css
│ │ └── node-icon.ico
│ └── src
│ │ └── server.js
├── step-1.75
│ ├── package-lock.json
│ ├── package.json
│ ├── public
│ │ ├── index.html
│ │ ├── index.js
│ │ ├── main.css
│ │ └── node-icon.ico
│ └── src
│ │ ├── router.js
│ │ └── server.js
├── step-1
│ ├── package.json
│ ├── public
│ │ ├── index.html
│ │ ├── index.js
│ │ ├── main.css
│ │ └── node-icon.ico
│ └── src
│ │ └── server.js
├── step-2.5
│ ├── package-lock.json
│ ├── package.json
│ ├── public
│ │ ├── index.html
│ │ ├── index.js
│ │ ├── main.css
│ │ └── node-icon.ico
│ └── src
│ │ ├── router.js
│ │ └── server.js
├── step-2
│ ├── package-lock.json
│ ├── package.json
│ ├── public
│ │ ├── index.html
│ │ ├── index.js
│ │ ├── main.css
│ │ └── node-icon.ico
│ └── src
│ │ ├── router.js
│ │ └── server.js
├── step-3
│ ├── package-lock.json
│ ├── package.json
│ ├── public
│ │ ├── index.html
│ │ ├── index.js
│ │ ├── main.css
│ │ └── node-icon.ico
│ └── src
│ │ ├── router.js
│ │ └── server.js
├── step-4
│ ├── package-lock.json
│ ├── package.json
│ ├── public
│ │ ├── index.html
│ │ ├── index.js
│ │ ├── main.css
│ │ └── node-icon.ico
│ └── src
│ │ ├── router.js
│ │ └── server.js
└── step-5
│ ├── package-lock.json
│ ├── package.json
│ ├── public
│ ├── index.html
│ ├── index.js
│ ├── main.css
│ └── node-icon.ico
│ └── src
│ ├── handlers.js
│ ├── router.js
│ └── server.js
├── public
├── index.html
├── index.js
├── main.css
└── node-icon.ico
└── src
└── server.js
/.gitignore:
--------------------------------------------------------------------------------
1 | # Logs
2 | logs
3 | *.log
4 | npm-debug.log*
5 |
6 | # Runtime data
7 | pids
8 | *.pid
9 | *.seed
10 |
11 | # Directory for instrumented libs generated by jscoverage/JSCover
12 | lib-cov
13 |
14 | # Coverage directory used by tools like istanbul
15 | coverage
16 |
17 | # nyc test coverage
18 | .nyc_output
19 |
20 | # Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files)
21 | .grunt
22 |
23 | # node-waf configuration
24 | .lock-wscript
25 |
26 | # Compiled binary addons (http://nodejs.org/api/addons.html)
27 | build/Release
28 |
29 | # Dependency directories
30 | node_modules
31 | jspm_packages
32 |
33 | # Optional npm cache directory
34 | .npm
35 |
36 | # Optional REPL history
37 | .node_repl_history
38 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Node-Intro-Workshop
2 |
3 | **Author**: [@bradreeder](https://github.com/bradreeder)
4 |
5 | **Maintainer**: TBC
6 |
7 | ### Introduction
8 |
9 | By the end of this workshop you'll be able to answer the following questions:
10 |
11 | * How do you setup a Node server?
12 | * What is npm? How do you use it?
13 | * What is a module and what different types of modules exist?
14 | * What is a `package.json`?
15 | * What are `module.exports` and `require`?
16 |
17 | We'll be doing the following things:
18 |
19 | * Initialising a project's package.json
20 | * Creating a basic http server
21 | * Creating a router for your server
22 | * Learning how to use the `fs` core module to read and write from the file system
23 | * Learning how to communicate with your http server from the front-end
24 | * Setting up `nodemon` for your development environment
25 | * Learning about how to modularise your server code
26 |
27 | ### What is Node?
28 |
29 | Node.js:
30 |
31 | * is an open source project designed to help you write JavaScript programs that talk
32 | to networks, file systems or other I/O (input/output, reading/writing) sources.
33 | * is mainly used for web servers or file system utilities.
34 | * runs on the V8 JavaScript engine used in Chrome.
35 | * uses an asynchronous (non-blocking), single-threaded, event-driven I/O model.
36 |
37 | It doesn't have:
38 |
39 | * a DOM (hallelujah)
40 | * a window object, etc. (global variables are stored in the `global` object.)
41 |
42 | because it's not run in the browser, and doesn't have access to browser APIs!
43 |
44 | ### REPL (Read-Eval-Print Loop) to run Node in the command-line
45 |
46 | To demonstrate that Node allows you to use JavaScript on your computer you can try experimenting
47 | with Node's REPL.
48 |
49 | If you type `node` into your command-line you will see a `>` prompt. You can now type JavaScript
50 | into your command-line to experiment with JavaScript code. Press ctrl + c to exit the REPL mode.
51 |
52 | The command-line command `node path_to_program.js` also allows you to execute JavaScript programs you've
53 | written (that don't use browser features) and will print what the program returns to the console. I recommend using this to test your code to get more comfortable with your command-line.
54 |
55 | ### What is a server?
56 |
57 | What is a server? What's a front-end and back-end?
58 |
59 | What's the difference between the src and public folders in this repo? They both run in different environments!
60 |
61 | A server is a computer program that receives requests from other programs, the client, and sends back a response, e.g. to share data, information or hardware and software resources.
62 |
63 | In a typical web app a server could perform some of these functions:
64 |
65 | * Handle manipulation of data in the database
66 | * File manipulation
67 | * Authentication
68 | * Secret Logic
69 | * Client side sends requests to a server which sends back data to the front end to be displayed
70 |
71 | Client-side JavaScript runs in the visitor's browser, whereas server-side code runs on a website's web server
72 |
73 | ### How Node works
74 |
75 | Node handles I/O with: callbacks, events, streams and modules.
76 |
77 | If you learn how these four things work then you will be able to go into any module in Node core and have a basic understanding about how to interface with it. You'll learn more about these topics with your readme research and as we progress.
78 |
79 | This article presents a great summary of these topics and Node as a whole: [the art of Node](https://github.com/maxogden/art-of-Node).
80 |
81 | ### Modules
82 |
83 | Modules are just small programs you can integrate with the other programs you are writing.
84 | They package programs so that they can be exported to be used by other programs.
85 | Node's core library is made up of modules you can import into your programs as needed to make use
86 | of their functionality.
87 |
88 | There are three types of modules in Node.js:
89 |
90 | * core modules - the Node core library is made up of about two dozen modules, some lower level like events and stream some higher like http. They come installed with Node automatically.
91 |
92 | We will mainly be using the following core modules this week:
93 |
94 | * fs
95 | * http
96 | * path
97 | * querystring
98 | * url
99 |
100 | There are also other types of modules:
101 |
102 | * third-party modules - there are thousands of open-source, 3rd-party Node modules created by other people.
103 | * your own modules!
104 |
105 | ### npm
106 |
107 | You can download useful 3rd-party modules (also known as "packages") from the Node Package Manager (npm). It's a tool, installed with Node, for managing Node's ecosystem of modules in your projects. It allows us to install tools, packages as dependencies for our projects, and also publish our own packages.
108 |
109 | Anyone can create a new Node module that adds some functionality and publish it to npm. As of the time of this writing there are over 400,000 modules on npm [resource here](http://www.modulecounts.com/).
110 |
111 | npm comes with its own command-line interface you can use in your terminal while within your relevant project folder. Its main commands are:
112 |
113 | * `npm init`: Initialise a package and create a `package.json` with the definition of that package.
114 | * `npm search MODULE_NAME`: Search a module in the npm registry.
115 | * `npm install MODULE_NAME`: Install MODULE\_NAME locally.
116 | * `npm install -g MODULE_NAME`: install MODULE\_NAME globally.
117 | * `npm install --save MODULE_NAME`: install MODULE\_NAME locally and add it as a dependency in the package.json.
118 | * `npm install --save-dev MODULE_NAME`: install MODULE\_NAME locally and add it as a development dependency in the package.json. i.e. a dependency that is only needed for development and not the live version of the project.
119 |
120 | ### package.json
121 |
122 | You can initialise Node within your project by calling `npm init` in the terminal. You will get
123 | a series of prompts, feel free to press enter through them or answer them.
124 |
125 | The `package.json` created by `npm init` contains meta-information about your project, including any third-party modules you install (with the use of `npm install`), and will install a Node virtual environment within your project under a folder called `Node_modules`. This is where all the Node modules are located in your project.
126 |
127 | ### Installing modules
128 |
129 | If you use `npm install MODULE_NAME --save` now it will install the named module into your project. You will now be able to find it in the `node_modules` folder and it will be listed under the dependencies in your `package.json`.
130 |
131 | Be sure to add `node_modules` to your list of files to ignore on .gitignore or it will be pushed up
132 | when you commit to github. When you deploy your project on a server, it will use the `package.json` in order to install its own node virtual environment and `node_modules` folder, so no need to worry!
133 |
134 | note: use global module installations sparingly and only for development purposes. Unless you install them locally to the project, they won't appear in your `package.json` and so won't be installed on the server when you deploy the project.
135 |
136 | ### http server
137 |
138 | We now have everything we need to start writing Node code in this repo and create our first http server!
139 |
140 | The next part of this tutorial will be done as a code along.
141 |
--------------------------------------------------------------------------------
/mentor-notes/NOTES.md:
--------------------------------------------------------------------------------
1 | N.B. this notes file was created by @bradreeder in Nov 2016. At the time of adding this comment (Nov 2018), the workshop is delivered as an intro to node (see the README) and then a code-along. The code-along walkthrough notes for the mentor are in `node-code-along-walkthrough.md` in this folder, and each `step-*` folder holds the correct code for the end of the corresponding step of the code-along.
2 |
3 | ### introduction
4 |
5 | This workshop was prepared to run the first day of node week in the Founders & Coders
6 | javascript bootcamp.
7 |
8 | I wanted to write up some post-delivery notes to review when preparing to teach again.
9 |
10 | The general format for the day was as follows:
11 |
12 | ##### morning (10:30 - 01:00)
13 |
14 | * First introduce the students to the gitbook for the week so they're familiar with the learning
15 | outcomes, resources they might use, and the general structure for the week.
16 | * Have a discussion with the group around node's background, what it is, what it's used for, what servers are, how server-side javascript differs to what they've done previously. Roughly up to the npm
17 | section in this README.md covers this.
18 | * Do a code-along with the group going through npm and setting up a http server that serves up
19 | html, css, js, and returns a 404 if a requested resource does not exist.
20 |
21 | ##### afternoon (14:00 - 18:00)
22 |
23 | * Give them the node girls tutorial to do in pairs which takes them through the exact same stages
24 | as the morning, but builds up to doing a basic CMS with node.
25 | * Finish by giving a demonstration of the module pattern and module.exports. Refactor the server
26 | we made in the morning to show how to structure your src folder into smaller modules.
27 | * Finally recap over the learning outcomes with the group to show we've made progress.
28 |
29 | ### notes: morning
30 |
31 | I think when introducing a big new topic like node you need first of all context as to what it is,
32 | and then an interactive demonstration to see what it looks like.
33 |
34 | Code alongs have benefits, but should be used as context and set-up for real learning. The main learning
35 | does not happen in the code along, but when the student has a chance to implement what they're
36 | learning on their own (i.e. in the afternoon workshop).
37 |
38 | What it does ideally:
39 |
40 | * Gives an opportunity for installation issues to get teased out, so they won't distract
41 | people in the afternoon.
42 | * Gives everyone an opportunity to ask questions as the code is being written.
43 | * Gives you a chance to do some debugging with everyone as problems arise, so they see
44 | how they might solve later problems.
45 | * Gives everyone in the room a working server on their computer that they can refer to
46 | when they start working on their own.
47 | * It also shows you're involved in their learning.
48 |
49 | The only thing I regret is not introducing them to basic es6 syntax like const, let, arrows, template literals, as I did the code along, as es6 comes with node and there's no reason not to use it.
50 |
51 | ### notes: afternoon
52 |
53 | I think the node girls workshop is perfect as it allows them to cover the same material
54 | from the morning in their own time, but with an opportunity to build on that depending on their progress.
55 | If they finish the CMS then that's a significant achievement to make on your first day of server-side programming, which instils confidence going into new territory.
56 |
57 | There were a few issues raised with it in its repo that should be addressed if it's used again so it can be perfected, as I think these issues distract away from the workshop's purpose.
58 |
59 | If I did anything at the end of the day I wanted to spend time refactoring what we did in the morning. Doing this depends on how confident you feel the group is. Refactoring the server to use the module pattern and module.exports is an okay choice as it teaches them how to structure their src folders, and teaches them more about modules and the overall structure of the server, key topics for day 1 with node.
60 |
61 | ### other notes:
62 |
63 | * Every time a new term is introduced don't assume people know what it means.
64 | * Make sure you have someone on hand who's experienced in resolving installation issues, as they're a pain, and can shut down the experience for a student.
65 | * Don't read from notes when talking, it's not engaging. This is hard to do well as it requires preparation.
66 | * Try to ask questions to keep people engaged, draw out existing knowledge in the group, and so you know where they're at, what needs to be clarified, etc.
67 | * Try to come back to the learning outcomes at some point in the day. It's an opportunity to recap what they've done and show they're making progress.
68 |
--------------------------------------------------------------------------------
/mentor-notes/node-code-along-walkthrough.md:
--------------------------------------------------------------------------------
1 | # Node intro workshop notes
2 | ## Step 1
3 | 1. `npm init` (anything you input can be edited so don't worry)
4 | * package name: usually name of the repo, can be anything you want
5 | * version: leave as is
6 | * description: some stuff about your app
7 | * entry point: leave as is
8 | * text command: don't worry for now
9 | * git repo, author and license: don't worry for now
10 | * (you can just mash enter through these if you want)
11 | 2. first open `src`
12 | * `src` (aka source) is where we put everything that doesn't get sent to the user
13 | * (so this is where our server lives)
14 | * the public folder is the stuff that does get sent to the user
15 | 3. open `server.js` and `require` in the `http` module
16 | * explain what `const` is
17 | * ```const http = require('http');```
18 | * using this syntax and 'requiring' in a module makes that module available in the file you are writing.
19 | * (you have to _tell_ node which core modules you're going to use so you don't load in unecessary ones)
20 | 4. now we need to specify a host and a port, on a local server the host is allocated automatically (to `localhost`). we also need to set up a port to make sure our server only "listens" to things coming through that port.
21 | 5. create the server
22 | * ```const server = http.createServer(router)```
23 | * the `http.createServer` method takes a single argument of a function. That function takes two arguments. ```request``` and ```response```.
24 | * `request` is an object with information about the request that has been sent to you
25 | * `response` is an object with methods on it which allow you to send things back to the user.
26 | 6. define the `router` function
27 | * define an arrow function named router above where you have created the server
28 | * explain that functions declared with `const` are not hoisted and so need to be defined before they are used
29 |
30 | const router = (request, response) => {
31 | response.end('hello world')
32 | }
33 | * explain that the end method on the response object is a way to close the connection that has been opened between you and the user, sending the user the string that you have passed to the end method.
34 |
35 | 7. start the server
36 | * ```server.listen(port)```
37 | * write the log to let the user know the server is now running
38 | * ```console.log(`server up and running on localhost:${port}`)```
39 | 8. run the server by running ```node src/server.js```
40 | * navigate to `localhost:4000` in your browser
41 | * show that the plaintext we typed in is now coming up in our browser
42 | * show that no matter what path you give to `localhost:4000` (eg. `localhost:4000/yolo`) you still get the same response
43 | * this is because currently in our router function we don't look at the request, we just send the same response no matter what
44 | 9. Now is a good time to make sure everyone is at the same point and everything is working
45 |
46 | ## Step 1.5
47 | 1. Add ```const url = request.url``` to top of router function
48 | * this will be a string with whatever is in the url bar in the browser (apart from ```localhost:4000```)
49 | * so we check what it is, for the home route it will be '/'
50 | * so add
51 |
52 | if (url === '/') {
53 | response.end('hello world');
54 | } else if (url === '/yolo') {
55 | response.end('this is yolo');
56 | }
57 |
58 | 2. restart the server, navigate to both pages and show that different things are being shown in the browser.
59 | 3. Then show if you try to navigate to a path that we haven't defined that the page just keeps loading
60 | * This is because the client has opened a connection to the server and is waiting for a response, since our router function does not send anything back, or end the connection, the client is just left 'hanging', until the browser gets bored of waiting and closes the connection
61 | 4. Introduce adding an 'else' to the conditional chain, so that if we do not have an option we always response with something.
62 | ```
63 | else {
64 | response.writeHead(404);
65 | response.end('404 not found');
66 | }
67 | ```
68 | * introduce writehead and that the first argument is the code for the http request (students should be familiar with these from API week)
69 | * add writeHead to the prev 2 branches
70 |
71 | ## Step 1.75
72 | 5. now this function is getting a bit big, so it's a good time to make our code a bit more modular
73 | * create a file in src called router.js, copy and paste the router function to this new file and delete it from server.js
74 | * put ```module.exports = router``` at the bottom of the file
75 | * this is the way you tell node that you want to use a use this function in another file
76 | * go back to server.js and require in the router file
77 | * ```const router = require('./router');```
78 | * explain that if you are requiring in a node module (either one from core or one you downloaded from `npm`) you just write the name, if you are requiring in a local file (that you've used module.exports in) then put './' before the file path (relative to file you are requiring it into).
79 | 6. restart your server again and make sure everything stil works
80 | 7. it's getting a bit annoying having to restart the server any time we make a change
81 | * get everyone to install nodemon as a dev dependancy and write an npm script for starting the server file with nodemon
82 | * run the server with nodemon
83 |
84 | ## Step 2
85 | 1. we've sent some plain text, now lets send some actual files!
86 | 2. use `fs.readFileSync()` first to not use callbacks
87 | 3. introduce the path module and use ```path.join(__dirname, '..', 'public', 'index.html')``` as the argument to `readFileSync`
88 | 4. assign the result of readFileSync to a variable
89 | 5. add ```response.writeHead(200, { 'Content-Type': 'text/html' })``` above the response.end()
90 | 6. pass the variable with the contents of readFile to response.end()
91 | 7. go look in the browser and see that there is actual html there now
92 |
93 | ## Step 2.5
94 | 1. update this to use `readFile` rather than `readFileSync` (lpop to ask someone why we might want to do that)
95 | ```
96 | const filePath = path.join(__dirname, '..', 'public', 'index.html');
97 | fs.readFile(filePath, (error, file) => {
98 | if (error) {
99 | console.log(error);
100 | } else {
101 | response.writeHead(200, { 'Content-Type': 'text/html' });
102 | response.end(file);
103 | }
104 | ```
105 | 2. update the 404 route to send with ```{ 'Content-Type': 'text/html' }``` and a h1 tag with '404: not found'
106 | * use this as a way to introduce good error handling, letting the user know what has happened by sending something through even if there's a problem
107 | * update ```error``` if branch to send a response back to user, with 500 for internal server error
108 | ```
109 | if (error) {
110 | console.log(error);
111 | response.writeHead(500, { 'Content-Type': 'text/html' });
112 | response.end("
Sorry, we've had a problem on our end ");
113 | } else {
114 | response.writeHead(200, { 'Content-Type': 'text/html' });
115 | response.end(file);
116 | }
117 | ```
118 | * explain that this error will only happen if there is a problem whilst reading the file.
119 | 3. remove 'yolo' route.
120 |
121 | ## Step 3
122 |
123 | 1. now we want to serve our CSS
124 | * we can do this in much the same way as we serve our html
125 | * add another else if branch
126 | * check if the url is ```/public/main.css```
127 | * branch will look like this:
128 |
129 | ```
130 |
131 | else if (url === '/public/main.css') {
132 | const filePath = path.join(__dirname, '..', url);
133 | fs.readFile(filePath, (error, file) => {
134 | if (error) {
135 | console.log(error);
136 | response.writeHead(500, { 'Content-Type': 'text/html' });
137 | response.end("Sorry, we've had a problem on our end ");
138 | } else {
139 | response.writeHead(200, { 'Content-Type': 'text/css' });
140 | response.end(file);
141 | }
142 | });
143 | }
144 |
145 | ```
146 | 2. we also need to serve our JS
147 | * again, much the same way:
148 | ```
149 | else if (url === '/public/index.js') {
150 | const filePath = path.join(__dirname, '..', url);
151 | fs.readFile(filePath, (error, file) => {
152 | if (error) {
153 | console.log(error);
154 | response.writeHead(500, { 'Content-Type': 'text/html' });
155 | response.end("Sorry, we've had a problem on our end ");
156 | } else {
157 | response.writeHead(200, { 'Content-Type': 'application/javascript' });
158 | response.end(file);
159 | }
160 | });
161 | }
162 | ```
163 | 3. finally, we can serve the favicon
164 | ```
165 | else if (url === '/public/node-icon.ico') {
166 | const filePath = path.join(__dirname, '..', url);
167 | fs.readFile(filePath, (error, file) => {
168 | if (error) {
169 | console.log(error);
170 | response.writeHead(500, { 'Content-Type': 'text/html' });
171 | response.end("Sorry, we've had a problem on our end ");
172 | } else {
173 | response.writeHead(200, { 'Content-Type': 'image/x-icon' });
174 | response.end(file);
175 | }
176 | });
177 | }
178 | ```
179 | ## Step 4
180 | 1. we now are serving all of the files needed for our site! awesome!
181 | 2. but our code is quite repetitive, and we want to make it DRY!
182 | 3. remove all of the else if branches (for serving css, js and ico)
183 | 4. add an else if branch where the conditional is ```if (url.indexOf('/public/') !== -1)```
184 | * This checks if the url has public in it, so this route can potentially serve anything from our public directory.
185 | 4. we then check what the file extension is by splitting the url on the ```.``` and taking the second half
186 | * ```const extension = url.split('.')[1]```
187 | 5. then we can create a little library of filetypes for when we send the file to the client
188 | ```
189 | const extensionType = {
190 | html: 'text/html',
191 | css: 'text/css',
192 | js: 'application/javascript',
193 | ico: 'image/x-icon',
194 | };
195 | ```
196 | 6. Then we can construct the `filepath` the same as before
197 |
198 | * ``` const filePath = path.join(__dirname, '..', url);```
199 |
200 | // Replaced err with error in line 205
201 | 7. We then read the file and send it off to the client
202 |
203 | fs.readFile(filePath, (error, file) => {
204 | if (error) {
205 | console.log(error);
206 | response.writeHead(404, { 'Content-Type': 'text/html' });
207 | response.end('404 file not found ');
208 | } else {
209 | response.writeHead(200, { 'Content-Type': extensionType[extension] });
210 | response.end(file);
211 | }
212 | });
213 | * We respond with a 404 if there is an error because the error will generally because the client has requested something with ```/public/``` in the url, but that we don't actually have in the public folder.
214 | * And we use a template literal to send off the ```Content-Type```
215 | * Now would be a good time to lpop to ask anyone if they know why we have to use square bracket notation to access the object's values (rather than dot notation)
216 |
217 | ## Step 5
218 | * We can finish off by just modularising out the handlers a little bit
219 | * It's good when the router just contains the logic of which route goes where, and what _happens_ in those routes is contained in a handlers file
220 | * in SRC create a ```handlers.js``` file
221 | * in `handlers.js` create a function called `handleHomeRoute` which takes two arguments, `request` and `response`
222 | * Now copy everything inside of the first if statement branch in `router.js` in the function you just made in `handlers.js`
223 | * you should now have something which looks like this:
224 | ```js
225 | const handleHomeRoute = (request, response) => {
226 | const filePath = path.join(__dirname, '..', 'public', 'index.html');
227 | fs.readFile(filePath, (error, file) => {
228 | if (error) {
229 | console.log(error);
230 | response.writeHead(500, { 'Content-Type': 'text/html' });
231 | response.end("Sorry, we've had a problem on our end ");
232 | } else {
233 | response.writeHead(200, { 'Content-Type': 'text/html' });
234 | response.end(file);
235 | }
236 | });
237 | };
238 | ```
239 | * now we want to do the same with the second `else if` branch
240 | * go into `handlers.js` and create a function called `handlePublic` it should take 3 arguments - `request`, `response` and `url`
241 | * now copy the body of the `else if` statement in `router.js` (the one with `url.indexOf('public') !== -1` as the condition) and paste it into the body of your `handlePublic` function in `handlers.js`
242 | * you should now have something that looks like this:
243 | ```js
244 | const handlePublic = (request, response, url) => {
245 | const extension = url.split('.')[1];
246 | const extensionType = {
247 | html: 'text/html',
248 | css: 'text/css',
249 | js: 'application/javascript',
250 | ico: 'image/x-icon',
251 | };
252 |
253 | // Replaced err with error in line 256
254 | const filePath = path.join(__dirname, '..', url);
255 | fs.readFile(filePath, (error, file) => {
256 | if (error) {
257 | console.log(error);
258 | response.writeHead(404, { 'Content-Type': 'text/html' });
259 | response.end('404 file not found ');
260 | } else {
261 | response.writeHead(200, { 'Content-Type': extensionType[extension] });
262 | response.end(file);
263 | }
264 | });
265 | console.log(url);
266 | };
267 | ```
268 | * now, in our `handlers.js` file we are using path and fs so we need to require those in at the top
269 | * we're going to need to export these functions so that we can use them in `router.js` so add this to the bottom of the file:
270 | ```js
271 | module.exports = {
272 | handleHomeRoute,
273 | handlePublic,
274 | };
275 | ```
276 | Explain that in ES6 if you want the value of a key in an object to be the same as the key you can just put the name of the key with a comma (as opposed to `handleHomeRoute: handleHomeRoute` etc).
277 |
278 | * now in `router.js` we can remove the require statements bringing in `fs` and `path` as we no longer use them in this file
279 | * when using modules you have to require them into only into files that actually use things from that module
280 | * but we will need our handlers file so let's bring that in.
281 | * `const handlers = require('./handlers.js')`
282 | * now we can replace the content of the if branches with the functions we just made
283 | * so our `router.js` file ends up looking like this:
284 | ```js
285 | const handlers = require('./handlers.js');
286 |
287 | const router = (request, response) => {
288 | const url = request.url;
289 | if (url === '/') {
290 | handlers.handleHomeRoute(request, response);
291 | } else if (url.indexOf('public') !== -1) {
292 | handlers.handlePublic(request, response, url);
293 | } else {
294 | response.writeHead(404, { 'Content-Type': 'text/html' });
295 | response.end('404 file not found ');
296 | }
297 | };
298 |
299 | module.exports = router;
300 | ```
301 | * we don't modularise the 404 functionality as it is only two lines, to add it to our handlers file we would be adding more lines of code, without making anything clearer. The 404-ness of a route also kind of falls into the concerns of the router that we defined as well, declaring that a file is not found/does not exist can be seen to be part of the router's job.
302 |
--------------------------------------------------------------------------------
/mentor-notes/step-1.5/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "step-1",
3 | "version": "1.0.0",
4 | "description": "",
5 | "main": "index.js",
6 | "scripts": {
7 | "test": "echo \"Error: no test specified\" && exit 1"
8 | },
9 | "author": "",
10 | "license": "ISC"
11 | }
12 |
--------------------------------------------------------------------------------
/mentor-notes/step-1.5/public/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Node Week Day 1 Morning Workshop
6 |
7 |
8 |
9 |
10 | Hello world!
11 |
12 | Red
13 | Blue
14 | Yellow
15 |
16 |
17 |
18 |
19 |
--------------------------------------------------------------------------------
/mentor-notes/step-1.5/public/index.js:
--------------------------------------------------------------------------------
1 | (function() {
2 | var redBtn = document.getElementById('red-button');
3 | var blueBtn = document.getElementById('blue-button');
4 | var yellowBtn = document.getElementById('yellow-button');
5 | var body = document.querySelector('body');
6 |
7 | function httpGetRequest(colour) {
8 | var xhr = new XMLHttpRequest();
9 | xhr.onreadystatechange = function() {
10 | if (xhr.readyState == 4 && xhr.status == 200) {
11 | body.style.backgroundColor = colour;
12 | }
13 | };
14 | xhr.open('GET', '/', true);
15 | xhr.send();
16 | }
17 |
18 | redBtn.addEventListener('click', function() {
19 | httpGetRequest('red');
20 | });
21 | blueBtn.addEventListener('click', function() {
22 | httpGetRequest('blue');
23 | });
24 | yellowBtn.addEventListener('click', function() {
25 | httpGetRequest('yellow');
26 | });
27 | })();
28 |
--------------------------------------------------------------------------------
/mentor-notes/step-1.5/public/main.css:
--------------------------------------------------------------------------------
1 | body {
2 | background-color: #aaa;
3 | }
4 |
5 | button {
6 | border: 2px solid #000;
7 | width: 80px;
8 | height: 30px;
9 | border-radius: 3px;
10 | }
11 |
12 | #red-button {
13 | background-color: red;
14 | color: #fff;
15 | }
16 |
17 | #blue-button {
18 | background-color: blue;
19 | color: #fff;
20 | }
21 |
22 | #yellow-button {
23 | background-color: yellow;
24 | }
25 |
--------------------------------------------------------------------------------
/mentor-notes/step-1.5/public/node-icon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/foundersandcoders/Node-Intro-Workshop/c71302f3af4e38da9299d5d3fc89e629436d8e4f/mentor-notes/step-1.5/public/node-icon.ico
--------------------------------------------------------------------------------
/mentor-notes/step-1.5/src/server.js:
--------------------------------------------------------------------------------
1 | const http = require('http');
2 |
3 | const port = 4000;
4 |
5 | const router = (request, response) => {
6 | const url = request.url;
7 | if (url === '/') {
8 | response.end('hello world');
9 | } else if (url === '/yolo') {
10 | response.end('this is yolo');
11 | } else {
12 | response.writeHead(404);
13 | response.end('404 not found');
14 | }
15 | };
16 |
17 | const server = http.createServer(router);
18 |
19 | server.listen(port);
20 |
21 | console.log(`server up and running on localhost:${port}`);
22 |
--------------------------------------------------------------------------------
/mentor-notes/step-1.75/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "step-1",
3 | "version": "1.0.0",
4 | "description": "",
5 | "main": "index.js",
6 | "scripts": {
7 | "test": "echo \"Error: no test specified\" && exit 1",
8 | "devStart": "nodemon src/server.js"
9 | },
10 | "author": "",
11 | "license": "ISC",
12 | "devDependencies": {
13 | "nodemon": "^1.11.0"
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/mentor-notes/step-1.75/public/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Node Week Day 1 Morning Workshop
6 |
7 |
8 |
9 |
10 | Hello world!
11 |
12 | Red
13 | Blue
14 | Yellow
15 |
16 |
17 |
18 |
19 |
--------------------------------------------------------------------------------
/mentor-notes/step-1.75/public/index.js:
--------------------------------------------------------------------------------
1 | (function() {
2 | var redBtn = document.getElementById('red-button');
3 | var blueBtn = document.getElementById('blue-button');
4 | var yellowBtn = document.getElementById('yellow-button');
5 | var body = document.querySelector('body');
6 |
7 | function httpGetRequest(colour) {
8 | var xhr = new XMLHttpRequest();
9 | xhr.onreadystatechange = function() {
10 | if (xhr.readyState == 4 && xhr.status == 200) {
11 | body.style.backgroundColor = colour;
12 | }
13 | };
14 | xhr.open('GET', '/', true);
15 | xhr.send();
16 | }
17 |
18 | redBtn.addEventListener('click', function() {
19 | httpGetRequest('red');
20 | });
21 | blueBtn.addEventListener('click', function() {
22 | httpGetRequest('blue');
23 | });
24 | yellowBtn.addEventListener('click', function() {
25 | httpGetRequest('yellow');
26 | });
27 | })();
28 |
--------------------------------------------------------------------------------
/mentor-notes/step-1.75/public/main.css:
--------------------------------------------------------------------------------
1 | body {
2 | background-color: #aaa;
3 | }
4 |
5 | button {
6 | border: 2px solid #000;
7 | width: 80px;
8 | height: 30px;
9 | border-radius: 3px;
10 | }
11 |
12 | #red-button {
13 | background-color: red;
14 | color: #fff;
15 | }
16 |
17 | #blue-button {
18 | background-color: blue;
19 | color: #fff;
20 | }
21 |
22 | #yellow-button {
23 | background-color: yellow;
24 | }
25 |
--------------------------------------------------------------------------------
/mentor-notes/step-1.75/public/node-icon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/foundersandcoders/Node-Intro-Workshop/c71302f3af4e38da9299d5d3fc89e629436d8e4f/mentor-notes/step-1.75/public/node-icon.ico
--------------------------------------------------------------------------------
/mentor-notes/step-1.75/src/router.js:
--------------------------------------------------------------------------------
1 | const router = (request, response) => {
2 | const url = request.url;
3 | if (url === '/') {
4 | response.end('hello world');
5 | } else if (url === '/yolo') {
6 | response.end('this is yolo');
7 | } else {
8 | response.writeHead(404);
9 | response.end('404 not found');
10 | }
11 | };
12 |
13 | module.exports = router;
14 |
--------------------------------------------------------------------------------
/mentor-notes/step-1.75/src/server.js:
--------------------------------------------------------------------------------
1 | const http = require('http');
2 | const router = require('./router');
3 | const port = 4000;
4 |
5 | const server = http.createServer(router);
6 |
7 | server.listen(port);
8 |
9 | console.log(`server up and running on localhost:${port}`);
10 |
--------------------------------------------------------------------------------
/mentor-notes/step-1/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "step-1",
3 | "version": "1.0.0",
4 | "description": "",
5 | "main": "index.js",
6 | "scripts": {
7 | "test": "echo \"Error: no test specified\" && exit 1"
8 | },
9 | "author": "",
10 | "license": "ISC"
11 | }
12 |
--------------------------------------------------------------------------------
/mentor-notes/step-1/public/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Node Week Day 1 Morning Workshop
6 |
7 |
8 |
9 |
10 | Hello world!
11 |
12 | Red
13 | Blue
14 | Yellow
15 |
16 |
17 |
18 |
19 |
--------------------------------------------------------------------------------
/mentor-notes/step-1/public/index.js:
--------------------------------------------------------------------------------
1 | (function() {
2 | var redBtn = document.getElementById('red-button');
3 | var blueBtn = document.getElementById('blue-button');
4 | var yellowBtn = document.getElementById('yellow-button');
5 | var body = document.querySelector('body');
6 |
7 | function httpGetRequest(colour) {
8 | var xhr = new XMLHttpRequest();
9 | xhr.onreadystatechange = function() {
10 | if (xhr.readyState == 4 && xhr.status == 200) {
11 | body.style.backgroundColor = colour;
12 | }
13 | };
14 | xhr.open('GET', '/', true);
15 | xhr.send();
16 | }
17 |
18 | redBtn.addEventListener('click', function() {
19 | httpGetRequest('red');
20 | });
21 | blueBtn.addEventListener('click', function() {
22 | httpGetRequest('blue');
23 | });
24 | yellowBtn.addEventListener('click', function() {
25 | httpGetRequest('yellow');
26 | });
27 | })();
28 |
--------------------------------------------------------------------------------
/mentor-notes/step-1/public/main.css:
--------------------------------------------------------------------------------
1 | body {
2 | background-color: #aaa;
3 | }
4 |
5 | button {
6 | border: 2px solid #000;
7 | width: 80px;
8 | height: 30px;
9 | border-radius: 3px;
10 | }
11 |
12 | #red-button {
13 | background-color: red;
14 | color: #fff;
15 | }
16 |
17 | #blue-button {
18 | background-color: blue;
19 | color: #fff;
20 | }
21 |
22 | #yellow-button {
23 | background-color: yellow;
24 | }
25 |
--------------------------------------------------------------------------------
/mentor-notes/step-1/public/node-icon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/foundersandcoders/Node-Intro-Workshop/c71302f3af4e38da9299d5d3fc89e629436d8e4f/mentor-notes/step-1/public/node-icon.ico
--------------------------------------------------------------------------------
/mentor-notes/step-1/src/server.js:
--------------------------------------------------------------------------------
1 | const http = require('http');
2 |
3 | const port = 4000;
4 |
5 | const router = (request, response) => {
6 | response.end('hello world');
7 | };
8 |
9 | const server = http.createServer(router);
10 |
11 | server.listen(port);
12 |
13 | console.log(`server up and running on localhost:${port}`);
14 |
--------------------------------------------------------------------------------
/mentor-notes/step-2.5/package-lock.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "step-1",
3 | "version": "1.0.0",
4 | "lockfileVersion": 1,
5 | "dependencies": {
6 | "abbrev": {
7 | "version": "1.1.0",
8 | "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.0.tgz",
9 | "integrity": "sha1-0FVMIlZjbi9W58LlrRg/hZQo2B8=",
10 | "dev": true
11 | },
12 | "ansi-regex": {
13 | "version": "2.1.1",
14 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
15 | "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
16 | "dev": true
17 | },
18 | "ansi-styles": {
19 | "version": "2.2.1",
20 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
21 | "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
22 | "dev": true
23 | },
24 | "anymatch": {
25 | "version": "1.3.0",
26 | "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.0.tgz",
27 | "integrity": "sha1-o+Uvo5FoyCX/V7AkgSbOWo/5VQc=",
28 | "dev": true
29 | },
30 | "arr-diff": {
31 | "version": "2.0.0",
32 | "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz",
33 | "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=",
34 | "dev": true
35 | },
36 | "arr-flatten": {
37 | "version": "1.0.3",
38 | "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.0.3.tgz",
39 | "integrity": "sha1-onTthawIhJtr14R8RYB0XcUa37E=",
40 | "dev": true
41 | },
42 | "array-unique": {
43 | "version": "0.2.1",
44 | "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz",
45 | "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=",
46 | "dev": true
47 | },
48 | "arrify": {
49 | "version": "1.0.1",
50 | "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz",
51 | "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=",
52 | "dev": true
53 | },
54 | "async-each": {
55 | "version": "1.0.1",
56 | "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz",
57 | "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0=",
58 | "dev": true
59 | },
60 | "balanced-match": {
61 | "version": "0.4.2",
62 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz",
63 | "integrity": "sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg=",
64 | "dev": true
65 | },
66 | "binary-extensions": {
67 | "version": "1.8.0",
68 | "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.8.0.tgz",
69 | "integrity": "sha1-SOyNFt9Dd+rl+liEaCSAr02Vx3Q=",
70 | "dev": true
71 | },
72 | "brace-expansion": {
73 | "version": "1.1.7",
74 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.7.tgz",
75 | "integrity": "sha1-Pv/DxQ4ABTH7cg6v+A8K6O8jz1k=",
76 | "dev": true
77 | },
78 | "braces": {
79 | "version": "1.8.5",
80 | "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz",
81 | "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=",
82 | "dev": true
83 | },
84 | "chalk": {
85 | "version": "1.1.3",
86 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
87 | "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
88 | "dev": true
89 | },
90 | "chokidar": {
91 | "version": "1.7.0",
92 | "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-1.7.0.tgz",
93 | "integrity": "sha1-eY5ol3gVHIB2tLNg5e3SjNortGg=",
94 | "dev": true
95 | },
96 | "concat-map": {
97 | "version": "0.0.1",
98 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
99 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
100 | "dev": true
101 | },
102 | "configstore": {
103 | "version": "1.4.0",
104 | "resolved": "https://registry.npmjs.org/configstore/-/configstore-1.4.0.tgz",
105 | "integrity": "sha1-w1eB0FAdJowlxUuLF/YkDopPsCE=",
106 | "dev": true
107 | },
108 | "core-util-is": {
109 | "version": "1.0.2",
110 | "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
111 | "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
112 | "dev": true
113 | },
114 | "debug": {
115 | "version": "2.6.8",
116 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz",
117 | "integrity": "sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw=",
118 | "dev": true
119 | },
120 | "deep-extend": {
121 | "version": "0.4.2",
122 | "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.4.2.tgz",
123 | "integrity": "sha1-SLaZwn4zS/ifEIkr5DL25MfTSn8=",
124 | "dev": true
125 | },
126 | "duplexer": {
127 | "version": "0.1.1",
128 | "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz",
129 | "integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=",
130 | "dev": true
131 | },
132 | "duplexify": {
133 | "version": "3.5.0",
134 | "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.5.0.tgz",
135 | "integrity": "sha1-GqdzAC4VeEV+nZ1KULDMquvL1gQ=",
136 | "dev": true
137 | },
138 | "end-of-stream": {
139 | "version": "1.0.0",
140 | "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.0.0.tgz",
141 | "integrity": "sha1-1FlucCc0qT5A6a+GQxnqvZn/Lw4=",
142 | "dev": true
143 | },
144 | "es6-promise": {
145 | "version": "3.3.1",
146 | "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-3.3.1.tgz",
147 | "integrity": "sha1-oIzd6EzNvzTQJ6FFG8kdS80ophM=",
148 | "dev": true
149 | },
150 | "escape-string-regexp": {
151 | "version": "1.0.5",
152 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
153 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
154 | "dev": true
155 | },
156 | "event-stream": {
157 | "version": "3.3.4",
158 | "resolved": "https://registry.npmjs.org/event-stream/-/event-stream-3.3.4.tgz",
159 | "integrity": "sha1-SrTJoPWlTbkzi0w02Gv86PSzVXE=",
160 | "dev": true
161 | },
162 | "expand-brackets": {
163 | "version": "0.1.5",
164 | "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz",
165 | "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=",
166 | "dev": true
167 | },
168 | "expand-range": {
169 | "version": "1.8.2",
170 | "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz",
171 | "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=",
172 | "dev": true
173 | },
174 | "extglob": {
175 | "version": "0.3.2",
176 | "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz",
177 | "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=",
178 | "dev": true
179 | },
180 | "filename-regex": {
181 | "version": "2.0.1",
182 | "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz",
183 | "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=",
184 | "dev": true
185 | },
186 | "fill-range": {
187 | "version": "2.2.3",
188 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.3.tgz",
189 | "integrity": "sha1-ULd9/X5Gm8dJJHCWNpn+eoSFpyM=",
190 | "dev": true
191 | },
192 | "for-in": {
193 | "version": "1.0.2",
194 | "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
195 | "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=",
196 | "dev": true
197 | },
198 | "for-own": {
199 | "version": "0.1.5",
200 | "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz",
201 | "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=",
202 | "dev": true
203 | },
204 | "from": {
205 | "version": "0.1.7",
206 | "resolved": "https://registry.npmjs.org/from/-/from-0.1.7.tgz",
207 | "integrity": "sha1-g8YK/Fi5xWmXAH7Rp2izqzA6RP4=",
208 | "dev": true
209 | },
210 | "fsevents": {
211 | "version": "1.1.1",
212 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.1.1.tgz",
213 | "integrity": "sha1-8Z/Sj0Pur3YWgOUZogPE0LPTGv8=",
214 | "dev": true,
215 | "optional": true,
216 | "dependencies": {
217 | "abbrev": {
218 | "version": "1.1.0",
219 | "bundled": true,
220 | "dev": true,
221 | "optional": true
222 | },
223 | "ansi-regex": {
224 | "version": "2.1.1",
225 | "bundled": true,
226 | "dev": true
227 | },
228 | "ansi-styles": {
229 | "version": "2.2.1",
230 | "bundled": true,
231 | "dev": true,
232 | "optional": true
233 | },
234 | "aproba": {
235 | "version": "1.1.1",
236 | "bundled": true,
237 | "dev": true,
238 | "optional": true
239 | },
240 | "are-we-there-yet": {
241 | "version": "1.1.2",
242 | "bundled": true,
243 | "dev": true,
244 | "optional": true
245 | },
246 | "asn1": {
247 | "version": "0.2.3",
248 | "bundled": true,
249 | "dev": true,
250 | "optional": true
251 | },
252 | "assert-plus": {
253 | "version": "0.2.0",
254 | "bundled": true,
255 | "dev": true,
256 | "optional": true
257 | },
258 | "asynckit": {
259 | "version": "0.4.0",
260 | "bundled": true,
261 | "dev": true,
262 | "optional": true
263 | },
264 | "aws-sign2": {
265 | "version": "0.6.0",
266 | "bundled": true,
267 | "dev": true,
268 | "optional": true
269 | },
270 | "aws4": {
271 | "version": "1.6.0",
272 | "bundled": true,
273 | "dev": true,
274 | "optional": true
275 | },
276 | "balanced-match": {
277 | "version": "0.4.2",
278 | "bundled": true,
279 | "dev": true
280 | },
281 | "bcrypt-pbkdf": {
282 | "version": "1.0.1",
283 | "bundled": true,
284 | "dev": true,
285 | "optional": true
286 | },
287 | "block-stream": {
288 | "version": "0.0.9",
289 | "bundled": true,
290 | "dev": true
291 | },
292 | "boom": {
293 | "version": "2.10.1",
294 | "bundled": true,
295 | "dev": true
296 | },
297 | "brace-expansion": {
298 | "version": "1.1.6",
299 | "bundled": true,
300 | "dev": true
301 | },
302 | "buffer-shims": {
303 | "version": "1.0.0",
304 | "bundled": true,
305 | "dev": true
306 | },
307 | "caseless": {
308 | "version": "0.11.0",
309 | "bundled": true,
310 | "dev": true,
311 | "optional": true
312 | },
313 | "chalk": {
314 | "version": "1.1.3",
315 | "bundled": true,
316 | "dev": true,
317 | "optional": true
318 | },
319 | "code-point-at": {
320 | "version": "1.1.0",
321 | "bundled": true,
322 | "dev": true
323 | },
324 | "combined-stream": {
325 | "version": "1.0.5",
326 | "bundled": true,
327 | "dev": true
328 | },
329 | "commander": {
330 | "version": "2.9.0",
331 | "bundled": true,
332 | "dev": true,
333 | "optional": true
334 | },
335 | "concat-map": {
336 | "version": "0.0.1",
337 | "bundled": true,
338 | "dev": true
339 | },
340 | "console-control-strings": {
341 | "version": "1.1.0",
342 | "bundled": true,
343 | "dev": true
344 | },
345 | "core-util-is": {
346 | "version": "1.0.2",
347 | "bundled": true,
348 | "dev": true
349 | },
350 | "cryptiles": {
351 | "version": "2.0.5",
352 | "bundled": true,
353 | "dev": true,
354 | "optional": true
355 | },
356 | "dashdash": {
357 | "version": "1.14.1",
358 | "bundled": true,
359 | "dev": true,
360 | "optional": true,
361 | "dependencies": {
362 | "assert-plus": {
363 | "version": "1.0.0",
364 | "bundled": true,
365 | "dev": true,
366 | "optional": true
367 | }
368 | }
369 | },
370 | "debug": {
371 | "version": "2.2.0",
372 | "bundled": true,
373 | "dev": true,
374 | "optional": true
375 | },
376 | "deep-extend": {
377 | "version": "0.4.1",
378 | "bundled": true,
379 | "dev": true,
380 | "optional": true
381 | },
382 | "delayed-stream": {
383 | "version": "1.0.0",
384 | "bundled": true,
385 | "dev": true
386 | },
387 | "delegates": {
388 | "version": "1.0.0",
389 | "bundled": true,
390 | "dev": true,
391 | "optional": true
392 | },
393 | "ecc-jsbn": {
394 | "version": "0.1.1",
395 | "bundled": true,
396 | "dev": true,
397 | "optional": true
398 | },
399 | "escape-string-regexp": {
400 | "version": "1.0.5",
401 | "bundled": true,
402 | "dev": true,
403 | "optional": true
404 | },
405 | "extend": {
406 | "version": "3.0.0",
407 | "bundled": true,
408 | "dev": true,
409 | "optional": true
410 | },
411 | "extsprintf": {
412 | "version": "1.0.2",
413 | "bundled": true,
414 | "dev": true
415 | },
416 | "forever-agent": {
417 | "version": "0.6.1",
418 | "bundled": true,
419 | "dev": true,
420 | "optional": true
421 | },
422 | "form-data": {
423 | "version": "2.1.2",
424 | "bundled": true,
425 | "dev": true,
426 | "optional": true
427 | },
428 | "fs.realpath": {
429 | "version": "1.0.0",
430 | "bundled": true,
431 | "dev": true
432 | },
433 | "fstream": {
434 | "version": "1.0.10",
435 | "bundled": true,
436 | "dev": true
437 | },
438 | "fstream-ignore": {
439 | "version": "1.0.5",
440 | "bundled": true,
441 | "dev": true,
442 | "optional": true
443 | },
444 | "gauge": {
445 | "version": "2.7.3",
446 | "bundled": true,
447 | "dev": true,
448 | "optional": true
449 | },
450 | "generate-function": {
451 | "version": "2.0.0",
452 | "bundled": true,
453 | "dev": true,
454 | "optional": true
455 | },
456 | "generate-object-property": {
457 | "version": "1.2.0",
458 | "bundled": true,
459 | "dev": true,
460 | "optional": true
461 | },
462 | "getpass": {
463 | "version": "0.1.6",
464 | "bundled": true,
465 | "dev": true,
466 | "optional": true,
467 | "dependencies": {
468 | "assert-plus": {
469 | "version": "1.0.0",
470 | "bundled": true,
471 | "dev": true,
472 | "optional": true
473 | }
474 | }
475 | },
476 | "glob": {
477 | "version": "7.1.1",
478 | "bundled": true,
479 | "dev": true
480 | },
481 | "graceful-fs": {
482 | "version": "4.1.11",
483 | "bundled": true,
484 | "dev": true
485 | },
486 | "graceful-readlink": {
487 | "version": "1.0.1",
488 | "bundled": true,
489 | "dev": true,
490 | "optional": true
491 | },
492 | "har-validator": {
493 | "version": "2.0.6",
494 | "bundled": true,
495 | "dev": true,
496 | "optional": true
497 | },
498 | "has-ansi": {
499 | "version": "2.0.0",
500 | "bundled": true,
501 | "dev": true,
502 | "optional": true
503 | },
504 | "has-unicode": {
505 | "version": "2.0.1",
506 | "bundled": true,
507 | "dev": true,
508 | "optional": true
509 | },
510 | "hawk": {
511 | "version": "3.1.3",
512 | "bundled": true,
513 | "dev": true,
514 | "optional": true
515 | },
516 | "hoek": {
517 | "version": "2.16.3",
518 | "bundled": true,
519 | "dev": true
520 | },
521 | "http-signature": {
522 | "version": "1.1.1",
523 | "bundled": true,
524 | "dev": true,
525 | "optional": true
526 | },
527 | "inflight": {
528 | "version": "1.0.6",
529 | "bundled": true,
530 | "dev": true
531 | },
532 | "inherits": {
533 | "version": "2.0.3",
534 | "bundled": true,
535 | "dev": true
536 | },
537 | "ini": {
538 | "version": "1.3.4",
539 | "bundled": true,
540 | "dev": true,
541 | "optional": true
542 | },
543 | "is-fullwidth-code-point": {
544 | "version": "1.0.0",
545 | "bundled": true,
546 | "dev": true
547 | },
548 | "is-my-json-valid": {
549 | "version": "2.15.0",
550 | "bundled": true,
551 | "dev": true,
552 | "optional": true
553 | },
554 | "is-property": {
555 | "version": "1.0.2",
556 | "bundled": true,
557 | "dev": true,
558 | "optional": true
559 | },
560 | "is-typedarray": {
561 | "version": "1.0.0",
562 | "bundled": true,
563 | "dev": true,
564 | "optional": true
565 | },
566 | "isarray": {
567 | "version": "1.0.0",
568 | "bundled": true,
569 | "dev": true
570 | },
571 | "isstream": {
572 | "version": "0.1.2",
573 | "bundled": true,
574 | "dev": true,
575 | "optional": true
576 | },
577 | "jodid25519": {
578 | "version": "1.0.2",
579 | "bundled": true,
580 | "dev": true,
581 | "optional": true
582 | },
583 | "jsbn": {
584 | "version": "0.1.1",
585 | "bundled": true,
586 | "dev": true,
587 | "optional": true
588 | },
589 | "json-schema": {
590 | "version": "0.2.3",
591 | "bundled": true,
592 | "dev": true,
593 | "optional": true
594 | },
595 | "json-stringify-safe": {
596 | "version": "5.0.1",
597 | "bundled": true,
598 | "dev": true,
599 | "optional": true
600 | },
601 | "jsonpointer": {
602 | "version": "4.0.1",
603 | "bundled": true,
604 | "dev": true,
605 | "optional": true
606 | },
607 | "jsprim": {
608 | "version": "1.3.1",
609 | "bundled": true,
610 | "dev": true,
611 | "optional": true
612 | },
613 | "mime-db": {
614 | "version": "1.26.0",
615 | "bundled": true,
616 | "dev": true
617 | },
618 | "mime-types": {
619 | "version": "2.1.14",
620 | "bundled": true,
621 | "dev": true
622 | },
623 | "minimatch": {
624 | "version": "3.0.3",
625 | "bundled": true,
626 | "dev": true
627 | },
628 | "minimist": {
629 | "version": "0.0.8",
630 | "bundled": true,
631 | "dev": true
632 | },
633 | "mkdirp": {
634 | "version": "0.5.1",
635 | "bundled": true,
636 | "dev": true
637 | },
638 | "ms": {
639 | "version": "0.7.1",
640 | "bundled": true,
641 | "dev": true,
642 | "optional": true
643 | },
644 | "node-pre-gyp": {
645 | "version": "0.6.33",
646 | "bundled": true,
647 | "dev": true,
648 | "optional": true
649 | },
650 | "nopt": {
651 | "version": "3.0.6",
652 | "bundled": true,
653 | "dev": true,
654 | "optional": true
655 | },
656 | "npmlog": {
657 | "version": "4.0.2",
658 | "bundled": true,
659 | "dev": true,
660 | "optional": true
661 | },
662 | "number-is-nan": {
663 | "version": "1.0.1",
664 | "bundled": true,
665 | "dev": true
666 | },
667 | "oauth-sign": {
668 | "version": "0.8.2",
669 | "bundled": true,
670 | "dev": true,
671 | "optional": true
672 | },
673 | "object-assign": {
674 | "version": "4.1.1",
675 | "bundled": true,
676 | "dev": true,
677 | "optional": true
678 | },
679 | "once": {
680 | "version": "1.4.0",
681 | "bundled": true,
682 | "dev": true
683 | },
684 | "path-is-absolute": {
685 | "version": "1.0.1",
686 | "bundled": true,
687 | "dev": true
688 | },
689 | "pinkie": {
690 | "version": "2.0.4",
691 | "bundled": true,
692 | "dev": true,
693 | "optional": true
694 | },
695 | "pinkie-promise": {
696 | "version": "2.0.1",
697 | "bundled": true,
698 | "dev": true,
699 | "optional": true
700 | },
701 | "process-nextick-args": {
702 | "version": "1.0.7",
703 | "bundled": true,
704 | "dev": true
705 | },
706 | "punycode": {
707 | "version": "1.4.1",
708 | "bundled": true,
709 | "dev": true,
710 | "optional": true
711 | },
712 | "qs": {
713 | "version": "6.3.1",
714 | "bundled": true,
715 | "dev": true,
716 | "optional": true
717 | },
718 | "rc": {
719 | "version": "1.1.7",
720 | "bundled": true,
721 | "dev": true,
722 | "optional": true,
723 | "dependencies": {
724 | "minimist": {
725 | "version": "1.2.0",
726 | "bundled": true,
727 | "dev": true,
728 | "optional": true
729 | }
730 | }
731 | },
732 | "readable-stream": {
733 | "version": "2.2.2",
734 | "bundled": true,
735 | "dev": true,
736 | "optional": true
737 | },
738 | "request": {
739 | "version": "2.79.0",
740 | "bundled": true,
741 | "dev": true,
742 | "optional": true
743 | },
744 | "rimraf": {
745 | "version": "2.5.4",
746 | "bundled": true,
747 | "dev": true
748 | },
749 | "semver": {
750 | "version": "5.3.0",
751 | "bundled": true,
752 | "dev": true,
753 | "optional": true
754 | },
755 | "set-blocking": {
756 | "version": "2.0.0",
757 | "bundled": true,
758 | "dev": true,
759 | "optional": true
760 | },
761 | "signal-exit": {
762 | "version": "3.0.2",
763 | "bundled": true,
764 | "dev": true,
765 | "optional": true
766 | },
767 | "sntp": {
768 | "version": "1.0.9",
769 | "bundled": true,
770 | "dev": true,
771 | "optional": true
772 | },
773 | "sshpk": {
774 | "version": "1.10.2",
775 | "bundled": true,
776 | "dev": true,
777 | "optional": true,
778 | "dependencies": {
779 | "assert-plus": {
780 | "version": "1.0.0",
781 | "bundled": true,
782 | "dev": true,
783 | "optional": true
784 | }
785 | }
786 | },
787 | "string_decoder": {
788 | "version": "0.10.31",
789 | "bundled": true,
790 | "dev": true
791 | },
792 | "string-width": {
793 | "version": "1.0.2",
794 | "bundled": true,
795 | "dev": true
796 | },
797 | "stringstream": {
798 | "version": "0.0.5",
799 | "bundled": true,
800 | "dev": true,
801 | "optional": true
802 | },
803 | "strip-ansi": {
804 | "version": "3.0.1",
805 | "bundled": true,
806 | "dev": true
807 | },
808 | "strip-json-comments": {
809 | "version": "2.0.1",
810 | "bundled": true,
811 | "dev": true,
812 | "optional": true
813 | },
814 | "supports-color": {
815 | "version": "2.0.0",
816 | "bundled": true,
817 | "dev": true,
818 | "optional": true
819 | },
820 | "tar": {
821 | "version": "2.2.1",
822 | "bundled": true,
823 | "dev": true
824 | },
825 | "tar-pack": {
826 | "version": "3.3.0",
827 | "bundled": true,
828 | "dev": true,
829 | "optional": true,
830 | "dependencies": {
831 | "once": {
832 | "version": "1.3.3",
833 | "bundled": true,
834 | "dev": true,
835 | "optional": true
836 | },
837 | "readable-stream": {
838 | "version": "2.1.5",
839 | "bundled": true,
840 | "dev": true,
841 | "optional": true
842 | }
843 | }
844 | },
845 | "tough-cookie": {
846 | "version": "2.3.2",
847 | "bundled": true,
848 | "dev": true,
849 | "optional": true
850 | },
851 | "tunnel-agent": {
852 | "version": "0.4.3",
853 | "bundled": true,
854 | "dev": true,
855 | "optional": true
856 | },
857 | "tweetnacl": {
858 | "version": "0.14.5",
859 | "bundled": true,
860 | "dev": true,
861 | "optional": true
862 | },
863 | "uid-number": {
864 | "version": "0.0.6",
865 | "bundled": true,
866 | "dev": true,
867 | "optional": true
868 | },
869 | "util-deprecate": {
870 | "version": "1.0.2",
871 | "bundled": true,
872 | "dev": true
873 | },
874 | "uuid": {
875 | "version": "3.0.1",
876 | "bundled": true,
877 | "dev": true,
878 | "optional": true
879 | },
880 | "verror": {
881 | "version": "1.3.6",
882 | "bundled": true,
883 | "dev": true,
884 | "optional": true
885 | },
886 | "wide-align": {
887 | "version": "1.1.0",
888 | "bundled": true,
889 | "dev": true,
890 | "optional": true
891 | },
892 | "wrappy": {
893 | "version": "1.0.2",
894 | "bundled": true,
895 | "dev": true
896 | },
897 | "xtend": {
898 | "version": "4.0.1",
899 | "bundled": true,
900 | "dev": true,
901 | "optional": true
902 | }
903 | }
904 | },
905 | "glob-base": {
906 | "version": "0.3.0",
907 | "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz",
908 | "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=",
909 | "dev": true
910 | },
911 | "glob-parent": {
912 | "version": "2.0.0",
913 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz",
914 | "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=",
915 | "dev": true
916 | },
917 | "got": {
918 | "version": "3.3.1",
919 | "resolved": "https://registry.npmjs.org/got/-/got-3.3.1.tgz",
920 | "integrity": "sha1-5dDtSvVfw+701WAHdp2YGSvLLso=",
921 | "dev": true,
922 | "dependencies": {
923 | "object-assign": {
924 | "version": "3.0.0",
925 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-3.0.0.tgz",
926 | "integrity": "sha1-m+3VygiXlJvKR+f/QIBi1Un1h/I=",
927 | "dev": true
928 | }
929 | }
930 | },
931 | "graceful-fs": {
932 | "version": "4.1.11",
933 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz",
934 | "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=",
935 | "dev": true
936 | },
937 | "has-ansi": {
938 | "version": "2.0.0",
939 | "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
940 | "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
941 | "dev": true
942 | },
943 | "ignore-by-default": {
944 | "version": "1.0.1",
945 | "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz",
946 | "integrity": "sha1-SMptcvbGo68Aqa1K5odr44ieKwk=",
947 | "dev": true
948 | },
949 | "imurmurhash": {
950 | "version": "0.1.4",
951 | "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
952 | "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=",
953 | "dev": true
954 | },
955 | "infinity-agent": {
956 | "version": "2.0.3",
957 | "resolved": "https://registry.npmjs.org/infinity-agent/-/infinity-agent-2.0.3.tgz",
958 | "integrity": "sha1-ReDi/3qesDCyfWK3SzdEt6esQhY=",
959 | "dev": true
960 | },
961 | "inherits": {
962 | "version": "2.0.3",
963 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
964 | "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
965 | "dev": true
966 | },
967 | "ini": {
968 | "version": "1.3.4",
969 | "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.4.tgz",
970 | "integrity": "sha1-BTfLedr1m1mhpRff9wbIbsA5Fi4=",
971 | "dev": true
972 | },
973 | "is-binary-path": {
974 | "version": "1.0.1",
975 | "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz",
976 | "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=",
977 | "dev": true
978 | },
979 | "is-buffer": {
980 | "version": "1.1.5",
981 | "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.5.tgz",
982 | "integrity": "sha1-Hzsm72E7IUuIy8ojzGwB2Hlh7sw=",
983 | "dev": true
984 | },
985 | "is-dotfile": {
986 | "version": "1.0.3",
987 | "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz",
988 | "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=",
989 | "dev": true
990 | },
991 | "is-equal-shallow": {
992 | "version": "0.1.3",
993 | "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz",
994 | "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=",
995 | "dev": true
996 | },
997 | "is-extendable": {
998 | "version": "0.1.1",
999 | "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
1000 | "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
1001 | "dev": true
1002 | },
1003 | "is-extglob": {
1004 | "version": "1.0.0",
1005 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz",
1006 | "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=",
1007 | "dev": true
1008 | },
1009 | "is-finite": {
1010 | "version": "1.0.2",
1011 | "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz",
1012 | "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=",
1013 | "dev": true
1014 | },
1015 | "is-glob": {
1016 | "version": "2.0.1",
1017 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz",
1018 | "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=",
1019 | "dev": true
1020 | },
1021 | "is-npm": {
1022 | "version": "1.0.0",
1023 | "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-1.0.0.tgz",
1024 | "integrity": "sha1-8vtjpl5JBbQGyGBydloaTceTufQ=",
1025 | "dev": true
1026 | },
1027 | "is-number": {
1028 | "version": "2.1.0",
1029 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz",
1030 | "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=",
1031 | "dev": true
1032 | },
1033 | "is-posix-bracket": {
1034 | "version": "0.1.1",
1035 | "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz",
1036 | "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=",
1037 | "dev": true
1038 | },
1039 | "is-primitive": {
1040 | "version": "2.0.0",
1041 | "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz",
1042 | "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=",
1043 | "dev": true
1044 | },
1045 | "is-redirect": {
1046 | "version": "1.0.0",
1047 | "resolved": "https://registry.npmjs.org/is-redirect/-/is-redirect-1.0.0.tgz",
1048 | "integrity": "sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ=",
1049 | "dev": true
1050 | },
1051 | "is-stream": {
1052 | "version": "1.1.0",
1053 | "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
1054 | "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=",
1055 | "dev": true
1056 | },
1057 | "isarray": {
1058 | "version": "1.0.0",
1059 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
1060 | "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
1061 | "dev": true
1062 | },
1063 | "isobject": {
1064 | "version": "2.1.0",
1065 | "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
1066 | "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=",
1067 | "dev": true
1068 | },
1069 | "kind-of": {
1070 | "version": "3.2.2",
1071 | "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
1072 | "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
1073 | "dev": true
1074 | },
1075 | "latest-version": {
1076 | "version": "1.0.1",
1077 | "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-1.0.1.tgz",
1078 | "integrity": "sha1-cs/Ebj6NG+ZR4eu1Tqn26pbzdLs=",
1079 | "dev": true
1080 | },
1081 | "lodash._baseassign": {
1082 | "version": "3.2.0",
1083 | "resolved": "https://registry.npmjs.org/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz",
1084 | "integrity": "sha1-jDigmVAPIVrQnlnxci/QxSv+Ck4=",
1085 | "dev": true
1086 | },
1087 | "lodash._basecopy": {
1088 | "version": "3.0.1",
1089 | "resolved": "https://registry.npmjs.org/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz",
1090 | "integrity": "sha1-jaDmqHbPNEwK2KVIghEd08XHyjY=",
1091 | "dev": true
1092 | },
1093 | "lodash._bindcallback": {
1094 | "version": "3.0.1",
1095 | "resolved": "https://registry.npmjs.org/lodash._bindcallback/-/lodash._bindcallback-3.0.1.tgz",
1096 | "integrity": "sha1-5THCdkTPi1epnhftlbNcdIeJOS4=",
1097 | "dev": true
1098 | },
1099 | "lodash._createassigner": {
1100 | "version": "3.1.1",
1101 | "resolved": "https://registry.npmjs.org/lodash._createassigner/-/lodash._createassigner-3.1.1.tgz",
1102 | "integrity": "sha1-g4pbri/aymOsIt7o4Z+k5taXCxE=",
1103 | "dev": true
1104 | },
1105 | "lodash._getnative": {
1106 | "version": "3.9.1",
1107 | "resolved": "https://registry.npmjs.org/lodash._getnative/-/lodash._getnative-3.9.1.tgz",
1108 | "integrity": "sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U=",
1109 | "dev": true
1110 | },
1111 | "lodash._isiterateecall": {
1112 | "version": "3.0.9",
1113 | "resolved": "https://registry.npmjs.org/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz",
1114 | "integrity": "sha1-UgOte6Ql+uhCRg5pbbnPPmqsBXw=",
1115 | "dev": true
1116 | },
1117 | "lodash.assign": {
1118 | "version": "3.2.0",
1119 | "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-3.2.0.tgz",
1120 | "integrity": "sha1-POnwI0tLIiPilrj6CsH+6OvKZPo=",
1121 | "dev": true
1122 | },
1123 | "lodash.defaults": {
1124 | "version": "3.1.2",
1125 | "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-3.1.2.tgz",
1126 | "integrity": "sha1-xzCLGNv4vJNy1wGnNJPGEZK9Liw=",
1127 | "dev": true
1128 | },
1129 | "lodash.isarguments": {
1130 | "version": "3.1.0",
1131 | "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz",
1132 | "integrity": "sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo=",
1133 | "dev": true
1134 | },
1135 | "lodash.isarray": {
1136 | "version": "3.0.4",
1137 | "resolved": "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-3.0.4.tgz",
1138 | "integrity": "sha1-eeTriMNqgSKvhvhEqpvNhRtfu1U=",
1139 | "dev": true
1140 | },
1141 | "lodash.keys": {
1142 | "version": "3.1.2",
1143 | "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz",
1144 | "integrity": "sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo=",
1145 | "dev": true
1146 | },
1147 | "lodash.restparam": {
1148 | "version": "3.6.1",
1149 | "resolved": "https://registry.npmjs.org/lodash.restparam/-/lodash.restparam-3.6.1.tgz",
1150 | "integrity": "sha1-k2pOMJ7zMKdkXtQUWYbIWuWyCAU=",
1151 | "dev": true
1152 | },
1153 | "lowercase-keys": {
1154 | "version": "1.0.0",
1155 | "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.0.tgz",
1156 | "integrity": "sha1-TjNms55/VFfjXxMkvfb4jQv8cwY=",
1157 | "dev": true
1158 | },
1159 | "map-stream": {
1160 | "version": "0.1.0",
1161 | "resolved": "https://registry.npmjs.org/map-stream/-/map-stream-0.1.0.tgz",
1162 | "integrity": "sha1-5WqpTEyAVaFkBKBnS3jyFffI4ZQ=",
1163 | "dev": true
1164 | },
1165 | "micromatch": {
1166 | "version": "2.3.11",
1167 | "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz",
1168 | "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=",
1169 | "dev": true
1170 | },
1171 | "minimatch": {
1172 | "version": "3.0.4",
1173 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
1174 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
1175 | "dev": true
1176 | },
1177 | "minimist": {
1178 | "version": "0.0.8",
1179 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
1180 | "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=",
1181 | "dev": true
1182 | },
1183 | "mkdirp": {
1184 | "version": "0.5.1",
1185 | "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
1186 | "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
1187 | "dev": true
1188 | },
1189 | "ms": {
1190 | "version": "2.0.0",
1191 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
1192 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
1193 | "dev": true
1194 | },
1195 | "nan": {
1196 | "version": "2.6.2",
1197 | "resolved": "https://registry.npmjs.org/nan/-/nan-2.6.2.tgz",
1198 | "integrity": "sha1-5P805slf37WuzAjeZZb0NgWn20U=",
1199 | "dev": true,
1200 | "optional": true
1201 | },
1202 | "nested-error-stacks": {
1203 | "version": "1.0.2",
1204 | "resolved": "https://registry.npmjs.org/nested-error-stacks/-/nested-error-stacks-1.0.2.tgz",
1205 | "integrity": "sha1-GfYZWRUZ8JZ2mlupqG5u7sgjw88=",
1206 | "dev": true
1207 | },
1208 | "nodemon": {
1209 | "version": "1.11.0",
1210 | "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-1.11.0.tgz",
1211 | "integrity": "sha1-ImxWK9KnsT09dRi0mtSCijYj0Gw=",
1212 | "dev": true
1213 | },
1214 | "nopt": {
1215 | "version": "1.0.10",
1216 | "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz",
1217 | "integrity": "sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=",
1218 | "dev": true
1219 | },
1220 | "normalize-path": {
1221 | "version": "2.1.1",
1222 | "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz",
1223 | "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=",
1224 | "dev": true
1225 | },
1226 | "number-is-nan": {
1227 | "version": "1.0.1",
1228 | "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
1229 | "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=",
1230 | "dev": true
1231 | },
1232 | "object-assign": {
1233 | "version": "4.1.1",
1234 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
1235 | "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
1236 | "dev": true
1237 | },
1238 | "object.omit": {
1239 | "version": "2.0.1",
1240 | "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz",
1241 | "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=",
1242 | "dev": true
1243 | },
1244 | "once": {
1245 | "version": "1.3.3",
1246 | "resolved": "https://registry.npmjs.org/once/-/once-1.3.3.tgz",
1247 | "integrity": "sha1-suJhVXzkwxTsgwTz+oJmPkKXyiA=",
1248 | "dev": true
1249 | },
1250 | "os-homedir": {
1251 | "version": "1.0.2",
1252 | "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz",
1253 | "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=",
1254 | "dev": true
1255 | },
1256 | "os-tmpdir": {
1257 | "version": "1.0.2",
1258 | "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
1259 | "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=",
1260 | "dev": true
1261 | },
1262 | "osenv": {
1263 | "version": "0.1.4",
1264 | "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.4.tgz",
1265 | "integrity": "sha1-Qv5tWVPfBsgGS+bxdsPQWqqjRkQ=",
1266 | "dev": true
1267 | },
1268 | "package-json": {
1269 | "version": "1.2.0",
1270 | "resolved": "https://registry.npmjs.org/package-json/-/package-json-1.2.0.tgz",
1271 | "integrity": "sha1-yOysCUInzfdqMWh07QXifMk5oOA=",
1272 | "dev": true
1273 | },
1274 | "parse-glob": {
1275 | "version": "3.0.4",
1276 | "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz",
1277 | "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=",
1278 | "dev": true
1279 | },
1280 | "path-is-absolute": {
1281 | "version": "1.0.1",
1282 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
1283 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
1284 | "dev": true
1285 | },
1286 | "pause-stream": {
1287 | "version": "0.0.11",
1288 | "resolved": "https://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz",
1289 | "integrity": "sha1-/lo0sMvOErWqaitAPuLnO2AvFEU=",
1290 | "dev": true
1291 | },
1292 | "pinkie": {
1293 | "version": "2.0.4",
1294 | "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz",
1295 | "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=",
1296 | "dev": true
1297 | },
1298 | "pinkie-promise": {
1299 | "version": "2.0.1",
1300 | "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz",
1301 | "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=",
1302 | "dev": true
1303 | },
1304 | "prepend-http": {
1305 | "version": "1.0.4",
1306 | "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz",
1307 | "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=",
1308 | "dev": true
1309 | },
1310 | "preserve": {
1311 | "version": "0.2.0",
1312 | "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz",
1313 | "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=",
1314 | "dev": true
1315 | },
1316 | "process-nextick-args": {
1317 | "version": "1.0.7",
1318 | "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz",
1319 | "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=",
1320 | "dev": true
1321 | },
1322 | "ps-tree": {
1323 | "version": "1.1.0",
1324 | "resolved": "https://registry.npmjs.org/ps-tree/-/ps-tree-1.1.0.tgz",
1325 | "integrity": "sha1-tCGyQUDWID8e08dplrRCewjowBQ=",
1326 | "dev": true
1327 | },
1328 | "randomatic": {
1329 | "version": "1.1.6",
1330 | "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-1.1.6.tgz",
1331 | "integrity": "sha1-EQ3Kv/OX6dz/fAeJzMCkmt8exbs=",
1332 | "dev": true
1333 | },
1334 | "rc": {
1335 | "version": "1.2.1",
1336 | "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.1.tgz",
1337 | "integrity": "sha1-LgPo5C7kULjLPc5lvhv4l04d/ZU=",
1338 | "dev": true,
1339 | "dependencies": {
1340 | "minimist": {
1341 | "version": "1.2.0",
1342 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
1343 | "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
1344 | "dev": true
1345 | }
1346 | }
1347 | },
1348 | "read-all-stream": {
1349 | "version": "3.1.0",
1350 | "resolved": "https://registry.npmjs.org/read-all-stream/-/read-all-stream-3.1.0.tgz",
1351 | "integrity": "sha1-NcPhd/IHjveJ7kv6+kNzB06u9Po=",
1352 | "dev": true
1353 | },
1354 | "readable-stream": {
1355 | "version": "2.2.10",
1356 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.10.tgz",
1357 | "integrity": "sha512-HQEnnoV404e0EtwB9yNiuk2tJ+egeVC8Y9QBAxzDg8DBJt4BzRp+yQuIb/t3FIWkSTmIi+sgx7yVv/ZM0GNoqw==",
1358 | "dev": true
1359 | },
1360 | "readdirp": {
1361 | "version": "2.1.0",
1362 | "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.1.0.tgz",
1363 | "integrity": "sha1-TtCtBg3zBzMAxIRANz9y0cxkLXg=",
1364 | "dev": true
1365 | },
1366 | "regex-cache": {
1367 | "version": "0.4.3",
1368 | "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.3.tgz",
1369 | "integrity": "sha1-mxpsNdTQ3871cRrmUejp09cRQUU=",
1370 | "dev": true
1371 | },
1372 | "registry-url": {
1373 | "version": "3.1.0",
1374 | "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-3.1.0.tgz",
1375 | "integrity": "sha1-PU74cPc93h138M+aOBQyRE4XSUI=",
1376 | "dev": true
1377 | },
1378 | "remove-trailing-separator": {
1379 | "version": "1.0.1",
1380 | "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.0.1.tgz",
1381 | "integrity": "sha1-YV67lq9VlVLUv0BXyENtSGq2PMQ=",
1382 | "dev": true
1383 | },
1384 | "repeat-element": {
1385 | "version": "1.1.2",
1386 | "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz",
1387 | "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=",
1388 | "dev": true
1389 | },
1390 | "repeat-string": {
1391 | "version": "1.6.1",
1392 | "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
1393 | "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=",
1394 | "dev": true
1395 | },
1396 | "repeating": {
1397 | "version": "1.1.3",
1398 | "resolved": "https://registry.npmjs.org/repeating/-/repeating-1.1.3.tgz",
1399 | "integrity": "sha1-PUEUIYh3U3SU+X93+Xhfq4EPpKw=",
1400 | "dev": true
1401 | },
1402 | "safe-buffer": {
1403 | "version": "5.0.1",
1404 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.0.1.tgz",
1405 | "integrity": "sha1-0mPKVGls2KMGtcplUekt5XkY++c=",
1406 | "dev": true
1407 | },
1408 | "semver": {
1409 | "version": "5.3.0",
1410 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz",
1411 | "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=",
1412 | "dev": true
1413 | },
1414 | "semver-diff": {
1415 | "version": "2.1.0",
1416 | "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-2.1.0.tgz",
1417 | "integrity": "sha1-S7uEN8jTfksM8aaP1ybsbWRdbTY=",
1418 | "dev": true
1419 | },
1420 | "set-immediate-shim": {
1421 | "version": "1.0.1",
1422 | "resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz",
1423 | "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=",
1424 | "dev": true
1425 | },
1426 | "slide": {
1427 | "version": "1.1.6",
1428 | "resolved": "https://registry.npmjs.org/slide/-/slide-1.1.6.tgz",
1429 | "integrity": "sha1-VusCfWW00tzmyy4tMsTUr8nh1wc=",
1430 | "dev": true
1431 | },
1432 | "split": {
1433 | "version": "0.3.3",
1434 | "resolved": "https://registry.npmjs.org/split/-/split-0.3.3.tgz",
1435 | "integrity": "sha1-zQ7qXmOiEd//frDwkcQTPi0N0o8=",
1436 | "dev": true
1437 | },
1438 | "stream-combiner": {
1439 | "version": "0.0.4",
1440 | "resolved": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.0.4.tgz",
1441 | "integrity": "sha1-TV5DPBhSYd3mI8o/RMWGvPXErRQ=",
1442 | "dev": true
1443 | },
1444 | "stream-shift": {
1445 | "version": "1.0.0",
1446 | "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.0.tgz",
1447 | "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=",
1448 | "dev": true
1449 | },
1450 | "string_decoder": {
1451 | "version": "1.0.1",
1452 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.1.tgz",
1453 | "integrity": "sha1-YuIA8DmVWmgQ2N8KM//A8BNmLZg=",
1454 | "dev": true
1455 | },
1456 | "string-length": {
1457 | "version": "1.0.1",
1458 | "resolved": "https://registry.npmjs.org/string-length/-/string-length-1.0.1.tgz",
1459 | "integrity": "sha1-VpcPscOFWOnnC3KL894mmsRa36w=",
1460 | "dev": true
1461 | },
1462 | "strip-ansi": {
1463 | "version": "3.0.1",
1464 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
1465 | "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
1466 | "dev": true
1467 | },
1468 | "strip-json-comments": {
1469 | "version": "2.0.1",
1470 | "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
1471 | "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=",
1472 | "dev": true
1473 | },
1474 | "supports-color": {
1475 | "version": "2.0.0",
1476 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
1477 | "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
1478 | "dev": true
1479 | },
1480 | "through": {
1481 | "version": "2.3.8",
1482 | "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
1483 | "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=",
1484 | "dev": true
1485 | },
1486 | "timed-out": {
1487 | "version": "2.0.0",
1488 | "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-2.0.0.tgz",
1489 | "integrity": "sha1-84sK6B03R9YoAB9B2vxlKs5nHAo=",
1490 | "dev": true
1491 | },
1492 | "touch": {
1493 | "version": "1.0.0",
1494 | "resolved": "https://registry.npmjs.org/touch/-/touch-1.0.0.tgz",
1495 | "integrity": "sha1-RJy+LbrlqMgDjjDXH6D/RklHxN4=",
1496 | "dev": true
1497 | },
1498 | "undefsafe": {
1499 | "version": "0.0.3",
1500 | "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-0.0.3.tgz",
1501 | "integrity": "sha1-7Mo6A+VrmvFzhbqsgSrIO5lKli8=",
1502 | "dev": true
1503 | },
1504 | "update-notifier": {
1505 | "version": "0.5.0",
1506 | "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-0.5.0.tgz",
1507 | "integrity": "sha1-B7XcIGazYnqztPUwEw9+3doHpMw=",
1508 | "dev": true
1509 | },
1510 | "util-deprecate": {
1511 | "version": "1.0.2",
1512 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
1513 | "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
1514 | "dev": true
1515 | },
1516 | "uuid": {
1517 | "version": "2.0.3",
1518 | "resolved": "https://registry.npmjs.org/uuid/-/uuid-2.0.3.tgz",
1519 | "integrity": "sha1-Z+LoY3lyFVMN/zGOW/nc6/1Hsho=",
1520 | "dev": true
1521 | },
1522 | "wrappy": {
1523 | "version": "1.0.2",
1524 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
1525 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
1526 | "dev": true
1527 | },
1528 | "write-file-atomic": {
1529 | "version": "1.3.4",
1530 | "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-1.3.4.tgz",
1531 | "integrity": "sha1-+Aek8LHZ6ROuekgRLmzDrxmRtF8=",
1532 | "dev": true
1533 | },
1534 | "xdg-basedir": {
1535 | "version": "2.0.0",
1536 | "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-2.0.0.tgz",
1537 | "integrity": "sha1-7byQPMOF/ARSPZZqM1UEtVBNG9I=",
1538 | "dev": true
1539 | }
1540 | }
1541 | }
1542 |
--------------------------------------------------------------------------------
/mentor-notes/step-2.5/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "step-1",
3 | "version": "1.0.0",
4 | "description": "",
5 | "main": "index.js",
6 | "scripts": {
7 | "test": "echo \"Error: no test specified\" && exit 1",
8 | "devStart": "nodemon src/server.js"
9 | },
10 | "author": "",
11 | "license": "ISC",
12 | "devDependencies": {
13 | "nodemon": "^1.11.0"
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/mentor-notes/step-2.5/public/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Node Week Day 1 Morning Workshop
6 |
7 |
8 |
9 |
10 | Hello world!
11 |
12 | Red
13 | Blue
14 | Yellow
15 |
16 |
17 |
18 |
19 |
--------------------------------------------------------------------------------
/mentor-notes/step-2.5/public/index.js:
--------------------------------------------------------------------------------
1 | (function() {
2 | var redBtn = document.getElementById('red-button');
3 | var blueBtn = document.getElementById('blue-button');
4 | var yellowBtn = document.getElementById('yellow-button');
5 | var body = document.querySelector('body');
6 |
7 | function httpGetRequest(colour) {
8 | var xhr = new XMLHttpRequest();
9 | xhr.onreadystatechange = function() {
10 | if (xhr.readyState == 4 && xhr.status == 200) {
11 | body.style.backgroundColor = colour;
12 | }
13 | };
14 | xhr.open('GET', '/', true);
15 | xhr.send();
16 | }
17 |
18 | redBtn.addEventListener('click', function() {
19 | httpGetRequest('red');
20 | });
21 | blueBtn.addEventListener('click', function() {
22 | httpGetRequest('blue');
23 | });
24 | yellowBtn.addEventListener('click', function() {
25 | httpGetRequest('yellow');
26 | });
27 | })();
28 |
--------------------------------------------------------------------------------
/mentor-notes/step-2.5/public/main.css:
--------------------------------------------------------------------------------
1 | body {
2 | background-color: #aaa;
3 | }
4 |
5 | button {
6 | border: 2px solid #000;
7 | width: 80px;
8 | height: 30px;
9 | border-radius: 3px;
10 | }
11 |
12 | #red-button {
13 | background-color: red;
14 | color: #fff;
15 | }
16 |
17 | #blue-button {
18 | background-color: blue;
19 | color: #fff;
20 | }
21 |
22 | #yellow-button {
23 | background-color: yellow;
24 | }
25 |
--------------------------------------------------------------------------------
/mentor-notes/step-2.5/public/node-icon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/foundersandcoders/Node-Intro-Workshop/c71302f3af4e38da9299d5d3fc89e629436d8e4f/mentor-notes/step-2.5/public/node-icon.ico
--------------------------------------------------------------------------------
/mentor-notes/step-2.5/src/router.js:
--------------------------------------------------------------------------------
1 | const fs = require('fs');
2 | const path = require('path');
3 |
4 | const router = (request, response) => {
5 | const url = request.url;
6 | if (url === '/') {
7 | const filePath = path.join(__dirname, '..', 'public', 'index.html');
8 | fs.readFile(filePath, (error, file) => {
9 | if (error) {
10 | console.log(error);
11 | response.writeHead(500, { 'Content-Type': 'text/html' });
12 | response.end("Sorry, we've had a problem on our end ");
13 | } else {
14 | response.writeHead(200, { 'Content-Type': 'text/html' });
15 | response.end(file);
16 | }
17 | });
18 | } else if (url === '/yolo') {
19 | response.end('this is yolo');
20 | } else {
21 | response.writeHead(404, { 'Content-Type': 'text/html' });
22 | response.end('404 not found ');
23 | }
24 | };
25 |
26 | module.exports = router;
27 |
--------------------------------------------------------------------------------
/mentor-notes/step-2.5/src/server.js:
--------------------------------------------------------------------------------
1 | const http = require('http');
2 | const router = require('./router');
3 | const port = 4000;
4 |
5 | const server = http.createServer(router);
6 |
7 | server.listen(port);
8 |
9 | console.log(`server up and running on localhost:${port}`);
10 |
--------------------------------------------------------------------------------
/mentor-notes/step-2/package-lock.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "step-1",
3 | "version": "1.0.0",
4 | "lockfileVersion": 1,
5 | "dependencies": {
6 | "abbrev": {
7 | "version": "1.1.0",
8 | "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.0.tgz",
9 | "integrity": "sha1-0FVMIlZjbi9W58LlrRg/hZQo2B8=",
10 | "dev": true
11 | },
12 | "ansi-regex": {
13 | "version": "2.1.1",
14 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
15 | "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
16 | "dev": true
17 | },
18 | "ansi-styles": {
19 | "version": "2.2.1",
20 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
21 | "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
22 | "dev": true
23 | },
24 | "anymatch": {
25 | "version": "1.3.0",
26 | "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.0.tgz",
27 | "integrity": "sha1-o+Uvo5FoyCX/V7AkgSbOWo/5VQc=",
28 | "dev": true
29 | },
30 | "arr-diff": {
31 | "version": "2.0.0",
32 | "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz",
33 | "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=",
34 | "dev": true
35 | },
36 | "arr-flatten": {
37 | "version": "1.0.3",
38 | "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.0.3.tgz",
39 | "integrity": "sha1-onTthawIhJtr14R8RYB0XcUa37E=",
40 | "dev": true
41 | },
42 | "array-unique": {
43 | "version": "0.2.1",
44 | "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz",
45 | "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=",
46 | "dev": true
47 | },
48 | "arrify": {
49 | "version": "1.0.1",
50 | "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz",
51 | "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=",
52 | "dev": true
53 | },
54 | "async-each": {
55 | "version": "1.0.1",
56 | "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz",
57 | "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0=",
58 | "dev": true
59 | },
60 | "balanced-match": {
61 | "version": "0.4.2",
62 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz",
63 | "integrity": "sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg=",
64 | "dev": true
65 | },
66 | "binary-extensions": {
67 | "version": "1.8.0",
68 | "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.8.0.tgz",
69 | "integrity": "sha1-SOyNFt9Dd+rl+liEaCSAr02Vx3Q=",
70 | "dev": true
71 | },
72 | "brace-expansion": {
73 | "version": "1.1.7",
74 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.7.tgz",
75 | "integrity": "sha1-Pv/DxQ4ABTH7cg6v+A8K6O8jz1k=",
76 | "dev": true
77 | },
78 | "braces": {
79 | "version": "1.8.5",
80 | "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz",
81 | "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=",
82 | "dev": true
83 | },
84 | "chalk": {
85 | "version": "1.1.3",
86 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
87 | "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
88 | "dev": true
89 | },
90 | "chokidar": {
91 | "version": "1.7.0",
92 | "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-1.7.0.tgz",
93 | "integrity": "sha1-eY5ol3gVHIB2tLNg5e3SjNortGg=",
94 | "dev": true
95 | },
96 | "concat-map": {
97 | "version": "0.0.1",
98 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
99 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
100 | "dev": true
101 | },
102 | "configstore": {
103 | "version": "1.4.0",
104 | "resolved": "https://registry.npmjs.org/configstore/-/configstore-1.4.0.tgz",
105 | "integrity": "sha1-w1eB0FAdJowlxUuLF/YkDopPsCE=",
106 | "dev": true
107 | },
108 | "core-util-is": {
109 | "version": "1.0.2",
110 | "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
111 | "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
112 | "dev": true
113 | },
114 | "debug": {
115 | "version": "2.6.8",
116 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz",
117 | "integrity": "sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw=",
118 | "dev": true
119 | },
120 | "deep-extend": {
121 | "version": "0.4.2",
122 | "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.4.2.tgz",
123 | "integrity": "sha1-SLaZwn4zS/ifEIkr5DL25MfTSn8=",
124 | "dev": true
125 | },
126 | "duplexer": {
127 | "version": "0.1.1",
128 | "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz",
129 | "integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=",
130 | "dev": true
131 | },
132 | "duplexify": {
133 | "version": "3.5.0",
134 | "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.5.0.tgz",
135 | "integrity": "sha1-GqdzAC4VeEV+nZ1KULDMquvL1gQ=",
136 | "dev": true
137 | },
138 | "end-of-stream": {
139 | "version": "1.0.0",
140 | "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.0.0.tgz",
141 | "integrity": "sha1-1FlucCc0qT5A6a+GQxnqvZn/Lw4=",
142 | "dev": true
143 | },
144 | "es6-promise": {
145 | "version": "3.3.1",
146 | "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-3.3.1.tgz",
147 | "integrity": "sha1-oIzd6EzNvzTQJ6FFG8kdS80ophM=",
148 | "dev": true
149 | },
150 | "escape-string-regexp": {
151 | "version": "1.0.5",
152 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
153 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
154 | "dev": true
155 | },
156 | "event-stream": {
157 | "version": "3.3.4",
158 | "resolved": "https://registry.npmjs.org/event-stream/-/event-stream-3.3.4.tgz",
159 | "integrity": "sha1-SrTJoPWlTbkzi0w02Gv86PSzVXE=",
160 | "dev": true
161 | },
162 | "expand-brackets": {
163 | "version": "0.1.5",
164 | "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz",
165 | "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=",
166 | "dev": true
167 | },
168 | "expand-range": {
169 | "version": "1.8.2",
170 | "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz",
171 | "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=",
172 | "dev": true
173 | },
174 | "extglob": {
175 | "version": "0.3.2",
176 | "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz",
177 | "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=",
178 | "dev": true
179 | },
180 | "filename-regex": {
181 | "version": "2.0.1",
182 | "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz",
183 | "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=",
184 | "dev": true
185 | },
186 | "fill-range": {
187 | "version": "2.2.3",
188 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.3.tgz",
189 | "integrity": "sha1-ULd9/X5Gm8dJJHCWNpn+eoSFpyM=",
190 | "dev": true
191 | },
192 | "for-in": {
193 | "version": "1.0.2",
194 | "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
195 | "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=",
196 | "dev": true
197 | },
198 | "for-own": {
199 | "version": "0.1.5",
200 | "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz",
201 | "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=",
202 | "dev": true
203 | },
204 | "from": {
205 | "version": "0.1.7",
206 | "resolved": "https://registry.npmjs.org/from/-/from-0.1.7.tgz",
207 | "integrity": "sha1-g8YK/Fi5xWmXAH7Rp2izqzA6RP4=",
208 | "dev": true
209 | },
210 | "fsevents": {
211 | "version": "1.1.1",
212 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.1.1.tgz",
213 | "integrity": "sha1-8Z/Sj0Pur3YWgOUZogPE0LPTGv8=",
214 | "dev": true,
215 | "optional": true,
216 | "dependencies": {
217 | "abbrev": {
218 | "version": "1.1.0",
219 | "bundled": true,
220 | "dev": true,
221 | "optional": true
222 | },
223 | "ansi-regex": {
224 | "version": "2.1.1",
225 | "bundled": true,
226 | "dev": true
227 | },
228 | "ansi-styles": {
229 | "version": "2.2.1",
230 | "bundled": true,
231 | "dev": true,
232 | "optional": true
233 | },
234 | "aproba": {
235 | "version": "1.1.1",
236 | "bundled": true,
237 | "dev": true,
238 | "optional": true
239 | },
240 | "are-we-there-yet": {
241 | "version": "1.1.2",
242 | "bundled": true,
243 | "dev": true,
244 | "optional": true
245 | },
246 | "asn1": {
247 | "version": "0.2.3",
248 | "bundled": true,
249 | "dev": true,
250 | "optional": true
251 | },
252 | "assert-plus": {
253 | "version": "0.2.0",
254 | "bundled": true,
255 | "dev": true,
256 | "optional": true
257 | },
258 | "asynckit": {
259 | "version": "0.4.0",
260 | "bundled": true,
261 | "dev": true,
262 | "optional": true
263 | },
264 | "aws-sign2": {
265 | "version": "0.6.0",
266 | "bundled": true,
267 | "dev": true,
268 | "optional": true
269 | },
270 | "aws4": {
271 | "version": "1.6.0",
272 | "bundled": true,
273 | "dev": true,
274 | "optional": true
275 | },
276 | "balanced-match": {
277 | "version": "0.4.2",
278 | "bundled": true,
279 | "dev": true
280 | },
281 | "bcrypt-pbkdf": {
282 | "version": "1.0.1",
283 | "bundled": true,
284 | "dev": true,
285 | "optional": true
286 | },
287 | "block-stream": {
288 | "version": "0.0.9",
289 | "bundled": true,
290 | "dev": true
291 | },
292 | "boom": {
293 | "version": "2.10.1",
294 | "bundled": true,
295 | "dev": true
296 | },
297 | "brace-expansion": {
298 | "version": "1.1.6",
299 | "bundled": true,
300 | "dev": true
301 | },
302 | "buffer-shims": {
303 | "version": "1.0.0",
304 | "bundled": true,
305 | "dev": true
306 | },
307 | "caseless": {
308 | "version": "0.11.0",
309 | "bundled": true,
310 | "dev": true,
311 | "optional": true
312 | },
313 | "chalk": {
314 | "version": "1.1.3",
315 | "bundled": true,
316 | "dev": true,
317 | "optional": true
318 | },
319 | "code-point-at": {
320 | "version": "1.1.0",
321 | "bundled": true,
322 | "dev": true
323 | },
324 | "combined-stream": {
325 | "version": "1.0.5",
326 | "bundled": true,
327 | "dev": true
328 | },
329 | "commander": {
330 | "version": "2.9.0",
331 | "bundled": true,
332 | "dev": true,
333 | "optional": true
334 | },
335 | "concat-map": {
336 | "version": "0.0.1",
337 | "bundled": true,
338 | "dev": true
339 | },
340 | "console-control-strings": {
341 | "version": "1.1.0",
342 | "bundled": true,
343 | "dev": true
344 | },
345 | "core-util-is": {
346 | "version": "1.0.2",
347 | "bundled": true,
348 | "dev": true
349 | },
350 | "cryptiles": {
351 | "version": "2.0.5",
352 | "bundled": true,
353 | "dev": true,
354 | "optional": true
355 | },
356 | "dashdash": {
357 | "version": "1.14.1",
358 | "bundled": true,
359 | "dev": true,
360 | "optional": true,
361 | "dependencies": {
362 | "assert-plus": {
363 | "version": "1.0.0",
364 | "bundled": true,
365 | "dev": true,
366 | "optional": true
367 | }
368 | }
369 | },
370 | "debug": {
371 | "version": "2.2.0",
372 | "bundled": true,
373 | "dev": true,
374 | "optional": true
375 | },
376 | "deep-extend": {
377 | "version": "0.4.1",
378 | "bundled": true,
379 | "dev": true,
380 | "optional": true
381 | },
382 | "delayed-stream": {
383 | "version": "1.0.0",
384 | "bundled": true,
385 | "dev": true
386 | },
387 | "delegates": {
388 | "version": "1.0.0",
389 | "bundled": true,
390 | "dev": true,
391 | "optional": true
392 | },
393 | "ecc-jsbn": {
394 | "version": "0.1.1",
395 | "bundled": true,
396 | "dev": true,
397 | "optional": true
398 | },
399 | "escape-string-regexp": {
400 | "version": "1.0.5",
401 | "bundled": true,
402 | "dev": true,
403 | "optional": true
404 | },
405 | "extend": {
406 | "version": "3.0.0",
407 | "bundled": true,
408 | "dev": true,
409 | "optional": true
410 | },
411 | "extsprintf": {
412 | "version": "1.0.2",
413 | "bundled": true,
414 | "dev": true
415 | },
416 | "forever-agent": {
417 | "version": "0.6.1",
418 | "bundled": true,
419 | "dev": true,
420 | "optional": true
421 | },
422 | "form-data": {
423 | "version": "2.1.2",
424 | "bundled": true,
425 | "dev": true,
426 | "optional": true
427 | },
428 | "fs.realpath": {
429 | "version": "1.0.0",
430 | "bundled": true,
431 | "dev": true
432 | },
433 | "fstream": {
434 | "version": "1.0.10",
435 | "bundled": true,
436 | "dev": true
437 | },
438 | "fstream-ignore": {
439 | "version": "1.0.5",
440 | "bundled": true,
441 | "dev": true,
442 | "optional": true
443 | },
444 | "gauge": {
445 | "version": "2.7.3",
446 | "bundled": true,
447 | "dev": true,
448 | "optional": true
449 | },
450 | "generate-function": {
451 | "version": "2.0.0",
452 | "bundled": true,
453 | "dev": true,
454 | "optional": true
455 | },
456 | "generate-object-property": {
457 | "version": "1.2.0",
458 | "bundled": true,
459 | "dev": true,
460 | "optional": true
461 | },
462 | "getpass": {
463 | "version": "0.1.6",
464 | "bundled": true,
465 | "dev": true,
466 | "optional": true,
467 | "dependencies": {
468 | "assert-plus": {
469 | "version": "1.0.0",
470 | "bundled": true,
471 | "dev": true,
472 | "optional": true
473 | }
474 | }
475 | },
476 | "glob": {
477 | "version": "7.1.1",
478 | "bundled": true,
479 | "dev": true
480 | },
481 | "graceful-fs": {
482 | "version": "4.1.11",
483 | "bundled": true,
484 | "dev": true
485 | },
486 | "graceful-readlink": {
487 | "version": "1.0.1",
488 | "bundled": true,
489 | "dev": true,
490 | "optional": true
491 | },
492 | "har-validator": {
493 | "version": "2.0.6",
494 | "bundled": true,
495 | "dev": true,
496 | "optional": true
497 | },
498 | "has-ansi": {
499 | "version": "2.0.0",
500 | "bundled": true,
501 | "dev": true,
502 | "optional": true
503 | },
504 | "has-unicode": {
505 | "version": "2.0.1",
506 | "bundled": true,
507 | "dev": true,
508 | "optional": true
509 | },
510 | "hawk": {
511 | "version": "3.1.3",
512 | "bundled": true,
513 | "dev": true,
514 | "optional": true
515 | },
516 | "hoek": {
517 | "version": "2.16.3",
518 | "bundled": true,
519 | "dev": true
520 | },
521 | "http-signature": {
522 | "version": "1.1.1",
523 | "bundled": true,
524 | "dev": true,
525 | "optional": true
526 | },
527 | "inflight": {
528 | "version": "1.0.6",
529 | "bundled": true,
530 | "dev": true
531 | },
532 | "inherits": {
533 | "version": "2.0.3",
534 | "bundled": true,
535 | "dev": true
536 | },
537 | "ini": {
538 | "version": "1.3.4",
539 | "bundled": true,
540 | "dev": true,
541 | "optional": true
542 | },
543 | "is-fullwidth-code-point": {
544 | "version": "1.0.0",
545 | "bundled": true,
546 | "dev": true
547 | },
548 | "is-my-json-valid": {
549 | "version": "2.15.0",
550 | "bundled": true,
551 | "dev": true,
552 | "optional": true
553 | },
554 | "is-property": {
555 | "version": "1.0.2",
556 | "bundled": true,
557 | "dev": true,
558 | "optional": true
559 | },
560 | "is-typedarray": {
561 | "version": "1.0.0",
562 | "bundled": true,
563 | "dev": true,
564 | "optional": true
565 | },
566 | "isarray": {
567 | "version": "1.0.0",
568 | "bundled": true,
569 | "dev": true
570 | },
571 | "isstream": {
572 | "version": "0.1.2",
573 | "bundled": true,
574 | "dev": true,
575 | "optional": true
576 | },
577 | "jodid25519": {
578 | "version": "1.0.2",
579 | "bundled": true,
580 | "dev": true,
581 | "optional": true
582 | },
583 | "jsbn": {
584 | "version": "0.1.1",
585 | "bundled": true,
586 | "dev": true,
587 | "optional": true
588 | },
589 | "json-schema": {
590 | "version": "0.2.3",
591 | "bundled": true,
592 | "dev": true,
593 | "optional": true
594 | },
595 | "json-stringify-safe": {
596 | "version": "5.0.1",
597 | "bundled": true,
598 | "dev": true,
599 | "optional": true
600 | },
601 | "jsonpointer": {
602 | "version": "4.0.1",
603 | "bundled": true,
604 | "dev": true,
605 | "optional": true
606 | },
607 | "jsprim": {
608 | "version": "1.3.1",
609 | "bundled": true,
610 | "dev": true,
611 | "optional": true
612 | },
613 | "mime-db": {
614 | "version": "1.26.0",
615 | "bundled": true,
616 | "dev": true
617 | },
618 | "mime-types": {
619 | "version": "2.1.14",
620 | "bundled": true,
621 | "dev": true
622 | },
623 | "minimatch": {
624 | "version": "3.0.3",
625 | "bundled": true,
626 | "dev": true
627 | },
628 | "minimist": {
629 | "version": "0.0.8",
630 | "bundled": true,
631 | "dev": true
632 | },
633 | "mkdirp": {
634 | "version": "0.5.1",
635 | "bundled": true,
636 | "dev": true
637 | },
638 | "ms": {
639 | "version": "0.7.1",
640 | "bundled": true,
641 | "dev": true,
642 | "optional": true
643 | },
644 | "node-pre-gyp": {
645 | "version": "0.6.33",
646 | "bundled": true,
647 | "dev": true,
648 | "optional": true
649 | },
650 | "nopt": {
651 | "version": "3.0.6",
652 | "bundled": true,
653 | "dev": true,
654 | "optional": true
655 | },
656 | "npmlog": {
657 | "version": "4.0.2",
658 | "bundled": true,
659 | "dev": true,
660 | "optional": true
661 | },
662 | "number-is-nan": {
663 | "version": "1.0.1",
664 | "bundled": true,
665 | "dev": true
666 | },
667 | "oauth-sign": {
668 | "version": "0.8.2",
669 | "bundled": true,
670 | "dev": true,
671 | "optional": true
672 | },
673 | "object-assign": {
674 | "version": "4.1.1",
675 | "bundled": true,
676 | "dev": true,
677 | "optional": true
678 | },
679 | "once": {
680 | "version": "1.4.0",
681 | "bundled": true,
682 | "dev": true
683 | },
684 | "path-is-absolute": {
685 | "version": "1.0.1",
686 | "bundled": true,
687 | "dev": true
688 | },
689 | "pinkie": {
690 | "version": "2.0.4",
691 | "bundled": true,
692 | "dev": true,
693 | "optional": true
694 | },
695 | "pinkie-promise": {
696 | "version": "2.0.1",
697 | "bundled": true,
698 | "dev": true,
699 | "optional": true
700 | },
701 | "process-nextick-args": {
702 | "version": "1.0.7",
703 | "bundled": true,
704 | "dev": true
705 | },
706 | "punycode": {
707 | "version": "1.4.1",
708 | "bundled": true,
709 | "dev": true,
710 | "optional": true
711 | },
712 | "qs": {
713 | "version": "6.3.1",
714 | "bundled": true,
715 | "dev": true,
716 | "optional": true
717 | },
718 | "rc": {
719 | "version": "1.1.7",
720 | "bundled": true,
721 | "dev": true,
722 | "optional": true,
723 | "dependencies": {
724 | "minimist": {
725 | "version": "1.2.0",
726 | "bundled": true,
727 | "dev": true,
728 | "optional": true
729 | }
730 | }
731 | },
732 | "readable-stream": {
733 | "version": "2.2.2",
734 | "bundled": true,
735 | "dev": true,
736 | "optional": true
737 | },
738 | "request": {
739 | "version": "2.79.0",
740 | "bundled": true,
741 | "dev": true,
742 | "optional": true
743 | },
744 | "rimraf": {
745 | "version": "2.5.4",
746 | "bundled": true,
747 | "dev": true
748 | },
749 | "semver": {
750 | "version": "5.3.0",
751 | "bundled": true,
752 | "dev": true,
753 | "optional": true
754 | },
755 | "set-blocking": {
756 | "version": "2.0.0",
757 | "bundled": true,
758 | "dev": true,
759 | "optional": true
760 | },
761 | "signal-exit": {
762 | "version": "3.0.2",
763 | "bundled": true,
764 | "dev": true,
765 | "optional": true
766 | },
767 | "sntp": {
768 | "version": "1.0.9",
769 | "bundled": true,
770 | "dev": true,
771 | "optional": true
772 | },
773 | "sshpk": {
774 | "version": "1.10.2",
775 | "bundled": true,
776 | "dev": true,
777 | "optional": true,
778 | "dependencies": {
779 | "assert-plus": {
780 | "version": "1.0.0",
781 | "bundled": true,
782 | "dev": true,
783 | "optional": true
784 | }
785 | }
786 | },
787 | "string_decoder": {
788 | "version": "0.10.31",
789 | "bundled": true,
790 | "dev": true
791 | },
792 | "string-width": {
793 | "version": "1.0.2",
794 | "bundled": true,
795 | "dev": true
796 | },
797 | "stringstream": {
798 | "version": "0.0.5",
799 | "bundled": true,
800 | "dev": true,
801 | "optional": true
802 | },
803 | "strip-ansi": {
804 | "version": "3.0.1",
805 | "bundled": true,
806 | "dev": true
807 | },
808 | "strip-json-comments": {
809 | "version": "2.0.1",
810 | "bundled": true,
811 | "dev": true,
812 | "optional": true
813 | },
814 | "supports-color": {
815 | "version": "2.0.0",
816 | "bundled": true,
817 | "dev": true,
818 | "optional": true
819 | },
820 | "tar": {
821 | "version": "2.2.1",
822 | "bundled": true,
823 | "dev": true
824 | },
825 | "tar-pack": {
826 | "version": "3.3.0",
827 | "bundled": true,
828 | "dev": true,
829 | "optional": true,
830 | "dependencies": {
831 | "once": {
832 | "version": "1.3.3",
833 | "bundled": true,
834 | "dev": true,
835 | "optional": true
836 | },
837 | "readable-stream": {
838 | "version": "2.1.5",
839 | "bundled": true,
840 | "dev": true,
841 | "optional": true
842 | }
843 | }
844 | },
845 | "tough-cookie": {
846 | "version": "2.3.2",
847 | "bundled": true,
848 | "dev": true,
849 | "optional": true
850 | },
851 | "tunnel-agent": {
852 | "version": "0.4.3",
853 | "bundled": true,
854 | "dev": true,
855 | "optional": true
856 | },
857 | "tweetnacl": {
858 | "version": "0.14.5",
859 | "bundled": true,
860 | "dev": true,
861 | "optional": true
862 | },
863 | "uid-number": {
864 | "version": "0.0.6",
865 | "bundled": true,
866 | "dev": true,
867 | "optional": true
868 | },
869 | "util-deprecate": {
870 | "version": "1.0.2",
871 | "bundled": true,
872 | "dev": true
873 | },
874 | "uuid": {
875 | "version": "3.0.1",
876 | "bundled": true,
877 | "dev": true,
878 | "optional": true
879 | },
880 | "verror": {
881 | "version": "1.3.6",
882 | "bundled": true,
883 | "dev": true,
884 | "optional": true
885 | },
886 | "wide-align": {
887 | "version": "1.1.0",
888 | "bundled": true,
889 | "dev": true,
890 | "optional": true
891 | },
892 | "wrappy": {
893 | "version": "1.0.2",
894 | "bundled": true,
895 | "dev": true
896 | },
897 | "xtend": {
898 | "version": "4.0.1",
899 | "bundled": true,
900 | "dev": true,
901 | "optional": true
902 | }
903 | }
904 | },
905 | "glob-base": {
906 | "version": "0.3.0",
907 | "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz",
908 | "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=",
909 | "dev": true
910 | },
911 | "glob-parent": {
912 | "version": "2.0.0",
913 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz",
914 | "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=",
915 | "dev": true
916 | },
917 | "got": {
918 | "version": "3.3.1",
919 | "resolved": "https://registry.npmjs.org/got/-/got-3.3.1.tgz",
920 | "integrity": "sha1-5dDtSvVfw+701WAHdp2YGSvLLso=",
921 | "dev": true,
922 | "dependencies": {
923 | "object-assign": {
924 | "version": "3.0.0",
925 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-3.0.0.tgz",
926 | "integrity": "sha1-m+3VygiXlJvKR+f/QIBi1Un1h/I=",
927 | "dev": true
928 | }
929 | }
930 | },
931 | "graceful-fs": {
932 | "version": "4.1.11",
933 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz",
934 | "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=",
935 | "dev": true
936 | },
937 | "has-ansi": {
938 | "version": "2.0.0",
939 | "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
940 | "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
941 | "dev": true
942 | },
943 | "ignore-by-default": {
944 | "version": "1.0.1",
945 | "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz",
946 | "integrity": "sha1-SMptcvbGo68Aqa1K5odr44ieKwk=",
947 | "dev": true
948 | },
949 | "imurmurhash": {
950 | "version": "0.1.4",
951 | "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
952 | "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=",
953 | "dev": true
954 | },
955 | "infinity-agent": {
956 | "version": "2.0.3",
957 | "resolved": "https://registry.npmjs.org/infinity-agent/-/infinity-agent-2.0.3.tgz",
958 | "integrity": "sha1-ReDi/3qesDCyfWK3SzdEt6esQhY=",
959 | "dev": true
960 | },
961 | "inherits": {
962 | "version": "2.0.3",
963 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
964 | "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
965 | "dev": true
966 | },
967 | "ini": {
968 | "version": "1.3.4",
969 | "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.4.tgz",
970 | "integrity": "sha1-BTfLedr1m1mhpRff9wbIbsA5Fi4=",
971 | "dev": true
972 | },
973 | "is-binary-path": {
974 | "version": "1.0.1",
975 | "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz",
976 | "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=",
977 | "dev": true
978 | },
979 | "is-buffer": {
980 | "version": "1.1.5",
981 | "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.5.tgz",
982 | "integrity": "sha1-Hzsm72E7IUuIy8ojzGwB2Hlh7sw=",
983 | "dev": true
984 | },
985 | "is-dotfile": {
986 | "version": "1.0.3",
987 | "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz",
988 | "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=",
989 | "dev": true
990 | },
991 | "is-equal-shallow": {
992 | "version": "0.1.3",
993 | "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz",
994 | "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=",
995 | "dev": true
996 | },
997 | "is-extendable": {
998 | "version": "0.1.1",
999 | "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
1000 | "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
1001 | "dev": true
1002 | },
1003 | "is-extglob": {
1004 | "version": "1.0.0",
1005 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz",
1006 | "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=",
1007 | "dev": true
1008 | },
1009 | "is-finite": {
1010 | "version": "1.0.2",
1011 | "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz",
1012 | "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=",
1013 | "dev": true
1014 | },
1015 | "is-glob": {
1016 | "version": "2.0.1",
1017 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz",
1018 | "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=",
1019 | "dev": true
1020 | },
1021 | "is-npm": {
1022 | "version": "1.0.0",
1023 | "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-1.0.0.tgz",
1024 | "integrity": "sha1-8vtjpl5JBbQGyGBydloaTceTufQ=",
1025 | "dev": true
1026 | },
1027 | "is-number": {
1028 | "version": "2.1.0",
1029 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz",
1030 | "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=",
1031 | "dev": true
1032 | },
1033 | "is-posix-bracket": {
1034 | "version": "0.1.1",
1035 | "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz",
1036 | "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=",
1037 | "dev": true
1038 | },
1039 | "is-primitive": {
1040 | "version": "2.0.0",
1041 | "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz",
1042 | "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=",
1043 | "dev": true
1044 | },
1045 | "is-redirect": {
1046 | "version": "1.0.0",
1047 | "resolved": "https://registry.npmjs.org/is-redirect/-/is-redirect-1.0.0.tgz",
1048 | "integrity": "sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ=",
1049 | "dev": true
1050 | },
1051 | "is-stream": {
1052 | "version": "1.1.0",
1053 | "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
1054 | "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=",
1055 | "dev": true
1056 | },
1057 | "isarray": {
1058 | "version": "1.0.0",
1059 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
1060 | "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
1061 | "dev": true
1062 | },
1063 | "isobject": {
1064 | "version": "2.1.0",
1065 | "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
1066 | "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=",
1067 | "dev": true
1068 | },
1069 | "kind-of": {
1070 | "version": "3.2.2",
1071 | "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
1072 | "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
1073 | "dev": true
1074 | },
1075 | "latest-version": {
1076 | "version": "1.0.1",
1077 | "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-1.0.1.tgz",
1078 | "integrity": "sha1-cs/Ebj6NG+ZR4eu1Tqn26pbzdLs=",
1079 | "dev": true
1080 | },
1081 | "lodash._baseassign": {
1082 | "version": "3.2.0",
1083 | "resolved": "https://registry.npmjs.org/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz",
1084 | "integrity": "sha1-jDigmVAPIVrQnlnxci/QxSv+Ck4=",
1085 | "dev": true
1086 | },
1087 | "lodash._basecopy": {
1088 | "version": "3.0.1",
1089 | "resolved": "https://registry.npmjs.org/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz",
1090 | "integrity": "sha1-jaDmqHbPNEwK2KVIghEd08XHyjY=",
1091 | "dev": true
1092 | },
1093 | "lodash._bindcallback": {
1094 | "version": "3.0.1",
1095 | "resolved": "https://registry.npmjs.org/lodash._bindcallback/-/lodash._bindcallback-3.0.1.tgz",
1096 | "integrity": "sha1-5THCdkTPi1epnhftlbNcdIeJOS4=",
1097 | "dev": true
1098 | },
1099 | "lodash._createassigner": {
1100 | "version": "3.1.1",
1101 | "resolved": "https://registry.npmjs.org/lodash._createassigner/-/lodash._createassigner-3.1.1.tgz",
1102 | "integrity": "sha1-g4pbri/aymOsIt7o4Z+k5taXCxE=",
1103 | "dev": true
1104 | },
1105 | "lodash._getnative": {
1106 | "version": "3.9.1",
1107 | "resolved": "https://registry.npmjs.org/lodash._getnative/-/lodash._getnative-3.9.1.tgz",
1108 | "integrity": "sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U=",
1109 | "dev": true
1110 | },
1111 | "lodash._isiterateecall": {
1112 | "version": "3.0.9",
1113 | "resolved": "https://registry.npmjs.org/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz",
1114 | "integrity": "sha1-UgOte6Ql+uhCRg5pbbnPPmqsBXw=",
1115 | "dev": true
1116 | },
1117 | "lodash.assign": {
1118 | "version": "3.2.0",
1119 | "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-3.2.0.tgz",
1120 | "integrity": "sha1-POnwI0tLIiPilrj6CsH+6OvKZPo=",
1121 | "dev": true
1122 | },
1123 | "lodash.defaults": {
1124 | "version": "3.1.2",
1125 | "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-3.1.2.tgz",
1126 | "integrity": "sha1-xzCLGNv4vJNy1wGnNJPGEZK9Liw=",
1127 | "dev": true
1128 | },
1129 | "lodash.isarguments": {
1130 | "version": "3.1.0",
1131 | "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz",
1132 | "integrity": "sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo=",
1133 | "dev": true
1134 | },
1135 | "lodash.isarray": {
1136 | "version": "3.0.4",
1137 | "resolved": "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-3.0.4.tgz",
1138 | "integrity": "sha1-eeTriMNqgSKvhvhEqpvNhRtfu1U=",
1139 | "dev": true
1140 | },
1141 | "lodash.keys": {
1142 | "version": "3.1.2",
1143 | "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz",
1144 | "integrity": "sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo=",
1145 | "dev": true
1146 | },
1147 | "lodash.restparam": {
1148 | "version": "3.6.1",
1149 | "resolved": "https://registry.npmjs.org/lodash.restparam/-/lodash.restparam-3.6.1.tgz",
1150 | "integrity": "sha1-k2pOMJ7zMKdkXtQUWYbIWuWyCAU=",
1151 | "dev": true
1152 | },
1153 | "lowercase-keys": {
1154 | "version": "1.0.0",
1155 | "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.0.tgz",
1156 | "integrity": "sha1-TjNms55/VFfjXxMkvfb4jQv8cwY=",
1157 | "dev": true
1158 | },
1159 | "map-stream": {
1160 | "version": "0.1.0",
1161 | "resolved": "https://registry.npmjs.org/map-stream/-/map-stream-0.1.0.tgz",
1162 | "integrity": "sha1-5WqpTEyAVaFkBKBnS3jyFffI4ZQ=",
1163 | "dev": true
1164 | },
1165 | "micromatch": {
1166 | "version": "2.3.11",
1167 | "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz",
1168 | "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=",
1169 | "dev": true
1170 | },
1171 | "minimatch": {
1172 | "version": "3.0.4",
1173 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
1174 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
1175 | "dev": true
1176 | },
1177 | "minimist": {
1178 | "version": "0.0.8",
1179 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
1180 | "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=",
1181 | "dev": true
1182 | },
1183 | "mkdirp": {
1184 | "version": "0.5.1",
1185 | "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
1186 | "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
1187 | "dev": true
1188 | },
1189 | "ms": {
1190 | "version": "2.0.0",
1191 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
1192 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
1193 | "dev": true
1194 | },
1195 | "nan": {
1196 | "version": "2.6.2",
1197 | "resolved": "https://registry.npmjs.org/nan/-/nan-2.6.2.tgz",
1198 | "integrity": "sha1-5P805slf37WuzAjeZZb0NgWn20U=",
1199 | "dev": true,
1200 | "optional": true
1201 | },
1202 | "nested-error-stacks": {
1203 | "version": "1.0.2",
1204 | "resolved": "https://registry.npmjs.org/nested-error-stacks/-/nested-error-stacks-1.0.2.tgz",
1205 | "integrity": "sha1-GfYZWRUZ8JZ2mlupqG5u7sgjw88=",
1206 | "dev": true
1207 | },
1208 | "nodemon": {
1209 | "version": "1.11.0",
1210 | "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-1.11.0.tgz",
1211 | "integrity": "sha1-ImxWK9KnsT09dRi0mtSCijYj0Gw=",
1212 | "dev": true
1213 | },
1214 | "nopt": {
1215 | "version": "1.0.10",
1216 | "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz",
1217 | "integrity": "sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=",
1218 | "dev": true
1219 | },
1220 | "normalize-path": {
1221 | "version": "2.1.1",
1222 | "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz",
1223 | "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=",
1224 | "dev": true
1225 | },
1226 | "number-is-nan": {
1227 | "version": "1.0.1",
1228 | "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
1229 | "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=",
1230 | "dev": true
1231 | },
1232 | "object-assign": {
1233 | "version": "4.1.1",
1234 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
1235 | "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
1236 | "dev": true
1237 | },
1238 | "object.omit": {
1239 | "version": "2.0.1",
1240 | "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz",
1241 | "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=",
1242 | "dev": true
1243 | },
1244 | "once": {
1245 | "version": "1.3.3",
1246 | "resolved": "https://registry.npmjs.org/once/-/once-1.3.3.tgz",
1247 | "integrity": "sha1-suJhVXzkwxTsgwTz+oJmPkKXyiA=",
1248 | "dev": true
1249 | },
1250 | "os-homedir": {
1251 | "version": "1.0.2",
1252 | "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz",
1253 | "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=",
1254 | "dev": true
1255 | },
1256 | "os-tmpdir": {
1257 | "version": "1.0.2",
1258 | "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
1259 | "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=",
1260 | "dev": true
1261 | },
1262 | "osenv": {
1263 | "version": "0.1.4",
1264 | "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.4.tgz",
1265 | "integrity": "sha1-Qv5tWVPfBsgGS+bxdsPQWqqjRkQ=",
1266 | "dev": true
1267 | },
1268 | "package-json": {
1269 | "version": "1.2.0",
1270 | "resolved": "https://registry.npmjs.org/package-json/-/package-json-1.2.0.tgz",
1271 | "integrity": "sha1-yOysCUInzfdqMWh07QXifMk5oOA=",
1272 | "dev": true
1273 | },
1274 | "parse-glob": {
1275 | "version": "3.0.4",
1276 | "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz",
1277 | "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=",
1278 | "dev": true
1279 | },
1280 | "path-is-absolute": {
1281 | "version": "1.0.1",
1282 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
1283 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
1284 | "dev": true
1285 | },
1286 | "pause-stream": {
1287 | "version": "0.0.11",
1288 | "resolved": "https://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz",
1289 | "integrity": "sha1-/lo0sMvOErWqaitAPuLnO2AvFEU=",
1290 | "dev": true
1291 | },
1292 | "pinkie": {
1293 | "version": "2.0.4",
1294 | "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz",
1295 | "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=",
1296 | "dev": true
1297 | },
1298 | "pinkie-promise": {
1299 | "version": "2.0.1",
1300 | "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz",
1301 | "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=",
1302 | "dev": true
1303 | },
1304 | "prepend-http": {
1305 | "version": "1.0.4",
1306 | "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz",
1307 | "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=",
1308 | "dev": true
1309 | },
1310 | "preserve": {
1311 | "version": "0.2.0",
1312 | "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz",
1313 | "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=",
1314 | "dev": true
1315 | },
1316 | "process-nextick-args": {
1317 | "version": "1.0.7",
1318 | "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz",
1319 | "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=",
1320 | "dev": true
1321 | },
1322 | "ps-tree": {
1323 | "version": "1.1.0",
1324 | "resolved": "https://registry.npmjs.org/ps-tree/-/ps-tree-1.1.0.tgz",
1325 | "integrity": "sha1-tCGyQUDWID8e08dplrRCewjowBQ=",
1326 | "dev": true
1327 | },
1328 | "randomatic": {
1329 | "version": "1.1.6",
1330 | "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-1.1.6.tgz",
1331 | "integrity": "sha1-EQ3Kv/OX6dz/fAeJzMCkmt8exbs=",
1332 | "dev": true
1333 | },
1334 | "rc": {
1335 | "version": "1.2.1",
1336 | "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.1.tgz",
1337 | "integrity": "sha1-LgPo5C7kULjLPc5lvhv4l04d/ZU=",
1338 | "dev": true,
1339 | "dependencies": {
1340 | "minimist": {
1341 | "version": "1.2.0",
1342 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
1343 | "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
1344 | "dev": true
1345 | }
1346 | }
1347 | },
1348 | "read-all-stream": {
1349 | "version": "3.1.0",
1350 | "resolved": "https://registry.npmjs.org/read-all-stream/-/read-all-stream-3.1.0.tgz",
1351 | "integrity": "sha1-NcPhd/IHjveJ7kv6+kNzB06u9Po=",
1352 | "dev": true
1353 | },
1354 | "readable-stream": {
1355 | "version": "2.2.10",
1356 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.10.tgz",
1357 | "integrity": "sha512-HQEnnoV404e0EtwB9yNiuk2tJ+egeVC8Y9QBAxzDg8DBJt4BzRp+yQuIb/t3FIWkSTmIi+sgx7yVv/ZM0GNoqw==",
1358 | "dev": true
1359 | },
1360 | "readdirp": {
1361 | "version": "2.1.0",
1362 | "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.1.0.tgz",
1363 | "integrity": "sha1-TtCtBg3zBzMAxIRANz9y0cxkLXg=",
1364 | "dev": true
1365 | },
1366 | "regex-cache": {
1367 | "version": "0.4.3",
1368 | "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.3.tgz",
1369 | "integrity": "sha1-mxpsNdTQ3871cRrmUejp09cRQUU=",
1370 | "dev": true
1371 | },
1372 | "registry-url": {
1373 | "version": "3.1.0",
1374 | "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-3.1.0.tgz",
1375 | "integrity": "sha1-PU74cPc93h138M+aOBQyRE4XSUI=",
1376 | "dev": true
1377 | },
1378 | "remove-trailing-separator": {
1379 | "version": "1.0.1",
1380 | "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.0.1.tgz",
1381 | "integrity": "sha1-YV67lq9VlVLUv0BXyENtSGq2PMQ=",
1382 | "dev": true
1383 | },
1384 | "repeat-element": {
1385 | "version": "1.1.2",
1386 | "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz",
1387 | "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=",
1388 | "dev": true
1389 | },
1390 | "repeat-string": {
1391 | "version": "1.6.1",
1392 | "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
1393 | "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=",
1394 | "dev": true
1395 | },
1396 | "repeating": {
1397 | "version": "1.1.3",
1398 | "resolved": "https://registry.npmjs.org/repeating/-/repeating-1.1.3.tgz",
1399 | "integrity": "sha1-PUEUIYh3U3SU+X93+Xhfq4EPpKw=",
1400 | "dev": true
1401 | },
1402 | "safe-buffer": {
1403 | "version": "5.0.1",
1404 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.0.1.tgz",
1405 | "integrity": "sha1-0mPKVGls2KMGtcplUekt5XkY++c=",
1406 | "dev": true
1407 | },
1408 | "semver": {
1409 | "version": "5.3.0",
1410 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz",
1411 | "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=",
1412 | "dev": true
1413 | },
1414 | "semver-diff": {
1415 | "version": "2.1.0",
1416 | "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-2.1.0.tgz",
1417 | "integrity": "sha1-S7uEN8jTfksM8aaP1ybsbWRdbTY=",
1418 | "dev": true
1419 | },
1420 | "set-immediate-shim": {
1421 | "version": "1.0.1",
1422 | "resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz",
1423 | "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=",
1424 | "dev": true
1425 | },
1426 | "slide": {
1427 | "version": "1.1.6",
1428 | "resolved": "https://registry.npmjs.org/slide/-/slide-1.1.6.tgz",
1429 | "integrity": "sha1-VusCfWW00tzmyy4tMsTUr8nh1wc=",
1430 | "dev": true
1431 | },
1432 | "split": {
1433 | "version": "0.3.3",
1434 | "resolved": "https://registry.npmjs.org/split/-/split-0.3.3.tgz",
1435 | "integrity": "sha1-zQ7qXmOiEd//frDwkcQTPi0N0o8=",
1436 | "dev": true
1437 | },
1438 | "stream-combiner": {
1439 | "version": "0.0.4",
1440 | "resolved": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.0.4.tgz",
1441 | "integrity": "sha1-TV5DPBhSYd3mI8o/RMWGvPXErRQ=",
1442 | "dev": true
1443 | },
1444 | "stream-shift": {
1445 | "version": "1.0.0",
1446 | "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.0.tgz",
1447 | "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=",
1448 | "dev": true
1449 | },
1450 | "string_decoder": {
1451 | "version": "1.0.1",
1452 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.1.tgz",
1453 | "integrity": "sha1-YuIA8DmVWmgQ2N8KM//A8BNmLZg=",
1454 | "dev": true
1455 | },
1456 | "string-length": {
1457 | "version": "1.0.1",
1458 | "resolved": "https://registry.npmjs.org/string-length/-/string-length-1.0.1.tgz",
1459 | "integrity": "sha1-VpcPscOFWOnnC3KL894mmsRa36w=",
1460 | "dev": true
1461 | },
1462 | "strip-ansi": {
1463 | "version": "3.0.1",
1464 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
1465 | "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
1466 | "dev": true
1467 | },
1468 | "strip-json-comments": {
1469 | "version": "2.0.1",
1470 | "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
1471 | "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=",
1472 | "dev": true
1473 | },
1474 | "supports-color": {
1475 | "version": "2.0.0",
1476 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
1477 | "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
1478 | "dev": true
1479 | },
1480 | "through": {
1481 | "version": "2.3.8",
1482 | "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
1483 | "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=",
1484 | "dev": true
1485 | },
1486 | "timed-out": {
1487 | "version": "2.0.0",
1488 | "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-2.0.0.tgz",
1489 | "integrity": "sha1-84sK6B03R9YoAB9B2vxlKs5nHAo=",
1490 | "dev": true
1491 | },
1492 | "touch": {
1493 | "version": "1.0.0",
1494 | "resolved": "https://registry.npmjs.org/touch/-/touch-1.0.0.tgz",
1495 | "integrity": "sha1-RJy+LbrlqMgDjjDXH6D/RklHxN4=",
1496 | "dev": true
1497 | },
1498 | "undefsafe": {
1499 | "version": "0.0.3",
1500 | "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-0.0.3.tgz",
1501 | "integrity": "sha1-7Mo6A+VrmvFzhbqsgSrIO5lKli8=",
1502 | "dev": true
1503 | },
1504 | "update-notifier": {
1505 | "version": "0.5.0",
1506 | "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-0.5.0.tgz",
1507 | "integrity": "sha1-B7XcIGazYnqztPUwEw9+3doHpMw=",
1508 | "dev": true
1509 | },
1510 | "util-deprecate": {
1511 | "version": "1.0.2",
1512 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
1513 | "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
1514 | "dev": true
1515 | },
1516 | "uuid": {
1517 | "version": "2.0.3",
1518 | "resolved": "https://registry.npmjs.org/uuid/-/uuid-2.0.3.tgz",
1519 | "integrity": "sha1-Z+LoY3lyFVMN/zGOW/nc6/1Hsho=",
1520 | "dev": true
1521 | },
1522 | "wrappy": {
1523 | "version": "1.0.2",
1524 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
1525 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
1526 | "dev": true
1527 | },
1528 | "write-file-atomic": {
1529 | "version": "1.3.4",
1530 | "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-1.3.4.tgz",
1531 | "integrity": "sha1-+Aek8LHZ6ROuekgRLmzDrxmRtF8=",
1532 | "dev": true
1533 | },
1534 | "xdg-basedir": {
1535 | "version": "2.0.0",
1536 | "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-2.0.0.tgz",
1537 | "integrity": "sha1-7byQPMOF/ARSPZZqM1UEtVBNG9I=",
1538 | "dev": true
1539 | }
1540 | }
1541 | }
1542 |
--------------------------------------------------------------------------------
/mentor-notes/step-2/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "step-1",
3 | "version": "1.0.0",
4 | "description": "",
5 | "main": "index.js",
6 | "scripts": {
7 | "test": "echo \"Error: no test specified\" && exit 1",
8 | "devStart": "nodemon src/server.js"
9 | },
10 | "author": "",
11 | "license": "ISC",
12 | "devDependencies": {
13 | "nodemon": "^1.11.0"
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/mentor-notes/step-2/public/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Node Week Day 1 Morning Workshop
6 |
7 |
8 |
9 |
10 | Hello world!
11 |
12 | Red
13 | Blue
14 | Yellow
15 |
16 |
17 |
18 |
19 |
--------------------------------------------------------------------------------
/mentor-notes/step-2/public/index.js:
--------------------------------------------------------------------------------
1 | (function() {
2 | var redBtn = document.getElementById('red-button');
3 | var blueBtn = document.getElementById('blue-button');
4 | var yellowBtn = document.getElementById('yellow-button');
5 | var body = document.querySelector('body');
6 |
7 | function httpGetRequest(colour) {
8 | var xhr = new XMLHttpRequest();
9 | xhr.onreadystatechange = function() {
10 | if (xhr.readyState == 4 && xhr.status == 200) {
11 | body.style.backgroundColor = colour;
12 | }
13 | };
14 | xhr.open('GET', '/', true);
15 | xhr.send();
16 | }
17 |
18 | redBtn.addEventListener('click', function() {
19 | httpGetRequest('red');
20 | });
21 | blueBtn.addEventListener('click', function() {
22 | httpGetRequest('blue');
23 | });
24 | yellowBtn.addEventListener('click', function() {
25 | httpGetRequest('yellow');
26 | });
27 | })();
28 |
--------------------------------------------------------------------------------
/mentor-notes/step-2/public/main.css:
--------------------------------------------------------------------------------
1 | body {
2 | background-color: #aaa;
3 | }
4 |
5 | button {
6 | border: 2px solid #000;
7 | width: 80px;
8 | height: 30px;
9 | border-radius: 3px;
10 | }
11 |
12 | #red-button {
13 | background-color: red;
14 | color: #fff;
15 | }
16 |
17 | #blue-button {
18 | background-color: blue;
19 | color: #fff;
20 | }
21 |
22 | #yellow-button {
23 | background-color: yellow;
24 | }
25 |
--------------------------------------------------------------------------------
/mentor-notes/step-2/public/node-icon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/foundersandcoders/Node-Intro-Workshop/c71302f3af4e38da9299d5d3fc89e629436d8e4f/mentor-notes/step-2/public/node-icon.ico
--------------------------------------------------------------------------------
/mentor-notes/step-2/src/router.js:
--------------------------------------------------------------------------------
1 | const fs = require('fs');
2 | const path = require('path');
3 |
4 | const router = (request, response) => {
5 | const url = request.url;
6 | if (url === '/') {
7 | const html = fs.readFileSync(
8 | path.join(__dirname, '..', 'public', 'index.html')
9 | );
10 | response.writeHead(200, { 'Content-Type': 'text/html' });
11 | response.end(html);
12 | } else if (url === '/yolo') {
13 | response.end('this is yolo');
14 | } else {
15 | response.writeHead(404);
16 | response.end('404 not found');
17 | }
18 | };
19 |
20 | module.exports = router;
21 |
--------------------------------------------------------------------------------
/mentor-notes/step-2/src/server.js:
--------------------------------------------------------------------------------
1 | const http = require('http');
2 | const router = require('./router');
3 | const port = 4000;
4 |
5 | const server = http.createServer(router);
6 |
7 | server.listen(port);
8 |
9 | console.log(`server up and running on localhost:${port}`);
10 |
--------------------------------------------------------------------------------
/mentor-notes/step-3/package-lock.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "step-1",
3 | "version": "1.0.0",
4 | "lockfileVersion": 1,
5 | "dependencies": {
6 | "abbrev": {
7 | "version": "1.1.0",
8 | "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.0.tgz",
9 | "integrity": "sha1-0FVMIlZjbi9W58LlrRg/hZQo2B8=",
10 | "dev": true
11 | },
12 | "ansi-regex": {
13 | "version": "2.1.1",
14 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
15 | "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
16 | "dev": true
17 | },
18 | "ansi-styles": {
19 | "version": "2.2.1",
20 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
21 | "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
22 | "dev": true
23 | },
24 | "anymatch": {
25 | "version": "1.3.0",
26 | "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.0.tgz",
27 | "integrity": "sha1-o+Uvo5FoyCX/V7AkgSbOWo/5VQc=",
28 | "dev": true
29 | },
30 | "arr-diff": {
31 | "version": "2.0.0",
32 | "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz",
33 | "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=",
34 | "dev": true
35 | },
36 | "arr-flatten": {
37 | "version": "1.0.3",
38 | "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.0.3.tgz",
39 | "integrity": "sha1-onTthawIhJtr14R8RYB0XcUa37E=",
40 | "dev": true
41 | },
42 | "array-unique": {
43 | "version": "0.2.1",
44 | "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz",
45 | "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=",
46 | "dev": true
47 | },
48 | "arrify": {
49 | "version": "1.0.1",
50 | "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz",
51 | "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=",
52 | "dev": true
53 | },
54 | "async-each": {
55 | "version": "1.0.1",
56 | "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz",
57 | "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0=",
58 | "dev": true
59 | },
60 | "balanced-match": {
61 | "version": "0.4.2",
62 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz",
63 | "integrity": "sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg=",
64 | "dev": true
65 | },
66 | "binary-extensions": {
67 | "version": "1.8.0",
68 | "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.8.0.tgz",
69 | "integrity": "sha1-SOyNFt9Dd+rl+liEaCSAr02Vx3Q=",
70 | "dev": true
71 | },
72 | "brace-expansion": {
73 | "version": "1.1.7",
74 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.7.tgz",
75 | "integrity": "sha1-Pv/DxQ4ABTH7cg6v+A8K6O8jz1k=",
76 | "dev": true
77 | },
78 | "braces": {
79 | "version": "1.8.5",
80 | "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz",
81 | "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=",
82 | "dev": true
83 | },
84 | "chalk": {
85 | "version": "1.1.3",
86 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
87 | "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
88 | "dev": true
89 | },
90 | "chokidar": {
91 | "version": "1.7.0",
92 | "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-1.7.0.tgz",
93 | "integrity": "sha1-eY5ol3gVHIB2tLNg5e3SjNortGg=",
94 | "dev": true
95 | },
96 | "concat-map": {
97 | "version": "0.0.1",
98 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
99 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
100 | "dev": true
101 | },
102 | "configstore": {
103 | "version": "1.4.0",
104 | "resolved": "https://registry.npmjs.org/configstore/-/configstore-1.4.0.tgz",
105 | "integrity": "sha1-w1eB0FAdJowlxUuLF/YkDopPsCE=",
106 | "dev": true
107 | },
108 | "core-util-is": {
109 | "version": "1.0.2",
110 | "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
111 | "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
112 | "dev": true
113 | },
114 | "debug": {
115 | "version": "2.6.8",
116 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz",
117 | "integrity": "sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw=",
118 | "dev": true
119 | },
120 | "deep-extend": {
121 | "version": "0.4.2",
122 | "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.4.2.tgz",
123 | "integrity": "sha1-SLaZwn4zS/ifEIkr5DL25MfTSn8=",
124 | "dev": true
125 | },
126 | "duplexer": {
127 | "version": "0.1.1",
128 | "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz",
129 | "integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=",
130 | "dev": true
131 | },
132 | "duplexify": {
133 | "version": "3.5.0",
134 | "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.5.0.tgz",
135 | "integrity": "sha1-GqdzAC4VeEV+nZ1KULDMquvL1gQ=",
136 | "dev": true
137 | },
138 | "end-of-stream": {
139 | "version": "1.0.0",
140 | "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.0.0.tgz",
141 | "integrity": "sha1-1FlucCc0qT5A6a+GQxnqvZn/Lw4=",
142 | "dev": true
143 | },
144 | "es6-promise": {
145 | "version": "3.3.1",
146 | "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-3.3.1.tgz",
147 | "integrity": "sha1-oIzd6EzNvzTQJ6FFG8kdS80ophM=",
148 | "dev": true
149 | },
150 | "escape-string-regexp": {
151 | "version": "1.0.5",
152 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
153 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
154 | "dev": true
155 | },
156 | "event-stream": {
157 | "version": "3.3.4",
158 | "resolved": "https://registry.npmjs.org/event-stream/-/event-stream-3.3.4.tgz",
159 | "integrity": "sha1-SrTJoPWlTbkzi0w02Gv86PSzVXE=",
160 | "dev": true
161 | },
162 | "expand-brackets": {
163 | "version": "0.1.5",
164 | "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz",
165 | "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=",
166 | "dev": true
167 | },
168 | "expand-range": {
169 | "version": "1.8.2",
170 | "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz",
171 | "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=",
172 | "dev": true
173 | },
174 | "extglob": {
175 | "version": "0.3.2",
176 | "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz",
177 | "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=",
178 | "dev": true
179 | },
180 | "filename-regex": {
181 | "version": "2.0.1",
182 | "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz",
183 | "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=",
184 | "dev": true
185 | },
186 | "fill-range": {
187 | "version": "2.2.3",
188 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.3.tgz",
189 | "integrity": "sha1-ULd9/X5Gm8dJJHCWNpn+eoSFpyM=",
190 | "dev": true
191 | },
192 | "for-in": {
193 | "version": "1.0.2",
194 | "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
195 | "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=",
196 | "dev": true
197 | },
198 | "for-own": {
199 | "version": "0.1.5",
200 | "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz",
201 | "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=",
202 | "dev": true
203 | },
204 | "from": {
205 | "version": "0.1.7",
206 | "resolved": "https://registry.npmjs.org/from/-/from-0.1.7.tgz",
207 | "integrity": "sha1-g8YK/Fi5xWmXAH7Rp2izqzA6RP4=",
208 | "dev": true
209 | },
210 | "fsevents": {
211 | "version": "1.1.1",
212 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.1.1.tgz",
213 | "integrity": "sha1-8Z/Sj0Pur3YWgOUZogPE0LPTGv8=",
214 | "dev": true,
215 | "optional": true,
216 | "dependencies": {
217 | "abbrev": {
218 | "version": "1.1.0",
219 | "bundled": true,
220 | "dev": true,
221 | "optional": true
222 | },
223 | "ansi-regex": {
224 | "version": "2.1.1",
225 | "bundled": true,
226 | "dev": true
227 | },
228 | "ansi-styles": {
229 | "version": "2.2.1",
230 | "bundled": true,
231 | "dev": true,
232 | "optional": true
233 | },
234 | "aproba": {
235 | "version": "1.1.1",
236 | "bundled": true,
237 | "dev": true,
238 | "optional": true
239 | },
240 | "are-we-there-yet": {
241 | "version": "1.1.2",
242 | "bundled": true,
243 | "dev": true,
244 | "optional": true
245 | },
246 | "asn1": {
247 | "version": "0.2.3",
248 | "bundled": true,
249 | "dev": true,
250 | "optional": true
251 | },
252 | "assert-plus": {
253 | "version": "0.2.0",
254 | "bundled": true,
255 | "dev": true,
256 | "optional": true
257 | },
258 | "asynckit": {
259 | "version": "0.4.0",
260 | "bundled": true,
261 | "dev": true,
262 | "optional": true
263 | },
264 | "aws-sign2": {
265 | "version": "0.6.0",
266 | "bundled": true,
267 | "dev": true,
268 | "optional": true
269 | },
270 | "aws4": {
271 | "version": "1.6.0",
272 | "bundled": true,
273 | "dev": true,
274 | "optional": true
275 | },
276 | "balanced-match": {
277 | "version": "0.4.2",
278 | "bundled": true,
279 | "dev": true
280 | },
281 | "bcrypt-pbkdf": {
282 | "version": "1.0.1",
283 | "bundled": true,
284 | "dev": true,
285 | "optional": true
286 | },
287 | "block-stream": {
288 | "version": "0.0.9",
289 | "bundled": true,
290 | "dev": true
291 | },
292 | "boom": {
293 | "version": "2.10.1",
294 | "bundled": true,
295 | "dev": true
296 | },
297 | "brace-expansion": {
298 | "version": "1.1.6",
299 | "bundled": true,
300 | "dev": true
301 | },
302 | "buffer-shims": {
303 | "version": "1.0.0",
304 | "bundled": true,
305 | "dev": true
306 | },
307 | "caseless": {
308 | "version": "0.11.0",
309 | "bundled": true,
310 | "dev": true,
311 | "optional": true
312 | },
313 | "chalk": {
314 | "version": "1.1.3",
315 | "bundled": true,
316 | "dev": true,
317 | "optional": true
318 | },
319 | "code-point-at": {
320 | "version": "1.1.0",
321 | "bundled": true,
322 | "dev": true
323 | },
324 | "combined-stream": {
325 | "version": "1.0.5",
326 | "bundled": true,
327 | "dev": true
328 | },
329 | "commander": {
330 | "version": "2.9.0",
331 | "bundled": true,
332 | "dev": true,
333 | "optional": true
334 | },
335 | "concat-map": {
336 | "version": "0.0.1",
337 | "bundled": true,
338 | "dev": true
339 | },
340 | "console-control-strings": {
341 | "version": "1.1.0",
342 | "bundled": true,
343 | "dev": true
344 | },
345 | "core-util-is": {
346 | "version": "1.0.2",
347 | "bundled": true,
348 | "dev": true
349 | },
350 | "cryptiles": {
351 | "version": "2.0.5",
352 | "bundled": true,
353 | "dev": true,
354 | "optional": true
355 | },
356 | "dashdash": {
357 | "version": "1.14.1",
358 | "bundled": true,
359 | "dev": true,
360 | "optional": true,
361 | "dependencies": {
362 | "assert-plus": {
363 | "version": "1.0.0",
364 | "bundled": true,
365 | "dev": true,
366 | "optional": true
367 | }
368 | }
369 | },
370 | "debug": {
371 | "version": "2.2.0",
372 | "bundled": true,
373 | "dev": true,
374 | "optional": true
375 | },
376 | "deep-extend": {
377 | "version": "0.4.1",
378 | "bundled": true,
379 | "dev": true,
380 | "optional": true
381 | },
382 | "delayed-stream": {
383 | "version": "1.0.0",
384 | "bundled": true,
385 | "dev": true
386 | },
387 | "delegates": {
388 | "version": "1.0.0",
389 | "bundled": true,
390 | "dev": true,
391 | "optional": true
392 | },
393 | "ecc-jsbn": {
394 | "version": "0.1.1",
395 | "bundled": true,
396 | "dev": true,
397 | "optional": true
398 | },
399 | "escape-string-regexp": {
400 | "version": "1.0.5",
401 | "bundled": true,
402 | "dev": true,
403 | "optional": true
404 | },
405 | "extend": {
406 | "version": "3.0.0",
407 | "bundled": true,
408 | "dev": true,
409 | "optional": true
410 | },
411 | "extsprintf": {
412 | "version": "1.0.2",
413 | "bundled": true,
414 | "dev": true
415 | },
416 | "forever-agent": {
417 | "version": "0.6.1",
418 | "bundled": true,
419 | "dev": true,
420 | "optional": true
421 | },
422 | "form-data": {
423 | "version": "2.1.2",
424 | "bundled": true,
425 | "dev": true,
426 | "optional": true
427 | },
428 | "fs.realpath": {
429 | "version": "1.0.0",
430 | "bundled": true,
431 | "dev": true
432 | },
433 | "fstream": {
434 | "version": "1.0.10",
435 | "bundled": true,
436 | "dev": true
437 | },
438 | "fstream-ignore": {
439 | "version": "1.0.5",
440 | "bundled": true,
441 | "dev": true,
442 | "optional": true
443 | },
444 | "gauge": {
445 | "version": "2.7.3",
446 | "bundled": true,
447 | "dev": true,
448 | "optional": true
449 | },
450 | "generate-function": {
451 | "version": "2.0.0",
452 | "bundled": true,
453 | "dev": true,
454 | "optional": true
455 | },
456 | "generate-object-property": {
457 | "version": "1.2.0",
458 | "bundled": true,
459 | "dev": true,
460 | "optional": true
461 | },
462 | "getpass": {
463 | "version": "0.1.6",
464 | "bundled": true,
465 | "dev": true,
466 | "optional": true,
467 | "dependencies": {
468 | "assert-plus": {
469 | "version": "1.0.0",
470 | "bundled": true,
471 | "dev": true,
472 | "optional": true
473 | }
474 | }
475 | },
476 | "glob": {
477 | "version": "7.1.1",
478 | "bundled": true,
479 | "dev": true
480 | },
481 | "graceful-fs": {
482 | "version": "4.1.11",
483 | "bundled": true,
484 | "dev": true
485 | },
486 | "graceful-readlink": {
487 | "version": "1.0.1",
488 | "bundled": true,
489 | "dev": true,
490 | "optional": true
491 | },
492 | "har-validator": {
493 | "version": "2.0.6",
494 | "bundled": true,
495 | "dev": true,
496 | "optional": true
497 | },
498 | "has-ansi": {
499 | "version": "2.0.0",
500 | "bundled": true,
501 | "dev": true,
502 | "optional": true
503 | },
504 | "has-unicode": {
505 | "version": "2.0.1",
506 | "bundled": true,
507 | "dev": true,
508 | "optional": true
509 | },
510 | "hawk": {
511 | "version": "3.1.3",
512 | "bundled": true,
513 | "dev": true,
514 | "optional": true
515 | },
516 | "hoek": {
517 | "version": "2.16.3",
518 | "bundled": true,
519 | "dev": true
520 | },
521 | "http-signature": {
522 | "version": "1.1.1",
523 | "bundled": true,
524 | "dev": true,
525 | "optional": true
526 | },
527 | "inflight": {
528 | "version": "1.0.6",
529 | "bundled": true,
530 | "dev": true
531 | },
532 | "inherits": {
533 | "version": "2.0.3",
534 | "bundled": true,
535 | "dev": true
536 | },
537 | "ini": {
538 | "version": "1.3.4",
539 | "bundled": true,
540 | "dev": true,
541 | "optional": true
542 | },
543 | "is-fullwidth-code-point": {
544 | "version": "1.0.0",
545 | "bundled": true,
546 | "dev": true
547 | },
548 | "is-my-json-valid": {
549 | "version": "2.15.0",
550 | "bundled": true,
551 | "dev": true,
552 | "optional": true
553 | },
554 | "is-property": {
555 | "version": "1.0.2",
556 | "bundled": true,
557 | "dev": true,
558 | "optional": true
559 | },
560 | "is-typedarray": {
561 | "version": "1.0.0",
562 | "bundled": true,
563 | "dev": true,
564 | "optional": true
565 | },
566 | "isarray": {
567 | "version": "1.0.0",
568 | "bundled": true,
569 | "dev": true
570 | },
571 | "isstream": {
572 | "version": "0.1.2",
573 | "bundled": true,
574 | "dev": true,
575 | "optional": true
576 | },
577 | "jodid25519": {
578 | "version": "1.0.2",
579 | "bundled": true,
580 | "dev": true,
581 | "optional": true
582 | },
583 | "jsbn": {
584 | "version": "0.1.1",
585 | "bundled": true,
586 | "dev": true,
587 | "optional": true
588 | },
589 | "json-schema": {
590 | "version": "0.2.3",
591 | "bundled": true,
592 | "dev": true,
593 | "optional": true
594 | },
595 | "json-stringify-safe": {
596 | "version": "5.0.1",
597 | "bundled": true,
598 | "dev": true,
599 | "optional": true
600 | },
601 | "jsonpointer": {
602 | "version": "4.0.1",
603 | "bundled": true,
604 | "dev": true,
605 | "optional": true
606 | },
607 | "jsprim": {
608 | "version": "1.3.1",
609 | "bundled": true,
610 | "dev": true,
611 | "optional": true
612 | },
613 | "mime-db": {
614 | "version": "1.26.0",
615 | "bundled": true,
616 | "dev": true
617 | },
618 | "mime-types": {
619 | "version": "2.1.14",
620 | "bundled": true,
621 | "dev": true
622 | },
623 | "minimatch": {
624 | "version": "3.0.3",
625 | "bundled": true,
626 | "dev": true
627 | },
628 | "minimist": {
629 | "version": "0.0.8",
630 | "bundled": true,
631 | "dev": true
632 | },
633 | "mkdirp": {
634 | "version": "0.5.1",
635 | "bundled": true,
636 | "dev": true
637 | },
638 | "ms": {
639 | "version": "0.7.1",
640 | "bundled": true,
641 | "dev": true,
642 | "optional": true
643 | },
644 | "node-pre-gyp": {
645 | "version": "0.6.33",
646 | "bundled": true,
647 | "dev": true,
648 | "optional": true
649 | },
650 | "nopt": {
651 | "version": "3.0.6",
652 | "bundled": true,
653 | "dev": true,
654 | "optional": true
655 | },
656 | "npmlog": {
657 | "version": "4.0.2",
658 | "bundled": true,
659 | "dev": true,
660 | "optional": true
661 | },
662 | "number-is-nan": {
663 | "version": "1.0.1",
664 | "bundled": true,
665 | "dev": true
666 | },
667 | "oauth-sign": {
668 | "version": "0.8.2",
669 | "bundled": true,
670 | "dev": true,
671 | "optional": true
672 | },
673 | "object-assign": {
674 | "version": "4.1.1",
675 | "bundled": true,
676 | "dev": true,
677 | "optional": true
678 | },
679 | "once": {
680 | "version": "1.4.0",
681 | "bundled": true,
682 | "dev": true
683 | },
684 | "path-is-absolute": {
685 | "version": "1.0.1",
686 | "bundled": true,
687 | "dev": true
688 | },
689 | "pinkie": {
690 | "version": "2.0.4",
691 | "bundled": true,
692 | "dev": true,
693 | "optional": true
694 | },
695 | "pinkie-promise": {
696 | "version": "2.0.1",
697 | "bundled": true,
698 | "dev": true,
699 | "optional": true
700 | },
701 | "process-nextick-args": {
702 | "version": "1.0.7",
703 | "bundled": true,
704 | "dev": true
705 | },
706 | "punycode": {
707 | "version": "1.4.1",
708 | "bundled": true,
709 | "dev": true,
710 | "optional": true
711 | },
712 | "qs": {
713 | "version": "6.3.1",
714 | "bundled": true,
715 | "dev": true,
716 | "optional": true
717 | },
718 | "rc": {
719 | "version": "1.1.7",
720 | "bundled": true,
721 | "dev": true,
722 | "optional": true,
723 | "dependencies": {
724 | "minimist": {
725 | "version": "1.2.0",
726 | "bundled": true,
727 | "dev": true,
728 | "optional": true
729 | }
730 | }
731 | },
732 | "readable-stream": {
733 | "version": "2.2.2",
734 | "bundled": true,
735 | "dev": true,
736 | "optional": true
737 | },
738 | "request": {
739 | "version": "2.79.0",
740 | "bundled": true,
741 | "dev": true,
742 | "optional": true
743 | },
744 | "rimraf": {
745 | "version": "2.5.4",
746 | "bundled": true,
747 | "dev": true
748 | },
749 | "semver": {
750 | "version": "5.3.0",
751 | "bundled": true,
752 | "dev": true,
753 | "optional": true
754 | },
755 | "set-blocking": {
756 | "version": "2.0.0",
757 | "bundled": true,
758 | "dev": true,
759 | "optional": true
760 | },
761 | "signal-exit": {
762 | "version": "3.0.2",
763 | "bundled": true,
764 | "dev": true,
765 | "optional": true
766 | },
767 | "sntp": {
768 | "version": "1.0.9",
769 | "bundled": true,
770 | "dev": true,
771 | "optional": true
772 | },
773 | "sshpk": {
774 | "version": "1.10.2",
775 | "bundled": true,
776 | "dev": true,
777 | "optional": true,
778 | "dependencies": {
779 | "assert-plus": {
780 | "version": "1.0.0",
781 | "bundled": true,
782 | "dev": true,
783 | "optional": true
784 | }
785 | }
786 | },
787 | "string_decoder": {
788 | "version": "0.10.31",
789 | "bundled": true,
790 | "dev": true
791 | },
792 | "string-width": {
793 | "version": "1.0.2",
794 | "bundled": true,
795 | "dev": true
796 | },
797 | "stringstream": {
798 | "version": "0.0.5",
799 | "bundled": true,
800 | "dev": true,
801 | "optional": true
802 | },
803 | "strip-ansi": {
804 | "version": "3.0.1",
805 | "bundled": true,
806 | "dev": true
807 | },
808 | "strip-json-comments": {
809 | "version": "2.0.1",
810 | "bundled": true,
811 | "dev": true,
812 | "optional": true
813 | },
814 | "supports-color": {
815 | "version": "2.0.0",
816 | "bundled": true,
817 | "dev": true,
818 | "optional": true
819 | },
820 | "tar": {
821 | "version": "2.2.1",
822 | "bundled": true,
823 | "dev": true
824 | },
825 | "tar-pack": {
826 | "version": "3.3.0",
827 | "bundled": true,
828 | "dev": true,
829 | "optional": true,
830 | "dependencies": {
831 | "once": {
832 | "version": "1.3.3",
833 | "bundled": true,
834 | "dev": true,
835 | "optional": true
836 | },
837 | "readable-stream": {
838 | "version": "2.1.5",
839 | "bundled": true,
840 | "dev": true,
841 | "optional": true
842 | }
843 | }
844 | },
845 | "tough-cookie": {
846 | "version": "2.3.2",
847 | "bundled": true,
848 | "dev": true,
849 | "optional": true
850 | },
851 | "tunnel-agent": {
852 | "version": "0.4.3",
853 | "bundled": true,
854 | "dev": true,
855 | "optional": true
856 | },
857 | "tweetnacl": {
858 | "version": "0.14.5",
859 | "bundled": true,
860 | "dev": true,
861 | "optional": true
862 | },
863 | "uid-number": {
864 | "version": "0.0.6",
865 | "bundled": true,
866 | "dev": true,
867 | "optional": true
868 | },
869 | "util-deprecate": {
870 | "version": "1.0.2",
871 | "bundled": true,
872 | "dev": true
873 | },
874 | "uuid": {
875 | "version": "3.0.1",
876 | "bundled": true,
877 | "dev": true,
878 | "optional": true
879 | },
880 | "verror": {
881 | "version": "1.3.6",
882 | "bundled": true,
883 | "dev": true,
884 | "optional": true
885 | },
886 | "wide-align": {
887 | "version": "1.1.0",
888 | "bundled": true,
889 | "dev": true,
890 | "optional": true
891 | },
892 | "wrappy": {
893 | "version": "1.0.2",
894 | "bundled": true,
895 | "dev": true
896 | },
897 | "xtend": {
898 | "version": "4.0.1",
899 | "bundled": true,
900 | "dev": true,
901 | "optional": true
902 | }
903 | }
904 | },
905 | "glob-base": {
906 | "version": "0.3.0",
907 | "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz",
908 | "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=",
909 | "dev": true
910 | },
911 | "glob-parent": {
912 | "version": "2.0.0",
913 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz",
914 | "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=",
915 | "dev": true
916 | },
917 | "got": {
918 | "version": "3.3.1",
919 | "resolved": "https://registry.npmjs.org/got/-/got-3.3.1.tgz",
920 | "integrity": "sha1-5dDtSvVfw+701WAHdp2YGSvLLso=",
921 | "dev": true,
922 | "dependencies": {
923 | "object-assign": {
924 | "version": "3.0.0",
925 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-3.0.0.tgz",
926 | "integrity": "sha1-m+3VygiXlJvKR+f/QIBi1Un1h/I=",
927 | "dev": true
928 | }
929 | }
930 | },
931 | "graceful-fs": {
932 | "version": "4.1.11",
933 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz",
934 | "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=",
935 | "dev": true
936 | },
937 | "has-ansi": {
938 | "version": "2.0.0",
939 | "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
940 | "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
941 | "dev": true
942 | },
943 | "ignore-by-default": {
944 | "version": "1.0.1",
945 | "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz",
946 | "integrity": "sha1-SMptcvbGo68Aqa1K5odr44ieKwk=",
947 | "dev": true
948 | },
949 | "imurmurhash": {
950 | "version": "0.1.4",
951 | "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
952 | "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=",
953 | "dev": true
954 | },
955 | "infinity-agent": {
956 | "version": "2.0.3",
957 | "resolved": "https://registry.npmjs.org/infinity-agent/-/infinity-agent-2.0.3.tgz",
958 | "integrity": "sha1-ReDi/3qesDCyfWK3SzdEt6esQhY=",
959 | "dev": true
960 | },
961 | "inherits": {
962 | "version": "2.0.3",
963 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
964 | "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
965 | "dev": true
966 | },
967 | "ini": {
968 | "version": "1.3.4",
969 | "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.4.tgz",
970 | "integrity": "sha1-BTfLedr1m1mhpRff9wbIbsA5Fi4=",
971 | "dev": true
972 | },
973 | "is-binary-path": {
974 | "version": "1.0.1",
975 | "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz",
976 | "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=",
977 | "dev": true
978 | },
979 | "is-buffer": {
980 | "version": "1.1.5",
981 | "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.5.tgz",
982 | "integrity": "sha1-Hzsm72E7IUuIy8ojzGwB2Hlh7sw=",
983 | "dev": true
984 | },
985 | "is-dotfile": {
986 | "version": "1.0.3",
987 | "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz",
988 | "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=",
989 | "dev": true
990 | },
991 | "is-equal-shallow": {
992 | "version": "0.1.3",
993 | "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz",
994 | "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=",
995 | "dev": true
996 | },
997 | "is-extendable": {
998 | "version": "0.1.1",
999 | "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
1000 | "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
1001 | "dev": true
1002 | },
1003 | "is-extglob": {
1004 | "version": "1.0.0",
1005 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz",
1006 | "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=",
1007 | "dev": true
1008 | },
1009 | "is-finite": {
1010 | "version": "1.0.2",
1011 | "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz",
1012 | "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=",
1013 | "dev": true
1014 | },
1015 | "is-glob": {
1016 | "version": "2.0.1",
1017 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz",
1018 | "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=",
1019 | "dev": true
1020 | },
1021 | "is-npm": {
1022 | "version": "1.0.0",
1023 | "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-1.0.0.tgz",
1024 | "integrity": "sha1-8vtjpl5JBbQGyGBydloaTceTufQ=",
1025 | "dev": true
1026 | },
1027 | "is-number": {
1028 | "version": "2.1.0",
1029 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz",
1030 | "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=",
1031 | "dev": true
1032 | },
1033 | "is-posix-bracket": {
1034 | "version": "0.1.1",
1035 | "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz",
1036 | "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=",
1037 | "dev": true
1038 | },
1039 | "is-primitive": {
1040 | "version": "2.0.0",
1041 | "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz",
1042 | "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=",
1043 | "dev": true
1044 | },
1045 | "is-redirect": {
1046 | "version": "1.0.0",
1047 | "resolved": "https://registry.npmjs.org/is-redirect/-/is-redirect-1.0.0.tgz",
1048 | "integrity": "sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ=",
1049 | "dev": true
1050 | },
1051 | "is-stream": {
1052 | "version": "1.1.0",
1053 | "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
1054 | "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=",
1055 | "dev": true
1056 | },
1057 | "isarray": {
1058 | "version": "1.0.0",
1059 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
1060 | "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
1061 | "dev": true
1062 | },
1063 | "isobject": {
1064 | "version": "2.1.0",
1065 | "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
1066 | "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=",
1067 | "dev": true
1068 | },
1069 | "kind-of": {
1070 | "version": "3.2.2",
1071 | "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
1072 | "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
1073 | "dev": true
1074 | },
1075 | "latest-version": {
1076 | "version": "1.0.1",
1077 | "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-1.0.1.tgz",
1078 | "integrity": "sha1-cs/Ebj6NG+ZR4eu1Tqn26pbzdLs=",
1079 | "dev": true
1080 | },
1081 | "lodash._baseassign": {
1082 | "version": "3.2.0",
1083 | "resolved": "https://registry.npmjs.org/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz",
1084 | "integrity": "sha1-jDigmVAPIVrQnlnxci/QxSv+Ck4=",
1085 | "dev": true
1086 | },
1087 | "lodash._basecopy": {
1088 | "version": "3.0.1",
1089 | "resolved": "https://registry.npmjs.org/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz",
1090 | "integrity": "sha1-jaDmqHbPNEwK2KVIghEd08XHyjY=",
1091 | "dev": true
1092 | },
1093 | "lodash._bindcallback": {
1094 | "version": "3.0.1",
1095 | "resolved": "https://registry.npmjs.org/lodash._bindcallback/-/lodash._bindcallback-3.0.1.tgz",
1096 | "integrity": "sha1-5THCdkTPi1epnhftlbNcdIeJOS4=",
1097 | "dev": true
1098 | },
1099 | "lodash._createassigner": {
1100 | "version": "3.1.1",
1101 | "resolved": "https://registry.npmjs.org/lodash._createassigner/-/lodash._createassigner-3.1.1.tgz",
1102 | "integrity": "sha1-g4pbri/aymOsIt7o4Z+k5taXCxE=",
1103 | "dev": true
1104 | },
1105 | "lodash._getnative": {
1106 | "version": "3.9.1",
1107 | "resolved": "https://registry.npmjs.org/lodash._getnative/-/lodash._getnative-3.9.1.tgz",
1108 | "integrity": "sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U=",
1109 | "dev": true
1110 | },
1111 | "lodash._isiterateecall": {
1112 | "version": "3.0.9",
1113 | "resolved": "https://registry.npmjs.org/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz",
1114 | "integrity": "sha1-UgOte6Ql+uhCRg5pbbnPPmqsBXw=",
1115 | "dev": true
1116 | },
1117 | "lodash.assign": {
1118 | "version": "3.2.0",
1119 | "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-3.2.0.tgz",
1120 | "integrity": "sha1-POnwI0tLIiPilrj6CsH+6OvKZPo=",
1121 | "dev": true
1122 | },
1123 | "lodash.defaults": {
1124 | "version": "3.1.2",
1125 | "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-3.1.2.tgz",
1126 | "integrity": "sha1-xzCLGNv4vJNy1wGnNJPGEZK9Liw=",
1127 | "dev": true
1128 | },
1129 | "lodash.isarguments": {
1130 | "version": "3.1.0",
1131 | "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz",
1132 | "integrity": "sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo=",
1133 | "dev": true
1134 | },
1135 | "lodash.isarray": {
1136 | "version": "3.0.4",
1137 | "resolved": "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-3.0.4.tgz",
1138 | "integrity": "sha1-eeTriMNqgSKvhvhEqpvNhRtfu1U=",
1139 | "dev": true
1140 | },
1141 | "lodash.keys": {
1142 | "version": "3.1.2",
1143 | "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz",
1144 | "integrity": "sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo=",
1145 | "dev": true
1146 | },
1147 | "lodash.restparam": {
1148 | "version": "3.6.1",
1149 | "resolved": "https://registry.npmjs.org/lodash.restparam/-/lodash.restparam-3.6.1.tgz",
1150 | "integrity": "sha1-k2pOMJ7zMKdkXtQUWYbIWuWyCAU=",
1151 | "dev": true
1152 | },
1153 | "lowercase-keys": {
1154 | "version": "1.0.0",
1155 | "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.0.tgz",
1156 | "integrity": "sha1-TjNms55/VFfjXxMkvfb4jQv8cwY=",
1157 | "dev": true
1158 | },
1159 | "map-stream": {
1160 | "version": "0.1.0",
1161 | "resolved": "https://registry.npmjs.org/map-stream/-/map-stream-0.1.0.tgz",
1162 | "integrity": "sha1-5WqpTEyAVaFkBKBnS3jyFffI4ZQ=",
1163 | "dev": true
1164 | },
1165 | "micromatch": {
1166 | "version": "2.3.11",
1167 | "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz",
1168 | "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=",
1169 | "dev": true
1170 | },
1171 | "minimatch": {
1172 | "version": "3.0.4",
1173 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
1174 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
1175 | "dev": true
1176 | },
1177 | "minimist": {
1178 | "version": "0.0.8",
1179 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
1180 | "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=",
1181 | "dev": true
1182 | },
1183 | "mkdirp": {
1184 | "version": "0.5.1",
1185 | "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
1186 | "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
1187 | "dev": true
1188 | },
1189 | "ms": {
1190 | "version": "2.0.0",
1191 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
1192 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
1193 | "dev": true
1194 | },
1195 | "nan": {
1196 | "version": "2.6.2",
1197 | "resolved": "https://registry.npmjs.org/nan/-/nan-2.6.2.tgz",
1198 | "integrity": "sha1-5P805slf37WuzAjeZZb0NgWn20U=",
1199 | "dev": true,
1200 | "optional": true
1201 | },
1202 | "nested-error-stacks": {
1203 | "version": "1.0.2",
1204 | "resolved": "https://registry.npmjs.org/nested-error-stacks/-/nested-error-stacks-1.0.2.tgz",
1205 | "integrity": "sha1-GfYZWRUZ8JZ2mlupqG5u7sgjw88=",
1206 | "dev": true
1207 | },
1208 | "nodemon": {
1209 | "version": "1.11.0",
1210 | "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-1.11.0.tgz",
1211 | "integrity": "sha1-ImxWK9KnsT09dRi0mtSCijYj0Gw=",
1212 | "dev": true
1213 | },
1214 | "nopt": {
1215 | "version": "1.0.10",
1216 | "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz",
1217 | "integrity": "sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=",
1218 | "dev": true
1219 | },
1220 | "normalize-path": {
1221 | "version": "2.1.1",
1222 | "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz",
1223 | "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=",
1224 | "dev": true
1225 | },
1226 | "number-is-nan": {
1227 | "version": "1.0.1",
1228 | "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
1229 | "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=",
1230 | "dev": true
1231 | },
1232 | "object-assign": {
1233 | "version": "4.1.1",
1234 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
1235 | "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
1236 | "dev": true
1237 | },
1238 | "object.omit": {
1239 | "version": "2.0.1",
1240 | "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz",
1241 | "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=",
1242 | "dev": true
1243 | },
1244 | "once": {
1245 | "version": "1.3.3",
1246 | "resolved": "https://registry.npmjs.org/once/-/once-1.3.3.tgz",
1247 | "integrity": "sha1-suJhVXzkwxTsgwTz+oJmPkKXyiA=",
1248 | "dev": true
1249 | },
1250 | "os-homedir": {
1251 | "version": "1.0.2",
1252 | "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz",
1253 | "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=",
1254 | "dev": true
1255 | },
1256 | "os-tmpdir": {
1257 | "version": "1.0.2",
1258 | "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
1259 | "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=",
1260 | "dev": true
1261 | },
1262 | "osenv": {
1263 | "version": "0.1.4",
1264 | "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.4.tgz",
1265 | "integrity": "sha1-Qv5tWVPfBsgGS+bxdsPQWqqjRkQ=",
1266 | "dev": true
1267 | },
1268 | "package-json": {
1269 | "version": "1.2.0",
1270 | "resolved": "https://registry.npmjs.org/package-json/-/package-json-1.2.0.tgz",
1271 | "integrity": "sha1-yOysCUInzfdqMWh07QXifMk5oOA=",
1272 | "dev": true
1273 | },
1274 | "parse-glob": {
1275 | "version": "3.0.4",
1276 | "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz",
1277 | "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=",
1278 | "dev": true
1279 | },
1280 | "path-is-absolute": {
1281 | "version": "1.0.1",
1282 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
1283 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
1284 | "dev": true
1285 | },
1286 | "pause-stream": {
1287 | "version": "0.0.11",
1288 | "resolved": "https://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz",
1289 | "integrity": "sha1-/lo0sMvOErWqaitAPuLnO2AvFEU=",
1290 | "dev": true
1291 | },
1292 | "pinkie": {
1293 | "version": "2.0.4",
1294 | "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz",
1295 | "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=",
1296 | "dev": true
1297 | },
1298 | "pinkie-promise": {
1299 | "version": "2.0.1",
1300 | "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz",
1301 | "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=",
1302 | "dev": true
1303 | },
1304 | "prepend-http": {
1305 | "version": "1.0.4",
1306 | "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz",
1307 | "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=",
1308 | "dev": true
1309 | },
1310 | "preserve": {
1311 | "version": "0.2.0",
1312 | "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz",
1313 | "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=",
1314 | "dev": true
1315 | },
1316 | "process-nextick-args": {
1317 | "version": "1.0.7",
1318 | "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz",
1319 | "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=",
1320 | "dev": true
1321 | },
1322 | "ps-tree": {
1323 | "version": "1.1.0",
1324 | "resolved": "https://registry.npmjs.org/ps-tree/-/ps-tree-1.1.0.tgz",
1325 | "integrity": "sha1-tCGyQUDWID8e08dplrRCewjowBQ=",
1326 | "dev": true
1327 | },
1328 | "randomatic": {
1329 | "version": "1.1.6",
1330 | "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-1.1.6.tgz",
1331 | "integrity": "sha1-EQ3Kv/OX6dz/fAeJzMCkmt8exbs=",
1332 | "dev": true
1333 | },
1334 | "rc": {
1335 | "version": "1.2.1",
1336 | "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.1.tgz",
1337 | "integrity": "sha1-LgPo5C7kULjLPc5lvhv4l04d/ZU=",
1338 | "dev": true,
1339 | "dependencies": {
1340 | "minimist": {
1341 | "version": "1.2.0",
1342 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
1343 | "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
1344 | "dev": true
1345 | }
1346 | }
1347 | },
1348 | "read-all-stream": {
1349 | "version": "3.1.0",
1350 | "resolved": "https://registry.npmjs.org/read-all-stream/-/read-all-stream-3.1.0.tgz",
1351 | "integrity": "sha1-NcPhd/IHjveJ7kv6+kNzB06u9Po=",
1352 | "dev": true
1353 | },
1354 | "readable-stream": {
1355 | "version": "2.2.10",
1356 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.10.tgz",
1357 | "integrity": "sha512-HQEnnoV404e0EtwB9yNiuk2tJ+egeVC8Y9QBAxzDg8DBJt4BzRp+yQuIb/t3FIWkSTmIi+sgx7yVv/ZM0GNoqw==",
1358 | "dev": true
1359 | },
1360 | "readdirp": {
1361 | "version": "2.1.0",
1362 | "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.1.0.tgz",
1363 | "integrity": "sha1-TtCtBg3zBzMAxIRANz9y0cxkLXg=",
1364 | "dev": true
1365 | },
1366 | "regex-cache": {
1367 | "version": "0.4.3",
1368 | "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.3.tgz",
1369 | "integrity": "sha1-mxpsNdTQ3871cRrmUejp09cRQUU=",
1370 | "dev": true
1371 | },
1372 | "registry-url": {
1373 | "version": "3.1.0",
1374 | "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-3.1.0.tgz",
1375 | "integrity": "sha1-PU74cPc93h138M+aOBQyRE4XSUI=",
1376 | "dev": true
1377 | },
1378 | "remove-trailing-separator": {
1379 | "version": "1.0.1",
1380 | "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.0.1.tgz",
1381 | "integrity": "sha1-YV67lq9VlVLUv0BXyENtSGq2PMQ=",
1382 | "dev": true
1383 | },
1384 | "repeat-element": {
1385 | "version": "1.1.2",
1386 | "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz",
1387 | "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=",
1388 | "dev": true
1389 | },
1390 | "repeat-string": {
1391 | "version": "1.6.1",
1392 | "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
1393 | "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=",
1394 | "dev": true
1395 | },
1396 | "repeating": {
1397 | "version": "1.1.3",
1398 | "resolved": "https://registry.npmjs.org/repeating/-/repeating-1.1.3.tgz",
1399 | "integrity": "sha1-PUEUIYh3U3SU+X93+Xhfq4EPpKw=",
1400 | "dev": true
1401 | },
1402 | "safe-buffer": {
1403 | "version": "5.0.1",
1404 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.0.1.tgz",
1405 | "integrity": "sha1-0mPKVGls2KMGtcplUekt5XkY++c=",
1406 | "dev": true
1407 | },
1408 | "semver": {
1409 | "version": "5.3.0",
1410 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz",
1411 | "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=",
1412 | "dev": true
1413 | },
1414 | "semver-diff": {
1415 | "version": "2.1.0",
1416 | "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-2.1.0.tgz",
1417 | "integrity": "sha1-S7uEN8jTfksM8aaP1ybsbWRdbTY=",
1418 | "dev": true
1419 | },
1420 | "set-immediate-shim": {
1421 | "version": "1.0.1",
1422 | "resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz",
1423 | "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=",
1424 | "dev": true
1425 | },
1426 | "slide": {
1427 | "version": "1.1.6",
1428 | "resolved": "https://registry.npmjs.org/slide/-/slide-1.1.6.tgz",
1429 | "integrity": "sha1-VusCfWW00tzmyy4tMsTUr8nh1wc=",
1430 | "dev": true
1431 | },
1432 | "split": {
1433 | "version": "0.3.3",
1434 | "resolved": "https://registry.npmjs.org/split/-/split-0.3.3.tgz",
1435 | "integrity": "sha1-zQ7qXmOiEd//frDwkcQTPi0N0o8=",
1436 | "dev": true
1437 | },
1438 | "stream-combiner": {
1439 | "version": "0.0.4",
1440 | "resolved": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.0.4.tgz",
1441 | "integrity": "sha1-TV5DPBhSYd3mI8o/RMWGvPXErRQ=",
1442 | "dev": true
1443 | },
1444 | "stream-shift": {
1445 | "version": "1.0.0",
1446 | "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.0.tgz",
1447 | "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=",
1448 | "dev": true
1449 | },
1450 | "string_decoder": {
1451 | "version": "1.0.1",
1452 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.1.tgz",
1453 | "integrity": "sha1-YuIA8DmVWmgQ2N8KM//A8BNmLZg=",
1454 | "dev": true
1455 | },
1456 | "string-length": {
1457 | "version": "1.0.1",
1458 | "resolved": "https://registry.npmjs.org/string-length/-/string-length-1.0.1.tgz",
1459 | "integrity": "sha1-VpcPscOFWOnnC3KL894mmsRa36w=",
1460 | "dev": true
1461 | },
1462 | "strip-ansi": {
1463 | "version": "3.0.1",
1464 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
1465 | "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
1466 | "dev": true
1467 | },
1468 | "strip-json-comments": {
1469 | "version": "2.0.1",
1470 | "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
1471 | "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=",
1472 | "dev": true
1473 | },
1474 | "supports-color": {
1475 | "version": "2.0.0",
1476 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
1477 | "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
1478 | "dev": true
1479 | },
1480 | "through": {
1481 | "version": "2.3.8",
1482 | "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
1483 | "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=",
1484 | "dev": true
1485 | },
1486 | "timed-out": {
1487 | "version": "2.0.0",
1488 | "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-2.0.0.tgz",
1489 | "integrity": "sha1-84sK6B03R9YoAB9B2vxlKs5nHAo=",
1490 | "dev": true
1491 | },
1492 | "touch": {
1493 | "version": "1.0.0",
1494 | "resolved": "https://registry.npmjs.org/touch/-/touch-1.0.0.tgz",
1495 | "integrity": "sha1-RJy+LbrlqMgDjjDXH6D/RklHxN4=",
1496 | "dev": true
1497 | },
1498 | "undefsafe": {
1499 | "version": "0.0.3",
1500 | "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-0.0.3.tgz",
1501 | "integrity": "sha1-7Mo6A+VrmvFzhbqsgSrIO5lKli8=",
1502 | "dev": true
1503 | },
1504 | "update-notifier": {
1505 | "version": "0.5.0",
1506 | "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-0.5.0.tgz",
1507 | "integrity": "sha1-B7XcIGazYnqztPUwEw9+3doHpMw=",
1508 | "dev": true
1509 | },
1510 | "util-deprecate": {
1511 | "version": "1.0.2",
1512 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
1513 | "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
1514 | "dev": true
1515 | },
1516 | "uuid": {
1517 | "version": "2.0.3",
1518 | "resolved": "https://registry.npmjs.org/uuid/-/uuid-2.0.3.tgz",
1519 | "integrity": "sha1-Z+LoY3lyFVMN/zGOW/nc6/1Hsho=",
1520 | "dev": true
1521 | },
1522 | "wrappy": {
1523 | "version": "1.0.2",
1524 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
1525 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
1526 | "dev": true
1527 | },
1528 | "write-file-atomic": {
1529 | "version": "1.3.4",
1530 | "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-1.3.4.tgz",
1531 | "integrity": "sha1-+Aek8LHZ6ROuekgRLmzDrxmRtF8=",
1532 | "dev": true
1533 | },
1534 | "xdg-basedir": {
1535 | "version": "2.0.0",
1536 | "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-2.0.0.tgz",
1537 | "integrity": "sha1-7byQPMOF/ARSPZZqM1UEtVBNG9I=",
1538 | "dev": true
1539 | }
1540 | }
1541 | }
1542 |
--------------------------------------------------------------------------------
/mentor-notes/step-3/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "step-1",
3 | "version": "1.0.0",
4 | "description": "",
5 | "main": "index.js",
6 | "scripts": {
7 | "test": "echo \"Error: no test specified\" && exit 1",
8 | "devStart": "nodemon src/server.js"
9 | },
10 | "author": "",
11 | "license": "ISC",
12 | "devDependencies": {
13 | "nodemon": "^1.11.0"
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/mentor-notes/step-3/public/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Node Week Day 1 Morning Workshop
6 |
7 |
8 |
9 |
10 | Hello world!
11 |
12 | Red
13 | Blue
14 | Yellow
15 |
16 |
17 |
18 |
19 |
--------------------------------------------------------------------------------
/mentor-notes/step-3/public/index.js:
--------------------------------------------------------------------------------
1 | (function() {
2 | var redBtn = document.getElementById('red-button');
3 | var blueBtn = document.getElementById('blue-button');
4 | var yellowBtn = document.getElementById('yellow-button');
5 | var body = document.querySelector('body');
6 |
7 | function httpGetRequest(colour) {
8 | var xhr = new XMLHttpRequest();
9 | xhr.onreadystatechange = function() {
10 | if (xhr.readyState == 4 && xhr.status == 200) {
11 | body.style.backgroundColor = colour;
12 | }
13 | };
14 | xhr.open('GET', '/', true);
15 | xhr.send();
16 | }
17 |
18 | redBtn.addEventListener('click', function() {
19 | httpGetRequest('red');
20 | });
21 | blueBtn.addEventListener('click', function() {
22 | httpGetRequest('blue');
23 | });
24 | yellowBtn.addEventListener('click', function() {
25 | httpGetRequest('yellow');
26 | });
27 | })();
28 |
--------------------------------------------------------------------------------
/mentor-notes/step-3/public/main.css:
--------------------------------------------------------------------------------
1 | body {
2 | background-color: #aaa;
3 | }
4 |
5 | button {
6 | border: 2px solid #000;
7 | width: 80px;
8 | height: 30px;
9 | border-radius: 3px;
10 | }
11 |
12 | #red-button {
13 | background-color: red;
14 | color: #fff;
15 | }
16 |
17 | #blue-button {
18 | background-color: blue;
19 | color: #fff;
20 | }
21 |
22 | #yellow-button {
23 | background-color: yellow;
24 | }
25 |
--------------------------------------------------------------------------------
/mentor-notes/step-3/public/node-icon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/foundersandcoders/Node-Intro-Workshop/c71302f3af4e38da9299d5d3fc89e629436d8e4f/mentor-notes/step-3/public/node-icon.ico
--------------------------------------------------------------------------------
/mentor-notes/step-3/src/router.js:
--------------------------------------------------------------------------------
1 | const fs = require('fs');
2 | const path = require('path');
3 |
4 | const router = (request, response) => {
5 | const url = request.url;
6 | if (url === '/') {
7 | const filePath = path.join(__dirname, '..', 'public', 'index.html');
8 | fs.readFile(filePath, (error, file) => {
9 | if (error) {
10 | console.log(error);
11 | response.writeHead(500, { 'Content-Type': 'text/html' });
12 | response.end("Sorry, we've had a problem on our end ");
13 | } else {
14 | response.writeHead(200, { 'Content-Type': 'text/html' });
15 | response.end(file);
16 | }
17 | });
18 | } else if (url === '/public/main.css') {
19 | const filePath = path.join(__dirname, '..', url);
20 | fs.readFile(filePath, (error, file) => {
21 | if (error) {
22 | console.log(error);
23 | response.writeHead(500, { 'Content-Type': 'text/html' });
24 | response.end("Sorry, we've had a problem on our end ");
25 | } else {
26 | response.writeHead(200, { 'Content-Type': 'text/css' });
27 | response.end(file);
28 | }
29 | });
30 | } else if (url === '/public/index.js') {
31 | const filePath = path.join(__dirname, '..', url);
32 | fs.readFile(filePath, (error, file) => {
33 | if (error) {
34 | console.log(error);
35 | response.writeHead(500, { 'Content-Type': 'text/html' });
36 | response.end("Sorry, we've had a problem on our end ");
37 | } else {
38 | response.writeHead(200, { 'Content-Type': 'application/javascript' });
39 | response.end(file);
40 | }
41 | });
42 | } else if (url === '/public/node-icon.ico') {
43 | const filePath = path.join(__dirname, '..', url);
44 | fs.readFile(filePath, (error, file) => {
45 | if (error) {
46 | console.log(error);
47 | response.writeHead(500, { 'Content-Type': 'text/html' });
48 | response.end("Sorry, we've had a problem on our end ");
49 | } else {
50 | response.writeHead(200, { 'Content-Type': 'image/x-icon' });
51 | response.end(file);
52 | }
53 | });
54 | } else {
55 | response.writeHead(404);
56 | response.end('404 not found');
57 | }
58 | };
59 |
60 | module.exports = router;
61 |
--------------------------------------------------------------------------------
/mentor-notes/step-3/src/server.js:
--------------------------------------------------------------------------------
1 | const http = require('http');
2 | const router = require('./router');
3 | const port = 4000;
4 |
5 | const server = http.createServer(router);
6 |
7 | server.listen(port);
8 |
9 | console.log(`server up and running on localhost:${port}`);
10 |
--------------------------------------------------------------------------------
/mentor-notes/step-4/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "step-1",
3 | "version": "1.0.0",
4 | "description": "",
5 | "main": "index.js",
6 | "scripts": {
7 | "test": "echo \"Error: no test specified\" && exit 1",
8 | "devStart": "nodemon src/server.js"
9 | },
10 | "author": "",
11 | "license": "ISC",
12 | "devDependencies": {
13 | "nodemon": "^1.11.0"
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/mentor-notes/step-4/public/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Node Week Day 1 Morning Workshop
6 |
7 |
8 |
9 |
10 | Hello world!
11 |
12 | Red
13 | Blue
14 | Yellow
15 |
16 |
17 |
18 |
19 |
--------------------------------------------------------------------------------
/mentor-notes/step-4/public/index.js:
--------------------------------------------------------------------------------
1 | (function() {
2 | var redBtn = document.getElementById('red-button');
3 | var blueBtn = document.getElementById('blue-button');
4 | var yellowBtn = document.getElementById('yellow-button');
5 | var body = document.querySelector('body');
6 |
7 | function httpGetRequest(colour) {
8 | var xhr = new XMLHttpRequest();
9 | xhr.onreadystatechange = function() {
10 | if (xhr.readyState == 4 && xhr.status == 200) {
11 | body.style.backgroundColor = colour;
12 | }
13 | };
14 | xhr.open('GET', '/', true);
15 | xhr.send();
16 | }
17 |
18 | redBtn.addEventListener('click', function() {
19 | httpGetRequest('red');
20 | });
21 | blueBtn.addEventListener('click', function() {
22 | httpGetRequest('blue');
23 | });
24 | yellowBtn.addEventListener('click', function() {
25 | httpGetRequest('yellow');
26 | });
27 | })();
28 |
--------------------------------------------------------------------------------
/mentor-notes/step-4/public/main.css:
--------------------------------------------------------------------------------
1 | body {
2 | background-color: #aaa;
3 | }
4 |
5 | button {
6 | border: 2px solid #000;
7 | width: 80px;
8 | height: 30px;
9 | border-radius: 3px;
10 | }
11 |
12 | #red-button {
13 | background-color: red;
14 | color: #fff;
15 | }
16 |
17 | #blue-button {
18 | background-color: blue;
19 | color: #fff;
20 | }
21 |
22 | #yellow-button {
23 | background-color: yellow;
24 | }
25 |
--------------------------------------------------------------------------------
/mentor-notes/step-4/public/node-icon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/foundersandcoders/Node-Intro-Workshop/c71302f3af4e38da9299d5d3fc89e629436d8e4f/mentor-notes/step-4/public/node-icon.ico
--------------------------------------------------------------------------------
/mentor-notes/step-4/src/router.js:
--------------------------------------------------------------------------------
1 | const fs = require('fs');
2 | const path = require('path');
3 |
4 | const router = (request, response) => {
5 | const url = request.url;
6 | if (url === '/') {
7 | const filePath = path.join(__dirname, '..', 'public', 'index.html');
8 | fs.readFile(filePath, (error, file) => {
9 | if (error) {
10 | console.log(error);
11 | response.writeHead(500, { 'Content-Type': 'text/html' });
12 | response.end("Sorry, we've had a problem on our end ");
13 | } else {
14 | response.writeHead(200, { 'Content-Type': 'text/html' });
15 | response.end(file);
16 | }
17 | });
18 | } else if (url.indexOf('public') !== -1) {
19 | const extension = url.split('.')[1];
20 | const extensionType = {
21 | html: 'text/html',
22 | css: 'text/css',
23 | js: 'application/javascript',
24 | ico: 'image/x-icon',
25 | };
26 |
27 | // Replaced err with error in line 31
28 | const filePath = path.join(__dirname, '..', url);
29 | fs.readFile(filePath, (error, file) => {
30 | if (error) {
31 | console.log(error);
32 | response.writeHead(404, { 'Content-Type': 'text/html' });
33 | response.end('404 file not found ');
34 | } else {
35 | response.writeHead(200, { 'Content-Type': extensionType[extension] });
36 | response.end(file);
37 | }
38 | });
39 | console.log(url);
40 | } else {
41 | response.writeHead(404, { 'Content-Type': 'text/html' });
42 | response.end('404 file not found ');
43 | }
44 | };
45 |
46 | module.exports = router;
47 |
--------------------------------------------------------------------------------
/mentor-notes/step-4/src/server.js:
--------------------------------------------------------------------------------
1 | const http = require('http');
2 | const router = require('./router');
3 | const port = 4000;
4 |
5 | const server = http.createServer(router);
6 |
7 | server.listen(port);
8 |
9 | console.log(`server up and running on localhost:${port}`);
10 |
--------------------------------------------------------------------------------
/mentor-notes/step-5/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "step-1",
3 | "version": "1.0.0",
4 | "description": "",
5 | "main": "index.js",
6 | "scripts": {
7 | "test": "echo \"Error: no test specified\" && exit 1",
8 | "devStart": "nodemon src/server.js"
9 | },
10 | "author": "",
11 | "license": "ISC",
12 | "devDependencies": {
13 | "nodemon": "^1.11.0"
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/mentor-notes/step-5/public/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Node Week Day 1 Morning Workshop
6 |
7 |
8 |
9 |
10 | Hello world!
11 |
12 | Red
13 | Blue
14 | Yellow
15 |
16 |
17 |
18 |
19 |
--------------------------------------------------------------------------------
/mentor-notes/step-5/public/index.js:
--------------------------------------------------------------------------------
1 | (function() {
2 | var redBtn = document.getElementById('red-button');
3 | var blueBtn = document.getElementById('blue-button');
4 | var yellowBtn = document.getElementById('yellow-button');
5 | var body = document.querySelector('body');
6 |
7 | function httpGetRequest(colour) {
8 | var xhr = new XMLHttpRequest();
9 | xhr.onreadystatechange = function() {
10 | if (xhr.readyState == 4 && xhr.status == 200) {
11 | body.style.backgroundColor = colour;
12 | }
13 | };
14 | xhr.open('GET', '/', true);
15 | xhr.send();
16 | }
17 |
18 | redBtn.addEventListener('click', function() {
19 | httpGetRequest('red');
20 | });
21 | blueBtn.addEventListener('click', function() {
22 | httpGetRequest('blue');
23 | });
24 | yellowBtn.addEventListener('click', function() {
25 | httpGetRequest('yellow');
26 | });
27 | })();
28 |
--------------------------------------------------------------------------------
/mentor-notes/step-5/public/main.css:
--------------------------------------------------------------------------------
1 | body {
2 | background-color: #aaa;
3 | }
4 |
5 | button {
6 | border: 2px solid #000;
7 | width: 80px;
8 | height: 30px;
9 | border-radius: 3px;
10 | }
11 |
12 | #red-button {
13 | background-color: red;
14 | color: #fff;
15 | }
16 |
17 | #blue-button {
18 | background-color: blue;
19 | color: #fff;
20 | }
21 |
22 | #yellow-button {
23 | background-color: yellow;
24 | }
25 |
--------------------------------------------------------------------------------
/mentor-notes/step-5/public/node-icon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/foundersandcoders/Node-Intro-Workshop/c71302f3af4e38da9299d5d3fc89e629436d8e4f/mentor-notes/step-5/public/node-icon.ico
--------------------------------------------------------------------------------
/mentor-notes/step-5/src/handlers.js:
--------------------------------------------------------------------------------
1 | const fs = require('fs');
2 | const path = require('path');
3 |
4 | const handleHomeRoute = (request, response) => {
5 | const filePath = path.join(__dirname, '..', 'public', 'index.html');
6 | fs.readFile(filePath, (error, file) => {
7 | if (error) {
8 | console.log(error);
9 | response.writeHead(500, { 'Content-Type': 'text/html' });
10 | response.end("Sorry, we've had a problem on our end ");
11 | } else {
12 | response.writeHead(200, { 'Content-Type': 'text/html' });
13 | response.end(file);
14 | }
15 | });
16 | };
17 |
18 | const handlePublic = (request, response, url) => {
19 | const extension = url.split('.')[1];
20 | const extensionType = {
21 | html: 'text/html',
22 | css: 'text/css',
23 | js: 'application/javascript',
24 | ico: 'image/x-icon',
25 | };
26 |
27 | // Replaced err with error in line 30
28 | const filePath = path.join(__dirname, '..', url);
29 | fs.readFile(filePath, (error, file) => {
30 | if (error) {
31 | console.log(error);
32 | response.writeHead(404, { 'Content-Type': 'text/html' });
33 | response.end('404 file not found ');
34 | } else {
35 | response.writeHead(200, { 'Content-Type': extensionType[extension] });
36 | response.end(file);
37 | }
38 | });
39 | console.log(url);
40 | };
41 |
42 | module.exports = {
43 | handleHomeRoute,
44 | handlePublic,
45 | };
46 |
--------------------------------------------------------------------------------
/mentor-notes/step-5/src/router.js:
--------------------------------------------------------------------------------
1 | const handlers = require('./handlers.js');
2 |
3 | const router = (request, response) => {
4 | const url = request.url;
5 | if (url === '/') {
6 | handlers.handleHomeRoute(request, response);
7 | } else if (url.indexOf('public') !== -1) {
8 | handlers.handlePublic(request, response, url);
9 | } else {
10 | response.writeHead(404, { 'Content-Type': 'text/html' });
11 | response.end('404 file not found ');
12 | }
13 | };
14 |
15 | module.exports = router;
16 |
--------------------------------------------------------------------------------
/mentor-notes/step-5/src/server.js:
--------------------------------------------------------------------------------
1 | const http = require('http');
2 | const router = require('./router');
3 | const port = 4000;
4 |
5 | const server = http.createServer(router);
6 |
7 | server.listen(port);
8 |
9 | console.log(`server up and running on localhost:${port}`);
10 |
--------------------------------------------------------------------------------
/public/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Node Week Day 1 Morning Workshop
6 |
7 |
8 |
9 |
10 | Hello world!
11 |
12 | Red
13 | Blue
14 | Yellow
15 |
16 |
17 |
18 |
19 |
--------------------------------------------------------------------------------
/public/index.js:
--------------------------------------------------------------------------------
1 | (function() {
2 | var redBtn = document.getElementById('red-button');
3 | var blueBtn = document.getElementById('blue-button');
4 | var yellowBtn = document.getElementById('yellow-button');
5 | var body = document.querySelector('body');
6 |
7 | function httpGetRequest(colour) {
8 | var xhr = new XMLHttpRequest();
9 | xhr.onreadystatechange = function() {
10 | if (xhr.readyState == 4 && xhr.status == 200) {
11 | body.style.backgroundColor = colour;
12 | }
13 | };
14 | xhr.open('GET', '/', true);
15 | xhr.send();
16 | }
17 |
18 | redBtn.addEventListener('click', function() {
19 | httpGetRequest('red');
20 | });
21 | blueBtn.addEventListener('click', function() {
22 | httpGetRequest('blue');
23 | });
24 | yellowBtn.addEventListener('click', function() {
25 | httpGetRequest('yellow');
26 | });
27 | })();
28 |
--------------------------------------------------------------------------------
/public/main.css:
--------------------------------------------------------------------------------
1 | body {
2 | background-color: #aaa;
3 | }
4 |
5 | button {
6 | border: 2px solid #000;
7 | width: 80px;
8 | height: 30px;
9 | border-radius: 3px;
10 | }
11 |
12 | #red-button {
13 | background-color: red;
14 | color: #fff;
15 | }
16 |
17 | #blue-button {
18 | background-color: blue;
19 | color: #fff;
20 | }
21 |
22 | #yellow-button {
23 | background-color: yellow;
24 | }
25 |
--------------------------------------------------------------------------------
/public/node-icon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/foundersandcoders/Node-Intro-Workshop/c71302f3af4e38da9299d5d3fc89e629436d8e4f/public/node-icon.ico
--------------------------------------------------------------------------------
/src/server.js:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/foundersandcoders/Node-Intro-Workshop/c71302f3af4e38da9299d5d3fc89e629436d8e4f/src/server.js
--------------------------------------------------------------------------------