├── .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 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
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 |
--------------------------------------------------------------------------------