@yakuzaa/jade 0.1.7 → 0.1.9

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/README.md CHANGED
@@ -1,34 +1,55 @@
1
1
  # @yakuzaa/jade
2
2
 
3
- Instalação completa da linguagem **JADE**compilador + runtime em um único pacote.
3
+ Compilador, runtime e CLI da **Jade DSL** — linguagem empresarial em português que compila para WebAssembly.
4
+
5
+ ## Criar um projeto
4
6
 
5
7
  ```bash
6
- npm install @yakuzaa/jade
8
+ npm create jade@latest meu-projeto
9
+ cd meu-projeto
10
+ npm run compilar
7
11
  ```
8
12
 
9
- Após a instalação, o VS Code recomendará automaticamente a extensão **JADE Language** com syntax highlighting, autocomplete e diagnósticos em tempo real.
10
-
11
- ## O que é instalado
12
-
13
- | Pacote | Função |
14
- |--------|--------|
15
- | `@yakuzaa/jade-compiler` | Compila arquivos `.jd` para WebAssembly |
16
- | `@yakuzaa/jade-runtime` | Executa o WebAssembly gerado (stdlib, APIs, UI engine) |
17
-
18
- ## Instalação individual
19
-
20
- Se precisar apenas de uma parte:
21
-
22
- ```bash
23
- npm install @yakuzaa/jade-compiler # só o compilador
24
- npm install @yakuzaa/jade-runtime # só o runtime
13
+ Isso é tudo. O projeto vem com estrutura completa, exemplos funcionais e dependências instaladas.
14
+
15
+ ## Comandos disponíveis no projeto
16
+
17
+ | Comando | O que faz |
18
+ |---------|-----------|
19
+ | `npm run compilar` | Compila `src/app.jd` `dist/` |
20
+ | `npm run verificar` | Verifica erros sem gerar arquivos |
21
+ | `npm run formatar` | Formata o código automaticamente |
22
+ | `npm run lint` | Analisa estilo e boas práticas |
23
+ | `npm run servir` | Servidor local para testar no browser |
24
+
25
+ ## Exemplo de código
26
+
27
+ ```jd
28
+ entidade Produto
29
+ id: id
30
+ nome: texto
31
+ preco: moeda
32
+ estoque: numero
33
+ fim
34
+
35
+ tela ListaProdutos "Produtos"
36
+ tabela Produtos
37
+ entidade: Produto
38
+ filtravel: verdadeiro
39
+ ordenavel: verdadeiro
40
+ paginacao: 20
41
+ fim
42
+ fim
25
43
  ```
26
44
 
27
45
  ## Extensão VS Code
28
46
 
29
- Instale manualmente pelo marketplace: `yakuzaa.jade-lang-vscode`
47
+ Syntax highlighting, autocomplete e diagnósticos em tempo real:
30
48
 
31
- Ou via linha de comando:
32
49
  ```bash
33
50
  code --install-extension yakuzaa.jade-lang-vscode
