@semacode/cli 2.3.1 → 3.5.0
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.
- package/README.md +265 -217
- package/dist/agentContextPack.js +14 -10
- package/dist/agentEntryPoints.d.ts +5 -0
- package/dist/agentEntryPoints.js +592 -568
- package/dist/angular-consumer-standalone.js +1 -1
- package/dist/bin.d.ts +6 -0
- package/dist/bin.js +130 -0
- package/dist/cliArgs.js +4 -4
- package/dist/cliControlError.d.ts +12 -0
- package/dist/cliControlError.js +47 -0
- package/dist/cliGrammar.d.ts +11 -0
- package/dist/cliGrammar.js +551 -0
- package/dist/cliHelp.d.ts +13 -0
- package/dist/cliHelp.js +19 -0
- package/dist/cliHelpTexto.d.ts +3 -0
- package/dist/cliHelpTexto.js +168 -0
- package/dist/cliRuntime.d.ts +2 -0
- package/dist/cliRuntime.js +31 -0
- package/dist/comandos.js +9 -22
- package/dist/contexto.js +5 -5
- package/dist/dev/index.d.ts +1 -0
- package/dist/dev/index.js +51 -9
- package/dist/discovery/catalog.js +3 -3
- package/dist/distribuicao/filesystemGlobal.d.ts +63 -0
- package/dist/distribuicao/filesystemGlobal.js +701 -0
- package/dist/distribuicao/index.d.ts +7 -0
- package/dist/distribuicao/index.js +227 -0
- package/dist/distribuicao/launcherGlobal.d.ts +53 -0
- package/dist/distribuicao/launcherGlobal.js +643 -0
- package/dist/distribuicao/launcherWindows.d.ts +28 -0
- package/dist/distribuicao/launcherWindows.js +326 -0
- package/dist/distribuicao/lockContextGlobal.d.ts +10 -0
- package/dist/distribuicao/lockContextGlobal.js +17 -0
- package/dist/distribuicao/lockGlobal.d.ts +6 -0
- package/dist/distribuicao/lockGlobal.js +520 -0
- package/dist/distribuicao/skillGlobal.d.ts +48 -0
- package/dist/distribuicao/skillGlobal.js +652 -0
- package/dist/distribuicao/skillIntentPolicy.d.ts +21 -0
- package/dist/distribuicao/skillIntentPolicy.js +115 -0
- package/dist/distribuicao/tipos.d.ts +50 -0
- package/dist/distribuicao/tipos.js +10 -0
- package/dist/distribuicao/versaoSemantica.d.ts +3 -0
- package/dist/distribuicao/versaoSemantica.js +62 -0
- package/dist/docs.part01.d.ts +4 -1
- package/dist/docs.part01.js +8 -0
- package/dist/docs.part02.js +9 -1
- package/dist/drift.part01.d.ts +33 -25
- package/dist/drift.part01.js +2 -1
- package/dist/drift.part04.d.ts +26 -5
- package/dist/drift.part04.js +123 -19
- package/dist/drift.part05.d.ts +2 -2
- package/dist/drift.part05.js +8 -6
- package/dist/drift.part06.d.ts +2 -2
- package/dist/drift.part06.js +113 -26
- package/dist/drift.part07.d.ts +11 -11
- package/dist/drift.part07.js +261 -265
- package/dist/drift.part08.d.ts +2 -2
- package/dist/drift.part08.js +35 -26
- package/dist/drift.part09.d.ts +2 -2
- package/dist/drift.part09.js +10 -3
- package/dist/drift.part11.js +261 -58
- package/dist/drift.part12.d.ts +1 -1
- package/dist/drift.part12.js +193 -21
- package/dist/drift.part13.d.ts +20 -39
- package/dist/drift.part13.js +601 -647
- package/dist/drift.part14.js +23 -7
- package/dist/driftCacheCas.d.ts +43 -0
- package/dist/driftCacheCas.js +351 -0
- package/dist/driftCacheFilesystem.d.ts +64 -0
- package/dist/driftCacheFilesystem.js +313 -0
- package/dist/driftCacheModes.d.ts +38 -0
- package/dist/driftCacheModes.js +147 -0
- package/dist/driftCacheStore.d.ts +80 -0
- package/dist/driftCacheStore.js +603 -0
- package/dist/driftCatalogo.d.ts +2 -28
- package/dist/driftCatalogo.js +143 -284
- package/dist/driftEscopo.d.ts +1 -3
- package/dist/driftEscopo.js +235 -151
- package/dist/driftEscopoReferencias.d.ts +5 -1
- package/dist/driftEscopoReferencias.js +375 -28
- package/dist/driftOrcamento.d.ts +0 -6
- package/dist/driftOrcamento.js +2 -1
- package/dist/execucoesExternas.js +19 -5
- package/dist/exemplosOficiais.d.ts +2 -1
- package/dist/exemplosOficiais.js +9 -3
- package/dist/geracaoCore.d.ts +1 -0
- package/dist/geracaoCore.js +6 -6
- package/dist/iaPrompts.d.ts +3 -3
- package/dist/iaPrompts.js +312 -313
- package/dist/importador.part01.d.ts +1 -1
- package/dist/importador.part06.d.ts +2 -0
- package/dist/importador.part06.js +87 -1
- package/dist/importador.part09.js +7 -1
- package/dist/index.d.ts +4 -1
- package/dist/index.js +6 -25
- package/dist/index.part01.d.ts +20 -28
- package/dist/index.part01.js +16 -237
- package/dist/index.part02.js +36 -22
- package/dist/index.part03.d.ts +24 -2
- package/dist/index.part03.js +83 -19
- package/dist/index.part04.d.ts +10 -2
- package/dist/index.part04.js +152 -123
- package/dist/index.part05.js +80 -78
- package/dist/index.part06.js +34 -17
- package/dist/index.part07.d.ts +8 -2
- package/dist/index.part07.js +153 -7
- package/dist/index.part08.d.ts +1 -1
- package/dist/index.part08.js +25 -30
- package/dist/initCommand.d.ts +1 -0
- package/dist/initCommand.js +20 -4
- package/dist/initTemplatesBase.js +6 -4
- package/dist/pipelineConteudo/command.d.ts +1 -0
- package/dist/pipelineConteudo/command.js +9 -2
- package/dist/pipelineConteudo/help.d.ts +2 -0
- package/dist/pipelineConteudo/help.js +33 -0
- package/dist/profileAuthorCommand.js +3 -7
- package/dist/profileCommand.js +3 -7
- package/dist/projetoCarregar.js +35 -17
- package/dist/projetoCatalogo.d.ts +1 -0
- package/dist/projetoCatalogo.js +64 -25
- package/dist/projetoConfig.js +2 -0
- package/dist/projetoLegado.js +18 -0
- package/dist/projetoOrigens.d.ts +2 -0
- package/dist/projetoOrigens.js +65 -9
- package/dist/projetoTipos.d.ts +1 -0
- package/dist/resultadoCli.d.ts +20 -0
- package/dist/resultadoCli.js +57 -0
- package/dist/saidaCli.d.ts +35 -0
- package/dist/saidaCli.js +118 -0
- package/dist/sistemasInterativos/acceptanceEvidence.d.ts +22 -0
- package/dist/sistemasInterativos/acceptanceEvidence.js +345 -0
- package/dist/sistemasInterativos/engineObservation.d.ts +12 -0
- package/dist/sistemasInterativos/engineObservation.js +438 -0
- package/dist/sistemasInterativos/jobOrchestration.d.ts +2 -0
- package/dist/sistemasInterativos/jobOrchestration.js +204 -0
- package/dist/sistemasInterativos/operationPrimitives.d.ts +21 -0
- package/dist/sistemasInterativos/operationPrimitives.js +194 -0
- package/dist/sistemasInterativos/operations.d.ts +4 -39
- package/dist/sistemasInterativos/operations.js +5 -1164
- package/dist/skillCommand.d.ts +5 -0
- package/dist/skillCommand.js +88 -0
- package/dist/tipos.d.ts +1 -1
- package/dist/typescript-http-modelos.d.ts +1 -1
- package/dist/typescript-http-rotas.d.ts +1 -0
- package/dist/typescript-http-rotas.js +93 -0
- package/dist/typescript-http.d.ts +1 -1
- package/dist/typescript-http.js +1 -1
- package/dist/verificacaoCache.d.ts +25 -0
- package/dist/verificacaoCache.js +80 -0
- package/docs/README.md +34 -30
- package/docs/ai-integration.md +25 -12
- package/docs/ai-onboarding.md +37 -18
- package/docs/ai-workflow.md +9 -7
- package/docs/cli.md +125 -7
- package/docs/commands.md +41 -20
- package/docs/deploy.md +21 -8
- package/docs/descoberta-capacidades.md +106 -106
- package/docs/documentation.md +49 -39
- package/docs/drift-cache.md +108 -0
- package/docs/getting-started.md +43 -18
- package/docs/pipeline-conteudo.md +246 -246
- package/docs/profiles.md +54 -54
- package/docs/repositories.md +19 -2
- package/docs/rollback.md +15 -8
- package/docs/security.md +25 -3
- package/docs/sistemas-interativos.md +379 -374
- package/docs/syntax.md +14 -0
- package/docs/testing.md +139 -40
- package/exemplos/express_crud.sema +139 -0
- package/exemplos/fastify_crud.sema +146 -0
- package/exemplos/pipeline-conteudo/README.md +44 -44
- package/exemplos/pipeline-conteudo/alvos.json +23 -23
- package/exemplos/pipeline-conteudo/definicao.json +136 -136
- package/exemplos/profile_simulation.sema +211 -211
- package/exemplos/sistemas-interativos/README.md +100 -100
- package/exemplos/sistemas-interativos/advanced/acceptance-context-evaluate-valid.json +5 -5
- package/exemplos/sistemas-interativos/advanced/acceptance-lock-valid.json +16 -16
- package/exemplos/sistemas-interativos/advanced/asset-provenance-valid.json +32 -32
- package/exemplos/sistemas-interativos/advanced/autonomy-repair-valid.json +93 -93
- package/exemplos/sistemas-interativos/advanced/control-run-definition-valid.json +78 -78
- package/exemplos/sistemas-interativos/advanced/control-run-valid.json +27 -27
- package/exemplos/sistemas-interativos/advanced/distributed-workers-valid.json +79 -79
- package/exemplos/sistemas-interativos/advanced/editor-state-valid.json +42 -42
- package/exemplos/sistemas-interativos/advanced/engine-snapshot-after-valid.json +32 -32
- package/exemplos/sistemas-interativos/advanced/engine-snapshot-before-valid.json +23 -23
- package/exemplos/sistemas-interativos/advanced/job-orchestration-valid.json +39 -39
- package/exemplos/sistemas-interativos/advanced/multimodal-evidence-valid.json +46 -46
- package/exemplos/sistemas-interativos/advanced/multiplayer-authority-valid.json +39 -39
- package/exemplos/sistemas-interativos/advanced/playtest-fuzz-valid.json +37 -37
- package/exemplos/sistemas-interativos/advanced/portability-valid.json +104 -104
- package/exemplos/sistemas-interativos/advanced/temporal-evidence-valid.json +27 -27
- package/exemplos/sistemas-interativos/advanced/temporal-valid.json +118 -118
- package/exemplos/sistemas-interativos/experience-ir-valid.json +459 -459
- package/exemplos/sistemas-interativos/game-2d.json +83 -83
- package/exemplos/sistemas-interativos/game-3d-human.json +81 -81
- package/exemplos/sistemas-interativos/game-pixel-16-bit.json +97 -97
- package/exemplos/sistemas-interativos/game-pixel-8-bit.json +94 -94
- package/exemplos/sistemas-interativos/game-xr-human.json +80 -80
- package/exemplos/sistemas-interativos/hybrid-2-5d.json +108 -108
- package/exemplos/sistemas-interativos/protocol-mutating-rollback-valid.json +75 -75
- package/exemplos/sistemas-interativos/protocol-read-only-valid.json +58 -58
- package/exemplos/sistemas-interativos/simulation-2d-controlled.json +97 -97
- package/exemplos/sistemas-interativos/simulation-3d-calibrated-autonomous.json +141 -141
- package/exemplos/sistemas-interativos/simulation-headless-autonomous-batch.json +112 -112
- package/exemplos/sistemas-interativos/simulation-pixel-16-bit.json +103 -103
- package/exemplos/sistemas-interativos/simulation-text-controlled.json +95 -95
- package/node_modules/@sema/gerador-cpp/package.json +1 -1
- package/node_modules/@sema/gerador-dotnet/package.json +1 -1
- package/node_modules/@sema/gerador-lua/dist/index.js +51 -51
- package/node_modules/@sema/gerador-php/dist/index.js +113 -113
- package/node_modules/@sema/nucleo/dist/ir/conversor.part01.js +37 -38
- package/node_modules/@sema/nucleo/dist/ir/modelos.d.ts +1 -0
- package/node_modules/@sema/nucleo/dist/semantico/analisador.d.ts +1 -0
- package/node_modules/@sema/nucleo/dist/semantico/analisador.js +1 -0
- package/node_modules/@sema/nucleo/dist/semantico/analisador.part01.d.ts +7 -0
- package/node_modules/@sema/nucleo/dist/semantico/analisador.part01.js +33 -10
- package/package.json +9 -4
- package/scripts/postinstall.mjs +148 -0
- package/skills/sema/SKILL.md +199 -0
- package/skills/sema/agents/openai.yaml +4 -0
- package/dist/driftCache.d.ts +0 -49
- package/dist/driftCache.js +0 -311
- package/dist/driftCacheIncremental.d.ts +0 -98
- package/dist/driftCacheIncremental.js +0 -596
- package/dist/driftCatalogoPersistente.d.ts +0 -8
- package/dist/driftCatalogoPersistente.js +0 -77
- package/node_modules/@sema/gerador-cpp/dist/index.js.map +0 -1
- package/node_modules/@sema/gerador-css/dist/index.js.map +0 -1
- package/node_modules/@sema/gerador-css/dist/index.part01.js.map +0 -1
- package/node_modules/@sema/gerador-css/dist/index.part02.js.map +0 -1
- package/node_modules/@sema/gerador-dart/dist/index.js.map +0 -1
- package/node_modules/@sema/gerador-dotnet/dist/index.js.map +0 -1
- package/node_modules/@sema/gerador-html/dist/index.js.map +0 -1
- package/node_modules/@sema/gerador-javascript/dist/index.js.map +0 -1
- package/node_modules/@sema/gerador-lua/dist/index.js.map +0 -1
- package/node_modules/@sema/gerador-php/dist/index.js.map +0 -1
- package/node_modules/@sema/gerador-python/dist/index.js.map +0 -1
- package/node_modules/@sema/gerador-python/dist/index.part01.js.map +0 -1
- package/node_modules/@sema/gerador-python/dist/index.part02.js.map +0 -1
- package/node_modules/@sema/gerador-typescript/dist/index.js.map +0 -1
- package/node_modules/@sema/gerador-typescript/dist/index.part01.js.map +0 -1
- package/node_modules/@sema/gerador-typescript/dist/index.part02.js.map +0 -1
- package/node_modules/@sema/gerador-typescript/dist/index.part03.js.map +0 -1
- package/node_modules/@sema/nucleo/dist/ast/tipos.js.map +0 -1
- package/node_modules/@sema/nucleo/dist/diagnosticos/index.js.map +0 -1
- package/node_modules/@sema/nucleo/dist/diagnosticos/melhorador.js.map +0 -1
- package/node_modules/@sema/nucleo/dist/diagnosticos/snippets.js.map +0 -1
- package/node_modules/@sema/nucleo/dist/formatador/index.js.map +0 -1
- package/node_modules/@sema/nucleo/dist/formatador/index.part01.js.map +0 -1
- package/node_modules/@sema/nucleo/dist/formatador/index.part02.js.map +0 -1
- package/node_modules/@sema/nucleo/dist/index.js.map +0 -1
- package/node_modules/@sema/nucleo/dist/ir/conversor.js.map +0 -1
- package/node_modules/@sema/nucleo/dist/ir/conversor.part01.js.map +0 -1
- package/node_modules/@sema/nucleo/dist/ir/conversor.part02.js.map +0 -1
- package/node_modules/@sema/nucleo/dist/ir/conversor.part03.js.map +0 -1
- package/node_modules/@sema/nucleo/dist/ir/modelos.js.map +0 -1
- package/node_modules/@sema/nucleo/dist/lexer/lexer.js.map +0 -1
- package/node_modules/@sema/nucleo/dist/lexer/tokens.js.map +0 -1
- package/node_modules/@sema/nucleo/dist/parser/parser.declaracoes.js.map +0 -1
- package/node_modules/@sema/nucleo/dist/parser/parser.js.map +0 -1
- package/node_modules/@sema/nucleo/dist/parser/parser.modulo.js.map +0 -1
- package/node_modules/@sema/nucleo/dist/parser/parser.part01.js.map +0 -1
- package/node_modules/@sema/nucleo/dist/parser/parser.part02.js.map +0 -1
- package/node_modules/@sema/nucleo/dist/parser/parser.part03.js.map +0 -1
- package/node_modules/@sema/nucleo/dist/persistencia/contratos.js.map +0 -1
- package/node_modules/@sema/nucleo/dist/semantico/analisador.js.map +0 -1
- package/node_modules/@sema/nucleo/dist/semantico/analisador.part01.js.map +0 -1
- package/node_modules/@sema/nucleo/dist/semantico/analisador.part02.js.map +0 -1
- package/node_modules/@sema/nucleo/dist/semantico/analisador.part03.js.map +0 -1
- package/node_modules/@sema/nucleo/dist/semantico/analisador.part04.js.map +0 -1
- package/node_modules/@sema/nucleo/dist/semantico/analisador.part05.js.map +0 -1
- package/node_modules/@sema/nucleo/dist/semantico/analisador.part06.js.map +0 -1
- package/node_modules/@sema/nucleo/dist/semantico/analisador.part07.js.map +0 -1
- package/node_modules/@sema/nucleo/dist/semantico/analisador.part08.js.map +0 -1
- package/node_modules/@sema/nucleo/dist/semantico/estruturas.js.map +0 -1
- package/node_modules/@sema/nucleo/dist/semantico/estruturas.part01.js.map +0 -1
- package/node_modules/@sema/nucleo/dist/semantico/estruturas.part02.js.map +0 -1
- package/node_modules/@sema/nucleo/dist/semantico/orcamentoSemantico.js.map +0 -1
- package/node_modules/@sema/nucleo/dist/semantico/seguranca.js.map +0 -1
- package/node_modules/@sema/nucleo/dist/util/arquivos.js.map +0 -1
- package/node_modules/@sema/padroes/dist/index.js.map +0 -1
package/dist/drift.part04.js
CHANGED
|
@@ -1,11 +1,71 @@
|
|
|
1
|
-
// SEMA-GOVERNED: sema.
|
|
2
|
-
// Descricao:
|
|
1
|
+
// SEMA-GOVERNED: sema.produto.governanca_ia.drift
|
|
2
|
+
// Descricao: compartilha primitivas de indexacao e leitura do drift entre linguagens.
|
|
3
|
+
import { AsyncLocalStorage } from "node:async_hooks";
|
|
3
4
|
import { readdir } from "node:fs/promises";
|
|
4
5
|
import path from "node:path";
|
|
5
6
|
import ts from "typescript";
|
|
6
7
|
import { diretoriosIgnoradosAtivos } from "./drift.part01.js";
|
|
7
8
|
import { escolherArquivoPorVinculo, escolherSimboloPorVinculo } from "./drift.part03.js";
|
|
8
9
|
import { avaliarPontuacaoSemantica, resolverPoliticaPontuacaoSemantica } from "./driftScore.js";
|
|
10
|
+
export function chaveCaminhoCanonicoDrift(caminho) {
|
|
11
|
+
const resolvido = path.resolve(caminho);
|
|
12
|
+
return process.platform === "win32" ? resolvido.toLowerCase() : resolvido;
|
|
13
|
+
}
|
|
14
|
+
function caminhoEstaDentroDaRaizDrift(raiz, candidato) {
|
|
15
|
+
const relativo = path.relative(path.resolve(raiz), path.resolve(candidato));
|
|
16
|
+
return relativo === "" || (!relativo.startsWith("..") && !path.isAbsolute(relativo));
|
|
17
|
+
}
|
|
18
|
+
const contextoRaizesSobrepostasDrift = new AsyncLocalStorage();
|
|
19
|
+
export function deduplicarRaizesSobrepostasDrift(diretorios) {
|
|
20
|
+
const unicas = new Map();
|
|
21
|
+
for (const diretorio of diretorios) {
|
|
22
|
+
const chave = chaveCaminhoCanonicoDrift(diretorio);
|
|
23
|
+
if (!unicas.has(chave)) {
|
|
24
|
+
unicas.set(chave, diretorio);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
const candidatas = [...unicas.values()];
|
|
28
|
+
const raizesFisicas = candidatas.filter((candidata, indice) => !candidatas.some((outra, outroIndice) => indice !== outroIndice
|
|
29
|
+
&& chaveCaminhoCanonicoDrift(candidata) !== chaveCaminhoCanonicoDrift(outra)
|
|
30
|
+
&& caminhoEstaDentroDaRaizDrift(outra, candidata)));
|
|
31
|
+
const aliasesPorRaiz = new Map();
|
|
32
|
+
for (const raizFisica of raizesFisicas) {
|
|
33
|
+
aliasesPorRaiz.set(chaveCaminhoCanonicoDrift(raizFisica), candidatas.filter((candidata) => chaveCaminhoCanonicoDrift(candidata) !== chaveCaminhoCanonicoDrift(raizFisica)
|
|
34
|
+
&& caminhoEstaDentroDaRaizDrift(raizFisica, candidata)));
|
|
35
|
+
}
|
|
36
|
+
contextoRaizesSobrepostasDrift.enterWith(aliasesPorRaiz);
|
|
37
|
+
return raizesFisicas;
|
|
38
|
+
}
|
|
39
|
+
export function encontrarCandidatosFisicosImplementacaoDrift(simbolos, origem, caminhoDeclarado) {
|
|
40
|
+
const caminhoNormalizado = caminhoDeclarado.trim().toLowerCase();
|
|
41
|
+
if (!caminhoNormalizado) {
|
|
42
|
+
return [];
|
|
43
|
+
}
|
|
44
|
+
const mesmaFamilia = (candidato) => candidato.origem === origem
|
|
45
|
+
|| ((origem === "ts" || origem === "js") && (candidato.origem === "ts" || candidato.origem === "js"));
|
|
46
|
+
const porArquivo = new Map();
|
|
47
|
+
for (const candidato of simbolos) {
|
|
48
|
+
const caminhoCandidato = candidato.caminho.toLowerCase();
|
|
49
|
+
if (!mesmaFamilia(candidato)
|
|
50
|
+
|| (caminhoCandidato !== caminhoNormalizado && !caminhoCandidato.endsWith(`.${caminhoNormalizado}`))) {
|
|
51
|
+
continue;
|
|
52
|
+
}
|
|
53
|
+
const chaveArquivo = chaveCaminhoCanonicoDrift(candidato.arquivo);
|
|
54
|
+
const anterior = porArquivo.get(chaveArquivo);
|
|
55
|
+
const candidatoExato = caminhoCandidato === caminhoNormalizado;
|
|
56
|
+
const anteriorExato = anterior?.caminho.toLowerCase() === caminhoNormalizado;
|
|
57
|
+
if (!anterior
|
|
58
|
+
|| (candidatoExato && !anteriorExato)
|
|
59
|
+
|| (candidatoExato === anteriorExato
|
|
60
|
+
&& (candidato.caminho.length < anterior.caminho.length
|
|
61
|
+
|| (candidato.caminho.length === anterior.caminho.length
|
|
62
|
+
&& candidato.caminho.localeCompare(anterior.caminho, "pt-BR") < 0)))) {
|
|
63
|
+
porArquivo.set(chaveArquivo, candidato);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
return [...porArquivo.values()].sort((a, b) => a.arquivo.localeCompare(b.arquivo, "pt-BR")
|
|
67
|
+
|| a.caminho.localeCompare(b.caminho, "pt-BR"));
|
|
68
|
+
}
|
|
9
69
|
export function resolverArquivoOuSimboloAncora(vinculos, simbolos, mapaImpl, arquivos) {
|
|
10
70
|
for (const vinculo of vinculos) {
|
|
11
71
|
if (vinculo.simbolo) {
|
|
@@ -94,7 +154,34 @@ export function calcularConfiancaTask(task, implsValidos, implsQuebrados, vincul
|
|
|
94
154
|
}
|
|
95
155
|
return "baixa";
|
|
96
156
|
}
|
|
97
|
-
export function
|
|
157
|
+
export async function carregarEvidenciaVerificacaoDrift(opcoes) {
|
|
158
|
+
const { readFile } = await import("node:fs/promises");
|
|
159
|
+
const { calcularChaveVerificacao, carregarManifestoVerificacao } = await import("./verificacaoCache.js");
|
|
160
|
+
const pacoteCli = (await import("../package.json", { with: { type: "json" } })).default;
|
|
161
|
+
const conteudoContrato = await readFile(opcoes.caminhoContrato, "utf8").catch(() => "");
|
|
162
|
+
if (!conteudoContrato) {
|
|
163
|
+
return undefined;
|
|
164
|
+
}
|
|
165
|
+
const chave = calcularChaveVerificacao({
|
|
166
|
+
versaoCli: pacoteCli.version,
|
|
167
|
+
versaoNode: process.versions.node ?? "",
|
|
168
|
+
modulo: opcoes.nomeModulo,
|
|
169
|
+
alvo: opcoes.alvo,
|
|
170
|
+
framework: opcoes.framework,
|
|
171
|
+
estrutura: opcoes.estrutura,
|
|
172
|
+
conteudoContrato,
|
|
173
|
+
});
|
|
174
|
+
const manifesto = await carregarManifestoVerificacao(chave);
|
|
175
|
+
if (!manifesto) {
|
|
176
|
+
return undefined;
|
|
177
|
+
}
|
|
178
|
+
return {
|
|
179
|
+
sucesso: manifesto.sucesso,
|
|
180
|
+
quantidadeTestes: manifesto.quantidadeTestes,
|
|
181
|
+
alvo: manifesto.alvo,
|
|
182
|
+
};
|
|
183
|
+
}
|
|
184
|
+
export function calcularScoreTask(task, implsValidos, implsQuebrados, vinculosValidos, vinculosQuebrados, semImplementacao, evidenciaVerificada) {
|
|
98
185
|
let score = 45;
|
|
99
186
|
if (!semImplementacao && task.implementacoesExternas.length > 0) {
|
|
100
187
|
score += 15;
|
|
@@ -109,9 +196,12 @@ export function calcularScoreTask(task, implsValidos, implsQuebrados, vinculosVa
|
|
|
109
196
|
if (task.execucao.explicita) {
|
|
110
197
|
score += 5;
|
|
111
198
|
}
|
|
199
|
+
if (evidenciaVerificada?.sucesso && evidenciaVerificada.quantidadeTestes > 0) {
|
|
200
|
+
score += 8;
|
|
201
|
+
}
|
|
112
202
|
return Math.max(0, Math.min(100, score));
|
|
113
203
|
}
|
|
114
|
-
export function resumirLacunasTask(task, semImplementacao, implsQuebrados, vinculosQuebrados, guardrails) {
|
|
204
|
+
export function resumirLacunasTask(task, semImplementacao, implsQuebrados, vinculosQuebrados, guardrails, evidenciaVerificada) {
|
|
115
205
|
const lacunas = [];
|
|
116
206
|
if (semImplementacao) {
|
|
117
207
|
lacunas.push("sem_impl");
|
|
@@ -128,6 +218,9 @@ export function resumirLacunasTask(task, semImplementacao, implsQuebrados, vincu
|
|
|
128
218
|
if (!task.execucao.explicita) {
|
|
129
219
|
lacunas.push("execucao_implicita");
|
|
130
220
|
}
|
|
221
|
+
if ((guardrails.publica || guardrails.sensivel) && !semImplementacao && !evidenciaVerificada) {
|
|
222
|
+
lacunas.push("sem_evidencia_verificada");
|
|
223
|
+
}
|
|
131
224
|
if (guardrails.publica && !task.execucao.explicita) {
|
|
132
225
|
lacunas.push("superficie_publica_sem_execucao");
|
|
133
226
|
}
|
|
@@ -258,9 +351,11 @@ export function juntarCaminhoHttp(base, sufixo) {
|
|
|
258
351
|
const caminho = `/${partes.join("/")}`.replace(/\/+/g, "/");
|
|
259
352
|
return caminho === "//" ? "/" : caminho;
|
|
260
353
|
}
|
|
261
|
-
export async function listarArquivosRecursivos(diretorio, extensoes,
|
|
262
|
-
if (
|
|
263
|
-
|
|
354
|
+
export async function listarArquivosRecursivos(diretorio, extensoes, adaptadorLeitura) {
|
|
355
|
+
if (adaptadorLeitura) {
|
|
356
|
+
const arquivos = await adaptadorLeitura.listarPorRaiz(diretorio, extensoes);
|
|
357
|
+
return [...new Map(arquivos.map((arquivo) => [chaveCaminhoCanonicoDrift(arquivo), arquivo])).values()]
|
|
358
|
+
.sort((a, b) => a.localeCompare(b, "pt-BR"));
|
|
264
359
|
}
|
|
265
360
|
let entradas;
|
|
266
361
|
try {
|
|
@@ -294,16 +389,19 @@ export const EXTENSOES_ARQUIVOS_RASTREAVEIS_DRIFT = [
|
|
|
294
389
|
".yml", ".yaml", ".toml", ".xml", ".html", ".htm", ".css",
|
|
295
390
|
".Caddyfile", ".caddyfile",
|
|
296
391
|
];
|
|
297
|
-
export async function indexarArquivosRastreaveis(diretorios,
|
|
298
|
-
const arquivos = new
|
|
299
|
-
for (const diretorio of diretorios) {
|
|
300
|
-
for (const arquivo of await listarArquivosRecursivos(diretorio, EXTENSOES_ARQUIVOS_RASTREAVEIS_DRIFT,
|
|
301
|
-
|
|
392
|
+
export async function indexarArquivosRastreaveis(diretorios, adaptadorLeitura) {
|
|
393
|
+
const arquivos = new Map();
|
|
394
|
+
for (const diretorio of deduplicarRaizesSobrepostasDrift(diretorios)) {
|
|
395
|
+
for (const arquivo of await listarArquivosRecursivos(diretorio, EXTENSOES_ARQUIVOS_RASTREAVEIS_DRIFT, adaptadorLeitura)) {
|
|
396
|
+
const chave = chaveCaminhoCanonicoDrift(arquivo);
|
|
397
|
+
if (!arquivos.has(chave)) {
|
|
398
|
+
arquivos.set(chave, arquivo);
|
|
399
|
+
}
|
|
302
400
|
}
|
|
303
401
|
}
|
|
304
|
-
return [...arquivos].sort((a, b) => a.localeCompare(b, "pt-BR"));
|
|
402
|
+
return [...arquivos.values()].sort((a, b) => a.localeCompare(b, "pt-BR"));
|
|
305
403
|
}
|
|
306
|
-
|
|
404
|
+
function caminhosSimbolicosParaBaseDrift(baseDiretorio, arquivo) {
|
|
307
405
|
const relativo = path.relative(baseDiretorio, arquivo).replace(/\.[^.]+$/, "");
|
|
308
406
|
const semPrefixo = relativo
|
|
309
407
|
.split(path.sep)
|
|
@@ -312,13 +410,19 @@ export function caminhosSimbolicos(baseDiretorio, arquivo) {
|
|
|
312
410
|
.join(".");
|
|
313
411
|
const prefixo = paraIdentificadorModulo(path.basename(baseDiretorio));
|
|
314
412
|
const comPrefixo = prefixo ? [prefixo, semPrefixo].filter(Boolean).join(".") : semPrefixo;
|
|
413
|
+
const aliasesBase = [semPrefixo, comPrefixo].filter(Boolean);
|
|
315
414
|
const aliasesIndex = path.basename(relativo) === "index"
|
|
316
|
-
?
|
|
317
|
-
semPrefixo.replace(/(?:^|\.)index$/, ""),
|
|
318
|
-
comPrefixo.replace(/(?:^|\.)index$/, ""),
|
|
319
|
-
]
|
|
415
|
+
? aliasesBase.map((alias) => alias.replace(/(?:^|\.)index$/, ""))
|
|
320
416
|
: [];
|
|
321
|
-
return [...new Set([
|
|
417
|
+
return [...new Set([...aliasesBase, ...aliasesIndex].filter(Boolean))];
|
|
418
|
+
}
|
|
419
|
+
export function caminhosSimbolicos(baseDiretorio, arquivo) {
|
|
420
|
+
const aliasesConfigurados = contextoRaizesSobrepostasDrift.getStore()
|
|
421
|
+
?.get(chaveCaminhoCanonicoDrift(baseDiretorio))
|
|
422
|
+
?.filter((raiz) => caminhoEstaDentroDaRaizDrift(raiz, arquivo))
|
|
423
|
+
?? [];
|
|
424
|
+
return [...new Set([baseDiretorio, ...aliasesConfigurados]
|
|
425
|
+
.flatMap((base) => caminhosSimbolicosParaBaseDrift(base, arquivo)))];
|
|
322
426
|
}
|
|
323
427
|
export function registrarSimboloTypeScript(simbolos, basesSimbolicas, arquivo, nome, nomeClasse, origem = "ts") {
|
|
324
428
|
for (const baseSimbolica of basesSimbolicas) {
|
package/dist/drift.part05.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import ts from "typescript";
|
|
2
2
|
import { RegistroConsumerSurfaceDrift, SimboloResolvido } from "./drift.part01.js";
|
|
3
|
-
import type
|
|
3
|
+
import { type AdaptadorLeituraCompartilhadaDrift } from "./drift.part04.js";
|
|
4
4
|
export declare function registrarMetodoTypeScriptProtoOuObjeto(simbolos: Map<string, SimboloResolvido>, basesSimbolicas: string[], arquivo: string, nomeMetodo: string, nomeClasse?: string, origem?: "ts" | "js"): void;
|
|
5
5
|
export declare function registrarMetodosObjectAssignTypeScript(simbolos: Map<string, SimboloResolvido>, basesSimbolicas: string[], arquivo: string, objeto: ts.ObjectLiteralExpression, sourceFile: ts.SourceFile, nomeClasse?: string, origem?: "ts" | "js"): void;
|
|
6
6
|
export declare function registrarAtribuicaoPrototypeTypeScript(simbolos: Map<string, SimboloResolvido>, basesSimbolicas: string[], arquivo: string, sourceFile: ts.SourceFile, esquerda: ts.Expression, direita: ts.Expression, origem?: "ts" | "js"): void;
|
|
@@ -44,5 +44,5 @@ export declare function extrairRotasReactViteConsumer(relacaoArquivo: string, co
|
|
|
44
44
|
export declare function normalizarRotaDeclaradaFlutter(caminhoCru: string): string;
|
|
45
45
|
export declare function extrairRotasFlutterConsumer(relacaoArquivo: string, codigo: string): RotaFlutterConsumerDrift[];
|
|
46
46
|
export declare function extrairRotasAngularConsumerDiretas(relacaoArquivo: string, codigo: string, prefixo?: string): RotaAngularConsumerDrift[];
|
|
47
|
-
export declare function extrairRotasAngularConsumer(diretorioBase: string, relacaoArquivo: string, prefixo?: string, visitados?: Set<string>,
|
|
47
|
+
export declare function extrairRotasAngularConsumer(diretorioBase: string, relacaoArquivo: string, prefixo?: string, visitados?: Set<string>, adaptadorLeitura?: AdaptadorLeituraCompartilhadaDrift): Promise<RotaAngularConsumerDrift[]>;
|
|
48
48
|
export declare function simboloEhBridgeConsumer(caminho: string, arquivo: string): boolean;
|
package/dist/drift.part05.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
// SEMA-GOVERNED: sema.
|
|
2
|
-
// Descricao:
|
|
1
|
+
// SEMA-GOVERNED: sema.produto.governanca_ia.drift
|
|
2
|
+
// Descricao: extrai rotas e superficies consumidoras dentro do escopo fisico planejado.
|
|
3
3
|
import { readFile } from "node:fs/promises";
|
|
4
4
|
import path from "node:path";
|
|
5
5
|
import ts from "typescript";
|
|
6
|
-
import { desembrulharExpressaoTypeScript, extrairNomePropriedadeTypeScript, registrarSimboloTypeScript } from "./drift.part04.js";
|
|
6
|
+
import { desembrulharExpressaoTypeScript, extrairNomePropriedadeTypeScript, registrarSimboloTypeScript, } from "./drift.part04.js";
|
|
7
7
|
export function registrarMetodoTypeScriptProtoOuObjeto(simbolos, basesSimbolicas, arquivo, nomeMetodo, nomeClasse, origem = "ts") {
|
|
8
8
|
if (!nomeMetodo) {
|
|
9
9
|
return;
|
|
@@ -318,7 +318,7 @@ export function extrairRotasAngularConsumerDiretas(relacaoArquivo, codigo, prefi
|
|
|
318
318
|
}
|
|
319
319
|
return rotas;
|
|
320
320
|
}
|
|
321
|
-
export async function extrairRotasAngularConsumer(diretorioBase, relacaoArquivo, prefixo = "/", visitados = new Set(),
|
|
321
|
+
export async function extrairRotasAngularConsumer(diretorioBase, relacaoArquivo, prefixo = "/", visitados = new Set(), adaptadorLeitura) {
|
|
322
322
|
const relacaoNormalizada = normalizarRelacaoConsumer(relacaoArquivo);
|
|
323
323
|
if (visitados.has(relacaoNormalizada)) {
|
|
324
324
|
return [];
|
|
@@ -327,7 +327,9 @@ export async function extrairRotasAngularConsumer(diretorioBase, relacaoArquivo,
|
|
|
327
327
|
let codigo = "";
|
|
328
328
|
try {
|
|
329
329
|
const arquivo = path.join(diretorioBase, relacaoNormalizada);
|
|
330
|
-
codigo =
|
|
330
|
+
codigo = adaptadorLeitura
|
|
331
|
+
? await adaptadorLeitura.lerTexto(arquivo)
|
|
332
|
+
: await readFile(arquivo, "utf8");
|
|
331
333
|
}
|
|
332
334
|
catch {
|
|
333
335
|
return [];
|
|
@@ -338,7 +340,7 @@ export async function extrairRotasAngularConsumer(diretorioBase, relacaoArquivo,
|
|
|
338
340
|
if (!rota.arquivoRotasFilhas) {
|
|
339
341
|
continue;
|
|
340
342
|
}
|
|
341
|
-
filhas.push(...await extrairRotasAngularConsumer(diretorioBase, rota.arquivoRotasFilhas, rota.rota, visitados,
|
|
343
|
+
filhas.push(...await extrairRotasAngularConsumer(diretorioBase, rota.arquivoRotasFilhas, rota.rota, visitados, adaptadorLeitura));
|
|
342
344
|
}
|
|
343
345
|
return [...rotas, ...filhas];
|
|
344
346
|
}
|
package/dist/drift.part06.d.ts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import type { FonteLegado } from "./tipos.js";
|
|
2
2
|
import { ConsumerFramework, RecursoResolvido, RegistroConsumerBridgeDrift, RegistroConsumerSurfaceDrift, RotaResolvida, SimboloResolvido } from "./drift.part01.js";
|
|
3
|
-
import type
|
|
3
|
+
import { type AdaptadorLeituraCompartilhadaDrift } from "./drift.part04.js";
|
|
4
4
|
export declare function inferirConsumerFrameworkPrincipal(fontesLegado: FonteLegado[], consumerSurfaces: RegistroConsumerSurfaceDrift[], consumerBridges: RegistroConsumerBridgeDrift[]): ConsumerFramework | null;
|
|
5
5
|
export declare function extrairColecoesFirebase(arquivo: string, codigo: string): RecursoResolvido[];
|
|
6
|
-
export declare function indexarTypeScript(diretorios: string[],
|
|
6
|
+
export declare function indexarTypeScript(diretorios: string[], adaptadorLeitura?: AdaptadorLeituraCompartilhadaDrift): Promise<{
|
|
7
7
|
simbolos: SimboloResolvido[];
|
|
8
8
|
rotas: RotaResolvida[];
|
|
9
9
|
recursos: RecursoResolvido[];
|
package/dist/drift.part06.js
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
// SEMA-GOVERNED: sema.
|
|
2
|
-
// Descricao:
|
|
1
|
+
// SEMA-GOVERNED: sema.produto.governanca_ia.drift
|
|
2
|
+
// Descricao: indexa TypeScript com catalogo e AST compartilhados pelo drift.
|
|
3
3
|
import { readFile } from "node:fs/promises";
|
|
4
4
|
import path from "node:path";
|
|
5
5
|
import ts from "typescript";
|
|
6
6
|
import { coletarSuperficiesAngularStandaloneConsumer } from "./angular-consumer-standalone.js";
|
|
7
7
|
import { extrairRotasTypeScriptHttp } from "./typescript-http.js";
|
|
8
8
|
import { arquivoEhRotasAngularConsumer, arquivoEhRotasAngularConsumerRaiz, arquivoEhRotasReactViteConsumer, arquivoEhSuperficieNextJsConsumer, arquivoEhSuperficieReactViteConsumer, extrairRotasAngularConsumer, extrairRotasReactViteConsumer, inferirRotaNextJsConsumer, inferirRotaReactViteConsumer, normalizarRelacaoConsumer, registrarAtribuicaoPrototypeTypeScript, registrarMetodosObjectAssignTypeScript } from "./drift.part05.js";
|
|
9
|
-
import { caminhosSimbolicos, desembrulharExpressaoTypeScript, extrairNomeClassePrototypeTypeScript, extrairTextoLiteral, juntarCaminhoHttp, lerDecorator, listarArquivosRecursivos, registrarSimboloTypeScript } from "./drift.part04.js";
|
|
9
|
+
import { caminhosSimbolicos, chaveCaminhoCanonicoDrift, deduplicarRaizesSobrepostasDrift, desembrulharExpressaoTypeScript, extrairNomeClassePrototypeTypeScript, extrairTextoLiteral, juntarCaminhoHttp, lerDecorator, listarArquivosRecursivos, registrarSimboloTypeScript, } from "./drift.part04.js";
|
|
10
10
|
import { extrairRecursosPersistenciaCodigoVivo, registrarRecursoDrift } from "./drift.part03.js";
|
|
11
11
|
export function inferirConsumerFrameworkPrincipal(fontesLegado, consumerSurfaces, consumerBridges) {
|
|
12
12
|
const arquivos = [
|
|
@@ -38,6 +38,75 @@ export function inferirConsumerFrameworkPrincipal(fontesLegado, consumerSurfaces
|
|
|
38
38
|
}
|
|
39
39
|
return null;
|
|
40
40
|
}
|
|
41
|
+
function fonteDeclaraRotasReactVite(relacaoArquivo, sourceFile) {
|
|
42
|
+
if (arquivoEhRotasReactViteConsumer(relacaoArquivo)) {
|
|
43
|
+
return true;
|
|
44
|
+
}
|
|
45
|
+
let encontrouDeclaracao = false;
|
|
46
|
+
const nomeExpressao = (expressao) => {
|
|
47
|
+
if (ts.isIdentifier(expressao))
|
|
48
|
+
return expressao.text;
|
|
49
|
+
if (ts.isPropertyAccessExpression(expressao))
|
|
50
|
+
return expressao.name.text;
|
|
51
|
+
return undefined;
|
|
52
|
+
};
|
|
53
|
+
const nomePropriedade = (elemento) => {
|
|
54
|
+
if (!("name" in elemento) || !elemento.name)
|
|
55
|
+
return undefined;
|
|
56
|
+
if (ts.isIdentifier(elemento.name) || ts.isStringLiteralLike(elemento.name)) {
|
|
57
|
+
return elemento.name.text;
|
|
58
|
+
}
|
|
59
|
+
return undefined;
|
|
60
|
+
};
|
|
61
|
+
const visitar = (node) => {
|
|
62
|
+
if (encontrouDeclaracao)
|
|
63
|
+
return;
|
|
64
|
+
if (ts.isCallExpression(node)
|
|
65
|
+
&& ["createBrowserRouter", "createRoutesFromElements", "useRoutes"]
|
|
66
|
+
.includes(nomeExpressao(node.expression) ?? "")) {
|
|
67
|
+
encontrouDeclaracao = true;
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
70
|
+
if ((ts.isJsxOpeningElement(node) || ts.isJsxSelfClosingElement(node))
|
|
71
|
+
&& ["Route", "Routes", "RouterProvider"].includes(nomeExpressao(node.tagName) ?? "")) {
|
|
72
|
+
encontrouDeclaracao = true;
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
75
|
+
if (ts.isObjectLiteralExpression(node)) {
|
|
76
|
+
const propriedades = new Set(node.properties.map(nomePropriedade).filter(Boolean));
|
|
77
|
+
if ((propriedades.has("path") || propriedades.has("index"))
|
|
78
|
+
&& (propriedades.has("element") || propriedades.has("Component"))) {
|
|
79
|
+
encontrouDeclaracao = true;
|
|
80
|
+
return;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
ts.forEachChild(node, visitar);
|
|
84
|
+
};
|
|
85
|
+
visitar(sourceFile);
|
|
86
|
+
return encontrouDeclaracao;
|
|
87
|
+
}
|
|
88
|
+
function resolverArquivoConsumerCatalogado(diretorio, caminhoRelativo, arquivosCatalogados) {
|
|
89
|
+
const normalizado = caminhoRelativo.replace(/\\/g, "/");
|
|
90
|
+
const semExtensao = normalizado.replace(/\.(?:ts|tsx|js|jsx)$/i, "");
|
|
91
|
+
const candidatos = [
|
|
92
|
+
normalizado,
|
|
93
|
+
`${semExtensao}.ts`,
|
|
94
|
+
`${semExtensao}.tsx`,
|
|
95
|
+
`${semExtensao}.js`,
|
|
96
|
+
`${semExtensao}.jsx`,
|
|
97
|
+
`${semExtensao}/index.ts`,
|
|
98
|
+
`${semExtensao}/index.tsx`,
|
|
99
|
+
`${semExtensao}/index.js`,
|
|
100
|
+
`${semExtensao}/index.jsx`,
|
|
101
|
+
];
|
|
102
|
+
for (const candidato of candidatos) {
|
|
103
|
+
const absoluto = path.resolve(diretorio, ...candidato.split("/"));
|
|
104
|
+
const catalogado = arquivosCatalogados.get(chaveCaminhoCanonicoDrift(absoluto));
|
|
105
|
+
if (catalogado)
|
|
106
|
+
return catalogado;
|
|
107
|
+
}
|
|
108
|
+
return undefined;
|
|
109
|
+
}
|
|
41
110
|
export function extrairColecoesFirebase(arquivo, codigo) {
|
|
42
111
|
const recursos = new Map();
|
|
43
112
|
const registrar = (nome) => {
|
|
@@ -126,27 +195,39 @@ function aplicarReexportacoesTypeScript(simbolos, reexportacoes) {
|
|
|
126
195
|
}
|
|
127
196
|
}
|
|
128
197
|
}
|
|
129
|
-
export async function indexarTypeScript(diretorios,
|
|
130
|
-
|
|
198
|
+
export async function indexarTypeScript(diretorios, adaptadorLeitura) {
|
|
199
|
+
adaptadorLeitura?.emitir?.("extractor.run");
|
|
131
200
|
const simbolos = new Map();
|
|
132
201
|
const rotas = [];
|
|
133
202
|
const recursos = new Map();
|
|
134
203
|
const consumerSurfaces = new Map();
|
|
135
204
|
const sourceFiles = new Map();
|
|
136
|
-
|
|
137
|
-
|
|
205
|
+
const arquivosProcessados = new Set();
|
|
206
|
+
for (const diretorio of deduplicarRaizesSobrepostasDrift(diretorios)) {
|
|
207
|
+
const arquivos = (await listarArquivosRecursivos(diretorio, [".ts", ".tsx", ".js", ".jsx", ".mjs", ".cjs"], adaptadorLeitura))
|
|
138
208
|
.filter((arquivo) => !arquivo.endsWith(".d.ts")
|
|
139
209
|
&& !arquivo.endsWith(".spec.ts")
|
|
140
|
-
&& !arquivo.endsWith(".test.ts"))
|
|
210
|
+
&& !arquivo.endsWith(".test.ts"))
|
|
211
|
+
.filter((arquivo) => {
|
|
212
|
+
const chave = chaveCaminhoCanonicoDrift(arquivo);
|
|
213
|
+
if (arquivosProcessados.has(chave)) {
|
|
214
|
+
return false;
|
|
215
|
+
}
|
|
216
|
+
arquivosProcessados.add(chave);
|
|
217
|
+
return true;
|
|
218
|
+
});
|
|
141
219
|
const arquivosRotasAngular = arquivos.filter((arquivo) => arquivoEhRotasAngularConsumer(path.relative(diretorio, arquivo)));
|
|
142
220
|
const arquivosRotasAngularRaiz = new Set(arquivosRotasAngular
|
|
143
221
|
.filter((arquivo) => arquivoEhRotasAngularConsumerRaiz(path.relative(diretorio, arquivo)))
|
|
144
222
|
.map((arquivo) => path.resolve(arquivo)));
|
|
223
|
+
const arquivosCatalogadosRaiz = new Map(arquivos.map((arquivo) => [chaveCaminhoCanonicoDrift(arquivo), arquivo]));
|
|
145
224
|
const usarApenasRotasAngularRaiz = arquivosRotasAngularRaiz.size > 0;
|
|
146
225
|
let encontrouSuperficieAngularPorRotas = false;
|
|
147
226
|
const reexportacoes = [];
|
|
148
227
|
for (const arquivo of arquivos) {
|
|
149
|
-
const codigo =
|
|
228
|
+
const codigo = adaptadorLeitura
|
|
229
|
+
? await adaptadorLeitura.lerTexto(arquivo)
|
|
230
|
+
: await readFile(arquivo, "utf8");
|
|
150
231
|
const origemArquivo = /\.(?:js|jsx|mjs|cjs)$/i.test(arquivo) ? "js" : "ts";
|
|
151
232
|
const scriptKind = arquivo.endsWith(".tsx")
|
|
152
233
|
? ts.ScriptKind.TSX
|
|
@@ -155,7 +236,7 @@ export async function indexarTypeScript(diretorios, catalogo) {
|
|
|
155
236
|
: origemArquivo === "js"
|
|
156
237
|
? ts.ScriptKind.JS
|
|
157
238
|
: ts.ScriptKind.TS;
|
|
158
|
-
|
|
239
|
+
adaptadorLeitura?.emitir?.("ast.create", arquivo);
|
|
159
240
|
const sourceFile = ts.createSourceFile(arquivo, codigo, ts.ScriptTarget.Latest, true, scriptKind);
|
|
160
241
|
sourceFiles.set(path.resolve(arquivo), sourceFile);
|
|
161
242
|
const basesSimbolicas = caminhosSimbolicos(diretorio, arquivo);
|
|
@@ -206,7 +287,7 @@ export async function indexarTypeScript(diretorios, catalogo) {
|
|
|
206
287
|
simbolo: superficieReact.tipoArquivo,
|
|
207
288
|
});
|
|
208
289
|
}
|
|
209
|
-
if (
|
|
290
|
+
if (fonteDeclaraRotasReactVite(relacao, sourceFile)) {
|
|
210
291
|
for (const rotaReact of extrairRotasReactViteConsumer(relacao, codigo)) {
|
|
211
292
|
consumerSurfaces.set(`${rotaReact.rota}:${arquivo}:router`, {
|
|
212
293
|
rota: rotaReact.rota,
|
|
@@ -221,19 +302,23 @@ export async function indexarTypeScript(diretorios, catalogo) {
|
|
|
221
302
|
simbolo: "router",
|
|
222
303
|
});
|
|
223
304
|
if (rotaReact.arquivoComponente) {
|
|
224
|
-
const arquivoComponente =
|
|
225
|
-
|
|
226
|
-
rota:
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
305
|
+
const arquivoComponente = resolverArquivoConsumerCatalogado(diretorio, rotaReact.arquivoComponente, arquivosCatalogadosRaiz);
|
|
306
|
+
if (arquivoComponente) {
|
|
307
|
+
consumerSurfaces.set(`${rotaReact.rota}:${arquivoComponente}:page`, {
|
|
308
|
+
rota: rotaReact.rota,
|
|
309
|
+
arquivo: arquivoComponente,
|
|
310
|
+
tipoArquivo: "page",
|
|
311
|
+
});
|
|
312
|
+
}
|
|
230
313
|
}
|
|
231
314
|
}
|
|
232
315
|
}
|
|
233
316
|
if (arquivoEhRotasAngularConsumer(relacao) && (!usarApenasRotasAngularRaiz || arquivosRotasAngularRaiz.has(path.resolve(arquivo)))) {
|
|
234
317
|
encontrouSuperficieAngularPorRotas = true;
|
|
235
|
-
for (const rotaAngular of await extrairRotasAngularConsumer(diretorio, relacao, "/", new Set(),
|
|
236
|
-
const arquivoRotasAngular =
|
|
318
|
+
for (const rotaAngular of await extrairRotasAngularConsumer(diretorio, relacao, "/", new Set(), adaptadorLeitura)) {
|
|
319
|
+
const arquivoRotasAngular = resolverArquivoConsumerCatalogado(diretorio, rotaAngular.arquivoRotas, arquivosCatalogadosRaiz);
|
|
320
|
+
if (!arquivoRotasAngular)
|
|
321
|
+
continue;
|
|
237
322
|
consumerSurfaces.set(`${rotaAngular.rota}:${arquivoRotasAngular}:routes`, {
|
|
238
323
|
rota: rotaAngular.rota,
|
|
239
324
|
arquivo: arquivoRotasAngular,
|
|
@@ -247,12 +332,14 @@ export async function indexarTypeScript(diretorios, catalogo) {
|
|
|
247
332
|
simbolo: rotaAngular.componente ?? "routes",
|
|
248
333
|
});
|
|
249
334
|
if (rotaAngular.arquivoComponente) {
|
|
250
|
-
const arquivoComponente =
|
|
251
|
-
|
|
252
|
-
rota:
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
335
|
+
const arquivoComponente = resolverArquivoConsumerCatalogado(diretorio, rotaAngular.arquivoComponente, arquivosCatalogadosRaiz);
|
|
336
|
+
if (arquivoComponente) {
|
|
337
|
+
consumerSurfaces.set(`${rotaAngular.rota}:${arquivoComponente}:component`, {
|
|
338
|
+
rota: rotaAngular.rota,
|
|
339
|
+
arquivo: arquivoComponente,
|
|
340
|
+
tipoArquivo: "component",
|
|
341
|
+
});
|
|
342
|
+
}
|
|
256
343
|
}
|
|
257
344
|
}
|
|
258
345
|
}
|
|
@@ -332,7 +419,7 @@ export async function indexarTypeScript(diretorios, catalogo) {
|
|
|
332
419
|
}
|
|
333
420
|
}
|
|
334
421
|
if (!encontrouSuperficieAngularPorRotas) {
|
|
335
|
-
for (const superficie of await coletarSuperficiesAngularStandaloneConsumer(diretorio, arquivos,
|
|
422
|
+
for (const superficie of await coletarSuperficiesAngularStandaloneConsumer(diretorio, arquivos, adaptadorLeitura ? (arquivo) => adaptadorLeitura.lerTexto(arquivo) : undefined, sourceFiles)) {
|
|
336
423
|
const arquivoSuperficie = path.join(diretorio, superficie.arquivo);
|
|
337
424
|
consumerSurfaces.set(`${superficie.rota}:${arquivoSuperficie}:${superficie.tipoArquivo}`, {
|
|
338
425
|
rota: superficie.rota,
|
package/dist/drift.part07.d.ts
CHANGED
|
@@ -1,52 +1,52 @@
|
|
|
1
1
|
import type { EngineBanco } from "@sema/nucleo";
|
|
2
2
|
import { OrigemRecursoDrift, RecursoResolvido, RegistroColunaPersistenciaDrift, RegistroConsumerSurfaceDrift, RotaResolvida, SimboloResolvido } from "./drift.part01.js";
|
|
3
|
-
import type
|
|
4
|
-
export declare function indexarPython(diretorios: string[],
|
|
3
|
+
import { type AdaptadorLeituraCompartilhadaDrift } from "./drift.part04.js";
|
|
4
|
+
export declare function indexarPython(diretorios: string[], adaptadorLeitura?: AdaptadorLeituraCompartilhadaDrift): Promise<{
|
|
5
5
|
simbolos: SimboloResolvido[];
|
|
6
6
|
rotas: RotaResolvida[];
|
|
7
7
|
recursos: RecursoResolvido[];
|
|
8
8
|
}>;
|
|
9
|
-
export declare function indexarDart(diretorios: string[],
|
|
9
|
+
export declare function indexarDart(diretorios: string[], adaptadorLeitura?: AdaptadorLeituraCompartilhadaDrift): Promise<{
|
|
10
10
|
simbolos: SimboloResolvido[];
|
|
11
11
|
rotas: RotaResolvida[];
|
|
12
12
|
recursos: RecursoResolvido[];
|
|
13
13
|
consumerSurfaces: RegistroConsumerSurfaceDrift[];
|
|
14
14
|
}>;
|
|
15
15
|
export declare function registrarSimboloGenerico(simbolos: Map<string, SimboloResolvido>, origem: SimboloResolvido["origem"], basesSimbolicas: string[], arquivo: string, simbolo: string): void;
|
|
16
|
-
export declare function indexarDotnet(diretorios: string[],
|
|
16
|
+
export declare function indexarDotnet(diretorios: string[], adaptadorLeitura?: AdaptadorLeituraCompartilhadaDrift): Promise<{
|
|
17
17
|
simbolos: SimboloResolvido[];
|
|
18
18
|
rotas: RotaResolvida[];
|
|
19
19
|
recursos: RecursoResolvido[];
|
|
20
20
|
}>;
|
|
21
|
-
export declare function indexarJava(diretorios: string[],
|
|
21
|
+
export declare function indexarJava(diretorios: string[], adaptadorLeitura?: AdaptadorLeituraCompartilhadaDrift): Promise<{
|
|
22
22
|
simbolos: SimboloResolvido[];
|
|
23
23
|
rotas: RotaResolvida[];
|
|
24
24
|
recursos: RecursoResolvido[];
|
|
25
25
|
}>;
|
|
26
|
-
export declare function indexarGo(diretorios: string[],
|
|
26
|
+
export declare function indexarGo(diretorios: string[], adaptadorLeitura?: AdaptadorLeituraCompartilhadaDrift): Promise<{
|
|
27
27
|
simbolos: SimboloResolvido[];
|
|
28
28
|
rotas: RotaResolvida[];
|
|
29
29
|
recursos: RecursoResolvido[];
|
|
30
30
|
}>;
|
|
31
|
-
export declare function indexarRust(diretorios: string[],
|
|
31
|
+
export declare function indexarRust(diretorios: string[], adaptadorLeitura?: AdaptadorLeituraCompartilhadaDrift): Promise<{
|
|
32
32
|
simbolos: SimboloResolvido[];
|
|
33
33
|
rotas: RotaResolvida[];
|
|
34
34
|
recursos: RecursoResolvido[];
|
|
35
35
|
}>;
|
|
36
|
-
export declare function indexarCpp(diretorios: string[],
|
|
36
|
+
export declare function indexarCpp(diretorios: string[], adaptadorLeitura?: AdaptadorLeituraCompartilhadaDrift): Promise<{
|
|
37
37
|
simbolos: SimboloResolvido[];
|
|
38
38
|
recursos: RecursoResolvido[];
|
|
39
39
|
}>;
|
|
40
|
-
export declare function indexarPhp(diretorios: string[],
|
|
40
|
+
export declare function indexarPhp(diretorios: string[], adaptadorLeitura?: AdaptadorLeituraCompartilhadaDrift): Promise<{
|
|
41
41
|
simbolos: SimboloResolvido[];
|
|
42
42
|
rotas: RotaResolvida[];
|
|
43
43
|
recursos: RecursoResolvido[];
|
|
44
44
|
}>;
|
|
45
|
-
export declare function indexarLua(diretorios: string[],
|
|
45
|
+
export declare function indexarLua(diretorios: string[], adaptadorLeitura?: AdaptadorLeituraCompartilhadaDrift): Promise<{
|
|
46
46
|
simbolos: SimboloResolvido[];
|
|
47
47
|
recursos: RecursoResolvido[];
|
|
48
48
|
}>;
|
|
49
|
-
export declare function indexarPersistenciaDeclarativa(diretorios: string[],
|
|
49
|
+
export declare function indexarPersistenciaDeclarativa(diretorios: string[], adaptadorLeitura?: AdaptadorLeituraCompartilhadaDrift): Promise<{
|
|
50
50
|
recursos: RecursoResolvido[];
|
|
51
51
|
simbolos: SimboloResolvido[];
|
|
52
52
|
}>;
|