@semacode/cli 1.3.5 → 1.3.6

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 (157) hide show
  1. package/dist/cpp-symbols.d.ts +10 -0
  2. package/dist/cpp-symbols.js.map +1 -0
  3. package/dist/dotnet-http.d.ts +23 -0
  4. package/dist/dotnet-http.js.map +1 -0
  5. package/dist/drift.d.ts +118 -0
  6. package/dist/drift.js.map +1 -0
  7. package/dist/go-http.d.ts +23 -0
  8. package/dist/go-http.js.map +1 -0
  9. package/dist/importador.d.ts +29 -0
  10. package/dist/importador.js.map +1 -0
  11. package/dist/index.d.ts +2 -0
  12. package/dist/index.js.map +1 -0
  13. package/dist/java-http.d.ts +23 -0
  14. package/dist/java-http.js.map +1 -0
  15. package/dist/lua-symbols.d.ts +8 -0
  16. package/dist/lua-symbols.js.map +1 -0
  17. package/dist/projeto.d.ts +48 -0
  18. package/dist/projeto.js.map +1 -0
  19. package/dist/python-http.d.ts +23 -0
  20. package/dist/python-http.js.map +1 -0
  21. package/dist/rust-http.d.ts +23 -0
  22. package/dist/rust-http.js.map +1 -0
  23. package/dist/tipos.d.ts +3 -0
  24. package/dist/tipos.js.map +1 -0
  25. package/dist/typescript-http.d.ts +35 -0
  26. package/dist/typescript-http.js.map +1 -0
  27. package/node_modules/@sema/gerador-css/dist/index.d.ts +3 -0
  28. package/node_modules/@sema/gerador-css/dist/index.js +592 -0
  29. package/node_modules/@sema/gerador-css/dist/index.js.map +1 -0
  30. package/node_modules/@sema/gerador-css/package.json +14 -0
  31. package/node_modules/@sema/gerador-css/src/index.ts +605 -0
  32. package/node_modules/@sema/gerador-css/tsconfig.json +13 -0
  33. package/node_modules/@sema/gerador-css/tsconfig.tsbuildinfo +1 -0
  34. package/node_modules/@sema/gerador-dart/dist/index.d.ts +3 -0
  35. package/node_modules/@sema/gerador-dart/dist/index.js +44 -0
  36. package/node_modules/@sema/gerador-dart/dist/index.js.map +1 -0
  37. package/node_modules/@sema/gerador-dart/package.json +14 -0
  38. package/node_modules/@sema/gerador-dart/src/index.ts +52 -0
  39. package/node_modules/@sema/gerador-dart/tsconfig.json +13 -0
  40. package/node_modules/@sema/gerador-dart/tsconfig.tsbuildinfo +1 -0
  41. package/node_modules/@sema/gerador-html/dist/index.d.ts +3 -0
  42. package/node_modules/@sema/gerador-html/dist/index.js +163 -0
  43. package/node_modules/@sema/gerador-html/dist/index.js.map +1 -0
  44. package/node_modules/@sema/gerador-html/package.json +14 -0
  45. package/node_modules/@sema/gerador-html/src/index.ts +185 -0
  46. package/node_modules/@sema/gerador-html/tsconfig.json +13 -0
  47. package/node_modules/@sema/gerador-html/tsconfig.tsbuildinfo +1 -0
  48. package/node_modules/@sema/gerador-javascript/dist/index.d.ts +3 -0
  49. package/node_modules/@sema/gerador-javascript/dist/index.js +421 -0
  50. package/node_modules/@sema/gerador-javascript/dist/index.js.map +1 -0
  51. package/node_modules/@sema/gerador-javascript/package.json +14 -0
  52. package/node_modules/@sema/gerador-javascript/src/index.ts +461 -0
  53. package/node_modules/@sema/gerador-javascript/tsconfig.json +13 -0
  54. package/node_modules/@sema/gerador-javascript/tsconfig.tsbuildinfo +1 -0
  55. package/node_modules/@sema/gerador-lua/dist/index.d.ts +3 -0
  56. package/node_modules/@sema/gerador-lua/dist/index.js +328 -0
  57. package/node_modules/@sema/gerador-lua/dist/index.js.map +1 -0
  58. package/node_modules/@sema/gerador-lua/package.json +14 -0
  59. package/node_modules/@sema/gerador-lua/src/index.d.ts +3 -0
  60. package/node_modules/@sema/gerador-lua/src/index.js.map +1 -0
  61. package/node_modules/@sema/gerador-lua/src/index.ts +359 -0
  62. package/node_modules/@sema/gerador-lua/tsconfig.json +13 -0
  63. package/node_modules/@sema/gerador-lua/tsconfig.tsbuildinfo +1 -0
  64. package/node_modules/@sema/gerador-python/dist/index.d.ts +6 -0
  65. package/node_modules/@sema/gerador-python/dist/index.js +628 -0
  66. package/node_modules/@sema/gerador-python/dist/index.js.map +1 -0
  67. package/node_modules/@sema/gerador-python/package.json +14 -0
  68. package/node_modules/@sema/gerador-python/src/index.ts +706 -0
  69. package/node_modules/@sema/gerador-python/tsconfig.json +13 -0
  70. package/node_modules/@sema/gerador-python/tsconfig.tsbuildinfo +1 -0
  71. package/node_modules/@sema/gerador-typescript/dist/index.d.ts +6 -0
  72. package/node_modules/@sema/gerador-typescript/dist/index.js +656 -0
  73. package/node_modules/@sema/gerador-typescript/dist/index.js.map +1 -0
  74. package/node_modules/@sema/gerador-typescript/package.json +14 -0
  75. package/node_modules/@sema/gerador-typescript/src/index.ts +728 -0
  76. package/node_modules/@sema/gerador-typescript/tsconfig.json +13 -0
  77. package/node_modules/@sema/gerador-typescript/tsconfig.tsbuildinfo +1 -0
  78. package/node_modules/@sema/nucleo/dist/ast/tipos.d.ts +122 -0
  79. package/node_modules/@sema/nucleo/dist/ast/tipos.js +2 -0
  80. package/node_modules/@sema/nucleo/dist/ast/tipos.js.map +1 -0
  81. package/node_modules/@sema/nucleo/dist/diagnosticos/index.d.ts +21 -0
  82. package/node_modules/@sema/nucleo/dist/diagnosticos/index.js +12 -0
  83. package/node_modules/@sema/nucleo/dist/diagnosticos/index.js.map +1 -0
  84. package/node_modules/@sema/nucleo/dist/formatador/index.d.ts +9 -0
  85. package/node_modules/@sema/nucleo/dist/formatador/index.js +445 -0
  86. package/node_modules/@sema/nucleo/dist/formatador/index.js.map +1 -0
  87. package/node_modules/@sema/nucleo/dist/index.d.ts +34 -0
  88. package/node_modules/@sema/nucleo/dist/index.js +95 -0
  89. package/node_modules/@sema/nucleo/dist/index.js.map +1 -0
  90. package/node_modules/@sema/nucleo/dist/ir/conversor.d.ts +5 -0
  91. package/node_modules/@sema/nucleo/dist/ir/conversor.js +781 -0
  92. package/node_modules/@sema/nucleo/dist/ir/conversor.js.map +1 -0
  93. package/node_modules/@sema/nucleo/dist/ir/modelos.d.ts +285 -0
  94. package/node_modules/@sema/nucleo/dist/ir/modelos.js +2 -0
  95. package/node_modules/@sema/nucleo/dist/ir/modelos.js.map +1 -0
  96. package/node_modules/@sema/nucleo/dist/lexer/lexer.d.ts +7 -0
  97. package/node_modules/@sema/nucleo/dist/lexer/lexer.js +122 -0
  98. package/node_modules/@sema/nucleo/dist/lexer/lexer.js.map +1 -0
  99. package/node_modules/@sema/nucleo/dist/lexer/tokens.d.ts +8 -0
  100. package/node_modules/@sema/nucleo/dist/lexer/tokens.js +46 -0
  101. package/node_modules/@sema/nucleo/dist/lexer/tokens.js.map +1 -0
  102. package/node_modules/@sema/nucleo/dist/parser/parser.d.ts +9 -0
  103. package/node_modules/@sema/nucleo/dist/parser/parser.js +656 -0
  104. package/node_modules/@sema/nucleo/dist/parser/parser.js.map +1 -0
  105. package/node_modules/@sema/nucleo/dist/semantico/analisador.d.ts +57 -0
  106. package/node_modules/@sema/nucleo/dist/semantico/analisador.js +1497 -0
  107. package/node_modules/@sema/nucleo/dist/semantico/analisador.js.map +1 -0
  108. package/node_modules/@sema/nucleo/dist/semantico/estruturas.d.ts +104 -0
  109. package/node_modules/@sema/nucleo/dist/semantico/estruturas.js +445 -0
  110. package/node_modules/@sema/nucleo/dist/semantico/estruturas.js.map +1 -0
  111. package/node_modules/@sema/nucleo/dist/semantico/seguranca.d.ts +91 -0
  112. package/node_modules/@sema/nucleo/dist/semantico/seguranca.js +258 -0
  113. package/node_modules/@sema/nucleo/dist/semantico/seguranca.js.map +1 -0
  114. package/node_modules/@sema/nucleo/dist/util/arquivos.d.ts +2 -0
  115. package/node_modules/@sema/nucleo/dist/util/arquivos.js +25 -0
  116. package/node_modules/@sema/nucleo/dist/util/arquivos.js.map +1 -0
  117. package/node_modules/@sema/nucleo/package.json +10 -0
  118. package/node_modules/@sema/nucleo/src/ast/tipos.ts +191 -0
  119. package/node_modules/@sema/nucleo/src/diagnosticos/index.ts +43 -0
  120. package/node_modules/@sema/nucleo/src/formatador/index.ts +507 -0
  121. package/node_modules/@sema/nucleo/src/index.ts +133 -0
  122. package/node_modules/@sema/nucleo/src/ir/conversor.ts +912 -0
  123. package/node_modules/@sema/nucleo/src/ir/modelos.ts +331 -0
  124. package/node_modules/@sema/nucleo/src/lexer/lexer.ts +166 -0
  125. package/node_modules/@sema/nucleo/src/lexer/tokens.ts +64 -0
  126. package/node_modules/@sema/nucleo/src/parser/gramatica.ebnf +39 -0
  127. package/node_modules/@sema/nucleo/src/parser/parser.ts +790 -0
  128. package/node_modules/@sema/nucleo/src/semantico/analisador.ts +2692 -0
  129. package/node_modules/@sema/nucleo/src/semantico/estruturas.ts +632 -0
  130. package/node_modules/@sema/nucleo/src/semantico/seguranca.ts +362 -0
  131. package/node_modules/@sema/nucleo/src/util/arquivos.ts +28 -0
  132. package/node_modules/@sema/nucleo/tsconfig.json +9 -0
  133. package/node_modules/@sema/nucleo/tsconfig.tsbuildinfo +1 -0
  134. package/node_modules/@sema/padroes/dist/index.d.ts +23 -0
  135. package/node_modules/@sema/padroes/dist/index.js +210 -0
  136. package/node_modules/@sema/padroes/dist/index.js.map +1 -0
  137. package/node_modules/@sema/padroes/package.json +10 -0
  138. package/node_modules/@sema/padroes/src/index.ts +251 -0
  139. package/node_modules/@sema/padroes/tsconfig.json +9 -0
  140. package/node_modules/@sema/padroes/tsconfig.tsbuildinfo +1 -0
  141. package/package.json +1 -1
  142. package/README.md +0 -73
  143. package/logo.png +0 -0
  144. package/semacode-cli-1.3.1.tgz +0 -0
  145. package/src/cpp-symbols.ts +0 -82
  146. package/src/dotnet-http.ts +0 -355
  147. package/src/drift.ts +0 -2455
  148. package/src/go-http.ts +0 -118
  149. package/src/importador.ts +0 -3448
  150. package/src/index.ts +0 -4476
  151. package/src/java-http.ts +0 -247
  152. package/src/projeto.ts +0 -810
  153. package/src/python-http.ts +0 -258
  154. package/src/rust-http.ts +0 -125
  155. package/src/tipos.ts +0 -22
  156. package/src/typescript-http.ts +0 -1076
  157. package/tsconfig.json +0 -20
