@semacode/cli 1.5.16 → 1.5.18

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 (181) hide show
  1. package/AGENTS.md +272 -0
  2. package/LICENSE +22 -0
  3. package/README.md +104 -112
  4. package/SEMA_BRIEF.curto.txt +9 -0
  5. package/SEMA_BRIEF.md +63 -0
  6. package/SEMA_BRIEF.micro.txt +7 -0
  7. package/SEMA_INDEX.json +783 -0
  8. package/dist/angular-consumer-standalone.d.ts +6 -0
  9. package/dist/angular-consumer-standalone.js.map +1 -0
  10. package/dist/cpp-symbols.d.ts +10 -0
  11. package/dist/cpp-symbols.js.map +1 -0
  12. package/dist/docs.d.ts +56 -0
  13. package/dist/docs.js.map +1 -0
  14. package/dist/dotnet-http.d.ts +23 -0
  15. package/dist/dotnet-http.js.map +1 -0
  16. package/dist/drift.d.ts +225 -0
  17. package/dist/drift.js +5 -111
  18. package/dist/drift.js.map +1 -0
  19. package/dist/go-http.d.ts +23 -0
  20. package/dist/go-http.js.map +1 -0
  21. package/dist/importador.d.ts +31 -0
  22. package/dist/importador.js +1 -200
  23. package/dist/importador.js.map +1 -0
  24. package/dist/index.d.ts +2 -0
  25. package/dist/index.js +59 -479
  26. package/dist/index.js.map +1 -0
  27. package/dist/java-http.d.ts +23 -0
  28. package/dist/java-http.js.map +1 -0
  29. package/dist/lua-symbols.d.ts +10 -0
  30. package/dist/lua-symbols.js.map +1 -0
  31. package/dist/php-symbols.d.ts +24 -0
  32. package/dist/php-symbols.js.map +1 -0
  33. package/dist/projeto.d.ts +53 -0
  34. package/dist/projeto.js +0 -20
  35. package/dist/projeto.js.map +1 -0
  36. package/dist/python-http.d.ts +23 -0
  37. package/dist/python-http.js.map +1 -0
  38. package/dist/rust-http.d.ts +23 -0
  39. package/dist/rust-http.js.map +1 -0
  40. package/dist/tipos.d.ts +3 -0
  41. package/dist/tipos.js.map +1 -0
  42. package/dist/typescript-http.d.ts +35 -0
  43. package/dist/typescript-http.js.map +1 -0
  44. package/docs/AGENT_STARTER.md +103 -0
  45. package/docs/cli.md +106 -0
  46. package/docs/como-ensinar-a-sema-para-ia.md +149 -0
  47. package/docs/deploy.md +70 -0
  48. package/docs/documentacao.md +63 -0
  49. package/docs/env.md +56 -0
  50. package/docs/extensao-vscode.md +45 -0
  51. package/docs/fluxo-pratico-ia-sema.md +181 -0
  52. package/docs/instalacao-e-primeiro-uso.md +112 -0
  53. package/docs/integracao-com-ia.md +103 -0
  54. package/docs/mcp.md +51 -0
  55. package/docs/pagamento-ponta-a-ponta.md +165 -0
  56. package/docs/persistencia-vendor-first.md +145 -0
  57. package/docs/prompt-base-ia-sema.md +105 -0
  58. package/docs/rollback.md +47 -0
  59. package/docs/sintaxe.md +212 -0
  60. package/exemplos/agendamento.sema +105 -0
  61. package/exemplos/assinatura.sema +133 -0
  62. package/exemplos/auditoria.sema +89 -0
  63. package/exemplos/autenticacao.sema +125 -0
  64. package/exemplos/automacao.sema +107 -0
  65. package/exemplos/cadastro_usuario.sema +54 -0
  66. package/exemplos/calculadora.sema +78 -0
  67. package/exemplos/crud_simples.sema +89 -0
  68. package/exemplos/estoque.sema +127 -0
  69. package/exemplos/exportacao.sema +94 -0
  70. package/exemplos/fila.sema +130 -0
  71. package/exemplos/integracao_externa.sema +94 -0
  72. package/exemplos/multi_tenant.sema +140 -0
  73. package/exemplos/notificacao.sema +149 -0
  74. package/exemplos/operacao_estrategia.sema +633 -0
  75. package/exemplos/pagamento.sema +434 -0
  76. package/exemplos/pagamento_dominio.sema +35 -0
  77. package/exemplos/pedido.sema +255 -0
  78. package/exemplos/permissao.sema +121 -0
  79. package/exemplos/persistencia_vendor_first.sema +86 -0
  80. package/exemplos/relatorio.sema +93 -0
  81. package/exemplos/replica_analitica_erp.sema +160 -0
  82. package/exemplos/testes_embutidos.sema +45 -0
  83. package/exemplos/tratamento_erro.sema +157 -0
  84. package/exemplos/upload_arquivo.sema +93 -0
  85. package/exemplos/webhook.sema +94 -0
  86. package/llms-full.txt +34 -0
  87. package/llms.txt +17 -0
  88. package/node_modules/@sema/gerador-css/dist/index.d.ts +3 -0
  89. package/node_modules/@sema/gerador-css/dist/index.js +592 -0
  90. package/node_modules/@sema/gerador-css/dist/index.js.map +1 -0
  91. package/node_modules/@sema/gerador-css/package.json +7 -0
  92. package/node_modules/@sema/gerador-dart/dist/index.d.ts +3 -0
  93. package/node_modules/@sema/gerador-dart/dist/index.js +44 -0
  94. package/node_modules/@sema/gerador-dart/dist/index.js.map +1 -0
  95. package/node_modules/@sema/gerador-dart/package.json +7 -0
  96. package/node_modules/@sema/gerador-html/dist/index.d.ts +3 -0
  97. package/node_modules/@sema/gerador-html/dist/index.js +163 -0
  98. package/node_modules/@sema/gerador-html/dist/index.js.map +1 -0
  99. package/node_modules/@sema/gerador-html/package.json +7 -0
  100. package/node_modules/@sema/gerador-javascript/dist/index.d.ts +3 -0
  101. package/node_modules/@sema/gerador-javascript/dist/index.js +421 -0
  102. package/node_modules/@sema/gerador-javascript/dist/index.js.map +1 -0
  103. package/node_modules/@sema/gerador-javascript/package.json +7 -0
  104. package/node_modules/@sema/gerador-lua/dist/index.d.ts +3 -0
  105. package/node_modules/@sema/gerador-lua/dist/index.js +328 -0
  106. package/node_modules/@sema/gerador-lua/dist/index.js.map +1 -0
  107. package/node_modules/@sema/gerador-lua/package.json +7 -0
  108. package/node_modules/@sema/gerador-python/dist/index.d.ts +6 -0
  109. package/node_modules/@sema/gerador-python/dist/index.js +729 -0
  110. package/node_modules/@sema/gerador-python/dist/index.js.map +1 -0
  111. package/node_modules/@sema/gerador-python/package.json +7 -0
  112. package/node_modules/@sema/gerador-typescript/dist/index.d.ts +6 -0
  113. package/node_modules/@sema/gerador-typescript/dist/index.js +793 -0
  114. package/node_modules/@sema/gerador-typescript/dist/index.js.map +1 -0
  115. package/node_modules/@sema/gerador-typescript/package.json +7 -0
  116. package/node_modules/@sema/nucleo/dist/ast/tipos.d.ts +123 -0
  117. package/node_modules/@sema/nucleo/dist/ast/tipos.js +2 -0
  118. package/node_modules/@sema/nucleo/dist/ast/tipos.js.map +1 -0
  119. package/node_modules/@sema/nucleo/dist/diagnosticos/index.d.ts +21 -0
  120. package/node_modules/@sema/nucleo/dist/diagnosticos/index.js +12 -0
  121. package/node_modules/@sema/nucleo/dist/diagnosticos/index.js.map +1 -0
  122. package/node_modules/@sema/nucleo/dist/formatador/index.d.ts +9 -0
  123. package/node_modules/@sema/nucleo/dist/formatador/index.js +460 -0
  124. package/node_modules/@sema/nucleo/dist/formatador/index.js.map +1 -0
  125. package/node_modules/@sema/nucleo/dist/index.d.ts +35 -0
  126. package/node_modules/@sema/nucleo/dist/index.js +96 -0
  127. package/node_modules/@sema/nucleo/dist/index.js.map +1 -0
  128. package/node_modules/@sema/nucleo/dist/ir/conversor.d.ts +5 -0
  129. package/node_modules/@sema/nucleo/dist/ir/conversor.js +877 -0
  130. package/node_modules/@sema/nucleo/dist/ir/conversor.js.map +1 -0
  131. package/node_modules/@sema/nucleo/dist/ir/modelos.d.ts +345 -0
  132. package/node_modules/@sema/nucleo/dist/ir/modelos.js +2 -0
  133. package/node_modules/@sema/nucleo/dist/ir/modelos.js.map +1 -0
  134. package/node_modules/@sema/nucleo/dist/lexer/lexer.d.ts +7 -0
  135. package/node_modules/@sema/nucleo/dist/lexer/lexer.js +122 -0
  136. package/node_modules/@sema/nucleo/dist/lexer/lexer.js.map +1 -0
  137. package/node_modules/@sema/nucleo/dist/lexer/tokens.d.ts +8 -0
  138. package/node_modules/@sema/nucleo/dist/lexer/tokens.js +61 -0
  139. package/node_modules/@sema/nucleo/dist/lexer/tokens.js.map +1 -0
  140. package/node_modules/@sema/nucleo/dist/parser/parser.d.ts +9 -0
  141. package/node_modules/@sema/nucleo/dist/parser/parser.js +767 -0
  142. package/node_modules/@sema/nucleo/dist/parser/parser.js.map +1 -0
  143. package/node_modules/@sema/nucleo/dist/persistencia/contratos.d.ts +39 -0
  144. package/node_modules/@sema/nucleo/dist/persistencia/contratos.js +294 -0
  145. package/node_modules/@sema/nucleo/dist/persistencia/contratos.js.map +1 -0
  146. package/node_modules/@sema/nucleo/dist/semantico/analisador.d.ts +59 -0
  147. package/node_modules/@sema/nucleo/dist/semantico/analisador.js +1681 -0
  148. package/node_modules/@sema/nucleo/dist/semantico/analisador.js.map +1 -0
  149. package/node_modules/@sema/nucleo/dist/semantico/estruturas.d.ts +106 -0
  150. package/node_modules/@sema/nucleo/dist/semantico/estruturas.js +475 -0
  151. package/node_modules/@sema/nucleo/dist/semantico/estruturas.js.map +1 -0
  152. package/node_modules/@sema/nucleo/dist/semantico/seguranca.d.ts +91 -0
  153. package/node_modules/@sema/nucleo/dist/semantico/seguranca.js +258 -0
  154. package/node_modules/@sema/nucleo/dist/semantico/seguranca.js.map +1 -0
  155. package/node_modules/@sema/nucleo/dist/util/arquivos.d.ts +2 -0
  156. package/node_modules/@sema/nucleo/dist/util/arquivos.js +25 -0
  157. package/node_modules/@sema/nucleo/dist/util/arquivos.js.map +1 -0
  158. package/node_modules/@sema/nucleo/package.json +7 -0
  159. package/node_modules/@sema/padroes/dist/index.d.ts +25 -0
  160. package/node_modules/@sema/padroes/dist/index.js +316 -0
  161. package/node_modules/@sema/padroes/dist/index.js.map +1 -0
  162. package/node_modules/@sema/padroes/package.json +7 -0
  163. package/package.json +32 -23
  164. package/semacode-cli-1.3.1.tgz +0 -0
  165. package/src/angular-consumer-standalone.ts +0 -312
  166. package/src/cpp-symbols.ts +0 -82
  167. package/src/docs.ts +0 -535
  168. package/src/dotnet-http.ts +0 -355
  169. package/src/drift.ts +0 -4933
  170. package/src/go-http.ts +0 -118
  171. package/src/importador.ts +0 -3891
  172. package/src/index.ts +0 -5641
  173. package/src/java-http.ts +0 -247
  174. package/src/lua-symbols.ts +0 -114
  175. package/src/php-symbols.ts +0 -462
  176. package/src/projeto.ts +0 -862
  177. package/src/python-http.ts +0 -258
  178. package/src/rust-http.ts +0 -125
  179. package/src/tipos.ts +0 -24
  180. package/src/typescript-http.ts +0 -1076
  181. package/tsconfig.json +0 -20
