fix(link): report correct dependency types when linking

@pnpm/utils:

BREAKING CHANGE:

the order of dependency types changed. optionalDependencies
is first
This commit is contained in:
Zoltan Kochan
2018-08-20 21:18:33 +03:00
parent 049e669953
commit 7ef9364085
4 changed files with 14 additions and 8 deletions

View File

@@ -830,7 +830,9 @@ function getAliasToDependencyTypeMap (pkg: PackageJson) {
for (const depType of dependenciesTypes) {
if (!pkg[depType]) continue
for (const alias of Object.keys(pkg[depType] || {})) {
depTypesOfAliases[alias] = depType
if (!depTypesOfAliases[alias]) {
depTypesOfAliases[alias] = depType
}
}
}
return depTypesOfAliases

View File

@@ -27,11 +27,10 @@ import R = require('ramda')
import symlinkDir = require('symlink-dir')
import getSpecFromPackageJson from '../getSpecFromPackageJson'
import readShrinkwrapFile from '../readShrinkwrapFiles'
import save from '../save'
import save, { guessDependencyType } from '../save'
import extendOptions, {
InstallOptions,
} from './extendInstallOptions'
import {install} from './install'
import getPref from './utils/getPref'
export default async function link (
@@ -74,7 +73,7 @@ export default async function link (
saveExact: opts.saveExact,
savePrefix: opts.savePrefix,
}),
saveType: saveType as DependenciesType,
saveType: (saveType || pkg && guessDependencyType(linkedPkg.name, pkg)) as DependenciesType,
})
const packagePath = normalize(path.relative(opts.prefix, linkFrom))
@@ -106,7 +105,12 @@ export default async function link (
// Linking should happen after removing orphans
// Otherwise would've been removed
for (const linkedPkg of linkedPkgs) {
await linkToModules(linkedPkg.pkg, linkedPkg.path, destModules, {saveType, prefix: opts.prefix})
// TODO: cover with test that linking reports with correct dependency types
const stu = specsToUpsert.find((s) => s.name === linkedPkg.pkg.name)
await linkToModules(linkedPkg.pkg, linkedPkg.path, destModules, {
prefix: opts.prefix,
saveType: stu && stu.saveType || saveType,
})
}
const linkToBin = maybeOpts && maybeOpts.linkToBin || path.join(destModules, '.bin')
@@ -144,7 +148,7 @@ function addLinkToShrinkwrap (
const id = `link:${opts.packagePath}`
let addedTo: DependenciesType | undefined
for (const depType of dependenciesTypes) {
if (opts.pkg && opts.pkg[depType]) {
if (!addedTo && opts.pkg && opts.pkg[depType] && opts.pkg[depType]![opts.linkedPkgName]) {
addedTo = depType
shr[depType] = shr[depType] || {}
shr[depType]![opts.linkedPkgName] = id

View File

@@ -59,7 +59,7 @@ function findSpec (depName: string, pkg: PackageJson): string | undefined {
return foundDepType && pkg[foundDepType]![depName]
}
function guessDependencyType (depName: string, pkg: PackageJson): DependenciesType | undefined {
export function guessDependencyType (depName: string, pkg: PackageJson): DependenciesType | undefined {
return dependenciesTypes
.find((deptype) => Boolean(pkg[deptype] && pkg[deptype]![depName]))
}

View File

@@ -1,7 +1,7 @@
import {PnpmOptions} from '@pnpm/types'
export type DependenciesType = 'dependencies' | 'devDependencies' | 'optionalDependencies'
export const dependenciesTypes: DependenciesType[] = ['dependencies', 'devDependencies', 'optionalDependencies']
export const dependenciesTypes: DependenciesType[] = ['optionalDependencies', 'dependencies', 'devDependencies']
export default function getSaveType (opts: PnpmOptions): DependenciesType | undefined {
if (opts.saveDev) return 'devDependencies'