@pnpm/lockfile-types
Version:
Types for the pnpm-lock.yaml lockfile
38 lines (37 loc) • 2.19 kB
TypeScript
import type { Lockfile, PackageSnapshot, ProjectSnapshot } from '.';
import type { DependenciesMeta } from '@pnpm/types';
export type LockfileFile = Omit<InlineSpecifiersLockfile, 'importers'> & Partial<InlineSpecifiersProjectSnapshot> & Partial<Pick<InlineSpecifiersLockfile, 'importers'>>;
export type LockfileFileV9 = Omit<InlineSpecifiersLockfile, 'importers' | 'packages'> & Partial<InlineSpecifiersProjectSnapshot> & Partial<Pick<InlineSpecifiersLockfile, 'importers'>> & {
packages?: Record<string, Pick<PackageSnapshot, 'resolution' | 'engines' | 'cpu' | 'os' | 'hasBin' | 'name' | 'version' | 'bundledDependencies' | 'peerDependencies' | 'peerDependenciesMeta' | 'deprecated'>>;
snapshots?: Record<string, Pick<PackageSnapshot, 'dependencies' | 'optionalDependencies' | 'patched' | 'optional' | 'transitivePeerDependencies' | 'id'>>;
};
/**
* Similar to the current Lockfile importers format (lockfile version 5.4 at
* time of writing), but specifiers are moved to each ResolvedDependencies block
* instead of being declared on its own dictionary.
*
* This is an experiment to reduce one flavor of merge conflicts in lockfiles.
* For more info: https://github.com/pnpm/pnpm/issues/4725.
*/
export interface InlineSpecifiersLockfile extends Omit<Lockfile, 'lockfileVersion' | 'importers'> {
lockfileVersion: string;
importers?: Record<string, InlineSpecifiersProjectSnapshot>;
}
/**
* Similar to the current ProjectSnapshot interface, but omits the "specifiers"
* field in favor of inlining each specifier next to its version resolution in
* dependency blocks.
*/
export type InlineSpecifiersProjectSnapshot = Omit<ProjectSnapshot, 'dependencies' | 'devDependencies' | 'optionalDependencies' | 'dependenciesMeta' | 'specifiers'> & {
dependencies?: InlineSpecifiersResolvedDependencies;
devDependencies?: InlineSpecifiersResolvedDependencies;
optionalDependencies?: InlineSpecifiersResolvedDependencies;
dependenciesMeta?: DependenciesMeta;
};
export interface InlineSpecifiersResolvedDependencies {
[depName: string]: SpecifierAndResolution;
}
export interface SpecifierAndResolution {
specifier: string;
version: string;
}