@semacode/cli 0.8.2

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 (93) hide show
  1. package/LICENSE +22 -0
  2. package/README.md +52 -0
  3. package/dist/cpp-symbols.d.ts +10 -0
  4. package/dist/cpp-symbols.js +71 -0
  5. package/dist/cpp-symbols.js.map +1 -0
  6. package/dist/dotnet-http.d.ts +23 -0
  7. package/dist/dotnet-http.js +301 -0
  8. package/dist/dotnet-http.js.map +1 -0
  9. package/dist/drift.d.ts +74 -0
  10. package/dist/drift.js +878 -0
  11. package/dist/drift.js.map +1 -0
  12. package/dist/go-http.d.ts +23 -0
  13. package/dist/go-http.js +90 -0
  14. package/dist/go-http.js.map +1 -0
  15. package/dist/importador.d.ts +29 -0
  16. package/dist/importador.js +2094 -0
  17. package/dist/importador.js.map +1 -0
  18. package/dist/index.d.ts +2 -0
  19. package/dist/index.js +2150 -0
  20. package/dist/index.js.map +1 -0
  21. package/dist/java-http.d.ts +23 -0
  22. package/dist/java-http.js +204 -0
  23. package/dist/java-http.js.map +1 -0
  24. package/dist/projeto.d.ts +48 -0
  25. package/dist/projeto.js +560 -0
  26. package/dist/projeto.js.map +1 -0
  27. package/dist/python-http.d.ts +23 -0
  28. package/dist/python-http.js +200 -0
  29. package/dist/python-http.js.map +1 -0
  30. package/dist/rust-http.d.ts +23 -0
  31. package/dist/rust-http.js +95 -0
  32. package/dist/rust-http.js.map +1 -0
  33. package/dist/tipos.d.ts +3 -0
  34. package/dist/tipos.js +2 -0
  35. package/dist/tipos.js.map +1 -0
  36. package/dist/typescript-http.d.ts +35 -0
  37. package/dist/typescript-http.js +854 -0
  38. package/dist/typescript-http.js.map +1 -0
  39. package/logo.png +0 -0
  40. package/node_modules/@sema/gerador-dart/dist/index.d.ts +3 -0
  41. package/node_modules/@sema/gerador-dart/dist/index.js +44 -0
  42. package/node_modules/@sema/gerador-dart/dist/index.js.map +1 -0
  43. package/node_modules/@sema/gerador-dart/package.json +7 -0
  44. package/node_modules/@sema/gerador-python/dist/index.d.ts +6 -0
  45. package/node_modules/@sema/gerador-python/dist/index.js +510 -0
  46. package/node_modules/@sema/gerador-python/dist/index.js.map +1 -0
  47. package/node_modules/@sema/gerador-python/package.json +7 -0
  48. package/node_modules/@sema/gerador-typescript/dist/index.d.ts +6 -0
  49. package/node_modules/@sema/gerador-typescript/dist/index.js +646 -0
  50. package/node_modules/@sema/gerador-typescript/dist/index.js.map +1 -0
  51. package/node_modules/@sema/gerador-typescript/package.json +7 -0
  52. package/node_modules/@sema/nucleo/dist/ast/tipos.d.ts +103 -0
  53. package/node_modules/@sema/nucleo/dist/ast/tipos.js +2 -0
  54. package/node_modules/@sema/nucleo/dist/ast/tipos.js.map +1 -0
  55. package/node_modules/@sema/nucleo/dist/diagnosticos/index.d.ts +21 -0
  56. package/node_modules/@sema/nucleo/dist/diagnosticos/index.js +12 -0
  57. package/node_modules/@sema/nucleo/dist/diagnosticos/index.js.map +1 -0
  58. package/node_modules/@sema/nucleo/dist/formatador/index.d.ts +9 -0
  59. package/node_modules/@sema/nucleo/dist/formatador/index.js +289 -0
  60. package/node_modules/@sema/nucleo/dist/formatador/index.js.map +1 -0
  61. package/node_modules/@sema/nucleo/dist/index.d.ts +34 -0
  62. package/node_modules/@sema/nucleo/dist/index.js +95 -0
  63. package/node_modules/@sema/nucleo/dist/index.js.map +1 -0
  64. package/node_modules/@sema/nucleo/dist/ir/conversor.d.ts +5 -0
  65. package/node_modules/@sema/nucleo/dist/ir/conversor.js +241 -0
  66. package/node_modules/@sema/nucleo/dist/ir/conversor.js.map +1 -0
  67. package/node_modules/@sema/nucleo/dist/ir/modelos.d.ts +131 -0
  68. package/node_modules/@sema/nucleo/dist/ir/modelos.js +2 -0
  69. package/node_modules/@sema/nucleo/dist/ir/modelos.js.map +1 -0
  70. package/node_modules/@sema/nucleo/dist/lexer/lexer.d.ts +7 -0
  71. package/node_modules/@sema/nucleo/dist/lexer/lexer.js +122 -0
  72. package/node_modules/@sema/nucleo/dist/lexer/lexer.js.map +1 -0
  73. package/node_modules/@sema/nucleo/dist/lexer/tokens.d.ts +8 -0
  74. package/node_modules/@sema/nucleo/dist/lexer/tokens.js +30 -0
  75. package/node_modules/@sema/nucleo/dist/lexer/tokens.js.map +1 -0
  76. package/node_modules/@sema/nucleo/dist/parser/parser.d.ts +9 -0
  77. package/node_modules/@sema/nucleo/dist/parser/parser.js +423 -0
  78. package/node_modules/@sema/nucleo/dist/parser/parser.js.map +1 -0
  79. package/node_modules/@sema/nucleo/dist/semantico/analisador.d.ts +52 -0
  80. package/node_modules/@sema/nucleo/dist/semantico/analisador.js +837 -0
  81. package/node_modules/@sema/nucleo/dist/semantico/analisador.js.map +1 -0
  82. package/node_modules/@sema/nucleo/dist/semantico/estruturas.d.ts +99 -0
  83. package/node_modules/@sema/nucleo/dist/semantico/estruturas.js +395 -0
  84. package/node_modules/@sema/nucleo/dist/semantico/estruturas.js.map +1 -0
  85. package/node_modules/@sema/nucleo/dist/util/arquivos.d.ts +2 -0
  86. package/node_modules/@sema/nucleo/dist/util/arquivos.js +25 -0
  87. package/node_modules/@sema/nucleo/dist/util/arquivos.js.map +1 -0
  88. package/node_modules/@sema/nucleo/package.json +7 -0
  89. package/node_modules/@sema/padroes/dist/index.d.ts +20 -0
  90. package/node_modules/@sema/padroes/dist/index.js +79 -0
  91. package/node_modules/@sema/padroes/dist/index.js.map +1 -0
  92. package/node_modules/@sema/padroes/package.json +7 -0
  93. package/package.json +57 -0
