mirror of
https://github.com/pnpm/pnpm.git
synced 2026-03-24 01:51:41 -04:00
refactor: use DEPENDENCIES_FIELDS from @pnpm/types
@pnpm/utils BREAKING CHANGE: removed dependenciesTypes removed DependenciesType
This commit is contained in:
@@ -1,4 +1,7 @@
|
||||
import {PackageJson} from '@pnpm/types'
|
||||
import {
|
||||
DEPENDENCIES_FIELDS,
|
||||
PackageJson,
|
||||
} from '@pnpm/types'
|
||||
import R = require('ramda')
|
||||
import {
|
||||
Shrinkwrap,
|
||||
@@ -8,20 +11,22 @@ export default (shr: Shrinkwrap, pkg: PackageJson) => {
|
||||
if (!R.equals({...pkg.devDependencies, ...pkg.dependencies, ...pkg.optionalDependencies}, shr.specifiers)) {
|
||||
return false
|
||||
}
|
||||
for (const depType of ['optionalDependencies', 'dependencies', 'devDependencies']) {
|
||||
const emptyDep = R.isEmpty(R.keys(pkg[depType]))
|
||||
if (emptyDep !== R.isEmpty(R.keys(shr[depType]))) return false
|
||||
for (const depField of DEPENDENCIES_FIELDS) {
|
||||
const shrDeps = shr[depField] || {}
|
||||
const pkgDeps = pkg[depField] || {}
|
||||
const emptyDep = R.isEmpty(pkgDeps)
|
||||
if (emptyDep !== R.isEmpty(shrDeps)) return false
|
||||
if (emptyDep) continue
|
||||
|
||||
const pkgDepNames = depType === 'optionalDependencies'
|
||||
? Object.keys(pkg.optionalDependencies || {})
|
||||
: Object.keys(pkg[depType]).filter((depName) => !pkg.optionalDependencies || !pkg.optionalDependencies[depName])
|
||||
if (pkgDepNames.length !== Object.keys(shr[depType]).length &&
|
||||
pkgDepNames.length !== countOfNonLinkedDeps(shr[depType])) {
|
||||
const pkgDepNames = depField === 'optionalDependencies'
|
||||
? Object.keys(pkgDeps)
|
||||
: Object.keys(pkgDeps).filter((depName) => !pkg.optionalDependencies || !pkg.optionalDependencies[depName])
|
||||
if (pkgDepNames.length !== R.keys(shrDeps).length &&
|
||||
pkgDepNames.length !== countOfNonLinkedDeps(shrDeps)) {
|
||||
return false
|
||||
}
|
||||
for (const depName of pkgDepNames) {
|
||||
if (!shr[depType][depName] || shr.specifiers[depName] !== pkg[depType][depName]) return false
|
||||
if (!shrDeps[depName] || shr.specifiers[depName] !== pkgDeps[depName]) return false
|
||||
}
|
||||
}
|
||||
return true
|
||||
|
||||
@@ -17,10 +17,10 @@ import {
|
||||
} from '@pnpm/resolver-base'
|
||||
import {
|
||||
Dependencies,
|
||||
DEPENDENCIES_FIELDS,
|
||||
PackageJson,
|
||||
} from '@pnpm/types'
|
||||
import {
|
||||
dependenciesTypes,
|
||||
getSaveType,
|
||||
realNodeModulesDir,
|
||||
safeReadPackageFromDir as safeReadPkgFromDir,
|
||||
@@ -286,14 +286,16 @@ async function linkedPackagesSatisfyPackageJson (
|
||||
localPackages?: LocalPackages,
|
||||
) {
|
||||
const localPackagesByDirectory = localPackages ? getLocalPackagesByDirectory(localPackages) : {}
|
||||
for (const depType of ['optionalDependencies', 'dependencies', 'devDependencies']) {
|
||||
if (!shr[depType] || !pkg[depType]) continue
|
||||
const depNames = Object.keys(shr[depType])
|
||||
for (const depField of DEPENDENCIES_FIELDS) {
|
||||
const shrDeps = shr[depField]
|
||||
const pkgDeps = pkg[depField]
|
||||
if (!shrDeps || !pkgDeps) continue
|
||||
const depNames = Object.keys(shrDeps)
|
||||
for (const depName of depNames) {
|
||||
if (!shr[depType][depName].startsWith('link:') || !pkg[depType][depName]) continue
|
||||
const dir = path.join(prefix, shr[depType][depName].substr(5))
|
||||
if (!shrDeps[depName].startsWith('link:') || !pkgDeps[depName]) continue
|
||||
const dir = path.join(prefix, shrDeps[depName].substr(5))
|
||||
const linkedPkg = localPackagesByDirectory[dir] || await safeReadPkgFromDir(dir)
|
||||
if (!linkedPkg || !semver.satisfies(linkedPkg.version, pkg[depType][depName])) return false
|
||||
if (!linkedPkg || !semver.satisfies(linkedPkg.version, pkgDeps[depName])) return false
|
||||
}
|
||||
}
|
||||
return true
|
||||
@@ -877,7 +879,7 @@ function alignDependencyTypes (pkg: PackageJson, shr: Shrinkwrap) {
|
||||
const depTypesOfAliases = getAliasToDependencyTypeMap(pkg)
|
||||
|
||||
// Aligning the dependency types in shrinkwrap.yaml
|
||||
for (const depType of dependenciesTypes) {
|
||||
for (const depType of DEPENDENCIES_FIELDS) {
|
||||
if (!shr[depType]) continue
|
||||
for (const alias of Object.keys(shr[depType] || {})) {
|
||||
if (depType === depTypesOfAliases[alias] || !depTypesOfAliases[alias]) continue
|
||||
@@ -889,7 +891,7 @@ function alignDependencyTypes (pkg: PackageJson, shr: Shrinkwrap) {
|
||||
|
||||
function getAliasToDependencyTypeMap (pkg: PackageJson) {
|
||||
const depTypesOfAliases = {}
|
||||
for (const depType of dependenciesTypes) {
|
||||
for (const depType of DEPENDENCIES_FIELDS) {
|
||||
if (!pkg[depType]) continue
|
||||
for (const alias of Object.keys(pkg[depType] || {})) {
|
||||
if (!depTypesOfAliases[alias]) {
|
||||
|
||||
@@ -7,10 +7,12 @@ import {
|
||||
import { linkBinsOfPackages } from '@pnpm/link-bins'
|
||||
import logger, { streamParser } from '@pnpm/logger'
|
||||
import { read as readModulesYaml } from '@pnpm/modules-yaml'
|
||||
import { PackageJson } from '@pnpm/types'
|
||||
import {
|
||||
DependenciesType,
|
||||
dependenciesTypes,
|
||||
DEPENDENCIES_FIELDS,
|
||||
DependenciesField,
|
||||
PackageJson,
|
||||
} from '@pnpm/types'
|
||||
import {
|
||||
getSaveType,
|
||||
removeOrphanPackages as removeOrphanPkgs,
|
||||
safeReadPackage,
|
||||
@@ -64,7 +66,7 @@ export default async function link (
|
||||
})
|
||||
}
|
||||
const linkedPkgs: Array<{path: string, pkg: PackageJson, alias: string}> = []
|
||||
const specsToUpsert = [] as Array<{name: string, pref: string, saveType: DependenciesType}>
|
||||
const specsToUpsert = [] as Array<{name: string, pref: string, saveType: DependenciesField}>
|
||||
const saveType = getSaveType(opts)
|
||||
|
||||
for (const linkFrom of linkFromPkgs) {
|
||||
@@ -83,7 +85,7 @@ export default async function link (
|
||||
saveExact: opts.saveExact,
|
||||
savePrefix: opts.savePrefix,
|
||||
}),
|
||||
saveType: (saveType || pkg && guessDependencyType(linkedPkg.name, pkg)) as DependenciesType,
|
||||
saveType: (saveType || pkg && guessDependencyType(linkedPkg.name, pkg)) as DependenciesField,
|
||||
})
|
||||
|
||||
const packagePath = normalize(path.relative(opts.prefix, linkFromPath))
|
||||
@@ -164,8 +166,8 @@ function addLinkToShrinkwrap (
|
||||
},
|
||||
) {
|
||||
const id = `link:${opts.packagePath}`
|
||||
let addedTo: DependenciesType | undefined
|
||||
for (const depType of dependenciesTypes) {
|
||||
let addedTo: DependenciesField | undefined
|
||||
for (const depType of DEPENDENCIES_FIELDS) {
|
||||
if (!addedTo && opts.pkg && opts.pkg[depType] && opts.pkg[depType]![opts.linkedPkgName]) {
|
||||
addedTo = depType
|
||||
shr[depType] = shr[depType] || {}
|
||||
@@ -203,7 +205,7 @@ async function linkToModules (
|
||||
packageDir: string,
|
||||
pkg: PackageJson,
|
||||
destModulesDir: string,
|
||||
saveType?: DependenciesType,
|
||||
saveType?: DependenciesField,
|
||||
prefix: string,
|
||||
},
|
||||
) {
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
import { packageJsonLogger } from '@pnpm/core-loggers'
|
||||
import { PackageJson } from '@pnpm/types'
|
||||
import {
|
||||
DependenciesType,
|
||||
dependenciesTypes,
|
||||
} from '@pnpm/utils'
|
||||
DEPENDENCIES_FIELDS,
|
||||
DependenciesField,
|
||||
PackageJson,
|
||||
} from '@pnpm/types'
|
||||
import loadJsonFile = require('load-json-file')
|
||||
import writePkg = require('write-pkg')
|
||||
|
||||
@@ -11,7 +11,7 @@ export default async function (
|
||||
pkgJsonPath: string,
|
||||
removedPackages: string[],
|
||||
opts: {
|
||||
saveType?: DependenciesType,
|
||||
saveType?: DependenciesField,
|
||||
prefix: string,
|
||||
},
|
||||
): Promise<PackageJson> {
|
||||
@@ -23,14 +23,14 @@ export default async function (
|
||||
if (!packageJson[opts.saveType]) return packageJson
|
||||
|
||||
removedPackages.forEach((dependency) => {
|
||||
delete packageJson[opts.saveType as DependenciesType][dependency]
|
||||
delete packageJson[opts.saveType as DependenciesField][dependency]
|
||||
})
|
||||
} else {
|
||||
dependenciesTypes
|
||||
.filter((deptype) => packageJson[deptype])
|
||||
.forEach((deptype) => {
|
||||
DEPENDENCIES_FIELDS
|
||||
.filter((depField) => packageJson[depField])
|
||||
.forEach((depField) => {
|
||||
removedPackages.forEach((dependency) => {
|
||||
delete packageJson[deptype][dependency]
|
||||
delete packageJson[depField][dependency]
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
import { packageJsonLogger } from '@pnpm/core-loggers'
|
||||
import { PackageJson } from '@pnpm/types'
|
||||
import {
|
||||
DependenciesType,
|
||||
dependenciesTypes,
|
||||
} from '@pnpm/utils'
|
||||
DEPENDENCIES_FIELDS,
|
||||
DependenciesField,
|
||||
PackageJson,
|
||||
} from '@pnpm/types'
|
||||
import loadJsonFile = require('load-json-file')
|
||||
import path = require('path')
|
||||
import writePkg = require('write-pkg')
|
||||
@@ -13,7 +13,7 @@ export default async function save (
|
||||
packageSpecs: Array<{
|
||||
name: string,
|
||||
pref?: string,
|
||||
saveType?: DependenciesType,
|
||||
saveType?: DependenciesField,
|
||||
}>,
|
||||
): Promise<PackageJson> {
|
||||
// Read the latest version of package.json to avoid accidental overwriting
|
||||
@@ -31,7 +31,7 @@ export default async function save (
|
||||
packageJson[packageSpec.saveType] = packageJson[packageSpec.saveType] || {}
|
||||
packageSpecs.forEach((dependency) => {
|
||||
packageJson[saveType][dependency.name] = dependency.pref || findSpec(dependency.name, packageJson as PackageJson)
|
||||
dependenciesTypes.filter((deptype) => deptype !== packageSpec.saveType).forEach((deptype) => {
|
||||
DEPENDENCIES_FIELDS.filter((depField) => depField !== packageSpec.saveType).forEach((deptype) => {
|
||||
if (packageJson[deptype]) {
|
||||
delete packageJson[deptype][dependency.name]
|
||||
}
|
||||
@@ -59,7 +59,7 @@ function findSpec (depName: string, pkg: PackageJson): string | undefined {
|
||||
return foundDepType && pkg[foundDepType]![depName]
|
||||
}
|
||||
|
||||
export function guessDependencyType (depName: string, pkg: PackageJson): DependenciesType | undefined {
|
||||
return dependenciesTypes
|
||||
.find((deptype) => Boolean(pkg[deptype] && pkg[deptype]![depName]))
|
||||
export function guessDependencyType (depName: string, pkg: PackageJson): DependenciesField | undefined {
|
||||
return DEPENDENCIES_FIELDS
|
||||
.find((depField) => Boolean(pkg[depField] && pkg[depField]![depName]))
|
||||
}
|
||||
|
||||
@@ -1,9 +1,6 @@
|
||||
import {PnpmOptions} from '@pnpm/types'
|
||||
export type DependenciesType = 'dependencies' | 'devDependencies' | 'optionalDependencies'
|
||||
import { DependenciesField, PnpmOptions } from '@pnpm/types'
|
||||
|
||||
export const dependenciesTypes: DependenciesType[] = ['optionalDependencies', 'dependencies', 'devDependencies']
|
||||
|
||||
export default function getSaveType (opts: PnpmOptions): DependenciesType | undefined {
|
||||
export default function getSaveType (opts: PnpmOptions): DependenciesField | undefined {
|
||||
if (opts.saveDev) return 'devDependencies'
|
||||
if (opts.saveOptional) return 'optionalDependencies'
|
||||
if (opts.saveProd) return 'dependencies'
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import getSaveType, {DependenciesType, dependenciesTypes} from './getSaveType'
|
||||
import getSaveType from './getSaveType'
|
||||
import realNodeModulesDir from './realNodeModulesDir'
|
||||
import removeOrphanPackages from './removeOrphanPkgs'
|
||||
import removeTopDependency from './removeTopDependency'
|
||||
@@ -7,8 +7,6 @@ import {fromDir as safeReadPackageFromDir} from './safeReadPkg'
|
||||
import readPackage from './safeReadPkg'
|
||||
|
||||
export {
|
||||
DependenciesType,
|
||||
dependenciesTypes,
|
||||
getSaveType,
|
||||
readPackage,
|
||||
realNodeModulesDir,
|
||||
|
||||
@@ -3,14 +3,14 @@ import {
|
||||
statsLogger,
|
||||
} from '@pnpm/core-loggers'
|
||||
import logger from '@pnpm/logger'
|
||||
import { DEPENDENCIES_FIELDS } from '@pnpm/types'
|
||||
import * as dp from 'dependency-path'
|
||||
import vacuumCB = require('fs-vacuum')
|
||||
import {StoreController} from 'package-store'
|
||||
import { StoreController } from 'package-store'
|
||||
import path = require('path')
|
||||
import {ResolvedPackages, Shrinkwrap} from 'pnpm-shrinkwrap'
|
||||
import { ResolvedPackages, Shrinkwrap } from 'pnpm-shrinkwrap'
|
||||
import R = require('ramda')
|
||||
import promisify = require('util.promisify')
|
||||
import {dependenciesTypes} from './getSaveType'
|
||||
import removeTopDependency from './removeTopDependency'
|
||||
|
||||
const vacuum = promisify(vacuumCB)
|
||||
@@ -28,8 +28,8 @@ export default async function removeOrphanPkgs (
|
||||
storeController: StoreController,
|
||||
},
|
||||
): Promise<Set<string>> {
|
||||
const oldPkgs = R.toPairs(R.mergeAll(R.map((depType) => opts.oldShrinkwrap[depType], dependenciesTypes)))
|
||||
const newPkgs = R.toPairs(R.mergeAll(R.map((depType) => opts.newShrinkwrap[depType], dependenciesTypes)))
|
||||
const oldPkgs = R.toPairs(R.mergeAll(R.map((depType) => opts.oldShrinkwrap[depType], DEPENDENCIES_FIELDS)))
|
||||
const newPkgs = R.toPairs(R.mergeAll(R.map((depType) => opts.newShrinkwrap[depType], DEPENDENCIES_FIELDS)))
|
||||
|
||||
const removedTopDeps: Array<[string, string]> = R.difference(oldPkgs, newPkgs) as Array<[string, string]>
|
||||
|
||||
|
||||
Reference in New Issue
Block a user