Skip to content

Commit 6ff9f9f

Browse files
author
Marco Franceschi
committed
feat: Composed related rules during prepare mutations method
1 parent b9b51a1 commit 6ff9f9f

File tree

2 files changed

+34
-6
lines changed

2 files changed

+34
-6
lines changed

src/rules-engine/index.ts

Lines changed: 30 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -270,10 +270,35 @@ export default class RulesProvider implements Engine {
270270
}
271271

272272
prepareMutations = (findings: RuleFinding[] = []): Entity[] => {
273-
const processedFindings = findings.filter(
274-
({ typename }) => typename !== 'manual'
275-
)
276-
const unprocessedFindings = findings
273+
const processedFindings = findings
274+
.filter(({ typename }) => typename !== 'manual')
275+
.map(finding => {
276+
if (finding.typename !== 'composite') {
277+
const parentRule = findings.find(
278+
f =>
279+
f.rule?.relatedRules?.includes(finding.rule?.id) &&
280+
f.typename === 'composite'
281+
)
282+
283+
if (parentRule?.rule) {
284+
const {
285+
id,
286+
rule: { relatedRules, ...ruleMetadata },
287+
} = parentRule
288+
return {
289+
...finding,
290+
id: `${id}/${finding.id}`,
291+
rule: ruleMetadata,
292+
}
293+
}
294+
295+
return finding
296+
}
297+
return undefined
298+
})
299+
.filter(Boolean)
300+
301+
const manualFindings = findings
277302
.filter(({ typename }) => typename === 'manual')
278303
.map(({ typename, ...filteredFinding }) => ({ ...filteredFinding }))
279304

@@ -295,7 +320,7 @@ export default class RulesProvider implements Engine {
295320
}
296321
}
297322
`,
298-
data: unprocessedFindings,
323+
data: manualFindings,
299324
},
300325
]
301326
}

src/rules-engine/types.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,13 +52,16 @@ export interface Rule {
5252
resource: string
5353
relatedRules?: string[]
5454
}
55-
export interface RuleFinding {
55+
export interface Finding {
5656
id: string
5757
resourceId?: string
5858
result: Result
5959
typename: string
6060
}
6161

62+
export interface RuleFinding extends Finding {
63+
rule?: Rule
64+
}
6265
export interface JsonRule extends Rule {
6366
conditions: Condition
6467
}

0 commit comments

Comments
 (0)