@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,460 @@
1
+ import { parsear } from "../parser/parser.js";
2
+ import { tokenizar } from "../lexer/lexer.js";
3
+ const ORDEM_BLOCOS_MODULO = new Map([
4
+ ["docs", 0],
5
+ ["comments", 1],
6
+ ["use", 2],
7
+ ["vinculos", 3],
8
+ ["database", 4],
9
+ ["type", 5],
10
+ ["entity", 6],
11
+ ["enum", 7],
12
+ ["state", 8],
13
+ ["task", 9],
14
+ ["flow", 10],
15
+ ["route", 11],
16
+ ["worker", 12],
17
+ ["evento", 13],
18
+ ["fila", 14],
19
+ ["cron", 15],
20
+ ["webhook", 16],
21
+ ["cache", 17],
22
+ ["storage", 18],
23
+ ["policy", 19],
24
+ ["tests", 20],
25
+ ["desconhecido", 21],
26
+ ]);
27
+ const ORDEM_SUBBLOCOS_TASK = new Map([
28
+ ["docs", 0],
29
+ ["comments", 1],
30
+ ["input", 2],
31
+ ["output", 3],
32
+ ["rules", 4],
33
+ ["effects", 5],
34
+ ["auth", 6],
35
+ ["authz", 7],
36
+ ["dados", 8],
37
+ ["audit", 9],
38
+ ["segredos", 10],
39
+ ["forbidden", 11],
40
+ ["impl", 12],
41
+ ["vinculos", 13],
42
+ ["execucao", 14],
43
+ ["state", 15],
44
+ ["guarantees", 16],
45
+ ["error", 17],
46
+ ["tests", 18],
47
+ ["desconhecido", 19],
48
+ ]);
49
+ const ORDEM_SUBBLOCOS_ROUTE = new Map([
50
+ ["input", 0],
51
+ ["output", 1],
52
+ ["effects", 2],
53
+ ["auth", 3],
54
+ ["authz", 4],
55
+ ["dados", 5],
56
+ ["audit", 6],
57
+ ["segredos", 7],
58
+ ["forbidden", 8],
59
+ ["vinculos", 9],
60
+ ["error", 10],
61
+ ["docs", 11],
62
+ ["comments", 12],
63
+ ["desconhecido", 13],
64
+ ]);
65
+ const ORDEM_SUBBLOCOS_FLOW = new Map([
66
+ ["effects", 0],
67
+ ["vinculos", 1],
68
+ ["docs", 2],
69
+ ["comments", 3],
70
+ ["desconhecido", 4],
71
+ ]);
72
+ const ORDEM_SUBBLOCOS_SUPERFICIE = new Map([
73
+ ["input", 0],
74
+ ["output", 1],
75
+ ["effects", 2],
76
+ ["auth", 3],
77
+ ["authz", 4],
78
+ ["dados", 5],
79
+ ["audit", 6],
80
+ ["segredos", 7],
81
+ ["forbidden", 8],
82
+ ["impl", 9],
83
+ ["vinculos", 10],
84
+ ["execucao", 11],
85
+ ["error", 12],
86
+ ["docs", 13],
87
+ ["comments", 14],
88
+ ["desconhecido", 15],
89
+ ]);
90
+ const ORDEM_SUBBLOCOS_STATE = new Map([
91
+ ["fields", 0],
92
+ ["invariants", 1],
93
+ ["transitions", 2],
94
+ ["docs", 3],
95
+ ["comments", 4],
96
+ ["desconhecido", 5],
97
+ ]);
98
+ const ORDEM_SUBBLOCOS_TESTE = new Map([
99
+ ["given", 0],
100
+ ["when", 1],
101
+ ["expect", 2],
102
+ ["error", 3],
103
+ ["docs", 4],
104
+ ["comments", 5],
105
+ ["desconhecido", 6],
106
+ ]);
107
+ const ORDEM_CAMPOS_POR_BLOCO = new Map([
108
+ ["vinculos", new Map([
109
+ ["arquivo", 0],
110
+ ["simbolo", 1],
111
+ ["rota", 2],
112
+ ["superficie", 3],
113
+ ["recurso", 4],
114
+ ["tabela", 5],
115
+ ["fila", 6],
116
+ ["worker", 7],
117
+ ["evento", 8],
118
+ ["cron", 9],
119
+ ["webhook", 10],
120
+ ["cache", 11],
121
+ ["storage", 12],
122
+ ["policy", 13],
123
+ ["teste", 14],
124
+ ])],
125
+ ["execucao", new Map([
126
+ ["idempotencia", 0],
127
+ ["timeout", 1],
128
+ ["retry", 2],
129
+ ["compensacao", 3],
130
+ ["criticidade_operacional", 4],
131
+ ])],
132
+ ["auth", new Map([
133
+ ["modo", 0],
134
+ ["estrategia", 1],
135
+ ["principal", 2],
136
+ ["origem", 3],
137
+ ])],
138
+ ["authz", new Map([
139
+ ["papeis", 0],
140
+ ["papel", 1],
141
+ ["escopos", 2],
142
+ ["escopo", 3],
143
+ ["politica", 4],
144
+ ["tenant", 5],
145
+ ])],
146
+ ["dados", new Map([
147
+ ["classificacao_padrao", 0],
148
+ ["redacao_log", 1],
149
+ ["retencao", 2],
150
+ ])],
151
+ ["audit", new Map([
152
+ ["evento", 0],
153
+ ["ator", 1],
154
+ ["correlacao", 2],
155
+ ["retencao", 3],
156
+ ["motivo", 4],
157
+ ])],
158
+ ["database", new Map([
159
+ ["engine", 0],
160
+ ["schema", 1],
161
+ ["database", 2],
162
+ ["consistency", 3],
163
+ ["durability", 4],
164
+ ["transaction_model", 5],
165
+ ["query_model", 6],
166
+ ["portavel", 7],
167
+ ["adapter", 8],
168
+ ])],
169
+ ]);
170
+ function indentacao(nivel) {
171
+ return " ".repeat(nivel);
172
+ }
173
+ function ordenarPorMapa(itens, extrairChave, ordem) {
174
+ return [...itens].sort((a, b) => {
175
+ const ordemA = ordem.get(extrairChave(a)) ?? Number.MAX_SAFE_INTEGER;
176
+ const ordemB = ordem.get(extrairChave(b)) ?? Number.MAX_SAFE_INTEGER;
177
+ if (ordemA !== ordemB) {
178
+ return ordemA - ordemB;
179
+ }
180
+ return extrairChave(a).localeCompare(extrairChave(b), "pt-BR");
181
+ });
182
+ }
183
+ function normalizarEspacos(texto) {
184
+ const marcadorSeta = "__SEMA_SETA__";
185
+ return texto
186
+ .trim()
187
+ .replace(/\s*->\s*/g, ` ${marcadorSeta} `)
188
+ .replace(/\s*-\s*>\s*/g, ` ${marcadorSeta} `)
189
+ .replace(/\s+/g, " ")
190
+ .replace(/\s*,\s*/g, ", ")
191
+ .replace(/\(\s+/g, "(")
192
+ .replace(/\s+\)/g, ")")
193
+ .replace(/\[\s+/g, "[")
194
+ .replace(/\s+\]/g, "]")
195
+ .replace(/\s*>=\s*/g, " >= ")
196
+ .replace(/\s*<=\s*/g, " <= ")
197
+ .replace(/\s*==\s*/g, " == ")
198
+ .replace(/\s*!=\s*/g, " != ")
199
+ .replace(/\s*>\s*/g, " > ")
200
+ .replace(/\s*<\s*/g, " < ")
201
+ .replace(new RegExp(`\\s*${marcadorSeta}\\s*`, "g"), " -> ");
202
+ }
203
+ function normalizarCaminho(texto) {
204
+ return texto
205
+ .trim()
206
+ .replace(/\s*\/\s*/g, "/")
207
+ .replace(/\s+/g, "");
208
+ }
209
+ function eLiteralEscalar(texto) {
210
+ const normalizado = texto.trim();
211
+ return /^-?\d+(?:\.\d+)?$/.test(normalizado) || ["verdadeiro", "falso", "nulo"].includes(normalizado);
212
+ }
213
+ function deveColocarAspas(contexto, campo, combinado) {
214
+ if (campo.nome === "metodo") {
215
+ return false;
216
+ }
217
+ if (campo.nome === "caminho") {
218
+ return /[{}]/.test(combinado);
219
+ }
220
+ if (contexto === "vinculos" && ["arquivo", "webhook"].includes(campo.nome)) {
221
+ return true;
222
+ }
223
+ if (["timeout", "retry", "compensacao", "retencao", "rotacao"].includes(campo.nome)) {
224
+ return true;
225
+ }
226
+ if (contexto === "docs" || contexto === "comments") {
227
+ return true;
228
+ }
229
+ if (contexto === "error") {
230
+ return !eLiteralEscalar(combinado);
231
+ }
232
+ if (contexto === "given" || contexto === "when" || contexto === "expect") {
233
+ return !eLiteralEscalar(combinado);
234
+ }
235
+ return false;
236
+ }
237
+ function normalizarValorCampo(campo) {
238
+ return [campo.valor, ...campo.modificadores]
239
+ .filter(Boolean)
240
+ .join(" ")
241
+ .replace(/\s+/g, " ")
242
+ .trim();
243
+ }
244
+ function ordenarCampos(bloco) {
245
+ const ordem = ORDEM_CAMPOS_POR_BLOCO.get(bloco.palavraChave);
246
+ if (!ordem) {
247
+ return bloco.campos;
248
+ }
249
+ return ordenarPorMapa(bloco.campos, (campo) => campo.nome, ordem);
250
+ }
251
+ function renderizarCampo(campo, nivel, contexto) {
252
+ let combinado = normalizarValorCampo(campo);
253
+ if (campo.nome === "caminho") {
254
+ combinado = normalizarCaminho(combinado);
255
+ }
256
+ if (deveColocarAspas(contexto, campo, combinado)) {
257
+ combinado = JSON.stringify(combinado);
258
+ }
259
+ return `${indentacao(nivel)}${campo.nome}: ${combinado}`;
260
+ }
261
+ function renderizarLinha(linha, nivel) {
262
+ return `${indentacao(nivel)}${normalizarEspacos(linha)}`;
263
+ }
264
+ function renderizarCasoTeste(caso, nivel) {
265
+ const partes = [];
266
+ if (caso.given) {
267
+ partes.push(renderizarBlocoGenerico(caso.given, nivel + 1));
268
+ }
269
+ if (caso.when) {
270
+ partes.push(renderizarBlocoGenerico(caso.when, nivel + 1));
271
+ }
272
+ if (caso.expect) {
273
+ partes.push(renderizarBlocoGenerico(caso.expect, nivel + 1));
274
+ }
275
+ if (caso.error) {
276
+ partes.push(renderizarBlocoGenerico(caso.error, nivel + 1));
277
+ }
278
+ if (caso.docs) {
279
+ partes.push(renderizarBlocoGenerico(caso.docs, nivel + 1));
280
+ }
281
+ if (caso.comments) {
282
+ partes.push(renderizarBlocoGenerico(caso.comments, nivel + 1));
283
+ }
284
+ return `${indentacao(nivel)}caso ${JSON.stringify(caso.nome)} {\n${partes.join("\n\n")}\n${indentacao(nivel)}}`;
285
+ }
286
+ function renderizarBlocoAst(bloco, nivel) {
287
+ switch (bloco.tipo) {
288
+ case "caso_teste":
289
+ return renderizarCasoTeste(bloco, nivel);
290
+ case "bloco_generico":
291
+ return renderizarBlocoGenerico(bloco, nivel);
292
+ case "use":
293
+ return `${indentacao(nivel)}use ${bloco.origem === "sema" ? "" : `${bloco.origem} `}${bloco.caminho}`.trimEnd();
294
+ case "enum":
295
+ return renderizarEnum(bloco, nivel);
296
+ case "type":
297
+ return renderizarTipo(bloco, nivel);
298
+ case "entity":
299
+ return renderizarEntity(bloco, nivel);
300
+ case "task":
301
+ return renderizarTask(bloco, nivel);
302
+ case "flow":
303
+ return renderizarFlow(bloco, nivel);
304
+ case "route":
305
+ return renderizarRoute(bloco, nivel);
306
+ case "state":
307
+ return renderizarState(bloco, nivel);
308
+ }
309
+ }
310
+ function ordenarSubblocos(bloco) {
311
+ if (bloco.palavraChave === "task") {
312
+ return ordenarPorMapa(bloco.blocos, (item) => item.tipo === "bloco_generico" ? item.palavraChave : item.tipo, ORDEM_SUBBLOCOS_TASK);
313
+ }
314
+ if (bloco.palavraChave === "route") {
315
+ return ordenarPorMapa(bloco.blocos, (item) => item.tipo === "bloco_generico" ? item.palavraChave : item.tipo, ORDEM_SUBBLOCOS_ROUTE);
316
+ }
317
+ if (bloco.palavraChave === "flow") {
318
+ return ordenarPorMapa(bloco.blocos, (item) => item.tipo === "bloco_generico" ? item.palavraChave : item.tipo, ORDEM_SUBBLOCOS_FLOW);
319
+ }
320
+ if (["worker", "evento", "fila", "cron", "webhook", "cache", "storage", "policy"].includes(bloco.palavraChave)) {
321
+ return ordenarPorMapa(bloco.blocos, (item) => item.tipo === "bloco_generico" ? item.palavraChave : item.tipo, ORDEM_SUBBLOCOS_SUPERFICIE);
322
+ }
323
+ if (bloco.palavraChave === "state") {
324
+ return ordenarPorMapa(bloco.blocos, (item) => item.tipo === "bloco_generico" ? item.palavraChave : item.tipo, ORDEM_SUBBLOCOS_STATE);
325
+ }
326
+ if (bloco.palavraChave === "tests") {
327
+ return ordenarPorMapa(bloco.blocos, (item) => item.tipo === "caso_teste" ? "case" : item.tipo === "bloco_generico" ? item.palavraChave : item.tipo, ORDEM_SUBBLOCOS_TESTE);
328
+ }
329
+ return bloco.blocos;
330
+ }
331
+ function renderizarBlocoGenerico(bloco, nivel) {
332
+ const identificadorBloco = bloco.palavraChave === "desconhecido" && bloco.nome
333
+ ? bloco.nome
334
+ : `${bloco.palavraChave}${bloco.nome ? ` ${bloco.nome}` : ""}`;
335
+ const cabecalho = `${indentacao(nivel)}${identificadorBloco} {`;
336
+ const linhasCampos = ordenarCampos(bloco).map((campo) => renderizarCampo(campo, nivel + 1, bloco.palavraChave));
337
+ const linhasDeclarativas = bloco.linhas.map((linha) => renderizarLinha(linha.conteudo, nivel + 1));
338
+ const blocosInternos = ordenarSubblocos(bloco).map((subbloco) => renderizarBlocoAst(subbloco, nivel + 1));
339
+ const corpo = [...linhasCampos, ...linhasDeclarativas, ...blocosInternos];
340
+ if (corpo.length === 0) {
341
+ return `${cabecalho}\n${indentacao(nivel)}}`;
342
+ }
343
+ return `${cabecalho}\n${corpo.join("\n")}\n${indentacao(nivel)}}`;
344
+ }
345
+ function renderizarEnum(enumeracao, nivel) {
346
+ const corpo = enumeracao.valores.map((valor, indice) => `${indentacao(nivel + 1)}${valor}${indice < enumeracao.valores.length - 1 ? "," : ""}`);
347
+ return `${indentacao(nivel)}enum ${enumeracao.nome} {\n${corpo.join("\n")}\n${indentacao(nivel)}}`;
348
+ }
349
+ function renderizarTipo(type, nivel) {
350
+ return `${indentacao(nivel)}type ${type.nome} {\n${renderizarCorpoSimples(type.corpo, nivel + 1)}\n${indentacao(nivel)}}`;
351
+ }
352
+ function renderizarEntity(entity, nivel) {
353
+ return `${indentacao(nivel)}entity ${entity.nome} {\n${renderizarCorpoSimples(entity.corpo, nivel + 1)}\n${indentacao(nivel)}}`;
354
+ }
355
+ function renderizarTask(task, nivel) {
356
+ return `${indentacao(nivel)}task ${task.nome} {\n${renderizarCorpoSimples(task.corpo, nivel + 1)}\n${indentacao(nivel)}}`;
357
+ }
358
+ function renderizarFlow(flow, nivel) {
359
+ return `${indentacao(nivel)}flow ${flow.nome} {\n${renderizarCorpoSimples(flow.corpo, nivel + 1)}\n${indentacao(nivel)}}`;
360
+ }
361
+ function renderizarRoute(route, nivel) {
362
+ return `${indentacao(nivel)}route ${route.nome} {\n${renderizarCorpoSimples(route.corpo, nivel + 1)}\n${indentacao(nivel)}}`;
363
+ }
364
+ function renderizarState(state, nivel) {
365
+ return `${indentacao(nivel)}state${state.nome ? ` ${state.nome}` : ""} {\n${renderizarCorpoSimples(state.corpo, nivel + 1)}\n${indentacao(nivel)}}`;
366
+ }
367
+ function renderizarCorpoSimples(bloco, nivel) {
368
+ const conteudo = ordenarSubblocos(bloco).map((subbloco) => renderizarBlocoAst(subbloco, nivel));
369
+ const campos = ordenarCampos(bloco).map((campo) => renderizarCampo(campo, nivel, bloco.palavraChave));
370
+ const linhas = bloco.linhas.map((linha) => renderizarLinha(linha.conteudo, nivel));
371
+ const corpo = [...campos, ...linhas, ...conteudo];
372
+ return corpo.join("\n");
373
+ }
374
+ function renderizarModulo(modulo) {
375
+ const blocos = [];
376
+ if (modulo.docs) {
377
+ blocos.push({ chave: "docs", conteudo: renderizarBlocoGenerico(modulo.docs, 1) });
378
+ }
379
+ if (modulo.comments) {
380
+ blocos.push({ chave: "comments", conteudo: renderizarBlocoGenerico(modulo.comments, 1) });
381
+ }
382
+ for (const use of modulo.uses) {
383
+ blocos.push({ chave: "use", conteudo: renderizarBlocoAst(use, 1) });
384
+ }
385
+ if (modulo.vinculos) {
386
+ blocos.push({ chave: "vinculos", conteudo: renderizarBlocoGenerico(modulo.vinculos, 1) });
387
+ }
388
+ for (const database of modulo.databases) {
389
+ blocos.push({ chave: "database", conteudo: renderizarBlocoGenerico(database, 1) });
390
+ }
391
+ for (const type of modulo.types) {
392
+ blocos.push({ chave: "type", conteudo: renderizarBlocoAst(type, 1) });
393
+ }
394
+ for (const entity of modulo.entities) {
395
+ blocos.push({ chave: "entity", conteudo: renderizarBlocoAst(entity, 1) });
396
+ }
397
+ for (const enumeracao of modulo.enums) {
398
+ blocos.push({ chave: "enum", conteudo: renderizarBlocoAst(enumeracao, 1) });
399
+ }
400
+ for (const state of modulo.states) {
401
+ blocos.push({ chave: "state", conteudo: renderizarBlocoAst(state, 1) });
402
+ }
403
+ for (const task of modulo.tasks) {
404
+ blocos.push({ chave: "task", conteudo: renderizarBlocoAst(task, 1) });
405
+ }
406
+ for (const flow of modulo.flows) {
407
+ blocos.push({ chave: "flow", conteudo: renderizarBlocoAst(flow, 1) });
408
+ }
409
+ for (const route of modulo.routes) {
410
+ blocos.push({ chave: "route", conteudo: renderizarBlocoAst(route, 1) });
411
+ }
412
+ for (const worker of modulo.workers) {
413
+ blocos.push({ chave: "worker", conteudo: renderizarBlocoGenerico(worker, 1) });
414
+ }
415
+ for (const evento of modulo.eventos) {
416
+ blocos.push({ chave: "evento", conteudo: renderizarBlocoGenerico(evento, 1) });
417
+ }
418
+ for (const fila of modulo.filas) {
419
+ blocos.push({ chave: "fila", conteudo: renderizarBlocoGenerico(fila, 1) });
420
+ }
421
+ for (const cron of modulo.crons) {
422
+ blocos.push({ chave: "cron", conteudo: renderizarBlocoGenerico(cron, 1) });
423
+ }
424
+ for (const webhook of modulo.webhooks) {
425
+ blocos.push({ chave: "webhook", conteudo: renderizarBlocoGenerico(webhook, 1) });
426
+ }
427
+ for (const cache of modulo.caches) {
428
+ blocos.push({ chave: "cache", conteudo: renderizarBlocoGenerico(cache, 1) });
429
+ }
430
+ for (const storage of modulo.storages) {
431
+ blocos.push({ chave: "storage", conteudo: renderizarBlocoGenerico(storage, 1) });
432
+ }
433
+ for (const policy of modulo.policies) {
434
+ blocos.push({ chave: "policy", conteudo: renderizarBlocoGenerico(policy, 1) });
435
+ }
436
+ if (modulo.tests) {
437
+ blocos.push({ chave: "tests", conteudo: renderizarBlocoGenerico(modulo.tests, 1) });
438
+ }
439
+ for (const extra of modulo.extras) {
440
+ blocos.push({ chave: "desconhecido", conteudo: renderizarBlocoGenerico(extra, 1) });
441
+ }
442
+ const ordenados = ordenarPorMapa(blocos, (item) => item.chave, ORDEM_BLOCOS_MODULO);
443
+ return `module ${modulo.nome} {\n${ordenados.map((item) => item.conteudo).join("\n\n")}\n}\n`;
444
+ }
445
+ export function formatarCodigo(codigo, arquivo) {
446
+ const resultadoLexer = tokenizar(codigo, arquivo);
447
+ const resultadoParser = parsear(resultadoLexer.tokens);
448
+ const diagnosticos = [...resultadoLexer.diagnosticos, ...resultadoParser.diagnosticos];
449
+ if (!resultadoParser.modulo) {
450
+ return { diagnosticos, alterado: false };
451
+ }
452
+ const codigoFormatado = renderizarModulo(resultadoParser.modulo);
453
+ return {
454
+ modulo: resultadoParser.modulo,
455
+ codigoFormatado,
456
+ diagnosticos,
457
+ alterado: codigoFormatado !== codigo,
458
+ };
459
+ }
460
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/formatador/index.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAE9C,MAAM,mBAAmB,GAAG,IAAI,GAAG,CAAiB;IAClD,CAAC,MAAM,EAAE,CAAC,CAAC;IACX,CAAC,UAAU,EAAE,CAAC,CAAC;IACf,CAAC,KAAK,EAAE,CAAC,CAAC;IACV,CAAC,UAAU,EAAE,CAAC,CAAC;IACf,CAAC,UAAU,EAAE,CAAC,CAAC;IACf,CAAC,MAAM,EAAE,CAAC,CAAC;IACX,CAAC,QAAQ,EAAE,CAAC,CAAC;IACb,CAAC,MAAM,EAAE,CAAC,CAAC;IACX,CAAC,OAAO,EAAE,CAAC,CAAC;IACZ,CAAC,MAAM,EAAE,CAAC,CAAC;IACX,CAAC,MAAM,EAAE,EAAE,CAAC;IACZ,CAAC,OAAO,EAAE,EAAE,CAAC;IACb,CAAC,QAAQ,EAAE,EAAE,CAAC;IACd,CAAC,QAAQ,EAAE,EAAE,CAAC;IACd,CAAC,MAAM,EAAE,EAAE,CAAC;IACZ,CAAC,MAAM,EAAE,EAAE,CAAC;IACZ,CAAC,SAAS,EAAE,EAAE,CAAC;IACf,CAAC,OAAO,EAAE,EAAE,CAAC;IACb,CAAC,SAAS,EAAE,EAAE,CAAC;IACf,CAAC,QAAQ,EAAE,EAAE,CAAC;IACd,CAAC,OAAO,EAAE,EAAE,CAAC;IACb,CAAC,cAAc,EAAE,EAAE,CAAC;CACrB,CAAC,CAAC;AAEH,MAAM,oBAAoB,GAAG,IAAI,GAAG,CAAiB;IACnD,CAAC,MAAM,EAAE,CAAC,CAAC;IACX,CAAC,UAAU,EAAE,CAAC,CAAC;IACf,CAAC,OAAO,EAAE,CAAC,CAAC;IACZ,CAAC,QAAQ,EAAE,CAAC,CAAC;IACb,CAAC,OAAO,EAAE,CAAC,CAAC;IACZ,CAAC,SAAS,EAAE,CAAC,CAAC;IACd,CAAC,MAAM,EAAE,CAAC,CAAC;IACX,CAAC,OAAO,EAAE,CAAC,CAAC;IACZ,CAAC,OAAO,EAAE,CAAC,CAAC;IACZ,CAAC,OAAO,EAAE,CAAC,CAAC;IACZ,CAAC,UAAU,EAAE,EAAE,CAAC;IAChB,CAAC,WAAW,EAAE,EAAE,CAAC;IACjB,CAAC,MAAM,EAAE,EAAE,CAAC;IACZ,CAAC,UAAU,EAAE,EAAE,CAAC;IAChB,CAAC,UAAU,EAAE,EAAE,CAAC;IAChB,CAAC,OAAO,EAAE,EAAE,CAAC;IACb,CAAC,YAAY,EAAE,EAAE,CAAC;IAClB,CAAC,OAAO,EAAE,EAAE,CAAC;IACb,CAAC,OAAO,EAAE,EAAE,CAAC;IACb,CAAC,cAAc,EAAE,EAAE,CAAC;CACrB,CAAC,CAAC;AAEH,MAAM,qBAAqB,GAAG,IAAI,GAAG,CAAiB;IACpD,CAAC,OAAO,EAAE,CAAC,CAAC;IACZ,CAAC,QAAQ,EAAE,CAAC,CAAC;IACb,CAAC,SAAS,EAAE,CAAC,CAAC;IACd,CAAC,MAAM,EAAE,CAAC,CAAC;IACX,CAAC,OAAO,EAAE,CAAC,CAAC;IACZ,CAAC,OAAO,EAAE,CAAC,CAAC;IACZ,CAAC,OAAO,EAAE,CAAC,CAAC;IACZ,CAAC,UAAU,EAAE,CAAC,CAAC;IACf,CAAC,WAAW,EAAE,CAAC,CAAC;IAChB,CAAC,UAAU,EAAE,CAAC,CAAC;IACf,CAAC,OAAO,EAAE,EAAE,CAAC;IACb,CAAC,MAAM,EAAE,EAAE,CAAC;IACZ,CAAC,UAAU,EAAE,EAAE,CAAC;IAChB,CAAC,cAAc,EAAE,EAAE,CAAC;CACrB,CAAC,CAAC;AAEH,MAAM,oBAAoB,GAAG,IAAI,GAAG,CAAiB;IACnD,CAAC,SAAS,EAAE,CAAC,CAAC;IACd,CAAC,UAAU,EAAE,CAAC,CAAC;IACf,CAAC,MAAM,EAAE,CAAC,CAAC;IACX,CAAC,UAAU,EAAE,CAAC,CAAC;IACf,CAAC,cAAc,EAAE,CAAC,CAAC;CACpB,CAAC,CAAC;AAEH,MAAM,0BAA0B,GAAG,IAAI,GAAG,CAAiB;IACzD,CAAC,OAAO,EAAE,CAAC,CAAC;IACZ,CAAC,QAAQ,EAAE,CAAC,CAAC;IACb,CAAC,SAAS,EAAE,CAAC,CAAC;IACd,CAAC,MAAM,EAAE,CAAC,CAAC;IACX,CAAC,OAAO,EAAE,CAAC,CAAC;IACZ,CAAC,OAAO,EAAE,CAAC,CAAC;IACZ,CAAC,OAAO,EAAE,CAAC,CAAC;IACZ,CAAC,UAAU,EAAE,CAAC,CAAC;IACf,CAAC,WAAW,EAAE,CAAC,CAAC;IAChB,CAAC,MAAM,EAAE,CAAC,CAAC;IACX,CAAC,UAAU,EAAE,EAAE,CAAC;IAChB,CAAC,UAAU,EAAE,EAAE,CAAC;IAChB,CAAC,OAAO,EAAE,EAAE,CAAC;IACb,CAAC,MAAM,EAAE,EAAE,CAAC;IACZ,CAAC,UAAU,EAAE,EAAE,CAAC;IAChB,CAAC,cAAc,EAAE,EAAE,CAAC;CACrB,CAAC,CAAC;AAEH,MAAM,qBAAqB,GAAG,IAAI,GAAG,CAAiB;IACpD,CAAC,QAAQ,EAAE,CAAC,CAAC;IACb,CAAC,YAAY,EAAE,CAAC,CAAC;IACjB,CAAC,aAAa,EAAE,CAAC,CAAC;IAClB,CAAC,MAAM,EAAE,CAAC,CAAC;IACX,CAAC,UAAU,EAAE,CAAC,CAAC;IACf,CAAC,cAAc,EAAE,CAAC,CAAC;CACpB,CAAC,CAAC;AAEH,MAAM,qBAAqB,GAAG,IAAI,GAAG,CAAiB;IACpD,CAAC,OAAO,EAAE,CAAC,CAAC;IACZ,CAAC,MAAM,EAAE,CAAC,CAAC;IACX,CAAC,QAAQ,EAAE,CAAC,CAAC;IACb,CAAC,OAAO,EAAE,CAAC,CAAC;IACZ,CAAC,MAAM,EAAE,CAAC,CAAC;IACX,CAAC,UAAU,EAAE,CAAC,CAAC;IACf,CAAC,cAAc,EAAE,CAAC,CAAC;CACpB,CAAC,CAAC;AAEH,MAAM,sBAAsB,GAAG,IAAI,GAAG,CAA8B;IAClE,CAAC,UAAU,EAAE,IAAI,GAAG,CAAiB;YACnC,CAAC,SAAS,EAAE,CAAC,CAAC;YACd,CAAC,SAAS,EAAE,CAAC,CAAC;YACd,CAAC,MAAM,EAAE,CAAC,CAAC;YACX,CAAC,YAAY,EAAE,CAAC,CAAC;YACjB,CAAC,SAAS,EAAE,CAAC,CAAC;YACd,CAAC,QAAQ,EAAE,CAAC,CAAC;YACb,CAAC,MAAM,EAAE,CAAC,CAAC;YACX,CAAC,QAAQ,EAAE,CAAC,CAAC;YACb,CAAC,QAAQ,EAAE,CAAC,CAAC;YACb,CAAC,MAAM,EAAE,CAAC,CAAC;YACX,CAAC,SAAS,EAAE,EAAE,CAAC;YACf,CAAC,OAAO,EAAE,EAAE,CAAC;YACb,CAAC,SAAS,EAAE,EAAE,CAAC;YACf,CAAC,QAAQ,EAAE,EAAE,CAAC;YACd,CAAC,OAAO,EAAE,EAAE,CAAC;SACd,CAAC,CAAC;IACH,CAAC,UAAU,EAAE,IAAI,GAAG,CAAiB;YACnC,CAAC,cAAc,EAAE,CAAC,CAAC;YACnB,CAAC,SAAS,EAAE,CAAC,CAAC;YACd,CAAC,OAAO,EAAE,CAAC,CAAC;YACZ,CAAC,aAAa,EAAE,CAAC,CAAC;YAClB,CAAC,yBAAyB,EAAE,CAAC,CAAC;SAC/B,CAAC,CAAC;IACH,CAAC,MAAM,EAAE,IAAI,GAAG,CAAiB;YAC/B,CAAC,MAAM,EAAE,CAAC,CAAC;YACX,CAAC,YAAY,EAAE,CAAC,CAAC;YACjB,CAAC,WAAW,EAAE,CAAC,CAAC;YAChB,CAAC,QAAQ,EAAE,CAAC,CAAC;SACd,CAAC,CAAC;IACH,CAAC,OAAO,EAAE,IAAI,GAAG,CAAiB;YAChC,CAAC,QAAQ,EAAE,CAAC,CAAC;YACb,CAAC,OAAO,EAAE,CAAC,CAAC;YACZ,CAAC,SAAS,EAAE,CAAC,CAAC;YACd,CAAC,QAAQ,EAAE,CAAC,CAAC;YACb,CAAC,UAAU,EAAE,CAAC,CAAC;YACf,CAAC,QAAQ,EAAE,CAAC,CAAC;SACd,CAAC,CAAC;IACH,CAAC,OAAO,EAAE,IAAI,GAAG,CAAiB;YAChC,CAAC,sBAAsB,EAAE,CAAC,CAAC;YAC3B,CAAC,aAAa,EAAE,CAAC,CAAC;YAClB,CAAC,UAAU,EAAE,CAAC,CAAC;SAChB,CAAC,CAAC;IACH,CAAC,OAAO,EAAE,IAAI,GAAG,CAAiB;YAChC,CAAC,QAAQ,EAAE,CAAC,CAAC;YACb,CAAC,MAAM,EAAE,CAAC,CAAC;YACX,CAAC,YAAY,EAAE,CAAC,CAAC;YACjB,CAAC,UAAU,EAAE,CAAC,CAAC;YACf,CAAC,QAAQ,EAAE,CAAC,CAAC;SACd,CAAC,CAAC;IACH,CAAC,UAAU,EAAE,IAAI,GAAG,CAAiB;YACnC,CAAC,QAAQ,EAAE,CAAC,CAAC;YACb,CAAC,QAAQ,EAAE,CAAC,CAAC;YACb,CAAC,UAAU,EAAE,CAAC,CAAC;YACf,CAAC,aAAa,EAAE,CAAC,CAAC;YAClB,CAAC,YAAY,EAAE,CAAC,CAAC;YACjB,CAAC,mBAAmB,EAAE,CAAC,CAAC;YACxB,CAAC,aAAa,EAAE,CAAC,CAAC;YAClB,CAAC,UAAU,EAAE,CAAC,CAAC;YACf,CAAC,SAAS,EAAE,CAAC,CAAC;SACf,CAAC,CAAC;CACJ,CAAC,CAAC;AASH,SAAS,UAAU,CAAC,KAAa;IAC/B,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC5B,CAAC;AAED,SAAS,cAAc,CAAI,KAAU,EAAE,YAAiC,EAAE,KAA0B;IAClG,OAAO,CAAC,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QAC9B,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,gBAAgB,CAAC;QACrE,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,gBAAgB,CAAC;QACrE,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;YACtB,OAAO,MAAM,GAAG,MAAM,CAAC;QACzB,CAAC;QACD,OAAO,YAAY,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;IACjE,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,iBAAiB,CAAC,KAAa;IACtC,MAAM,YAAY,GAAG,eAAe,CAAC;IACrC,OAAO,KAAK;SACT,IAAI,EAAE;SACN,OAAO,CAAC,WAAW,EAAE,IAAI,YAAY,GAAG,CAAC;SACzC,OAAO,CAAC,cAAc,EAAE,IAAI,YAAY,GAAG,CAAC;SAC5C,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC;SACpB,OAAO,CAAC,UAAU,EAAE,IAAI,CAAC;SACzB,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC;SACtB,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC;SACtB,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC;SACtB,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC;SACtB,OAAO,CAAC,WAAW,EAAE,MAAM,CAAC;SAC5B,OAAO,CAAC,WAAW,EAAE,MAAM,CAAC;SAC5B,OAAO,CAAC,WAAW,EAAE,MAAM,CAAC;SAC5B,OAAO,CAAC,WAAW,EAAE,MAAM,CAAC;SAC5B,OAAO,CAAC,UAAU,EAAE,KAAK,CAAC;SAC1B,OAAO,CAAC,UAAU,EAAE,KAAK,CAAC;SAC1B,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,YAAY,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC;AACjE,CAAC;AAED,SAAS,iBAAiB,CAAC,KAAa;IACtC,OAAO,KAAK;SACT,IAAI,EAAE;SACN,OAAO,CAAC,WAAW,EAAE,GAAG,CAAC;SACzB,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;AACzB,CAAC;AAED,SAAS,eAAe,CAAC,KAAa;IACpC,MAAM,WAAW,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IACjC,OAAO,mBAAmB,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,YAAY,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;AACxG,CAAC;AAED,SAAS,gBAAgB,CAAC,QAAgB,EAAE,KAAe,EAAE,SAAiB;IAC5E,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC5B,OAAO,KAAK,CAAC;IACf,CAAC;IACD,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAC7B,OAAO,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAChC,CAAC;IACD,IAAI,QAAQ,KAAK,UAAU,IAAI,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QAC3E,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,CAAC,SAAS,EAAE,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QACpF,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,QAAQ,KAAK,MAAM,IAAI,QAAQ,KAAK,UAAU,EAAE,CAAC;QACnD,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;QACzB,OAAO,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC;IACrC,CAAC;IACD,IAAI,QAAQ,KAAK,OAAO,IAAI,QAAQ,KAAK,MAAM,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;QACzE,OAAO,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC;IACrC,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,oBAAoB,CAAC,KAAe;IAC3C,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,KAAK,CAAC,aAAa,CAAC;SACzC,MAAM,CAAC,OAAO,CAAC;SACf,IAAI,CAAC,GAAG,CAAC;SACT,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC;SACpB,IAAI,EAAE,CAAC;AACZ,CAAC;AAED,SAAS,aAAa,CAAC,KAAuB;IAC5C,MAAM,KAAK,GAAG,sBAAsB,CAAC,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;IAC7D,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,KAAK,CAAC,MAAM,CAAC;IACtB,CAAC;IACD,OAAO,cAAc,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AACpE,CAAC;AAED,SAAS,eAAe,CAAC,KAAe,EAAE,KAAa,EAAE,QAAgB;IACvE,IAAI,SAAS,GAAG,oBAAoB,CAAC,KAAK,CAAC,CAAC;IAE5C,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAC7B,SAAS,GAAG,iBAAiB,CAAC,SAAS,CAAC,CAAC;IAC3C,CAAC;IAED,IAAI,gBAAgB,CAAC,QAAQ,EAAE,KAAK,EAAE,SAAS,CAAC,EAAE,CAAC;QACjD,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;IACxC,CAAC;IAED,OAAO,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;AAC3D,CAAC;AAED,SAAS,eAAe,CAAC,KAAa,EAAE,KAAa;IACnD,OAAO,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,iBAAiB,CAAC,KAAK,CAAC,EAAE,CAAC;AAC3D,CAAC;AAED,SAAS,mBAAmB,CAAC,IAAuB,EAAE,KAAa;IACjE,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC;IAC9D,CAAC;IACD,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;QACd,MAAM,CAAC,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC;IAC7D,CAAC;IACD,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;QAChB,MAAM,CAAC,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC;IAC/D,CAAC;IACD,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC;IAC9D,CAAC;IACD,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;QACd,MAAM,CAAC,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC;IAC7D,CAAC;IACD,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;QAClB,MAAM,CAAC,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC;IACjE,CAAC;IAED,OAAO,GAAG,UAAU,CAAC,KAAK,CAAC,QAAQ,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC;AAClH,CAAC;AAED,SAAS,kBAAkB,CAAC,KAAe,EAAE,KAAa;IACxD,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;QACnB,KAAK,YAAY;YACf,OAAO,mBAAmB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QAC3C,KAAK,gBAAgB;YACnB,OAAO,uBAAuB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QAC/C,KAAK,KAAK;YACR,OAAO,GAAG,UAAU,CAAC,KAAK,CAAC,OAAO,KAAK,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC,OAAO,EAAE,CAAC;QAClH,KAAK,MAAM;YACT,OAAO,cAAc,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QACtC,KAAK,MAAM;YACT,OAAO,cAAc,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QACtC,KAAK,QAAQ;YACX,OAAO,gBAAgB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QACxC,KAAK,MAAM;YACT,OAAO,cAAc,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QACtC,KAAK,MAAM;YACT,OAAO,cAAc,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QACtC,KAAK,OAAO;YACV,OAAO,eAAe,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QACvC,KAAK,OAAO;YACV,OAAO,eAAe,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IACzC,CAAC;AACH,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAuB;IAC/C,IAAI,KAAK,CAAC,YAAY,KAAK,MAAM,EAAE,CAAC;QAClC,OAAO,cAAc,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,gBAAgB,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,oBAAoB,CAAC,CAAC;IACtI,CAAC;IACD,IAAI,KAAK,CAAC,YAAY,KAAK,OAAO,EAAE,CAAC;QACnC,OAAO,cAAc,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,gBAAgB,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,qBAAqB,CAAC,CAAC;IACvI,CAAC;IACD,IAAI,KAAK,CAAC,YAAY,KAAK,MAAM,EAAE,CAAC;QAClC,OAAO,cAAc,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,gBAAgB,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,oBAAoB,CAAC,CAAC;IACtI,CAAC;IACD,IAAI,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,CAAC;QAC/G,OAAO,cAAc,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,gBAAgB,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,0BAA0B,CAAC,CAAC;IAC5I,CAAC;IACD,IAAI,KAAK,CAAC,YAAY,KAAK,OAAO,EAAE,CAAC;QACnC,OAAO,cAAc,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,gBAAgB,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,qBAAqB,CAAC,CAAC;IACvI,CAAC;IACD,IAAI,KAAK,CAAC,YAAY,KAAK,OAAO,EAAE,CAAC;QACnC,OAAO,cAAc,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,gBAAgB,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,qBAAqB,CAAC,CAAC;IAC7K,CAAC;IACD,OAAO,KAAK,CAAC,MAAM,CAAC;AACtB,CAAC;AAED,SAAS,uBAAuB,CAAC,KAAuB,EAAE,KAAa;IACrE,MAAM,kBAAkB,GAAG,KAAK,CAAC,YAAY,KAAK,cAAc,IAAI,KAAK,CAAC,IAAI;QAC5E,CAAC,CAAC,KAAK,CAAC,IAAI;QACZ,CAAC,CAAC,GAAG,KAAK,CAAC,YAAY,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;IACjE,MAAM,SAAS,GAAG,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,kBAAkB,IAAI,CAAC;IAChE,MAAM,YAAY,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,eAAe,CAAC,KAAK,EAAE,KAAK,GAAG,CAAC,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC;IAChH,MAAM,kBAAkB,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,eAAe,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC;IACnG,MAAM,cAAc,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,kBAAkB,CAAC,QAAQ,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC;IAC1G,MAAM,KAAK,GAAG,CAAC,GAAG,YAAY,EAAE,GAAG,kBAAkB,EAAE,GAAG,cAAc,CAAC,CAAC;IAC1E,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,GAAG,SAAS,KAAK,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC;IAC/C,CAAC;IACD,OAAO,GAAG,SAAS,KAAK,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC;AACpE,CAAC;AAED,SAAS,cAAc,CAAC,UAAmB,EAAE,KAAa;IACxD,MAAM,KAAK,GAAG,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,GAAG,UAAU,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,MAAM,GAAG,UAAU,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAChJ,OAAO,GAAG,UAAU,CAAC,KAAK,CAAC,QAAQ,UAAU,CAAC,IAAI,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC;AACrG,CAAC;AAED,SAAS,cAAc,CAAC,IAAa,EAAE,KAAa;IAClD,OAAO,GAAG,UAAU,CAAC,KAAK,CAAC,QAAQ,IAAI,CAAC,IAAI,OAAO,sBAAsB,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,GAAG,CAAC,CAAC,KAAK,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC;AAC5H,CAAC;AAED,SAAS,gBAAgB,CAAC,MAAiB,EAAE,KAAa;IACxD,OAAO,GAAG,UAAU,CAAC,KAAK,CAAC,UAAU,MAAM,CAAC,IAAI,OAAO,sBAAsB,CAAC,MAAM,CAAC,KAAK,EAAE,KAAK,GAAG,CAAC,CAAC,KAAK,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC;AAClI,CAAC;AAED,SAAS,cAAc,CAAC,IAAa,EAAE,KAAa;IAClD,OAAO,GAAG,UAAU,CAAC,KAAK,CAAC,QAAQ,IAAI,CAAC,IAAI,OAAO,sBAAsB,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,GAAG,CAAC,CAAC,KAAK,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC;AAC5H,CAAC;AAED,SAAS,cAAc,CAAC,IAAa,EAAE,KAAa;IAClD,OAAO,GAAG,UAAU,CAAC,KAAK,CAAC,QAAQ,IAAI,CAAC,IAAI,OAAO,sBAAsB,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,GAAG,CAAC,CAAC,KAAK,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC;AAC5H,CAAC;AAED,SAAS,eAAe,CAAC,KAAe,EAAE,KAAa;IACrD,OAAO,GAAG,UAAU,CAAC,KAAK,CAAC,SAAS,KAAK,CAAC,IAAI,OAAO,sBAAsB,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,GAAG,CAAC,CAAC,KAAK,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC;AAC/H,CAAC;AAED,SAAS,eAAe,CAAC,KAAe,EAAE,KAAa;IACrD,OAAO,GAAG,UAAU,CAAC,KAAK,CAAC,QAAQ,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,sBAAsB,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,GAAG,CAAC,CAAC,KAAK,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC;AACtJ,CAAC;AAED,SAAS,sBAAsB,CAAC,KAAuB,EAAE,KAAa;IACpE,MAAM,QAAQ,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,kBAAkB,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC;IAChG,MAAM,MAAM,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,eAAe,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC;IACtG,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,eAAe,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC;IACnF,MAAM,KAAK,GAAG,CAAC,GAAG,MAAM,EAAE,GAAG,MAAM,EAAE,GAAG,QAAQ,CAAC,CAAC;IAClD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,SAAS,gBAAgB,CAAC,MAAiB;IACzC,MAAM,MAAM,GAA+C,EAAE,CAAC;IAE9D,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;QAChB,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,uBAAuB,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IACpF,CAAC;IACD,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;QACpB,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,uBAAuB,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IAC5F,CAAC;IACD,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;QAC9B,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,kBAAkB,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IACtE,CAAC;IACD,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;QACpB,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,uBAAuB,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IAC5F,CAAC;IACD,KAAK,MAAM,QAAQ,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;QACxC,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,uBAAuB,CAAC,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IACrF,CAAC;IACD,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QAChC,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,kBAAkB,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IACxE,CAAC;IACD,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;QACrC,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,kBAAkB,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IAC5E,CAAC;IACD,KAAK,MAAM,UAAU,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QACtC,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,kBAAkB,CAAC,UAAU,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IAC9E,CAAC;IACD,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;QAClC,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,kBAAkB,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IAC1E,CAAC;IACD,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QAChC,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,kBAAkB,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IACxE,CAAC;IACD,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QAChC,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,kBAAkB,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IACxE,CAAC;IACD,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;QAClC,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,kBAAkB,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IAC1E,CAAC;IACD,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACpC,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,uBAAuB,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IACjF,CAAC;IACD,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACpC,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,uBAAuB,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IACjF,CAAC;IACD,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QAChC,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,uBAAuB,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IAC7E,CAAC;IACD,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QAChC,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,uBAAuB,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IAC7E,CAAC;IACD,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;QACtC,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,uBAAuB,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IACnF,CAAC;IACD,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;QAClC,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,uBAAuB,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IAC/E,CAAC;IACD,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;QACtC,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,uBAAuB,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IACnF,CAAC;IACD,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;QACrC,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,uBAAuB,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IACjF,CAAC;IACD,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QACjB,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,uBAAuB,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IACtF,CAAC;IACD,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;QAClC,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,cAAc,EAAE,QAAQ,EAAE,uBAAuB,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IACtF,CAAC;IAED,MAAM,SAAS,GAAG,cAAc,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,mBAAmB,CAAC,CAAC;IACpF,OAAO,UAAU,MAAM,CAAC,IAAI,OAAO,SAAS,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC;AAChG,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,MAAc,EAAE,OAAgB;IAC7D,MAAM,cAAc,GAAG,SAAS,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClD,MAAM,eAAe,GAAG,OAAO,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;IACvD,MAAM,YAAY,GAAG,CAAC,GAAG,cAAc,CAAC,YAAY,EAAE,GAAG,eAAe,CAAC,YAAY,CAAC,CAAC;IAEvF,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,CAAC;QAC5B,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;IAC3C,CAAC;IAED,MAAM,eAAe,GAAG,gBAAgB,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;IACjE,OAAO;QACL,MAAM,EAAE,eAAe,CAAC,MAAM;QAC9B,eAAe;QACf,YAAY;QACZ,QAAQ,EAAE,eAAe,KAAK,MAAM;KACrC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,35 @@
1
+ import { type Diagnostico } from "./diagnosticos/index.js";
2
+ import type { ModuloAst } from "./ast/tipos.js";
3
+ import type { IrModulo } from "./ir/modelos.js";
4
+ export * from "./diagnosticos/index.js";
5
+ export * from "./ast/tipos.js";
6
+ export * from "./lexer/tokens.js";
7
+ export * from "./lexer/lexer.js";
8
+ export * from "./parser/parser.js";
9
+ export * from "./semantico/analisador.js";
10
+ export * from "./semantico/estruturas.js";
11
+ export * from "./persistencia/contratos.js";
12
+ export * from "./ir/modelos.js";
13
+ export * from "./ir/conversor.js";
14
+ export * from "./formatador/index.js";
15
+ export * from "./util/arquivos.js";
16
+ export interface ResultadoCompilacao {
17
+ modulo?: ModuloAst;
18
+ ir?: IrModulo;
19
+ diagnosticos: Diagnostico[];
20
+ }
21
+ export interface FonteProjeto {
22
+ caminho: string;
23
+ codigo: string;
24
+ }
25
+ export interface ResultadoCompilacaoProjetoModulo extends ResultadoCompilacao {
26
+ caminho: string;
27
+ }
28
+ export interface ResultadoCompilacaoProjeto {
29
+ modulos: ResultadoCompilacaoProjetoModulo[];
30
+ diagnosticos: Diagnostico[];
31
+ }
32
+ export declare function compilarCodigo(codigo: string, arquivo?: string): ResultadoCompilacao;
33
+ export declare function compilarProjeto(fontes: FonteProjeto[]): ResultadoCompilacaoProjeto;
34
+ export declare function temErros(diagnosticos: Diagnostico[]): boolean;
35
+ export declare function formatarDiagnosticos(diagnosticos: Diagnostico[]): string;
@@ -0,0 +1,96 @@
1
+ import { parsear } from "./parser/parser.js";
2
+ import { analisarSemantica, criarContextoLocal } from "./semantico/analisador.js";
3
+ import { tokenizar } from "./lexer/lexer.js";
4
+ import { converterParaIr } from "./ir/conversor.js";
5
+ import { formatarDiagnostico } from "./diagnosticos/index.js";
6
+ export * from "./diagnosticos/index.js";
7
+ export * from "./ast/tipos.js";
8
+ export * from "./lexer/tokens.js";
9
+ export * from "./lexer/lexer.js";
10
+ export * from "./parser/parser.js";
11
+ export * from "./semantico/analisador.js";
12
+ export * from "./semantico/estruturas.js";
13
+ export * from "./persistencia/contratos.js";
14
+ export * from "./ir/modelos.js";
15
+ export * from "./ir/conversor.js";
16
+ export * from "./formatador/index.js";
17
+ export * from "./util/arquivos.js";
18
+ export function compilarCodigo(codigo, arquivo) {
19
+ const resultadoLexer = tokenizar(codigo, arquivo);
20
+ const resultadoParser = parsear(resultadoLexer.tokens);
21
+ const diagnosticos = [...resultadoLexer.diagnosticos, ...resultadoParser.diagnosticos];
22
+ if (!resultadoParser.modulo) {
23
+ return { diagnosticos };
24
+ }
25
+ const resultadoSemantico = analisarSemantica(resultadoParser.modulo);
26
+ diagnosticos.push(...resultadoSemantico.diagnosticos);
27
+ const ir = converterParaIr(resultadoParser.modulo, diagnosticos, resultadoSemantico.contexto);
28
+ return {
29
+ modulo: resultadoParser.modulo,
30
+ ir,
31
+ diagnosticos,
32
+ };
33
+ }
34
+ export function compilarProjeto(fontes) {
35
+ const resultadosBase = fontes.map((fonte) => {
36
+ const resultadoLexer = tokenizar(fonte.codigo, fonte.caminho);
37
+ const resultadoParser = parsear(resultadoLexer.tokens);
38
+ return {
39
+ caminho: fonte.caminho,
40
+ modulo: resultadoParser.modulo,
41
+ diagnosticos: [...resultadoLexer.diagnosticos, ...resultadoParser.diagnosticos],
42
+ };
43
+ });
44
+ const contextosLocais = new Map();
45
+ const nomesModulos = new Map();
46
+ for (const resultado of resultadosBase) {
47
+ if (!resultado.modulo) {
48
+ continue;
49
+ }
50
+ const caminhoAnterior = nomesModulos.get(resultado.modulo.nome);
51
+ if (caminhoAnterior) {
52
+ resultado.diagnosticos.push({
53
+ codigo: "SEM020",
54
+ mensagem: `Modulo "${resultado.modulo.nome}" foi declarado mais de uma vez no mesmo projeto.`,
55
+ severidade: "erro",
56
+ intervalo: resultado.modulo.intervalo,
57
+ dica: "Use nomes de modulo unicos para evitar ambiguidade de importacao.",
58
+ contexto: `Primeira ocorrencia encontrada em ${caminhoAnterior}.`,
59
+ });
60
+ continue;
61
+ }
62
+ nomesModulos.set(resultado.modulo.nome, resultado.caminho);
63
+ contextosLocais.set(resultado.modulo.nome, criarContextoLocal(resultado.modulo));
64
+ }
65
+ const modulos = resultadosBase.map((resultado) => {
66
+ if (!resultado.modulo) {
67
+ return {
68
+ caminho: resultado.caminho,
69
+ diagnosticos: resultado.diagnosticos,
70
+ };
71
+ }
72
+ const resultadoSemantico = analisarSemantica(resultado.modulo, { contextosModulos: contextosLocais });
73
+ const diagnosticos = [...resultado.diagnosticos, ...resultadoSemantico.diagnosticos];
74
+ const ir = converterParaIr(resultado.modulo, diagnosticos, resultadoSemantico.contexto);
75
+ return {
76
+ caminho: resultado.caminho,
77
+ modulo: resultado.modulo,
78
+ ir,
79
+ diagnosticos,
80
+ };
81
+ });
82
+ return {
83
+ modulos,
84
+ diagnosticos: modulos.flatMap((modulo) => modulo.diagnosticos),
85
+ };
86
+ }
87
+ export function temErros(diagnosticos) {
88
+ return diagnosticos.some((diagnostico) => diagnostico.severidade === "erro");
89
+ }
90
+ export function formatarDiagnosticos(diagnosticos) {
91
+ if (diagnosticos.length === 0) {
92
+ return "Nenhum diagnostico encontrado.";
93
+ }
94
+ return diagnosticos.map(formatarDiagnostico).join("\n");
95
+ }
96
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import type { ModuloAst } from "../ast/tipos.js";
2
+ import type { Diagnostico } from "../diagnosticos/index.js";
3
+ import type { ContextoSemantico } from "../semantico/analisador.js";
4
+ import type { IrModulo } from "./modelos.js";
5
+ export declare function converterParaIr(modulo: ModuloAst, diagnosticos: Diagnostico[], contexto?: ContextoSemantico): IrModulo;