interface DiffMatchPathOptions {
    /**
     * Number of seconds to map a diff before giving up (0 for infinity).
     * @default 1.0
     */
    diffTimeout?: number;
    /**
     * Cost of an empty edit operation in terms of edit characters.
     * @default 4
     */
    diffEditCost?: number;
    /**
     * At what point is no match declared (0.0 = perfection, 1.0 = very loose).
     * @default 0.5
     */
    matchThreshold?: number;
    /**
     * How far to search for a match (0 = exact location, 1000+ = broad match).
     * @default 1000
     */
    matchDistance?: number;
    /**
     * When deleting a large block of text (over ~64 characters), how close do
     * the contents have to be to match the expected contents.
     * (0.0 = perfection, 1.0 = very loose).
     * @default 0.5
     */
    patchDeleteThreshold?: number;
    /**
     * Chunk size for context length.
     * @default 4
     */
    patchMargin?: number;
    /**
     * The number of bits in an int.
     * @default 32
     */
    matchMaxBits?: number;
}

type DifferenceDelete = {
    deleteText: string;
    offset: number;
    operation: 'delete';
};
type DifferenceInsert = {
    insertText: string;
    offset: number;
    operation: 'insert';
};
type DifferenceReplace = {
    deleteText: string;
    insertText: string;
    offset: number;
    operation: 'replace';
};
/**
 * @pg
 */
type Difference = DifferenceDelete | DifferenceInsert | DifferenceReplace;
interface Options extends DiffMatchPathOptions {
    /**
     * @default 0
     */
    offset?: number;
}

declare const DIFFERENCE: {
    readonly DELETE: "delete";
    readonly INSERT: "insert";
    readonly REPLACE: "replace";
};

/**
 * Generate differences between original source and formmated source
 *
 * @param source - original source
 * @param formatted - formatted source
 * @param options - diff-match-patch options
 * @returns generated differences
 *
 * @example
 *
 * ```ts
 * import { generateDifferences } from 'generate-differences'
 *
 * const differences = generateDifferences('abc', 'edf')
 *
 * console.log({ differences })
 * // [
 * //   {
 * //     "deleteText": "abc",
 * //     "insertText": "edf",
 * //     "offset": 0,
 * //     "operation": "replace",
 * //   },
 * // ]
 * ```
 */
declare function generateDifferences(source: string, formatted: string, options?: Options): Difference[];

export { DIFFERENCE, type Difference, type DifferenceDelete, type DifferenceInsert, type DifferenceReplace, type Options, generateDifferences };
