import type { TsconfigOptions } from "oxc-resolver";
import type { ConfigFileOptions, PackageGlobOptions, PackageOptions } from "./types.js";
/**
 * Remove duplicates from an array.
 *
 * @param {T[]} arr - the array to remove duplicates from
 *
 * @returns {T[]} the array without duplicates
 */
export declare function unique<T>(arr: T[]): T[];
/**
 * Remove prefix and querystrings from the module path.
 * When using node: prefix, we should remove it.
 * Some imports may have querystrings, for example:
 *  * import "foo?bar";
 *
 * @param {string} modulePath - the import module path
 *
 * @returns {string} cleaned module path
 */
export declare function cleanModulePath(modulePath: string): string;
/**
 * Normalize patterns to include all possible package descriptor files.
 *
 * @param {string[]} patterns - the patterns to normalize
 *
 * @returns {string[]} the normalized patterns
 */
export declare function normalizePatterns(patterns: string[]): string[];
/**
 * Get the depth of a path.
 *
 * @param {string} p - the path
 *
 * @returns {number} the depth of the path
 */
export declare function getPathDepth(p: string): number;
/**
 * Sort paths by the depth of the path. The deeper the path, the higher the priority.
 *
 * @param {string[]} paths - the paths to sort
 *
 * @returns {string[]} the sorted paths
 */
export declare function sortPathsByDepth(paths: string[]): string[];
/**
 * Read a yaml file.
 *
 * @param {string} filePath - the file path to read
 *
 * @returns {T | null} the parsed yaml file
 */
export declare function readYamlFile<T>(filePath: string): T | null;
/**
 * Normalize package glob options.
 *
 * @param {PackageOptions | string[]} opts - the package options
 * @param {string} root - the root path
 *
 * @returns {PackageGlobOptions} the normalized package glob options
 */
export declare function normalizePackageGlobOptions(opts: PackageOptions | string[], root: string): PackageGlobOptions;
/**
 * Find all packages in the root path.
 *
 * Copy from https://github.com/pnpm/pnpm/blob/b8b0c687f2e3403d07381822fe81c08478413916/fs/find-packages/src/index.ts
 *
 * @param {string} root - the root path
 * @param {PackageOptions | string[]} packageOpts - the package options
 *
 * @returns {string[]} the found package paths
 */
export declare function findAllPackages(root: string, packageOpts: PackageOptions | string[]): string[];
/**
 * Find the closest package from the source file.
 *
 * @param {string} sourceFile - the source file
 * @param {string[]} sortedPaths - the paths to search
 *
 * @returns {string | undefined} the closest package root
 */
export declare function findClosestPackageRoot(sourceFile: string, sortedPaths: string[]): string | undefined;
/**
 * Sort config files by depth and specific filename.
 *
 * @param {string[]} configFiles - the config files to sort
 * @param {string} tsconfigFilename - the TypeScript config filename
 *
 * @returns {string[]} the sorted config files
 */
export declare function sortConfigFiles(configFiles: string[], tsconfigFilename?: string): string[];
/**
 * Find the closest config file from the source file.
 *
 * @param {string} sourceFile - the source file
 * @param {string[]} sortedConfigFiles - the config files to search
 *
 * @returns {string | undefined} the closest config file
 */
export declare function findClosestConfigFile(sourceFile: string, sortedConfigFiles: string[]): string | undefined;
/**
 * Get the config files in the specified directory.
 *
 * @param {boolean | string | ConfigFileOptions | undefined} config - the config option
 * @param {string} root - the root path
 * @param {{ ignore?: string[]; filename: string }} defaults - the default options
 *
 * @returns {[string | undefined, string[] | undefined]} the filename and config files
 */
export declare function getConfigFiles(config: boolean | string | ConfigFileOptions | undefined, root: string, defaults: {
    ignore?: string[];
    filename: string;
}): [filename: undefined, configFiles: undefined] | [filename: string, configFiles: string[]];
/**
 * Normalize the config file options.
 *
 * @param {Record<"tsconfig" | "jsconfig", boolean | string | ConfigFileOptions | undefined>} configs - the config file options
 * @param {string} packageDir - the directory of the package
 * @param {string} sourceFile - the source file
 *
 * @returns {ConfigFileOptions | undefined} the normalized config file options
 */
export declare function normalizeConfigFileOptions(configs: Record<"tsconfig" | "jsconfig", boolean | string | ConfigFileOptions | undefined>, packageDir: string, sourceFile: string): TsconfigOptions | undefined;
/**
 * Normalize the alias mapping.
 *
 * @param {Record<string, string | string[]> | undefined} alias - the alias mapping
 * @param {string} parent - the parent directory
 *
 * @returns {Record<string, string[]> | undefined} the normalized alias mapping
 */
export declare function normalizeAlias(alias: Record<string, string | string[]> | undefined, parent: string): Record<string, string[]> | undefined;
/**
 * Get the hash of an object.
 *
 * @param {unknown} obj - the object to hash
 *
 * @returns {string} the hash of the object
 */
export declare function hashObject(obj: unknown): string;
/**
 * Find all workspace packages.
 *
 * @param {string[]} roots - the roots to search
 * @param {string[] | PackageOptions} packages - the package options
 *
 * @returns {string[]} the sorted workspace packages
 */
export declare function findWorkspacePackages(roots: string[], packages?: string[] | PackageOptions): string[];
