Skip to content

Commit

Permalink
- Classe de gerador de visões, ao invés de funções exportadas;
Browse files Browse the repository at this point in the history
- Ajustes na geração de visões para `inicial.lmht`.
  • Loading branch information
leonelsanchesdasilva committed Jan 14, 2024
1 parent 1e3fa12 commit 8840e87
Show file tree
Hide file tree
Showing 6 changed files with 103 additions and 69 deletions.
14 changes: 8 additions & 6 deletions index-gerar.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,8 @@ import prompts from 'prompts';
import { Classe } from '@designliquido/delegua/fontes/declaracoes';
import { pluralizar } from '@designliquido/flexoes';

import { criarDiretorioSeNaoExiste, criarNovaVisao, criarNovoControlador, importarModelos, obterTodosModelos } from './interface-linha-comando/gerar';
import { criarDiretorioSeNaoExiste, criarNovoControlador, importarModelos, obterTodosModelos } from './interface-linha-comando/gerar';
import { GeradorVisoes } from './interface-linha-comando/gerar/gerador-visoes';

const pontoDeEntradaGerar = async (argumentos: string[]) => {
// argumentos[0] normalmente é o nome do executável, seja Node, Bun, etc.
Expand Down Expand Up @@ -38,16 +39,17 @@ const pontoDeEntradaGerar = async (argumentos: string[]) => {

// Visões
criarDiretorioSeNaoExiste('visoes', nomeControladorPlural);
const geradorVisoes = new GeradorVisoes();

const visaoSelecionarTudo = criarNovaVisao(nomeControladorPlural, declaracaoModelo, 'selecionarTudo');
const visaoSelecionarTudo = geradorVisoes.criarNovaVisao(nomeControladorPlural, declaracaoModelo, 'selecionarTudo');
console.info(`Visão ${visaoSelecionarTudo}`);
const visaoSelecionarUm = criarNovaVisao(nomeControladorPlural, declaracaoModelo, 'selecionarUm');
const visaoSelecionarUm = geradorVisoes.criarNovaVisao(nomeControladorPlural, declaracaoModelo, 'selecionarUm');
console.info(`Visão ${visaoSelecionarUm}`);
const visaoAdicionar = criarNovaVisao(nomeControladorPlural, declaracaoModelo, 'adicionar');
const visaoAdicionar = geradorVisoes.criarNovaVisao(nomeControladorPlural, declaracaoModelo, 'adicionar');
console.info(`Visão ${visaoAdicionar}`);
const visaoAtualizar = criarNovaVisao(nomeControladorPlural, declaracaoModelo, 'atualizar');
const visaoAtualizar = geradorVisoes.criarNovaVisao(nomeControladorPlural, declaracaoModelo, 'atualizar');
console.info(`Visão ${visaoAtualizar}`);
const visaoExcluir = criarNovaVisao(nomeControladorPlural, declaracaoModelo, 'excluir');
const visaoExcluir = geradorVisoes.criarNovaVisao(nomeControladorPlural, declaracaoModelo, 'excluir');
console.info(`Visão ${visaoExcluir}`);
}
};
Expand Down
88 changes: 88 additions & 0 deletions interface-linha-comando/gerar/gerador-visoes.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
import * as sistemaArquivos from 'fs';
import * as caminho from 'path';

import { Classe } from '@designliquido/delegua/fontes/declaracoes';

import { TipoVisao } from './tipo-visao';

