@mocoto/mahoraga 0.14.1 → 0.14.3

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 (306) hide show
  1. package/README.md +0 -34
  2. package/dist/analysts/architects/analyst-structure.js +20 -20
  3. package/dist/analysts/architects/archetypes-custom.js +16 -19
  4. package/dist/analysts/architects/detector-archetypes.js +43 -36
  5. package/dist/analysts/architects/orchestrator-archetypes.js +3 -3
  6. package/dist/analysts/architects/signals-project-advanced.js +26 -28
  7. package/dist/analysts/architects/signals-project.js +2 -2
  8. package/dist/analysts/architects/strategist-structure.js +47 -66
  9. package/dist/analysts/azure-pipelines/analysts/analyst-azure.js +41 -35
  10. package/dist/analysts/azure-pipelines/corrections/correction-azure.js +22 -19
  11. package/dist/analysts/azure-pipelines/detectors/detector-azure-performance.js +21 -18
  12. package/dist/analysts/azure-pipelines/detectors/detector-azure-security.js +25 -20
  13. package/dist/analysts/azure-pipelines/detectors/detector-azure-structure.js +39 -40
  14. package/dist/analysts/azure-pipelines/scorers/scorer-azure.js +10 -7
  15. package/dist/analysts/circleci/analysts/analyst-circleci.js +33 -27
  16. package/dist/analysts/circleci/corrections/correction-circleci.js +22 -20
  17. package/dist/analysts/circleci/detectors/detector-circleci-performance.js +23 -19
  18. package/dist/analysts/circleci/detectors/detector-circleci-security.js +78 -82
  19. package/dist/analysts/circleci/detectors/detector-circleci-structure.js +22 -22
  20. package/dist/analysts/converters/convert-registry.js +1 -1
  21. package/dist/analysts/converters/engines/converter-gha-to-gitlab.js +17 -15
  22. package/dist/analysts/converters/index.js +1 -1
  23. package/dist/analysts/corrections/analyst-quick-fixes.js +25 -28
  24. package/dist/analysts/corrections/analyst-scoring.js +24 -21
  25. package/dist/analysts/corrections/auto-fix-engine.js +1 -1
  26. package/dist/analysts/corrections/corrector-structure.js +43 -42
  27. package/dist/analysts/corrections/fix-alias-imports.js +10 -6
  28. package/dist/analysts/corrections/fix-md-fences.js +23 -23
  29. package/dist/analysts/corrections/map-reversion.js +56 -53
  30. package/dist/analysts/corrections/pruning.js +19 -16
  31. package/dist/analysts/corrections/quick-fixes/fix-any-to-proper-type.js +57 -61
  32. package/dist/analysts/corrections/quick-fixes/fix-unknown-to-specific-type.js +30 -30
  33. package/dist/analysts/corrections/reorganize-barrels.js +13 -13
  34. package/dist/analysts/corrections/rewrite-testes-aliases.js +23 -22
  35. package/dist/analysts/corrections/scoring-shared.js +19 -18
  36. package/dist/analysts/corrections/type-safety/context-analyzer.js +15 -10
  37. package/dist/analysts/corrections/type-safety/type-analyzer.js +3 -3
  38. package/dist/analysts/corrections/type-safety/type-validator.js +4 -3
  39. package/dist/analysts/corrections/type-safety/usage-analyzer.js +39 -42
  40. package/dist/analysts/css/analysts/analyst-css.js +42 -42
  41. package/dist/analysts/css/corrections/correction-css.js +19 -11
  42. package/dist/analysts/css/detectors/detector-css-best-practices.js +129 -118
  43. package/dist/analysts/css/scorers/scorer-css.js +23 -18
  44. package/dist/analysts/css-in-js/analysts/analyst-css-in-js.js +24 -17
  45. package/dist/analysts/css-in-js/corrections/correction-css-in-js.js +31 -16
  46. package/dist/analysts/css-in-js/detectors/detector-css-in-js-best-practices.js +28 -30
  47. package/dist/analysts/css-in-js/scorers/scorer-css-in-js.js +79 -54
  48. package/dist/analysts/css-in-js/shared.js +7 -0
  49. package/dist/analysts/detectors/detector-architecture.js +91 -85
  50. package/dist/analysts/detectors/detector-bugs-ml.js +29 -27
  51. package/dist/analysts/detectors/detector-code-fragile.js +41 -36
  52. package/dist/analysts/detectors/detector-dependencies.js +5 -5
  53. package/dist/analysts/detectors/detector-duplications.js +26 -26
  54. package/dist/analysts/detectors/detector-monorepo.js +51 -45
  55. package/dist/analysts/detectors/detector-performance.js +24 -17
  56. package/dist/analysts/detectors/detector-recommendation-architecture.js +40 -36
  57. package/dist/analysts/detectors/detector-security.js +43 -42
  58. package/dist/analysts/detectors/detector-structure.js +31 -28
  59. package/dist/analysts/github-actions/analysts/analyst-github-actions.js +5 -8
  60. package/dist/analysts/github-actions/detectors/detector-workflow-accessibility.js +1 -9
  61. package/dist/analysts/github-actions/detectors/detector-workflow-structure.js +1 -4
  62. package/dist/analysts/github-actions/detectors/detector-workflow-trigger-unsafe.js +6 -5
  63. package/dist/analysts/gitlab-ci/analysts/analyst-gitlab-ci.js +2 -2
  64. package/dist/analysts/gitlab-ci/detectors/detector-gitlab-ci-structure.js +0 -3
  65. package/dist/analysts/go/analysts/analyst-best-practices.js +2 -2
  66. package/dist/analysts/go/analysts/analyst-concurrency.js +1 -1
  67. package/dist/analysts/go/analysts/analyst-security.js +1 -1
  68. package/dist/analysts/go/detectors/detector-conventions.js +1 -1
  69. package/dist/analysts/html/analysts/analyst-html.js +10 -12
  70. package/dist/analysts/html/detectors/detector-html.js +3 -3
  71. package/dist/analysts/js-ts/analysts/analyst-commands-cli.js +22 -22
  72. package/dist/analysts/js-ts/analysts/analyst-functions-long.js +5 -5
  73. package/dist/analysts/js-ts/analysts/analyst-patterns-usage.js +6 -2
  74. package/dist/analysts/js-ts/detectors/detector-anti-patterns-async.js +84 -9
  75. package/dist/analysts/js-ts/detectors/detector-constructions-syntactic.js +33 -10
  76. package/dist/analysts/js-ts/detectors/detector-context-smart.js +6 -6
  77. package/dist/analysts/js-ts/detectors/detector-leaks-memory.js +1 -1
  78. package/dist/analysts/js-ts/detectors/detector-types-unsafe.js +33 -2
  79. package/dist/analysts/php/analysts/analyst-php.js +3 -3
  80. package/dist/analysts/php/detectors/detector-php-best-practices.js +5 -5
  81. package/dist/analysts/php/detectors/detector-php-security.js +5 -5
  82. package/dist/analysts/php/scorers/scorer-php.js +2 -2
  83. package/dist/analysts/plugins/detector-documentation.js +6 -6
  84. package/dist/analysts/plugins/detector-markdown.js +7 -7
  85. package/dist/analysts/python/analysts/analyst-python.js +2 -5
  86. package/dist/analysts/react/analysts/analyst-react-hooks.js +66 -9
  87. package/dist/analysts/react/analysts/analyst-react.js +46 -2
  88. package/dist/analysts/react/corrections/correction-react.js +41 -1
  89. package/dist/analysts/react/detectors/detector-react-best-practices.js +5 -5
  90. package/dist/analysts/react/scorers/scorer-react.js +36 -1
  91. package/dist/analysts/registry/autodiscovery.js +2 -2
  92. package/dist/analysts/rust/analysts/analyst-best-practices.js +42 -3
  93. package/dist/analysts/rust/analysts/analyst-memory.js +2 -2
  94. package/dist/analysts/rust/analysts/analyst-rust.js +52 -5
  95. package/dist/analysts/rust/analysts/analyst-security.js +29 -1
  96. package/dist/analysts/scorers/scorer.js +5 -5
  97. package/dist/analysts/shell/analysts/analyst-shell.js +81 -5
  98. package/dist/analysts/shell/corrections/correction-shell.js +34 -1
  99. package/dist/analysts/shell/detectors/detector-shell-security.js +88 -0
  100. package/dist/analysts/shell/scorers/scorer-shell.js +58 -1
  101. package/dist/analysts/strategists/operator-structure.js +5 -7
  102. package/dist/analysts/strategists/suggestions-contextuais.js +5 -2
  103. package/dist/analysts/svg/analysts/analyst-svg.js +1 -0
  104. package/dist/analysts/tailwind/analysts/analyst-tailwind.js +79 -55
  105. package/dist/analysts/tailwind/corrections/correction-tailwind.js +108 -9
  106. package/dist/analysts/tailwind/detectors/detector-tailwind-best-practices.js +122 -7
  107. package/dist/analysts/tailwind/scorers/scorer-tailwind.js +62 -11
  108. package/dist/analysts/xml/analysts/analyst-xml.js +2 -2
  109. package/dist/app/index.js +1 -0
  110. package/dist/bin/cli-bootstrap.js +6 -4
  111. package/dist/bin/index.js +6 -4
  112. package/dist/caretakers/scoring.js +1 -0
  113. package/dist/cli/commands/command-analysts.js +4 -3
  114. package/dist/cli/commands/command-azure.js +1 -1
  115. package/dist/cli/commands/command-circleci.js +1 -1
  116. package/dist/cli/commands/command-compliance.js +1 -1
  117. package/dist/cli/commands/command-diagnose.js +10 -13
  118. package/dist/cli/commands/command-fix-types.js +9 -32
  119. package/dist/cli/commands/command-formatters.js +2 -2
  120. package/dist/cli/commands/command-github-actions.js +1 -1
  121. package/dist/cli/commands/command-gitlab-ci.js +1 -1
  122. package/dist/cli/commands/command-guardian.js +1 -1
  123. package/dist/cli/commands/command-imports.js +6 -6
  124. package/dist/cli/commands/command-jenkins.js +1 -1
  125. package/dist/cli/commands/command-licenses.js +1 -1
  126. package/dist/cli/commands/command-marketplace.js +7 -7
  127. package/dist/cli/commands/command-names.js +3 -8
  128. package/dist/cli/commands/command-perf.js +7 -9
  129. package/dist/cli/commands/command-plugins.js +4 -4
  130. package/dist/cli/diagnostic/auto-fix.js +2 -2
  131. package/dist/cli/diagnostic/exporters/json-exporter.js +1 -1
  132. package/dist/cli/diagnostic/exporters/sharded-exporter.js +0 -3
  133. package/dist/cli/diagnostic/exporters/svg-optimization-exporter.js +1 -1
  134. package/dist/cli/diagnostic/filters.js +9 -9
  135. package/dist/cli/diagnostic/handlers/archetype-handler.js +3 -6
  136. package/dist/cli/diagnostic/handlers/auto-fix-handler.js +4 -4
  137. package/dist/cli/diagnostic/handlers/guardian-handler.js +1 -1
  138. package/dist/cli/diagnostic/processing-diagnostic.js +31 -35
  139. package/dist/cli/diagnostic/processing-helpers.js +2 -2
  140. package/dist/cli/handlers/fix-types-exporter.js +1 -4
  141. package/dist/cli/helpers/display-frame.js +5 -5
  142. package/dist/core/config/auto/auto-fix-config.js +0 -6
  143. package/dist/core/config/chalk-safe.js +6 -6
  144. package/dist/core/config/config.js +11 -13
  145. package/dist/core/config/conventions.js +1 -1
  146. package/dist/core/config/security.js +2 -2
  147. package/dist/core/execution/analysis-cache.js +5 -8
  148. package/dist/core/execution/ast-cache.js +1 -3
  149. package/dist/core/execution/executor.js +8 -21
  150. package/dist/core/execution/inquisitor.js +24 -21
  151. package/dist/core/execution/results.js +1 -0
  152. package/dist/core/execution/scanner.js +4 -4
  153. package/dist/core/messages/en/analysts/analyst-github-actions-messages.js +1 -1
  154. package/dist/core/messages/en/analysts/analyst-patterns-usage-messages.js +1 -0
  155. package/dist/core/messages/en/analysts/analyst-shell-messages.js +15 -0
  156. package/dist/core/messages/en/analysts/detector-constructions-syntactic-messages.js +6 -0
  157. package/dist/core/messages/en/analysts/detector-js-ts-messages.js +27 -0
  158. package/dist/core/messages/en/analysts/detector-react-messages.js +8 -0
  159. package/dist/core/messages/en/analysts/detector-shell-messages.js +17 -0
  160. package/dist/core/messages/en/analysts/detector-tailwind-messages.js +3 -3
  161. package/dist/core/messages/en/analysts/report-circleci-messages.js +7 -7
  162. package/dist/core/messages/en/caretakers/caretaker-messages.js +1 -7
  163. package/dist/core/messages/en/core/plugin-messages.js +31 -3
  164. package/dist/core/messages/en/log/log.js +4 -4
  165. package/dist/core/messages/en/ui/filter-config.js +1 -5
  166. package/dist/core/messages/i18n-system.js +3 -3
  167. package/dist/core/messages/index.js +3 -3
  168. package/dist/core/messages/ja/analysts/analyst-github-actions-messages.js +1 -1
  169. package/dist/core/messages/ja/analysts/analyst-patterns-usage-messages.js +1 -0
  170. package/dist/core/messages/ja/analysts/analyst-shell-messages.js +15 -0
  171. package/dist/core/messages/ja/analysts/detector-constructions-syntactic-messages.js +6 -0
  172. package/dist/core/messages/ja/analysts/detector-js-ts-messages.js +27 -0
  173. package/dist/core/messages/ja/analysts/detector-react-messages.js +8 -0
  174. package/dist/core/messages/ja/analysts/detector-shell-messages.js +17 -0
  175. package/dist/core/messages/ja/analysts/detector-tailwind-messages.js +3 -3
  176. package/dist/core/messages/ja/analysts/report-circleci-messages.js +7 -7
  177. package/dist/core/messages/ja/caretakers/caretaker-messages.js +1 -7
  178. package/dist/core/messages/ja/core/plugin-messages.js +31 -3
  179. package/dist/core/messages/ja/log/log.js +4 -4
  180. package/dist/core/messages/ja/ui/filter-config.js +1 -1
  181. package/dist/core/messages/pt/analysts/analyst-github-actions-messages.js +1 -1
  182. package/dist/core/messages/pt/analysts/analyst-patterns-usage-messages.js +1 -0
  183. package/dist/core/messages/pt/analysts/analyst-shell-messages.js +15 -0
  184. package/dist/core/messages/pt/analysts/detector-constructions-syntactic-messages.js +6 -0
  185. package/dist/core/messages/pt/analysts/detector-js-ts-messages.js +27 -0
  186. package/dist/core/messages/pt/analysts/detector-react-messages.js +8 -0
  187. package/dist/core/messages/pt/analysts/detector-shell-messages.js +17 -0
  188. package/dist/core/messages/pt/analysts/detector-tailwind-messages.js +3 -3
  189. package/dist/core/messages/pt/analysts/report-circleci-messages.js +7 -7
  190. package/dist/core/messages/pt/caretakers/caretaker-messages.js +1 -7
  191. package/dist/core/messages/pt/core/plugin-messages.js +31 -3
  192. package/dist/core/messages/pt/log/log-engine.js +6 -6
  193. package/dist/core/messages/pt/log/log.js +3 -3
  194. package/dist/core/messages/pt/ui/filter-config.js +1 -1
  195. package/dist/core/messages/shared/icons.js +3 -3
  196. package/dist/core/messages/zh/analysts/analyst-github-actions-messages.js +1 -1
  197. package/dist/core/messages/zh/analysts/analyst-patterns-usage-messages.js +1 -0
  198. package/dist/core/messages/zh/analysts/analyst-shell-messages.js +15 -0
  199. package/dist/core/messages/zh/analysts/detector-constructions-syntactic-messages.js +6 -0
  200. package/dist/core/messages/zh/analysts/detector-js-ts-messages.js +27 -0
  201. package/dist/core/messages/zh/analysts/detector-react-messages.js +8 -0
  202. package/dist/core/messages/zh/analysts/detector-shell-messages.js +17 -0
  203. package/dist/core/messages/zh/analysts/detector-tailwind-messages.js +3 -3
  204. package/dist/core/messages/zh/analysts/report-circleci-messages.js +7 -7
  205. package/dist/core/messages/zh/caretakers/caretaker-messages.js +1 -7
  206. package/dist/core/messages/zh/core/plugin-messages.js +31 -3
  207. package/dist/core/messages/zh/log/log.js +3 -3
  208. package/dist/core/messages/zh/ui/filter-config.js +1 -5
  209. package/dist/core/parsing/filters.js +3 -3
  210. package/dist/core/parsing/langs/json.js +1 -1
  211. package/dist/core/parsing/langs/python.js +1 -1
  212. package/dist/core/parsing/langs/typescript.js +1 -1
  213. package/dist/core/parsing/parser.js +3 -4
  214. package/dist/core/parsing/utils.js +1 -0
  215. package/dist/core/registry/file-registry.js +3 -2
  216. package/dist/core/registry/paths.js +3 -3
  217. package/dist/core/reporting/default-reporter.js +2 -2
  218. package/dist/core/schema/version.js +6 -6
  219. package/dist/core/workers/worker-executor.js +3 -3
  220. package/dist/core/workers/worker-pool.js +0 -0
  221. package/dist/guardian/baseline.js +1 -1
  222. package/dist/guardian/gpg.js +3 -1
  223. package/dist/guardian/integrity.js +2 -7
  224. package/dist/guardian/records.js +7 -1
  225. package/dist/guardian/result.js +1 -1
  226. package/dist/guardian/sentinel.js +7 -1
  227. package/dist/guardian/watcher-hidden.js +6 -1
  228. package/dist/licenses/fs-utils.js +5 -1
  229. package/dist/licenses/generate-notices.js +1 -1
  230. package/dist/licenses/index.js +1 -0
  231. package/dist/licenses/normalizer.js +10 -9
  232. package/dist/node.loader.js +224 -4
  233. package/dist/reports/analise-async-patterns.js +1 -1
  234. package/dist/reports/filter-smart.js +2 -5
  235. package/dist/reports/generator-report.js +7 -7
  236. package/dist/reports/report-archetypes.js +10 -10
  237. package/dist/reports/report-caretaker-health.js +2 -1
  238. package/dist/reports/report-patterns-usage.js +1 -1
  239. package/dist/sdk/analyzer.js +1 -1
  240. package/dist/shared/data-processing/fragment-report.js +11 -11
  241. package/dist/shared/data-processing/json.js +1 -1
  242. package/dist/shared/data-processing/occurrences.js +3 -2
  243. package/dist/shared/formatters/code-min-formatter.js +1 -1
  244. package/dist/shared/formatters/engines/prettier.js +1 -1
  245. package/dist/shared/formatters/engines/stylelint.js +43 -40
  246. package/dist/shared/formatters/formatter.js +8 -8
  247. package/dist/shared/formatters/formatters/code.js +3 -3
  248. package/dist/shared/formatters/formatters/css.js +2 -10
  249. package/dist/shared/formatters/formatters/dotfiles.js +1 -1
  250. package/dist/shared/formatters/formatters/html.js +1 -5
  251. package/dist/shared/formatters/formatters/json.js +0 -3
  252. package/dist/shared/formatters/formatters/markdown.js +19 -24
  253. package/dist/shared/formatters/formatters/properties.js +2 -2
  254. package/dist/shared/formatters/formatters/shell.js +1 -4
  255. package/dist/shared/formatters/formatters/sql.js +0 -3
  256. package/dist/shared/formatters/formatters/xml.js +5 -7
  257. package/dist/shared/formatters/formatters/yaml.js +2 -7
  258. package/dist/shared/formatters/index.js +1 -1
  259. package/dist/shared/helpers/framework-detector.js +6 -2
  260. package/dist/shared/helpers/json.js +1 -1
  261. package/dist/shared/helpers/magic-constants-whitelist.js +1 -1
  262. package/dist/shared/helpers/masking.js +17 -17
  263. package/dist/shared/helpers/reader-report.js +0 -12
  264. package/dist/shared/helpers/structural-hash.js +3 -2
  265. package/dist/shared/helpers/structure.js +1 -1
  266. package/dist/shared/marketplace/registry.js +1 -1
  267. package/dist/shared/marketplace/remote.js +4 -4
  268. package/dist/shared/persistence/persistence.js +13 -6
  269. package/dist/shared/plugins/core-plugin.js +5 -1
  270. package/dist/shared/plugins/registry.js +3 -2
  271. package/dist/types/analysts/tailwind-correction.js +2 -0
  272. package/dist/types/caretakers/imports-barrel.js +1 -0
  273. package/dist/types/caretakers/index.js +4 -0
  274. package/dist/types/caretakers/map-reversion.js +1 -0
  275. package/dist/types/caretakers/pruning.js +1 -0
  276. package/dist/types/caretakers/scoring.js +1 -0
  277. package/dist/types/common/analysts.js +1 -1
  278. package/dist/types/core/config/filters.js +1 -0
  279. package/dist/types/core/config/index.js +2 -0
  280. package/dist/types/core/execution/ambiente.js +1 -0
  281. package/dist/types/core/execution/linguagens.js +1 -0
  282. package/dist/types/core/execution/parse-errors.js +1 -0
  283. package/dist/types/core/execution/results.js +1 -0
  284. package/dist/types/core/execution/structure-json.js +1 -0
  285. package/dist/types/core/index.js +1 -0
  286. package/dist/types/core/messages/index.js +1 -0
  287. package/dist/types/core/messages/log.js +1 -0
  288. package/dist/types/core/parsing/babel-narrow.js +1 -0
  289. package/dist/types/core/parsing/index.js +1 -0
  290. package/dist/types/core/runtime.js +1 -0
  291. package/dist/types/guardian/index.js +2 -0
  292. package/dist/types/guardian/integrity.js +7 -0
  293. package/dist/types/guardian/snapshot.js +1 -0
  294. package/dist/types/index.js +4 -4
  295. package/dist/types/licenses/index.js +2 -0
  296. package/dist/types/processing/display.js +16 -13
  297. package/dist/types/processing/filters.js +8 -11
  298. package/dist/types/reports/compliance.js +1 -0
  299. package/dist/types/reports/streaming.js +1 -0
  300. package/dist/types/scripts/index.js +1 -0
  301. package/dist/types/scripts/migrar-aliases.js +1 -0
  302. package/dist/types/sdk/index.js +1 -0
  303. package/dist/types/shared/index.js +2 -0
  304. package/dist/types/vulnerabilities/index.js +2 -0
  305. package/dist/vulnerabilities/scanner.js +3 -2
  306. package/package.json +14 -20
