@ryanstark24/sfgraph-core 1.1.6 → 1.2.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 (195) hide show
  1. package/dist/analyze/__tests__/find-nodes.test.d.ts +2 -0
  2. package/dist/analyze/__tests__/find-nodes.test.d.ts.map +1 -0
  3. package/dist/analyze/__tests__/find-nodes.test.js +129 -0
  4. package/dist/analyze/__tests__/find-nodes.test.js.map +1 -0
  5. package/dist/analyze/__tests__/findings.test.d.ts +2 -0
  6. package/dist/analyze/__tests__/findings.test.d.ts.map +1 -0
  7. package/dist/analyze/__tests__/findings.test.js +90 -0
  8. package/dist/analyze/__tests__/findings.test.js.map +1 -0
  9. package/dist/analyze/find-nodes.d.ts +38 -0
  10. package/dist/analyze/find-nodes.d.ts.map +1 -0
  11. package/dist/analyze/find-nodes.js +51 -0
  12. package/dist/analyze/find-nodes.js.map +1 -0
  13. package/dist/analyze/findings.d.ts +86 -0
  14. package/dist/analyze/findings.d.ts.map +1 -0
  15. package/dist/analyze/findings.js +143 -0
  16. package/dist/analyze/findings.js.map +1 -0
  17. package/dist/analyze/index.d.ts +2 -0
  18. package/dist/analyze/index.d.ts.map +1 -1
  19. package/dist/analyze/index.js +2 -0
  20. package/dist/analyze/index.js.map +1 -1
  21. package/dist/analyze/test-coverage.d.ts +0 -2
  22. package/dist/analyze/test-coverage.d.ts.map +1 -1
  23. package/dist/analyze/test-coverage.js +0 -10
  24. package/dist/analyze/test-coverage.js.map +1 -1
  25. package/dist/domain/edge-fact.d.ts +25 -0
  26. package/dist/domain/edge-fact.d.ts.map +1 -1
  27. package/dist/domain/rel-types.d.ts +4 -0
  28. package/dist/domain/rel-types.d.ts.map +1 -1
  29. package/dist/domain/rel-types.js +7 -0
  30. package/dist/domain/rel-types.js.map +1 -1
  31. package/dist/embedding/__tests__/embed.test.d.ts +2 -0
  32. package/dist/embedding/__tests__/embed.test.d.ts.map +1 -0
  33. package/dist/embedding/__tests__/embed.test.js +72 -0
  34. package/dist/embedding/__tests__/embed.test.js.map +1 -0
  35. package/dist/extractors/live-org/__tests__/liveness.test.d.ts +2 -0
  36. package/dist/extractors/live-org/__tests__/liveness.test.d.ts.map +1 -0
  37. package/dist/extractors/live-org/__tests__/liveness.test.js +148 -0
  38. package/dist/extractors/live-org/__tests__/liveness.test.js.map +1 -0
  39. package/dist/extractors/live-org/__tests__/mcd-baseline.test.d.ts +2 -0
  40. package/dist/extractors/live-org/__tests__/mcd-baseline.test.d.ts.map +1 -0
  41. package/dist/extractors/live-org/__tests__/mcd-baseline.test.js +174 -0
  42. package/dist/extractors/live-org/__tests__/mcd-baseline.test.js.map +1 -0
  43. package/dist/extractors/live-org/__tests__/metadata-read-batch.test.d.ts +2 -0
  44. package/dist/extractors/live-org/__tests__/metadata-read-batch.test.d.ts.map +1 -0
  45. package/dist/extractors/live-org/__tests__/metadata-read-batch.test.js +75 -0
  46. package/dist/extractors/live-org/__tests__/metadata-read-batch.test.js.map +1 -0
  47. package/dist/extractors/live-org/__tests__/omnistudio-retrieve.test.d.ts +2 -0
  48. package/dist/extractors/live-org/__tests__/omnistudio-retrieve.test.d.ts.map +1 -0
  49. package/dist/extractors/live-org/__tests__/omnistudio-retrieve.test.js +135 -0
  50. package/dist/extractors/live-org/__tests__/omnistudio-retrieve.test.js.map +1 -0
  51. package/dist/extractors/live-org/__tests__/soql-rebatch.test.d.ts +2 -0
  52. package/dist/extractors/live-org/__tests__/soql-rebatch.test.d.ts.map +1 -0
  53. package/dist/extractors/live-org/__tests__/soql-rebatch.test.js +118 -0
  54. package/dist/extractors/live-org/__tests__/soql-rebatch.test.js.map +1 -0
  55. package/dist/extractors/live-org/__tests__/vlocity-runner.test.js +27 -0
  56. package/dist/extractors/live-org/__tests__/vlocity-runner.test.js.map +1 -1
  57. package/dist/extractors/live-org/bulk-retrieve.d.ts +7 -0
  58. package/dist/extractors/live-org/bulk-retrieve.d.ts.map +1 -1
  59. package/dist/extractors/live-org/bulk-retrieve.js +10 -1
  60. package/dist/extractors/live-org/bulk-retrieve.js.map +1 -1
  61. package/dist/extractors/live-org/extractors/mcd-baseline.d.ts +60 -0
  62. package/dist/extractors/live-org/extractors/mcd-baseline.d.ts.map +1 -0
  63. package/dist/extractors/live-org/extractors/mcd-baseline.js +120 -0
  64. package/dist/extractors/live-org/extractors/mcd-baseline.js.map +1 -0
  65. package/dist/extractors/live-org/extractors/omnistudio-retrieve.d.ts +23 -0
  66. package/dist/extractors/live-org/extractors/omnistudio-retrieve.d.ts.map +1 -0
  67. package/dist/extractors/live-org/extractors/omnistudio-retrieve.js +172 -0
  68. package/dist/extractors/live-org/extractors/omnistudio-retrieve.js.map +1 -0
  69. package/dist/extractors/live-org/rate-limit.d.ts +57 -0
  70. package/dist/extractors/live-org/rate-limit.d.ts.map +1 -1
  71. package/dist/extractors/live-org/rate-limit.js +93 -8
  72. package/dist/extractors/live-org/rate-limit.js.map +1 -1
  73. package/dist/extractors/live-org/vlocity/runner.d.ts +1 -1
  74. package/dist/extractors/live-org/vlocity/runner.d.ts.map +1 -1
  75. package/dist/extractors/live-org/vlocity/runner.js +20 -9
  76. package/dist/extractors/live-org/vlocity/runner.js.map +1 -1
  77. package/dist/index.d.ts +1 -0
  78. package/dist/index.d.ts.map +1 -1
  79. package/dist/index.js +1 -0
  80. package/dist/index.js.map +1 -1
  81. package/dist/ingest/__tests__/multi-org-orchestrator.test.js +3 -0
  82. package/dist/ingest/__tests__/multi-org-orchestrator.test.js.map +1 -1
  83. package/dist/ingest/live-ingest.d.ts +70 -1
  84. package/dist/ingest/live-ingest.d.ts.map +1 -1
  85. package/dist/ingest/live-ingest.js +109 -7
  86. package/dist/ingest/live-ingest.js.map +1 -1
  87. package/dist/parsers/__tests__/edge-provenance.test.d.ts +2 -0
  88. package/dist/parsers/__tests__/edge-provenance.test.d.ts.map +1 -0
  89. package/dist/parsers/__tests__/edge-provenance.test.js +44 -0
  90. package/dist/parsers/__tests__/edge-provenance.test.js.map +1 -0
  91. package/dist/parsers/__tests__/lwc-bindings.test.js +72 -0
  92. package/dist/parsers/__tests__/lwc-bindings.test.js.map +1 -1
  93. package/dist/parsers/__tests__/mcd-gap-fills.test.d.ts +2 -0
  94. package/dist/parsers/__tests__/mcd-gap-fills.test.d.ts.map +1 -0
  95. package/dist/parsers/__tests__/mcd-gap-fills.test.js +75 -0
  96. package/dist/parsers/__tests__/mcd-gap-fills.test.js.map +1 -0
  97. package/dist/parsers/__tests__/omnistudio-overlap.test.d.ts +2 -0
  98. package/dist/parsers/__tests__/omnistudio-overlap.test.d.ts.map +1 -0
  99. package/dist/parsers/__tests__/omnistudio-overlap.test.js +163 -0
  100. package/dist/parsers/__tests__/omnistudio-overlap.test.js.map +1 -0
  101. package/dist/parsers/__tests__/omnistudio.golden.test.js +51 -3
  102. package/dist/parsers/__tests__/omnistudio.golden.test.js.map +1 -1
  103. package/dist/parsers/__tests__/reflection-walker.test.d.ts +2 -0
  104. package/dist/parsers/__tests__/reflection-walker.test.d.ts.map +1 -0
  105. package/dist/parsers/__tests__/reflection-walker.test.js +162 -0
  106. package/dist/parsers/__tests__/reflection-walker.test.js.map +1 -0
  107. package/dist/parsers/__tests__/vlocity.golden.test.js +106 -5
  108. package/dist/parsers/__tests__/vlocity.golden.test.js.map +1 -1
  109. package/dist/parsers/apex/__tests__/is-test-attribute.test.d.ts +2 -0
  110. package/dist/parsers/apex/__tests__/is-test-attribute.test.d.ts.map +1 -0
  111. package/dist/parsers/apex/__tests__/is-test-attribute.test.js +54 -0
  112. package/dist/parsers/apex/__tests__/is-test-attribute.test.js.map +1 -0
  113. package/dist/parsers/apex/__tests__/regex-arg-count.test.d.ts +2 -0
  114. package/dist/parsers/apex/__tests__/regex-arg-count.test.d.ts.map +1 -0
  115. package/dist/parsers/apex/__tests__/regex-arg-count.test.js +82 -0
  116. package/dist/parsers/apex/__tests__/regex-arg-count.test.js.map +1 -0
  117. package/dist/parsers/apex/class.d.ts.map +1 -1
  118. package/dist/parsers/apex/class.js +103 -5
  119. package/dist/parsers/apex/class.js.map +1 -1
  120. package/dist/parsers/common.d.ts +4 -1
  121. package/dist/parsers/common.d.ts.map +1 -1
  122. package/dist/parsers/common.js +15 -2
  123. package/dist/parsers/common.js.map +1 -1
  124. package/dist/parsers/contract.d.ts +0 -2
  125. package/dist/parsers/contract.d.ts.map +1 -1
  126. package/dist/parsers/contract.js +0 -7
  127. package/dist/parsers/contract.js.map +1 -1
  128. package/dist/parsers/generic/reflection-walker.d.ts +90 -0
  129. package/dist/parsers/generic/reflection-walker.d.ts.map +1 -0
  130. package/dist/parsers/generic/reflection-walker.js +195 -0
  131. package/dist/parsers/generic/reflection-walker.js.map +1 -0
  132. package/dist/parsers/lwc/html-visitor.d.ts.map +1 -1
  133. package/dist/parsers/lwc/html-visitor.js +81 -3
  134. package/dist/parsers/lwc/html-visitor.js.map +1 -1
  135. package/dist/parsers/object/object.d.ts.map +1 -1
  136. package/dist/parsers/object/object.js +34 -0
  137. package/dist/parsers/object/object.js.map +1 -1
  138. package/dist/parsers/omnistudio/integration-procedure.d.ts.map +1 -1
  139. package/dist/parsers/omnistudio/integration-procedure.js +6 -3
  140. package/dist/parsers/omnistudio/integration-procedure.js.map +1 -1
  141. package/dist/parsers/omnistudio/overlap-detector.d.ts +50 -0
  142. package/dist/parsers/omnistudio/overlap-detector.d.ts.map +1 -0
  143. package/dist/parsers/omnistudio/overlap-detector.js +129 -0
  144. package/dist/parsers/omnistudio/overlap-detector.js.map +1 -0
  145. package/dist/parsers/omnistudio/process.d.ts.map +1 -1
  146. package/dist/parsers/omnistudio/process.js +17 -4
  147. package/dist/parsers/omnistudio/process.js.map +1 -1
  148. package/dist/parsers/omnistudio/ui-card.d.ts.map +1 -1
  149. package/dist/parsers/omnistudio/ui-card.js +6 -3
  150. package/dist/parsers/omnistudio/ui-card.js.map +1 -1
  151. package/dist/parsers/vlocity/common.d.ts +1 -2
  152. package/dist/parsers/vlocity/common.d.ts.map +1 -1
  153. package/dist/parsers/vlocity/common.js +0 -3
  154. package/dist/parsers/vlocity/common.js.map +1 -1
  155. package/dist/parsers/vlocity/integration-procedure.d.ts.map +1 -1
  156. package/dist/parsers/vlocity/integration-procedure.js +19 -3
  157. package/dist/parsers/vlocity/integration-procedure.js.map +1 -1
  158. package/dist/parsers/vlocity/omni-script.d.ts.map +1 -1
  159. package/dist/parsers/vlocity/omni-script.js +5 -2
  160. package/dist/parsers/vlocity/omni-script.js.map +1 -1
  161. package/dist/parsers/vlocity/vlocity-card.d.ts.map +1 -1
  162. package/dist/parsers/vlocity/vlocity-card.js +5 -2
  163. package/dist/parsers/vlocity/vlocity-card.js.map +1 -1
  164. package/dist/render/__tests__/sarif.test.d.ts +2 -0
  165. package/dist/render/__tests__/sarif.test.d.ts.map +1 -0
  166. package/dist/render/__tests__/sarif.test.js +129 -0
  167. package/dist/render/__tests__/sarif.test.js.map +1 -0
  168. package/dist/render/sarif.d.ts +94 -0
  169. package/dist/render/sarif.d.ts.map +1 -0
  170. package/dist/render/sarif.js +133 -0
  171. package/dist/render/sarif.js.map +1 -0
  172. package/dist/storage/__tests__/analysis-tables-migration.test.js +1 -1
  173. package/dist/storage/__tests__/migrations.test.js +4 -4
  174. package/dist/storage/__tests__/rename-stability.test.d.ts +2 -0
  175. package/dist/storage/__tests__/rename-stability.test.d.ts.map +1 -0
  176. package/dist/storage/__tests__/rename-stability.test.js +135 -0
  177. package/dist/storage/__tests__/rename-stability.test.js.map +1 -0
  178. package/dist/storage/index.d.ts +1 -0
  179. package/dist/storage/index.d.ts.map +1 -1
  180. package/dist/storage/index.js +1 -0
  181. package/dist/storage/index.js.map +1 -1
  182. package/dist/storage/interfaces.d.ts +3 -0
  183. package/dist/storage/interfaces.d.ts.map +1 -1
  184. package/dist/storage/sqlite/graph-store.d.ts +6 -0
  185. package/dist/storage/sqlite/graph-store.d.ts.map +1 -1
  186. package/dist/storage/sqlite/graph-store.js +8 -0
  187. package/dist/storage/sqlite/graph-store.js.map +1 -1
  188. package/dist/storage/sqlite/migrations.d.ts.map +1 -1
  189. package/dist/storage/sqlite/migrations.js +19 -0
  190. package/dist/storage/sqlite/migrations.js.map +1 -1
  191. package/dist/storage/sqlite/rename-stability.d.ts +94 -0
  192. package/dist/storage/sqlite/rename-stability.d.ts.map +1 -0
  193. package/dist/storage/sqlite/rename-stability.js +96 -0
  194. package/dist/storage/sqlite/rename-stability.js.map +1 -0
  195. package/package.json +4 -1
