@yalehwang/archguard 0.1.32 → 0.1.33

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 (342) hide show
  1. package/dist/analysis/gim/direction-hint.d.ts.map +1 -1
  2. package/dist/analysis/gim/direction-hint.js +15 -5
  3. package/dist/analysis/gim/direction-hint.js.map +1 -1
  4. package/dist/analysis/gim/gim-loss-evaluator.d.ts.map +1 -1
  5. package/dist/analysis/gim/gim-loss-evaluator.js +12 -6
  6. package/dist/analysis/gim/gim-loss-evaluator.js.map +1 -1
  7. package/dist/analysis/jl/adjacency-builder.d.ts +8 -0
  8. package/dist/analysis/jl/adjacency-builder.d.ts.map +1 -0
  9. package/dist/analysis/jl/adjacency-builder.js +65 -0
  10. package/dist/analysis/jl/adjacency-builder.js.map +1 -0
  11. package/dist/analysis/jl/cluster-boundary-analyzer.d.ts +13 -0
  12. package/dist/analysis/jl/cluster-boundary-analyzer.d.ts.map +1 -0
  13. package/dist/analysis/jl/cluster-boundary-analyzer.js +233 -0
  14. package/dist/analysis/jl/cluster-boundary-analyzer.js.map +1 -0
  15. package/dist/analysis/jl/drift-calculator.d.ts +6 -0
  16. package/dist/analysis/jl/drift-calculator.d.ts.map +1 -0
  17. package/dist/analysis/jl/drift-calculator.js +104 -0
  18. package/dist/analysis/jl/drift-calculator.js.map +1 -0
  19. package/dist/analysis/jl/drift-exit-code.d.ts +4 -0
  20. package/dist/analysis/jl/drift-exit-code.d.ts.map +1 -0
  21. package/dist/analysis/jl/drift-exit-code.js +9 -0
  22. package/dist/analysis/jl/drift-exit-code.js.map +1 -0
  23. package/dist/analysis/jl/entity-aligner.d.ts +6 -0
  24. package/dist/analysis/jl/entity-aligner.d.ts.map +1 -0
  25. package/dist/analysis/jl/entity-aligner.js +33 -0
  26. package/dist/analysis/jl/entity-aligner.js.map +1 -0
  27. package/dist/analysis/jl/history-writer.d.ts +7 -0
  28. package/dist/analysis/jl/history-writer.d.ts.map +1 -0
  29. package/dist/analysis/jl/history-writer.js +74 -0
  30. package/dist/analysis/jl/history-writer.js.map +1 -0
  31. package/dist/analysis/jl/intrinsic-dimension.d.ts +14 -0
  32. package/dist/analysis/jl/intrinsic-dimension.d.ts.map +1 -0
  33. package/dist/analysis/jl/intrinsic-dimension.js +80 -0
  34. package/dist/analysis/jl/intrinsic-dimension.js.map +1 -0
  35. package/dist/analysis/jl/jl-projector.d.ts +7 -0
  36. package/dist/analysis/jl/jl-projector.d.ts.map +1 -0
  37. package/dist/analysis/jl/jl-projector.js +52 -0
  38. package/dist/analysis/jl/jl-projector.js.map +1 -0
  39. package/dist/analysis/jl/kmeans.d.ts +11 -0
  40. package/dist/analysis/jl/kmeans.d.ts.map +1 -0
  41. package/dist/analysis/jl/kmeans.js +273 -0
  42. package/dist/analysis/jl/kmeans.js.map +1 -0
  43. package/dist/analysis/jl/types.d.ts +166 -0
  44. package/dist/analysis/jl/types.d.ts.map +1 -0
  45. package/dist/analysis/jl/types.js +19 -0
  46. package/dist/analysis/jl/types.js.map +1 -0
  47. package/dist/analysis/shape-smells/index.d.ts +5 -0
  48. package/dist/analysis/shape-smells/index.d.ts.map +1 -0
  49. package/dist/analysis/shape-smells/index.js +5 -0
  50. package/dist/analysis/shape-smells/index.js.map +1 -0
  51. package/dist/analysis/shape-smells/literal-dispersion.d.ts +9 -0
  52. package/dist/analysis/shape-smells/literal-dispersion.d.ts.map +1 -0
  53. package/dist/analysis/shape-smells/literal-dispersion.js +157 -0
  54. package/dist/analysis/shape-smells/literal-dispersion.js.map +1 -0
  55. package/dist/analysis/shape-smells/persistence.d.ts +5 -0
  56. package/dist/analysis/shape-smells/persistence.d.ts.map +1 -0
  57. package/dist/analysis/shape-smells/persistence.js +59 -0
  58. package/dist/analysis/shape-smells/persistence.js.map +1 -0
  59. package/dist/analysis/shape-smells/scope-filter.d.ts +7 -0
  60. package/dist/analysis/shape-smells/scope-filter.d.ts.map +1 -0
  61. package/dist/analysis/shape-smells/scope-filter.js +28 -0
  62. package/dist/analysis/shape-smells/scope-filter.js.map +1 -0
  63. package/dist/analysis/shape-smells/types.d.ts +40 -0
  64. package/dist/analysis/shape-smells/types.d.ts.map +1 -0
  65. package/dist/analysis/shape-smells/types.js +2 -0
  66. package/dist/analysis/shape-smells/types.js.map +1 -0
  67. package/dist/analysis/snapshot-store.js +2 -2
  68. package/dist/analysis/snapshot-store.js.map +1 -1
  69. package/dist/analysis/test-analyzer.d.ts.map +1 -1
  70. package/dist/analysis/test-analyzer.js +1 -1
  71. package/dist/analysis/test-analyzer.js.map +1 -1
  72. package/dist/cli/analyze/normalize-to-diagrams.d.ts.map +1 -1
  73. package/dist/cli/analyze/normalize-to-diagrams.js +35 -0
  74. package/dist/cli/analyze/normalize-to-diagrams.js.map +1 -1
  75. package/dist/cli/analyze/run-analysis.d.ts +2 -0
  76. package/dist/cli/analyze/run-analysis.d.ts.map +1 -1
  77. package/dist/cli/analyze/run-analysis.js +2 -0
  78. package/dist/cli/analyze/run-analysis.js.map +1 -1
  79. package/dist/cli/cache/cache-manager.js +1 -1
  80. package/dist/cli/cache/cache-manager.js.map +1 -1
  81. package/dist/cli/cognitive/ccb-assembler.js.map +1 -1
  82. package/dist/cli/commands/analyze.d.ts +17 -0
  83. package/dist/cli/commands/analyze.d.ts.map +1 -1
  84. package/dist/cli/commands/analyze.js +129 -2
  85. package/dist/cli/commands/analyze.js.map +1 -1
  86. package/dist/cli/commands/check.js.map +1 -1
  87. package/dist/cli/commands/diff.js +1 -1
  88. package/dist/cli/commands/diff.js.map +1 -1
  89. package/dist/cli/commands/init.js.map +1 -1
  90. package/dist/cli/commands/query.d.ts +3 -0
  91. package/dist/cli/commands/query.d.ts.map +1 -1
  92. package/dist/cli/commands/query.js +128 -0
  93. package/dist/cli/commands/query.js.map +1 -1
  94. package/dist/cli/config-loader.d.ts.map +1 -1
  95. package/dist/cli/config-loader.js +6 -1
  96. package/dist/cli/config-loader.js.map +1 -1
  97. package/dist/cli/index.js.map +1 -1
  98. package/dist/cli/mcp/analyze-tool.js.map +1 -1
  99. package/dist/cli/mcp/mcp-server.d.ts.map +1 -1
  100. package/dist/cli/mcp/mcp-server.js +8 -2
  101. package/dist/cli/mcp/mcp-server.js.map +1 -1
  102. package/dist/cli/mcp/tools/arch-health-tools.d.ts +16 -0
  103. package/dist/cli/mcp/tools/arch-health-tools.d.ts.map +1 -0
  104. package/dist/cli/mcp/tools/arch-health-tools.js +207 -0
  105. package/dist/cli/mcp/tools/arch-health-tools.js.map +1 -0
  106. package/dist/cli/mcp/tools/atlas-analytics-tools.d.ts.map +1 -1
  107. package/dist/cli/mcp/tools/atlas-analytics-tools.js +5 -4
  108. package/dist/cli/mcp/tools/atlas-analytics-tools.js.map +1 -1
  109. package/dist/cli/mcp/tools/gim-tools.d.ts.map +1 -1
  110. package/dist/cli/mcp/tools/gim-tools.js +5 -1
  111. package/dist/cli/mcp/tools/gim-tools.js.map +1 -1
  112. package/dist/cli/mcp/tools/git-history-analyze-tool.d.ts.map +1 -1
  113. package/dist/cli/mcp/tools/git-history-analyze-tool.js.map +1 -1
  114. package/dist/cli/mcp/tools/git-history-evidence-pack-tool.js.map +1 -1
  115. package/dist/cli/mcp/tools/git-history-tools.js.map +1 -1
  116. package/dist/cli/mcp/tools/metric-trend-tools.d.ts.map +1 -1
  117. package/dist/cli/mcp/tools/metric-trend-tools.js +2 -1
  118. package/dist/cli/mcp/tools/metric-trend-tools.js.map +1 -1
  119. package/dist/cli/mcp/tools/package-metrics-tools.d.ts.map +1 -1
  120. package/dist/cli/mcp/tools/package-metrics-tools.js +2 -1
  121. package/dist/cli/mcp/tools/package-metrics-tools.js.map +1 -1
  122. package/dist/cli/mcp/tools/shape-smell-tools.d.ts +3 -0
  123. package/dist/cli/mcp/tools/shape-smell-tools.d.ts.map +1 -0
  124. package/dist/cli/mcp/tools/shape-smell-tools.js +187 -0
  125. package/dist/cli/mcp/tools/shape-smell-tools.js.map +1 -0
  126. package/dist/cli/mcp/tools/test-analysis-tools.d.ts.map +1 -1
  127. package/dist/cli/mcp/tools/test-analysis-tools.js +4 -4
  128. package/dist/cli/mcp/tools/test-analysis-tools.js.map +1 -1
  129. package/dist/cli/processors/arch-json-provider.d.ts.map +1 -1
  130. package/dist/cli/processors/arch-json-provider.js +10 -1
  131. package/dist/cli/processors/arch-json-provider.js.map +1 -1
  132. package/dist/cli/processors/diagram-output-router.d.ts +1 -0
  133. package/dist/cli/processors/diagram-output-router.d.ts.map +1 -1
  134. package/dist/cli/processors/diagram-output-router.js +54 -66
  135. package/dist/cli/processors/diagram-output-router.js.map +1 -1
  136. package/dist/cli/query/engine-loader.d.ts.map +1 -1
  137. package/dist/cli/query/engine-loader.js +3 -3
  138. package/dist/cli/query/engine-loader.js.map +1 -1
  139. package/dist/cli/query/query-artifacts.js +2 -2
  140. package/dist/cli/query/query-artifacts.js.map +1 -1
  141. package/dist/cli/utils/cluster-archjson-loader.d.ts +3 -0
  142. package/dist/cli/utils/cluster-archjson-loader.d.ts.map +1 -0
  143. package/dist/cli/utils/cluster-archjson-loader.js +28 -0
  144. package/dist/cli/utils/cluster-archjson-loader.js.map +1 -0
  145. package/dist/cli/utils/drift-baseline.d.ts +27 -0
  146. package/dist/cli/utils/drift-baseline.d.ts.map +1 -0
  147. package/dist/cli/utils/drift-baseline.js +95 -0
  148. package/dist/cli/utils/drift-baseline.js.map +1 -0
  149. package/dist/cli/utils/drift-reporter.d.ts +3 -0
  150. package/dist/cli/utils/drift-reporter.d.ts.map +1 -0
  151. package/dist/cli/utils/drift-reporter.js +49 -0
  152. package/dist/cli/utils/drift-reporter.js.map +1 -0
  153. package/dist/core/index.d.ts +7 -0
  154. package/dist/core/index.d.ts.map +1 -0
  155. package/dist/core/index.js +4 -0
  156. package/dist/core/index.js.map +1 -0
  157. package/dist/core/interfaces/language-plugin.d.ts +1 -0
  158. package/dist/core/interfaces/language-plugin.d.ts.map +1 -1
  159. package/dist/core/pack-registry/errors.d.ts +5 -0
  160. package/dist/core/pack-registry/errors.d.ts.map +1 -0
  161. package/dist/core/pack-registry/errors.js +9 -0
  162. package/dist/core/pack-registry/errors.js.map +1 -0
  163. package/dist/core/pack-registry/index.d.ts +7 -0
  164. package/dist/core/pack-registry/index.d.ts.map +1 -0
  165. package/dist/core/pack-registry/index.js +4 -0
  166. package/dist/core/pack-registry/index.js.map +1 -0
  167. package/dist/core/pack-registry/knowledge-pack-schema.d.ts +188 -0
  168. package/dist/core/pack-registry/knowledge-pack-schema.d.ts.map +1 -0
  169. package/dist/core/pack-registry/knowledge-pack-schema.js +108 -0
  170. package/dist/core/pack-registry/knowledge-pack-schema.js.map +1 -0
  171. package/dist/core/pack-registry/pack-registry.d.ts +15 -0
  172. package/dist/core/pack-registry/pack-registry.d.ts.map +1 -0
  173. package/dist/core/pack-registry/pack-registry.js +99 -0
  174. package/dist/core/pack-registry/pack-registry.js.map +1 -0
  175. package/dist/core/pack-registry/types.d.ts +87 -0
  176. package/dist/core/pack-registry/types.d.ts.map +1 -0
  177. package/dist/core/pack-registry/types.js +2 -0
  178. package/dist/core/pack-registry/types.js.map +1 -0
  179. package/dist/core/plugin-registry.d.ts +2 -0
  180. package/dist/core/plugin-registry.d.ts.map +1 -1
  181. package/dist/core/plugin-registry.js +15 -2
  182. package/dist/core/plugin-registry.js.map +1 -1
  183. package/dist/core/query/arch-index-builder.js.map +1 -1
  184. package/dist/core/rule-engine/ast-node.d.ts +6 -0
  185. package/dist/core/rule-engine/ast-node.d.ts.map +1 -0
  186. package/dist/core/rule-engine/ast-node.js +15 -0
  187. package/dist/core/rule-engine/ast-node.js.map +1 -0
  188. package/dist/core/rule-engine/index.d.ts +5 -0
  189. package/dist/core/rule-engine/index.d.ts.map +1 -0
  190. package/dist/core/rule-engine/index.js +4 -0
  191. package/dist/core/rule-engine/index.js.map +1 -0
  192. package/dist/core/rule-engine/rule-based-plugin.d.ts +22 -0
  193. package/dist/core/rule-engine/rule-based-plugin.d.ts.map +1 -0
  194. package/dist/core/rule-engine/rule-based-plugin.js +171 -0
  195. package/dist/core/rule-engine/rule-based-plugin.js.map +1 -0
  196. package/dist/core/rule-engine/rule-engine.d.ts +52 -0
  197. package/dist/core/rule-engine/rule-engine.d.ts.map +1 -0
  198. package/dist/core/rule-engine/rule-engine.js +655 -0
  199. package/dist/core/rule-engine/rule-engine.js.map +1 -0
  200. package/dist/mermaid/auto-repair.js +1 -1
  201. package/dist/mermaid/auto-repair.js.map +1 -1
  202. package/dist/mermaid/cpp-package-flowchart-generator.js.map +1 -1
  203. package/dist/mermaid/diagram-generator.d.ts.map +1 -1
  204. package/dist/mermaid/diagram-generator.js +17 -18
  205. package/dist/mermaid/diagram-generator.js.map +1 -1
  206. package/dist/mermaid/generator.d.ts.map +1 -1
  207. package/dist/mermaid/generator.js.map +1 -1
  208. package/dist/mermaid/types.d.ts +25 -1
  209. package/dist/mermaid/types.d.ts.map +1 -1
  210. package/dist/mermaid/validation-pipeline.d.ts +4 -16
  211. package/dist/mermaid/validation-pipeline.d.ts.map +1 -1
  212. package/dist/mermaid/validation-pipeline.js.map +1 -1
  213. package/dist/parser/archjson-aggregator.js +1 -1
  214. package/dist/parser/archjson-aggregator.js.map +1 -1
  215. package/dist/parser/parse-worker.js +2 -1
  216. package/dist/parser/parse-worker.js.map +1 -1
  217. package/dist/parser/typescript-parser.d.ts.map +1 -1
  218. package/dist/parser/typescript-parser.js +3 -2
  219. package/dist/parser/typescript-parser.js.map +1 -1
  220. package/dist/plugins/cpp/builders/class-builder.d.ts +1 -0
  221. package/dist/plugins/cpp/builders/class-builder.d.ts.map +1 -1
  222. package/dist/plugins/cpp/builders/class-builder.js +19 -0
  223. package/dist/plugins/cpp/builders/class-builder.js.map +1 -1
  224. package/dist/plugins/cpp/mappers/class-capture-mapper.d.ts +14 -0
  225. package/dist/plugins/cpp/mappers/class-capture-mapper.d.ts.map +1 -0
  226. package/dist/plugins/cpp/mappers/class-capture-mapper.js +76 -0
  227. package/dist/plugins/cpp/mappers/class-capture-mapper.js.map +1 -0
  228. package/dist/plugins/cpp/mappers/enum-capture-mapper.d.ts +6 -0
  229. package/dist/plugins/cpp/mappers/enum-capture-mapper.d.ts.map +1 -0
  230. package/dist/plugins/cpp/mappers/enum-capture-mapper.js +31 -0
  231. package/dist/plugins/cpp/mappers/enum-capture-mapper.js.map +1 -0
  232. package/dist/plugins/cpp/mappers/field-capture-mapper.d.ts +12 -0
  233. package/dist/plugins/cpp/mappers/field-capture-mapper.d.ts.map +1 -0
  234. package/dist/plugins/cpp/mappers/field-capture-mapper.js +66 -0
  235. package/dist/plugins/cpp/mappers/field-capture-mapper.js.map +1 -0
  236. package/dist/plugins/cpp/mappers/function-capture-mapper.d.ts +6 -0
  237. package/dist/plugins/cpp/mappers/function-capture-mapper.d.ts.map +1 -0
  238. package/dist/plugins/cpp/mappers/function-capture-mapper.js +25 -0
  239. package/dist/plugins/cpp/mappers/function-capture-mapper.js.map +1 -0
  240. package/dist/plugins/cpp/mappers/include-capture-mapper.d.ts +5 -0
  241. package/dist/plugins/cpp/mappers/include-capture-mapper.d.ts.map +1 -0
  242. package/dist/plugins/cpp/mappers/include-capture-mapper.js +10 -0
  243. package/dist/plugins/cpp/mappers/include-capture-mapper.js.map +1 -0
  244. package/dist/plugins/cpp/queries/classes.scm +7 -0
  245. package/dist/plugins/cpp/queries/enums.scm +3 -0
  246. package/dist/plugins/cpp/queries/fields.scm +6 -0
  247. package/dist/plugins/cpp/queries/functions.scm +7 -0
  248. package/dist/plugins/cpp/queries/includes.scm +8 -0
  249. package/dist/plugins/cpp/tree-sitter-bridge.d.ts +5 -12
  250. package/dist/plugins/cpp/tree-sitter-bridge.d.ts.map +1 -1
  251. package/dist/plugins/cpp/tree-sitter-bridge.js +47 -227
  252. package/dist/plugins/cpp/tree-sitter-bridge.js.map +1 -1
  253. package/dist/plugins/golang/atlas/behavior-analyzer.d.ts.map +1 -1
  254. package/dist/plugins/golang/atlas/behavior-analyzer.js.map +1 -1
  255. package/dist/plugins/golang/atlas/builders/flow-graph-builder.js.map +1 -1
  256. package/dist/plugins/golang/atlas/builders/goroutine-topology-builder.js.map +1 -1
  257. package/dist/plugins/golang/atlas/go-mod-resolver.d.ts.map +1 -1
  258. package/dist/plugins/golang/atlas/go-mod-resolver.js +2 -1
  259. package/dist/plugins/golang/atlas/go-mod-resolver.js.map +1 -1
  260. package/dist/plugins/golang/atlas/renderers/capability-mermaid-template.d.ts.map +1 -1
  261. package/dist/plugins/golang/atlas/renderers/capability-mermaid-template.js.map +1 -1
  262. package/dist/plugins/golang/atlas/renderers/flow-mermaid-template.d.ts.map +1 -1
  263. package/dist/plugins/golang/atlas/renderers/flow-mermaid-template.js.map +1 -1
  264. package/dist/plugins/golang/atlas/renderers/goroutine-mermaid-template.d.ts.map +1 -1
  265. package/dist/plugins/golang/atlas/renderers/goroutine-mermaid-template.js.map +1 -1
  266. package/dist/plugins/golang/atlas/renderers/mermaid-templates.d.ts.map +1 -1
  267. package/dist/plugins/golang/atlas/renderers/mermaid-templates.js.map +1 -1
  268. package/dist/plugins/golang/go-atlas-adapter.d.ts +3 -3
  269. package/dist/plugins/golang/go-atlas-adapter.d.ts.map +1 -1
  270. package/dist/plugins/golang/go-atlas-adapter.js +4 -4
  271. package/dist/plugins/golang/go-atlas-adapter.js.map +1 -1
  272. package/dist/plugins/golang/go-parse-coordinator.d.ts.map +1 -1
  273. package/dist/plugins/golang/go-parse-coordinator.js.map +1 -1
  274. package/dist/plugins/golang/gopls-client.d.ts +1 -1
  275. package/dist/plugins/golang/gopls-client.d.ts.map +1 -1
  276. package/dist/plugins/golang/gopls-client.js +17 -9
  277. package/dist/plugins/golang/gopls-client.js.map +1 -1
  278. package/dist/plugins/golang/gopls-interface-resolver.js.map +1 -1
  279. package/dist/plugins/golang/index.d.ts.map +1 -1
  280. package/dist/plugins/golang/index.js +5 -2
  281. package/dist/plugins/golang/index.js.map +1 -1
  282. package/dist/plugins/golang/interface-matcher.d.ts.map +1 -1
  283. package/dist/plugins/golang/interface-matcher.js.map +1 -1
  284. package/dist/plugins/golang/types.d.ts +4 -0
  285. package/dist/plugins/golang/types.d.ts.map +1 -1
  286. package/dist/plugins/java/dependency-extractor.d.ts.map +1 -1
  287. package/dist/plugins/java/dependency-extractor.js.map +1 -1
  288. package/dist/plugins/java/types.d.ts +1 -1
  289. package/dist/plugins/java/types.d.ts.map +1 -1
  290. package/dist/plugins/kotlin/builders/class-builder.js.map +1 -1
  291. package/dist/plugins/kotlin/builders/function-builder.js.map +1 -1
  292. package/dist/plugins/kotlin/index.d.ts +2 -2
  293. package/dist/plugins/kotlin/index.d.ts.map +1 -1
  294. package/dist/plugins/kotlin/index.js.map +1 -1
  295. package/dist/plugins/kotlin/tree-sitter-bridge.js.map +1 -1
  296. package/dist/plugins/python/archjson-mapper.d.ts.map +1 -1
  297. package/dist/plugins/python/archjson-mapper.js.map +1 -1
  298. package/dist/plugins/python/index.d.ts.map +1 -1
  299. package/dist/plugins/python/index.js.map +1 -1
  300. package/dist/plugins/shared/capture-mapper.d.ts +12 -0
  301. package/dist/plugins/shared/capture-mapper.d.ts.map +1 -0
  302. package/dist/plugins/shared/capture-mapper.js +33 -0
  303. package/dist/plugins/shared/capture-mapper.js.map +1 -0
  304. package/dist/plugins/shared/index.d.ts +4 -0
  305. package/dist/plugins/shared/index.d.ts.map +1 -0
  306. package/dist/plugins/shared/index.js +3 -0
  307. package/dist/plugins/shared/index.js.map +1 -0
  308. package/dist/plugins/shared/native-parser-backend.d.ts +2 -1
  309. package/dist/plugins/shared/native-parser-backend.d.ts.map +1 -1
  310. package/dist/plugins/shared/native-parser-backend.js +15 -3
  311. package/dist/plugins/shared/native-parser-backend.js.map +1 -1
  312. package/dist/plugins/shared/parser-backend.d.ts.map +1 -1
  313. package/dist/plugins/shared/parser-backend.js +2 -1
  314. package/dist/plugins/shared/parser-backend.js.map +1 -1
  315. package/dist/plugins/shared/parser-runtime.d.ts.map +1 -1
  316. package/dist/plugins/shared/parser-runtime.js +5 -1
  317. package/dist/plugins/shared/parser-runtime.js.map +1 -1
  318. package/dist/plugins/shared/query-loader.d.ts +14 -0
  319. package/dist/plugins/shared/query-loader.d.ts.map +1 -0
  320. package/dist/plugins/shared/query-loader.js +47 -0
  321. package/dist/plugins/shared/query-loader.js.map +1 -0
  322. package/dist/plugins/shared/syntax-tree.d.ts +13 -0
  323. package/dist/plugins/shared/syntax-tree.d.ts.map +1 -1
  324. package/dist/plugins/shared/wasm-parser-backend.d.ts.map +1 -1
  325. package/dist/plugins/shared/wasm-parser-backend.js +13 -4
  326. package/dist/plugins/shared/wasm-parser-backend.js.map +1 -1
  327. package/dist/plugins/typescript/builders/module-graph-builder.d.ts.map +1 -1
  328. package/dist/plugins/typescript/builders/module-graph-builder.js +1 -3
  329. package/dist/plugins/typescript/builders/module-graph-builder.js.map +1 -1
  330. package/dist/plugins/typescript/index.d.ts.map +1 -1
  331. package/dist/plugins/typescript/index.js +6 -6
  332. package/dist/plugins/typescript/index.js.map +1 -1
  333. package/dist/types/config-cli.d.ts +3 -0
  334. package/dist/types/config-cli.d.ts.map +1 -1
  335. package/dist/types/fitness-rules.d.ts.map +1 -1
  336. package/dist/types/index.d.ts +1 -1
  337. package/dist/types/index.d.ts.map +1 -1
  338. package/dist/utils/error-message.d.ts +2 -0
  339. package/dist/utils/error-message.d.ts.map +1 -0
  340. package/dist/utils/error-message.js +8 -0
  341. package/dist/utils/error-message.js.map +1 -0
  342. package/package.json +6 -3
