-
Notifications
You must be signed in to change notification settings - Fork 2
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Geração de Visões por linha de comando (#31)
* - Restruturação do comando gerar para algo mais organizado; - Atualização do pacote `@designliquido/flexoes`. * Esboço da ideia de geração de visões. * Apagando exemplos.
- Loading branch information
1 parent
28df8f1
commit 9ae3e16
Showing
8 changed files
with
199 additions
and
87 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,119 @@ | ||
import * as sistemaArquivos from 'fs'; | ||
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 { Declaracao } from '@designliquido/delegua/fontes/declaracoes'; | ||
|
||
import { TipoVisao } from './tipo-visao'; | ||
|
||
/** | ||
* Obtém todos os modelos do diretório 'modelos' do projeto. | ||
* @returns {{ title: string, value: string }[]} Um vetor com todos os arquivos de modelos encontrados. | ||
*/ | ||
export function obterTodosModelos(): { title: string, value: string }[] { | ||
const diretorioModelos = caminho.join(process.cwd(), 'modelos'); | ||
const opcoesModelos = []; | ||
|
||
sistemaArquivos.readdirSync(diretorioModelos).forEach((arquivo) => { | ||
if (arquivo.endsWith('.delegua')) { | ||
const prefixoArquivo = arquivo.split('.')[0]; | ||
opcoesModelos.push({ title: prefixoArquivo, value: prefixoArquivo }); | ||
} | ||
}); | ||
|
||
return opcoesModelos; | ||
} | ||
|
||
/** | ||
* Dado o nome de um arquivo de modelos, retorna todas as declarações de modelos. | ||
* @param {string} nomeModelo O nome do arquivo no diretório 'modelos' que contém os modelos. | ||
* @returns {Declaracao[]} Um vetor de declarações de classes em Delégua. | ||
*/ | ||
export function importarModelos(nomeModelo: string): Declaracao[] { | ||
const diretorioModelos = caminho.join(process.cwd(), 'modelos'); | ||
const lexador = new Lexador(false); | ||
const avaliadorSintatico = new AvaliadorSintatico(false); | ||
const importador = new Importador(lexador, avaliadorSintatico, {}, {}, false); | ||
|
||
const resultadoImportacao = importador.importar(caminho.join(diretorioModelos, nomeModelo + '.delegua')); | ||
const declaracoes = resultadoImportacao.retornoAvaliadorSintatico.declaracoes; | ||
return declaracoes; | ||
} | ||
|
||
/** | ||
* Cria na raiz do projeto um diretório passado por parâmetro, se já não existir. | ||
* @param {string} partesDiretorio O diretório a ser verificado/criado. | ||
*/ | ||
export function criarDiretorioSeNaoExiste(...partesDiretorio: string[]) { | ||
const caminhoDiretorio = caminho.join(process.cwd(), ...partesDiretorio); | ||
|
||
if (!sistemaArquivos.existsSync(caminhoDiretorio)) { | ||
sistemaArquivos.mkdirSync(caminhoDiretorio); | ||
} | ||
} | ||
|
||
/** | ||
* Cria um arquivo `.delegua` no diretório 'controladores' com quatro rotas: | ||
* - rotaGet (para selecionar 1 ou vários registros na base de dados) | ||
* - rotaPost (para gravar 1 registro na base de dados) | ||
* - rotaPut (para alterar 1 registro na base de dados) | ||
* - rotaDelete (para excluir 1 registro na base de dados) | ||
* @param {string} nome O nome do controlador. | ||
* @returns {string} O caminho completo onde o controlador foi criado. | ||
*/ | ||
export function criarNovoControlador(nome: string): string { | ||
const diretorioControladores = caminho.join(process.cwd(), 'controladores'); | ||
|
||
const conteudoControlador = `liquido.rotaGet(funcao(requisicao, resposta) {\n resposta.lmht({ "titulo": "Liquido" })\n})`; | ||
const caminhoControlador = caminho.join(diretorioControladores, nome + '.delegua'); | ||
sistemaArquivos.writeFileSync( | ||
caminhoControlador, | ||
conteudoControlador | ||
); | ||
|
||
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, tipoVisao: TipoVisao) { | ||
let caminhoVisao: string; | ||
let conteudoVisao: string; | ||
const diretorioVisoes = caminho.join(process.cwd(), 'visoes', nomeControlador); | ||
|
||
switch (tipoVisao) { | ||
case 'selecionarTudo': | ||
caminhoVisao = caminho.join(diretorioVisoes, 'inicial.lmht'); | ||
conteudoVisao = `<lmht>\n <cabeça><título>Teste</título></cabeça>\n<corpo>Teste</corpo>\n</lmht>`; | ||
break; | ||
case 'selecionarUm': | ||
caminhoVisao = caminho.join(diretorioVisoes, 'detalhes.lmht'); | ||
conteudoVisao = `<lmht>\n <cabeça><título>Teste</título></cabeça>\n<corpo>Teste</corpo>\n</lmht>`; | ||
break; | ||
case 'adicionar': | ||
caminhoVisao = caminho.join(diretorioVisoes, 'adicionar.lmht'); | ||
conteudoVisao = `<lmht>\n <cabeça><título>Teste</título></cabeça>\n<corpo>Teste</corpo>\n</lmht>`; | ||
break; | ||
case 'atualizar': | ||
caminhoVisao = caminho.join(diretorioVisoes, 'atualizar.lmht'); | ||
conteudoVisao = `<lmht>\n <cabeça><título>Teste</título></cabeça>\n<corpo>Teste</corpo>\n</lmht>`; | ||
break; | ||
case 'excluir': | ||
caminhoVisao = caminho.join(diretorioVisoes, 'excluir.lmht'); | ||
conteudoVisao = `<lmht>\n <cabeça><título>Teste</título></cabeça>\n<corpo>Teste</corpo>\n</lmht>`; | ||
break; | ||
} | ||
|
||
sistemaArquivos.writeFileSync( | ||
caminhoVisao, | ||
conteudoVisao | ||
); | ||
|
||
return caminhoVisao; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
export type TipoVisao = 'selecionarTudo' | | ||
'selecionarUm' | | ||
'adicionar' | | ||
'atualizar' | | ||
'excluir'; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,43 +1 @@ | ||
import { async as glob } from 'fast-glob' | ||
import sistemaArquivos from 'fs'; | ||
import caminho from 'path'; | ||
|
||
export function criarDiretorioAplicacao(nomeAplicacao: string): string { | ||
const diretorioCompleto = process.cwd() + caminho.sep + nomeAplicacao; | ||
if (!sistemaArquivos.existsSync(nomeAplicacao)) { | ||
sistemaArquivos.mkdirSync(nomeAplicacao); | ||
console.log(`Diretório criado: ${diretorioCompleto}`); | ||
} else { | ||
console.log(`Diretório já existe: ${diretorioCompleto}`); | ||
} | ||
|
||
return diretorioCompleto; | ||
} | ||
|
||
export async function copiarExemploParaProjeto(tipoDeProjeto: string, diretorioProjeto: string) { | ||
const diretorioExemplos = caminho.join(__dirname, '../exemplos/' + tipoDeProjeto); | ||
const formatoGlob = (diretorioExemplos + '/**/*.{delegua,foles,lmht,md}').replace(/\\/gi, '/'); | ||
|
||
const arquivos = await glob([formatoGlob], { | ||
dot: true, | ||
absolute: false, | ||
stats: false, | ||
}); | ||
|
||
return Promise.all( | ||
arquivos.map(async (arquivo) => { | ||
const arquivoResolvido = caminho.resolve(arquivo); | ||
const novoCaminhoArquivo = arquivoResolvido.replace(diretorioExemplos, diretorioProjeto); | ||
console.log(novoCaminhoArquivo); | ||
await sistemaArquivos.promises.mkdir(caminho.dirname(novoCaminhoArquivo), { recursive: true }) | ||
return sistemaArquivos.promises.copyFile(arquivoResolvido, novoCaminhoArquivo); | ||
}) | ||
); | ||
} | ||
|
||
/* export function gerarProjetoPorTipoDeProjeto(tipoDeProjeto: string) { | ||
switch (tipoDeProjeto) { | ||
case 'api-rest': | ||
sistemaArquivos. | ||
} | ||
} */ | ||
export * from './novo'; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,43 @@ | ||
import { async as glob } from 'fast-glob' | ||
import sistemaArquivos from 'fs'; | ||
import caminho from 'path'; | ||
|
||
export function criarDiretorioAplicacao(nomeAplicacao: string): string { | ||
const diretorioCompleto = process.cwd() + caminho.sep + nomeAplicacao; | ||
if (!sistemaArquivos.existsSync(nomeAplicacao)) { | ||
sistemaArquivos.mkdirSync(nomeAplicacao); | ||
console.log(`Diretório criado: ${diretorioCompleto}`); | ||
} else { | ||
console.log(`Diretório já existe: ${diretorioCompleto}`); | ||
} | ||
|
||
return diretorioCompleto; | ||
} | ||
|
||
export async function copiarExemploParaProjeto(tipoDeProjeto: string, diretorioProjeto: string) { | ||
const diretorioExemplos = caminho.join(__dirname, '../exemplos/' + tipoDeProjeto); | ||
const formatoGlob = (diretorioExemplos + '/**/*.{delegua,foles,lmht,md}').replace(/\\/gi, '/'); | ||
|
||
const arquivos = await glob([formatoGlob], { | ||
dot: true, | ||
absolute: false, | ||
stats: false, | ||
}); | ||
|
||
return Promise.all( | ||
arquivos.map(async (arquivo) => { | ||
const arquivoResolvido = caminho.resolve(arquivo); | ||
const novoCaminhoArquivo = arquivoResolvido.replace(diretorioExemplos, diretorioProjeto); | ||
console.log(novoCaminhoArquivo); | ||
await sistemaArquivos.promises.mkdir(caminho.dirname(novoCaminhoArquivo), { recursive: true }) | ||
return sistemaArquivos.promises.copyFile(arquivoResolvido, novoCaminhoArquivo); | ||
}) | ||
); | ||
} | ||
|
||
/* export function gerarProjetoPorTipoDeProjeto(tipoDeProjeto: string) { | ||
switch (tipoDeProjeto) { | ||
case 'api-rest': | ||
sistemaArquivos. | ||
} | ||
} */ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters