├── app
├── models
│ ├── readme.md
│ ├── negociacoes.ts
│ └── negociacao.ts
├── views
│ └── readme.md
├── controllers
│ ├── readme.md
│ └── negociacao-controller.ts
└── app.ts
├── .gitignore
├── .vscode
└── settings.json
├── tsconfig.json
├── servidor-api
├── server.js
├── app
│ ├── routes
│ │ └── index.js
│ └── api
│ │ └── index.js
├── package.json
├── config
│ └── express.js
└── package-lock.json
├── dist
├── js
│ ├── models
│ │ ├── negociacoes.js
│ │ └── negociacao.js
│ ├── app.js
│ └── controllers
│ │ └── negociacao-controller.js
└── index.html
└── package.json
/app/models/readme.md:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/app/views/readme.md:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/app/controllers/readme.md:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | /node_modules
2 | /servidor-api/node_modules
--------------------------------------------------------------------------------
/.vscode/settings.json:
--------------------------------------------------------------------------------
1 | {
2 | "typescript.tsdk": "node_modules/typescript/lib"
3 | }
--------------------------------------------------------------------------------
/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "outDir": "dist/js",
4 | "target": "ES6",
5 | "noEmitOnError": true,
6 | "noImplicitAny": true
7 | },
8 | "include": ["app/**/*"]
9 | }
--------------------------------------------------------------------------------
/servidor-api/server.js:
--------------------------------------------------------------------------------
1 | var http = require('http')
2 | ,app = require('./config/express');
3 |
4 | http.createServer(app).listen(8080, function() {
5 | console.log('Servidor escutando na porta: ' + this.address().port);
6 | });
7 |
8 |
--------------------------------------------------------------------------------
/servidor-api/app/routes/index.js:
--------------------------------------------------------------------------------
1 | /* Código simplório, apenas para fornecer o serviço para a aplicação */
2 |
3 | var api = require('../api');
4 |
5 | module.exports = function(app) {
6 |
7 | app.route('/dados')
8 | .get(api.dados);
9 | };
--------------------------------------------------------------------------------
/dist/js/models/negociacoes.js:
--------------------------------------------------------------------------------
1 | export class Negociacoes {
2 | constructor() {
3 | this.negociacoes = [];
4 | }
5 | adiciona(negociacao) {
6 | this.negociacoes.push(negociacao);
7 | }
8 | lista() {
9 | return this.negociacoes;
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/app/app.ts:
--------------------------------------------------------------------------------
1 | import { NegociacaoController } from './controllers/negociacao-controller.js';
2 |
3 | const controller = new NegociacaoController();
4 | const form = document.querySelector('.form');
5 | form.addEventListener('submit', event => {
6 | event.preventDefault();
7 | controller.adiciona();
8 | });
--------------------------------------------------------------------------------
/dist/js/app.js:
--------------------------------------------------------------------------------
1 | import { NegociacaoController } from './controllers/negociacao-controller.js';
2 | const controller = new NegociacaoController();
3 | const form = document.querySelector('.form');
4 | form.addEventListener('submit', event => {
5 | event.preventDefault();
6 | controller.adiciona();
7 | });
8 |
--------------------------------------------------------------------------------
/app/models/negociacoes.ts:
--------------------------------------------------------------------------------
1 | import { Negociacao } from './negociacao.js';
2 |
3 | export class Negociacoes {
4 | private negociacoes: Negociacao[] = [];
5 |
6 | adiciona(negociacao: Negociacao) {
7 | this.negociacoes.push(negociacao);
8 | }
9 |
10 | lista(): readonly Negociacao[] {
11 | return this.negociacoes;
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/dist/js/models/negociacao.js:
--------------------------------------------------------------------------------
1 | export class Negociacao {
2 | constructor(_data, quantidade, valor) {
3 | this._data = _data;
4 | this.quantidade = quantidade;
5 | this.valor = valor;
6 | }
7 | get volume() {
8 | return this.quantidade * this.valor;
9 | }
10 | get data() {
11 | const data = new Date(this._data.getTime());
12 | return data;
13 | }
14 | }
15 |
--------------------------------------------------------------------------------
/servidor-api/app/api/index.js:
--------------------------------------------------------------------------------
1 | /* Código simplório, apenas para fornecer o serviço para a aplicação */
2 | var api = {}
3 |
4 |
5 | api.dados = function(req, res) {
6 |
7 | res.json([
8 | { montante: 200.5, vezes: 2 },
9 | { montante: 100.2, vezes: 5 },
10 | { montante: 50.5, vezes: 1 },
11 | { montante: 70.5, vezes: 2 }
12 | ]);
13 |
14 | };
15 |
16 |
17 | module.exports = api;
--------------------------------------------------------------------------------
/servidor-api/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "app",
3 | "version": "1.0.0",
4 | "description": "",
5 | "main": "server.js",
6 | "scripts": {
7 | "test": "echo \"Error: no test specified\" && exit 1",
8 | "start": "node server.js"
9 | },
10 | "author": "",
11 | "license": "ISC",
12 | "dependencies": {},
13 | "devDependencies": {
14 | "body-parser": "^1.19.0",
15 | "express": "^4.17.1"
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/app/models/negociacao.ts:
--------------------------------------------------------------------------------
1 | export class Negociacao {
2 | constructor(
3 | private _data: Date,
4 | public readonly quantidade: number,
5 | public readonly valor: number
6 | ) {}
7 |
8 | get volume(): number {
9 | return this.quantidade * this.valor;
10 | }
11 |
12 | get data(): Date {
13 | const data = new Date(this._data.getTime());
14 | return data;
15 | }
16 | }
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "alurabank",
3 | "version": "1.0.0",
4 | "description": "",
5 | "main": "index.js",
6 | "scripts": {
7 | "test": "echo \"Error: no test specified\" && exit 1",
8 | "server": "lite-server --baseDir=dist",
9 | "start": "concurrently \"npm run watch\" \"npm run server\"",
10 | "compile": "tsc",
11 | "watch": "tsc -w"
12 | },
13 | "author": "",
14 | "license": "ISC",
15 | "devDependencies": {
16 | "concurrently": "^6.0.0",
17 | "lite-server": "^2.6.1",
18 | "typescript": "^4.2.2"
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/servidor-api/config/express.js:
--------------------------------------------------------------------------------
1 | /* Código simplório, apenas para fornecer o serviço para a aplicação */
2 |
3 | var express = require('express')
4 | ,app = express()
5 | ,routes = require('../app/routes')
6 | ,path = require('path')
7 | ,bodyParser = require('body-parser');
8 |
9 | app.use(bodyParser.json());
10 |
11 | app.use(function(req, res, next) {
12 | res.header("Access-Control-Allow-Origin", "*");
13 | res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
14 | next();
15 | });
16 |
17 | routes(app);
18 |
19 | module.exports = app;
--------------------------------------------------------------------------------
/dist/js/controllers/negociacao-controller.js:
--------------------------------------------------------------------------------
1 | import { Negociacao } from '../models/negociacao.js';
2 | import { Negociacoes } from '../models/negociacoes.js';
3 | export class NegociacaoController {
4 | constructor() {
5 | this.negociacoes = new Negociacoes();
6 | this.inputData = document.querySelector('#data');
7 | this.inputQuantidade = document.querySelector('#quantidade');
8 | this.inputValor = document.querySelector('#valor');
9 | }
10 | adiciona() {
11 | const negociacao = this.criaNegociacao();
12 | negociacao.data.setDate(12);
13 | this.negociacoes.adiciona(negociacao);
14 | console.log(this.negociacoes.lista());
15 | this.limparFormulario();
16 | }
17 | criaNegociacao() {
18 | const exp = /-/g;
19 | const date = new Date(this.inputData.value.replace(exp, ','));
20 | const quantidade = parseInt(this.inputQuantidade.value);
21 | const valor = parseFloat(this.inputValor.value);
22 | return new Negociacao(date, quantidade, valor);
23 | }
24 | limparFormulario() {
25 | this.inputData.value = '';
26 | this.inputQuantidade.value = '';
27 | this.inputValor.value = '';
28 | this.inputData.focus();
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/dist/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | Negociações
7 |
8 |
9 |
10 |
11 |
12 | Negociações
13 |
14 |
15 |
16 |
35 |
36 |
37 |
38 |
39 |
--------------------------------------------------------------------------------
/app/controllers/negociacao-controller.ts:
--------------------------------------------------------------------------------
1 | import { Negociacao } from '../models/negociacao.js';
2 | import { Negociacoes } from '../models/negociacoes.js';
3 |
4 | export class NegociacaoController {
5 | private inputData: HTMLInputElement;
6 | private inputQuantidade: HTMLInputElement;
7 | private inputValor: HTMLInputElement;
8 | private negociacoes = new Negociacoes();
9 |
10 | constructor() {
11 | this.inputData = document.querySelector('#data');
12 | this.inputQuantidade = document.querySelector('#quantidade');
13 | this.inputValor = document.querySelector('#valor');
14 | }
15 |
16 | adiciona(): void {
17 | const negociacao = this.criaNegociacao();
18 | negociacao.data.setDate(12);
19 | this.negociacoes.adiciona(negociacao);
20 | console.log(this.negociacoes.lista());
21 | this.limparFormulario();
22 | }
23 |
24 | criaNegociacao(): Negociacao {
25 | const exp = /-/g;
26 | const date = new Date(this.inputData.value.replace(exp, ','));
27 | const quantidade = parseInt(this.inputQuantidade.value);
28 | const valor = parseFloat(this.inputValor.value);
29 | return new Negociacao(date, quantidade, valor);
30 | }
31 |
32 | limparFormulario(): void {
33 | this.inputData.value = '';
34 | this.inputQuantidade.value = '';
35 | this.inputValor.value = '';
36 | this.inputData.focus();
37 | }
38 | }
39 |
--------------------------------------------------------------------------------
/servidor-api/package-lock.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "app",
3 | "version": "1.0.0",
4 | "lockfileVersion": 1,
5 | "requires": true,
6 | "dependencies": {
7 | "accepts": {
8 | "version": "1.3.7",
9 | "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz",
10 | "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==",
11 | "dev": true,
12 | "requires": {
13 | "mime-types": "~2.1.24",
14 | "negotiator": "0.6.2"
15 | }
16 | },
17 | "array-flatten": {
18 | "version": "1.1.1",
19 | "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
20 | "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=",
21 | "dev": true
22 | },
23 | "body-parser": {
24 | "version": "1.19.0",
25 | "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz",
26 | "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==",
27 | "dev": true,
28 | "requires": {
29 | "bytes": "3.1.0",
30 | "content-type": "~1.0.4",
31 | "debug": "2.6.9",
32 | "depd": "~1.1.2",
33 | "http-errors": "1.7.2",
34 | "iconv-lite": "0.4.24",
35 | "on-finished": "~2.3.0",
36 | "qs": "6.7.0",
37 | "raw-body": "2.4.0",
38 | "type-is": "~1.6.17"
39 | }
40 | },
41 | "bytes": {
42 | "version": "3.1.0",
43 | "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz",
44 | "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==",
45 | "dev": true
46 | },
47 | "content-disposition": {
48 | "version": "0.5.3",
49 | "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz",
50 | "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==",
51 | "dev": true,
52 | "requires": {
53 | "safe-buffer": "5.1.2"
54 | }
55 | },
56 | "content-type": {
57 | "version": "1.0.4",
58 | "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz",
59 | "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==",
60 | "dev": true
61 | },
62 | "cookie": {
63 | "version": "0.4.0",
64 | "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz",
65 | "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==",
66 | "dev": true
67 | },
68 | "cookie-signature": {
69 | "version": "1.0.6",
70 | "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
71 | "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=",
72 | "dev": true
73 | },
74 | "debug": {
75 | "version": "2.6.9",
76 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
77 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
78 | "dev": true,
79 | "requires": {
80 | "ms": "2.0.0"
81 | }
82 | },
83 | "depd": {
84 | "version": "1.1.2",
85 | "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
86 | "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=",
87 | "dev": true
88 | },
89 | "destroy": {
90 | "version": "1.0.4",
91 | "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz",
92 | "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=",
93 | "dev": true
94 | },
95 | "ee-first": {
96 | "version": "1.1.1",
97 | "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
98 | "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=",
99 | "dev": true
100 | },
101 | "encodeurl": {
102 | "version": "1.0.2",
103 | "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
104 | "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=",
105 | "dev": true
106 | },
107 | "escape-html": {
108 | "version": "1.0.3",
109 | "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
110 | "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=",
111 | "dev": true
112 | },
113 | "etag": {
114 | "version": "1.8.1",
115 | "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
116 | "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=",
117 | "dev": true
118 | },
119 | "express": {
120 | "version": "4.17.1",
121 | "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz",
122 | "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==",
123 | "dev": true,
124 | "requires": {
125 | "accepts": "~1.3.7",
126 | "array-flatten": "1.1.1",
127 | "body-parser": "1.19.0",
128 | "content-disposition": "0.5.3",
129 | "content-type": "~1.0.4",
130 | "cookie": "0.4.0",
131 | "cookie-signature": "1.0.6",
132 | "debug": "2.6.9",
133 | "depd": "~1.1.2",
134 | "encodeurl": "~1.0.2",
135 | "escape-html": "~1.0.3",
136 | "etag": "~1.8.1",
137 | "finalhandler": "~1.1.2",
138 | "fresh": "0.5.2",
139 | "merge-descriptors": "1.0.1",
140 | "methods": "~1.1.2",
141 | "on-finished": "~2.3.0",
142 | "parseurl": "~1.3.3",
143 | "path-to-regexp": "0.1.7",
144 | "proxy-addr": "~2.0.5",
145 | "qs": "6.7.0",
146 | "range-parser": "~1.2.1",
147 | "safe-buffer": "5.1.2",
148 | "send": "0.17.1",
149 | "serve-static": "1.14.1",
150 | "setprototypeof": "1.1.1",
151 | "statuses": "~1.5.0",
152 | "type-is": "~1.6.18",
153 | "utils-merge": "1.0.1",
154 | "vary": "~1.1.2"
155 | }
156 | },
157 | "finalhandler": {
158 | "version": "1.1.2",
159 | "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz",
160 | "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==",
161 | "dev": true,
162 | "requires": {
163 | "debug": "2.6.9",
164 | "encodeurl": "~1.0.2",
165 | "escape-html": "~1.0.3",
166 | "on-finished": "~2.3.0",
167 | "parseurl": "~1.3.3",
168 | "statuses": "~1.5.0",
169 | "unpipe": "~1.0.0"
170 | }
171 | },
172 | "forwarded": {
173 | "version": "0.1.2",
174 | "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz",
175 | "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=",
176 | "dev": true
177 | },
178 | "fresh": {
179 | "version": "0.5.2",
180 | "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
181 | "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=",
182 | "dev": true
183 | },
184 | "http-errors": {
185 | "version": "1.7.2",
186 | "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz",
187 | "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==",
188 | "dev": true,
189 | "requires": {
190 | "depd": "~1.1.2",
191 | "inherits": "2.0.3",
192 | "setprototypeof": "1.1.1",
193 | "statuses": ">= 1.5.0 < 2",
194 | "toidentifier": "1.0.0"
195 | }
196 | },
197 | "iconv-lite": {
198 | "version": "0.4.24",
199 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
200 | "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
201 | "dev": true,
202 | "requires": {
203 | "safer-buffer": ">= 2.1.2 < 3"
204 | }
205 | },
206 | "inherits": {
207 | "version": "2.0.3",
208 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
209 | "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
210 | "dev": true
211 | },
212 | "ipaddr.js": {
213 | "version": "1.9.1",
214 | "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
215 | "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==",
216 | "dev": true
217 | },
218 | "media-typer": {
219 | "version": "0.3.0",
220 | "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
221 | "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=",
222 | "dev": true
223 | },
224 | "merge-descriptors": {
225 | "version": "1.0.1",
226 | "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
227 | "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=",
228 | "dev": true
229 | },
230 | "methods": {
231 | "version": "1.1.2",
232 | "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
233 | "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=",
234 | "dev": true
235 | },
236 | "mime": {
237 | "version": "1.6.0",
238 | "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
239 | "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
240 | "dev": true
241 | },
242 | "mime-db": {
243 | "version": "1.46.0",
244 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.46.0.tgz",
245 | "integrity": "sha512-svXaP8UQRZ5K7or+ZmfNhg2xX3yKDMUzqadsSqi4NCH/KomcH75MAMYAGVlvXn4+b/xOPhS3I2uHKRUzvjY7BQ==",
246 | "dev": true
247 | },
248 | "mime-types": {
249 | "version": "2.1.29",
250 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.29.tgz",
251 | "integrity": "sha512-Y/jMt/S5sR9OaqteJtslsFZKWOIIqMACsJSiHghlCAyhf7jfVYjKBmLiX8OgpWeW+fjJ2b+Az69aPFPkUOY6xQ==",
252 | "dev": true,
253 | "requires": {
254 | "mime-db": "1.46.0"
255 | }
256 | },
257 | "ms": {
258 | "version": "2.0.0",
259 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
260 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
261 | "dev": true
262 | },
263 | "negotiator": {
264 | "version": "0.6.2",
265 | "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz",
266 | "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==",
267 | "dev": true
268 | },
269 | "on-finished": {
270 | "version": "2.3.0",
271 | "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
272 | "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=",
273 | "dev": true,
274 | "requires": {
275 | "ee-first": "1.1.1"
276 | }
277 | },
278 | "parseurl": {
279 | "version": "1.3.3",
280 | "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
281 | "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==",
282 | "dev": true
283 | },
284 | "path-to-regexp": {
285 | "version": "0.1.7",
286 | "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
287 | "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=",
288 | "dev": true
289 | },
290 | "proxy-addr": {
291 | "version": "2.0.6",
292 | "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz",
293 | "integrity": "sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw==",
294 | "dev": true,
295 | "requires": {
296 | "forwarded": "~0.1.2",
297 | "ipaddr.js": "1.9.1"
298 | }
299 | },
300 | "qs": {
301 | "version": "6.7.0",
302 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz",
303 | "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==",
304 | "dev": true
305 | },
306 | "range-parser": {
307 | "version": "1.2.1",
308 | "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
309 | "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==",
310 | "dev": true
311 | },
312 | "raw-body": {
313 | "version": "2.4.0",
314 | "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz",
315 | "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==",
316 | "dev": true,
317 | "requires": {
318 | "bytes": "3.1.0",
319 | "http-errors": "1.7.2",
320 | "iconv-lite": "0.4.24",
321 | "unpipe": "1.0.0"
322 | }
323 | },
324 | "safe-buffer": {
325 | "version": "5.1.2",
326 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
327 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
328 | "dev": true
329 | },
330 | "safer-buffer": {
331 | "version": "2.1.2",
332 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
333 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
334 | "dev": true
335 | },
336 | "send": {
337 | "version": "0.17.1",
338 | "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz",
339 | "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==",
340 | "dev": true,
341 | "requires": {
342 | "debug": "2.6.9",
343 | "depd": "~1.1.2",
344 | "destroy": "~1.0.4",
345 | "encodeurl": "~1.0.2",
346 | "escape-html": "~1.0.3",
347 | "etag": "~1.8.1",
348 | "fresh": "0.5.2",
349 | "http-errors": "~1.7.2",
350 | "mime": "1.6.0",
351 | "ms": "2.1.1",
352 | "on-finished": "~2.3.0",
353 | "range-parser": "~1.2.1",
354 | "statuses": "~1.5.0"
355 | },
356 | "dependencies": {
357 | "ms": {
358 | "version": "2.1.1",
359 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
360 | "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==",
361 | "dev": true
362 | }
363 | }
364 | },
365 | "serve-static": {
366 | "version": "1.14.1",
367 | "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz",
368 | "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==",
369 | "dev": true,
370 | "requires": {
371 | "encodeurl": "~1.0.2",
372 | "escape-html": "~1.0.3",
373 | "parseurl": "~1.3.3",
374 | "send": "0.17.1"
375 | }
376 | },
377 | "setprototypeof": {
378 | "version": "1.1.1",
379 | "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz",
380 | "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==",
381 | "dev": true
382 | },
383 | "statuses": {
384 | "version": "1.5.0",
385 | "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
386 | "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=",
387 | "dev": true
388 | },
389 | "toidentifier": {
390 | "version": "1.0.0",
391 | "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz",
392 | "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==",
393 | "dev": true
394 | },
395 | "type-is": {
396 | "version": "1.6.18",
397 | "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
398 | "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==",
399 | "dev": true,
400 | "requires": {
401 | "media-typer": "0.3.0",
402 | "mime-types": "~2.1.24"
403 | }
404 | },
405 | "unpipe": {
406 | "version": "1.0.0",
407 | "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
408 | "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=",
409 | "dev": true
410 | },
411 | "utils-merge": {
412 | "version": "1.0.1",
413 | "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
414 | "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=",
415 | "dev": true
416 | },
417 | "vary": {
418 | "version": "1.1.2",
419 | "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
420 | "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=",
421 | "dev": true
422 | }
423 | }
424 | }
425 |
--------------------------------------------------------------------------------