@@ -7,7 +7,11 @@ import { config } from '../core/config/index.js';
7
7
  import { getMessages } from '../core/messages/index.js';
8
8
  import { ensureDir, normalizePath } from '../shared/helpers/index.js';
9
9
  import { GuardianError, IntegridadeStatus } from '../types/index.js';
10
- const { log, GuardianMensagens } = getMessages();
10
+ // eslint-disable-next-line @typescript-eslint/explicit-function-return-type
11
+ function getLog() {
12
+ const { log, GuardianMensagens } = getMessages();
13
+ return { log, GuardianMensagens };
14
+ }
11
15
  function getErrMsg(err) {
12
16
  return typeof err === 'object' && err && 'message' in err ? err.message : String(err);
13
17
  }
@@ -21,6 +25,7 @@ async function construirSnapshot(fileEntries) {
21
25
  snapshot[relPath] = await gerarSnapshotDoConteudo(content);
22
26
  }
23
27
  catch (err) {
28
+ const { log, GuardianMensagens } = getLog();
24
29
  log.aviso(GuardianMensagens.falhaGerarAssinaturaGpg(relPath, getErrMsg(err)));
25
30
  }
26
31
  }
@@ -28,6 +33,7 @@ async function construirSnapshot(fileEntries) {
28
33
  }
