CtrlK
BlogDocsLog inGet started
Tessl Logo

tessl/npm-rushstack--rush-sdk

A lightweight proxy API for accessing @microsoft/rush-lib with smart loading and version resolution

Pending
Overview
Eval results
Files

package-management.mddocs/

Package Management

Package manager abstraction and configuration for npm, pnpm, and yarn including installation options and dependency management.

Note: All APIs in this document are re-exported from @microsoft/rush-lib through @rushstack/rush-sdk.

Capabilities

PackageManager

Abstract base class for package manager implementations with unified API across npm, pnpm, and yarn.

/**
 * Abstract base class for package manager implementations
 */
abstract class PackageManager {
  /** Package manager name (npm, pnpm, yarn) */
  readonly name: string;
  
  /** Package manager version */
  readonly version: string;
  
  /** Common folder path */
  readonly commonFolder: string;
  
  /** Install all dependencies */
  abstract installAsync(options: IInstallManagerOptions): Promise<void>;
  
  /** Check if shrinkwrap file exists */
  abstract isValidShrinkwrapFile(shrinkwrapFilePath: string): boolean;
  
  /** Get shrinkwrap file path */
  abstract getShrinkwrapFilePath(projectFolder: string): string;
  
  /** Parse shrinkwrap file */
  abstract parseShrinkwrapFile(shrinkwrapFilePath: string): DependencySpecifier | undefined;
}

interface IInstallManagerOptions {
  /** Skip policy checks */
  bypassPolicy?: boolean;
  
  /** Allow shrinkwrap updates */
  allowShrinkwrapUpdates?: boolean;
  
  /** Maximum install attempts */
  maxInstallAttempts?: number;
  
  /** Network concurrency limit */
  networkConcurrency?: number;
  
  /** Check store integrity */
  checkRuntimeShrinkwrap?: boolean;
}

Usage Examples:

import { RushConfiguration } from "@rushstack/rush-sdk";

const config = loadFromDefaultLocation();
const packageManager = config.packageManager;

console.log(`Using ${packageManager.name} version ${packageManager.version}`);

// Install dependencies
await packageManager.installAsync({
  allowShrinkwrapUpdates: true,
  maxInstallAttempts: 3
});

NPM Configuration

Configuration options specific to npm package manager.

/**
 * NPM-specific configuration options
 */
class NpmOptionsConfiguration {
  /** Environment variables to set during npm operations */
  readonly environmentVariables: ReadonlyMap<string, string>;
  
  /** NPM registry URL */
  readonly registry?: string;
  
  /** Additional command line arguments */
  readonly additionalArgs: ReadonlyArray<string>;
  
  /** Cache folder path */
  readonly cacheFolder?: string;
  
  /** Temporary folder path */
  readonly tmpFolder?: string;
}

PNPM Configuration

Configuration options specific to pnpm package manager.

/**
 * PNPM-specific configuration options  
 */
class PnpmOptionsConfiguration {
  /** Environment variables to set during pnpm operations */
  readonly environmentVariables: ReadonlyMap<string, string>;
  
  /** PNPM store path */
  readonly pnpmStorePath?: string;
  
  /** Prevent store pruning */
  readonly preventManualShrinkwrapChanges: boolean;
  
  /** Use frozen lockfile */
  readonly useFrozenLockfileForInstall: boolean;
  
  /** Additional command line arguments */
  readonly additionalArgs: ReadonlyArray<string>;
  
  /** Global folder path */
  readonly globalFolder?: string;
  
  /** Cache folder path */
  readonly cacheFolder?: string;
  
  /** State folder path */
  readonly stateFolder?: string;
}

Yarn Configuration

Configuration options specific to yarn package manager.

/**
 * Yarn-specific configuration options
 */
class YarnOptionsConfiguration {
  /** Environment variables to set during yarn operations */
  readonly environmentVariables: ReadonlyMap<string, string>;
  
  /** Ignore optional dependencies */
  readonly ignoreOptionalDependencies: boolean;
  
  /** Network timeout in milliseconds */
  readonly networkTimeout?: number;
  
