@ryanstark24/sfgraph-core 1.4.0 → 1.6.0

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 (922) hide show
  1. package/dist/analyze/apex-platform.d.ts +23 -0
  2. package/dist/analyze/apex-platform.d.ts.map +1 -0
  3. package/dist/analyze/apex-platform.js +112 -0
  4. package/dist/analyze/apex-platform.js.map +1 -0
  5. package/dist/analyze/audit-graph.d.ts +34 -10
  6. package/dist/analyze/audit-graph.d.ts.map +1 -1
  7. package/dist/analyze/audit-graph.js +360 -39
  8. package/dist/analyze/audit-graph.js.map +1 -1
  9. package/dist/analyze/component-scope.d.ts +82 -0
  10. package/dist/analyze/component-scope.d.ts.map +1 -0
  11. package/dist/analyze/component-scope.js +207 -0
  12. package/dist/analyze/component-scope.js.map +1 -0
  13. package/dist/analyze/containment.d.ts +91 -0
  14. package/dist/analyze/containment.d.ts.map +1 -0
  15. package/dist/analyze/containment.js +175 -0
  16. package/dist/analyze/containment.js.map +1 -0
  17. package/dist/analyze/cross-org.d.ts +35 -0
  18. package/dist/analyze/cross-org.d.ts.map +1 -1
  19. package/dist/analyze/cross-org.js +102 -3
  20. package/dist/analyze/cross-org.js.map +1 -1
  21. package/dist/analyze/dead-code.d.ts +99 -3
  22. package/dist/analyze/dead-code.d.ts.map +1 -1
  23. package/dist/analyze/dead-code.js +282 -10
  24. package/dist/analyze/dead-code.js.map +1 -1
  25. package/dist/analyze/dependencies.d.ts +20 -1
  26. package/dist/analyze/dependencies.d.ts.map +1 -1
  27. package/dist/analyze/dependencies.js +96 -12
  28. package/dist/analyze/dependencies.js.map +1 -1
  29. package/dist/analyze/dependents.d.ts +111 -1
  30. package/dist/analyze/dependents.d.ts.map +1 -1
  31. package/dist/analyze/dependents.js +282 -20
  32. package/dist/analyze/dependents.js.map +1 -1
  33. package/dist/analyze/deployment-manifest/generate.d.ts +24 -0
  34. package/dist/analyze/deployment-manifest/generate.d.ts.map +1 -1
  35. package/dist/analyze/deployment-manifest/generate.js +40 -12
  36. package/dist/analyze/deployment-manifest/generate.js.map +1 -1
  37. package/dist/analyze/deployment-manifest/member-name-formatters.d.ts.map +1 -1
  38. package/dist/analyze/deployment-manifest/member-name-formatters.js +1 -0
  39. package/dist/analyze/deployment-manifest/member-name-formatters.js.map +1 -1
  40. package/dist/analyze/deployment-manifest/member-types.d.ts.map +1 -1
  41. package/dist/analyze/deployment-manifest/member-types.js +2 -0
  42. package/dist/analyze/deployment-manifest/member-types.js.map +1 -1
  43. package/dist/analyze/diff-seeds.d.ts +33 -0
  44. package/dist/analyze/diff-seeds.d.ts.map +1 -0
  45. package/dist/analyze/diff-seeds.js +299 -0
  46. package/dist/analyze/diff-seeds.js.map +1 -0
  47. package/dist/analyze/edge-filters.d.ts +25 -0
  48. package/dist/analyze/edge-filters.d.ts.map +1 -1
  49. package/dist/analyze/edge-filters.js +78 -2
  50. package/dist/analyze/edge-filters.js.map +1 -1
  51. package/dist/analyze/field-scope.d.ts +25 -0
  52. package/dist/analyze/field-scope.d.ts.map +1 -0
  53. package/dist/analyze/field-scope.js +94 -0
  54. package/dist/analyze/field-scope.js.map +1 -0
  55. package/dist/analyze/find-nodes.d.ts +48 -12
  56. package/dist/analyze/find-nodes.d.ts.map +1 -1
  57. package/dist/analyze/find-nodes.js +323 -12
  58. package/dist/analyze/find-nodes.js.map +1 -1
  59. package/dist/analyze/findings.d.ts.map +1 -1
  60. package/dist/analyze/findings.js +14 -0
  61. package/dist/analyze/findings.js.map +1 -1
  62. package/dist/analyze/git-diff.d.ts +27 -1
  63. package/dist/analyze/git-diff.d.ts.map +1 -1
  64. package/dist/analyze/git-diff.js +198 -26
  65. package/dist/analyze/git-diff.js.map +1 -1
  66. package/dist/analyze/governor.d.ts +25 -4
  67. package/dist/analyze/governor.d.ts.map +1 -1
  68. package/dist/analyze/governor.js +82 -18
  69. package/dist/analyze/governor.js.map +1 -1
  70. package/dist/analyze/index.d.ts +6 -0
  71. package/dist/analyze/index.d.ts.map +1 -1
  72. package/dist/analyze/index.js +6 -0
  73. package/dist/analyze/index.js.map +1 -1
  74. package/dist/analyze/path-to-qname.d.ts +9 -0
  75. package/dist/analyze/path-to-qname.d.ts.map +1 -1
  76. package/dist/analyze/path-to-qname.js +58 -15
  77. package/dist/analyze/path-to-qname.js.map +1 -1
  78. package/dist/analyze/populate.d.ts +40 -0
  79. package/dist/analyze/populate.d.ts.map +1 -1
  80. package/dist/analyze/populate.js +148 -48
  81. package/dist/analyze/populate.js.map +1 -1
  82. package/dist/analyze/pseudo-endpoints.d.ts +67 -0
  83. package/dist/analyze/pseudo-endpoints.d.ts.map +1 -0
  84. package/dist/analyze/pseudo-endpoints.js +78 -0
  85. package/dist/analyze/pseudo-endpoints.js.map +1 -0
  86. package/dist/analyze/security.d.ts +2 -0
  87. package/dist/analyze/security.d.ts.map +1 -1
  88. package/dist/analyze/security.js +44 -15
  89. package/dist/analyze/security.js.map +1 -1
  90. package/dist/analyze/test-coverage.d.ts +48 -0
  91. package/dist/analyze/test-coverage.d.ts.map +1 -1
  92. package/dist/analyze/test-coverage.js +72 -1
  93. package/dist/analyze/test-coverage.js.map +1 -1
  94. package/dist/analyze/wip-changed-files.d.ts +88 -0
  95. package/dist/analyze/wip-changed-files.d.ts.map +1 -0
  96. package/dist/analyze/wip-changed-files.js +422 -0
  97. package/dist/analyze/wip-changed-files.js.map +1 -0
  98. package/dist/analyze/wip-impact.d.ts +59 -0
  99. package/dist/analyze/wip-impact.d.ts.map +1 -1
  100. package/dist/analyze/wip-impact.js +199 -126
  101. package/dist/analyze/wip-impact.js.map +1 -1
  102. package/dist/domain/apex-platform.d.ts +10 -0
  103. package/dist/domain/apex-platform.d.ts.map +1 -0
  104. package/dist/domain/apex-platform.js +231 -0
  105. package/dist/domain/apex-platform.js.map +1 -0
  106. package/dist/domain/index.d.ts +2 -0
  107. package/dist/domain/index.d.ts.map +1 -1
  108. package/dist/domain/index.js +2 -0
  109. package/dist/domain/index.js.map +1 -1
  110. package/dist/domain/rel-types.d.ts +7 -0
  111. package/dist/domain/rel-types.d.ts.map +1 -1
  112. package/dist/domain/rel-types.js +7 -0
  113. package/dist/domain/rel-types.js.map +1 -1
  114. package/dist/domain/standard-sobjects.d.ts +20 -0
  115. package/dist/domain/standard-sobjects.d.ts.map +1 -0
  116. package/dist/domain/standard-sobjects.js +183 -0
  117. package/dist/domain/standard-sobjects.js.map +1 -0
  118. package/dist/embedding/cache.d.ts +41 -0
  119. package/dist/embedding/cache.d.ts.map +1 -0
  120. package/dist/embedding/cache.js +69 -0
  121. package/dist/embedding/cache.js.map +1 -0
  122. package/dist/embedding/embed.d.ts +59 -0
  123. package/dist/embedding/embed.d.ts.map +1 -1
  124. package/dist/embedding/embed.js +193 -28
  125. package/dist/embedding/embed.js.map +1 -1
  126. package/dist/embedding/index.d.ts +7 -0
  127. package/dist/embedding/index.d.ts.map +1 -1
  128. package/dist/embedding/index.js +4 -0
  129. package/dist/embedding/index.js.map +1 -1
  130. package/dist/embedding/pool.d.ts +66 -6
  131. package/dist/embedding/pool.d.ts.map +1 -1
  132. package/dist/embedding/pool.js +156 -6
  133. package/dist/embedding/pool.js.map +1 -1
  134. package/dist/embedding/queue.d.ts +166 -9
  135. package/dist/embedding/queue.d.ts.map +1 -1
  136. package/dist/embedding/queue.js +397 -39
  137. package/dist/embedding/queue.js.map +1 -1
  138. package/dist/embedding/tokenize.d.ts +18 -0
  139. package/dist/embedding/tokenize.d.ts.map +1 -0
  140. package/dist/embedding/tokenize.js +43 -0
  141. package/dist/embedding/tokenize.js.map +1 -0
  142. package/dist/embedding/worker.d.ts +0 -5
  143. package/dist/embedding/worker.d.ts.map +1 -1
  144. package/dist/embedding/worker.js +27 -4
  145. package/dist/embedding/worker.js.map +1 -1
  146. package/dist/extractors/filesystem/index.d.ts +21 -1
  147. package/dist/extractors/filesystem/index.d.ts.map +1 -1
  148. package/dist/extractors/filesystem/index.js +195 -38
  149. package/dist/extractors/filesystem/index.js.map +1 -1
  150. package/dist/extractors/filesystem/vlocity-datapacks.d.ts +27 -0
  151. package/dist/extractors/filesystem/vlocity-datapacks.d.ts.map +1 -0
  152. package/dist/extractors/filesystem/vlocity-datapacks.js +201 -0
  153. package/dist/extractors/filesystem/vlocity-datapacks.js.map +1 -0
  154. package/dist/extractors/interfaces/metadata-source.d.ts +29 -0
  155. package/dist/extractors/interfaces/metadata-source.d.ts.map +1 -1
  156. package/dist/extractors/live-org/bulk-retrieve.d.ts +37 -1
  157. package/dist/extractors/live-org/bulk-retrieve.d.ts.map +1 -1
  158. package/dist/extractors/live-org/bulk-retrieve.js +233 -50
  159. package/dist/extractors/live-org/bulk-retrieve.js.map +1 -1
  160. package/dist/extractors/live-org/capabilities.d.ts +15 -0
  161. package/dist/extractors/live-org/capabilities.d.ts.map +1 -1
  162. package/dist/extractors/live-org/capabilities.js +54 -9
  163. package/dist/extractors/live-org/capabilities.js.map +1 -1
  164. package/dist/extractors/live-org/extractors/apex.d.ts +12 -2
  165. package/dist/extractors/live-org/extractors/apex.d.ts.map +1 -1
  166. package/dist/extractors/live-org/extractors/apex.js +151 -80
  167. package/dist/extractors/live-org/extractors/apex.js.map +1 -1
  168. package/dist/extractors/live-org/extractors/custom-settings.d.ts +2 -1
  169. package/dist/extractors/live-org/extractors/custom-settings.d.ts.map +1 -1
  170. package/dist/extractors/live-org/extractors/custom-settings.js +19 -9
  171. package/dist/extractors/live-org/extractors/custom-settings.js.map +1 -1
  172. package/dist/extractors/live-org/extractors/flow.d.ts +2 -1
  173. package/dist/extractors/live-org/extractors/flow.d.ts.map +1 -1
  174. package/dist/extractors/live-org/extractors/flow.js +12 -3
  175. package/dist/extractors/live-org/extractors/flow.js.map +1 -1
  176. package/dist/extractors/live-org/extractors/generic-metadata.d.ts +23 -3
  177. package/dist/extractors/live-org/extractors/generic-metadata.d.ts.map +1 -1
  178. package/dist/extractors/live-org/extractors/generic-metadata.js +110 -25
  179. package/dist/extractors/live-org/extractors/generic-metadata.js.map +1 -1
  180. package/dist/extractors/live-org/extractors/integration.d.ts +2 -1
  181. package/dist/extractors/live-org/extractors/integration.d.ts.map +1 -1
  182. package/dist/extractors/live-org/extractors/integration.js +14 -5
  183. package/dist/extractors/live-org/extractors/integration.js.map +1 -1
  184. package/dist/extractors/live-org/extractors/lwc.d.ts +2 -1
  185. package/dist/extractors/live-org/extractors/lwc.d.ts.map +1 -1
  186. package/dist/extractors/live-org/extractors/lwc.js +14 -6
  187. package/dist/extractors/live-org/extractors/lwc.js.map +1 -1
  188. package/dist/extractors/live-org/extractors/object.d.ts +2 -11
  189. package/dist/extractors/live-org/extractors/object.d.ts.map +1 -1
  190. package/dist/extractors/live-org/extractors/object.js +127 -226
  191. package/dist/extractors/live-org/extractors/object.js.map +1 -1
  192. package/dist/extractors/live-org/extractors/omnistudio.d.ts +3 -0
  193. package/dist/extractors/live-org/extractors/omnistudio.d.ts.map +1 -1
  194. package/dist/extractors/live-org/extractors/omnistudio.js +57 -22
  195. package/dist/extractors/live-org/extractors/omnistudio.js.map +1 -1
  196. package/dist/extractors/live-org/extractors/security.d.ts +12 -1
  197. package/dist/extractors/live-org/extractors/security.d.ts.map +1 -1
  198. package/dist/extractors/live-org/extractors/security.js +29 -7
  199. package/dist/extractors/live-org/extractors/security.js.map +1 -1
  200. package/dist/extractors/live-org/rate-limit.d.ts +7 -1
  201. package/dist/extractors/live-org/rate-limit.d.ts.map +1 -1
  202. package/dist/extractors/live-org/rate-limit.js +53 -10
  203. package/dist/extractors/live-org/rate-limit.js.map +1 -1
  204. package/dist/extractors/live-org/retry.d.ts +136 -0
  205. package/dist/extractors/live-org/retry.d.ts.map +1 -0
  206. package/dist/extractors/live-org/retry.js +416 -0
  207. package/dist/extractors/live-org/retry.js.map +1 -0
  208. package/dist/extractors/live-org/vlocity/runner.d.ts +2 -1
  209. package/dist/extractors/live-org/vlocity/runner.d.ts.map +1 -1
  210. package/dist/extractors/live-org/vlocity/runner.js +95 -67
  211. package/dist/extractors/live-org/vlocity/runner.js.map +1 -1
  212. package/dist/extractors/vlocity-shared/row.d.ts +19 -0
  213. package/dist/extractors/vlocity-shared/row.d.ts.map +1 -0
  214. package/dist/extractors/vlocity-shared/row.js +69 -0
  215. package/dist/extractors/vlocity-shared/row.js.map +1 -0
  216. package/dist/index.d.ts +1 -0
  217. package/dist/index.d.ts.map +1 -1
  218. package/dist/index.js +2 -0
  219. package/dist/index.js.map +1 -1
  220. package/dist/ingest/delta.d.ts +70 -0
  221. package/dist/ingest/delta.d.ts.map +1 -0
  222. package/dist/ingest/delta.js +534 -0
  223. package/dist/ingest/delta.js.map +1 -0
  224. package/dist/ingest/detect-deletions-guard.d.ts +34 -0
  225. package/dist/ingest/detect-deletions-guard.d.ts.map +1 -1
  226. package/dist/ingest/detect-deletions-guard.js +59 -0
  227. package/dist/ingest/detect-deletions-guard.js.map +1 -1
  228. package/dist/ingest/index.d.ts +8 -1
  229. package/dist/ingest/index.d.ts.map +1 -1
  230. package/dist/ingest/index.js +4 -0
  231. package/dist/ingest/index.js.map +1 -1
  232. package/dist/ingest/live-ingest.d.ts +171 -7
  233. package/dist/ingest/live-ingest.d.ts.map +1 -1
  234. package/dist/ingest/live-ingest.js +1014 -249
  235. package/dist/ingest/live-ingest.js.map +1 -1
  236. package/dist/ingest/lock.d.ts +47 -0
  237. package/dist/ingest/lock.d.ts.map +1 -0
  238. package/dist/ingest/lock.js +222 -0
  239. package/dist/ingest/lock.js.map +1 -0
  240. package/dist/ingest/member-rows.d.ts +88 -0
  241. package/dist/ingest/member-rows.d.ts.map +1 -0
  242. package/dist/ingest/member-rows.js +152 -0
  243. package/dist/ingest/member-rows.js.map +1 -0
  244. package/dist/ingest/offline-org.d.ts +8 -0
  245. package/dist/ingest/offline-org.d.ts.map +1 -0
  246. package/dist/ingest/offline-org.js +41 -0
  247. package/dist/ingest/offline-org.js.map +1 -0
  248. package/dist/ingest/parse-member.d.ts +53 -0
  249. package/dist/ingest/parse-member.d.ts.map +1 -0
  250. package/dist/ingest/parse-member.js +276 -0
  251. package/dist/ingest/parse-member.js.map +1 -0
  252. package/dist/ingest/parse-pool.d.ts +139 -0
  253. package/dist/ingest/parse-pool.d.ts.map +1 -0
  254. package/dist/ingest/parse-pool.js +593 -0
  255. package/dist/ingest/parse-pool.js.map +1 -0
  256. package/dist/ingest/parse-worker.d.ts +3 -0
  257. package/dist/ingest/parse-worker.d.ts.map +1 -0
  258. package/dist/ingest/parse-worker.js +100 -0
  259. package/dist/ingest/parse-worker.js.map +1 -0
  260. package/dist/ingest/profile.d.ts +27 -0
  261. package/dist/ingest/profile.d.ts.map +1 -0
  262. package/dist/ingest/profile.js +48 -0
  263. package/dist/ingest/profile.js.map +1 -0
  264. package/dist/ingest/resolver-gates.d.ts +12 -0
  265. package/dist/ingest/resolver-gates.d.ts.map +1 -0
  266. package/dist/ingest/resolver-gates.js +53 -0
  267. package/dist/ingest/resolver-gates.js.map +1 -0
  268. package/dist/parsers/apex/arity-resolver.d.ts +16 -3
  269. package/dist/parsers/apex/arity-resolver.d.ts.map +1 -1
  270. package/dist/parsers/apex/arity-resolver.js +31 -2
  271. package/dist/parsers/apex/arity-resolver.js.map +1 -1
  272. package/dist/parsers/apex/ast-extractor.d.ts +4 -0
  273. package/dist/parsers/apex/ast-extractor.d.ts.map +1 -1
  274. package/dist/parsers/apex/ast-extractor.js +96 -29
  275. package/dist/parsers/apex/ast-extractor.js.map +1 -1
  276. package/dist/parsers/apex/class-refs.d.ts +78 -0
  277. package/dist/parsers/apex/class-refs.d.ts.map +1 -0
  278. package/dist/parsers/apex/class-refs.js +465 -0
  279. package/dist/parsers/apex/class-refs.js.map +1 -0
  280. package/dist/parsers/apex/class.d.ts +158 -0
  281. package/dist/parsers/apex/class.d.ts.map +1 -1
  282. package/dist/parsers/apex/class.js +1025 -183
  283. package/dist/parsers/apex/class.js.map +1 -1
  284. package/dist/parsers/apex/dynamic-soql.d.ts +52 -0
  285. package/dist/parsers/apex/dynamic-soql.d.ts.map +1 -0
  286. package/dist/parsers/apex/dynamic-soql.js +427 -0
  287. package/dist/parsers/apex/dynamic-soql.js.map +1 -0
  288. package/dist/parsers/apex/field-access.d.ts +65 -0
  289. package/dist/parsers/apex/field-access.d.ts.map +1 -0
  290. package/dist/parsers/apex/field-access.js +438 -0
  291. package/dist/parsers/apex/field-access.js.map +1 -0
  292. package/dist/parsers/apex/interface-ref-resolver.d.ts +32 -0
  293. package/dist/parsers/apex/interface-ref-resolver.d.ts.map +1 -0
  294. package/dist/parsers/apex/interface-ref-resolver.js +64 -0
  295. package/dist/parsers/apex/interface-ref-resolver.js.map +1 -0
  296. package/dist/parsers/apex/name-refs.d.ts +83 -0
  297. package/dist/parsers/apex/name-refs.d.ts.map +1 -0
  298. package/dist/parsers/apex/name-refs.js +465 -0
  299. package/dist/parsers/apex/name-refs.js.map +1 -0
  300. package/dist/parsers/apex/page-refs.d.ts +11 -0
  301. package/dist/parsers/apex/page-refs.d.ts.map +1 -0
  302. package/dist/parsers/apex/page-refs.js +34 -0
  303. package/dist/parsers/apex/page-refs.js.map +1 -0
  304. package/dist/parsers/apex/ref-resolver.d.ts +58 -0
  305. package/dist/parsers/apex/ref-resolver.d.ts.map +1 -0
  306. package/dist/parsers/apex/ref-resolver.js +348 -0
  307. package/dist/parsers/apex/ref-resolver.js.map +1 -0
  308. package/dist/parsers/apex/soql-fields.d.ts +75 -0
  309. package/dist/parsers/apex/soql-fields.d.ts.map +1 -0
  310. package/dist/parsers/apex/soql-fields.js +338 -0
  311. package/dist/parsers/apex/soql-fields.js.map +1 -0
  312. package/dist/parsers/apex/trigger.d.ts.map +1 -1
  313. package/dist/parsers/apex/trigger.js +90 -2
  314. package/dist/parsers/apex/trigger.js.map +1 -1
  315. package/dist/parsers/apex/vlocity-calls.d.ts +25 -0
  316. package/dist/parsers/apex/vlocity-calls.d.ts.map +1 -0
  317. package/dist/parsers/apex/vlocity-calls.js +225 -0
  318. package/dist/parsers/apex/vlocity-calls.js.map +1 -0
  319. package/dist/parsers/aura/bundle.d.ts +39 -0
  320. package/dist/parsers/aura/bundle.d.ts.map +1 -0
  321. package/dist/parsers/aura/bundle.js +269 -0
  322. package/dist/parsers/aura/bundle.js.map +1 -0
  323. package/dist/parsers/aura/embed-resolver.d.ts +17 -0
  324. package/dist/parsers/aura/embed-resolver.d.ts.map +1 -0
  325. package/dist/parsers/aura/embed-resolver.js +58 -0
  326. package/dist/parsers/aura/embed-resolver.js.map +1 -0
  327. package/dist/parsers/aura/index.d.ts +4 -0
  328. package/dist/parsers/aura/index.d.ts.map +1 -0
  329. package/dist/parsers/aura/index.js +6 -0
  330. package/dist/parsers/aura/index.js.map +1 -0
  331. package/dist/parsers/common.d.ts +9 -0
  332. package/dist/parsers/common.d.ts.map +1 -1
  333. package/dist/parsers/common.js +17 -0
  334. package/dist/parsers/common.js.map +1 -1
  335. package/dist/parsers/cross-flavor-resolver.js +8 -2
  336. package/dist/parsers/cross-flavor-resolver.js.map +1 -1
  337. package/dist/parsers/flow/invocable-resolver.d.ts.map +1 -1
  338. package/dist/parsers/flow/invocable-resolver.js +2 -0
  339. package/dist/parsers/flow/invocable-resolver.js.map +1 -1
  340. package/dist/parsers/flow/parser.d.ts +9 -0
  341. package/dist/parsers/flow/parser.d.ts.map +1 -1
  342. package/dist/parsers/flow/parser.js +327 -2
  343. package/dist/parsers/flow/parser.js.map +1 -1
  344. package/dist/parsers/flow/relationship-resolver.d.ts +34 -0
  345. package/dist/parsers/flow/relationship-resolver.d.ts.map +1 -0
  346. package/dist/parsers/flow/relationship-resolver.js +199 -0
  347. package/dist/parsers/flow/relationship-resolver.js.map +1 -0
  348. package/dist/parsers/generic/opaque-node-parser.d.ts +5 -1
  349. package/dist/parsers/generic/opaque-node-parser.d.ts.map +1 -1
  350. package/dist/parsers/generic/opaque-node-parser.js +37 -5
  351. package/dist/parsers/generic/opaque-node-parser.js.map +1 -1
  352. package/dist/parsers/generic/reflection-walker.d.ts +7 -0
  353. package/dist/parsers/generic/reflection-walker.d.ts.map +1 -1
  354. package/dist/parsers/generic/reflection-walker.js +37 -10
  355. package/dist/parsers/generic/reflection-walker.js.map +1 -1
  356. package/dist/parsers/hash-salts.d.ts +72 -0
  357. package/dist/parsers/hash-salts.d.ts.map +1 -0
  358. package/dist/parsers/hash-salts.js +91 -0
  359. package/dist/parsers/hash-salts.js.map +1 -0
  360. package/dist/parsers/index.d.ts +2 -0
  361. package/dist/parsers/index.d.ts.map +1 -1
  362. package/dist/parsers/index.js +2 -0
  363. package/dist/parsers/index.js.map +1 -1
  364. package/dist/parsers/lwc/bundle.d.ts +1 -0
  365. package/dist/parsers/lwc/bundle.d.ts.map +1 -1
  366. package/dist/parsers/lwc/bundle.js +37 -2
  367. package/dist/parsers/lwc/bundle.js.map +1 -1
  368. package/dist/parsers/lwc/field-key-resolver.d.ts +32 -0
  369. package/dist/parsers/lwc/field-key-resolver.d.ts.map +1 -0
  370. package/dist/parsers/lwc/field-key-resolver.js +92 -0
  371. package/dist/parsers/lwc/field-key-resolver.js.map +1 -0
  372. package/dist/parsers/lwc/html-visitor.d.ts +1 -1
  373. package/dist/parsers/lwc/html-visitor.d.ts.map +1 -1
  374. package/dist/parsers/lwc/html-visitor.js +78 -1
  375. package/dist/parsers/lwc/html-visitor.js.map +1 -1
  376. package/dist/parsers/lwc/js-visitor.d.ts +16 -0
  377. package/dist/parsers/lwc/js-visitor.d.ts.map +1 -1
  378. package/dist/parsers/lwc/js-visitor.js +348 -10
  379. package/dist/parsers/lwc/js-visitor.js.map +1 -1
  380. package/dist/parsers/lwc/omnidef.d.ts +10 -0
  381. package/dist/parsers/lwc/omnidef.d.ts.map +1 -0
  382. package/dist/parsers/lwc/omnidef.js +127 -0
  383. package/dist/parsers/lwc/omnidef.js.map +1 -0
  384. package/dist/parsers/lwc/xml-meta.d.ts.map +1 -1
  385. package/dist/parsers/lwc/xml-meta.js +16 -1
  386. package/dist/parsers/lwc/xml-meta.js.map +1 -1
  387. package/dist/parsers/object/formula-hop-resolver.d.ts +33 -0
  388. package/dist/parsers/object/formula-hop-resolver.d.ts.map +1 -0
  389. package/dist/parsers/object/formula-hop-resolver.js +60 -0
  390. package/dist/parsers/object/formula-hop-resolver.js.map +1 -0
  391. package/dist/parsers/object/formula-refs.d.ts +40 -0
  392. package/dist/parsers/object/formula-refs.d.ts.map +1 -0
  393. package/dist/parsers/object/formula-refs.js +129 -0
  394. package/dist/parsers/object/formula-refs.js.map +1 -0
  395. package/dist/parsers/object/object.d.ts +3 -0
  396. package/dist/parsers/object/object.d.ts.map +1 -1
  397. package/dist/parsers/object/object.js +53 -52
  398. package/dist/parsers/object/object.js.map +1 -1
  399. package/dist/parsers/omnistudio/data-transform.d.ts.map +1 -1
  400. package/dist/parsers/omnistudio/data-transform.js +2 -2
  401. package/dist/parsers/omnistudio/data-transform.js.map +1 -1
  402. package/dist/parsers/omnistudio/integration-procedure.d.ts.map +1 -1
  403. package/dist/parsers/omnistudio/integration-procedure.js +4 -5
  404. package/dist/parsers/omnistudio/integration-procedure.js.map +1 -1
  405. package/dist/parsers/omnistudio/overlap-detector.d.ts.map +1 -1
  406. package/dist/parsers/omnistudio/overlap-detector.js +27 -2
  407. package/dist/parsers/omnistudio/overlap-detector.js.map +1 -1
  408. package/dist/parsers/omnistudio/process.d.ts.map +1 -1
  409. package/dist/parsers/omnistudio/process.js +4 -5
  410. package/dist/parsers/omnistudio/process.js.map +1 -1
  411. package/dist/parsers/omnistudio/remote-refs.d.ts +11 -0
  412. package/dist/parsers/omnistudio/remote-refs.d.ts.map +1 -0
  413. package/dist/parsers/omnistudio/remote-refs.js +17 -0
  414. package/dist/parsers/omnistudio/remote-refs.js.map +1 -0
  415. package/dist/parsers/omnistudio/ui-card.d.ts.map +1 -1
  416. package/dist/parsers/omnistudio/ui-card.js +4 -5
  417. package/dist/parsers/omnistudio/ui-card.js.map +1 -1
  418. package/dist/parsers/resolver-prune.d.ts +14 -0
  419. package/dist/parsers/resolver-prune.d.ts.map +1 -0
  420. package/dist/parsers/resolver-prune.js +29 -0
  421. package/dist/parsers/resolver-prune.js.map +1 -0
  422. package/dist/parsers/rules/_engine.d.ts.map +1 -1
  423. package/dist/parsers/rules/_engine.js +4 -0
  424. package/dist/parsers/rules/_engine.js.map +1 -1
  425. package/dist/parsers/rules/_engine.ts +3 -0
  426. package/dist/parsers/rules/_loader.d.ts +8 -0
  427. package/dist/parsers/rules/_loader.d.ts.map +1 -1
  428. package/dist/parsers/rules/_loader.js +17 -0
  429. package/dist/parsers/rules/_loader.js.map +1 -1
  430. package/dist/parsers/rules/_loader.ts +19 -0
  431. package/dist/parsers/rules/_schema.d.ts +12 -12
  432. package/dist/parsers/rules/_selectors.d.ts +1 -0
  433. package/dist/parsers/rules/_selectors.d.ts.map +1 -1
  434. package/dist/parsers/rules/_selectors.js +6 -0
  435. package/dist/parsers/rules/_selectors.js.map +1 -1
  436. package/dist/parsers/rules/_selectors.ts +6 -0
  437. package/dist/parsers/rules/apex-component.yml +49 -4
  438. package/dist/parsers/rules/apex-page.yml +49 -4
  439. package/dist/parsers/rules/approval-process.yml +25 -5
  440. package/dist/parsers/rules/custom-metadata-type.yml +7 -7
  441. package/dist/parsers/rules/custom-tab.yml +41 -0
  442. package/dist/parsers/rules/lightning-page.yml +4 -2
  443. package/dist/parsers/rules/workflow.yml +30 -10
  444. package/dist/parsers/vf/refs.d.ts +39 -0
  445. package/dist/parsers/vf/refs.d.ts.map +1 -0
  446. package/dist/parsers/vf/refs.js +152 -0
  447. package/dist/parsers/vf/refs.js.map +1 -0
  448. package/dist/parsers/vlocity/apex-resolver.d.ts +21 -0
  449. package/dist/parsers/vlocity/apex-resolver.d.ts.map +1 -0
  450. package/dist/parsers/vlocity/apex-resolver.js +115 -0
  451. package/dist/parsers/vlocity/apex-resolver.js.map +1 -0
  452. package/dist/parsers/vlocity/common.d.ts +56 -1
  453. package/dist/parsers/vlocity/common.d.ts.map +1 -1
  454. package/dist/parsers/vlocity/common.js +275 -7
  455. package/dist/parsers/vlocity/common.js.map +1 -1
  456. package/dist/parsers/vlocity/data-raptor.d.ts +9 -0
  457. package/dist/parsers/vlocity/data-raptor.d.ts.map +1 -1
  458. package/dist/parsers/vlocity/data-raptor.js +133 -31
  459. package/dist/parsers/vlocity/data-raptor.js.map +1 -1
  460. package/dist/parsers/vlocity/datapack-refs.d.ts +22 -0
  461. package/dist/parsers/vlocity/datapack-refs.d.ts.map +1 -0
  462. package/dist/parsers/vlocity/datapack-refs.js +126 -0
  463. package/dist/parsers/vlocity/datapack-refs.js.map +1 -0
  464. package/dist/parsers/vlocity/dr-relationship-resolver.d.ts +26 -0
  465. package/dist/parsers/vlocity/dr-relationship-resolver.d.ts.map +1 -0
  466. package/dist/parsers/vlocity/dr-relationship-resolver.js +137 -0
  467. package/dist/parsers/vlocity/dr-relationship-resolver.js.map +1 -0
  468. package/dist/parsers/vlocity/integration-procedure.d.ts.map +1 -1
  469. package/dist/parsers/vlocity/integration-procedure.js +15 -48
  470. package/dist/parsers/vlocity/integration-procedure.js.map +1 -1
  471. package/dist/parsers/vlocity/name-match-resolver.d.ts +21 -0
  472. package/dist/parsers/vlocity/name-match-resolver.d.ts.map +1 -0
  473. package/dist/parsers/vlocity/name-match-resolver.js +97 -0
  474. package/dist/parsers/vlocity/name-match-resolver.js.map +1 -0
  475. package/dist/parsers/vlocity/omni-script.d.ts.map +1 -1
  476. package/dist/parsers/vlocity/omni-script.js +18 -32
  477. package/dist/parsers/vlocity/omni-script.js.map +1 -1
  478. package/dist/parsers/vlocity/vlocity-card.d.ts.map +1 -1
  479. package/dist/parsers/vlocity/vlocity-card.js +30 -36
  480. package/dist/parsers/vlocity/vlocity-card.js.map +1 -1
  481. package/dist/render/mermaid/dependency-graph.d.ts.map +1 -1
  482. package/dist/render/mermaid/dependency-graph.js +13 -1
  483. package/dist/render/mermaid/dependency-graph.js.map +1 -1
  484. package/dist/render/mermaid/diff.d.ts.map +1 -1
  485. package/dist/render/mermaid/diff.js +4 -2
  486. package/dist/render/mermaid/diff.js.map +1 -1
  487. package/dist/render/mermaid/shared.d.ts +7 -0
  488. package/dist/render/mermaid/shared.d.ts.map +1 -1
  489. package/dist/render/mermaid/shared.js +15 -6
  490. package/dist/render/mermaid/shared.js.map +1 -1
  491. package/dist/storage/index.d.ts +3 -3
  492. package/dist/storage/index.d.ts.map +1 -1
  493. package/dist/storage/index.js +2 -2
  494. package/dist/storage/index.js.map +1 -1
  495. package/dist/storage/interfaces.d.ts +155 -1
  496. package/dist/storage/interfaces.d.ts.map +1 -1
  497. package/dist/storage/sqlite/graph-store.d.ts +352 -3
  498. package/dist/storage/sqlite/graph-store.d.ts.map +1 -1
  499. package/dist/storage/sqlite/graph-store.js +1683 -74
  500. package/dist/storage/sqlite/graph-store.js.map +1 -1
  501. package/dist/storage/sqlite/migrations.d.ts +11 -0
  502. package/dist/storage/sqlite/migrations.d.ts.map +1 -1
  503. package/dist/storage/sqlite/migrations.js +226 -11
  504. package/dist/storage/sqlite/migrations.js.map +1 -1
  505. package/dist/storage/sqlite/snapshot-store.d.ts +79 -3
  506. package/dist/storage/sqlite/snapshot-store.d.ts.map +1 -1
  507. package/dist/storage/sqlite/snapshot-store.js +500 -100
  508. package/dist/storage/sqlite/snapshot-store.js.map +1 -1
  509. package/dist/storage/sqlite/snapshot-versions.d.ts +51 -0
  510. package/dist/storage/sqlite/snapshot-versions.d.ts.map +1 -0
  511. package/dist/storage/sqlite/snapshot-versions.js +209 -0
  512. package/dist/storage/sqlite/snapshot-versions.js.map +1 -0
  513. package/dist/storage/sqlite/vector-store.d.ts +12 -0
  514. package/dist/storage/sqlite/vector-store.d.ts.map +1 -1
  515. package/dist/storage/sqlite/vector-store.js +57 -14
  516. package/dist/storage/sqlite/vector-store.js.map +1 -1
  517. package/dist/util/process-owner.d.ts +35 -0
  518. package/dist/util/process-owner.d.ts.map +1 -0
  519. package/dist/util/process-owner.js +87 -0
  520. package/dist/util/process-owner.js.map +1 -0
  521. package/dist/util/worker-heap-cap.d.ts +10 -0
  522. package/dist/util/worker-heap-cap.d.ts.map +1 -0
  523. package/dist/util/worker-heap-cap.js +65 -0
  524. package/dist/util/worker-heap-cap.js.map +1 -0
  525. package/package.json +6 -7
  526. package/dist/analyze/__tests__/audit-graph.test.d.ts +0 -2
  527. package/dist/analyze/__tests__/audit-graph.test.d.ts.map +0 -1
  528. package/dist/analyze/__tests__/audit-graph.test.js +0 -201
  529. package/dist/analyze/__tests__/audit-graph.test.js.map +0 -1
  530. package/dist/analyze/__tests__/cross-org-two-store.test.d.ts +0 -2
  531. package/dist/analyze/__tests__/cross-org-two-store.test.d.ts.map +0 -1
  532. package/dist/analyze/__tests__/cross-org-two-store.test.js +0 -68
  533. package/dist/analyze/__tests__/cross-org-two-store.test.js.map +0 -1
  534. package/dist/analyze/__tests__/dead-code-confidence.test.d.ts +0 -2
  535. package/dist/analyze/__tests__/dead-code-confidence.test.d.ts.map +0 -1
  536. package/dist/analyze/__tests__/dead-code-confidence.test.js +0 -66
  537. package/dist/analyze/__tests__/dead-code-confidence.test.js.map +0 -1
  538. package/dist/analyze/__tests__/deployment-manifest.test.d.ts +0 -2
  539. package/dist/analyze/__tests__/deployment-manifest.test.d.ts.map +0 -1
  540. package/dist/analyze/__tests__/deployment-manifest.test.js +0 -66
  541. package/dist/analyze/__tests__/deployment-manifest.test.js.map +0 -1
  542. package/dist/analyze/__tests__/edge-filters.test.d.ts +0 -2
  543. package/dist/analyze/__tests__/edge-filters.test.d.ts.map +0 -1
  544. package/dist/analyze/__tests__/edge-filters.test.js +0 -66
  545. package/dist/analyze/__tests__/edge-filters.test.js.map +0 -1
  546. package/dist/analyze/__tests__/find-nodes.test.d.ts +0 -2
  547. package/dist/analyze/__tests__/find-nodes.test.d.ts.map +0 -1
  548. package/dist/analyze/__tests__/find-nodes.test.js +0 -129
  549. package/dist/analyze/__tests__/find-nodes.test.js.map +0 -1
  550. package/dist/analyze/__tests__/findings.test.d.ts +0 -2
  551. package/dist/analyze/__tests__/findings.test.d.ts.map +0 -1
  552. package/dist/analyze/__tests__/findings.test.js +0 -100
  553. package/dist/analyze/__tests__/findings.test.js.map +0 -1
  554. package/dist/analyze/__tests__/governor-risks-detection.test.d.ts +0 -2
  555. package/dist/analyze/__tests__/governor-risks-detection.test.d.ts.map +0 -1
  556. package/dist/analyze/__tests__/governor-risks-detection.test.js +0 -160
  557. package/dist/analyze/__tests__/governor-risks-detection.test.js.map +0 -1
  558. package/dist/analyze/__tests__/populate.test.d.ts +0 -2
  559. package/dist/analyze/__tests__/populate.test.d.ts.map +0 -1
  560. package/dist/analyze/__tests__/populate.test.js +0 -129
  561. package/dist/analyze/__tests__/populate.test.js.map +0 -1
  562. package/dist/analyze/__tests__/security-fls-filter.test.d.ts +0 -2
  563. package/dist/analyze/__tests__/security-fls-filter.test.d.ts.map +0 -1
  564. package/dist/analyze/__tests__/security-fls-filter.test.js +0 -23
  565. package/dist/analyze/__tests__/security-fls-filter.test.js.map +0 -1
  566. package/dist/analyze/__tests__/traversal-caps.test.d.ts +0 -2
  567. package/dist/analyze/__tests__/traversal-caps.test.d.ts.map +0 -1
  568. package/dist/analyze/__tests__/traversal-caps.test.js +0 -129
  569. package/dist/analyze/__tests__/traversal-caps.test.js.map +0 -1
  570. package/dist/analyze/__tests__/wip-impact.test.d.ts +0 -2
  571. package/dist/analyze/__tests__/wip-impact.test.d.ts.map +0 -1
  572. package/dist/analyze/__tests__/wip-impact.test.js +0 -134
  573. package/dist/analyze/__tests__/wip-impact.test.js.map +0 -1
  574. package/dist/embedding/__tests__/embed.test.d.ts +0 -2
  575. package/dist/embedding/__tests__/embed.test.d.ts.map +0 -1
  576. package/dist/embedding/__tests__/embed.test.js +0 -72
  577. package/dist/embedding/__tests__/embed.test.js.map +0 -1
  578. package/dist/embedding/__tests__/queue.test.d.ts +0 -2
  579. package/dist/embedding/__tests__/queue.test.d.ts.map +0 -1
  580. package/dist/embedding/__tests__/queue.test.js +0 -64
  581. package/dist/embedding/__tests__/queue.test.js.map +0 -1
  582. package/dist/extractors/__tests__/network-egress.test.d.ts +0 -2
  583. package/dist/extractors/__tests__/network-egress.test.d.ts.map +0 -1
  584. package/dist/extractors/__tests__/network-egress.test.js +0 -32
  585. package/dist/extractors/__tests__/network-egress.test.js.map +0 -1
  586. package/dist/extractors/filesystem/__tests__/filesystem.test.d.ts +0 -2
  587. package/dist/extractors/filesystem/__tests__/filesystem.test.d.ts.map +0 -1
  588. package/dist/extractors/filesystem/__tests__/filesystem.test.js +0 -96
  589. package/dist/extractors/filesystem/__tests__/filesystem.test.js.map +0 -1
  590. package/dist/extractors/live-org/__tests__/_jsforce-mock.d.ts +0 -38
  591. package/dist/extractors/live-org/__tests__/_jsforce-mock.d.ts.map +0 -1
  592. package/dist/extractors/live-org/__tests__/_jsforce-mock.js +0 -96
  593. package/dist/extractors/live-org/__tests__/_jsforce-mock.js.map +0 -1
  594. package/dist/extractors/live-org/__tests__/auth.test.d.ts +0 -2
  595. package/dist/extractors/live-org/__tests__/auth.test.d.ts.map +0 -1
  596. package/dist/extractors/live-org/__tests__/auth.test.js +0 -85
  597. package/dist/extractors/live-org/__tests__/auth.test.js.map +0 -1
  598. package/dist/extractors/live-org/__tests__/bulk-retrieve.test.d.ts +0 -2
  599. package/dist/extractors/live-org/__tests__/bulk-retrieve.test.d.ts.map +0 -1
  600. package/dist/extractors/live-org/__tests__/bulk-retrieve.test.js +0 -150
  601. package/dist/extractors/live-org/__tests__/bulk-retrieve.test.js.map +0 -1
  602. package/dist/extractors/live-org/__tests__/capabilities.test.d.ts +0 -2
  603. package/dist/extractors/live-org/__tests__/capabilities.test.d.ts.map +0 -1
  604. package/dist/extractors/live-org/__tests__/capabilities.test.js +0 -54
  605. package/dist/extractors/live-org/__tests__/capabilities.test.js.map +0 -1
  606. package/dist/extractors/live-org/__tests__/custom-settings.test.d.ts +0 -2
  607. package/dist/extractors/live-org/__tests__/custom-settings.test.d.ts.map +0 -1
  608. package/dist/extractors/live-org/__tests__/custom-settings.test.js +0 -79
  609. package/dist/extractors/live-org/__tests__/custom-settings.test.js.map +0 -1
  610. package/dist/extractors/live-org/__tests__/discovery.test.d.ts +0 -2
  611. package/dist/extractors/live-org/__tests__/discovery.test.d.ts.map +0 -1
  612. package/dist/extractors/live-org/__tests__/discovery.test.js +0 -55
  613. package/dist/extractors/live-org/__tests__/discovery.test.js.map +0 -1
  614. package/dist/extractors/live-org/__tests__/dispatch.test.d.ts +0 -2
  615. package/dist/extractors/live-org/__tests__/dispatch.test.d.ts.map +0 -1
  616. package/dist/extractors/live-org/__tests__/dispatch.test.js +0 -68
  617. package/dist/extractors/live-org/__tests__/dispatch.test.js.map +0 -1
  618. package/dist/extractors/live-org/__tests__/extractor-enrichment.test.d.ts +0 -2
  619. package/dist/extractors/live-org/__tests__/extractor-enrichment.test.d.ts.map +0 -1
  620. package/dist/extractors/live-org/__tests__/extractor-enrichment.test.js +0 -374
  621. package/dist/extractors/live-org/__tests__/extractor-enrichment.test.js.map +0 -1
  622. package/dist/extractors/live-org/__tests__/liveness.test.d.ts +0 -2
  623. package/dist/extractors/live-org/__tests__/liveness.test.d.ts.map +0 -1
  624. package/dist/extractors/live-org/__tests__/liveness.test.js +0 -148
  625. package/dist/extractors/live-org/__tests__/liveness.test.js.map +0 -1
  626. package/dist/extractors/live-org/__tests__/mcd-baseline.test.d.ts +0 -2
  627. package/dist/extractors/live-org/__tests__/mcd-baseline.test.d.ts.map +0 -1
  628. package/dist/extractors/live-org/__tests__/mcd-baseline.test.js +0 -177
  629. package/dist/extractors/live-org/__tests__/mcd-baseline.test.js.map +0 -1
  630. package/dist/extractors/live-org/__tests__/metadata-read-batch.test.d.ts +0 -2
  631. package/dist/extractors/live-org/__tests__/metadata-read-batch.test.d.ts.map +0 -1
  632. package/dist/extractors/live-org/__tests__/metadata-read-batch.test.js +0 -75
  633. package/dist/extractors/live-org/__tests__/metadata-read-batch.test.js.map +0 -1
  634. package/dist/extractors/live-org/__tests__/omnistudio-retrieve.test.d.ts +0 -2
  635. package/dist/extractors/live-org/__tests__/omnistudio-retrieve.test.d.ts.map +0 -1
  636. package/dist/extractors/live-org/__tests__/omnistudio-retrieve.test.js +0 -135
  637. package/dist/extractors/live-org/__tests__/omnistudio-retrieve.test.js.map +0 -1
  638. package/dist/extractors/live-org/__tests__/pools.test.d.ts +0 -2
  639. package/dist/extractors/live-org/__tests__/pools.test.d.ts.map +0 -1
  640. package/dist/extractors/live-org/__tests__/pools.test.js +0 -78
  641. package/dist/extractors/live-org/__tests__/pools.test.js.map +0 -1
  642. package/dist/extractors/live-org/__tests__/rate-limit.test.d.ts +0 -2
  643. package/dist/extractors/live-org/__tests__/rate-limit.test.d.ts.map +0 -1
  644. package/dist/extractors/live-org/__tests__/rate-limit.test.js +0 -73
  645. package/dist/extractors/live-org/__tests__/rate-limit.test.js.map +0 -1
  646. package/dist/extractors/live-org/__tests__/read-only-proxy.test.d.ts +0 -2
  647. package/dist/extractors/live-org/__tests__/read-only-proxy.test.d.ts.map +0 -1
  648. package/dist/extractors/live-org/__tests__/read-only-proxy.test.js +0 -376
  649. package/dist/extractors/live-org/__tests__/read-only-proxy.test.js.map +0 -1
  650. package/dist/extractors/live-org/__tests__/soql-rebatch.test.d.ts +0 -2
  651. package/dist/extractors/live-org/__tests__/soql-rebatch.test.d.ts.map +0 -1
  652. package/dist/extractors/live-org/__tests__/soql-rebatch.test.js +0 -118
  653. package/dist/extractors/live-org/__tests__/soql-rebatch.test.js.map +0 -1
  654. package/dist/extractors/live-org/__tests__/source-member.test.d.ts +0 -2
  655. package/dist/extractors/live-org/__tests__/source-member.test.d.ts.map +0 -1
  656. package/dist/extractors/live-org/__tests__/source-member.test.js +0 -84
  657. package/dist/extractors/live-org/__tests__/source-member.test.js.map +0 -1
  658. package/dist/extractors/live-org/__tests__/stop-waiting.test.d.ts +0 -2
  659. package/dist/extractors/live-org/__tests__/stop-waiting.test.d.ts.map +0 -1
  660. package/dist/extractors/live-org/__tests__/stop-waiting.test.js +0 -243
  661. package/dist/extractors/live-org/__tests__/stop-waiting.test.js.map +0 -1
  662. package/dist/extractors/live-org/__tests__/vlocity-runner.test.d.ts +0 -2
  663. package/dist/extractors/live-org/__tests__/vlocity-runner.test.d.ts.map +0 -1
  664. package/dist/extractors/live-org/__tests__/vlocity-runner.test.js +0 -115
  665. package/dist/extractors/live-org/__tests__/vlocity-runner.test.js.map +0 -1
  666. package/dist/extractors/live-org/__tests__/watchdog-budgets.test.d.ts +0 -2
  667. package/dist/extractors/live-org/__tests__/watchdog-budgets.test.d.ts.map +0 -1
  668. package/dist/extractors/live-org/__tests__/watchdog-budgets.test.js +0 -40
  669. package/dist/extractors/live-org/__tests__/watchdog-budgets.test.js.map +0 -1
  670. package/dist/extractors/live-org/__tests__/wedge-isolation.test.d.ts +0 -2
  671. package/dist/extractors/live-org/__tests__/wedge-isolation.test.d.ts.map +0 -1
  672. package/dist/extractors/live-org/__tests__/wedge-isolation.test.js +0 -270
  673. package/dist/extractors/live-org/__tests__/wedge-isolation.test.js.map +0 -1
  674. package/dist/extractors/live-org/extractors/__tests__/apex.test.d.ts +0 -2
  675. package/dist/extractors/live-org/extractors/__tests__/apex.test.d.ts.map +0 -1
  676. package/dist/extractors/live-org/extractors/__tests__/apex.test.js +0 -73
  677. package/dist/extractors/live-org/extractors/__tests__/apex.test.js.map +0 -1
  678. package/dist/extractors/live-org/extractors/__tests__/lwc.parallel.test.d.ts +0 -2
  679. package/dist/extractors/live-org/extractors/__tests__/lwc.parallel.test.d.ts.map +0 -1
  680. package/dist/extractors/live-org/extractors/__tests__/lwc.parallel.test.js +0 -183
  681. package/dist/extractors/live-org/extractors/__tests__/lwc.parallel.test.js.map +0 -1
  682. package/dist/ingest/__tests__/config-values.test.d.ts +0 -2
  683. package/dist/ingest/__tests__/config-values.test.d.ts.map +0 -1
  684. package/dist/ingest/__tests__/config-values.test.js +0 -65
  685. package/dist/ingest/__tests__/config-values.test.js.map +0 -1
  686. package/dist/ingest/__tests__/full-sync-deletion.test.d.ts +0 -2
  687. package/dist/ingest/__tests__/full-sync-deletion.test.d.ts.map +0 -1
  688. package/dist/ingest/__tests__/full-sync-deletion.test.js +0 -207
  689. package/dist/ingest/__tests__/full-sync-deletion.test.js.map +0 -1
  690. package/dist/ingest/__tests__/incremental-deletion.test.d.ts +0 -2
  691. package/dist/ingest/__tests__/incremental-deletion.test.d.ts.map +0 -1
  692. package/dist/ingest/__tests__/incremental-deletion.test.js +0 -92
  693. package/dist/ingest/__tests__/incremental-deletion.test.js.map +0 -1
  694. package/dist/ingest/__tests__/live-ingest.detect-deletions-guard.test.d.ts +0 -10
  695. package/dist/ingest/__tests__/live-ingest.detect-deletions-guard.test.d.ts.map +0 -1
  696. package/dist/ingest/__tests__/live-ingest.detect-deletions-guard.test.js +0 -251
  697. package/dist/ingest/__tests__/live-ingest.detect-deletions-guard.test.js.map +0 -1
  698. package/dist/ingest/__tests__/live-ingest.test.d.ts +0 -2
  699. package/dist/ingest/__tests__/live-ingest.test.d.ts.map +0 -1
  700. package/dist/ingest/__tests__/live-ingest.test.js +0 -155
  701. package/dist/ingest/__tests__/live-ingest.test.js.map +0 -1
  702. package/dist/ingest/__tests__/multi-org-orchestrator.test.d.ts +0 -2
  703. package/dist/ingest/__tests__/multi-org-orchestrator.test.d.ts.map +0 -1
  704. package/dist/ingest/__tests__/multi-org-orchestrator.test.js +0 -108
  705. package/dist/ingest/__tests__/multi-org-orchestrator.test.js.map +0 -1
  706. package/dist/ingest/__tests__/parser-dispatch.test.d.ts +0 -2
  707. package/dist/ingest/__tests__/parser-dispatch.test.d.ts.map +0 -1
  708. package/dist/ingest/__tests__/parser-dispatch.test.js +0 -55
  709. package/dist/ingest/__tests__/parser-dispatch.test.js.map +0 -1
  710. package/dist/ingest/__tests__/read-only-wrapping.test.d.ts +0 -2
  711. package/dist/ingest/__tests__/read-only-wrapping.test.d.ts.map +0 -1
  712. package/dist/ingest/__tests__/read-only-wrapping.test.js +0 -62
  713. package/dist/ingest/__tests__/read-only-wrapping.test.js.map +0 -1
  714. package/dist/ingest/__tests__/vlocity-dispatch-integration.test.d.ts +0 -2
  715. package/dist/ingest/__tests__/vlocity-dispatch-integration.test.d.ts.map +0 -1
  716. package/dist/ingest/__tests__/vlocity-dispatch-integration.test.js +0 -134
  717. package/dist/ingest/__tests__/vlocity-dispatch-integration.test.js.map +0 -1
  718. package/dist/parsers/__tests__/_harness.d.ts +0 -13
  719. package/dist/parsers/__tests__/_harness.d.ts.map +0 -1
  720. package/dist/parsers/__tests__/_harness.js +0 -84
  721. package/dist/parsers/__tests__/_harness.js.map +0 -1
  722. package/dist/parsers/__tests__/apex.golden.test.d.ts +0 -2
  723. package/dist/parsers/__tests__/apex.golden.test.d.ts.map +0 -1
  724. package/dist/parsers/__tests__/apex.golden.test.js +0 -28
  725. package/dist/parsers/__tests__/apex.golden.test.js.map +0 -1
  726. package/dist/parsers/__tests__/cross-flavor.test.d.ts +0 -2
  727. package/dist/parsers/__tests__/cross-flavor.test.d.ts.map +0 -1
  728. package/dist/parsers/__tests__/cross-flavor.test.js +0 -56
  729. package/dist/parsers/__tests__/cross-flavor.test.js.map +0 -1
  730. package/dist/parsers/__tests__/datatransform-structured.test.d.ts +0 -2
  731. package/dist/parsers/__tests__/datatransform-structured.test.d.ts.map +0 -1
  732. package/dist/parsers/__tests__/datatransform-structured.test.js +0 -147
  733. package/dist/parsers/__tests__/datatransform-structured.test.js.map +0 -1
  734. package/dist/parsers/__tests__/edge-provenance.test.d.ts +0 -2
  735. package/dist/parsers/__tests__/edge-provenance.test.d.ts.map +0 -1
  736. package/dist/parsers/__tests__/edge-provenance.test.js +0 -47
  737. package/dist/parsers/__tests__/edge-provenance.test.js.map +0 -1
  738. package/dist/parsers/__tests__/flow.golden.test.d.ts +0 -2
  739. package/dist/parsers/__tests__/flow.golden.test.d.ts.map +0 -1
  740. package/dist/parsers/__tests__/flow.golden.test.js +0 -17
  741. package/dist/parsers/__tests__/flow.golden.test.js.map +0 -1
  742. package/dist/parsers/__tests__/integration.golden.test.d.ts +0 -2
  743. package/dist/parsers/__tests__/integration.golden.test.d.ts.map +0 -1
  744. package/dist/parsers/__tests__/integration.golden.test.js +0 -31
  745. package/dist/parsers/__tests__/integration.golden.test.js.map +0 -1
  746. package/dist/parsers/__tests__/long-tail.golden.test.d.ts +0 -2
  747. package/dist/parsers/__tests__/long-tail.golden.test.d.ts.map +0 -1
  748. package/dist/parsers/__tests__/long-tail.golden.test.js +0 -115
  749. package/dist/parsers/__tests__/long-tail.golden.test.js.map +0 -1
  750. package/dist/parsers/__tests__/lwc-bindings.test.d.ts +0 -2
  751. package/dist/parsers/__tests__/lwc-bindings.test.d.ts.map +0 -1
  752. package/dist/parsers/__tests__/lwc-bindings.test.js +0 -149
  753. package/dist/parsers/__tests__/lwc-bindings.test.js.map +0 -1
  754. package/dist/parsers/__tests__/lwc.golden.test.d.ts +0 -2
  755. package/dist/parsers/__tests__/lwc.golden.test.d.ts.map +0 -1
  756. package/dist/parsers/__tests__/lwc.golden.test.js +0 -16
  757. package/dist/parsers/__tests__/lwc.golden.test.js.map +0 -1
  758. package/dist/parsers/__tests__/mcd-gap-fills.test.d.ts +0 -2
  759. package/dist/parsers/__tests__/mcd-gap-fills.test.d.ts.map +0 -1
  760. package/dist/parsers/__tests__/mcd-gap-fills.test.js +0 -75
  761. package/dist/parsers/__tests__/mcd-gap-fills.test.js.map +0 -1
  762. package/dist/parsers/__tests__/object-inline-fields.test.d.ts +0 -2
  763. package/dist/parsers/__tests__/object-inline-fields.test.d.ts.map +0 -1
  764. package/dist/parsers/__tests__/object-inline-fields.test.js +0 -115
  765. package/dist/parsers/__tests__/object-inline-fields.test.js.map +0 -1
  766. package/dist/parsers/__tests__/object.golden.test.d.ts +0 -2
  767. package/dist/parsers/__tests__/object.golden.test.d.ts.map +0 -1
  768. package/dist/parsers/__tests__/object.golden.test.js +0 -33
  769. package/dist/parsers/__tests__/object.golden.test.js.map +0 -1
  770. package/dist/parsers/__tests__/omnistudio-overlap.test.d.ts +0 -2
  771. package/dist/parsers/__tests__/omnistudio-overlap.test.d.ts.map +0 -1
  772. package/dist/parsers/__tests__/omnistudio-overlap.test.js +0 -163
  773. package/dist/parsers/__tests__/omnistudio-overlap.test.js.map +0 -1
  774. package/dist/parsers/__tests__/omnistudio.golden.test.d.ts +0 -2
  775. package/dist/parsers/__tests__/omnistudio.golden.test.d.ts.map +0 -1
  776. package/dist/parsers/__tests__/omnistudio.golden.test.js +0 -53
  777. package/dist/parsers/__tests__/omnistudio.golden.test.js.map +0 -1
  778. package/dist/parsers/__tests__/reflection-walker.test.d.ts +0 -2
  779. package/dist/parsers/__tests__/reflection-walker.test.d.ts.map +0 -1
  780. package/dist/parsers/__tests__/reflection-walker.test.js +0 -162
  781. package/dist/parsers/__tests__/reflection-walker.test.js.map +0 -1
  782. package/dist/parsers/__tests__/registry.test.d.ts +0 -2
  783. package/dist/parsers/__tests__/registry.test.d.ts.map +0 -1
  784. package/dist/parsers/__tests__/registry.test.js +0 -23
  785. package/dist/parsers/__tests__/registry.test.js.map +0 -1
  786. package/dist/parsers/__tests__/security.golden.test.d.ts +0 -2
  787. package/dist/parsers/__tests__/security.golden.test.d.ts.map +0 -1
  788. package/dist/parsers/__tests__/security.golden.test.js +0 -31
  789. package/dist/parsers/__tests__/security.golden.test.js.map +0 -1
  790. package/dist/parsers/__tests__/vlocity.golden.test.d.ts +0 -2
  791. package/dist/parsers/__tests__/vlocity.golden.test.d.ts.map +0 -1
  792. package/dist/parsers/__tests__/vlocity.golden.test.js +0 -105
  793. package/dist/parsers/__tests__/vlocity.golden.test.js.map +0 -1
  794. package/dist/parsers/__tests__/worker-pool.test.d.ts +0 -2
  795. package/dist/parsers/__tests__/worker-pool.test.d.ts.map +0 -1
  796. package/dist/parsers/__tests__/worker-pool.test.js +0 -48
  797. package/dist/parsers/__tests__/worker-pool.test.js.map +0 -1
  798. package/dist/parsers/apex/__tests__/arity-resolver.test.d.ts +0 -2
  799. package/dist/parsers/apex/__tests__/arity-resolver.test.d.ts.map +0 -1
  800. package/dist/parsers/apex/__tests__/arity-resolver.test.js +0 -135
  801. package/dist/parsers/apex/__tests__/arity-resolver.test.js.map +0 -1
  802. package/dist/parsers/apex/__tests__/ast-extractor.test.d.ts +0 -2
  803. package/dist/parsers/apex/__tests__/ast-extractor.test.d.ts.map +0 -1
  804. package/dist/parsers/apex/__tests__/ast-extractor.test.js +0 -206
  805. package/dist/parsers/apex/__tests__/ast-extractor.test.js.map +0 -1
  806. package/dist/parsers/apex/__tests__/empty-body.test.d.ts +0 -2
  807. package/dist/parsers/apex/__tests__/empty-body.test.d.ts.map +0 -1
  808. package/dist/parsers/apex/__tests__/empty-body.test.js +0 -40
  809. package/dist/parsers/apex/__tests__/empty-body.test.js.map +0 -1
  810. package/dist/parsers/apex/__tests__/is-test-attribute.test.d.ts +0 -2
  811. package/dist/parsers/apex/__tests__/is-test-attribute.test.d.ts.map +0 -1
  812. package/dist/parsers/apex/__tests__/is-test-attribute.test.js +0 -56
  813. package/dist/parsers/apex/__tests__/is-test-attribute.test.js.map +0 -1
  814. package/dist/parsers/apex/__tests__/regex-arg-count.test.d.ts +0 -2
  815. package/dist/parsers/apex/__tests__/regex-arg-count.test.d.ts.map +0 -1
  816. package/dist/parsers/apex/__tests__/regex-arg-count.test.js +0 -82
  817. package/dist/parsers/apex/__tests__/regex-arg-count.test.js.map +0 -1
  818. package/dist/parsers/apex/__tests__/regex-inloop.test.d.ts +0 -2
  819. package/dist/parsers/apex/__tests__/regex-inloop.test.d.ts.map +0 -1
  820. package/dist/parsers/apex/__tests__/regex-inloop.test.js +0 -70
  821. package/dist/parsers/apex/__tests__/regex-inloop.test.js.map +0 -1
  822. package/dist/parsers/flow/__tests__/invocable-resolver.test.d.ts +0 -2
  823. package/dist/parsers/flow/__tests__/invocable-resolver.test.d.ts.map +0 -1
  824. package/dist/parsers/flow/__tests__/invocable-resolver.test.js +0 -91
  825. package/dist/parsers/flow/__tests__/invocable-resolver.test.js.map +0 -1
  826. package/dist/parsers/rules/__tests__/applies-to.test.d.ts +0 -2
  827. package/dist/parsers/rules/__tests__/applies-to.test.d.ts.map +0 -1
  828. package/dist/parsers/rules/__tests__/applies-to.test.js +0 -31
  829. package/dist/parsers/rules/__tests__/applies-to.test.js.map +0 -1
  830. package/dist/parsers/rules/__tests__/applies-to.test.ts +0 -40
  831. package/dist/parsers/rules/__tests__/engine.test.d.ts +0 -2
  832. package/dist/parsers/rules/__tests__/engine.test.d.ts.map +0 -1
  833. package/dist/parsers/rules/__tests__/engine.test.js +0 -127
  834. package/dist/parsers/rules/__tests__/engine.test.js.map +0 -1
  835. package/dist/parsers/rules/__tests__/engine.test.ts +0 -138
  836. package/dist/parsers/rules/__tests__/loader.test.d.ts +0 -2
  837. package/dist/parsers/rules/__tests__/loader.test.d.ts.map +0 -1
  838. package/dist/parsers/rules/__tests__/loader.test.js +0 -31
  839. package/dist/parsers/rules/__tests__/loader.test.js.map +0 -1
  840. package/dist/parsers/rules/__tests__/loader.test.ts +0 -37
  841. package/dist/parsers/rules/__tests__/schema.test.d.ts +0 -2
  842. package/dist/parsers/rules/__tests__/schema.test.d.ts.map +0 -1
  843. package/dist/parsers/rules/__tests__/schema.test.js +0 -33
  844. package/dist/parsers/rules/__tests__/schema.test.js.map +0 -1
  845. package/dist/parsers/rules/__tests__/schema.test.ts +0 -37
  846. package/dist/parsers/rules/__tests__/selectors.test.d.ts +0 -2
  847. package/dist/parsers/rules/__tests__/selectors.test.d.ts.map +0 -1
  848. package/dist/parsers/rules/__tests__/selectors.test.js +0 -51
  849. package/dist/parsers/rules/__tests__/selectors.test.js.map +0 -1
  850. package/dist/parsers/rules/__tests__/selectors.test.ts +0 -62
  851. package/dist/render/__tests__/sarif.test.d.ts +0 -2
  852. package/dist/render/__tests__/sarif.test.d.ts.map +0 -1
  853. package/dist/render/__tests__/sarif.test.js +0 -126
  854. package/dist/render/__tests__/sarif.test.js.map +0 -1
  855. package/dist/render/mermaid/__tests__/mermaid.test.d.ts +0 -2
  856. package/dist/render/mermaid/__tests__/mermaid.test.d.ts.map +0 -1
  857. package/dist/render/mermaid/__tests__/mermaid.test.js +0 -74
  858. package/dist/render/mermaid/__tests__/mermaid.test.js.map +0 -1
  859. package/dist/storage/__tests__/analysis-tables-migration.test.d.ts +0 -2
  860. package/dist/storage/__tests__/analysis-tables-migration.test.d.ts.map +0 -1
  861. package/dist/storage/__tests__/analysis-tables-migration.test.js +0 -44
  862. package/dist/storage/__tests__/analysis-tables-migration.test.js.map +0 -1
  863. package/dist/storage/__tests__/graph-store.test.d.ts +0 -2
  864. package/dist/storage/__tests__/graph-store.test.d.ts.map +0 -1
  865. package/dist/storage/__tests__/graph-store.test.js +0 -145
  866. package/dist/storage/__tests__/graph-store.test.js.map +0 -1
  867. package/dist/storage/__tests__/identifier.test.d.ts +0 -2
  868. package/dist/storage/__tests__/identifier.test.d.ts.map +0 -1
  869. package/dist/storage/__tests__/identifier.test.js +0 -35
  870. package/dist/storage/__tests__/identifier.test.js.map +0 -1
  871. package/dist/storage/__tests__/load-better-sqlite3.test.d.ts +0 -2
  872. package/dist/storage/__tests__/load-better-sqlite3.test.d.ts.map +0 -1
  873. package/dist/storage/__tests__/load-better-sqlite3.test.js +0 -65
  874. package/dist/storage/__tests__/load-better-sqlite3.test.js.map +0 -1
  875. package/dist/storage/__tests__/migrations.test.d.ts +0 -2
  876. package/dist/storage/__tests__/migrations.test.d.ts.map +0 -1
  877. package/dist/storage/__tests__/migrations.test.js +0 -93
  878. package/dist/storage/__tests__/migrations.test.js.map +0 -1
  879. package/dist/storage/__tests__/perf-50k.test.d.ts +0 -2
  880. package/dist/storage/__tests__/perf-50k.test.d.ts.map +0 -1
  881. package/dist/storage/__tests__/perf-50k.test.js +0 -67
  882. package/dist/storage/__tests__/perf-50k.test.js.map +0 -1
  883. package/dist/storage/__tests__/rename-stability.test.d.ts +0 -2
  884. package/dist/storage/__tests__/rename-stability.test.d.ts.map +0 -1
  885. package/dist/storage/__tests__/rename-stability.test.js +0 -135
  886. package/dist/storage/__tests__/rename-stability.test.js.map +0 -1
  887. package/dist/storage/__tests__/snapshot-store.test.d.ts +0 -2
  888. package/dist/storage/__tests__/snapshot-store.test.d.ts.map +0 -1
  889. package/dist/storage/__tests__/snapshot-store.test.js +0 -117
  890. package/dist/storage/__tests__/snapshot-store.test.js.map +0 -1
  891. package/dist/storage/__tests__/snippets.test.d.ts +0 -2
  892. package/dist/storage/__tests__/snippets.test.d.ts.map +0 -1
  893. package/dist/storage/__tests__/snippets.test.js +0 -88
  894. package/dist/storage/__tests__/snippets.test.js.map +0 -1
  895. package/dist/storage/__tests__/sync-generation.test.d.ts +0 -2
  896. package/dist/storage/__tests__/sync-generation.test.d.ts.map +0 -1
  897. package/dist/storage/__tests__/sync-generation.test.js +0 -159
  898. package/dist/storage/__tests__/sync-generation.test.js.map +0 -1
  899. package/dist/storage/__tests__/vector-store-load-failure.test.d.ts +0 -2
  900. package/dist/storage/__tests__/vector-store-load-failure.test.d.ts.map +0 -1
  901. package/dist/storage/__tests__/vector-store-load-failure.test.js +0 -42
  902. package/dist/storage/__tests__/vector-store-load-failure.test.js.map +0 -1
  903. package/dist/storage/__tests__/vector-store.test.d.ts +0 -2
  904. package/dist/storage/__tests__/vector-store.test.d.ts.map +0 -1
  905. package/dist/storage/__tests__/vector-store.test.js +0 -87
  906. package/dist/storage/__tests__/vector-store.test.js.map +0 -1
  907. package/dist/telemetry/__tests__/event-schema.test.d.ts +0 -2
  908. package/dist/telemetry/__tests__/event-schema.test.d.ts.map +0 -1
  909. package/dist/telemetry/__tests__/event-schema.test.js +0 -56
  910. package/dist/telemetry/__tests__/event-schema.test.js.map +0 -1
  911. package/dist/telemetry/__tests__/machine-id.test.d.ts +0 -2
  912. package/dist/telemetry/__tests__/machine-id.test.d.ts.map +0 -1
  913. package/dist/telemetry/__tests__/machine-id.test.js +0 -33
  914. package/dist/telemetry/__tests__/machine-id.test.js.map +0 -1
  915. package/dist/telemetry/__tests__/pipeline.test.d.ts +0 -2
  916. package/dist/telemetry/__tests__/pipeline.test.d.ts.map +0 -1
  917. package/dist/telemetry/__tests__/pipeline.test.js +0 -68
  918. package/dist/telemetry/__tests__/pipeline.test.js.map +0 -1
  919. package/dist/telemetry/__tests__/sanitizer.test.d.ts +0 -2
  920. package/dist/telemetry/__tests__/sanitizer.test.d.ts.map +0 -1
  921. package/dist/telemetry/__tests__/sanitizer.test.js +0 -143
  922. package/dist/telemetry/__tests__/sanitizer.test.js.map +0 -1