29
34
  export async function scanSystemIntegrity(fileEntries, options) {
30
35
  const agora = new Date().toISOString();
36
+ const { log, GuardianMensagens } = getLog();
31
37
  await ensureDir(LINHA_BASE_CAMINHO);
32
38
  let baselineAnterior = null;
33
39
  try {
@@ -1,8 +1,13 @@
1
1
  // SPDX-License-Identifier: MIT
2
2
  import { carregarRegistros, inicializarChaves, REGISTRO_VIGIA_CAMINHO_PADRAO, salvarRegistros, verificarAssinatura } from './index.js';
3
3
  import { getMessages } from '../core/messages/index.js';
4
- const { log, VigiaOcultaMensagens } = getMessages();
4
+ // eslint-disable-next-line @typescript-eslint/explicit-function-return-type
5
+ function getLog() {
6
+ const { log, VigiaOcultaMensagens } = getMessages();
7
+ return { log, VigiaOcultaMensagens };
8
+ }
5
9
  export async function vigiaOculta(arquivos, caminhoRegistro = REGISTRO_VIGIA_CAMINHO_PADRAO, autoReset = true) {
10
+ const { log, VigiaOcultaMensagens } = getLog();
6
11
  const registros = await carregarRegistros(caminhoRegistro);
7
12
  const mapaAnterior = new Map(registros.map(raiz => [raiz.arquivo, raiz.assinatura]));
8
13
  const corrompidos = [];
@@ -22,7 +22,11 @@ export function exists(caminho) {
22
22
  export function readPackageJsonSync(pkgCaminho) {
23
23
  try {
24
24
  const data = fs.readFileSync(pkgCaminho, 'utf8');
25
- return JSON.parse(data);
25
+ const parsed = JSON.parse(data);
26
+ if (typeof parsed !== 'object' || parsed === null) {
27
+ return null;
28
+ }
29
+ return parsed;
26
30
  }
27
31
  catch {
28
32
  return null;
@@ -127,7 +127,7 @@ export async function generateNotices({ root = process.cwd(), ptBr = false, outp
127
127
  await fs.writeFile(path.join(dir, 'licenses.json'), JSON.stringify(results, null, 2), 'utf-8');
128
128
  }
129
129
  catch { }
130
- const entries = Object.entries(results ?? {}).filter(([id]) => !id.startsWith(`${pkg.name}@`)).sort((arquivo, base) => arquivo[0].localeCompare(base[0]));
130
+ const entries = Object.entries(results).filter(([id]) => !id.startsWith(`${pkg.name}@`)).sort((arquivo, base) => arquivo[0].localeCompare(base[0]));
131
131
  const parts = [header({
132
132
  projectNome,
133
133
  license: projectLicenca,
@@ -5,6 +5,7 @@
5
5
  export { addDisclaimer, disclaimerModule, verifyDisclaimer } from './disclaimer.js';
6
6
  export * from './fs-utils.js';
7
7
  export { generateNotices } from './generate-notices.js';
8
+ export * from './header-options.js';
8
9
  export * from './licenses.js';
9
10
  export * from './normalizer.js';
10
11
  export { checkLicenseStatus, DEFAULT_LICENSE_POLICY } from './policy.js';
@@ -15,19 +15,19 @@ async function tryLoadSpdx() {
15
15
  }
16
16
  spdxLoaded = true;
17
17
  try {
18
- spdxParse = (await import('spdx-expression-parse')).default ?? (await import('spdx-expression-parse'));
18
+ spdxParse = ((await import('spdx-expression-parse')).default ?? (await import('spdx-expression-parse')));
19
19
  }
20
20
  catch (err) {
21
21
  log.debug(`${LicensasMensagens.erroCarregarSpdxExpressionParse} - ${err instanceof Error ? err.message : String(err)}`);
22
22
  }
23
23
  try {
24
- spdxCorrect = (await import('spdx-correct')).default ?? (await import('spdx-correct'));
24
+ spdxCorrect = ((await import('spdx-correct')).default ?? (await import('spdx-correct')));
25
25
  }
26
26
  catch (err) {
27
27
  log.debug(`${LicensasMensagens.erroCarregarSpdxCorrect} - ${err instanceof Error ? err.message : String(err)}`);
28
28
  }
29
29
  try {
30
- spdxLicencaList = (await import('spdx-license-list')).default ?? (await import('spdx-license-list'));
30
+ spdxLicencaList = ((await import('spdx-license-list')).default ?? (await import('spdx-license-list')));
31
31
  }
32
32
  catch (err) {
33
33
  log.debug(`${LicensasMensagens.erroCarregarSpdxLicenseList} - ${err instanceof Error ? err.message : String(err)}`);
@@ -46,7 +46,7 @@ function fallbackNormalize(raw) {
46
46
  if (isRecord(raw)) {
47
47
  return raw.type !== null ? fallbackNormalize(raw.type) : 'UNKNOWN';
48
48
  }
49
- let string = String(raw).trim();
49
+ let string = `${raw}`.trim();
50
50
  string = string.replace(/\s+/g, ' ');
51
51
  const map = {
52
52
  mit: 'MIT',
@@ -113,7 +113,7 @@ export async function normalizeLicense(raw) {
113
113
  return raw.map(raiz => awaitOrFallback(raiz)).join(' OR ');
114
114
  }
115
115
  if (isRecord(raw)) {
116
- raw = raw.type ?? raw;
116
+ return awaitOrFallback(raw.type ?? raw);
117
117
  }
118
118
  return awaitOrFallback(raw);
119
119
  }
@@ -154,11 +154,12 @@ export async function normalizeLicense(raw) {
154
154
  if (!isRecord(ast)) {
155
155
  return JSON.stringify(ast);
156
156
  }
157
- if (ast.license) {
158
- return String(ast.license);
157
+ const astRecord = ast;
158
+ if (astRecord.license) {
159
+ return astRecord.license;
159
160
  }
160
- if (ast.left !== null && ast.right !== null && ast.conjunction) {
161
- return `${astToExpression(ast.left)} ${String(ast.conjunction).toUpperCase()} ${astToExpression(ast.right)}`;
161
+ if (astRecord.left !== null && astRecord.right !== null && astRecord.conjunction) {
162
+ return `${astToExpression(astRecord.left)} ${astRecord.conjunction.toUpperCase()} ${astToExpression(astRecord.right)}`;
162
163
  }
163
164
  return JSON.stringify(ast);
164
165
  }
@@ -8,15 +8,235 @@ import { existsSync } from 'node:fs';
8
8
  import { join, resolve as resolvePath } from 'node:path';
9
9
  import { pathToFileURL } from 'node:url';
10
10
  // Mapeamento de aliases baseado no tsconfig.json
11
- const aliases = {};
12
- export async function resolve(specifier, context, nextResolve) {
11
+ const aliases = {
12
+ "@": "./src/types/index",
13
+ "@analysts/architects": "./src/analysts/architects/index",
14
+ "@analysts/azure-pipelines": "./src/analysts/azure-pipelines/index",
15
+ "@analysts/azure-pipelines/analysts": "./src/analysts/azure-pipelines/analysts/index",
16
+ "@analysts/azure-pipelines/corrections": "./src/analysts/azure-pipelines/corrections/index",
17
+ "@analysts/azure-pipelines/detectors": "./src/analysts/azure-pipelines/detectors/index",
18
+ "@analysts/azure-pipelines/reports": "./src/analysts/azure-pipelines/reports/index",
19
+ "@analysts/azure-pipelines/scorers": "./src/analysts/azure-pipelines/scorers/index",
20
+ "@analysts/circleci": "./src/analysts/circleci/index",
21
+ "@analysts/circleci/analysts": "./src/analysts/circleci/analysts/index",
22
+ "@analysts/circleci/corrections": "./src/analysts/circleci/corrections/index",
23
+ "@analysts/circleci/detectors": "./src/analysts/circleci/detectors/index",
24
+ "@analysts/circleci/reports": "./src/analysts/circleci/reports/index",
25
+ "@analysts/circleci/scorers": "./src/analysts/circleci/scorers/index",
26
+ "@analysts/converters": "./src/analysts/converters/index",
27
+ "@analysts/converters/engines": "./src/analysts/converters/engines/index",
28
+ "@analysts/corrections": "./src/analysts/corrections/index",
29
+ "@analysts/corrections/quick-fixes": "./src/analysts/corrections/quick-fixes/index",
30
+ "@analysts/corrections/type-safety": "./src/analysts/corrections/type-safety/index",
31
+ "@analysts/css": "./src/analysts/css/index",
32
+ "@analysts/css-in-js": "./src/analysts/css-in-js/index",
33
+ "@analysts/css-in-js/analysts": "./src/analysts/css-in-js/analysts/index",
34
+ "@analysts/css-in-js/corrections": "./src/analysts/css-in-js/corrections/index",
35
+ "@analysts/css-in-js/detectors": "./src/analysts/css-in-js/detectors/index",
36
+ "@analysts/css-in-js/plugins": "./src/analysts/css-in-js/plugins/index",
37
+ "@analysts/css-in-js/scorers": "./src/analysts/css-in-js/scorers/index",
38
+ "@analysts/css/analysts": "./src/analysts/css/analysts/index",
39
+ "@analysts/css/corrections": "./src/analysts/css/corrections/index",
40
+ "@analysts/css/detectors": "./src/analysts/css/detectors/index",
41
+ "@analysts/css/plugins": "./src/analysts/css/plugins/index",
42
+ "@analysts/css/scorers": "./src/analysts/css/scorers/index",
43
+ "@analysts/detectors": "./src/analysts/detectors/index",
44
+ "@analysts/github-actions": "./src/analysts/github-actions/index",
45
+ "@analysts/github-actions/analysts": "./src/analysts/github-actions/analysts/index",
46
+ "@analysts/github-actions/corrections": "./src/analysts/github-actions/corrections/index",
47
+ "@analysts/github-actions/detectors": "./src/analysts/github-actions/detectors/index",
48
+ "@analysts/github-actions/reports": "./src/analysts/github-actions/reports/index",
49
+ "@analysts/github-actions/scorers": "./src/analysts/github-actions/scorers/index",
50
+ "@analysts/gitlab-ci": "./src/analysts/gitlab-ci/index",
51
+ "@analysts/gitlab-ci/analysts": "./src/analysts/gitlab-ci/analysts/index",
52
+ "@analysts/gitlab-ci/corrections": "./src/analysts/gitlab-ci/corrections/index",
53
+ "@analysts/gitlab-ci/detectors": "./src/analysts/gitlab-ci/detectors/index",
54
+ "@analysts/gitlab-ci/reports": "./src/analysts/gitlab-ci/reports/index",
55
+ "@analysts/gitlab-ci/scorers": "./src/analysts/gitlab-ci/scorers/index",
56
+ "@analysts/go": "./src/analysts/go/index",
57
+ "@analysts/go/analysts": "./src/analysts/go/analysts/index",
58
+ "@analysts/go/detectors": "./src/analysts/go/detectors/index",
59
+ "@analysts/html": "./src/analysts/html/index",
60
+ "@analysts/html/analysts": "./src/analysts/html/analysts/index",
61
+ "@analysts/html/corrections": "./src/analysts/html/corrections/index",
62
+ "@analysts/html/detectors": "./src/analysts/html/detectors/index",
63
+ "@analysts/html/scorers": "./src/analysts/html/scorers/index",
64
+ "@analysts/jenkins": "./src/analysts/jenkins/index",
65
+ "@analysts/jenkins/analysts": "./src/analysts/jenkins/analysts/index",
66
+ "@analysts/jenkins/corrections": "./src/analysts/jenkins/corrections/index",
67
+ "@analysts/jenkins/detectors": "./src/analysts/jenkins/detectors/index",
68
+ "@analysts/jenkins/reports": "./src/analysts/jenkins/reports/index",
69
+ "@analysts/jenkins/scorers": "./src/analysts/jenkins/scorers/index",
70
+ "@analysts/js-ts": "./src/analysts/js-ts/index",
71
+ "@analysts/js-ts/analysts": "./src/analysts/js-ts/analysts/index",
72
+ "@analysts/js-ts/detectors": "./src/analysts/js-ts/detectors/index",
73
+ "@analysts/php": "./src/analysts/php/index",
74
+ "@analysts/php/analysts": "./src/analysts/php/analysts/index",
75
+ "@analysts/php/detectors": "./src/analysts/php/detectors/index",
76
+ "@analysts/plugins": "./src/analysts/plugins/index",
77
+ "@analysts/python": "./src/analysts/python/index",
78
+ "@analysts/python/analysts": "./src/analysts/python/analysts/index",
79
+ "@analysts/python/corrections": "./src/analysts/python/corrections/index",
80
+ "@analysts/python/detectors": "./src/analysts/python/detectors/index",
81
+ "@analysts/python/scorers": "./src/analysts/python/scorers/index",
82
+ "@analysts/react": "./src/analysts/react/index",
83
+ "@analysts/react/analysts": "./src/analysts/react/analysts/index",
84
+ "@analysts/react/corrections": "./src/analysts/react/corrections/index",
85
+ "@analysts/react/detectors": "./src/analysts/react/detectors/index",
86
+ "@analysts/react/scorers": "./src/analysts/react/scorers/index",
87
+ "@analysts/registry": "./src/analysts/registry/index",
88
+ "@analysts/rust": "./src/analysts/rust/index",
89
+ "@analysts/rust/analysts": "./src/analysts/rust/analysts/index",
90
+ "@analysts/rust/detectors": "./src/analysts/rust/detectors/index",
91
+ "@analysts/scorers": "./src/analysts/scorers/index",
92
+ "@analysts/shell": "./src/analysts/shell/index",
93
+ "@analysts/shell/analysts": "./src/analysts/shell/analysts/index",
94
+ "@analysts/shell/corrections": "./src/analysts/shell/corrections/index",
95
+ "@analysts/shell/detectors": "./src/analysts/shell/detectors/index",
96
+ "@analysts/shell/scorers": "./src/analysts/shell/scorers/index",
97
+ "@analysts/sql": "./src/analysts/sql/index",
98
+ "@analysts/sql/analysts": "./src/analysts/sql/analysts/index",
99
+ "@analysts/sql/corrections": "./src/analysts/sql/corrections/index",
100
+ "@analysts/sql/detectors": "./src/analysts/sql/detectors/index",
101
+ "@analysts/sql/scorers": "./src/analysts/sql/scorers/index",
102
+ "@analysts/strategists": "./src/analysts/strategists/index",
103
+ "@analysts/svg": "./src/analysts/svg/index",
104
+ "@analysts/svg/analysts": "./src/analysts/svg/analysts/index",
105
+ "@analysts/svg/corrections": "./src/analysts/svg/corrections/index",
106
+ "@analysts/svg/detectors": "./src/analysts/svg/detectors/index",
107
+ "@analysts/svg/scorers": "./src/analysts/svg/scorers/index",
108
+ "@analysts/tailwind": "./src/analysts/tailwind/index",
109
+ "@analysts/tailwind/analysts": "./src/analysts/tailwind/analysts/index",
110
+ "@analysts/tailwind/corrections": "./src/analysts/tailwind/corrections/index",
111
+ "@analysts/tailwind/detectors": "./src/analysts/tailwind/detectors/index",
112
+ "@analysts/tailwind/plugins": "./src/analysts/tailwind/plugins/index",
113
+ "@analysts/tailwind/scorers": "./src/analysts/tailwind/scorers/index",
114
+ "@analysts/xml": "./src/analysts/xml/index",
115
+ "@analysts/xml/analysts": "./src/analysts/xml/analysts/index",
116
+ "@analysts/xml/corrections": "./src/analysts/xml/corrections/index",
117
+ "@analysts/xml/detectors": "./src/analysts/xml/detectors/index",
118
+ "@analysts/xml/scorers": "./src/analysts/xml/scorers/index",
119
+ "@app": "./src/app/index",
120
+ "@app/github": "./src/app/github",
121
+ "@caretakers": "./src/caretakers/index",
122
+ "@cli": "./src/cli/index",
123
+ "@cli/commands": "./src/cli/commands/index",
124
+ "@cli/diagnostic": "./src/cli/diagnostic/index",
125
+ "@cli/diagnostic/exporters": "./src/cli/diagnostic/exporters/index",
126
+ "@cli/diagnostic/handlers": "./src/cli/diagnostic/handlers/index",
127
+ "@cli/handlers": "./src/cli/handlers/index",
128
+ "@cli/helpers": "./src/cli/helpers/index",
129
+ "@cli/options": "./src/cli/options/index",
130
+ "@core": "./src/core/index",
131
+ "@core/config": "./src/core/config/index",
132
+ "@core/config/auto": "./src/core/config/auto/index",
133
+ "@core/corrections": "./src/core/corrections/index",
134
+ "@core/execution": "./src/core/execution/index",
135
+ "@core/formatters": "./src/core/formatters/index",
136
+ "@core/messages": "./src/core/messages/index",
137
+ "@core/messages/en": "./src/core/messages/en/index",
138
+ "@core/messages/en/analysts": "./src/core/messages/en/analysts/index",
139
+ "@core/messages/en/caretakers": "./src/core/messages/en/caretakers/index",
140
+ "@core/messages/en/cli": "./src/core/messages/en/cli/index",
141
+ "@core/messages/en/core": "./src/core/messages/en/core/index",
142
+ "@core/messages/en/github": "./src/core/messages/en/github/index",
143
+ "@core/messages/en/guardian": "./src/core/messages/en/guardian/index",
144
+ "@core/messages/en/licenses": "./src/core/messages/en/licenses/index",
145
+ "@core/messages/en/log": "./src/core/messages/en/log/index",
146
+ "@core/messages/en/reports": "./src/core/messages/en/reports/index",
147
+ "@core/messages/en/shared": "./src/core/messages/en/shared/index",
148
+ "@core/messages/en/ui": "./src/core/messages/en/ui/index",
149
+ "@core/messages/ja": "./src/core/messages/ja/index",
150
+ "@core/messages/ja/analysts": "./src/core/messages/ja/analysts/index",
151
+ "@core/messages/ja/caretakers": "./src/core/messages/ja/caretakers/index",
152
+ "@core/messages/ja/cli": "./src/core/messages/ja/cli/index",
153
+ "@core/messages/ja/core": "./src/core/messages/ja/core/index",
154
+ "@core/messages/ja/github": "./src/core/messages/ja/github/index",
155
+ "@core/messages/ja/guardian": "./src/core/messages/ja/guardian/index",
156
+ "@core/messages/ja/licenses": "./src/core/messages/ja/licenses/index",
157
+ "@core/messages/ja/log": "./src/core/messages/ja/log/index",
158
+ "@core/messages/ja/reports": "./src/core/messages/ja/reports/index",
159
+ "@core/messages/ja/shared": "./src/core/messages/ja/shared/index",
160
+ "@core/messages/ja/ui": "./src/core/messages/ja/ui/index",
161
+ "@core/messages/pt": "./src/core/messages/pt/index",
162
+ "@core/messages/pt/analysts": "./src/core/messages/pt/analysts/index",
163
+ "@core/messages/pt/caretakers": "./src/core/messages/pt/caretakers/index",
164
+ "@core/messages/pt/cli": "./src/core/messages/pt/cli/index",
165
+ "@core/messages/pt/core": "./src/core/messages/pt/core/index",
166
+ "@core/messages/pt/github": "./src/core/messages/pt/github/index",
167
+ "@core/messages/pt/guardian": "./src/core/messages/pt/guardian/index",
168
+ "@core/messages/pt/licenses": "./src/core/messages/pt/licenses/index",
169
+ "@core/messages/pt/log": "./src/core/messages/pt/log/index",
170
+ "@core/messages/pt/reports": "./src/core/messages/pt/reports/index",
171
+ "@core/messages/pt/shared": "./src/core/messages/pt/shared/index",
172
+ "@core/messages/pt/ui": "./src/core/messages/pt/ui/index",
173
+ "@core/messages/shared": "./src/core/messages/shared/index",
174
+ "@core/messages/zh": "./src/core/messages/zh/index",
175
+ "@core/messages/zh/analysts": "./src/core/messages/zh/analysts/index",
176
+ "@core/messages/zh/caretakers": "./src/core/messages/zh/caretakers/index",
177
+ "@core/messages/zh/cli": "./src/core/messages/zh/cli/index",
178
+ "@core/messages/zh/core": "./src/core/messages/zh/core/index",
179
+ "@core/messages/zh/github": "./src/core/messages/zh/github/index",
180
+ "@core/messages/zh/guardian": "./src/core/messages/zh/guardian/index",
181
+ "@core/messages/zh/licenses": "./src/core/messages/zh/licenses/index",
182
+ "@core/messages/zh/log": "./src/core/messages/zh/log/index",
183
+ "@core/messages/zh/reports": "./src/core/messages/zh/reports/index",
184
+ "@core/messages/zh/shared": "./src/core/messages/zh/shared/index",
185
+ "@core/messages/zh/ui": "./src/core/messages/zh/ui/index",
186
+ "@core/parsing": "./src/core/parsing/index",
187
+ "@core/parsing/langs": "./src/core/parsing/langs/index",
188
+ "@core/registry": "./src/core/registry/index",
189
+ "@core/reporting": "./src/core/reporting/index",
190
+ "@core/runtime": "./src/core/runtime/index",
191
+ "@core/schema": "./src/core/schema/index",
192
+ "@core/utils": "./src/core/utils/index",
193
+ "@core/workers": "./src/core/workers/index",
194
+ "@guardian": "./src/guardian/index",
195
+ "@licenses": "./src/licenses/index",
196
+ "@reports": "./src/reports/index",
197
+ "@reports/compliance": "./src/reports/compliance/index",
198
+ "@scripts": "./src/scripts/index",
199
+ "@sdk": "./src/sdk/index",
200
+ "@shared": "./src/shared/index",
201
+ "@shared/data-processing": "./src/shared/data-processing/index",
202
+ "@shared/formatters": "./src/shared/formatters/index",
203
+ "@shared/formatters/core": "./src/shared/formatters/core/index",
204
+ "@shared/formatters/engines": "./src/shared/formatters/engines/index",
205
+ "@shared/formatters/formatters": "./src/shared/formatters/formatters/index",
206
+ "@shared/helpers": "./src/shared/helpers/index",
207
+ "@shared/marketplace": "./src/shared/marketplace/index",
208
+ "@shared/persistence": "./src/shared/persistence/index",
209
+ "@shared/plugins": "./src/shared/plugins/index",
210
+ "@shared/validation": "./src/shared/validation/index",
211
+ "@types": "./src/types/index",
212
+ "@types/analysts": "./src/types/analysts/index",
213
+ "@types/analysts/corrections": "./src/types/analysts/corrections/index",
214
+ "@types/caretakers": "./src/types/caretakers/index",
215
+ "@types/common": "./src/types/common/index",
216
+ "@types/core": "./src/types/core/index",
217
+ "@types/core/config": "./src/types/core/config/index",
218
+ "@types/core/execution": "./src/types/core/execution/index",
219
+ "@types/core/messages": "./src/types/core/messages/index",
220
+ "@types/core/parsing": "./src/types/core/parsing/index",
221
+ "@types/guardian": "./src/types/guardian/index",
222
+ "@types/licenses": "./src/types/licenses/index",
223
+ "@types/processing": "./src/types/processing/index",
224
+ "@types/project": "./src/types/project/index",
225
+ "@types/scripts": "./src/types/scripts/index",
226
+ "@types/sdk": "./src/types/sdk/index",
227
+ "@types/shared": "./src/types/shared/index",
228
+ "@types/structure": "./src/types/structure/index",
229
+ "@types/vulnerabilities": "./src/types/vulnerabilities/index",
230
+ "@vulnerabilities": "./src/vulnerabilities/index",
231
+ };
232
+ export function resolve(specifier, context, nextResolve) {
13
233
  // Se não é um alias, passa para o próximo resolver
14
234
  if (!specifier.startsWith('@')) {
15
235
  return nextResolve(specifier, context);
16
236
  }
17
237
  // Procura pelo alias correspondente (ordena por tamanho decrescente para priorizar match mais específico)
18
238
  let resolved = null;
19
- const sortedAliases = Object.entries(aliases).sort((arquivo, base) => base[0].length - arquivo[0].length);
239
+ const sortedAliases = Object.entries(aliases).sort((a, b) => b[0].length - a[0].length);
20
240
  for (const [prefix, replacement] of sortedAliases) {
21
241
  const isExactMatch = specifier === prefix;
22
242
  const isPrefixMatch = prefix.endsWith('/') && specifier.startsWith(prefix);
@@ -60,7 +280,7 @@ export async function resolve(specifier, context, nextResolve) {
60
280
  if (!existsSync(fullPath)) {
61
281
  let found = false;
62
282
  // Se já tem uma das extensões, tenta removê-la e testar as outras
63
- const currentExt = extensions.find(ext => fullPath.endsWith(ext));
283
+ const currentExt = extensions?.find(ext => fullPath.endsWith(ext));
64
284
  const pathSemExt = currentExt ? fullPath.slice(0, -currentExt.length) : fullPath;
65
285
  for (const ext of extensions) {
66
286
  const testPath = pathSemExt + ext;
@@ -85,7 +85,7 @@ export function analisarAsyncPatterns(ocorrencias, options = {}) {
85
85
  const arquivosOrdenados = Array.from(porArquivo.entries()).map(([arquivo, info]) => ({
86
86
  arquivo,
87
87
  total: info.total,
88
- nivel: (info.nivel || 'info')
88
+ nivel: info.nivel
89
89
  })).sort((arquivo, base) => base.total - arquivo.total);
90
90
  // Top arquivos
91
91
  log.info(RelatorioAsyncPatternsMensagens.topArquivos.replace('{total}', String(Math.min(topN, arquivosOrdenados.length))));
@@ -130,10 +130,7 @@ function agruparOcorrencias(ocorrencias) {
130
130
  function converterGruposEmProblemas(gruposPorTipo, gruposPorMensagem) {
131
131
  const problemasAgrupados = [];
132
132
  for (const [tipo, ocorrenciasTipo] of gruposPorTipo) {
133
- const config = PRIORIDADES[tipo] || {
134
- prioridade: 'baixa',
135
- icone: '??'
136
- };
133
+ const config = PRIORIDADES[tipo];
137
134
  const jaAgrupado = Array.from(gruposPorMensagem.keys()).some(categoria => {
138
135
  const ocorrenciasGrupo = gruposPorMensagem.get(categoria) ?? [];
139
136
  return ocorrenciasGrupo.some(ocorrencia => ocorrencia.tipo === tipo);
@@ -205,7 +202,7 @@ function gerarResumoOcorrencias(ocorrencias) {
205
202
  for (const nivel of ocorrencias.map(ocorrencia => ocorrencia.nivel).filter((nivel) => Boolean(nivel))) {
206
203
  niveisFrequentes[nivel] = (niveisFrequentes[nivel] || 0) + 1;
207
204
  }
208
- const nivelMaisFrequente = Object.entries(niveisFrequentes).sort(([, arquivo], [, base]) => (base ?? 0) - (arquivo ?? 0))[0]?.[0];
205
+ const nivelMaisFrequente = Object.entries(niveisFrequentes).sort(([, arquivo], [, base]) => base - arquivo)[0]?.[0];
209
206
  let resumo = `${ocorrencias.length} ocorrências`;
210
207
  if (arquivos.size > 1) {
211
208
  resumo += ` em ${arquivos.size} arquivos`;
@@ -3,7 +3,7 @@
3
3
  import { getMessages } from '../core/messages/index.js';
4
4
  export async function gerarRelatorioMarkdown(resultado, outputCaminho, modoBrief = false, options) {
5
5
  const { gerarHeaderRelatorio, gerarSecaoGuardian, gerarTabelaOcorrencias, gerarTabelaResumoTipos, RelatorioMensagens } = getMessages();
6
- const { totalArquivos, ocorrencias, guardian, timestamp, duracaoMs } = (resultado || {});
6
+ const { totalArquivos, ocorrencias, guardian, timestamp, duracaoMs } = resultado;
7
7
  const dataISO = new Date(timestamp).toISOString();
8
8
  // Se modo brief, usar filtro inteligente
9
9
  if (modoBrief) {
@@ -13,8 +13,8 @@ export async function gerarRelatorioMarkdown(resultado, outputCaminho, modoBrief
13
13
  return;
14
14
  }
15
15
  const ocorrenciasOrdenadas = [...ocorrencias].sort((arquivo, base) => {
16
- const ra = (arquivo.relPath ?? '');
17
- const rb = (base.relPath ?? '');
16
+ const ra = arquivo.relPath;
17
+ const rb = base.relPath;
18
18
  const cmp = ra.localeCompare(rb);
19
19
  if (cmp !== 0) {
20
20
  return cmp;
@@ -25,9 +25,9 @@ export async function gerarRelatorioMarkdown(resultado, outputCaminho, modoBrief
25
25
  });
26
26
  // Extrair dados do Guardian
27
27
  const guardianData = guardian && typeof guardian === 'object' ? {
28
- status: 'status' in guardian ? String(guardian.status) : 'não executada',
29
- timestamp: 'timestamp' in guardian ? String(guardian.timestamp) : '-',
30
- totalArquivos: 'totalArquivos' in guardian ? String(guardian.totalArquivos) : '-'
28
+ status: 'status' in guardian ? guardian.status : 'não executada',
29
+ timestamp: 'timestamp' in guardian ? guardian.timestamp : '-',
30
+ totalArquivos: 'totalArquivos' in guardian ? guardian.totalArquivos : '-'
31
31
  } : {
32
32
  status: 'não executada',
33
33
  timestamp: '-',
@@ -81,5 +81,5 @@ export async function gerarRelatorioJson(resultado, outputCaminho) {
81
81
  // Criar relatório versionado (mantemos metadados, mas salvamos os dados brutos para compatibilidade)
82
82
  const relatorioVersionado = criarRelatorioComVersao(resultado, undefined, 'Relatório completo de diagnóstico do Mahoraga');
83
83
  const { salvarEstado } = await import('../shared/persistence/index.js');
84
- await salvarEstado(outputCaminho, relatorioVersionado.dados ?? resultado);
84
+ await salvarEstado(outputCaminho, relatorioVersionado.dados);
85
85
  }
@@ -16,9 +16,9 @@ export async function exportarRelatorioArquetiposMarkdown(destino, candidatos, c
16
16
  for (const elem of candidatos) {
17
17
  if (!detalhado) {
18
18
  // Relatório compacto
19
- const missing = elem.missingRequired.slice(0, 3) || [];
20
- const forbidden = elem.forbiddenPresent.slice(0, 3) || [];
21
- const dependFalt = elem.dependencyMatches.length === 0 && elem.dependencyMatches !== undefined ? elem.dependencyMatches : [];
19
+ const missing = elem.missingRequired.slice(0, 3);
20
+ const forbidden = elem.forbiddenPresent.slice(0, 3);
21
+ const dependFalt = elem.dependencyMatches.length === 0 ? elem.dependencyMatches : [];
22
22
  let resumo = '';
23
23
  if (missing.length) {
24
24
  resumo += `Faltam pastas: ${missing.join(', ')}. `;
@@ -73,8 +73,8 @@ async function escreverSecaoDetalhadaArquetipo(linhas, elem) {
73
73
  linhas.push('Sugestão de comandos:');
74
74
  elem.missingRequired.forEach(caminho => linhas.push(` mkdir ${caminho}`));
75
75
  }
76
- if (elem.dependencyMatches && Array.isArray(elem.dependencyMatches)) {
77
- const ausentes = elem.dependencyMatches.length === 0 && elem.dependencyMatches !== undefined ? elem.dependencyMatches : [];
76
+ if (Array.isArray(elem.dependencyMatches)) {
77
+ const ausentes = elem.dependencyMatches.length === 0 ? elem.dependencyMatches : [];
78
78
  if (ausentes.length) {
79
79
  linhas.push('Sugestão de comandos para dependências:');
80
80
  ausentes.forEach(dep => linhas.push(` npm install ${dep}`));
@@ -122,7 +122,7 @@ async function analisarDependenciasPackageJson(linhas) {
122
122
  return;
123
123
  }
124
124
  const pkg = JSON.parse(raw);
125
- if (!pkg || typeof pkg !== 'object' || !pkg.dependencies) {
125
+ if (typeof pkg !== 'object' || !pkg.dependencies) {
126
126
  return;
127
127
  }
128
128
  const deps = pkg.dependencies;
@@ -167,9 +167,9 @@ export async function exportarRelatorioArquetiposJson(destino, candidatos, conte
167
167
  candidatos: candidatos.map(elem => {
168
168
  if (!detalhado) {
169
169
  // Compacto
170
- const missing = elem.missingRequired.slice(0, 3) || [];
171
- const forbidden = elem.forbiddenPresent.slice(0, 3) || [];
172
- const dependFalt = elem.dependencyMatches.length === 0 && elem.dependencyMatches !== undefined ? elem.dependencyMatches : [];
170
+ const missing = elem.missingRequired.slice(0, 3);
171
+ const forbidden = elem.forbiddenPresent.slice(0, 3);
172
+ const dependFalt = elem.dependencyMatches.length === 0 ? elem.dependencyMatches : [];
173
173
  let resumo = '';
174
174
  if (missing.length) {
175
175
  resumo += `Faltam pastas: ${missing.join(', ')}. `;
@@ -194,7 +194,7 @@ export async function exportarRelatorioArquetiposJson(destino, candidatos, conte
194
194
  score: elem.score,
195
195
  explicacao,
196
196
  resumo,
197
- matchedRequired: elem.matchedRequired.slice(0, 3) || [],
197
+ matchedRequired: elem.matchedRequired.slice(0, 3),
198
198
  missingRequired: missing,
199
199
  forbiddenPresent: forbidden,
200
200
  descricao: elem.descricao
@@ -108,7 +108,8 @@ function exibirTabelaSimples(totalOcorrencias, arquivosAfetados, maiorPorArquivo
108
108
  log.info('');
109
109
  }
110
110
  function exibirModoVerboso(porArquivo) {
111
- const logInfoRaw = (log.infoSemSanitizar || log.info).bind(log);
111
+ const logAny = log;
112
+ const logInfoRaw = (logAny.infoSemSanitizar ?? logAny.info).bind(log);
112
113
  const titulo = chalk.bold(RelatorioMensagens.saude.secoes.funcoesLongas.titulo);
113
114
  log.info(titulo);
114
115
  const colLeft = 50;
@@ -10,7 +10,7 @@ export function exibirRelatorioPadroesUso() {
10
10
  const titulo = 'Padrões de Uso do Código';
11
11
  const linhas = [];
12
12
  const logComBloco = log;
13
- const largura = logComBloco.calcularLargura ? logComBloco.calcularLargura(titulo, linhas, 84) : undefined;
13
+ const largura = logComBloco.calcularLargura(titulo, linhas, 84);
14
14
  logComBloco.imprimirBloco(titulo, linhas, (string) => string, typeof largura === 'number' ? largura : 84);
15
15
  }
16
16
  // Rodapé compatível com testes
@@ -81,7 +81,7 @@ export async function analyzeProject(projectDir, opts) {
81
81
  const tecnicas = await carregarTecnicas();
82
82
  const resultadoExecucao = await executarInquisicao(filteredEntries, tecnicas, projectDir, null, { verbose: false, compact: true, fast: opts?.fast });
83
83
  return {
84
- ocorrencias: resultadoExecucao.ocorrencias || [],
84
+ ocorrencias: resultadoExecucao.ocorrencias,
85
85
  totalArquivos: entries.length,
86
86
  tempoMs: performance.now() - inicio,
87
87
  };
@@ -11,14 +11,14 @@ function chunkArray(arr, size) {
11
11
  return out;
12
12
  }
13
13
  export async function fragmentarRelatorio(relatorioFull, dir, ts, options) {
14
- const maxOcorrencias = options?.maxOcorrenciasPerShard ?? config.REPORT_FRAGMENT_OCCURRENCES ?? 2000;
15
- const maxArquivoEntries = options?.maxFileEntriesPerShard ?? config.REPORT_FRAGMENT_FILEENTRIES ?? 500;
16
- const topN = config.REPORT_FRAGMENT_SUMMARY_TOPN ?? 5;
14
+ const maxOcorrencias = options?.maxOcorrenciasPerShard ?? config.REPORT_FRAGMENT_OCCURRENCES;
15
+ const maxArquivoEntries = options?.maxFileEntriesPerShard ?? config.REPORT_FRAGMENT_FILEENTRIES;
16
+ const topN = config.REPORT_FRAGMENT_SUMMARY_TOPN;
17
17
  // Normaliza a estrutura esperada
18
18
  const rel = relatorioFull;
19
- const resultado = rel && 'resultado' in rel ? rel.resultado : rel;
20
- const ocorrencias = resultado && Array.isArray((resultado).ocorrencias) ? (resultado).ocorrencias : [];
21
- const fileEntries = resultado && Array.isArray((resultado).fileEntries) ? (resultado).fileEntries : [];
19
+ const resultado = 'resultado' in rel ? rel.resultado : rel;
20
+ const ocorrencias = Array.isArray((resultado).ocorrencias) ? (resultado).ocorrencias : [];
21
+ const fileEntries = Array.isArray((resultado).fileEntries) ? (resultado).fileEntries : [];
22
22
  const salvar = salvarEstado;
23
23
  // Manifest que descreve as partes geradas
24
24
  const manifest = {
@@ -67,9 +67,9 @@ export async function fragmentarRelatorio(relatorioFull, dir, ts, options) {
67
67
  for (const ocorrencia of occPedacos[indice]) {
68
68
  // Suporta formatos legados com 'type' e 'path' para compatibilidade
69
69
  const oLegacy = ocorrencia;
70
- const tipoOcorrencia = ocorrencia && (ocorrencia.tipo || oLegacy.type) ? String(ocorrencia.tipo ?? oLegacy.type) : 'desconhecido';
70
+ const tipoOcorrencia = ocorrencia.tipo ?? oLegacy.type ?? 'desconhecido';
71
71
  tiposContagem[tipoOcorrencia] = (tiposContagem[tipoOcorrencia] || 0) + 1;
72
- const relp = ocorrencia && (ocorrencia.relPath || oLegacy.path) ? (ocorrencia.relPath ?? oLegacy.path) : 'desconhecido';
72
+ const relp = ocorrencia.relPath ?? oLegacy.path ?? 'desconhecido';
73
73
  arquivosContagem[relp] = (arquivosContagem[relp] || 0) + 1;
74
74
  }
75
75
  const topTipos = Object.entries(tiposContagem).sort((arquivo, base) => base[1] - arquivo[1]).slice(0, topN).map(([chave, valor]) => ({
@@ -116,14 +116,14 @@ export async function fragmentarRelatorio(relatorioFull, dir, ts, options) {
116
116
  for (const fe of fePedacos[indice]) {
117
117
  // Suporta formato legado com 'path' para compatibilidade
118
118
  const feLegacy = fe;
119
- const rel = fe && (fe.relPath || fe.fullCaminho || feLegacy.path) ? String(fe.relPath ?? fe.fullCaminho ?? feLegacy.path) : 'desconhecido';
119
+ const rel = fe.relPath ?? fe.fullCaminho ?? feLegacy.path ?? 'desconhecido';
120
120
  let linhas = undefined;
121
121
  try {
122
- if (fe && typeof fe.content === 'string') {
122
+ if (typeof fe.content === 'string') {
123
123
  linhas = fe.content.split(/\r?\n/).length;
124
124
  }
125
125
  }
126
- catch { }
126
+ catch { /* ignore */ }
127
127
  arquivosResumo.push({
128
128
  arquivo: rel,
129
129
  linhas
@@ -24,7 +24,7 @@ export function escapeNonAscii(string) {
24
24
  let out = '';
25
25
  for (const ch of string) {
26
26
  const cp = ch.codePointAt(0);
27
- if (cp === undefined || cp === null || cp <= ASCII_MAX) {
27
+ if (cp === undefined || cp <= ASCII_MAX) {
28
28
  out += ch;
29
29
  }
30
30
  else if (cp <= BMP_MAX) {