@semacode/cli 1.5.9 → 1.5.11

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 (48) hide show
  1. package/README.md +4 -1
  2. package/SEMA_BRIEF.curto.txt +3 -3
  3. package/SEMA_BRIEF.md +5 -5
  4. package/SEMA_BRIEF.micro.txt +2 -2
  5. package/SEMA_INDEX.json +50 -32
  6. package/dist/drift.d.ts +3 -3
  7. package/dist/drift.js +111 -5
  8. package/dist/drift.js.map +1 -1
  9. package/dist/importador.d.ts +1 -1
  10. package/dist/importador.js +200 -1
  11. package/dist/importador.js.map +1 -1
  12. package/dist/index.js +13 -5
  13. package/dist/index.js.map +1 -1
  14. package/dist/lua-symbols.d.ts +6 -4
  15. package/dist/lua-symbols.js +74 -54
  16. package/dist/lua-symbols.js.map +1 -1
  17. package/dist/php-symbols.d.ts +24 -0
  18. package/dist/php-symbols.js +375 -0
  19. package/dist/php-symbols.js.map +1 -0
  20. package/dist/projeto.js +20 -0
  21. package/dist/projeto.js.map +1 -1
  22. package/dist/tipos.d.ts +1 -1
  23. package/docs/AGENT_STARTER.md +3 -3
  24. package/docs/cli.md +5 -1
  25. package/docs/env.md +3 -3
  26. package/docs/fluxo-pratico-ia-sema.md +1 -1
  27. package/docs/integracao-com-ia.md +2 -0
  28. package/docs/mcp.md +2 -0
  29. package/docs/sintaxe.md +65 -0
  30. package/node_modules/@sema/gerador-css/package.json +1 -1
  31. package/node_modules/@sema/gerador-dart/package.json +1 -1
  32. package/node_modules/@sema/gerador-html/package.json +1 -1
  33. package/node_modules/@sema/gerador-javascript/package.json +1 -1
  34. package/node_modules/@sema/gerador-lua/package.json +1 -1
  35. package/node_modules/@sema/gerador-python/package.json +1 -1
  36. package/node_modules/@sema/gerador-typescript/package.json +1 -1
  37. package/node_modules/@sema/nucleo/dist/ast/tipos.d.ts +1 -1
  38. package/node_modules/@sema/nucleo/dist/ir/conversor.js +8 -0
  39. package/node_modules/@sema/nucleo/dist/ir/conversor.js.map +1 -1
  40. package/node_modules/@sema/nucleo/dist/ir/modelos.d.ts +3 -3
  41. package/node_modules/@sema/nucleo/dist/parser/parser.js +4 -0
  42. package/node_modules/@sema/nucleo/dist/parser/parser.js.map +1 -1
  43. package/node_modules/@sema/nucleo/dist/semantico/analisador.d.ts +2 -2
  44. package/node_modules/@sema/nucleo/dist/semantico/analisador.js +5 -1
  45. package/node_modules/@sema/nucleo/dist/semantico/analisador.js.map +1 -1
  46. package/node_modules/@sema/nucleo/package.json +1 -1
  47. package/node_modules/@sema/padroes/package.json +1 -1
  48. package/package.json +10 -10
