scip-query 0.2.0 → 0.2.1

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 (319) hide show
  1. package/README.md +16 -43
  2. package/dist/chunk-2UELLEBI.js +1 -0
  3. package/dist/chunk-34JPTNRN.js +601 -0
  4. package/dist/{chunk-W4ALF422.js → chunk-3566TKJ5.js} +3 -3
  5. package/dist/{chunk-Z6YZJ36C.js → chunk-4ACRRQC4.js} +8 -4
  6. package/dist/{chunk-Z4GHE2HD.js → chunk-4BQFSNFI.js} +6 -2
  7. package/dist/{chunk-4XHWPRAX.js → chunk-6QSHLFSL.js} +3 -3
  8. package/dist/{chunk-4EXL2CUA.js → chunk-6WVR5K46.js} +16 -8
  9. package/dist/{chunk-ZQIIPFD7.js → chunk-75RQSBTK.js} +2 -2
  10. package/dist/{chunk-KPPHZCZJ.js → chunk-7HK5ZLOE.js} +28 -46
  11. package/dist/{chunk-MCUX5LA7.js → chunk-7JFZSOJ7.js} +3 -3
  12. package/dist/{chunk-6SXADWLW.js → chunk-AKMBBKWV.js} +2 -2
  13. package/dist/{chunk-NHBZIL2J.js → chunk-AMNISGYR.js} +3 -3
  14. package/dist/{chunk-2CKGIR6G.js → chunk-BFLULBEU.js} +3 -3
  15. package/dist/{chunk-HPFZLISB.js → chunk-CU62ZDHI.js} +2 -2
  16. package/dist/{chunk-EQYLEQCW.js → chunk-DY4AFG2W.js} +12 -10
  17. package/dist/{chunk-5RMYT5WH.js → chunk-F7XU27LU.js} +2 -2
  18. package/dist/{chunk-KCBMVQL5.js → chunk-GPJVPT3U.js} +2 -2
  19. package/dist/{chunk-NUZ4OMU3.js → chunk-GU2H5QRN.js} +2 -2
  20. package/dist/{chunk-UJQN5N3I.js → chunk-H6WCPKCX.js} +6 -3
  21. package/dist/{chunk-OVPLOMPY.js → chunk-HMYJJ3HY.js} +7 -4
  22. package/dist/chunk-IJKLB2JW.js +69 -0
  23. package/dist/{chunk-DGUPQSOR.js → chunk-IXPHLF6K.js} +2 -2
  24. package/dist/{chunk-7PBOG4YE.js → chunk-KBOQX573.js} +2 -2
  25. package/dist/{chunk-ZOGY2V3N.js → chunk-LLMPAG56.js} +93 -30
  26. package/dist/{chunk-BOVXCR46.js → chunk-LTJC5ZQL.js} +2 -2
  27. package/dist/{chunk-LAWMH22O.js → chunk-M3NPW3FC.js} +2 -2
  28. package/dist/{chunk-NWCE4CIC.js → chunk-M4QGEKKD.js} +5 -27
  29. package/dist/{chunk-63G7IQTD.js → chunk-MVH45PYK.js} +20 -40
  30. package/dist/chunk-N4C3H7LH.js +37 -0
  31. package/dist/chunk-NG5F43OU.js +200 -0
  32. package/dist/{chunk-D567NFIF.js → chunk-NVIIM34O.js} +3 -3
  33. package/dist/{chunk-BNN2RKD2.js → chunk-ORINICIZ.js} +3 -3
  34. package/dist/{chunk-4PDAL6IL.js → chunk-PMJKOXOT.js} +3 -3
  35. package/dist/{chunk-QOV2R2WT.js → chunk-QIXNAB5K.js} +42 -2
  36. package/dist/{chunk-7LLPRPR5.js → chunk-R2I3M5B4.js} +2 -2
  37. package/dist/{chunk-7RLE5EWE.js → chunk-R56FJU3E.js} +34 -13
  38. package/dist/{chunk-H2MDONBU.js → chunk-RFMT7UAZ.js} +3 -3
  39. package/dist/{chunk-SEFSL2GF.js → chunk-TOIEB3LG.js} +2 -2
  40. package/dist/chunk-VO4QI3LS.js +84 -0
  41. package/dist/{chunk-ZK6GXM3J.js → chunk-WVK7AASK.js} +3 -3
  42. package/dist/{chunk-HMLMH7VZ.js → chunk-Y3M323OX.js} +2 -2
  43. package/dist/{chunk-DCKMSTJ4.js → chunk-Y4JFVQ7C.js} +2 -2
  44. package/dist/{chunk-7UCKSQRS.js → chunk-YAFWL3RA.js} +3 -3
  45. package/dist/{chunk-FGXRVW7G.js → chunk-YZ6L7GFO.js} +2 -2
  46. package/dist/cli.js +1355 -671
  47. package/dist/{db-BNVVZSfP.d.ts → db-BHYam4BK.d.ts} +6 -18
  48. package/dist/index.d.ts +15 -15
  49. package/dist/index.js +260 -231
  50. package/dist/postinstall.js +5 -76
  51. package/dist/queries/affected.d.ts +1 -1
  52. package/dist/queries/affected.js +3 -3
  53. package/dist/queries/bottlenecks.d.ts +1 -1
  54. package/dist/queries/bottlenecks.js +2 -2
  55. package/dist/queries/by-kind.d.ts +1 -1
  56. package/dist/queries/by-kind.js +2 -2
  57. package/dist/queries/call-graph.d.ts +1 -1
  58. package/dist/queries/call-graph.js +3 -3
  59. package/dist/queries/change-surface.d.ts +2 -2
  60. package/dist/queries/change-surface.js +2 -3
  61. package/dist/queries/code.d.ts +1 -1
  62. package/dist/queries/code.js +3 -3
  63. package/dist/queries/complexity-hotspots.d.ts +1 -1
  64. package/dist/queries/complexity-hotspots.js +3 -3
  65. package/dist/queries/complexity.d.ts +1 -1
  66. package/dist/queries/complexity.js +3 -3
  67. package/dist/queries/convergence.d.ts +1 -1
  68. package/dist/queries/convergence.js +3 -3
  69. package/dist/queries/coupling.d.ts +1 -1
  70. package/dist/queries/cycles.d.ts +1 -1
  71. package/dist/queries/cycles.js +3 -2
  72. package/dist/queries/dataflow.d.ts +1 -1
  73. package/dist/queries/dataflow.js +3 -3
  74. package/dist/queries/dead.d.ts +1 -1
  75. package/dist/queries/dead.js +4 -3
  76. package/dist/queries/deep-chains.d.ts +1 -1
  77. package/dist/queries/deep-chains.js +3 -2
  78. package/dist/queries/deps.d.ts +1 -1
  79. package/dist/queries/diff-impact.d.ts +2 -2
  80. package/dist/queries/diff-impact.js +2 -3
  81. package/dist/queries/doc-coverage.d.ts +1 -1
  82. package/dist/queries/doc-coverage.js +2 -2
  83. package/dist/queries/drift.d.ts +1 -1
  84. package/dist/queries/drift.js +3 -2
  85. package/dist/queries/extract-candidates.d.ts +1 -1
  86. package/dist/queries/extract-candidates.js +3 -3
  87. package/dist/queries/fan.d.ts +1 -1
  88. package/dist/queries/fan.js +2 -2
  89. package/dist/queries/files.d.ts +1 -1
  90. package/dist/queries/health.d.ts +1 -1
  91. package/dist/queries/health.js +14 -14
  92. package/dist/queries/hierarchy.d.ts +1 -1
  93. package/dist/queries/hierarchy.js +3 -2
  94. package/dist/queries/hotspots.d.ts +1 -1
  95. package/dist/queries/hotspots.js +2 -2
  96. package/dist/queries/imports.d.ts +1 -1
  97. package/dist/queries/imports.js +3 -2
  98. package/dist/queries/index.d.ts +1 -2
  99. package/dist/queries/index.js +43 -48
  100. package/dist/queries/isolated.d.ts +1 -1
  101. package/dist/queries/isolated.js +4 -3
  102. package/dist/queries/members.d.ts +2 -2
  103. package/dist/queries/members.js +3 -2
  104. package/dist/queries/methods.d.ts +1 -1
  105. package/dist/queries/methods.js +2 -2
  106. package/dist/queries/outline.d.ts +1 -1
  107. package/dist/queries/outline.js +2 -2
  108. package/dist/queries/passthrough-candidates.d.ts +1 -1
  109. package/dist/queries/passthrough-candidates.js +3 -3
  110. package/dist/queries/redundant-reexports.d.ts +1 -1
  111. package/dist/queries/redundant-reexports.js +4 -2
  112. package/dist/queries/refs.d.ts +1 -1
  113. package/dist/queries/similar-chains.d.ts +1 -1
  114. package/dist/queries/similar-chains.js +3 -2
  115. package/dist/queries/similar-files.d.ts +1 -1
  116. package/dist/queries/similar-files.js +3 -2
  117. package/dist/queries/similar-signatures.d.ts +1 -1
  118. package/dist/queries/similar-signatures.js +2 -2
  119. package/dist/queries/similar.d.ts +1 -1
  120. package/dist/queries/similar.js +3 -3
  121. package/dist/queries/slice.d.ts +1 -1
  122. package/dist/queries/slice.js +3 -3
  123. package/dist/queries/stale-abstractions.d.ts +1 -1
  124. package/dist/queries/stale-abstractions.js +3 -3
  125. package/dist/queries/stats.d.ts +1 -1
  126. package/dist/queries/surface.d.ts +1 -1
  127. package/dist/queries/surface.js +2 -2
  128. package/dist/queries/symbols.d.ts +1 -1
  129. package/dist/queries/symbols.js +2 -2
  130. package/dist/queries/system.d.ts +1 -1
  131. package/dist/queries/system.js +2 -2
  132. package/dist/queries/trace.d.ts +1 -1
  133. package/dist/queries/trace.js +3 -1
  134. package/dist/queries/wrapper-candidates.d.ts +1 -1
  135. package/dist/queries/wrapper-candidates.js +3 -3
  136. package/dist/reindex-worker.js +24 -12
  137. package/package.json +6 -1
  138. package/IMPROVEMENTS.md +0 -143
  139. package/PLAN.md +0 -320
  140. package/dist/chunk-2CKGIR6G.js.map +0 -1
  141. package/dist/chunk-3UOUTZQT.js +0 -45
  142. package/dist/chunk-3UOUTZQT.js.map +0 -1
  143. package/dist/chunk-4EXL2CUA.js.map +0 -1
  144. package/dist/chunk-4PDAL6IL.js.map +0 -1
  145. package/dist/chunk-4TYLS5XX.js.map +0 -1
  146. package/dist/chunk-4XHWPRAX.js.map +0 -1
  147. package/dist/chunk-5RMYT5WH.js.map +0 -1
  148. package/dist/chunk-63G7IQTD.js.map +0 -1
  149. package/dist/chunk-6SXADWLW.js.map +0 -1
  150. package/dist/chunk-74RFWB5T.js.map +0 -1
  151. package/dist/chunk-7LLPRPR5.js.map +0 -1
  152. package/dist/chunk-7PBOG4YE.js.map +0 -1
  153. package/dist/chunk-7RLE5EWE.js.map +0 -1
  154. package/dist/chunk-7UCKSQRS.js.map +0 -1
  155. package/dist/chunk-BNN2RKD2.js.map +0 -1
  156. package/dist/chunk-BOVXCR46.js.map +0 -1
  157. package/dist/chunk-D567NFIF.js.map +0 -1
  158. package/dist/chunk-DCKMSTJ4.js.map +0 -1
  159. package/dist/chunk-DEZKCZXD.js +0 -40
  160. package/dist/chunk-DEZKCZXD.js.map +0 -1
  161. package/dist/chunk-DGUPQSOR.js.map +0 -1
  162. package/dist/chunk-DVWGWHFW.js +0 -99
  163. package/dist/chunk-DVWGWHFW.js.map +0 -1
  164. package/dist/chunk-EQYLEQCW.js.map +0 -1
  165. package/dist/chunk-FGXRVW7G.js.map +0 -1
  166. package/dist/chunk-H2MDONBU.js.map +0 -1
  167. package/dist/chunk-HB7MRLLL.js +0 -76
  168. package/dist/chunk-HB7MRLLL.js.map +0 -1
  169. package/dist/chunk-HDSRORNV.js.map +0 -1
  170. package/dist/chunk-HMLMH7VZ.js.map +0 -1
  171. package/dist/chunk-HPFZLISB.js.map +0 -1
  172. package/dist/chunk-HZBC7PPD.js +0 -88
  173. package/dist/chunk-HZBC7PPD.js.map +0 -1
  174. package/dist/chunk-ITZ3DDOG.js.map +0 -1
  175. package/dist/chunk-JJP7KQND.js +0 -1
  176. package/dist/chunk-JJP7KQND.js.map +0 -1
  177. package/dist/chunk-KCBMVQL5.js.map +0 -1
  178. package/dist/chunk-KPPHZCZJ.js.map +0 -1
  179. package/dist/chunk-LAWMH22O.js.map +0 -1
  180. package/dist/chunk-MCUX5LA7.js.map +0 -1
  181. package/dist/chunk-MGNMHKX3.js.map +0 -1
  182. package/dist/chunk-N5KEREIA.js.map +0 -1
  183. package/dist/chunk-NHBZIL2J.js.map +0 -1
  184. package/dist/chunk-NUZ4OMU3.js.map +0 -1
  185. package/dist/chunk-NWCE4CIC.js.map +0 -1
  186. package/dist/chunk-OVPLOMPY.js.map +0 -1
  187. package/dist/chunk-QOV2R2WT.js.map +0 -1
  188. package/dist/chunk-SEFSL2GF.js.map +0 -1
  189. package/dist/chunk-UJQN5N3I.js.map +0 -1
  190. package/dist/chunk-W4ALF422.js.map +0 -1
  191. package/dist/chunk-Z4GHE2HD.js.map +0 -1
  192. package/dist/chunk-Z6YZJ36C.js.map +0 -1
  193. package/dist/chunk-ZK6GXM3J.js.map +0 -1
  194. package/dist/chunk-ZOGY2V3N.js.map +0 -1
  195. package/dist/chunk-ZQIIPFD7.js.map +0 -1
  196. package/dist/cli.js.map +0 -1
  197. package/dist/index.js.map +0 -1
  198. package/dist/postinstall.js.map +0 -1
  199. package/dist/queries/affected.js.map +0 -1
  200. package/dist/queries/bottlenecks.js.map +0 -1
  201. package/dist/queries/by-kind.js.map +0 -1
  202. package/dist/queries/call-graph.js.map +0 -1
  203. package/dist/queries/change-surface.js.map +0 -1
  204. package/dist/queries/clean-signature.js.map +0 -1
  205. package/dist/queries/code.js.map +0 -1
  206. package/dist/queries/complexity-hotspots.js.map +0 -1
  207. package/dist/queries/complexity.js.map +0 -1
  208. package/dist/queries/convergence.js.map +0 -1
  209. package/dist/queries/coupling.js.map +0 -1
  210. package/dist/queries/cycles.js.map +0 -1
  211. package/dist/queries/dataflow.js.map +0 -1
  212. package/dist/queries/dead.js.map +0 -1
  213. package/dist/queries/deep-chains.js.map +0 -1
  214. package/dist/queries/deps.js.map +0 -1
  215. package/dist/queries/diff-impact.js.map +0 -1
  216. package/dist/queries/doc-coverage.js.map +0 -1
  217. package/dist/queries/drift.js.map +0 -1
  218. package/dist/queries/extract-candidates.js.map +0 -1
  219. package/dist/queries/fan.js.map +0 -1
  220. package/dist/queries/files.js.map +0 -1
  221. package/dist/queries/health.js.map +0 -1
  222. package/dist/queries/hierarchy.js.map +0 -1
  223. package/dist/queries/hotspots.js.map +0 -1
  224. package/dist/queries/imports.js.map +0 -1
  225. package/dist/queries/index.js.map +0 -1
  226. package/dist/queries/isolated.js.map +0 -1
  227. package/dist/queries/members.js.map +0 -1
  228. package/dist/queries/methods.js.map +0 -1
  229. package/dist/queries/outline.js.map +0 -1
  230. package/dist/queries/passthrough-candidates.js.map +0 -1
  231. package/dist/queries/redundant-reexports.js.map +0 -1
  232. package/dist/queries/refs.js.map +0 -1
  233. package/dist/queries/similar-chains.js.map +0 -1
  234. package/dist/queries/similar-files.js.map +0 -1
  235. package/dist/queries/similar-signatures.js.map +0 -1
  236. package/dist/queries/similar.js.map +0 -1
  237. package/dist/queries/slice.js.map +0 -1
  238. package/dist/queries/stale-abstractions.js.map +0 -1
  239. package/dist/queries/stats.js.map +0 -1
  240. package/dist/queries/surface.js.map +0 -1
  241. package/dist/queries/symbols.js.map +0 -1
  242. package/dist/queries/system.js.map +0 -1
  243. package/dist/queries/test-coverage.d.ts +0 -22
  244. package/dist/queries/test-coverage.js +0 -11
  245. package/dist/queries/test-coverage.js.map +0 -1
  246. package/dist/queries/trace.js.map +0 -1
  247. package/dist/queries/wrapper-candidates.js.map +0 -1
  248. package/dist/reindex-worker.js.map +0 -1
  249. package/docs/AGENT_GUIDE.md +0 -359
  250. package/reports/debloat/2026-04-10-scip-query-self-audit.md +0 -161
  251. package/src/cli.ts +0 -1480
  252. package/src/config.ts +0 -117
  253. package/src/db.ts +0 -127
  254. package/src/gitignore-filter.ts +0 -143
  255. package/src/index.ts +0 -11
  256. package/src/postinstall.ts +0 -8
  257. package/src/queries/affected.ts +0 -86
  258. package/src/queries/bottlenecks.ts +0 -67
  259. package/src/queries/by-kind.ts +0 -204
  260. package/src/queries/call-graph.ts +0 -66
  261. package/src/queries/change-surface.ts +0 -110
  262. package/src/queries/clean-signature.ts +0 -22
  263. package/src/queries/code.ts +0 -101
  264. package/src/queries/complexity-hotspots.ts +0 -119
  265. package/src/queries/complexity.ts +0 -152
  266. package/src/queries/convergence.ts +0 -82
  267. package/src/queries/coupling.ts +0 -99
  268. package/src/queries/cycles.ts +0 -78
  269. package/src/queries/dataflow.ts +0 -128
  270. package/src/queries/dead.ts +0 -122
  271. package/src/queries/deep-chains.ts +0 -59
  272. package/src/queries/deps.ts +0 -46
  273. package/src/queries/diff-impact.ts +0 -204
  274. package/src/queries/doc-coverage.ts +0 -86
  275. package/src/queries/drift.ts +0 -224
  276. package/src/queries/extract-candidates.ts +0 -167
  277. package/src/queries/fan.ts +0 -148
  278. package/src/queries/files.ts +0 -16
  279. package/src/queries/health.ts +0 -324
  280. package/src/queries/hierarchy.ts +0 -49
  281. package/src/queries/hotspots.ts +0 -53
  282. package/src/queries/imports.ts +0 -95
  283. package/src/queries/index.ts +0 -45
  284. package/src/queries/isolated.ts +0 -67
  285. package/src/queries/members.ts +0 -54
  286. package/src/queries/methods.ts +0 -27
  287. package/src/queries/outline.ts +0 -52
  288. package/src/queries/passthrough-candidates.ts +0 -94
  289. package/src/queries/redundant-reexports.ts +0 -170
  290. package/src/queries/refs.ts +0 -27
  291. package/src/queries/similar-chains.ts +0 -314
  292. package/src/queries/similar-files.ts +0 -140
  293. package/src/queries/similar-signatures.ts +0 -151
  294. package/src/queries/similar.ts +0 -305
  295. package/src/queries/slice.ts +0 -154
  296. package/src/queries/stale-abstractions.ts +0 -82
  297. package/src/queries/stats.ts +0 -22
  298. package/src/queries/surface.ts +0 -34
  299. package/src/queries/symbols.ts +0 -39
  300. package/src/queries/system.ts +0 -86
  301. package/src/queries/test-coverage.ts +0 -106
  302. package/src/queries/trace.ts +0 -55
  303. package/src/queries/wrapper-candidates.ts +0 -112
  304. package/src/query-support.ts +0 -226
  305. package/src/reindex/detect.ts +0 -58
  306. package/src/reindex/index.ts +0 -153
  307. package/src/reindex/indexers.ts +0 -220
  308. package/src/reindex/install.ts +0 -125
  309. package/src/reindex-worker.ts +0 -35
  310. package/src/setup.ts +0 -202
  311. package/src/symbol-parser.ts +0 -278
  312. package/src/types.ts +0 -654
  313. package/src/watch.ts +0 -274
  314. package/tests/gitignore-filter.test.ts +0 -48
  315. package/tests/queries.test.ts +0 -300
  316. package/tests/symbol-parser.test.ts +0 -157
  317. package/tsconfig.json +0 -20
  318. package/tsup.config.ts +0 -40
  319. package/vitest.config.ts +0 -7
