├── 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 |
16 |
--------------------------------------------------------------------------------
/dia2/favicon.svg:
--------------------------------------------------------------------------------
1 |
16 |
--------------------------------------------------------------------------------
/dia3/favicon.svg:
--------------------------------------------------------------------------------
1 |
16 |
--------------------------------------------------------------------------------
/dia4/app/favicon.svg:
--------------------------------------------------------------------------------
1 |
16 |
--------------------------------------------------------------------------------
/dia5/conteudo-dia4/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Dia 4
8 |
9 |
10 |
11 |
12 |
13 |
41 |
42 |
43 |
44 |
45 | | Imagem |
46 | Marca / Modelo |
47 | Ano |
48 | Placa |
49 | Cor |
50 | |
51 |
52 |
53 |
54 |
55 |
56 |
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 |
--------------------------------------------------------------------------------