@@ -0,0 +1,258 @@
1
+ export const MODOS_AUTH_SUPORTADOS = new Set([
2
+ "obrigatorio",
3
+ "opcional",
4
+ "anonimo",
5
+ "interno",
6
+ "m2m",
7
+ ]);
8
+ export const PRINCIPAIS_AUTH_SUPORTADOS = new Set([
9
+ "usuario",
10
+ "servico",
11
+ "sistema",
12
+ "anonimo",
13
+ ]);
14
+ export const ORIGENS_AUTH_SUPORTADAS = new Set([
15
+ "publica",
16
+ "interna",
17
+ "worker",
18
+ "webhook",
19
+ "fila",
20
+ "cron",
21
+ ]);
22
+ export const TENANTS_AUTHZ_SUPORTADOS = new Set([
23
+ "obrigatorio",
24
+ "opcional",
25
+ "isolado",
26
+ ]);
27
+ export const CLASSIFICACOES_DADO_SUPORTADAS = new Set([
28
+ "publico",
29
+ "interno",
30
+ "pii",
31
+ "financeiro",
32
+ "credencial",
33
+ "segredo",
34
+ ]);
35
+ export const CLASSIFICACOES_DADO_SENSIVEIS = new Set([
36
+ "pii",
37
+ "financeiro",
38
+ "credencial",
39
+ "segredo",
40
+ ]);
41
+ export const REDACOES_LOG_SUPORTADAS = new Set([
42
+ "livre",
43
+ "parcial",
44
+ "obrigatoria",
45
+ "proibida",
46
+ ]);
47
+ export const MOTIVOS_AUDIT_SUPORTADOS = new Set([
48
+ "obrigatorio",
49
+ "opcional",
50
+ "dispensado",
51
+ ]);
52
+ export const PRIVILEGIOS_EFEITO_SUPORTADOS = new Set([
53
+ "leitura",
54
+ "escrita",
55
+ "publicacao",
56
+ "execucao",
57
+ "admin",
58
+ "egress",
59
+ ]);
60
+ export const ISOLAMENTOS_EFEITO_SUPORTADOS = new Set([
61
+ "tenant",
62
+ "processo",
63
+ "host",
64
+ "vps",
65
+ "global",
66
+ ]);
67
+ export const CATEGORIAS_EFEITO_PRIVILEGIADAS = new Set([
68
+ "db.read",
69
+ "db.write",
70
+ "queue.publish",
71
+ "queue.consume",
72
+ "fs.read",
73
+ "fs.write",
74
+ "network.egress",
75
+ "secret.read",
76
+ "shell.exec",
77
+ ]);
78
+ function valorCampoCompleto(campo) {
79
+ if (!campo) {
80
+ return undefined;
81
+ }
82
+ return [campo.valor, ...campo.modificadores].join(" ").trim() || undefined;
83
+ }
84
+ function parsearBooleanoSemantico(valor) {
85
+ if (!valor) {
86
+ return undefined;
87
+ }
88
+ if (valor === "verdadeiro" || valor === "true") {
89
+ return true;
90
+ }
91
+ if (valor === "falso" || valor === "false") {
92
+ return false;
93
+ }
94
+ return undefined;
95
+ }
96
+ function localizarCampo(bloco, ...nomes) {
97
+ if (!bloco) {
98
+ return undefined;
99
+ }
100
+ return bloco.campos.find((campo) => nomes.includes(campo.nome));
101
+ }
102
+ function localizarSubBloco(bloco, nome) {
103
+ if (!bloco) {
104
+ return undefined;
105
+ }
106
+ return bloco.blocos.find((item) => item.tipo === "bloco_generico" && (item.palavraChave === nome || item.nome === nome));
107
+ }
108
+ function dividirListaDeclarativa(valor) {
109
+ return (valor ?? "")
110
+ .split(",")
111
+ .map((item) => item.trim())
112
+ .filter(Boolean);
113
+ }
114
+ export function extrairContratoAuth(bloco) {
115
+ return {
116
+ explicita: Boolean(bloco),
117
+ modo: valorCampoCompleto(localizarCampo(bloco, "modo")),
118
+ estrategia: valorCampoCompleto(localizarCampo(bloco, "estrategia")),
119
+ principal: valorCampoCompleto(localizarCampo(bloco, "principal")),
120
+ origem: valorCampoCompleto(localizarCampo(bloco, "origem")),
121
+ };
122
+ }
123
+ export function extrairContratoAuthz(bloco) {
124
+ return {
125
+ explicita: Boolean(bloco),
126
+ papeis: deduplicarTexto([
127
+ ...dividirListaDeclarativa(valorCampoCompleto(localizarCampo(bloco, "papel", "papeis"))),
128
+ ...bloco?.campos.filter((campo) => campo.nome === "papel").map((campo) => valorCampoCompleto(campo) ?? "") ?? [],
129
+ ]),
130
+ escopos: deduplicarTexto([
131
+ ...dividirListaDeclarativa(valorCampoCompleto(localizarCampo(bloco, "escopo", "escopos"))),
132
+ ...bloco?.campos.filter((campo) => campo.nome === "escopo").map((campo) => valorCampoCompleto(campo) ?? "") ?? [],
133
+ ]),
134
+ politica: valorCampoCompleto(localizarCampo(bloco, "politica")),
135
+ tenant: valorCampoCompleto(localizarCampo(bloco, "tenant")),
136
+ };
137
+ }
138
+ export function extrairContratoDados(bloco) {
139
+ const campos = [];
140
+ const camposDiretos = bloco?.campos ?? [];
141
+ for (const campo of camposDiretos) {
142
+ if (["classificacao_padrao", "redacao_log", "retencao"].includes(campo.nome)) {
143
+ continue;
144
+ }
145
+ const classificacao = valorCampoCompleto(campo);
146
+ if (!classificacao) {
147
+ continue;
148
+ }
149
+ campos.push({
150
+ origem: "geral",
151
+ campo: campo.nome,
152
+ classificacao,
153
+ });
154
+ }
155
+ for (const origem of ["input", "output"]) {
156
+ const subbloco = localizarSubBloco(bloco, origem);
157
+ for (const campo of subbloco?.campos ?? []) {
158
+ const classificacao = valorCampoCompleto(campo);
159
+ if (!classificacao) {
160
+ continue;
161
+ }
162
+ campos.push({
163
+ origem,
164
+ campo: campo.nome,
165
+ classificacao,
166
+ });
167
+ }
168
+ }
169
+ return {
170
+ explicita: Boolean(bloco),
171
+ classificacaoPadrao: valorCampoCompleto(localizarCampo(bloco, "classificacao_padrao")),
172
+ redacaoLog: valorCampoCompleto(localizarCampo(bloco, "redacao_log")),
173
+ retencao: valorCampoCompleto(localizarCampo(bloco, "retencao")),
174
+ campos,
175
+ };
176
+ }
177
+ export function extrairContratoAudit(bloco) {
178
+ return {
179
+ explicita: Boolean(bloco),
180
+ evento: valorCampoCompleto(localizarCampo(bloco, "evento")),
181
+ ator: valorCampoCompleto(localizarCampo(bloco, "ator")),
182
+ correlacao: valorCampoCompleto(localizarCampo(bloco, "correlacao")),
183
+ retencao: valorCampoCompleto(localizarCampo(bloco, "retencao")),
184
+ motivo: valorCampoCompleto(localizarCampo(bloco, "motivo")),
185
+ };
186
+ }
187
+ export function extrairContratoSegredos(bloco) {
188
+ const itens = (bloco?.blocos ?? [])
189
+ .filter((item) => item.tipo === "bloco_generico")
190
+ .map((item) => ({
191
+ nome: item.nome ?? item.palavraChave,
192
+ origem: valorCampoCompleto(localizarCampo(item, "origem")),
193
+ escopo: valorCampoCompleto(localizarCampo(item, "escopo")),
194
+ acesso: valorCampoCompleto(localizarCampo(item, "acesso")),
195
+ rotacao: valorCampoCompleto(localizarCampo(item, "rotacao")),
196
+ naoLogar: parsearBooleanoSemantico(valorCampoCompleto(localizarCampo(item, "nao_logar"))),
197
+ naoRetornar: parsearBooleanoSemantico(valorCampoCompleto(localizarCampo(item, "nao_retornar"))),
198
+ mascarar: parsearBooleanoSemantico(valorCampoCompleto(localizarCampo(item, "mascarar"))),
199
+ }))
200
+ .filter((item) => item.nome && item.nome !== "desconhecido");
201
+ return {
202
+ explicita: Boolean(bloco),
203
+ itens,
204
+ };
205
+ }
206
+ export function extrairContratoForbidden(bloco) {
207
+ return {
208
+ explicita: Boolean(bloco),
209
+ regras: deduplicarTexto([
210
+ ...(bloco?.linhas.map((linha) => linha.conteudo.trim()) ?? []),
211
+ ...(bloco?.campos.map((campo) => valorCampoCompleto(campo) ?? campo.nome) ?? []),
212
+ ]),
213
+ };
214
+ }
215
+ export function classificacaoEhSensivel(classificacao) {
216
+ return CLASSIFICACOES_DADO_SENSIVEIS.has((classificacao ?? "").trim().toLowerCase());
217
+ }
218
+ export function contratoDadosTemSensivel(contrato) {
219
+ if (!contrato?.explicita) {
220
+ return false;
221
+ }
222
+ if (classificacaoEhSensivel(contrato.classificacaoPadrao)) {
223
+ return true;
224
+ }
225
+ return contrato.campos.some((campo) => classificacaoEhSensivel(campo.classificacao));
226
+ }
227
+ export function contratoDadosTemSegredoOuCredencial(contrato) {
228
+ if (!contrato?.explicita) {
229
+ return false;
230
+ }
231
+ const padrao = (contrato.classificacaoPadrao ?? "").trim().toLowerCase();
232
+ if (padrao === "segredo" || padrao === "credencial") {
233
+ return true;
234
+ }
235
+ return contrato.campos.some((campo) => {
236
+ const classificacao = campo.classificacao.trim().toLowerCase();
237
+ return classificacao === "segredo" || classificacao === "credencial";
238
+ });
239
+ }
240
+ export function efeitoEhPrivilegiado(efeito) {
241
+ if (efeito.criticidade === "alta" || efeito.criticidade === "critica") {
242
+ return true;
243
+ }
244
+ if (CATEGORIAS_EFEITO_PRIVILEGIADAS.has(efeito.categoria)) {
245
+ return true;
246
+ }
247
+ return ["escrita", "publicacao", "execucao", "admin", "egress"].includes(efeito.privilegio ?? "");
248
+ }
249
+ export function efeitoRequerSegredo(efeito) {
250
+ return efeito.categoria === "secret.read";
251
+ }
252
+ export function forbiddenContemRegra(forbidden, regra) {
253
+ return Boolean(forbidden?.regras.some((item) => item === regra));
254
+ }
255
+ function deduplicarTexto(valores) {
256
+ return [...new Set(valores.filter(Boolean))].sort((a, b) => a.localeCompare(b, "pt-BR"));
257
+ }
258
+ //# sourceMappingURL=seguranca.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"seguranca.js","sourceRoot":"","sources":["../../src/semantico/seguranca.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function lerArquivoTexto(caminhoArquivo: string): Promise<string>;
2
+ export declare function listarArquivosSema(entrada: string): Promise<string[]>;
@@ -0,0 +1,25 @@
1
+ import { readFile, readdir, stat } from "node:fs/promises";
2
+ import path from "node:path";
3
+ export async function lerArquivoTexto(caminhoArquivo) {
4
+ return readFile(caminhoArquivo, "utf8");
5
+ }
6
+ export async function listarArquivosSema(entrada) {
7
+ const informacao = await stat(entrada);
8
+ if (informacao.isFile()) {
9
+ return [entrada];
10
+ }
11
+ const encontrados = [];
12
+ const filhos = await readdir(entrada, { withFileTypes: true });
13
+ for (const filho of filhos) {
14
+ const caminhoCompleto = path.join(entrada, filho.name);
15
+ if (filho.isDirectory()) {
16
+ encontrados.push(...(await listarArquivosSema(caminhoCompleto)));
17
+ continue;
18
+ }
19
+ if (filho.isFile() && caminhoCompleto.endsWith(".sema")) {
20
+ encontrados.push(caminhoCompleto);
21
+ }
22
+ }
23
+ return encontrados;
24
+ }
25
+ //# sourceMappingURL=arquivos.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"arquivos.js","sourceRoot":"","sources":["../../src/util/arquivos.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAC3D,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,cAAsB;IAC1D,OAAO,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC;AAC1C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,OAAe;IACtD,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,CAAC;IACvC,IAAI,UAAU,CAAC,MAAM,EAAE,EAAE,CAAC;QACxB,OAAO,CAAC,OAAO,CAAC,CAAC;IACnB,CAAC;IAED,MAAM,WAAW,GAAa,EAAE,CAAC;IACjC,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,OAAO,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;IAC/D,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QACvD,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;YACxB,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,kBAAkB,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;YACjE,SAAS;QACX,CAAC;QACD,IAAI,KAAK,CAAC,MAAM,EAAE,IAAI,eAAe,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;YACxD,WAAW,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QACpC,CAAC;IACH,CAAC;IACD,OAAO,WAAW,CAAC;AACrB,CAAC"}
@@ -0,0 +1,10 @@
1
+ {
2
+ "name": "@sema/nucleo",
3
+ "version": "1.3.6",
4
+ "type": "module",
5
+ "main": "dist/index.js",
6
+ "types": "dist/index.d.ts",
7
+ "scripts": {
8
+ "build": "tsc -p tsconfig.json"
9
+ }
10
+ }
@@ -0,0 +1,191 @@
1
+ import type { IntervaloFonte } from "../diagnosticos/index.js";
2
+
3
+ export type TipoBloco =
4
+ | "module"
5
+ | "use"
6
+ | "type"
7
+ | "entity"
8
+ | "enum"
9
+ | "task"
10
+ | "worker"
11
+ | "evento"
12
+ | "fila"
13
+ | "cron"
14
+ | "webhook"
15
+ | "cache"
16
+ | "storage"
17
+ | "policy"
18
+ | "input"
19
+ | "output"
20
+ | "rules"
21
+ | "effects"
22
+ | "impl"
23
+ | "vinculos"
24
+ | "execucao"
25
+ | "auth"
26
+ | "authz"
27
+ | "dados"
28
+ | "audit"
29
+ | "segredos"
30
+ | "forbidden"
31
+ | "guarantees"
32
+ | "state"
33
+ | "flow"
34
+ | "route"
35
+ | "tests"
36
+ | "error"
37
+ | "docs"
38
+ | "comments"
39
+ | "fields"
40
+ | "invariants"
41
+ | "transitions"
42
+ | "given"
43
+ | "when"
44
+ | "expect"
45
+ | "case"
46
+ | "desconhecido";
47
+
48
+ export interface NoAstBase {
49
+ tipo: string;
50
+ intervalo?: IntervaloFonte;
51
+ }
52
+
53
+ export interface CampoAst extends NoAstBase {
54
+ tipo: "campo";
55
+ nome: string;
56
+ valor: string;
57
+ modificadores: string[];
58
+ }
59
+
60
+ export interface LinhaDeclarativaAst extends NoAstBase {
61
+ tipo: "linha_declarativa";
62
+ conteudo: string;
63
+ }
64
+
65
+ export interface BlocoGenericoAst extends NoAstBase {
66
+ tipo: "bloco_generico";
67
+ palavraChave: TipoBloco;
68
+ nome?: string;
69
+ campos: CampoAst[];
70
+ linhas: LinhaDeclarativaAst[];
71
+ blocos: BlocoAst[];
72
+ }
73
+
74
+ export interface BlocoCasoTesteAst extends NoAstBase {
75
+ tipo: "caso_teste";
76
+ nome: string;
77
+ given?: BlocoGenericoAst;
78
+ when?: BlocoGenericoAst;
79
+ expect?: BlocoGenericoAst;
80
+ error?: BlocoGenericoAst;
81
+ docs?: BlocoGenericoAst;
82
+ comments?: BlocoGenericoAst;
83
+ }
84
+
85
+ export interface UseAst extends NoAstBase {
86
+ tipo: "use";
87
+ origem: "sema" | "ts" | "py" | "dart" | "cs" | "java" | "go" | "rust" | "cpp";
88
+ caminho: string;
89
+ }
90
+
91
+ export interface EnumAst extends NoAstBase {
92
+ tipo: "enum";
93
+ nome: string;
94
+ valores: string[];
95
+ docs?: BlocoGenericoAst;
96
+ }
97
+
98
+ export interface TypeAst extends NoAstBase {
99
+ tipo: "type";
100
+ nome: string;
101
+ corpo: BlocoGenericoAst;
102
+ }
103
+
104
+ export interface EntityAst extends NoAstBase {
105
+ tipo: "entity";
106
+ nome: string;
107
+ corpo: BlocoGenericoAst;
108
+ }
109
+
110
+ export interface TaskAst extends NoAstBase {
111
+ tipo: "task";
112
+ nome: string;
113
+ corpo: BlocoGenericoAst;
114
+ input?: BlocoGenericoAst;
115
+ output?: BlocoGenericoAst;
116
+ rules?: BlocoGenericoAst;
117
+ effects?: BlocoGenericoAst;
118
+ impl?: BlocoGenericoAst;
119
+ vinculos?: BlocoGenericoAst;
120
+ execucao?: BlocoGenericoAst;
121
+ auth?: BlocoGenericoAst;
122
+ authz?: BlocoGenericoAst;
123
+ dados?: BlocoGenericoAst;
124
+ audit?: BlocoGenericoAst;
125
+ segredos?: BlocoGenericoAst;
126
+ forbidden?: BlocoGenericoAst;
127
+ guarantees?: BlocoGenericoAst;
128
+ state?: BlocoGenericoAst;
129
+ tests?: BlocoGenericoAst;
130
+ error?: BlocoGenericoAst;
131
+ docs?: BlocoGenericoAst;
132
+ comments?: BlocoGenericoAst;
133
+ }
134
+
135
+ export interface FlowAst extends NoAstBase {
136
+ tipo: "flow";
137
+ nome: string;
138
+ corpo: BlocoGenericoAst;
139
+ vinculos?: BlocoGenericoAst;
140
+ }
141
+
142
+ export interface RouteAst extends NoAstBase {
143
+ tipo: "route";
144
+ nome: string;
145
+ corpo: BlocoGenericoAst;
146
+ vinculos?: BlocoGenericoAst;
147
+ }
148
+
149
+ export interface StateAst extends NoAstBase {
150
+ tipo: "state";
151
+ nome?: string;
152
+ corpo: BlocoGenericoAst;
153
+ }
154
+
155
+ export interface ModuloAst extends NoAstBase {
156
+ tipo: "module";
157
+ nome: string;
158
+ uses: UseAst[];
159
+ vinculos?: BlocoGenericoAst;
160
+ docs?: BlocoGenericoAst;
161
+ comments?: BlocoGenericoAst;
162
+ types: TypeAst[];
163
+ entities: EntityAst[];
164
+ enums: EnumAst[];
165
+ tasks: TaskAst[];
166
+ flows: FlowAst[];
167
+ routes: RouteAst[];
168
+ workers: BlocoGenericoAst[];
169
+ eventos: BlocoGenericoAst[];
170
+ filas: BlocoGenericoAst[];
171
+ crons: BlocoGenericoAst[];
172
+ webhooks: BlocoGenericoAst[];
173
+ caches: BlocoGenericoAst[];
174
+ storages: BlocoGenericoAst[];
175
+ policies: BlocoGenericoAst[];
176
+ states: StateAst[];
177
+ tests?: BlocoGenericoAst;
178
+ extras: BlocoGenericoAst[];
179
+ }
180
+
181
+ export type BlocoAst =
182
+ | BlocoGenericoAst
183
+ | BlocoCasoTesteAst
184
+ | UseAst
185
+ | EnumAst
186
+ | TypeAst
187
+ | EntityAst
188
+ | TaskAst
189
+ | FlowAst
190
+ | RouteAst
191
+ | StateAst;
@@ -0,0 +1,43 @@
1
+ export type SeveridadeDiagnostico = "erro" | "aviso" | "informacao";
2
+
3
+ export interface PosicaoFonte {
4
+ indice: number;
5
+ linha: number;
6
+ coluna: number;
7
+ }
8
+
9
+ export interface IntervaloFonte {
10
+ inicio: PosicaoFonte;
11
+ fim: PosicaoFonte;
12
+ arquivo?: string;
13
+ }
14
+
15
+ export interface Diagnostico {
16
+ codigo: string;
17
+ mensagem: string;
18
+ severidade: SeveridadeDiagnostico;
19
+ intervalo?: IntervaloFonte;
20
+ dica?: string;
21
+ contexto?: string;
22
+ }
23
+
24
+ export function formatarDiagnostico(diagnostico: Diagnostico): string {
25
+ const local = diagnostico.intervalo
26
+ ? `${diagnostico.intervalo.arquivo ?? "arquivo"}:${diagnostico.intervalo.inicio.linha}:${diagnostico.intervalo.inicio.coluna}`
27
+ : "local desconhecido";
28
+ const dica = diagnostico.dica ? `\nDica: ${diagnostico.dica}` : "";
29
+ const contexto = diagnostico.contexto ? `\nContexto: ${diagnostico.contexto}` : "";
30
+ return `[${diagnostico.severidade.toUpperCase()} ${diagnostico.codigo}] ${diagnostico.mensagem} (${local})${dica}${contexto}`;
31
+ }
32
+
33
+ export function criarDiagnostico(
34
+ codigo: string,
35
+ mensagem: string,
36
+ severidade: SeveridadeDiagnostico,
37
+ intervalo?: IntervaloFonte,
38
+ dica?: string,
39
+ contexto?: string,
40
+ ): Diagnostico {
41
+ return { codigo, mensagem, severidade, intervalo, dica, contexto };
42
+ }
43
+