import type { UnbatchedExecutionExtra } from "../interfaces.ts";
import type { Step } from "../step.ts";
import { UnbatchedStep } from "../step.ts";
/**
 * Accesses a (potentially nested) property from the result of a plan.
 *
 * NOTE: this could lead to unexpected results (which could introduce security
 * issues) if it is not used carefully; only use it on JSON-like data,
 * preferably where the objects have null prototypes, and be sure to adhere to
 * the naming conventions detailed in assertSafeToAccessViaBraces.
 */
export declare class AccessStep<TData> extends UnbatchedStep<TData> {
    static $$export: {
        moduleName: string;
        exportName: string;
    };
    isSyncAndSafe: boolean;
    allowMultipleOptimizations: boolean;
    readonly path: (string | number | symbol)[];
    private readonly hasSymbols;
    readonly fallback?: any;
    constructor(parentPlan: Step<unknown>, path: (string | number | symbol)[], fallback?: any);
    toStringMeta(): string;
    getParentStep(): Step<any> | import("./__flag.ts").__FlagStep<Step<any>>;
    __inferGet?: {
        [TAttr in keyof TData]: AccessStep<TData[TAttr]>;
    };
    /**
     * Get the named property of an object.
     */
    get<TAttr extends keyof TData>(attrName: TAttr): AccessStep<TData[TAttr]>;
    /**
     * Get the entry at the given index in an array.
     */
    at<TIndex extends keyof TData>(index: TIndex): AccessStep<TData[TIndex]>;
    optimize(): Step<TData>;
    finalize(): void;
    unbatchedExecute(_extra: UnbatchedExecutionExtra, ..._values: any[]): any;
    deduplicate(peers: AccessStep<unknown>[]): AccessStep<TData>[];
}
/**
 * Access the property at path `path` in the value returned from `parentPlan`,
 * falling back to `fallback` if it were null-ish.
 */
export declare function access<TData, TKey extends keyof Exclude<TData, null | undefined>, TFallback = undefined>(parentPlan: Step<TData>, key: TKey, fallback?: TFallback): AccessStep<Exclude<Exclude<TData, null | undefined>[TKey], null | undefined> | (TData extends Exclude<TData, null | undefined> ? TData[TKey] extends Exclude<TData[TKey], null | undefined> ? never : TFallback : TFallback)>;
export declare function access<TData>(parentPlan: Step<unknown>, rawPath?: (string | number | symbol)[] | string | number | symbol, fallback?: any): AccessStep<TData>;
//# sourceMappingURL=access.d.ts.map