Skip to content

Commit

Permalink
Expose Model Classes at index
Browse files Browse the repository at this point in the history
Expose Flow, ScanResult & RuleResult at index
  • Loading branch information
RubenHalman committed Feb 29, 2024
1 parent 5d12513 commit a2d56a3
Show file tree
Hide file tree
Showing 56 changed files with 207 additions and 266 deletions.
12 changes: 8 additions & 4 deletions src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,10 @@ import { IRulesConfig } from './main/interfaces/IRulesConfig';
import { FixFlows } from './main/libs/FixFlows';
import { GetRuleDefinitions } from './main/libs/GetRuleDefinitions';
import { ScanFlows } from './main/libs/ScanFlows';
import { Flow } from './main/models/Flow';
import Flow from './main/models/Flow';
import { ResultDetails } from './main/models/ResultDetails';
import { RuleResult } from './main/models/RuleResult';
import { ScanResult } from './main/models/ScanResult';
import RuleResult from './main/models/RuleResult';
import ScanResult from './main/models/ScanResult';

export function getRules(ruleNames?: string[]): IRuleDefinition[] {
if (ruleNames && ruleNames.length > 0) {
Expand Down Expand Up @@ -53,4 +53,8 @@ export function scan(flows: Flow[], ruleOptions?: IRulesConfig): ScanResult[] {

export function fix(flows: Flow[]): ScanResult[] {
return FixFlows(flows);
}
}

export { default as Flow } from './main/models/Flow';
export { default as ScanResult } from './main/models/ScanResult';
export { default as RuleResult } from './main/models/RuleResult';
4 changes: 2 additions & 2 deletions src/main/interfaces/IRuleDefinition.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { Flow } from '../models/Flow';
import { RuleResult } from '../models/RuleResult';
import Flow from '../models/Flow';
import RuleResult from '../models/RuleResult';

export interface IRuleDefinition {
uri: string;
Expand Down
6 changes: 3 additions & 3 deletions src/main/libs/Compiler.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { Flow } from '../models/Flow';
import Flow from '../models/Flow';
import { FlowNode } from '../models/FlowNode';

export class Compiler {
Expand Down Expand Up @@ -26,7 +26,7 @@ export class Compiler {

traverseFlow(flow: Flow, startElementName: string, visitCallback: (element: FlowNode) => void) {
// Iterative Deepening Depth-First Search (IDDFS)
let depth = 0;
// let depth = 0;
let elementsToVisit = [startElementName];

while (elementsToVisit.length > 0) {
Expand All @@ -44,8 +44,8 @@ export class Compiler {
}

elementsToVisit = nextElements;
depth++;
// add logic to control depth or terminate the traversal based on requirements.
// depth++;
}
}

Expand Down
6 changes: 3 additions & 3 deletions src/main/libs/FixFlows.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
import { Flow } from '../models/Flow';
import Flow from '../models/Flow';
import { FlowNode } from '../models/FlowNode';
import { FlowVariable } from '../models/FlowVariable';
import { ResultDetails } from '../models/ResultDetails';
import { RuleResult } from '../models/RuleResult';
import { ScanResult } from '../models/ScanResult';
import RuleResult from '../models/RuleResult';
import ScanResult from '../models/ScanResult';
import { UnconnectedElement } from '../rules/UnconnectedElement';
import { UnusedVariable } from '../rules/UnusedVariable';
import { BuildFlow } from './BuildFlow';
Expand Down
6 changes: 3 additions & 3 deletions src/main/libs/ScanFlows.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { IRuleDefinition } from '../interfaces/IRuleDefinition';
import { Flow } from '../models/Flow';
import { RuleResult } from '../models/RuleResult';
import { ScanResult } from '../models/ScanResult';
import Flow from '../models/Flow';
import RuleResult from '../models/RuleResult';
import ScanResult from '../models/ScanResult';
import { GetRuleDefinitions } from './GetRuleDefinitions';
import { keys } from './Keys';

Expand Down
2 changes: 1 addition & 1 deletion src/main/models/Flow.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import { FlowElement } from './FlowElement';
import { FlowVariable } from './FlowVariable';
import * as p from 'path';

export class Flow {
export default class Flow {

public label: string;
public xmldata;
Expand Down
2 changes: 1 addition & 1 deletion src/main/models/RuleResult.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { IRuleDefinition } from '../interfaces/IRuleDefinition';
import { ResultDetails } from './ResultDetails';

export class RuleResult {
export default class RuleResult {

public occurs: boolean;
public ruleName: string;
Expand Down
6 changes: 3 additions & 3 deletions src/main/models/ScanResult.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import {Flow} from './Flow';
import {RuleResult} from './RuleResult';
import Flow from './Flow';
import RuleResult from './RuleResult';

export class ScanResult {
export default class ScanResult {

constructor(flow: Flow, ruleResults: RuleResult[]) {
this.flow = flow;
Expand Down
4 changes: 2 additions & 2 deletions src/main/rules/APIVersion.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { IRuleDefinition } from '../interfaces/IRuleDefinition';
import { Flow } from '../models/Flow';
import Flow from '../models/Flow';
import { FlowType } from '../models/FlowType';
import { RuleResult } from '../models/RuleResult';
import RuleResult from '../models/RuleResult';
import { RuleCommon } from '../models/RuleCommon';
import { ResultDetails } from '../models/ResultDetails';
import { FlowAttribute } from '../models/FlowAttribute';
Expand Down
4 changes: 2 additions & 2 deletions src/main/rules/CopyAPIName.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { IRuleDefinition } from '../interfaces/IRuleDefinition';
import { Flow } from '../models/Flow';
import Flow from '../models/Flow';
import { FlowType } from '../models/FlowType';
import { RuleResult } from '../models/RuleResult';
import RuleResult from '../models/RuleResult';
import { RuleCommon } from '../models/RuleCommon';
import { FlowNode } from '../models/FlowNode';
import { ResultDetails } from '../models/ResultDetails';
Expand Down
4 changes: 2 additions & 2 deletions src/main/rules/DMLStatementInLoop.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
import { IRuleDefinition } from '../interfaces/IRuleDefinition';
import { Flow } from '../models/Flow';
import Flow from '../models/Flow';
import { FlowNode } from '../models/FlowNode';
import { FlowType } from '../models/FlowType';
import { RuleResult } from '../models/RuleResult';
import RuleResult from '../models/RuleResult';
import { RuleCommon } from '../models/RuleCommon';
import { ResultDetails } from '../models/ResultDetails';
import { Compiler } from '../libs/Compiler';
Expand Down
4 changes: 2 additions & 2 deletions src/main/rules/DuplicateDMLOperation.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
import { IRuleDefinition } from '../interfaces/IRuleDefinition';
import { Flow } from '../models/Flow';
import Flow from '../models/Flow';
import { FlowNode } from '../models/FlowNode';
import { FlowType } from '../models/FlowType';
import { RuleResult } from '../models/RuleResult';
import RuleResult from '../models/RuleResult';
import { RuleCommon } from '../models/RuleCommon';
import { ResultDetails } from '../models/ResultDetails';

Expand Down
4 changes: 2 additions & 2 deletions src/main/rules/FlowDescription.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { IRuleDefinition } from '../interfaces/IRuleDefinition';
import { Flow } from '../models/Flow';
import Flow from '../models/Flow';
import { FlowType } from '../models/FlowType';
import { RuleResult } from '../models/RuleResult';
import RuleResult from '../models/RuleResult';
import { RuleCommon } from '../models/RuleCommon';
import { FlowAttribute } from '../models/FlowAttribute';
import { ResultDetails } from '../models/ResultDetails';
Expand Down
4 changes: 2 additions & 2 deletions src/main/rules/FlowName.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { IRuleDefinition } from '../interfaces/IRuleDefinition';
import { Flow } from '../models/Flow';
import Flow from '../models/Flow';
import { FlowType } from '../models/FlowType';
import { RuleResult } from '../models/RuleResult';
import RuleResult from '../models/RuleResult';
import { RuleCommon } from '../models/RuleCommon';
import { FlowAttribute } from '../models/FlowAttribute';
import { ResultDetails } from '../models/ResultDetails';
Expand Down
4 changes: 2 additions & 2 deletions src/main/rules/HardcodedId.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
import * as IdPrefixes from '../data/IdPrefixes.json';
import { IRuleDefinition } from '../interfaces/IRuleDefinition';
import { Flow } from '../models/Flow';
import Flow from '../models/Flow';
import { FlowType } from '../models/FlowType';
import { RuleResult } from '../models/RuleResult';
import RuleResult from '../models/RuleResult';
import { RuleCommon } from '../models/RuleCommon';
import { ResultDetails } from '../models/ResultDetails';

Expand Down
4 changes: 2 additions & 2 deletions src/main/rules/MissingFaultPath.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
import { IRuleDefinition } from '../interfaces/IRuleDefinition';
import { Flow } from '../models/Flow';
import Flow from '../models/Flow';
import { FlowNode } from '../models/FlowNode';
import { FlowType } from '../models/FlowType';
import { RuleResult } from '../models/RuleResult';
import RuleResult from '../models/RuleResult';
import { RuleCommon } from '../models/RuleCommon';
import { ResultDetails } from '../models/ResultDetails';
import { Compiler } from '../libs/Compiler';
Expand Down
4 changes: 2 additions & 2 deletions src/main/rules/MissingNullHandler.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
import { IRuleDefinition } from '../interfaces/IRuleDefinition';
import { Flow } from '../models/Flow';
import Flow from '../models/Flow';
import { FlowNode } from '../models/FlowNode';
import { FlowType } from '../models/FlowType';
import { RuleResult } from '../models/RuleResult';
import RuleResult from '../models/RuleResult';
import { RuleCommon } from '../models/RuleCommon';
import { ResultDetails } from '../models/ResultDetails';

Expand Down
4 changes: 2 additions & 2 deletions src/main/rules/SOQLQueryInLoop.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
import { IRuleDefinition } from '../interfaces/IRuleDefinition';
import { Flow } from '../models/Flow';
import Flow from '../models/Flow';
import { FlowNode } from '../models/FlowNode';
import { FlowType } from '../models/FlowType';
import { RuleResult } from '../models/RuleResult';
import RuleResult from '../models/RuleResult';
import { RuleCommon } from '../models/RuleCommon';
import { ResultDetails } from '../models/ResultDetails';
import { Compiler } from '../libs/Compiler';
Expand Down
4 changes: 2 additions & 2 deletions src/main/rules/UnconnectedElement.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
import { IRuleDefinition } from '../interfaces/IRuleDefinition';
import { Flow } from '../models/Flow';
import Flow from '../models/Flow';
import { FlowNode } from '../models/FlowNode';
import { FlowElement } from '../models/FlowElement';
import { FlowType } from '../models/FlowType';
import { RuleResult } from '../models/RuleResult';
import RuleResult from '../models/RuleResult';
import { RuleCommon } from '../models/RuleCommon';
import { ResultDetails } from '../models/ResultDetails';

Expand Down
4 changes: 2 additions & 2 deletions src/main/rules/UnusedVariable.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
import {IRuleDefinition} from '../interfaces/IRuleDefinition';
import {Flow} from '../models/Flow';
import Flow from '../models/Flow';
import {FlowNode} from '../models/FlowNode';
import {FlowType} from '../models/FlowType';
import {FlowVariable} from '../models/FlowVariable';
import {RuleResult} from '../models/RuleResult';
import RuleResult from '../models/RuleResult';
import {RuleCommon} from '../models/RuleCommon';
import { ResultDetails } from '../models/ResultDetails';

Expand Down
10 changes: 4 additions & 6 deletions tests/DMLPreventedByHidingNav.test.ts
Original file line number Diff line number Diff line change
@@ -1,16 +1,14 @@
import { assert, expect } from 'chai';
import 'mocha';
import { scan } from '../src';
import { Flow } from '../src/main/models/Flow';
import { ScanResult } from '../src/main/models/ScanResult';
import * as core from '../src'
import Hidenav from './testfiles/hidenav.json';

describe('A screen flow with a DML statements between where the screen after the DML hides the navigation', () => {
let flow: Flow;
let flow: core.Flow;

before('arrange', () => {
// ARRANGE
flow = new Flow({
flow = new core.Flow({
path: 'anypath',
xmldata: Hidenav,
});
Expand All @@ -27,7 +25,7 @@ describe('A screen flow with a DML statements between where the screen after the
}
};

const results: ScanResult[] = scan([flow], ruleConfig);
const results: core.ScanResult[] = core.scan([flow], ruleConfig);
expect(results[0].ruleResults.length).to.equal(1);
expect(results[0].ruleResults[0].ruleName).to.equal('DuplicateDMLOperation');
});
Expand Down
10 changes: 4 additions & 6 deletions tests/DMLStatementInALoop_Demo.test.ts
Original file line number Diff line number Diff line change
@@ -1,24 +1,22 @@
import { assert, expect } from 'chai';
import 'mocha';
import { scan } from '../src';
import { Flow } from '../src/main/models/Flow';
import { ScanResult } from '../src/main/models/ScanResult';
import * as core from '../src';
import dmlstatementsinaloop from './testfiles/DMLStatementInALoop_Demo.json';

describe('In the DMLStatementInALoop_Demo flow', () => {
let flow: Flow;
let flow: core.Flow;

before('arrange', () => {
// ARRANGE
flow = new Flow({
flow = new core.Flow({
path: './testfiles/DML_statements_in_a_loop.flow',
xmldata: dmlstatementsinaloop,
});
});

it('there should be one result for the rule DMLStatementInLoop', () => {

const results: ScanResult[] = scan([flow]);
const results: core.ScanResult[] = core.scan([flow]);
const occurringResults = results[0].ruleResults.filter((rule) => rule.occurs);
expect(occurringResults.length).to.equal(1);
expect(occurringResults[0].ruleName).to.equal("DMLStatementInLoop");
Expand Down
10 changes: 4 additions & 6 deletions tests/DMLStatementInALoop_Demo_Fixed.test.ts
Original file line number Diff line number Diff line change
@@ -1,24 +1,22 @@
import { assert, expect } from 'chai';
import 'mocha';
import { scan } from '../src';
import { Flow } from '../src/main/models/Flow';
import { ScanResult } from '../src/main/models/ScanResult';
import * as core from '../src'
import dmlstatementsinaloop from './testfiles/DMLStatementInALoop_Demo_Fixed.json';

describe('In the DMLStatementInALoop_Demo_Fixed flow', () => {
let flow: Flow;
let flow: core.Flow;

before('arrange', () => {
// ARRANGE
flow = new Flow({
flow = new core.Flow({
path: './testfiles/DML_statements_in_a_loop_fixed.flow',
xmldata: dmlstatementsinaloop,
});
});

it('there should be no result for the rule DMLStatementInLoop', () => {

const results: ScanResult[] = scan([flow]);
const results: core.ScanResult[] = core.scan([flow]);
const occurringResults = results[0].ruleResults.filter((rule) => rule.occurs);
expect(occurringResults.length).to.equal(0);
});
Expand Down
10 changes: 4 additions & 6 deletions tests/FlowNaming.test.ts
Original file line number Diff line number Diff line change
@@ -1,15 +1,13 @@
import { assert, expect } from 'chai';
import 'mocha';
import { scan } from '../src';
import { Flow } from '../src/main/models/Flow';
import { ScanResult } from '../src/main/models/ScanResult';
import * as core from '../src'
import Hidenav from './testfiles/hidenav.json';

describe('A flow with correct naming', () => {
let flow: Flow;
let flow: core.Flow;

before('arrange', () => {
flow = new Flow({
flow = new core.Flow({
path: './testfiles/CreateANewAccount.flow-meta.xml',
xmldata: Hidenav,
});
Expand All @@ -27,7 +25,7 @@ describe('A flow with correct naming', () => {
}
};

const results: ScanResult[] = scan([flow], ruleConfig);
const results: core.ScanResult[] = core.scan([flow], ruleConfig);
expect(results[0].ruleResults.length).to.equal(1);
expect(results[0].ruleResults[0].ruleName).to.equal('FlowName');
expect(results[0].ruleResults[0].occurs).to.equal(false);
Expand Down
10 changes: 4 additions & 6 deletions tests/FlowNamingException.test.ts
Original file line number Diff line number Diff line change
@@ -1,15 +1,13 @@
import { assert, expect } from 'chai';
import 'mocha';
import { scan } from '../src';
import { Flow } from '../src/main/models/Flow';
import { ScanResult } from '../src/main/models/ScanResult';
import * as core from '../src'
import Hidenav from './testfiles/hidenav.json';

describe('A flow with incorrect naming and set exception', () => {
let flow: Flow;
let flow: core.Flow;

before('arrange', () => {
flow = new Flow({
flow = new core.Flow({
path: './testfiles/AAAA.flow-meta.xml',
xmldata: Hidenav,
});
Expand All @@ -32,7 +30,7 @@ describe('A flow with incorrect naming and set exception', () => {
}
};

const results: ScanResult[] = scan([flow], ruleConfig);
const results: core.ScanResult[] = core.scan([flow], ruleConfig);
expect(results[0].ruleResults.length).to.equal(1);
expect(results[0].ruleResults[0].ruleName).to.equal('FlowName');
expect(results[0].ruleResults[0].occurs).to.equal(false);
Expand Down
Loading

0 comments on commit a2d56a3

Please sign in to comment.