|
1 | | -import { Action, Report, ReportElement, Options, Output } from './Models'; |
| 1 | +import { Action, Report, ReportElement, Options, Output, OptimizerInterface } from './Models'; |
2 | 2 | import { parse } from '@asyncapi/parser'; |
3 | 3 | import { RemoveComponents, ReuseComponents, MoveToComponents } from './Optimizers'; |
4 | 4 | import YAML from 'js-yaml'; |
@@ -36,22 +36,25 @@ export class Optimizer { |
36 | 36 | const parsedDocument = await parse(this.YAMLorJSON, { applyTraits: false }); |
37 | 37 | this.componentProvider = new ComponentProvider(parsedDocument); |
38 | 38 | } |
39 | | - const reuseComponents = new ReuseComponents(this.componentProvider); |
40 | | - this.reuseComponentsReport = reuseComponents.getReport(); |
41 | | - this.reuseComponentsReport.sort(this.sortFunction); |
42 | | - const removeComponents = new RemoveComponents(this.componentProvider); |
43 | | - this.removeComponentsReport = removeComponents.getReport(); |
44 | | - this.removeComponentsReport.sort(this.sortFunction); |
45 | | - const moveToComponents = new MoveToComponents(this.componentProvider); |
46 | | - this.moveToComponentsReport = moveToComponents.getReport(); |
47 | | - this.moveToComponentsReport.sort(this.sortFunction); |
| 39 | + this.reuseComponentsReport = this.createReport(new ReuseComponents(this.componentProvider)); |
| 40 | + this.removeComponentsReport = this.createReport(new RemoveComponents(this.componentProvider)); |
| 41 | + this.moveToComponentsReport = this.createReport(new MoveToComponents(this.componentProvider)); |
48 | 42 |
|
49 | 43 | return { |
50 | 44 | reuseComponents: this.reuseComponentsReport, |
51 | 45 | removeComponents: this.removeComponentsReport, |
52 | 46 | moveToComponents: this.moveToComponentsReport |
53 | 47 | }; |
54 | 48 | } |
| 49 | + private createReport(optimizer: OptimizerInterface) { |
| 50 | + return optimizer |
| 51 | + .getReport() |
| 52 | + .filter(this.reportFilter) |
| 53 | + .sort(this.sortFunction); |
| 54 | + } |
| 55 | + reportFilter = (reportElement: ReportElement): boolean => { |
| 56 | + return this.hasParent(reportElement.path); |
| 57 | + }; |
55 | 58 |
|
56 | 59 | private sortFunction(a: ReportElement, b: ReportElement): number { return (a.action.length - b.action.length || b.path.length - a.path.length);} |
57 | 60 |
|
@@ -116,9 +119,6 @@ export class Optimizer { |
116 | 119 |
|
117 | 120 | private applyChanges(changes: ReportElement[]): void { |
118 | 121 | for (const change of changes) { |
119 | | - if (!this.hasParent(change.path)) { |
120 | | - continue; |
121 | | - } |
122 | 122 | switch (change.action) { |
123 | 123 | case Action.Move: |
124 | 124 | _.set(this.outputObject, change.target as string, _.get(this.outputObject, change.path)); |
|
0 commit comments