  /** Additional command line arguments */
  readonly additionalArgs: ReadonlyArray<string>;
  
  /** Cache folder path */
  readonly cacheFolder?: string;
}

Usage Examples:

import { RushConfiguration } from "@rushstack/rush-sdk";

const config = RushConfiguration.loadFromDefaultLocation();

// Access package manager specific options
if (config.packageManager === 'pnpm') {
  const pnpmOptions = config.pnpmOptions;
  console.log(`PNPM store path: ${pnpmOptions.pnpmStorePath}`);
  console.log(`Frozen lockfile: ${pnpmOptions.useFrozenLockfileForInstall}`);
}

if (config.packageManager === 'npm') {
  const npmOptions = config.npmOptions;
  console.log(`NPM registry: ${npmOptions.registry}`);
  console.log(`Cache folder: ${npmOptions.cacheFolder}`);
}

if (config.packageManager === 'yarn') {
  const yarnOptions = config.yarnOptions;
  console.log(`Network timeout: ${yarnOptions.networkTimeout}`);
  console.log(`Ignore optional deps: ${yarnOptions.ignoreOptionalDependencies}`);
}

Package JSON Management

Utilities for reading and manipulating package.json files with dependency management.

/**
 * Utilities for editing package.json files
 */
class PackageJsonEditor {
  /** Load package.json from file path */
  static load(filePath: string): PackageJsonEditor;
  
  /** File path of the package.json */
  readonly filePath: string;
  
  /** Parsed package.json data */
  readonly packageJson: IPackageJson;
  
  /** Add or update a dependency */
  addOrUpdateDependency(
    packageName: string, 
    newVersion: string, 
    dependencyType: DependencyType
  ): void;
  
  /** Remove a dependency */
  tryRemoveDependency(packageName: string, dependencyType: DependencyType): boolean;
  
  /** Get dependency version */
  tryGetDependency(packageName: string): PackageJsonDependency | undefined;
  
  /** Save changes to disk */
  saveIfModified(): boolean;
}

/**
 * Represents a package.json dependency
 */
class PackageJsonDependency {
  /** Package name */
  readonly name: string;
  
  /** Version specifier */
  readonly version: string;
  
  /** Dependency type */
  readonly dependencyType: DependencyType;
  
  /** Additional metadata */
  readonly dependencyMeta: PackageJsonDependencyMeta;
}

class PackageJsonDependencyMeta {
  /** Whether dependency is injected by Rush */
  readonly injected?: boolean;
}

enum DependencyType {
  Regular = "dependencies",
  Dev = "devDependencies",
  Optional = "optionalDependencies", 
  Peer = "peerDependencies"
}

Usage Examples:

import { PackageJsonEditor, DependencyType } from "@rushstack/rush-sdk";

// Load and edit package.json
const editor = PackageJsonEditor.load("./package.json");

// Add a new dependency
editor.addOrUpdateDependency("lodash", "^4.17.21", DependencyType.Regular);

// Update a dev dependency
editor.addOrUpdateDependency("typescript", "^4.5.0", DependencyType.Dev);

// Check if dependency exists
const dep = editor.tryGetDependency("react");
if (dep) {
  console.log(`React version: ${dep.version}`);
}

// Remove a dependency
const removed = editor.tryRemoveDependency("unused-package", DependencyType.Regular);
console.log(`Removed: ${removed}`);

// Save changes
const modified = editor.saveIfModified();
console.log(`Package.json modified: ${modified}`);

Dependency Resolution

Advanced dependency resolution and shrinkwrap management.

/**
 * Dependency specifier for resolving package versions
 */
class DependencySpecifier {
  /** Package name */
  readonly packageName: string;
  
  /** Version range */
  readonly versionSpecifier: string;
  
  /** Create from string like "package@1.0.0" */
  static parse(specifier: string): DependencySpecifier;
  
  /** Check if version satisfies this specifier */
  versionIsCompatible(version: string): boolean;
}

Install with Tessl CLI

npx tessl i tessl/npm-rushstack--rush-sdk

docs

build-operations.md

configuration-files.md

configuration.md

index.md

manual-loading.md

package-management.md

version-management.md

tile.json