inversify/inversify-binding-decorators

View on GitHub
src/syntax/provide_when_syntax.ts

Summary

Maintainability
F
5 days
Test Coverage
import interfaces from "../interfaces/interfaces";
import ProvideOnSyntax from "./provide_on_syntax";
import ProvideDoneSyntax from "./provide_done_syntax";
import { interfaces as inversifyInterfaces } from "inversify";

class ProvideWhenSyntax<T> implements interfaces.ProvideWhenSyntax<T> {

    private _bindingWhenSyntax: (bind: inversifyInterfaces.Bind, target: any) => inversifyInterfaces.BindingWhenSyntax<T>;
    private _provideDoneSyntax: interfaces.ProvideDoneSyntax;

    public constructor(
        bindingWhenSyntax: (bind: inversifyInterfaces.Bind, target: any) => inversifyInterfaces.BindingWhenSyntax<T>,
        provideDoneSyntax: interfaces.ProvideDoneSyntax
    ) {
        this._bindingWhenSyntax = bindingWhenSyntax;
        this._provideDoneSyntax = provideDoneSyntax;
    }

    public when(constraint: (request: inversifyInterfaces.Request) => boolean): interfaces.ProvideOnSyntax<T> {
        let bindingOnSyntax = (bind: inversifyInterfaces.Bind, target: any) => {
            return this._bindingWhenSyntax(bind, target).when(constraint);
        };
        let whenDoneSyntax = new ProvideDoneSyntax(bindingOnSyntax);

        return new ProvideOnSyntax<T>(bindingOnSyntax, whenDoneSyntax);
    }

    public whenTargetNamed(name: string): interfaces.ProvideOnSyntax<T> {
        let bindingOnSyntax = (bind: inversifyInterfaces.Bind, target: any) =>
            this._bindingWhenSyntax(bind, target).whenTargetNamed(name);
        let whenDoneSyntax = new ProvideDoneSyntax(bindingOnSyntax);

        return new ProvideOnSyntax<T>(bindingOnSyntax, whenDoneSyntax);
    }

    public whenTargetTagged(tag: string, value: any): interfaces.ProvideOnSyntax<T> {
        let bindingOnSyntax = (bind: inversifyInterfaces.Bind, target: any) =>
            this._bindingWhenSyntax(bind, target).whenTargetTagged(tag, value);
        let whenDoneSyntax = new ProvideDoneSyntax(bindingOnSyntax);

        return new ProvideOnSyntax<T>(bindingOnSyntax, whenDoneSyntax);
    }

    public whenInjectedInto(parent: (Function | string)): interfaces.ProvideOnSyntax<T> {
        let bindingOnSyntax = (bind: inversifyInterfaces.Bind, target: any) =>
            this._bindingWhenSyntax(bind, target).whenInjectedInto(parent);
        let whenDoneSyntax = new ProvideDoneSyntax(bindingOnSyntax);

        return new ProvideOnSyntax<T>(bindingOnSyntax, whenDoneSyntax);
    }

    public whenParentNamed(name: string): interfaces.ProvideOnSyntax<T> {
        let bindingOnSyntax = (bind: inversifyInterfaces.Bind, target: any) =>
            this._bindingWhenSyntax(bind, target).whenParentNamed(name);
        let whenDoneSyntax = new ProvideDoneSyntax(bindingOnSyntax);

        return new ProvideOnSyntax<T>(bindingOnSyntax, whenDoneSyntax);
    }

    public whenParentTagged(tag: string, value: any): interfaces.ProvideOnSyntax<T> {
        let bindingOnSyntax = (bind: inversifyInterfaces.Bind, target: any) =>
            this._bindingWhenSyntax(bind, target).whenParentTagged(tag, value);
        let whenDoneSyntax = new ProvideDoneSyntax(bindingOnSyntax);

        return new ProvideOnSyntax<T>(bindingOnSyntax, whenDoneSyntax);
    }

