diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..c2065bc
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,37 @@
+HELP.md
+.gradle
+build/
+!gradle/wrapper/gradle-wrapper.jar
+!**/src/main/**/build/
+!**/src/test/**/build/
+
+### STS ###
+.apt_generated
+.classpath
+.factorypath
+.project
+.settings
+.springBeans
+.sts4-cache
+bin/
+!**/src/main/**/bin/
+!**/src/test/**/bin/
+
+### IntelliJ IDEA ###
+.idea
+*.iws
+*.iml
+*.ipr
+out/
+!**/src/main/**/out/
+!**/src/test/**/out/
+
+### NetBeans ###
+/nbproject/private/
+/nbbuild/
+/dist/
+/nbdist/
+/.nb-gradle/
+
+### VS Code ###
+.vscode/
diff --git a/32211207872718000117550010000217781877120005-nfe.xml b/32211207872718000117550010000217781877120005-nfe.xml
index 0b01f56..fc6ef5f 100644
--- a/32211207872718000117550010000217781877120005-nfe.xml
+++ b/32211207872718000117550010000217781877120005-nfe.xml
@@ -1,2 +1,282 @@
-32 87712000 VENDA MERCAD.ADQ.TERCEIROS 55 1 21778 2021-12-01T19:03:21-03:00 2021-12-01T19:03:21-03:00 1 1 3201308 1 1 5 1 1 0 1 0 MeLinux 6.3 07872718000117 COMERCIAL S.R.DE ALIMENTOS LTDA-ME SR ALIMENTOS R.ODONIA DA COSTA MACHADO TOLEDO 56 QUADRA 1 LOTE 5 TIRADENTES 3201308 CARIACICA ES 29143529 1058 BRASIL 2733363026 082384975 3 17197072000173 JEFERSON SIMAO DE OLIVEIRA - ME RUA SAO JOAO 49 ITACIBA 3201308 CARIACICA ES 29150230 1058 BRASIL 27996502121 1 082917825 001378 SEM GTIN FILE MERLUZA ARGENTINA INTERF.CX 18 c/ 18 KG 03047400 5102 CX 1 503.82 503.82 SEM GTIN CX 18 27.99 1 2 20 3 58.82 207.46 17.00 35.27 999 53 01 503.82 0.65 3.27 01 503.82 3.00 15.11 000195 7896481907388 CUPIM MAGRO FRISA CX -+ 18KG 02013000 1708400 5405 KG 21.71 29.12989406 632.41 7896481907388 KG 21.71 29.12989406 1 0 60 999 53 01 632.41 0.65 4.11 01 632.41 3.00 18.97 207.46 35.27 0.00 0.00 0.00 0.00 0.00 0.00 1136.23 0.00 0.00 0.00 0.00 0.00 0.00 7.38 34.08 0.00 1136.23 9 07872718000117 COMERCIAL S.R.DE ALIMENTOS LTDA-ME 082384975 RUA ODONIA DA COSTA MACHADO TOLEDO, 41 QD 1 LOTE 5 TIRADENTE CARIACICA ES 23 DIVERSAS DIVERSAS 40.106 021778 1136.23 0.00 1136.23 001 2022-12-15 568.11 002 2022-12-22 568.12 15 1136.23 Cod.Dest: 7452 Fantasia: REST.ESPA.GRILL Faturista: IGOR REIS # Forma Pag: BOLETO # Vendedor: TACIANI (27)99735-5228 Num.Ped: 102667 # Doc.emitido por ME/EPP optante do SIMPLES NACIONAL; nao gera credito fiscal de IPI e ISS # RUA DA FEIRA # sem email cadastrado para envio do XML # # Confira no ato da entrega, evite reclamacoes posteriores 19495981000113 OTMA SOLUCOES LTDA contato@otmasolucoes.com.br 2721417943 yU29u4Sva8be/dmxDzD7eyMIOaY= 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
-1 SVRS202111190951 32211207872718000117550010000217781877120005 2021-12-01T19:03:22-03:00 332210083442441 yU29u4Sva8be/dmxDzD7eyMIOaY= 100 Autorizado o uso da NF-e
\ No newline at end of file
+
+
+
+
+
+ 32
+ 87712000
+ VENDA MERCAD.ADQ.TERCEIROS
+ 55
+ 1
+ 21778
+ 2021-12-01T19:03:21-03:00
+ 2021-12-01T19:03:21-03:00
+ 1
+ 1
+ 3201308
+ 1
+ 1
+ 5
+ 1
+ 1
+ 0
+ 1
+ 0
+ MeLinux 6.3
+
+
+ 07872718000117
+ COMERCIAL S.R.DE ALIMENTOS LTDA-ME
+ SR ALIMENTOS
+
+ R.ODONIA DA COSTA MACHADO TOLEDO
+ 56
+ QUADRA 1 LOTE 5
+ TIRADENTES
+ 3201308
+ CARIACICA
+ ES
+ 29143529
+ 1058
+ BRASIL
+ 2733363026
+
+ 082384975
+ 3
+
+
+ 17197072000173
+ JEFERSON SIMAO DE OLIVEIRA - ME
+
+ RUA SAO JOAO
+ 49
+ ITACIBA
+ 3201308
+ CARIACICA
+ ES
+ 29150230
+ 1058
+ BRASIL
+ 27996502121
+
+ 1
+ 082917825
+
+
+
+ 001378
+ SEM GTIN
+ FILE MERLUZA ARGENTINA INTERF.CX 18 c/ 18 KG
+ 03047400
+ 5102
+ CX
+ 1
+ 503.82
+ 503.82
+ SEM GTIN
+ CX
+ 18
+ 27.99
+ 1
+
+
+
+
+ 2
+ 20
+ 3
+ 58.82
+ 207.46
+ 17.00
+ 35.27
+
+
+
+ 999
+
+ 53
+
+
+
+
+ 01
+ 503.82
+ 0.65
+ 3.27
+
+
+
+
+ 01
+ 503.82
+ 3.00
+ 15.11
+
+
+
+
+
+
+ 000195
+ 7896481907388
+ CUPIM MAGRO FRISA CX -+ 18KG
+ 02013000
+ 1708400
+ 5405
+ KG
+ 21.71
+ 29.12989406
+ 632.41
+ 7896481907388
+ KG
+ 21.71
+ 29.12989406
+ 1
+
+
+
+
+ 0
+ 60
+
+
+
+ 999
+
+ 53
+
+
+
+
+ 01
+ 632.41
+ 0.65
+ 4.11
+
+
+
+
+ 01
+ 632.41
+ 3.00
+ 18.97
+
+
+
+
+
+
+ 207.46
+ 35.27
+ 0.00
+ 0.00
+ 0.00
+ 0.00
+ 0.00
+ 0.00
+ 1136.23
+ 0.00
+ 0.00
+ 0.00
+ 0.00
+ 0.00
+ 0.00
+ 7.38
+ 34.08
+ 0.00
+ 1136.23
+
+
+
+ 9
+
+ 07872718000117
+ COMERCIAL S.R.DE ALIMENTOS LTDA-ME
+ 082384975
+ RUA ODONIA DA COSTA MACHADO TOLEDO, 41 QD 1 LOTE 5 TIRADENTE
+ CARIACICA
+ ES
+
+
+ 23
+ DIVERSAS
+ DIVERSAS
+ 40.106
+
+
+
+
+ 021778
+ 1136.23
+ 0.00
+ 1136.23
+
+
+ 001
+ 2022-12-15
+ 568.11
+
+
+ 002
+ 2022-12-22
+ 568.12
+
+
+
+
+ 15
+ 1136.23
+
+
+
+ Cod.Dest: 7452 Fantasia: REST.ESPA.GRILL Faturista: IGOR REIS # Forma Pag: BOLETO # Vendedor:
+ TACIANI (27)99735-5228 Num.Ped: 102667 # Doc.emitido por ME/EPP optante do SIMPLES NACIONAL; nao
+ gera credito fiscal de IPI e ISS # RUA DA FEIRA # sem email cadastrado para envio do XML # # Confira
+ no ato da entrega, evite reclamacoes posteriores
+
+
+
+ 19495981000113
+ OTMA SOLUCOES LTDA
+ contato@otmasolucoes.com.br
+ 2721417943
+
+
+
+
+
+
+
+
+
+
+
+
+ yU29u4Sva8be/dmxDzD7eyMIOaY=
+
+
+
+ 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
+
+
+
+
+
+
+
+ 1
+ SVRS202111190951
+ 32211207872718000117550010000217781877120005
+ 2021-12-01T19:03:22-03:00
+ 332210083442441
+ yU29u4Sva8be/dmxDzD7eyMIOaY=
+ 100
+ Autorizado o uso da NF-e
+
+
+
\ No newline at end of file
diff --git a/Dockerfile b/Dockerfile
new file mode 100644
index 0000000..43156d6
--- /dev/null
+++ b/Dockerfile
@@ -0,0 +1,4 @@
+FROM eclipse-temurin:17-jdk-alpine
+VOLUME /tmp
+COPY /build/libs/RecombApp-0.0.1-SNAPSHOT.jar app.jar
+ENTRYPOINT ["java","-jar","/app.jar"]
\ No newline at end of file
diff --git a/Documentacao.md b/Documentacao.md
new file mode 100644
index 0000000..8c0d7ac
--- /dev/null
+++ b/Documentacao.md
@@ -0,0 +1,307 @@
+# Documentação do Funcionamento da Implementação do Sistema
+
+## O FRONTEND
+### VUE
+- O VUE, framework de JavaScript, com possibilidade de implementação utilizando o TypeScript também,
+foi escolhido por conta da versatilidade, usabilidade e facilidade na comuniação de seus componentes com
+o consumo da API desenvolvida. Além disso, pode-se destacar a organização de sua estrutura, que, por ser simples, torna
+viável o uso de bibliotecas necessárias, através do node, para desenvolvimento do sistema
+
+#### VIEWS
+- Home View
+A Home View, localizado em _views_, possui a renderização do componente desenvolvido para esse sistema.
+Como o _App.vue_ está com o RouterView para renderização, ao inserirmos o path: "_/_", ou seja, o path root, a renderização a ser
+realizada é da própria home. Dessa forma, o componente _TheWelcome_ está sendo "consumido" para a criação
+do modelo da página e sua posterior renderização.
+
+```
+
+
+
+
+
+
+
+
+```
+
+#### ROTAS
+- index.js
+As rotas, como abordado de forma rápida no tópico acima, define qual URL está sendo renderizada no momento, ou seja,
+qual View deve ser renderizada conforme o path informado. Na rota implementada não houve necessidade de implementação
+de outras possibilidades, visto que, uma única rota possui a formatação necessária para o envio do arquivo e visualização da consulta quando filtrado.
+```
+ const router = createRouter({
+ history: createWebHistory(import.meta.env.BASE_URL),
+ routes: [
+ {
+ path: '/',
+ name: 'home',
+ component: HomeView
+ },
+ ]
+ })
+```
+
+#### COMPONENTES
+- components/TheWelcome
+O único componente desenvolvido foi o _TheWelcome_, o mesmo que é inicializado quando é criado um projeto
+em VUE. Para definir melhor cada parte, separemos em partes:
+---
+##### Nome e Dados
+```
+export default {
+ name: "TheWelcome",
+ data() {
+ return {
+ xml_file: null,
+ resp: null,
+ showMessage: false,
+ search: "",
+ clientes_fornecedor: []
+ }
+ },
+```
+O trecho de código acima possui a criação do nome do componente, ou seja, outro componente, view, serviço, etc, que queiram
+importar esse componente, fazem através do nome informado no campo _name_.
+
+**DATA**
+Data retorna a criação de objetos no DOM do componente. Dessa forma, a parte lógica e o desenvolvimento de métodos
+que precisam de consumir determinados dados, atualizar informações, fazem assim através da chamada _this.nomedodado_.
+Dessa forma, no sistema desenvolvido existem alguns campos diferentes:
+- xml_file: Responsavel por armazenar o arquivo xml
+- resp: Responsável por armazenar o response em Json
+- showMessage: Determina se houveram inicidências de Clientes ou Fornecedores a partir do filtro informado
+- search: Armazena o campo de Pesquisa atual, ou seja, o que o usuário está digitando no campo de filtro
+- clientes_fornecedor: Armazena todos os clientes e fornecedores que possuem CPF ou CNPJ com a os numeros informados
+
+---
+**Metodos**
+```
+methods: {
+ sendFile() {
+ let FileForm = new FormData();
+ FileForm.append("fileNf", this.xml_file);
+ if (this.xml_file['type'] !== 'text/xml') {
+ alert("Por favor, envie um arquivo XML válido!")
+ } else {
+
+ sendFileXML(FileForm).then((response) => (this.resp = response.data))
+ .then((response) =>
+ this.resp = this.resp.map((d) => {
+ return {
+ boleto: d.boleto,
+ cliente: d.cliente,
+ fornecedor: d.fornecedor,
+ };
+ }));
+ }
+ },
+ doSearch(value) {
+ searchClient(value).then((response) => {
+ this.clientes_fornecedor = response.data;
+ if(response.data.fornecedores.length > 0 || response.data.clientes.length > 0){
+ this.showMessage = false
+ }
+ })
+
+ },
+ onImageUpload() {
+ this.xml_file = this.$refs.uploadImage.files[0];
+ }
+ },
+```
+**sendFile**
+O Método cria um FormData em sua inicialização. Isso ocorre, pois, como estamos fazendo o envio de um arquivo,
+para que a API possa entender o que está sendo passado e para que a requisição possa enviar o XML, o formData oferece
+a possibilidade de fazer esse envio. Observa-se, no entanto, que, o FileForm possui um nome e um valor, e nesse caso
+o nome informado no FileForm é o mesmo em que a API está esperando o arquivo, dessa forma facilita o consumo e a chegada do arquivo na Controller
+para ser processado no serviço.
+Na continuação da chamada desse serviço, o Método então se comunica com sendFileXml, uma função inclusa no _axiosService_ e nesse momento,
+após criar o FormFile, passa ele como parâmetro.
+O mapeamento que ocorre em seguida recebe as informações da NotaFiscal que a Controller retorna como um ResponseEntity no padrão informado.
+No decorrer do processamento dessa página, ao enviar um arquivo XML válido, é criada uma seção abaixo da ‘interface’ principal que retorna com as informações da NFE referente
+ao arquivo enviado.
+
+**doSearch()**
+O método faz a busca, com a chamada do axios em _axiosService_ informando o valor que está presente no campo de filtro.
+```
+
+
+
+```
+O retorno da chamada do axios, o response, é passado para a variável criada _clientes_fornecedor_, e na continuidade,
+é feita uma verificação para saber se houve algum retorno de objetos esperados. Caso haja retorno, a variável _showMessage_ recebe o valor de false,
+indicando que não é necessário informar que não houve retornos, e por fim, a _div_ que possui essa condição não será renderizada.
+
+**onFileUpload**
+A função _onImageUpload_ é apenas chamada em condição de alteração de campo.
+```
+
+```
+A notação _@change_ verifica se houve alguma mudança no input. Se houver qualquer alteração, a função é chamada. Sua funcionalidade é armazenar
+o arquivo enviado à variável informada, e dessa forma, possibilitar a ciração do FileForm.
+
+---
+**WATCHER**
+
+```
+watch: {
+ search(value) {
+ if (this.search.length < 3) {
+ this.showMessage = false
+ this.clientes_fornecedor = []
+ }
+ if (this.search.length > 2) {
+ this.showMessage = true
+ this.doSearch(value)
+ }
+ }
+ },
+```
+O Watcher, ou watch, como seu próprio nome indica, assiste alguma mudança que possa ocorrer. No desenvolvimento do sistema,
+uma das ideias foi implementar a funcionalidade de filtro de forma dinâmica, ou seja, sem a necessidade de clicar em um botão para
+consumir o serviço. Dessa forma, houve a implementação:
+```
+
+
+
+```
+O _watch_ observa o input com o v-model _search_, o qual possui o campo em _data_ como já informado. Dessa forma, a cada mudança, ocorre a chamada
+da pesquisa de Clientes e Fornecedores para visualização na Interface _doSearch_. Para impedir uma consulta constante,
+foi implementada a necessidade de que o campo possua no mínimo 3 caracteres para que a consulta seja realizada.
+
+### Estilização
+Apenas para referenciamento, a estilização dos componentes da página foi realizada com _Tailwind_. A implementação do Tailwind se deu pela conta da
+familiariedade com a ferramente e as opções ofertadas para construção de elementos no DOM com a utilização de diversas classes disponibilizadas.
+---
+## O BACKEND
+### JAVA (SpringBoot) - MYSQL
+
+A utilização de JAVA nesse sistema não foi por acaso. A escolha da linguagem e seu Framework foi realizada através da conclusão de possuir uma organização
+bem estruturada. O Java é uma linguagem robusta, fortemente tipada com seu desenvolvimento voltado para Orientação a Objetos, o qual também é utilizado no desenvolvimento
+de banco de dados. Dessa forma, torna-se mais viável, por conta da estratégia de criação de objetos semelhante na comunicação da linguagem com o Banco de Dados (MySql).
+O Padrão escolhido para esse projeto foi o MVC(Model, View, Controller). Como abordado em algumas partes do _Front End_ a controller tem um papel fundamental na chamada de serviços com
+recebimento de dados do _Front-End_ ou no envio de informações à ‘interface’.
+
+---
+### Controllers
+#### ConvertXmlJson
+A controller possui apenas o Método de POST. O seu endpoint _/convert/xmlToJson_ permite que o arquivo enviado seja redirecionado para o serviço desejado.
+
+#### ClienteController
+A controller possui dois métodos _GET_, pois, no desenvolvimento de busca de informações, não houve necessidade de implementar o POSTMAPPING do cliente,
+uma vez que, a criação de cliente se dá pela análise do arquivo XML enviado pelo usuário.
+##### ("/cliente/getAll") - Retorna todos os clientes no Banco de Dados
+##### ("/cliente/{documento}") - Retorna os clientes com o documento(cpf) informado.
+
+#### NotaFiscalController
+Possui apenas um GET, o qual retorna os Clientes e Fornecedores conforme o documento. O mesmo foi colocado em NotaFiscalController, pois na continuidade de uma implementação,
+as informaçãoes completas dos mesmo serão trazidas, ou seja, a NotaFiscal completa.
+##### ("/notafiscal/{documento}") - Retorna Clientes e Fornecedores com a inicialização do CPF ou CNPJ iguais ao documento informado
+
+---
+### Model
+Os modelos Criados são as mesmas entidades criadas no Banco de dados. A notação de persistência abaixo garante que isso aconteça.
+```
+@Table(name = "nome_tabel")
+@Entity
+@Getter
+@Setter
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+@Builder
+```
+Em table cria-se a tabela.
+Em Entity cria-se a entidade daquele objeto.
+Em Getter cria-se os Getters de todos os campos do objeto.
+Em Setter cria-se os Setters de todos os campos do objeto.
+Em Data é garantida a persitência de dados.
+Em Builder é possível construir o objeto sem necessariamente instanciar com _new_.
+
+---
+### Payload
+Os Payloads são tratados como As requisições necessárias que a controller pode receber, ou as Responses que a Controller pode enviar.
+O Paylaod.response.NFResponse, por exemplo, é utilizado para aramazenar o retorno dos clientes e fornecedores, e retornar à Controller.
+Os Payloads possuem também a notação _@Builder_, dessa forma, um serviço pode construir a resposta sem Instanciação, deixando o código mais legível e eficiente.
+
+---
+### Repository
+Os repositórios são interfaces responsáveis pelas Queries com o Banco de dados. Ou seja, cada repositório é responsável por um modelo.
+
+#### A implementação com o JPA
+O JPA, Java Persistence API, possui uma linguagem de criação de consulta inteligente. Para uma determinada consulta, a API possui palavras reservadas,
+para o nome da função resultante, que entende o retorno que será obtido e qual query, ou queries, devem ser feitas no Banco de Dados. Exemplo:
+```
+List findFornecedorsByCNPJStartsWith(String Cnpj);
+```
+O JPA entende da seguinte forma: _findFornecedores_, como a palavra está no plural, deve-se dar um "SELECT *" e o resultado vai ser o mapeamento para a Model de Fornecedores.
+Porém, como eu vou achá-los? Qual o parâmetro? O mesmo é passado em seguida. _ByCNPJStartsWith_ é similar ao _LIKE %%_, porém, apenas a inicialização da palavra, pois, se o número do CPF ou CNPJ
+que estivermos filtrando estiver no meio, ou separado pelo campo, não fará sentido em ser um resultado da busca que possui uma determinada ordem.
+
+---
+### SERVICES
+#### Deserialize.DeserializeXML
+O serviço de Deserialização do XML é realizado com o Jackson. O Jackson é um processador JSON de altoi desempenho. Com ele foi possível implementar a conversão de XML para JSON e criar o objeto necessário de acordo com o Modelo requerido.
+ _SaveXml_ Possui a implementação do Mapeador para XML ser lido como JSON. Dessa forma, é criado um JsonNode, o qual faz a leitura do arquivo solicitado e o mapeia como nós em JSON.
+Sendo assim, para que cada componente pudesse receber um valor, o Objeto JsonNode permite fazer uma busca com base nas Tags XML. Dessa forma, para cada campo de cada modelo, foi passado o caminho e extraído o valor.
+```
+ClienteDTO clienteDTO = ClienteDTO.builder()
+ .CPF(node.at("/NFe/infNFe/dest").get("CNPJ").asText())
+ .nome(node.at("/NFe/infNFe/dest").get("xNome").asText())
+ .endereco(enderecoDTOModel)
+ .build();
+
+FornecedorDTO fornecedorDTO = FornecedorDTO.builder()
+ .CNPJ(node.at("/NFe/infNFe/emit").get("CNPJ").asText())
+ .nome(node.at("/NFe/infNFe/emit").get("xNome").asText())
+ .EnderecoEmissor(enderecoEmissorDTOModel)
+ .build();
+
+EnderecoDTO enderecoEmissorDTO = EnderecoDTO.builder()
+ .CEP(node.at("/NFe/infNFe/emit/enderEmit").get("CEP").asText())
+ .cMun(node.at("/NFe/infNFe/emit/enderEmit").get("cMun").asText())
+ .cMun(node.at("/NFe/infNFe/emit/enderEmit").get("cMun").asText())
+ .cPais(node.at("/NFe/infNFe/emit/enderEmit").get("cPais").asText())
+ .xMun(node.at("/NFe/infNFe/emit/enderEmit").get("xMun").asText())
+ .nro(node.at("/NFe/infNFe/emit/enderEmit").get("nro").asText())
+ .UF(node.at("/NFe/infNFe/emit/enderEmit").get("UF").asText())
+ .xLgr(node.at("/NFe/infNFe/emit/enderEmit").get("xLgr").asText())
+ .xBairro(node.at("/NFe/infNFe/emit/enderEmit").get("xBairro").asText())
+ .xPais(node.at("/NFe/infNFe/emit/enderEmit").get("xPais").asText())
+ .fone(node.at("/NFe/infNFe/emit/enderEmit").get("fone").asText())
+ .build();
+
+ EnderecoDTO enderecoDTO = EnderecoDTO.builder()
+ .CEP(node.at("/NFe/infNFe/dest/enderDest").get("CEP").asText())
+ .cMun(node.at("/NFe/infNFe/dest/enderDest").get("cMun").asText())
+ .cPais(node.at("/NFe/infNFe/dest/enderDest").get("cPais").asText())
+ .xMun(node.at("/NFe/infNFe/dest/enderDest").get("xMun").asText())
+ .nro(node.at("/NFe/infNFe/dest/enderDest").get("nro").asText())
+ .UF(node.at("/NFe/infNFe/dest/enderDest").get("UF").asText())
+ .xLgr(node.at("/NFe/infNFe/dest/enderDest").get("xLgr").asText())
+ .xBairro(node.at("/NFe/infNFe/dest/enderDest").get("xBairro").asText())
+ .xPais(node.at("/NFe/infNFe/dest/enderDest").get("xPais").asText())
+ .fone(node.at("/NFe/infNFe/dest/enderDest").get("fone").asText())
+ .build();
+```
+Como exemplos acima, o JsonNode possui a chamada de função _at_ o qual permite informar o caminho, como um URL até o valor desejado.
+Após informar o caminho, a função _get_ aceita como parâmetro uma string, referente ao nome do campo com o valor requerido. Por fim, a função _asText_ retorna
+o valor do campo como texto para poder ser atribuído ao objeto em questão.
+
+
+##### DTOS
+Como os modelos que recebem as informações não estão presentes no banco de dados, e, além disso, como não é uma troca de informação entre controller e interface, foram criados os DTOS.
+Cada DTO criado possui os mesmos campos do model, com excessão do ID, pois como informado, eles não estão presentes ainda no Banco de Dados. Dessa forma, para que um DTO possa ser mapeado como um objeto de Modelo do Banco de dados,
+foi implementado o código a seguir:
+```
+ModelMapper modelMapper = new ModelMapper();
+```
+O modelMapper possui a função no sistema de fazer o mapeamento entra a DTO e sua respectiva classe, para que, ao chamar o repositório, o modelo possa ser salvo no banco como o objeto requerido.
\ No newline at end of file
diff --git a/ImagemModeloFuncionamento.png b/ImagemModeloFuncionamento.png
new file mode 100644
index 0000000..864293e
Binary files /dev/null and b/ImagemModeloFuncionamento.png differ
diff --git a/NFe-002-3103.xml b/NFe-002-3103.xml
index 831d193..8f9a282 100644
--- a/NFe-002-3103.xml
+++ b/NFe-002-3103.xml
@@ -1,11 +1,318 @@
-31 00464032 Vendas a prazo 55 2 3103 2019-04-10T17:24:03-02:00 2019-04-11T17:17:30-02:00 1 1 3170206 1 1 7 1 1 0 1 0 001 06273476000182 MECA Office Mobil. Eireli-ME MECA Office Mobil. Eireli-ME AV. MARCOS DE FREITAS COSTA 1055 DANIEL FOSECA 3170206 Uberlandia MG 38400328 1058 BRASIL 3432385585 7022916720058 1 25587387000155 HLTS ENGENHARIA E CONSTRUCOES LTDA RUA MACHADO DE ASSIS 1324 LIDICE 3170206 Uberlandia MG 38400081 1058 BRASIL 3432235966 1 7021771340054 00331 SEM GTIN CADEIRA GIRATORIA S/ BRACO ALMOFADADA PRETO 94019090 5102 UN 2 165.00000 330.00 SEM GTIN UN 2 165.00000 1 77.68 0 102 08 08 IMOBILIZADO IMOB - 2317 CADEIRA GIRATORIA S/ BRACO ALMOFADADA PRETO - IMOBILIZADO EQUIP. MOVEIS P/ CANTEIRO MATERIAIS INSTALACAO DE CANTEIRO. 01228 SEM GTIN CADEIRA GIRATORIA C/ BRACO ALMOFADADA PRETO 94019090 5102 UN 1 215.00000 215.00 SEM GTIN UN 1 215.00000 1 50.61 0 102 08 08 IMOBILIZADO EQUIP/MOVEIS P/ CANTEIRO MATERIAIS INSTALACAO DE CANTEIRO 01324 SEM GTIN BANQUETA ALTA 70CM PARA BALCAO ASSENTO 30 OU 94019090 5102 PC 1 90.00000 90.00 SEM GTIN PC 1 90.00000 1 21.19 0 102 08 08 40CM NA COR PRETA - IMOBILIZADO EQUIP./MOVEIS P/ CANTEIRO MATERIAIS INSTALACAO DE CANTEIRO 01644 SEM GTIN ESTANTE ACO C/ 06 PRATELEIRAS 0,93X040X1,98M 94069020 5102 PC 2 234.00000 468.00 SEM GTIN PC 2 234.00000 1 45.87 0 102 08 08 (REFORCADA) AMAPA - IMOBILIZADO. 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 1103.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 1103.00 195.35 0 6 VOLUME VARIAS 0.000 0.000 000003103 1103.00 0.00 1103.00 001 2019-05-11 1103.00 14 1103.00 0.00 ORDEM DE FORNECIMENTO 36994 - 28DD - INFORMACOES COMPLEMENTARES a seguinte informacao. EMPRESA ENQUADRADA NO SIMPLES NACIONAL. NAO GERA CREDITO DE IPI/ISS. GERA CREDITO DE ICMS. Trib aprox R$: 54,84 Federal 140,51 Estadual Fonte: IBPT empresometro.com.br S3A6R4 ngqVwH6QNCAHyRuI529RIAr7Nyk= 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
- 1
- 14.2.26
- 31190406273476000182550020000031031004640327
- 2019-04-10T17:23:27-03:00
- 131193257591884
- ngqVwH6QNCAHyRuI529RIAr7Nyk=
- 100
- Autorizado o uso da NF-e
-
+
+
+
+
+
+ 31
+ 00464032
+ Vendas a prazo
+ 55
+ 2
+ 3103
+ 2019-04-10T17:24:03-02:00
+ 2019-04-11T17:17:30-02:00
+ 1
+ 1
+ 3170206
+ 1
+ 1
+ 7
+ 1
+ 1
+ 0
+ 1
+ 0
+ 001
+
+
+ 06273476000182
+ MECA Office Mobil. Eireli-ME
+ MECA Office Mobil. Eireli-ME
+
+ AV. MARCOS DE FREITAS COSTA
+ 1055
+ DANIEL FOSECA
+ 3170206
+ Uberlandia
+ MG
+ 38400328
+ 1058
+ BRASIL
+ 3432385585
+
+ 7022916720058
+ 1
+
+
+ 25587387000155
+ HLTS ENGENHARIA E CONSTRUCOES LTDA
+
+ RUA MACHADO DE ASSIS
+ 1324
+ LIDICE
+ 3170206
+ Uberlandia
+ MG
+ 38400081
+ 1058
+ BRASIL
+ 3432235966
+
+ 1
+ 7021771340054
+
+
+
+ 00331
+ SEM GTIN
+ CADEIRA GIRATORIA S/ BRACO ALMOFADADA PRETO
+ 94019090
+ 5102
+ UN
+ 2
+ 165.00000
+ 330.00
+ SEM GTIN
+ UN
+ 2
+ 165.00000
+ 1
+
+
+ 77.68
+
+
+ 0
+ 102
+
+
+
+
+ 08
+
+
+
+
+ 08
+
+
+
+ IMOBILIZADO IMOB - 2317 CADEIRA GIRATORIA S/ BRACO ALMOFADADA PRETO - IMOBILIZADO EQUIP.
+ MOVEIS P/ CANTEIRO MATERIAIS INSTALACAO DE CANTEIRO.
+
+
+
+
+ 01228
+ SEM GTIN
+ CADEIRA GIRATORIA C/ BRACO ALMOFADADA PRETO
+ 94019090
+ 5102
+ UN
+ 1
+ 215.00000
+ 215.00
+ SEM GTIN
+ UN
+ 1
+ 215.00000
+ 1
+
+
+ 50.61
+
+
+ 0
+ 102
+
+
+
+
+ 08
+
+
+
+
+ 08
+
+
+
+ IMOBILIZADO EQUIP/MOVEIS P/ CANTEIRO MATERIAIS INSTALACAO DE CANTEIRO
+
+
+
+ 01324
+ SEM GTIN
+ BANQUETA ALTA 70CM PARA BALCAO ASSENTO 30 OU
+ 94019090
+ 5102
+ PC
+ 1
+ 90.00000
+ 90.00
+ SEM GTIN
+ PC
+ 1
+ 90.00000
+ 1
+
+
+ 21.19
+
+
+ 0
+ 102
+
+
+
+
+ 08
+
+
+
+
+ 08
+
+
+
+ 40CM NA COR PRETA - IMOBILIZADO EQUIP./MOVEIS P/ CANTEIRO MATERIAIS INSTALACAO DE CANTEIRO
+
+
+
+
+ 01644
+ SEM GTIN
+ ESTANTE ACO C/ 06 PRATELEIRAS 0,93X040X1,98M
+ 94069020
+ 5102
+ PC
+ 2
+ 234.00000
+ 468.00
+ SEM GTIN
+ PC
+ 2
+ 234.00000
+ 1
+
+
+ 45.87
+
+
+ 0
+ 102
+
+
+
+
+ 08
+
+
+
+
+ 08
+
+
+
+ (REFORCADA) AMAPA - IMOBILIZADO.
+
+
+
+ 0.00
+ 0.00
+ 0.00
+ 0.00
+ 0.00
+ 0.00
+ 0.00
+ 0.00
+ 1103.00
+ 0.00
+ 0.00
+ 0.00
+ 0.00
+ 0.00
+ 0.00
+ 0.00
+ 0.00
+ 0.00
+ 1103.00
+ 195.35
+
+
+
+ 0
+
+ 6
+ VOLUME
+ VARIAS
+ 0.000
+ 0.000
+
+
+
+
+ 000003103
+ 1103.00
+ 0.00
+ 1103.00
+
+
+ 001
+ 2019-05-11
+ 1103.00
+
+
+
+
+ 14
+ 1103.00
+
+ 0.00
+
+
+ ORDEM DE FORNECIMENTO 36994 - 28DD - INFORMACOES COMPLEMENTARES a seguinte informacao. EMPRESA
+ ENQUADRADA NO SIMPLES NACIONAL. NAO GERA CREDITO DE IPI/ISS. GERA CREDITO DE ICMS. Trib aprox R$:
+ 54,84 Federal 140,51 Estadual Fonte: IBPT empresometro.com.br S3A6R4
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ngqVwH6QNCAHyRuI529RIAr7Nyk=
+
+
+
+ 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
+
+
+
+
+
+
+
+ 1
+ 14.2.26
+ 31190406273476000182550020000031031004640327
+ 2019-04-10T17:23:27-03:00
+ 131193257591884
+ ngqVwH6QNCAHyRuI529RIAr7Nyk=
+ 100
+ Autorizado o uso da NF-e
+
+
+
diff --git a/build.gradle b/build.gradle
new file mode 100644
index 0000000..f0954de
--- /dev/null
+++ b/build.gradle
@@ -0,0 +1,45 @@
+plugins {
+ id 'java'
+ id 'org.springframework.boot' version '3.1.3'
+ id 'io.spring.dependency-management' version '1.1.3'
+}
+
+group = 'com.main'
+version = '0.0.1-SNAPSHOT'
+
+java {
+ sourceCompatibility = '17'
+}
+
+configurations {
+ compileOnly {
+ extendsFrom annotationProcessor
+ }
+}
+
+repositories {
+ mavenCentral()
+}
+
+dependencies {
+ implementation 'org.springframework.boot:spring-boot-starter-data-jdbc'
+ implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
+ implementation 'org.springframework.boot:spring-boot-starter-jdbc'
+ implementation 'org.springframework.boot:spring-boot-starter-security'
+ implementation 'org.springframework.boot:spring-boot-starter-web'
+ implementation 'com.fasterxml.jackson.dataformat:jackson-dataformat-xml:2.13.0'
+ implementation 'javax.xml.bind:jaxb-api:2.3.1'
+ implementation 'org.modelmapper:modelmapper:3.1.1'
+ implementation 'jakarta.validation:jakarta.validation-api:3.0.2'
+ compileOnly 'org.projectlombok:lombok'
+ developmentOnly 'org.springframework.boot:spring-boot-devtools'
+ runtimeOnly 'com.h2database:h2'
+ runtimeOnly 'com.mysql:mysql-connector-j'
+ annotationProcessor 'org.projectlombok:lombok'
+ testImplementation 'org.springframework.boot:spring-boot-starter-test'
+ testImplementation 'org.springframework.security:spring-security-test'
+}
+
+tasks.named('test') {
+ useJUnitPlatform()
+}
diff --git a/build/libs/RecombApp-0.0.1-SNAPSHOT.jar b/build/libs/RecombApp-0.0.1-SNAPSHOT.jar
new file mode 100644
index 0000000..c088edd
Binary files /dev/null and b/build/libs/RecombApp-0.0.1-SNAPSHOT.jar differ
diff --git a/docker-compose.yml b/docker-compose.yml
new file mode 100644
index 0000000..5b1b1bd
--- /dev/null
+++ b/docker-compose.yml
@@ -0,0 +1,19 @@
+version: '3.6'
+services:
+ back:
+ build:
+ context: ./
+ image: recomb/backend
+ container_name: recomb_back
+ ports:
+ - 8082:8082
+
+
+ front:
+ build: ./front-end/recombfront
+ image: recomb/frontend
+ container_name: recomb_front
+ ports:
+ - 5173:5173
+ depends_on:
+ - back
\ No newline at end of file
diff --git a/front-end/recombfront/.gitignore b/front-end/recombfront/.gitignore
new file mode 100644
index 0000000..38adffa
--- /dev/null
+++ b/front-end/recombfront/.gitignore
@@ -0,0 +1,28 @@
+# Logs
+logs
+*.log
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+pnpm-debug.log*
+lerna-debug.log*
+
+node_modules
+.DS_Store
+dist
+dist-ssr
+coverage
+*.local
+
+/cypress/videos/
+/cypress/screenshots/
+
+# Editor directories and files
+.vscode/*
+!.vscode/extensions.json
+.idea
+*.suo
+*.ntvs*
+*.njsproj
+*.sln
+*.sw?
diff --git a/front-end/recombfront/Dockerfile b/front-end/recombfront/Dockerfile
new file mode 100644
index 0000000..da53a1a
--- /dev/null
+++ b/front-end/recombfront/Dockerfile
@@ -0,0 +1,22 @@
+FROM node:lts-alpine
+
+# install simple http server for serving static content
+# RUN npm install -g http-server
+
+# make the 'app' folder the current working directory
+WORKDIR /app
+
+# copy both 'package.json' and 'package-lock.json' (if available)
+COPY package*.json ./
+
+# install project dependencies
+RUN npm install
+
+# copy project files and folders to the current working directory (i.e. 'app' folder)
+COPY . .
+
+# build app for production with minification
+RUN npm run build
+
+EXPOSE 5173
+CMD [ "npm", "run", "dev" ]
\ No newline at end of file
diff --git a/front-end/recombfront/README.md b/front-end/recombfront/README.md
new file mode 100644
index 0000000..f98e5d1
--- /dev/null
+++ b/front-end/recombfront/README.md
@@ -0,0 +1,29 @@
+# recombfront
+
+This template should help get you started developing with Vue 3 in Vite.
+
+## Recommended IDE Setup
+
+[VSCode](https://code.visualstudio.com/) + [Volar](https://marketplace.visualstudio.com/items?itemName=Vue.volar) (and disable Vetur) + [TypeScript Vue Plugin (Volar)](https://marketplace.visualstudio.com/items?itemName=Vue.vscode-typescript-vue-plugin).
+
+## Customize configuration
+
+See [Vite Configuration Reference](https://vitejs.dev/config/).
+
+## Project Setup
+
+```sh
+npm install
+```
+
+### Compile and Hot-Reload for Development
+
+```sh
+npm run dev
+```
+
+### Compile and Minify for Production
+
+```sh
+npm run build
+```
diff --git a/front-end/recombfront/index.html b/front-end/recombfront/index.html
new file mode 100644
index 0000000..6448624
--- /dev/null
+++ b/front-end/recombfront/index.html
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+ Vite App
+
+
+
+
+
+
diff --git a/front-end/recombfront/package-lock.json b/front-end/recombfront/package-lock.json
new file mode 100644
index 0000000..b817222
--- /dev/null
+++ b/front-end/recombfront/package-lock.json
@@ -0,0 +1,1809 @@
+{
+ "name": "recombfront",
+ "version": "0.0.0",
+ "lockfileVersion": 3,
+ "requires": true,
+ "packages": {
+ "": {
+ "name": "recombfront",
+ "version": "0.0.0",
+ "dependencies": {
+ "axios": "^1.5.0",
+ "tailwindcss-animated": "^1.0.1",
+ "vue": "^3.3.4",
+ "vue-router": "^4.2.4"
+ },
+ "devDependencies": {
+ "@vitejs/plugin-vue": "^4.3.4",
+ "autoprefixer": "^10.4.15",
+ "postcss": "^8.4.29",
+ "tailwindcss": "^3.3.3",
+ "vite": "^4.4.9"
+ }
+ },
+ "node_modules/@alloc/quick-lru": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz",
+ "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/@babel/parser": {
+ "version": "7.22.16",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.16.tgz",
+ "integrity": "sha512-+gPfKv8UWeKKeJTUxe59+OobVcrYHETCsORl61EmSkmgymguYk/X5bp7GuUIXaFsc6y++v8ZxPsLSSuujqDphA==",
+ "bin": {
+ "parser": "bin/babel-parser.js"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@esbuild/android-arm": {
+ "version": "0.18.20",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.20.tgz",
+ "integrity": "sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/android-arm64": {
+ "version": "0.18.20",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.18.20.tgz",
+ "integrity": "sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/android-x64": {
+ "version": "0.18.20",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.18.20.tgz",
+ "integrity": "sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/darwin-arm64": {
+ "version": "0.18.20",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz",
+ "integrity": "sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/darwin-x64": {
+ "version": "0.18.20",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz",
+ "integrity": "sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/freebsd-arm64": {
+ "version": "0.18.20",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.20.tgz",
+ "integrity": "sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/freebsd-x64": {
+ "version": "0.18.20",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.18.20.tgz",
+ "integrity": "sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-arm": {
+ "version": "0.18.20",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.18.20.tgz",
+ "integrity": "sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-arm64": {
+ "version": "0.18.20",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.18.20.tgz",
+ "integrity": "sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-ia32": {
+ "version": "0.18.20",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.18.20.tgz",
+ "integrity": "sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==",
+ "cpu": [
+ "ia32"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-loong64": {
+ "version": "0.18.20",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz",
+ "integrity": "sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==",
+ "cpu": [
+ "loong64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-mips64el": {
+ "version": "0.18.20",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.18.20.tgz",
+ "integrity": "sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==",
+ "cpu": [
+ "mips64el"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-ppc64": {
+ "version": "0.18.20",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.18.20.tgz",
+ "integrity": "sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==",
+ "cpu": [
+ "ppc64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-riscv64": {
+ "version": "0.18.20",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.18.20.tgz",
+ "integrity": "sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==",
+ "cpu": [
+ "riscv64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-s390x": {
+ "version": "0.18.20",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.18.20.tgz",
+ "integrity": "sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==",
+ "cpu": [
+ "s390x"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-x64": {
+ "version": "0.18.20",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz",
+ "integrity": "sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/netbsd-x64": {
+ "version": "0.18.20",
+ "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.18.20.tgz",
+ "integrity": "sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "netbsd"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/openbsd-x64": {
+ "version": "0.18.20",
+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.18.20.tgz",
+ "integrity": "sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "openbsd"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/sunos-x64": {
+ "version": "0.18.20",
+ "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.18.20.tgz",
+ "integrity": "sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "sunos"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/win32-arm64": {
+ "version": "0.18.20",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.18.20.tgz",
+ "integrity": "sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/win32-ia32": {
+ "version": "0.18.20",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz",
+ "integrity": "sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==",
+ "cpu": [
+ "ia32"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/win32-x64": {
+ "version": "0.18.20",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz",
+ "integrity": "sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@jridgewell/gen-mapping": {
+ "version": "0.3.3",
+ "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz",
+ "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==",
+ "dependencies": {
+ "@jridgewell/set-array": "^1.0.1",
+ "@jridgewell/sourcemap-codec": "^1.4.10",
+ "@jridgewell/trace-mapping": "^0.3.9"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@jridgewell/resolve-uri": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz",
+ "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==",
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@jridgewell/set-array": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz",
+ "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==",
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@jridgewell/sourcemap-codec": {
+ "version": "1.4.15",
+ "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz",
+ "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg=="
+ },
+ "node_modules/@jridgewell/trace-mapping": {
+ "version": "0.3.19",
+ "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz",
+ "integrity": "sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==",
+ "dependencies": {
+ "@jridgewell/resolve-uri": "^3.1.0",
+ "@jridgewell/sourcemap-codec": "^1.4.14"
+ }
+ },
+ "node_modules/@nodelib/fs.scandir": {
+ "version": "2.1.5",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
+ "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
+ "dependencies": {
+ "@nodelib/fs.stat": "2.0.5",
+ "run-parallel": "^1.1.9"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/@nodelib/fs.stat": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
+ "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/@nodelib/fs.walk": {
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
+ "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
+ "dependencies": {
+ "@nodelib/fs.scandir": "2.1.5",
+ "fastq": "^1.6.0"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/@vitejs/plugin-vue": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-4.3.4.tgz",
+ "integrity": "sha512-ciXNIHKPriERBisHFBvnTbfKa6r9SAesOYXeGDzgegcvy9Q4xdScSHAmKbNT0M3O0S9LKhIf5/G+UYG4NnnzYw==",
+ "dev": true,
+ "engines": {
+ "node": "^14.18.0 || >=16.0.0"
+ },
+ "peerDependencies": {
+ "vite": "^4.0.0",
+ "vue": "^3.2.25"
+ }
+ },
+ "node_modules/@vue/compiler-core": {
+ "version": "3.3.4",
+ "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.3.4.tgz",
+ "integrity": "sha512-cquyDNvZ6jTbf/+x+AgM2Arrp6G4Dzbb0R64jiG804HRMfRiFXWI6kqUVqZ6ZR0bQhIoQjB4+2bhNtVwndW15g==",
+ "dependencies": {
+ "@babel/parser": "^7.21.3",
+ "@vue/shared": "3.3.4",
+ "estree-walker": "^2.0.2",
+ "source-map-js": "^1.0.2"
+ }
+ },
+ "node_modules/@vue/compiler-dom": {
+ "version": "3.3.4",
+ "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.3.4.tgz",
+ "integrity": "sha512-wyM+OjOVpuUukIq6p5+nwHYtj9cFroz9cwkfmP9O1nzH68BenTTv0u7/ndggT8cIQlnBeOo6sUT/gvHcIkLA5w==",
+ "dependencies": {
+ "@vue/compiler-core": "3.3.4",
+ "@vue/shared": "3.3.4"
+ }
+ },
+ "node_modules/@vue/compiler-sfc": {
+ "version": "3.3.4",
+ "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.3.4.tgz",
+ "integrity": "sha512-6y/d8uw+5TkCuzBkgLS0v3lSM3hJDntFEiUORM11pQ/hKvkhSKZrXW6i69UyXlJQisJxuUEJKAWEqWbWsLeNKQ==",
+ "dependencies": {
+ "@babel/parser": "^7.20.15",
+ "@vue/compiler-core": "3.3.4",
+ "@vue/compiler-dom": "3.3.4",
+ "@vue/compiler-ssr": "3.3.4",
+ "@vue/reactivity-transform": "3.3.4",
+ "@vue/shared": "3.3.4",
+ "estree-walker": "^2.0.2",
+ "magic-string": "^0.30.0",
+ "postcss": "^8.1.10",
+ "source-map-js": "^1.0.2"
+ }
+ },
+ "node_modules/@vue/compiler-ssr": {
+ "version": "3.3.4",
+ "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.3.4.tgz",
+ "integrity": "sha512-m0v6oKpup2nMSehwA6Uuu+j+wEwcy7QmwMkVNVfrV9P2qE5KshC6RwOCq8fjGS/Eak/uNb8AaWekfiXxbBB6gQ==",
+ "dependencies": {
+ "@vue/compiler-dom": "3.3.4",
+ "@vue/shared": "3.3.4"
+ }
+ },
+ "node_modules/@vue/devtools-api": {
+ "version": "6.5.0",
+ "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.5.0.tgz",
+ "integrity": "sha512-o9KfBeaBmCKl10usN4crU53fYtC1r7jJwdGKjPT24t348rHxgfpZ0xL3Xm/gLUYnc0oTp8LAmrxOeLyu6tbk2Q=="
+ },
+ "node_modules/@vue/reactivity": {
+ "version": "3.3.4",
+ "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.3.4.tgz",
+ "integrity": "sha512-kLTDLwd0B1jG08NBF3R5rqULtv/f8x3rOFByTDz4J53ttIQEDmALqKqXY0J+XQeN0aV2FBxY8nJDf88yvOPAqQ==",
+ "dependencies": {
+ "@vue/shared": "3.3.4"
+ }
+ },
+ "node_modules/@vue/reactivity-transform": {
+ "version": "3.3.4",
+ "resolved": "https://registry.npmjs.org/@vue/reactivity-transform/-/reactivity-transform-3.3.4.tgz",
+ "integrity": "sha512-MXgwjako4nu5WFLAjpBnCj/ieqcjE2aJBINUNQzkZQfzIZA4xn+0fV1tIYBJvvva3N3OvKGofRLvQIwEQPpaXw==",
+ "dependencies": {
+ "@babel/parser": "^7.20.15",
+ "@vue/compiler-core": "3.3.4",
+ "@vue/shared": "3.3.4",
+ "estree-walker": "^2.0.2",
+ "magic-string": "^0.30.0"
+ }
+ },
+ "node_modules/@vue/runtime-core": {
+ "version": "3.3.4",
+ "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.3.4.tgz",
+ "integrity": "sha512-R+bqxMN6pWO7zGI4OMlmvePOdP2c93GsHFM/siJI7O2nxFRzj55pLwkpCedEY+bTMgp5miZ8CxfIZo3S+gFqvA==",
+ "dependencies": {
+ "@vue/reactivity": "3.3.4",
+ "@vue/shared": "3.3.4"
+ }
+ },
+ "node_modules/@vue/runtime-dom": {
+ "version": "3.3.4",
+ "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.3.4.tgz",
+ "integrity": "sha512-Aj5bTJ3u5sFsUckRghsNjVTtxZQ1OyMWCr5dZRAPijF/0Vy4xEoRCwLyHXcj4D0UFbJ4lbx3gPTgg06K/GnPnQ==",
+ "dependencies": {
+ "@vue/runtime-core": "3.3.4",
+ "@vue/shared": "3.3.4",
+ "csstype": "^3.1.1"
+ }
+ },
+ "node_modules/@vue/server-renderer": {
+ "version": "3.3.4",
+ "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.3.4.tgz",
+ "integrity": "sha512-Q6jDDzR23ViIb67v+vM1Dqntu+HUexQcsWKhhQa4ARVzxOY2HbC7QRW/ggkDBd5BU+uM1sV6XOAP0b216o34JQ==",
+ "dependencies": {
+ "@vue/compiler-ssr": "3.3.4",
+ "@vue/shared": "3.3.4"
+ },
+ "peerDependencies": {
+ "vue": "3.3.4"
+ }
+ },
+ "node_modules/@vue/shared": {
+ "version": "3.3.4",
+ "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.3.4.tgz",
+ "integrity": "sha512-7OjdcV8vQ74eiz1TZLzZP4JwqM5fA94K6yntPS5Z25r9HDuGNzaGdgvwKYq6S+MxwF0TFRwe50fIR/MYnakdkQ=="
+ },
+ "node_modules/any-promise": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz",
+ "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A=="
+ },
+ "node_modules/anymatch": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
+ "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
+ "dependencies": {
+ "normalize-path": "^3.0.0",
+ "picomatch": "^2.0.4"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/arg": {
+ "version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz",
+ "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg=="
+ },
+ "node_modules/asynckit": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
+ "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="
+ },
+ "node_modules/autoprefixer": {
+ "version": "10.4.15",
+ "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.15.tgz",
+ "integrity": "sha512-KCuPB8ZCIqFdA4HwKXsvz7j6gvSDNhDP7WnUjBleRkKjPdvCmHFuQ77ocavI8FT6NdvlBnE2UFr2H4Mycn8Vew==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/autoprefixer"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "dependencies": {
+ "browserslist": "^4.21.10",
+ "caniuse-lite": "^1.0.30001520",
+ "fraction.js": "^4.2.0",
+ "normalize-range": "^0.1.2",
+ "picocolors": "^1.0.0",
+ "postcss-value-parser": "^4.2.0"
+ },
+ "bin": {
+ "autoprefixer": "bin/autoprefixer"
+ },
+ "engines": {
+ "node": "^10 || ^12 || >=14"
+ },
+ "peerDependencies": {
+ "postcss": "^8.1.0"
+ }
+ },
+ "node_modules/axios": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/axios/-/axios-1.5.0.tgz",
+ "integrity": "sha512-D4DdjDo5CY50Qms0qGQTTw6Q44jl7zRwY7bthds06pUGfChBCTcQs+N743eFWGEd6pRTMd6A+I87aWyFV5wiZQ==",
+ "dependencies": {
+ "follow-redirects": "^1.15.0",
+ "form-data": "^4.0.0",
+ "proxy-from-env": "^1.1.0"
+ }
+ },
+ "node_modules/balanced-match": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
+ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
+ },
+ "node_modules/binary-extensions": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
+ "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "dependencies": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "node_modules/braces": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
+ "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
+ "dependencies": {
+ "fill-range": "^7.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/browserslist": {
+ "version": "4.21.10",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.10.tgz",
+ "integrity": "sha512-bipEBdZfVH5/pwrvqc+Ub0kUPVfGUhlKxbvfD+z1BDnPEO/X98ruXGA1WP5ASpAFKan7Qr6j736IacbZQuAlKQ==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/browserslist"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/browserslist"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "dependencies": {
+ "caniuse-lite": "^1.0.30001517",
+ "electron-to-chromium": "^1.4.477",
+ "node-releases": "^2.0.13",
+ "update-browserslist-db": "^1.0.11"
+ },
+ "bin": {
+ "browserslist": "cli.js"
+ },
+ "engines": {
+ "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
+ }
+ },
+ "node_modules/camelcase-css": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz",
+ "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==",
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/caniuse-lite": {
+ "version": "1.0.30001534",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001534.tgz",
+ "integrity": "sha512-vlPVrhsCS7XaSh2VvWluIQEzVhefrUQcEsQWSS5A5V+dM07uv1qHeQzAOTGIMy9i3e9bH15+muvI/UHojVgS/Q==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/browserslist"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/caniuse-lite"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ]
+ },
+ "node_modules/chokidar": {
+ "version": "3.5.3",
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz",
+ "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==",
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://paulmillr.com/funding/"
+ }
+ ],
+ "dependencies": {
+ "anymatch": "~3.1.2",
+ "braces": "~3.0.2",
+ "glob-parent": "~5.1.2",
+ "is-binary-path": "~2.1.0",
+ "is-glob": "~4.0.1",
+ "normalize-path": "~3.0.0",
+ "readdirp": "~3.6.0"
+ },
+ "engines": {
+ "node": ">= 8.10.0"
+ },
+ "optionalDependencies": {
+ "fsevents": "~2.3.2"
+ }
+ },
+ "node_modules/chokidar/node_modules/glob-parent": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+ "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+ "dependencies": {
+ "is-glob": "^4.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/combined-stream": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
+ "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
+ "dependencies": {
+ "delayed-stream": "~1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/commander": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz",
+ "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==",
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg=="
+ },
+ "node_modules/cssesc": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz",
+ "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==",
+ "bin": {
+ "cssesc": "bin/cssesc"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/csstype": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz",
+ "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ=="
+ },
+ "node_modules/delayed-stream": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
+ "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==",
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/didyoumean": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz",
+ "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw=="
+ },
+ "node_modules/dlv": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz",
+ "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA=="
+ },
+ "node_modules/electron-to-chromium": {
+ "version": "1.4.523",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.523.tgz",
+ "integrity": "sha512-9AreocSUWnzNtvLcbpng6N+GkXnCcBR80IQkxRC9Dfdyg4gaWNUPBujAHUpKkiUkoSoR9UlhA4zD/IgBklmhzg==",
+ "dev": true
+ },
+ "node_modules/esbuild": {
+ "version": "0.18.20",
+ "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.20.tgz",
+ "integrity": "sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==",
+ "dev": true,
+ "hasInstallScript": true,
+ "bin": {
+ "esbuild": "bin/esbuild"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "optionalDependencies": {
+ "@esbuild/android-arm": "0.18.20",
+ "@esbuild/android-arm64": "0.18.20",
+ "@esbuild/android-x64": "0.18.20",
+ "@esbuild/darwin-arm64": "0.18.20",
+ "@esbuild/darwin-x64": "0.18.20",
+ "@esbuild/freebsd-arm64": "0.18.20",
+ "@esbuild/freebsd-x64": "0.18.20",
+ "@esbuild/linux-arm": "0.18.20",
+ "@esbuild/linux-arm64": "0.18.20",
+ "@esbuild/linux-ia32": "0.18.20",
+ "@esbuild/linux-loong64": "0.18.20",
+ "@esbuild/linux-mips64el": "0.18.20",
+ "@esbuild/linux-ppc64": "0.18.20",
+ "@esbuild/linux-riscv64": "0.18.20",
+ "@esbuild/linux-s390x": "0.18.20",
+ "@esbuild/linux-x64": "0.18.20",
+ "@esbuild/netbsd-x64": "0.18.20",
+ "@esbuild/openbsd-x64": "0.18.20",
+ "@esbuild/sunos-x64": "0.18.20",
+ "@esbuild/win32-arm64": "0.18.20",
+ "@esbuild/win32-ia32": "0.18.20",
+ "@esbuild/win32-x64": "0.18.20"
+ }
+ },
+ "node_modules/escalade": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
+ "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/estree-walker": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz",
+ "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w=="
+ },
+ "node_modules/fast-glob": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz",
+ "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==",
+ "dependencies": {
+ "@nodelib/fs.stat": "^2.0.2",
+ "@nodelib/fs.walk": "^1.2.3",
+ "glob-parent": "^5.1.2",
+ "merge2": "^1.3.0",
+ "micromatch": "^4.0.4"
+ },
+ "engines": {
+ "node": ">=8.6.0"
+ }
+ },
+ "node_modules/fast-glob/node_modules/glob-parent": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+ "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+ "dependencies": {
+ "is-glob": "^4.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/fastq": {
+ "version": "1.15.0",
+ "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz",
+ "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==",
+ "dependencies": {
+ "reusify": "^1.0.4"
+ }
+ },
+ "node_modules/fill-range": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
+ "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
+ "dependencies": {
+ "to-regex-range": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/follow-redirects": {
+ "version": "1.15.2",
+ "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz",
+ "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==",
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://github.com/sponsors/RubenVerborgh"
+ }
+ ],
+ "engines": {
+ "node": ">=4.0"
+ },
+ "peerDependenciesMeta": {
+ "debug": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/form-data": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz",
+ "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==",
+ "dependencies": {
+ "asynckit": "^0.4.0",
+ "combined-stream": "^1.0.8",
+ "mime-types": "^2.1.12"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/fraction.js": {
+ "version": "4.3.6",
+ "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.6.tgz",
+ "integrity": "sha512-n2aZ9tNfYDwaHhvFTkhFErqOMIb8uyzSQ+vGJBjZyanAKZVbGUQ1sngfk9FdkBw7G26O7AgNjLcecLffD1c7eg==",
+ "dev": true,
+ "engines": {
+ "node": "*"
+ },
+ "funding": {
+ "type": "patreon",
+ "url": "https://github.com/sponsors/rawify"
+ }
+ },
+ "node_modules/fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw=="
+ },
+ "node_modules/fsevents": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
+ "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
+ "hasInstallScript": true,
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
+ }
+ },
+ "node_modules/function-bind": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
+ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
+ },
+ "node_modules/glob": {
+ "version": "7.1.6",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
+ "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==",
+ "dependencies": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.0.4",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ },
+ "engines": {
+ "node": "*"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/glob-parent": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
+ "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
+ "dependencies": {
+ "is-glob": "^4.0.3"
+ },
+ "engines": {
+ "node": ">=10.13.0"
+ }
+ },
+ "node_modules/has": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
+ "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
+ "dependencies": {
+ "function-bind": "^1.1.1"
+ },
+ "engines": {
+ "node": ">= 0.4.0"
+ }
+ },
+ "node_modules/inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
+ "dependencies": {
+ "once": "^1.3.0",
+ "wrappy": "1"
+ }
+ },
+ "node_modules/inherits": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
+ },
+ "node_modules/is-binary-path": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
+ "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
+ "dependencies": {
+ "binary-extensions": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/is-core-module": {
+ "version": "2.13.0",
+ "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz",
+ "integrity": "sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==",
+ "dependencies": {
+ "has": "^1.0.3"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-glob": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
+ "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
+ "dependencies": {
+ "is-extglob": "^2.1.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-number": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
+ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
+ "engines": {
+ "node": ">=0.12.0"
+ }
+ },
+ "node_modules/jiti": {
+ "version": "1.20.0",
+ "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.20.0.tgz",
+ "integrity": "sha512-3TV69ZbrvV6U5DfQimop50jE9Dl6J8O1ja1dvBbMba/sZ3YBEQqJ2VZRoQPVnhlzjNtU1vaXRZVrVjU4qtm8yA==",
+ "bin": {
+ "jiti": "bin/jiti.js"
+ }
+ },
+ "node_modules/lilconfig": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz",
+ "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==",
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/lines-and-columns": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz",
+ "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg=="
+ },
+ "node_modules/magic-string": {
+ "version": "0.30.3",
+ "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.3.tgz",
+ "integrity": "sha512-B7xGbll2fG/VjP+SWg4sX3JynwIU0mjoTc6MPpKNuIvftk6u6vqhDnk1R80b8C2GBR6ywqy+1DcKBrevBg+bmw==",
+ "dependencies": {
+ "@jridgewell/sourcemap-codec": "^1.4.15"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/merge2": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
+ "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/micromatch": {
+ "version": "4.0.5",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz",
+ "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==",
+ "dependencies": {
+ "braces": "^3.0.2",
+ "picomatch": "^2.3.1"
+ },
+ "engines": {
+ "node": ">=8.6"
+ }
+ },
+ "node_modules/mime-db": {
+ "version": "1.52.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
+ "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/mime-types": {
+ "version": "2.1.35",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
+ "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
+ "dependencies": {
+ "mime-db": "1.52.0"
+ },
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/minimatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "dependencies": {
+ "brace-expansion": "^1.1.7"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/mz": {
+ "version": "2.7.0",
+ "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz",
+ "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==",
+ "dependencies": {
+ "any-promise": "^1.0.0",
+ "object-assign": "^4.0.1",
+ "thenify-all": "^1.0.0"
+ }
+ },
+ "node_modules/nanoid": {
+ "version": "3.3.6",
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz",
+ "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "bin": {
+ "nanoid": "bin/nanoid.cjs"
+ },
+ "engines": {
+ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
+ }
+ },
+ "node_modules/node-releases": {
+ "version": "2.0.13",
+ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz",
+ "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==",
+ "dev": true
+ },
+ "node_modules/normalize-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
+ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/normalize-range": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz",
+ "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/object-assign": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+ "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/object-hash": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz",
+ "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==",
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
+ "dependencies": {
+ "wrappy": "1"
+ }
+ },
+ "node_modules/path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/path-parse": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
+ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw=="
+ },
+ "node_modules/picocolors": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
+ "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ=="
+ },
+ "node_modules/picomatch": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
+ "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
+ "engines": {
+ "node": ">=8.6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
+ }
+ },
+ "node_modules/pify": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+ "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/pirates": {
+ "version": "4.0.6",
+ "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz",
+ "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==",
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/postcss": {
+ "version": "8.4.29",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.29.tgz",
+ "integrity": "sha512-cbI+jaqIeu/VGqXEarWkRCCffhjgXc0qjBtXpqJhTBohMUjUQnbBr0xqX3vEKudc4iviTewcJo5ajcec5+wdJw==",
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/postcss"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "dependencies": {
+ "nanoid": "^3.3.6",
+ "picocolors": "^1.0.0",
+ "source-map-js": "^1.0.2"
+ },
+ "engines": {
+ "node": "^10 || ^12 || >=14"
+ }
+ },
+ "node_modules/postcss-import": {
+ "version": "15.1.0",
+ "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz",
+ "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==",
+ "dependencies": {
+ "postcss-value-parser": "^4.0.0",
+ "read-cache": "^1.0.0",
+ "resolve": "^1.1.7"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ },
+ "peerDependencies": {
+ "postcss": "^8.0.0"
+ }
+ },
+ "node_modules/postcss-js": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz",
+ "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==",
+ "dependencies": {
+ "camelcase-css": "^2.0.1"
+ },
+ "engines": {
+ "node": "^12 || ^14 || >= 16"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ "peerDependencies": {
+ "postcss": "^8.4.21"
+ }
+ },
+ "node_modules/postcss-load-config": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.1.tgz",
+ "integrity": "sha512-vEJIc8RdiBRu3oRAI0ymerOn+7rPuMvRXslTvZUKZonDHFIczxztIyJ1urxM1x9JXEikvpWWTUUqal5j/8QgvA==",
+ "dependencies": {
+ "lilconfig": "^2.0.5",
+ "yaml": "^2.1.1"
+ },
+ "engines": {
+ "node": ">= 14"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ "peerDependencies": {
+ "postcss": ">=8.0.9",
+ "ts-node": ">=9.0.0"
+ },
+ "peerDependenciesMeta": {
+ "postcss": {
+ "optional": true
+ },
+ "ts-node": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/postcss-nested": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.0.1.tgz",
+ "integrity": "sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==",
+ "dependencies": {
+ "postcss-selector-parser": "^6.0.11"
+ },
+ "engines": {
+ "node": ">=12.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ "peerDependencies": {
+ "postcss": "^8.2.14"
+ }
+ },
+ "node_modules/postcss-selector-parser": {
+ "version": "6.0.13",
+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz",
+ "integrity": "sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==",
+ "dependencies": {
+ "cssesc": "^3.0.0",
+ "util-deprecate": "^1.0.2"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/postcss-value-parser": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz",
+ "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ=="
+ },
+ "node_modules/proxy-from-env": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
+ "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg=="
+ },
+ "node_modules/queue-microtask": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
+ "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ]
+ },
+ "node_modules/read-cache": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz",
+ "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==",
+ "dependencies": {
+ "pify": "^2.3.0"
+ }
+ },
+ "node_modules/readdirp": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
+ "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
+ "dependencies": {
+ "picomatch": "^2.2.1"
+ },
+ "engines": {
+ "node": ">=8.10.0"
+ }
+ },
+ "node_modules/resolve": {
+ "version": "1.22.6",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.6.tgz",
+ "integrity": "sha512-njhxM7mV12JfufShqGy3Rz8j11RPdLy4xi15UurGJeoHLfJpVXKdh3ueuOqbYUcDZnffr6X739JBo5LzyahEsw==",
+ "dependencies": {
+ "is-core-module": "^2.13.0",
+ "path-parse": "^1.0.7",
+ "supports-preserve-symlinks-flag": "^1.0.0"
+ },
+ "bin": {
+ "resolve": "bin/resolve"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/reusify": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
+ "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
+ "engines": {
+ "iojs": ">=1.0.0",
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/rollup": {
+ "version": "3.29.2",
+ "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.29.2.tgz",
+ "integrity": "sha512-CJouHoZ27v6siztc21eEQGo0kIcE5D1gVPA571ez0mMYb25LGYGKnVNXpEj5MGlepmDWGXNjDB5q7uNiPHC11A==",
+ "dev": true,
+ "bin": {
+ "rollup": "dist/bin/rollup"
+ },
+ "engines": {
+ "node": ">=14.18.0",
+ "npm": ">=8.0.0"
+ },
+ "optionalDependencies": {
+ "fsevents": "~2.3.2"
+ }
+ },
+ "node_modules/run-parallel": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
+ "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "dependencies": {
+ "queue-microtask": "^1.2.2"
+ }
+ },
+ "node_modules/source-map-js": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz",
+ "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/sucrase": {
+ "version": "3.34.0",
+ "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.34.0.tgz",
+ "integrity": "sha512-70/LQEZ07TEcxiU2dz51FKaE6hCTWC6vr7FOk3Gr0U60C3shtAN+H+BFr9XlYe5xqf3RA8nrc+VIwzCfnxuXJw==",
+ "dependencies": {
+ "@jridgewell/gen-mapping": "^0.3.2",
+ "commander": "^4.0.0",
+ "glob": "7.1.6",
+ "lines-and-columns": "^1.1.6",
+ "mz": "^2.7.0",
+ "pirates": "^4.0.1",
+ "ts-interface-checker": "^0.1.9"
+ },
+ "bin": {
+ "sucrase": "bin/sucrase",
+ "sucrase-node": "bin/sucrase-node"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/supports-preserve-symlinks-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
+ "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/tailwindcss": {
+ "version": "3.3.3",
+ "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.3.3.tgz",
+ "integrity": "sha512-A0KgSkef7eE4Mf+nKJ83i75TMyq8HqY3qmFIJSWy8bNt0v1lG7jUcpGpoTFxAwYcWOphcTBLPPJg+bDfhDf52w==",
+ "dependencies": {
+ "@alloc/quick-lru": "^5.2.0",
+ "arg": "^5.0.2",
+ "chokidar": "^3.5.3",
+ "didyoumean": "^1.2.2",
+ "dlv": "^1.1.3",
+ "fast-glob": "^3.2.12",
+ "glob-parent": "^6.0.2",
+ "is-glob": "^4.0.3",
+ "jiti": "^1.18.2",
+ "lilconfig": "^2.1.0",
+ "micromatch": "^4.0.5",
+ "normalize-path": "^3.0.0",
+ "object-hash": "^3.0.0",
+ "picocolors": "^1.0.0",
+ "postcss": "^8.4.23",
+ "postcss-import": "^15.1.0",
+ "postcss-js": "^4.0.1",
+ "postcss-load-config": "^4.0.1",
+ "postcss-nested": "^6.0.1",
+ "postcss-selector-parser": "^6.0.11",
+ "resolve": "^1.22.2",
+ "sucrase": "^3.32.0"
+ },
+ "bin": {
+ "tailwind": "lib/cli.js",
+ "tailwindcss": "lib/cli.js"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/tailwindcss-animated": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/tailwindcss-animated/-/tailwindcss-animated-1.0.1.tgz",
+ "integrity": "sha512-u5wusj89ZwP8I+s8WZlaAd7aZTWBN/XEG6QgMKpkIKmAf3xP1A6WYf7oYIKmGaB10UAQaSqWopi/i1ozzZEs8Q==",
+ "peerDependencies": {
+ "tailwindcss": ">=3.1.0"
+ }
+ },
+ "node_modules/thenify": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz",
+ "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==",
+ "dependencies": {
+ "any-promise": "^1.0.0"
+ }
+ },
+ "node_modules/thenify-all": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz",
+ "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==",
+ "dependencies": {
+ "thenify": ">= 3.1.0 < 4"
+ },
+ "engines": {
+ "node": ">=0.8"
+ }
+ },
+ "node_modules/to-regex-range": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
+ "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
+ "dependencies": {
+ "is-number": "^7.0.0"
+ },
+ "engines": {
+ "node": ">=8.0"
+ }
+ },
+ "node_modules/ts-interface-checker": {
+ "version": "0.1.13",
+ "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz",
+ "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA=="
+ },
+ "node_modules/update-browserslist-db": {
+ "version": "1.0.11",
+ "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz",
+ "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/browserslist"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/browserslist"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "dependencies": {
+ "escalade": "^3.1.1",
+ "picocolors": "^1.0.0"
+ },
+ "bin": {
+ "update-browserslist-db": "cli.js"
+ },
+ "peerDependencies": {
+ "browserslist": ">= 4.21.0"
+ }
+ },
+ "node_modules/util-deprecate": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="
+ },
+ "node_modules/vite": {
+ "version": "4.4.9",
+ "resolved": "https://registry.npmjs.org/vite/-/vite-4.4.9.tgz",
+ "integrity": "sha512-2mbUn2LlUmNASWwSCNSJ/EG2HuSRTnVNaydp6vMCm5VIqJsjMfbIWtbH2kDuwUVW5mMUKKZvGPX/rqeqVvv1XA==",
+ "dev": true,
+ "dependencies": {
+ "esbuild": "^0.18.10",
+ "postcss": "^8.4.27",
+ "rollup": "^3.27.1"
+ },
+ "bin": {
+ "vite": "bin/vite.js"
+ },
+ "engines": {
+ "node": "^14.18.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/vitejs/vite?sponsor=1"
+ },
+ "optionalDependencies": {
+ "fsevents": "~2.3.2"
+ },
+ "peerDependencies": {
+ "@types/node": ">= 14",
+ "less": "*",
+ "lightningcss": "^1.21.0",
+ "sass": "*",
+ "stylus": "*",
+ "sugarss": "*",
+ "terser": "^5.4.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/node": {
+ "optional": true
+ },
+ "less": {
+ "optional": true
+ },
+ "lightningcss": {
+ "optional": true
+ },
+ "sass": {
+ "optional": true
+ },
+ "stylus": {
+ "optional": true
+ },
+ "sugarss": {
+ "optional": true
+ },
+ "terser": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/vue": {
+ "version": "3.3.4",
+ "resolved": "https://registry.npmjs.org/vue/-/vue-3.3.4.tgz",
+ "integrity": "sha512-VTyEYn3yvIeY1Py0WaYGZsXnz3y5UnGi62GjVEqvEGPl6nxbOrCXbVOTQWBEJUqAyTUk2uJ5JLVnYJ6ZzGbrSw==",
+ "dependencies": {
+ "@vue/compiler-dom": "3.3.4",
+ "@vue/compiler-sfc": "3.3.4",
+ "@vue/runtime-dom": "3.3.4",
+ "@vue/server-renderer": "3.3.4",
+ "@vue/shared": "3.3.4"
+ }
+ },
+ "node_modules/vue-router": {
+ "version": "4.2.4",
+ "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-4.2.4.tgz",
+ "integrity": "sha512-9PISkmaCO02OzPVOMq2w82ilty6+xJmQrarYZDkjZBfl4RvYAlt4PKnEX21oW4KTtWfa9OuO/b3qk1Od3AEdCQ==",
+ "dependencies": {
+ "@vue/devtools-api": "^6.5.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/posva"
+ },
+ "peerDependencies": {
+ "vue": "^3.2.0"
+ }
+ },
+ "node_modules/wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="
+ },
+ "node_modules/yaml": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.2.tgz",
+ "integrity": "sha512-N/lyzTPaJasoDmfV7YTrYCI0G/3ivm/9wdG0aHuheKowWQwGTsK0Eoiw6utmzAnI6pkJa0DUVygvp3spqqEKXg==",
+ "engines": {
+ "node": ">= 14"
+ }
+ }
+ }
+}
diff --git a/front-end/recombfront/package.json b/front-end/recombfront/package.json
new file mode 100644
index 0000000..acf049a
--- /dev/null
+++ b/front-end/recombfront/package.json
@@ -0,0 +1,23 @@
+{
+ "name": "recombfront",
+ "version": "0.0.0",
+ "private": true,
+ "scripts": {
+ "dev": "vite",
+ "build": "vite build",
+ "preview": "vite preview"
+ },
+ "dependencies": {
+ "axios": "^1.5.0",
+ "tailwindcss-animated": "^1.0.1",
+ "vue": "^3.3.4",
+ "vue-router": "^4.2.4"
+ },
+ "devDependencies": {
+ "@vitejs/plugin-vue": "^4.3.4",
+ "autoprefixer": "^10.4.15",
+ "postcss": "^8.4.29",
+ "tailwindcss": "^3.3.3",
+ "vite": "^4.4.9"
+ }
+}
diff --git a/front-end/recombfront/postcss.config.js b/front-end/recombfront/postcss.config.js
new file mode 100644
index 0000000..ca0c0cd
--- /dev/null
+++ b/front-end/recombfront/postcss.config.js
@@ -0,0 +1,6 @@
+module.exports = {
+ plugins: {
+ tailwindcss: {},
+ autoprefixer: {},
+ }
+}
\ No newline at end of file
diff --git a/front-end/recombfront/public/favicon.ico b/front-end/recombfront/public/favicon.ico
new file mode 100644
index 0000000..df36fcf
Binary files /dev/null and b/front-end/recombfront/public/favicon.ico differ
diff --git a/front-end/recombfront/src/App.vue b/front-end/recombfront/src/App.vue
new file mode 100644
index 0000000..98562ed
--- /dev/null
+++ b/front-end/recombfront/src/App.vue
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
diff --git a/front-end/recombfront/src/assets/tailwind.css b/front-end/recombfront/src/assets/tailwind.css
new file mode 100644
index 0000000..bd6213e
--- /dev/null
+++ b/front-end/recombfront/src/assets/tailwind.css
@@ -0,0 +1,3 @@
+@tailwind base;
+@tailwind components;
+@tailwind utilities;
\ No newline at end of file
diff --git a/front-end/recombfront/src/components/TheWelcome.vue b/front-end/recombfront/src/components/TheWelcome.vue
new file mode 100644
index 0000000..c3de567
--- /dev/null
+++ b/front-end/recombfront/src/components/TheWelcome.vue
@@ -0,0 +1,219 @@
+
+
+
+
+ RECOMB NFe DESERIALIZER
+
+
+ Digite mais de 2 caracteres para filtrar
+
+
+
+
+
+
+
+
+ Infelizmente não houve resultado para a busca do CNPJ/CPF {{ this.search }}
+
+
+
+
+
+ FORNECEDOR
+
+
+ {{ fornecedor.nome }}
+
+
+
+ Endereco Fornecedor: {{ fornecedor.endereco.xlgr }}, {{ fornecedor.endereco.nro }}, {{ fornecedor.endereco.xbairro }}, {{ fornecedor.endereco.xmun }}, {{ fornecedor.endereco.xpais }}
+
+
+
+
+
+
+
+ CLIENTE
+
+
+ {{ cliente.nome }}
+
+
+
+ Endereco Cliente: {{ cliente.endereco.xlgr }}, {{ cliente.endereco.nro }}, {{ cliente.endereco.xbairro }}, {{ cliente.endereco.xmun }}, {{ cliente.endereco.xpais }}
+
+
+
+ Consultar
+
+
+
+
+
+ Analise Concluida
+
+
+
+
+
+
+
+ Dados do Fornecedor
+
+
+
+ Nome do Fornecedor: {{ this.resp.fornecedor.nome }}
+
+
+ CNPJ do Fornecedor: {{ this.resp.fornecedor.cnpj }}
+
+
+
+
+
+ Dados do Cliente
+
+
+
+ Nome do Cliente: {{ this.resp.cliente.nome }}
+
+
+ CPF do Cliente: {{ this.resp.cliente.cpf }}
+
+
+ Endereco
+
+
+ Logradouro: {{ this.resp.cliente.endereco.xlgr }}
+
+
+ Numero: {{ this.resp.cliente.endereco.nro }}
+
+
+ Bairro: {{ this.resp.cliente.endereco.xbairro }}
+
+
+ Municipio: {{ this.resp.cliente.endereco.xmun }}
+
+
+ CEP: {{ this.resp.cliente.endereco.cep }}
+
+
+ Pais: {{ this.resp.cliente.endereco.xpais }}
+
+
+
+
+
+ Dados do Boleto
+
+
+
+ Valor do boleto: {{ boleto.value }}
+
+
+ Data de vencimento: {{ boleto.dataVencimento }}
+
+
+ Valor Parcelado: {{ boleto.valorParcelado }}
+
+
+
+
+
+
+
+
+
+
diff --git a/front-end/recombfront/src/components/icons/IconCommunity.vue b/front-end/recombfront/src/components/icons/IconCommunity.vue
new file mode 100644
index 0000000..2dc8b05
--- /dev/null
+++ b/front-end/recombfront/src/components/icons/IconCommunity.vue
@@ -0,0 +1,7 @@
+
+
+
+
+
diff --git a/front-end/recombfront/src/components/icons/IconDocumentation.vue b/front-end/recombfront/src/components/icons/IconDocumentation.vue
new file mode 100644
index 0000000..6d4791c
--- /dev/null
+++ b/front-end/recombfront/src/components/icons/IconDocumentation.vue
@@ -0,0 +1,7 @@
+
+
+
+
+
diff --git a/front-end/recombfront/src/components/icons/IconEcosystem.vue b/front-end/recombfront/src/components/icons/IconEcosystem.vue
new file mode 100644
index 0000000..c3a4f07
--- /dev/null
+++ b/front-end/recombfront/src/components/icons/IconEcosystem.vue
@@ -0,0 +1,7 @@
+
+
+
+
+
diff --git a/front-end/recombfront/src/components/icons/IconSupport.vue b/front-end/recombfront/src/components/icons/IconSupport.vue
new file mode 100644
index 0000000..7452834
--- /dev/null
+++ b/front-end/recombfront/src/components/icons/IconSupport.vue
@@ -0,0 +1,7 @@
+
+
+
+
+
diff --git a/front-end/recombfront/src/components/icons/IconTooling.vue b/front-end/recombfront/src/components/icons/IconTooling.vue
new file mode 100644
index 0000000..660598d
--- /dev/null
+++ b/front-end/recombfront/src/components/icons/IconTooling.vue
@@ -0,0 +1,19 @@
+
+
+
+
+
+
diff --git a/front-end/recombfront/src/main.js b/front-end/recombfront/src/main.js
new file mode 100644
index 0000000..9f91fad
--- /dev/null
+++ b/front-end/recombfront/src/main.js
@@ -0,0 +1,11 @@
+import './assets/tailwind.css'
+
+import { createApp } from 'vue'
+import App from './App.vue'
+import router from './router'
+
+const app = createApp(App)
+
+app.use(router)
+
+app.mount('#app')
diff --git a/front-end/recombfront/src/model/NfeModel.js b/front-end/recombfront/src/model/NfeModel.js
new file mode 100644
index 0000000..89bf185
--- /dev/null
+++ b/front-end/recombfront/src/model/NfeModel.js
@@ -0,0 +1,19 @@
+export default class NfeModel
+{
+ boleto = [{
+ value: null,
+ valorParcelado: null,
+ dataVencimento: null
+ }];
+ cliente = [{
+ nome: "",
+ endereco: [{
+
+ }]
+ }];
+
+ constructor(boleto: [{ valorParcelado: null, dataVencimento: null, value: null }], cliente: [{ endereco: [{}], nome: string }]) {
+ this.boleto = boleto;
+ this.cliente = cliente;
+ }
+}
\ No newline at end of file
diff --git a/front-end/recombfront/src/router/index.js b/front-end/recombfront/src/router/index.js
new file mode 100644
index 0000000..e55886b
--- /dev/null
+++ b/front-end/recombfront/src/router/index.js
@@ -0,0 +1,15 @@
+import { createRouter, createWebHistory } from 'vue-router'
+import HomeView from '../views/HomeView.vue'
+
+const router = createRouter({
+ history: createWebHistory(import.meta.env.BASE_URL),
+ routes: [
+ {
+ path: '/',
+ name: 'home',
+ component: HomeView
+ },
+ ]
+})
+
+export default router
diff --git a/front-end/recombfront/src/service/axiosService.js b/front-end/recombfront/src/service/axiosService.js
new file mode 100644
index 0000000..3af4099
--- /dev/null
+++ b/front-end/recombfront/src/service/axiosService.js
@@ -0,0 +1,31 @@
+import axios from "axios";
+import config from "tailwindcss/defaultConfig";
+
+const URL_API_FILE = "http://localhost:8082/convert/xmlToJson";
+const URL_API_TESTE = "http://localhost:8082/convert/xmlToJson";
+const URL_API_CLIENT = "http://localhost:8082/notafiscal";
+
+
+const URL_API_FILE_NGROK = "https://e7f4-2804-1b3-9402-40e8-a8d7-47e6-38c0-95f7.ngrok-free.app/convert/xmlToJson"
+const URL_API_FILE_CLIENT = "https://e7f4-2804-1b3-9402-40e8-a8d7-47e6-38c0-95f7.ngrok-free.app/notafiscal"
+
+
+export async function sendFileXML(file)
+{
+ const config = { headers: { 'Content-Type': 'multipart/form-data', "ngrok-skip-browser-warning": "69420" } };
+ return axios.post(URL_API_FILE, file, config)
+}
+
+export async function searchClient(value)
+{
+ const config = { headers: { "ngrok-skip-browser-warning": "69420" } };
+ return axios.get(URL_API_CLIENT + "/" + value, config)
+}
+
+export async function teste()
+{
+ const config = { headers: { 'Content-Type': 'multipart/form-data' } };
+ return axios.post(URL_API_TESTE)
+}
+
+
diff --git a/front-end/recombfront/src/views/HomeView.vue b/front-end/recombfront/src/views/HomeView.vue
new file mode 100644
index 0000000..6bb706f
--- /dev/null
+++ b/front-end/recombfront/src/views/HomeView.vue
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
diff --git a/front-end/recombfront/tailwind.config.js b/front-end/recombfront/tailwind.config.js
new file mode 100644
index 0000000..14caa44
--- /dev/null
+++ b/front-end/recombfront/tailwind.config.js
@@ -0,0 +1,13 @@
+/** @type {import('tailwindcss').Config} */
+module.exports = {
+ content: [
+ './public/**/*.html',
+ './src/**/*.{js,jsx,ts,tsx,vue}',
+ ],
+ theme: {
+ extend: {},
+ },
+ plugins: [
+ require('tailwindcss-animated')
+ ],
+}
\ No newline at end of file
diff --git a/front-end/recombfront/vite.config.js b/front-end/recombfront/vite.config.js
new file mode 100644
index 0000000..5c45e1d
--- /dev/null
+++ b/front-end/recombfront/vite.config.js
@@ -0,0 +1,16 @@
+import { fileURLToPath, URL } from 'node:url'
+
+import { defineConfig } from 'vite'
+import vue from '@vitejs/plugin-vue'
+
+// https://vitejs.dev/config/
+export default defineConfig({
+ plugins: [
+ vue(),
+ ],
+ resolve: {
+ alias: {
+ '@': fileURLToPath(new URL('./src', import.meta.url))
+ }
+ }
+})
diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar
new file mode 100644
index 0000000..033e24c
Binary files /dev/null and b/gradle/wrapper/gradle-wrapper.jar differ
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
new file mode 100644
index 0000000..9f4197d
--- /dev/null
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -0,0 +1,7 @@
+distributionBase=GRADLE_USER_HOME
+distributionPath=wrapper/dists
+distributionUrl=https\://services.gradle.org/distributions/gradle-8.2.1-bin.zip
+networkTimeout=10000
+validateDistributionUrl=true
+zipStoreBase=GRADLE_USER_HOME
+zipStorePath=wrapper/dists
diff --git a/gradlew b/gradlew
new file mode 100644
index 0000000..fcb6fca
--- /dev/null
+++ b/gradlew
@@ -0,0 +1,248 @@
+#!/bin/sh
+
+#
+# Copyright © 2015-2021 the original authors.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# https://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+##############################################################################
+#
+# Gradle start up script for POSIX generated by Gradle.
+#
+# Important for running:
+#
+# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is
+# noncompliant, but you have some other compliant shell such as ksh or
+# bash, then to run this script, type that shell name before the whole
+# command line, like:
+#
+# ksh Gradle
+#
+# Busybox and similar reduced shells will NOT work, because this script
+# requires all of these POSIX shell features:
+# * functions;
+# * expansions «$var», «${var}», «${var:-default}», «${var+SET}»,
+# «${var#prefix}», «${var%suffix}», and «$( cmd )»;
+# * compound commands having a testable exit status, especially «case»;
+# * various built-in commands including «command», «set», and «ulimit».
+#
+# Important for patching:
+#
+# (2) This script targets any POSIX shell, so it avoids extensions provided
+# by Bash, Ksh, etc; in particular arrays are avoided.
+#
+# The "traditional" practice of packing multiple parameters into a
+# space-separated string is a well documented source of bugs and security
+# problems, so this is (mostly) avoided, by progressively accumulating
+# options in "$@", and eventually passing that to Java.
+#
+# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS,
+# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly;
+# see the in-line comments for details.
+#
+# There are tweaks for specific operating systems such as AIX, CygWin,
+# Darwin, MinGW, and NonStop.
+#
+# (3) This script is generated from the Groovy template
+# https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
+# within the Gradle project.
+#
+# You can find Gradle at https://github.com/gradle/gradle/.
+#
+##############################################################################
+
+# Attempt to set APP_HOME
+
+# Resolve links: $0 may be a link
+app_path=$0
+
+# Need this for daisy-chained symlinks.
+while
+ APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path
+ [ -h "$app_path" ]
+do
+ ls=$( ls -ld "$app_path" )
+ link=${ls#*' -> '}
+ case $link in #(
+ /*) app_path=$link ;; #(
+ *) app_path=$APP_HOME$link ;;
+ esac
+done
+
+# This is normally unused
+# shellcheck disable=SC2034
+APP_BASE_NAME=${0##*/}
+APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit
+
+# Use the maximum available, or set MAX_FD != -1 to use that value.
+MAX_FD=maximum
+
+warn () {
+ echo "$*"
+} >&2
+
+die () {
+ echo
+ echo "$*"
+ echo
+ exit 1
+} >&2
+
+# OS specific support (must be 'true' or 'false').
+cygwin=false
+msys=false
+darwin=false
+nonstop=false
+case "$( uname )" in #(
+ CYGWIN* ) cygwin=true ;; #(
+ Darwin* ) darwin=true ;; #(
+ MSYS* | MINGW* ) msys=true ;; #(
+ NONSTOP* ) nonstop=true ;;
+esac
+
+CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
+
+
+# Determine the Java command to use to start the JVM.
+if [ -n "$JAVA_HOME" ] ; then
+ if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
+ # IBM's JDK on AIX uses strange locations for the executables
+ JAVACMD=$JAVA_HOME/jre/sh/java
+ else
+ JAVACMD=$JAVA_HOME/bin/java
+ fi
+ if [ ! -x "$JAVACMD" ] ; then
+ die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+ fi
+else
+ JAVACMD=java
+ if ! command -v java >/dev/null 2>&1
+ then
+ die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+ fi
+fi
+
+# Increase the maximum file descriptors if we can.
+if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then
+ case $MAX_FD in #(
+ max*)
+ # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked.
+ # shellcheck disable=SC3045
+ MAX_FD=$( ulimit -H -n ) ||
+ warn "Could not query maximum file descriptor limit"
+ esac
+ case $MAX_FD in #(
+ '' | soft) :;; #(
+ *)
+ # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked.
+ # shellcheck disable=SC3045
+ ulimit -n "$MAX_FD" ||
+ warn "Could not set maximum file descriptor limit to $MAX_FD"
+ esac
+fi
+
+# Collect all arguments for the java command, stacking in reverse order:
+# * args from the command line
+# * the main class name
+# * -classpath
+# * -D...appname settings
+# * --module-path (only if needed)
+# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables.
+
+# For Cygwin or MSYS, switch paths to Windows format before running java
+if "$cygwin" || "$msys" ; then
+ APP_HOME=$( cygpath --path --mixed "$APP_HOME" )
+ CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" )
+
+ JAVACMD=$( cygpath --unix "$JAVACMD" )
+
+ # Now convert the arguments - kludge to limit ourselves to /bin/sh
+ for arg do
+ if
+ case $arg in #(
+ -*) false ;; # don't mess with options #(
+ /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath
+ [ -e "$t" ] ;; #(
+ *) false ;;
+ esac
+ then
+ arg=$( cygpath --path --ignore --mixed "$arg" )
+ fi
+ # Roll the args list around exactly as many times as the number of
+ # args, so each arg winds up back in the position where it started, but
+ # possibly modified.
+ #
+ # NB: a `for` loop captures its iteration list before it begins, so
+ # changing the positional parameters here affects neither the number of
+ # iterations, nor the values presented in `arg`.
+ shift # remove old arg
+ set -- "$@" "$arg" # push replacement arg
+ done
+fi
+
+
+# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
+
+# Collect all arguments for the java command;
+# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of
+# shell script including quotes and variable substitutions, so put them in
+# double quotes to make sure that they get re-expanded; and
+# * put everything else in single quotes, so that it's not re-expanded.
+
+set -- \
+ "-Dorg.gradle.appname=$APP_BASE_NAME" \
+ -classpath "$CLASSPATH" \
+ org.gradle.wrapper.GradleWrapperMain \
+ "$@"
+
+# Stop when "xargs" is not available.
+if ! command -v xargs >/dev/null 2>&1
+then
+ die "xargs is not available"
+fi
+
+# Use "xargs" to parse quoted args.
+#
+# With -n1 it outputs one arg per line, with the quotes and backslashes removed.
+#
+# In Bash we could simply go:
+#
+# readarray ARGS < <( xargs -n1 <<<"$var" ) &&
+# set -- "${ARGS[@]}" "$@"
+#
+# but POSIX shell has neither arrays nor command substitution, so instead we
+# post-process each arg (as a line of input to sed) to backslash-escape any
+# character that might be a shell metacharacter, then use eval to reverse
+# that process (while maintaining the separation between arguments), and wrap
+# the whole thing up as a single "set" statement.
+#
+# This will of course break if any of these variables contains a newline or
+# an unmatched quote.
+#
+
+eval "set -- $(
+ printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" |
+ xargs -n1 |
+ sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' |
+ tr '\n' ' '
+ )" '"$@"'
+
+exec "$JAVACMD" "$@"
diff --git a/gradlew.bat b/gradlew.bat
new file mode 100644
index 0000000..93e3f59
--- /dev/null
+++ b/gradlew.bat
@@ -0,0 +1,92 @@
+@rem
+@rem Copyright 2015 the original author or authors.
+@rem
+@rem Licensed under the Apache License, Version 2.0 (the "License");
+@rem you may not use this file except in compliance with the License.
+@rem You may obtain a copy of the License at
+@rem
+@rem https://www.apache.org/licenses/LICENSE-2.0
+@rem
+@rem Unless required by applicable law or agreed to in writing, software
+@rem distributed under the License is distributed on an "AS IS" BASIS,
+@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+@rem See the License for the specific language governing permissions and
+@rem limitations under the License.
+@rem
+
+@if "%DEBUG%"=="" @echo off
+@rem ##########################################################################
+@rem
+@rem Gradle startup script for Windows
+@rem
+@rem ##########################################################################
+
+@rem Set local scope for the variables with windows NT shell
+if "%OS%"=="Windows_NT" setlocal
+
+set DIRNAME=%~dp0
+if "%DIRNAME%"=="" set DIRNAME=.
+@rem This is normally unused
+set APP_BASE_NAME=%~n0
+set APP_HOME=%DIRNAME%
+
+@rem Resolve any "." and ".." in APP_HOME to make it shorter.
+for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi
+
+@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
+
+@rem Find java.exe
+if defined JAVA_HOME goto findJavaFromJavaHome
+
+set JAVA_EXE=java.exe
+%JAVA_EXE% -version >NUL 2>&1
+if %ERRORLEVEL% equ 0 goto execute
+
+echo.
+echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+echo.
+echo Please set the JAVA_HOME variable in your environment to match the
+echo location of your Java installation.
+
+goto fail
+
+:findJavaFromJavaHome
+set JAVA_HOME=%JAVA_HOME:"=%
+set JAVA_EXE=%JAVA_HOME%/bin/java.exe
+
+if exist "%JAVA_EXE%" goto execute
+
+echo.
+echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
+echo.
+echo Please set the JAVA_HOME variable in your environment to match the
+echo location of your Java installation.
+
+goto fail
+
+:execute
+@rem Setup the command line
+
+set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
+
+
+@rem Execute Gradle
+"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %*
+
+:end
+@rem End local scope for the variables with windows NT shell
+if %ERRORLEVEL% equ 0 goto mainEnd
+
+:fail
+rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
+rem the _cmd.exe /c_ return code!
+set EXIT_CODE=%ERRORLEVEL%
+if %EXIT_CODE% equ 0 set EXIT_CODE=1
+if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE%
+exit /b %EXIT_CODE%
+
+:mainEnd
+if "%OS%"=="Windows_NT" endlocal
+
+:omega
diff --git a/settings.gradle b/settings.gradle
new file mode 100644
index 0000000..afc5e72
--- /dev/null
+++ b/settings.gradle
@@ -0,0 +1 @@
+rootProject.name = 'RecombApp'
diff --git a/src/main/java/com/main/RecombApp/Controller/ClienteController.java b/src/main/java/com/main/RecombApp/Controller/ClienteController.java
new file mode 100644
index 0000000..95b32fa
--- /dev/null
+++ b/src/main/java/com/main/RecombApp/Controller/ClienteController.java
@@ -0,0 +1,35 @@
+package com.main.RecombApp.Controller;
+
+import ch.qos.logback.core.net.server.Client;
+import com.main.RecombApp.Model.Cliente;
+import com.main.RecombApp.Payload.Response.ClienteResponse;
+import com.main.RecombApp.Services.Cliente.ClienteService;
+import lombok.RequiredArgsConstructor;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.*;
+
+
+import java.util.List;
+
+@RestController
+@RequestMapping("/cliente")
+@RequiredArgsConstructor
+@CrossOrigin
+public class ClienteController {
+
+ @Autowired
+ ClienteService clienteService;
+
+ @GetMapping("/getAll")
+ public ResponseEntity> findAllClients() {
+ return ResponseEntity.ok().body(clienteService.findAllClients());
+ }
+
+ @GetMapping("/{documento}")
+ public ResponseEntity FindClientValue(@PathVariable String documento){
+ var a = clienteService.findClientByValues(documento);
+ return ResponseEntity.ok().body(clienteService.findClientByValues(documento));
+ }
+
+}
diff --git a/src/main/java/com/main/RecombApp/Controller/Converter/ConvertXmlJson.java b/src/main/java/com/main/RecombApp/Controller/Converter/ConvertXmlJson.java
new file mode 100644
index 0000000..0bfa39a
--- /dev/null
+++ b/src/main/java/com/main/RecombApp/Controller/Converter/ConvertXmlJson.java
@@ -0,0 +1,27 @@
+package com.main.RecombApp.Controller.Converter;
+
+
+import com.main.RecombApp.Payload.Request.NotaFiscalRequest;
+import com.main.RecombApp.Payload.Response.NotaFiscalResponse;
+import com.main.RecombApp.Services.Deserialize.DeserializeXML;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.*;
+
+import java.io.IOException;
+
+@RestController
+@CrossOrigin
+@RequestMapping("/convert/")
+public class ConvertXmlJson {
+
+ @Autowired
+ DeserializeXML deserializeXML;
+
+ // Just test
+ @PostMapping("xmlToJson")
+ public ResponseEntity> convertFile(@ModelAttribute NotaFiscalRequest notaFiscalRequest) throws IOException {
+ return ResponseEntity.ok(deserializeXML.SaveXml(notaFiscalRequest.getFileNf()));
+ }
+
+}
diff --git a/src/main/java/com/main/RecombApp/Controller/NotaFiscalController.java b/src/main/java/com/main/RecombApp/Controller/NotaFiscalController.java
new file mode 100644
index 0000000..6f5d1fd
--- /dev/null
+++ b/src/main/java/com/main/RecombApp/Controller/NotaFiscalController.java
@@ -0,0 +1,32 @@
+package com.main.RecombApp.Controller;
+
+import com.main.RecombApp.Payload.Request.NotaFiscalRequest;
+import com.main.RecombApp.Payload.Response.NFResponse;
+import com.main.RecombApp.Payload.Response.NotaFiscalResponse;
+import com.main.RecombApp.Services.Deserialize.DeserializeXML;
+import com.main.RecombApp.Services.NotaFiscal.NotaFiscalService;
+import lombok.RequiredArgsConstructor;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.io.IOException;
+
+@RestController
+@RequestMapping("/notafiscal")
+@RequiredArgsConstructor
+@CrossOrigin
+public class NotaFiscalController {
+
+ @Autowired
+ DeserializeXML deserializeXML;
+ @Autowired
+ NotaFiscalService notaFiscalService;
+
+ @GetMapping("/{documento}")
+ public ResponseEntity ClienteFornecedorCPF(@PathVariable String documento)
+ {
+ return ResponseEntity.ok().body(notaFiscalService.GetFornecedorClienteCPF(documento));
+ }
+}
diff --git a/src/main/java/com/main/RecombApp/DTO/BoletoDTO.java b/src/main/java/com/main/RecombApp/DTO/BoletoDTO.java
new file mode 100644
index 0000000..2351381
--- /dev/null
+++ b/src/main/java/com/main/RecombApp/DTO/BoletoDTO.java
@@ -0,0 +1,20 @@
+package com.main.RecombApp.DTO;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.List;
+
+@Data
+@Builder
+@AllArgsConstructor
+@NoArgsConstructor
+public class BoletoDTO {
+
+ private String Value;
+ private String DataVencimento;
+ private String ValorParcelado;
+
+}
diff --git a/src/main/java/com/main/RecombApp/DTO/ClienteDTO.java b/src/main/java/com/main/RecombApp/DTO/ClienteDTO.java
new file mode 100644
index 0000000..7fa282d
--- /dev/null
+++ b/src/main/java/com/main/RecombApp/DTO/ClienteDTO.java
@@ -0,0 +1,23 @@
+package com.main.RecombApp.DTO;
+
+import com.main.RecombApp.Model.Boleto;
+import com.main.RecombApp.Model.Endereco;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.Set;
+
+@Data
+@Builder
+@AllArgsConstructor
+@NoArgsConstructor
+public class ClienteDTO {
+
+ private String CPF;
+ private String nome;
+ private Endereco endereco;
+ Set boletos;
+
+}
diff --git a/src/main/java/com/main/RecombApp/DTO/EnderecoDTO.java b/src/main/java/com/main/RecombApp/DTO/EnderecoDTO.java
new file mode 100644
index 0000000..5a3906c
--- /dev/null
+++ b/src/main/java/com/main/RecombApp/DTO/EnderecoDTO.java
@@ -0,0 +1,24 @@
+package com.main.RecombApp.DTO;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@Builder
+@AllArgsConstructor
+@NoArgsConstructor
+public class EnderecoDTO {
+ private String xLgr;
+ private String nro;
+ private String xBairro;
+ private String cMun;
+ private String xMun;
+ private String UF;
+ private String CEP;
+ private String cPais;
+ private String xPais;
+ private String fone;
+
+}
diff --git a/src/main/java/com/main/RecombApp/DTO/FornecedorDTO.java b/src/main/java/com/main/RecombApp/DTO/FornecedorDTO.java
new file mode 100644
index 0000000..e4f12dd
--- /dev/null
+++ b/src/main/java/com/main/RecombApp/DTO/FornecedorDTO.java
@@ -0,0 +1,18 @@
+package com.main.RecombApp.DTO;
+
+import com.main.RecombApp.Model.Endereco;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@Builder
+@AllArgsConstructor
+@NoArgsConstructor
+public class FornecedorDTO {
+
+ private String CNPJ;
+ private String nome;
+ private Endereco EnderecoEmissor;
+}
diff --git a/src/main/java/com/main/RecombApp/Model/Boleto.java b/src/main/java/com/main/RecombApp/Model/Boleto.java
new file mode 100644
index 0000000..73c8dbe
--- /dev/null
+++ b/src/main/java/com/main/RecombApp/Model/Boleto.java
@@ -0,0 +1,34 @@
+package com.main.RecombApp.Model;
+
+import jakarta.persistence.*;
+import jakarta.validation.constraints.NotBlank;
+import lombok.*;
+
+import java.util.Set;
+
+@Table(name = "boleto")
+@Entity
+@Getter
+@Setter
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+@Builder
+public class Boleto {
+ @Id
+ @GeneratedValue(strategy = GenerationType.IDENTITY)
+ private Long id;
+ @NotBlank
+ private String Value;
+ @NotBlank
+ private String ValorParcelado;
+ @NotBlank
+ private String DataVencimento;
+
+ @ManyToMany
+ @JoinTable(
+ name = "clientefornecedor_boleto",
+ joinColumns = @JoinColumn(name = "boleto_id"),
+ inverseJoinColumns = @JoinColumn(name = "cliente_id"))
+ Set boletos;
+}
diff --git a/src/main/java/com/main/RecombApp/Model/Cliente.java b/src/main/java/com/main/RecombApp/Model/Cliente.java
new file mode 100644
index 0000000..a6f6f00
--- /dev/null
+++ b/src/main/java/com/main/RecombApp/Model/Cliente.java
@@ -0,0 +1,35 @@
+package com.main.RecombApp.Model;
+
+import jakarta.persistence.*;
+import jakarta.validation.constraints.NotBlank;
+import lombok.*;
+import org.hibernate.annotations.OnDelete;
+import org.hibernate.annotations.OnDeleteAction;
+
+import java.util.Set;
+
+@Table(name = "cliente")
+@Entity
+@Getter
+@Setter
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+@Builder
+public class Cliente {
+
+ @Id
+ @GeneratedValue(strategy = GenerationType.IDENTITY)
+ private Long id;
+
+ @NotBlank
+ private String CPF;
+ @NotBlank
+ private String nome;
+
+ @ManyToOne(fetch = FetchType.EAGER, optional = false)
+ @JoinColumn(name = "endereco_id", nullable = false)
+ @OnDelete(action = OnDeleteAction.CASCADE)
+ Endereco endereco;
+
+}
diff --git a/src/main/java/com/main/RecombApp/Model/Endereco.java b/src/main/java/com/main/RecombApp/Model/Endereco.java
new file mode 100644
index 0000000..928430c
--- /dev/null
+++ b/src/main/java/com/main/RecombApp/Model/Endereco.java
@@ -0,0 +1,42 @@
+package com.main.RecombApp.Model;
+
+import jakarta.persistence.*;
+import jakarta.validation.constraints.NotBlank;
+import lombok.*;
+
+@Table(name = "endereco")
+@Entity
+@Getter
+@Setter
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+@Builder
+public class Endereco {
+
+ @Id
+ @GeneratedValue(strategy = GenerationType.IDENTITY)
+ private Long id;
+
+ @NotBlank
+ private String xLgr;
+ @NotBlank
+ private String nro;
+ @NotBlank
+ private String xBairro;
+ @NotBlank
+ private String cMun;
+ @NotBlank
+ private String xMun;
+ @NotBlank
+ private String UF;
+ @NotBlank
+ private String CEP;
+ @NotBlank
+ private String cPais;
+ @NotBlank
+ private String xPais;
+ private String fone;
+
+
+}
diff --git a/src/main/java/com/main/RecombApp/Model/Fornecedor.java b/src/main/java/com/main/RecombApp/Model/Fornecedor.java
new file mode 100644
index 0000000..9c8f603
--- /dev/null
+++ b/src/main/java/com/main/RecombApp/Model/Fornecedor.java
@@ -0,0 +1,35 @@
+package com.main.RecombApp.Model;
+
+import jakarta.persistence.*;
+import jakarta.validation.constraints.NotBlank;
+import lombok.*;
+import org.hibernate.annotations.OnDelete;
+import org.hibernate.annotations.OnDeleteAction;
+
+import java.util.Set;
+
+@Table(name = "fornecedor")
+@Entity
+@Getter
+@Setter
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+@Builder
+public class Fornecedor {
+
+ @Id
+ @GeneratedValue(strategy = GenerationType.IDENTITY)
+ private Long id;
+ @NotBlank
+ private String CNPJ;
+ @NotBlank
+ private String nome;
+
+ @ManyToOne(fetch = FetchType.EAGER, optional = false)
+ @JoinColumn(name = "endereco_id", nullable = false)
+ @OnDelete(action = OnDeleteAction.CASCADE)
+ Endereco endereco;
+
+
+}
diff --git a/src/main/java/com/main/RecombApp/Payload/Request/NotaFiscalRequest.java b/src/main/java/com/main/RecombApp/Payload/Request/NotaFiscalRequest.java
new file mode 100644
index 0000000..4a7aeca
--- /dev/null
+++ b/src/main/java/com/main/RecombApp/Payload/Request/NotaFiscalRequest.java
@@ -0,0 +1,17 @@
+package com.main.RecombApp.Payload.Request;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.springframework.web.multipart.MultipartFile;
+
+@Data
+@Builder
+@AllArgsConstructor
+@NoArgsConstructor
+public class NotaFiscalRequest {
+
+ private MultipartFile fileNf;
+
+}
diff --git a/src/main/java/com/main/RecombApp/Payload/Response/ClienteResponse.java b/src/main/java/com/main/RecombApp/Payload/Response/ClienteResponse.java
new file mode 100644
index 0000000..aef9a82
--- /dev/null
+++ b/src/main/java/com/main/RecombApp/Payload/Response/ClienteResponse.java
@@ -0,0 +1,18 @@
+package com.main.RecombApp.Payload.Response;
+
+import com.main.RecombApp.Model.Cliente;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.ArrayList;
+import java.util.List;
+
+@Data
+@Builder
+@AllArgsConstructor
+@NoArgsConstructor
+public class ClienteResponse {
+ List clientes = new ArrayList<>();
+}
diff --git a/src/main/java/com/main/RecombApp/Payload/Response/NFResponse.java b/src/main/java/com/main/RecombApp/Payload/Response/NFResponse.java
new file mode 100644
index 0000000..89d95d0
--- /dev/null
+++ b/src/main/java/com/main/RecombApp/Payload/Response/NFResponse.java
@@ -0,0 +1,24 @@
+package com.main.RecombApp.Payload.Response;
+
+import com.main.RecombApp.DTO.BoletoDTO;
+import com.main.RecombApp.DTO.ClienteDTO;
+import com.main.RecombApp.DTO.FornecedorDTO;
+import com.main.RecombApp.Model.Cliente;
+import com.main.RecombApp.Model.Fornecedor;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.List;
+
+@Data
+@Builder
+@AllArgsConstructor
+@NoArgsConstructor
+public class NFResponse {
+
+ List clientes;
+ List fornecedores;
+
+}
diff --git a/src/main/java/com/main/RecombApp/Payload/Response/NotaFiscalResponse.java b/src/main/java/com/main/RecombApp/Payload/Response/NotaFiscalResponse.java
new file mode 100644
index 0000000..86085a4
--- /dev/null
+++ b/src/main/java/com/main/RecombApp/Payload/Response/NotaFiscalResponse.java
@@ -0,0 +1,25 @@
+package com.main.RecombApp.Payload.Response;
+
+import com.main.RecombApp.DTO.BoletoDTO;
+import com.main.RecombApp.DTO.ClienteDTO;
+import com.main.RecombApp.DTO.FornecedorDTO;
+import jakarta.persistence.ManyToOne;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.List;
+
+@Data
+@Builder
+@AllArgsConstructor
+@NoArgsConstructor
+public class NotaFiscalResponse {
+
+ List boleto;
+ ClienteDTO cliente;
+ FornecedorDTO fornecedor;
+
+
+}
diff --git a/src/main/java/com/main/RecombApp/RecombAppApplication.java b/src/main/java/com/main/RecombApp/RecombAppApplication.java
new file mode 100644
index 0000000..56d881f
--- /dev/null
+++ b/src/main/java/com/main/RecombApp/RecombAppApplication.java
@@ -0,0 +1,13 @@
+package com.main.RecombApp;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+
+@SpringBootApplication
+public class RecombAppApplication {
+
+ public static void main(String[] args) {
+ SpringApplication.run(RecombAppApplication.class, args);
+ }
+
+}
diff --git a/src/main/java/com/main/RecombApp/Repository/BoletoRepository.java b/src/main/java/com/main/RecombApp/Repository/BoletoRepository.java
new file mode 100644
index 0000000..f8f9106
--- /dev/null
+++ b/src/main/java/com/main/RecombApp/Repository/BoletoRepository.java
@@ -0,0 +1,15 @@
+package com.main.RecombApp.Repository;
+
+import com.main.RecombApp.Model.Boleto;
+import com.main.RecombApp.Model.Cliente;
+import org.springframework.data.jdbc.repository.config.EnableJdbcRepositories;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+
+@Repository
+public interface BoletoRepository extends JpaRepository {
+
+
+}
diff --git a/src/main/java/com/main/RecombApp/Repository/ClienteRepository.java b/src/main/java/com/main/RecombApp/Repository/ClienteRepository.java
new file mode 100644
index 0000000..852b6e4
--- /dev/null
+++ b/src/main/java/com/main/RecombApp/Repository/ClienteRepository.java
@@ -0,0 +1,15 @@
+package com.main.RecombApp.Repository;
+
+import com.main.RecombApp.Model.Cliente;
+import com.main.RecombApp.Model.Endereco;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.Query;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+
+@Repository
+public interface ClienteRepository extends JpaRepository {
+ Cliente findByCPF(String CPF);
+ List findAllByCPFStartsWith(String cpf);
+}
diff --git a/src/main/java/com/main/RecombApp/Repository/EnderecoEmissorRepository.java b/src/main/java/com/main/RecombApp/Repository/EnderecoEmissorRepository.java
new file mode 100644
index 0000000..fc2eb87
--- /dev/null
+++ b/src/main/java/com/main/RecombApp/Repository/EnderecoEmissorRepository.java
@@ -0,0 +1,13 @@
+//package com.main.RecombApp.Repository;
+//
+//import com.main.RecombApp.Model.Boleto;
+//import com.main.RecombApp.Model.EnderecoEmissor;
+//import org.springframework.data.jpa.repository.JpaRepository;
+//import org.springframework.stereotype.Repository;
+//
+//@Repository
+//public interface EnderecoEmissorRepository extends JpaRepository {
+//
+// EnderecoEmissor findEnderecoEmissorByCep(String Cep);
+//
+//}
diff --git a/src/main/java/com/main/RecombApp/Repository/EnderecoRepository.java b/src/main/java/com/main/RecombApp/Repository/EnderecoRepository.java
new file mode 100644
index 0000000..376c40e
--- /dev/null
+++ b/src/main/java/com/main/RecombApp/Repository/EnderecoRepository.java
@@ -0,0 +1,11 @@
+package com.main.RecombApp.Repository;
+
+import com.main.RecombApp.DTO.EnderecoDTO;
+import com.main.RecombApp.Model.Endereco;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.stereotype.Repository;
+
+@Repository
+public interface EnderecoRepository extends JpaRepository {
+ Endereco findEnderecoByCEP(String CEP);
+}
diff --git a/src/main/java/com/main/RecombApp/Repository/FornecedorRepository.java b/src/main/java/com/main/RecombApp/Repository/FornecedorRepository.java
new file mode 100644
index 0000000..f8dcb09
--- /dev/null
+++ b/src/main/java/com/main/RecombApp/Repository/FornecedorRepository.java
@@ -0,0 +1,14 @@
+package com.main.RecombApp.Repository;
+
+import com.main.RecombApp.Model.Cliente;
+import com.main.RecombApp.Model.Fornecedor;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+
+@Repository
+public interface FornecedorRepository extends JpaRepository {
+ Fornecedor findByCNPJ (String CPF);
+ List findFornecedorsByCNPJStartsWith(String Cnpj);
+}
diff --git a/src/main/java/com/main/RecombApp/Security/SecurityConfiguration.java b/src/main/java/com/main/RecombApp/Security/SecurityConfiguration.java
new file mode 100644
index 0000000..14a0a79
--- /dev/null
+++ b/src/main/java/com/main/RecombApp/Security/SecurityConfiguration.java
@@ -0,0 +1,22 @@
+package com.main.RecombApp.Security;
+
+import lombok.RequiredArgsConstructor;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.security.config.annotation.web.builders.HttpSecurity;
+import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
+import org.springframework.security.config.annotation.web.configurers.AbstractHttpConfigurer;
+import org.springframework.security.web.SecurityFilterChain;
+
+@Configuration
+@EnableWebSecurity
+@RequiredArgsConstructor
+public class SecurityConfiguration {
+
+ @Bean
+ public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
+ http.csrf(AbstractHttpConfigurer::disable).authorizeHttpRequests(request -> request.anyRequest().permitAll());
+
+ return http.build();
+ }
+}
diff --git a/src/main/java/com/main/RecombApp/Services/Cliente/ClienteService.java b/src/main/java/com/main/RecombApp/Services/Cliente/ClienteService.java
new file mode 100644
index 0000000..4e10aa6
--- /dev/null
+++ b/src/main/java/com/main/RecombApp/Services/Cliente/ClienteService.java
@@ -0,0 +1,24 @@
+package com.main.RecombApp.Services.Cliente;
+
+import com.main.RecombApp.Model.Cliente;
+import com.main.RecombApp.Payload.Response.ClienteResponse;
+import com.main.RecombApp.Repository.ClienteRepository;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+@Service
+public class ClienteService {
+ @Autowired
+ ClienteRepository clienteRepository;
+
+ public List findAllClients(){
+ return clienteRepository.findAll();
+ }
+
+ public ClienteResponse findClientByValues(String valor){
+ return ClienteResponse.builder().clientes(clienteRepository.findAllByCPFStartsWith(valor)).build();
+ }
+
+}
diff --git a/src/main/java/com/main/RecombApp/Services/Deserialize/DeserializeXML.java b/src/main/java/com/main/RecombApp/Services/Deserialize/DeserializeXML.java
new file mode 100644
index 0000000..7b6277f
--- /dev/null
+++ b/src/main/java/com/main/RecombApp/Services/Deserialize/DeserializeXML.java
@@ -0,0 +1,130 @@
+package com.main.RecombApp.Services.Deserialize;
+
+
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.dataformat.xml.XmlMapper;
+import com.main.RecombApp.DTO.*;
+import com.main.RecombApp.Model.*;
+import com.main.RecombApp.Payload.Response.NotaFiscalResponse;
+import com.main.RecombApp.Repository.*;
+import org.modelmapper.ModelMapper;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+
+@Service
+public class DeserializeXML {
+
+ @Autowired
+ EnderecoRepository enderecoRepository;
+ @Autowired
+ ClienteRepository clienteRepository;
+ @Autowired
+ FornecedorRepository fornecedorRepository;
+ @Autowired
+ BoletoRepository boletoRepository;
+
+ public NotaFiscalResponse SaveXml(MultipartFile xmlFile) throws IOException {
+ XmlMapper xmlMapper = new XmlMapper();
+ JsonNode node = xmlMapper.readTree(xmlFile.getBytes());
+ ModelMapper modelMapper = new ModelMapper();
+
+ EnderecoDTO enderecoEmissorDTO = EnderecoDTO.builder()
+ .CEP(node.at("/NFe/infNFe/emit/enderEmit").get("CEP").asText())
+ .cMun(node.at("/NFe/infNFe/emit/enderEmit").get("cMun").asText())
+ .cMun(node.at("/NFe/infNFe/emit/enderEmit").get("cMun").asText())
+ .cPais(node.at("/NFe/infNFe/emit/enderEmit").get("cPais").asText())
+ .xMun(node.at("/NFe/infNFe/emit/enderEmit").get("xMun").asText())
+ .nro(node.at("/NFe/infNFe/emit/enderEmit").get("nro").asText())
+ .UF(node.at("/NFe/infNFe/emit/enderEmit").get("UF").asText())
+ .xLgr(node.at("/NFe/infNFe/emit/enderEmit").get("xLgr").asText())
+ .xBairro(node.at("/NFe/infNFe/emit/enderEmit").get("xBairro").asText())
+ .xPais(node.at("/NFe/infNFe/emit/enderEmit").get("xPais").asText())
+ .fone(node.at("/NFe/infNFe/emit/enderEmit").get("fone").asText())
+ .build();
+
+ EnderecoDTO enderecoDTO = EnderecoDTO.builder()
+ .CEP(node.at("/NFe/infNFe/dest/enderDest").get("CEP").asText())
+ .cMun(node.at("/NFe/infNFe/dest/enderDest").get("cMun").asText())
+ .cPais(node.at("/NFe/infNFe/dest/enderDest").get("cPais").asText())
+ .xMun(node.at("/NFe/infNFe/dest/enderDest").get("xMun").asText())
+ .nro(node.at("/NFe/infNFe/dest/enderDest").get("nro").asText())
+ .UF(node.at("/NFe/infNFe/dest/enderDest").get("UF").asText())
+ .xLgr(node.at("/NFe/infNFe/dest/enderDest").get("xLgr").asText())
+ .xBairro(node.at("/NFe/infNFe/dest/enderDest").get("xBairro").asText())
+ .xPais(node.at("/NFe/infNFe/dest/enderDest").get("xPais").asText())
+ .fone(node.at("/NFe/infNFe/dest/enderDest").get("fone").asText())
+ .build();
+
+
+ // Mapper
+ Endereco enderecoDTOModel = modelMapper.map(enderecoDTO, Endereco.class);
+
+ if (enderecoRepository.findEnderecoByCEP(node.at("/NFe/infNFe/dest/enderDest").get("CEP").asText()) != null) {
+ enderecoDTOModel = enderecoRepository.findEnderecoByCEP(node.at("/NFe/infNFe/dest/enderDest").get("CEP").asText());
+ } else {
+ enderecoRepository.save(enderecoDTOModel);
+ }
+
+
+ Endereco enderecoEmissorDTOModel = modelMapper.map(enderecoEmissorDTO, Endereco.class);
+
+ if(enderecoRepository.findEnderecoByCEP(node.at("/NFe/infNFe/emit/enderEmit").get("CEP").asText()) != null)
+ {
+ enderecoEmissorDTOModel = enderecoRepository.findEnderecoByCEP(node.at("/NFe/infNFe/dest/enderDest").get("CEP").asText());
+ }
+ else{
+ enderecoRepository.save(enderecoEmissorDTOModel);
+ }
+
+ ClienteDTO clienteDTO = ClienteDTO.builder()
+ .CPF(node.at("/NFe/infNFe/dest").get("CNPJ").asText())
+ .nome(node.at("/NFe/infNFe/dest").get("xNome").asText())
+ .endereco(enderecoDTOModel)
+ .build();
+
+ Cliente clienteDTOModel = modelMapper.map(clienteDTO, Cliente.class);
+
+ if (clienteRepository.findByCPF(node.at("/NFe/infNFe/dest").get("CNPJ").asText()) == null) {
+ clienteRepository.save(clienteDTOModel);
+ }
+
+ FornecedorDTO fornecedorDTO = FornecedorDTO.builder()
+ .CNPJ(node.at("/NFe/infNFe/emit").get("CNPJ").asText())
+ .nome(node.at("/NFe/infNFe/emit").get("xNome").asText())
+ .EnderecoEmissor(enderecoEmissorDTOModel)
+ .build();
+
+ Fornecedor fornecedorDTOModel = modelMapper.map(fornecedorDTO, Fornecedor.class);
+
+ if (fornecedorRepository.findByCNPJ(node.at("/NFe/infNFe/emit").get("CNPJ").asText()) == null) {
+ fornecedorRepository.save(fornecedorDTOModel);
+ }
+
+ // Considera-se que pode haver mais de um "parcelamento" do boleto
+ List listaBoletos = new ArrayList<>();
+
+ for (int i = 0; i < node.at("/NFe/infNFe/cobr/dup").findValuesAsText("dVenc").size(); i++) {
+ listaBoletos.add(BoletoDTO.builder()
+ .DataVencimento(node.at("/NFe/infNFe/cobr/dup").findValuesAsText("dVenc").get(i))
+ .ValorParcelado(node.at("/NFe/infNFe/cobr/dup").findValuesAsText("vDup").get(i))
+ .Value(node.at("/NFe/infNFe/cobr/fat").get("vLiq").asText())
+ .build());
+ }
+
+ for (BoletoDTO boletoDTO : listaBoletos) {
+ Boleto boletoDTOModel = modelMapper.map(boletoDTO, Boleto.class);
+ boletoRepository.save(boletoDTOModel);
+ }
+
+ return NotaFiscalResponse.builder()
+ .fornecedor(fornecedorDTO)
+ .cliente(clienteDTO)
+ .boleto(listaBoletos)
+ .build();
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/main/RecombApp/Services/NotaFiscal/NotaFiscalService.java b/src/main/java/com/main/RecombApp/Services/NotaFiscal/NotaFiscalService.java
new file mode 100644
index 0000000..18fe41a
--- /dev/null
+++ b/src/main/java/com/main/RecombApp/Services/NotaFiscal/NotaFiscalService.java
@@ -0,0 +1,27 @@
+package com.main.RecombApp.Services.NotaFiscal;
+
+import com.main.RecombApp.Payload.Response.NFResponse;
+import com.main.RecombApp.Repository.BoletoRepository;
+import com.main.RecombApp.Repository.ClienteRepository;
+import com.main.RecombApp.Repository.FornecedorRepository;
+import com.main.RecombApp.Services.Cliente.ClienteService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
+import org.springframework.stereotype.Service;
+
+@Service
+public class NotaFiscalService {
+
+ @Autowired
+ BoletoRepository boletoRepository;
+
+ @Autowired
+ ClienteRepository clienteRepository;
+ @Autowired
+ FornecedorRepository fornecedorRepository;
+
+ public NFResponse GetFornecedorClienteCPF(String documento){
+ return NFResponse.builder().fornecedores(fornecedorRepository.findFornecedorsByCNPJStartsWith(documento)).clientes(clienteRepository.findAllByCPFStartsWith(documento)).build();
+ }
+
+}
diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties
new file mode 100644
index 0000000..4b3b3e2
--- /dev/null
+++ b/src/main/resources/application.properties
@@ -0,0 +1,16 @@
+spring.session.store-type = jdbc
+#spring.security.user.name = unionadmin
+#spring.security.user.password = erjqfh80hqf3892uskp
+spring.datasource.url=jdbc:mysql://db4free.net:3306/recombappbd
+spring.datasource.username=recombadmin
+spring.datasource.password=ysujdbASJKLDGHU3Y48913O247YEIOUH
+spring.datasource.driverClassName=com.mysql.jdbc.Driver
+spring.jpa.hibernate.ddl-auto=update
+server.port = 8082
+server.shutdown=graceful
+spring.jpa.show-sql = true
+
+# App Properties
+WebApp.app.jwtCookieName= app
+WebApp.app.jwtSecret= appKey
+WebApp.app.jwtExpirationMs= 86400000
\ No newline at end of file
diff --git a/src/test/java/com/main/RecombApp/RecombAppApplicationTests.java b/src/test/java/com/main/RecombApp/RecombAppApplicationTests.java
new file mode 100644
index 0000000..5182d08
--- /dev/null
+++ b/src/test/java/com/main/RecombApp/RecombAppApplicationTests.java
@@ -0,0 +1,13 @@
+package com.main.RecombApp;
+
+import org.junit.jupiter.api.Test;
+import org.springframework.boot.test.context.SpringBootTest;
+
+@SpringBootTest
+class RecombAppApplicationTests {
+
+ @Test
+ void contextLoads() {
+ }
+
+}