@@ -0,0 +1,299 @@
1
+ import path from "node:path";
2
+ import { asQualifiedName } from "@ryanstark24/sfgraph-shared";
3
+ import { componentOf, traversalMembers } from "./containment.js";
4
+ import { pathToQualifiedName } from "./path-to-qname.js";
5
+ const PARSE_ERROR = "ParseError:";
6
+ const norm = (p) => p.replace(/\\/g, "/").replace(/^\.\//, "");
7
+ const keyPath = (k) => norm(k.startsWith("file://") ? k.slice(7) : k);
8
+ /**
9
+ * The graph's member index (filesystem ingests: one row per source member,
10
+ * keyed by its file or bundle directory, with the qnames it owns), searched
11
+ * by a repo-relative path:
12
+ * - a file key ending in `/<path>`;
13
+ * - a directory key (a bundle) that is an ancestor of the path;
14
+ * - a file in the same directory as a member key that is the only member
15
+ * of that directory (a DataPack's other files).
16
+ */
17
+ class MemberIndex {
18
+ byBase = new Map();
19
+ byDirBase = new Map();
20
+ dirCount = new Map();
21
+ constructor(rows) {
22
+ for (const r of rows) {
23
+ const k = keyPath(r.key);
24
+ push(this.byBase, path.posix.basename(k), r);
25
+ const dir = path.posix.dirname(k);
26
+ push(this.byDirBase, path.posix.basename(dir), r);
27
+ this.dirCount.set(dir, (this.dirCount.get(dir) ?? 0) + 1);
28
+ }
29
+ }
30
+ lookup(rel) {
31
+ const p = norm(rel);
32
+ const ends = (k, tail) => k === tail || k.endsWith(`/${tail}`);
33
+ const hits = new Set();
34
+ for (let a = p; a && a !== "." && a !== "/"; a = path.posix.dirname(a)) {
35
+ for (const r of this.byBase.get(path.posix.basename(a)) ?? []) {
36
+ if (ends(keyPath(r.key), a))
37
+ hits.add(r);
38
+ }
39
+ if (hits.size > 0)
40
+ return [...hits];
41
+ }
42
+ const dir = path.posix.dirname(p);
43
+ if (dir && dir !== ".") {
44
+ for (const r of this.byDirBase.get(path.posix.basename(dir)) ?? []) {
45
+ const kd = path.posix.dirname(keyPath(r.key));
46
+ if (ends(kd, dir) && this.dirCount.get(kd) === 1)
47
+ hits.add(r);
48
+ }
49
+ }
50
+ return [...hits];
51
+ }
52
+ }
53
+ function push(m, k, v) {
54
+ const l = m.get(k);
55
+ if (l)
56
+ l.push(v);
57
+ else
58
+ m.set(k, [v]);
59
+ }
60
+ /**
61
+ * The top-level nodes a member owns: real nodes (not parse errors), minus
62
+ * those whose component is itself owned by the member (a class's methods, an
63
+ * object's fields).
64
+ */
65
+ function ownedSeeds(store, orgId, owned) {
66
+ const real = owned.filter((q) => !q.startsWith(PARSE_ERROR) && store.getNode(orgId, asQualifiedName(q)) !== null);
67
+ const set = new Set(real);
68
+ return real
69
+ .filter((q) => {
70
+ const c = String(componentOf(store, orgId, asQualifiedName(q)));
71
+ return c === q || !set.has(c);
72
+ })
73
+ .sort();
74
+ }
75
+ /** A line that can identify where it is (not just braces or punctuation). */
76
+ const meaningful = (t) => /[A-Za-z0-9_]{2,}/.test(t);
77
+ /** Apex method declaration grammar: a modifier or type before `<name>(`. */
78
+ const signatureOf = (line, name) => !line.trimEnd().endsWith(";") &&
79
+ new RegExp(`(?:^|\\s)[\\w<>,.\\[\\]]+\\s+${name.replace(/\W/g, "\\$&")}\\s*\\(`).test(line);
80
+ /** Net `{` minus `}` on a line, ignoring string literals and `//` comments (approximate). */
81
+ const braceDelta = (line) => {
82
+ const code = line.replace(/'(?:\\.|[^'\\])*'/g, "''").replace(/\/\/.*$/, "");
83
+ return (code.match(/\{/g)?.length ?? 0) - (code.match(/\}/g)?.length ?? 0);
84
+ };
85
+ /**
86
+ * The ApexMethods of `cls` the hunks change, from the old-side lines of each
87
+ * change block (a run of `-`/`+` lines) matched against the methods' stored
88
+ * source bodies (snippets). A block with meaningful removed lines picks the
89
+ * methods those lines belong to, where a line's nearest old-side neighbours
90
+ * agree (so a class-level line that happens to equal a body line is not taken
91
+ * for it); its added lines must not open a method, or close more blocks than
92
+ * the removed lines did and continue. Any other block (a pure insertion, or only braces removed) is
93
+ * placed by its nearest meaningful old-side lines on both sides. Null when
94
+ * any change is class-level (a line in no method body: fields, the class
95
+ * header, a new method) or the class has no method bodies; the caller then
96
+ * seeds the class.
97
+ */
98
+ function methodsForHunks(store, orgId, cls, hunks) {
99
+ const { members } = traversalMembers(store, orgId, cls);
100
+ if (members.length === 0 || hunks.length === 0)
101
+ return null;
102
+ const bodyLines = new Map();
103
+ const names = new Map();
104
+ for (const m of members) {
105
+ const name = /\.([^.(]+)\(/.exec(String(m))?.[1];
106
+ if (name)
107
+ names.set(String(m), name);
108
+ const body = store.getSnippet(orgId, m)?.sourceText;
109
+ if (!body)
110
+ continue;
111
+ for (const raw of body.split(/\r?\n/)) {
112
+ const t = raw.trim();
113
+ if (!meaningful(t))
114
+ continue;
115
+ const s = bodyLines.get(t);
116
+ if (s)
117
+ s.add(String(m));
118
+ else
119
+ bodyLines.set(t, new Set([String(m)]));
120
+ }
121
+ }
122
+ if (bodyLines.size === 0)
123
+ return null;
124
+ const candidates = (line) => {
125
+ const t = line.trim();
126
+ const out = new Set(bodyLines.get(t) ?? []);
127
+ for (const [m, name] of names)
128
+ if (signatureOf(t, name))
129
+ out.add(m);
130
+ return out;
131
+ };
132
+ const picked = new Set();
133
+ for (const h of hunks) {
134
+ const lines = h.lines.filter((l) => !l.startsWith("\\"));
135
+ const changed = (i) => /^[-+]/.test(lines[i] ?? "");
136
+ // Whether method m can own the old-side line at i: its nearest meaningful
137
+ // old-side neighbours are m's lines (or, before it, m's signature). A
138
+ // closing brace on the way makes that side inconclusive.
139
+ const fits = (i, m) => {
140
+ const name = names.get(m) ?? "";
141
+ for (const step of [-1, 1]) {
142
+ for (let j = i + step; j >= 0 && j < lines.length; j += step) {
143
+ const l = lines[j];
144
+ if (l.startsWith("+"))
145
+ continue;
146
+ const t = l.slice(1).trim();
147
+ if (!meaningful(t)) {
148
+ if (t.includes("}"))
149
+ break;
150
+ continue;
151
+ }
152
+ if (bodyLines.get(t)?.has(m))
153
+ break;
154
+ if (step < 0 && name && signatureOf(t, name))
155
+ break;
156
+ return false;
157
+ }
158
+ }
159
+ return true;
160
+ };
161
+ const near = (from, step) => {
162
+ for (let i = from; i >= 0 && i < lines.length; i += step) {
163
+ const l = lines[i];
164
+ if (l.startsWith("+"))
165
+ continue;
166
+ if (meaningful(l.slice(1)))
167
+ return l.slice(1);
168
+ }
169
+ return null;
170
+ };
171
+ for (let first = 0; first < lines.length; first++) {
172
+ if (!changed(first))
173
+ continue;
174
+ let last = first;
175
+ while (changed(last + 1))
176
+ last++;
177
+ const block = lines.slice(first, last + 1);
178
+ const added = block.filter((l) => l.startsWith("+")).map((l) => l.slice(1));
179
+ const removed = block.filter((l) => l.startsWith("-")).map((l) => l.slice(1));
180
+ // A new method (or overload) is a class-level change; a rewritten signature is not.
181
+ const sigs = (ls, n) => ls.filter((l) => signatureOf(l, n)).length;
182
+ if ([...names.values()].some((n) => sigs(added, n) > sigs(removed, n)))
183
+ return null;
184
+ const removedAt = block
185
+ .map((l, k) => [l, first + k])
186
+ .filter(([l]) => l.startsWith("-") && meaningful(l.slice(1)));
187
+ if (removedAt.length > 0) {
188
+ for (const [l, i] of removedAt) {
189
+ const c = [...candidates(l.slice(1))].filter((m) => fits(i, m));
190
+ if (c.length === 0)
191
+ return null;
192
+ for (const m of c)
193
+ picked.add(m);
194
+ }
195
+ // Added text that closes more blocks than the removed text did (so it
196
+ // leaves the enclosing method) and goes on is outside the method. The
197
+ // floor is the removed text's lowest depth: a `}` that replaces a
198
+ // removed `}` of an inner if/for stays inside.
199
+ let floor = 0;
200
+ let depth = 0;
201
+ for (const r of removed) {
202
+ depth += braceDelta(r);
203
+ floor = Math.min(floor, depth);
204
+ }
205
+ depth = 0;
206
+ for (const a of added) {
207
+ if (depth < floor && meaningful(a))
208
+ return null;
209
+ depth += braceDelta(a);
210
+ }
211
+ }
212
+ else if (added.length > 0) {
213
+ // A pure insertion (or only braces removed): the method both neighbours belong to.
214
+ const before = near(first - 1, -1);
215
+ const after = near(last + 1, 1);
216
+ if (before === null || after === null)
217
+ return null;
218
+ const a = candidates(before);
219
+ const both = [...candidates(after)].filter((m) => a.has(m));
220
+ if (both.length === 0)
221
+ return null;
222
+ for (const m of both)
223
+ picked.add(m);
224
+ }
225
+ first = last;
226
+ }
227
+ }
228
+ return picked.size > 0 ? [...picked].sort() : null;
229
+ }
230
+ /**
231
+ * Graph seeds for the files of a unified diff (T15 query I-4). A path maps by
232
+ * the source-file grammar (pathToQualifiedName), else through the graph's
233
+ * member index; a rename seeds both its old and its new path. A modified
234
+ * ApexClass seeds the methods its hunks change when they are identifiable,
235
+ * else the class. Binary files, mode-only changes and paths that map to
236
+ * nothing are listed in `unmapped`, never dropped.
237
+ */
238
+ export function resolveDiffSeeds(store, orgId, files, diffText) {
239
+ const seeds = [];
240
+ const unmapped = [];
241
+ const seen = new Set();
242
+ let index = null;
243
+ const memberIndex = () => {
244
+ if (!index)
245
+ index = new MemberIndex(store.listMemberRows?.(orgId) ?? []);
246
+ return index;
247
+ };
248
+ const add = (s) => {
249
+ if (seen.has(s.qname))
250
+ return;
251
+ seen.add(s.qname);
252
+ seeds.push(s);
253
+ };
254
+ if (files.length === 0 && diffText !== undefined && diffText.trim() !== "") {
255
+ unmapped.push({ path: "(diff)", reason: "unparseable" });
256
+ }
257
+ for (const f of files) {
258
+ if (f.modeOnly) {
259
+ unmapped.push({ path: f.path, reason: "mode-only" });
260
+ continue;
261
+ }
262
+ const paths = f.oldPath
263
+ ? [
264
+ [f.oldPath, f.status],
265
+ [f.path, f.status],
266
+ ]
267
+ : [[f.path, f.status]];
268
+ for (const [p, status] of paths) {
269
+ const byGrammar = pathToQualifiedName(p);
270
+ const qnames = byGrammar
271
+ ? [String(byGrammar)]
272
+ : memberIndex()
273
+ .lookup(p)
274
+ .flatMap((r) => ownedSeeds(store, orgId, r.owned));
275
+ if (qnames.length === 0) {
276
+ unmapped.push({ path: p, reason: f.binary ? "binary" : "no-qname" });
277
+ continue;
278
+ }
279
+ for (const q of [...new Set(qnames)]) {
280
+ const qn = asQualifiedName(q);
281
+ const node = store.getNode(orgId, qn);
282
+ const canonical = node ? String(node.qualifiedName) : q;
283
+ const members = status === "modified" && !f.binary && node?.label === "ApexClass"
284
+ ? methodsForHunks(store, orgId, node.qualifiedName, f.hunks)
285
+ : null;
286
+ if (members) {
287
+ for (const m of members) {
288
+ add({ qname: m, path: p, status, level: "member", component: canonical });
289
+ }
290
+ }
291
+ else {
292
+ add({ qname: canonical, path: p, status, level: "component", component: canonical });
293
+ }
294
+ }
295
+ }
296
+ }
297
+ return { seeds, unmapped };
298
+ }
299
+ //# sourceMappingURL=diff-seeds.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diff-seeds.js","sourceRoot":"","sources":["../../src/analyze/diff-seeds.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAkC,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAE9F,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAEjE,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAyBzD,MAAM,WAAW,GAAG,aAAa,CAAC;AAClC,MAAM,IAAI,GAAG,CAAC,CAAS,EAAU,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;AAC/E,MAAM,OAAO,GAAG,CAAC,CAAS,EAAU,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAEtF;;;;;;;;GAQG;AACH,MAAM,WAAW;IACE,MAAM,GAAG,IAAI,GAAG,EAAuB,CAAC;IACxC,SAAS,GAAG,IAAI,GAAG,EAAuB,CAAC;IAC3C,QAAQ,GAAG,IAAI,GAAG,EAAkB,CAAC;IAEtD,YAAY,IAA0B;QACpC,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;YACrB,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;YACzB,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAC7C,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;YAClC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;YAClD,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAC5D,CAAC;IACH,CAAC;IAED,MAAM,CAAC,GAAW;QAChB,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;QACpB,MAAM,IAAI,GAAG,CAAC,CAAS,EAAE,IAAY,EAAE,EAAE,CAAC,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC,QAAQ,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;QAC/E,MAAM,IAAI,GAAG,IAAI,GAAG,EAAa,CAAC;QAClC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;YACvE,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;gBAC9D,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;oBAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YAC3C,CAAC;YACD,IAAI,IAAI,CAAC,IAAI,GAAG,CAAC;gBAAE,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC;QACtC,CAAC;QACD,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAClC,IAAI,GAAG,IAAI,GAAG,KAAK,GAAG,EAAE,CAAC;YACvB,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;gBACnE,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;gBAC9C,IAAI,IAAI,CAAC,EAAE,EAAE,GAAG,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC;oBAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YAChE,CAAC;QACH,CAAC;QACD,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC;IACnB,CAAC;CACF;AAED,SAAS,IAAI,CAAO,CAAc,EAAE,CAAI,EAAE,CAAI;IAC5C,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACnB,IAAI,CAAC;QAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;;QACZ,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AACrB,CAAC;AAED;;;;GAIG;AACH,SAAS,UAAU,CAAC,KAAiB,EAAE,KAAY,EAAE,KAAwB;IAC3E,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,CACvB,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,eAAe,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,CACvF,CAAC;IACF,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC;IAC1B,OAAO,IAAI;SACR,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE;QACZ,MAAM,CAAC,GAAG,MAAM,CAAC,WAAW,CAAC,KAAK,EAAE,KAAK,EAAE,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAChE,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAChC,CAAC,CAAC;SACD,IAAI,EAAE,CAAC;AACZ,CAAC;AAED,6EAA6E;AAC7E,MAAM,UAAU,GAAG,CAAC,CAAS,EAAW,EAAE,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACtE,4EAA4E;AAC5E,MAAM,WAAW,GAAG,CAAC,IAAY,EAAE,IAAY,EAAW,EAAE,CAC1D,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC;IAC7B,IAAI,MAAM,CAAC,gCAAgC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAE9F,6FAA6F;AAC7F,MAAM,UAAU,GAAG,CAAC,IAAY,EAAU,EAAE;IAC1C,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,oBAAoB,EAAE,IAAI,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;IAC7E,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,MAAM,IAAI,CAAC,CAAC,CAAC;AAC7E,CAAC,CAAC;AAEF;;;;;;;;;;;;GAYG;AACH,SAAS,eAAe,CACtB,KAAiB,EACjB,KAAY,EACZ,GAAkB,EAClB,KAA0B;IAE1B,MAAM,EAAE,OAAO,EAAE,GAAG,gBAAgB,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;IACxD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAC5D,MAAM,SAAS,GAAG,IAAI,GAAG,EAAuB,CAAC;IACjD,MAAM,KAAK,GAAG,IAAI,GAAG,EAAkB,CAAC;IACxC,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACxB,MAAM,IAAI,GAAG,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QACjD,IAAI,IAAI;YAAE,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;QACrC,MAAM,IAAI,GAAG,KAAK,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,UAAU,CAAC;QACpD,IAAI,CAAC,IAAI;YAAE,SAAS;QACpB,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;YACtC,MAAM,CAAC,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;YACrB,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;gBAAE,SAAS;YAC7B,MAAM,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YAC3B,IAAI,CAAC;gBAAE,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;;gBACnB,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC9C,CAAC;IACH,CAAC;IACD,IAAI,SAAS,CAAC,IAAI,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACtC,MAAM,UAAU,GAAG,CAAC,IAAY,EAAe,EAAE;QAC/C,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QACtB,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QAC5C,KAAK,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,KAAK;YAAE,IAAI,WAAW,CAAC,CAAC,EAAE,IAAI,CAAC;gBAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACpE,OAAO,GAAG,CAAC;IACb,CAAC,CAAC;IACF,MAAM,MAAM,GAAG,IAAI,GAAG,EAAU,CAAC;IACjC,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACtB,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;QACzD,MAAM,OAAO,GAAG,CAAC,CAAS,EAAW,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QACrE,0EAA0E;QAC1E,sEAAsE;QACtE,yDAAyD;QACzD,MAAM,IAAI,GAAG,CAAC,CAAS,EAAE,CAAS,EAAW,EAAE;YAC7C,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YAChC,KAAK,MAAM,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;gBAC3B,KAAK,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC;oBAC7D,MAAM,CAAC,GAAG,KAAK,CAAC,CAAC,CAAW,CAAC;oBAC7B,IAAI,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC;wBAAE,SAAS;oBAChC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;oBAC5B,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;wBACnB,IAAI,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC;4BAAE,MAAM;wBAC3B,SAAS;oBACX,CAAC;oBACD,IAAI,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;wBAAE,MAAM;oBACpC,IAAI,IAAI,GAAG,CAAC,IAAI,IAAI,IAAI,WAAW,CAAC,CAAC,EAAE,IAAI,CAAC;wBAAE,MAAM;oBACpD,OAAO,KAAK,CAAC;gBACf,CAAC;YACH,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC,CAAC;QACF,MAAM,IAAI,GAAG,CAAC,IAAY,EAAE,IAAY,EAAiB,EAAE;YACzD,KAAK,IAAI,CAAC,GAAG,IAAI,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC;gBACzD,MAAM,CAAC,GAAG,KAAK,CAAC,CAAC,CAAW,CAAC;gBAC7B,IAAI,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC;oBAAE,SAAS;gBAChC,IAAI,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;oBAAE,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAChD,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC,CAAC;QACF,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC;YAClD,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;gBAAE,SAAS;YAC9B,IAAI,IAAI,GAAG,KAAK,CAAC;YACjB,OAAO,OAAO,CAAC,IAAI,GAAG,CAAC,CAAC;gBAAE,IAAI,EAAE,CAAC;YACjC,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,GAAG,CAAC,CAAC,CAAC;YAC3C,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YAC5E,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YAC9E,oFAAoF;YACpF,MAAM,IAAI,GAAG,CAAC,EAAY,EAAE,CAAS,EAAE,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;YACrF,IAAI,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;gBAAE,OAAO,IAAI,CAAC;YACpF,MAAM,SAAS,GAAG,KAAK;iBACpB,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,CAAU,CAAC;iBACtC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAChE,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACzB,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,SAAS,EAAE,CAAC;oBAC/B,MAAM,CAAC,GAAG,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;oBAChE,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC;wBAAE,OAAO,IAAI,CAAC;oBAChC,KAAK,MAAM,CAAC,IAAI,CAAC;wBAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;gBACnC,CAAC;gBACD,sEAAsE;gBACtE,sEAAsE;gBACtE,kEAAkE;gBAClE,+CAA+C;gBAC/C,IAAI,KAAK,GAAG,CAAC,CAAC;gBACd,IAAI,KAAK,GAAG,CAAC,CAAC;gBACd,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;oBACxB,KAAK,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC;oBACvB,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;gBACjC,CAAC;gBACD,KAAK,GAAG,CAAC,CAAC;gBACV,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;oBACtB,IAAI,KAAK,GAAG,KAAK,IAAI,UAAU,CAAC,CAAC,CAAC;wBAAE,OAAO,IAAI,CAAC;oBAChD,KAAK,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC;gBACzB,CAAC;YACH,CAAC;iBAAM,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC5B,mFAAmF;gBACnF,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;gBACnC,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;gBAChC,IAAI,MAAM,KAAK,IAAI,IAAI,KAAK,KAAK,IAAI;oBAAE,OAAO,IAAI,CAAC;gBACnD,MAAM,CAAC,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC;gBAC7B,MAAM,IAAI,GAAG,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC5D,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;oBAAE,OAAO,IAAI,CAAC;gBACnC,KAAK,MAAM,CAAC,IAAI,IAAI;oBAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YACtC,CAAC;YACD,KAAK,GAAG,IAAI,CAAC;QACf,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;AACrD,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,gBAAgB,CAC9B,KAAiB,EACjB,KAAY,EACZ,KAA0B,EAC1B,QAAiB;IAEjB,MAAM,KAAK,GAAe,EAAE,CAAC;IAC7B,MAAM,QAAQ,GAAmB,EAAE,CAAC;IACpC,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,IAAI,KAAK,GAAuB,IAAI,CAAC;IACrC,MAAM,WAAW,GAAG,GAAgB,EAAE;QACpC,IAAI,CAAC,KAAK;YAAE,KAAK,GAAG,IAAI,WAAW,CAAC,KAAK,CAAC,cAAc,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;QACzE,OAAO,KAAK,CAAC;IACf,CAAC,CAAC;IACF,MAAM,GAAG,GAAG,CAAC,CAAW,EAAQ,EAAE;QAChC,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC;YAAE,OAAO;QAC9B,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QAClB,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAChB,CAAC,CAAC;IACF,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,QAAQ,KAAK,SAAS,IAAI,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;QAC3E,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC,CAAC;IAC3D,CAAC;IACD,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACtB,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC;YACf,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,CAAC;YACrD,SAAS;QACX,CAAC;QACD,MAAM,KAAK,GAAwC,CAAC,CAAC,OAAO;YAC1D,CAAC,CAAC;gBACE,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC;gBACrB,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC;aACnB;YACH,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;QACzB,KAAK,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;YAChC,MAAM,SAAS,GAAG,mBAAmB,CAAC,CAAC,CAAC,CAAC;YACzC,MAAM,MAAM,GAAG,SAAS;gBACtB,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;gBACrB,CAAC,CAAC,WAAW,EAAE;qBACV,MAAM,CAAC,CAAC,CAAC;qBACT,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;YACzD,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACxB,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC;gBACrE,SAAS;YACX,CAAC;YACD,KAAK,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC;gBACrC,MAAM,EAAE,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC;gBAC9B,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;gBACtC,MAAM,SAAS,GAAG,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBACxD,MAAM,OAAO,GACX,MAAM,KAAK,UAAU,IAAI,CAAC,CAAC,CAAC,MAAM,IAAI,IAAI,EAAE,KAAK,KAAK,WAAW;oBAC/D,CAAC,CAAC,eAAe,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,aAA8B,EAAE,CAAC,CAAC,KAAK,CAAC;oBAC7E,CAAC,CAAC,IAAI,CAAC;gBACX,IAAI,OAAO,EAAE,CAAC;oBACZ,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;wBACxB,GAAG,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,CAAC;oBAC5E,CAAC;gBACH,CAAC;qBAAM,CAAC;oBACN,GAAG,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,CAAC;gBACvF,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;AAC7B,CAAC"}
@@ -20,6 +20,14 @@ import type { EdgeFact } from "../domain/index.js";
20
20
  */
21
21
  /** Security / sharing grant edges — relationship of access, not of code dependency. */
22
22
  export declare const SECURITY_GRANT_RELTYPES: ReadonlySet<string>;
23
+ /**
24
+ * False for a Profile/PermissionSet entry that grants nothing. Retrieved profiles list most
25
+ * fields, objects and classes with every flag false (`<readable>false</readable>`); the parsers
26
+ * keep those entries as GRANTS_* edges with the flags as attributes. Counting them as access
27
+ * inflated "who can see this field" and hid real FLS gaps. An edge without the flags (another
28
+ * source, an older graph) still counts.
29
+ */
30
+ export declare function isEffectiveGrant(e: Pick<EdgeFact, "relType" | "attributes">): boolean;
23
31
  /** True for a low-confidence reflection-walker REFERENCES edge. */
24
32
  export declare function isReflectionEdge(e: EdgeFact): boolean;
25
33
  export interface EdgeFilterOpts {
@@ -34,4 +42,21 @@ export interface EdgeFilterOpts {
34
42
  }
35
43
  /** Decide whether an edge survives the filter. */
36
44
  export declare function keepEdge(e: EdgeFact, opts: EdgeFilterOpts): boolean;
45
+ /**
46
+ * Downstream "containment is not a dependency" rule.
47
+ *
48
+ * A trace that reaches a CustomObject would otherwise walk DEFINES_FIELD to
49
+ * every field of the object (hundreds on a standard object), then field ->
50
+ * field formula READS_FIELD, then HAS_VALIDATION_RULE etc. None of that is
51
+ * something the traced component depends on — the object *contains* those
52
+ * members. When `leafStructure` is on, a non-root node whose label is in
53
+ * STRUCTURE_LEAF_LABELS is not expanded along STRUCTURAL_RELTYPES; the node
54
+ * itself stays in the result as a leaf.
55
+ */
56
+ export declare const STRUCTURE_LEAF_LABELS: ReadonlySet<string>;
57
+ export declare const STRUCTURAL_RELTYPES: ReadonlySet<string>;
58
+ /** Label of a qname from its `<Label>:` prefix ("" when there is none). */
59
+ export declare function labelOfQname(qname: string): string;
60
+ /** True when `e` is a containment edge out of an object/field-like node. */
61
+ export declare function isStructuralEdge(e: EdgeFact): boolean;
37
62
  //# sourceMappingURL=edge-filters.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"edge-filters.d.ts","sourceRoot":"","sources":["../../src/analyze/edge-filters.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAGnD;;;;;;;;;;;;;;;;;;GAkBG;AAEH,uFAAuF;AACvF,eAAO,MAAM,uBAAuB,EAAE,WAAW,CAAC,MAAM,CAWtD,CAAC;AAEH,mEAAmE;AACnE,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,QAAQ,GAAG,OAAO,CAKrD;AAED,MAAM,WAAW,cAAc;IAC7B,0DAA0D;IAC1D,eAAe,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACtC,2BAA2B;IAC3B,eAAe,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACtC,6EAA6E;IAC7E,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,0EAA0E;IAC1E,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED,kDAAkD;AAClD,wBAAgB,QAAQ,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,cAAc,GAAG,OAAO,CAMnE"}
1
+ {"version":3,"file":"edge-filters.d.ts","sourceRoot":"","sources":["../../src/analyze/edge-filters.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAGnD;;;;;;;;;;;;;;;;;;GAkBG;AAEH,uFAAuF;AACvF,eAAO,MAAM,uBAAuB,EAAE,WAAW,CAAC,MAAM,CAWtD,CAAC;AAEH;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,IAAI,CAAC,QAAQ,EAAE,SAAS,GAAG,YAAY,CAAC,GAAG,OAAO,CA0BrF;AAED,mEAAmE;AACnE,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,QAAQ,GAAG,OAAO,CAKrD;AAED,MAAM,WAAW,cAAc;IAC7B,0DAA0D;IAC1D,eAAe,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACtC,2BAA2B;IAC3B,eAAe,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACtC,6EAA6E;IAC7E,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,0EAA0E;IAC1E,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED,kDAAkD;AAClD,wBAAgB,QAAQ,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,cAAc,GAAG,OAAO,CASnE;AAED;;;;;;;;;;GAUG;AACH,eAAO,MAAM,qBAAqB,EAAE,WAAW,CAAC,MAAM,CAMpD,CAAC;AAEH,eAAO,MAAM,mBAAmB,EAAE,WAAW,CAAC,MAAM,CASlD,CAAC;AAEH,2EAA2E;AAC3E,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAGlD;AAED,4EAA4E;AAC5E,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,QAAQ,GAAG,OAAO,CAKrD"}
@@ -31,6 +31,40 @@ export const SECURITY_GRANT_RELTYPES = new Set([
31
31
  REL_TYPES.SHARING_TO_ROLE,
32
32
  REL_TYPES.SHARING_FROM_OWNER_GROUP,
33
33
  ]);
34
+ /**
35
+ * False for a Profile/PermissionSet entry that grants nothing. Retrieved profiles list most
36
+ * fields, objects and classes with every flag false (`<readable>false</readable>`); the parsers
37
+ * keep those entries as GRANTS_* edges with the flags as attributes. Counting them as access
38
+ * inflated "who can see this field" and hid real FLS gaps. An edge without the flags (another
39
+ * source, an older graph) still counts.
40
+ */
41
+ export function isEffectiveGrant(e) {
42
+ const a = (e.attributes ?? {});
43
+ const anyTrue = (keys) => {
44
+ const present = keys.filter((k) => a[k] !== undefined);
45
+ return present.length === 0 || present.some((k) => a[k] === true);
46
+ };
47
+ switch (e.relType) {
48
+ case REL_TYPES.GRANTS_FIELD_ACCESS:
49
+ return anyTrue(["readable", "editable"]);
50
+ case REL_TYPES.GRANTS_OBJECT_ACCESS:
51
+ return anyTrue([
52
+ "allowRead",
53
+ "allowEdit",
54
+ "allowCreate",
55
+ "allowDelete",
56
+ "viewAllRecords",
57
+ "modifyAllRecords",
58
+ ]);
59
+ case REL_TYPES.GRANTS_APEX_ACCESS:
60
+ case REL_TYPES.GRANTS_PAGE_ACCESS:
61
+ return a.enabled !== false;
62
+ case REL_TYPES.GRANTS_TAB_ACCESS:
63
+ return a.visibility !== "Hidden";
64
+ default:
65
+ return true;
66
+ }
67
+ }
34
68
  /** True for a low-confidence reflection-walker REFERENCES edge. */
35
69
  export function isReflectionEdge(e) {
36
70
  return (e.relType === REL_TYPES.REFERENCES &&
@@ -42,10 +76,52 @@ export function keepEdge(e, opts) {
42
76
  return false;
43
77
  if (opts.excludeRelTypes?.has(e.relType))
44
78
  return false;
45
- if (opts.excludeSecurity !== false && SECURITY_GRANT_RELTYPES.has(e.relType))
46
- return false;
79
+ if (SECURITY_GRANT_RELTYPES.has(e.relType)) {
80
+ if (opts.excludeSecurity !== false)
81
+ return false;
82
+ if (!isEffectiveGrant(e))
83
+ return false;
84
+ }
47
85
  if (opts.excludeReflection !== false && isReflectionEdge(e))
48
86
  return false;
49
87
  return true;
50
88
  }
89
+ /**
90
+ * Downstream "containment is not a dependency" rule.
91
+ *
92
+ * A trace that reaches a CustomObject would otherwise walk DEFINES_FIELD to
93
+ * every field of the object (hundreds on a standard object), then field ->
94
+ * field formula READS_FIELD, then HAS_VALIDATION_RULE etc. None of that is
95
+ * something the traced component depends on — the object *contains* those
96
+ * members. When `leafStructure` is on, a non-root node whose label is in
97
+ * STRUCTURE_LEAF_LABELS is not expanded along STRUCTURAL_RELTYPES; the node
98
+ * itself stays in the result as a leaf.
99
+ */
100
+ export const STRUCTURE_LEAF_LABELS = new Set([
101
+ "CustomObject",
102
+ "CustomField",
103
+ "ValidationRule",
104
+ "RecordType",
105
+ "NamedCredential",
106
+ ]);
107
+ export const STRUCTURAL_RELTYPES = new Set([
108
+ REL_TYPES.DEFINES_FIELD,
109
+ REL_TYPES.HAS_VALIDATION_RULE,
110
+ REL_TYPES.HAS_RECORD_TYPE,
111
+ REL_TYPES.CONTAINS,
112
+ // field -> field (formula) and ValidationRule -> field reads
113
+ REL_TYPES.READS_FIELD,
114
+ // dependent picklist -> controlling field
115
+ REL_TYPES.DEPENDS_ON_FIELD,
116
+ ]);
117
+ /** Label of a qname from its `<Label>:` prefix ("" when there is none). */
118
+ export function labelOfQname(qname) {
119
+ const i = qname.indexOf(":");
120
+ return i > 0 ? qname.slice(0, i) : "";
121
+ }
122
+ /** True when `e` is a containment edge out of an object/field-like node. */
123
+ export function isStructuralEdge(e) {
124
+ return (STRUCTURAL_RELTYPES.has(e.relType) &&
125
+ STRUCTURE_LEAF_LABELS.has(labelOfQname(e.srcQualifiedName)));
126
+ }
51
127
  //# sourceMappingURL=edge-filters.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"edge-filters.js","sourceRoot":"","sources":["../../src/analyze/edge-filters.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAE/C;;;;;;;;;;;;;;;;;;GAkBG;AAEH,uFAAuF;AACvF,MAAM,CAAC,MAAM,uBAAuB,GAAwB,IAAI,GAAG,CAAC;IAClE,SAAS,CAAC,oBAAoB;IAC9B,SAAS,CAAC,mBAAmB;IAC7B,SAAS,CAAC,kBAAkB;IAC5B,SAAS,CAAC,kBAAkB;IAC5B,SAAS,CAAC,iBAAiB;IAC3B,SAAS,CAAC,sBAAsB;IAChC,SAAS,CAAC,cAAc;IACxB,SAAS,CAAC,gBAAgB;IAC1B,SAAS,CAAC,eAAe;IACzB,SAAS,CAAC,wBAAwB;CACnC,CAAC,CAAC;AAEH,mEAAmE;AACnE,MAAM,UAAU,gBAAgB,CAAC,CAAW;IAC1C,OAAO,CACL,CAAC,CAAC,OAAO,KAAK,SAAS,CAAC,UAAU;QACjC,CAAC,CAAC,UAA+C,EAAE,MAAM,KAAK,YAAY,CAC5E,CAAC;AACJ,CAAC;AAaD,kDAAkD;AAClD,MAAM,UAAU,QAAQ,CAAC,CAAW,EAAE,IAAoB;IACxD,IAAI,IAAI,CAAC,eAAe,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC;QAAE,OAAO,KAAK,CAAC;IAC/E,IAAI,IAAI,CAAC,eAAe,EAAE,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC;QAAE,OAAO,KAAK,CAAC;IACvD,IAAI,IAAI,CAAC,eAAe,KAAK,KAAK,IAAI,uBAAuB,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC;QAAE,OAAO,KAAK,CAAC;IAC3F,IAAI,IAAI,CAAC,iBAAiB,KAAK,KAAK,IAAI,gBAAgB,CAAC,CAAC,CAAC;QAAE,OAAO,KAAK,CAAC;IAC1E,OAAO,IAAI,CAAC;AACd,CAAC"}
1
+ {"version":3,"file":"edge-filters.js","sourceRoot":"","sources":["../../src/analyze/edge-filters.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ import type { OrgId } from "@ryanstark24/sfgraph-shared";
2
+ import type { GraphStore } from "../storage/interfaces.js";
3
+ /**
4
+ * True for a CustomField qname whose field name has no custom `__<suffix>`
5
+ * (`CustomField:Account.Name`, `CustomField:Case.OwnerId`): a standard field.
6
+ * False for every other label and for custom fields (`Account.X__c`).
7
+ */
8
+ export declare function isStandardFieldQname(qname: string): boolean;
9
+ /**
10
+ * The namespace prefix of one API-name part, by the suffix grammar:
11
+ * `ns__Name__c` (any NAMESPACED_SUFFIXES suffix) and `ns__Field__Sub__s`
12
+ * -> `ns`. `Name__c`, `Loc__Latitude__s`, standard names, unknown suffixes
13
+ * and malformed parts -> null.
14
+ */
15
+ export declare function namespaceOfApiName(part: string): string | null;
16
+ /**
17
+ * The managed-package namespaces the org's own schema shows, lower-cased:
18
+ * every `ns` of an object or field API name shaped `ns__Name__c` (any
19
+ * namespaced custom suffix, `namespaceOfApiName`). Read from the graph, never from a fixed list. Cached per store and
20
+ * org until the sync generation or the object/field counts change.
21
+ */
22
+ export declare function managedNamespaces(store: GraphStore, orgId: OrgId): ReadonlySet<string>;
23
+ /** `managedNamespaces` as the `isManagedNamespace` pseudo-endpoint option. */
24
+ export declare function managedNamespaceCheck(store: GraphStore, orgId: OrgId): (ns: string) => boolean;
25
+ //# sourceMappingURL=field-scope.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"field-scope.d.ts","sourceRoot":"","sources":["../../src/analyze/field-scope.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,6BAA6B,CAAC;AACzD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAmB3D;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAI3D;AAWD;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAQ9D;AAKD;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,KAAK,GAAG,WAAW,CAAC,MAAM,CAAC,CA2BtF;AAED,8EAA8E;AAC9E,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,KAAK,GAAG,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAG9F"}
@@ -0,0 +1,94 @@
1
+ /**
2
+ * Field and namespace grammar for the dependency answers (Batch R / S2).
3
+ *
4
+ * Salesforce API names carry their kind in a suffix: a custom field ends in
5
+ * `__c` (`__pc` on person accounts, `__s` for a compound sub-field), a
6
+ * managed-package member also carries its namespace prefix (`ns__Name__c`).
7
+ * A field name with no `__<suffix>` is a standard field (`Account.Name`).
8
+ */
9
+ const SUFFIXED = /__[A-Za-z0-9]+$/;
10
+ /** The field part of a `CustomField:Object.Field` qname (after the last dot). */
11
+ function fieldPart(qname) {
12
+ const name = qname.slice(qname.indexOf(":") + 1);
13
+ return name.slice(name.lastIndexOf(".") + 1);
14
+ }
15
+ /**
16
+ * True for a CustomField qname whose field name has no custom `__<suffix>`
17
+ * (`CustomField:Account.Name`, `CustomField:Case.OwnerId`): a standard field.
18
+ * False for every other label and for custom fields (`Account.X__c`).
19
+ */
20
+ export function isStandardFieldQname(qname) {
21
+ if (!qname.startsWith("CustomField:"))
22
+ return false;
23
+ const f = fieldPart(qname);
24
+ return f.length > 0 && !SUFFIXED.test(f);
25
+ }
26
+ /** Custom API-name suffixes after which a third `__` part is a namespace
27
+ * (`ns__Name__c`): fields/objects, relationships, platform events, custom
28
+ * metadata types, external and big objects, person-account fields. */
29
+ const NAMESPACED_SUFFIXES = new Set(["c", "r", "e", "mdt", "x", "b", "pc"]);
30
+ /** A compound-field sub-field is `Field__Sub__s` (`Loc__Latitude__s`), so a
31
+ * namespace is a fourth part (`ns__Loc__Latitude__s`). */
32
+ const SUBFIELD_SUFFIX = "s";
33
+ const NS_GRAMMAR = /^[A-Za-z][A-Za-z0-9_]*$/;
34
+ /**
35
+ * The namespace prefix of one API-name part, by the suffix grammar:
36
+ * `ns__Name__c` (any NAMESPACED_SUFFIXES suffix) and `ns__Field__Sub__s`
37
+ * -> `ns`. `Name__c`, `Loc__Latitude__s`, standard names, unknown suffixes
38
+ * and malformed parts -> null.
39
+ */
40
+ export function namespaceOfApiName(part) {
41
+ const bits = part.split("__");
42
+ const suffix = bits[bits.length - 1] ?? "";
43
+ const want = NAMESPACED_SUFFIXES.has(suffix) ? 3 : suffix === SUBFIELD_SUFFIX ? 4 : 0;
44
+ if (want === 0 || bits.length !== want)
45
+ return null;
46
+ if (bits.some((b) => b.length === 0))
47
+ return null;
48
+ const ns = bits[0];
49
+ return NS_GRAMMAR.test(ns) ? ns : null;
50
+ }
51
+ const nsCache = new WeakMap();
52
+ /**
53
+ * The managed-package namespaces the org's own schema shows, lower-cased:
54
+ * every `ns` of an object or field API name shaped `ns__Name__c` (any
55
+ * namespaced custom suffix, `namespaceOfApiName`). Read from the graph, never from a fixed list. Cached per store and
56
+ * org until the sync generation or the object/field counts change.
57
+ */
58
+ export function managedNamespaces(store, orgId) {
59
+ let gen = 0;
60
+ try {
61
+ gen = store.getSyncStatus(orgId).generation;
62
+ }
63
+ catch {
64
+ gen = -1;
65
+ }
66
+ const key = `${gen}:${store.countNodesByLabel(orgId, "CustomObject")}:${store.countNodesByLabel(orgId, "CustomField")}`;
67
+ let byOrg = nsCache.get(store);
68
+ if (!byOrg) {
69
+ byOrg = new Map();
70
+ nsCache.set(store, byOrg);
71
+ }
72
+ const hit = byOrg.get(String(orgId));
73
+ if (hit && hit.key === key)
74
+ return hit.set;
75
+ const set = new Set();
76
+ for (const label of ["CustomObject", "CustomField"]) {
77
+ for (const n of store.listNodesByLabel(orgId, label)) {
78
+ const q = String(n.qualifiedName);
79
+ for (const part of q.slice(q.indexOf(":") + 1).split(".")) {
80
+ const ns = namespaceOfApiName(part);
81
+ if (ns)
82
+ set.add(ns.toLowerCase());
83
+ }
84
+ }
85
+ }
86
+ byOrg.set(String(orgId), { key, set });
87
+ return set;
88
+ }
89
+ /** `managedNamespaces` as the `isManagedNamespace` pseudo-endpoint option. */
90
+ export function managedNamespaceCheck(store, orgId) {
91
+ const set = managedNamespaces(store, orgId);
92
+ return (ns) => set.has(ns.toLowerCase());
93
+ }
94
+ //# sourceMappingURL=field-scope.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"field-scope.js","sourceRoot":"","sources":["../../src/analyze/field-scope.ts"],"names":[],"mappings":"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"}