## API Report File for "@rushstack/heft-config-file"

> Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/).

```ts

import type { IRigConfig } from '@rushstack/rig-package';
import type { ITerminal } from '@rushstack/terminal';

// @beta @deprecated (undocumented)
export const ConfigurationFile: typeof ProjectConfigurationFile;

// @beta @deprecated (undocumented)
export type ConfigurationFile<TConfigurationFile> = ProjectConfigurationFile<TConfigurationFile>;

// @beta (undocumented)
export abstract class ConfigurationFileBase<TConfigurationFile, TExtraOptions extends {}> {
    constructor(options: IConfigurationFileOptions<TConfigurationFile, TExtraOptions>);
    // @internal (undocumented)
    static _formatPathForLogging: (path: string) => string;
    getObjectSourceFilePath<TObject extends object>(obj: TObject): string | undefined;
    getPropertyOriginalValue<TParentProperty extends object, TValue>(options: IOriginalValueOptions<TParentProperty>): TValue | undefined;
    // (undocumented)
    protected _loadConfigurationFileInnerWithCache(terminal: ITerminal, resolvedConfigurationFilePath: string, visitedConfigurationFilePaths: Set<string>, rigConfig: IRigConfig | undefined): TConfigurationFile;
    // (undocumented)
    protected _loadConfigurationFileInnerWithCacheAsync(terminal: ITerminal, resolvedConfigurationFilePath: string, visitedConfigurationFilePaths: Set<string>, rigConfig: IRigConfig | undefined): Promise<TConfigurationFile>;
    // (undocumented)
    protected abstract _tryLoadConfigurationFileInRig(terminal: ITerminal, rigConfig: IRigConfig, visitedConfigurationFilePaths: Set<string>): TConfigurationFile | undefined;
    // (undocumented)
    protected abstract _tryLoadConfigurationFileInRigAsync(terminal: ITerminal, rigConfig: IRigConfig, visitedConfigurationFilePaths: Set<string>): Promise<TConfigurationFile | undefined>;
}

// @beta (undocumented)
export type IConfigurationFileOptions<TConfigurationFile, TExtraOptions extends object> = IConfigurationFileOptionsWithJsonSchemaFilePath<TConfigurationFile, TExtraOptions> | IConfigurationFileOptionsWithJsonSchemaObject<TConfigurationFile, TExtraOptions>;

// @beta (undocumented)
export interface IConfigurationFileOptionsBase<TConfigurationFile> {
    jsonPathMetadata?: IJsonPathsMetadata<TConfigurationFile>;
    propertyInheritance?: IPropertiesInheritance<TConfigurationFile>;
    propertyInheritanceDefaults?: IPropertyInheritanceDefaults;
}

// @beta (undocumented)
export type IConfigurationFileOptionsWithJsonSchemaFilePath<TConfigurationFile, TExtraOptions extends {}> = IConfigurationFileOptionsBase<TConfigurationFile> & TExtraOptions & {
    jsonSchemaPath: string;
    jsonSchemaObject?: never;
};

// @beta (undocumented)
export type IConfigurationFileOptionsWithJsonSchemaObject<TConfigurationFile, TExtraOptions extends {}> = IConfigurationFileOptionsBase<TConfigurationFile> & TExtraOptions & {
    jsonSchemaObject: object;
    jsonSchemaPath?: never;
};

// @beta
export interface ICustomJsonPathMetadata<TConfigurationFile> {
    customResolver?: (resolverOptions: IJsonPathMetadataResolverOptions<TConfigurationFile>) => string;
    pathResolutionMethod?: PathResolutionMethod.custom;
}

// @beta (undocumented)
export interface ICustomPropertyInheritance<TObject> extends IPropertyInheritance<InheritanceType.custom> {
    inheritanceFunction: PropertyInheritanceCustomFunction<TObject>;
}

// @beta (undocumented)
export type IJsonPathMetadata<T> = ICustomJsonPathMetadata<T> | INonCustomJsonPathMetadata;

// @beta
export interface IJsonPathMetadataResolverOptions<TConfigurationFile> {
    configurationFile: Partial<TConfigurationFile>;
    configurationFilePath: string;
    propertyName: string;
    propertyValue: string;
}

// @beta
export interface IJsonPathsMetadata<TConfigurationFile> {
    // (undocumented)
    [jsonPath: string]: IJsonPathMetadata<TConfigurationFile>;
}

// @beta (undocumented)
export enum InheritanceType {
    append = "append",
    custom = "custom",
    merge = "merge",
    replace = "replace"
}

// @beta
export interface INonCustomJsonPathMetadata {
    pathResolutionMethod?: PathResolutionMethod.NodeResolve | PathResolutionMethod.nodeResolve | PathResolutionMethod.resolvePathRelativeToConfigurationFile | PathResolutionMethod.resolvePathRelativeToProjectRoot;
}

// @beta (undocumented)
export interface IOriginalValueOptions<TParentProperty> {
    // (undocumented)
    parentObject: Partial<TParentProperty>;
    // (undocumented)
    propertyName: keyof TParentProperty;
}

// @beta (undocumented)
export interface IProjectConfigurationFileOptions {
    projectRelativeFilePath: string;
}

// @beta (undocumented)
export type IPropertiesInheritance<TConfigurationFile> = {
    [propertyName in keyof TConfigurationFile]?: IPropertyInheritance<InheritanceType.append | InheritanceType.merge | InheritanceType.replace> | ICustomPropertyInheritance<TConfigurationFile[propertyName]>;
};

// @beta (undocumented)
export interface IPropertyInheritance<TInheritanceType extends InheritanceType> {
    // (undocumented)
    inheritanceType: TInheritanceType;
}

// @beta (undocumented)
export interface IPropertyInheritanceDefaults {
    // (undocumented)
    array?: IPropertyInheritance<InheritanceType.append | InheritanceType.replace>;
    // (undocumented)
    object?: IPropertyInheritance<InheritanceType.merge | InheritanceType.replace>;
}

// @beta (undocumented)
export class NonProjectConfigurationFile<TConfigurationFile> extends ConfigurationFileBase<TConfigurationFile, {}> {
    loadConfigurationFile(terminal: ITerminal, filePath: string): TConfigurationFile;
    loadConfigurationFileAsync(terminal: ITerminal, filePath: string): Promise<TConfigurationFile>;
    tryLoadConfigurationFile(terminal: ITerminal, filePath: string): TConfigurationFile | undefined;
    tryLoadConfigurationFileAsync(terminal: ITerminal, filePath: string): Promise<TConfigurationFile | undefined>;
    // (undocumented)
    protected _tryLoadConfigurationFileInRig(terminal: ITerminal, rigConfig: IRigConfig, visitedConfigurationFilePaths: Set<string>): TConfigurationFile | undefined;
    // (undocumented)
    protected _tryLoadConfigurationFileInRigAsync(terminal: ITerminal, rigConfig: IRigConfig, visitedConfigurationFilePaths: Set<string>): Promise<TConfigurationFile | undefined>;
}

// @beta (undocumented)
export enum PathResolutionMethod {
    custom = "custom",
    // @deprecated
    NodeResolve = "NodeResolve",
    nodeResolve = "nodeResolve",
    resolvePathRelativeToConfigurationFile = "resolvePathRelativeToConfigurationFile",
    resolvePathRelativeToProjectRoot = "resolvePathRelativeToProjectRoot"
}

// @beta (undocumented)
export class ProjectConfigurationFile<TConfigurationFile> extends ConfigurationFileBase<TConfigurationFile, IProjectConfigurationFileOptions> {
    constructor(options: IConfigurationFileOptions<TConfigurationFile, IProjectConfigurationFileOptions>);
    loadConfigurationFileForProject(terminal: ITerminal, projectPath: string, rigConfig?: IRigConfig): TConfigurationFile;
    loadConfigurationFileForProjectAsync(terminal: ITerminal, projectPath: string, rigConfig?: IRigConfig): Promise<TConfigurationFile>;
    readonly projectRelativeFilePath: string;
    tryLoadConfigurationFileForProject(terminal: ITerminal, projectPath: string, rigConfig?: IRigConfig): TConfigurationFile | undefined;
    tryLoadConfigurationFileForProjectAsync(terminal: ITerminal, projectPath: string, rigConfig?: IRigConfig): Promise<TConfigurationFile | undefined>;
    // (undocumented)
    protected _tryLoadConfigurationFileInRig(terminal: ITerminal, rigConfig: IRigConfig, visitedConfigurationFilePaths: Set<string>): TConfigurationFile | undefined;
    // (undocumented)
    protected _tryLoadConfigurationFileInRigAsync(terminal: ITerminal, rigConfig: IRigConfig, visitedConfigurationFilePaths: Set<string>): Promise<TConfigurationFile | undefined>;
}

// @beta (undocumented)
export type PropertyInheritanceCustomFunction<TObject> = (currentObject: TObject, parentObject: TObject) => TObject;

// @beta
function stripAnnotations<TObject>(obj: TObject): TObject;

declare namespace TestUtilities {
    export {
        stripAnnotations
    }
}

```
