@semacode/cli 3.13.1 → 4.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/dist/cliGrammar.js +16 -5
- package/dist/cliHelpTexto.js +4 -3
- package/dist/contextPack.d.ts +75 -0
- package/dist/contextPack.js +133 -0
- package/dist/driftPack.d.ts +65 -0
- package/dist/driftPack.js +96 -0
- package/dist/entrypointPack.d.ts +47 -0
- package/dist/entrypointPack.js +79 -0
- package/dist/index.part05.js +7 -1
- package/dist/index.part06.js +48 -17
- package/dist/index.part07.d.ts +1 -1
- package/dist/index.part07.js +16 -2
- package/dist/index.part08.js +1 -1
- package/dist/indexPack.d.ts +54 -0
- package/dist/indexPack.js +146 -0
- package/dist/init/templates.part01.js +393 -393
- package/dist/init/templates.part02.js +189 -189
- package/dist/initTemplatesBackend.js +73 -73
- package/dist/initTemplatesFlutter.js +137 -137
- package/dist/initTemplatesRuntime.js +350 -350
- package/dist/initTemplatesWeb.js +309 -309
- package/dist/sync/index.js +35 -35
- package/docs/auth.md +26 -26
- package/docs/database.md +15 -15
- package/docs/env.md +16 -16
- package/docs/frontend.md +41 -41
- package/docs/i18n.md +15 -15
- package/exemplos/agendamento.sema +1 -1
- package/exemplos/assinatura.sema +1 -1
- package/exemplos/auditoria.sema +1 -1
- package/exemplos/autenticacao.sema +1 -1
- package/exemplos/author_obra_comum.sema +1 -1
- package/exemplos/author_tema_sensivel.sema +1 -1
- package/exemplos/automacao.sema +1 -1
- package/exemplos/cadastro_usuario.sema +1 -1
- package/exemplos/calculadora.sema +1 -1
- package/exemplos/crud_simples.sema +1 -1
- package/exemplos/estoque.sema +1 -1
- package/exemplos/exportacao.sema +1 -1
- package/exemplos/fila.sema +1 -1
- package/exemplos/integracao_externa.sema +1 -1
- package/exemplos/multi_tenant.sema +1 -1
- package/exemplos/notificacao.sema +1 -1
- package/exemplos/operacao_estrategia.sema +132 -132
- package/exemplos/operacao_estrategia_discovery.sema +220 -220
- package/exemplos/operacao_estrategia_fluxo.sema +114 -114
- package/exemplos/operacao_estrategia_gates.sema +106 -106
- package/exemplos/operacao_estrategia_quarentena.sema +133 -133
- package/exemplos/operacao_estrategia_rollout.sema +124 -124
- package/exemplos/pagamento.sema +1 -1
- package/exemplos/pagamento_dominio.sema +1 -1
- package/exemplos/pedido.sema +1 -1
- package/exemplos/permissao.sema +1 -1
- package/exemplos/persistencia_vendor_first.sema +1 -1
- package/exemplos/php_crud.sema +170 -170
- package/exemplos/profile_conversas.sema +165 -165
- package/exemplos/profile_game.sema +1 -1
- package/exemplos/profile_legal.sema +1 -1
- package/exemplos/profile_ops.sema +1 -1
- package/exemplos/profile_research.sema +1 -1
- package/exemplos/profile_software.sema +1 -1
- package/exemplos/profile_workflow_n8n.sema +1 -1
- package/exemplos/relatorio.sema +1 -1
- package/exemplos/replica_analitica_erp.sema +1 -1
- package/exemplos/testes_embutidos.sema +1 -1
- package/exemplos/tratamento_erro.sema +1 -1
- package/exemplos/upload_arquivo.sema +1 -1
- package/exemplos/webhook.sema +1 -1
- package/node_modules/@sema/gerador-cpp/dist/index.js +176 -176
- package/node_modules/@sema/gerador-css/dist/index.part01.js +10 -10
- package/node_modules/@sema/gerador-dotnet/dist/index.js +169 -169
- package/node_modules/@sema/gerador-html/dist/index.js +17 -17
- package/node_modules/@sema/gerador-python/dist/index.part02.js +3 -3
- package/node_modules/@sema/gerador-typescript/dist/index.part02.js +11 -11
- package/node_modules/@sema/nucleo/dist/diagnosticos/melhorador.js +42 -42
- package/package.json +1 -1
|
@@ -1,198 +1,198 @@
|
|
|
1
1
|
// SEMA-GOVERNED: sema.governanca_ia_contexto
|
|
2
2
|
// Descricao: CLI particionada; consulte contratos/sema/governanca_ia_contexto.sema antes de editar.
|
|
3
3
|
import { templateApiRest, templateAuthCompleto, templateCrudSimples } from "./templates.part01.js";
|
|
4
|
-
export const templateWorkflow = (moduloNome) => `module ${moduloNome} {
|
|
5
|
-
docs {
|
|
6
|
-
resumo: "Workflow de automacao com trigger, acoes e condicoes."
|
|
7
|
-
}
|
|
8
|
-
|
|
9
|
-
entity Workflow {
|
|
10
|
-
fields {
|
|
11
|
-
id: Id
|
|
12
|
-
nome: Texto
|
|
13
|
-
ativo: Booleano
|
|
14
|
-
trigger_tipo: Texto
|
|
15
|
-
trigger_config: Texto
|
|
16
|
-
acoes: Lista<Texto>
|
|
17
|
-
criado_em: Timestamp
|
|
18
|
-
}
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
task executar_workflow {
|
|
22
|
-
input {
|
|
23
|
-
workflow_id: Id required
|
|
24
|
-
payload: Texto required
|
|
25
|
-
contexto: Mapa<Texto, Texto> optional
|
|
26
|
-
}
|
|
27
|
-
output {
|
|
28
|
-
execucao_id: Id
|
|
29
|
-
resultado: Texto
|
|
30
|
-
status: Texto
|
|
31
|
-
duracao_ms: Inteiro
|
|
32
|
-
}
|
|
33
|
-
rules {
|
|
34
|
-
workflow_id deve_ser valido
|
|
35
|
-
payload deve_ser json_valido
|
|
36
|
-
}
|
|
37
|
-
effects {
|
|
38
|
-
consulta Workflow
|
|
39
|
-
consulta workflow_runtime
|
|
40
|
-
persistencia execucao_log
|
|
41
|
-
auditoria workflow_executado
|
|
42
|
-
}
|
|
43
|
-
execucao {
|
|
44
|
-
timeout: "30s"
|
|
45
|
-
retry: "ate 3 tentativas"
|
|
46
|
-
idempotencia: verdadeiro
|
|
47
|
-
}
|
|
48
|
-
guarantees {
|
|
49
|
-
execucao_id existe
|
|
50
|
-
status em ["sucesso", "falha", "timeout"]
|
|
51
|
-
}
|
|
52
|
-
error {
|
|
53
|
-
workflow_nao_encontrado: "Workflow nao encontrado."
|
|
54
|
-
workflow_inativo: "Workflow esta desativado."
|
|
55
|
-
execucao_timeout: "Workflow excedeu tempo limite."
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
flow orquestracao_workflow {
|
|
60
|
-
workflow_id: Id
|
|
61
|
-
payload: Texto
|
|
62
|
-
etapa validar usa executar_workflow com workflow_id = workflow_id, payload = payload em_sucesso processar em_erro registrar_falha
|
|
63
|
-
etapa processar usa processar_resultado com execucao_id = validar.execucao_id depende_de validar
|
|
64
|
-
etapa registrar_falha usa log_erro_workflow com workflow_id = workflow_id, erro = validar.error depende_de validar
|
|
65
|
-
}
|
|
4
|
+
export const templateWorkflow = (moduloNome) => `module ${moduloNome} {
|
|
5
|
+
docs {
|
|
6
|
+
resumo: "Workflow de automacao com trigger, acoes e condicoes."
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
entity Workflow {
|
|
10
|
+
fields {
|
|
11
|
+
id: Id
|
|
12
|
+
nome: Texto
|
|
13
|
+
ativo: Booleano
|
|
14
|
+
trigger_tipo: Texto
|
|
15
|
+
trigger_config: Texto
|
|
16
|
+
acoes: Lista<Texto>
|
|
17
|
+
criado_em: Timestamp
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
task executar_workflow {
|
|
22
|
+
input {
|
|
23
|
+
workflow_id: Id required
|
|
24
|
+
payload: Texto required
|
|
25
|
+
contexto: Mapa<Texto, Texto> optional
|
|
26
|
+
}
|
|
27
|
+
output {
|
|
28
|
+
execucao_id: Id
|
|
29
|
+
resultado: Texto
|
|
30
|
+
status: Texto
|
|
31
|
+
duracao_ms: Inteiro
|
|
32
|
+
}
|
|
33
|
+
rules {
|
|
34
|
+
workflow_id deve_ser valido
|
|
35
|
+
payload deve_ser json_valido
|
|
36
|
+
}
|
|
37
|
+
effects {
|
|
38
|
+
consulta Workflow
|
|
39
|
+
consulta workflow_runtime
|
|
40
|
+
persistencia execucao_log
|
|
41
|
+
auditoria workflow_executado
|
|
42
|
+
}
|
|
43
|
+
execucao {
|
|
44
|
+
timeout: "30s"
|
|
45
|
+
retry: "ate 3 tentativas"
|
|
46
|
+
idempotencia: verdadeiro
|
|
47
|
+
}
|
|
48
|
+
guarantees {
|
|
49
|
+
execucao_id existe
|
|
50
|
+
status em ["sucesso", "falha", "timeout"]
|
|
51
|
+
}
|
|
52
|
+
error {
|
|
53
|
+
workflow_nao_encontrado: "Workflow nao encontrado."
|
|
54
|
+
workflow_inativo: "Workflow esta desativado."
|
|
55
|
+
execucao_timeout: "Workflow excedeu tempo limite."
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
flow orquestracao_workflow {
|
|
60
|
+
workflow_id: Id
|
|
61
|
+
payload: Texto
|
|
62
|
+
etapa validar usa executar_workflow com workflow_id = workflow_id, payload = payload em_sucesso processar em_erro registrar_falha
|
|
63
|
+
etapa processar usa processar_resultado com execucao_id = validar.execucao_id depende_de validar
|
|
64
|
+
etapa registrar_falha usa log_erro_workflow com workflow_id = workflow_id, erro = validar.error depende_de validar
|
|
65
|
+
}
|
|
66
66
|
}`;
|
|
67
|
-
export const templatePedido = (moduloNome) => `module ${moduloNome} {
|
|
68
|
-
entity Pedido {
|
|
69
|
-
fields {
|
|
70
|
-
id: Id
|
|
71
|
-
cliente_id: Id
|
|
72
|
-
itens: Lista<Texto>
|
|
73
|
-
valor_total: Decimal
|
|
74
|
-
status: Texto
|
|
75
|
-
criado_em: Timestamp
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
task criar_pedido {
|
|
80
|
-
input {
|
|
81
|
-
cliente_id: Id required
|
|
82
|
-
itens: Lista<Texto> required
|
|
83
|
-
}
|
|
84
|
-
output {
|
|
85
|
-
pedido: Pedido
|
|
86
|
-
}
|
|
87
|
-
rules {
|
|
88
|
-
cliente_id deve_ser valido
|
|
89
|
-
itens deve_ser nao_vazio
|
|
90
|
-
}
|
|
91
|
-
effects {
|
|
92
|
-
persistencia Pedido
|
|
93
|
-
evento pedido_criado
|
|
94
|
-
}
|
|
95
|
-
guarantees {
|
|
96
|
-
pedido existe
|
|
97
|
-
pedido.status == "pendente"
|
|
98
|
-
}
|
|
99
|
-
}
|
|
67
|
+
export const templatePedido = (moduloNome) => `module ${moduloNome} {
|
|
68
|
+
entity Pedido {
|
|
69
|
+
fields {
|
|
70
|
+
id: Id
|
|
71
|
+
cliente_id: Id
|
|
72
|
+
itens: Lista<Texto>
|
|
73
|
+
valor_total: Decimal
|
|
74
|
+
status: Texto
|
|
75
|
+
criado_em: Timestamp
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
task criar_pedido {
|
|
80
|
+
input {
|
|
81
|
+
cliente_id: Id required
|
|
82
|
+
itens: Lista<Texto> required
|
|
83
|
+
}
|
|
84
|
+
output {
|
|
85
|
+
pedido: Pedido
|
|
86
|
+
}
|
|
87
|
+
rules {
|
|
88
|
+
cliente_id deve_ser valido
|
|
89
|
+
itens deve_ser nao_vazio
|
|
90
|
+
}
|
|
91
|
+
effects {
|
|
92
|
+
persistencia Pedido
|
|
93
|
+
evento pedido_criado
|
|
94
|
+
}
|
|
95
|
+
guarantees {
|
|
96
|
+
pedido existe
|
|
97
|
+
pedido.status == "pendente"
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
100
|
}`;
|
|
101
|
-
export const templateUsuario = (moduloNome) => `module ${moduloNome} {
|
|
102
|
-
entity Usuario {
|
|
103
|
-
fields {
|
|
104
|
-
id: Id
|
|
105
|
-
nome: Texto
|
|
106
|
-
email: Email
|
|
107
|
-
ativo: Booleano
|
|
108
|
-
}
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
task criar_usuario {
|
|
112
|
-
input {
|
|
113
|
-
nome: Texto required
|
|
114
|
-
email: Email required
|
|
115
|
-
}
|
|
116
|
-
output {
|
|
117
|
-
usuario: Usuario
|
|
118
|
-
}
|
|
119
|
-
rules {
|
|
120
|
-
nome deve_ser preenchido
|
|
121
|
-
email deve_ser email_valido
|
|
122
|
-
email deve_ser unico em Usuario.email
|
|
123
|
-
}
|
|
124
|
-
effects {
|
|
125
|
-
persistencia Usuario
|
|
126
|
-
evento usuario_criado
|
|
127
|
-
auditoria cadastro_usuario
|
|
128
|
-
}
|
|
129
|
-
guarantees {
|
|
130
|
-
usuario existe
|
|
131
|
-
persistencia concluida
|
|
132
|
-
}
|
|
133
|
-
error {
|
|
134
|
-
email_duplicado: "Ja existe usuario com este email."
|
|
135
|
-
entrada_invalida: "Os dados informados nao atendem as regras."
|
|
136
|
-
}
|
|
137
|
-
tests {
|
|
138
|
-
caso "cria usuario valido" {
|
|
139
|
-
given {
|
|
140
|
-
nome: "Ana"
|
|
141
|
-
email: "ana@empresa.com"
|
|
142
|
-
}
|
|
143
|
-
expect {
|
|
144
|
-
sucesso: verdadeiro
|
|
145
|
-
}
|
|
146
|
-
}
|
|
147
|
-
}
|
|
148
|
-
}
|
|
101
|
+
export const templateUsuario = (moduloNome) => `module ${moduloNome} {
|
|
102
|
+
entity Usuario {
|
|
103
|
+
fields {
|
|
104
|
+
id: Id
|
|
105
|
+
nome: Texto
|
|
106
|
+
email: Email
|
|
107
|
+
ativo: Booleano
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
task criar_usuario {
|
|
112
|
+
input {
|
|
113
|
+
nome: Texto required
|
|
114
|
+
email: Email required
|
|
115
|
+
}
|
|
116
|
+
output {
|
|
117
|
+
usuario: Usuario
|
|
118
|
+
}
|
|
119
|
+
rules {
|
|
120
|
+
nome deve_ser preenchido
|
|
121
|
+
email deve_ser email_valido
|
|
122
|
+
email deve_ser unico em Usuario.email
|
|
123
|
+
}
|
|
124
|
+
effects {
|
|
125
|
+
persistencia Usuario
|
|
126
|
+
evento usuario_criado
|
|
127
|
+
auditoria cadastro_usuario
|
|
128
|
+
}
|
|
129
|
+
guarantees {
|
|
130
|
+
usuario existe
|
|
131
|
+
persistencia concluida
|
|
132
|
+
}
|
|
133
|
+
error {
|
|
134
|
+
email_duplicado: "Ja existe usuario com este email."
|
|
135
|
+
entrada_invalida: "Os dados informados nao atendem as regras."
|
|
136
|
+
}
|
|
137
|
+
tests {
|
|
138
|
+
caso "cria usuario valido" {
|
|
139
|
+
given {
|
|
140
|
+
nome: "Ana"
|
|
141
|
+
email: "ana@empresa.com"
|
|
142
|
+
}
|
|
143
|
+
expect {
|
|
144
|
+
sucesso: verdadeiro
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
149
|
}`;
|
|
150
|
-
export const templateUpload = (moduloNome) => `module ${moduloNome} {
|
|
151
|
-
entity Arquivo {
|
|
152
|
-
fields {
|
|
153
|
-
id: Id
|
|
154
|
-
nome_original: Texto
|
|
155
|
-
mime_type: Texto
|
|
156
|
-
tamanho_bytes: Inteiro
|
|
157
|
-
url: Texto
|
|
158
|
-
upload_por: Id
|
|
159
|
-
criado_em: Timestamp
|
|
160
|
-
}
|
|
161
|
-
}
|
|
162
|
-
|
|
163
|
-
task upload_arquivo {
|
|
164
|
-
input {
|
|
165
|
-
arquivo_binario: Texto required
|
|
166
|
-
nome_original: Texto required
|
|
167
|
-
mime_type: Texto required
|
|
168
|
-
}
|
|
169
|
-
output {
|
|
170
|
-
arquivo: Arquivo
|
|
171
|
-
url_acesso: Texto
|
|
172
|
-
}
|
|
173
|
-
rules {
|
|
174
|
-
tamanho_bytes deve_ser <= 10485760 // 10MB
|
|
175
|
-
mime_type em ["image/jpeg", "image/png", "application/pdf", "text/plain"]
|
|
176
|
-
}
|
|
177
|
-
effects {
|
|
178
|
-
persistencia Arquivo
|
|
179
|
-
storage.write arquivo_binario
|
|
180
|
-
auditoria arquivo_uploadado
|
|
181
|
-
}
|
|
182
|
-
forbidden {
|
|
183
|
-
executar_arquivo_uploadado
|
|
184
|
-
armazenar_exe_ou_script
|
|
185
|
-
permitir_upload_anonimo_sem_rate_limit
|
|
186
|
-
}
|
|
187
|
-
guarantees {
|
|
188
|
-
arquivo existe
|
|
189
|
-
url_acesso existe
|
|
190
|
-
}
|
|
191
|
-
error {
|
|
192
|
-
arquivo_muito_grande: "Arquivo excede 10MB."
|
|
193
|
-
tipo_nao_permitido: "Tipo de arquivo nao permitido."
|
|
194
|
-
}
|
|
195
|
-
}
|
|
150
|
+
export const templateUpload = (moduloNome) => `module ${moduloNome} {
|
|
151
|
+
entity Arquivo {
|
|
152
|
+
fields {
|
|
153
|
+
id: Id
|
|
154
|
+
nome_original: Texto
|
|
155
|
+
mime_type: Texto
|
|
156
|
+
tamanho_bytes: Inteiro
|
|
157
|
+
url: Texto
|
|
158
|
+
upload_por: Id
|
|
159
|
+
criado_em: Timestamp
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
task upload_arquivo {
|
|
164
|
+
input {
|
|
165
|
+
arquivo_binario: Texto required
|
|
166
|
+
nome_original: Texto required
|
|
167
|
+
mime_type: Texto required
|
|
168
|
+
}
|
|
169
|
+
output {
|
|
170
|
+
arquivo: Arquivo
|
|
171
|
+
url_acesso: Texto
|
|
172
|
+
}
|
|
173
|
+
rules {
|
|
174
|
+
tamanho_bytes deve_ser <= 10485760 // 10MB
|
|
175
|
+
mime_type em ["image/jpeg", "image/png", "application/pdf", "text/plain"]
|
|
176
|
+
}
|
|
177
|
+
effects {
|
|
178
|
+
persistencia Arquivo
|
|
179
|
+
storage.write arquivo_binario
|
|
180
|
+
auditoria arquivo_uploadado
|
|
181
|
+
}
|
|
182
|
+
forbidden {
|
|
183
|
+
executar_arquivo_uploadado
|
|
184
|
+
armazenar_exe_ou_script
|
|
185
|
+
permitir_upload_anonimo_sem_rate_limit
|
|
186
|
+
}
|
|
187
|
+
guarantees {
|
|
188
|
+
arquivo existe
|
|
189
|
+
url_acesso existe
|
|
190
|
+
}
|
|
191
|
+
error {
|
|
192
|
+
arquivo_muito_grande: "Arquivo excede 10MB."
|
|
193
|
+
tipo_nao_permitido: "Tipo de arquivo nao permitido."
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
196
|
}`;
|
|
197
197
|
export const templatesDisponiveis = {
|
|
198
198
|
"crud-simples": {
|
|
@@ -8,19 +8,19 @@ export function arquivosInitTemplatesBackend(template, arquivosBase) {
|
|
|
8
8
|
arquivos = [
|
|
9
9
|
{
|
|
10
10
|
caminhoRelativo: "sema.config.json",
|
|
11
|
-
conteudo: `{
|
|
12
|
-
"origens": ["./contratos"],
|
|
13
|
-
"saida": "./generated/nestjs",
|
|
14
|
-
"alvos": ["typescript"],
|
|
15
|
-
"alvoPadrao": "typescript",
|
|
16
|
-
"estruturaSaida": "backend",
|
|
17
|
-
"framework": "nestjs",
|
|
18
|
-
"modoEstrito": true,
|
|
19
|
-
"diretoriosSaidaPorAlvo": {
|
|
20
|
-
"typescript": "./generated/nestjs"
|
|
21
|
-
},
|
|
22
|
-
"convencoesGeracaoPorProjeto": "backend"
|
|
23
|
-
}
|
|
11
|
+
conteudo: `{
|
|
12
|
+
"origens": ["./contratos"],
|
|
13
|
+
"saida": "./generated/nestjs",
|
|
14
|
+
"alvos": ["typescript"],
|
|
15
|
+
"alvoPadrao": "typescript",
|
|
16
|
+
"estruturaSaida": "backend",
|
|
17
|
+
"framework": "nestjs",
|
|
18
|
+
"modoEstrito": true,
|
|
19
|
+
"diretoriosSaidaPorAlvo": {
|
|
20
|
+
"typescript": "./generated/nestjs"
|
|
21
|
+
},
|
|
22
|
+
"convencoesGeracaoPorProjeto": "backend"
|
|
23
|
+
}
|
|
24
24
|
`,
|
|
25
25
|
},
|
|
26
26
|
{ caminhoRelativo: "src/.gitkeep", conteudo: "" },
|
|
@@ -32,19 +32,19 @@ export function arquivosInitTemplatesBackend(template, arquivosBase) {
|
|
|
32
32
|
arquivos = [
|
|
33
33
|
{
|
|
34
34
|
caminhoRelativo: "sema.config.json",
|
|
35
|
-
conteudo: `{
|
|
36
|
-
"origens": ["./contratos"],
|
|
37
|
-
"saida": "./generated/fastapi",
|
|
38
|
-
"alvos": ["python"],
|
|
39
|
-
"alvoPadrao": "python",
|
|
40
|
-
"estruturaSaida": "backend",
|
|
41
|
-
"framework": "fastapi",
|
|
42
|
-
"modoEstrito": true,
|
|
43
|
-
"diretoriosSaidaPorAlvo": {
|
|
44
|
-
"python": "./generated/fastapi"
|
|
45
|
-
},
|
|
46
|
-
"convencoesGeracaoPorProjeto": "backend"
|
|
47
|
-
}
|
|
35
|
+
conteudo: `{
|
|
36
|
+
"origens": ["./contratos"],
|
|
37
|
+
"saida": "./generated/fastapi",
|
|
38
|
+
"alvos": ["python"],
|
|
39
|
+
"alvoPadrao": "python",
|
|
40
|
+
"estruturaSaida": "backend",
|
|
41
|
+
"framework": "fastapi",
|
|
42
|
+
"modoEstrito": true,
|
|
43
|
+
"diretoriosSaidaPorAlvo": {
|
|
44
|
+
"python": "./generated/fastapi"
|
|
45
|
+
},
|
|
46
|
+
"convencoesGeracaoPorProjeto": "backend"
|
|
47
|
+
}
|
|
48
48
|
`,
|
|
49
49
|
},
|
|
50
50
|
{ caminhoRelativo: "app/.gitkeep", conteudo: "" },
|
|
@@ -56,65 +56,65 @@ export function arquivosInitTemplatesBackend(template, arquivosBase) {
|
|
|
56
56
|
arquivos = [
|
|
57
57
|
{
|
|
58
58
|
caminhoRelativo: "sema.config.json",
|
|
59
|
-
conteudo: `{
|
|
60
|
-
"origens": ["./contratos"],
|
|
61
|
-
"saida": "./generated",
|
|
62
|
-
"alvos": ["typescript"],
|
|
63
|
-
"alvoPadrao": "typescript",
|
|
64
|
-
"estruturaSaida": "modulos",
|
|
65
|
-
"framework": "base",
|
|
66
|
-
"modoEstrito": true,
|
|
67
|
-
"diretoriosCodigo": ["./src"],
|
|
68
|
-
"fontesLegado": ["nextjs", "typescript"],
|
|
69
|
-
"diretoriosSaidaPorAlvo": {
|
|
70
|
-
"typescript": "./generated/typescript"
|
|
71
|
-
},
|
|
72
|
-
"convencoesGeracaoPorProjeto": "base"
|
|
73
|
-
}
|
|
59
|
+
conteudo: `{
|
|
60
|
+
"origens": ["./contratos"],
|
|
61
|
+
"saida": "./generated",
|
|
62
|
+
"alvos": ["typescript"],
|
|
63
|
+
"alvoPadrao": "typescript",
|
|
64
|
+
"estruturaSaida": "modulos",
|
|
65
|
+
"framework": "base",
|
|
66
|
+
"modoEstrito": true,
|
|
67
|
+
"diretoriosCodigo": ["./src"],
|
|
68
|
+
"fontesLegado": ["nextjs", "typescript"],
|
|
69
|
+
"diretoriosSaidaPorAlvo": {
|
|
70
|
+
"typescript": "./generated/typescript"
|
|
71
|
+
},
|
|
72
|
+
"convencoesGeracaoPorProjeto": "base"
|
|
73
|
+
}
|
|
74
74
|
`,
|
|
75
75
|
},
|
|
76
76
|
{
|
|
77
77
|
caminhoRelativo: "contratos/health.sema",
|
|
78
|
-
conteudo: `module app.health {
|
|
79
|
-
task get_api_health {
|
|
80
|
-
output {
|
|
81
|
-
status: Texto
|
|
82
|
-
runtime: Texto
|
|
83
|
-
}
|
|
84
|
-
impl {
|
|
85
|
-
ts: src.app.api.health.route.GET
|
|
86
|
-
}
|
|
87
|
-
guarantees {
|
|
88
|
-
status existe
|
|
89
|
-
runtime existe
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
route get_api_health_publico {
|
|
94
|
-
metodo: GET
|
|
95
|
-
caminho: /api/health
|
|
96
|
-
task: get_api_health
|
|
97
|
-
}
|
|
98
|
-
}
|
|
78
|
+
conteudo: `module app.health {
|
|
79
|
+
task get_api_health {
|
|
80
|
+
output {
|
|
81
|
+
status: Texto
|
|
82
|
+
runtime: Texto
|
|
83
|
+
}
|
|
84
|
+
impl {
|
|
85
|
+
ts: src.app.api.health.route.GET
|
|
86
|
+
}
|
|
87
|
+
guarantees {
|
|
88
|
+
status existe
|
|
89
|
+
runtime existe
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
route get_api_health_publico {
|
|
94
|
+
metodo: GET
|
|
95
|
+
caminho: /api/health
|
|
96
|
+
task: get_api_health
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
99
|
`,
|
|
100
100
|
},
|
|
101
101
|
{
|
|
102
102
|
caminhoRelativo: "src/app/api/health/route.ts",
|
|
103
|
-
conteudo: `export async function GET() {
|
|
104
|
-
return Response.json({
|
|
105
|
-
status: "ok",
|
|
106
|
-
runtime: "nextjs",
|
|
107
|
-
});
|
|
108
|
-
}
|
|
103
|
+
conteudo: `export async function GET() {
|
|
104
|
+
return Response.json({
|
|
105
|
+
status: "ok",
|
|
106
|
+
runtime: "nextjs",
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
109
|
`,
|
|
110
110
|
},
|
|
111
111
|
{
|
|
112
112
|
caminhoRelativo: "README.md",
|
|
113
|
-
conteudo: `# Starter Next.js API + Sema
|
|
114
|
-
|
|
115
|
-
- Contratos em \`contratos/\`
|
|
116
|
-
- Handlers App Router em \`src/app/api/\`
|
|
117
|
-
- Rota de exemplo validada por \`drift\`
|
|
113
|
+
conteudo: `# Starter Next.js API + Sema
|
|
114
|
+
|
|
115
|
+
- Contratos em \`contratos/\`
|
|
116
|
+
- Handlers App Router em \`src/app/api/\`
|
|
117
|
+
- Rota de exemplo validada por \`drift\`
|
|
118
118
|
`,
|
|
119
119
|
},
|
|
120
120
|
];
|