tutanus 0.13.1 → 0.13.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.
- package/README.md +5 -5
- package/dist/analysts/corrections/reorganize-barrels.d.ts.map +1 -1
- package/dist/analysts/corrections/reorganize-barrels.js +29 -6
- package/dist/analysts/corrections/reorganize-barrels.js.map +1 -1
- package/dist/analysts/html/analysts/analyst-html.js.map +1 -1
- package/dist/analysts/js-ts/analysts/analyst-commands-cli.d.ts.map +1 -1
- package/dist/analysts/js-ts/analysts/analyst-commands-cli.js.map +1 -1
- package/dist/app/github/app/index.d.ts +6 -0
- package/dist/app/github/app/index.d.ts.map +1 -1
- package/dist/app/github/app/index.js +6 -0
- package/dist/app/github/app/index.js.map +1 -1
- package/dist/app/github/app/setup-routes.d.ts.map +1 -1
- package/dist/app/github/app/setup-routes.js +0 -1
- package/dist/app/github/app/setup-routes.js.map +1 -1
- package/dist/app/github/dashboard/index.d.ts +2 -0
- package/dist/app/github/dashboard/index.d.ts.map +1 -1
- package/dist/app/github/dashboard/index.js +2 -0
- package/dist/app/github/dashboard/index.js.map +1 -1
- package/dist/app/github/dashboard/layout.d.ts +5 -0
- package/dist/app/github/dashboard/layout.d.ts.map +1 -0
- package/dist/app/github/dashboard/layout.js +5 -0
- package/dist/app/github/dashboard/layout.js.map +1 -0
- package/dist/app/github/dashboard/page.d.ts +3 -0
- package/dist/app/github/dashboard/page.d.ts.map +1 -0
- package/dist/app/github/dashboard/page.js +10 -0
- package/dist/app/github/dashboard/page.js.map +1 -0
- package/dist/app/github/jobs/index.d.ts +1 -0
- package/dist/app/github/jobs/index.d.ts.map +1 -1
- package/dist/app/github/jobs/index.js +1 -0
- package/dist/app/github/jobs/index.js.map +1 -1
- package/dist/cli/commands/command-marketplace.js +1 -1
- package/dist/cli/commands/command-marketplace.js.map +1 -1
- package/dist/licenses/index.d.ts +2 -1
- package/dist/licenses/index.d.ts.map +1 -1
- package/dist/licenses/index.js +1 -0
- package/dist/licenses/index.js.map +1 -1
- package/dist/licenses/policy.d.ts +5 -0
- package/dist/licenses/policy.d.ts.map +1 -0
- package/dist/licenses/policy.js +60 -0
- package/dist/licenses/policy.js.map +1 -0
- package/dist/licenses/scanner.d.ts +4 -2
- package/dist/licenses/scanner.d.ts.map +1 -1
- package/dist/licenses/scanner.js +10 -2
- package/dist/licenses/scanner.js.map +1 -1
- package/dist/shared/marketplace/remote.js +1 -1
- package/dist/shared/marketplace/remote.js.map +1 -1
- package/dist/types/licenses/licenses.d.ts +8 -0
- package/dist/types/licenses/licenses.d.ts.map +1 -1
- package/dist/types/licenses/licenses.js.map +1 -1
- package/package.json +6 -7
- package/out/404/index.html +0 -1
- package/out/404.html +0 -1
- package/out/__next.__PAGE__.txt +0 -25
- package/out/__next._full.txt +0 -37
- package/out/__next._head.txt +0 -5
- package/out/__next._index.txt +0 -6
- package/out/__next._tree.txt +0 -4
- package/out/_next/static/7AicuowOpmCuGWjCpsQMB/_buildManifest.js +0 -11
- package/out/_next/static/7AicuowOpmCuGWjCpsQMB/_clientMiddlewareManifest.js +0 -1
- package/out/_next/static/7AicuowOpmCuGWjCpsQMB/_ssgManifest.js +0 -1
- package/out/_next/static/chunks/05-c3ty_6dwfk.js +0 -1
- package/out/_next/static/chunks/0cz1d0mv5g_q7.js +0 -1
- package/out/_next/static/chunks/1061ff024jzvu.js +0 -2
- package/out/_next/static/chunks/14mrh2-p_w84d.js +0 -1
- package/out/_next/static/chunks/15orcrkp-_9ct.js +0 -4
- package/out/_next/static/chunks/1jq4o6yq14o4c.js +0 -31
- package/out/_next/static/chunks/1rxncug86bump.js +0 -1
- package/out/_next/static/chunks/2n-4qa9h44lgj.js +0 -1
- package/out/_next/static/chunks/39aw8cj-oq89z.js +0 -11
- package/out/_next/static/chunks/3n7dm2ojtyzwn.js +0 -1
- package/out/_next/static/chunks/3uta7d_6k863-.css +0 -1
- package/out/_next/static/chunks/turbopack-2xb6mmb6_q43u.js +0 -1
- package/out/_next/static/media/icon-1.008jpsm4iakzh.png +0 -0
- package/out/_not-found/__next._full.txt +0 -16
- package/out/_not-found/__next._head.txt +0 -5
- package/out/_not-found/__next._index.txt +0 -6
- package/out/_not-found/__next._not-found.__PAGE__.txt +0 -5
- package/out/_not-found/__next._not-found.txt +0 -5
- package/out/_not-found/__next._tree.txt +0 -3
- package/out/_not-found/index.html +0 -1
- package/out/_not-found/index.txt +0 -16
- package/out/changelog/__next._full.txt +0 -573
- package/out/changelog/__next._head.txt +0 -5
- package/out/changelog/__next._index.txt +0 -6
- package/out/changelog/__next._tree.txt +0 -4
- package/out/changelog/__next.changelog.__PAGE__.txt +0 -560
- package/out/changelog/__next.changelog.txt +0 -5
- package/out/changelog/index.html +0 -550
- package/out/changelog/index.txt +0 -573
- package/out/github/dashboard/__next._full.txt +0 -20
- package/out/github/dashboard/__next._head.txt +0 -5
- package/out/github/dashboard/__next._index.txt +0 -6
- package/out/github/dashboard/__next._tree.txt +0 -3
- package/out/github/dashboard/__next.github.dashboard.__PAGE__.txt +0 -9
- package/out/github/dashboard/__next.github.dashboard.txt +0 -4
- package/out/github/dashboard/__next.github.txt +0 -5
- package/out/github/dashboard/index.html +0 -1
- package/out/github/dashboard/index.txt +0 -20
- package/out/index.html +0 -1
- package/out/index.txt +0 -37
- package/out/privacy-policy/__next._full.txt +0 -38
- package/out/privacy-policy/__next._head.txt +0 -5
- package/out/privacy-policy/__next._index.txt +0 -6
- package/out/privacy-policy/__next._tree.txt +0 -4
- package/out/privacy-policy/__next.privacy-policy.__PAGE__.txt +0 -23
- package/out/privacy-policy/__next.privacy-policy.txt +0 -5
- package/out/privacy-policy/index.html +0 -1
- package/out/privacy-policy/index.txt +0 -38
- package/out/terms-of-use/__next._full.txt +0 -37
- package/out/terms-of-use/__next._head.txt +0 -5
- package/out/terms-of-use/__next._index.txt +0 -6
- package/out/terms-of-use/__next._tree.txt +0 -4
- package/out/terms-of-use/__next.terms-of-use.__PAGE__.txt +0 -18
- package/out/terms-of-use/__next.terms-of-use.txt +0 -5
- package/out/terms-of-use/index.html +0 -1
- package/out/terms-of-use/index.txt +0 -37
- package/scripts/license.json +0 -53
package/README.md
CHANGED
|
@@ -226,7 +226,7 @@ npx tutanus --help
|
|
|
226
226
|
### Do Repositório
|
|
227
227
|
|
|
228
228
|
```bash
|
|
229
|
-
git clone https://github.com/
|
|
229
|
+
git clone https://github.com/mocoto-geleia/tutanus.git
|
|
230
230
|
cd tutanus
|
|
231
231
|
npm install
|
|
232
232
|
npm run build
|
|
@@ -645,7 +645,7 @@ tutanus github-actions gate --threshold 80 --fail-on erro
|
|
|
645
645
|
### Setup
|
|
646
646
|
|
|
647
647
|
```bash
|
|
648
|
-
git clone https://github.com/
|
|
648
|
+
git clone https://github.com/mocoto-geleia/tutanus.git
|
|
649
649
|
cd tutanus
|
|
650
650
|
npm install
|
|
651
651
|
npm run build
|
|
@@ -722,9 +722,9 @@ Dependências de terceiros listadas em [THIRD-PARTY-NOTICES.txt](./THIRD-PARTY-N
|
|
|
722
722
|
<div align="center">
|
|
723
723
|
|
|
724
724
|
[](https://www.npmjs.com/package/tutanus)
|
|
725
|
-
[](https://github.com/
|
|
726
|
-
[](https://github.com/
|
|
727
|
-
[](https://github.com/
|
|
725
|
+
[](https://github.com/mocoto-geleia/tutanus)
|
|
726
|
+
[](https://github.com/mocoto-geleia/tutanus/issues)
|
|
727
|
+
[](https://github.com/mocoto-geleia/tutanus/releases)
|
|
728
728
|
|
|
729
729
|
**Feito para os iniciantes** — [Voltar ao topo](#tutanus)
|
|
730
730
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reorganize-barrels.d.ts","sourceRoot":"","sources":["../../../src/analysts/corrections/reorganize-barrels.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,MAAM,GAAG,CAAC;
|
|
1
|
+
{"version":3,"file":"reorganize-barrels.d.ts","sourceRoot":"","sources":["../../../src/analysts/corrections/reorganize-barrels.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,MAAM,GAAG,CAAC;AAgiBtE,wBAAsB,+BAA+B,CACnD,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,mBAAmB,EAAE,GAC1B,OAAO,CAAC,IAAI,CAAC,CA0Hf;AA2CD,wBAAsB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,UAAQ,GAAG,OAAO,CAAC,uBAAuB,CAAC,CA4LpG"}
|
|
@@ -5,12 +5,24 @@ import { normalizePath } from '../../shared/helpers/index.js';
|
|
|
5
5
|
const { log } = getMessages();
|
|
6
6
|
const SKIP_DIRS = new Set(['node_modules', 'dist', 'coverage', '.git', '.deprecados', '.tutanus']);
|
|
7
7
|
const EXT_PATTERN = /\.(ts|tsx|js|jsx|mjs|cjs)$/;
|
|
8
|
+
async function arquivoExiste(caminho) {
|
|
9
|
+
try {
|
|
10
|
+
await fsAsync.access(caminho);
|
|
11
|
+
return true;
|
|
12
|
+
}
|
|
13
|
+
catch {
|
|
14
|
+
return false;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
8
17
|
function normalizarRel(caminho) {
|
|
9
18
|
return path.posix.normalize(normalizePath(caminho).replace(/\\/g, '/'));
|
|
10
19
|
}
|
|
11
20
|
function semExt(caminho) {
|
|
12
21
|
return caminho.replace(EXT_PATTERN, '');
|
|
13
22
|
}
|
|
23
|
+
function gerarSpecExport(filename) {
|
|
24
|
+
return `./${semExt(filename)}.js`;
|
|
25
|
+
}
|
|
14
26
|
function resolverImportRelativo(arquivoRel, importSpec) {
|
|
15
27
|
const dir = path.posix.dirname(normalizarRel(arquivoRel));
|
|
16
28
|
return path.posix.normalize(path.posix.join(dir, importSpec));
|
|
@@ -282,7 +294,11 @@ async function extrairNomesExportados(srcDir, relPath, visitados = new Set(), pr
|
|
|
282
294
|
const reexportMatch = trimmed.match(/^export\s+(?:type\s+)?\*\s+from\s+['"]([^'"]+)['"]/);
|
|
283
295
|
if (reexportMatch) {
|
|
284
296
|
const resolved = resolverImportRelativo(relPath, reexportMatch[1]);
|
|
285
|
-
const
|
|
297
|
+
const basePath = semExt(resolved);
|
|
298
|
+
let resolvedPath = `${basePath}.ts`;
|
|
299
|
+
if (!(await arquivoExiste(path.join(srcDir, resolvedPath)))) {
|
|
300
|
+
resolvedPath = `${basePath}.tsx`;
|
|
301
|
+
}
|
|
286
302
|
const subNomes = await extrairNomesExportados(srcDir, resolvedPath, visitados, profundidade + 1);
|
|
287
303
|
for (const n of subNomes)
|
|
288
304
|
nomes.add(n);
|
|
@@ -353,7 +369,11 @@ async function repararImportsBarrelPerdidos(srcDir, barrelsPerdidos, _movimentos
|
|
|
353
369
|
for (const [, dest] of perdas) {
|
|
354
370
|
if (nomeParaDestino.has(dest))
|
|
355
371
|
continue;
|
|
356
|
-
const
|
|
372
|
+
const basePath = semExt(dest);
|
|
373
|
+
let destPath = `${basePath}.ts`;
|
|
374
|
+
if (!(await arquivoExiste(path.join(srcDir, destPath)))) {
|
|
375
|
+
destPath = `${basePath}.tsx`;
|
|
376
|
+
}
|
|
357
377
|
const nomes = await extrairNomesExportados(srcDir, destPath);
|
|
358
378
|
for (const nome of nomes) {
|
|
359
379
|
if (!nomeParaDestino.has(nome)) {
|
|
@@ -579,7 +599,7 @@ function listarArquivosDir(dir) {
|
|
|
579
599
|
const entries = readdirSync(dir, { withFileTypes: true });
|
|
580
600
|
const files = [];
|
|
581
601
|
for (const entry of entries) {
|
|
582
|
-
if (entry.isFile() && EXT_PATTERN.test(entry.name) && entry.name !== 'index.ts') {
|
|
602
|
+
if (entry.isFile() && EXT_PATTERN.test(entry.name) && entry.name !== 'index.ts' && entry.name !== 'index.tsx' && entry.name !== 'index.jsx') {
|
|
583
603
|
files.push(entry.name);
|
|
584
604
|
}
|
|
585
605
|
}
|
|
@@ -694,7 +714,7 @@ export async function gerarBarrels(baseDir, dryRun = false) {
|
|
|
694
714
|
catch { }
|
|
695
715
|
}
|
|
696
716
|
async function gerarLinhasExportacao(filename) {
|
|
697
|
-
const spec =
|
|
717
|
+
const spec = gerarSpecExport(filename);
|
|
698
718
|
const classified = exportacoesPorArquivo.get(filename);
|
|
699
719
|
if (!classified)
|
|
700
720
|
return [`export * from '${spec}';`];
|
|
@@ -739,10 +759,13 @@ export async function gerarBarrels(baseDir, dryRun = false) {
|
|
|
739
759
|
continue;
|
|
740
760
|
}
|
|
741
761
|
const existentes = exportsBarrelExistentes(content);
|
|
762
|
+
const existentesSemExt = new Set();
|
|
763
|
+
for (const s of existentes)
|
|
764
|
+
existentesSemExt.add(semExt(s));
|
|
742
765
|
const linhasParaAdicionar = [];
|
|
743
766
|
for (const f of filesModulo) {
|
|
744
|
-
const spec =
|
|
745
|
-
if (existentes.has(spec))
|
|
767
|
+
const spec = gerarSpecExport(f);
|
|
768
|
+
if (existentes.has(spec) || existentesSemExt.has(semExt(spec)))
|
|
746
769
|
continue;
|
|
747
770
|
const novasLinhas = await gerarLinhasExportacao(f);
|
|
748
771
|
linhasParaAdicionar.push(...novasLinhas);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reorganize-barrels.js","sourceRoot":"","sources":["../../../src/analysts/corrections/reorganize-barrels.ts"],"names":[],"mappings":"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","sourcesContent":["// SPDX-License-Identifier: MIT\nimport { existsSync, promises as fsAsync, readdirSync } from 'node:fs';\nimport path from 'node:path';\n\nimport { getMessages } from '@core/messages';\nimport { normalizePath } from '@shared/helpers';\n\nimport type { ResultadoEstrutural, ResultadoGeracaoBarrels } from '@';\n\nconst { log } = getMessages();\n\nconst SKIP_DIRS = new Set(['node_modules', 'dist', 'coverage', '.git', '.deprecados', '.tutanus']);\nconst EXT_PATTERN = /\\.(ts|tsx|js|jsx|mjs|cjs)$/;\n\nfunction normalizarRel(caminho: string): string {\n return path.posix.normalize(normalizePath(caminho).replace(/\\\\/g, '/'));\n}\n\nfunction semExt(caminho: string): string {\n return caminho.replace(EXT_PATTERN, '');\n}\n\nfunction resolverImportRelativo(arquivoRel: string, importSpec: string): string {\n const dir = path.posix.dirname(normalizarRel(arquivoRel));\n return path.posix.normalize(path.posix.join(dir, importSpec));\n}\n\nfunction criarMapaMovimentos(mapa: ResultadoEstrutural[], _baseDir: string): Map<string, string> {\n const movimentos = new Map<string, string>();\n for (const entry of mapa) {\n if (!entry.ideal || entry.ideal === entry.atual) continue;\n const nomeArquivo = path.basename(entry.arquivo);\n const origemRel = normalizarRel(entry.arquivo.replace(/^src\\//, ''));\n const destinoRel = normalizarRel(path.posix.join(entry.ideal.replace(/^src\\//, ''), nomeArquivo));\n if (origemRel !== destinoRel) {\n movimentos.set(semExt(origemRel), semExt(destinoRel));\n }\n }\n return movimentos;\n}\n\nasync function* walkDir(dir: string): AsyncGenerator<string> {\n try {\n const entries = await fsAsync.readdir(dir, { withFileTypes: true });\n for (const entry of entries) {\n const full = path.join(dir, entry.name);\n if (entry.isDirectory()) {\n if (SKIP_DIRS.has(entry.name)) continue;\n yield* walkDir(full);\n } else if (entry.isFile() && (entry.name.endsWith('.ts') || entry.name.endsWith('.tsx'))) {\n yield full;\n }\n }\n } catch {\n }\n}\n\nfunction ehBarrel(content: string): boolean {\n return /export\\s+.*?\\s+from\\s+['\"]/.test(content);\n}\n\nasync function encontrarBarrels(srcDir: string): Promise<string[]> {\n const barrels: string[] = [];\n for await (const filePath of walkDir(srcDir)) {\n if (path.basename(filePath) !== 'index.ts') continue;\n try {\n const content = await fsAsync.readFile(filePath, 'utf-8');\n if (ehBarrel(content)) {\n barrels.push(normalizarRel(path.relative(srcDir, filePath).replace(/\\\\/g, '/')));\n }\n } catch {\n }\n }\n return barrels;\n}\n\ninterface ExportInfo {\n spec: string;\n resolved: string;\n moveDest: string | null;\n}\n\ninterface AnaliseBarrel {\n barrelRel: string;\n exports: ExportInfo[];\n movidos: Array<ExportInfo & { moveDest: string }>;\n ficaram: ExportInfo[];\n todosMovidos: boolean;\n dirDestinoUnico: string | null;\n}\n\nfunction analisarExport(\n linha: string,\n barrelRel: string,\n movimentos: Map<string, string>\n): { exportSpec: string | null; exportInfo: ExportInfo | null } {\n const trimmed = linha.trim();\n if (!trimmed.startsWith('export') || !trimmed.includes('from')) {\n return { exportSpec: null, exportInfo: null };\n }\n const PADRAO = /export\\s+(?:\\*\\s+from|(?:default\\s+|type\\s+)?\\{[^}]*\\}\\s+from)\\s+['\"]([^'\"]+)['\"]\\s*;?\\s*$/;\n const match = PADRAO.exec(linha);\n if (!match) return { exportSpec: null, exportInfo: null };\n const spec = match[1];\n if (!spec.startsWith('.')) return { exportSpec: spec, exportInfo: null };\n const resolved = semExt(resolverImportRelativo(barrelRel, spec));\n const moveDest = movimentos.get(resolved) ?? null;\n return { exportSpec: spec, exportInfo: { spec, resolved, moveDest } };\n}\n\nfunction temMoveDest(e: ExportInfo): e is ExportInfo & { moveDest: string } {\n return e.moveDest !== null;\n}\n\nfunction analisarBarrel(\n content: string,\n barrelRel: string,\n movimentos: Map<string, string>\n): AnaliseBarrel {\n const exports: ExportInfo[] = [];\n const linhas = content.split('\\n');\n for (const linha of linhas) {\n const { exportInfo } = analisarExport(linha, barrelRel, movimentos);\n if (exportInfo) exports.push(exportInfo);\n }\n const movidos = exports.filter(temMoveDest);\n const ficaram = exports.filter(e => e.moveDest === null);\n const todosMovidos = exports.length > 0 && movidos.length === exports.length;\n\n let dirDestinoUnico: string | null = null;\n if (todosMovidos) {\n const dirs = new Set(movidos.map(e => path.posix.dirname(e.moveDest)));\n if (dirs.size === 1) {\n const val = dirs.values().next().value;\n if (val !== undefined) dirDestinoUnico = val;\n }\n }\n\n return { barrelRel, exports, movidos, ficaram, todosMovidos, dirDestinoUnico };\n}\n\nfunction removerExportsMovidos(content: string, barrelRel: string, movimentos: Map<string, string>): string {\n const linhas = content.split('\\n');\n const resultado: string[] = [];\n for (const linha of linhas) {\n const { exportSpec, exportInfo } = analisarExport(linha, barrelRel, movimentos);\n if (exportInfo && exportInfo.moveDest !== null) continue;\n if (exportSpec !== null && exportInfo === null) {\n resultado.push(linha);\n continue;\n }\n if (!exportInfo) {\n resultado.push(linha);\n continue;\n }\n resultado.push(linha);\n }\n return resultado.join('\\n');\n}\n\nasync function moverBarrel(\n barrelRel: string,\n dirDestino: string,\n srcDir: string\n): Promise<void> {\n const origemAbs = path.join(srcDir, barrelRel);\n const nomeArquivo = path.basename(barrelRel);\n const destinoAbs = path.join(srcDir, dirDestino, nomeArquivo);\n const destinoDirAbs = path.dirname(destinoAbs);\n\n try {\n await fsAsync.mkdir(destinoDirAbs, { recursive: true });\n await fsAsync.rename(origemAbs, destinoAbs);\n log.info(`Barrel movido: ${barrelRel} → ${path.posix.join(dirDestino, nomeArquivo)}`);\n } catch (err) {\n log.aviso(`Erro ao mover barrel ${barrelRel}: ${err instanceof Error ? err.message : String(err)}`);\n }\n}\n\nasync function criarBarrelSeNecessario(\n dirRel: string,\n exportsParaAdicionar: ExportInfo[],\n srcDir: string\n): Promise<boolean> {\n const barrelPath = path.join(srcDir, dirRel, 'index.ts');\n if (exportsParaAdicionar.length === 0) return false;\n\n const linhas: string[] = [];\n\n if (existsSync(barrelPath)) {\n const content = await fsAsync.readFile(barrelPath, 'utf-8');\n linhas.push(content.replace(/\\n$/, ''));\n }\n\n for (const exp of exportsParaAdicionar) {\n const moveDest = exp.moveDest;\n if (!moveDest) continue;\n const nomeArquivo = path.basename(moveDest);\n linhas.push(`export * from './${nomeArquivo}.js';`);\n }\n\n const novoConteudo = `${linhas.join('\\n')}\\n`;\n try {\n await fsAsync.mkdir(path.dirname(barrelPath), { recursive: true });\n await fsAsync.writeFile(barrelPath, novoConteudo, 'utf-8');\n const relPath = path.relative(srcDir, barrelPath);\n log.info(`Barrel ${existsSync(barrelPath) ? 'atualizado' : 'criado'}: ${relPath}`);\n return true;\n } catch {\n return false;\n }\n}\n\nasync function apagarBarrelSeVazio(barrelRel: string, srcDir: string): Promise<boolean> {\n const barrelAbs = path.join(srcDir, barrelRel);\n try {\n const content = await fsAsync.readFile(barrelAbs, 'utf-8');\n const trimmed = content.trim();\n if (!trimmed || !ehBarrel(trimmed)) {\n await fsAsync.unlink(barrelAbs);\n log.info(`Barrel vazio removido: ${barrelRel}`);\n return true;\n }\n } catch {\n }\n return false;\n}\n\nasync function atualizarImportsGlobais(\n srcDir: string,\n movimentos: Map<string, string>\n): Promise<number> {\n let totalReescritos = 0;\n\n for await (const filePath of walkDir(srcDir)) {\n const rel = normalizarRel(path.relative(srcDir, filePath).replace(/\\\\/g, '/'));\n try {\n const content = await fsAsync.readFile(filePath, 'utf-8');\n let reescritos = 0;\n const linhas = content.split('\\n');\n\n for (let i = 0; i < linhas.length; i++) {\n const linha = linhas[i];\n const trimmed = linha.trim();\n if (!trimmed.startsWith('import') && !trimmed.startsWith('export') && !trimmed.includes('require(')) continue;\n\n const matches = linha.matchAll(/(['\"])([^'\"\\n]+?)\\1/g);\n for (const m of matches) {\n const spec = m[2];\n if (!spec) continue;\n\n const isRelative = spec.startsWith('./') || spec.startsWith('../');\n const isAlias = spec.startsWith('@/') || /^@[^/]+\\//.test(spec);\n if (!isRelative && !isAlias) continue;\n\n let resolved: string;\n if (spec.startsWith('@/')) {\n resolved = semExt(normalizarRel(`src/${spec.slice(2)}`));\n } else if (spec.startsWith('@')) {\n resolved = semExt(normalizarRel(`src/${spec.slice(1)}`)).replace(/^src\\//, '');\n } else {\n resolved = semExt(resolverImportRelativo(rel, spec));\n }\n\n const moveDestino = movimentos.get(resolved);\n if (!moveDestino) continue;\n\n const fileDir = path.posix.dirname(rel);\n let newSpec = path.posix.relative(fileDir, moveDestino);\n newSpec = normalizarRel(newSpec);\n if (!newSpec.startsWith('.')) newSpec = `./${newSpec}`;\n\n const ext = path.extname(spec);\n if (ext === '.js' || ext === '.mjs' || ext === '.cjs') {\n newSpec += ext;\n } else if (!path.extname(newSpec)) {\n newSpec += '.js';\n }\n\n const escapedOld = spec.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n const fromRegex = new RegExp(`(['\\\"])${escapedOld}\\\\1`);\n if (fromRegex.test(linhas[i])) {\n linhas[i] = linhas[i].replace(fromRegex, `$1${newSpec}$1`);\n reescritos++;\n }\n }\n }\n\n if (reescritos > 0) {\n await fsAsync.writeFile(filePath, linhas.join('\\n'), 'utf-8');\n totalReescritos += reescritos;\n }\n } catch {\n }\n }\n return totalReescritos;\n}\n\nasync function extrairNomesExportados(\n srcDir: string,\n relPath: string,\n visitados = new Set<string>(),\n profundidade = 0\n): Promise<Set<string>> {\n if (profundidade > 5) return new Set();\n const caminho = path.join(srcDir, relPath);\n const chave = normalizarRel(relPath);\n if (visitados.has(chave)) return new Set();\n visitados.add(chave);\n\n const nomes = new Set<string>();\n try {\n const content = await fsAsync.readFile(caminho, 'utf-8');\n for (const linha of content.split('\\n')) {\n const trimmed = linha.trim();\n if (trimmed.startsWith('export default ')) {\n nomes.add('default');\n }\n // export function, export async function, export const, export let, export var,\n // export class, export interface, export type, export enum\n const exportDecl = trimmed.match(\n /^export\\s+(?:type\\s+)?(?:(?:async\\s+)?(?:function|const|let|var|class|interface|type|enum))\\s+(\\w+)/\n );\n if (exportDecl && exportDecl[1]) {\n nomes.add(exportDecl[1]);\n }\n // export { name1, name2 as alias, ... }\n const exportList = trimmed.match(/^export\\s+type\\s*\\{([^}]+)\\}|^export\\s*\\{([^}]+)\\}/);\n if (exportList) {\n const body = exportList[1] ?? exportList[2];\n if (body) {\n body.split(',').forEach(part => {\n const m = part.trim().match(/^(\\w+)(?:\\s+as\\s+\\w+)?$/);\n if (m) nomes.add(m[1]);\n });\n }\n }\n // Segue re-exports: export * from './foo'\n const reexportMatch = trimmed.match(/^export\\s+(?:type\\s+)?\\*\\s+from\\s+['\"]([^'\"]+)['\"]/);\n if (reexportMatch) {\n const resolved = resolverImportRelativo(relPath, reexportMatch[1]);\n const resolvedPath = `${semExt(resolved) }.ts`;\n const subNomes = await extrairNomesExportados(srcDir, resolvedPath, visitados, profundidade + 1);\n for (const n of subNomes) nomes.add(n);\n }\n }\n } catch {\n // arquivo não encontrado, ignora\n }\n return nomes;\n}\n\ninterface ExportsClassificados {\n types: Set<string>;\n values: Set<string>;\n}\n\nfunction classificarExports(content: string): ExportsClassificados {\n const types = new Set<string>();\n const values = new Set<string>();\n for (const linha of content.split('\\n')) {\n const trimmed = linha.trim();\n if (!trimmed.startsWith('export')) continue;\n if (/from\\s+['\"]/.test(trimmed)) continue;\n // export interface X\n let m = trimmed.match(/^export\\s+interface\\s+(\\w+)/);\n if (m) { types.add(m[1]); continue; }\n // export type X = ... (mas NÃO export type { X })\n if (/^export\\s+type\\s+(\\w+)\\s*=/.test(trimmed)) {\n m = trimmed.match(/^export\\s+type\\s+(\\w+)\\s*=/);\n if (m) { types.add(m[1]); continue; }\n }\n // export enum X (enum é runtime value)\n m = trimmed.match(/^export\\s+enum\\s+(\\w+)/);\n if (m) { values.add(m[1]); continue; }\n // export default class/function\n m = trimmed.match(/^export\\s+default\\s+(?:abstract\\s+)?(?:class|function)\\s+(\\w+)/);\n if (m) { values.add(m[1]); continue; }\n if (/^export\\s+default\\s+/.test(trimmed)) { continue; }\n // export function/const/let/var/class\n m = trimmed.match(/^export\\s+(?:abstract\\s+)?(?:async\\s+)?(?:function|const|let|var|class)\\s+(\\w+)/);\n if (m) { values.add(m[1]); continue; }\n // export { X, Y } - assume que são valores (inferência conservadora)\n m = trimmed.match(/^export\\s+(?:type\\s+)?\\{([^}]+)\\}/);\n if (m) {\n m[1].split(',').forEach(part => {\n const name = part.trim().match(/^(\\w+)/);\n if (name) values.add(name[1]);\n });\n continue;\n }\n }\n return { types, values };\n}\n\nasync function repararImportsBarrelPerdidos(\n srcDir: string,\n barrelsPerdidos: Map<string, Map<string, string>>,\n _movimentos: Map<string, string>\n): Promise<number> {\n if (barrelsPerdidos.size === 0) return 0;\n\n let totalReparados = 0;\n\n // Pré-constrói mapa nomeExportado -> moveDest lendo os arquivos destino\n const nomeParaDestino = new Map<string, string>();\n for (const [, perdas] of barrelsPerdidos) {\n for (const [, dest] of perdas) {\n if (nomeParaDestino.has(dest)) continue;\n const destPath = `${semExt(dest) }.ts`;\n const nomes = await extrairNomesExportados(srcDir, destPath);\n for (const nome of nomes) {\n if (!nomeParaDestino.has(nome)) {\n nomeParaDestino.set(nome, dest);\n }\n }\n }\n }\n\n for (const [barrelRel, perdas] of barrelsPerdidos) {\n if (perdas.size === 0) continue;\n\n // Constrói o alias do barrel pra matching nos imports\n const barrelAliasCandidates = new Set<string>();\n barrelAliasCandidates.add(barrelRel.replace(/\\/index\\.ts$/, ''));\n barrelAliasCandidates.add(barrelRel.replace(/\\.ts$/, ''));\n barrelAliasCandidates.add(barrelRel);\n\n for await (const filePath of walkDir(srcDir)) {\n const rel = normalizarRel(path.relative(srcDir, filePath).replace(/\\\\/g, '/'));\n if (rel === barrelRel) continue;\n\n try {\n const content = await fsAsync.readFile(filePath, 'utf-8');\n const linhas = content.split('\\n');\n let mudou = false;\n\n for (let i = 0; i < linhas.length; i++) {\n const linha = linhas[i];\n const trimmed = linha.trim();\n\n const importMatch = trimmed.match(\n /^(import|export)\\s+(?:type\\s+)?(?:\\{([^}]*)\\})\\s+from\\s+['\"]([^'\"]+)['\"]/\n );\n if (!importMatch) continue;\n\n const [, keyword, namesRaw, spec] = importMatch;\n if (!spec || !namesRaw) continue;\n\n let resolvedSpec: string;\n if (spec.startsWith('.')) {\n resolvedSpec = semExt(resolverImportRelativo(rel, spec));\n } else if (spec.startsWith('@/')) {\n resolvedSpec = semExt(normalizarRel(`src/${spec.slice(2)}`));\n } else if (spec.startsWith('@')) {\n resolvedSpec = semExt(normalizarRel(`src/${spec.slice(1)}`)).replace(/^src\\//, '');\n } else {\n continue;\n }\n\n if (!barrelAliasCandidates.has(resolvedSpec)) continue;\n\n const nomes = namesRaw.split(',').map(n => {\n const match = n.trim().match(/^(?:type\\s+)?(\\w+)(?:\\s+as\\s+(\\w+))?/);\n if (!match) return null;\n return { imported: match[1], local: match[2] ?? match[1] };\n }).filter((n): n is { imported: string; local: string } => n !== null);\n\n const nomesQueFicam: typeof nomes = [];\n const nomesQueMoveram: Array<typeof nomes[0] & { dest: string }> = [];\n\n for (const nome of nomes) {\n const dest = nomeParaDestino.get(nome.imported);\n if (dest) {\n nomesQueMoveram.push({ ...nome, dest });\n } else {\n nomesQueFicam.push(nome);\n }\n }\n\n if (nomesQueMoveram.length === 0) continue;\n\n const isTypeOnly = trimmed.includes('import type {') || trimmed.includes('export type {');\n\n if (nomesQueFicam.length > 0) {\n const nomesStr = nomesQueFicam.map(n =>\n n.imported !== n.local ? `${n.imported} as ${n.local}` : n.imported\n ).join(', ');\n const typePrefix = isTypeOnly ? 'type ' : '';\n linhas[i] = `${keyword} ${typePrefix}{ ${nomesStr} } from '${spec}';`;\n } else {\n linhas[i] = '';\n }\n\n const fileDir = path.posix.dirname(rel);\n const novasLinhas: string[] = [];\n for (const nome of nomesQueMoveram) {\n let newSpec = path.posix.relative(fileDir, nome.dest);\n newSpec = normalizarRel(newSpec);\n if (!newSpec.startsWith('.')) newSpec = `./${newSpec}`;\n if (!path.extname(newSpec)) newSpec += '.js';\n\n const typePrefix = isTypeOnly ? 'import type' : 'import';\n if (nome.imported !== nome.local) {\n novasLinhas.push(`${typePrefix} { ${nome.imported} as ${nome.local} } from '${newSpec}';`);\n } else {\n novasLinhas.push(`${typePrefix} { ${nome.imported} } from '${newSpec}';`);\n }\n }\n\n if (novasLinhas.length > 0) {\n linhas.splice(i + 1, 0, ...novasLinhas);\n i += novasLinhas.length;\n }\n\n mudou = true;\n totalReparados++;\n }\n\n if (mudou) {\n const linhasLimpar = linhas.filter(l => l !== '');\n await fsAsync.writeFile(filePath, linhasLimpar.join('\\n'), 'utf-8');\n }\n } catch {\n }\n }\n }\n return totalReparados;\n}\n\nexport async function reorganizarBarrelsAposMovimento(\n baseDir: string,\n mapa: ResultadoEstrutural[]\n): Promise<void> {\n const srcDir = path.join(baseDir, 'src');\n const movimentos = criarMapaMovimentos(mapa, baseDir);\n if (movimentos.size === 0) return;\n\n log.info('Reorganizando barrels e atualizando imports após movimentação...');\n\n const barris = await encontrarBarrels(srcDir);\n const mapDestinos = new Map<string, ExportInfo[]>();\n const barrelsPerdidos = new Map<string, Map<string, string>>();\n\n let barrisMovidos = 0;\n let barrisModificados = 0;\n let barrisCriados = 0;\n let barrisRemovidos = 0;\n\n for (const barrelRel of barris) {\n let content: string;\n try {\n content = await fsAsync.readFile(path.join(srcDir, barrelRel), 'utf-8');\n } catch {\n continue;\n }\n\n const analise = analisarBarrel(content, barrelRel, movimentos);\n\n if (!analise.todosMovidos && analise.movidos.length === 0) continue;\n\n // Caso 1: todos os exports moveram para o MESMO diretório → move o barrel junto\n if (analise.todosMovidos && analise.dirDestinoUnico) {\n const nomeBarrel = path.basename(barrelRel);\n const novoBarrelRel = path.posix.join(analise.dirDestinoUnico, nomeBarrel);\n const destBarrelAbs = path.join(srcDir, novoBarrelRel);\n\n // Se o destino já tem barrel, funde (cai no Caso 2 em vez de mover)\n if (!existsSync(destBarrelAbs)) {\n await moverBarrel(barrelRel, analise.dirDestinoUnico, srcDir);\n barrisMovidos++;\n movimentos.set(semExt(barrelRel), semExt(novoBarrelRel));\n continue;\n }\n // Fallthrough → Caso 2: remove exports e deixa criarBarrelSeNecessario fundir\n }\n\n // Caso 2: alguns exports moveram → remove do barrel antigo\n if (analise.movidos.length > 0) {\n const novoConteudo = removerExportsMovidos(content, barrelRel, movimentos);\n await fsAsync.writeFile(path.join(srcDir, barrelRel), novoConteudo, 'utf-8');\n barrisModificados++;\n log.info(`Barrel atualizado (exports removidos): ${barrelRel}`);\n\n // Registra exports removidos pra reparo posterior\n const perdas = new Map<string, string>();\n for (const exp of analise.movidos) {\n perdas.set(exp.resolved, exp.moveDest);\n }\n barrelsPerdidos.set(barrelRel, perdas);\n\n // Registra os exports que precisam ir para os destinos\n for (const exp of analise.movidos) {\n const dirDest = path.posix.dirname(exp.moveDest);\n const lista = mapDestinos.get(dirDest);\n if (lista) {\n lista.push(exp);\n } else {\n mapDestinos.set(dirDest, [exp]);\n }\n }\n\n // Se após remoção o barrel ficou vazio, apaga\n const vazio = await apagarBarrelSeVazio(barrelRel, srcDir);\n if (vazio) barrisRemovidos++;\n }\n }\n\n // Cria/atualiza barrels nos destinos com os exports movidos\n for (const [dirRel, exportsParaAdicionar] of mapDestinos) {\n if (await criarBarrelSeNecessario(dirRel, exportsParaAdicionar, srcDir)) {\n barrisCriados++;\n }\n }\n\n // Também cria barrels para destinos que receberam arquivos mas não têm barrel ainda\n const dirsDestino = new Set<string>();\n for (const [, destino] of movimentos) {\n dirsDestino.add(path.posix.dirname(destino));\n }\n for (const dirRel of dirsDestino) {\n if (mapDestinos.has(dirRel)) continue;\n const barrelPath = path.join(srcDir, dirRel, 'index.ts');\n if (existsSync(barrelPath)) continue;\n\n const exportsNovos: ExportInfo[] = [];\n for (const [, destino] of movimentos) {\n if (path.posix.dirname(destino) === dirRel) {\n const idxDest = [...movimentos.entries()].find(([, v]) => v === destino);\n if (idxDest) {\n exportsNovos.push({ spec: '', resolved: idxDest[0], moveDest: destino });\n }\n }\n }\n if (exportsNovos.length > 0 && await criarBarrelSeNecessario(dirRel, exportsNovos, srcDir)) {\n barrisCriados++;\n }\n }\n\n const importsReescritos = await atualizarImportsGlobais(srcDir, movimentos);\n const importsReparados = await repararImportsBarrelPerdidos(srcDir, barrelsPerdidos, movimentos);\n\n const partes: string[] = [];\n if (barrisMovidos > 0) partes.push(`${barrisMovidos} movidos`);\n if (barrisModificados > 0) partes.push(`${barrisModificados} modificados`);\n if (barrisCriados > 0) partes.push(`${barrisCriados} criados`);\n if (barrisRemovidos > 0) partes.push(`${barrisRemovidos} removidos`);\n if (importsReescritos > 0) partes.push(`${importsReescritos} imports reescritos`);\n if (importsReparados > 0) partes.push(`${importsReparados} imports reparados`);\n\n if (partes.length > 0) {\n log.sucesso(`Barrels: ${partes.join(', ')}`);\n } else {\n log.info('Nenhum barrel ou import precisou de ajustes.');\n }\n}\n\nfunction listarArquivosDir(dir: string): string[] {\n try {\n const entries = readdirSync(dir, { withFileTypes: true });\n const files: string[] = [];\n for (const entry of entries) {\n if (entry.isFile() && EXT_PATTERN.test(entry.name) && entry.name !== 'index.ts') {\n files.push(entry.name);\n }\n }\n return files.sort();\n } catch {\n return [];\n }\n}\n\nfunction exportsBarrelExistentes(content: string): Set<string> {\n const exports = new Set<string>();\n for (const linha of content.split('\\n')) {\n const match = linha.trim().match(/^export\\s+(?:\\*\\s+from|(?:type\\s+)?\\{[^}]*\\}\\s+from)\\s+['\"](.+)['\"]\\s*;/);\n if (match) {\n exports.add(match[1]);\n }\n }\n return exports;\n}\n\n/** Verifica se o barrel contém APENAS re-exports (export * from / export { } from), espaços e comentários.\n * Barrels com imports, named exports, ou lógica customizada são considerados \"curados\" e NÃO devem ser alterados. */\nfunction barrelEhPuroReexport(content: string): boolean {\n for (const linha of content.split('\\n')) {\n const trimmed = linha.trim();\n if (!trimmed) continue;\n if (trimmed.startsWith('//')) continue;\n if (trimmed.startsWith('/*')) continue;\n if (trimmed.startsWith('*')) continue;\n if (/^export\\s+(?:\\*\\s+from|(?:type\\s+)?\\{[^}]*\\}\\s+from)\\s+['\"]/.test(trimmed)) continue;\n return false;\n }\n return true;\n}\n\nexport async function gerarBarrels(baseDir: string, dryRun = false): Promise<ResultadoGeracaoBarrels> {\n const srcDir = path.join(baseDir, 'src');\n const resultado: ResultadoGeracaoBarrels = {\n criados: 0,\n atualizados: 0,\n erros: [],\n barris: [],\n };\n\n if (!existsSync(srcDir)) {\n resultado.erros.push(`Diretório src não encontrado em ${baseDir}`);\n return resultado;\n }\n\n const dirs: string[] = [];\n try {\n const entries = await fsAsync.readdir(srcDir, { withFileTypes: true });\n const stack = entries\n .filter(e => e.isDirectory() && !SKIP_DIRS.has(e.name))\n .map(e => path.join(srcDir, e.name));\n\n while (stack.length > 0) {\n const dir = stack.pop();\n if (!dir) break;\n dirs.push(dir);\n try {\n const sub = await fsAsync.readdir(dir, { withFileTypes: true });\n for (const s of sub) {\n if (s.isDirectory() && !SKIP_DIRS.has(s.name)) {\n stack.push(path.join(dir, s.name));\n }\n }\n } catch {\n }\n }\n } catch (err) {\n resultado.erros.push(`Erro ao varrer diretórios: ${err instanceof Error ? err.message : String(err)}`);\n return resultado;\n }\n\n for (const dir of dirs) {\n const files = listarArquivosDir(dir);\n if (files.length === 0) continue;\n\n // Filtra .d.ts que são declarações ambientes (não módulos)\n const filesModulo: string[] = [];\n for (const f of files) {\n if (f.endsWith('.d.ts')) {\n try {\n const content = await fsAsync.readFile(path.join(dir, f), 'utf-8');\n if (!/^export\\s/m.test(content)) continue;\n } catch { continue; }\n }\n filesModulo.push(f);\n }\n if (filesModulo.length === 0) continue;\n\n // Mapeia nomes de exportação para arquivos para detectar conflitos\n const nomeExportParaArquivos = new Map<string, string[]>();\n const exportacoesPorArquivo = new Map<string, ExportsClassificados>();\n for (const f of filesModulo) {\n try {\n const content = await fsAsync.readFile(path.join(dir, f), 'utf-8');\n const classified = classificarExports(content);\n exportacoesPorArquivo.set(f, classified);\n const todos = new Set([...classified.types, ...classified.values]);\n for (const nome of todos) {\n const arr = nomeExportParaArquivos.get(nome);\n if (arr) arr.push(f);\n else nomeExportParaArquivos.set(nome, [f]);\n }\n } catch { /* arquivo problemático, ignora */ }\n }\n\n // Gera linha(s) de export para um arquivo, respeitando conflitos de nome e verbatimModuleSyntax\n async function gerarLinhasExportacao(filename: string): Promise<string[]> {\n const spec = `./${semExt(filename)}.js`;\n const classified = exportacoesPorArquivo.get(filename);\n if (!classified) return [`export * from '${spec}';`];\n const { types, values } = classified;\n const todos = new Set([...types, ...values]);\n const unicos: string[] = [];\n const conflitantes: string[] = [];\n for (const nome of todos) {\n const arquivos = nomeExportParaArquivos.get(nome);\n if (arquivos && arquivos.length > 1) {\n const sorted = [...arquivos].sort();\n if (sorted[0] === filename) unicos.push(nome);\n else conflitantes.push(nome);\n } else {\n unicos.push(nome);\n }\n }\n if (conflitantes.length === 0) return [`export * from '${spec}';`];\n if (unicos.length > 0) {\n const valuesUnicos = unicos.filter(n => values.has(n));\n const typesUnicos = unicos.filter(n => types.has(n));\n const parts: string[] = [];\n if (valuesUnicos.length > 0) parts.push(valuesUnicos.join(', '));\n if (typesUnicos.length > 0) parts.push(typesUnicos.map(n => `type ${n}`).join(', '));\n return [`export { ${parts.join(', ')} } from '${spec}';`];\n }\n return [];\n }\n\n const barrelPath = path.join(dir, 'index.ts');\n const dirRel = path.relative(srcDir, dir);\n\n if (existsSync(barrelPath)) {\n try {\n const content = await fsAsync.readFile(barrelPath, 'utf-8');\n\n if (!barrelEhPuroReexport(content)) {\n resultado.barris.push({ caminho: dirRel, status: 'ok', detalhes: 'curado manualmente' });\n continue;\n }\n\n const existentes = exportsBarrelExistentes(content);\n const linhasParaAdicionar: string[] = [];\n for (const f of filesModulo) {\n const spec = `./${semExt(f)}.js`;\n if (existentes.has(spec)) continue;\n const novasLinhas = await gerarLinhasExportacao(f);\n linhasParaAdicionar.push(...novasLinhas);\n }\n\n if (linhasParaAdicionar.length === 0) {\n resultado.barris.push({ caminho: dirRel, status: 'ok' });\n continue;\n }\n\n if (dryRun) {\n resultado.barris.push({\n caminho: dirRel,\n status: 'atualizado',\n detalhes: `Adicionaria ${linhasParaAdicionar.length} export(s)`,\n });\n resultado.atualizados++;\n continue;\n }\n\n await fsAsync.writeFile(barrelPath, `${content.trimEnd()}\\n${linhasParaAdicionar.join('\\n')}\\n`, 'utf-8');\n resultado.atualizados++;\n resultado.barris.push({\n caminho: dirRel,\n status: 'atualizado',\n detalhes: `${linhasParaAdicionar.length} export(s) adicionado(s)`,\n });\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err);\n resultado.erros.push(`Erro ao atualizar barrel ${dirRel}: ${msg}`);\n resultado.barris.push({ caminho: dirRel, status: 'erro', detalhes: msg });\n }\n } else {\n if (dryRun) {\n resultado.barris.push({\n caminho: dirRel,\n status: 'criado',\n detalhes: `Criaria barrel com ${filesModulo.length} export(s)`,\n });\n resultado.criados++;\n continue;\n }\n\n try {\n const linhas: string[] = [];\n for (const f of filesModulo) {\n const l = await gerarLinhasExportacao(f);\n linhas.push(...l);\n }\n await fsAsync.writeFile(barrelPath, `${linhas.join('\\n')}\\n`, 'utf-8');\n resultado.criados++;\n resultado.barris.push({\n caminho: dirRel,\n status: 'criado',\n detalhes: `${linhas.length} export(s)`,\n });\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err);\n resultado.erros.push(`Erro ao criar barrel ${dirRel}: ${msg}`);\n resultado.barris.push({ caminho: dirRel, status: 'erro', detalhes: msg });\n }\n }\n }\n\n return resultado;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"reorganize-barrels.js","sourceRoot":"","sources":["../../../src/analysts/corrections/reorganize-barrels.ts"],"names":[],"mappings":"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","sourcesContent":["// SPDX-License-Identifier: MIT\nimport { existsSync, promises as fsAsync, readdirSync } from 'node:fs';\nimport path from 'node:path';\n\nimport { getMessages } from '@core/messages';\nimport { normalizePath } from '@shared/helpers';\n\nimport type { ResultadoEstrutural, ResultadoGeracaoBarrels } from '@';\n\nconst { log } = getMessages();\n\nconst SKIP_DIRS = new Set(['node_modules', 'dist', 'coverage', '.git', '.deprecados', '.tutanus']);\nconst EXT_PATTERN = /\\.(ts|tsx|js|jsx|mjs|cjs)$/;\n\nasync function arquivoExiste(caminho: string): Promise<boolean> {\n try {\n await fsAsync.access(caminho);\n return true;\n } catch {\n return false;\n }\n}\n\nfunction normalizarRel(caminho: string): string {\n return path.posix.normalize(normalizePath(caminho).replace(/\\\\/g, '/'));\n}\n\nfunction semExt(caminho: string): string {\n return caminho.replace(EXT_PATTERN, '');\n}\n\nfunction gerarSpecExport(filename: string): string {\n return `./${semExt(filename)}.js`;\n}\n\nfunction resolverImportRelativo(arquivoRel: string, importSpec: string): string {\n const dir = path.posix.dirname(normalizarRel(arquivoRel));\n return path.posix.normalize(path.posix.join(dir, importSpec));\n}\n\nfunction criarMapaMovimentos(mapa: ResultadoEstrutural[], _baseDir: string): Map<string, string> {\n const movimentos = new Map<string, string>();\n for (const entry of mapa) {\n if (!entry.ideal || entry.ideal === entry.atual) continue;\n const nomeArquivo = path.basename(entry.arquivo);\n const origemRel = normalizarRel(entry.arquivo.replace(/^src\\//, ''));\n const destinoRel = normalizarRel(path.posix.join(entry.ideal.replace(/^src\\//, ''), nomeArquivo));\n if (origemRel !== destinoRel) {\n movimentos.set(semExt(origemRel), semExt(destinoRel));\n }\n }\n return movimentos;\n}\n\nasync function* walkDir(dir: string): AsyncGenerator<string> {\n try {\n const entries = await fsAsync.readdir(dir, { withFileTypes: true });\n for (const entry of entries) {\n const full = path.join(dir, entry.name);\n if (entry.isDirectory()) {\n if (SKIP_DIRS.has(entry.name)) continue;\n yield* walkDir(full);\n } else if (entry.isFile() && (entry.name.endsWith('.ts') || entry.name.endsWith('.tsx'))) {\n yield full;\n }\n }\n } catch {\n }\n}\n\nfunction ehBarrel(content: string): boolean {\n return /export\\s+.*?\\s+from\\s+['\"]/.test(content);\n}\n\nasync function encontrarBarrels(srcDir: string): Promise<string[]> {\n const barrels: string[] = [];\n for await (const filePath of walkDir(srcDir)) {\n if (path.basename(filePath) !== 'index.ts') continue;\n try {\n const content = await fsAsync.readFile(filePath, 'utf-8');\n if (ehBarrel(content)) {\n barrels.push(normalizarRel(path.relative(srcDir, filePath).replace(/\\\\/g, '/')));\n }\n } catch {\n }\n }\n return barrels;\n}\n\ninterface ExportInfo {\n spec: string;\n resolved: string;\n moveDest: string | null;\n}\n\ninterface AnaliseBarrel {\n barrelRel: string;\n exports: ExportInfo[];\n movidos: Array<ExportInfo & { moveDest: string }>;\n ficaram: ExportInfo[];\n todosMovidos: boolean;\n dirDestinoUnico: string | null;\n}\n\nfunction analisarExport(\n linha: string,\n barrelRel: string,\n movimentos: Map<string, string>\n): { exportSpec: string | null; exportInfo: ExportInfo | null } {\n const trimmed = linha.trim();\n if (!trimmed.startsWith('export') || !trimmed.includes('from')) {\n return { exportSpec: null, exportInfo: null };\n }\n const PADRAO = /export\\s+(?:\\*\\s+from|(?:default\\s+|type\\s+)?\\{[^}]*\\}\\s+from)\\s+['\"]([^'\"]+)['\"]\\s*;?\\s*$/;\n const match = PADRAO.exec(linha);\n if (!match) return { exportSpec: null, exportInfo: null };\n const spec = match[1];\n if (!spec.startsWith('.')) return { exportSpec: spec, exportInfo: null };\n const resolved = semExt(resolverImportRelativo(barrelRel, spec));\n const moveDest = movimentos.get(resolved) ?? null;\n return { exportSpec: spec, exportInfo: { spec, resolved, moveDest } };\n}\n\nfunction temMoveDest(e: ExportInfo): e is ExportInfo & { moveDest: string } {\n return e.moveDest !== null;\n}\n\nfunction analisarBarrel(\n content: string,\n barrelRel: string,\n movimentos: Map<string, string>\n): AnaliseBarrel {\n const exports: ExportInfo[] = [];\n const linhas = content.split('\\n');\n for (const linha of linhas) {\n const { exportInfo } = analisarExport(linha, barrelRel, movimentos);\n if (exportInfo) exports.push(exportInfo);\n }\n const movidos = exports.filter(temMoveDest);\n const ficaram = exports.filter(e => e.moveDest === null);\n const todosMovidos = exports.length > 0 && movidos.length === exports.length;\n\n let dirDestinoUnico: string | null = null;\n if (todosMovidos) {\n const dirs = new Set(movidos.map(e => path.posix.dirname(e.moveDest)));\n if (dirs.size === 1) {\n const val = dirs.values().next().value;\n if (val !== undefined) dirDestinoUnico = val;\n }\n }\n\n return { barrelRel, exports, movidos, ficaram, todosMovidos, dirDestinoUnico };\n}\n\nfunction removerExportsMovidos(content: string, barrelRel: string, movimentos: Map<string, string>): string {\n const linhas = content.split('\\n');\n const resultado: string[] = [];\n for (const linha of linhas) {\n const { exportSpec, exportInfo } = analisarExport(linha, barrelRel, movimentos);\n if (exportInfo && exportInfo.moveDest !== null) continue;\n if (exportSpec !== null && exportInfo === null) {\n resultado.push(linha);\n continue;\n }\n if (!exportInfo) {\n resultado.push(linha);\n continue;\n }\n resultado.push(linha);\n }\n return resultado.join('\\n');\n}\n\nasync function moverBarrel(\n barrelRel: string,\n dirDestino: string,\n srcDir: string\n): Promise<void> {\n const origemAbs = path.join(srcDir, barrelRel);\n const nomeArquivo = path.basename(barrelRel);\n const destinoAbs = path.join(srcDir, dirDestino, nomeArquivo);\n const destinoDirAbs = path.dirname(destinoAbs);\n\n try {\n await fsAsync.mkdir(destinoDirAbs, { recursive: true });\n await fsAsync.rename(origemAbs, destinoAbs);\n log.info(`Barrel movido: ${barrelRel} → ${path.posix.join(dirDestino, nomeArquivo)}`);\n } catch (err) {\n log.aviso(`Erro ao mover barrel ${barrelRel}: ${err instanceof Error ? err.message : String(err)}`);\n }\n}\n\nasync function criarBarrelSeNecessario(\n dirRel: string,\n exportsParaAdicionar: ExportInfo[],\n srcDir: string\n): Promise<boolean> {\n const barrelPath = path.join(srcDir, dirRel, 'index.ts');\n if (exportsParaAdicionar.length === 0) return false;\n\n const linhas: string[] = [];\n\n if (existsSync(barrelPath)) {\n const content = await fsAsync.readFile(barrelPath, 'utf-8');\n linhas.push(content.replace(/\\n$/, ''));\n }\n\n for (const exp of exportsParaAdicionar) {\n const moveDest = exp.moveDest;\n if (!moveDest) continue;\n const nomeArquivo = path.basename(moveDest);\n linhas.push(`export * from './${nomeArquivo}.js';`);\n }\n\n const novoConteudo = `${linhas.join('\\n')}\\n`;\n try {\n await fsAsync.mkdir(path.dirname(barrelPath), { recursive: true });\n await fsAsync.writeFile(barrelPath, novoConteudo, 'utf-8');\n const relPath = path.relative(srcDir, barrelPath);\n log.info(`Barrel ${existsSync(barrelPath) ? 'atualizado' : 'criado'}: ${relPath}`);\n return true;\n } catch {\n return false;\n }\n}\n\nasync function apagarBarrelSeVazio(barrelRel: string, srcDir: string): Promise<boolean> {\n const barrelAbs = path.join(srcDir, barrelRel);\n try {\n const content = await fsAsync.readFile(barrelAbs, 'utf-8');\n const trimmed = content.trim();\n if (!trimmed || !ehBarrel(trimmed)) {\n await fsAsync.unlink(barrelAbs);\n log.info(`Barrel vazio removido: ${barrelRel}`);\n return true;\n }\n } catch {\n }\n return false;\n}\n\nasync function atualizarImportsGlobais(\n srcDir: string,\n movimentos: Map<string, string>\n): Promise<number> {\n let totalReescritos = 0;\n\n for await (const filePath of walkDir(srcDir)) {\n const rel = normalizarRel(path.relative(srcDir, filePath).replace(/\\\\/g, '/'));\n try {\n const content = await fsAsync.readFile(filePath, 'utf-8');\n let reescritos = 0;\n const linhas = content.split('\\n');\n\n for (let i = 0; i < linhas.length; i++) {\n const linha = linhas[i];\n const trimmed = linha.trim();\n if (!trimmed.startsWith('import') && !trimmed.startsWith('export') && !trimmed.includes('require(')) continue;\n\n const matches = linha.matchAll(/(['\"])([^'\"\\n]+?)\\1/g);\n for (const m of matches) {\n const spec = m[2];\n if (!spec) continue;\n\n const isRelative = spec.startsWith('./') || spec.startsWith('../');\n const isAlias = spec.startsWith('@/') || /^@[^/]+\\//.test(spec);\n if (!isRelative && !isAlias) continue;\n\n let resolved: string;\n if (spec.startsWith('@/')) {\n resolved = semExt(normalizarRel(`src/${spec.slice(2)}`));\n } else if (spec.startsWith('@')) {\n resolved = semExt(normalizarRel(`src/${spec.slice(1)}`)).replace(/^src\\//, '');\n } else {\n resolved = semExt(resolverImportRelativo(rel, spec));\n }\n\n const moveDestino = movimentos.get(resolved);\n if (!moveDestino) continue;\n\n const fileDir = path.posix.dirname(rel);\n let newSpec = path.posix.relative(fileDir, moveDestino);\n newSpec = normalizarRel(newSpec);\n if (!newSpec.startsWith('.')) newSpec = `./${newSpec}`;\n\n const ext = path.extname(spec);\n if (ext === '.js' || ext === '.mjs' || ext === '.cjs') {\n newSpec += ext;\n } else if (!path.extname(newSpec)) {\n newSpec += '.js';\n }\n\n const escapedOld = spec.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n const fromRegex = new RegExp(`(['\\\"])${escapedOld}\\\\1`);\n if (fromRegex.test(linhas[i])) {\n linhas[i] = linhas[i].replace(fromRegex, `$1${newSpec}$1`);\n reescritos++;\n }\n }\n }\n\n if (reescritos > 0) {\n await fsAsync.writeFile(filePath, linhas.join('\\n'), 'utf-8');\n totalReescritos += reescritos;\n }\n } catch {\n }\n }\n return totalReescritos;\n}\n\nasync function extrairNomesExportados(\n srcDir: string,\n relPath: string,\n visitados = new Set<string>(),\n profundidade = 0\n): Promise<Set<string>> {\n if (profundidade > 5) return new Set();\n const caminho = path.join(srcDir, relPath);\n const chave = normalizarRel(relPath);\n if (visitados.has(chave)) return new Set();\n visitados.add(chave);\n\n const nomes = new Set<string>();\n try {\n const content = await fsAsync.readFile(caminho, 'utf-8');\n for (const linha of content.split('\\n')) {\n const trimmed = linha.trim();\n if (trimmed.startsWith('export default ')) {\n nomes.add('default');\n }\n // export function, export async function, export const, export let, export var,\n // export class, export interface, export type, export enum\n const exportDecl = trimmed.match(\n /^export\\s+(?:type\\s+)?(?:(?:async\\s+)?(?:function|const|let|var|class|interface|type|enum))\\s+(\\w+)/\n );\n if (exportDecl && exportDecl[1]) {\n nomes.add(exportDecl[1]);\n }\n // export { name1, name2 as alias, ... }\n const exportList = trimmed.match(/^export\\s+type\\s*\\{([^}]+)\\}|^export\\s*\\{([^}]+)\\}/);\n if (exportList) {\n const body = exportList[1] ?? exportList[2];\n if (body) {\n body.split(',').forEach(part => {\n const m = part.trim().match(/^(\\w+)(?:\\s+as\\s+\\w+)?$/);\n if (m) nomes.add(m[1]);\n });\n }\n }\n // Segue re-exports: export * from './foo'\n const reexportMatch = trimmed.match(/^export\\s+(?:type\\s+)?\\*\\s+from\\s+['\"]([^'\"]+)['\"]/);\n if (reexportMatch) {\n const resolved = resolverImportRelativo(relPath, reexportMatch[1]);\n const basePath = semExt(resolved);\n let resolvedPath = `${basePath}.ts`;\n if (!(await arquivoExiste(path.join(srcDir, resolvedPath)))) {\n resolvedPath = `${basePath}.tsx`;\n }\n const subNomes = await extrairNomesExportados(srcDir, resolvedPath, visitados, profundidade + 1);\n for (const n of subNomes) nomes.add(n);\n }\n }\n } catch {\n // arquivo não encontrado, ignora\n }\n return nomes;\n}\n\ninterface ExportsClassificados {\n types: Set<string>;\n values: Set<string>;\n}\n\nfunction classificarExports(content: string): ExportsClassificados {\n const types = new Set<string>();\n const values = new Set<string>();\n for (const linha of content.split('\\n')) {\n const trimmed = linha.trim();\n if (!trimmed.startsWith('export')) continue;\n if (/from\\s+['\"]/.test(trimmed)) continue;\n // export interface X\n let m = trimmed.match(/^export\\s+interface\\s+(\\w+)/);\n if (m) { types.add(m[1]); continue; }\n // export type X = ... (mas NÃO export type { X })\n if (/^export\\s+type\\s+(\\w+)\\s*=/.test(trimmed)) {\n m = trimmed.match(/^export\\s+type\\s+(\\w+)\\s*=/);\n if (m) { types.add(m[1]); continue; }\n }\n // export enum X (enum é runtime value)\n m = trimmed.match(/^export\\s+enum\\s+(\\w+)/);\n if (m) { values.add(m[1]); continue; }\n // export default class/function\n m = trimmed.match(/^export\\s+default\\s+(?:abstract\\s+)?(?:class|function)\\s+(\\w+)/);\n if (m) { values.add(m[1]); continue; }\n if (/^export\\s+default\\s+/.test(trimmed)) { continue; }\n // export function/const/let/var/class\n m = trimmed.match(/^export\\s+(?:abstract\\s+)?(?:async\\s+)?(?:function|const|let|var|class)\\s+(\\w+)/);\n if (m) { values.add(m[1]); continue; }\n // export { X, Y } - assume que são valores (inferência conservadora)\n m = trimmed.match(/^export\\s+(?:type\\s+)?\\{([^}]+)\\}/);\n if (m) {\n m[1].split(',').forEach(part => {\n const name = part.trim().match(/^(\\w+)/);\n if (name) values.add(name[1]);\n });\n continue;\n }\n }\n return { types, values };\n}\n\nasync function repararImportsBarrelPerdidos(\n srcDir: string,\n barrelsPerdidos: Map<string, Map<string, string>>,\n _movimentos: Map<string, string>\n): Promise<number> {\n if (barrelsPerdidos.size === 0) return 0;\n\n let totalReparados = 0;\n\n // Pré-constrói mapa nomeExportado -> moveDest lendo os arquivos destino\n const nomeParaDestino = new Map<string, string>();\n for (const [, perdas] of barrelsPerdidos) {\n for (const [, dest] of perdas) {\n if (nomeParaDestino.has(dest)) continue;\n const basePath = semExt(dest);\n let destPath = `${basePath}.ts`;\n if (!(await arquivoExiste(path.join(srcDir, destPath)))) {\n destPath = `${basePath}.tsx`;\n }\n const nomes = await extrairNomesExportados(srcDir, destPath);\n for (const nome of nomes) {\n if (!nomeParaDestino.has(nome)) {\n nomeParaDestino.set(nome, dest);\n }\n }\n }\n }\n\n for (const [barrelRel, perdas] of barrelsPerdidos) {\n if (perdas.size === 0) continue;\n\n // Constrói o alias do barrel pra matching nos imports\n const barrelAliasCandidates = new Set<string>();\n barrelAliasCandidates.add(barrelRel.replace(/\\/index\\.ts$/, ''));\n barrelAliasCandidates.add(barrelRel.replace(/\\.ts$/, ''));\n barrelAliasCandidates.add(barrelRel);\n\n for await (const filePath of walkDir(srcDir)) {\n const rel = normalizarRel(path.relative(srcDir, filePath).replace(/\\\\/g, '/'));\n if (rel === barrelRel) continue;\n\n try {\n const content = await fsAsync.readFile(filePath, 'utf-8');\n const linhas = content.split('\\n');\n let mudou = false;\n\n for (let i = 0; i < linhas.length; i++) {\n const linha = linhas[i];\n const trimmed = linha.trim();\n\n const importMatch = trimmed.match(\n /^(import|export)\\s+(?:type\\s+)?(?:\\{([^}]*)\\})\\s+from\\s+['\"]([^'\"]+)['\"]/\n );\n if (!importMatch) continue;\n\n const [, keyword, namesRaw, spec] = importMatch;\n if (!spec || !namesRaw) continue;\n\n let resolvedSpec: string;\n if (spec.startsWith('.')) {\n resolvedSpec = semExt(resolverImportRelativo(rel, spec));\n } else if (spec.startsWith('@/')) {\n resolvedSpec = semExt(normalizarRel(`src/${spec.slice(2)}`));\n } else if (spec.startsWith('@')) {\n resolvedSpec = semExt(normalizarRel(`src/${spec.slice(1)}`)).replace(/^src\\//, '');\n } else {\n continue;\n }\n\n if (!barrelAliasCandidates.has(resolvedSpec)) continue;\n\n const nomes = namesRaw.split(',').map(n => {\n const match = n.trim().match(/^(?:type\\s+)?(\\w+)(?:\\s+as\\s+(\\w+))?/);\n if (!match) return null;\n return { imported: match[1], local: match[2] ?? match[1] };\n }).filter((n): n is { imported: string; local: string } => n !== null);\n\n const nomesQueFicam: typeof nomes = [];\n const nomesQueMoveram: Array<typeof nomes[0] & { dest: string }> = [];\n\n for (const nome of nomes) {\n const dest = nomeParaDestino.get(nome.imported);\n if (dest) {\n nomesQueMoveram.push({ ...nome, dest });\n } else {\n nomesQueFicam.push(nome);\n }\n }\n\n if (nomesQueMoveram.length === 0) continue;\n\n const isTypeOnly = trimmed.includes('import type {') || trimmed.includes('export type {');\n\n if (nomesQueFicam.length > 0) {\n const nomesStr = nomesQueFicam.map(n =>\n n.imported !== n.local ? `${n.imported} as ${n.local}` : n.imported\n ).join(', ');\n const typePrefix = isTypeOnly ? 'type ' : '';\n linhas[i] = `${keyword} ${typePrefix}{ ${nomesStr} } from '${spec}';`;\n } else {\n linhas[i] = '';\n }\n\n const fileDir = path.posix.dirname(rel);\n const novasLinhas: string[] = [];\n for (const nome of nomesQueMoveram) {\n let newSpec = path.posix.relative(fileDir, nome.dest);\n newSpec = normalizarRel(newSpec);\n if (!newSpec.startsWith('.')) newSpec = `./${newSpec}`;\n if (!path.extname(newSpec)) newSpec += '.js';\n\n const typePrefix = isTypeOnly ? 'import type' : 'import';\n if (nome.imported !== nome.local) {\n novasLinhas.push(`${typePrefix} { ${nome.imported} as ${nome.local} } from '${newSpec}';`);\n } else {\n novasLinhas.push(`${typePrefix} { ${nome.imported} } from '${newSpec}';`);\n }\n }\n\n if (novasLinhas.length > 0) {\n linhas.splice(i + 1, 0, ...novasLinhas);\n i += novasLinhas.length;\n }\n\n mudou = true;\n totalReparados++;\n }\n\n if (mudou) {\n const linhasLimpar = linhas.filter(l => l !== '');\n await fsAsync.writeFile(filePath, linhasLimpar.join('\\n'), 'utf-8');\n }\n } catch {\n }\n }\n }\n return totalReparados;\n}\n\nexport async function reorganizarBarrelsAposMovimento(\n baseDir: string,\n mapa: ResultadoEstrutural[]\n): Promise<void> {\n const srcDir = path.join(baseDir, 'src');\n const movimentos = criarMapaMovimentos(mapa, baseDir);\n if (movimentos.size === 0) return;\n\n log.info('Reorganizando barrels e atualizando imports após movimentação...');\n\n const barris = await encontrarBarrels(srcDir);\n const mapDestinos = new Map<string, ExportInfo[]>();\n const barrelsPerdidos = new Map<string, Map<string, string>>();\n\n let barrisMovidos = 0;\n let barrisModificados = 0;\n let barrisCriados = 0;\n let barrisRemovidos = 0;\n\n for (const barrelRel of barris) {\n let content: string;\n try {\n content = await fsAsync.readFile(path.join(srcDir, barrelRel), 'utf-8');\n } catch {\n continue;\n }\n\n const analise = analisarBarrel(content, barrelRel, movimentos);\n\n if (!analise.todosMovidos && analise.movidos.length === 0) continue;\n\n // Caso 1: todos os exports moveram para o MESMO diretório → move o barrel junto\n if (analise.todosMovidos && analise.dirDestinoUnico) {\n const nomeBarrel = path.basename(barrelRel);\n const novoBarrelRel = path.posix.join(analise.dirDestinoUnico, nomeBarrel);\n const destBarrelAbs = path.join(srcDir, novoBarrelRel);\n\n // Se o destino já tem barrel, funde (cai no Caso 2 em vez de mover)\n if (!existsSync(destBarrelAbs)) {\n await moverBarrel(barrelRel, analise.dirDestinoUnico, srcDir);\n barrisMovidos++;\n movimentos.set(semExt(barrelRel), semExt(novoBarrelRel));\n continue;\n }\n // Fallthrough → Caso 2: remove exports e deixa criarBarrelSeNecessario fundir\n }\n\n // Caso 2: alguns exports moveram → remove do barrel antigo\n if (analise.movidos.length > 0) {\n const novoConteudo = removerExportsMovidos(content, barrelRel, movimentos);\n await fsAsync.writeFile(path.join(srcDir, barrelRel), novoConteudo, 'utf-8');\n barrisModificados++;\n log.info(`Barrel atualizado (exports removidos): ${barrelRel}`);\n\n // Registra exports removidos pra reparo posterior\n const perdas = new Map<string, string>();\n for (const exp of analise.movidos) {\n perdas.set(exp.resolved, exp.moveDest);\n }\n barrelsPerdidos.set(barrelRel, perdas);\n\n // Registra os exports que precisam ir para os destinos\n for (const exp of analise.movidos) {\n const dirDest = path.posix.dirname(exp.moveDest);\n const lista = mapDestinos.get(dirDest);\n if (lista) {\n lista.push(exp);\n } else {\n mapDestinos.set(dirDest, [exp]);\n }\n }\n\n // Se após remoção o barrel ficou vazio, apaga\n const vazio = await apagarBarrelSeVazio(barrelRel, srcDir);\n if (vazio) barrisRemovidos++;\n }\n }\n\n // Cria/atualiza barrels nos destinos com os exports movidos\n for (const [dirRel, exportsParaAdicionar] of mapDestinos) {\n if (await criarBarrelSeNecessario(dirRel, exportsParaAdicionar, srcDir)) {\n barrisCriados++;\n }\n }\n\n // Também cria barrels para destinos que receberam arquivos mas não têm barrel ainda\n const dirsDestino = new Set<string>();\n for (const [, destino] of movimentos) {\n dirsDestino.add(path.posix.dirname(destino));\n }\n for (const dirRel of dirsDestino) {\n if (mapDestinos.has(dirRel)) continue;\n const barrelPath = path.join(srcDir, dirRel, 'index.ts');\n if (existsSync(barrelPath)) continue;\n\n const exportsNovos: ExportInfo[] = [];\n for (const [, destino] of movimentos) {\n if (path.posix.dirname(destino) === dirRel) {\n const idxDest = [...movimentos.entries()].find(([, v]) => v === destino);\n if (idxDest) {\n exportsNovos.push({ spec: '', resolved: idxDest[0], moveDest: destino });\n }\n }\n }\n if (exportsNovos.length > 0 && await criarBarrelSeNecessario(dirRel, exportsNovos, srcDir)) {\n barrisCriados++;\n }\n }\n\n const importsReescritos = await atualizarImportsGlobais(srcDir, movimentos);\n const importsReparados = await repararImportsBarrelPerdidos(srcDir, barrelsPerdidos, movimentos);\n\n const partes: string[] = [];\n if (barrisMovidos > 0) partes.push(`${barrisMovidos} movidos`);\n if (barrisModificados > 0) partes.push(`${barrisModificados} modificados`);\n if (barrisCriados > 0) partes.push(`${barrisCriados} criados`);\n if (barrisRemovidos > 0) partes.push(`${barrisRemovidos} removidos`);\n if (importsReescritos > 0) partes.push(`${importsReescritos} imports reescritos`);\n if (importsReparados > 0) partes.push(`${importsReparados} imports reparados`);\n\n if (partes.length > 0) {\n log.sucesso(`Barrels: ${partes.join(', ')}`);\n } else {\n log.info('Nenhum barrel ou import precisou de ajustes.');\n }\n}\n\nfunction listarArquivosDir(dir: string): string[] {\n try {\n const entries = readdirSync(dir, { withFileTypes: true });\n const files: string[] = [];\n for (const entry of entries) {\n if (entry.isFile() && EXT_PATTERN.test(entry.name) && entry.name !== 'index.ts' && entry.name !== 'index.tsx' && entry.name !== 'index.jsx') {\n files.push(entry.name);\n }\n }\n return files.sort();\n } catch {\n return [];\n }\n}\n\nfunction exportsBarrelExistentes(content: string): Set<string> {\n const exports = new Set<string>();\n for (const linha of content.split('\\n')) {\n const match = linha.trim().match(/^export\\s+(?:\\*\\s+from|(?:type\\s+)?\\{[^}]*\\}\\s+from)\\s+['\"](.+)['\"]\\s*;/);\n if (match) {\n exports.add(match[1]);\n }\n }\n return exports;\n}\n\n/** Verifica se o barrel contém APENAS re-exports (export * from / export { } from), espaços e comentários.\n * Barrels com imports, named exports, ou lógica customizada são considerados \"curados\" e NÃO devem ser alterados. */\nfunction barrelEhPuroReexport(content: string): boolean {\n for (const linha of content.split('\\n')) {\n const trimmed = linha.trim();\n if (!trimmed) continue;\n if (trimmed.startsWith('//')) continue;\n if (trimmed.startsWith('/*')) continue;\n if (trimmed.startsWith('*')) continue;\n if (/^export\\s+(?:\\*\\s+from|(?:type\\s+)?\\{[^}]*\\}\\s+from)\\s+['\"]/.test(trimmed)) continue;\n return false;\n }\n return true;\n}\n\nexport async function gerarBarrels(baseDir: string, dryRun = false): Promise<ResultadoGeracaoBarrels> {\n const srcDir = path.join(baseDir, 'src');\n const resultado: ResultadoGeracaoBarrels = {\n criados: 0,\n atualizados: 0,\n erros: [],\n barris: [],\n };\n\n if (!existsSync(srcDir)) {\n resultado.erros.push(`Diretório src não encontrado em ${baseDir}`);\n return resultado;\n }\n\n const dirs: string[] = [];\n try {\n const entries = await fsAsync.readdir(srcDir, { withFileTypes: true });\n const stack = entries\n .filter(e => e.isDirectory() && !SKIP_DIRS.has(e.name))\n .map(e => path.join(srcDir, e.name));\n\n while (stack.length > 0) {\n const dir = stack.pop();\n if (!dir) break;\n dirs.push(dir);\n try {\n const sub = await fsAsync.readdir(dir, { withFileTypes: true });\n for (const s of sub) {\n if (s.isDirectory() && !SKIP_DIRS.has(s.name)) {\n stack.push(path.join(dir, s.name));\n }\n }\n } catch {\n }\n }\n } catch (err) {\n resultado.erros.push(`Erro ao varrer diretórios: ${err instanceof Error ? err.message : String(err)}`);\n return resultado;\n }\n\n for (const dir of dirs) {\n const files = listarArquivosDir(dir);\n if (files.length === 0) continue;\n\n // Filtra .d.ts que são declarações ambientes (não módulos)\n const filesModulo: string[] = [];\n for (const f of files) {\n if (f.endsWith('.d.ts')) {\n try {\n const content = await fsAsync.readFile(path.join(dir, f), 'utf-8');\n if (!/^export\\s/m.test(content)) continue;\n } catch { continue; }\n }\n filesModulo.push(f);\n }\n if (filesModulo.length === 0) continue;\n\n // Mapeia nomes de exportação para arquivos para detectar conflitos\n const nomeExportParaArquivos = new Map<string, string[]>();\n const exportacoesPorArquivo = new Map<string, ExportsClassificados>();\n for (const f of filesModulo) {\n try {\n const content = await fsAsync.readFile(path.join(dir, f), 'utf-8');\n const classified = classificarExports(content);\n exportacoesPorArquivo.set(f, classified);\n const todos = new Set([...classified.types, ...classified.values]);\n for (const nome of todos) {\n const arr = nomeExportParaArquivos.get(nome);\n if (arr) arr.push(f);\n else nomeExportParaArquivos.set(nome, [f]);\n }\n } catch { /* arquivo problemático, ignora */ }\n }\n\n // Gera linha(s) de export para um arquivo, respeitando conflitos de nome e verbatimModuleSyntax\n async function gerarLinhasExportacao(filename: string): Promise<string[]> {\n const spec = gerarSpecExport(filename);\n const classified = exportacoesPorArquivo.get(filename);\n if (!classified) return [`export * from '${spec}';`];\n const { types, values } = classified;\n const todos = new Set([...types, ...values]);\n const unicos: string[] = [];\n const conflitantes: string[] = [];\n for (const nome of todos) {\n const arquivos = nomeExportParaArquivos.get(nome);\n if (arquivos && arquivos.length > 1) {\n const sorted = [...arquivos].sort();\n if (sorted[0] === filename) unicos.push(nome);\n else conflitantes.push(nome);\n } else {\n unicos.push(nome);\n }\n }\n if (conflitantes.length === 0) return [`export * from '${spec}';`];\n if (unicos.length > 0) {\n const valuesUnicos = unicos.filter(n => values.has(n));\n const typesUnicos = unicos.filter(n => types.has(n));\n const parts: string[] = [];\n if (valuesUnicos.length > 0) parts.push(valuesUnicos.join(', '));\n if (typesUnicos.length > 0) parts.push(typesUnicos.map(n => `type ${n}`).join(', '));\n return [`export { ${parts.join(', ')} } from '${spec}';`];\n }\n return [];\n }\n\n const barrelPath = path.join(dir, 'index.ts');\n const dirRel = path.relative(srcDir, dir);\n\n if (existsSync(barrelPath)) {\n try {\n const content = await fsAsync.readFile(barrelPath, 'utf-8');\n\n if (!barrelEhPuroReexport(content)) {\n resultado.barris.push({ caminho: dirRel, status: 'ok', detalhes: 'curado manualmente' });\n continue;\n }\n\n const existentes = exportsBarrelExistentes(content);\n const existentesSemExt = new Set<string>();\n for (const s of existentes) existentesSemExt.add(semExt(s));\n const linhasParaAdicionar: string[] = [];\n for (const f of filesModulo) {\n const spec = gerarSpecExport(f);\n if (existentes.has(spec) || existentesSemExt.has(semExt(spec))) continue;\n const novasLinhas = await gerarLinhasExportacao(f);\n linhasParaAdicionar.push(...novasLinhas);\n }\n\n if (linhasParaAdicionar.length === 0) {\n resultado.barris.push({ caminho: dirRel, status: 'ok' });\n continue;\n }\n\n if (dryRun) {\n resultado.barris.push({\n caminho: dirRel,\n status: 'atualizado',\n detalhes: `Adicionaria ${linhasParaAdicionar.length} export(s)`,\n });\n resultado.atualizados++;\n continue;\n }\n\n await fsAsync.writeFile(barrelPath, `${content.trimEnd()}\\n${linhasParaAdicionar.join('\\n')}\\n`, 'utf-8');\n resultado.atualizados++;\n resultado.barris.push({\n caminho: dirRel,\n status: 'atualizado',\n detalhes: `${linhasParaAdicionar.length} export(s) adicionado(s)`,\n });\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err);\n resultado.erros.push(`Erro ao atualizar barrel ${dirRel}: ${msg}`);\n resultado.barris.push({ caminho: dirRel, status: 'erro', detalhes: msg });\n }\n } else {\n if (dryRun) {\n resultado.barris.push({\n caminho: dirRel,\n status: 'criado',\n detalhes: `Criaria barrel com ${filesModulo.length} export(s)`,\n });\n resultado.criados++;\n continue;\n }\n\n try {\n const linhas: string[] = [];\n for (const f of filesModulo) {\n const l = await gerarLinhasExportacao(f);\n linhas.push(...l);\n }\n await fsAsync.writeFile(barrelPath, `${linhas.join('\\n')}\\n`, 'utf-8');\n resultado.criados++;\n resultado.barris.push({\n caminho: dirRel,\n status: 'criado',\n detalhes: `${linhas.length} export(s)`,\n });\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err);\n resultado.erros.push(`Erro ao criar barrel ${dirRel}: ${msg}`);\n resultado.barris.push({ caminho: dirRel, status: 'erro', detalhes: msg });\n }\n }\n }\n\n return resultado;\n}\n"]}
|