diff --git a/index-gerar.ts b/index-gerar.ts index 5378435..aa9905a 100644 --- a/index-gerar.ts +++ b/index-gerar.ts @@ -52,8 +52,8 @@ const pontoDeEntradaGerar = async (argumentos: string[]) => { console.info(`Visão ${visaoSelecionarUm}`); const visaoAdicionar = geradorVisoes.criarNovaVisao(nomeModeloPlural, declaracaoModelo, 'adicionar'); console.info(`Visão ${visaoAdicionar}`); - const visaoAtualizar = geradorVisoes.criarNovaVisao(nomeModeloPlural, declaracaoModelo, 'atualizar'); - console.info(`Visão ${visaoAtualizar}`); + const visaoEditar = geradorVisoes.criarNovaVisao(nomeModeloPlural, declaracaoModelo, 'editar'); + console.info(`Visão ${visaoEditar}`); const visaoExcluir = geradorVisoes.criarNovaVisao(nomeModeloPlural, declaracaoModelo, 'excluir'); console.info(`Visão ${visaoExcluir}`); } diff --git a/infraestrutura/formatadores/index.ts b/infraestrutura/formatadores/index.ts index b796032..b7ee62d 100644 --- a/infraestrutura/formatadores/index.ts +++ b/infraestrutura/formatadores/index.ts @@ -30,8 +30,11 @@ export class FormatadorLmht { * @returns O resultado das duas conversões. */ async formatar(caminhoRota: string, valores: any): Promise { - let visaoCorrespondente: string = caminho.join(this.diretorioBase, 'visoes', caminhoRota, '.lmht'); - const diretorioOuArquivo = caminho.join(this.diretorioBase, 'visoes', caminhoRota); + // Remove parâmetros da rota. + // Ainda não sei se é uma boa ideia fazer desse jeito. + const caminhoRotaSemParametros = caminhoRota.replace(/:[\w]+\//i, ""); + let visaoCorrespondente: string = caminho.join(this.diretorioBase, 'visoes', caminhoRotaSemParametros, '.lmht'); + const diretorioOuArquivo = caminho.join(this.diretorioBase, 'visoes', caminhoRotaSemParametros); if (sistemaDeArquivos.existsSync(diretorioOuArquivo)) { // É diretório if (visaoCorrespondente.endsWith(caminho.sep + '.lmht')) { diff --git a/infraestrutura/preprocessadores/foles.ts b/infraestrutura/preprocessadores/foles.ts index 01947f2..0ee1e27 100644 --- a/infraestrutura/preprocessadores/foles.ts +++ b/infraestrutura/preprocessadores/foles.ts @@ -8,10 +8,12 @@ export class PreprocessadorFolEs { constructor() { this.leitorLmht = new XMLParser({ - ignoreAttributes: false + ignoreAttributes: false, + preserveOrder: true }); this.construtorLmht = new XMLBuilder({ - ignoreAttributes: false + ignoreAttributes: false, + preserveOrder: true }); this.foles = new FolEs(false); } diff --git a/interface-linha-comando/gerar/gerador-rotas.ts b/interface-linha-comando/gerar/gerador-rotas.ts index 5f27fdb..a91b92d 100644 --- a/interface-linha-comando/gerar/gerador-rotas.ts +++ b/interface-linha-comando/gerar/gerador-rotas.ts @@ -69,26 +69,25 @@ export class GeradorRotas { const conteudoAtualizar = `liquido.rotaPut(funcao(requisicao, resposta) {\n resposta.lmht({ "titulo": "Liquido" })\n})\n\n`; const conteudoSelecionarParaExclusao = this.criarRotaConfirmarExclusao(declaracaoModelo); const conteudoExcluir = `liquido.rotaDelete(funcao(requisicao, resposta) {\n resposta.lmht({ "titulo": "Liquido" })\n})\n\n`; - const conteudoRotas = `${conteudoSelecionarUm}${conteudoSelecionarParaEdicao}${conteudoAtualizar}${conteudoSelecionarParaExclusao}${conteudoExcluir}`; const diretorioRotasComId = criarDiretorioComIdSeNaoExiste(diretorioRotas); const caminhoRotasId = caminho.join(diretorioRotasComId, 'inicial.delegua'); sistemaArquivos.writeFileSync( caminhoRotasId, - conteudoRotas + `${conteudoSelecionarUm}` ); const caminhoRotaEditar = caminho.join(diretorioRotasComId, 'editar.delegua'); sistemaArquivos.writeFileSync( caminhoRotaEditar, - conteudoRotas + `${conteudoSelecionarParaEdicao}${conteudoAtualizar}` ); const caminhoRotaExcluir = caminho.join(diretorioRotasComId, 'excluir.delegua'); sistemaArquivos.writeFileSync( caminhoRotaExcluir, - conteudoRotas + `${conteudoSelecionarParaExclusao}${conteudoExcluir}` ); return [caminhoRotasId, caminhoRotaEditar, caminhoRotaExcluir]; diff --git a/interface-linha-comando/gerar/gerador-visoes.ts b/interface-linha-comando/gerar/gerador-visoes.ts index c1e4eea..74e5c56 100644 --- a/interface-linha-comando/gerar/gerador-visoes.ts +++ b/interface-linha-comando/gerar/gerador-visoes.ts @@ -37,9 +37,9 @@ export class GeradorVisoes { caminhoVisao = caminho.join(diretorioVisoes, 'adicionar.lmht'); corpo = ' Teste\n'; break; - case 'atualizar': - caminhoVisao = caminho.join(diretorioVisoes, 'atualizar.lmht'); - corpo = ' Teste\n'; + case 'editar': + caminhoVisao = caminho.join(diretorioVisoes, 'editar.lmht'); + corpo = `${" ".repeat(this.indentacao)}\n${this.corpoEditar(declaracaoModelo)}\n${" ".repeat(this.indentacao)}\n`; break; case 'excluir': caminhoVisao = caminho.join(diretorioVisoes, 'excluir.lmht'); @@ -117,4 +117,23 @@ export class GeradorVisoes { return `${titulo}${relacaoPropriedades}`; } + + private corpoEditar(declaracaoModelo: Classe): string { + const titulo = `${" ".repeat(this.indentacao * 2)}Detalhes de ${declaracaoModelo.simbolo.lexema}\n`; + + const listaPropriedades: string[] = []; + for (const propriedade of declaracaoModelo.propriedades) { + listaPropriedades.push(" ".repeat(this.indentacao * 3) + `${propriedade.nome.lexema}`); + listaPropriedades.push(" ".repeat(this.indentacao * 3) + ``); + } + + const relacaoPropriedades = `${" ".repeat(this.indentacao * 2)}\n` + + listaPropriedades.reduce( + (acumulador, elemento) => acumulador + '\n' + elemento + ) + + `\n${" ".repeat(this.indentacao * 2)}\n`; + + const formulario = `${" ".repeat(this.indentacao * 2)}\n${relacaoPropriedades}\n`; + return `${titulo}${formulario}`; + } } diff --git a/interface-linha-comando/gerar/tipo-visao.ts b/interface-linha-comando/gerar/tipo-visao.ts index 3295430..7873c85 100644 --- a/interface-linha-comando/gerar/tipo-visao.ts +++ b/interface-linha-comando/gerar/tipo-visao.ts @@ -1,5 +1,5 @@ export type TipoVisao = 'selecionarTudo' | 'selecionarUm' | 'adicionar' | - 'atualizar' | + 'editar' | 'excluir'; \ No newline at end of file diff --git a/package.json b/package.json index 39cd1d8..cdf202d 100644 --- a/package.json +++ b/package.json @@ -43,7 +43,7 @@ "@designliquido/flexoes": "^0.1.0", "@designliquido/foles": "^0.6.1", "@designliquido/lincones-sqlite": "^0.0.2", - "@designliquido/lmht-js": "^0.4.4", + "@designliquido/lmht-js": "^0.4.5", "body-parser": "^1.20.1", "commander": "^11.1.0", "cookie-parser": "^1.4.6", diff --git a/yarn.lock b/yarn.lock index c76125b..774acbd 100644 --- a/yarn.lock +++ b/yarn.lock @@ -348,13 +348,13 @@ sqlite "4.1.2" sqlite3 "^5.1.4" -"@designliquido/lmht-js@^0.4.4": - version "0.4.4" - resolved "https://registry.yarnpkg.com/@designliquido/lmht-js/-/lmht-js-0.4.4.tgz#d0f88553122a113f89f6516ec1d29a40a0061a81" - integrity sha512-mpL2mlZSsjRptkaoS4X0XOSiTzVH/QwVrpdJr6w1MjgJwWGPO/qsdlL/zRUwL6cW7JDo8B3scN3h2wHoOvY5aw== +"@designliquido/lmht-js@^0.4.5": + version "0.4.5" + resolved "https://registry.yarnpkg.com/@designliquido/lmht-js/-/lmht-js-0.4.5.tgz#5a31cb4a62a989d4cca97dd0a88035d5adf0cc0b" + integrity sha512-Y9DzF4XLjrxXtz6KDXBY3TJ9bUlepLJNUTKRT41OAh+5P8c2E7dYhVMZm2nvlq26IPmEwVwHNslEF4ueipgCgQ== dependencies: jsdom "^21.1.1" - xslt-processor "^2.1.2" + xslt-processor "^2.1.3" "@eslint/eslintrc@^1.3.3": version "1.3.3" @@ -6309,10 +6309,10 @@ xregexp@2.0.0: resolved "https://registry.yarnpkg.com/xregexp/-/xregexp-2.0.0.tgz#52a63e56ca0b84a7f3a5f3d61872f126ad7a5943" integrity sha512-xl/50/Cf32VsGq/1R8jJE5ajH1yMCQkpmoS10QbFZWl2Oor4H0Me64Pu2yxvsRWK3m6soJbmGfzSR7BYmDcWAA== -xslt-processor@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/xslt-processor/-/xslt-processor-2.1.2.tgz#3e116c737906aaf079c271115ae83e73a5e6d332" - integrity sha512-AwMLtLzRIRgVZuLgSra1Bz3wFUb6fBKYCK2gVaufXkIR2g7o4U9Ml5rCEcHoTc6LSDrKhSiFKnJEG+kKyrFvxw== +xslt-processor@^2.1.3: + version "2.1.3" + resolved "https://registry.yarnpkg.com/xslt-processor/-/xslt-processor-2.1.3.tgz#2380190f4ae383cc1f22173690ebc051d3f2e022" + integrity sha512-WiYeocbC/Y7SmRO7FAHUCx7mmGstd82CKiuWiJG3lYQYTbSHl/e1PVCuVuCVSY4ZHlGRkey48rgvCEEdAtlrjQ== dependencies: he "^1.2.0"