├── .gitignore ├── Procfile ├── public ├── delete.png ├── bg-stars.png ├── index.html ├── client.js └── style.css ├── README.md ├── routes ├── parse-block-name.js └── blocks.js ├── app.js ├── package.json ├── logger.js └── npm-shrinkwrap.json /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | -------------------------------------------------------------------------------- /Procfile: -------------------------------------------------------------------------------- 1 | web: node app.js 2 | -------------------------------------------------------------------------------- /public/delete.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codeschool/ExpressCourseDemo/HEAD/public/delete.png -------------------------------------------------------------------------------- /public/bg-stars.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codeschool/ExpressCourseDemo/HEAD/public/bg-stars.png -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Express Course Demo 2 | 3 | This is the demo application built on the Express course. 4 | Live application at 5 | 6 | ## Running 7 | 8 | Install dependencies with `npm install`. 9 | Run app with `npm start`. 10 | -------------------------------------------------------------------------------- /routes/parse-block-name.js: -------------------------------------------------------------------------------- 1 | module.exports = function() { 2 | return function(request, response, next){ 3 | var name = request.params.name; 4 | var block = name[0].toUpperCase() + name.slice(1).toLowerCase(); 5 | request.blockName = block; 6 | next(); 7 | } 8 | }; 9 | -------------------------------------------------------------------------------- /app.js: -------------------------------------------------------------------------------- 1 | var express = require('express'); 2 | var app = express(); 3 | 4 | var logger = require('./logger'); 5 | app.use(logger); 6 | 7 | app.use(express.static('public')); 8 | 9 | var blocks = require('./routes/blocks'); 10 | app.use('/blocks', blocks); 11 | 12 | var port = process.env.PORT || 3000; 13 | app.listen(port, function() { 14 | console.log('Listening on 3000'); 15 | }); 16 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "ExpressCourseDemo", 3 | "version": "0.0.0", 4 | "description": "This demo app for the Express course", 5 | "author": "Carlos Souza ", 6 | "dependencies": { 7 | "body-parser": "^1.8.1", 8 | "debug": "^0.8.1", 9 | "express": "^4.9.5", 10 | "lodash": "^2.4.1" 11 | }, 12 | "scripts": { 13 | "start": "node app.js" 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /logger.js: -------------------------------------------------------------------------------- 1 | module.exports = function(request, response, next) { 2 | var start = +new Date(); 3 | var stream = process.stdout; 4 | var url = request.url; 5 | var method = request.method; 6 | 7 | response.on('finish', function() { 8 | var duration = +new Date() - start; 9 | 10 | var message = method + ' to ' + url + 11 | '\ntook ' + duration + ' milliseconds \n\n'; 12 | 13 | stream.write(message); 14 | }); 15 | 16 | next(); 17 | }; 18 | 19 | -------------------------------------------------------------------------------- /public/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Building Blocks 6 | 7 | 8 | 9 | 10 |

Blocks