@@ -0,0 +1,475 @@
1
+ const CATEGORIAS_EFEITO = new Set([
2
+ "persistencia",
3
+ "consulta",
4
+ "evento",
5
+ "notificacao",
6
+ "auditoria",
7
+ "db.read",
8
+ "db.write",
9
+ "queue.publish",
10
+ "queue.consume",
11
+ "fs.read",
12
+ "fs.write",
13
+ "network.egress",
14
+ "secret.read",
15
+ "shell.exec",
16
+ ]);
17
+ const CRITICIDADES_EFEITO = new Set([
18
+ "baixa",
19
+ "media",
20
+ "alta",
21
+ "critica",
22
+ ]);
23
+ const MAPEAMENTO_EFEITOS_LEGADOS = {
24
+ grava: "persistencia",
25
+ atualiza: "persistencia",
26
+ persiste: "persistencia",
27
+ consulta: "consulta",
28
+ le: "consulta",
29
+ acessa: "consulta",
30
+ emite: "evento",
31
+ notifica: "notificacao",
32
+ envia: "notificacao",
33
+ registra: "auditoria",
34
+ audita: "auditoria",
35
+ };
36
+ const PREDICADOS_CANONICOS = {
37
+ preenchida: "preenchido",
38
+ preenchido: "preenchido",
39
+ valido: "valido",
40
+ valida: "valido",
41
+ validos: "valido",
42
+ validas: "valido",
43
+ nao_vazia: "nao_vazio",
44
+ nao_vazio: "nao_vazio",
45
+ email_valida: "email_valido",
46
+ email_valido: "email_valido",
47
+ numero_valida: "numero_valido",
48
+ numero_valido: "numero_valido",
49
+ positiva: "positivo",
50
+ positivo: "positivo",
51
+ unico: "unico",
52
+ unica: "unico",
53
+ anterior_a: "anterior_a",
54
+ posterior_a: "posterior_a",
55
+ nao_expirada: "nao_expirado",
56
+ nao_expirado: "nao_expirado",
57
+ };
58
+ export function normalizarPredicadoSemantico(predicado) {
59
+ const normalizado = predicado.trim().toLowerCase();
60
+ return PREDICADOS_CANONICOS[normalizado] ?? normalizado;
61
+ }
62
+ const PRIVILEGIOS_EFEITO = new Set([
63
+ "leitura",
64
+ "escrita",
65
+ "publicacao",
66
+ "execucao",
67
+ "admin",
68
+ "egress",
69
+ ]);
70
+ const ISOLAMENTOS_EFEITO = new Set([
71
+ "tenant",
72
+ "processo",
73
+ "host",
74
+ "vps",
75
+ "global",
76
+ ]);
77
+ const OPERADORES_COMPARACAO = new Set(["==", "!=", ">", ">=", "<", "<="]);
78
+ function removerParentesesExternos(texto) {
79
+ let atual = texto.trim();
80
+ while (atual.startsWith("(") && atual.endsWith(")")) {
81
+ let profundidade = 0;
82
+ let removeu = true;
83
+ for (let indice = 0; indice < atual.length; indice += 1) {
84
+ const caractere = atual[indice];
85
+ if (caractere === "(") {
86
+ profundidade += 1;
87
+ }
88
+ else if (caractere === ")") {
89
+ profundidade -= 1;
90
+ if (profundidade === 0 && indice < atual.length - 1) {
91
+ removeu = false;
92
+ break;
93
+ }
94
+ }
95
+ }
96
+ if (!removeu) {
97
+ break;
98
+ }
99
+ atual = atual.slice(1, -1).trim();
100
+ }
101
+ return atual;
102
+ }
103
+ function dividirNoNivelRaiz(texto, operador) {
104
+ const partes = [];
105
+ let profundidade = 0;
106
+ let inicio = 0;
107
+ for (let indice = 0; indice < texto.length; indice += 1) {
108
+ const caractere = texto[indice];
109
+ if (caractere === "(") {
110
+ profundidade += 1;
111
+ continue;
112
+ }
113
+ if (caractere === ")") {
114
+ profundidade -= 1;
115
+ continue;
116
+ }
117
+ if (profundidade === 0 && texto.slice(indice, indice + operador.length) === operador) {
118
+ partes.push(texto.slice(inicio, indice).trim());
119
+ inicio = indice + operador.length;
120
+ indice += operador.length - 1;
121
+ }
122
+ }
123
+ const ultimaParte = texto.slice(inicio).trim();
124
+ if (ultimaParte) {
125
+ partes.push(ultimaParte);
126
+ }
127
+ return partes;
128
+ }
129
+ function criarComparacaoDerivada(base, valor) {
130
+ const valorNormalizado = removerParentesesExternos(valor.trim());
131
+ if (!valorNormalizado) {
132
+ return undefined;
133
+ }
134
+ return {
135
+ tipo: "comparacao",
136
+ textoOriginal: `${base.alvo} ${base.operador} ${valorNormalizado}`,
137
+ alvo: base.alvo,
138
+ operador: base.operador,
139
+ valor: valorNormalizado,
140
+ valorLiteral: ehValorLiteralSemantico(valorNormalizado),
141
+ };
142
+ }
143
+ export function parsearExpressaoSemantica(texto) {
144
+ const normalizado = removerParentesesExternos(texto.trim());
145
+ if (!normalizado) {
146
+ return undefined;
147
+ }
148
+ const partesOu = dividirNoNivelRaiz(normalizado, " ou ");
149
+ if (partesOu.length > 1) {
150
+ const termos = [];
151
+ let comparacaoBase;
152
+ let usouAtalhoComparacao = false;
153
+ for (const parte of partesOu) {
154
+ const termo = parsearExpressaoSemantica(parte);
155
+ if (termo) {
156
+ termos.push(termo);
157
+ if (termo.tipo === "comparacao" && (termo.operador === "==" || termo.operador === "!=")) {
158
+ comparacaoBase = termo;
159
+ }
160
+ continue;
161
+ }
162
+ if (comparacaoBase) {
163
+ const derivada = criarComparacaoDerivada(comparacaoBase, parte);
164
+ if (derivada) {
165
+ comparacaoBase.valorLiteral = true;
166
+ usouAtalhoComparacao = true;
167
+ termos.push(derivada);
168
+ continue;
169
+ }
170
+ }
171
+ return undefined;
172
+ }
173
+ if (usouAtalhoComparacao) {
174
+ for (const termo of termos) {
175
+ if (termo.tipo === "comparacao" && termo.alvo === comparacaoBase?.alvo && termo.operador === comparacaoBase?.operador) {
176
+ termo.valorLiteral = true;
177
+ }
178
+ }
179
+ }
180
+ return { tipo: "composta", textoOriginal: normalizado, operadorLogico: "ou", termos };
181
+ }
182
+ const partesE = dividirNoNivelRaiz(normalizado, " e ");
183
+ if (partesE.length > 1) {
184
+ const termos = partesE.map((parte) => parsearExpressaoSemantica(parte)).filter((parte) => Boolean(parte));
185
+ return termos.length === partesE.length
186
+ ? { tipo: "composta", textoOriginal: normalizado, operadorLogico: "e", termos }
187
+ : undefined;
188
+ }
189
+ if (normalizado.startsWith("nao ")) {
190
+ const termo = parsearExpressaoSemantica(normalizado.slice("nao ".length).trim());
191
+ return termo
192
+ ? { tipo: "negacao", textoOriginal: normalizado, termo }
193
+ : undefined;
194
+ }
195
+ const correspondenciaMarcador = normalizado.match(/^(persistencia|estado|sucesso)\s+([A-Za-z_][A-Za-z0-9_]*)$/);
196
+ if (correspondenciaMarcador) {
197
+ const predicado = correspondenciaMarcador[2];
198
+ return {
199
+ tipo: "predicado",
200
+ textoOriginal: normalizado,
201
+ alvo: correspondenciaMarcador[1],
202
+ predicado,
203
+ predicadoCanonico: normalizarPredicadoSemantico(predicado),
204
+ };
205
+ }
206
+ const correspondenciaExiste = normalizado.match(/^([A-Za-z_][A-Za-z0-9_.]*)\s+existe$/);
207
+ if (correspondenciaExiste) {
208
+ return {
209
+ tipo: "existe",
210
+ textoOriginal: normalizado,
211
+ alvo: correspondenciaExiste[1],
212
+ };
213
+ }
214
+ const correspondenciaPredicado = normalizado.match(/^([A-Za-z_][A-Za-z0-9_.]*)\s+deve_ser\s+([A-Za-z_][A-Za-z0-9_]*)(?:\s+(.+))?$/);
215
+ if (correspondenciaPredicado) {
216
+ const predicado = correspondenciaPredicado[2];
217
+ return {
218
+ tipo: "predicado",
219
+ textoOriginal: normalizado,
220
+ alvo: correspondenciaPredicado[1],
221
+ predicado,
222
+ predicadoCanonico: normalizarPredicadoSemantico(predicado),
223
+ argumentos: correspondenciaPredicado[3]?.trim(),
224
+ };
225
+ }
226
+ const correspondenciaPertencimento = normalizado.match(/^([A-Za-z_][A-Za-z0-9_.]*)\s+em\s+\[(.+)\]$/);
227
+ if (correspondenciaPertencimento) {
228
+ const valores = correspondenciaPertencimento[2]
229
+ .split(",")
230
+ .map((valor) => valor.trim())
231
+ .filter(Boolean);
232
+ if (valores.length === 0) {
233
+ return undefined;
234
+ }
235
+ return {
236
+ tipo: "pertencimento",
237
+ textoOriginal: normalizado,
238
+ alvo: correspondenciaPertencimento[1],
239
+ valores,
240
+ };
241
+ }
242
+ const partes = normalizado.split(/\s+/).filter(Boolean);
243
+ if (partes.length >= 3 && OPERADORES_COMPARACAO.has(partes[1])) {
244
+ const valorComparacao = partes.slice(2).join(" ");
245
+ return {
246
+ tipo: "comparacao",
247
+ textoOriginal: normalizado,
248
+ alvo: partes[0],
249
+ operador: partes[1],
250
+ valor: valorComparacao,
251
+ valorLiteral: ehValorLiteralSemantico(valorComparacao),
252
+ };
253
+ }
254
+ return undefined;
255
+ }
256
+ export function parsearEfeitoSemantico(texto) {
257
+ const normalizado = texto.trim();
258
+ if (!normalizado) {
259
+ return undefined;
260
+ }
261
+ const partes = normalizado.split(/\s+/).filter(Boolean);
262
+ if (partes.length < 2) {
263
+ return undefined;
264
+ }
265
+ const partesSemCriticidade = [...partes];
266
+ let criticidadeTexto;
267
+ let privilegioTexto;
268
+ let isolamentoTexto;
269
+ const extrairQualificador = (nome) => {
270
+ const indiceInline = partesSemCriticidade.findIndex((parte) => parte.startsWith(`${nome}=`));
271
+ if (indiceInline !== -1) {
272
+ const valor = partesSemCriticidade[indiceInline].slice(`${nome}=`.length).trim();
273
+ partesSemCriticidade.splice(indiceInline, 1);
274
+ return valor;
275
+ }
276
+ const indiceSeparado = partesSemCriticidade.findIndex((parte) => parte === nome);
277
+ if (indiceSeparado !== -1
278
+ && partesSemCriticidade[indiceSeparado + 1] === "="
279
+ && partesSemCriticidade[indiceSeparado + 2]) {
280
+ const valor = partesSemCriticidade[indiceSeparado + 2].trim();
281
+ partesSemCriticidade.splice(indiceSeparado, 3);
282
+ return valor;
283
+ }
284
+ return undefined;
285
+ };
286
+ criticidadeTexto = extrairQualificador("criticidade");
287
+ privilegioTexto = extrairQualificador("privilegio");
288
+ isolamentoTexto = extrairQualificador("isolamento");
289
+ if (partesSemCriticidade.length < 2) {
290
+ return undefined;
291
+ }
292
+ const categoriaNormalizada = partesSemCriticidade[0];
293
+ const criticidade = criticidadeTexto && CRITICIDADES_EFEITO.has(criticidadeTexto)
294
+ ? criticidadeTexto
295
+ : undefined;
296
+ const privilegio = privilegioTexto && PRIVILEGIOS_EFEITO.has(privilegioTexto)
297
+ ? privilegioTexto
298
+ : undefined;
299
+ const isolamento = isolamentoTexto && ISOLAMENTOS_EFEITO.has(isolamentoTexto)
300
+ ? isolamentoTexto
301
+ : undefined;
302
+ if (CATEGORIAS_EFEITO.has(categoriaNormalizada)) {
303
+ return {
304
+ textoOriginal: normalizado,
305
+ categoria: categoriaNormalizada,
306
+ alvo: partesSemCriticidade[1],
307
+ detalhe: partesSemCriticidade.slice(2).join(" ").trim() || undefined,
308
+ criticidade,
309
+ criticidadeTexto,
310
+ privilegio,
311
+ privilegioTexto,
312
+ isolamento,
313
+ isolamentoTexto,
314
+ };
315
+ }
316
+ const categoriaLegada = MAPEAMENTO_EFEITOS_LEGADOS[partesSemCriticidade[0].toLowerCase()];
317
+ if (categoriaLegada) {
318
+ return {
319
+ textoOriginal: normalizado,
320
+ categoria: categoriaLegada,
321
+ alvo: partesSemCriticidade[1],
322
+ detalhe: partesSemCriticidade.slice(2).join(" ").trim() || undefined,
323
+ criticidade,
324
+ criticidadeTexto,
325
+ privilegio,
326
+ privilegioTexto,
327
+ isolamento,
328
+ isolamentoTexto,
329
+ };
330
+ }
331
+ return {
332
+ textoOriginal: normalizado,
333
+ categoria: partesSemCriticidade[0],
334
+ alvo: partesSemCriticidade[1],
335
+ detalhe: partesSemCriticidade.slice(2).join(" ").trim() || undefined,
336
+ criticidade,
337
+ criticidadeTexto,
338
+ privilegio,
339
+ privilegioTexto,
340
+ isolamento,
341
+ isolamentoTexto,
342
+ };
343
+ }
344
+ export function parsearTransicaoEstado(texto) {
345
+ const normalizado = texto.trim();
346
+ if (!normalizado) {
347
+ return undefined;
348
+ }
349
+ const correspondencia = normalizado.match(/^([A-Za-z_][A-Za-z0-9_.]*)\s*->\s*([A-Za-z_][A-Za-z0-9_.]*)$/);
350
+ if (!correspondencia) {
351
+ return undefined;
352
+ }
353
+ return {
354
+ textoOriginal: normalizado,
355
+ origem: correspondencia[1],
356
+ destino: correspondencia[2],
357
+ };
358
+ }
359
+ export function parsearEtapaFlow(texto) {
360
+ const normalizado = texto.trim();
361
+ if (!normalizado.startsWith("etapa ")) {
362
+ return undefined;
363
+ }
364
+ const semPrefixo = normalizado.slice("etapa ".length).trim();
365
+ const nome = semPrefixo.split(/\s+/)[0];
366
+ if (!nome) {
367
+ return undefined;
368
+ }
369
+ const resto = semPrefixo.slice(nome.length).trim();
370
+ const task = resto.match(/\busa\s+([A-Za-z_][A-Za-z0-9_.]*)/)?.[1];
371
+ const comTexto = resto.match(/\bcom\s+(.+?)(?=\s+(quando|depende_de|em_sucesso|em_erro|por_erro)\b|$)/)?.[1];
372
+ const dependenciasTexto = resto.match(/\bdepende_de\s+(.+?)(?=\s+(quando|com|em_sucesso|em_erro|por_erro)\b|$)/)?.[1];
373
+ const dependencias = dependenciasTexto
374
+ ? dependenciasTexto.split(",").map((parte) => parte.trim()).filter(Boolean)
375
+ : [];
376
+ const emSucesso = resto.match(/\bem_sucesso\s+([A-Za-z_][A-Za-z0-9_]*)/)?.[1];
377
+ const emErro = resto.match(/\bem_erro\s+([A-Za-z_][A-Za-z0-9_]*)/)?.[1];
378
+ const porErroTexto = resto.match(/\bpor_erro\s+(.+?)(?=\s+(quando|depende_de|em_sucesso|em_erro)\b|$)/)?.[1];
379
+ const mapeamentos = (comTexto
380
+ ? comTexto.split(",").map((parte) => parte.trim()).filter(Boolean)
381
+ : [])
382
+ .map((parte) => {
383
+ const [campo, ...restoValor] = parte.split("=");
384
+ return {
385
+ campo: campo?.trim() ?? "",
386
+ valor: restoValor.join("=").trim(),
387
+ };
388
+ })
389
+ .filter((item) => item.campo && item.valor);
390
+ const porErro = (porErroTexto
391
+ ? porErroTexto.split(",").map((parte) => parte.trim()).filter(Boolean)
392
+ : [])
393
+ .map((parte) => {
394
+ const [tipo, ...restoDestino] = parte.split("=");
395
+ return {
396
+ tipo: tipo?.trim() ?? "",
397
+ destino: restoDestino.join("=").trim(),
398
+ };
399
+ })
400
+ .filter((item) => item.tipo && item.destino);
401
+ const indiceQuando = resto.indexOf(" quando ");
402
+ const indicesTerminoCondicao = [
403
+ resto.indexOf(" depende_de "),
404
+ resto.indexOf(" em_sucesso "),
405
+ resto.indexOf(" em_erro "),
406
+ resto.indexOf(" por_erro "),
407
+ ].filter((indice) => indice !== -1 && indice > indiceQuando);
408
+ let condicao;
409
+ if (indiceQuando !== -1) {
410
+ const fimCondicao = indicesTerminoCondicao.length > 0 ? Math.min(...indicesTerminoCondicao) : resto.length;
411
+ const textoCondicao = resto.slice(indiceQuando + " quando ".length, fimCondicao).trim();
412
+ condicao = parsearExpressaoSemantica(textoCondicao);
413
+ }
414
+ return {
415
+ textoOriginal: normalizado,
416
+ nome,
417
+ task,
418
+ condicao,
419
+ dependencias,
420
+ mapeamentos,
421
+ emSucesso,
422
+ emErro,
423
+ porErro,
424
+ };
425
+ }
426
+ export function extrairReferenciasDaExpressao(expressao) {
427
+ if (expressao.tipo === "composta") {
428
+ return expressao.termos.flatMap(extrairReferenciasDaExpressao);
429
+ }
430
+ if (expressao.tipo === "negacao") {
431
+ return extrairReferenciasDaExpressao(expressao.termo);
432
+ }
433
+ const referencias = [expressao.alvo];
434
+ if (expressao.tipo === "comparacao"
435
+ && expressao.valor
436
+ && !expressao.valorLiteral
437
+ && pareceReferenciaSemantica(expressao.valor)) {
438
+ referencias.push(expressao.valor);
439
+ }
440
+ return referencias;
441
+ }
442
+ export function pareceReferenciaSemantica(valor) {
443
+ const normalizado = valor.trim();
444
+ if (!normalizado) {
445
+ return false;
446
+ }
447
+ if (ehValorLiteralSemantico(normalizado)) {
448
+ return false;
449
+ }
450
+ return /^[A-Za-z_][A-Za-z0-9_.]*$/.test(normalizado);
451
+ }
452
+ function ehValorLiteralSemantico(valor) {
453
+ const normalizado = valor.trim();
454
+ if (!normalizado) {
455
+ return false;
456
+ }
457
+ if ((normalizado.startsWith("\"") && normalizado.endsWith("\""))
458
+ || (normalizado.startsWith("'") && normalizado.endsWith("'"))) {
459
+ return true;
460
+ }
461
+ if (/^-?\d+(?:\.\d+)?$/.test(normalizado)) {
462
+ return true;
463
+ }
464
+ if (["verdadeiro", "falso", "nulo"].includes(normalizado)) {
465
+ return true;
466
+ }
467
+ return /^[A-Z][A-Z0-9_]*$/.test(normalizado);
468
+ }
469
+ export function ehCategoriaEfeitoSemantico(valor) {
470
+ return CATEGORIAS_EFEITO.has(valor);
471
+ }
472
+ export function ehCriticidadeEfeitoSemantico(valor) {
473
+ return CRITICIDADES_EFEITO.has(valor);
474
+ }
475
+ //# sourceMappingURL=estruturas.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"estruturas.js","sourceRoot":"","sources":["../../src/semantico/estruturas.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,91 @@
1
+ import type { BlocoGenericoAst } from "../ast/tipos.js";
2
+ export type ModoAuthSemantico = "obrigatorio" | "opcional" | "anonimo" | "interno" | "m2m";
3
+ export type PrincipalAuthSemantico = "usuario" | "servico" | "sistema" | "anonimo";
4
+ export type OrigemAuthSemantica = "publica" | "interna" | "worker" | "webhook" | "fila" | "cron";
5
+ export type TenantAuthzSemantico = "obrigatorio" | "opcional" | "isolado";
6
+ export type ClassificacaoDadoSemantico = "publico" | "interno" | "pii" | "financeiro" | "credencial" | "segredo";
7
+ export type RedacaoLogSemantica = "livre" | "parcial" | "obrigatoria" | "proibida";
8
+ export type MotivoAuditSemantico = "obrigatorio" | "opcional" | "dispensado";
9
+ export type PrivilegioEfeitoSemantico = "leitura" | "escrita" | "publicacao" | "execucao" | "admin" | "egress";
10
+ export type IsolamentoEfeitoSemantico = "tenant" | "processo" | "host" | "vps" | "global";
11
+ export interface ContratoAuthSemantico {
12
+ explicita: boolean;
13
+ modo?: string;
14
+ estrategia?: string;
15
+ principal?: string;
16
+ origem?: string;
17
+ }
18
+ export interface ContratoAuthzSemantico {
19
+ explicita: boolean;
20
+ papeis: string[];
21
+ escopos: string[];
22
+ politica?: string;
23
+ tenant?: string;
24
+ }
25
+ export interface CampoDadoSemantico {
26
+ origem: string;
27
+ campo: string;
28
+ classificacao: string;
29
+ }
30
+ export interface ContratoDadosSemantico {
31
+ explicita: boolean;
32
+ classificacaoPadrao?: string;
33
+ redacaoLog?: string;
34
+ retencao?: string;
35
+ campos: CampoDadoSemantico[];
36
+ }
37
+ export interface ContratoAuditSemantico {
38
+ explicita: boolean;
39
+ evento?: string;
40
+ ator?: string;
41
+ correlacao?: string;
42
+ retencao?: string;
43
+ motivo?: string;
44
+ }
45
+ export interface SegredoSemantico {
46
+ nome: string;
47
+ origem?: string;
48
+ escopo?: string;
49
+ acesso?: string;
50
+ rotacao?: string;
51
+ naoLogar?: boolean;
52
+ naoRetornar?: boolean;
53
+ mascarar?: boolean;
54
+ }
55
+ export interface ContratoSegredosSemantico {
56
+ explicita: boolean;
57
+ itens: SegredoSemantico[];
58
+ }
59
+ export interface ContratoForbiddenSemantico {
60
+ explicita: boolean;
61
+ regras: string[];
62
+ }
63
+ export declare const MODOS_AUTH_SUPORTADOS: Set<ModoAuthSemantico>;
64
+ export declare const PRINCIPAIS_AUTH_SUPORTADOS: Set<PrincipalAuthSemantico>;
65
+ export declare const ORIGENS_AUTH_SUPORTADAS: Set<OrigemAuthSemantica>;
66
+ export declare const TENANTS_AUTHZ_SUPORTADOS: Set<TenantAuthzSemantico>;
67
+ export declare const CLASSIFICACOES_DADO_SUPORTADAS: Set<ClassificacaoDadoSemantico>;
68
+ export declare const CLASSIFICACOES_DADO_SENSIVEIS: Set<ClassificacaoDadoSemantico>;
69
+ export declare const REDACOES_LOG_SUPORTADAS: Set<RedacaoLogSemantica>;
70
+ export declare const MOTIVOS_AUDIT_SUPORTADOS: Set<MotivoAuditSemantico>;
71
+ export declare const PRIVILEGIOS_EFEITO_SUPORTADOS: Set<PrivilegioEfeitoSemantico>;
72
+ export declare const ISOLAMENTOS_EFEITO_SUPORTADOS: Set<IsolamentoEfeitoSemantico>;
73
+ export declare const CATEGORIAS_EFEITO_PRIVILEGIADAS: Set<string>;
74
+ export declare function extrairContratoAuth(bloco?: BlocoGenericoAst): ContratoAuthSemantico;
75
+ export declare function extrairContratoAuthz(bloco?: BlocoGenericoAst): ContratoAuthzSemantico;
76
+ export declare function extrairContratoDados(bloco?: BlocoGenericoAst): ContratoDadosSemantico;
77
+ export declare function extrairContratoAudit(bloco?: BlocoGenericoAst): ContratoAuditSemantico;
78
+ export declare function extrairContratoSegredos(bloco?: BlocoGenericoAst): ContratoSegredosSemantico;
79
+ export declare function extrairContratoForbidden(bloco?: BlocoGenericoAst): ContratoForbiddenSemantico;
80
+ export declare function classificacaoEhSensivel(classificacao?: string): boolean;
81
+ export declare function contratoDadosTemSensivel(contrato?: ContratoDadosSemantico): boolean;
82
+ export declare function contratoDadosTemSegredoOuCredencial(contrato?: ContratoDadosSemantico): boolean;
83
+ export declare function efeitoEhPrivilegiado(efeito: {
84
+ categoria: string;
85
+ criticidade?: string;
86
+ privilegio?: string;
87
+ }): boolean;
88
+ export declare function efeitoRequerSegredo(efeito: {
89
+ categoria: string;
90
+ }): boolean;
91
+ export declare function forbiddenContemRegra(forbidden: ContratoForbiddenSemantico | undefined, regra: string): boolean;