@@ -0,0 +1,90 @@
1
+ import type { OrgId } from "@ryanstark24/sfgraph-shared";
2
+ import type { NodeFact } from "../../domain/index.js";
3
+ import type { GraphStore } from "../../storage/interfaces.js";
4
+ import type { ParseContext } from "../contract.js";
5
+ /**
6
+ * Reflection-based dependency walker. Scans every node's attributes for
7
+ * string values whose content matches a known qualified-name bare-name
8
+ * already present in the graph. When a match exists AND the target is
9
+ * not the source itself, emits a generic `REFERENCES` edge tagged
10
+ * `source: 'reflection'` so consumers can distinguish pattern-matched
11
+ * edges from those a real parser produced.
12
+ *
13
+ * **Why this exists.** sfgraph hand-rolls parsers per metadata type, but
14
+ * some types (OmniStudio-on-Core PropertySet blobs, Vlocity Definition
15
+ * fields, formula expressions on standard objects) carry references
16
+ * buried inside long-text JSON/XML that the platform's describeMetadata
17
+ * doesn't expose a schema for. Rather than write a parser per type, the
18
+ * reflector walks any blob defensively and surfaces likely references
19
+ * with explicit `confidence: 'pattern-match'` so a downstream consumer
20
+ * can choose precision-vs-recall.
21
+ *
22
+ * **Known limitations** (all documented + flagged on emitted edges):
23
+ * - Bare-name match on the dst → false positives when a string
24
+ * coincidentally equals a qname (e.g. a comment field containing the
25
+ * literal word "Account"). Mitigated by string-length floor + reserved-
26
+ * word skip list, but not eliminated.
27
+ * - Ambiguous matches (e.g. `Account` is both a CustomObject AND a
28
+ * namespace) emit one edge per candidate, all tagged `ambiguous: true`.
29
+ * Consumers should treat these as "investigate" not "act on".
30
+ * - Misses procedural references (a conditional branch that references
31
+ * different DataRaptors based on input — the reference is in the
32
+ * control flow, not in a string value).
33
+ * - Does NOT dedup against more-specific edges. If parsers/foo emits
34
+ * `OS_USES_DR` between A and B, the reflector may also emit
35
+ * `REFERENCES` between A and B with source='reflection'. They coexist
36
+ * in different edge tables; consumers can filter on rel-type +
37
+ * attributes.source.
38
+ *
39
+ * **Cost.** O(nodes × avg-blob-string-count). On a 50k-node org with
40
+ * Vlocity heavy, expect ~30s; bounded by maxEdgesPerSource so a single
41
+ * 10MB blob can't dominate the run.
42
+ *
43
+ * Wired into live-ingest as a post-merge pass, default **on**.
44
+ * Precision-conscious consumers filter `attributes.source !==
45
+ * 'reflection'` to see only parser-quality edges; breadth-conscious
46
+ * consumers (migration audits, dead-code first-pass scans) take the
47
+ * union. Disable entirely via `disableReflectionWalker: true` if even
48
+ * the cost of emitting these edges is unwelcome.
49
+ */
50
+ export interface ReflectionWalkerOpts {
51
+ orgId: OrgId | string;
52
+ ctx: ParseContext;
53
+ /** Strings shorter than this are ignored — too noisy. Default 4. */
54
+ minStringLength?: number;
55
+ /** Max recursion depth into nested objects/arrays. Default 32. */
56
+ maxDepth?: number;
57
+ /** Max REFERENCES edges emitted per source node. Default 200 — caps
58
+ * the blast radius of a pathologically large blob. */
59
+ maxEdgesPerSource?: number;
60
+ /** When set, scan only these label families (e.g. only OmniProcess
61
+ * + VlocityCard). Default: every label in the graph. */
62
+ scopeToLabels?: string[];
63
+ }
64
+ export interface ReflectionWalkerResult {
65
+ /** Number of source nodes scanned. */
66
+ scanned: number;
67
+ /** Number of REFERENCES edges emitted (after de-dup). */
68
+ edgesEmitted: number;
69
+ /** Source nodes that hit the maxEdgesPerSource cap. Useful telemetry
70
+ * for tuning the cap. */
71
+ truncatedSources: number;
72
+ /** Distinct dst qnames involved in ambiguous (multi-label-match) edges. */
73
+ ambiguousMatches: number;
74
+ }
75
+ export declare function walkBlobsForReferences(store: GraphStore, opts: ReflectionWalkerOpts): ReflectionWalkerResult;
76
+ /** Small helper kept exported for tests that want to drive the walker
77
+ * against a synthetic node without touching the graph. */
78
+ export declare function _scanValueForReferences(value: unknown, index: {
79
+ exact: Map<string, string[]>;
80
+ lower: Map<string, string[]>;
81
+ }, opts: {
82
+ minStringLength?: number;
83
+ maxDepth?: number;
84
+ }): Array<{
85
+ value: string;
86
+ viaKey: string | null;
87
+ candidates: string[];
88
+ }>;
89
+ export type { NodeFact };
90
+ //# sourceMappingURL=reflection-walker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reflection-walker.d.ts","sourceRoot":"","sources":["../../../src/parsers/generic/reflection-walker.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,6BAA6B,CAAC;AACzD,OAAO,KAAK,EAAY,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAEhE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAE9D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAEnD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4CG;AAEH,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,KAAK,GAAG,MAAM,CAAC;IACtB,GAAG,EAAE,YAAY,CAAC;IAClB,oEAAoE;IACpE,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,kEAAkE;IAClE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;2DACuD;IACvD,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B;6DACyD;IACzD,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;CAC1B;AAED,MAAM,WAAW,sBAAsB;IACrC,sCAAsC;IACtC,OAAO,EAAE,MAAM,CAAC;IAChB,yDAAyD;IACzD,YAAY,EAAE,MAAM,CAAC;IACrB;8BAC0B;IAC1B,gBAAgB,EAAE,MAAM,CAAC;IACzB,2EAA2E;IAC3E,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAsGD,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,UAAU,EACjB,IAAI,EAAE,oBAAoB,GACzB,sBAAsB,CAgFxB;AAED;2DAC2D;AAC3D,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,OAAO,EACd,KAAK,EAAE;IAAE,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IAAC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAA;CAAE,EACrE,IAAI,EAAE;IAAE,eAAe,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,GACpD,KAAK,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,UAAU,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC,CAcvE;AAGD,YAAY,EAAE,QAAQ,EAAE,CAAC"}
@@ -0,0 +1,195 @@
1
+ import { asOrgId } from "@ryanstark24/sfgraph-shared";
2
+ import { REL_TYPES } from "../../domain/index.js";
3
+ import { makeEdge } from "../common.js";
4
+ /** String values we never treat as candidate references — too generic
5
+ * to be meaningful and dominate the false-positive tail. */
6
+ const RESERVED_WORDS = new Set([
7
+ "true",
8
+ "false",
9
+ "null",
10
+ "undefined",
11
+ "this",
12
+ "self",
13
+ "string",
14
+ "number",
15
+ "boolean",
16
+ "object",
17
+ "array",
18
+ "any",
19
+ "void",
20
+ "id",
21
+ "name",
22
+ "type",
23
+ "value",
24
+ "default",
25
+ "none",
26
+ "yes",
27
+ "no",
28
+ ]);
29
+ /** Extract the bare name from a qualifiedName. Mirrors the convention
30
+ * used by cross-flavor-resolver: everything after the first `:`. */
31
+ function bareName(qname) {
32
+ const colon = qname.indexOf(":");
33
+ return colon >= 0 ? qname.slice(colon + 1) : qname;
34
+ }
35
+ /**
36
+ * Build a `bareName → qname[]` index across every node in the org. Used
37
+ * to map a string-value hit back to one (unambiguous) or more
38
+ * (ambiguous) candidate target qnames.
39
+ *
40
+ * Returns both a case-sensitive index (preferred — Salesforce identifiers
41
+ * are case-sensitive in code but case-insensitive in describe) and a
42
+ * lowercased fallback for case-insensitive hits.
43
+ */
44
+ function buildBareNameIndex(store, orgId, scopeToLabels) {
45
+ const exact = new Map();
46
+ const lower = new Map();
47
+ const labels = scopeToLabels && scopeToLabels.length > 0
48
+ ? scopeToLabels
49
+ : store.listAllLabels();
50
+ for (const label of labels) {
51
+ // 50k cap matches what find-nodes uses; bigger orgs would benefit
52
+ // from streaming but this index lives in memory by design.
53
+ const nodes = store.listNodesByLabel(orgId, label, 50_000);
54
+ for (const n of nodes) {
55
+ const q = String(n.qualifiedName);
56
+ const bare = bareName(q);
57
+ if (bare.length === 0)
58
+ continue;
59
+ const list = exact.get(bare) ?? [];
60
+ list.push(q);
61
+ exact.set(bare, list);
62
+ const lo = bare.toLowerCase();
63
+ const ll = lower.get(lo) ?? [];
64
+ ll.push(q);
65
+ lower.set(lo, ll);
66
+ }
67
+ }
68
+ return { exact, lower };
69
+ }
70
+ /** Recursively walk a value, yielding every string leaf along with the
71
+ * parent-object key that produced it (for `viaKey` annotation on the
72
+ * edge). Bounded by `maxDepth` to dodge pathological nesting. */
73
+ function* walkStrings(value, depth, maxDepth, parentKey) {
74
+ if (depth > maxDepth || value == null)
75
+ return;
76
+ if (typeof value === "string") {
77
+ yield { key: parentKey, value };
78
+ return;
79
+ }
80
+ if (Array.isArray(value)) {
81
+ for (const item of value) {
82
+ yield* walkStrings(item, depth + 1, maxDepth, parentKey);
83
+ }
84
+ return;
85
+ }
86
+ if (typeof value === "object") {
87
+ for (const [k, v] of Object.entries(value)) {
88
+ yield* walkStrings(v, depth + 1, maxDepth, k);
89
+ }
90
+ }
91
+ }
92
+ export function walkBlobsForReferences(store, opts) {
93
+ const orgId = typeof opts.orgId === "string" ? asOrgId(opts.orgId) : opts.orgId;
94
+ const minLen = Math.max(1, opts.minStringLength ?? 4);
95
+ const maxDepth = Math.max(1, opts.maxDepth ?? 32);
96
+ const maxEdgesPerSource = Math.max(1, opts.maxEdgesPerSource ?? 200);
97
+ const index = buildBareNameIndex(store, orgId, opts.scopeToLabels);
98
+ const result = {
99
+ scanned: 0,
100
+ edgesEmitted: 0,
101
+ truncatedSources: 0,
102
+ ambiguousMatches: 0,
103
+ };
104
+ // Iterate the same label set we indexed — every source node gets
105
+ // scanned exactly once.
106
+ const labels = opts.scopeToLabels && opts.scopeToLabels.length > 0
107
+ ? opts.scopeToLabels
108
+ : store.listAllLabels();
109
+ store.transaction(() => {
110
+ for (const label of labels) {
111
+ const nodes = store.listNodesByLabel(orgId, label, 50_000);
112
+ for (const node of nodes) {
113
+ result.scanned += 1;
114
+ const srcQname = String(node.qualifiedName);
115
+ const edgesForThisSource = [];
116
+ const seenDst = new Set();
117
+ for (const { key, value } of walkStrings(node.attributes, 0, maxDepth, null)) {
118
+ if (edgesForThisSource.length >= maxEdgesPerSource) {
119
+ result.truncatedSources += 1;
120
+ break;
121
+ }
122
+ if (value.length < minLen)
123
+ continue;
124
+ if (RESERVED_WORDS.has(value.toLowerCase()))
125
+ continue;
126
+ // Skip obvious non-identifiers (multiline strings, paths,
127
+ // sentences). Salesforce identifiers don't contain whitespace.
128
+ if (/\s/.test(value))
129
+ continue;
130
+ // Skip pure numeric/UUID-ish blobs — too noisy.
131
+ if (/^[0-9-]+$/.test(value))
132
+ continue;
133
+ // Try exact match first, fall back to lowercase.
134
+ let candidates = index.exact.get(value);
135
+ if (!candidates)
136
+ candidates = index.lower.get(value.toLowerCase());
137
+ if (!candidates || candidates.length === 0)
138
+ continue;
139
+ const ambiguous = candidates.length > 1;
140
+ if (ambiguous)
141
+ result.ambiguousMatches += 1;
142
+ for (const dst of candidates) {
143
+ // Skip self-references and already-emitted dsts for this source.
144
+ if (dst === srcQname)
145
+ continue;
146
+ if (seenDst.has(dst))
147
+ continue;
148
+ seenDst.add(dst);
149
+ const e = makeEdge(opts.ctx, srcQname, REL_TYPES.REFERENCES, dst, {
150
+ source: "reflection",
151
+ confidence: "pattern-match",
152
+ ...(key ? { viaKey: key } : {}),
153
+ ...(ambiguous ? { ambiguous: true } : {}),
154
+ });
155
+ // Override orgId from ctx — makeEdge stamps ctx.orgId on the
156
+ // emitted edge, but we want the edge stored under the org the
157
+ // caller asked us to scan (same hazard the arity-resolver
158
+ // handles in resolveApexMethodArity).
159
+ edgesForThisSource.push({ ...e, orgId });
160
+ if (edgesForThisSource.length >= maxEdgesPerSource)
161
+ break;
162
+ }
163
+ }
164
+ if (edgesForThisSource.length > 0) {
165
+ store.mergeEdges(edgesForThisSource);
166
+ result.edgesEmitted += edgesForThisSource.length;
167
+ }
168
+ }
169
+ }
170
+ });
171
+ return result;
172
+ }
173
+ /** Small helper kept exported for tests that want to drive the walker
174
+ * against a synthetic node without touching the graph. */
175
+ export function _scanValueForReferences(value, index, opts) {
176
+ const minLen = opts.minStringLength ?? 4;
177
+ const maxDepth = opts.maxDepth ?? 32;
178
+ const out = [];
179
+ for (const { key, value: v } of walkStrings(value, 0, maxDepth, null)) {
180
+ if (v.length < minLen)
181
+ continue;
182
+ if (RESERVED_WORDS.has(v.toLowerCase()))
183
+ continue;
184
+ if (/\s/.test(v))
185
+ continue;
186
+ if (/^[0-9-]+$/.test(v))
187
+ continue;
188
+ const candidates = index.exact.get(v) ?? index.lower.get(v.toLowerCase()) ?? [];
189
+ if (candidates.length === 0)
190
+ continue;
191
+ out.push({ value: v, viaKey: key, candidates });
192
+ }
193
+ return out;
194
+ }
195
+ //# sourceMappingURL=reflection-walker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reflection-walker.js","sourceRoot":"","sources":["../../../src/parsers/generic/reflection-walker.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"html-visitor.d.ts","sourceRoot":"","sources":["../../../src/parsers/lwc/html-visitor.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAGhE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAEnD,MAAM,WAAW,iBAAiB;IAChC,UAAU,EAAE,QAAQ,EAAE,CAAC;IACvB,UAAU,EAAE,QAAQ,EAAE,CAAC;CACxB;AAaD,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,GAAG,EAAE,YAAY,EACjB,QAAQ,CAAC,EAAE,WAAW,GACrB,iBAAiB,CA2GnB"}
1
+ {"version":3,"file":"html-visitor.d.ts","sourceRoot":"","sources":["../../../src/parsers/lwc/html-visitor.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAGhE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAEnD,MAAM,WAAW,iBAAiB;IAChC,UAAU,EAAE,QAAQ,EAAE,CAAC;IACvB,UAAU,EAAE,QAAQ,EAAE,CAAC;CACxB;AAaD,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,GAAG,EAAE,YAAY,EACjB,QAAQ,CAAC,EAAE,WAAW,GACrB,iBAAiB,CAmMnB"}
@@ -20,6 +20,41 @@ export function extractHtmlEdges(source, lwcQname, ctx, bindings) {
20
20
  const seenEvt = new Set();
21
21
  const seenField = new Set();
22
22
  const seenProperty = new Set();
23
+ // Directive attribute names — both the modern `lwc:*` family and the
24
+ // legacy template:1 forms. Each maps to a label recorded on the emitted
25
+ // edge's `attributes.directive` so consumers can distinguish "conditional"
26
+ // bindings from regular property reads.
27
+ //
28
+ // `lwc:for:each` and legacy `for:each` carry an iterable expression; the
29
+ // companion `for:item` / `lwc:for:item` attributes name an alias used by
30
+ // child bindings (e.g. `{card.title}` where `card` aliases `items[i]`).
31
+ // We record the iterable as a property bind with `directive: 'lwc:for:each'`
32
+ // plus `forItem: '<alias>'` when the sibling attribute is present.
33
+ // Alias-resolution of child bindings is intentionally out of scope here —
34
+ // see W2 follow-ups.
35
+ const CONDITIONAL_DIRECTIVES = new Map([
36
+ ["lwc:if", "lwc:if"],
37
+ ["lwc:elseif", "lwc:elseif"],
38
+ ["if:true", "if:true"],
39
+ ["if:false", "if:false"],
40
+ ]);
41
+ const FOR_EACH_DIRECTIVES = new Set(["lwc:for:each", "for:each", "lwc:iterator:each"]);
42
+ const FOR_ITEM_ATTRS = new Set(["lwc:for:item", "for:item", "iterator:item"]);
43
+ const emitDirectiveBinding = (expr, directive, extra) => {
44
+ // Pull the head identifier out of `{user.isAdmin}` → `user.isAdmin` →
45
+ // head = `user`. Mirrors emitBinding's split for consistency, but we
46
+ // always emit as LWC_BINDS_PROPERTY because directive bindings are
47
+ // imperative property reads (not field reads on a @wire'd sObject).
48
+ const dst = `LWCProperty:${expr}`;
49
+ if (seenProperty.has(dst))
50
+ return;
51
+ seenProperty.add(dst);
52
+ extraEdges.push(makeEdge(ctx, lwcQname, REL_TYPES.LWC_BINDS_PROPERTY, dst, {
53
+ binding: expr,
54
+ directive,
55
+ ...extra,
56
+ }));
57
+ };
23
58
  const emitBinding = (expr) => {
24
59
  // `record.Name` → split into [record, Name]; `record.fields.Account.Name`
25
60
  // is unusual in templates and falls through to property.
@@ -100,10 +135,53 @@ export function extractHtmlEdges(source, lwcQname, ctx, bindings) {
100
135
  extraEdges.push(makeEdge(ctx, lwcQname, REL_TYPES.EMBEDS_AURA, dst, { tag }));
101
136
  }
102
137
  }
138
+ // Two-pass attribute scan. First pass picks up directive attributes
139
+ // (lwc:if / lwc:for:each / legacy if:true / for:each) so the binding
140
+ // gets emitted with `attributes.directive` set. Second pass runs the
141
+ // general onevent / value-binding logic and skips bindings the
142
+ // directive pass already recorded.
143
+ const attrs = (n?.attrs ?? []).map((a) => ({ name: a?.name ?? "", value: a?.value ?? "" }));
144
+ // Resolve for:item alias up front so the for:each directive can record it.
145
+ let forItemAlias;
146
+ for (const a of attrs) {
147
+ if (FOR_ITEM_ATTRS.has(a.name)) {
148
+ forItemAlias = a.value || undefined;
149
+ break;
150
+ }
151
+ }
152
+ for (const a of attrs) {
153
+ const directive = CONDITIONAL_DIRECTIVES.get(a.name);
154
+ if (directive) {
155
+ // Conditional directive: `lwc:if={isShown}` / `if:true={state.ready}`
156
+ // The value is a single bound expression wrapped in braces (or
157
+ // sometimes bare for legacy if:true). Strip braces defensively.
158
+ const raw = a.value.trim();
159
+ const expr = raw.startsWith("{") && raw.endsWith("}") ? raw.slice(1, -1) : raw;
160
+ if (expr)
161
+ emitDirectiveBinding(expr, directive, {});
162
+ continue;
163
+ }
164
+ if (FOR_EACH_DIRECTIVES.has(a.name)) {
165
+ const raw = a.value.trim();
166
+ const expr = raw.startsWith("{") && raw.endsWith("}") ? raw.slice(1, -1) : raw;
167
+ if (expr) {
168
+ const extra = {};
169
+ if (forItemAlias)
170
+ extra.forItem = forItemAlias;
171
+ emitDirectiveBinding(expr, a.name, extra);
172
+ }
173
+ continue;
174
+ }
175
+ }
103
176
  // Attributes that look like onevent listeners + mustache bindings in
104
177
  // attribute values (e.g. `<lightning-input value={record.Name}>`).
105
- for (const a of n?.attrs ?? []) {
106
- const name = a?.name ?? "";
178
+ // Directive attributes already handled above are skipped via the
179
+ // `seenProperty` set populated by emitDirectiveBinding.
180
+ for (const a of attrs) {
181
+ const name = a.name;
182
+ if (CONDITIONAL_DIRECTIVES.has(name) || FOR_EACH_DIRECTIVES.has(name) || FOR_ITEM_ATTRS.has(name)) {
183
+ continue;
184
+ }
107
185
  if (name.startsWith("on") && name.length > 2) {
108
186
  const evtName = name.slice(2);
109
187
  if (!seenEvt.has(evtName)) {
@@ -111,7 +189,7 @@ export function extractHtmlEdges(source, lwcQname, ctx, bindings) {
111
189
  extraEdges.push(makeEdge(ctx, lwcQname, REL_TYPES.LISTENS_TO_EVENT, `LWCEvent:${evtName}`));
112
190
  }
113
191
  }
114
- const val = a?.value;
192
+ const val = a.value;
115
193
  if (typeof val === "string")
116
194
  scanText(val);
117
195
  }
@@ -1 +1 @@
1
- {"version":3,"file":"html-visitor.js","sourceRoot":"","sources":["../../../src/parsers/lwc/html-visitor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"html-visitor.js","sourceRoot":"","sources":["../../../src/parsers/lwc/html-visitor.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"object.d.ts","sourceRoot":"","sources":["../../../src/parsers/object/object.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAKxE,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrC,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC1C;AAUD,qBAAa,kBAAmB,YAAW,MAAM,CAAC,cAAc,CAAC;IAC/D,QAAQ,CAAC,QAAQ,iBAA4B;IAC7C,QAAQ,CAAC,IAAI,kBAAkB;IAEzB,KAAK,CAAC,KAAK,EAAE,cAAc,EAAE,GAAG,EAAE,YAAY,GAAG,OAAO,CAAC,WAAW,CAAC;CAoP5E"}
1
+ {"version":3,"file":"object.d.ts","sourceRoot":"","sources":["../../../src/parsers/object/object.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAKxE,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrC,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC1C;AAUD,qBAAa,kBAAmB,YAAW,MAAM,CAAC,cAAc,CAAC;IAC/D,QAAQ,CAAC,QAAQ,iBAA4B;IAC7C,QAAQ,CAAC,IAAI,kBAAkB;IAEzB,KAAK,CAAC,KAAK,EAAE,cAAc,EAAE,GAAG,EAAE,YAAY,GAAG,OAAO,CAAC,WAAW,CAAC;CAuT5E"}
@@ -96,6 +96,25 @@ export class CustomObjectParser {
96
96
  ...(fieldType ? { fieldType } : {}),
97
97
  }));
98
98
  }
99
+ // W2-04: MCD gap-fill edges. The platform's
100
+ // MetadataComponentDependency SObject omits picklist→GlobalValueSet
101
+ // and dependent-picklist→controlling-field references; synthesise
102
+ // them from the field's describe payload. The valueSet structure
103
+ // is fast-xml-parser's nested form: `{ valueSetName: 'X' }` or
104
+ // `{ controllingField: 'Status__c', valueSettings: [...] }`.
105
+ const valueSet = f.valueSet;
106
+ if (valueSet && typeof valueSet === "object") {
107
+ const valueSetName = valueSet.valueSetName;
108
+ if (typeof valueSetName === "string" && valueSetName.length > 0) {
109
+ edges.push(makeEdge(ctx, fieldQname, REL_TYPES.USES_GLOBAL_VALUE_SET, `GlobalValueSet:${valueSetName}`, { ...(fieldType ? { fieldType } : {}) }));
110
+ }
111
+ const controllingField = valueSet.controllingField;
112
+ if (typeof controllingField === "string" && controllingField.length > 0) {
113
+ // Controlling field is named on the SAME object as this dependent
114
+ // picklist (Salesforce only supports same-object controllers).
115
+ edges.push(makeEdge(ctx, fieldQname, REL_TYPES.DEPENDS_ON_FIELD, `CustomField:${apiName}.${controllingField}`, { reason: "dependent-picklist" }));
116
+ }
117
+ }
99
118
  // Formula refs on inline-fields path too (same regex pattern the
100
119
  // separate-file branch uses).
101
120
  if (formula) {
@@ -147,6 +166,21 @@ export class CustomObjectParser {
147
166
  m = re.exec(f.formula);
148
167
  }
149
168
  }
169
+ // W2-04 MCD gap-fill on the filesystem path (mirrors the inline path
170
+ // above). parseField exposes the unparsed XML as `raw`, which we
171
+ // probe for valueSet.valueSetName / valueSet.controllingField.
172
+ const rawField = f.raw;
173
+ const fsValueSet = rawField?.valueSet;
174
+ if (fsValueSet && typeof fsValueSet === "object") {
175
+ const valueSetName = fsValueSet.valueSetName;
176
+ if (typeof valueSetName === "string" && valueSetName.length > 0) {
177
+ edges.push(makeEdge(ctx, fieldQname, REL_TYPES.USES_GLOBAL_VALUE_SET, `GlobalValueSet:${valueSetName}`, { ...(f.type ? { fieldType: f.type } : {}) }));
178
+ }
179
+ const controllingField = fsValueSet.controllingField;
180
+ if (typeof controllingField === "string" && controllingField.length > 0) {
181
+ edges.push(makeEdge(ctx, fieldQname, REL_TYPES.DEPENDS_ON_FIELD, `CustomField:${apiName}.${controllingField}`, { reason: "dependent-picklist" }));
182
+ }
183
+ }
150
184
  }
151
185
  // Record types
152
186
  for (const [rtApi, rxml] of Object.entries(input.recordTypes ?? {})) {
@@ -1 +1 @@
1
- {"version":3,"file":"object.js","sourceRoot":"","sources":["../../../src/parsers/object/object.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"object.js","sourceRoot":"","sources":["../../../src/parsers/object/object.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"integration-procedure.d.ts","sourceRoot":"","sources":["../../../src/parsers/omnistudio/integration-procedure.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAGxE,MAAM,WAAW,6BAA6B;IAC5C,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,qBAAa,8BAA+B,YAAW,MAAM,CAAC,6BAA6B,CAAC;IAC1F,QAAQ,CAAC,QAAQ,6BAAgD;IACjE,QAAQ,CAAC,IAAI,8BAA8B;IAErC,KAAK,CAAC,KAAK,EAAE,6BAA6B,EAAE,GAAG,EAAE,YAAY,GAAG,OAAO,CAAC,WAAW,CAAC;CA+C3F"}
1
+ {"version":3,"file":"integration-procedure.d.ts","sourceRoot":"","sources":["../../../src/parsers/omnistudio/integration-procedure.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAGxE,MAAM,WAAW,6BAA6B;IAC5C,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,qBAAa,8BAA+B,YAAW,MAAM,CAAC,6BAA6B,CAAC;IAC1F,QAAQ,CAAC,QAAQ,6BAAgD;IACjE,QAAQ,CAAC,IAAI,8BAA8B;IAErC,KAAK,CAAC,KAAK,EAAE,6BAA6B,EAAE,GAAG,EAAE,YAAY,GAAG,OAAO,CAAC,WAAW,CAAC;CAiD3F"}
@@ -19,12 +19,15 @@ export class OmniIntegrationProcedureParser {
19
19
  });
20
20
  nodes.push(node);
21
21
  const src = node.qualifiedName;
22
- walk(md, (v, key) => {
22
+ walk(md, (v) => {
23
23
  if (!v || typeof v !== "object")
24
24
  return;
25
+ const rawType = v.Type ?? v.type;
26
+ if (typeof rawType !== "string" || rawType.length === 0)
27
+ return;
25
28
  const props = v.propertySet ?? v;
26
- const type = String(v.Type ?? v.type ?? key ?? "").toLowerCase();
27
- if (type.includes("datatransform")) {
29
+ const type = rawType.toLowerCase().replace(/[^a-z0-9]/g, "");
30
+ if (type.includes("datatransform") || type.includes("dataraptor")) {
28
31
  const target = String(props?.dataTransformName ?? props?.bundle ?? "");
29
32
  if (target)
30
33
  edges.push(makeEdge(ctx, src, REL_TYPES.OMNI_CALLS_DATA_TRANSFORM, `OmniDataTransform:${stripNs(target, ctx.namespace)}`));
@@ -1 +1 @@
1
- {"version":3,"file":"integration-procedure.js","sourceRoot":"","sources":["../../../src/parsers/omnistudio/integration-procedure.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,iBAAiB,EAAiB,SAAS,EAAE,MAAM,uBAAuB,CAAC;AACnG,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEjD,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAO3E,MAAM,OAAO,8BAA8B;IAChC,QAAQ,GAAG,iBAAiB,CAAC,0BAA0B,CAAC;IACxD,IAAI,GAAG,0BAA0B,CAAC;IAE3C,KAAK,CAAC,KAAK,CAAC,KAAoC,EAAE,GAAiB;QACjE,MAAM,KAAK,GAAe,EAAE,CAAC;QAC7B,MAAM,KAAK,GAAe,EAAE,CAAC;QAC7B,MAAM,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QAClC,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC;QACxC,MAAM,IAAI,GAAG,aAAa,CAAC;YACzB,GAAG;YACH,KAAK,EAAE,0BAA0B;YACjC,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,GAAG,EAAE,EAAE;YACP,IAAI;SACL,CAAC,CAAC;QACH,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACjB,MAAM,GAAG,GAAG,IAAI,CAAC,aAAkC,CAAC;QACpD,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE;YAClB,IAAI,CAAC,CAAC,IAAI,OAAO,CAAC,KAAK,QAAQ;gBAAE,OAAO;YACxC,MAAM,KAAK,GAAI,CAAS,CAAC,WAAW,IAAI,CAAC,CAAC;YAC1C,MAAM,IAAI,GAAG,MAAM,CAAE,CAAS,CAAC,IAAI,IAAK,CAAS,CAAC,IAAI,IAAI,GAAG,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;YACnF,IAAI,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC;gBACnC,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,EAAE,iBAAiB,IAAI,KAAK,EAAE,MAAM,IAAI,EAAE,CAAC,CAAC;gBACvE,IAAI,MAAM;oBACR,KAAK,CAAC,IAAI,CACR,QAAQ,CACN,GAAG,EACH,GAAG,EACH,SAAS,CAAC,yBAAyB,EACnC,qBAAqB,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,SAAS,CAAC,EAAE,CACtD,CACF,CAAC;YACN,CAAC;iBAAM,IAAI,IAAI,CAAC,QAAQ,CAAC,sBAAsB,CAAC,EAAE,CAAC;gBACjD,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,EAAE,uBAAuB,IAAI,EAAE,CAAC,CAAC;gBAC5D,IAAI,MAAM;oBACR,KAAK,CAAC,IAAI,CACR,QAAQ,CACN,GAAG,EACH,GAAG,EACH,SAAS,CAAC,gCAAgC,EAC1C,4BAA4B,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,SAAS,CAAC,EAAE,CAC7D,CACF,CAAC;YACN,CAAC;iBAAM,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC5D,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,SAAS,CAAC,mBAAmB,EAAE,gBAAgB,CAAC,CAAC,CAAC;YAClF,CAAC;QACH,CAAC,CAAC,CAAC;QACH,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;IAC1B,CAAC;CACF"}
1
+ {"version":3,"file":"integration-procedure.js","sourceRoot":"","sources":["../../../src/parsers/omnistudio/integration-procedure.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,iBAAiB,EAAiB,SAAS,EAAE,MAAM,uBAAuB,CAAC;AACnG,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEjD,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAO3E,MAAM,OAAO,8BAA8B;IAChC,QAAQ,GAAG,iBAAiB,CAAC,0BAA0B,CAAC;IACxD,IAAI,GAAG,0BAA0B,CAAC;IAE3C,KAAK,CAAC,KAAK,CAAC,KAAoC,EAAE,GAAiB;QACjE,MAAM,KAAK,GAAe,EAAE,CAAC;QAC7B,MAAM,KAAK,GAAe,EAAE,CAAC;QAC7B,MAAM,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QAClC,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC;QACxC,MAAM,IAAI,GAAG,aAAa,CAAC;YACzB,GAAG;YACH,KAAK,EAAE,0BAA0B;YACjC,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,GAAG,EAAE,EAAE;YACP,IAAI;SACL,CAAC,CAAC;QACH,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACjB,MAAM,GAAG,GAAG,IAAI,CAAC,aAAkC,CAAC;QACpD,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE;YACb,IAAI,CAAC,CAAC,IAAI,OAAO,CAAC,KAAK,QAAQ;gBAAE,OAAO;YACxC,MAAM,OAAO,GAAI,CAAS,CAAC,IAAI,IAAK,CAAS,CAAC,IAAI,CAAC;YACnD,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAO;YAChE,MAAM,KAAK,GAAI,CAAS,CAAC,WAAW,IAAI,CAAC,CAAC;YAC1C,MAAM,IAAI,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;YAC7D,IAAI,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;gBAClE,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,EAAE,iBAAiB,IAAI,KAAK,EAAE,MAAM,IAAI,EAAE,CAAC,CAAC;gBACvE,IAAI,MAAM;oBACR,KAAK,CAAC,IAAI,CACR,QAAQ,CACN,GAAG,EACH,GAAG,EACH,SAAS,CAAC,yBAAyB,EACnC,qBAAqB,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,SAAS,CAAC,EAAE,CACtD,CACF,CAAC;YACN,CAAC;iBAAM,IAAI,IAAI,CAAC,QAAQ,CAAC,sBAAsB,CAAC,EAAE,CAAC;gBACjD,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,EAAE,uBAAuB,IAAI,EAAE,CAAC,CAAC;gBAC5D,IAAI,MAAM;oBACR,KAAK,CAAC,IAAI,CACR,QAAQ,CACN,GAAG,EACH,GAAG,EACH,SAAS,CAAC,gCAAgC,EAC1C,4BAA4B,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,SAAS,CAAC,EAAE,CAC7D,CACF,CAAC;YACN,CAAC;iBAAM,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC5D,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,SAAS,CAAC,mBAAmB,EAAE,gBAAgB,CAAC,CAAC,CAAC;YAClF,CAAC;QACH,CAAC,CAAC,CAAC;QACH,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;IAC1B,CAAC;CACF"}
@@ -0,0 +1,50 @@
1
+ import type { OrgId } from "@ryanstark24/sfgraph-shared";
2
+ import type { GraphStore } from "../../storage/interfaces.js";
3
+ import type { ParseContext } from "../contract.js";
4
+ /**
5
+ * Post-merge pass that annotates CANONICAL_OF pairs with a structural
6
+ * comparison. The cross-flavor resolver (cross-flavor-resolver.ts) tells us
7
+ * that `DataRaptor:Foo` and `OmniDataTransform:Foo` share a name; this pass
8
+ * tells us whether they actually *do the same thing* — useful when an org
9
+ * is mid-migration from Vlocity-CMT to OmniStudio-on-Core and a stakeholder
10
+ * needs to know which "same-named pair" is a true duplicate (cleanup
11
+ * candidate) versus a diverged implementation (needs manual reconciliation).
12
+ *
13
+ * Signature shape per node = sorted multiset of `(relType, normalisedDstLabel)`
14
+ * across the node's *outgoing* edges, with CANONICAL_OF self-edges excluded.
15
+ * Normalised dst label strips the `OmniDataTransform:` vs `DataRaptor:` etc.
16
+ * prefix family so the same downstream link is treated as the same in both
17
+ * flavours. We don't bake dst qname into the signature — that would treat
18
+ * "calls DR_Foo" and "calls OmniDataTransform:Foo" as different even when
19
+ * those two are themselves a CANONICAL_OF pair.
20
+ *
21
+ * Output: same CANONICAL_OF edges, but with `signaturesMatch:boolean` and
22
+ * `divergencePoints:string[]` attributes added. The edge identity
23
+ * (src/dst/relType) is unchanged, so mergeEdges idempotently updates the
24
+ * attributes in place.
25
+ *
26
+ * Runs on every ingest by default; disable via `disableOverlapDetect:
27
+ * true` in LiveIngestOpts if the false-positive recovery cost (a wrong
28
+ * "diverged" label sends an engineer chasing a non-issue) outweighs the
29
+ * migration-audit visibility for your use case.
30
+ */
31
+ export interface OverlapDetectOpts {
32
+ orgId: OrgId | string;
33
+ ctx: ParseContext;
34
+ /** When true, do not write annotated edges back to the store. */
35
+ dryRun?: boolean;
36
+ }
37
+ export interface OverlapDetectResult {
38
+ /** CANONICAL_OF pairs whose endpoints share an identical signature. */
39
+ matched: number;
40
+ /** CANONICAL_OF pairs whose signatures diverge. */
41
+ diverged: number;
42
+ /** CANONICAL_OF pairs whose endpoint nodes have no outgoing non-canonical
43
+ * edges on either side — comparison is vacuous, treated neither as
44
+ * matched nor diverged. */
45
+ empty: number;
46
+ /** Total edges annotated (one per CANONICAL_OF edge inspected). */
47
+ annotated: number;
48
+ }
49
+ export declare function detectOmnistudioOverlap(store: GraphStore, opts: OverlapDetectOpts): OverlapDetectResult;
50
+ //# sourceMappingURL=overlap-detector.d.ts.map