create-jade 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/index.js +168 -0
- package/package.json +38 -0
package/index.js
ADDED
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* create-jade — scaffolding de projetos Jade DSL
|
|
4
|
+
* Usado via: npm create jade@latest <nome-projeto>
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import { mkdirSync, writeFileSync, existsSync } from 'fs';
|
|
8
|
+
import { join, resolve } from 'path';
|
|
9
|
+
import { execSync } from 'child_process';
|
|
10
|
+
|
|
11
|
+
// ── Cores ─────────────────────────────────────────────────────────────────────
|
|
12
|
+
|
|
13
|
+
const verde = (s) => `\x1b[1;32m${s}\x1b[0m`;
|
|
14
|
+
const azul = (s) => `\x1b[34m${s}\x1b[0m`;
|
|
15
|
+
const amarelo = (s) => `\x1b[1;33m${s}\x1b[0m`;
|
|
16
|
+
const dim = (s) => `\x1b[2m${s}\x1b[0m`;
|
|
17
|
+
const negrito = (s) => `\x1b[1m${s}\x1b[0m`;
|
|
18
|
+
const ok = () => verde('✓');
|
|
19
|
+
const erro = () => `\x1b[1;31m✗\x1b[0m`;
|
|
20
|
+
|
|
21
|
+
// ── Templates ─────────────────────────────────────────────────────────────────
|
|
22
|
+
|
|
23
|
+
const templates = {
|
|
24
|
+
packageJson: (nome) => JSON.stringify({
|
|
25
|
+
name: nome,
|
|
26
|
+
version: '1.0.0',
|
|
27
|
+
description: `Projeto Jade DSL — ${nome}`,
|
|
28
|
+
type: 'module',
|
|
29
|
+
scripts: {
|
|
30
|
+
compilar: 'jadec src/app.jd -o dist/',
|
|
31
|
+
verificar: 'jadec src/app.jd --check',
|
|
32
|
+
formatar: 'jadec src/app.jd --format-write',
|
|
33
|
+
lint: 'jadec src/app.jd --lint',
|
|
34
|
+
servir: 'jade servir',
|
|
35
|
+
},
|
|
36
|
+
devDependencies: {
|
|
37
|
+
'@yakuzaa/jade': 'latest',
|
|
38
|
+
},
|
|
39
|
+
}, null, 2) + '\n',
|
|
40
|
+
|
|
41
|
+
gitignore: () => `dist/\nnode_modules/\n*.log\n`,
|
|
42
|
+
|
|
43
|
+
appJd: (nome) => `\
|
|
44
|
+
importar entidades.Produto
|
|
45
|
+
|
|
46
|
+
tela Principal "${nome}"
|
|
47
|
+
cartao Bem_Vindo
|
|
48
|
+
titulo: "Bem-vindo ao ${nome}"
|
|
49
|
+
conteudo: "Seu projeto Jade DSL está pronto."
|
|
50
|
+
fim
|
|
51
|
+
tabela ListaProdutos
|
|
52
|
+
entidade: Produto
|
|
53
|
+
filtravel: verdadeiro
|
|
54
|
+
ordenavel: verdadeiro
|
|
55
|
+
paginacao: 10
|
|
56
|
+
fim
|
|
57
|
+
fim
|
|
58
|
+
`,
|
|
59
|
+
|
|
60
|
+
entidadeProduto: () => `\
|
|
61
|
+
entidade Produto
|
|
62
|
+
id: id
|
|
63
|
+
nome: texto
|
|
64
|
+
preco: moeda
|
|
65
|
+
estoque: numero
|
|
66
|
+
ativo: booleano
|
|
67
|
+
fim
|
|
68
|
+
`,
|
|
69
|
+
|
|
70
|
+
readme: (nome) => `\
|
|
71
|
+
# ${nome}
|
|
72
|
+
|
|
73
|
+
Projeto criado com **Jade DSL** — linguagem empresarial em português.
|
|
74
|
+
|
|
75
|
+
## Comandos
|
|
76
|
+
|
|
77
|
+
\`\`\`bash
|
|
78
|
+
npm run compilar # compila src/app.jd → dist/
|
|
79
|
+
npm run verificar # verifica erros sem compilar
|
|
80
|
+
npm run formatar # formata o código
|
|
81
|
+
npm run lint # análise de estilo
|
|
82
|
+
npm run servir # servidor local
|
|
83
|
+
\`\`\`
|
|
84
|
+
|
|
85
|
+
## Documentação
|
|
86
|
+
|
|
87
|
+
https://gabrielsymb.github.io/jade-language
|
|
88
|
+
`,
|
|
89
|
+
};
|
|
90
|
+
|
|
91
|
+
// ── Estrutura de arquivos ─────────────────────────────────────────────────────
|
|
92
|
+
|
|
93
|
+
function estrutura(nome) {
|
|
94
|
+
return [
|
|
95
|
+
['src/entidades', null],
|
|
96
|
+
['src/entidades/Produto.jd', templates.entidadeProduto()],
|
|
97
|
+
['src/ui/telas', null],
|
|
98
|
+
['dist', null],
|
|
99
|
+
['src/app.jd', templates.appJd(nome)],
|
|
100
|
+
['package.json', templates.packageJson(nome)],
|
|
101
|
+
['.gitignore', templates.gitignore()],
|
|
102
|
+
['README.md', templates.readme(nome)],
|
|
103
|
+
];
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
// ── Main ─────────────────────────────────────────────────────────────────────
|
|
107
|
+
|
|
108
|
+
async function main() {
|
|
109
|
+
let nome = process.argv[2];
|
|
110
|
+
|
|
111
|
+
if (!nome || nome.trim() === '') {
|
|
112
|
+
console.error(`\n${erro()} Informe o nome do projeto:\n`);
|
|
113
|
+
console.error(` ${azul('npm create jade@latest')} ${amarelo('meu-projeto')}\n`);
|
|
114
|
+
process.exit(1);
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
nome = nome.trim();
|
|
118
|
+
|
|
119
|
+
if (!/^[a-zA-Z0-9À-ÿ_-]+$/.test(nome)) {
|
|
120
|
+
console.error(`\n${erro()} Nome inválido: ${amarelo(nome)}`);
|
|
121
|
+
console.error(` Use apenas letras, números, hífens e underscores.\n`);
|
|
122
|
+
process.exit(1);
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
const destino = resolve(process.cwd(), nome);
|
|
126
|
+
|
|
127
|
+
if (existsSync(destino)) {
|
|
128
|
+
console.error(`\n${erro()} A pasta ${amarelo(nome)} já existe.`);
|
|
129
|
+
console.error(` Escolha outro nome ou remova a pasta existente.\n`);
|
|
130
|
+
process.exit(1);
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
console.log(`\n ${negrito('Jade DSL')} — criando ${negrito(nome)}...\n`);
|
|
134
|
+
|
|
135
|
+
// Cria arquivos
|
|
136
|
+
for (const [rel, conteudo] of estrutura(nome)) {
|
|
137
|
+
const caminho = join(destino, rel);
|
|
138
|
+
try {
|
|
139
|
+
if (conteudo === null) {
|
|
140
|
+
mkdirSync(caminho, { recursive: true });
|
|
141
|
+
} else {
|
|
142
|
+
mkdirSync(join(caminho, '..'), { recursive: true });
|
|
143
|
+
writeFileSync(caminho, conteudo, 'utf-8');
|
|
144
|
+
}
|
|
145
|
+
console.log(` ${ok()} ${dim(rel)}`);
|
|
146
|
+
} catch (e) {
|
|
147
|
+
console.error(` ${erro()} ${rel} — ${e.message}`);
|
|
148
|
+
process.exit(1);
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
// npm install
|
|
153
|
+
console.log(`\n ${dim('Instalando dependências...')}`);
|
|
154
|
+
try {
|
|
155
|
+
execSync('npm install', { cwd: destino, stdio: 'pipe' });
|
|
156
|
+
console.log(` ${ok()} ${dim('node_modules instalado')}`);
|
|
157
|
+
} catch (e) {
|
|
158
|
+
console.error(` ${erro()} npm install falhou — rode manualmente dentro de ${nome}/\n`);
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
// Sucesso
|
|
162
|
+
console.log(`\n${verde(' Projeto criado!')}\n`);
|
|
163
|
+
console.log(` ${dim('Próximos passos:')}`);
|
|
164
|
+
console.log(` ${azul('cd')} ${nome}`);
|
|
165
|
+
console.log(` ${azul('npm run compilar')}\n`);
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
main();
|
package/package.json
ADDED
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "create-jade",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Cria um projeto Jade DSL com estrutura completa e dependências instaladas",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"bin": {
|
|
7
|
+
"create-jade": "index.js"
|
|
8
|
+
},
|
|
9
|
+
"files": [
|
|
10
|
+
"index.js"
|
|
11
|
+
],
|
|
12
|
+
"keywords": [
|
|
13
|
+
"jade",
|
|
14
|
+
"jade-dsl",
|
|
15
|
+
"create",
|
|
16
|
+
"scaffold",
|
|
17
|
+
"portuguese",
|
|
18
|
+
"dsl",
|
|
19
|
+
"enterprise"
|
|
20
|
+
],
|
|
21
|
+
"author": "yakuzaa",
|
|
22
|
+
"license": "MIT",
|
|
23
|
+
"repository": {
|
|
24
|
+
"type": "git",
|
|
25
|
+
"url": "https://github.com/gabrielsymb/jade-language.git",
|
|
26
|
+
"directory": "create-jade"
|
|
27
|
+
},
|
|
28
|
+
"homepage": "https://gabrielsymb.github.io/jade-language",
|
|
29
|
+
"bugs": {
|
|
30
|
+
"url": "https://github.com/gabrielsymb/jade-language/issues"
|
|
31
|
+
},
|
|
32
|
+
"engines": {
|
|
33
|
+
"node": ">=20.0.0"
|
|
34
|
+
},
|
|
35
|
+
"publishConfig": {
|
|
36
|
+
"access": "public"
|
|
37
|
+
}
|
|
38
|
+
}
|