├── .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 | 13 | 14 | 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 | 13 | 14 | 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 | 13 | 14 | 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 | 13 | 14 | 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 | 13 | 14 | 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 | 13 | 14 | 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 | 13 | 14 | 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 | 13 | 14 | 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 | 13 | 14 | 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 --------------------------------------------------------------------------------