@@ -0,0 +1,166 @@
1
+ export type ProjectionMode = 'direct' | 'jl';
2
+ export interface JLConfig {
3
+ seed: number;
4
+ epsilon: number;
5
+ directModeThreshold: number;
6
+ }
7
+ export declare const DEFAULT_JL_CONFIG: JLConfig;
8
+ export declare const FEATURE_VERSION = "1.0";
9
+ export declare const HISTORY_SCHEMA_VERSION = 1;
10
+ export declare const MAX_SNAPSHOTS = 500;
11
+ export declare const VARIANCE_THRESHOLD = 0.95;
12
+ export declare const TREND_DELTA_THRESHOLD = 0.002;
13
+ export interface IntrinsicDimensionResult {
14
+ timestamp: string;
15
+ commitSha?: string;
16
+ entityCount: number;
17
+ mode: ProjectionMode;
18
+ featureVersion: string;
19
+ k: number | null;
20
+ dInt: number;
21
+ dIntNormalized: number;
22
+ varianceExplained: number[];
23
+ epsilon: number | null;
24
+ entityIndex?: string[];
25
+ }
26
+ export interface ArchHealthHistory {
27
+ schemaVersion: number;
28
+ language: string;
29
+ snapshots: IntrinsicDimensionResult[];
30
+ }
31
+ export interface AppendSnapshotResult {
32
+ ok: boolean;
33
+ reason?: string;
34
+ previous: IntrinsicDimensionResult | null;
35
+ }
36
+ export type DriftLevel = 'stable' | 'moderate' | 'significant' | 'critical';
37
+ export declare const DRIFT_THRESHOLDS: Readonly<{
38
+ moderate: number;
39
+ significant: number;
40
+ critical: number;
41
+ }>;
42
+ export declare const DEFAULT_DRIFT_OPTIONS: DriftOptions;
43
+ export interface EntityDrift {
44
+ entityId: string;
45
+ drift: number;
46
+ level: DriftLevel;
47
+ deltaFanIn: number;
48
+ deltaFanOut: number;
49
+ deltaCoverage: number;
50
+ }
51
+ export interface DriftSnapshot {
52
+ timestamp: string;
53
+ commitSha?: string;
54
+ entityIndex: string[];
55
+ adjacencyRows: number[][];
56
+ }
57
+ export interface DriftReport {
58
+ fromSnapshot: {
59
+ timestamp: string;
60
+ commitSha?: string;
61
+ };
62
+ toSnapshot: {
63
+ timestamp: string;
64
+ commitSha?: string;
65
+ };
66
+ mode: ProjectionMode;
67
+ nUnion: number;
68
+ k: number | null;
69
+ sharedEntityCount: number;
70
+ addedEntities: string[];
71
+ removedEntities: string[];
72
+ drifts: EntityDrift[];
73
+ summary: {
74
+ critical: number;
75
+ significant: number;
76
+ moderate: number;
77
+ stable: number;
78
+ };
79
+ }
80
+ export interface DriftOptions {
81
+ base?: string;
82
+ threshold: number;
83
+ topK?: number;
84
+ minLevel?: DriftLevel;
85
+ }
86
+ export interface AlignmentResult {
87
+ entityIndex: string[];
88
+ shared: string[];
89
+ added: string[];
90
+ removed: string[];
91
+ }
92
+ export interface KMeansOptions {
93
+ kInit?: number;
94
+ maxIterations?: number;
95
+ convergenceThreshold?: number;
96
+ seed?: number;
97
+ sampleSize?: number;
98
+ sampleThreshold?: number;
99
+ }
100
+ export interface KMeansResult {
101
+ k: number;
102
+ assignments: number[];
103
+ centroids: number[][];
104
+ silhouetteScore: number;
105
+ converged: boolean;
106
+ iterations: number;
107
+ orphanIndices: number[];
108
+ entityIndices: number[];
109
+ warning?: string;
110
+ }
111
+ export interface ClusterBoundaryOptions {
112
+ minPackageSize?: number;
113
+ splitThreshold?: number;
114
+ packageDepth?: number;
115
+ includeOrphans?: boolean;
116
+ crossPackageThreshold?: number;
117
+ dominantCoverageThreshold?: number;
118
+ kInit?: number;
119
+ seed?: number;
120
+ }
121
+ export interface PackageBASScore {
122
+ packageName: string;
123
+ entityCount: number;
124
+ purity: number;
125
+ coverage: number;
126
+ bas: number;
127
+ dominantCluster: number;
128
+ }
129
+ export interface SplitPackageIssue {
130
+ packageName: string;
131
+ purity: number;
132
+ bas: number;
133
+ clusterDistribution: Array<{
134
+ clusterId: number;
135
+ ratio: number;
136
+ }>;
137
+ }
138
+ export interface CrossDomainFusion {
139
+ clusterId: number;
140
+ involvedPackages: Array<{
141
+ packageName: string;
142
+ ratio: number;
143
+ }>;
144
+ representativeEntities: string[];
145
+ }
146
+ export interface ClusterSummary {
147
+ clusterId: number;
148
+ entityCount: number;
149
+ dominantPackage: string;
150
+ dominantPackageRatio: number;
151
+ }
152
+ export interface ClusterBoundaryReport {
153
+ mode: ProjectionMode;
154
+ globalBAS: number;
155
+ silhouetteScore: number;
156
+ clusterCount: number;
157
+ entityCount: number;
158
+ packageCount: number;
159
+ packageScores: PackageBASScore[];
160
+ splitPackages: SplitPackageIssue[];
161
+ crossDomainFusions: CrossDomainFusion[];
162
+ orphanEntities: string[];
163
+ clusters: ClusterSummary[];
164
+ warning?: string;
165
+ }
166
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/analysis/jl/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ export const DEFAULT_JL_CONFIG = {
2
+ seed: 42,
3
+ epsilon: 0.3,
4
+ directModeThreshold: 1000,
5
+ };
6
+ export const FEATURE_VERSION = '1.0';
7
+ export const HISTORY_SCHEMA_VERSION = 1;
8
+ export const MAX_SNAPSHOTS = 500;
9
+ export const VARIANCE_THRESHOLD = 0.95;
10
+ export const TREND_DELTA_THRESHOLD = 0.002;
11
+ export const DRIFT_THRESHOLDS = {
12
+ moderate: 0.5,
13
+ significant: 1.5,
14
+ critical: 3.0,
15
+ };
16
+ export const DEFAULT_DRIFT_OPTIONS = {
17
+ threshold: DRIFT_THRESHOLDS.critical,
18
+ };
19
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/analysis/jl/types.ts"],"names":[],"mappings":"AAsBA,MAAM,CAAC,MAAM,iBAAiB,GAAa;IACzC,IAAI,EAAE,EAAE;IACR,OAAO,EAAE,GAAG;IACZ,mBAAmB,EAAE,IAAI;CAC1B,CAAC;AAGF,MAAM,CAAC,MAAM,eAAe,GAAG,KAAK,CAAC;AAGrC,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,CAAC;AAGxC,MAAM,CAAC,MAAM,aAAa,GAAG,GAAG,CAAC;AAGjC,MAAM,CAAC,MAAM,kBAAkB,GAAG,IAAI,CAAC;AAGvC,MAAM,CAAC,MAAM,qBAAqB,GAAG,KAAK,CAAC;AA4D3C,MAAM,CAAC,MAAM,gBAAgB,GAIxB;IACH,QAAQ,EAAE,GAAG;IACb,WAAW,EAAE,GAAG;IAChB,QAAQ,EAAE,GAAG;CACd,CAAC;AAGF,MAAM,CAAC,MAAM,qBAAqB,GAAiB;IACjD,SAAS,EAAE,gBAAgB,CAAC,QAAQ;CACrC,CAAC"}
@@ -0,0 +1,5 @@
1
+ export * from './types.js';
2
+ export * from './literal-dispersion.js';
3
+ export * from './scope-filter.js';
4
+ export * from './persistence.js';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/analysis/shape-smells/index.ts"],"names":[],"mappings":"AAIA,cAAc,YAAY,CAAC;AAC3B,cAAc,yBAAyB,CAAC;AACxC,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC"}
@@ -0,0 +1,5 @@
1
+ export * from './types.js';
2
+ export * from './literal-dispersion.js';
3
+ export * from './scope-filter.js';
4
+ export * from './persistence.js';
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/analysis/shape-smells/index.ts"],"names":[],"mappings":"AAIA,cAAc,YAAY,CAAC;AAC3B,cAAc,yBAAyB,CAAC;AACxC,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC"}
@@ -0,0 +1,9 @@
1
+ import type { DiscriminatorType, SourceLocation, LiteralDispersionSmell } from './types.js';
2
+ export declare function extractDiscriminatorTypes(source: string, filePath: string): DiscriminatorType[];
3
+ export declare function scanFileForComparisons(source: string, filePath: string): SourceLocation[];
4
+ export interface DetectDispersionOptions {
5
+ threshold?: number;
6
+ srcRoot?: string;
7
+ }
8
+ export declare function detectDispersion(types: DiscriminatorType[], fileContents: Map<string, string>, options?: DetectDispersionOptions): LiteralDispersionSmell[];
9
+ //# sourceMappingURL=literal-dispersion.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"literal-dispersion.d.ts","sourceRoot":"","sources":["../../../src/analysis/shape-smells/literal-dispersion.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EACV,iBAAiB,EAEjB,cAAc,EACd,sBAAsB,EACvB,MAAM,YAAY,CAAC;AAiDpB,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,iBAAiB,EAAE,CAiE/F;AAUD,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,cAAc,EAAE,CAqCzF;AAMD,MAAM,WAAW,uBAAuB;IAKtC,SAAS,CAAC,EAAE,MAAM,CAAC;IAMnB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAYD,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,iBAAiB,EAAE,EAC1B,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EACjC,OAAO,GAAE,uBAA4B,GACpC,sBAAsB,EAAE,CA6D1B"}
@@ -0,0 +1,157 @@
1
+ import { filterCrossModule } from './scope-filter.js';
2
+ const STRING_LITERAL_UNION_RE = /(?:export\s+)?type\s+(\w+)\s*=\s*((?:"[^"]*"\s*\|\s*)*"[^"]*")\s*;?/g;
3
+ const STRING_LITERAL_RE = /"([^"]*)"/g;
4
+ const ENUM_RE = /(?:export\s+)?enum\s+(\w+)\s*\{([^}]*)\}/gs;
5
+ const ENUM_MEMBER_RE = /(\w+)\s*(?:=\s*(?:"([^"]*)"|'([^']*)'|(\d+)))?\s*(?:,|$)/g;
6
+ const CASE_LITERAL_RE = /case\s+"([^"]+)":/g;
7
+ const CASE_ENUM_MEMBER_RE = /case\s+\w+\.(\w+)\s*:/g;
8
+ function getLines(source) {
9
+ return source.split('\n').map((text, idx) => ({ text, num: idx + 1 }));
10
+ }
11
+ export function extractDiscriminatorTypes(source, filePath) {
12
+ const types = [];
13
+ for (const match of source.matchAll(STRING_LITERAL_UNION_RE)) {
14
+ const typeName = match[1];
15
+ const unionBody = match[2];
16
+ const values = [];
17
+ for (const litMatch of unionBody.matchAll(STRING_LITERAL_RE)) {
18
+ values.push(litMatch[1]);
19
+ }
20
+ if (values.length > 0) {
21
+ const beforeMatch = source.substring(0, match.index);
22
+ const lineNum = beforeMatch.split('\n').length;
23
+ types.push({
24
+ name: typeName,
25
+ values,
26
+ kind: 'string-literal-union',
27
+ file: filePath,
28
+ line: lineNum,
29
+ });
30
+ }
31
+ }
32
+ for (const match of source.matchAll(ENUM_RE)) {
33
+ const typeName = match[1];
34
+ const memberBlock = match[2];
35
+ const values = [];
36
+ for (const memMatch of memberBlock.matchAll(ENUM_MEMBER_RE)) {
37
+ const stringVal = memMatch[2] ?? memMatch[3];
38
+ const numVal = memMatch[4];
39
+ if (stringVal !== undefined) {
40
+ values.push(stringVal);
41
+ }
42
+ else if (numVal !== undefined) {
43
+ values.push(numVal);
44
+ }
45
+ else {
46
+ values.push(memMatch[1]);
47
+ }
48
+ }
49
+ if (values.length > 0) {
50
+ const beforeMatch = source.substring(0, match.index);
51
+ const lineNum = beforeMatch.split('\n').length;
52
+ types.push({
53
+ name: typeName,
54
+ values,
55
+ kind: 'enum',
56
+ file: filePath,
57
+ line: lineNum,
58
+ });
59
+ }
60
+ }
61
+ return types;
62
+ }
63
+ export function scanFileForComparisons(source, filePath) {
64
+ const locations = [];
65
+ const lines = getLines(source);
66
+ for (const { text, num } of lines) {
67
+ const eqMatch = text.match(/(?:===?\s*"([^"]+)")|(?:"([^"]+)"\s*===?)/g);
68
+ if (eqMatch) {
69
+ for (const m of eqMatch) {
70
+ const valMatch = m.match(/"([^"]+)"/);
71
+ if (valMatch) {
72
+ locations.push({ file: filePath, line: num });
73
+ }
74
+ }
75
+ }
76
+ if (CASE_LITERAL_RE.test(text)) {
77
+ CASE_LITERAL_RE.lastIndex = 0;
78
+ for (const _cm of text.matchAll(CASE_LITERAL_RE)) {
79
+ locations.push({ file: filePath, line: num });
80
+ }
81
+ }
82
+ if (CASE_ENUM_MEMBER_RE.test(text)) {
83
+ CASE_ENUM_MEMBER_RE.lastIndex = 0;
84
+ for (const _cm of text.matchAll(CASE_ENUM_MEMBER_RE)) {
85
+ locations.push({ file: filePath, line: num });
86
+ }
87
+ }
88
+ }
89
+ return locations;
90
+ }
91
+ export function detectDispersion(types, fileContents, options = {}) {
92
+ const threshold = options.threshold ?? 2;
93
+ const smells = [];
94
+ for (const typeDef of types) {
95
+ const valueLocations = new Map();
96
+ for (const val of typeDef.values) {
97
+ if (!valueLocations.has(val)) {
98
+ valueLocations.set(val, []);
99
+ }
100
+ valueLocations.get(val).push({ file: typeDef.file, line: typeDef.line });
101
+ }
102
+ for (const [file, source] of fileContents) {
103
+ const compLocations = scanFileForComparisons(source, file);
104
+ const lines = getLines(source);
105
+ for (const compLoc of compLocations) {
106
+ const lineText = lines[compLoc.line - 1]?.text ?? '';
107
+ const matchedValue = extractComparedValue(lineText, typeDef);
108
+ if (matchedValue !== null && typeDef.values.includes(matchedValue)) {
109
+ if (!valueLocations.has(matchedValue)) {
110
+ valueLocations.set(matchedValue, []);
111
+ }
112
+ valueLocations.get(matchedValue).push(compLoc);
113
+ }
114
+ }
115
+ }
116
+ for (const [val, locs] of valueLocations) {
117
+ const uniqueFiles = [...new Set(locs.map((l) => l.file))];
118
+ const dispersion = uniqueFiles.length;
119
+ if (dispersion >= threshold) {
120
+ smells.push({
121
+ typeName: typeDef.name,
122
+ value: val,
123
+ files: uniqueFiles.sort(),
124
+ dispersion,
125
+ severity: dispersion >= 3 ? 'warning' : 'info',
126
+ locations: locs,
127
+ });
128
+ }
129
+ }
130
+ }
131
+ if (options.srcRoot) {
132
+ return filterCrossModule(smells, options.srcRoot);
133
+ }
134
+ return smells;
135
+ }
136
+ function extractComparedValue(line, typeDef) {
137
+ const eqDirect = line.match(/(?:===?\s*"([^"]+)")|(?:"([^"]+)"\s*===?)/);
138
+ if (eqDirect) {
139
+ const val = eqDirect[1] ?? eqDirect[2];
140
+ return val;
141
+ }
142
+ const caseLit = line.match(/case\s+"([^"]+)":/);
143
+ if (caseLit) {
144
+ return caseLit[1];
145
+ }
146
+ if (typeDef.kind === 'enum') {
147
+ const caseEnum = line.match(/case\s+\w+\.(\w+)\s*:/);
148
+ if (caseEnum) {
149
+ const memberName = caseEnum[1];
150
+ if (typeDef.values.includes(memberName)) {
151
+ return memberName;
152
+ }
153
+ }
154
+ }
155
+ return null;
156
+ }
157
+ //# sourceMappingURL=literal-dispersion.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"literal-dispersion.js","sourceRoot":"","sources":["../../../src/analysis/shape-smells/literal-dispersion.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import type { ShapeSmellAnalysis, LiteralDispersionSmell } from './types.js';
2
+ export declare function persistResults(archDir: string, analysis: ShapeSmellAnalysis): Promise<void>;
3
+ export declare function loadResults(archDir: string): Promise<ShapeSmellAnalysis | null>;
4
+ export declare function loadLiteralDispersion(archDir: string): Promise<LiteralDispersionSmell[] | null>;
5
+ //# sourceMappingURL=persistence.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"persistence.d.ts","sourceRoot":"","sources":["../../../src/analysis/shape-smells/persistence.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAiB7E,wBAAsB,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CAajG;AAQD,wBAAsB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC,CAmCrF;AAKD,wBAAsB,qBAAqB,CACzC,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,sBAAsB,EAAE,GAAG,IAAI,CAAC,CAM1C"}
@@ -0,0 +1,59 @@
1
+ import fs from 'fs-extra';
2
+ import path from 'path';
3
+ import { errorMessage } from '../../utils/error-message.js';
4
+ const SHAPE_SMELLS_SUBDIR = 'query/shape-smells';
5
+ const MANIFEST_FILE = 'manifest.json';
6
+ const LITERAL_DISPERSION_FILE = 'literal-dispersion.json';
7
+ function shapeSmellsDir(outputDir) {
8
+ return path.join(outputDir, SHAPE_SMELLS_SUBDIR);
9
+ }
10
+ export async function persistResults(archDir, analysis) {
11
+ const dir = shapeSmellsDir(archDir);
12
+ await fs.ensureDir(dir);
13
+ await fs.writeJson(path.join(dir, MANIFEST_FILE), analysis.manifest, { spaces: 2 });
14
+ const literalResult = analysis.results.find((r) => r.layer === 'literal-dispersion');
15
+ if (literalResult) {
16
+ await fs.writeJson(path.join(dir, LITERAL_DISPERSION_FILE), literalResult.smells, {
17
+ spaces: 2,
18
+ });
19
+ }
20
+ }
21
+ export async function loadResults(archDir) {
22
+ const dir = shapeSmellsDir(archDir);
23
+ if (!(await fs.pathExists(dir))) {
24
+ return null;
25
+ }
26
+ const manifestPath = path.join(dir, MANIFEST_FILE);
27
+ const literalPath = path.join(dir, LITERAL_DISPERSION_FILE);
28
+ if (!(await fs.pathExists(manifestPath))) {
29
+ return null;
30
+ }
31
+ try {
32
+ const manifest = (await fs.readJson(manifestPath));
33
+ let smells = [];
34
+ if (await fs.pathExists(literalPath)) {
35
+ smells = (await fs.readJson(literalPath));
36
+ }
37
+ return {
38
+ manifest,
39
+ results: [
40
+ {
41
+ layer: 'literal-dispersion',
42
+ smells,
43
+ },
44
+ ],
45
+ };
46
+ }
47
+ catch (err) {
48
+ const message = errorMessage(err);
49
+ throw new Error(`Failed to load shape-smell results from ${dir}: ${message}`);
50
+ }
51
+ }
52
+ export async function loadLiteralDispersion(archDir) {
53
+ const results = await loadResults(archDir);
54
+ if (!results)
55
+ return null;
56
+ const literalResult = results.results.find((r) => r.layer === 'literal-dispersion');
57
+ return literalResult?.smells ?? null;
58
+ }
59
+ //# sourceMappingURL=persistence.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"persistence.js","sourceRoot":"","sources":["../../../src/analysis/shape-smells/persistence.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import type { LiteralDispersionSmell } from './types.js';
2
+ export declare function computeModuleSpan(files: string[], srcRoot: string): {
3
+ modules: string[];
4
+ crossesBoundary: boolean;
5
+ };
6
+ export declare function filterCrossModule(smells: LiteralDispersionSmell[], srcRoot?: string): LiteralDispersionSmell[];
7
+ //# sourceMappingURL=scope-filter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scope-filter.d.ts","sourceRoot":"","sources":["../../../src/analysis/shape-smells/scope-filter.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAWzD,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,MAAM,EAAE,EACf,OAAO,EAAE,MAAM,GACd;IAAE,OAAO,EAAE,MAAM,EAAE,CAAC;IAAC,eAAe,EAAE,OAAO,CAAA;CAAE,CAyBjD;AAUD,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,sBAAsB,EAAE,EAChC,OAAO,CAAC,EAAE,MAAM,GACf,sBAAsB,EAAE,CAS1B"}
@@ -0,0 +1,28 @@
1
+ export function computeModuleSpan(files, srcRoot) {
2
+ const modules = new Set();
3
+ for (const file of files) {
4
+ let relative = file;
5
+ if (file.startsWith(srcRoot)) {
6
+ relative = file.slice(srcRoot.length);
7
+ }
8
+ if (relative.startsWith('/')) {
9
+ relative = relative.slice(1);
10
+ }
11
+ const segments = relative.split('/');
12
+ if (segments.length > 1) {
13
+ modules.add(segments[0]);
14
+ }
15
+ }
16
+ const modulesArr = [...modules].sort();
17
+ return { modules: modulesArr, crossesBoundary: modulesArr.length >= 2 };
18
+ }
19
+ export function filterCrossModule(smells, srcRoot) {
20
+ if (!srcRoot) {
21
+ return smells;
22
+ }
23
+ return smells.filter((smell) => {
24
+ const { crossesBoundary } = computeModuleSpan(smell.files, srcRoot);
25
+ return crossesBoundary;
26
+ });
27
+ }
28
+ //# sourceMappingURL=scope-filter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scope-filter.js","sourceRoot":"","sources":["../../../src/analysis/shape-smells/scope-filter.ts"],"names":[],"mappings":"AAkBA,MAAM,UAAU,iBAAiB,CAC/B,KAAe,EACf,OAAe;IAEf,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;IAElC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QAEzB,IAAI,QAAQ,GAAG,IAAI,CAAC;QACpB,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YAC7B,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QACxC,CAAC;QAED,IAAI,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YAC7B,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAC/B,CAAC;QAGD,MAAM,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACrC,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAExB,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3B,CAAC;IAEH,CAAC;IAED,MAAM,UAAU,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC;IACvC,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,UAAU,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;AAC1E,CAAC;AAUD,MAAM,UAAU,iBAAiB,CAC/B,MAAgC,EAChC,OAAgB;IAEhB,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE;QAC7B,MAAM,EAAE,eAAe,EAAE,GAAG,iBAAiB,CAAC,KAAK,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QACpE,OAAO,eAAe,CAAC;IACzB,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,40 @@
1
+ export interface SourceLocation {
2
+ file: string;
3
+ line: number;
4
+ }
5
+ export type DiscriminatorKind = 'string-literal-union' | 'enum';
6
+ export interface DiscriminatorType {
7
+ name: string;
8
+ values: string[];
9
+ kind: DiscriminatorKind;
10
+ file: string;
11
+ line: number;
12
+ }
13
+ export interface LiteralDispersionSmell {
14
+ typeName: string;
15
+ value: string;
16
+ files: string[];
17
+ dispersion: number;
18
+ severity: 'info' | 'warning';
19
+ locations: SourceLocation[];
20
+ }
21
+ export interface ShapeSmellManifest {
22
+ version: string;
23
+ generatedAt: string;
24
+ totalSmells: number;
25
+ bySeverity: {
26
+ info: number;
27
+ warning: number;
28
+ };
29
+ }
30
+ export type ShapeSmellLayer = 'literal-dispersion' | 'hidden-coupling' | 'enum-extension-impact';
31
+ export interface ShapeSmellResult {
32
+ layer: ShapeSmellLayer;
33
+ smells: LiteralDispersionSmell[];
34
+ diagnostic?: string;
35
+ }
36
+ export interface ShapeSmellAnalysis {
37
+ manifest: ShapeSmellManifest;
38
+ results: ShapeSmellResult[];
39
+ }
40
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/analysis/shape-smells/types.ts"],"names":[],"mappings":"AAUA,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAKD,MAAM,MAAM,iBAAiB,GAAG,sBAAsB,GAAG,MAAM,CAAC;AAMhE,MAAM,WAAW,iBAAiB;IAEhC,IAAI,EAAE,MAAM,CAAC;IAEb,MAAM,EAAE,MAAM,EAAE,CAAC;IAEjB,IAAI,EAAE,iBAAiB,CAAC;IAExB,IAAI,EAAE,MAAM,CAAC;IAEb,IAAI,EAAE,MAAM,CAAC;CACd;AAOD,MAAM,WAAW,sBAAsB;IAErC,QAAQ,EAAE,MAAM,CAAC;IAEjB,KAAK,EAAE,MAAM,CAAC;IAEd,KAAK,EAAE,MAAM,EAAE,CAAC;IAEhB,UAAU,EAAE,MAAM,CAAC;IAEnB,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;IAE7B,SAAS,EAAE,cAAc,EAAE,CAAC;CAC7B;AAKD,MAAM,WAAW,kBAAkB;IAEjC,OAAO,EAAE,MAAM,CAAC;IAEhB,WAAW,EAAE,MAAM,CAAC;IAEpB,WAAW,EAAE,MAAM,CAAC;IAEpB,UAAU,EAAE;QACV,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;CACH;AAMD,MAAM,MAAM,eAAe,GAAG,oBAAoB,GAAG,iBAAiB,GAAG,uBAAuB,CAAC;AAKjG,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,eAAe,CAAC;IACvB,MAAM,EAAE,sBAAsB,EAAE,CAAC;IAEjC,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAKD,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,kBAAkB,CAAC;IAC7B,OAAO,EAAE,gBAAgB,EAAE,CAAC;CAC7B"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/analysis/shape-smells/types.ts"],"names":[],"mappings":""}
@@ -26,7 +26,7 @@ export async function loadSnapshots(outputDir) {
26
26
  const snapshots = [];
27
27
  for (const file of jsonFiles) {
28
28
  try {
29
- const data = await fs.readJson(path.join(dir, file));
29
+ const data = (await fs.readJson(path.join(dir, file)));
30
30
  snapshots.push(data);
31
31
  }
32
32
  catch {
@@ -52,7 +52,7 @@ export async function pruneSnapshots(outputDir, maxCount) {
52
52
  const fileSnapshots = [];
53
53
  for (const file of jsonFiles) {
54
54
  try {
55
- const data = await fs.readJson(path.join(dir, file));
55
+ const data = (await fs.readJson(path.join(dir, file)));
56
56
  fileSnapshots.push({
57
57
  file,
58
58
  timestamp: new Date(data.timestamp).getTime(),
@@ -1 +1 @@
1
- {"version":3,"file":"snapshot-store.js","sourceRoot":"","sources":["../../src/analysis/snapshot-store.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"snapshot-store.js","sourceRoot":"","sources":["../../src/analysis/snapshot-store.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"test-analyzer.d.ts","sourceRoot":"","sources":["../../src/analysis/test-analyzer.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAe,MAAM,sCAAsC,CAAC;AACzF,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,KAAK,EACV,YAAY,EAEZ,iBAAiB,EAElB,MAAM,qCAAqC,CAAC;AAE7C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yCAAyC,CAAC;AAIhF,MAAM,WAAW,mBAAmB;IAClC,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,iBAAiB,CAAC;IAClC,gBAAgB,CAAC,EAAE,OAAO,CAAC,gBAAgB,CAAC,CAAC;CAC9C;AAMD,wBAAgB,sCAAsC,CACpD,aAAa,CAAC,EAAE,iBAAiB,EACjC,gBAAgB,CAAC,EAAE,OAAO,CAAC,gBAAgB,CAAC,GAC3C,iBAAiB,GAAG,SAAS,CA6B/B;AAED,qBAAa,YAAY;IACvB,OAAO,CAAC,MAAM,CAA4B;IAC1C,OAAO,CAAC,aAAa,CAA2B;IAE1C,OAAO,CACX,QAAQ,EAAE,QAAQ,EAClB,MAAM,EAAE,eAAe,EACvB,OAAO,EAAE,mBAAmB,GAC3B,OAAO,CAAC,YAAY,CAAC;YA2BV,iBAAiB;YAgEjB,aAAa;YAeb,mBAAmB;IAoBjC,OAAO,CAAC,kBAAkB;IA6C1B,OAAO,CAAC,wBAAwB;IA0EhC,OAAO,CAAC,cAAc;CAiDvB"}
1
+ {"version":3,"file":"test-analyzer.d.ts","sourceRoot":"","sources":["../../src/analysis/test-analyzer.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAe,MAAM,sCAAsC,CAAC;AACzF,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,KAAK,EACV,YAAY,EAEZ,iBAAiB,EAIlB,MAAM,qCAAqC,CAAC;AAE7C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yCAAyC,CAAC;AAIhF,MAAM,WAAW,mBAAmB;IAClC,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,iBAAiB,CAAC;IAClC,gBAAgB,CAAC,EAAE,OAAO,CAAC,gBAAgB,CAAC,CAAC;CAC9C;AAMD,wBAAgB,sCAAsC,CACpD,aAAa,CAAC,EAAE,iBAAiB,EACjC,gBAAgB,CAAC,EAAE,OAAO,CAAC,gBAAgB,CAAC,GAC3C,iBAAiB,GAAG,SAAS,CA6B/B;AAED,qBAAa,YAAY;IACvB,OAAO,CAAC,MAAM,CAA4B;IAC1C,OAAO,CAAC,aAAa,CAA2B;IAE1C,OAAO,CACX,QAAQ,EAAE,QAAQ,EAClB,MAAM,EAAE,eAAe,EACvB,OAAO,EAAE,mBAAmB,GAC3B,OAAO,CAAC,YAAY,CAAC;YA2BV,iBAAiB;YAgEjB,aAAa;YAeb,mBAAmB;IAoBjC,OAAO,CAAC,kBAAkB;IA6C1B,OAAO,CAAC,wBAAwB;IA0EhC,OAAO,CAAC,cAAc;CAiDvB"}
@@ -242,7 +242,7 @@ export class TestAnalyzer {
242
242
  entityCoverageRatio: totalEntities > 0 ? coveredEntities.size / totalEntities : 0,
243
243
  assertionDensity: totalCases > 0 ? totalAssertions / totalCases : 0,
244
244
  skipRatio: totalCases > 0 ? totalSkips / totalCases : 0,
245
- issueCount: issueCount,
245
+ issueCount,
246
246
  };
247
247
  }
248
248
  }