├── dia2 ├── src │ ├── main.js │ ├── immutable.js │ └── calculator.js ├── .gitignore ├── package.json ├── .editorconfig ├── index.html ├── README.md ├── favicon.svg └── yarn.lock ├── dia3 ├── src │ ├── main.js │ └── style.css ├── .gitignore ├── package.json ├── .editorconfig ├── index.html ├── favicon.svg ├── README.md └── yarn.lock ├── dia4 ├── app │ ├── main.js │ ├── .gitignore │ ├── style.css │ ├── package.json │ ├── .editorconfig │ ├── index.html │ ├── favicon.svg │ └── yarn.lock ├── server │ ├── .gitignore │ ├── package.json │ ├── app.js │ ├── routes.js │ └── yarn.lock └── README.md ├── dia1 ├── .gitignore ├── src │ ├── main.js │ └── style.css ├── package.json ├── .editorconfig ├── index.html ├── README.md ├── favicon.svg └── yarn.lock ├── README.md └── dia5 ├── conteudo-dia4 ├── http.js ├── index.html └── main.js └── README.md /dia2/src/main.js: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /dia3/src/main.js: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /dia4/app/main.js: -------------------------------------------------------------------------------- 1 | import './style.css' 2 | -------------------------------------------------------------------------------- /dia4/server/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | -------------------------------------------------------------------------------- /dia1/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | .DS_Store 3 | dist 4 | dist-ssr 5 | *.local -------------------------------------------------------------------------------- /dia2/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | .DS_Store 3 | dist 4 | dist-ssr 5 | *.local -------------------------------------------------------------------------------- /dia3/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | .DS_Store 3 | dist 4 | dist-ssr 5 | *.local -------------------------------------------------------------------------------- /dia4/app/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | .DS_Store 3 | dist 4 | dist-ssr 5 | *.local -------------------------------------------------------------------------------- /dia1/src/main.js: -------------------------------------------------------------------------------- 1 | import './style.css' 2 | 3 | document.querySelector('#app').innerHTML = ` 4 |

B. Academy

5 |

Boas vindas à semana de pré-work para o Bootcamp em React.js 😁

6 | ` 7 | -------------------------------------------------------------------------------- /dia1/src/style.css: -------------------------------------------------------------------------------- 1 | body { 2 | font-family: Avenir, Helvetica, Arial, sans-serif; 3 | -webkit-font-smoothing: antialiased; 4 | -moz-osx-font-smoothing: grayscale; 5 | text-align: center; 6 | color: #2c3e50; 7 | margin-top: 60px; 8 | } 9 | -------------------------------------------------------------------------------- /dia3/src/style.css: -------------------------------------------------------------------------------- 1 | #app { 2 | font-family: Avenir, Helvetica, Arial, sans-serif; 3 | -webkit-font-smoothing: antialiased; 4 | -moz-osx-font-smoothing: grayscale; 5 | text-align: center; 6 | color: #2c3e50; 7 | margin-top: 60px; 8 | } 9 | -------------------------------------------------------------------------------- /dia4/app/style.css: -------------------------------------------------------------------------------- 1 | body { 2 | font-family: Avenir, Helvetica, Arial, sans-serif; 3 | -webkit-font-smoothing: antialiased; 4 | -moz-osx-font-smoothing: grayscale; 5 | text-align: center; 6 | color: #2c3e50; 7 | margin-top: 60px; 8 | } 9 | -------------------------------------------------------------------------------- /dia4/server/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "private": true, 3 | "scripts": { 4 | "start": "node app.js", 5 | "dev": "npx nodemon app.js" 6 | }, 7 | "dependencies": { 8 | "cors": "2.8.5", 9 | "express": "4.17.1" 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /dia1/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "private": true, 3 | "name": "dia1", 4 | "version": "0.0.0", 5 | "scripts": { 6 | "dev": "vite", 7 | "build": "vite build", 8 | "serve": "vite preview" 9 | }, 10 | "devDependencies": { 11 | "vite": "^2.4.4" 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /dia2/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "private": true, 3 | "name": "dia2", 4 | "version": "0.0.0", 5 | "scripts": { 6 | "dev": "vite", 7 | "build": "vite build", 8 | "serve": "vite preview" 9 | }, 10 | "devDependencies": { 11 | "vite": "^2.4.4" 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /dia3/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "private": true, 3 | "name": "dia3", 4 | "version": "0.0.0", 5 | "scripts": { 6 | "dev": "vite", 7 | "build": "vite build", 8 | "serve": "vite preview" 9 | }, 10 | "devDependencies": { 11 | "vite": "^2.4.4" 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /dia1/.editorconfig: -------------------------------------------------------------------------------- 1 | # editorconfig.org 2 | root = true 3 | 4 | [*] 5 | indent_size = 2 6 | indent_style = space 7 | end_of_line = lf 8 | charset = utf-8 9 | trim_trailing_whitespace = true 10 | insert_final_newline = true 11 | 12 | [*.md] 13 | trim_trailing_whitespace = false 14 | -------------------------------------------------------------------------------- /dia2/.editorconfig: -------------------------------------------------------------------------------- 1 | # editorconfig.org 2 | root = true 3 | 4 | [*] 5 | indent_size = 2 6 | indent_style = space 7 | end_of_line = lf 8 | charset = utf-8 9 | trim_trailing_whitespace = true 10 | insert_final_newline = true 11 | 12 | [*.md] 13 | trim_trailing_whitespace = false 14 | -------------------------------------------------------------------------------- /dia3/.editorconfig: -------------------------------------------------------------------------------- 1 | # editorconfig.org 2 | root = true 3 | 4 | [*] 5 | indent_size = 2 6 | indent_style = space 7 | end_of_line = lf 8 | charset = utf-8 9 | trim_trailing_whitespace = true 10 | insert_final_newline = true 11 | 12 | [*.md] 13 | trim_trailing_whitespace = false 14 | -------------------------------------------------------------------------------- /dia4/app/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "private": true, 3 | "name": "dia4", 4 | "version": "0.0.0", 5 | "scripts": { 6 | "dev": "vite", 7 | "build": "vite build", 8 | "serve": "vite preview" 9 | }, 10 | "devDependencies": { 11 | "vite": "^2.4.4" 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /dia4/app/.editorconfig: -------------------------------------------------------------------------------- 1 | # editorconfig.org 2 | root = true 3 | 4 | [*] 5 | indent_size = 2 6 | indent_style = space 7 | end_of_line = lf 8 | charset = utf-8 9 | trim_trailing_whitespace = true 10 | insert_final_newline = true 11 | 12 | [*.md] 13 | trim_trailing_whitespace = false 14 | -------------------------------------------------------------------------------- /dia2/src/immutable.js: -------------------------------------------------------------------------------- 1 | const john = { 2 | name: 'John', 3 | surname: 'Doe', 4 | age: 30, 5 | hobbies: ['Surf', 'Design'], 6 | } 7 | 8 | const jane = john 9 | 10 | jane.name = 'Jane' 11 | jane.hobbies.push('MuayThai', 'Programming') 12 | 13 | console.log('John:', john) 14 | console.log('Jane:', jane) 15 | -------------------------------------------------------------------------------- /dia3/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Dia 3 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /dia4/app/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Dia 4 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Desafios pré-work do B. Academy 2 | 3 | Os desafios estão separados por dia. 4 | 5 | Todos os vídeos estão [no canal do Daciuk na Twitch](https://twitch.tv/fdaciuk), e ficarão disponíveis até o final do dia 22/08/2021. 6 | 7 | Para visualizar os vídeos da semana de pré-work, acesse o link acima, clique na aba "Videos" e encontre a playlist "Pré-work (Bootcamp React.js)". Todos os vídeos estarão disponíveis lá :D 8 | -------------------------------------------------------------------------------- /dia1/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Vite App 8 | 9 | 10 |
11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /dia2/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | Dia 2 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /dia2/src/calculator.js: -------------------------------------------------------------------------------- 1 | function calculadora (callback) { 2 | } 3 | 4 | const sum = calculadora((a, b) => a + b) 5 | const sub = calculadora((a, b) => a - b) 6 | const mult = calculadora((a, b) => a * b) 7 | const div = calculadora((a, b) => a / b) 8 | 9 | console.log('Somar 1 e 2 = 3:', sum(1, 2) === 3) 10 | console.log('Subtrair 4 de 20 = 16:', sub(20, 4) === 16) 11 | console.log('Multiplicar 3 com 3 = 9:', mult(3, 3) === 9) 12 | console.log('Dividir 15 por 5 = 3:', div(15, 5) === 3) 13 | -------------------------------------------------------------------------------- /dia5/conteudo-dia4/http.js: -------------------------------------------------------------------------------- 1 | const request = (url, options) => 2 | fetch(url, options) 3 | .then(r => r.json()) 4 | .catch(e => ({ error: true, message: e.message })) 5 | 6 | const createRequest = (method) => (url, data) => request(url, { 7 | method, 8 | headers: { 9 | 'content-type': 'application/json', 10 | }, 11 | body: JSON.stringify(data) 12 | }) 13 | 14 | export const get = (url) => request(url) 15 | export const post = createRequest('POST') 16 | export const del = createRequest('DELETE') 17 | -------------------------------------------------------------------------------- /dia4/server/app.js: -------------------------------------------------------------------------------- 1 | const express = require('express') 2 | const cors = require('cors') 3 | const app = express() 4 | const port = process.env.PORT || 3333 5 | const routes = require('./routes') 6 | 7 | app.use(cors()) 8 | 9 | app.use(express.urlencoded({ extended: false })) 10 | app.use(express.json()) 11 | 12 | app.get('/', (req, res) => { 13 | res.json({ message: 'B. Academy Cars API' }) 14 | }) 15 | 16 | app.use('/cars', routes) 17 | 18 | app.listen(port, () => { 19 | console.log('Listening on port http://localhost:%d', port) 20 | }) 21 | -------------------------------------------------------------------------------- /dia1/README.md: -------------------------------------------------------------------------------- 1 | # Desafio do dia 01 2 | 3 | ## Setup 4 | 5 | Primeiro, instale as dependências do projeto e coloque o servidor para rodar em modo de desenvolvimento. 6 | 7 | Lembre-se de, após resolver cada exercício abaixo, fazer um commit para "registrar" o ajuste. 8 | 9 | ## Exercício 01 10 | 11 | Resolver o erro que aparece no console: 12 | 13 | ``` 14 | GET http://localhost:3000/main.js net::ERR_ABORTED 404 (Not Found) 15 | ``` 16 | 17 | ## Exercício 02 18 | 19 | Ao resolver o primeiro erro, resolva o segundo erro que deverá aparecer no console: 20 | 21 | ``` 22 | Uncaught SyntaxError: Cannot use import statement outside a module 23 | ``` 24 | 25 | ## Exercício 03 26 | 27 | Olhe novamente para o console, e resolva o próximo erro: 28 | 29 | ``` 30 | main.js:3 Uncaught TypeError: Cannot set property 'innerHTML' of null 31 | ``` 32 | 33 | ## Exercício 04 34 | 35 | Crie um link no HTML (fora da div `.app`), e adicione à ele um evento de clique. 36 | O clique nesse botão deverá alternar a visibilidade do `.app`: se o `.app` estiver visível, 37 | ele deverá ser escondido. Se estiver escondido, o clique deve exibí-lo. 38 | -------------------------------------------------------------------------------- /dia2/README.md: -------------------------------------------------------------------------------- 1 | # Desafio do dia 02 2 | 3 | ## Exercício 01 - Imutabilidade 4 | 5 | Importe o arquivo `src/immutable.js` no `src/main.js`. Abra o arquivo e olhe o console do navegador. 6 | O resultado dos dois objetos deveria ser diferente. Faça a criação do segundo objeto 7 | de forma imutável. 8 | 9 | ## Exercício 02 - HOF (Higher Order Function) 10 | Abra o arquivo `src/calculator.js` e importe ele `src/main.js`. 11 | 12 | Veja que, nesse arquivo, temos uma função `calculadora` sem implementação, e temos 13 | algumas variáveis que fazem a execução da calculadora. O desafio é fazer a implementação da 14 | calculadora, para que todos os valores no console resultem em `true`. 15 | 16 | A implementação deve ser da seguinte forma: 17 | - A função `calculadora` deve receber via argumento uma função, que dirá como o cálculo vai ser feito (olhe para a linha onde foi criada a variável `sum`, por exemplo, para ver a função que está sendo passada para a `calculadora`); 18 | - O retorno da função `calculadora` deve ser uma nova função que espera dois argumentos `a` e `b`: dois números que serão calculados usando a função que foi passada como argumento para `calculadora`; 19 | - Essa função de retorno deve retornar **a chamada** da primeira função que foi passada via argumento; 20 | - Os valores `a` e `b` devem ser passados como parâmetro para essa função que está sendo executada. 21 | -------------------------------------------------------------------------------- /dia1/favicon.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /dia2/favicon.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /dia3/favicon.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /dia4/app/favicon.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /dia5/conteudo-dia4/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Dia 4 8 | 9 | 10 |
11 | 12 |
13 |
14 |
15 | 16 | 17 |
18 | 19 |
20 | 21 | 22 |
23 | 24 |
25 | 26 | 27 |
28 | 29 |
30 | 31 | 32 |
33 | 34 |
35 | 36 | 37 |
38 | 39 | 40 |
41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 |
ImagemMarca / ModeloAnoPlacaCor
57 |
58 | 59 | 60 | 61 | 62 | -------------------------------------------------------------------------------- /dia4/server/routes.js: -------------------------------------------------------------------------------- 1 | const express = require('express') 2 | const router = express.Router() 3 | let data = {} 4 | 5 | router.get('/', (req, res) => { 6 | res.json(Object.values(data)) 7 | }) 8 | 9 | function checkBody (req, res, next) { 10 | if (areAllFieldsValid(req.body)) { 11 | return next() 12 | } 13 | 14 | res.status(400).json({ error: true, message: 'Todos os campos são obrigatórios' }) 15 | } 16 | 17 | function areAllFieldsValid (body) { 18 | const fields = [body.image, body.brandModel, body.year, body.plate, body.color] 19 | return fields.every(field => typeof field !== 'undefined' && field !== '') 20 | } 21 | 22 | function checkAlreadyRegistered (req, res, next) { 23 | if (typeof data[req.body.plate.toUpperCase()] !== 'undefined') { 24 | return res.status(400).json({ 25 | error: true, 26 | message: `Já existe um carro cadastrado com a placa ${req.body.plate}` 27 | }) 28 | } 29 | next() 30 | } 31 | 32 | router.post('/', checkBody, checkAlreadyRegistered, (req, res) => { 33 | data[req.body.plate.toUpperCase()] = { 34 | image: req.body.image, 35 | brandModel: req.body.brandModel, 36 | year: req.body.year, 37 | plate: req.body.plate, 38 | color: req.body.color 39 | } 40 | 41 | res.json({ message: `O carro com placa ${req.body.plate} foi cadastrado com sucesso` }) 42 | }) 43 | 44 | router.put('/:plate', checkBody, (req, res) => { 45 | const { plate } = req.params 46 | 47 | if (!areAllFieldsValid(req.body)) { 48 | res.status(400).json({ 49 | error: true, 50 | message: 'Todos os campos são obrigatórios', 51 | }) 52 | 53 | return 54 | } 55 | 56 | delete data[plate] 57 | 58 | data[req.body.plate.toUpperCase()] = { 59 | image: req.body.image, 60 | brandModel: req.body.brandModel, 61 | year: req.body.year, 62 | plate: req.body.plate, 63 | color: req.body.color 64 | } 65 | 66 | res.json({ message: `O carro com placa ${plate} foi atualizado com sucesso` }) 67 | }) 68 | 69 | router.delete('/', (req, res) => { 70 | delete data[req.body.plate.toUpperCase()] 71 | res.json({ message: `O carro com placa ${req.body.plate} foi removido com sucesso` }) 72 | }) 73 | 74 | module.exports = router 75 | -------------------------------------------------------------------------------- /dia5/README.md: -------------------------------------------------------------------------------- 1 | # Desafio do dia 05 2 | 3 | Nesse desafio, você irá tentar aplicar tudo o que aprendeu sobre TypeScript na 4 | aula passada. 5 | 6 | Crie um diretório `app`, e inicie um novo projeto com o `vite`, mas dessa vez, 7 | você irá selecionar `vanilla` na primeira opção e `vanilla-ts` na segunda. 8 | 9 | Crie o arquivo `.editorconfig` no mesmo padrão das aulas anteriores e adicione 10 | o `"private": true` no `package.json`. 11 | 12 | Adicione também um novo `script` na entrada `"scripts"` do `package.json`, chamado 13 | `type-check`, com o comando `tsc --pretty --noEmit` que vai servir para rodar 14 | o compilador do TypeScript no terminal, para facilitar a análise de erros do TS 15 | de forma geral. 16 | 17 | Logo abaixo do script `"serve"`, adicione esse script. Seu `package.json` 18 | deve ficar assim: 19 | 20 | ```diff 21 | - "serve": "vite preview" 22 | + "serve": "vite preview", 23 | + "type-check": "tsc --pretty --noEmit" 24 | ``` 25 | 26 | Após isso feito, instale as dependências e inicie o servidor de desenvolvimento, 27 | para ver se a aplicação irá subir corretamente. 28 | 29 | Quando você se certificar que está tudo ok com o projeto, copie os arquivos do projeto 30 | da aula anterior: 31 | 32 | - formulário e tabela da `index.html`, 33 | - todo o contéudo do arquivo `main.js` para o arquivo `src/main.ts` desse projeto, 34 | - e crie um novo arquivo `src/http.ts` e copie todo o conteúdo do `http.js`para esse novo arquivo. 35 | 36 | O objetivo é tentar tipar corretamente esses arquivos, ajustando os erros que 37 | o TypeScript apontar. 38 | 39 | **Comece pelo mais simples, depois vá tentando resolver os mais complicados.** 40 | 41 | Os arquivos com a correção da aula anterior estão nesse repositório, no diretório 42 | `dia5/conteudo-dia4` (arquivos `index.html`, `main.js` e `http.js`). 43 | 44 | A ideia é que você tente aplicar o máximo de conhecimento que você viu nas aulas 45 | sobre TypeScript. Fique à vontade para pedir ajuda das pessoas que estão no 46 | nosso Discord para conseguir resolver esse desafio. 47 | 48 | Não se preocupe se não conseguir tipar tudo, mas tente fazer o máximo que conseguir: 49 | tente, pesquise se não entender algo, procure uma solução. 50 | 51 | Lembre-se que o importante não é **fazer tudo correto ou perfeito** e sim que você 52 | se sinta provocada ou provocado **a aprender mais**, e **buscar um conhecimento que 53 | talvez você ainda não tenha**, ok? 54 | -------------------------------------------------------------------------------- /dia3/README.md: -------------------------------------------------------------------------------- 1 | # Desafio do dia 03 2 | 3 | ## Exercício 1 4 | 5 | Crie um arquivo `src/form.js`, e importe-o no `src/main.js`. 6 | No `index.html`, crie um formulário com apenas um campo: um input de texto que irá receber o nome de uma pessoa. 7 | No JS, você deverá manipular o valor desse input, fazendo com que, enquanto o valor está sendo digitado, 8 | o primeiro caractere de cada palavra seja uma letra maiúscula, a menos que as palavra sejam "de", "da", "do" ou "dos". 9 | Todas as outras letras devem ser minúsculas. 10 | 11 | **Exemplo:** 12 | 13 | Se for digitado no campo: `rubens de oliveira`, o que deverá ser exibido no campo é `Rubens de Oliveira`. 14 | 15 | Se for digitado `rOMualdo ferrEira DoS sanTOS NetO`, o que deverá ser exibido no campo é `Romualdo Ferreira dos Santos Neto` 16 | 17 | ## Exercício 2 18 | 19 | Via JavaScript, adicione ao formulário um `select` do tipo `multiple` com algumas cores para seleção. 20 | 21 | Crie opções para, pelo menos, 5 cores diferentes. 22 | 23 | Conforme as cores vão sendo selecionadas, você deverá adicionar elementos no HTML com as cores que foram selecionadas. 24 | Esses elementos podem ser `div`s mesmo, de tamanho `100px x 100px`, uma ao lado da outra, ou como você quiser exibir. 25 | 26 | Fique à vontade para estilizar como achar melhor: o que eu preciso que você faça é apenas exibir na tela, de forma visual, 27 | todas as cores que foram selecionadas, enquanto elas estão sendo selecionadas. 28 | 29 | Exemplo: se apenas uma cor for selecionada, um quadrado pintado com essa cor deve ser exibido na tela. 30 | Se duas cores forem selecionadas, dois quadrados devem aparecer na tela, um com cada uma das cores selecionadas. 31 | Se houver uma "desseleção", a cor que foi "desselecionada" deve ser removida da tela. 32 | 33 | ## Exercício 3 34 | 35 | Vamos agora criar um formulário para fazer um cadastro de carros. 36 | 37 | Crie um novo arquivo, `src/cars.js`, e importe-o no `src/main.js`. 38 | No HTML, crie um novo formulário, e adicione os seguintes campos para cadastro de um carro: 39 | 40 | Imagem (URL), Marca / Modelo, Ano, Placa, Cor e um botão para enviar o formulário. 41 | 42 | Crie também uma tabela no HTML que irá receber os dados dos carros criados. 43 | Ao preencher todos os dados e submeter o formulário, você deve criar uma nova linha na tabela 44 | com os dados do carro criado, limpar o formulário para receber um novo cadastro, e dar foco no primeiro campo 45 | do formulário (campo imagem). 46 | -------------------------------------------------------------------------------- /dia1/yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | colorette@^1.2.2: 6 | version "1.2.2" 7 | resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.2.2.tgz#cbcc79d5e99caea2dbf10eb3a26fd8b3e6acfa94" 8 | integrity sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w== 9 | 10 | esbuild@^0.12.8: 11 | version "0.12.19" 12 | resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.12.19.tgz#ab849766705a5093df5acd8ec2f6ba2159a38a6c" 13 | integrity sha512-5NuT1G6THW7l3fsSCDkcPepn24R0XtyPjKoqKHD8LfhqMXzCdz0mrS9HgO6hIhzVT7zt0T+JGbzCqF5AH8hS9w== 14 | 15 | fsevents@~2.3.2: 16 | version "2.3.2" 17 | resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" 18 | integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== 19 | 20 | function-bind@^1.1.1: 21 | version "1.1.1" 22 | resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" 23 | integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== 24 | 25 | has@^1.0.3: 26 | version "1.0.3" 27 | resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" 28 | integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== 29 | dependencies: 30 | function-bind "^1.1.1" 31 | 32 | is-core-module@^2.2.0: 33 | version "2.5.0" 34 | resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.5.0.tgz#f754843617c70bfd29b7bd87327400cda5c18491" 35 | integrity sha512-TXCMSDsEHMEEZ6eCA8rwRDbLu55MRGmrctljsBX/2v1d9/GzqHOxW5c5oPSgrUt2vBFXebu9rGqckXGPWOlYpg== 36 | dependencies: 37 | has "^1.0.3" 38 | 39 | nanoid@^3.1.23: 40 | version "3.1.23" 41 | resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.1.23.tgz#f744086ce7c2bc47ee0a8472574d5c78e4183a81" 42 | integrity sha512-FiB0kzdP0FFVGDKlRLEQ1BgDzU87dy5NnzjeW9YZNt+/c3+q82EQDUwniSAUxp/F0gFNI1ZhKU1FqYsMuqZVnw== 43 | 44 | path-parse@^1.0.6: 45 | version "1.0.7" 46 | resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" 47 | integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== 48 | 49 | postcss@^8.3.6: 50 | version "8.3.6" 51 | resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.3.6.tgz#2730dd76a97969f37f53b9a6096197be311cc4ea" 52 | integrity sha512-wG1cc/JhRgdqB6WHEuyLTedf3KIRuD0hG6ldkFEZNCjRxiC+3i6kkWUUbiJQayP28iwG35cEmAbe98585BYV0A== 53 | dependencies: 54 | colorette "^1.2.2" 55 | nanoid "^3.1.23" 56 | source-map-js "^0.6.2" 57 | 58 | resolve@^1.20.0: 59 | version "1.20.0" 60 | resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.20.0.tgz#629a013fb3f70755d6f0b7935cc1c2c5378b1975" 61 | integrity sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A== 62 | dependencies: 63 | is-core-module "^2.2.0" 64 | path-parse "^1.0.6" 65 | 66 | rollup@^2.38.5: 67 | version "2.56.1" 68 | resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.56.1.tgz#f29dbc04a5d532dfa904f76b62395f359506211e" 69 | integrity sha512-KkrsNjeiTfGJMUFBi/PNfj3fnt70akqdoNXOjlzwo98uA1qrlkmgt6SGaK5OwhyDYCVnJb6jb2Xa2wbI47P4Nw== 70 | optionalDependencies: 71 | fsevents "~2.3.2" 72 | 73 | source-map-js@^0.6.2: 74 | version "0.6.2" 75 | resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-0.6.2.tgz#0bb5de631b41cfbda6cfba8bd05a80efdfd2385e" 76 | integrity sha512-/3GptzWzu0+0MBQFrDKzw/DvvMTUORvgY6k6jd/VS6iCR4RDTKWH6v6WPwQoUO8667uQEf9Oe38DxAYWY5F/Ug== 77 | 78 | vite@^2.4.4: 79 | version "2.4.4" 80 | resolved "https://registry.yarnpkg.com/vite/-/vite-2.4.4.tgz#8c402a07ad45f168f6eb5428bead38f3e4363e47" 81 | integrity sha512-m1wK6pFJKmaYA6AeZIUXyiAgUAAJzVXhIMYCdZUpCaFMGps0v0IlNJtbmPvkUhVEyautalajmnW5X6NboUPsnw== 82 | dependencies: 83 | esbuild "^0.12.8" 84 | postcss "^8.3.6" 85 | resolve "^1.20.0" 86 | rollup "^2.38.5" 87 | optionalDependencies: 88 | fsevents "~2.3.2" 89 | -------------------------------------------------------------------------------- /dia2/yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | colorette@^1.2.2: 6 | version "1.3.0" 7 | resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.3.0.tgz#ff45d2f0edb244069d3b772adeb04fed38d0a0af" 8 | integrity sha512-ecORCqbSFP7Wm8Y6lyqMJjexBQqXSF7SSeaTyGGphogUjBlFP9m9o08wy86HL2uB7fMTxtOUzLMk7ogKcxMg1w== 9 | 10 | esbuild@^0.12.8: 11 | version "0.12.20" 12 | resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.12.20.tgz#4d3c9d83c99a4031e027b42a4c398c23b6827cb0" 13 | integrity sha512-u7+0qTo9Z64MD9PhooEngCmzyEYJ6ovFhPp8PLNh3UasR5Ihjv6HWVXqm8uHmasdQlpsAf0IsY4U0YVUfCpt4Q== 14 | 15 | fsevents@~2.3.2: 16 | version "2.3.2" 17 | resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" 18 | integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== 19 | 20 | function-bind@^1.1.1: 21 | version "1.1.1" 22 | resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" 23 | integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== 24 | 25 | has@^1.0.3: 26 | version "1.0.3" 27 | resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" 28 | integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== 29 | dependencies: 30 | function-bind "^1.1.1" 31 | 32 | is-core-module@^2.2.0: 33 | version "2.5.0" 34 | resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.5.0.tgz#f754843617c70bfd29b7bd87327400cda5c18491" 35 | integrity sha512-TXCMSDsEHMEEZ6eCA8rwRDbLu55MRGmrctljsBX/2v1d9/GzqHOxW5c5oPSgrUt2vBFXebu9rGqckXGPWOlYpg== 36 | dependencies: 37 | has "^1.0.3" 38 | 39 | nanoid@^3.1.23: 40 | version "3.1.25" 41 | resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.1.25.tgz#09ca32747c0e543f0e1814b7d3793477f9c8e152" 42 | integrity sha512-rdwtIXaXCLFAQbnfqDRnI6jaRHp9fTcYBjtFKE8eezcZ7LuLjhUaQGNeMXf1HmRoCH32CLz6XwX0TtxEOS/A3Q== 43 | 44 | path-parse@^1.0.6: 45 | version "1.0.7" 46 | resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" 47 | integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== 48 | 49 | postcss@^8.3.6: 50 | version "8.3.6" 51 | resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.3.6.tgz#2730dd76a97969f37f53b9a6096197be311cc4ea" 52 | integrity sha512-wG1cc/JhRgdqB6WHEuyLTedf3KIRuD0hG6ldkFEZNCjRxiC+3i6kkWUUbiJQayP28iwG35cEmAbe98585BYV0A== 53 | dependencies: 54 | colorette "^1.2.2" 55 | nanoid "^3.1.23" 56 | source-map-js "^0.6.2" 57 | 58 | resolve@^1.20.0: 59 | version "1.20.0" 60 | resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.20.0.tgz#629a013fb3f70755d6f0b7935cc1c2c5378b1975" 61 | integrity sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A== 62 | dependencies: 63 | is-core-module "^2.2.0" 64 | path-parse "^1.0.6" 65 | 66 | rollup@^2.38.5: 67 | version "2.56.2" 68 | resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.56.2.tgz#a045ff3f6af53ee009b5f5016ca3da0329e5470f" 69 | integrity sha512-s8H00ZsRi29M2/lGdm1u8DJpJ9ML8SUOpVVBd33XNeEeL3NVaTiUcSBHzBdF3eAyR0l7VSpsuoVUGrRHq7aPwQ== 70 | optionalDependencies: 71 | fsevents "~2.3.2" 72 | 73 | source-map-js@^0.6.2: 74 | version "0.6.2" 75 | resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-0.6.2.tgz#0bb5de631b41cfbda6cfba8bd05a80efdfd2385e" 76 | integrity sha512-/3GptzWzu0+0MBQFrDKzw/DvvMTUORvgY6k6jd/VS6iCR4RDTKWH6v6WPwQoUO8667uQEf9Oe38DxAYWY5F/Ug== 77 | 78 | vite@^2.4.4: 79 | version "2.4.4" 80 | resolved "https://registry.yarnpkg.com/vite/-/vite-2.4.4.tgz#8c402a07ad45f168f6eb5428bead38f3e4363e47" 81 | integrity sha512-m1wK6pFJKmaYA6AeZIUXyiAgUAAJzVXhIMYCdZUpCaFMGps0v0IlNJtbmPvkUhVEyautalajmnW5X6NboUPsnw== 82 | dependencies: 83 | esbuild "^0.12.8" 84 | postcss "^8.3.6" 85 | resolve "^1.20.0" 86 | rollup "^2.38.5" 87 | optionalDependencies: 88 | fsevents "~2.3.2" 89 | -------------------------------------------------------------------------------- /dia3/yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | colorette@^1.2.2: 6 | version "1.3.0" 7 | resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.3.0.tgz#ff45d2f0edb244069d3b772adeb04fed38d0a0af" 8 | integrity sha512-ecORCqbSFP7Wm8Y6lyqMJjexBQqXSF7SSeaTyGGphogUjBlFP9m9o08wy86HL2uB7fMTxtOUzLMk7ogKcxMg1w== 9 | 10 | esbuild@^0.12.17: 11 | version "0.12.21" 12 | resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.12.21.tgz#7ff32a9ac73ce4310f9cb61ea4c3da9756570d46" 13 | integrity sha512-7hyXbU3g94aREufI/5nls7Xcc+RGQeZWZApm6hoBaFvt2BPtpT4TjFMQ9Tb1jU8XyBGz00ShmiyflCogphMHFQ== 14 | 15 | fsevents@~2.3.2: 16 | version "2.3.2" 17 | resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" 18 | integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== 19 | 20 | function-bind@^1.1.1: 21 | version "1.1.1" 22 | resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" 23 | integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== 24 | 25 | has@^1.0.3: 26 | version "1.0.3" 27 | resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" 28 | integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== 29 | dependencies: 30 | function-bind "^1.1.1" 31 | 32 | is-core-module@^2.2.0: 33 | version "2.6.0" 34 | resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.6.0.tgz#d7553b2526fe59b92ba3e40c8df757ec8a709e19" 35 | integrity sha512-wShG8vs60jKfPWpF2KZRaAtvt3a20OAn7+IJ6hLPECpSABLcKtFKTTI4ZtH5QcBruBHlq+WsdHWyz0BCZW7svQ== 36 | dependencies: 37 | has "^1.0.3" 38 | 39 | nanoid@^3.1.23: 40 | version "3.1.25" 41 | resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.1.25.tgz#09ca32747c0e543f0e1814b7d3793477f9c8e152" 42 | integrity sha512-rdwtIXaXCLFAQbnfqDRnI6jaRHp9fTcYBjtFKE8eezcZ7LuLjhUaQGNeMXf1HmRoCH32CLz6XwX0TtxEOS/A3Q== 43 | 44 | path-parse@^1.0.6: 45 | version "1.0.7" 46 | resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" 47 | integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== 48 | 49 | postcss@^8.3.6: 50 | version "8.3.6" 51 | resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.3.6.tgz#2730dd76a97969f37f53b9a6096197be311cc4ea" 52 | integrity sha512-wG1cc/JhRgdqB6WHEuyLTedf3KIRuD0hG6ldkFEZNCjRxiC+3i6kkWUUbiJQayP28iwG35cEmAbe98585BYV0A== 53 | dependencies: 54 | colorette "^1.2.2" 55 | nanoid "^3.1.23" 56 | source-map-js "^0.6.2" 57 | 58 | resolve@^1.20.0: 59 | version "1.20.0" 60 | resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.20.0.tgz#629a013fb3f70755d6f0b7935cc1c2c5378b1975" 61 | integrity sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A== 62 | dependencies: 63 | is-core-module "^2.2.0" 64 | path-parse "^1.0.6" 65 | 66 | rollup@^2.38.5: 67 | version "2.56.2" 68 | resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.56.2.tgz#a045ff3f6af53ee009b5f5016ca3da0329e5470f" 69 | integrity sha512-s8H00ZsRi29M2/lGdm1u8DJpJ9ML8SUOpVVBd33XNeEeL3NVaTiUcSBHzBdF3eAyR0l7VSpsuoVUGrRHq7aPwQ== 70 | optionalDependencies: 71 | fsevents "~2.3.2" 72 | 73 | source-map-js@^0.6.2: 74 | version "0.6.2" 75 | resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-0.6.2.tgz#0bb5de631b41cfbda6cfba8bd05a80efdfd2385e" 76 | integrity sha512-/3GptzWzu0+0MBQFrDKzw/DvvMTUORvgY6k6jd/VS6iCR4RDTKWH6v6WPwQoUO8667uQEf9Oe38DxAYWY5F/Ug== 77 | 78 | vite@^2.4.4: 79 | version "2.5.0" 80 | resolved "https://registry.yarnpkg.com/vite/-/vite-2.5.0.tgz#111ba3679432d426e44566acf480005a7914cbd6" 81 | integrity sha512-Dn4B+g54PJsMG5WCc4QeFy1ygMXRdTtFrUPegqfk4+vzVQcbF/DqqmI/1bxezArzbujBJg/67QeT5wz8edfJVQ== 82 | dependencies: 83 | esbuild "^0.12.17" 84 | postcss "^8.3.6" 85 | resolve "^1.20.0" 86 | rollup "^2.38.5" 87 | optionalDependencies: 88 | fsevents "~2.3.2" 89 | -------------------------------------------------------------------------------- /dia4/app/yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | colorette@^1.2.2: 6 | version "1.3.0" 7 | resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.3.0.tgz#ff45d2f0edb244069d3b772adeb04fed38d0a0af" 8 | integrity sha512-ecORCqbSFP7Wm8Y6lyqMJjexBQqXSF7SSeaTyGGphogUjBlFP9m9o08wy86HL2uB7fMTxtOUzLMk7ogKcxMg1w== 9 | 10 | esbuild@^0.12.17: 11 | version "0.12.21" 12 | resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.12.21.tgz#7ff32a9ac73ce4310f9cb61ea4c3da9756570d46" 13 | integrity sha512-7hyXbU3g94aREufI/5nls7Xcc+RGQeZWZApm6hoBaFvt2BPtpT4TjFMQ9Tb1jU8XyBGz00ShmiyflCogphMHFQ== 14 | 15 | fsevents@~2.3.2: 16 | version "2.3.2" 17 | resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" 18 | integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== 19 | 20 | function-bind@^1.1.1: 21 | version "1.1.1" 22 | resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" 23 | integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== 24 | 25 | has@^1.0.3: 26 | version "1.0.3" 27 | resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" 28 | integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== 29 | dependencies: 30 | function-bind "^1.1.1" 31 | 32 | is-core-module@^2.2.0: 33 | version "2.6.0" 34 | resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.6.0.tgz#d7553b2526fe59b92ba3e40c8df757ec8a709e19" 35 | integrity sha512-wShG8vs60jKfPWpF2KZRaAtvt3a20OAn7+IJ6hLPECpSABLcKtFKTTI4ZtH5QcBruBHlq+WsdHWyz0BCZW7svQ== 36 | dependencies: 37 | has "^1.0.3" 38 | 39 | nanoid@^3.1.23: 40 | version "3.1.25" 41 | resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.1.25.tgz#09ca32747c0e543f0e1814b7d3793477f9c8e152" 42 | integrity sha512-rdwtIXaXCLFAQbnfqDRnI6jaRHp9fTcYBjtFKE8eezcZ7LuLjhUaQGNeMXf1HmRoCH32CLz6XwX0TtxEOS/A3Q== 43 | 44 | path-parse@^1.0.6: 45 | version "1.0.7" 46 | resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" 47 | integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== 48 | 49 | postcss@^8.3.6: 50 | version "8.3.6" 51 | resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.3.6.tgz#2730dd76a97969f37f53b9a6096197be311cc4ea" 52 | integrity sha512-wG1cc/JhRgdqB6WHEuyLTedf3KIRuD0hG6ldkFEZNCjRxiC+3i6kkWUUbiJQayP28iwG35cEmAbe98585BYV0A== 53 | dependencies: 54 | colorette "^1.2.2" 55 | nanoid "^3.1.23" 56 | source-map-js "^0.6.2" 57 | 58 | resolve@^1.20.0: 59 | version "1.20.0" 60 | resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.20.0.tgz#629a013fb3f70755d6f0b7935cc1c2c5378b1975" 61 | integrity sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A== 62 | dependencies: 63 | is-core-module "^2.2.0" 64 | path-parse "^1.0.6" 65 | 66 | rollup@^2.38.5: 67 | version "2.56.2" 68 | resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.56.2.tgz#a045ff3f6af53ee009b5f5016ca3da0329e5470f" 69 | integrity sha512-s8H00ZsRi29M2/lGdm1u8DJpJ9ML8SUOpVVBd33XNeEeL3NVaTiUcSBHzBdF3eAyR0l7VSpsuoVUGrRHq7aPwQ== 70 | optionalDependencies: 71 | fsevents "~2.3.2" 72 | 73 | source-map-js@^0.6.2: 74 | version "0.6.2" 75 | resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-0.6.2.tgz#0bb5de631b41cfbda6cfba8bd05a80efdfd2385e" 76 | integrity sha512-/3GptzWzu0+0MBQFrDKzw/DvvMTUORvgY6k6jd/VS6iCR4RDTKWH6v6WPwQoUO8667uQEf9Oe38DxAYWY5F/Ug== 77 | 78 | vite@^2.4.4: 79 | version "2.5.0" 80 | resolved "https://registry.yarnpkg.com/vite/-/vite-2.5.0.tgz#111ba3679432d426e44566acf480005a7914cbd6" 81 | integrity sha512-Dn4B+g54PJsMG5WCc4QeFy1ygMXRdTtFrUPegqfk4+vzVQcbF/DqqmI/1bxezArzbujBJg/67QeT5wz8edfJVQ== 82 | dependencies: 83 | esbuild "^0.12.17" 84 | postcss "^8.3.6" 85 | resolve "^1.20.0" 86 | rollup "^2.38.5" 87 | optionalDependencies: 88 | fsevents "~2.3.2" 89 | -------------------------------------------------------------------------------- /dia5/conteudo-dia4/main.js: -------------------------------------------------------------------------------- 1 | import './style.css' 2 | import { get, post, del } from './http' 3 | 4 | const url = 'http://localhost:3333/cars' 5 | const form = document.querySelector('[data-js="cars-form"]') 6 | const table = document.querySelector('[data-js="table"]') 7 | 8 | const getFormElement = (event) => (elementName) => { 9 | return event.target.elements[elementName] 10 | } 11 | 12 | const elementTypes = { 13 | image: createImage, 14 | text: createText, 15 | color: createColor, 16 | } 17 | 18 | function createImage (data) { 19 | const td = document.createElement('td') 20 | const img = document.createElement('img') 21 | img.src = data.src 22 | img.alt = data.alt 23 | img.width = 100 24 | td.appendChild(img) 25 | return td 26 | } 27 | 28 | function createText (value) { 29 | const td = document.createElement('td') 30 | td.textContent = value 31 | return td 32 | } 33 | 34 | function createColor (value) { 35 | const td = document.createElement('td') 36 | const div = document.createElement('div') 37 | div.style.width = '100px' 38 | div.style.height = '100px' 39 | div.style.background = value 40 | td.appendChild(div) 41 | return td 42 | } 43 | 44 | form.addEventListener('submit', async (e) => { 45 | e.preventDefault() 46 | const getElement = getFormElement(e) 47 | 48 | const data = { 49 | image: getElement('image').value, 50 | brandModel: getElement('brand-model').value, 51 | year: getElement('year').value, 52 | plate: getElement('plate').value, 53 | color: getElement('color').value, 54 | } 55 | 56 | const result = await post(url, data) 57 | 58 | if (result.error) { 59 | console.log('deu erro na hora de cadastrar', result.message) 60 | return 61 | } 62 | 63 | const noContent = document.querySelector('[data-js="no-content"]') 64 | if (noContent) { 65 | table.removeChild(noContent) 66 | } 67 | 68 | createTableRow(data) 69 | 70 | e.target.reset() 71 | image.focus() 72 | }) 73 | 74 | function createTableRow (data) { 75 | const elements = [ 76 | { type: 'image', value: { src: data.image, alt: data.brandModel } }, 77 | { type: 'text', value: data.brandModel }, 78 | { type: 'text', value: data.year }, 79 | { type: 'text', value: data.plate }, 80 | { type: 'color', value: data.color } 81 | ] 82 | 83 | const tr = document.createElement('tr') 84 | tr.dataset.plate = data.plate 85 | 86 | elements.forEach(element => { 87 | const td = elementTypes[element.type](element.value) 88 | tr.appendChild(td) 89 | }) 90 | 91 | const button = document.createElement('button') 92 | button.textContent = 'Excluir' 93 | button.dataset.plate = data.plate 94 | 95 | button.addEventListener('click', handleDelete) 96 | 97 | tr.appendChild(button) 98 | 99 | table.appendChild(tr) 100 | } 101 | 102 | async function handleDelete (e) { 103 | const button = e.target 104 | const plate = button.dataset.plate 105 | 106 | const result = await del(url, { plate }) 107 | 108 | if (result.error) { 109 | console.log('erro ao deletar', result.message) 110 | return 111 | } 112 | 113 | const tr = document.querySelector(`tr[data-plate="${plate}"]`) 114 | table.removeChild(tr) 115 | button.removeEventListener('click', handleDelete) 116 | 117 | const allTrs = table.querySelector('tr') 118 | if (!allTrs) { 119 | createNoCarRow() 120 | } 121 | } 122 | 123 | function createNoCarRow () { 124 | const tr = document.createElement('tr') 125 | const td = document.createElement('td') 126 | const thsLength = document.querySelectorAll('table th').length 127 | td.setAttribute('colspan', thsLength) 128 | td.textContent = 'Nenhum carro encontrado' 129 | 130 | tr.dataset.js = 'no-content' 131 | tr.appendChild(td) 132 | table.appendChild(tr) 133 | } 134 | 135 | async function main () { 136 | const result = await get(url) 137 | 138 | if (result.error) { 139 | console.log('Erro ao buscar carros', result.message) 140 | return 141 | } 142 | 143 | if (result.length === 0) { 144 | createNoCarRow() 145 | return 146 | } 147 | 148 | result.forEach(createTableRow) 149 | } 150 | 151 | main() 152 | -------------------------------------------------------------------------------- /dia4/README.md: -------------------------------------------------------------------------------- 1 | # Desafio do dia 04 2 | 3 | Para esse desafio, você vai encontrar dois diretórios: `app` (frontend, onde 4 | você vai trabalhar) e `server`, que é o servidor que você irá precisar para os 5 | exercícios desse desafio. 6 | 7 | Você vai precisar de dois terminais dessa vez: um para rodar o servidor do `server`, 8 | e outro para rodar o servidor do frontend, que está no diretório `app`. 9 | 10 | O `server` foi criado com Node.js, então para colocar ele pra funcionar é bem simples: 11 | abra um terminal, acesse o diretório do `server`, execute `yarn` para instalar as 12 | dependências, e então `yarn start` para subir o servidor. 13 | 14 | O servidor vai ficar ouvindo as requisições na porta `3333` do seu `localhost`. 15 | 16 | Esse é o mesmo servidor que você me viu rodando na aula 4: é uma API para CRUD 17 | de carros. 18 | 19 | Para quem não conhece o termo, CRUD significa _Create, Read, Update and Delete_, 20 | ou Criar, Ler, Atualizar e Deletar. Basicamente a nossa API vai permitir fazer 21 | essas 4 operações com os carros: cadastrar um carro (Create), obter a lista de 22 | carros cadastrados (Read), atualizar um carro (Update) e remover um carro (Delete). 23 | 24 | A URL do servidor que você irá utilizar será sempre a mesma: `http://localhost:3333/cars`. 25 | 26 | O que vai mudar serão apenas os **métodos HTTP**, que vão dizer a intenção da requisição. 27 | Mais informações nos exercícios abaixo. 28 | 29 | Todos os dados salvos no servidor ficam em memória. Então, sempre que você quiser 30 | "começar de novo", limpando todos os carros cadastrados, você só precisa derrubar 31 | o servidor (usando `Ctrl + C` no terminal onde o servidor está rodando) e colocar 32 | ele para rodar de novo (com `yarn start`). 33 | 34 | ## Exercício 1 35 | 36 | No desafio anterior, você criou um formulário para cadastro de carros. Copie o 37 | formulário e a tabela do exercício anterior para o arquivo `index.html`. 38 | 39 | ## Exercício 2 40 | 41 | Logo que o frontend carregar, deverá ser feito um request para o servidor para 42 | buscar todos os carros que foram cadastrados. Lembre-se que, para **obter** informações, 43 | usamos o método `GET`. 44 | 45 | Como resultado da requisição, você irá receber um array com todos os carros cadastrados. 46 | Se não houverem carros cadastrados, o resultado será um array vazio. 47 | 48 | Mostre na tabela os carros cadastrados, e, se não houverem carros, mostre na tabela 49 | apenas uma linha com o texto: "Nenhum carro encontrado". 50 | 51 | ## Exercício 3 52 | 53 | Vamos cadastrar um carro. 54 | 55 | Ao preencher o formulário, um novo carro deverá ser cadastrado. Para cadastrar um carro, 56 | você deverá fazer um request do tipo `POST`, e enviar os dados para o servidor. 57 | O servidor espera que o corpo do seu request seja um JSON com os seguintes campos: 58 | 59 | | Campo | Tipo do campo | Descrição | 60 | | ------------ | ------------- | --------------------------------------------------------------------------------------------- | 61 | | `image` | `string` | URL da imagem | 62 | | `brandModel` | `string` | Marca e modelo do carro | 63 | | `year` | `number` | Ano de fabricação do carro | 64 | | `plate` | `string` | Placa do carro no formato: ABC-1234 (3 letras, seguidas de um traço, seguida de de 4 números) | 65 | | `color` | `string` | A cor do carro. Pode ser em texto ou em hexadecimal | 66 | 67 | Após cadastrar o primeiro carro, a linha da tabela que dizia "Nenhum carro encontrado" 68 | deve ser removida, e as informações do carro devem ser exibidas na tabela. 69 | 70 | Para todos os outros carros cadastrados, você deverá ir adicionando-os à tabela 71 | um abaixo do outro **se o request de cadastro retornar uma mensagem de sucesso**. 72 | 73 | O campo `plate` deve ser único para cada carro, então, se você tentar cadastrar 74 | um carro com uma placa que já foi cadastrada anteriormente, você obterá um erro. 75 | 76 | O erro será recebido com status code `400`, no seguinte formato: 77 | 78 | ``` 79 | { 80 | "error": true, 81 | "message": "Aqui virá a mensagem com o erro" 82 | } 83 | ``` 84 | 85 | Exiba a mensagem de erro na tela, quando isso acontecer. Fique à vontade para escolher 86 | como a mensagem de erro será exibida para o usuário, só **não use** o `alert` padrão 87 | do navegador. 88 | 89 | Todos os campos são obrigatórios, então um outro possível erro vai acontecer 90 | quando você tentar enviar algum campo vazio. 91 | 92 | ## Exercício 4 93 | 94 | Não falamos nas aulas, mas nós temos alguns outros métodos HTTP além do `GET` e do `POST`. 95 | E o que vamos usar para este exercício é o método `DELETE`. 96 | 97 | Pelo nome, você já deve ter percebido o que ele faz: ao fazer um request para o servidor 98 | com o método `DELETE`, a intenção é **excluir** um carro. 99 | 100 | Para fazer a exclusão, você deverá fazer um request enviando no body um JSON apenas com o campo `plate`, 101 | passando a placa do carro que deverá ser deletado. 102 | 103 | Para fazer a exclusão à partir da nossa interface, crie uma nova coluna na tabela, onde cada carro terá 104 | seu próprio botão de "Excluir". Ao clicar nesse botão, o request com a deleção deverá ser feito, 105 | e se o request retornar com sucesso, a linha da tabela que contém o carro deverá ser excluída. 106 | -------------------------------------------------------------------------------- /dia4/server/yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | accepts@~1.3.7: 6 | version "1.3.7" 7 | resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.7.tgz#531bc726517a3b2b41f850021c6cc15eaab507cd" 8 | integrity sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA== 9 | dependencies: 10 | mime-types "~2.1.24" 11 | negotiator "0.6.2" 12 | 13 | array-flatten@1.1.1: 14 | version "1.1.1" 15 | resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" 16 | integrity sha1-ml9pkFGx5wczKPKgCJaLZOopVdI= 17 | 18 | body-parser@1.19.0: 19 | version "1.19.0" 20 | resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.19.0.tgz#96b2709e57c9c4e09a6fd66a8fd979844f69f08a" 21 | integrity sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw== 22 | dependencies: 23 | bytes "3.1.0" 24 | content-type "~1.0.4" 25 | debug "2.6.9" 26 | depd "~1.1.2" 27 | http-errors "1.7.2" 28 | iconv-lite "0.4.24" 29 | on-finished "~2.3.0" 30 | qs "6.7.0" 31 | raw-body "2.4.0" 32 | type-is "~1.6.17" 33 | 34 | bytes@3.1.0: 35 | version "3.1.0" 36 | resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6" 37 | integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg== 38 | 39 | content-disposition@0.5.3: 40 | version "0.5.3" 41 | resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.3.tgz#e130caf7e7279087c5616c2007d0485698984fbd" 42 | integrity sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g== 43 | dependencies: 44 | safe-buffer "5.1.2" 45 | 46 | content-type@~1.0.4: 47 | version "1.0.4" 48 | resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" 49 | integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== 50 | 51 | cookie-signature@1.0.6: 52 | version "1.0.6" 53 | resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" 54 | integrity sha1-4wOogrNCzD7oylE6eZmXNNqzriw= 55 | 56 | cookie@0.4.0: 57 | version "0.4.0" 58 | resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.0.tgz#beb437e7022b3b6d49019d088665303ebe9c14ba" 59 | integrity sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg== 60 | 61 | cors@2.8.5: 62 | version "2.8.5" 63 | resolved "https://registry.yarnpkg.com/cors/-/cors-2.8.5.tgz#eac11da51592dd86b9f06f6e7ac293b3df875d29" 64 | integrity sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g== 65 | dependencies: 66 | object-assign "^4" 67 | vary "^1" 68 | 69 | debug@2.6.9: 70 | version "2.6.9" 71 | resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" 72 | integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== 73 | dependencies: 74 | ms "2.0.0" 75 | 76 | depd@~1.1.2: 77 | version "1.1.2" 78 | resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" 79 | integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= 80 | 81 | destroy@~1.0.4: 82 | version "1.0.4" 83 | resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" 84 | integrity sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA= 85 | 86 | ee-first@1.1.1: 87 | version "1.1.1" 88 | resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" 89 | integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= 90 | 91 | encodeurl@~1.0.2: 92 | version "1.0.2" 93 | resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" 94 | integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= 95 | 96 | escape-html@~1.0.3: 97 | version "1.0.3" 98 | resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" 99 | integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg= 100 | 101 | etag@~1.8.1: 102 | version "1.8.1" 103 | resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" 104 | integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc= 105 | 106 | express@4.17.1: 107 | version "4.17.1" 108 | resolved "https://registry.yarnpkg.com/express/-/express-4.17.1.tgz#4491fc38605cf51f8629d39c2b5d026f98a4c134" 109 | integrity sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g== 110 | dependencies: 111 | accepts "~1.3.7" 112 | array-flatten "1.1.1" 113 | body-parser "1.19.0" 114 | content-disposition "0.5.3" 115 | content-type "~1.0.4" 116 | cookie "0.4.0" 117 | cookie-signature "1.0.6" 118 | debug "2.6.9" 119 | depd "~1.1.2" 120 | encodeurl "~1.0.2" 121 | escape-html "~1.0.3" 122 | etag "~1.8.1" 123 | finalhandler "~1.1.2" 124 | fresh "0.5.2" 125 | merge-descriptors "1.0.1" 126 | methods "~1.1.2" 127 | on-finished "~2.3.0" 128 | parseurl "~1.3.3" 129 | path-to-regexp "0.1.7" 130 | proxy-addr "~2.0.5" 131 | qs "6.7.0" 132 | range-parser "~1.2.1" 133 | safe-buffer "5.1.2" 134 | send "0.17.1" 135 | serve-static "1.14.1" 136 | setprototypeof "1.1.1" 137 | statuses "~1.5.0" 138 | type-is "~1.6.18" 139 | utils-merge "1.0.1" 140 | vary "~1.1.2" 141 | 142 | finalhandler@~1.1.2: 143 | version "1.1.2" 144 | resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.2.tgz#b7e7d000ffd11938d0fdb053506f6ebabe9f587d" 145 | integrity sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA== 146 | dependencies: 147 | debug "2.6.9" 148 | encodeurl "~1.0.2" 149 | escape-html "~1.0.3" 150 | on-finished "~2.3.0" 151 | parseurl "~1.3.3" 152 | statuses "~1.5.0" 153 | unpipe "~1.0.0" 154 | 155 | forwarded@0.2.0: 156 | version "0.2.0" 157 | resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811" 158 | integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== 159 | 160 | fresh@0.5.2: 161 | version "0.5.2" 162 | resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" 163 | integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac= 164 | 165 | http-errors@1.7.2: 166 | version "1.7.2" 167 | resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.2.tgz#4f5029cf13239f31036e5b2e55292bcfbcc85c8f" 168 | integrity sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg== 169 | dependencies: 170 | depd "~1.1.2" 171 | inherits "2.0.3" 172 | setprototypeof "1.1.1" 173 | statuses ">= 1.5.0 < 2" 174 | toidentifier "1.0.0" 175 | 176 | http-errors@~1.7.2: 177 | version "1.7.3" 178 | resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.3.tgz#6c619e4f9c60308c38519498c14fbb10aacebb06" 179 | integrity sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw== 180 | dependencies: 181 | depd "~1.1.2" 182 | inherits "2.0.4" 183 | setprototypeof "1.1.1" 184 | statuses ">= 1.5.0 < 2" 185 | toidentifier "1.0.0" 186 | 187 | iconv-lite@0.4.24: 188 | version "0.4.24" 189 | resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" 190 | integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== 191 | dependencies: 192 | safer-buffer ">= 2.1.2 < 3" 193 | 194 | inherits@2.0.3: 195 | version "2.0.3" 196 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" 197 | integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= 198 | 199 | inherits@2.0.4: 200 | version "2.0.4" 201 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" 202 | integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== 203 | 204 | ipaddr.js@1.9.1: 205 | version "1.9.1" 206 | resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" 207 | integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== 208 | 209 | media-typer@0.3.0: 210 | version "0.3.0" 211 | resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" 212 | integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g= 213 | 214 | merge-descriptors@1.0.1: 215 | version "1.0.1" 216 | resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" 217 | integrity sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E= 218 | 219 | methods@~1.1.2: 220 | version "1.1.2" 221 | resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" 222 | integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4= 223 | 224 | mime-db@1.49.0: 225 | version "1.49.0" 226 | resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.49.0.tgz#f3dfde60c99e9cf3bc9701d687778f537001cbed" 227 | integrity sha512-CIc8j9URtOVApSFCQIF+VBkX1RwXp/oMMOrqdyXSBXq5RWNEsRfyj1kiRnQgmNXmHxPoFIxOroKA3zcU9P+nAA== 228 | 229 | mime-types@~2.1.24: 230 | version "2.1.32" 231 | resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.32.tgz#1d00e89e7de7fe02008db61001d9e02852670fd5" 232 | integrity sha512-hJGaVS4G4c9TSMYh2n6SQAGrC4RnfU+daP8G7cSCmaqNjiOoUY0VHCMS42pxnQmVF1GWwFhbHWn3RIxCqTmZ9A== 233 | dependencies: 234 | mime-db "1.49.0" 235 | 236 | mime@1.6.0: 237 | version "1.6.0" 238 | resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" 239 | integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== 240 | 241 | ms@2.0.0: 242 | version "2.0.0" 243 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" 244 | integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= 245 | 246 | ms@2.1.1: 247 | version "2.1.1" 248 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" 249 | integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg== 250 | 251 | negotiator@0.6.2: 252 | version "0.6.2" 253 | resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb" 254 | integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw== 255 | 256 | object-assign@^4: 257 | version "4.1.1" 258 | resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" 259 | integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= 260 | 261 | on-finished@~2.3.0: 262 | version "2.3.0" 263 | resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" 264 | integrity sha1-IPEzZIGwg811M3mSoWlxqi2QaUc= 265 | dependencies: 266 | ee-first "1.1.1" 267 | 268 | parseurl@~1.3.3: 269 | version "1.3.3" 270 | resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" 271 | integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== 272 | 273 | path-to-regexp@0.1.7: 274 | version "0.1.7" 275 | resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" 276 | integrity sha1-32BBeABfUi8V60SQ5yR6G/qmf4w= 277 | 278 | proxy-addr@~2.0.5: 279 | version "2.0.7" 280 | resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025" 281 | integrity sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg== 282 | dependencies: 283 | forwarded "0.2.0" 284 | ipaddr.js "1.9.1" 285 | 286 | qs@6.7.0: 287 | version "6.7.0" 288 | resolved "https://registry.yarnpkg.com/qs/-/qs-6.7.0.tgz#41dc1a015e3d581f1621776be31afb2876a9b1bc" 289 | integrity sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ== 290 | 291 | range-parser@~1.2.1: 292 | version "1.2.1" 293 | resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" 294 | integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== 295 | 296 | raw-body@2.4.0: 297 | version "2.4.0" 298 | resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.4.0.tgz#a1ce6fb9c9bc356ca52e89256ab59059e13d0332" 299 | integrity sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q== 300 | dependencies: 301 | bytes "3.1.0" 302 | http-errors "1.7.2" 303 | iconv-lite "0.4.24" 304 | unpipe "1.0.0" 305 | 306 | safe-buffer@5.1.2: 307 | version "5.1.2" 308 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" 309 | integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== 310 | 311 | "safer-buffer@>= 2.1.2 < 3": 312 | version "2.1.2" 313 | resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" 314 | integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== 315 | 316 | send@0.17.1: 317 | version "0.17.1" 318 | resolved "https://registry.yarnpkg.com/send/-/send-0.17.1.tgz#c1d8b059f7900f7466dd4938bdc44e11ddb376c8" 319 | integrity sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg== 320 | dependencies: 321 | debug "2.6.9" 322 | depd "~1.1.2" 323 | destroy "~1.0.4" 324 | encodeurl "~1.0.2" 325 | escape-html "~1.0.3" 326 | etag "~1.8.1" 327 | fresh "0.5.2" 328 | http-errors "~1.7.2" 329 | mime "1.6.0" 330 | ms "2.1.1" 331 | on-finished "~2.3.0" 332 | range-parser "~1.2.1" 333 | statuses "~1.5.0" 334 | 335 | serve-static@1.14.1: 336 | version "1.14.1" 337 | resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.14.1.tgz#666e636dc4f010f7ef29970a88a674320898b2f9" 338 | integrity sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg== 339 | dependencies: 340 | encodeurl "~1.0.2" 341 | escape-html "~1.0.3" 342 | parseurl "~1.3.3" 343 | send "0.17.1" 344 | 345 | setprototypeof@1.1.1: 346 | version "1.1.1" 347 | resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683" 348 | integrity sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw== 349 | 350 | "statuses@>= 1.5.0 < 2", statuses@~1.5.0: 351 | version "1.5.0" 352 | resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" 353 | integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= 354 | 355 | toidentifier@1.0.0: 356 | version "1.0.0" 357 | resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553" 358 | integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw== 359 | 360 | type-is@~1.6.17, type-is@~1.6.18: 361 | version "1.6.18" 362 | resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" 363 | integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== 364 | dependencies: 365 | media-typer "0.3.0" 366 | mime-types "~2.1.24" 367 | 368 | unpipe@1.0.0, unpipe@~1.0.0: 369 | version "1.0.0" 370 | resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" 371 | integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw= 372 | 373 | utils-merge@1.0.1: 374 | version "1.0.1" 375 | resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" 376 | integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM= 377 | 378 | vary@^1, vary@~1.1.2: 379 | version "1.1.2" 380 | resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" 381 | integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw= 382 | --------------------------------------------------------------------------------