All files / src/resolvers HostDefinitionResolver.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 { FlowHost, FlowRuleGroup, ResolvedFlowHost } from "../FlowDefinitions";
import { LoggerFactory } from "../logger-factory";
import { Logger } from "../logger-type";
import { HostResolver } from './hosts/HostResolver';
 
export class HostDefinitionResolver {
    private logger: Logger;
    private objectResolvers: HostResolver[];
    constructor(loggerFactory: LoggerFactory,
        ...typeSpecificResolvers: HostResolver[]
    ) {
        this.logger = loggerFactory.getLogger('HostDefinitionResolver');
        this.objectResolvers = typeSpecificResolvers;
    }
    // https://docs.aws.amazon.com/config/latest/developerguide/resource-config-reference.html#supported-resources
    public async resolveTarget(ruleHost: FlowHost, ruleGroup?: FlowRuleGroup): Promise<ResolvedFlowHost> {
        this.logger.info(`number of resolvers ${this.objectResolvers.length}, resolving object`, ruleHost)
        const targetResolver = this.objectResolvers.find(objResolver => objResolver.canResolve(ruleHost))
 
        this.logger.info(`use resolver ${targetResolver}`, ruleHost)
        if (targetResolver) {
            return targetResolver.resolve(ruleHost, ruleGroup);
        } else {
            throw new Error(
                `An error resolving object, no supported resolver found ${JSON.stringify(ruleHost)}`,
            );
        }
    }
}