11 | 12 |
13 | New Block 14 |
15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | Fork me on GitHub 29 | 30 | 31 | 32 | -------------------------------------------------------------------------------- /public/client.js: -------------------------------------------------------------------------------- 1 | $(function(){ 2 | 3 | $.get('/blocks', appendToList); 4 | 5 | $('form').on('submit', function(event) { 6 | event.preventDefault(); 7 | 8 | var form = $(this); 9 | var blockData = form.serialize(); 10 | 11 | $.ajax({ 12 | type: 'POST', url: '/blocks', data: blockData 13 | }).done(function(blockName){ 14 | appendToList([blockName]); 15 | form.trigger('reset'); 16 | }); 17 | }); 18 | 19 | function appendToList(blocks) { 20 | var list = []; 21 | var content, block; 22 | for(var i in blocks){ 23 | block = blocks[i]; 24 | content = ''+block+''+ // + // example on how to serve static images 25 | ' '+ 26 | ''; 27 | list.push($('
  • ', { html: content })); 28 | } 29 | 30 | $('.block-list').append(list) 31 | } 32 | 33 | 34 | $('.block-list').on('click', 'a[data-block]', function (event) { 35 | if(!confirm('Are you sure ?')){ 36 | return false; 37 | } 38 | 39 | var target = $(event.currentTarget); 40 | 41 | $.ajax({ 42 | type: 'DELETE', 43 | url: '/blocks/' + target.data('block') 44 | }).done(function () { 45 | target.parents('li').remove(); 46 | }); 47 | }); 48 | 49 | }); 50 | -------------------------------------------------------------------------------- /routes/blocks.js: -------------------------------------------------------------------------------- 1 | var express = require('express'); 2 | var router = express.Router(); 3 | var _ = require('lodash'); 4 | 5 | var bodyParser = require('body-parser'); 6 | var parseBlockName = require('./parse-block-name')(); 7 | 8 | var originalBlocks = { 9 | 'Fixed': 'Fastened securely in position', 10 | 'Movable': 'Capable of being moved', 11 | 'Rotating': 'Moving in a circle around its center' 12 | }; 13 | 14 | var blocks = _.clone(originalBlocks); 15 | 16 | var resetRoute = router.route('/reset'); 17 | resetRoute.get(function(request, response) { 18 | blocks = _.clone(originalBlocks); 19 | response.redirect('/'); 20 | }); 21 | 22 | var parseUrlencoded = bodyParser.urlencoded({ extended: false }); 23 | 24 | router.route('/') 25 | .get(function (request, response) { 26 | var names = Object.keys(blocks); 27 | if(request.query.limit >= 0){ 28 | response.json(names.slice(0, request.query.limit)); 29 | }else{ 30 | response.json(names); 31 | } 32 | }) 33 | .post(parseUrlencoded, function (request, response) { 34 | var newBlock = request.body; 35 | blocks[newBlock.name] = newBlock.description; 36 | 37 | response.status(201).json(newBlock.name); 38 | }); 39 | 40 | router.route('/:name') 41 | .all(parseBlockName) 42 | .get(function (request, response) { 43 | var description = blocks[request.blockName]; 44 | 45 | if(!description){ 46 | response.status(404).json('No description found for ' + request.model); 47 | }else{ 48 | response.json(description); 49 | } 50 | }) 51 | .delete(function (request, response) { 52 | delete blocks[request.blockName]; 53 | response.sendStatus(200); 54 | }); 55 | 56 | module.exports = router; 57 | -------------------------------------------------------------------------------- /public/style.css: -------------------------------------------------------------------------------- 1 | /* ----- Building Blocks Stylsheet ----- */ 2 | 3 | /* Base */ 4 | 5 | html { 6 | background: #436f8e; /* Old browsers */ 7 | background: url('bg-stars.png') repeat-x center top, linear-gradient(to bottom, #436f8e 0%, #c2e8c2 100%) no-repeat center; /* W3C */ 8 | min-height: 100%; 9 | } 10 | 11 | body { 12 | color: #333; 13 | font-family: Helvetica, Arial, sans-serif; 14 | font-size: 16px; 15 | margin: 0 auto; 16 | padding-top: 80px; 17 | width: 600px; 18 | } 19 | 20 | /* Headings */ 21 | 22 | h1 { 23 | color: white; 24 | margin-bottom: 20px; 25 | } 26 | 27 | /* Lists */ 28 | 29 | ul { 30 | list-style-type: none; 31 | margin: 0; 32 | padding: 0; 33 | } 34 | ul li { 35 | margin-bottom: 10px; 36 | } 37 | ul li:last-child { 38 | margin-bottom: 0; 39 | } 40 | 41 | /* Links */ 42 | 43 | a { 44 | color: #436f8e; 45 | text-decoration: underline; 46 | transition: color 0.2s ease-in-out; 47 | } 48 | a:hover, 49 | a:active { 50 | color: #333; 51 | } 52 | 53 | /* Shared */ 54 | 55 | form, .block-list { 56 | background: white; 57 | margin-bottom: 20px; 58 | padding: 20px; 59 | } 60 | 61 | /* Form */ 62 | 63 | legend { 64 | font-weight: bold; 65 | margin: 0; 66 | margin-bottom: 10px; 67 | padding: 0; 68 | } 69 | input { 70 | border: 0; 71 | border: 1px solid #ccc; 72 | box-sizing: border-box; 73 | font-family: Helvetica, Arial, sans-serif; 74 | font-size: 16px; 75 | margin: 0; 76 | margin-bottom: 10px; 77 | padding: 10px; 78 | width: 100%; 79 | } 80 | input:focus { 81 | box-shadow: 0 0 4px rgba(67, 111, 142, 0.65); 82 | outline: none; 83 | } 84 | input[type="submit"] { 85 | background: #436f8e; 86 | border: 0; 87 | border-radius: 4px; 88 | color: white; 89 | font-size: 12px; 90 | font-weight: bold; 91 | margin-bottom: 0; 92 | padding: 10px 30px; 93 | text-transform: uppercase; 94 | width: auto; 95 | } 96 | 97 | /* Block List */ 98 | 99 | .block-list li::after { 100 | clear: both; 101 | content: ''; 102 | display: table; 103 | } 104 | .block-list li a:last-child { 105 | float: left; 106 | padding-right: 10px; 107 | } 108 | -------------------------------------------------------------------------------- /npm-shrinkwrap.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "ExpressCourseDemo", 3 | "version": "0.0.0", 4 | "dependencies": { 5 | "body-parser": { 6 | "version": "1.8.2", 7 | "from": "https://registry.npmjs.org/body-parser/-/body-parser-1.8.2.tgz", 8 | "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.8.2.tgz", 9 | "dependencies": { 10 | "bytes": { 11 | "version": "1.0.0", 12 | "from": "https://registry.npmjs.org/bytes/-/bytes-1.0.0.tgz", 13 | "resolved": "https://registry.npmjs.org/bytes/-/bytes-1.0.0.tgz" 14 | }, 15 | "depd": { 16 | "version": "0.4.5", 17 | "from": "https://registry.npmjs.org/depd/-/depd-0.4.5.tgz", 18 | "resolved": "https://registry.npmjs.org/depd/-/depd-0.4.5.tgz" 19 | }, 20 | "iconv-lite": { 21 | "version": "0.4.4", 22 | "from": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.4.tgz", 23 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.4.tgz" 24 | }, 25 | "media-typer": { 26 | "version": "0.3.0", 27 | "from": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", 28 | "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz" 29 | }, 30 | "on-finished": { 31 | "version": "2.1.0", 32 | "from": "https://registry.npmjs.org/on-finished/-/on-finished-2.1.0.tgz", 33 | "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.1.0.tgz", 34 | "dependencies": { 35 | "ee-first": { 36 | "version": "1.0.5", 37 | "from": "https://registry.npmjs.org/ee-first/-/ee-first-1.0.5.tgz", 38 | "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.0.5.tgz" 39 | } 40 | } 41 | }, 42 | "qs": { 43 | "version": "2.2.3", 44 | "from": "https://registry.npmjs.org/qs/-/qs-2.2.3.tgz", 45 | "resolved": "https://registry.npmjs.org/qs/-/qs-2.2.3.tgz" 46 | }, 47 | "raw-body": { 48 | "version": "1.3.0", 49 | "from": "https://registry.npmjs.org/raw-body/-/raw-body-1.3.0.tgz", 50 | "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-1.3.0.tgz" 51 | }, 52 | "type-is": { 53 | "version": "1.5.1", 54 | "from": "https://registry.npmjs.org/type-is/-/type-is-1.5.1.tgz", 55 | "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.5.1.tgz", 56 | "dependencies": { 57 | "mime-types": { 58 | "version": "2.0.1", 59 | "from": "https://registry.npmjs.org/mime-types/-/mime-types-2.0.1.tgz", 60 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.0.1.tgz", 61 | "dependencies": { 62 | "mime-db": { 63 | "version": "1.0.1", 64 | "from": "https://registry.npmjs.org/mime-db/-/mime-db-1.0.1.tgz", 65 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.0.1.tgz" 66 | } 67 | } 68 | } 69 | } 70 | } 71 | } 72 | }, 73 | "debug": { 74 | "version": "0.8.1", 75 | "from": "https://registry.npmjs.org/debug/-/debug-0.8.1.tgz", 76 | "resolved": "https://registry.npmjs.org/debug/-/debug-0.8.1.tgz" 77 | }, 78 | "express": { 79 | "version": "4.9.0", 80 | "from": "https://registry.npmjs.org/express/-/express-4.9.0.tgz", 81 | "resolved": "https://registry.npmjs.org/express/-/express-4.9.0.tgz", 82 | "dependencies": { 83 | "accepts": { 84 | "version": "1.1.0", 85 | "from": "https://registry.npmjs.org/accepts/-/accepts-1.1.0.tgz", 86 | "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.1.0.tgz", 87 | "dependencies": { 88 | "mime-types": { 89 | "version": "2.0.1", 90 | "from": "https://registry.npmjs.org/mime-types/-/mime-types-2.0.1.tgz", 91 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.0.1.tgz", 92 | "dependencies": { 93 | "mime-db": { 94 | "version": "1.0.1", 95 | "from": "https://registry.npmjs.org/mime-db/-/mime-db-1.0.1.tgz", 96 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.0.1.tgz" 97 | } 98 | } 99 | }, 100 | "negotiator": { 101 | "version": "0.4.7", 102 | "from": "https://registry.npmjs.org/negotiator/-/negotiator-0.4.7.tgz", 103 | "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.4.7.tgz" 104 | } 105 | } 106 | }, 107 | "buffer-crc32": { 108 | "version": "0.2.3", 109 | "from": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.3.tgz", 110 | "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.3.tgz" 111 | }, 112 | "cookie-signature": { 113 | "version": "1.0.5", 114 | "from": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.5.tgz", 115 | "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.5.tgz" 116 | }, 117 | "debug": { 118 | "version": "2.0.0", 119 | "from": "https://registry.npmjs.org/debug/-/debug-2.0.0.tgz", 120 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.0.0.tgz", 121 | "dependencies": { 122 | "ms": { 123 | "version": "0.6.2", 124 | "from": "https://registry.npmjs.org/ms/-/ms-0.6.2.tgz", 125 | "resolved": "https://registry.npmjs.org/ms/-/ms-0.6.2.tgz" 126 | } 127 | } 128 | }, 129 | "depd": { 130 | "version": "0.4.4", 131 | "from": "https://registry.npmjs.org/depd/-/depd-0.4.4.tgz", 132 | "resolved": "https://registry.npmjs.org/depd/-/depd-0.4.4.tgz" 133 | }, 134 | "escape-html": { 135 | "version": "1.0.1", 136 | "from": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.1.tgz", 137 | "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.1.tgz" 138 | }, 139 | "etag": { 140 | "version": "1.3.1", 141 | "from": "https://registry.npmjs.org/etag/-/etag-1.3.1.tgz", 142 | "resolved": "https://registry.npmjs.org/etag/-/etag-1.3.1.tgz", 143 | "dependencies": { 144 | "crc": { 145 | "version": "3.0.0", 146 | "from": "https://registry.npmjs.org/crc/-/crc-3.0.0.tgz", 147 | "resolved": "https://registry.npmjs.org/crc/-/crc-3.0.0.tgz" 148 | } 149 | } 150 | }, 151 | "finalhandler": { 152 | "version": "0.2.0", 153 | "from": "https://registry.npmjs.org/finalhandler/-/finalhandler-0.2.0.tgz", 154 | "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-0.2.0.tgz" 155 | }, 156 | "fresh": { 157 | "version": "0.2.4", 158 | "from": "https://registry.npmjs.org/fresh/-/fresh-0.2.4.tgz", 159 | "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.2.4.tgz" 160 | }, 161 | "media-typer": { 162 | "version": "0.3.0", 163 | "from": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", 164 | "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz" 165 | }, 166 | "methods": { 167 | "version": "1.1.0", 168 | "from": "https://registry.npmjs.org/methods/-/methods-1.1.0.tgz", 169 | "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.0.tgz" 170 | }, 171 | "on-finished": { 172 | "version": "2.1.0", 173 | "from": "https://registry.npmjs.org/on-finished/-/on-finished-2.1.0.tgz", 174 | "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.1.0.tgz", 175 | "dependencies": { 176 | "ee-first": { 177 | "version": "1.0.5", 178 | "from": "https://registry.npmjs.org/ee-first/-/ee-first-1.0.5.tgz", 179 | "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.0.5.tgz" 180 | } 181 | } 182 | }, 183 | "parseurl": { 184 | "version": "1.3.0", 185 | "from": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.0.tgz", 186 | "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.0.tgz" 187 | }, 188 | "path-to-regexp": { 189 | "version": "0.1.3", 190 | "from": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.3.tgz", 191 | "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.3.tgz" 192 | }, 193 | "proxy-addr": { 194 | "version": "1.0.1", 195 | "from": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-1.0.1.tgz", 196 | "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-1.0.1.tgz", 197 | "dependencies": { 198 | "ipaddr.js": { 199 | "version": "0.1.2", 200 | "from": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-0.1.2.tgz", 201 | "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-0.1.2.tgz" 202 | } 203 | } 204 | }, 205 | "qs": { 206 | "version": "2.2.3", 207 | "from": "https://registry.npmjs.org/qs/-/qs-2.2.3.tgz", 208 | "resolved": "https://registry.npmjs.org/qs/-/qs-2.2.3.tgz" 209 | }, 210 | "range-parser": { 211 | "version": "1.0.2", 212 | "from": "https://registry.npmjs.org/range-parser/-/range-parser-1.0.2.tgz", 213 | "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.0.2.tgz" 214 | }, 215 | "send": { 216 | "version": "0.9.1", 217 | "from": "https://registry.npmjs.org/send/-/send-0.9.1.tgz", 218 | "resolved": "https://registry.npmjs.org/send/-/send-0.9.1.tgz", 219 | "dependencies": { 220 | "destroy": { 221 | "version": "1.0.3", 222 | "from": "https://registry.npmjs.org/destroy/-/destroy-1.0.3.tgz", 223 | "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.3.tgz" 224 | }, 225 | "mime": { 226 | "version": "1.2.11", 227 | "from": "https://registry.npmjs.org/mime/-/mime-1.2.11.tgz", 228 | "resolved": "https://registry.npmjs.org/mime/-/mime-1.2.11.tgz" 229 | }, 230 | "ms": { 231 | "version": "0.6.2", 232 | "from": "https://registry.npmjs.org/ms/-/ms-0.6.2.tgz", 233 | "resolved": "https://registry.npmjs.org/ms/-/ms-0.6.2.tgz" 234 | } 235 | } 236 | }, 237 | "serve-static": { 238 | "version": "1.6.2", 239 | "from": "https://registry.npmjs.org/serve-static/-/serve-static-1.6.2.tgz", 240 | "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.6.2.tgz", 241 | "dependencies": { 242 | "send": { 243 | "version": "0.9.2", 244 | "from": "https://registry.npmjs.org/send/-/send-0.9.2.tgz", 245 | "resolved": "https://registry.npmjs.org/send/-/send-0.9.2.tgz", 246 | "dependencies": { 247 | "depd": { 248 | "version": "0.4.5", 249 | "from": "https://registry.npmjs.org/depd/-/depd-0.4.5.tgz", 250 | "resolved": "https://registry.npmjs.org/depd/-/depd-0.4.5.tgz" 251 | }, 252 | "destroy": { 253 | "version": "1.0.3", 254 | "from": "https://registry.npmjs.org/destroy/-/destroy-1.0.3.tgz", 255 | "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.3.tgz" 256 | }, 257 | "mime": { 258 | "version": "1.2.11", 259 | "from": "https://registry.npmjs.org/mime/-/mime-1.2.11.tgz", 260 | "resolved": "https://registry.npmjs.org/mime/-/mime-1.2.11.tgz" 261 | }, 262 | "ms": { 263 | "version": "0.6.2", 264 | "from": "https://registry.npmjs.org/ms/-/ms-0.6.2.tgz", 265 | "resolved": "https://registry.npmjs.org/ms/-/ms-0.6.2.tgz" 266 | } 267 | } 268 | } 269 | } 270 | }, 271 | "type-is": { 272 | "version": "1.5.1", 273 | "from": "https://registry.npmjs.org/type-is/-/type-is-1.5.1.tgz", 274 | "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.5.1.tgz", 275 | "dependencies": { 276 | "mime-types": { 277 | "version": "2.0.1", 278 | "from": "https://registry.npmjs.org/mime-types/-/mime-types-2.0.1.tgz", 279 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.0.1.tgz", 280 | "dependencies": { 281 | "mime-db": { 282 | "version": "1.0.1", 283 | "from": "https://registry.npmjs.org/mime-db/-/mime-db-1.0.1.tgz", 284 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.0.1.tgz" 285 | } 286 | } 287 | } 288 | } 289 | }, 290 | "vary": { 291 | "version": "1.0.0", 292 | "from": "https://registry.npmjs.org/vary/-/vary-1.0.0.tgz", 293 | "resolved": "https://registry.npmjs.org/vary/-/vary-1.0.0.tgz" 294 | }, 295 | "cookie": { 296 | "version": "0.1.2", 297 | "from": "https://registry.npmjs.org/cookie/-/cookie-0.1.2.tgz", 298 | "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.1.2.tgz" 299 | }, 300 | "merge-descriptors": { 301 | "version": "0.0.2", 302 | "from": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-0.0.2.tgz", 303 | "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-0.0.2.tgz" 304 | }, 305 | "utils-merge": { 306 | "version": "1.0.0", 307 | "from": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.0.tgz", 308 | "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.0.tgz" 309 | } 310 | } 311 | }, 312 | "lodash": { 313 | "version": "2.4.1", 314 | "from": "https://registry.npmjs.org/lodash/-/lodash-2.4.1.tgz", 315 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-2.4.1.tgz" 316 | }, 317 | "request": { 318 | "version": "2.42.0", 319 | "from": "https://registry.npmjs.org/request/-/request-2.42.0.tgz", 320 | "resolved": "https://registry.npmjs.org/request/-/request-2.42.0.tgz", 321 | "dependencies": { 322 | "bl": { 323 | "version": "0.9.3", 324 | "from": "https://registry.npmjs.org/bl/-/bl-0.9.3.tgz", 325 | "resolved": "https://registry.npmjs.org/bl/-/bl-0.9.3.tgz", 326 | "dependencies": { 327 | "readable-stream": { 328 | "version": "1.0.31", 329 | "from": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.31.tgz", 330 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.31.tgz", 331 | "dependencies": { 332 | "core-util-is": { 333 | "version": "1.0.1", 334 | "from": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.1.tgz", 335 | "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.1.tgz" 336 | }, 337 | "isarray": { 338 | "version": "0.0.1", 339 | "from": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", 340 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz" 341 | }, 342 | "string_decoder": { 343 | "version": "0.10.31", 344 | "from": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", 345 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz" 346 | }, 347 | "inherits": { 348 | "version": "2.0.1", 349 | "from": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", 350 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz" 351 | } 352 | } 353 | } 354 | } 355 | }, 356 | "caseless": { 357 | "version": "0.6.0", 358 | "from": "https://registry.npmjs.org/caseless/-/caseless-0.6.0.tgz", 359 | "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.6.0.tgz" 360 | }, 361 | "forever-agent": { 362 | "version": "0.5.2", 363 | "from": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.5.2.tgz", 364 | "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.5.2.tgz" 365 | }, 366 | "qs": { 367 | "version": "1.2.2", 368 | "from": "https://registry.npmjs.org/qs/-/qs-1.2.2.tgz", 369 | "resolved": "https://registry.npmjs.org/qs/-/qs-1.2.2.tgz" 370 | }, 371 | "json-stringify-safe": { 372 | "version": "5.0.0", 373 | "from": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.0.tgz", 374 | "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.0.tgz" 375 | }, 376 | "mime-types": { 377 | "version": "1.0.2", 378 | "from": "https://registry.npmjs.org/mime-types/-/mime-types-1.0.2.tgz", 379 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-1.0.2.tgz" 380 | }, 381 | "node-uuid": { 382 | "version": "1.4.1", 383 | "from": "https://registry.npmjs.org/node-uuid/-/node-uuid-1.4.1.tgz", 384 | "resolved": "https://registry.npmjs.org/node-uuid/-/node-uuid-1.4.1.tgz" 385 | }, 386 | "tunnel-agent": { 387 | "version": "0.4.0", 388 | "from": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.4.0.tgz", 389 | "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.4.0.tgz" 390 | }, 391 | "tough-cookie": { 392 | "version": "0.12.1", 393 | "from": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-0.12.1.tgz", 394 | "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-0.12.1.tgz", 395 | "dependencies": { 396 | "punycode": { 397 | "version": "1.3.1", 398 | "from": "https://registry.npmjs.org/punycode/-/punycode-1.3.1.tgz", 399 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.1.tgz" 400 | } 401 | } 402 | }, 403 | "form-data": { 404 | "version": "0.1.4", 405 | "from": "https://registry.npmjs.org/form-data/-/form-data-0.1.4.tgz", 406 | "resolved": "https://registry.npmjs.org/form-data/-/form-data-0.1.4.tgz", 407 | "dependencies": { 408 | "combined-stream": { 409 | "version": "0.0.5", 410 | "from": "https://registry.npmjs.org/combined-stream/-/combined-stream-0.0.5.tgz", 411 | "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-0.0.5.tgz", 412 | "dependencies": { 413 | "delayed-stream": { 414 | "version": "0.0.5", 415 | "from": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-0.0.5.tgz", 416 | "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-0.0.5.tgz" 417 | } 418 | } 419 | }, 420 | "mime": { 421 | "version": "1.2.11", 422 | "from": "https://registry.npmjs.org/mime/-/mime-1.2.11.tgz", 423 | "resolved": "https://registry.npmjs.org/mime/-/mime-1.2.11.tgz" 424 | }, 425 | "async": { 426 | "version": "0.9.0", 427 | "from": "https://registry.npmjs.org/async/-/async-0.9.0.tgz", 428 | "resolved": "https://registry.npmjs.org/async/-/async-0.9.0.tgz" 429 | } 430 | } 431 | }, 432 | "http-signature": { 433 | "version": "0.10.0", 434 | "from": "https://registry.npmjs.org/http-signature/-/http-signature-0.10.0.tgz", 435 | "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-0.10.0.tgz", 436 | "dependencies": { 437 | "assert-plus": { 438 | "version": "0.1.2", 439 | "from": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.1.2.tgz", 440 | "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.1.2.tgz" 441 | }, 442 | "asn1": { 443 | "version": "0.1.11", 444 | "from": "https://registry.npmjs.org/asn1/-/asn1-0.1.11.tgz", 445 | "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.1.11.tgz" 446 | }, 447 | "ctype": { 448 | "version": "0.5.2", 449 | "from": "https://registry.npmjs.org/ctype/-/ctype-0.5.2.tgz", 450 | "resolved": "https://registry.npmjs.org/ctype/-/ctype-0.5.2.tgz" 451 | } 452 | } 453 | }, 454 | "oauth-sign": { 455 | "version": "0.4.0", 456 | "from": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.4.0.tgz", 457 | "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.4.0.tgz" 458 | }, 459 | "hawk": { 460 | "version": "1.1.1", 461 | "from": "https://registry.npmjs.org/hawk/-/hawk-1.1.1.tgz", 462 | "resolved": "https://registry.npmjs.org/hawk/-/hawk-1.1.1.tgz", 463 | "dependencies": { 464 | "hoek": { 465 | "version": "0.9.1", 466 | "from": "https://registry.npmjs.org/hoek/-/hoek-0.9.1.tgz", 467 | "resolved": "https://registry.npmjs.org/hoek/-/hoek-0.9.1.tgz" 468 | }, 469 | "boom": { 470 | "version": "0.4.2", 471 | "from": "https://registry.npmjs.org/boom/-/boom-0.4.2.tgz", 472 | "resolved": "https://registry.npmjs.org/boom/-/boom-0.4.2.tgz" 473 | }, 474 | "cryptiles": { 475 | "version": "0.2.2", 476 | "from": "https://registry.npmjs.org/cryptiles/-/cryptiles-0.2.2.tgz", 477 | "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-0.2.2.tgz" 478 | }, 479 | "sntp": { 480 | "version": "0.2.4", 481 | "from": "https://registry.npmjs.org/sntp/-/sntp-0.2.4.tgz", 482 | "resolved": "https://registry.npmjs.org/sntp/-/sntp-0.2.4.tgz" 483 | } 484 | } 485 | }, 486 | "aws-sign2": { 487 | "version": "0.5.0", 488 | "from": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.5.0.tgz", 489 | "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.5.0.tgz" 490 | }, 491 | "stringstream": { 492 | "version": "0.0.4", 493 | "from": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.4.tgz", 494 | "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.4.tgz" 495 | } 496 | } 497 | } 498 | } 499 | } 500 | --------------------------------------------------------------------------------