/*! * Copyright (c) Microsoft Corporation and contributors. All rights reserved. * Licensed under the MIT License. */ import { type InterdependencyRange, type ReleaseVersion } from "@fluid-tools/version-tools"; import { type Logger, MonoRepo, Package, type PackageJson } from "@fluidframework/build-tools"; import * as semver from "semver"; import type { TsConfigJson } from "type-fest"; import { type PackageWithKind } from "../filter.js"; import { type ReleaseGroup, type ReleasePackage } from "../releaseGroups.js"; import type { DependencyUpdateType } from "./bump.js"; import type { Context, VersionDetails } from "./context.js"; /** * An object that maps package names to version strings or range strings. */ export interface PackageVersionMap { [packageName: ReleasePackage | ReleaseGroup]: ReleaseVersion; } /** * Checks the npm registry for updates for a release group's dependencies. * * @param context - The {@link Context}. * @param releaseGroup - The release group to check. If it is `undefined`, the whole repo is checked. * @param depsToUpdate - An array of packages on which dependencies should be checked. * @param releaseGroupFilter - If provided, this release group won't be checked for dependencies. Set this when you are * updating the dependencies on a release group across the repo. For example, if you have just released the 1.2.3 client * release group, you want to bump everything in the repo to 1.2.3 except the client release group itself. * @param depUpdateType - The constraint to use when deciding if updates are available. * @param prerelease - If true, include prerelease versions as eligible to update. * @param writeChanges - If true, changes will be written to the package.json files. * @param log - A {@link Logger}. * @returns An array of packages that had updated dependencies. */ export declare function npmCheckUpdates(context: Context, releaseGroup: ReleaseGroup | ReleasePackage | undefined, depsToUpdate: ReleasePackage[] | RegExp[], releaseGroupFilter: ReleaseGroup | undefined, depUpdateType: DependencyUpdateType, prerelease?: boolean, writeChanges?: boolean, log?: Logger): Promise<{ updatedPackages: Package[]; updatedDependencies: PackageVersionMap; }>; /** * An object containing release groups and package dependencies that are a prerelease version. */ export interface PreReleaseDependencies { /** * A map of release groups to a version string. */ releaseGroups: Map; /** * A map of release packages to a version string. Only includes independent packages. */ packages: Map; /** * True if there are no pre-release dependencies. False otherwise. */ isEmpty: boolean; } /** * Checks all the packages in a release group for any that are a pre-release version. * * @param context - The context. * @param releaseGroup - The release group or package. * @returns A {@link PreReleaseDependencies} object containing the pre-release dependency names and versions. */ export declare function getPreReleaseDependencies(context: Context, releaseGroup: ReleaseGroup | ReleasePackage | MonoRepo | Package): Promise; /** * Returns true if a release group or package in the repo has been released. * * @param context - The context. * @param releaseGroupOrPackage - The release group to check. * @returns True if the release group was released. * * @remarks * * This function exclusively uses the tags in the repo to determine whether a release has bee done or not. */ export declare function isReleased(context: Context, releaseGroupOrPackage: MonoRepo | Package | string, version: string, log?: Logger): Promise; /** * Generates the correct git tag name for the release of a given release group and version. * * @param releaseGroupOrPackage - The release group or independent package to generate a tag name for. * @param version - The version to use for the generated tag. * @returns The generated tag name. */ export declare function generateReleaseGitTagName(releaseGroupOrPackage: MonoRepo | Package | string, version?: string): string; /** * Sorts an array of {@link ReleaseDetails} by version or date. The array will be cloned then sorted in place. * * @param versions - The array of versions to sort. * @param sortKey - The sort key. * @returns A sorted array. */ export declare function sortVersions(versions: VersionDetails[], sortKey: "version" | "date"): VersionDetails[]; /** * Filters an array of {@link VersionDetails}, removing versions older than a specified number of business days. * * @param versions - The array of versions to filter. * @param numBusinessDays - The number of business days to consider recent. * @returns An array of versions that are more recent than numBusinessDays. */ export declare function filterVersionsOlderThan(versions: VersionDetails[], numBusinessDays: number): VersionDetails[]; /** * Gets the direct Fluid dependencies for a given package or release group. A Fluid dependency is a dependency on * other packages or release groups in the repo. * * @param context - The {@link Context}. * @param releaseGroupOrPackage - The release group or package to check. * @returns A tuple of {@link PackageVersionMap} objects, one of which contains release groups on which the package * depends, and the other contains independent packages on which the package depends. */ export declare function getFluidDependencies(context: Context, releaseGroupOrPackage: ReleaseGroup | ReleasePackage): [releaseGroups: PackageVersionMap, packages: PackageVersionMap]; export interface DependencyWithRange { pkg: Package; range: InterdependencyRange; } /** * Sets the version of a release group or standalone package. * * @param context - The {@link Context}. * @param releaseGroupOrPackage - A release group repo or package to bump. * @param version - The version to set. * @param interdependencyRange - The type of dependency to use on packages within the release group. * @param writeChanges - If true, save changes to packages to disk. * @param log - A logger to use. * @param onlyUpdateWorkspaceDeps - If true, only dependencies that use the workspace: protocol will be updated. */ export declare function setVersion(context: Context, releaseGroupOrPackage: MonoRepo | Package, version: semver.SemVer, interdependencyRange?: InterdependencyRange, log?: Logger, onlyUpdateWorkspaceDeps?: boolean): Promise; /** * Checks the npm registry for updates for a release group's dependencies. * * @param context - The {@link Context}. * @param releaseGroup - The release group to check. If it is `undefined`, the whole repo is checked. * @param depsToUpdate - An array of packages on which dependencies should be checked. * @param releaseGroupFilter - If provided, this release group won't be checked for dependencies. Set this when you are * updating the dependencies on a release group across the repo. For example, if you have just released the 1.2.3 client * release group, you want to bump everything in the repo to 1.2.3 except the client release group itself. * @param prerelease - If true, include prerelease versions as eligible to update. * @param writeChanges - If true, changes will be written to the package.json files. * @param log - A {@link Logger}. * @returns An array of packages that had updated dependencies. */ export declare function npmCheckUpdatesHomegrown(context: Context, releaseGroup: ReleaseGroup | ReleasePackage | undefined, depsToUpdate: ReleasePackage[], releaseGroupFilter: ReleaseGroup | undefined, prerelease?: boolean, writeChanges?: boolean, log?: Logger): Promise<{ updatedPackages: PackageWithKind[]; updatedDependencies: PackageVersionMap; }>; /** * Checks the package object to verify that the specified devDependency exists. * * @param packageObject - the package.json object to check for the dependency * @param dependencyName - the dependency to check for in the package object * @returns The version of the dependency in package.json. */ export declare function ensureDevDependencyExists(packageObject: PackageJson, dependencyName: string): string; /** * Returns the "tarball name" for a package. This is the name that 'npm pack' uses for the tarball it creates when run, * NOT including version or file extension. * * @param pkg - The package.json for the package. * @returns The package name portion of the full package tarball name. * * @see {@link getFullTarballName} for a version of this function that includes the package version and file extension. */ export declare function getTarballName(pkg: PackageJson | string): string; /** * Returns the "tarball name" for a package. This is the name that 'npm pack' uses for the tarball it creates when run, * including the version and file extension. * * @param pkg - The package.json for the package. * @returns The full tarball name including version and file extension. * * @see {@link getTarballName} for a version of this function that does not include the package version and file extension. */ export declare function getFullTarballName(pkg: PackageJson): string; /** * Reads and parses the `package.json` file in the current directory. * Use this function if you prefer the CLI command not to be implemented as `PackageCommand`command. */ export declare function readPackageJson(): Promise; export declare function readTsConfig(): Promise; //# sourceMappingURL=package.d.ts.map