import * as ts from 'typescript';
import * as tss from 'typescript/lib/tsserverlibrary';
import { SchematicContext, Tree } from '@angular-devkit/schematics';
import { WorkspaceSchema } from '@schematics/angular/utility/workspace-models';
import { ClassChanges, BindingChanges, SelectorChange, SelectorChanges, ThemePropertyChanges, ImportsChanges, MemberChanges } from './schema';
import { ServerHost } from './ServerHost';
export declare enum InputPropertyType {
    EVAL = "eval",
    STRING = "string"
}
declare type TransformFunction = (args: BoundPropertyObject) => void;
export interface BoundPropertyObject {
    value: string;
    bindingType: InputPropertyType;
}
export declare class UpdateChanges {
    private rootPath;
    private host;
    private context?;
    protected projectService: tss.server.ProjectService;
    protected serverHost: ServerHost;
    protected workspace: WorkspaceSchema;
    protected sourcePaths: string[];
    protected classChanges: ClassChanges;
    protected outputChanges: BindingChanges;
    protected inputChanges: BindingChanges;
    protected selectorChanges: SelectorChanges;
    protected themePropsChanges: ThemePropertyChanges;
    protected importsChanges: ImportsChanges;
    protected membersChanges: MemberChanges;
    protected conditionFunctions: Map<string, (...args: any[]) => any>;
    protected valueTransforms: Map<string, TransformFunction>;
    private _templateFiles;
    get templateFiles(): string[];
    private _tsFiles;
    get tsFiles(): string[];
    private _sassFiles;
    /** Sass (both .scss and .sass) files in the project being updated. */
    get sassFiles(): string[];
    private _service;
    get service(): ts.LanguageService;
    private _packageManager;
    private get packageManager();
    /**
     * Create a new base schematic to apply changes
     *
     * @param rootPath Root folder for the schematic to read configs, pass __dirname
     */
    constructor(rootPath: string, host: Tree, context?: SchematicContext);
    /** Apply configured changes to the Host Tree */
    applyChanges(): void;
    /** Add condition function. */
    addCondition(conditionName: string, callback: (ownerMatch: string, path: string) => boolean): void;
    addValueTransform(functionName: string, callback: TransformFunction): void;
    getDefaultLanguageService(entryPath: string): tss.LanguageService | undefined;
    protected updateSelectors(entryPath: string): void;
    protected applySelectorChange(fileContent: string, change: SelectorChange): string;
    protected updateClasses(entryPath: string): void;
    protected updateBindings(entryPath: string, bindChanges: BindingChanges, type?: BindingType): void;
    protected updateThemeProps(entryPath: string): void;
    protected updateImports(entryPath: string): void;
    protected updateClassMembers(entryPath: string, memberChanges: MemberChanges): void;
    private loadConfig;
    private areConditionsFulfilled;
    private copyPropertyValueBetweenElementTags;
    private sourceDirsVisitor;
    /**
     * Safe split by `','`, considering possible inner function calls. E.g.:
     * ```
     * prop: inner-func(),
     * prop2: inner2(inner-param: 3, inner-param: inner-func(..))
     * ```
     */
    private splitFunctionProps;
    private updateTemplateFiles;
    private updateTsFiles;
    private updateMembers;
    private getDefaultProjectForFile;
}
export declare enum BindingType {
    Output = 0,
    Input = 1
}
export {};
