UNPKG

@rushstack/package-extractor

Version:

A library for bundling selected files and dependencies into a deployable package.

297 lines (286 loc) 9.63 kB
import { IPackageJson } from '@rushstack/node-core-library'; import { ITerminal } from '@rushstack/terminal'; /** * The extractor configuration for individual dependencies. * * @public */ export declare interface IExtractorDependencyConfiguration { /** * The name of dependency */ dependencyName: string; /** * The semver version range of dependency */ dependencyVersionRange: string; /** * A list of glob patterns to exclude when extracting this dependency. If a path is * matched by both "patternsToInclude" and "patternsToExclude", the path will be * excluded. If undefined, no paths will be excluded. */ patternsToExclude?: string[]; /** * A list of glob patterns to include when extracting this dependency. If a path is * matched by both "patternsToInclude" and "patternsToExclude", the path will be * excluded. If undefined, all paths will be included. */ patternsToInclude?: string[]; } /** * The extractor-metadata.json file format. * * @public */ export declare interface IExtractorMetadataJson { /** * The name of the main project the extraction was performed for. */ mainProjectName: string; /** * A list of all projects that were extracted. */ projects: IProjectInfoJson[]; /** * A list of all links that are part of the extracted project. */ links: ILinkInfo[]; /** * A list of all files that are part of the extracted project. */ files: string[]; } /** * Options that can be provided to the extractor. * * @public */ export declare interface IExtractorOptions { /** * A terminal to log extraction progress. */ terminal: ITerminal; /** * The main project to include in the extraction operation. */ mainProjectName: string; /** * The source folder that copying originates from. Generally it is the repo root folder. */ sourceRootFolder: string; /** * The target folder for the extraction. */ targetRootFolder: string; /** * Whether to overwrite the target folder if it already exists. */ overwriteExisting: boolean; /** * The desired path to be used when archiving the target folder. Supported file extensions: .zip. */ createArchiveFilePath?: string; /** * Whether to skip copying files to the extraction target directory, and only create an extraction * archive. This is only supported when {@link IExtractorOptions.linkCreation} is 'script' or 'none'. */ createArchiveOnly?: boolean; /** * The pnpmfile configuration if using PNPM, otherwise `undefined`. The configuration will be used to * transform the package.json prior to extraction. * * @remarks * When Rush subspaces are enabled, this setting applies to `default` subspace only. To configure * each subspace, use the {@link IExtractorOptions.subspaces} array instead. The two approaches * cannot be combined. */ transformPackageJson?: (packageJson: IPackageJson) => IPackageJson; /** * If dependencies from the "devDependencies" package.json field should be included in the extraction. */ includeDevDependencies?: boolean; /** * If files ignored by the .npmignore file should be included in the extraction. */ includeNpmIgnoreFiles?: boolean; /** * The folder where the PNPM "node_modules" folder is located. This is used to resolve packages linked * to the PNPM virtual store. * * @remarks * When Rush subspaces are enabled, this setting applies to `default` subspace only. To configure * each subspace, use the {@link IExtractorOptions.subspaces} array instead. The two approaches * cannot be combined. */ pnpmInstallFolder?: string; /** * The link creation mode to use. * "default": Create the links while copying the files; this is the default behavior. Use this setting * if your file copy tool can handle links correctly. * "script": A Node.js script called create-links.js will be written to the target folder. Use this setting * to create links on the server machine, after the files have been uploaded. * "none": Do nothing; some other tool may create the links later, based on the extractor-metadata.json file. */ linkCreation?: LinkCreationMode; /** * The path to the generated link creation script. This is only used when {@link IExtractorOptions.linkCreation} * is 'script'. */ linkCreationScriptPath?: string; /** * An additional folder containing files which will be copied into the root of the extraction. */ folderToCopy?: string; /** * Configurations for individual projects, keyed by the project path relative to the sourceRootFolder. */ projectConfigurations: IExtractorProjectConfiguration[]; /** * Configurations for individual dependencies. */ dependencyConfigurations?: IExtractorDependencyConfiguration[]; /** * When using Rush subspaces, this setting can be used to provide configuration information for each * individual subspace. * * @remarks * To avoid confusion, if this setting is used, then the {@link IExtractorOptions.transformPackageJson} and * {@link IExtractorOptions.pnpmInstallFolder} settings must not be used. */ subspaces?: IExtractorSubspace[]; } /** * The extractor configuration for individual projects. * * @public */ export declare interface IExtractorProjectConfiguration { /** * The name of the project. */ projectName: string; /** * The absolute path to the project. */ projectFolder: string; /** * A list of glob patterns to include when extracting this project. If a path is * matched by both "patternsToInclude" and "patternsToExclude", the path will be * excluded. If undefined, all paths will be included. */ patternsToInclude?: string[]; /** * A list of glob patterns to exclude when extracting this project. If a path is * matched by both "patternsToInclude" and "patternsToExclude", the path will be * excluded. If undefined, no paths will be excluded. */ patternsToExclude?: string[]; /** * The names of additional projects to include when extracting this project. */ additionalProjectsToInclude?: string[]; /** * The names of additional dependencies to include when extracting this project. */ additionalDependenciesToInclude?: string[]; /** * The names of additional dependencies to exclude when extracting this project. */ dependenciesToExclude?: string[]; } /** * The extractor subspace configurations * * @public */ export declare interface IExtractorSubspace { /** * The subspace name */ subspaceName: string; /** * The folder where the PNPM "node_modules" folder is located. This is used to resolve packages linked * to the PNPM virtual store. */ pnpmInstallFolder?: string; /** * The pnpmfile configuration if using PNPM, otherwise undefined. The configuration will be used to * transform the package.json prior to extraction. */ transformPackageJson?: (packageJson: IPackageJson) => IPackageJson; } /** * Represents a symbolic link. * * @public */ export declare interface ILinkInfo { /** * The type of link that was encountered. */ kind: 'fileLink' | 'folderLink'; /** * The path to the link, relative to the root of the extractor output folder. */ linkPath: string; /** * The target that the link points to. */ targetPath: string; } /** * Part of the extractor-matadata.json file format. Represents an extracted project. * * @public */ export declare interface IProjectInfoJson { /** * The name of the project as specified in its package.json file. */ projectName: string; /** * This path is relative to the root of the extractor output folder */ path: string; } /** * The mode to use for link creation. * * @public */ export declare type LinkCreationMode = 'default' | 'script' | 'none'; /** * Manages the business logic for the "rush deploy" command. * * @public */ export declare class PackageExtractor { /** * Get a list of files that would be included in a package created from the provided package root path. * * @beta */ static getPackageIncludedFilesAsync(packageRootPath: string): Promise<string[]>; /** * Extract a package using the provided options */ extractAsync(options: IExtractorOptions): Promise<void>; private static _normalizeOptions; private _performExtractionAsync; /** * Recursively crawl the node_modules dependencies and collect the result in IExtractorState.foldersToCopy. */ private _collectFoldersAsync; private _applyDependencyFilters; /** * Copy one package folder to the extractor target folder. */ private _extractFolderAsync; /** * Write the common/deploy/deploy-metadata.json file. */ private _writeExtractorMetadataAsync; private _makeBinLinksAsync; private _writeCreateLinksScriptAsync; } export { }