├── client
├── .gitignore
├── src
│ ├── index.js
│ ├── App.css
│ └── App.js
├── public
│ └── index.html
├── package.json
└── README.md
├── server
├── .gitignore
├── result.pdf
├── package.json
├── index.js
├── documents
│ └── index.js
└── package-lock.json
└── README.md
/client/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules/
2 |
--------------------------------------------------------------------------------
/server/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules/
2 |
--------------------------------------------------------------------------------
/server/result.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/adrianhajdin/tutorial_pdf_generation/HEAD/server/result.pdf
--------------------------------------------------------------------------------
/client/src/index.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import ReactDOM from 'react-dom';
3 |
4 | import App from './App';
5 |
6 | ReactDOM.render( , document.getElementById('root'));
--------------------------------------------------------------------------------
/server/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "server",
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 | "dependencies": {
12 | "body-parser": "^1.18.3",
13 | "cors": "^2.8.5",
14 | "express": "^4.16.4",
15 | "html-pdf": "^2.2.0"
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/client/public/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
10 |
11 |
12 | React App
13 |
14 |
15 |
16 |
17 |
18 |
--------------------------------------------------------------------------------
/client/src/App.css:
--------------------------------------------------------------------------------
1 | .App {
2 | text-align: center;
3 | }
4 |
5 | .App-logo {
6 | animation: App-logo-spin infinite 20s linear;
7 | height: 40vmin;
8 | }
9 |
10 | .App-header {
11 | background-color: #282c34;
12 | min-height: 100vh;
13 | display: flex;
14 | flex-direction: column;
15 | align-items: center;
16 | justify-content: center;
17 | font-size: calc(10px + 2vmin);
18 | color: white;
19 | }
20 |
21 | .App-link {
22 | color: #61dafb;
23 | }
24 |
25 | @keyframes App-logo-spin {
26 | from {
27 | transform: rotate(0deg);
28 | }
29 | to {
30 | transform: rotate(360deg);
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/client/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "client",
3 | "version": "0.1.0",
4 | "private": true,
5 | "proxy": "http://localhost:5000/",
6 | "dependencies": {
7 | "axios": "^0.18.0",
8 | "file-saver": "^2.0.0",
9 | "react": "^16.7.0",
10 | "react-dom": "^16.7.0",
11 | "react-scripts": "2.1.3"
12 | },
13 | "scripts": {
14 | "start": "react-scripts start",
15 | "build": "react-scripts build",
16 | "test": "react-scripts test",
17 | "eject": "react-scripts eject"
18 | },
19 | "eslintConfig": {
20 | "extends": "react-app"
21 | },
22 | "browserslist": [
23 | ">0.2%",
24 | "not dead",
25 | "not ie <= 11",
26 | "not op_mini all"
27 | ]
28 | }
29 |
--------------------------------------------------------------------------------
/server/index.js:
--------------------------------------------------------------------------------
1 | const express = require('express');
2 | const bodyParser = require('body-parser');
3 | const pdf = require('html-pdf');
4 | const cors = require('cors');
5 |
6 | const pdfTemplate = require('./documents');
7 |
8 | const app = express();
9 |
10 | const port = process.env.PORT || 5000;
11 |
12 | app.use(cors());
13 | app.use(bodyParser.urlencoded({extended: true}));
14 | app.use(bodyParser.json());
15 |
16 | app.post('/create-pdf', (req, res) => {
17 | pdf.create(pdfTemplate(req.body), {}).toFile('result.pdf', (err) => {
18 | if(err) {
19 | res.send(Promise.reject());
20 | }
21 |
22 | res.send(Promise.resolve());
23 | });
24 | });
25 |
26 | app.get('/fetch-pdf', (req, res) => {
27 | res.sendFile(`${__dirname}/result.pdf`)
28 | })
29 |
30 | app.listen(port, () => console.log(`Listening on port ${port}`));
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Generate Dynamic PDFs Using React and NodeJS
2 |
3 | ## Currency Converter Tutorial
4 |
5 | This is a code repository for the corresponding [article](https://medium.freecodecamp.org/how-to-generate-dynamic-pdfs-using-react-and-nodejs-eac9e9cb4dde) on Medium.
6 |
7 | In this tutorial, you will learn how to generate dynamic PDFs using HTML code as a template.
8 |
9 | ## Project Setup
10 |
11 | 1. Create a new directory
12 | ```mkdir pdfGenerator && cd pdfGenerator```
13 | 2. Create a new React App with ```create-react-app client``` and then move into newly created directory and install dependencies ```cd client && npm i -S axios file-saver```
14 | 3. Create an Express server with ```mkdir server && cd server && touch index.js && npm init``` press enter a couple of times to initialize package.json and then run ```npm i -S express body-parser cors html-pdf ``` to save all the necessary dependencies.
15 | 4. Add proxy inside of client/package.json, above the dependencies, simply add ```“proxy”: “http://localhost:5000/"```, so you can call the localhost from the client.
16 | 5. Open two different terminals:
17 | First one: go into the client directory and ```run npm start```
18 | Second one: go into the server directory and ```run nodemon index.js```
19 |
--------------------------------------------------------------------------------
/client/src/App.js:
--------------------------------------------------------------------------------
1 | import React, { Component } from 'react';
2 | import axios from 'axios';
3 | import { saveAs } from 'file-saver';
4 |
5 | import './App.css';
6 |
7 | class App extends Component {
8 | state = {
9 | name: '',
10 | receiptId: 0,
11 | price1: 0,
12 | price2: 0,
13 | }
14 |
15 | handleChange = ({ target: { value, name }}) => this.setState({ [name]: value })
16 |
17 | createAndDownloadPdf = () => {
18 | axios.post('/create-pdf', this.state)
19 | .then(() => axios.get('fetch-pdf', { responseType: 'blob' }))
20 | .then((res) => {
21 | const pdfBlob = new Blob([res.data], { type: 'application/pdf' });
22 |
23 | saveAs(pdfBlob, 'newPdf.pdf');
24 | })
25 | }
26 |
27 | render() {
28 | return (
29 |
30 |
31 |
32 |
33 |
34 | Download PDF
35 |
36 | );
37 | }
38 | }
39 |
40 | export default App;
41 |
--------------------------------------------------------------------------------
/client/README.md:
--------------------------------------------------------------------------------
1 | This project was bootstrapped with [Create React App](https://github.com/facebook/create-react-app).
2 |
3 | ## Available Scripts
4 |
5 | In the project directory, you can run:
6 |
7 | ### `npm start`
8 |
9 | Runs the app in the development mode.
10 | Open [http://localhost:3000](http://localhost:3000) to view it in the browser.
11 |
12 | The page will reload if you make edits.
13 | You will also see any lint errors in the console.
14 |
15 | ### `npm test`
16 |
17 | Launches the test runner in the interactive watch mode.
18 | See the section about [running tests](https://facebook.github.io/create-react-app/docs/running-tests) for more information.
19 |
20 | ### `npm run build`
21 |
22 | Builds the app for production to the `build` folder.
23 | It correctly bundles React in production mode and optimizes the build for the best performance.
24 |
25 | The build is minified and the filenames include the hashes.
26 | Your app is ready to be deployed!
27 |
28 | See the section about [deployment](https://facebook.github.io/create-react-app/docs/deployment) for more information.
29 |
30 | ### `npm run eject`
31 |
32 | **Note: this is a one-way operation. Once you `eject`, you can’t go back!**
33 |
34 | If you aren’t satisfied with the build tool and configuration choices, you can `eject` at any time. This command will remove the single build dependency from your project.
35 |
36 | Instead, it will copy all the configuration files and the transitive dependencies (Webpack, Babel, ESLint, etc) right into your project so you have full control over them. All of the commands except `eject` will still work, but they will point to the copied scripts so you can tweak them. At this point you’re on your own.
37 |
38 | You don’t have to ever use `eject`. The curated feature set is suitable for small and middle deployments, and you shouldn’t feel obligated to use this feature. However we understand that this tool wouldn’t be useful if you couldn’t customize it when you are ready for it.
39 |
40 | ## Learn More
41 |
42 | You can learn more in the [Create React App documentation](https://facebook.github.io/create-react-app/docs/getting-started).
43 |
44 | To learn React, check out the [React documentation](https://reactjs.org/).
45 |
46 | ### Code Splitting
47 |
48 | This section has moved here: https://facebook.github.io/create-react-app/docs/code-splitting
49 |
50 | ### Analyzing the Bundle Size
51 |
52 | This section has moved here: https://facebook.github.io/create-react-app/docs/analyzing-the-bundle-size
53 |
54 | ### Making a Progressive Web App
55 |
56 | This section has moved here: https://facebook.github.io/create-react-app/docs/making-a-progressive-web-app
57 |
58 | ### Advanced Configuration
59 |
60 | This section has moved here: https://facebook.github.io/create-react-app/docs/advanced-configuration
61 |
62 | ### Deployment
63 |
64 | This section has moved here: https://facebook.github.io/create-react-app/docs/deployment
65 |
66 | ### `npm run build` fails to minify
67 |
68 | This section has moved here: https://facebook.github.io/create-react-app/docs/troubleshooting#npm-run-build-fails-to-minify
69 |
--------------------------------------------------------------------------------
/server/documents/index.js:
--------------------------------------------------------------------------------
1 | module.exports = ({ name, price1, price2, receiptId }) => {
2 | const today = new Date();
3 | return `
4 |
5 |
6 |
7 |
8 | PDF Result Template
9 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
91 |
92 | Datum: ${`${today.getDate()}. ${today.getMonth() + 1}. ${today.getFullYear()}.`}
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 | Customer name: ${name}
104 |
105 |
106 | Receipt number: ${receiptId}
107 |
108 |
109 |
110 |
111 |
112 |
113 | Bought items:
114 | Price
115 |
116 |
117 | First item:
118 | ${price1}$
119 |
120 |
121 | Second item:
122 | ${price2}$
123 |
124 |
125 |
126 |
Total price: ${parseInt(price1) + parseInt(price2)}$
127 |
128 |
129 |
130 | `;
131 | };
--------------------------------------------------------------------------------
/server/package-lock.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "server",
3 | "version": "1.0.0",
4 | "lockfileVersion": 1,
5 | "requires": true,
6 | "dependencies": {
7 | "accepts": {
8 | "version": "1.3.5",
9 | "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz",
10 | "integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=",
11 | "requires": {
12 | "mime-types": "~2.1.18",
13 | "negotiator": "0.6.1"
14 | }
15 | },
16 | "ajv": {
17 | "version": "6.7.0",
18 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.7.0.tgz",
19 | "integrity": "sha512-RZXPviBTtfmtka9n9sy1N5M5b82CbxWIR6HIis4s3WQTXDJamc/0gpCWNGz6EWdWp4DOfjzJfhz/AS9zVPjjWg==",
20 | "optional": true,
21 | "requires": {
22 | "fast-deep-equal": "^2.0.1",
23 | "fast-json-stable-stringify": "^2.0.0",
24 | "json-schema-traverse": "^0.4.1",
25 | "uri-js": "^4.2.2"
26 | }
27 | },
28 | "array-flatten": {
29 | "version": "1.1.1",
30 | "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
31 | "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI="
32 | },
33 | "asn1": {
34 | "version": "0.2.4",
35 | "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz",
36 | "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==",
37 | "optional": true,
38 | "requires": {
39 | "safer-buffer": "~2.1.0"
40 | }
41 | },
42 | "assert-plus": {
43 | "version": "1.0.0",
44 | "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
45 | "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU="
46 | },
47 | "asynckit": {
48 | "version": "0.4.0",
49 | "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
50 | "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=",
51 | "optional": true
52 | },
53 | "aws-sign2": {
54 | "version": "0.7.0",
55 | "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
56 | "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=",
57 | "optional": true
58 | },
59 | "aws4": {
60 | "version": "1.8.0",
61 | "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz",
62 | "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==",
63 | "optional": true
64 | },
65 | "bcrypt-pbkdf": {
66 | "version": "1.0.2",
67 | "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz",
68 | "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=",
69 | "optional": true,
70 | "requires": {
71 | "tweetnacl": "^0.14.3"
72 | }
73 | },
74 | "body-parser": {
75 | "version": "1.18.3",
76 | "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.3.tgz",
77 | "integrity": "sha1-WykhmP/dVTs6DyDe0FkrlWlVyLQ=",
78 | "requires": {
79 | "bytes": "3.0.0",
80 | "content-type": "~1.0.4",
81 | "debug": "2.6.9",
82 | "depd": "~1.1.2",
83 | "http-errors": "~1.6.3",
84 | "iconv-lite": "0.4.23",
85 | "on-finished": "~2.3.0",
86 | "qs": "6.5.2",
87 | "raw-body": "2.3.3",
88 | "type-is": "~1.6.16"
89 | }
90 | },
91 | "buffer-from": {
92 | "version": "1.1.1",
93 | "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz",
94 | "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==",
95 | "optional": true
96 | },
97 | "bytes": {
98 | "version": "3.0.0",
99 | "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz",
100 | "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg="
101 | },
102 | "caseless": {
103 | "version": "0.12.0",
104 | "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
105 | "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=",
106 | "optional": true
107 | },
108 | "combined-stream": {
109 | "version": "1.0.7",
110 | "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.7.tgz",
111 | "integrity": "sha512-brWl9y6vOB1xYPZcpZde3N9zDByXTosAeMDo4p1wzo6UMOX4vumB+TP1RZ76sfE6Md68Q0NJSrE/gbezd4Ul+w==",
112 | "requires": {
113 | "delayed-stream": "~1.0.0"
114 | }
115 | },
116 | "concat-stream": {
117 | "version": "1.6.2",
118 | "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz",
119 | "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==",
120 | "optional": true,
121 | "requires": {
122 | "buffer-from": "^1.0.0",
123 | "inherits": "^2.0.3",
124 | "readable-stream": "^2.2.2",
125 | "typedarray": "^0.0.6"
126 | }
127 | },
128 | "content-disposition": {
129 | "version": "0.5.2",
130 | "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz",
131 | "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ="
132 | },
133 | "content-type": {
134 | "version": "1.0.4",
135 | "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz",
136 | "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA=="
137 | },
138 | "cookie": {
139 | "version": "0.3.1",
140 | "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz",
141 | "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s="
142 | },
143 | "cookie-signature": {
144 | "version": "1.0.6",
145 | "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
146 | "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw="
147 | },
148 | "core-util-is": {
149 | "version": "1.0.2",
150 | "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
151 | "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac="
152 | },
153 | "cors": {
154 | "version": "2.8.5",
155 | "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz",
156 | "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==",
157 | "requires": {
158 | "object-assign": "^4",
159 | "vary": "^1"
160 | }
161 | },
162 | "dashdash": {
163 | "version": "1.14.1",
164 | "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
165 | "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=",
166 | "optional": true,
167 | "requires": {
168 | "assert-plus": "^1.0.0"
169 | }
170 | },
171 | "debug": {
172 | "version": "2.6.9",
173 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
174 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
175 | "requires": {
176 | "ms": "2.0.0"
177 | }
178 | },
179 | "delayed-stream": {
180 | "version": "1.0.0",
181 | "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
182 | "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk="
183 | },
184 | "depd": {
185 | "version": "1.1.2",
186 | "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
187 | "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak="
188 | },
189 | "destroy": {
190 | "version": "1.0.4",
191 | "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz",
192 | "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA="
193 | },
194 | "ecc-jsbn": {
195 | "version": "0.1.2",
196 | "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz",
197 | "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=",
198 | "optional": true,
199 | "requires": {
200 | "jsbn": "~0.1.0",
201 | "safer-buffer": "^2.1.0"
202 | }
203 | },
204 | "ee-first": {
205 | "version": "1.1.1",
206 | "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
207 | "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0="
208 | },
209 | "encodeurl": {
210 | "version": "1.0.2",
211 | "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
212 | "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k="
213 | },
214 | "es6-promise": {
215 | "version": "4.2.5",
216 | "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.5.tgz",
217 | "integrity": "sha512-n6wvpdE43VFtJq+lUDYDBFUwV8TZbuGXLV4D6wKafg13ldznKsyEvatubnmUe31zcvelSzOHF+XbaT+Bl9ObDg==",
218 | "optional": true
219 | },
220 | "escape-html": {
221 | "version": "1.0.3",
222 | "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
223 | "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg="
224 | },
225 | "etag": {
226 | "version": "1.8.1",
227 | "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
228 | "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc="
229 | },
230 | "express": {
231 | "version": "4.16.4",
232 | "resolved": "https://registry.npmjs.org/express/-/express-4.16.4.tgz",
233 | "integrity": "sha512-j12Uuyb4FMrd/qQAm6uCHAkPtO8FDTRJZBDd5D2KOL2eLaz1yUNdUB/NOIyq0iU4q4cFarsUCrnFDPBcnksuOg==",
234 | "requires": {
235 | "accepts": "~1.3.5",
236 | "array-flatten": "1.1.1",
237 | "body-parser": "1.18.3",
238 | "content-disposition": "0.5.2",
239 | "content-type": "~1.0.4",
240 | "cookie": "0.3.1",
241 | "cookie-signature": "1.0.6",
242 | "debug": "2.6.9",
243 | "depd": "~1.1.2",
244 | "encodeurl": "~1.0.2",
245 | "escape-html": "~1.0.3",
246 | "etag": "~1.8.1",
247 | "finalhandler": "1.1.1",
248 | "fresh": "0.5.2",
249 | "merge-descriptors": "1.0.1",
250 | "methods": "~1.1.2",
251 | "on-finished": "~2.3.0",
252 | "parseurl": "~1.3.2",
253 | "path-to-regexp": "0.1.7",
254 | "proxy-addr": "~2.0.4",
255 | "qs": "6.5.2",
256 | "range-parser": "~1.2.0",
257 | "safe-buffer": "5.1.2",
258 | "send": "0.16.2",
259 | "serve-static": "1.13.2",
260 | "setprototypeof": "1.1.0",
261 | "statuses": "~1.4.0",
262 | "type-is": "~1.6.16",
263 | "utils-merge": "1.0.1",
264 | "vary": "~1.1.2"
265 | },
266 | "dependencies": {
267 | "statuses": {
268 | "version": "1.4.0",
269 | "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz",
270 | "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew=="
271 | }
272 | }
273 | },
274 | "extend": {
275 | "version": "3.0.2",
276 | "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
277 | "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==",
278 | "optional": true
279 | },
280 | "extract-zip": {
281 | "version": "1.6.7",
282 | "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.6.7.tgz",
283 | "integrity": "sha1-qEC0uK9kAyZMjbV/Txp0Mz74H+k=",
284 | "optional": true,
285 | "requires": {
286 | "concat-stream": "1.6.2",
287 | "debug": "2.6.9",
288 | "mkdirp": "0.5.1",
289 | "yauzl": "2.4.1"
290 | }
291 | },
292 | "extsprintf": {
293 | "version": "1.3.0",
294 | "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
295 | "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU="
296 | },
297 | "fast-deep-equal": {
298 | "version": "2.0.1",
299 | "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz",
300 | "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=",
301 | "optional": true
302 | },
303 | "fast-json-stable-stringify": {
304 | "version": "2.0.0",
305 | "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz",
306 | "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=",
307 | "optional": true
308 | },
309 | "fd-slicer": {
310 | "version": "1.0.1",
311 | "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.0.1.tgz",
312 | "integrity": "sha1-i1vL2ewyfFBBv5qwI/1nUPEXfmU=",
313 | "optional": true,
314 | "requires": {
315 | "pend": "~1.2.0"
316 | }
317 | },
318 | "finalhandler": {
319 | "version": "1.1.1",
320 | "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.1.tgz",
321 | "integrity": "sha512-Y1GUDo39ez4aHAw7MysnUD5JzYX+WaIj8I57kO3aEPT1fFRL4sr7mjei97FgnwhAyyzRYmQZaTHb2+9uZ1dPtg==",
322 | "requires": {
323 | "debug": "2.6.9",
324 | "encodeurl": "~1.0.2",
325 | "escape-html": "~1.0.3",
326 | "on-finished": "~2.3.0",
327 | "parseurl": "~1.3.2",
328 | "statuses": "~1.4.0",
329 | "unpipe": "~1.0.0"
330 | },
331 | "dependencies": {
332 | "statuses": {
333 | "version": "1.4.0",
334 | "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz",
335 | "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew=="
336 | }
337 | }
338 | },
339 | "forever-agent": {
340 | "version": "0.6.1",
341 | "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
342 | "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=",
343 | "optional": true
344 | },
345 | "form-data": {
346 | "version": "2.3.3",
347 | "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz",
348 | "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==",
349 | "optional": true,
350 | "requires": {
351 | "asynckit": "^0.4.0",
352 | "combined-stream": "^1.0.6",
353 | "mime-types": "^2.1.12"
354 | }
355 | },
356 | "forwarded": {
357 | "version": "0.1.2",
358 | "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz",
359 | "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ="
360 | },
361 | "fresh": {
362 | "version": "0.5.2",
363 | "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
364 | "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac="
365 | },
366 | "fs-extra": {
367 | "version": "1.0.0",
368 | "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-1.0.0.tgz",
369 | "integrity": "sha1-zTzl9+fLYUWIP8rjGR6Yd/hYeVA=",
370 | "optional": true,
371 | "requires": {
372 | "graceful-fs": "^4.1.2",
373 | "jsonfile": "^2.1.0",
374 | "klaw": "^1.0.0"
375 | }
376 | },
377 | "getpass": {
378 | "version": "0.1.7",
379 | "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
380 | "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=",
381 | "optional": true,
382 | "requires": {
383 | "assert-plus": "^1.0.0"
384 | }
385 | },
386 | "graceful-fs": {
387 | "version": "4.1.15",
388 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz",
389 | "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==",
390 | "optional": true
391 | },
392 | "har-schema": {
393 | "version": "2.0.0",
394 | "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz",
395 | "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=",
396 | "optional": true
397 | },
398 | "har-validator": {
399 | "version": "5.1.3",
400 | "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz",
401 | "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==",
402 | "optional": true,
403 | "requires": {
404 | "ajv": "^6.5.5",
405 | "har-schema": "^2.0.0"
406 | }
407 | },
408 | "hasha": {
409 | "version": "2.2.0",
410 | "resolved": "https://registry.npmjs.org/hasha/-/hasha-2.2.0.tgz",
411 | "integrity": "sha1-eNfL/B5tZjA/55g3NlmEUXsvbuE=",
412 | "optional": true,
413 | "requires": {
414 | "is-stream": "^1.0.1",
415 | "pinkie-promise": "^2.0.0"
416 | }
417 | },
418 | "html-pdf": {
419 | "version": "2.2.0",
420 | "resolved": "https://registry.npmjs.org/html-pdf/-/html-pdf-2.2.0.tgz",
421 | "integrity": "sha1-S8+Rwky1YOR6o/rP0DPg4b8kG5E=",
422 | "requires": {
423 | "phantomjs-prebuilt": "^2.1.4"
424 | }
425 | },
426 | "http-errors": {
427 | "version": "1.6.3",
428 | "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz",
429 | "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=",
430 | "requires": {
431 | "depd": "~1.1.2",
432 | "inherits": "2.0.3",
433 | "setprototypeof": "1.1.0",
434 | "statuses": ">= 1.4.0 < 2"
435 | }
436 | },
437 | "http-signature": {
438 | "version": "1.2.0",
439 | "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
440 | "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=",
441 | "optional": true,
442 | "requires": {
443 | "assert-plus": "^1.0.0",
444 | "jsprim": "^1.2.2",
445 | "sshpk": "^1.7.0"
446 | }
447 | },
448 | "iconv-lite": {
449 | "version": "0.4.23",
450 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz",
451 | "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==",
452 | "requires": {
453 | "safer-buffer": ">= 2.1.2 < 3"
454 | }
455 | },
456 | "inherits": {
457 | "version": "2.0.3",
458 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
459 | "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
460 | },
461 | "ipaddr.js": {
462 | "version": "1.8.0",
463 | "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.8.0.tgz",
464 | "integrity": "sha1-6qM9bd16zo9/b+DJygRA5wZzix4="
465 | },
466 | "is-stream": {
467 | "version": "1.1.0",
468 | "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
469 | "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=",
470 | "optional": true
471 | },
472 | "is-typedarray": {
473 | "version": "1.0.0",
474 | "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
475 | "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=",
476 | "optional": true
477 | },
478 | "isarray": {
479 | "version": "1.0.0",
480 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
481 | "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
482 | "optional": true
483 | },
484 | "isexe": {
485 | "version": "2.0.0",
486 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
487 | "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
488 | "optional": true
489 | },
490 | "isstream": {
491 | "version": "0.1.2",
492 | "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
493 | "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=",
494 | "optional": true
495 | },
496 | "jsbn": {
497 | "version": "0.1.1",
498 | "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
499 | "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM="
500 | },
501 | "json-schema": {
502 | "version": "0.2.3",
503 | "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz",
504 | "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=",
505 | "optional": true
506 | },
507 | "json-schema-traverse": {
508 | "version": "0.4.1",
509 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
510 | "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
511 | "optional": true
512 | },
513 | "json-stringify-safe": {
514 | "version": "5.0.1",
515 | "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
516 | "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=",
517 | "optional": true
518 | },
519 | "jsonfile": {
520 | "version": "2.4.0",
521 | "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz",
522 | "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=",
523 | "optional": true,
524 | "requires": {
525 | "graceful-fs": "^4.1.6"
526 | }
527 | },
528 | "jsprim": {
529 | "version": "1.4.1",
530 | "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz",
531 | "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=",
532 | "optional": true,
533 | "requires": {
534 | "assert-plus": "1.0.0",
535 | "extsprintf": "1.3.0",
536 | "json-schema": "0.2.3",
537 | "verror": "1.10.0"
538 | }
539 | },
540 | "kew": {
541 | "version": "0.7.0",
542 | "resolved": "https://registry.npmjs.org/kew/-/kew-0.7.0.tgz",
543 | "integrity": "sha1-edk9LTM2PW/dKXCzNdkUGtWR15s=",
544 | "optional": true
545 | },
546 | "klaw": {
547 | "version": "1.3.1",
548 | "resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz",
549 | "integrity": "sha1-QIhDO0azsbolnXh4XY6W9zugJDk=",
550 | "optional": true,
551 | "requires": {
552 | "graceful-fs": "^4.1.9"
553 | }
554 | },
555 | "media-typer": {
556 | "version": "0.3.0",
557 | "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
558 | "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g="
559 | },
560 | "merge-descriptors": {
561 | "version": "1.0.1",
562 | "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
563 | "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E="
564 | },
565 | "methods": {
566 | "version": "1.1.2",
567 | "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
568 | "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4="
569 | },
570 | "mime": {
571 | "version": "1.4.1",
572 | "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz",
573 | "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ=="
574 | },
575 | "mime-db": {
576 | "version": "1.37.0",
577 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.37.0.tgz",
578 | "integrity": "sha512-R3C4db6bgQhlIhPU48fUtdVmKnflq+hRdad7IyKhtFj06VPNVdk2RhiYL3UjQIlso8L+YxAtFkobT0VK+S/ybg=="
579 | },
580 | "mime-types": {
581 | "version": "2.1.21",
582 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.21.tgz",
583 | "integrity": "sha512-3iL6DbwpyLzjR3xHSFNFeb9Nz/M8WDkX33t1GFQnFOllWk8pOrh/LSrB5OXlnlW5P9LH73X6loW/eogc+F5lJg==",
584 | "requires": {
585 | "mime-db": "~1.37.0"
586 | }
587 | },
588 | "minimist": {
589 | "version": "0.0.8",
590 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
591 | "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=",
592 | "optional": true
593 | },
594 | "mkdirp": {
595 | "version": "0.5.1",
596 | "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
597 | "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
598 | "optional": true,
599 | "requires": {
600 | "minimist": "0.0.8"
601 | }
602 | },
603 | "ms": {
604 | "version": "2.0.0",
605 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
606 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
607 | },
608 | "negotiator": {
609 | "version": "0.6.1",
610 | "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz",
611 | "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk="
612 | },
613 | "oauth-sign": {
614 | "version": "0.9.0",
615 | "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz",
616 | "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==",
617 | "optional": true
618 | },
619 | "object-assign": {
620 | "version": "4.1.1",
621 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
622 | "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM="
623 | },
624 | "on-finished": {
625 | "version": "2.3.0",
626 | "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
627 | "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=",
628 | "requires": {
629 | "ee-first": "1.1.1"
630 | }
631 | },
632 | "parseurl": {
633 | "version": "1.3.2",
634 | "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz",
635 | "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M="
636 | },
637 | "path-to-regexp": {
638 | "version": "0.1.7",
639 | "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
640 | "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w="
641 | },
642 | "pend": {
643 | "version": "1.2.0",
644 | "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz",
645 | "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=",
646 | "optional": true
647 | },
648 | "performance-now": {
649 | "version": "2.1.0",
650 | "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
651 | "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=",
652 | "optional": true
653 | },
654 | "phantomjs-prebuilt": {
655 | "version": "2.1.16",
656 | "resolved": "https://registry.npmjs.org/phantomjs-prebuilt/-/phantomjs-prebuilt-2.1.16.tgz",
657 | "integrity": "sha1-79ISpKOWbTZHaE6ouniFSb4q7+8=",
658 | "optional": true,
659 | "requires": {
660 | "es6-promise": "^4.0.3",
661 | "extract-zip": "^1.6.5",
662 | "fs-extra": "^1.0.0",
663 | "hasha": "^2.2.0",
664 | "kew": "^0.7.0",
665 | "progress": "^1.1.8",
666 | "request": "^2.81.0",
667 | "request-progress": "^2.0.1",
668 | "which": "^1.2.10"
669 | }
670 | },
671 | "pinkie": {
672 | "version": "2.0.4",
673 | "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz",
674 | "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=",
675 | "optional": true
676 | },
677 | "pinkie-promise": {
678 | "version": "2.0.1",
679 | "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz",
680 | "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=",
681 | "optional": true,
682 | "requires": {
683 | "pinkie": "^2.0.0"
684 | }
685 | },
686 | "process-nextick-args": {
687 | "version": "2.0.0",
688 | "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz",
689 | "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==",
690 | "optional": true
691 | },
692 | "progress": {
693 | "version": "1.1.8",
694 | "resolved": "https://registry.npmjs.org/progress/-/progress-1.1.8.tgz",
695 | "integrity": "sha1-4mDHj2Fhzdmw5WzD4Khd4Xx6V74=",
696 | "optional": true
697 | },
698 | "proxy-addr": {
699 | "version": "2.0.4",
700 | "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.4.tgz",
701 | "integrity": "sha512-5erio2h9jp5CHGwcybmxmVqHmnCBZeewlfJ0pex+UW7Qny7OOZXTtH56TGNyBizkgiOwhJtMKrVzDTeKcySZwA==",
702 | "requires": {
703 | "forwarded": "~0.1.2",
704 | "ipaddr.js": "1.8.0"
705 | }
706 | },
707 | "psl": {
708 | "version": "1.1.31",
709 | "resolved": "https://registry.npmjs.org/psl/-/psl-1.1.31.tgz",
710 | "integrity": "sha512-/6pt4+C+T+wZUieKR620OpzN/LlnNKuWjy1iFLQ/UG35JqHlR/89MP1d96dUfkf6Dne3TuLQzOYEYshJ+Hx8mw==",
711 | "optional": true
712 | },
713 | "punycode": {
714 | "version": "2.1.1",
715 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
716 | "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==",
717 | "optional": true
718 | },
719 | "qs": {
720 | "version": "6.5.2",
721 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz",
722 | "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA=="
723 | },
724 | "range-parser": {
725 | "version": "1.2.0",
726 | "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz",
727 | "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4="
728 | },
729 | "raw-body": {
730 | "version": "2.3.3",
731 | "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.3.tgz",
732 | "integrity": "sha512-9esiElv1BrZoI3rCDuOuKCBRbuApGGaDPQfjSflGxdy4oyzqghxu6klEkkVIvBje+FF0BX9coEv8KqW6X/7njw==",
733 | "requires": {
734 | "bytes": "3.0.0",
735 | "http-errors": "1.6.3",
736 | "iconv-lite": "0.4.23",
737 | "unpipe": "1.0.0"
738 | }
739 | },
740 | "readable-stream": {
741 | "version": "2.3.6",
742 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
743 | "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
744 | "optional": true,
745 | "requires": {
746 | "core-util-is": "~1.0.0",
747 | "inherits": "~2.0.3",
748 | "isarray": "~1.0.0",
749 | "process-nextick-args": "~2.0.0",
750 | "safe-buffer": "~5.1.1",
751 | "string_decoder": "~1.1.1",
752 | "util-deprecate": "~1.0.1"
753 | }
754 | },
755 | "request": {
756 | "version": "2.88.0",
757 | "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz",
758 | "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==",
759 | "optional": true,
760 | "requires": {
761 | "aws-sign2": "~0.7.0",
762 | "aws4": "^1.8.0",
763 | "caseless": "~0.12.0",
764 | "combined-stream": "~1.0.6",
765 | "extend": "~3.0.2",
766 | "forever-agent": "~0.6.1",
767 | "form-data": "~2.3.2",
768 | "har-validator": "~5.1.0",
769 | "http-signature": "~1.2.0",
770 | "is-typedarray": "~1.0.0",
771 | "isstream": "~0.1.2",
772 | "json-stringify-safe": "~5.0.1",
773 | "mime-types": "~2.1.19",
774 | "oauth-sign": "~0.9.0",
775 | "performance-now": "^2.1.0",
776 | "qs": "~6.5.2",
777 | "safe-buffer": "^5.1.2",
778 | "tough-cookie": "~2.4.3",
779 | "tunnel-agent": "^0.6.0",
780 | "uuid": "^3.3.2"
781 | }
782 | },
783 | "request-progress": {
784 | "version": "2.0.1",
785 | "resolved": "https://registry.npmjs.org/request-progress/-/request-progress-2.0.1.tgz",
786 | "integrity": "sha1-XTa7V5YcZzqlt4jbyBQf3yO0Tgg=",
787 | "optional": true,
788 | "requires": {
789 | "throttleit": "^1.0.0"
790 | }
791 | },
792 | "safe-buffer": {
793 | "version": "5.1.2",
794 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
795 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
796 | },
797 | "safer-buffer": {
798 | "version": "2.1.2",
799 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
800 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
801 | },
802 | "send": {
803 | "version": "0.16.2",
804 | "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz",
805 | "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==",
806 | "requires": {
807 | "debug": "2.6.9",
808 | "depd": "~1.1.2",
809 | "destroy": "~1.0.4",
810 | "encodeurl": "~1.0.2",
811 | "escape-html": "~1.0.3",
812 | "etag": "~1.8.1",
813 | "fresh": "0.5.2",
814 | "http-errors": "~1.6.2",
815 | "mime": "1.4.1",
816 | "ms": "2.0.0",
817 | "on-finished": "~2.3.0",
818 | "range-parser": "~1.2.0",
819 | "statuses": "~1.4.0"
820 | },
821 | "dependencies": {
822 | "statuses": {
823 | "version": "1.4.0",
824 | "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz",
825 | "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew=="
826 | }
827 | }
828 | },
829 | "serve-static": {
830 | "version": "1.13.2",
831 | "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz",
832 | "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==",
833 | "requires": {
834 | "encodeurl": "~1.0.2",
835 | "escape-html": "~1.0.3",
836 | "parseurl": "~1.3.2",
837 | "send": "0.16.2"
838 | }
839 | },
840 | "setprototypeof": {
841 | "version": "1.1.0",
842 | "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz",
843 | "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ=="
844 | },
845 | "sshpk": {
846 | "version": "1.16.1",
847 | "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz",
848 | "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==",
849 | "optional": true,
850 | "requires": {
851 | "asn1": "~0.2.3",
852 | "assert-plus": "^1.0.0",
853 | "bcrypt-pbkdf": "^1.0.0",
854 | "dashdash": "^1.12.0",
855 | "ecc-jsbn": "~0.1.1",
856 | "getpass": "^0.1.1",
857 | "jsbn": "~0.1.0",
858 | "safer-buffer": "^2.0.2",
859 | "tweetnacl": "~0.14.0"
860 | }
861 | },
862 | "statuses": {
863 | "version": "1.5.0",
864 | "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
865 | "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow="
866 | },
867 | "string_decoder": {
868 | "version": "1.1.1",
869 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
870 | "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
871 | "optional": true,
872 | "requires": {
873 | "safe-buffer": "~5.1.0"
874 | }
875 | },
876 | "throttleit": {
877 | "version": "1.0.0",
878 | "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-1.0.0.tgz",
879 | "integrity": "sha1-nnhYNtr0Z0MUWlmEtiaNgoUorGw=",
880 | "optional": true
881 | },
882 | "tough-cookie": {
883 | "version": "2.4.3",
884 | "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz",
885 | "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==",
886 | "optional": true,
887 | "requires": {
888 | "psl": "^1.1.24",
889 | "punycode": "^1.4.1"
890 | },
891 | "dependencies": {
892 | "punycode": {
893 | "version": "1.4.1",
894 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
895 | "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=",
896 | "optional": true
897 | }
898 | }
899 | },
900 | "tunnel-agent": {
901 | "version": "0.6.0",
902 | "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
903 | "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=",
904 | "optional": true,
905 | "requires": {
906 | "safe-buffer": "^5.0.1"
907 | }
908 | },
909 | "tweetnacl": {
910 | "version": "0.14.5",
911 | "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
912 | "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q="
913 | },
914 | "type-is": {
915 | "version": "1.6.16",
916 | "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.16.tgz",
917 | "integrity": "sha512-HRkVv/5qY2G6I8iab9cI7v1bOIdhm94dVjQCPFElW9W+3GeDOSHmy2EBYe4VTApuzolPcmgFTN3ftVJRKR2J9Q==",
918 | "requires": {
919 | "media-typer": "0.3.0",
920 | "mime-types": "~2.1.18"
921 | }
922 | },
923 | "typedarray": {
924 | "version": "0.0.6",
925 | "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
926 | "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=",
927 | "optional": true
928 | },
929 | "unpipe": {
930 | "version": "1.0.0",
931 | "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
932 | "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw="
933 | },
934 | "uri-js": {
935 | "version": "4.2.2",
936 | "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz",
937 | "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==",
938 | "optional": true,
939 | "requires": {
940 | "punycode": "^2.1.0"
941 | }
942 | },
943 | "util-deprecate": {
944 | "version": "1.0.2",
945 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
946 | "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
947 | "optional": true
948 | },
949 | "utils-merge": {
950 | "version": "1.0.1",
951 | "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
952 | "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM="
953 | },
954 | "uuid": {
955 | "version": "3.3.2",
956 | "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz",
957 | "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==",
958 | "optional": true
959 | },
960 | "vary": {
961 | "version": "1.1.2",
962 | "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
963 | "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw="
964 | },
965 | "verror": {
966 | "version": "1.10.0",
967 | "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
968 | "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=",
969 | "optional": true,
970 | "requires": {
971 | "assert-plus": "^1.0.0",
972 | "core-util-is": "1.0.2",
973 | "extsprintf": "^1.2.0"
974 | }
975 | },
976 | "which": {
977 | "version": "1.3.1",
978 | "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
979 | "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
980 | "optional": true,
981 | "requires": {
982 | "isexe": "^2.0.0"
983 | }
984 | },
985 | "yauzl": {
986 | "version": "2.4.1",
987 | "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.4.1.tgz",
988 | "integrity": "sha1-lSj0QtqxsihOWLQ3m7GU4i4MQAU=",
989 | "optional": true,
990 | "requires": {
991 | "fd-slicer": "~1.0.1"
992 | }
993 | }
994 | }
995 | }
996 |
--------------------------------------------------------------------------------