@@ -161,10 +161,50 @@ function leafName(raw) {
161
161
  const last = sym.descriptors[sym.descriptors.length - 1];
162
162
  return last.name;
163
163
  }
164
+ function leafSuffix(raw) {
165
+ const parsed = parseSymbol(raw);
166
+ if ("kind" in parsed && parsed.kind === "local") {
167
+ return null;
168
+ }
169
+ const sym = parsed;
170
+ const last = sym.descriptors[sym.descriptors.length - 1];
171
+ return last?.suffix ?? null;
172
+ }
173
+ function isFunctionLikeSymbol(raw) {
174
+ const suffix = leafSuffix(raw);
175
+ return suffix === "method" || suffix === "term";
176
+ }
177
+ function isModuleLikeSymbol(raw) {
178
+ return leafSuffix(raw) === "namespace";
179
+ }
180
+ function isDirectChildSymbol(parentRaw, candidateRaw) {
181
+ const parent = parseSymbol(parentRaw);
182
+ const candidate = parseSymbol(candidateRaw);
183
+ if ("kind" in parent || "kind" in candidate) {
184
+ return false;
185
+ }
186
+ const parentDescriptors = parent.descriptors;
187
+ const candidateDescriptors = candidate.descriptors;
188
+ if (candidateDescriptors.length !== parentDescriptors.length + 1) {
189
+ return false;
190
+ }
191
+ for (let i = 0; i < parentDescriptors.length; i++) {
192
+ const parentDesc = parentDescriptors[i];
193
+ const candidateDesc = candidateDescriptors[i];
194
+ if (parentDesc.name !== candidateDesc.name || parentDesc.suffix !== candidateDesc.suffix) {
195
+ return false;
196
+ }
197
+ }
198
+ return true;
199
+ }
164
200
 
