From 7ef9364085d64e694d5bc994502e796feda72c86 Mon Sep 17 00:00:00 2001 From: Zoltan Kochan Date: Mon, 20 Aug 2018 21:18:33 +0300 Subject: [PATCH] fix(link): report correct dependency types when linking @pnpm/utils: BREAKING CHANGE: the order of dependency types changed. optionalDependencies is first --- packages/supi/src/api/install.ts | 4 +++- packages/supi/src/api/link.ts | 14 +++++++++----- packages/supi/src/save.ts | 2 +- packages/utils/src/getSaveType.ts | 2 +- 4 files changed, 14 insertions(+), 8 deletions(-) diff --git a/packages/supi/src/api/install.ts b/packages/supi/src/api/install.ts index 4db850593e..02e0ccb6ad 100644 --- a/packages/supi/src/api/install.ts +++ b/packages/supi/src/api/install.ts @@ -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 diff --git a/packages/supi/src/api/link.ts b/packages/supi/src/api/link.ts index 74a4aa89fd..f7406d3c6c 100644 --- a/packages/supi/src/api/link.ts +++ b/packages/supi/src/api/link.ts @@ -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 diff --git a/packages/supi/src/save.ts b/packages/supi/src/save.ts index 2227bf4da1..d6588cb34a 100644 --- a/packages/supi/src/save.ts +++ b/packages/supi/src/save.ts @@ -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])) } diff --git a/packages/utils/src/getSaveType.ts b/packages/utils/src/getSaveType.ts index 9c8ceff130..6bc656a6f3 100644 --- a/packages/utils/src/getSaveType.ts +++ b/packages/utils/src/getSaveType.ts @@ -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'