import { logging } from '@angular-devkit/core';
import { NodeDependency, NodeDependencyType } from '@schematics/angular/utility/dependencies';
import type { PackageJson } from 'type-fest';
import { DependencyInManifest, DependencyToAdd } from '../interfaces/dependencies';
/**
 * Method to extract the provided package version range from a package.json file
 * Look for the range based on this order of priority:
 * - generatorDependencies
 * - peerDependencies
 * - dependencies
 * - devDependencies
 * @param packageNames list of package we want to retrieve the version
 * @param packageJsonPath Path to the package.json to refer to
 * @param logger logger
 * @returns The version range value retrieved from the provided package.json file
 */
export declare function getExternalDependenciesVersionRange<T extends string>(packageNames: T[], packageJsonPath: string, logger: logging.LoggerApi): Record<T, string>;
/**
 * Replace the caret ranges by tilde ranges
 * @param range Range to replace
 */
export declare const enforceTildeRange: (range?: string) => string | undefined;
/**
 * Return true if B is a subset of A or if minVersion of A is greater than minVersion of B
 * @param rangeA
 * @param rangeB
 */
export declare function isRangeGreater(rangeA: string, rangeB: string): boolean;
/**
 * Compute the version range for a package based on the less restrictive version declared in the package.json.
 * If the versions declared in the package.json do not intersect, take the highest version.
 * @param packageName
 * @param packageJsonContent
 * @param isTildeEnforced
 */
export declare function getDependencyMaximumVersionRange(packageName: string, packageJsonContent: PackageJson, isTildeEnforced?: boolean): string;
/**
 * Find the range for this package based on the generatorDependency object of the package.json
 * If there are no specified generator dependency, look for the range with the highest minimum or the widest range
 * @param packageName
 * @param packageJsonPath
 * @param isTildeEnforced
 */
export declare function getVersionToInstallFromPackageJson(packageName: string, packageJsonPath: string, isTildeEnforced?: boolean): string | undefined;
/**
 * Check if a dependency has already been installed for the requested range
 * @param depName
 * @param packageJson
 * @param root0
 * @param root0.range
 * @param root0.types
 */
export declare function isDependencyAlreadyInstalled(depName: string, packageJson: PackageJson, { range, types }: Required<DependencyInManifest>): boolean;
/**
 * Method used to build the list of node dependencies to be installed
 * @param dependenciesVersions map of dependency and its associated required version
 * @param type node type of the dependency
 * @returns the list of node dependencies to be installed
 */
export declare function getNodeDependencyList<T extends string>(dependenciesVersions: Record<T, string>, type: NodeDependencyType): NodeDependency[];
/**
 * Retrieves information about external dependencies (peer and dev) for a given project.
 * @template T - Type of the dependency names.
 * @template U - Type of the dev dependency names.
 * @param params - The parameters object.
 * @param params.dependenciesToInstall - Array of external peer dependency names.
 * @param params.devDependenciesToInstall - Array of external dev dependency names.
 * @param params.o3rPackageJsonPath  - The path to the o3r `package.json` file.
 * @param params.projectPackageJson - The path to the package json of the project where the dependencies will be installed.
 * @param params.projectType - The angular type of the project, either 'application' or 'library'.
 * @param params.rootPackageJsonPath - Path to the root of the repository where the dependency will be installed
 * @param logger - The logger instance for logging information.
 * @param isInstallRequired - Whether the package should be installed or not. By default, return true.
 */
export declare function getExternalDependenciesInfo<T extends string, U extends string>({ dependenciesToInstall, devDependenciesToInstall, o3rPackageJsonPath, projectPackageJson, projectType, rootPackageJsonPath }: {
    dependenciesToInstall: T[];
    devDependenciesToInstall: U[];
    o3rPackageJsonPath: string;
    projectPackageJson: PackageJson;
    projectType?: 'application' | 'library';
    rootPackageJsonPath?: string;
}, logger?: logging.LoggerApi, isInstallRequired?: (_: string) => undefined | boolean): Record<T | U, DependencyToAdd>;
//# sourceMappingURL=dependencies.d.ts.map