export class GeradorVisoes {
indentacao: number;

constructor() {
this.indentacao = 4;
}

/**
* Cria uma nova visão, de acordo com o nome do controlador e o tipo de visão desejado.
* @param {string} nomeControlador O nome do controlador.
* @param {TipoVisao} tipoVisao O tipo da visão.
* @returns O caminho completo onde a visão foi criada.
*/
criarNovaVisao(nomeControlador: string, declaracaoModelo: Classe, tipoVisao: TipoVisao) {
let caminhoVisao: string;
let corpo: string;
const diretorioVisoes = caminho.join(process.cwd(), 'visoes', nomeControlador);
const cabecalhoComum = " ".repeat(this.indentacao) + '<cabeça><título>Teste</título></cabeça>\n';

switch (tipoVisao) {
case 'selecionarTudo':
caminhoVisao = caminho.join(diretorioVisoes, 'inicial.lmht');
corpo = `${" ".repeat(this.indentacao)}<corpo>\n${this.corpoInicial(declaracaoModelo)}\n${" ".repeat(this.indentacao)}</corpo>\n`;
break;
case 'selecionarUm':
caminhoVisao = caminho.join(diretorioVisoes, 'detalhes.lmht');
corpo = ' <corpo>Teste</corpo>\n';
break;
case 'adicionar':
caminhoVisao = caminho.join(diretorioVisoes, 'adicionar.lmht');
corpo = ' <corpo>Teste</corpo>\n';
break;
case 'atualizar':
caminhoVisao = caminho.join(diretorioVisoes, 'atualizar.lmht');
corpo = ' <corpo>Teste</corpo>\n';
break;
case 'excluir':
caminhoVisao = caminho.join(diretorioVisoes, 'excluir.lmht');
corpo = ' <corpo>Teste</corpo>\n';
break;
}

const conteudoVisao: string = `<lmht>\n${cabecalhoComum}${corpo}</lmht>`;

sistemaArquivos.writeFileSync(caminhoVisao, conteudoVisao);

return caminhoVisao;
}

/**
* Função que gera o corpo de `inicial.lmht` de cada visão gerada por linha de comando.
* @param {Classe} declaracaoModelo A declaração do modelo de dados, com suas propriedades e definições.
* @returns {string} Um trecho em LMHT com a estrutura do corpo da página.
*/
private corpoInicial(declaracaoModelo: Classe): string {
// Colunas de cabeçalho
const colunasTabela: string[] = [];
for (const propriedade of declaracaoModelo.propriedades) {
colunasTabela.push(" ".repeat(this.indentacao * 5) + `<célula>${propriedade.nome.lexema}</célula>`);
}

const linhaCabecaTabela = " ".repeat(this.indentacao * 4) + '<linha>\n' +
colunasTabela.reduce(
(acumulador, elemento) => acumulador + '\n' + elemento
) +
'\n' + " ".repeat(this.indentacao * 4) + '</linha>';

const cabecaTabela = `${" ".repeat(this.indentacao * 3)}<cabeça-tabela>\n${linhaCabecaTabela}\n${" ".repeat(this.indentacao * 3)}</cabeça-tabela>`;

// Colunas do corpo da tabela
const linhaCorpoTabela = " ".repeat(this.indentacao * 4) + '<linha>\n' +
colunasTabela.reduce(
(acumulador, elemento) => acumulador + '\n' + elemento
) +
'\n' + " ".repeat(this.indentacao * 4) + '</linha>';

const corpoTabela = `${" ".repeat(this.indentacao * 3)}<corpo-tabela>\n${linhaCorpoTabela}\n${" ".repeat(this.indentacao * 3)}</corpo-tabela>`;

return `${" ".repeat(this.indentacao * 2)}<tabela>\n${cabecaTabela}\n${corpoTabela}\n${" ".repeat(this.indentacao * 2)}</tabela>`;
}
}
59 changes: 1 addition & 58 deletions interface-linha-comando/gerar/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,7 @@ import * as caminho from 'path';
import { Lexador } from '@designliquido/delegua/fontes/lexador';
import { AvaliadorSintatico } from '@designliquido/delegua/fontes/avaliador-sintatico';
import { Importador } from '@designliquido/delegua-node/fontes/importador';
import { Classe, Declaracao } from '@designliquido/delegua/fontes/declaracoes';

import { TipoVisao } from './tipo-visao';
import { Declaracao } from '@designliquido/delegua/fontes/declaracoes';