34
51
  ```
52
+
53
+ ## Documentação completa
54
+
55
+ → https://gabrielsymb.github.io/jade-language
package/cli.js CHANGED
@@ -5,6 +5,7 @@
5
5
  * Comandos disponíveis:
6
6
  * jade init <nome> → cria estrutura de projeto
7
7
  * jade compilar <arquivo.jd> → compila + gera index.html + runtime.js
8
+ * jade formatar [arquivo.jd] → formata arquivo(s) .jd (sem arg = todos)
8
9
  * jade servir [pasta] [porta] → servidor estático para testar no browser
9
10
  * jade --version → exibe versão
10
11
  * jade --help → exibe ajuda
@@ -31,6 +32,7 @@ jade ${versao()} — JADE DSL em português
31
32
  Comandos:
32
33
  jade init <nome> Cria projeto JADE com estrutura completa
33
34
  jade compilar <arquivo.jd> [-o] Compila e gera artefatos para o browser
35
+ jade formatar [arquivo.jd] Formata arquivos .jd (sem arg = todo o projeto)
34
36
  jade servir [pasta] [porta] Inicia servidor local para testar no browser
35
37
 
36
38
  Opções do compilar:
@@ -41,6 +43,8 @@ Exemplos:
41
43
  jade init meu-projeto
42
44
  jade compilar src/app.jd
43
45
  jade compilar src/app.jd -o dist/app
46
+ jade formatar src/estoque.jd
47
+ jade formatar
44
48
  jade servir dist
45
49
  jade servir dist 8080
46
50
 
@@ -74,6 +78,12 @@ async function main() {
74
78
  return;
75
79
  }
76
80
 
81
+ if (comando === 'formatar') {
82
+ const { formatar } = await import('./commands/formatar.js');
83
+ await formatar(args.slice(1));
84
+ return;
85
+ }
86
+
77
87
  if (comando === 'servir') {
78
88
  const { servir } = await import('./commands/servir.js');
79
89
  const pasta = args[1] ?? 'dist';
@@ -0,0 +1,123 @@
1
+ /**
2
+ * commands/formatar.js — Formata arquivos .jd usando o formatter do compilador
3
+ *
4
+ * Uso:
5
+ * jade formatar <arquivo.jd> → formata e sobrescreve um arquivo
6
+ * jade formatar → formata todos os .jd do projeto recursivamente
7
+ *
8
+ * Delega para: jadec --format-write
9
+ * Chamado por: jade/cli.js
10
+ */
11
+
12
+ import { spawn } from 'child_process';
13
+ import { resolve, join, relative } from 'path';
14
+ import { existsSync, readdirSync, statSync } from 'fs';
15
+ import { fileURLToPath } from 'url';
16
+
17
+ const verde = (s) => `\x1b[1;32m${s}\x1b[0m`;
18
+ const dim = (s) => `\x1b[2m${s}\x1b[0m`;
19
+ const vermelho = (s) => `\x1b[1;31m${s}\x1b[0m`;
20
+ const azul = (s) => `\x1b[34m${s}\x1b[0m`;
21
+
22
+ // ── Localiza jadec ────────────────────────────────────────────────────────────
23
+
24
+ function localizarJadec() {
25
+ const candidatos = [
26
+ join(process.cwd(), 'node_modules', '.bin', 'jadec'),
27
+ resolve(fileURLToPath(import.meta.url), '..', '..', '..', 'jade-compiler', 'dist', 'cli.js'),
28
+ ];
29
+ for (const c of candidatos) {
30
+ if (existsSync(c)) return c;
31
+ }
32
+ return 'jadec';
33
+ }
34
+
35
+ // ── Coleta todos os .jd recursivamente ───────────────────────────────────────
36
+
37
+ function coletarArquivos(dir, arquivos = []) {
38
+ const IGNORAR = ['node_modules', 'dist', '.git', '.cache'];
39
+ for (const entry of readdirSync(dir)) {
40
+ if (IGNORAR.includes(entry)) continue;
41
+ const caminho = join(dir, entry);
42
+ const stat = statSync(caminho);
43
+ if (stat.isDirectory()) {
44
+ coletarArquivos(caminho, arquivos);
45
+ } else if (entry.endsWith('.jd')) {
46
+ arquivos.push(caminho);
47
+ }
48
+ }
49
+ return arquivos;
50
+ }
51
+
52
+ // ── Roda jadec --format-write em um arquivo ──────────────────────────────────
53
+
54
+ function formatarArquivo(arquivo) {
55
+ return new Promise((res, rej) => {
56
+ const jadec = localizarJadec();
57
+ const cmd = jadec.endsWith('.js') ? 'node' : jadec;
58
+ const argv = jadec.endsWith('.js') ? [jadec, arquivo, '--format-write'] : [arquivo, '--format-write'];
59
+
60
+ const proc = spawn(cmd, argv, { stdio: ['inherit', 'pipe', 'pipe'] });
61
+
62
+ let stdout = '';
63
+ let stderr = '';
64
+ proc.stdout?.on('data', d => stdout += d);
65
+ proc.stderr?.on('data', d => stderr += d);
66
+
67
+ proc.on('close', code => {
68
+ if (code === 0) res({ ok: true, stdout, stderr });
69
+ else rej(new Error(stderr || `jadec saiu com código ${code}`));
70
+ });
71
+ proc.on('error', rej);
72
+ });
73
+ }
74
+
75
+ // ── Comando principal ─────────────────────────────────────────────────────────
76
+
77
+ export async function formatar(args) {
78
+ const arquivoArg = args?.find(a => !a.startsWith('-'));
79
+
80
+ let arquivos;
81
+
82
+ if (arquivoArg) {
83
+ // Arquivo específico
84
+ const caminho = resolve(arquivoArg);
85
+ if (!existsSync(caminho)) {
86
+ console.error(`\n${vermelho('erro')}: arquivo '${arquivoArg}' não encontrado.\n`);
87
+ process.exit(1);
88
+ }
89
+ arquivos = [caminho];
90
+ } else {
91
+ // Todos os .jd do projeto
92
+ arquivos = coletarArquivos(process.cwd());
93
+ if (arquivos.length === 0) {
94
+ console.log(dim('nenhum arquivo .jd encontrado.'));
95
+ return;
96
+ }
97
+ }
98
+
99
+ console.log(dim(`\nformatando ${arquivos.length} arquivo${arquivos.length > 1 ? 's' : ''}...\n`));
100
+
101
+ let ok = 0;
102
+ let erros = 0;
103
+
104
+ for (const arquivo of arquivos) {
105
+ const rel = relative(process.cwd(), arquivo);
106
+ try {
107
+ await formatarArquivo(arquivo);
108
+ console.log(` ${verde('ok')} ${azul(rel)}`);
109
+ ok++;
110
+ } catch (e) {
111
+ console.error(` ${vermelho('erro')} ${azul(rel)}: ${e.message}`);
112
+ erros++;
113
+ }
114
+ }
115
+
116
+ console.log('');
117
+ if (erros === 0) {
118
+ console.log(`${verde('formatação concluída')} — ${ok} arquivo${ok > 1 ? 's' : ''} formatado${ok > 1 ? 's' : ''}.`);
119
+ } else {
120
+ console.log(`${ok} ok, ${vermelho(`${erros} com erro${erros > 1 ? 's' : ''}`)}.`);
121
+ process.exit(1);
122
+ }
123
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@yakuzaa/jade",
3
- "version": "0.1.7",
3
+ "version": "0.1.9",
4
4
  "description": "Jade DSL — linguagem empresarial em português compilada para WebAssembly. Instala compilador + runtime + CLI.",
5
5
  "type": "module",
6
6
  "bin": {
@@ -17,8 +17,8 @@
17
17
  "postinstall": "node postinstall.js"
18
18
  },
19
19
  "dependencies": {
20
- "@yakuzaa/jade-compiler": "^0.1.8",
21
- "@yakuzaa/jade-runtime": "^0.1.6"
20
+ "@yakuzaa/jade-compiler": "^0.1.12",
21
+ "@yakuzaa/jade-runtime": "^0.1.8"
22
22
  },
23
23
  "keywords": [
24
24
  "jade",