@ryanstark24/sfgraph-core 1.1.8 → 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.
- package/dist/analyze/__tests__/find-nodes.test.d.ts +2 -0
- package/dist/analyze/__tests__/find-nodes.test.d.ts.map +1 -0
- package/dist/analyze/__tests__/find-nodes.test.js +129 -0
- package/dist/analyze/__tests__/find-nodes.test.js.map +1 -0
- package/dist/analyze/__tests__/findings.test.d.ts +2 -0
- package/dist/analyze/__tests__/findings.test.d.ts.map +1 -0
- package/dist/analyze/__tests__/findings.test.js +90 -0
- package/dist/analyze/__tests__/findings.test.js.map +1 -0
- package/dist/analyze/find-nodes.d.ts +38 -0
- package/dist/analyze/find-nodes.d.ts.map +1 -0
- package/dist/analyze/find-nodes.js +51 -0
- package/dist/analyze/find-nodes.js.map +1 -0
- package/dist/analyze/findings.d.ts +86 -0
- package/dist/analyze/findings.d.ts.map +1 -0
- package/dist/analyze/findings.js +143 -0
- package/dist/analyze/findings.js.map +1 -0
- package/dist/analyze/index.d.ts +2 -0
- package/dist/analyze/index.d.ts.map +1 -1
- package/dist/analyze/index.js +2 -0
- package/dist/analyze/index.js.map +1 -1
- package/dist/domain/edge-fact.d.ts +25 -0
- package/dist/domain/edge-fact.d.ts.map +1 -1
- package/dist/domain/rel-types.d.ts +4 -0
- package/dist/domain/rel-types.d.ts.map +1 -1
- package/dist/domain/rel-types.js +7 -0
- package/dist/domain/rel-types.js.map +1 -1
- package/dist/embedding/__tests__/embed.test.d.ts +2 -0
- package/dist/embedding/__tests__/embed.test.d.ts.map +1 -0
- package/dist/embedding/__tests__/embed.test.js +72 -0
- package/dist/embedding/__tests__/embed.test.js.map +1 -0
- package/dist/extractors/live-org/__tests__/liveness.test.d.ts +2 -0
- package/dist/extractors/live-org/__tests__/liveness.test.d.ts.map +1 -0
- package/dist/extractors/live-org/__tests__/liveness.test.js +148 -0
- package/dist/extractors/live-org/__tests__/liveness.test.js.map +1 -0
- package/dist/extractors/live-org/__tests__/mcd-baseline.test.d.ts +2 -0
- package/dist/extractors/live-org/__tests__/mcd-baseline.test.d.ts.map +1 -0
- package/dist/extractors/live-org/__tests__/mcd-baseline.test.js +174 -0
- package/dist/extractors/live-org/__tests__/mcd-baseline.test.js.map +1 -0
- package/dist/extractors/live-org/__tests__/metadata-read-batch.test.d.ts +2 -0
- package/dist/extractors/live-org/__tests__/metadata-read-batch.test.d.ts.map +1 -0
- package/dist/extractors/live-org/__tests__/metadata-read-batch.test.js +75 -0
- package/dist/extractors/live-org/__tests__/metadata-read-batch.test.js.map +1 -0
- package/dist/extractors/live-org/__tests__/omnistudio-retrieve.test.d.ts +2 -0
- package/dist/extractors/live-org/__tests__/omnistudio-retrieve.test.d.ts.map +1 -0
- package/dist/extractors/live-org/__tests__/omnistudio-retrieve.test.js +135 -0
- package/dist/extractors/live-org/__tests__/omnistudio-retrieve.test.js.map +1 -0
- package/dist/extractors/live-org/__tests__/soql-rebatch.test.d.ts +2 -0
- package/dist/extractors/live-org/__tests__/soql-rebatch.test.d.ts.map +1 -0
- package/dist/extractors/live-org/__tests__/soql-rebatch.test.js +118 -0
- package/dist/extractors/live-org/__tests__/soql-rebatch.test.js.map +1 -0
- package/dist/extractors/live-org/__tests__/vlocity-runner.test.js +27 -0
- package/dist/extractors/live-org/__tests__/vlocity-runner.test.js.map +1 -1
- package/dist/extractors/live-org/bulk-retrieve.d.ts +7 -0
- package/dist/extractors/live-org/bulk-retrieve.d.ts.map +1 -1
- package/dist/extractors/live-org/bulk-retrieve.js +10 -1
- package/dist/extractors/live-org/bulk-retrieve.js.map +1 -1
- package/dist/extractors/live-org/extractors/mcd-baseline.d.ts +60 -0
- package/dist/extractors/live-org/extractors/mcd-baseline.d.ts.map +1 -0
- package/dist/extractors/live-org/extractors/mcd-baseline.js +120 -0
- package/dist/extractors/live-org/extractors/mcd-baseline.js.map +1 -0
- package/dist/extractors/live-org/extractors/omnistudio-retrieve.d.ts +23 -0
- package/dist/extractors/live-org/extractors/omnistudio-retrieve.d.ts.map +1 -0
- package/dist/extractors/live-org/extractors/omnistudio-retrieve.js +172 -0
- package/dist/extractors/live-org/extractors/omnistudio-retrieve.js.map +1 -0
- package/dist/extractors/live-org/rate-limit.d.ts +57 -0
- package/dist/extractors/live-org/rate-limit.d.ts.map +1 -1
- package/dist/extractors/live-org/rate-limit.js +93 -8
- package/dist/extractors/live-org/rate-limit.js.map +1 -1
- package/dist/extractors/live-org/vlocity/runner.d.ts +1 -1
- package/dist/extractors/live-org/vlocity/runner.d.ts.map +1 -1
- package/dist/extractors/live-org/vlocity/runner.js +20 -9
- package/dist/extractors/live-org/vlocity/runner.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/ingest/__tests__/multi-org-orchestrator.test.js +3 -0
- package/dist/ingest/__tests__/multi-org-orchestrator.test.js.map +1 -1
- package/dist/ingest/live-ingest.d.ts +70 -0
- package/dist/ingest/live-ingest.d.ts.map +1 -1
- package/dist/ingest/live-ingest.js +108 -1
- package/dist/ingest/live-ingest.js.map +1 -1
- package/dist/parsers/__tests__/edge-provenance.test.d.ts +2 -0
- package/dist/parsers/__tests__/edge-provenance.test.d.ts.map +1 -0
- package/dist/parsers/__tests__/edge-provenance.test.js +44 -0
- package/dist/parsers/__tests__/edge-provenance.test.js.map +1 -0
- package/dist/parsers/__tests__/lwc-bindings.test.js +72 -0
- package/dist/parsers/__tests__/lwc-bindings.test.js.map +1 -1
- package/dist/parsers/__tests__/mcd-gap-fills.test.d.ts +2 -0
- package/dist/parsers/__tests__/mcd-gap-fills.test.d.ts.map +1 -0
- package/dist/parsers/__tests__/mcd-gap-fills.test.js +75 -0
- package/dist/parsers/__tests__/mcd-gap-fills.test.js.map +1 -0
- package/dist/parsers/__tests__/omnistudio-overlap.test.d.ts +2 -0
- package/dist/parsers/__tests__/omnistudio-overlap.test.d.ts.map +1 -0
- package/dist/parsers/__tests__/omnistudio-overlap.test.js +163 -0
- package/dist/parsers/__tests__/omnistudio-overlap.test.js.map +1 -0
- package/dist/parsers/__tests__/reflection-walker.test.d.ts +2 -0
- package/dist/parsers/__tests__/reflection-walker.test.d.ts.map +1 -0
- package/dist/parsers/__tests__/reflection-walker.test.js +162 -0
- package/dist/parsers/__tests__/reflection-walker.test.js.map +1 -0
- package/dist/parsers/apex/__tests__/is-test-attribute.test.d.ts +2 -0
- package/dist/parsers/apex/__tests__/is-test-attribute.test.d.ts.map +1 -0
- package/dist/parsers/apex/__tests__/is-test-attribute.test.js +54 -0
- package/dist/parsers/apex/__tests__/is-test-attribute.test.js.map +1 -0
- package/dist/parsers/apex/__tests__/regex-arg-count.test.d.ts +2 -0
- package/dist/parsers/apex/__tests__/regex-arg-count.test.d.ts.map +1 -0
- package/dist/parsers/apex/__tests__/regex-arg-count.test.js +82 -0
- package/dist/parsers/apex/__tests__/regex-arg-count.test.js.map +1 -0
- package/dist/parsers/apex/class.d.ts.map +1 -1
- package/dist/parsers/apex/class.js +103 -5
- package/dist/parsers/apex/class.js.map +1 -1
- package/dist/parsers/common.d.ts +4 -1
- package/dist/parsers/common.d.ts.map +1 -1
- package/dist/parsers/common.js +15 -2
- package/dist/parsers/common.js.map +1 -1
- package/dist/parsers/generic/reflection-walker.d.ts +90 -0
- package/dist/parsers/generic/reflection-walker.d.ts.map +1 -0
- package/dist/parsers/generic/reflection-walker.js +195 -0
- package/dist/parsers/generic/reflection-walker.js.map +1 -0
- package/dist/parsers/lwc/html-visitor.d.ts.map +1 -1
- package/dist/parsers/lwc/html-visitor.js +81 -3
- package/dist/parsers/lwc/html-visitor.js.map +1 -1
- package/dist/parsers/object/object.d.ts.map +1 -1
- package/dist/parsers/object/object.js +34 -0
- package/dist/parsers/object/object.js.map +1 -1
- package/dist/parsers/omnistudio/overlap-detector.d.ts +50 -0
- package/dist/parsers/omnistudio/overlap-detector.d.ts.map +1 -0
- package/dist/parsers/omnistudio/overlap-detector.js +129 -0
- package/dist/parsers/omnistudio/overlap-detector.js.map +1 -0
- package/dist/render/__tests__/sarif.test.d.ts +2 -0
- package/dist/render/__tests__/sarif.test.d.ts.map +1 -0
- package/dist/render/__tests__/sarif.test.js +129 -0
- package/dist/render/__tests__/sarif.test.js.map +1 -0
- package/dist/render/sarif.d.ts +94 -0
- package/dist/render/sarif.d.ts.map +1 -0
- package/dist/render/sarif.js +133 -0
- package/dist/render/sarif.js.map +1 -0
- package/dist/storage/__tests__/analysis-tables-migration.test.js +1 -1
- package/dist/storage/__tests__/migrations.test.js +4 -4
- package/dist/storage/__tests__/rename-stability.test.d.ts +2 -0
- package/dist/storage/__tests__/rename-stability.test.d.ts.map +1 -0
- package/dist/storage/__tests__/rename-stability.test.js +135 -0
- package/dist/storage/__tests__/rename-stability.test.js.map +1 -0
- package/dist/storage/index.d.ts +1 -0
- package/dist/storage/index.d.ts.map +1 -1
- package/dist/storage/index.js +1 -0
- package/dist/storage/index.js.map +1 -1
- package/dist/storage/interfaces.d.ts +3 -0
- package/dist/storage/interfaces.d.ts.map +1 -1
- package/dist/storage/sqlite/graph-store.d.ts +6 -0
- package/dist/storage/sqlite/graph-store.d.ts.map +1 -1
- package/dist/storage/sqlite/graph-store.js +8 -0
- package/dist/storage/sqlite/graph-store.js.map +1 -1
- package/dist/storage/sqlite/migrations.d.ts.map +1 -1
- package/dist/storage/sqlite/migrations.js +19 -0
- package/dist/storage/sqlite/migrations.js.map +1 -1
- package/dist/storage/sqlite/rename-stability.d.ts +94 -0
- package/dist/storage/sqlite/rename-stability.d.ts.map +1 -0
- package/dist/storage/sqlite/rename-stability.js +96 -0
- package/dist/storage/sqlite/rename-stability.js.map +1 -0
- package/package.json +4 -1
|
@@ -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
|
-
|
|
106
|
-
|
|
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
|
|
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;
|
|
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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"}
|
|
@@ -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
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"overlap-detector.d.ts","sourceRoot":"","sources":["../../../src/parsers/omnistudio/overlap-detector.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAiB,MAAM,6BAA6B,CAAC;AAGxE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAE9D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAGnD;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAEH,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,KAAK,GAAG,MAAM,CAAC;IACtB,GAAG,EAAE,YAAY,CAAC;IAClB,iEAAiE;IACjE,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,mBAAmB;IAClC,uEAAuE;IACvE,OAAO,EAAE,MAAM,CAAC;IAChB,mDAAmD;IACnD,QAAQ,EAAE,MAAM,CAAC;IACjB;;gCAE4B;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,mEAAmE;IACnE,SAAS,EAAE,MAAM,CAAC;CACnB;AA6CD,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,UAAU,EACjB,IAAI,EAAE,iBAAiB,GACtB,mBAAmB,CAsGrB"}
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
import { asOrgId } from "@ryanstark24/sfgraph-shared";
|
|
2
|
+
import { REL_TYPES } from "../../domain/index.js";
|
|
3
|
+
import { makeEdge } from "../common.js";
|
|
4
|
+
import { normalizeKey } from "../cross-flavor-resolver.js";
|
|
5
|
+
const FLAVOR_LABEL_PREFIXES = [
|
|
6
|
+
// Group the four pairs the cross-flavor resolver matches so they collapse
|
|
7
|
+
// to a single canonical token in the signature multiset.
|
|
8
|
+
[/^DataRaptor:|^OmniDataTransform:/i, "dr_or_odt"],
|
|
9
|
+
[/^IntegrationProcedure:|^OmniIntegrationProcedure:/i, "ip_or_oip"],
|
|
10
|
+
[/^OmniScript:|^OmniProcess:/i, "os_or_op"],
|
|
11
|
+
[/^VlocityCard:|^OmniUiCard:/i, "vc_or_ouc"],
|
|
12
|
+
];
|
|
13
|
+
function normaliseLabel(dstQname) {
|
|
14
|
+
for (const [re, token] of FLAVOR_LABEL_PREFIXES) {
|
|
15
|
+
if (re.test(dstQname))
|
|
16
|
+
return token;
|
|
17
|
+
}
|
|
18
|
+
// Fall back to the raw label prefix (everything before the first `:`),
|
|
19
|
+
// lowercased. We do NOT include the dst's qualified name because two
|
|
20
|
+
// different OmniScripts that both happen to call a DataRaptor named "X"
|
|
21
|
+
// should produce the same signature shape if they call the same number of
|
|
22
|
+
// DataRaptors and the same number of other things.
|
|
23
|
+
const colon = dstQname.indexOf(":");
|
|
24
|
+
return (colon >= 0 ? dstQname.slice(0, colon) : dstQname).toLowerCase();
|
|
25
|
+
}
|
|
26
|
+
function buildSignature(edges) {
|
|
27
|
+
const counts = new Map();
|
|
28
|
+
for (const e of edges) {
|
|
29
|
+
if (e.relType === REL_TYPES.CANONICAL_OF)
|
|
30
|
+
continue;
|
|
31
|
+
const key = `${e.relType}|${normaliseLabel(String(e.dstQualifiedName))}`;
|
|
32
|
+
counts.set(key, (counts.get(key) ?? 0) + 1);
|
|
33
|
+
}
|
|
34
|
+
return counts;
|
|
35
|
+
}
|
|
36
|
+
function diffSignatures(a, b) {
|
|
37
|
+
const out = [];
|
|
38
|
+
const keys = new Set([...a.keys(), ...b.keys()]);
|
|
39
|
+
for (const k of [...keys].sort()) {
|
|
40
|
+
const av = a.get(k) ?? 0;
|
|
41
|
+
const bv = b.get(k) ?? 0;
|
|
42
|
+
if (av !== bv)
|
|
43
|
+
out.push(`${k}: ${av} vs ${bv}`);
|
|
44
|
+
}
|
|
45
|
+
return out;
|
|
46
|
+
}
|
|
47
|
+
export function detectOmnistudioOverlap(store, opts) {
|
|
48
|
+
const orgId = typeof opts.orgId === "string" ? asOrgId(opts.orgId) : opts.orgId;
|
|
49
|
+
const result = { matched: 0, diverged: 0, empty: 0, annotated: 0 };
|
|
50
|
+
// Walk every CANONICAL_OF edge. We deliberately read them via the
|
|
51
|
+
// listNodesByLabel + listEdgesFrom path rather than a wildcard scan —
|
|
52
|
+
// we already know the canonical pairs come from the four flavour
|
|
53
|
+
// labels listed in cross-flavor-resolver.PAIRS, so we iterate those
|
|
54
|
+
// and read each node's outgoing CANONICAL_OF edges to find the pair.
|
|
55
|
+
// This avoids scanning the whole edge table.
|
|
56
|
+
const FLAVOR_LABELS = [
|
|
57
|
+
"DataRaptor",
|
|
58
|
+
"IntegrationProcedure",
|
|
59
|
+
"OmniScript",
|
|
60
|
+
"VlocityCard",
|
|
61
|
+
];
|
|
62
|
+
// Cache outgoing edges per node so we don't re-fetch them when a node
|
|
63
|
+
// appears in multiple CANONICAL_OF pairs (rare but possible if a name
|
|
64
|
+
// collides across flavours).
|
|
65
|
+
const outgoingCache = new Map();
|
|
66
|
+
const outgoingOf = (qname) => {
|
|
67
|
+
const key = String(qname);
|
|
68
|
+
const hit = outgoingCache.get(key);
|
|
69
|
+
if (hit)
|
|
70
|
+
return hit;
|
|
71
|
+
const all = store.listEdgesFrom(orgId, qname);
|
|
72
|
+
outgoingCache.set(key, all);
|
|
73
|
+
return all;
|
|
74
|
+
};
|
|
75
|
+
// Pairs we've already inspected (both directions of the same logical pair
|
|
76
|
+
// produce two CANONICAL_OF edges — annotate both but only count once).
|
|
77
|
+
const seenPairs = new Set();
|
|
78
|
+
const pendingEdges = [];
|
|
79
|
+
for (const label of FLAVOR_LABELS) {
|
|
80
|
+
const nodes = store.listNodesByLabel(orgId, label);
|
|
81
|
+
for (const n of nodes) {
|
|
82
|
+
const canonEdges = store
|
|
83
|
+
.listEdgesFrom(orgId, n.qualifiedName, REL_TYPES.CANONICAL_OF)
|
|
84
|
+
.filter((e) => e.relType === REL_TYPES.CANONICAL_OF);
|
|
85
|
+
for (const ce of canonEdges) {
|
|
86
|
+
const pairKey = [String(ce.srcQualifiedName), String(ce.dstQualifiedName)]
|
|
87
|
+
.sort()
|
|
88
|
+
.join("|");
|
|
89
|
+
const alreadySeen = seenPairs.has(pairKey);
|
|
90
|
+
const sigA = buildSignature(outgoingOf(ce.srcQualifiedName));
|
|
91
|
+
const sigB = buildSignature(outgoingOf(ce.dstQualifiedName));
|
|
92
|
+
const divergence = diffSignatures(sigA, sigB);
|
|
93
|
+
const signaturesMatch = divergence.length === 0;
|
|
94
|
+
const isEmpty = sigA.size === 0 && sigB.size === 0;
|
|
95
|
+
if (!alreadySeen) {
|
|
96
|
+
seenPairs.add(pairKey);
|
|
97
|
+
if (isEmpty)
|
|
98
|
+
result.empty += 1;
|
|
99
|
+
else if (signaturesMatch)
|
|
100
|
+
result.matched += 1;
|
|
101
|
+
else
|
|
102
|
+
result.diverged += 1;
|
|
103
|
+
}
|
|
104
|
+
// Re-emit the same CANONICAL_OF edge with the new attributes in
|
|
105
|
+
// BOTH directions. mergeEdges is idempotent on (orgId, src, dst,
|
|
106
|
+
// relType), so this updates the existing rows' attributes in
|
|
107
|
+
// place. We iterate Vlocity-side labels only (the FLAVOR_LABELS
|
|
108
|
+
// list above is intentionally one-sided), so without this both-
|
|
109
|
+
// direction emit the Omni→Vlocity edge would never be annotated.
|
|
110
|
+
const annotationAttrs = {
|
|
111
|
+
...ce.attributes,
|
|
112
|
+
signaturesMatch,
|
|
113
|
+
divergencePoints: divergence,
|
|
114
|
+
overlapEvaluatedAt: opts.ctx.parseTimestamp,
|
|
115
|
+
};
|
|
116
|
+
pendingEdges.push(makeEdge(opts.ctx, String(ce.srcQualifiedName), REL_TYPES.CANONICAL_OF, String(ce.dstQualifiedName), annotationAttrs));
|
|
117
|
+
pendingEdges.push(makeEdge(opts.ctx, String(ce.dstQualifiedName), REL_TYPES.CANONICAL_OF, String(ce.srcQualifiedName), annotationAttrs));
|
|
118
|
+
result.annotated += 2;
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
if (!opts.dryRun && pendingEdges.length > 0) {
|
|
123
|
+
store.transaction(() => {
|
|
124
|
+
store.mergeEdges(pendingEdges);
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
|
+
return result;
|
|
128
|
+
}
|
|
129
|
+
//# sourceMappingURL=overlap-detector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"overlap-detector.js","sourceRoot":"","sources":["../../../src/parsers/omnistudio/overlap-detector.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sarif.test.d.ts","sourceRoot":"","sources":["../../../src/render/__tests__/sarif.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
import { describe, expect, it } from "vitest";
|
|
2
|
+
import { emitSarif, lintSarifReport } from "../sarif.js";
|
|
3
|
+
describe("W3-01/W3-02: SARIF 2.1.0 emitter", () => {
|
|
4
|
+
it("emits a valid empty report when there are no findings", () => {
|
|
5
|
+
const report = emitSarif({ version: "1.1.8", findings: [] });
|
|
6
|
+
expect(report.version).toBe("2.1.0");
|
|
7
|
+
expect(report.runs.length).toBe(1);
|
|
8
|
+
expect(report.runs[0]?.tool.driver.rules).toEqual([]);
|
|
9
|
+
expect(report.runs[0]?.results).toEqual([]);
|
|
10
|
+
expect(lintSarifReport(report)).toEqual([]);
|
|
11
|
+
});
|
|
12
|
+
it("includes a rule definition only for ruleIds referenced by results", () => {
|
|
13
|
+
const findings = [
|
|
14
|
+
{
|
|
15
|
+
ruleId: "governor.soql-in-loop",
|
|
16
|
+
message: "Foo: SOQL inside loop",
|
|
17
|
+
level: "error",
|
|
18
|
+
location: { qualifiedName: "ApexClass:Foo" },
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
ruleId: "security.fls-gap",
|
|
22
|
+
message: "Bar: no FLS grants",
|
|
23
|
+
level: "warning",
|
|
24
|
+
location: { qualifiedName: "CustomField:Account.Bar__c" },
|
|
25
|
+
},
|
|
26
|
+
];
|
|
27
|
+
const report = emitSarif({ version: "1.1.8", findings });
|
|
28
|
+
const rules = report.runs[0]?.tool.driver.rules ?? [];
|
|
29
|
+
expect(rules.map((r) => r.id).sort()).toEqual([
|
|
30
|
+
"governor.soql-in-loop",
|
|
31
|
+
"security.fls-gap",
|
|
32
|
+
]);
|
|
33
|
+
// Other rules in the catalog (e.g. dead-code.unreferenced) NOT emitted
|
|
34
|
+
expect(rules.find((r) => r.id === "dead-code.unreferenced")).toBeUndefined();
|
|
35
|
+
});
|
|
36
|
+
it("populates physicalLocation when the finding has a sourceUri + line", () => {
|
|
37
|
+
const finding = {
|
|
38
|
+
ruleId: "governor.soql-in-loop",
|
|
39
|
+
message: "Foo: SOQL inside loop",
|
|
40
|
+
level: "error",
|
|
41
|
+
location: {
|
|
42
|
+
qualifiedName: "ApexClass:Foo",
|
|
43
|
+
sourceUri: "sf://org/ApexClass/Foo.cls",
|
|
44
|
+
line: 42,
|
|
45
|
+
column: 8,
|
|
46
|
+
},
|
|
47
|
+
};
|
|
48
|
+
const report = emitSarif({ version: "1.1.8", findings: [finding] });
|
|
49
|
+
const loc = report.runs[0]?.results[0]?.locations[0];
|
|
50
|
+
expect(loc?.physicalLocation?.artifactLocation.uri).toBe("sf://org/ApexClass/Foo.cls");
|
|
51
|
+
expect(loc?.physicalLocation?.region?.startLine).toBe(42);
|
|
52
|
+
expect(loc?.physicalLocation?.region?.startColumn).toBe(8);
|
|
53
|
+
expect(loc?.logicalLocations?.[0]?.fullyQualifiedName).toBe("ApexClass:Foo");
|
|
54
|
+
});
|
|
55
|
+
it("emits only logicalLocation when the finding has no source URI (graph-only finding)", () => {
|
|
56
|
+
const finding = {
|
|
57
|
+
ruleId: "graph.dangling-edge",
|
|
58
|
+
message: "missing dst",
|
|
59
|
+
level: "note",
|
|
60
|
+
location: { qualifiedName: "ApexClass:Caller" },
|
|
61
|
+
};
|
|
62
|
+
const report = emitSarif({ version: "1.1.8", findings: [finding] });
|
|
63
|
+
const loc = report.runs[0]?.results[0]?.locations[0];
|
|
64
|
+
expect(loc?.physicalLocation).toBeUndefined();
|
|
65
|
+
expect(loc?.logicalLocations?.[0]?.fullyQualifiedName).toBe("ApexClass:Caller");
|
|
66
|
+
// Still SARIF-valid: every result has at least one location entry.
|
|
67
|
+
expect(lintSarifReport(report)).toEqual([]);
|
|
68
|
+
});
|
|
69
|
+
it("emits a stub rule definition for unknown ruleIds (doesn't drop the result)", () => {
|
|
70
|
+
const finding = {
|
|
71
|
+
ruleId: "future.experimental",
|
|
72
|
+
message: "TBD",
|
|
73
|
+
level: "note",
|
|
74
|
+
location: { qualifiedName: "X:Y" },
|
|
75
|
+
};
|
|
76
|
+
const report = emitSarif({ version: "1.1.8", findings: [finding] });
|
|
77
|
+
const rule = report.runs[0]?.tool.driver.rules.find((r) => r.id === "future.experimental");
|
|
78
|
+
expect(rule).toBeDefined();
|
|
79
|
+
expect(rule?.fullDescription.text).toMatch(/No catalog entry/);
|
|
80
|
+
// No lint errors — the stub keeps the report valid.
|
|
81
|
+
expect(lintSarifReport(report)).toEqual([]);
|
|
82
|
+
});
|
|
83
|
+
it("preserves Finding.properties on SARIF result properties bag", () => {
|
|
84
|
+
const finding = {
|
|
85
|
+
ruleId: "governor.soql-in-loop",
|
|
86
|
+
message: "Foo: SOQL inside loop",
|
|
87
|
+
level: "error",
|
|
88
|
+
location: { qualifiedName: "ApexClass:Foo" },
|
|
89
|
+
properties: { evidence: "attribute hasSoqlInLoop=true", count: 3 },
|
|
90
|
+
};
|
|
91
|
+
const report = emitSarif({ version: "1.1.8", findings: [finding] });
|
|
92
|
+
expect(report.runs[0]?.results[0]?.properties).toEqual({
|
|
93
|
+
evidence: "attribute hasSoqlInLoop=true",
|
|
94
|
+
count: 3,
|
|
95
|
+
});
|
|
96
|
+
});
|
|
97
|
+
it("lintSarifReport flags results that reference an undefined ruleId", () => {
|
|
98
|
+
// Manually construct an invalid report (bypassing emitSarif which fixes
|
|
99
|
+
// this for us) to exercise the lint check.
|
|
100
|
+
const report = {
|
|
101
|
+
$schema: "https://raw.githubusercontent.com/oasis-tcs/sarif-spec/master/Schemata/sarif-schema-2.1.0.json",
|
|
102
|
+
version: "2.1.0",
|
|
103
|
+
runs: [
|
|
104
|
+
{
|
|
105
|
+
tool: {
|
|
106
|
+
driver: {
|
|
107
|
+
name: "sfgraph",
|
|
108
|
+
version: "1.1.8",
|
|
109
|
+
informationUri: "https://example.test",
|
|
110
|
+
rules: [], // empty
|
|
111
|
+
},
|
|
112
|
+
},
|
|
113
|
+
results: [
|
|
114
|
+
{
|
|
115
|
+
ruleId: "governor.soql-in-loop",
|
|
116
|
+
level: "error",
|
|
117
|
+
message: { text: "x" },
|
|
118
|
+
locations: [{ logicalLocations: [{ fullyQualifiedName: "X", kind: "module" }] }],
|
|
119
|
+
},
|
|
120
|
+
],
|
|
121
|
+
},
|
|
122
|
+
],
|
|
123
|
+
};
|
|
124
|
+
const errors = lintSarifReport(report);
|
|
125
|
+
expect(errors.length).toBeGreaterThan(0);
|
|
126
|
+
expect(errors.some((e) => e.includes("governor.soql-in-loop"))).toBe(true);
|
|
127
|
+
});
|
|
128
|
+
});
|
|
129
|
+
//# sourceMappingURL=sarif.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sarif.test.js","sourceRoot":"","sources":["../../../src/render/__tests__/sarif.test.ts"],"names":[],"mappings":"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"}
|