@@ -1,68 +1,88 @@
1
- function limparLinhaLua(linha) {
2
- return linha.replace(/--.*$/, "").trim();
1
+ const PALAVRAS_RESERVADAS_LUA = new Set([
2
+ "and",
3
+ "break",
4
+ "do",
5
+ "else",
6
+ "elseif",
7
+ "end",
8
+ "false",
9
+ "for",
10
+ "function",
11
+ "goto",
12
+ "if",
13
+ "in",
14
+ "local",
15
+ "nil",
16
+ "not",
17
+ "or",
18
+ "repeat",
19
+ "return",
20
+ "then",
21
+ "true",
22
+ "until",
23
+ "while",
24
+ ]);
25
+ function removerComentariosLua(codigo) {
26
+ return codigo
27
+ .replace(/--\[\[[\s\S]*?\]\]/g, "")
28
+ .replace(/--[^\r\n]*/g, "");
3
29
  }
4
- function contarOcorrencias(texto, padrao) {
5
- return texto.match(padrao)?.length ?? 0;
6
- }
7
- function contarAberturasLua(linha) {
8
- let total = contarOcorrencias(linha, /\bfunction\b/g) + contarOcorrencias(linha, /\brepeat\b/g);
9
- if (/\bif\b[\s\S]*\bthen\b/.test(linha)) {
10
- total += 1;
11
- }
12
- if (/\b(?:for|while)\b[\s\S]*\bdo\b/.test(linha)) {
13
- total += 1;
14
- }
15
- if (/^\s*do\b/.test(linha)) {
16
- total += 1;
17
- }
18
- return total;
30
+ function normalizarSimboloLua(simbolo) {
31
+ return simbolo
32
+ .replace(/:/g, ".")
33
+ .replace(/\.+/g, ".")
34
+ .replace(/^\.+|\.+$/g, "");
19
35
  }
20
- function contarFechamentosLua(linha) {
21
- return contarOcorrencias(linha, /\bend\b/g) + contarOcorrencias(linha, /\buntil\b/g);
36
+ function simboloLuaValido(simbolo) {
37
+ const partes = simbolo.split(".").filter(Boolean);
38
+ return partes.length > 0
39
+ && partes.every((parte) => /^[A-Za-z_]\w*$/.test(parte) && !PALAVRAS_RESERVADAS_LUA.has(parte));
22
40
  }
23
- function extrairParametrosLua(parametros) {
41
+ function dividirParametrosLua(parametros) {
24
42
  return parametros
25
43
  .split(",")
26
44
  .map((item) => item.trim())
27
- .filter((item) => item && item !== "self" && item !== "...")
28
- .map((nome) => ({ nome, obrigatorio: true }));
45
+ .filter(Boolean)
46
+ .filter((item) => item !== "..." && item !== "self")
47
+ .map((item) => item.replace(/\s*=.*$/, "").trim())
48
+ .filter((item) => /^[A-Za-z_]\w*$/.test(item))
49
+ .map((nome) => ({
50
+ nome,
51
+ obrigatorio: true,
52
+ }));
29
53
  }
30
- function normalizarSimboloLua(simbolo) {
31
- return simbolo.replace(/:/g, ".");
54
+ function registrarSimboloLua(simbolos, simboloBruto, parametros) {
55
+ const simbolo = normalizarSimboloLua(simboloBruto);
56
+ if (!simboloLuaValido(simbolo)) {
57
+ return;
58
+ }
59
+ simbolos.set(simbolo, {
60
+ simbolo,
61
+ parametros: dividirParametrosLua(parametros),
62
+ });
32
63
  }
33
64
  export function extrairSimbolosLua(codigo) {
65
+ const texto = removerComentariosLua(codigo);
34
66
  const simbolos = new Map();
35
- let profundidade = 0;
36
- for (const linhaBruta of codigo.split(/\r?\n/)) {
37
- const linha = limparLinhaLua(linhaBruta);
38
- if (!linha) {
39
- continue;
40
- }
41
- if (profundidade === 0) {
42
- const definicaoDireta = linha.match(/^(?:local\s+)?function\s+([A-Za-z_]\w*(?:[.:][A-Za-z_]\w*)*)\s*\(([^)]*)\)/);
43
- if (definicaoDireta) {
44
- const simbolo = normalizarSimboloLua(definicaoDireta[1]);
45
- simbolos.set(simbolo, {
46
- simbolo,
47
- parametros: extrairParametrosLua(definicaoDireta[2] ?? ""),
48
- });
49
- }
50
- const atribuicao = linha.match(/^(?:local\s+)?([A-Za-z_]\w*(?:[.:][A-Za-z_]\w*)*)\s*=\s*function\s*\(([^)]*)\)/);
51
- if (atribuicao) {
52
- const simbolo = normalizarSimboloLua(atribuicao[1]);
53
- if (!simbolos.has(simbolo)) {
54
- simbolos.set(simbolo, {
55
- simbolo,
56
- parametros: extrairParametrosLua(atribuicao[2] ?? ""),
57
- });
58
- }
59
- }
60
- }
61
- profundidade += contarAberturasLua(linha) - contarFechamentosLua(linha);
62
- if (profundidade < 0) {
63
- profundidade = 0;
67
+ for (const match of texto.matchAll(/(?:^|\n)\s*(?:local\s+)?function\s+([A-Za-z_]\w*(?:(?:\.|:)[A-Za-z_]\w*)*)\s*\(([^)]*)\)/g)) {
68
+ registrarSimboloLua(simbolos, match[1], match[2] ?? "");
69
+ }
70
+ for (const match of texto.matchAll(/(?:^|\n)\s*(?:local\s+)?([A-Za-z_]\w*)\s*=\s*\{([\s\S]*?)^\s*\}/gm)) {
71
+ const tabela = match[1];
72
+ const corpo = match[2] ?? "";
73
+ for (const membro of corpo.matchAll(/(?:^|[\s,{])([A-Za-z_]\w*)\s*=\s*function\s*\(([^)]*)\)/g)) {
74
+ registrarSimboloLua(simbolos, `${tabela}.${membro[1]}`, membro[2] ?? "");
64
75
  }
65
76
  }
66
- return [...simbolos.values()];
77
+ for (const match of texto.matchAll(/(?:^|\n)\s*([A-Za-z_]\w*(?:(?:\.|:)[A-Za-z_]\w*)*)\s*=\s*function\s*\(([^)]*)\)/g)) {
78
+ registrarSimboloLua(simbolos, match[1], match[2] ?? "");
79
+ }
80
+ for (const match of texto.matchAll(/(?:^|\n)\s*([A-Za-z_]\w*)\s*\[\s*["']([A-Za-z_]\w*)["']\s*\]\s*=\s*function\s*\(([^)]*)\)/g)) {
81
+ registrarSimboloLua(simbolos, `${match[1]}.${match[2]}`, match[3] ?? "");
82
+ }
83
+ for (const match of texto.matchAll(/(?:^|[\s,{])([A-Za-z_]\w*)\s*=\s*function\s*\(([^)]*)\)/g)) {
84
+ registrarSimboloLua(simbolos, match[1], match[2] ?? "");
85
+ }
86
+ return [...simbolos.values()].sort((a, b) => a.simbolo.localeCompare(b.simbolo, "pt-BR"));
67
87
  }
68
88
  //# sourceMappingURL=lua-symbols.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"lua-symbols.js","sourceRoot":"","sources":["../src/lua-symbols.ts"],"names":[],"mappings":"AAKA,SAAS,cAAc,CAAC,KAAa;IACnC,OAAO,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;AAC3C,CAAC;AAED,SAAS,iBAAiB,CAAC,KAAa,EAAE,MAAc;IACtD,OAAO,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC,CAAC;AAC1C,CAAC;AAED,SAAS,kBAAkB,CAAC,KAAa;IACvC,IAAI,KAAK,GAAG,iBAAiB,CAAC,KAAK,EAAE,eAAe,CAAC,GAAG,iBAAiB,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC;IAChG,IAAI,uBAAuB,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QACxC,KAAK,IAAI,CAAC,CAAC;IACb,CAAC;IACD,IAAI,gCAAgC,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QACjD,KAAK,IAAI,CAAC,CAAC;IACb,CAAC;IACD,IAAI,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QAC3B,KAAK,IAAI,CAAC,CAAC;IACb,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,oBAAoB,CAAC,KAAa;IACzC,OAAO,iBAAiB,CAAC,KAAK,EAAE,UAAU,CAAC,GAAG,iBAAiB,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;AACvF,CAAC;AAED,SAAS,oBAAoB,CAAC,UAAkB;IAC9C,OAAO,UAAU;SACd,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;SAC1B,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,IAAI,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,KAAK,CAAC;SAC3D,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;AAClD,CAAC;AAED,SAAS,oBAAoB,CAAC,OAAe;IAC3C,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;AACpC,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,MAAc;IAC/C,MAAM,QAAQ,GAAG,IAAI,GAAG,EAA8B,CAAC;IACvD,IAAI,YAAY,GAAG,CAAC,CAAC;IAErB,KAAK,MAAM,UAAU,IAAI,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;QAC/C,MAAM,KAAK,GAAG,cAAc,CAAC,UAAU,CAAC,CAAC;QACzC,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,SAAS;QACX,CAAC;QAED,IAAI,YAAY,KAAK,CAAC,EAAE,CAAC;YACvB,MAAM,eAAe,GAAG,KAAK,CAAC,KAAK,CAAC,4EAA4E,CAAC,CAAC;YAClH,IAAI,eAAe,EAAE,CAAC;gBACpB,MAAM,OAAO,GAAG,oBAAoB,CAAC,eAAe,CAAC,CAAC,CAAE,CAAC,CAAC;gBAC1D,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE;oBACpB,OAAO;oBACP,UAAU,EAAE,oBAAoB,CAAC,eAAe,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;iBAC3D,CAAC,CAAC;YACL,CAAC;YAED,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC,gFAAgF,CAAC,CAAC;YACjH,IAAI,UAAU,EAAE,CAAC;gBACf,MAAM,OAAO,GAAG,oBAAoB,CAAC,UAAU,CAAC,CAAC,CAAE,CAAC,CAAC;gBACrD,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;oBAC3B,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE;wBACpB,OAAO;wBACP,UAAU,EAAE,oBAAoB,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;qBACtD,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;QACH,CAAC;QAED,YAAY,IAAI,kBAAkB,CAAC,KAAK,CAAC,GAAG,oBAAoB,CAAC,KAAK,CAAC,CAAC;QACxE,IAAI,YAAY,GAAG,CAAC,EAAE,CAAC;YACrB,YAAY,GAAG,CAAC,CAAC;QACnB,CAAC;IACH,CAAC;IAED,OAAO,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;AAChC,CAAC"}
1
+ {"version":3,"file":"lua-symbols.js","sourceRoot":"","sources":["../src/lua-symbols.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ export interface ParametroPhpExtraido {
2
+ nome: string;
3
+ obrigatorio: boolean;
4
+ tipoTexto?: string;
5
+ }
6
+ export interface ParametroRotaPhp {
7
+ nome: string;
8
+ tipoSema: "Texto" | "Inteiro" | "Decimal" | "Id";
9
+ }
10
+ export interface SimboloPhpExtraido {
11
+ simbolo: string;
12
+ retorno?: string;
13
+ parametros: ParametroPhpExtraido[];
14
+ }
15
+ export interface RotaPhpExtraida {
16
+ origem: "php";
17
+ metodo: string;
18
+ caminho: string;
19
+ simbolo: string;
20
+ parametros: ParametroRotaPhp[];
21
+ retorno?: string;
22
+ }
23
+ export declare function extrairSimbolosPhp(codigo: string): SimboloPhpExtraido[];
24
+ export declare function extrairRotasPhp(codigo: string): RotaPhpExtraida[];
@@ -0,0 +1,375 @@
1
+ const METODOS_HTTP = new Set(["GET", "POST", "PUT", "PATCH", "DELETE"]);
2
+ const METODOS_RECURSO_LARAVEL = [
3
+ { metodo: "GET", sufixo: "", acao: "index" },
4
+ { metodo: "POST", sufixo: "", acao: "store" },
5
+ { metodo: "GET", sufixo: "/{id}", acao: "show" },
6
+ { metodo: "PUT", sufixo: "/{id}", acao: "update" },
7
+ { metodo: "PATCH", sufixo: "/{id}", acao: "update" },
8
+ { metodo: "DELETE", sufixo: "/{id}", acao: "destroy" },
9
+ ];
10
+ function removerComentariosPhp(codigo) {
11
+ return codigo
12
+ .replace(/<\?(?:php)?|(\?>)/gi, "")
13
+ .replace(/\/\*[\s\S]*?\*\//g, "")
14
+ .replace(/(^|[^\:])\/\/[^\r\n]*/g, "$1")
15
+ .replace(/#[^\[\r\n][^\r\n]*/g, "");
16
+ }
17
+ function contarChar(texto, alvo) {
18
+ return [...texto].filter((char) => char === alvo).length;
19
+ }
20
+ function normalizarNamespacePhp(valor) {
21
+ return (valor ?? "")
22
+ .replace(/^\\+|\\+$/g, "")
23
+ .replace(/\\/g, ".")
24
+ .replace(/::/g, ".")
25
+ .replace(/\.+/g, ".")
26
+ .replace(/^\.+|\.+$/g, "");
27
+ }
28
+ function normalizarSimboloPhp(valor) {
29
+ return normalizarNamespacePhp(valor)
30
+ .replace(/\$\b/g, "")
31
+ .replace(/\.+/g, ".")
32
+ .replace(/^\.+|\.+$/g, "");
33
+ }
34
+ function dividirListaUsePhp(declaracao) {
35
+ const partes = [];
36
+ let atual = "";
37
+ let profundidade = 0;
38
+ for (const caractere of declaracao) {
39
+ if (caractere === "," && profundidade === 0) {
40
+ if (atual.trim()) {
41
+ partes.push(atual.trim());
42
+ }
43
+ atual = "";
44
+ continue;
45
+ }
46
+ if (caractere === "{") {
47
+ profundidade += 1;
48
+ }
49
+ else if (caractere === "}" && profundidade > 0) {
50
+ profundidade -= 1;
51
+ }
52
+ atual += caractere;
53
+ }
54
+ if (atual.trim()) {
55
+ partes.push(atual.trim());
56
+ }
57
+ return partes;
58
+ }
59
+ function registrarUsePhp(imports, item) {
60
+ const alias = item.match(/\s+as\s+([A-Za-z_]\w*)$/i)?.[1];
61
+ const semAlias = item.replace(/\s+as\s+[A-Za-z_]\w*$/i, "").trim();
62
+ const completo = normalizarNamespacePhp(semAlias);
63
+ const nome = alias ?? completo.split(".").at(-1);
64
+ if (nome && completo) {
65
+ imports.set(nome, completo);
66
+ }
67
+ }
68
+ function extrairImportsPhp(codigo) {
69
+ const imports = new Map();
70
+ for (const match of codigo.matchAll(/\buse\s+(?!function\b|const\b)([^;]+);/gi)) {
71
+ const declaracao = match[1].trim();
72
+ const grupo = declaracao.match(/^(.+?)\\\{(.+)\}$/);
73
+ if (grupo) {
74
+ const base = grupo[1];
75
+ for (const item of dividirListaUsePhp(grupo[2])) {
76
+ registrarUsePhp(imports, `${base}\\${item}`);
77
+ }
78
+ continue;
79
+ }
80
+ for (const item of dividirListaUsePhp(declaracao)) {
81
+ registrarUsePhp(imports, item);
82
+ }
83
+ }
84
+ return imports;
85
+ }
86
+ function resolverClassePhp(classe, imports) {
87
+ const normalizada = normalizarNamespacePhp(classe);
88
+ const partes = normalizada.split(".").filter(Boolean);
89
+ const primeiro = partes[0];
90
+ if (primeiro && imports.has(primeiro)) {
91
+ return [imports.get(primeiro), ...partes.slice(1)].filter(Boolean).join(".");
92
+ }
93
+ return normalizada;
94
+ }
95
+ function juntarSimbolo(...partes) {
96
+ return partes.map(normalizarNamespacePhp).filter(Boolean).join(".");
97
+ }
98
+ function normalizarCaminhoPhp(caminho) {
99
+ const semAspas = caminho.trim().replace(/^['"]|['"]$/g, "");
100
+ return `/${semAspas.replace(/^\/+|\/+$/g, "")}`
101
+ .replace(/:([A-Za-z_]\w*)/g, "{$1}")
102
+ .replace(/\{([A-Za-z_]\w*)\??\}/g, "{$1}")
103
+ .replace(/\/+/g, "/");
104
+ }
105
+ function juntarCaminho(base, sufixo) {
106
+ const partes = [base, sufixo]
107
+ .map((parte) => parte?.trim())
108
+ .filter((parte) => Boolean(parte))
109
+ .map((parte) => parte.replace(/^\/+|\/+$/g, ""));
110
+ return normalizarCaminhoPhp(partes.join("/"));
111
+ }
112
+ function mapearTipoRotaPhp(tipo) {
113
+ const normalizado = (tipo ?? "").replace(/^\?/, "").replace(/^\\+/, "").toLowerCase();
114
+ if (/^(int|integer)$/.test(normalizado)) {
115
+ return "Inteiro";
116
+ }
117
+ if (/^(float|double|decimal)$/.test(normalizado)) {
118
+ return "Decimal";
119
+ }
120
+ if (/uuid|id$/.test(normalizado)) {
121
+ return "Id";
122
+ }
123
+ return "Texto";
124
+ }
125
+ function dividirParametrosPhp(parametros) {
126
+ const encontrados = [];
127
+ for (const parametro of parametros.split(",")) {
128
+ const item = parametro.trim();
129
+ if (!item) {
130
+ continue;
131
+ }
132
+ const normalizado = item
133
+ .replace(/#\[[^\]]+\]\s*/g, "")
134
+ .replace(/=.*$/, "")
135
+ .replace(/\b(?:public|protected|private|readonly)\s+/g, "")
136
+ .replace(/&/g, "")
137
+ .replace(/\.\.\./g, "")
138
+ .trim();
139
+ const match = normalizado.match(/^(?:(?<tipo>[?\\A-Za-z_][\\A-Za-z0-9_|.[\]?]*(?:\s*\|\s*[?\\A-Za-z_][\\A-Za-z0-9_|.[\]?]*)*)\s+)?\$(?<nome>[A-Za-z_]\w*)$/);
140
+ if (!match?.groups?.["nome"]) {
141
+ continue;
142
+ }
143
+ const tipoTexto = match.groups["tipo"]?.replace(/\s+/g, "") || undefined;
144
+ encontrados.push({
145
+ nome: match.groups["nome"],
146
+ ...(tipoTexto ? { tipoTexto } : {}),
147
+ obrigatorio: !tipoTexto?.startsWith("?"),
148
+ });
149
+ }
150
+ return encontrados;
151
+ }
152
+ function extrairParametrosRotaPhp(caminho, parametros = []) {
153
+ const tipos = new Map(parametros.map((parametro) => [parametro.nome, parametro.tipoTexto]));
154
+ return [...normalizarCaminhoPhp(caminho).matchAll(/\{([^}]+)\}/g)].map((match) => {
155
+ const nome = match[1];
156
+ return {
157
+ nome,
158
+ tipoSema: mapearTipoRotaPhp(tipos.get(nome)),
159
+ };
160
+ });
161
+ }
162
+ function extrairAtributosPhp(linhas, inicio) {
163
+ const atributos = [];
164
+ let indice = inicio;
165
+ while (indice < linhas.length) {
166
+ const linha = linhas[indice].trim();
167
+ if (!linha.startsWith("#[")) {
168
+ break;
169
+ }
170
+ let atual = linha;
171
+ let saldo = contarChar(linha, "[") - contarChar(linha, "]");
172
+ while (saldo > 0 && indice + 1 < linhas.length) {
173
+ indice += 1;
174
+ const complemento = linhas[indice].trim();
175
+ atual += ` ${complemento}`;
176
+ saldo += contarChar(complemento, "[") - contarChar(complemento, "]");
177
+ }
178
+ atributos.push(atual);
179
+ indice += 1;
180
+ }
181
+ return { atributos, proximoIndice: indice };
182
+ }
183
+ function extrairCaminhoAtributoPhp(atributo) {
184
+ return atributo.match(/(?:path\s*:\s*)?["']([^"']+)["']/i)?.[1];
185
+ }
186
+ function extrairMetodosAtributoPhp(atributo) {
187
+ const direto = atributo.match(/#\[\s*(?:[A-Za-z_\\][A-Za-z0-9_\\]*\\)?(Get|Post|Put|Patch|Delete)\b/i)?.[1]?.toUpperCase();
188
+ if (direto && METODOS_HTTP.has(direto)) {
189
+ return [direto];
190
+ }
191
+ const encontrados = [...atributo.matchAll(/["'](GET|POST|PUT|PATCH|DELETE)["']/gi)]
192
+ .map((match) => match[1].toUpperCase())
193
+ .filter((metodo) => METODOS_HTTP.has(metodo));
194
+ return encontrados.length > 0 ? [...new Set(encontrados)] : [];
195
+ }
196
+ function registrarSimbolo(simbolos, simbolo, parametros, retorno) {
197
+ const normalizado = normalizarSimboloPhp(simbolo);
198
+ if (!normalizado) {
199
+ return;
200
+ }
201
+ simbolos.set(normalizado, {
202
+ simbolo: normalizado,
203
+ retorno: retorno?.replace(/[;{].*$/, "").trim() || undefined,
204
+ parametros: dividirParametrosPhp(parametros),
205
+ });
206
+ }
207
+ function extrairSimboloHandlerPhp(handler, imports = new Map()) {
208
+ const arrayClass = handler.match(/\[\s*([A-Za-z_\\][A-Za-z0-9_\\]*)::class\s*,\s*["']([A-Za-z_]\w*)["']\s*\]/);
209
+ if (arrayClass) {
210
+ return normalizarSimboloPhp(`${resolverClassePhp(arrayClass[1], imports)}.${arrayClass[2]}`);
211
+ }
212
+ const stringController = handler.match(/["']([A-Za-z_\\][A-Za-z0-9_\\]*)@([A-Za-z_]\w*)["']/);
213
+ if (stringController) {
214
+ return normalizarSimboloPhp(`${resolverClassePhp(stringController[1], imports)}.${stringController[2]}`);
215
+ }
216
+ const invokable = handler.match(/([A-Za-z_\\][A-Za-z0-9_\\]*)::class/);
217
+ if (invokable) {
218
+ return normalizarSimboloPhp(`${resolverClassePhp(invokable[1], imports)}.__invoke`);
219
+ }
220
+ const callable = handler.match(/([A-Za-z_\\][A-Za-z0-9_\\]*)::([A-Za-z_]\w*)/);
221
+ if (callable) {
222
+ return normalizarSimboloPhp(`${resolverClassePhp(callable[1], imports)}.${callable[2]}`);
223
+ }
224
+ return undefined;
225
+ }
226
+ function registrarRota(rotas, metodo, caminho, simbolo, parametros = [], retorno) {
227
+ const metodoNormalizado = metodo.toUpperCase();
228
+ if (!METODOS_HTTP.has(metodoNormalizado)) {
229
+ return;
230
+ }
231
+ const caminhoNormalizado = normalizarCaminhoPhp(caminho);
232
+ const simboloNormalizado = normalizarSimboloPhp(simbolo);
233
+ if (!simboloNormalizado) {
234
+ return;
235
+ }
236
+ rotas.set(`${metodoNormalizado}:${caminhoNormalizado}:${simboloNormalizado}`, {
237
+ origem: "php",
238
+ metodo: metodoNormalizado,
239
+ caminho: caminhoNormalizado,
240
+ simbolo: simboloNormalizado,
241
+ parametros: extrairParametrosRotaPhp(caminhoNormalizado, parametros),
242
+ retorno,
243
+ });
244
+ }
245
+ export function extrairSimbolosPhp(codigo) {
246
+ const simbolos = new Map();
247
+ const linhas = removerComentariosPhp(codigo).split(/\r?\n/);
248
+ const pilhaClasses = [];
249
+ let classePendente;
250
+ let namespaceAtual = "";
251
+ let profundidade = 0;
252
+ for (let indice = 0; indice < linhas.length; indice += 1) {
253
+ const linhaOriginal = linhas[indice];
254
+ const linhaTrim = linhaOriginal.trim();
255
+ const namespace = linhaTrim.match(/^namespace\s+([^;{]+)[;{]/);
256
+ if (namespace) {
257
+ namespaceAtual = normalizarNamespacePhp(namespace[1]);
258
+ }
259
+ if (classePendente && linhaTrim.startsWith("{")) {
260
+ pilhaClasses.push(classePendente);
261
+ classePendente = undefined;
262
+ }
263
+ const { atributos, proximoIndice } = extrairAtributosPhp(linhas, indice);
264
+ if (atributos.length > 0) {
265
+ indice = proximoIndice;
266
+ }
267
+ const linha = (linhas[indice] ?? linhaOriginal).trim();
268
+ const classe = linha.match(/\b(?:abstract\s+|final\s+)?(?:class|trait|interface|enum)\s+([A-Za-z_]\w*)/);
269
+ if (classe) {
270
+ const entrada = { nome: classe[1], profundidade: profundidade + 1 };
271
+ if (linha.includes("{")) {
272
+ pilhaClasses.push(entrada);
273
+ }
274
+ else {
275
+ classePendente = entrada;
276
+ }
277
+ }
278
+ const metodo = linha.match(/\b(?:public|protected|private)?\s*(?:static\s+)?function\s+([A-Za-z_]\w*)\s*\(([^)]*)\)\s*(?::\s*([^;{]+))?/);
279
+ if (metodo) {
280
+ const classeAtual = pilhaClasses[pilhaClasses.length - 1]?.nome;
281
+ registrarSimbolo(simbolos, juntarSimbolo(namespaceAtual, classeAtual, metodo[1]), metodo[2] ?? "", metodo[3]);
282
+ }
283
+ for (const closure of linha.matchAll(/\$([A-Za-z_]\w*)\s*=\s*(?:static\s+)?function\s*\(([^)]*)\)\s*(?::\s*([^;{]+))?/g)) {
284
+ registrarSimbolo(simbolos, juntarSimbolo(namespaceAtual, closure[1]), closure[2] ?? "", closure[3]);
285
+ }
286
+ profundidade += contarChar(linha, "{") - contarChar(linha, "}");
287
+ while (pilhaClasses.length > 0 && profundidade < pilhaClasses[pilhaClasses.length - 1].profundidade) {
288
+ pilhaClasses.pop();
289
+ }
290
+ }
291
+ return [...simbolos.values()].sort((a, b) => a.simbolo.localeCompare(b.simbolo, "pt-BR"));
292
+ }
293
+ export function extrairRotasPhp(codigo) {
294
+ const rotas = new Map();
295
+ const texto = removerComentariosPhp(codigo);
296
+ const imports = extrairImportsPhp(texto);
297
+ const linhas = texto.split(/\r?\n/);
298
+ const pilhaClasses = [];
299
+ let classePendente;
300
+ let namespaceAtual = "";
301
+ let profundidade = 0;
302
+ for (const match of texto.matchAll(/\bRoute::(get|post|put|patch|delete)\s*\(\s*["']([^"']+)["']\s*,\s*([\s\S]*?)\)\s*;/gi)) {
303
+ const simbolo = extrairSimboloHandlerPhp(match[3] ?? "", imports);
304
+ if (simbolo) {
305
+ registrarRota(rotas, match[1], match[2], simbolo);
306
+ }
307
+ }
308
+ for (const match of texto.matchAll(/\$[A-Za-z_]\w*->(get|post|put|patch|delete)\s*\(\s*["']([^"']+)["']\s*,\s*([\s\S]*?)\)\s*;/gi)) {
309
+ const simbolo = extrairSimboloHandlerPhp(match[3] ?? "", imports);
310
+ if (simbolo) {
311
+ registrarRota(rotas, match[1], match[2], simbolo);
312
+ }
313
+ }
314
+ for (const match of texto.matchAll(/\bRoute::(?:apiResource|resource)\s*\(\s*["']([^"']+)["']\s*,\s*([A-Za-z_\\][A-Za-z0-9_\\]*)::class/gi)) {
315
+ const recurso = match[1];
316
+ const classe = resolverClassePhp(match[2], imports);
317
+ for (const rota of METODOS_RECURSO_LARAVEL) {
318
+ registrarRota(rotas, rota.metodo, juntarCaminho(recurso, rota.sufixo), `${classe}.${rota.acao}`);
319
+ }
320
+ }
321
+ for (let indice = 0; indice < linhas.length; indice += 1) {
322
+ const linhaOriginal = linhas[indice];
323
+ const linhaTrim = linhaOriginal.trim();
324
+ const namespace = linhaTrim.match(/^namespace\s+([^;{]+)[;{]/);
325
+ if (namespace) {
326
+ namespaceAtual = normalizarNamespacePhp(namespace[1]);
327
+ }
328
+ if (classePendente && linhaTrim.startsWith("{")) {
329
+ pilhaClasses.push(classePendente);
330
+ classePendente = undefined;
331
+ }
332
+ const { atributos, proximoIndice } = extrairAtributosPhp(linhas, indice);
333
+ if (atributos.length > 0) {
334
+ indice = proximoIndice;
335
+ }
336
+ const linha = (linhas[indice] ?? linhaOriginal).trim();
337
+ const caminhoClasse = atributos.find((atributo) => /#\[\s*(?:[A-Za-z_\\][A-Za-z0-9_\\]*\\)?Route\b/i.test(atributo))
338
+ ? extrairCaminhoAtributoPhp(atributos.find((atributo) => /#\[\s*(?:[A-Za-z_\\][A-Za-z0-9_\\]*\\)?Route\b/i.test(atributo)))
339
+ : undefined;
340
+ const classe = linha.match(/\b(?:abstract\s+|final\s+)?(?:class|trait|interface|enum)\s+([A-Za-z_]\w*)/);
341
+ if (classe) {
342
+ const entrada = { nome: classe[1], profundidade: profundidade + 1, caminhoBase: caminhoClasse };
343
+ if (linha.includes("{")) {
344
+ pilhaClasses.push(entrada);
345
+ }
346
+ else {
347
+ classePendente = entrada;
348
+ }
349
+ }
350
+ const metodo = linha.match(/\b(?:public|protected|private)?\s*(?:static\s+)?function\s+([A-Za-z_]\w*)\s*\(([^)]*)\)\s*(?::\s*([^;{]+))?/);
351
+ if (metodo) {
352
+ const classeAtual = pilhaClasses[pilhaClasses.length - 1];
353
+ const atributosRota = atributos.filter((atributo) => /#\[\s*(?:[A-Za-z_\\][A-Za-z0-9_\\]*\\)?(?:Route|Get|Post|Put|Patch|Delete)\b/i.test(atributo));
354
+ for (const atributo of atributosRota) {
355
+ const caminho = extrairCaminhoAtributoPhp(atributo);
356
+ if (!caminho) {
357
+ continue;
358
+ }
359
+ const metodos = extrairMetodosAtributoPhp(atributo);
360
+ const simbolo = juntarSimbolo(namespaceAtual, classeAtual?.nome, metodo[1]);
361
+ for (const metodoHttp of metodos.length > 0 ? metodos : ["GET"]) {
362
+ registrarRota(rotas, metodoHttp, juntarCaminho(classeAtual?.caminhoBase, caminho), simbolo, dividirParametrosPhp(metodo[2] ?? ""), metodo[3]);
363
+ }
364
+ }
365
+ }
366
+ profundidade += contarChar(linha, "{") - contarChar(linha, "}");
367
+ while (pilhaClasses.length > 0 && profundidade < pilhaClasses[pilhaClasses.length - 1].profundidade) {
368
+ pilhaClasses.pop();
369
+ }
370
+ }
371
+ return [...rotas.values()].sort((a, b) => a.caminho.localeCompare(b.caminho, "pt-BR")
372
+ || a.metodo.localeCompare(b.metodo, "pt-BR")
373
+ || a.simbolo.localeCompare(b.simbolo, "pt-BR"));
374
+ }
375
+ //# sourceMappingURL=php-symbols.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"php-symbols.js","sourceRoot":"","sources":["../src/php-symbols.ts"],"names":[],"mappings":"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"}
package/dist/projeto.js CHANGED
@@ -119,6 +119,8 @@ function normalizarFonteLegado(valor) {
119
119
  || valor === "typescript"
120
120
  || valor === "python"
121
121
  || valor === "dart"
122
+ || valor === "lua"
123
+ || valor === "php"
122
124
  || valor === "dotnet"
123
125
  || valor === "java"
124
126
  || valor === "go"
@@ -262,6 +264,8 @@ const EXTENSOES_CODIGO = [
262
264
  ".cjs",
263
265
  ".py",
264
266
  ".dart",
267
+ ".lua",
268
+ ".php",
265
269
  ".cs",
266
270
  ".java",
267
271
  ".go",
@@ -428,6 +432,8 @@ async function inferirFontesLegado(diretoriosCodigo, baseProjeto, configCarregad
428
432
  const arquivosTs = await listarArquivosRecursivosLimitado(diretorio, [".ts", ".tsx", ".js", ".jsx", ".mjs", ".cjs"], 5, 40);
429
433
  const arquivosPy = await listarArquivosRecursivosLimitado(diretorio, [".py"], 5, 20);
430
434
  const arquivosDart = await listarArquivosRecursivosLimitado(diretorio, [".dart"], 5, 20);
435
+ const arquivosLua = await listarArquivosRecursivosLimitado(diretorio, [".lua"], 5, 20);
436
+ const arquivosPhp = await listarArquivosRecursivosLimitado(diretorio, [".php"], 5, 30);
431
437
  const arquivosCs = await listarArquivosRecursivosLimitado(diretorio, [".cs"], 5, 20);
432
438
  const arquivosJava = await listarArquivosRecursivosLimitado(diretorio, [".java"], 5, 20);
433
439
  const arquivosGo = await listarArquivosRecursivosLimitado(diretorio, [".go"], 5, 20);
@@ -518,6 +524,20 @@ async function inferirFontesLegado(diretoriosCodigo, baseProjeto, configCarregad
518
524
  if (arquivosDart.length > 0) {
519
525
  encontrados.add("dart");
520
526
  }
527
+ if (arquivosLua.length > 0) {
528
+ encontrados.add("lua");
529
+ }
530
+ if (arquivosPhp.length > 0) {
531
+ encontrados.add("php");
532
+ const composerJsons = await procurarArquivosPorNome(diretorio, ["composer.json"], 4);
533
+ const artisan = await procurarArquivosPorNome(diretorio, ["artisan"], 3);
534
+ const amostrasPhp = await Promise.all(arquivosPhp.slice(0, 10).map((arquivo) => lerConteudoSeExistir(arquivo)));
535
+ if (composerJsons.length > 0
536
+ || artisan.length > 0
537
+ || amostrasPhp.some((texto) => /Illuminate\\|Symfony\\|Route::(?:get|post|put|patch|delete|resource|apiResource)|#\[\s*(?:Route|Get|Post|Put|Patch|Delete)\b/i.test(texto ?? ""))) {
538
+ encontrados.add("php");
539
+ }
540
+ }
521
541
  if (arquivosCs.length > 0) {
522
542
  encontrados.add("dotnet");
523
543
  const marcadores = await procurarArquivosPorNome(diretorio, ["appsettings.json", "Program.cs"], 4);