@@ -0,0 +1,200 @@
1
+ function contarParenteses(texto) {
2
+ let saldo = 0;
3
+ let quote;
4
+ let escapando = false;
5
+ for (const caractere of texto) {
6
+ if (escapando) {
7
+ escapando = false;
8
+ continue;
9
+ }
10
+ if (caractere === "\\") {
11
+ escapando = true;
12
+ continue;
13
+ }
14
+ if (quote) {
15
+ if (caractere === quote) {
16
+ quote = undefined;
17
+ }
18
+ continue;
19
+ }
20
+ if (caractere === "'" || caractere === '"') {
21
+ quote = caractere;
22
+ continue;
23
+ }
24
+ if (caractere === "(") {
25
+ saldo += 1;
26
+ continue;
27
+ }
28
+ if (caractere === ")") {
29
+ saldo -= 1;
30
+ }
31
+ }
32
+ return saldo;
33
+ }
34
+ export function contarIndentacaoPython(linha) {
35
+ let total = 0;
36
+ for (const caractere of linha) {
37
+ if (caractere === " ") {
38
+ total += 1;
39
+ continue;
40
+ }
41
+ if (caractere === "\t") {
42
+ total += 4;
43
+ continue;
44
+ }
45
+ break;
46
+ }
47
+ return total;
48
+ }
49
+ function juntarCaminhoHttp(base, sufixo) {
50
+ const partes = [base ?? "", sufixo ?? ""]
51
+ .map((item) => item.trim())
52
+ .filter(Boolean)
53
+ .map((item) => item.replace(/^\/+|\/+$/g, ""));
54
+ const caminho = `/${partes.join("/")}`.replace(/\/+/g, "/");
55
+ return caminho === "//" ? "/" : caminho;
56
+ }
57
+ function detectarBlueprintsFlask(texto) {
58
+ const blueprints = new Map();
59
+ const linhas = texto.split(/\r?\n/);
60
+ let atual;
61
+ const finalizar = () => {
62
+ if (!atual) {
63
+ return;
64
+ }
65
+ const conteudo = atual.linhas.join(" ");
66
+ const prefixo = conteudo.match(/\burl_prefix\s*=\s*["']([^"']+)["']/)?.[1];
67
+ blueprints.set(atual.nome, prefixo);
68
+ atual = undefined;
69
+ };
70
+ for (const linha of linhas) {
71
+ const trim = linha.trim();
72
+ if (!trim || trim.startsWith("#")) {
73
+ continue;
74
+ }
75
+ if (atual) {
76
+ atual.linhas.push(trim);
77
+ atual.saldo += contarParenteses(trim);
78
+ if (atual.saldo <= 0) {
79
+ finalizar();
80
+ }
81
+ continue;
82
+ }
83
+ const inicio = trim.match(/^([A-Za-z_]\w*)\s*=\s*Blueprint\s*\(/);
84
+ if (!inicio) {
85
+ continue;
86
+ }
87
+ atual = {
88
+ nome: inicio[1],
89
+ linhas: [trim],
90
+ saldo: contarParenteses(trim),
91
+ };
92
+ if (atual.saldo <= 0) {
93
+ finalizar();
94
+ }
95
+ }
96
+ finalizar();
97
+ return blueprints;
98
+ }
99
+ export function extrairFuncoesPythonDecoradas(texto) {
100
+ const funcoes = [];
101
+ const linhas = texto.split(/\r?\n/);
102
+ let decoratorsPendentes = [];
103
+ let decoratorAtual;
104
+ const finalizarDecorator = () => {
105
+ if (!decoratorAtual) {
106
+ return;
107
+ }
108
+ decoratorsPendentes.push(decoratorAtual.linhas.join(" ").replace(/\s+/g, " ").trim());
109
+ decoratorAtual = undefined;
110
+ };
111
+ for (const linha of linhas) {
112
+ const trim = linha.trim();
113
+ const indentacao = contarIndentacaoPython(linha);
114
+ if (decoratorAtual) {
115
+ decoratorAtual.linhas.push(trim);
116
+ decoratorAtual.saldo += contarParenteses(trim);
117
+ if (decoratorAtual.saldo <= 0) {
118
+ finalizarDecorator();
119
+ }
120
+ continue;
121
+ }
122
+ if (!trim || trim.startsWith("#")) {
123
+ continue;
124
+ }
125
+ if (trim.startsWith("@")) {
126
+ decoratorAtual = {
127
+ linhas: [trim],
128
+ saldo: contarParenteses(trim),
129
+ };
130
+ if (decoratorAtual.saldo <= 0) {
131
+ finalizarDecorator();
132
+ }
133
+ continue;
134
+ }
135
+ const definicao = trim.match(/^(?:async\s+def|def)\s+([A-Za-z_]\w*)\s*\((.*)\)(?:\s*->\s*([^:]+))?:\s*(?:#.*)?$/);
136
+ if (definicao) {
137
+ funcoes.push({
138
+ nome: definicao[1],
139
+ parametros: definicao[2] ?? "",
140
+ retorno: definicao[3]?.trim(),
141
+ indentacao,
142
+ decorators: decoratorsPendentes,
143
+ });
144
+ decoratorsPendentes = [];
145
+ continue;
146
+ }
147
+ decoratorsPendentes = [];
148
+ }
149
+ return funcoes;
150
+ }
151
+ function extrairMetodosFlask(decorator) {
152
+ const blocoMethods = decorator.match(/\bmethods\s*=\s*\[([^\]]*)\]/i)?.[1];
153
+ if (!blocoMethods) {
154
+ return ["GET"];
155
+ }
156
+ const encontrados = [...blocoMethods.matchAll(/["']([A-Za-z]+)["']/g)]
157
+ .map((match) => match[1].toUpperCase())
158
+ .filter((metodo) => ["GET", "POST", "PUT", "PATCH", "DELETE"].includes(metodo));
159
+ return [...new Set(encontrados)];
160
+ }
161
+ export function normalizarCaminhoFlask(caminho) {
162
+ return caminho.replace(/<(?:(\w+):)?([A-Za-z_]\w*)>/g, "{$2}");
163
+ }
164
+ export function extrairParametrosCaminhoFlask(caminho) {
165
+ return [...caminho.matchAll(/<(?:(\w+):)?([A-Za-z_]\w*)>/g)].map((match) => ({
166
+ conversor: match[1] ?? undefined,
167
+ nome: match[2],
168
+ }));
169
+ }
170
+ export function extrairRotasFlaskDecoradas(texto) {
171
+ const blueprints = detectarBlueprintsFlask(texto);
172
+ const rotas = [];
173
+ for (const funcao of extrairFuncoesPythonDecoradas(texto)) {
174
+ if (funcao.indentacao > 0) {
175
+ continue;
176
+ }
177
+ for (const decorator of funcao.decorators) {
178
+ const match = decorator.match(/^@([A-Za-z_]\w*)\.route\(([\s\S]*)\)$/);
179
+ if (!match) {
180
+ continue;
181
+ }
182
+ const alvo = match[1];
183
+ const argumentos = match[2] ?? "";
184
+ const sufixo = argumentos.match(/["']([^"']+)["']/)?.[1];
185
+ const prefixo = alvo === "app" ? undefined : blueprints.get(alvo);
186
+ const metodos = extrairMetodosFlask(decorator);
187
+ for (const metodo of metodos) {
188
+ rotas.push({
189
+ nomeFuncao: funcao.nome,
190
+ parametros: funcao.parametros,
191
+ retorno: funcao.retorno,
192
+ metodo,
193
+ caminho: normalizarCaminhoFlask(juntarCaminhoHttp(prefixo, sufixo)),
194
+ });
195
+ }
196
+ }
197
+ }
198
+ return rotas;
199
+ }
200
+ //# sourceMappingURL=python-http.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"python-http.js","sourceRoot":"","sources":["../src/python-http.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ export interface ParametroRotaRust {
2
+ nome: string;
3
+ tipoSema: "Texto" | "Inteiro" | "Decimal" | "Id";
4
+ }
5
+ export interface SimboloRustExtraido {
6
+ simbolo: string;
7
+ retorno?: string;
8
+ parametros: Array<{
9
+ nome: string;
10
+ tipoTexto?: string;
11
+ obrigatorio: boolean;
12
+ }>;
13
+ }
14
+ export interface RotaRustExtraida {
15
+ origem: "rust";
16
+ metodo: string;
17
+ caminho: string;
18
+ simbolo: string;
19
+ parametros: ParametroRotaRust[];
20
+ retorno?: string;
21
+ }
22
+ export declare function extrairSimbolosRust(codigo: string): SimboloRustExtraido[];
23
+ export declare function extrairRotasRust(codigo: string): RotaRustExtraida[];
@@ -0,0 +1,95 @@
1
+ const METODOS_HTTP = new Set(["GET", "POST", "PUT", "PATCH", "DELETE"]);
2
+ function normalizarCaminhoRust(caminho) {
3
+ return caminho
4
+ .replace(/:([A-Za-z_]\w*)/g, "{$1}")
5
+ .replace(/\/+/g, "/");
6
+ }
7
+ function mapearTipoRust(tipo) {
8
+ const normalizado = (tipo ?? "").toLowerCase();
9
+ if (/^(i8|i16|i32|i64|u8|u16|u32|u64|usize|isize)$/.test(normalizado)) {
10
+ return "Inteiro";
11
+ }
12
+ if (/^(f32|f64|decimal)$/.test(normalizado)) {
13
+ return "Decimal";
14
+ }
15
+ if (/uuid|id$/.test(normalizado)) {
16
+ return "Id";
17
+ }
18
+ return "Texto";
19
+ }
20
+ function extrairParametrosAssinaturaRust(assinatura) {
21
+ return assinatura.split(",").map((parametroBruto) => {
22
+ const parametro = parametroBruto.trim();
23
+ if (!parametro || parametro === "&self" || parametro === "self") {
24
+ return undefined;
25
+ }
26
+ const [nome, tipo] = parametro.split(":").map((parte) => parte.trim());
27
+ if (!nome) {
28
+ return undefined;
29
+ }
30
+ return {
31
+ nome: nome.replace(/^mut\s+/, ""),
32
+ tipoTexto: tipo,
33
+ obrigatorio: true,
34
+ };
35
+ }).filter((item) => Boolean(item));
36
+ }
37
+ function extrairParametrosRotaRust(caminho, assinatura) {
38
+ const assinaturaMap = new Map();
39
+ for (const parametro of extrairParametrosAssinaturaRust(assinatura)) {
40
+ assinaturaMap.set(parametro.nome, parametro.tipoTexto ?? "");
41
+ }
42
+ return [...normalizarCaminhoRust(caminho).matchAll(/\{([^}]+)\}/g)].map((match) => ({
43
+ nome: match[1],
44
+ tipoSema: mapearTipoRust(assinaturaMap.get(match[1])),
45
+ }));
46
+ }
47
+ export function extrairSimbolosRust(codigo) {
48
+ const simbolos = new Map();
49
+ let implAtual;
50
+ for (const linha of codigo.split(/\r?\n/)) {
51
+ const trim = linha.trim();
52
+ const impl = trim.match(/^impl(?:<[^>]+>)?\s+([A-Za-z_]\w*)/);
53
+ if (impl) {
54
+ implAtual = impl[1];
55
+ continue;
56
+ }
57
+ if (trim.startsWith("}")) {
58
+ implAtual = undefined;
59
+ }
60
+ const funcao = trim.match(/^(?:pub\s+)?(?:async\s+)?fn\s+([A-Za-z_]\w*)\s*\(([^)]*)\)\s*(?:->\s*([^ {]+))?/);
61
+ if (!funcao) {
62
+ continue;
63
+ }
64
+ const simbolo = implAtual ? `${implAtual}.${funcao[1]}` : funcao[1];
65
+ simbolos.set(simbolo, {
66
+ simbolo,
67
+ retorno: funcao[3]?.trim(),
68
+ parametros: extrairParametrosAssinaturaRust(funcao[2] ?? ""),
69
+ });
70
+ }
71
+ return [...simbolos.values()];
72
+ }
73
+ export function extrairRotasRust(codigo) {
74
+ const rotas = new Map();
75
+ for (const match of codigo.matchAll(/\.route\(\s*"([^"]+)"\s*,\s*((?:get|post|put|patch|delete)\([A-Za-z_:][A-Za-z0-9_:]*\)(?:\.(?:get|post|put|patch|delete)\([A-Za-z_:][A-Za-z0-9_:]*\))*)\s*\)/g)) {
76
+ const caminho = normalizarCaminhoRust(match[1]);
77
+ const bloco = match[2];
78
+ for (const rota of bloco.matchAll(/\b(get|post|put|patch|delete)\(([A-Za-z_:][A-Za-z0-9_:]*)\)/g)) {
79
+ const metodo = rota[1].toUpperCase();
80
+ const simbolo = rota[2].replace(/::/g, ".");
81
+ if (!METODOS_HTTP.has(metodo)) {
82
+ continue;
83
+ }
84
+ rotas.set(`${metodo}:${caminho}:${simbolo}`, {
85
+ origem: "rust",
86
+ metodo,
87
+ caminho,
88
+ simbolo,
89
+ parametros: extrairParametrosRotaRust(caminho, ""),
90
+ });
91
+ }
92
+ }
93
+ return [...rotas.values()];
94
+ }
95
+ //# sourceMappingURL=rust-http.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rust-http.js","sourceRoot":"","sources":["../src/rust-http.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export type EstruturaSaida = "flat" | "modulos" | "backend";
2
+ export type FonteLegado = "nestjs" | "fastapi" | "flask" | "nextjs" | "firebase" | "typescript" | "python" | "dart" | "dotnet" | "java" | "go" | "rust" | "cpp";
3
+ export type ModoAdocao = "incremental";
package/dist/tipos.js ADDED
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=tipos.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tipos.js","sourceRoot":"","sources":["../src/tipos.ts"],"names":[],"mappings":""}
@@ -0,0 +1,35 @@
1
+ import ts from "typescript";
2
+ export interface ParametroRotaTypeScript {
3
+ nome: string;
4
+ tipoSema: "Texto" | "Inteiro" | "Decimal" | "Id";
5
+ }
6
+ export interface RotaTypeScriptExtraida {
7
+ origem: "nextjs" | "firebase";
8
+ metodo: string;
9
+ caminho: string;
10
+ simbolo: string;
11
+ parametros: ParametroRotaTypeScript[];
12
+ }
13
+ export interface CampoInferidoTypeScriptHttp {
14
+ nome: string;
15
+ tipoTexto?: string;
16
+ obrigatorio: boolean;
17
+ }
18
+ export interface ExportacaoTypeScriptHttp {
19
+ corpo?: ts.Block;
20
+ retorno?: string;
21
+ parametros: readonly ts.ParameterDeclaration[];
22
+ declaracao: ts.FunctionLikeDeclarationBase;
23
+ }
24
+ export interface SemanticaHandlerTypeScriptHttp {
25
+ query: CampoInferidoTypeScriptHttp[];
26
+ body: CampoInferidoTypeScriptHttp[];
27
+ bodyTipoTexto?: string;
28
+ response: CampoInferidoTypeScriptHttp[];
29
+ responseTipoTexto?: string;
30
+ statuses: number[];
31
+ errorStatuses: number[];
32
+ }
33
+ export declare function localizarExportacaoTypeScriptHttp(sourceFile: ts.SourceFile, nomeExportado: string): ExportacaoTypeScriptHttp | undefined;
34
+ export declare function inferirSemanticaHandlerTypeScriptHttp(sourceFile: ts.SourceFile, nomeExportado: string): SemanticaHandlerTypeScriptHttp | undefined;
35
+ export declare function extrairRotasTypeScriptHttp(sourceFile: ts.SourceFile, relacaoArquivo: string): RotaTypeScriptExtraida[];