/**
* Obtém todos os modelos do diretório 'modelos' do projeto.
Expand Down Expand Up @@ -80,58 +78,3 @@ export function criarNovoControlador(nome: string): string {
return caminhoControlador;
}

/**
* Cria uma nova visão, de acordo com o nome do controlador e o tipo de visão desejado.
* @param {string} nomeControlador O nome do controlador.
* @param {TipoVisao} tipoVisao O tipo da visão.
* @returns O caminho completo onde a visão foi criada.
*/
export function criarNovaVisao(nomeControlador: string, declaracaoModelo: Classe, tipoVisao: TipoVisao) {
let caminhoVisao: string;
let corpo: string;
const diretorioVisoes = caminho.join(process.cwd(), 'visoes', nomeControlador);
const cabecalhoComum = ' <cabeça><título>Teste</título></cabeça>\n';

switch (tipoVisao) {
case 'selecionarTudo':
caminhoVisao = caminho.join(diretorioVisoes, 'inicial.lmht');
corpo = ` <corpo>${corpoInicial(declaracaoModelo)}</corpo>\n`;
break;
case 'selecionarUm':
caminhoVisao = caminho.join(diretorioVisoes, 'detalhes.lmht');
corpo = ' <corpo>Teste</corpo>\n';
break;
case 'adicionar':
caminhoVisao = caminho.join(diretorioVisoes, 'adicionar.lmht');
corpo = ' <corpo>Teste</corpo>\n';
break;
case 'atualizar':
caminhoVisao = caminho.join(diretorioVisoes, 'atualizar.lmht');
corpo = ' <corpo>Teste</corpo>\n';
break;
case 'excluir':
caminhoVisao = caminho.join(diretorioVisoes, 'excluir.lmht');
corpo = ' <corpo>Teste</corpo>\n';
break;
}

const conteudoVisao: string = `<lmht>\n${cabecalhoComum}${corpo}</lmht>`;

sistemaArquivos.writeFileSync(
caminhoVisao,
conteudoVisao
);

return caminhoVisao;
}

function corpoInicial(declaracaoModelo: Classe): string {
// Colunas de cabeçalho
const colunasTabela: string[] = [];
for (const propriedade of declaracaoModelo.propriedades) {
colunasTabela.push(` <célula>${propriedade.nome.lexema}</célula>`)
}

const cabecaTabela = `<cabeça-tabela>${colunasTabela.reduce((acumulador, elemento) => acumulador + '\n ' + elemento)}\n</cabeça-tabela>`;
return `<tabela>\n ${cabecaTabela}\n</tabela>`;
}
1 change: 1 addition & 0 deletions interface-linha-comando/index.ts
Original file line number Diff line number Diff line change
@@ -1 +1,2 @@
export * from './gerar';
export * from './novo';
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@
},
"dependencies": {
"@designliquido/delegua-node": "^0.29.1",
"@designliquido/flexoes": "^0.0.1",
"@designliquido/flexoes": "^0.1.0",
"@designliquido/foles": "^0.6.1",
"@designliquido/lincones-sqlite": "^0.0.2",
"@designliquido/lmht-js": "^0.4.4",
Expand Down
8 changes: 4 additions & 4 deletions yarn.lock
Original file line number Diff line number Diff line change
Expand Up @@ -325,10 +325,10 @@
esprima "^4.0.1"
lodash.clonedeep "^4.5.0"

"@designliquido/flexoes@^0.0.1":
version "0.0.1"
resolved "https://registry.yarnpkg.com/@designliquido/flexoes/-/flexoes-0.0.1.tgz#7e98904dbb4aec2cabc1c0879fe57b2015ef4604"
integrity sha512-zbl8Vofb4Dh97SiMyvjwLMfFaBRnUPuL9mJkj7REHWwcWxAxKMrnjLfpBtBfGg46Rq6R1XRFcV3IWWp9y4w4IA==
"@designliquido/flexoes@^0.1.0":
version "0.1.0"
resolved "https://registry.yarnpkg.com/@designliquido/flexoes/-/flexoes-0.1.0.tgz#59bc4c872f49f51ceca9fa4b8554697b82065000"
integrity sha512-5CpBpoeU4UgfwAV08pxJrJt5qljPqNQQdEU0DXkOsYcmDi0JcIBRjS/308stDuhsxuYH0AyeKn2wge+McynnoA==

"@designliquido/foles@^0.6.1":
version "0.6.1"
Expand Down

0 comments on commit 8840e87

Please sign in to comment.