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.
Files changed (2) hide show
  1. package/index.js +168 -0
  2. 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
+ }