liquido
Version:
Conjunto de ferramentas para desenvolvimento de aplicações para a internet 100% em português
130 lines • 6.69 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const figlet_1 = require("figlet");
const flexoes_1 = require("@designliquido/flexoes");
const chalk_1 = require("chalk");
const yargs_1 = __importDefault(require("yargs"));
const prompts_1 = __importDefault(require("prompts"));
const package_json_1 = require("./package.json");
const liquido_1 = require("./liquido");
const interface_linha_comando_1 = require("./interface-linha-comando");
const gerador_visoes_1 = require("./interface-linha-comando/gerar/gerador-visoes");
const gerador_rotas_1 = require("./interface-linha-comando/gerar/gerador-rotas");
/**
* Classe que representa o ponto de entrada da aplicação Liquido.
*/
class LiquidoPontoEntrada {
constructor() {
this.logo = (0, figlet_1.textSync)('Liquido', { horizontalLayout: 'full' });
}
mostrarLogo() {
console.log((0, chalk_1.blue)(this.logo + '\n'));
}
async comandoDocumentar() {
// await encontrarControladores();
await (0, interface_linha_comando_1.documentar)();
}
async comandoGerar(args) {
let nomeModelo = args.modelo;
if (nomeModelo === undefined || nomeModelo.length <= 0) {
const opcoesModelos = (0, interface_linha_comando_1.obterTodosModelos)();
const respostaNomeModelo = await (0, prompts_1.default)({
type: 'select',
name: 'nomeModelo',
message: 'Qual o nome do modelo?',
choices: opcoesModelos
});
nomeModelo = respostaNomeModelo.nomeModelo;
}
const declaracoes = (0, interface_linha_comando_1.importarModelos)(nomeModelo);
(0, interface_linha_comando_1.criarDiretorioAplicacao)('rotas');
const geradorVisoes = new gerador_visoes_1.GeradorVisoes();
const geradorRotas = new gerador_rotas_1.GeradorRotas();
for (const declaracao of declaracoes) {
const declaracaoModelo = declaracao;
const nomeBaseModelo = declaracaoModelo.simbolo.lexema.toLocaleLowerCase('pt');
const nomeModeloPlural = (0, flexoes_1.pluralizar)(nomeBaseModelo).toLocaleLowerCase('pt');
const caminhosRotas = geradorRotas.criarNovasRotas(declaracaoModelo);
for (const caminhoRota of caminhosRotas) {
console.info((0, chalk_1.blue)(`Rota ${caminhoRota}`));
}
(0, interface_linha_comando_1.criarDiretorioSeNaoExiste)('visoes', nomeModeloPlural);
const visaoSelecionarTudo = geradorVisoes.criarNovaVisao(nomeModeloPlural, declaracaoModelo, 'selecionarTudo');
console.info((0, chalk_1.blue)(`Visão ${visaoSelecionarTudo}`));
const visaoSelecionarUm = geradorVisoes.criarNovaVisao(nomeModeloPlural, declaracaoModelo, 'selecionarUm');
console.info((0, chalk_1.blue)(`Visão ${visaoSelecionarUm}`));
const visaoAdicionar = geradorVisoes.criarNovaVisao(nomeModeloPlural, declaracaoModelo, 'adicionar');
console.info((0, chalk_1.blue)(`Visão ${visaoAdicionar}`));
const visaoEditar = geradorVisoes.criarNovaVisao(nomeModeloPlural, declaracaoModelo, 'editar');
console.info((0, chalk_1.blue)(`Visão ${visaoEditar}`));
const visaoExcluir = geradorVisoes.criarNovaVisao(nomeModeloPlural, declaracaoModelo, 'excluir');
console.info((0, chalk_1.blue)(`Visão ${visaoExcluir}`));
}
}
async comandoNovo(args) {
let nomeProjeto = args.nome;
if (nomeProjeto === undefined || nomeProjeto.length <= 0) {
const respostaNomeProjeto = await (0, prompts_1.default)({
type: 'text',
name: 'nomeProjeto',
message: 'Qual o nome do seu projeto?'
});
nomeProjeto = respostaNomeProjeto.nomeProjeto;
}
if (nomeProjeto.length > 0) {
console.log((0, chalk_1.green)(`Iremos criar um novo projeto em Liquido chamado "${nomeProjeto}"`));
const resposta = await (0, prompts_1.default)({
type: 'confirm',
message: 'Confirma?',
name: 'confirmado',
initial: true,
onRender() {
this.yesMsg = 'Sim';
this.noMsg = 'não';
this.yesOption = '(S/n)';
}
});
if (resposta.confirmado) {
const diretorioCompleto = (0, interface_linha_comando_1.criarDiretorioAplicacao)(nomeProjeto);
const perguntaTipoProjeto = await (0, prompts_1.default)({
type: 'select',
name: 'tipoProjeto',
message: 'Selecione o tipo de projeto',
choices: [
{ title: 'MVC', description: 'Modelo-Visão-Controlador', value: 'mvc' },
{ title: 'API REST', description: 'Interface de dados usando o modelo REST', value: 'api-rest' }
],
initial: 1
});
await (0, interface_linha_comando_1.copiarExemploParaProjeto)(perguntaTipoProjeto.tipoProjeto, diretorioCompleto);
console.info((0, chalk_1.yellow)(`Seu projeto foi criado com sucesso! ${diretorioCompleto}`));
}
}
}
comandoServidor() {
const liquido = new liquido_1.Liquido(process.cwd());
liquido.iniciar();
}
opcoes() {
return yargs_1.default
.scriptName('liquido')
.version(package_json_1.version)
.usage('Uso: $0 <comando> [opções]')
.help('ajuda')
.alias('ajuda', '?')
.command(['*', 'servidor'], 'Serve o diretório local como uma aplicação para a internet.', {}, this.comandoServidor)
.command('documentar', 'Lê o projeto e gera uma documentação OpenAPI correspondente', {}, this.comandoDocumentar)
.command('novo [nome]', 'Inicia uma nova aplicação pré-configurada para funcionar com Liquido.', {}, this.comandoNovo)
.command('gerar [modelo]', 'Gera controlador e visão correspondentes ao nome do modelo passado por parâmetro. O modelo deve ter um arquivo .delegua correspondente no diretório "modelos".', {}, this.comandoGerar)
.argv;
}
async iniciar() {
this.mostrarLogo();
this.opcoes();
}
}
(async () => new LiquidoPontoEntrada().iniciar())();
//# sourceMappingURL=index.js.map