import { Import } from './import';
import { Source } from '@angular-devkit/schematics';
import { Schema as ApiGenSchema } from '../schema';
import { CsdlCallable, CsdlParameter } from '../metadata/csdl/csdl-function-action';
import { ODataMetadata } from '../metadata';
export declare class Callable {
    protected callable: CsdlCallable;
    callables: CsdlCallable[];
    constructor(callable: CsdlCallable);
    addOverload(callable: CsdlCallable): void;
    name(): string;
    isBound(): boolean;
    bindingParameter(): CsdlParameter | undefined;
    parameters(): {
        binding: CsdlParameter | undefined;
        required: CsdlParameter[];
        optional: CsdlParameter[];
    };
    returnType(): import("../metadata/csdl/csdl-function-action").CsdlReturnType | undefined;
    fullName(): string;
    resourceFunction(): string;
    callableFunction(): string;
}
export declare abstract class Base {
    protected options: ApiGenSchema;
    constructor(options: ApiGenSchema);
    abstract name(): string;
    abstract fileName(): string;
    abstract fullName(): string;
    abstract directory(): string;
    abstract importTypes(): string[];
    abstract template(): Source;
    abstract variables(): {
        [name: string]: any;
    };
    path(): string;
    imports(): Import[];
    importedName?: string;
    cleanImportedNames(): void;
    protected dependencies: [string, Base][];
    addDependency(renderable: Base): void;
    addDependencies(renderables: Base[]): void;
    protected callables: Callable[];
    addCallable(callable: Callable): void;
    addCallables(callables: Callable[]): void;
}
export declare class Index extends Base {
    constructor(options: ApiGenSchema);
    template(): Source;
    variables(): {
        [name: string]: any;
    };
    name(): string;
    fileName(): string;
    directory(): string;
    fullName(): string;
    importTypes(): string[];
}
export declare class Metadata extends Base {
    private meta;
    constructor(options: ApiGenSchema, meta: ODataMetadata);
    template(): Source;
    variables(): {
        [name: string]: any;
    };
    name(): string;
    fileName(): string;
    directory(): string;
    fullName(): string;
    importTypes(): string[];
}
