import { type YAMLMap } from 'yaml';
import { type CustomDimension } from '../../types/field';
import { type AdditionalMetric } from '../../types/metricQuery';
import { type SupportedDbtVersions } from '../../types/projects';
import { type WarehouseClient } from '../../types/warehouse';
import { type YamlColumn, type YamlModel } from '../../types/yamlSchema';
/**
 * Class to edit dbt schema files(YAML)
 * Methods can be chained and the final schema can be obtained as a string.
 * Usage:
 * const editor = new DbtSchemaEditor(schema);
 * const updatedSchema = editor.addCustomMetrics(customMetricsToAdd).toString();
 */
export default class DbtSchemaEditor {
    private readonly doc;
    private readonly dbtVersion?;
    constructor(doc?: string, filename?: string, dbtVersion?: SupportedDbtVersions);
    isDbtVersion110OrHigher(): boolean;
    findModelByName(name: string): YAMLMap<unknown, unknown> | undefined;
    getModelByName(name: string): YAMLMap<unknown, unknown>;
    findColumnByName(modelName: string, columnName: string): YAMLMap<unknown, unknown> | undefined;
    private findFirstColumnFromModelByName;
    getColumnByName(modelName: string, columnName: string): YAMLMap<unknown, unknown>;
    hasModels(): boolean;
    getModelColumns(modelName: string): YamlColumn[] | undefined;
    addModel(model: YamlModel): DbtSchemaEditor;
    addColumn(modelName: string, column: YamlColumn): DbtSchemaEditor;
    removeColumns(modelName: string, columnNames: string[]): DbtSchemaEditor;
    addCustomMetrics(customMetricsToAdd: AdditionalMetric[]): DbtSchemaEditor;
    addCustomDimensions(customDimensionsToAdd: CustomDimension[], warehouseClient: WarehouseClient): DbtSchemaEditor;
    addCustomDimension(customDimension: CustomDimension, warehouseClient: WarehouseClient): DbtSchemaEditor;
    private addCustomBinDimension;
    private addCustomSqlDimension;
    /**
     * Update column properties(deep) in the schema.
     * Null values can be used to remove properties.
     * Undefined values are ignored.
     * Usage:
     * editor.updateColumn({
     *  modelName: 'my_model',
     *  columnName: 'my_column',
     *  properties: {
     *    description: 'new description',
     *    meta: {
     *      type: 'string',
     *      label: null, // remove label
     *    }
     *  }
     */
    updateColumn({ modelName, columnName, properties, }: {
        modelName: string;
        columnName: string;
        properties?: Record<string, unknown>;
    }): void;
    toString(options?: {
        quoteChar?: `'` | `"`;
    }): string;
    toJS(): string;
}
//# sourceMappingURL=DbtSchemaEditor.d.ts.map