165
201
  export {
166
202
  parseSymbol,
167
203
  shortenSymbol,
168
- leafName
204
+ leafName,
205
+ leafSuffix,
206
+ isFunctionLikeSymbol,
207
+ isModuleLikeSymbol,
208
+ isDirectChildSymbol
169
209
  };
170
- //# sourceMappingURL=chunk-QOV2R2WT.js.map
210
+ //# sourceMappingURL=chunk-QIXNAB5K.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  buildFileDepGraph
3
- } from "./chunk-ZOGY2V3N.js";
3
+ } from "./chunk-LLMPAG56.js";
4
4
 
5
5
  // src/queries/similar-chains.ts
6
6
  function similarChains(db, opts = {}) {
@@ -210,4 +210,4 @@ function isSubChain(sub, full) {
210
210
  export {
211
211
  similarChains
212
212
  };
213
- //# sourceMappingURL=chunk-7LLPRPR5.js.map
213
+ //# sourceMappingURL=chunk-R2I3M5B4.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  buildFileDepGraph
3
- } from "./chunk-ZOGY2V3N.js";
3
+ } from "./chunk-LLMPAG56.js";
4
4
 
5
5
  // src/queries/drift.ts
6
6
  import path from "path";
@@ -10,9 +10,10 @@ function drift(db, opts) {
10
10
  const symbolRefs = buildSymbolRefGraph(db, scope);
11
11
  const results = [];
12
12
  for (const [file, deps] of depGraph) {
13
- if (isStructuralRole(path.basename(file))) continue;
13
+ if (shouldSkipDriftFile(file)) continue;
14
14
  const referencedFiles = symbolRefs.get(file) ?? /* @__PURE__ */ new Set();
15
15
  for (const dep of deps) {
16
+ if (shouldSkipDriftFile(dep)) continue;
16
17
  if (!referencedFiles.has(dep)) {
17
18
  if (isLikelyTypeOnlyDep(dep)) continue;
18
19
  results.push({
@@ -26,10 +27,11 @@ function drift(db, opts) {
26
27
  }
27
28
  const layerRules = inferLayerRules(depGraph);
28
29
  for (const [file, deps] of depGraph) {
29
- if (isStructuralRole(path.basename(file))) continue;
30
- const fileLayer = getTopDir(file);
30
+ if (shouldSkipDriftFile(file)) continue;
31
+ const fileLayer = getArchitecturalLayer(file);
31
32
  for (const dep of deps) {
32
- const depLayer = getTopDir(dep);
33
+ if (shouldSkipDriftFile(dep)) continue;
34
+ const depLayer = getArchitecturalLayer(dep);
33
35
  if (fileLayer === depLayer) continue;
34
36
  const violation = layerRules.get(`${fileLayer}->${depLayer}`);
35
37
  if (violation === "violation") {
@@ -53,14 +55,16 @@ function drift(db, opts) {
53
55
  if (files.length < 3) continue;
54
56
  const depFreq = /* @__PURE__ */ new Map();
55
57
  for (const file of files) {
56
- if (isStructuralRole(path.basename(file))) continue;
58
+ if (shouldSkipDriftFile(file)) continue;
57
59
  for (const dep of depGraph.get(file) ?? []) {
60
+ if (shouldSkipDriftFile(dep)) continue;
58
61
  depFreq.set(dep, (depFreq.get(dep) ?? 0) + 1);
59
62
  }
60
63
  }
61
64
  for (const file of files) {
62
- if (isStructuralRole(path.basename(file))) continue;
65
+ if (shouldSkipDriftFile(file)) continue;
63
66
  for (const dep of depGraph.get(file) ?? []) {
67
+ if (shouldSkipDriftFile(dep)) continue;
64
68
  if ((depFreq.get(dep) ?? 0) === 1) {
65
69
  if (path.dirname(dep) === dir) continue;
66
70
  results.push({
@@ -107,10 +111,12 @@ function inferLayerRules(depGraph) {
107
111
  const layerEdges = /* @__PURE__ */ new Map();
108
112
  const layerSet = /* @__PURE__ */ new Set();
109
113
  for (const [file, deps] of depGraph) {
110
- const fromLayer = getTopDir(file);
114
+ if (shouldSkipDriftFile(file)) continue;
115
+ const fromLayer = getArchitecturalLayer(file);
111
116
  layerSet.add(fromLayer);
112
117
  for (const dep of deps) {
113
- const toLayer = getTopDir(dep);
118
+ if (shouldSkipDriftFile(dep)) continue;
119
+ const toLayer = getArchitecturalLayer(dep);
114
120
  if (fromLayer === toLayer) continue;
115
121
  layerSet.add(toLayer);
116
122
  const key = `${fromLayer}->${toLayer}`;
@@ -123,13 +129,23 @@ function inferLayerRules(depGraph) {
123
129
  }
124
130
  return rules;
125
131
  }
126
- function getTopDir(filePath) {
127
- const parts = filePath.split("/");
128
- return parts[0] ?? filePath;
132
+ function getArchitecturalLayer(filePath) {
133
+ const normalized = filePath.replace(/\\/g, "/");
134
+ const parts = normalized.split("/").filter(Boolean);
135
+ if (parts.length <= 1) {
136
+ return "(root)";
137
+ }
138
+ if (parts.length >= 3 && ["src", "lib", "app", "server", "client"].includes(parts[0])) {
139
+ return `${parts[0]}/${parts[1]}`;
140
+ }
141
+ return parts[0];
129
142
  }
130
143
  function isLikelyTypeOnlyDep(dep) {
131
144
  return dep.includes("types") || dep.endsWith(".d.ts");
132
145
  }
146
+ function shouldSkipDriftFile(filePath) {
147
+ return isStructuralRole(path.basename(filePath)) || isTestLikePath(filePath);
148
+ }
133
149
  function isStructuralRole(basename) {
134
150
  if (basename === "index.ts" || basename === "index.js") return true;
135
151
  if (basename === "cli.ts" || basename === "main.ts" || basename === "main.rs") return true;
@@ -137,8 +153,13 @@ function isStructuralRole(basename) {
137
153
  if (basename === "health.ts" || basename === "health.js") return true;
138
154
  return false;
139
155
  }
156
+ function isTestLikePath(filePath) {
157
+ const normalized = filePath.replace(/\\/g, "/");
158
+ const basename = path.basename(normalized);
159
+ return normalized.includes("/__tests__/") || normalized.includes("/tests/") || normalized.includes("/test/") || /\.(test|spec)\.[A-Za-z0-9]+$/.test(basename) || /_(test|spec)\.[A-Za-z0-9]+$/.test(basename) || /^test[_-]/.test(basename) || /^test\./.test(basename);
160
+ }
140
161
 
141
162
  export {
142
163
  drift
143
164
  };
144
- //# sourceMappingURL=chunk-7RLE5EWE.js.map
165
+ //# sourceMappingURL=chunk-R56FJU3E.js.map
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  findFirstSymbolMatch
3
- } from "./chunk-ZOGY2V3N.js";
3
+ } from "./chunk-LLMPAG56.js";
4
4
  import {
5
5
  shortenSymbol
6
- } from "./chunk-QOV2R2WT.js";
6
+ } from "./chunk-QIXNAB5K.js";
7
7
 
8
8
  // src/queries/code.ts
9
9
  import { readFileSync } from "fs";
@@ -73,4 +73,4 @@ function readFileRange(db, filePath, startLine, endLine, context) {
73
73
  export {
74
74
  code
75
75
  };
76
- //# sourceMappingURL=chunk-H2MDONBU.js.map
76
+ //# sourceMappingURL=chunk-RFMT7UAZ.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  shortenSymbol
3
- } from "./chunk-QOV2R2WT.js";
3
+ } from "./chunk-QIXNAB5K.js";
4
4
 
5
5
  // src/queries/similar-signatures.ts
6
6
  function similarSignatures(db, opts = {}) {
@@ -75,4 +75,4 @@ function normalizeSignature(raw) {
75
75
  export {
76
76
  similarSignatures
77
77
  };
78
- //# sourceMappingURL=chunk-SEFSL2GF.js.map
78
+ //# sourceMappingURL=chunk-TOIEB3LG.js.map
@@ -0,0 +1,84 @@
1
+ import {
2
+ buildFileDepGraph
3
+ } from "./chunk-LLMPAG56.js";
4
+
5
+ // src/entry-surfaces.ts
6
+ var liveBarrelCache = /* @__PURE__ */ new WeakMap();
7
+ function normalizePath(path) {
8
+ return path.replace(/\\/g, "/");
9
+ }
10
+ function isBarrelFile(path) {
11
+ const normalized = normalizePath(path);
12
+ return normalized === "index.ts" || normalized === "index.js" || normalized.endsWith("/index.ts") || normalized.endsWith("/index.js") || normalized.endsWith("/mod.rs") || normalized.endsWith("/__init__.py");
13
+ }
14
+ function isWorkerEntrySurface(path) {
15
+ const normalized = normalizePath(path);
16
+ return /(^|\/)[^/]*worker\.(ts|js|mjs|cjs|rs|py|go)$/.test(normalized);
17
+ }
18
+ function isStructuralEntrySurface(path) {
19
+ const normalized = normalizePath(path);
20
+ const segments = normalized.split("/");
21
+ const basename = segments[segments.length - 1] ?? normalized;
22
+ if (basename === "cli.ts" || basename === "cli.js" || basename === "postinstall.ts" || basename === "postinstall.js" || basename === "main.ts" || basename === "main.js" || basename === "main.rs" || basename === "main.go" || basename === "main.py") {
23
+ return true;
24
+ }
25
+ if (basename === "index.ts" || basename === "index.js") {
26
+ return segments.length <= 2;
27
+ }
28
+ return normalized.endsWith("/mod.rs") || normalized.endsWith("/__init__.py");
29
+ }
30
+ function getIndexedPaths(db) {
31
+ return db.all(
32
+ `SELECT d.relative_path
33
+ FROM documents d
34
+ WHERE 1 = 1
35
+ ${db.pathExclusionsFor("d")}
36
+ ORDER BY d.relative_path`
37
+ ).map((row) => row.relative_path).filter((path) => !db.isIgnored(path));
38
+ }
39
+ function getLiveBarrelPaths(db) {
40
+ const cached = liveBarrelCache.get(db);
41
+ if (cached) {
42
+ return cached;
43
+ }
44
+ const graph = buildFileDepGraph(db);
45
+ const queue = getIndexedPaths(db).filter(
46
+ (path) => isStructuralEntrySurface(path) || isWorkerEntrySurface(path)
47
+ );
48
+ const visited = /* @__PURE__ */ new Set();
49
+ const liveBarrels = /* @__PURE__ */ new Set();
50
+ while (queue.length > 0) {
51
+ const current = queue.shift();
52
+ if (visited.has(current)) {
53
+ continue;
54
+ }
55
+ visited.add(current);
56
+ if (isBarrelFile(current)) {
57
+ liveBarrels.add(current);
58
+ }
59
+ for (const dep of graph.get(current) ?? []) {
60
+ if (!visited.has(dep)) {
61
+ queue.push(dep);
62
+ }
63
+ }
64
+ }
65
+ liveBarrelCache.set(db, liveBarrels);
66
+ return liveBarrels;
67
+ }
68
+ function isLiveBarrel(db, path) {
69
+ return getLiveBarrelPaths(db).has(normalizePath(path));
70
+ }
71
+ function isEntrySurface(db, path) {
72
+ return isStructuralEntrySurface(path) || isWorkerEntrySurface(path) || isLiveBarrel(db, path);
73
+ }
74
+ function getInactiveBarrelPaths(db) {
75
+ const liveBarrels = getLiveBarrelPaths(db);
76
+ return getIndexedPaths(db).filter((path) => isBarrelFile(path)).filter((path) => !liveBarrels.has(path));
77
+ }
78
+
79
+ export {
80
+ isLiveBarrel,
81
+ isEntrySurface,
82
+ getInactiveBarrelPaths
83
+ };
84
+ //# sourceMappingURL=chunk-VO4QI3LS.js.map
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  testFileExclusionSql
3
- } from "./chunk-ZOGY2V3N.js";
3
+ } from "./chunk-LLMPAG56.js";
4
4
  import {
5
5
  shortenSymbol
6
- } from "./chunk-QOV2R2WT.js";
6
+ } from "./chunk-QIXNAB5K.js";
7
7
 
8
8
  // src/queries/complexity-hotspots.ts
9
9
  function complexityHotspots(db, opts) {
@@ -99,4 +99,4 @@ function complexityHotspots(db, opts) {
99
99
  export {
100
100
  complexityHotspots
101
101
  };
102
- //# sourceMappingURL=chunk-ZK6GXM3J.js.map
102
+ //# sourceMappingURL=chunk-WVK7AASK.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  buildFileDepGraph
3
- } from "./chunk-ZOGY2V3N.js";
3
+ } from "./chunk-LLMPAG56.js";
4
4
 
5
5
  // src/queries/cycles.ts
6
6
  function cycles(db, opts = {}) {
@@ -58,4 +58,4 @@ function cycles(db, opts = {}) {
58
58
  export {
59
59
  cycles
60
60
  };
61
- //# sourceMappingURL=chunk-HMLMH7VZ.js.map
61
+ //# sourceMappingURL=chunk-Y3M323OX.js.map
@@ -3,7 +3,7 @@ import {
3
3
  } from "./chunk-4TYLS5XX.js";
4
4
  import {
5
5
  shortenSymbol
6
- } from "./chunk-QOV2R2WT.js";
6
+ } from "./chunk-QIXNAB5K.js";
7
7
 
8
8
  // src/queries/system.ts
9
9
  function system(db, modulePattern) {
@@ -71,4 +71,4 @@ function system(db, modulePattern) {
71
71
  export {
72
72
  system
73
73
  };
74
- //# sourceMappingURL=chunk-DCKMSTJ4.js.map
74
+ //# sourceMappingURL=chunk-Y4JFVQ7C.js.map
@@ -1,10 +1,10 @@
1
1
  import {
2
2
  findFirstSymbolMatch,
3
3
  getCalleeRowsForSymbol
4
- } from "./chunk-ZOGY2V3N.js";
4
+ } from "./chunk-LLMPAG56.js";
5
5
  import {
6
6
  shortenSymbol
7
- } from "./chunk-QOV2R2WT.js";
7
+ } from "./chunk-QIXNAB5K.js";
8
8
 
9
9
  // src/queries/call-graph.ts
10
10
  function callGraph(db, symbolPattern) {
@@ -52,4 +52,4 @@ function callGraph(db, symbolPattern) {
52
52
  export {
53
53
  callGraph
54
54
  };
55
- //# sourceMappingURL=chunk-7UCKSQRS.js.map
55
+ //# sourceMappingURL=chunk-YAFWL3RA.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  shortenSymbol
3
- } from "./chunk-QOV2R2WT.js";
3
+ } from "./chunk-QIXNAB5K.js";
4
4
 
5
5
  // src/queries/doc-coverage.ts
6
6
  function docCoverage(db, opts = {}) {
@@ -70,4 +70,4 @@ function docCoverage(db, opts = {}) {
70
70
  export {
71
71
  docCoverage
72
72
  };
73
- //# sourceMappingURL=chunk-FGXRVW7G.js.map
73
+ //# sourceMappingURL=chunk-YZ6L7GFO.js.map