import { type ConfigSource } from '../spi/config-source.js';
import { type ObjectMapper } from '../../mapper/api/object-mapper.js';
import { type StorageBackend } from '../../backend/api/storage-backend.js';
import { type Forest } from '../../key/lexer/forest.js';
import { type ClassConstructor } from '../../../business/utils/class-constructor.type.js';
export declare abstract class LayeredConfigSource implements ConfigSource {
    readonly backend: StorageBackend;
    protected readonly mapper: ObjectMapper;
    readonly prefix?: string;
    /**
     * The forest model of the configuration keys and values.
     * @protected
     */
    protected forest: Forest;
    protected constructor(backend: StorageBackend, mapper: ObjectMapper, prefix?: string);
    abstract get name(): string;
    abstract get ordinal(): number;
    asBoolean(key: string): boolean | null;
    asNumber(key: string): number | null;
    asObject<T>(cls: ClassConstructor<T>, key?: string): T;
    asObjectArray<T extends Array<T>>(cls: ClassConstructor<T>, key: string): T[];
    asString(key: string): string | null;
    asStringArray(key: string): string[] | null;
    properties(): Map<string, string>;
    propertyNames(): Set<string>;
    abstract load(): Promise<void>;
}
