import { DiffMatchPathOptions } from "diff-match-patch-es";

//#region src/types.d.ts
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;
}
//#endregion
//#region src/constants.d.ts
declare const DIFFERENCE: {
  readonly DELETE: "delete";
  readonly INSERT: "insert";
  readonly REPLACE: "replace";
};
//#endregion
//#region src/index.d.ts
/**
 * 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[];
//#endregion
export { DIFFERENCE, Difference, DifferenceDelete, DifferenceInsert, DifferenceReplace, Options, generateDifferences };