All files / src/resolvers TargetDefinitionResolver.ts

100% Statements 10/10
100% Branches 2/2
100% Functions 3/3
100% Lines 9/9

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29          3x           2x 2x       2x 5x   2x 2x 1x   1x          
import { FlowTarget, FlowRuleGroup, ResolvedFlowTarget } from "../FlowDefinitions";
import { LoggerFactory } from "../logger-factory";
import { Logger } from "../logger-type";
import { TargetResolver } from './objects/TargetResolver';
 
export class TargetDefinitionResolver {
    private logger: Logger;
    private objectResolvers: TargetResolver[];
    constructor(loggerFactory: LoggerFactory,
        ...typeSpecificResolvers: TargetResolver[]
    ) {
        this.logger = loggerFactory.getLogger('TargetDefinitionResolver');
        this.objectResolvers = typeSpecificResolvers;
    }
    // https://docs.aws.amazon.com/config/latest/developerguide/resource-config-reference.html#supported-resources
    public async resolveTarget(ruleObject: FlowTarget, ruleGroup?: FlowRuleGroup): Promise<ResolvedFlowTarget> {
        this.logger.info(`number of resolvers ${this.objectResolvers.length}, resolving object`, ruleObject)
        const targetResolver = this.objectResolvers.find(objResolver => objResolver.canResolve(ruleObject))
 
        this.logger.info(`use resolver ${targetResolver}`, ruleObject)
        if (targetResolver) {
            return targetResolver.resolve(ruleObject, ruleGroup);
        } else {
            throw new Error(
                `An error resolving object, no supported resolver found ${JSON.stringify(ruleObject)}`,
            );
        }
    }
}