    public whenAnyAncestorIs(ancestor: (Function | string)): interfaces.ProvideOnSyntax<T> {
        let bindingOnSyntax = (bind: inversifyInterfaces.Bind, target: any) =>
            this._bindingWhenSyntax(bind, target).whenAnyAncestorIs(ancestor);
        let whenDoneSyntax = new ProvideDoneSyntax(bindingOnSyntax);

        return new ProvideOnSyntax<T>(bindingOnSyntax, whenDoneSyntax);
    }

    public whenNoAncestorIs(ancestor: (Function | string)): interfaces.ProvideOnSyntax<T> {
        let bindingOnSyntax = (bind: inversifyInterfaces.Bind, target: any) =>
            this._bindingWhenSyntax(bind, target).whenNoAncestorIs(ancestor);
        let whenDoneSyntax = new ProvideDoneSyntax(bindingOnSyntax);

        return new ProvideOnSyntax<T>(bindingOnSyntax, whenDoneSyntax);
    }

    public whenAnyAncestorNamed(name: string): interfaces.ProvideOnSyntax<T> {
        let bindingOnSyntax = (bind: inversifyInterfaces.Bind, target: any) =>
            this._bindingWhenSyntax(bind, target).whenAnyAncestorNamed(name);
        let whenDoneSyntax = new ProvideDoneSyntax(bindingOnSyntax);

        return new ProvideOnSyntax<T>(bindingOnSyntax, whenDoneSyntax);
    }

    public whenAnyAncestorTagged(tag: string, value: any): interfaces.ProvideOnSyntax<T> {
        let bindingOnSyntax = (bind: inversifyInterfaces.Bind, target: any) =>
            this._bindingWhenSyntax(bind, target).whenAnyAncestorTagged(tag, value);
        let whenDoneSyntax = new ProvideDoneSyntax(bindingOnSyntax);

        return new ProvideOnSyntax<T>(bindingOnSyntax, whenDoneSyntax);
    }

    public whenNoAncestorNamed(name: string): interfaces.ProvideOnSyntax<T> {
        let bindingOnSyntax = (bind: inversifyInterfaces.Bind, target: any) =>
            this._bindingWhenSyntax(bind, target).whenNoAncestorNamed(name);
        let whenDoneSyntax = new ProvideDoneSyntax(bindingOnSyntax);

        return new ProvideOnSyntax<T>(bindingOnSyntax, whenDoneSyntax);
    }

    public whenNoAncestorTagged(tag: string, value: any): interfaces.ProvideOnSyntax<T> {
        let bindingOnSyntax = (bind: inversifyInterfaces.Bind, target: any) =>
            this._bindingWhenSyntax(bind, target).whenNoAncestorTagged(tag, value);
        let whenDoneSyntax = new ProvideDoneSyntax(bindingOnSyntax);

        return new ProvideOnSyntax<T>(bindingOnSyntax, whenDoneSyntax);
    }

    public whenAnyAncestorMatches(constraint: (request: inversifyInterfaces.Request) => boolean): interfaces.ProvideOnSyntax<T> {
        let bindingOnSyntax = (bind: inversifyInterfaces.Bind, target: any) =>
            this._bindingWhenSyntax(bind, target).whenAnyAncestorMatches(constraint);
        let whenDoneSyntax = new ProvideDoneSyntax(bindingOnSyntax);

        return new ProvideOnSyntax<T>(bindingOnSyntax, whenDoneSyntax);
    }

    public whenNoAncestorMatches(constraint: (request: inversifyInterfaces.Request) => boolean): interfaces.ProvideOnSyntax<T> {
        let bindingOnSyntax = (bind: inversifyInterfaces.Bind, target: any) =>
            this._bindingWhenSyntax(bind, target).whenNoAncestorMatches(constraint);
        let whenDoneSyntax = new ProvideDoneSyntax(bindingOnSyntax);

        return new ProvideOnSyntax<T>(bindingOnSyntax, whenDoneSyntax);
    }

    public done(force?: boolean) {
        return this._provideDoneSyntax.done(force);
    }

}

export default ProvideWhenSyntax;