projen
Version:
CDK for software projects
176 lines (175 loc) • 6.09 kB
TypeScript
import { Component } from "./component";
import { Project } from "./project";
/**
* The `Dependencies` component is responsible to track the list of dependencies
* a project has, and then used by project types as the model for rendering
* project-specific dependency manifests such as the dependencies section
* `package.json` files.
*
* To add a dependency you can use a project-type specific API such as
* `nodeProject.addDeps()` or use the generic API of `project.deps`:
*/
export declare class Dependencies extends Component {
/**
* The project-relative path of the deps manifest file.
*/
static readonly MANIFEST_FILE: string;
/**
* Returns the coordinates of a dependency spec.
*
* Given `foo@^3.4.0` returns `{ name: "foo", version: "^3.4.0" }`.
* Given `bar@npm:@bar/legacy` returns `{ name: "bar", version: "npm:@bar/legacy" }`.
*/
static parseDependency(spec: string): DependencyCoordinates;
private readonly _deps;
/**
* Adds a dependencies component to the project.
* @param project The parent project
*/
constructor(project: Project);
/**
* A copy of all dependencies recorded for this project.
*
* The list is sorted by type->name->version
*/
get all(): Dependency[];
/**
* Returns a dependency by name.
*
* Fails if there is no dependency defined by that name or if `type` is not
* provided and there is more then one dependency type for this dependency.
*
* @param name The name of the dependency
* @param type The dependency type. If this dependency is defined only for a
* single type, this argument can be omitted.
*
* @returns a copy (cannot be modified)
*/
getDependency(name: string, type?: DependencyType): Dependency;
/**
* Returns a dependency by name.
*
* Returns `undefined` if there is no dependency defined by that name or if
* `type` is not provided and there is more then one dependency type for this
* dependency.
*
* @param name The name of the dependency
* @param type The dependency type. If this dependency is defined only for a
* single type, this argument can be omitted.
*
* @returns a copy (cannot be modified) or undefined if there is no match
*/
tryGetDependency(name: string, type?: DependencyType): Dependency | undefined;
/**
* Adds a dependency to this project.
* @param spec The dependency spec in the format `MODULE[@VERSION]` where
* `MODULE` is the package-manager-specific module name and `VERSION` is an
* optional semantic version requirement (e.g. `^3.4.0`).
* @param type The type of the dependency.
*/
addDependency(spec: string, type: DependencyType, metadata?: {
[key: string]: any;
}): Dependency;
/**
* Removes a dependency.
* @param name The name of the module to remove (without the version)
* @param type The dependency type. This is only required if there the
* dependency is defined for multiple types.
*/
removeDependency(name: string, type?: DependencyType): void;
/**
* Checks if an existing dependency satisfies a dependency requirement.
* @param name The name of the dependency to check (without the version).
* @param type The dependency type.
* @param expectedRange The version constraint to check (e.g. `^3.4.0`).
* The constraint of the dependency must be a subset of the expected range to satisfy the requirements.
* @returns `true` if the dependency exists and its version satisfies the provided constraint. `false` otherwise.
* Notably returns `false` if a dependency exists, but has no version.
*/
isDependencySatisfied(name: string, type: DependencyType, expectedRange: string): boolean;
private tryGetDependencyIndex;
private toJson;
}
export interface DepsManifest {
/**
* All dependencies of this module.
*/
readonly dependencies: Dependency[];
}
/**
* Coordinates of the dependency (name and version).
*/
export interface DependencyCoordinates {
/**
* The package manager name of the dependency (e.g. `leftpad` for npm).
*
* NOTE: For package managers that use complex coordinates (like Maven), we
* will codify it into a string somehow.
*/
readonly name: string;
/**
* Semantic version version requirement.
*
* @default - requirement is managed by the package manager (e.g. npm/yarn).
*/
readonly version?: string;
}
/**
* Represents a project dependency.
*/
export interface Dependency extends DependencyCoordinates {
/**
* Which type of dependency this is (runtime, build-time, etc).
*/
readonly type: DependencyType;
/**
* Additional JSON metadata associated with the dependency (package manager
* specific).
* @default {}
*/
readonly metadata?: {
[key: string]: any;
};
}
/**
* Type of dependency.
*/
export declare enum DependencyType {
/**
* The dependency is required for the program/library during runtime.
*/
RUNTIME = "runtime",
/**
* The dependency is required at runtime but expected to be installed by the
* consumer.
*/
PEER = "peer",
/**
* The dependency is bundled and shipped with the module, so consumers are not
* required to install it.
*/
BUNDLED = "bundled",
/**
* The dependency is required to run the `build` task.
*/
BUILD = "build",
/**
* The dependency is required to run the `test` task.
*/
TEST = "test",
/**
* The dependency is required for development (e.g. IDE plugins).
*/
DEVENV = "devenv",
/**
* Transient dependency that needs to be overwritten.
*
* Available for Node packages
*/
OVERRIDE = "override",
/**
* An optional dependency that may be used at runtime if available, but is not required.
* It is expected to be installed by the consumer.
*/
OPTIONAL = "optional"
}