type ApiExposureRuleLevel = 'error' | 'off' | 'warn';
/**
 * Per-rule setting for `xy api-exposure` (see
 * `src/actions/api-exposure/API-EXPOSURE-INDEX.md` for rule ids and defaults).
 * - `boolean`: enable/disable at the default weight
 * - `'error' | 'warn' | 'off'`: set severity at the default weight
 * - `number`: enable with a custom finite weight
 * - `'infinite'`: promote to a conclusive rule (any finding ⇒ peerDependency)
 * - tuple form: `[level, { weight? }]`
 * - object form: `{ enabled?, level?, weight? }`
 */
export type ApiExposureRuleSetting = boolean | number | ApiExposureRuleLevel | 'infinite' | [ApiExposureRuleLevel, {
    weight?: number | 'infinite';
}] | {
    enabled?: boolean;
    level?: ApiExposureRuleLevel;
    weight?: number | 'infinite';
};
/**
 * AEI score band boundaries (inclusive maxima). Scores above
 * `probablyPeerMax` recommend `peer`. Defaults follow the spec:
 * 39 / 79 / 119 / 179.
 */
export interface ApiExposureThresholds {
    /** Max AEI for a `dependency` recommendation. @default 39 */
    dependencyMax: number;
    /** Max AEI for a `probably-dependency` recommendation. @default 79 */
    probablyDependencyMax: number;
    /** Max AEI for a `probably-peer` recommendation (above ⇒ `peer`). @default 179 */
    probablyPeerMax: number;
    /** Max AEI for a `review` recommendation. @default 119 */
    reviewMax: number;
}
/**
 * Per-dependency overrides for `xy api-exposure`, keyed by package name or
 * glob (e.g. `@scope/*`).
 */
export interface ApiExposureDependencyOverride {
    /**
     * Hard classification — skips scoring entirely for this dependency
     * (parallels deplint's `refType`).
     */
    classification?: 'dep' | 'dev' | 'peer';
    /** Rule overrides applied only when scoring this dependency. */
    rules?: Record<string, ApiExposureRuleSetting>;
}
/**
 * How a peer contract imposed by a runtime dependency chain is forwarded
 * (spec section 6/8):
 * - `'always'`: every unmet chain peer is conclusively a `peerDependency`
 *   here (`aei.signal.required-peer`, ∞).
 * - `'when-used'`: the conclusive rule fires only for chain peers this
 *   package itself imports or directly exposes through its own public API;
 *   peers it inherits only through a re-exported package surface as the
 *   informational `aei.signal.inherited-peer` instead — that package owns
 *   the peer range and installers resolve its contract.
 * - `'when-exposed'`: the conclusive rule fires only for chain peers whose
 *   types this package directly exposes in its own public API or that it value-imports;
 *   untouched peers surface as the informational
 *   `aei.signal.absorbable-peer` — declaring them in this package's own
 *   `dependencies` (the provider pattern) discharges the contract without
 *   burdening consumers.
 *
 * Under `'when-used'` and `'when-exposed'`, a peer imposed only by chains
 * whose roots this package imports exclusively as types surfaces as the
 * informational `aei.signal.type-only-chain-peer` — such chains never
 * execute here, so there is no runtime contract to forward.
 */
export type ApiExposurePeerForwarding = 'always' | 'when-exposed' | 'when-used';
/**
 * Configuration for `xy api-exposure` (API Exposure Index analysis).
 * See `src/actions/api-exposure/API-EXPOSURE-INDEX.md` for the full spec.
 */
export interface ApiExposureConfig {
    /**
     * Per-dependency configuration keyed by package name or glob.
     * Exact-name entries take precedence over glob entries.
     */
    packages?: Record<string, ApiExposureDependencyOverride>;
    /**
     * Peer-chain forwarding policy, honored by `xy api-exposure` and by
     * `xy deplint` in `classifier: 'aei'` mode. @default 'when-exposed'
     */
    peerForwarding?: ApiExposurePeerForwarding;
    /** Rule weight / enable-state overrides keyed by rule id. */
    rules?: Record<string, ApiExposureRuleSetting>;
    /** AEI band boundary overrides. */
    thresholds?: Partial<ApiExposureThresholds>;
    /** Apply the `aei.modifier.tree-shaking` modifier. @default true */
    treeShaking?: boolean;
}
export {};
//# sourceMappingURL=ApiExposureConfig.d.ts.map