import { InjectFlags, InjectionToken, Injector, Provider, Type } from '@angular/core';
import { InjectorMap } from '../types';
import * as i0 from "@angular/core";
export interface InjectorMapToken extends Array<InjectorMap> {
}
/**
 * Multi-provider of {@link InjectorMap}
 */
export declare const INJECTOR_MAP_TOKEN: InjectionToken<InjectorMapToken>;
/**
 * Helper to provide {@link INJECTOR_MAP_TOKEN}
 */
export declare function provideInjectorMap(map: InjectorMap): Provider;
/**
 * Maps tokens to other tokens and then executes parent injector.
 *
 * NOT a Service!
 * Use via {@link MappedInjectorFactory}
 */
export declare class MappedInjector implements Injector {
    private parent;
    private injectorMaps;
    private injectorMap;
    constructor(parent: Injector, injectorMaps: InjectorMapToken);
    get<T>(token: Type<T> | InjectionToken<T>, notFoundValue?: T, flags?: InjectFlags): T;
    get(token: any, notFoundValue?: any, flags?: InjectFlags): any;
    private mapToken;
    private maybeInitInjectorMap;
    private processToken;
}
/**
 * Factory for {@link MappedInjector}
 */
export declare class MappedInjectorFactory {
    private injectorMap;
    constructor(injectorMap: InjectorMapToken);
    /**
     * Creates MappedInjector with parent injector and {@link INJECTOR_MAP_TOKEN} from DI
     */
    create(parent: Injector): Injector;
    static ɵfac: i0.ɵɵFactoryDeclaration<MappedInjectorFactory, never>;
    static ɵprov: i0.ɵɵInjectableDeclaration<MappedInjectorFactory>;
}
