/**
 * The options shared by the queries that slice the dataflow graph (`static-slice` and `dice`), so both offer the
 * same knobs without repeating their definition, schema, or reconstruction handling.
 * @module
 */
import Joi from 'joi';
import type { NodeId } from '../../r-bridge/lang-4.x/ast/model/processing/node-id';
import type { NormalizedAst } from '../../r-bridge/lang-4.x/ast/model/processing/decorate';
import { SlicingCriteria } from '../../slicing/criterion/parse';
import type { DataflowGraph } from '../../dataflow/graph/graph';
import { type InlineFull, type ReconstructionResult } from '../../reconstruct/reconstruct';
/** The options every slicing query understands, independent of how it picks the nodes to keep. */
export interface SliceQueryOptions {
    /** do not reconstruct the slice into readable code */
    readonly noReconstruction?: boolean;
    /** Should the magic comments (force-including lines within the slice) be ignored? */
    readonly noMagicComments?: boolean;
    /**
     * Inline resolvable `source()` calls into the reconstruction so the result is a single self-contained R text.
     * Cyclic and unresolvable `source()` calls are kept verbatim and reported via `reconstruct.inlineWarnings`.
     */
    readonly inlineSources?: boolean;
    /**
     * Inline _every_ file into the reconstruction, in flowR's loading order (which respects implicit sources),
     * independent of whether it is sourced explicitly; `'banner'` additionally precedes each file with a banner
     * comment naming it. Overrides {@link inlineSources}.
     */
    readonly inlineFull?: InlineFull;
    /**
     * If set (and slicing backward), continue the slice past a function-definition boundary, also including
     * the definition's binding and call sites. Defaults to `false`.
     */
    readonly includeCallees?: boolean;
    /**
     * Reconstruct the slice as the project's files rather than as one program, reported in
     * {@link ReconstructionResult#files} in loading order with their paths. Without this only the entry file is
     * reconstructed. Overridden by {@link inlineSources}/{@link inlineFull}, which produce the opposite.
     */
    readonly perFile?: boolean;
    /** Also report the packages the slice calls into; see {@link Dataflow.packagesOf}. */
    readonly reportPackages?: boolean;
}
/** The Joi keys of {@link SliceQueryOptions}, to be spread into the schema of every slicing query. */
export declare const SliceQueryOptionsSchema: {
    readonly noReconstruction: Joi.BooleanSchema<boolean>;
    readonly noMagicComments: Joi.BooleanSchema<boolean>;
    readonly inlineSources: Joi.BooleanSchema<boolean>;
    readonly inlineFull: Joi.AlternativesSchema<string | boolean>;
    readonly includeCallees: Joi.BooleanSchema<boolean>;
    readonly perFile: Joi.BooleanSchema<boolean>;
    readonly reportPackages: Joi.BooleanSchema<boolean>;
};
/**
 * Resolves the criteria to their node ids, reporting those that match no node: they would slice nothing,
 * as {@link SlicingCriteria.convertAll} keeps them verbatim.
 */
export declare function resolveSliceCriteria(criteria: SlicingCriteria, ast: NormalizedAst): NodeId[];
/** Reconstruct the given `nodes` of `ast`, honoring the inlining, per-file and magic-comment options. */
export declare function reconstructSlice(ast: NormalizedAst, graph: DataflowGraph, nodes: ReadonlySet<NodeId>, options: SliceQueryOptions): ReconstructionResult;
