/**
 * Dot-path helpers for reading and immutably updating nested JSON values.
 *
 * Used by the config-sync engine to address settings inside
 * `.lisa.config.json` (e.g. `quality.testCoverage.global.statements`) and
 * inside mirrored artifact files (e.g. the `thresholds` key of
 * `stryker.conf.json`).
 * @module sync/json-path
 */
/** Any JSON-compatible value. */
export type JsonValue = string | number | boolean | null | JsonValue[] | {
    readonly [key: string]: JsonValue;
};
/** A JSON object record (non-array, non-null). */
export type JsonObject = {
    readonly [key: string]: JsonValue;
};
/**
 * Check whether a value is a plain (non-array) JSON object.
 * @param value - Candidate value
 * @returns True when the value is a plain JSON object record
 */
export declare function isJsonObject(value: unknown): value is JsonObject;
/**
 * Read the value at a dot path inside a JSON object.
 * @param root - Object to read from
 * @param dotPath - Dot-separated key path (empty string returns the root)
 * @returns The value at the path, or undefined when any segment is missing
 */
export declare function getAtPath(root: unknown, dotPath: string): JsonValue | undefined;
/**
 * Return a copy of a JSON object with the value at a dot path replaced.
 * Missing intermediate objects are created; existing siblings are preserved.
 * The input object is never mutated.
 * @param root - Object to copy
 * @param dotPath - Dot-separated key path (empty string replaces the root)
 * @param value - Value to write at the path
 * @returns A new object with the update applied
 */
export declare function setAtPath(root: JsonObject, dotPath: string, value: JsonValue): JsonObject;
/**
 * Compare two JSON-compatible values for structural equality, independent of
 * object key insertion order.
 * @param a - First value
 * @param b - Second value
 * @returns True when the values are structurally equal
 */
export declare function jsonEquals(a: unknown, b: unknown): boolean;
/**
 * Fill missing keys of a JSON value from a fallback, recursively. Present
 * values always win over the fallback; only absent object keys are filled.
 * Arrays and scalars are taken wholesale from whichever side is present.
 * @param value - The preferred value (may be undefined)
 * @param fallback - Values used only where `value` has gaps
 * @returns The value with gaps filled from the fallback
 */
export declare function fillMissing(value: JsonValue | undefined, fallback: JsonValue): JsonValue;
//# sourceMappingURL=json-path.d.ts.map