import type { BlankLineNode, CommentNode, KeyCollisions, KeyValuePairObject, NormalizeOptions, PropertiesNode, PropertyNode } from './nodes.js';
/**
 * A lossless, ordered representation of a `.properties` file.
 *
 * Every element in the file — properties, comments, and blank lines — is
 * preserved in order. Duplicate keys are all retained. The original content
 * can be reconstructed exactly via {@link format}.
 */
export declare class Properties {
    /** Whether the content started with a BOM character. */
    readonly hasBom: boolean;
    /** The end-of-line character detected from the content. */
    readonly eolCharacter: string;
    /** All nodes in file order. */
    readonly nodes: PropertiesNode[];
    /**
     * Parse a `.properties` file into a lossless node structure.
     *
     * @param content - The content of a `.properties` file (string or Buffer).
     */
    constructor(content: string | Buffer);
    /**
     * Get all property nodes in file order (including duplicates).
     *
     * @returns An array of all {@link PropertyNode} instances.
     */
    getProperties(): PropertyNode[];
    /**
     * Get all comment nodes in file order.
     *
     * @returns An array of all {@link CommentNode} instances.
     */
    getComments(): CommentNode[];
    /**
     * Get all blank line nodes in file order.
     *
     * @returns An array of all {@link BlankLineNode} instances.
     */
    getBlankLines(): BlankLineNode[];
    /**
     * Get the effective key-value map (last-wins semantics for duplicate keys).
     *
     * @returns A plain object where each key maps to its last-occurring value.
     */
    toObject(): KeyValuePairObject;
    /**
     * Get all property nodes for a given key (all occurrences, in file order).
     *
     * @param key - The unescaped key to search for.
     *
     * @returns An array of matching {@link PropertyNode} instances (empty if not found).
     */
    getPropertyNodes(key: string): PropertyNode[];
    /**
     * Get the effective property node for a given key (last occurrence).
     *
     * @param key - The unescaped key to search for.
     *
     * @returns The last {@link PropertyNode} with this key, or `undefined`.
     */
    getEffectiveProperty(key: string): PropertyNode | undefined;
    /**
     * Get keys that appear more than once, with all their property nodes.
     *
     * @returns An array of {@link KeyCollisions} for duplicate keys.
     */
    getKeyCollisions(): KeyCollisions[];
    /**
     * Get comment and blank line nodes immediately preceding a property.
     *
     * Walks backward from the last occurrence of the given key, collecting
     * comment and blank line nodes until reaching another property or the
     * start of the file.
     *
     * @param key - The unescaped key to find leading nodes for.
     *
     * @returns An array of preceding {@link CommentNode} and {@link BlankLineNode} instances.
     */
    getLeadingNodes(key: string): (CommentNode | BlankLineNode)[];
    /**
     * Format the `.properties` content as a string.
     *
     * Without options, produces an exact lossless reconstruction of the original
     * content. With options, produces normalized output — standardize separators,
     * remove comments, deduplicate keys, and more.
     *
     * @param options - Optional normalization options. When omitted, the output
     *   is a lossless round-trip of the original content.
     *
     * @returns The formatted `.properties` file content.
     */
    format(options?: NormalizeOptions): string;
}
