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.
Files changed (117) hide show
  1. package/README.md +5 -5
  2. package/dist/analysts/corrections/reorganize-barrels.d.ts.map +1 -1
  3. package/dist/analysts/corrections/reorganize-barrels.js +29 -6
  4. package/dist/analysts/corrections/reorganize-barrels.js.map +1 -1
  5. package/dist/analysts/html/analysts/analyst-html.js.map +1 -1
  6. package/dist/analysts/js-ts/analysts/analyst-commands-cli.d.ts.map +1 -1
  7. package/dist/analysts/js-ts/analysts/analyst-commands-cli.js.map +1 -1
  8. package/dist/app/github/app/index.d.ts +6 -0
  9. package/dist/app/github/app/index.d.ts.map +1 -1
  10. package/dist/app/github/app/index.js +6 -0
  11. package/dist/app/github/app/index.js.map +1 -1
  12. package/dist/app/github/app/setup-routes.d.ts.map +1 -1
  13. package/dist/app/github/app/setup-routes.js +0 -1
  14. package/dist/app/github/app/setup-routes.js.map +1 -1
  15. package/dist/app/github/dashboard/index.d.ts +2 -0
  16. package/dist/app/github/dashboard/index.d.ts.map +1 -1
  17. package/dist/app/github/dashboard/index.js +2 -0
  18. package/dist/app/github/dashboard/index.js.map +1 -1
  19. package/dist/app/github/dashboard/layout.d.ts +5 -0
  20. package/dist/app/github/dashboard/layout.d.ts.map +1 -0
  21. package/dist/app/github/dashboard/layout.js +5 -0
  22. package/dist/app/github/dashboard/layout.js.map +1 -0
  23. package/dist/app/github/dashboard/page.d.ts +3 -0
  24. package/dist/app/github/dashboard/page.d.ts.map +1 -0
  25. package/dist/app/github/dashboard/page.js +10 -0
  26. package/dist/app/github/dashboard/page.js.map +1 -0
  27. package/dist/app/github/jobs/index.d.ts +1 -0
  28. package/dist/app/github/jobs/index.d.ts.map +1 -1
  29. package/dist/app/github/jobs/index.js +1 -0
  30. package/dist/app/github/jobs/index.js.map +1 -1
  31. package/dist/cli/commands/command-marketplace.js +1 -1
  32. package/dist/cli/commands/command-marketplace.js.map +1 -1
  33. package/dist/licenses/index.d.ts +2 -1
  34. package/dist/licenses/index.d.ts.map +1 -1
  35. package/dist/licenses/index.js +1 -0
  36. package/dist/licenses/index.js.map +1 -1
  37. package/dist/licenses/policy.d.ts +5 -0
  38. package/dist/licenses/policy.d.ts.map +1 -0
  39. package/dist/licenses/policy.js +60 -0
  40. package/dist/licenses/policy.js.map +1 -0
  41. package/dist/licenses/scanner.d.ts +4 -2
  42. package/dist/licenses/scanner.d.ts.map +1 -1
  43. package/dist/licenses/scanner.js +10 -2
  44. package/dist/licenses/scanner.js.map +1 -1
  45. package/dist/shared/marketplace/remote.js +1 -1
  46. package/dist/shared/marketplace/remote.js.map +1 -1
  47. package/dist/types/licenses/licenses.d.ts +8 -0
  48. package/dist/types/licenses/licenses.d.ts.map +1 -1
  49. package/dist/types/licenses/licenses.js.map +1 -1
  50. package/package.json +6 -7
  51. package/out/404/index.html +0 -1
  52. package/out/404.html +0 -1
  53. package/out/__next.__PAGE__.txt +0 -25
  54. package/out/__next._full.txt +0 -37
  55. package/out/__next._head.txt +0 -5
  56. package/out/__next._index.txt +0 -6
  57. package/out/__next._tree.txt +0 -4
  58. package/out/_next/static/7AicuowOpmCuGWjCpsQMB/_buildManifest.js +0 -11
  59. package/out/_next/static/7AicuowOpmCuGWjCpsQMB/_clientMiddlewareManifest.js +0 -1
  60. package/out/_next/static/7AicuowOpmCuGWjCpsQMB/_ssgManifest.js +0 -1
  61. package/out/_next/static/chunks/05-c3ty_6dwfk.js +0 -1
  62. package/out/_next/static/chunks/0cz1d0mv5g_q7.js +0 -1
  63. package/out/_next/static/chunks/1061ff024jzvu.js +0 -2
  64. package/out/_next/static/chunks/14mrh2-p_w84d.js +0 -1
  65. package/out/_next/static/chunks/15orcrkp-_9ct.js +0 -4
  66. package/out/_next/static/chunks/1jq4o6yq14o4c.js +0 -31
  67. package/out/_next/static/chunks/1rxncug86bump.js +0 -1
  68. package/out/_next/static/chunks/2n-4qa9h44lgj.js +0 -1
  69. package/out/_next/static/chunks/39aw8cj-oq89z.js +0 -11
  70. package/out/_next/static/chunks/3n7dm2ojtyzwn.js +0 -1
  71. package/out/_next/static/chunks/3uta7d_6k863-.css +0 -1
  72. package/out/_next/static/chunks/turbopack-2xb6mmb6_q43u.js +0 -1
  73. package/out/_next/static/media/icon-1.008jpsm4iakzh.png +0 -0
  74. package/out/_not-found/__next._full.txt +0 -16
  75. package/out/_not-found/__next._head.txt +0 -5
  76. package/out/_not-found/__next._index.txt +0 -6
  77. package/out/_not-found/__next._not-found.__PAGE__.txt +0 -5
  78. package/out/_not-found/__next._not-found.txt +0 -5
  79. package/out/_not-found/__next._tree.txt +0 -3
  80. package/out/_not-found/index.html +0 -1
  81. package/out/_not-found/index.txt +0 -16
  82. package/out/changelog/__next._full.txt +0 -573
  83. package/out/changelog/__next._head.txt +0 -5
  84. package/out/changelog/__next._index.txt +0 -6
  85. package/out/changelog/__next._tree.txt +0 -4
  86. package/out/changelog/__next.changelog.__PAGE__.txt +0 -560
  87. package/out/changelog/__next.changelog.txt +0 -5
  88. package/out/changelog/index.html +0 -550
  89. package/out/changelog/index.txt +0 -573
  90. package/out/github/dashboard/__next._full.txt +0 -20
  91. package/out/github/dashboard/__next._head.txt +0 -5
  92. package/out/github/dashboard/__next._index.txt +0 -6
  93. package/out/github/dashboard/__next._tree.txt +0 -3
  94. package/out/github/dashboard/__next.github.dashboard.__PAGE__.txt +0 -9
  95. package/out/github/dashboard/__next.github.dashboard.txt +0 -4
  96. package/out/github/dashboard/__next.github.txt +0 -5
  97. package/out/github/dashboard/index.html +0 -1
  98. package/out/github/dashboard/index.txt +0 -20
  99. package/out/index.html +0 -1
  100. package/out/index.txt +0 -37
  101. package/out/privacy-policy/__next._full.txt +0 -38
  102. package/out/privacy-policy/__next._head.txt +0 -5
  103. package/out/privacy-policy/__next._index.txt +0 -6
  104. package/out/privacy-policy/__next._tree.txt +0 -4
  105. package/out/privacy-policy/__next.privacy-policy.__PAGE__.txt +0 -23
  106. package/out/privacy-policy/__next.privacy-policy.txt +0 -5
  107. package/out/privacy-policy/index.html +0 -1
  108. package/out/privacy-policy/index.txt +0 -38
  109. package/out/terms-of-use/__next._full.txt +0 -37
  110. package/out/terms-of-use/__next._head.txt +0 -5
  111. package/out/terms-of-use/__next._index.txt +0 -6
  112. package/out/terms-of-use/__next._tree.txt +0 -4
  113. package/out/terms-of-use/__next.terms-of-use.__PAGE__.txt +0 -18
  114. package/out/terms-of-use/__next.terms-of-use.txt +0 -5
  115. package/out/terms-of-use/index.html +0 -1
  116. package/out/terms-of-use/index.txt +0 -37
  117. 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/blue-diaz/tutanus.git
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/blue-diaz/tutanus.git
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
  [![npm](https://img.shields.io/badge/npm-tutanus-CB3837)](https://www.npmjs.com/package/tutanus)
725
- [![GitHub](https://img.shields.io/badge/github-blue--diaz/tutanus-181717)](https://github.com/blue-diaz/tutanus)
726
- [![Issues](https://img.shields.io/badge/issues-report-FF4500)](https://github.com/blue-diaz/tutanus/issues)
727
- [![Releases](https://img.shields.io/badge/releases-latest-2ea44f)](https://github.com/blue-diaz/tutanus/releases)
725
+ [![GitHub](https://img.shields.io/badge/github-blue--diaz/tutanus-181717)](https://github.com/mocoto-geleia/tutanus)
726
+ [![Issues](https://img.shields.io/badge/issues-report-FF4500)](https://github.com/mocoto-geleia/tutanus/issues)
727
+ [![Releases](https://img.shields.io/badge/releases-latest-2ea44f)](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;AA2gBtE,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,CA0LpG"}
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 resolvedPath = `${semExt(resolved)}.ts`;
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 destPath = `${semExt(dest)}.ts`;
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 = `./${semExt(filename)}.js`;
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 = `./${semExt(f)}.js`;
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"]}